diff --git a/SSL/src/BusinessProcesses/Задание/Flowchart.scheme b/SSL/src/BusinessProcesses/Задание/Flowchart.scheme index 0068a63c8..800f8cbd9 100644 --- a/SSL/src/BusinessProcesses/Задание/Flowchart.scheme +++ b/SSL/src/BusinessProcesses/Задание/Flowchart.scheme @@ -44,7 +44,7 @@ AutoSize - СтартПередСтартом + diff --git a/SSL/src/BusinessProcesses/Задание/Forms/ДействиеВыполнить/Form.form b/SSL/src/BusinessProcesses/Задание/Forms/ДействиеВыполнить/Form.form index 2927e8f9e..c3e250a89 100644 --- a/SSL/src/BusinessProcesses/Задание/Forms/ДействиеВыполнить/Form.form +++ b/SSL/src/BusinessProcesses/Задание/Forms/ДействиеВыполнить/Form.form @@ -1183,7 +1183,6 @@ ru Результат выполнения задания: - ГруппаРезультатExtendedTooltip 192 @@ -1393,7 +1392,6 @@ true true true - UseIfNecessary auto true @@ -1554,7 +1552,7 @@ true - Auto + DontUse Auto @@ -1580,7 +1578,7 @@ true - Auto + DontUse Auto @@ -1603,7 +1601,7 @@ true - Auto + DontUse Auto @@ -1625,7 +1623,7 @@ Дополнительно - Auto + DontUse Auto @@ -1647,7 +1645,7 @@ ПринятьКИсполнению - Auto + DontUse Auto @@ -1669,7 +1667,7 @@ ОтменитьПринятиеКИсполнению - Auto + DontUse Auto @@ -1692,7 +1690,7 @@ FunctionalOption.ИзменятьЗаданияЗаднимЧислом - Auto + DontUse Auto diff --git a/SSL/src/BusinessProcesses/Задание/Forms/ДействиеВыполнить/Help/ru.html b/SSL/src/BusinessProcesses/Задание/Forms/ДействиеВыполнить/Help/ru.html index 09a441dad..2ad5f314a 100644 --- a/SSL/src/BusinessProcesses/Задание/Forms/ДействиеВыполнить/Help/ru.html +++ b/SSL/src/BusinessProcesses/Задание/Forms/ДействиеВыполнить/Help/ru.html @@ -28,7 +28,7 @@
  • Для того чтобы запустить один бизнес-процесс на основании другого, в задаче родительского бизнес-процесса выполните команду Создать на основании, из списка выберите вид бизнес-процесса, например, Задание. Заполните необходимые поля.
  • Напоминание

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

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

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

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

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

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

    См. также:

    diff --git a/SSL/src/BusinessProcesses/Задание/Forms/ДействиеВыполнить/Module.bsl b/SSL/src/BusinessProcesses/Задание/Forms/ДействиеВыполнить/Module.bsl index 57b55c636..cc4a05ac6 100644 --- a/SSL/src/BusinessProcesses/Задание/Forms/ДействиеВыполнить/Module.bsl +++ b/SSL/src/BusinessProcesses/Задание/Forms/ДействиеВыполнить/Module.bsl @@ -174,9 +174,9 @@ Элементы.ОписаниеРезультата.ТолькоПросмотр = Объект.Выполнена; Элементы.ИзменитьЗадание.Видимость = (Объект.Автор = Пользователи.ТекущийПользователь()); - Исполнитель = ?(Не Объект.Исполнитель.Пустая(), Объект.Исполнитель, Объект.РольИсполнителя); + Исполнитель = ?(ЗначениеЗаполнено(Объект.Исполнитель), Объект.Исполнитель, Объект.РольИсполнителя); -КонецПроцедуры +КонецПроцедуры &НаСервере Процедура ПрочитатьРеквизитыБизнесПроцесса() diff --git a/SSL/src/BusinessProcesses/Задание/Forms/ДействиеПроверить/Form.form b/SSL/src/BusinessProcesses/Задание/Forms/ДействиеПроверить/Form.form index c1d2d74ee..3cc2ef598 100644 --- a/SSL/src/BusinessProcesses/Задание/Forms/ДействиеПроверить/Form.form +++ b/SSL/src/BusinessProcesses/Задание/Forms/ДействиеПроверить/Form.form @@ -755,7 +755,6 @@ ru Содержание - true ГруппаСодержаниеExtendedTooltip @@ -1220,7 +1219,6 @@ ru Результат проверки задания: - true ГруппаРезультатExtendedTooltip @@ -1432,7 +1430,6 @@ true true true - UseIfNecessary auto true @@ -1627,7 +1624,7 @@ true - Auto + DontUse Auto @@ -1653,7 +1650,7 @@ true - Auto + DontUse Auto @@ -1676,7 +1673,7 @@ true - Auto + DontUse Auto @@ -1699,7 +1696,7 @@ FunctionalOption.ИзменятьЗаданияЗаднимЧислом - Auto + DontUse Auto @@ -1722,7 +1719,7 @@ true - Auto + DontUse Auto @@ -1744,7 +1741,7 @@ Дополнительно - Auto + DontUse Auto @@ -1766,7 +1763,7 @@ ПринятьКИсполнению - Auto + DontUse Auto @@ -1788,7 +1785,7 @@ ОтменитьПринятиеКИсполнению - Auto + DontUse Auto diff --git a/SSL/src/BusinessProcesses/Задание/Forms/ДействиеПроверить/Help/ru.html b/SSL/src/BusinessProcesses/Задание/Forms/ДействиеПроверить/Help/ru.html index 408af1bb8..756653e6f 100644 --- a/SSL/src/BusinessProcesses/Задание/Forms/ДействиеПроверить/Help/ru.html +++ b/SSL/src/BusinessProcesses/Задание/Forms/ДействиеПроверить/Help/ru.html @@ -27,9 +27,11 @@
  • Часто бизнес-процессы создаются не сами по себе, а в рамках продолжения задач других бизнес-процессов. Например, директор поручает руководителям подразделений подготовить ежегодный план-отчет. Руководители на основании этой задачи дают поручения своим исполнителям. Исполнители начинают работать, формировать отчеты, отправлять их на согласование и т.д. Таким образом, от первого поручения директора вырастает целая иерархия бизнес-процессов и задач.
  • -
    Для того чтобы запустить один бизнес-процесс на сновании другого, в задаче родительского бизнес-процесса выполните команду Создать на основании, из списка выберите вид бизнес-процесса, например, Задание. Заполните необходимые поля.
  • Напоминание

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

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

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

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

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

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

    @@ -38,4 +40,4 @@ \ No newline at end of file + \ No newline at end of file diff --git a/SSL/src/BusinessProcesses/Задание/Forms/ДействиеПроверить/Module.bsl b/SSL/src/BusinessProcesses/Задание/Forms/ДействиеПроверить/Module.bsl index ac1bb87b6..8e1b8d230 100644 --- a/SSL/src/BusinessProcesses/Задание/Forms/ДействиеПроверить/Module.bsl +++ b/SSL/src/BusinessProcesses/Задание/Forms/ДействиеПроверить/Module.bsl @@ -182,7 +182,7 @@ БизнесПроцессыИЗадачиСервер.ФормаЗадачиПриСозданииНаСервере(ЭтотОбъект, Объект, Элементы.ГруппаСостояние, Элементы.ДатаИсполнения); Элементы.ОписаниеРезультата.ТолькоПросмотр = Объект.Выполнена; - Исполнитель = ?(Не Объект.Исполнитель.Пустая(), Объект.Исполнитель, Объект.РольИсполнителя); + Исполнитель = ?(ЗначениеЗаполнено(Объект.Исполнитель), Объект.Исполнитель, Объект.РольИсполнителя); КонецПроцедуры diff --git a/SSL/src/BusinessProcesses/Задание/Forms/ФормаБизнесПроцесса/Form.form b/SSL/src/BusinessProcesses/Задание/Forms/ФормаБизнесПроцесса/Form.form index 33c3ca88a..d126347d3 100644 --- a/SSL/src/BusinessProcesses/Задание/Forms/ФормаБизнесПроцесса/Form.form +++ b/SSL/src/BusinessProcesses/Задание/Forms/ФормаБизнесПроцесса/Form.form @@ -1333,7 +1333,6 @@ true true true - UseIfNecessary auto true @@ -1404,23 +1403,6 @@ true - - ИспользоватьВнешниеЗадачиИБизнесПроцессы - - <key>ru</key> - <value>Использовать внешние задачи и бизнес процессы</value> - - 5 - - Boolean - - - true - - - true - - Остановить @@ -1440,7 +1422,7 @@ <name>Остановить</name> </handler> </action> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <formCommands> @@ -1462,7 +1444,7 @@ <name>ПродолжитьБизнесПроцесс</name> </handler> </action> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <formCommands> @@ -1484,7 +1466,7 @@ <name>ЗаписатьИЗакрыть</name> </handler> </action> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <commandInterface> diff --git a/SSL/src/BusinessProcesses/Задание/Forms/ФормаБизнесПроцесса/Help/ru.html b/SSL/src/BusinessProcesses/Задание/Forms/ФормаБизнесПроцесса/Help/ru.html index d821a490f..4641a3380 100644 --- a/SSL/src/BusinessProcesses/Задание/Forms/ФормаБизнесПроцесса/Help/ru.html +++ b/SSL/src/BusinessProcesses/Задание/Forms/ФормаБизнесПроцесса/Help/ru.html @@ -5,8 +5,9 @@ <ul><li><strong>Главная задача</strong> - заполняется программой автоматически, если бизнес-процесс является подчиненным. По ссылке в этом поле можно просмотреть данные о главном бизнес-процессе. </li><li><strong>Задание</strong> - напишите заголовок задания, который будет показан в списках бизнес-процессов. Поле является обязательным для заполнения. </li><li><strong>Важность</strong> - принимает значения <strong>Обычная</strong> (по умолчанию), <strong>Низкая</strong>, <strong>Высокая</strong>. Для того чтобы выделить бизнес-процесс из списка, или наоборот, указать, что выполнение этого бизнес-процесса может быть отложено, выберите соответствующее значение этого поля. -</li><li><strong>Исполнитель</strong> - выберите исполнителя из списка <a href="Catalog.Пользователи/Help">пользователей</a> программы или из списка <a href="CommonForm.ВыборИсполнителяБизнесПроцесса/Help">исполнителей</a>. Поля является обязательным для заполнения. -</li><li><strong>Срок</strong> - укажите дату и время, когда нужно выполнить задание. +<ul><a name="СтандартныеПодсистемы.Пользователи"> +<li><strong>Исполнитель</strong> - выберите исполнителя из списка <a href="Catalog.Пользователи/Help">пользователей</a> программы или из списка <a href="CommonForm.ВыборИсполнителяБизнесПроцесса/Help">исполнителей</a>. Поля является обязательным для заполнения. </li></a> +<li><strong>Срок</strong> - укажите дату и время, когда нужно выполнить задание. </li><li><strong>Предмет</strong> - автоматически проставляется документ программы, на основании которого создано задание. </li><li>В текстовом поле ниже можно при необходимости более подробно объяснить суть задания. Недоступно для подчиненных бизнес-процессов. </li><li> @@ -15,8 +16,9 @@ <div>назначить проверяющего из списка пользователей;</div> </li><li> <div>ввести <strong>Срок</strong> - дату и время, до которого надо проверить выполнение задания. Если срок не заполнен, то проверка не производится.</div></li></ul></li><li> -<div><strong>Автор</strong> - автоматически проставляется программой текущий <a href="Catalog.Пользователи.Form.ФормаЭлемента/Help">пользователь</a>. Автора можно назначить из списка <strong>Пользователи</strong>.</div> -</li><li> +<ul><a name="СтандартныеПодсистемы.Пользователи"> +<div><strong>Автор</strong> - автоматически проставляется программой текущий <a href="Catalog.Пользователи.Form.ФормаЭлемента/Help">пользователь</a>. Автора можно назначить из списка <strong>Пользователи</strong>.</div></a> +<li> <div><strong>Начато</strong> - дата ввода задания. Заполняется программой автоматически. Поле не подлежит редактированию.</div></li></ul><h3>Старт бизнес-процесса</h3> <ul><li>После того как задание заполнено, нажмите кнопку <strong>Стартовать и закрыть</strong>, для того чтобы сохранить <strong>Задание</strong>, начать бизнес-процесс и вернуться в программу. </li><li>Для того чтобы начать бизнес-процесс, можно также воспользоваться командой <strong>Старт</strong>. В этом случае программа сохранит задание, начнет бизнес-процесс, но задание останется открытым. @@ -24,8 +26,9 @@ <ul><li><a href="BusinessProcess.Задание.Form.ДействиеВыполнить/Help">выполнение задания</a>; <ul><li>после выполнения этой задачи в зависимости от настроек задание становится выполненным или формируется задача <a href="BusinessProcess.Задание.Form.ДействиеПроверить/Help">проверка выполнения</a>. </li></ul></li></ul></li><li>Для того чтобы записать черновик задания, но не стартовать его, нажмите <strong>Записать</strong>. Такое задание можно дозаполнить и стартовать позднее, в более подходящий момент времени из списка заданий или открыв задание.</li></ul><h3>Управление движением бизнес-процесса</h3> <ul><li>Для того чтобы <strong>Остановить</strong> или <strong>Продолжить</strong> бизнес-процесс, воспользуйтесь соответствующими командами (активна одна из команд). Остановленный бизнес-процесс в списке выделяется значком <img src="CommonPicture.ЗнакСтоп"></img>.</li></ul><h3>Просмотр карты маршрута</h3> -<ul><li>Выполните команду <strong>Еще</strong> <strong>- Карта маршрута</strong>, для того чтобы посмотреть бизнес-процесс в наглядной форме. +<ul><li>Нажмите кнопку <img src="StdPicture.BusinessProcess"></img> <strong>Открыть карту маршрута бизнес-процесса</strong>, для того чтобы посмотреть бизнес-процесс в наглядной форме. +</li><li>Также можно воспользоваться командой <strong>Еще</strong> <strong>- Карта маршрута</strong>. </li><li><a href="DataProcessor.КартаМаршрутаБизнесПроцесса/Help">Карта маршрута</a> описывает логику бизнес-процесса и весь его жизненный цикл в виде схематического изображения - последовательности прохождения точек маршрута.</li></ul><h3>Просмотр задач</h3> <ul><li>Для того чтобы просмотреть <a href="Task.ЗадачаИсполнителя.Form.ЗадачиПоБизнесПроцессу/Help">задачи</a>, из которых состоит данный бизнес-процесс, выполните команду <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 +<div><a href="v8help://frame/form_common">Работа с формами</a>.</div></li></ul></li></ul></li></ul></body></html> \ No newline at end of file diff --git a/SSL/src/BusinessProcesses/Задание/Forms/ФормаБизнесПроцесса/Module.bsl b/SSL/src/BusinessProcesses/Задание/Forms/ФормаБизнесПроцесса/Module.bsl index 7416c499d..42b71d6dc 100644 --- a/SSL/src/BusinessProcesses/Задание/Forms/ФормаБизнесПроцесса/Module.bsl +++ b/SSL/src/BusinessProcesses/Задание/Forms/ФормаБизнесПроцесса/Module.bsl @@ -367,9 +367,7 @@ ТекстСостояния = ?(Объект.Выполнено, НСтр("ru = 'Задание выполнено %1.'"), НСтр("ru = 'Задание отменено %1.'")); - Элементы.ДекорацияТекст.Заголовок = - СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ТекстСостояния, - ДатаЗавершенияСтрокой); + Элементы.ДекорацияТекст.Заголовок = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ТекстСостояния, ДатаЗавершенияСтрокой); Для каждого Элемент Из Элементы Цикл Если ТипЗнч(Элемент) <> Тип("ПолеФормы") И ТипЗнч(Элемент) <> Тип("ГруппаФормы") Тогда @@ -405,8 +403,6 @@ Элементы.ГлавнаяЗадача.Видимость = Ложь; КонецЕсли; - БизнесПроцессыИЗадачиСервер.ПриОпределенииИспользованияВнешнихЗадачИБизнесПроцессов(ИспользоватьВнешниеЗадачиИБизнесПроцессы); - УстановитьДоступностьПроверяющего(ЭтотОбъект); КонецПроцедуры @@ -437,26 +433,6 @@ ДоступностьПоля = Форма.Объект.НаПроверке; Форма.Элементы.ГруппаПроверяющий.Доступность = ДоступностьПоля; - Если Не Форма.ИспользоватьВнешниеЗадачиИБизнесПроцессы Тогда - Возврат; - КонецЕсли; - - Если ТипЗнч(Форма.Объект.Исполнитель) = Тип("СправочникСсылка.РолиИсполнителей") - И ЗначениеЗаполнено(Форма.Объект.Исполнитель) Тогда - - ВнешняяРоль = ВнешняяРольИсполнителя(Форма.Объект.Исполнитель); - - Если ВнешняяРоль Тогда - Форма.Объект.Проверяющий = ПредопределенноеЗначение("Справочник.Пользователи.ПустаяСсылка"); - Форма.Объект.НаПроверке = Ложь; - Форма.Элементы.ГруппаПроверка.Доступность = Ложь; - Иначе - Форма.Элементы.ГруппаПроверка.Доступность = Истина; - КонецЕсли; - Иначе - Форма.Элементы.ГруппаПроверка.Доступность = Истина; - КонецЕсли; - КонецПроцедуры &НаСервереБезКонтекста @@ -466,9 +442,4 @@ КонецФункции -&НаСервереБезКонтекста -Функция ВнешняяРольИсполнителя(Исполнитель) - Возврат ОбщегоНазначения.ЗначениеРеквизитаОбъекта(Исполнитель, "ВнешняяРоль"); -КонецФункции - #КонецОбласти diff --git a/SSL/src/BusinessProcesses/Задание/Forms/ФормаСписка/Form.form b/SSL/src/BusinessProcesses/Задание/Forms/ФормаСписка/Form.form index 2738bbf5a..46800e8b3 100644 --- a/SSL/src/BusinessProcesses/Задание/Forms/ФормаСписка/Form.form +++ b/SSL/src/BusinessProcesses/Задание/Forms/ФормаСписка/Form.form @@ -1351,7 +1351,6 @@ <autoFillCheck>true</autoFillCheck> <allowFormCustomize>true</allowFormCustomize> <enabled>true</enabled> - <verticalScroll>UseIfNecessary</verticalScroll> <showTitle>auto</showTitle> <showCloseButton>true</showCloseButton> <attributes> @@ -1527,7 +1526,7 @@ <name>Остановить</name> </handler> </action> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <formCommands> @@ -1549,7 +1548,7 @@ <name>ПродолжитьБизнесПроцесс</name> </handler> </action> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <commandInterface> diff --git a/SSL/src/BusinessProcesses/Задание/Help/ru.html b/SSL/src/BusinessProcesses/Задание/Help/ru.html index 98bfefb90..fcd1629b8 100644 --- a/SSL/src/BusinessProcesses/Задание/Help/ru.html +++ b/SSL/src/BusinessProcesses/Задание/Help/ru.html @@ -11,8 +11,9 @@ </li><li><strong>Задание</strong> - полное наименование. </li><li><strong>Срок исполнения</strong> - дата и время, к которому <strong>Задание</strong> должно быть выполнено. </li><li><strong>Завершено</strong> - дата и время выполнения.</li></ul><h3>Отборы</h3> -<ul><li>Программа автоматически отбирает задания по полю <strong>Автор</strong> для текущего <a href="Catalog.Пользователи.Form.ФормаЭлемента/Help">пользователя</a>. Можно отобрать задания по любому <strong>Автору</strong>, для этого выберите его из списка пользователей. -</li><li>Для отбора по полю <strong>Исполнитель</strong> также можно выбрать нужного из списка <a href="Catalog.Пользователи/Help">пользователей</a>, в случае ролевой адресации становится доступным список <a href="CommonForm.ВыборИсполнителяБизнесПроцесса/Help">исполнителей роли</a>.</li></ul><h3>Просмотр всех заданий</h3> +<ul><a name="СтандартныеПодсистемы.Пользователи"> +<li>Программа автоматически отбирает задания по полю <strong>Автор</strong> для текущего <a href="Catalog.Пользователи.Form.ФормаЭлемента/Help">пользователя</a>. Можно отобрать задания по любому <strong>Автору</strong>, для этого выберите его из списка пользователей. +</li><li>Для отбора по полю <strong>Исполнитель</strong> также можно выбрать нужного из списка <a href="Catalog.Пользователи/Help">пользователей</a>, в случае ролевой адресации становится доступным список <a href="CommonForm.ВыборИсполнителяБизнесПроцесса/Help">исполнителей роли</a>.</li></a></ul><h3>Просмотр всех заданий</h3> <ul><li>Установите соответствующие флажки, для того чтобы <strong>Показывать завершенные </strong>и <strong>остановленные</strong> задания. По умолчанию флажки сняты.</li></ul><h3>Ввод нового задания</h3> <ul><li>Нажмите <strong>Создать</strong>, заполните необходимые <a href="BusinessProcess.Задание.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/BusinessProcesses/Задание/ManagerModule.bsl b/SSL/src/BusinessProcesses/Задание/ManagerModule.bsl index f7aad8f37..034790645 100644 --- a/SSL/src/BusinessProcesses/Задание/ManagerModule.bsl +++ b/SSL/src/BusinessProcesses/Задание/ManagerModule.bsl @@ -19,15 +19,9 @@ // Функция ФормаВыполненияЗадачи(ЗадачаСсылка, ТочкаМаршрутаБизнесПроцесса) Экспорт - ЗадачаВнешняя = Ложь; - БизнесПроцессыИЗадачиСервер.ПриОпределенииВнешнейЗадачи(ЗадачаСсылка, ЗадачаВнешняя); - Если Не ЗадачаВнешняя Тогда - ИмяФормы = "БизнесПроцесс.Задание.Форма.Действие" + ТочкаМаршрутаБизнесПроцесса.Имя; - КонецЕсли; - Результат = Новый Структура; Результат.Вставить("ПараметрыФормы", Новый Структура("Ключ", ЗадачаСсылка)); - Результат.Вставить("ИмяФормы", ИмяФормы); + Результат.Вставить("ИмяФормы", "БизнесПроцесс.Задание.Форма.Действие" + ТочкаМаршрутаБизнесПроцесса.Имя); Возврат Результат; КонецФункции @@ -42,8 +36,8 @@ БизнесПроцессОбъект = ЗадачаСсылка.БизнесПроцесс.ПолучитьОбъект(); ЗаблокироватьДанныеДляРедактирования(БизнесПроцессОбъект.Ссылка); - БизнесПроцессОбъект.РезультатВыполнения = РезультатВыполненияПриПеренаправлении(ЗадачаСсылка) + - БизнесПроцессОбъект.РезультатВыполнения; + БизнесПроцессОбъект.РезультатВыполнения = РезультатВыполненияПриПеренаправлении(ЗадачаСсылка) + + БизнесПроцессОбъект.РезультатВыполнения; УстановитьПривилегированныйРежим(Истина); БизнесПроцессОбъект.Записать(); @@ -109,11 +103,7 @@ Если Форма.Элементы.Найти("РезультатВыполнения") <> Неопределено И Форма.Элементы.Найти("ИсторияВыполнения") <> Неопределено Тогда - Если ПустаяСтрока(Форма.ЗаданиеРезультатВыполнения) Тогда - Форма.Элементы.ИсторияВыполнения.Картинка = Новый Картинка(); - Иначе - Форма.Элементы.ИсторияВыполнения.Картинка = БиблиотекаКартинок.Комментарий; - КонецЕсли; + Форма.Элементы.ИсторияВыполнения.Картинка = ОбщегоНазначенияКлиентСервер.КартинкаКомментария(Форма.ЗаданиеРезультатВыполнения); КонецЕсли; Форма.Элементы.Предмет.Гиперссылка = Форма.Объект.Предмет <> Неопределено И НЕ Форма.Объект.Предмет.Пустая(); @@ -129,11 +119,7 @@ Комментарий = СокрЛП(ЗадачаСсылка.РезультатВыполнения); Комментарий = ?(ПустаяСтрока(Комментарий), "", Комментарий + Символы.ПС); - Результат = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(СтрокаФормат, - ЗадачаСсылка.ДатаИсполнения, - ЗадачаСсылка.Исполнитель, - Комментарий); - + Результат = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(СтрокаФормат, ЗадачаСсылка.ДатаИсполнения, ЗадачаСсылка.Исполнитель, Комментарий); Возврат Результат; КонецФункции diff --git a/SSL/src/BusinessProcesses/Задание/ObjectModule.bsl b/SSL/src/BusinessProcesses/Задание/ObjectModule.bsl index 3ace3dad0..72da26617 100644 --- a/SSL/src/BusinessProcesses/Задание/ObjectModule.bsl +++ b/SSL/src/BusinessProcesses/Задание/ObjectModule.bsl @@ -7,49 +7,59 @@ // См. описание в комментарии к одноименной процедуре в модуле УправлениеДоступом. Процедура ЗаполнитьНаборыЗначенийДоступа(Таблица) Экспорт - // Логика ограничения: - // Чтения: Автор ИЛИ Исполнитель ИЛИ Проверяющий ИЛИ Предмет - // Изменения: Автор + // Логика ограничения для + // - чтения: Автор ИЛИ Исполнитель (с учетом адресации) ИЛИ Проверяющий (с учетом адресации) ИЛИ Предмет + // - изменения: Автор // Если предмет не задан (т.е. бизнес-процесс без основания), // тогда предмет не участвует в логике ограничения. - // Чтение, Изменение: набор №1. + // Чтение, Изменение: набор № 1. Строка = Таблица.Добавить(); Строка.НомерНабора = 1; Строка.Чтение = Истина; Строка.Изменение = Истина; Строка.ЗначениеДоступа = Автор; - // Чтение: набор №2. + // Чтение: набор № 2. Строка = Таблица.Добавить(); Строка.НомерНабора = 2; Строка.Чтение = Истина; - Строка.ЗначениеДоступа = Исполнитель; + Строка.ЗначениеДоступа = ГруппаИсполнителейЗадач; - // Чтение: набор №3. + // Чтение: набор № 3. Строка = Таблица.Добавить(); Строка.НомерНабора = 3; Строка.Чтение = Истина; - Строка.ЗначениеДоступа = Проверяющий; + Строка.ЗначениеДоступа = ГруппаИсполнителейЗадачПроверяющий; - // Чтение: набор "№4". - Если ЗначениеЗаполнено(Предмет) Тогда - МодульУправлениеДоступом = ОбщегоНазначения.ОбщийМодуль("УправлениеДоступом"); - Если ТипЗнч(Предмет) = Тип("СправочникСсылка.Пользователи") Тогда - Строка = Таблица.Добавить(); - Строка.НомерНабора = 4; - Строка.Чтение = Истина; - Строка.ЗначениеДоступа = Предмет; + // Чтение: набор № 4. + МодульУправлениеДоступом = ОбщегоНазначения.ОбщийМодуль("УправлениеДоступом"); + Если ТипЗнч(Предмет) = Тип("СправочникСсылка.Пользователи") Тогда + + Строка = Таблица.Добавить(); + Строка.НомерНабора = 4; + Строка.Чтение = Истина; + Строка.ЗначениеДоступа = Предмет; + + ИначеЕсли ЗначениеЗаполнено(Предмет) И МодульУправлениеДоступом.ВозможноЗаполнитьНаборыЗначенийДоступа(Предмет) Тогда - ИначеЕсли МодульУправлениеДоступом.ВозможноЗаполнитьНаборыЗначенийДоступа(Предмет) Тогда - - НаборыПредмета = МодульУправлениеДоступом.ТаблицаНаборыЗначенийДоступа(); - МодульУправлениеДоступом.ЗаполнитьНаборыЗначенийДоступа(Предмет, НаборыПредмета, Ссылка); - НаборыПредмета = НаборыПредмета.Скопировать(НаборыПредмета.НайтиСтроки(Новый Структура("Чтение", Истина))); - - МодульУправлениеДоступом.ДобавитьНаборыЗначенийДоступа(Таблица, НаборыПредмета); - КонецЕсли; + НаборыГруппыДоступаИсполнителей = МодульУправлениеДоступом.ТаблицаНаборыЗначенийДоступа(); + Строка = НаборыГруппыДоступаИсполнителей.Добавить(); + Строка.Чтение = Истина; + Строка.ЗначениеДоступа = ГруппаИсполнителейЗадач; + + Строка = НаборыГруппыДоступаИсполнителей.Добавить(); + Строка.Чтение = Истина; + Строка.ЗначениеДоступа = ГруппаИсполнителейЗадачПроверяющий; + + НаборыПредмета = МодульУправлениеДоступом.ТаблицаНаборыЗначенийДоступа(); + МодульУправлениеДоступом.ЗаполнитьНаборыЗначенийДоступа(Предмет, НаборыПредмета, Ссылка); + НаборыПредмета = НаборыПредмета.Скопировать(НаборыПредмета.НайтиСтроки(Новый Структура("Чтение", Истина))); + + МодульУправлениеДоступом.ДобавитьНаборыЗначенийДоступа(НаборыПредмета, НаборыГруппыДоступаИсполнителей, Истина); + МодульУправлениеДоступом.ДобавитьНаборыЗначенийДоступа(Таблица, НаборыПредмета); + КонецЕсли; КонецПроцедуры @@ -113,23 +123,6 @@ Процедура ПередЗаписью(Отказ) - // Даже в случае обмена данными делаем проверку на запись завершенного. - Если ДополнительныеСвойства.Свойство("ОбменВнешнимиЗаданиями") Тогда - - Если Не ЗадачаИсточник.Пустая() Тогда - БылЗавершен = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(ЭтотОбъект.Ссылка, "Завершен"); - Если Завершен = Истина И БылЗавершен = Ложь Тогда - ОбработчикиСобытия = ОбщегоНазначения.ОбработчикиСлужебногоСобытия( - "СтандартныеПодсистемы.БизнесПроцессыИЗадачи\ПриВыполненииЗадачиИсточника"); - - Для каждого Обработчик Из ОбработчикиСобытия Цикл - Обработчик.Модуль.ПриВыполненииЗадачиИсточника(ЭтотОбъект); - КонецЦикла; - КонецЕсли; - КонецЕсли; - - КонецЕсли; - Если ОбменДанными.Загрузка Тогда Возврат; КонецЕсли; @@ -138,37 +131,24 @@ АвторСтрокой = Строка(Автор); КонецЕсли; - ИспользоватьВнешниеЗадачиИБизнесПроцессы = Ложь; - БизнесПроцессыИЗадачиСервер.ПриОпределенииИспользованияВнешнихЗадачИБизнесПроцессов(ИспользоватьВнешниеЗадачиИБизнесПроцессы); - Если ИспользоватьВнешниеЗадачиИБизнесПроцессы Тогда - Если ТипЗнч(Исполнитель) = Тип("СправочникСсылка.РолиИсполнителей") И Не Исполнитель.Пустая() - И ОбщегоНазначения.ЗначениеРеквизитаОбъекта(Исполнитель, "ВнешняяРоль") = Истина Тогда - - Если НаПроверке = Истина Тогда - // Проверяющий должен быть внешней ролью. - Если ТипЗнч(Проверяющий) = Тип("СправочникСсылка.РолиИсполнителей") И Не Проверяющий.Пустая() - И ОбщегоНазначения.ЗначениеРеквизитаОбъекта(Проверяющий, "ВнешняяРоль") = Ложь Тогда - Отказ = Истина; - КонецЕсли; - - // Проверяющий не должен быть пользователем. - Если ТипЗнч(Проверяющий) = Тип("СправочникСсылка.Пользователи") И Не Проверяющий.Пустая() Тогда - Отказ = Истина; - КонецЕсли; - КонецЕсли; - - КонецЕсли; - КонецЕсли; - БизнесПроцессыИЗадачиСервер.ПроверитьПраваНаИзменениеСостоянияБизнесПроцесса(ЭтотОбъект); - Если ЗначениеЗаполнено(ГлавнаяЗадача) И - ОбщегоНазначения.ЗначениеРеквизитаОбъекта(ГлавнаяЗадача, "БизнесПроцесс") = ЭтотОбъект.Ссылка Тогда + Если ЗначениеЗаполнено(ГлавнаяЗадача) + И ОбщегоНазначения.ЗначениеРеквизитаОбъекта(ГлавнаяЗадача, "БизнесПроцесс") = ЭтотОбъект.Ссылка Тогда ВызватьИсключение НСтр("ru = 'Собственная задача бизнес-процесса не может быть указана как главная задача.'"); КонецЕсли; + УстановитьПривилегированныйРежим(Истина); + ГруппаИсполнителейЗадач = ?(ТипЗнч(Исполнитель) = Тип("СправочникСсылка.РолиИсполнителей"), + БизнесПроцессыИЗадачиСервер.ГруппаИсполнителейЗадач(Исполнитель, ОсновнойОбъектАдресации, ДополнительныйОбъектАдресации), + Исполнитель); + ГруппаИсполнителейЗадачПроверяющий = ?(ТипЗнч(Проверяющий) = Тип("СправочникСсылка.РолиИсполнителей"), + БизнесПроцессыИЗадачиСервер.ГруппаИсполнителейЗадач(Проверяющий, ОсновнойОбъектАдресацииПроверяющий, ДополнительныйОбъектАдресацииПроверяющий), + Проверяющий); + УстановитьПривилегированныйРежим(Ложь); + КонецПроцедуры Процедура ПриЗаписи(Отказ) @@ -186,10 +166,10 @@ Процедура ОбработкаЗаполнения(ДанныеЗаполнения, СтандартнаяОбработка) Если ЭтоНовый() Тогда - Автор = Пользователи.ТекущийПользователь(); + Автор = Пользователи.АвторизованныйПользователь(); Важность = Перечисления.ВариантыВажностиЗадачи.Обычная; НаПроверке = Истина; - Проверяющий = Пользователи.ТекущийПользователь(); + Проверяющий = Пользователи.АвторизованныйПользователь(); Состояние = Перечисления.СостоянияБизнесПроцессов.Активен; // Для возможности автоподбора в незаполненном поле Исполнитель. Исполнитель = Справочники.Пользователи.ПустаяСсылка(); @@ -246,6 +226,7 @@ Задача.РольИсполнителя = Исполнитель; Задача.ОсновнойОбъектАдресации = ОсновнойОбъектАдресации; Задача.ДополнительныйОбъектАдресации = ДополнительныйОбъектАдресации; + Задача.Исполнитель = Неопределено; Иначе Задача.Исполнитель = Исполнитель; КонецЕсли; @@ -264,45 +245,6 @@ Возврат; КонецЕсли; - ИспользоватьВнешниеЗадачиИБизнесПроцессы = Ложь; - БизнесПроцессыИЗадачиСервер.ПриОпределенииИспользованияВнешнихЗадачИБизнесПроцессов(ИспользоватьВнешниеЗадачиИБизнесПроцессы); - - Если ИспользоватьВнешниеЗадачиИБизнесПроцессы Тогда - - Если ТипЗнч(Исполнитель) = Тип("СправочникСсылка.РолиИсполнителей") - И ОбщегоНазначения.ЗначениеРеквизитаОбъекта(Исполнитель, "ВнешняяРоль") = Истина Тогда - - СтрокаHTML = ""; - - ОбработчикиСобытия = ОбщегоНазначения.ОбработчикиСлужебногоСобытия( - "СтандартныеПодсистемы.БизнесПроцессыИЗадачи\ПриОпределенииПредставленияПредметаВнешнейЗадачи"); - - Для каждого Обработчик Из ОбработчикиСобытия Цикл - Обработчик.Модуль.ПриОпределенииПредставленияПредметаВнешнейЗадачи(Предмет, СтрокаHTML); - КонецЦикла; - - СодержаниеПредмета = Новый ХранилищеЗначения(СтрокаHTML, Новый СжатиеДанных()); - - // Заполняем список файлов - МассивФайлов = Неопределено; - - ОбработчикиСобытия = ОбщегоНазначения.ОбработчикиСлужебногоСобытия( - "СтандартныеПодсистемы.БизнесПроцессыИЗадачи\ПриОпределенииСпискаФайлов"); - - Для каждого Обработчик Из ОбработчикиСобытия Цикл - Обработчик.Модуль.ПриОпределенииСпискаФайлов(Предмет, МассивФайлов); - КонецЦикла; - - Если МассивФайлов <> Неопределено Тогда - Для Каждого Элемент Из МассивФайлов Цикл - НовыйФайл = РаботаСФайламиСлужебныйВызовСервера.СкопироватьФайл(Элемент, Ссылка); - КонецЦикла; - КонецЕсли; - - КонецЕсли; - - КонецЕсли; - КонецПроцедуры Процедура ВыполнитьПриВыполнении(ТочкаМаршрутаБизнесПроцесса, Задача, Отказ) @@ -366,22 +308,6 @@ КонецПроцедуры -Процедура СтартПередСтартом(ТочкаМаршрутаБизнесПроцесса, Отказ) - - ИспользоватьВнешниеЗадачиИБизнесПроцессы = Ложь; - БизнесПроцессыИЗадачиСервер.ПриОпределенииИспользованияВнешнихЗадачИБизнесПроцессов(ИспользоватьВнешниеЗадачиИБизнесПроцессы); - - Если ИспользоватьВнешниеЗадачиИБизнесПроцессы Тогда - Если ТипЗнч(Исполнитель) = Тип("СправочникСсылка.РолиИсполнителей") И Не Исполнитель.Пустая() - И ОбщегоНазначения.ЗначениеРеквизитаОбъекта(Исполнитель, "ВнешняяРоль") = Истина Тогда - - ВнешнееЗадание = Истина; - - КонецЕсли; - КонецЕсли; - -КонецПроцедуры - #КонецОбласти #Область СлужебныеПроцедурыИФункции @@ -459,11 +385,7 @@ "РезультатВыполнения,ДатаИсполнения,Исполнитель"); Комментарий = СокрЛП(ЗадачаДанные.РезультатВыполнения); Комментарий = ?(ПустаяСтрока(Комментарий), "", Комментарий + Символы.ПС); - Результат = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(СтрокаФормат, - ЗадачаДанные.ДатаИсполнения, - ЗадачаДанные.Исполнитель, - Комментарий); - + Результат = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(СтрокаФормат, ЗадачаДанные.ДатаИсполнения, ЗадачаДанные.Исполнитель, Комментарий); Возврат Результат; КонецФункции @@ -488,11 +410,7 @@ "РезультатВыполнения,ДатаИсполнения,Исполнитель"); Комментарий = СокрЛП(ЗадачаДанные.РезультатВыполнения); Комментарий = ?(ПустаяСтрока(Комментарий), "", Комментарий + Символы.ПС); - Результат = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(СтрокаФормат, - ЗадачаДанные.ДатаИсполнения, - ЗадачаДанные.Исполнитель, - Комментарий); - + Результат = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(СтрокаФормат, ЗадачаДанные.ДатаИсполнения, ЗадачаДанные.Исполнитель, Комментарий); Возврат Результат; КонецФункции diff --git a/SSL/src/BusinessProcesses/Задание/Задание.mdo b/SSL/src/BusinessProcesses/Задание/Задание.mdo index 8bf99c314..b31fdea09 100644 --- a/SSL/src/BusinessProcesses/Задание/Задание.mdo +++ b/SSL/src/BusinessProcesses/Задание/Задание.mdo @@ -134,6 +134,7 @@ <value>Автор</value> </synonym> <type> + <types>CatalogRef.ВнешниеПользователи</types> <types>CatalogRef.Пользователи</types> </type> <toolTip> @@ -142,7 +143,6 @@ </toolTip> <minValue xsi:type="core:UndefinedValue"/> <maxValue xsi:type="core:UndefinedValue"/> - <quickChoice>DontUse</quickChoice> <createOnInput>Use</createOnInput> <fillValue xsi:type="core:ReferenceValue"> <value>Catalog.Пользователи.EmptyRef</value> @@ -248,6 +248,7 @@ <value>Исполнитель</value> </synonym> <type> + <types>CatalogRef.ВнешниеПользователи</types> <types>CatalogRef.РолиИсполнителей</types> <types>CatalogRef.Пользователи</types> </type> @@ -385,6 +386,7 @@ <value>Проверяющий</value> </synonym> <type> + <types>CatalogRef.ВнешниеПользователи</types> <types>CatalogRef.РолиИсполнителей</types> <types>CatalogRef.Пользователи</types> </type> @@ -678,6 +680,50 @@ <fullTextSearch>Use</fullTextSearch> <dataHistory>Use</dataHistory> </attributes> + <attributes uuid="8c576405-29c1-46b1-ab2e-40e52c21cab0"> + <name>ГруппаИсполнителейЗадач</name> + <synonym> + <key>ru</key> + <value>Группа исполнителей задач</value> + </synonym> + <type> + <types>CatalogRef.ВнешниеПользователи</types> + <types>CatalogRef.Пользователи</types> + <types>CatalogRef.ГруппыИсполнителейЗадач</types> + </type> + <toolTip> + <key>ru</key> + <value>Сведения для ограничения прав доступа (служебный реквизит)</value> + </toolTip> + <minValue xsi:type="core:UndefinedValue"/> + <maxValue xsi:type="core:UndefinedValue"/> + <fillValue xsi:type="core:UndefinedValue"/> + <indexing>Index</indexing> + <fullTextSearch>Use</fullTextSearch> + <dataHistory>Use</dataHistory> + </attributes> + <attributes uuid="b33a89da-8589-4902-83fa-6545e5fce23e"> + <name>ГруппаИсполнителейЗадачПроверяющий</name> + <synonym> + <key>ru</key> + <value>Группа исполнителей задач (проверяющий)</value> + </synonym> + <type> + <types>CatalogRef.ВнешниеПользователи</types> + <types>CatalogRef.Пользователи</types> + <types>CatalogRef.ГруппыИсполнителейЗадач</types> + </type> + <toolTip> + <key>ru</key> + <value>Сведения для ограничения прав доступа (служебный реквизит)</value> + </toolTip> + <minValue xsi:type="core:UndefinedValue"/> + <maxValue xsi:type="core:UndefinedValue"/> + <fillValue xsi:type="core:UndefinedValue"/> + <indexing>Index</indexing> + <fullTextSearch>Use</fullTextSearch> + <dataHistory>Use</dataHistory> + </attributes> <forms uuid="f0620d5a-e1fe-419f-af37-e0f462f97e8d"> <name>ДействиеВыполнить</name> <synonym> diff --git a/SSL/src/Catalogs/Валюты/Forms/ПодборВалютИзКлассификатора/Form.form b/SSL/src/Catalogs/Валюты/Forms/ПодборВалютИзКлассификатора/Form.form index 135dec013..2d41d5b02 100644 --- a/SSL/src/Catalogs/Валюты/Forms/ПодборВалютИзКлассификатора/Form.form +++ b/SSL/src/Catalogs/Валюты/Forms/ПодборВалютИзКлассификатора/Form.form @@ -558,7 +558,6 @@ <autoFillCheck>true</autoFillCheck> <allowFormCustomize>true</allowFormCustomize> <enabled>true</enabled> - <verticalScroll>UseIfNecessary</verticalScroll> <showTitle>auto</showTitle> <showCloseButton>true</showCloseButton> <attributes> @@ -707,7 +706,7 @@ <name>ВыбратьВыполнить</name> </handler> </action> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <commandInterface> diff --git a/SSL/src/Catalogs/Валюты/Forms/ФормаСписка/Form.form b/SSL/src/Catalogs/Валюты/Forms/ФормаСписка/Form.form index 4020de4d1..7904ac308 100644 --- a/SSL/src/Catalogs/Валюты/Forms/ФормаСписка/Form.form +++ b/SSL/src/Catalogs/Валюты/Forms/ФормаСписка/Form.form @@ -643,7 +643,6 @@ <autoFillCheck>true</autoFillCheck> <allowFormCustomize>true</allowFormCustomize> <enabled>true</enabled> - <verticalScroll>UseIfNecessary</verticalScroll> <showTitle>auto</showTitle> <showCloseButton>true</showCloseButton> <attributes> @@ -716,7 +715,7 @@ <name>ПодборИзОКВ</name> </handler> </action> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <formCommands> @@ -739,7 +738,7 @@ </handler> </action> <functionalOptions>FunctionalOption.СтандартныеПодсистемыВЛокальномРежиме</functionalOptions> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <commandInterface> diff --git a/SSL/src/Catalogs/Валюты/Forms/ФормаСписка/Module.bsl b/SSL/src/Catalogs/Валюты/Forms/ФормаСписка/Module.bsl index 6f263c1d2..e7f1b75d8 100644 --- a/SSL/src/Catalogs/Валюты/Forms/ФормаСписка/Module.bsl +++ b/SSL/src/Catalogs/Валюты/Forms/ФормаСписка/Module.bsl @@ -9,15 +9,11 @@ КонецЕсли; ДатаКурса = НачалоДня(ТекущаяДатаСеанса()); - Элементы.Курс.Заголовок = - СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Курс на %1"), - Формат(ТекущаяДатаСеанса(), "ДЛФ=DD")); - Элементы.Курс.Подсказка = Элементы.Курс.Заголовок; Список.Параметры.УстановитьЗначениеПараметра ("КонецПериода", ДатаКурса); Элементы.Валюты.РежимВыбора = Параметры.РежимВыбора; - Если Не Пользователи.РолиДоступны("ДобавлениеИзменениеБазовойНСИ") Тогда + Если Не Пользователи.РолиДоступны("ДобавлениеИзменениеКурсовВалют") Тогда Элементы.ФормаПодборИзОКВ.Видимость = Ложь; Элементы.ФормаЗагрузитьКурсыВалют.Видимость = Ложь; КонецЕсли; diff --git a/SSL/src/Catalogs/Валюты/Forms/ФормаЭлемента/Form.form b/SSL/src/Catalogs/Валюты/Forms/ФормаЭлемента/Form.form index 298305573..e0ed33ee6 100644 --- a/SSL/src/Catalogs/Валюты/Forms/ФормаЭлемента/Form.form +++ b/SSL/src/Catalogs/Валюты/Forms/ФормаЭлемента/Form.form @@ -1607,6 +1607,7 @@ <key>ru</key> <value>Странницы</value> </toolTip> + <verticalStretch>true</verticalStretch> <extendedTooltip> <name>СтранницыExtendedTooltip</name> <id>73</id> @@ -1679,7 +1680,6 @@ <autoFillCheck>true</autoFillCheck> <allowFormCustomize>true</allowFormCustomize> <enabled>true</enabled> - <verticalScroll>UseIfNecessary</verticalScroll> <showTitle>auto</showTitle> <showCloseButton>true</showCloseButton> <attributes> diff --git a/SSL/src/Catalogs/Валюты/Forms/ФормаЭлемента/Module.bsl b/SSL/src/Catalogs/Валюты/Forms/ФормаЭлемента/Module.bsl index 1b8e992db..0475ab3ba 100644 --- a/SSL/src/Catalogs/Валюты/Forms/ФормаЭлемента/Module.bsl +++ b/SSL/src/Catalogs/Валюты/Forms/ФормаЭлемента/Module.bsl @@ -282,7 +282,7 @@ Процедура ПодготовитьДанныеВыбораПодчиненнойВалюты(ДанныеВыбора, Ссылка) // Подготавливает список выбора для подчиненной валюты таким образом, - // что бы в список не попала сама подчиненная валюта. + // чтобы в список не попала сама подчиненная валюта. ДанныеВыбора = Новый СписокЗначений; diff --git a/SSL/src/Catalogs/Валюты/ObjectModule.bsl b/SSL/src/Catalogs/Валюты/ObjectModule.bsl index 81f03df05..b2786418e 100644 --- a/SSL/src/Catalogs/Валюты/ObjectModule.bsl +++ b/SSL/src/Catalogs/Валюты/ObjectModule.bsl @@ -18,7 +18,7 @@ ЗависимыеВалюты = Запрос.Выполнить().Выгрузить().ВыгрузитьКолонку("СимвольныйКод"); Для Каждого Валюта Из ЗависимыеВалюты Цикл - Если Найти(ФормулаРасчетаКурса, Валюта) > 0 Тогда + Если СтрНайти(ФормулаРасчетаКурса, Валюта) > 0 Тогда Отказ = Истина; КонецЕсли; КонецЦикла; @@ -144,11 +144,11 @@ КонецЦикла; - НаборЗаписей.ДополнительныеСвойства.Вставить("ОтключитьКонтрольПодчиненныхВалют", Истина); + НаборЗаписей.ДополнительныеСвойства.Вставить("ОтключитьКонтрольПодчиненныхВалют"); Если ПодчиненнаяВалюта.ДополнительныеСвойства.Свойство("ЭтоНовый") Тогда НаборЗаписей.ДополнительныеСвойства.Вставить("ПропуститьПроверкуЗапретаИзменения"); КонецЕсли; - + НаборЗаписей.Записать(); ИначеЕсли СпособУстановкиКурса = Перечисления.СпособыУстановкиКурсаВалюты.РасчетПоФормуле Тогда @@ -172,7 +172,7 @@ ВызватьИсключение ТекстОшибки; КонецЕсли; - ОбновленныеПериоды = Новый Соответствие; // Кеш для однократного пересчета курса за один и тот же период. + ОбновленныеПериоды = Новый Соответствие; // Кэш для однократного пересчета курса за один и тот же период. // Перезаписать курсы основных валют для обновления курса валюты ПодчиненнаяВалюта. Для каждого ЗаписьОсновнойВалюты Из ОсновныеВалюты Цикл НаборЗаписей = РегистрыСведений.КурсыВалют.СоздатьНаборЗаписей(); diff --git a/SSL/src/Catalogs/Валюты/Templates/ОбщероссийскийКлассификаторВалют/Template.txt b/SSL/src/Catalogs/Валюты/Templates/ОбщероссийскийКлассификаторВалют/Template.txt index 2a346a1fd..ea796f609 100644 --- a/SSL/src/Catalogs/Валюты/Templates/ОбщероссийскийКлассификаторВалют/Template.txt +++ b/SSL/src/Catalogs/Валюты/Templates/ОбщероссийскийКлассификаторВалют/Template.txt @@ -27,7 +27,7 @@ <Item Code="170" CodeSymbol="COP" Name="Колумбийский песо" Description="Колумбия" RBCLoading="ложь"/> <Item Code="174" CodeSymbol="KMF" Name="Франк Комор" Description="Коморы" RBCLoading="ложь"/> <Item Code="188" CodeSymbol="CRC" Name="Костариканский колон" Description="Коста - Рика" RBCLoading="ложь"/> - <Item Code="191" CodeSymbol="HRK" Name="Хорватская куна" Description="Хорватия" RBCLoading="ложь"/> + <Item Code="191" CodeSymbol="HRK" Name="Куна" Description="Хорватия" RBCLoading="ложь"/> <Item Code="192" CodeSymbol="CUP" Name="Кубинское песо" Description="Куба" RBCLoading="ложь"/> <Item Code="203" CodeSymbol="CZK" Name="Чешская крона" Description="Чешская Республика" RBCLoading="истина"/> <Item Code="208" CodeSymbol="DKK" Name="Датская крона" Description="Гренландия; Дания; Фарерские острова" RBCLoading="истина"/> @@ -47,7 +47,7 @@ <Item Code="340" CodeSymbol="HNL" Name="Лемпира" Description="Гондурас" RBCLoading="ложь"/> <Item Code="344" CodeSymbol="HKD" Name="Гонконгский доллар" Description="Гонконг" RBCLoading="ложь"/> <Item Code="348" CodeSymbol="HUF" Name="Форинт" Description="Венгрия" RBCLoading="истина"/> - <Item Code="352" CodeSymbol="ISK" Name="Исландская крона" Description="Исландия" RBCLoading="истина"/> + <Item Code="352" CodeSymbol="ISK" Name="Исландская крона" Description="Исландия" RBCLoading="ложь"/> <Item Code="356" CodeSymbol="INR" Name="Индийская рупия" Description="Бутан; Индия" RBCLoading="истина"/> <Item Code="360" CodeSymbol="IDR" Name="Рупия" Description="Индонезия" RBCLoading="ложь"/> <Item Code="364" CodeSymbol="IRR" Name="Иранский риал" Description="Иран (Исламская Республика)" RBCLoading="ложь"/> @@ -60,10 +60,10 @@ <Item Code="404" CodeSymbol="KES" Name="Кенийский шиллинг" Description="Кения" RBCLoading="ложь"/> <Item Code="408" CodeSymbol="KPW" Name="Северокорейская вона" Description="Корея, народно-демократическая республика" RBCLoading="ложь"/> <Item Code="410" CodeSymbol="KRW" Name="Вона" Description="Корея, республика" RBCLoading="истина"/> - <Item Code="414" CodeSymbol="KWD" Name="Кувейтский динар" Description="Кувейт" RBCLoading="истина"/> + <Item Code="414" CodeSymbol="KWD" Name="Кувейтский динар" Description="Кувейт" RBCLoading="ложь"/> <Item Code="417" CodeSymbol="KGS" Name="Сом" Description="Киргизия" RBCLoading="истина"/> <Item Code="418" CodeSymbol="LAK" Name="Кип" Description="Лаосская Народно-Демократическая Республика " RBCLoading="ложь"/> - <Item Code="422" CodeSymbol="LBP" Name="Ливанский фунт" Description="Ливан" RBCLoading="истина"/> + <Item Code="422" CodeSymbol="LBP" Name="Ливанский фунт" Description="Ливан" RBCLoading="ложь"/> <Item Code="426" CodeSymbol="LSL" Name="Лоти" Description="Лесото" RBCLoading="ложь"/> <Item Code="430" CodeSymbol="LRD" Name="Либерийский доллар" Description="Либерия" RBCLoading="ложь"/> <Item Code="434" CodeSymbol="LYD" Name="Ливийский динар" Description="Ливия" RBCLoading="ложь"/> @@ -136,7 +136,7 @@ <Item Code="941" CodeSymbol="RSD" Name="Сербский динар" Description="Сербия" RBCLoading="ложь"/> <Item Code="943" CodeSymbol="MZN" Name="Мозамбикский метикал" Description="Мозамбик" RBCLoading="ложь"/> <Item Code="944" CodeSymbol="AZN" Name="Азербайджанский манат" Description="Азербайджан" RBCLoading="истина"/> - <Item Code="946" CodeSymbol="RON" Name="Новый румынский лей" Description="Румыния" RBCLoading="истина"/> + <Item Code="946" CodeSymbol="RON" Name="Румынский лей" Description="Румыния" RBCLoading="истина"/> <Item Code="949" CodeSymbol="TRY" Name="Турецкая лира" Description="Турция" RBCLoading="истина"/> <Item Code="950" CodeSymbol="XAF" Name="Франк КФА ВЕАС" Description="Габон; Камерун; Конго; Центрально - африканская Республика; Чад; Экваториальная Гвинея Франк КФА ВЕАС - денежная единица Банка государств центральной Африки" RBCLoading="ложь"/> <Item Code="951" CodeSymbol="XCD" Name="Восточно - карибский доллар" Description="Ангилья; Антигуа и Барбуда; Гренада; Доминика; Монтсеррат; Сент - Винсент и Гренадины; Сент - Китс и Невис; Сент - Люсия" RBCLoading="ложь"/> diff --git a/SSL/src/Catalogs/Валюты/Валюты.mdo b/SSL/src/Catalogs/Валюты/Валюты.mdo index e60a182aa..ddb06470c 100644 --- a/SSL/src/Catalogs/Валюты/Валюты.mdo +++ b/SSL/src/Catalogs/Валюты/Валюты.mdo @@ -306,7 +306,7 @@ <name>ПодборВалютИзКлассификатора</name> <synonym> <key>ru</key> - <value>Общероссийский классификатор валют</value> + <value>Подбор валют из классификатора</value> </synonym> <help> <pages> @@ -329,7 +329,7 @@ <name>ФормаЭлемента</name> <synonym> <key>ru</key> - <value>Валюта</value> + <value>Форма элемента</value> </synonym> <help> <pages> diff --git a/SSL/src/Catalogs/ВариантыОтветовАнкет/Forms/ФормаВыбора/Form.form b/SSL/src/Catalogs/ВариантыОтветовАнкет/Forms/ФормаВыбора/Form.form index 54ac57226..4b5695051 100644 --- a/SSL/src/Catalogs/ВариантыОтветовАнкет/Forms/ФормаВыбора/Form.form +++ b/SSL/src/Catalogs/ВариантыОтветовАнкет/Forms/ФормаВыбора/Form.form @@ -304,7 +304,6 @@ <autoFillCheck>true</autoFillCheck> <allowFormCustomize>true</allowFormCustomize> <enabled>true</enabled> - <verticalScroll>UseIfNecessary</verticalScroll> <showTitle>auto</showTitle> <showCloseButton>true</showCloseButton> <attributes> diff --git a/SSL/src/Catalogs/ВариантыОтветовАнкет/Forms/ФормаСписка/Form.form b/SSL/src/Catalogs/ВариантыОтветовАнкет/Forms/ФормаСписка/Form.form index 149eaf135..c22af6a91 100644 --- a/SSL/src/Catalogs/ВариантыОтветовАнкет/Forms/ФормаСписка/Form.form +++ b/SSL/src/Catalogs/ВариантыОтветовАнкет/Forms/ФормаСписка/Form.form @@ -340,7 +340,6 @@ <autoFillCheck>true</autoFillCheck> <allowFormCustomize>true</allowFormCustomize> <enabled>true</enabled> - <verticalScroll>UseIfNecessary</verticalScroll> <showTitle>auto</showTitle> <showCloseButton>true</showCloseButton> <attributes> diff --git a/SSL/src/Catalogs/ВариантыОтветовАнкет/Forms/ФормаЭлемента/Form.form b/SSL/src/Catalogs/ВариантыОтветовАнкет/Forms/ФормаЭлемента/Form.form index aafe2cae0..ea228ec41 100644 --- a/SSL/src/Catalogs/ВариантыОтветовАнкет/Forms/ФормаЭлемента/Form.form +++ b/SSL/src/Catalogs/ВариантыОтветовАнкет/Forms/ФормаЭлемента/Form.form @@ -162,7 +162,6 @@ <autoFillCheck>true</autoFillCheck> <allowFormCustomize>true</allowFormCustomize> <enabled>true</enabled> - <verticalScroll>UseIfNecessary</verticalScroll> <showTitle>auto</showTitle> <showCloseButton>true</showCloseButton> <attributes> diff --git a/SSL/src/Catalogs/ВариантыОтчетов/Commands/Открыть/CommandModule.bsl b/SSL/src/Catalogs/ВариантыОтчетов/Commands/Открыть/CommandModule.bsl index e1265f1f2..c82adcbe0 100644 --- a/SSL/src/Catalogs/ВариантыОтчетов/Commands/Открыть/CommandModule.bsl +++ b/SSL/src/Catalogs/ВариантыОтчетов/Commands/Открыть/CommandModule.bsl @@ -1,9 +1,20 @@ - #Область ОбработчикиСобытий &НаКлиенте -Процедура ОбработкаКоманды(ПараметрКоманды, ПараметрыВыполненияКоманды) - ВариантыОтчетовКлиент.ОткрытьВариантОтчета(ПараметрыВыполненияКоманды.Источник); +Процедура ОбработкаКоманды(ВариантСсылка, ПараметрыВыполненияКоманды) + ПараметрыОткрытия = ВариантСсылка; + Форма = ПараметрыВыполненияКоманды.Источник; + Если ТипЗнч(Форма) = Тип("УправляемаяФорма") Тогда + Если Форма.ИмяФормы = "Справочник.ВариантыОтчетов.Форма.ФормаСписка" Тогда + ПараметрыОткрытия = Форма.Элементы.Список.ТекущиеДанные; + ИначеЕсли Форма.ИмяФормы = "Справочник.ВариантыОтчетов.Форма.ФормаЭлемента" Тогда + ПараметрыОткрытия = Форма.Объект; + КонецЕсли; + Иначе + Форма = Неопределено; + КонецЕсли; + + ВариантыОтчетовКлиент.ОткрытьФормуОтчета(Форма, ПараметрыОткрытия); КонецПроцедуры #КонецОбласти diff --git a/SSL/src/Catalogs/ВариантыОтчетов/Forms/РазмещениеВРазделах/Form.form b/SSL/src/Catalogs/ВариантыОтчетов/Forms/РазмещениеВРазделах/Form.form index 8226bad81..ba2b4261b 100644 --- a/SSL/src/Catalogs/ВариантыОтчетов/Forms/РазмещениеВРазделах/Form.form +++ b/SSL/src/Catalogs/ВариантыОтчетов/Forms/РазмещениеВРазделах/Form.form @@ -521,7 +521,6 @@ <autoFillCheck>true</autoFillCheck> <allowFormCustomize>true</allowFormCustomize> <enabled>true</enabled> - <verticalScroll>UseIfNecessary</verticalScroll> <showTitle>auto</showTitle> <showCloseButton>true</showCloseButton> <attributes> @@ -657,6 +656,7 @@ 1 + CatalogRef.ИдентификаторыОбъектовРасширений CatalogRef.ИдентификаторыОбъектовМетаданных @@ -822,7 +822,7 @@ Разместить - Auto + DontUse Auto @@ -848,7 +848,7 @@ TextPicture - Auto + DontUse Auto @@ -874,7 +874,7 @@ TextPicture - Auto + DontUse Auto diff --git a/SSL/src/Catalogs/ВариантыОтчетов/Forms/РазмещениеВРазделах/Help/ru.html b/SSL/src/Catalogs/ВариантыОтчетов/Forms/РазмещениеВРазделах/Help/ru.html index adfa7f1e3..91c67f3df 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/РазмещениеВРазделах/Module.bsl b/SSL/src/Catalogs/ВариантыОтчетов/Forms/РазмещениеВРазделах/Module.bsl index 56b00e2d1..a8dc64884 100644 --- a/SSL/src/Catalogs/ВариантыОтчетов/Forms/РазмещениеВРазделах/Module.bsl +++ b/SSL/src/Catalogs/ВариантыОтчетов/Forms/РазмещениеВРазделах/Module.bsl @@ -64,7 +64,7 @@ Если ПроверитьКоличествоВариантов() Тогда ЗаписатьНаСервере(); ТекстОповещения = НСтр("ru = 'Изменены настройки вариантов отчетов (%1 шт.).'"); - ТекстОповещения = СтрЗаменить(ТекстОповещения, "%1", Формат(ИзменяемыеВарианты.Количество(), "ЧН=0; ЧГ=0")); + ТекстОповещения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ТекстОповещения, Формат(ИзменяемыеВарианты.Количество(), "ЧН=0; ЧГ=0")); ПоказатьОповещениеПользователя(, , ТекстОповещения); ВариантыОтчетовКлиент.ОбновитьОткрытыеФормы(); Закрыть(); @@ -95,11 +95,11 @@ &НаСервере Процедура УстановитьУсловноеОформление() - Инструкция = ВариантыОтчетов.ИнструкцияУсловногоОформления(); + Инструкция = СтандартныеПодсистемыСервер.ИнструкцияУсловногоОформления(); Инструкция.Поля = "ДеревоПодсистемВажность"; Инструкция.Отборы.Вставить("ДеревоПодсистем.Важность", Новый ПолеКомпоновкиДанных("СмешаннаяВажность")); Инструкция.Оформление.Вставить("ЦветТекста", ЦветаСтиля.ЗаблокированныйРеквизитЦвет); - ВариантыОтчетов.ДобавитьЭлементУсловногоОформления(ЭтотОбъект, Инструкция); + СтандартныеПодсистемыСервер.ДобавитьЭлементУсловногоОформления(ЭтотОбъект, Инструкция); КонецПроцедуры //////////////////////////////////////////////////////////////////////////////// @@ -191,15 +191,28 @@ |//////////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ | втВарианты.Ссылка КАК Ссылка, - | ПредопределенныеВариантыОтчетовРазмещение.Подсистема КАК Подсистема, - | ПредопределенныеВариантыОтчетовРазмещение.Важный КАК Важный, - | ПредопределенныеВариантыОтчетовРазмещение.СмТакже КАК СмТакже + | РазмещениеКонфигурации.Подсистема КАК Подсистема, + | РазмещениеКонфигурации.Важный КАК Важный, + | РазмещениеКонфигурации.СмТакже КАК СмТакже |ПОМЕСТИТЬ втОбщие |ИЗ | втВарианты КАК втВарианты - | ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.ПредопределенныеВариантыОтчетов.Размещение КАК ПредопределенныеВариантыОтчетовРазмещение + | ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.ПредопределенныеВариантыОтчетов.Размещение КАК РазмещениеКонфигурации | ПО (втВарианты.Причина = 0) - | И втВарианты.ПредопределенныйВариант = ПредопределенныеВариантыОтчетовРазмещение.Ссылка + | И втВарианты.ПредопределенныйВариант = РазмещениеКонфигурации.Ссылка + | + |ОБЪЕДИНИТЬ ВСЕ + | + |ВЫБРАТЬ + | втВарианты.Ссылка, + | РазмещениеРасширений.Подсистема, + | РазмещениеРасширений.Важный, + | РазмещениеРасширений.СмТакже + |ИЗ + | втВарианты КАК втВарианты + | ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.ПредопределенныеВариантыОтчетовРасширений.Размещение КАК РазмещениеРасширений + | ПО (втВарианты.Причина = 0) + | И втВарианты.ПредопределенныйВариант = РазмещениеРасширений.Ссылка |; | |//////////////////////////////////////////////////////////////////////////////// @@ -307,7 +320,7 @@ РезультатВыполнения.Вставить("Отказ", Истина); Иначе ТекстСообщения = НСтр("ru = 'Недостаточно прав для размещения в разделах некоторых вариантов отчетов (%1).'"); - ТекстСообщения = СтрЗаменить(ТекстСообщения, "%1", Формат(КоличествоОшибок, "ЧГ=")); + ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ТекстСообщения, Формат(КоличествоОшибок, "ЧГ=")); Элементы.ДеревоПодсистем.Доступность = Истина; КонецЕсли; diff --git a/SSL/src/Catalogs/ВариантыОтчетов/Forms/СбросНастроекРазмещения/Form.form b/SSL/src/Catalogs/ВариантыОтчетов/Forms/СбросНастроекРазмещения/Form.form index 421208bc0..c43dc975d 100644 --- a/SSL/src/Catalogs/ВариантыОтчетов/Forms/СбросНастроекРазмещения/Form.form +++ b/SSL/src/Catalogs/ВариантыОтчетов/Forms/СбросНастроекРазмещения/Form.form @@ -211,7 +211,7 @@ КомандаСбросить - Auto + DontUse Auto diff --git a/SSL/src/Catalogs/ВариантыОтчетов/Forms/СбросНастроекРазмещения/Module.bsl b/SSL/src/Catalogs/ВариантыОтчетов/Forms/СбросНастроекРазмещения/Module.bsl index e7132bbf4..5baf781e9 100644 --- a/SSL/src/Catalogs/ВариантыОтчетов/Forms/СбросНастроекРазмещения/Module.bsl +++ b/SSL/src/Catalogs/ВариантыОтчетов/Forms/СбросНастроекРазмещения/Module.bsl @@ -46,7 +46,7 @@ Иначе ОповещениеТекст = НСтр("ru = 'Сброшены настройки размещения |вариантов отчетов (%1 шт.).'"); - ОповещениеТекст = СтрЗаменить(ОповещениеТекст, "%1", Формат(КоличествоВариантов, "ЧН=0; ЧГ=0")); + ОповещениеТекст = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ОповещениеТекст, Формат(КоличествоВариантов, "ЧН=0; ЧГ=0")); ПоказатьОповещениеПользователя(, , ОповещениеТекст); КонецЕсли; ВариантыОтчетовКлиент.ОбновитьОткрытыеФормы(); @@ -85,7 +85,8 @@ Запрос = Новый Запрос; Запрос.УстановитьПараметр("МассивВариантов", ИзменяемыеВарианты.ВыгрузитьЗначения()); - Запрос.УстановитьПараметр("ТипОтчета", Перечисления.ТипыОтчетов.Внутренний); + Запрос.УстановитьПараметр("ТипВнутренний", Перечисления.ТипыОтчетов.Внутренний); + Запрос.УстановитьПараметр("ТипРасширение", Перечисления.ТипыОтчетов.Расширение); Запрос.Текст = "ВЫБРАТЬ РАЗЛИЧНЫЕ | ВариантыОтчетовРазмещение.Ссылка @@ -94,7 +95,8 @@ |ГДЕ | ВариантыОтчетовРазмещение.Ссылка В(&МассивВариантов) | И ВариантыОтчетовРазмещение.Пользовательский = ЛОЖЬ - | И ВариантыОтчетовРазмещение.ТипОтчета = &ТипОтчета + | И (ВариантыОтчетовРазмещение.ТипОтчета = &ТипВнутренний + | ИЛИ ВариантыОтчетовРазмещение.ТипОтчета = &ТипРасширение) | И ВариантыОтчетовРазмещение.ПометкаУдаления = ЛОЖЬ"; МассивВариантов = Запрос.Выполнить().Выгрузить().ВыгрузитьКолонку("Ссылка"); diff --git a/SSL/src/Catalogs/ВариантыОтчетов/Forms/СбросПользовательскихНастроек/Form.form b/SSL/src/Catalogs/ВариантыОтчетов/Forms/СбросПользовательскихНастроек/Form.form index 29a69cd03..d22927c81 100644 --- a/SSL/src/Catalogs/ВариантыОтчетов/Forms/СбросПользовательскихНастроек/Form.form +++ b/SSL/src/Catalogs/ВариантыОтчетов/Forms/СбросПользовательскихНастроек/Form.form @@ -207,7 +207,7 @@ КомандаСбросить - Auto + DontUse Auto diff --git a/SSL/src/Catalogs/ВариантыОтчетов/Forms/СбросПользовательскихНастроек/Module.bsl b/SSL/src/Catalogs/ВариантыОтчетов/Forms/СбросПользовательскихНастроек/Module.bsl index 851254029..aac9a2718 100644 --- a/SSL/src/Catalogs/ВариантыОтчетов/Forms/СбросПользовательскихНастроек/Module.bsl +++ b/SSL/src/Catalogs/ВариантыОтчетов/Forms/СбросПользовательскихНастроек/Module.bsl @@ -14,7 +14,7 @@ Если Не ЕстьПользовательскиеНастройки(Параметры.МассивВариантов) Тогда ТекстОшибки = НСтр("ru = 'Пользовательские настройки выбранных вариантов отчетов (%1 шт) не заданы или уже сброшены.'"); - ТекстОшибки = СтрЗаменить(ТекстОшибки, "%1", Формат(Параметры.МассивВариантов.Количество(), "ЧН=0; ЧГ=0")); + ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ТекстОшибки, Формат(Параметры.МассивВариантов.Количество(), "ЧН=0; ЧГ=0")); Возврат; КонецЕсли; @@ -51,7 +51,7 @@ Иначе ОповещениеТекст = НСтр("ru = 'Сброшены пользовательские настройки |вариантов отчетов (%1 шт.).'"); - ОповещениеТекст = СтрЗаменить(ОповещениеТекст, "%1", Формат(КоличествоВариантов, "ЧН=0; ЧГ=0")); + ОповещениеТекст = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ОповещениеТекст, Формат(КоличествоВариантов, "ЧН=0; ЧГ=0")); ПоказатьОповещениеПользователя(, , ОповещениеТекст); КонецЕсли; Закрыть(); diff --git a/SSL/src/Catalogs/ВариантыОтчетов/Forms/ФормаСписка/Form.form b/SSL/src/Catalogs/ВариантыОтчетов/Forms/ФормаСписка/Form.form index 16b370767..bb2c54d38 100644 --- a/SSL/src/Catalogs/ВариантыОтчетов/Forms/ФормаСписка/Form.form +++ b/SSL/src/Catalogs/ВариантыОтчетов/Forms/ФормаСписка/Form.form @@ -134,12 +134,13 @@ false true false - false - true + true + false true false false false + false true true Normal @@ -147,6 +148,7 @@ ru Все + DontUse true @@ -386,59 +388,110 @@ UserCmds Auto + + СписокГруппа1 + 188 + + СписокНайти + 190 + true + true + + true + + + СписокНайтиРасширеннаяПодсказка + 191 + Label + true + true + + Left + + + Form.Item.Список.StandardCommand.Find + Normal + Auto + true + true + UserCmds + Auto + InAdditionalSubmenu + + + СписокПоискПоТекущемуЗначению + 194 + true + true + + true + + + СписокПоискПоТекущемуЗначениюРасширеннаяПодсказка + 195 + Label + true + true + + Left + + + Form.Item.Список.StandardCommand.FindByCurrentValue + Normal + Auto + true + true + UserCmds + Auto + InAdditionalSubmenu + + + СписокОтменитьПоиск + 192 + true + true + + true + + + СписокОтменитьПоискРасширеннаяПодсказка + 193 + Label + true + true + + Left + + + Form.Item.Список.StandardCommand.CancelSearch + Normal + Auto + true + true + UserCmds + Auto + InAdditionalSubmenu + + true + true + + true + + + СписокГруппа1РасширеннаяПодсказка + 189 + Label + true + true + + Left + + + + КомандыСписка 64 - - СписокСписок - 158 - true - - true - - - СписокСписокРасширеннаяПодсказка - 159 - Label - true - true - - Left - - - Form.Item.Список.StandardCommand.List - Normal - Auto - true - true - UserCmds - Auto - - - СписокИерархическийСписок - 156 - true - - true - - - СписокИерархическийСписокРасширеннаяПодсказка - 157 - Label - true - true - - Left - - - Form.Item.Список.StandardCommand.HierarchicalList - Normal - Auto - true - true - UserCmds - Auto - true true @@ -876,6 +929,12 @@ Change Copy Create + HierarchicalList + LevelDown + LevelUp + List + MoveItem + Tree Строки 137 @@ -1774,7 +1833,6 @@ true true true - UseIfNecessary auto true @@ -1804,6 +1862,9 @@ Список.КлючВарианта + + Список.КлючЗамеров + Список.Отчет @@ -1816,6 +1877,7 @@ Варианты.Ссылка, Варианты.ВерсияДанных, Варианты.ПометкаУдаления, + Предопределенные.КлючЗамеров, Варианты.Пользовательский, НЕ Варианты.Пользовательский КАК Предопределенный, Варианты.Наименование, @@ -1842,6 +1904,8 @@ ВЫБОР КОГДА Варианты.ТипОтчета = &ТипВнутренний ТОГДА Варианты.Отчет.Имя + КОГДА Варианты.ТипОтчета = &ТипРасширение + ТОГДА Варианты.Отчет.Имя КОГДА Варианты.ТипОтчета = &ТипДополнительный ТОГДА Варианты.Отчет ИНАЧЕ ПОДСТРОКА(ВЫРАЗИТЬ(Варианты.Отчет КАК СТРОКА(150)), 14, 137) @@ -1858,7 +1922,8 @@ ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ПредопределенныеВариантыОтчетов КАК Предопределенные ПО Варианты.ПредопределенныйВариант = Предопределенные.Ссылка ГДЕ - ВЫБОР + Варианты.Отчет В(&ДоступныеОтчеты) + И ВЫБОР КОГДА &ВариантыПользователя ЕСТЬ NULL ТОГДА НЕ Варианты.ПредопределенныйВариант В (&ОтключенныеВариантыПрограммы) ИНАЧЕ Варианты.Ссылка В (&ВариантыПользователя) @@ -1940,6 +2005,7 @@ 1 + CatalogRef.ИдентификаторыОбъектовРасширений CatalogRef.ИдентификаторыОбъектовМетаданных @@ -2124,6 +2190,21 @@ + + ПараметрыКлиента + + <key>ru</key> + <value>Параметры клиента</value> + + 12 + + + true + + + true + + ВыполнитьПоиск @@ -2143,7 +2224,7 @@ <name>ВыполнитьПоиск</name> </handler> </action> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <formCommands> @@ -2169,7 +2250,7 @@ </handler> </action> <representation>TextPicture</representation> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <commandInterface> diff --git a/SSL/src/Catalogs/ВариантыОтчетов/Forms/ФормаСписка/Module.bsl b/SSL/src/Catalogs/ВариантыОтчетов/Forms/ФормаСписка/Module.bsl index c3880e1a6..79aed5840 100644 --- a/SSL/src/Catalogs/ВариантыОтчетов/Forms/ФормаСписка/Module.bsl +++ b/SSL/src/Catalogs/ВариантыОтчетов/Forms/ФормаСписка/Module.bsl @@ -7,6 +7,8 @@ Возврат; КонецЕсли; + ПараметрыКлиента = ВариантыОтчетов.ПараметрыКлиента(); + ВключаяПодчиненные = Истина; ДеревоЗначений = ВариантыОтчетовПовтИсп.ПодсистемыТекущегоПользователя().Скопировать(); @@ -84,10 +86,11 @@ КонецЕсли; СписокВыбора = Элементы.ОтборТипОтчета.СписокВыбора; - СписокВыбора.Добавить(1, НСтр("ru = 'Внутренние и Дополнительные'")); - СписокВыбора.Добавить(Перечисления.ТипыОтчетов.Внутренний, НСтр("ru = 'Внутренние'")); + СписокВыбора.Добавить(1, НСтр("ru = 'Все, кроме внешних'")); + СписокВыбора.Добавить(Перечисления.ТипыОтчетов.Внутренний, НСтр("ru = 'Внутренние'")); + СписокВыбора.Добавить(Перечисления.ТипыОтчетов.Расширение, НСтр("ru = 'Расширения'")); СписокВыбора.Добавить(Перечисления.ТипыОтчетов.Дополнительный, НСтр("ru = 'Дополнительные'")); - СписокВыбора.Добавить(Перечисления.ТипыОтчетов.Внешний, НСтр("ru = 'Внешние'")); + СписокВыбора.Добавить(Перечисления.ТипыОтчетов.Внешний, НСтр("ru = 'Внешние'")); Параметры.Свойство("СтрокаПоиска", СтрокаПоиска); Если Параметры.Отбор.Свойство("ТипОтчета", ОтборТипОтчета) Тогда @@ -114,15 +117,15 @@ КонецЕсли; Список.Параметры.УстановитьЗначениеПараметра("ТипВнутренний", Перечисления.ТипыОтчетов.Внутренний); + Список.Параметры.УстановитьЗначениеПараметра("ТипРасширение", Перечисления.ТипыОтчетов.Расширение); Список.Параметры.УстановитьЗначениеПараметра("ТипДополнительный", Перечисления.ТипыОтчетов.Дополнительный); + Список.Параметры.УстановитьЗначениеПараметра("ДоступныеОтчеты", ВариантыОтчетовПовтИсп.ДоступныеОтчеты()); Список.Параметры.УстановитьЗначениеПараметра("ОтключенныеВариантыПрограммы", ВариантыОтчетовПовтИсп.ОтключенныеВариантыПрограммы()); ТекущийЭлемент = Элементы.Список; - // Пользовательский отбор по пометке удаления. - ОбщегоНазначенияКлиентСервер.УстановитьЭлементОтбораДинамическогоСписка( - Список, "ПометкаУдаления", Ложь, ВидСравненияКомпоновкиДанных.Равно, , , - РежимОтображенияЭлементаНастройкиКомпоновкиДанных.Обычный); + СтандартныеПодсистемыСервер.ДополнитьОтборыИзСтруктуры(Список.КомпоновщикНастроек.Настройки.Отбор, Параметры.Отбор); + Параметры.Отбор.Очистить(); ОбновитьСодержимоеСписка("ПриСозданииНаСервере"); КонецПроцедуры @@ -160,7 +163,7 @@ &НаКлиенте Процедура СтрокаПоискаПриИзменении(Элемент) - ОбновитьСодержимоеСписка("СтрокаПоискаПриИзменении"); + ОбновитьСодержимоеСпискаКлиент("СтрокаПоискаПриИзменении"); КонецПроцедуры &НаКлиенте @@ -268,8 +271,7 @@ ПараметрыРазмещения.Варианты.Представление, Формат(ПараметрыРазмещения.Варианты.Всего, "ЧГ=0"), ПараметрыРазмещения.Источник.ПолноеПредставление, - ПараметрыРазмещения.Приемник.ПолноеПредставление - ); + ПараметрыРазмещения.Приемник.ПолноеПредставление); Обработчик = Новый ОписаниеОповещения("ДеревоПодсистемПеретаскиваниеЗавершение", ЭтотОбъект, ПараметрыРазмещения); ПоказатьВопрос(Обработчик, ТекстВопроса, РежимДиалогаВопрос.ДаНет, 60, КодВозвратаДиалога.Да); @@ -284,7 +286,7 @@ Процедура СписокВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка) Если РежимРаботыФормы = "ВсеОтчетыРаздела" Тогда СтандартнаяОбработка = Ложь; - ВариантыОтчетовКлиент.ОткрытьВариантОтчета(ЭтотОбъект); + ВариантыОтчетовКлиент.ОткрытьФормуОтчета(ЭтотОбъект, Элементы.Список.ТекущиеДанные); ИначеЕсли РежимРаботыФормы = "Список" Тогда СтандартнаяОбработка = Ложь; ВариантыОтчетовКлиент.ПоказатьНастройкиОтчета(ВыбраннаяСтрока); @@ -297,7 +299,7 @@ &НаКлиенте Процедура ВыполнитьПоиск(Команда) - ОбновитьСодержимоеСписка(); + ОбновитьСодержимоеСпискаКлиент("ВыполнитьПоиск"); КонецПроцедуры &НаКлиенте @@ -325,11 +327,11 @@ &НаСервере Процедура УстановитьУсловноеОформление() - Инструкция = ВариантыОтчетов.ИнструкцияУсловногоОформления(); + Инструкция = СтандартныеПодсистемыСервер.ИнструкцияУсловногоОформления(); Инструкция.Поля = "Описание"; Инструкция.Отборы.Вставить("Список.Описание", ВидСравненияКомпоновкиДанных.Заполнено); Инструкция.Оформление.Вставить("ЦветТекста", ЦветаСтиля.ПоясняющийТекст); - ВариантыОтчетов.ДобавитьЭлементУсловногоОформления(ЭтотОбъект, Инструкция); + СтандартныеПодсистемыСервер.ДобавитьЭлементУсловногоОформления(ЭтотОбъект, Инструкция); КонецПроцедуры &НаКлиенте @@ -414,6 +416,7 @@ МассивТиповОтчетов = Новый Массив; Если ОтборТипОтчета = 1 Тогда МассивТиповОтчетов.Добавить(Перечисления.ТипыОтчетов.Внутренний); + МассивТиповОтчетов.Добавить(Перечисления.ТипыОтчетов.Расширение); МассивТиповОтчетов.Добавить(Перечисления.ТипыОтчетов.Дополнительный); Иначе МассивТиповОтчетов.Добавить(ОтборТипОтчета); @@ -532,34 +535,27 @@ КонецЦикла; ЗафиксироватьТранзакцию(); - РезультатВыполнения = СтандартныеПодсистемыКлиентСервер.НовыйРезультатВыполнения(); + РезультатВыполнения = Новый Структура; Если ПараметрыРазмещения.Варианты.Всего = Размещено Тогда - ВыводОповещения = РезультатВыполнения.ВыводОповещения; - ВыводОповещения.Использование = Истина; Если ПараметрыРазмещения.Варианты.Всего = 1 Тогда Если ПараметрыРазмещения.Действие = "Перемещение" Тогда Шаблон = НСтр("ru = 'Успешно перемещен в ""%1"".'"); Иначе Шаблон = НСтр("ru = 'Успешно размещен в ""%1"".'"); КонецЕсли; - ВыводОповещения.Заголовок = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - Шаблон, - ПараметрыРазмещения.Приемник.ПолноеПредставление); - ВыводОповещения.Текст = ПараметрыРазмещения.Варианты.Представление; - ВыводОповещения.Ссылка = ПолучитьНавигационнуюСсылку(ПараметрыРазмещения.Варианты.Массив[0]); + Текст = ПараметрыРазмещения.Варианты.Представление; + Ссылка = ПолучитьНавигационнуюСсылку(ПараметрыРазмещения.Варианты.Массив[0]); Иначе Если ПараметрыРазмещения.Действие = "Перемещение" Тогда Шаблон = НСтр("ru = 'Успешно перемещены в ""%1"".'"); Иначе Шаблон = НСтр("ru = 'Успешно размещены в ""%1"".'"); КонецЕсли; - ВыводОповещения.Текст = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Варианты отчетов (%1).'"), - Формат(ПараметрыРазмещения.Варианты.Всего, "ЧН=0; ЧГ=0")); - ВыводОповещения.Заголовок = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - Шаблон, - ПараметрыРазмещения.Приемник.ПолноеПредставление); + Текст = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Варианты отчетов (%1).'"), Формат(ПараметрыРазмещения.Варианты.Всего, "ЧН=0; ЧГ=0")); + Ссылка = Неопределено; КонецЕсли; + Шаблон = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(Шаблон, ПараметрыРазмещения.Приемник.ПолноеПредставление); + СтандартныеПодсистемыКлиентСервер.ВывестиОповещение(РезультатВыполнения, Шаблон, Текст, , Ссылка); Иначе ТекстОшибок = ""; Если Не ПустаяСтрока(НеМогутРазмещаться) Тогда @@ -581,13 +577,9 @@ Шаблон = НСтр("ru = 'Размещено вариантов отчетов: %1 из %2.'"); КонецЕсли; - ВыводПредупреждения = РезультатВыполнения.ВыводПредупреждения; - ВыводПредупреждения.Использование = Истина; - ВыводПредупреждения.Текст = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - Шаблон, - Формат(Размещено, "ЧН=0; ЧГ=0"), - Формат(ПараметрыРазмещения.Варианты.Всего, "ЧН=0; ЧГ=0")); - ВыводПредупреждения.ТекстОшибок = ТекстОшибок; + СтандартныеПодсистемыКлиентСервер.ВывестиПредупреждение(РезультатВыполнения, + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(Шаблон, Формат(Размещено, "ЧН=0; ЧГ=0"), Формат(ПараметрыРазмещения.Варианты.Всего, "ЧН=0; ЧГ=0")), + ТекстОшибок); КонецЕсли; Если ПараметрыРазмещения.Действие = "Перемещение" И Размещено > 0 Тогда @@ -598,4 +590,47 @@ Возврат РезультатВыполнения; КонецФункции +&НаКлиенте +Процедура ОбновитьСодержимоеСпискаКлиент(Событие) + Замер = НачатьЗамер(Событие); + ОбновитьСодержимоеСписка(Событие); + ЗакончитьЗамер(Замер); +КонецПроцедуры + +&НаКлиенте +Функция НачатьЗамер(Событие) + Если Не ПараметрыКлиента.ВыполнятьЗамеры Тогда + Возврат Неопределено; + КонецЕсли; + + Если ЗначениеЗаполнено(СтрокаПоиска) И (Событие = "СтрокаПоискаПриИзменении" Или Событие = "ВыполнитьПоиск") Тогда + Имя = "СписокОтчетов.Поиск"; + Иначе + Возврат Неопределено; + КонецЕсли; + + Комментарий = ПараметрыКлиента.ПрефиксЗамеров; + + Если ЗначениеЗаполнено(СтрокаПоиска) Тогда + Комментарий = Комментарий + + "; " + НСтр("ru = 'Поиск:'") + " " + Строка(СтрокаПоиска) + + "; " + НСтр("ru = 'Включая подчиненные:'") + " " + Строка(ВключаяПодчиненные); + Иначе + Комментарий = Комментарий + "; " + НСтр("ru = 'Без поиска'"); + КонецЕсли; + + Замер = Новый Структура("МодульОценкаПроизводительностиКлиентСервер, Идентификатор"); + Замер.Идентификатор = Новый УникальныйИдентификатор; + Замер.МодульОценкаПроизводительностиКлиентСервер = ОбщегоНазначенияКлиент.ОбщийМодуль("ОценкаПроизводительностиКлиентСервер"); + Замер.МодульОценкаПроизводительностиКлиентСервер.НачатьРучнойЗамерВремени(Имя, Замер.Идентификатор, Комментарий); + Возврат Замер; +КонецФункции + +&НаКлиенте +Процедура ЗакончитьЗамер(Замер) + Если Замер <> Неопределено Тогда + Замер.МодульОценкаПроизводительностиКлиентСервер.ЗакончитьРучнойЗамерВремени(Замер.Идентификатор); + КонецЕсли; +КонецПроцедуры + #КонецОбласти \ No newline at end of file diff --git a/SSL/src/Catalogs/ВариантыОтчетов/Forms/ФормаЭлемента/Form.form b/SSL/src/Catalogs/ВариантыОтчетов/Forms/ФормаЭлемента/Form.form index 17eb87e65..6e3f3c345 100644 --- a/SSL/src/Catalogs/ВариантыОтчетов/Forms/ФормаЭлемента/Form.form +++ b/SSL/src/Catalogs/ВариантыОтчетов/Forms/ФормаЭлемента/Form.form @@ -606,36 +606,49 @@ <searchControlLocation>None</searchControlLocation> <autoMaxCardHeight>true</autoMaxCardHeight> </items> + <items xsi:type="form:FormField"> + <name>Родитель</name> + <id>224</id> + <visible>true</visible> + <enabled>true</enabled> + <userVisible/> + <dataPath xsi:type="form:DataPath"> + <segments>Объект.Parent</segments> + </dataPath> + <extendedTooltip> + <name>РодительРасширеннаяПодсказка</name> + <id>226</id> + <type>Label</type> + <autoMaxWidth>true</autoMaxWidth> + <autoMaxHeight>true</autoMaxHeight> + <extInfo xsi:type="form:LabelDecorationExtInfo"> + <horizontalAlign>Left</horizontalAlign> + </extInfo> + </extendedTooltip> + <contextMenu> + <name>РодительКонтекстноеМеню</name> + <id>225</id> + <autoFill>true</autoFill> + </contextMenu> + <type>InputField</type> + <readOnly>true</readOnly> + <editMode>Enter</editMode> + <showInHeader>true</showInHeader> + <headerHorizontalAlign>Left</headerHorizontalAlign> + <showInFooter>true</showInFooter> + <extInfo xsi:type="form:InputFieldExtInfo"> + <autoMaxWidth>true</autoMaxWidth> + <autoMaxHeight>true</autoMaxHeight> + <wrap>true</wrap> + <chooseType>true</chooseType> + <typeDomainEnabled>true</typeDomainEnabled> + <textEdit>true</textEdit> + <textSize>Normal</textSize> + </extInfo> + </items> <items xsi:type="form:FormGroup"> <name>ТехническаяИнформация</name> <id>135</id> - <items xsi:type="form:FormGroup"> - <name>Группа1</name> - <id>188</id> - <visible>true</visible> - <enabled>true</enabled> - <userVisible> - <common>true</common> - </userVisible> - <extendedTooltip> - <name>Группа1РасширеннаяПодсказка</name> - <id>189</id> - <type>Label</type> - <autoMaxWidth>true</autoMaxWidth> - <autoMaxHeight>true</autoMaxHeight> - <extInfo xsi:type="form:LabelDecorationExtInfo"> - <horizontalAlign>Left</horizontalAlign> - </extInfo> - </extendedTooltip> - <type>UsualGroup</type> - <extInfo xsi:type="form:UsualGroupExtInfo"> - <behavior>Auto</behavior> - <showLeftMargin>true</showLeftMargin> - <united>true</united> - <throughAlign>Auto</throughAlign> - <currentRowUse>Auto</currentRowUse> - </extInfo> - </items> <items xsi:type="form:FormField"> <name>Отчет</name> <id>136</id> @@ -1167,6 +1180,7 @@ <currentRowUse>Auto</currentRowUse> </extInfo> </items> + <visible>true</visible> <enabled>true</enabled> <userVisible/> <title> @@ -1531,7 +1545,6 @@ <autoFillCheck>true</autoFillCheck> <allowFormCustomize>true</allowFormCustomize> <enabled>true</enabled> - <verticalScroll>UseIfNecessary</verticalScroll> <showTitle>auto</showTitle> <showCloseButton>true</showCloseButton> <attributes> @@ -1608,6 +1621,7 @@ 1 + CatalogRef.ИдентификаторыОбъектовРасширений CatalogRef.ИдентификаторыОбъектовМетаданных diff --git a/SSL/src/Catalogs/ВариантыОтчетов/Forms/ФормаЭлемента/Help/ru.html b/SSL/src/Catalogs/ВариантыОтчетов/Forms/ФормаЭлемента/Help/ru.html index e102bb17b..7e7a7b108 100644 --- a/SSL/src/Catalogs/ВариантыОтчетов/Forms/ФормаЭлемента/Help/ru.html +++ b/SSL/src/Catalogs/ВариантыОтчетов/Forms/ФормаЭлемента/Help/ru.html @@ -17,7 +17,7 @@
    • См. также – вариант отчета будет выведен в отдельной группе внизу панели отчетов.

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

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

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

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

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

    • Сброс настроек может быть необходим, если они ошибочны и затрудняют работу с отчетом. Выполните команды:
    • diff --git a/SSL/src/Catalogs/ВариантыОтчетов/Forms/ФормаЭлемента/Module.bsl b/SSL/src/Catalogs/ВариантыОтчетов/Forms/ФормаЭлемента/Module.bsl index bbc698a72..8c70fbd9e 100644 --- a/SSL/src/Catalogs/ВариантыОтчетов/Forms/ФормаЭлемента/Module.bsl +++ b/SSL/src/Catalogs/ВариантыОтчетов/Forms/ФормаЭлемента/Module.bsl @@ -47,9 +47,9 @@ Элементы.Автор.ТолькоПросмотр = Не ПолныеПраваНаВарианты; Элементы.ТехническаяИнформация.Видимость = ПолныеПраваНаВарианты; - // Заполнение имени отчета для команды "Просмотр". - Если Объект.ТипОтчета = Перечисления.ТипыОтчетов.Внутренний Тогда + Если Объект.ТипОтчета = Перечисления.ТипыОтчетов.Внутренний + Или Объект.ТипОтчета = Перечисления.ТипыОтчетов.Расширение Тогда ИмяОтчета = Объект.Отчет.Имя; ИначеЕсли Объект.ТипОтчета = Перечисления.ТипыОтчетов.Дополнительный Тогда ИмяОтчета = Объект.Отчет.ИмяОбъекта; @@ -83,16 +83,10 @@ Иначе ТолькоПросмотр = Истина; КонецЕсли; - ПоказатьПредупреждение(, ОшибкаОткрытия); ИначеЕсли ОткрытьФормуДополнительногоОтчетаПриОткрытии Тогда Отказ = Истина; - - ПараметрыОткрытия = Новый Структура; - ПараметрыОткрытия.Вставить("Вариант", Объект.Ссылка); - ПараметрыОткрытия.Вставить("Отчет", Объект.Отчет); - ПараметрыОткрытия.Вставить("КлючВарианта", Объект.КлючВарианта); - ВариантыОтчетовКлиент.ОткрытьВариантДополнительногоОтчета(ПараметрыОткрытия); + ВариантыОтчетовКлиент.ОткрытьФормуОтчета(ЭтотОбъект, Объект); КонецЕсли; КонецПроцедуры @@ -180,15 +174,12 @@ &НаСервере Процедура ПрочитатьСвойстваПредопределенного(ПервоеЧтение) Если ПервоеЧтение Тогда - Если Объект.ТипОтчета = Перечисления.ТипыОтчетов.Внутренний - И Не Объект.Пользовательский + Если Не Объект.Пользовательский + И (Объект.ТипОтчета = Перечисления.ТипыОтчетов.Внутренний + Или Объект.ТипОтчета = Перечисления.ТипыОтчетов.Расширение) И ЗначениеЗаполнено(Объект.ПредопределенныйВариант) Тогда // Чтение настроек предопределенного. - Запрос = Новый Запрос("ВЫБРАТЬ ВидимостьПоУмолчанию, Описание ИЗ Справочник.ПредопределенныеВариантыОтчетов ГДЕ Ссылка = &Ссылка"); - Запрос.УстановитьПараметр("Ссылка", Объект.ПредопределенныйВариант); - РезультатЗапроса = Запрос.Выполнить().Выгрузить()[0]; - СтруктураСвойствПредопределенного = Новый Структура("ВидимостьПоУмолчанию, Описание"); - ЗаполнитьЗначенияСвойств(СтруктураСвойствПредопределенного, РезультатЗапроса); - СвойстваПредопределенного = Новый ФиксированнаяСтруктура(СтруктураСвойствПредопределенного); + Сведения = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(Объект.ПредопределенныйВариант, "ВидимостьПоУмолчанию, Описание"); + СвойстваПредопределенного = Новый ФиксированнаяСтруктура(Сведения); Иначе Возврат; // Не предопределенный. КонецЕсли; diff --git a/SSL/src/Catalogs/ВариантыОтчетов/ObjectModule.bsl b/SSL/src/Catalogs/ВариантыОтчетов/ObjectModule.bsl index ee95365df..00202eb87 100644 --- a/SSL/src/Catalogs/ВариантыОтчетов/ObjectModule.bsl +++ b/SSL/src/Catalogs/ВариантыОтчетов/ObjectModule.bsl @@ -14,10 +14,7 @@ Если Наименование <> "" И ВариантыОтчетов.НаименованиеЗанято(Отчет, Ссылка, Наименование) Тогда Отказ = Истина; ОбщегоНазначенияКлиентСервер.СообщитьПользователю( - СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = '""%1"" занято, необходимо указать другое наименование.'"), - Наименование - ), + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = '""%1"" занято, необходимо указать другое наименование.'"), Наименование), , "Наименование"); КонецЕсли; @@ -134,6 +131,9 @@ | ПО втПредопределенные.ПредопределенныйВариант = ВариантыОтчетов.ПредопределенныйВариант |ГДЕ | ВариантыОтчетов.ПометкаУдаления = ЛОЖЬ"; + Если ТипОтчета = Перечисления.ТипыОтчетов.Расширение Тогда + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, ".ПредопределенныеВариантыОтчетов", ".ПредопределенныеВариантыОтчетовРасширений"); + КонецЕсли; Запрос = Новый Запрос; Запрос.УстановитьПараметр("Отчет", Отчет); Запрос.Текст = ТекстЗапроса; @@ -151,39 +151,20 @@ ТекстОшибки = НеЗаполненоПоле("Отчет"); ИначеЕсли Не ЗначениеЗаполнено(ТипОтчета) Тогда ТекстОшибки = НеЗаполненоПоле("ТипОтчета"); - ИначеЕсли Не ТипыОтчетовСовпадают() Тогда - ТекстОшибки = ПротиворечивыеЗначенияПолей("ТипОтчета", "Отчет"); - ИначеЕсли ТипОтчета = Перечисления.ТипыОтчетов.Внутренний - И Не ЗначениеЗаполнено(ПредопределенныйВариант) Тогда + ИначеЕсли ТипОтчета <> ВариантыОтчетовКлиентСервер.ТипОтчета(Отчет) Тогда + ТекстОшибки = НСтр("ru = 'Противоречивые значения полей ""%1"" и ""%2""'"); + ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ТекстОшибки, "ТипОтчета", "Отчет"); + ИначеЕсли Не ЗначениеЗаполнено(ПредопределенныйВариант) + И (ТипОтчета = Перечисления.ТипыОтчетов.Внутренний Или ТипОтчета = Перечисления.ТипыОтчетов.Расширение) Тогда ТекстОшибки = НеЗаполненоПоле("ПредопределенныйВариант"); Иначе Возврат; КонецЕсли; - Отказ = Истина; - ВариантыОтчетов.ОшибкаПоВарианту(Ссылка, ТекстОшибки); + ВызватьИсключение ТекстОшибки; КонецПроцедуры Функция НеЗаполненоПоле(ИмяПоля) - Возврат СтрЗаменить(НСтр("ru = 'Не заполнено поле ""%1""'"), "%1", ИмяПоля); -КонецФункции - -Функция ТипыОтчетовСовпадают() - Если ТипЗнч(Отчет) = Тип("СправочникСсылка.ИдентификаторыОбъектовМетаданных") Тогда - ОжидаемыйТип = Перечисления.ТипыОтчетов.Внутренний; - ИначеЕсли ТипЗнч(Отчет) = Тип("Строка") Тогда - ОжидаемыйТип = Перечисления.ТипыОтчетов.Внешний; - Иначе - ОжидаемыйТип = Перечисления.ТипыОтчетов.Дополнительный; - КонецЕсли; - Возврат ТипОтчета = ОжидаемыйТип; -КонецФункции - -Функция ПротиворечивыеЗначенияПолей(ИмяПоля1, ИмяПоля2) - Возврат СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Противоречивые значения полей ""%1"" и ""%2""'"), - ИмяПоля1, - ИмяПоля2 - ); + Возврат СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Не заполнено поле ""%1""'"), ИмяПоля); КонецФункции #КонецОбласти diff --git a/SSL/src/Catalogs/ВариантыОтчетов/ВариантыОтчетов.mdo b/SSL/src/Catalogs/ВариантыОтчетов/ВариантыОтчетов.mdo index 6e0e90d42..13931014a 100644 --- a/SSL/src/Catalogs/ВариантыОтчетов/ВариантыОтчетов.mdo +++ b/SSL/src/Catalogs/ВариантыОтчетов/ВариантыОтчетов.mdo @@ -70,11 +70,11 @@ Parent ru - Отчет + Родитель ru - Отчет, который содержит этот вариант отчета + Исходный вариант отчета, на основании которого сохранен этот вариант отчета true @@ -119,7 +119,7 @@ Use ru - Отчет + Вариант отчета true HierarchyOfItems @@ -140,6 +140,7 @@ Отчет + CatalogRef.ИдентификаторыОбъектовРасширений String CatalogRef.ДополнительныеОтчетыИОбработки CatalogRef.ИдентификаторыОбъектовМетаданных @@ -149,7 +150,7 @@ ru - Полное имя объекта метаданных + Ссылка отчета или его полное имя. @@ -209,6 +210,7 @@ Вариант конфигурации + CatalogRef.ПредопределенныеВариантыОтчетовРасширений CatalogRef.ПредопределенныеВариантыОтчетов @@ -515,6 +517,7 @@ Раздел, Группа + CatalogRef.ИдентификаторыОбъектовРасширений CatalogRef.ИдентификаторыОбъектовМетаданных @@ -702,7 +705,7 @@ ФормаЭлемента ru - Вариант отчета + Форма элемента diff --git a/SSL/src/Catalogs/ВерсииРасширений/Forms/ФормаСписка/Attributes/Список/ExtInfo/ListSettings.dcss b/SSL/src/Catalogs/ВерсииРасширений/Forms/ФормаСписка/Attributes/Список/ExtInfo/ListSettings.dcss new file mode 100644 index 000000000..61e6fb4bb --- /dev/null +++ b/SSL/src/Catalogs/ВерсииРасширений/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/Catalogs/ВерсииРасширений/Forms/ФормаСписка/Form.form b/SSL/src/Catalogs/ВерсииРасширений/Forms/ФормаСписка/Form.form new file mode 100644 index 000000000..5bafe74f2 --- /dev/null +++ b/SSL/src/Catalogs/ВерсииРасширений/Forms/ФормаСписка/Form.form @@ -0,0 +1,388 @@ + + + + ГруппаПользовательскихНастроек + 1 + true + true + + true + + + <key>ru</key> + <value>Группа пользовательских настроек</value> + + false + + ГруппаПользовательскихНастроекРасширеннаяПодсказка + 2 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + WeakSeparation + true + true + Auto + Auto + + + + Список + 3 + true + true + + true + + + Список + + true + None + + Код + 16 + true + true + + true + + + Список.Code + + 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 + true + Left + true + + true + true + + + + Ссылка + 24 + true + true + + + Список.Ref + + + СсылкаРасширеннаяПодсказка + 26 + Label + true + true + + Left + + + + СсылкаКонтекстноеМеню + 25 + true + + LabelField + Enter + true + Left + true + + true + true + + + None + + СписокКоманднаяПанель + 5 + Left + + + СписокСтрокаПоиска + 7 + + СписокСтрокаПоискаРасширеннаяПодсказка + 9 + Label + true + true + + Left + + + + СписокСтрокаПоискаКонтекстноеМеню + 8 + true + + Список + + true + + + + СписокСостояниеПросмотра + 10 + + СписокСостояниеПросмотраРасширеннаяПодсказка + 12 + Label + true + true + + Left + + + + СписокСостояниеПросмотраКонтекстноеМеню + 11 + true + + ViewStatusAddition + Список + + true + + + + СписокУправлениеПоиском + 13 + + СписокУправлениеПоискомРасширеннаяПодсказка + 15 + Label + true + true + + Left + + + + СписокУправлениеПоискомКонтекстноеМеню + 14 + true + + SearchControlAddition + Список + + true + + + + СписокРасширеннаяПодсказка + 6 + Label + true + true + + Left + + + + СписокКонтекстноеМеню + 4 + true + + true + true + true + true + true + MultiRow +
      true
      + 1 + 1 + AutoUse + AutoUse + true + true + Auto + Auto + ExpandTopLevel + true + true + true + + Список.DefaultPicture + + None + None + None + true + + 60 + + 0001-01-01T00:00:00 + 0001-01-01T00:00:00 + + + true + true + ГруппаПользовательскихНастроек + +
      + + ФормаКоманднаяПанель + -1 + + ФормаВключитьВозможностьРедактирования + 22 + true + true + + true + + + ФормаВключитьВозможностьРедактированияРасширеннаяПодсказка + 23 + Label + true + true + + Left + + + Form.Command.ВключитьВозможностьРедактирования + Normal + Auto + true + true + UserCmds + Auto + InAdditionalSubmenu + + Left + true + + + OnCreateAtServer + ПриСозданииНаСервере + + 70 + 10 + DontBlock + true + true + true + Vertical + true + true + true + auto + true + + Список + 1 + + DynamicList + + + true + + + true + + + Список.Ref + +
      true
      + + Catalog.ВерсииРасширений + true + true + true + true + +
      + + ВключитьВозможностьРедактирования + + <key>ru</key> + <value>Включить возможность редактирования</value> + + 1 + + ru + Включить возможность редактирования только для целей поиска неисправности (требуется углубленное понимание работы механизма) + + + true + + + + ВключитьВозможностьРедактирования + + + DontUse + Auto + + + + + + +
      diff --git a/SSL/src/Catalogs/ВерсииРасширений/Forms/ФормаСписка/Module.bsl b/SSL/src/Catalogs/ВерсииРасширений/Forms/ФормаСписка/Module.bsl new file mode 100644 index 000000000..2cd660d32 --- /dev/null +++ b/SSL/src/Catalogs/ВерсииРасширений/Forms/ФормаСписка/Module.bsl @@ -0,0 +1,23 @@ + +#Область ОбработчикиСобытийФормы + +&НаСервере +Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) + + ТолькоПросмотр = Истина; + +КонецПроцедуры + +#КонецОбласти + +#Область ОбработчикиКомандФормы + +&НаКлиенте +Процедура ВключитьВозможностьРедактирования(Команда) + + ТолькоПросмотр = Ложь; + Элементы.ФормаВключитьВозможностьРедактирования.Доступность = Ложь; + +КонецПроцедуры + +#КонецОбласти diff --git a/SSL/src/Catalogs/ВерсииРасширений/Forms/ФормаЭлемента/Form.form b/SSL/src/Catalogs/ВерсииРасширений/Forms/ФормаЭлемента/Form.form new file mode 100644 index 000000000..ed94ef1ed --- /dev/null +++ b/SSL/src/Catalogs/ВерсииРасширений/Forms/ФормаЭлемента/Form.form @@ -0,0 +1,260 @@ + + + + Код + 1 + true + true + + true + + + Объект.Code + + + КодРасширеннаяПодсказка + 3 + Label + true + true + + Left + + + + КодКонтекстноеМеню + 2 + true + + InputField + Auto + true + Left + 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 + true + Normal + + + + ПоследняяДатаДобавленияВторойВерсии + 9 + true + true + + true + + + Объект.ПоследняяДатаДобавленияВторойВерсии + + + ПоследняяДатаДобавленияВторойВерсииРасширеннаяПодсказка + 11 + Label + true + true + + Left + + + + ПоследняяДатаДобавленияВторойВерсииКонтекстноеМеню + 10 + true + + InputField + Enter + true + Left + true + + true + true + true + true + true + true + Normal + + + + ДатаПервогоВходаПослеУдаленияВсехРасширений + 12 + true + true + + true + + + Объект.ДатаПервогоВходаПослеУдаленияВсехРасширений + + + ДатаПервогоВходаПослеУдаленияВсехРасширенийРасширеннаяПодсказка + 14 + Label + true + true + + Left + + + + ДатаПервогоВходаПослеУдаленияВсехРасширенийКонтекстноеМеню + 13 + true + + InputField + Enter + true + Left + true + + true + true + true + true + true + true + Normal + + + + ФормаКоманднаяПанель + -1 + + ФормаВключитьВозможностьРедактирования + 7 + true + true + + true + + + ФормаВключитьВозможностьРедактированияРасширеннаяПодсказка + 8 + Label + true + true + + Left + + + Form.Command.ВключитьВозможностьРедактирования + Normal + Auto + true + true + UserCmds + Auto + InAdditionalSubmenu + + Left + true + + + OnCreateAtServer + ПриСозданииНаСервере + + 50 + 7 + LockOwner + true + true + true + Vertical + true + true + true + auto + true + + Объект + 1 + + CatalogObject.ВерсииРасширений + + + true + + + true + +
      true
      + true +
      + + ВключитьВозможностьРедактирования + + <key>ru</key> + <value>Включить возможность редактирования</value> + + 1 + + ru + Включить возможность редактирования только для целей поиска неисправности (требуется углубленное понимание работы механизма) + + + true + + + + ВключитьВозможностьРедактирования + + + DontUse + Auto + + + + + + +
      diff --git a/SSL/src/Catalogs/ВерсииРасширений/Forms/ФормаЭлемента/Module.bsl b/SSL/src/Catalogs/ВерсииРасширений/Forms/ФормаЭлемента/Module.bsl new file mode 100644 index 000000000..2cd660d32 --- /dev/null +++ b/SSL/src/Catalogs/ВерсииРасширений/Forms/ФормаЭлемента/Module.bsl @@ -0,0 +1,23 @@ + +#Область ОбработчикиСобытийФормы + +&НаСервере +Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) + + ТолькоПросмотр = Истина; + +КонецПроцедуры + +#КонецОбласти + +#Область ОбработчикиКомандФормы + +&НаКлиенте +Процедура ВключитьВозможностьРедактирования(Команда) + + ТолькоПросмотр = Ложь; + Элементы.ФормаВключитьВозможностьРедактирования.Доступность = Ложь; + +КонецПроцедуры + +#КонецОбласти diff --git a/SSL/src/Catalogs/ВерсииРасширений/ManagerModule.bsl b/SSL/src/Catalogs/ВерсииРасширений/ManagerModule.bsl new file mode 100644 index 000000000..a8f80a284 --- /dev/null +++ b/SSL/src/Catalogs/ВерсииРасширений/ManagerModule.bsl @@ -0,0 +1,479 @@ +#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда + +#Область СлужебныйПрограммныйИнтерфейс + +// Возвращает текущую версию расширений. +// Для поиска версии используется описание установленных расширений, +// дополненное описанием конфигурации, которое обеспечивает соответствие уникального +// идентификатора "слепку" метаданных из конфигурации и подключенных расширений. +// +Функция ВерсияРасширений() Экспорт + + Если Не ОбщегоНазначенияПовтИсп.ДоступноИспользованиеРазделенныхДанных() + И ЗначениеЗаполнено(ПараметрыСеанса.УстановленныеРасширения) Тогда + ВызватьИсключение + НСтр("ru = 'Расширения недоступны в неразделенном режиме. + |Удалите все расширения через конфигуратор.'"); + КонецЕсли; + + Если СтандартныеПодсистемыСервер.УстановленныеРасширенияНедоступны() Тогда + Возврат ПустаяСсылка(); + КонецЕсли; + + Если Не ЗначениеЗаполнено(ПараметрыСеанса.УстановленныеРасширения) Тогда + ЗарегистрироватьПервыйВходПослеУдаленияВсехРасширений(); + Возврат ПустаяСсылка(); + КонецЕсли; + + ВерсияРасширений = ВерсияРасширенийБезУчетаКонтрольнойСуммы(); + Если ЗначениеЗаполнено(ВерсияРасширений) Тогда + Возврат ВерсияРасширений; + КонецЕсли; + + // Описание расширений включено описание метаданных конфигурации, + // так как состав подключенных расширений зависит от изменения конфигурации. + ОписаниеРасширений = ПараметрыСеанса.УстановленныеРасширения + Символы.ПС + + "#" + Метаданные.Имя + " (" + Метаданные.Версия + ")"; + + Запрос = Новый Запрос; + Запрос.УстановитьПараметр("ОписаниеРасширений", ОписаниеРасширений); + Запрос.Текст = + "ВЫБРАТЬ + | ВерсииРасширений.Ссылка КАК Ссылка + |ИЗ + | Справочник.ВерсииРасширений КАК ВерсииРасширений + |ГДЕ + | ВерсииРасширений.ОписаниеМетаданных ПОДОБНО &ОписаниеРасширений"; + + Блокировка = Новый БлокировкаДанных; + ЭлементБлокировки = Блокировка.Добавить("Справочник.ВерсииРасширений"); + ЭлементБлокировки.Режим = РежимБлокировкиДанных.Разделяемый; + НачатьТранзакцию(); + Попытка + Выборка = Запрос.Выполнить().Выбрать(); + ЗафиксироватьТранзакцию(); + Исключение + ОтменитьТранзакцию(); + ВызватьИсключение; + КонецПопытки; + + Если Выборка.Следующий() Тогда + ВерсияРасширений = Выборка.Ссылка; + Иначе + Блокировка = Новый БлокировкаДанных; + ЭлементБлокировки = Блокировка.Добавить("Справочник.ВерсииРасширений"); + ЭлементБлокировки.Режим = РежимБлокировкиДанных.Исключительный; + НачатьТранзакцию(); + Попытка + Выборка = Запрос.Выполнить().Выбрать(); + Если Выборка.Следующий() Тогда + ВерсияРасширений = Выборка.Ссылка; + Иначе + Запрос = Новый Запрос; + Запрос.Текст = + "ВЫБРАТЬ + | ВерсииРасширений.Ссылка КАК Ссылка + |ИЗ + | Справочник.ВерсииРасширений КАК ВерсииРасширений"; + Выборка = Запрос.Выполнить().Выбрать(); + Если Выборка.Следующий() И Выборка.Количество() = 1 Тогда + Объект = Выборка.Ссылка.ПолучитьОбъект(); + // Тут должна быть именно ТекущаяДата(), так как + // именно она устанавливается в поле НачалоСеанса. + Объект.ПоследняяДатаДобавленияВторойВерсии = ТекущаяДата(); + Объект.Записать(); + ВключитьЗаданиеУдалениеУстаревшихПараметровРаботыВерсийРасширений(Истина); + КонецЕсли; + Объект = СоздатьЭлемент(); + Объект.ОписаниеМетаданных = ОписаниеРасширений; + Объект.Записать(); + ВерсияРасширений = Объект.Ссылка; + КонецЕсли; + ЗафиксироватьТранзакцию(); + Исключение + ОтменитьТранзакцию(); + ВызватьИсключение; + КонецПопытки; + КонецЕсли; + + Возврат ВерсияРасширений; + +КонецФункции + +// При запуске в режиме отладки без обновления информационной базы допустимо +// использовать старый кэш метаданных расширений. +// +Процедура ПеререгистрироватьВерсиюРасширенийВРежимеОтладки() Экспорт + + Если СтандартныеПодсистемыСервер.УстановленныеРасширенияНедоступны() Тогда + Возврат; + КонецЕсли; + + ВерсияРасширений = ВерсияРасширенийБезУчетаКонтрольнойСуммы(); + Если Не ЗначениеЗаполнено(ВерсияРасширений) Тогда + Возврат; + КонецЕсли; + + Если ПараметрыСеанса.ВерсияРасширений <> ВерсияРасширений Тогда + ПараметрыСеанса.ВерсияРасширений = ВерсияРасширений; + ЗарегистрироватьИспользованиеВерсииРасширений(); + КонецЕсли; + +КонецПроцедуры + +// Добавляет сведения, что сеанс начал использование версии метаданных. +Процедура ЗарегистрироватьИспользованиеВерсииРасширений() Экспорт + + Если СтандартныеПодсистемыСервер.УстановленныеРасширенияНедоступны() Тогда + ВерсияРасширений = ПараметрыСеанса.ВерсияРасширений; + Возврат; + КонецЕсли; + + // Тут должна быть именно ТекущаяДата(), так как + // именно она устанавливается в поле НачалоСеанса. + НачалоСеанса = ТекущаяДата(); + НомерСеанса = НомерСеансаИнформационнойБазы(); + ВерсияРасширений = ПараметрыСеанса.ВерсияРасширений; + + Если Не ЗначениеЗаполнено(ВерсияРасширений) Тогда + Возврат; + КонецЕсли; + + Запрос = Новый Запрос; + Запрос.Текст = + "ВЫБРАТЬ ПЕРВЫЕ 2 + | ИСТИНА КАК ЗначениеИстина + |ИЗ + | Справочник.ВерсииРасширений КАК ВерсииРасширений"; + + Блокировка = Новый БлокировкаДанных; + ЭлементБлокировки = Блокировка.Добавить("Справочник.ВерсииРасширений"); + ЭлементБлокировки.Режим = РежимБлокировкиДанных.Разделяемый; + + НачатьТранзакцию(); + Попытка + Блокировка.Заблокировать(); + РезультатыЗапроса = Запрос.ВыполнитьПакет(); + ЗафиксироватьТранзакцию(); + Исключение + ОтменитьТранзакцию(); + ВызватьИсключение; + КонецПопытки; + + Если РезультатыЗапроса[0].Выбрать().Количество() < 2 Тогда + Возврат; + КонецЕсли; + + НаборЗаписей = РегистрыСведений.СеансыВерсийРасширений.СоздатьНаборЗаписей(); + НаборЗаписей.Отбор.НомерСеанса.Установить(НомерСеанса); + НаборЗаписей.Отбор.НачалоСеанса.Установить(НачалоСеанса); + НаборЗаписей.Отбор.ВерсияРасширений.Установить(ВерсияРасширений); + + НоваяЗапись = НаборЗаписей.Добавить(); + НоваяЗапись.НомерСеанса = НомерСеанса; + НоваяЗапись.НачалоСеанса = НачалоСеанса; + НоваяЗапись.ВерсияРасширений = ВерсияРасширений; + + НаборЗаписей.Записать(); + +КонецПроцедуры + +// Удаляет устаревшие версии метаданных. +Процедура УдалитьУстаревшиеВерсииПараметров() Экспорт + + Запрос = Новый Запрос; + Запрос.УстановитьПараметр("ТекущаяВерсияРасширений", ПараметрыСеанса.ВерсияРасширений); + Запрос.Текст = + "ВЫБРАТЬ + | ВерсииРасширений.Ссылка КАК ВерсияРасширений, + | СеансыВерсийРасширений.НомерСеанса КАК НомерСеанса, + | СеансыВерсийРасширений.НачалоСеанса КАК НачалоСеанса + |ИЗ + | Справочник.ВерсииРасширений КАК ВерсииРасширений + | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.СеансыВерсийРасширений КАК СеансыВерсийРасширений + | ПО (СеансыВерсийРасширений.ВерсияРасширений = ВерсииРасширений.Ссылка) + |ГДЕ + | ВерсииРасширений.Ссылка <> &ТекущаяВерсияРасширений + |ИТОГИ ПО + | ВерсияРасширений + |; + | + |//////////////////////////////////////////////////////////////////////////////// + |ВЫБРАТЬ ПЕРВЫЕ 1 + | ВерсииРасширений.Ссылка КАК ВерсияРасширений, + | ВерсииРасширений.ПоследняяДатаДобавленияВторойВерсии + |ИЗ + | Справочник.ВерсииРасширений КАК ВерсииРасширений + |ГДЕ + | ВерсииРасширений.ПоследняяДатаДобавленияВторойВерсии <> ДАТАВРЕМЯ(1, 1, 1, 0, 0, 0) + |; + | + |//////////////////////////////////////////////////////////////////////////////// + |ВЫБРАТЬ ПЕРВЫЕ 1 + | ВерсииРасширений.Ссылка КАК ВерсияРасширений, + | ВерсииРасширений.ДатаПервогоВходаПослеУдаленияВсехРасширений + |ИЗ + | Справочник.ВерсииРасширений КАК ВерсииРасширений + |ГДЕ + | ВерсииРасширений.ДатаПервогоВходаПослеУдаленияВсехРасширений <> ДАТАВРЕМЯ(1, 1, 1, 0, 0, 0)"; + + Блокировка = Новый БлокировкаДанных; + ЭлементБлокировки = Блокировка.Добавить("Справочник.ВерсииРасширений"); + ЭлементБлокировки.Режим = РежимБлокировкиДанных.Разделяемый; + ЭлементБлокировки = Блокировка.Добавить("РегистрСведений.СеансыВерсийРасширений"); + ЭлементБлокировки.Режим = РежимБлокировкиДанных.Разделяемый; + + НачатьТранзакцию(); + Попытка + Блокировка.Заблокировать(); + РезультатыЗапроса = Запрос.ВыполнитьПакет(); + ЗафиксироватьТранзакцию(); + Исключение + ОтменитьТранзакцию(); + ВызватьИсключение; + КонецПопытки; + + Выгрузка = РезультатыЗапроса[0].Выгрузить(ОбходРезультатаЗапроса.ПоГруппировкам); + + МассивСеансов = ПолучитьСеансыИнформационнойБазы(); + + // Версия, которая была первой при очередном добавлении второй версии + // (в самом начале или после удаления устаревших версий) может + // использоваться сеансами, которые были открыты до этого события. + ВерсияИспользуемаяВНезарегистрированныхСеансах = Неопределено; + ДатаОкончанияСеансовИспользующихРасширенияБезРегистрации = '00010101'; + Если ЗначениеЗаполнено(ПараметрыСеанса.УстановленныеРасширения) Тогда + Если Не РезультатыЗапроса[1].Пустой() Тогда + Свойства = РезультатыЗапроса[1].Выгрузить()[0]; + ДатаОкончанияСеансовИспользующихРасширенияБезРегистрации + = Свойства.ПоследняяДатаДобавленияВторойВерсии; + ПерваяВерсия = Свойства.ВерсияРасширений; + КонецЕсли; + Иначе + Если Не РезультатыЗапроса[2].Пустой() Тогда + Свойства = РезультатыЗапроса[2].Выгрузить()[0]; + ДатаОкончанияСеансовИспользующихРасширенияБезРегистрации + = Свойства.ДатаПервогоВходаПослеУдаленияВсехРасширений; + ПерваяВерсия = Свойства.ВерсияРасширений; + КонецЕсли; + КонецЕсли; + + ПроверяемыеПриложения = Новый Соответствие; + ПроверяемыеПриложения.Вставить("1CV8", Истина); + ПроверяемыеПриложения.Вставить("1CV8C", Истина); + ПроверяемыеПриложения.Вставить("WebClient", Истина); + ПроверяемыеПриложения.Вставить("COMConnection", Истина); + ПроверяемыеПриложения.Вставить("WSConnection", Истина); + ПроверяемыеПриложения.Вставить("BackgroundJob", Истина); + ПроверяемыеПриложения.Вставить("SystemBackgroundJob", Истина); + + Сеансы = Новый Соответствие; + Для Каждого Сеанс Из МассивСеансов Цикл + Если ПроверяемыеПриложения.Получить(Сеанс.ИмяПриложения) = Неопределено Тогда + Продолжить; + КонецЕсли; + Сеансы.Вставить(Сеанс.НомерСеанса, Сеанс.НачалоСеанса); + Если Сеанс.НачалоСеанса < ДатаОкончанияСеансовИспользующихРасширенияБезРегистрации Тогда + ВерсияИспользуемаяВНезарегистрированныхСеансах = ПерваяВерсия; + КонецЕсли; + КонецЦикла; + + // Удаление устаревших версий метаданных. + ВерсииУдалялись = Ложь; + Для Каждого ОписаниеВерсии Из Выгрузка.Строки Цикл + ВерсияИспользуется = Ложь; + Для Каждого Строка Из ОписаниеВерсии.Строки Цикл + Если СеансСуществует(Строка, Сеансы) Тогда + ВерсияИспользуется = Истина; + Прервать; + КонецЕсли; + КонецЦикла; + ТекущаяВерсия = ОписаниеВерсии.ВерсияРасширений; + Если ВерсияИспользуется + Или ТекущаяВерсия = ВерсияИспользуемаяВНезарегистрированныхСеансах Тогда + Продолжить; + КонецЕсли; + Объект = ТекущаяВерсия.ПолучитьОбъект(); + Объект.Удалить(); + ВерсииУдалялись = Истина; + КонецЦикла; + + // Отключение регламентного задания, если осталась только одна версия расширений. + Блокировка = Новый БлокировкаДанных; + ЭлементБлокировки = Блокировка.Добавить("Справочник.ВерсииРасширений"); + ЭлементБлокировки.Режим = РежимБлокировкиДанных.Разделяемый; + + Запрос = Новый Запрос; + Запрос.Текст = + "ВЫБРАТЬ ПЕРВЫЕ 2 + | ВерсииРасширений.Ссылка КАК Ссылка, + | ВерсииРасширений.ДатаПервогоВходаПослеУдаленияВсехРасширений + |ИЗ + | Справочник.ВерсииРасширений КАК ВерсииРасширений"; + + НачатьТранзакцию(); + Попытка + Блокировка.Заблокировать(); + Выгрузка = Запрос.Выполнить().Выгрузить(); + Если Выгрузка.Количество() < 2 Тогда + Если Выгрузка.Количество() = 0 Тогда + ВключитьЗаданиеУдалениеУстаревшихПараметровРаботыВерсийРасширений(Ложь); + Иначе + // Удаление всех регистраций использования метаданных. + ВсеЗаписи = РегистрыСведений.СеансыВерсийРасширений.СоздатьНаборЗаписей(); + ВсеЗаписи.Записать(); + Если ЗначениеЗаполнено(ПараметрыСеанса.УстановленныеРасширения) Тогда + ВключитьЗаданиеУдалениеУстаревшихПараметровРаботыВерсийРасширений(Ложь); + КонецЕсли; + Если ВерсииУдалялись + И ЗначениеЗаполнено(Выгрузка[0].ДатаПервогоВходаПослеУдаленияВсехРасширений) Тогда + + Объект = Выгрузка[0].Ссылка.ПолучитьОбъект(); + Объект.ДатаПервогоВходаПослеУдаленияВсехРасширений = Неопределено; + Объект.Записать(); + КонецЕсли; + КонецЕсли; + Иначе + // Удаление устаревших регистраций использования метаданных. + ВсеЗаписи = РегистрыСведений.СеансыВерсийРасширений.СоздатьНаборЗаписей(); + ВсеЗаписи.Прочитать(); + + Для Каждого Строка Из ВсеЗаписи Цикл + Если СеансСуществует(Строка, Сеансы) Тогда + Продолжить; + КонецЕсли; + НаборЗаписей = РегистрыСведений.СеансыВерсийРасширений.СоздатьНаборЗаписей(); + НаборЗаписей.Отбор.НомерСеанса.Установить(Строка.НомерСеанса); + НаборЗаписей.Отбор.НачалоСеанса.Установить(Строка.НачалоСеанса); + НаборЗаписей.Отбор.ВерсияРасширений.Установить(Строка.ВерсияРасширений); + НаборЗаписей.Записать(); + КонецЦикла; + КонецЕсли; + ЗафиксироватьТранзакцию(); + Исключение + ОтменитьТранзакцию(); + ВызватьИсключение; + КонецПопытки; + +КонецПроцедуры + +// Вызывается из формы УстановленныеРасширения. +Процедура ПриУдаленииВсехРасширений() Экспорт + + ЗарегистрироватьПервыйВходПослеУдаленияВсехРасширений(); + ВключитьЗаданиеУдалениеУстаревшихПараметровРаботыВерсийРасширений(Истина); + +КонецПроцедуры + +// Включает/Отключает регламентное задание УдалениеУстаревшихПараметровРаботыВерсийРасширений. +Процедура ВключитьЗаданиеУдалениеУстаревшихПараметровРаботыВерсийРасширений(Включить) Экспорт + + СтандартныеПодсистемыСервер.УстановитьИспользованиеПредопределенногоРегламентногоЗадания( + Метаданные.РегламентныеЗадания.УдалениеУстаревшихПараметровРаботыВерсийРасширений, Включить); + +КонецПроцедуры + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +// Для функции ВерсияРасширений и процедуры ПеререгистрироватьВерсиюРасширенийВРежимеОтладки. +Функция ВерсияРасширенийБезУчетаКонтрольнойСуммы() + + Если Не ЗначениеЗаполнено(ПараметрыСеанса.УстановленныеРасширения) Тогда + Возврат Неопределено; + КонецЕсли; + + Если Не ОбщегоНазначенияКлиентСервер.РежимОтладки() + Или Не ОбщегоНазначенияПовтИсп.ДоступноИспользованиеРазделенныхДанных() + Или ОбновлениеИнформационнойБазы.НеобходимоОбновлениеИнформационнойБазы() Тогда + + Возврат Неопределено; + КонецЕсли; + + УстановленныеРасширения = ПараметрыСеанса.УстановленныеРасширения; + ОписаниеРасширений = Новый Массив; + ЧислоСтрок = СтрЧислоСтрок(УстановленныеРасширения); + Для НомерСтроки = 1 По ЧислоСтрок Цикл + ТекущаяСтрока = СтрПолучитьСтроку(УстановленныеРасширения, НомерСтроки); + Позиция = СтрНайти(ТекущаяСтрока, ")"); + ОписаниеРасширений.Добавить(Лев(ТекущаяСтрока, Позиция)); + КонецЦикла; + ОписаниеРасширений.Добавить("#" + Метаданные.Имя + " (" + Метаданные.Версия + ")"); + Запрос = Новый Запрос; + Запрос.Текст = + "ВЫБРАТЬ + | ВерсииРасширений.Ссылка КАК Ссылка, + | ВерсииРасширений.ОписаниеМетаданных + |ИЗ + | Справочник.ВерсииРасширений КАК ВерсииРасширений + |ГДЕ + | ИСТИНА В + | (ВЫБРАТЬ ПЕРВЫЕ 1 + | ИСТИНА + | ИЗ + | РегистрСведений.ИдентификаторыОбъектовВерсийРасширений КАК ВерсииИдентификаторов + | ГДЕ + | ВерсииИдентификаторов.ВерсияРасширений = ВерсииРасширений.Ссылка) + | + |УПОРЯДОЧИТЬ ПО + | ВерсииРасширений.Код УБЫВ"; + Выборка = Запрос.Выполнить().Выбрать(); + + Пока Выборка.Следующий() Цикл + ВерсияРасширений = Выборка.Ссылка; + Для Каждого ОписаниеРасширения Из ОписаниеРасширений Цикл + НомерСтроки = ОписаниеРасширений.Найти(ОписаниеРасширения) + 1; + ТекущаяСтрока = СтрПолучитьСтроку(Выборка.ОписаниеМетаданных, НомерСтроки); + Если Не СтрНачинаетсяС(ТекущаяСтрока, ОписаниеРасширения) Тогда + ВерсияРасширений = Неопределено; + Прервать; + КонецЕсли; + КонецЦикла; + Если ЗначениеЗаполнено(ВерсияРасширений) Тогда + Прервать; + КонецЕсли; + КонецЦикла; + + Возврат ВерсияРасширений; + +КонецФункции + +// Для процедуры УдалитьУстаревшиеВерсииПараметров. +Функция СеансСуществует(ОписаниеСеанса, СуществующиеСеансы) + + НачалоСеанса = СуществующиеСеансы[ОписаниеСеанса.НомерСеанса]; + + Возврат НачалоСеанса <> Неопределено + И НачалоСеанса > (ОписаниеСеанса.НачалоСеанса - 30) + И (ОписаниеСеанса.НачалоСеанса + 30) > НачалоСеанса; + +КонецФункции + +// Для функции ВерсияРасширений и процедуры ПриУдаленииВсехРасширений. +Процедура ЗарегистрироватьПервыйВходПослеУдаленияВсехРасширений() + + Запрос = Новый Запрос; + Запрос.Текст = + "ВЫБРАТЬ ПЕРВЫЕ 2 + | ВерсииРасширений.Ссылка КАК Ссылка, + | ВерсииРасширений.ДатаПервогоВходаПослеУдаленияВсехРасширений + |ИЗ + | Справочник.ВерсииРасширений КАК ВерсииРасширений"; + Выгрузка = Запрос.Выполнить().Выгрузить(); + + Если Выгрузка.Количество() = 1 + И Не ЗначениеЗаполнено(Выгрузка[0].ДатаПервогоВходаПослеУдаленияВсехРасширений) Тогда + + Объект = Выгрузка[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..360c477be --- /dev/null +++ b/SSL/src/Catalogs/ВерсииРасширений/ObjectModule.bsl @@ -0,0 +1,32 @@ + +#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда + +Перем НовыйОбъект; + +#Область ОбработчикиСобытий + +Процедура ПередЗаписью(Отказ) + + Если ОбменДанными.Загрузка Тогда + Возврат; + КонецЕсли; + + НовыйОбъект = ЭтоНовый(); + +КонецПроцедуры + +Процедура ПриЗаписи(Отказ) + + Если ОбменДанными.Загрузка Тогда + Возврат; + КонецЕсли; + + Если НовыйОбъект Тогда + Справочники.ВерсииРасширений.ВключитьЗаданиеУдалениеУстаревшихПараметровРаботыВерсийРасширений(Истина); + КонецЕсли; + +КонецПроцедуры + +#КонецОбласти + +#КонецЕсли diff --git a/SSL/src/Catalogs/ВерсииРасширений/ВерсииРасширений.mdo b/SSL/src/Catalogs/ВерсииРасширений/ВерсииРасширений.mdo new file mode 100644 index 000000000..5fd8a35de --- /dev/null +++ b/SSL/src/Catalogs/ВерсииРасширений/ВерсииРасширений.mdo @@ -0,0 +1,207 @@ + + + + + + + + + + ВерсииРасширений + + ru + Версии расширений + + Catalog.ВерсииРасширений.StandardAttribute.Code + DontUse + + Use + PredefinedDataName + + Use + + + + + Use + Predefined + + Use + + + + + Use + Ref + + ru + Обобщенная версия набора метаданных + + + Use + + + + + Use + DeletionMark + + Use + + + + + Use + IsFolder + + Use + + + + + Use + Owner + true + + ShowError + Use + + + + + Use + Parent + true + + Use + + + + + Use + Description + + ShowError + Use + + + + + Use + Code + + ru + Порядковый номер + + + ru + Номер добавленной версии по порядку + + + Use + + + + DontUse + Managed + + ru + Версия расширений + + 2 + true + 9 + Variable + true + true + InDialog + BothWays + Catalog.ВерсииРасширений.Form.ФормаЭлемента + Catalog.ВерсииРасширений.Form.ФормаСписка + DontUse + + ОписаниеМетаданных + + ru + Описание метаданных + + + String + + + + ru + Строки вида: +<Имя расширения> (<Версия расширения>) <Хеш расширения> +... +#<Имя конфигурации> (<Версия конфигурации>) + + + + + Use + Use + + + ПоследняяДатаДобавленияВторойВерсии + + ru + Последняя дата добавления второй версии + + + Date + + + + ru + Устанавливается в первую версию, когда в справочник добавляется вторая версия. +Используется в задании удаления устаревших версий для определения сеансов, +запущенных до момента добавления без использования процедуры регистрации. + + + + + Use + Use + + + ДатаПервогоВходаПослеУдаленияВсехРасширений + + ru + Дата первого входа после удаления всех расширений + + + Date + + + + ru + Устанавливается при первом входе после удаления всех расширений. +Используется в задании удаления устаревших версий для определения сеансов, +запущенных до момента удаления всех расширений без использования процедуры регистрации. + + + + + Use + Use + + + ФормаЭлемента + + ru + Форма элемента + + PersonalComputer + MobileDevice + + + ФормаСписка + + ru + Форма списка + + PersonalComputer + MobileDevice + + diff --git a/SSL/src/Catalogs/ВерсииФайлов/Commands/ОткрытьВерсииФайла/CommandModule.bsl b/SSL/src/Catalogs/ВерсииФайлов/Commands/ОткрытьВерсииФайла/CommandModule.bsl index e5ac6e122..9984e38b1 100644 --- a/SSL/src/Catalogs/ВерсииФайлов/Commands/ОткрытьВерсииФайла/CommandModule.bsl +++ b/SSL/src/Catalogs/ВерсииФайлов/Commands/ОткрытьВерсииФайла/CommandModule.bsl @@ -1,3 +1,4 @@ +#Область ОбработчикиСобытий &НаКлиенте Процедура ОбработкаКоманды(ПараметрКоманды, ПараметрыВыполненияКоманды) @@ -15,3 +16,5 @@ ПараметрыВыполненияКоманды.Окно); КонецПроцедуры + +#КонецОбласти \ No newline at end of file diff --git a/SSL/src/Catalogs/ВерсииФайлов/Forms/ВерсииФайла/Form.form b/SSL/src/Catalogs/ВерсииФайлов/Forms/ВерсииФайла/Form.form index 3dbc59643..116782b79 100644 --- a/SSL/src/Catalogs/ВерсииФайлов/Forms/ВерсииФайла/Form.form +++ b/SSL/src/Catalogs/ВерсииФайлов/Forms/ВерсииФайла/Form.form @@ -977,7 +977,6 @@ true true true - UseIfNecessary auto true @@ -1267,7 +1266,7 @@ СделатьАктивнойВыполнить - Auto + DontUse Auto @@ -1293,7 +1292,7 @@ Picture - Auto + DontUse Auto @@ -1318,7 +1317,7 @@ ОткрытьКарточку - Auto + DontUse Auto @@ -1340,7 +1339,7 @@ Сравнить - Auto + DontUse Auto @@ -1365,7 +1364,7 @@ ОткрытьВерсию - Auto + DontUse Auto @@ -1391,7 +1390,7 @@ Picture - Auto + DontUse Auto diff --git a/SSL/src/Catalogs/ВерсииФайлов/Forms/ВерсииФайла/Module.bsl b/SSL/src/Catalogs/ВерсииФайлов/Forms/ВерсииФайла/Module.bsl index 1bf30bc85..5606d0b07 100644 --- a/SSL/src/Catalogs/ВерсииФайлов/Forms/ВерсииФайла/Module.bsl +++ b/SSL/src/Catalogs/ВерсииФайлов/Forms/ВерсииФайла/Module.bsl @@ -13,7 +13,10 @@ Возврат; КонецЕсли; - Элементы.ФормаСравнить.Видимость = Не ОбщегоНазначенияКлиентСервер.ЭтоLinuxКлиент(); + ВидимостьКомандыСравнить = + Не ОбщегоНазначенияКлиентСервер.ЭтоLinuxКлиент() И Не ОбщегоНазначенияКлиентСервер.ЭтоВебКлиент(); + Элементы.ФормаСравнить.Видимость = ВидимостьКомандыСравнить; + Элементы.КонтекстноеМенюСписокСравнить.Видимость = ВидимостьКомандыСравнить; УникальныйИдентификаторКарточкиФайла = Параметры.УникальныйИдентификаторКарточкиФайла; @@ -39,7 +42,7 @@ ЗаполнитьСписок(); Оповестить("Запись_Файл", Новый Структура("Событие", "АктивнаяВерсияИзменена"), Параметры.Файл); Иначе - ПоказатьПредупреждение(, НСтр("ru = 'Смена активной версии разрешена только для не занятых файлов.'")); + ПоказатьПредупреждение(, НСтр("ru = 'Смена активной версии разрешена только для незанятых файлов.'")); КонецЕсли; КонецПроцедуры @@ -149,11 +152,6 @@ &НаКлиенте Процедура Сравнить(Команда) - #Если ВебКлиент Тогда - ПоказатьПредупреждение(, НСтр("ru = 'Сравнение версий не поддерживается в веб-клиенте.'")); - Возврат; - #КонецЕсли - ЧислоВыделенныхСтрок = Элементы.Список.ВыделенныеСтроки.Количество(); Если ЧислоВыделенныхСтрок = 2 ИЛИ ЧислоВыделенныхСтрок = 1 Тогда diff --git a/SSL/src/Catalogs/ВерсииФайлов/Forms/ВыборСпособаСравненияВерсий/Form.form b/SSL/src/Catalogs/ВерсииФайлов/Forms/ВыборСпособаСравненияВерсий/Form.form index 42d1070db..7fefae914 100644 --- a/SSL/src/Catalogs/ВерсииФайлов/Forms/ВыборСпособаСравненияВерсий/Form.form +++ b/SSL/src/Catalogs/ВерсииФайлов/Forms/ВыборСпособаСравненияВерсий/Form.form @@ -144,7 +144,6 @@ true true true - UseIfNecessary auto true @@ -188,7 +187,7 @@ TextPicture - Auto + DontUse Auto diff --git a/SSL/src/Catalogs/ВерсииФайлов/Forms/ФормаВыбора/Form.form b/SSL/src/Catalogs/ВерсииФайлов/Forms/ФормаВыбора/Form.form index 8299bce54..6d2fe70cf 100644 --- a/SSL/src/Catalogs/ВерсииФайлов/Forms/ФормаВыбора/Form.form +++ b/SSL/src/Catalogs/ВерсииФайлов/Forms/ФормаВыбора/Form.form @@ -470,7 +470,6 @@ true true true - UseIfNecessary auto true diff --git a/SSL/src/Catalogs/ВерсииФайлов/Forms/ФормаВыбора/Module.bsl b/SSL/src/Catalogs/ВерсииФайлов/Forms/ФормаВыбора/Module.bsl index 37fb8f8a9..5032916d2 100644 --- a/SSL/src/Catalogs/ВерсииФайлов/Forms/ФормаВыбора/Module.bsl +++ b/SSL/src/Catalogs/ВерсииФайлов/Forms/ФормаВыбора/Module.bsl @@ -11,16 +11,11 @@ Элементы.СписокВладелец.Видимость = Ложь; КонецЕсли; - // Отбор не помеченных на удаление. - ОбщегоНазначенияКлиентСервер.УстановитьЭлементОтбораДинамическогоСписка( - Список, "ПометкаУдаления", Ложь, , , Истина, - РежимОтображенияЭлементаНастройкиКомпоновкиДанных.Обычный); - // Оформление помеченных на удаление. ЭлементУсловногоОформления = УсловноеОформление.Элементы.Добавить(); ЭлементЦветаОформления = ЭлементУсловногоОформления.Оформление.Элементы.Найти("TextColor"); - ЭлементЦветаОформления.Значение = Метаданные.ЭлементыСтиля.НедоступныеДанныеЦвет.Значение; + ЭлементЦветаОформления.Значение = Метаданные.ЭлементыСтиля.ТекстЗапрещеннойЯчейкиЦвет.Значение; ЭлементЦветаОформления.Использование = Истина; ЭлементОтбораДанных = ЭлементУсловногоОформления.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); diff --git a/SSL/src/Catalogs/ВерсииФайлов/Forms/ФормаСписка/Form.form b/SSL/src/Catalogs/ВерсииФайлов/Forms/ФормаСписка/Form.form index 1d53202e2..8eb1bfab9 100644 --- a/SSL/src/Catalogs/ВерсииФайлов/Forms/ФормаСписка/Form.form +++ b/SSL/src/Catalogs/ВерсииФайлов/Forms/ФормаСписка/Form.form @@ -771,7 +771,6 @@ true true true - UseIfNecessary auto true diff --git a/SSL/src/Catalogs/ВерсииФайлов/Forms/ФормаСписка/Module.bsl b/SSL/src/Catalogs/ВерсииФайлов/Forms/ФормаСписка/Module.bsl index 571523e72..acdac2bc2 100644 --- a/SSL/src/Catalogs/ВерсииФайлов/Forms/ФормаСписка/Module.bsl +++ b/SSL/src/Catalogs/ВерсииФайлов/Forms/ФормаСписка/Module.bsl @@ -12,7 +12,7 @@ ЭлементУсловногоОформления = УсловноеОформление.Элементы.Добавить(); ЭлементЦветаОформления = ЭлементУсловногоОформления.Оформление.Элементы.Найти("TextColor"); - ЭлементЦветаОформления.Значение = Метаданные.ЭлементыСтиля.НедоступныеДанныеЦвет.Значение; + ЭлементЦветаОформления.Значение = Метаданные.ЭлементыСтиля.ТекстЗапрещеннойЯчейкиЦвет.Значение; ЭлементЦветаОформления.Использование = Истина; ЭлементОтбораДанных = ЭлементУсловногоОформления.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); diff --git a/SSL/src/Catalogs/ВерсииФайлов/Forms/ФормаЭлемента/Form.form b/SSL/src/Catalogs/ВерсииФайлов/Forms/ФормаЭлемента/Form.form index cdf198d29..798a10dca 100644 --- a/SSL/src/Catalogs/ВерсииФайлов/Forms/ФормаЭлемента/Form.form +++ b/SSL/src/Catalogs/ВерсииФайлов/Forms/ФормаЭлемента/Form.form @@ -1011,7 +1011,6 @@ true true true - UseIfNecessary auto true @@ -1094,7 +1093,7 @@ Text - Auto + DontUse Auto @@ -1120,7 +1119,7 @@ Text - Auto + DontUse Auto diff --git a/SSL/src/Catalogs/ВидыКонтактнойИнформации/Forms/ФормаВыбораГруппы/Form.form b/SSL/src/Catalogs/ВидыКонтактнойИнформации/Forms/ФормаВыбораГруппы/Form.form index f1a52fb4b..ed66d0c3b 100644 --- a/SSL/src/Catalogs/ВидыКонтактнойИнформации/Forms/ФормаВыбораГруппы/Form.form +++ b/SSL/src/Catalogs/ВидыКонтактнойИнформации/Forms/ФормаВыбораГруппы/Form.form @@ -315,7 +315,6 @@ true true true - UseIfNecessary auto true diff --git a/SSL/src/Catalogs/ВидыКонтактнойИнформации/Forms/ФормаГруппы/Form.form b/SSL/src/Catalogs/ВидыКонтактнойИнформации/Forms/ФормаГруппы/Form.form index c5d8d1859..0bcb079e0 100644 --- a/SSL/src/Catalogs/ВидыКонтактнойИнформации/Forms/ФормаГруппы/Form.form +++ b/SSL/src/Catalogs/ВидыКонтактнойИнформации/Forms/ФормаГруппы/Form.form @@ -61,7 +61,6 @@ true true true - UseIfNecessary auto true diff --git a/SSL/src/Catalogs/ВидыКонтактнойИнформации/Forms/ФормаСписка/Form.form b/SSL/src/Catalogs/ВидыКонтактнойИнформации/Forms/ФормаСписка/Form.form index c406f2792..dd770bc79 100644 --- a/SSL/src/Catalogs/ВидыКонтактнойИнформации/Forms/ФормаСписка/Form.form +++ b/SSL/src/Catalogs/ВидыКонтактнойИнформации/Forms/ФормаСписка/Form.form @@ -195,7 +195,9 @@ true true true - + + CommonPicture.ВидыКонтактнойИнформации + 1 @@ -451,6 +453,10 @@ -1 Left + + OnCreateAtServer + ПриСозданииНаСервере + CreateFolder DontBlock true @@ -460,7 +466,6 @@ true true true - UseIfNecessary auto true @@ -475,9 +480,6 @@ true - - Список.НомерКартинки - Список.Ref @@ -490,41 +492,53 @@
      true
      ВЫБРАТЬ - // Выбор индекса в общей картинке "КонтактнаяИнформация" - ВЫБОР - КОГДА СправочникВидыКонтактнойИнформации.ЭтоГруппа ТОГДА - ВЫБОР - КОГДА СправочникВидыКонтактнойИнформации.ПометкаУдаления ТОГДА 1 - КОГДА СправочникВидыКонтактнойИнформации.Предопределенный ТОГДА 2 - ИНАЧЕ 0 + ВЫБОР + КОГДА СправочникВидыКонтактнойИнформации.ЭтоГруппа + ТОГДА ВЫБОР + КОГДА СправочникВидыКонтактнойИнформации.ПометкаУдаления + ТОГДА 1 + КОГДА СправочникВидыКонтактнойИнформации.Предопределенный + ТОГДА 2 + ИНАЧЕ 0 + КОНЕЦ + КОГДА СправочникВидыКонтактнойИнформации.ПометкаУдаления + ТОГДА 4 + КОГДА СправочникВидыКонтактнойИнформации.Предопределенный + ТОГДА ВЫБОР СправочникВидыКонтактнойИнформации.Тип + КОГДА ЗНАЧЕНИЕ(Перечисление.ТипыКонтактнойИнформации.Телефон) + ТОГДА 14 + КОГДА ЗНАЧЕНИЕ(Перечисление.ТипыКонтактнойИнформации.АдресЭлектроннойПочты) + ТОГДА 15 + КОГДА ЗНАЧЕНИЕ(Перечисление.ТипыКонтактнойИнформации.ВебСтраница) + ТОГДА 16 + КОГДА ЗНАЧЕНИЕ(Перечисление.ТипыКонтактнойИнформации.Факс) + ТОГДА 17 + КОГДА ЗНАЧЕНИЕ(Перечисление.ТипыКонтактнойИнформации.Другое) + ТОГДА 18 + КОГДА ЗНАЧЕНИЕ(Перечисление.ТипыКонтактнойИнформации.Адрес) + ТОГДА 19 + КОГДА ЗНАЧЕНИЕ(Перечисление.ТипыКонтактнойИнформации.Skype) + ТОГДА 21 + ИНАЧЕ 3 + КОНЕЦ + ИНАЧЕ ВЫБОР СправочникВидыКонтактнойИнформации.Тип + КОГДА ЗНАЧЕНИЕ(Перечисление.ТипыКонтактнойИнформации.Телефон) + ТОГДА 7 + КОГДА ЗНАЧЕНИЕ(Перечисление.ТипыКонтактнойИнформации.АдресЭлектроннойПочты) + ТОГДА 8 + КОГДА ЗНАЧЕНИЕ(Перечисление.ТипыКонтактнойИнформации.ВебСтраница) + ТОГДА 9 + КОГДА ЗНАЧЕНИЕ(Перечисление.ТипыКонтактнойИнформации.Факс) + ТОГДА 10 + КОГДА ЗНАЧЕНИЕ(Перечисление.ТипыКонтактнойИнформации.Другое) + ТОГДА 11 + КОГДА ЗНАЧЕНИЕ(Перечисление.ТипыКонтактнойИнформации.Адрес) + ТОГДА 12 + КОГДА ЗНАЧЕНИЕ(Перечисление.ТипыКонтактнойИнформации.Skype) + ТОГДА 20 + ИНАЧЕ 3 КОНЕЦ - - КОГДА СправочникВидыКонтактнойИнформации.ПометкаУдаления ТОГДА 4 - - КОГДА СправочникВидыКонтактнойИнформации.Предопределенный ТОГДА - ВЫБОР СправочникВидыКонтактнойИнформации.Тип - КОГДА ЗНАЧЕНИЕ(Перечисление.ТипыКонтактнойИнформации.Телефон) ТОГДА 14 - КОГДА ЗНАЧЕНИЕ(Перечисление.ТипыКонтактнойИнформации.АдресЭлектроннойПочты) ТОГДА 15 - КОГДА ЗНАЧЕНИЕ(Перечисление.ТипыКонтактнойИнформации.ВебСтраница) ТОГДА 16 - КОГДА ЗНАЧЕНИЕ(Перечисление.ТипыКонтактнойИнформации.Факс) ТОГДА 17 - КОГДА ЗНАЧЕНИЕ(Перечисление.ТипыКонтактнойИнформации.Другое) ТОГДА 18 - КОГДА ЗНАЧЕНИЕ(Перечисление.ТипыКонтактнойИнформации.Адрес) ТОГДА 19 - ИНАЧЕ 3 - КОНЕЦ - - ИНАЧЕ - ВЫБОР СправочникВидыКонтактнойИнформации.Тип - КОГДА ЗНАЧЕНИЕ(Перечисление.ТипыКонтактнойИнформации.Телефон) ТОГДА 7 - КОГДА ЗНАЧЕНИЕ(Перечисление.ТипыКонтактнойИнформации.АдресЭлектроннойПочты) ТОГДА 8 - КОГДА ЗНАЧЕНИЕ(Перечисление.ТипыКонтактнойИнформации.ВебСтраница) ТОГДА 9 - КОГДА ЗНАЧЕНИЕ(Перечисление.ТипыКонтактнойИнформации.Факс) ТОГДА 10 - КОГДА ЗНАЧЕНИЕ(Перечисление.ТипыКонтактнойИнформации.Другое) ТОГДА 11 - КОГДА ЗНАЧЕНИЕ(Перечисление.ТипыКонтактнойИнформации.Адрес) ТОГДА 12 - ИНАЧЕ 3 - КОНЕЦ - - КОНЕЦ КАК ИндексПиктограммы, - + КОНЕЦ КАК ИндексПиктограммы, СправочникВидыКонтактнойИнформации.Ссылка, СправочникВидыКонтактнойИнформации.ПометкаУдаления, СправочникВидыКонтактнойИнформации.Предопределенный, @@ -535,9 +549,13 @@ СправочникВидыКонтактнойИнформации.РеквизитДопУпорядочивания, СправочникВидыКонтактнойИнформации.РедактированиеТолькоВДиалоге, СправочникВидыКонтактнойИнформации.МожноИзменятьСпособРедактирования, - СправочникВидыКонтактнойИнформации.АдресТолькоРоссийский + СправочникВидыКонтактнойИнформации.АдресТолькоРоссийский, + СправочникВидыКонтактнойИнформации.Используется ИЗ - Справочник.ВидыКонтактнойИнформации КАК СправочникВидыКонтактнойИнформации + Справочник.ВидыКонтактнойИнформации КАК СправочникВидыКонтактнойИнформации +ГДЕ + СправочникВидыКонтактнойИнформации.Используется И ЕстьNULL(СправочникВидыКонтактнойИнформации.Родитель.Используется, Истина) + Catalog.ВидыКонтактнойИнформации true true @@ -568,7 +586,7 @@ ПереместитьЭлементВверх - Auto + DontUse Auto @@ -593,7 +611,7 @@ ПереместитьЭлементВниз - Auto + DontUse Auto diff --git a/SSL/src/Catalogs/ВидыКонтактнойИнформации/Forms/ФормаСписка/Items/Пиктограмма/ValuesPicture.png b/SSL/src/Catalogs/ВидыКонтактнойИнформации/Forms/ФормаСписка/Items/Пиктограмма/ValuesPicture.png deleted file mode 100644 index e948df5d8..000000000 Binary files a/SSL/src/Catalogs/ВидыКонтактнойИнформации/Forms/ФормаСписка/Items/Пиктограмма/ValuesPicture.png and /dev/null differ diff --git a/SSL/src/Catalogs/ВидыКонтактнойИнформации/Forms/ФормаСписка/Module.bsl b/SSL/src/Catalogs/ВидыКонтактнойИнформации/Forms/ФормаСписка/Module.bsl index 13da2eccd..5f7af0ac1 100644 --- a/SSL/src/Catalogs/ВидыКонтактнойИнформации/Forms/ФормаСписка/Module.bsl +++ b/SSL/src/Catalogs/ВидыКонтактнойИнформации/Forms/ФормаСписка/Module.bsl @@ -1,3 +1,15 @@ + +#Область ОбработчикиСобытийФормы + +&НаСервере +Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) + + УстановитьУсловноеОформление(); + +КонецПроцедуры + +#КонецОбласти + #Область ОбработчикиСобытийЭлементовШапкиФормы &НаКлиенте @@ -53,5 +65,17 @@ КонецФункции -#КонецОбласти +&НаСервере +Процедура УстановитьУсловноеОформление() + + Элемент = Список.УсловноеОформление.Элементы.Добавить(); + + ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); + ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Используется"); + ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно; + ОтборЭлемента.ПравоеЗначение = Ложь; + Элемент.Оформление.УстановитьЗначениеПараметра("Видимость", Ложь); + +КонецПроцедуры +#КонецОбласти \ No newline at end of file diff --git a/SSL/src/Catalogs/ВидыКонтактнойИнформации/Forms/ФормаЭлемента/Form.form b/SSL/src/Catalogs/ВидыКонтактнойИнформации/Forms/ФормаЭлемента/Form.form index 72b8addf8..0b65f5049 100644 --- a/SSL/src/Catalogs/ВидыКонтактнойИнформации/Forms/ФормаЭлемента/Form.form +++ b/SSL/src/Catalogs/ВидыКонтактнойИнформации/Forms/ФормаЭлемента/Form.form @@ -505,27 +505,23 @@ ГруппаНастройкиПроверкаАдреса 34 - ЗапрещатьВводНекорректного + ПроверятьКорректностьАдреса 118 - - <key>ru</key> - <value>Запрещать ввод некорректного адреса</value> - true true true - Объект.ЗапрещатьВводНекорректного + Объект.ПроверятьКорректность Right OnChange - ЗапрещатьВводНекорректногоПриИзменении + ПроверятьКорректностьАдресаПриИзменении - ЗапрещатьВводНекорректногоРасширеннаяПодсказка + ПроверятьКорректностьАдресаРасширеннаяПодсказка 120 Label true @@ -535,7 +531,7 @@ - ЗапрещатьВводНекорректногоКонтекстноеМеню + ПроверятьКорректностьАдресаКонтекстноеМеню 119 true @@ -563,10 +559,6 @@ Left Button - - OnChange - ПроверятьПоКлассификаторуПриИзменении - ПроверятьПоКлассификаторуРасширеннаяПодсказка 123 @@ -651,6 +643,40 @@ true + + УказыватьОКТМОВручную + 129 + true + true + + true + + + Объект.УказыватьОКТМО + + Right + + УказыватьОКТМОВручнуюРасширеннаяПодсказка + 131 + Label + true + true + + Left + + + + УказыватьОКТМОВручнуюКонтекстноеМеню + 130 + true + + CheckBoxField + Enter + true + Left + true + + true true @@ -790,10 +816,6 @@ Объект.ПроверятьКорректность Right - - OnChange - ПроверятьКорректностьПриИзменении - ПроверятьКорректностьExtendedTooltip 109 @@ -837,6 +859,134 @@ auto + + Телефон + 132 + + ТелефонCДобавочнымНомером + 134 + true + true + + true + + + Объект.ТелефонCДобавочнымНомером + + Right + + ТелефонCДобавочнымНомеромРасширеннаяПодсказка + 136 + Label + true + true + + Left + + + + ТелефонCДобавочнымНомеромКонтекстноеМеню + 135 + true + + CheckBoxField + Enter + true + Left + true + + + true + true + + true + + + <key>ru</key> + <value>Телефон</value> + + + ru + Телефон + + + ТелефонРасширеннаяПодсказка + 133 + Label + true + true + + Left + + + Page + + Vertical + auto + + + + Skype + 124 + + ДекорацияЗаглушкаSkype + 126 + true + true + + true + + + ДекорацияЗаглушкаSkypeРасширеннаяПодсказка + 128 + Label + true + true + + Left + + + + ДекорацияЗаглушкаSkypeКонтекстноеМеню + 127 + true + + Label + true + true + + Left + + + true + true + + true + + + <key>ru</key> + <value>Skype</value> + + + ru + Skype + + + SkypeРасширеннаяПодсказка + 125 + Label + true + true + + Left + + + Page + + Vertical + auto + + Другое 51 @@ -1037,7 +1187,6 @@ true true true - UseIfNecessary auto true diff --git a/SSL/src/Catalogs/ВидыКонтактнойИнформации/Forms/ФормаЭлемента/Help/ru.html b/SSL/src/Catalogs/ВидыКонтактнойИнформации/Forms/ФормаЭлемента/Help/ru.html index f119a22ee..2fe6c291a 100644 --- a/SSL/src/Catalogs/ВидыКонтактнойИнформации/Forms/ФормаЭлемента/Help/ru.html +++ b/SSL/src/Catalogs/ВидыКонтактнойИнформации/Forms/ФормаЭлемента/Help/ru.html @@ -14,7 +14,9 @@
    • Факс - поле с таким типом контактной информации предназначено для хранения номеров факсов в виде произвольной строки, или в соответствии с шаблоном ввода номера факса. Реквизит используется в печатных формах документов.
    • -
      Другое - поле с таким типом контактной информации может использоваться для хранения произвольной текстовой контактной информации, например, можно поместить информацию о том, как добраться до организации. Программа позволяет в это поле ввести текст длиной до 1024 символов.

    Добавление поля контактной информации в список или документ

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

    Заполните необходимую информацию:

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

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

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

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

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

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

    См. также:

    • Виды контактной информации;
    • Ввод контактной информации; diff --git a/SSL/src/Catalogs/ВидыКонтактнойИнформации/Forms/ФормаЭлемента/Module.bsl b/SSL/src/Catalogs/ВидыКонтактнойИнформации/Forms/ФормаЭлемента/Module.bsl index 322220bdc..700d17b43 100644 --- a/SSL/src/Catalogs/ВидыКонтактнойИнформации/Forms/ФормаЭлемента/Module.bsl +++ b/SSL/src/Catalogs/ВидыКонтактнойИнформации/Forms/ФормаЭлемента/Module.bsl @@ -8,15 +8,12 @@ Возврат; КонецЕсли; - Если Объект.ЗапретитьРедактированиеПользователем Тогда - ТолькоПросмотр = Истина; - КонецЕсли; - - Если Объект.Предопределенный Тогда + Если Объект.Предопределенный Или Объект.ЗапретитьРедактированиеПользователем Тогда Элементы.Наименование.ТолькоПросмотр = Истина; Элементы.Родитель.ТолькоПросмотр = Истина; Элементы.Тип.ТолькоПросмотр = Истина; Элементы.Подсказка.ТолькоПросмотр = Истина; + Элементы.ГруппаТипОбщиеДляВсех.ТолькоПросмотр = Объект.ЗапретитьРедактированиеПользователем; Иначе // Обработчик подсистемы запрета редактирования реквизитов объектов. Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ЗапретРедактированияРеквизитовОбъектов") Тогда @@ -55,6 +52,7 @@ &НаСервере Процедура ПередЗаписьюНаСервере(Отказ, ТекущийОбъект, ПараметрыЗаписи) + ТекущийОбъект.ПроверятьПоФИАС = (ПроверятьПоКлассификатору = 0); Если Не ТекущийОбъект.ПроверитьЗаполнение() Тогда Отказ = Истина; КонецЕсли; @@ -109,26 +107,8 @@ КонецПроцедуры &НаКлиенте -Процедура ЗапрещатьВводНекорректногоПриИзменении(Элемент) - - ПроверятьПоКлассификаторуПриИзменении(Элемент); +Процедура ПроверятьКорректностьАдресаПриИзменении(Элемент) ОтобразитьДоступностьВариантовПроверкиПоКлассификатору(); - -КонецПроцедуры - -&НаКлиенте -Процедура ПроверятьКорректностьПриИзменении(Элемент) - - ИзменитьРеквизитыПриИзмененииПроверятьКорректность(); - -КонецПроцедуры - -&НаКлиенте -Процедура ПроверятьПоКлассификаторуПриИзменении(Элемент) - - Объект.ПроверятьПоФИАС = (ПроверятьПоКлассификатору = 0); - Объект.ПроверятьКорректность = Объект.ЗапрещатьВводНекорректного; - КонецПроцедуры #КонецОбласти @@ -163,12 +143,14 @@ ИначеЕсли Объект.Тип = ПредопределенноеЗначение("Перечисление.ТипыКонтактнойИнформации.АдресЭлектроннойПочты") Тогда Элементы.Проверки.ТекущаяСтраница = Элементы.Проверки.ПодчиненныеЭлементы.АдресЭлектроннойПочты; Элементы.РедактированиеТолькоВДиалоге.Доступность = Ложь; - + ИначеЕсли Объект.Тип = ПредопределенноеЗначение("Перечисление.ТипыКонтактнойИнформации.Skype") Тогда + Элементы.Проверки.ТекущаяСтраница = Элементы.Проверки.ПодчиненныеЭлементы.Skype; + Элементы.РедактированиеТолькоВДиалоге.Доступность = Ложь; + Элементы.РазрешитьВводНесколькихЗначений.Доступность = Истина; ИначеЕсли Объект.Тип = ПредопределенноеЗначение("Перечисление.ТипыКонтактнойИнформации.Телефон") Или Объект.Тип = ПредопределенноеЗначение("Перечисление.ТипыКонтактнойИнформации.Факс") Тогда - Элементы.Проверки.ТекущаяСтраница = Элементы.Проверки.ПодчиненныеЭлементы.Другое; + Элементы.Проверки.ТекущаяСтраница = Элементы.Проверки.ПодчиненныеЭлементы.Телефон; Элементы.РедактированиеТолькоВДиалоге.Доступность = Объект.МожноИзменятьСпособРедактирования; - Иначе Элементы.Проверки.ТекущаяСтраница = Элементы.Проверки.ПодчиненныеЭлементы.Другое; Элементы.РедактированиеТолькоВДиалоге.Доступность = Ложь; @@ -178,7 +160,7 @@ &НаКлиенте Процедура ОтобразитьДоступностьВариантовПроверкиПоКлассификатору() - Если Объект.ЗапрещатьВводНекорректного Тогда + Если Объект.ПроверятьКорректность Тогда Элементы.ПроверятьПоКлассификатору.Доступность = Истина; Иначе Элементы.ПроверятьПоКлассификатору.Доступность = Ложь; @@ -192,7 +174,6 @@ ИначеЕсли Объект.Тип = ПредопределенноеЗначение("Перечисление.ТипыКонтактнойИнформации.АдресЭлектроннойПочты") Тогда Объект.РедактированиеТолькоВДиалоге = Ложь; - ИзменитьРеквизитыПриИзмененииПроверятьКорректность(); ИначеЕсли Объект.Тип = ПредопределенноеЗначение("Перечисление.ТипыКонтактнойИнформации.Телефон") Или Объект.Тип = ПредопределенноеЗначение("Перечисление.ТипыКонтактнойИнформации.Факс") Тогда @@ -208,9 +189,10 @@ &НаКлиенте Процедура ИзменитьОтображениеПриИзмененииТолькоРоссии() - Элементы.ПроверятьПоКлассификатору.Доступность = Объект.ЗапрещатьВводНекорректного; - Элементы.ЗапрещатьВводНекорректного.Доступность = Объект.АдресТолькоРоссийский; + Элементы.ПроверятьПоКлассификатору.Доступность = Объект.ПроверятьКорректность; + Элементы.ПроверятьКорректностьАдреса.Доступность = Объект.АдресТолькоРоссийский; Элементы.СкрыватьНеактуальныеАдреса.Доступность = Объект.АдресТолькоРоссийский; + Элементы.УказыватьОКТМОВручную.Доступность = Объект.АдресТолькоРоссийский; КонецПроцедуры @@ -220,17 +202,9 @@ Если Не Объект.АдресТолькоРоссийский Тогда Объект.ПроверятьКорректность = Ложь; Объект.СкрыватьНеактуальныеАдреса = Ложь; + Объект.УказыватьОКТМО = Ложь; КонецЕсли; - ИзменитьРеквизитыПриИзмененииПроверятьКорректность(); - -КонецПроцедуры - -&НаКлиенте -Процедура ИзменитьРеквизитыПриИзмененииПроверятьКорректность() - - Объект.ЗапрещатьВводНекорректного = Объект.ПроверятьКорректность; - КонецПроцедуры #КонецОбласти diff --git a/SSL/src/Catalogs/ВидыКонтактнойИнформации/ManagerModule.bsl b/SSL/src/Catalogs/ВидыКонтактнойИнформации/ManagerModule.bsl index 670663afe..150d1a0e7 100644 --- a/SSL/src/Catalogs/ВидыКонтактнойИнформации/ManagerModule.bsl +++ b/SSL/src/Catalogs/ВидыКонтактнойИнформации/ManagerModule.bsl @@ -5,9 +5,9 @@ // Возвращает описание блокируемых реквизитов. // // Возвращаемое значение: -// Массив - содержит строки в формате ИмяРеквизита[;ИмяЭлементаФормы,...] -// где ИмяРеквизита - имя реквизита объекта, ИмяЭлементаФормы - имя элемента формы, связанного с -// реквизитом. +// Массив - содержит строки в формате ИмяРеквизита[;ИмяЭлементаФормы,...] +// где ИмяРеквизита - имя реквизита объекта, ИмяЭлементаФормы - имя элемента формы, +// связанного с реквизитом. // Функция ПолучитьБлокируемыеРеквизитыОбъекта() Экспорт diff --git a/SSL/src/Catalogs/ВидыКонтактнойИнформации/ВидыКонтактнойИнформации.mdo b/SSL/src/Catalogs/ВидыКонтактнойИнформации/ВидыКонтактнойИнформации.mdo index 1713cc961..758f6afc2 100644 --- a/SSL/src/Catalogs/ВидыКонтактнойИнформации/ВидыКонтактнойИнформации.mdo +++ b/SSL/src/Catalogs/ВидыКонтактнойИнформации/ВидыКонтактнойИнформации.mdo @@ -248,18 +248,18 @@ Use Use - - ЗапрещатьВводНекорректного + + ЗапретитьРедактированиеПользователем ru - Запрещать ввод некорректного + Запретить редактирование пользователем Boolean ru - Запрещать ввод некорректных данных + Запретить редактирование пользователем вида пользователем @@ -267,6 +267,28 @@ Use Use + + Используется + + ru + Используется + + + Boolean + + + ru + Вид контактной информации используется + + + + + true + + Use + ForFolderAndItem + Use + МожноИзменятьСпособРедактирования @@ -332,7 +354,7 @@ ПроверятьКорректность ru - Проверять корректность + Запрещать ввод некорректного адреса Boolean @@ -358,7 +380,7 @@ ru - Проверять адрес по ФИАС + Проверять корректность ввода адресов по классификатору ФИАС @@ -407,7 +429,7 @@ РеквизитДопУпорядочивания ru - Порядок + Реквизит доп упорядочивания Number @@ -446,6 +468,25 @@ Use Use + + ТелефонCДобавочнымНомером + + ru + Телефон c добавочным номером + + + Boolean + + + ru + Телефон может содержать добавочный номер + + + + + Use + Use + Тип @@ -469,18 +510,18 @@ Use Use - - ЗапретитьРедактированиеПользователем + + УказыватьОКТМО ru - Запретить редактирование пользователем + Указывать ОКТМО Boolean ru - Запретить редактирование пользователем вида пользователем + Возможность ввода ОКТМО в адресе diff --git a/SSL/src/Catalogs/ВнешниеПользователи/Commands/ВнешнийДоступ/CommandModule.bsl b/SSL/src/Catalogs/ВнешниеПользователи/Commands/ВнешнийДоступ/CommandModule.bsl index 3b23b1ac2..f06563141 100644 --- a/SSL/src/Catalogs/ВнешниеПользователи/Commands/ВнешнийДоступ/CommandModule.bsl +++ b/SSL/src/Catalogs/ВнешниеПользователи/Commands/ВнешнийДоступ/CommandModule.bsl @@ -1,3 +1,4 @@ +#Область ОбработчикиСобытий &НаКлиенте Процедура ОбработкаКоманды(ПараметрКоманды, ПараметрыВыполненияКоманды) @@ -24,3 +25,5 @@ КонецПопытки; КонецПроцедуры + +#КонецОбласти diff --git a/SSL/src/Catalogs/ВнешниеПользователи/Forms/ФормаСписка/Attributes/ВнешниеПользователиСписок/ExtInfo/ListSettings.dcss b/SSL/src/Catalogs/ВнешниеПользователи/Forms/ФормаСписка/Attributes/ВнешниеПользователиСписок/ExtInfo/ListSettings.dcss index 95cfbeb2c..1785e91bf 100644 --- a/SSL/src/Catalogs/ВнешниеПользователи/Forms/ФормаСписка/Attributes/ВнешниеПользователиСписок/ExtInfo/ListSettings.dcss +++ b/SSL/src/Catalogs/ВнешниеПользователи/Forms/ФормаСписка/Attributes/ВнешниеПользователиСписок/ExtInfo/ListSettings.dcss @@ -1,16 +1,8 @@ - - false - Подготовлен - Equal - true - Подготовленные ответственным за список - Normal - Normal - e391d2e4-4713-4515-aa35-61e44224b313 + dfcece9d-5077-440b-b6b3-45a5cb4538eb diff --git a/SSL/src/Catalogs/ВнешниеПользователи/Forms/ФормаСписка/Form.form b/SSL/src/Catalogs/ВнешниеПользователи/Forms/ФормаСписка/Form.form index bdac6858b..f0144577f 100644 --- a/SSL/src/Catalogs/ВнешниеПользователи/Forms/ФормаСписка/Form.form +++ b/SSL/src/Catalogs/ВнешниеПользователи/Forms/ФормаСписка/Form.form @@ -1,5 +1,98 @@ + + ГруппаНастроек + 219 + + ВидПользователей + 221 + + <key>ru</key> + <value>Вид</value> + + true + true + + true + + + ВидПользователей + + + ВидПользователейРасширеннаяПодсказка + 223 + Label + true + true + + Left + + + + ВидПользователейКонтекстноеМеню + 222 + true + + InputField + Enter + true + Left + true + + + StartChoice + ВидПользователейНачалоВыбора + + + Clearing + ВидПользователейОчистка + + 45 + true + true + false + true + true + true + true + true + true + Normal + + + true + true + + true + + + <key>ru</key> + <value>Группа настроек</value> + + + ru + Группа настроек + + + ГруппаНастроекРасширеннаяПодсказка + 220 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + true + true + Auto + Auto + + ГруппаПользовательскихНастроек 165 @@ -201,6 +294,111 @@ КоманднаяПанельВнешниеПользователи 53 + + ФормаСкопировать + 203 + true + true + + true + + + ФормаСкопироватьРасширеннаяПодсказка + 204 + Label + true + true + + Left + + + Form.StandardCommand.Copy + Normal + Auto + true + true + UserCmds + Auto + + + ФормаИзменить + 205 + true + true + + true + + + ФормаИзменитьРасширеннаяПодсказка + 206 + Label + true + true + + Left + + + Form.StandardCommand.Change + Normal + Auto + true + true + UserCmds + Auto + + + ФормаУстановитьПароль + 207 + true + true + + true + + + ФормаУстановитьПарольРасширеннаяПодсказка + 208 + Label + true + true + + Left + + + Form.Command.УстановитьПароль + Normal + Auto + true + true + UserCmds + Auto + InAdditionalSubmenu + + + ВнешниеПользователиСтандартныеКоманды + 201 + true + true + + true + + + <key>ru</key> + <value>Внешние пользователи стандартные команды</value> + + + ВнешниеПользователиСтандартныеКомандыРасширеннаяПодсказка + 202 + Label + true + true + + Left + + + + Form + + СведенияОВнешнихПользователях 133 @@ -248,7 +446,7 @@ Left - Catalog.Пользователи.Command.ПользователиИБ + Catalog.Пользователи.Command.ПользователиИнформационнойБазы Normal Auto true @@ -293,10 +491,6 @@ ru Командная панель внешние пользователи - - ru - Командная панель внешние пользователи - КоманднаяПанельВнешниеПользователиExtendedTooltip 105 @@ -307,9 +501,7 @@ Left - - Form - + ФормаСправка @@ -915,6 +1107,10 @@ BeforeAddRow ВнешниеПользователиСписокПередНачаломДобавления + + OnActivateRow + ВнешниеПользователиСписокПриАктивизацииСтроки + ВнешниеПользователиСписокСтрокаПоиска 179 @@ -999,6 +1195,136 @@ ВнешниеПользователиСписокКонтекстноеМеню 49 + + ВнешниеПользователиСписокКонтекстноеМенюСоздать + 211 + true + true + + true + + + ВнешниеПользователиСписокКонтекстноеМенюСоздатьРасширеннаяПодсказка + 212 + Label + true + true + + Left + + + Form.Item.ВнешниеПользователиСписок.StandardCommand.Create + Normal + Auto + true + true + UserCmds + Auto + + + ВнешниеПользователиСписокКонтекстноеМенюСкопировать + 213 + true + true + + true + + + ВнешниеПользователиСписокКонтекстноеМенюСкопироватьРасширеннаяПодсказка + 214 + Label + true + true + + Left + + + Form.Item.ВнешниеПользователиСписок.StandardCommand.Copy + Normal + Auto + true + true + UserCmds + Auto + + + ВнешниеПользователиСписокКонтекстноеМенюИзменить + 215 + true + true + + true + + + ВнешниеПользователиСписокКонтекстноеМенюИзменитьРасширеннаяПодсказка + 216 + Label + true + true + + Left + + + Form.Item.ВнешниеПользователиСписок.StandardCommand.Change + Normal + Auto + true + true + UserCmds + Auto + + + ВнешниеПользователиСписокКонтекстноеМенюУстановитьПароль + 217 + true + true + + true + + + ВнешниеПользователиСписокКонтекстноеМенюУстановитьПарольРасширеннаяПодсказка + 218 + Label + true + true + + Left + + + Form.Command.УстановитьПароль + Normal + Auto + true + true + UserCmds + Auto + + + ВнешниеПользователиСписокКонтекстноеМенюСтандартныеКоманды + 209 + true + true + + true + + + <key>ru</key> + <value>Внешние пользователи список контекстное меню стандартные команды</value> + + + ВнешниеПользователиСписокКонтекстноеМенюСтандартныеКомандыРасширеннаяПодсказка + 210 + Label + true + true + + Left + + + + Item.ВнешниеПользователиСписок + + ВнешниеПользователиСписокКонтекстноеМенюНазначитьГруппы 76 @@ -1051,7 +1377,6 @@ UserCmds Auto - true true true @@ -1681,9 +2006,6 @@ true - - Items.ГруппыВнешнихПользователей.CurrentData.Комментарий - Top ГруппыВнешнихПользователейКомментарийРасширеннаяПодсказка @@ -1743,7 +2065,7 @@ true true - Items.ГруппыВнешнихПользователей.CurrentData.Description + Items.ГруппыВнешнихПользователей.CurrentData.ВсеОбъектыАвторизации Auto Auto @@ -1934,7 +2256,6 @@ true true true - UseIfNecessary auto true @@ -1956,6 +2277,9 @@ ВнешниеПользователиСписок.Ref + + ВнешниеПользователиСписок.ВозможноСменитьПароль + ВнешниеПользователиСписок.Недействителен @@ -1969,34 +2293,47 @@ ВнешниеПользователи.Предопределенный, ВнешниеПользователи.Наименование, ВнешниеПользователи.Комментарий, + ТИПЗНАЧЕНИЯ(ВнешниеПользователи.Ссылка.ОбъектАвторизации) КАК ТипОбъектаАвторизации, ВЫБОР КОГДА ВнешниеПользователи.ПометкаУдаления ТОГДА 6 ИНАЧЕ 7 - КОНЕЦ КАК НомерКартинки + КОНЕЦ КАК НомерКартинки, + ВЫБОР + КОГДА ВнешниеПользователи.Недействителен + ТОГДА ЛОЖЬ + КОГДА ВнешниеПользователи.ИдентификаторПользователяИБ = &ИдентификаторТекущегоПользователяИБ + ТОГДА ИСТИНА + КОГДА &ВозможноСменитьТолькоСвойПароль + ТОГДА ЛОЖЬ + КОГДА ВнешниеПользователи.ИдентификаторПользователяИБ = &ПустойУникальныйИдентификатор + ТОГДА ЛОЖЬ + ИНАЧЕ ИСТИНА + КОНЕЦ КАК ВозможноСменитьПароль ИЗ Справочник.ВнешниеПользователи КАК ВнешниеПользователи ГДЕ - (&ЛюбойТипОбъектовАвторизации - ИЛИ &ТипОбъектовАвторизации = ТИПЗНАЧЕНИЯ(ВнешниеПользователи.ОбъектАвторизации)) - И (&ВыбиратьИерархически - И ИСТИНА В - (ВЫБРАТЬ - ИСТИНА - ИЗ - РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей - ГДЕ - СоставыГруппПользователей.Пользователь = ВнешниеПользователи.Ссылка - И СоставыГруппПользователей.ГруппаПользователей = &ГруппаВнешнихПользователей) - ИЛИ НЕ &ВыбиратьИерархически - И ИСТИНА В + ВЫБОР + КОГДА &ВсеВнешниеПользователи + ТОГДА ИСТИНА + КОГДА &ВыбиратьИерархически + ТОГДА ИСТИНА В + (ВЫБРАТЬ + ИСТИНА + ИЗ + РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ГДЕ + СоставыГруппПользователей.Пользователь = ВнешниеПользователи.Ссылка + И СоставыГруппПользователей.ГруппаПользователей = &ГруппаВнешнихПользователей) + ИНАЧЕ ИСТИНА В (ВЫБРАТЬ ИСТИНА ИЗ Справочник.ГруппыВнешнихПользователей.Состав КАК ГруппыВнешнихПользователейСостав ГДЕ ГруппыВнешнихПользователейСостав.ВнешнийПользователь = ВнешниеПользователи.Ссылка - И ГруппыВнешнихПользователейСостав.Ссылка = &ГруппаВнешнихПользователей)) + И ГруппыВнешнихПользователейСостав.Ссылка = &ГруппаВнешнихПользователей) + КОНЕЦ Catalog.ВнешниеПользователи true true @@ -2021,6 +2358,7 @@ true + FunctionalOption.ИспользоватьВнешнихПользователей ГруппыВнешнихПользователей.DeletionMark @@ -2033,9 +2371,6 @@ ГруппыВнешнихПользователей.ВсеОбъектыАвторизации - - ГруппыВнешнихПользователей.ТипОбъектовАвторизации - ВЫБРАТЬ ГруппыВнешнихПользователей.Ссылка, @@ -2048,15 +2383,10 @@ ТОГДА 8 ИНАЧЕ 9 КОНЕЦ КАК НомерКартинки, - ГруппыВнешнихПользователей.ТипОбъектовАвторизации, ГруппыВнешнихПользователей.ВсеОбъектыАвторизации, ГруппыВнешнихПользователей.Комментарий ИЗ - Справочник.ГруппыВнешнихПользователей КАК ГруппыВнешнихПользователей -ГДЕ - (ГруппыВнешнихПользователей.ТипОбъектовАвторизации = НЕОПРЕДЕЛЕНО - ИЛИ &ЛюбойТипОбъектовАвторизации - ИЛИ &ТипОбъектовАвторизации = ТИПЗНАЧЕНИЯ(ГруппыВнешнихПользователей.ТипОбъектовАвторизации)) + Справочник.ГруппыВнешнихПользователей КАК ГруппыВнешнихПользователей Catalog.ГруппыВнешнихПользователей true true @@ -2081,6 +2411,7 @@ true + FunctionalOption.ИспользоватьВнешнихПользователей ВыбиратьИерархически @@ -2134,6 +2465,7 @@ true + FunctionalOption.ИспользоватьВнешнихПользователей Пользователь @@ -2226,6 +2558,26 @@ <edit> <common>true</common> </edit> + <functionalOptions>FunctionalOption.ИспользоватьВнешнихПользователей</functionalOptions> + </attributes> + <attributes> + <name>ВидПользователей</name> + <title> + <key>ru</key> + <value>Вид пользователей</value> + + 12 + + String + + + + true + + + true + + FunctionalOption.ИспользоватьВнешнихПользователей СоздатьГруппуВнешнихПользователей @@ -2249,7 +2601,8 @@ СоздатьГруппуВнешнихПользователей - Auto + FunctionalOption.ИспользоватьВнешнихПользователей + DontUse Auto @@ -2275,8 +2628,9 @@ НазначитьГруппы + FunctionalOption.ИспользоватьВнешнихПользователей TextPicture - Auto + DontUse Auto @@ -2298,7 +2652,8 @@ ВыбратьГруппу - Auto + FunctionalOption.ИспользоватьВнешнихПользователей + DontUse Auto @@ -2320,7 +2675,8 @@ ВыбратьПользователяКоманда - Auto + FunctionalOption.ИспользоватьВнешнихПользователей + DontUse Auto @@ -2342,7 +2698,8 @@ ОтменитьВыборПользователяИлиГруппы - Auto + FunctionalOption.ИспользоватьВнешнихПользователей + DontUse Auto @@ -2364,7 +2721,8 @@ ОчиститьСписокВыбранныхПользователейИГрупп - Auto + FunctionalOption.ИспользоватьВнешнихПользователей + DontUse Auto @@ -2386,7 +2744,7 @@ ЗавершитьИЗакрыть - Auto + DontUse Auto @@ -2411,7 +2769,8 @@ СведенияОВнешнихПользователях - Auto + FunctionalOption.ИспользоватьВнешнихПользователей + DontUse Auto @@ -2433,7 +2792,27 @@ ИзменитьВыделенные - Auto + FunctionalOption.ИспользоватьВнешнихПользователей + DontUse + Auto + + + УстановитьПароль + + <key>ru</key> + <value>Установить пароль...</value> + + 10 + + true + + + + УстановитьПароль + + + FunctionalOption.ИспользоватьВнешнихПользователей + DontUse Auto @@ -2466,6 +2845,10 @@ СкрываемыеПользователи + + Назначение + + diff --git a/SSL/src/Catalogs/ВнешниеПользователи/Forms/ФормаСписка/Module.bsl b/SSL/src/Catalogs/ВнешниеПользователи/Forms/ФормаСписка/Module.bsl index 9b56e4949..eaa9164aa 100644 --- a/SSL/src/Catalogs/ВнешниеПользователи/Forms/ФормаСписка/Module.bsl +++ b/SSL/src/Catalogs/ВнешниеПользователи/Forms/ФормаСписка/Module.bsl @@ -27,11 +27,21 @@ ВыбиратьИерархически = Истина; ЗаполнитьХранимыеПараметры(); - ЗаполнитьПараметрыДинамическихСписков(); + + МассивПустыхСсылок = Неопределено; + Параметры.Свойство("Назначение", МассивПустыхСсылок); + ЗаполнитьПараметрыДинамическихСписков(МассивПустыхСсылок); Если Параметры.РежимВыбора Тогда СтандартныеПодсистемыСервер.УстановитьКлючНазначенияФормы(ЭтотОбъект, "ВыборПодбор"); РежимОткрытияОкна = РежимОткрытияОкнаФормы.БлокироватьОкноВладельца; + + ИначеЕсли Пользователи.ЭтоПолноправныйПользователь() Тогда + // Добавление отбора пользователей, подготовленных ответственным за список. + ОбщегоНазначенияКлиентСервер.УстановитьЭлементОтбораДинамическогоСписка( + ВнешниеПользователиСписок, "Подготовлен", Истина, , + НСтр("ru = 'Подготовленные ответственным за список'"), Ложь, + РежимОтображенияЭлементаНастройкиКомпоновкиДанных.Обычный); КонецЕсли; // Скрытие пользователей с пустым идентификатором, если значение параметра Истина. @@ -54,11 +64,13 @@ ВидСравненияКД); КонецЕсли; - НастроитьПорядокГруппыВсеВнешниеПользователи(ГруппыВнешнихПользователей); ОформитьИСкрытьНедействительныхВнешнихПользователей(); + НастроитьПараметрыСпискаВнешнихПользователейДляКомандыУстановитьПароль(); + НастроитьПорядокГруппыВсеВнешниеПользователи(ГруппыВнешнихПользователей); ХранимыеПараметры.Вставить("РасширенныйПодбор", Параметры.РасширенныйПодбор); Элементы.ВыбранныеПользователиИГруппы.Видимость = ХранимыеПараметры.РасширенныйПодбор; + Элементы.ВидПользователей.Видимость = Не ХранимыеПараметры.РасширенныйПодбор; ХранимыеПараметры.Вставить( "ИспользоватьГруппы", ПолучитьФункциональнуюОпцию("ИспользоватьГруппыПользователей")); @@ -71,7 +83,8 @@ Элементы.НазначитьГруппы.Видимость = Ложь; КонецЕсли; - Если НЕ Пользователи.ЭтоПолноправныйПользователь(, ОбщегоНазначенияПовтИсп.РежимРаботыПрограммы().Локальный) Тогда + РазделениеВключено = ОбщегоНазначенияПовтИсп.РазделениеВключено(); + Если НЕ Пользователи.ЭтоПолноправныйПользователь(, Не РазделениеВключено) Тогда Если Элементы.Найти("ПользователиИБ") <> Неопределено Тогда Элементы.ПользователиИБ.Видимость = Ложь; КонецЕсли; @@ -84,12 +97,6 @@ Элементы.ПользователиИБ.Видимость = Ложь; КонецЕсли; Элементы.СведенияОВнешнихПользователях.Видимость = Ложь; - - // Отбор не помеченных на удаление. - ОбщегоНазначенияКлиентСервер.УстановитьЭлементОтбораДинамическогоСписка( - ВнешниеПользователиСписок, "ПометкаУдаления", Ложь, , , Истина, - РежимОтображенияЭлементаНастройкиКомпоновкиДанных.Обычный); - Элементы.ВнешниеПользователиСписок.РежимВыбора = Истина; Элементы.ГруппыВнешнихПользователей.РежимВыбора = ХранимыеПараметры.ВыборГруппВнешнихПользователей; @@ -134,6 +141,20 @@ Элементы.ПользователиСписокКонтекстноеМенюИзменитьВыделенные.Видимость = Ложь; КонецЕсли; + ОписаниеОбъекта = Новый Структура; + ОписаниеОбъекта.Вставить("Ссылка", Справочники.Пользователи.ПустаяСсылка()); + ОписаниеОбъекта.Вставить("ИдентификаторПользователяИБ", Новый УникальныйИдентификатор("00000000-0000-0000-0000-000000000000")); + УровеньДоступа = ПользователиСлужебный.УровеньДоступаКСвойствамПользователя(ОписаниеОбъекта); + + Если Не УровеньДоступа.УправлениеСписком Тогда + Элементы.ФормаУстановитьПароль.Видимость = Ложь; + Элементы.ВнешниеПользователиСписокКонтекстноеМенюУстановитьПароль.Видимость = Ложь; + КонецЕсли; + + Если ОбщегоНазначенияПовтИсп.ЭтоАвтономноеРабочееМесто() Тогда + ТолькоПросмотр = Истина; + КонецЕсли; + КонецПроцедуры &НаКлиенте @@ -198,6 +219,14 @@ ПереключитьОтображениеНедействительныхПользователей(ПоказыватьНедействительныхПользователей); КонецПроцедуры +&НаКлиенте +Процедура ВидПользователейНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка) + + ОписаниеОповещения = Новый ОписаниеОповещения("ПослеВыбораНазначения", ЭтотОбъект); + ПользователиСлужебныйКлиент.ВыбратьНазначение(ЭтотОбъект, Нстр("ru = 'Выбор вида пользователей'"), Ложь, Истина, ОписаниеОповещения); + +КонецПроцедуры + #КонецОбласти #Область ОбработчикиСобытийЭлементовТаблицыФормыГруппыВнешнихПользователей @@ -259,8 +288,9 @@ СтандартнаяОбработка = Ложь; Если ВыбиратьИерархически Тогда - ПоказатьПредупреждение(,НСтр("ru = 'Для перетаскивания пользователя в группы необходимо отключить - |флажок ""Показывать пользователей дочерних групп"".'")); + ПоказатьПредупреждение(, + НСтр("ru = 'Для перетаскивания пользователя в группы необходимо отключить + |флажок ""Показывать пользователей нижестоящих групп"".'")); Возврат; КонецЕсли; @@ -300,36 +330,47 @@ Если ГруппаПомеченаНаУдаление Тогда ШаблонДействия = ?(Перемещение, НСтр("ru = 'Группа ""%1"" помечена на удаление. %2'"), НСтр("ru = 'Группа ""%1"" помечена на удаление. %2'")); - ДействиеСПользователем = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - ШаблонДействия, Строка(Строка), ДействиеСПользователем); + ДействиеСПользователем = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонДействия, Строка(Строка), ДействиеСПользователем); КонецЕсли; Если КоличествоПользователей = 1 Тогда - Если ДействиеИсключитьПользователя Тогда - ШаблонВопроса = НСтр("ru = 'Исключить пользователя ""%2"" из группы ""%4""?'"); + ТекстВопроса = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Исключить пользователя ""%1"" из группы ""%2""?'"), + Строка(ПараметрыПеретаскивания.Значение[0]), + Строка(Элементы.ГруппыВнешнихПользователей.ТекущаяСтрока)); + ИначеЕсли Не ГруппаПомеченаНаУдаление Тогда - ШаблонВопроса = НСтр("ru = '%1 пользователя ""%2"" в группу ""%3""?'"); + ТекстВопроса = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = '%1 пользователя ""%2"" в группу ""%3""?'"), + ДействиеСПользователем, + Строка(ПараметрыПеретаскивания.Значение[0]), + Строка(Строка)); Иначе - ШаблонВопроса = НСтр("ru = '%1 пользователя ""%2"" в эту группу?'"); + ТекстВопроса = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = '%1 пользователя ""%2"" в эту группу?'"), + ДействиеСПользователем, + Строка(ПараметрыПеретаскивания.Значение[0])); КонецЕсли; - ТекстВопроса = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - ШаблонВопроса, ДействиеСПользователем, Строка(ПараметрыПеретаскивания.Значение[0]), - Строка(Строка), Строка(Элементы.ГруппыВнешнихПользователей.ТекущаяСтрока)); - Иначе - Если ДействиеИсключитьПользователя Тогда - ШаблонВопроса = НСтр("ru = 'Исключить пользователей (%2) из группы ""%4""?'"); + ТекстВопроса = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Исключить пользователей (%1) из группы ""%2""?'"), + КоличествоПользователей, + Строка(Элементы.ГруппыВнешнихПользователей.ТекущаяСтрока)); + ИначеЕсли Не ГруппаПомеченаНаУдаление Тогда - ШаблонВопроса = НСтр("ru = '%1 пользователей (%2) в группу ""%3""?'"); + ТекстВопроса = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = '%1 пользователей (%2) в группу ""%3""?'"), + ДействиеСПользователем, + КоличествоПользователей, + Строка(Строка)); Иначе - ШаблонВопроса = НСтр("ru = '%1 пользователей (%2) в эту группу?'"); + ТекстВопроса = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = '%1 пользователей (%2) в эту группу?'"), + ДействиеСПользователем, + КоличествоПользователей); КонецЕсли; - ТекстВопроса = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - ШаблонВопроса, ДействиеСПользователем, КоличествоПользователей, - Строка(Строка), Строка(Элементы.ГруппыВнешнихПользователей.ТекущаяСтрока)); - КонецЕсли; ДополнительныеПараметры = Новый Структура("ПараметрыПеретаскивания, Строка, Перемещение", @@ -348,6 +389,20 @@ #Область ОбработчикиСобытийЭлементовТаблицыФормыВнешниеПользователи +&НаКлиенте +Процедура ВнешниеПользователиСписокПриАктивизацииСтроки(Элемент) + + Если Элементы.ВнешниеПользователиСписок.ТекущиеДанные = Неопределено Тогда + ВозможноСменитьПароль = Ложь; + Иначе + ВозможноСменитьПароль = Элементы.ВнешниеПользователиСписок.ТекущиеДанные.ВозможноСменитьПароль; + КонецЕсли; + + Элементы.ФормаУстановитьПароль.Доступность = ВозможноСменитьПароль; + Элементы.ВнешниеПользователиСписокКонтекстноеМенюУстановитьПароль.Доступность = ВозможноСменитьПароль; + +КонецПроцедуры + &НаКлиенте Процедура ВнешниеПользователиСписокВыборЗначения(Элемент, Значение, СтандартнаяОбработка) @@ -426,7 +481,8 @@ Если ТекущиеДанные.ВсеОбъектыАвторизации Тогда ПоказатьПредупреждение(, СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Невозможно добавить подгруппу к группе ""%1"", - |так как в число ее участников входят все пользователи.'"), ТекущиеДанные.Наименование)); + |так как в число ее участников входят все пользователи выбранных видов.'"), + ТекущиеДанные.Наименование)); Возврат; КонецЕсли; @@ -445,6 +501,16 @@ КонецПроцедуры +&НаКлиенте +Процедура УстановитьПароль(Команда) + + ТекущиеДанные = Элементы.ВнешниеПользователиСписок.ТекущиеДанные; + Если ТекущиеДанные <> Неопределено Тогда + ПользователиСлужебныйКлиент.ОткрытьФормуСменыПароля(ТекущиеДанные.Ссылка); + КонецЕсли; + +КонецПроцедуры + &НаКлиенте Процедура ЗавершитьИЗакрыть(Команда) @@ -527,50 +593,67 @@ ХранимыеПараметры.Вставить("ОтборОбъектАвторизации", Неопределено); КонецЕсли; - // Подготовка представлений типов объектов авторизации. - ХранимыеПараметры.Вставить("ПредставлениеТиповОбъектовАвторизации", Новый СписокЗначений); - ТипыОбъектовАвторизации = Метаданные.Справочники.ВнешниеПользователи.Реквизиты.ОбъектАвторизации.Тип.Типы(); +КонецПроцедуры + +&НаСервере +Процедура ЗаполнитьПараметрыДинамическихСписков(МассивПустыхСсылок = Неопределено) - Для каждого ТекущийТипОбъектовАвторизации Из ТипыОбъектовАвторизации Цикл - Если Не ОбщегоНазначения.ЭтоСсылка(ТекущийТипОбъектовАвторизации) Тогда - Продолжить; - КонецЕсли; - МассивТипов = Новый Массив; - МассивТипов.Добавить(ТекущийТипОбъектовАвторизации); - ОписаниеТипа = Новый ОписаниеТипов(МассивТипов); - - ХранимыеПараметры.ПредставлениеТиповОбъектовАвторизации.Добавить( - ОписаниеТипа.ПривестиЗначение(Неопределено), - Метаданные.НайтиПоТипу(ТекущийТипОбъектовАвторизации).Синоним); - КонецЦикла; + Используется = МассивПустыхСсылок <> Неопределено И МассивПустыхСсылок.Количество() <> 0; + + ОбщегоНазначенияКлиентСервер.УстановитьЭлементОтбораДинамическогоСписка( + ГруппыВнешнихПользователей, "Ссылка.Назначение.ТипПользователей", + МассивПустыхСсылок, ВидСравненияКомпоновкиДанных.ВСписке, , Используется); + + МассивТипов = Новый Массив; + Если Используется Тогда + Для Каждого Элемент Из МассивПустыхСсылок Цикл + МассивТипов.Добавить(ТипЗнч(Элемент)); + КонецЦикла; + КонецЕсли; + + ОбщегоНазначенияКлиентСервер.УстановитьЭлементОтбораДинамическогоСписка( + ВнешниеПользователиСписок, "ТипОбъектаАвторизации", + МассивТипов, ВидСравненияКомпоновкиДанных.ВСписке, , Используется); КонецПроцедуры &НаСервере -Процедура ЗаполнитьПараметрыДинамическихСписков() +Процедура ОформитьИСкрытьНедействительныхВнешнихПользователей() - ТипОбъектовАвторизации = Неопределено; - Параметры.Свойство("ТипОбъектовАвторизации", ТипОбъектовАвторизации); + // Оформление. + ЭлементУсловногоОформления = УсловноеОформление.Элементы.Добавить(); - ОбновитьЗначениеПараметраКомпоновкиДанных( - ГруппыВнешнихПользователей, - "ЛюбойТипОбъектовАвторизации", - ТипОбъектовАвторизации = Неопределено); + ЭлементЦветаОформления = ЭлементУсловногоОформления.Оформление.Элементы.Найти("TextColor"); + ЭлементЦветаОформления.Значение = Метаданные.ЭлементыСтиля.ТекстЗапрещеннойЯчейкиЦвет.Значение; + ЭлементЦветаОформления.Использование = Истина; - ОбновитьЗначениеПараметраКомпоновкиДанных( - ГруппыВнешнихПользователей, - "ТипОбъектовАвторизации", - ТипЗнч(ТипОбъектовАвторизации)); + ЭлементОтбораДанных = ЭлементУсловногоОформления.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); + ЭлементОтбораДанных.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("ВнешниеПользователиСписок.Недействителен"); + ЭлементОтбораДанных.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно; + ЭлементОтбораДанных.ПравоеЗначение = Истина; + ЭлементОтбораДанных.Использование = Истина; - ОбновитьЗначениеПараметраКомпоновкиДанных( - ВнешниеПользователиСписок, - "ЛюбойТипОбъектовАвторизации", - ТипОбъектовАвторизации = Неопределено); + ЭлементОформляемогоПоля = ЭлементУсловногоОформления.Поля.Элементы.Добавить(); + ЭлементОформляемогоПоля.Поле = Новый ПолеКомпоновкиДанных("ВнешниеПользователиСписок"); + ЭлементОформляемогоПоля.Использование = Истина; - ОбновитьЗначениеПараметраКомпоновкиДанных( - ВнешниеПользователиСписок, - "ТипОбъектовАвторизации", - ТипЗнч(ТипОбъектовАвторизации)); + // Скрытие. + ОбщегоНазначенияКлиентСервер.УстановитьЭлементОтбораДинамическогоСписка( + ВнешниеПользователиСписок, "Недействителен", Ложь, , , Истина); + +КонецПроцедуры + +&НаСервере +Процедура НастроитьПараметрыСпискаВнешнихПользователейДляКомандыУстановитьПароль() + + ОбновитьЗначениеПараметраКомпоновкиДанных(ВнешниеПользователиСписок, "ИдентификаторТекущегоПользователяИБ", + ПользователиИнформационнойБазы.ТекущийПользователь().УникальныйИдентификатор); + + ОбновитьЗначениеПараметраКомпоновкиДанных(ВнешниеПользователиСписок, "ПустойУникальныйИдентификатор", + Новый УникальныйИдентификатор("00000000-0000-0000-0000-000000000000")); + + ОбновитьЗначениеПараметраКомпоновкиДанных(ВнешниеПользователиСписок, "ВозможноСменитьТолькоСвойПароль", + Не Пользователи.ЭтоПолноправныйПользователь()); КонецПроцедуры @@ -599,32 +682,6 @@ КонецПроцедуры -&НаСервере -Процедура ОформитьИСкрытьНедействительныхВнешнихПользователей() - - // Оформление. - ЭлементУсловногоОформления = УсловноеОформление.Элементы.Добавить(); - - ЭлементЦветаОформления = ЭлементУсловногоОформления.Оформление.Элементы.Найти("TextColor"); - ЭлементЦветаОформления.Значение = Метаданные.ЭлементыСтиля.НедоступныеДанныеЦвет.Значение; - ЭлементЦветаОформления.Использование = Истина; - - ЭлементОтбораДанных = ЭлементУсловногоОформления.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); - ЭлементОтбораДанных.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("ВнешниеПользователиСписок.Недействителен"); - ЭлементОтбораДанных.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно; - ЭлементОтбораДанных.ПравоеЗначение = Истина; - ЭлементОтбораДанных.Использование = Истина; - - ЭлементОформляемогоПоля = ЭлементУсловногоОформления.Поля.Элементы.Добавить(); - ЭлементОформляемогоПоля.Поле = Новый ПолеКомпоновкиДанных("ВнешниеПользователиСписок"); - ЭлементОформляемогоПоля.Использование = Истина; - - // Скрытие. - ОбщегоНазначенияКлиентСервер.УстановитьЭлементОтбораДинамическогоСписка( - ВнешниеПользователиСписок, "Недействителен", Ложь, , , Истина); - -КонецПроцедуры - &НаКлиенте Процедура ПроверкаИзмененияТекущегоЭлементаФормы() @@ -792,12 +849,16 @@ &НаКлиенте Процедура ПриИзмененииИспользованияГруппПользователей() - НастроитьФормуПоИспользованиюГруппПользователей(); + НастроитьФормуПоИспользованиюГруппПользователей(Истина); КонецПроцедуры &НаСервере -Процедура НастроитьФормуПоИспользованиюГруппПользователей() +Процедура НастроитьФормуПоИспользованиюГруппПользователей(ИзменилосьИспользованиеГрупп = Ложь) + + Если ИзменилосьИспользованиеГрупп Тогда + ХранимыеПараметры.Вставить("ИспользоватьГруппы", ПолучитьФункциональнуюОпцию("ИспользоватьГруппыПользователей")); + КонецЕсли; Если ХранимыеПараметры.Свойство("ТекущаяСтрока") Тогда @@ -817,10 +878,10 @@ Иначе Если НЕ ХранимыеПараметры.ИспользоватьГруппы И Элементы.ГруппыВнешнихПользователей.ТекущаяСтрока - <> Справочники.ГруппыПользователей.ВсеПользователи Тогда + <> Справочники.ГруппыВнешнихПользователей.ВсеВнешниеПользователи Тогда Элементы.ГруппыВнешнихПользователей.ТекущаяСтрока = - Справочники.ГруппыПользователей.ВсеПользователи; + Справочники.ГруппыВнешнихПользователей.ВсеВнешниеПользователи; КонецЕсли; КонецЕсли; @@ -889,6 +950,11 @@ ОбновитьСодержимоеФормыПриИзмененииГруппы(ЭтотОбъект); + // Принудительное обновление видимости после изменения функциональной + // опции без использования команды ОбновитьИнтерфейс. + Элементы.ГруппыВнешнихПользователей.Видимость = Ложь; + Элементы.ГруппыВнешнихПользователей.Видимость = Истина; + КонецПроцедуры &НаСервере @@ -922,19 +988,24 @@ Процедура ОбновитьСодержимоеФормыПриИзмененииГруппы(Форма) Элементы = Форма.Элементы; + ГруппаВсеВнешниеПользователи = ПредопределенноеЗначение( + "Справочник.ГруппыВнешнихПользователей.ВсеВнешниеПользователи"); Если НЕ Форма.ХранимыеПараметры.ИспользоватьГруппы - ИЛИ Элементы.ГруппыВнешнихПользователей.ТекущаяСтрока = ПредопределенноеЗначение( - "Справочник.ГруппыВнешнихПользователей.ВсеВнешниеПользователи") Тогда + ИЛИ Элементы.ГруппыВнешнихПользователей.ТекущаяСтрока = ГруппаВсеВнешниеПользователи Тогда - ОбновитьЗначениеПараметраКомпоновкиДанных( - Форма.ВнешниеПользователиСписок, "ВыбиратьИерархически", Истина); + ОбновитьЗначениеПараметраКомпоновкиДанных(Форма.ВнешниеПользователиСписок, + "ВсеВнешниеПользователи", Истина); - ОбновитьЗначениеПараметраКомпоновкиДанных( - Форма.ВнешниеПользователиСписок, - "ГруппаВнешнихПользователей", - ПредопределенноеЗначение("Справочник.ГруппыВнешнихПользователей.ВсеВнешниеПользователи")); + ОбновитьЗначениеПараметраКомпоновкиДанных(Форма.ВнешниеПользователиСписок, + "ВыбиратьИерархически", Истина); + + ОбновитьЗначениеПараметраКомпоновкиДанных(Форма.ВнешниеПользователиСписок, + "ГруппаВнешнихПользователей", ГруппаВсеВнешниеПользователи); Иначе + ОбновитьЗначениеПараметраКомпоновкиДанных(Форма.ВнешниеПользователиСписок, + "ВсеВнешниеПользователи", Ложь); + #Если Сервер Тогда Если ЗначениеЗаполнено(Элементы.ГруппыВнешнихПользователей.ТекущаяСтрока) Тогда ТекущиеДанные = ОбщегоНазначения.ЗначенияРеквизитовОбъекта( @@ -949,21 +1020,15 @@ Если ТекущиеДанные <> Неопределено И ТекущиеДанные.ВсеОбъектыАвторизации Тогда - ЭлементПредставленияТипаОбъектаАвторизации = - Форма.ХранимыеПараметры.ПредставлениеТиповОбъектовАвторизации.НайтиПоЗначению( - ТекущиеДанные.ТипОбъектовАвторизации); - - ОбновитьЗначениеПараметраКомпоновкиДанных( - Форма.ВнешниеПользователиСписок, "ВыбиратьИерархически", Истина); + ОбновитьЗначениеПараметраКомпоновкиДанных(Форма.ВнешниеПользователиСписок, + "ВыбиратьИерархически", Истина); Иначе - ОбновитьЗначениеПараметраКомпоновкиДанных( - Форма.ВнешниеПользователиСписок, "ВыбиратьИерархически", Форма.ВыбиратьИерархически); + ОбновитьЗначениеПараметраКомпоновкиДанных(Форма.ВнешниеПользователиСписок, + "ВыбиратьИерархически", Форма.ВыбиратьИерархически); КонецЕсли; - ОбновитьЗначениеПараметраКомпоновкиДанных( - Форма.ВнешниеПользователиСписок, - "ГруппаВнешнихПользователей", - Элементы.ГруппыВнешнихПользователей.ТекущаяСтрока); + ОбновитьЗначениеПараметраКомпоновкиДанных(Форма.ВнешниеПользователиСписок, + "ГруппаВнешнихПользователей", Элементы.ГруппыВнешнихПользователей.ТекущаяСтрока); КонецЕсли; КонецПроцедуры @@ -1026,11 +1091,8 @@ ТекстВопроса = СообщениеПользователю.Сообщение; - Результат = СтандартныеПодсистемыКлиентСервер.НовыйРезультатВыполнения(); - ВыводПредупреждения = Результат.ВыводПредупреждения; - ВыводПредупреждения.Использование = Истина; - ВыводПредупреждения.Текст = ТекстВопроса; - ВыводПредупреждения.ТекстОшибок = Отчет; + Результат = Новый Структура; + СтандартныеПодсистемыКлиентСервер.ВывестиПредупреждение(Результат, ТекстВопроса, Отчет); СтандартныеПодсистемыКлиент.ПоказатьРезультатВыполнения(ЭтотОбъект, Результат); Иначе ПоказатьПредупреждение(,СообщениеПользователю.Сообщение); @@ -1040,4 +1102,18 @@ КонецПроцедуры +&НаКлиенте +Процедура ПослеВыбораНазначения(МассивТипов, ДополнительныеПараметры) Экспорт + + ЗаполнитьПараметрыДинамическихСписков(МассивТипов); + +КонецПроцедуры + +&НаКлиенте +Процедура ВидПользователейОчистка(Элемент, СтандартнаяОбработка) + + ЗаполнитьПараметрыДинамическихСписков(); + +КонецПроцедуры + #КонецОбласти diff --git a/SSL/src/Catalogs/ВнешниеПользователи/Forms/ФормаЭлемента/Form.form b/SSL/src/Catalogs/ВнешниеПользователи/Forms/ФормаЭлемента/Form.form index d8f79e461..3a9f0ede2 100644 --- a/SSL/src/Catalogs/ВнешниеПользователи/Forms/ФормаЭлемента/Form.form +++ b/SSL/src/Catalogs/ВнешниеПользователи/Forms/ФормаЭлемента/Form.form @@ -96,6 +96,7 @@ ru Свойства пояснение и команды + false СвойстваПояснениеИКомандыРасширеннаяПодсказка 251 @@ -268,24 +269,106 @@ ГруппаШапка 287 - - ОбъектАвторизации - 164 + + ГруппаНаименование + 332 + + ОбъектАвторизации + 164 + true + true + + true + + + Объект.ОбъектАвторизации + + + OnChange + ОбъектАвторизацииПриИзменении + + + ОбъектАвторизацииExtendedTooltip + 202 + Label + true + true + + Left + + + + ОбъектАвторизацииКонтекстноеМеню + 165 + true + + InputField + Enter + true + Left + true + + 45 + true + true + true + true + true + true + Normal + + + + Недействителен + 190 + true + true + + true + + + Объект.Недействителен + + Right + Button + + OnChange + НедействителенПриИзменении + + + НедействителенExtendedTooltip + 203 + Label + true + true + + Left + + + + НедействителенКонтекстноеМеню + 191 + true + + CheckBoxField + Enter + true + Left + true + + true true true - - Объект.ОбъектАвторизации - - - OnChange - ОбъектАвторизацииПриИзменении - + + <key>ru</key> + <value>Группа наименование</value> + - ОбъектАвторизацииExtendedTooltip - 202 + ГруппаНаименованиеРасширеннаяПодсказка + 333 Label true true @@ -293,66 +376,15 @@ Left - - ОбъектАвторизацииКонтекстноеМеню - 165 - true - - InputField - Enter - true - Left - true - - 45 - true - true - true - true - true - true - Normal + UsualGroup + + Auto + true + true + Auto + Auto - - Недействителен - 190 - true - true - - true - - - Объект.Недействителен - - Right - Button - - OnChange - НедействителенПриИзменении - - - НедействителенExtendedTooltip - 203 - Label - true - true - - Left - - - - НедействителенКонтекстноеМеню - 191 - true - - CheckBoxField - Enter - true - Left - true - - true true @@ -398,7 +430,8 @@ Right ru - Разрешить вход внешнего пользователя в программу указанными способами аутентификации. + Разрешить вход внешнего пользователя в программу +указанными способами аутентификации. OnChange @@ -426,6 +459,65 @@ true + + ГруппаИзменитьОграничение + 346 + + ИзменитьОграничениеНаВходВПрограмму + 344 + true + true + + true + + + ИзменитьОграничениеНаВходВПрограммуРасширеннаяПодсказка + 345 + Label + true + true + + Left + + + Hyperlink + Form.Command.ИзменитьОграничениеНаВходВПрограмму + Normal + Auto + true + true + UserCmds + Auto + + true + true + + true + + + <key>ru</key> + <value>Группа изменить ограничение</value> + + + ГруппаИзменитьОграничениеРасширеннаяПодсказка + 347 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + true + true + Auto + Auto + + РекомендуетсяПроверитьНастройкиДляВхода 269 @@ -628,10 +720,10 @@ Left true - 26 + 23 true true - true + false true true true @@ -769,26 +861,87 @@ - СвойстваПараметрыАутентификации1СПредприятия + ПараметрыАутентификации1СПредприятия 196 - - Пароль - 21 + + ГруппаПароль + 319 + + НадписьНаличиеПароля + 321 + + <key>ru</key> + <value>Пустой пароль</value> + + true + true + + true + + + НадписьНаличиеПароляРасширеннаяПодсказка + 323 + Label + true + true + + Left + + + + НадписьНаличиеПароляКонтекстноеМеню + 322 + true + + Label + true + true + + Style.ПоясняющийТекст + + + Left + + + + СменитьПароль + 324 + true + true + + true + + + СменитьПарольРасширеннаяПодсказка + 325 + Label + true + true + + Left + + + UsualButton + Form.Command.СменитьПароль + Normal + Auto + true + true + UserCmds + Auto + true true true - - Пароль - - - OnChange - ПарольПриИзменении - + + <key>ru</key> + <value>Группа пароль</value> + - ПарольExtendedTooltip - 211 + ГруппаПарольРасширеннаяПодсказка + 320 Label true true @@ -796,50 +949,34 @@ Left - - ПарольКонтекстноеМеню - 22 - true - - InputField - Enter - true - Left - true - Left - - 14 - true - true - false - true - true - true - true - - Style.BorderColor - - Normal + UsualGroup + + Auto + true + true + Auto + Auto - ПодтверждениеПароля - 23 + ПотребоватьСменуПароляПриВходе + 326 true true true - ПодтверждениеПароля + ПотребоватьСменуПароляПриВходе + Right OnChange - ПарольПриИзменении + ПотребоватьСменуПароляПриВходеПриИзменении - ПодтверждениеПароляExtendedTooltip - 212 + ПотребоватьСменуПароляПриВходеРасширеннаяПодсказка + 328 Label true true @@ -848,30 +985,16 @@ - ПодтверждениеПароляКонтекстноеМеню - 24 + ПотребоватьСменуПароляПриВходеКонтекстноеМеню + 327 true - InputField + CheckBoxField Enter true Left true - Left - - 14 - true - true - false - true - true - true - true - - Style.BorderColor - - Normal - + ПользовательИБЗапрещеноИзменятьПароль @@ -885,6 +1008,11 @@ ПользовательИБЗапрещеноИзменятьПароль Right + + ru + Запрещает изменение пароля +внешнему пользователю. + OnChange ПользовательИБЗапрещеноИзменятьПарольПриИзменении @@ -918,11 +1046,11 @@ <key>ru</key> - <value>Аутентификация 1С:Предприятия</value> + <value>Параметры аутентификации 1С:Предприятия</value> true - СвойстваПараметрыАутентификации1СПредприятияExtendedTooltip + ПараметрыАутентификации1СПредприятияРасширеннаяПодсказка 210 Label true @@ -1103,7 +1231,7 @@ true Left - 14 + 15 true true false @@ -1845,6 +1973,10 @@ Pages + + OnCurrentPageChange + СтраницыГлавноеИКомментарийПриСменеСтраницы + TabsOnTop Auto @@ -1859,6 +1991,10 @@ NotificationProcessing ОбработкаОповещения + + OnOpen + ПриОткрытии + OnCreateAtServer ПриСозданииНаСервере @@ -1880,7 +2016,6 @@ true true true - UseIfNecessary auto true @@ -1914,25 +2049,6 @@ true - - ПодтверждениеПароля - - <key>ru</key> - <value>Подтверждение пароля</value> - - 4 - - String - - - - true - - - true - - true - ПользовательИБЯзык @@ -1950,6 +2066,7 @@ <edit> <common>true</common> </edit> + <functionalOptions>FunctionalOption.ИспользоватьВнешнихПользователей</functionalOptions> <savedData>true</savedData> </attributes> <attributes> @@ -1968,6 +2085,7 @@ <edit> <common>true</common> </edit> + <functionalOptions>FunctionalOption.ИспользоватьВнешнихПользователей</functionalOptions> <savedData>true</savedData> </attributes> <attributes> @@ -1987,6 +2105,7 @@ <edit> <common>true</common> </edit> + <functionalOptions>FunctionalOption.ИспользоватьВнешнихПользователей</functionalOptions> <savedData>true</savedData> </attributes> <attributes> @@ -2005,6 +2124,7 @@ <edit> <common>true</common> </edit> + <functionalOptions>FunctionalOption.ИспользоватьВнешнихПользователей</functionalOptions> <savedData>true</savedData> </attributes> <attributes> @@ -2057,25 +2177,6 @@ <common>true</common> </edit> </attributes> - <attributes> - <name>Пароль</name> - <title> - <key>ru</key> - <value>Пароль</value> - - 7 - - String - - - - true - - - true - - true - ТекущееПредставлениеОбъектаАвторизации @@ -2196,6 +2297,7 @@ <edit> <common>true</common> </edit> + <functionalOptions>FunctionalOption.ИспользоватьВнешнихПользователей</functionalOptions> <savedData>true</savedData> <columns> <name>Пометка</name> @@ -2359,6 +2461,7 @@ <edit> <common>true</common> </edit> + <functionalOptions>FunctionalOption.ИспользоватьВнешнихПользователей</functionalOptions> <savedData>true</savedData> </attributes> <attributes> @@ -2377,6 +2480,7 @@ <edit> <common>true</common> </edit> + <functionalOptions>FunctionalOption.ИспользоватьВнешнихПользователей</functionalOptions> <savedData>true</savedData> </attributes> <attributes> @@ -2536,6 +2640,102 @@ <common>true</common> </edit> </attributes> + <attributes> + <name>ПотребоватьСменуПароляПриВходе</name> + <title> + <key>ru</key> + <value>Потребовать смену пароля при входе</value> + + 33 + + Boolean + + + true + + + true + + FunctionalOption.ИспользоватьВнешнихПользователей + true + + + СрокДействия + + <key>ru</key> + <value>Срок действия</value> + + 34 + + Date + + Date + + + + true + + + true + + true + + + СрокДействияНеОграничен + + <key>ru</key> + <value>Срок действия не ограничен</value> + + 35 + + Boolean + + + true + + + true + + + + ПросрочкаРаботыВПрограммеДоЗапрещенияВхода + + <key>ru</key> + <value>Просрочка работы в программе до запрещения входа</value> + + 36 + + Number + + 3 + true + + + + true + + + true + + + + ПользовательИБИмяЗначениеПрямогоИзменения + + <key>ru</key> + <value>Имя (для входа) - значение прямого изменения</value> + + 37 + + String + + + + true + + + true + + ПоказатьТолькоВыбранныеРоли @@ -2558,8 +2758,9 @@ <name>ПоказатьТолькоВыбранныеРоли</name> </handler> </action> + <functionalOptions>FunctionalOption.ИспользоватьВнешнихПользователей</functionalOptions> <representation>TextPicture</representation> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <formCommands> @@ -2584,8 +2785,9 @@ <name>ИсключитьРоли</name> </handler> </action> + <functionalOptions>FunctionalOption.ИспользоватьВнешнихПользователей</functionalOptions> <modifiesStoredData>true</modifiesStoredData> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <formCommands> @@ -2610,8 +2812,9 @@ <name>ВключитьРоли</name> </handler> </action> + <functionalOptions>FunctionalOption.ИспользоватьВнешнихПользователей</functionalOptions> <modifiesStoredData>true</modifiesStoredData> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <formCommands> @@ -2636,8 +2839,48 @@ <name>ГруппировкаРолейПоПодсистемам</name> </handler> </action> + <functionalOptions>FunctionalOption.ИспользоватьВнешнихПользователей</functionalOptions> <representation>TextPicture</representation> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> + <selectedRowsUse>Auto</selectedRowsUse> + </formCommands> + <formCommands> + <name>СменитьПароль</name> + <title> + <key>ru</key> + <value>Сменить пароль...</value> + + 2 + + true + + + + СменитьПароль + + + FunctionalOption.ИспользоватьВнешнихПользователей + DontUse + Auto + + + ИзменитьОграничениеНаВходВПрограмму + + <key>ru</key> + <value>Изменить ограничение</value> + + 4 + + true + + + + ИзменитьОграничениеНаВходВПрограмму + + + FunctionalOption.ИспользоватьВнешнихПользователей + true + DontUse Auto @@ -2677,5 +2920,9 @@ BeforeWriteAtServer ПередЗаписьюНаСервере + + OnWriteAtServer + ПриЗаписиНаСервере + diff --git a/SSL/src/Catalogs/ВнешниеПользователи/Forms/ФормаЭлемента/Help/ru.html b/SSL/src/Catalogs/ВнешниеПользователи/Forms/ФормаЭлемента/Help/ru.html index f0e418f72..83cffca58 100644 --- a/SSL/src/Catalogs/ВнешниеПользователи/Forms/ФормаЭлемента/Help/ru.html +++ b/SSL/src/Catalogs/ВнешниеПользователи/Forms/ФормаЭлемента/Help/ru.html @@ -17,15 +17,16 @@
      • Примеры хороших паролей:
        “nj7{jhjibq*Gfhjkm,
        F5”njnGhkmNj;t{HI.
      • Примеры неудачных паролей:
        Иванов,
        qwerty,
        12345678,
        123123123.

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

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

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

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

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

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

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

          Управление настройками внешнего пользователя

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

          Ограничения на вход в программу

          +

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

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

          Управление настройками внешнего пользователя

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

          Предупреждения программы

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

          См. также

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

          См. также

          \ No newline at end of file diff --git a/SSL/src/Catalogs/ВнешниеПользователи/Forms/ФормаЭлемента/Module.bsl b/SSL/src/Catalogs/ВнешниеПользователи/Forms/ФормаЭлемента/Module.bsl index bee4b35d3..24231aead 100644 --- a/SSL/src/Catalogs/ВнешниеПользователи/Forms/ФормаЭлемента/Module.bsl +++ b/SSL/src/Catalogs/ВнешниеПользователи/Forms/ФормаЭлемента/Module.bsl @@ -39,25 +39,17 @@ Если ЗначениеЗаполнено(Параметры.ЗначениеКопирования) Тогда // Копирование элемента. ЗначениеКопирования = Параметры.ЗначениеКопирования; - Объект.ОбъектАвторизации = Неопределено; Объект.Наименование = ""; + Объект.ОбъектАвторизации = Неопределено; Объект.УдалитьПароль = ""; - Если Пользователи.ЭтоПолноправныйПользователь(ЗначениеКопирования, Истина, Ложь) Тогда - РазрешеноКопированиеПользователяИБ = УровеньДоступа.АдминистраторСистемы; - ИначеЕсли Пользователи.ЭтоПолноправныйПользователь(ЗначениеКопирования, Ложь, Ложь) Тогда - РазрешеноКопированиеПользователяИБ = УровеньДоступа.ПолныеПрава; - Иначе - РазрешеноКопированиеПользователяИБ = Истина; - КонецЕсли; - - Если РазрешеноКопированиеПользователяИБ Тогда - ПрочитатьПользователяИБ(ЗначениеЗаполнено( - Параметры.ЗначениеКопирования.ИдентификаторПользователяИБ)); + Если Не ПользователиСлужебный.УровеньДоступаПользователяВыше(ЗначениеКопирования, УровеньДоступа) Тогда + ПрочитатьПользователяИБ(ЗначениеЗаполнено(ЗначениеКопирования.ИдентификаторПользователяИБ)); Иначе ПрочитатьПользователяИБ(); КонецЕсли; - Если Не УровеньДоступа.ПолныеПрава Тогда + + Если Не УровеньДоступа.ИзменениеРазрешенияНаВход Тогда ВходВПрограммуРазрешен = Ложь; ВходВПрограммуРазрешенЗначениеПрямогоИзменения = Ложь; КонецЕсли; @@ -71,11 +63,16 @@ ИначеЕсли ЗначениеЗаполнено(ГруппаНовогоВнешнегоПользователя) Тогда - ТипОбъектовАвторизации = ОбщегоНазначения.ЗначениеРеквизитаОбъекта( - ГруппаНовогоВнешнегоПользователя, "ТипОбъектовАвторизации"); + НазначениеГруппыВнешнихПользователей = ОбщегоНазначения.ЗначениеРеквизитаОбъекта( + ГруппаНовогоВнешнегоПользователя, "Назначение").Выгрузить(); - Объект.ОбъектАвторизации = ТипОбъектовАвторизации; - Элементы.ОбъектАвторизации.ВыбиратьТип = ТипОбъектовАвторизации = Неопределено; + ОдинТипПользователей = НазначениеГруппыВнешнихПользователей.Количество() = 1; + + Если ОдинТипПользователей Тогда + Объект.ОбъектАвторизации = НазначениеГруппыВнешнихПользователей[0].ТипПользователей; + КонецЕсли; + + Элементы.ОбъектАвторизации.ВыбиратьТип = Не ОдинТипПользователей; КонецЕсли; // Чтение начальных значений свойств пользователя ИБ. @@ -84,14 +81,14 @@ Если Не ЗначениеЗаполнено(Параметры.ИдентификаторПользователяИБ) Тогда ПользовательИБАутентификацияСтандартная = Истина; - Если УровеньДоступа.ПолныеПрава Тогда + Если УровеньДоступа.ИзменениеРазрешенияНаВход Тогда ВходВПрограммуРазрешен = Истина; ВходВПрограммуРазрешенЗначениеПрямогоИзменения = Истина; КонецЕсли; КонецЕсли; КонецЕсли; - Если УровеньДоступа.ПолныеПрава + Если УровеньДоступа.УправлениеСписком И Объект.ОбъектАвторизации <> Неопределено Тогда ПользовательИБИмя = ПользователиСлужебныйКлиентСервер.ПолучитьКраткоеИмяПользователяИБ( @@ -114,10 +111,29 @@ Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.Свойства") Тогда ДополнительныеПараметры = Новый Структура; ДополнительныеПараметры.Вставить("ИмяЭлементаДляРазмещения", "СтраницаДополнительныеРеквизиты"); + ДополнительныеПараметры.Вставить("ОтложеннаяИнициализация", Истина); МодульУправлениеСвойствами = ОбщегоНазначения.ОбщийМодуль("УправлениеСвойствами"); МодульУправлениеСвойствами.ПриСозданииНаСервере(ЭтотОбъект, ДополнительныеПараметры); КонецЕсли; + Если Не ПользователиСлужебныйПовтИсп.Настройки().ОбщиеНастройкиВхода Тогда + Элементы.ГруппаИзменитьОграничение.Видимость = Ложь; + КонецЕсли; + + Если ОбщегоНазначенияПовтИсп.ЭтоАвтономноеРабочееМесто() Тогда + ТолькоПросмотр = Истина; + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура ПриОткрытии(Отказ) + + Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.Свойства") Тогда + МодульУправлениеСвойствамиКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("УправлениеСвойствамиКлиент"); + МодульУправлениеСвойствамиКлиент.ПослеЗагрузкиДополнительныхРеквизитов(ЭтотОбъект); + КонецЕсли; + КонецПроцедуры &НаКлиенте @@ -127,6 +143,7 @@ МодульУправлениеСвойствамиКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("УправлениеСвойствамиКлиент"); Если МодульУправлениеСвойствамиКлиент.ОбрабатыватьОповещения(ЭтотОбъект, ИмяСобытия, Параметр) Тогда ОбновитьЭлементыДополнительныхРеквизитов(); + МодульУправлениеСвойствамиКлиент.ПослеЗагрузкиДополнительныхРеквизитов(ЭтотОбъект); КонецЕсли; КонецЕсли; @@ -157,6 +174,10 @@ ПрочитатьПользователяИБ(); КонецЕсли; + УстановитьПривилегированныйРежим(Истина); + ПользователиСлужебный.ПрочитатьСведенияОПользователе(ЭтотОбъект); + УстановитьПривилегированныйРежим(Ложь); + УровеньДоступа = ПользователиСлужебный.УровеньДоступаКСвойствамПользователя(Объект); ОпределитьДействияВФорме(); @@ -181,7 +202,7 @@ И ДействияВФорме.СвойстваПользователяИБ <> "Редактирование"; Элементы.РекомендуетсяПроверитьНастройкиДляВхода.Видимость = - УровеньДоступа.ПолныеПрава И Объект.Подготовлен И Не ПриЧтенииВходВПрограммуРазрешен; + УровеньДоступа.ИзменениеРазрешенияНаВход И Объект.Подготовлен И Не ПриЧтенииВходВПрограммуРазрешен; УстановитьДоступностьСвойств(); @@ -224,14 +245,19 @@ Объект.Наименование = ТекущееПредставлениеОбъектаАвторизации; ТекущийОбъект.Наименование = ТекущееПредставлениеОбъектаАвторизации; - Если ТребуетсяЗаписьПользователяИБ(ЭтотОбъект) Тогда + Если ТребуетсяЗаписьПользователяИБ(ЭтотОбъект) + Или ПараметрыЗаписи.Свойство("КраткоеИмя") Тогда + ОписаниеПользователяИБ = ОписаниеПользователяИБ(); - ОписаниеПользователяИБ.Удалить("ПодтверждениеПароля"); + Если ПараметрыЗаписи.Свойство("КраткоеИмя") Тогда + ОписаниеПользователяИБ.Вставить("Имя", ПараметрыЗаписи.КраткоеИмя); + КонецЕсли; Если ЗначениеЗаполнено(Объект.ИдентификаторПользователяИБ) Тогда ОписаниеПользователяИБ.Вставить("УникальныйИдентификатор", Объект.ИдентификаторПользователяИБ); КонецЕсли; ОписаниеПользователяИБ.Вставить("Действие", "Записать"); + ОписаниеПользователяИБ.Вставить("ЗаполнитьПароль", Истина); ТекущийОбъект.ДополнительныеСвойства.Вставить("ОписаниеПользователяИБ", ОписаниеПользователяИБ); КонецЕсли; @@ -251,6 +277,14 @@ КонецПроцедуры +&НаСервере +Процедура ПриЗаписиНаСервере(Отказ, ТекущийОбъект, ПараметрыЗаписи) + + УстановитьПривилегированныйРежим(Истина); + ПользователиСлужебный.ЗаписатьСведенияОПользователе(ЭтотОбъект, ТекущийОбъект); + +КонецПроцедуры + &НаСервере Процедура ПослеЗаписиНаСервере(ТекущийОбъект, ПараметрыЗаписи) @@ -267,6 +301,7 @@ Процедура ПослеЗаписи(ПараметрыЗаписи) Оповестить("Запись_ВнешниеПользователи", Новый Структура, Объект.Ссылка); + ОповеститьОбИзменении(Объект.ОбъектАвторизации); Если ПараметрыЗаписи.Свойство("ДобавленПользовательИБ") Тогда Оповестить("ДобавленПользовательИБ", ПараметрыЗаписи.ДобавленПользовательИБ, ЭтотОбъект); @@ -299,6 +334,10 @@ ПользователиСлужебныйКлиент.РазвернутьПодсистемыРолей(ЭтотОбъект); + Если ПараметрыЗаписи.Свойство("СменитьПарольПослеЗаписи") Тогда + ПодключитьОбработчикОжидания("СменитьПарольНачало", 0.1, Истина); + КонецЕсли; + КонецПроцедуры &НаСервере @@ -312,13 +351,21 @@ ТекстОшибки, , "Объект.ОбъектАвторизации", , Отказ); КонецЕсли; + Если ВходВПрограммуРазрешен + И ЗначениеЗаполнено(СрокДействия) + И СрокДействия <= НачалоДня(ТекущаяДатаСеанса()) Тогда + + ОбщегоНазначенияКлиентСервер.СообщитьПользователю( + НСтр("ru = 'Ограничение должно быть до завтра или более.'"),, "ВходВПрограммуРазрешен",, Отказ); + КонецЕсли; + Если ТребуетсяЗаписьПользователяИБ(ЭтотОбъект) Тогда ОписаниеПользователяИБ = ОписаниеПользователяИБ(); ОписаниеПользователяИБ.Вставить("ИдентификаторПользователяИБ", Объект.ИдентификаторПользователяИБ); ПользователиСлужебный.ПроверитьОписаниеПользователяИБ(ОписаниеПользователяИБ, Отказ); ТекстСообщения = ""; - Если ПользователиСлужебный.ТребуетсяСоздатьПервогоАдминистратора(, ТекстСообщения) Тогда + Если ПользователиСлужебный.ТребуетсяСоздатьПервогоАдминистратора(Неопределено, ТекстСообщения) Тогда ОбщегоНазначенияКлиентСервер.СообщитьПользователю( ТекстСообщения, , "ВходВПрограммуРазрешен", , Отказ); КонецЕсли; @@ -386,8 +433,7 @@ УстановитьДоступностьСвойств(); - Если Не УровеньДоступа.ПолныеПрава - И УровеньДоступа.УправлениеСписком + Если Не УровеньДоступа.ИзменениеРазрешенияНаВход И Не ВходВПрограммуРазрешен Тогда ПоказатьПредупреждение(, @@ -398,9 +444,19 @@ КонецПроцедуры +&НаКлиенте +Процедура ИзменитьОграничениеНаВходВПрограмму(Команда) + + ОткрытьФорму("Справочник.Пользователи.Форма.ОграничениеНаВходВПрограмму",, ЭтотОбъект,,,, + Новый ОписаниеОповещения("ИзменитьОграничениеНаВходВПрограммуЗавершение", ЭтотОбъект)); + +КонецПроцедуры + &НаКлиенте Процедура ПользовательИБИмяПриИзменении(Элемент) + ПользовательИБИмяЗначениеПрямогоИзменения = ПользовательИБИмя; + УстановитьДоступностьСвойств(); КонецПроцедуры @@ -413,17 +469,21 @@ КонецПроцедуры &НаКлиенте -Процедура ПарольПриИзменении(Элемент) +Процедура ПотребоватьСменуПароляПриВходеПриИзменении(Элемент) - УстановитьДоступностьСвойств(); - - ПользовательИБПароль = Пароль; + Если ПотребоватьСменуПароляПриВходе Тогда + ПользовательИБЗапрещеноИзменятьПароль = Ложь; + КонецЕсли; КонецПроцедуры &НаКлиенте Процедура ПользовательИБЗапрещеноИзменятьПарольПриИзменении(Элемент) + Если ПользовательИБЗапрещеноИзменятьПароль Тогда + ПотребоватьСменуПароляПриВходе = Ложь; + КонецЕсли; + УстановитьДоступностьСвойств(); КонецПроцедуры @@ -455,6 +515,20 @@ КонецПроцедуры +&НаКлиенте +Процедура СтраницыГлавноеИКомментарийПриСменеСтраницы(Элемент, ТекущаяСтраница) + + Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.Свойства") + И ТекущаяСтраница.Имя = "СтраницаДополнительныеРеквизиты" + И Не ЭтотОбъект.ПараметрыСвойств.ВыполненаОтложеннаяИнициализация Тогда + + СвойстваВыполнитьОтложеннуюИнициализацию(); + МодульУправлениеСвойствамиКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("УправлениеСвойствамиКлиент"); + МодульУправлениеСвойствамиКлиент.ПослеЗагрузкиДополнительныхРеквизитов(ЭтотОбъект); + КонецЕсли; + +КонецПроцедуры + #КонецОбласти #Область ОбработчикиСобытийЭлементовТаблицыФормыРоли @@ -488,6 +562,57 @@ #Область ОбработчикиКомандФормы +&НаКлиенте +Процедура СменитьПароль(Команда) + + Если Не Модифицированность + И ЗначениеЗаполнено(Объект.Ссылка) + И ПользовательИБСуществует Тогда + + СменитьПарольНачало(); + Возврат; + КонецЕсли; + + Контекст = Новый Структура; + + Если Не ЗначениеЗаполнено(ТекущееПредставлениеОбъектаАвторизации) + Или ЗначениеЗаполнено(Объект.Ссылка) + И ПользовательИБСуществует Тогда + + СменитьПарольПослеПодтвержденияЗаписи("Записать", Контекст); + Возврат; + КонецЕсли; + + // Текст вопроса в стиле 1С:Предприятия. + Если ЗначениеЗаполнено(ПользовательИБИмя) Тогда + ТекстВопроса = НСтр("ru = 'Установка пароля возможна только после записи данных.'"); + Иначе + Контекст.Вставить("КраткоеИмя", + ПользователиСлужебныйКлиентСервер.ПолучитьКраткоеИмяПользователяИБ( + ТекущееПредставлениеОбъектаАвторизации)); + + Если ЗначениеЗаполнено(Объект.Ссылка) Тогда + ТекстВопроса = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Установка пароля возможна только после записи поля + |Имя (для входа), которое будет установлено: ""%1"".'"), + Контекст.КраткоеИмя); + Иначе + ТекстВопроса = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Установка пароля возможна только после записи данных, + |при этом будет установлено Имя (для входа): ""%1"".'"), + Контекст.КраткоеИмя); + КонецЕсли; + КонецЕсли; + + Кнопки = Новый СписокЗначений; + Кнопки.Добавить("Записать", НСтр("ru = 'Записать'")); + Кнопки.Добавить("НеЗаписывать", НСтр("ru = 'Не записывать'")); + + ПоказатьВопрос(Новый ОписаниеОповещения("СменитьПарольПослеПодтвержденияЗаписи", ЭтотОбъект, Контекст), + ТекстВопроса, Кнопки); + +КонецПроцедуры + //////////////////////////////////////////////////////////////////////////////// // Для работы интерфейса ролей. @@ -541,11 +666,13 @@ Форма.ТекущееПредставлениеОбъектаАвторизации); Если Элементы.ИмяПереключениеОтметкиНезаполненного.ТекущаяСтраница = Элементы.ИмяБезОтметкиНезаполненного Тогда - Если Форма.ПользовательИБИмя = КраткоеИмя Тогда + + Если Не ЗначениеЗаполнено(Форма.ПользовательИБИмяЗначениеПрямогоИзменения) + И Форма.ПользовательИБИмя = КраткоеИмя Тогда + Форма.ПользовательИБИмя = ""; КонецЕсли; Иначе - Если ПриИзмененииНаименования Или Не ЗначениеЗаполнено(Форма.ПользовательИБИмя) Тогда @@ -571,6 +698,52 @@ КонецПроцедуры +// Продолжение процедуры СменитьПароль. +&НаКлиенте +Процедура СменитьПарольПослеПодтвержденияЗаписи(Ответ, Контекст) Экспорт + + Если Ответ <> "Записать" Тогда + Возврат; + КонецЕсли; + + ПараметрыЗаписи = Новый Структура("СменитьПарольПослеЗаписи"); + + Если Контекст.Свойство("КраткоеИмя") Тогда + ПараметрыЗаписи.Вставить("КраткоеИмя", Контекст.КраткоеИмя); + КонецЕсли; + + Записать(ПараметрыЗаписи); + +КонецПроцедуры + +// Продолжение процедуры СменитьПароль. +&НаКлиенте +Процедура СменитьПарольНачало() + + ПользователиСлужебныйКлиент.ОткрытьФормуСменыПароля(Объект.Ссылка, Новый ОписаниеОповещения( + "СменитьПарольПослеСменыПароля", ЭтотОбъект)); + +КонецПроцедуры + +// Продолжение процедуры СменитьПароль. +&НаКлиенте +Процедура СменитьПарольПослеСменыПароля(Результат, Контекст) Экспорт + + Если Не ЗначениеЗаполнено(Результат) Тогда + Возврат; + КонецЕсли; + + Прочитать(); + +КонецПроцедуры + +&НаКлиентеНаСервереБезКонтекста +Процедура УстановитьНаличиеПароля(Форма, ПарольУстановлен) + + ПользователиСлужебныйКлиентСервер.УстановитьНаличиеПароля(Форма, ПарольУстановлен); + +КонецПроцедуры + &НаСервере Процедура ОпределитьДействияВФорме() @@ -603,14 +776,7 @@ ДействияВФорме.СвойстваЭлемента = "Редактирование"; КонецЕсли; - ОбработчикиСобытия = ОбщегоНазначения.ОбработчикиСлужебногоСобытия( - "СтандартныеПодсистемы.Пользователи\ПриОпределенииДействийВФорме"); - - Для каждого Обработчик Из ОбработчикиСобытия Цикл - Обработчик.Модуль.ПриОпределенииДействийВФорме(Объект.Ссылка, ДействияВФорме); - КонецЦикла; - - ПользователиПереопределяемый.ИзменитьДействияВФорме(Объект.Ссылка, ДействияВФорме); + ПользователиСлужебный.ПриОпределенииДействийВФорме(Объект.Ссылка, ДействияВФорме); // Проверка имен действий в форме. Если Найти(", Просмотр, Редактирование,", ", " + ДействияВФорме.Роли + ",") = 0 Тогда @@ -687,7 +853,6 @@ Результат.Вставить("АутентификацияOpenID", ПользовательИБАутентификацияOpenID); КонецЕсли; КонецЕсли; - Результат.Вставить("ПодтверждениеПароля", ПодтверждениеПароля); Если УровеньДоступа.НастройкиДляВхода И Не ПользователиСлужебный.ЗапретРедактированияРолей() @@ -747,6 +912,36 @@ //////////////////////////////////////////////////////////////////////////////// // Поддержка дополнительных реквизитов. +&НаСервере +Процедура СвойстваВыполнитьОтложеннуюИнициализацию() + + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.Свойства") Тогда + МодульУправлениеСвойствами = ОбщегоНазначения.ОбщийМодуль("УправлениеСвойствами"); + МодульУправлениеСвойствами.ЗаполнитьДополнительныеРеквизитыВФорме(ЭтотОбъект); + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура ОбновитьЗависимостиДополнительныхРеквизитов() + + Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.Свойства") Тогда + МодульУправлениеСвойствамиКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("УправлениеСвойствамиКлиент"); + МодульУправлениеСвойствамиКлиент.ОбновитьЗависимостиДополнительныхРеквизитов(ЭтотОбъект); + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура Подключаемый_ПриИзмененииДополнительногоРеквизита(Элемент) + + Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.Свойства") Тогда + МодульУправлениеСвойствамиКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("УправлениеСвойствамиКлиент"); + МодульУправлениеСвойствамиКлиент.ОбновитьЗависимостиДополнительныхРеквизитов(ЭтотОбъект); + КонецЕсли; + +КонецПроцедуры + &НаСервере Процедура ОбновитьЭлементыДополнительныхРеквизитов() @@ -775,12 +970,14 @@ &НаСервере Функция НачальноеОписаниеПользователяИБ() - ОписаниеПользователяИБ = Пользователи.НовоеОписаниеПользователяИБ(); - - Если Не ЗначениеЗаполнено(Объект.Ссылка) Тогда - ОписаниеПользователяИБ.ПоказыватьВСпискеВыбора = Ложь; - ОписаниеПользователяИБ.АутентификацияСтандартная = Истина; + Если НачальноеОписаниеПользователяИБ <> Неопределено Тогда + НачальноеОписаниеПользователяИБ.Роли = Новый Массив; + Возврат НачальноеОписаниеПользователяИБ; КонецЕсли; + + ОписаниеПользователяИБ = Пользователи.НовоеОписаниеПользователяИБ(); + ОписаниеПользователяИБ.ПоказыватьВСпискеВыбора = Ложь; + ОписаниеПользователяИБ.АутентификацияСтандартная = Истина; ОписаниеПользователяИБ.Роли = Новый Массив; Возврат ОписаниеПользователяИБ; @@ -792,8 +989,6 @@ УстановитьПривилегированныйРежим(Истина); - Пароль = ""; - ПодтверждениеПароля = ""; ПрочитанныеСвойства = Неопределено; ОписаниеПользователяИБ = НачальноеОписаниеПользователяИБ(); ПользовательИБСуществует = Ложь; @@ -823,6 +1018,7 @@ |Роли")); КонецЕсли; Объект.ИдентификаторПользователяИБ = Неопределено; + УстановитьНаличиеПароля(ЭтотОбъект, Ложь); Иначе Если Пользователи.ПрочитатьПользователяИБ( Объект.ИдентификаторПользователяИБ, ПрочитанныеСвойства) Тогда @@ -880,12 +1076,9 @@ |РежимЗапуска" + ?(Не Элементы.ПользовательИБЯзык.Видимость, "", ", |Язык") + ?(ПользователиСлужебный.ЗапретРедактированияРолей(), "", ", |Роли")); - - Если ПрочитанныеСвойства.ПарольУстановлен Тогда - Пароль = "**********"; - ПодтверждениеПароля = "**********"; - КонецЕсли; КонецЕсли; + + УстановитьНаличиеПароля(ЭтотОбъект, ПрочитанныеСвойства.ПарольУстановлен); КонецЕсли; Пользователи.СкопироватьСвойстваПользователяИБ( @@ -942,11 +1135,8 @@ Если ПользовательИБПолноеИмя <> Объект.Наименование Тогда ЕстьРазличияУстранимыеБезАдминистратора = Истина; - УточнениеПолногоИмени = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Полное имя ""%1""'"), ПользовательИБПолноеИмя); - - УточнениеСвойств.Вставить(0, СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Полное имя ""%1""'"), ПользовательИБПолноеИмя)); + УточнениеСвойств.Вставить(0, СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Полное имя ""%1""'"), + ПользовательИБПолноеИмя)); КонецЕсли; Если ПользовательИБПользовательОС <> "" Тогда @@ -976,14 +1166,23 @@ Если ЗначениеЗаполнено(ТекущаяСтрока) Тогда СтрокаУточненияСвойств = СтрокаУточненияСвойств + ТекущаяСтрока; КонецЕсли; - Элементы.СвойстваПояснениеНесоответствия.Заголовок = - СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + Если ПоказатьКомандыУстраненияРазличий + Или ЕстьРазличияУстранимыеБезАдминистратора + И ДействияВФорме.СвойстваЭлемента = "Редактирование" Тогда + + Рекомендация = Символы.ПС + + НСтр("ru = 'Нажмите ""Записать"", чтобы устранить различия и не выводить это предупреждение.'"); + + ИначеЕсли Не Пользователи.ЭтоПолноправныйПользователь() Тогда + Рекомендация = Символы.ПС + + НСтр("ru = 'Обратитесь к администратору, чтобы устранить различия.'"); + Иначе + Рекомендация = ""; + КонецЕсли; + Элементы.СвойстваПояснениеНесоответствия.Заголовок = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Следующие свойства пользователя информационной базы отличаются от указанных в этой форме: - |%1.'"), СтрокаУточненияСвойств) - + Символы.ПС - + ?(ПоказатьКомандыУстраненияРазличий Или ЕстьРазличияУстранимыеБезАдминистратора, - НСтр("ru = 'Нажмите ""Записать"", чтобы устранить различия и не выводить это предупреждение.'"), - НСтр("ru = 'Обратитесь к администратору, чтобы устранить различия.'")); + |%1.'"), + СтрокаУточненияСвойств) + Рекомендация; Иначе ПоказатьНесоответствие = Ложь; КонецЕсли; @@ -992,6 +1191,8 @@ КонецЕсли; Элементы.СвойстваОбработкаНесоответствия.Видимость = ПоказатьНесоответствие; + Элементы.СвойстваПояснениеНесоответствия.ВертикальноеПоложение = ?(ЗначениеЗаполнено(Рекомендация), + ВертикальноеПоложениеЭлемента.Верх, ВертикальноеПоложениеЭлемента.Центр); // Определение сопоставления несуществующего пользователя ИБ с пользователем в справочнике. ЕстьНовоеСопоставлениеСНесуществующимПользователемИБ = @@ -1012,6 +1213,20 @@ Элементы.СопоставлениеОбработкаНесоответствия.Видимость = Ложь; КонецЕсли; + Если ДействияВФорме.СвойстваЭлемента = "Редактирование" Тогда + Рекомендация = Символы.ПС + + НСтр("ru = 'Нажмите ""Записать"", чтобы устранить проблему и не выводить это предупреждение.'"); + + ИначеЕсли Не Пользователи.ЭтоПолноправныйПользователь() Тогда + Рекомендация = Символы.ПС + + НСтр("ru = 'Обратитесь к администратору, чтобы устранить различия.'"); + Иначе + Рекомендация = ""; + КонецЕсли; + + Элементы.СопоставлениеПояснениеНесоответствия.Заголовок = + НСтр("ru = 'Пользователь информационной базы не найден.'") + Рекомендация; + КонецПроцедуры //////////////////////////////////////////////////////////////////////////////// @@ -1036,8 +1251,8 @@ Элементы.ВходВПрограммуРазрешен.ТолькоПросмотр = Не ( Элементы.ОсновныеСвойства.ТолькоПросмотр = Ложь - И ( УровеньДоступа.ПолныеПрава - Или УровеньДоступа.УправлениеСписком И ПриЧтенииВходВПрограммуРазрешен)); + И ( УровеньДоступа.ИзменениеРазрешенияНаВход + Или УровеньДоступа.ОтключениеРазрешенияНаВход И ПриЧтенииВходВПрограммуРазрешен)); Элементы.ПользовательИБИмя1.ТолькоПросмотр = Не УровеньДоступа.НастройкиДляВхода; Элементы.ПользовательИБИмя2.ТолькоПросмотр = Не УровеньДоступа.НастройкиДляВхода; @@ -1047,12 +1262,10 @@ Элементы.ПользовательИБЗапрещеноИзменятьПароль.ТолькоПросмотр = Не УровеньДоступа.УправлениеСписком; - Элементы.Пароль.ТолькоПросмотр = - Не ( УровеньДоступа.НастройкиДляВхода - Или УровеньДоступа.ИзменениеТекущего - И Не ПользовательИБЗапрещеноИзменятьПароль); - - Элементы.ПодтверждениеПароля.ТолькоПросмотр = Элементы.Пароль.ТолькоПросмотр; + Элементы.СменитьПароль.Доступность = + ( УровеньДоступа.НастройкиДляВхода + Или УровеньДоступа.ИзменениеТекущего + И Не ПользовательИБЗапрещеноИзменятьПароль); ОбработатьИнтерфейсРолей( "УстановитьТолькоПросмотрРолей", @@ -1077,15 +1290,23 @@ ОбновитьИмяДляВхода(ЭтотОбъект); // Настройка доступности связанных элементов. - Элементы.ВходВПрограммуРазрешен.Доступность = НЕ Объект.Недействителен; - Элементы.ОсновныеСвойства.Доступность = НЕ Объект.Недействителен; - Элементы.РедактированиеИлиПросмотрРолей.Доступность = НЕ Объект.Недействителен; + Элементы.ВходВПрограммуРазрешен.Доступность = Не Объект.Недействителен; + Элементы.ОсновныеСвойства.Доступность = Не Объект.Недействителен; + Элементы.РедактированиеИлиПросмотрРолей.Доступность = Не Объект.Недействителен; + Элементы.ГруппаИзменитьОграничение.Доступность = Не Объект.Недействителен + И Не Элементы.Недействителен.ТолькоПросмотр; - Элементы.Пароль.Доступность = ПользовательИБАутентификацияСтандартная; - Элементы.ПодтверждениеПароля.Доступность = ПользовательИБАутентификацияСтандартная; + Элементы.ПараметрыАутентификации1СПредприятия.Доступность = ПользовательИБАутентификацияСтандартная; - Элементы.ПользовательИБЗапрещеноИзменятьПароль.Доступность - = ПользовательИБАутентификацияСтандартная; + ПользователиСлужебныйКлиентСервер.ОбновитьОграничениеСрокаДействия(ЭтотОбъект); + +КонецПроцедуры + +// Продолжение процедуры ИзменитьОграничениеНаВходВПрограмму. +&НаКлиенте +Процедура ИзменитьОграничениеНаВходВПрограммуЗавершение(Результат, Контекст) Экспорт + + УстановитьДоступностьСвойств(); КонецПроцедуры @@ -1113,11 +1334,10 @@ ИЛИ Форма.ПользовательИБИмя <> ТекущееИмя ИЛИ Форма.ПользовательИБАутентификацияСтандартная <> Шаблон.АутентификацияСтандартная ИЛИ Форма.ПользовательИБЗапрещеноИзменятьПароль <> Шаблон.ЗапрещеноИзменятьПароль - ИЛИ Форма.Пароль <> "" - ИЛИ Форма.ПодтверждениеПароля <> "" - ИЛИ Форма.ПользовательИБАутентификацияOpenID <> Шаблон.АутентификацияOpenID - ИЛИ Форма.ПользовательИБЯзык <> Шаблон.Язык - ИЛИ Форма.ПользовательИБРоли.Количество() <> 0 Тогда + ИЛИ Форма.ПользовательИБПароль <> Неопределено + ИЛИ Форма.ПользовательИБАутентификацияOpenID <> Шаблон.АутентификацияOpenID + ИЛИ Форма.ПользовательИБЯзык <> Шаблон.Язык + ИЛИ Форма.ПользовательИБРоли.Количество() <> 0 Тогда Возврат Истина; КонецЕсли; diff --git a/SSL/src/Catalogs/ВнешниеПользователи/Help/ru.html b/SSL/src/Catalogs/ВнешниеПользователи/Help/ru.html index b49fd4cb5..9bc54667b 100644 --- a/SSL/src/Catalogs/ВнешниеПользователи/Help/ru.html +++ b/SSL/src/Catalogs/ВнешниеПользователи/Help/ru.html @@ -10,11 +10,15 @@

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

          См. также:

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

        Установка пароля

        +

        Доступно только для администратора

        +
        • +
          Нажмите Еще - Установить пароль, заполните необходимые поля.

        См. также:

        \ No newline at end of file diff --git a/SSL/src/Catalogs/ВнешниеПользователи/ObjectModule.bsl b/SSL/src/Catalogs/ВнешниеПользователи/ObjectModule.bsl index 024a6a2c4..4a0981489 100644 --- a/SSL/src/Catalogs/ВнешниеПользователи/ObjectModule.bsl +++ b/SSL/src/Catalogs/ВнешниеПользователи/ObjectModule.bsl @@ -1,16 +1,5 @@ #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда -#Область ПрограммныйИнтерфейс - -// Программный интерфейс объекта реализован через ДополнительныеСвойства: -// -// ОписаниеПользователяИБ - Структура, как и в модуле объекта справочника Пользователи. - -#КонецОбласти - -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПЕРЕМЕННЫЕ - Перем ПараметрыОбработкиПользователяИБ; // Параметры, заполняемые при обработке пользователя ИБ. // Используются в обработчике события ПриЗаписи. @@ -20,6 +9,13 @@ Перем СтарыйОбъектАвторизации; // Значений объекта авторизации до изменения. // Используются в обработчике события ПриЗаписи. +// *Область ПрограммныйИнтерфейс +// +// Программный интерфейс объекта реализован через ДополнительныеСвойства: +// ОписаниеПользователяИБ - Структура, как и в модуле объекта справочника Пользователи. +// +// *КонецОбласти + #Область ОбработчикиСобытий Процедура ПередЗаписью(Отказ) @@ -66,8 +62,8 @@ КонецЕсли; // Обновление состава группы нового внешнего пользователя (если задана). - Если ДополнительныеСвойства.Свойство("ГруппаНовогоВнешнегоПользователя") И - ЗначениеЗаполнено(ДополнительныеСвойства.ГруппаНовогоВнешнегоПользователя) Тогда + Если ДополнительныеСвойства.Свойство("ГруппаНовогоВнешнегоПользователя") + И ЗначениеЗаполнено(ДополнительныеСвойства.ГруппаНовогоВнешнегоПользователя) Тогда Блокировка = Новый БлокировкаДанных; ЭлементБлокировки = Блокировка.Добавить("Справочник.ГруппыВнешнихПользователей"); @@ -100,11 +96,13 @@ ИзмененныеГруппы); Если СтарыйОбъектАвторизации <> ОбъектАвторизации Тогда - ПользователиСлужебный.ПослеИзмененияОбъектаАвторизацииВнешнегоПользователя( + ИнтеграцияСтандартныхПодсистем.ПослеИзмененияОбъектаАвторизацииВнешнегоПользователя( Ссылка, СтарыйОбъектАвторизации, ОбъектАвторизации); КонецЕсли; - ПользователиСлужебный.ПослеДобавленияИзмененияПользователяИлиГруппы(Ссылка, ЭтоНовый); + ПользователиСлужебный.ВключитьЗаданиеКонтрольАктивностиПользователейПриНеобходимости(Ссылка); + + ИнтеграцияСтандартныхПодсистем.ПослеДобавленияИзмененияПользователяИлиГруппы(Ссылка, ЭтоНовый); КонецПроцедуры @@ -126,6 +124,8 @@ ИдентификаторПользователяСервиса = Неопределено; Подготовлен = Ложь; + Комментарий = ""; + КонецПроцедуры #КонецОбласти diff --git a/SSL/src/Catalogs/ВнешниеПользователи/ВнешниеПользователи.mdo b/SSL/src/Catalogs/ВнешниеПользователи/ВнешниеПользователи.mdo index 94ce94f12..8fcd2f6a0 100644 --- a/SSL/src/Catalogs/ВнешниеПользователи/ВнешниеПользователи.mdo +++ b/SSL/src/Catalogs/ВнешниеПользователи/ВнешниеПользователи.mdo @@ -100,6 +100,38 @@ + + Catalog.НаборыДополнительныхРеквизитовИСведений.TabularSection.ДополнительныеРеквизиты + Catalog.НаборыДополнительныхРеквизитовИСведений.TabularSection.ДополнительныеРеквизиты.Attribute.Свойство + Catalog.НаборыДополнительныхРеквизитовИСведений.TabularSection.ДополнительныеРеквизиты.StandardAttribute.Ref + + Catalog.НаборыДополнительныхРеквизитовИСведений.Справочник_ВнешниеПользователи + + -1 + -1 + Catalog.ВнешниеПользователи.TabularSection.ДополнительныеРеквизиты + Catalog.ВнешниеПользователи.TabularSection.ДополнительныеРеквизиты.StandardAttribute.Ref + Catalog.ВнешниеПользователи.TabularSection.ДополнительныеРеквизиты.Attribute.Свойство + Catalog.ВнешниеПользователи.TabularSection.ДополнительныеРеквизиты.Attribute.Значение + -1 + -1 + + + Catalog.НаборыДополнительныхРеквизитовИСведений.TabularSection.ДополнительныеСведения + Catalog.НаборыДополнительныхРеквизитовИСведений.TabularSection.ДополнительныеСведения.Attribute.Свойство + Catalog.НаборыДополнительныхРеквизитовИСведений.TabularSection.ДополнительныеСведения.StandardAttribute.Ref + + Catalog.НаборыДополнительныхРеквизитовИСведений.Справочник_ВнешниеПользователи + + -1 + -1 + InformationRegister.ДополнительныеСведения + InformationRegister.ДополнительныеСведения.Dimension.Объект + InformationRegister.ДополнительныеСведения.Dimension.Свойство + InformationRegister.ДополнительныеСведения.Resource.Значение + -1 + -1 + Use true @@ -394,7 +426,7 @@ ФормаЭлемента ru - Внешний пользователь + Форма элемента @@ -421,6 +453,9 @@ Внешний пользователь объекта авторизации FormCommandBarImportant - Auto + Picture + + CommonPicture.СостояниеПользователя08 + diff --git a/SSL/src/Catalogs/ГруппыВнешнихПользователей/Commands/ГруппыВнешнегоПользователя/CommandModule.bsl b/SSL/src/Catalogs/ГруппыВнешнихПользователей/Commands/ГруппыВнешнегоПользователя/CommandModule.bsl index b667cf0d1..cd091a6bc 100644 --- a/SSL/src/Catalogs/ГруппыВнешнихПользователей/Commands/ГруппыВнешнегоПользователя/CommandModule.bsl +++ b/SSL/src/Catalogs/ГруппыВнешнихПользователей/Commands/ГруппыВнешнегоПользователя/CommandModule.bsl @@ -1,3 +1,4 @@ +#Область ОбработчикиСобытий &НаКлиенте Процедура ОбработкаКоманды(ПараметрКоманды, ПараметрыВыполненияКоманды) @@ -12,3 +13,5 @@ ПараметрыВыполненияКоманды.Окно); КонецПроцедуры + +#КонецОбласти diff --git a/SSL/src/Catalogs/ГруппыВнешнихПользователей/Forms/ФормаСписка/Form.form b/SSL/src/Catalogs/ГруппыВнешнихПользователей/Forms/ФормаСписка/Form.form index 4022d3484..c0641d3da 100644 --- a/SSL/src/Catalogs/ГруппыВнешнихПользователей/Forms/ФормаСписка/Form.form +++ b/SSL/src/Catalogs/ГруппыВнешнихПользователей/Forms/ФормаСписка/Form.form @@ -377,7 +377,6 @@ true true true - UseIfNecessary auto true diff --git a/SSL/src/Catalogs/ГруппыВнешнихПользователей/Forms/ФормаСписка/Module.bsl b/SSL/src/Catalogs/ГруппыВнешнихПользователей/Forms/ФормаСписка/Module.bsl index 5e94c41bc..fd1a997d3 100644 --- a/SSL/src/Catalogs/ГруппыВнешнихПользователей/Forms/ФормаСписка/Module.bsl +++ b/SSL/src/Catalogs/ГруппыВнешнихПользователей/Forms/ФормаСписка/Module.bsl @@ -17,11 +17,6 @@ Элементы.Список.РежимВыбора = Истина; - // Отбор не помеченных на удаление. - ОбщегоНазначенияКлиентСервер.УстановитьЭлементОтбораДинамическогоСписка( - Список, "ПометкаУдаления", Ложь, , , Истина, - РежимОтображенияЭлементаНастройкиКомпоновкиДанных.Обычный); - // Исключение выбора группы Все внешние пользователи в качестве родителя. ОбщегоНазначенияКлиентСервер.УстановитьЭлементОтбораДинамическогоСписка( Список, "Ссылка", Справочники.ГруппыВнешнихПользователей.ВсеВнешниеПользователи, @@ -36,6 +31,11 @@ Заголовок = НСтр("ru = 'Выбор группы внешних пользователей'"); КонецЕсли; КонецЕсли; + + Если ОбщегоНазначенияПовтИсп.ЭтоАвтономноеРабочееМесто() Тогда + ТолькоПросмотр = Истина; + КонецЕсли; + КонецПроцедуры #КонецОбласти diff --git a/SSL/src/Catalogs/ГруппыВнешнихПользователей/Forms/ФормаЭлемента/Form.form b/SSL/src/Catalogs/ГруппыВнешнихПользователей/Forms/ФормаЭлемента/Form.form index c5da60b13..9db0fb563 100644 --- a/SSL/src/Catalogs/ГруппыВнешнихПользователей/Forms/ФормаЭлемента/Form.form +++ b/SSL/src/Catalogs/ГруппыВнешнихПользователей/Forms/ФормаЭлемента/Form.form @@ -106,28 +106,19 @@ ru - Выбранные пользователи + Выбранные пользователи указанных видов - Любые + ВыбранныеПользователиВидов ru - Выбранные пользователи одного вида + Все пользователи указанных видов - ОдногоВида - - - - - ru - Все пользователи одного вида - - - ВсеОдногоВида + ВсеПользователиВидов @@ -136,29 +127,86 @@ Normal - - ПредставлениеТипаОбъектовАвторизации - 127 + + ГруппаНазначение + 239 + + ЗаголовокНазначение + 236 + + <key>ru</key> + <value>Вид:</value> + + true + true + + true + + + ЗаголовокНазначениеРасширеннаяПодсказка + 238 + Label + true + true + + Left + + + + ЗаголовокНазначениеКонтекстноеМеню + 237 + true + + Label + true + true + + Left + + + + ВыбратьНазначение + 234 + true + true + + true + + + ВыбратьНазначениеРасширеннаяПодсказка + 235 + Label + true + true + + Left + + + Hyperlink + Form.Command.ВыбратьНазначение + Normal + Auto + true + true + UserCmds + Auto + true true true - - ПредставлениеТипаОбъектовАвторизации - - None + + <key>ru</key> + <value>Группа назначение</value> + ru - Вид участников группы + Группа назначение - - OnChange - ПредставлениеТипаОбъектовАвторизацииПриИзменении - - ПредставлениеТипаОбъектовАвторизацииExtendedTooltip - 158 + ГруппаНазначениеРасширеннаяПодсказка + 240 Label true true @@ -166,29 +214,13 @@ Left - - ПредставлениеТипаОбъектовАвторизацииКонтекстноеМеню - 128 - true - - InputField - Enter - true - Left - true - - - StartChoice - ПредставлениеТипаОбъектовАвторизацииНачалоВыбора - - true - true - true - true - false - true - true - Normal + UsualGroup + + Auto + true + true + Auto + Auto true @@ -626,6 +658,10 @@ ChoiceProcessing СоставОбработкаВыбора + + OnChange + СоставПриИзменении + СоставСтрокаПоиска 216 @@ -928,7 +964,6 @@ 30 true true - 12 true MultiRow 1 @@ -1617,7 +1652,6 @@ true true true - UseIfNecessary auto true @@ -1681,26 +1715,6 @@ true - - ПредставлениеТипаОбъектовАвторизации - - <key>ru</key> - <value>Вид участников группы</value> - - 6 - - String - - - - true - - - true - - ShowError - true - ТипыОбъектовАвторизации @@ -1940,7 +1954,7 @@ </handler> </action> <modifiesStoredData>true</modifiesStoredData> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <formCommands> @@ -1966,7 +1980,7 @@ </handler> </action> <representation>TextPicture</representation> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <formCommands> @@ -1992,7 +2006,7 @@ </handler> </action> <modifiesStoredData>true</modifiesStoredData> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <formCommands> @@ -2018,7 +2032,7 @@ </handler> </action> <modifiesStoredData>true</modifiesStoredData> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <formCommands> @@ -2044,7 +2058,7 @@ </handler> </action> <representation>TextPicture</representation> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <formCommands> @@ -2066,7 +2080,7 @@ <name>ПоказыватьНедействительныхПользователей</name> </handler> </action> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <formCommands> @@ -2093,7 +2107,7 @@ </action> <representation>Picture</representation> <modifiesStoredData>true</modifiesStoredData> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <formCommands> @@ -2120,7 +2134,7 @@ </action> <representation>Picture</representation> <modifiesStoredData>true</modifiesStoredData> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <formCommands> @@ -2143,7 +2157,7 @@ </action> <representation>Picture</representation> <modifiesStoredData>true</modifiesStoredData> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <formCommands> @@ -2166,7 +2180,30 @@ </action> <representation>Picture</representation> <modifiesStoredData>true</modifiesStoredData> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> + <selectedRowsUse>Auto</selectedRowsUse> + </formCommands> + <formCommands> + <name>ВыбратьНазначение</name> + <title> + <key>ru</key> + <value><Не указан></value> + + 11 + + ru + Виды пользователей группы + + + true + + + + ВыбратьНазначение + + + true + DontUse Auto diff --git a/SSL/src/Catalogs/ГруппыВнешнихПользователей/Forms/ФормаЭлемента/Help/ru.html b/SSL/src/Catalogs/ГруппыВнешнихПользователей/Forms/ФормаЭлемента/Help/ru.html index 294743144..34bb211fd 100644 --- a/SSL/src/Catalogs/ГруппыВнешнихПользователей/Forms/ФормаЭлемента/Help/ru.html +++ b/SSL/src/Catalogs/ГруппыВнешнихПользователей/Forms/ФормаЭлемента/Help/ru.html @@ -3,21 +3,21 @@

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

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

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

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

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

      diff --git a/SSL/src/Catalogs/ГруппыВнешнихПользователей/Forms/ФормаЭлемента/Module.bsl b/SSL/src/Catalogs/ГруппыВнешнихПользователей/Forms/ФормаЭлемента/Module.bsl index 893d01de8..9c81f8493 100644 --- a/SSL/src/Catalogs/ГруппыВнешнихПользователей/Forms/ФормаЭлемента/Module.bsl +++ b/SSL/src/Catalogs/ГруппыВнешнихПользователей/Forms/ФормаЭлемента/Module.bsl @@ -3,7 +3,7 @@ &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) - + УстановитьУсловноеОформление(); Если Параметры.Свойство("АвтоТест") Тогда // Возврат при получении формы для анализа. @@ -16,7 +16,6 @@ КонецЕсли; // Подготовка вспомогательных данных. - ЗаполнитьСписокТиповОбъектовАвторизации(); Если Не ЗначениеЗаполнено(Объект.Ссылка) Тогда @@ -39,13 +38,7 @@ Элементы.Состав.Видимость = ЗначениеЗаполнено(ДействияВФорме.СоставГруппы); Элементы.ОтображениеРолей.Видимость = ЗначениеЗаполнено(ДействияВФорме.Роли); - Если Объект.ВсеОбъектыАвторизации Тогда - УчастникиГруппы = "ВсеОдногоВида"; - ИначеЕсли Объект.ТипОбъектовАвторизации <> Неопределено Тогда - УчастникиГруппы = "ОдногоВида"; - Иначе - УчастникиГруппы = "Любые"; - КонецЕсли; + УчастникиГруппы = ?(Объект.ВсеОбъектыАвторизации, "ВсеПользователиВидов", "ВыбранныеПользователиВидов"); ЭтоГруппаВсеВнешниеПользователи = Объект.Ссылка = Справочники.ГруппыВнешнихПользователей.ВсеВнешниеПользователи; @@ -83,10 +76,19 @@ ПользователиСлужебный.ЗапретРедактированияРолей() ИЛИ ДействияВФорме.Роли <> "Редактирование"); + ОбновитьСписокНедействительныхПользователей(Истина); + ЗаполнитьСтатусПользователей(); + + Если ЗначениеЗаполнено(Объект.Родитель) И РеквизитФормыВЗначение("Объект").ЭтоНовый() Тогда + Объект.Назначение.Загрузить(Объект.Родитель.Назначение.Выгрузить()); + КонецЕсли; + ПользователиСлужебный.ОбновитьНазначениеПриСозданииНаСервере(ЭтотОбъект, Ложь); + УстановитьДоступностьСвойств(ЭтотОбъект); - ЗаполнитьСтатусПользователей(); - ОбновитьСписокНедействительныхПользователей(Истина); + Если ОбщегоНазначенияПовтИсп.ЭтоАвтономноеРабочееМесто() Тогда + ТолькоПросмотр = Истина; + КонецЕсли; КонецПроцедуры @@ -137,22 +139,15 @@ Если Строка.Пометка И Лев(Строка.Синоним, 1) = "?" Тогда ОбщегоНазначенияКлиентСервер.ДобавитьОшибкуПользователю(Ошибки, "Роли[%1].РолиСиноним", - СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Роль ""%1"" не найдена в метаданных.'"), - Строка.Синоним), + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Роль ""%1"" не найдена в метаданных.'"), Строка.Синоним), "Роли", ЭлементыДерева.Индекс(Строка), - СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Роль ""%2"" в строке %1 не найдена в метаданных.'"), - "%1", Строка.Синоним)); + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Роль ""%1"" в строке %%1 не найдена в метаданных.'"), Строка.Синоним)); КонецЕсли; КонецЦикла; ОбщегоНазначенияКлиентСервер.СообщитьОшибкиПользователю(Ошибки, Отказ); - Если УчастникиГруппы = "Любые" Тогда - НепроверяемыеРеквизиты.Добавить("ПредставлениеТипаОбъектовАвторизации"); - КонецЕсли; НепроверяемыеРеквизиты.Добавить("Объект"); ОбщегоНазначения.УдалитьНепроверяемыеРеквизитыИзМассива(ПроверяемыеРеквизиты, НепроверяемыеРеквизиты); @@ -181,52 +176,15 @@ &НаКлиенте Процедура СоставУчастниковПриИзменении(Элемент) - Объект.ВсеОбъектыАвторизации = (УчастникиГруппы = "ВсеОдногоВида"); + Объект.ВсеОбъектыАвторизации = (УчастникиГруппы = "ВсеПользователиВидов"); Если Объект.ВсеОбъектыАвторизации Тогда Объект.Состав.Очистить(); КонецЕсли; - Если УчастникиГруппы = "ВсеОдногоВида" Или УчастникиГруппы = "ОдногоВида" Тогда - Если Не ЗначениеЗаполнено(ПредставлениеТипаОбъектовАвторизации) Тогда - ПредставлениеТипаОбъектовАвторизации = ТипыОбъектовАвторизации[0].Представление; - Объект.ТипОбъектовАвторизации = ТипыОбъектовАвторизации[0].Значение; - КонецЕсли; - Иначе - ПредставлениеТипаОбъектовАвторизации = ""; - Объект.ТипОбъектовАвторизации = Неопределено; - КонецЕсли; - УстановитьДоступностьСвойств(ЭтотОбъект); КонецПроцедуры -&НаКлиенте -Процедура ПредставлениеТипаОбъектовАвторизацииПриИзменении(Элемент) - - Если ЗначениеЗаполнено(ПредставлениеТипаОбъектовАвторизации) Тогда - УдалитьНеТипичныеВнешниеПользователи(); - Иначе - Объект.ВсеОбъектыАвторизации = Ложь; - Объект.ТипОбъектовАвторизации = Неопределено; - КонецЕсли; - - УстановитьДоступностьСвойств(ЭтотОбъект); - -КонецПроцедуры - -&НаКлиенте -Процедура ПредставлениеТипаОбъектовАвторизацииНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка) - - СтандартнаяОбработка = Ложь; - - ПоказатьВыборИзСписка( - Новый ОписаниеОповещения("ПредставлениеТипаОбъектовАвторизацииЗавершениеВыбора", ЭтотОбъект), - ТипыОбъектовАвторизации, - Элемент, - ТипыОбъектовАвторизации.НайтиПоЗначению(Объект.ТипОбъектовАвторизации)); - -КонецПроцедуры - &НаКлиенте Процедура РодительПриИзменении(Элемент) @@ -280,6 +238,9 @@ &НаКлиенте Процедура СоставОбработкаВыбора(Элемент, ВыбранноеЗначение, СтандартнаяОбработка) + ОтборСтрок = Новый Структура(Элементы.Состав.ОтборСтрок); + Элементы.Состав.ОтборСтрок = Новый ФиксированнаяСтруктура; + Объект.Состав.Очистить(); Если ТипЗнч(ВыбранноеЗначение) = Тип("Массив") Тогда Для каждого Значение Из ВыбранноеЗначение Цикл @@ -288,7 +249,16 @@ Иначе ОбработкаВыбораВнешнегоПользователя(ВыбранноеЗначение); КонецЕсли; + ЗаполнитьСтатусПользователей(); + УстановитьДоступностьСвойств(ЭтотОбъект); + Элементы.Состав.ОтборСтрок = Новый ФиксированнаяСтруктура(ОтборСтрок); + +КонецПроцедуры + +&НаКлиенте +Процедура СоставПриИзменении(Элемент) + УстановитьДоступностьСвойств(ЭтотОбъект); КонецПроцедуры &НаКлиенте @@ -327,6 +297,7 @@ Процедура ПоказыватьНедействительныхПользователей(Команда) ОбновитьСписокНедействительныхПользователей(Ложь); + УстановитьДоступностьСвойств(ЭтотОбъект); КонецПроцедуры @@ -350,6 +321,14 @@ СоставПереместитьСтроку("Вниз"); КонецПроцедуры +&НаКлиенте +Процедура ВыбратьНазначение(Команда) + + ОписаниеОповещения = Новый ОписаниеОповещения("ПослеВыбораНазначения", ЭтотОбъект); + ПользователиСлужебныйКлиент.ВыбратьНазначение(ЭтотОбъект, Нстр("ru = 'Выбор вида пользователей'"), Ложь, Ложь, ОписаниеОповещения); + +КонецПроцедуры + //////////////////////////////////////////////////////////////////////////////// // Для работы интерфейса ролей. @@ -410,20 +389,6 @@ КонецПроцедуры -&НаКлиенте -Процедура ПредставлениеТипаОбъектовАвторизацииЗавершениеВыбора(ВыбранныйЭлемент, Неопределен) Экспорт - - Если ВыбранныйЭлемент <> Неопределено Тогда - - Модифицированность = Истина; - Объект.ТипОбъектовАвторизации = ВыбранныйЭлемент.Значение; - ПредставлениеТипаОбъектовАвторизации = ВыбранныйЭлемент.Представление; - - ПредставлениеТипаОбъектовАвторизацииПриИзменении(Элементы.ПредставлениеТипаОбъектовАвторизации); - КонецЕсли; - -КонецПроцедуры - &НаСервере Функция ПеремещениеПользователяВГруппу(МассивПользователей, НоваяГруппаВладелец) @@ -451,27 +416,11 @@ Если ЗначениеЗаполнено(Объект.Родитель) И Объект.Родитель <> Справочники.ГруппыВнешнихПользователей.ВсеВнешниеПользователи Тогда - Если Объект.Родитель.ТипОбъектовАвторизации <> Неопределено Тогда - НайденноеЗначение = ТипыОбъектовАвторизации.НайтиПоЗначению(Объект.Родитель.ТипОбъектовАвторизации); - Объект.ТипОбъектовАвторизации = НайденноеЗначение.Значение; - ПредставлениеТипаОбъектовАвторизации = НайденноеЗначение.Представление; - УчастникиГруппы = Элементы.УчастникиГруппы.СписокВыбора.НайтиПоЗначению("ОдногоВида").Значение; - Элементы.ТипПользователей.Доступность = Ложь; - Иначе - Элементы.ТипПользователей.Доступность = Истина; - НайденноеЗначение = Элементы.УчастникиГруппы.СписокВыбора.НайтиПоЗначению("ВсеОдногоВида"); - Если НайденноеЗначение <> Неопределено Тогда - Элементы.УчастникиГруппы.СписокВыбора.Удалить(НайденноеЗначение); - КонецЕсли; - - КонецЕсли; + Элементы.ТипПользователей.Доступность = Ложь; + УчастникиГруппы = Элементы.УчастникиГруппы.СписокВыбора.НайтиПоЗначению("ВыбранныеПользователиВидов").Значение; Иначе - НайденноеЗначение = Элементы.УчастникиГруппы.СписокВыбора.НайтиПоЗначению("ВсеОдногоВида"); - Если НайденноеЗначение = Неопределено Тогда - Элементы.УчастникиГруппы.СписокВыбора.Вставить(0, "ВсеОдногоВида", НСтр("ru = 'Все пользователи заданного вида'")); - КонецЕсли; Элементы.ТипПользователей.Доступность = Истина; КонецЕсли; @@ -512,14 +461,7 @@ ДействияВФорме.СвойстваЭлемента = "Просмотр"; КонецЕсли; - ОбработчикиСобытия = ОбщегоНазначения.ОбработчикиСлужебногоСобытия( - "СтандартныеПодсистемы.Пользователи\ПриОпределенииДействийВФорме"); - - Для каждого Обработчик Из ОбработчикиСобытия Цикл - Обработчик.Модуль.ПриОпределенииДействийВФорме(Объект.Ссылка, ДействияВФорме); - КонецЦикла; - - ПользователиПереопределяемый.ИзменитьДействияВФорме(Объект.Ссылка, ДействияВФорме); + ПользователиСлужебный.ПриОпределенииДействийВФорме(Объект.Ссылка, ДействияВФорме); // Проверка имен действий в форме. Если Найти(", Просмотр, Редактирование,", ", " + ДействияВФорме.Роли + ",") = 0 Тогда @@ -547,8 +489,23 @@ НЕ Форма.ТолькоПросмотр И НЕ Элементы.ВнешниеПользователиГруппы.ТолькоПросмотр И НЕ Элементы.Состав.ТолькоПросмотр - И Элементы.Состав.Доступность; - + И Элементы.Состав.Доступность + И Форма.Объект.Назначение.Количество() <> 0; + + СоставГруппы = Форма.Объект.Состав; + + ПараметрыОтбора = Новый Структура; + ПараметрыОтбора.Вставить("Недействителен", Ложь); + ЕстьДействительныеПользователи = СоставГруппы.НайтиСтроки(ПараметрыОтбора).Количество() > 0; + + ПараметрыОтбора.Вставить("Недействителен", Истина); + ЕстьНедействительныеПользователи = СоставГруппы.НайтиСтроки(ПараметрыОтбора).Количество() > 0; + + ДоступностьКомандПеремещения = + ЕстьДействительныеПользователи + Или (ЕстьНедействительныеПользователи + И Элементы.ПоказыватьНедействительныхПользователей.Пометка); + Элементы.Состав.ТолькоПросмотр = Не ДоступностьКоманд; Элементы.СоставПодобрать.Доступность = ДоступностьКоманд; @@ -557,38 +514,10 @@ Элементы.СоставСортироватьПоВозрастанию.Доступность = ДоступностьКоманд; Элементы.СоставСортироватьПоУбыванию.Доступность = ДоступностьКоманд; - Элементы.СоставПереместитьВверх.Доступность = ДоступностьКоманд; - Элементы.СоставПереместитьВниз.Доступность = ДоступностьКоманд; - Элементы.СоставКонтекстноеМенюПереместитьВверх.Доступность = ДоступностьКоманд; - Элементы.СоставКонтекстноеМенюПереместитьВниз.Доступность = ДоступностьКоманд; - - Элементы.ПредставлениеТипаОбъектовАвторизации.Видимость = - Не Форма.ЭтоГруппаВсеВнешниеПользователи - И ((Форма.УчастникиГруппы = "ОдногоВида" Или Форма.УчастникиГруппы = "ВсеОдногоВида")); - -КонецПроцедуры - -&НаСервере -Процедура ЗаполнитьСписокТиповОбъектовАвторизации() - - ТипыСсылокОбъектовАвторизации = - Метаданные.Справочники.ВнешниеПользователи.Реквизиты.ОбъектАвторизации.Тип.Типы(); - - Для каждого ТипСсылкиОбъектаАвторизации Из ТипыСсылокОбъектовАвторизации Цикл - МетаданныеТипа = Метаданные.НайтиПоТипу(ТипСсылкиОбъектаАвторизации); - - МассивТипов = Новый Массив; - МассивТипов.Добавить(ТипСсылкиОбъектаАвторизации); - ОписаниеТипаСсылки = Новый ОписаниеТипов(МассивТипов); - - ТипыОбъектовАвторизации.Добавить( - ОписаниеТипаСсылки.ПривестиЗначение(Неопределено), МетаданныеТипа.Синоним); - КонецЦикла; - - НайденныйЭлемент = ТипыОбъектовАвторизации.НайтиПоЗначению(Объект.ТипОбъектовАвторизации); - - ПредставлениеТипаОбъектовАвторизации = ?( - НайденныйЭлемент = Неопределено, "", НайденныйЭлемент.Представление); + Элементы.СоставПереместитьВверх.Доступность = ДоступностьКоманд И ДоступностьКомандПеремещения; + Элементы.СоставПереместитьВниз.Доступность = ДоступностьКоманд И ДоступностьКомандПеремещения; + Элементы.СоставКонтекстноеМенюПереместитьВверх.Доступность = ДоступностьКоманд И ДоступностьКомандПеремещения; + Элементы.СоставКонтекстноеМенюПереместитьВниз.Доступность = ДоступностьКоманд И ДоступностьКомандПеремещения; КонецПроцедуры @@ -596,18 +525,30 @@ Процедура УдалитьНеТипичныеВнешниеПользователи() Запрос = Новый Запрос; - Запрос.УстановитьПараметр("ТипОбъектовАвторизации", ТипЗнч(Объект.ТипОбъектовАвторизации)); - Запрос.УстановитьПараметр( - "ВыбранныеВнешниеПользователи", - Объект.Состав.Выгрузить().ВыгрузитьКолонку("ВнешнийПользователь")); + Запрос.УстановитьПараметр("ВыбранныеВнешниеПользователи", Объект.Состав.Выгрузить().ВыгрузитьКолонку("ВнешнийПользователь")); + Запрос.УстановитьПараметр("ТипыПользователей", Объект.Назначение.Выгрузить()); Запрос.Текст = "ВЫБРАТЬ + | ТипыПользователей.ТипПользователей + |ПОМЕСТИТЬ ТипыПользователей + |ИЗ + | &ТипыПользователей КАК ТипыПользователей + |; + | + |//////////////////////////////////////////////////////////////////////////////// + |ВЫБРАТЬ | ВнешниеПользователи.Ссылка |ИЗ | Справочник.ВнешниеПользователи КАК ВнешниеПользователи |ГДЕ - | ТИПЗНАЧЕНИЯ(ВнешниеПользователи.ОбъектАвторизации) <> &ТипОбъектовАвторизации + | НЕ ЛОЖЬ В + | (ВЫБРАТЬ ПЕРВЫЕ 1 + | ЛОЖЬ + | ИЗ + | ТипыПользователей КАК ТипыПользователей + | ГДЕ + | ТИПЗНАЧЕНИЯ(ТипыПользователей.ТипПользователей) = ТИПЗНАЧЕНИЯ(ВнешниеПользователи.ОбъектАвторизации)) | И ВнешниеПользователи.Ссылка В(&ВыбранныеВнешниеПользователи)"; НачатьТранзакцию(); @@ -648,9 +589,12 @@ ПараметрыФормы.Вставить("ПараметрыРасширеннойФормыПодбора", ПараметрыРасширеннойФормыПодбора()); КонецЕсли; - Если Объект.ТипОбъектовАвторизации <> Неопределено Тогда - ПараметрыФормы.Вставить("ТипОбъектовАвторизации", Объект.ТипОбъектовАвторизации); - КонецЕсли; + МассивПустыхСсылок = Новый Массив; + Для Каждого СтрокаНазначения Из Объект.Назначение Цикл + МассивПустыхСсылок.Добавить(СтрокаНазначения.ТипПользователей); + КонецЦикла; + + ПараметрыФормы.Вставить("Назначение", МассивПустыхСсылок); ОткрытьФорму( "Справочник.ВнешниеПользователи.ФормаВыбора", @@ -771,6 +715,15 @@ КонецПроцедуры +&НаКлиенте +Процедура ПослеВыбораНазначения(МассивТипов, ДополнительныеПараметры) Экспорт + + Модифицированность = Истина; + УдалитьНеТипичныеВнешниеПользователи(); + УстановитьДоступностьСвойств(ЭтотОбъект); + +КонецПроцедуры + //////////////////////////////////////////////////////////////////////////////// // Для работы интерфейса ролей. diff --git a/SSL/src/Catalogs/ГруппыВнешнихПользователей/ObjectModule.bsl b/SSL/src/Catalogs/ГруппыВнешнихПользователей/ObjectModule.bsl index 2bbbb8e26..8bb0c2e7d 100644 --- a/SSL/src/Catalogs/ГруппыВнешнихПользователей/ObjectModule.bsl +++ b/SSL/src/Catalogs/ГруппыВнешнихПользователей/ObjectModule.bsl @@ -1,8 +1,5 @@ #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПЕРЕМЕННЫЕ - Перем СтарыйРодитель; // Значение родителя группы до изменения для использования // в обработчике события ПриЗаписи. @@ -44,6 +41,15 @@ // Проверка незаполненных и повторяющихся внешних пользователей. ПроверенныеРеквизитыОбъекта.Добавить("Состав.ВнешнийПользователь"); + // Проверка заполнения назначения группы + Если Назначение.Количество() = 0 Тогда + ОбщегоНазначенияКлиентСервер.ДобавитьОшибкуПользователю(Ошибки, + "Объект.Назначение", + НСтр("ru = 'Не указан вид пользователей.'"), + ""); + КонецЕсли; + ПроверенныеРеквизитыОбъекта.Добавить("Назначение"); + Для каждого ТекущаяСтрока Из Состав Цикл НомерСтроки = Состав.Индекс(ТекущаяСтрока); @@ -95,7 +101,7 @@ Если Ссылка = Справочники.ГруппыВнешнихПользователей.ВсеВнешниеПользователи Тогда - ТипОбъектовАвторизации = Неопределено; + ЗаполнитьНазначениеВсемиТипамиВнешнихПользователей(); ВсеОбъектыАвторизации = Ложь; Если НЕ Родитель.Пустая() Тогда @@ -110,18 +116,14 @@ Если Родитель = Справочники.ГруппыВнешнихПользователей.ВсеВнешниеПользователи Тогда ВызватьИсключение НСтр("ru = 'Невозможно добавить подгруппу к предопределенной группе ""Все внешние пользователи"".'"); + ИначеЕсли Родитель.ВсеОбъектыАвторизации Тогда ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Невозможно добавить подгруппу к группе ""%1"", |так как в число ее участников входят все пользователи.'"), Родитель); КонецЕсли; - Если ТипОбъектовАвторизации = Неопределено Тогда - ВсеОбъектыАвторизации = Ложь; - - ИначеЕсли ВсеОбъектыАвторизации - И ЗначениеЗаполнено(Родитель) Тогда - + Если ВсеОбъектыАвторизации И ЗначениеЗаполнено(Родитель) Тогда ВызватьИсключение НСтр("ru = 'Невозможно переместить группу, в число участников которой входят все пользователи.'"); КонецЕсли; @@ -129,47 +131,74 @@ // Проверка уникальности группы всех объектов авторизации заданного типа. Если ВсеОбъектыАвторизации Тогда + // Проверка что назначение не совпадает с группой все внешние пользователи. + ГруппаВсеВнешниеПользователи = Справочники.ГруппыВнешнихПользователей.ВсеВнешниеПользователи; + НазначениеВсеВнешниеПользователи = ОбщегоНазначения.ЗначениеРеквизитаОбъекта( + ГруппаВсеВнешниеПользователи, "Назначение").Выгрузить().ВыгрузитьКолонку("ТипПользователей"); + МассивНазначения = Назначение.ВыгрузитьКолонку("ТипПользователей"); + + Если ОбщегоНазначенияКлиентСервер.СпискиЗначенийИдентичны(НазначениеВсеВнешниеПользователи, МассивНазначения) Тогда + ВызватьИсключение + НСтр("ru = 'Невозможно создать группу, совпадающую по назначению с предопределенной группой ""Все внешние пользователи"".'"); + КонецЕсли; + Запрос = Новый Запрос; Запрос.УстановитьПараметр("Ссылка", Ссылка); - Запрос.УстановитьПараметр("ТипОбъектовАвторизации", ТипОбъектовАвторизации); + Запрос.УстановитьПараметр("ТипыПользователей", Назначение.Выгрузить()); + Запрос.Текст = "ВЫБРАТЬ + | ТипыПользователей.ТипПользователей + |ПОМЕСТИТЬ ТипыПользователей + |ИЗ + | &ТипыПользователей КАК ТипыПользователей + |; + | + |//////////////////////////////////////////////////////////////////////////////// + |ВЫБРАТЬ | ПРЕДСТАВЛЕНИЕ(ГруппыВнешнихПользователей.Ссылка) КАК СсылкаПредставление |ИЗ - | Справочник.ГруппыВнешнихПользователей КАК ГруппыВнешнихПользователей + | Справочник.ГруппыВнешнихПользователей.Назначение КАК ГруппыВнешнихПользователей |ГДЕ - | ГруппыВнешнихПользователей.Ссылка <> &Ссылка - | И ГруппыВнешнихПользователей.ТипОбъектовАвторизации = &ТипОбъектовАвторизации - | И ГруппыВнешнихПользователей.ВсеОбъектыАвторизации"; + | ИСТИНА В + | (ВЫБРАТЬ ПЕРВЫЕ 1 + | ИСТИНА + | ИЗ + | ТипыПользователей КАК ТипыПользователей + | ГДЕ + | ГруппыВнешнихПользователей.Ссылка <> &Ссылка + | И ГруппыВнешнихПользователей.Ссылка.ВсеОбъектыАвторизации + | И ТИПЗНАЧЕНИЯ(ТипыПользователей.ТипПользователей) = ТИПЗНАЧЕНИЯ(ГруппыВнешнихПользователей.ТипПользователей))"; РезультатЗапроса = Запрос.Выполнить(); Если НЕ РезультатЗапроса.Пустой() Тогда Выборка = РезультатЗапроса.Выбрать(); Выборка.Следующий(); + ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Уже существует группа ""%1"", в число участников которой входят все пользователи вида ""%2"".'"), - Выборка.СсылкаПредставление, - ТипОбъектовАвторизации.Метаданные().Синоним); - КонецЕсли; + НСтр("ru = 'Уже существует группа ""%1"", + |в число участников которой входят все пользователи указанных видов.'"), + Выборка.СсылкаПредставление ); + КонецЕсли; + КонецЕсли; // Проверка совпадения типа объектов авторизации с родителем // (допустимо, если тип у родителя не задан). Если ЗначениеЗаполнено(Родитель) Тогда - ТипОбъектовАвторизацииРодителя = ОбщегоНазначения.ЗначениеРеквизитаОбъекта( - Родитель, "ТипОбъектовАвторизации"); + ТипПользователейРодителя = ОбщегоНазначения.ЗначениеРеквизитаОбъекта( + Родитель, "Назначение").Выгрузить().ВыгрузитьКолонку("ТипПользователей"); + ТипПользователей = Назначение.ВыгрузитьКолонку("ТипПользователей"); - Если ТипОбъектовАвторизацииРодителя <> Неопределено - И ТипОбъектовАвторизацииРодителя <> ТипОбъектовАвторизации Тогда - - ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Вид участников группы должен быть ""%1"", - |как у вышестоящей группы внешних пользователей ""%2"".'"), - ТипОбъектовАвторизацииРодителя.Метаданные().Синоним, - Родитель); - КонецЕсли; + Для Каждого ТипПользователя Из ТипПользователей Цикл + Если ТипПользователейРодителя.Найти(ТипПользователя) = Неопределено Тогда + ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Вид участников группы должен быть как у вышестоящей + |группы внешних пользователей ""%1"".'"), Родитель); + КонецЕсли; + КонецЦикла; КонецЕсли; // Если группе внешних пользователей устанавливается тип участников "Все пользователи заданного типа", @@ -198,21 +227,33 @@ // Проверка, что при изменении типа объектов авторизации // нет подчиненных элементов другого типа (очистка типа допустима). - Если ТипОбъектовАвторизации <> Неопределено - И ЗначениеЗаполнено(Ссылка) Тогда + Если ЗначениеЗаполнено(Ссылка) Тогда Запрос = Новый Запрос; Запрос.УстановитьПараметр("Ссылка", Ссылка); - Запрос.УстановитьПараметр("ТипОбъектовАвторизации", ТипОбъектовАвторизации); + Запрос.УстановитьПараметр("ТипыПользователей", Назначение); Запрос.Текст = "ВЫБРАТЬ - | ПРЕДСТАВЛЕНИЕ(ГруппыВнешнихПользователей.Ссылка) КАК СсылкаПредставление, - | ГруппыВнешнихПользователей.ТипОбъектовАвторизации + | ТипыПользователей.ТипПользователей + |ПОМЕСТИТЬ ТипыПользователей |ИЗ - | Справочник.ГруппыВнешнихПользователей КАК ГруппыВнешнихПользователей + | &ТипыПользователей КАК ТипыПользователей + |; + | + |//////////////////////////////////////////////////////////////////////////////// + |ВЫБРАТЬ + | ПРЕДСТАВЛЕНИЕ(ГруппыВнешнихПользователейНазначение.Ссылка) КАК СсылкаПредставление + |ИЗ + | Справочник.ГруппыВнешнихПользователей.Назначение КАК ГруппыВнешнихПользователейНазначение |ГДЕ - | ГруппыВнешнихПользователей.Родитель = &Ссылка - | И ГруппыВнешнихПользователей.ТипОбъектовАвторизации <> &ТипОбъектовАвторизации"; + | ИСТИНА В + | (ВЫБРАТЬ ПЕРВЫЕ 1 + | ИСТИНА + | ИЗ + | ТипыПользователей КАК ТипыПользователей + | ГДЕ + | ГруппыВнешнихПользователейНазначение.Ссылка.Родитель = &Ссылка + | И ТИПЗНАЧЕНИЯ(ГруппыВнешнихПользователейНазначение.ТипПользователей) <> ТИПЗНАЧЕНИЯ(ТипыПользователей.ТипПользователей))"; РезультатЗапроса = Запрос.Выполнить(); Если НЕ РезультатЗапроса.Пустой() Тогда @@ -220,18 +261,11 @@ Выборка = РезультатЗапроса.Выбрать(); Выборка.Следующий(); - Если Выборка.ТипОбъектовАвторизации = Неопределено Тогда - ПредставлениеДругогоТипаОбъектаАвторизации = НСтр("ru = 'Любой пользователь'"); - Иначе - ПредставлениеДругогоТипаОбъектаАвторизации = - Выборка.ТипОбъектовАвторизации.Метаданные().Синоним; - КонецЕсли; ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Невозможно изменить вид участников группы ""%1"", - |так как у нее имеется подгруппа ""%2"" с другим видом участников ""%3"".'"), + |так как у нее имеется подгруппа ""%2"" с другим назначением участников.'"), Наименование, - Выборка.СсылкаПредставление, - ПредставлениеДругогоТипаОбъектаАвторизации); + Выборка.СсылкаПредставление); КонецЕсли; КонецЕсли; @@ -316,7 +350,27 @@ ПользователиСлужебный.ПослеОбновленияСоставовГруппВнешнихПользователей( УчастникиИзменений, ИзмененныеГруппы); - ПользователиСлужебный.ПослеДобавленияИзмененияПользователяИлиГруппы(Ссылка, ЭтоНовый); + ИнтеграцияСтандартныхПодсистем.ПослеДобавленияИзмененияПользователяИлиГруппы(Ссылка, ЭтоНовый); + +КонецПроцедуры + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +Процедура ЗаполнитьНазначениеВсемиТипамиВнешнихПользователей() + + Назначение.Очистить(); + + Для Каждого Тип Из Метаданные.ОпределяемыеТипы.ВнешнийПользователь.Тип.Типы() Цикл + + ОписаниеТипаСсылки = Новый ОписаниеТипов(ОбщегоНазначенияКлиентСервер.ЗначениеВМассиве(Тип)); + Значение = ОписаниеТипаСсылки.ПривестиЗначение(Неопределено); + + НоваяСтрока = Назначение.Добавить(); + НоваяСтрока.ТипПользователей = Значение; + + КонецЦикла; КонецПроцедуры diff --git a/SSL/src/Catalogs/ГруппыВнешнихПользователей/ГруппыВнешнихПользователей.mdo b/SSL/src/Catalogs/ГруппыВнешнихПользователей/ГруппыВнешнихПользователей.mdo index 225b43c64..c4f30659f 100644 --- a/SSL/src/Catalogs/ГруппыВнешнихПользователей/ГруппыВнешнихПользователей.mdo +++ b/SSL/src/Catalogs/ГруппыВнешнихПользователей/ГруппыВнешнихПользователей.mdo @@ -166,10 +166,10 @@ Use
      - ТипОбъектовАвторизации + УдалитьТипОбъектовАвторизации ru - Тип объектов авторизации + (не используется) Тип объектов авторизации В качестве типа используется пустая ссылка @@ -177,7 +177,7 @@ ru - Вид участников группы + Не используется @@ -257,7 +257,7 @@ Роли ru - Разрешенные действия (роли) + Роли Use @@ -271,7 +271,7 @@ Роль ru - Разрешенное действие (роль) + Роль CatalogRef.ИдентификаторыОбъектовМетаданных @@ -308,6 +308,44 @@ Use + + + + + + Назначение + + ru + Назначение + + ShowError + + Use + LineNumber + + Use + + + + + ТипПользователей + + ru + Тип пользователей + + + DefinedType.ВнешнийПользователь + + + ru + Пустая ссылка на допустимый тип объектов авторизации + + + + Use + Use + + ФормаЭлемента diff --git a/SSL/src/Catalogs/ГруппыДоступа/Forms/ВыборПоОтветственному/Form.form b/SSL/src/Catalogs/ГруппыДоступа/Forms/ВыборПоОтветственному/Form.form index 30530aa41..a49656b17 100644 --- a/SSL/src/Catalogs/ГруппыДоступа/Forms/ВыборПоОтветственному/Form.form +++ b/SSL/src/Catalogs/ГруппыДоступа/Forms/ВыборПоОтветственному/Form.form @@ -176,7 +176,6 @@ true Auto Auto - ExpandTopLevel true true true @@ -236,7 +235,6 @@ true true true - UseIfNecessary auto true @@ -346,7 +344,7 @@ Выбрать - Auto + DontUse Auto diff --git a/SSL/src/Catalogs/ГруппыДоступа/Forms/ВыборПоОтветственному/Module.bsl b/SSL/src/Catalogs/ГруппыДоступа/Forms/ВыборПоОтветственному/Module.bsl index de609bdf8..52ce7bcdd 100644 --- a/SSL/src/Catalogs/ГруппыДоступа/Forms/ВыборПоОтветственному/Module.bsl +++ b/SSL/src/Catalogs/ГруппыДоступа/Forms/ВыборПоОтветственному/Module.bsl @@ -61,33 +61,38 @@ | ИНАЧЕ ГруппыДоступа.Пользователь = &ПользовательГрупп | КОНЕЦ | И ВЫБОР - | КОГДА ГруппыДоступа.ТипПользователей = НЕОПРЕДЕЛЕНО - | ТОГДА ИСТИНА - | КОГДА ТИПЗНАЧЕНИЯ(ГруппыДоступа.ТипПользователей) = ТИП(Справочник.Пользователи) - | ТОГДА ВЫБОР - | КОГДА ТИПЗНАЧЕНИЯ(&ПользовательГрупп) = ТИП(Справочник.Пользователи) - | ИЛИ ТИПЗНАЧЕНИЯ(&ПользовательГрупп) = ТИП(Справочник.ГруппыПользователей) - | ТОГДА ИСТИНА - | ИНАЧЕ ЛОЖЬ - | КОНЕЦ - | КОГДА ТИПЗНАЧЕНИЯ(&ПользовательГрупп) = ТИП(Справочник.ВнешниеПользователи) - | ТОГДА ИСТИНА В + | КОГДА ТИПЗНАЧЕНИЯ(&ПользовательГрупп) = ТИП(Справочник.Пользователи) + | ИЛИ ТИПЗНАЧЕНИЯ(&ПользовательГрупп) = ТИП(Справочник.ГруппыПользователей) + | ТОГДА ИСТИНА В | (ВЫБРАТЬ ПЕРВЫЕ 1 | ИСТИНА | ИЗ + | Справочник.ПрофилиГруппДоступа.Назначение КАК ПрофилиГруппДоступаНазначение + | ГДЕ + | ПрофилиГруппДоступаНазначение.Ссылка = ГруппыДоступа.Профиль + | И ТИПЗНАЧЕНИЯ(ПрофилиГруппДоступаНазначение.ТипПользователей) = ТИП(Справочник.Пользователи)) + | КОГДА ТИПЗНАЧЕНИЯ(&ПользовательГрупп) = ТИП(Справочник.ВнешниеПользователи) + | ТОГДА ИСТИНА В + | (ВЫБРАТЬ ПЕРВЫЕ 1 + | ИСТИНА + | ИЗ + | Справочник.ПрофилиГруппДоступа.Назначение КАК ПрофилиГруппДоступаНазначение, | Справочник.ВнешниеПользователи КАК ВнешниеПользователи | ГДЕ | ВнешниеПользователи.Ссылка = &ПользовательГрупп - | И ТИПЗНАЧЕНИЯ(ВнешниеПользователи.ОбъектАвторизации) = ТИПЗНАЧЕНИЯ(ГруппыДоступа.ТипПользователей)) + | И ПрофилиГруппДоступаНазначение.Ссылка = ГруппыДоступа.Профиль + | И ТИПЗНАЧЕНИЯ(ПрофилиГруппДоступаНазначение.ТипПользователей) = ТИПЗНАЧЕНИЯ(ВнешниеПользователи.ОбъектАвторизации)) | КОГДА ТИПЗНАЧЕНИЯ(&ПользовательГрупп) = ТИП(Справочник.ГруппыВнешнихПользователей) - | ТОГДА ИСТИНА В + | ТОГДА ИСТИНА В | (ВЫБРАТЬ ПЕРВЫЕ 1 | ИСТИНА | ИЗ - | Справочник.ГруппыВнешнихПользователей КАК ГруппыВнешнихПользователей + | Справочник.ПрофилиГруппДоступа.Назначение КАК ПрофилиГруппДоступаНазначение, + | Справочник.ГруппыВнешнихПользователей.Назначение КАК ГруппыВнешнихПользователейНазначение | ГДЕ - | ГруппыВнешнихПользователей.Ссылка = &ПользовательГрупп - | И ТИПЗНАЧЕНИЯ(ГруппыВнешнихПользователей.ТипОбъектовАвторизации) = ТИПЗНАЧЕНИЯ(ГруппыДоступа.ТипПользователей)) + | ГруппыВнешнихПользователейНазначение.Ссылка = &ПользовательГрупп + | И ПрофилиГруппДоступаНазначение.Ссылка = ГруппыДоступа.Профиль + | И ТИПЗНАЧЕНИЯ(ПрофилиГруппДоступаНазначение.ТипПользователей) = ТИПЗНАЧЕНИЯ(ГруппыВнешнихПользователейНазначение.ТипПользователей)) | ИНАЧЕ ЛОЖЬ | КОНЕЦ | КОНЕЦ diff --git a/SSL/src/Catalogs/ГруппыДоступа/Forms/ФормаВыбораГруппы/Form.form b/SSL/src/Catalogs/ГруппыДоступа/Forms/ФормаВыбораГруппы/Form.form index 2427aef24..b7ec26569 100644 --- a/SSL/src/Catalogs/ГруппыДоступа/Forms/ФормаВыбораГруппы/Form.form +++ b/SSL/src/Catalogs/ГруппыДоступа/Forms/ФормаВыбораГруппы/Form.form @@ -206,7 +206,6 @@ true true true - UseIfNecessary auto true diff --git a/SSL/src/Catalogs/ГруппыДоступа/Forms/ФормаВыбораГруппы/Module.bsl b/SSL/src/Catalogs/ГруппыДоступа/Forms/ФормаВыбораГруппы/Module.bsl index 888205793..251194b06 100644 --- a/SSL/src/Catalogs/ГруппыДоступа/Forms/ФормаВыбораГруппы/Module.bsl +++ b/SSL/src/Catalogs/ГруппыДоступа/Forms/ФормаВыбораГруппы/Module.bsl @@ -11,10 +11,10 @@ ОбщегоНазначенияКлиентСервер.УстановитьЭлементОтбораДинамическогоСписка( Список, "ЭтоГруппа", Истина, , , Истина); - // Отбор не помеченных на удаление. - ОбщегоНазначенияКлиентСервер.УстановитьЭлементОтбораДинамическогоСписка( - Список, "ПометкаУдаления", Ложь, , , Истина, - РежимОтображенияЭлементаНастройкиКомпоновкиДанных.Обычный); + Если ОбщегоНазначенияПовтИсп.ЭтоАвтономноеРабочееМесто() Тогда + ТолькоПросмотр = Истина; + КонецЕсли; + КонецПроцедуры #КонецОбласти diff --git a/SSL/src/Catalogs/ГруппыДоступа/Forms/ФормаГруппы/Form.form b/SSL/src/Catalogs/ГруппыДоступа/Forms/ФормаГруппы/Form.form index e6504c3e1..a20c74957 100644 --- a/SSL/src/Catalogs/ГруппыДоступа/Forms/ФормаГруппы/Form.form +++ b/SSL/src/Catalogs/ГруппыДоступа/Forms/ФормаГруппы/Form.form @@ -116,7 +116,6 @@ true true true - UseIfNecessary auto true diff --git a/SSL/src/Catalogs/ГруппыДоступа/Forms/ФормаГруппы/Module.bsl b/SSL/src/Catalogs/ГруппыДоступа/Forms/ФормаГруппы/Module.bsl index e5d74cebc..b8c5f85f0 100644 --- a/SSL/src/Catalogs/ГруппыДоступа/Forms/ФормаГруппы/Module.bsl +++ b/SSL/src/Catalogs/ГруппыДоступа/Forms/ФормаГруппы/Module.bsl @@ -16,6 +16,10 @@ ТолькоПросмотр = Истина; КонецЕсли; + Если ОбщегоНазначенияПовтИсп.ЭтоАвтономноеРабочееМесто() Тогда + ТолькоПросмотр = Истина; + КонецЕсли; + КонецПроцедуры &НаСервере diff --git a/SSL/src/Catalogs/ГруппыДоступа/Forms/ФормаСписка/Form.form b/SSL/src/Catalogs/ГруппыДоступа/Forms/ФормаСписка/Form.form index f31f24f48..9a3e90dc0 100644 --- a/SSL/src/Catalogs/ГруппыДоступа/Forms/ФормаСписка/Form.form +++ b/SSL/src/Catalogs/ГруппыДоступа/Forms/ФормаСписка/Form.form @@ -271,6 +271,7 @@ Left true + 40 true true true @@ -311,6 +312,7 @@ Left true + 20 true true true @@ -351,6 +353,7 @@ Left true + 20 true true true @@ -657,9 +660,6 @@ true - - Items.Список.CurrentData.Описание - Left ОписаниеExtendedTooltip @@ -697,6 +697,7 @@ OnCreateAtServer ПриСозданииНаСервере + 80 DontBlock true true @@ -705,7 +706,6 @@ true true true - UseIfNecessary auto true @@ -742,7 +742,6 @@ ИНАЧЕ ГруппыДоступа.Наименование КОНЕЦ КАК Наименование, ГруппыДоступа.Профиль, - ГруппыДоступа.ТипПользователей, ГруппыДоступа.Пользователь, ГруппыДоступа.Описание, ГруппыДоступа.Ответственный diff --git a/SSL/src/Catalogs/ГруппыДоступа/Forms/ФормаСписка/Module.bsl b/SSL/src/Catalogs/ГруппыДоступа/Forms/ФормаСписка/Module.bsl index 2e66de0b3..be46042f6 100644 --- a/SSL/src/Catalogs/ГруппыДоступа/Forms/ФормаСписка/Module.bsl +++ b/SSL/src/Catalogs/ГруппыДоступа/Forms/ФормаСписка/Module.bsl @@ -66,12 +66,6 @@ Если Параметры.РежимВыбора Тогда РежимОткрытияОкна = РежимОткрытияОкнаФормы.БлокироватьОкноВладельца; - - // Отбор не помеченных на удаление. - ОбщегоНазначенияКлиентСервер.УстановитьЭлементОтбораДинамическогоСписка( - Список, "ПометкаУдаления", Ложь, , , Истина, - РежимОтображенияЭлементаНастройкиКомпоновкиДанных.Обычный); - Элементы.Список.РежимВыбора = Истина; Элементы.Список.ВыборГруппИЭлементов = Параметры.ВыборГруппИЭлементов; @@ -87,6 +81,11 @@ Элементы.ФормаВыбрать.КнопкаПоУмолчанию = Ложь; КонецЕсли; КонецЕсли; + + Если ОбщегоНазначенияПовтИсп.ЭтоАвтономноеРабочееМесто() Тогда + ТолькоПросмотр = Истина; + КонецЕсли; + КонецПроцедуры #КонецОбласти diff --git a/SSL/src/Catalogs/ГруппыДоступа/Forms/ФормаЭлемента/Form.form b/SSL/src/Catalogs/ГруппыДоступа/Forms/ФормаЭлемента/Form.form index 53065efcc..2d7133883 100644 --- a/SSL/src/Catalogs/ГруппыДоступа/Forms/ФормаЭлемента/Form.form +++ b/SSL/src/Catalogs/ГруппыДоступа/Forms/ФормаЭлемента/Form.form @@ -81,24 +81,103 @@ Normal - - Профиль - 7 + + ГруппаПрофильНазначение + 438 + + Профиль + 7 + true + true + + true + + + Объект.Профиль + + + OnChange + ПрофильПриИзменении + + + ПрофильExtendedTooltip + 338 + Label + true + true + + Left + + + + ПрофильКонтекстноеМеню + 8 + true + + InputField + Enter + true + Left + true + + true + true + true + true + true + Normal + + + + НазначениеПредставление + 440 + true + true + + true + + + НазначениеПредставление + + + НазначениеПредставлениеРасширеннаяПодсказка + 442 + Label + true + true + + Left + + + + НазначениеПредставлениеКонтекстноеМеню + 441 + true + + InputField + true + Enter + true + Left + true + + true + true + true + true + true + true + Normal + + true true true - - Объект.Профиль - - - OnChange - ПрофильПриИзменении - - ПрофильExtendedTooltip - 338 + ГруппаПрофильНазначениеРасширеннаяПодсказка + 439 Label true true @@ -106,78 +185,13 @@ Left - - ПрофильКонтекстноеМеню - 8 - true - - InputField - Enter - true - Left - true - - true - true - true - true - true - Normal - - - - ПредставлениеТипаПользователей - 281 - true - true - - true - - - ПредставлениеТипаПользователей - - - ru - Тип участников группы доступа: -- обычные пользователи или -- тип внешних пользователей - - - ПредставлениеТипаПользователейExtendedTooltip - 339 - Label - true - true - - Left - - - - ПредставлениеТипаПользователейКонтекстноеМеню - 282 - true - - InputField - Enter - true - Left - true - - - StartChoice - ПредставлениеТипаПользователейНачалоВыбора - - - Clearing - ПредставлениеТипаПользователейОчистка - - true - true - true - true - true - true - Normal + UsualGroup + + Auto + true + true + Auto + Auto @@ -1703,7 +1717,6 @@ true true true - UseIfNecessary auto true @@ -1888,26 +1901,6 @@ true - - ТипыПользователей - - <key>ru</key> - <value>Типы пользователей</value> - - 20 - - ValueList - - - true - - - true - - - - - ИспользованиеПерсональногоДоступа @@ -1942,6 +1935,7 @@ <edit> <common>true</common> </edit> + <savedData>true</savedData> <columns> <name>Пользователь</name> <title> @@ -2106,6 +2100,44 @@ <common>true</common> </edit> </attributes> + <attributes> + <name>НазначениеПредставление</name> + <title> + <key>ru</key> + <value>Назначение</value> + + 28 + + String + + + + true + + + true + + + + Назначение + + <key>ru</key> + <value>Назначение</value> + + 29 + + ValueList + + + true + + + true + + + + + Подобрать @@ -2126,7 +2158,8 @@ </handler> </action> <representation>Picture</representation> - <currentRowUse>Auto</currentRowUse> + <modifiesStoredData>true</modifiesStoredData> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <formCommands> @@ -2148,7 +2181,7 @@ <name>ПоказыватьНеиспользуемыеВидыДоступа</name> </handler> </action> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <commandInterface> diff --git a/SSL/src/Catalogs/ГруппыДоступа/Forms/ФормаЭлемента/Help/ru.html b/SSL/src/Catalogs/ГруппыДоступа/Forms/ФормаЭлемента/Help/ru.html index 48e715c35..ce304fb47 100644 --- a/SSL/src/Catalogs/ГруппыДоступа/Forms/ФормаЭлемента/Help/ru.html +++ b/SSL/src/Catalogs/ГруппыДоступа/Forms/ФормаЭлемента/Help/ru.html @@ -9,14 +9,12 @@ <ul><li>Выберите <strong>Профиль</strong>. Он определяет права (списком ролей) и возможности ограничения прав по "разрезам" (видам доступа), например, ограничения по видам <strong>Организации</strong>, <strong>Склады</strong> и т.д. Виды доступа из профиля будут добавлены в группу доступа автоматически. </li><li>Исходя из целей использования и ограничений, настраиваемых по имеющимся видам доступа, следует ввести <strong>Наименование</strong> группы доступа (<a href="Catalog.ГруппыДоступа/Help">подробнее в назначении групп доступа</a>). <ul><li>Рекомендуется называть группу доступа во множественном числе таким образом, чтобы ее имя содержало указание на используемый в ней профиль (в поле <strong>Профиль</strong>) и однозначно характеризовало определенный в ней состав настроек прав доступа. Например, на базе профиля<strong> Менеджеры по продажам</strong> могут быть введены группы доступа <strong>Менеджеры по продажам в ООО "Далекая перспектива"</strong> и <strong>Менеджеры по продажам в ЗАО "Новые технологии"</strong>.</li></ul></li><li>Группа доступа может входить в одну из <a href="Catalog.ГруппыДоступа.Form.ФормаГруппы/Help">папок</a> групп доступа. -<ul><li>В поле <strong>Группа (папка)</strong> выберите папку из <a href="Catalog.ГруппыДоступа.Form.ФормаВыбораГруппы/Help">списка</a>.  </li></ul></li><li>С помощью кнопки <img src="StdPicture.InputFieldSelect"></img> выберите <strong>Тип участников -</strong> в зависимости от назначения группы доступа участники задаются либо <strong>Произвольные участники</strong> (можно включить в группу доступа разные типы пользователей: <a href="Catalog.Пользователи/Help">пользователи</a> и <a href="Catalog.ВнешниеПользователи/Help">внешние пользователи</a>), либо заданного вида. -<ul><li>Для того чтобы ограничить выбор конкретным списком, выберите значения <strong>Обычные пользователи</strong>, <strong>Внешние пользователи</strong> ("Демо: Контрагенты"), <strong>Внешние пользователи</strong> ("Демо: Физические лица"), <strong>Внешние пользователи</strong> ("Демо: Партнеры"). -</li><li>В составе участников группы доступа могут быть также перечислены внешние пользователи и <a href="Catalog.ГруппыВнешнихПользователей/Help">группы внешних пользователей</a> (это может понадобиться для проведения анкетирования, например). -</li><li>Выбрав тип участников <strong>Произвольные участники</strong>, можно подобрать в одну группу разные типы пользователей, как обычных пользователей, так и внешних.</li></ul></li><li>На вкладке <a href="#1">Участники</a> заполните список участников группы доступа. +<ul><li>В поле <strong>Группа (папка)</strong> выберите папку из <a href="Catalog.ГруппыДоступа.Form.ФормаВыбораГруппы/Help">списка</a>.  </li></ul></li><li>Поле <strong>Назначение</strong> заполняется программой автоматически из профиля групп доступа, например, <strong>Пользователи</strong>. Это определяет состав участников группы доступа. +<ul><li>В зависимости от настроек профиля в группу доступа могут входить разные типы пользователей: <a href="Catalog.Пользователи/Help">пользователи</a> и <a href="Catalog.ГруппыПользователей/Help">группы пользователей</a>. В составе участников группы доступа могут быть также перечислены <a href="Catalog.ВнешниеПользователи/Help">внешние пользователи</a> и <a href="Catalog.ГруппыВнешнихПользователей/Help">группы внешних пользователей</a> (это может понадобиться для проведения анкетирования, например). </li></ul></li><li>На вкладке <a href="#1">Участники</a> заполните список участников группы доступа, укажите ответственного за группу доступа. </li><li>На вкладке <a href="#2">Ограничения доступа</a> необходимо произвести дополнительные настройки прав доступа. </li><li>На вкладке <strong>Описание</strong> можно ввести подробную информацию о группе доступа.</li></ul><h3><a name="#1">Участники</a></h3> <ul><li> -<div>В зависимости от выбранного <strong>Типа участников</strong> на этой вкладке для выбора участников группы доступа будут доступны соответствующие списки пользователей. </div> +<div>В зависимости от указанного в поле <strong>Назначение</strong> состава группы доступа на этой вкладке будут доступны соответствующие списки пользователей для выбора участников группы доступа. </div> <ul><li> <div>Для добавления сразу нескольких участников нажмите <strong>Подобрать</strong>, для добавления одного участника нажмите <strong>Еще - Добавить</strong>. Выберите из предлагаемого списка нужных участников группы доступа. </div> </li><li> diff --git a/SSL/src/Catalogs/ГруппыДоступа/Forms/ФормаЭлемента/Module.bsl b/SSL/src/Catalogs/ГруппыДоступа/Forms/ФормаЭлемента/Module.bsl index 4055eddd8..48b7efee8 100644 --- a/SSL/src/Catalogs/ГруппыДоступа/Forms/ФормаЭлемента/Module.bsl +++ b/SSL/src/Catalogs/ГруппыДоступа/Forms/ФормаЭлемента/Module.bsl @@ -17,12 +17,8 @@ "Просмотр", Метаданные.Справочники.ВнешниеПользователи); СписокТиповПользователей.Добавить(Тип("СправочникСсылка.Пользователи")); - СписокТиповПользователей.Добавить(Тип("СправочникСсылка.ВнешниеПользователи")); - // Заполнение списка выбора типа пользователей. - ЗаполнитьСписокТиповПользователей(); - // Установка постоянной доступности свойств. // Определение необходимости настройки ограничений доступа. @@ -35,10 +31,11 @@ Элементы.КонтекстноеМенюПользователиПодобрать.Доступность = НЕ ТолькоПросмотр; Если ОбщегоНазначенияПовтИсп.РазделениеВключено() - И Объект.Ссылка = Справочники.ГруппыДоступа.Администраторы Тогда + И Объект.Ссылка = Справочники.ГруппыДоступа.Администраторы + И ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаВМоделиСервиса.ПользователиВМоделиСервиса") Тогда - ДействияСПользователемСервиса = Неопределено; - УправлениеДоступомСлужебный.ПриПолученииДействийСПользователемСервиса(ДействияСПользователемСервиса); + МодульПользователиСлужебныйВМоделиСервиса = ОбщегоНазначения.ОбщийМодуль("ПользователиСлужебныйВМоделиСервиса"); + ДействияСПользователемСервиса = МодульПользователиСлужебныйВМоделиСервиса.ПолучитьДействияСПользователемСервиса(); Если НЕ ДействияСПользователемСервиса.ИзменениеАдминистративногоДоступа Тогда ВызватьИсключение @@ -46,12 +43,20 @@ КонецЕсли; КонецЕсли; + ОбновитьНазначение(); + ВыполненаПроцедураПриСозданииНаСервере = Истина; Если ТекущийВариантИнтерфейсаКлиентскогоПриложения() = ВариантИнтерфейсаКлиентскогоПриложения.Версия8_2 Тогда Элементы.ПользователиДобавить.ТолькоВоВсехДействиях = Ложь; КонецЕсли; + Если ОбщегоНазначенияПовтИсп.ЭтоАвтономноеРабочееМесто() + И Не Объект.Ссылка = Справочники.ГруппыДоступа.Администраторы Тогда + + ТолькоПросмотр = Истина; + КонецЕсли; + КонецПроцедуры &НаКлиенте @@ -170,6 +175,7 @@ КонецЕсли; Если ТекущийОбъект.Ссылка = Справочники.ГруппыДоступа.Администраторы Тогда + Объект.Родитель = Неопределено; Объект.Ответственный = Неопределено; КонецЕсли; @@ -227,35 +233,87 @@ КоличествоОшибок = ?(Ошибки = Неопределено, 0, Ошибки.Количество()); // Подготовка данных для проверки соответствия типов объектов авторизации. - Если Объект.ТипПользователей <> Неопределено Тогда - Запрос = Новый Запрос; - Запрос.УстановитьПараметр( - "Пользователи", ДеревоПользователейСтроки.ВыгрузитьКолонку("Пользователь")); - Запрос.Текст = - "ВЫБРАТЬ - | ВнешниеПользователи.Ссылка КАК Пользователь, - | ВнешниеПользователи.ОбъектАвторизации КАК ТипОбъектовАвторизации - |ИЗ - | Справочник.ВнешниеПользователи КАК ВнешниеПользователи - |ГДЕ - | ВнешниеПользователи.Ссылка В(&Пользователи) - | - |ОБЪЕДИНИТЬ ВСЕ - | - |ВЫБРАТЬ - | ГруппыВнешнихПользователей.Ссылка, - | ГруппыВнешнихПользователей.ТипОбъектовАвторизации - |ИЗ - | Справочник.ГруппыВнешнихПользователей КАК ГруппыВнешнихПользователей - |ГДЕ - | ГруппыВнешнихПользователей.Ссылка В(&Пользователи)"; - УстановитьПривилегированныйРежим(Истина); - ТипыОбъектовАвторизацииПользователей = Запрос.Выполнить().Выгрузить(); - УстановитьПривилегированныйРежим(Ложь); - ТипыОбъектовАвторизацииПользователей.Индексы.Добавить("Пользователь"); - КонецЕсли; + Запрос = Новый Запрос; + Запрос.УстановитьПараметр("Пользователи", ДеревоПользователейСтроки.ВыгрузитьКолонку("Пользователь")); + Запрос.УстановитьПараметр("Родитель", Объект.Профиль); + Запрос.Текст = + "ВЫБРАТЬ + | ПрофилиГруппДоступаНазначение.ТипПользователей + |ПОМЕСТИТЬ ПрофилиГруппДоступаНазначение + |ИЗ + | Справочник.ПрофилиГруппДоступа.Назначение КАК ПрофилиГруппДоступаНазначение + |ГДЕ + | ПрофилиГруппДоступаНазначение.Ссылка = &Родитель + |; + | + |//////////////////////////////////////////////////////////////////////////////// + |ВЫБРАТЬ + | ВнешниеПользователи.Ссылка + |ИЗ + | Справочник.ВнешниеПользователи КАК ВнешниеПользователи + |ГДЕ + | НЕ ЛОЖЬ В + | (ВЫБРАТЬ ПЕРВЫЕ 1 + | ЛОЖЬ + | ИЗ + | ПрофилиГруппДоступаНазначение КАК ПрофилиГруппДоступаНазначение + | ГДЕ + | ТИПЗНАЧЕНИЯ(ПрофилиГруппДоступаНазначение.ТипПользователей) = ТИПЗНАЧЕНИЯ(ВнешниеПользователи.ОбъектАвторизации)) + | И ВнешниеПользователи.Ссылка В(&Пользователи) + | + |ОБЪЕДИНИТЬ ВСЕ + | + |ВЫБРАТЬ + | ГруппыВнешнихПользователейНазначение.Ссылка + |ИЗ + | Справочник.ГруппыВнешнихПользователей.Назначение КАК ГруппыВнешнихПользователейНазначение + |ГДЕ + | НЕ ЛОЖЬ В + | (ВЫБРАТЬ ПЕРВЫЕ 1 + | ЛОЖЬ + | ИЗ + | ПрофилиГруппДоступаНазначение КАК ПрофилиГруппДоступаНазначение + | ГДЕ + | ТИПЗНАЧЕНИЯ(ПрофилиГруппДоступаНазначение.ТипПользователей) = ТИПЗНАЧЕНИЯ(ГруппыВнешнихПользователейНазначение.ТипПользователей)) + | И ГруппыВнешнихПользователейНазначение.Ссылка В(&Пользователи) + | + |ОБЪЕДИНИТЬ ВСЕ + | + |ВЫБРАТЬ + | Пользователи.Ссылка + |ИЗ + | Справочник.Пользователи КАК Пользователи + |ГДЕ + | НЕ ЛОЖЬ В + | (ВЫБРАТЬ ПЕРВЫЕ 1 + | ЛОЖЬ + | ИЗ + | ПрофилиГруппДоступаНазначение КАК ПрофилиГруппДоступаНазначение + | ГДЕ + | ТИПЗНАЧЕНИЯ(ПрофилиГруппДоступаНазначение.ТипПользователей) = ТИП(Справочник.Пользователи)) + | И Пользователи.Ссылка В(&Пользователи) + | + |ОБЪЕДИНИТЬ ВСЕ + | + |ВЫБРАТЬ + | ГруппыПользователей.Ссылка + |ИЗ + | Справочник.ГруппыПользователей КАК ГруппыПользователей + |ГДЕ + | НЕ ЛОЖЬ В + | (ВЫБРАТЬ ПЕРВЫЕ 1 + | ЛОЖЬ + | ИЗ + | ПрофилиГруппДоступаНазначение КАК ПрофилиГруппДоступаНазначение + | ГДЕ + | ТИПЗНАЧЕНИЯ(ПрофилиГруппДоступаНазначение.ТипПользователей) = ТИП(Справочник.Пользователи)) + | И ГруппыПользователей.Ссылка В(&Пользователи)"; - Для каждого ТекущаяСтрока Из ДеревоПользователейСтроки Цикл + УстановитьПривилегированныйРежим(Истина); + НедопустимыеПользователи = Запрос.Выполнить().Выгрузить().ВыгрузитьКолонку("Ссылка"); + УстановитьПривилегированныйРежим(Ложь); + + Для Каждого ТекущаяСтрока Из ДеревоПользователейСтроки Цикл НомерСтроки = ДеревоПользователейСтроки.Индекс(ТекущаяСтрока); Участник = ТекущаяСтрока.Пользователь; @@ -324,58 +382,29 @@ УточнитьСообщение(ТекстДляНесколькихОшибок, Участник)); КонецЕсли; - Если Объект.ТипПользователей <> Неопределено Тогда - // Проверка совпадения типов объектов авторизации у внешних пользователей и - // групп внешних пользователей с типом пользователей в группе доступа. - ТекстДляОднойОшибки = ""; + Если НедопустимыеПользователи.Найти(ТекущаяСтрока.Пользователь) <> Неопределено Тогда Если ТипЗнч(ТекущаяСтрока.Пользователь) = Тип("СправочникСсылка.Пользователи") Тогда - - Если ТипЗнч(Объект.ТипПользователей) <> Тип("СправочникСсылка.Пользователи") Тогда - ТекстДляОднойОшибки = НСтр("ru = 'Пользователь ""%2"" недопустим для указанного типа участников.'"); - ТекстДляНесколькихОшибок = НСтр("ru = 'Пользователь ""%2"" в строке %1 недопустим для указанного типа участников.'"); - КонецЕсли; - + ТекстДляОднойОшибки = НСтр("ru = 'Пользователь ""%2"" недопустим для указанного типа участников.'"); + ТекстДляНесколькихОшибок = НСтр("ru = 'Пользователь ""%2"" в строке %1 недопустим для указанного типа участников.'"); ИначеЕсли ТипЗнч(ТекущаяСтрока.Пользователь) = Тип("СправочникСсылка.ГруппыПользователей") Тогда - - Если ТипЗнч(Объект.ТипПользователей) <> Тип("СправочникСсылка.Пользователи") Тогда - ТекстДляОднойОшибки = НСтр("ru = 'Группа пользователей ""%2"" недопустима для указанного типа участников.'"); - ТекстДляНесколькихОшибок = НСтр("ru = 'Группа пользователей ""%2"" в строке %1 недопустима для указанного типа участников.'"); - КонецЕсли; - Иначе - ОписаниеТипаОбъектаАвторизации = ТипыОбъектовАвторизацииПользователей.Найти( - ТекущаяСтрока.Пользователь, "Пользователь"); - - Если ТипЗнч(ТекущаяСтрока.Пользователь) = Тип("СправочникСсылка.ВнешниеПользователи") Тогда - - Если ОписаниеТипаОбъектаАвторизации = Неопределено - ИЛИ ТипЗнч(Объект.ТипПользователей) <> ТипЗнч(ОписаниеТипаОбъектаАвторизации.ТипОбъектовАвторизации) Тогда - - ТекстДляОднойОшибки = НСтр("ru = 'Внешний пользователь ""%2"" недопустим для указанного типа участников.'"); - ТекстДляНесколькихОшибок = НСтр("ru = 'Внешний пользователь ""%2"" в строке %1 недопустим для указанного типа участников.'"); - КонецЕсли; - - Иначе // Группа внешних пользователей. - - Если ОписаниеТипаОбъектаАвторизации = Неопределено - ИЛИ ТипЗнч(Объект.ТипПользователей) = Тип("СправочникСсылка.Пользователи") - ИЛИ ОписаниеТипаОбъектаАвторизации.ТипОбъектовАвторизации <> Неопределено - И ТипЗнч(Объект.ТипПользователей) <> ТипЗнч(ОписаниеТипаОбъектаАвторизации.ТипОбъектовАвторизации) Тогда - - ТекстДляОднойОшибки = НСтр("ru = 'Группа внешних пользователей ""%2"" недопустима для указанного типа участников.'"); - ТекстДляНесколькихОшибок = НСтр("ru = 'Группа внешних пользователей ""%2"" в строке %1 недопустима для указанного типа участников.'"); - КонецЕсли; - КонецЕсли; + ТекстДляОднойОшибки = НСтр("ru = 'Группа пользователей ""%2"" недопустима для указанного типа участников.'"); + ТекстДляНесколькихОшибок = НСтр("ru = 'Группа пользователей ""%2"" в строке %1 недопустима для указанного типа участников.'"); + ИначеЕсли ТипЗнч(ТекущаяСтрока.Пользователь) = Тип("СправочникСсылка.ВнешниеПользователи") Тогда + ТекстДляОднойОшибки = НСтр("ru = 'Внешний пользователь ""%2"" недопустим для указанного типа участников.'"); + ТекстДляНесколькихОшибок = НСтр("ru = 'Внешний пользователь ""%2"" в строке %1 недопустим для указанного типа участников.'"); + Иначе // Группа внешних пользователей. + ТекстДляОднойОшибки = НСтр("ru = 'Группа внешних пользователей ""%2"" недопустима для указанного типа участников.'"); + ТекстДляНесколькихОшибок = НСтр("ru = 'Группа внешних пользователей ""%2"" в строке %1 недопустима для указанного типа участников.'"); КонецЕсли; - Если ЗначениеЗаполнено(ТекстДляОднойОшибки) Тогда - ОбщегоНазначенияКлиентСервер.ДобавитьОшибкуПользователю(Ошибки, - "ПользователиГруппы[%1].Пользователь", - УточнитьСообщение(ТекстДляОднойОшибки, Участник), - "ПользователиГруппы", - НомерСтроки, - УточнитьСообщение(ТекстДляНесколькихОшибок, Участник)); - КонецЕсли; + ОбщегоНазначенияКлиентСервер.ДобавитьОшибкуПользователю(Ошибки, + "ПользователиГруппы[%1].Пользователь", + УточнитьСообщение(ТекстДляОднойОшибки, Участник), + "ПользователиГруппы", + НомерСтроки, + УточнитьСообщение(ТекстДляНесколькихОшибок, Участник)); + КонецЕсли; КонецЦикла; @@ -428,26 +457,6 @@ КонецПроцедуры -&НаКлиенте -Процедура ПредставлениеТипаПользователейНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка) - - СтандартнаяОбработка = Ложь; - - ПоказатьВыборИзСписка( - Новый ОписаниеОповещения("ПредставлениеТипаПользователейНачалоВыбораЗавершение", ЭтотОбъект), - ТипыПользователей, - Элемент, - ТипыПользователей.НайтиПоЗначению(Объект.ТипПользователей)); - -КонецПроцедуры - -&НаКлиенте -Процедура ПредставлениеТипаПользователейОчистка(Элемент, СтандартнаяОбработка) - - СтандартнаяОбработка = Ложь; - -КонецПроцедуры - &НаКлиенте Процедура ПользовательВладелецНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка) @@ -871,36 +880,14 @@ ПарольПользователяСервиса = НовыйПарольПользователяСервиса; Попытка - Записать(ПараметрыЗаписи); - Исключение - ПарольПользователяСервиса = Неопределено; ВызватьИсключение; - КонецПопытки; КонецПроцедуры -// Продолжение обработчика события ПредставлениеТипаПользователейНачалоВыбора. -&НаКлиенте -Процедура ПредставлениеТипаПользователейНачалоВыбораЗавершение(ВыбранныйЭлемент, Неопределен) Экспорт - - Если ВыбранныйЭлемент <> Неопределено - И Объект.ТипПользователей <> ВыбранныйЭлемент.Значение Тогда - - Модифицированность = Истина; - Объект.ТипПользователей = ВыбранныйЭлемент.Значение; - ПредставлениеТипаПользователей = ВыбранныйЭлемент.Представление; - - Если Объект.ТипПользователей <> Неопределено Тогда - УдалитьНеТипичныхПользователей(); - КонецЕсли; - КонецЕсли; - -КонецПроцедуры - &НаКлиенте Процедура ОбработчикОжиданияПрофильПриИзменении() @@ -911,13 +898,22 @@ &НаСервере Процедура НачальнаяНастройкаПриЧтенииИСоздании(ТекущийОбъект) - Если ТекущийОбъект.Ссылка <> Справочники.ГруппыДоступа.Администраторы Тогда + Если ТекущийОбъект.Ссылка = Справочники.ГруппыДоступа.Администраторы Тогда + Элементы.Наименование.ТолькоПросмотр = Истина; + Элементы.Родитель.Видимость = Ложь; + Элементы.Профиль.ТолькоПросмотр = Истина; + Элементы.СвойстваПерсональнойГруппы.Видимость = Ложь; + Элементы.Ответственный.Видимость = Ложь; + Элементы.ОтветственныйЗаПерсональнуюГруппу.Видимость = Ложь; + Элементы.Описание.ТолькоПросмотр = Истина; - // Подготовка к режиму персональной группы доступа. + Если НЕ УправлениеДоступом.ЕстьРоль("ПолныеПрава") Тогда + ТолькоПросмотр = Истина; + КонецЕсли; + Иначе Если ЗначениеЗаполнено(ТекущийОбъект.Пользователь) Тогда - + // Подготовка к режиму персональной группы доступа. АвтоЗаголовок = Ложь; - Заголовок = ТекущийОбъект.Наименование + ": " @@ -938,7 +934,6 @@ Элементы.Родитель.ТолькоПросмотр = ПользовательЗаполнен; Элементы.Профиль.ТолькоПросмотр = ПользовательЗаполнен; Элементы.СвойстваПерсональнойГруппы.Видимость = ПользовательЗаполнен; - Элементы.ПредставлениеТипаПользователей.Видимость = НЕ ПользовательЗаполнен; Элементы.ПользователиГруппы.Видимость = НЕ ПользовательЗаполнен; Элементы.ОтветственныйЗаПерсональнуюГруппу.Видимость = ПользовательЗаполнен; @@ -952,12 +947,6 @@ ПоложениеЗаголовкаЭлементаФормы.Верх, ПоложениеЗаголовкаЭлементаФормы.Нет); - Элементы.ПредставлениеТипаПользователей.Видимость - = НЕ ПользовательЗаполнен - И ( ВнешниеПользователи.ИспользоватьВнешнихПользователей() - ИЛИ Объект.ТипПользователей <> Неопределено - И ТипЗнч(Объект.ТипПользователей) <> Тип("СправочникСсылка.Пользователи")); - Элементы.ПользовательВладелец.ТолькоПросмотр = УправлениеДоступомСлужебный.УпрощенныйИнтерфейсНастройкиПравДоступа(); @@ -966,24 +955,11 @@ Элементы.Наименование.ТолькоПросмотр = Истина; Элементы.Родитель.ТолькоПросмотр = Истина; Элементы.Профиль.ТолькоПросмотр = Истина; - Элементы.ПредставлениеТипаПользователей.ТолькоПросмотр = Истина; Элементы.Доступ.ТолькоПросмотр = Истина; Элементы.Ответственный.ТолькоПросмотр = Истина; Элементы.ОтветственныйЗаПерсональнуюГруппу.ТолькоПросмотр = Истина; Элементы.Описание.ТолькоПросмотр = Истина; КонецЕсли; - Иначе - Элементы.Наименование.ТолькоПросмотр = Истина; - Элементы.Профиль.ТолькоПросмотр = Истина; - Элементы.СвойстваПерсональнойГруппы.Видимость = Ложь; - Элементы.ПредставлениеТипаПользователей.ТолькоПросмотр = Истина; - Элементы.Ответственный.ТолькоПросмотр = Истина; - Элементы.ОтветственныйЗаПерсональнуюГруппу.Видимость = Ложь; - Элементы.Описание.ТолькоПросмотр = Истина; - - Если НЕ УправлениеДоступом.ЕстьРоль("ПолныеПрава") Тогда - ТолькоПросмотр = Истина; - КонецЕсли; КонецЕсли; ОбновитьСоставВидовДоступа(Истина); @@ -1001,126 +977,78 @@ &НаСервере Процедура ПрофильПриИзмененииНаСервере() + ОбновитьНазначение(); + УдалитьНеТипичныхПользователей(); ОбновитьСоставВидовДоступа(); УправлениеДоступомСлужебныйКлиентСервер.ЗаполнитьСвойстваВидовДоступаВФорме(ЭтотОбъект); КонецПроцедуры &НаСервере -Процедура ЗаполнитьСписокТиповПользователей() +Процедура ОбновитьНазначение() - ТипыПользователей.Добавить( - Неопределено, - НСтр("ru = 'Произвольные участники'")); - - ТипыПользователей.Добавить( - Справочники.Пользователи.ПустаяСсылка(), - НСтр("ru = 'Обычные пользователи'")); - - Если ИспользоватьВнешнихПользователей Тогда - - ТипыСсылокОбъектовАвторизации = - Метаданные.Справочники.ВнешниеПользователи.Реквизиты.ОбъектАвторизации.Тип.Типы(); - - Для каждого ТипСсылкиОбъектаАвторизации Из ТипыСсылокОбъектовАвторизации Цикл - - МетаданныеТипа = Метаданные.НайтиПоТипу(ТипСсылкиОбъектаАвторизации); - - МассивТипов = Новый Массив; - МассивТипов.Добавить(ТипСсылкиОбъектаАвторизации); - ОписаниеТипаСсылки = Новый ОписаниеТипов(МассивТипов); - - ТипыПользователей.Добавить( - ОписаниеТипаСсылки.ПривестиЗначение(Неопределено), - СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Внешние пользователи (%1)'"), - МетаданныеТипа.Синоним)); - КонецЦикла; - КонецЕсли; - - НайденныйЭлемент = ТипыПользователей.НайтиПоЗначению(Объект.ТипПользователей); - - ПредставлениеТипаПользователей = - ?(НайденныйЭлемент = Неопределено, - СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Неизвестный тип ""%1""'"), - Строка(ТипЗнч(Объект.ТипПользователей))), - НайденныйЭлемент.Представление); + Назначение.Очистить(); + НазначениеПредставление = ""; + Для Каждого Участник Из Объект.Профиль.Назначение Цикл + Если Участник.ТипПользователей <> Неопределено Тогда + Назначение.Добавить(Участник.ТипПользователей); + ПредставлениеТипа = Участник.ТипПользователей.Метаданные().Синоним; + НазначениеПредставление = ?(ПустаяСтрока(НазначениеПредставление), + ПредставлениеТипа, НазначениеПредставление + ", " + ПредставлениеТипа); + КонецЕсли; + КонецЦикла; КонецПроцедуры &НаСервере Процедура УдалитьНеТипичныхПользователей() - Если Объект.ТипПользователей = Неопределено Тогда - Возврат; - КонецЕсли; + МассивТипов = Новый Массив; + Для Каждого Элемент Из Назначение Цикл + МассивТипов.Добавить(ТипЗнч(Элемент.Значение)); + КонецЦикла; - Если ТипЗнч(Объект.ТипПользователей) = Тип("СправочникСсылка.Пользователи") Тогда + ДеревоПользователей = ПользователиГруппы.ПолучитьЭлементы(); - Индекс = Объект.Пользователи.Количество()-1; - Пока Индекс >= 0 Цикл + Индекс = ДеревоПользователей.Количество() - 1; + + Пока Индекс >= 0 Цикл + + СтрокаДерева = ДеревоПользователей.Получить(Индекс); + УдалитьСтроку = Ложь; + + Если (ТипЗнч(СтрокаДерева.Пользователь) = Тип("СправочникСсылка.Пользователи") + Или ТипЗнч(СтрокаДерева.Пользователь) = Тип("СправочникСсылка.ГруппыПользователей")) + И МассивТипов.Найти(Тип("СправочникСсылка.Пользователи")) = Неопределено Тогда - Если ТипЗнч(Объект.Пользователи[Индекс].Пользователь) - <> Тип("СправочникСсылка.Пользователи") - И ТипЗнч(Объект.Пользователи[Индекс].Пользователь) - <> Тип("СправочникСсылка.ГруппыПользователей") Тогда + УдалитьСтроку = Истина; + + ИначеЕсли ТипЗнч(СтрокаДерева.Пользователь) = Тип("СправочникСсылка.ВнешниеПользователи") + И МассивТипов.Найти(ТипЗнч(СтрокаДерева.Пользователь.ОбъектАвторизации)) = Неопределено Тогда + + ДеревоПользователей.Удалить(Индекс); + + ИначеЕсли ТипЗнч(СтрокаДерева.Пользователь) = Тип("СправочникСсылка.ГруппыВнешнихПользователей") Тогда + + УдалитьГруппу = Ложь; + Для Каждого УчастникГруппы Из СтрокаДерева.ПолучитьЭлементы() Цикл - Объект.Пользователи.Удалить(Индекс); - КонецЕсли; - - Индекс = Индекс - 1; - КонецЦикла; - Иначе - Индекс = Объект.Пользователи.Количество()-1; - Пока Индекс >= 0 Цикл - - Если ТипЗнч(Объект.Пользователи[Индекс].Пользователь) - <> Тип("СправочникСсылка.ВнешниеПользователи") - И ТипЗнч(Объект.Пользователи[Индекс].Пользователь) - <> Тип("СправочникСсылка.ГруппыВнешнихПользователей") Тогда + Если МассивТипов.Найти(ТипЗнч(УчастникГруппы.Пользователь.ОбъектАвторизации)) = Неопределено Тогда + УдалитьСтроку = Истина; + Прервать; + КонецЕсли; - Объект.Пользователи.Удалить(Индекс); - КонецЕсли; - Индекс = Индекс - 1; - КонецЦикла; - - Запрос = Новый Запрос( - "ВЫБРАТЬ - | ВнешниеПользователи.Ссылка - |ИЗ - | Справочник.ВнешниеПользователи КАК ВнешниеПользователи - |ГДЕ - | ТИПЗНАЧЕНИЯ(ВнешниеПользователи.ОбъектАвторизации) <> &ТипВнешнихПользователей - | И ВнешниеПользователи.Ссылка В(&ВыбранныеВнешниеПользователиИГруппы) - | - |ОБЪЕДИНИТЬ ВСЕ - | - |ВЫБРАТЬ - | ГруппыВнешнихПользователей.Ссылка - |ИЗ - | Справочник.ГруппыВнешнихПользователей КАК ГруппыВнешнихПользователей - |ГДЕ - | ГруппыВнешнихПользователей.ТипОбъектовАвторизации <> НЕОПРЕДЕЛЕНО - | И ТИПЗНАЧЕНИЯ(ГруппыВнешнихПользователей.ТипОбъектовАвторизации) <> &ТипВнешнихПользователей - | И ГруппыВнешнихПользователей.Ссылка В(&ВыбранныеВнешниеПользователиИГруппы)"); - - Запрос.УстановитьПараметр( - "ВыбранныеВнешниеПользователиИГруппы", - Объект.Пользователи.Выгрузить().ВыгрузитьКолонку("Пользователь")); - - Запрос.УстановитьПараметр("ТипВнешнихПользователей", ТипЗнч(Объект.ТипПользователей)); - - Выборка = Запрос.Выполнить().Выбрать(); - - Пока Выборка.Следующий() Цикл - Отбор = Новый Структура("Пользователь", Выборка.Ссылка); - НайденныеСтроки = Объект.Пользователи.НайтиСтроки(Отбор); - Для каждого НайденнаяСтрока Из НайденныеСтроки Цикл - Объект.Пользователи.Удалить(Объект.Пользователи.Индекс(НайденнаяСтрока)); КонецЦикла; - КонецЦикла; - КонецЕсли; + + КонецЕсли; + + Если УдалитьСтроку Тогда + ДеревоПользователей.Удалить(Индекс); + КонецЕсли; + + Индекс = Индекс - 1; + + КонецЦикла; КонецПроцедуры @@ -1247,26 +1175,38 @@ Возврат; КонецЕсли; - Если Объект.ТипПользователей <> Неопределено Тогда - Если ТипЗнч(Объект.ТипПользователей) <> Тип("СправочникСсылка.Пользователи") Тогда + Если Назначение.Количество() <> 0 Тогда + + Если Назначение.НайтиПоЗначению(ПредопределенноеЗначение("Справочник.Пользователи.ПустаяСсылка")) <> Неопределено Тогда + + Если Назначение.Количество() <> 1 Тогда + + Если ИспользоватьВнешнихПользователей Тогда + + СписокТиповПользователей.ПоказатьВыборЭлемента( + Новый ОписаниеОповещения( + "ПоказатьВыборТипаПользователиИлиВнешниеПользователиЗавершение", + ЭтотОбъект, + ОбработкаПродолжения), + НСтр("ru = 'Выбор типа данных'"), + СписокТиповПользователей[0]); + Иначе + ВыполнитьОбработкуОповещения(ОбработкаПродолжения, ВыборИПодборВнешнихПользователей); + КонецЕсли; + + Возврат; + + КонецЕсли; + + Иначе // только для внешних пользователей + ВыборИПодборВнешнихПользователей = Истина; + КонецЕсли; - ВыполнитьОбработкуОповещения(ОбработкаПродолжения, ВыборИПодборВнешнихПользователей); - Возврат; + КонецЕсли; - Если ИспользоватьВнешнихПользователей Тогда - - СписокТиповПользователей.ПоказатьВыборЭлемента( - Новый ОписаниеОповещения( - "ПоказатьВыборТипаПользователиИлиВнешниеПользователиЗавершение", - ЭтотОбъект, - ОбработкаПродолжения), - НСтр("ru = 'Выбор типа данных'"), - СписокТиповПользователей[0]); - Иначе - ВыполнитьОбработкуОповещения(ОбработкаПродолжения, ВыборИПодборВнешнихПользователей); - КонецЕсли; + ВыполнитьОбработкуОповещения(ОбработкаПродолжения, ВыборИПодборВнешнихПользователей); КонецПроцедуры @@ -1328,7 +1268,12 @@ Неопределено, Элементы.Пользователи.ТекущиеДанные.Пользователь)); - Если Объект.Ссылка <> ПредопределенноеЗначение("Справочник.ГруппыДоступа.Администраторы") Тогда + Если Подобрать Тогда + ПараметрыФормы.Вставить("ЗакрыватьПриВыборе", Ложь); + ПараметрыФормы.Вставить("МножественныйВыбор", Истина); + ПараметрыФормы.Вставить("РасширенныйПодбор", Истина); + ПараметрыФормы.Вставить("ПараметрыРасширеннойФормыПодбора", ПараметрыРасширеннойФормыПодбора()); + ИначеЕсли Объект.Ссылка <> ПредопределенноеЗначение("Справочник.ГруппыДоступа.Администраторы") Тогда Если ВыборИПодборВнешнихПользователей Тогда ПараметрыФормы.Вставить("ВыборГруппВнешнихПользователей", Истина); Иначе @@ -1336,18 +1281,10 @@ КонецЕсли; КонецЕсли; - Если Подобрать Тогда - ПараметрыФормы.Вставить("ЗакрыватьПриВыборе", Ложь); - ПараметрыФормы.Вставить("МножественныйВыбор", Истина); - ПараметрыФормы.Вставить("РасширенныйПодбор", Истина); - ПараметрыФормы.Вставить("ПараметрыРасширеннойФормыПодбора", ВыбранныеУчастникиГруппыДоступа()); - КонецЕсли; - Если ВыборИПодборВнешнихПользователей Тогда - - Если Объект.ТипПользователей <> Неопределено Тогда - ПараметрыФормы.Вставить("ТипОбъектовАвторизации", Объект.ТипПользователей); - КонецЕсли; + + ПараметрыФормы.Вставить("Назначение", Назначение.ВыгрузитьЗначения()); + Если СправочникВнешниеПользователиДоступен Тогда ОткрытьФорму("Справочник.ВнешниеПользователи.ФормаВыбора", ПараметрыФормы, Элементы.Пользователи); Иначе @@ -1360,7 +1297,7 @@ КонецПроцедуры &НаСервере -Функция ВыбранныеУчастникиГруппыДоступа() +Функция ПараметрыРасширеннойФормыПодбора() ЭлементыКоллекции = ПользователиГруппы.ПолучитьЭлементы(); @@ -1377,8 +1314,13 @@ КонецЦикла; ЗаголовокФормыПодбора = НСтр("ru = 'Подбор участников группы доступа'"); - ПараметрыРасширеннойФормыПодбора = Новый Структура("ЗаголовокФормыПодбора, ВыбранныеПользователи", - ЗаголовокФормыПодбора, ВыбранныеПользователи); + ПараметрыРасширеннойФормыПодбора = Новый Структура; + ПараметрыРасширеннойФормыПодбора.Вставить("ЗаголовокФормыПодбора", ЗаголовокФормыПодбора); + ПараметрыРасширеннойФормыПодбора.Вставить("ВыбранныеПользователи", ВыбранныеПользователи); + Если Объект.Ссылка = ПредопределенноеЗначение("Справочник.ГруппыДоступа.Администраторы") Тогда + ПараметрыРасширеннойФормыПодбора.Вставить("ПодборГруппНевозможен"); + КонецЕсли; + АдресХранилища = ПоместитьВоВременноеХранилище(ПараметрыРасширеннойФормыПодбора); Возврат АдресХранилища; @@ -1423,7 +1365,8 @@ |ИЗ | РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей |ГДЕ - | СоставыГруппПользователей.ГруппаПользователей В(&УчастникиГруппыПользователей)"; + | СоставыГруппПользователей.ГруппаПользователей В(&УчастникиГруппыПользователей) + | И СоставыГруппПользователей.Пользователь.Недействителен <> ИСТИНА"; ПользователиГрупп = Запрос.Выполнить().Выгрузить(); ПользователиГрупп.Индексы.Добавить("ГруппаПользователей"); @@ -1499,7 +1442,6 @@ | ГруппыДоступа.Наименование, | ГруппыДоступа.Профиль, | ГруппыДоступа.Ответственный, - | ГруппыДоступа.ТипПользователей, | ГруппыДоступа.Пользователь, | ГруппыДоступа.Описание |ИЗ diff --git a/SSL/src/Catalogs/ГруппыДоступа/ObjectModule.bsl b/SSL/src/Catalogs/ГруппыДоступа/ObjectModule.bsl index b116169fd..ca8ac0e9d 100644 --- a/SSL/src/Catalogs/ГруппыДоступа/ObjectModule.bsl +++ b/SSL/src/Catalogs/ГруппыДоступа/ObjectModule.bsl @@ -47,34 +47,33 @@ // Не может иметь обычного ответственного (только полноправные пользователи). Ответственный = Неопределено; - // Только обычные пользователи. - ТипПользователей = Справочники.Пользователи.ПустаяСсылка(); - // Изменение разрешено только полноправному пользователю. Если НЕ ПривилегированныйРежим() И НЕ УправлениеДоступом.ЕстьРоль("ПолныеПрава") Тогда - ВызватьИсключение НСтр("ru = 'Предопределенную группу доступа Администраторы - |можно изменять, либо в привилегированном режиме, - |либо при наличии роли ""Полные права"".'"); + ВызватьИсключение + НСтр("ru = 'Предопределенную группу доступа Администраторы + |можно изменять, либо в привилегированном режиме, + |либо при наличии роли ""Полные права"".'"); КонецЕсли; // Проверка наличия только пользователей. Для каждого ТекущаяСтрока Из ЭтотОбъект.Пользователи Цикл Если ТипЗнч(ТекущаяСтрока.Пользователь) <> Тип("СправочникСсылка.Пользователи") Тогда - - ВызватьИсключение НСтр("ru = 'Предопределенная группа доступа Администраторы - |может содержать только пользователей. - | - |Группы пользователей, внешние пользователи и - |группы внешних пользователей недопустимы.'"); + ВызватьИсключение + НСтр("ru = 'Предопределенная группа доступа Администраторы + |может содержать только пользователей. + | + |Группы пользователей, внешние пользователи и + |группы внешних пользователей недопустимы.'"); КонецЕсли; КонецЦикла; // Нельзя устанавливать предопределенный профиль Администратор произвольной группе доступа. ИначеЕсли Профиль = Справочники.ПрофилиГруппДоступа.Администратор Тогда - ВызватьИсключение НСтр("ru = 'Предопределенный профиль Администратор может быть только - |у предопределенной группы доступа Администраторы.'"); + ВызватьИсключение + НСтр("ru = 'Предопределенный профиль Администратор может быть только + |у предопределенной группы доступа Администраторы.'"); КонецЕсли; Если НЕ ЭтоГруппа Тогда @@ -82,7 +81,6 @@ // Автоматическая установка реквизитов для персональной группы доступа. Если ЗначениеЗаполнено(Пользователь) Тогда Родитель = Справочники.ГруппыДоступа.РодительПерсональныхГруппДоступа(); - ТипПользователей = Неопределено; Иначе Пользователь = Неопределено; Если Родитель = Справочники.ГруппыДоступа.РодительПерсональныхГруппДоступа(Истина) Тогда diff --git a/SSL/src/Catalogs/ГруппыДоступа/ГруппыДоступа.mdo b/SSL/src/Catalogs/ГруппыДоступа/ГруппыДоступа.mdo index daefbf15c..4b8db2dca 100644 --- a/SSL/src/Catalogs/ГруппыДоступа/ГруппыДоступа.mdo +++ b/SSL/src/Catalogs/ГруппыДоступа/ГруппыДоступа.mdo @@ -163,26 +163,6 @@ <fullTextSearch>Use</fullTextSearch> <dataHistory>Use</dataHistory> </attributes> - <attributes uuid="fb79315a-8d27-4c5e-9cfb-c7778dabedef"> - <name>ТипПользователей</name> - <synonym> - <key>ru</key> - <value>Тип пользователей</value> - </synonym> - <comment>В качестве типа используется пустая ссылка</comment> - <type> - <types>CatalogRef.Пользователи</types> - </type> - <toolTip> - <key>ru</key> - <value>Тип объектов информационной базы, которые могут быть в составе участников группы доступа</value> - </toolTip> - <minValue xsi:type="core:UndefinedValue"/> - <maxValue xsi:type="core:UndefinedValue"/> - <fillValue xsi:type="core:UndefinedValue"/> - <fullTextSearch>Use</fullTextSearch> - <dataHistory>Use</dataHistory> - </attributes> <attributes uuid="5f93d2af-64ff-41cc-8403-4a0e83160fea"> <name>Пользователь</name> <synonym> diff --git a/SSL/src/Catalogs/ГруппыИсполнителейЗадач/ManagerModule.bsl b/SSL/src/Catalogs/ГруппыИсполнителейЗадач/ManagerModule.bsl index 9087b7ca4..db7c731b7 100644 --- a/SSL/src/Catalogs/ГруппыИсполнителейЗадач/ManagerModule.bsl +++ b/SSL/src/Catalogs/ГруппыИсполнителейЗадач/ManagerModule.bsl @@ -13,9 +13,6 @@ КонецФункции -//////////////////////////////////////////////////////////////////////////////// -// Загрузка данных из файла - #КонецОбласти #КонецЕсли \ No newline at end of file diff --git a/SSL/src/Catalogs/ГруппыПользователей/Commands/ГруппыПользователя/CommandModule.bsl b/SSL/src/Catalogs/ГруппыПользователей/Commands/ГруппыПользователя/CommandModule.bsl index 56e16c888..cd091a6bc 100644 --- a/SSL/src/Catalogs/ГруппыПользователей/Commands/ГруппыПользователя/CommandModule.bsl +++ b/SSL/src/Catalogs/ГруппыПользователей/Commands/ГруппыПользователя/CommandModule.bsl @@ -1,3 +1,5 @@ +#Область ОбработчикиСобытий + &НаКлиенте Процедура ОбработкаКоманды(ПараметрКоманды, ПараметрыВыполненияКоманды) @@ -11,3 +13,5 @@ ПараметрыВыполненияКоманды.Окно); КонецПроцедуры + +#КонецОбласти diff --git a/SSL/src/Catalogs/ГруппыПользователей/Forms/ФормаСписка/Form.form b/SSL/src/Catalogs/ГруппыПользователей/Forms/ФормаСписка/Form.form index 21df5c2ef..bd1e38ab4 100644 --- a/SSL/src/Catalogs/ГруппыПользователей/Forms/ФормаСписка/Form.form +++ b/SSL/src/Catalogs/ГруппыПользователей/Forms/ФормаСписка/Form.form @@ -381,7 +381,6 @@ <autoFillCheck>true</autoFillCheck> <allowFormCustomize>true</allowFormCustomize> <enabled>true</enabled> - <verticalScroll>UseIfNecessary</verticalScroll> <showTitle>auto</showTitle> <showCloseButton>true</showCloseButton> <attributes> diff --git a/SSL/src/Catalogs/ГруппыПользователей/Forms/ФормаСписка/Module.bsl b/SSL/src/Catalogs/ГруппыПользователей/Forms/ФормаСписка/Module.bsl index 7107c88ec..1a802084e 100644 --- a/SSL/src/Catalogs/ГруппыПользователей/Forms/ФормаСписка/Module.bsl +++ b/SSL/src/Catalogs/ГруппыПользователей/Forms/ФормаСписка/Module.bsl @@ -17,11 +17,6 @@ Элементы.Список.РежимВыбора = Истина; - // Отбор не помеченных на удаление. - ОбщегоНазначенияКлиентСервер.УстановитьЭлементОтбораДинамическогоСписка( - Список, "ПометкаУдаления", Ложь, , , Истина, - РежимОтображенияЭлементаНастройкиКомпоновкиДанных.Обычный); - // Исключение выбора группы Все внешние пользователи в качестве родителя. ОбщегоНазначенияКлиентСервер.УстановитьЭлементОтбораДинамическогоСписка( Список, "Ссылка", Справочники.ГруппыПользователей.ВсеПользователи, @@ -35,9 +30,14 @@ Иначе Заголовок = НСтр("ru = 'Выбор группы пользователей'"); КонецЕсли; - АвтоЗаголовок = Ложь; + АвтоЗаголовок = Ложь; КонецЕсли; + + Если ОбщегоНазначенияПовтИсп.ЭтоАвтономноеРабочееМесто() Тогда + ТолькоПросмотр = Истина; + КонецЕсли; + КонецПроцедуры #КонецОбласти diff --git a/SSL/src/Catalogs/ГруппыПользователей/Forms/ФормаЭлемента/Form.form b/SSL/src/Catalogs/ГруппыПользователей/Forms/ФормаЭлемента/Form.form index 5462d3e47..156eea4ee 100644 --- a/SSL/src/Catalogs/ГруппыПользователей/Forms/ФормаЭлемента/Form.form +++ b/SSL/src/Catalogs/ГруппыПользователей/Forms/ФормаЭлемента/Form.form @@ -453,6 +453,10 @@ <event>ChoiceProcessing</event> <name>СоставОбработкаВыбора</name> </handlers> + <handlers> + <event>OnChange</event> + <name>СоставПриИзменении</name> + </handlers> <searchStringAddition> <name>СоставСтрокаПоиска</name> <id>108</id> @@ -755,7 +759,6 @@ <width>30</width> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> - <heightInTableRows>12</heightInTableRows> <autoMaxRowsCount>true</autoMaxRowsCount> <selectionMode>MultiRow</selectionMode> <headerHeight>1</headerHeight> @@ -974,7 +977,6 @@ <autoFillCheck>true</autoFillCheck> <allowFormCustomize>true</allowFormCustomize> <enabled>true</enabled> - <verticalScroll>UseIfNecessary</verticalScroll> <showTitle>auto</showTitle> <showCloseButton>true</showCloseButton> <attributes> @@ -1034,7 +1036,7 @@ </handler> </action> <modifiesStoredData>true</modifiesStoredData> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <formCommands> @@ -1056,7 +1058,7 @@ <name>ПоказыватьНедействительныхПользователей</name> </handler> </action> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <formCommands> @@ -1083,7 +1085,7 @@ </action> <representation>Picture</representation> <modifiesStoredData>true</modifiesStoredData> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <formCommands> @@ -1110,7 +1112,7 @@ </action> <representation>Picture</representation> <modifiesStoredData>true</modifiesStoredData> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <formCommands> @@ -1133,7 +1135,7 @@ </action> <representation>Picture</representation> <modifiesStoredData>true</modifiesStoredData> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <formCommands> @@ -1156,7 +1158,7 @@ </action> <representation>Picture</representation> <modifiesStoredData>true</modifiesStoredData> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <commandInterface> diff --git a/SSL/src/Catalogs/ГруппыПользователей/Forms/ФормаЭлемента/Module.bsl b/SSL/src/Catalogs/ГруппыПользователей/Forms/ФормаЭлемента/Module.bsl index ad6b87eb5..1055a1aab 100644 --- a/SSL/src/Catalogs/ГруппыПользователей/Forms/ФормаЭлемента/Module.bsl +++ b/SSL/src/Catalogs/ГруппыПользователей/Forms/ФормаЭлемента/Module.bsl @@ -23,6 +23,11 @@ ЗаполнитьСтатусПользователей(); ОбновитьСписокНедействительныхПользователей(Истина); + УстановитьДоступностьСвойств(ЭтотОбъект); + + Если ОбщегоНазначенияПовтИсп.ЭтоАвтономноеРабочееМесто() Тогда + ТолькоПросмотр = Истина; + КонецЕсли; КонецПроцедуры @@ -67,16 +72,21 @@ &НаКлиенте Процедура СоставОбработкаВыбора(Элемент, ВыбранноеЗначение, СтандартнаяОбработка) + ОтборСтрок = Новый Структура(Элементы.Состав.ОтборСтрок); + Элементы.Состав.ОтборСтрок = Новый ФиксированнаяСтруктура; + Объект.Состав.Очистить(); Если ТипЗнч(ВыбранноеЗначение) = Тип("Массив") Тогда - Для каждого Значение Из ВыбранноеЗначение Цикл ОбработкаВыбораПользователя(Значение); КонецЦикла; - Иначе ОбработкаВыбораПользователя(ВыбранноеЗначение); КонецЕсли; + ЗаполнитьСтатусПользователей(); + УстановитьДоступностьСвойств(ЭтотОбъект); + + Элементы.Состав.ОтборСтрок = Новый ФиксированнаяСтруктура(ОтборСтрок); КонецПроцедуры @@ -92,6 +102,11 @@ КонецПроцедуры +&НаКлиенте +Процедура СоставПриИзменении(Элемент) + УстановитьДоступностьСвойств(ЭтотОбъект); +КонецПроцедуры + #КонецОбласти #Область ОбработчикиКомандФормы @@ -112,9 +127,8 @@ &НаКлиенте Процедура ПоказыватьНедействительныхПользователей(Команда) - ОбновитьСписокНедействительныхПользователей(Ложь); - + УстановитьДоступностьСвойств(ЭтотОбъект); КонецПроцедуры &НаКлиенте @@ -141,6 +155,32 @@ #Область СлужебныеПроцедурыИФункции +&НаКлиентеНаСервереБезКонтекста +Процедура УстановитьДоступностьСвойств(Форма) + + Элементы = Форма.Элементы; + + СоставГруппы = Форма.Объект.Состав; + + ПараметрыОтбора = Новый Структура; + ПараметрыОтбора.Вставить("Недействителен", Ложь); + ЕстьДействительныеПользователи = СоставГруппы.НайтиСтроки(ПараметрыОтбора).Количество() > 0; + + ПараметрыОтбора.Вставить("Недействителен", Истина); + ЕстьНедействительныеПользователи = СоставГруппы.НайтиСтроки(ПараметрыОтбора).Количество() > 0; + + ДоступностьКомандПеремещения = + ЕстьДействительныеПользователи + Или (ЕстьНедействительныеПользователи + И Элементы.ПоказыватьНедействительныхПользователей.Пометка); + + Элементы.СоставПереместитьВверх.Доступность = ДоступностьКомандПеремещения; + Элементы.СоставПереместитьВниз.Доступность = ДоступностьКомандПеремещения; + Элементы.СоставКонтекстноеМенюПереместитьВверх.Доступность = ДоступностьКомандПеремещения; + Элементы.СоставКонтекстноеМенюПереместитьВниз.Доступность = ДоступностьКомандПеремещения; + +КонецПроцедуры + &НаСервере Процедура УстановитьУсловноеОформление() diff --git a/SSL/src/Catalogs/ГруппыПользователей/ObjectModule.bsl b/SSL/src/Catalogs/ГруппыПользователей/ObjectModule.bsl index a113cbb08..2cf971619 100644 --- a/SSL/src/Catalogs/ГруппыПользователей/ObjectModule.bsl +++ b/SSL/src/Catalogs/ГруппыПользователей/ObjectModule.bsl @@ -1,8 +1,5 @@ #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПЕРЕМЕННЫЕ - Перем СтарыйРодитель; // Значение родителя группы до изменения для использования // в обработчике события ПриЗаписи. @@ -144,7 +141,7 @@ ПользователиСлужебный.ПослеОбновленияСоставовГруппПользователей( УчастникиИзменений, ИзмененныеГруппы); - ПользователиСлужебный.ПослеДобавленияИзмененияПользователяИлиГруппы(Ссылка, ЭтоНовый); + ИнтеграцияСтандартныхПодсистем.ПослеДобавленияИзмененияПользователяИлиГруппы(Ссылка, ЭтоНовый); КонецПроцедуры diff --git a/SSL/src/Catalogs/ДополнительныеОтчетыИОбработки/Forms/БыстрыйДоступКДополнительнымОтчетамИОбработкам/Form.form b/SSL/src/Catalogs/ДополнительныеОтчетыИОбработки/Forms/БыстрыйДоступКДополнительнымОтчетамИОбработкам/Form.form index aba152939..90d681338 100644 --- a/SSL/src/Catalogs/ДополнительныеОтчетыИОбработки/Forms/БыстрыйДоступКДополнительнымОтчетамИОбработкам/Form.form +++ b/SSL/src/Catalogs/ДополнительныеОтчетыИОбработки/Forms/БыстрыйДоступКДополнительнымОтчетамИОбработкам/Form.form @@ -779,7 +779,6 @@ <autoFillCheck>true</autoFillCheck> <allowFormCustomize>true</allowFormCustomize> <enabled>true</enabled> - <verticalScroll>UseIfNecessary</verticalScroll> <showTitle>auto</showTitle> <showCloseButton>true</showCloseButton> <attributes> @@ -869,7 +868,7 @@ <name>ОК</name> </handler> </action> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <formCommands> @@ -891,7 +890,7 @@ <name>УстановитьДоступДляВсехПользователей</name> </handler> </action> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <formCommands> @@ -913,7 +912,7 @@ <name>УстановитьКомандуДляВыделенныхПользователей</name> </handler> </action> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <formCommands> @@ -935,7 +934,7 @@ <name>УбратьДоступККомандеУВсехПользователей</name> </handler> </action> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <formCommands> @@ -957,7 +956,7 @@ <name>УбратьДоступККомандеУВыделенныхПользователей</name> </handler> </action> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <parameters> diff --git a/SSL/src/Catalogs/ДополнительныеОтчетыИОбработки/Forms/БыстрыйДоступКДополнительнымОтчетамИОбработкам/Module.bsl b/SSL/src/Catalogs/ДополнительныеОтчетыИОбработки/Forms/БыстрыйДоступКДополнительнымОтчетамИОбработкам/Module.bsl index 9325e7eb5..d84783583 100644 --- a/SSL/src/Catalogs/ДополнительныеОтчетыИОбработки/Forms/БыстрыйДоступКДополнительнымОтчетамИОбработкам/Module.bsl +++ b/SSL/src/Catalogs/ДополнительныеОтчетыИОбработки/Forms/БыстрыйДоступКДополнительнымОтчетамИОбработкам/Module.bsl @@ -6,9 +6,7 @@ Возврат; КонецЕсли; - Заголовок = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Быстрый доступ к команде ""%1""'"), - Параметры.ПредставлениеКоманды); + Заголовок = СтрШаблон(НСтр("ru = 'Быстрый доступ к команде ""%1""'"), Параметры.ПредставлениеКоманды); ЗаполнитьТаблицы(); diff --git a/SSL/src/Catalogs/ДополнительныеОтчетыИОбработки/Forms/ПодборРазделов/Form.form b/SSL/src/Catalogs/ДополнительныеОтчетыИОбработки/Forms/ПодборРазделов/Form.form index 5990c1312..6be33b941 100644 --- a/SSL/src/Catalogs/ДополнительныеОтчетыИОбработки/Forms/ПодборРазделов/Form.form +++ b/SSL/src/Catalogs/ДополнительныеОтчетыИОбработки/Forms/ПодборРазделов/Form.form @@ -1,5 +1,9 @@ <?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 @@ -320,13 +324,11 @@ LockOwner true - true true Vertical true true true - UseIfNecessary auto true @@ -417,7 +419,7 @@ ОК - Auto + DontUse Auto @@ -437,7 +439,7 @@ StdPicture.CheckAll - Auto + DontUse Auto @@ -454,7 +456,7 @@ true - Auto + DontUse Auto diff --git a/SSL/src/Catalogs/ДополнительныеОтчетыИОбработки/Forms/ПроверкаДополнительныхОтчетовИОбработок/Form.form b/SSL/src/Catalogs/ДополнительныеОтчетыИОбработки/Forms/ПроверкаДополнительныхОтчетовИОбработок/Form.form index 153de1d7f..6dfe425ff 100644 --- a/SSL/src/Catalogs/ДополнительныеОтчетыИОбработки/Forms/ПроверкаДополнительныхОтчетовИОбработок/Form.form +++ b/SSL/src/Catalogs/ДополнительныеОтчетыИОбработки/Forms/ПроверкаДополнительныхОтчетовИОбработок/Form.form @@ -217,7 +217,7 @@ Проверено - Auto + DontUse Auto @@ -235,7 +235,7 @@ ПерейтиКСписку - Auto + DontUse Auto @@ -253,7 +253,7 @@ ЗакрытьФорму - Auto + DontUse Auto diff --git a/SSL/src/Catalogs/ДополнительныеОтчетыИОбработки/Forms/ПроверкаДополнительныхОтчетовИОбработок/Module.bsl b/SSL/src/Catalogs/ДополнительныеОтчетыИОбработки/Forms/ПроверкаДополнительныхОтчетовИОбработок/Module.bsl index 8cff25889..4f03860ac 100644 --- a/SSL/src/Catalogs/ДополнительныеОтчетыИОбработки/Forms/ПроверкаДополнительныхОтчетовИОбработок/Module.bsl +++ b/SSL/src/Catalogs/ДополнительныеОтчетыИОбработки/Forms/ПроверкаДополнительныхОтчетовИОбработок/Module.bsl @@ -26,7 +26,7 @@ &НаСервере Процедура ОтметитьВыполнениеДела() - ВерсияМассив = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(Метаданные.Версия, "."); + ВерсияМассив = СтрРазделить(Метаданные.Версия, ".", Ложь); ТекущаяВерсия = ВерсияМассив[0] + ВерсияМассив[1] + ВерсияМассив[2]; ХранилищеОбщихНастроек.Сохранить("ТекущиеДела", "ДополнительныеОтчетыИОбработки", ТекущаяВерсия); diff --git a/SSL/src/Catalogs/ДополнительныеОтчетыИОбработки/Forms/ФормаСписка/Form.form b/SSL/src/Catalogs/ДополнительныеОтчетыИОбработки/Forms/ФормаСписка/Form.form index 21e8d850a..4f33ed8da 100644 --- a/SSL/src/Catalogs/ДополнительныеОтчетыИОбработки/Forms/ФормаСписка/Form.form +++ b/SSL/src/Catalogs/ДополнительныеОтчетыИОбработки/Forms/ФормаСписка/Form.form @@ -302,7 +302,7 @@ Left - 0 + Form.Item.Список.StandardCommand.SetDeletionMark Normal Auto true @@ -675,7 +675,6 @@ true false None - SetDeletionMark Наименование 4 @@ -932,6 +931,10 @@ 3 Left + + BeforeDeleteRow + СписокПередУдалением + СписокСтрокаПоиска 80 @@ -1141,7 +1144,7 @@ Left - 0 + Form.Item.Список.StandardCommand.SetDeletionMark Normal Auto true @@ -1403,7 +1406,6 @@ true true true - UseIfNecessary auto true @@ -1524,6 +1526,23 @@ ВидОтбор + + ПрофилиИспользуются + + <key>ru</key> + <value>Профили используются</value> + + 4 + + Boolean + + + true + + + true + + ВыгрузитьВФайл @@ -1545,7 +1564,7 @@ </action> <functionalOptions>FunctionalOption.СтандартныеПодсистемыВЛокальномРежиме</functionalOptions> <representation>Picture</representation> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <formCommands> @@ -1569,7 +1588,7 @@ </action> <functionalOptions>FunctionalOption.СтандартныеПодсистемыВЛокальномРежиме</functionalOptions> <representation>Picture</representation> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <formCommands> @@ -1592,7 +1611,7 @@ </handler> </action> <functionalOptions>FunctionalOption.СтандартныеПодсистемыВЛокальномРежиме</functionalOptions> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <formCommands> @@ -1610,7 +1629,7 @@ <name>ПубликацияРежимОтладки</name> </handler> </action> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <formCommands> @@ -1628,7 +1647,7 @@ <name>ПубликацияОтключена</name> </handler> </action> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <formCommands> @@ -1646,7 +1665,7 @@ <name>ПубликацияИспользуется</name> </handler> </action> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <formCommands> @@ -1671,7 +1690,7 @@ <name>ИзменитьПометкуУдаленияСПрофилями</name> </handler> </action> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <commandInterface> diff --git a/SSL/src/Catalogs/ДополнительныеОтчетыИОбработки/Forms/ФормаСписка/Module.bsl b/SSL/src/Catalogs/ДополнительныеОтчетыИОбработки/Forms/ФормаСписка/Module.bsl index d01d0365e..789a05c2b 100644 --- a/SSL/src/Catalogs/ДополнительныеОтчетыИОбработки/Forms/ФормаСписка/Module.bsl +++ b/SSL/src/Catalogs/ДополнительныеОтчетыИОбработки/Forms/ФормаСписка/Module.bsl @@ -78,6 +78,12 @@ ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы, "ВыгрузитьВФайл", "Видимость", ПравоДобавления); ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы, "ВыгрузитьВФайлМеню", "Видимость", ПравоДобавления); + ПрофилиИспользуются = Не ПолучитьФункциональнуюОпцию("ИспользуютсяПрофилиБезопасности"); + Элементы.ИзменитьПометкуУдаленияБезПрофилей.Видимость = Не ПрофилиИспользуются; + Элементы.ИзменитьПометкуУдаленияБезПрофилейМеню.Видимость = Не ПрофилиИспользуются; + Элементы.ИзменитьПометкуУдаленияСПрофилями.Видимость = ПрофилиИспользуются; + Элементы.ИзменитьПометкуУдаленияСПрофилямиМеню.Видимость = ПрофилиИспользуются; + Если Не ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ГрупповоеИзменениеОбъектов") Тогда Элементы.ИзменитьВыделенные.Видимость = Ложь; Элементы.ИзменитьВыделенныеМеню.Видимость = Ложь; @@ -120,6 +126,18 @@ #КонецОбласти +#Область ОбработчикиСобытийЭлементовТаблицыФормыСписок + +&НаКлиенте +Процедура СписокПередУдалением(Элемент, Отказ) + Если ПрофилиИспользуются Тогда + Отказ = Истина; + СписокИзменитьПометкуУдаления(); + КонецЕсли; +КонецПроцедуры + +#КонецОбласти + #Область ОбработчикиКомандФормы &НаКлиенте @@ -205,17 +223,17 @@ &НаСервере Процедура УстановитьУсловноеОформление() - Инструкция = ДополнительныеОтчетыИОбработки.ИнструкцияУсловногоОформления(); + Инструкция = СтандартныеПодсистемыСервер.ИнструкцияУсловногоОформления(); Инструкция.Поля = "Список"; Инструкция.Отборы.Вставить("Список.Публикация", Перечисления.ВариантыПубликацииДополнительныхОтчетовИОбработок.РежимОтладки); Инструкция.Оформление.Вставить("ЦветТекста", ЦветаСтиля.ПросроченныеДанныеЦвет); - ДополнительныеОтчетыИОбработки.ДобавитьЭлементУсловногоОформления(ЭтотОбъект, Инструкция); + СтандартныеПодсистемыСервер.ДобавитьЭлементУсловногоОформления(ЭтотОбъект, Инструкция); - Инструкция = ДополнительныеОтчетыИОбработки.ИнструкцияУсловногоОформления(); + Инструкция = СтандартныеПодсистемыСервер.ИнструкцияУсловногоОформления(); Инструкция.Поля = "Список"; Инструкция.Отборы.Вставить("Список.Публикация", Перечисления.ВариантыПубликацииДополнительныхОтчетовИОбработок.Отключена); - Инструкция.Оформление.Вставить("ЦветТекста", ЦветаСтиля.НедоступныеДанныеЦвет); - ДополнительныеОтчетыИОбработки.ДобавитьЭлементУсловногоОформления(ЭтотОбъект, Инструкция); + Инструкция.Оформление.Вставить("ЦветТекста", ЦветаСтиля.ТекстЗапрещеннойЯчейкиЦвет); + СтандартныеПодсистемыСервер.ДобавитьЭлементУсловногоОформления(ЭтотОбъект, Инструкция); КонецПроцедуры &НаКлиенте @@ -233,30 +251,28 @@ &НаСервере Функция ИзменениеПубликации(ВариантПубликации) - НовыйРезультатВыполнения = СтандартныеПодсистемыКлиентСервер.НовыйРезультатВыполнения(); + РезультатВыполнения = Новый Структура; ВыделенныеСтроки = Элементы.Список.ВыделенныеСтроки; Если ВыделенныеСтроки.Количество() = 0 Тогда - ТекстСообщения = НСтр("ru = 'Не выбран ни один дополнительный отчет (обработка)'"); - ВыводПредупреждения = НовыйРезультатВыполнения.ВыводПредупреждения; - ВыводПредупреждения.Использование = Истина; - ВыводПредупреждения.Текст = ТекстСообщения; - Возврат НовыйРезультатВыполнения; + СтандартныеПодсистемыКлиентСервер.ВывестиПредупреждение(РезультатВыполнения, + НСтр("ru = 'Не выбран ни один дополнительный отчет (обработка)'")); + Возврат РезультатВыполнения; КонецЕсли; Для Каждого ВыделеннаяСтрока Из ВыделенныеСтроки Цикл - + ИнформацияОбОшибке = Неопределено; Попытка ЗаблокироватьДанныеДляРедактирования(ВыделеннаяСтрока); Исключение ИнформацияОбОшибке = ИнформацияОбОшибке(); - ВыводПредупреждения = НовыйРезультатВыполнения.ВыводПредупреждения; - ВыводПредупреждения.Использование = Истина; - ВыводПредупреждения.Текст = КраткоеПредставлениеОшибки(ИнформацияОбОшибке); - - Элементы.Список.Обновить(); - Возврат НовыйРезультатВыполнения; КонецПопытки; + Если ИнформацияОбОшибке <> Неопределено Тогда + СтандартныеПодсистемыКлиентСервер.ВывестиПредупреждение(РезультатВыполнения, + КраткоеПредставлениеОшибки(ИнформацияОбОшибке)); + Элементы.Список.Обновить(); + Возврат РезультатВыполнения; + КонецЕсли; НачатьТранзакцию(); @@ -282,10 +298,8 @@ РазблокироватьДанныеДляРедактирования(ВыделеннаяСтрока); - ВыводПредупреждения = НовыйРезультатВыполнения.ВыводПредупреждения; - ВыводПредупреждения.Использование = Истина; - ВыводПредупреждения.Текст = ПредставлениеОшибки; - Возврат НовыйРезультатВыполнения; + СтандартныеПодсистемыКлиентСервер.ВывестиПредупреждение(РезультатВыполнения, ПредставлениеОшибки); + Возврат РезультатВыполнения; КонецЕсли; Объект.Записать(); @@ -306,13 +320,11 @@ ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ТекстСообщения, ВыделенныеСтроки.Количество()); КонецЕсли; - ВыводОповещения = НовыйРезультатВыполнения.ВыводОповещения; - ВыводОповещения.Использование = Истина; - ВыводОповещения.Текст = ТекстСообщения; - ВыводОповещения.Заголовок = НСтр("ru = 'Изменена публикация'"); - - Возврат НовыйРезультатВыполнения; + СтандартныеПодсистемыКлиентСервер.ВывестиОповещение(РезультатВыполнения, + НСтр("ru = 'Изменена публикация'"), + ТекстСообщения); + Возврат РезультатВыполнения; КонецФункции &НаКлиенте diff --git a/SSL/src/Catalogs/ДополнительныеОтчетыИОбработки/Forms/ФормаЭлемента/Form.form b/SSL/src/Catalogs/ДополнительныеОтчетыИОбработки/Forms/ФормаЭлемента/Form.form index 48dc52c16..fa48c64dd 100644 --- a/SSL/src/Catalogs/ДополнительныеОтчетыИОбработки/Forms/ФормаЭлемента/Form.form +++ b/SSL/src/Catalogs/ДополнительныеОтчетыИОбработки/Forms/ФормаЭлемента/Form.form @@ -278,196 +278,6 @@ <currentRowUse>Auto</currentRowUse> </extInfo> </items> - <items xsi:type="form:FormField"> - <name>НазначениеКоманд</name> - <id>141</id> - <visible>true</visible> - <enabled>true</enabled> - <userVisible> - <common>true</common> - </userVisible> - <dataPath xsi:type="form:DataPath"> - <segments>ПредставлениеНазначения</segments> - </dataPath> - <extendedTooltip> - <name>НазначениеКомандExtendedTooltip</name> - <id>181</id> - <type>Label</type> - <autoMaxWidth>true</autoMaxWidth> - <autoMaxHeight>true</autoMaxHeight> - <extInfo xsi:type="form:LabelDecorationExtInfo"> - <horizontalAlign>Left</horizontalAlign> - </extInfo> - </extendedTooltip> - <contextMenu> - <name>НазначениеКомандКонтекстноеМеню</name> - <id>142</id> - <autoFill>true</autoFill> - </contextMenu> - <type>LabelField</type> - <editMode>Enter</editMode> - <showInHeader>true</showInHeader> - <headerHorizontalAlign>Left</headerHorizontalAlign> - <showInFooter>true</showInFooter> - <extInfo xsi:type="form:LabelFieldExtInfo"> - <handlers> - <event>Click</event> - <name>НазначениеКомандЗаполнениеФормыНажатие</name> - </handlers> - <autoMaxWidth>true</autoMaxWidth> - <autoMaxHeight>true</autoMaxHeight> - <hyperlink>true</hyperlink> - </extInfo> - </items> - <items xsi:type="form:FormGroup"> - <name>ТипыФорм</name> - <id>62</id> - <items xsi:type="form:Decoration"> - <name>Показывать</name> - <id>143</id> - <title> - <key>ru</key> - <value>Показывать: </value> - - true - true - - true - - - ПоказыватьExtendedTooltip - 183 - Label - true - true - - Left - - - - ПоказыватьКонтекстноеМеню - 144 - true - - Label - true - true - - Left - - - - ИспользоватьДляФормыСписка - 71 - - <key>ru</key> - <value>В списках</value> - - true - true - - true - - - Объект.ИспользоватьДляФормыСписка - - Right - - OnChange - ИспользоватьДляФормыСпискаПриИзменении - - - ИспользоватьДляФормыСпискаExtendedTooltip - 184 - Label - true - true - - Left - - - - ИспользоватьДляФормыСпискаКонтекстноеМеню - 72 - true - - CheckBoxField - Enter - true - Left - true - - - - ИспользоватьДляФормыОбъекта - 69 - - <key>ru</key> - <value>В формах элементов справочников и документов</value> - - true - true - - true - - - Объект.ИспользоватьДляФормыОбъекта - - Right - - OnChange - ИспользоватьДляФормыОбъектаПриИзменении - - - ИспользоватьДляФормыОбъектаExtendedTooltip - 185 - Label - true - true - - Left - - - - ИспользоватьДляФормыОбъектаКонтекстноеМеню - 70 - true - - CheckBoxField - Enter - true - Left - true - - - true - true - - true - - - <key>ru</key> - <value>Типы форм</value> - - - ТипыФормExtendedTooltip - 182 - Label - true - true - - Left - - - UsualGroup - - Auto - true - true - Auto - Auto - - Страницы 314 @@ -568,13 +378,344 @@ Click - НазначениеКомандЗаполнениеФормыНажатие + РазмещениеКомандНажатие true true true + + ГруппаРазмещение + 389 + + НазначениеКоманд + 391 + true + + true + + + ПредставлениеНазначения + + + НазначениеКомандРасширеннаяПодсказка + 393 + Label + true + true + + Left + + + + НазначениеКомандКонтекстноеМеню + 392 + true + + LabelField + Enter + true + Left + true + + + Click + РазмещениеКомандНажатие + + true + true + true + + + + НадписьРазместить + 394 + + <key>ru</key> + <value>Разместить в:</value> + + true + true + + true + + + НадписьРазместитьРасширеннаяПодсказка + 396 + Label + true + true + + Left + + + + НадписьРазместитьКонтекстноеМеню + 395 + true + + Label + true + true + false + false + + Left + + + + НадписьМестоРазмещения + 397 + + <key>ru</key> + <value>Счет на оплату покупателя</value> + + true + true + + true + + + НадписьМестоРазмещенияРасширеннаяПодсказка + 399 + Label + true + true + + Left + + + + НадписьМестоРазмещенияКонтекстноеМеню + 398 + true + + Label + true + 1 + true + true + false + + + Click + НадписьМестоРазмещенияНажатие + + true + Left + + + + НастроитьВидимость + 400 + true + true + + true + + + НастроитьВидимостьРасширеннаяПодсказка + 401 + Label + true + true + + Left + + + UsualButton + Form.Command.НастроитьВидимость + Normal + Auto + true + true + UserCmds + Auto + + true + true + + true + + + <key>ru</key> + <value>Группа размещение</value> + + + ru + Группа размещение + + true + false + + ГруппаРазмещениеРасширеннаяПодсказка + 390 + Label + true + true + + Left + + + UsualGroup + + Auto + true + true + Auto + Auto + + + + ТипыФорм + 62 + + Показывать + 143 + + <key>ru</key> + <value>Показывать: </value> + + true + true + + true + + + ПоказыватьExtendedTooltip + 183 + Label + true + true + + Left + + + + ПоказыватьКонтекстноеМеню + 144 + true + + Label + true + true + + Left + + + + ИспользоватьДляФормыСписка + 71 + + <key>ru</key> + <value>В списках</value> + + true + true + + true + + + Объект.ИспользоватьДляФормыСписка + + Right + + OnChange + ИспользоватьДляФормыСпискаПриИзменении + + + ИспользоватьДляФормыСпискаExtendedTooltip + 184 + Label + true + true + + Left + + + + ИспользоватьДляФормыСпискаКонтекстноеМеню + 72 + true + + CheckBoxField + Enter + true + Left + true + + + + ИспользоватьДляФормыОбъекта + 69 + + <key>ru</key> + <value>В формах элементов справочников и документов</value> + + true + true + + true + + + Объект.ИспользоватьДляФормыОбъекта + + Right + + OnChange + ИспользоватьДляФормыОбъектаПриИзменении + + + ИспользоватьДляФормыОбъектаExtendedTooltip + 185 + Label + true + true + + Left + + + + ИспользоватьДляФормыОбъектаКонтекстноеМеню + 70 + true + + CheckBoxField + Enter + true + Left + true + + + true + true + + true + + + <key>ru</key> + <value>Типы форм</value> + + + ТипыФормExtendedTooltip + 182 + Label + true + true + + Left + + + UsualGroup + + Auto + true + true + Auto + Auto + + ОбъектКоманды 147 @@ -798,6 +939,48 @@ Normal + + ОбъектКомандыКомментарий + 386 + true + true + + true + + + Объект.Команды.Комментарий + + + ОбъектКомандыКомментарийРасширеннаяПодсказка + 388 + Label + true + true + + Left + + + + ОбъектКомандыКомментарийКонтекстноеМеню + 387 + true + + InputField + true + Auto + true + Left + true + + true + true + true + true + true + true + Normal + + None ОбъектКомандыКоманднаяПанель @@ -1325,6 +1508,7 @@ true UserCmds Auto + InCommandBarAndInAdditionalSubmenu ВариантыДополнительногоОтчетаРазместитьВРазделах @@ -3437,6 +3621,24 @@ true + + Комментарий + + <key>ru</key> + <value>Комментарий</value> + + 6 + + String + + + + true + + + true + + @@ -3898,7 +4100,7 @@ Picture - Auto + DontUse Auto @@ -3921,7 +4123,7 @@ Picture - Auto + DontUse Auto @@ -3943,7 +4145,7 @@ ОбъектКомандыНастроитьБыстрыйДоступ - Auto + DontUse Auto @@ -3965,7 +4167,7 @@ ОбъектКомандыНастроитьРасписание - Auto + DontUse Auto @@ -3991,7 +4193,7 @@ TextPicture - Auto + DontUse Auto @@ -4013,7 +4215,7 @@ РазместитьВРазделах - Auto + DontUse Auto @@ -4039,7 +4241,7 @@ Text - Auto + DontUse Auto @@ -4066,7 +4268,29 @@ Picture - Auto + DontUse + Auto + + + НастроитьВидимость + + <key>ru</key> + <value>Настроить видимость...</value> + + 9 + + ru + Настроить видимость + + + true + + + + НастроитьВидимость + + + DontUse Auto diff --git a/SSL/src/Catalogs/ДополнительныеОтчетыИОбработки/Forms/ФормаЭлемента/Help/ru.html b/SSL/src/Catalogs/ДополнительныеОтчетыИОбработки/Forms/ФормаЭлемента/Help/ru.html index 378451aa7..0e8a2e144 100644 --- a/SSL/src/Catalogs/ДополнительныеОтчетыИОбработки/Forms/ФормаЭлемента/Help/ru.html +++ b/SSL/src/Catalogs/ДополнительныеОтчетыИОбработки/Forms/ФормаЭлемента/Help/ru.html @@ -47,5 +47,12 @@
      • Размещение - для выбора разделов нажмите ссылку, которая принимает значение Не определено (если ни одного раздела не выбрано) или перечисляет выбранные разделы. С помощью флажков выберите нужные разделы программы, для подтверждения настройки нажмите ОК.
    • Перечень команд и их настройки могут размещаться на отдельной вкладке Команды. На вкладке выводится:
      • Наименование - полное наименование команды;
      • в колонке Быстрый доступ нажмите  или клавишу F4 и выберите из списка пользователей, для которых команда будет доступна по умолчанию. По умолчанию проставлено значение "Нет". Добавьте пользователей в список. Для подтверждения выбора и возвращения к дальнейшей настройке нажмите ОК; -
      • в колонке Расписание для каждой команды глобальных отчетов и обработок, исполняемых в серверном контексте, нажмите  и задайте расписание, по которому будет запускаться регламентное задание для выполнения этой команды. Расписание неприменимо для команд с вариантом запуска Открытие формы.

    См. также:

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

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

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

    +

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

    +

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

    +

    См. также:

    \ No newline at end of file diff --git a/SSL/src/Catalogs/ДополнительныеОтчетыИОбработки/Forms/ФормаЭлемента/Module.bsl b/SSL/src/Catalogs/ДополнительныеОтчетыИОбработки/Forms/ФормаЭлемента/Module.bsl index b9a7fbc65..dd43079ff 100644 --- a/SSL/src/Catalogs/ДополнительныеОтчетыИОбработки/Forms/ФормаЭлемента/Module.bsl +++ b/SSL/src/Catalogs/ДополнительныеОтчетыИОбработки/Forms/ФормаЭлемента/Module.bsl @@ -195,6 +195,10 @@ КонецЕсли; ЗаполнитьКоманды(); УстановитьВидимостьДоступность(); + + Если Объект.Вид = Перечисления.ВидыДополнительныхОтчетовИОбработок.ПечатнаяФорма Тогда + ВыполнитьЗаменуКомандПечати(); + КонецЕсли; КонецПроцедуры #КонецОбласти @@ -208,8 +212,7 @@ ЭтотОбъект, Элемент.ТекстРедактирования, Объект, - "Комментарий" - ); + "Комментарий"); КонецПроцедуры &НаКлиенте @@ -236,8 +239,7 @@ Возврат; КонецЕсли; - ТекстВопроса = НСтр("ru = 'Пометить ""%1"" на удаление?'"); - ТекстВопроса = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ТекстВопроса, Вариант.Наименование); + ТекстВопроса = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Пометить ""%1"" на удаление?'"), Вариант.Наименование); ДополнительныеПараметры = Новый Структура; ДополнительныеПараметры.Вставить("Вариант", Вариант); @@ -280,6 +282,33 @@ КонецПроцедуры +&НаКлиенте +Процедура РазмещениеКомандНажатие(Элемент, СтандартнаяОбработка) + СтандартнаяОбработка = Ложь; + НадписьМестоРазмещенияНажатие(Элемент); +КонецПроцедуры + +&НаКлиенте +Процедура НадписьМестоРазмещенияНажатие(Элемент) + Если Объект.Вид = ВидДополнительныйОтчет ИЛИ Объект.Вид = ВидДополнительнаяОбработка Тогда + // Выбор разделов + Разделы = Новый СписокЗначений; + Для Каждого СтрокаТаблицы Из Объект.Разделы Цикл + Разделы.Добавить(СтрокаТаблицы.Раздел); + КонецЦикла; + + ПараметрыФормы = Новый Структура; + ПараметрыФормы.Вставить("Разделы", Разделы); + ПараметрыФормы.Вставить("ВидОбработки", Объект.Вид); + + ОткрытьФорму("Справочник.ДополнительныеОтчетыИОбработки.Форма.ПодборРазделов", ПараметрыФормы, ЭтотОбъект); + Иначе + // Выбор объектов метаданных + ПараметрыФормы = ПодготовитьПараметрыФормыВыборОбъектовМетаданных(); + ОткрытьФорму("ОбщаяФорма.ВыборОбъектовМетаданных", ПараметрыФормы); + КонецЕсли; +КонецПроцедуры + #КонецОбласти #Область ОбработчикиСобытийЭлементовТаблицыФормыОбъектКоманды @@ -387,27 +416,17 @@ КонецПроцедуры &НаКлиенте -Процедура НазначениеКомандЗаполнениеФормыНажатие(Элемент, СтандартнаяОбработка) - СтандартнаяОбработка = Ложь; - - Если Объект.Вид = ВидДополнительныйОтчет ИЛИ Объект.Вид = ВидДополнительнаяОбработка Тогда - // Выбор разделов - Разделы = Новый СписокЗначений; - Для Каждого СтрокаТаблицы Из Объект.Разделы Цикл - Разделы.Добавить(СтрокаТаблицы.Раздел); - КонецЦикла; - - ПараметрыФормы = Новый Структура; - ПараметрыФормы.Вставить("Разделы", Разделы); - ПараметрыФормы.Вставить("ВидОбработки", Объект.Вид); - - ОткрытьФорму("Справочник.ДополнительныеОтчетыИОбработки.Форма.ПодборРазделов", ПараметрыФормы, ЭтотОбъект); +Процедура НастроитьВидимость(Команда) + Если Модифицированность Тогда + ОписаниеОповещения = Новый ОписаниеОповещения("НастроитьВидимостьЗавершение", ЭтотОбъект); + ТекстВопроса = НСтр("ru = 'Для настройки видимости команд печати обработку необходимо записать. Продолжить?'"); + Кнопки = Новый СписокЗначений; + Кнопки.Добавить("Продолжить", НСтр("ru = 'Продолжить'")); + Кнопки.Добавить(КодВозвратаДиалога.Отмена); + ПоказатьВопрос(ОписаниеОповещения, ТекстВопроса, Кнопки); Иначе - // Выбор объектов метаданных - ПараметрыФормы = ПодготовитьПараметрыФормыВыборОбъектовМетаданных(); - ОткрытьФорму("ОбщаяФорма.ВыборОбъектовМетаданных", ПараметрыФормы); + ОткрытьФормуНастроекПодменюПечать(); КонецЕсли; - КонецПроцедуры #КонецОбласти @@ -491,7 +510,6 @@ ПараметрыРегистрации = Новый Структура; ПараметрыРегистрации.Вставить("Успех", Ложь); ПараметрыРегистрации.Вставить("АдресДанныхОбработки", АдресДанныхОбработки); - ПараметрыРегистрации.Вставить("ОбработчикРезультата", Новый ОписаниеОповещения("ОбновлениеИзФайлаЗавершение", ЭтотОбъект)); Обработчик = Новый ОписаниеОповещения("ОбновлениеИзФайлаПослеВыбораФайла", ЭтотОбъект, ПараметрыРегистрации); ПараметрыДиалога = Новый Структура("Режим, Фильтр, ИндексФильтра, Заголовок"); @@ -514,7 +532,7 @@ &НаКлиенте Процедура ОбновлениеИзФайлаПослеВыбораФайла(ПомещенныеФайлы, ПараметрыРегистрации) Экспорт Если ПомещенныеФайлы = Неопределено Или ПомещенныеФайлы.Количество() = 0 Тогда - ВыполнитьОбработкуОповещения(ПараметрыРегистрации.ОбработчикРезультата, ПараметрыРегистрации); + ОбновлениеИзФайлаЗавершение(Неопределено, ПараметрыРегистрации); Возврат; КонецЕсли; @@ -527,7 +545,7 @@ ПараметрыРегистрации.ОтключатьКонфликтующие = Ложь; ПараметрыРегистрации.Конфликтующие = Новый СписокЗначений; - МассивПодстрок = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(ОписаниеФайла.Имя, "\"); + МассивПодстрок = СтрРазделить(ОписаниеФайла.Имя, "\", Ложь); ПараметрыРегистрации.ИмяФайла = МассивПодстрок.Получить(МассивПодстрок.ВГраница()); РасширениеФайла = ВРег(Прав(ПараметрыРегистрации.ИмяФайла, 3)); @@ -537,10 +555,10 @@ ПараметрыРегистрации.ЭтоОтчет = Ложь; Иначе ПараметрыРегистрации.Успех = Ложь; - СтандартныеПодсистемыКлиент.ВернутьРезультатПослеПоказаПредупреждения( + ВернутьРезультатПослеПоказаПредупреждения( НСтр("ru = 'Расширение файла не соответствует расширению внешнего отчета (ERF) или обработки (EPF).'"), - ПараметрыРегистрации.ОбработчикРезультата, - ПараметрыРегистрации); + Новый ОписаниеОповещения("ОбновлениеИзФайлаЗавершение", ЭтотОбъект, ПараметрыРегистрации), + Неопределено); Возврат; КонецЕсли; @@ -549,15 +567,28 @@ ОбновлениеИзФайлаМеханикаНаКлиенте(ПараметрыРегистрации); КонецПроцедуры +&НаКлиенте +Процедура ВернутьРезультатПослеПоказаПредупреждения(ТекстПредупреждения, Обработчик, Результат, Заголовок = Неопределено, Таймаут = 0) + // Показывает окно предупреждение, а после его закрытия вызывает обработчик с заданным результатом. + ПараметрыОбработчика = Новый Структура; + ПараметрыОбработчика.Вставить("Обработчик", Обработчик); + ПараметрыОбработчика.Вставить("Результат", Результат); + Обработчик = Новый ОписаниеОповещения("ВернутьРезультатПослеЗакрытияПростогоДиалога", ЭтотОбъект, ПараметрыОбработчика); + ПоказатьПредупреждение(Обработчик, ТекстПредупреждения, Таймаут, Заголовок); +КонецПроцедуры + +&НаКлиенте +Процедура ВернутьРезультатПослеЗакрытияПростогоДиалога(ПараметрыОбработчика) Экспорт + // Продолжение процедуры (см. выше). + Если ТипЗнч(ПараметрыОбработчика.Обработчик) = Тип("ОписаниеОповещения") Тогда + ВыполнитьОбработкуОповещения(ПараметрыОбработчика.Обработчик, ПараметрыОбработчика.Результат); + КонецЕсли; +КонецПроцедуры + &НаКлиенте Процедура ОбновлениеИзФайлаМеханикаНаКлиенте(ПараметрыРегистрации) - // Подготовка к вызову сервера. - ОбработчикРезультата = ПараметрыРегистрации.ОбработчикРезультата; - ПараметрыРегистрации.Удалить("ОбработчикРезультата"); // Вызов сервера. ОбновлениеИзФайлаМеханикаНаСервере(ПараметрыРегистрации); - // Отмена изменений. - ПараметрыРегистрации.Вставить("ОбработчикРезультата", ОбработчикРезультата); Если ПараметрыРегистрации.ОтключатьКонфликтующие Тогда // Отключается несколько объектов, потому динамические списки надо обновить. @@ -570,13 +601,14 @@ ОповещениеСсылка = ?(ЭтоНовый, "", ПолучитьНавигационнуюСсылку(Объект.Ссылка)); ОповещениеТекст = ПараметрыРегистрации.ИмяФайла; ПоказатьОповещениеПользователя(ОповещениеЗаголовок, ОповещениеСсылка, ОповещениеТекст); - ВыполнитьОбработкуОповещения(ПараметрыРегистрации.ОбработчикРезультата, ПараметрыРегистрации); + ОбновлениеИзФайлаЗавершение(Неопределено, ПараметрыРегистрации); Иначе // Разбор причины отказа загрузки обработки и отображение информации пользователю. Если ПараметрыРегистрации.ИмяОбъектаЗанято Тогда ОбновлениеИзФайлаПоказатьКонфликты(ПараметрыРегистрации); Иначе - СтандартныеПодсистемыКлиент.ПоказатьРезультатВыполнения(ЭтотОбъект, ПараметрыРегистрации, ПараметрыРегистрации.ОбработчикРезультата); + ОбработчикРезультата = Новый ОписаниеОповещения("ОбновлениеИзФайлаЗавершение", ЭтотОбъект, ПараметрыРегистрации); + СтандартныеПодсистемыКлиент.ПоказатьРезультатВыполнения(ЭтотОбъект, ПараметрыРегистрации, ОбработчикРезультата); КонецЕсли; КонецЕсли; КонецПроцедуры @@ -671,7 +703,7 @@ Если ПоказатьСписок Тогда // Форма списка с отбором по конфликтующим. ФормаИмя = "Справочник.ДополнительныеОтчетыИОбработки.ФормаСписка"; ФормаЗаголовок = НСтр("ru = 'Дополнительные отчеты и обработки с внутреннем именем ""%1""'"); - ФормаЗаголовок = СтрЗаменить(ФормаЗаголовок, "%1", ПараметрыРегистрации.ИмяОбъекта); + ФормаЗаголовок = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ФормаЗаголовок, ПараметрыРегистрации.ИмяОбъекта); ФормаПараметры = Новый Структура; ФормаПараметры.Вставить("Отбор", Новый Структура); ФормаПараметры.Отбор.Вставить("ИмяОбъекта", ПараметрыРегистрации.ИмяОбъекта); @@ -683,26 +715,26 @@ ФормаПараметры = Новый Структура; ФормаПараметры.Вставить("Ключ", ПараметрыРегистрации.Конфликтующие[0].Значение); КонецЕсли; - ВыполнитьОбработкуОповещения(ПараметрыРегистрации.ОбработчикРезультата, ПараметрыРегистрации); + ОбновлениеИзФайлаЗавершение(Неопределено, ПараметрыРегистрации); ОткрытьФорму(ФормаИмя, ФормаПараметры, Неопределено, Истина); Иначе // Отмена. - ВыполнитьОбработкуОповещения(ПараметрыРегистрации.ОбработчикРезультата, ПараметрыРегистрации); + ОбновлениеИзФайлаЗавершение(Неопределено, ПараметрыРегистрации); КонецЕсли; КонецПроцедуры &НаКлиенте -Процедура ОбновлениеИзФайлаЗавершение(Результат, ДополнительныеПараметры) Экспорт - Если Результат = Неопределено Или Результат.Успех = Ложь Тогда +Процедура ОбновлениеИзФайлаЗавершение(ПустойРезультат, ПараметрыРегистрации) Экспорт + Если ПараметрыРегистрации = Неопределено Или ПараметрыРегистрации.Успех = Ложь Тогда Если ПоказатьДиалогЗагрузкиИзФайлаПриОткрытии И Открыта() Тогда Закрыть(); КонецЕсли; - ИначеЕсли Результат.Успех = Истина Тогда + ИначеЕсли ПараметрыРегистрации.Успех = Истина Тогда Если Не Открыта() Тогда Открыть(); КонецЕсли; Модифицированность = Истина; РегистрацияОбработки = Истина; - АдресДанныхОбработки = Результат.АдресДанныхОбработки; + АдресДанныхОбработки = ПараметрыРегистрации.АдресДанныхОбработки; КонецЕсли; КонецПроцедуры @@ -714,8 +746,7 @@ КонецЕсли; Если НЕ ЗначениеЗаполнено(Вариант.Ссылка) Тогда - ТекстОшибки = НСтр("ru = 'Вариант отчета ""%1"" не зарегистрирован.'"); - ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ТекстОшибки, Вариант.Наименование); + ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Вариант отчета ""%1"" не зарегистрирован.'"), Вариант.Наименование); ПоказатьПредупреждение(, ТекстОшибки); Иначе ПоказатьЗначение(, Вариант.Ссылка); @@ -831,7 +862,7 @@ СформироватьСписокРазрешений(); - ИначеЕсли Лев(Переход, СтрДлина(КлючВнутреннейОбработки)) = КлючВнутреннейОбработки Тогда + ИначеЕсли СтрНачинаетсяС(Переход, КлючВнутреннейОбработки) Тогда СформироватьПредставленияРазрешений(Прав(Переход, СтрДлина(Переход) - СтрДлина(КлючВнутреннейОбработки))); @@ -867,19 +898,9 @@ Возврат НСтр("ru = 'Нет'"); КонецЕсли; - ПоследняяЦифра = КоличествоПользователей - 10 * Цел(КоличествоПользователей/10); - - Если ПоследняяЦифра = 1 Тогда - БыстрыйДоступПредставление = НСтр("ru = '%1 пользователь'"); - ИначеЕсли ПоследняяЦифра = 2 Или ПоследняяЦифра = 3 Или ПоследняяЦифра = 4 Тогда - БыстрыйДоступПредставление = НСтр("ru = '%1 пользователя'"); - Иначе - БыстрыйДоступПредставление = НСтр("ru = '%1 пользователей'"); - КонецЕсли; - - БыстрыйДоступПредставление = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - БыстрыйДоступПредставление, - Формат(КоличествоПользователей, "ЧГ=0")); + БыстрыйДоступПредставление = СтроковыеФункцииКлиентСервер.ЧислоЦифрамиПредметИсчисленияПрописью( + КоличествоПользователей, + НСтр("ru = 'пользователь'") + "," + НСтр("ru = 'пользователя'") + "," + НСтр("ru = 'пользователей'")); Возврат БыстрыйДоступПредставление; КонецФункции @@ -934,23 +955,17 @@ &НаСервере Функция ПодготовитьПараметрыФормыВыборОбъектовМетаданных() - ФильтрПоОбъектамМетаданных = Новый СписокЗначений; - Если Объект.Вид = Перечисления.ВидыДополнительныхОтчетовИОбработок.ЗаполнениеОбъекта Тогда - ОбщаяКоманда = Метаданные.ОбщиеКоманды.ЗаполнениеОбъекта; - ИначеЕсли Объект.Вид = Перечисления.ВидыДополнительныхОтчетовИОбработок.Отчет Тогда - ОбщаяКоманда = Метаданные.ОбщиеКоманды.ОтчетыОбъекта; - ИначеЕсли Объект.Вид = Перечисления.ВидыДополнительныхОтчетовИОбработок.ПечатнаяФорма Тогда - ОбщаяКоманда = Метаданные.ОбщиеКоманды.ДополнительныеПечатныеФормыОбъекта; - ИначеЕсли Объект.Вид = Перечисления.ВидыДополнительныхОтчетовИОбработок.СозданиеСвязанныхОбъектов Тогда - ОбщаяКоманда = Метаданные.ОбщиеКоманды.СозданиеСвязанныхОбъектов; + ТаблицаОбъектовМетаданных = ДополнительныеОтчетыИОбработки.ПодключенныеОбъектыМетаданных(Объект.Вид); + Если ТаблицаОбъектовМетаданных = Неопределено Тогда + Возврат Неопределено; КонецЕсли; - Для Каждого ТипПараметраКоманды Из ОбщаяКоманда.ТипПараметраКоманды.Типы() Цикл - ФильтрПоОбъектамМетаданных.Добавить(Метаданные.НайтиПоТипу(ТипПараметраКоманды).ПолноеИмя()); - КонецЦикла; + + ФильтрПоОбъектамМетаданных = Новый СписокЗначений; + ФильтрПоОбъектамМетаданных.ЗагрузитьЗначения(ТаблицаОбъектовМетаданных.ВыгрузитьКолонку("ПолноеИмя")); ВыбранныеОбъектыМетаданных = Новый СписокЗначений; Для Каждого ЭлементНазначение Из Объект.Назначение Цикл - Если НЕ ЭлементНазначение.ОбъектНазначения.ПометкаУдаления Тогда + Если ТаблицаОбъектовМетаданных.Найти(ЭлементНазначение.ОбъектНазначения, "Ссылка") <> Неопределено Тогда ВыбранныеОбъектыМетаданных.Добавить(ЭлементНазначение.ОбъектНазначения.ПолноеИмя); КонецЕсли; КонецЦикла; @@ -988,21 +1003,20 @@ &НаСервере Процедура УстановитьВидимостьДоступность(Регистрация = Ложь) - Если НЕ Регистрация И НЕ ЭтоНовый И Объект.Вид = ВидДополнительныйОтчет Тогда + ЭтоГлобальнаяОбработка = (Объект.Вид = ВидДополнительнаяОбработка ИЛИ Объект.Вид = ВидДополнительныйОтчет); + ЭтоОтчет = (Объект.Вид = ВидДополнительныйОтчет ИЛИ Объект.Вид = ВидОтчет); + + Если Не Регистрация И Не ЭтоНовый И ЭтоОтчет Тогда ВариантыДополнительногоОтчетаЗаполнить(); Иначе ВариантыДополнительногоОтчета.Очистить(); КонецЕсли; - ЭтоГлобальнаяОбработка = (Объект.Вид = ВидДополнительнаяОбработка ИЛИ Объект.Вид = ВидДополнительныйОтчет); - ЭтоОтчет = (Объект.Вид = ВидДополнительныйОтчет ИЛИ Объект.Вид = ВидОтчет); - КоличествоВариантов = ВариантыДополнительногоОтчета.Количество(); КоличествоКоманд = Объект.Команды.Количество(); КоличествоВидимыхЗакладок = 1; - Если Объект.Вид = ВидДополнительныйОтчет И Объект.ИспользуетХранилищеВариантов Тогда - + Если ЭтоОтчет И Объект.ИспользуетХранилищеВариантов Тогда КоличествоВидимыхЗакладок = КоличествоВидимыхЗакладок + 1; Элементы.СтраницыВарианты.Видимость = Истина; @@ -1020,20 +1034,12 @@ Элементы.СтраницыВарианты.Видимость = Ложь; КонецЕсли; + Элементы.СтраницаКоманды.Видимость = КоличествоКоманд > 0; Если КоличествоКоманд = 0 Тогда - - Элементы.СтраницаКоманды.Видимость = Ложь; - Элементы.СтраницаКоманды.Заголовок = НСтр("ru = 'Команды'"); - + Элементы.СтраницаКоманды.Заголовок = НазваниеСтраницыКоманд(); Иначе - КоличествоВидимыхЗакладок = КоличествоВидимыхЗакладок + 1; - - Элементы.СтраницаКоманды.Видимость = Истина; - Элементы.СтраницаКоманды.Заголовок = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Команды (%1)'"), - Формат(КоличествоКоманд, "ЧГ=")); - + Элементы.СтраницаКоманды.Заголовок = НазваниеСтраницыКоманд() + " (" + Формат(КоличествоКоманд, "ЧГ=") + ")"; КонецЕсли; КоличествоРазрешений = ПолучитьТаблицуРазрешений().Количество(); @@ -1100,7 +1106,8 @@ Элементы.СтраницыБезопасныйРежимСРазрешениями.ТекущаяСтраница = Элементы.СтраницаПерсональныйПрофильБезопасности; Элементы.ДекорацияПерсональныйПрофильБезопасностиНадпись.Заголовок = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Дополнительный отчет или обработка будет подключаться к программе с использованием ""персонального"" - |профиля безопасности %1, в котором будут разрешены только следующие операции:'"), БезопасныйРежим); + |профиля безопасности %1, в котором будут разрешены только следующие операции:'"), + БезопасныйРежим); Иначе ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = '%1 не является корректным режимом подключения для дополнительных отчетов и обработок, требующих разрешений на использование профилей безопасности!'"), @@ -1120,20 +1127,14 @@ Элементы.СтраницыВариантыКомандыРазрешения.ОтображениеСтраниц = ОтображениеСтраницФормы[?(КоличествоВидимыхЗакладок > 1, "ЗакладкиСверху", "Нет")]; Если ЭтоГлобальнаяОбработка Тогда - Если Объект.Разделы.Количество() = 0 Тогда - ПредставлениеНазначения = НСтр("ru = 'Не определено'"); - Иначе + ПредставлениеНазначения = НСтр("ru = '<Не задано>'"); + Если Объект.Разделы.Количество() > 0 Тогда ПредставлениеНазначения = ""; Для Каждого СтрокаРаздел Из Объект.Разделы Цикл - ПредставлениеРаздела = ДополнительныеОтчетыИОбработки.ПредставлениеРаздела(СтрокаРаздел.Раздел); - Если ПредставлениеРаздела = Неопределено Тогда - Продолжить; - КонецЕсли; - Если ПредставлениеНазначения = "" Тогда - ПредставлениеНазначения = ПредставлениеРаздела; - Иначе - ПредставлениеНазначения = ПредставлениеНазначения + ", " + ПредставлениеРаздела; + Если ПредставлениеНазначения <> "" Тогда + ПредставлениеНазначения = ПредставлениеНазначения + ", "; КонецЕсли; + ПредставлениеНазначения = ПредставлениеНазначения + ДополнительныеОтчетыИОбработки.ПредставлениеРаздела(СтрокаРаздел.Раздел); КонецЦикла; КонецЕсли; Иначе @@ -1156,14 +1157,20 @@ КонецЕсли; КонецЕсли; + Элементы.НадписьМестоРазмещения.Заголовок = ПредставлениеНазначения; + Элементы.ОбъектКомандыБыстрыйДоступПредставление.Видимость = ЭтоГлобальнаяОбработка; Элементы.ОбъектКомандыНастроитьБыстрыйДоступ.Видимость = ЭтоГлобальнаяОбработка; Элементы.ОбъектКомандыРегламентноеЗаданиеПредставление.Видимость = ЭтоГлобальнаяОбработка; Элементы.ОбъектКомандыРегламентноеЗаданиеИспользование.Видимость = ЭтоГлобальнаяОбработка; Элементы.ОбъектКомандыНастроитьРасписание.Видимость = ЭтоГлобальнаяОбработка; Элементы.РазмещениеКоманд.Видимость = ЭтоГлобальнаяОбработка; - Элементы.НазначениеКоманд.Видимость = НЕ ЭтоГлобальнаяОбработка; - Элементы.ТипыФорм.Видимость = НЕ ЭтоГлобальнаяОбработка; + Элементы.ГруппаРазмещение.Видимость = НЕ ЭтоГлобальнаяОбработка; + + ЭтоПечатнаяФорма = Объект.Вид = Перечисления.ВидыДополнительныхОтчетовИОбработок.ПечатнаяФорма; + Элементы.ТипыФорм.Видимость = Не ЭтоГлобальнаяОбработка И Не ЭтоПечатнаяФорма; + Элементы.НастроитьВидимость.Видимость = ЭтоПечатнаяФорма; + Элементы.ОбъектКомандыКомментарий.Видимость = ЭтоПечатнаяФорма; Если ЭтоНовый Тогда Заголовок = ?(ЭтоОтчет, НСтр("ru = 'Дополнительный отчет (создание)'"), НСтр("ru = 'Дополнительная обработка (создание)'")); @@ -1244,6 +1251,11 @@ Объект.Команды.Сортировать("Представление"); + КомандыПечатиОбъекта = УправлениеПечатью.СоздатьКоллекциюКомандПечати(); + Если Объект.Вид = Перечисления.ВидыДополнительныхОтчетовИОбработок.ПечатнаяФорма И Объект.Назначение.Количество() = 1 Тогда + КомандыПечатиОбъекта = УправлениеПечатью.СтандартныеКомандыПечатиОбъекта(Объект.Назначение[0].ОбъектНазначения); + КонецЕсли; + Для Каждого ЭлементКоманда Из Объект.Команды Цикл Если Объект.Вид = ВидДополнительнаяОбработка ИЛИ Объект.Вид = ВидДополнительныйОтчет Тогда Найденные = БыстрыйДоступ.НайтиСтроки(Новый Структура("ИдентификаторКоманды", ЭлементКоманда.Идентификатор)); @@ -1290,6 +1302,30 @@ Если НЕ ЭлементКоманда.РегламентноеЗаданиеИспользование Тогда ЭлементКоманда.РегламентноеЗаданиеПредставление = ПредставлениеОтключенногоРасписания(); КонецЕсли; + ИначеЕсли Объект.Вид = Перечисления.ВидыДополнительныхОтчетовИОбработок.ПечатнаяФорма Тогда + Если Не ПустаяСтрока(ЭлементКоманда.ЗаменяемыеКоманды) Тогда + ИдентификаторыЗаменяемых = СтрРазделить(ЭлементКоманда.ЗаменяемыеКоманды, ",", Ложь); + ПредставлениеЗаменяемыхКоманд = ""; + КоличествоЗаменяемых = 0; + Фильтр = Новый Структура("Идентификатор, ФорматСохранения, СразуНаПринтер", Неопределено, Неопределено, Ложь); + Для Каждого ИдентификаторЗаменяемойКоманды Из ИдентификаторыЗаменяемых Цикл + Фильтр.Идентификатор = СокрЛП(ИдентификаторЗаменяемойКоманды); + СписокЗаменяемыхКоманд = КомандыПечатиОбъекта.НайтиСтроки(Фильтр); + // при неоднозначности в определении заменяемой команды замена не выполняется + Если СписокЗаменяемыхКоманд.Количество() = 1 Тогда + ПредставлениеЗаменяемыхКоманд = ПредставлениеЗаменяемыхКоманд + ?(ПустаяСтрока(ПредставлениеЗаменяемыхКоманд), "", ", ") + """" + СписокЗаменяемыхКоманд[0].Представление + """"; + КоличествоЗаменяемых = КоличествоЗаменяемых + 1; + КонецЕсли; + КонецЦикла; + Если КоличествоЗаменяемых > 0 Тогда + Если КоличествоЗаменяемых = 1 Тогда + ШаблонКомментария = НСтр("ru = 'Заменяет стандартную команду печати %1'"); + Иначе + ШаблонКомментария = НСтр("ru = 'Заменяет стандартные команды печати: %1'"); + КонецЕсли; + ЭлементКоманда.Комментарий = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонКомментария, ПредставлениеЗаменяемыхКоманд); + КонецЕсли; + КонецЕсли; Иначе ЭлементКоманда.РегламентноеЗаданиеПредставление = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Не применимо для команд с вариантом запуска ""%1""'"), @@ -1376,4 +1412,57 @@ КонецФункции +/// + +&НаСервере +Функция ВыбранныеОбъектыНазначения() + Результат = Новый СписокЗначений; + Результат.ЗагрузитьЗначения(Объект.Назначение.Выгрузить(, "ОбъектНазначения").ВыгрузитьКолонку("ОбъектНазначения")); + Возврат Результат; +КонецФункции + +&НаКлиенте +Процедура НастроитьВидимостьЗавершение(РезультатДиалога, ДополнительныеПараметры) Экспорт + Если РезультатДиалога <> "Продолжить" Тогда + Возврат; + КонецЕсли; + Записать(); + ОткрытьФормуНастроекПодменюПечать(); +КонецПроцедуры + +&НаКлиенте +Процедура ОткрытьФормуНастроекПодменюПечать() + ПараметрыОткрытия = Новый Структура; + ПараметрыОткрытия.Вставить("Отбор", ВыбранныеОбъектыНазначения()); + ОткрытьФорму("ОбщаяФорма.НастройкаКомандПечати", ПараметрыОткрытия, , , , , , РежимОткрытияОкнаФормы.БлокироватьОкноВладельца); +КонецПроцедуры + +&НаСервере +Процедура ВыполнитьЗаменуКомандПечати() + УправлениеПечатью.ОтключитьКомандыПечати(ВыбранныеОбъектыНазначения().ВыгрузитьЗначения(), ОтключаемыеКоманды().ВыгрузитьЗначения()); +КонецПроцедуры + +&НаСервере +Функция ОтключаемыеКоманды() + Результат = Новый СписокЗначений; + Для Каждого Команда Из Объект.Команды Цикл + Если Не ПустаяСтрока(Команда.ЗаменяемыеКоманды) Тогда + СписокЗаменяемых = СтрРазделить(Команда.ЗаменяемыеКоманды, ",", Ложь); + Для Каждого ЗаменяемаяКоманда Из СписокЗаменяемых Цикл + Результат.Добавить(ЗаменяемаяКоманда); + КонецЦикла; + КонецЕсли; + КонецЦикла; + Возврат Результат; +КонецФункции + +&НаСервере +Функция НазваниеСтраницыКоманд() + Если Объект.Вид = Перечисления.ВидыДополнительныхОтчетовИОбработок.ПечатнаяФорма Тогда + Возврат НСтр("ru = 'Команды печати'"); + Иначе + Возврат НСтр("ru = 'Команды'"); + КонецЕсли; +КонецФункции + #КонецОбласти diff --git a/SSL/src/Catalogs/ДополнительныеОтчетыИОбработки/Help/ru.html b/SSL/src/Catalogs/ДополнительныеОтчетыИОбработки/Help/ru.html index 2801888f7..cfbc5211d 100644 --- a/SSL/src/Catalogs/ДополнительныеОтчетыИОбработки/Help/ru.html +++ b/SSL/src/Catalogs/ДополнительныеОтчетыИОбработки/Help/ru.html @@ -42,5 +42,12 @@
    • Отчет - назначаемый дополнительный отчет. С его помощью можно выдать отчет по определенному объекту программы.
    • Заполнение объекта - назначаемая дополнительная обработка, которая позволяет автоматически заполнить или очистить один или несколько элементов списка.
    • Печатная форма - назначаемая дополнительная обработка, с помощью которой можно расширить количество печатных форм документа. -
    • Создание связанных объектов - назначаемая дополнительная обработка, которая позволяет быстро заполнить списки с помощью копирования элементов.

    См. также:

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

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

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

    +

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

    +

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

    +

    См. также:

    \ No newline at end of file diff --git a/SSL/src/Catalogs/ДополнительныеОтчетыИОбработки/ObjectModule.bsl b/SSL/src/Catalogs/ДополнительныеОтчетыИОбработки/ObjectModule.bsl index 259fb9a30..f05f65a2a 100644 --- a/SSL/src/Catalogs/ДополнительныеОтчетыИОбработки/ObjectModule.bsl +++ b/SSL/src/Catalogs/ДополнительныеОтчетыИОбработки/ObjectModule.bsl @@ -67,21 +67,19 @@ Если Конфликтующие.Количество() > 0 Тогда Отказ = Истина; Если ПроверкаЭлемента Тогда - ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + ТекстОшибки = СтрШаблон( НСтр("ru = 'Имя ""%1"", используемое данным отчетом (обработкой), уже занято другим опубликованным дополнительным отчетом (обработкой). | |Для продолжения необходимо изменить вид Публикации с ""%2"" на ""%3"" или ""%4"".'"), ИмяОбъекта, Строка(Перечисления.ВариантыПубликацииДополнительныхОтчетовИОбработок.Используется), Строка(Перечисления.ВариантыПубликацииДополнительныхОтчетовИОбработок.РежимОтладки), - Строка(Перечисления.ВариантыПубликацииДополнительныхОтчетовИОбработок.Отключена) - ); + Строка(Перечисления.ВариантыПубликацииДополнительныхОтчетовИОбработок.Отключена)); Иначе - ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + ТекстОшибки = СтрШаблон( НСтр("ru = 'Имя ""%1"", используемое отчетом (обработкой) ""%2"", уже занято другим опубликованным дополнительным отчетом (обработкой).'"), ИмяОбъекта, - ОбщегоНазначения.ЗначениеРеквизитаОбъекта(ЭтотОбъект.Ссылка, "Наименование") - ); + ОбщегоНазначения.ЗначениеРеквизитаОбъекта(ЭтотОбъект.Ссылка, "Наименование")); КонецЕсли; ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстОшибки, , "Объект.Публикация"); КонецЕсли; @@ -341,7 +339,7 @@ КонецФункции Функция ПредставлениеЗадания(Команда) - // '%1: %2 / Команда: %3' + // '[ВидОбъекта]: [НаименованиеОбъекта] / Команда: [ПредставлениеКоманды]' Возврат ( СокрЛП(Вид) + ": " @@ -409,6 +407,8 @@ Возврат; КонецПопытки; + ДополнительныеСвойства.Вставить("Глобальный", ЭтоГлобальнаяОбработка()); + МодульВариантыОтчетов = ОбщегоНазначения.ОбщийМодуль("ВариантыОтчетов"); МодульВариантыОтчетов.ПриЗаписиДополнительногоОтчета(ЭтотОбъект, Отказ, ВнешнийОбъект); diff --git a/SSL/src/Catalogs/ДополнительныеОтчетыИОбработки/ДополнительныеОтчетыИОбработки.mdo b/SSL/src/Catalogs/ДополнительныеОтчетыИОбработки/ДополнительныеОтчетыИОбработки.mdo index a9e49185e..c14eb101a 100644 --- a/SSL/src/Catalogs/ДополнительныеОтчетыИОбработки/ДополнительныеОтчетыИОбработки.mdo +++ b/SSL/src/Catalogs/ДополнительныеОтчетыИОбработки/ДополнительныеОтчетыИОбработки.mdo @@ -607,6 +607,25 @@ Use Use
    + + ЗаменяемыеКоманды + + ru + Заменяемые команды + + + String + + + + ru + Идентификаторы заменяемых команд печати. + + + + Use + Use + @@ -795,7 +814,7 @@ ФормаЭлемента ru - Дополнительный отчет или обработка + Форма элемента @@ -809,7 +828,7 @@ ПодборРазделов ru - Разделы командного интерфейса + Подбор разделов PersonalComputer MobileDevice diff --git a/SSL/src/Catalogs/ЗакладкиВзаимодействий/Forms/ФормаСписка/Form.form b/SSL/src/Catalogs/ЗакладкиВзаимодействий/Forms/ФормаСписка/Form.form index e8fc1377b..516b95526 100644 --- a/SSL/src/Catalogs/ЗакладкиВзаимодействий/Forms/ФормаСписка/Form.form +++ b/SSL/src/Catalogs/ЗакладкиВзаимодействий/Forms/ФормаСписка/Form.form @@ -270,7 +270,6 @@ true true true - UseIfNecessary auto true diff --git a/SSL/src/Catalogs/ЗакладкиВзаимодействий/Forms/ФормаЭлемента/Form.form b/SSL/src/Catalogs/ЗакладкиВзаимодействий/Forms/ФормаЭлемента/Form.form index cf945ee0a..c23a91c43 100644 --- a/SSL/src/Catalogs/ЗакладкиВзаимодействий/Forms/ФормаЭлемента/Form.form +++ b/SSL/src/Catalogs/ЗакладкиВзаимодействий/Forms/ФормаЭлемента/Form.form @@ -256,7 +256,6 @@ true true true - UseIfNecessary auto true diff --git a/SSL/src/Catalogs/Заметки/Forms/ВсеЗаметки/Form.form b/SSL/src/Catalogs/Заметки/Forms/ВсеЗаметки/Form.form index c170ede01..39abe0ac3 100644 --- a/SSL/src/Catalogs/Заметки/Forms/ВсеЗаметки/Form.form +++ b/SSL/src/Catalogs/Заметки/Forms/ВсеЗаметки/Form.form @@ -625,7 +625,6 @@ true true true - UseIfNecessary auto true diff --git a/SSL/src/Catalogs/Заметки/Forms/ЗаметкиПоПредмету/Form.form b/SSL/src/Catalogs/Заметки/Forms/ЗаметкиПоПредмету/Form.form index c1d322557..0b8e3beaf 100644 --- a/SSL/src/Catalogs/Заметки/Forms/ЗаметкиПоПредмету/Form.form +++ b/SSL/src/Catalogs/Заметки/Forms/ЗаметкиПоПредмету/Form.form @@ -477,7 +477,6 @@ true true true - UseIfNecessary auto true diff --git a/SSL/src/Catalogs/Заметки/Forms/МоиЗаметки/Form.form b/SSL/src/Catalogs/Заметки/Forms/МоиЗаметки/Form.form index aae499c09..8d6f6e5d4 100644 --- a/SSL/src/Catalogs/Заметки/Forms/МоиЗаметки/Form.form +++ b/SSL/src/Catalogs/Заметки/Forms/МоиЗаметки/Form.form @@ -610,7 +610,6 @@ true true true - UseIfNecessary auto true diff --git a/SSL/src/Catalogs/Заметки/Forms/ФормаГруппы/Form.form b/SSL/src/Catalogs/Заметки/Forms/ФормаГруппы/Form.form index 0ce4ec4c4..a1a5c5d36 100644 --- a/SSL/src/Catalogs/Заметки/Forms/ФормаГруппы/Form.form +++ b/SSL/src/Catalogs/Заметки/Forms/ФормаГруппы/Form.form @@ -180,7 +180,6 @@ true true true - UseIfNecessary auto true diff --git a/SSL/src/Catalogs/Заметки/Forms/ФормаЭлемента/Module.bsl b/SSL/src/Catalogs/Заметки/Forms/ФормаЭлемента/Module.bsl index 502d0db64..e62595f44 100644 --- a/SSL/src/Catalogs/Заметки/Forms/ФормаЭлемента/Module.bsl +++ b/SSL/src/Catalogs/Заметки/Forms/ФормаЭлемента/Module.bsl @@ -51,6 +51,7 @@ &НаКлиенте Процедура ПослеЗаписи(ПараметрыЗаписи) Элементы.ДатаЗаметки.Заголовок = НСтр("ru = 'Записано'") + ": " + Формат(Объект.ДатаИзменения, "ДЛФ=DDT"); + ОповеститьОбИзменении(Объект.Ссылка); КонецПроцедуры #КонецОбласти diff --git a/SSL/src/Catalogs/Заметки/ObjectModule.bsl b/SSL/src/Catalogs/Заметки/ObjectModule.bsl index d7961b84e..3904c77cc 100644 --- a/SSL/src/Catalogs/Заметки/ObjectModule.bsl +++ b/SSL/src/Catalogs/Заметки/ObjectModule.bsl @@ -20,7 +20,7 @@ ДатаИзменения = ТекущаяДатаСеанса(); ПредставлениеПредмета = ОбщегоНазначения.ПредметСтрокой(Предмет); - Позиция = Найти(ТекстСодержания, Символы.ПС); + Позиция = СтрНайти(ТекстСодержания, Символы.ПС); Если Позиция > 0 Тогда Тема = Сред(ТекстСодержания, 1, Позиция - 1); Иначе diff --git a/SSL/src/Catalogs/ЗначенияСвойствОбъектов/Forms/ФормаГруппы/Form.form b/SSL/src/Catalogs/ЗначенияСвойствОбъектов/Forms/ФормаГруппы/Form.form index 3e7f3459b..4ecaa0680 100644 --- a/SSL/src/Catalogs/ЗначенияСвойствОбъектов/Forms/ФормаГруппы/Form.form +++ b/SSL/src/Catalogs/ЗначенияСвойствОбъектов/Forms/ФормаГруппы/Form.form @@ -158,7 +158,6 @@ true true true - UseIfNecessary auto true diff --git a/SSL/src/Catalogs/ЗначенияСвойствОбъектов/Forms/ФормаГруппы/Module.bsl b/SSL/src/Catalogs/ЗначенияСвойствОбъектов/Forms/ФормаГруппы/Module.bsl index c017ec556..02678ac48 100644 --- a/SSL/src/Catalogs/ЗначенияСвойствОбъектов/Forms/ФормаГруппы/Module.bsl +++ b/SSL/src/Catalogs/ЗначенияСвойствОбъектов/Forms/ФормаГруппы/Module.bsl @@ -42,25 +42,21 @@ Если НЕ ПустаяСтрока(ИмяСвойства) Тогда Если ЗначениеЗаполнено(Объект.Ссылка) Тогда - Заголовок = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = '%1 (%2)'"), + Заголовок = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = '%1 (%2)'"), Объект.Наименование, ИмяСвойства); Иначе - Заголовок = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = '%1 (Создание)'"), ИмяСвойства); + Заголовок = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = '%1 (Создание)'"), ИмяСвойства); КонецЕсли; Иначе ИмяСвойства = Строка(ЗначенияРеквизитов.Заголовок); Если ЗначениеЗаполнено(Объект.Ссылка) Тогда - Заголовок = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = '%1 (Группа значений свойства %2)'"), + Заголовок = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = '%1 (Группа значений свойства %2)'"), Объект.Наименование, ИмяСвойства); Иначе - Заголовок = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Группа значений свойства %1 (Создание)'"), ИмяСвойства); + Заголовок = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Группа значений свойства %1 (Создание)'"), ИмяСвойства); КонецЕсли; КонецЕсли; diff --git a/SSL/src/Catalogs/ЗначенияСвойствОбъектов/Forms/ФормаСписка/Form.form b/SSL/src/Catalogs/ЗначенияСвойствОбъектов/Forms/ФормаСписка/Form.form index 619fdd8e4..46ae8aee5 100644 --- a/SSL/src/Catalogs/ЗначенияСвойствОбъектов/Forms/ФормаСписка/Form.form +++ b/SSL/src/Catalogs/ЗначенияСвойствОбъектов/Forms/ФормаСписка/Form.form @@ -413,6 +413,7 @@ Left true + 16 true true @@ -608,6 +609,7 @@ true Auto Auto + ExpandTopLevel true true true @@ -652,7 +654,6 @@ true true true - UseIfNecessary auto true @@ -668,10 +669,7 @@ true - Список.РодительЭтоПапка - - - Список.ЭтоПапка + Список.DataVersion Список.Parent diff --git a/SSL/src/Catalogs/ЗначенияСвойствОбъектов/Forms/ФормаСписка/Module.bsl b/SSL/src/Catalogs/ЗначенияСвойствОбъектов/Forms/ФормаСписка/Module.bsl index f83c5febd..bac5b03e5 100644 --- a/SSL/src/Catalogs/ЗначенияСвойствОбъектов/Forms/ФормаСписка/Module.bsl +++ b/SSL/src/Catalogs/ЗначенияСвойствОбъектов/Forms/ФормаСписка/Module.bsl @@ -24,11 +24,6 @@ КонецЕсли; Если Параметры.РежимВыбора Тогда - - ОбщегоНазначенияКлиентСервер.УстановитьЭлементОтбораДинамическогоСписка( - Список, "ПометкаУдаления", Ложь, , , Истина, - РежимОтображенияЭлементаНастройкиКомпоновкиДанных.Обычный); - Если Параметры.Свойство("ВыборГруппИЭлементов") И Параметры.ВыборГруппИЭлементов = ИспользованиеГруппИЭлементов.Группы Тогда @@ -170,8 +165,8 @@ СтрокаЗаголовка = НСтр("ru = 'Выберите значение свойства %1'"); КонецЕсли; - СтрокаЗаголовка = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - СтрокаЗаголовка, Строка(ОбщегоНазначения.ЗначениеРеквизитаОбъекта( + СтрокаЗаголовка = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(СтрокаЗаголовка, + Строка(ОбщегоНазначения.ЗначениеРеквизитаОбъекта( Свойство, "Заголовок"))); ИначеЕсли Параметры.РежимВыбора Тогда diff --git a/SSL/src/Catalogs/ЗначенияСвойствОбъектов/Forms/ФормаЭлемента/Form.form b/SSL/src/Catalogs/ЗначенияСвойствОбъектов/Forms/ФормаЭлемента/Form.form index 13078a408..816f97834 100644 --- a/SSL/src/Catalogs/ЗначенияСвойствОбъектов/Forms/ФормаЭлемента/Form.form +++ b/SSL/src/Catalogs/ЗначенияСвойствОбъектов/Forms/ФормаЭлемента/Form.form @@ -189,7 +189,6 @@ true true true - UseIfNecessary auto true diff --git a/SSL/src/Catalogs/ЗначенияСвойствОбъектов/Forms/ФормаЭлемента/Module.bsl b/SSL/src/Catalogs/ЗначенияСвойствОбъектов/Forms/ФормаЭлемента/Module.bsl index cce6fed92..7c9b227ce 100644 --- a/SSL/src/Catalogs/ЗначенияСвойствОбъектов/Forms/ФормаЭлемента/Module.bsl +++ b/SSL/src/Catalogs/ЗначенияСвойствОбъектов/Forms/ФормаЭлемента/Module.bsl @@ -26,9 +26,11 @@ Если ПоказатьВес = Истина Тогда Элементы.Вес.Видимость = Истина; + СтандартныеПодсистемыСервер.УстановитьКлючНазначенияФормы(ЭтотОбъект, "ЗначенияСВесом"); Иначе Элементы.Вес.Видимость = Ложь; Объект.Вес = 0; + СтандартныеПодсистемыСервер.УстановитьКлючНазначенияФормы(ЭтотОбъект, "ЗначенияБезВеса"); КонецЕсли; УстановитьЗаголовок(); @@ -79,25 +81,21 @@ Если НЕ ПустаяСтрока(ИмяСвойства) Тогда Если ЗначениеЗаполнено(Объект.Ссылка) Тогда - Заголовок = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = '%1 (%2)'"), + Заголовок = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = '%1 (%2)'"), Объект.Наименование, ИмяСвойства); Иначе - Заголовок = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = '%1 (Создание)'"), ИмяСвойства); + Заголовок = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = '%1 (Создание)'"), ИмяСвойства); КонецЕсли; Иначе ИмяСвойства = Строка(ЗначенияРеквизитов.Заголовок); Если ЗначениеЗаполнено(Объект.Ссылка) Тогда - Заголовок = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = '%1 (Значение свойства %2)'"), + Заголовок = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = '%1 (Значение свойства %2)'"), Объект.Наименование, ИмяСвойства); Иначе - Заголовок = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Значение свойства %1 (Создание)'"), ИмяСвойства); + Заголовок = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Значение свойства %1 (Создание)'"), ИмяСвойства); КонецЕсли; КонецЕсли; diff --git a/SSL/src/Catalogs/ЗначенияСвойствОбъектовИерархия/Forms/ФормаСписка/Form.form b/SSL/src/Catalogs/ЗначенияСвойствОбъектовИерархия/Forms/ФормаСписка/Form.form index f21b93de2..43464a886 100644 --- a/SSL/src/Catalogs/ЗначенияСвойствОбъектовИерархия/Forms/ФормаСписка/Form.form +++ b/SSL/src/Catalogs/ЗначенияСвойствОбъектовИерархия/Forms/ФормаСписка/Form.form @@ -383,6 +383,7 @@ Left true + 16 true true @@ -570,6 +571,7 @@ true Auto Auto + ExpandTopLevel true true true @@ -614,7 +616,6 @@ true true true - UseIfNecessary auto true @@ -629,12 +630,6 @@ true - - Список.РодительЭтоПапка - - - Список.ЭтоПапка - Список.Parent diff --git a/SSL/src/Catalogs/ЗначенияСвойствОбъектовИерархия/Forms/ФормаСписка/Module.bsl b/SSL/src/Catalogs/ЗначенияСвойствОбъектовИерархия/Forms/ФормаСписка/Module.bsl index e96f45dc3..91c497c1a 100644 --- a/SSL/src/Catalogs/ЗначенияСвойствОбъектовИерархия/Forms/ФормаСписка/Module.bsl +++ b/SSL/src/Catalogs/ЗначенияСвойствОбъектовИерархия/Forms/ФормаСписка/Module.bsl @@ -23,13 +23,7 @@ НастроитьПорядокЗначенийПоСвойствам(Список); КонецЕсли; - Если Параметры.РежимВыбора Тогда - ОбщегоНазначенияКлиентСервер.УстановитьЭлементОтбораДинамическогоСписка( - Список, "ПометкаУдаления", Ложь, , , Истина, - РежимОтображенияЭлементаНастройкиКомпоновкиДанных.Обычный); - Иначе - Элементы.Список.РежимВыбора = Ложь; - КонецЕсли; + Элементы.Список.РежимВыбора = Параметры.РежимВыбора; УстановитьЗаголовок(); @@ -121,8 +115,7 @@ СтрокаЗаголовка = НСтр("ru = 'Выберите значение свойства %1'"); КонецЕсли; - СтрокаЗаголовка = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - СтрокаЗаголовка, Строка(Свойство)); + СтрокаЗаголовка = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(СтрокаЗаголовка, Строка(Свойство)); ИначеЕсли Параметры.РежимВыбора Тогда СтрокаЗаголовка = НСтр("ru = 'Выберите значение свойства'"); diff --git a/SSL/src/Catalogs/ЗначенияСвойствОбъектовИерархия/Forms/ФормаЭлемента/Form.form b/SSL/src/Catalogs/ЗначенияСвойствОбъектовИерархия/Forms/ФормаЭлемента/Form.form index 167d67592..a694816f6 100644 --- a/SSL/src/Catalogs/ЗначенияСвойствОбъектовИерархия/Forms/ФормаЭлемента/Form.form +++ b/SSL/src/Catalogs/ЗначенияСвойствОбъектовИерархия/Forms/ФормаЭлемента/Form.form @@ -183,7 +183,6 @@ true true true - UseIfNecessary auto true diff --git a/SSL/src/Catalogs/ЗначенияСвойствОбъектовИерархия/Forms/ФормаЭлемента/Module.bsl b/SSL/src/Catalogs/ЗначенияСвойствОбъектовИерархия/Forms/ФормаЭлемента/Module.bsl index cc8510a3a..a1a28a61c 100644 --- a/SSL/src/Catalogs/ЗначенияСвойствОбъектовИерархия/Forms/ФормаЭлемента/Module.bsl +++ b/SSL/src/Catalogs/ЗначенияСвойствОбъектовИерархия/Forms/ФормаЭлемента/Module.bsl @@ -26,9 +26,11 @@ Если ПоказатьВес = Истина Тогда Элементы.Вес.Видимость = Истина; + СтандартныеПодсистемыСервер.УстановитьКлючНазначенияФормы(ЭтотОбъект, "ЗначенияСВесом"); Иначе Элементы.Вес.Видимость = Ложь; Объект.Вес = 0; + СтандартныеПодсистемыСервер.УстановитьКлючНазначенияФормы(ЭтотОбъект, "ЗначенияБезВеса"); КонецЕсли; УстановитьЗаголовок(); @@ -79,25 +81,21 @@ Если НЕ ПустаяСтрока(ИмяСвойства) Тогда Если ЗначениеЗаполнено(Объект.Ссылка) Тогда - Заголовок = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = '%1 (%2)'"), + Заголовок = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = '%1 (%2)'"), Объект.Наименование, ИмяСвойства); Иначе - Заголовок = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = '%1 (Создание)'"), ИмяСвойства); + Заголовок = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = '%1 (Создание)'"), ИмяСвойства); КонецЕсли; Иначе ИмяСвойства = Строка(ЗначенияРеквизитов.Заголовок); Если ЗначениеЗаполнено(Объект.Ссылка) Тогда - Заголовок = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = '%1 (Значение свойства %2)'"), + Заголовок = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = '%1 (Значение свойства %2)'"), Объект.Наименование, ИмяСвойства); Иначе - Заголовок = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Значение свойства %1 (Создание)'"), ИмяСвойства); + Заголовок = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Значение свойства %1 (Создание)'"), ИмяСвойства); КонецЕсли; КонецЕсли; diff --git a/SSL/src/Catalogs/ИдентификаторыОбъектовМетаданных/Forms/ФормаСписка/Form.form b/SSL/src/Catalogs/ИдентификаторыОбъектовМетаданных/Forms/ФормаСписка/Form.form index 28dd57d8c..cc0cc45c0 100644 --- a/SSL/src/Catalogs/ИдентификаторыОбъектовМетаданных/Forms/ФормаСписка/Form.form +++ b/SSL/src/Catalogs/ИдентификаторыОбъектовМетаданных/Forms/ФормаСписка/Form.form @@ -37,6 +37,405 @@ КоманднаяПанель 23 + + ФормаИзменить + 34 + true + true + + true + + + ФормаИзменитьРасширеннаяПодсказка + 35 + Label + true + true + + Left + + + Form.StandardCommand.Change + Normal + Auto + true + true + UserCmds + Auto + + + ФормаОбновить + 36 + true + true + + true + + + ФормаОбновитьРасширеннаяПодсказка + 37 + Label + true + true + + Left + + + Form.StandardCommand.Refresh + Normal + Auto + true + true + UserCmds + Auto + + + ФормаРежимПросмотра + 70 + + ФормаИерархическийСписок + 38 + true + true + + true + + + ФормаИерархическийСписокРасширеннаяПодсказка + 39 + Label + true + true + + Left + + + Form.StandardCommand.HierarchicalList + Normal + Auto + true + true + UserCmds + Auto + + + ФормаСписок + 40 + true + true + + true + + + ФормаСписокРасширеннаяПодсказка + 41 + Label + true + true + + Left + + + Form.StandardCommand.List + Normal + Auto + true + true + UserCmds + Auto + + + ФормаДерево + 42 + true + true + + true + + + ФормаДеревоРасширеннаяПодсказка + 43 + Label + true + true + + Left + + + Form.StandardCommand.Tree + Normal + Auto + true + true + UserCmds + Auto + + true + true + + true + + + <key>ru</key> + <value>Режим просмотра</value> + + + ru + Форма режим просмотра + + + ФормаРежимПросмотраРасширеннаяПодсказка + 71 + Label + true + true + + Left + + + Popup + + + StdPicture.ListViewMode + + Auto + Normal + + + + ФормаНайти + 52 + true + true + + true + + + ФормаНайтиРасширеннаяПодсказка + 53 + Label + true + true + + Left + + + Form.StandardCommand.Find + Normal + Auto + true + true + UserCmds + Auto + + + ФормаОтменитьПоиск + 54 + true + true + + true + + + ФормаОтменитьПоискРасширеннаяПодсказка + 55 + Label + true + true + + Left + + + Form.StandardCommand.CancelSearch + Normal + Auto + true + true + UserCmds + Auto + + + ФормаНастройкаСписка + 56 + true + true + + true + + + ФормаНастройкаСпискаРасширеннаяПодсказка + 57 + Label + true + true + + Left + + + Form.StandardCommand.ListSettings + Normal + Auto + true + true + UserCmds + Auto + + + ФормаЗагрузитьНастройкиДинамическогоСписка + 64 + true + true + + true + + + ФормаЗагрузитьНастройкиДинамическогоСпискаРасширеннаяПодсказка + 65 + Label + true + true + + Left + + + Form.StandardCommand.LoadDynamicListSettings + Normal + Auto + true + true + UserCmds + Auto + + + ФормаСохранитьНастройкиДинамическогоСписка + 66 + true + true + + true + + + ФормаСохранитьНастройкиДинамическогоСпискаРасширеннаяПодсказка + 67 + Label + true + true + + Left + + + Form.StandardCommand.SaveDynamicListSettings + Normal + Auto + true + true + UserCmds + Auto + + + ФормаСтандартныеНастройкиДинамическогоСписка + 68 + true + true + + true + + + ФормаСтандартныеНастройкиДинамическогоСпискаРасширеннаяПодсказка + 69 + Label + true + true + + Left + + + Form.StandardCommand.DynamicListStandardSettings + Normal + Auto + true + true + UserCmds + Auto + + + ФормаВывестиСписок + 58 + true + true + + true + + + ФормаВывестиСписокРасширеннаяПодсказка + 59 + Label + true + true + + Left + + + Form.StandardCommand.OutputList + Normal + Auto + true + true + UserCmds + Auto + + + ФормаИзменитьФорму + 62 + true + true + + true + + + ФормаИзменитьФормуРасширеннаяПодсказка + 63 + Label + true + true + + Left + + + Form.StandardCommand.CustomizeForm + Normal + Auto + true + true + UserCmds + Auto + + + ФормаСправка + 60 + true + true + + true + + + ФормаСправкаРасширеннаяПодсказка + 61 + Label + true + true + + Left + + + Form.StandardCommand.Help + Normal + Auto + true + true + UserCmds + Auto + true true @@ -59,7 +458,6 @@ CommandBar Left - Form @@ -337,7 +735,6 @@ true true true - UseIfNecessary auto true @@ -352,12 +749,6 @@ true - - Список.Используется - - - Список.КоллекцияПорядок - Список.Description @@ -367,6 +758,9 @@ Список.Ref + + Список.Имя + Список.ПометкаБудущегоУдаления diff --git a/SSL/src/Catalogs/ИдентификаторыОбъектовМетаданных/Forms/ФормаСписка/Module.bsl b/SSL/src/Catalogs/ИдентификаторыОбъектовМетаданных/Forms/ФормаСписка/Module.bsl index 46b39788b..1872c963a 100644 --- a/SSL/src/Catalogs/ИдентификаторыОбъектовМетаданных/Forms/ФормаСписка/Module.bsl +++ b/SSL/src/Catalogs/ИдентификаторыОбъектовМетаданных/Forms/ФормаСписка/Module.bsl @@ -4,21 +4,7 @@ &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) - Если Параметры.Свойство("АвтоТест") Тогда // Возврат при получении формы для анализа. - Возврат; - КонецЕсли; - - Если Параметры.РежимВыбора Тогда - СтандартныеПодсистемыСервер.УстановитьКлючНазначенияФормы(ЭтотОбъект, "ВыборПодбор"); - РежимОткрытияОкна = РежимОткрытияОкнаФормы.БлокироватьОкноВладельца; - Элементы.Список.РежимВыбора = Истина; - Параметры.Отбор.Вставить("ПометкаУдаления", Ложь); - Параметры.Отбор.Вставить("ПометкаБудущегоУдаления", Ложь); - КонецЕсли; - - Параметры.Свойство("ВыбиратьГруппыОбъектовМетаданных", ВыбиратьГруппыОбъектовМетаданных); - - УпорядочитьИОформитьСписок(); + Справочники.ИдентификаторыОбъектовМетаданных.ФормаСпискаПриСозданииНаСервере(ЭтотОбъект); КонецПроцедуры @@ -29,94 +15,8 @@ &НаКлиенте Процедура СписокВыборЗначения(Элемент, Значение, СтандартнаяОбработка) - Если НЕ ВыбиратьГруппыОбъектовМетаданных - И Элемент.ТекущиеДанные <> Неопределено - И НЕ ЗначениеЗаполнено(Элемент.ТекущиеДанные.Родитель) Тогда - - СтандартнаяОбработка = Ложь; - - Если Элемент.Отображение = ОтображениеТаблицы.Дерево Тогда - Если Элемент.Развернут(Элемент.ТекущаяСтрока) Тогда - Элемент.Свернуть(Элемент.ТекущаяСтрока); - Иначе - Элемент.Развернуть(Элемент.ТекущаяСтрока); - КонецЕсли; - - ИначеЕсли Элемент.Отображение = ОтображениеТаблицы.ИерархическийСписок Тогда - - Если Элемент.ТекущийРодитель <> Элемент.ТекущаяСтрока Тогда - Элемент.ТекущийРодитель = Элемент.ТекущаяСтрока; - Иначе - ТекущаяСтрока = Элемент.ТекущаяСтрока; - Элемент.ТекущийРодитель = Неопределено; - Элемент.ТекущаяСтрока = ТекущаяСтрока; - КонецЕсли; - Иначе - ПоказатьПредупреждение(, - НСтр("ru = 'Невозможно выбрать группу объектов метаданных. - |Выберите объект метаданных.'")); - КонецЕсли; - КонецЕсли; - -КонецПроцедуры - -#КонецОбласти - -#Область СлужебныеПроцедурыИФункции - -&НаСервере -Процедура УпорядочитьИОформитьСписок() - - // Порядок. - Порядок = Список.КомпоновщикНастроек.Настройки.Порядок; - Порядок.ИдентификаторПользовательскойНастройки = "ОсновнойПорядок"; - - Порядок.Элементы.Очистить(); - - ЭлементПорядка = Порядок.Элементы.Добавить(Тип("ЭлементПорядкаКомпоновкиДанных")); - ЭлементПорядка.Поле = Новый ПолеКомпоновкиДанных("ПометкаУдаления"); - ЭлементПорядка.ТипУпорядочивания = НаправлениеСортировкиКомпоновкиДанных.Убыв; - ЭлементПорядка.РежимОтображения = РежимОтображенияЭлементаНастройкиКомпоновкиДанных.Недоступный; - ЭлементПорядка.Использование = Истина; - - ЭлементПорядка = Порядок.Элементы.Добавить(Тип("ЭлементПорядкаКомпоновкиДанных")); - ЭлементПорядка.Поле = Новый ПолеКомпоновкиДанных("ПорядокКоллекции"); - ЭлементПорядка.ТипУпорядочивания = НаправлениеСортировкиКомпоновкиДанных.Возр; - ЭлементПорядка.РежимОтображения = РежимОтображенияЭлементаНастройкиКомпоновкиДанных.Недоступный; - ЭлементПорядка.Использование = Истина; - - ЭлементПорядка = Порядок.Элементы.Добавить(Тип("ЭлементПорядкаКомпоновкиДанных")); - ЭлементПорядка.Поле = Новый ПолеКомпоновкиДанных("Родитель"); - ЭлементПорядка.ТипУпорядочивания = НаправлениеСортировкиКомпоновкиДанных.Возр; - ЭлементПорядка.РежимОтображения = РежимОтображенияЭлементаНастройкиКомпоновкиДанных.Недоступный; - ЭлементПорядка.Использование = Истина; - - ЭлементПорядка = Порядок.Элементы.Добавить(Тип("ЭлементПорядкаКомпоновкиДанных")); - ЭлементПорядка.Поле = Новый ПолеКомпоновкиДанных("Синоним"); - ЭлементПорядка.ТипУпорядочивания = НаправлениеСортировкиКомпоновкиДанных.Возр; - ЭлементПорядка.РежимОтображения = РежимОтображенияЭлементаНастройкиКомпоновкиДанных.Недоступный; - ЭлементПорядка.Использование = Истина; - - // Оформление. - ЭлементУсловногоОформления = УсловноеОформление.Элементы.Добавить(); - - ЭлементЦветаОформления = ЭлементУсловногоОформления.Оформление.Элементы.Найти("TextColor"); - ЭлементЦветаОформления.Значение = Метаданные.ЭлементыСтиля.НедоступныеДанныеЦвет.Значение; - ЭлементЦветаОформления.Использование = Истина; - - ЭлементОтбораДанных = ЭлементУсловногоОформления.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); - ЭлементОтбораДанных.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Список.ПометкаБудущегоУдаления"); - ЭлементОтбораДанных.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно; - ЭлементОтбораДанных.ПравоеЗначение = Истина; - ЭлементОтбораДанных.Использование = Истина; - - ЭлементОформляемогоПоля = ЭлементУсловногоОформления.Поля.Элементы.Добавить(); - ЭлементОформляемогоПоля.Поле = Новый ПолеКомпоновкиДанных("Синоним"); - ЭлементОформляемогоПоля.Использование = Истина; - - ЭлементОформляемогоПоля = ЭлементУсловногоОформления.Поля.Элементы.Добавить(); - ЭлементОформляемогоПоля.Поле = Новый ПолеКомпоновкиДанных("ПолноеИмя"); - ЭлементОформляемогоПоля.Использование = Истина; + СтандартныеПодсистемыКлиент.ИдентификаторыОбъектовМетаданныхФормаСпискаСписокВыборЗначения(ЭтотОбъект, + Элемент, Значение, СтандартнаяОбработка); КонецПроцедуры diff --git a/SSL/src/Catalogs/ИдентификаторыОбъектовМетаданных/Forms/ФормаЭлемента/Form.form b/SSL/src/Catalogs/ИдентификаторыОбъектовМетаданных/Forms/ФормаЭлемента/Form.form index ddb861a21..603631dcd 100644 --- a/SSL/src/Catalogs/ИдентификаторыОбъектовМетаданных/Forms/ФормаЭлемента/Form.form +++ b/SSL/src/Catalogs/ИдентификаторыОбъектовМетаданных/Forms/ФормаЭлемента/Form.form @@ -503,6 +503,136 @@ ФормаКоманднаяПанель -1 + + ФормаЗаписатьИЗакрыть + 45 + true + true + + true + + + ФормаЗаписатьИЗакрытьРасширеннаяПодсказка + 46 + Label + true + true + + Left + + + Form.StandardCommand.WriteAndClose + Normal + Auto + true + true + UserCmds + Auto + + + ФормаЗаписать + 47 + true + true + + true + + + ФормаЗаписатьРасширеннаяПодсказка + 48 + Label + true + true + + Left + + + Form.StandardCommand.Write + Normal + Auto + true + true + UserCmds + Auto + + + ФормаПеречитать + 49 + true + true + + true + + + ФормаПеречитатьРасширеннаяПодсказка + 50 + Label + true + true + + Left + + + Form.StandardCommand.Reread + Normal + Auto + true + true + UserCmds + Auto + + + ФормаУстановитьПометкуУдаления + 51 + true + true + + true + + + ФормаУстановитьПометкуУдаленияРасширеннаяПодсказка + 52 + Label + true + true + + Left + + + Form.StandardCommand.SetDeletionMark + Normal + Auto + true + true + UserCmds + Auto + + + ФормаПоказатьВСписке + 53 + true + true + + true + + + ФормаПоказатьВСпискеРасширеннаяПодсказка + 54 + Label + true + true + + Left + + + Form.StandardCommand.ShowInList + Normal + Auto + true + true + UserCmds + Auto + ФормаВключитьВозможностьРедактирования 29 @@ -530,8 +660,59 @@ Auto InAdditionalSubmenu + + ФормаИзменитьФорму + 55 + true + true + + true + + + ФормаИзменитьФормуРасширеннаяПодсказка + 56 + Label + true + true + + Left + + + Form.StandardCommand.CustomizeForm + Normal + Auto + true + true + UserCmds + Auto + + + ФормаСправка + 57 + true + true + + true + + + ФормаСправкаРасширеннаяПодсказка + 58 + Label + true + true + + Left + + + Form.StandardCommand.Help + Normal + Auto + true + true + UserCmds + Auto + Left - true OnCreateAtServer @@ -547,7 +728,6 @@ true true true - UseIfNecessary auto true @@ -602,19 +782,58 @@ ВключитьВозможностьРедактирования - Auto + DontUse Auto + + InformationRegister.НастройкиВерсионированияОбъектов.StandardCommand.OpenByValue.ТипОбъекта + + + + CommonCommand.МоиЗаметкиПоПредмету + + InformationRegister.НазначениеДополнительныхОбработок.StandardCommand.OpenByValue.ОбъектНазначения - FormNavigationPanelGoTo - 0 + + + + CommonCommand.ПрисоединенныеФайлыКОбъекту + + + + CommonCommand.РолиИИсполнителиЗадач + + + + CommonCommand.ИсторияИзменений - + + + Catalog.ВнешниеПользователи.Command.ВнешнийДоступ + + + + CommonCommand.ЗаполнениеОбъекта + + + + CommonCommand.ОтчетыОбъекта + + + + CommonCommand.СозданиеСвязанныхОбъектов + + + + CommonCommand.СоздатьЗаметкуПоПредмету + + + diff --git a/SSL/src/Catalogs/ИдентификаторыОбъектовМетаданных/Forms/ФормаЭлемента/Help/ru.html b/SSL/src/Catalogs/ИдентификаторыОбъектовМетаданных/Forms/ФормаЭлемента/Help/ru.html index 4eadaa994..12d1cb2d0 100644 --- a/SSL/src/Catalogs/ИдентификаторыОбъектовМетаданных/Forms/ФормаЭлемента/Help/ru.html +++ b/SSL/src/Catalogs/ИдентификаторыОбъектовМетаданных/Forms/ФормаЭлемента/Help/ru.html @@ -1,5 +1,5 @@ -

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

    +

    Просмотр свойств идентификатора объекта метаданных конфигурации.

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

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

    • Представление; diff --git a/SSL/src/Catalogs/ИдентификаторыОбъектовМетаданных/Forms/ФормаЭлемента/Module.bsl b/SSL/src/Catalogs/ИдентификаторыОбъектовМетаданных/Forms/ФормаЭлемента/Module.bsl index 6831af456..ed2976380 100644 --- a/SSL/src/Catalogs/ИдентификаторыОбъектовМетаданных/Forms/ФормаЭлемента/Module.bsl +++ b/SSL/src/Catalogs/ИдентификаторыОбъектовМетаданных/Forms/ФормаЭлемента/Module.bsl @@ -4,23 +4,7 @@ &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) - Если Параметры.Свойство("АвтоТест") Тогда // Возврат при получении формы для анализа. - Возврат; - КонецЕсли; - - ТолькоПросмотр = Истина; - - ПустаяСсылкаПредставление = Строка(ТипЗнч(Объект.ЗначениеПустойСсылки)); - - Если НЕ Пользователи.ЭтоПолноправныйПользователь(, Истина) - ИЛИ Справочники.ИдентификаторыОбъектовМетаданных.ЗапрещеноИзменятьПолноеИмя(Объект) Тогда - - Элементы.ФормаВключитьВозможностьРедактирования.Видимость = Ложь; - КонецЕсли; - - Если ОбщегоНазначения.ЭтоПодчиненныйУзелРИБ() Тогда - Элементы.ФормаВключитьВозможностьРедактирования.Видимость = Ложь; - КонецЕсли; + Справочники.ИдентификаторыОбъектовМетаданных.ФормаЭлементаПриСозданииНаСервере(ЭтотОбъект); КонецПроцедуры diff --git a/SSL/src/Catalogs/ИдентификаторыОбъектовМетаданных/ManagerModule.bsl b/SSL/src/Catalogs/ИдентификаторыОбъектовМетаданных/ManagerModule.bsl index ed1693184..bf7b6269d 100644 --- a/SSL/src/Catalogs/ИдентификаторыОбъектовМетаданных/ManagerModule.bsl +++ b/SSL/src/Catalogs/ИдентификаторыОбъектовМетаданных/ManagerModule.bsl @@ -21,7 +21,7 @@ КонецПроцедуры -// Требуется, чтобы выгрузить все идентификаторы объектов метаданных +// Требуется, чтобы выгрузить все идентификаторы объектов метаданных конфигурации // в подчиненные узлы РИБ, если ранее справочник не был включен в РИБ. // Также может использоваться для ремонта данных справочника в РИБ-узлах. // @@ -29,28 +29,30 @@ ПроверкаИспользования(); - Если ОбщегоНазначения.ЭтоПодчиненныйУзелРИБ() Тогда + Если ОбщегоНазначения.ЭтоПодчиненныйУзелРИБ() + Или Не ОбщегоНазначенияПовтИсп.ДоступноИспользованиеРазделенныхДанных() Тогда Возврат; КонецЕсли; + МетаданныеСправочника = Метаданные.Справочники.ИдентификаторыОбъектовМетаданных; + УзлыРИБ = Новый Массив; Для каждого ПланОбмена Из Метаданные.ПланыОбмена Цикл Если ПланОбмена.РаспределеннаяИнформационнаяБаза - И ПланОбмена.Состав.Содержит(Метаданные.Справочники.ИдентификаторыОбъектовМетаданных)Тогда - - ПланОбменаМенеджер = ОбщегоНазначения.МенеджерОбъектаПоПолномуИмени(ПланОбмена.ПолноеИмя()); - Выборка = ПланОбменаМенеджер.Выбрать(); - Пока Выборка.Следующий() Цикл - Если Выборка.Ссылка <> ПланОбменаМенеджер.ЭтотУзел() Тогда - УзлыРИБ.Добавить(Выборка.Ссылка); - КонецЕсли; - КонецЦикла; + И ПланОбмена.Состав.Содержит(МетаданныеСправочника)Тогда + + ПланОбменаМенеджер = ОбщегоНазначения.МенеджерОбъектаПоПолномуИмени(ПланОбмена.ПолноеИмя()); + Выборка = ПланОбменаМенеджер.Выбрать(); + Пока Выборка.Следующий() Цикл + Если Выборка.Ссылка <> ПланОбменаМенеджер.ЭтотУзел() Тогда + УзлыРИБ.Добавить(Выборка.Ссылка); + КонецЕсли; + КонецЦикла; КонецЕсли; КонецЦикла; Если УзлыРИБ.Количество() > 0 Тогда - СтандартныеПодсистемыСервер.ПланыОбменаМенеджер().ЗарегистрироватьИзменения( - УзлыРИБ, Метаданные.Справочники.ИдентификаторыОбъектовМетаданных); + ПланыОбмена.ЗарегистрироватьИзменения(УзлыРИБ, МетаданныеСправочника); КонецЕсли; КонецПроцедуры @@ -66,17 +68,64 @@ КонецФункции +// Возвращает реквизиты справочника, которые образуют естественный ключ +// для элементов справочника. +// +// Возвращаемое значение: Массив(Строка) - массив имен реквизитов, образующих +// естественный ключ. +// +Функция ПоляЕстественногоКлюча() Экспорт + + Результат = Новый Массив; + Результат.Добавить("ПолноеИмя"); + + Возврат Результат; + +КонецФункции + #КонецОбласти #Область СлужебныйПрограммныйИнтерфейс +// Только для внутреннего использования. +Процедура ПроверкаИспользования(ОбъектыРасширений = Ложь) Экспорт + + Если СтандартныеПодсистемыПовтИсп.ОтключитьИдентификаторыОбъектовМетаданных() Тогда + ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Справочник ""%1"" не используется.'"), НазваниеСправочника(ОбъектыРасширений)); + КонецЕсли; + + Если ОбъектыРасширений И Не ОбщегоНазначенияПовтИсп.ДоступноИспользованиеРазделенныхДанных() Тогда + ВызватьИсключение ОписаниеОшибкиИдентификаторыОбъектовРасширенийНедоступныВНеразделенномРежиме(); + КонецЕсли; + + УстановитьПривилегированныйРежим(Истина); + + Если ПланыОбмена.ГлавныйУзел() = Неопределено + И ЗначениеЗаполнено(ОбщегоНазначения.МенеджерОбъектаПоПолномуИмени("Константа.ГлавныйУзел").Получить()) Тогда + + ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Справочник ""%1"" не может использоваться + |в информационной базе с неподтвержденной отменой главного узла. + | + |Для восстановления связи с главным узлом запустите 1С:Предприятие и + |нажмите кнопку Восстановить или программно установите главный узел, + |сохраненный в константе Главный узел. + | + |Для подтверждения отмены связи с главным узлом запустите 1С:Предприятие и + |нажмите кнопку Отключить или программно очистите константу Главный узел.'"), + НазваниеСправочника(ОбъектыРасширений)); + КонецЕсли; + +КонецПроцедуры + // Возвращает Истина, если проверка, обновление и замена дублей завершена. // // Параметры: // Сообщить - Булево - если передать Истина, тогда будет вызвано исключение // по ошибке обращения к необновленным параметрам работы программы. // -Функция ДанныеОбновлены(Сообщить = Ложь) Экспорт +Функция ДанныеОбновлены(Сообщить = Ложь, ОбъектыРасширений = Ложь) Экспорт Если Сообщить Тогда Отказ = Неопределено; @@ -87,324 +136,38 @@ СтандартныеПодсистемыСервер.ПроверитьОбновлениеПараметровРаботыПрограммы( "ПараметрыБазовойФункциональности", "ИдентификаторыОбъектовМетаданных", Отказ); - Возврат Отказ <> Истина; - -КонецФункции - -// Процедура обновляет данные справочника по метаданным конфигурации. -// -// Параметры: -// ЕстьИзменения - Булево (возвращаемое значение) - в этот параметр возвращается -// значение Истина, если производилась запись, иначе не изменяется. -// -// ЕстьУдаленные - Булево (возвращаемое значение) - в этот параметр возвращается -// значение Истина, если хотя бы один элемент справочника был помечен -// на удаление, иначе не изменяется. -// -// ТолькоПроверка - Булево (возвращаемое значение) - не производит никаких изменений, -// а лишь выполняет установку флажков ЕстьИзменения, ЕстьУдаленные, -// ЕстьКритичныеИзменения. -// -// ЕстьКритичныеИзменения - (возвращаемое значение) - в этот параметр возвращается -// значение Истина, если найдены критичные изменения, иначе не изменяется. -// Критичные изменения (только для не помеченных на удаление): -// - изменении реквизита ПолноеИмя, -// - добавление нового элемента справочника. -// В общем случае, критичные изменения требуют монопольный режим. -// -// СписокКритичныхИзменений - Строка (возвращаемое значение) - содержит полные имена -// объектов метаданных, которые добавлены или требуется добавить, -// а также объектов метаданных, полные имена которых изменены или требуется изменить. -// -Процедура ВыполнитьОбновлениеДанных(ЕстьИзменения, ЕстьУдаленные, ТолькоПроверка = Ложь, - ЕстьКритичныеИзменения = Ложь, СписокКритичныхИзменений = "") Экспорт - - ПроверкаИспользования(); - - УстановитьПривилегированныйРежим(Истина); - - ЕстьТекущиеИзменения = Ложь; - ЗаменитьДублиПодчиненногоУзлаНайденныеПриЗагрузке(ТолькоПроверка, ЕстьТекущиеИзменения); - Если ЕстьТекущиеИзменения Тогда - ЕстьИзменения = Истина; + Если Отказ = Истина Тогда + Возврат Ложь; КонецЕсли; - СвойстваОбъектовМетаданных = СвойстваОбъектовМетаданных(); - СправочникМенеджер = ОбщегоНазначения.МенеджерОбъектаПоПолномуИмени("Справочник.ИдентификаторыОбъектовМетаданных"); - - // Найден - состояние, когда для объекта метаданных найден идентификатор. - СвойстваОбъектовМетаданных.Колонки.Добавить("Найден", Новый ОписаниеТипов("Булево")); - - // Порядок обновления: - // 1. Переименование объектов метаданных (с учетом нижестоящих подсистем). - // 2. Обновление предопределенных идентификаторов (коллекций объектов метаданных). - // 3. Обновление идентификаторов объектов метаданных, которые имеют ключ объекта метаданных. - // 4. Обновление идентификаторов объектов метаданных, которые не имеют ключа объекта метаданных. - // 5. В процессе 3 и 4 пометка удаления дублей идентификаторов (по полным именам). - // 6. Добавление новых идентификаторов объектов метаданных. - // 7. Обновление родителей идентификаторов объектов метаданных и запись обновленных. - - Блокировка = Новый БлокировкаДанных; - ЭлементБлокировки = Блокировка.Добавить("Справочник.ИдентификаторыОбъектовМетаданных"); - ЭлементБлокировки.Режим = РежимБлокировкиДанных.Исключительный; - - СнятьМонопольныйРежим = Ложь; - НачатьТранзакцию(); - Попытка - Блокировка.Заблокировать(); + Если ОбъектыРасширений + И ЗначениеЗаполнено(ПараметрыСеанса.УстановленныеРасширения) + И Не СтандартныеПодсистемыСервер.УстановленныеРасширенияНедоступны() Тогда - Выгрузка = ВыгрузкаВсехИдентификаторов(); - Выгрузка.Колонки.Добавить("Обновлен", Новый ОписаниеТипов("Булево")); - Выгрузка.Колонки.Добавить("ОбъектМетаданных"); - Выгрузка.Колонки.Удалить("НоваяСсылка"); - - Если НЕ ОбщегоНазначения.ЭтоПодчиненныйУзелРИБ() Тогда - // Переименование полных имен перед обработкой (для РИБ только в главном узле). - ПереименоватьПолныеИмена(Выгрузка); - КонецЕсли; - - СписокПереименованийОбъектовМетаданных = ""; - ЕстьТекущиеКритичныеИзменения = Ложь; - - // Обработка идентификаторов объектов метаданных. - Для каждого Свойства Из Выгрузка Цикл - - // Проверка и обновление свойств идентификаторов коллекций объектов метаданных. - Если Свойства.ЭтоКоллекция Тогда - ПроверитьОбновитьСвойстваКоллекции(Свойства); - Продолжить; - КонецЕсли; - - КлючОбъектаМетаданных = Свойства.КлючОбъектаМетаданных; - ОбъектМетаданных = ОбъектМетаданныхПоКлючу(КлючОбъектаМетаданных); - - Если ОбъектМетаданных = Неопределено Тогда - // Если объект метаданных без ключа, то его можно найти только по полному имени. - ОбъектМетаданных = МетаданныеНайтиПоПолномуИмени(Свойства.ПолноеИмя); + Если Не ОбщегоНазначенияПовтИсп.ДоступноИспользованиеРазделенныхДанных() Тогда + Если Сообщить Тогда + ВызватьИсключение ОписаниеОшибкиИдентификаторыОбъектовРасширенийНедоступныВНеразделенномРежиме(); Иначе - // Если объект метаданных удалялся с целью реструктуризации, тогда - // старый идентификатор нужно использовать для нового объекта метаданных, - // а для старых объектов метаданных создать новые идентификаторы. - Если ВРег(Лев(ОбъектМетаданных.Имя, СтрДлина("Удалить"))) = ВРег("Удалить") - И ВРег(Лев(Свойства.Имя, СтрДлина("Удалить"))) <> ВРег("Удалить") Тогда - - НовыйОбъектМетаданных = МетаданныеНайтиПоПолномуИмени(Свойства.ПолноеИмя); - Если НовыйОбъектМетаданных <> Неопределено Тогда - ОбъектМетаданных = НовыйОбъектМетаданных; - КлючОбъектаМетаданных = Неопределено; // Чтобы выполнить обновление идентификатора. - КонецЕсли; - КонецЕсли; + Возврат Ложь; КонецЕсли; - - // Если объект метаданных найден по ключу или полному имени, - // тогда нужно подготовить строку свойств объекта метаданных. - Если ОбъектМетаданных <> Неопределено Тогда - СвойстваОбъекта = СвойстваОбъектовМетаданных.Найти(ОбъектМетаданных.ПолноеИмя(), "ПолноеИмя"); - Если СвойстваОбъекта = Неопределено Тогда - ОбъектМетаданных = Неопределено; - Иначе - Свойства.ОбъектМетаданных = ОбъектМетаданных; - КонецЕсли; - КонецЕсли; - - Если ОбъектМетаданных = Неопределено ИЛИ СвойстваОбъекта.Найден Тогда - // Если объект метаданных не найден или найден повторно - // тогда идентификатор требуется пометить на удаление. - СвойстваОбновлены = Ложь; - ОбновитьСвойстваПомеченногоНаУдаление(Свойства, СвойстваОбновлены, ЕстьУдаленные); - Если СвойстваОбновлены Тогда - Свойства.Обновлен = Истина; - КонецЕсли; - Иначе - // Обновление свойств существующих объектов метаданных, если изменились. - СвойстваОбъекта.Найден = Истина; - Если Свойства.Наименование <> СвойстваОбъекта.Наименование - ИЛИ Свойства.ПорядокКоллекции <> СвойстваОбъекта.ПорядокКоллекции - ИЛИ Свойства.Имя <> СвойстваОбъекта.Имя - ИЛИ Свойства.Синоним <> СвойстваОбъекта.Синоним - ИЛИ Свойства.ПолноеИмя <> СвойстваОбъекта.ПолноеИмя - ИЛИ Свойства.ПолныйСиноним <> СвойстваОбъекта.ПолныйСиноним - ИЛИ Свойства.БезДанных <> СвойстваОбъекта.БезДанных - ИЛИ Свойства.ЗначениеПустойСсылки <> СвойстваОбъекта.ЗначениеПустойСсылки - ИЛИ Свойства.ИмяПредопределенныхДанных <> "" - ИЛИ Свойства.ПометкаУдаления - ИЛИ КлючОбъектаМетаданных = Неопределено - ИЛИ СвойстваОбъекта.БезКлючаОбъектаМетаданных - И КлючОбъектаМетаданных <> Тип("Неопределено") Тогда - - Если ВРег(Свойства.ПолноеИмя) <> ВРег(СвойстваОбъекта.ПолноеИмя) Тогда - ЕстьТекущиеКритичныеИзменения = Истина; - ЕстьКритичныеИзменения = Истина; - СписокПереименованийОбъектовМетаданных = СписокПереименованийОбъектовМетаданных - + ?(ЗначениеЗаполнено(СписокПереименованийОбъектовМетаданных), "," + Символы.ПС, "") - + Свойства.ПолноеИмя + " -> " + СвойстваОбъекта.ПолноеИмя; - КонецЕсли; - - // Установка новых свойств идентификатора объекта метаданных. - ЗаполнитьЗначенияСвойств(Свойства, СвойстваОбъекта); - - Свойства.ИмяПредопределенныхДанных = ""; - - Если КлючОбъектаМетаданных = Неопределено - ИЛИ СвойстваОбъекта.БезКлючаОбъектаМетаданных - И КлючОбъектаМетаданных <> Тип("Неопределено") Тогда - - Свойства.КлючОбъектаМетаданных = КлючОбъектаМетаданных(СвойстваОбъекта.ПолноеИмя); - КонецЕсли; - - Свойства.ПометкаУдаления = Ложь; - Свойства.Обновлен = Истина; - КонецЕсли; - КонецЕсли; - КонецЦикла; - - СписокНовыхОбъектовМетаданных = ""; - - // Добавление идентификаторов новых объектов метаданных. - Для каждого СвойстваОбъекта Из СвойстваОбъектовМетаданных.НайтиСтроки(Новый Структура("Найден", Ложь)) Цикл - Свойства = Выгрузка.Добавить(); - ЗаполнитьЗначенияСвойств(Свойства, СвойстваОбъекта); - Свойства.ЭтоНовый = Истина; - Свойства.Ссылка = ПолучитьСсылку(); - Свойства.ПометкаУдаления = Ложь; - Свойства.ОбъектМетаданных = СвойстваОбъекта.ОбъектМетаданных; - Свойства.КлючОбъектаМетаданных = КлючОбъектаМетаданных(Свойства.ПолноеИмя); - ЕстьТекущиеКритичныеИзменения = Истина; - ЕстьКритичныеИзменения = Истина; - СписокНовыхОбъектовМетаданных = СписокНовыхОбъектовМетаданных - + ?(ЗначениеЗаполнено(СписокНовыхОбъектовМетаданных), "," + Символы.ПС, "") - + СвойстваОбъекта.ПолноеИмя; - КонецЦикла; - - СписокКритичныхИзменений = ""; - Если ЗначениеЗаполнено(СписокПереименованийОбъектовМетаданных) Тогда - СписокКритичныхИзменений = НСтр("ru = 'Переименование идентификаторов объектов метаданных СтароеПолноеИмя -> НовоеПолноеИмя:'") - + Символы.ПС + СписокПереименованийОбъектовМетаданных + Символы.ПС + Символы.ПС; - КонецЕсли; - Если ЗначениеЗаполнено(СписокНовыхОбъектовМетаданных) Тогда - СписокКритичныхИзменений = СписокКритичныхИзменений - + НСтр("ru = 'Добавление новых идентификаторов объектов метаданных:'") - + Символы.ПС + СписокНовыхОбъектовМетаданных + Символы.ПС; КонецЕсли; - Если НЕ (ТолькоПроверка ИЛИ МонопольныйРежим()) - И ЕстьТекущиеКритичныеИзменения Тогда - - ЗафиксироватьТранзакцию(); - Попытка - УстановитьМонопольныйРежим(Истина); - Исключение - НачатьТранзакцию(); - ВызватьИсключение; - КонецПопытки; - СнятьМонопольныйРежим = Истина; - НачатьТранзакцию(); - КонецЕсли; + Запрос = Новый Запрос; + Запрос.УстановитьПараметр("ВерсияРасширений", ПараметрыСеанса.ВерсияРасширений); + Запрос.Текст = + "ВЫБРАТЬ ПЕРВЫЕ 1 + | ИСТИНА КАК ЗначениеИстина + |ИЗ + | РегистрСведений.ИдентификаторыОбъектовВерсийРасширений КАК ВерсииИдентификаторов + |ГДЕ + | ВерсииИдентификаторов.ВерсияРасширений = &ВерсияРасширений"; - // Обновление родителей идентификаторов объектов метаданных. - Для каждого Свойства Из Выгрузка Цикл - - Если НЕ Свойства.ЭтоКоллекция Тогда - СвойстваОбъекта = СвойстваОбъектовМетаданных.Найти(Свойства.ПолноеИмя, "ПолноеИмя"); - НовыйРодитель = ПустаяСсылка(); - - Если СвойстваОбъекта <> Неопределено Тогда - - Если НЕ ЗначениеЗаполнено(СвойстваОбъекта.ПолноеИмяРодителя) Тогда - // Коллекция объектов метаданных. - НовыйРодитель = СвойстваОбъекта.Родитель; - Иначе - // Не коллекция объектов метаданных, например, подсистема. - ОписаниеРодителя = Выгрузка.Найти(СвойстваОбъекта.ПолноеИмяРодителя, "ПолноеИмя"); - Если ОписаниеРодителя <> Неопределено Тогда - НовыйРодитель = ОписаниеРодителя.Ссылка; - КонецЕсли; - КонецЕсли; - КонецЕсли; - - Если Свойства.Родитель <> НовыйРодитель Тогда - Свойства.Родитель = НовыйРодитель; - Свойства.Обновлен = Истина; - КонецЕсли; - КонецЕсли; - - Если Свойства.ЭтоНовый Тогда - ТаблицаОбъект = СоздатьЭлемент(); - ТаблицаОбъект.УстановитьСсылкуНового(Свойства.Ссылка); - - ИначеЕсли Свойства.Обновлен Тогда - ТаблицаОбъект = Свойства.Ссылка.ПолучитьОбъект(); - Иначе - Продолжить; - КонецЕсли; - - ЕстьТекущиеИзменения = Истина; - ЕстьИзменения = Истина; - Если ТолькоПроверка Тогда - ЗафиксироватьТранзакцию(); - Возврат; - КонецЕсли; - - ЗаполнитьЗначенияСвойств(ТаблицаОбъект, Свойства); - ТаблицаОбъект.КлючОбъектаМетаданных = Новый ХранилищеЗначения(Свойства.КлючОбъектаМетаданных); - ТаблицаОбъект.ОбменДанными.Загрузка = Истина; - ПроверитьОбъектПередЗаписью(ТаблицаОбъект, Истина); - ТаблицаОбъект.Записать(); - КонецЦикла; - - Если ЗначениеЗаполнено(СписокКритичныхИзменений) Тогда - ЗаписьЖурналаРегистрации( - НСтр("ru = 'Идентификаторы объектов метаданных.Выполнены критичные изменения'", - ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), - УровеньЖурналаРегистрации.Информация, - , - , - СписокКритичныхИзменений, - РежимТранзакцииЗаписиЖурналаРегистрации.Транзакционная); - КонецЕсли; - - ПодготовитьСписокНовыхПодсистем(Выгрузка); - - ЗафиксироватьТранзакцию(); - Исключение - ОтменитьТранзакцию(); - Если СнятьМонопольныйРежим Тогда - УстановитьМонопольныйРежим(Ложь); - КонецЕсли; - ВызватьИсключение; - КонецПопытки; - - Если НЕ ТолькоПроверка И НЕ ОбщегоНазначенияПовтИсп.РазделениеВключено() Тогда - ПараметрЗапускаКлиента = ПараметрыСеанса.ПараметрыКлиентаНаСервере.Получить("ПараметрЗапуска"); - Если Найти(НРег(ПараметрЗапускаКлиента), НРег("ЗарегистрироватьПолноеИзменениеИОМДляПодчиненныхУзловРИБ")) > 0 Тогда - ЗарегистрироватьПолноеИзменениеДляПодчиненныхУзловРИБ(); + Если Запрос.Выполнить().Пустой() Тогда + Справочники.ИдентификаторыОбъектовРасширений.ОбновитьДанныеСправочника(); КонецЕсли; КонецЕсли; - Если СнятьМонопольныйРежим Тогда - УстановитьМонопольныйРежим(Ложь); - КонецЕсли; - - Если Не ТолькоПроверка Или Не ЕстьТекущиеИзменения Тогда - СтандартныеПодсистемыСервер.ПодтвердитьОбновлениеПараметраРаботыПрограммы( - "ПараметрыБазовойФункциональности", "ИдентификаторыОбъектовМетаданных"); - КонецЕсли; - -КонецПроцедуры - -// Возвращает реквизиты справочника, которые образуют естественный ключ -// для элементов справочника. -// -// Возвращаемое значение: Массив(Строка) - массив имен реквизитов, образующих -// естественный ключ. -// -Функция ПоляЕстественногоКлюча() Экспорт - - Результат = Новый Массив(); - - Результат.Добавить("ПолноеИмя"); - - Возврат Результат; + Возврат Истина; КонецФункции @@ -586,11 +349,13 @@ ОбновитьСвойстваПомеченногоНаУдаление(Строка); Строка.НоваяСсылка = Ссылка; Строка.ДубльОбновлен = Истина; + Объект.ДополнительныеСвойства.Вставить("ЭтоЗаменаДубля"); // Замена новых ссылок на дубль на новую ссылку заданную для дубля (если есть). СтарыеДубли = Выгрузка.НайтиСтроки(Новый Структура("НоваяСсылка", Строка.Ссылка)); Для каждого СтарыйДубль Из СтарыеДубли Цикл ОбновитьСвойстваПомеченногоНаУдаление(СтарыйДубль); СтарыйДубль.НоваяСсылка = Ссылка; + СтарыйДубль.ДубльОбновлен = Истина; КонецЦикла; КонецЕсли; КонецЦикла; @@ -608,11 +373,13 @@ ОбновитьСвойстваПомеченногоНаУдаление(Строка); Строка.НоваяСсылка = Ссылка; Строка.ДубльОбновлен = Истина; + Объект.ДополнительныеСвойства.Вставить("ЭтоЗаменаДубля"); // Замена новых ссылок на дубль на новую ссылку заданную для дубля (если есть). СтарыеДубли = Выгрузка.НайтиСтроки(Новый Структура("НоваяСсылка", Строка.Ссылка)); Для каждого СтарыйДубль Из СтарыеДубли Цикл ОбновитьСвойстваПомеченногоНаУдаление(СтарыйДубль); СтарыйДубль.НоваяСсылка = Ссылка; + СтарыйДубль.ДубльОбновлен = Истина; КонецЦикла; КонецЕсли; КонецЦикла; @@ -631,6 +398,8 @@ ОбъектДубля.Записать(); КонецЦикла; + ПодготовитьСписокНовыхПодсистемВПодчиненномУзле(ОбъектыДляЗаписи); + // Загрузка объектов. Для каждого Объект Из ОбъектыДляЗаписи Цикл Объект.ОбменДанными.Загрузка = Истина; @@ -645,83 +414,504 @@ КонецПроцедуры -// Только для внутреннего использования. -Процедура ПроверкаИспользования() Экспорт +// Процедура обновляет данные справочника по метаданным конфигурации. +// +// Параметры: +// ЕстьИзменения - Булево (возвращаемое значение) - в этот параметр возвращается +// значение Истина, если производилась запись, иначе не изменяется. +// +// ЕстьУдаленные - Булево (возвращаемое значение) - в этот параметр возвращается +// значение Истина, если хотя бы один элемент справочника был помечен +// на удаление, иначе не изменяется. +// +// ТолькоПроверка - Булево (возвращаемое значение) - не производит никаких изменений, +// а лишь выполняет установку флажков ЕстьИзменения, ЕстьУдаленные, +// ЕстьКритичныеИзменения. +// +// ЕстьКритичныеИзменения - (возвращаемое значение) - в этот параметр возвращается +// значение Истина, если найдены критичные изменения, иначе не изменяется. +// Критичные изменения (только для не помеченных на удаление): +// - изменении реквизита ПолноеИмя, +// - добавление нового элемента справочника. +// В общем случае, критичные изменения требуют монопольный режим. +// +// СписокКритичныхИзменений - Строка (возвращаемое значение) - содержит полные имена +// объектов метаданных, которые добавлены или требуется добавить, +// а также объектов метаданных, полные имена которых изменены или требуется изменить. +// +Процедура ВыполнитьОбновлениеДанных(ЕстьИзменения, ЕстьУдаленные, ТолькоПроверка, + ЕстьКритичныеИзменения = Ложь, СписокКритичныхИзменений = "", ОбъектыРасширений = Ложь) Экспорт - Если СтандартныеПодсистемыПовтИсп.ОтключитьСправочникИдентификаторыОбъектовМетаданных() Тогда - ВызватьИсключение - НСтр("ru = 'Справочник ""Идентификаторы объектов метаданных"" не используется.'"); + Если ОбъектыРасширений + И ЗначениеЗаполнено(ПараметрыСеанса.УстановленныеРасширения) + И СтандартныеПодсистемыСервер.УстановленныеРасширенияНедоступны() Тогда + + ТекстОшибки = + НСтр("ru = 'Невозможно обновить идентификаторы объектов расширений в сеансе + |неразделенного пользователя, т.к. расширения не подключены.'"); + + ВызватьИсключениеПоОшибке(Истина, ТекстОшибки); + Возврат; КонецЕсли; + ПроверкаИспользования(ОбъектыРасширений); + УстановитьПривилегированныйРежим(Истина); - Если СтандартныеПодсистемыСервер.ПланыОбменаМенеджер().ГлавныйУзел() = Неопределено - И ЗначениеЗаполнено(ОбщегоНазначения.МенеджерОбъектаПоПолномуИмени("Константа.ГлавныйУзел").Получить()) Тогда + СвойстваРасширений = ПолучитьИзВременногоХранилища(ПараметрыСеанса.АдресСвойствРасширений); + Если СвойстваРасширений.ИменаОбъектов.Индексы.Количество() = 0 Тогда + СвойстваРасширений.ИменаОбъектов.Индексы.Добавить("ПолноеИмя"); + КонецЕсли; + + ЕстьТекущиеИзменения = Ложь; + Если Не ОбъектыРасширений Тогда + ЗаменитьДублиПодчиненногоУзлаНайденныеПриЗагрузке(ТолькоПроверка, ЕстьТекущиеИзменения); + КонецЕсли; + + Если Не ОбъектыРасширений + Или Не ОбщегоНазначения.ЭтоПодчиненныйУзелРИБ() Тогда - ВызватьИсключение - НСтр("ru = 'Справочник ""Идентификаторы объектов метаданных"" не может использоваться - |в информационной базе с неподтвержденной отменой главного узла. - | - |Для восстановления связи с главным узлом запустите 1C:Предприятие и - |нажмите кнопку Восстановить или программно установите главный узел, - |сохраненный в константе Главный узел. - | - |Для подтверждения отмены связи с главным узлом запустите 1C:Предприятие и - |нажмите кнопку Отключить или программно очистите константу Главный узел.'"); + ОбновитьДанные(ЕстьТекущиеИзменения, ЕстьУдаленные, ТолькоПроверка, + ЕстьКритичныеИзменения, СписокКритичныхИзменений, СвойстваРасширений, ОбъектыРасширений); + + Если ЕстьТекущиеИзменения Тогда + ЕстьИзменения = Истина; + КонецЕсли; + КонецЕсли; + + Если Не ТолькоПроверка Или Не ЕстьТекущиеИзменения Тогда + Если Не ОбъектыРасширений Тогда + СтандартныеПодсистемыСервер.ПодтвердитьОбновлениеПараметраРаботыПрограммы( + "ПараметрыБазовойФункциональности", "ИдентификаторыОбъектовМетаданных"); + КонецЕсли; КонецЕсли; КонецПроцедуры +// Только для внутреннего использования. +Процедура УстановитьПараметрСеансаАдресСвойствРасширений(УстановленныеРасширения = Неопределено, + ХранилищеСвойствРасширений = Неопределено) Экспорт + + УстановитьПривилегированныйРежим(Истина); + + Если УстановленныеРасширения <> Неопределено + И УстановленныеРасширения <> ПараметрыСеанса.УстановленныеРасширения Тогда + + ТекстОшибки = + НСтр("ru = 'Невозможно определить объекты метаданных расширений в фоновом задании + |без перезапуска сеанса, т.к. состав расширений был изменен.'"); + + ВызватьИсключениеПоОшибке(Ложь, ТекстОшибки); + КонецЕсли; + + Если СтандартныеПодсистемыСервер.УстановленныеРасширенияНедоступны() + И ЗначениеЗаполнено(ПараметрыСеанса.УстановленныеРасширения) Тогда + + ТекстОшибки = + НСтр("ru = 'Невозможно определить объекты метаданных расширений в сеансе + |неразделенного пользователя, т.к. расширения не подключены.'"); + + ВызватьИсключениеПоОшибке(Истина, ТекстОшибки); + КонецЕсли; + + Если ХранилищеСвойствРасширений = Неопределено Тогда + СвойстваРасширений = СвойстваРасширений(); + Если СвойстваРасширений = Неопределено Тогда + ТекстОшибки = + НСтр("ru = 'Невозможно определить объекты метаданных расширений + |без перезапуска сеанса, т.к. состав расширений был изменен.'"); + ВызватьИсключениеПоОшибке(Ложь, ТекстОшибки); + КонецЕсли; + Иначе + СвойстваРасширений = ХранилищеСвойствРасширений.Получить(); + КонецЕсли; + + ПараметрыСеанса.АдресСвойствРасширений = + ПоместитьВоВременноеХранилище(СвойстваРасширений, Новый УникальныйИдентификатор); + +КонецПроцедуры + +// Только для внутреннего использования. +Функция ХранилищеСвойствРасширений() Экспорт + + Возврат Новый ХранилищеЗначения(ПолучитьИзВременногоХранилища(ПараметрыСеанса.АдресСвойствРасширений)); + +КонецФункции + #КонецОбласти #Область СлужебныеПроцедурыИФункции -// Только для внутреннего использования. -Функция КлючОбъектаМетаданныхСоответствуетПолномуИмени(СвойстваИдентификатора) Экспорт +//////////////////////////////////////////////////////////////////////////////// +// Реализация процедур, объявленных в других модулях. + +// См. описание одноименной процедуры в общем модуле ОбщегоНазначения. +Функция ИдентификаторОбъектаМетаданных(ОписаниеОбъектаМетаданных) Экспорт - РезультатПроверки = Новый Структура; - РезультатПроверки.Вставить("НеСоответствует", Истина); - РезультатПроверки.Вставить("КлючОбъектаМетаданных", Неопределено); - - КлючОбъектаМетаданных = СвойстваИдентификатора.КлючОбъектаМетаданных.Получить(); - - Если КлючОбъектаМетаданных <> Неопределено - И КлючОбъектаМетаданных <> Тип("Неопределено") Тогда - // Ключ задан, поиск объекта метаданных по ключу. - РезультатПроверки.Вставить("КлючОбъектаМетаданных", КлючОбъектаМетаданных); - ОбъектМетаданных = ОбъектМетаданныхПоКлючу(КлючОбъектаМетаданных); - Если ОбъектМетаданных <> Неопределено Тогда - РезультатПроверки.НеСоответствует = ОбъектМетаданных.ПолноеИмя() <> СвойстваИдентификатора.ПолноеИмя; - КонецЕсли; - Иначе - // Ключ не задан, поиск объекта метаданных по полному имени. - ОбъектМетаданных = МетаданныеНайтиПоПолномуИмени(СвойстваИдентификатора.ПолноеИмя); + ТипОписанияОбъектаМетаданных = ТипЗнч(ОписаниеОбъектаМетаданных); + Если ТипОписанияОбъектаМетаданных = Тип("Тип") Тогда + + ОбъектМетаданных = Метаданные.НайтиПоТипу(ОписаниеОбъектаМетаданных); Если ОбъектМетаданных = Неопределено Тогда - // Возможно задана коллекция - - Строка = СтандартныеПодсистемыПовтИсп.СвойстваКоллекцийОбъектовМетаданных().Найти( - СвойстваИдентификатора.Ссылка, "ИдентификаторКоллекции"); - - Если Строка <> Неопределено Тогда - ОбъектМетаданных = Метаданные[Строка.Имя]; - РезультатПроверки.НеСоответствует = Строка.Имя <> СвойстваИдентификатора.ПолноеИмя; - КонецЕсли; + ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Ошибка при выполнении функции ОбщегоНазначения.ИдентификаторОбъектаМетаданных(). + | + |Объект метаданных не найден по типу: + |""%1"".'"), + ОписаниеОбъектаМетаданных); Иначе - РезультатПроверки.НеСоответствует = Ложь; + ПолноеИмяОбъектаМетаданных = ОбъектМетаданных.ПолноеИмя(); КонецЕсли; + + ИначеЕсли ТипОписанияОбъектаМетаданных = Тип("Строка") Тогда + ПолноеИмяОбъектаМетаданных = ОписаниеОбъектаМетаданных; + Иначе + ПолноеИмяОбъектаМетаданных = ОписаниеОбъектаМетаданных.ПолноеИмя(); КонецЕсли; - РезультатПроверки.Вставить("ОбъектМетаданных", ОбъектМетаданных); - - Возврат РезультатПроверки; + Возврат СтандартныеПодсистемыПовтИсп.ИдентификаторОбъектаМетаданныхПоПолномуИмени(ПолноеИмяОбъектаМетаданных); КонецФункции +// Продолжение процедуры ИдентификаторОбъектаМетаданных. +Функция ИдентификаторОбъектаМетаданныхПоПолномуИмени(ПолноеИмяОбъектаМетаданных) Экспорт + + СтандартныеПодсистемыПовтИсп.ИдентификаторыОбъектовМетаданныхПроверкаИспользования(Истина, + ОбщегоНазначенияПовтИсп.ДоступноИспользованиеРазделенныхДанных()); + + УстановитьПривилегированныйРежим(Истина); + + ДоступныИдентификаторыОбъектовРасширений = + ЗначениеЗаполнено(ПараметрыСеанса.УстановленныеРасширения) + И Не СтандартныеПодсистемыСервер.УстановленныеРасширенияНедоступны(); + + Запрос = Новый Запрос; + Запрос.УстановитьПараметр("ПолноеИмя", ПолноеИмяОбъектаМетаданных); + Запрос.Текст = + "ВЫБРАТЬ + | Идентификаторы.Ссылка КАК Ссылка, + | Идентификаторы.КлючОбъектаМетаданных, + | Идентификаторы.ПолноеИмя + |ИЗ + | Справочник.ИдентификаторыОбъектовМетаданных КАК Идентификаторы + |ГДЕ + | Идентификаторы.ПолноеИмя = &ПолноеИмя + | И НЕ Идентификаторы.ПометкаУдаления"; + + Если ДоступныИдентификаторыОбъектовРасширений Тогда + Запрос.УстановитьПараметр("ВерсияРасширений", ПараметрыСеанса.ВерсияРасширений); + ТекстЗапроса = + "ВЫБРАТЬ + | ВерсииИдентификаторов.Идентификатор КАК Ссылка, + | Идентификаторы.КлючОбъектаМетаданных, + | ВерсииИдентификаторов.ПолноеИмяОбъекта КАК ПолноеИмя + |ИЗ + | РегистрСведений.ИдентификаторыОбъектовВерсийРасширений КАК ВерсииИдентификаторов + | ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.ИдентификаторыОбъектовРасширений КАК Идентификаторы + | ПО (Идентификаторы.Ссылка = ВерсииИдентификаторов.Идентификатор) + |ГДЕ + | ВерсииИдентификаторов.ВерсияРасширений = &ВерсияРасширений + | И ВерсииИдентификаторов.ПолноеИмяОбъекта = &ПолноеИмя"; + + Запрос.Текст = Запрос.Текст + " + | + |ОБЪЕДИНИТЬ ВСЕ + | + |" + ТекстЗапроса; + КонецЕсли; + + Выгрузка = Запрос.Выполнить().Выгрузить(); + ЗаголовокОшибки = НСтр("ru = 'Ошибка при выполнении функции ОбщегоНазначения.ИдентификаторОбъектаМетаданных().'"); + + Если Выгрузка.Количество() = 0 Тогда + // Если идентификатор не найден по полному имени, возможно что полное имя задано с ошибкой. + ОбъектМетаданных = Метаданные.НайтиПоПолномуИмени(ПолноеИмяОбъектаМетаданных); + Если ОбъектМетаданных = Неопределено Тогда + ОписаниеОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Объект метаданных не найден по полному имени: + |""%1"".'"), + ПолноеИмяОбъектаМетаданных); + ВызватьИсключение ЗаголовокОшибки + Символы.ПС + Символы.ПС + ОписаниеОшибки; + КонецЕсли; + + Если Не Метаданные.Роли.Содержит(ОбъектМетаданных) + И Не Метаданные.ПланыОбмена.Содержит(ОбъектМетаданных) + И Не Метаданные.Константы.Содержит(ОбъектМетаданных) + И Не Метаданные.Справочники.Содержит(ОбъектМетаданных) + И Не Метаданные.Документы.Содержит(ОбъектМетаданных) + И Не Метаданные.ЖурналыДокументов.Содержит(ОбъектМетаданных) + И Не Метаданные.Отчеты.Содержит(ОбъектМетаданных) + И Не Метаданные.Обработки.Содержит(ОбъектМетаданных) + И Не Метаданные.ПланыВидовХарактеристик.Содержит(ОбъектМетаданных) + И Не Метаданные.ПланыСчетов.Содержит(ОбъектМетаданных) + И Не Метаданные.ПланыВидовРасчета.Содержит(ОбъектМетаданных) + И Не Метаданные.РегистрыСведений.Содержит(ОбъектМетаданных) + И Не Метаданные.РегистрыНакопления.Содержит(ОбъектМетаданных) + И Не Метаданные.РегистрыБухгалтерии.Содержит(ОбъектМетаданных) + И Не Метаданные.РегистрыРасчета.Содержит(ОбъектМетаданных) + И Не Метаданные.БизнесПроцессы.Содержит(ОбъектМетаданных) + И Не Метаданные.Задачи.Содержит(ОбъектМетаданных) + И Не ЭтоПодсистема(ОбъектМетаданных) Тогда + + ОписаниеОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Объект метаданных не поддерживается: + |""%1"". + | + |Допустимы только типы объектов метаданных перечисленные в комментарии к функции.'"), + ПолноеИмяОбъектаМетаданных); + ВызватьИсключение ЗаголовокОшибки + Символы.ПС + Символы.ПС + ОписаниеОшибки; + КонецЕсли; + + ШаблонОшибки = ?(ДоступныИдентификаторыОбъектовРасширений, + НСтр("ru = 'Для объекта метаданных ""%1"" + |не найден идентификатор в справочнике ""Идентификаторы объектов метаданных"" и + |регистре сведений ""Идентификаторы объектов версий расширений"".'"), + НСтр("ru = 'Для объекта метаданных ""%1"" + |не найден идентификатор в справочнике ""Идентификаторы объектов метаданных"".'")); + ВызватьИсключение ЗаголовокОшибки + Символы.ПС + Символы.ПС + + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонОшибки, ПолноеИмяОбъектаМетаданных) + + СтандартныеПодсистемыСервер.УточнениеОшибкиПараметровРаботыПрограммыДляРазработчика(); + + ИначеЕсли Выгрузка.Количество() > 1 Тогда + ШаблонОшибки = ?(ДоступныИдентификаторыОбъектовРасширений, + НСтр("ru = 'Для объекта метаданных ""%1"" + |найдено несколько идентификаторов в справочнике ""Идентификаторы объектов метаданных"" и + |регистре сведений ""Идентификаторы объектов версий расширений"".'"), + НСтр("ru = 'Для объекта метаданных ""%1"" + |найдено несколько идентификаторов в справочнике ""Идентификаторы объектов метаданных"".'")); + ВызватьИсключение ЗаголовокОшибки + Символы.ПС + Символы.ПС + + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонОшибки, ПолноеИмяОбъектаМетаданных) + + СтандартныеПодсистемыСервер.УточнениеОшибкиПараметровРаботыПрограммыДляРазработчика(); + КонецЕсли; + + // Проверка соответствия ключа объекта метаданных полному имени объекта метаданных. + РезультатПроверки = КлючОбъектаМетаданныхСоответствуетПолномуИмени(Выгрузка[0]); + Если РезультатПроверки.НеСоответствует Тогда + НазваниеСправочника = НазваниеСправочника(ЭтоОбъектРасширений(Выгрузка[0].Ссылка)); + + Если РезультатПроверки.ОбъектМетаданных = Неопределено Тогда + ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Для объекта метаданных ""%1"" + |найден идентификатор в справочнике ""%2"", + |которому соответствует удаленный объект метаданных.'"), + ПолноеИмяОбъектаМетаданных, НазваниеСправочника); + Иначе + ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Для объекта метаданных ""%1"" + |найден идентификатор в справочнике ""%2"", + |который соответствует другому объекту метаданных ""%3"".'"), + ПолноеИмяОбъектаМетаданных, НазваниеСправочника, РезультатПроверки.ОбъектМетаданных); + КонецЕсли; + + ВызватьИсключение ЗаголовокОшибки + Символы.ПС + Символы.ПС + ТекстОшибки + + СтандартныеПодсистемыСервер.УточнениеОшибкиПараметровРаботыПрограммыДляРазработчика(); + КонецЕсли; + + Возврат Выгрузка[0].Ссылка; + +КонецФункции + +// См. описание одноименной процедуры в общем модуле ОбщегоНазначения. +Функция ОбъектМетаданныхПоИдентификатору(Идентификатор) Экспорт + + ОбъектыРасширений = ЭтоОбъектРасширений(Идентификатор); + НазваниеСправочника = НазваниеСправочника(ОбъектыРасширений); + + СтандартныеПодсистемыПовтИсп.ИдентификаторыОбъектовМетаданныхПроверкаИспользования(Истина, ОбъектыРасширений); + + УстановитьПривилегированныйРежим(Истина); + + Запрос = Новый Запрос; + Запрос.УстановитьПараметр("Ссылка", Идентификатор); + Если ОбъектыРасширений Тогда + Запрос.УстановитьПараметр("ВерсияРасширений", ПараметрыСеанса.ВерсияРасширений); + Запрос.Текст = + "ВЫБРАТЬ + | Идентификаторы.Ссылка КАК Ссылка, + | Идентификаторы.КлючОбъектаМетаданных, + | ЕСТЬNULL(ВерсииИдентификаторов.ПолноеИмяОбъекта, """") КАК ПолноеИмя, + | Идентификаторы.ПометкаУдаления + |ИЗ + | Справочник.ИдентификаторыОбъектовМетаданных КАК Идентификаторы + | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ИдентификаторыОбъектовВерсийРасширений КАК ВерсииИдентификаторов + | ПО (ВерсииИдентификаторов.Идентификатор = Идентификаторы.Ссылка) + |ГДЕ + | ВерсииИдентификаторов.ВерсияРасширений = &ВерсияРасширений + | И Идентификаторы.Ссылка = &Ссылка"; + Иначе + Запрос.Текст = + "ВЫБРАТЬ + | Идентификаторы.Ссылка КАК Ссылка, + | Идентификаторы.КлючОбъектаМетаданных, + | Идентификаторы.ПолноеИмя, + | Идентификаторы.ПометкаУдаления + |ИЗ + | Справочник.ИдентификаторыОбъектовМетаданных КАК Идентификаторы + |ГДЕ + | Идентификаторы.Ссылка = &Ссылка"; + КонецЕсли; + + Выгрузка = Запрос.Выполнить().Выгрузить(); + ЗаголовокОшибки = НСтр("ru = 'Ошибка при выполнении функции ОбщегоНазначения.ОбъектМетаданныхПоИдентификатору().'"); + + Если Выгрузка.Количество() = 0 Тогда + ОписаниеОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Идентификатор ""%1"" + |не найден в справочнике ""%2"".'"), + Строка(Идентификатор), НазваниеСправочника); + + ВызватьИсключение ЗаголовокОшибки + Символы.ПС + Символы.ПС + ОписаниеОшибки + + СтандартныеПодсистемыСервер.УточнениеОшибкиПараметровРаботыПрограммыДляРазработчика(); + КонецЕсли; + + // Проверка соответствия ключа объекта метаданных полному имени объекта метаданных. + РезультатПроверки = КлючОбъектаМетаданныхСоответствуетПолномуИмени(Выгрузка[0]); + Если РезультатПроверки.НеСоответствует Тогда + + Если РезультатПроверки.ОбъектМетаданных = Неопределено Тогда + Если ОбъектыРасширений И Не Выгрузка[0].ПометкаУдаления Тогда + + // Возможно расширение не удалось подключить. + Возврат Неопределено; + + ИначеЕсли РезультатПроверки.КлючОбъектаМетаданных = Неопределено Тогда + ОписаниеОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Идентификатору ""%1"" + |найденому в справочнике ""%2"", + |соответствует несуществующий объект метаданных + |""%3"".'"), + Строка(Идентификатор), НазваниеСправочника, Выгрузка[0].ПолноеИмя); + Иначе + ОписаниеОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Идентификатору ""%1"" + |найденому в справочнике ""%2"", + |соответствует удаленный объект метаданных.'"), + Строка(Идентификатор), НазваниеСправочника); + КонецЕсли; + Иначе + ОписаниеОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Идентификатору ""%1"" + |найденому в справочнике ""%2"", + |соответствует объект метаданных ""%3"", + |полное имя которого отличается от заданного в идентификаторе.'"), + Строка(Идентификатор), НазваниеСправочника, РезультатПроверки.ОбъектМетаданных.ПолноеИмя()); + КонецЕсли; + + ВызватьИсключение ЗаголовокОшибки + Символы.ПС + Символы.ПС + ОписаниеОшибки + + СтандартныеПодсистемыСервер.УточнениеОшибкиПараметровРаботыПрограммыДляРазработчика(); + КонецЕсли; + + Если Выгрузка[0].ПометкаУдаления Тогда + ОписаниеОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Идентификатор ""%1"" + |найден в справочнике ""%2"", + |но значение реквизита ""Пометка удаления"" установлено Истина.'"), + Строка(Идентификатор), НазваниеСправочника); + + ВызватьИсключение ЗаголовокОшибки + Символы.ПС + Символы.ПС + ОписаниеОшибки + + СтандартныеПодсистемыСервер.УточнениеОшибкиПараметровРаботыПрограммыДляРазработчика(); + КонецЕсли; + + Возврат РезультатПроверки.ОбъектМетаданных; + +КонецФункции + +// См. описание одноименной процедуры в общем модуле ОбщегоНазначения. +Процедура ДобавитьПереименование(Итог, ВерсияИБ, СтароеПолноеИмя, НовоеПолноеИмя, ИдентификаторБиблиотеки = "") Экспорт + + СтандартныеПодсистемыПовтИсп.ИдентификаторыОбъектовМетаданныхПроверкаИспользования(); + + СтароеИмяКоллекции = ВРег(ИмяКоллекции(СтароеПолноеИмя)); + НовоеИмяКоллекции = ВРег(ИмяКоллекции(НовоеПолноеИмя)); + + ЗаголовокОшибки = + НСтр("ru = 'Ошибка в процедуре ПриДобавленииПереименованийОбъектовМетаданных общего модуля ОбщегоНазначенияПереопределяемый.'"); + + Если СтароеИмяКоллекции <> НовоеИмяКоллекции Тогда + ВызватьИсключение ЗаголовокОшибки + Символы.ПС + Символы.ПС + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Не совпадают имена типов переименованного объекта метаданных. + |Прежний тип: ""%1"", + |новый тип: ""%2"".'"), + СтароеПолноеИмя, + НовоеПолноеИмя); + КонецЕсли; + + Если Итог.КоллекцииБезКлюча[СтароеИмяКоллекции] = Неопределено Тогда + + СписокДопустимыхТипов = ""; + Для каждого КлючИЗначение Из Итог.КоллекцииБезКлюча Цикл + СписокДопустимыхТипов = СписокДопустимыхТипов + КлючИЗначение.Значение + "," + Символы.ПС; + КонецЦикла; + СписокДопустимыхТипов = СокрП(СписокДопустимыхТипов); + СписокДопустимыхТипов = ?(ЗначениеЗаполнено(СписокДопустимыхТипов), + Лев(СписокДопустимыхТипов, СтрДлина(СписокДопустимыхТипов) - 1), ""); + + ВызватьИсключение ЗаголовокОшибки + Символы.ПС + Символы.ПС + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Для типа объекта метаданных ""%1"" не требуется описывать переименование, + |так как сведения об объектах метаданных этого типа обновляются автоматически. + | + |Описывать переименования требуется только для следующих типов: + |%2.'"), + СтароеПолноеИмя, + СписокДопустимыхТипов); + КонецЕсли; + + Если ЗначениеЗаполнено(ИдентификаторБиблиотеки) Тогда + Библиотека = ВРег(ИдентификаторБиблиотеки) <> ВРег(Метаданные.Имя); + Иначе + ИдентификаторБиблиотеки = Метаданные.Имя; + Библиотека = Ложь; + КонецЕсли; + + ПорядокБиблиотеки = Итог.ПорядокБиблиотек[ИдентификаторБиблиотеки]; + Если ПорядокБиблиотеки = Неопределено Тогда + ПорядокБиблиотеки = Итог.ПорядокБиблиотек.Количество(); + Итог.ПорядокБиблиотек.Вставить(ИдентификаторБиблиотеки, ПорядокБиблиотеки); + КонецЕсли; + + ВерсияБиблиотеки = Итог.ВерсииБиблиотек[ИдентификаторБиблиотеки]; + Если ВерсияБиблиотеки = Неопределено Тогда + ВерсияБиблиотеки = ОбновлениеИнформационнойБазыСлужебный.ВерсияИБ(ИдентификаторБиблиотеки); + Итог.ВерсииБиблиотек.Вставить(ИдентификаторБиблиотеки, ВерсияБиблиотеки); + КонецЕсли; + + Если ВерсияБиблиотеки = "0.0.0.0" Тогда + // При начальном заполнении переименования не требуются. + Возврат; + КонецЕсли; + + Результат = ОбщегоНазначенияКлиентСервер.СравнитьВерсии(ВерсияИБ, ВерсияБиблиотеки); + Если Результат > 0 Тогда + ЧастиВерсии = СтрРазделить(ВерсияИБ, "."); + + ОписаниеПереименования = Итог.Таблица.Добавить(); + ОписаниеПереименования.ПорядокБиблиотеки = ПорядокБиблиотеки; + ОписаниеПереименования.ВерсияЧасть1 = Число(ЧастиВерсии[0]); + ОписаниеПереименования.ВерсияЧасть2 = Число(ЧастиВерсии[1]); + ОписаниеПереименования.ВерсияЧасть3 = Число(ЧастиВерсии[2]); + ОписаниеПереименования.ВерсияЧасть4 = Число(ЧастиВерсии[3]); + ОписаниеПереименования.СтароеПолноеИмя = СтароеПолноеИмя; + ОписаниеПереименования.НовоеПолноеИмя = НовоеПолноеИмя; + ОписаниеПереименования.ПорядокДобавления = Итог.Таблица.Индекс(ОписаниеПереименования); + КонецЕсли; + +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// Дополнительные процедуры и функции для вызова из других модулей. + // Только для внутреннего использования. // ПолноеИмя в объекте должно быть уже установлено и корректно. // Процедура ОбновитьСвойстваИдентификатора(Объект) Экспорт + ОбъектыРасширений = ЭтоОбъектРасширений(Объект); + + Если ОбъектыРасширений + И Справочники.ИдентификаторыОбъектовРасширений.ОбъектРасширенияОтключен(Объект.Ссылка) Тогда + Возврат; + КонецЕсли; + ПолноеИмя = Объект.ПолноеИмя; // Восстановление старых значений. @@ -744,7 +934,7 @@ Если ОбъектМетаданных = Неопределено Тогда Объект.ПометкаУдаления = Истина; - Объект.Родитель = ПустаяСсылка(); + Объект.Родитель = ПустаяСсылкаСправочника(ОбъектыРасширений); Объект.Наименование = ВставитьЗнакВопроса(Объект.Наименование); Объект.Имя = ВставитьЗнакВопроса(Объект.Имя); Объект.Синоним = ВставитьЗнакВопроса(Объект.Синоним); @@ -752,6 +942,10 @@ Объект.ПолныйСиноним = ВставитьЗнакВопроса(Объект.ПолныйСиноним); Объект.ЗначениеПустойСсылки = Неопределено; + Если ОбъектыРасширений Тогда + Объект.ИмяРасширения = ВставитьЗнакВопроса(Объект.ИмяРасширения); + КонецЕсли; + Если ТипЗнч(Объект) <> Тип("ДанныеФормыСтруктура") Тогда Объект.КлючОбъектаМетаданных = Неопределено; КонецЕсли; @@ -759,14 +953,16 @@ Объект.ПометкаУдаления = Ложь; ПолноеИмя = ОбъектМетаданных.ПолноеИмя(); - ПозицияТочки = Найти(ПолноеИмя, "."); + ПозицияТочки = СтрНайти(ПолноеИмя, "."); ИмяБазовогоТипа = Лев(ПолноеИмя, ПозицияТочки -1); - СвойстваКоллекций = СтандартныеПодсистемыПовтИсп.СвойстваКоллекцийОбъектовМетаданных(); + СвойстваКоллекций = СтандартныеПодсистемыПовтИсп.СвойстваКоллекцийОбъектовМетаданных(ОбъектыРасширений); Отбор = Новый Структура("ИмяВЕдЧисле", ИмяБазовогоТипа); Строки = СвойстваКоллекций.НайтиСтроки(Отбор); - СвойстваОбъектовМетаданных = СвойстваОбъектовМетаданных(СвойстваКоллекций.Скопировать(Строки)); + СвойстваОбъектовМетаданных = СвойстваОбъектовМетаданных(ЭтоОбъектРасширений(Объект), , + СвойстваКоллекций.Скопировать(Строки)); + СвойстваОбъекта = СвойстваОбъектовМетаданных.Найти(ПолноеИмя, "ПолноеИмя"); ЗаполнитьЗначенияСвойств(Объект, СвойстваОбъекта); @@ -784,29 +980,6 @@ КонецПроцедуры -// Только для внутреннего использования. -Функция ЗапрещеноИзменятьПолноеИмя(Объект) Экспорт - - Если ЭтоКоллекция(Объект.Ссылка) Тогда - Возврат Истина; - КонецЕсли; - - ПозицияТочки = Найти(Объект.ПолноеИмя, "."); - ИмяБазовогоТипа = Лев(Объект.ПолноеИмя, ПозицияТочки -1); - - СвойстваКоллекции = СтандартныеПодсистемыПовтИсп.СвойстваКоллекцийОбъектовМетаданных( - ).Найти(ИмяБазовогоТипа, "ИмяВЕдЧисле"); - - Если СвойстваКоллекции <> Неопределено - И НЕ СвойстваКоллекции.БезКлючаОбъектаМетаданных Тогда - - Возврат Истина; - КонецЕсли; - - Возврат Ложь; - -КонецФункции - // Только для внутреннего использования. Функция ТаблицаПереименованияДляТекущейВерсии() Экспорт @@ -838,7 +1011,6 @@ Итог.Вставить("ПорядокБиблиотек", Новый Соответствие); ОбщегоНазначенияПереопределяемый.ПриДобавленииПереименованийОбъектовМетаданных(Итог); - ОбщегоНазначенияПереопределяемый.ЗаполнитьТаблицуПереименованияОбъектовМетаданных(Итог); ОбработчикиСобытия = ОбщегоНазначения.ОбработчикиСлужебногоСобытия( "СтандартныеПодсистемы.БазоваяФункциональность\ПриДобавленииПереименованийОбъектовМетаданных"); @@ -860,7 +1032,7 @@ КонецФункции // Только для внутреннего использования. -Функция СвойстваКоллекцийОбъектовМетаданных() Экспорт +Функция СвойстваКоллекцийОбъектовМетаданных(ОбъектыРасширений = Ложь) Экспорт СвойстваКоллекцийОбъектовМетаданных = Новый ТаблицаЗначений; СвойстваКоллекцийОбъектовМетаданных.Колонки.Добавить("Имя", Новый ОписаниеТипов("Строка",, Новый КвалификаторыСтроки(50))); @@ -870,12 +1042,12 @@ СвойстваКоллекцийОбъектовМетаданных.Колонки.Добавить("ПорядокКоллекции", Новый ОписаниеТипов("Число")); СвойстваКоллекцийОбъектовМетаданных.Колонки.Добавить("БезДанных", Новый ОписаниеТипов("Булево")); СвойстваКоллекцийОбъектовМетаданных.Колонки.Добавить("БезКлючаОбъектаМетаданных", Новый ОписаниеТипов("Булево")); - СвойстваКоллекцийОбъектовМетаданных.Колонки.Добавить("ИдентификаторКоллекции", Новый ОписаниеТипов("СправочникСсылка.ИдентификаторыОбъектовМетаданных")); - СвойстваКоллекцийОбъектовМетаданных.Колонки.Добавить("Идентификатор", Новый ОписаниеТипов("Строка",, Новый КвалификаторыСтроки(36))); + СвойстваКоллекцийОбъектовМетаданных.Колонки.Добавить("Идентификатор", Новый ОписаниеТипов("УникальныйИдентификатор")); + СвойстваКоллекцийОбъектовМетаданных.Колонки.Добавить("ОбъектыРасширений", Новый ОписаниеТипов("Булево")); // Константы Строка = СвойстваКоллекцийОбъектовМетаданных.Добавить(); - Строка.Идентификатор = "627a6fb8-872a-11e3-bb87-005056c00008"; + Строка.Идентификатор = Новый УникальныйИдентификатор("627a6fb8-872a-11e3-bb87-005056c00008"); Строка.Имя = "Константы"; Строка.Синоним = НСтр("ru = 'Константы'"); Строка.ИмяВЕдЧисле = "Константа"; @@ -883,17 +1055,18 @@ // Подсистемы Строка = СвойстваКоллекцийОбъектовМетаданных.Добавить(); - Строка.Идентификатор = "cdf5ac50-08e8-46af-9a80-4e63fd4a88ff"; + Строка.Идентификатор = Новый УникальныйИдентификатор("cdf5ac50-08e8-46af-9a80-4e63fd4a88ff"); Строка.Имя = "Подсистемы"; Строка.Синоним = НСтр("ru = 'Подсистемы'"); Строка.ИмяВЕдЧисле = "Подсистема"; Строка.СинонимВЕдЧисле = НСтр("ru = 'Подсистема'"); Строка.БезДанных = Истина; Строка.БезКлючаОбъектаМетаданных = Истина; + Строка.ОбъектыРасширений = Истина; // Роли Строка = СвойстваКоллекцийОбъектовМетаданных.Добавить(); - Строка.Идентификатор = "115c4f55-9c20-4e86-a6d0-d0167ec053a1"; + Строка.Идентификатор = Новый УникальныйИдентификатор("115c4f55-9c20-4e86-a6d0-d0167ec053a1"); Строка.Имя = "Роли"; Строка.Синоним = НСтр("ru = 'Роли'"); Строка.ИмяВЕдЧисле = "Роль"; @@ -903,7 +1076,7 @@ // ПланыОбмена Строка = СвойстваКоллекцийОбъектовМетаданных.Добавить(); - Строка.Идентификатор = "269651e0-4b06-4f9d-aaab-a8d2b6bc6077"; + Строка.Идентификатор = Новый УникальныйИдентификатор("269651e0-4b06-4f9d-aaab-a8d2b6bc6077"); Строка.Имя = "ПланыОбмена"; Строка.Синоним = НСтр("ru = 'Планы обмена'"); Строка.ИмяВЕдЧисле = "ПланОбмена"; @@ -911,7 +1084,7 @@ // Справочники Строка = СвойстваКоллекцийОбъектовМетаданных.Добавить(); - Строка.Идентификатор = "ede89702-30f5-4a2a-8e81-c3a823b7e161"; + Строка.Идентификатор = Новый УникальныйИдентификатор("ede89702-30f5-4a2a-8e81-c3a823b7e161"); Строка.Имя = "Справочники"; Строка.Синоним = НСтр("ru = 'Справочники'"); Строка.ИмяВЕдЧисле = "Справочник"; @@ -919,7 +1092,7 @@ // Документы Строка = СвойстваКоллекцийОбъектовМетаданных.Добавить(); - Строка.Идентификатор = "96c6ab56-0375-40d5-99a2-b83efa3dac8b"; + Строка.Идентификатор = Новый УникальныйИдентификатор("96c6ab56-0375-40d5-99a2-b83efa3dac8b"); Строка.Имя = "Документы"; Строка.Синоним = НСтр("ru = 'Документы'"); Строка.ИмяВЕдЧисле = "Документ"; @@ -927,7 +1100,7 @@ // ЖурналыДокументов Строка = СвойстваКоллекцийОбъектовМетаданных.Добавить(); - Строка.Идентификатор = "07938234-e29b-4cff-961a-9af07a4c6185"; + Строка.Идентификатор = Новый УникальныйИдентификатор("07938234-e29b-4cff-961a-9af07a4c6185"); Строка.Имя = "ЖурналыДокументов"; Строка.Синоним = НСтр("ru = 'Журналы документов'"); Строка.ИмяВЕдЧисле = "ЖурналДокументов"; @@ -936,25 +1109,27 @@ // Отчеты Строка = СвойстваКоллекцийОбъектовМетаданных.Добавить(); - Строка.Идентификатор = "706cf832-0ae5-45b5-8a4a-1f251d054f3b"; + Строка.Идентификатор = Новый УникальныйИдентификатор("706cf832-0ae5-45b5-8a4a-1f251d054f3b"); Строка.Имя = "Отчеты"; Строка.Синоним = НСтр("ru = 'Отчеты'"); Строка.ИмяВЕдЧисле = "Отчет"; Строка.СинонимВЕдЧисле = НСтр("ru = 'Отчет'"); Строка.БезДанных = Истина; + Строка.ОбъектыРасширений = Истина; // Обработки Строка = СвойстваКоллекцийОбъектовМетаданных.Добавить(); - Строка.Идентификатор = "ae480426-487e-40b2-98ba-d207777449f3"; + Строка.Идентификатор = Новый УникальныйИдентификатор("ae480426-487e-40b2-98ba-d207777449f3"); Строка.Имя = "Обработки"; Строка.Синоним = НСтр("ru = 'Обработки'"); Строка.ИмяВЕдЧисле = "Обработка"; Строка.СинонимВЕдЧисле = НСтр("ru = 'Обработка'"); Строка.БезДанных = Истина; + Строка.ОбъектыРасширений = Истина; // ПланыВидовХарактеристик Строка = СвойстваКоллекцийОбъектовМетаданных.Добавить(); - Строка.Идентификатор = "8b5649b9-cdd1-4698-9aac-12ba146835c4"; + Строка.Идентификатор = Новый УникальныйИдентификатор("8b5649b9-cdd1-4698-9aac-12ba146835c4"); Строка.Имя = "ПланыВидовХарактеристик"; Строка.Синоним = НСтр("ru = 'Планы видов характеристик'"); Строка.ИмяВЕдЧисле = "ПланВидовХарактеристик"; @@ -962,7 +1137,7 @@ // ПланыСчетов Строка = СвойстваКоллекцийОбъектовМетаданных.Добавить(); - Строка.Идентификатор = "4295af27-543f-4373-bcfc-c0ace9b7620c"; + Строка.Идентификатор = Новый УникальныйИдентификатор("4295af27-543f-4373-bcfc-c0ace9b7620c"); Строка.Имя = "ПланыСчетов"; Строка.Синоним = НСтр("ru = 'Планы счетов'"); Строка.ИмяВЕдЧисле = "ПланСчетов"; @@ -970,7 +1145,7 @@ // ПланыВидовРасчета Строка = СвойстваКоллекцийОбъектовМетаданных.Добавить(); - Строка.Идентификатор = "fca3e7e1-1bf1-49c8-9921-aafb4e787c75"; + Строка.Идентификатор = Новый УникальныйИдентификатор("fca3e7e1-1bf1-49c8-9921-aafb4e787c75"); Строка.Имя = "ПланыВидовРасчета"; Строка.Синоним = НСтр("ru = 'Планы видов расчета'"); Строка.ИмяВЕдЧисле = "ПланВидовРасчета"; @@ -978,7 +1153,7 @@ // РегистрыСведений Строка = СвойстваКоллекцийОбъектовМетаданных.Добавить(); - Строка.Идентификатор = "d7ecc1e9-c068-44dd-83c2-1323ec52dbbb"; + Строка.Идентификатор = Новый УникальныйИдентификатор("d7ecc1e9-c068-44dd-83c2-1323ec52dbbb"); Строка.Имя = "РегистрыСведений"; Строка.Синоним = НСтр("ru = 'Регистры сведений'"); Строка.ИмяВЕдЧисле = "РегистрСведений"; @@ -986,7 +1161,7 @@ // РегистрыНакопления Строка = СвойстваКоллекцийОбъектовМетаданных.Добавить(); - Строка.Идентификатор = "74083488-b01e-4441-84a6-c386ce88cdb5"; + Строка.Идентификатор = Новый УникальныйИдентификатор("74083488-b01e-4441-84a6-c386ce88cdb5"); Строка.Имя = "РегистрыНакопления"; Строка.Синоним = НСтр("ru = 'Регистры накопления'"); Строка.ИмяВЕдЧисле = "РегистрНакопления"; @@ -994,7 +1169,7 @@ // РегистрыБухгалтерии Строка = СвойстваКоллекцийОбъектовМетаданных.Добавить(); - Строка.Идентификатор = "9a0d75ff-0eda-454e-b2b7-d2412ffdff18"; + Строка.Идентификатор = Новый УникальныйИдентификатор("9a0d75ff-0eda-454e-b2b7-d2412ffdff18"); Строка.Имя = "РегистрыБухгалтерии"; Строка.Синоним = НСтр("ru = 'Регистры бухгалтерии'"); Строка.ИмяВЕдЧисле = "РегистрБухгалтерии"; @@ -1002,7 +1177,7 @@ // РегистрыРасчета Строка = СвойстваКоллекцийОбъектовМетаданных.Добавить(); - Строка.Идентификатор = "f330686a-0acf-4e26-9cda-108f1404687d"; + Строка.Идентификатор = Новый УникальныйИдентификатор("f330686a-0acf-4e26-9cda-108f1404687d"); Строка.Имя = "РегистрыРасчета"; Строка.Синоним = НСтр("ru = 'Регистры расчета'"); Строка.ИмяВЕдЧисле = "РегистрРасчета"; @@ -1010,7 +1185,7 @@ // БизнесПроцессы Строка = СвойстваКоллекцийОбъектовМетаданных.Добавить(); - Строка.Идентификатор = "a8cdd0e0-c27f-4bf0-9718-10ec054dc468"; + Строка.Идентификатор = Новый УникальныйИдентификатор("a8cdd0e0-c27f-4bf0-9718-10ec054dc468"); Строка.Имя = "БизнесПроцессы"; Строка.Синоним = НСтр("ru = 'Бизнес-процессы'"); Строка.ИмяВЕдЧисле = "БизнесПроцесс"; @@ -1018,102 +1193,479 @@ // Задачи Строка = СвойстваКоллекцийОбъектовМетаданных.Добавить(); - Строка.Идентификатор = "8d9153ad-7cea-4e25-9542-a557ee59fd16"; + Строка.Идентификатор = Новый УникальныйИдентификатор("8d9153ad-7cea-4e25-9542-a557ee59fd16"); Строка.Имя = "Задачи"; Строка.Синоним = НСтр("ru = 'Задачи'"); Строка.ИмяВЕдЧисле = "Задача"; Строка.СинонимВЕдЧисле = НСтр("ru = 'Задача'"); Для каждого Строка Из СвойстваКоллекцийОбъектовМетаданных Цикл - Строка.ПорядокКоллекции = СвойстваКоллекцийОбъектовМетаданных.Индекс(Строка); - Строка.ИдентификаторКоллекции = ПолучитьСсылку(Новый УникальныйИдентификатор(Строка.Идентификатор)); + Строка.ПорядокКоллекции = СвойстваКоллекцийОбъектовМетаданных.Индекс(Строка); КонецЦикла; - СвойстваКоллекцийОбъектовМетаданных.Индексы.Добавить("ИдентификаторКоллекции"); + Если ОбъектыРасширений Тогда + СвойстваКоллекцийОбъектовМетаданных = СвойстваКоллекцийОбъектовМетаданных.Скопировать( + Новый Структура("ОбъектыРасширений", Истина)); + КонецЕсли; + + СвойстваКоллекцийОбъектовМетаданных.Индексы.Добавить("Идентификатор"); Возврат СвойстваКоллекцийОбъектовМетаданных; КонецФункции -// Только для внутреннего использования. -Процедура ПроверитьОбъектПередЗаписью(Объект, АвтоматическоеОбновление = Ложь) Экспорт +// Предотвращает недопустимое изменение идентификаторов объектов метаданных. +// Выполняет обработку дублей подчиненного узла распределенной информационной базы. +// +Процедура ПередЗаписьюОбъекта(Объект) Экспорт - Если НЕ АвтоматическоеОбновление Тогда - - Если Объект.ЭтоНовый() Тогда - - ВызватьИсключениеПоОшибке(СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Создание нового идентификатора объекта метаданных - |возможно только автоматически при обновлении данных справочника.'"), - Объект.ПолноеИмя)); - - ИначеЕсли ЗапрещеноИзменятьПолноеИмя(Объект) Тогда - - ВызватьИсключениеПоОшибке(СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'При изменении идентификатора объекта метаданных указано - |полное имя ""%1"", которое может быть - |установлено только автоматически при обновлении данных справочника.'"), - Объект.ПолноеИмя)); - - ИначеЕсли ПолноеИмяИспользуется(Объект.ПолноеИмя, Объект.Ссылка) Тогда - - ВызватьИсключениеПоОшибке(СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'При изменении идентификатора объекта метаданных указано - |полное имя ""%1"", - |которое уже используется в справочнике.'"), - Объект.ПолноеИмя)); - - КонецЕсли; - - ОбновитьСвойстваИдентификатора(Объект); + ОбъектыРасширений = ЭтоОбъектРасширений(Объект); + СтандартныеПодсистемыПовтИсп.ИдентификаторыОбъектовМетаданныхПроверкаИспользования(, ОбъектыРасширений); + + // Отключение механизма регистрации объектов. + Объект.ДополнительныеСвойства.Вставить("ОтключитьМеханизмРегистрацииОбъектов"); + + // Регистрация объекта на всех узлах РИБ. + Для Каждого ПланОбмена Из СтандартныеПодсистемыПовтИсп.ПланыОбменаРИБ() Цикл + СтандартныеПодсистемыСервер.ЗарегистрироватьОбъектНаВсехУзлах(Объект, ПланОбмена); + КонецЦикла; + + Если Объект.ОбменДанными.Загрузка Тогда + Возврат; КонецЕсли; - Если ОбщегоНазначения.ЭтоПодчиненныйУзелРИБ() Тогда - - Если Объект.ЭтоНовый() - И Не ЭтоКоллекция(Объект.ПолучитьСсылкуНового()) Тогда - - ВызватьИсключениеПоОшибке( - НСтр("ru = 'Добавление новых элементов может быть выполнено - |только в главном узле распределенной информационной базы.'")); - КонецЕсли; - - Если Не Объект.ПометкаУдаления - И Не ЭтоКоллекция(Объект.Ссылка) Тогда - - Если ВРег(Объект.ПолноеИмя) <> ВРег(ОбщегоНазначения.ЗначениеРеквизитаОбъекта(Объект.Ссылка, "ПолноеИмя")) Тогда - ВызватьИсключениеПоОшибке( - НСтр("ru = 'Изменение реквизита ""Полное имя"" может быть выполнено - |только в главном узле распределенной информационной базы.'")); - КонецЕсли; - КонецЕсли; + ПроверитьОбъектПередЗаписью(Объект); + +КонецПроцедуры + +// Предотвращает удаление идентификаторов объектов метаданных не помеченных на удаление. +Процедура ПередУдалениемОбъекта(Объект) Экспорт + + ОбъектыРасширений = ЭтоОбъектРасширений(Объект); + СтандартныеПодсистемыПовтИсп.ИдентификаторыОбъектовМетаданныхПроверкаИспользования(, ОбъектыРасширений); + + // Отключение механизма регистрации объектов. + // Ссылки идентификаторов удаляются независимо во всех узлах + // через механизм пометки удаления и удаления помеченных объектов. + Объект.ДополнительныеСвойства.Вставить("ОтключитьМеханизмРегистрацииОбъектов"); + + Если Объект.ОбменДанными.Загрузка Тогда + Возврат; + КонецЕсли; + + Если Не Объект.ПометкаУдаления Тогда + ВызватьИсключениеПоОшибке(ОбъектыРасширений, + НСтр("ru = 'Удаление идентификаторов объектов, у которых значение + |реквизита ""Пометка удаления"" установлено Ложь недопустимо.'")); КонецЕсли; КонецПроцедуры // Только для внутреннего использования. -Процедура ВызватьИсключениеПоОшибке(ТекстОшибки) Экспорт +Процедура ФормаСпискаПриСозданииНаСервере(Форма) Экспорт - ВызватьИсключение - НСтр("ru = 'Ошибка при работе со справочником ""Идентификаторы объектов метаданных"".'") + " - | - |" + ТекстОшибки; + Параметры = Форма.Параметры; + Элементы = Форма.Элементы; + + УпорядочитьИОформитьСписок(Форма); + + Если Параметры.Свойство("АвтоТест") Тогда // Возврат при получении формы для анализа. + Возврат; + КонецЕсли; + + Если Параметры.РежимВыбора Тогда + СтандартныеПодсистемыСервер.УстановитьКлючНазначенияФормы(Форма, "ВыборПодбор"); + РежимОткрытияОкна = РежимОткрытияОкнаФормы.БлокироватьОкноВладельца; + Элементы.Список.РежимВыбора = Истина; + КонецЕсли; + + Параметры.Свойство("ВыбиратьГруппыОбъектовМетаданных", Форма.ВыбиратьГруппыОбъектовМетаданных); + +КонецПроцедуры + +// Только для внутреннего использования. +Процедура ФормаЭлементаПриСозданииНаСервере(Форма) Экспорт + + ОбъектыРасширений = ЭтоОбъектРасширений(Форма.Объект.Ссылка); + + Параметры = Форма.Параметры; + Элементы = Форма.Элементы; + + Если Параметры.Свойство("АвтоТест") Тогда // Возврат при получении формы для анализа. + Возврат; + КонецЕсли; + + Форма.ТолькоПросмотр = Истина; + + Форма.ПустаяСсылкаПредставление = Строка(ТипЗнч(Форма.Объект.ЗначениеПустойСсылки)); + + Если НЕ Пользователи.ЭтоПолноправныйПользователь(, Не ОбъектыРасширений) + ИЛИ ЗапрещеноИзменятьПолноеИмя(Форма.Объект) + ИЛИ Не ОбъектыРасширений И ОбщегоНазначения.ЭтоПодчиненныйУзелРИБ() + ИЛИ ОбъектыРасширений И Справочники.ИдентификаторыОбъектовРасширений.ОбъектРасширенияОтключен(Форма.Объект.Ссылка) Тогда + + Элементы.ФормаВключитьВозможностьРедактирования.Видимость = Ложь; + КонецЕсли; КонецПроцедуры //////////////////////////////////////////////////////////////////////////////// // Вспомогательные процедуры и функции. -Функция ВыгрузкаВсехИдентификаторов() +Процедура ОбновитьДанные(ЕстьИзменения, ЕстьУдаленные, ТолькоПроверка, + ЕстьКритичныеИзменения, СписокКритичныхИзменений, СвойстваРасширений, ОбъектыРасширений) + + СвойстваОбъектовМетаданных = СвойстваОбъектовМетаданных(ОбъектыРасширений, СвойстваРасширений.ИменаОбъектов); + СправочникМенеджер = ОбщегоНазначения.МенеджерОбъектаПоПолномуИмени(ИмяСправочника(ОбъектыРасширений)); + + // Найден - состояние, когда для объекта метаданных найден идентификатор. + СвойстваОбъектовМетаданных.Колонки.Добавить("Найден", Новый ОписаниеТипов("Булево")); + + // Порядок обновления: + // 1. Переименование объектов метаданных (с учетом нижестоящих подсистем). + // 2. Обновление предопределенных идентификаторов (коллекций объектов метаданных). + // 3. Обновление идентификаторов объектов метаданных, которые имеют ключ объекта метаданных. + // 4. Обновление идентификаторов объектов метаданных, которые не имеют ключа объекта метаданных. + // 5. В процессе 3 и 4 пометка удаления дублей идентификаторов (по полным именам). + // 6. Добавление новых идентификаторов объектов метаданных. + // 7. Обновление родителей идентификаторов объектов метаданных и запись обновленных. + + ВерсияРасширений = ПараметрыСеанса.ВерсияРасширений; + + Блокировка = Новый БлокировкаДанных; + ЭлементБлокировки = Блокировка.Добавить(ИмяСправочника(ОбъектыРасширений)); + ЭлементБлокировки.Режим = РежимБлокировкиДанных.Исключительный; + Если ОбъектыРасширений Тогда + ЭлементБлокировки = Блокировка.Добавить("РегистрСведений.ИдентификаторыОбъектовВерсийРасширений"); + ЭлементБлокировки.Режим = РежимБлокировкиДанных.Исключительный; + ЭлементБлокировки.УстановитьЗначение("ВерсияРасширений", ВерсияРасширений); + КонецЕсли; + + СнятьМонопольныйРежим = Ложь; + НачатьТранзакцию(); + Попытка + Блокировка.Заблокировать(); + + Выгрузка = ВыгрузкаВсехИдентификаторов(ОбъектыРасширений); + Выгрузка.Колонки.Добавить("Обновлен", Новый ОписаниеТипов("Булево")); + Выгрузка.Колонки.Добавить("ОбъектМетаданных"); + Выгрузка.Колонки.Удалить("НоваяСсылка"); + + Если НЕ ОбъектыРасширений + И НЕ ОбщегоНазначения.ЭтоПодчиненныйУзелРИБ() Тогда + // Переименование полных имен перед обработкой (для РИБ только в главном узле). + // Для расширений не поддерживается. + ПереименоватьПолныеИмена(Выгрузка); + КонецЕсли; + + СписокПереименованийОбъектовМетаданных = ""; + ЕстьТекущиеКритичныеИзменения = Ложь; + + // Обработка идентификаторов объектов метаданных. + Для каждого Свойства Из Выгрузка Цикл + + // Проверка и обновление свойств идентификаторов коллекций объектов метаданных. + Если Свойства.ЭтоКоллекция Тогда + ПроверитьОбновитьСвойстваКоллекции(Свойства, ОбъектыРасширений); + Продолжить; + КонецЕсли; + + Если ОбъектыРасширений + И СвойстваРасширений.ИменаНеподключенныхРасширений[Свойства.ИмяРасширения] <> Неопределено Тогда + // Элементы неподключенных расширений остаются неизменными для возможности + // использования после исправления ошибок в расширениях так, чтобы обработка + // удаления помеченных не удалила связанные данные. + Продолжить; + КонецЕсли; + + Если ОбъектыРасширений + И СвойстваРасширений.ИменаПодключенныхРасширений[Свойства.ИмяРасширения] = Неопределено Тогда + + СвойстваОбновлены = Ложь; + ОбновитьСвойстваПомеченногоНаУдаление(Свойства, СвойстваОбновлены, ЕстьУдаленные); + Если СвойстваОбновлены Тогда + Свойства.Обновлен = Истина; + КонецЕсли; + КонецЕсли; + + КлючОбъектаМетаданных = Свойства.КлючОбъектаМетаданных; + ОбъектМетаданных = ОбъектМетаданныхПоКлючу(КлючОбъектаМетаданных); + + Если ОбъектМетаданных = Неопределено Тогда + // Если объект метаданных без ключа, то его можно найти только по полному имени. + ОбъектМетаданных = МетаданныеНайтиПоПолномуИмени(Свойства.ПолноеИмя); + Иначе + // Если объект метаданных удалялся с целью реструктуризации, тогда + // старый идентификатор нужно использовать для нового объекта метаданных, + // а для старых объектов метаданных создать новые идентификаторы. + Если ВРег(Лев(ОбъектМетаданных.Имя, СтрДлина("Удалить"))) = ВРег("Удалить") + И ВРег(Лев(Свойства.Имя, СтрДлина("Удалить"))) <> ВРег("Удалить") Тогда + + НовыйОбъектМетаданных = МетаданныеНайтиПоПолномуИмени(Свойства.ПолноеИмя); + Если НовыйОбъектМетаданных <> Неопределено Тогда + ОбъектМетаданных = НовыйОбъектМетаданных; + КлючОбъектаМетаданных = Неопределено; // Чтобы выполнить обновление идентификатора. + КонецЕсли; + КонецЕсли; + КонецЕсли; + + // Если объект метаданных найден по ключу или полному имени, + // тогда нужно подготовить строку свойств объекта метаданных. + Если ОбъектМетаданных <> Неопределено Тогда + СвойстваОбъекта = СвойстваОбъектовМетаданных.Найти(ОбъектМетаданных.ПолноеИмя(), "ПолноеИмя"); + Если СвойстваОбъекта = Неопределено Тогда + ОбъектМетаданных = Неопределено; + Иначе + Свойства.ОбъектМетаданных = ОбъектМетаданных; + КонецЕсли; + КонецЕсли; + + Если ОбъектМетаданных = Неопределено ИЛИ СвойстваОбъекта.Найден Тогда + // Если объект метаданных не найден или найден повторно + // тогда идентификатор требуется пометить на удаление. + СвойстваОбновлены = Ложь; + ОбновитьСвойстваПомеченногоНаУдаление(Свойства, СвойстваОбновлены, ЕстьУдаленные); + Если СвойстваОбновлены Тогда + Свойства.Обновлен = Истина; + КонецЕсли; + Иначе + // Обновление свойств существующих объектов метаданных, если изменились. + СвойстваОбъекта.Найден = Истина; + Если Свойства.Наименование <> СвойстваОбъекта.Наименование + ИЛИ Свойства.ПорядокКоллекции <> СвойстваОбъекта.ПорядокКоллекции + ИЛИ Свойства.Имя <> СвойстваОбъекта.Имя + ИЛИ Свойства.Синоним <> СвойстваОбъекта.Синоним + ИЛИ Свойства.ПолноеИмя <> СвойстваОбъекта.ПолноеИмя + ИЛИ Свойства.ПолныйСиноним <> СвойстваОбъекта.ПолныйСиноним + ИЛИ Свойства.БезДанных <> СвойстваОбъекта.БезДанных + ИЛИ Свойства.ЗначениеПустойСсылки <> СвойстваОбъекта.ЗначениеПустойСсылки + ИЛИ Свойства.ИмяРасширения <> СвойстваОбъекта.ИмяРасширения + ИЛИ Свойства.ИмяПредопределенныхДанных <> "" + ИЛИ Свойства.ПометкаУдаления + ИЛИ КлючОбъектаМетаданных = Неопределено + ИЛИ СвойстваОбъекта.БезКлючаОбъектаМетаданных + И КлючОбъектаМетаданных <> Тип("Неопределено") Тогда + + Если ВРег(Свойства.ПолноеИмя) <> ВРег(СвойстваОбъекта.ПолноеИмя) Тогда + ЕстьТекущиеКритичныеИзменения = Истина; + ЕстьКритичныеИзменения = Истина; + СписокПереименованийОбъектовМетаданных = СписокПереименованийОбъектовМетаданных + + ?(ЗначениеЗаполнено(СписокПереименованийОбъектовМетаданных), "," + Символы.ПС, "") + + Свойства.ПолноеИмя + " -> " + СвойстваОбъекта.ПолноеИмя; + КонецЕсли; + + // Установка новых свойств идентификатора объекта метаданных. + ЗаполнитьЗначенияСвойств(Свойства, СвойстваОбъекта); + + Свойства.ИмяПредопределенныхДанных = ""; + + Если КлючОбъектаМетаданных = Неопределено + ИЛИ СвойстваОбъекта.БезКлючаОбъектаМетаданных + И КлючОбъектаМетаданных <> Тип("Неопределено") Тогда + + Свойства.КлючОбъектаМетаданных = КлючОбъектаМетаданных(СвойстваОбъекта.ПолноеИмя); + КонецЕсли; + + Свойства.ПометкаУдаления = Ложь; + Свойства.Обновлен = Истина; + КонецЕсли; + КонецЕсли; + КонецЦикла; + + СписокНовыхОбъектовМетаданных = ""; + + // Добавление идентификаторов новых объектов метаданных. + Для каждого СвойстваОбъекта Из СвойстваОбъектовМетаданных.НайтиСтроки(Новый Структура("Найден", Ложь)) Цикл + Свойства = Выгрузка.Добавить(); + ЗаполнитьЗначенияСвойств(Свойства, СвойстваОбъекта); + Свойства.ЭтоНовый = Истина; + Свойства.Ссылка = НоваяСсылкаСправочника(ОбъектыРасширений); + Свойства.ПометкаУдаления = Ложь; + Свойства.ОбъектМетаданных = СвойстваОбъекта.ОбъектМетаданных; + Свойства.КлючОбъектаМетаданных = КлючОбъектаМетаданных(Свойства.ПолноеИмя); + ЕстьТекущиеКритичныеИзменения = Истина; + ЕстьКритичныеИзменения = Истина; + СписокНовыхОбъектовМетаданных = СписокНовыхОбъектовМетаданных + + ?(ЗначениеЗаполнено(СписокНовыхОбъектовМетаданных), "," + Символы.ПС, "") + + СвойстваОбъекта.ПолноеИмя; + КонецЦикла; + + СписокКритичныхИзменений = ""; + Если ЗначениеЗаполнено(СписокПереименованийОбъектовМетаданных) Тогда + СписокКритичныхИзменений = НСтр("ru = 'Переименование идентификаторов объектов метаданных СтароеПолноеИмя -> НовоеПолноеИмя:'") + + Символы.ПС + СписокПереименованийОбъектовМетаданных + Символы.ПС + Символы.ПС; + КонецЕсли; + Если ЗначениеЗаполнено(СписокНовыхОбъектовМетаданных) Тогда + СписокКритичныхИзменений = СписокКритичныхИзменений + + НСтр("ru = 'Добавление новых идентификаторов объектов метаданных:'") + + Символы.ПС + СписокНовыхОбъектовМетаданных + Символы.ПС; + КонецЕсли; + + Если Не ТолькоПроверка + И Не МонопольныйРежим() + И Не ОбъектыРасширений + И ЕстьТекущиеКритичныеИзменения Тогда + + ЗафиксироватьТранзакцию(); + Попытка + УстановитьМонопольныйРежим(Истина); + Исключение + НачатьТранзакцию(); + ВызватьИсключение; + КонецПопытки; + СнятьМонопольныйРежим = Истина; + НачатьТранзакцию(); + КонецЕсли; + + Если ОбъектыРасширений Тогда + НаборЗаписей = РегистрыСведений.ИдентификаторыОбъектовВерсийРасширений.СоздатьНаборЗаписей(); + НаборЗаписей.Отбор.ВерсияРасширений.Установить(ВерсияРасширений); + НаборЗаписей.Прочитать(); + ТаблицаЗаписей = НаборЗаписей.Выгрузить(); + ТаблицаЗаписей.Колонки.Добавить("Удалить", Новый ОписаниеТипов("Булево")); + ТаблицаЗаписей.ЗаполнитьЗначения(Истина, "Удалить"); + ТаблицаЗаписей.Индексы.Добавить("Идентификатор, ПолноеИмяОбъекта, ВерсияРасширений"); + ОбновитьНаборЗаписей = Ложь; + КонецЕсли; + + // Обновление родителей идентификаторов объектов метаданных. + Для каждого Свойства Из Выгрузка Цикл + + Если НЕ Свойства.ЭтоКоллекция Тогда + СвойстваОбъекта = СвойстваОбъектовМетаданных.Найти(Свойства.ПолноеИмя, "ПолноеИмя"); + НовыйРодитель = ПустаяСсылкаСправочника(ОбъектыРасширений); + + Если СвойстваОбъекта <> Неопределено Тогда + Если НЕ ЗначениеЗаполнено(СвойстваОбъекта.ПолноеИмяРодителя) Тогда + // Коллекция объектов метаданных. + НовыйРодитель = СвойстваОбъекта.Родитель; + Иначе + // Не коллекция объектов метаданных, например, подсистема. + ОписаниеРодителя = Выгрузка.Найти(СвойстваОбъекта.ПолноеИмяРодителя, "ПолноеИмя"); + Если ОписаниеРодителя <> Неопределено Тогда + НовыйРодитель = ОписаниеРодителя.Ссылка; + КонецЕсли; + КонецЕсли; + КонецЕсли; + + Если Свойства.Родитель <> НовыйРодитель Тогда + Свойства.Родитель = НовыйРодитель; + Свойства.Обновлен = Истина; + КонецЕсли; + + Если ОбъектыРасширений + И Свойства.ПометкаУдаления = Ложь + И СвойстваРасширений.ИменаНеподключенныхРасширений[Свойства.ИмяРасширения] = Неопределено Тогда + + Отбор = Новый Структура; + Отбор.Вставить("ВерсияРасширений", ВерсияРасширений); + Отбор.Вставить("Идентификатор", Свойства.Ссылка); + Отбор.Вставить("ПолноеИмяОбъекта", Свойства.ПолноеИмя); + Строки = ТаблицаЗаписей.НайтиСтроки(Отбор); + Если Строки.Количество() = 0 Тогда + ОбновитьНаборЗаписей = Истина; + ЗаполнитьЗначенияСвойств(ТаблицаЗаписей.Добавить(), Отбор); + Иначе + Строки[0].Удалить = Ложь; + КонецЕсли; + КонецЕсли; + КонецЕсли; + + Если Свойства.ЭтоНовый Тогда + ТаблицаОбъект = СоздатьЭлементСправочника(ОбъектыРасширений); + ТаблицаОбъект.УстановитьСсылкуНового(Свойства.Ссылка); + + ИначеЕсли Свойства.Обновлен Тогда + ТаблицаОбъект = Свойства.Ссылка.ПолучитьОбъект(); + Иначе + Продолжить; + КонецЕсли; + + ЕстьТекущиеИзменения = Истина; + ЕстьИзменения = Истина; + Если ТолькоПроверка Тогда + ЗафиксироватьТранзакцию(); + Возврат; + КонецЕсли; + + ЗаполнитьЗначенияСвойств(ТаблицаОбъект, Свойства); + ТаблицаОбъект.КлючОбъектаМетаданных = Новый ХранилищеЗначения(Свойства.КлючОбъектаМетаданных); + ТаблицаОбъект.ОбменДанными.Загрузка = Истина; + ПроверитьОбъектПередЗаписью(ТаблицаОбъект, Истина); + ТаблицаОбъект.Записать(); + КонецЦикла; + + Если ОбъектыРасширений Тогда + ТаблицаЗаписей.Индексы.Добавить("Удалить"); + Строки = ТаблицаЗаписей.НайтиСтроки(Новый Структура("Удалить", Истина)); + Если Строки.Количество() > 0 Тогда + ОбновитьНаборЗаписей = Истина; + Для Каждого Строка Из Строки Цикл + ТаблицаЗаписей.Удалить(Строка); + КонецЦикла; + КонецЕсли; + Если ТаблицаЗаписей.Количество() = 0 + И ЗначениеЗаполнено(ВерсияРасширений) Тогда + // Добавление записи, если в расширении нет объектов метаданных, + // чтобы при проверке наличия кэша, получить значение Истина. + ТаблицаЗаписей.Добавить().ВерсияРасширений = ВерсияРасширений; + ОбновитьНаборЗаписей = Истина; + КонецЕсли; + Если ОбновитьНаборЗаписей Тогда + ЕстьКритичныеИзменения = Истина; + ЕстьТекущиеИзменения = Истина; + ЕстьИзменения = Истина; + Если ТолькоПроверка Тогда + ЗафиксироватьТранзакцию(); + Возврат; + КонецЕсли; + НаборЗаписей.Загрузить(ТаблицаЗаписей); + НаборЗаписей.Записать(); + КонецЕсли; + КонецЕсли; + + Если ЗначениеЗаполнено(СписокКритичныхИзменений) Тогда + ЗаписьЖурналаРегистрации(?(ОбъектыРасширений, + НСтр("ru = 'Идентификаторы объектов расширений.Выполнены критичные изменения'", + ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), + НСтр("ru = 'Идентификаторы объектов метаданных.Выполнены критичные изменения'", + ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка())), + УровеньЖурналаРегистрации.Информация, + , + , + СписокКритичныхИзменений, + РежимТранзакцииЗаписиЖурналаРегистрации.Транзакционная); + КонецЕсли; + + Если Не ОбъектыРасширений И ПланыОбмена.ГлавныйУзел() = Неопределено Тогда + ПодготовитьСписокНовыхПодсистемВГлавномУзле(Выгрузка); + КонецЕсли; + + ЗафиксироватьТранзакцию(); + Исключение + ОтменитьТранзакцию(); + Если СнятьМонопольныйРежим Тогда + УстановитьМонопольныйРежим(Ложь); + КонецЕсли; + ВызватьИсключение; + КонецПопытки; + + Если СнятьМонопольныйРежим Тогда + УстановитьМонопольныйРежим(Ложь); + КонецЕсли; + +КонецПроцедуры + +Функция ВыгрузкаВсехИдентификаторов(ОбъектыРасширений = Ложь) Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ - | Идентификаторы.Ссылка, + | Идентификаторы.Ссылка КАК Ссылка, | Идентификаторы.ИмяПредопределенныхДанных КАК ИмяПредопределенныхДанных, - | Идентификаторы.Родитель, - | Идентификаторы.ПометкаУдаления, - | Идентификаторы.Наименование, + | Идентификаторы.Родитель КАК Родитель, + | Идентификаторы.ПометкаУдаления КАК ПометкаУдаления, + | Идентификаторы.Наименование КАК Наименование, | Идентификаторы.ПорядокКоллекции, | Идентификаторы.Имя, | Идентификаторы.Синоним, @@ -1122,9 +1674,14 @@ | Идентификаторы.БезДанных, | Идентификаторы.ЗначениеПустойСсылки, | Идентификаторы.КлючОбъектаМетаданных КАК ХранилищеКлюча, - | Идентификаторы.НоваяСсылка + | Идентификаторы.НоваяСсылка, + | &ИмяРасширения КАК ИмяРасширения |ИЗ | Справочник.ИдентификаторыОбъектовМетаданных КАК Идентификаторы"; + УточнитьИмяСправочникаВТекстеЗапроса(Запрос.Текст, ОбъектыРасширений); + Запрос.Текст = СтрЗаменить(Запрос.Текст, "&ИмяРасширения", + ?(ОбъектыРасширений, "Идентификаторы.ИмяРасширения", """""")); + Выгрузка = Запрос.Выполнить().Выгрузить(); Выгрузка.Колонки.Добавить("КлючОбъектаМетаданных"); Выгрузка.Колонки.Добавить("БезКлючаОбъектаМетаданных", Новый ОписаниеТипов("Булево")); @@ -1146,13 +1703,14 @@ Выгрузка.Индексы.Добавить("Ссылка"); Выгрузка.Индексы.Добавить("ПолноеИмя"); - СвойстваКоллекций = СтандартныеПодсистемыПовтИсп.СвойстваКоллекцийОбъектовМетаданных(); + СвойстваКоллекций = СтандартныеПодсистемыПовтИсп.СвойстваКоллекцийОбъектовМетаданных(ОбъектыРасширений); Для каждого СвойстваКоллекции Из СвойстваКоллекций Цикл - Строка = Выгрузка.Найти(СвойстваКоллекции.ИдентификаторКоллекции, "Ссылка"); + ИдентификаторКоллекции = ИдентификаторКоллекции(СвойстваКоллекции.Идентификатор, ОбъектыРасширений); + Строка = Выгрузка.Найти(ИдентификаторКоллекции, "Ссылка"); Если Строка = Неопределено Тогда Строка = Выгрузка.Добавить(); - Строка.Ссылка = СвойстваКоллекции.ИдентификаторКоллекции; + Строка.Ссылка = ИдентификаторКоллекции; Строка.ЭтоНовый = Истина; КонецЕсли; Строка.ЭтоКоллекция = Истина; @@ -1168,7 +1726,7 @@ Процедура ПереименоватьПолныеИмена(Выгрузка) - ТаблицаПереименования = ТаблицаПереименованияДляТекущейВерсии(); + ТаблицаПереименования = СтандартныеПодсистемыПовтИсп.ТаблицаПереименованияДляТекущейВерсии(); Для каждого ОписаниеПереименования Из ТаблицаПереименования Цикл ДлинаСтарогоПолногоИмени = СтрДлина(ОписаниеПереименования.СтароеПолноеИмя); @@ -1200,6 +1758,8 @@ Процедура ОбновитьСвойстваПомеченногоНаУдаление(Свойства, СвойстваОбновлены = Ложь, ЕстьУдаленные = Ложь) + ОбъектыРасширений = ЭтоОбъектРасширений(Свойства.Ссылка); + Если ТипЗнч(Свойства.КлючОбъектаМетаданных) = Тип("ХранилищеЗначения") Тогда КлючОбъектаМетаданных = Свойства.КлючОбъектаМетаданных.Получить(); Иначе @@ -1213,7 +1773,9 @@ ИЛИ Лев(Свойства.Синоним, 1) <> "?" ИЛИ Лев(Свойства.ПолноеИмя, 1) <> "?" ИЛИ Лев(Свойства.ПолныйСиноним, 1) <> "?" - ИЛИ Найти(Свойства.ПолноеИмя, "(") = 0 + ИЛИ ОбъектыРасширений + И Лев(Свойства.ИмяРасширения, 1) <> "?" + ИЛИ СтрНайти(Свойства.ПолноеИмя, "(") = 0 ИЛИ Свойства.ЗначениеПустойСсылки <> Неопределено ИЛИ КлючОбъектаМетаданных <> Неопределено Тогда @@ -1223,13 +1785,18 @@ // Установка новых свойств идентификатора объекта метаданных. Свойства.ПометкаУдаления = Истина; - Свойства.Родитель = ПустаяСсылка(); + Свойства.Родитель = ПустаяСсылкаСправочника(ЭтоОбъектРасширений(Свойства.Ссылка)); Свойства.Наименование = ВставитьЗнакВопроса(Свойства.Наименование); Свойства.Имя = ВставитьЗнакВопроса(Свойства.Имя); Свойства.Синоним = ВставитьЗнакВопроса(Свойства.Синоним); Свойства.ПолноеИмя = УникальноеПолноеИмя(Свойства); Свойства.ПолныйСиноним = ВставитьЗнакВопроса(Свойства.ПолныйСиноним); Свойства.ЗначениеПустойСсылки = Неопределено; + + Если ОбъектыРасширений Тогда + Свойства.ИмяРасширения = ВставитьЗнакВопроса(Свойства.ИмяРасширения); + КонецЕсли; + Если ТипЗнч(Свойства.КлючОбъектаМетаданных) = Тип("ХранилищеЗначения") Тогда Свойства.КлючОбъектаМетаданных = Новый ХранилищеЗначения(Неопределено); Иначе @@ -1240,10 +1807,10 @@ КонецПроцедуры -Процедура ПроверитьОбновитьСвойстваКоллекции(Знач ТекущиеСвойства) +Процедура ПроверитьОбновитьСвойстваКоллекции(Знач ТекущиеСвойства, ОбъектыРасширений) - НовыеСвойства = СтандартныеПодсистемыПовтИсп.СвойстваКоллекцийОбъектовМетаданных( - ).Найти(ТекущиеСвойства.Ссылка, "ИдентификаторКоллекции"); + СвойстваКоллекций = СтандартныеПодсистемыПовтИсп.СвойстваКоллекцийОбъектовМетаданных(ОбъектыРасширений); + НовыеСвойства = СвойстваКоллекций.Найти(ТекущиеСвойства.Ссылка.УникальныйИдентификатор(), "Идентификатор"); НаименованиеКоллекции = НовыеСвойства.Синоним; @@ -1279,7 +1846,7 @@ Функция КлючОбъектаМетаданных(ПолноеИмя) - ПозицияТочки = Найти(ПолноеИмя, "."); + ПозицияТочки = СтрНайти(ПолноеИмя, "."); КлассОМ = Лев( ПолноеИмя, ПозицияТочки-1); ИмяОМ = Сред(ПолноеИмя, ПозицияТочки+1); @@ -1344,6 +1911,70 @@ КонецФункции +Функция КлючОбъектаМетаданныхСоответствуетПолномуИмени(СвойстваИдентификатора) + + РезультатПроверки = Новый Структура; + РезультатПроверки.Вставить("НеСоответствует", Истина); + РезультатПроверки.Вставить("КлючОбъектаМетаданных", Неопределено); + + КлючОбъектаМетаданных = СвойстваИдентификатора.КлючОбъектаМетаданных.Получить(); + ОбъектыРасширений = ЭтоОбъектРасширений(СвойстваИдентификатора.Ссылка); + + Если КлючОбъектаМетаданных <> Неопределено + И КлючОбъектаМетаданных <> Тип("Неопределено") Тогда + // Ключ задан, поиск объекта метаданных по ключу. + РезультатПроверки.Вставить("КлючОбъектаМетаданных", КлючОбъектаМетаданных); + ОбъектМетаданных = ОбъектМетаданныхПоКлючу(КлючОбъектаМетаданных); + Если ОбъектМетаданных <> Неопределено Тогда + РезультатПроверки.НеСоответствует = ОбъектМетаданных.ПолноеИмя() <> СвойстваИдентификатора.ПолноеИмя; + КонецЕсли; + Иначе + // Ключ не задан, поиск объекта метаданных по полному имени. + ОбъектМетаданных = МетаданныеНайтиПоПолномуИмени(СвойстваИдентификатора.ПолноеИмя); + Если ОбъектМетаданных = Неопределено Тогда + // Возможно задана коллекция + + Строка = СтандартныеПодсистемыПовтИсп.СвойстваКоллекцийОбъектовМетаданных(ОбъектыРасширений).Найти( + СвойстваИдентификатора.Ссылка.УникальныйИдентификатор(), "Идентификатор"); + + Если Строка <> Неопределено Тогда + ОбъектМетаданных = Метаданные[Строка.Имя]; + РезультатПроверки.НеСоответствует = Строка.Имя <> СвойстваИдентификатора.ПолноеИмя; + КонецЕсли; + Иначе + РезультатПроверки.НеСоответствует = Ложь; + КонецЕсли; + КонецЕсли; + + РезультатПроверки.Вставить("ОбъектМетаданных", ОбъектМетаданных); + + Возврат РезультатПроверки; + +КонецФункции + +Функция ЗапрещеноИзменятьПолноеИмя(Объект) + + ОбъектыРасширений = ЭтоОбъектРасширений(Объект); + Если ЭтоКоллекция(Объект.Ссылка, ОбъектыРасширений) Тогда + Возврат Истина; + КонецЕсли; + + ПозицияТочки = СтрНайти(Объект.ПолноеИмя, "."); + ИмяБазовогоТипа = Лев(Объект.ПолноеИмя, ПозицияТочки -1); + + СвойстваКоллекций = СтандартныеПодсистемыПовтИсп.СвойстваКоллекцийОбъектовМетаданных(ОбъектыРасширений); + СвойстваКоллекции = СвойстваКоллекций.Найти(ИмяБазовогоТипа, "ИмяВЕдЧисле"); + + Если СвойстваКоллекции <> Неопределено + И НЕ СвойстваКоллекции.БезКлючаОбъектаМетаданных Тогда + + Возврат Истина; + КонецЕсли; + + Возврат Ложь; + +КонецФункции + Функция ОбъектМетаданныхПоКлючу(КлючОбъектаМетаданных) ОбъектМетаданных = Неопределено; @@ -1356,28 +1987,33 @@ КонецФункции -Функция СвойстваОбъектовМетаданных(СвойстваКоллекций = Неопределено) +Функция СвойстваОбъектовМетаданных(ОбъектыРасширений, ИменаОбъектовРасширений, СвойстваКоллекций = Неопределено) + + МассивТиповРодителя = Новый Массив; + МассивТиповРодителя.Добавить(ТипЗнч(ПустаяСсылкаСправочника(ОбъектыРасширений))); СвойстваОбъектовМетаданных = Новый ТаблицаЗначений; СвойстваОбъектовМетаданных.Колонки.Добавить("Наименование", Новый ОписаниеТипов("Строка",, Новый КвалификаторыСтроки(150))); СвойстваОбъектовМетаданных.Колонки.Добавить("ПолноеИмя", Новый ОписаниеТипов("Строка",, Новый КвалификаторыСтроки(510))); СвойстваОбъектовМетаданных.Колонки.Добавить("ПолноеИмяРодителя", Новый ОписаниеТипов("Строка",, Новый КвалификаторыСтроки(510))); СвойстваОбъектовМетаданных.Колонки.Добавить("ПорядокКоллекции", Новый ОписаниеТипов("Число")); - СвойстваОбъектовМетаданных.Колонки.Добавить("Родитель", Новый ОписаниеТипов("СправочникСсылка.ИдентификаторыОбъектовМетаданных")); + СвойстваОбъектовМетаданных.Колонки.Добавить("Родитель", Новый ОписаниеТипов(МассивТиповРодителя)); СвойстваОбъектовМетаданных.Колонки.Добавить("Имя", Новый ОписаниеТипов("Строка",, Новый КвалификаторыСтроки(150))); СвойстваОбъектовМетаданных.Колонки.Добавить("Синоним", Новый ОписаниеТипов("Строка",, Новый КвалификаторыСтроки(255))); СвойстваОбъектовМетаданных.Колонки.Добавить("ПолныйСиноним", Новый ОписаниеТипов("Строка",, Новый КвалификаторыСтроки(510))); СвойстваОбъектовМетаданных.Колонки.Добавить("БезДанных", Новый ОписаниеТипов("Булево")); СвойстваОбъектовМетаданных.Колонки.Добавить("БезКлючаОбъектаМетаданных", Новый ОписаниеТипов("Булево")); + СвойстваОбъектовМетаданных.Колонки.Добавить("ИмяРасширения", Новый ОписаниеТипов("Строка",, Новый КвалификаторыСтроки(128))); СвойстваОбъектовМетаданных.Колонки.Добавить("ЗначениеПустойСсылки"); СвойстваОбъектовМетаданных.Колонки.Добавить("ОбъектМетаданных"); Если СвойстваКоллекций = Неопределено Тогда - СвойстваКоллекций = СтандартныеПодсистемыПовтИсп.СвойстваКоллекцийОбъектовМетаданных(); + СвойстваКоллекций = СтандартныеПодсистемыПовтИсп.СвойстваКоллекцийОбъектовМетаданных(ОбъектыРасширений); КонецЕсли; Для каждого СвойстваКоллекции Из СвойстваКоллекций Цикл - ДобавитьСвойстваОбъектовМетаданных(Метаданные[СвойстваКоллекции.Имя], СвойстваКоллекции, СвойстваОбъектовМетаданных); + ДобавитьСвойстваОбъектовМетаданных(Метаданные[СвойстваКоллекции.Имя], СвойстваКоллекции, + СвойстваОбъектовМетаданных, ОбъектыРасширений, ИменаОбъектовРасширений); КонецЦикла; СвойстваОбъектовМетаданных.Индексы.Добавить("ПолноеИмя"); @@ -1389,19 +2025,29 @@ Процедура ДобавитьСвойстваОбъектовМетаданных(Знач КоллекцияОбъектовМетаданных, Знач СвойстваКоллекции, Знач СвойстваОбъектовМетаданных, + Знач ОбъектыРасширений, + Знач ИменаОбъектовРасширений, Знач ПолноеИмяРодителя = "", Знач ПолныйСинонимРодителя = "") Для каждого ОбъектМетаданных Из КоллекцияОбъектовМетаданных Цикл ПолноеИмя = ОбъектМетаданных.ПолноеИмя(); - Если Найти(СвойстваКоллекции.ИмяВЕдЧисле, "Подсистема") <> 0 Тогда + Если ИменаОбъектовРасширений <> Неопределено Тогда + Строка = ИменаОбъектовРасширений.Найти(ПолноеИмя, "ПолноеИмя"); + ИмяРасширения = ?(Строка = Неопределено, Неопределено, Строка.ИмяРасширения); + Если ЗначениеЗаполнено(ИмяРасширения) <> ОбъектыРасширений Тогда + Продолжить; + КонецЕсли; + КонецЕсли; + + Если СтрНайти(СвойстваКоллекции.ИмяВЕдЧисле, "Подсистема") <> 0 Тогда МетаданныеНайтиПоПолномуИмени(ПолноеИмя); КонецЕсли; Если НЕ СвойстваКоллекции.БезДанных - И Найти(СвойстваКоллекции.ИмяВЕдЧисле, "Регистр") = 0 - И Найти(СвойстваКоллекции.ИмяВЕдЧисле, "Константа") = 0 Тогда + И СтрНайти(СвойстваКоллекции.ИмяВЕдЧисле, "Регистр") = 0 + И СтрНайти(СвойстваКоллекции.ИмяВЕдЧисле, "Константа") = 0 Тогда ЗначениеПустойСсылки = ОбщегоНазначения.МенеджерОбъектаПоПолномуИмени(ПолноеИмя).ПустаяСсылка(); Иначе @@ -1410,7 +2056,7 @@ НоваяСтрока = СвойстваОбъектовМетаданных.Добавить(); ЗаполнитьЗначенияСвойств(НоваяСтрока, СвойстваКоллекции); - НоваяСтрока.Родитель = СвойстваКоллекции.ИдентификаторКоллекции; + НоваяСтрока.Родитель = ИдентификаторКоллекции(СвойстваКоллекции.Идентификатор, ОбъектыРасширений); НоваяСтрока.Наименование = ПредставлениеОбъектаМетаданных(ОбъектМетаданных, СвойстваКоллекции); НоваяСтрока.ПолноеИмя = ПолноеИмя; НоваяСтрока.ПолноеИмяРодителя = ПолноеИмяРодителя; @@ -1425,11 +2071,17 @@ НоваяСтрока.ЗначениеПустойСсылки = ЗначениеПустойСсылки; НоваяСтрока.ОбъектМетаданных = ОбъектМетаданных; + Если ИменаОбъектовРасширений <> Неопределено И ОбъектыРасширений Тогда + НоваяСтрока.ИмяРасширения = ИмяРасширения; + КонецЕсли; + Если СвойстваКоллекции.Имя = "Подсистемы" Тогда ДобавитьСвойстваОбъектовМетаданных( ОбъектМетаданных.Подсистемы, СвойстваКоллекции, СвойстваОбъектовМетаданных, + ОбъектыРасширений, + ИменаОбъектовРасширений, ПолноеИмя, НоваяСтрока.ПолныйСиноним + ". "); КонецЕсли; @@ -1454,8 +2106,8 @@ Функция ВставитьЗнакВопроса(Знач Строка) - Если Лев(Строка, 1) <> "?" Тогда - Если Лев(Строка, 1) <> " " Тогда + Если Не СтрНачинаетсяС(Строка, "?") Тогда + Если Не СтрНачинаетсяС(Строка, " ") Тогда Строка = "? " + Строка; Иначе Строка = "?" + Строка; @@ -1470,7 +2122,7 @@ ПолноеИмя = ВставитьЗнакВопроса(Свойства.ПолноеИмя); - Если Найти(ПолноеИмя, "(") = 0 Тогда + Если СтрНайти(ПолноеИмя, "(") = 0 Тогда ПолноеИмя = ПолноеИмя + " (" + Строка(Свойства.Ссылка.УникальныйИдентификатор())+ ")"; КонецЕсли; @@ -1517,7 +2169,7 @@ КонецЕсли; ОстатокИмени = Сред(ПолноеИмя, СтрДлина("Подсистема.") + 1); - Позиция = Найти(ВРег(ОстатокИмени), ВРег("Подсистема.")); + Позиция = СтрНайти(ВРег(ОстатокИмени), ВРег("Подсистема.")); Если Позиция > 0 Тогда ИмяПодсистемы = Лев(ОстатокИмени, Позиция - 2); ОстатокИмени = Сред(ПолноеИмя, Позиция + СтрДлина("Подсистема.")); @@ -1546,11 +2198,11 @@ КонецФункции -Функция ПолноеИмяИспользуется(ПолноеИмя, КромеИдентификатора = Неопределено) +Функция ПолноеИмяИспользуется(Объект, ОбъектыРасширения) Запрос = Новый Запрос; - Запрос.УстановитьПараметр("ПолноеИмя", ПолноеИмя); - Запрос.УстановитьПараметр("Ссылка", КромеИдентификатора); + Запрос.УстановитьПараметр("ПолноеИмя", Объект.ПолноеИмя); + Запрос.УстановитьПараметр("Ссылка", Объект.Ссылка); Запрос.Текст = "ВЫБРАТЬ ПЕРВЫЕ 1 | ИСТИНА КАК ЗначениеИстина @@ -1559,19 +2211,20 @@ |ГДЕ | ИдентификаторыОбъектовМетаданных.Ссылка <> &Ссылка | И ИдентификаторыОбъектовМетаданных.ПолноеИмя = &ПолноеИмя"; + УточнитьИмяСправочникаВТекстеЗапроса(Запрос.Текст, ОбъектыРасширения); Возврат НЕ Запрос.Выполнить().Пустой(); КонецФункции -Функция ЭтоКоллекция(Ссылка) +Функция ЭтоКоллекция(Ссылка, ОбъектыРасширений = Ложь) - Возврат СтандартныеПодсистемыПовтИсп.СвойстваКоллекцийОбъектовМетаданных( - ).Найти(Ссылка, "ИдентификаторКоллекции") <> Неопределено; + СвойстваКоллекций = СтандартныеПодсистемыПовтИсп.СвойстваКоллекцийОбъектовМетаданных(ОбъектыРасширений); + Возврат СвойстваКоллекций.Найти(Ссылка.УникальныйИдентификатор(), "Идентификатор") <> Неопределено; КонецФункции -Процедура ПодготовитьСписокНовыхПодсистем(Выгрузка) +Процедура ПодготовитьСписокНовыхПодсистемВГлавномУзле(Выгрузка) НайденноеОписание = Выгрузка.Найти(Метаданные.Подсистемы.СтандартныеПодсистемы, "ОбъектМетаданных"); Если НайденноеОписание = Неопределено Тогда @@ -1590,13 +2243,529 @@ НовыеПодсистемы.Добавить(Описание.ПолноеИмя); КонецЦикла; - СведенияОбОбновлении = ОбновлениеИнформационнойБазыСлужебный.СведенияОбОбновленииИнформационнойБазы(); + ОбновитьСписокНовыхПодсистем(НовыеПодсистемы); + +КонецПроцедуры + +Процедура ПодготовитьСписокНовыхПодсистемВПодчиненномУзле(ОбъектыДляЗаписи) + + НовыеПодсистемы = Новый Массив; + НачалоИмени = "Подсистема.СтандартныеПодсистемы."; + + Для Каждого Объект Из ОбъектыДляЗаписи Цикл + Если Не Объект.ЭтоНовый() + Или Объект.ДополнительныеСвойства.Свойство("ЭтоЗаменаДубля") + Или ВРег(Лев(Объект.ПолноеИмя, СтрДлина(НачалоИмени))) <> ВРег(НачалоИмени) Тогда + Продолжить; + КонецЕсли; + НовыеПодсистемы.Добавить(Объект.ПолноеИмя); + КонецЦикла; + + ОбновитьСписокНовыхПодсистем(НовыеПодсистемы); + +КонецПроцедуры + +Процедура ОбновитьСписокНовыхПодсистем(НовыеПодсистемы) + + Сведения = ОбновлениеИнформационнойБазыСлужебный.СведенияОбОбновленииИнформационнойБазы(); + ЕстьИзменения = Ложь; + Для Каждого ИмяПодсистемы Из НовыеПодсистемы Цикл - Если СведенияОбОбновлении.НовыеПодсистемы.Найти(ИмяПодсистемы) = Неопределено Тогда - СведенияОбОбновлении.НовыеПодсистемы.Добавить(ИмяПодсистемы); + Если Сведения.НовыеПодсистемы.Найти(ИмяПодсистемы) = Неопределено Тогда + Сведения.НовыеПодсистемы.Добавить(ИмяПодсистемы); + ЕстьИзменения = Истина; КонецЕсли; КонецЦикла; - ОбновлениеИнформационнойБазыСлужебный.ЗаписатьСведенияОбОбновленииИнформационнойБазы(СведенияОбОбновлении); + + // Удаление из списка подсистем, удаленных из метаданных. + Индекс = Сведения.НовыеПодсистемы.Количество() - 1; + Пока Индекс >= 0 Цикл + ИмяПодсистемы = Сведения.НовыеПодсистемы.Получить(Индекс); + Если Метаданные.НайтиПоПолномуИмени(ИмяПодсистемы) = Неопределено Тогда + Сведения.НовыеПодсистемы.Удалить(Индекс); + ЕстьИзменения = Истина; + КонецЕсли; + Индекс = Индекс - 1; + КонецЦикла; + + Если Не ЕстьИзменения Тогда + Возврат; + КонецЕсли; + + ОбновлениеИнформационнойБазыСлужебный.ЗаписатьСведенияОбОбновленииИнформационнойБазы(Сведения); + +КонецПроцедуры + +Функция ИдентификаторКоллекции(УникальныйИдентификатор, ОбъектыРасширений) + + Если ОбъектыРасширений Тогда + Возврат Справочники.ИдентификаторыОбъектовРасширений.ПолучитьСсылку(УникальныйИдентификатор); + Иначе + Возврат ПолучитьСсылку(УникальныйИдентификатор); + КонецЕсли; + +КонецФункции + +Функция ЭтоОбъектРасширений(ОбъектИлиСсылка) + + Возврат ТипЗнч(ОбъектИлиСсылка) = Тип("СправочникОбъект.ИдентификаторыОбъектовРасширений") + Или ТипЗнч(ОбъектИлиСсылка) = Тип("СправочникСсылка.ИдентификаторыОбъектовРасширений"); + +КонецФункции + +Функция СоздатьЭлементСправочника(ОбъектыРасширений) + + Если ОбъектыРасширений Тогда + Возврат Справочники.ИдентификаторыОбъектовРасширений.СоздатьЭлемент(); + Иначе + Возврат СоздатьЭлемент(); + КонецЕсли; + +КонецФункции + +Функция ПустаяСсылкаСправочника(ОбъектыРасширений) + + Если ОбъектыРасширений Тогда + Возврат Справочники.ИдентификаторыОбъектовРасширений.ПустаяСсылка(); + Иначе + Возврат ПустаяСсылка(); + КонецЕсли; + +КонецФункции + +Функция НоваяСсылкаСправочника(ОбъектыРасширений) + + Если ОбъектыРасширений Тогда + Возврат Справочники.ИдентификаторыОбъектовРасширений.ПолучитьСсылку(); + Иначе + Возврат ПолучитьСсылку(); + КонецЕсли; + +КонецФункции + +Функция ИмяСправочника(ОбъектыРасширений) + + Если ОбъектыРасширений Тогда + Возврат "Справочник.ИдентификаторыОбъектовРасширений"; + Иначе + Возврат "Справочник.ИдентификаторыОбъектовМетаданных"; + КонецЕсли; + +КонецФункции + +Функция НазваниеСправочника(ОбъектыРасширений) + + Если ОбъектыРасширений Тогда + НазваниеСправочника = НСтр("ru = 'Идентификаторы объектов расширений'"); + Иначе + НазваниеСправочника = НСтр("ru = 'Идентификаторы объектов метаданных'"); + КонецЕсли; + + Возврат НазваниеСправочника; + +КонецФункции + +Процедура УточнитьИмяСправочникаВТекстеЗапроса(ТекстЗапроса, ОбъектыРасширений) + + Если ОбъектыРасширений Тогда + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "Справочник.ИдентификаторыОбъектовМетаданных", + ИмяСправочника(ОбъектыРасширений)); + КонецЕсли; + +КонецПроцедуры + +Процедура ВызватьИсключениеПоОшибке(ОбъектыРасширений, ТекстОшибки) + + ЗаголовокОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Ошибка при работе со справочником ""%1"".'"), + НазваниеСправочника(ОбъектыРасширений)); + + ВызватьИсключение ЗаголовокОшибки + Символы.ПС + Символы.ПС + ТекстОшибки; + +КонецПроцедуры + +Функция ЭтоПодсистема(ОбъектМетаданных, КоллекцияПодсистем = Неопределено) + + Если КоллекцияПодсистем = Неопределено Тогда + КоллекцияПодсистем = Метаданные.Подсистемы; + КонецЕсли; + + Если КоллекцияПодсистем.Содержит(ОбъектМетаданных) Тогда + Возврат Истина; + КонецЕсли; + + Для Каждого Подсистема Из КоллекцияПодсистем Цикл + Если ЭтоПодсистема(ОбъектМетаданных, Подсистема.Подсистемы) Тогда + Возврат Истина; + КонецЕсли; + КонецЦикла; + + Возврат Ложь; + +КонецФункции + +// Для процедуры ДобавитьПереименование. +Функция ИмяКоллекции(ПолноеИмя) + + ПозицияТочки = СтрНайти(ПолноеИмя, "."); + + Если ПозицияТочки > 0 Тогда + Возврат Лев(ПолноеИмя, ПозицияТочки - 1); + КонецЕсли; + + Возврат ""; + +КонецФункции + +// Для процедур ВыполнитьОбновлениеДанных и ПередЗаписьюОбъекта. +Процедура ПроверитьОбъектПередЗаписью(Объект, АвтоматическоеОбновление = Ложь) + + ОбъектыРасширений = ЭтоОбъектРасширений(Объект); + + Если НЕ АвтоматическоеОбновление Тогда + + Если Объект.ЭтоНовый() Тогда + + ВызватьИсключениеПоОшибке(ОбъектыРасширений, + НСтр("ru = 'Создание нового идентификатора объекта + |возможно только автоматически при обновлении данных справочника.'")); + + ИначеЕсли ЗапрещеноИзменятьПолноеИмя(Объект) Тогда + + ВызватьИсключениеПоОшибке(ОбъектыРасширений, СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'При изменении идентификатора объекта указано + |полное имя ""%1"", которое может быть + |установлено только автоматически при обновлении данных справочника.'"), + Объект.ПолноеИмя)); + Иначе + Если ПолноеИмяИспользуется(Объект, Ложь) Тогда + НазваниеСправочника = НазваниеСправочника(Ложь); + + ИначеЕсли ОбъектыРасширений И ПолноеИмяИспользуется(Объект, Истина) Тогда + НазваниеСправочника = НазваниеСправочника(Истина); + Иначе + НазваниеСправочника = ""; + КонецЕсли; + Если ЗначениеЗаполнено(НазваниеСправочника) Тогда + ВызватьИсключениеПоОшибке(ОбъектыРасширений, СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'При изменении идентификатора объекта указано + |полное имя ""%1"", + |которое уже используется в справочнике ""%2"".'"), + Объект.ПолноеИмя, НазваниеСправочника)); + КонецЕсли; + КонецЕсли; + + ОбновитьСвойстваИдентификатора(Объект); + КонецЕсли; + + Если Не ОбъектыРасширений И ОбщегоНазначения.ЭтоПодчиненныйУзелРИБ() Тогда + + Если Объект.ЭтоНовый() + И Не ЭтоКоллекция(Объект.ПолучитьСсылкуНового(), ЭтоОбъектРасширений(Объект)) Тогда + + ВызватьИсключениеПоОшибке(ОбъектыРасширений, + НСтр("ru = 'Добавление новых элементов может быть выполнено + |только в главном узле распределенной информационной базы.'")); + КонецЕсли; + + Если Не Объект.ПометкаУдаления + И Не ЭтоКоллекция(Объект.Ссылка, ЭтоОбъектРасширений(Объект)) Тогда + + Если ВРег(Объект.ПолноеИмя) <> ВРег(ОбщегоНазначения.ЗначениеРеквизитаОбъекта(Объект.Ссылка, "ПолноеИмя")) Тогда + ВызватьИсключениеПоОшибке(ОбъектыРасширений, + НСтр("ru = 'Изменение реквизита ""Полное имя"" может быть выполнено + |только в главном узле распределенной информационной базы.'")); + КонецЕсли; + КонецЕсли; + КонецЕсли; + +КонецПроцедуры + +// Для процедур ПроверкаИспользования и ДанныеОбновлены. +Функция ОписаниеОшибкиИдентификаторыОбъектовРасширенийНедоступныВНеразделенномРежиме() + + Возврат + НСтр("ru = 'Справочник ""Идентификаторы объектов расширений"" + |не может использоваться в неразделенном режиме.'"); + +КонецФункции + +// Для процедуры ПриСозданииНаСервереФормыСписка. +Процедура УпорядочитьИОформитьСписок(Форма) + + // Порядок. + Порядок = Форма.Список.КомпоновщикНастроек.Настройки.Порядок; + Порядок.ИдентификаторПользовательскойНастройки = "ОсновнойПорядок"; + + Порядок.Элементы.Очистить(); + + ЭлементПорядка = Порядок.Элементы.Добавить(Тип("ЭлементПорядкаКомпоновкиДанных")); + ЭлементПорядка.Поле = Новый ПолеКомпоновкиДанных("ПометкаУдаления"); + ЭлементПорядка.ТипУпорядочивания = НаправлениеСортировкиКомпоновкиДанных.Убыв; + ЭлементПорядка.РежимОтображения = РежимОтображенияЭлементаНастройкиКомпоновкиДанных.Недоступный; + ЭлементПорядка.Использование = Истина; + + ЭлементПорядка = Порядок.Элементы.Добавить(Тип("ЭлементПорядкаКомпоновкиДанных")); + ЭлементПорядка.Поле = Новый ПолеКомпоновкиДанных("ПорядокКоллекции"); + ЭлементПорядка.ТипУпорядочивания = НаправлениеСортировкиКомпоновкиДанных.Возр; + ЭлементПорядка.РежимОтображения = РежимОтображенияЭлементаНастройкиКомпоновкиДанных.Недоступный; + ЭлементПорядка.Использование = Истина; + + ЭлементПорядка = Порядок.Элементы.Добавить(Тип("ЭлементПорядкаКомпоновкиДанных")); + ЭлементПорядка.Поле = Новый ПолеКомпоновкиДанных("Родитель"); + ЭлементПорядка.ТипУпорядочивания = НаправлениеСортировкиКомпоновкиДанных.Возр; + ЭлементПорядка.РежимОтображения = РежимОтображенияЭлементаНастройкиКомпоновкиДанных.Недоступный; + ЭлементПорядка.Использование = Истина; + + ЭлементПорядка = Порядок.Элементы.Добавить(Тип("ЭлементПорядкаКомпоновкиДанных")); + ЭлементПорядка.Поле = Новый ПолеКомпоновкиДанных("Синоним"); + ЭлементПорядка.ТипУпорядочивания = НаправлениеСортировкиКомпоновкиДанных.Возр; + ЭлементПорядка.РежимОтображения = РежимОтображенияЭлементаНастройкиКомпоновкиДанных.Недоступный; + ЭлементПорядка.Использование = Истина; + + // Оформление. + ЭлементУсловногоОформления = Форма.УсловноеОформление.Элементы.Добавить(); + + ЭлементЦветаОформления = ЭлементУсловногоОформления.Оформление.Элементы.Найти("TextColor"); + ЭлементЦветаОформления.Значение = Метаданные.ЭлементыСтиля.ТекстЗапрещеннойЯчейкиЦвет.Значение; + ЭлементЦветаОформления.Использование = Истина; + + ЭлементОтбораДанных = ЭлементУсловногоОформления.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); + ЭлементОтбораДанных.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Список.ПометкаБудущегоУдаления"); + ЭлементОтбораДанных.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно; + ЭлементОтбораДанных.ПравоеЗначение = Истина; + ЭлементОтбораДанных.Использование = Истина; + + ЭлементОформляемогоПоля = ЭлементУсловногоОформления.Поля.Элементы.Добавить(); + ЭлементОформляемогоПоля.Поле = Новый ПолеКомпоновкиДанных("Синоним"); + ЭлементОформляемогоПоля.Использование = Истина; + + ЭлементОформляемогоПоля = ЭлементУсловногоОформления.Поля.Элементы.Добавить(); + ЭлементОформляемогоПоля.Поле = Новый ПолеКомпоновкиДанных("ПолноеИмя"); + ЭлементОформляемогоПоля.Использование = Истина; + +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// Процедуры и функции для определения принадлежности объекта метаданных расширению. + +// Возвращает таблицу, по которой можно получить полные имена +// объектов метаданных расширений. +// +// Возвращаемое значение: +// ТаблицаЗначений - с колонками: +// * ПолноеИмя - Строка - полное имя объекта метаданных. +// * Расширение - Строка - имя расширения. +// +Функция СвойстваРасширений() + + УстановитьПривилегированныйРежим(Истина); + + ИменаОбъектов = Новый ТаблицаЗначений; + ИменаОбъектов.Колонки.Добавить("ПолноеИмя", Новый ОписаниеТипов("Строка")); + ИменаОбъектов.Колонки.Добавить("ИмяРасширения", Новый ОписаниеТипов("Строка")); + ИменаОбъектов.Индексы.Добавить("ПолноеИмя"); + + ИменаПодключенныхРасширений = Новый Соответствие; + ИменаНеподключенныхРасширений = Новый Соответствие; + + СвойстваРасширений = Новый Структура; + СвойстваРасширений.Вставить("ИменаОбъектов", ИменаОбъектов); + СвойстваРасширений.Вставить("ИменаПодключенныхРасширений", ИменаПодключенныхРасширений); + СвойстваРасширений.Вставить("ИменаНеподключенныхРасширений", ИменаНеподключенныхРасширений); + + Расширения = РасширенияКонфигурации.Получить(); + Если Не ЗначениеЗаполнено(ПараметрыСеанса.УстановленныеРасширения) Тогда + Возврат СвойстваРасширений; + КонецЕсли; + + ПроверитьВозможностьЗапускаФоновогоЗадания(); + + ИменаОбъектовКонфигурации = ИменаОбъектовУстановленныхРасширений(0); + Если ИменаОбъектовКонфигурации = Неопределено Тогда + Возврат Неопределено; + КонецЕсли; + ИменаОбъектовКонфигурации.Индексы.Добавить("ПолноеИмя"); + + Для КоличествоУстановленных = 1 По Расширения.Количество() Цикл + ПоследнееРасширение = Расширения[КоличествоУстановленных-1]; + + ИменаОбъектовРасширений = ИменаОбъектовУстановленныхРасширений(КоличествоУстановленных); + Если ИменаОбъектовРасширений = Неопределено Тогда + Возврат Неопределено; + КонецЕсли; + + Подключено = Ложь; + Для Каждого Строка Из ИменаОбъектовРасширений Цикл + + Если ИменаОбъектовКонфигурации.Найти(Строка.ПолноеИмя, "ПолноеИмя") = Неопределено + И ИменаОбъектов.Найти(Строка.ПолноеИмя, "ПолноеИмя") = Неопределено Тогда + + НоваяСтрока = ИменаОбъектов.Добавить(); + НоваяСтрока.ПолноеИмя = Строка.ПолноеИмя; + НоваяСтрока.ИмяРасширения = ПоследнееРасширение.Имя; + Подключено = Истина; + КонецЕсли; + КонецЦикла; + Если Подключено Тогда + ИменаПодключенныхРасширений.Вставить(ПоследнееРасширение.Имя, Истина); + Иначе + ИменаНеподключенныхРасширений.Вставить(ПоследнееРасширение.Имя, Истина); + КонецЕсли; + КонецЦикла; + + Возврат СвойстваРасширений; + +КонецФункции + +// Для функции СвойстваРасширений. +Функция ИменаОбъектовУстановленныхРасширений(КоличествоУстановленных) + + ИдентификаторАдреса = Новый УникальныйИдентификатор; + АдресВременногоХранилища = ПоместитьВоВременноеХранилище(Неопределено, ИдентификаторАдреса); + + Параметры = Новый Массив; + Параметры.Добавить(АдресВременногоХранилища); + + КонтрольныеСуммы = СтандартныеПодсистемыСервер.КонтрольныеСуммыРасширений(); + Если ПараметрыСеанса.УстановленныеРасширения <> КонтрольныеСуммы Тогда + Возврат Неопределено; + КонецЕсли; + + УдаленныеРасширения = УдаленныеРасширения(КоличествоУстановленных); + Попытка + ФоновоеЗадание = ФоновыеЗадания.Выполнить( + "СтандартныеПодсистемыСервер.ЗаполнитьИменаОбъектовМетаданныхФоновоеЗадание", + Параметры); + + Попытка + ФоновоеЗадание.ОжидатьЗавершения(); + Исключение + ИнформацияОбОшибке = ФоновоеЗадание.ИнформацияОбОшибке; + КонецПопытки; + Отбор = Новый Структура("УникальныйИдентификатор", ФоновоеЗадание.УникальныйИдентификатор); + ФоновоеЗадание = ФоновыеЗадания.ПолучитьФоновыеЗадания(Отбор)[0]; + Если ИнформацияОбОшибке <> Неопределено Тогда + ИнформацияОбОшибке = ФоновоеЗадание.ИнформацияОбОшибке; + КонецЕсли; + Исключение + ВосстановитьРасширения(УдаленныеРасширения); + ВызватьИсключение; + КонецПопытки; + ВосстановитьРасширения(УдаленныеРасширения); + + КонтрольныеСуммы = СтандартныеПодсистемыСервер.КонтрольныеСуммыРасширений(); + Если ПараметрыСеанса.УстановленныеРасширения <> КонтрольныеСуммы Тогда + Возврат Неопределено; + КонецЕсли; + + Если ИнформацияОбОшибке <> Неопределено Тогда + ВызватьИсключение ПодробноеПредставлениеОшибки(ИнформацияОбОшибке); + КонецЕсли; + + Возврат ПолучитьИзВременногоХранилища(АдресВременногоХранилища); + +КонецФункции + +// Для функции СвойстваРасширений. +// Заполняет объекты метаданных подключенных расширений. +// +Процедура ЗаполнитьИменаОбъектовМетаданныхФоновоеЗадание(АдресВременногоХранилища) Экспорт + + Таблица = Новый ТаблицаЗначений; + Таблица.Колонки.Добавить("ПолноеИмя", Новый ОписаниеТипов("Строка")); + + СвойстваКоллекцийРасширений = СвойстваКоллекцийОбъектовМетаданных(Истина); + + Для Каждого СвойстваКоллекции Из СвойстваКоллекцийРасширений Цикл + Для Каждого ОбъектМетаданных Из Метаданные[СвойстваКоллекции.Имя] Цикл + Таблица.Добавить().ПолноеИмя = ОбъектМетаданных.ПолноеИмя(); + КонецЦикла; + КонецЦикла; + + ПоместитьВоВременноеХранилище(Таблица, АдресВременногоХранилища); + +КонецПроцедуры + +// Для функции СвойстваРасширений. +// +// Вызывает исключение, если выполнение происходит в фоновом задании файловой ИБ, +// при котором запуск второго фонового задания невозможен. +// +Процедура ПроверитьВозможностьЗапускаФоновогоЗадания() + + Если Не ОбщегоНазначения.ИнформационнаяБазаФайловая() Тогда + Возврат; + КонецЕсли; + + Если ТекущийРежимЗапуска() <> Неопределено Тогда + Возврат; + КонецЕсли; + + Сеансы = ПолучитьСеансыИнформационнойБазы(); + Для Каждого Сеанс Из Сеансы Цикл + Если Сеанс.НомерСеанса = НомерСеансаИнформационнойБазы() Тогда + Если Сеанс.ИмяПриложения = "BackgroundJob" Тогда + ТекстОшибки = НСтр("ru = 'Невозможно запустить второе фоновое задание в файловой ИБ.'"); + ВызватьИсключение ТекстОшибки; + КонецЕсли; + Если Сеанс.ИмяПриложения = "COMConnection" Тогда + ТекстОшибки = НСтр("ru = 'Невозможно запустить фоновое задание во внешнем соединении с файловой ИБ.'"); + ВызватьИсключение ТекстОшибки; + КонецЕсли; + КонецЕсли; + КонецЦикла; + +КонецПроцедуры + +// Для функции СвойстваРасширений. +Функция УдаленныеРасширения(КоличествоУстановленных = 0) + + УдаленныеРасширения = Новый Структура; + + ВсеРасширения = РасширенияКонфигурации.Получить(); + Расширения = Новый Массив; + ДанныеРасширений = Новый Массив; + Индекс = ВсеРасширения.Количество()-1; + + НачатьТранзакцию(); + Попытка + Пока Индекс >= КоличествоУстановленных Цикл + Расширение = ВсеРасширения[Индекс]; + Расширения.Вставить(0, Расширение); + ДанныеРасширений.Вставить(0, Расширение.ПолучитьДанные()); + Попытка + Расширение.Удалить(); + Исключение + ИнформацияОбОшибке = ИнформацияОбОшибке(); + ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'При выполнении операции над расширением ""%1"" возникла ошибка: + |%2 + | + |Убедитесь, что все расширения закрыты в конфигураторе.'"), + Расширение.Имя, + КраткоеПредставлениеОшибки(ИнформацияОбОшибке)); + ВызватьИсключение ТекстОшибки; + КонецПопытки; + Индекс = Индекс - 1; + КонецЦикла; + ЗафиксироватьТранзакцию(); + Исключение + ОтменитьТранзакцию(); + ВызватьИсключение; + КонецПопытки; + + Возврат Новый Структура("Расширения, ДанныеРасширений", Расширения, ДанныеРасширений); + +КонецФункции + +// Для функции СвойстваРасширений. +Процедура ВосстановитьРасширения(Удаленные) + + Для Каждого Расширение Из Удаленные.Расширения Цикл + Индекс = Удаленные.Расширения.Найти(Расширение); + Расширение.Записать(Удаленные.ДанныеРасширений[Индекс]); + КонецЦикла; КонецПроцедуры @@ -1624,6 +2793,7 @@ | Справочник.ИдентификаторыОбъектовМетаданных КАК Идентификаторы |ГДЕ | Идентификаторы.НоваяСсылка <> ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка)"; + РезультатЗапроса = Запрос.Выполнить(); Если РезультатЗапроса.Пустой() Тогда @@ -1697,7 +2867,7 @@ // - заменено РегистрыСведений[СтрокаТаблицы.Метаданные.Имя] на. // ОбщегоНазначения.МенеджерОбъектаПоПолномуИмени(СтрокаТаблицы.Метаданные.ПолноеИмя()) // -Функция ВыполнитьЗаменуЭлементов(Знач Заменяемые, Знач ТаблицаСсылок, Знач ОтключатьКонтрольЗаписи = Ложь, Знач ВыполнятьВТранзакции = Ложь) +Функция ВыполнитьЗаменуЭлементов(Знач Заменяемые, Знач ТаблицаСсылок, Знач ОтключатьКонтрольЗаписи = Ложь, Знач ВыполнятьВТранзакции = Ложь, Знач ОбъектыРасширений = Ложь) Параметры = Новый Структура; @@ -1738,7 +2908,7 @@ Если ВыполнятьВТранзакции Тогда ВызватьИсключение; КонецЕсли; - СообщитьОбОшибке(ИнформацияОбОшибке()); + СообщитьОбОшибке(ИнформацияОбОшибке(), ОбъектыРасширений); КонецПопытки; Параметры.Объект = Неопределено; КонецЕсли; @@ -1899,7 +3069,7 @@ Если ВыполнятьВТранзакции Тогда ВызватьИсключение; КонецЕсли; - СообщитьОбОшибке(ИнформацияОбОшибке()); + СообщитьОбОшибке(ИнформацияОбОшибке(), ОбъектыРасширений); КонецПопытки; КонецЕсли; КонецЦикла; @@ -1929,7 +3099,7 @@ Если ВыполнятьВТранзакции Тогда ВызватьИсключение; КонецЕсли; - СообщитьОбОшибке(ИнформацияОбОшибке()); + СообщитьОбОшибке(ИнформацияОбОшибке(), ОбъектыРасширений); КонецПопытки; КонецЕсли; КонецЕсли; @@ -2056,10 +3226,11 @@ ВызватьИсключение; КонецЕсли; ОтменитьТранзакцию(); - СообщитьОбОшибке(ИнформацияОбОшибке()); + СообщитьОбОшибке(ИнформацияОбОшибке(), ОбъектыРасширений); КонецПопытки; Иначе - СообщитьОбОшибке(НСтр("ru = 'Значения не заменяются в данных типа'") + ": " + СтрокаТаблицы.Метаданные); + СообщитьОбОшибке(НСтр("ru = 'Значения не заменяются в данных типа'") + + ": " + СтрокаТаблицы.Метаданные, ОбъектыРасширений); КонецЕсли; КонецЦикла; @@ -2074,7 +3245,7 @@ Если ВыполнятьВТранзакции Тогда ВызватьИсключение; КонецЕсли; - СообщитьОбОшибке(ИнформацияОбОшибке()); + СообщитьОбОшибке(ИнформацияОбОшибке(), ОбъектыРасширений); КонецПопытки; КонецЕсли; @@ -2086,7 +3257,7 @@ Если ВыполнятьВТранзакции Тогда ОтменитьТранзакцию(); КонецЕсли; - СообщитьОбОшибке(ИнформацияОбОшибке()); + СообщитьОбОшибке(ИнформацияОбОшибке(), ОбъектыРасширений); КонецПопытки; Возврат Не БылиИсключения; @@ -2097,15 +3268,18 @@ // Изменения: // - заменен метод Сообщить(...) на ЗаписьЖурналаРегистрации(...). // -Процедура СообщитьОбОшибке(Знач Описание) +Процедура СообщитьОбОшибке(Знач Описание, ОбъектыРасширений) Если ТипЗнч(Описание) = Тип("ИнформацияОбОшибке") Тогда Описание = ?(Описание.Причина = Неопределено, Описание, Описание.Причина).Описание; КонецЕсли; ЗаписьЖурналаРегистрации( - НСтр("ru = 'Идентификаторы объектов метаданных. Замена идентификатора'", - ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), + ?(ОбъектыРасширений, + НСтр("ru = 'Идентификаторы объектов расширений. Замена идентификатора'", + ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), + НСтр("ru = 'Идентификаторы объектов метаданных. Замена идентификатора'", + ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка())), УровеньЖурналаРегистрации.Ошибка, , , diff --git a/SSL/src/Catalogs/ИдентификаторыОбъектовМетаданных/ObjectModule.bsl b/SSL/src/Catalogs/ИдентификаторыОбъектовМетаданных/ObjectModule.bsl index 5fab0ddfa..76165273c 100644 --- a/SSL/src/Catalogs/ИдентификаторыОбъектовМетаданных/ObjectModule.bsl +++ b/SSL/src/Catalogs/ИдентификаторыОбъектовМетаданных/ObjectModule.bsl @@ -2,48 +2,15 @@ #Область ОбработчикиСобытий -// Предотвращает недопустимое изменение идентификаторов объектов метаданных. -// Выполняет обработку дублей подчиненного узла распределенной информационной базы. -// Процедура ПередЗаписью(Отказ) - СтандартныеПодсистемыПовтИсп.СправочникИдентификаторыОбъектовМетаданныхПроверкаИспользования(); - - // Отключение механизма регистрации объектов. - ДополнительныеСвойства.Вставить("ОтключитьМеханизмРегистрацииОбъектов"); - - // Регистрация объекта на всех узлах РИБ. - Для Каждого ПланОбмена Из СтандартныеПодсистемыПовтИсп.ПланыОбменаРИБ() Цикл - СтандартныеПодсистемыСервер.ЗарегистрироватьОбъектНаВсехУзлах(ЭтотОбъект, ПланОбмена); - КонецЦикла; - - Если ОбменДанными.Загрузка Тогда - Возврат; - КонецЕсли; - - Справочники.ИдентификаторыОбъектовМетаданных.ПроверитьОбъектПередЗаписью(ЭтотОбъект); + Справочники.ИдентификаторыОбъектовМетаданных.ПередЗаписьюОбъекта(ЭтотОбъект); КонецПроцедуры -// Предотвращает удаление идентификаторов объектов метаданных не помеченных на удаление. Процедура ПередУдалением(Отказ) - СтандартныеПодсистемыПовтИсп.СправочникИдентификаторыОбъектовМетаданныхПроверкаИспользования(); - - // Отключение механизма регистрации объектов. - // Ссылки идентификаторов удаляются независимо во всех узлах - // через механизм пометки удаления и удаления помеченных объектов. - ДополнительныеСвойства.Вставить("ОтключитьМеханизмРегистрацииОбъектов"); - - Если ОбменДанными.Загрузка Тогда - Возврат; - КонецЕсли; - - Если НЕ ПометкаУдаления Тогда - Справочники.ИдентификаторыОбъектовМетаданных.ВызватьИсключениеПоОшибке( - НСтр("ru = 'Удаление идентификаторов объектов метаданных, у которых значение - |реквизита ""Пометка удаления"" установлено Ложь недопустимо.'")); - КонецЕсли; + Справочники.ИдентификаторыОбъектовМетаданных.ПередУдалениемОбъекта(ЭтотОбъект); КонецПроцедуры diff --git a/SSL/src/Catalogs/ИдентификаторыОбъектовМетаданных/ИдентификаторыОбъектовМетаданных.mdo b/SSL/src/Catalogs/ИдентификаторыОбъектовМетаданных/ИдентификаторыОбъектовМетаданных.mdo index b3da75810..b7c60fc16 100644 --- a/SSL/src/Catalogs/ИдентификаторыОбъектовМетаданных/ИдентификаторыОбъектовМетаданных.mdo +++ b/SSL/src/Catalogs/ИдентификаторыОбъектовМетаданных/ИдентификаторыОбъектовМетаданных.mdo @@ -33,13 +33,9 @@ Use Ref - - ru - Идентификатор - ru - Дополнительный внешний идентификатор таблицы объекта метаданных + Ссылка на объект метаданных в базе данных Use @@ -75,6 +71,10 @@ Use Parent + + ru + Группа объектов + ru Группа объектов метаданных. diff --git a/SSL/src/Catalogs/ИдентификаторыОбъектовРасширений/Forms/ФормаСписка/Attributes/Список/ExtInfo/ListSettings.dcss b/SSL/src/Catalogs/ИдентификаторыОбъектовРасширений/Forms/ФормаСписка/Attributes/Список/ExtInfo/ListSettings.dcss new file mode 100644 index 000000000..61e6fb4bb --- /dev/null +++ b/SSL/src/Catalogs/ИдентификаторыОбъектовРасширений/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/Catalogs/ИдентификаторыОбъектовРасширений/Forms/ФормаСписка/Form.form b/SSL/src/Catalogs/ИдентификаторыОбъектовРасширений/Forms/ФормаСписка/Form.form new file mode 100644 index 000000000..f9c61e5fc --- /dev/null +++ b/SSL/src/Catalogs/ИдентификаторыОбъектовРасширений/Forms/ФормаСписка/Form.form @@ -0,0 +1,827 @@ + + + + ГруппаПользовательскихНастроек + 21 + true + true + + true + + + <key>ru</key> + <value>Группа пользовательских настроек</value> + + false + + ГруппаПользовательскихНастроекРасширеннаяПодсказка + 22 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + WeakSeparation + true + true + Auto + Auto + + + + КоманднаяПанель + 23 + + ФормаИзменить + 34 + true + true + + true + + + ФормаИзменитьРасширеннаяПодсказка + 35 + Label + true + true + + Left + + + Form.StandardCommand.Change + Normal + Auto + true + true + UserCmds + Auto + + + ФормаОбновить + 36 + true + true + + true + + + ФормаОбновитьРасширеннаяПодсказка + 37 + Label + true + true + + Left + + + Form.StandardCommand.Refresh + Normal + Auto + true + true + UserCmds + Auto + + + ФормаРежимПросмотра + 70 + + ФормаИерархическийСписок + 38 + true + true + + true + + + ФормаИерархическийСписокРасширеннаяПодсказка + 39 + Label + true + true + + Left + + + Form.StandardCommand.HierarchicalList + Normal + Auto + true + true + UserCmds + Auto + + + ФормаСписок + 40 + true + true + + true + + + ФормаСписокРасширеннаяПодсказка + 41 + Label + true + true + + Left + + + Form.StandardCommand.List + Normal + Auto + true + true + UserCmds + Auto + + + ФормаДерево + 42 + true + true + + true + + + ФормаДеревоРасширеннаяПодсказка + 43 + Label + true + true + + Left + + + Form.StandardCommand.Tree + Normal + Auto + true + true + UserCmds + Auto + + true + true + + true + + + <key>ru</key> + <value>Режим просмотра</value> + + + ru + Форма режим просмотра + + + ФормаРежимПросмотраРасширеннаяПодсказка + 71 + Label + true + true + + Left + + + Popup + + + StdPicture.ListViewMode + + Auto + Normal + + + + ФормаНайти + 52 + true + true + + true + + + ФормаНайтиРасширеннаяПодсказка + 53 + Label + true + true + + Left + + + Form.StandardCommand.Find + Normal + Auto + true + true + UserCmds + Auto + + + ФормаОтменитьПоиск + 54 + true + true + + true + + + ФормаОтменитьПоискРасширеннаяПодсказка + 55 + Label + true + true + + Left + + + Form.StandardCommand.CancelSearch + Normal + Auto + true + true + UserCmds + Auto + + + ФормаНастройкаСписка + 56 + true + true + + true + + + ФормаНастройкаСпискаРасширеннаяПодсказка + 57 + Label + true + true + + Left + + + Form.StandardCommand.ListSettings + Normal + Auto + true + true + UserCmds + Auto + + + ФормаЗагрузитьНастройкиДинамическогоСписка + 64 + true + true + + true + + + ФормаЗагрузитьНастройкиДинамическогоСпискаРасширеннаяПодсказка + 65 + Label + true + true + + Left + + + Form.StandardCommand.LoadDynamicListSettings + Normal + Auto + true + true + UserCmds + Auto + + + ФормаСохранитьНастройкиДинамическогоСписка + 66 + true + true + + true + + + ФормаСохранитьНастройкиДинамическогоСпискаРасширеннаяПодсказка + 67 + Label + true + true + + Left + + + Form.StandardCommand.SaveDynamicListSettings + Normal + Auto + true + true + UserCmds + Auto + + + ФормаСтандартныеНастройкиДинамическогоСписка + 68 + true + true + + true + + + ФормаСтандартныеНастройкиДинамическогоСпискаРасширеннаяПодсказка + 69 + Label + true + true + + Left + + + Form.StandardCommand.DynamicListStandardSettings + Normal + Auto + true + true + UserCmds + Auto + + + ФормаВывестиСписок + 58 + true + true + + true + + + ФормаВывестиСписокРасширеннаяПодсказка + 59 + Label + true + true + + Left + + + Form.StandardCommand.OutputList + Normal + Auto + true + true + UserCmds + Auto + + + ФормаИзменитьФорму + 62 + true + true + + true + + + ФормаИзменитьФормуРасширеннаяПодсказка + 63 + Label + true + true + + Left + + + Form.StandardCommand.CustomizeForm + Normal + Auto + true + true + UserCmds + Auto + + + ФормаСправка + 60 + true + true + + true + + + ФормаСправкаРасширеннаяПодсказка + 61 + Label + true + true + + Left + + + Form.StandardCommand.Help + Normal + Auto + true + true + UserCmds + Auto + + true + true + + true + + + <key>ru</key> + <value>Командная панель</value> + + + КоманднаяПанельРасширеннаяПодсказка + 24 + Label + true + true + + Left + + + CommandBar + + Left + + + + Список + 1 + true + true + + true + + + Список + + true + None + + СписокСиноним + 4 + + <key>ru</key> + <value>Синоним</value> + + true + true + + true + + + Список.Синоним + + true + + СписокСинонимРасширеннаяПодсказка + 16 + Label + true + true + + Left + + + + СписокСинонимКонтекстноеМеню + 5 + true + + LabelField + Enter + true + Left + true + + true + true + + + + СписокПолноеИмя + 13 + true + true + + + Список.ПолноеИмя + + + СписокПолноеИмяРасширеннаяПодсказка + 17 + Label + true + true + + Left + + + + СписокПолноеИмяКонтекстноеМеню + 14 + true + + LabelField + Enter + true + Left + true + + true + true + + + + СписокСсылка + 18 + true + true + + + Список.Ref + + + СписокСсылкаРасширеннаяПодсказка + 20 + Label + true + true + + Left + + + + СписокСсылкаКонтекстноеМеню + 19 + true + + LabelField + Enter + true + Left + true + + true + true + + + None + + СписокКоманднаяПанель + 3 + Left + + + ValueChoice + СписокВыборЗначения + + + СписокSearchString + 25 + + СписокSearchStringExtendedTooltip + 27 + Label + true + true + + Left + + + + СписокSearchStringContextMenu + 26 + true + + Список + + true + + + + СписокViewStatus + 28 + + СписокViewStatusExtendedTooltip + 30 + Label + true + true + + Left + + + + СписокViewStatusContextMenu + 29 + true + + ViewStatusAddition + Список + + true + + + + СписокSearchControl + 31 + + СписокSearchControlExtendedTooltip + 33 + Label + true + true + + Left + + + + СписокSearchControlContextMenu + 32 + true + + SearchControlAddition + Список + + true + + + + СписокExtendedTooltip + 15 + Label + true + true + + Left + + + + СписокКонтекстноеМеню + 2 + true + + HierarchicalList + true + true + true + true + true + MultiRow + 1 + 1 + AutoUse + AutoUse + true + true + false + Auto + Auto + ExpandTopLevel + true + true + true + + Список.DefaultPicture + + None + None + None + true + + 60 + + 0001-01-01T00:00:00 + 0001-01-01T00:00:00 + + + true + ГруппаПользовательскихНастроек + + + + ФормаКоманднаяПанель + -1 + Left + + + OnCreateAtServer + ПриСозданииНаСервере + + 50 + 10 + DontBlock + true + true + true + Vertical + true + true + true + auto + true + + Список + 1 + + DynamicList + + + true + + + true + + + Список.Description + + + Список.Parent + + + Список.Ref + + + Список.Имя + + + Список.ПометкаБудущегоУдаления + +
      true
      + + ВЫБРАТЬ + Идентификаторы.Ссылка, + Идентификаторы.ВерсияДанных, + Идентификаторы.ПометкаУдаления, + ВЫБОР + КОГДА ПОДСТРОКА(Идентификаторы.Имя, 0, 7) = "Удалить" + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ КАК ПометкаБудущегоУдаления, + Идентификаторы.Предопределенный, + Идентификаторы.Родитель, + Идентификаторы.Наименование, + Идентификаторы.ПорядокКоллекции, + Идентификаторы.Имя, + Идентификаторы.Синоним, + Идентификаторы.ПолноеИмя, + Идентификаторы.ПолныйСиноним, + Идентификаторы.БезДанных, + Идентификаторы.ЗначениеПустойСсылки, + Идентификаторы.КлючОбъектаМетаданных +ИЗ + Справочник.ИдентификаторыОбъектовРасширений КАК Идентификаторы + Catalog.ИдентификаторыОбъектовРасширений + true + true + true + true + true + +
      + + ВыбиратьГруппыОбъектовМетаданных + + <key>ru</key> + <value>Выбирать группы объектов метаданных</value> + + 2 + + Boolean + + + true + + + true + + + + ВыбиратьГруппыОбъектовМетаданных + + Boolean + + + + + + + +
      diff --git a/SSL/src/Catalogs/ИдентификаторыОбъектовРасширений/Forms/ФормаСписка/Module.bsl b/SSL/src/Catalogs/ИдентификаторыОбъектовРасширений/Forms/ФормаСписка/Module.bsl new file mode 100644 index 000000000..1872c963a --- /dev/null +++ b/SSL/src/Catalogs/ИдентификаторыОбъектовРасширений/Forms/ФормаСписка/Module.bsl @@ -0,0 +1,23 @@ + +#Область ОбработчикиСобытийФормы + +&НаСервере +Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) + + Справочники.ИдентификаторыОбъектовМетаданных.ФормаСпискаПриСозданииНаСервере(ЭтотОбъект); + +КонецПроцедуры + +#КонецОбласти + +#Область ОбработчикиСобытийЭлементовТаблицыФормыСписок + +&НаКлиенте +Процедура СписокВыборЗначения(Элемент, Значение, СтандартнаяОбработка) + + СтандартныеПодсистемыКлиент.ИдентификаторыОбъектовМетаданныхФормаСпискаСписокВыборЗначения(ЭтотОбъект, + Элемент, Значение, СтандартнаяОбработка); + +КонецПроцедуры + +#КонецОбласти diff --git a/SSL/src/Catalogs/ИдентификаторыОбъектовРасширений/Forms/ФормаЭлемента/Form.form b/SSL/src/Catalogs/ИдентификаторыОбъектовРасширений/Forms/ФормаЭлемента/Form.form new file mode 100644 index 000000000..2d94798bb --- /dev/null +++ b/SSL/src/Catalogs/ИдентификаторыОбъектовРасширений/Forms/ФормаЭлемента/Form.form @@ -0,0 +1,878 @@ + + + + Наименование + 1 + true + true + + true + + + Объект.Description + + true + + НаименованиеExtendedTooltip + 33 + Label + true + true + + Left + + + + НаименованиеКонтекстноеМеню + 2 + true + + InputField + true + Auto + true + Left + true + + true + true + true + true + true + true + Normal + + + + ИмяРасширения + 59 + true + true + + + Объект.ИмяРасширения + + + ИмяРасширенияРасширеннаяПодсказка + 61 + Label + true + true + + Left + + + + ИмяРасширенияКонтекстноеМеню + 60 + true + + InputField + Enter + true + Left + true + + true + true + true + true + true + true + Normal + + + + ИмяИСинонимОбъектаМетаданных + 24 + + Имя + 11 + true + true + + true + + + Объект.Имя + + true + + ИмяExtendedTooltip + 35 + Label + true + true + + Left + + + + ИмяКонтекстноеМеню + 12 + true + + InputField + true + Enter + true + Left + true + + true + true + true + true + true + true + Normal + + + + Синоним + 13 + true + true + + true + + + Объект.Синоним + + true + + СинонимExtendedTooltip + 36 + Label + true + true + + Left + + + + СинонимКонтекстноеМеню + 14 + true + + InputField + true + Enter + true + Left + true + + true + true + true + true + true + true + Normal + + + true + true + + true + + + <key>ru</key> + <value>Имя и синоним объекта метаданных</value> + + + ru + Имя и синоним объекта метаданных + + + ИмяИСинонимОбъектаМетаданныхExtendedTooltip + 34 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + WeakSeparation + true + true + auto + Auto + Auto + + + + ПолноеИмяИПолныйСинонимОбъектаМетаданных + 25 + + ПолноеИмя + 15 + true + true + + true + + + Объект.ПолноеИмя + + + OnChange + ПолноеИмяПриИзменении + + + ПолноеИмяExtendedTooltip + 38 + Label + true + true + + Left + + + + ПолноеИмяКонтекстноеМеню + 16 + true + + InputField + Enter + true + Left + true + + true + true + true + true + true + true + Normal + + + + ПолныйСиноним + 3 + + <key>ru</key> + <value>Полный синоним</value> + + true + true + + true + + + Объект.ПолныйСиноним + + true + + ПолныйСинонимExtendedTooltip + 39 + Label + true + true + + Left + + + + ПолныйСинонимКонтекстноеМеню + 4 + true + + InputField + true + Auto + true + Left + true + + true + true + true + true + true + true + Normal + + + true + true + + true + + + <key>ru</key> + <value>Полное имя и полный синоним объекта метаданных</value> + + + ru + Полное имя и полный синоним объекта метаданных + + + ПолноеИмяИПолныйСинонимОбъектаМетаданныхExtendedTooltip + 37 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + WeakSeparation + true + true + auto + Auto + Auto + + + + ПрочиеСвойства + 26 + + ПорядокКоллекции + 9 + true + true + + + Объект.ПорядокКоллекции + + true + + ПорядокКоллекцииExtendedTooltip + 41 + Label + true + true + + Left + + + + ПорядокКоллекцииКонтекстноеМеню + 10 + true + + InputField + true + Enter + true + Left + true + + true + true + true + true + true + true + Normal + + + + БезДанных + 19 + true + true + + + Объект.БезДанных + + true + Right + + БезДанныхExtendedTooltip + 42 + Label + true + true + + Left + + + + БезДанныхКонтекстноеМеню + 20 + true + + CheckBoxField + true + Enter + true + Left + true + + + + ПустаяСсылкаПредставление + 21 + true + true + + + ПустаяСсылкаПредставление + + true + + ru + Для ссылочных типов объектов метаданных +содержит пустую ссылку своего типа, +для остальных - Неопределено +(в форме показано представление +типа значения пустой ссылки) + + + ПустаяСсылкаПредставлениеExtendedTooltip + 43 + Label + true + true + + Left + + + + ПустаяСсылкаПредставлениеКонтекстноеМеню + 22 + true + + InputField + true + Enter + true + Left + true + + true + true + true + true + true + true + Normal + + + + НоваяСсылка + 30 + true + true + + + Объект.НоваяСсылка + + + НоваяСсылкаExtendedTooltip + 44 + Label + true + true + + Left + + + + НоваяСсылкаКонтекстноеМеню + 31 + true + + InputField + true + Enter + true + Left + true + + true + true + true + true + true + true + Normal + + + true + true + + true + + + <key>ru</key> + <value>Прочие свойства</value> + + + ru + Прочие свойства + + true + + ПрочиеСвойстваExtendedTooltip + 40 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + WeakSeparation + true + true + auto + Auto + Auto + + + + ФормаКоманднаяПанель + -1 + + ФормаЗаписатьИЗакрыть + 45 + true + true + + true + + + ФормаЗаписатьИЗакрытьРасширеннаяПодсказка + 46 + Label + true + true + + Left + + + Form.StandardCommand.WriteAndClose + Normal + Auto + true + true + UserCmds + Auto + + + ФормаЗаписать + 47 + true + true + + true + + + ФормаЗаписатьРасширеннаяПодсказка + 48 + Label + true + true + + Left + + + Form.StandardCommand.Write + Normal + Auto + true + true + UserCmds + Auto + + + ФормаПеречитать + 49 + true + true + + true + + + ФормаПеречитатьРасширеннаяПодсказка + 50 + Label + true + true + + Left + + + Form.StandardCommand.Reread + Normal + Auto + true + true + UserCmds + Auto + + + ФормаУстановитьПометкуУдаления + 51 + true + true + + true + + + ФормаУстановитьПометкуУдаленияРасширеннаяПодсказка + 52 + Label + true + true + + Left + + + Form.StandardCommand.SetDeletionMark + Normal + Auto + true + true + UserCmds + Auto + + + ФормаПоказатьВСписке + 53 + true + true + + true + + + ФормаПоказатьВСпискеРасширеннаяПодсказка + 54 + Label + true + true + + Left + + + Form.StandardCommand.ShowInList + Normal + Auto + true + true + UserCmds + Auto + + + ФормаВключитьВозможностьРедактирования + 29 + true + true + + true + + + ФормаВключитьВозможностьРедактированияExtendedTooltip + 32 + Label + true + true + + Left + + + Form.Command.ВключитьВозможностьРедактирования + Normal + Auto + true + true + UserCmds + Auto + InAdditionalSubmenu + + + ФормаИзменитьФорму + 55 + true + true + + true + + + ФормаИзменитьФормуРасширеннаяПодсказка + 56 + Label + true + true + + Left + + + Form.StandardCommand.CustomizeForm + Normal + Auto + true + true + UserCmds + Auto + + + ФормаСправка + 57 + true + true + + true + + + ФормаСправкаРасширеннаяПодсказка + 58 + Label + true + true + + Left + + + Form.StandardCommand.Help + Normal + Auto + true + true + UserCmds + Auto + + Left + + + OnCreateAtServer + ПриСозданииНаСервере + + Copy + 80 + LockOwner + true + true + true + Vertical + true + true + true + auto + true + + Объект + 1 + + CatalogObject.ИдентификаторыОбъектовРасширений + + + true + + + true + +
      true
      + true +
      + + ПустаяСсылкаПредставление + + <key>ru</key> + <value>Значение пустой ссылки</value> + + 2 + + String + + + + true + + + true + + + + ВключитьВозможностьРедактирования + + <key>ru</key> + <value>Включить возможность редактирования</value> + + 1 + + ru + Включить возможность редактирования только для целей поиска неисправности (требуется углубленное понимание работы механизма) + + + true + + + + ВключитьВозможностьРедактирования + + + DontUse + Auto + + + + + InformationRegister.НастройкиВерсионированияОбъектов.StandardCommand.OpenByValue.ТипОбъекта + + + + CommonCommand.МоиЗаметкиПоПредмету + + + + InformationRegister.НазначениеДополнительныхОбработок.StandardCommand.OpenByValue.ОбъектНазначения + + + + CommonCommand.ПрисоединенныеФайлыКОбъекту + + + + CommonCommand.РолиИИсполнителиЗадач + + + + CommonCommand.ИсторияИзменений + + + + + + Catalog.ВнешниеПользователи.Command.ВнешнийДоступ + + + + CommonCommand.ЗаполнениеОбъекта + + + + CommonCommand.ОтчетыОбъекта + + + + CommonCommand.СозданиеСвязанныхОбъектов + + + + CommonCommand.СоздатьЗаметкуПоПредмету + + + + + +
      diff --git a/SSL/src/Catalogs/ИдентификаторыОбъектовРасширений/Forms/ФормаЭлемента/Help/ru.html b/SSL/src/Catalogs/ИдентификаторыОбъектовРасширений/Forms/ФормаЭлемента/Help/ru.html new file mode 100644 index 000000000..d12256cbc --- /dev/null +++ b/SSL/src/Catalogs/ИдентификаторыОбъектовРасширений/Forms/ФормаЭлемента/Help/ru.html @@ -0,0 +1,9 @@ + +

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

      +

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

      +

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

      +
      • Представление; +
      • Имя; +
      • Синоним; +
      • Полное имя; +
      • Полный синоним.
      \ No newline at end of file diff --git a/SSL/src/Catalogs/ИдентификаторыОбъектовРасширений/Forms/ФормаЭлемента/Module.bsl b/SSL/src/Catalogs/ИдентификаторыОбъектовРасширений/Forms/ФормаЭлемента/Module.bsl new file mode 100644 index 000000000..ed2976380 --- /dev/null +++ b/SSL/src/Catalogs/ИдентификаторыОбъектовРасширений/Forms/ФормаЭлемента/Module.bsl @@ -0,0 +1,50 @@ + +#Область ОбработчикиСобытийФормы + +&НаСервере +Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) + + Справочники.ИдентификаторыОбъектовМетаданных.ФормаЭлементаПриСозданииНаСервере(ЭтотОбъект); + +КонецПроцедуры + +#КонецОбласти + +#Область ОбработчикиКомандФормы + +&НаКлиенте +Процедура ВключитьВозможностьРедактирования(Команда) + + ТолькоПросмотр = Ложь; + Элементы.ФормаВключитьВозможностьРедактирования.Доступность = Ложь; + +КонецПроцедуры + +&НаКлиенте +Процедура ПолноеИмяПриИзменении(Элемент) + + ПолноеИмя = Объект.ПолноеИмя; + ОбновитьСвойстваИдентификатора(); + + Если ПолноеИмя <> Объект.ПолноеИмя Тогда + Объект.ПолноеИмя = ПолноеИмя; + ПоказатьПредупреждение(, СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Объект метаданных не найден по полному имени: + |%1.'"), + ПолноеИмя)); + КонецЕсли; + +КонецПроцедуры + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +&НаСервере +Процедура ОбновитьСвойстваИдентификатора() + + Справочники.ИдентификаторыОбъектовМетаданных.ОбновитьСвойстваИдентификатора(Объект); + +КонецПроцедуры + +#КонецОбласти diff --git a/SSL/src/Catalogs/ИдентификаторыОбъектовРасширений/Help/ru.html b/SSL/src/Catalogs/ИдентификаторыОбъектовРасширений/Help/ru.html new file mode 100644 index 000000000..79707ee73 --- /dev/null +++ b/SSL/src/Catalogs/ИдентификаторыОбъектовРасширений/Help/ru.html @@ -0,0 +1,7 @@ + +

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

      +

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

      +

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

      +

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

      +

      См. также:

      + \ No newline at end of file diff --git a/SSL/src/Catalogs/ИдентификаторыОбъектовРасширений/ManagerModule.bsl b/SSL/src/Catalogs/ИдентификаторыОбъектовРасширений/ManagerModule.bsl new file mode 100644 index 000000000..6b9c2ca2e --- /dev/null +++ b/SSL/src/Catalogs/ИдентификаторыОбъектовРасширений/ManagerModule.bsl @@ -0,0 +1,80 @@ +#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда + +#Область ПрограммныйИнтерфейс + +// Процедура обновляет данные справочника по метаданным конфигурации. +// +// Параметры: +// ЕстьИзменения - Булево (возвращаемое значение) - в этот параметр возвращается +// значение Истина, если производилась запись, иначе не изменяется. +// +// ЕстьУдаленные - Булево (возвращаемое значение) - в этот параметр возвращается +// значение Истина, если хотя бы один элемент справочника был помечен +// на удаление, иначе не изменяется. +// +// ТолькоПроверка - Булево (возвращаемое значение) - не производит никаких изменений, +// а лишь выполняет установку флажков ЕстьИзменения, ЕстьУдаленные. +// +Процедура ОбновитьДанныеСправочника(ЕстьИзменения = Ложь, ЕстьУдаленные = Ложь, ТолькоПроверка = Ложь) Экспорт + + Справочники.ИдентификаторыОбъектовМетаданных.ВыполнитьОбновлениеДанных(ЕстьИзменения, + ЕстьУдаленные, ТолькоПроверка, , , Истина); + +КонецПроцедуры + +// Возвращает список реквизитов, которые разрешается редактировать +// с помощью обработки группового изменения объектов. +// +Функция РеквизитыРедактируемыеВГрупповойОбработке() Экспорт + + Возврат Справочники.ИдентификаторыОбъектовМетаданных.РеквизитыРедактируемыеВГрупповойОбработке(); + +КонецФункции + +// Возвращает реквизиты справочника, которые образуют естественный ключ +// для элементов справочника. +// +// Возвращаемое значение: Массив(Строка) - массив имен реквизитов, образующих +// естественный ключ. +// +Функция ПоляЕстественногоКлюча() Экспорт + Возврат Справочники.ИдентификаторыОбъектовМетаданных.ПоляЕстественногоКлюча(); +КонецФункции + +#КонецОбласти + +#Область СлужебныйПрограммныйИнтерфейс + +// См. описание одноименной процедуры в общем модуле ОбщегоНазначения. +Функция ОбъектРасширенияОтключен(Идентификатор) Экспорт + + СтандартныеПодсистемыПовтИсп.ИдентификаторыОбъектовМетаданныхПроверкаИспользования(Истина, Истина); + + Запрос = Новый Запрос; + Запрос.УстановитьПараметр("Ссылка", Идентификатор); + Запрос.УстановитьПараметр("ВерсияРасширений", ПараметрыСеанса.ВерсияРасширений); + + Запрос.Текст = + "ВЫБРАТЬ ПЕРВЫЕ 1 + | ИСТИНА КАК ЗначениеИстина + |ИЗ + | Справочник.ИдентификаторыОбъектовРасширений КАК Идентификаторы + |ГДЕ + | Идентификаторы.Ссылка = &Ссылка + | И НЕ Идентификаторы.ПометкаУдаления + | И НЕ ИСТИНА В + | (ВЫБРАТЬ ПЕРВЫЕ 1 + | ИСТИНА + | ИЗ + | РегистрСведений.ИдентификаторыОбъектовВерсийРасширений КАК ВерсииИдентификаторов + | ГДЕ + | ВерсииИдентификаторов.Идентификатор = Идентификаторы.Ссылка + | И ВерсииИдентификаторов.ВерсияРасширений = &ВерсияРасширений)"; + + Возврат Не Запрос.Выполнить().Пустой(); + +КонецФункции + +#КонецОбласти + +#КонецЕсли \ 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..76165273c --- /dev/null +++ b/SSL/src/Catalogs/ИдентификаторыОбъектовРасширений/ObjectModule.bsl @@ -0,0 +1,19 @@ +#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда + +#Область ОбработчикиСобытий + +Процедура ПередЗаписью(Отказ) + + Справочники.ИдентификаторыОбъектовМетаданных.ПередЗаписьюОбъекта(ЭтотОбъект); + +КонецПроцедуры + +Процедура ПередУдалением(Отказ) + + Справочники.ИдентификаторыОбъектовМетаданных.ПередУдалениемОбъекта(ЭтотОбъект); + +КонецПроцедуры + +#КонецОбласти + +#КонецЕсли diff --git a/SSL/src/Catalogs/ИдентификаторыОбъектовРасширений/ИдентификаторыОбъектовРасширений.mdo b/SSL/src/Catalogs/ИдентификаторыОбъектовРасширений/ИдентификаторыОбъектовРасширений.mdo new file mode 100644 index 000000000..462cff961 --- /dev/null +++ b/SSL/src/Catalogs/ИдентификаторыОбъектовРасширений/ИдентификаторыОбъектовРасширений.mdo @@ -0,0 +1,384 @@ + + + + + + + + + + ИдентификаторыОбъектовРасширений + + ru + Идентификаторы объектов расширений + + Catalog.ИдентификаторыОбъектовРасширений.StandardAttribute.Description + DontUse + + Use + PredefinedDataName + + Use + + + + + Use + Predefined + + Use + + + + + Use + Ref + + ru + Ссылка на объект метаданных в базе данных + + + Use + + + + + Use + DeletionMark + + Use + + + + + Use + IsFolder + + Use + + + + + Use + Owner + true + + ShowError + Use + + + + + Use + Parent + + ru + Группа объектов + + + ru + Группа объектов метаданных. + + true + + Catalog.ИдентификаторыОбъектовМетаданных.EmptyRef + + Use + + + + + Use + Description + + ru + Представление + + + ru + Представление идентификатора объекта метаданных + + + ShowError + Use + + + + + Use + Code + + Use + + + + Use + + + ru + + + Managed + + ru + Идентификатор объекта метаданных расширения + + + ru + Идентификаторы объектов метаданных расширений для использования в базе данных. + + true + HierarchyOfItems + 2 + true + 150 + String + Variable + AsDescription + InDialog + BothWays + Catalog.ИдентификаторыОбъектовРасширений.Form.ФормаЭлемента + Catalog.ИдентификаторыОбъектовРасширений.Form.ФормаСписка + Catalog.ИдентификаторыОбъектовРасширений.Form.ФормаСписка + + ПорядокКоллекции + + ru + Порядок коллекции + + + Number + + 2 + true + + + + ru + Порядок коллекции объекта метаданных, +используемый для сортировки в отчетах, +например, коллекция "Справочники" +перед коллекцией "Документы" + + + + + IndexWithAdditionalOrder + Use + + + Имя + + ru + Имя + + Например, "ОбъектыАдресацииЗадач" + + String + + 255 + + + + ru + Имя объекта метаданных + + + + + Use + Use + + + Синоним + + ru + Синоним + + + String + + 255 + + + + ru + Синоним объекта метаданных, +например, "Объекты адресации задач" + + + + + Use + Use + + + ПолноеИмя + + ru + Полное имя + + Например, "ПланВидовХарактеристик.ОбъектыАдресацииЗадач" + + String + + 430 + + + + ru + Полное имя объекта метаданных + + + + + Index + Use + Use + + + ПолныйСиноним + + ru + Полный синоним + + + String + + 430 + + + + ru + Полный синоним объекта метаданных, +например, "Планы видов характеристик. Объекты адресации задач" + + + + + Use + Use + + + БезДанных + + ru + Без данных + + + Boolean + + + ru + Объект метаданных не имеет таблиц данных + + + + + Use + + + ЗначениеПустойСсылки + + ru + Значение пустой ссылки + + + AnyRef + + + ru + Для ссылочных типов объектов метаданных +содержит пустую ссылку своего типа, +для остальных - Неопределено +(в форме показано представление +типа значения пустой ссылки) + + + + + Index + Use + + + КлючОбъектаМетаданных + + ru + Ключ объекта метаданных + + + ValueStorage + + + ru + Хранилище ключа по которому определяется объект метаданных без использования полного имени + + + + + Use + + + НоваяСсылка + + ru + Новая ссылка + + + CatalogRef.ИдентификаторыОбъектовРасширений + + + ru + Используется при обработке дублей идентификаторов подчиненного узла распределенной информационной базы. + + + + + Use + + + ИмяРасширения + + ru + Имя расширения + + + String + + 128 + + + + ru + Имя расширения, которому принадлежит объект метаданных, соответствующий идентификатору + + + + + Use + Use + + + ФормаСписка + + ru + Форма списка + + PersonalComputer + MobileDevice + + + ФормаЭлемента + + ru + Форма элемента + + + + ru + + + PersonalComputer + MobileDevice + + diff --git a/SSL/src/Catalogs/Календари/Forms/РасписаниеРаботы/Form.form b/SSL/src/Catalogs/Календари/Forms/РасписаниеРаботы/Form.form index 02eaea9b2..9128eb407 100644 --- a/SSL/src/Catalogs/Календари/Forms/РасписаниеРаботы/Form.form +++ b/SSL/src/Catalogs/Календари/Forms/РасписаниеРаботы/Form.form @@ -307,7 +307,6 @@ true true true - UseIfNecessary auto true @@ -404,7 +403,7 @@ ОК - Auto + DontUse Auto @@ -426,7 +425,7 @@ Отмена - Auto + DontUse Auto diff --git a/SSL/src/Catalogs/Календари/Forms/ФормаСписка/Form.form b/SSL/src/Catalogs/Календари/Forms/ФормаСписка/Form.form index 0ce7f1f4f..442ff15c7 100644 --- a/SSL/src/Catalogs/Календари/Forms/ФормаСписка/Form.form +++ b/SSL/src/Catalogs/Календари/Forms/ФормаСписка/Form.form @@ -472,7 +472,6 @@ true true true - UseIfNecessary auto true @@ -591,7 +590,7 @@ ИзменитьВыделенные - Auto + DontUse Auto diff --git a/SSL/src/Catalogs/Календари/Forms/ФормаЭлемента/Form.form b/SSL/src/Catalogs/Календари/Forms/ФормаЭлемента/Form.form index de3a3f1f1..be0a44070 100644 --- a/SSL/src/Catalogs/Календари/Forms/ФормаЭлемента/Form.form +++ b/SSL/src/Catalogs/Календари/Forms/ФормаЭлемента/Form.form @@ -2614,7 +2614,6 @@ true true true - UseIfNecessary auto true @@ -3005,7 +3004,7 @@ TextPicture - Auto + DontUse Auto @@ -3027,7 +3026,7 @@ РезультатЗаполнения - Auto + DontUse Auto @@ -3049,7 +3048,7 @@ НастройкаЗаполнения - Auto + DontUse Auto diff --git a/SSL/src/Catalogs/Календари/Forms/ФормаЭлемента/Module.bsl b/SSL/src/Catalogs/Календари/Forms/ФормаЭлемента/Module.bsl index 32a1be8b2..59f931469 100644 --- a/SSL/src/Catalogs/Календари/Forms/ФормаЭлемента/Module.bsl +++ b/SSL/src/Catalogs/Календари/Forms/ФормаЭлемента/Module.bsl @@ -344,9 +344,7 @@ ЗаписыватьДанныеГрафика = Ложь; Если МодифицированностьРезультата Тогда - ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Записать измененные данные за %1 год?'"), - Формат(НомерПредыдущегоГода, "ЧГ=0")); + ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Записать измененные данные за %1 год?'"), Формат(НомерПредыдущегоГода, "ЧГ=0")); Оповещение = Новый ОписаниеОповещения("НомерТекущегоГодаПриИзмененииЗавершение", ЭтотОбъект); ПоказатьВопрос(Оповещение, ТекстСообщения, РежимДиалогаВопрос.ДаНет); @@ -571,10 +569,8 @@ Если СтрокаРасписания.НомерДня <> НомерДня Тогда Продолжить; КонецЕсли; - ПредставлениеИнтервалов = ПредставлениеИнтервалов - + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку("%1-%2, ", - Формат(СтрокаРасписания.ВремяНачала, "ДФ=ЧЧ:мм; ДП="), - Формат(СтрокаРасписания.ВремяОкончания, "ДФ=ЧЧ:мм; ДП=")); + ПредставлениеИнтервала = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку("%1-%2, ", Формат(СтрокаРасписания.ВремяНачала, "ДФ=ЧЧ:мм; ДП="), Формат(СтрокаРасписания.ВремяОкончания, "ДФ=ЧЧ:мм; ДП=")); + ПредставлениеИнтервалов = ПредставлениеИнтервалов + ПредставлениеИнтервала; Если Не ЗначениеЗаполнено(СтрокаРасписания.ВремяОкончания) Тогда СекундИнтервала = КонецДня(СтрокаРасписания.ВремяОкончания) - СтрокаРасписания.ВремяНачала + 1; Иначе @@ -657,9 +653,8 @@ Форма.ТребуетЗаполнения = Истина; Иначе Если Не ЗначениеЗаполнено(Форма.Объект.ГоризонтПланирования) Тогда - Форма.ЗаполненностьИнформационныйТекст = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'График работы заполнен до %1'"), - Формат(Форма.ДатаЗаполненности, "ДЛФ=D")); + ИнформационныйТекст = НСтр("ru = 'График работы заполнен до %1'"); + Форма.ЗаполненностьИнформационныйТекст = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ИнформационныйТекст, Формат(Форма.ДатаЗаполненности, "ДЛФ=D")); Иначе #Если Клиент Тогда ТекущаяДата = ОбщегоНазначенияКлиент.ДатаСеанса(); @@ -667,10 +662,8 @@ ТекущаяДата = ТекущаяДатаСеанса(); #КонецЕсли КонецГоризонтаПланирования = ДобавитьМесяц(ТекущаяДата, Форма.Объект.ГоризонтПланирования); - Форма.ЗаполненностьИнформационныйТекст = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'График работы заполнен до %1, с учетом горизонта планирования график должен быть заполнен до %2'"), - Формат(Форма.ДатаЗаполненности, "ДЛФ=D"), - Формат(КонецГоризонтаПланирования, "ДЛФ=D")); + ИнформационныйТекст = НСтр("ru = 'График работы заполнен до %1, с учетом горизонта планирования график должен быть заполнен до %2'"); + Форма.ЗаполненностьИнформационныйТекст = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ИнформационныйТекст, Формат(Форма.ДатаЗаполненности, "ДЛФ=D"), Формат(КонецГоризонтаПланирования, "ДЛФ=D")); Если КонецГоризонтаПланирования > Форма.ДатаЗаполненности Тогда Форма.ТребуетЗаполнения = Истина; КонецЕсли; diff --git a/SSL/src/Catalogs/КлассификаторБанковРФ/Commands/КлассификаторБанковРФ/CommandModule.bsl b/SSL/src/Catalogs/КлассификаторБанковРФ/Commands/КлассификаторБанковРФ/CommandModule.bsl index 98f538d87..1c964e877 100644 --- a/SSL/src/Catalogs/КлассификаторБанковРФ/Commands/КлассификаторБанковРФ/CommandModule.bsl +++ b/SSL/src/Catalogs/КлассификаторБанковРФ/Commands/КлассификаторБанковРФ/CommandModule.bsl @@ -1,6 +1,9 @@ +#Область ОбработчикиСобытий &НаКлиенте Процедура ОбработкаКоманды(ПараметрКоманды, ПараметрыВыполненияКоманды) ОткрытьФорму("Справочник.КлассификаторБанковРФ.Форма.ЗагрузкаКлассификатора", , ПараметрыВыполненияКоманды.Источник, ПараметрыВыполненияКоманды.Уникальность, ПараметрыВыполненияКоманды.Окно); КонецПроцедуры + +#КонецОбласти diff --git a/SSL/src/Catalogs/КлассификаторБанковРФ/Forms/ЗагрузкаКлассификатора/Form.form b/SSL/src/Catalogs/КлассификаторБанковРФ/Forms/ЗагрузкаКлассификатора/Form.form index cbf1ada89..ebfd3fce5 100644 --- a/SSL/src/Catalogs/КлассификаторБанковРФ/Forms/ЗагрузкаКлассификатора/Form.form +++ b/SSL/src/Catalogs/КлассификаторБанковРФ/Forms/ЗагрузкаКлассификатора/Form.form @@ -645,7 +645,6 @@ true true true - UseIfNecessary auto true @@ -757,7 +756,7 @@ Далее - Auto + DontUse Auto @@ -775,7 +774,7 @@ Назад - Auto + DontUse Auto @@ -797,7 +796,7 @@ Отмена - Auto + DontUse Auto diff --git a/SSL/src/Catalogs/КлассификаторБанковРФ/Forms/ЗагрузкаКлассификатора/Module.bsl b/SSL/src/Catalogs/КлассификаторБанковРФ/Forms/ЗагрузкаКлассификатора/Module.bsl index 943e3f8b0..4f577c866 100644 --- a/SSL/src/Catalogs/КлассификаторБанковРФ/Forms/ЗагрузкаКлассификатора/Module.bsl +++ b/SSL/src/Catalogs/КлассификаторБанковРФ/Forms/ЗагрузкаКлассификатора/Module.bsl @@ -87,25 +87,24 @@ &НаКлиенте Процедура Далее(Команда) - Если Элементы.СтраницыФормы.ТекущаяСтраница = Элементы.СтраницаРезультат Тогда Закрыть(); Иначе ОчиститьСообщения(); - - Если ВариантЗагрузки = "ИТС" И НЕ ЗначениеЗаполнено(ПутьКДискуИТС) И ОбщегоНазначенияКлиентСервер.ЭтоLinuxКлиент() Тогда - // Под Linux - перебор букв дисков невозможен. - ОбщегоНазначенияКлиентСервер.СообщитьПользователю( - НСтр("ru = 'При работе в ОС Linux необходимо явно указать путь к диску'"), - , - "ПутьКДискуИТС"); - Возврат; + Если ВариантЗагрузки = "ИТС" Тогда + Если НЕ ЗначениеЗаполнено(ПутьКДискуИТС) И ОбщегоНазначенияКлиентСервер.ЭтоLinuxКлиент() Тогда + // Под Linux - перебор букв дисков невозможен. + ОбщегоНазначенияКлиентСервер.СообщитьПользователю( + НСтр("ru = 'При работе в ОС Linux необходимо явно указать путь к диску'"), + , + "ПутьКДискуИТС"); + Возврат; + КонецЕсли; + Элементы.СтраницыФормы.ТекущаяСтраница = Элементы.ВыполняетсяЗагрузка; + УстановитьИзмененияВИнтерфейсе(); КонецЕсли; - Элементы.СтраницыФормы.ТекущаяСтраница = Элементы.ВыполняетсяЗагрузка; - УстановитьИзмененияВИнтерфейсе(); ПодключитьОбработчикОжидания("ЗагрузитьКлассификатор", 0.1, Истина); КонецЕсли; - КонецПроцедуры &НаКлиенте @@ -164,6 +163,9 @@ АдресХранилища = Результат.АдресХранилища; Если НЕ Результат.ЗаданиеВыполнено Тогда + Элементы.СтраницыФормы.ТекущаяСтраница = Элементы.ВыполняетсяЗагрузка; + УстановитьИзмененияВИнтерфейсе(); + ИдентификаторЗадания = Результат.ИдентификаторЗадания; ДлительныеОперацииКлиент.ИнициализироватьПараметрыОбработчикаОжидания(ПараметрыОбработчикаОжидания); @@ -186,8 +188,7 @@ ПараметрыЗагрузкиКлассификатора = ПолучитьИзВременногоХранилища(АдресХранилища); - ИмяСобытия = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru ='Загрузка классификатора банков. %1.'"), Источник); + ИмяСобытия = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru ='Загрузка классификатора банков. %1.'"), Источник); Если ПараметрыЗагрузкиКлассификатора["ЗагрузкаВыполнена"] Тогда ЖурналРегистрацииКлиент.ДобавитьСообщениеДляЖурналаРегистрации(ИмяСобытия,, @@ -406,10 +407,6 @@ &НаСервере Функция ПолучитьДанныеРБКНаСервере(ПараметрыЗагрузкиФайловРБК) - // Загружает в классификатор банков данные с диска ИТС. - // -// Параметры: - // ПараметрыЗагрузкиФайловРБК - см. описание одноименной переменной в ЗагрузитьКлассификатор(). Если ОбщегоНазначенияПовтИсп.РазделениеВключено() Тогда ВызватьИсключение ТекстЗагрузкаЗапрещена(); diff --git a/SSL/src/Catalogs/КлассификаторБанковРФ/Forms/ФормаВыбора/Attributes/Список/ExtInfo/ListSettings.dcss b/SSL/src/Catalogs/КлассификаторБанковРФ/Forms/ФормаВыбора/Attributes/Список/ExtInfo/ListSettings.dcss index 576766bf4..61e6fb4bb 100644 --- a/SSL/src/Catalogs/КлассификаторБанковРФ/Forms/ФормаВыбора/Attributes/Список/ExtInfo/ListSettings.dcss +++ b/SSL/src/Catalogs/КлассификаторБанковРФ/Forms/ФормаВыбора/Attributes/Список/ExtInfo/ListSettings.dcss @@ -9,22 +9,6 @@ 88619765-ccb3-46c6-ac52-38e9c992ebd4 - - - - - ДеятельностьПрекращена - Equal - true - - - - - ЦветТекста - style:НедоступныеДанныеЦвет - - - Normal b75fecce-942b-4aed-abc9-e6a02e460fb3 diff --git a/SSL/src/Catalogs/КлассификаторБанковРФ/Forms/ФормаВыбора/Form.form b/SSL/src/Catalogs/КлассификаторБанковРФ/Forms/ФормаВыбора/Form.form index 86231261c..800cfa582 100644 --- a/SSL/src/Catalogs/КлассификаторБанковРФ/Forms/ФормаВыбора/Form.form +++ b/SSL/src/Catalogs/КлассификаторБанковРФ/Forms/ФормаВыбора/Form.form @@ -493,7 +493,6 @@ true true true - UseIfNecessary auto true @@ -557,7 +556,7 @@ ЗагрузитьКлассификатор - Auto + DontUse Auto @@ -579,7 +578,7 @@ ПоказыватьНедействующиеБанки - Auto + DontUse Auto diff --git a/SSL/src/Catalogs/КлассификаторБанковРФ/Forms/ФормаВыбора/Module.bsl b/SSL/src/Catalogs/КлассификаторБанковРФ/Forms/ФормаВыбора/Module.bsl index d6846aa5e..86fb331ec 100644 --- a/SSL/src/Catalogs/КлассификаторБанковРФ/Forms/ФормаВыбора/Module.bsl +++ b/SSL/src/Catalogs/КлассификаторБанковРФ/Forms/ФормаВыбора/Module.bsl @@ -4,6 +4,8 @@ &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) + УстановитьУсловноеОформление(); + Если Параметры.Свойство("АвтоТест") Тогда // Возврат при получении формы для анализа. Возврат; КонецЕсли; @@ -51,4 +53,19 @@ КонецПроцедуры +&НаСервере +Процедура УстановитьУсловноеОформление() + + Список.УсловноеОформление.Элементы.Очистить(); + Элемент = Список.УсловноеОформление.Элементы.Добавить(); + + ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); + ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("ДеятельностьПрекращена"); + ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно; + ОтборЭлемента.ПравоеЗначение = Истина; + + Элемент.Оформление.УстановитьЗначениеПараметра("ЦветТекста", ЦветаСтиля.ТекстЗапрещеннойЯчейкиЦвет); + +КонецПроцедуры + #КонецОбласти diff --git a/SSL/src/Catalogs/КлассификаторБанковРФ/Forms/ФормаСписка/Attributes/Список/ExtInfo/ListSettings.dcss b/SSL/src/Catalogs/КлассификаторБанковРФ/Forms/ФормаСписка/Attributes/Список/ExtInfo/ListSettings.dcss index 576766bf4..61e6fb4bb 100644 --- a/SSL/src/Catalogs/КлассификаторБанковРФ/Forms/ФормаСписка/Attributes/Список/ExtInfo/ListSettings.dcss +++ b/SSL/src/Catalogs/КлассификаторБанковРФ/Forms/ФормаСписка/Attributes/Список/ExtInfo/ListSettings.dcss @@ -9,22 +9,6 @@ 88619765-ccb3-46c6-ac52-38e9c992ebd4 - - - - - ДеятельностьПрекращена - Equal - true - - - - - ЦветТекста - style:НедоступныеДанныеЦвет - - - Normal b75fecce-942b-4aed-abc9-e6a02e460fb3 diff --git a/SSL/src/Catalogs/КлассификаторБанковРФ/Forms/ФормаСписка/Form.form b/SSL/src/Catalogs/КлассификаторБанковРФ/Forms/ФормаСписка/Form.form index 1c6c58c58..9d5ccc065 100644 --- a/SSL/src/Catalogs/КлассификаторБанковРФ/Forms/ФормаСписка/Form.form +++ b/SSL/src/Catalogs/КлассификаторБанковРФ/Forms/ФормаСписка/Form.form @@ -511,7 +511,6 @@ true true true - UseIfNecessary auto true @@ -526,9 +525,6 @@ true - - Список.Недействителен - Список.Ref @@ -560,7 +556,7 @@ ЗагрузитьКлассификатор - Auto + DontUse Auto diff --git a/SSL/src/Catalogs/КлассификаторБанковРФ/Forms/ФормаСписка/Module.bsl b/SSL/src/Catalogs/КлассификаторБанковРФ/Forms/ФормаСписка/Module.bsl index 62b1fa5aa..8144a49e6 100644 --- a/SSL/src/Catalogs/КлассификаторБанковРФ/Forms/ФормаСписка/Module.bsl +++ b/SSL/src/Catalogs/КлассификаторБанковРФ/Forms/ФормаСписка/Module.bsl @@ -4,6 +4,8 @@ &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) + УстановитьУсловноеОформление(); + Если Параметры.Свойство("АвтоТест") Тогда // Возврат при получении формы для анализа. Возврат; КонецЕсли; @@ -32,3 +34,23 @@ КонецПроцедуры #КонецОбласти + + +#Область СлужебныеПроцедурыИФункции + +&НаСервере +Процедура УстановитьУсловноеОформление() + + Список.УсловноеОформление.Элементы.Очистить(); + Элемент = Список.УсловноеОформление.Элементы.Добавить(); + + ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); + ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("ДеятельностьПрекращена"); + ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно; + ОтборЭлемента.ПравоеЗначение = Истина; + + Элемент.Оформление.УстановитьЗначениеПараметра("ЦветТекста", ЦветаСтиля.ТекстЗапрещеннойЯчейкиЦвет); + +КонецПроцедуры + +#КонецОбласти \ No newline at end of file diff --git a/SSL/src/Catalogs/КлассификаторБанковРФ/Forms/ФормаЭлемента/Form.form b/SSL/src/Catalogs/КлассификаторБанковРФ/Forms/ФормаЭлемента/Form.form index ff8543f1e..9410fff20 100644 --- a/SSL/src/Catalogs/КлассификаторБанковРФ/Forms/ФормаЭлемента/Form.form +++ b/SSL/src/Catalogs/КлассификаторБанковРФ/Forms/ФормаЭлемента/Form.form @@ -1,5 +1,123 @@ + + ГруппаШапка + 16 + + Наименование + 3 + true + true + + true + + + Объект.Description + + + НаименованиеExtendedTooltip + 29 + Label + true + true + + Left + + + + НаименованиеКонтекстноеМеню + 4 + true + + InputField + Auto + true + Left + true + + true + true + true + true + true + true + true + Normal + + + + Родитель + 5 + + <key>ru</key> + <value>Входит в группу</value> + + true + true + + true + + + Объект.Parent + + + РодительExtendedTooltip + 35 + Label + true + true + + Left + + + + РодительКонтекстноеМеню + 6 + true + + InputField + Auto + true + Left + true + + 15 + true + true + true + true + true + true + true + Normal + + + true + true + + true + + + ГруппаШапкаРасширеннаяПодсказка + 33 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + NormalSeparation + true + true + Auto + Auto + + СтраницыДеятельностьПрекращена 21 @@ -78,6 +196,10 @@ ДеятельностьПрекращена 17 + + <key>ru</key> + <value>Деятельность банка прекращена</value> + true true @@ -147,10 +269,6 @@ ru Страницы деятельность прекращена - - ru - Страницы деятельность прекращена - СтраницыДеятельностьПрекращенаExtendedTooltip 24 @@ -166,49 +284,6 @@ Auto - - Наименование - 3 - true - true - - true - - - Объект.Description - - - НаименованиеExtendedTooltip - 29 - Label - true - true - - Left - - - - НаименованиеКонтекстноеМеню - 4 - true - - InputField - Auto - true - Left - true - - 42 - true - true - false - true - true - true - true - Normal - - ГруппаКоррСчетБИК 15 @@ -303,10 +378,6 @@ true - - ru - Группа корр счет БИК - ГруппаКоррСчетБИКExtendedTooltip 30 @@ -320,113 +391,27 @@ UsualGroup Auto + NormalSeparation true true Auto Auto - - ГруппаГород - 16 - - Город - 9 - true - true - - true - - - Объект.Город - - - ГородExtendedTooltip - 34 - Label - true - true - - Left - - - - ГородКонтекстноеМеню - 10 - true - - InputField - Auto - true - Left - true - - 15 - true - true - false - true - true - true - true - Normal - - - - Родитель - 5 - true - true - - true - - - Объект.Parent - - - РодительExtendedTooltip - 35 - Label - true - true - - Left - - - - РодительКонтекстноеМеню - 6 - true - - InputField - Auto - true - Left - true - - 15 - true - true - false - true - true - true - true - Normal - - + + Город + 9 true true true - - ru - Группа город - + + Объект.Город + - ГруппаГородExtendedTooltip - 33 + ГородExtendedTooltip + 34 Label true true @@ -434,13 +419,26 @@ Left - UsualGroup - - Auto - true - true - Auto - Auto + + ГородКонтекстноеМеню + 10 + true + + InputField + Auto + true + Left + true + + 24 + true + true + false + true + true + true + true + Normal @@ -475,10 +473,9 @@ Left true - 42 true true - false + true true true true @@ -518,10 +515,9 @@ Left true - 42 true true - false + true true true true @@ -539,7 +535,7 @@ OnCreateAtServer ПриСозданииНаСервере - DontBlock + LockOwner true true true @@ -547,7 +543,6 @@ true true true - UseIfNecessary auto true diff --git a/SSL/src/Catalogs/КлассификаторБанковРФ/КлассификаторБанковРФ.mdo b/SSL/src/Catalogs/КлассификаторБанковРФ/КлассификаторБанковРФ.mdo index a714bcaf2..c94ec3197 100644 --- a/SSL/src/Catalogs/КлассификаторБанковРФ/КлассификаторБанковРФ.mdo +++ b/SSL/src/Catalogs/КлассификаторБанковРФ/КлассификаторБанковРФ.mdo @@ -247,7 +247,7 @@ ДеятельностьПрекращена ru - Деятельность банка прекращена + Деятельность прекращена Boolean diff --git a/SSL/src/Catalogs/КлючевыеОперации/Forms/ФормаВыбора/Form.form b/SSL/src/Catalogs/КлючевыеОперации/Forms/ФормаВыбора/Form.form index e6121a8f6..99a7abe0c 100644 --- a/SSL/src/Catalogs/КлючевыеОперации/Forms/ФормаВыбора/Form.form +++ b/SSL/src/Catalogs/КлючевыеОперации/Forms/ФормаВыбора/Form.form @@ -198,7 +198,6 @@ true true true - UseIfNecessary auto true diff --git a/SSL/src/Catalogs/КлючевыеОперации/Forms/ФормаВыбора/Module.bsl b/SSL/src/Catalogs/КлючевыеОперации/Forms/ФормаВыбора/Module.bsl index a83c915ec..c764065ca 100644 --- a/SSL/src/Catalogs/КлючевыеОперации/Forms/ФормаВыбора/Module.bsl +++ b/SSL/src/Catalogs/КлючевыеОперации/Forms/ФормаВыбора/Module.bsl @@ -11,15 +11,13 @@ Список.Отбор, "Ссылка", Параметры.Отбор, - ВидСравненияКомпоновкиДанных.НеВСписке - ); + ВидСравненияКомпоновкиДанных.НеВСписке); ОбщегоНазначенияКлиентСервер.УстановитьЭлементОтбора( Список.Отбор, "ПометкаУдаления", Ложь, - ВидСравненияКомпоновкиДанных.Равно - ); + ВидСравненияКомпоновкиДанных.Равно); КонецПроцедуры diff --git a/SSL/src/Catalogs/КлючевыеОперации/Forms/ФормаСписка/Form.form b/SSL/src/Catalogs/КлючевыеОперации/Forms/ФормаСписка/Form.form index d8e4b57d7..246e9abb1 100644 --- a/SSL/src/Catalogs/КлючевыеОперации/Forms/ФормаСписка/Form.form +++ b/SSL/src/Catalogs/КлючевыеОперации/Forms/ФормаСписка/Form.form @@ -226,6 +226,40 @@ true + + Ссылка + 30 + true + true + + + Список.Ref + + + СсылкаРасширеннаяПодсказка + 32 + Label + true + true + + Left + + + + СсылкаКонтекстноеМеню + 31 + true + + LabelField + Enter + true + Left + true + + true + true + + None СписокКоманднаяПанель @@ -373,7 +407,6 @@ true true true - UseIfNecessary auto true diff --git a/SSL/src/Catalogs/КлючевыеОперации/Forms/ФормаЭлемента/Form.form b/SSL/src/Catalogs/КлючевыеОперации/Forms/ФормаЭлемента/Form.form index 82143627b..6ff67f446 100644 --- a/SSL/src/Catalogs/КлючевыеОперации/Forms/ФормаЭлемента/Form.form +++ b/SSL/src/Catalogs/КлючевыеОперации/Forms/ФормаЭлемента/Form.form @@ -225,7 +225,6 @@ true true true - UseIfNecessary auto true diff --git a/SSL/src/Catalogs/КлючевыеОперации/Help/ru.html b/SSL/src/Catalogs/КлючевыеОперации/Help/ru.html index 12a3c01cf..c6a1cacf7 100644 --- a/SSL/src/Catalogs/КлючевыеОперации/Help/ru.html +++ b/SSL/src/Catalogs/КлючевыеОперации/Help/ru.html @@ -8,6 +8,7 @@
    • Целевое время - время, затраченное на операцию в секундах;
    • Минимально допустимый уровень - для сравнения взяты оценки по apdex в цифровом выражении, например, Удовлетворительно (apdex > = 0.75).

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

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

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

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

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

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

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

    См. также:

    \ No newline at end of file diff --git a/SSL/src/Catalogs/КлючевыеОперации/ObjectModule.bsl b/SSL/src/Catalogs/КлючевыеОперации/ObjectModule.bsl index 04b5ae3b8..1f8db00bb 100644 --- a/SSL/src/Catalogs/КлючевыеОперации/ObjectModule.bsl +++ b/SSL/src/Catalogs/КлючевыеОперации/ObjectModule.bsl @@ -5,6 +5,13 @@ Процедура ПередЗаписью(Отказ) Если ОбменДанными.Загрузка Тогда + Если НЕ ЗначениеЗаполнено(ИмяХеш) Тогда + ХешMD5 = Новый ХешированиеДанных(ХешФункция.MD5); + ХешMD5.Добавить(Имя); + ИмяХешТемп = ХешMD5.ХешСумма; + ИмяХеш = СтрЗаменить(Строка(ИмяХешТемп), " ", ""); + КонецЕсли; + Возврат; КонецЕсли; @@ -13,6 +20,10 @@ Возврат; КонецЕсли; + ХешMD5 = Новый ХешированиеДанных(ХешФункция.MD5); + ХешMD5.Добавить(Имя); + ИмяХешТемп = ХешMD5.ХешСумма; + ИмяХеш = СтрЗаменить(Строка(ИмяХешТемп), " ", ""); КонецПроцедуры #КонецОбласти diff --git a/SSL/src/Catalogs/КлючевыеОперации/КлючевыеОперации.mdo b/SSL/src/Catalogs/КлючевыеОперации/КлючевыеОперации.mdo index 3b5460dea..f02a42c76 100644 --- a/SSL/src/Catalogs/КлючевыеОперации/КлючевыеОперации.mdo +++ b/SSL/src/Catalogs/КлючевыеОперации/КлючевыеОперации.mdo @@ -104,7 +104,6 @@
    Catalog.КлючевыеОперации.Attribute.Имя Managed - Use ru Ключевая операция @@ -123,7 +122,6 @@ String Variable AsDescription - AutoUpdate InDialog BothWays Catalog.КлючевыеОперации.Form.ФормаЭлемента @@ -138,7 +136,7 @@ String - 100 + 1000 @@ -148,7 +146,6 @@ - Index Use Use
    @@ -221,6 +218,29 @@ Use Use + + ИмяХеш + + ru + Имя хеш + + + String + + 40 + + + + ru + Хеш сумма имени + + + + + Index + Use + Use + ФормаЭлемента diff --git a/SSL/src/Catalogs/НаборыДополнительныхРеквизитовИСведений/Forms/ФормаВыбора/Form.form b/SSL/src/Catalogs/НаборыДополнительныхРеквизитовИСведений/Forms/ФормаВыбора/Form.form index a3d7caeb0..4996136dc 100644 --- a/SSL/src/Catalogs/НаборыДополнительныхРеквизитовИСведений/Forms/ФормаВыбора/Form.form +++ b/SSL/src/Catalogs/НаборыДополнительныхРеквизитовИСведений/Forms/ФормаВыбора/Form.form @@ -242,7 +242,6 @@ true true true - UseIfNecessary auto true diff --git a/SSL/src/Catalogs/НаборыДополнительныхРеквизитовИСведений/Forms/ФормаГруппы/Form.form b/SSL/src/Catalogs/НаборыДополнительныхРеквизитовИСведений/Forms/ФормаГруппы/Form.form index 72a3ac751..e3d3eea66 100644 --- a/SSL/src/Catalogs/НаборыДополнительныхРеквизитовИСведений/Forms/ФормаГруппы/Form.form +++ b/SSL/src/Catalogs/НаборыДополнительныхРеквизитовИСведений/Forms/ФормаГруппы/Form.form @@ -63,7 +63,6 @@ true true true - UseIfNecessary auto true diff --git a/SSL/src/Catalogs/НаборыДополнительныхРеквизитовИСведений/Forms/ФормаСписка/Form.form b/SSL/src/Catalogs/НаборыДополнительныхРеквизитовИСведений/Forms/ФормаСписка/Form.form index 78e90040c..d88258a9e 100644 --- a/SSL/src/Catalogs/НаборыДополнительныхРеквизитовИСведений/Forms/ФормаСписка/Form.form +++ b/SSL/src/Catalogs/НаборыДополнительныхРеквизитовИСведений/Forms/ФормаСписка/Form.form @@ -164,16 +164,16 @@ Auto - СвойстваСоздатьПоОбразцу - 68 + ДобавитьИзНабора + 165 true true true - СвойстваСоздатьПоОбразцуExtendedTooltip - 108 + ДобавитьИзНабораРасширеннаяПодсказка + 166 Label true true @@ -181,33 +181,7 @@ Left - Form.Command.СоздатьПоОбразцу - Normal - Auto - true - true - UserCmds - Auto - - - СвойстваСоздатьОбщее - 82 - true - true - - true - - - СвойстваСоздатьОбщееExtendedTooltip - 109 - Label - true - true - - Left - - - Form.Command.СоздатьОбщее + Form.Command.ДобавитьИзНабора Normal Auto true @@ -423,6 +397,33 @@
    + + ПоискИУдалениеДублей + 169 + true + true + + true + + + ПоискИУдалениеДублейРасширеннаяПодсказка + 170 + Label + true + true + + Left + + + Form.Command.ПоискИУдалениеДублей + Normal + Auto + true + true + UserCmds + Auto + InAdditionalSubmenu + СписокНайти 36 @@ -475,6 +476,82 @@ UserCmds Auto + + ГруппаКнопокКопирование + 177 + + КопироватьРеквизит + 183 + true + true + + true + + + КопироватьРеквизитРасширеннаяПодсказка + 184 + Label + true + true + + Left + + + Form.Command.КопироватьРеквизит + Normal + Auto + true + true + UserCmds + Auto + + + ВставитьРеквизит + 181 + true + true + + true + + + ВставитьРеквизитРасширеннаяПодсказка + 182 + Label + true + true + + Left + + + Form.Command.ВставитьРеквизит + Normal + Auto + true + true + UserCmds + Auto + + true + true + + true + + + <key>ru</key> + <value>Группа кнопок копирование</value> + + + ГруппаКнопокКопированиеРасширеннаяПодсказка + 178 + Label + true + true + + Left + + + + ФормаИзменитьФорму 79 @@ -664,10 +741,18 @@ 3 Left + + DragCheck + НаборыСвойствПроверкаПеретаскивания + OnActivateRow НаборыСвойствПриАктивизацииСтроки + + Drag + НаборыСвойствПеретаскивание + BeforeRowChange НаборыСвойствПередНачаломИзменения @@ -775,9 +860,9 @@ false Auto Auto - ExpandTopLevel true true + true НаборыСвойств.НомерКартинки @@ -798,7 +883,6 @@ 0001-01-01T00:00:00 - true true ГруппаПользовательскихНастроек @@ -1060,6 +1144,10 @@ 40 Left + + DragCheck + СвойстваПроверкаПеретаскивания + BeforeAddRow СвойстваПередНачаломДобавления @@ -1072,6 +1160,10 @@ OnActivateRow СвойстваПриАктивизацииСтроки + + DragStart + СвойстваНачалоПеретаскивания + ChoiceProcessing СвойстваОбработкаВыбора @@ -1227,16 +1319,16 @@ Auto - СвойстваКонтекстноеМенюСоздатьПоОбразцу - 85 + СвойстваКонтекстноеМенюДобавитьИзНабора + 167 true true true - СвойстваКонтекстноеМенюСоздатьПоОбразцуExtendedTooltip - 127 + СвойстваКонтекстноеМенюДобавитьИзНабораРасширеннаяПодсказка + 168 Label true true @@ -1244,33 +1336,7 @@ Left - Form.Command.СоздатьПоОбразцу - Normal - Auto - true - true - UserCmds - Auto - - - СвойстваКонтекстноеМенюСоздатьОбщее - 86 - true - true - - true - - - СвойстваКонтекстноеМенюСоздатьОбщееExtendedTooltip - 128 - Label - true - true - - Left - - - Form.Command.СоздатьОбщее + Form.Command.ДобавитьИзНабора Normal Auto true @@ -1408,6 +1474,58 @@ + + СвойстваКонтекстноеМенюКопироватьРеквизит + 175 + true + true + + true + + + СвойстваКонтекстноеМенюКопироватьРеквизитРасширеннаяПодсказка + 176 + Label + true + true + + Left + + + Form.Command.КопироватьРеквизит + Normal + Auto + true + true + UserCmds + Auto + + + СвойстваКонтекстноеМенюВставитьРеквизит + 173 + true + true + + true + + + СвойстваКонтекстноеМенюВставитьРеквизитРасширеннаяПодсказка + 174 + Label + true + true + + Left + + + Form.Command.ВставитьРеквизит + Normal + Auto + true + true + UserCmds + Auto + true true @@ -1415,7 +1533,6 @@ true true true - MultiRow
    true
    1 1 @@ -1535,6 +1652,7 @@ Наборы.Родитель, Наборы.ЭтоГруппа, Наборы.Наименование, + Наборы.Используется, ВЫБОР КОГДА Наборы.ЭтоГруппа ТОГДА Наборы.Наименование @@ -1566,7 +1684,9 @@ КОГДА Наборы.Родитель = ЗНАЧЕНИЕ(Справочник.НаборыДополнительныхРеквизитовИСведений.ПустаяСсылка) ТОГДА Наборы.Ссылка В (&Наборы) ИНАЧЕ Наборы.Родитель В (&Наборы) - КОНЕЦ + КОНЕЦ + И Наборы.Используется + И ЕСТЬNULL(Наборы.Родитель.Используется, ИСТИНА) Catalog.НаборыДополнительныхРеквизитовИСведений true true @@ -1878,55 +1998,38 @@ - - СоздатьПоОбразцу + + КопируемыйРеквизит <key>ru</key> - <value>По образцу...</value> + <value>Копируемый реквизит</value> - 1 - - ru - Создать уникальный реквизит, который будет иметь -общий список значений с выбранным реквизитом. - - + 9 + + true - - - - СоздатьПоОбразцу - - - FunctionalOption.ИспользоватьОбщиеДополнительныеЗначения - Text - Auto - Auto - - - СоздатьОбщее + + + true + + + + НаборПриемник <key>ru</key> - <value>Общий...</value> + <value>Набор приемник</value> - 2 - - ru - Выбрать общий реквизит из существующих - - + 10 + + CatalogRef.НаборыДополнительныхРеквизитовИСведений + + true - - - - СоздатьОбщее - - - FunctionalOption.ИспользоватьОбщиеДополнительныеРеквизитыИСведения - Text - Auto - Auto - + + + true + + ПереместитьВверх @@ -1949,7 +2052,7 @@ <name>ПереместитьВверх</name> </handler> </action> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <formCommands> @@ -1974,7 +2077,7 @@ <name>ПереместитьВниз</name> </handler> </action> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <formCommands> @@ -2000,7 +2103,7 @@ <name>Скопировать</name> </handler> </action> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <formCommands> @@ -2027,7 +2130,7 @@ </handler> </action> <representation>Text</representation> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <formCommands> @@ -2053,7 +2156,7 @@ </handler> </action> <representation>Picture</representation> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <formCommands> @@ -2077,7 +2180,95 @@ </handler> </action> <representation>Text</representation> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> + <selectedRowsUse>Auto</selectedRowsUse> + </formCommands> + <formCommands> + <name>ДобавитьИзНабора</name> + <title> + <key>ru</key> + <value>Из другого набора...</value> + + 9 + + ru + Добавить из набора + + + true + + + + ДобавитьИзНабора + + + DontUse + Auto + + + ПоискИУдалениеДублей + + <key>ru</key> + <value>Поиск и удаление дублей...</value> + + 10 + + ru + Поиск и удаление дублей + + + true + + + + ПоискИУдалениеДублей + + + DontUse + Auto + + + КопироватьРеквизит + + <key>ru</key> + <value>Копировать</value> + + 11 + + ru + Копирует выделенный дополнительный реквизит + + + true + + + + СкопироватьВыделенныйРеквизит + + + DontUse + Auto + + + ВставитьРеквизит + + <key>ru</key> + <value>Вставить</value> + + 12 + + ru + Добавляет скопированный дополнительный реквизит в текущий набор + + + true + + + + ВставитьРеквизит + + + DontUse Auto diff --git a/SSL/src/Catalogs/НаборыДополнительныхРеквизитовИСведений/Forms/ФормаСписка/Module.bsl b/SSL/src/Catalogs/НаборыДополнительныхРеквизитовИСведений/Forms/ФормаСписка/Module.bsl index c4c6c11a6..e00c5fab4 100644 --- a/SSL/src/Catalogs/НаборыДополнительныхРеквизитовИСведений/Forms/ФормаСписка/Module.bsl +++ b/SSL/src/Catalogs/НаборыДополнительныхРеквизитовИСведений/Forms/ФормаСписка/Module.bsl @@ -28,6 +28,10 @@ НастроитьОтображениеНаборов(); + Если Не ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ПоискИУдалениеДублей") Тогда + Элементы.ПоискИУдалениеДублей.Видимость = Ложь; + КонецЕсли; + КонецПроцедуры &НаКлиенте @@ -87,6 +91,34 @@ КонецПроцедуры +&НаКлиенте +Процедура НаборыСвойствПроверкаПеретаскивания(Элемент, ПараметрыПеретаскивания, СтандартнаяОбработка, Строка, Поле) + СтандартнаяОбработка = Ложь; + + Если Элементы.НаборыСвойств.ДанныеСтроки(Строка).ЭтоГруппа Тогда + ПараметрыПеретаскивания.Действие = ДействиеПеретаскивания.Отмена; + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура НаборыСвойствПеретаскивание(Элемент, ПараметрыПеретаскивания, СтандартнаяОбработка, Строка, Поле) + СтандартнаяОбработка = Ложь; + + Если ПараметрыПеретаскивания.Значение.ОбщиеЗначения Тогда + ПеретаскиваемыйЭлемент = ПараметрыПеретаскивания.Значение.ВладелецДополнительныхЗначений; + Иначе + ПеретаскиваемыйЭлемент = ПараметрыПеретаскивания.Значение.Свойство; + КонецЕсли; + + Если ТипЗнч(ПеретаскиваемыйЭлемент) <> Тип("ПланВидовХарактеристикСсылка.ДополнительныеРеквизитыИСведения") Тогда + Возврат; + КонецЕсли; + + НаборПриемник = Строка; + ДобавитьРеквизитВНабор(ПеретаскиваемыйЭлемент, Строка); +КонецПроцедуры + #КонецОбласти #Область ОбработчикиСобытийЭлементовТаблицыФормыСвойства @@ -147,10 +179,16 @@ ИначеЕсли ВыбранноеЗначение.Свойство("ОбщееСвойство") Тогда - ВыполнитьКомандуНаСервере("ДобавитьОбщееСвойство", ВыбранноеЗначение.ОбщееСвойство); + ИзменяемыйНабор = ТекущийНабор; + Если ВыбранноеЗначение.Свойство("Перетаскивание") Тогда + ДобавитьОбщееСвойствоПеретаскиванием(ВыбранноеЗначение.ОбщееСвойство); + Иначе + ВыполнитьКомандуНаСервере("ДобавитьОбщееСвойство", ВыбранноеЗначение.ОбщееСвойство); + ИзменяемыйНабор = НаборПриемник; + КонецЕсли; Оповестить("Запись_НаборыДополнительныхРеквизитовИСведений", - Новый Структура("Ссылка", ТекущийНабор), ТекущийНабор); + Новый Структура("Ссылка", ИзменяемыйНабор), ИзменяемыйНабор); Иначе ВыбратьУказанныеСтроки(ВыбранноеЗначение); КонецЕсли; @@ -158,6 +196,19 @@ КонецПроцедуры +&НаКлиенте +Процедура СвойстваПроверкаПеретаскивания(Элемент, ПараметрыПеретаскивания, СтандартнаяОбработка, Строка, Поле) + СтандартнаяОбработка = Ложь; +КонецПроцедуры + +&НаКлиенте +Процедура СвойстваНачалоПеретаскивания(Элемент, ПараметрыПеретаскивания, Выполнение) + // Перемещение свойств и реквизитов не поддерживается, всегда выполняется копирование. + // Иконка курсора при этом должна быть соответствующая. + ПараметрыПеретаскивания.ДопустимыеДействия = ДопустимыеДействияПеретаскивания.Копирование; + ПараметрыПеретаскивания.Действие = ДействиеПеретаскивания.Копирование; +КонецПроцедуры + #КонецОбласти #Область ОбработчикиКомандФормы @@ -176,21 +227,9 @@ КонецПроцедуры &НаКлиенте -Процедура СоздатьПоОбразцу(Команда) +Процедура ДобавитьИзНабора(Команда) ПараметрыФормы = Новый Структура; - ПараметрыФормы.Вставить("РежимВыбора", Истина); - ПараметрыФормы.Вставить("ЭтоДополнительноеСведение", ЭтоНаборыДополнительныхСведений); - ПараметрыФормы.Вставить("ВыборВладельцаДополнительныхЗначений", Истина); - ПараметрыФормы.Вставить("ТекущийНаборСвойств", ТекущийНабор); - - ОткрытьФорму("ПланВидовХарактеристик.ДополнительныеРеквизитыИСведения.ФормаВыбора", - ПараметрыФормы, Элементы.Свойства); - -КонецПроцедуры - -&НаКлиенте -Процедура СоздатьОбщее(Команда) ВыбранныеЗначения = Новый Массив; НайденныеСтроки = Свойства.НайтиСтроки(Новый Структура("Общее", Истина)); @@ -198,16 +237,18 @@ ВыбранныеЗначения.Добавить(Строка.Свойство); КонецЦикла; - ПараметрыФормы = Новый Структура; - ПараметрыФормы.Вставить("РежимВыбора", Истина); - ПараметрыФормы.Вставить("ЭтоДополнительноеСведение", ЭтоНаборыДополнительныхСведений); - ПараметрыФормы.Вставить("ВыборОбщегоСвойства", Истина); - ПараметрыФормы.Вставить("ТекущийНаборСвойств", ТекущийНабор); + Если ЭтоНаборыДополнительныхСведений Тогда + ПараметрыФормы.Вставить("ВыборОбщегоСвойства", Истина); + Иначе + ПараметрыФормы.Вставить("ВыборВладельцаДополнительныхЗначений", Истина); + КонецЕсли; + ПараметрыФормы.Вставить("ВыбранныеЗначения", ВыбранныеЗначения); + ПараметрыФормы.Вставить("ЭтоДополнительноеСведение", ЭтоНаборыДополнительныхСведений); + ПараметрыФормы.Вставить("ТекущийНаборСвойств", ТекущийНабор); - ОткрытьФорму("ПланВидовХарактеристик.ДополнительныеРеквизитыИСведения.ФормаВыбора", + ОткрытьФорму("ПланВидовХарактеристик.ДополнительныеРеквизитыИСведения.Форма.ФормаЭлемента", ПараметрыФормы, Элементы.Свойства); - КонецПроцедуры &НаКлиенте @@ -226,16 +267,38 @@ КонецПроцедуры &НаКлиенте -Процедура Скопировать(Команда = Неопределено) +Процедура Скопировать(Команда = Неопределено, ВставкаИзБуфера = Ложь) ПараметрыФормы = Новый Структура; + ЗначениеКопирования = Элементы.Свойства.ТекущиеДанные.Свойство; + ПараметрыФормы.Вставить("ВладелецДополнительныхЗначений", ЗначениеКопирования); ПараметрыФормы.Вставить("ТекущийНаборСвойств", ТекущийНабор); - ПараметрыФормы.Вставить("ЗначениеКопирования", Элементы.Свойства.ТекущиеДанные.Свойство); + ПараметрыФормы.Вставить("ЗначениеКопирования", ЗначениеКопирования); ОткрытьФорму("ПланВидовХарактеристик.ДополнительныеРеквизитыИСведения.ФормаОбъекта", ПараметрыФормы); КонецПроцедуры +&НаКлиенте +Процедура ДобавитьРеквизитВНабор(ВладелецДополнительныхЗначений, Набор = Неопределено) + + ПараметрыФормы = Новый Структура; + Если Набор = Неопределено Тогда + ТекущийНаборСвойств = ТекущийНабор; + Иначе + ТекущийНаборСвойств = Набор; + ПараметрыФормы.Вставить("Перетаскивание", Истина); + КонецЕсли; + + ПараметрыФормы.Вставить("КопированиеСВопросом", Истина); + ПараметрыФормы.Вставить("ВладелецДополнительныхЗначений", ВладелецДополнительныхЗначений); + ПараметрыФормы.Вставить("ЭтоДополнительноеСведение", ЭтоНаборыДополнительныхСведений); + ПараметрыФормы.Вставить("ТекущийНаборСвойств", ТекущийНаборСвойств); + + ОткрытьФорму("ПланВидовХарактеристик.ДополнительныеРеквизитыИСведения.ФормаОбъекта", ПараметрыФормы, Элементы.Свойства); + +КонецПроцедуры + &НаКлиенте Процедура ПометитьНаУдаление(Команда) @@ -257,6 +320,34 @@ КонецПроцедуры +&НаКлиенте +Процедура ПоискИУдалениеДублей(Команда) + МодульПоискИУдалениеДублейКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("ПоискИУдалениеДублейКлиент"); + ИмяФормыПоискИУдалениеДублей = МодульПоискИУдалениеДублейКлиент.ИмяФормыОбработкиПоискИУдалениеДублей(); + ОткрытьФорму(ИмяФормыПоискИУдалениеДублей); +КонецПроцедуры + +&НаКлиенте +Процедура СкопироватьВыделенныйРеквизит(Команда) + КопируемыйРеквизит = Новый Структура; + КопируемыйРеквизит.Вставить("КопируемыйРеквизит", Элементы.Свойства.ТекущиеДанные.Свойство); + КопируемыйРеквизит.Вставить("ОбщиеЗначения", Элементы.Свойства.ТекущиеДанные.ОбщиеЗначения); + КопируемыйРеквизит.Вставить("ВладелецДополнительныхЗначений", Элементы.Свойства.ТекущиеДанные.ВладелецДополнительныхЗначений); + + Элементы.ВставитьРеквизит.Доступность = Истина; +КонецПроцедуры + +&НаКлиенте +Процедура ВставитьРеквизит(Команда) + Если КопируемыйРеквизит.ОбщиеЗначения Тогда + ВладелецДополнительныхЗначений = КопируемыйРеквизит.ВладелецДополнительныхЗначений; + Иначе + ВладелецДополнительныхЗначений = КопируемыйРеквизит.КопируемыйРеквизит; + КонецЕсли; + + ДобавитьРеквизитВНабор(ВладелецДополнительныхЗначений); +КонецПроцедуры + #КонецОбласти #Область СлужебныеПроцедурыИФункции @@ -284,7 +375,7 @@ ЭлементУсловногоОформления = УсловноеОформление.Элементы.Добавить(); ЭлементЦветаОформления = ЭлементУсловногоОформления.Оформление.Элементы.Найти("TextColor"); - ЭлементЦветаОформления.Значение = Метаданные.ЭлементыСтиля.НедоступныеДанныеЦвет.Значение; + ЭлементЦветаОформления.Значение = Метаданные.ЭлементыСтиля.ТекстЗапрещеннойЯчейкиЦвет.Значение; ЭлементЦветаОформления.Использование = Истина; ГруппаЭлементовОтбораДанных = ЭлементУсловногоОформления.Отбор.Элементы.Добавить(Тип("ГруппаЭлементовОтбораКомпоновкиДанных")); @@ -394,8 +485,6 @@ Процедура НастроитьОтображениеНаборов() КомандаСоздать = Команды.Найти("Создать"); - КомандаСоздатьПоОбразцу = Команды.Найти("СоздатьПоОбразцу"); - КомандаСоздатьОбщее = Команды.Найти("СоздатьОбщее"); КомандаСкопировать = Команды.Найти("Скопировать"); КомандаИзменить = Команды.Найти("Изменить"); КомандаПометитьНаУдаление = Команды.Найти("ПометитьНаУдаление"); @@ -408,10 +497,6 @@ КомандаСоздать.Подсказка = НСтр("ru = 'Создать уникальное сведение'"); КомандаСоздать.Заголовок = НСтр("ru = 'Новое'"); КомандаСоздать.Подсказка = НСтр("ru = 'Создать уникальное сведение'"); - КомандаСоздатьПоОбразцу.Заголовок = НСтр("ru = 'По образцу...'"); - КомандаСоздатьПоОбразцу.Подсказка = НСтр("ru = 'Создать сведение по образцу (общий список значений)'"); - КомандаСоздатьОбщее.Заголовок = НСтр("ru = 'Общее...'"); - КомандаСоздатьОбщее.Подсказка = НСтр("ru = 'Выбрать общее сведение из существующих'"); КомандаСкопировать.Подсказка = НСтр("ru = 'Создать новое сведение копированием текущего'"); КомандаИзменить.Подсказка = НСтр("ru = 'Изменить (или открыть) текущее сведение'"); @@ -440,10 +525,6 @@ Заголовок = НСтр("ru = 'Дополнительные реквизиты'"); КомандаСоздать.Заголовок = НСтр("ru = 'Новый'"); КомандаСоздать.Подсказка = НСтр("ru = 'Создать уникальный реквизит'"); - КомандаСоздатьПоОбразцу.Заголовок = НСтр("ru = 'По образцу...'"); - КомандаСоздатьПоОбразцу.Подсказка = НСтр("ru = 'Создать реквизит по образцу (общий список значений)'"); - КомандаСоздатьОбщее.Заголовок = НСтр("ru = 'Общий...'"); - КомандаСоздатьОбщее.Подсказка = НСтр("ru = 'Выбрать общий реквизит из существующих'"); КомандаСкопировать.Подсказка = НСтр("ru = 'Создать новый реквизит копированием текущего'"); КомандаИзменить.Подсказка = НСтр("ru = 'Изменить (или открыть) текущий реквизит'"); @@ -503,13 +584,6 @@ ОбщегоНазначенияКлиентСервер.УстановитьПараметрДинамическогоСписка( НаборыСвойств, "Наборы", ДоступныеНаборы, Истина); - - Если НЕ Элементы.ЭтоНаборыДополнительныхСведений.Видимость Тогда - // Скрытие помеченных на удаление. - ОбщегоНазначенияКлиентСервер.УстановитьЭлементОтбораДинамическогоСписка( - НаборыСвойств, "ПометкаУдаления", Ложь, , , Истина, - РежимОтображенияЭлементаНастройкиКомпоновкиДанных.Обычный); - КонецЕсли; ПриИзмененииТекущегоНабораНаСервере(); @@ -613,15 +687,15 @@ Элементы = Контекст.Элементы; ОбщаяДоступность = НЕ Элементы.Свойства.ТолькоПросмотр; + ДоступностьВставки = ОбщаяДоступность И (Контекст.КопируемыйРеквизит <> Неопределено); ДоступностьДляСтроки = ОбщаяДоступность И Контекст.Элементы.Свойства.ТекущаяСтрока <> Неопределено; // Настройка команд командной панели. + Элементы.ДобавитьИзНабора.Доступность = ОбщаяДоступность; Элементы.СвойстваСоздать.Доступность = ОбщаяДоступность; Элементы.СвойстваТолькоСоздать.Доступность = ОбщаяДоступность; - Элементы.СвойстваСоздатьПоОбразцу.Доступность = ОбщаяДоступность; - Элементы.СвойстваСоздатьОбщее.Доступность = ОбщаяДоступность; Элементы.СвойстваСкопировать.Доступность = ДоступностьДляСтроки; Элементы.СвойстваИзменить.Доступность = ДоступностьДляСтроки; @@ -630,11 +704,13 @@ Элементы.СвойстваПереместитьВверх.Доступность = ДоступностьДляСтроки; Элементы.СвойстваПереместитьВниз.Доступность = ДоступностьДляСтроки; + Элементы.КопироватьРеквизит.Доступность = ДоступностьДляСтроки; + Элементы.ВставитьРеквизит.Доступность = ДоступностьВставки; + // Настройка команд контекстного меню. Элементы.СвойстваКонтекстноеМенюСоздать.Доступность = ОбщаяДоступность; Элементы.СвойстваКонтекстноеМенюТолькоСоздать.Доступность = ОбщаяДоступность; - Элементы.СвойстваКонтекстноеМенюСоздатьПоОбразцу.Доступность = ОбщаяДоступность; - Элементы.СвойстваКонтекстноеМенюСоздатьОбщее.Доступность = ОбщаяДоступность; + Элементы.СвойстваКонтекстноеМенюДобавитьИзНабора.Доступность = ОбщаяДоступность; Элементы.СвойстваКонтекстноеМенюСкопировать.Доступность = ДоступностьДляСтроки; Элементы.СвойстваКонтекстноеМенюИзменить.Доступность = ДоступностьДляСтроки; @@ -819,6 +895,53 @@ КонецПроцедуры +&НаСервере +Процедура ДобавитьОбщееСвойствоПеретаскиванием(ДобавляемоеСвойство) + + Блокировка = Новый БлокировкаДанных; + ЭлементБлокировки = Блокировка.Добавить("Справочник.НаборыДополнительныхРеквизитовИСведений"); + ЭлементБлокировки.Режим = РежимБлокировкиДанных.Исключительный; + ЭлементБлокировки.УстановитьЗначение("Ссылка", НаборПриемник); + + Попытка + ЗаблокироватьДанныеДляРедактирования(НаборПриемник); + НачатьТранзакцию(); + Попытка + Блокировка.Заблокировать(); + ЗаблокироватьДанныеДляРедактирования(НаборПриемник); + + НаборПриемникОбъект = НаборПриемник.ПолучитьОбъект(); + + ТабличнаяЧасть = НаборПриемникОбъект[?(ЭтоНаборыДополнительныхСведений, + "ДополнительныеСведения", "ДополнительныеРеквизиты")]; + + НайденнаяСтрока = ТабличнаяЧасть.Найти(ДобавляемоеСвойство, "Свойство"); + + Если НайденнаяСтрока = Неопределено Тогда + НоваяСтрока = ТабличнаяЧасть.Добавить(); + НоваяСтрока.Свойство = ДобавляемоеСвойство; + НаборПриемникОбъект.Записать(); + + ИначеЕсли НайденнаяСтрока.ПометкаУдаления Тогда + НайденнаяСтрока.ПометкаУдаления = Ложь; + НаборПриемникОбъект.Записать(); + КонецЕсли; + + ЗафиксироватьТранзакцию(); + Исключение + ОтменитьТранзакцию(); + ВызватьИсключение; + КонецПопытки; + Исключение + РазблокироватьДанныеДляРедактирования(НаборПриемник); + ВызватьИсключение; + КонецПопытки; + + Элементы.НаборыСвойств.Обновить(); + НаборПриемник = Неопределено; + +КонецПроцедуры + &НаСервере Процедура ВыполнитьКомандуНаСервере(Команда, Параметр = Неопределено) diff --git a/SSL/src/Catalogs/НаборыДополнительныхРеквизитовИСведений/Forms/ФормаЭлемента/Form.form b/SSL/src/Catalogs/НаборыДополнительныхРеквизитовИСведений/Forms/ФормаЭлемента/Form.form index a853be8e5..bceae06bd 100644 --- a/SSL/src/Catalogs/НаборыДополнительныхРеквизитовИСведений/Forms/ФормаЭлемента/Form.form +++ b/SSL/src/Catalogs/НаборыДополнительныхРеквизитовИСведений/Forms/ФормаЭлемента/Form.form @@ -515,7 +515,6 @@ true true true - UseIfNecessary auto true diff --git a/SSL/src/Catalogs/НаборыДополнительныхРеквизитовИСведений/Help/ru.html b/SSL/src/Catalogs/НаборыДополнительныхРеквизитовИСведений/Help/ru.html index e65c11634..4c2738d6a 100644 --- a/SSL/src/Catalogs/НаборыДополнительныхРеквизитовИСведений/Help/ru.html +++ b/SSL/src/Catalogs/НаборыДополнительныхРеквизитовИСведений/Help/ru.html @@ -5,15 +5,16 @@
    • Дополнительные реквизиты - хранятся в самом элементе справочника или документе (могут размещаться в специальном разделе или на специальной вкладке). Создаются для реализации таких свойств, которые являются неотъемлемой частью объекта, вводятся при его редактировании и доступны для редактирования тем же пользователям, которым доступен и сам объект со свойствами.
    • Дополнительные сведения - предназначены для хранения сведений об элементе справочника или документе, которые не являются его неотъемлемой частью. Доступны, как правило, для просмотра и/или редактирования пользователям, которые не имеют доступа к самому объекту. Редактируются в отдельном окне, которое можно открыть из окна объекта.

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

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

    -

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

    +

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

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

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

    -

    Список Дополнительные реквизиты (сведения) представляет собой таблицу из двух частей:

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

        Список Дополнительные реквизиты (сведения) представляет собой таблицу из двух частей:

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

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

        -

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

        +

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

        • diff --git a/SSL/src/Catalogs/НаборыДополнительныхРеквизитовИСведений/НаборыДополнительныхРеквизитовИСведений.mdo b/SSL/src/Catalogs/НаборыДополнительныхРеквизитовИСведений/НаборыДополнительныхРеквизитовИСведений.mdo index 9e25a32f3..c6906a2e7 100644 --- a/SSL/src/Catalogs/НаборыДополнительныхРеквизитовИСведений/НаборыДополнительныхРеквизитовИСведений.mdo +++ b/SSL/src/Catalogs/НаборыДополнительныхРеквизитовИСведений/НаборыДополнительныхРеквизитовИСведений.mdo @@ -247,6 +247,28 @@ Use Use + + Используется + + ru + Используется + + + Boolean + + + ru + Набор свойств отображается в форме списка + + + + + true + + Use + ForFolderAndItem + Use + diff --git a/SSL/src/Catalogs/Организации/Commands/ДобавитьОрганизацию/CommandModule.bsl b/SSL/src/Catalogs/Организации/Commands/ДобавитьОрганизацию/CommandModule.bsl index 32bf6ecf6..597dd7c98 100644 --- a/SSL/src/Catalogs/Организации/Commands/ДобавитьОрганизацию/CommandModule.bsl +++ b/SSL/src/Catalogs/Организации/Commands/ДобавитьОрганизацию/CommandModule.bsl @@ -1,7 +1,11 @@ +#Область ОбработчикиСобытий + &НаКлиенте Процедура ОбработкаКоманды(ПараметрКоманды, ПараметрыВыполненияКоманды) ОткрытьФорму("Справочник.Организации.ФормаОбъекта"); КонецПроцедуры + +#КонецОбласти diff --git a/SSL/src/Catalogs/Организации/Commands/Организации/CommandModule.bsl b/SSL/src/Catalogs/Организации/Commands/Организации/CommandModule.bsl index fc624e94d..083d49ada 100644 --- a/SSL/src/Catalogs/Организации/Commands/Организации/CommandModule.bsl +++ b/SSL/src/Catalogs/Организации/Commands/Организации/CommandModule.bsl @@ -1,4 +1,6 @@ +#Область ОбработчикиСобытий + &НаКлиенте Процедура ОбработкаКоманды(ПараметрКоманды, ПараметрыВыполненияКоманды) @@ -10,3 +12,5 @@ ПараметрыВыполненияКоманды.Окно); КонецПроцедуры + +#КонецОбласти diff --git a/SSL/src/Catalogs/Организации/Commands/РеквизитыОрганизации/CommandModule.bsl b/SSL/src/Catalogs/Организации/Commands/РеквизитыОрганизации/CommandModule.bsl index a7aab2b9d..820cd09b8 100644 --- a/SSL/src/Catalogs/Организации/Commands/РеквизитыОрганизации/CommandModule.bsl +++ b/SSL/src/Catalogs/Организации/Commands/РеквизитыОрганизации/CommandModule.bsl @@ -1,14 +1,22 @@ +#Область ОбработчикиСобытий + &НаКлиенте Процедура ОбработкаКоманды(ПараметрКоманды, ПараметрыВыполненияКоманды) - ОткрытьФорму("Справочник.Организации.ФормаОбъекта", ПолучитьПараметрыОткрытиФормы()); + ОткрытьФорму("Справочник.Организации.ФормаОбъекта", ПараметрыОткрытияФормы()); КонецПроцедуры +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + &НаСервере -Функция ПолучитьПараметрыОткрытиФормы() +Функция ПараметрыОткрытияФормы() Возврат Новый Структура("Ключ", Справочники.Организации.ОрганизацияПоУмолчанию()); КонецФункции + +#КонецОбласти diff --git a/SSL/src/Catalogs/Организации/Forms/ФормаЭлемента/Form.form b/SSL/src/Catalogs/Организации/Forms/ФормаЭлемента/Form.form index 9d8673a7e..676ed4d8f 100644 --- a/SSL/src/Catalogs/Организации/Forms/ФормаЭлемента/Form.form +++ b/SSL/src/Catalogs/Организации/Forms/ФормаЭлемента/Form.form @@ -219,7 +219,6 @@ true true true - UseIfNecessary auto true diff --git a/SSL/src/Catalogs/Организации/Forms/ФормаЭлемента/Module.bsl b/SSL/src/Catalogs/Организации/Forms/ФормаЭлемента/Module.bsl index e7098dee0..6c4066184 100644 --- a/SSL/src/Catalogs/Организации/Forms/ФормаЭлемента/Module.bsl +++ b/SSL/src/Catalogs/Организации/Forms/ФормаЭлемента/Module.bsl @@ -60,7 +60,7 @@ &НаКлиенте Процедура ПрефиксПриИзменении(Элемент) - Если Найти(Объект.Префикс, "-") > 0 Тогда + Если СтрНайти(Объект.Префикс, "-") > 0 Тогда ПоказатьПредупреждение(Неопределено, НСтр("ru = 'Нельзя в префиксе организации использовать символ ""-"".'")); Объект.Префикс = СтрЗаменить(Объект.Префикс, "-", ""); КонецЕсли; diff --git a/SSL/src/Catalogs/Организации/Организации.mdo b/SSL/src/Catalogs/Организации/Организации.mdo index bbcbb58bf..1df2e5423 100644 --- a/SSL/src/Catalogs/Организации/Организации.mdo +++ b/SSL/src/Catalogs/Организации/Организации.mdo @@ -100,6 +100,22 @@ + + Catalog.ВидыКонтактнойИнформации + Catalog.ВидыКонтактнойИнформации.StandardAttribute.Ref + Catalog.ВидыКонтактнойИнформации.StandardAttribute.Parent + + Catalog.ВидыКонтактнойИнформации.СправочникОрганизации + + -1 + -1 + Catalog.Организации.TabularSection.КонтактнаяИнформация + Catalog.Организации.TabularSection.КонтактнаяИнформация.StandardAttribute.Ref + Catalog.Организации.TabularSection.КонтактнаяИнформация.Attribute.ВидДляСписка + Catalog.Организации.TabularSection.КонтактнаяИнформация.Attribute.Представление + -1 + -1 + Use true @@ -394,6 +410,24 @@ Use Use + + ВидДляСписка + + ru + Вид для списка + + + CatalogRef.ВидыКонтактнойИнформации + + + ru + Вид контактной информации для списка + + + + Use + Use + ФормаЭлемента diff --git a/SSL/src/Catalogs/ОчередьЗаданий/Forms/ФормаЭлемента/Form.form b/SSL/src/Catalogs/ОчередьЗаданий/Forms/ФормаЭлемента/Form.form index 7acb6a7d3..c799e557c 100644 --- a/SSL/src/Catalogs/ОчередьЗаданий/Forms/ФормаЭлемента/Form.form +++ b/SSL/src/Catalogs/ОчередьЗаданий/Forms/ФормаЭлемента/Form.form @@ -744,7 +744,6 @@ true true true - UseIfNecessary auto true diff --git a/SSL/src/Catalogs/ОчередьЗаданийОбластейДанных/Forms/ФормаСписка/Form.form b/SSL/src/Catalogs/ОчередьЗаданийОбластейДанных/Forms/ФормаСписка/Form.form index 2afe73a10..12a031e6b 100644 --- a/SSL/src/Catalogs/ОчередьЗаданийОбластейДанных/Forms/ФормаСписка/Form.form +++ b/SSL/src/Catalogs/ОчередьЗаданийОбластейДанных/Forms/ФормаСписка/Form.form @@ -706,7 +706,6 @@ true true true - UseIfNecessary auto true diff --git a/SSL/src/Catalogs/ОчередьЗаданийОбластейДанных/Forms/ФормаЭлемента/Form.form b/SSL/src/Catalogs/ОчередьЗаданийОбластейДанных/Forms/ФормаЭлемента/Form.form index c4d4718c7..955a8c648 100644 --- a/SSL/src/Catalogs/ОчередьЗаданийОбластейДанных/Forms/ФормаЭлемента/Form.form +++ b/SSL/src/Catalogs/ОчередьЗаданийОбластейДанных/Forms/ФормаЭлемента/Form.form @@ -828,7 +828,6 @@ true true true - UseIfNecessary auto true diff --git a/SSL/src/Catalogs/ПапкиФайлов/Forms/ФормаВыбора/Form.form b/SSL/src/Catalogs/ПапкиФайлов/Forms/ФормаВыбора/Form.form index 474daf336..aede11958 100644 --- a/SSL/src/Catalogs/ПапкиФайлов/Forms/ФормаВыбора/Form.form +++ b/SSL/src/Catalogs/ПапкиФайлов/Forms/ФормаВыбора/Form.form @@ -319,7 +319,6 @@ true true true - UseIfNecessary auto true diff --git a/SSL/src/Catalogs/ПапкиФайлов/Forms/ФормаЭлемента/Form.form b/SSL/src/Catalogs/ПапкиФайлов/Forms/ФормаЭлемента/Form.form index 99434e6a2..c823a8298 100644 --- a/SSL/src/Catalogs/ПапкиФайлов/Forms/ФормаЭлемента/Form.form +++ b/SSL/src/Catalogs/ПапкиФайлов/Forms/ФормаЭлемента/Form.form @@ -446,7 +446,6 @@ true true true - UseIfNecessary auto true @@ -519,7 +518,7 @@ ОткрытьСписокПапокИФайлов - Auto + DontUse Auto diff --git a/SSL/src/Catalogs/ПапкиФайлов/Forms/ФормаЭлемента/Module.bsl b/SSL/src/Catalogs/ПапкиФайлов/Forms/ФормаЭлемента/Module.bsl index 0c28dc4ba..7d4b925e9 100644 --- a/SSL/src/Catalogs/ПапкиФайлов/Forms/ФормаЭлемента/Module.bsl +++ b/SSL/src/Catalogs/ПапкиФайлов/Forms/ФормаЭлемента/Module.bsl @@ -17,7 +17,10 @@ РабочийКаталог = РаботаСФайламиСлужебныйВызовСервера.РабочийКаталогПапки(Объект.Ссылка); // СтандартныеПодсистемы.Свойства - УправлениеСвойствами.ПриСозданииНаСервере(ЭтотОбъект); + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.Свойства") Тогда + МодульУправлениеСвойствами = ОбщегоНазначения.ОбщийМодуль("УправлениеСвойствами"); + МодульУправлениеСвойствами.ПриСозданииНаСервере(ЭтотОбъект); + КонецЕсли; // Конец СтандартныеПодсистемы.Свойства ОбновитьПолныйПуть(); @@ -28,8 +31,11 @@ Процедура ОбработкаОповещения(ИмяСобытия, Параметр, Источник) // СтандартныеПодсистемы.Свойства - Если УправлениеСвойствамиКлиент.ОбрабатыватьОповещения(ЭтотОбъект, ИмяСобытия, Параметр) Тогда - ОбновитьЭлементыДополнительныхРеквизитов(); + Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.Свойства") Тогда + МодульУправлениеСвойствамиКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("УправлениеСвойствамиКлиент"); + Если МодульУправлениеСвойствамиКлиент.ОбрабатыватьОповещения(ЭтотОбъект, ИмяСобытия, Параметр) Тогда + ОбновитьЭлементыДополнительныхРеквизитов(); + КонецЕсли; КонецЕсли; // Конец СтандартныеПодсистемы.Свойства @@ -43,7 +49,10 @@ Процедура ПриЧтенииНаСервере(ТекущийОбъект) // СтандартныеПодсистемы.Свойства - УправлениеСвойствами.ПриЧтенииНаСервере(ЭтотОбъект, ТекущийОбъект); + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.Свойства") Тогда + МодульУправлениеСвойствами = ОбщегоНазначения.ОбщийМодуль("УправлениеСвойствами"); + МодульУправлениеСвойствами.ПриЧтенииНаСервере(ЭтотОбъект, ТекущийОбъект); + КонецЕсли; // Конец СтандартныеПодсистемы.Свойства КонецПроцедуры @@ -52,7 +61,10 @@ Процедура ПередЗаписьюНаСервере(Отказ, ТекущийОбъект) // СтандартныеПодсистемы.Свойства - УправлениеСвойствами.ПередЗаписьюНаСервере(ЭтотОбъект, ТекущийОбъект); + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.Свойства") Тогда + МодульУправлениеСвойствами = ОбщегоНазначения.ОбщийМодуль("УправлениеСвойствами"); + МодульУправлениеСвойствами.ПередЗаписьюНаСервере(ЭтотОбъект, ТекущийОбъект); + КонецЕсли; // Конец СтандартныеПодсистемы.Свойства КонецПроцедуры @@ -70,7 +82,10 @@ Процедура ОбработкаПроверкиЗаполненияНаСервере(Отказ, ПроверяемыеРеквизиты) // СтандартныеПодсистемы.Свойства - УправлениеСвойствами.ОбработкаПроверкиЗаполнения(ЭтотОбъект, Отказ, ПроверяемыеРеквизиты); + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.Свойства") Тогда + МодульУправлениеСвойствами = ОбщегоНазначения.ОбщийМодуль("УправлениеСвойствами"); + МодульУправлениеСвойствами.ОбработкаПроверкиЗаполнения(ЭтотОбъект, Отказ, ПроверяемыеРеквизиты); + КонецЕсли; // Конец СтандартныеПодсистемы.Свойства КонецПроцедуры @@ -128,9 +143,8 @@ Исключение // Нет прав на создание каталога, или такой путь отсутствует. - ТекстОшибки - = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Неверный путь или отсутствуют права на запись в каталог ""%1""'"), - ИмяКаталога); + ТекстОшибки = + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Неверный путь или отсутствуют права на запись в каталог ""%1""'"), ИмяКаталога); ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстОшибки, , "РабочийКаталог"); Возврат; @@ -155,7 +169,7 @@ РабочийКаталогПапки = РаботаСФайламиСлужебныйВызовСервера.РабочийКаталогПапки(Объект.Ссылка); РабочийКаталогПапкиУнаследованный = РабочийКаталогРодителя - + Объект.Наименование + ОбщегоНазначенияКлиентСервер.РазделительПути(); + + Объект.Наименование + ПолучитьРазделительПути(); Если ПустаяСтрока(РабочийКаталогРодителя) Тогда @@ -189,7 +203,10 @@ &НаКлиенте Процедура Подключаемый_РедактироватьСоставСвойств() - УправлениеСвойствамиКлиент.РедактироватьСоставСвойств(ЭтотОбъект, Объект.Ссылка); + Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.Свойства") Тогда + МодульУправлениеСвойствамиКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("УправлениеСвойствамиКлиент"); + МодульУправлениеСвойствамиКлиент.РедактироватьСоставСвойств(ЭтотОбъект, Объект.Ссылка); + КонецЕсли; КонецПроцедуры @@ -257,7 +274,10 @@ &НаСервере Процедура ОбновитьЭлементыДополнительныхРеквизитов() - УправлениеСвойствами.ОбновитьЭлементыДополнительныхРеквизитов(ЭтотОбъект); + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.Свойства") Тогда + МодульУправлениеСвойствами = ОбщегоНазначения.ОбщийМодуль("УправлениеСвойствами"); + МодульУправлениеСвойствами.ОбновитьЭлементыДополнительныхРеквизитов(ЭтотОбъект); + КонецЕсли; КонецПроцедуры diff --git a/SSL/src/Catalogs/ПапкиФайлов/ManagerModule.bsl b/SSL/src/Catalogs/ПапкиФайлов/ManagerModule.bsl index 0a990b198..17164c6b2 100644 --- a/SSL/src/Catalogs/ПапкиФайлов/ManagerModule.bsl +++ b/SSL/src/Catalogs/ПапкиФайлов/ManagerModule.bsl @@ -19,3 +19,19 @@ #КонецОбласти #КонецЕсли + +#Область ОбработчикиСобытий + +Процедура ОбработкаПолученияФормы(ВидФормы, Параметры, ВыбраннаяФорма, ДополнительнаяИнформация, СтандартнаяОбработка) + Если ВидФормы = "ФормаСписка" Тогда + ТекущаяСтрока = ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(Параметры, "ТекущаяСтрока"); + Если ТипЗнч(ТекущаяСтрока) = Тип("СправочникСсылка.ПапкиФайлов") И Не ТекущаяСтрока.Пустая() Тогда + СтандартнаяОбработка = Ложь; + Параметры.Удалить("ТекущаяСтрока"); + Параметры.Вставить("Папка", ТекущаяСтрока); + ВыбраннаяФорма = "Справочник.Файлы.Форма.Файлы"; + КонецЕсли; + КонецЕсли; +КонецПроцедуры + +#КонецОбласти diff --git a/SSL/src/Catalogs/ПапкиФайлов/ObjectModule.bsl b/SSL/src/Catalogs/ПапкиФайлов/ObjectModule.bsl index e9cf3cea1..d0afde2f9 100644 --- a/SSL/src/Catalogs/ПапкиФайлов/ObjectModule.bsl +++ b/SSL/src/Catalogs/ПапкиФайлов/ObjectModule.bsl @@ -74,12 +74,12 @@ РабочийКаталогРодителяПапки); РабочийКаталогПапкиУнаследованныйПрежний = РабочийКаталогРодителяПапки - + ТекущаяПапка.Наименование + ОбщегоНазначенияКлиентСервер.РазделительПути(); + + ТекущаяПапка.Наименование + ПолучитьРазделительПути(); Если РабочийКаталогПапкиУнаследованныйПрежний = РабочийКаталогПапки Тогда НовыйРабочийКаталогПапки = РабочийКаталогРодителяПапки - + Наименование + ОбщегоНазначенияКлиентСервер.РазделительПути(); + + Наименование + ПолучитьРазделительПути(); РаботаСФайламиСлужебныйВызовСервера.СохранитьРабочийКаталогПапки(Ссылка, НовыйРабочийКаталогПапки); КонецЕсли; @@ -97,7 +97,7 @@ Если РабочийКаталогРодителяПапки <> "" Тогда РабочийКаталогПапкиУнаследованныйПрежний = РабочийКаталогРодителяПапки - + ТекущаяПапка.Наименование + ОбщегоНазначенияКлиентСервер.РазделительПути(); + + ТекущаяПапка.Наименование + ПолучитьРазделительПути(); КонецЕсли; // Рабочий каталог автоформируется от родителя. @@ -105,7 +105,7 @@ Если РабочийКаталогНовогоРодителяПапки <> "" Тогда НовыйРабочийКаталогПапки = РабочийКаталогНовогоРодителяПапки - + Наименование + ОбщегоНазначенияКлиентСервер.РазделительПути(); + + Наименование + ПолучитьРазделительПути(); РаботаСФайламиСлужебныйВызовСервера.СохранитьРабочийКаталогПапки(Ссылка, НовыйРабочийКаталогПапки); Иначе @@ -134,7 +134,7 @@ РабочийКаталогПапки); РабочийКаталогПапки = РабочийКаталогПапки - + Наименование + ОбщегоНазначенияКлиентСервер.РазделительПути(); + + Наименование + ПолучитьРазделительПути(); РаботаСФайламиСлужебныйВызовСервера.СохранитьРабочийКаталогПапки(Ссылка, РабочийКаталогПапки); КонецЕсли; diff --git a/SSL/src/Catalogs/ПапкиЭлектронныхПисем/Forms/ФормаВыбора/Form.form b/SSL/src/Catalogs/ПапкиЭлектронныхПисем/Forms/ФормаВыбора/Form.form index 2344db12e..aa11d567e 100644 --- a/SSL/src/Catalogs/ПапкиЭлектронныхПисем/Forms/ФормаВыбора/Form.form +++ b/SSL/src/Catalogs/ПапкиЭлектронныхПисем/Forms/ФормаВыбора/Form.form @@ -264,7 +264,6 @@ true true true - UseIfNecessary auto true diff --git a/SSL/src/Catalogs/ПапкиЭлектронныхПисем/Forms/ФормаСписка/Form.form b/SSL/src/Catalogs/ПапкиЭлектронныхПисем/Forms/ФормаСписка/Form.form index 0e7498739..e7e3d7bb9 100644 --- a/SSL/src/Catalogs/ПапкиЭлектронныхПисем/Forms/ФормаСписка/Form.form +++ b/SSL/src/Catalogs/ПапкиЭлектронныхПисем/Forms/ФормаСписка/Form.form @@ -272,7 +272,6 @@ true true true - UseIfNecessary auto true diff --git a/SSL/src/Catalogs/ПапкиЭлектронныхПисем/Forms/ФормаЭлемента/Form.form b/SSL/src/Catalogs/ПапкиЭлектронныхПисем/Forms/ФормаЭлемента/Form.form index 8c198d9a4..f3ad770bb 100644 --- a/SSL/src/Catalogs/ПапкиЭлектронныхПисем/Forms/ФормаЭлемента/Form.form +++ b/SSL/src/Catalogs/ПапкиЭлектронныхПисем/Forms/ФормаЭлемента/Form.form @@ -215,7 +215,6 @@ true true true - UseIfNecessary auto true diff --git a/SSL/src/Catalogs/Пользователи/Commands/ПользователиИБ/CommandModule.bsl b/SSL/src/Catalogs/Пользователи/Commands/ПользователиИнформационнойБазы/CommandModule.bsl similarity index 91% rename from SSL/src/Catalogs/Пользователи/Commands/ПользователиИБ/CommandModule.bsl rename to SSL/src/Catalogs/Пользователи/Commands/ПользователиИнформационнойБазы/CommandModule.bsl index 699915963..4296ba574 100644 --- a/SSL/src/Catalogs/Пользователи/Commands/ПользователиИБ/CommandModule.bsl +++ b/SSL/src/Catalogs/Пользователи/Commands/ПользователиИнформационнойБазы/CommandModule.bsl @@ -1,3 +1,5 @@ +#Область ОбработчикиСобытий + &НаКлиенте Процедура ОбработкаКоманды(ПараметрКоманды, ПараметрыВыполненияКоманды) @@ -18,10 +20,12 @@ КонецЕсли; ОткрытьФорму( - "Справочник.Пользователи.Форма.ПользователиИБ", + "Справочник.Пользователи.Форма.ПользователиИнформационнойБазы", ПараметрыФормы, ПараметрыВыполненияКоманды.Источник, ПараметрыВыполненияКоманды.Уникальность, ПараметрыВыполненияКоманды.Окно); КонецПроцедуры + +#КонецОбласти diff --git a/SSL/src/Catalogs/Пользователи/Forms/ФормаВыбораПользователяОС/Form.form b/SSL/src/Catalogs/Пользователи/Forms/ВыборПользователяОперационнойСистемы/Form.form similarity index 99% rename from SSL/src/Catalogs/Пользователи/Forms/ФормаВыбораПользователяОС/Form.form rename to SSL/src/Catalogs/Пользователи/Forms/ВыборПользователяОперационнойСистемы/Form.form index e620b40ab..a71a2f96b 100644 --- a/SSL/src/Catalogs/Пользователи/Forms/ФормаВыбораПользователяОС/Form.form +++ b/SSL/src/Catalogs/Пользователи/Forms/ВыборПользователяОперационнойСистемы/Form.form @@ -872,7 +872,6 @@ true true true - UseIfNecessary auto true @@ -983,7 +982,7 @@ TextPicture - Auto + DontUse Auto diff --git a/SSL/src/Catalogs/Пользователи/Forms/ФормаВыбораПользователяОС/Help/ru.html b/SSL/src/Catalogs/Пользователи/Forms/ВыборПользователяОперационнойСистемы/Help/ru.html similarity index 100% rename from SSL/src/Catalogs/Пользователи/Forms/ФормаВыбораПользователяОС/Help/ru.html rename to SSL/src/Catalogs/Пользователи/Forms/ВыборПользователяОперационнойСистемы/Help/ru.html diff --git a/SSL/src/Catalogs/Пользователи/Forms/ФормаВыбораПользователяОС/Module.bsl b/SSL/src/Catalogs/Пользователи/Forms/ВыборПользователяОперационнойСистемы/Module.bsl similarity index 100% rename from SSL/src/Catalogs/Пользователи/Forms/ФормаВыбораПользователяОС/Module.bsl rename to SSL/src/Catalogs/Пользователи/Forms/ВыборПользователяОперационнойСистемы/Module.bsl diff --git a/SSL/src/Catalogs/Пользователи/Forms/ОграничениеНаВходВПрограмму/Form.form b/SSL/src/Catalogs/Пользователи/Forms/ОграничениеНаВходВПрограмму/Form.form new file mode 100644 index 000000000..dbd96aa08 --- /dev/null +++ b/SSL/src/Catalogs/Пользователи/Forms/ОграничениеНаВходВПрограмму/Form.form @@ -0,0 +1,613 @@ + + + + ВидСрокаНеУказан + 1 + true + true + + true + + + ВидСрока + + None + + OnChange + ВидСрокаПриИзменении + + + ВидСрокаНеУказанРасширеннаяПодсказка + 3 + Label + true + true + + Left + + + + ВидСрокаНеУказанКонтекстноеМеню + 2 + true + + RadioButtonField + Enter + true + Left + true + + 1 + + + ru + Согласно общим настройкам входа + + + НеУказан + + + Vertical + + + + ВидСрокаНеОграничен + 29 + true + true + + true + + + ВидСрока + + None + + OnChange + ВидСрокаПриИзменении + + + ВидСрокаНеОграниченРасширеннаяПодсказка + 31 + Label + true + true + + Left + + + + ВидСрокаНеОграниченКонтекстноеМеню + 30 + true + + RadioButtonField + Enter + true + Left + true + + 1 + + + ru + Без ограничения срока + + + НеОграничен + + + Vertical + + + + ГруппаВидСрокаДоДаты + 32 + + ГруппаДоДаты + 45 + + ВидСрокаДоДаты + 26 + true + true + + true + + + ВидСрока + + None + + OnChange + ВидСрокаПриИзменении + + + ВидСрокаДоДатыРасширеннаяПодсказка + 28 + Label + true + true + + Left + + + + ВидСрокаДоДатыКонтекстноеМеню + 27 + true + + RadioButtonField + Enter + true + Left + true + + 1 + + + ru + Вход разрешен до: + + + ДоДаты + + + Vertical + + + true + true + + true + + + <key>ru</key> + <value>Группа до даты</value> + + 15 + 1 + false + + ГруппаДоДатыРасширеннаяПодсказка + 46 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + true + true + Auto + Auto + + + + Срок + 36 + true + true + + true + + + Срок + + None + + СрокРасширеннаяПодсказка + 38 + Label + true + true + + Left + + + + СрокКонтекстноеМеню + 37 + true + + InputField + Enter + true + Left + true + + true + true + true + true + true + true + Normal + + + true + true + + true + + + <key>ru</key> + <value>Группа вид срока до даты</value> + + + ГруппаВидСрокаДоДатыРасширеннаяПодсказка + 33 + Label + true + true + + Left + + + UsualGroup + + Auto + true + true + Auto + Auto + + + + ГруппаВидСрокаДоПросрочки + 34 + + ГруппаДоПросрочки + 47 + + ВидСрокаПросрочка + 23 + true + true + + true + + + ВидСрока + + None + + OnChange + ВидСрокаПриИзменении + + + ВидСрокаПросрочкаРасширеннаяПодсказка + 25 + Label + true + true + + Left + + + + ВидСрокаПросрочкаКонтекстноеМеню + 24 + true + + RadioButtonField + Enter + true + Left + true + + 1 + + + ru + Запретить вход, если не работает более: + + + Просрочка + + + Vertical + + + true + true + + true + + + <key>ru</key> + <value>Группа до просрочки</value> + + 29 + 1 + + ГруппаДоПросрочкиРасширеннаяПодсказка + 48 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + true + true + Auto + Auto + + + + Просрочка + 39 + true + true + + true + + + Просрочка + + None + + ПросрочкаРасширеннаяПодсказка + 41 + Label + true + true + + Left + + + + ПросрочкаКонтекстноеМеню + 40 + true + + InputField + Enter + true + Left + true + + true + true + true + true + true + true + + 1 + + Normal + + + + НадписьПросрочка + 42 + + <key>ru</key> + <value>дн.</value> + + true + true + + true + + + НадписьПросрочкаРасширеннаяПодсказка + 44 + Label + true + true + + Left + + + + НадписьПросрочкаКонтекстноеМеню + 43 + true + + Label + true + true + + Left + + + true + true + + true + + + <key>ru</key> + <value>Группа вид срока до просрочки</value> + + + ГруппаВидСрокаДоПросрочкиРасширеннаяПодсказка + 35 + Label + true + true + + Left + + + UsualGroup + + Auto + true + true + Auto + Auto + + + Bottom + true + + ФормаКоманднаяПанель + -1 + + ФормаОК + 49 + true + true + + true + + + ФормаОКРасширеннаяПодсказка + 50 + Label + true + true + + Left + + + Form.Command.ОК + Auto + true + true + true + UserCmds + Auto + + + ФормаОтмена + 51 + true + true + + true + + + ФормаОтменаРасширеннаяПодсказка + 52 + Label + true + true + + Left + + + Form.StandardCommand.Cancel + Normal + Auto + true + true + UserCmds + Auto + + Right + + + OnOpen + ПриОткрытии + + + OnCreateAtServer + ПриСозданииНаСервере + + LockOwner + true + true + true + Vertical + true + true + true + auto + true + + ВидСрока + + <key>ru</key> + <value>Вид срока</value> + + 1 + + String + + + + true + + + true + + + + Срок + + <key>ru</key> + <value>Срок</value> + + 2 + + Date + + Date + + + + true + + + true + + + + Просрочка + + <key>ru</key> + <value>Просрочка</value> + + 3 + + Number + + 3 + true + + + + true + + + true + + + + ОК + + <key>ru</key> + <value>ОК</value> + + 1 + + true + + + + ОК + + + DontUse + Auto + + + + + + diff --git a/SSL/src/Catalogs/Пользователи/Forms/ОграничениеНаВходВПрограмму/Module.bsl b/SSL/src/Catalogs/Пользователи/Forms/ОграничениеНаВходВПрограмму/Module.bsl new file mode 100644 index 000000000..f34c90223 --- /dev/null +++ b/SSL/src/Catalogs/Пользователи/Forms/ОграничениеНаВходВПрограмму/Module.bsl @@ -0,0 +1,103 @@ +#Область ОбработчикиСобытийФормы + +&НаСервере +Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) + + Элементы.Срок.Подсказка + = Метаданные.РегистрыСведений.СведенияОПользователях.Ресурсы.СрокДействия.Подсказка; + +КонецПроцедуры + +&НаКлиенте +Процедура ПриОткрытии(Отказ) + + Просрочка = ВладелецФормы.ПросрочкаРаботыВПрограммеДоЗапрещенияВхода; + Срок = ВладелецФормы.СрокДействия; + + Если ВладелецФормы.СрокДействияНеОграничен Тогда + ВидСрока = "НеОграничен"; + ТекущийЭлемент = Элементы.ВидСрокаНеОграничен; + + ИначеЕсли ЗначениеЗаполнено(Срок) Тогда + ВидСрока = "ДоДаты"; + ТекущийЭлемент = Элементы.ВидСрокаДоДаты; + + ИначеЕсли ЗначениеЗаполнено(Просрочка) Тогда + ВидСрока = "Просрочка"; + ТекущийЭлемент = Элементы.ВидСрокаПросрочка; + Иначе + ВидСрока = "НеУказан"; + ТекущийЭлемент = Элементы.ВидСрокаНеУказан; + КонецЕсли; + + ОбновитьДоступность(); + +КонецПроцедуры + +#КонецОбласти + +#Область ОбработчикиСобытийЭлементовШапкиФормы + +&НаКлиенте +Процедура ВидСрокаПриИзменении(Элемент) + + ОбновитьДоступность(); + +КонецПроцедуры + +#КонецОбласти + +#Область ОбработчикиКомандФормы + +&НаКлиенте +Процедура ОК(Команда) + + ОчиститьСообщения(); + + Если ВидСрока = "ДоДаты" Тогда + Если Не ЗначениеЗаполнено(Срок) Тогда + ОбщегоНазначенияКлиентСервер.СообщитьПользователю( + НСтр("ru = 'Дата не указана.'"),, "Срок"); + Возврат; + + ИначеЕсли Срок <= НачалоДня(ОбщегоНазначенияКлиент.ДатаСеанса()) Тогда + ОбщегоНазначенияКлиентСервер.СообщитьПользователю( + НСтр("ru = 'Ограничение должно быть до завтра или более.'"),, "Срок"); + Возврат; + КонецЕсли; + КонецЕсли; + + ВладелецФормы.ПросрочкаРаботыВПрограммеДоЗапрещенияВхода = Просрочка; + ВладелецФормы.СрокДействия = Срок; + ВладелецФормы.СрокДействияНеОграничен = (ВидСрока = "НеОграничен"); + + Закрыть(); + +КонецПроцедуры + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +&НаКлиенте +Процедура ОбновитьДоступность() + + Если ВидСрока = "ДоДаты" Тогда + Элементы.Срок.АвтоОтметкаНезаполненного = Истина; + Элементы.Срок.Доступность = Истина; + Иначе + Элементы.Срок.АвтоОтметкаНезаполненного = Ложь; + Срок = Неопределено; + Элементы.Срок.Доступность = Ложь; + КонецЕсли; + + Если ВидСрока <> "Просрочка" Тогда + Просрочка = 0; + ИначеЕсли Просрочка = 0 Тогда + Просрочка = 60; + КонецЕсли; + Элементы.Просрочка.Доступность = ВидСрока = "Просрочка"; + +КонецПроцедуры + +#КонецОбласти diff --git a/SSL/src/Catalogs/Пользователи/Forms/ПользователиИБ/Form.form b/SSL/src/Catalogs/Пользователи/Forms/ПользователиИнформационнойБазы/Form.form similarity index 99% rename from SSL/src/Catalogs/Пользователи/Forms/ПользователиИБ/Form.form rename to SSL/src/Catalogs/Пользователи/Forms/ПользователиИнформационнойБазы/Form.form index 99459c2d9..b74f3a13a 100644 --- a/SSL/src/Catalogs/Пользователи/Forms/ПользователиИБ/Form.form +++ b/SSL/src/Catalogs/Пользователи/Forms/ПользователиИнформационнойБазы/Form.form @@ -1018,7 +1018,6 @@ true true true - UseIfNecessary auto true @@ -1347,7 +1346,7 @@ Обновить - Auto + DontUse Auto @@ -1369,7 +1368,7 @@ Сопоставить - Auto + DontUse Auto @@ -1391,7 +1390,7 @@ СопоставитьСНовым - Auto + DontUse Auto @@ -1417,7 +1416,7 @@ TextPicture - Auto + DontUse Auto @@ -1439,7 +1438,7 @@ ОтменитьСопоставление - Auto + DontUse Auto diff --git a/SSL/src/Catalogs/Пользователи/Forms/ПользователиИБ/Help/ru.html b/SSL/src/Catalogs/Пользователи/Forms/ПользователиИнформационнойБазы/Help/ru.html similarity index 100% rename from SSL/src/Catalogs/Пользователи/Forms/ПользователиИБ/Help/ru.html rename to SSL/src/Catalogs/Пользователи/Forms/ПользователиИнформационнойБазы/Help/ru.html diff --git a/SSL/src/Catalogs/Пользователи/Forms/ПользователиИБ/Module.bsl b/SSL/src/Catalogs/Пользователи/Forms/ПользователиИнформационнойБазы/Module.bsl similarity index 98% rename from SSL/src/Catalogs/Пользователи/Forms/ПользователиИБ/Module.bsl rename to SSL/src/Catalogs/Пользователи/Forms/ПользователиИнформационнойБазы/Module.bsl index e770318c1..e4e4358f4 100644 --- a/SSL/src/Catalogs/Пользователи/Forms/ПользователиИБ/Module.bsl +++ b/SSL/src/Catalogs/Пользователи/Forms/ПользователиИнформационнойБазы/Module.bsl @@ -10,11 +10,12 @@ Возврат; КонецЕсли; - Если НЕ Пользователи.ЭтоПолноправныйПользователь(, ОбщегоНазначенияПовтИсп.РежимРаботыПрограммы().Локальный) Тогда + РазделениеВключено = ОбщегоНазначенияПовтИсп.РазделениеВключено(); + Если НЕ Пользователи.ЭтоПолноправныйПользователь(, Не РазделениеВключено) Тогда ВызватьИсключение НСтр("ru = 'Недостаточно прав для открытия списка пользователей информационной базы.'"); КонецЕсли; - Пользователи.НайтиНеоднозначныхПользователейИБ(,); + Пользователи.НайтиНеоднозначныхПользователейИБ(Неопределено); ТипыПользователей.Добавить(Тип("СправочникСсылка.Пользователи")); Если ПолучитьФункциональнуюОпцию("ИспользоватьВнешнихПользователей") Тогда @@ -223,7 +224,7 @@ ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно; ОтборЭлемента.ПравоеЗначение = Истина; - Элемент.Оформление.УстановитьЗначениеПараметра("ЦветТекста", ЦветаСтиля.НедоступныеДанныеЦвет); + Элемент.Оформление.УстановитьЗначениеПараметра("ЦветТекста", ЦветаСтиля.ТекстЗапрещеннойЯчейкиЦвет); // diff --git a/SSL/src/Catalogs/Пользователи/Forms/СменаПочты/Form.form b/SSL/src/Catalogs/Пользователи/Forms/СменаПочты/Form.form index 108aac60c..9802a4245 100644 --- a/SSL/src/Catalogs/Пользователи/Forms/СменаПочты/Form.form +++ b/SSL/src/Catalogs/Пользователи/Forms/СменаПочты/Form.form @@ -83,7 +83,6 @@ Vertical true true - UseIfNecessary auto true @@ -177,7 +176,7 @@ СменитьПочту - Auto + DontUse Auto diff --git a/SSL/src/Catalogs/Пользователи/Forms/СменаПочты/Module.bsl b/SSL/src/Catalogs/Пользователи/Forms/СменаПочты/Module.bsl index 06fc2bec7..df5eb499d 100644 --- a/SSL/src/Catalogs/Пользователи/Forms/СменаПочты/Module.bsl +++ b/SSL/src/Catalogs/Пользователи/Forms/СменаПочты/Module.bsl @@ -48,7 +48,8 @@ &НаСервере Процедура СоздатьЗапросНаСменуПочты() - ПользователиСлужебный.ПриСозданииЗапросаНаСменуПочты(НоваяПочта, Пользователь, ПарольПользователяСервиса); + ИнтеграцияСтандартныхПодсистем.ПриСозданииЗапросаНаСменуПочты(НоваяПочта, + Пользователь, ПарольПользователяСервиса); КонецПроцедуры diff --git a/SSL/src/Catalogs/Пользователи/Forms/ФормаСписка/Attributes/ПользователиСписок/ExtInfo/ListSettings.dcss b/SSL/src/Catalogs/Пользователи/Forms/ФормаСписка/Attributes/ПользователиСписок/ExtInfo/ListSettings.dcss index fd8e073b5..1785e91bf 100644 --- a/SSL/src/Catalogs/Пользователи/Forms/ФормаСписка/Attributes/ПользователиСписок/ExtInfo/ListSettings.dcss +++ b/SSL/src/Catalogs/Пользователи/Forms/ФормаСписка/Attributes/ПользователиСписок/ExtInfo/ListSettings.dcss @@ -1,16 +1,8 @@ - - false - Подготовлен - Equal - true - Подготовленные ответственным за список - Normal - Normal - 73ec9c65-83f1-4821-af16-5dcbfa3cd980 + dfcece9d-5077-440b-b6b3-45a5cb4538eb diff --git a/SSL/src/Catalogs/Пользователи/Forms/ФормаСписка/Form.form b/SSL/src/Catalogs/Пользователи/Forms/ФормаСписка/Form.form index b872a16f3..9fb1e665d 100644 --- a/SSL/src/Catalogs/Пользователи/Forms/ФормаСписка/Form.form +++ b/SSL/src/Catalogs/Пользователи/Forms/ФормаСписка/Form.form @@ -205,6 +205,111 @@ КоманднаяПанельПользователи 53 + + ФормаСкопировать + 212 + true + true + + true + + + ФормаСкопироватьРасширеннаяПодсказка + 213 + Label + true + true + + Left + + + Form.StandardCommand.Copy + Normal + Auto + true + true + UserCmds + Auto + + + ФормаИзменить + 214 + true + true + + true + + + ФормаИзменитьРасширеннаяПодсказка + 215 + Label + true + true + + Left + + + Form.StandardCommand.Change + Normal + Auto + true + true + UserCmds + Auto + + + ФормаУстановитьПароль + 198 + true + true + + true + + + ФормаУстановитьПарольРасширеннаяПодсказка + 199 + Label + true + true + + Left + + + Form.Command.УстановитьПароль + Normal + Auto + true + true + UserCmds + Auto + InAdditionalSubmenu + + + ПользователиСтандартныеКоманды + 210 + true + true + + true + + + <key>ru</key> + <value>Пользователи стандартные команды</value> + + + ПользователиСтандартныеКомандыРасширеннаяПодсказка + 211 + Label + true + true + + Left + + + + Form + + СведенияОПользователях 132 @@ -250,7 +355,7 @@ Left - Catalog.Пользователи.Command.ПользователиИБ + Catalog.Пользователи.Command.ПользователиИнформационнойБазы Normal Auto true @@ -305,9 +410,7 @@ Left - - Form - + ФормаСправка @@ -918,6 +1021,10 @@ BeforeAddRow ПользователиСписокПередНачаломДобавления + + OnActivateRow + ПользователиСписокПриАктивизацииСтроки + ПользователиСписокСтрокаПоиска 174 @@ -1002,6 +1109,136 @@ ПользователиСписокКонтекстноеМеню 49 + + ПользователиСписокКонтекстноеМенюСоздать + 204 + true + true + + true + + + ПользователиСписокКонтекстноеМенюСоздатьРасширеннаяПодсказка + 205 + Label + true + true + + Left + + + Form.Item.ПользователиСписок.StandardCommand.Create + Normal + Auto + true + true + UserCmds + Auto + + + ПользователиСписокКонтекстноеМенюСкопировать + 206 + true + true + + true + + + ПользователиСписокКонтекстноеМенюСкопироватьРасширеннаяПодсказка + 207 + Label + true + true + + Left + + + Form.Item.ПользователиСписок.StandardCommand.Copy + Normal + Auto + true + true + UserCmds + Auto + + + ПользователиСписокКонтекстноеМенюИзменить + 208 + true + true + + true + + + ПользователиСписокКонтекстноеМенюИзменитьРасширеннаяПодсказка + 209 + Label + true + true + + Left + + + Form.Item.ПользователиСписок.StandardCommand.Change + Normal + Auto + true + true + UserCmds + Auto + + + ПользователиСписокКонтекстноеМенюУстановитьПароль + 200 + true + true + + true + + + ПользователиСписокКонтекстноеМенюУстановитьПарольРасширеннаяПодсказка + 201 + Label + true + true + + Left + + + Form.Command.УстановитьПароль + Normal + Auto + true + true + UserCmds + Auto + + + ПользователиСписокКонтекстноеМенюСтандартныеКоманды + 202 + true + true + + true + + + <key>ru</key> + <value>Пользователи список контекстное меню стандартные команды</value> + + + ПользователиСписокКонтекстноеМенюСтандартныеКомандыРасширеннаяПодсказка + 203 + Label + true + true + + Left + + + + Item.ПользователиСписок + + ПользователиСписокКонтекстноеМенюНазначитьГруппы 73 @@ -1054,7 +1291,6 @@ UserCmds Auto - true true true @@ -1947,7 +2183,6 @@ true true true - UseIfNecessary auto true @@ -1969,6 +2204,9 @@ ПользователиСписок.Ref + + ПользователиСписок.ВозможноСменитьПароль + ПользователиСписок.Недействителен @@ -1986,28 +2224,44 @@ КОГДА Пользователи.ПометкаУдаления ТОГДА 0 ИНАЧЕ 1 - КОНЕЦ КАК НомерКартинки + КОНЕЦ КАК НомерКартинки, + ВЫБОР + КОГДА Пользователи.Служебный + ТОГДА ЛОЖЬ + КОГДА Пользователи.Недействителен + ТОГДА ЛОЖЬ + КОГДА Пользователи.ИдентификаторПользователяИБ = &ИдентификаторТекущегоПользователяИБ + ТОГДА ИСТИНА + КОГДА &ВозможноСменитьТолькоСвойПароль + ТОГДА ЛОЖЬ + КОГДА Пользователи.ИдентификаторПользователяИБ = &ПустойУникальныйИдентификатор + ТОГДА ЛОЖЬ + ИНАЧЕ ИСТИНА + КОНЕЦ КАК ВозможноСменитьПароль ИЗ Справочник.Пользователи КАК Пользователи ГДЕ - (&ВыбиратьИерархически - И ИСТИНА В - (ВЫБРАТЬ - ИСТИНА - ИЗ - РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей - ГДЕ - СоставыГруппПользователей.Пользователь = Пользователи.Ссылка - И СоставыГруппПользователей.ГруппаПользователей = &ГруппаПользователей) - ИЛИ НЕ &ВыбиратьИерархически - И ИСТИНА В + ВЫБОР + КОГДА &ВсеПользователи + ТОГДА ИСТИНА + КОГДА &ВыбиратьИерархически + ТОГДА ИСТИНА В + (ВЫБРАТЬ + ИСТИНА + ИЗ + РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ГДЕ + СоставыГруппПользователей.Пользователь = Пользователи.Ссылка + И СоставыГруппПользователей.ГруппаПользователей = &ГруппаПользователей) + ИНАЧЕ ИСТИНА В (ВЫБРАТЬ ИСТИНА ИЗ Справочник.ГруппыПользователей.Состав КАК ГруппыПользователейСостав ГДЕ ГруппыПользователейСостав.Пользователь = Пользователи.Ссылка - И ГруппыПользователейСостав.Ссылка = &ГруппаПользователей)) + И ГруппыПользователейСостав.Ссылка = &ГруппаПользователей) + КОНЕЦ Catalog.Пользователи true true @@ -2245,7 +2499,7 @@ СоздатьГруппуПользователей - Auto + DontUse Auto @@ -2272,7 +2526,7 @@ TextPicture - Auto + DontUse Auto @@ -2294,7 +2548,7 @@ ЗавершитьИЗакрыть - Auto + DontUse Auto @@ -2316,7 +2570,7 @@ ВыбратьГруппу - Auto + DontUse Auto @@ -2328,7 +2582,7 @@ 6 ru - Выбрать пользователя команда + Выбрать пользователя true @@ -2338,7 +2592,7 @@ ВыбратьПользователяКоманда - Auto + DontUse Auto @@ -2360,7 +2614,7 @@ ОтменитьВыборПользователяИлиГруппы - Auto + DontUse Auto @@ -2382,7 +2636,7 @@ ОчиститьСписокВыбранныхПользователейИГрупп - Auto + DontUse Auto @@ -2407,7 +2661,7 @@ СведенияОПользователях - Auto + DontUse Auto @@ -2429,7 +2683,25 @@ ИзменитьВыделенные - Auto + DontUse + Auto + + + УстановитьПароль + + <key>ru</key> + <value>Установить пароль...</value> + + 10 + + true + + + + УстановитьПароль + + + DontUse Auto diff --git a/SSL/src/Catalogs/Пользователи/Forms/ФормаСписка/Module.bsl b/SSL/src/Catalogs/Пользователи/Forms/ФормаСписка/Module.bsl index e5d255004..d918fbe36 100644 --- a/SSL/src/Catalogs/Пользователи/Forms/ФормаСписка/Module.bsl +++ b/SSL/src/Catalogs/Пользователи/Forms/ФормаСписка/Module.bsl @@ -22,7 +22,7 @@ Если Параметры.Свойство("АвтоТест") Тогда // Возврат при получении формы для анализа. Возврат; КонецЕсли; - + Если Не ОбщегоНазначения.ПриСозданииНаСервере(ЭтотОбъект, Отказ, СтандартнаяОбработка) Тогда Возврат; КонецЕсли; @@ -35,6 +35,13 @@ Если Параметры.РежимВыбора Тогда СтандартныеПодсистемыСервер.УстановитьКлючНазначенияФормы(ЭтотОбъект, "ВыборПодбор"); РежимОткрытияОкна = РежимОткрытияОкнаФормы.БлокироватьОкноВладельца; + + ИначеЕсли Пользователи.ЭтоПолноправныйПользователь() Тогда + // Добавление отбора пользователей, подготовленных ответственным за список. + ОбщегоНазначенияКлиентСервер.УстановитьЭлементОтбораДинамическогоСписка( + ПользователиСписок, "Подготовлен", Истина, , + НСтр("ru = 'Подготовленные ответственным за список'"), Ложь, + РежимОтображенияЭлементаНастройкиКомпоновкиДанных.Обычный); КонецЕсли; // Скрытие пользователей с пустым идентификатором, если значение параметра Истина. @@ -47,8 +54,15 @@ КонецЕсли; // Скрытие служебных пользователей. - ОбщегоНазначенияКлиентСервер.УстановитьЭлементОтбораДинамическогоСписка( - ПользователиСписок, "Служебный", Ложь, , , Истина); + Если Пользователи.ЭтоПолноправныйПользователь() Тогда + ОбщегоНазначенияКлиентСервер.УстановитьЭлементОтбораДинамическогоСписка( + ПользователиСписок, "Служебный", Ложь, , , Истина, + РежимОтображенияЭлементаНастройкиКомпоновкиДанных.Обычный, + Строка(Новый УникальныйИдентификатор)); + Иначе + ОбщегоНазначенияКлиентСервер.УстановитьЭлементОтбораДинамическогоСписка( + ПользователиСписок, "Служебный", Ложь, , , Истина); + КонецЕсли; // Скрытие переданного пользователя из формы выбора пользователей. Если ТипЗнч(Параметры.СкрываемыеПользователи) = Тип("СписокЗначений") Тогда @@ -63,7 +77,7 @@ КонецЕсли; ОформитьИСкрытьНедействительныхПользователей(); - + НастроитьПараметрыСпискаПользователейДляКомандыУстановитьПароль(); НастроитьПорядокГруппыВсеПользователи(ГруппыПользователей); ХранимыеПараметры.Вставить("РасширенныйПодбор", Параметры.РасширенныйПодбор); @@ -75,12 +89,8 @@ Элементы.СоздатьПользователя.Видимость = Ложь; КонецЕсли; - Если Не Пользователи.РолиДоступны("ДобавлениеИзменениеПользователей") Тогда - Элементы.ПользователиСписокКонтекстноеМенюНазначитьГруппы.Видимость = Ложь; - Элементы.НазначитьГруппы.Видимость = Ложь; - КонецЕсли; - - Если НЕ Пользователи.ЭтоПолноправныйПользователь(, ОбщегоНазначенияПовтИсп.РежимРаботыПрограммы().Локальный) Тогда + РазделениеВключено = ОбщегоНазначенияПовтИсп.РазделениеВключено(); + Если НЕ Пользователи.ЭтоПолноправныйПользователь(, Не РазделениеВключено) Тогда Если Элементы.Найти("ПользователиИБ") <> Неопределено Тогда Элементы.ПользователиИБ.Видимость = Ложь; КонецЕсли; @@ -93,12 +103,6 @@ Элементы.ПользователиИБ.Видимость = Ложь; КонецЕсли; Элементы.СведенияОПользователях.Видимость = Ложь; - - // Отбор не помеченных на удаление. - ОбщегоНазначенияКлиентСервер.УстановитьЭлементОтбораДинамическогоСписка( - ПользователиСписок, "ПометкаУдаления", Ложь, , , Истина, - РежимОтображенияЭлементаНастройкиКомпоновкиДанных.Обычный); - Элементы.ПользователиСписок.РежимВыбора = Истина; Элементы.ГруппыПользователей.РежимВыбора = ХранимыеПараметры.ВыборГруппПользователей; // Отключение перетаскивания пользователя в формах выбора и подбора пользователей. @@ -136,11 +140,28 @@ НастроитьФормуПоИспользованиюГруппПользователей(); ХранимыеПараметры.Удалить("ТекущаяСтрока"); - Если Не ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ГрупповоеИзменениеОбъектов") Тогда + Если Не ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ГрупповоеИзменениеОбъектов") + Или ОбщегоНазначенияПовтИсп.ЭтоАвтономноеРабочееМесто() Тогда + Элементы.ФормаИзменитьВыделенные.Видимость = Ложь; Элементы.ПользователиСписокКонтекстноеМенюИзменитьВыделенные.Видимость = Ложь; КонецЕсли; + ОписаниеОбъекта = Новый Структура; + ОписаниеОбъекта.Вставить("Ссылка", Справочники.Пользователи.ПустаяСсылка()); + ОписаниеОбъекта.Вставить("ИдентификаторПользователяИБ", Новый УникальныйИдентификатор("00000000-0000-0000-0000-000000000000")); + УровеньДоступа = ПользователиСлужебный.УровеньДоступаКСвойствамПользователя(ОписаниеОбъекта); + + Если Не УровеньДоступа.УправлениеСписком Тогда + Элементы.ФормаУстановитьПароль.Видимость = Ложь; + Элементы.ПользователиСписокКонтекстноеМенюУстановитьПароль.Видимость = Ложь; + КонецЕсли; + + Если ОбщегоНазначенияПовтИсп.ЭтоАвтономноеРабочееМесто() Тогда + ТолькоПросмотр = Истина; + Элементы.ГруппыПользователей.ТолькоПросмотр = Истина; + КонецЕсли; + КонецПроцедуры &НаКлиенте @@ -166,8 +187,6 @@ ПодключитьОбработчикОжидания("ПриИзмененииИспользованияГруппПользователей", 0.1, Истина); КонецЕсли; - ПодключитьОбработчикОжидания("ПриИзмененииИспользованияГруппПользователей", 0.1, Истина); - ИначеЕсли ВРег(ИмяСобытия) = ВРег("РазмещениеПользователейВГруппах") Тогда Элементы.ПользователиСписок.Обновить(); @@ -258,7 +277,7 @@ Если ВыбиратьИерархически Тогда ПоказатьПредупреждение(, НСтр("ru = 'Для перетаскивания пользователя в группы необходимо отключить - |флажок ""Показывать пользователей дочерних групп"".'")); + |флажок ""Показывать пользователей нижестоящих групп"".'")); Возврат; КонецЕсли; @@ -283,38 +302,50 @@ ?(Перемещение, НСтр("ru = 'Переместить'"), НСтр("ru = 'Скопировать'"))); Если ГруппаПомеченаНаУдаление Тогда - ШаблонДействия = ?(Перемещение, НСтр("ru = 'Группа ""%1"" помечена на удаление. %2'"), + ШаблонДействия = ?(Перемещение, + НСтр("ru = 'Группа ""%1"" помечена на удаление. %2'"), НСтр("ru = 'Группа ""%1"" помечена на удаление. %2'")); - ДействиеСПользователем = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - ШаблонДействия, Строка(Строка), ДействиеСПользователем); + ДействиеСПользователем = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонДействия, Строка(Строка), ДействиеСПользователем); КонецЕсли; Если КоличествоПользователей = 1 Тогда - Если ДействиеИсключитьПользователя Тогда - ШаблонВопроса = НСтр("ru = 'Исключить пользователя ""%2"" из группы ""%4""?'"); + ТекстВопроса = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Исключить пользователя ""%1"" из группы ""%2""?'"), + Строка(ПараметрыПеретаскивания.Значение[0]), + Строка(Элементы.ГруппыПользователей.ТекущаяСтрока)); + ИначеЕсли Не ГруппаПомеченаНаУдаление Тогда - ШаблонВопроса = НСтр("ru = '%1 пользователя ""%2"" в группу ""%3""?'"); + ТекстВопроса = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = '%1 пользователя ""%2"" в группу ""%3""?'"), + ДействиеСПользователем, + Строка(ПараметрыПеретаскивания.Значение[0]), + Строка(Строка)); Иначе - ШаблонВопроса = НСтр("ru = '%1 пользователя ""%2"" в эту группу?'"); + ТекстВопроса = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = '%1 пользователя ""%2"" в эту группу?'"), + ДействиеСПользователем, + Строка(ПараметрыПеретаскивания.Значение[0])); КонецЕсли; - ТекстВопроса = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - ШаблонВопроса, ДействиеСПользователем, Строка(ПараметрыПеретаскивания.Значение[0]), - Строка(Строка), Строка(Элементы.ГруппыПользователей.ТекущаяСтрока)); - Иначе - Если ДействиеИсключитьПользователя Тогда - ШаблонВопроса = НСтр("ru = 'Исключить пользователей (%2) из группы ""%4""?'"); + ТекстВопроса = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Исключить пользователей (%1) из группы ""%2""?'"), + КоличествоПользователей, + Строка(Элементы.ГруппыПользователей.ТекущаяСтрока)); + ИначеЕсли Не ГруппаПомеченаНаУдаление Тогда - ШаблонВопроса = НСтр("ru = '%1 пользователей (%2) в группу ""%3""?'"); + ТекстВопроса = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = '%1 пользователей (%2) в группу ""%3""?'"), + ДействиеСПользователем, + КоличествоПользователей, + Строка(Строка)); Иначе - ШаблонВопроса = НСтр("ru = '%1 пользователей (%2) в эту группу?'"); + ТекстВопроса = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = '%1 пользователей (%2) в эту группу?'"), + ДействиеСПользователем, + КоличествоПользователей); КонецЕсли; - ТекстВопроса = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - ШаблонВопроса, ДействиеСПользователем, КоличествоПользователей, - Строка(Строка), Строка(Элементы.ГруппыПользователей.ТекущаяСтрока)); - КонецЕсли; ДополнительныеПараметры = Новый Структура; @@ -330,7 +361,11 @@ &НаКлиенте Процедура ГруппыПользователейПроверкаПеретаскивания(Элемент, ПараметрыПеретаскивания, СтандартнаяОбработка, Строка, Поле) - СтандартнаяОбработка = Ложь; + Если Элементы.ГруппыПользователей.ТолькоПросмотр Тогда + ПараметрыПеретаскивания.ДопустимыеДействия = ДопустимыеДействияПеретаскивания.НеОбрабатывать; + Иначе + СтандартнаяОбработка = Ложь; + КонецЕсли; КонецПроцедуры @@ -338,6 +373,20 @@ #Область ОбработчикиСобытийЭлементовТаблицыФормыПользователиСписок +&НаКлиенте +Процедура ПользователиСписокПриАктивизацииСтроки(Элемент) + + Если Элементы.ПользователиСписок.ТекущиеДанные = Неопределено Тогда + ВозможноСменитьПароль = Ложь; + Иначе + ВозможноСменитьПароль = Элементы.ПользователиСписок.ТекущиеДанные.ВозможноСменитьПароль; + КонецЕсли; + + Элементы.ФормаУстановитьПароль.Доступность = ВозможноСменитьПароль; + Элементы.ПользователиСписокКонтекстноеМенюУстановитьПароль.Доступность = ВозможноСменитьПароль; + +КонецПроцедуры + &НаКлиенте Процедура ПользователиСписокВыборЗначения(Элемент, Значение, СтандартнаяОбработка) @@ -415,6 +464,16 @@ КонецПроцедуры +&НаКлиенте +Процедура УстановитьПароль(Команда) + + ТекущиеДанные = Элементы.ПользователиСписок.ТекущиеДанные; + Если ТекущиеДанные <> Неопределено Тогда + ПользователиСлужебныйКлиент.ОткрытьФормуСменыПароля(ТекущиеДанные.Ссылка); + КонецЕсли; + +КонецПроцедуры + &НаКлиенте Процедура ЗавершитьИЗакрыть(Команда) @@ -500,7 +559,7 @@ ЭлементУсловногоОформления = УсловноеОформление.Элементы.Добавить(); ЭлементЦветаОформления = ЭлементУсловногоОформления.Оформление.Элементы.Найти("TextColor"); - ЭлементЦветаОформления.Значение = Метаданные.ЭлементыСтиля.НедоступныеДанныеЦвет.Значение; + ЭлементЦветаОформления.Значение = Метаданные.ЭлементыСтиля.ТекстЗапрещеннойЯчейкиЦвет.Значение; ЭлементЦветаОформления.Использование = Истина; ЭлементОтбораДанных = ЭлементУсловногоОформления.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); @@ -544,6 +603,20 @@ КонецПроцедуры +&НаСервере +Процедура НастроитьПараметрыСпискаПользователейДляКомандыУстановитьПароль() + + ОбновитьЗначениеПараметраКомпоновкиДанных(ПользователиСписок, "ИдентификаторТекущегоПользователяИБ", + ПользователиИнформационнойБазы.ТекущийПользователь().УникальныйИдентификатор); + + ОбновитьЗначениеПараметраКомпоновкиДанных(ПользователиСписок, "ПустойУникальныйИдентификатор", + Новый УникальныйИдентификатор("00000000-0000-0000-0000-000000000000")); + + ОбновитьЗначениеПараметраКомпоновкиДанных(ПользователиСписок, "ВозможноСменитьТолькоСвойПароль", + Не Пользователи.ЭтоПолноправныйПользователь()); + +КонецПроцедуры + &НаКлиенте Процедура ПроверкаИзмененияТекущегоЭлементаФормы() @@ -681,13 +754,11 @@ Элементы.СписокВыбранныхПользователейИГрупп.Заголовок = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( ЗаголовокВыбранныеПользователиИГруппы, КоличествоПользователей); Иначе - Если ХранимыеПараметры.ИспользоватьГруппы Тогда Элементы.СписокВыбранныхПользователейИГрупп.Заголовок = НСтр("ru = 'Выбранные пользователи и группы'"); Иначе Элементы.СписокВыбранныхПользователейИГрупп.Заголовок = НСтр("ru = 'Выбранные пользователи'"); КонецЕсли; - КонецЕсли; КонецПроцедуры @@ -721,12 +792,16 @@ &НаКлиенте Процедура ПриИзмененииИспользованияГруппПользователей() - НастроитьФормуПоИспользованиюГруппПользователей(); + НастроитьФормуПоИспользованиюГруппПользователей(Истина); КонецПроцедуры &НаСервере -Процедура НастроитьФормуПоИспользованиюГруппПользователей() +Процедура НастроитьФормуПоИспользованиюГруппПользователей(ИзменилосьИспользованиеГрупп = Ложь) + + Если ИзменилосьИспользованиеГрупп Тогда + ХранимыеПараметры.Вставить("ИспользоватьГруппы", ПолучитьФункциональнуюОпцию("ИспользоватьГруппыПользователей")); + КонецЕсли; Если ХранимыеПараметры.Свойство("ТекущаяСтрока") Тогда @@ -752,15 +827,21 @@ Элементы.ВыбиратьИерархически.Видимость = ХранимыеПараметры.ИспользоватьГруппы; - Если ХранимыеПараметры.РасширенныйПодбор Тогда + Если Не Пользователи.РолиДоступны("ДобавлениеИзменениеПользователей") + Или ХранимыеПараметры.РасширенныйПодбор + Или ОбщегоНазначенияПовтИсп.ЭтоАвтономноеРабочееМесто() Тогда + Элементы.НазначитьГруппы.Видимость = Ложь; + Элементы.ПользователиСписокКонтекстноеМенюНазначитьГруппы.Видимость = Ложь; Иначе - Элементы.НазначитьГруппы.Видимость = ХранимыеПараметры.ИспользоватьГруппы; + Элементы.НазначитьГруппы.Видимость = ХранимыеПараметры.ИспользоватьГруппы; + Элементы.ПользователиСписокКонтекстноеМенюНазначитьГруппы.Видимость = ХранимыеПараметры.ИспользоватьГруппы; КонецЕсли; Элементы.СоздатьГруппуПользователей.Видимость = ПравоДоступа("Добавление", Метаданные.Справочники.ГруппыПользователей) - И ХранимыеПараметры.ИспользоватьГруппы; + И ХранимыеПараметры.ИспользоватьГруппы + И Не ОбщегоНазначенияПовтИсп.ЭтоАвтономноеРабочееМесто(); ВыборГруппПользователей = ХранимыеПараметры.ВыборГруппПользователей И ХранимыеПараметры.ИспользоватьГруппы @@ -815,6 +896,11 @@ ОбновитьСодержимоеФормыПриИзмененииГруппы(ЭтотОбъект); + // Принудительное обновление видимости после изменения функциональной + // опции без использования команды ОбновитьИнтерфейс. + Элементы.ГруппыПользователей.Видимость = Ложь; + Элементы.ГруппыПользователей.Видимость = Истина; + КонецПроцедуры &НаКлиенте @@ -883,26 +969,29 @@ Процедура ОбновитьСодержимоеФормыПриИзмененииГруппы(Форма) Элементы = Форма.Элементы; + ГруппаВсеПользователи = ПредопределенноеЗначение( + "Справочник.ГруппыПользователей.ВсеПользователи"); Если НЕ Форма.ХранимыеПараметры.ИспользоватьГруппы - ИЛИ Элементы.ГруппыПользователей.ТекущаяСтрока = ПредопределенноеЗначение( - "Справочник.ГруппыПользователей.ВсеПользователи") Тогда + ИЛИ Элементы.ГруппыПользователей.ТекущаяСтрока = ГруппаВсеПользователи Тогда - ОбновитьЗначениеПараметраКомпоновкиДанных( - Форма.ПользователиСписок, "ВыбиратьИерархически", Истина); + ОбновитьЗначениеПараметраКомпоновкиДанных(Форма.ПользователиСписок, + "ВсеПользователи", Истина); - ОбновитьЗначениеПараметраКомпоновкиДанных( - Форма.ПользователиСписок, "ГруппаПользователей", ПредопределенноеЗначение( - "Справочник.ГруппыПользователей.ВсеПользователи")); + ОбновитьЗначениеПараметраКомпоновкиДанных(Форма.ПользователиСписок, + "ВыбиратьИерархически", Ложь); + + ОбновитьЗначениеПараметраКомпоновкиДанных(Форма.ПользователиСписок, + "ГруппаПользователей", ГруппаВсеПользователи); Иначе + ОбновитьЗначениеПараметраКомпоновкиДанных(Форма.ПользователиСписок, + "ВсеПользователи", Ложь); - ОбновитьЗначениеПараметраКомпоновкиДанных( - Форма.ПользователиСписок, "ВыбиратьИерархически", Форма.ВыбиратьИерархически); + ОбновитьЗначениеПараметраКомпоновкиДанных(Форма.ПользователиСписок, + "ВыбиратьИерархически", Форма.ВыбиратьИерархически); - ОбновитьЗначениеПараметраКомпоновкиДанных( - Форма.ПользователиСписок, - "ГруппаПользователей", - Элементы.ГруппыПользователей.ТекущаяСтрока); + ОбновитьЗначениеПараметраКомпоновкиДанных(Форма.ПользователиСписок, + "ГруппаПользователей", Элементы.ГруппыПользователей.ТекущаяСтрока); КонецЕсли; КонецПроцедуры diff --git a/SSL/src/Catalogs/Пользователи/Forms/ФормаЭлемента/Form.form b/SSL/src/Catalogs/Пользователи/Forms/ФормаЭлемента/Form.form index c2edc3b2a..7fb40fe39 100644 --- a/SSL/src/Catalogs/Пользователи/Forms/ФормаЭлемента/Form.form +++ b/SSL/src/Catalogs/Пользователи/Forms/ФормаЭлемента/Form.form @@ -1,5 +1,115 @@ + + ГруппаСлужебныйПользователь + 338 + + СлужебныйПользовательКартинка + 340 + + <key>ru</key> + <value>Служебный пользователь картинка</value> + + true + true + + true + + + СлужебныйПользовательКартинкаРасширеннаяПодсказка + 342 + Label + true + true + + Left + + + + СлужебныйПользовательКартинкаКонтекстноеМеню + 341 + true + + 2 + true + 1 + true + + + CommonPicture.Предупреждение + + + + + СлужебныйПользовательНадпись + 335 + + <key>ru</key> + <value>Это служебный пользователь для автоматизации некоторых действий в программе.</value> + + true + true + + true + + + ru + Служебный пользователь создается и изменяется автоматически, +скрывается при выборе и подборе, а также в списке пользователей. + + + СлужебныйПользовательНадписьРасширеннаяПодсказка + 337 + Label + true + true + + Left + + + + СлужебныйПользовательНадписьКонтекстноеМеню + 336 + true + + Label + true + true + + Style.ПоясняющийТекст + + + Left + + + true + true + + true + + + <key>ru</key> + <value>Группа служебный пользователь</value> + + + ГруппаСлужебныйПользовательРасширеннаяПодсказка + 339 + Label + true + true + + Left + + + UsualGroup + + Auto + true + true + Auto + Auto + + СвойстваОбработкаНесоответствия 164 @@ -186,6 +296,7 @@ ru Свойства пояснение и команды + false СвойстваПояснениеИКомандыРасширеннаяПодсказка 210 @@ -356,24 +467,138 @@ ГруппаШапка 277 + + ГруппаНаименование + 329 + + Наименование + 49 + true + true + + true + + + Объект.Description + + + OnChange + НаименованиеПриИзменении + + + НаименованиеExtendedTooltip + 216 + Label + true + true + + Left + + + + НаименованиеКонтекстноеМеню + 50 + true + + InputField + Enter + true + Left + true + + 22 + true + true + true + true + true + + Style.BorderColor + + Normal + + + + Недействителен + 194 + true + true + + true + + + Объект.Недействителен + + Right + Button + + OnChange + НедействителенПриИзменении + + + НедействителенExtendedTooltip + 217 + Label + true + true + + Left + + + + НедействителенКонтекстноеМеню + 195 + true + + CheckBoxField + Enter + true + Left + true + + + true + true + + true + + + <key>ru</key> + <value>Группа наименование</value> + + + ГруппаНаименованиеРасширеннаяПодсказка + 330 + Label + true + true + + Left + + + UsualGroup + + Auto + true + true + Auto + Auto + + - Наименование - 49 + ФизическоеЛицо + 296 true true true - Объект.Description + Объект.ФизическоеЛицо - - OnChange - НаименованиеПриИзменении - - НаименованиеExtendedTooltip - 216 + ФизическоеЛицоРасширеннаяПодсказка + 298 Label true true @@ -382,8 +607,8 @@ - НаименованиеКонтекстноеМеню - 50 + ФизическоеЛицоКонтекстноеМеню + 297 true InputField @@ -392,38 +617,29 @@ Left true - 22 true true + true true true true - - Style.BorderColor - Normal - Недействителен - 194 + Подразделение + 299 true true true - Объект.Недействителен + Объект.Подразделение - Right - Button - - OnChange - НедействителенПриИзменении - - НедействителенExtendedTooltip - 217 + ПодразделениеРасширеннаяПодсказка + 301 Label true true @@ -432,16 +648,24 @@ - НедействителенКонтекстноеМеню - 195 + ПодразделениеКонтекстноеМеню + 300 true - CheckBoxField + InputField Enter true Left true - + + true + true + true + true + true + true + Normal + true true @@ -464,6 +688,7 @@ UsualGroup + Vertical Auto true true @@ -488,7 +713,8 @@ Right ru - Разрешить вход пользователя в программу указанными способами аутентификации. + Разрешить вход пользователя в программу +указанными способами аутентификации. OnChange @@ -516,6 +742,65 @@ true + + ГруппаИзменитьОграничение + 331 + + ИзменитьОграничениеНаВходВПрограмму + 333 + true + true + + true + + + ИзменитьОграничениеНаВходВПрограммуРасширеннаяПодсказка + 334 + Label + true + true + + Left + + + Hyperlink + Form.Command.ИзменитьОграничениеНаВходВПрограмму + Normal + Auto + true + true + UserCmds + Auto + + true + true + + true + + + <key>ru</key> + <value>Группа изменить ограничение</value> + + + ГруппаИзменитьОграничениеРасширеннаяПодсказка + 332 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + true + true + Auto + Auto + + РекомендуетсяПроверитьНастройкиДляВхода 267 @@ -715,10 +1000,10 @@ Left true - 26 + 28 true true - true + false true true true @@ -856,26 +1141,87 @@ - СвойстваПараметрыАутентификации1СПредприятия + ПараметрыАутентификации1СПредприятия 201 - - Пароль - 21 + + ГруппаПароль + 319 + + НадписьНаличиеПароля + 321 + + <key>ru</key> + <value>Пустой пароль</value> + + true + true + + true + + + НадписьНаличиеПароляРасширеннаяПодсказка + 323 + Label + true + true + + Left + + + + НадписьНаличиеПароляКонтекстноеМеню + 322 + true + + Label + true + true + + Style.ПоясняющийТекст + + + Left + + + + СменитьПароль + 324 + true + true + + true + + + СменитьПарольРасширеннаяПодсказка + 325 + Label + true + true + + Left + + + UsualButton + Form.Command.СменитьПароль + Normal + Auto + true + true + UserCmds + Auto + true true true - - Пароль - - - OnChange - ПарольПриИзменении - + + <key>ru</key> + <value>Группа пароль</value> + - ПарольExtendedTooltip - 226 + ГруппаПарольРасширеннаяПодсказка + 320 Label true true @@ -883,50 +1229,34 @@ Left - - ПарольКонтекстноеМеню - 22 - true - - InputField - Enter - true - Left - true - Left - - 14 - true - true - false - true - true - true - true - - Style.BorderColor - - Normal + UsualGroup + + Auto + true + true + Auto + Auto - ПодтверждениеПароля - 23 + ПотребоватьСменуПароляПриВходе + 316 true true true - ПодтверждениеПароля + ПотребоватьСменуПароляПриВходе + Right OnChange - ПарольПриИзменении + ПотребоватьСменуПароляПриВходеПриИзменении - ПодтверждениеПароляExtendedTooltip - 227 + ПотребоватьСменуПароляПриВходеРасширеннаяПодсказка + 318 Label true true @@ -935,30 +1265,60 @@ - ПодтверждениеПароляКонтекстноеМеню - 24 + ПотребоватьСменуПароляПриВходеКонтекстноеМеню + 317 true - InputField + CheckBoxField Enter true Left true - Left - - 14 + + + + ПользовательИБЗапрещеноИзменятьПароль + 51 + true + true + + true + + + ПользовательИБЗапрещеноИзменятьПароль + + Right + + ru + Запрещает изменение своего пароля +неполноправному пользователю, +а также при входе. + + + OnChange + ПользовательИБЗапрещеноИзменятьПарольПриИзменении + + + ПользовательИБЗапрещеноИзменятьПарольРасширеннаяПодсказка + 229 + Label true true - false - true - true - true - true - - Style.BorderColor - - Normal - + + Left + + + + ПользовательИБЗапрещеноИзменятьПарольКонтекстноеМеню + 52 + true + + CheckBoxField + Enter + true + Left + true + ПользовательИБПоказыватьВСпискеВыбора @@ -999,44 +1359,6 @@ Left - - ПользовательИБЗапрещеноИзменятьПароль - 51 - true - true - - true - - - ПользовательИБЗапрещеноИзменятьПароль - - Right - - OnChange - ПользовательИБЗапрещеноИзменятьПарольПриИзменении - - - ПользовательИБЗапрещеноИзменятьПарольРасширеннаяПодсказка - 229 - Label - true - true - - Left - - - - ПользовательИБЗапрещеноИзменятьПарольКонтекстноеМеню - 52 - true - - CheckBoxField - Enter - true - Left - true - - true true @@ -1044,11 +1366,11 @@ <key>ru</key> - <value>Аутентификация 1С:Предприятия</value> + <value>Параметры аутентификации 1С:Предприятия</value> true - СвойстваПараметрыАутентификации1СПредприятияExtendedTooltip + ПараметрыАутентификации1СПредприятияРасширеннаяПодсказка 225 Label true @@ -2162,6 +2484,10 @@ Pages + + OnCurrentPageChange + СтраницыПриСменеСтраницы + TabsOnTop Auto @@ -2201,7 +2527,6 @@ true true true - UseIfNecessary auto true @@ -2237,44 +2562,6 @@ true - - Пароль - - <key>ru</key> - <value>Пароль</value> - - 3 - - String - - - - true - - - true - - true - - - ПодтверждениеПароля - - <key>ru</key> - <value>Подтверждение пароля</value> - - 4 - - String - - - - true - - - true - - true - ПользовательИБПароль @@ -2889,6 +3176,101 @@ <common>true</common> </edit> </attributes> + <attributes> + <name>ПотребоватьСменуПароляПриВходе</name> + <title> + <key>ru</key> + <value>Потребовать смену пароля при входе</value> + + 35 + + Boolean + + + true + + + true + + true + + + СрокДействия + + <key>ru</key> + <value>Срок действия</value> + + 36 + + Date + + Date + + + + true + + + true + + true + + + СрокДействияНеОграничен + + <key>ru</key> + <value>Срок действия не ограничен</value> + + 37 + + Boolean + + + true + + + true + + + + ПросрочкаРаботыВПрограммеДоЗапрещенияВхода + + <key>ru</key> + <value>Просрочка работы в программе до запрещения входа</value> + + 38 + + Number + + 3 + true + + + + true + + + true + + + + ПользовательИБИмяЗначениеПрямогоИзменения + + <key>ru</key> + <value>Имя (для входа) - значение прямого изменения</value> + + 39 + + String + + + + true + + + true + + ПоказатьТолькоВыбранныеРоли @@ -2912,7 +3294,7 @@ </handler> </action> <representation>TextPicture</representation> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <formCommands> @@ -2938,7 +3320,7 @@ </handler> </action> <modifiesStoredData>true</modifiesStoredData> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <formCommands> @@ -2964,7 +3346,7 @@ </handler> </action> <modifiesStoredData>true</modifiesStoredData> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <formCommands> @@ -2991,7 +3373,7 @@ </action> <representation>TextPicture</representation> <modifiesStoredData>true</modifiesStoredData> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <formCommands> @@ -3017,7 +3399,44 @@ </handler> </action> <representation>TextPicture</representation> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> + <selectedRowsUse>Auto</selectedRowsUse> + </formCommands> + <formCommands> + <name>СменитьПароль</name> + <title> + <key>ru</key> + <value>Сменить пароль...</value> + + 6 + + true + + + + СменитьПароль + + + DontUse + Auto + + + ИзменитьОграничениеНаВходВПрограмму + + <key>ru</key> + <value>Изменить ограничение</value> + + 7 + + true + + + + ИзменитьОграничениеНаВходВПрограмму + + + true + DontUse Auto @@ -3062,5 +3481,9 @@ BeforeWriteAtServer ПередЗаписьюНаСервере + + OnWriteAtServer + ПриЗаписиНаСервере + diff --git a/SSL/src/Catalogs/Пользователи/Forms/ФормаЭлемента/Help/ru.html b/SSL/src/Catalogs/Пользователи/Forms/ФормаЭлемента/Help/ru.html index b9cbeb148..aafcd750d 100644 --- a/SSL/src/Catalogs/Пользователи/Forms/ФормаЭлемента/Help/ru.html +++ b/SSL/src/Catalogs/Пользователи/Forms/ФормаЭлемента/Help/ru.html @@ -2,10 +2,18 @@

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

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

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

          -

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

          +

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

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

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

          -

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

          +

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

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

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

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

          • быть малопонятным выражением.
          • состоять не менее чем из восьми символов. @@ -23,13 +31,15 @@
          • Флажок Недействителен по умолчанию снят для всех пользователей. Но если пользователь по каким-либо причинам более не работает с программой (например, уволен), и в то же время его нельзя удалить из-за наличия ссылок на него из других объектов программы, то рекомендуется установить флажок Недействителен. Такого пользователя нельзя выбрать, например, как исполнителя задачи или ответственного за документ, и он не отображается в списке пользователей. Если пользователя нужно восстановить в программе (например, его снова взяли на работу), то можно снять флажок и снова использовать эти данные.
          • Имя (для входа) - короткое имя, используется для входа в программу. Может отличаться от полного имени (например, "Иванов", а полное имя - "Иванов Иван Иванович").
          • Аутентификация 1С:Предприятия - по умолчанию флажок включен и активно поле для ввода пароля. -
          • Пароль - введите пароль для входа в программу. В целях безопасности данных всегда заполняйте это поле.  -
          • Подтверждение пароля - продублируйте пароль для контроля правильности ввода. +
            • Состояние аутентификации 1С:Предприятия выводится под флажком.
          • Нажмите кнопку Установить пароль, - введите пароль для входа в программу. В целях безопасности данных всегда заполняйте это поле.  +
            • Если данные пользователя еще не были записаны, выводится сообщение. Нажмите кнопку Записать. +
            • После установки пароля состояние аутентификации меняется на Пароль установлен.
          • Потребовать смену пароля при входе - включите флажок, в этом случае пользователь будет обязан самостоятельно ввести свой пароль, который больше никто не будет знать. Для удобства администрирования и обеспечения безопасности у всех пользователей добавлен этот реквизит, который нужен, чтобы пользователь сменил пароль, заданный администратором. на свой.
          • Показывать в списке выбора - для того чтобы включить пользователя в список выбора, который выводится при начале работы с программой, включите флажок. Если в программе используются внешние пользователи, то этот флажок не рекомендуется устанавливать. Если флажок не установлен, то при входе в программу имя такого пользователя будет скрыто из списка выбора. -
          • Пользователю запрещено изменять пароль - при необходимости запретите пользователю менять свой пароль. +
          • Пользователю запрещено изменять пароль - Если пароли в программе должен будет вводить только администратор, при необходимости включите флажок и запретите пользователю менять свой пароль. В этом случае при открытии учетной записи пользователем кнопка Установить пароль (Сменить пароль) станет недоступной.
          • Аутентификация по протоколу OpenID - включите флажок, чтобы разрешить пользователю использовать единую учетную запись по протоколу OpenID. Данная функция используется для работы в веб-клиенте 1С:Предприятия. Для корректной работы программы в этом случае должен быть также включен флажок Аутентификация 1С: Предприятия.
          • Аутентификация операционной системы - для того чтобы упростить вход в программу, включите этот флажок. -
            • В поле Пользователь с помощью кнопки  выберите, под каким именем данный пользователь работает в операционной системе. Под этим именем он будет входить в программу. В этом случае можно отключить флажок Аутентификация 1С: Предприятия.
          • Режим запуска - заполнено программой по умолчанию (Авто). Рекомендуется выбирать этот режим.
        • Адреса, телефоны +
          • В поле Пользователь с помощью кнопки  выберите, под каким именем данный пользователь работает в операционной системе. Под этим именем он будет входить в программу. В этом случае можно отключить флажок Аутентификация 1С: Предприятия.
        • Если ни один флажок Аутентификация не включен, то автоматически выключается и флажок Вход в программу разрешен. +
        • Режим запуска - заполнено программой по умолчанию (Авто). Рекомендуется выбирать этот режим.
      • Адреса, телефоны
        • На вкладке введите контактную информацию пользователя, предусмотренную в программе (например, телефон и адрес электронной почты).
      • Комментарий
        • На вкладке напишите дополнительную информацию о пользователе.

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

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

      @@ -42,9 +52,25 @@
    • С помощью кнопки Только выбранные роли можно ограничить видимость ролей.
    • Для удобства назначения можно упорядочить роли как в алфавитном порядке, так и По подсистемам.

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

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

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

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

    +

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

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

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

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

    Предупреждения программы

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

    См. также:

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

    См. также:

    \ No newline at end of file diff --git a/SSL/src/Catalogs/Пользователи/Forms/ФормаЭлемента/Module.bsl b/SSL/src/Catalogs/Пользователи/Forms/ФормаЭлемента/Module.bsl index 5663aeb12..0215b45a5 100644 --- a/SSL/src/Catalogs/Пользователи/Forms/ФормаЭлемента/Module.bsl +++ b/SSL/src/Catalogs/Пользователи/Forms/ФормаЭлемента/Module.bsl @@ -12,8 +12,11 @@ Если ОбщегоНазначенияПовтИсп.РазделениеВключено() Тогда - ДоступноИзменениеПользователей = Неопределено; - ПользователиСлужебный.ПриОпределенииДоступностиИзмененияПользователей(ДоступноИзменениеПользователей); + ДоступноИзменениеПользователей = Истина; + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаВМоделиСервиса.ПользователиВМоделиСервиса") Тогда + МодульПользователиСлужебныйВМоделиСервиса = ОбщегоНазначения.ОбщийМодуль("ПользователиСлужебныйВМоделиСервиса"); + ДоступноИзменениеПользователей = МодульПользователиСлужебныйВМоделиСервиса.ДоступноИзменениеПользователей(); + КонецЕсли; Если НЕ ДоступноИзменениеПользователей Тогда Если Объект.Ссылка.Пустая() Тогда @@ -24,9 +27,9 @@ ТолькоПросмотр = Истина; КонецЕсли; - Элементы.ПользовательИБПоказыватьВСпискеВыбора.Видимость = Ложь; Элементы.ПользовательИБАутентификацияOpenID.Видимость = Ложь; Элементы.ПользовательИБАутентификацияСтандартная.Видимость = Ложь; + Элементы.ПотребоватьСменуПароляПриВходе.Видимость = Ложь; Элементы.ПользовательИБЗапрещеноИзменятьПароль.Видимость = Ложь; Элементы.СвойстваАутентификацииОС.Видимость = Ложь; Элементы.ПользовательИБРежимЗапуска.Видимость = Ложь; @@ -72,22 +75,13 @@ ЗначениеКопирования = Параметры.ЗначениеКопирования; Объект.Наименование = ""; - Если Пользователи.ЭтоПолноправныйПользователь(ЗначениеКопирования, Истина, Ложь) Тогда - РазрешеноКопированиеПользователяИБ = УровеньДоступа.АдминистраторСистемы; - ИначеЕсли Пользователи.ЭтоПолноправныйПользователь(ЗначениеКопирования, Ложь, Ложь) Тогда - РазрешеноКопированиеПользователяИБ = УровеньДоступа.ПолныеПрава; - Иначе - РазрешеноКопированиеПользователяИБ = Истина; - КонецЕсли; - - Если РазрешеноКопированиеПользователяИБ Тогда - ПрочитатьПользователяИБ( - ЗначениеЗаполнено(ЗначениеКопирования.ИдентификаторПользователяИБ)); + Если Не ПользователиСлужебный.УровеньДоступаПользователяВыше(ЗначениеКопирования, УровеньДоступа) Тогда + ПрочитатьПользователяИБ(ЗначениеЗаполнено(ЗначениеКопирования.ИдентификаторПользователяИБ)); Иначе ПрочитатьПользователяИБ(); КонецЕсли; - Если Не УровеньДоступа.ПолныеПрава Тогда + Если Не УровеньДоступа.ИзменениеРазрешенияНаВход Тогда ВходВПрограммуРазрешен = Ложь; ВходВПрограммуРазрешенЗначениеПрямогоИзменения = Ложь; КонецЕсли; @@ -105,7 +99,7 @@ ПользовательИБАутентификацияOpenID = Истина; КонецЕсли; - Если УровеньДоступа.ПолныеПрава Тогда + Если УровеньДоступа.ИзменениеРазрешенияНаВход Тогда ВходВПрограммуРазрешен = Истина; ВходВПрограммуРазрешенЗначениеПрямогоИзменения = Истина; КонецЕсли; @@ -130,13 +124,33 @@ ОбщаяНастройкаФормы(Истина); + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.КонтактнаяИнформация") + И ДействияСПользователемСервиса <> Неопределено Тогда + МодульУправлениеКонтактнойИнформацией = ОбщегоНазначения.ОбщийМодуль("УправлениеКонтактнойИнформацией"); + МодульУправлениеКонтактнойИнформацией.УстановитьДоступностьЭлементовКонтактнойИнформации(ЭтотОбъект, ОпределитьДоступностьЭлементовКонтактнойИнформации()); + КонецЕсли; + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.Свойства") Тогда ДополнительныеПараметры = Новый Структура; ДополнительныеПараметры.Вставить("ИмяЭлементаДляРазмещения", "СтраницаДополнительныеРеквизиты"); + ДополнительныеПараметры.Вставить("ОтложеннаяИнициализация", Истина); МодульУправлениеСвойствами = ОбщегоНазначения.ОбщийМодуль("УправлениеСвойствами"); МодульУправлениеСвойствами.ПриСозданииНаСервере(ЭтотОбъект, ДополнительныеПараметры); КонецЕсли; + ПодготовитьНеобязательныйРеквизит("ФизическоеЛицо"); + ПодготовитьНеобязательныйРеквизит("Подразделение"); + + ОбновитьВидимостьРеквизитаПоказыватьВСпискеВыбора(); + + Если Не ПользователиСлужебныйПовтИсп.Настройки().ОбщиеНастройкиВхода Тогда + Элементы.ГруппаИзменитьОграничение.Видимость = Ложь; + КонецЕсли; + + Если ОбщегоНазначенияПовтИсп.ЭтоАвтономноеРабочееМесто() Тогда + ТолькоПросмотр = Истина; + КонецЕсли; + КонецПроцедуры &НаКлиенте @@ -146,6 +160,11 @@ Элементы.ПользовательИБПользовательОС.КнопкаВыбора = Ложь; #КонецЕсли + Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.Свойства") Тогда + МодульУправлениеСвойствамиКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("УправлениеСвойствамиКлиент"); + МодульУправлениеСвойствамиКлиент.ПослеЗагрузкиДополнительныхРеквизитов(ЭтотОбъект); + КонецЕсли; + КонецПроцедуры &НаКлиенте @@ -155,9 +174,16 @@ МодульУправлениеСвойствамиКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("УправлениеСвойствамиКлиент"); Если МодульУправлениеСвойствамиКлиент.ОбрабатыватьОповещения(ЭтотОбъект, ИмяСобытия, Параметр) Тогда ОбновитьЭлементыДополнительныхРеквизитов(); + МодульУправлениеСвойствамиКлиент.ПослеЗагрузкиДополнительныхРеквизитов(ЭтотОбъект); КонецЕсли; КонецЕсли; + Если ВРег(ИмяСобытия) = ВРег("Запись_НаборКонстант") + И ВРег(Источник) = ВРег("ИспользоватьВнешнихПользователей") Тогда + + ПодключитьОбработчикОжидания("ПриИзмененияИспользованияВнешнихПользователей", 0.1, Истина); + КонецЕсли; + КонецПроцедуры &НаСервере @@ -236,14 +262,19 @@ ТекущийОбъект.ДополнительныеСвойства.Вставить("ПарольПользователяСервиса", ПарольПользователяСервиса); ТекущийОбъект.ДополнительныеСвойства.Вставить("СинхронизироватьССервисом", ТребуетсяСинхронизацияССервисом); - Если ТребуетсяЗаписьПользователяИБ(ЭтотОбъект) Тогда + Если ТребуетсяЗаписьПользователяИБ(ЭтотОбъект) + Или ПараметрыЗаписи.Свойство("КраткоеИмя") Тогда + ОписаниеПользователяИБ = ОписаниеПользователяИБ(); - ОписаниеПользователяИБ.Удалить("ПодтверждениеПароля"); + Если ПараметрыЗаписи.Свойство("КраткоеИмя") Тогда + ОписаниеПользователяИБ.Вставить("Имя", ПараметрыЗаписи.КраткоеИмя); + КонецЕсли; Если ЗначениеЗаполнено(Объект.ИдентификаторПользователяИБ) Тогда ОписаниеПользователяИБ.Вставить("УникальныйИдентификатор", Объект.ИдентификаторПользователяИБ); КонецЕсли; ОписаниеПользователяИБ.Вставить("Действие", "Записать"); + ОписаниеПользователяИБ.Вставить("ЗаполнитьПароль", Истина); ТекущийОбъект.ДополнительныеСвойства.Вставить("ОписаниеПользователяИБ", ОписаниеПользователяИБ); КонецЕсли; @@ -269,6 +300,14 @@ КонецПроцедуры +&НаСервере +Процедура ПриЗаписиНаСервере(Отказ, ТекущийОбъект, ПараметрыЗаписи) + + УстановитьПривилегированныйРежим(Истина); + ПользователиСлужебный.ЗаписатьСведенияОПользователе(ЭтотОбъект, ТекущийОбъект); + +КонецПроцедуры + &НаСервере Процедура ПослеЗаписиНаСервере(ТекущийОбъект, ПараметрыЗаписи) @@ -305,12 +344,15 @@ КонецЕсли; Если ЗначениеЗаполнено(ГруппаНовогоПользователя) Тогда - ОповеститьОбИзменении(ГруппаНовогоПользователя); Оповестить("Запись_ГруппыПользователей", Новый Структура, ГруппаНовогоПользователя); ГруппаНовогоПользователя = Неопределено; КонецЕсли; + Если ПараметрыЗаписи.Свойство("СменитьПарольПослеЗаписи") Тогда + ПодключитьОбработчикОжидания("СменитьПарольНачало", 0.1, Истина); + КонецЕсли; + КонецПроцедуры &НаСервере @@ -322,6 +364,14 @@ ПользователиСлужебный.ПроверитьОписаниеПользователяИБ(ОписаниеПользователяИБ, Отказ); КонецЕсли; + Если ВходВПрограммуРазрешен + И ЗначениеЗаполнено(СрокДействия) + И СрокДействия <= НачалоДня(ТекущаяДатаСеанса()) Тогда + + ОбщегоНазначенияКлиентСервер.СообщитьПользователю( + НСтр("ru = 'Ограничение должно быть до завтра или более.'"),, "ВходВПрограммуРазрешен",, Отказ); + КонецЕсли; + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.Свойства") Тогда МодульУправлениеСвойствами = ОбщегоНазначения.ОбщийМодуль("УправлениеСвойствами"); МодульУправлениеСвойствами.ОбработкаПроверкиЗаполнения(ЭтотОбъект, Отказ, ПроверяемыеРеквизиты); @@ -404,8 +454,7 @@ УстановитьНеобходимостьСинхронизацииССервисом(ЭтотОбъект); - Если Не УровеньДоступа.ПолныеПрава - И УровеньДоступа.УправлениеСписком + Если Не УровеньДоступа.ИзменениеРазрешенияНаВход И Не ВходВПрограммуРазрешен Тогда ПоказатьПредупреждение(, @@ -416,6 +465,14 @@ КонецПроцедуры +&НаКлиенте +Процедура ИзменитьОграничениеНаВходВПрограмму(Команда) + + ОткрытьФорму("Справочник.Пользователи.Форма.ОграничениеНаВходВПрограмму",, ЭтотОбъект,,,, + Новый ОписаниеОповещения("ИзменитьОграничениеНаВходВПрограммуЗавершение", ЭтотОбъект)); + +КонецПроцедуры + &НаКлиенте Процедура ПользовательИБАутентификацияСтандартнаяПриИзменении(Элемент) @@ -424,13 +481,11 @@ КонецПроцедуры &НаКлиенте -Процедура ПарольПриИзменении(Элемент) +Процедура ПотребоватьСменуПароляПриВходеПриИзменении(Элемент) - ПользовательИБПароль = Пароль; - - УстановитьДоступностьСвойств(ЭтотОбъект); - - УстановитьНеобходимостьСинхронизацииССервисом(ЭтотОбъект); + Если ПотребоватьСменуПароляПриВходе Тогда + ПользовательИБЗапрещеноИзменятьПароль = Ложь; + КонецЕсли; КонецПроцедуры @@ -444,6 +499,10 @@ &НаКлиенте Процедура ПользовательИБЗапрещеноИзменятьПарольПриИзменении(Элемент) + Если ПользовательИБЗапрещеноИзменятьПароль Тогда + ПотребоватьСменуПароляПриВходе = Ложь; + КонецЕсли; + УстановитьДоступностьСвойств(ЭтотОбъект); КонецПроцедуры @@ -473,7 +532,7 @@ Процедура ПользовательИБПользовательОСНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка) #Если НЕ ВебКлиент Тогда - ОткрытьФорму("Справочник.Пользователи.Форма.ФормаВыбораПользователяОС", , Элемент); + ОткрытьФорму("Справочник.Пользователи.Форма.ВыборПользователяОперационнойСистемы", , Элемент); #КонецЕсли КонецПроцедуры @@ -481,6 +540,8 @@ &НаКлиенте Процедура ПользовательИБИмяПриИзменении(Элемент) + ПользовательИБИмяЗначениеПрямогоИзменения = ПользовательИБИмя; + УстановитьДоступностьСвойств(ЭтотОбъект); УстановитьНеобходимостьСинхронизацииССервисом(ЭтотОбъект); @@ -518,6 +579,20 @@ КонецПроцедуры +&НаКлиенте +Процедура СтраницыПриСменеСтраницы(Элемент, ТекущаяСтраница) + + Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.Свойства") + И ТекущаяСтраница.Имя = "СтраницаДополнительныеРеквизиты" + И Не ЭтотОбъект.ПараметрыСвойств.ВыполненаОтложеннаяИнициализация Тогда + + СвойстваВыполнитьОтложеннуюИнициализацию(); + МодульУправлениеСвойствамиКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("УправлениеСвойствамиКлиент"); + МодульУправлениеСвойствамиКлиент.ПослеЗагрузкиДополнительныхРеквизитов(ЭтотОбъект); + КонецЕсли; + +КонецПроцедуры + //////////////////////////////////////////////////////////////////////////////// // Поддержка контактной информации. @@ -539,9 +614,7 @@ ВидКонтактнойИнформацииEmailПользователя()))[0]; Если ЗначениеЗаполнено(ЭтотОбъект[СтрокаEMail.ИмяРеквизита]) Тогда - Пароль = "" + Новый УникальныйИдентификатор + "qQ"; - ПодтверждениеПароля = Пароль; - ПользовательИБПароль = Пароль; + ПользовательИБПароль = "" + Новый УникальныйИдентификатор + "qQ"; КонецЕсли; УстановитьДоступностьСвойств(ЭтотОбъект); @@ -598,14 +671,10 @@ ПараметрыФормы.Вставить("Пользователь", Объект.Ссылка); Попытка - ОткрытьФорму("Справочник.Пользователи.Форма.СменаПочты", ПараметрыФормы, ЭтотОбъект); - Исключение - ПарольПользователяСервиса = Неопределено; ВызватьИсключение; - КонецПопытки; КонецПроцедуры @@ -684,6 +753,56 @@ #Область ОбработчикиКомандФормы +&НаКлиенте +Процедура СменитьПароль(Команда) + + Если Не Модифицированность + И ЗначениеЗаполнено(Объект.Ссылка) + И ПользовательИБСуществует Тогда + + СменитьПарольНачало(); + Возврат; + КонецЕсли; + + Контекст = Новый Структура; + + Если Не ЗначениеЗаполнено(Объект.Наименование) + Или ЗначениеЗаполнено(Объект.Ссылка) + И ПользовательИБСуществует Тогда + + СменитьПарольПослеПодтвержденияЗаписи("Записать", Контекст); + Возврат; + КонецЕсли; + + // Текст вопроса в стиле 1С:Предприятия. + Если ЗначениеЗаполнено(ПользовательИБИмя) Тогда + ТекстВопроса = НСтр("ru = 'Установка пароля возможна только после записи данных.'"); + Иначе + Контекст.Вставить("КраткоеИмя", + ПользователиСлужебныйКлиентСервер.ПолучитьКраткоеИмяПользователяИБ(Объект.Наименование)); + + Если ЗначениеЗаполнено(Объект.Ссылка) Тогда + ТекстВопроса = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Установка пароля возможна только после записи поля + |Имя (для входа), которое будет установлено: ""%1"".'"), + Контекст.КраткоеИмя); + Иначе + ТекстВопроса = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Установка пароля возможна только после записи данных, + |при этом будет установлено Имя (для входа): ""%1"".'"), + Контекст.КраткоеИмя); + КонецЕсли; + КонецЕсли; + + Кнопки = Новый СписокЗначений; + Кнопки.Добавить("Записать", НСтр("ru = 'Записать'")); + Кнопки.Добавить("НеЗаписывать", НСтр("ru = 'Не записывать'")); + + ПоказатьВопрос(Новый ОписаниеОповещения("СменитьПарольПослеПодтвержденияЗаписи", ЭтотОбъект, Контекст), + ТекстВопроса, Кнопки); + +КонецПроцедуры + //////////////////////////////////////////////////////////////////////////////// // Для работы интерфейса ролей. @@ -786,10 +905,26 @@ ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно; ОтборЭлемента.ПравоеЗначение = Истина; - Элемент.Оформление.УстановитьЗначениеПараметра("ЦветФона", ЦветаСтиля.НедоступныеДанныеЦвет); + Элемент.Оформление.УстановитьЗначениеПараметра("ЦветФона", ЦветаСтиля.ТекстЗапрещеннойЯчейкиЦвет); КонецПроцедуры +&НаКлиенте +Процедура ПриИзмененияИспользованияВнешнихПользователей() + + ОбновитьВидимостьРеквизитаПоказыватьВСпискеВыбора(); + +КонецПроцедуры + +&НаСервере +Процедура ОбновитьВидимостьРеквизитаПоказыватьВСпискеВыбора() + + Элементы.ПользовательИБПоказыватьВСпискеВыбора.Видимость = + Не ОбщегоНазначенияПовтИсп.РазделениеВключено() + И Не ПолучитьФункциональнуюОпцию("ИспользоватьВнешнихПользователей") + +КонецПроцедуры + &НаСервере Процедура ОбщаяНастройкаФормы(ПриСозданииНаСервере = Ложь, ПараметрыЗаписи = Неопределено) @@ -801,6 +936,10 @@ ПрочитатьПользователяИБ(); КонецЕсли; + УстановитьПривилегированныйРежим(Истина); + ПользователиСлужебный.ПрочитатьСведенияОПользователе(ЭтотОбъект); + УстановитьПривилегированныйРежим(Ложь); + УровеньДоступа = ПользователиСлужебный.УровеньДоступаКСвойствамПользователя(Объект); ОпределитьДействияВФорме(); @@ -813,10 +952,12 @@ Или ДействияВФорме.Роли <> "Редактирование" Или Не УровеньДоступа.НастройкиДляВхода); - Если ОбщегоНазначенияПовтИсп.РазделениеВключено() Тогда - ДействияСПользователемСервиса = Неопределено; - ПользователиСлужебный.ПриПолученииДействийСПользователемСервиса( - ДействияСПользователемСервиса, Объект.Ссылка); + Если ОбщегоНазначенияПовтИсп.РазделениеВключено() + И ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаВМоделиСервиса.ПользователиВМоделиСервиса") Тогда + + МодульПользователиСлужебныйВМоделиСервиса = ОбщегоНазначения.ОбщийМодуль("ПользователиСлужебныйВМоделиСервиса"); + ДействияСПользователемСервиса = МодульПользователиСлужебныйВМоделиСервиса.ПолучитьДействияСПользователемСервиса( + Объект.Ссылка); КонецЕсли; // Настройка возможности просмотра. @@ -829,12 +970,13 @@ ?(ВыводитьСписокРолей, ОтображениеОбычнойГруппы.Нет, ОтображениеОбычнойГруппы.ОбычноеВыделение); Элементы.РекомендуетсяПроверитьНастройкиДляВхода.Видимость = - УровеньДоступа.ПолныеПрава И Объект.Подготовлен И Не ПриЧтенииВходВПрограммуРазрешен; + УровеньДоступа.ИзменениеРазрешенияНаВход И Объект.Подготовлен И Не ПриЧтенииВходВПрограммуРазрешен; // Настройка возможности изменения. Если Объект.Служебный Тогда ТолькоПросмотр = Истина; КонецЕсли; + Элементы.ГруппаСлужебныйПользователь.Видимость = Объект.Служебный; ТолькоПросмотр = ТолькоПросмотр ИЛИ ДействияВФорме.Роли <> "Редактирование" @@ -846,6 +988,8 @@ Не (ДействияВФорме.СвойстваЭлемента = "Редактирование" И УровеньДоступа.УправлениеСписком); Элементы.Недействителен.ТолькоПросмотр = Элементы.Наименование.ТолькоПросмотр; + Элементы.ФизическоеЛицо.ТолькоПросмотр = Элементы.Наименование.ТолькоПросмотр; + Элементы.Подразделение.ТолькоПросмотр = Элементы.Наименование.ТолькоПросмотр; Элементы.ОсновныеСвойства.ТолькоПросмотр = Не ( ДействияВФорме.СвойстваПользователяИБ = "Редактирование" @@ -859,6 +1003,7 @@ Элементы.ПользовательИБПользовательОС.ТолькоПросмотр = Не УровеньДоступа.НастройкиДляВхода; Элементы.ПользовательИБПоказыватьВСпискеВыбора.ТолькоПросмотр = Не УровеньДоступа.УправлениеСписком; + Элементы.ПотребоватьСменуПароляПриВходе.ТолькоПросмотр = Не УровеньДоступа.УправлениеСписком; Элементы.ПользовательИБЗапрещеноИзменятьПароль.ТолькоПросмотр = Не УровеньДоступа.УправлениеСписком; Элементы.ПользовательИБРежимЗапуска.ТолькоПросмотр = Не УровеньДоступа.УправлениеСписком; @@ -869,6 +1014,32 @@ КонецПроцедуры +&НаСервере +Процедура ПодготовитьНеобязательныйРеквизит(ИмяРеквизита) + + Если ТипЗнч(Объект[ИмяРеквизита]) = Тип("Строка") Тогда + Элементы[ИмяРеквизита].Видимость = Ложь; + Иначе + ТипыПодразделения = Метаданные.ОпределяемыеТипы[ИмяРеквизита].Тип.Типы(); + Если ТипыПодразделения.Количество() = 1 И ОбщегоНазначения.ЭтоСсылка(ТипыПодразделения[0]) Тогда + ОбъектМетаданных = Метаданные.НайтиПоТипу(ТипыПодразделения[0]); + Элементы[ИмяРеквизита].Заголовок = ПредставлениеОбъекта(ОбъектМетаданных); + КонецЕсли; + КонецЕсли; + +КонецПроцедуры + +&НаСервере +Функция ПредставлениеОбъекта(ОбъектМетаданных) + + Если ЗначениеЗаполнено(ОбъектМетаданных.ПредставлениеОбъекта) Тогда + Возврат ОбъектМетаданных.ПредставлениеОбъекта; + КонецЕсли; + + Возврат ОбъектМетаданных.Представление(); + +КонецФункции + // Продолжение обработчика события ПередЗаписью. &НаКлиенте Процедура ПослеЗапросаПароляДляАутентификацииВСервисеПередЗаписью(НовыйПарольПользователяСервиса, ПараметрыЗаписи) Экспорт @@ -880,14 +1051,10 @@ ПарольПользователяСервиса = НовыйПарольПользователяСервиса; Попытка - Записать(ПараметрыЗаписи); - Исключение - ПарольПользователяСервиса = Неопределено; ВызватьИсключение; - КонецПопытки; КонецПроцедуры @@ -905,11 +1072,13 @@ КраткоеИмя = ПользователиСлужебныйКлиентСервер.ПолучитьКраткоеИмяПользователяИБ(Форма.Объект.Наименование); Если Элементы.ИмяПереключениеОтметкиНезаполненного.ТекущаяСтраница = Элементы.ИмяБезОтметкиНезаполненного Тогда - Если Форма.ПользовательИБИмя = КраткоеИмя Тогда + + Если Не ЗначениеЗаполнено(Форма.ПользовательИБИмяЗначениеПрямогоИзменения) + И Форма.ПользовательИБИмя = КраткоеИмя Тогда + Форма.ПользовательИБИмя = ""; КонецЕсли; Иначе - Если ПриИзмененииНаименования Или Не ЗначениеЗаполнено(Форма.ПользовательИБИмя) Тогда @@ -936,6 +1105,52 @@ КонецПроцедуры +// Продолжение процедуры СменитьПароль. +&НаКлиенте +Процедура СменитьПарольПослеПодтвержденияЗаписи(Ответ, Контекст) Экспорт + + Если Ответ <> "Записать" Тогда + Возврат; + КонецЕсли; + + ПараметрыЗаписи = Новый Структура("СменитьПарольПослеЗаписи"); + + Если Контекст.Свойство("КраткоеИмя") Тогда + ПараметрыЗаписи.Вставить("КраткоеИмя", Контекст.КраткоеИмя); + КонецЕсли; + + Записать(ПараметрыЗаписи); + +КонецПроцедуры + +// Продолжение процедуры СменитьПароль. +&НаКлиенте +Процедура СменитьПарольНачало() + + ПользователиСлужебныйКлиент.ОткрытьФормуСменыПароля(Объект.Ссылка, Новый ОписаниеОповещения( + "СменитьПарольПослеСменыПароля", ЭтотОбъект)); + +КонецПроцедуры + +// Продолжение процедуры СменитьПароль. +&НаКлиенте +Процедура СменитьПарольПослеСменыПароля(Результат, Контекст) Экспорт + + Если Не ЗначениеЗаполнено(Результат) Тогда + Возврат; + КонецЕсли; + + Прочитать(); + +КонецПроцедуры + +&НаКлиентеНаСервереБезКонтекста +Процедура УстановитьНаличиеПароля(Форма, ПарольУстановлен) + + ПользователиСлужебныйКлиентСервер.УстановитьНаличиеПароля(Форма, ПарольУстановлен); + +КонецПроцедуры + &НаСервере Процедура ОпределитьДействияВФорме() @@ -991,14 +1206,7 @@ КонецЕсли; КонецЕсли; - ОбработчикиСобытия = ОбщегоНазначения.ОбработчикиСлужебногоСобытия( - "СтандартныеПодсистемы.Пользователи\ПриОпределенииДействийВФорме"); - - Для каждого Обработчик Из ОбработчикиСобытия Цикл - Обработчик.Модуль.ПриОпределенииДействийВФорме(Объект.Ссылка, ДействияВФорме); - КонецЦикла; - - ПользователиПереопределяемый.ИзменитьДействияВФорме(Объект.Ссылка, ДействияВФорме); + ПользователиСлужебный.ПриОпределенииДействийВФорме(Объект.Ссылка, ДействияВФорме); // Проверка имен действий в форме. Если Найти(", Просмотр, Редактирование,", ", " + ДействияВФорме.Роли + ",") = 0 Тогда @@ -1084,7 +1292,8 @@ Если УровеньДоступа.УправлениеСписком Тогда Результат.Вставить("ВходВПрограммуРазрешен", ВходВПрограммуРазрешен); - Результат.Вставить("ПоказыватьВСпискеВыбора", ПользовательИБПоказыватьВСпискеВыбора); + Результат.Вставить("ПоказыватьВСпискеВыбора", ПользовательИБПоказыватьВСпискеВыбора + И Не ПолучитьФункциональнуюОпцию("ИспользоватьВнешнихПользователей")); Результат.Вставить("ЗапрещеноИзменятьПароль", ПользовательИБЗапрещеноИзменятьПароль); Результат.Вставить("Язык", ПользовательИБЯзык); Результат.Вставить("РежимЗапуска", ПользовательИБРежимЗапуска); @@ -1103,7 +1312,6 @@ Результат.Вставить("ПользовательОС", ПользовательИБПользовательОС); КонецЕсли; КонецЕсли; - Результат.Вставить("ПодтверждениеПароля", ПодтверждениеПароля); Если Не УровеньДоступа.НастройкиДляВхода Тогда Возврат Результат; @@ -1184,10 +1392,10 @@ &НаСервере Функция ОбновитьКонтактнуюИнформацию(Результат = Неопределено) - МодульУправлениеКонтактнойИнформациейСервер = + МодульУправлениеКонтактнойИнформацией = ОбщегоНазначения.ОбщийМодуль("УправлениеКонтактнойИнформацией"); - Возврат МодульУправлениеКонтактнойИнформациейСервер.ОбновитьКонтактнуюИнформацию( + Возврат МодульУправлениеКонтактнойИнформацией.ОбновитьКонтактнуюИнформацию( ЭтотОбъект, Объект, Результат); КонецФункции @@ -1226,6 +1434,36 @@ //////////////////////////////////////////////////////////////////////////////// // Поддержка дополнительных реквизитов. +&НаСервере +Процедура СвойстваВыполнитьОтложеннуюИнициализацию() + + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.Свойства") Тогда + МодульУправлениеСвойствами = ОбщегоНазначения.ОбщийМодуль("УправлениеСвойствами"); + МодульУправлениеСвойствами.ЗаполнитьДополнительныеРеквизитыВФорме(ЭтотОбъект); + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура ОбновитьЗависимостиДополнительныхРеквизитов() + + Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.Свойства") Тогда + МодульУправлениеСвойствамиКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("УправлениеСвойствамиКлиент"); + МодульУправлениеСвойствамиКлиент.ОбновитьЗависимостиДополнительныхРеквизитов(ЭтотОбъект); + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура Подключаемый_ПриИзмененииДополнительногоРеквизита(Элемент) + + Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.Свойства") Тогда + МодульУправлениеСвойствамиКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("УправлениеСвойствамиКлиент"); + МодульУправлениеСвойствамиКлиент.ОбновитьЗависимостиДополнительныхРеквизитов(ЭтотОбъект); + КонецЕсли; + +КонецПроцедуры + &НаСервере Процедура ОбновитьЭлементыДополнительныхРеквизитов() @@ -1244,17 +1482,20 @@ УстановитьПривилегированныйРежим(Истина); + Если НачальноеОписаниеПользователяИБ <> Неопределено Тогда + НачальноеОписаниеПользователяИБ.Роли = Новый Массив; + Возврат НачальноеОписаниеПользователяИБ; + КонецЕсли; + ОписаниеПользователяИБ = Пользователи.НовоеОписаниеПользователяИБ(); - Если Не ЗначениеЗаполнено(Объект.Ссылка) Тогда - Если ОбщегоНазначенияПовтИсп.РазделениеВключено() Тогда - ОписаниеПользователяИБ.ПоказыватьВСпискеВыбора = Ложь; - Иначе - ОписаниеПользователяИБ.ПоказыватьВСпискеВыбора = - НЕ Константы.ИспользоватьВнешнихПользователей.Получить(); - КонецЕсли; - ОписаниеПользователяИБ.АутентификацияСтандартная = Истина; + Если ОбщегоНазначенияПовтИсп.РазделениеВключено() Тогда + ОписаниеПользователяИБ.ПоказыватьВСпискеВыбора = Ложь; + Иначе + ОписаниеПользователяИБ.ПоказыватьВСпискеВыбора = + НЕ Константы.ИспользоватьВнешнихПользователей.Получить(); КонецЕсли; + ОписаниеПользователяИБ.АутентификацияСтандартная = Истина; ОписаниеПользователяИБ.Роли = Новый Массив; Возврат ОписаниеПользователяИБ; @@ -1266,8 +1507,6 @@ УстановитьПривилегированныйРежим(Истина); - Пароль = ""; - ПодтверждениеПароля = ""; ПрочитанныеСвойства = Неопределено; ОписаниеПользователяИБ = НачальноеОписаниеПользователяИБ(); ПользовательИБСуществует = Ложь; @@ -1299,6 +1538,7 @@ |Роли")); КонецЕсли; Объект.ИдентификаторПользователяИБ = Неопределено; + УстановитьНаличиеПароля(ЭтотОбъект, Ложь); Иначе Если Пользователи.ПрочитатьПользователяИБ( Объект.ИдентификаторПользователяИБ, ПрочитанныеСвойства) Тогда @@ -1343,12 +1583,9 @@ |РежимЗапуска" + ?(Не Элементы.ПользовательИБЯзык.Видимость, "", ", |Язык") + ?(ПользователиСлужебный.ЗапретРедактированияРолей(), "", ", |Роли")); - - Если ПрочитанныеСвойства.ПарольУстановлен Тогда - Пароль = "**********"; - ПодтверждениеПароля = "**********"; - КонецЕсли; КонецЕсли; + + УстановитьНаличиеПароля(ЭтотОбъект, ПрочитанныеСвойства.ПарольУстановлен); КонецЕсли; Пользователи.СкопироватьСвойстваПользователяИБ( @@ -1356,7 +1593,8 @@ ОписаниеПользователяИБ, , "УникальныйИдентификатор, - |Роли", + |Роли" + ?(ПолучитьФункциональнуюОпцию("ИспользоватьВнешнихПользователей"), ", + |ПоказыватьВСпискеВыбора", ""), "ПользовательИБ"); Если ПользовательИБОсновной И Не ВходВПрограммуРазрешен Тогда @@ -1397,8 +1635,8 @@ ПоказатьКомандыУстраненияРазличий Или ДействияВФорме.СвойстваЭлемента = "Редактирование"; - УточнениеСвойств.Вставить(0, СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Полное имя ""%1""'"), ПользовательИБПолноеИмя)); + УточнениеСвойств.Вставить(0, СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Полное имя ""%1""'"), + ПользовательИБПолноеИмя)); КонецЕсли; Если УточнениеСвойств.Количество() > 0 Тогда @@ -1414,14 +1652,20 @@ Если ЗначениеЗаполнено(ТекущаяСтрока) Тогда СтрокаУточненияСвойств = СтрокаУточненияСвойств + ТекущаяСтрока; КонецЕсли; - Элементы.СвойстваПояснениеНесоответствия.Заголовок = - СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Следующие свойства пользователя информационной базы отличаются от указанных в этой форме: - |%1.'"), СтрокаУточненияСвойств) - + Символы.ПС - + ?(ПоказатьКомандыУстраненияРазличий, - НСтр("ru = 'Нажмите ""Записать"", чтобы устранить различия и не выводить это предупреждение.'"), - НСтр("ru = 'Обратитесь к администратору, чтобы устранить различия.'")); + Если ПоказатьКомандыУстраненияРазличий Тогда + Рекомендация = Символы.ПС + + НСтр("ru = 'Нажмите ""Записать"", чтобы устранить различия и не выводить это предупреждение.'"); + + ИначеЕсли Не Пользователи.ЭтоПолноправныйПользователь() Тогда + Рекомендация = Символы.ПС + + НСтр("ru = 'Обратитесь к администратору, чтобы устранить различия.'"); + Иначе + Рекомендация = ""; + КонецЕсли; + Элементы.СвойстваПояснениеНесоответствия.Заголовок = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Следующие свойства пользователя информационной базы отличаются от указанных в этой форме: + |%1.'"), + СтрокаУточненияСвойств) + Рекомендация; Иначе ПоказатьНесоответствие = Ложь; КонецЕсли; @@ -1431,6 +1675,8 @@ Элементы.СвойстваОбработкаНесоответствия.Видимость = ПоказатьНесоответствие; Элементы.СвойстваКомандыУстраненияРазличий.Видимость = ПоказатьКомандыУстраненияРазличий; + Элементы.СвойстваПояснениеНесоответствия.ВертикальноеПоложение = ?(ЗначениеЗаполнено(Рекомендация), + ВертикальноеПоложениеЭлемента.Верх, ВертикальноеПоложениеЭлемента.Центр); // Определение сопоставление несуществующего пользователя ИБ с пользователем в справочнике. ЕстьНовоеСопоставлениеСНесуществующимПользователемИБ @@ -1452,6 +1698,20 @@ Элементы.СопоставлениеОбработкаНесоответствия.Видимость = Ложь; КонецЕсли; + Если ДействияВФорме.СвойстваЭлемента = "Редактирование" Тогда + Рекомендация = Символы.ПС + + НСтр("ru = 'Нажмите ""Записать"", чтобы устранить проблему и не выводить это предупреждение.'"); + + ИначеЕсли Не Пользователи.ЭтоПолноправныйПользователь() Тогда + Рекомендация = Символы.ПС + + НСтр("ru = 'Обратитесь к администратору, чтобы устранить различия.'"); + Иначе + Рекомендация = ""; + КонецЕсли; + + Элементы.СопоставлениеПояснениеНесоответствия.Заголовок = + НСтр("ru = 'Пользователь информационной базы не найден.'") + Рекомендация; + КонецПроцедуры &НаСервере @@ -1486,15 +1746,14 @@ // Настройка возможности изменения. Элементы.ВходВПрограммуРазрешен.ТолькоПросмотр = Не ( Элементы.ОсновныеСвойства.ТолькоПросмотр = Ложь - И ( УровеньДоступа.ПолныеПрава - Или УровеньДоступа.УправлениеСписком И Форма.ПриЧтенииВходВПрограммуРазрешен)); + И ( УровеньДоступа.ИзменениеРазрешенияНаВход + Или УровеньДоступа.ОтключениеРазрешенияНаВход И Форма.ПриЧтенииВходВПрограммуРазрешен)); - Элементы.Пароль.ТолькоПросмотр = - Не ( УровеньДоступа.НастройкиДляВхода - Или УровеньДоступа.ИзменениеТекущего - И Не Форма.ПользовательИБЗапрещеноИзменятьПароль); - - Элементы.ПодтверждениеПароля.ТолькоПросмотр = Элементы.Пароль.ТолькоПросмотр; + Элементы.СменитьПароль.Доступность = + ( УровеньДоступа.НастройкиДляВхода + Или УровеньДоступа.ИзменениеТекущего + И Не Форма.ПользовательИБЗапрещеноИзменятьПароль) + И Не Объект.Служебный; // Настройка необходимости заполнения. Если ТребуетсяЗаписьПользователяИБ(Форма, Ложь) Тогда @@ -1509,48 +1768,25 @@ ОбновитьИмяДляВхода(Форма); // Настройка доступности связанных элементов. - Элементы.ВходВПрограммуРазрешен.Доступность = НЕ Объект.Недействителен; - Элементы.ОсновныеСвойства.Доступность = НЕ Объект.Недействителен; + Элементы.ВходВПрограммуРазрешен.Доступность = Не Объект.Недействителен; + Элементы.ОсновныеСвойства.Доступность = Не Объект.Недействителен; + Элементы.ГруппаИзменитьОграничение.Доступность = Не Объект.Недействителен + И Не Элементы.Наименование.ТолькоПросмотр; - Элементы.Пароль.Доступность = Форма.ПользовательИБАутентификацияСтандартная; - Элементы.ПодтверждениеПароля.Доступность = Форма.ПользовательИБАутентификацияСтандартная; - - Элементы.ПользовательИБЗапрещеноИзменятьПароль.Доступность - = Форма.ПользовательИБАутентификацияСтандартная; - - Элементы.ПользовательИБПоказыватьВСпискеВыбора.Доступность - = Форма.ПользовательИБАутентификацияСтандартная; - - Элементы.ПользовательИБПользовательОС.Доступность = Форма.ПользовательИБАутентификацияОС; + Элементы.ПараметрыАутентификации1СПредприятия.Доступность = Форма.ПользовательИБАутентификацияСтандартная; + Элементы.ПользовательИБПользовательОС.Доступность = Форма.ПользовательИБАутентификацияОС; // Уточнение настроек в модели сервиса. Если ДействияСПользователемСервиса <> Неопределено Тогда // Доступность редактирования КИ. - ДействияКИ = ДействияСПользователемСервиса.КонтактнаяИнформация; - - Для Каждого СтрокаКИ Из Форма.КонтактнаяИнформацияОписаниеДополнительныхРеквизитов Цикл - ДействияВидаКИ = ДействияКИ.Получить(СтрокаКИ.Вид); - Если ДействияВидаКИ = Неопределено Тогда - // Возможность редактирования этого вида КИ не регулируется менеджером сервиса. - Продолжить; - КонецЕсли; - - ЭлементКИ = Элементы[СтрокаКИ.ИмяРеквизита]; - - Если СтрокаКИ.Вид = ВидКонтактнойИнформацииEmailПользователя() Тогда - - ЭлементКИ.ТолькоПросмотр = НЕ Объект.Ссылка.Пустая(); - - ЭлементКИ.КнопкаВыбора = НЕ Объект.Ссылка.Пустая() - И ДействияВидаКИ.Изменение; - - ЗаполненEMail = ЗначениеЗаполнено(Форма[СтрокаКИ.ИмяРеквизита]); - Иначе - ЭлементКИ.ТолькоПросмотр = ЭлементКИ.ТолькоПросмотр - ИЛИ НЕ ДействияВидаКИ.Изменение; - КонецЕсли; - КонецЦикла; + Отбор = Новый Структура("Вид", ВидКонтактнойИнформацииEmailПользователя()); + НайденныеСтроки = Форма.КонтактнаяИнформацияОписаниеДополнительныхРеквизитов.НайтиСтроки(Отбор); + Если НайденныеСтроки <> Неопределено Тогда + ЗаполненEMail = ЗначениеЗаполнено(Форма[НайденныеСтроки[0].ИмяРеквизита]); + Иначе + ЗаполненEMail = Ложь; + КонецЕсли; Если Объект.Ссылка.Пустая() И ЗаполненEMail Тогда МожноИзменятьПароль = Ложь; @@ -1558,31 +1794,59 @@ МожноИзменятьПароль = ДействияСПользователемСервиса.ИзменениеПароля; КонецЕсли; - Элементы.Пароль.ТолькоПросмотр = Элементы.Пароль.ТолькоПросмотр - ИЛИ НЕ МожноИзменятьПароль; - - Элементы.ПодтверждениеПароля.ТолькоПросмотр = Элементы.ПодтверждениеПароля.ТолькоПросмотр - ИЛИ НЕ МожноИзменятьПароль; + Элементы.СменитьПароль.Доступность = Элементы.СменитьПароль.Доступность И МожноИзменятьПароль; Элементы.ПользовательИБИмя1.ТолькоПросмотр = Элементы.ПользовательИБИмя1.ТолькоПросмотр ИЛИ НЕ ДействияСПользователемСервиса.ИзменениеИмени; - + Элементы.ПользовательИБИмя2.ТолькоПросмотр = Элементы.ПользовательИБИмя2.ТолькоПросмотр ИЛИ НЕ ДействияСПользователемСервиса.ИзменениеИмени; - + Элементы.Наименование.ТолькоПросмотр = Элементы.Наименование.ТолькоПросмотр ИЛИ НЕ ДействияСПользователемСервиса.ИзменениеПолногоИмени; - + Элементы.ВходВПрограммуРазрешен.Доступность = Элементы.ВходВПрограммуРазрешен.Доступность И ДействияСПользователемСервиса.ИзменениеДоступа; - + Элементы.Недействителен.Доступность = Элементы.Недействителен.Доступность И ДействияСПользователемСервиса.ИзменениеДоступа; - + Форма.ЗапретИзмененияАдминистративногоДоступа = НЕ ДействияСПользователемСервиса.ИзменениеАдминистративногоДоступа; КонецЕсли; + ПользователиСлужебныйКлиентСервер.ОбновитьОграничениеСрокаДействия(Форма); + +КонецПроцедуры + +&НаСервере +Функция ОпределитьДоступностьЭлементовКонтактнойИнформации() + + Результат = Новый Соответствие; + Для Каждого СтрокаКонтактнойИнформации Из ЭтотОбъект.КонтактнаяИнформацияОписаниеДополнительныхРеквизитов Цикл + ДействияВидаКонтактнойИнформации = ДействияСПользователемСервиса.КонтактнаяИнформация.Получить(СтрокаКонтактнойИнформации.Вид); + Если ДействияВидаКонтактнойИнформации = Неопределено Тогда + // Возможность редактирования этого вида КИ не регулируется менеджером сервиса. + Продолжить; + КонецЕсли; + ЭлементКонтактнойИнформации = Элементы[СтрокаКонтактнойИнформации.ИмяРеквизита]; + Если СтрокаКонтактнойИнформации.Вид = ВидКонтактнойИнформацииEmailПользователя() Тогда + Результат.Вставить(СтрокаКонтактнойИнформации.Вид, Объект.Ссылка.Пустая()); + Иначе + Результат.Вставить(СтрокаКонтактнойИнформации.Вид, НЕ (ЭлементКонтактнойИнформации.ТолькоПросмотр ИЛИ НЕ ДействияВидаКонтактнойИнформации.Изменение)); + КонецЕсли; + КонецЦикла; + + Возврат Результат; + +КонецФункции + +// Продолжение процедуры ИзменитьОграничениеНаВходВПрограмму. +&НаКлиенте +Процедура ИзменитьОграничениеНаВходВПрограммуЗавершение(Результат, Контекст) Экспорт + + УстановитьДоступностьСвойств(ЭтотОбъект); + КонецПроцедуры &НаКлиентеНаСервереБезКонтекста @@ -1610,14 +1874,13 @@ ИЛИ Форма.ПользовательИБАутентификацияСтандартная <> Шаблон.АутентификацияСтандартная ИЛИ Форма.ПользовательИБПоказыватьВСпискеВыбора <> Шаблон.ПоказыватьВСпискеВыбора ИЛИ Форма.ПользовательИБЗапрещеноИзменятьПароль <> Шаблон.ЗапрещеноИзменятьПароль - ИЛИ Форма.Пароль <> "" - ИЛИ Форма.ПодтверждениеПароля <> "" - ИЛИ Форма.ПользовательИБАутентификацияОС <> Шаблон.АутентификацияОС - ИЛИ Форма.ПользовательИБПользовательОС <> "" - ИЛИ Форма.ПользовательИБАутентификацияOpenID <> Шаблон.АутентификацияOpenID - ИЛИ Форма.ПользовательИБРежимЗапуска <> Шаблон.РежимЗапуска - ИЛИ Форма.ПользовательИБЯзык <> Шаблон.Язык - ИЛИ Форма.ПользовательИБРоли.Количество() <> 0 Тогда + ИЛИ Форма.ПользовательИБПароль <> Неопределено + ИЛИ Форма.ПользовательИБАутентификацияОС <> Шаблон.АутентификацияОС + ИЛИ Форма.ПользовательИБПользовательОС <> "" + ИЛИ Форма.ПользовательИБАутентификацияOpenID <> Шаблон.АутентификацияOpenID + ИЛИ Форма.ПользовательИБРежимЗапуска <> Шаблон.РежимЗапуска + ИЛИ Форма.ПользовательИБЯзык <> Шаблон.Язык + ИЛИ Форма.ПользовательИБРоли.Количество() <> 0 Тогда Возврат Истина; КонецЕсли; diff --git a/SSL/src/Catalogs/Пользователи/Help/ru.html b/SSL/src/Catalogs/Пользователи/Help/ru.html index e6b4481ac..f4c4e3fb3 100644 --- a/SSL/src/Catalogs/Пользователи/Help/ru.html +++ b/SSL/src/Catalogs/Пользователи/Help/ru.html @@ -13,8 +13,10 @@

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

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

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

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

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

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

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

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

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

    Установка пароля

    +
    • +
      Нажмите Еще - Установить пароль, напишите пароль.

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

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

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

    • В случае если в программе разрешено использовать группы пользователей, список состоит из двух частей: в левой части необходимое количество групп, в правой - список пользователей выделенной группы. По умолчанию текущей является группа Все пользователи, т.е. видны все пользователи программы.
    • Один и тот же пользователь может одновременно входить в разные группы. Включить пользователя в группу можно разными способами:
      • При вводе пользователя в списке можно сначала выбрать группу, затем нажать кнопку Создать. diff --git a/SSL/src/Catalogs/Пользователи/ObjectModule.bsl b/SSL/src/Catalogs/Пользователи/ObjectModule.bsl index d7beb3b00..f48d91100 100644 --- a/SSL/src/Catalogs/Пользователи/ObjectModule.bsl +++ b/SSL/src/Catalogs/Пользователи/ObjectModule.bsl @@ -1,7 +1,13 @@ #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда -#Область ПрограммныйИнтерфейс +Перем ПараметрыОбработкиПользователяИБ; // Параметры, заполняемые при обработке пользователя ИБ. + // Используются в обработчике события ПриЗаписи. +Перем ЭтоНовый; // Показывает, что был записан новый объект. + // Используются в обработчике события ПриЗаписи. + +// *Область ПрограммныйИнтерфейс +// // Программный интерфейс объекта реализован через ДополнительныеСвойства: // // ОписаниеПользователяИБ - Структура со свойствами: @@ -19,7 +25,7 @@ // - Булево - если Истина, тогда установить аутентификацию, как // указана или сохранена в значениях одноименных реквизитов; // если Ложь, тогда снять все виды аутентификации у пользователя ИБ. -// С свойство не указано - прямая установка сохраняемых и +// - свойство не указано - прямая установка сохраняемых и // действующих видов аутентификации (для поддержки обратной совместимости). // // АутентификацияСтандартная, АутентификацияОС, АутентификацияOpenID - установить @@ -44,17 +50,8 @@ // "ДобавленПользовательИБ", "ИзмененПользовательИБ", "УдаленПользовательИБ", // "ОчищеноСопоставлениеСНесуществующимПользователемИБ", "НеТребуетсяУдалениеПользовательИБ". // - УникальныйИдентификатор - УникальныйИдентификатор пользователя ИБ. - -#КонецОбласти - -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПЕРЕМЕННЫЕ - -Перем ПараметрыОбработкиПользователяИБ; // Параметры, заполняемые при обработке пользователя ИБ. - // Используются в обработчике события ПриЗаписи. - -Перем ЭтоНовый; // Показывает, что был записан новый объект. - // Используются в обработчике события ПриЗаписи. +// +// *КонецОбласти #Область ОбработчикиСобытий @@ -105,7 +102,9 @@ ПользователиСлужебный.ПослеОбновленияСоставовГруппПользователей( УчастникиИзменений, ИзмененныеГруппы); - ПользователиСлужебный.ПослеДобавленияИзмененияПользователяИлиГруппы(Ссылка, ЭтоНовый); + ПользователиСлужебный.ВключитьЗаданиеКонтрольАктивностиПользователейПриНеобходимости(Ссылка); + + ИнтеграцияСтандартныхПодсистем.ПослеДобавленияИзмененияПользователяИлиГруппы(Ссылка, ЭтоНовый); КонецПроцедуры @@ -127,6 +126,9 @@ ИдентификаторПользователяСервиса = Неопределено; Подготовлен = Ложь; + КонтактнаяИнформация.Очистить(); + Комментарий = ""; + КонецПроцедуры #КонецОбласти diff --git a/SSL/src/Catalogs/Пользователи/Пользователи.mdo b/SSL/src/Catalogs/Пользователи/Пользователи.mdo index 866d0a5fc..bce76e4b0 100644 --- a/SSL/src/Catalogs/Пользователи/Пользователи.mdo +++ b/SSL/src/Catalogs/Пользователи/Пользователи.mdo @@ -120,6 +120,54 @@ + + Catalog.НаборыДополнительныхРеквизитовИСведений.TabularSection.ДополнительныеРеквизиты + Catalog.НаборыДополнительныхРеквизитовИСведений.TabularSection.ДополнительныеРеквизиты.Attribute.Свойство + Catalog.НаборыДополнительныхРеквизитовИСведений.TabularSection.ДополнительныеРеквизиты.StandardAttribute.Ref + + Catalog.НаборыДополнительныхРеквизитовИСведений.Справочник_Пользователи + + -1 + -1 + Catalog.Пользователи.TabularSection.ДополнительныеРеквизиты + Catalog.Пользователи.TabularSection.ДополнительныеРеквизиты.StandardAttribute.Ref + Catalog.Пользователи.TabularSection.ДополнительныеРеквизиты.Attribute.Свойство + Catalog.Пользователи.TabularSection.ДополнительныеРеквизиты.Attribute.Значение + -1 + -1 + + + Catalog.НаборыДополнительныхРеквизитовИСведений.TabularSection.ДополнительныеСведения + Catalog.НаборыДополнительныхРеквизитовИСведений.TabularSection.ДополнительныеСведения.Attribute.Свойство + Catalog.НаборыДополнительныхРеквизитовИСведений.TabularSection.ДополнительныеСведения.StandardAttribute.Ref + + Catalog.НаборыДополнительныхРеквизитовИСведений.Справочник_Пользователи + + -1 + -1 + InformationRegister.ДополнительныеСведения + InformationRegister.ДополнительныеСведения.Dimension.Объект + InformationRegister.ДополнительныеСведения.Dimension.Свойство + InformationRegister.ДополнительныеСведения.Resource.Значение + -1 + -1 + + + Catalog.ВидыКонтактнойИнформации + Catalog.ВидыКонтактнойИнформации.StandardAttribute.Ref + Catalog.ВидыКонтактнойИнформации.StandardAttribute.Parent + + Catalog.ВидыКонтактнойИнформации.СправочникПользователи + + -1 + -1 + Catalog.Пользователи.TabularSection.КонтактнаяИнформация + Catalog.Пользователи.TabularSection.КонтактнаяИнформация.StandardAttribute.Ref + Catalog.Пользователи.TabularSection.КонтактнаяИнформация.Attribute.ВидДляСписка + Catalog.Пользователи.TabularSection.КонтактнаяИнформация.Attribute.Представление + -1 + -1 + Use true @@ -165,6 +213,44 @@ Use Use + + Подразделение + + ru + Подразделение + + + DefinedType.Подразделение + + + ru + Подразделение, в котором работает пользователь + + + + + Use + Use + + + ФизическоеЛицо + + ru + Физическое лицо + + + DefinedType.ФизическоеЛицо + + + ru + Физическое лицо, с которым связан пользователь + + + + + Use + Use + Комментарий @@ -614,12 +700,30 @@ Use Use + + ВидДляСписка + + ru + Вид для списка + + + CatalogRef.ВидыКонтактнойИнформации + + + ru + Вид контактной информации для списка + + + + Use + Use + ФормаЭлемента ru - Пользователь + Форма элемента @@ -639,7 +743,7 @@ MobileDevice - ПользователиИБ + ПользователиИнформационнойБазы ru Пользователи информационной базы @@ -653,7 +757,7 @@ MobileDevice - ФормаВыбораПользователяОС + ВыборПользователяОперационнойСистемы ru Выбор пользователя операционной системы @@ -666,6 +770,15 @@ PersonalComputer MobileDevice + + ОграничениеНаВходВПрограмму + + ru + Ограничение на вход в программу + + PersonalComputer + MobileDevice + СменаПочты @@ -676,7 +789,7 @@ MobileDevice - ПользователиИБ + ПользователиИнформационнойБазы ru Пользователи информационной базы diff --git a/SSL/src/Catalogs/ПравилаОбработкиЭлектроннойПочты/Forms/ПрименениеПравил/Form.form b/SSL/src/Catalogs/ПравилаОбработкиЭлектроннойПочты/Forms/ПрименениеПравил/Form.form index bae6a4511..ee85d9b2b 100644 --- a/SSL/src/Catalogs/ПравилаОбработкиЭлектроннойПочты/Forms/ПрименениеПравил/Form.form +++ b/SSL/src/Catalogs/ПравилаОбработкиЭлектроннойПочты/Forms/ПрименениеПравил/Form.form @@ -588,7 +588,6 @@ true true true - UseIfNecessary auto true @@ -785,7 +784,7 @@ Применить - Auto + DontUse Auto @@ -811,7 +810,7 @@ Picture - Auto + DontUse Auto @@ -837,7 +836,7 @@ Picture - Auto + DontUse Auto diff --git a/SSL/src/Catalogs/ПравилаОбработкиЭлектроннойПочты/Forms/ПрименениеПравил/Module.bsl b/SSL/src/Catalogs/ПравилаОбработкиЭлектроннойПочты/Forms/ПрименениеПравил/Module.bsl index 337a87a63..d6bff543f 100644 --- a/SSL/src/Catalogs/ПравилаОбработкиЭлектроннойПочты/Forms/ПрименениеПравил/Module.bsl +++ b/SSL/src/Catalogs/ПравилаОбработкиЭлектроннойПочты/Forms/ПрименениеПравил/Module.bsl @@ -147,9 +147,13 @@ &НаСервере Функция ПрименитьПравилаНаСервере() - ПараметрыВыгрузки = Новый Структура( - "ТаблицаПравил,ДляПисемВПапке,ВключаяПодчиненные, УчетнаяЗапись", - ПрименяемыеПравила.Выгрузить(),ДляПисемВПапке, ВключаяПодчиненные, УчетнаяЗапись); + ПараметрыВыгрузки = Новый Структура; + + ПараметрыВыгрузки.Вставить("ТаблицаПравил", ПрименяемыеПравила.Выгрузить()); + ПараметрыВыгрузки.Вставить("ДляПисемВПапке", ДляПисемВПапке); + ПараметрыВыгрузки.Вставить("ВключаяПодчиненные", ВключаяПодчиненные); + ПараметрыВыгрузки.Вставить("УчетнаяЗапись", УчетнаяЗапись); + ЗаполнитьЗначенияСвойств(ПараметрыВыгрузки, ЭтотОбъект); НаименованиеЗадания = НСтр("ru = 'Применение правил'") + " "; diff --git a/SSL/src/Catalogs/ПравилаОбработкиЭлектроннойПочты/Forms/ФормаСписка/Form.form b/SSL/src/Catalogs/ПравилаОбработкиЭлектроннойПочты/Forms/ФормаСписка/Form.form index 625407af1..fc385b01a 100644 --- a/SSL/src/Catalogs/ПравилаОбработкиЭлектроннойПочты/Forms/ФормаСписка/Form.form +++ b/SSL/src/Catalogs/ПравилаОбработкиЭлектроннойПочты/Forms/ФормаСписка/Form.form @@ -430,7 +430,6 @@ true true true - UseIfNecessary auto true @@ -488,7 +487,7 @@ ПереместитьЭлементВверх - Auto + DontUse Auto @@ -513,7 +512,7 @@ ПереместитьЭлементВниз - Auto + DontUse Auto @@ -535,7 +534,7 @@ ПрименитьПравила - Auto + DontUse Auto diff --git a/SSL/src/Catalogs/ПравилаОбработкиЭлектроннойПочты/Forms/ФормаЭлемента/Form.form b/SSL/src/Catalogs/ПравилаОбработкиЭлектроннойПочты/Forms/ФормаЭлемента/Form.form index 82b008f9d..a3b89a61a 100644 --- a/SSL/src/Catalogs/ПравилаОбработкиЭлектроннойПочты/Forms/ФормаЭлемента/Form.form +++ b/SSL/src/Catalogs/ПравилаОбработкиЭлектроннойПочты/Forms/ФормаЭлемента/Form.form @@ -279,7 +279,6 @@ true true true - UseIfNecessary auto true diff --git a/SSL/src/Catalogs/ПредопределенныеВариантыОтчетов/ObjectModule.bsl b/SSL/src/Catalogs/ПредопределенныеВариантыОтчетов/ObjectModule.bsl index f7ca348a2..7814ad1f9 100644 --- a/SSL/src/Catalogs/ПредопределенныеВариантыОтчетов/ObjectModule.bsl +++ b/SSL/src/Catalogs/ПредопределенныеВариантыОтчетов/ObjectModule.bsl @@ -28,7 +28,7 @@ КонецПроцедуры Функция НеЗаполненоПоле(ИмяПоля) - Возврат СтрЗаменить(НСтр("ru = 'Не заполнено поле ""%1""'"), "%1", ИмяПоля); + Возврат СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Не заполнено поле ""%1""'"), ИмяПоля); КонецФункции #КонецОбласти diff --git a/SSL/src/Catalogs/ПредопределенныеВариантыОтчетов/ПредопределенныеВариантыОтчетов.mdo b/SSL/src/Catalogs/ПредопределенныеВариантыОтчетов/ПредопределенныеВариантыОтчетов.mdo index ceee291d6..20ca85047 100644 --- a/SSL/src/Catalogs/ПредопределенныеВариантыОтчетов/ПредопределенныеВариантыОтчетов.mdo +++ b/SSL/src/Catalogs/ПредопределенныеВариантыОтчетов/ПредопределенныеВариантыОтчетов.mdo @@ -303,6 +303,23 @@ Use Use + + КлючЗамеров + + ru + Ключ замеров + + + String + + 135 + + + + + + Use + diff --git a/SSL/src/Catalogs/ПредопределенныеВариантыОтчетовРасширений/ManagerModule.bsl b/SSL/src/Catalogs/ПредопределенныеВариантыОтчетовРасширений/ManagerModule.bsl new file mode 100644 index 000000000..4ed219f04 --- /dev/null +++ b/SSL/src/Catalogs/ПредопределенныеВариантыОтчетовРасширений/ManagerModule.bsl @@ -0,0 +1,33 @@ +#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда + +#Область ПрограммныйИнтерфейс + +// Возвращает реквизиты справочника, которые образуют естественный ключ +// для элементов справочника. +// +// Возвращаемое значение: Массив(Строка) - массив имен реквизитов, образующих +// естественный ключ. +// +Функция ПоляЕстественногоКлюча() Экспорт + + Результат = Новый Массив(); + + Результат.Добавить("Отчет"); + Результат.Добавить("КлючВарианта"); + + Возврат Результат; + +КонецФункции + +// Реквизиты, которые разрешается изменять сразу для нескольких объектов. +Функция РеквизитыРедактируемыеВГрупповойОбработке() Экспорт + + Результат = Новый Массив; + + Возврат Результат; + +КонецФункции + +#КонецОбласти + +#КонецЕсли \ 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..d19bc6586 --- /dev/null +++ b/SSL/src/Catalogs/ПредопределенныеВариантыОтчетовРасширений/ObjectModule.bsl @@ -0,0 +1,30 @@ +#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда + +#Область ОбработчикиСобытий + +Процедура ПередЗаписью(Отказ) + Если ДополнительныеСвойства.Свойство("ЗаполнениеПредопределенных") Тогда + ПроверитьЗаполнениеПредопределенного(Отказ); + КонецЕсли; + Если ОбменДанными.Загрузка Тогда + Возврат; + КонецЕсли; + Если Не ДополнительныеСвойства.Свойство("ЗаполнениеПредопределенных") Тогда + ВызватьИсключение НСтр("ru = 'Справочник ""Предопределенные варианты отчетов"" изменяется только при автоматическом заполнении его данных.'"); + КонецЕсли; +КонецПроцедуры + +// Базовые проверки корректности данных предопределенных вариантов отчетов. +Процедура ПроверитьЗаполнениеПредопределенного(Отказ) + Если ПометкаУдаления Тогда + Возврат; + ИначеЕсли Не ЗначениеЗаполнено(Отчет) Тогда + ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Не заполнено поле ""%1""'"), "Отчет"); + Иначе + Возврат; + КонецЕсли; +КонецПроцедуры + +#КонецОбласти + +#КонецЕсли \ No newline at end of file diff --git a/SSL/src/Catalogs/ПредопределенныеВариантыОтчетовРасширений/ПредопределенныеВариантыОтчетовРасширений.mdo b/SSL/src/Catalogs/ПредопределенныеВариантыОтчетовРасширений/ПредопределенныеВариантыОтчетовРасширений.mdo new file mode 100644 index 000000000..bd60a600b --- /dev/null +++ b/SSL/src/Catalogs/ПредопределенныеВариантыОтчетовРасширений/ПредопределенныеВариантыОтчетовРасширений.mdo @@ -0,0 +1,398 @@ + + + + + + + + + + ПредопределенныеВариантыОтчетовРасширений + + ru + Предопределенные варианты отчетов расширений + + Предопределенные варианты отчетов конфигурации + true + Catalog.ПредопределенныеВариантыОтчетовРасширений.StandardAttribute.Description + DontUse + + Use + PredefinedDataName + + Use + + + + + Use + Predefined + + Use + + + + + Use + Ref + + Use + + + + + Use + DeletionMark + + Use + + + + + Use + IsFolder + + Use + + + + + Use + Owner + true + + ShowError + Use + + + + + Use + Parent + + ru + Отчет + + + ru + Отчет, который содержит этот вариант отчета + + true + + Catalog.ПредопределенныеВариантыОтчетов.EmptyRef + + Use + + + + + Use + Description + + ru + + + + ShowError + Use + + + + + Use + Code + + Use + + + + Use + Managed + Use + + ru + Предопределенный вариант отчета + + true + HierarchyOfItems + 2 + true + 150 + String + Variable + AsDescription + InDialog + BothWays + + Отчет + + ru + Отчет + + + CatalogRef.ИдентификаторыОбъектовРасширений + + + ru + + + + + + Index + Use + + + КлючВарианта + + ru + Ключ варианта + + + String + + 256 + + + + ru + + + + + + Index + Use + + + Включен + + ru + Включен + + + Boolean + + + ru + + + + + + Index + Use + + + ГруппироватьПоОтчету + + ru + Группировать по отчету + + + Boolean + + + + + Index + Use + + + ВидимостьПоУмолчанию + + ru + Видимость по умолчанию + + + Boolean + + + ru + + + + + + Use + + + Описание + + ru + Описание + + + String + + + + ru + + + + + + Use + Use + + + ХешНастроек + + ru + Хеш настроек + + + String + + 32 + + + + ru + Используется при обновлении программы. + + + + + Use + + + НаименованияПолей + + ru + Наименования полей + + + String + + + + ru + Наименования полей, выведенных в отчете. +Используется при поиске. + + true + true + + + + Use + Use + + + НаименованияПараметровИОтборов + + ru + Наименования параметров и отборов + + + String + + + + ru + Наименования параметров и отборов отчета. +Используется при поиске. + + true + true + + + + Use + Use + + + КлючЗамеров + + ru + Ключ замеров + + + String + + 135 + + + + + + Use + + + + + + + Размещение + + ru + Размещение + + + Use + LineNumber + + Use + + + + + Подсистема + + ru + Подсистема + + + CatalogRef.ИдентификаторыОбъектовРасширений + CatalogRef.ИдентификаторыОбъектовМетаданных + + + ru + Раздел или группа + + + + Use + Index + + + Важный + + ru + Важный + + + Boolean + + + ru + + + + + Use + Index + + + СмТакже + + ru + См также + + Вариант находится в группе "См. также" + + Boolean + + + ru + + + + + Use + Index + + + diff --git a/SSL/src/Catalogs/ПрограммыЭлектроннойПодписиИШифрования/Forms/ОшибкаОбращенияКПрограмме/Form.form b/SSL/src/Catalogs/ПрограммыЭлектроннойПодписиИШифрования/Forms/ОшибкаОбращенияКПрограмме/Form.form index 36a664a35..4696d7548 100644 --- a/SSL/src/Catalogs/ПрограммыЭлектроннойПодписиИШифрования/Forms/ОшибкаОбращенияКПрограмме/Form.form +++ b/SSL/src/Catalogs/ПрограммыЭлектроннойПодписиИШифрования/Forms/ОшибкаОбращенияКПрограмме/Form.form @@ -318,7 +318,7 @@ ПерейтиКНастройкеПрограмм - Auto + DontUse Auto @@ -340,7 +340,7 @@ УстановитьРасширение - Auto + DontUse Auto @@ -358,7 +358,7 @@ СкопироватьВБуферОбмена - Auto + DontUse Auto diff --git a/SSL/src/Catalogs/ПрограммыЭлектроннойПодписиИШифрования/Forms/ФормаЭлемента/Form.form b/SSL/src/Catalogs/ПрограммыЭлектроннойПодписиИШифрования/Forms/ФормаЭлемента/Form.form index ad37a8895..117b215f2 100644 --- a/SSL/src/Catalogs/ПрограммыЭлектроннойПодписиИШифрования/Forms/ФормаЭлемента/Form.form +++ b/SSL/src/Catalogs/ПрограммыЭлектроннойПодписиИШифрования/Forms/ФормаЭлемента/Form.form @@ -329,7 +329,6 @@ true true true - UseIfNecessary auto true @@ -455,7 +454,7 @@ УстановитьПометкуУдаления - Auto + DontUse Auto diff --git a/SSL/src/Catalogs/ПрограммыЭлектроннойПодписиИШифрования/Forms/ФормаЭлемента/Module.bsl b/SSL/src/Catalogs/ПрограммыЭлектроннойПодписиИШифрования/Forms/ФормаЭлемента/Module.bsl index d4bb48ea1..92c9c81af 100644 --- a/SSL/src/Catalogs/ПрограммыЭлектроннойПодписиИШифрования/Forms/ФормаЭлемента/Module.bsl +++ b/SSL/src/Catalogs/ПрограммыЭлектроннойПодписиИШифрования/Forms/ФормаЭлемента/Module.bsl @@ -212,8 +212,9 @@ КонецЕсли; Если ОбщегоНазначенияКлиентСервер.ЭтоLinuxКлиент() Тогда - ПутьКПрограмме = ЭлектроннаяПодписьКлиентСервер.ПерсональныеНастройки( - ).ПутиКПрограммамЭлектроннойПодписиИШифрования.Получить(Объект.Ссылка); + ПерсональныеНастройки = ЭлектроннаяПодписьКлиентСервер.ПерсональныеНастройки(); + ПутьКПрограмме = ПерсональныеНастройки.ПутиКПрограммамЭлектроннойПодписиИШифрования.Получить( + Объект.Ссылка); Иначе ПутьКПрограмме = ""; КонецЕсли; diff --git a/SSL/src/Catalogs/ПрограммыЭлектроннойПодписиИШифрования/ManagerModule.bsl b/SSL/src/Catalogs/ПрограммыЭлектроннойПодписиИШифрования/ManagerModule.bsl index 9a8b0a252..6b51cefe0 100644 --- a/SSL/src/Catalogs/ПрограммыЭлектроннойПодписиИШифрования/ManagerModule.bsl +++ b/SSL/src/Catalogs/ПрограммыЭлектроннойПодписиИШифрования/ManagerModule.bsl @@ -26,12 +26,6 @@ КонецПроцедуры -Процедура ОбработкаПолученияДанныхВыбора(ДанныеВыбора, Параметры, СтандартнаяОбработка) - - Параметры.Отбор.Вставить("ПометкаУдаления", Ложь); - -КонецПроцедуры - #КонецОбласти #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда diff --git a/SSL/src/Catalogs/ПроизводственныеКалендари/Forms/ФормаЭлемента/Form.form b/SSL/src/Catalogs/ПроизводственныеКалендари/Forms/ФормаЭлемента/Form.form index 2540cd767..5bd2aad42 100644 --- a/SSL/src/Catalogs/ПроизводственныеКалендари/Forms/ФормаЭлемента/Form.form +++ b/SSL/src/Catalogs/ПроизводственныеКалендари/Forms/ФормаЭлемента/Form.form @@ -648,7 +648,6 @@ true true true - UseIfNecessary auto true @@ -852,7 +851,7 @@ true - Auto + DontUse Auto @@ -875,7 +874,7 @@ true - Auto + DontUse Auto @@ -902,7 +901,7 @@ TextPicture true - Auto + DontUse Auto @@ -928,7 +927,7 @@ TextPicture - Auto + DontUse Auto diff --git a/SSL/src/Catalogs/ПроизводственныеКалендари/Forms/ФормаЭлемента/Module.bsl b/SSL/src/Catalogs/ПроизводственныеКалендари/Forms/ФормаЭлемента/Module.bsl index b9a80506f..e884ea1a3 100644 --- a/SSL/src/Catalogs/ПроизводственныеКалендари/Forms/ФормаЭлемента/Module.bsl +++ b/SSL/src/Catalogs/ПроизводственныеКалендари/Forms/ФормаЭлемента/Module.bsl @@ -67,14 +67,10 @@ ЗаписыватьДанныеГрафика = Ложь; Если Модифицированность Тогда - ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Записать измененные данные за %1 год?'"), - Формат(НомерПредыдущегоГода, "ЧГ=0")); - + ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Записать измененные данные за %1 год?'"), Формат(НомерПредыдущегоГода, "ЧГ=0")); Оповещение = Новый ОписаниеОповещения("НомерТекущегоГодаПриИзмененииЗавершение", ЭтотОбъект); ПоказатьВопрос(Оповещение, ТекстСообщения, РежимДиалогаВопрос.ДаНет); Возврат; - КонецЕсли; ОбработатьИзменениеГода(ЗаписыватьДанныеГрафика); @@ -126,16 +122,20 @@ ДатаПереноса = ВыделенныеДаты[0]; ВидДня = ВидыДней.Получить(ДатаПереноса); - ПараметрыВыбораДаты = Новый Структура; - ПараметрыВыбораДаты.Вставить("НачальноеЗначение", ДатаПереноса); - ПараметрыВыбораДаты.Вставить("НачалоПериодаОтображения", НачалоГода(Календарь)); - ПараметрыВыбораДаты.Вставить("КонецПериодаОтображения", КонецГода(Календарь)); - ПараметрыВыбораДаты.Вставить("Заголовок", НСтр("ru = 'Выбор даты переноса'")); - ПараметрыВыбораДаты.Вставить("ПоясняющийТекст", СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Выберите дату, на которую будет осуществлен - |перенос дня %1 (%2)'"), - Формат(ДатаПереноса, "ДФ='д ММММ'"), - ВидДня)); + ПараметрыВыбораДаты = Новый Структура( + "НачальноеЗначение, + |НачалоПериодаОтображения, + |КонецПериодаОтображения, + |Заголовок, + |ПоясняющийТекст"); + + ПараметрыВыбораДаты.НачальноеЗначение = ДатаПереноса; + ПараметрыВыбораДаты.НачалоПериодаОтображения = НачалоГода(Календарь); + ПараметрыВыбораДаты.КонецПериодаОтображения = КонецГода(Календарь); + ПараметрыВыбораДаты.Заголовок = НСтр("ru = 'Выбор даты переноса'"); + + ТекстСообщения = НСтр("ru = 'Выберите дату, на которую будет осуществлен перенос дня %1 (%2)'"); + ПараметрыВыбораДаты.ПоясняющийТекст = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ТекстСообщения, Формат(ДатаПереноса, "ДФ='д ММММ'"), ВидДня); ОткрытьФорму("ОбщаяФорма.ВыборДаты", ПараметрыВыбораДаты, ЭтотОбъект); @@ -378,12 +378,7 @@ КонецЕсли; ВидДняИсточник = ПредставлениеВидаДняПереноса(Форма.ВидыДней.Получить(ДатаПриемник), ДатаИсточник); ВидДняПриемник = ПредставлениеВидаДняПереноса(Форма.ВидыДней.Получить(ДатаИсточник), ДатаПриемник); - Форма.СписокПереносов.Добавить(ДатаИсточник, СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = '%1 (%3) перенесен на %2 (%4)'"), - Формат(ДатаИсточник, "ДФ='д ММММ'"), - Формат(ДатаПриемник, "ДФ='д ММММ'"), - ВидДняИсточник, - ВидДняПриемник)); + Форма.СписокПереносов.Добавить(ДатаИсточник, СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = '%1 (%3) перенесен на %2 (%4)'"), Формат(ДатаИсточник, "ДФ='д ММММ'"), Формат(ДатаПриемник, "ДФ='д ММММ'"), ВидДняИсточник, ВидДняПриемник)); КонецЦикла; Форма.СписокПереносов.СортироватьПоЗначению(); diff --git a/SSL/src/Catalogs/ПроизводственныеКалендари/ManagerModule.bsl b/SSL/src/Catalogs/ПроизводственныеКалендари/ManagerModule.bsl index f84045fdd..c34b68716 100644 --- a/SSL/src/Catalogs/ПроизводственныеКалендари/ManagerModule.bsl +++ b/SSL/src/Catalogs/ПроизводственныеКалендари/ManagerModule.bsl @@ -513,7 +513,7 @@ Процедура ДобавитьПраздничныйДень(ПраздничныеДни, ПраздничныйДень, НомерГода, ПереноситьВыходной = Истина) - ДеньМесяц = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(ПраздничныйДень, "."); + ДеньМесяц = СтрРазделить(ПраздничныйДень, "."); НоваяСтрока = ПраздничныеДни.Добавить(); НоваяСтрока.Дата = Дата(НомерГода, ДеньМесяц[1], ДеньМесяц[0]); @@ -643,8 +643,7 @@ ВыборкаПоКварталу = ВыборкаПоГоду.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам); Пока ВыборкаПоКварталу.Следующий() Цикл НомерКвартала = Макет.ПолучитьОбласть("Квартал"); - НомерКвартала.Параметры.НомерКвартала = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = '%1 квартал'"), ВыборкаПоКварталу.КварталКалендаря); + НомерКвартала.Параметры.НомерКвартала = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = '%1 квартал'"), ВыборкаПоКварталу.КварталКалендаря); ТабличныйДокумент.Вывести(НомерКвартала); ШапкаКвартала = Макет.ПолучитьОбласть("ШапкаКвартала"); @@ -745,8 +744,7 @@ КолонкаМесяца.Параметры.РабочееВремя24 = РабочееВремя24Кв; КолонкаМесяца.Параметры.КалендарныеДни = КалендарныеДниКв; КолонкаМесяца.Параметры.РабочиеДни = РабочиеДниКв; - КолонкаМесяца.Параметры.ИмяМесяца = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = '%1 квартал'"), ВыборкаПоКварталу.КварталКалендаря); + КолонкаМесяца.Параметры.ИмяМесяца = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = '%1 квартал'"), ВыборкаПоКварталу.КварталКалендаря); ТабличныйДокумент.Присоединить(КолонкаМесяца); Если ВыборкаПоКварталу.КварталКалендаря = 2 @@ -758,8 +756,7 @@ КолонкаМесяца.Параметры.РабочееВремя24 = РабочееВремя24Полугодие1; КолонкаМесяца.Параметры.КалендарныеДни = КалендарныеДниПолугодие1; КолонкаМесяца.Параметры.РабочиеДни = РабочиеДниПолугодие1; - КолонкаМесяца.Параметры.ИмяМесяца = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = '%1 полугодие'"), ВыборкаПоКварталу.КварталКалендаря / 2); + КолонкаМесяца.Параметры.ИмяМесяца = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = '%1 полугодие'"), ВыборкаПоКварталу.КварталКалендаря / 2); ТабличныйДокумент.Присоединить(КолонкаМесяца); КонецЕсли; @@ -772,8 +769,7 @@ КолонкаМесяца.Параметры.РабочееВремя24 = РабочееВремя24Год; КолонкаМесяца.Параметры.КалендарныеДни = КалендарныеДниГод; КолонкаМесяца.Параметры.РабочиеДни = РабочиеДниГод; - КолонкаМесяца.Параметры.ИмяМесяца = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = '%1 год'"), Формат(ВыборкаПоГоду.ГодКалендаря, "ЧГ=")); + КолонкаМесяца.Параметры.ИмяМесяца = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = '%1 год'"), Формат(ВыборкаПоГоду.ГодКалендаря, "ЧГ=")); ТабличныйДокумент.Присоединить(КолонкаМесяца); КонецЦикла; @@ -782,8 +778,7 @@ КолонкаМесяца.Параметры.РабочееВремя40 = РабочееВремя40Год; КолонкаМесяца.Параметры.РабочееВремя36 = РабочееВремя36Год; КолонкаМесяца.Параметры.РабочееВремя24 = РабочееВремя24Год; - КолонкаМесяца.Параметры.ИмяМесяца = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = '%1 год'"), Формат(НомерГода, "ЧГ=")); + КолонкаМесяца.Параметры.ИмяМесяца = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = '%1 год'"), Формат(НомерГода, "ЧГ=")); ТабличныйДокумент.Вывести(КолонкаМесяца); КолонкаМесяца = Макет.ПолучитьОбласть("КолонкаМесяцаСр"); diff --git a/SSL/src/Catalogs/ПрофилиГруппДоступа/Commands/ГруппыДоступа/CommandModule.bsl b/SSL/src/Catalogs/ПрофилиГруппДоступа/Commands/ГруппыДоступа/CommandModule.bsl index 5cadb480b..9669b328f 100644 --- a/SSL/src/Catalogs/ПрофилиГруппДоступа/Commands/ГруппыДоступа/CommandModule.bsl +++ b/SSL/src/Catalogs/ПрофилиГруппДоступа/Commands/ГруппыДоступа/CommandModule.bsl @@ -1,3 +1,4 @@ +#Область ОбработчикиСобытий &НаКлиенте Процедура ОбработкаКоманды(ПараметрКоманды, ПараметрыВыполненияКоманды) @@ -7,3 +8,5 @@ ОткрытьФорму("Справочник.ГруппыДоступа.ФормаСписка", ПараметрыФормы, ПараметрыВыполненияКоманды.Источник, ПараметрыВыполненияКоманды.Уникальность, ПараметрыВыполненияКоманды.Окно); КонецПроцедуры + +#КонецОбласти diff --git a/SSL/src/Catalogs/ПрофилиГруппДоступа/Forms/ФормаВыбораГруппы/Form.form b/SSL/src/Catalogs/ПрофилиГруппДоступа/Forms/ФормаВыбораГруппы/Form.form index 17e1c5324..605a351a2 100644 --- a/SSL/src/Catalogs/ПрофилиГруппДоступа/Forms/ФормаВыбораГруппы/Form.form +++ b/SSL/src/Catalogs/ПрофилиГруппДоступа/Forms/ФормаВыбораГруппы/Form.form @@ -240,7 +240,6 @@ true true true - UseIfNecessary auto true diff --git a/SSL/src/Catalogs/ПрофилиГруппДоступа/Forms/ФормаВыбораГруппы/Module.bsl b/SSL/src/Catalogs/ПрофилиГруппДоступа/Forms/ФормаВыбораГруппы/Module.bsl index 888205793..251194b06 100644 --- a/SSL/src/Catalogs/ПрофилиГруппДоступа/Forms/ФормаВыбораГруппы/Module.bsl +++ b/SSL/src/Catalogs/ПрофилиГруппДоступа/Forms/ФормаВыбораГруппы/Module.bsl @@ -11,10 +11,10 @@ ОбщегоНазначенияКлиентСервер.УстановитьЭлементОтбораДинамическогоСписка( Список, "ЭтоГруппа", Истина, , , Истина); - // Отбор не помеченных на удаление. - ОбщегоНазначенияКлиентСервер.УстановитьЭлементОтбораДинамическогоСписка( - Список, "ПометкаУдаления", Ложь, , , Истина, - РежимОтображенияЭлементаНастройкиКомпоновкиДанных.Обычный); + Если ОбщегоНазначенияПовтИсп.ЭтоАвтономноеРабочееМесто() Тогда + ТолькоПросмотр = Истина; + КонецЕсли; + КонецПроцедуры #КонецОбласти diff --git a/SSL/src/Catalogs/ПрофилиГруппДоступа/Forms/ФормаГруппы/Form.form b/SSL/src/Catalogs/ПрофилиГруппДоступа/Forms/ФормаГруппы/Form.form index 2e557dfec..17f49b743 100644 --- a/SSL/src/Catalogs/ПрофилиГруппДоступа/Forms/ФормаГруппы/Form.form +++ b/SSL/src/Catalogs/ПрофилиГруппДоступа/Forms/ФормаГруппы/Form.form @@ -100,6 +100,10 @@ Left true + + OnCreateAtServer + ПриСозданииНаСервере + LockOwner true true @@ -108,7 +112,6 @@ true true true - UseIfNecessary auto true diff --git a/SSL/src/Catalogs/ПрофилиГруппДоступа/Forms/ФормаГруппы/Module.bsl b/SSL/src/Catalogs/ПрофилиГруппДоступа/Forms/ФормаГруппы/Module.bsl new file mode 100644 index 000000000..c486b3210 --- /dev/null +++ b/SSL/src/Catalogs/ПрофилиГруппДоступа/Forms/ФормаГруппы/Module.bsl @@ -0,0 +1,17 @@ + +#Область ОбработчикиСобытийФормы + +&НаСервере +Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) + + Если Параметры.Свойство("АвтоТест") Тогда // Возврат при получении формы для анализа. + Возврат; + КонецЕсли; + + Если ОбщегоНазначенияПовтИсп.ЭтоАвтономноеРабочееМесто() Тогда + ТолькоПросмотр = Истина; + КонецЕсли; + +КонецПроцедуры + +#КонецОбласти diff --git a/SSL/src/Catalogs/ПрофилиГруппДоступа/Forms/ФормаСписка/Form.form b/SSL/src/Catalogs/ПрофилиГруппДоступа/Forms/ФормаСписка/Form.form index b530452ac..20bf39d5c 100644 --- a/SSL/src/Catalogs/ПрофилиГруппДоступа/Forms/ФормаСписка/Form.form +++ b/SSL/src/Catalogs/ПрофилиГруппДоступа/Forms/ФормаСписка/Form.form @@ -1,34 +1,165 @@ - - ПоказатьПрофили - 17 - - <key>ru</key> - <value>Показать</value> - + + ГруппаНастроек + 33 + + ПоказатьПрофили + 17 + + <key>ru</key> + <value>Показать</value> + + true + true + + true + + + ПоказатьПрофили + + Button + + OnChange + ПоказатьПрофилиПриИзменении + + + ПоказатьПрофилиРасширеннаяПодсказка + 19 + + <key>ru</key> + <value>Поставляемые профили входят в состав конфигурации (обновляются автоматически). +Непоставляемые профили - все остальные (обновляются вручную). +Устаревшие профили содержат удаленные роли (не обновлены вручную).</value> + + Label + true + true + + Left + + + + ПоказатьПрофилиКонтекстноеМеню + 18 + true + + InputField + Enter + true + Left + true + + true + true + false + true + true + true + true + true + + + ru + Все профили + + + ВсеПрофили + + + + + ru + Поставляемые + + + Поставляемые + + + + + ru + Непоставляемые + + + Непоставляемые + + + + + ru + Устаревшие + + + Устаревшие + + + Normal + + + + ВидПользователей + 35 + + <key>ru</key> + <value>Назначение</value> + + true + true + + true + + + ВидПользователей + + + ВидПользователейРасширеннаяПодсказка + 37 + Label + true + true + + Left + + + + ВидПользователейКонтекстноеМеню + 36 + true + + InputField + Enter + true + Left + true + + + StartChoice + ВидПользователейНачалоВыбора + + + Clearing + ВидПользователейОчистка + + true + true + true + true + true + true + true + true + Normal + + true true true - - ПоказатьПрофили - - Button - - OnChange - ПоказатьПрофилиПриИзменении - - ПоказатьПрофилиРасширеннаяПодсказка - 19 - - <key>ru</key> - <value>Поставляемые профили входят в состав конфигурации (обновляются автоматически). -Непоставляемые профили - все остальные (обновляются вручную). -Устаревшие профили содержат удаленные роли (не обновлены вручную).</value> - + ГруппаНастроекРасширеннаяПодсказка + 34 Label true true @@ -36,62 +167,13 @@ Left - - ПоказатьПрофилиКонтекстноеМеню - 18 - true - - InputField - Enter - true - Left - true - - true - true - false - true - true - true - true - true - - - ru - Все профили - - - ВсеПрофили - - - - - ru - Поставляемые - - - Поставляемые - - - - - ru - Непоставляемые - - - Непоставляемые - - - - - ru - Устаревшие - - - Устаревшие - - - Normal + UsualGroup + + Auto + true + true + Auto + Auto @@ -397,7 +479,6 @@ true true true - UseIfNecessary auto true @@ -413,7 +494,7 @@ true - Список.Пользователь + Список.Predefined Список.Ref @@ -457,6 +538,24 @@ true + + ВидПользователей + + <key>ru</key> + <value>Вид пользователей</value> + + 3 + + String + + + + true + + + true + + diff --git a/SSL/src/Catalogs/ПрофилиГруппДоступа/Forms/ФормаСписка/Help/ru.html b/SSL/src/Catalogs/ПрофилиГруппДоступа/Forms/ФормаСписка/Help/ru.html index 73d3abac1..bf42af2aa 100644 --- a/SSL/src/Catalogs/ПрофилиГруппДоступа/Forms/ФормаСписка/Help/ru.html +++ b/SSL/src/Catalogs/ПрофилиГруппДоступа/Forms/ФормаСписка/Help/ru.html @@ -7,7 +7,9 @@
        • Все профили (по умолчанию);
        • Поставляемые - профили, входящие в поставку программы;
        • Непоставляемые - профили, которые не входят в поставку программы; -
        • Устаревшие.

      Основные и дополнительные профили групп доступа

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

    • Различают основные и дополнительные профили групп доступа:
      • Основной профиль описывает некоторую совокупность прав доступа, достаточную для выполнения в программе определенного участка работ.
      • С помощью дополнительных профилей пользователям могут быть выданы какие-либо вспомогательные права дополнительно к основному профилю. diff --git a/SSL/src/Catalogs/ПрофилиГруппДоступа/Forms/ФормаСписка/Module.bsl b/SSL/src/Catalogs/ПрофилиГруппДоступа/Forms/ФормаСписка/Module.bsl index ddd55959b..296ba1803 100644 --- a/SSL/src/Catalogs/ПрофилиГруппДоступа/Forms/ФормаСписка/Module.bsl +++ b/SSL/src/Catalogs/ПрофилиГруппДоступа/Forms/ФормаСписка/Module.bsl @@ -20,11 +20,6 @@ Список, "Ссылка", Справочники.ПрофилиГруппДоступа.Администратор, ВидСравненияКомпоновкиДанных.НеРавно, , Истина); - // Отбор не помеченных на удаление. - ОбщегоНазначенияКлиентСервер.УстановитьЭлементОтбораДинамическогоСписка( - Список, "ПометкаУдаления", Ложь, , , Истина, - РежимОтображенияЭлементаНастройкиКомпоновкиДанных.Обычный); - Элементы.Список.РежимВыбора = Истина; Элементы.Список.ВыборГруппИЭлементов = Параметры.ВыборГруппИЭлементов; @@ -51,6 +46,11 @@ Иначе Элементы.ПоказатьПрофили.Видимость = Ложь; КонецЕсли; + + Если ОбщегоНазначенияПовтИсп.ЭтоАвтономноеРабочееМесто() Тогда + ТолькоПросмотр = Истина; + КонецЕсли; + КонецПроцедуры #КонецОбласти @@ -62,6 +62,20 @@ УстановитьОтбор(); КонецПроцедуры +&НаКлиенте +Процедура ВидПользователейНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка) + ОписаниеОповещения = Новый ОписаниеОповещения("ПослеВыбораНазначения", ЭтотОбъект); + ПользователиСлужебныйКлиент.ВыбратьНазначение(ЭтотОбъект, Нстр("ru = 'Выбор назначения профилей'"), Истина, Истина, ОписаниеОповещения); +КонецПроцедуры + +&НаКлиенте +Процедура ВидПользователейОчистка(Элемент, СтандартнаяОбработка) + + ОбщегоНазначенияКлиентСервер.УстановитьЭлементОтбораДинамическогоСписка( + Список, "Ссылка.Назначение.ТипПользователей",,,, Ложь); + +КонецПроцедуры + #КонецОбласти #Область СлужебныеПроцедурыИФункции @@ -105,4 +119,15 @@ КонецПроцедуры +&НаКлиенте +Процедура ПослеВыбораНазначения(МассивТипов, ДополнительныеПараметры) Экспорт + + Используется = МассивТипов.Количество() <> 0; + + ОбщегоНазначенияКлиентСервер.УстановитьЭлементОтбораДинамическогоСписка( + Список, "Ссылка.Назначение.ТипПользователей", + МассивТипов, ВидСравненияКомпоновкиДанных.ВСписке,, Используется); + +КонецПроцедуры + #КонецОбласти \ No newline at end of file diff --git a/SSL/src/Catalogs/ПрофилиГруппДоступа/Forms/ФормаЭлемента/Form.form b/SSL/src/Catalogs/ПрофилиГруппДоступа/Forms/ФормаЭлемента/Form.form index e2371d60f..388244fb1 100644 --- a/SSL/src/Catalogs/ПрофилиГруппДоступа/Forms/ФормаЭлемента/Form.form +++ b/SSL/src/Catalogs/ПрофилиГруппДоступа/Forms/ФормаЭлемента/Form.form @@ -82,6 +82,103 @@ Normal + + ГруппаНазначение + 381 + + ЗаголовокНазначение + 385 + + <key>ru</key> + <value>Назначение:</value> + + true + true + + true + + + ЗаголовокНазначениеРасширеннаяПодсказка + 387 + Label + true + true + + Left + + + + ЗаголовокНазначениеКонтекстноеМеню + 386 + true + + Label + 9 + true + true + + Left + + + + ВыбратьНазначение + 383 + true + true + + true + + + ВыбратьНазначениеРасширеннаяПодсказка + 384 + Label + true + true + + Left + + + Hyperlink + Form.Command.ВыбратьНазначение + Normal + Auto + true + true + UserCmds + Auto + + true + true + + true + + + <key>ru</key> + <value>Группа назначение</value> + + + ru + Группа назначение + + + ГруппаНазначениеРасширеннаяПодсказка + 382 + Label + true + true + + Left + + + UsualGroup + + Auto + true + true + Auto + Auto + + Доступ 242 @@ -1610,7 +1707,6 @@ true true true - UseIfNecessary auto true @@ -1988,7 +2084,7 @@ ВосстановитьПоНачальномуЗаполнению - Auto + DontUse Auto @@ -2014,7 +2110,7 @@ TextPicture - Auto + DontUse Auto @@ -2040,7 +2136,7 @@ true - Auto + DontUse Auto @@ -2066,7 +2162,7 @@ true - Auto + DontUse Auto @@ -2092,7 +2188,7 @@ TextPicture - Auto + DontUse Auto @@ -2114,7 +2210,30 @@ ПоказыватьНеиспользуемыеВидыДоступа - Auto + DontUse + Auto + + + ВыбратьНазначение + + <key>ru</key> + <value>Выбрать назначение</value> + + 3 + + ru + Выбрать назначение + + + true + + + + ВыбратьНазначение + + + true + DontUse Auto diff --git a/SSL/src/Catalogs/ПрофилиГруппДоступа/Forms/ФормаЭлемента/Help/ru.html b/SSL/src/Catalogs/ПрофилиГруппДоступа/Forms/ФормаЭлемента/Help/ru.html index f03fa9e38..80166576d 100644 --- a/SSL/src/Catalogs/ПрофилиГруппДоступа/Forms/ФормаЭлемента/Help/ru.html +++ b/SSL/src/Catalogs/ПрофилиГруппДоступа/Forms/ФормаЭлемента/Help/ru.html @@ -6,6 +6,7 @@

        Ввод профиля групп доступа

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

        Разрешенные действия (роли) 

        diff --git a/SSL/src/Catalogs/ПрофилиГруппДоступа/Forms/ФормаЭлемента/Module.bsl b/SSL/src/Catalogs/ПрофилиГруппДоступа/Forms/ФормаЭлемента/Module.bsl index a757aacdb..40a1f444d 100644 --- a/SSL/src/Catalogs/ПрофилиГруппДоступа/Forms/ФормаЭлемента/Module.bsl +++ b/SSL/src/Catalogs/ПрофилиГруппДоступа/Forms/ФормаЭлемента/Module.bsl @@ -25,8 +25,9 @@ БезРедактированияПоставляемыхЗначений = ТолькоПросмотр ИЛИ НЕ Объект.Ссылка.Пустая() И Справочники.ПрофилиГруппДоступа.ЗапретИзмененияПрофиля(Объект); + РазделениеВключено = ОбщегоНазначенияПовтИсп.РазделениеВключено(); Если Объект.Ссылка = Справочники.ПрофилиГруппДоступа.Администратор - И Не Пользователи.ЭтоПолноправныйПользователь(,ОбщегоНазначенияПовтИсп.РежимРаботыПрограммы().Локальный) Тогда + И Не Пользователи.ЭтоПолноправныйПользователь(, Не РазделениеВключено) Тогда ТолькоПросмотр = Истина; КонецЕсли; @@ -35,6 +36,7 @@ // Настройка редактирования видов доступа. Элементы.ВидыДоступа.ТолькоПросмотр = БезРедактированияПоставляемыхЗначений; Элементы.ЗначенияДоступа.ТолькоПросмотр = БезРедактированияПоставляемыхЗначений; + Элементы.ВыбратьНазначение.Доступность = Не БезРедактированияПоставляемыхЗначений; ОбработатьИнтерфейсРолей("УстановитьТолькоПросмотрРолей", БезРедактированияПоставляемыхЗначений); @@ -42,6 +44,12 @@ ВыполненаПроцедураПриСозданииНаСервере = Истина; + ПользователиСлужебный.ОбновитьНазначениеПриСозданииНаСервере(ЭтотОбъект); + + Если ОбщегоНазначенияПовтИсп.ЭтоАвтономноеРабочееМесто() Тогда + ТолькоПросмотр = Истина; + КонецЕсли; + КонецПроцедуры &НаСервере @@ -162,17 +170,13 @@ ЭлементыДерева = Роли.ПолучитьЭлементы(); Для каждого Строка Из ЭлементыДерева Цикл - Если Строка.Пометка И Лев(Строка.Синоним, 1) = "?" Тогда + Если Строка.Пометка И СтрНачинаетсяС(Строка.Синоним, "?") Тогда ОбщегоНазначенияКлиентСервер.ДобавитьОшибкуПользователю(Ошибки, "Роли[%1].РолиСиноним", - СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Роль ""%1"" не найдена в метаданных.'"), - Строка.Синоним), + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Роль ""%1"" не найдена в метаданных.'"), Строка.Синоним), "Роли", ЭлементыДерева.Индекс(Строка), - СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Роль ""%2"" в строке %1 не найдена в метаданных.'"), - "%1", Строка.Синоним)); + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Роль ""%1"" в строке %%1 не найдена в метаданных.'"), Строка.Синоним)); КонецЕсли; КонецЦикла; @@ -434,6 +438,12 @@ КонецПроцедуры +&НаКлиенте +Процедура ВыбратьНазначение(Команда) + ОписаниеОповещения = Новый ОписаниеОповещения("ПослеВыбораНазначения", ЭтотОбъект); + ПользователиСлужебныйКлиент.ВыбратьНазначение(ЭтотОбъект, Нстр("ru = 'Выбор назначения профиля групп доступа'"),,, ОписаниеОповещения); +КонецПроцедуры + #КонецОбласти #Область СлужебныеПроцедурыИФункции @@ -489,13 +499,16 @@ ПользователиСлужебныйКлиент.РазвернутьПодсистемыРолей(ЭтотОбъект); Если ОбновитьГруппыДоступа Тогда - Текст = НСтр("ru = 'Профиль ""%1"" восстановлен по содержимому начального заполнения, группы доступа профиля обновлены.'"); + Текст = + НСтр("ru = 'Профиль ""%1"" восстановлен по содержимому начального заполнения, + |группы доступа профиля обновлены.'"); Иначе - Текст = НСтр("ru = 'Профиль ""%1"" восстановлен по содержимому начального заполнения, группы доступа профиля не обновлены.'"); + Текст = + НСтр("ru = 'Профиль ""%1"" восстановлен по содержимому начального заполнения, + |группы доступа профиля не обновлены.'"); КонецЕсли; - ПоказатьОповещениеПользователя(СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - Текст, Объект.Наименование)); + ПоказатьОповещениеПользователя(СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(Текст, Объект.Наименование)); КонецПроцедуры @@ -577,4 +590,13 @@ КонецПроцедуры +&НаКлиенте +Процедура ПослеВыбораНазначения(Результат, ДополнительныеПараметры) Экспорт + + Если Результат <> Неопределено Тогда + Модифицированность = Истина; + КонецЕсли; + +КонецПроцедуры + #КонецОбласти diff --git a/SSL/src/Catalogs/ПрофилиГруппДоступа/ManagerModule.bsl b/SSL/src/Catalogs/ПрофилиГруппДоступа/ManagerModule.bsl index 969c71ecf..6a78c5dd3 100644 --- a/SSL/src/Catalogs/ПрофилиГруппДоступа/ManagerModule.bsl +++ b/SSL/src/Catalogs/ПрофилиГруппДоступа/ManagerModule.bsl @@ -235,8 +235,7 @@ // Процедура ОбновитьПоставляемыеПрофили(ЕстьИзменения = Неопределено) Экспорт - ПоставляемыеПрофили = УправлениеДоступомСлужебныйПовтИсп.Параметры( - ).ПоставляемыеПрофилиГруппДоступа; + ПоставляемыеПрофили = УправлениеДоступомСлужебныйПовтИсп.Параметры().ПоставляемыеПрофилиГруппДоступа; ОписанияПрофилей = ПоставляемыеПрофили.ОписанияПрофилейМассив; ПараметрыОбновления = ПоставляемыеПрофили.ПараметрыОбновления; @@ -325,21 +324,16 @@ // Процедура ПриЗаполненииСпискаТекущихДел(ТекущиеДела) Экспорт - МодульТекущиеДелаСлужебный = ОбщегоНазначения.ОбщийМодуль("ТекущиеДелаСлужебный"); + МодульТекущиеДелаСервер = ОбщегоНазначения.ОбщийМодуль("ТекущиеДелаСервер"); Если Не Пользователи.ЭтоПолноправныйПользователь(, Истина) - Или МодульТекущиеДелаСлужебный.ДелоОтключено("ПрофилиГруппДоступа") Тогда + Или МодульТекущиеДелаСервер.ДелоОтключено("ПрофилиГруппДоступа") Тогда Возврат; КонецЕсли; - МодульТекущиеДелаСервер = ОбщегоНазначения.ОбщийМодуль("ТекущиеДелаСервер"); // Процедура вызывается только при наличии подсистемы "Текущие дела", поэтому здесь // не делается проверка существования подсистемы. Разделы = МодульТекущиеДелаСервер.РазделыДляОбъекта(Метаданные.Справочники.ПрофилиГруппДоступа.ПолноеИмя()); - Если Разделы = Неопределено Тогда - Возврат; - КонецЕсли; - Для Каждого Раздел Из Разделы Цикл КоличествоНесовместимыхПрофилейГруппДоступа = КоличествоНесовместимыхПрофилейГруппДоступа(); @@ -388,8 +382,7 @@ УстановитьПривилегированныйРежим(Истина); - ПоставляемыеПрофили = УправлениеДоступомСлужебныйПовтИсп.Параметры( - ).ПоставляемыеПрофилиГруппДоступа; + ПоставляемыеПрофили = УправлениеДоступомСлужебныйПовтИсп.Параметры().ПоставляемыеПрофилиГруппДоступа; СвойстваПрофиля = ПоставляемыеПрофили.ОписанияПрофилей.Получить(Идентификатор); @@ -440,8 +433,7 @@ Выборка = Запрос.Выполнить().Выбрать(); Если Выборка.Следующий() Тогда - ПоставляемыеПрофили = УправлениеДоступомСлужебныйПовтИсп.Параметры( - ).ПоставляемыеПрофилиГруппДоступа; + ПоставляемыеПрофили = УправлениеДоступомСлужебныйПовтИсп.Параметры().ПоставляемыеПрофилиГруппДоступа; СвойстваПрофиля = ПоставляемыеПрофили.ОписанияПрофилей.Получить( Строка(Выборка.ИдентификаторПоставляемыхДанных)); @@ -472,9 +464,9 @@ Возврат ОбщегоНазначения.ЗначениеРеквизитаОбъекта(Профиль, "ПоставляемыйПрофильИзменен"); КонецЕсли; - СвойстваПрофиля = УправлениеДоступомСлужебныйПовтИсп.Параметры( - ).ПоставляемыеПрофилиГруппДоступа.ОписанияПрофилей.Получить( - Строка(Профиль.ИдентификаторПоставляемыхДанных)); + ТекущиеПараметры = УправлениеДоступомСлужебныйПовтИсп.Параметры(); + ОписанияПрофилей = ТекущиеПараметры.ПоставляемыеПрофилиГруппДоступа.ОписанияПрофилей; + СвойстваПрофиля = ОписанияПрофилей.Получить(Строка(Профиль.ИдентификаторПоставляемыхДанных)); Если СвойстваПрофиля = Неопределено Тогда Возврат Ложь; @@ -488,7 +480,8 @@ Если Профиль.Роли.Количество() <> ОписаниеРолейПрофиля.Количество() ИЛИ Профиль.ВидыДоступа.Количество() <> СвойстваПрофиля.ВидыДоступа.Количество() - ИЛИ Профиль.ЗначенияДоступа.Количество() <> СвойстваПрофиля.ЗначенияДоступа.Количество() Тогда + ИЛИ Профиль.ЗначенияДоступа.Количество() <> СвойстваПрофиля.ЗначенияДоступа.Количество() + ИЛИ Профиль.Назначение.Количество() <> СвойстваПрофиля.Назначение.Количество() Тогда Возврат Истина; КонецЕсли; @@ -527,6 +520,14 @@ КонецЕсли; КонецЦикла; + Для Каждого ТипПользователей Из СвойстваПрофиля.Назначение Цикл + Отбор = Новый Структура; + Отбор.Вставить("ТипПользователей", ТипПользователей); + Если Профиль.Назначение.НайтиСтроки(Отбор).Количество() = 0 Тогда + Возврат Истина; + КонецЕсли; + КонецЦикла; + Возврат Ложь; КонецФункции @@ -544,8 +545,8 @@ ИдентификаторПоставляемыхДанных = Строка(ОбщегоНазначения.ЗначениеРеквизитаОбъекта( Профиль, "ИдентификаторПоставляемыхДанных")); - СвойстваПрофиля = УправлениеДоступомСлужебныйПовтИсп.Параметры( - ).ПоставляемыеПрофилиГруппДоступа.ОписанияПрофилей.Получить(ИдентификаторПоставляемыхДанных); + ПоставляемыеПрофили = УправлениеДоступомСлужебныйПовтИсп.Параметры().ПоставляемыеПрофилиГруппДоступа; + СвойстваПрофиля = ПоставляемыеПрофили.ОписанияПрофилей.Получить(ИдентификаторПоставляемыхДанных); Возврат СвойстваПрофиля <> Неопределено; @@ -569,8 +570,7 @@ Возврат Истина; КонецЕсли; - ПоставляемыеПрофили = УправлениеДоступомСлужебныйПовтИсп.Параметры( - ).ПоставляемыеПрофилиГруппДоступа; + ПоставляемыеПрофили = УправлениеДоступомСлужебныйПовтИсп.Параметры().ПоставляемыеПрофилиГруппДоступа; СвойстваПрофиля = ПоставляемыеПрофили.ОписанияПрофилей.Получить( Строка(Профиль.ИдентификаторПоставляемыхДанных)); @@ -593,8 +593,8 @@ ИдентификаторПоставляемыхДанных = Строка(ОбщегоНазначения.ЗначениеРеквизитаОбъекта( Профиль, "ИдентификаторПоставляемыхДанных")); - СвойстваПрофиля = УправлениеДоступомСлужебныйПовтИсп.Параметры( - ).ПоставляемыеПрофилиГруппДоступа.ОписанияПрофилей.Получить(ИдентификаторПоставляемыхДанных); + ПоставляемыеПрофили = УправлениеДоступомСлужебныйПовтИсп.Параметры().ПоставляемыеПрофилиГруппДоступа; + СвойстваПрофиля = ПоставляемыеПрофили.ОписанияПрофилей.Получить(ИдентификаторПоставляемыхДанных); Текст = ""; Если СвойстваПрофиля <> Неопределено Тогда @@ -622,8 +622,8 @@ ИдентификаторПоставляемыхДанных = Строка(ОбщегоНазначения.ЗначениеРеквизитаОбъекта( Профиль, "ИдентификаторПоставляемыхДанных")); - СвойстваПрофиля = УправлениеДоступомСлужебныйПовтИсп.Параметры( - ).ПоставляемыеПрофилиГруппДоступа.ОписанияПрофилей.Получить(ИдентификаторПоставляемыхДанных); + ПоставляемыеПрофили = УправлениеДоступомСлужебныйПовтИсп.Параметры().ПоставляемыеПрофилиГруппДоступа; + СвойстваПрофиля = ПоставляемыеПрофили.ОписанияПрофилей.Получить(ИдентификаторПоставляемыхДанных); Если СвойстваПрофиля <> Неопределено Тогда @@ -643,8 +643,7 @@ УстановитьПривилегированныйРежим(Истина); - ПоставляемыеПрофили = УправлениеДоступомСлужебныйПовтИсп.Параметры( - ).ПоставляемыеПрофилиГруппДоступа; + ПоставляемыеПрофили = УправлениеДоступомСлужебныйПовтИсп.Параметры().ПоставляемыеПрофилиГруппДоступа; СсылкиПоставляемыхПрофилей = Новый Массив; @@ -816,11 +815,11 @@ Если ПараметрыОбновления.ЗапретитьИзменениеПрофилей И НЕ ПараметрыОбновления.ОбновлятьИзмененныеПрофили Тогда - ВызватьИсключение ЗаголовокОшибки + - НСтр("ru = 'Когда в параметре ПараметрыОбновления свойство - |ОбновлятьИзмененныеПрофили установлено Ложь, - |тогда свойство ЗапретитьИзменениеПрофилей тоже - |должно быть установлено Ложь.'"); + ВызватьИсключение ЗаголовокОшибки + + НСтр("ru = 'Когда в параметре ПараметрыОбновления свойство + |ОбновлятьИзмененныеПрофили установлено Ложь, + |тогда свойство ЗапретитьИзменениеПрофилей тоже + |должно быть установлено Ложь.'"); КонецЕсли; // Описание для заполнения предопределенного профиля "Администратор". @@ -850,6 +849,40 @@ СвойстваПрофилей = Новый Соответствие; ОписанияПрофилейМассив = Новый Массив; Для каждого ОписаниеПрофиля Из ОписанияПрофилей Цикл + // Назначение профиля. + Если ОписаниеПрофиля.Назначение.Количество() = 0 Тогда + ОписаниеПрофиля.Назначение.Добавить(Тип("СправочникСсылка.Пользователи")); + КонецЕсли; + МассивНазначений = Новый Массив; + Для Каждого Тип Из ОписаниеПрофиля.Назначение Цикл + Если ТипЗнч(Тип) = Тип("ОписаниеТипов") Тогда + Типы = Тип.Типы(); + Иначе + Типы = ОбщегоНазначенияКлиентСервер.ЗначениеВМассиве(Тип); + КонецЕсли; + Для Каждого Тип Из Типы Цикл + Если ТипЗнч(Тип) <> Тип("Тип") + Или Не Метаданные.ОпределяемыеТипы.Пользователь.Тип.СодержитТип(Тип) + Или Тип <> Тип("СправочникСсылка.Пользователи") + И Не Метаданные.ОпределяемыеТипы.ВнешнийПользователь.Тип.СодержитТип(Тип) Тогда + ВызватьИсключение ЗаголовокОшибки + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'В описании профиля ""%1"" + |указано недопустимое назначение ""%2 (%3)"". + |Ожидается назначение, как значение типа ""Тип"" для ссылки, + |указанное в определяемом типе Пользователь и + |указанное в определяемом типе ВнешнийПользователь + |(кроме типа СправочникСсылка.Пользователи).'"), + ?(ЗначениеЗаполнено(ОписаниеПрофиля.Имя), + ОписаниеПрофиля.Имя, + ОписаниеПрофиля.Идентификатор), + Строка(Тип), Строка(ТипЗнч(Тип))); + КонецЕсли; + ОписаниеТипаСсылки = Новый ОписаниеТипов(ОбщегоНазначенияКлиентСервер.ЗначениеВМассиве(Тип)); + Значение = ОписаниеТипаСсылки.ПривестиЗначение(Неопределено); + МассивНазначений.Добавить(Значение); + КонецЦикла; + КонецЦикла; + ОписаниеПрофиля.Назначение = МассивНазначений; // Проверка наличия ролей в метаданных. Для каждого Роль Из ОписаниеПрофиля.Роли Цикл Если ВсеРоли.Получить(Роль) = Неопределено Тогда @@ -949,11 +982,11 @@ КонецЕсли; ОбъектМетаданных = Неопределено; - ПозицияТочки = Найти(ЗначениеДоступа, "."); + ПозицияТочки = СтрНайти(ЗначениеДоступа, "."); Если ПозицияТочки > 0 Тогда ВидОбъектаМетаданных = Лев(ЗначениеДоступа, ПозицияТочки - 1); ОстатокСтроки = Сред(ЗначениеДоступа, ПозицияТочки + 1); - ПозицияТочки = Найти(ОстатокСтроки, "."); + ПозицияТочки = СтрНайти(ОстатокСтроки, "."); Если ПозицияТочки > 0 Тогда ИмяОбъектаМетаданных = Лев(ОстатокСтроки, ПозицияТочки - 1); ПолноеИмяОбъектаМетаданных = ВидОбъектаМетаданных + "." + ИмяОбъектаМетаданных; @@ -1123,7 +1156,7 @@ Роль); КонецЕсли; ПрофильОбъект.Роли.Добавить().Роль = - ОбщегоНазначения.ИдентификаторОбъектаМетаданных(МетаданныеРоли) + ОбщегоНазначения.ИдентификаторОбъектаМетаданных(МетаданныеРоли); КонецЦикла; ПрофильОбъект.ВидыДоступа.Очистить(); @@ -1144,6 +1177,12 @@ СтрокаЗначения.ЗначениеДоступа = Запрос.Выполнить().Выгрузить()[0].Значение; КонецЦикла; + ПрофильОбъект.Назначение.Очистить(); + Для каждого ТипНазначения Из СвойстваПрофиля.Назначение Цикл + СтрокаНазначения = ПрофильОбъект.Назначение.Добавить(); + СтрокаНазначения.ТипПользователей = ТипНазначения; + КонецЦикла; + Если НеОбновлятьРолиПользователей Тогда ПрофильОбъект.ДополнительныеСвойства.Вставить("НеОбновлятьРолиПользователей"); КонецЕсли; diff --git a/SSL/src/Catalogs/ПрофилиГруппДоступа/ObjectModule.bsl b/SSL/src/Catalogs/ПрофилиГруппДоступа/ObjectModule.bsl index 28e788a44..18a85dc81 100644 --- a/SSL/src/Catalogs/ПрофилиГруппДоступа/ObjectModule.bsl +++ b/SSL/src/Catalogs/ПрофилиГруппДоступа/ObjectModule.bsl @@ -218,11 +218,7 @@ |ИНДЕКСИРОВАТЬ ПО | Данные.Роль"; - Запрос.Текст = Запрос.Текст + " - |; - | - |//////////////////////////////////////////////////////////////////////////////// - |" + + ТекстЗапроса = "ВЫБРАТЬ РАЗЛИЧНЫЕ | ПраваРолей.ОбъектМетаданных |ИЗ @@ -230,6 +226,12 @@ | ВНУТРЕННЕЕ СОЕДИНЕНИЕ ИзмененныеРоли КАК ИзмененныеРоли | ПО ПраваРолей.Роль = ИзмененныеРоли.Роль"; + Запрос.Текст = Запрос.Текст + " + |; + | + |//////////////////////////////////////////////////////////////////////////////// + |" + ТекстЗапроса; + РезультатыЗапросов = Запрос.ВыполнитьПакет(); Если НЕ ДополнительныеСвойства.Свойство("НеОбновлятьРолиПользователей") diff --git a/SSL/src/Catalogs/ПрофилиГруппДоступа/ПрофилиГруппДоступа.mdo b/SSL/src/Catalogs/ПрофилиГруппДоступа/ПрофилиГруппДоступа.mdo index 2a18a6ddd..10db27d4d 100644 --- a/SSL/src/Catalogs/ПрофилиГруппДоступа/ПрофилиГруппДоступа.mdo +++ b/SSL/src/Catalogs/ПрофилиГруппДоступа/ПрофилиГруппДоступа.mdo @@ -207,7 +207,7 @@ Роли ru - Разрешенные действия (роли) + Роли Use @@ -221,7 +221,7 @@ Роль ru - Разрешенное действие (роль) + Роль CatalogRef.ИдентификаторыОбъектовМетаданных @@ -396,6 +396,44 @@ Use
        + + + + + + Назначение + + ru + Назначение + + ShowError + + Use + LineNumber + + Use + + + + + ТипПользователей + + ru + Тип пользователей + + + DefinedType.Пользователь + + + ru + Пустая ссылка на допустимый тип объектов авторизации + + + + Use + Use + + ФормаЭлемента diff --git a/SSL/src/Catalogs/РассылкиОтчетов/Forms/ПараметрыFTP/Form.form b/SSL/src/Catalogs/РассылкиОтчетов/Forms/ПараметрыFTP/Form.form index 8b1013029..a78245d86 100644 --- a/SSL/src/Catalogs/РассылкиОтчетов/Forms/ПараметрыFTP/Form.form +++ b/SSL/src/Catalogs/РассылкиОтчетов/Forms/ПараметрыFTP/Form.form @@ -91,6 +91,12 @@ true true true + + 1 + + + 65535 + Normal
        @@ -349,7 +355,6 @@ true true true - UseIfNecessary auto true @@ -512,7 +517,7 @@ TextPicture - Auto + DontUse Auto @@ -538,7 +543,7 @@ TextPicture - Auto + DontUse Auto diff --git a/SSL/src/Catalogs/РассылкиОтчетов/Forms/ПараметрыFTP/Module.bsl b/SSL/src/Catalogs/РассылкиОтчетов/Forms/ПараметрыFTP/Module.bsl index 12e13c32d..7dcb9fad6 100644 --- a/SSL/src/Catalogs/РассылкиОтчетов/Forms/ПараметрыFTP/Module.bsl +++ b/SSL/src/Catalogs/РассылкиОтчетов/Forms/ПараметрыFTP/Module.bsl @@ -9,8 +9,6 @@ КонецЕсли; РеквизитСправочника = Метаданные.Справочники.РассылкиОтчетов.Реквизиты.FTPПорт; - ЗаполнитьЗначенияСвойств(Элементы.Порт, РеквизитСправочника, "Подсказка, МаксимальноеЗначение, МинимальноеЗначение"); - ЗаполнитьЗначенияСвойств(ЭтотОбъект, Параметры, "Сервер, Каталог, Порт, Логин, Пароль, ПассивноеСоединение"); Если ЭтотОбъект.Сервер = "" Тогда ЭтотОбъект.Сервер = "сервер"; @@ -43,7 +41,7 @@ Если Логин = "" Тогда ПолныйАдрес = "ftp://"+ Сервер +":"+ Формат(Порт, "ЧН=21; ЧГ=0") + Каталог; Иначе - ПолныйАдрес = "ftp://"+ Логин +":"+ Пароль +"@"+ Сервер +":"+ Формат(Порт, "ЧН=0; ЧГ=0") + Каталог; + ПолныйАдрес = "ftp://"+ Логин +":"+ ?(ЗначениеЗаполнено(Пароль), ПарольСкрыт(), "") +"@"+ Сервер +":"+ Формат(Порт, "ЧН=0; ЧГ=0") + Каталог; КонецЕсли; КонецЕсли; @@ -64,7 +62,7 @@ &НаКлиентеНаСервереБезКонтекста Процедура ВидимостьДоступность(Форма, Изменения = "") - Если Прав(Форма.Каталог, 1) <> "/" Тогда + Если Не СтрЗаканчиваетсяНа(Форма.Каталог, "/") Тогда Форма.Каталог = Форма.Каталог + "/"; КонецЕсли; Форма.СерверИКаталог = "ftp://"+ Форма.Сервер + Форма.Каталог; @@ -73,9 +71,18 @@ &НаКлиенте Процедура ЗаполнитьЗавершение(РезультатВвода, ДополнительныеПараметры) Экспорт Если РезультатВвода <> Неопределено Тогда + ПарольДоВвода = Пароль; ЗаполнитьЗначенияСвойств(ЭтотОбъект, РассылкаОтчетовКлиентСервер.РазобратьFTPАдрес(РезультатВвода)); + Если Пароль = ПарольСкрыт() Тогда + Пароль = ПарольДоВвода; + КонецЕсли; ВидимостьДоступность(ЭтотОбъект); КонецЕсли; КонецПроцедуры +&НаКлиенте +Функция ПарольСкрыт() + Возврат НСтр("ru = '<пароль скрыт>'"); +КонецФункции + #КонецОбласти diff --git a/SSL/src/Catalogs/РассылкиОтчетов/Forms/ПолучателиРассылки/Form.form b/SSL/src/Catalogs/РассылкиОтчетов/Forms/ПолучателиРассылки/Form.form index 500ce312c..b55fdc60c 100644 --- a/SSL/src/Catalogs/РассылкиОтчетов/Forms/ПолучателиРассылки/Form.form +++ b/SSL/src/Catalogs/РассылкиОтчетов/Forms/ПолучателиРассылки/Form.form @@ -842,7 +842,7 @@ ПолучателиПодобрать - Auto + DontUse Auto @@ -864,7 +864,7 @@ ОК - Auto + DontUse Auto @@ -889,7 +889,7 @@ ВставитьИзБуфераОбмена - Auto + DontUse Auto diff --git a/SSL/src/Catalogs/РассылкиОтчетов/Forms/ПолучателиРассылки/Module.bsl b/SSL/src/Catalogs/РассылкиОтчетов/Forms/ПолучателиРассылки/Module.bsl index 132de7cbe..895641998 100644 --- a/SSL/src/Catalogs/РассылкиОтчетов/Forms/ПолучателиРассылки/Module.bsl +++ b/SSL/src/Catalogs/РассылкиОтчетов/Forms/ПолучателиРассылки/Module.bsl @@ -265,11 +265,11 @@ &НаСервере Процедура УстановитьУсловноеОформление() - Инструкция = ВариантыОтчетов.ИнструкцияУсловногоОформления(); + Инструкция = СтандартныеПодсистемыСервер.ИнструкцияУсловногоОформления(); Инструкция.Поля = "ПолучателиПолучатель, ПолучателиИсключен"; Инструкция.Отборы.Вставить("Получатели.Исключен", Истина); Инструкция.Оформление.Вставить("ЦветТекста", ЦветаСтиля.ПросроченныеДанныеЦвет); - ВариантыОтчетов.ДобавитьЭлементУсловногоОформления(ЭтотОбъект, Инструкция); + СтандартныеПодсистемыСервер.ДобавитьЭлементУсловногоОформления(ЭтотОбъект, Инструкция); КонецПроцедуры &НаСервере diff --git a/SSL/src/Catalogs/РассылкиОтчетов/Forms/ФормаВыбораГруппы/Form.form b/SSL/src/Catalogs/РассылкиОтчетов/Forms/ФормаВыбораГруппы/Form.form index 15544be83..283781ec7 100644 --- a/SSL/src/Catalogs/РассылкиОтчетов/Forms/ФормаВыбораГруппы/Form.form +++ b/SSL/src/Catalogs/РассылкиОтчетов/Forms/ФормаВыбораГруппы/Form.form @@ -264,7 +264,6 @@ true true true - UseIfNecessary auto true diff --git a/SSL/src/Catalogs/РассылкиОтчетов/Forms/ФормаГруппы/Form.form b/SSL/src/Catalogs/РассылкиОтчетов/Forms/ФормаГруппы/Form.form index 32976903e..b1c44e7b2 100644 --- a/SSL/src/Catalogs/РассылкиОтчетов/Forms/ФормаГруппы/Form.form +++ b/SSL/src/Catalogs/РассылкиОтчетов/Forms/ФормаГруппы/Form.form @@ -100,7 +100,6 @@ true true true - UseIfNecessary auto true diff --git a/SSL/src/Catalogs/РассылкиОтчетов/Forms/ФормаСписка/Form.form b/SSL/src/Catalogs/РассылкиОтчетов/Forms/ФормаСписка/Form.form index 760eb6cb2..274b7dda0 100644 --- a/SSL/src/Catalogs/РассылкиОтчетов/Forms/ФормаСписка/Form.form +++ b/SSL/src/Catalogs/РассылкиОтчетов/Forms/ФормаСписка/Form.form @@ -1650,6 +1650,10 @@ -1 Left + + OnOpen + ПриОткрытии + OnCreateAtServer ПриСозданииНаСервере @@ -1662,7 +1666,6 @@ true true true - UseIfNecessary auto true @@ -1789,6 +1792,24 @@ + + ТекстОшибкиПриОткрытии + + <key>ru</key> + <value>Текст ошибки при открытии</value> + + 3 + + String + + + + true + + + true + + ИзменитьВыделенные @@ -1808,7 +1829,7 @@ <name>ИзменитьВыделенные</name> </handler> </action> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <commandInterface> diff --git a/SSL/src/Catalogs/РассылкиОтчетов/Forms/ФормаСписка/Module.bsl b/SSL/src/Catalogs/РассылкиОтчетов/Forms/ФормаСписка/Module.bsl index faf8663c4..4899844c0 100644 --- a/SSL/src/Catalogs/РассылкиОтчетов/Forms/ФормаСписка/Module.bsl +++ b/SSL/src/Catalogs/РассылкиОтчетов/Forms/ФормаСписка/Module.bsl @@ -2,17 +2,21 @@ &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) - Если Параметры.Свойство("АвтоТест") Тогда // Возврат при получении формы для анализа. Возврат; КонецЕсли; + ТекстОшибкиПриОткрытии = РассылкаОтчетовПовтИсп.ТекстОшибкиПроверкиПраваДобавления(); + Если ЗначениеЗаполнено(ТекстОшибкиПриОткрытии) Тогда + Возврат; + КонецЕсли; + // Установка отборов динамического списка. ОбщегоНазначенияКлиентСервер.УстановитьЭлементОтбораДинамическогоСписка( Список, "ВыполнятьПоРасписанию", Ложь, ВидСравненияКомпоновкиДанных.Равно, , Ложь, РежимОтображенияЭлементаНастройкиКомпоновкиДанных.Обычный); - + ОбщегоНазначенияКлиентСервер.УстановитьЭлементОтбораДинамическогоСписка( Список, "ПериодичностьРасписания", , ВидСравненияКомпоновкиДанных.Равно, , Ложь, @@ -55,6 +59,14 @@ КонецЕсли; КонецПроцедуры +&НаКлиенте +Процедура ПриОткрытии(Отказ) + Если ЗначениеЗаполнено(ТекстОшибкиПриОткрытии) Тогда + Отказ = Истина; + ПоказатьПредупреждение(, ТекстОшибкиПриОткрытии); + КонецЕсли; +КонецПроцедуры + #КонецОбласти #Область ОбработчикиКомандФормы diff --git a/SSL/src/Catalogs/РассылкиОтчетов/Forms/ФормаЭлемента/Form.form b/SSL/src/Catalogs/РассылкиОтчетов/Forms/ФормаЭлемента/Form.form index 07369f6bb..09cbbd119 100644 --- a/SSL/src/Catalogs/РассылкиОтчетов/Forms/ФормаЭлемента/Form.form +++ b/SSL/src/Catalogs/РассылкиОтчетов/Forms/ФормаЭлемента/Form.form @@ -7602,7 +7602,7 @@ ru - Спсобы доставки рассылки до получателей + Способы доставки рассылки до получателей СтраницаДоставкаExtendedTooltip @@ -8407,8 +8407,12 @@ true - Объект.ПарольАрхива + ПарольАрхива + + OnChange + ПарольАрхиваПриИзменении + ПарольАрхиваExtendedTooltip 935 @@ -8434,6 +8438,7 @@ true true true + true true true true @@ -10450,24 +10455,6 @@ true - - ПредставлениеРасписания - - <key>ru</key> - <value>Представление расписания</value> - - 54 - - String - - - - true - - - true - - ПараметрыФоновогоЗадания @@ -10523,6 +10510,134 @@ <common>true</common> </edit> </attributes> + <attributes> + <name>ПарольАрхива</name> + <title> + <key>ru</key> + <value>Пароль архива</value> + + 58 + + String + + 50 + + + + true + + + true + + + + FTPПароль + + <key>ru</key> + <value>FTPПароль</value> + + 59 + + String + + 50 + + + + true + + + true + + + + FTPПарольИзменен + + <key>ru</key> + <value>FTPПароль изменен</value> + + 60 + + Boolean + + + true + + + true + + + + ПарольАрхиваИзменен + + <key>ru</key> + <value>Пароль архива изменен</value> + + 61 + + Boolean + + + true + + + true + + + + ТекстОшибкиПриОткрытии + + <key>ru</key> + <value>Текст ошибки при открытии</value> + + 62 + + String + + + + true + + + true + + + + ТекстВсплывающегоОповещенияПриОткрытии + + <key>ru</key> + <value>Текст всплывающего оповещения при открытии</value> + + 64 + + String + + + + true + + + true + + + + ПредставлениеРасписания + + <key>ru</key> + <value>Представление расписания</value> + + 65 + + String + + + + true + + + true + + ДобавитьИзменитьШаблонДатыРассылки @@ -10544,7 +10659,7 @@ </action> <representation>TextPicture</representation> <modifiesStoredData>true</modifiesStoredData> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <formCommands> @@ -10568,7 +10683,7 @@ </action> <representation>TextPicture</representation> <modifiesStoredData>true</modifiesStoredData> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <formCommands> @@ -10592,7 +10707,7 @@ </action> <representation>TextPicture</representation> <modifiesStoredData>true</modifiesStoredData> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <formCommands> @@ -10614,7 +10729,7 @@ <name>ДобавитьОтчет</name> </handler> </action> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <formCommands> @@ -10639,7 +10754,7 @@ <name>ДобавитьДополнительныйОтчет</name> </handler> </action> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <formCommands> @@ -10661,7 +10776,7 @@ <name>ПроверитьПубликацию</name> </handler> </action> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <formCommands> @@ -10685,7 +10800,7 @@ </action> <representation>TextPicture</representation> <modifiesStoredData>true</modifiesStoredData> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <formCommands> @@ -10709,7 +10824,7 @@ </action> <representation>TextPicture</representation> <modifiesStoredData>true</modifiesStoredData> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <formCommands> @@ -10735,7 +10850,7 @@ </handler> </action> <representation>TextPicture</representation> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <formCommands> @@ -10761,7 +10876,7 @@ </handler> </action> <representation>TextPicture</representation> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <formCommands> @@ -10785,7 +10900,7 @@ </action> <representation>TextPicture</representation> <modifiesStoredData>true</modifiesStoredData> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <formCommands> @@ -10809,7 +10924,7 @@ </action> <representation>TextPicture</representation> <modifiesStoredData>true</modifiesStoredData> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <formCommands> @@ -10832,7 +10947,7 @@ </handler> </action> <representation>TextPicture</representation> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <formCommands> @@ -10852,7 +10967,7 @@ </action> <representation>TextPicture</representation> <modifiesStoredData>true</modifiesStoredData> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <formCommands> @@ -10878,7 +10993,7 @@ </handler> </action> <representation>Picture</representation> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <formCommands> @@ -10904,7 +11019,7 @@ </handler> </action> <representation>Picture</representation> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <formCommands> @@ -10926,7 +11041,7 @@ <name>ИзменитьТипТекстаНаHTML</name> </handler> </action> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <formCommands> @@ -10948,7 +11063,7 @@ <name>ИзменитьТипТекстаНаОбычный</name> </handler> </action> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <formCommands> @@ -10971,7 +11086,7 @@ </handler> </action> <representation>TextPicture</representation> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <formCommands> @@ -10998,7 +11113,7 @@ </action> <representation>TextPicture</representation> <modifiesStoredData>true</modifiesStoredData> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <formCommands> @@ -11023,7 +11138,7 @@ <name>СнятьПометкиОтправлятьЕслиПустой</name> </handler> </action> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <formCommands> @@ -11048,7 +11163,7 @@ <name>УстановитьПометкиОтправлятьЕслиПустой</name> </handler> </action> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <formCommands> @@ -11074,7 +11189,7 @@ </handler> </action> <representation>TextPicture</representation> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <formCommands> @@ -11100,7 +11215,7 @@ <name>КомандаЗаписать</name> </handler> </action> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <formCommands> @@ -11125,7 +11240,7 @@ <name>КомандаЗаписатьИЗакрыть</name> </handler> </action> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <commandInterface> @@ -11149,5 +11264,9 @@ <event>BeforeWriteAtServer</event> <name>ПередЗаписьюНаСервере</name> </handlers> + <handlers> + <event>OnWriteAtServer</event> + <name>ПриЗаписиНаСервере</name> + </handlers> </extInfo> </form:Form> diff --git a/SSL/src/Catalogs/РассылкиОтчетов/Forms/ФормаЭлемента/Module.bsl b/SSL/src/Catalogs/РассылкиОтчетов/Forms/ФормаЭлемента/Module.bsl index 673988ada..f9d30685d 100644 --- a/SSL/src/Catalogs/РассылкиОтчетов/Forms/ФормаЭлемента/Module.bsl +++ b/SSL/src/Catalogs/РассылкиОтчетов/Forms/ФормаЭлемента/Module.bsl @@ -27,10 +27,15 @@ &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) - УстановитьУсловноеОформление(); Если Параметры.Свойство("АвтоТест") Тогда Возврат; КонецЕсли; + УстановитьУсловноеОформление(); + + ТекстОшибкиПриОткрытии = РассылкаОтчетовПовтИсп.ТекстОшибкиПроверкиПраваДобавления(); + Если ЗначениеЗаполнено(ТекстОшибкиПриОткрытии) Тогда + Возврат; + КонецЕсли; Если Объект.ПометкаУдаления Тогда ЭтотОбъект.ТолькоПросмотр = Истина; @@ -181,13 +186,19 @@ ЗафиксироватьЗначенияРеквизитовДоИзменения(); - ПравоВывода = ПравоДоступа("Вывод", Метаданные); - СтандартныеПодсистемыСервер.УстановитьОтображениеЗаголовковГрупп(ЭтотОбъект); Для Каждого Строка Из Объект.Отчеты Цикл Строка.НеОтправлятьПустой = Не Строка.ОтправлятьЕслиПустой; КонецЦикла; + Если Не ЭтоНовый Тогда + УстановитьПривилегированныйРежим(Истина); + Пароли = ОбщегоНазначения.ПрочитатьДанныеИзБезопасногоХранилища(Объект.Ссылка, "ПарольАрхива, FTPПароль"); + УстановитьПривилегированныйРежим(Ложь); + ПарольАрхива = ?(ЗначениеЗаполнено(Пароли.ПарольАрхива), ЭтотОбъект.УникальныйИдентификатор, ""); + FTPПароль = ?(ЗначениеЗаполнено(Пароли.FTPПароль), ЭтотОбъект.УникальныйИдентификатор, ""); + КонецЕсли; + КонецПроцедуры &НаКлиенте @@ -195,8 +206,13 @@ Если ФормаБылаМодифицированаНаСервере Тогда Модифицированность = Истина; КонецЕсли; - Если Не ПравоВывода Тогда - ПоказатьПредупреждение(, НСтр("ru = 'Недостаточно прав на вывод информации. Рассылки отчетов не будут выполнены.'")); + Если ЗначениеЗаполнено(ТекстОшибкиПриОткрытии) Тогда + Отказ = Истина; + ПоказатьПредупреждение(, ТекстОшибкиПриОткрытии); + Возврат; + КонецЕсли; + Если ЗначениеЗаполнено(ТекстВсплывающегоОповещенияПриОткрытии) Тогда + ПоказатьОповещениеПользователя(ТекстВсплывающегоОповещенияПриОткрытии, , , БиблиотекаКартинок.ВыполнитьЗадачу) КонецЕсли; КонецПроцедуры @@ -463,6 +479,23 @@ ТекущийОбъект.ДополнительныеСвойства.Вставить("Расписание", Расписание); КонецПроцедуры +&НаСервере +Процедура ПриЗаписиНаСервере(Отказ, ТекущийОбъект, ПараметрыЗаписи) + + Если ПарольАрхиваИзменен Тогда + УстановитьПривилегированныйРежим(Истина); + ОбщегоНазначения.ЗаписатьДанныеВБезопасноеХранилище(ТекущийОбъект.Ссылка, ПарольАрхива, "ПарольАрхива"); + УстановитьПривилегированныйРежим(Ложь); + КонецЕсли; + + Если FTPПарольИзменен Тогда + УстановитьПривилегированныйРежим(Истина); + ОбщегоНазначения.ЗаписатьДанныеВБезопасноеХранилище(ТекущийОбъект.Ссылка, FTPПароль, "FTPПароль"); + УстановитьПривилегированныйРежим(Ложь); + КонецЕсли; + +КонецПроцедуры + &НаСервере Процедура ПослеЗаписиНаСервере(ТекущийОбъект, ПараметрыЗаписи) // Перезаполнение таблиц формы, связанных с таблицами объектов (т.к. таблицы объектов уже перезаполнились). @@ -637,12 +670,13 @@ &НаКлиенте Процедура FTPСерверИКаталогНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка) - ПараметрыПроизвольнойФормы = Новый Структура("Сервер, Каталог, Порт, Логин, Пароль, ПассивноеСоединение"); + ПараметрыПроизвольнойФормы = Новый Структура("Сервер, Каталог, Порт, Логин, ПассивноеСоединение"); Для Каждого КлючИЗначение Из ПараметрыПроизвольнойФормы Цикл ПараметрыПроизвольнойФормы[КлючИЗначение.Ключ] = Объект["FTP" + КлючИЗначение.Ключ]; КонецЦикла; + ПараметрыПроизвольнойФормы.Вставить("Пароль", FTPПароль); ПараметрыПроизвольнойФормы.Вставить("Заголовок", НСтр("ru = '<Укажите получателя>'")); - + ОткрытьФорму("Справочник.РассылкиОтчетов.Форма.ПараметрыFTP", ПараметрыПроизвольнойФормы, Элемент); КонецПроцедуры @@ -653,8 +687,16 @@ Возврат; КонецЕсли; Для Каждого КлючИЗначение Из ВыбранноеЗначение Цикл - Объект["FTP" + КлючИЗначение.Ключ] = КлючИЗначение.Значение; + Если КлючИЗначение.Ключ <> "Пароль" Тогда + Объект["FTP" + КлючИЗначение.Ключ] = КлючИЗначение.Значение; + Иначе + Если FTPПароль <> КлючИЗначение.Значение Тогда + FTPПароль = КлючИЗначение.Значение; + FTPПарольИзменен = Истина; + КонецЕсли; + КонецЕсли; КонецЦикла; + ВидимостьДоступностьКорректность(ЭтотОбъект, "FTPСерверИКаталог"); Модифицированность = Истина; КонецПроцедуры @@ -666,15 +708,12 @@ &НаКлиенте Процедура FTPСерверИКаталогОткрытие(Элемент, СтандартнаяОбработка) + СтандартнаяОбработка = Ложь; - ПолныйАдрес = Объект.FTPСервер +":"+ Формат(Объект.FTPПорт, "ЧН=21; ЧГ=0") + Объект.FTPКаталог; - Если Объект.FTPЛогин = "" Тогда - ПолныйАдрес = "ftp://"+ ПолныйАдрес; - Иначе - ПолныйАдрес = "ftp://"+ Объект.FTPЛогин +":"+ Объект.FTPПароль +"@"+ ПолныйАдрес; - КонецЕсли; + ПолныйАдрес = "ftp://"+ Объект.FTPСервер +":"+ Формат(Объект.FTPПорт, "ЧН=21; ЧГ=0") + Объект.FTPКаталог; ОбщегоНазначенияКлиент.ПерейтиПоСсылке(ПолныйАдрес); + КонецПроцедуры &НаКлиенте @@ -731,7 +770,7 @@ Если Не ПравоИзмененияПапкиИФайлов(ВыбранноеЗначение) Тогда СтандартнаяОбработка = Ложь; ТекстПредупреждения = НСтр("ru = 'Недостаточно прав для изменения файлов папки ""%1"".'"); - ТекстПредупреждения = СтрЗаменить(ТекстПредупреждения, "%1", Строка(ВыбранноеЗначение)); + ТекстПредупреждения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ТекстПредупреждения, Строка(ВыбранноеЗначение)); ПоказатьПредупреждение(, ТекстПредупреждения); КонецЕсли; КонецПроцедуры @@ -795,6 +834,11 @@ КонецЕсли; КонецПроцедуры +&НаКлиенте +Процедура ПарольАрхиваПриИзменении(Элемент) + ПарольАрхиваИзменен = Истина; +КонецПроцедуры + #КонецОбласти #Область ОбработчикиСобытийЭлементовТаблицыФормыОтчеты @@ -824,7 +868,7 @@ ПроверитьДобавленныеСтрокиОтчетов(СтруктураВыбора); // Вывод результатов выбора - Результат = СтандартныеПодсистемыКлиентСервер.НовыйРезультатВыполнения(); + Результат = Новый Структура; Если СтруктураВыбора.СОшибками.Количество > 0 Тогда @@ -853,10 +897,10 @@ ПредставлениеОтчетовСОшибками); КонецЕсли; - Результат.ВыводПредупреждения.Использование = Истина; - Результат.ВыводПредупреждения.Заголовок = НСтр("ru = 'Ошибки добавления отчетов в рассылку'"); - Результат.ВыводПредупреждения.Текст = ТекстСообщения; - Результат.ВыводПредупреждения.ТекстОшибок = СтруктураВыбора.СОшибками.Текст; + СтандартныеПодсистемыКлиентСервер.ВывестиПредупреждение(Результат, + ТекстСообщения, + СтруктураВыбора.СОшибками.Текст, + НСтр("ru = 'Ошибки добавления отчетов в рассылку'")); Иначе @@ -872,10 +916,10 @@ ТекстОповещения = СтруктураВыбора.Успешно.ПредставлениеОтчетов; КонецЕсли; - Результат.ВыводОповещения.Использование = Истина; - Результат.ВыводОповещения.Заголовок = ЗаголовокОповещения; - Результат.ВыводОповещения.Текст = ТекстОповещения; - Результат.ВыводОповещения.Картинка = БиблиотекаКартинок.ВыполнитьЗадачу; + СтандартныеПодсистемыКлиентСервер.ВывестиОповещение(Результат, + ЗаголовокОповещения, + ТекстОповещения, + БиблиотекаКартинок.ВыполнитьЗадачу); КонецЕсли; @@ -1053,13 +1097,17 @@ КонецЕсли; КонецЦикла; + ОтборВыбора = Новый Структура; + ОтборВыбора.Вставить("ТипОтчета", 1); + ОтборВыбора.Вставить("Отчет", Новый Структура("Вид, Значение", "НеВСписке", Кэш.ИсключаемыеОтчеты)); + ПараметрыФормыВыбора = Новый Структура; ПараметрыФормыВыбора.Вставить("РежимОткрытияОкна", РежимОткрытияОкнаФормы.БлокироватьОкноВладельца); ПараметрыФормыВыбора.Вставить("РежимВыбора", Истина); ПараметрыФормыВыбора.Вставить("МножественныйВыбор", Истина); ПараметрыФормыВыбора.Вставить("ЗакрыватьПриВыборе", Ложь); ПараметрыФормыВыбора.Вставить("ТолькоВарианты", Истина); - ПараметрыФормыВыбора.Вставить("Отбор", Новый Структура("ТипОтчета", 1)); + ПараметрыФормыВыбора.Вставить("Отбор", ОтборВыбора); ПараметрыФормыВыбора.Вставить("ВыбранныеЗначения", ВыбранныеЗначения); ОткрытьФорму("Справочник.ВариантыОтчетов.ФормаВыбора", ПараметрыФормыВыбора, Элементы.Отчеты); @@ -1158,7 +1206,7 @@ ПараметрыФормы.Вставить("ПользовательскиеНастройки", ПользовательскиеНастройкиКД); ПараметрыФормы.Вставить("СформироватьПриОткрытии", Истина); - ВариантыОтчетовКлиент.Открыть(ПараметрыОтчета, ПараметрыФормы, Неопределено); + ВариантыОтчетовКлиент.ОткрытьФормуОтчета(ЭтотОбъект, ПараметрыОтчета.Отчет, ПараметрыФормы); Для Каждого ПользовательскаяНастройкаКД Из ПерсонализированныеНастройки Цикл Если ТипЗнч(ПользовательскаяНастройкаКД) = Тип("ЭлементОтбораКомпоновкиДанных") Тогда @@ -1177,7 +1225,7 @@ Если Не Объект.Персонализирована Тогда ПредставлениеВида = Элементы.ВидРассылки.СписокВыбора.НайтиПоЗначению("Персонализирована").Представление; СообщениеТекст = НСтр("ru = 'Использовать получателя в параметрах возможно только для вида рассылки ""%1""'"); - СообщениеТекст = СтрЗаменить(СообщениеТекст, "%1", ПредставлениеВида); + СообщениеТекст = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(СообщениеТекст, ПредставлениеВида); ОбщегоНазначенияКлиентСервер.СообщитьПользователю(СообщениеТекст, , "ВидРассылки"); Возврат; КонецЕсли; @@ -1288,7 +1336,7 @@ Если Не ОписаниеДоступныхТипов.СодержитТип(ОсновнойТипПолучателей) Тогда ТекстПредупреждения = НСтр("ru = 'Тип ""%1"" не подходит по типу к выбранной настройке. |Необходимо выбрать другой тип получателей или другую настройку.'"); - ТекстПредупреждения = СтрЗаменить(ТекстПредупреждения, "%1", Строка(ОсновнойТипПолучателей)); + ТекстПредупреждения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ТекстПредупреждения, Строка(ОсновнойТипПолучателей)); ПоказатьПредупреждение(, ТекстПредупреждения); Возврат; КонецЕсли; @@ -1387,8 +1435,8 @@ ДлинаПрефикса = СтрДлина(Переменные.Префикс); ДлинаПостфикса = СтрДлина(Переменные.Постфикс); - ПозицияПрефикса = Найти(Переменные.СтарыйТекст, Переменные.Префикс); - ПозицияПостфикса = Найти(Переменные.СтарыйТекст, Переменные.Постфикс); + ПозицияПрефикса = СтрНайти(Переменные.СтарыйТекст, Переменные.Префикс); + ПозицияПостфикса = СтрНайти(Переменные.СтарыйТекст, Переменные.Постфикс); Переменные.Вставить("СтарыйФрагментНайден", (ПозицияПрефикса > 0 И ПозицияПостфикса > ПозицияПрефикса)); Если Переменные.СтарыйФрагментНайден Тогда @@ -1528,13 +1576,13 @@ КонецЦикла; СписокОтчетов = СокрЛ(СписокОтчетов); - Настройки = Новый Структура("НаименованиеРассылки, Автор, ЗаголовокСистемы, ДатаВыполнения, СформированныеОтчеты, СпособДоставки", - Объект.Наименование, - Объект.Автор, - Кэш.ЗаголовокСистемы, - ОбщегоНазначенияКлиент.ДатаСеанса(), - СписокОтчетов, - ""); + Настройки = Новый Структура; + Настройки.Вставить("НаименованиеРассылки", Объект.Наименование); + Настройки.Вставить("Автор", Объект.Автор); + Настройки.Вставить("ЗаголовокСистемы", Кэш.ЗаголовокСистемы); + Настройки.Вставить("ДатаВыполнения", ОбщегоНазначенияКлиент.ДатаСеанса()); + Настройки.Вставить("СформированныеОтчеты", Объект.Наименование); + Настройки.Вставить("СпособДоставки", ""); ТекстовыйДокумент = Новый ТекстовыйДокумент; ТекстовыйДокумент.УстановитьТекст(РассылкаОтчетовКлиентСервер.ЗаполнитьШаблон(Шаблон, Настройки)); @@ -1702,10 +1750,13 @@ // FTP. Если ПараметрыДоставки.ИспользоватьFTPРесурс Тогда + ПараметрыДоставки.Вставить("Владелец", Объект.Ссылка); ПараметрыДоставки.Вставить("Сервер", Объект.FTPСервер); ПараметрыДоставки.Вставить("Порт", Объект.FTPПорт); ПараметрыДоставки.Вставить("Логин", Объект.FTPЛогин); - ПараметрыДоставки.Вставить("Пароль", Объект.FTPПароль); + Если FTPПарольИзменен Тогда + ПараметрыДоставки.Вставить("Пароль", FTPПароль); + КонецЕсли; ПараметрыДоставки.Вставить("Каталог", Объект.FTPКаталог); ПараметрыДоставки.Вставить("ПассивноеСоединение", Объект.FTPПассивноеСоединение); КонецЕсли; @@ -1777,7 +1828,7 @@ Если РезультатПоиска <> Неопределено Тогда Найденные = ТекстПисьмаФорматированныйДокумент.ПолучитьЭлементы(РезультатПоиска.ЗакладкаНачала, РезультатПоиска.ЗакладкаКонца); Для Каждого ТекстФД Из Найденные Цикл - Если Найти(ТекстФД.Текст, СтарыйФрагмент) > 0 Тогда + Если СтрНайти(ТекстФД.Текст, СтарыйФрагмент) > 0 Тогда ТекстФД.Текст = СтрЗаменить(ТекстФД.Текст, СтарыйФрагмент, НовыйФрагмент); ЗаменаВыполнена = Истина; Прервать; @@ -1956,7 +2007,7 @@ ЗаголовокДиалога = НСтр("ru = 'Выберите форматы по умолчанию'"); Иначе ЗаголовокДиалога = НСтр("ru = 'Выберите форматы для отчета ""%1""'"); - ЗаголовокДиалога = СтрЗаменить(ЗаголовокДиалога, "%1", Строка(СсылкаНаОтчет)); + ЗаголовокДиалога = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ЗаголовокДиалога, Строка(СсылкаНаОтчет)); КонецЕсли; Переменные = Новый Структура; @@ -2239,7 +2290,7 @@ СпособыДоставки = СпособыДоставки + ?(СпособыДоставки = "", НСтр("ru = 'эл. почта'"), " "+ НСтр("ru = 'и эл. почта'")); КонецЕсли; - Элементы.СтраницаДоставка.Заголовок = СтрЗаменить(НСтр("ru = 'Доставка (%1)'"), "%1", СпособыДоставки); + Элементы.СтраницаДоставка.Заголовок = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Доставка (%1)'"), СпособыДоставки); КонецЕсли; Если Изменения = "" Или Изменения = "ПисьмоВФорматеHTML" Тогда @@ -2472,7 +2523,7 @@ КонецФункции &НаСервере -Функция ОтчетыПриАктивизацииСтрокиНаСервере(ИдентификаторСтроки, ДобавитьДежурнуюФразу = Истина, ПользовательскиеНастройки = Неопределено) +Функция ОтчетыПриАктивизацииСтрокиНаСервере(ИдентификаторСтроки, ДобавитьДежурнуюФразу = Истина, Знач ПользовательскиеНастройки = Неопределено) // Сохранение настроек предыдущего отчета. Если ИдентификаторСтроки <> ИдентификаторТекущейСтрокиТаблицыОтчетов И ИдентификаторТекущейСтрокиТаблицыОтчетов <> -1 Тогда ЗаписатьНастройкиСтрокиОтчеты(ИдентификаторТекущейСтрокиТаблицыОтчетов); @@ -2714,10 +2765,11 @@ ТекстСообщения = НСтр("ru = 'Тест способа доставки не пройден.'"); КонецЕсли; - Результат = СтандартныеПодсистемыКлиентСервер.НовыйРезультатВыполнения(); - Результат.ВыводПредупреждения.Использование = Истина; - Результат.ВыводПредупреждения.Текст = ТекстСообщения; - Результат.ВыводПредупреждения.ТекстОшибок = РассылкаОтчетовКлиентСервер.СтрокаСообщенийПользователю(ПараметрыЖурнала.МассивОшибок); + Результат = Новый Структура; + + СтандартныеПодсистемыКлиентСервер.ВывестиПредупреждение(Результат, + ТекстСообщения, + РассылкаОтчетовКлиентСервер.СтрокаСообщенийПользователю(ПараметрыЖурнала.МассивОшибок)); Возврат Результат; КонецФункции @@ -2727,12 +2779,12 @@ &НаСервере Процедура УстановитьУсловноеОформление() - Инструкция = ВариантыОтчетов.ИнструкцияУсловногоОформления(); + Инструкция = СтандартныеПодсистемыСервер.ИнструкцияУсловногоОформления(); Инструкция.Поля = "НастройкиТекущегоОтчета"; Инструкция.Отборы.Вставить("НастройкиТекущегоОтчета.Обнаружен", Ложь); - Инструкция.Оформление.Вставить("ЦветТекста", ЦветаСтиля.НедоступныеДанныеЦвет); + Инструкция.Оформление.Вставить("ЦветТекста", ЦветаСтиля.ТекстЗапрещеннойЯчейкиЦвет); Инструкция.Оформление.Вставить("Доступность", Ложь); - ВариантыОтчетов.ДобавитьЭлементУсловногоОформления(ЭтотОбъект, Инструкция); + СтандартныеПодсистемыСервер.ДобавитьЭлементУсловногоОформления(ЭтотОбъект, Инструкция); КонецПроцедуры &НаСервереБезКонтекста @@ -2785,6 +2837,7 @@ Кэш.Вставить("Соответствия", Новый ФиксированнаяСтруктура("ДниНедели, Месяцы", ДниНедели, Месяцы)); Кэш.Вставить("Перечисления", Новый ФиксированнаяСтруктура("Периодичности", Периодичности)); Кэш.Вставить("Шаблоны", Шаблоны); + Кэш.Вставить("ИсключаемыеОтчеты", РассылкаОтчетовПовтИсп.ИсключаемыеОтчеты()); Кэш = Новый ФиксированнаяСтруктура(Кэш); // @@ -2994,6 +3047,7 @@ &НаСервере Процедура ДобавитьНастройкиОтчетов(ПрисоединяемыеОтчеты) + Для Каждого СтрокаОтчетыПараметры Из ПрисоединяемыеОтчеты Цикл Если СтрокаОтчетыПараметры.Свойство("ВариантСсылка") И ТипЗнч(СтрокаОтчетыПараметры.ВариантСсылка) = Тип("СправочникСсылка.ВариантыОтчетов") @@ -3027,13 +3081,18 @@ ШаблонСтрокиСообщения = НСтр("ru = 'Добавлен отчет ""%1"".'"); КонецЕсли; ШаблонСтрокиСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонСтрокиСообщения, Строка(ВариантСсылка)); + Если ТекстВсплывающегоОповещенияПриОткрытии = "" Тогда + ТекстВсплывающегоОповещенияПриОткрытии = ШаблонСтрокиСообщения; + Иначе + ТекстВсплывающегоОповещенияПриОткрытии = ТекстВсплывающегоОповещенияПриОткрытии + Символы.ПС + ШаблонСтрокиСообщения; + КонецЕсли; ИндексСтроки = Объект.Отчеты.Индекс(СтрокаОтчеты); - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ШаблонСтрокиСообщения, , "Объект.Отчеты["+ ИндексСтроки +"].Представление"); КонецЕсли; ПользовательскиеНастройкиКД = СтрокаОтчетыПараметры.Настройки; ИдентификаторСтроки = СтрокаОтчеты.ПолучитьИдентификатор(); + Элементы.Отчеты.ТекущаяСтрока = ИдентификаторСтроки; СтрокаПредупреждения = ОтчетыПриАктивизацииСтрокиНаСервере(ИдентификаторСтроки, Истина, ПользовательскиеНастройкиКД); Если СтрокаПредупреждения <> "" Тогда ОбщегоНазначенияКлиентСервер.СообщитьПользователю(СтрокаПредупреждения, , "Объект.Отчеты["+ ИндексСтроки +"].Представление"); @@ -3161,8 +3220,9 @@ &НаКлиенте Функция ИзменилисьЗначенияРеквизитов(ИменаРеквизитов) - ИменаРеквизитов = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(ИменаРеквизитов, , Истина, Истина); + ИменаРеквизитов = СтрРазделить(ИменаРеквизитов, ",", Ложь); Для Каждого ИмяРеквизита Из ИменаРеквизитов Цикл + ИмяРеквизита = СокрЛП(ИмяРеквизита); Если Объект[ИмяРеквизита] <> ЗначенияРеквизитовДоИзменения[ИмяРеквизита] Тогда Возврат Истина; КонецЕсли; diff --git a/SSL/src/Catalogs/РассылкиОтчетов/ObjectModule.bsl b/SSL/src/Catalogs/РассылкиОтчетов/ObjectModule.bsl index 8d6ea7a3a..20515c608 100644 --- a/SSL/src/Catalogs/РассылкиОтчетов/ObjectModule.bsl +++ b/SSL/src/Catalogs/РассылкиОтчетов/ObjectModule.bsl @@ -51,6 +51,10 @@ Если Задание <> Неопределено Тогда Задание.Удалить(); КонецЕсли; + + УстановитьПривилегированныйРежим(Истина); + ОбщегоНазначения.УдалитьДанныеИзБезопасногоХранилища(Ссылка); + УстановитьПривилегированныйРежим(Ложь); КонецПроцедуры Процедура ПриКопировании(ОбъектКопирования) @@ -85,9 +89,8 @@ // Расписание устанавливается в форме элемента. Если ДополнительныеСвойства.Свойство("Расписание") - И ТипЗнч(ДополнительныеСвойства.Расписание) = Тип("РасписаниеРегламентногоЗадания") - И Строка(ДополнительныеСвойства.Расписание) <> Строка(Задание.Расписание) - Тогда + И ТипЗнч(ДополнительныеСвойства.Расписание) = Тип("РасписаниеРегламентногоЗадания") + И Строка(ДополнительныеСвойства.Расписание) <> Строка(Задание.Расписание) Тогда Задание.Расписание = ДополнительныеСвойства.Расписание; ЗаданиеИзменено = Истина; КонецЕсли; @@ -124,9 +127,7 @@ #Область СлужебныеПроцедурыИФункции Функция ПредставлениеЗаданияПоРассылке(НаименованиеРассылки) - Возврат СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Рассылка отчетов: %1'"), - СокрЛП(НаименованиеРассылки)); + Возврат СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Рассылка отчетов: %1'"), СокрЛП(НаименованиеРассылки)); КонецФункции #КонецОбласти diff --git a/SSL/src/Catalogs/РассылкиОтчетов/РассылкиОтчетов.mdo b/SSL/src/Catalogs/РассылкиОтчетов/РассылкиОтчетов.mdo index 7a21b7a70..dfad42654 100644 --- a/SSL/src/Catalogs/РассылкиОтчетов/РассылкиОтчетов.mdo +++ b/SSL/src/Catalogs/РассылкиОтчетов/РассылкиОтчетов.mdo @@ -138,6 +138,7 @@ <isFolder>true</isFolder> </items> </predefined> + <predefinedDataUpdate>AutoUpdate</predefinedDataUpdate> <editType>InDialog</editType> <choiceMode>BothWays</choiceMode> <defaultObjectForm>Catalog.РассылкиОтчетов.Form.ФормаЭлемента</defaultObjectForm> @@ -188,28 +189,6 @@ <fillValue xsi:type="core:StringValue"/> <dataHistory>Use</dataHistory> </attributes> - <attributes uuid="150c9d05-4ccc-4cb7-879d-b1d9c3534343"> - <name>FTPПароль</name> - <synonym> - <key>ru</key> - <value>Пароль</value> - </synonym> - <type> - <types>String</types> - <stringQualifiers> - <length>50</length> - </stringQualifiers> - </type> - <passwordMode>true</passwordMode> - <toolTip> - <key>ru</key> - <value>Пароль FTP сервера.</value> - </toolTip> - <minValue xsi:type="core:UndefinedValue"/> - <maxValue xsi:type="core:UndefinedValue"/> - <fillValue xsi:type="core:StringValue"/> - <dataHistory>Use</dataHistory> - </attributes> <attributes uuid="38b7679d-3739-4572-baf2-d8c7b2a94f0a"> <name>FTPПассивноеСоединение</name> <synonym> @@ -541,28 +520,6 @@ <fillValue xsi:type="core:UndefinedValue"/> <dataHistory>Use</dataHistory> </attributes> - <attributes uuid="65000437-bd07-4841-a458-679d44768c46"> - <name>ПарольАрхива</name> - <synonym> - <key>ru</key> - <value>Пароль архива</value> - </synonym> - <type> - <types>String</types> - <stringQualifiers> - <length>75</length> - </stringQualifiers> - </type> - <passwordMode>true</passwordMode> - <toolTip> - <key>ru</key> - <value>Пароль ZIP архива</value> - </toolTip> - <minValue xsi:type="core:UndefinedValue"/> - <maxValue xsi:type="core:UndefinedValue"/> - <fillValue xsi:type="core:StringValue"/> - <dataHistory>Use</dataHistory> - </attributes> <attributes uuid="fb42ad06-d5a4-40ea-817c-fa7ff385d8db"> <name>ПериодичностьРасписания</name> <synonym> @@ -821,6 +778,50 @@ <fullTextSearch>Use</fullTextSearch> <dataHistory>Use</dataHistory> </attributes> + <attributes uuid="150c9d05-4ccc-4cb7-879d-b1d9c3534343"> + <name>УдалитьFTPПароль</name> + <synonym> + <key>ru</key> + <value>(не используется) Пароль</value> + </synonym> + <type> + <types>String</types> + <stringQualifiers> + <length>50</length> + </stringQualifiers> + </type> + <passwordMode>true</passwordMode> + <toolTip> + <key>ru</key> + <value>Пароль FTP сервера.</value> + </toolTip> + <minValue xsi:type="core:UndefinedValue"/> + <maxValue xsi:type="core:UndefinedValue"/> + <fillValue xsi:type="core:StringValue"/> + <dataHistory>Use</dataHistory> + </attributes> + <attributes uuid="65000437-bd07-4841-a458-679d44768c46"> + <name>УдалитьПарольАрхива</name> + <synonym> + <key>ru</key> + <value>(не используется) Пароль архива</value> + </synonym> + <type> + <types>String</types> + <stringQualifiers> + <length>75</length> + </stringQualifiers> + </type> + <passwordMode>true</passwordMode> + <toolTip> + <key>ru</key> + <value>Пароль ZIP архива</value> + </toolTip> + <minValue xsi:type="core:UndefinedValue"/> + <maxValue xsi:type="core:UndefinedValue"/> + <fillValue xsi:type="core:StringValue"/> + <dataHistory>Use</dataHistory> + </attributes> <attributes uuid="1281fe19-bbca-4a4f-84d8-14187e62000f"> <name>УчетнаяЗапись</name> <synonym> @@ -1110,7 +1111,7 @@ <name>ФормаЭлемента</name> <synonym> <key>ru</key> - <value>Рассылка отчетов</value> + <value>Форма элемента</value> </synonym> <help> <pages> diff --git a/SSL/src/Catalogs/РолиИсполнителей/Forms/ФормаВыбора/Form.form b/SSL/src/Catalogs/РолиИсполнителей/Forms/ФормаВыбора/Form.form index 50fe1e3ed..cb1c5e909 100644 --- a/SSL/src/Catalogs/РолиИсполнителей/Forms/ФормаВыбора/Form.form +++ b/SSL/src/Catalogs/РолиИсполнителей/Forms/ФормаВыбора/Form.form @@ -115,155 +115,6 @@ <autoMaxHeight>true</autoMaxHeight> </extInfo> </items> - <items xsi:type="form:FormField"> - <name>КраткоеПредставление</name> - <id>12</id> - <visible>true</visible> - <enabled>true</enabled> - <userVisible> - <common>true</common> - </userVisible> - <dataPath xsi:type="form:DataPath"> - <segments>Список.КраткоеПредставление</segments> - </dataPath> - <extendedTooltip> - <name>КраткоеПредставлениеExtendedTooltip</name> - <id>18</id> - <type>Label</type> - <autoMaxWidth>true</autoMaxWidth> - <autoMaxHeight>true</autoMaxHeight> - <extInfo xsi:type="form:LabelDecorationExtInfo"> - <horizontalAlign>Left</horizontalAlign> - </extInfo> - </extendedTooltip> - <contextMenu> - <name>КраткоеПредставлениеКонтекстноеМеню</name> - <id>13</id> - <autoFill>true</autoFill> - </contextMenu> - <type>LabelField</type> - <editMode>Enter</editMode> - <showInHeader>true</showInHeader> - <headerHorizontalAlign>Left</headerHorizontalAlign> - <showInFooter>true</showInFooter> - <extInfo xsi:type="form:LabelFieldExtInfo"> - <autoMaxWidth>true</autoMaxWidth> - <autoMaxHeight>true</autoMaxHeight> - </extInfo> - </items> - <items xsi:type="form:FormField"> - <name>Код</name> - <id>6</id> - <visible>true</visible> - <enabled>true</enabled> - <userVisible> - <common>true</common> - </userVisible> - <dataPath xsi:type="form:DataPath"> - <segments>Список.Code</segments> - </dataPath> - <extendedTooltip> - <name>КодExtendedTooltip</name> - <id>19</id> - <type>Label</type> - <autoMaxWidth>true</autoMaxWidth> - <autoMaxHeight>true</autoMaxHeight> - <extInfo xsi:type="form:LabelDecorationExtInfo"> - <horizontalAlign>Left</horizontalAlign> - </extInfo> - </extendedTooltip> - <contextMenu> - <name>КодКонтекстноеМеню</name> - <id>7</id> - <autoFill>true</autoFill> - </contextMenu> - <type>LabelField</type> - <editMode>Enter</editMode> - <showInHeader>true</showInHeader> - <headerHorizontalAlign>Left</headerHorizontalAlign> - <showInFooter>true</showInFooter> - <extInfo xsi:type="form:LabelFieldExtInfo"> - <autoMaxWidth>true</autoMaxWidth> - <autoMaxHeight>true</autoMaxHeight> - </extInfo> - </items> - <items xsi:type="form:FormField"> - <name>ВнешняяРоль</name> - <id>10</id> - <title> - <key>ru</key> - <value>Внешняя</value> - - true - true - - - Список.ВнешняяРоль - - None - - ru - Внешняя роль, исполнители которой определены в другой информационной базе - - - ВнешняяРольExtendedTooltip - 20 - Label - true - true - - Left - - - - ВнешняяРольКонтекстноеМеню - 11 - true - - CheckBoxField - Enter - true - - StdPicture.ExchangePlan - - Left - true - - - - СписокКомментарий - 14 - true - true - - - Список.Комментарий - - - СписокКомментарийExtendedTooltip - 21 - Label - true - true - - Left - - - - СписокКомментарийКонтекстноеМеню - 15 - true - - LabelField - Enter - true - Left - true - - true - true - - Ссылка 23 @@ -304,6 +155,10 @@ 3 Left + + BeforeRowChange + СписокПередНачаломИзменения + СписокСтрокаПоиска 30 @@ -493,7 +348,6 @@ true true true - UseIfNecessary auto true @@ -539,8 +393,10 @@ КОНЕЦ КАК ЕстьИсполнители, СправочникРолиИсполнителей.ВнешняяРоль, СправочникРолиИсполнителей.КраткоеПредставление -ИЗ - Справочник.РолиИсполнителей КАК СправочникРолиИсполнителей + ИЗ + Справочник.РолиИсполнителей.Назначение КАК РолиИсполнителейНазначение + ЛЕВОЕ СОЕДИНЕНИЕ Справочник.РолиИсполнителей КАК СправочникРолиИсполнителей + ПО РолиИсполнителейНазначение.Ссылка = СправочникРолиИсполнителей.Ссылка Catalog.РолиИсполнителей true true @@ -549,6 +405,23 @@ true + + ЭтоВнешнийПользователь + + <key>ru</key> + <value>Это внешний пользователь</value> + + 2 + + Boolean + + + true + + + true + + diff --git a/SSL/src/Catalogs/РолиИсполнителей/Forms/ФормаВыбора/Module.bsl b/SSL/src/Catalogs/РолиИсполнителей/Forms/ФормаВыбора/Module.bsl index 7821e170d..9e330e651 100644 --- a/SSL/src/Catalogs/РолиИсполнителей/Forms/ФормаВыбора/Module.bsl +++ b/SSL/src/Catalogs/РолиИсполнителей/Forms/ФормаВыбора/Module.bsl @@ -11,6 +11,27 @@ Если Параметры.Свойство("ТолькоПростыеРоли", ТолькоПростыеРоли) И ТолькоПростыеРоли = Истина Тогда ОбщегоНазначенияКлиентСервер.УстановитьЭлементОтбораДинамическогоСписка( Список, "ВнешняяРоль", Истина, , , Истина); + КонецЕсли; + + ОтборГде = " ГДЕ РолиИсполнителейНазначение.ТипПользователей = ЗНАЧЕНИЕ(Справочник.Пользователи.ПустаяСсылка)"; + ЭтоВнешнийПользователь = ПользователиКлиентСервер.ЭтоСеансВнешнегоПользователя(); + Если ЭтоВнешнийПользователь Тогда + Если Элементы.КоманднаяПанель.ПодчиненныеЭлементы.Найти("ФормаИзменить") <> Неопределено Тогда + Элементы.КоманднаяПанель.ПодчиненныеЭлементы.ФормаИзменить.Видимость = Ложь; + КонецЕсли; + ТекущийВнешнийПользователь = ПользователиКлиентСервер.ТекущийВнешнийПользователь(); + Имя = ТекущийВнешнийПользователь.ОбъектАвторизации.Метаданные().Имя; + ОтборГде = " ГДЕ РолиИсполнителейНазначение.ТипПользователей = ЗНАЧЕНИЕ(Справочник." + Имя + ".ПустаяСсылка)"; + КонецЕсли; + Список.ТекстЗапроса = Список.ТекстЗапроса + ОтборГде; + + +КонецПроцедуры + +&НаКлиенте +Процедура СписокПередНачаломИзменения(Элемент, Отказ) + Если ЭтоВнешнийПользователь Тогда + Отказ =Истина; КонецЕсли; КонецПроцедуры diff --git a/SSL/src/Catalogs/РолиИсполнителей/Forms/ФормаСписка/Form.form b/SSL/src/Catalogs/РолиИсполнителей/Forms/ФормаСписка/Form.form index bca21f0d7..2e5acf4c6 100644 --- a/SSL/src/Catalogs/РолиИсполнителей/Forms/ФормаСписка/Form.form +++ b/SSL/src/Catalogs/РолиИсполнителей/Forms/ФормаСписка/Form.form @@ -542,7 +542,6 @@ true true true - UseIfNecessary auto true diff --git a/SSL/src/Catalogs/РолиИсполнителей/Forms/ФормаЭлемента/Form.form b/SSL/src/Catalogs/РолиИсполнителей/Forms/ФормаЭлемента/Form.form index 1f8c81945..f5bcdcc04 100644 --- a/SSL/src/Catalogs/РолиИсполнителей/Forms/ФормаЭлемента/Form.form +++ b/SSL/src/Catalogs/РолиИсполнителей/Forms/ФормаЭлемента/Form.form @@ -183,31 +183,23 @@ - ГруппаВнешняяРоль - 32 - - ВнешняяРоль - 28 + ГруппаНазначение + 57 + + ДекорацияНазначение + 59 <key>ru</key> - <value>Внешняя роль, исполнители которой определены в другой программе:</value> + <value>Назначение:</value> true true true - - Объект.ВнешняяРоль - - Right - - OnChange - ВнешняяРольПриИзменении - - ВнешняяРольExtendedTooltip - 45 + ДекорацияНазначениеРасширеннаяПодсказка + 61 Label true true @@ -216,36 +208,28 @@ - ВнешняяРольКонтекстноеМеню - 29 + ДекорацияНазначениеКонтекстноеМеню + 60 true - CheckBoxField - Enter - true - Left - true - + Label + true + true + + Left + - - УзелОбмена - 30 - - <key>ru</key> - <value>Исполнители роли определены в информационной базе</value> - + + ВыбратьНазначение + 62 true - false + true true - - Объект.УзелОбмена - - None - УзелОбменаExtendedTooltip - 46 + ВыбратьНазначениеРасширеннаяПодсказка + 63 Label true true @@ -253,29 +237,14 @@ Left - - УзелОбменаКонтекстноеМеню - 31 - true - - InputField - Enter - true - Left - true - - - StartChoice - УзелОбменаНачалоВыбора - - true - true - true - true - true - true - Normal - + Hyperlink + Form.Command.ВыбратьНазначение + Normal + Auto + true + true + UserCmds + Auto true true @@ -284,15 +253,15 @@ <key>ru</key> - <value>Группа внешняя роль</value> + <value>Группа назначение</value> ru - Группа внешняя роль + Группа назначение - ГруппаВнешняяРольExtendedTooltip - 44 + ГруппаНазначениеРасширеннаяПодсказка + 58 Label true true @@ -714,7 +683,6 @@ true true true - UseIfNecessary auto true @@ -732,6 +700,28 @@
        true
        true
        + + ВыбратьНазначение + + <key>ru</key> + <value>Выбрать назначение</value> + + 1 + + ru + Выбрать назначение + + + true + + + + ВыбратьНазначение + + + DontUse + Auto + diff --git a/SSL/src/Catalogs/РолиИсполнителей/Forms/ФормаЭлемента/Help/ru.html b/SSL/src/Catalogs/РолиИсполнителей/Forms/ФормаЭлемента/Help/ru.html index 2752e7726..968daf8f4 100644 --- a/SSL/src/Catalogs/РолиИсполнителей/Forms/ФормаЭлемента/Help/ru.html +++ b/SSL/src/Catalogs/РолиИсполнителей/Forms/ФормаЭлемента/Help/ru.html @@ -1,17 +1,26 @@ -

        Описание свойств роли исполнителя.

        -

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

        +

        Описание свойств роли исполнителя.

        +

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

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

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

        Сведения о роли исполнителя

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

          Адресация задач исполнителям

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

        Адресация задач исполнителям

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

        Исполнители роли

        +
      • Поле Дополнительные объекты адресации заполняется аналогично.
    • В поле Комментарий напишите дополнительные сведения о роли исполнителя.

    Особенности взаимодействия с внешними пользователями

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

    См. также:

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

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

    См. также:

    \ No newline at end of file diff --git a/SSL/src/Catalogs/РолиИсполнителей/Forms/ФормаЭлемента/Module.bsl b/SSL/src/Catalogs/РолиИсполнителей/Forms/ФормаЭлемента/Module.bsl index 5dcc6cd55..5edd6889b 100644 --- a/SSL/src/Catalogs/РолиИсполнителей/Forms/ФормаЭлемента/Module.bsl +++ b/SSL/src/Catalogs/РолиИсполнителей/Forms/ФормаЭлемента/Module.bsl @@ -29,14 +29,16 @@ &НаСервере Процедура ОбработкаПроверкиЗаполненияНаСервере(Отказ, ПроверяемыеРеквизиты) - Если Объект.ВнешняяРоль И Не ЗначениеЗаполнено(Объект.УзелОбмена) Тогда - ОбщегоНазначенияКлиентСервер.СообщитьПользователю( - НСтр("ru = 'Укажите информационную базу, в которой определены исполнители данной роли.'"), - , - "УзелОбмена", - "Объект", - Отказ); - КонецЕсли; + Если Объект.ИспользуетсяСОбъектамиАдресации И НЕ Объект.ИспользуетсяБезОбъектовАдресации Тогда + Для каждого СтрокаТаблицы Из Объект.Назначение Цикл + Если ТипЗнч(СтрокаТаблицы.ТипПользователей) <> ТипЗнч(Справочники.Пользователи.ПустаяСсылка()) Тогда + НаименованиеНазначения = Метаданные.НайтиПоТипу(ТипЗнч(СтрокаТаблицы.ТипПользователей)).Представление(); + ОбщегоНазначенияКлиентСервер.СообщитьПользователю( + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Роль не может использоваться с обязательным уточнением для назначения: %1.'"), НаименованиеНазначения ),,, + "ИспользуетсяСОбъектамиАдресации", Отказ); + КонецЕсли; + КонецЦикла; + КонецЕсли; КонецПроцедуры @@ -49,31 +51,6 @@ Элементы.ГруппаТипыОбъектовАдресации.Доступность = Объект.ИспользуетсяСОбъектамиАдресации; КонецПроцедуры -&НаКлиенте -Процедура ВнешняяРольПриИзменении(Элемент) - - ВнешняяРольПриИзмененииНаСервере(); - -КонецПроцедуры - -&НаКлиенте -Процедура УзелОбменаНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка) - СтандартнаяОбработка = Ложь; - - ПланыОбменаДляВыбора = Новый Массив; - БизнесПроцессыИЗадачиКлиентПереопределяемый.ЗаполнитьМассивПлановОбмена(ПланыОбменаДляВыбора); - - ПараметрыФормы = Новый Структура; - ПараметрыФормы.Вставить("РежимВыбора", Истина); - ПараметрыФормы.Вставить("ТекущаяСтрока", Объект.УзелОбмена); - ПараметрыФормы.Вставить("ВыбиратьВсеУзлы", Ложь); - ПараметрыФормы.Вставить("ПланыОбменаДляВыбора", ПланыОбменаДляВыбора); - ПараметрыФормы.Вставить("ЗакрыватьПриВыборе", Истина); - ПараметрыФормы.Вставить("МножественныйВыбор", Ложь); - - ОткрытьФорму("ОбщаяФорма.ВыборУзловПлановОбмена", ПараметрыФормы, ЭтотОбъект); -КонецПроцедуры - &НаКлиенте Процедура КомментарийНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка) СтандартнаяОбработка = Ложь; @@ -82,53 +59,45 @@ #КонецОбласти -#Область СлужебныеПроцедурыИФункции +#Область ОбработчикиКомандФормы -&НаСервере -Процедура ВнешняяРольПриИзмененииНаСервере() - - Объект.ИспользуетсяБезОбъектовАдресации = Истина; - Объект.ИспользуетсяСОбъектамиАдресации = Ложь; - ОбновитьДоступность(); - +&НаКлиенте +Процедура ВыбратьНазначение(Команда) + ОписаниеОповещения = Новый ОписаниеОповещения("ПослеВыбораНазначения", ЭтотОбъект); + ПользователиСлужебныйКлиент.ВыбратьНазначение(ЭтотОбъект, Нстр("ru = 'Выбор назначения роли'"),,, ОписаниеОповещения); КонецПроцедуры +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + &НаСервере Процедура ОбновитьДоступность() - ВнешниеЗадачиИБизнесПроцессыИспользуются = Ложь; - БизнесПроцессыИЗадачиСервер.ПриОпределенииИспользованияВнешнихЗадачИБизнесПроцессов(ВнешниеЗадачиИБизнесПроцессыИспользуются); + Элементы.ИспользуетсяБезКонтекстаДругихИзмеренийАдресации.Доступность = Истина; + Элементы.ИспользуетсяВКонтекстеДругихИзмеренийАдресации.Доступность = Истина; + Элементы.ТипыОсновногоОбъектаАдресации.Доступность = Истина; + Элементы.ТипыДополнительногоОбъектаАдресации.Доступность = Истина; - Если ВнешниеЗадачиИБизнесПроцессыИспользуются Тогда - - Если Объект.ВнешняяРоль Тогда - Элементы.ИспользуетсяБезКонтекстаДругихИзмеренийАдресации.Доступность = Ложь; - Элементы.ИспользуетсяВКонтекстеДругихИзмеренийАдресации.Доступность = Ложь; - Элементы.ТипыОсновногоОбъектаАдресации.Доступность = Ложь; - Элементы.ТипыДополнительногоОбъектаАдресации.Доступность = Ложь; - Элементы.УзелОбмена.Доступность = Истина; - Элементы.УзелОбмена.АвтоОтметкаНезаполненного = Истина; - Иначе - Элементы.ИспользуетсяБезКонтекстаДругихИзмеренийАдресации.Доступность = Истина; - Элементы.ИспользуетсяВКонтекстеДругихИзмеренийАдресации.Доступность = Истина; - Элементы.ТипыОсновногоОбъектаАдресации.Доступность = Истина; - Элементы.ТипыДополнительногоОбъектаАдресации.Доступность = Истина; - Элементы.УзелОбмена.Доступность = Ложь; - Элементы.УзелОбмена.АвтоОтметкаНезаполненного = Ложь; + Если ПолучитьФункциональнуюОпцию("ИспользоватьВнешнихПользователей") Тогда + Если Объект.Назначение.Количество() > 0 Тогда + МассивСинонимов = Новый Массив; + Для каждого СтрокаТаблицы Из Объект.Назначение Цикл + МассивСинонимов.Добавить(СтрокаТаблицы.ТипПользователей.Метаданные().Синоним); + КонецЦикла; + Элементы.ВыбратьНазначение.Заголовок = СтрСоединить(МассивСинонимов, ", "); КонецЕсли; - Иначе - - Элементы.ИспользуетсяБезКонтекстаДругихИзмеренийАдресации.Доступность = Истина; - Элементы.ИспользуетсяВКонтекстеДругихИзмеренийАдресации.Доступность = Истина; - Элементы.ТипыОсновногоОбъектаАдресации.Доступность = Истина; - Элементы.ТипыДополнительногоОбъектаАдресации.Доступность = Истина; - Элементы.УзелОбмена.Видимость = Ложь; - Элементы.УзелОбмена.АвтоОтметкаНезаполненного = Ложь; - Элементы.ВнешняяРоль.Видимость = Ложь; - + Элементы.ГруппаНазначение.Видимость = Ложь; + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура ПослеВыбораНазначения(Результат, ДополнительныеПараметры) Экспорт + Если Результат <> Неопределено Тогда + Модифицированность = Истина; КонецЕсли; - КонецПроцедуры #КонецОбласти diff --git a/SSL/src/Catalogs/РолиИсполнителей/Help/ru.html b/SSL/src/Catalogs/РолиИсполнителей/Help/ru.html index 24632ac55..c4026fb9b 100644 --- a/SSL/src/Catalogs/РолиИсполнителей/Help/ru.html +++ b/SSL/src/Catalogs/РолиИсполнителей/Help/ru.html @@ -1,13 +1,13 @@

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

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

    -

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

    +

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

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

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

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

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

    -

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

    -

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

    +

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

    +

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

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

    • Наименование - полное наименование роли;
    • Краткое представление - сокращенное наименование роли для удобства использования. По умолчанию в это поле автоматически копируется Код; @@ -30,6 +30,10 @@ Петров А. Петров А. получает уведомления по всем просроченным и зависшим задачам по структурному подразделению "Отдел бухгалтерии" и проекту "Проект по внедрению системы бухучета".*

       

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

      -

      Ввод новой роли

      +

      Особенности взаимодействия с внешними пользователями

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

      Ввод новой роли

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

      См. также: 

      \ No newline at end of file diff --git a/SSL/src/Catalogs/РолиИсполнителей/ManagerModule.bsl b/SSL/src/Catalogs/РолиИсполнителей/ManagerModule.bsl index 11b53161a..b7df6d5c2 100644 --- a/SSL/src/Catalogs/РолиИсполнителей/ManagerModule.bsl +++ b/SSL/src/Catalogs/РолиИсполнителей/ManagerModule.bsl @@ -23,3 +23,36 @@ #КонецОбласти #КонецЕсли + +#Область ОбработчикиСобытий + +Процедура ОбработкаПолученияДанныхВыбора(ДанныеВыбора, Параметры, СтандартнаяОбработка) + + СтандартнаяОбработка = Ложь; + Если ПользователиКлиентСервер.ЭтоСеансВнешнегоПользователя() Тогда + ТекущийПользователь = ПользователиКлиентСервер.ТекущийВнешнийПользователь(); + ОбъектАвторизации = Справочники[ТекущийПользователь.ОбъектАвторизации.Метаданные().Имя].ПустаяСсылка(); + Иначе + ОбъектАвторизации = Справочники.Пользователи.ПустаяСсылка(); + КонецЕсли; + + Запрос = Новый Запрос("ВЫБРАТЬ РАЗРЕШЕННЫЕ + | РолиИсполнителейНазначение.Ссылка КАК Ссылка + |ИЗ + | Справочник.РолиИсполнителей.Назначение КАК РолиИсполнителейНазначение + |ГДЕ + | РолиИсполнителейНазначение.ТипПользователей = &Тип + | И РолиИсполнителейНазначение.Ссылка.Наименование ПОДОБНО &СтрокаПоиска"); + + Запрос.УстановитьПараметр("Тип", ОбъектАвторизации); + Запрос.УстановитьПараметр("СтрокаПоиска", "%" + Параметры.СтрокаПоиска + "%"); + РезультатЗапроса = Запрос.Выполнить().Выбрать(); + + ДанныеВыбора = Новый СписокЗначений; + Пока РезультатЗапроса.Следующий() Цикл + ДанныеВыбора.Добавить(РезультатЗапроса.Ссылка, РезультатЗапроса.Ссылка); + КонецЦикла; + +КонецПроцедуры + +#КонецОбласти \ No newline at end of file diff --git a/SSL/src/Catalogs/РолиИсполнителей/ObjectModule.bsl b/SSL/src/Catalogs/РолиИсполнителей/ObjectModule.bsl index f66424ed2..99fa3233a 100644 --- a/SSL/src/Catalogs/РолиИсполнителей/ObjectModule.bsl +++ b/SSL/src/Catalogs/РолиИсполнителей/ObjectModule.bsl @@ -36,7 +36,14 @@ Если ТипыДополнительногоОбъектаАдресации <> Неопределено И ТипыДополнительногоОбъектаАдресации.Пустая() Тогда ТипыДополнительногоОбъектаАдресации = Неопределено; КонецЕсли; - + + Если НЕ ПолучитьФункциональнуюОпцию("ИспользоватьВнешнихПользователей") Тогда + Если ЭтотОбъект.Назначение.Найти(Справочники.Пользователи.ПустаяСсылка(), "ТипПользователей") = Неопределено Тогда + // При отключенных внешних пользователях, роль всегда должна быть назначена пользователям." + ЭтотОбъект.Назначение.Добавить().ТипПользователей = Справочники.Пользователи.ПустаяСсылка(); + КонецЕсли; + КонецЕсли; + КонецПроцедуры #КонецОбласти diff --git a/SSL/src/Catalogs/РолиИсполнителей/РолиИсполнителей.mdo b/SSL/src/Catalogs/РолиИсполнителей/РолиИсполнителей.mdo index b41a54752..62141f560 100644 --- a/SSL/src/Catalogs/РолиИсполнителей/РолиИсполнителей.mdo +++ b/SSL/src/Catalogs/РолиИсполнителей/РолиИсполнителей.mdo @@ -314,6 +314,43 @@ Use Use + + + + + + Назначение + + ru + Назначение + + + Use + LineNumber + + Use + + + + + ТипПользователей + + ru + Тип пользователей + + + DefinedType.Пользователь + + + ru + Тип объектов информационной базы, которые могут быть в составе участников ролей. + + + + Use + Use + + ФормаЭлемента diff --git a/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Forms/ВыборСертификатаДляПодписанияИлиРасшифровки/Form.form b/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Forms/ВыборСертификатаДляПодписанияИлиРасшифровки/Form.form index 50f3110c3..a35d9d628 100644 --- a/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Forms/ВыборСертификатаДляПодписанияИлиРасшифровки/Form.form +++ b/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Forms/ВыборСертификатаДляПодписанияИлиРасшифровки/Form.form @@ -2845,7 +2845,7 @@ Далее - Auto + DontUse Auto @@ -2863,7 +2863,7 @@ Выбрать - Auto + DontUse Auto @@ -2885,7 +2885,7 @@ Назад - Auto + DontUse Auto @@ -2911,7 +2911,7 @@ Обновить - Auto + DontUse Auto @@ -2936,7 +2936,7 @@ ПоказатьДанныеСертификата - Auto + DontUse Auto @@ -2961,7 +2961,7 @@ ПоказатьДанныеТекущегоСертификата - Auto + DontUse Auto diff --git a/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Forms/ВыборСертификатаДляПодписанияИлиРасшифровки/Module.bsl b/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Forms/ВыборСертификатаДляПодписанияИлиРасшифровки/Module.bsl index 5f59efc36..e87e88a5b 100644 --- a/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Forms/ВыборСертификатаДляПодписанияИлиРасшифровки/Module.bsl +++ b/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Forms/ВыборСертификатаДляПодписанияИлиРасшифровки/Module.bsl @@ -41,8 +41,8 @@ Заголовок = НСтр("ru = 'Добавление сертификата для подписания данных'"); КонецЕсли; - СоздаватьЭлектронныеПодписиНаСервере = ЭлектроннаяПодписьКлиентСервер.ОбщиеНастройки( - ).СоздаватьЭлектронныеПодписиНаСервере; + ОбщиеНастройки = ЭлектроннаяПодписьКлиентСервер.ОбщиеНастройки(); + СоздаватьЭлектронныеПодписиНаСервере = ОбщиеНастройки.СоздаватьЭлектронныеПодписиНаСервере; Если СоздаватьЭлектронныеПодписиНаСервере Тогда Элементы.ГруппаСертификаты.Заголовок = @@ -989,12 +989,11 @@ Ошибка.Ошибки.Добавить(ТекущаяОшибка); - ОписаниеОшибки = ОписаниеОшибки + Символы.ПС + Символы.ПС - + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Не удалось пройти проверку шифрования с помощью программы %1 по причине: - |%2'"), - ОписаниеПрограммы.Наименование, - ПредставлениеОшибки); + ОписаниеОшибки = ОписаниеОшибки + Символы.ПС + Символы.ПС + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Не удалось пройти проверку шифрования с помощью программы %1 по причине: + |%2'"), + ОписаниеПрограммы.Наименование, + ПредставлениеОшибки); КонецПроцедуры @@ -1008,12 +1007,11 @@ Ошибка.Ошибки.Добавить(ТекущаяОшибка); - ОписаниеОшибки = ОписаниеОшибки + Символы.ПС + Символы.ПС - + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Не удалось пройти проверку расшифровки с помощью программы %1 по причине: - |%2'"), - ОписаниеПрограммы.Наименование, - ПредставлениеОшибки); + ОписаниеОшибки = ОписаниеОшибки + Символы.ПС + Символы.ПС + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Не удалось пройти проверку расшифровки с помощью программы %1 по причине: + |%2'"), + ОписаниеПрограммы.Наименование, + ПредставлениеОшибки); КонецПроцедуры @@ -1030,12 +1028,11 @@ Ошибка.Ошибки.Добавить(ТекущаяОшибка); - ОписаниеОшибки = ОписаниеОшибки + Символы.ПС + Символы.ПС - + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Не удалось пройти проверку подписания с помощью программы %1 по причине: - |%2'"), - ОписаниеПрограммы.Наименование, - ПредставлениеОшибки); + ОписаниеОшибки = ОписаниеОшибки + Символы.ПС + Символы.ПС + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Не удалось пройти проверку подписания с помощью программы %1 по причине: + |%2'"), + ОписаниеПрограммы.Наименование, + ПредставлениеОшибки); КонецПроцедуры diff --git a/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Forms/ДобавлениеСертификата/Form.form b/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Forms/ДобавлениеСертификата/Form.form index 4d4a29d52..ac097441a 100644 --- a/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Forms/ДобавлениеСертификата/Form.form +++ b/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Forms/ДобавлениеСертификата/Form.form @@ -217,6 +217,7 @@ Left true + 1 ru @@ -395,6 +396,7 @@ Left true + 1 ru @@ -538,7 +540,6 @@ ru Страницы - true СтраницыРасширеннаяПодсказка 14 @@ -788,8 +789,7 @@ OnCreateAtServer ПриСозданииНаСервере - 38 - 5 + 39 LockOwner true true @@ -851,7 +851,7 @@ Добавить - Auto + DontUse Auto @@ -869,7 +869,7 @@ ДобавитьИзФайла - Auto + DontUse Auto @@ -887,7 +887,7 @@ Назад - Auto + DontUse Auto @@ -905,7 +905,7 @@ Далее - Auto + DontUse Auto diff --git a/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Forms/ДобавлениеСертификатаДляШифрования/Form.form b/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Forms/ДобавлениеСертификатаДляШифрования/Form.form index 47f425cc4..c9d2a9eb3 100644 --- a/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Forms/ДобавлениеСертификатаДляШифрования/Form.form +++ b/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Forms/ДобавлениеСертификатаДляШифрования/Form.form @@ -2012,7 +2012,7 @@ Далее - Auto + DontUse Auto @@ -2030,7 +2030,7 @@ Добавить - Auto + DontUse Auto @@ -2052,7 +2052,7 @@ Назад - Auto + DontUse Auto @@ -2078,7 +2078,7 @@ Обновить - Auto + DontUse Auto @@ -2103,7 +2103,7 @@ ПоказатьДанныеСертификата - Auto + DontUse Auto @@ -2128,7 +2128,7 @@ ПоказатьДанныеТекущегоСертификата - Auto + DontUse Auto diff --git a/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Forms/ЗаявлениеНаВыпускНовогоКвалифицированногоСертификата/Form.form b/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Forms/ЗаявлениеНаВыпускНовогоКвалифицированногоСертификата/Form.form index 6f017400c..0bbdb8679 100644 --- a/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Forms/ЗаявлениеНаВыпускНовогоКвалифицированногоСертификата/Form.form +++ b/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Forms/ЗаявлениеНаВыпускНовогоКвалифицированногоСертификата/Form.form @@ -2094,7 +2094,6 @@ true ShowInDropList true - true true true @@ -6961,10 +6960,6 @@ NotificationProcessing ОбработкаОповещения - - OnOpen - ПриОткрытии - OnCreateAtServer ПриСозданииНаСервере @@ -6982,6 +6977,7 @@ true true true + UseIfNecessary auto true @@ -7470,58 +7466,6 @@ true - - ВидВладельца - - <key>ru</key> - <value>Вид владельца</value> - - 20 - - String - - - - true - - - true - - - - Директор - - <key>ru</key> - <value>Директор</value> - - 35 - - AnyRef - - - true - - - true - - - - ГлавныйБухгалтер - - <key>ru</key> - <value>Главный бухгалтер</value> - - 36 - - AnyRef - - - true - - - true - - ДокументВид @@ -8696,7 +8640,7 @@ <name>Далее</name> </handler> </action> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <formCommands> @@ -8718,7 +8662,7 @@ <name>Назад</name> </handler> </action> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <formCommands> @@ -8740,7 +8684,7 @@ </handler> </action> <representation>TextPicture</representation> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <formCommands> @@ -8758,7 +8702,7 @@ <name>ВыгрузитьЗапросНаСертификат</name> </handler> </action> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <formCommands> @@ -8776,7 +8720,7 @@ <name>ВыгрузитьСертификат</name> </handler> </action> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <formCommands> @@ -8794,7 +8738,7 @@ <name>ВыгрузитьКорневойСертификат</name> </handler> </action> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <parameters> diff --git a/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Forms/ЗаявлениеНаВыпускНовогоКвалифицированногоСертификата/Module.bsl b/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Forms/ЗаявлениеНаВыпускНовогоКвалифицированногоСертификата/Module.bsl index c3cb5b87e..b3807b794 100644 --- a/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Forms/ЗаявлениеНаВыпускНовогоКвалифицированногоСертификата/Module.bsl +++ b/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Forms/ЗаявлениеНаВыпускНовогоКвалифицированногоСертификата/Module.bsl @@ -1,7 +1,7 @@ #Область ОбработчикиСобытийФормы &НаКлиенте -Перем Криптография, РаботаСДвоичнымиДанными, СтраницыТекущаяСтраница, СтраницыПрогрессаТекущаяСтраница; +Перем Криптография, РаботаСДвоичнымиДанными; &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) @@ -48,7 +48,7 @@ ПодключитьОбработчикОжидания("ПриИзмененияСоставаИлиНастроекПрограмм", 0.1, Истина); КонецЕсли; - Если Лев(ИмяСобытия, СтрДлина("Запись_")) <> "Запись_" Тогда + Если Не СтрНачинаетсяС(ИмяСобытия, "Запись_") Тогда Возврат; КонецЕсли; @@ -56,13 +56,10 @@ ПодключитьОбработчикОжидания("ОбработчикОжиданияРеквизитыОрганизацииПриИзменении", 0.1, Истина); КонецЕсли; - Если Источник = Директор - Или Источник = ГлавныйБухгалтер - Или Источник = Сотрудник Тогда + Если Источник = Сотрудник + И Элементы.Страницы.ТекущаяСтраница = Элементы.СтраницаВладелецСертификата Тогда - Если Элементы.Страницы.ТекущаяСтраница = Элементы.СтраницаВладелецСертификата Тогда - ПодключитьОбработчикОжидания("ОбработчикОжиданияРеквизитыВладельцаПриИзменении", 0.1, Истина); - КонецЕсли; + ПодключитьОбработчикОжидания("ОбработчикОжиданияРеквизитыВладельцаПриИзменении", 0.1, Истина); КонецЕсли; Если Источник = ДокументыПартнерСсылка @@ -79,29 +76,6 @@ КонецПроцедуры -&НаКлиенте -Процедура ПриОткрытии(Отказ) - -#Если ВебКлиент Тогда - ПодключитьОбработчикОжидания("ОбновитьТекущиеСтраницы", 0.1, Истина); - - СтраницыТекущаяСтраница = Элементы.Страницы.ТекущаяСтраница; - СтраницыПрогрессаТекущаяСтраница = Элементы.СтраницыПрогресса.ТекущаяСтраница; - - Элементы.Страницы.ТекущаяСтраница = Элементы.СтраницаСоглашение; - Элементы.СтраницыПрогресса.ТекущаяСтраница = Элементы.СтраницаПрогрессаСоглашение; -#КонецЕсли - -КонецПроцедуры - -&НаКлиенте -Процедура ОбновитьТекущиеСтраницы() - - Элементы.Страницы.ТекущаяСтраница = СтраницыТекущаяСтраница; - Элементы.СтраницыПрогресса.ТекущаяСтраница = СтраницыПрогрессаТекущаяСтраница; - -КонецПроцедуры - &НаКлиенте Процедура ПриЗакрытии() @@ -142,6 +116,7 @@ Процедура ОрганизацияПриИзменении(Элемент) ОчиститьРеквизитыОрганизации(); + ОчиститьРеквизитыВладельца(); ПриИзмененииОрганизацииНаСервере(); КонецПроцедуры @@ -231,25 +206,7 @@ &НаКлиенте Процедура СотрудникПриИзменении(Элемент) - НовыйВидВладельца = ВидВладельца; - - Если Не ЗначениеЗаполнено(Сотрудник) Тогда - НовыйВидВладельца = "Сотрудник"; - - ИначеЕсли Сотрудник = Директор Тогда - НовыйВидВладельца = "Директор"; - - ИначеЕсли Сотрудник = ГлавныйБухгалтер Тогда - НовыйВидВладельца = "ГлавныйБухгалтер"; - Иначе - НовыйВидВладельца = "Сотрудник"; - КонецЕсли; - - Если НовыйВидВладельца <> ВидВладельца Тогда - ВидВладельца = НовыйВидВладельца; - ОчиститьРеквизитыВладельца(); - КонецЕсли; - + ОчиститьРеквизитыВладельца(); ПриИзмененииВладельцаСертификатаНаСервере(); КонецПроцедуры @@ -283,7 +240,8 @@ Если Не ЗначениеЗаполнено(ГражданствоОКСМКодАльфа3) Тогда Если ЗначениеЗаполнено(Гражданство) Тогда ПоказатьПредупреждение(, СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'У страны ""%1"" не указан трехзначный буквенный код альфа-3 по ОКСМ.'"), Гражданство)); + НСтр("ru = 'У страны ""%1"" не указан трехзначный буквенный код альфа-3 по ОКСМ.'"), + Гражданство)); КонецЕсли; Гражданство = Неопределено; ГражданствоПредставление = ""; @@ -584,16 +542,16 @@ &НаКлиенте Процедура ВыгрузитьЗапросНаСертификат(Команда) - ЭлектроннаяПодписьСлужебныйКлиент.СохранитьЗапросНаСертификат(, АдресЗапросаНаСертификат, - ИмяФайлаБезРасширения()); + ЭлектроннаяПодписьСлужебныйКлиент.СохранитьЗапросНаСертификат(Неопределено, + АдресЗапросаНаСертификат, ИмяФайлаБезРасширения()); КонецПроцедуры &НаКлиенте Процедура ВыгрузитьКорневойСертификат(Команда) - ЭлектроннаяПодписьСлужебныйКлиент.СохранитьСертификат(, АдресКорневогоСертификата, - НСтр("ru = 'Корневой сертификат ООО НПЦ 1С'")); + ЭлектроннаяПодписьСлужебныйКлиент.СохранитьСертификат(Неопределено, + АдресКорневогоСертификата, НСтр("ru = 'Корневой сертификат ООО НПЦ 1С'")); КонецПроцедуры @@ -642,8 +600,8 @@ &НаКлиенте Процедура ВыгрузитьСертификатЗавершение(Результат, Контекст) Экспорт - ЭлектроннаяПодписьСлужебныйКлиент.СохранитьСертификат(, АдресКорневогоСертификата, - НСтр("ru = 'Корневой сертификат ООО НПЦ 1С'")); + ЭлектроннаяПодписьСлужебныйКлиент.СохранитьСертификат(Неопределено, + АдресКорневогоСертификата, НСтр("ru = 'Корневой сертификат ООО НПЦ 1С'")); КонецПроцедуры @@ -785,11 +743,12 @@ Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.КонтактнаяИнформация") Тогда МодульУправлениеКонтактнойИнформацией = ОбщегоНазначения.ОбщийМодуль("УправлениеКонтактнойИнформацией"); + ДополнительныеПараметры = Новый Структура("НаименованиеВключаетСокращение", Истина); ФактическийАдресСтруктура = - МодульУправлениеКонтактнойИнформацией.ПредыдущаяСтруктураКонтактнойИнформацииXML(ФактическийАдресXML); + МодульУправлениеКонтактнойИнформацией.СведенияОбАдресе(ФактическийАдресXML, ДополнительныеПараметры); ЮридическийАдресСтруктура = - МодульУправлениеКонтактнойИнформацией.ПредыдущаяСтруктураКонтактнойИнформацииXML(ЮридическийАдресXML); + МодульУправлениеКонтактнойИнформацией.СведенияОбАдресе(ЮридическийАдресXML, ДополнительныеПараметры); КонецЕсли; Элементы.Страницы.ТекущаяСтраница = Элементы.СтраницаПодготовкаЗапросаНаСертификат; @@ -820,7 +779,7 @@ Если ТипЗнч(Результат) <> Тип("МенеджерКриптографии") Тогда Объект.Программа = Неопределено; ЭлектроннаяПодписьСлужебныйКлиент.ПоказатьОшибкуОбращенияКПрограмме( - НСтр("ru = 'Создание ключа электронной подписи'"),, Результат, Новый Структура); + НСтр("ru = 'Создание ключа электронной подписи'"), "", Результат, Новый Структура); Возврат; КонецЕсли; @@ -918,17 +877,17 @@ Если ДокументыПартнерЭтоИП Тогда Если Не ЗначениеЗаполнено(ДокументыПартнерИНН) Тогда - Текст = Текст + Символы.ПС + Символы.ПС + - НСтр("ru = 'Не указан ИНН обслуживающей организации. - |Заявление может обрабатываться дольше обычного.'"); + Текст = Текст + Символы.ПС + Символы.ПС + + НСтр("ru = 'Не указан ИНН обслуживающей организации. + |Заявление может обрабатываться дольше обычного.'"); КонецЕсли; ИначеЕсли Не ЗначениеЗаполнено(ДокументыПартнерИНН) Или Не ЗначениеЗаполнено(ДокументыПартнерКПП) Тогда - Текст = Текст + Символы.ПС + Символы.ПС + - НСтр("ru = 'Не указан ИНН или КПП обслуживающей организации. - |Заявление может обрабатываться дольше обычного.'"); + Текст = Текст + Символы.ПС + Символы.ПС + + НСтр("ru = 'Не указан ИНН или КПП обслуживающей организации. + |Заявление может обрабатываться дольше обычного.'"); КонецЕсли; ПоказатьВопрос( @@ -1121,7 +1080,7 @@ &НаКлиентеНаСервереБезКонтекста Функция УстановитьГиперссылку(Строка, Подстрока, Гиперссылка) - Позиция = Найти(Строка, Подстрока); + Позиция = СтрНайти(Строка, Подстрока); Если Позиция = 0 Тогда Возврат Новый ФорматированнаяСтрока(Строка); КонецЕсли; @@ -1203,8 +1162,8 @@ ОчиститьРеквизит("Телефон"); ТелефонXML = ""; - ВидВладельца = ""; Сотрудник = Неопределено; + ОчиститьРеквизитыВладельца(); КонецПроцедуры @@ -1432,7 +1391,8 @@ МодульРегламентированныеДанныеКлиентСервер = ОбщегоНазначения.ОбщийМодуль("РегламентированныеДанныеКлиентСервер"); - Если Не МодульРегламентированныеДанныеКлиентСервер.КонтрольныйКлючЛицевогоСчетаСоответствуетТребованиям(Значение, БИК) Тогда + ЭтоБанк = ЗначениеЗаполнено(КорреспондентскийСчет); + Если Не МодульРегламентированныеДанныеКлиентСервер.КонтрольныйКлючЛицевогоСчетаСоответствуетТребованиям(Значение, БИК, ЭтоБанк) Тогда ТекстСообщения = НСтр("ru = 'Контрольное число счета не совпадает с рассчитанным с учетом БИК'"); Возврат Ложь; КонецЕсли; @@ -1490,7 +1450,8 @@ МодульУправлениеКонтактнойИнформацией = ОбщегоНазначения.ОбщийМодуль("УправлениеКонтактнойИнформацией"); ТекстСообщения = ""; - АдресСтруктура = МодульУправлениеКонтактнойИнформацией.ПредыдущаяСтруктураКонтактнойИнформацииXML(АдресMXL); + ДополнительныеПараметры = Новый Структура("НаименованиеВключаетСокращение", Истина); + АдресСтруктура = МодульУправлениеКонтактнойИнформацией.СведенияОбАдресе(АдресMXL, ДополнительныеПараметры); // Проверка, что адрес российский. Если Не АдресСтруктура.Свойство("КодРегиона") Тогда @@ -1633,12 +1594,7 @@ &НаСервере Процедура ПриИзмененииВладельцаСертификатаНаСервере(Загрузка = Ложь) - Если Не ЗначениеЗаполнено(ВидВладельца) Тогда - ВидВладельца = "Директор"; - КонецЕсли; - Реквизиты = Новый Структура; - Реквизиты.Вставить("ВидВладельца", ВидВладельца); Реквизиты.Вставить("Директор"); Реквизиты.Вставить("ГлавныйБухгалтер"); Реквизиты.Вставить("Сотрудник", Сотрудник); @@ -1682,25 +1638,15 @@ Иначе Элементы.Сотрудник.СписокВыбора.Очистить(); - Если ЭтоИндивидуальныйПредприниматель Тогда - ВидВладельца = "Сотрудник"; - Иначе + Если Не ЭтоИндивидуальныйПредприниматель Тогда Если ЗначениеЗаполнено(Реквизиты.Директор) Тогда - Элементы.Сотрудник.СписокВыбора.Добавить(Реквизиты.Директор, - СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Директор: %1'"), Реквизиты.Директор)); - - ИначеЕсли ВидВладельца = "Директор" Тогда - ВидВладельца = "ГлавныйБухгалтер"; + Элементы.Сотрудник.СписокВыбора.Добавить(Реквизиты.Директор, СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Директор: %1'"), Реквизиты.Директор)); КонецЕсли; Если ЗначениеЗаполнено(Реквизиты.ГлавныйБухгалтер) Тогда - Элементы.Сотрудник.СписокВыбора.Добавить(Реквизиты.ГлавныйБухгалтер, - СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Главный бухгалтер: %1'"), Реквизиты.ГлавныйБухгалтер)); - - ИначеЕсли ВидВладельца = "ГлавныйБухгалтер" Тогда - ВидВладельца = "Сотрудник"; + Элементы.Сотрудник.СписокВыбора.Добавить(Реквизиты.ГлавныйБухгалтер, СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Главный бухгалтер: %1'"), Реквизиты.ГлавныйБухгалтер)); КонецЕсли; КонецЕсли; @@ -1710,15 +1656,7 @@ Элементы.Сотрудник.Заголовок = НСтр("ru = 'Сотрудник'"); КонецЕсли; - Директор = Реквизиты.Директор; - ГлавныйБухгалтер = Реквизиты.ГлавныйБухгалтер; - Сотрудник = ?(Загрузка, Сотрудник, Реквизиты.Сотрудник); - - Если ВидВладельца = "Директор" Тогда - Сотрудник = Директор; - ИначеЕсли ВидВладельца = "ГлавныйБухгалтер" Тогда - Сотрудник = ГлавныйБухгалтер; - КонецЕсли; + Сотрудник = ?(Загрузка, Сотрудник, Реквизиты.Сотрудник); КонецЕсли; Если ЭтоИндивидуальныйПредприниматель Тогда @@ -2199,7 +2137,11 @@ РеквизитТип = Неопределено; Иначе РеквизитТип = СоставТипов; - Элемент.ВыбиратьТип = РеквизитТип.Количество() > 1; + Если Элемент.ОтображениеКнопкиВыбора = ОтображениеКнопкиВыбора.ОтображатьВВыпадающемСписке Тогда + Элемент.ВыбиратьТип = Ложь; + Иначе + Элемент.ВыбиратьТип = РеквизитТип.Количество() > 1; + КонецЕсли; КонецЕсли; КонецЕсли; @@ -2216,6 +2158,10 @@ Процедура УстановитьРеквизит(Реквизиты, ИмяРеквизита, ТолькоЦифры = Ложь, КнопкаВыбора = Ложь, ЭтоАдрес = Неопределено) Если Реквизиты[ИмяРеквизита] = Неопределено Тогда + Возврат; // Заполнение реквизита не внедрено. + КонецЕсли; + + Если Не ЗначениеЗаполнено(Реквизиты[ИмяРеквизита]) Тогда ЭтотОбъект[ИмяРеквизита] = Неопределено; Если ЭтоАдрес <> Неопределено Тогда ЭтотОбъект[ИмяРеквизита + "XML"] = ""; @@ -2418,8 +2364,7 @@ |После заключения договора отправьте заявление еще раз.'"), ПараметрыАутентификацииНаСайте.Логин); Иначе - ОписаниеОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонОписанияОшибки, - ОписаниеОшибки); + ОписаниеОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонОписанияОшибки, ОписаниеОшибки); КонецЕсли; Возврат Ложь; @@ -2448,7 +2393,7 @@ Исключение ИнформацияОбОшибке = ИнформацияОбОшибке(); КраткоеПредставлениеОшибки = КраткоеПредставлениеОшибки(ИнформацияОбОшибке); - Если Найти(КраткоеПредставлениеОшибки, "IncorrectLoginOrPasswordApiException") > 0 Тогда + Если СтрНайти(КраткоеПредставлениеОшибки, "IncorrectLoginOrPasswordApiException") > 0 Тогда КраткоеПредставлениеОшибки = НСтр("ru = 'Некорректное имя пользователя или пароль.'"); ПараметрыАутентификацииНаСайте = Неопределено; КонецЕсли; @@ -2700,16 +2645,20 @@ МодульУправлениеКонтактнойИнформацией = ОбщегоНазначения.ОбщийМодуль("УправлениеКонтактнойИнформацией"); - АдресСтруктура = МодульУправлениеКонтактнойИнформацией.ПредыдущаяСтруктураКонтактнойИнформацииXML(АдресXML); + ДополнительныеПараметры = Новый Структура("НаименованиеВключаетСокращение", Истина); + АдресСтруктура = МодульУправлениеКонтактнойИнформацией.СведенияОбАдресе(АдресXML, ДополнительныеПараметры); + + ПервыйКорпус = ?(АдресСтруктура.Корпуса.Количество() > 0, АдресСтруктура.Корпуса[0].Номер, ""); + ПервоеПомещение = ?(АдресСтруктура.Помещения.Количество() > 0, АдресСтруктура.Помещения[0].Номер, ""); ЗаписьXML.ЗаписатьНачалоЭлемента(ИмяЭлемента); ЗаписьXML.ЗаписатьАтрибут("КодРегион", АдресСтруктура.КодРегиона); ЗаписьXML.ЗаписатьАтрибут("НаселПункт", НаселенныйПунктПолностью(АдресСтруктура)); ЗаписьXML.ЗаписатьАтрибут("Улица", АдресСтруктура.Улица); - ЗаписьXML.ЗаписатьАтрибут("Дом", АдресСтруктура.Дом); - ЗаписьXML.ЗаписатьАтрибут("Корпус", АдресСтруктура.Корпус); - ЗаписьXML.ЗаписатьАтрибут("Кварт", АдресСтруктура.Квартира); + ЗаписьXML.ЗаписатьАтрибут("Дом", АдресСтруктура.Здание.Номер); + ЗаписьXML.ЗаписатьАтрибут("Корпус", ПервыйКорпус); + ЗаписьXML.ЗаписатьАтрибут("Кварт", ПервоеПомещение); ЗаписьXML.ЗаписатьКонецЭлемента(); @@ -2741,16 +2690,16 @@ Исключение ИнформацияОбОшибке = ИнформацияОбОшибке(); ДатаОбновленияСостояния = ТекущаяДатаСеанса(); - СостояниеОбработкиЗаявления = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - ШаблонОписанияОшибки, КраткоеПредставлениеОшибки(ИнформацияОбОшибке)); + СостояниеОбработкиЗаявления = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонОписанияОшибки, + КраткоеПредставлениеОшибки(ИнформацияОбОшибке)); Возврат Неопределено; КонецПопытки; ДатаОбновленияСостояния = ТекущаяДатаСеанса(); Если Не ЗначениеЗаполнено(Ответ) Тогда - СостояниеОбработкиЗаявления = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - ШаблонОписанияОшибки, НСтр("ru = 'Сервер вернул пустой ответ.'")); + СостояниеОбработкиЗаявления = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонОписанияОшибки, + НСтр("ru = 'Сервер вернул пустой ответ.'")); Возврат Неопределено; КонецЕсли; @@ -2784,8 +2733,8 @@ Если УзелDOM.Количество() > 0 Тогда ОписаниеОшибки = УзелDOM[0].ТекстовоеСодержимое; Иначе - ОписаниеОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Сервер вернул код ошибки: %1'"), Строка(КодРезультата)); + ОписаниеОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Сервер вернул код ошибки: %1'"), + Строка(КодРезультата)); КонецЕсли; КонецЕсли; @@ -2881,8 +2830,8 @@ Если УзелDOM.Количество() > 0 Тогда ОписаниеОшибки = УзелDOM[0].ТекстовоеСодержимое; Иначе - ОписаниеОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Сервер вернул код ошибки: %1'"), Строка(КодРезультата)); + ОписаниеОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Сервер вернул код ошибки: %1'"), + Строка(КодРезультата)); КонецЕсли; КонецЕсли; @@ -3035,7 +2984,7 @@ Если ТипЗнч(Менеджер) <> Тип("МенеджерКриптографии") Тогда ЭлектроннаяПодписьСлужебныйКлиент.ПоказатьОшибкуОбращенияКПрограмме( - НСтр("ru = 'Установка сертификата на компьютер'"),, Менеджер, Новый Структура); + НСтр("ru = 'Установка сертификата на компьютер'"), "", Менеджер, Новый Структура); ОшибкаУстановкиСертификата = Менеджер.ОписаниеОшибки; ВыполнитьОбработкуОповещения(Контекст.Оповещение, Ложь); @@ -3472,9 +3421,10 @@ Строка = ИменаВсехРегионовРФ.ПолучитьСтроку(Число(КодРегиона)); - Если Лев(Строка, 3) <> КодРегиона + " " Тогда + Если Не СтрНачинаетсяС(Строка, КодРегиона + " ") Тогда ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Регион РФ с кодом ""%1"" не существует.'"), КодРегиона); + НСтр("ru = 'Регион РФ с кодом ""%1"" не существует.'"), + КодРегиона); КонецЕсли; Строка = СокрЛП(Сред(Строка, 4)); @@ -3808,11 +3758,15 @@ ТекстHTML = Справочники.СертификатыКлючейЭлектроннойПодписиИШифрования.ПолучитьМакет( "Соглашение").ПолучитьТекст(); - ТекстHTML = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ТекстHTML, + ТекстHTML = СтрЗаменить(ТекстHTML, "%1", // Наименование удостоверяющего центра. - НСтр("ru = 'ООО «Научно-производственный центр ""1С""»'"), + НСтр("ru = 'ООО «Научно-производственный центр ""1С""»'")); + + ТекстHTML = СтрЗаменить(ТекстHTML, "%2", // Адрес регламента удостоверяющего центра. - НСтр("ru = 'http://ca.1c.ru/reglament.pdf'"), + НСтр("ru = 'http://ca.1c.ru/reglament.pdf'")); + + ТекстHTML = СтрЗаменить(ТекстHTML, "%3", // Сеть доверенных удостоверяющих центров. НСтр("ru = 'уполномоченного федерального органа в области использования электронной подписи'")); @@ -3967,7 +3921,7 @@ Если Контекст.ПоказатьОшибку Тогда ЭлектроннаяПодписьСлужебныйКлиент.ПоказатьОшибкуОбращенияКПрограмме( - НСтр("ru = 'Выбор программы электронной подписи'"),, Менеджер, Новый Структура); + НСтр("ru = 'Выбор программы электронной подписи'"), "", Менеджер, Новый Структура); КонецЕсли; КонецЕсли; @@ -4012,9 +3966,6 @@ ОбновитьЗначение(Содержание, "Телефон"); ОбновитьЗначение(Содержание, "ТелефонXML"); // Владелец. - ОбновитьЗначение(Содержание, "ВидВладельца"); - ОбновитьЗначение(Содержание, "Директор"); - ОбновитьЗначение(Содержание, "ГлавныйБухгалтер"); ОбновитьЗначение(Содержание, "Сотрудник"); ОбновитьЗначение(Содержание, "Фамилия"); ОбновитьЗначение(Содержание, "Имя"); @@ -4270,7 +4221,7 @@ КраткоеПредставлениеОшибки(ИнформацияОбОшибке))); ЭлектроннаяПодписьСлужебныйКлиент.ПоказатьОшибкуОбращенияКПрограмме( - НСтр("ru = 'Создание ключа электронной подписи'"),, Ошибка, Новый Структура); + НСтр("ru = 'Создание ключа электронной подписи'"), "", Ошибка, Новый Структура); ВыполнитьОбработкуОповещения(Контекст.Оповещение, Ложь); @@ -4511,7 +4462,7 @@ + Символы.ПС + КраткоеПредставлениеОшибки(ИнформацияОбОшибке)); ЭлектроннаяПодписьСлужебныйКлиент.ПоказатьОшибкуОбращенияКПрограмме( - НСтр("ru = 'Создание запроса на сертификат'"),, Ошибка, Новый Структура); + НСтр("ru = 'Создание запроса на сертификат'"), "", Ошибка, Новый Структура); ИначеЕсли Не Контекст.ЗапросСоздан Тогда ПоказатьПредупреждение(, НСтр("ru = 'Запрос на сертификат не создан.'")); @@ -4579,7 +4530,7 @@ Возврат; КонецЕсли; - Позиция = Найти(Контекст.ПутьПослеСоздания, ":."); + Позиция = СтрНайти(Контекст.ПутьПослеСоздания, ":."); Если Позиция = 0 Тогда ВыполнитьОбработкуОповещения(Контекст.Оповещение, НайтиБезУчетаРегистраИРазделителяПути( ИменаКонтейнеровКлючей, Контекст.ИмяДляСоздания) > 0); @@ -4656,7 +4607,7 @@ &НаКлиентеНаСервереБезКонтекста Функция НайтиБезУчетаРегистраИРазделителяПути(Строка, ПодстрокаПоиска) - Возврат Найти(НРег(СтрЗаменить(Строка, "/", "\")), НРег(СтрЗаменить(ПодстрокаПоиска, "/", "\"))); + Возврат СтрНайти(НРег(СтрЗаменить(Строка, "/", "\")), НРег(СтрЗаменить(ПодстрокаПоиска, "/", "\"))); КонецФункции @@ -4742,7 +4693,7 @@ Адрес = ФактическийАдресСтруктура; // Адрес местонахождения юридического лица. КонецЕсли; - // Поле CN - общее имя (организация или индивидуального предпринимателя). + // Поле CN - общее имя (организация или индивидуальный предприниматель). Если ЭтоИндивидуальныйПредприниматель Тогда CN = СтрЗаменить(Фамилия, " ", "_") + " " + СтрЗаменить(Имя, " ", "_") + " " + СтрЗаменить(Отчество, " ", "_"); Иначе @@ -4787,9 +4738,10 @@ МодульУправлениеКонтактнойИнформациейКлиентСервер = ОбщегоНазначенияКлиент.ОбщийМодуль( "УправлениеКонтактнойИнформациейКлиентСервер"); - Структура = Новый Структура("Улица, УлицаСокращение, Дом, ТипДома, Корпус, ТипКорпуса, Квартира, ТипКвартиры"); + Структура = Новый Структура("Улица, УлицаСокращение, Здание, Корпуса, Помещения"); ЗаполнитьЗначенияСвойств(Структура, Адрес); МодульУправлениеКонтактнойИнформациейКлиентСервер.СформироватьПредставлениеАдреса(Структура, Улица); + КонецЕсли; Поля.Вставить("Street", Лев(Улица, 128)); СписокПараметров.Добавить("2.5.4.9", Поля.Street); @@ -4895,9 +4847,9 @@ УникальноеИмя = ЭлементСписка.Значение; Если УникальноеИмя = ЭлементСписка.Представление - И Найти(УникальноеИмя, "/") = 0 - И Найти(УникальноеИмя, "\") = 0 - И Найти(УникальноеИмя, ":") = 0 Тогда + И СтрНайти(УникальноеИмя, "/") = 0 + И СтрНайти(УникальноеИмя, "\") = 0 + И СтрНайти(УникальноеИмя, ":") = 0 Тогда // ViPNet 3.2 (основная папка контейнеров не указана). УникальноеИмя = "\Infotecs\Containers\" + УникальноеИмя; @@ -5074,11 +5026,13 @@ &НаКлиенте Процедура СоздатьОбъектКриптографииПослеУстановкиНеВыводитьСообщенияОбОшибках(Контекст) Экспорт + ПерсональныеНастройки = ЭлектроннаяПодписьКлиентСервер.ПерсональныеНастройки(); + ПутиКПрограммам = ПерсональныеНастройки.ПутиКПрограммамЭлектроннойПодписиИШифрования; + Строки = СписокПрограмм.НайтиСтроки(Новый Структура("Ссылка", Объект.Программа)); ИмяПрограммы = Строки[0].ИмяПрограммы; ТипПрограммы = Строки[0].ТипПрограммы; - ПутьКПрограмме = Строка(ЭлектроннаяПодписьКлиентСервер.ПерсональныеНастройки( - ).ПутиКПрограммамЭлектроннойПодписиИШифрования.Получить(Объект.Программа)); + ПутьКПрограмме = Строка(ПутиКПрограммам.Получить(Объект.Программа)); Криптография.НачатьВызовСоздатьМенеджераКриптографии(Новый ОписаниеОповещения( "СоздатьОбъектКриптографииПослеВызоваСоздатьМенеджераКриптографии", ЭтотОбъект, Контекст, diff --git a/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Forms/ОповещениеОбОкончанииСрокаДействия/Form.form b/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Forms/ОповещениеОбОкончанииСрокаДействия/Form.form index dc7cc8552..b3348a418 100644 --- a/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Forms/ОповещениеОбОкончанииСрокаДействия/Form.form +++ b/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Forms/ОповещениеОбОкончанииСрокаДействия/Form.form @@ -257,7 +257,6 @@ <group>Vertical</group> <autoFillCheck>true</autoFillCheck> <enabled>true</enabled> - <verticalScroll>UseIfNecessary</verticalScroll> <showTitle>auto</showTitle> <showCloseButton>true</showCloseButton> <attributes> @@ -326,7 +325,7 @@ <use> <common>true</common> </use> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <parameters> diff --git a/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Forms/ПередачаПараметров/Module.bsl b/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Forms/ПередачаПараметров/Module.bsl index f9c5300f4..837694f32 100644 --- a/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Forms/ПередачаПараметров/Module.bsl +++ b/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Forms/ПередачаПараметров/Module.bsl @@ -25,12 +25,14 @@ Процедура ОткрытьНовуюФорму(ВидФормы, СерверныеПараметры, КлиентскиеПараметры = Неопределено, ОбработкаЗавершения = Неопределено, Знач ВладелецНовойФормы = Неопределено) Экспорт - ВидыФорм = ",ПодписаниеДанных,ШифрованиеДанных,РасшифровкаДанных, - |,ВыборСертификатаДляПодписанияИлиРасшифровки,ПроверкаСертификата,"; + ВидыФорм = + ",ПодписаниеДанных,ШифрованиеДанных,РасшифровкаДанных, + |,ВыборСертификатаДляПодписанияИлиРасшифровки,ПроверкаСертификата,"; - Если Найти(ВидыФорм, "," + ВидФормы + ",") = 0 Тогда + Если СтрНайти(ВидыФорм, "," + ВидФормы + ",") = 0 Тогда ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Ошибка в процедуре ОткрытьНовуюФорму. ВидФормы ""%1"" не поддерживается.'"), ВидФормы); + НСтр("ru = 'Ошибка в процедуре ОткрытьНовуюФорму. ВидФормы ""%1"" не поддерживается.'"), + ВидФормы); КонецЕсли; Если ВладелецНовойФормы = Неопределено Тогда diff --git a/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Forms/ПодборСертификатовДляШифрования/Form.form b/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Forms/ПодборСертификатовДляШифрования/Form.form index 171e4fa70..bacacac97 100644 --- a/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Forms/ПодборСертификатовДляШифрования/Form.form +++ b/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Forms/ПодборСертификатовДляШифрования/Form.form @@ -1290,7 +1290,7 @@ <name>ДобавитьИзФайла</name> </handler> </action> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <formCommands> @@ -1308,7 +1308,7 @@ <name>Добавить</name> </handler> </action> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <parameters> diff --git a/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Forms/ПодписаниеДанных/Form.form b/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Forms/ПодписаниеДанных/Form.form index 7582b1b89..4f3f87660 100644 --- a/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Forms/ПодписаниеДанных/Form.form +++ b/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Forms/ПодписаниеДанных/Form.form @@ -1208,7 +1208,7 @@ <name>Подписать</name> </handler> </action> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <parameters> diff --git a/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Forms/ПроверкаСертификата/Form.form b/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Forms/ПроверкаСертификата/Form.form index 01fa6f476..34f445ac0 100644 --- a/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Forms/ПроверкаСертификата/Form.form +++ b/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Forms/ПроверкаСертификата/Form.form @@ -2344,6 +2344,23 @@ <common>true</common> </edit> </attributes> + <attributes> + <name>СтандартныеПроверки</name> + <title> + <key>ru</key> + <value>Стандартные проверки</value> + + 15 + + Boolean + + + true + + + true + + Проверить @@ -2359,7 +2376,7 @@ <name>Проверить</name> </handler> </action> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <parameters> diff --git a/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Forms/ПроверкаСертификата/Module.bsl b/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Forms/ПроверкаСертификата/Module.bsl index fb667cfb7..71abb76f5 100644 --- a/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Forms/ПроверкаСертификата/Module.bsl +++ b/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Forms/ПроверкаСертификата/Module.bsl @@ -23,13 +23,15 @@ Элементы.ФормаЗакрыть.Заголовок = НСтр("ru = 'Отмена'"); КонецЕсли; + СтандартныеПроверки = Истина; + Проверки = Новый ТаблицаЗначений; Проверки.Колонки.Добавить("Имя", Новый ОписаниеТипов("Строка")); Проверки.Колонки.Добавить("Представление", Новый ОписаниеТипов("Строка")); Проверки.Колонки.Добавить("Подсказка", Новый ОписаниеТипов("Строка")); ЭлектроннаяПодписьПереопределяемый.ПриСозданииФормыПроверкаСертификата(Параметры.Сертификат, - Проверки, Параметры.ПараметрыДополнительныхПроверок); + Проверки, Параметры.ПараметрыДополнительныхПроверок, СтандартныеПроверки); Для каждого Проверка Из Проверки Цикл Группа = Элементы.Добавить("Группа" + Проверка.Имя, Тип("ГруппаФормы"), Элементы.ГруппаДополнительныеПроверки); @@ -64,6 +66,16 @@ ДополнительныеПроверки.Добавить(Проверка.Имя); КонецЦикла; + Если Не СтандартныеПроверки Тогда + Если ДополнительныеПроверки.Количество() = 0 Тогда + ВызватьИсключение + НСтр("ru = 'Для проверки сертификата отключены стандартные проверки, + |при этом дополнительных проверок не указано.'"); + КонецЕсли; + Элементы.ГруппаОбщиеПроверки.Видимость = Ложь; + Элементы.ГруппаПроверкиОпераций.Видимость = Ложь; + СтандартныеПодсистемыСервер.УстановитьКлючНазначенияФормы(ЭтотОбъект, "НестандартныеПроверки"); + КонецЕсли; СвойстваСертификата = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(Сертификат, "ДанныеСертификата, Программа, УсиленнаяЗащитаЗакрытогоКлюча"); @@ -74,10 +86,12 @@ ОбновитьВидимостьНаСервере(); - Если Элементы.ГруппаЗаконныйСертификат.Видимость Тогда - ИмяПервойПроверки = "ЗаконныйСертификат"; - Иначе - ИмяПервойПроверки = "НаличиеСертификата"; + Если СтандартныеПроверки Тогда + Если Элементы.ГруппаЗаконныйСертификат.Видимость Тогда + ИмяПервойПроверки = "ЗаконныйСертификат"; + Иначе + ИмяПервойПроверки = "НаличиеСертификата"; + КонецЕсли; КонецЕсли; КонецПроцедуры @@ -289,14 +303,16 @@ ПроверкиНаСервере = Новый Структура; // Очистка предыдущих результатов проверки. - ОсновныеПроверки = Новый Структура( - "ЗаконныйСертификат, НаличиеСертификата, ДанныеСертификата, НаличиеПрограммы, - |Подписание, ПроверкаПодписи, Шифрование, Расшифровка"); + Если СтандартныеПроверки Тогда + ОсновныеПроверки = Новый Структура( + "ЗаконныйСертификат, НаличиеСертификата, ДанныеСертификата, НаличиеПрограммы, + |Подписание, ПроверкаПодписи, Шифрование, Расшифровка"); - Для каждого КлючИЗначение Из ОсновныеПроверки Цикл - УстановитьЭлемент(ЭтотОбъект, КлючИЗначение.Ключ, Ложь); - УстановитьЭлемент(ЭтотОбъект, КлючИЗначение.Ключ, Истина); - КонецЦикла; + Для каждого КлючИЗначение Из ОсновныеПроверки Цикл + УстановитьЭлемент(ЭтотОбъект, КлючИЗначение.Ключ, Ложь); + УстановитьЭлемент(ЭтотОбъект, КлючИЗначение.Ключ, Истина); + КонецЦикла; + КонецЕсли; Для каждого ЭлементСписка Из ДополнительныеПроверки Цикл УстановитьЭлемент(ЭтотОбъект, ЭлементСписка.Значение, Ложь); @@ -315,7 +331,11 @@ Процедура ПроверитьСертификатПослеПроверкиНаКлиенте(Результат, Контекст) Экспорт Если ОперацииНаСервере Тогда - ПроверитьНаСторонеСервера(СвойстваПароля.Значение); + Если СтандартныеПроверки Тогда + ПроверитьНаСторонеСервера(СвойстваПароля.Значение); + Иначе + ПроверитьНаСторонеСервераДополнительныеПроверки(); + КонецЕсли; Иначе ПроверкиНаСервере = Неопределено; КонецЕсли; @@ -348,8 +368,13 @@ Контекст = Новый Структура("Оповещение", Оповещение); - НачатьПодключениеРасширенияРаботыСКриптографией(Новый ОписаниеОповещения( - "ПроверитьНаСторонеКлиентаПослеПодключенияРасширенияРаботыСКриптографией", ЭтотОбъект, Контекст)); + Если СтандартныеПроверки Тогда + НачатьПодключениеРасширенияРаботыСКриптографией(Новый ОписаниеОповещения( + "ПроверитьНаСторонеКлиентаПослеПодключенияРасширенияРаботыСКриптографией", ЭтотОбъект, Контекст)); + Иначе + Контекст.Вставить("МенеджерКриптографии", Неопределено); + ПроверитьНаСторонеКлиентаДополнительныеПроверки(Контекст); + КонецЕсли; КонецПроцедуры @@ -632,6 +657,14 @@ УстановитьЭлемент(ЭтотОбъект, "Расшифровка", Ложь, ОписаниеОшибки, Истина); КонецЕсли; + ПроверитьНаСторонеКлиентаДополнительныеПроверки(Контекст); + +КонецПроцедуры + +// Продолжение процедуры ПроверитьНаСторонеКлиента. +&НаКлиенте +Процедура ПроверитьНаСторонеКлиентаДополнительныеПроверки(Контекст) + // Дополнительные проверки. Контекст.Вставить("Индекс", -1); @@ -663,7 +696,7 @@ Контекст.Вставить("ПараметрыВыполнения", ПараметрыВыполнения); Попытка - ЭлектроннаяПодписьПереопределяемыйКлиент.ПриДополнительнойПроверкеСертификата(ПараметрыВыполнения); + ЭлектроннаяПодписьКлиентПереопределяемый.ПриДополнительнойПроверкеСертификата(ПараметрыВыполнения); Исключение ИнформацияОбОшибке = ИнформацияОбОшибке(); ПараметрыВыполнения.ОжидатьПродолжения = Ложь; @@ -810,6 +843,13 @@ УстановитьЭлемент(ЭтотОбъект, "Расшифровка", Истина, ОписаниеОшибки, Истина); КонецЕсли; + ПроверитьНаСторонеСервераДополнительныеПроверки(МенеджерКриптографии); + +КонецПроцедуры + +&НаСервере +Процедура ПроверитьНаСторонеСервераДополнительныеПроверки(МенеджерКриптографии = Неопределено) + // Дополнительные проверки. Для каждого ЭлементСписка Из ДополнительныеПроверки Цикл ОписаниеОшибки = ""; @@ -832,13 +872,6 @@ ЭлементКартинка = Форма.Элементы[НачалоЭлемента + ?(НаСервере, "НаСервере", "НаКлиенте") + "Картинка"]; Проверки = Форма["Проверки" + ?(НаСервере, "НаСервере", "НаКлиенте")]; - Попытка - Значение = ЭлементКартинка.Картинка; - Исключение - Форма.УстановитьЭлементЧерезСервер(НачалоЭлемента, НаСервере, ОписаниеОшибки, ЭтоОшибка); - Возврат; - КонецПопытки; - Если ОписаниеОшибки = Неопределено Тогда ЭлементКартинка.Картинка = Новый Картинка; ЭлементКартинка.Подсказка = НСтр("ru = 'Проверка не выполнялась.'"); @@ -856,11 +889,4 @@ КонецПроцедуры -&НаСервере -Процедура УстановитьЭлементЧерезСервер(НачалоЭлемента, НаСервере, ОписаниеОшибки, ЭтоОшибка) - - УстановитьЭлемент(ЭтотОбъект, НачалоЭлемента, НаСервере, ОписаниеОшибки, ЭтоОшибка); - -КонецПроцедуры - #КонецОбласти diff --git a/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Forms/ПросмотрДанных/Form.form b/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Forms/ПросмотрДанных/Form.form index 7fb047187..f5edd72f9 100644 --- a/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Forms/ПросмотрДанных/Form.form +++ b/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Forms/ПросмотрДанных/Form.form @@ -303,7 +303,7 @@ <name>СписокОткрыть</name> </handler> </action> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <parameters> diff --git a/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Forms/РасшифровкаДанных/Form.form b/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Forms/РасшифровкаДанных/Form.form index f1a4e3257..fe17a9813 100644 --- a/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Forms/РасшифровкаДанных/Form.form +++ b/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Forms/РасшифровкаДанных/Form.form @@ -1128,7 +1128,7 @@ <name>Расшифровать</name> </handler> </action> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <parameters> diff --git a/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Forms/ФормаВыбора/Form.form b/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Forms/ФормаВыбора/Form.form index d7a383f12..f103feeb2 100644 --- a/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Forms/ФормаВыбора/Form.form +++ b/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Forms/ФормаВыбора/Form.form @@ -490,7 +490,6 @@ <autoFillCheck>true</autoFillCheck> <allowFormCustomize>true</allowFormCustomize> <enabled>true</enabled> - <verticalScroll>UseIfNecessary</verticalScroll> <showTitle>auto</showTitle> <showCloseButton>true</showCloseButton> <attributes> diff --git a/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Forms/ФормаЭлемента/Form.form b/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Forms/ФормаЭлемента/Form.form index ca90438da..994a2c44e 100644 --- a/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Forms/ФормаЭлемента/Form.form +++ b/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Forms/ФормаЭлемента/Form.form @@ -1593,7 +1593,6 @@ <autoFillCheck>true</autoFillCheck> <allowFormCustomize>true</allowFormCustomize> <enabled>true</enabled> - <verticalScroll>UseIfNecessary</verticalScroll> <showTitle>auto</showTitle> <showCloseButton>true</showCloseButton> <attributes> @@ -1725,7 +1724,7 @@ </handler> </action> <modifiesStoredData>true</modifiesStoredData> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <formCommands> @@ -1744,7 +1743,7 @@ </handler> </action> <representation>TextPicture</representation> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <formCommands> @@ -1769,7 +1768,7 @@ <name>ПоказатьДанныеСертификата</name> </handler> </action> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <formCommands> @@ -1787,7 +1786,7 @@ <name>ПоказатьАвтозаполняемыеРеквизиты</name> </handler> </action> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <formCommands> @@ -1805,7 +1804,7 @@ <name>СохранитьДанныеСертификатаВФайл</name> </handler> </action> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <formCommands> @@ -1831,7 +1830,7 @@ </handler> </action> <representation>Picture</representation> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <commandInterface> diff --git a/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Forms/ФормаЭлемента/Module.bsl b/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Forms/ФормаЭлемента/Module.bsl index 6ac2d9f78..dcf6b8b6d 100644 --- a/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Forms/ФормаЭлемента/Module.bsl +++ b/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Forms/ФормаЭлемента/Module.bsl @@ -73,8 +73,8 @@ Продолжить; КонецЕсли; - ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Поле %1 не заполнено.'"), Элементы[ИмяРеквизита].Заголовок); + ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Поле %1 не заполнено.'"), + Элементы[ИмяРеквизита].Заголовок); ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстСообщения,, ИмяРеквизита,, Отказ); КонецЦикла; @@ -140,7 +140,7 @@ &НаКлиенте Процедура СохранитьДанныеСертификатаВФайл(Команда) - ЭлектроннаяПодписьСлужебныйКлиент.СохранитьСертификат(, АдресСертификата); + ЭлектроннаяПодписьСлужебныйКлиент.СохранитьСертификат(Неопределено, АдресСертификата); КонецПроцедуры diff --git a/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Forms/ШифрованиеДанных/Form.form b/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Forms/ШифрованиеДанных/Form.form index ac73d945e..8c828450a 100644 --- a/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Forms/ШифрованиеДанных/Form.form +++ b/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Forms/ШифрованиеДанных/Form.form @@ -1433,7 +1433,7 @@ <name>Зашифровать</name> </handler> </action> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <formCommands> @@ -1455,7 +1455,7 @@ <name>ОткрытьСертификат</name> </handler> </action> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <formCommands> @@ -1473,7 +1473,7 @@ <name>Подобрать</name> </handler> </action> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <parameters> diff --git a/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Forms/ШифрованиеДанных/Module.bsl b/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Forms/ШифрованиеДанных/Module.bsl index 43f921ee1..65614ab12 100644 --- a/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Forms/ШифрованиеДанных/Module.bsl +++ b/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Forms/ШифрованиеДанных/Module.bsl @@ -861,8 +861,8 @@ ДанныеСертификата = Выборка.ДанныеСертификата.Получить(); Если ТипЗнч(ДанныеСертификата) <> Тип("ДвоичныеДанные") Тогда - ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Данные сертификата ""%1"" не найдены в справочнике'"), Выборка.Наименование); + ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Данные сертификата ""%1"" не найдены в справочнике'"), + Выборка.Наименование); КонецЕсли; Попытка diff --git a/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/ManagerModule.bsl b/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/ManagerModule.bsl index 19bdab2a5..823030c3c 100644 --- a/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/ManagerModule.bsl +++ b/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/ManagerModule.bsl @@ -49,10 +49,4 @@ КонецПроцедуры -Процедура ОбработкаПолученияДанныхВыбора(ДанныеВыбора, Параметры, СтандартнаяОбработка) - - Параметры.Отбор.Вставить("ПометкаУдаления", Ложь); - -КонецПроцедуры - #КонецОбласти diff --git a/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Templates/ЗаявлениеНаСертификатИндивидуальногоПредпринимателя/Template.mxlx b/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Templates/ЗаявлениеНаСертификатИндивидуальногоПредпринимателя/Template.mxlx index 310ec80de..56d481b27 100644 --- a/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Templates/ЗаявлениеНаСертификатИндивидуальногоПредпринимателя/Template.mxlx +++ b/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Templates/ЗаявлениеНаСертификатИндивидуальногоПредпринимателя/Template.mxlx @@ -1505,7 +1505,7 @@ </format> <format> <font>0</font> - <width>29</width> + <width>10</width> </format> <format> <font>0</font> diff --git a/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Templates/ЗаявлениеНаСертификатЮридическогоЛица/Template.mxlx b/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Templates/ЗаявлениеНаСертификатЮридическогоЛица/Template.mxlx index e51376c9d..b3a871874 100644 --- a/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Templates/ЗаявлениеНаСертификатЮридическогоЛица/Template.mxlx +++ b/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Templates/ЗаявлениеНаСертификатЮридическогоЛица/Template.mxlx @@ -1902,7 +1902,7 @@ </format> <format> <font>0</font> - <width>29</width> + <width>10</width> </format> <format> <font>0</font> diff --git a/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Templates/КомпонентаОбмена/Template.bin b/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Templates/КомпонентаОбмена/Template.bin index dac3138c7..19a767e0e 100644 Binary files a/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Templates/КомпонентаОбмена/Template.bin and b/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Templates/КомпонентаОбмена/Template.bin differ diff --git a/SSL/src/Catalogs/СообщенияОбластейДанных/Forms/ФормаСписка/Form.form b/SSL/src/Catalogs/СообщенияОбластейДанных/Forms/ФормаСписка/Form.form index 05ba0716c..51eaa6d67 100644 --- a/SSL/src/Catalogs/СообщенияОбластейДанных/Forms/ФормаСписка/Form.form +++ b/SSL/src/Catalogs/СообщенияОбластейДанных/Forms/ФормаСписка/Form.form @@ -867,7 +867,6 @@ <autoFillCheck>true</autoFillCheck> <allowFormCustomize>true</allowFormCustomize> <enabled>true</enabled> - <verticalScroll>UseIfNecessary</verticalScroll> <showTitle>auto</showTitle> <showCloseButton>true</showCloseButton> <attributes> @@ -948,7 +947,7 @@ </handler> </action> <representation>TextPicture</representation> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <formCommands> @@ -974,7 +973,7 @@ </handler> </action> <representation>TextPicture</representation> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <formCommands> @@ -1000,7 +999,7 @@ <name>Удалить</name> </handler> </action> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <commandInterface> diff --git a/SSL/src/Catalogs/СообщенияСистемы/Forms/ФормаСписка/Form.form b/SSL/src/Catalogs/СообщенияСистемы/Forms/ФормаСписка/Form.form index 2754e35f0..3486a61c9 100644 --- a/SSL/src/Catalogs/СообщенияСистемы/Forms/ФормаСписка/Form.form +++ b/SSL/src/Catalogs/СообщенияСистемы/Forms/ФормаСписка/Form.form @@ -827,7 +827,6 @@ <autoFillCheck>true</autoFillCheck> <allowFormCustomize>true</allowFormCustomize> <enabled>true</enabled> - <verticalScroll>UseIfNecessary</verticalScroll> <showTitle>auto</showTitle> <showCloseButton>true</showCloseButton> <attributes> @@ -925,7 +924,7 @@ </handler> </action> <representation>TextPicture</representation> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <formCommands> @@ -951,7 +950,7 @@ </handler> </action> <representation>TextPicture</representation> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <formCommands> @@ -977,7 +976,7 @@ <name>Удалить</name> </handler> </action> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <commandInterface> diff --git a/SSL/src/Catalogs/СтраныМира/Forms/Классификатор/Form.form b/SSL/src/Catalogs/СтраныМира/Forms/Классификатор/Form.form index 820d984b2..2b26c4f05 100644 --- a/SSL/src/Catalogs/СтраныМира/Forms/Классификатор/Form.form +++ b/SSL/src/Catalogs/СтраныМира/Forms/Классификатор/Form.form @@ -784,7 +784,6 @@ <autoFillCheck>true</autoFillCheck> <allowFormCustomize>true</allowFormCustomize> <enabled>true</enabled> - <verticalScroll>UseIfNecessary</verticalScroll> <showTitle>auto</showTitle> <showCloseButton>true</showCloseButton> <attributes> diff --git a/SSL/src/Catalogs/СтраныМира/Forms/ФормаСписка/Form.form b/SSL/src/Catalogs/СтраныМира/Forms/ФормаСписка/Form.form index 20313d194..4400dde63 100644 --- a/SSL/src/Catalogs/СтраныМира/Forms/ФормаСписка/Form.form +++ b/SSL/src/Catalogs/СтраныМира/Forms/ФормаСписка/Form.form @@ -603,7 +603,6 @@ <autoFillCheck>true</autoFillCheck> <allowFormCustomize>true</allowFormCustomize> <enabled>true</enabled> - <verticalScroll>UseIfNecessary</verticalScroll> <showTitle>auto</showTitle> <showCloseButton>true</showCloseButton> <attributes> @@ -698,7 +697,7 @@ <name>ОткрытьКлассификатор</name> </handler> </action> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <formCommands> @@ -724,7 +723,7 @@ </handler> </action> <representation>TextPicture</representation> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <parameters> diff --git a/SSL/src/Catalogs/СтраныМира/Forms/ФормаСписка/Module.bsl b/SSL/src/Catalogs/СтраныМира/Forms/ФормаСписка/Module.bsl index f0750dac4..6fbb4a9f3 100644 --- a/SSL/src/Catalogs/СтраныМира/Forms/ФормаСписка/Module.bsl +++ b/SSL/src/Catalogs/СтраныМира/Forms/ФормаСписка/Module.bsl @@ -27,8 +27,11 @@ Элементы.СписокВыбрать.Видимость = РежимВыбора; Элементы.СписокВыбрать.КнопкаПоУмолчанию = РежимВыбора; - Элементы.СписокВыбратьИзКлассификатора.Видимость = (РежимВыбора И Не ТолькоДанныеКлассификатора); - Элементы.СписокКлассификатор.Видимость = МожноДобавлятьВСправочник; + РежимВыбораКлассификатораОКСМ = РежимВыбора И Не ТолькоДанныеКлассификатора; + Если МожноДобавлятьВСправочник Тогда + Элементы.СписокВыбратьИзКлассификатора.Видимость = РежимВыбораКлассификатораОКСМ; + КонецЕсли; + Элементы.СписокКлассификатор.Видимость = НЕ РежимВыбораКлассификатораОКСМ; // По флагам определяем режим Если РежимВыбора Тогда diff --git a/SSL/src/Catalogs/СтраныМира/Forms/ФормаЭлемента/Form.form b/SSL/src/Catalogs/СтраныМира/Forms/ФормаЭлемента/Form.form index 027ff6833..8dea8cdf4 100644 --- a/SSL/src/Catalogs/СтраныМира/Forms/ФормаЭлемента/Form.form +++ b/SSL/src/Catalogs/СтраныМира/Forms/ФормаЭлемента/Form.form @@ -289,7 +289,6 @@ <autoFillCheck>true</autoFillCheck> <allowFormCustomize>true</allowFormCustomize> <enabled>true</enabled> - <verticalScroll>UseIfNecessary</verticalScroll> <showTitle>auto</showTitle> <showCloseButton>true</showCloseButton> <attributes> diff --git a/SSL/src/Catalogs/СтраныМира/ManagerModule.bsl b/SSL/src/Catalogs/СтраныМира/ManagerModule.bsl index 97a22e727..37590a5ae 100644 --- a/SSL/src/Catalogs/СтраныМира/ManagerModule.bsl +++ b/SSL/src/Catalogs/СтраныМира/ManagerModule.bsl @@ -138,17 +138,16 @@ // Сравнивать в запросе нельзя из-за возможной регистронезависимости базы данных. Для Каждого СтрокаКлассификатора Из ТаблицаКлассификатора() Цикл Фильтр.Код = СтрокаКлассификатора.Код; - Выборка = Справочники.СтраныМира.Выбрать(,,Фильтр); + Выборка = Справочники.СтраныМира.Выбрать(,, Фильтр); СтранаНайдена = Выборка.Следующий(); Если Не СтранаНайдена И Добавлять Тогда // Добавление страны Страна = Справочники.СтраныМира.СоздатьЭлемент(); ИначеЕсли СтранаНайдена И ( - Выборка.Наименование <> СтрокаКлассификатора.Наименование - Или Выборка.КодАльфа2 <> СтрокаКлассификатора.КодАльфа2 - Или Выборка.КодАльфа3 <> СтрокаКлассификатора.КодАльфа3 - Или Выборка.НаименованиеПолное <> СтрокаКлассификатора.НаименованиеПолное - ) Тогда + Выборка.Наименование <> СтрокаКлассификатора.Наименование + Или Выборка.КодАльфа2 <> СтрокаКлассификатора.КодАльфа2 + Или Выборка.КодАльфа3 <> СтрокаКлассификатора.КодАльфа3 + Или Выборка.НаименованиеПолное <> СтрокаКлассификатора.НаименованиеПолное) Тогда // Изменение страны Страна = Выборка.ПолучитьОбъект(); Иначе @@ -166,8 +165,7 @@ ЗафиксироватьТранзакцию(); Исключение Инфо = ИнформацияОбОшибке(); - ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru='Ошибка записи страны мира %1 (код %2) при обновлении классификатора, %3'"), + ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru='Ошибка записи страны мира %1 (код %2) при обновлении классификатора, %3'"), Выборка.Код, Выборка.Наименование, КраткоеПредставлениеОшибки(Инфо)); ЗаписьЖурналаРегистрации(ОбновлениеИнформационнойБазы.СобытиеЖурналаРегистрации(), УровеньЖурналаРегистрации.Ошибка,,, @@ -266,8 +264,7 @@ КонецЕсли; Результат.Добавить( - Новый Структура("Имя, ШаблонПредставления", ИмяПоля, ШаблонПредставления) - ); + Новый Структура("Имя, ШаблонПредставления", ИмяПоля, ШаблонПредставления)); КонецЦикла; Возврат Новый Структура("СписокПолей, ИменаПолейСтрокой", Результат, Сред(ВсеИменаСтрокой, 2)); @@ -368,7 +365,7 @@ |ГДЕ | Классификатор.%1 ПОДОБНО &СтрокаПоиска | И ( - | " + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонОтбора, "Классификатор") + " + | " + СтрЗаменить(ШаблонОтбора, "%1", "Классификатор") + " | ) |УПОРЯДОЧИТЬ ПО | Классификатор.%1 @@ -397,8 +394,8 @@ | И Классификатор.Наименование = СтраныМира.Наименование |ГДЕ | (СтраныМира.%1 ПОДОБНО &СтрокаПоиска ИЛИ Классификатор.%1 ПОДОБНО &СтрокаПоиска) - | И (" + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонОтбора, "Классификатор") + ") - | И (" + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонОтбора, "СтраныМира") + ") + | И (" + СтрЗаменить(ШаблонОтбора, "%1", "Классификатор") + ") + | И (" + СтрЗаменить(ШаблонОтбора, "%1", "СтраныМира") + ") | |УПОРЯДОЧИТЬ ПО | ЕСТЬNULL(СтраныМира.%1, Классификатор.%1) @@ -428,11 +425,9 @@ Запрос.УстановитьПараметр("СтрокаПоиска", ЭкранироватьСимволыПодобия(Параметры.СтрокаПоиска) + "%"); Для Каждого ДанныеПоля Из ИменаПолей.СписокПолей Цикл - Запрос.Текст = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонЗапроса, - ДанныеПоля.Имя, - СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ДанныеПоля.ШаблонПредставления, "Классификатор"), - СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ДанныеПоля.ШаблонПредставления, "СтраныМира"), - ); + ТекстЗапроса = СтрЗаменить(ШаблонЗапроса, "%1", ДанныеПоля.Имя); + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "%2", СтрЗаменить(ДанныеПоля.ШаблонПредставления, "%1", "Классификатор")); + Запрос.Текст = СтрЗаменить(ТекстЗапроса, "%3", СтрЗаменить(ДанныеПоля.ШаблонПредставления, "%1", "СтраныМира")); Результат = Запрос.Выполнить(); Если Не Результат.Пустой() Тогда @@ -447,12 +442,10 @@ Иначе // Данные классификатора РезультатВыбора = Новый Структура("Код, Наименование", - Выборка.Код, Выборка.Наименование - ); + Выборка.Код, Выборка.Наименование); ЭлементВыбора = Новый Структура("Значение, ПометкаУдаления, Предупреждение", - РезультатВыбора, Выборка.ПометкаУдаления, Неопределено, - ); + РезультатВыбора, Выборка.ПометкаУдаления, Неопределено); КонецЕсли; ДанныеВыбора.Добавить(ЭлементВыбора, Выборка.Представление); diff --git a/SSL/src/Catalogs/СтраныМира/ObjectModule.bsl b/SSL/src/Catalogs/СтраныМира/ObjectModule.bsl index 31093d224..46db46122 100644 --- a/SSL/src/Catalogs/СтраныМира/ObjectModule.bsl +++ b/SSL/src/Catalogs/СтраныМира/ObjectModule.bsl @@ -50,8 +50,8 @@ РезультатЗапроса = Запрос.Выполнить(); Выборка = РезультатЗапроса.Выбрать(); Если Выборка.Следующий() Тогда - Результат = Новый Структура("ОписаниеОшибки", СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru='С кодом %1 уже существует страна %2. Измените код или используйте уже существующие данные.'"), + Результат = Новый Структура("ОписаниеОшибки", + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru='С кодом %1 уже существует страна %2. Измените код или используйте уже существующие данные.'"), Код, Выборка.Наименование)); Для Каждого Поле Из РезультатЗапроса.Колонки Цикл diff --git a/SSL/src/Catalogs/СценарииОбменовДанными/Forms/НастройкаРасписанияОбменовДанными/Form.form b/SSL/src/Catalogs/СценарииОбменовДанными/Forms/НастройкаРасписанияОбменовДанными/Form.form index 055aac700..c8284f089 100644 --- a/SSL/src/Catalogs/СценарииОбменовДанными/Forms/НастройкаРасписанияОбменовДанными/Form.form +++ b/SSL/src/Catalogs/СценарииОбменовДанными/Forms/НастройкаРасписанияОбменовДанными/Form.form @@ -787,7 +787,6 @@ <autoFillCheck>true</autoFillCheck> <allowFormCustomize>true</allowFormCustomize> <enabled>true</enabled> - <verticalScroll>UseIfNecessary</verticalScroll> <showTitle>auto</showTitle> <showCloseButton>true</showCloseButton> <attributes> @@ -802,9 +801,6 @@ <edit> <common>true</common> </edit> - <notDefaultUseAlwaysAttributes xsi:type="form:DataPath"> - <segments>Список.ФлагНестандартногоИспользования</segments> - </notDefaultUseAlwaysAttributes> <notDefaultUseAlwaysAttributes xsi:type="form:DataPath"> <segments>Список.Ref</segments> </notDefaultUseAlwaysAttributes> @@ -897,7 +893,7 @@ </handler> </action> <representation>TextPicture</representation> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <formCommands> @@ -922,7 +918,7 @@ <name>ИзменитьСценарийОбменаДанными</name> </handler> </action> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <formCommands> @@ -947,7 +943,7 @@ <name>ВключитьОтключитьРегламентноеЗадание</name> </handler> </action> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <formCommands> @@ -969,7 +965,7 @@ <name>ВключитьОтключитьВыгрузку</name> </handler> </action> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <formCommands> @@ -991,7 +987,7 @@ <name>ВключитьОтключитьЗагрузку</name> </handler> </action> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <formCommands> @@ -1013,7 +1009,7 @@ <name>ВключитьОтключитьЗагрузкуВыгрузку</name> </handler> </action> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <formCommands> @@ -1039,7 +1035,7 @@ </handler> </action> <representation>TextPicture</representation> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <parameters> diff --git a/SSL/src/Catalogs/СценарииОбменовДанными/Forms/ФормаСписка/Form.form b/SSL/src/Catalogs/СценарииОбменовДанными/Forms/ФормаСписка/Form.form index 9bc6473c5..8e7b23cd4 100644 --- a/SSL/src/Catalogs/СценарииОбменовДанными/Forms/ФормаСписка/Form.form +++ b/SSL/src/Catalogs/СценарииОбменовДанными/Forms/ФормаСписка/Form.form @@ -393,7 +393,6 @@ <autoFillCheck>true</autoFillCheck> <allowFormCustomize>true</allowFormCustomize> <enabled>true</enabled> - <verticalScroll>UseIfNecessary</verticalScroll> <showTitle>auto</showTitle> <showCloseButton>true</showCloseButton> <attributes> @@ -442,7 +441,7 @@ <name>ВключитьОтключитьРегламентноеЗадание</name> </handler> </action> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <commandInterface> diff --git a/SSL/src/Catalogs/СценарииОбменовДанными/Forms/ФормаЭлемента/Form.form b/SSL/src/Catalogs/СценарииОбменовДанными/Forms/ФормаЭлемента/Form.form index 3a1bf284c..243094d60 100644 --- a/SSL/src/Catalogs/СценарииОбменовДанными/Forms/ФормаЭлемента/Form.form +++ b/SSL/src/Catalogs/СценарииОбменовДанными/Forms/ФормаЭлемента/Form.form @@ -815,7 +815,6 @@ <autoFillCheck>true</autoFillCheck> <allowFormCustomize>true</allowFormCustomize> <enabled>true</enabled> - <verticalScroll>UseIfNecessary</verticalScroll> <showTitle>auto</showTitle> <showCloseButton>true</showCloseButton> <attributes> @@ -896,7 +895,7 @@ <name>НастроитьРасписаниеРегламентногоЗадания</name> </handler> </action> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <formCommands> @@ -922,7 +921,7 @@ </handler> </action> <representation>TextPicture</representation> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <formCommands> @@ -948,7 +947,7 @@ </handler> </action> <representation>TextPicture</representation> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <formCommands> @@ -973,7 +972,7 @@ <name>ПерейтиВЖурналРегистрации</name> </handler> </action> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <commandInterface> diff --git a/SSL/src/Catalogs/СценарииОбменовДанными/Forms/ФормаЭлемента/Help/ru.html b/SSL/src/Catalogs/СценарииОбменовДанными/Forms/ФормаЭлемента/Help/ru.html index 610634e0d..d6b8fc387 100644 --- a/SSL/src/Catalogs/СценарииОбменовДанными/Forms/ФормаЭлемента/Help/ru.html +++ b/SSL/src/Catalogs/СценарииОбменовДанными/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 9.00.8112.16421"></meta></head><body> -<p>Основное назначение сценария - это выполнение <a href="CommonForm.ОбменыДанными/Help">синхронизации данных</a> автоматически по заданному расписанию. Сценарий необходим для задания расписания и порядка отправки и получения данных. </p> +<p>Основное назначение сценария - это выполнение <a href="CommonForm.СинхронизацияДанных/Help">синхронизации данных</a> автоматически по заданному расписанию. Сценарий необходим для задания расписания и порядка отправки и получения данных. </p> <p>Не рекомендуется выполнять только отправку данных или только получение данных, хотя сценарий позволяет это сделать. Рекомендуется выполнять полноценную синхронизацию данных в одном сценарии.</p> <h3>Настройка сценария синхронизации</h3> <ul><li>Введите <strong>Наименование</strong> сценария. Необходимо указать наименования баз данных, участвующих в синхронизации, редакцию программы, для того чтобы все пользователи могли понять назначение данного сценария. diff --git a/SSL/src/Catalogs/СценарииОбменовДанными/Forms/ФормаЭлемента/Module.bsl b/SSL/src/Catalogs/СценарииОбменовДанными/Forms/ФормаЭлемента/Module.bsl index 1e85a8361..bfe914760 100644 --- a/SSL/src/Catalogs/СценарииОбменовДанными/Forms/ФормаЭлемента/Module.bsl +++ b/SSL/src/Catalogs/СценарииОбменовДанными/Forms/ФормаЭлемента/Module.bsl @@ -258,8 +258,8 @@ СтрокаСообщения = НСтр("ru = 'Выполняется %1 для %2'"); СтрокаСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(СтрокаСообщения, - Строка(ТекущиеДанные.ВыполняемоеДействие), - Строка(ТекущиеДанные.УзелИнформационнойБазы)); + Строка(ТекущиеДанные.ВыполняемоеДействие), + Строка(ТекущиеДанные.УзелИнформационнойБазы)); // Прогресс = Окр(100 * (НомерОбрабатываемойСтроки -1) / ?(КоличествоСтрок = 0, 1, КоличествоСтрок)); Состояние(СтрокаСообщения, ?(ВыводитьСостояние, Прогресс, Неопределено)); diff --git a/SSL/src/Catalogs/СценарииОбменовДанными/Help/ru.html b/SSL/src/Catalogs/СценарииОбменовДанными/Help/ru.html index b575417d3..04a27f5ca 100644 --- a/SSL/src/Catalogs/СценарииОбменовДанными/Help/ru.html +++ b/SSL/src/Catalogs/СценарииОбменовДанными/Help/ru.html @@ -14,7 +14,7 @@ <p>Настройка сценария синхронизации данных состоит из следующих этапов:</p> <ul><li>Настроить расписание выполнения сценария синхронизации данных. </li><li>Выбрать информационные базы, для которых будет выполняться сценарий синхронизации данных. -</li><li>Для каждой информационной базы выбрать способ подключения и выполняемое действие (отправка или получение).</li></ul></li><li>После того как настроен сценарий синхронизации данных, около <a href="CommonForm.ОбменыДанными/Help">настройки синхронизации данных</a> в списке появляется значок <img src="StdPicture.ScheduledJob" width="16" height="16"></img>. Синхронизация данных производится по расписанию с помощью <a href="DataProcessor.РегламентныеИФоновыеЗадания/Help">регламентного задания</a>.</li></ul><h3>Включение выгрузки и загрузки данных</h3> +</li><li>Для каждой информационной базы выбрать способ подключения и выполняемое действие (отправка или получение).</li></ul></li><li>После того как настроен сценарий синхронизации данных, около <a href="CommonForm.СинхронизацияДанных/Help">настройки синхронизации данных</a> в списке появляется значок <img src="StdPicture.ScheduledJob" width="16" height="16"></img>. Синхронизация данных производится по расписанию с помощью <a href="DataProcessor.РегламентныеИФоновыеЗадания/Help">регламентного задания</a>.</li></ul><h3>Включение выгрузки и загрузки данных</h3> <ul><li> <div>С помощью выпадающего меню <strong>Включить/Отключить</strong> можно управлять выгрузкой и загрузкой данных.</div> </li><li> diff --git a/SSL/src/Catalogs/ТомаХраненияФайлов/Forms/УдалениеЛишнихФайловИзТома/Form.form b/SSL/src/Catalogs/ТомаХраненияФайлов/Forms/УдалениеЛишнихФайловИзТома/Form.form new file mode 100644 index 000000000..e9ecb8c09 --- /dev/null +++ b/SSL/src/Catalogs/ТомаХраненияФайлов/Forms/УдалениеЛишнихФайловИзТома/Form.form @@ -0,0 +1,508 @@ +<?xml version="1.0" encoding="UTF-8"?> +<form:Form xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:core="http://g5.1c.ru/v8/dt/mcore" xmlns:form="http://g5.1c.ru/v8/dt/form"> + <items xsi:type="form:FormGroup"> + <name>ГруппаЛишниеФайлы</name> + <id>16</id> + <items xsi:type="form:FormField"> + <name>КоличествоЛишнихФайлов</name> + <id>13</id> + <visible>true</visible> + <enabled>true</enabled> + <userVisible> + <common>true</common> + </userVisible> + <dataPath xsi:type="form:DataPath"> + <segments>КоличествоЛишнихФайлов</segments> + </dataPath> + <extendedTooltip> + <name>КоличествоЛишнихФайловРасширеннаяПодсказка</name> + <id>15</id> + <type>Label</type> + <autoMaxWidth>true</autoMaxWidth> + <autoMaxHeight>true</autoMaxHeight> + <extInfo xsi:type="form:LabelDecorationExtInfo"> + <horizontalAlign>Left</horizontalAlign> + </extInfo> + </extendedTooltip> + <contextMenu> + <name>КоличествоЛишнихФайловКонтекстноеМеню</name> + <id>14</id> + <autoFill>true</autoFill> + </contextMenu> + <type>InputField</type> + <readOnly>true</readOnly> + <editMode>Enter</editMode> + <showInHeader>true</showInHeader> + <headerHorizontalAlign>Left</headerHorizontalAlign> + <showInFooter>true</showInFooter> + <extInfo xsi:type="form:InputFieldExtInfo"> + <autoMaxWidth>true</autoMaxWidth> + <autoMaxHeight>true</autoMaxHeight> + <wrap>true</wrap> + <chooseType>true</chooseType> + <typeDomainEnabled>true</typeDomainEnabled> + <textEdit>true</textEdit> + <textSize>Normal</textSize> + </extInfo> + </items> + <items xsi:type="form:Decoration"> + <name>ДекорацияПодробнее</name> + <id>18</id> + <title> + <key>ru</key> + <value>Подробнее ...</value> + + true + true + + true + + + ДекорацияПодробнееРасширеннаяПодсказка + 20 + Label + true + true + + Left + + + + ДекорацияПодробнееКонтекстноеМеню + 19 + true + + Label + true + true + + + Click + ДекорацияПодробнееНажатие + + true + Left + + + true + true + + true + + + <key>ru</key> + <value>Группа лишние файлы</value> + + + ru + Группа лишние файлы + + + ГруппаЛишниеФайлыРасширеннаяПодсказка + 17 + Label + true + true + + Left + + + UsualGroup + + Auto + true + true + Auto + Auto + + + + ГруппаКомментарий + 5 + + ДекорацияИконка + 7 + + <key>ru</key> + <value>Декорация иконка</value> + + true + true + + true + + + ДекорацияИконкаExtendedTooltip + 9 + Label + true + true + + Left + + + + ДекорацияИконкаКонтекстноеМеню + 8 + true + + 5 + true + 2 + true + false + false + + + CommonPicture.Информация32 + + + + + ДекорацияИнфо + 10 + + <key>ru</key> + <value>Если в файлах, которые есть на диске, но сведения о них в базе отсутствуют, может содержаться полезная информация, +то рекомендуется перенести их в другой каталог. Если каталог не указан, файлы удаляются безвозвратно.</value> + + true + true + + true + + + ДекорацияИнфоExtendedTooltip + 12 + Label + true + true + + Left + + + + ДекорацияИнфоКонтекстноеМеню + 11 + true + + Label + true + true + false + false + + Style.ПоясняющийТекст + + + Left + + + true + true + + true + + + <key>ru</key> + <value>Группа комментарий</value> + + + ru + Группа комментарий + + + ГруппаКомментарийРасширеннаяПодсказка + 6 + Label + true + true + + Left + + + UsualGroup + + Auto + true + true + Auto + Auto + + + + ПутьКаталогаДляКопирования + 21 + true + true + + true + + + ПутьКаталогаДляКопирования + + + OnChange + ПутьКаталогаДляКопированияПриИзменении + + + ПутьКаталогаДляКопированияРасширеннаяПодсказка + 23 + Label + true + true + + Left + + + + ПутьКаталогаДляКопированияКонтекстноеМеню + 22 + true + + InputField + Enter + true + Left + true + + + StartChoice + ПутьКаталогаДляКопированияНачалоВыбора + + true + true + true + true + true + true + true + Normal + + + Bottom + true + + ФормаКоманднаяПанель + -1 + + ФормаУдалитьЛишниеФайлы + 1 + true + true + + true + + + ФормаУдалитьЛишниеФайлыРасширеннаяПодсказка + 2 + Label + true + true + + Left + + + Form.Command.УдалитьЛишниеФайлы + Auto + true + true + true + UserCmds + Auto + + + ФормаОтмена + 3 + true + true + + true + + + ФормаОтменаРасширеннаяПодсказка + 4 + Label + true + true + + Left + + + Form.StandardCommand.Cancel + Normal + Auto + true + true + UserCmds + Auto + + Right + + + OnCreateAtServer + ПриСозданииНаСервере + + LockOwner + true + true + true + Vertical + true + true + auto + true + + КоличествоЛишнихФайлов + + <key>ru</key> + <value>Количество лишних файлов</value> + + 1 + + Number + + 5 + true + + + + true + + + true + + + + ПутьКаталогаДляКопирования + + <key>ru</key> + <value>Путь каталога для копирования</value> + + 2 + + String + + + + true + + + true + + + + ТомХраненияФайлов + + <key>ru</key> + <value>Том хранения файлов</value> + + 3 + + CatalogRef.ТомаХраненияФайлов + + + true + + + true + + + + ЛишниеФайлы + + <key>ru</key> + <value>Лишние файлы</value> + + 4 + + ValueTable + + + true + + + true + + + ПолноеИмя + + <key>ru</key> + <value>Полное имя</value> + + 1 + + String + + + + true + + + true + + + + Имя + + <key>ru</key> + <value>Имя</value> + + 2 + + String + + + + true + + + true + + + + + ПутьДня + + <key>ru</key> + <value>Путь дня</value> + + 5 + + String + + + + true + + + true + + + + УдалитьЛишниеФайлы + + <key>ru</key> + <value>Удалить лишние файлы</value> + + 1 + + ru + Удалить лишние файлы + + + true + + + + УдалитьЛишниеФайлы + + + DontUse + Auto + + + + + + diff --git a/SSL/src/Catalogs/ТомаХраненияФайлов/Forms/УдалениеЛишнихФайловИзТома/Module.bsl b/SSL/src/Catalogs/ТомаХраненияФайлов/Forms/УдалениеЛишнихФайловИзТома/Module.bsl new file mode 100644 index 000000000..5e355e65b --- /dev/null +++ b/SSL/src/Catalogs/ТомаХраненияФайлов/Forms/УдалениеЛишнихФайловИзТома/Module.bsl @@ -0,0 +1,249 @@ +#Область ОбработчикиСобытийФормы + +&НаСервере +Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) + + Если Параметры.Свойство("АвтоТест") Тогда // Возврат при получении формы для анализа. + Возврат; + КонецЕсли; + + Параметры.Свойство("ТомХраненияФайлов", ТомХраненияФайлов); + + ЗаполнитьТаблицуЛишнихФайлов(); + КоличествоЛишнихФайлов = ЛишниеФайлы.Количество(); + + ПутьДня = Формат(ТекущаяДатаСеанса(), "ДФ=ггггММдд") + ПолучитьРазделительПути(); + +КонецПроцедуры + +#КонецОбласти + +#Область ОбработчикиСобытийЭлементовШапкиФормы + +&НаКлиенте +Процедура ДекорацияПодробнееНажатие(Элемент) + + ПараметрыОтчета = Новый Структура(); + ПараметрыОтчета.Вставить("СформироватьПриОткрытии", Истина); + ПараметрыОтчета.Вставить("Отбор", Новый Структура("Том", ТомХраненияФайлов)); + + ОткрытьФорму("Отчет.ПроверкаЦелостностиТома.ФормаОбъекта", ПараметрыОтчета); + +КонецПроцедуры + +&НаКлиенте +Процедура ПутьКаталогаДляКопированияНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка) + + СтандартнаяОбработка = Ложь; + + Режим = РежимДиалогаВыбораФайла.ВыборКаталога; + ДиалогОткрытияФайла = Новый ДиалогВыбораФайла(Режим); + ДиалогОткрытияФайла.ПолноеИмяФайла = ""; + ДиалогОткрытияФайла.Каталог = ПутьКаталогаДляКопирования; + ДиалогОткрытияФайла.МножественныйВыбор = Ложь; + ДиалогОткрытияФайла.Заголовок = Заголовок; + + Если ДиалогОткрытияФайла.Выбрать() Тогда + + ПутьКаталогаДляКопирования = ДиалогОткрытияФайла.Каталог; + ПутьКаталогаДляКопирования = ОбщегоНазначенияКлиентСервер.ДобавитьКонечныйРазделительПути(ПутьКаталогаДляКопирования); + + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура ПутьКаталогаДляКопированияПриИзменении(Элемент) + + ПутьКаталогаДляКопирования = ОбщегоНазначенияКлиентСервер.ДобавитьКонечныйРазделительПути(ПутьКаталогаДляКопирования); + +КонецПроцедуры + +#КонецОбласти + +#Область ОбработчикиКомандФормы + +&НаКлиенте +Процедура УдалитьЛишниеФайлы(Команда) + + Если КоличествоЛишнихФайлов = 0 Тогда + ПоказатьПредупреждение(, НСтр("ru = 'Нет ни одного лишнего файла на диске'")); + Возврат; + КонецЕсли; + + Если Не ПравоЗаписиВКаталог() Тогда + Возврат; + КонецЕсли; + + МассивФайловСОшибками = Новый Массив; + ЧислоУдаленныхФайлов = 0; + + КаталогДляКопирования = ПутьКаталогаДляКопирования + ПутьДня + ПолучитьРазделительПути(); + Для Каждого ЛишнийФайл Из ЛишниеФайлы Цикл + Попытка + Если Не ПустаяСтрока(ПутьКаталогаДляКопирования) Тогда + ИмяФайлаСПутем = ФайловыеФункцииСлужебныйКлиентСервер.ПолучитьУникальноеИмяСПутем( + КаталогДляКопирования, + ЛишнийФайл.Имя); + ПереместитьФайл(ЛишнийФайл.ПолноеИмя, КаталогДляКопирования + ИмяФайлаСПутем); + Иначе + УдалитьФайлы(ЛишнийФайл.ПолноеИмя); + КонецЕсли; + ЧислоУдаленныхФайлов = ЧислоУдаленныхФайлов + 1; + Исключение + ИнформацияОбОшибке = ИнформацияОбОшибке(); + + СтруктураОшибки = Новый Структура; + СтруктураОшибки.Вставить("Имя", ЛишнийФайл.Имя); + СтруктураОшибки.Вставить("Ошибка", КраткоеПредставлениеОшибки(ИнформацияОбОшибке)); + + МассивФайловСОшибками.Добавить(СтруктураОшибки); + + ОбработатьСообщениеОбОшибке(ЛишнийФайл.ПолноеИмя, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке)); + + КонецПопытки; + КонецЦикла; + + Если ЧислоУдаленныхФайлов <> 0 Тогда + ТекстОповещения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Удалено файлов: %1'"), + ЧислоУдаленныхФайлов); + ПоказатьОповещениеПользователя( + НСтр("ru = 'Завершено удаление лишних файлов.'"), + , + ТекстОповещения, + БиблиотекаКартинок.Информация32); + КонецЕсли; + + Если МассивФайловСОшибками.Количество() > 0 Тогда + ОтчетОбОшибках = Новый ТабличныйДокумент; + СформироватьОтчетОбОшибках(ОтчетОбОшибках, МассивФайловСОшибками); + ОтчетОбОшибках.Показать(); + КонецЕсли; + + Закрыть(); + +КонецПроцедуры + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +&НаСервере +Процедура ЗаполнитьТаблицуЛишнихФайлов() + + ТаблицаФайловНаДиске = Новый ТаблицаЗначений; + ТаблицаФайловНаДиске.Колонки.Добавить("Имя"); + ТаблицаФайловНаДиске.Колонки.Добавить("Файл"); + ТаблицаФайловНаДиске.Колонки.Добавить("ИмяБезРасширения"); + ТаблицаФайловНаДиске.Колонки.Добавить("ПолноеИмя"); + ТаблицаФайловНаДиске.Колонки.Добавить("Путь"); + ТаблицаФайловНаДиске.Колонки.Добавить("Том"); + ТаблицаФайловНаДиске.Колонки.Добавить("Расширение"); + ТаблицаФайловНаДиске.Колонки.Добавить("СтатусПроверки"); + ТаблицаФайловНаДиске.Колонки.Добавить("Количество"); + ТаблицаФайловНаДиске.Колонки.Добавить("Отредактировал"); + ТаблицаФайловНаДиске.Колонки.Добавить("ДатаРедактирования"); + + ПутьКТому = ФайловыеФункцииСлужебный.ПолныйПутьТома(ТомХраненияФайлов); + + МассивФайлов = НайтиФайлы(ПутьКТому,"*", Истина); + Для Каждого Файл Из МассивФайлов Цикл + + Если Не Файл.ЭтоФайл() Тогда + Продолжить; + КонецЕсли; + + НоваяСтрока = ТаблицаФайловНаДиске.Добавить(); + НоваяСтрока.Имя = Файл.Имя; + НоваяСтрока.ИмяБезРасширения = Файл.ИмяБезРасширения; + НоваяСтрока.ПолноеИмя = Файл.ПолноеИмя; + НоваяСтрока.Путь = Файл.Путь; + НоваяСтрока.Расширение = Файл.Расширение; + НоваяСтрока.СтатусПроверки = НСтр("ru = 'Лишние файлы (есть на диске, но сведения о них отсутствуют)'"); + НоваяСтрока.Количество = 1; + НоваяСтрока.Том = ТомХраненияФайлов; + КонецЦикла; + + ФайловыеФункцииСлужебный.ПроверитьЦелостностьФайлов(ТаблицаФайловНаДиске, ТомХраненияФайлов); + МассивЛишнихФайлов = ТаблицаФайловНаДиске.НайтиСтроки( + Новый Структура("СтатусПроверки", НСтр("ru = 'Лишние файлы (есть на диске, но сведения о них отсутствуют)'"))); + + Для Каждого Файл Из МассивЛишнихФайлов Цикл + НоваяСтрока = ЛишниеФайлы.Добавить(); + ЗаполнитьЗначенияСвойств(НоваяСтрока, Файл); + КонецЦикла; + +КонецПроцедуры + +&НаКлиенте +Функция ПравоЗаписиВКаталог() + + Если Не ПустаяСтрока(ПутьКаталогаДляКопирования) Тогда + + ИмяКаталогаТестовое = ПутьКаталогаДляКопирования + "ПроверкаДоступа\"; + + Попытка + СоздатьКаталог(ИмяКаталогаТестовое); + УдалитьФайлы(ИмяКаталогаТестовое); + Исключение + ИнформацияОбОшибке = ИнформацияОбОшибке(); + + ШаблонОшибки = + НСтр("ru = 'Путь каталога для копирования некорректен. + |Возможно учетная запись, от лица которой работает + |сервер 1С:Предприятия, не имеет прав доступа к указанному каталогу. + | + |%1'"); + + ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + ШаблонОшибки, КраткоеПредставлениеОшибки(ИнформацияОбОшибке)); + + ОбщегоНазначенияКлиентСервер.СообщитьПользователю( + ТекстОшибки, , , "ПутьКаталогаДляКопирования"); + + Возврат Ложь; + + КонецПопытки; + КонецЕсли; + + Возврат Истина; + +КонецФункции + +&НаСервере +Процедура ОбработатьСообщениеОбОшибке(ИмяФайла, ИнформацияОбОшибке) + + ЗаписьЖурналаРегистрации(НСтр("ru = 'Файлы.Ошибка удаления лишних файлов'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), + УровеньЖурналаРегистрации.Информация,,, + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'При удалении файла с диска + |""%1"" + |возникла ошибка: + |""%2"".'"), + ИмяФайла, + ИнформацияОбОшибке)); + + КонецПроцедуры + +&НаСервере +Процедура СформироватьОтчетОбОшибках(ОтчетОбОшибках, МассивФайловСОшибками) + + ТабМакет = Справочники.ТомаХраненияФайлов.ПолучитьМакет("МакетОтчета"); + + ОбластьЗаголовок = ТабМакет.ПолучитьОбласть("Заголовок"); + ОбластьЗаголовок.Параметры.Описание = НСтр("ru = 'Файлы с ошибками:'"); + ОтчетОбОшибках.Вывести(ОбластьЗаголовок); + + ОбластьСтрока = ТабМакет.ПолучитьОбласть("Строка"); + + Для Каждого ФайлСОшибкой Из МассивФайловСОшибками Цикл + ОбластьСтрока.Параметры.Название = ФайлСОшибкой.Имя; + ОбластьСтрока.Параметры.Ошибка = ФайлСОшибкой.Ошибка; + ОтчетОбОшибках.Вывести(ОбластьСтрока); + КонецЦикла; + + +КонецПроцедуры + +#КонецОбласти \ No newline at end of file diff --git a/SSL/src/Catalogs/ТомаХраненияФайлов/Forms/ФормаСписка/Form.form b/SSL/src/Catalogs/ТомаХраненияФайлов/Forms/ФормаСписка/Form.form index 7c87ae809..f2cca6b64 100644 --- a/SSL/src/Catalogs/ТомаХраненияФайлов/Forms/ФормаСписка/Form.form +++ b/SSL/src/Catalogs/ТомаХраненияФайлов/Forms/ФормаСписка/Form.form @@ -794,7 +794,6 @@ true true true - UseIfNecessary auto true @@ -850,7 +849,7 @@ Picture - Auto + DontUse Auto @@ -872,7 +871,7 @@ ПеренестиВсеФайлыВТома - Auto + DontUse Auto diff --git a/SSL/src/Catalogs/ТомаХраненияФайлов/Forms/ФормаЭлемента/Form.form b/SSL/src/Catalogs/ТомаХраненияФайлов/Forms/ФормаЭлемента/Form.form index 340647d0a..027a17baa 100644 --- a/SSL/src/Catalogs/ТомаХраненияФайлов/Forms/ФормаЭлемента/Form.form +++ b/SSL/src/Catalogs/ТомаХраненияФайлов/Forms/ФормаЭлемента/Form.form @@ -638,6 +638,58 @@ UserCmds Auto + + ФормаПроверитьЦелостностьТома + 48 + true + true + + true + + + ФормаПроверитьЦелостностьТомаРасширеннаяПодсказка + 49 + Label + true + true + + Left + + + Form.Command.ПроверитьЦелостностьТома + Normal + Auto + true + true + UserCmds + Auto + + + ФормаУдалитьЛишниеФайлы + 50 + true + true + + true + + + ФормаУдалитьЛишниеФайлыРасширеннаяПодсказка + 51 + Label + true + true + + Left + + + Form.Command.УдалитьЛишниеФайлы + Normal + Auto + true + true + UserCmds + Auto + Left @@ -662,7 +714,6 @@ true true true - UseIfNecessary auto true @@ -753,7 +804,51 @@ ЗаписатьИЗакрыть - Auto + DontUse + Auto + + + ПроверитьЦелостностьТома + + <key>ru</key> + <value>Проверить целостность</value> + + 2 + + ru + Проверить целостность тома + + + true + + + + ПроверитьЦелостностьТома + + + DontUse + Auto + + + УдалитьЛишниеФайлы + + <key>ru</key> + <value>Удалить лишние файлы</value> + + 3 + + ru + Удалить лишние файлы + + + true + + + + УдалитьЛишниеФайлы + + + DontUse Auto diff --git a/SSL/src/Catalogs/ТомаХраненияФайлов/Forms/ФормаЭлемента/Module.bsl b/SSL/src/Catalogs/ТомаХраненияФайлов/Forms/ФормаЭлемента/Module.bsl index 5515f9ac6..05c9e8fa0 100644 --- a/SSL/src/Catalogs/ТомаХраненияФайлов/Forms/ФормаЭлемента/Module.bsl +++ b/SSL/src/Catalogs/ТомаХраненияФайлов/Forms/ФормаЭлемента/Module.bsl @@ -64,7 +64,7 @@ &НаСервере Процедура ПередЗаписьюНаСервере(Отказ, ТекущийОбъект, ПараметрыЗаписи) - Если ЗначениеЗаполнено(СсылкаНового) Тогда + Если ЗначениеЗаполнено(СсылкаНового) И ТекущийОбъект.ЭтоНовый() Тогда ТекущийОбъект.УстановитьСсылкуНового(СсылкаНового); КонецЕсли; @@ -106,15 +106,21 @@ &НаКлиенте Процедура ПолныйПутьWindowsПриИзменении(Элемент) - // Добавляем слэш в конце, если его нет. + // Удаляем лишние пробелы и добавляем слэш в конце, если его нет. Если Не ПустаяСтрока(Объект.ПолныйПутьWindows) Тогда - Если Прав(Объект.ПолныйПутьWindows, 1) <> "\" Тогда + + Если СтрНачинаетсяС(Объект.ПолныйПутьWindows, " ") Или СтрЗаканчиваетсяНа(Объект.ПолныйПутьWindows, " ") Тогда + Объект.ПолныйПутьWindows = СокрЛП(Объект.ПолныйПутьWindows); + КонецЕсли; + + Если Не СтрЗаканчиваетсяНа(Объект.ПолныйПутьWindows, "\") Тогда Объект.ПолныйПутьWindows = Объект.ПолныйПутьWindows + "\"; КонецЕсли; - Если Прав(Объект.ПолныйПутьWindows, 2) = "\\" Тогда + Если СтрЗаканчиваетсяНа(Объект.ПолныйПутьWindows, "\\") Тогда Объект.ПолныйПутьWindows = Лев(Объект.ПолныйПутьWindows, СтрДлина(Объект.ПолныйПутьWindows) - 1); КонецЕсли; + КонецЕсли; КонецПроцедуры @@ -122,15 +128,21 @@ &НаКлиенте Процедура ПолныйПутьLinuxПриИзменении(Элемент) - // Добавляем слэш в конце, если его нет. + // Удаляем лишние пробелы и добавляем слэш в конце, если его нет. Если Не ПустаяСтрока(Объект.ПолныйПутьLinux) Тогда - Если Прав(Объект.ПолныйПутьLinux, 1) <> "\" Тогда + + Если СтрНачинаетсяС(Объект.ПолныйПутьLinux, " ") Или СтрЗаканчиваетсяНа(Объект.ПолныйПутьLinux, " ") Тогда + Объект.ПолныйПутьLinux = СокрЛП(Объект.ПолныйПутьLinux); + КонецЕсли; + + Если Не СтрЗаканчиваетсяНа(Объект.ПолныйПутьLinux, "\") Тогда Объект.ПолныйПутьLinux = Объект.ПолныйПутьLinux + "\"; КонецЕсли; - Если Прав(Объект.ПолныйПутьLinux, 2) = "\\" Тогда + Если СтрЗаканчиваетсяНа(Объект.ПолныйПутьLinux, "\\") Тогда Объект.ПолныйПутьLinux = Лев(Объект.ПолныйПутьLinux, СтрДлина(Объект.ПолныйПутьLinux) - 1); КонецЕсли; + КонецЕсли; КонецПроцедуры @@ -146,6 +158,23 @@ КонецПроцедуры +&НаКлиенте +Процедура ПроверитьЦелостностьТома(Команда) + + ПараметрыОтчета = Новый Структура(); + ПараметрыОтчета.Вставить("СформироватьПриОткрытии", Истина); + ПараметрыОтчета.Вставить("Отбор", Новый Структура("Том", Объект.Ссылка)); + + ОткрытьФорму("Отчет.ПроверкаЦелостностиТома.ФормаОбъекта", ПараметрыОтчета); + +КонецПроцедуры + +&НаКлиенте +Процедура УдалитьЛишниеФайлы(Команда) + ПараметрыОткрытия = Новый Структура("ТомХраненияФайлов", Объект.Ссылка); + ОткрытьФорму("Справочник.ТомаХраненияФайлов.Форма.УдалениеЛишнихФайловИзТома", ПараметрыОткрытия, ЭтаФорма); +КонецПроцедуры + #КонецОбласти #Область СлужебныеПроцедурыИФункции diff --git a/SSL/src/Catalogs/ТомаХраненияФайлов/ObjectModule.bsl b/SSL/src/Catalogs/ТомаХраненияФайлов/ObjectModule.bsl index 48af60204..25f575987 100644 --- a/SSL/src/Catalogs/ТомаХраненияФайлов/ObjectModule.bsl +++ b/SSL/src/Catalogs/ТомаХраненияФайлов/ObjectModule.bsl @@ -36,7 +36,7 @@ Если Не ПолучитьФункциональнуюОпцию("ИспользуютсяПрофилиБезопасности") И Не ПустаяСтрока(ПолныйПутьWindows) И ( Лев(ПолныйПутьWindows, 2) <> "\\" - ИЛИ Найти(ПолныйПутьWindows, ":") <> 0 ) Тогда + ИЛИ СтрНайти(ПолныйПутьWindows, ":") <> 0 ) Тогда ТекстОшибки = НСтр("ru = 'Путь к тому должен быть в формате UNC (\\servername\resource).'"); ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстОшибки, , "ПолныйПутьWindows", "Объект", Отказ); diff --git a/SSL/src/Catalogs/ТомаХраненияФайлов/Templates/МакетОтчета/Template.mxlx b/SSL/src/Catalogs/ТомаХраненияФайлов/Templates/МакетОтчета/Template.mxlx new file mode 100644 index 000000000..40b3a7a59 --- /dev/null +++ b/SSL/src/Catalogs/ТомаХраненияФайлов/Templates/МакетОтчета/Template.mxlx @@ -0,0 +1,120 @@ + + + + ru + ru + + ru + Русский + Русский + + + + 2 + + 0 + + 1 + + + + 1 + + 2 + + + + + 9bb67b5f-5e3e-459e-98c5-618e04892d9b + 1 + + 0 + + 3 + + + + + 1 + + 9bb67b5f-5e3e-459e-98c5-618e04892d9b + + + 4 + Описание + + + + + + 2 + + 5 + + + 6 + Название + Имя + + + + + 7 + Ошибка + + + + + true + 8 + 3 + 3 + + Заголовок + + Rows + 1 + 1 + -1 + -1 + 9bb67b5f-5e3e-459e-98c5-618e04892d9b + + + + Строка + + Rows + 2 + 2 + -1 + -1 + + + + + 342 + + + 534 + + + 383 + + + 0 + Parameter + + + 177 + + + Parameter + + + Wrap + Parameter + + + 72 + + \ No newline at end of file diff --git a/SSL/src/Catalogs/ТомаХраненияФайлов/ТомаХраненияФайлов.mdo b/SSL/src/Catalogs/ТомаХраненияФайлов/ТомаХраненияФайлов.mdo index 51bf6017e..71c7e0dd6 100644 --- a/SSL/src/Catalogs/ТомаХраненияФайлов/ТомаХраненияФайлов.mdo +++ b/SSL/src/Catalogs/ТомаХраненияФайлов/ТомаХраненияФайлов.mdo @@ -258,4 +258,20 @@ PersonalComputer MobileDevice + + УдалениеЛишнихФайловИзТома + + ru + Удаление лишних файлов из тома + + PersonalComputer + MobileDevice + + + МакетОтчета + + ru + Макет отчета + + diff --git a/SSL/src/Catalogs/УчетныеЗаписиЭлектроннойПочты/Commands/НастройкиСистемнойУчетнойЗаписи/CommandModule.bsl b/SSL/src/Catalogs/УчетныеЗаписиЭлектроннойПочты/Commands/НастройкаСистемнойУчетнойЗаписи/CommandModule.bsl similarity index 94% rename from SSL/src/Catalogs/УчетныеЗаписиЭлектроннойПочты/Commands/НастройкиСистемнойУчетнойЗаписи/CommandModule.bsl rename to SSL/src/Catalogs/УчетныеЗаписиЭлектроннойПочты/Commands/НастройкаСистемнойУчетнойЗаписи/CommandModule.bsl index 82e2621a0..6c0923dbf 100644 --- a/SSL/src/Catalogs/УчетныеЗаписиЭлектроннойПочты/Commands/НастройкиСистемнойУчетнойЗаписи/CommandModule.bsl +++ b/SSL/src/Catalogs/УчетныеЗаписиЭлектроннойПочты/Commands/НастройкаСистемнойУчетнойЗаписи/CommandModule.bsl @@ -1,3 +1,4 @@ +#Область ОбработчикиСобытий &НаКлиенте Процедура ОбработкаКоманды(ПараметрКоманды, ПараметрыВыполненияКоманды) @@ -18,3 +19,5 @@ ОткрытьФорму(ПолноеИмяФормы, ПараметрыФормы, ВладелецФормы, УникальностьФормы, ОкноФормы); КонецПроцедуры + +#КонецОбласти diff --git a/SSL/src/Catalogs/УчетныеЗаписиЭлектроннойПочты/Commands/ПроверитьУчетнуюЗапись/CommandModule.bsl b/SSL/src/Catalogs/УчетныеЗаписиЭлектроннойПочты/Commands/ПроверитьУчетнуюЗапись/CommandModule.bsl index d0d1d48f7..18eb8489f 100644 --- a/SSL/src/Catalogs/УчетныеЗаписиЭлектроннойПочты/Commands/ПроверитьУчетнуюЗапись/CommandModule.bsl +++ b/SSL/src/Catalogs/УчетныеЗаписиЭлектроннойПочты/Commands/ПроверитьУчетнуюЗапись/CommandModule.bsl @@ -1,3 +1,4 @@ +#Область ОбработчикиСобытий &НаКлиенте Процедура ОбработкаКоманды(ПараметрКоманды, ПараметрыВыполненияКоманды) @@ -5,3 +6,5 @@ РаботаСПочтовымиСообщениямиКлиент.ПроверитьУчетнуюЗапись(ПараметрКоманды); КонецПроцедуры + +#КонецОбласти diff --git a/SSL/src/Catalogs/УчетныеЗаписиЭлектроннойПочты/Forms/ПомощникНастройкиУчетнойЗаписи/Form.form b/SSL/src/Catalogs/УчетныеЗаписиЭлектроннойПочты/Forms/ПомощникНастройкиУчетнойЗаписи/Form.form index e287997f4..ccf9a6539 100644 --- a/SSL/src/Catalogs/УчетныеЗаписиЭлектроннойПочты/Forms/ПомощникНастройкиУчетнойЗаписи/Form.form +++ b/SSL/src/Catalogs/УчетныеЗаписиЭлектроннойПочты/Forms/ПомощникНастройкиУчетнойЗаписи/Form.form @@ -1609,6 +1609,10 @@ Cann't connect to example.com, 110: Refused Протокол + + OnChange + ПротоколПриИзменении + ПротоколРасширеннаяПодсказка 118 @@ -2853,10 +2857,6 @@ vasyapupkin@example.com завершена. КнопкаПерейтиКНастройкам 156 - - <key>ru</key> - <value>Настроить параметры подключения вручную</value> - true true @@ -3643,6 +3643,36 @@ vasyapupkin@example.com завершена. true + + ПараметрыОбработчикаОжидания + + <key>ru</key> + <value>Параметры обработчика ожидания</value> + + 34 + + + true + + + true + + + + РезультатФоновогоЗадания + + <key>ru</key> + <value>Результат фонового задания</value> + + 35 + + + true + + + true + + Назад @@ -3658,7 +3688,7 @@ vasyapupkin@example.com завершена.</value> <name>Назад</name> </handler> </action> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <formCommands> @@ -3676,7 +3706,7 @@ vasyapupkin@example.com завершена.</value> <name>Далее</name> </handler> </action> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <formCommands> @@ -3694,7 +3724,7 @@ vasyapupkin@example.com завершена.</value> <name>ПерейтиКНастройкам</name> </handler> </action> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <parameters> diff --git a/SSL/src/Catalogs/УчетныеЗаписиЭлектроннойПочты/Forms/ПомощникНастройкиУчетнойЗаписи/Module.bsl b/SSL/src/Catalogs/УчетныеЗаписиЭлектроннойПочты/Forms/ПомощникНастройкиУчетнойЗаписи/Module.bsl index b205d2bd7..807746f3d 100644 --- a/SSL/src/Catalogs/УчетныеЗаписиЭлектроннойПочты/Forms/ПомощникНастройкиУчетнойЗаписи/Module.bsl +++ b/SSL/src/Catalogs/УчетныеЗаписиЭлектроннойПочты/Forms/ПомощникНастройкиУчетнойЗаписи/Module.bsl @@ -102,6 +102,11 @@ НастроитьЭлементыТекущейСтраницы(); КонецПроцедуры +&НаКлиенте +Процедура ПротоколПриИзменении(Элемент) + УстановитьВидимостьЭлементов(); +КонецПроцедуры + #КонецОбласти #Область ОбработчикиКомандФормы @@ -355,7 +360,7 @@ Если Не КонтекстныйРежим И ТекущаяСтраница = Элементы.УчетнаяЗаписьУспешноНастроена Тогда Элементы.КнопкаПерейтиКНастройкам.Заголовок = НСтр("ru = 'Перейти к учетной записи'"); Иначе - Элементы.КнопкаПерейтиКНастройкам.Заголовок = НСтр("ru = 'Настроить параметры подключения вручную'"); + Элементы.КнопкаПерейтиКНастройкам.Заголовок = НСтр("ru = 'Настроить вручную'"); КонецЕсли; Если ТекущаяСтраница = Элементы.НастройкаУчетнойЗаписи Тогда @@ -364,13 +369,14 @@ КонецЕсли; Если ТекущаяСтраница = Элементы.НастройкаСервераВходящейПочты Тогда - ОбновитьДоступностьНастройкиДнейДоУдаления() + ОбновитьДоступностьНастройкиДнейДоУдаления(); + УстановитьВидимостьЭлементов(); КонецЕсли; Если ТекущаяСтраница = Элементы.УчетнаяЗаписьУспешноНастроена Тогда Элементы.НадписьУчетнаяЗаписьУспешноНастроена.Заголовок = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Настройка параметров учетной записи - |%1 завершена.'"), АдресЭлектроннойПочты); + |%1 завершена.'"), АдресЭлектроннойПочты); КонецЕсли; КонецПроцедуры @@ -381,6 +387,11 @@ Элементы.НадписьДней.Доступность = Элементы.УдалятьПисьмаССервераЧерез.Доступность; КонецПроцедуры +&НаКлиенте +Процедура УстановитьВидимостьЭлементов() + Элементы.ОставлятьПисьмаНаСервере.Видимость = Протокол = "POP"; +КонецПроцедуры + &НаКлиенте Процедура ПерейтиКНастройкам(Команда) ТекущаяСтраница = Элементы.Страницы.ТекущаяСтраница; @@ -409,7 +420,7 @@ &НаКлиентеНаСервереБезКонтекста Функция НастройкиПоУмолчанию(АдресЭлектроннойПочты, Пароль) - Позиция = Найти(АдресЭлектроннойПочты, "@"); + Позиция = СтрНайти(АдресЭлектроннойПочты, "@"); ИмяСервераВУчетнойЗаписи = Сред(АдресЭлектроннойПочты, Позиция + 1); Настройки = Новый Структура; @@ -452,7 +463,6 @@ ТекстОшибки = ""; Попытка ИнтернетПочта.Подключиться(Профиль, ИспользуемыйПротокол); - ИнтернетПочта.ПолучитьЗаголовки(); Исключение ТекстОшибки = КраткоеПредставлениеОшибки(ИнформацияОбОшибке()); КонецПопытки; @@ -540,30 +550,45 @@ &НаСервере Процедура СоздатьУчетнуюЗапись() - Если КонтекстныйРежим И ПустаяСтрока(ОбщегоНазначения.ЗначениеРеквизитаОбъекта(Справочники.УчетныеЗаписиЭлектроннойПочты.СистемнаяУчетнаяЗаписьЭлектроннойПочты, "АдресЭлектроннойПочты")) Тогда - УчетнаяЗапись = Справочники.УчетныеЗаписиЭлектроннойПочты.СистемнаяУчетнаяЗаписьЭлектроннойПочты.ПолучитьОбъект(); - Иначе - Если УчетнаяЗаписьСсылка.Пустая() Тогда - УчетнаяЗапись = Справочники.УчетныеЗаписиЭлектроннойПочты.СоздатьЭлемент(); - УчетнаяЗапись.УстановитьСсылкуНового(СсылкаНовойУчетнойЗаписи); + + НачатьТранзакцию(); + Попытка + Если КонтекстныйРежим И ПустаяСтрока(ОбщегоНазначения.ЗначениеРеквизитаОбъекта(Справочники.УчетныеЗаписиЭлектроннойПочты.СистемнаяУчетнаяЗаписьЭлектроннойПочты, "АдресЭлектроннойПочты")) Тогда + УчетнаяЗапись = Справочники.УчетныеЗаписиЭлектроннойПочты.СистемнаяУчетнаяЗаписьЭлектроннойПочты.ПолучитьОбъект(); Иначе - УчетнаяЗапись = УчетнаяЗаписьСсылка.ПолучитьОбъект(); + Если УчетнаяЗаписьСсылка.Пустая() Тогда + УчетнаяЗапись = Справочники.УчетныеЗаписиЭлектроннойПочты.СоздатьЭлемент(); + УчетнаяЗапись.УстановитьСсылкуНового(СсылкаНовойУчетнойЗаписи); + Иначе + УчетнаяЗапись = УчетнаяЗаписьСсылка.ПолучитьОбъект(); + КонецЕсли; КонецЕсли; - КонецЕсли; - ЗаполнитьЗначенияСвойств(УчетнаяЗапись, ЭтотОбъект); - УчетнаяЗапись.ИмяПользователя = ИмяОтправителяПисем; - УчетнаяЗапись.Пользователь = ИмяПользователяДляПолученияПисем; - УчетнаяЗапись.Пароль = ПарольДляПолученияПисем; - УчетнаяЗапись.ПользовательSMTP = ИмяПользователяДляОтправкиПисем; - УчетнаяЗапись.ПарольSMTP = ПарольДляОтправкиПисем; - УчетнаяЗапись.ВремяОжидания = ДлительностьОжиданияСервера; - УчетнаяЗапись.ОставлятьКопииСообщенийНаСервере = ОставлятьКопииПисемНаСервере; - УчетнаяЗапись.ПериодХраненияСообщенийНаСервере = УдалятьПисьмаССервераЧерез; - УчетнаяЗапись.ПротоколВходящейПочты = Протокол; - УчетнаяЗапись.Наименование = НазваниеУчетнойЗаписи; - УчетнаяЗапись.Записать(); - УчетнаяЗаписьСсылка = УчетнаяЗапись.Ссылка; - ТребуетсяПодтверждениеЗакрытияФормы = Ложь; + ЗаполнитьЗначенияСвойств(УчетнаяЗапись, ЭтотОбъект); + УчетнаяЗапись.ИмяПользователя = ИмяОтправителяПисем; + УчетнаяЗапись.Пользователь = ИмяПользователяДляПолученияПисем; + УчетнаяЗапись.ПользовательSMTP = ИмяПользователяДляОтправкиПисем; + УчетнаяЗапись.ВремяОжидания = ДлительностьОжиданияСервера; + УчетнаяЗапись.ОставлятьКопииСообщенийНаСервере = ОставлятьКопииПисемНаСервере; + УчетнаяЗапись.ПериодХраненияСообщенийНаСервере = УдалятьПисьмаССервераЧерез; + УчетнаяЗапись.ПротоколВходящейПочты = Протокол; + УчетнаяЗапись.Наименование = НазваниеУчетнойЗаписи; + УчетнаяЗапись.Записать(); + УчетнаяЗаписьСсылка = УчетнаяЗапись.Ссылка; + ТребуетсяПодтверждениеЗакрытияФормы = Ложь; + + УстановитьПривилегированныйРежим(Истина); + ОбщегоНазначения.ЗаписатьДанныеВБезопасноеХранилище(УчетнаяЗаписьСсылка, ПарольДляПолученияПисем); + ОбщегоНазначения.ЗаписатьДанныеВБезопасноеХранилище(УчетнаяЗаписьСсылка, ПарольДляОтправкиПисем, "ПарольSMTP"); + УстановитьПривилегированныйРежим(Ложь); + ЗафиксироватьТранзакцию(); + + Исключение + ОтменитьТранзакцию(); + ЗаписьЖурналаРегистрации(НСтр("ru = 'Ошибка при создании учетной записи электронной почты'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), + УровеньЖурналаРегистрации.Ошибка, , , ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); + ВызватьИсключение; + КонецПопытки; + КонецПроцедуры &НаСервере @@ -604,333 +629,72 @@ КонецФункции -&НаСервере -Функция ВариантыИмениПользователя() - - Позиция = Найти(АдресЭлектроннойПочты, "@"); - ИмяПользователяВУчетнойЗаписи = Лев(АдресЭлектроннойПочты, Позиция - 1); - - Результат = Новый Массив; - Результат.Добавить(АдресЭлектроннойПочты); - Результат.Добавить(ИмяПользователяВУчетнойЗаписи); - - Возврат Результат; - -КонецФункции - -&НаСервере -Функция ВариантыНастройкиПодключенияКСерверуIMAP() - - Позиция = Найти(АдресЭлектроннойПочты, "@"); - ИмяПользователяВУчетнойЗаписи = Лев(АдресЭлектроннойПочты, Позиция - 1); - ИмяСервераВУчетнойЗаписи = Сред(АдресЭлектроннойПочты, Позиция + 1); - - Результат = Новый ТаблицаЗначений; - Результат.Колонки.Добавить("СерверВходящейПочты"); - Результат.Колонки.Добавить("ПортСервераВходящейПочты"); - Результат.Колонки.Добавить("ИспользоватьЗащищенноеСоединениеДляВходящейПочты"); - - // Стандартные настройки, подходящие для ящиков gmail, yandex и mail.ru - // имя сервера с префиксом "imap.", защищенное соединение. - ВариантНастройки = Результат.Добавить(); - ВариантНастройки.СерверВходящейПочты = "imap." + ИмяСервераВУчетнойЗаписи; - ВариантНастройки.ПортСервераВходящейПочты = 993; - ВариантНастройки.ИспользоватьЗащищенноеСоединениеДляВходящейПочты = Истина; - - // Имя сервера с префиксом "mail.", защищенное соединение. - ВариантНастройки = Результат.Добавить(); - ВариантНастройки.СерверВходящейПочты = "mail." + ИмяСервераВУчетнойЗаписи; - ВариантНастройки.ПортСервераВходящейПочты = 993; - ВариантНастройки.ИспользоватьЗащищенноеСоединениеДляВходящейПочты = Истина; - - // Имя сервера без префикса "imap.", защищенное соединение. - ВариантНастройки = Результат.Добавить(); - ВариантНастройки.СерверВходящейПочты = ИмяСервераВУчетнойЗаписи; - ВариантНастройки.ПортСервераВходящейПочты = 993; - ВариантНастройки.ИспользоватьЗащищенноеСоединениеДляВходящейПочты = Истина; - - // Имя сервера с префиксом "imap.", незащищенное соединение. - ВариантНастройки = Результат.Добавить(); - ВариантНастройки.СерверВходящейПочты = "imap." + ИмяСервераВУчетнойЗаписи; - ВариантНастройки.ПортСервераВходящейПочты = 143; - ВариантНастройки.ИспользоватьЗащищенноеСоединениеДляВходящейПочты = Ложь; - - // Имя сервера с префиксом "mail.", незащищенное соединение. - ВариантНастройки = Результат.Добавить(); - ВариантНастройки.СерверВходящейПочты = "mail." + ИмяСервераВУчетнойЗаписи; - ВариантНастройки.ПортСервераВходящейПочты = 143; - ВариантНастройки.ИспользоватьЗащищенноеСоединениеДляВходящейПочты = Ложь; - - // Имя сервера без префикса "imap.", незащищенное соединение. - ВариантНастройки = Результат.Добавить(); - ВариантНастройки.СерверВходящейПочты = ИмяСервераВУчетнойЗаписи; - ВариантНастройки.ПортСервераВходящейПочты = 143; - ВариантНастройки.ИспользоватьЗащищенноеСоединениеДляВходящейПочты = Ложь; - - Возврат Результат; - -КонецФункции - -&НаСервере -Функция ВариантыНастройкиПодключенияКСерверуPOP() - - Позиция = Найти(АдресЭлектроннойПочты, "@"); - ИмяСервераВУчетнойЗаписи = Сред(АдресЭлектроннойПочты, Позиция + 1); - - Результат = Новый ТаблицаЗначений; - Результат.Колонки.Добавить("СерверВходящейПочты"); - Результат.Колонки.Добавить("ПортСервераВходящейПочты"); - Результат.Колонки.Добавить("ИспользоватьЗащищенноеСоединениеДляВходящейПочты"); - - // Стандартные настройки, подходящие для ящиков gmail, yandex и mail.ru - // имя сервера с префиксом "pop.", защищенное соединение. - ВариантНастройки = Результат.Добавить(); - ВариантНастройки.СерверВходящейПочты = "pop." + ИмяСервераВУчетнойЗаписи; - ВариантНастройки.ПортСервераВходящейПочты = 995; - ВариантНастройки.ИспользоватьЗащищенноеСоединениеДляВходящейПочты = Истина; - - // Имя сервера с префиксом "pop3.", защищенное соединение. - ВариантНастройки = Результат.Добавить(); - ВариантНастройки.СерверВходящейПочты = "pop3." + ИмяСервераВУчетнойЗаписи; - ВариантНастройки.ПортСервераВходящейПочты = 995; - ВариантНастройки.ИспользоватьЗащищенноеСоединениеДляВходящейПочты = Истина; - - // Имя сервера с префиксом "mail.", защищенное соединение. - ВариантНастройки = Результат.Добавить(); - ВариантНастройки.СерверВходящейПочты = "mail." + ИмяСервераВУчетнойЗаписи; - ВариантНастройки.ПортСервераВходящейПочты = 995; - ВариантНастройки.ИспользоватьЗащищенноеСоединениеДляВходящейПочты = Истина; - - // Имя сервера без префиксов, защищенное соединение. - ВариантНастройки = Результат.Добавить(); - ВариантНастройки.СерверВходящейПочты = ИмяСервераВУчетнойЗаписи; - ВариантНастройки.ПортСервераВходящейПочты = 995; - ВариантНастройки.ИспользоватьЗащищенноеСоединениеДляВходящейПочты = Истина; - - // Имя сервера с префиксом "pop.", незащищенное соединение. - ВариантНастройки = Результат.Добавить(); - ВариантНастройки.СерверВходящейПочты = "pop." + ИмяСервераВУчетнойЗаписи; - ВариантНастройки.ПортСервераВходящейПочты = 110; - ВариантНастройки.ИспользоватьЗащищенноеСоединениеДляВходящейПочты = Ложь; - - // Имя сервера с префиксом "pop3", незащищенное соединение. - ВариантНастройки = Результат.Добавить(); - ВариантНастройки.СерверВходящейПочты = "pop3." + ИмяСервераВУчетнойЗаписи; - ВариантНастройки.ПортСервераВходящейПочты = 110; - ВариантНастройки.ИспользоватьЗащищенноеСоединениеДляВходящейПочты = Ложь; - - // Имя сервера с префиксом "mail.", незащищенное соединение. - ВариантНастройки = Результат.Добавить(); - ВариантНастройки.СерверВходящейПочты = "mail." + ИмяСервераВУчетнойЗаписи; - ВариантНастройки.ПортСервераВходящейПочты = 110; - ВариантНастройки.ИспользоватьЗащищенноеСоединениеДляВходящейПочты = Ложь; - - // Имя сервера без префиксов, незащищенное соединение. - ВариантНастройки = Результат.Добавить(); - ВариантНастройки.СерверВходящейПочты = ИмяСервераВУчетнойЗаписи; - ВариантНастройки.ПортСервераВходящейПочты = 110; - ВариантНастройки.ИспользоватьЗащищенноеСоединениеДляВходящейПочты = Ложь; - - Возврат Результат; - -КонецФункции - -&НаСервере -Функция ВариантыНастройкиПодключенияКСерверуSMTP() - - Позиция = Найти(АдресЭлектроннойПочты, "@"); - ИмяСервераВУчетнойЗаписи = Сред(АдресЭлектроннойПочты, Позиция + 1); - - Результат = Новый ТаблицаЗначений; - Результат.Колонки.Добавить("СерверИсходящейПочты"); - Результат.Колонки.Добавить("ПортСервераИсходящейПочты"); - Результат.Колонки.Добавить("ИспользоватьЗащищенноеСоединениеДляИсходящейПочты"); - - // Стандартные настройки, подходящие для ящиков gmail, yandex и mail.ru - // имя сервера с префиксом "smtp.", защищенное соединение, порт 465. - ВариантНастройки = Результат.Добавить(); - ВариантНастройки.СерверИсходящейПочты = "smtp." + ИмяСервераВУчетнойЗаписи; - ВариантНастройки.ПортСервераИсходящейПочты = 465; - ВариантНастройки.ИспользоватьЗащищенноеСоединениеДляИсходящейПочты = Истина; - - // Имя сервера с префиксом "mail.", защищенное соединение, порт 465. - ВариантНастройки = Результат.Добавить(); - ВариантНастройки.СерверИсходящейПочты = "mail." + ИмяСервераВУчетнойЗаписи; - ВариантНастройки.ПортСервераИсходящейПочты = 465; - ВариантНастройки.ИспользоватьЗащищенноеСоединениеДляИсходящейПочты = Истина; - - // Имя сервера без префиксов, защищенное соединение, порт 465. - ВариантНастройки = Результат.Добавить(); - ВариантНастройки.СерверИсходящейПочты = ИмяСервераВУчетнойЗаписи; - ВариантНастройки.ПортСервераИсходящейПочты = 465; - ВариантНастройки.ИспользоватьЗащищенноеСоединениеДляИсходящейПочты = Истина; - - // Имя сервера с префиксом "smtp.", защищенное (STARTTLS) соединение, порт 587. - ВариантНастройки = Результат.Добавить(); - ВариантНастройки.СерверИсходящейПочты = "smtp." + ИмяСервераВУчетнойЗаписи; - ВариантНастройки.ПортСервераИсходящейПочты = 587; - ВариантНастройки.ИспользоватьЗащищенноеСоединениеДляИсходящейПочты = Ложь; - - // Имя сервера с префиксом "mail.", защищенное (STARTTLS) соединение, порт 587. - ВариантНастройки = Результат.Добавить(); - ВариантНастройки.СерверИсходящейПочты = "mail." + ИмяСервераВУчетнойЗаписи; - ВариантНастройки.ПортСервераИсходящейПочты = 587; - ВариантНастройки.ИспользоватьЗащищенноеСоединениеДляИсходящейПочты = Ложь; - - // Имя сервера без префиксов, защищенное (STARTTLS) соединение, порт 587. - ВариантНастройки = Результат.Добавить(); - ВариантНастройки.СерверИсходящейПочты = ИмяСервераВУчетнойЗаписи; - ВариантНастройки.ПортСервераИсходящейПочты = 587; - ВариантНастройки.ИспользоватьЗащищенноеСоединениеДляИсходящейПочты = Ложь; - - // Имя сервера с префиксом "smtp.", незащищенное соединение. - ВариантНастройки = Результат.Добавить(); - ВариантНастройки.СерверИсходящейПочты = "smtp." + ИмяСервераВУчетнойЗаписи; - ВариантНастройки.ПортСервераИсходящейПочты = 25; - ВариантНастройки.ИспользоватьЗащищенноеСоединениеДляИсходящейПочты = Ложь; - - // Имя сервера с префиксом "mail.", незащищенное соединение. - ВариантНастройки = Результат.Добавить(); - ВариантНастройки.СерверИсходящейПочты = "mail." + ИмяСервераВУчетнойЗаписи; - ВариантНастройки.ПортСервераИсходящейПочты = 25; - ВариантНастройки.ИспользоватьЗащищенноеСоединениеДляИсходящейПочты = Ложь; - - // Имя сервера без префиксов, незащищенное соединение. - ВариантНастройки = Результат.Добавить(); - ВариантНастройки.СерверИсходящейПочты = ИмяСервераВУчетнойЗаписи; - ВариантНастройки.ПортСервераИсходящейПочты = 25; - ВариантНастройки.ИспользоватьЗащищенноеСоединениеДляИсходящейПочты = Ложь; - - Возврат Результат; - -КонецФункции - -&НаСервере -Функция ПодобратьНастройкиУчетнойЗаписи() - - НайденыНастройкиСервераВходящейПочты = Ложь; - НайденыНастройкиСервераИсходящейПочты = Ложь; - - ЗаполнитьЗначенияСвойств(ЭтотОбъект, НастройкиПоУмолчанию(АдресЭлектроннойПочты, ПарольДляПолученияПисем)); - - Если ИспользоватьДляПолучения Тогда - ПодключениеВыполнено = Ложь; - ОшибкаАутентификации = Ложь; - ВариантНастройкиПодключения = Неопределено; - - // Поиск настроек IMAP - Протокол = "IMAP"; - Для Каждого ИмяПользователя Из ВариантыИмениПользователя() Цикл - ИмяПользователяДляПолученияПисем = ИмяПользователя; - Если ОшибкаАутентификации Тогда - СообщениеОбОшибке = ПроверитьПодключениеКСерверуВходящейПочты(); - ПодключениеВыполнено = ПустаяСтрока(СообщениеОбОшибке); - Иначе - Для Каждого ВариантНастройкиПодключения Из ВариантыНастройкиПодключенияКСерверуIMAP() Цикл - ЗаполнитьЗначенияСвойств(ЭтотОбъект, ВариантНастройкиПодключения); - СообщениеОбОшибке = ПроверитьПодключениеКСерверуВходящейПочты(); - ПодключениеВыполнено = ПустаяСтрока(СообщениеОбОшибке); - ОшибкаАутентификации = Найти(СообщениеОбОшибке, "authenticat") > 0; - Если ПодключениеВыполнено Или ОшибкаАутентификации Тогда - Прервать; - КонецЕсли; - КонецЦикла; - КонецЕсли; - Если ПодключениеВыполнено Или Не ОшибкаАутентификации Тогда - Прервать; - КонецЕсли; - КонецЦикла; - - НайденыНастройкиСервераВходящейПочты = ПодключениеВыполнено; - - Если Не НайденыНастройкиСервераВходящейПочты Тогда - // Поиск настроек POP - ПодключениеВыполнено = Ложь; - ОшибкаАутентификации = Ложь; - ВариантНастройкиПодключения = Неопределено; - - Протокол = "POP"; - Для Каждого ИмяПользователя Из ВариантыИмениПользователя() Цикл - ИмяПользователяДляПолученияПисем = ИмяПользователя; - Если ОшибкаАутентификации Тогда - СообщениеОбОшибке = ПроверитьПодключениеКСерверуВходящейПочты(); - ПодключениеВыполнено = ПустаяСтрока(СообщениеОбОшибке); - Иначе - Для Каждого ВариантНастройкиПодключения Из ВариантыНастройкиПодключенияКСерверуPOP() Цикл - ЗаполнитьЗначенияСвойств(ЭтотОбъект, ВариантНастройкиПодключения); - СообщениеОбОшибке = ПроверитьПодключениеКСерверуВходящейПочты(); - ПодключениеВыполнено = ПустаяСтрока(СообщениеОбОшибке); - ОшибкаАутентификации = Найти(СообщениеОбОшибке, "authenticat") > 0; - Если ПодключениеВыполнено Или ОшибкаАутентификации Тогда - Прервать; - КонецЕсли; - КонецЦикла; - КонецЕсли; - Если ПодключениеВыполнено Или Не ОшибкаАутентификации Тогда - Прервать; - КонецЕсли; - КонецЦикла; - КонецЕсли; - КонецЕсли; - - Если ИспользоватьДляОтправки Тогда - // Поиск настроек SMTP - ПодключениеВыполнено = Ложь; - ОшибкаАутентификации = Ложь; - ВариантНастройкиПодключения = Неопределено; - - Для Каждого ИмяПользователя Из ВариантыИмениПользователя() Цикл - ИмяПользователяДляОтправкиПисем = ИмяПользователя; - Если ОшибкаАутентификации Тогда - СообщениеОбОшибке = ПроверитьПодключениеКСерверуИсходящейПочты(); - ПодключениеВыполнено = ПустаяСтрока(СообщениеОбОшибке); - Иначе - Для Каждого ВариантНастройкиПодключения Из ВариантыНастройкиПодключенияКСерверуSMTP() Цикл - ЗаполнитьЗначенияСвойств(ЭтотОбъект, ВариантНастройкиПодключения); - СообщениеОбОшибке = ПроверитьПодключениеКСерверуИсходящейПочты(); - ПодключениеВыполнено = ПустаяСтрока(СообщениеОбОшибке); - ОшибкаАутентификации = Найти(СообщениеОбОшибке, "authenticat") > 0; - Если ПодключениеВыполнено Или ОшибкаАутентификации Тогда - Прервать; - КонецЕсли; - КонецЦикла; - КонецЕсли; - Если ПодключениеВыполнено Или Не ОшибкаАутентификации Тогда - Прервать; - КонецЕсли; - КонецЦикла; - - НайденыНастройкиСервераИсходящейПочты = ПодключениеВыполнено; - КонецЕсли; - - Возврат (Не ИспользоватьДляОтправки Или НайденыНастройкиСервераИсходящейПочты) - И (Не ИспользоватьДляПолучения Или НайденыНастройкиСервераВходящейПочты); - -КонецФункции - &НаКлиенте Процедура НастроитьПараметрыПодключенияАвтоматически() - ПодобратьНастройкиИСоздатьУчетнуюЗапись(); - - Если ЗначениеЗаполнено(УчетнаяЗаписьСсылка) Тогда - ОповеститьОбИзменении(ТипЗнч(УчетнаяЗаписьСсылка)); - КонецЕсли; - - ПерейтиНаСледующуюСтраницу(); + ПодобратьНастройкиУчетнойЗаписи(); + ПараметрыОбработчикаОжидания = Неопределено; + ПроверитьВыполнениеФоновогоЗадания(); КонецПроцедуры &НаСервере -Процедура ПодобратьНастройкиИСоздатьУчетнуюЗапись() - ПроверкаЗавершиласьСОшибками = Не ПодобратьНастройкиУчетнойЗаписи(); - Если Не ПроверкаЗавершиласьСОшибками Тогда - СоздатьУчетнуюЗапись(); - Иначе - СообщенияОбОшибках = НСтр("ru = 'Не удалось определить настройки подключения. - |Настройте параметры подключения вручную.'"); - - // Установка настроек по умолчанию. - ЗаполнитьЗначенияСвойств(ЭтотОбъект, НастройкиПоУмолчанию(АдресЭлектроннойПочты, ПарольДляПолученияПисем)); - КонецЕсли; +Процедура ПодобратьНастройкиУчетнойЗаписи() + + НаименованиеЗадания = НСтр("ru = 'Поиск настроек почтового сервера'"); + ВыполняемыйМетод = "Справочники.УчетныеЗаписиЭлектроннойПочты.ОпределитьНастройкиУчетнойЗаписи"; + + СтруктураПараметров = Новый Структура; + СтруктураПараметров.Вставить("АдресЭлектроннойПочты", АдресЭлектроннойПочты); + СтруктураПараметров.Вставить("Пароль", ПарольДляПолученияПисем); + СтруктураПараметров.Вставить("ДляОтправки", ИспользоватьДляОтправки); + СтруктураПараметров.Вставить("ДляПолучения", ИспользоватьДляПолучения); + + РезультатФоновогоЗадания = ДлительныеОперации.ЗапуститьВыполнениеВФоне( + УникальныйИдентификатор, + ВыполняемыйМетод, + СтруктураПараметров, + НаименованиеЗадания); + КонецПроцедуры +&НаКлиенте +Процедура ПроверитьВыполнениеФоновогоЗадания() + + Если Не РезультатФоновогоЗадания.ЗаданиеВыполнено Тогда + Попытка + РезультатФоновогоЗадания.ЗаданиеВыполнено = ЗаданиеВыполнено(РезультатФоновогоЗадания.ИдентификаторЗадания); + Исключение + ПроверкаЗавершиласьСОшибками = Истина; + ПерейтиНаСледующуюСтраницу(); + Возврат; + КонецПопытки; + КонецЕсли; + + Если РезультатФоновогоЗадания.ЗаданиеВыполнено Тогда + НайденныеНастройки = ПолучитьИзВременногоХранилища(РезультатФоновогоЗадания.АдресХранилища); + ПроверкаЗавершиласьСОшибками = ИспользоватьДляОтправки <> НайденныеНастройки.ДляОтправки + Или ИспользоватьДляПолучения <> НайденныеНастройки.ДляПолучения; + ЗаполнитьЗначенияСвойств(ЭтотОбъект, НайденныеНастройки); + Если Не ПроверкаЗавершиласьСОшибками Тогда + СоздатьУчетнуюЗапись(); + Иначе + СообщенияОбОшибках = НСтр("ru = 'Не удалось определить настройки подключения. + |Настройте параметры подключения вручную.'"); + КонецЕсли; + ПерейтиНаСледующуюСтраницу(); + Иначе + Если ПараметрыОбработчикаОжидания = Неопределено Тогда + ДлительныеОперацииКлиент.ИнициализироватьПараметрыОбработчикаОжидания(ПараметрыОбработчикаОжидания); + Иначе + ДлительныеОперацииКлиент.ОбновитьПараметрыОбработчикаОжидания(ПараметрыОбработчикаОжидания); + КонецЕсли; + ПодключитьОбработчикОжидания("ПроверитьВыполнениеФоновогоЗадания", ПараметрыОбработчикаОжидания.ТекущийИнтервал, Истина); + КонецЕсли; + +КонецПроцедуры + +&НаСервереБезКонтекста +Функция ЗаданиеВыполнено(ИдентификаторЗадания) + Возврат ДлительныеОперации.ЗаданиеВыполнено(ИдентификаторЗадания); +КонецФункции + #КонецОбласти diff --git a/SSL/src/Catalogs/УчетныеЗаписиЭлектроннойПочты/Forms/ФормаВыбора/Form.form b/SSL/src/Catalogs/УчетныеЗаписиЭлектроннойПочты/Forms/ФормаВыбора/Form.form index b28d0a037..c28cb2ac9 100644 --- a/SSL/src/Catalogs/УчетныеЗаписиЭлектроннойПочты/Forms/ФормаВыбора/Form.form +++ b/SSL/src/Catalogs/УчетныеЗаписиЭлектроннойПочты/Forms/ФормаВыбора/Form.form @@ -310,7 +310,6 @@ <autoFillCheck>true</autoFillCheck> <allowFormCustomize>true</allowFormCustomize> <enabled>true</enabled> - <verticalScroll>UseIfNecessary</verticalScroll> <showTitle>auto</showTitle> <showCloseButton>true</showCloseButton> <attributes> diff --git a/SSL/src/Catalogs/УчетныеЗаписиЭлектроннойПочты/Forms/ФормаСписка/Form.form b/SSL/src/Catalogs/УчетныеЗаписиЭлектроннойПочты/Forms/ФормаСписка/Form.form index 2f5a6e199..4a893305d 100644 --- a/SSL/src/Catalogs/УчетныеЗаписиЭлектроннойПочты/Forms/ФормаСписка/Form.form +++ b/SSL/src/Catalogs/УчетныеЗаписиЭлектроннойПочты/Forms/ФормаСписка/Form.form @@ -413,7 +413,6 @@ <autoFillCheck>true</autoFillCheck> <allowFormCustomize>true</allowFormCustomize> <enabled>true</enabled> - <verticalScroll>UseIfNecessary</verticalScroll> <showTitle>auto</showTitle> <showCloseButton>true</showCloseButton> <attributes> diff --git a/SSL/src/Catalogs/УчетныеЗаписиЭлектроннойПочты/Forms/ФормаЭлемента/Form.form b/SSL/src/Catalogs/УчетныеЗаписиЭлектроннойПочты/Forms/ФормаЭлемента/Form.form index 9312f7fae..16203c281 100644 --- a/SSL/src/Catalogs/УчетныеЗаписиЭлектроннойПочты/Forms/ФормаЭлемента/Form.form +++ b/SSL/src/Catalogs/УчетныеЗаписиЭлектроннойПочты/Forms/ФормаЭлемента/Form.form @@ -364,8 +364,12 @@ <common>true</common> </userVisible> <dataPath xsi:type="form:DataPath"> - <segments>Объект.ПарольSMTP</segments> + <segments>ПарольSMTP</segments> </dataPath> + <handlers> + <event>OnChange</event> + <name>ПарольДляОтправкиПисемПриИзменении</name> + </handlers> <extendedTooltip> <name>ПарольДляОтправкиПисемРасширеннаяПодсказка</name> <id>154</id> @@ -392,6 +396,7 @@ <autoMaxHeight>true</autoMaxHeight> <horizontalStretch>false</horizontalStretch> <wrap>true</wrap> + <passwordMode>true</passwordMode> <chooseType>true</chooseType> <typeDomainEnabled>true</typeDomainEnabled> <textEdit>true</textEdit> @@ -838,8 +843,12 @@ <common>true</common> </userVisible> <dataPath xsi:type="form:DataPath"> - <segments>Объект.Пароль</segments> + <segments>Пароль</segments> </dataPath> + <handlers> + <event>OnChange</event> + <name>ПарольДляПолученияПисемПриИзменении</name> + </handlers> <extendedTooltip> <name>ПарольДляПолученияПисемРасширеннаяПодсказка</name> <id>107</id> @@ -866,6 +875,7 @@ <autoMaxHeight>true</autoMaxHeight> <horizontalStretch>false</horizontalStretch> <wrap>true</wrap> + <passwordMode>true</passwordMode> <chooseType>true</chooseType> <typeDomainEnabled>true</typeDomainEnabled> <textEdit>true</textEdit> @@ -1803,7 +1813,6 @@ <autoFillCheck>true</autoFillCheck> <allowFormCustomize>true</allowFormCustomize> <enabled>true</enabled> - <verticalScroll>UseIfNecessary</verticalScroll> <showTitle>auto</showTitle> <showCloseButton>true</showCloseButton> <attributes> @@ -1839,6 +1848,78 @@ </edit> <savedData>true</savedData> </attributes> + <attributes> + <name>Пароль</name> + <title> + <key>ru</key> + <value>Пароль</value> + + 3 + + String + + + + true + + + true + + true + + + ПарольSMTP + + <key>ru</key> + <value>Пароль SMTP</value> + + 4 + + String + + + + true + + + true + + true + + + ПарольSMTPИзменен + + <key>ru</key> + <value>Пароль SMTPИзменен</value> + + 5 + + Boolean + + + true + + + true + + + + ПарольИзменен + + <key>ru</key> + <value>Пароль изменен</value> + + 6 + + Boolean + + + true + + + true + + ЗаписатьИЗакрыть @@ -1858,7 +1939,7 @@ <name>ЗаписатьИЗакрыть</name> </handler> </action> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <parameters> @@ -1880,5 +1961,9 @@ <event>BeforeWrite</event> <name>ПередЗаписью</name> </handlers> + <handlers> + <event>OnWriteAtServer</event> + <name>ПриЗаписиНаСервере</name> + </handlers> </extInfo> </form:Form> diff --git a/SSL/src/Catalogs/УчетныеЗаписиЭлектроннойПочты/Forms/ФормаЭлемента/Module.bsl b/SSL/src/Catalogs/УчетныеЗаписиЭлектроннойПочты/Forms/ФормаЭлемента/Module.bsl index fa0c59c2f..255ee6cca 100644 --- a/SSL/src/Catalogs/УчетныеЗаписиЭлектроннойПочты/Forms/ФормаЭлемента/Module.bsl +++ b/SSL/src/Catalogs/УчетныеЗаписиЭлектроннойПочты/Forms/ФормаЭлемента/Module.bsl @@ -1,5 +1,3 @@ - - &НаКлиенте Перем РазрешенияПолучены; @@ -26,6 +24,29 @@ Объект.ПериодХраненияСообщенийНаСервере = 10; КонецЕсли; + Если НЕ Объект.Ссылка.Пустая() Тогда + УстановитьПривилегированныйРежим(Истина); + Пароли = ОбщегоНазначения.ПрочитатьДанныеИзБезопасногоХранилища(Объект.Ссылка, "Пароль, ПарольSMTP"); + УстановитьПривилегированныйРежим(Ложь); + Пароль = ?(ЗначениеЗаполнено(Пароли.Пароль), ЭтотОбъект.УникальныйИдентификатор, ""); + ПарольSMTP = ?(ЗначениеЗаполнено(Пароли.ПарольSMTP), ЭтотОбъект.УникальныйИдентификатор, ""); + КонецЕсли; + +КонецПроцедуры + +&НаСервере +Процедура ПриЗаписиНаСервере(Отказ, ТекущийОбъект, ПараметрыЗаписи) + Если ПарольИзменен Тогда + УстановитьПривилегированныйРежим(Истина); + ОбщегоНазначения.ЗаписатьДанныеВБезопасноеХранилище(ТекущийОбъект.Ссылка, Пароль); + УстановитьПривилегированныйРежим(Ложь); + КонецЕсли; + + Если ПарольSMTPИзменен Тогда + УстановитьПривилегированныйРежим(Истина); + ОбщегоНазначения.ЗаписатьДанныеВБезопасноеХранилище(ТекущийОбъект.Ссылка, ПарольSMTP, "ПарольSMTP"); + УстановитьПривилегированныйРежим(Ложь); + КонецЕсли; КонецПроцедуры &НаКлиенте @@ -84,14 +105,14 @@ Процедура ПротоколПриИзменении(Элемент) Если Объект.ПротоколВходящейПочты = "IMAP" Тогда - Если Лев(Объект.СерверВходящейПочты, 4) = "pop." Тогда + Если СтрНачинаетсяС(Объект.СерверВходящейПочты, "pop.") Тогда Объект.СерверВходящейПочты = "imap." + Сред(Объект.СерверВходящейПочты, 5); КонецЕсли Иначе Если ПустаяСтрока(Объект.ПротоколВходящейПочты) Тогда Объект.ПротоколВходящейПочты = "POP"; КонецЕсли; - Если Лев(Объект.СерверВходящейПочты, 5) = "imap." Тогда + Если СтрНачинаетсяС(Объект.СерверВходящейПочты, "imap.") Тогда Объект.СерверВходящейПочты = "pop." + Сред(Объект.СерверВходящейПочты, 6); КонецЕсли; КонецЕсли; @@ -135,6 +156,16 @@ УстановитьДоступностьЭлементов(); КонецПроцедуры +&НаКлиенте +Процедура ПарольДляПолученияПисемПриИзменении(Элемент) + ПарольИзменен = Истина; +КонецПроцедуры + +&НаКлиенте +Процедура ПарольДляОтправкиПисемПриИзменении(Элемент) + ПарольSMTPИзменен = Истина; +КонецПроцедуры + #КонецОбласти #Область ОбработчикиКомандФормы diff --git a/SSL/src/Catalogs/УчетныеЗаписиЭлектроннойПочты/ManagerModule.bsl b/SSL/src/Catalogs/УчетныеЗаписиЭлектроннойПочты/ManagerModule.bsl index fe02b6a77..dad4cda83 100644 --- a/SSL/src/Catalogs/УчетныеЗаписиЭлектроннойПочты/ManagerModule.bsl +++ b/SSL/src/Catalogs/УчетныеЗаписиЭлектроннойПочты/ManagerModule.bsl @@ -121,9 +121,7 @@ НастройкиУчетнойЗаписи.Протокол, НастройкиУчетнойЗаписи.Сервер, НастройкиУчетнойЗаписи.Порт, - НСтр("ru = 'Электронная почта.'") - ) - ); + НСтр("ru = 'Электронная почта.'"))); КонецЦикла; Результат.Вставить(УчетныеЗаписи.Ссылка, Разрешения); КонецЦикла; @@ -157,6 +155,551 @@ И (Не ПустаяСтрока(Параметры.СерверВходящейПочты) Или Не ПустаяСтрока(Параметры.СерверИсходящейПочты)); КонецФункции +Процедура ОпределитьНастройкиУчетнойЗаписи(Параметры, АдресРезультата) Экспорт + + АдресЭлектроннойПочты = Параметры.АдресЭлектроннойПочты; + Пароль = Параметры.Пароль; + + НайденныйПрофильSMTP = Неопределено; + НайденныйПрофильIMAP = Неопределено; + НайденныйПрофильPOP = Неопределено; + + Если Параметры.ДляОтправки Тогда + НайденныйПрофильSMTP = ОпределитьНастройкиSMTP(АдресЭлектроннойПочты, Пароль); + КонецЕсли; + + Если Параметры.ДляПолучения Тогда + НайденныйПрофильIMAP = ОпределитьНастройкиIMAP(АдресЭлектроннойПочты, Пароль); + Если НайденныйПрофильIMAP = Неопределено Тогда + НайденныйПрофильPOP = ОпределитьНастройкиPOP(АдресЭлектроннойПочты, Пароль); + КонецЕсли; + КонецЕсли; + + Результат = Новый Структура; + + Если НайденныйПрофильIMAP <> Неопределено Тогда + Результат.Вставить("ИмяПользователяДляПолученияПисем", НайденныйПрофильIMAP.ПользовательIMAP); + Результат.Вставить("ПарольДляПолученияПисем", НайденныйПрофильIMAP.ПарольIMAP); + Результат.Вставить("Протокол", "IMAP"); + Результат.Вставить("СерверВходящейПочты", НайденныйПрофильIMAP.АдресСервераIMAP); + Результат.Вставить("ПортСервераВходящейПочты", НайденныйПрофильIMAP.ПортIMAP); + Результат.Вставить("ИспользоватьЗащищенноеСоединениеДляВходящейПочты", НайденныйПрофильIMAP.ИспользоватьSSLIMAP); + КонецЕсли; + + Если НайденныйПрофильPOP <> Неопределено Тогда + Результат.Вставить("ИмяПользователяДляПолученияПисем", НайденныйПрофильPOP.Пользователь); + Результат.Вставить("ПарольДляПолученияПисем", НайденныйПрофильPOP.Пароль); + Результат.Вставить("Протокол", "POP"); + Результат.Вставить("СерверВходящейПочты", НайденныйПрофильPOP.АдресСервераPOP3); + Результат.Вставить("ПортСервераВходящейПочты", НайденныйПрофильPOP.ПортPOP3); + Результат.Вставить("ИспользоватьЗащищенноеСоединениеДляВходящейПочты", НайденныйПрофильPOP.ИспользоватьSSLPOP3); + КонецЕсли; + + Если НайденныйПрофильSMTP <> Неопределено Тогда + Результат.Вставить("ИмяПользователяДляОтправкиПисем", НайденныйПрофильSMTP.ПользовательSMTP); + Результат.Вставить("ПарольДляОтправкиПисем", НайденныйПрофильSMTP.ПарольSMTP); + Результат.Вставить("СерверИсходящейПочты", НайденныйПрофильSMTP.АдресСервераSMTP); + Результат.Вставить("ПортСервераИсходящейПочты", НайденныйПрофильSMTP.ПортSMTP); + Результат.Вставить("ИспользоватьЗащищенноеСоединениеДляИсходящейПочты", НайденныйПрофильSMTP.ИспользоватьSSLSMTP); + КонецЕсли; + + Результат.Вставить("ДляПолучения", НайденныйПрофильIMAP <> Неопределено Или НайденныйПрофильPOP <> Неопределено); + Результат.Вставить("ДляОтправки", НайденныйПрофильSMTP <> Неопределено); + + ПоместитьВоВременноеХранилище(Результат, АдресРезультата); + +КонецПроцедуры + +Функция ОпределитьНастройкиPOP(АдресЭлектроннойПочты, Пароль) + Для Каждого Профиль Из ПрофилиPOP(АдресЭлектроннойПочты, Пароль) Цикл + СообщениеСервера = ПроверитьПодключениеКСерверуВходящейПочты(Профиль, ПротоколИнтернетПочты.POP3); + + Если ОшибкаАутентификации(СообщениеСервера) Тогда + Для Каждого ИмяПользователя Из ВариантыИмениПользователя(АдресЭлектроннойПочты) Цикл + УстановитьИмяПользователя(Профиль, ИмяПользователя); + СообщениеОбОшибке = ПроверитьПодключениеКСерверуВходящейПочты(Профиль, ПротоколИнтернетПочты.POP3); + Если Не ОшибкаАутентификации(СообщениеСервера) Тогда + Прервать; + КонецЕсли; + КонецЦикла; + Если ОшибкаАутентификации(СообщениеСервера) Тогда + Прервать; + КонецЕсли; + КонецЕсли; + + Если ПодключениеВыполнено(СообщениеСервера) Тогда + Возврат Профиль; + КонецЕсли; + КонецЦикла; + + Возврат Неопределено; +КонецФункции + +Функция ОпределитьНастройкиIMAP(АдресЭлектроннойПочты, Пароль) + Для Каждого Профиль Из ПрофилиIMAP(АдресЭлектроннойПочты, Пароль) Цикл + СообщениеСервера = ПроверитьПодключениеКСерверуВходящейПочты(Профиль, ПротоколИнтернетПочты.IMAP); + + Если ОшибкаАутентификации(СообщениеСервера) Тогда + Для Каждого ИмяПользователя Из ВариантыИмениПользователя(АдресЭлектроннойПочты) Цикл + УстановитьИмяПользователя(Профиль, ИмяПользователя); + СообщениеОбОшибке = ПроверитьПодключениеКСерверуВходящейПочты(Профиль, ПротоколИнтернетПочты.IMAP); + Если Не ОшибкаАутентификации(СообщениеСервера) Тогда + Прервать; + КонецЕсли; + КонецЦикла; + Если ОшибкаАутентификации(СообщениеСервера) Тогда + Прервать; + КонецЕсли; + КонецЕсли; + + Если ПодключениеВыполнено(СообщениеСервера) Тогда + Возврат Профиль; + КонецЕсли; + КонецЦикла; + + Возврат Неопределено; +КонецФункции + +Функция ОпределитьНастройкиSMTP(АдресЭлектроннойПочты, Пароль) + Для Каждого Профиль Из ПрофилиSMTP(АдресЭлектроннойПочты, Пароль) Цикл + СообщениеСервера = ПроверитьПодключениеКСерверуИсходящейПочты(Профиль, АдресЭлектроннойПочты); + + Если ОшибкаАутентификации(СообщениеСервера) Тогда + Для Каждого ИмяПользователя Из ВариантыИмениПользователя(АдресЭлектроннойПочты) Цикл + УстановитьИмяПользователя(Профиль, ИмяПользователя); + СообщениеОбОшибке = ПроверитьПодключениеКСерверуИсходящейПочты(Профиль, АдресЭлектроннойПочты); + Если Не ОшибкаАутентификации(СообщениеСервера) Тогда + Прервать; + КонецЕсли; + КонецЦикла; + Если ОшибкаАутентификации(СообщениеСервера) Тогда + Прервать; + КонецЕсли; + КонецЕсли; + + Если ПодключениеВыполнено(СообщениеСервера) Тогда + Возврат Профиль; + КонецЕсли; + КонецЦикла; + + Возврат Неопределено; +КонецФункции + +Функция ПрофилиPOP(АдресЭлектроннойПочты, Пароль) + Результат = Новый Массив; + НастройкиПрофиля = НастройкиПоУмолчанию(АдресЭлектроннойПочты, Пароль); + + Для Каждого ВариантНастройкиПодключения Из ВариантыНастройкиПодключенияКСерверуPOP(АдресЭлектроннойПочты) Цикл + Профиль = Новый ИнтернетПочтовыйПрофиль; + ЗаполнитьЗначенияСвойств(НастройкиПрофиля, ВариантНастройкиПодключения); + ЗаполнитьЗначенияСвойств(Профиль, ИнтернетПочтовыйПрофиль(НастройкиПрофиля, ПротоколИнтернетПочты.POP3)); + Результат.Добавить(Профиль); + КонецЦикла; + + Возврат Результат; +КонецФункции + +Функция ПрофилиIMAP(АдресЭлектроннойПочты, Пароль) + Результат = Новый Массив; + НастройкиПрофиля = НастройкиПоУмолчанию(АдресЭлектроннойПочты, Пароль); + + Для Каждого ВариантНастройкиПодключения Из ВариантыНастройкиПодключенияКСерверуIMAP(АдресЭлектроннойПочты) Цикл + Профиль = Новый ИнтернетПочтовыйПрофиль; + ЗаполнитьЗначенияСвойств(НастройкиПрофиля, ВариантНастройкиПодключения); + ЗаполнитьЗначенияСвойств(Профиль, ИнтернетПочтовыйПрофиль(НастройкиПрофиля, ПротоколИнтернетПочты.IMAP)); + Результат.Добавить(Профиль); + КонецЦикла; + + Возврат Результат; +КонецФункции + +Функция ПрофилиSMTP(АдресЭлектроннойПочты, Пароль) + Результат = Новый Массив; + НастройкиПрофиля = НастройкиПоУмолчанию(АдресЭлектроннойПочты, Пароль); + + Для Каждого ВариантНастройкиПодключения Из ВариантыНастройкиПодключенияКСерверуSMTP(АдресЭлектроннойПочты) Цикл + Профиль = Новый ИнтернетПочтовыйПрофиль; + ЗаполнитьЗначенияСвойств(НастройкиПрофиля, ВариантНастройкиПодключения); + ЗаполнитьЗначенияСвойств(Профиль, ИнтернетПочтовыйПрофиль(НастройкиПрофиля, ПротоколИнтернетПочты.SMTP)); + Результат.Добавить(Профиль); + КонецЦикла; + + Возврат Результат; +КонецФункции + +Функция ОшибкаАутентификации(СообщениеСервера) + Возврат СтрНайти(НРег(СообщениеСервера), "authenticat") > 0 + Или СтрНайти(НРег(СообщениеСервера), "password") > 0 + Или СтрНайти(НРег(СообщениеСервера), "[auth]") > 0; +КонецФункции + +Функция ПодключениеВыполнено(СообщениеСервера) + Возврат ПустаяСтрока(СообщениеСервера); +КонецФункции + +Процедура УстановитьИмяПользователя(Профиль, ИмяПользователя) + Если Не ПустаяСтрока(Профиль.Пользователь) Тогда + Профиль.Пользователь = ИмяПользователя; + КонецЕсли; + Если Не ПустаяСтрока(Профиль.ПользовательIMAP) Тогда + Профиль.ПользовательIMAP = ИмяПользователя; + КонецЕсли; + Если Не ПустаяСтрока(Профиль.ПользовательSMTP) Тогда + Профиль.ПользовательSMTP = ИмяПользователя; + КонецЕсли; +КонецПроцедуры + +Функция НастройкиПоУмолчанию(АдресЭлектроннойПочты, Пароль) + + Позиция = СтрНайти(АдресЭлектроннойПочты, "@"); + ИмяСервераВУчетнойЗаписи = Сред(АдресЭлектроннойПочты, Позиция + 1); + + Настройки = Новый Структура; + + Настройки.Вставить("ИмяПользователяДляПолученияПисем", АдресЭлектроннойПочты); + Настройки.Вставить("ИмяПользователяДляОтправкиПисем", АдресЭлектроннойПочты); + + Настройки.Вставить("ПарольДляОтправкиПисем", Пароль); + Настройки.Вставить("ПарольДляПолученияПисем", Пароль); + + Настройки.Вставить("Протокол", "POP"); + Настройки.Вставить("СерверВходящейПочты", "pop." + ИмяСервераВУчетнойЗаписи); + Настройки.Вставить("ПортСервераВходящейПочты", 995); + Настройки.Вставить("ИспользоватьЗащищенноеСоединениеДляВходящейПочты", Истина); + Настройки.Вставить("ИспользоватьБезопасныйВходНаСерверВходящейПочты", Ложь); + + Настройки.Вставить("СерверИсходящейПочты", "smtp." + ИмяСервераВУчетнойЗаписи); + Настройки.Вставить("ПортСервераИсходящейПочты", 465); + Настройки.Вставить("ИспользоватьЗащищенноеСоединениеДляИсходящейПочты", Истина); + Настройки.Вставить("ИспользоватьБезопасныйВходНаСерверИсходящейПочты", Ложь); + Настройки.Вставить("ТребуетсяВходНаСерверПередОтправкой", Ложь); + + Настройки.Вставить("ДлительностьОжиданияСервера", 30); + Настройки.Вставить("ОставлятьКопииПисемНаСервере", Истина); + Настройки.Вставить("УдалятьПисьмаССервераЧерез", 0); + + Возврат Настройки; + +КонецФункции + +Функция ПроверитьПодключениеКСерверуВходящейПочты(Профиль, Протокол) + + ИнтернетПочта = Новый ИнтернетПочта; + + ТекстОшибки = ""; + Попытка + ИнтернетПочта.Подключиться(Профиль, Протокол); + Исключение + ТекстОшибки = КраткоеПредставлениеОшибки(ИнформацияОбОшибке()); + КонецПопытки; + + ИнтернетПочта.Отключиться(); + + Если Протокол = ПротоколИнтернетПочты.POP3 Тогда + ТекстДляЖурнала = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку("%1:%2%3 (%4)" + Символы.ПС + "%5", + Профиль.АдресСервераPOP3, + Профиль.ПортPOP3, + ?(Профиль.ИспользоватьSSLPOP3, "/SSL", ""), + Профиль.Пользователь, + ?(ПустаяСтрока(ТекстОшибки), НСтр("ru = 'OK'"), ТекстОшибки)); + Иначе + ТекстДляЖурнала = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку("%1:%2%3 (%4)" + Символы.ПС + "%5", + Профиль.АдресСервераIMAP, + Профиль.ПортIMAP, + ?(Профиль.ИспользоватьSSLIMAP, "/SSL", ""), + Профиль.ПользовательIMAP, + ?(ПустаяСтрока(ТекстОшибки), НСтр("ru = 'OK'"), ТекстОшибки)); + КонецЕсли; + + ЗаписьЖурналаРегистрации(НСтр("ru = 'Проверка подключения к почтовому серверу'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), + УровеньЖурналаРегистрации.Информация, , , ТекстДляЖурнала); + + Возврат ТекстОшибки; + +КонецФункции + +Функция ПроверитьПодключениеКСерверуИсходящейПочты(Профиль, АдресЭлектроннойПочты) + + ПараметрыПисьма = Новый Структура; + + Тема = НСтр("ru = 'Тестовое сообщение 1С:Предприятие'"); + Тело = НСтр("ru = 'Это сообщение отправлено подсистемой электронной почты 1С:Предприятие'"); + ИмяОтправителяПисем = НСтр("ru = '1С:Предприятие'"); + + Письмо = Новый ИнтернетПочтовоеСообщение; + Письмо.Тема = Тема; + + Получатель = Письмо.Получатели.Добавить(АдресЭлектроннойПочты); + Получатель.ОтображаемоеИмя = ИмяОтправителяПисем; + + Письмо.ИмяОтправителя = ИмяОтправителяПисем; + Письмо.Отправитель.ОтображаемоеИмя = ИмяОтправителяПисем; + Письмо.Отправитель.Адрес = АдресЭлектроннойПочты; + + Текст = Письмо.Тексты.Добавить(Тело); + Текст.ТипТекста = ТипТекстаПочтовогоСообщения.ПростойТекст; + + ИнтернетПочта = Новый ИнтернетПочта; + + ТекстОшибки = ""; + Попытка + ИнтернетПочта.Подключиться(Профиль); + ИнтернетПочта.Послать(Письмо); + Исключение + ТекстОшибки = КраткоеПредставлениеОшибки(ИнформацияОбОшибке()); + КонецПопытки; + + ИнтернетПочта.Отключиться(); + + ТекстДляЖурнала = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку("%1:%2%3 (%4)" + Символы.ПС + "%5", + Профиль.АдресСервераSMTP, + Профиль.ПортSMTP, + ?(Профиль.ИспользоватьSSLSMTP, "/SSL", ""), + Профиль.ПользовательSMTP, + ?(ПустаяСтрока(ТекстОшибки), НСтр("ru = 'OK'"), ТекстОшибки)); + + ЗаписьЖурналаРегистрации(НСтр("ru = 'Проверка подключения к почтовому серверу'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), + УровеньЖурналаРегистрации.Информация, , , ТекстДляЖурнала); + + Возврат ТекстОшибки; + +КонецФункции + +Функция ИнтернетПочтовыйПрофиль(НастройкиПрофиля, Протокол) + + ДляПолучения = Протокол <> ПротоколИнтернетПочты.SMTP; + + Профиль = Новый ИнтернетПочтовыйПрофиль; + Если ДляПолучения Или НастройкиПрофиля.ТребуетсяВходНаСерверПередОтправкой Тогда + Если Протокол = ПротоколИнтернетПочты.IMAP Тогда + Профиль.АдресСервераIMAP = НастройкиПрофиля.СерверВходящейПочты; + Профиль.ИспользоватьSSLIMAP = НастройкиПрофиля.ИспользоватьЗащищенноеСоединениеДляВходящейПочты; + Профиль.ПарольIMAP = НастройкиПрофиля.ПарольДляПолученияПисем; + Профиль.ПользовательIMAP = НастройкиПрофиля.ИмяПользователяДляПолученияПисем; + Профиль.ПортIMAP = НастройкиПрофиля.ПортСервераВходящейПочты; + Профиль.ТолькоЗащищеннаяАутентификацияIMAP = НастройкиПрофиля.ИспользоватьБезопасныйВходНаСерверВходящейПочты; + Иначе + Профиль.АдресСервераPOP3 = НастройкиПрофиля.СерверВходящейПочты; + Профиль.ИспользоватьSSLPOP3 = НастройкиПрофиля.ИспользоватьЗащищенноеСоединениеДляВходящейПочты; + Профиль.Пароль = НастройкиПрофиля.ПарольДляПолученияПисем; + Профиль.Пользователь = НастройкиПрофиля.ИмяПользователяДляПолученияПисем; + Профиль.ПортPOP3 = НастройкиПрофиля.ПортСервераВходящейПочты; + Профиль.ТолькоЗащищеннаяАутентификацияPOP3 = НастройкиПрофиля.ИспользоватьБезопасныйВходНаСерверВходящейПочты; + КонецЕсли; + КонецЕсли; + + Если Не ДляПолучения Тогда + Профиль.POP3ПередSMTP = НастройкиПрофиля.ТребуетсяВходНаСерверПередОтправкой; + Профиль.АдресСервераSMTP = НастройкиПрофиля.СерверИсходящейПочты; + Профиль.ИспользоватьSSLSMTP = НастройкиПрофиля.ИспользоватьЗащищенноеСоединениеДляИсходящейПочты; + Профиль.ПарольSMTP = НастройкиПрофиля.ПарольДляОтправкиПисем; + Профиль.ПользовательSMTP = НастройкиПрофиля.ИмяПользователяДляОтправкиПисем; + Профиль.ПортSMTP = НастройкиПрофиля.ПортСервераИсходящейПочты; + Профиль.ТолькоЗащищеннаяАутентификацияSMTP = НастройкиПрофиля.ИспользоватьБезопасныйВходНаСерверИсходящейПочты; + КонецЕсли; + + Профиль.Таймаут = НастройкиПрофиля.ДлительностьОжиданияСервера; + + Возврат Профиль; + +КонецФункции + +Функция ВариантыИмениПользователя(АдресЭлектроннойПочты) + + Позиция = СтрНайти(АдресЭлектроннойПочты, "@"); + ИмяПользователяВУчетнойЗаписи = Лев(АдресЭлектроннойПочты, Позиция - 1); + + Результат = Новый Массив; + Результат.Добавить(ИмяПользователяВУчетнойЗаписи); + + Возврат Результат; + +КонецФункции + +Функция ВариантыНастройкиПодключенияКСерверуIMAP(АдресЭлектроннойПочты) + + Позиция = СтрНайти(АдресЭлектроннойПочты, "@"); + ИмяПользователяВУчетнойЗаписи = Лев(АдресЭлектроннойПочты, Позиция - 1); + ИмяСервераВУчетнойЗаписи = Сред(АдресЭлектроннойПочты, Позиция + 1); + + Результат = Новый ТаблицаЗначений; + Результат.Колонки.Добавить("СерверВходящейПочты"); + Результат.Колонки.Добавить("ПортСервераВходящейПочты"); + Результат.Колонки.Добавить("ИспользоватьЗащищенноеСоединениеДляВходящейПочты"); + + // Стандартные настройки, подходящие для ящиков gmail, yandex и mail.ru + // имя сервера с префиксом "imap.", защищенное соединение. + ВариантНастройки = Результат.Добавить(); + ВариантНастройки.СерверВходящейПочты = "imap." + ИмяСервераВУчетнойЗаписи; + ВариантНастройки.ПортСервераВходящейПочты = 993; + ВариантНастройки.ИспользоватьЗащищенноеСоединениеДляВходящейПочты = Истина; + + // Имя сервера с префиксом "mail.", защищенное соединение. + ВариантНастройки = Результат.Добавить(); + ВариантНастройки.СерверВходящейПочты = "mail." + ИмяСервераВУчетнойЗаписи; + ВариантНастройки.ПортСервераВходящейПочты = 993; + ВариантНастройки.ИспользоватьЗащищенноеСоединениеДляВходящейПочты = Истина; + + // Имя сервера без префикса "imap.", защищенное соединение. + ВариантНастройки = Результат.Добавить(); + ВариантНастройки.СерверВходящейПочты = ИмяСервераВУчетнойЗаписи; + ВариантНастройки.ПортСервераВходящейПочты = 993; + ВариантНастройки.ИспользоватьЗащищенноеСоединениеДляВходящейПочты = Истина; + + // Имя сервера с префиксом "imap.", незащищенное соединение. + ВариантНастройки = Результат.Добавить(); + ВариантНастройки.СерверВходящейПочты = "imap." + ИмяСервераВУчетнойЗаписи; + ВариантНастройки.ПортСервераВходящейПочты = 143; + ВариантНастройки.ИспользоватьЗащищенноеСоединениеДляВходящейПочты = Ложь; + + // Имя сервера с префиксом "mail.", незащищенное соединение. + ВариантНастройки = Результат.Добавить(); + ВариантНастройки.СерверВходящейПочты = "mail." + ИмяСервераВУчетнойЗаписи; + ВариантНастройки.ПортСервераВходящейПочты = 143; + ВариантНастройки.ИспользоватьЗащищенноеСоединениеДляВходящейПочты = Ложь; + + // Имя сервера без префикса "imap.", незащищенное соединение. + ВариантНастройки = Результат.Добавить(); + ВариантНастройки.СерверВходящейПочты = ИмяСервераВУчетнойЗаписи; + ВариантНастройки.ПортСервераВходящейПочты = 143; + ВариантНастройки.ИспользоватьЗащищенноеСоединениеДляВходящейПочты = Ложь; + + Возврат Результат; + +КонецФункции + +Функция ВариантыНастройкиПодключенияКСерверуPOP(АдресЭлектроннойПочты) + + Позиция = СтрНайти(АдресЭлектроннойПочты, "@"); + ИмяСервераВУчетнойЗаписи = Сред(АдресЭлектроннойПочты, Позиция + 1); + + Результат = Новый ТаблицаЗначений; + Результат.Колонки.Добавить("СерверВходящейПочты"); + Результат.Колонки.Добавить("ПортСервераВходящейПочты"); + Результат.Колонки.Добавить("ИспользоватьЗащищенноеСоединениеДляВходящейПочты"); + + // Стандартные настройки, подходящие для ящиков gmail, yandex и mail.ru + // имя сервера с префиксом "pop.", защищенное соединение. + ВариантНастройки = Результат.Добавить(); + ВариантНастройки.СерверВходящейПочты = "pop." + ИмяСервераВУчетнойЗаписи; + ВариантНастройки.ПортСервераВходящейПочты = 995; + ВариантНастройки.ИспользоватьЗащищенноеСоединениеДляВходящейПочты = Истина; + + // Имя сервера с префиксом "pop3.", защищенное соединение. + ВариантНастройки = Результат.Добавить(); + ВариантНастройки.СерверВходящейПочты = "pop3." + ИмяСервераВУчетнойЗаписи; + ВариантНастройки.ПортСервераВходящейПочты = 995; + ВариантНастройки.ИспользоватьЗащищенноеСоединениеДляВходящейПочты = Истина; + + // Имя сервера с префиксом "mail.", защищенное соединение. + ВариантНастройки = Результат.Добавить(); + ВариантНастройки.СерверВходящейПочты = "mail." + ИмяСервераВУчетнойЗаписи; + ВариантНастройки.ПортСервераВходящейПочты = 995; + ВариантНастройки.ИспользоватьЗащищенноеСоединениеДляВходящейПочты = Истина; + + // Имя сервера без префиксов, защищенное соединение. + ВариантНастройки = Результат.Добавить(); + ВариантНастройки.СерверВходящейПочты = ИмяСервераВУчетнойЗаписи; + ВариантНастройки.ПортСервераВходящейПочты = 995; + ВариантНастройки.ИспользоватьЗащищенноеСоединениеДляВходящейПочты = Истина; + + // Имя сервера с префиксом "pop.", незащищенное соединение. + ВариантНастройки = Результат.Добавить(); + ВариантНастройки.СерверВходящейПочты = "pop." + ИмяСервераВУчетнойЗаписи; + ВариантНастройки.ПортСервераВходящейПочты = 110; + ВариантНастройки.ИспользоватьЗащищенноеСоединениеДляВходящейПочты = Ложь; + + // Имя сервера с префиксом "pop3", незащищенное соединение. + ВариантНастройки = Результат.Добавить(); + ВариантНастройки.СерверВходящейПочты = "pop3." + ИмяСервераВУчетнойЗаписи; + ВариантНастройки.ПортСервераВходящейПочты = 110; + ВариантНастройки.ИспользоватьЗащищенноеСоединениеДляВходящейПочты = Ложь; + + // Имя сервера с префиксом "mail.", незащищенное соединение. + ВариантНастройки = Результат.Добавить(); + ВариантНастройки.СерверВходящейПочты = "mail." + ИмяСервераВУчетнойЗаписи; + ВариантНастройки.ПортСервераВходящейПочты = 110; + ВариантНастройки.ИспользоватьЗащищенноеСоединениеДляВходящейПочты = Ложь; + + // Имя сервера без префиксов, незащищенное соединение. + ВариантНастройки = Результат.Добавить(); + ВариантНастройки.СерверВходящейПочты = ИмяСервераВУчетнойЗаписи; + ВариантНастройки.ПортСервераВходящейПочты = 110; + ВариантНастройки.ИспользоватьЗащищенноеСоединениеДляВходящейПочты = Ложь; + + Возврат Результат; + +КонецФункции + +Функция ВариантыНастройкиПодключенияКСерверуSMTP(АдресЭлектроннойПочты) + + Позиция = СтрНайти(АдресЭлектроннойПочты, "@"); + ИмяСервераВУчетнойЗаписи = Сред(АдресЭлектроннойПочты, Позиция + 1); + + Результат = Новый ТаблицаЗначений; + Результат.Колонки.Добавить("СерверИсходящейПочты"); + Результат.Колонки.Добавить("ПортСервераИсходящейПочты"); + Результат.Колонки.Добавить("ИспользоватьЗащищенноеСоединениеДляИсходящейПочты"); + + // Стандартные настройки, подходящие для ящиков gmail, yandex и mail.ru + // имя сервера с префиксом "smtp.", защищенное соединение, порт 465. + ВариантНастройки = Результат.Добавить(); + ВариантНастройки.СерверИсходящейПочты = "smtp." + ИмяСервераВУчетнойЗаписи; + ВариантНастройки.ПортСервераИсходящейПочты = 465; + ВариантНастройки.ИспользоватьЗащищенноеСоединениеДляИсходящейПочты = Истина; + + // Имя сервера с префиксом "mail.", защищенное соединение, порт 465. + ВариантНастройки = Результат.Добавить(); + ВариантНастройки.СерверИсходящейПочты = "mail." + ИмяСервераВУчетнойЗаписи; + ВариантНастройки.ПортСервераИсходящейПочты = 465; + ВариантНастройки.ИспользоватьЗащищенноеСоединениеДляИсходящейПочты = Истина; + + // Имя сервера без префиксов, защищенное соединение, порт 465. + ВариантНастройки = Результат.Добавить(); + ВариантНастройки.СерверИсходящейПочты = ИмяСервераВУчетнойЗаписи; + ВариантНастройки.ПортСервераИсходящейПочты = 465; + ВариантНастройки.ИспользоватьЗащищенноеСоединениеДляИсходящейПочты = Истина; + + // Имя сервера с префиксом "smtp.", защищенное (STARTTLS) соединение, порт 587. + ВариантНастройки = Результат.Добавить(); + ВариантНастройки.СерверИсходящейПочты = "smtp." + ИмяСервераВУчетнойЗаписи; + ВариантНастройки.ПортСервераИсходящейПочты = 587; + ВариантНастройки.ИспользоватьЗащищенноеСоединениеДляИсходящейПочты = Ложь; + + // Имя сервера с префиксом "mail.", защищенное (STARTTLS) соединение, порт 587. + ВариантНастройки = Результат.Добавить(); + ВариантНастройки.СерверИсходящейПочты = "mail." + ИмяСервераВУчетнойЗаписи; + ВариантНастройки.ПортСервераИсходящейПочты = 587; + ВариантНастройки.ИспользоватьЗащищенноеСоединениеДляИсходящейПочты = Ложь; + + // Имя сервера без префиксов, защищенное (STARTTLS) соединение, порт 587. + ВариантНастройки = Результат.Добавить(); + ВариантНастройки.СерверИсходящейПочты = ИмяСервераВУчетнойЗаписи; + ВариантНастройки.ПортСервераИсходящейПочты = 587; + ВариантНастройки.ИспользоватьЗащищенноеСоединениеДляИсходящейПочты = Ложь; + + // Имя сервера с префиксом "smtp.", незащищенное соединение. + ВариантНастройки = Результат.Добавить(); + ВариантНастройки.СерверИсходящейПочты = "smtp." + ИмяСервераВУчетнойЗаписи; + ВариантНастройки.ПортСервераИсходящейПочты = 25; + ВариантНастройки.ИспользоватьЗащищенноеСоединениеДляИсходящейПочты = Ложь; + + // Имя сервера с префиксом "mail.", незащищенное соединение. + ВариантНастройки = Результат.Добавить(); + ВариантНастройки.СерверИсходящейПочты = "mail." + ИмяСервераВУчетнойЗаписи; + ВариантНастройки.ПортСервераИсходящейПочты = 25; + ВариантНастройки.ИспользоватьЗащищенноеСоединениеДляИсходящейПочты = Ложь; + + // Имя сервера без префиксов, незащищенное соединение. + ВариантНастройки = Результат.Добавить(); + ВариантНастройки.СерверИсходящейПочты = ИмяСервераВУчетнойЗаписи; + ВариантНастройки.ПортСервераИсходящейПочты = 25; + ВариантНастройки.ИспользоватьЗащищенноеСоединениеДляИсходящейПочты = Ложь; + + Возврат Результат; + +КонецФункции + #КонецОбласти #КонецЕсли \ No newline at end of file diff --git a/SSL/src/Catalogs/УчетныеЗаписиЭлектроннойПочты/ObjectModule.bsl b/SSL/src/Catalogs/УчетныеЗаписиЭлектроннойПочты/ObjectModule.bsl index ddcf3a733..8368217e6 100644 --- a/SSL/src/Catalogs/УчетныеЗаписиЭлектроннойПочты/ObjectModule.bsl +++ b/SSL/src/Catalogs/УчетныеЗаписиЭлектроннойПочты/ObjectModule.bsl @@ -57,6 +57,16 @@ КонецПроцедуры +Процедура ПередУдалением(Отказ) + Если ОбменДанными.Загрузка Тогда + Возврат; + КонецЕсли; + + УстановитьПривилегированныйРежим(Истина); + ОбщегоНазначения.УдалитьДанныеИзБезопасногоХранилища(Ссылка); + УстановитьПривилегированныйРежим(Ложь); +КонецПроцедуры + #КонецОбласти #КонецЕсли diff --git a/SSL/src/Catalogs/УчетныеЗаписиЭлектроннойПочты/УчетныеЗаписиЭлектроннойПочты.mdo b/SSL/src/Catalogs/УчетныеЗаписиЭлектроннойПочты/УчетныеЗаписиЭлектроннойПочты.mdo index 2d87a12a8..8e6566928 100644 --- a/SSL/src/Catalogs/УчетныеЗаписиЭлектроннойПочты/УчетныеЗаписиЭлектроннойПочты.mdo +++ b/SSL/src/Catalogs/УчетныеЗаписиЭлектроннойПочты/УчетныеЗаписиЭлектроннойПочты.mdo @@ -127,6 +127,29 @@ <defaultObjectForm>Catalog.УчетныеЗаписиЭлектроннойПочты.Form.ФормаЭлемента</defaultObjectForm> <defaultListForm>Catalog.УчетныеЗаписиЭлектроннойПочты.Form.ФормаСписка</defaultListForm> <defaultChoiceForm>Catalog.УчетныеЗаписиЭлектроннойПочты.Form.ФормаВыбора</defaultChoiceForm> + <attributes uuid="40b08a20-51a3-438b-ba54-466917ea809f"> + <name>SMTPАутентификация</name> + <synonym> + <key>ru</key> + <value>SMTP аутентификация</value> + </synonym> + <type> + <types>EnumRef.ВариантыSMTPАутентификации</types> + </type> + <toolTip> + <key>ru</key> + <value>Применяемые параметры SMTP аутентификации</value> + </toolTip> + <minValue xsi:type="core:UndefinedValue"/> + <maxValue xsi:type="core:UndefinedValue"/> + <quickChoice>Use</quickChoice> + <createOnInput>DontUse</createOnInput> + <fillValue xsi:type="core:ReferenceValue"> + <value>Enum.ВариантыSMTPАутентификации.EmptyRef</value> + </fillValue> + <fullTextSearch>Use</fullTextSearch> + <dataHistory>Use</dataHistory> + </attributes> <attributes uuid="9846e2f6-d82a-42a6-bf50-2a9cdf750a8f"> <name>АдресЭлектроннойПочты</name> <synonym> @@ -150,6 +173,32 @@ <fullTextSearch>Use</fullTextSearch> <dataHistory>Use</dataHistory> </attributes> + <attributes uuid="9328da5c-4689-4a60-8136-ae9eac46ab38"> + <name>ВремяОжидания</name> + <synonym> + <key>ru</key> + <value>Время ожидания сервера (сек)</value> + </synonym> + <type> + <types>Number</types> + <numberQualifiers> + <precision>3</precision> + </numberQualifiers> + </type> + <toolTip> + <key>ru</key> + <value>Время ожидания сервера до разрыва соединения</value> + </toolTip> + <minValue xsi:type="core:UndefinedValue"/> + <maxValue xsi:type="core:UndefinedValue"/> + <fillChecking>ShowError</fillChecking> + <fillFromFillingValue>true</fillFromFillingValue> + <fillValue xsi:type="core:NumberValue"> + <value>30</value> + </fillValue> + <fullTextSearch>Use</fullTextSearch> + <dataHistory>Use</dataHistory> + </attributes> <attributes uuid="ca5d586f-81bb-40ee-b3bd-de854857c984"> <name>ИмяПользователя</name> <synonym> @@ -174,91 +223,157 @@ <fullTextSearch>Use</fullTextSearch> <dataHistory>Use</dataHistory> </attributes> - <attributes uuid="73f89524-dbe8-426f-8ee6-1277eb1967cc"> - <name>СерверВходящейПочты</name> + <attributes uuid="af22406b-daac-475d-b6a9-577452502b84"> + <name>ИспользоватьБезопасныйВходНаСерверВходящейПочты</name> <synonym> <key>ru</key> - <value>Сервер входящей почты</value> + <value>Использовать безопасный вход на сервер входящей почты</value> </synonym> <type> - <types>String</types> - <stringQualifiers> - <length>300</length> - </stringQualifiers> + <types>Boolean</types> </type> <toolTip> <key>ru</key> - <value>Адрес POP3 сервера</value> + <value>Использовать шифрование учетных данных при аутентификации на сервере</value> </toolTip> <minValue xsi:type="core:UndefinedValue"/> <maxValue xsi:type="core:UndefinedValue"/> - <fillChecking>ShowError</fillChecking> - <fillValue xsi:type="core:StringValue"/> + <fillValue xsi:type="core:UndefinedValue"/> <fullTextSearch>Use</fullTextSearch> <dataHistory>Use</dataHistory> </attributes> - <attributes uuid="ee7d970c-cef7-4740-a357-1fe78f88a6e6"> - <name>СерверИсходящейПочты</name> + <attributes uuid="7a925960-a579-4b06-90e0-5121dc774024"> + <name>ИспользоватьБезопасныйВходНаСерверИсходящейПочты</name> <synonym> <key>ru</key> - <value>Сервер исходящей почты (SMTP)</value> + <value>Использовать безопасный вход на сервер исходящей почты</value> </synonym> <type> - <types>String</types> - <stringQualifiers> - <length>300</length> - </stringQualifiers> + <types>Boolean</types> </type> <toolTip> <key>ru</key> - <value>Адрес SMTP сервера</value> + <value>Использовать шифрование учетных данных при аутентификации на сервере</value> </toolTip> <minValue xsi:type="core:UndefinedValue"/> <maxValue xsi:type="core:UndefinedValue"/> - <fillChecking>ShowError</fillChecking> - <fillValue xsi:type="core:StringValue"/> + <fillValue xsi:type="core:UndefinedValue"/> <fullTextSearch>Use</fullTextSearch> <dataHistory>Use</dataHistory> </attributes> - <attributes uuid="b5e81952-e469-4f26-b8d2-90e7d9e7bc1d"> - <name>ПортСервераВходящейПочты</name> + <attributes uuid="32c10512-7bb8-423b-9503-ab2fa41386a4"> + <name>ИспользоватьДляОтправки</name> <synonym> <key>ru</key> - <value>Порт сервера входящей почты</value> + <value>Использовать для отправки</value> + </synonym> + <type> + <types>Boolean</types> + </type> + <toolTip> + <key>ru</key> + <value>Использовать учетную запись для отправки почтовых сообщений</value> + </toolTip> + <minValue xsi:type="core:UndefinedValue"/> + <maxValue xsi:type="core:UndefinedValue"/> + <fillValue xsi:type="core:BooleanValue"/> + <indexing>Index</indexing> + <fullTextSearch>Use</fullTextSearch> + <dataHistory>Use</dataHistory> + </attributes> + <attributes uuid="888edfc4-8140-4675-b267-c32bf1d8d29d"> + <name>ИспользоватьДляПолучения</name> + <synonym> + <key>ru</key> + <value>Использовать для получения</value> + </synonym> + <type> + <types>Boolean</types> + </type> + <toolTip> + <key>ru</key> + <value>Использовать учетную запись для получения почтовых сообщений</value> + </toolTip> + <minValue xsi:type="core:UndefinedValue"/> + <maxValue xsi:type="core:UndefinedValue"/> + <fillValue xsi:type="core:BooleanValue"/> + <indexing>Index</indexing> + <fullTextSearch>Use</fullTextSearch> + <dataHistory>Use</dataHistory> + </attributes> + <attributes uuid="2abbd53a-0ead-42af-8df6-fde663aea300"> + <name>ИспользоватьЗащищенноеСоединениеДляВходящейПочты</name> + <synonym> + <key>ru</key> + <value>Использовать защищенное соединение для входящей почты</value> + </synonym> + <type> + <types>Boolean</types> + </type> + <toolTip> + <key>ru</key> + <value>Использовать шифрование соединения (SSL)</value> + </toolTip> + <minValue xsi:type="core:UndefinedValue"/> + <maxValue xsi:type="core:UndefinedValue"/> + <fillValue xsi:type="core:UndefinedValue"/> + <fullTextSearch>Use</fullTextSearch> + <dataHistory>Use</dataHistory> + </attributes> + <attributes uuid="24611bf9-5492-443a-935c-a0058e86493f"> + <name>ИспользоватьЗащищенноеСоединениеДляИсходящейПочты</name> + <synonym> + <key>ru</key> + <value>Использовать защищенное соединение для исходящей почты</value> + </synonym> + <type> + <types>Boolean</types> + </type> + <toolTip> + <key>ru</key> + <value>Использовать шифрование соединения (SSL)</value> + </toolTip> + <minValue xsi:type="core:UndefinedValue"/> + <maxValue xsi:type="core:UndefinedValue"/> + <fillValue xsi:type="core:UndefinedValue"/> + <fullTextSearch>Use</fullTextSearch> + <dataHistory>Use</dataHistory> + </attributes> + <attributes uuid="42641296-64da-46e0-a407-de2d492f9c90"> + <name>ОставлятьКопииСообщенийНаСервере</name> + <synonym> + <key>ru</key> + <value>Оставлять копии сообщений на сервере</value> + </synonym> + <type> + <types>Boolean</types> + </type> + <toolTip> + <key>ru</key> + <value>Требуется оставлять копии сообщений на сервере</value> + </toolTip> + <minValue xsi:type="core:UndefinedValue"/> + <maxValue xsi:type="core:UndefinedValue"/> + <fillValue xsi:type="core:BooleanValue"/> + <fullTextSearch>Use</fullTextSearch> + <dataHistory>Use</dataHistory> + </attributes> + <attributes uuid="b834af0b-086c-445d-a271-7e178c324551"> + <name>ПериодХраненияСообщенийНаСервере</name> + <synonym> + <key>ru</key> + <value>Период хранения сообщений на сервере</value> </synonym> <type> <types>Number</types> <numberQualifiers> - <precision>5</precision> + <precision>3</precision> + <nonNegative>true</nonNegative> </numberQualifiers> </type> <toolTip> <key>ru</key> - <value>Порт POP3 (необязательное поле)</value> - </toolTip> - <minValue xsi:type="core:UndefinedValue"/> - <maxValue xsi:type="core:UndefinedValue"/> - <fillValue xsi:type="core:NumberValue"> - <value>0</value> - </fillValue> - <fullTextSearch>Use</fullTextSearch> - <dataHistory>Use</dataHistory> - </attributes> - <attributes uuid="6733f1bd-7878-4a33-8995-c07526e87c1a"> - <name>ПортСервераИсходящейПочты</name> - <synonym> - <key>ru</key> - <value>Порт сервера исходящей почты</value> - </synonym> - <type> - <types>Number</types> - <numberQualifiers> - <precision>5</precision> - </numberQualifiers> - </type> - <toolTip> - <key>ru</key> - <value>Порт SMTP (необязательное поле)</value> + <value>Число дней, которое должны храниться сообщения на сервере. Вычисляется как разница между текущей датой и датой когда сообщение было отправлено.</value> </toolTip> <minValue xsi:type="core:UndefinedValue"/> <maxValue xsi:type="core:UndefinedValue"/> @@ -313,111 +428,21 @@ <fullTextSearch>Use</fullTextSearch> <dataHistory>Use</dataHistory> </attributes> - <attributes uuid="0b7c4cb7-5126-4b5e-8941-cd56eaef76a0"> - <name>Пароль</name> + <attributes uuid="b5e81952-e469-4f26-b8d2-90e7d9e7bc1d"> + <name>ПортСервераВходящейПочты</name> <synonym> <key>ru</key> - <value>Пароль</value> - </synonym> - <type> - <types>String</types> - <stringQualifiers> - <length>100</length> - </stringQualifiers> - </type> - <passwordMode>true</passwordMode> - <toolTip> - <key>ru</key> - <value>Пароль для доступа к почте</value> - </toolTip> - <minValue xsi:type="core:UndefinedValue"/> - <maxValue xsi:type="core:UndefinedValue"/> - <fillValue xsi:type="core:StringValue"/> - <dataHistory>Use</dataHistory> - </attributes> - <attributes uuid="144d5498-bb61-4bec-bef3-85a5a4aec3d5"> - <name>ПарольSMTP</name> - <synonym> - <key>ru</key> - <value>Пароль SMTP</value> - </synonym> - <type> - <types>String</types> - <stringQualifiers> - <length>100</length> - </stringQualifiers> - </type> - <passwordMode>true</passwordMode> - <toolTip> - <key>ru</key> - <value>Имя пользователя для дополнительной аутентификации на SMTP сервере</value> - </toolTip> - <minValue xsi:type="core:UndefinedValue"/> - <maxValue xsi:type="core:UndefinedValue"/> - <fillValue xsi:type="core:StringValue"/> - <dataHistory>Use</dataHistory> - </attributes> - <attributes uuid="9328da5c-4689-4a60-8136-ae9eac46ab38"> - <name>ВремяОжидания</name> - <synonym> - <key>ru</key> - <value>Время ожидания сервера (сек)</value> + <value>Порт сервера входящей почты</value> </synonym> <type> <types>Number</types> <numberQualifiers> - <precision>3</precision> + <precision>5</precision> </numberQualifiers> </type> <toolTip> <key>ru</key> - <value>Время ожидания сервера до разрыва соединения</value> - </toolTip> - <minValue xsi:type="core:UndefinedValue"/> - <maxValue xsi:type="core:UndefinedValue"/> - <fillChecking>ShowError</fillChecking> - <fillFromFillingValue>true</fillFromFillingValue> - <fillValue xsi:type="core:NumberValue"> - <value>30</value> - </fillValue> - <fullTextSearch>Use</fullTextSearch> - <dataHistory>Use</dataHistory> - </attributes> - <attributes uuid="42641296-64da-46e0-a407-de2d492f9c90"> - <name>ОставлятьКопииСообщенийНаСервере</name> - <synonym> - <key>ru</key> - <value>Оставлять копии сообщений на сервере</value> - </synonym> - <type> - <types>Boolean</types> - </type> - <toolTip> - <key>ru</key> - <value>Требуется оставлять копии сообщений на сервере</value> - </toolTip> - <minValue xsi:type="core:UndefinedValue"/> - <maxValue xsi:type="core:UndefinedValue"/> - <fillValue xsi:type="core:BooleanValue"/> - <fullTextSearch>Use</fullTextSearch> - <dataHistory>Use</dataHistory> - </attributes> - <attributes uuid="b834af0b-086c-445d-a271-7e178c324551"> - <name>ПериодХраненияСообщенийНаСервере</name> - <synonym> - <key>ru</key> - <value>Период хранения сообщений на сервере</value> - </synonym> - <type> - <types>Number</types> - <numberQualifiers> - <precision>3</precision> - <nonNegative>true</nonNegative> - </numberQualifiers> - </type> - <toolTip> - <key>ru</key> - <value>Число дней, которое должны храниться сообщения на сервере. Вычисляется как разница между текущей датой и датой когда сообщение было отправлено.</value> + <value>Порт POP3 (необязательное поле)</value> </toolTip> <minValue xsi:type="core:UndefinedValue"/> <maxValue xsi:type="core:UndefinedValue"/> @@ -427,43 +452,27 @@ <fullTextSearch>Use</fullTextSearch> <dataHistory>Use</dataHistory> </attributes> - <attributes uuid="32c10512-7bb8-423b-9503-ab2fa41386a4"> - <name>ИспользоватьДляОтправки</name> + <attributes uuid="6733f1bd-7878-4a33-8995-c07526e87c1a"> + <name>ПортСервераИсходящейПочты</name> <synonym> <key>ru</key> - <value>Использовать для отправки</value> + <value>Порт сервера исходящей почты</value> </synonym> <type> - <types>Boolean</types> + <types>Number</types> + <numberQualifiers> + <precision>5</precision> + </numberQualifiers> </type> <toolTip> <key>ru</key> - <value>Использовать учетную запись для отправки почтовых сообщений</value> + <value>Порт SMTP (необязательное поле)</value> </toolTip> <minValue xsi:type="core:UndefinedValue"/> <maxValue xsi:type="core:UndefinedValue"/> - <fillValue xsi:type="core:BooleanValue"/> - <indexing>Index</indexing> - <fullTextSearch>Use</fullTextSearch> - <dataHistory>Use</dataHistory> - </attributes> - <attributes uuid="888edfc4-8140-4675-b267-c32bf1d8d29d"> - <name>ИспользоватьДляПолучения</name> - <synonym> - <key>ru</key> - <value>Использовать для получения</value> - </synonym> - <type> - <types>Boolean</types> - </type> - <toolTip> - <key>ru</key> - <value>Использовать учетную запись для получения почтовых сообщений</value> - </toolTip> - <minValue xsi:type="core:UndefinedValue"/> - <maxValue xsi:type="core:UndefinedValue"/> - <fillValue xsi:type="core:BooleanValue"/> - <indexing>Index</indexing> + <fillValue xsi:type="core:NumberValue"> + <value>0</value> + </fillValue> <fullTextSearch>Use</fullTextSearch> <dataHistory>Use</dataHistory> </attributes> @@ -490,79 +499,95 @@ <fullTextSearch>Use</fullTextSearch> <dataHistory>Use</dataHistory> </attributes> - <attributes uuid="2abbd53a-0ead-42af-8df6-fde663aea300"> - <name>ИспользоватьЗащищенноеСоединениеДляВходящейПочты</name> + <attributes uuid="73f89524-dbe8-426f-8ee6-1277eb1967cc"> + <name>СерверВходящейПочты</name> <synonym> <key>ru</key> - <value>Использовать защищенное соединение для входящей почты</value> + <value>Сервер входящей почты</value> </synonym> <type> - <types>Boolean</types> + <types>String</types> + <stringQualifiers> + <length>300</length> + </stringQualifiers> </type> <toolTip> <key>ru</key> - <value>Использовать шифрование соединения (SSL)</value> + <value>Адрес POP3 сервера</value> </toolTip> <minValue xsi:type="core:UndefinedValue"/> <maxValue xsi:type="core:UndefinedValue"/> - <fillValue xsi:type="core:UndefinedValue"/> + <fillChecking>ShowError</fillChecking> + <fillValue xsi:type="core:StringValue"/> <fullTextSearch>Use</fullTextSearch> <dataHistory>Use</dataHistory> </attributes> - <attributes uuid="24611bf9-5492-443a-935c-a0058e86493f"> - <name>ИспользоватьЗащищенноеСоединениеДляИсходящейПочты</name> + <attributes uuid="ee7d970c-cef7-4740-a357-1fe78f88a6e6"> + <name>СерверИсходящейПочты</name> <synonym> <key>ru</key> - <value>Использовать защищенное соединение для исходящей почты</value> + <value>Сервер исходящей почты (SMTP)</value> </synonym> <type> - <types>Boolean</types> + <types>String</types> + <stringQualifiers> + <length>300</length> + </stringQualifiers> </type> <toolTip> <key>ru</key> - <value>Использовать шифрование соединения (SSL)</value> + <value>Адрес SMTP сервера</value> </toolTip> <minValue xsi:type="core:UndefinedValue"/> <maxValue xsi:type="core:UndefinedValue"/> - <fillValue xsi:type="core:UndefinedValue"/> + <fillChecking>ShowError</fillChecking> + <fillValue xsi:type="core:StringValue"/> <fullTextSearch>Use</fullTextSearch> <dataHistory>Use</dataHistory> </attributes> - <attributes uuid="af22406b-daac-475d-b6a9-577452502b84"> - <name>ИспользоватьБезопасныйВходНаСерверВходящейПочты</name> + <attributes uuid="ff18803b-4c3a-4720-a718-7547f04c6e2f"> + <name>СпособPOP3Аутентификации</name> <synonym> <key>ru</key> - <value>Использовать безопасный вход на сервер входящей почты</value> + <value>Способ POP3 аутентификации</value> </synonym> <type> - <types>Boolean</types> + <types>EnumRef.СпособыPOP3Аутентификации</types> </type> <toolTip> <key>ru</key> - <value>Использовать шифрование учетных данных при аутентификации на сервере</value> + <value>Способ аутентификации на POP3 сервере</value> </toolTip> <minValue xsi:type="core:UndefinedValue"/> <maxValue xsi:type="core:UndefinedValue"/> - <fillValue xsi:type="core:UndefinedValue"/> + <quickChoice>Use</quickChoice> + <createOnInput>DontUse</createOnInput> + <fillValue xsi:type="core:ReferenceValue"> + <value>Enum.СпособыPOP3Аутентификации.EmptyRef</value> + </fillValue> <fullTextSearch>Use</fullTextSearch> <dataHistory>Use</dataHistory> </attributes> - <attributes uuid="7a925960-a579-4b06-90e0-5121dc774024"> - <name>ИспользоватьБезопасныйВходНаСерверИсходящейПочты</name> + <attributes uuid="0e0670d6-d8f7-4728-bd1b-f016fffa0570"> + <name>СпособSMTPАутентификации</name> <synonym> <key>ru</key> - <value>Использовать безопасный вход на сервер исходящей почты</value> + <value>Способ SMTP аутентификации</value> </synonym> <type> - <types>Boolean</types> + <types>EnumRef.СпособыSMTPАутентификации</types> </type> <toolTip> <key>ru</key> - <value>Использовать шифрование учетных данных при аутентификации на сервере</value> + <value>Способ аутентификации на сервере SMTP</value> </toolTip> <minValue xsi:type="core:UndefinedValue"/> <maxValue xsi:type="core:UndefinedValue"/> - <fillValue xsi:type="core:UndefinedValue"/> + <quickChoice>Use</quickChoice> + <createOnInput>DontUse</createOnInput> + <fillValue xsi:type="core:ReferenceValue"> + <value>Enum.СпособыSMTPАутентификации.EmptyRef</value> + </fillValue> <fullTextSearch>Use</fullTextSearch> <dataHistory>Use</dataHistory> </attributes> @@ -625,73 +650,48 @@ <fullTextSearch>Use</fullTextSearch> <dataHistory>Use</dataHistory> </attributes> - <attributes uuid="ff18803b-4c3a-4720-a718-7547f04c6e2f"> - <name>СпособPOP3Аутентификации</name> + <attributes uuid="0b7c4cb7-5126-4b5e-8941-cd56eaef76a0"> + <name>УдалитьПароль</name> <synonym> <key>ru</key> - <value>Способ POP3 аутентификации</value> + <value>(не используется) Пароль</value> </synonym> <type> - <types>EnumRef.СпособыPOP3Аутентификации</types> + <types>String</types> + <stringQualifiers> + <length>100</length> + </stringQualifiers> </type> + <passwordMode>true</passwordMode> <toolTip> <key>ru</key> - <value>Способ аутентификации на POP3 сервере</value> + <value>Пароль для доступа к почте</value> </toolTip> <minValue xsi:type="core:UndefinedValue"/> <maxValue xsi:type="core:UndefinedValue"/> - <quickChoice>Use</quickChoice> - <createOnInput>DontUse</createOnInput> - <fillValue xsi:type="core:ReferenceValue"> - <value>Enum.СпособыPOP3Аутентификации.EmptyRef</value> - </fillValue> - <fullTextSearch>Use</fullTextSearch> + <fillValue xsi:type="core:StringValue"/> <dataHistory>Use</dataHistory> </attributes> - <attributes uuid="0e0670d6-d8f7-4728-bd1b-f016fffa0570"> - <name>СпособSMTPАутентификации</name> + <attributes uuid="144d5498-bb61-4bec-bef3-85a5a4aec3d5"> + <name>УдалитьПарольSMTP</name> <synonym> <key>ru</key> - <value>Способ SMTP аутентификации</value> + <value>(не используется) Пароль SMTP</value> </synonym> <type> - <types>EnumRef.СпособыSMTPАутентификации</types> + <types>String</types> + <stringQualifiers> + <length>100</length> + </stringQualifiers> </type> + <passwordMode>true</passwordMode> <toolTip> <key>ru</key> - <value>Способ аутентификации на сервере SMTP</value> + <value>Имя пользователя для дополнительной аутентификации на SMTP сервере</value> </toolTip> <minValue xsi:type="core:UndefinedValue"/> <maxValue xsi:type="core:UndefinedValue"/> - <quickChoice>Use</quickChoice> - <createOnInput>DontUse</createOnInput> - <fillValue xsi:type="core:ReferenceValue"> - <value>Enum.СпособыSMTPАутентификации.EmptyRef</value> - </fillValue> - <fullTextSearch>Use</fullTextSearch> - <dataHistory>Use</dataHistory> - </attributes> - <attributes uuid="40b08a20-51a3-438b-ba54-466917ea809f"> - <name>SMTPАутентификация</name> - <synonym> - <key>ru</key> - <value>SMTP аутентификация</value> - </synonym> - <type> - <types>EnumRef.ВариантыSMTPАутентификации</types> - </type> - <toolTip> - <key>ru</key> - <value>Применяемые параметры SMTP аутентификации</value> - </toolTip> - <minValue xsi:type="core:UndefinedValue"/> - <maxValue xsi:type="core:UndefinedValue"/> - <quickChoice>Use</quickChoice> - <createOnInput>DontUse</createOnInput> - <fillValue xsi:type="core:ReferenceValue"> - <value>Enum.ВариантыSMTPАутентификации.EmptyRef</value> - </fillValue> - <fullTextSearch>Use</fullTextSearch> + <fillValue xsi:type="core:StringValue"/> <dataHistory>Use</dataHistory> </attributes> <forms uuid="ecaa0af8-549c-4c07-82ff-1c4e02ff15b8"> @@ -716,7 +716,7 @@ <name>ФормаЭлемента</name> <synonym> <key>ru</key> - <value>Редактирование учетной записи электронной почты</value> + <value>Форма элемента</value> </synonym> <help> <pages> @@ -753,12 +753,16 @@ </toolTip> </commands> <commands uuid="e693eac3-f55d-4102-ac6d-b14ef33fb2e7"> - <name>НастройкиСистемнойУчетнойЗаписи</name> + <name>НастройкаСистемнойУчетнойЗаписи</name> <synonym> <key>ru</key> - <value>Настройки системной учетной записи электронной почты</value> + <value>Настройка системной учетной записи</value> </synonym> - <group>NavigationPanelSeeAlso</group> + <group>NavigationPanelOrdinary</group> <representation>Auto</representation> + <toolTip> + <key>ru</key> + <value>Перейти к настройкам системной учетной записи электронной почты</value> + </toolTip> </commands> </mdclass:Catalog> diff --git a/SSL/src/Catalogs/Файлы/Commands/ВсеФайлы/CommandModule.bsl b/SSL/src/Catalogs/Файлы/Commands/ВсеФайлы/CommandModule.bsl index a89f175f3..700e1a372 100644 --- a/SSL/src/Catalogs/Файлы/Commands/ВсеФайлы/CommandModule.bsl +++ b/SSL/src/Catalogs/Файлы/Commands/ВсеФайлы/CommandModule.bsl @@ -1,5 +1,8 @@ +#Область ОбработчикиСобытий &НаКлиенте Процедура ОбработкаКоманды(ПараметрКоманды, ПараметрыВыполненияКоманды) ОткрытьФорму("Справочник.Файлы.ФормаСписка", , ПараметрыВыполненияКоманды.Источник, ПараметрыВыполненияКоманды.Уникальность, ПараметрыВыполненияКоманды.Окно); КонецПроцедуры + +#КонецОбласти \ No newline at end of file diff --git a/SSL/src/Catalogs/Файлы/Commands/РедактируемыеФайлы/CommandModule.bsl b/SSL/src/Catalogs/Файлы/Commands/РедактируемыеФайлы/CommandModule.bsl index a633334a0..9ec32013e 100644 --- a/SSL/src/Catalogs/Файлы/Commands/РедактируемыеФайлы/CommandModule.bsl +++ b/SSL/src/Catalogs/Файлы/Commands/РедактируемыеФайлы/CommandModule.bsl @@ -1,3 +1,5 @@ +#Область ОбработчикиСобытий + &НаКлиенте Процедура ОбработкаКоманды(ПараметрКоманды, ПараметрыВыполненияКоманды) @@ -9,3 +11,5 @@ ПараметрыВыполненияКоманды.Окно); КонецПроцедуры + +#КонецОбласти \ No newline at end of file diff --git a/SSL/src/Catalogs/Файлы/Commands/Файлы/CommandModule.bsl b/SSL/src/Catalogs/Файлы/Commands/Файлы/CommandModule.bsl index af52a5a31..add17adc1 100644 --- a/SSL/src/Catalogs/Файлы/Commands/Файлы/CommandModule.bsl +++ b/SSL/src/Catalogs/Файлы/Commands/Файлы/CommandModule.bsl @@ -1,3 +1,4 @@ +#Область ОбработчикиСобытий &НаКлиенте Процедура ОбработкаКоманды(ПараметрКоманды, ПараметрыВыполненияКоманды) @@ -9,3 +10,5 @@ ПараметрыВыполненияКоманды.Окно); КонецПроцедуры + +#КонецОбласти \ No newline at end of file diff --git a/SSL/src/Catalogs/Файлы/Forms/ВопросПриВыходеИзТекстовогоРедактора/Form.form b/SSL/src/Catalogs/Файлы/Forms/ВопросПриВыходеИзТекстовогоРедактора/Form.form index b703f1d9e..ce209f7e0 100644 --- a/SSL/src/Catalogs/Файлы/Forms/ВопросПриВыходеИзТекстовогоРедактора/Form.form +++ b/SSL/src/Catalogs/Файлы/Forms/ВопросПриВыходеИзТекстовогоРедактора/Form.form @@ -316,7 +316,6 @@ <autoFillCheck>true</autoFillCheck> <allowFormCustomize>true</allowFormCustomize> <enabled>true</enabled> - <verticalScroll>UseIfNecessary</verticalScroll> <showTitle>auto</showTitle> <showCloseButton>true</showCloseButton> <attributes> @@ -356,7 +355,7 @@ <name>СохранитьИЗакончитьРедактирование</name> </handler> </action> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <formCommands> @@ -378,7 +377,7 @@ <name>СохранитьИзменения</name> </handler> </action> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <formCommands> @@ -400,7 +399,7 @@ <name>НеСохранять</name> </handler> </action> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <formCommands> @@ -422,7 +421,7 @@ <name>Вернуться</name> </handler> </action> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <commandInterface> diff --git a/SSL/src/Catalogs/Файлы/Forms/ВопросПриИмпортеФайлов/Form.form b/SSL/src/Catalogs/Файлы/Forms/ВопросПриИмпортеФайлов/Form.form index 7d7cb88ec..dfb1cb594 100644 --- a/SSL/src/Catalogs/Файлы/Forms/ВопросПриИмпортеФайлов/Form.form +++ b/SSL/src/Catalogs/Файлы/Forms/ВопросПриИмпортеФайлов/Form.form @@ -341,7 +341,6 @@ <autoFillCheck>true</autoFillCheck> <allowFormCustomize>true</allowFormCustomize> <enabled>true</enabled> - <verticalScroll>UseIfNecessary</verticalScroll> <showTitle>auto</showTitle> <showCloseButton>true</showCloseButton> <attributes> diff --git a/SSL/src/Catalogs/Файлы/Forms/ВопросПриИмпортеФайлов/Module.bsl b/SSL/src/Catalogs/Файлы/Forms/ВопросПриИмпортеФайлов/Module.bsl index 5f0ce644b..56bc2e285 100644 --- a/SSL/src/Catalogs/Файлы/Forms/ВопросПриИмпортеФайлов/Module.bsl +++ b/SSL/src/Catalogs/Файлы/Forms/ВопросПриИмпортеФайлов/Module.bsl @@ -12,12 +12,11 @@ МаксимальныйРазмерФайла = Цел(ФайловыеФункции.МаксимальныйРазмерФайла() / (1024 * 1024)); - Сообщение = - СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + Сообщение = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Некоторые файлы превышают предельный размер (%1 Мб) и не будут добавлены в хранилище. |Продолжить импорт?'"), Строка(МаксимальныйРазмерФайла) ); - + Если Параметры.Свойство("Заголовок") Тогда Заголовок = Параметры.Заголовок; КонецЕсли; diff --git a/SSL/src/Catalogs/Файлы/Forms/ВыборКодировки/Form.form b/SSL/src/Catalogs/Файлы/Forms/ВыборКодировки/Form.form index 2ee08ebad..800c45abb 100644 --- a/SSL/src/Catalogs/Файлы/Forms/ВыборКодировки/Form.form +++ b/SSL/src/Catalogs/Файлы/Forms/ВыборКодировки/Form.form @@ -262,7 +262,6 @@ <group>Vertical</group> <autoFillCheck>true</autoFillCheck> <enabled>true</enabled> - <verticalScroll>UseIfNecessary</verticalScroll> <showTitle>auto</showTitle> <showCloseButton>true</showCloseButton> <attributes> @@ -339,7 +338,7 @@ <name>ВыбратьКодировку</name> </handler> </action> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <commandInterface> diff --git a/SSL/src/Catalogs/Файлы/Forms/ВыборСохраненияШифрованногоФайла/Form.form b/SSL/src/Catalogs/Файлы/Forms/ВыборСохраненияШифрованногоФайла/Form.form index 5e83f7193..c081ca2eb 100644 --- a/SSL/src/Catalogs/Файлы/Forms/ВыборСохраненияШифрованногоФайла/Form.form +++ b/SSL/src/Catalogs/Файлы/Forms/ВыборСохраненияШифрованногоФайла/Form.form @@ -129,7 +129,6 @@ <group>Vertical</group> <autoFillCheck>true</autoFillCheck> <enabled>true</enabled> - <verticalScroll>UseIfNecessary</verticalScroll> <showTitle>auto</showTitle> <showCloseButton>true</showCloseButton> <attributes> @@ -225,7 +224,7 @@ <name>СохранитьФайл</name> </handler> </action> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <commandInterface> diff --git a/SSL/src/Catalogs/Файлы/Forms/ВыборСохраненияШифрованногоФайла/Module.bsl b/SSL/src/Catalogs/Файлы/Forms/ВыборСохраненияШифрованногоФайла/Module.bsl index 17dc6e615..9dfa8b647 100644 --- a/SSL/src/Catalogs/Файлы/Forms/ВыборСохраненияШифрованногоФайла/Module.bsl +++ b/SSL/src/Catalogs/Файлы/Forms/ВыборСохраненияШифрованногоФайла/Module.bsl @@ -14,8 +14,8 @@ МодульЭлектроннаяПодписьКлиентСервер = ОбщегоНазначения.ОбщийМодуль("ЭлектроннаяПодписьКлиентСервер"); - РасширениеДляЗашифрованныхФайлов = МодульЭлектроннаяПодписьКлиентСервер.ПерсональныеНастройки( - ).РасширениеДляЗашифрованныхФайлов; + РасширениеДляЗашифрованныхФайлов = + МодульЭлектроннаяПодписьКлиентСервер.ПерсональныеНастройки().РасширениеДляЗашифрованныхФайлов; Иначе РасширениеДляЗашифрованныхФайлов = "p7m"; КонецЕсли; diff --git a/SSL/src/Catalogs/Файлы/Forms/ИнформацияФайлНеБылИзменен/Form.form b/SSL/src/Catalogs/Файлы/Forms/ИнформацияФайлНеБылИзменен/Form.form index c0f315922..aa1eeccc2 100644 --- a/SSL/src/Catalogs/Файлы/Forms/ИнформацияФайлНеБылИзменен/Form.form +++ b/SSL/src/Catalogs/Файлы/Forms/ИнформацияФайлНеБылИзменен/Form.form @@ -121,7 +121,6 @@ <autoFillCheck>true</autoFillCheck> <allowFormCustomize>true</allowFormCustomize> <enabled>true</enabled> - <verticalScroll>UseIfNecessary</verticalScroll> <showTitle>auto</showTitle> <showCloseButton>true</showCloseButton> <attributes> @@ -178,7 +177,7 @@ <name>ОК</name> </handler> </action> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <commandInterface> diff --git a/SSL/src/Catalogs/Файлы/Forms/РедактированиеТекстовогоФайла/Form.form b/SSL/src/Catalogs/Файлы/Forms/РедактированиеТекстовогоФайла/Form.form index 51929fefa..052ba2184 100644 --- a/SSL/src/Catalogs/Файлы/Forms/РедактированиеТекстовогоФайла/Form.form +++ b/SSL/src/Catalogs/Файлы/Forms/РедактированиеТекстовогоФайла/Form.form @@ -577,7 +577,7 @@ </handler> </action> <representation>TextPicture</representation> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <formCommands> @@ -603,7 +603,7 @@ </handler> </action> <representation>TextPicture</representation> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <formCommands> @@ -625,7 +625,7 @@ <name>ПоказатьОтличия</name> </handler> </action> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <formCommands> @@ -647,7 +647,7 @@ <name>ВнешнийРедактор</name> </handler> </action> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <formCommands> @@ -674,7 +674,7 @@ </handler> </action> <representation>Text</representation> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <formCommands> @@ -700,7 +700,7 @@ </handler> </action> <representation>Text</representation> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <formCommands> @@ -726,7 +726,7 @@ </handler> </action> <representation>TextPicture</representation> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <formCommands> @@ -752,7 +752,7 @@ </handler> </action> <representation>Text</representation> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <formCommands> @@ -774,7 +774,7 @@ <name>ВыбратьКодировку</name> </handler> </action> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <commandInterface> diff --git a/SSL/src/Catalogs/Файлы/Forms/РедактированиеТекстовогоФайла/Module.bsl b/SSL/src/Catalogs/Файлы/Forms/РедактированиеТекстовогоФайла/Module.bsl index 0af3bba28..d3bb4315c 100644 --- a/SSL/src/Catalogs/Файлы/Forms/РедактированиеТекстовогоФайла/Module.bsl +++ b/SSL/src/Catalogs/Файлы/Forms/РедактированиеТекстовогоФайла/Module.bsl @@ -38,7 +38,7 @@ ДанныеФайла.ПолноеНаименованиеВерсии, ДанныеФайла.Расширение); Если Не РежимРедактирования Тогда - ЗаголовокСтрока = ЗаголовокСтрока + НСтр("ru=' (только просмотр)'"); + ЗаголовокСтрока = ЗаголовокСтрока + " " + НСтр("ru='(только просмотр)'"); КонецЕсли; Заголовок = ЗаголовокСтрока; @@ -137,7 +137,7 @@ ВыборФайла.ПолноеИмяФайла = ИмяСРасширением; Фильтр = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Все файлы (*.%1)|*.%1'"), ДанныеФайла.Расширение, ДанныеФайла.Расширение); + НСтр("ru = 'Все файлы (*.%1)|*.%1'"), ДанныеФайла.Расширение); ВыборФайла.Фильтр = Фильтр; Если ВыборФайла.Выбрать() Тогда @@ -339,7 +339,7 @@ ДанныеФайла.ПолноеНаименованиеВерсии, ДанныеФайла.Расширение); Если Не РежимРедактирования Тогда - ЗаголовокСтрока = ЗаголовокСтрока + НСтр("ru=' (только просмотр)'"); + ЗаголовокСтрока = ЗаголовокСтрока + " " + НСтр("ru='(только просмотр)'"); КонецЕсли; Заголовок = ЗаголовокСтрока; diff --git a/SSL/src/Catalogs/Файлы/Forms/РедактируемыеФайлы/Form.form b/SSL/src/Catalogs/Файлы/Forms/РедактируемыеФайлы/Form.form index 2b1351117..ab4572c89 100644 --- a/SSL/src/Catalogs/Файлы/Forms/РедактируемыеФайлы/Form.form +++ b/SSL/src/Catalogs/Файлы/Forms/РедактируемыеФайлы/Form.form @@ -1327,7 +1327,6 @@ <autoFillCheck>true</autoFillCheck> <allowFormCustomize>true</allowFormCustomize> <enabled>true</enabled> - <verticalScroll>UseIfNecessary</verticalScroll> <showTitle>auto</showTitle> <showCloseButton>true</showCloseButton> <attributes> @@ -1346,12 +1345,6 @@ <edit> <common>true</common> </edit> - <notDefaultUseAlwaysAttributes xsi:type="form:DataPath"> - <segments>Список.Автор</segments> - </notDefaultUseAlwaysAttributes> - <notDefaultUseAlwaysAttributes xsi:type="form:DataPath"> - <segments>Список.АвторТекущейВерсии</segments> - </notDefaultUseAlwaysAttributes> <notDefaultUseAlwaysAttributes xsi:type="form:DataPath"> <segments>Список.Ref</segments> </notDefaultUseAlwaysAttributes> @@ -1448,7 +1441,7 @@ </handler> </action> <representation>Text</representation> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <formCommands> @@ -1474,7 +1467,7 @@ </handler> </action> <representation>TextPicture</representation> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <formCommands> @@ -1500,7 +1493,7 @@ </handler> </action> <representation>TextPicture</representation> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <formCommands> @@ -1525,7 +1518,7 @@ <name>СохранитьИзменения</name> </handler> </action> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <formCommands> @@ -1551,7 +1544,7 @@ </handler> </action> <representation>TextPicture</representation> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <formCommands> @@ -1577,7 +1570,7 @@ </handler> </action> <representation>TextPicture</representation> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <formCommands> @@ -1599,7 +1592,7 @@ <name>ОбновитьИзФайлаНаДиске</name> </handler> </action> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <formCommands> @@ -1621,7 +1614,7 @@ <name>ЗаписатьИЗакрыть</name> </handler> </action> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <formCommands> @@ -1647,7 +1640,7 @@ <name>Обновить</name> </handler> </action> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <commandInterface> diff --git a/SSL/src/Catalogs/Файлы/Forms/РежимСозданияФайлаДляСохранитьКак/Form.form b/SSL/src/Catalogs/Файлы/Forms/РежимСозданияФайлаДляСохранитьКак/Form.form index dfee15eb0..2446d5f19 100644 --- a/SSL/src/Catalogs/Файлы/Forms/РежимСозданияФайлаДляСохранитьКак/Form.form +++ b/SSL/src/Catalogs/Файлы/Forms/РежимСозданияФайлаДляСохранитьКак/Form.form @@ -428,7 +428,6 @@ <group>Vertical</group> <autoFillCheck>true</autoFillCheck> <enabled>true</enabled> - <verticalScroll>UseIfNecessary</verticalScroll> <showTitle>auto</showTitle> <showCloseButton>true</showCloseButton> <attributes> @@ -506,7 +505,7 @@ <name>СохранитьФайл</name> </handler> </action> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <formCommands> @@ -532,7 +531,7 @@ </handler> </action> <representation>Picture</representation> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <commandInterface> diff --git a/SSL/src/Catalogs/Файлы/Forms/СписокЗанятыхСВопросом/Form.form b/SSL/src/Catalogs/Файлы/Forms/СписокЗанятыхСВопросом/Form.form index f7eb369b1..f834dc1e8 100644 --- a/SSL/src/Catalogs/Файлы/Forms/СписокЗанятыхСВопросом/Form.form +++ b/SSL/src/Catalogs/Файлы/Forms/СписокЗанятыхСВопросом/Form.form @@ -841,7 +841,7 @@ <extInfo xsi:type="form:ButtonGroupExtInfo"/> </items> <items xsi:type="form:Button"> - <name>СписокКонтекстноеМенюОбщаяКомандаДополнительныеСведенияПанельНавигации</name> + <name>СписокКонтекстноеМенюОбщаяКомандаДополнительныеСведенияКоманднаяПанель</name> <id>41</id> <visible>true</visible> <enabled>true</enabled> @@ -853,7 +853,7 @@ </dataPath> <skipOnInput>false</skipOnInput> <extendedTooltip> - <name>СписокКонтекстноеМенюОбщаяКомандаДополнительныеСведенияПанельНавигацииРасширеннаяПодсказка</name> + <name>СписокКонтекстноеМенюОбщаяКомандаДополнительныеСведенияКоманднаяПанельРасширеннаяПодсказка</name> <id>88</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> @@ -1151,7 +1151,6 @@ <autoFillCheck>true</autoFillCheck> <allowFormCustomize>true</allowFormCustomize> <enabled>true</enabled> - <verticalScroll>UseIfNecessary</verticalScroll> <showTitle>auto</showTitle> <showCloseButton>true</showCloseButton> <attributes> @@ -1278,7 +1277,7 @@ </handler> </action> <representation>Text</representation> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <formCommands> @@ -1304,7 +1303,7 @@ </handler> </action> <representation>TextPicture</representation> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <formCommands> @@ -1330,7 +1329,7 @@ </handler> </action> <representation>TextPicture</representation> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <formCommands> @@ -1355,7 +1354,7 @@ <name>СохранитьИзменения</name> </handler> </action> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <formCommands> @@ -1378,7 +1377,7 @@ </handler> </action> <representation>TextPicture</representation> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <formCommands> @@ -1404,7 +1403,7 @@ </handler> </action> <representation>TextPicture</representation> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <formCommands> @@ -1426,7 +1425,7 @@ <name>ОбновитьИзФайлаНаДиске</name> </handler> </action> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <formCommands> @@ -1448,7 +1447,7 @@ <name>ЗаписатьИЗакрыть</name> </handler> </action> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <parameters> diff --git a/SSL/src/Catalogs/Файлы/Forms/ФайлСуществует/Form.form b/SSL/src/Catalogs/Файлы/Forms/ФайлСуществует/Form.form index e1756c186..b0108f879 100644 --- a/SSL/src/Catalogs/Файлы/Forms/ФайлСуществует/Form.form +++ b/SSL/src/Catalogs/Файлы/Forms/ФайлСуществует/Form.form @@ -209,7 +209,6 @@ <autoUrl>true</autoUrl> <group>Vertical</group> <enabled>true</enabled> - <verticalScroll>UseIfNecessary</verticalScroll> <showTitle>auto</showTitle> <showCloseButton>true</showCloseButton> <attributes> @@ -266,7 +265,7 @@ <name>ПерезаписатьВыполнить</name> </handler> </action> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <formCommands> @@ -288,7 +287,7 @@ <name>ПропуститьВыполнить</name> </handler> </action> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <formCommands> @@ -310,7 +309,7 @@ <name>ПрерватьВыполнить</name> </handler> </action> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <commandInterface> diff --git a/SSL/src/Catalogs/Файлы/Forms/Файлы/Form.form b/SSL/src/Catalogs/Файлы/Forms/Файлы/Form.form index d1e772c84..5edc095ad 100644 --- a/SSL/src/Catalogs/Файлы/Forms/Файлы/Form.form +++ b/SSL/src/Catalogs/Файлы/Forms/Файлы/Form.form @@ -380,6 +380,89 @@ <placementArea>UserCmds</placementArea> <representationInContextMenu>Auto</representationInContextMenu> </items> + <items xsi:type="form:Button"> + <name>Предпросмотр</name> + <id>388</id> + <visible>true</visible> + <enabled>true</enabled> + <userVisible> + <common>true</common> + </userVisible> + <extendedTooltip> + <name>ПредпросмотрРасширеннаяПодсказка</name> + <id>389</id> + <type>Label</type> + <autoMaxWidth>true</autoMaxWidth> + <autoMaxHeight>true</autoMaxHeight> + <extInfo xsi:type="form:LabelDecorationExtInfo"> + <horizontalAlign>Left</horizontalAlign> + </extInfo> + </extendedTooltip> + <commandName>Form.Command.Предпросмотр</commandName> + <buttonImportance>Normal</buttonImportance> + <representation>Auto</representation> + <autoMaxWidth>true</autoMaxWidth> + <autoMaxHeight>true</autoMaxHeight> + <placementArea>UserCmds</placementArea> + <representationInContextMenu>Auto</representationInContextMenu> + <locationInCommandBar>InAdditionalSubmenu</locationInCommandBar> + </items> + <items xsi:type="form:Button"> + <name>Печать</name> + <id>383</id> + <title> + <key>ru</key> + <value>Печать</value> + + true + true + + true + + + ПечатьРасширеннаяПодсказка + 384 + Label + true + true + + Left + + + Form.Command.Печать + Normal + Auto + true + true + UserCmds + Auto + + + Отправить + 379 + true + true + + true + + + ОтправитьРасширеннаяПодсказка + 380 + Label + true + true + + Left + + + Form.Command.Отправить + Normal + Auto + true + true + UserCmds + Auto + true true @@ -1302,6 +1385,36 @@ UserCmds Auto + + ГруппаКомандФормы + 381 + true + true + + true + + + <key>ru</key> + <value>Группа команд формы</value> + + + ru + Группа команд формы + + + ГруппаКомандФормыРасширеннаяПодсказка + 382 + Label + true + true + + Left + + + + Form + + true true @@ -1447,6 +1560,10 @@ Drag ПапкиПеретаскивание + + OnChange + ПапкиПриИзменении + ПапкиСтрокаПоиска 359 @@ -2902,6 +3019,58 @@ UserCmds Auto + + СписокКонтекстноеМенюПечать + 390 + true + true + + true + + + СписокКонтекстноеМенюПечатьРасширеннаяПодсказка + 391 + Label + true + true + + Left + + + Form.Command.Печать + Normal + Auto + true + true + UserCmds + Auto + + + СписокКонтекстноеМенюОтправить + 392 + true + true + + true + + + СписокКонтекстноеМенюОтправитьРасширеннаяПодсказка + 393 + Label + true + true + + Left + + + Form.Command.Отправить + Normal + Auto + true + true + UserCmds + Auto + true true @@ -3450,6 +3619,53 @@ ГруппаПользовательскихНастроек + + АдресДанныхФайла + 385 + true + + true + + + АдресДанныхФайла + + None + + АдресДанныхФайлаРасширеннаяПодсказка + 387 + Label + true + true + + Left + + + + АдресДанныхФайлаКонтекстноеМеню + 386 + true + + PictureField + Enter + true + Left + true + + true + true + true + true + AutoSize + + ru + Выберите файл для предварительного просмотра + + + + 1 + + + true true @@ -3627,7 +3843,6 @@ true true true - UseIfNecessary auto true @@ -3660,6 +3875,9 @@ Список.ПодписанЭП + + Список.Расширение + Список.Редактирует @@ -3679,6 +3897,7 @@ ВЫРАЗИТЬ(Файлы.ТекущаяВерсияРазмер / 1024 КАК ЧИСЛО(10, 0)) КАК ТекущаяВерсияРазмер, Файлы.Автор, Файлы.ТекущаяВерсияДатаСоздания, + Файлы.ТекущаяВерсияРасширение КАК Расширение, ВЫБОР КОГДА Файлы.ПометкаУдаления = ИСТИНА ТОГДА Файлы.ИндексКартинки + 1 @@ -3931,6 +4150,91 @@ true + + АдресДанныхФайла + + <key>ru</key> + <value>Адрес данных файла</value> + + 12 + + String + + + + true + + + true + + + + Предпросмотр + + <key>ru</key> + <value>Предпросмотр</value> + + 13 + + Boolean + + + true + + + true + + + + РасширенияПоддерживающиеПредпросмотр + + <key>ru</key> + <value>Расширения, поддерживающие предпросмотр</value> + + 14 + + ValueList + + + true + + + true + + + + + + + ТипСправочникаСФайлами + + <key>ru</key> + <value>Тип справочника с файлами</value> + + 15 + + + true + + + true + + + + ПараметрыОтправки + + <key>ru</key> + <value>Параметры отправки</value> + + 16 + + + true + + + true + + ИмпортФайлов @@ -3950,7 +4254,7 @@ <name>ИмпортФайловВыполнить</name> </handler> </action> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <formCommands> @@ -3975,7 +4279,7 @@ <name>ЭкспортПапкиВыполнить</name> </handler> </action> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <formCommands> @@ -3998,7 +4302,7 @@ </handler> </action> <representation>Picture</representation> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <formCommands> @@ -4020,7 +4324,7 @@ <name>СоздатьФайлВыполнить</name> </handler> </action> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <formCommands> @@ -4045,7 +4349,7 @@ <name>СоздатьПапкуВыполнить</name> </handler> </action> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <formCommands> @@ -4071,7 +4375,7 @@ </handler> </action> <representation>TextPicture</representation> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <formCommands> @@ -4097,7 +4401,7 @@ </handler> </action> <representation>TextPicture</representation> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <formCommands> @@ -4123,7 +4427,7 @@ </handler> </action> <representation>TextPicture</representation> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <formCommands> @@ -4146,7 +4450,7 @@ </handler> </action> <representation>TextPicture</representation> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <formCommands> @@ -4172,7 +4476,7 @@ </handler> </action> <representation>TextPicture</representation> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <formCommands> @@ -4199,7 +4503,7 @@ </handler> </action> <representation>TextPicture</representation> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <formCommands> @@ -4225,7 +4529,7 @@ </handler> </action> <representation>TextPicture</representation> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <formCommands> @@ -4251,7 +4555,7 @@ </handler> </action> <representation>TextPicture</representation> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <formCommands> @@ -4273,7 +4577,7 @@ <name>ИмпортПапки</name> </handler> </action> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <formCommands> @@ -4295,7 +4599,7 @@ <name>ПеренестиВПапку</name> </handler> </action> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <formCommands> @@ -4321,7 +4625,7 @@ </handler> </action> <representation>Text</representation> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <formCommands> @@ -4343,7 +4647,7 @@ <name>ИспользоватьИерархию</name> </handler> </action> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <formCommands> @@ -4368,7 +4672,7 @@ <name>Подписать</name> </handler> </action> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <formCommands> @@ -4393,7 +4697,7 @@ <name>Зашифровать</name> </handler> </action> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <formCommands> @@ -4415,7 +4719,7 @@ <name>Расшифровать</name> </handler> </action> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <formCommands> @@ -4437,7 +4741,7 @@ <name>ДобавитьПодписьИзФайла</name> </handler> </action> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <formCommands> @@ -4459,7 +4763,7 @@ <name>СохранитьВместеСПодписью</name> </handler> </action> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <formCommands> @@ -4485,7 +4789,7 @@ <name>Обновить</name> </handler> </action> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <formCommands> @@ -4507,7 +4811,7 @@ <name>СоздатьФайлИзШаблонаВыполнить</name> </handler> </action> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <formCommands> @@ -4529,7 +4833,73 @@ <name>СоздатьФайлСоСканераВыполнить</name> </handler> </action> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> + <selectedRowsUse>Auto</selectedRowsUse> + </formCommands> + <formCommands> + <name>Отправить</name> + <title> + <key>ru</key> + <value>Отправить</value> + + 26 + + ru + Отправить + + + true + + + + Отправить + + + DontUse + Auto + + + Печать + + <key>ru</key> + <value>Печать</value> + + 27 + + ru + Печать + + + true + + + + Печать + + + DontUse + Auto + + + Предпросмотр + + <key>ru</key> + <value>Предпросмотр</value> + + 28 + + ru + Предпросмотр + + + true + + + + Предпросмотр + + + DontUse Auto @@ -4537,8 +4907,6 @@ 0 - FormCommandBarImportant - 0 diff --git a/SSL/src/Catalogs/Файлы/Forms/Файлы/Help/ru.html b/SSL/src/Catalogs/Файлы/Forms/Файлы/Help/ru.html index 584a0d18a..963a812bd 100644 --- a/SSL/src/Catalogs/Файлы/Forms/Файлы/Help/ru.html +++ b/SSL/src/Catalogs/Файлы/Forms/Файлы/Help/ru.html @@ -35,11 +35,11 @@
      Программой будет автоматически создана и открыта Карточка файла.
  • Со сканера 
    • -
      Вариант создания файла Со сканера становится доступным, если к компьютеру подключен сканер (более подробно см. документацию к сканеру) и на компьютере подключена компонента для работы со сканером. Также необходимо настроить сканирование.
      +
      Вариант создания файла Со сканера становится доступным, если к компьютеру подключен сканер (более подробно см. документацию к сканеру) и на компьютере подключена компонента для работы со сканером. Также необходимо настроить сканирование.
    • Если все условия соблюдены и настройки выполнены, можно получить файл со сканера.
    • -
      Для этого необходимо  следовать инструкциям Помощника сканирования.
      +
      Для этого необходимо  следовать инструкциям Помощника сканирования.
    • После того как документ отсканирован, выполните команду Принять, после этого файлу автоматически присваивается код и создается карточка файла, которая выводится на экран. В поле Наименование также автоматически проставляется код. Отредактируйте нужные поля, нажмите Записать и закрыть, для того чтобы сохранить карточку файла.
  • Шаблоны файлов

    • Программа поставляется с предопределенной папкой Шаблоны файлов. В папке можно разместить файлы, которые будут использоваться при создании новых файлов в качестве шаблона. Например, в эту папку можно поместить файл-заготовку с текстом договора и в дальнейшем использовать его при создании договоров для конкретных контрагентов. diff --git a/SSL/src/Catalogs/Файлы/Forms/Файлы/Module.bsl b/SSL/src/Catalogs/Файлы/Forms/Файлы/Module.bsl index 319288513..99c4ec5bf 100644 --- a/SSL/src/Catalogs/Файлы/Forms/Файлы/Module.bsl +++ b/SSL/src/Catalogs/Файлы/Forms/Файлы/Module.bsl @@ -11,7 +11,7 @@ Возврат; КонецЕсли; - Если Параметры.Свойство("Папка") = Истина И Параметры.Папка <> Неопределено Тогда + Если Параметры.Свойство("Папка") И Параметры.Папка <> Неопределено Тогда ПапкаПриОткрытии = Параметры.Папка; Иначе ПапкаПриОткрытии = ОбщегоНазначения.ХранилищеНастроекДанныхФормЗагрузить("Файлы", "ТекущаяПапка"); @@ -24,6 +24,12 @@ ПапкаПриОткрытии = Справочники.ПапкиФайлов.Шаблоны; КонецЕсли; + Если Параметры.Свойство("ПараметрыОтправки") Тогда + ПараметрыОтправки = Параметры.ПараметрыОтправки; + Иначе + ПараметрыОтправки = ФайловыеФункцииСлужебный.ПодготовитьСтруктуруПараметровОтправки(); + КонецЕсли; + Элементы.Папки.ТекущаяСтрока = ПапкаПриОткрытии; Список.Параметры.УстановитьЗначениеПараметра( @@ -48,12 +54,26 @@ Элементы.ФормаИзменить82.Видимость = Истина; КонецЕсли; + ИспользоватьПредпросмотр = ОбщегоНазначения.ХранилищеОбщихНастроекЗагрузить( + "Файлы", + "Предпросмотр"); + + Если ИспользоватьПредпросмотр <> Неопределено Тогда + Предпросмотр = ИспользоватьПредпросмотр; + Элементы.АдресДанныхФайла.Видимость = ИспользоватьПредпросмотр; + Элементы.Предпросмотр.Пометка = ИспользоватьПредпросмотр; + КонецЕсли; + + РасширенияПоддерживающиеПредпросмотр = ФайловыеФункцииСлужебный.СписокРасширенийДляПредпросмотра(); + КонецПроцедуры &НаКлиенте Процедура ПриОткрытии(Отказ) - Элементы.ФормаСоздатьСоСканера.Видимость = РаботаСФайламиСлужебныйКлиент.ДоступнаКомандаСканировать(); + УстановитьДоступностьФайловыхКоманд(); + + Элементы.ФормаСоздатьСоСканера.Видимость = ФайловыеФункцииСлужебныйКлиент.ДоступнаКомандаСканировать(); КонецПроцедуры @@ -216,7 +236,7 @@ Если Копирование Тогда РаботаСФайламиКлиент.СкопироватьФайл(ВладелецФайла, ФайлОснование); Иначе - РаботаСФайламиСлужебныйКлиент.ДобавитьФайл(Неопределено, ВладелецФайла, ЭтотОбъект); + РаботаСФайламиСлужебныйКлиент.ДобавитьФайл(Неопределено, ВладелецФайла, ЭтотОбъект, , Истина); КонецЕсли; КонецПроцедуры @@ -237,6 +257,21 @@ УстановитьДоступностьФайловыхКоманд(); + Если НЕ ДействиеРазрешено() Тогда + Возврат; + КонецЕсли; + + ТекущиеДанные = Элементы.Список.ТекущиеДанные; + + Если РасширенияПоддерживающиеПредпросмотр.НайтиПоЗначению(ТекущиеДанные.Расширение) <> Неопределено Тогда + ДанныеФайла = ДанныеФайла(ТекущиеДанные.Ссылка, УникальныйИдентификатор); + АдресДанныхФайла = ДанныеФайла.НавигационнаяСсылкаТекущейВерсии; + Иначе + ТекстНевыбраннойКартинки = НСтр("ru = 'Нет данных для предварительного просмотра'"); + АдресДанныхФайла = Неопределено; + Элементы.АдресДанныхФайла.ТекстНевыбраннойКартинки = ТекстНевыбраннойКартинки; + КонецЕсли; + КонецПроцедуры #КонецОбласти @@ -261,6 +296,11 @@ ПеретаскиваниеВПапку(Строка, ПараметрыПеретаскивания.Значение, ПараметрыПеретаскивания.Действие); КонецПроцедуры +&НаКлиенте +Процедура ПапкиПриИзменении(Элемент) + Элементы.Список.Обновить(); +КонецПроцедуры + #КонецОбласти #Область ОбработчикиКомандФормы @@ -482,7 +522,7 @@ ПараметрыДобавления.Вставить("ОбработчикРезультата", Неопределено); ПараметрыДобавления.Вставить("ВладелецФайла", Элементы.Папки.ТекущаяСтрока); ПараметрыДобавления.Вставить("ФормаВладелец", ЭтотОбъект); - ПараметрыДобавления.Вставить("НеОткрыватьКарточкуПослеСозданияИзФайла", Неопределено); + ПараметрыДобавления.Вставить("НеОткрыватьКарточкуПослеСозданияИзФайла", Истина); Если ФайловыеФункцииСлужебныйКлиент.РасширениеРаботыСФайламиПодключено() Тогда РаботаСФайламиСлужебныйКлиент.ДобавитьИзФайловойСистемыСРасширением(ПараметрыДобавления); Иначе @@ -498,7 +538,7 @@ ПараметрыДобавления.Вставить("ОбработчикРезультата", Неопределено); ПараметрыДобавления.Вставить("ВладелецФайла", Элементы.Папки.ТекущаяСтрока); ПараметрыДобавления.Вставить("ФормаВладелец", ЭтотОбъект); - ПараметрыДобавления.Вставить("НеОткрыватьКарточкуПослеСозданияИзФайла", Неопределено); + ПараметрыДобавления.Вставить("НеОткрыватьКарточкуПослеСозданияИзФайла", Истина); РаботаСФайламиСлужебныйКлиент.ДобавитьНаОсновеШаблона(ПараметрыДобавления); КонецПроцедуры @@ -510,8 +550,9 @@ ПараметрыДобавления.Вставить("ОбработчикРезультата", Неопределено); ПараметрыДобавления.Вставить("ВладелецФайла", Элементы.Папки.ТекущаяСтрока); ПараметрыДобавления.Вставить("ФормаВладелец", ЭтотОбъект); - ПараметрыДобавления.Вставить("НеОткрыватьКарточкуПослеСозданияИзФайла", Неопределено); - РаботаСФайламиСлужебныйКлиент.ДобавитьСоСканера(ПараметрыДобавления); + ПараметрыДобавления.Вставить("НеОткрыватьКарточкуПослеСозданияИзФайла", Истина); + ПараметрыДобавления.Вставить("ЭтоФайл", Истина); + ФайловыеФункцииСлужебныйКлиент.ДобавитьСоСканера(ПараметрыДобавления); КонецПроцедуры @@ -804,6 +845,65 @@ КонецПроцедуры +&НаКлиенте +Процедура Отправить(Команда) + + ФайловыеФункцииСлужебныйКлиент.ОтправитьФайлыПоПочте( + Элементы.Список.ВыделенныеСтроки, УникальныйИдентификатор, ПараметрыОтправки, Истина); + +КонецПроцедуры + +&НаКлиенте +Процедура Печать(Команда) + + Если Не ФайловыеКомандыДоступны() Тогда + Возврат; + КонецЕсли; + + #Если ВебКлиент Тогда + ПоказатьПредупреждение(, НСтр("ru = 'В Веб-клиенте печать файлов не поддерживается.'")); + Возврат; + #КонецЕсли + + СистемнаяИнфо = Новый СистемнаяИнформация; + Если СистемнаяИнфо.ТипПлатформы <> ТипПлатформы.Windows_x86 + И СистемнаяИнфо.ТипПлатформы <> ТипПлатформы.Windows_x86_64 Тогда + ПоказатьПредупреждение(, НСтр("ru = 'Печать файлов возможна только в Windows.'")); + Возврат; + КонецЕсли; + + ВыделенныеСтроки = Элементы.Список.ВыделенныеСтроки; + Если ВыделенныеСтроки.Количество() > 1 Тогда + ДанныеФайлов = РаботаСФайламиСлужебныйВызовСервера.ДанныеФайловДляОткрытия( + ВыделенныеСтроки, + ЭтаФорма.УникальныйИдентификатор); + + РаботаСФайламиКлиент.НапечататьФайлы(ДанныеФайлов); + Иначе + ДанныеФайла = РаботаСФайламиСлужебныйВызовСервера.ДанныеФайлаДляОткрытия( + Элементы.Список.ТекущаяСтрока, + ЭтаФорма.УникальныйИдентификатор, + Неопределено, + ПредыдущийАдресФайла); + + ДанныеФайлов = Новый Массив; + ДанныеФайлов.Добавить(ДанныеФайла); + + РаботаСФайламиКлиент.НапечататьФайлы(ДанныеФайлов); + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура Предпросмотр(Команда) + + Предпросмотр = Не Предпросмотр; + Элементы.Предпросмотр.Пометка = Предпросмотр; + УстановитьВидимостьПредпросмотра(Предпросмотр); + СохранитьВариантПредпросмотра("Файлы", Предпросмотр); + +КонецПроцедуры + #КонецОбласти #Область СлужебныеПроцедурыИФункции @@ -830,7 +930,7 @@ ПараметрыДобавления.Вставить("ВладелецФайла", ПапкаДляДобавления); ПараметрыДобавления.Вставить("ФормаВладелец", ЭтотОбъект); ПараметрыДобавления.Вставить("ИмяСоздаваемогоФайла", Неопределено); - ПараметрыДобавления.Вставить("НеОткрыватьКарточкуПослеСозданияИзФайла", Неопределено); + ПараметрыДобавления.Вставить("НеОткрыватьКарточкуПослеСозданияИзФайла", Истина); РаботаСФайламиСлужебныйКлиент.ДобавитьИзФайловойСистемыСРасширением(ПараметрыДобавления); Иначе МассивИменФайлов = Новый Массив; @@ -1150,7 +1250,7 @@ ТекущиеДанные = Элементы.Список.ТекущиеДанные; Если ТекущиеДанные <> Неопределено - И ТипЗнч(Элементы.Список.ТекущаяСтрока) <> Тип("СтрокаГруппировкиДинамическогоСписка") Тогда + И ТипЗнч(Элементы.Список.ТекущаяСтрока) <> Тип("СтрокаГруппировкиДинамическогоСписка") Тогда УстановитьДоступностьКоманд( ТекущиеДанные.РедактируетТекущийПользователь, @@ -1211,6 +1311,12 @@ Элементы.ФормаОткрыть.Доступность = Ложь; Элементы.СписокКонтекстноеМенюОткрыть.Доступность = Ложь; + Элементы.Печать.Доступность = Ложь; + Элементы.СписокКонтекстноеМенюПечать.Доступность = Ложь; + + Элементы.Отправить.Доступность = Ложь; + Элементы.СписокКонтекстноеМенюОтправить.Доступность = Ложь; + КонецПроцедуры &НаКлиенте @@ -1263,6 +1369,12 @@ Элементы.ФормаОткрыть.Доступность = Истина; Элементы.СписокКонтекстноеМенюОткрыть.Доступность = Истина; + Элементы.Печать.Доступность = Истина; + Элементы.СписокКонтекстноеМенюПечать.Доступность = Истина; + + Элементы.Отправить.Доступность = Истина; + Элементы.СписокКонтекстноеМенюОтправить.Доступность = Истина; + КонецПроцедуры &НаСервере @@ -1391,4 +1503,36 @@ КонецПроцедуры +&НаСервереБезКонтекста +Процедура СохранитьВариантПредпросмотра(ТипСправочникаСФайлами, Предпросмотр) + ОбщегоНазначения.ХранилищеОбщихНастроекСохранить(ТипСправочникаСФайлами, "Предпросмотр", Предпросмотр); +КонецПроцедуры + +&НаКлиенте +Процедура УстановитьВидимостьПредпросмотра(ИспользоватьПредпросмотр) + + Элементы.АдресДанныхФайла.Видимость = ИспользоватьПредпросмотр; + Элементы.Предпросмотр.Пометка = ИспользоватьПредпросмотр; + +КонецПроцедуры + +&НаКлиенте +Функция ДействиеРазрешено() + + ДействиеРазрешено = Истина; + Если Элементы.Список.ТекущиеДанные = Неопределено Тогда + ДействиеРазрешено = Ложь; + КонецЕсли; + + Возврат ДействиеРазрешено; + +КонецФункции + +&НаСервереБезКонтекста +Функция ДанныеФайла(Знач ПрисоединенныйФайл, Знач ИдентификаторФормы = Неопределено) + + Возврат РаботаСФайламиСлужебныйВызовСервера.ДанныеФайлаДляОткрытия(ПрисоединенныйФайл, ИдентификаторФормы); + +КонецФункции + #КонецОбласти diff --git a/SSL/src/Catalogs/Файлы/Forms/ФайлыВОсновномРабочемКаталоге/Form.form b/SSL/src/Catalogs/Файлы/Forms/ФайлыВОсновномРабочемКаталоге/Form.form index 3ffb4b2b4..d616dbf45 100644 --- a/SSL/src/Catalogs/Файлы/Forms/ФайлыВОсновномРабочемКаталоге/Form.form +++ b/SSL/src/Catalogs/Файлы/Forms/ФайлыВОсновномРабочемКаталоге/Form.form @@ -1034,7 +1034,6 @@ true true true - UseIfNecessary auto true @@ -1239,7 +1238,7 @@ TextPicture - Auto + DontUse Auto @@ -1265,7 +1264,7 @@ TextPicture - Auto + DontUse Auto @@ -1287,7 +1286,7 @@ ОткрытьКаталогФайлаВыполнить - Auto + DontUse Auto @@ -1313,7 +1312,7 @@ TextPicture - Auto + DontUse Auto @@ -1338,7 +1337,7 @@ ОткрытьКарточку - Auto + DontUse Auto diff --git a/SSL/src/Catalogs/Файлы/Forms/ФормаВозвратаФайла/Form.form b/SSL/src/Catalogs/Файлы/Forms/ФормаВозвратаФайла/Form.form index 74c53a677..349826cbf 100644 --- a/SSL/src/Catalogs/Файлы/Forms/ФормаВозвратаФайла/Form.form +++ b/SSL/src/Catalogs/Файлы/Forms/ФормаВозвратаФайла/Form.form @@ -282,7 +282,6 @@ true true true - UseIfNecessary auto true @@ -356,7 +355,7 @@ Сохранить - Auto + DontUse Auto @@ -378,7 +377,7 @@ Отмена - Auto + DontUse Auto diff --git a/SSL/src/Catalogs/Файлы/Forms/ФормаВопроса/Form.form b/SSL/src/Catalogs/Файлы/Forms/ФормаВопроса/Form.form index 5b8085fcc..b985f63dc 100644 --- a/SSL/src/Catalogs/Файлы/Forms/ФормаВопроса/Form.form +++ b/SSL/src/Catalogs/Файлы/Forms/ФормаВопроса/Form.form @@ -390,7 +390,6 @@ true true true - UseIfNecessary auto true diff --git a/SSL/src/Catalogs/Файлы/Forms/ФормаВопросаЗакончитьРедактирование/Form.form b/SSL/src/Catalogs/Файлы/Forms/ФормаВопросаЗакончитьРедактирование/Form.form index 0bacb4281..d32288405 100644 --- a/SSL/src/Catalogs/Файлы/Forms/ФормаВопросаЗакончитьРедактирование/Form.form +++ b/SSL/src/Catalogs/Файлы/Forms/ФормаВопросаЗакончитьРедактирование/Form.form @@ -145,7 +145,6 @@ Vertical true true - UseIfNecessary auto true @@ -202,7 +201,7 @@ Да - Auto + DontUse Auto @@ -224,7 +223,7 @@ Нет - Auto + DontUse Auto diff --git a/SSL/src/Catalogs/Файлы/Forms/ФормаВыбора/Form.form b/SSL/src/Catalogs/Файлы/Forms/ФормаВыбора/Form.form index cf2505699..aec08fbfe 100644 --- a/SSL/src/Catalogs/Файлы/Forms/ФормаВыбора/Form.form +++ b/SSL/src/Catalogs/Файлы/Forms/ФормаВыбора/Form.form @@ -1199,7 +1199,6 @@ true true true - UseIfNecessary auto true @@ -1330,7 +1329,7 @@ Picture - Auto + DontUse Auto diff --git a/SSL/src/Catalogs/Файлы/Forms/ФормаВыбора/Help/ru.html b/SSL/src/Catalogs/Файлы/Forms/ФормаВыбора/Help/ru.html index 469b4dd5b..c5622d5c8 100644 --- a/SSL/src/Catalogs/Файлы/Forms/ФормаВыбора/Help/ru.html +++ b/SSL/src/Catalogs/Файлы/Forms/ФормаВыбора/Help/ru.html @@ -16,7 +16,7 @@

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

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

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

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

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

    См. также:

    diff --git a/SSL/src/Catalogs/Файлы/Forms/ФормаВыбораРежимаОткрытия/Form.form b/SSL/src/Catalogs/Файлы/Forms/ФормаВыбораРежимаОткрытия/Form.form index 4abdc7b93..24f585495 100644 --- a/SSL/src/Catalogs/Файлы/Forms/ФормаВыбораРежимаОткрытия/Form.form +++ b/SSL/src/Catalogs/Файлы/Forms/ФормаВыбораРежимаОткрытия/Form.form @@ -337,7 +337,6 @@ true true true - UseIfNecessary auto true @@ -396,7 +395,7 @@ ОткрытьФайл - Auto + DontUse Auto @@ -418,7 +417,7 @@ Отмена - Auto + DontUse Auto diff --git a/SSL/src/Catalogs/Файлы/Forms/ФормаГруповаяОперацияНаПапке/Form.form b/SSL/src/Catalogs/Файлы/Forms/ФормаГрупповаяОперацияНаПапке/Form.form similarity index 99% rename from SSL/src/Catalogs/Файлы/Forms/ФормаГруповаяОперацияНаПапке/Form.form rename to SSL/src/Catalogs/Файлы/Forms/ФормаГрупповаяОперацияНаПапке/Form.form index f256101ff..5d99086f7 100644 --- a/SSL/src/Catalogs/Файлы/Forms/ФормаГруповаяОперацияНаПапке/Form.form +++ b/SSL/src/Catalogs/Файлы/Forms/ФормаГрупповаяОперацияНаПапке/Form.form @@ -144,7 +144,6 @@ Vertical true true - UseIfNecessary auto true diff --git a/SSL/src/Catalogs/Файлы/Forms/ФормаГруповаяОперацияНаПапке/Help/ru.html b/SSL/src/Catalogs/Файлы/Forms/ФормаГрупповаяОперацияНаПапке/Help/ru.html similarity index 100% rename from SSL/src/Catalogs/Файлы/Forms/ФормаГруповаяОперацияНаПапке/Help/ru.html rename to SSL/src/Catalogs/Файлы/Forms/ФормаГрупповаяОперацияНаПапке/Help/ru.html diff --git a/SSL/src/Catalogs/Файлы/Forms/ФормаГруповаяОперацияНаПапке/Module.bsl b/SSL/src/Catalogs/Файлы/Forms/ФормаГрупповаяОперацияНаПапке/Module.bsl similarity index 100% rename from SSL/src/Catalogs/Файлы/Forms/ФормаГруповаяОперацияНаПапке/Module.bsl rename to SSL/src/Catalogs/Файлы/Forms/ФормаГрупповаяОперацияНаПапке/Module.bsl diff --git a/SSL/src/Catalogs/Файлы/Forms/ФормаИмпортаПапки/Form.form b/SSL/src/Catalogs/Файлы/Forms/ФормаИмпортаПапки/Form.form index 2044f00b9..c74fa4f0b 100644 --- a/SSL/src/Catalogs/Файлы/Forms/ФормаИмпортаПапки/Form.form +++ b/SSL/src/Catalogs/Файлы/Forms/ФормаИмпортаПапки/Form.form @@ -492,7 +492,6 @@ Vertical true true - UseIfNecessary auto true @@ -670,7 +669,7 @@ ИмпортВыполнить - Auto + DontUse Auto @@ -692,7 +691,7 @@ ВыбратьКодировку - Auto + DontUse Auto diff --git a/SSL/src/Catalogs/Файлы/Forms/ФормаИмпортаФайлов/Form.form b/SSL/src/Catalogs/Файлы/Forms/ФормаИмпортаФайлов/Form.form index 37d4a3b94..eb13df2ca 100644 --- a/SSL/src/Catalogs/Файлы/Forms/ФормаИмпортаФайлов/Form.form +++ b/SSL/src/Catalogs/Файлы/Forms/ФормаИмпортаФайлов/Form.form @@ -801,7 +801,6 @@ Vertical true true - UseIfNecessary auto true @@ -1050,7 +1049,7 @@ ДобавитьВыполнить - Auto + DontUse Auto @@ -1072,7 +1071,7 @@ ВыбратьФайлыВыполнить - Auto + DontUse Auto @@ -1094,7 +1093,7 @@ ВыбратьКодировку - Auto + DontUse Auto diff --git a/SSL/src/Catalogs/Файлы/Forms/ФормаНапоминанияПередПоместитьФайл/Form.form b/SSL/src/Catalogs/Файлы/Forms/ФормаНапоминанияПередПоместитьФайл/Form.form index ffa689f0e..e829aa046 100644 --- a/SSL/src/Catalogs/Файлы/Forms/ФормаНапоминанияПередПоместитьФайл/Form.form +++ b/SSL/src/Catalogs/Файлы/Forms/ФормаНапоминанияПередПоместитьФайл/Form.form @@ -145,6 +145,32 @@ UserCmds Auto + + ФормаОтмена + 14 + true + true + + true + + + ФормаОтменаРасширеннаяПодсказка + 15 + Label + true + true + + Left + + + Form.StandardCommand.Cancel + Normal + Auto + true + true + UserCmds + Auto + Right @@ -158,7 +184,6 @@ true true true - UseIfNecessary auto true @@ -215,7 +240,7 @@ ПродолжитьВыполнить - Auto + DontUse Auto diff --git a/SSL/src/Catalogs/Файлы/Forms/ФормаНапоминанияПередПоместитьФайл/Module.bsl b/SSL/src/Catalogs/Файлы/Forms/ФормаНапоминанияПередПоместитьФайл/Module.bsl index 05ff35895..9aa31a770 100644 --- a/SSL/src/Catalogs/Файлы/Forms/ФормаНапоминанияПередПоместитьФайл/Module.bsl +++ b/SSL/src/Catalogs/Файлы/Forms/ФормаНапоминанияПередПоместитьФайл/Module.bsl @@ -20,10 +20,13 @@ Процедура ПродолжитьВыполнить(Команда) Если БольшеНеПоказывать = Истина Тогда - ОбщегоНазначенияВызовСервера.ХранилищеОбщихНастроекСохранитьИОбновитьПовторноИспользуемыеЗначения("НастройкиПрограммы", "ПоказыватьПодсказкиПриРедактированииФайлов", Ложь); + ОбщегоНазначенияВызовСервера.ХранилищеОбщихНастроекСохранитьИОбновитьПовторноИспользуемыеЗначения( + "НастройкиПрограммы", + "ПоказыватьПодсказкиПриРедактированииФайлов", + Ложь); КонецЕсли; - Закрыть(); + Закрыть(Истина); КонецПроцедуры diff --git a/SSL/src/Catalogs/Файлы/Forms/ФормаНового/Form.form b/SSL/src/Catalogs/Файлы/Forms/ФормаНового/Form.form index 7e611428c..06570d063 100644 --- a/SSL/src/Catalogs/Файлы/Forms/ФормаНового/Form.form +++ b/SSL/src/Catalogs/Файлы/Forms/ФормаНового/Form.form @@ -61,15 +61,6 @@ 2 - - - ru - Со сканера - - - 3 - - Vertical @@ -210,7 +201,6 @@ Vertical true true - UseIfNecessary auto true @@ -253,7 +243,7 @@ СоздатьФайлВыполнить - Auto + DontUse Auto diff --git a/SSL/src/Catalogs/Файлы/Forms/ФормаНового/Help/ru.html b/SSL/src/Catalogs/Файлы/Forms/ФормаНового/Help/ru.html index ce0f32b22..c4bcc27e7 100644 --- a/SSL/src/Catalogs/Файлы/Forms/ФормаНового/Help/ru.html +++ b/SSL/src/Catalogs/Файлы/Forms/ФормаНового/Help/ru.html @@ -5,7 +5,7 @@

    Выберите с помощью переключателя:

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

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

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

    См. также:

    \ No newline at end of file diff --git a/SSL/src/Catalogs/Файлы/Forms/ФормаНового/Module.bsl b/SSL/src/Catalogs/Файлы/Forms/ФормаНового/Module.bsl index a309e4885..7d4df702f 100644 --- a/SSL/src/Catalogs/Файлы/Forms/ФормаНового/Module.bsl +++ b/SSL/src/Catalogs/Файлы/Forms/ФормаНового/Module.bsl @@ -8,8 +8,10 @@ Возврат; КонецЕсли; - Если Не Параметры.ДоступнаКомандаСканировать Тогда - Элементы.РежимСоздания.СписокВыбора.Удалить(2); + Если Параметры.ДоступнаКомандаСканировать Тогда + Если Параметры.ДоступнаКомандаСканировать Тогда + Элементы.РежимСоздания.СписокВыбора.Добавить(3, НСтр("ru = 'Со сканера'")); + КонецЕсли; КонецЕсли; КонецПроцедуры @@ -30,6 +32,6 @@ &НаКлиенте Процедура УстановитьПараметрыИспользования(РежимСозданияПараметр) Экспорт РежимСоздания = РежимСозданияПараметр; -КонецПроцедуры +КонецПроцедуры #КонецОбласти diff --git a/SSL/src/Catalogs/Файлы/Forms/ФормаОтчета/Module.bsl b/SSL/src/Catalogs/Файлы/Forms/ФормаОтчета/Module.bsl index 1199aa7d8..144e5cff7 100644 --- a/SSL/src/Catalogs/Файлы/Forms/ФормаОтчета/Module.bsl +++ b/SSL/src/Catalogs/Файлы/Forms/ФормаОтчета/Module.bsl @@ -26,7 +26,7 @@ #Если Не ВебКлиент Тогда // Путь к файлу. - Если Найти(Область.Текст, ":\") > 0 ИЛИ Найти(Область.Текст, ":/") > 0 Тогда + Если СтрНайти(Область.Текст, ":\") > 0 ИЛИ СтрНайти(Область.Текст, ":/") > 0 Тогда ФайловыеФункцииСлужебныйКлиент.ОткрытьПроводникСФайлом(Область.Текст); КонецЕсли; #КонецЕсли diff --git a/SSL/src/Catalogs/Файлы/Forms/ФормаПеретаскивания/Form.form b/SSL/src/Catalogs/Файлы/Forms/ФормаПеретаскивания/Form.form index dccb78093..9b13e6100 100644 --- a/SSL/src/Catalogs/Файлы/Forms/ФормаПеретаскивания/Form.form +++ b/SSL/src/Catalogs/Файлы/Forms/ФормаПеретаскивания/Form.form @@ -808,7 +808,6 @@ Vertical true true - UseIfNecessary auto true @@ -1080,7 +1079,7 @@ ЗагрузитьФайлы - Auto + DontUse Auto @@ -1102,7 +1101,7 @@ ВыбратьКодировку - Auto + DontUse Auto diff --git a/SSL/src/Catalogs/Файлы/Forms/ФормаПеретаскивания/Module.bsl b/SSL/src/Catalogs/Файлы/Forms/ФормаПеретаскивания/Module.bsl index 266542fc3..26ea80bdc 100644 --- a/SSL/src/Catalogs/Файлы/Forms/ФормаПеретаскивания/Module.bsl +++ b/SSL/src/Catalogs/Файлы/Forms/ФормаПеретаскивания/Module.bsl @@ -152,10 +152,10 @@ Иначе НовыйЭлемент.ИндексКартинки = ФайловыеФункцииСлужебныйКлиентСервер.ПолучитьИндексПиктограммыФайла(ФайлПеренесенный.Расширение); КонецЕсли; - + Если ФайлПеренесенный.ЭтоКаталог() Тогда - Путь = ФайлПеренесенный.ПолноеИмя + ОбщегоНазначенияКлиентСервер.РазделительПути(); + Путь = ФайлПеренесенный.ПолноеИмя + ПолучитьРазделительПути(); Если ЭлементВерхнегоУровня = Истина Тогда Состояние(СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( diff --git a/SSL/src/Catalogs/Файлы/Forms/ФормаПодбора/Form.form b/SSL/src/Catalogs/Файлы/Forms/ФормаПодбора/Form.form index cc5b1ea08..1d550ec36 100644 --- a/SSL/src/Catalogs/Файлы/Forms/ФормаПодбора/Form.form +++ b/SSL/src/Catalogs/Файлы/Forms/ФормаПодбора/Form.form @@ -944,7 +944,6 @@ true true true - UseIfNecessary auto true diff --git a/SSL/src/Catalogs/Файлы/Forms/ФормаСписка/Form.form b/SSL/src/Catalogs/Файлы/Forms/ФормаСписка/Form.form index 10a041cc3..935eaa8dc 100644 --- a/SSL/src/Catalogs/Файлы/Forms/ФормаСписка/Form.form +++ b/SSL/src/Catalogs/Файлы/Forms/ФормаСписка/Form.form @@ -1419,7 +1419,6 @@ true true true - UseIfNecessary auto true @@ -1524,7 +1523,7 @@ TextPicture - Auto + DontUse Auto @@ -1550,7 +1549,7 @@ TextPicture - Auto + DontUse Auto @@ -1576,7 +1575,7 @@ TextPicture - Auto + DontUse Auto @@ -1602,7 +1601,7 @@ Обновить - Auto + DontUse Auto diff --git a/SSL/src/Catalogs/Файлы/Forms/ФормаСпискаПрисоединенныхФайлов/Form.form b/SSL/src/Catalogs/Файлы/Forms/ФормаСпискаПрисоединенныхФайлов/Form.form index c0cf99e65..b5075a8f7 100644 --- a/SSL/src/Catalogs/Файлы/Forms/ФормаСпискаПрисоединенныхФайлов/Form.form +++ b/SSL/src/Catalogs/Файлы/Forms/ФормаСпискаПрисоединенныхФайлов/Form.form @@ -2,8 +2,51 @@ <key>ru</key> - <value>Файлы</value> + <value>Присоединенные файлы</value> + + ВладелецФайла + 259 + + Style.LargeTextFont + + true + true + + true + + + ВладелецФайла + + + ВладелецФайлаРасширеннаяПодсказка + 261 + Label + true + true + + Left + + + + ВладелецФайлаКонтекстноеМеню + 260 + true + + LabelField + Enter + true + Left + true + + true + true + true + + Style.LargeTextFont + + + ГруппаПользовательскихНастроек 227 @@ -319,6 +362,85 @@ UserCmds Auto + + Предпросмотр + 244 + true + true + + true + + + ПредпросмотрРасширеннаяПодсказка + 245 + Label + true + true + + Left + + + Form.Command.Предпросмотр + Normal + Auto + true + true + UserCmds + Auto + InAdditionalSubmenu + + + Печать + 253 + true + true + + true + + + ПечатьРасширеннаяПодсказка + 254 + Label + true + true + + Left + + + Form.Command.Печать + Normal + Auto + true + true + UserCmds + Auto + + + Отправить + 251 + true + true + + true + + + ОтправитьРасширеннаяПодсказка + 252 + Label + true + true + + Left + + + Form.Command.Отправить + Normal + Auto + true + true + UserCmds + Auto + true true @@ -1102,93 +1224,42 @@ Left - - Список - 10 - true - true - - true - - - Список - - false - None - Refresh - - СписокНомерКартинкиПодписанЗашифрован - 91 + + ГруппаФайлы + 246 + + Список + 10 true true true - Список.НомерКартинкиПодписанЗашифрован + Список + false None - - ru - Наличие электронной подписи или шифрования - - - СписокНомерКартинкиПодписанЗашифрованРасширеннаяПодсказка - 161 - Label - true - true - - Left - - - - СписокНомерКартинкиПодписанЗашифрованКонтекстноеМеню - 92 - true - - PictureField - Enter - true - - CommonPicture.ПодписанЗашифрованЗаголовок - - Left - true - - 2 - true - true - true - true - - CommonPicture.ПодписанЗашифрованСостояния - - - - 1 - - - - - СписокГруппаКартинкаИНаименование - 45 + Refresh - СписокИндексКартинки - 25 + СписокНомерКартинкиПодписанЗашифрован + 91 true true true - Список.ИндексКартинки + Список.НомерКартинкиПодписанЗашифрован None - None + + ru + Наличие электронной подписи или шифрования + - СписокИндексКартинкиРасширеннаяПодсказка - 164 + СписокНомерКартинкиПодписанЗашифрованРасширеннаяПодсказка + 161 Label true true @@ -1197,49 +1268,186 @@ - СписокИндексКартинкиКонтекстноеМеню - 26 + СписокНомерКартинкиПодписанЗашифрованКонтекстноеМеню + 92 true PictureField Enter true + + CommonPicture.ПодписанЗашифрованЗаголовок + Left true - Left 2 true - 1 true true true - CommonPicture.КоллекцияПиктограммФайлов + CommonPicture.ПодписанЗашифрованСостояния + 1 - - СписокНаименование - 17 - - <key>ru</key> - <value>Наименование</value> - + + СписокГруппаКартинкаИНаименование + 45 + + СписокИндексКартинки + 25 + true + true + + true + + + Список.ИндексКартинки + + None + None + + СписокИндексКартинкиРасширеннаяПодсказка + 164 + Label + true + true + + Left + + + + СписокИндексКартинкиКонтекстноеМеню + 26 + true + + PictureField + Enter + true + Left + true + Left + + 2 + true + 1 + true + true + true + + CommonPicture.КоллекцияПиктограммФайлов + + + 1 + + + + + СписокНаименование + 17 + + <key>ru</key> + <value>Наименование</value> + + true + true + + true + + + Список.Description + + + СписокНаименованиеРасширеннаяПодсказка + 165 + Label + true + true + + Left + + + + СписокНаименованиеКонтекстноеМеню + 18 + true + + InputField + Enter + true + true + Left + true + + 20 + true + true + true + true + true + Normal + + + + СписокОписание + 27 + true + true + + true + + + Список.Описание + + None + + СписокОписаниеРасширеннаяПодсказка + 166 + Label + true + true + + Left + + + + СписокОписаниеКонтекстноеМеню + 28 + true + + InputField + Enter + true + true + Left + true + + 15 + true + true + true + true + true + Normal + + true true true - - Список.Description - + + <key>ru</key> + <value>Список группа картинка и наименование</value> + - СписокНаименованиеРасширеннаяПодсказка - 165 + СписокГруппаКартинкаИНаименованиеРасширеннаяПодсказка + 163 Label true true @@ -1247,42 +1455,27 @@ Left - - СписокНаименованиеКонтекстноеМеню - 18 - true - - InputField - Enter - true - true - Left - true - - 20 - true - true - true - true - true - Normal + ColumnGroup + + InCell + auto + true - СписокОписание - 27 + СписокАвтор + 21 true true true - Список.Описание + Список.Автор - None - СписокОписаниеРасширеннаяПодсказка - 166 + СписокАвторРасширеннаяПодсказка + 168 Label true true @@ -1291,13 +1484,12 @@ - СписокОписаниеКонтекстноеМеню - 28 + СписокАвторКонтекстноеМеню + 22 true InputField Enter - true true Left true @@ -1311,177 +1503,462 @@ Normal - true - true - - true - - - <key>ru</key> - <value>Список группа картинка и наименование</value> - - - СписокГруппаКартинкаИНаименованиеРасширеннаяПодсказка - 163 - Label - true - true - - Left - - - ColumnGroup - - InCell - auto - true - - - - СписокАвтор - 21 - true - true - - true - - - Список.Автор - - - СписокАвторРасширеннаяПодсказка - 168 - Label - true - true - - Left - - - - СписокАвторКонтекстноеМеню - 22 - true - - InputField - Enter - true - Left - true - - 15 - true - true - true - true - true - Normal - - - - СписокТекущаяВерсияДатаМодификацииФайла - 182 - - <key>ru</key> - <value>Дата изменения</value> - - true - true - - true - - - Список.ТекущаяВерсияДатаМодификацииФайла - - - СписокТекущаяВерсияДатаМодификацииФайлаРасширеннаяПодсказка - 184 - Label - true - true - - Left - - - - СписокТекущаяВерсияДатаМодификацииФайлаКонтекстноеМеню - 183 - true - - LabelField - Enter - true - Left - true - - 15 - true - true - false - - - - СписокТекущаяВерсияРазмер - 39 - - <key>ru</key> - <value>Размер (Кб)</value> - - true - true - - true - - - Список.ТекущаяВерсияРазмер - - - ru - Размер файла в килобайтах - - - СписокТекущаяВерсияРазмерРасширеннаяПодсказка - 170 - Label - true - true - - Left - - - - СписокТекущаяВерсияРазмерКонтекстноеМеню - 40 - true - - LabelField - Enter - true - Left - true - - 10 - true - true - false - + + СписокТекущаяВерсияДатаМодификацииФайла + 182 + <key>ru</key> - <value>ЧЦ=10; ЧН=0</value> - </format> - </extInfo> - </items> - <items xsi:type="form:FormField"> - <name>СписокДатаСоздания</name> - <id>23</id> - <visible>true</visible> - <enabled>true</enabled> - <userVisible/> - <dataPath xsi:type="form:DataPath"> - <segments>Список.ДатаСоздания</segments> - </dataPath> + <value>Дата изменения</value> + + true + true + + true + + + Список.ТекущаяВерсияДатаМодификацииФайла + + + СписокТекущаяВерсияДатаМодификацииФайлаРасширеннаяПодсказка + 184 + Label + true + true + + Left + + + + СписокТекущаяВерсияДатаМодификацииФайлаКонтекстноеМеню + 183 + true + + LabelField + Enter + true + Left + true + + 15 + true + true + false + + + + СписокТекущаяВерсияРазмер + 39 + + <key>ru</key> + <value>Размер (Кб)</value> + + true + true + + true + + + Список.ТекущаяВерсияРазмер + + + ru + Размер файла в килобайтах + + + СписокТекущаяВерсияРазмерРасширеннаяПодсказка + 170 + Label + true + true + + Left + + + + СписокТекущаяВерсияРазмерКонтекстноеМеню + 40 + true + + LabelField + Enter + true + Left + true + + 10 + true + true + false + + ru + ЧЦ=10; ЧН=0 + + + + + СписокДатаСоздания + 23 + true + true + + + Список.ДатаСоздания + + + СписокДатаСозданияРасширеннаяПодсказка + 167 + Label + true + true + + Left + + + + СписокДатаСозданияКонтекстноеМеню + 24 + true + + InputField + Enter + true + Left + true + + 15 + true + true + false + true + true + true + Normal + + + + СписокРедактирует + 29 + true + true + + + Список.Редактирует + + + СписокРедактируетРасширеннаяПодсказка + 169 + Label + true + true + + Left + + + + СписокРедактируетКонтекстноеМеню + 30 + true + + InputField + Enter + true + Left + true + + 15 + true + true + true + true + true + Normal + + + + СписокТекущаяВерсияАвтор + 35 + true + true + + + Список.ТекущаяВерсияАвтор + + + СписокТекущаяВерсияАвторРасширеннаяПодсказка + 171 + Label + true + true + + Left + + + + СписокТекущаяВерсияАвторКонтекстноеМеню + 36 + true + + InputField + Enter + true + Left + true + + 17 + true + true + true + true + true + Normal + + + + СписокТекущаяВерсияДатаСоздания + 37 + true + true + + + Список.ТекущаяВерсияДатаСоздания + + + СписокТекущаяВерсияДатаСозданияРасширеннаяПодсказка + 172 + Label + true + true + + Left + + + + СписокТекущаяВерсияДатаСозданияКонтекстноеМеню + 38 + true + + InputField + Enter + true + Left + true + + 15 + true + true + false + true + true + true + Normal + + + + СписокХранитьВерсии + 63 + true + true + + + Список.ХранитьВерсии + + + СписокХранитьВерсииРасширеннаяПодсказка + 173 + Label + true + true + + Left + + + + СписокХранитьВерсииКонтекстноеМеню + 64 + true + + CheckBoxField + Enter + true + Left + true + + + + СписокРедактируетТекущийПользователь + 65 + true + true + + + Список.РедактируетТекущийПользователь + + None + + ru + Редактирует текущий пользователь + + + СписокРедактируетТекущийПользовательРасширеннаяПодсказка + 174 + Label + true + true + + Left + + + + СписокРедактируетТекущийПользовательКонтекстноеМеню + 66 + true + + CheckBoxField + Enter + true + + CommonPicture.РедактироватьФайл + + Left + true + + + + СписокСсылка + 89 + true + true + + + Список.Ref + + + СписокСсылкаРасширеннаяПодсказка + 175 + Label + true + true + + Left + + + + СписокСсылкаКонтекстноеМеню + 90 + true + + LabelField + Enter + true + Left + true + + 1 + true + true + + + None + + СписокКоманднаяПанель + 12 + Left + true + + + DragCheck + СписокПроверкаПеретаскивания + + + Selection + СписокВыбор + + + BeforeAddRow + СписокПередНачаломДобавления + + + OnActivateRow + СписокПриАктивизацииСтроки + + + Drag + СписокПеретаскивание + + + СписокСтрокаПоиска + 235 + + СписокСтрокаПоискаРасширеннаяПодсказка + 237 + Label + true + true + + Left + + + + СписокСтрокаПоискаКонтекстноеМеню + 236 + true + + Список + + true + + + + СписокСостояниеПросмотра + 238 + + СписокСостояниеПросмотраРасширеннаяПодсказка + 240 + Label + true + true + + Left + + + + СписокСостояниеПросмотраКонтекстноеМеню + 239 + true + + ViewStatusAddition + Список + + true + + + + СписокУправлениеПоиском + 241 + + СписокУправлениеПоискомРасширеннаяПодсказка + 243 + Label + true + true + + Left + + + + СписокУправлениеПоискомКонтекстноеМеню + 242 + true + + SearchControlAddition + Список + + true + + - СписокДатаСозданияРасширеннаяПодсказка - 167 + СписокExtendedTooltip + 160 Label true true @@ -1490,192 +1967,747 @@ - СписокДатаСозданияКонтекстноеМеню - 24 - true + СписокКонтекстноеМеню + 11 + + СписокКонтекстноеМенюСоздать + 215 + true + true + + true + + + СписокКонтекстноеМенюСоздатьРасширеннаяПодсказка + 216 + Label + true + true + + Left + + + Form.Item.Список.StandardCommand.Create + Normal + Auto + true + true + UserCmds + Auto + + + СписокКонтекстноеМенюИзменить + 217 + + <key>ru</key> + <value>Открыть карточку</value> + + true + true + + true + + + СписокКонтекстноеМенюИзменитьРасширеннаяПодсказка + 218 + Label + true + true + + Left + + + Form.Item.Список.StandardCommand.Change + Normal + Auto + true + true + UserCmds + Auto + + + СписокКонтекстноеМенюГруппаКомандОсновные + 213 + + СписокКонтекстноеМенюОткрыть + 78 + true + true + + true + + false + + СписокКонтекстноеМенюОткрытьРасширеннаяПодсказка + 142 + Label + true + true + + Left + + + Form.Command.ОткрытьФайл + Normal + Auto + true + true + UserCmds + Auto + + + СписокКонтекстноеМенюЗанять + 81 + true + true + + false + + СписокКонтекстноеМенюЗанятьРасширеннаяПодсказка + 145 + Label + true + true + + Left + + + Form.Command.Занять + Normal + Auto + true + true + UserCmds + Auto + + + СписокКонтекстноеМенюРедактировать + 79 + true + true + + true + + false + + СписокКонтекстноеМенюРедактироватьРасширеннаяПодсказка + 143 + Label + true + true + + Left + + + Form.Command.Редактировать + Normal + Auto + true + true + UserCmds + Auto + + + СписокКонтекстноеМенюСохранитьИзменения + 82 + true + true + + false + + СписокКонтекстноеМенюСохранитьИзмененияРасширеннаяПодсказка + 146 + Label + true + true + + Left + + + Form.Command.СохранитьИзменения + Normal + Auto + true + true + UserCmds + Auto + + + СписокКонтекстноеМенюЗакончитьРедактирование + 80 + true + true + + true + + false + + СписокКонтекстноеМенюЗакончитьРедактированиеРасширеннаяПодсказка + 144 + Label + true + true + + Left + + + Form.Command.ЗакончитьРедактирование + Normal + Auto + true + true + UserCmds + Auto + + + СписокКонтекстноеМенюПечать + 255 + true + true + + true + + + СписокКонтекстноеМенюПечатьРасширеннаяПодсказка + 256 + Label + true + true + + Left + + + Form.Command.Печать + Normal + Auto + true + true + UserCmds + Auto + + + СписокКонтекстноеМенюОтправить + 257 + true + true + + true + + + СписокКонтекстноеМенюОтправитьРасширеннаяПодсказка + 258 + Label + true + true + + Left + + + Form.Command.Отправить + Normal + Auto + true + true + UserCmds + Auto + + true + true + + true + + + <key>ru</key> + <value>Список контекстное меню группа команд основные</value> + + + СписокКонтекстноеМенюГруппаКомандОсновныеРасширеннаяПодсказка + 214 + Label + true + true + + Left + + + + + + СписокКонтекстноеМенюГруппаКомандЭлектроннаяПодписьИШифрование + 104 + + СписокКонтекстноеМенюГруппаКомандЭлектроннаяПодпись + 233 + + СписокКонтекстноеМенюПодписать + 106 + true + true + + true + + + СписокКонтекстноеМенюПодписатьРасширеннаяПодсказка + 154 + Label + true + true + + Left + + + Form.Command.Подписать + Normal + Auto + true + true + UserCmds + Auto + + + СписокКонтекстноеМенюДобавитьПодписьИзФайла + 108 + true + true + + true + + + СписокКонтекстноеМенюДобавитьПодписьИзФайлаРасширеннаяПодсказка + 155 + Label + true + true + + Left + + + Form.Command.ДобавитьПодписьИзФайла + Normal + Auto + true + true + UserCmds + Auto + + + СписокКонтекстноеМенюСохранитьВместеСПодписью + 109 + true + true + + true + + + СписокКонтекстноеМенюСохранитьВместеСПодписьюРасширеннаяПодсказка + 156 + Label + true + true + + Left + + + Form.Command.СохранитьВместеСПодписью + Normal + Auto + true + true + UserCmds + Auto + + true + true + + true + + + <key>ru</key> + <value>Электронная подпись</value> + + + СписокКонтекстноеМенюГруппаКомандЭлектроннаяПодписьРасширеннаяПодсказка + 234 + Label + true + true + + Left + + + + + + СписокКонтекстноеМенюГруппаКомандШифрование + 110 + + СписокКонтекстноеМенюЗашифровать + 111 + true + true + + true + + + СписокКонтекстноеМенюЗашифроватьРасширеннаяПодсказка + 158 + Label + true + true + + Left + + + Form.Command.Зашифровать + Normal + Auto + true + true + UserCmds + Auto + + + СписокКонтекстноеМенюРасшифровать + 112 + true + true + + true + + + СписокКонтекстноеМенюРасшифроватьРасширеннаяПодсказка + 159 + Label + true + true + + Left + + + Form.Command.Расшифровать + Normal + Auto + true + true + UserCmds + Auto + + true + true + + true + + + <key>ru</key> + <value>Шифрование</value> + + + СписокКонтекстноеМенюГруппаКомандШифрованиеРасширеннаяПодсказка + 157 + Label + true + true + + Left + + + + + true + true + + true + + + <key>ru</key> + <value>Электронная подпись и шифрование</value> + + + ru + Электронная подпись и шифрование + + + СписокКонтекстноеМенюГруппаКомандЭлектроннаяПодписьИШифрованиеРасширеннаяПодсказка + 152 + Label + true + true + + Left + + + Popup + + Auto + Normal + + + + СписокКонтекстноеМенюГруппаКомандДополнительные + 219 + + СписокКонтекстноеМенюСкопировать + 221 + true + true + + true + + + СписокКонтекстноеМенюСкопироватьРасширеннаяПодсказка + 222 + Label + true + true + + Left + + + Form.Item.Список.StandardCommand.Copy + Normal + Auto + true + true + UserCmds + Auto + + + СписокКонтекстноеМенюУстановитьПометкуУдаления + 223 + true + true + + true + + + СписокКонтекстноеМенюУстановитьПометкуУдаленияРасширеннаяПодсказка + 224 + Label + true + true + + Left + + + Form.Item.Список.StandardCommand.SetDeletionMark + Normal + Auto + true + true + UserCmds + Auto + + + СписокКонтекстноеМенюСохранитьКак + 84 + true + true + + true + + false + + СписокКонтекстноеМенюСохранитьКакРасширеннаяПодсказка + 148 + Label + true + true + + Left + + + Form.Command.СохранитьКак + Normal + Auto + true + true + UserCmds + Auto + + + СписокКонтекстноеМенюОсвободить + 85 + + <key>ru</key> + <value>Отменить редактирование</value> + + true + true + + true + + false + + СписокКонтекстноеМенюОсвободитьРасширеннаяПодсказка + 149 + Label + true + true + + Left + + + Form.Command.Освободить + Normal + Auto + true + true + UserCmds + Auto + + + СписокКонтекстноеМенюОткрытьКаталогФайла + 83 + true + true + + true + + false + + СписокКонтекстноеМенюОткрытьКаталогФайлаРасширеннаяПодсказка + 147 + Label + true + true + + Left + + + Form.Command.ОткрытьКаталогФайла + Normal + Auto + true + true + UserCmds + Auto + + + СписокКонтекстноеМенюИмпортФайлов + 87 + true + true + + true + + false + + СписокКонтекстноеМенюИмпортФайловРасширеннаяПодсказка + 151 + Label + true + true + + Left + + + Form.Command.ИмпортФайлов + Normal + Auto + true + true + UserCmds + Auto + + true + true + + true + + + <key>ru</key> + <value>Список контекстное меню группа команд дополнительные</value> + + + СписокКонтекстноеМенюГруппаКомандДополнительныеРасширеннаяПодсказка + 220 + Label + true + true + + Left + + + + + + СписокКонтекстноеМенюГруппаСтандартныхКоманд + 225 + true + true + + true + + + <key>ru</key> + <value>Список контекстное меню группа стандартных команд</value> + + + СписокКонтекстноеМенюГруппаСтандартныхКомандРасширеннаяПодсказка + 226 + Label + true + true + + Left + + + + Item.Список + + - InputField - Enter - true - Left - true - - 15 - true - true - false - true - true - true - Normal + HierarchicalList + true + true + 1 + true + 10 + true + true + MultiRow +
    true
    + 1 + 1 + AutoUse + AutoUse + true + true + Auto + Auto + true + true + true + true + None + None + None + true + + 60 + + 0001-01-01T00:00:00 + 0001-01-01T00:00:00 + + + true + ГруппаПользовательскихНастроек
    - СписокРедактирует - 29 - true + АдресДанныхФайла + 248 true - + + true + - Список.Редактирует - - - СписокРедактируетРасширеннаяПодсказка - 169 - Label - true - true - - Left - - - - СписокРедактируетКонтекстноеМеню - 30 - true - - InputField - Enter - true - Left - true - - 15 - true - true - true - true - true - Normal - - - - СписокТекущаяВерсияАвтор - 35 - true - true - - - Список.ТекущаяВерсияАвтор - - - СписокТекущаяВерсияАвторРасширеннаяПодсказка - 171 - Label - true - true - - Left - - - - СписокТекущаяВерсияАвторКонтекстноеМеню - 36 - true - - InputField - Enter - true - Left - true - - 17 - true - true - true - true - true - Normal - - - - СписокТекущаяВерсияДатаСоздания - 37 - true - true - - - Список.ТекущаяВерсияДатаСоздания - - - СписокТекущаяВерсияДатаСозданияРасширеннаяПодсказка - 172 - Label - true - true - - Left - - - - СписокТекущаяВерсияДатаСозданияКонтекстноеМеню - 38 - true - - InputField - Enter - true - Left - true - - 15 - true - true - false - true - true - true - Normal - - - - СписокХранитьВерсии - 63 - true - true - - - Список.ХранитьВерсии - - - СписокХранитьВерсииРасширеннаяПодсказка - 173 - Label - true - true - - Left - - - - СписокХранитьВерсииКонтекстноеМеню - 64 - true - - CheckBoxField - Enter - true - Left - true - - - - СписокРедактируетТекущийПользователь - 65 - true - true - - - Список.РедактируетТекущийПользователь + АдресДанныхФайла None - - ru - Редактирует текущий пользователь - - СписокРедактируетТекущийПользовательРасширеннаяПодсказка - 174 + АдресДанныхФайлаРасширеннаяПодсказка + 250 Label true true @@ -1684,156 +2716,47 @@ - СписокРедактируетТекущийПользовательКонтекстноеМеню - 66 + АдресДанныхФайлаКонтекстноеМеню + 249 true - CheckBoxField - Enter - true - - CommonPicture.РедактироватьФайл - - Left - true - - - - СписокСсылка - 89 - true - true - - - Список.Ref - - - СписокСсылкаРасширеннаяПодсказка - 175 - Label - true - true - - Left - - - - СписокСсылкаКонтекстноеМеню - 90 - true - - LabelField + PictureField Enter true Left true - - 1 + true true + true + true + AutoSize + + ru + Выберите файл для предварительного просмотра + + + + 1 + - None - - СписокКоманднаяПанель - 12 - Left - true - - - DragCheck - СписокПроверкаПеретаскивания - - - Selection - СписокВыбор - - - BeforeAddRow - СписокПередНачаломДобавления - - - OnActivateRow - СписокПриАктивизацииСтроки - - - Drag - СписокПеретаскивание - - - СписокСтрокаПоиска - 235 - - СписокСтрокаПоискаРасширеннаяПодсказка - 237 - Label - true - true - - Left - - - - СписокСтрокаПоискаКонтекстноеМеню - 236 - true - - Список - - true - - - - СписокСостояниеПросмотра - 238 - - СписокСостояниеПросмотраРасширеннаяПодсказка - 240 - Label - true - true - - Left - - - - СписокСостояниеПросмотраКонтекстноеМеню - 239 - true - - ViewStatusAddition - Список - - true - - - - СписокУправлениеПоиском - 241 - - СписокУправлениеПоискомРасширеннаяПодсказка - 243 - Label - true - true - - Left - - - - СписокУправлениеПоискомКонтекстноеМеню - 242 - true - - SearchControlAddition - Список - - true - - + true + true + + true + + + <key>ru</key> + <value>Группа файлы</value> + + + ru + Группа файлы + - СписокExtendedTooltip - 160 + ГруппаФайлыРасширеннаяПодсказка + 247 Label true true @@ -1841,679 +2764,13 @@ Left - - СписокКонтекстноеМеню - 11 - - СписокКонтекстноеМенюСоздать - 215 - true - true - - true - - - СписокКонтекстноеМенюСоздатьРасширеннаяПодсказка - 216 - Label - true - true - - Left - - - Form.Item.Список.StandardCommand.Create - Normal - Auto - true - true - UserCmds - Auto - - - СписокКонтекстноеМенюИзменить - 217 - - <key>ru</key> - <value>Открыть карточку</value> - - true - true - - true - - - СписокКонтекстноеМенюИзменитьРасширеннаяПодсказка - 218 - Label - true - true - - Left - - - Form.Item.Список.StandardCommand.Change - Normal - Auto - true - true - UserCmds - Auto - - - СписокКонтекстноеМенюГруппаКомандОсновные - 213 - - СписокКонтекстноеМенюОткрыть - 78 - true - true - - true - - false - - СписокКонтекстноеМенюОткрытьРасширеннаяПодсказка - 142 - Label - true - true - - Left - - - Form.Command.ОткрытьФайл - Normal - Auto - true - true - UserCmds - Auto - - - СписокКонтекстноеМенюЗанять - 81 - true - true - - false - - СписокКонтекстноеМенюЗанятьРасширеннаяПодсказка - 145 - Label - true - true - - Left - - - Form.Command.Занять - Normal - Auto - true - true - UserCmds - Auto - - - СписокКонтекстноеМенюРедактировать - 79 - true - true - - true - - false - - СписокКонтекстноеМенюРедактироватьРасширеннаяПодсказка - 143 - Label - true - true - - Left - - - Form.Command.Редактировать - Normal - Auto - true - true - UserCmds - Auto - - - СписокКонтекстноеМенюСохранитьИзменения - 82 - true - true - - false - - СписокКонтекстноеМенюСохранитьИзмененияРасширеннаяПодсказка - 146 - Label - true - true - - Left - - - Form.Command.СохранитьИзменения - Normal - Auto - true - true - UserCmds - Auto - - - СписокКонтекстноеМенюЗакончитьРедактирование - 80 - true - true - - true - - false - - СписокКонтекстноеМенюЗакончитьРедактированиеРасширеннаяПодсказка - 144 - Label - true - true - - Left - - - Form.Command.ЗакончитьРедактирование - Normal - Auto - true - true - UserCmds - Auto - - true - true - - true - - - <key>ru</key> - <value>Список контекстное меню группа команд основные</value> - - - СписокКонтекстноеМенюГруппаКомандОсновныеРасширеннаяПодсказка - 214 - Label - true - true - - Left - - - - - - СписокКонтекстноеМенюГруппаКомандЭлектроннаяПодписьИШифрование - 104 - - СписокКонтекстноеМенюГруппаКомандЭлектроннаяПодпись - 233 - - СписокКонтекстноеМенюПодписать - 106 - true - true - - true - - - СписокКонтекстноеМенюПодписатьРасширеннаяПодсказка - 154 - Label - true - true - - Left - - - Form.Command.Подписать - Normal - Auto - true - true - UserCmds - Auto - - - СписокКонтекстноеМенюДобавитьПодписьИзФайла - 108 - true - true - - true - - - СписокКонтекстноеМенюДобавитьПодписьИзФайлаРасширеннаяПодсказка - 155 - Label - true - true - - Left - - - Form.Command.ДобавитьПодписьИзФайла - Normal - Auto - true - true - UserCmds - Auto - - - СписокКонтекстноеМенюСохранитьВместеСПодписью - 109 - true - true - - true - - - СписокКонтекстноеМенюСохранитьВместеСПодписьюРасширеннаяПодсказка - 156 - Label - true - true - - Left - - - Form.Command.СохранитьВместеСПодписью - Normal - Auto - true - true - UserCmds - Auto - - true - true - - true - - - <key>ru</key> - <value>Электронная подпись</value> - - - СписокКонтекстноеМенюГруппаКомандЭлектроннаяПодписьРасширеннаяПодсказка - 234 - Label - true - true - - Left - - - - - - СписокКонтекстноеМенюГруппаКомандШифрование - 110 - - СписокКонтекстноеМенюЗашифровать - 111 - true - true - - true - - - СписокКонтекстноеМенюЗашифроватьРасширеннаяПодсказка - 158 - Label - true - true - - Left - - - Form.Command.Зашифровать - Normal - Auto - true - true - UserCmds - Auto - - - СписокКонтекстноеМенюРасшифровать - 112 - true - true - - true - - - СписокКонтекстноеМенюРасшифроватьРасширеннаяПодсказка - 159 - Label - true - true - - Left - - - Form.Command.Расшифровать - Normal - Auto - true - true - UserCmds - Auto - - true - true - - true - - - <key>ru</key> - <value>Шифрование</value> - - - СписокКонтекстноеМенюГруппаКомандШифрованиеРасширеннаяПодсказка - 157 - Label - true - true - - Left - - - - - true - true - - true - - - <key>ru</key> - <value>Электронная подпись и шифрование</value> - - - ru - Электронная подпись и шифрование - - - СписокКонтекстноеМенюГруппаКомандЭлектроннаяПодписьИШифрованиеРасширеннаяПодсказка - 152 - Label - true - true - - Left - - - Popup - - Auto - Normal - - - - СписокКонтекстноеМенюГруппаКомандДополнительные - 219 - - СписокКонтекстноеМенюСкопировать - 221 - true - true - - true - - - СписокКонтекстноеМенюСкопироватьРасширеннаяПодсказка - 222 - Label - true - true - - Left - - - Form.Item.Список.StandardCommand.Copy - Normal - Auto - true - true - UserCmds - Auto - - - СписокКонтекстноеМенюУстановитьПометкуУдаления - 223 - true - true - - true - - - СписокКонтекстноеМенюУстановитьПометкуУдаленияРасширеннаяПодсказка - 224 - Label - true - true - - Left - - - Form.Item.Список.StandardCommand.SetDeletionMark - Normal - Auto - true - true - UserCmds - Auto - - - СписокКонтекстноеМенюСохранитьКак - 84 - true - true - - true - - false - - СписокКонтекстноеМенюСохранитьКакРасширеннаяПодсказка - 148 - Label - true - true - - Left - - - Form.Command.СохранитьКак - Normal - Auto - true - true - UserCmds - Auto - - - СписокКонтекстноеМенюОсвободить - 85 - - <key>ru</key> - <value>Отменить редактирование</value> - - true - true - - true - - false - - СписокКонтекстноеМенюОсвободитьРасширеннаяПодсказка - 149 - Label - true - true - - Left - - - Form.Command.Освободить - Normal - Auto - true - true - UserCmds - Auto - - - СписокКонтекстноеМенюОткрытьКаталогФайла - 83 - true - true - - true - - false - - СписокКонтекстноеМенюОткрытьКаталогФайлаРасширеннаяПодсказка - 147 - Label - true - true - - Left - - - Form.Command.ОткрытьКаталогФайла - Normal - Auto - true - true - UserCmds - Auto - - - СписокКонтекстноеМенюИмпортФайлов - 87 - true - true - - true - - false - - СписокКонтекстноеМенюИмпортФайловРасширеннаяПодсказка - 151 - Label - true - true - - Left - - - Form.Command.ИмпортФайлов - Normal - Auto - true - true - UserCmds - Auto - - true - true - - true - - - <key>ru</key> - <value>Список контекстное меню группа команд дополнительные</value> - - - СписокКонтекстноеМенюГруппаКомандДополнительныеРасширеннаяПодсказка - 220 - Label - true - true - - Left - - - - - - СписокКонтекстноеМенюГруппаСтандартныхКоманд - 225 - true - true - - true - - - <key>ru</key> - <value>Список контекстное меню группа стандартных команд</value> - - - СписокКонтекстноеМенюГруппаСтандартныхКомандРасширеннаяПодсказка - 226 - Label - true - true - - Left - - - - Item.Список - - - - HierarchicalList - true - true - true - 10 - true - true - MultiRow -
    true
    - 1 - 1 - AutoUse - AutoUse - true - true - Auto - Auto - true - true - true - true - None - None - None - true - - 60 - - 0001-01-01T00:00:00 - 0001-01-01T00:00:00 - - - true - ГруппаПользовательскихНастроек + UsualGroup + + Auto + true + true + Auto + Auto
    @@ -2541,7 +2798,6 @@ true true true - UseIfNecessary auto true @@ -2556,12 +2812,6 @@ true - - Список.Подписан - - - Список.ПодписанЭЦП - Список.Ref @@ -2571,6 +2821,9 @@ Список.ПодписанЭП + + Список.Расширение + Список.Редактирует @@ -2589,6 +2842,7 @@ Файлы.ТекущаяВерсияРазмер / 1024 КАК ТекущаяВерсияРазмер, Файлы.Автор, Файлы.ТекущаяВерсияДатаСоздания, + Файлы.ТекущаяВерсияРасширение КАК Расширение, ВЫБОР КОГДА Файлы.ПометкаУдаления = ИСТИНА ТОГДА Файлы.ИндексКартинки + 1 @@ -2648,6 +2902,108 @@ true + + АдресДанныхФайла + + <key>ru</key> + <value>Адрес данных файла</value> + + 3 + + String + + + + true + + + true + + + + РасширенияПоддерживающиеПредпросмотр + + <key>ru</key> + <value>Расширения, поддерживающие предпросмотр</value> + + 4 + + ValueList + + + true + + + true + + + + + + + Предпросмотр + + <key>ru</key> + <value>Предпросмотр</value> + + 5 + + Boolean + + + true + + + true + + + + ТипСправочникаСФайлами + + <key>ru</key> + <value>Тип справочника с файлами</value> + + 6 + + + true + + + true + + + + ПараметрыОтправки + + <key>ru</key> + <value>Параметры отправки</value> + + 7 + + + true + + + true + + + + ВладелецФайла + + <key>ru</key> + <value>Владелец</value> + + 8 + + AnyRef + + + true + + + true + + СоздатьФайл @@ -2668,7 +3024,7 @@ </handler> </action> <representation>TextPicture</representation> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <formCommands> @@ -2694,7 +3050,7 @@ </handler> </action> <representation>TextPicture</representation> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <formCommands> @@ -2720,7 +3076,7 @@ </handler> </action> <representation>TextPicture</representation> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <formCommands> @@ -2746,7 +3102,7 @@ </handler> </action> <representation>TextPicture</representation> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <formCommands> @@ -2768,7 +3124,7 @@ <name>ОткрытьКаталогФайла</name> </handler> </action> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <formCommands> @@ -2794,7 +3150,7 @@ </handler> </action> <representation>Picture</representation> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <formCommands> @@ -2821,7 +3177,7 @@ </handler> </action> <representation>TextPicture</representation> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <formCommands> @@ -2847,7 +3203,7 @@ </handler> </action> <representation>TextPicture</representation> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <formCommands> @@ -2873,7 +3229,7 @@ </handler> </action> <representation>TextPicture</representation> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <formCommands> @@ -2895,7 +3251,7 @@ <name>ИмпортФайлов</name> </handler> </action> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <formCommands> @@ -2913,7 +3269,7 @@ <name>ДобавитьПодписьИзФайла</name> </handler> </action> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <formCommands> @@ -2938,7 +3294,7 @@ <name>Подписать</name> </handler> </action> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <formCommands> @@ -2960,7 +3316,7 @@ <name>Расшифровать</name> </handler> </action> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <formCommands> @@ -2982,7 +3338,7 @@ <name>СохранитьВместеСПодписью</name> </handler> </action> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <formCommands> @@ -3007,7 +3363,7 @@ <name>Зашифровать</name> </handler> </action> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <formCommands> @@ -3029,7 +3385,7 @@ <name>СоздатьФайлИзШаблона</name> </handler> </action> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <formCommands> @@ -3051,7 +3407,7 @@ <name>СоздатьФайлСоСканера</name> </handler> </action> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <formCommands> @@ -3077,7 +3433,73 @@ <name>Обновить</name> </handler> </action> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> + <selectedRowsUse>Auto</selectedRowsUse> + </formCommands> + <formCommands> + <name>Предпросмотр</name> + <title> + <key>ru</key> + <value>Предпросмотр</value> + + 19 + + ru + Предпросмотр + + + true + + + + Предпросмотр + + + DontUse + Auto + + + Отправить + + <key>ru</key> + <value>Отправить</value> + + 20 + + ru + Отправить + + + true + + + + Отправить + + + DontUse + Auto + + + Печать + + <key>ru</key> + <value>Печать</value> + + 21 + + ru + Печать + + + true + + + + Печать + + + DontUse Auto diff --git a/SSL/src/Catalogs/Файлы/Forms/ФормаСпискаПрисоединенныхФайлов/Module.bsl b/SSL/src/Catalogs/Файлы/Forms/ФормаСпискаПрисоединенныхФайлов/Module.bsl index 1f2f1e357..c79cc42ee 100644 --- a/SSL/src/Catalogs/Файлы/Forms/ФормаСпискаПрисоединенныхФайлов/Module.bsl +++ b/SSL/src/Catalogs/Файлы/Forms/ФормаСпискаПрисоединенныхФайлов/Module.bsl @@ -8,12 +8,28 @@ Возврат; КонецЕсли; - Если Параметры.Свойство("ЗаголовокФормы") Тогда - Заголовок = Параметры.ЗаголовокФормы; + ВладелецФайла = ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(Параметры, "ВладелецФайла"); + ТекущаяСсылка = ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(Параметры, "ТекущаяСтрока"); + СписокОткрытИзКарточкиФайла = ЗначениеЗаполнено(ТекущаяСсылка); + Элементы.ВладелецФайла.Видимость = СписокОткрытИзКарточкиФайла; + Если СписокОткрытИзКарточкиФайла И Не ЗначениеЗаполнено(ВладелецФайла) Тогда + ВладелецФайла = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(ТекущаяСсылка, "ВладелецФайла"); + КонецЕсли; + Если ЗначениеЗаполнено(ВладелецФайла) Тогда + Список.Параметры.УстановитьЗначениеПараметра("Владелец", ВладелецФайла); + ТипСправочникаСФайлами = ТипЗнч(ВладелецФайла); КонецЕсли; - Если Параметры.Свойство("ВладелецФайла") Тогда - Список.Параметры.УстановитьЗначениеПараметра("Владелец", Параметры.ВладелецФайла); + Если Параметры.Свойство("ЗаголовокФормы") Тогда + Заголовок = Параметры.ЗаголовокФормы; + ИначеЕсли СписокОткрытИзКарточкиФайла Тогда + Заголовок = Заголовок + " (" + Строка(ТипСправочникаСФайлами) + " " + Строка(ВладелецФайла) + ")"; + КонецЕсли; + + Если Параметры.Свойство("ПараметрыОтправки") Тогда + ПараметрыОтправки = Параметры.ПараметрыОтправки; + Иначе + ПараметрыОтправки = ФайловыеФункцииСлужебный.ПодготовитьСтруктуруПараметровОтправки(); КонецЕсли; Список.Параметры.УстановитьЗначениеПараметра("ТекущийПользователь", Пользователи.ТекущийПользователь()); @@ -32,12 +48,28 @@ Элементы.ФормаИзменить82.Видимость = Истина; КонецЕсли; + Если ТипСправочникаСФайлами <> Неопределено Тогда + ИспользоватьПредпросмотр = ОбщегоНазначения.ХранилищеОбщихНастроекЗагрузить( + ТипСправочникаСФайлами, + "Предпросмотр"); + + Если ИспользоватьПредпросмотр <> Неопределено Тогда + Предпросмотр = ИспользоватьПредпросмотр; + Элементы.АдресДанныхФайла.Видимость = ИспользоватьПредпросмотр; + Элементы.Предпросмотр.Пометка = ИспользоватьПредпросмотр; + КонецЕсли; + КонецЕсли; + + РасширенияПоддерживающиеПредпросмотр = ФайловыеФункцииСлужебный.СписокРасширенийДляПредпросмотра(); + КонецПроцедуры &НаКлиенте Процедура ПриОткрытии(Отказ) - Элементы.ФормаСоздатьСоСканера.Видимость = РаботаСФайламиСлужебныйКлиент.ДоступнаКомандаСканировать(); + УстановитьДоступностьФайловыхКоманд(); + + Элементы.ФормаСоздатьСоСканера.Видимость = ФайловыеФункцииСлужебныйКлиент.ДоступнаКомандаСканировать(); КонецПроцедуры @@ -178,6 +210,21 @@ УстановитьДоступностьФайловыхКоманд(); + Если НЕ ДействиеРазрешено() Тогда + Возврат; + КонецЕсли; + + ТекущиеДанные = Элементы.Список.ТекущиеДанные; + + Если РасширенияПоддерживающиеПредпросмотр.НайтиПоЗначению(ТекущиеДанные.Расширение) <> Неопределено Тогда + ДанныеФайла = ДанныеФайла(ТекущиеДанные.Ссылка, УникальныйИдентификатор); + АдресДанныхФайла = ДанныеФайла.НавигационнаяСсылкаТекущейВерсии; + Иначе + ТекстНевыбраннойКартинки = НСтр("ru = 'Нет данных для предварительного просмотра'"); + АдресДанныхФайла = Неопределено; + Элементы.АдресДанныхФайла.ТекстНевыбраннойКартинки = ТекстНевыбраннойКартинки; + КонецЕсли; + КонецПроцедуры #КонецОбласти @@ -432,7 +479,7 @@ ПараметрыДобавления.Вставить("ОбработчикРезультата", Неопределено); ПараметрыДобавления.Вставить("ВладелецФайла", ВладелецФайла); ПараметрыДобавления.Вставить("ФормаВладелец", ЭтотОбъект); - ПараметрыДобавления.Вставить("НеОткрыватьКарточкуПослеСозданияИзФайла", Неопределено); + ПараметрыДобавления.Вставить("НеОткрыватьКарточкуПослеСозданияИзФайла", Истина); Если ФайловыеФункцииСлужебныйКлиент.РасширениеРаботыСФайламиПодключено() Тогда РаботаСФайламиСлужебныйКлиент.ДобавитьИзФайловойСистемыСРасширением(ПараметрыДобавления); Иначе @@ -455,7 +502,7 @@ ПараметрыДобавления.Вставить("ОбработчикРезультата", Неопределено); ПараметрыДобавления.Вставить("ВладелецФайла", ВладелецФайла); ПараметрыДобавления.Вставить("ФормаВладелец", ЭтотОбъект); - ПараметрыДобавления.Вставить("НеОткрыватьКарточкуПослеСозданияИзФайла", Неопределено); + ПараметрыДобавления.Вставить("НеОткрыватьКарточкуПослеСозданияИзФайла", Истина); РаботаСФайламиСлужебныйКлиент.ДобавитьНаОсновеШаблона(ПараметрыДобавления); КонецПроцедуры @@ -474,8 +521,9 @@ ПараметрыДобавления.Вставить("ОбработчикРезультата", Неопределено); ПараметрыДобавления.Вставить("ВладелецФайла", ВладелецФайла); ПараметрыДобавления.Вставить("ФормаВладелец", ЭтотОбъект); - ПараметрыДобавления.Вставить("НеОткрыватьКарточкуПослеСозданияИзФайла", Неопределено); - РаботаСФайламиСлужебныйКлиент.ДобавитьСоСканера(ПараметрыДобавления); + ПараметрыДобавления.Вставить("НеОткрыватьКарточкуПослеСозданияИзФайла", Истина); + ПараметрыДобавления.Вставить("ЭтоФайл", Истина); + ФайловыеФункцииСлужебныйКлиент.ДобавитьСоСканера(ПараметрыДобавления); КонецПроцедуры @@ -487,6 +535,65 @@ КонецПроцедуры +&НаКлиенте +Процедура Предпросмотр(Команда) + + Предпросмотр = Не Предпросмотр; + Элементы.Предпросмотр.Пометка = Предпросмотр; + УстановитьВидимостьПредпросмотра(Предпросмотр); + СохранитьВариантПредпросмотра(ТипСправочникаСФайлами, Предпросмотр); + +КонецПроцедуры + +&НаКлиенте +Процедура Отправить(Команда) + + ФайловыеФункцииСлужебныйКлиент.ОтправитьФайлыПоПочте( + Элементы.Список.ВыделенныеСтроки, УникальныйИдентификатор, ПараметрыОтправки, Истина); + +КонецПроцедуры + +&НаКлиенте +Процедура Печать(Команда) + + Если Не ФайловыеКомандыДоступны() Тогда + Возврат; + КонецЕсли; + + #Если ВебКлиент Тогда + ПоказатьПредупреждение(, НСтр("ru = 'В Веб-клиенте печать файлов не поддерживается.'")); + Возврат; + #КонецЕсли + + СистемнаяИнфо = Новый СистемнаяИнформация; + Если СистемнаяИнфо.ТипПлатформы <> ТипПлатформы.Windows_x86 + И СистемнаяИнфо.ТипПлатформы <> ТипПлатформы.Windows_x86_64 Тогда + ПоказатьПредупреждение(, НСтр("ru = 'Печать файлов возможна только в Windows.'")); + Возврат; + КонецЕсли; + + ВыделенныеСтроки = Элементы.Список.ВыделенныеСтроки; + Если ВыделенныеСтроки.Количество() > 1 Тогда + ДанныеФайлов = РаботаСФайламиСлужебныйВызовСервера.ДанныеФайловДляОткрытия( + ВыделенныеСтроки, + ЭтаФорма.УникальныйИдентификатор); + + РаботаСФайламиКлиент.НапечататьФайлы(ДанныеФайлов); + Иначе + ДанныеФайла = РаботаСФайламиСлужебныйВызовСервера.ДанныеФайлаДляОткрытия( + Элементы.Список.ТекущаяСтрока, + ЭтаФорма.УникальныйИдентификатор, + Неопределено, + ПредыдущийАдресФайла); + + ДанныеФайлов = Новый Массив; + ДанныеФайлов.Добавить(ДанныеФайла); + + РаботаСФайламиКлиент.НапечататьФайлы(ДанныеФайлов); + КонецЕсли; + +КонецПроцедуры + #КонецОбласти #Область СлужебныеПроцедурыИФункции @@ -600,21 +707,69 @@ &НаКлиенте Процедура УстановитьДоступностьФайловыхКоманд() - Если Элементы.Список.ТекущиеДанные = Неопределено Тогда - Возврат; + ТекущиеДанные = Элементы.Список.ТекущиеДанные; + + Если ТекущиеДанные <> Неопределено + И ТипЗнч(Элементы.Список.ТекущаяСтрока) <> Тип("СтрокаГруппировкиДинамическогоСписка") Тогда + + УстановитьДоступностьКоманд( + ТекущиеДанные.РедактируетТекущийПользователь, + ТекущиеДанные.Редактирует, + ТекущиеДанные.ПодписанЭП, + ТекущиеДанные.Зашифрован); + Иначе + СделатьКомандыНедоступными(); КонецЕсли; - ФайлСсылка = Элементы.Список.ТекущаяСтрока; - Если Не ФайловыеКомандыДоступны(ФайлСсылка) Тогда - Возврат; - КонецЕсли; - ДанныеФайла = Элементы.Список.ТекущиеДанные; +КонецПроцедуры + +&НаКлиенте +Процедура СделатьКомандыНедоступными() - УстановитьДоступностьКоманд( - ДанныеФайла.РедактируетТекущийПользователь, - ДанныеФайла.Редактирует, - ДанныеФайла.ПодписанЭП, - ДанныеФайла.Зашифрован); + Элементы.ФормаЗакончитьРедактирование.Доступность = Ложь; + Элементы.СписокКонтекстноеМенюЗакончитьРедактирование.Доступность = Ложь; + + Элементы.ФормаСохранитьИзменения.Доступность = Ложь; + Элементы.СписокКонтекстноеМенюСохранитьИзменения.Доступность = Ложь; + + Элементы.ФормаОсвободить.Доступность = Ложь; + Элементы.СписокКонтекстноеМенюОсвободить.Доступность = Ложь; + + Элементы.ФормаЗанять.Доступность = Ложь; + Элементы.СписокКонтекстноеМенюЗанять.Доступность = Ложь; + + Элементы.ФормаРедактировать.Доступность = Ложь; + Элементы.СписокКонтекстноеМенюРедактировать.Доступность = Ложь; + + Элементы.ФормаПодписать.Доступность = Ложь; + Элементы.СписокКонтекстноеМенюПодписать.Доступность = Ложь; + + Элементы.ФормаСохранитьВместеСПодписью.Доступность = Ложь; + Элементы.СписокКонтекстноеМенюСохранитьВместеСПодписью.Доступность = Ложь; + + Элементы.ФормаЗашифровать.Доступность = Ложь; + Элементы.СписокКонтекстноеМенюЗашифровать.Доступность = Ложь; + + Элементы.ФормаРасшифровать.Доступность = Ложь; + Элементы.СписокКонтекстноеМенюРасшифровать.Доступность = Ложь; + + Элементы.ФормаДобавитьПодписьИзФайла.Доступность = Ложь; + Элементы.СписокКонтекстноеМенюДобавитьПодписьИзФайла.Доступность = Ложь; + + Элементы.ФормаСохранитьКак.Доступность = Ложь; + Элементы.СписокКонтекстноеМенюСохранитьКак.Доступность = Ложь; + + Элементы.ФормаОткрытьКаталогФайла.Доступность = Ложь; + Элементы.СписокКонтекстноеМенюОткрытьКаталогФайла.Доступность = Ложь; + + Элементы.ФормаОткрыть.Доступность = Ложь; + Элементы.СписокКонтекстноеМенюОткрыть.Доступность = Ложь; + + Элементы.Печать.Доступность = Ложь; + Элементы.СписокКонтекстноеМенюПечать.Доступность = Ложь; + + Элементы.Отправить.Доступность = Ложь; + Элементы.СписокКонтекстноеМенюОтправить.Доступность = Ложь; КонецПроцедуры @@ -648,6 +803,21 @@ Элементы.ФормаРасшифровать.Доступность = Зашифрован; Элементы.СписокКонтекстноеМенюРасшифровать.Доступность = Зашифрован; + Элементы.ФормаСохранитьКак.Доступность = Истина; + Элементы.СписокКонтекстноеМенюСохранитьКак.Доступность = Истина; + + Элементы.ФормаОткрытьКаталогФайла.Доступность = Истина; + Элементы.СписокКонтекстноеМенюОткрытьКаталогФайла.Доступность = Истина; + + Элементы.ФормаОткрыть.Доступность = Истина; + Элементы.СписокКонтекстноеМенюОткрыть.Доступность = Истина; + + Элементы.Печать.Доступность = Истина; + Элементы.СписокКонтекстноеМенюПечать.Доступность = Истина; + + Элементы.Отправить.Доступность = Истина; + Элементы.СписокКонтекстноеМенюОтправить.Доступность = Истина; + КонецПроцедуры &НаКлиенте @@ -678,7 +848,7 @@ // ПараметрыПеретаскивания - Параметры перетаскивания. // ВладелецФайлаСписка - ЛюбаяСсылка - владелец файла. - Если ТипЗнч(ПараметрыПеретаскивания.Значение) = Тип("Файл") И ПараметрыПеретаскивания.Значение.ЭтоФайл() = Истина Тогда + Если ТипЗнч(ПараметрыПеретаскивания.Значение) = Тип("Файл") И ПараметрыПеретаскивания.Значение.ЭтоФайл() Тогда ПараметрыДобавления = Новый Структура; ПараметрыДобавления.Вставить("ОбработчикРезультата", Неопределено); @@ -686,10 +856,10 @@ ПараметрыДобавления.Вставить("ВладелецФайла", ВладелецФайлаСписка); ПараметрыДобавления.Вставить("ФормаВладелец", ЭтотОбъект); ПараметрыДобавления.Вставить("ИмяСоздаваемогоФайла", Неопределено); - ПараметрыДобавления.Вставить("НеОткрыватьКарточкуПослеСозданияИзФайла", Неопределено); + ПараметрыДобавления.Вставить("НеОткрыватьКарточкуПослеСозданияИзФайла", Истина); РаботаСФайламиСлужебныйКлиент.ДобавитьИзФайловойСистемыСРасширением(ПараметрыДобавления); - ИначеЕсли ТипЗнч(ПараметрыПеретаскивания.Значение) = Тип("Файл") И ПараметрыПеретаскивания.Значение.ЭтоФайл() = Ложь Тогда + ИначеЕсли ТипЗнч(ПараметрыПеретаскивания.Значение) = Тип("Файл") И Не ПараметрыПеретаскивания.Значение.ЭтоФайл() Тогда ПоказатьПредупреждение(, НСтр("ru = 'Выберите только файлы без каталогов.'")); Возврат; @@ -746,10 +916,9 @@ // Вывод ошибок. КоличествоОшибок = ТекстыОшибок.Количество(); Если КоличествоОшибок > 0 Тогда - Результат = СтандартныеПодсистемыКлиентСервер.НовыйРезультатВыполнения(); - Результат.ВыводПредупреждения.Использование = Истина; + Результат = Новый Структура; Если КоличествоОшибок = 1 Тогда - Результат.ВыводПредупреждения.Текст = ТекстыОшибок[0]; + СтандартныеПодсистемыКлиентСервер.ВывестиПредупреждение(Результат, ТекстыОшибок[0]); Иначе КраткийТекстВсехОшибок = СтрЗаменить(НСтр("ru = 'При выполнении возникли ошибки (%1).'"), "%1", Строка(КоличествоОшибок)); ПолныйТекстВсехОшибок = ""; @@ -759,8 +928,7 @@ КонецЕсли; ПолныйТекстВсехОшибок = ПолныйТекстВсехОшибок + ТекстОшибки; КонецЦикла; - Результат.ВыводПредупреждения.Текст = КраткийТекстВсехОшибок; - Результат.ВыводПредупреждения.ТекстОшибок = ПолныйТекстВсехОшибок; + СтандартныеПодсистемыКлиентСервер.ВывестиПредупреждение(Результат, КраткийТекстВсехОшибок, ПолныйТекстВсехОшибок); КонецЕсли; СтандартныеПодсистемыКлиент.ПоказатьРезультатВыполнения(ЭтотОбъект, Результат); КонецЕсли; @@ -781,4 +949,36 @@ КонецПроцедуры +&НаСервереБезКонтекста +Процедура СохранитьВариантПредпросмотра(ТипСправочникаСФайлами, Предпросмотр) + ОбщегоНазначения.ХранилищеОбщихНастроекСохранить(ТипСправочникаСФайлами, "Предпросмотр", Предпросмотр); +КонецПроцедуры + +&НаКлиенте +Процедура УстановитьВидимостьПредпросмотра(ИспользоватьПредпросмотр) + + Элементы.АдресДанныхФайла.Видимость = ИспользоватьПредпросмотр; + Элементы.Предпросмотр.Пометка = ИспользоватьПредпросмотр; + +КонецПроцедуры + +&НаКлиенте +Функция ДействиеРазрешено() + + ДействиеРазрешено = Истина; + Если Элементы.Список.ТекущиеДанные = Неопределено Тогда + ДействиеРазрешено = Ложь; + КонецЕсли; + + Возврат ДействиеРазрешено; + +КонецФункции + +&НаСервереБезКонтекста +Функция ДанныеФайла(Знач ПрисоединенныйФайл, Знач ИдентификаторФормы = Неопределено) + + Возврат РаботаСФайламиСлужебныйВызовСервера.ДанныеФайлаДляОткрытия(ПрисоединенныйФайл, ИдентификаторФормы); + +КонецФункции + #КонецОбласти diff --git a/SSL/src/Catalogs/Файлы/Forms/ФормаЭкспортаПапки/Form.form b/SSL/src/Catalogs/Файлы/Forms/ФормаЭкспортаПапки/Form.form index b9d00fff6..3892b7b84 100644 --- a/SSL/src/Catalogs/Файлы/Forms/ФормаЭкспортаПапки/Form.form +++ b/SSL/src/Catalogs/Файлы/Forms/ФормаЭкспортаПапки/Form.form @@ -230,7 +230,6 @@ Vertical true true - UseIfNecessary auto true @@ -501,7 +500,7 @@ СохранитьПапку - Auto + DontUse Auto diff --git a/SSL/src/Catalogs/Файлы/Forms/ФормаЭкспортаПапки/Module.bsl b/SSL/src/Catalogs/Файлы/Forms/ФормаЭкспортаПапки/Module.bsl index 61c0d3449..6be46b0b8 100644 --- a/SSL/src/Catalogs/Файлы/Forms/ФормаЭкспортаПапки/Module.bsl +++ b/SSL/src/Catalogs/Файлы/Forms/ФормаЭкспортаПапки/Module.bsl @@ -15,8 +15,8 @@ МодульЭлектроннаяПодписьКлиентСервер = ОбщегоНазначения.ОбщийМодуль("ЭлектроннаяПодписьКлиентСервер"); - РасширениеДляЗашифрованныхФайлов = МодульЭлектроннаяПодписьКлиентСервер.ПерсональныеНастройки( - ).РасширениеДляЗашифрованныхФайлов; + РасширениеДляЗашифрованныхФайлов = + МодульЭлектроннаяПодписьКлиентСервер.ПерсональныеНастройки().РасширениеДляЗашифрованныхФайлов; Иначе РасширениеДляЗашифрованныхФайлов = "p7m"; КонецЕсли; @@ -38,7 +38,7 @@ ПапкаДляЭкспортаПолная = ПапкаДляЭкспорта + Строка(ЧтоСохраняем) - + ОбщегоНазначенияКлиентСервер.РазделительПути(); + + ПолучитьРазделительПути(); КонецПроцедуры @@ -96,7 +96,7 @@ ПапкаДляЭкспортаПолная = ПапкаДляЭкспорта + Строка(ЧтоСохраняем) - + ОбщегоНазначенияКлиентСервер.РазделительПути(); + + ПолучитьРазделительПути(); КонецЕсли; @@ -347,7 +347,7 @@ ПараметрыВыполнения.БазовыйКаталогСохраненияФайла = ( ПараметрыВыполнения.БазовыйКаталогСохраненияФайла + ПараметрыВыполнения.ЗаписьФайла.НаименованиеПапки - + ОбщегоНазначенияКлиентСервер.РазделительПути()); + + ПолучитьРазделительПути()); КонецЕсли; // Проверим наличие базового каталога: если нет - создадим. diff --git a/SSL/src/Catalogs/Файлы/Forms/ФормаЭлемента/Form.form b/SSL/src/Catalogs/Файлы/Forms/ФормаЭлемента/Form.form index 185b5a873..47bd47fda 100644 --- a/SSL/src/Catalogs/Файлы/Forms/ФормаЭлемента/Form.form +++ b/SSL/src/Catalogs/Файлы/Forms/ФормаЭлемента/Form.form @@ -2552,7 +2552,6 @@ true true true - UseIfNecessary auto true @@ -3137,7 +3136,7 @@ Picture - Auto + DontUse Auto @@ -3162,7 +3161,7 @@ СкопироватьВыполнить - Auto + DontUse Auto @@ -3188,7 +3187,7 @@ TextPicture - Auto + DontUse Auto @@ -3215,7 +3214,7 @@ TextPicture true - Auto + DontUse Auto @@ -3242,7 +3241,7 @@ TextPicture true - Auto + DontUse Auto @@ -3269,7 +3268,7 @@ TextPicture true - Auto + DontUse Auto @@ -3296,7 +3295,7 @@ TextPicture true - Auto + DontUse Auto @@ -3319,7 +3318,7 @@ TextPicture - Auto + DontUse Auto @@ -3345,7 +3344,7 @@ TextPicture - Auto + DontUse Auto @@ -3372,7 +3371,7 @@ TextPicture true - Auto + DontUse Auto @@ -3398,7 +3397,7 @@ Text - Auto + DontUse Auto @@ -3423,7 +3422,7 @@ Подписать - Auto + DontUse Auto @@ -3448,7 +3447,7 @@ Зашифровать - Auto + DontUse Auto @@ -3470,7 +3469,7 @@ Расшифровать - Auto + DontUse Auto @@ -3492,7 +3491,7 @@ ДобавитьПодписьИзФайла - Auto + DontUse Auto @@ -3514,7 +3513,7 @@ СохранитьВместеСПодписью - Auto + DontUse Auto @@ -3536,7 +3535,7 @@ ОткрытьПодпись - Auto + DontUse Auto @@ -3558,7 +3557,7 @@ Проверить - Auto + DontUse Auto @@ -3580,7 +3579,7 @@ ПроверитьВсе - Auto + DontUse Auto @@ -3602,7 +3601,7 @@ Сохранить - Auto + DontUse Auto @@ -3624,7 +3623,7 @@ Удалить - Auto + DontUse Auto @@ -3646,7 +3645,7 @@ ОткрытьСертификатШифрования - Auto + DontUse Auto diff --git a/SSL/src/Catalogs/Файлы/Forms/ФормаЭлемента/Module.bsl b/SSL/src/Catalogs/Файлы/Forms/ФормаЭлемента/Module.bsl index 7a637cdaf..1e93281ea 100644 --- a/SSL/src/Catalogs/Файлы/Forms/ФормаЭлемента/Module.bsl +++ b/SSL/src/Catalogs/Файлы/Forms/ФормаЭлемента/Module.bsl @@ -57,9 +57,12 @@ НовыйФайлЗаписан = Ложь; // СтандартныеПодсистемы.Свойства - ДополнительныеПараметры = Новый Структура; - ДополнительныеПараметры.Вставить("ИмяЭлементаДляРазмещения", "ГруппаДополнительныеРеквизиты"); - УправлениеСвойствами.ПриСозданииНаСервере(ЭтотОбъект, ДополнительныеПараметры); + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.Свойства") Тогда + ДополнительныеПараметры = Новый Структура; + ДополнительныеПараметры.Вставить("ИмяЭлементаДляРазмещения", "ГруппаДополнительныеРеквизиты"); + МодульУправлениеСвойствами = ОбщегоНазначения.ОбщийМодуль("УправлениеСвойствами"); + МодульУправлениеСвойствами.ПриСозданииНаСервере(ЭтотОбъект, ДополнительныеПараметры); + КонецЕсли; // Конец СтандартныеПодсистемы.Свойства Если ТипЗнч(Объект.ВладелецФайла) = Тип("СправочникСсылка.ПапкиФайлов") Тогда @@ -213,8 +216,11 @@ КонецЕсли; // СтандартныеПодсистемы.Свойства - Если УправлениеСвойствамиКлиент.ОбрабатыватьОповещения(ЭтотОбъект, ИмяСобытия, Параметр) Тогда - ОбновитьЭлементыДополнительныхРеквизитов(); + Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.Свойства") Тогда + МодульУправлениеСвойствамиКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("УправлениеСвойствамиКлиент"); + Если МодульУправлениеСвойствамиКлиент.ОбрабатыватьОповещения(ЭтотОбъект, ИмяСобытия, Параметр) Тогда + ОбновитьЭлементыДополнительныхРеквизитов(); + КонецЕсли; КонецЕсли; // Конец СтандартныеПодсистемы.Свойства @@ -224,7 +230,10 @@ Процедура ПриЧтенииНаСервере(ТекущийОбъект) // СтандартныеПодсистемы.Свойства - УправлениеСвойствами.ПриЧтенииНаСервере(ЭтотОбъект, ТекущийОбъект); + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.Свойства") Тогда + МодульУправлениеСвойствами = ОбщегоНазначения.ОбщийМодуль("УправлениеСвойствами"); + МодульУправлениеСвойствами.ПриЧтенииНаСервере(ЭтотОбъект, ТекущийОбъект); + КонецЕсли; // Конец СтандартныеПодсистемы.Свойства КонецПроцедуры @@ -240,7 +249,10 @@ Процедура ПередЗаписьюНаСервере(Отказ, ТекущийОбъект) // СтандартныеПодсистемы.Свойства - УправлениеСвойствами.ПередЗаписьюНаСервере(ЭтотОбъект, ТекущийОбъект); + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.Свойства") Тогда + МодульУправлениеСвойствами = ОбщегоНазначения.ОбщийМодуль("УправлениеСвойствами"); + МодульУправлениеСвойствами.ПередЗаписьюНаСервере(ЭтотОбъект, ТекущийОбъект); + КонецЕсли; // Конец СтандартныеПодсистемы.Свойства КонецПроцедуры @@ -300,7 +312,10 @@ Процедура ОбработкаПроверкиЗаполненияНаСервере(Отказ, ПроверяемыеРеквизиты) // СтандартныеПодсистемы.Свойства - УправлениеСвойствами.ОбработкаПроверкиЗаполнения(ЭтотОбъект, Отказ, ПроверяемыеРеквизиты); + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.Свойства") Тогда + МодульУправлениеСвойствами = ОбщегоНазначения.ОбщийМодуль("УправлениеСвойствами"); + МодульУправлениеСвойствами.ОбработкаПроверкиЗаполнения(ЭтотОбъект, Отказ, ПроверяемыеРеквизиты); + КонецЕсли; // Конец СтандартныеПодсистемы.Свойства КонецПроцедуры @@ -616,7 +631,10 @@ &НаКлиенте Процедура Подключаемый_РедактироватьСоставСвойств() - УправлениеСвойствамиКлиент.РедактироватьСоставСвойств(ЭтотОбъект, Объект.Ссылка); + Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.Свойства") Тогда + МодульУправлениеСвойствамиКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("УправлениеСвойствамиКлиент"); + МодульУправлениеСвойствамиКлиент.РедактироватьСоставСвойств(ЭтотОбъект, Объект.Ссылка); + КонецЕсли; КонецПроцедуры @@ -666,7 +684,7 @@ ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.НеРавно; ОтборЭлемента.ПравоеЗначение = Справочники.Пользователи.ПустаяСсылка(); - Элемент.Оформление.УстановитьЗначениеПараметра("ЦветТекста", ЦветаСтиля.НедоступныеДанныеЦвет); + Элемент.Оформление.УстановитьЗначениеПараметра("ЦветТекста", ЦветаСтиля.ТекстЗапрещеннойЯчейкиЦвет); // @@ -1235,7 +1253,10 @@ &НаСервере Процедура ОбновитьЭлементыДополнительныхРеквизитов() - УправлениеСвойствами.ОбновитьЭлементыДополнительныхРеквизитов(ЭтотОбъект); + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.Свойства") Тогда + МодульУправлениеСвойствами = ОбщегоНазначения.ОбщийМодуль("УправлениеСвойствами"); + МодульУправлениеСвойствами.ОбновитьЭлементыДополнительныхРеквизитов(ЭтотОбъект); + КонецЕсли; КонецПроцедуры diff --git a/SSL/src/Catalogs/Файлы/Help/ru.html b/SSL/src/Catalogs/Файлы/Help/ru.html index 3a14a5a25..519c04109 100644 --- a/SSL/src/Catalogs/Файлы/Help/ru.html +++ b/SSL/src/Catalogs/Файлы/Help/ru.html @@ -45,11 +45,11 @@
    Программой будет автоматически создана и открыта Карточка файла.
  • Со сканера 
    • -
      Вариант создания файла Со сканера становится доступным, если к компьютеру подключен сканер (более подробно см. документацию к сканеру) и на компьютере подключена компонента для работы со сканером. Также необходимо настроить сканирование.
      +
      Вариант создания файла Со сканера становится доступным, если к компьютеру подключен сканер (более подробно см. документацию к сканеру) и на компьютере подключена компонента для работы со сканером. Также необходимо настроить сканирование.
    • Если все условия соблюдены и настройки выполнены, можно получить файл со сканера.
    • -
      Для этого необходимо  следовать инструкциям Помощника сканирования.
      +
      Для этого необходимо  следовать инструкциям Помощника сканирования.
    • После того как документ отсканирован, выполните команду Принять, после этого файлу автоматически присваивается код и создается карточка файла, которая выводится на экран. В поле Наименование также автоматически проставляется код. Отредактируйте нужные поля, нажмите Записать и закрыть, для того чтобы сохранить карточку файла.
    • См. также:

      • Версии файлов; diff --git a/SSL/src/Catalogs/Файлы/ManagerModule.bsl b/SSL/src/Catalogs/Файлы/ManagerModule.bsl index 2c57ab351..af2b50bd3 100644 --- a/SSL/src/Catalogs/Файлы/ManagerModule.bsl +++ b/SSL/src/Catalogs/Файлы/ManagerModule.bsl @@ -18,3 +18,30 @@ #КонецОбласти #КонецЕсли + +#Область ОбработчикиСобытий + +Процедура ОбработкаПолученияФормы(ВидФормы, Параметры, ВыбраннаяФорма, ДополнительнаяИнформация, СтандартнаяОбработка) + +#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда + + Если ВидФормы = "ФормаСписка" Тогда + ТекущаяСтрока = ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(Параметры, "ТекущаяСтрока"); + Если ТипЗнч(ТекущаяСтрока) = Тип("СправочникСсылка.Файлы") И Не ТекущаяСтрока.Пустая() Тогда + СтандартнаяОбработка = Ложь; + ВладелецФайла = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(ТекущаяСтрока, "ВладелецФайла"); + Если ТипЗнч(ВладелецФайла) = Тип("СправочникСсылка.ПапкиФайлов") Тогда + Параметры.Вставить("Папка", ВладелецФайла); + ВыбраннаяФорма = "Справочник.Файлы.Форма.Файлы"; + Иначе + Параметры.Вставить("ВладелецФайла", ВладелецФайла); + ВыбраннаяФорма = "Справочник.Файлы.Форма.ФормаСпискаПрисоединенныхФайлов"; + КонецЕсли; + КонецЕсли; + КонецЕсли; + +#КонецЕсли + +КонецПроцедуры + +#КонецОбласти diff --git a/SSL/src/Catalogs/Файлы/Файлы.mdo b/SSL/src/Catalogs/Файлы/Файлы.mdo index 9037dd05c..1461d66d1 100644 --- a/SSL/src/Catalogs/Файлы/Файлы.mdo +++ b/SSL/src/Catalogs/Файлы/Файлы.mdo @@ -169,6 +169,7 @@ Автор + CatalogRef.ВнешниеПользователи CatalogRef.Пользователи @@ -178,7 +179,6 @@ ShowError - DontUse Use Catalog.Пользователи.EmptyRef @@ -865,20 +865,6 @@ PersonalComputer MobileDevice - - ВыборУстройстваСканирования - - ru - Выбор устройства сканирования - - - - ru - - - PersonalComputer - MobileDevice - ИнформацияФайлНеБылИзменен @@ -888,34 +874,6 @@ PersonalComputer MobileDevice - - НастройкаСканирования - - ru - Настройка сканирования - - - - ru - - - PersonalComputer - MobileDevice - - - НастройкаСканированияНаСеанс - - ru - Настройка сканирования на сеанс - - - - ru - - - PersonalComputer - MobileDevice - РедактированиеТекстовогоФайла @@ -959,20 +917,6 @@ PersonalComputer MobileDevice - - РезультатСканирования - - ru - Результат сканирования - - - - ru - - - PersonalComputer - MobileDevice - СписокЗанятыхСВопросом @@ -1090,10 +1034,10 @@ MobileDevice - ФормаГруповаяОперацияНаПапке + ФормаГрупповаяОперацияНаПапке ru - Форма груповая операция на папке + Форма групповая операция на папке diff --git a/SSL/src/Catalogs/ШаблоныАнкет/Forms/ФормаВыбора/Form.form b/SSL/src/Catalogs/ШаблоныАнкет/Forms/ФормаВыбора/Form.form index 78c4c8869..c3ce2c94e 100644 --- a/SSL/src/Catalogs/ШаблоныАнкет/Forms/ФормаВыбора/Form.form +++ b/SSL/src/Catalogs/ШаблоныАнкет/Forms/ФормаВыбора/Form.form @@ -307,7 +307,6 @@ true true true - UseIfNecessary auto true diff --git a/SSL/src/Catalogs/ШаблоныАнкет/Forms/ФормаМастераТабличныхВопросов/Form.form b/SSL/src/Catalogs/ШаблоныАнкет/Forms/ФормаМастераТабличныхВопросов/Form.form index 0a55faeae..e447e9843 100644 --- a/SSL/src/Catalogs/ШаблоныАнкет/Forms/ФормаМастераТабличныхВопросов/Form.form +++ b/SSL/src/Catalogs/ШаблоныАнкет/Forms/ФормаМастераТабличныхВопросов/Form.form @@ -2667,7 +2667,6 @@ true true true - UseIfNecessary auto true @@ -2989,7 +2988,7 @@ СледующаяСтраница - Auto + DontUse Auto @@ -3011,7 +3010,7 @@ ПредыдущаяСтраница - Auto + DontUse Auto @@ -3036,7 +3035,7 @@ ЗаполнитьВариантыОтветовОтветыВСтроках - Auto + DontUse Auto @@ -3061,7 +3060,7 @@ ЗаполнитьВариантыОтветовОтветыВКолонках - Auto + DontUse Auto diff --git a/SSL/src/Catalogs/ШаблоныАнкет/Forms/ФормаПростыхВопросов/Form.form b/SSL/src/Catalogs/ШаблоныАнкет/Forms/ФормаПростыхВопросов/Form.form index ffe40d5a5..789c84aeb 100644 --- a/SSL/src/Catalogs/ШаблоныАнкет/Forms/ФормаПростыхВопросов/Form.form +++ b/SSL/src/Catalogs/ШаблоныАнкет/Forms/ФормаПростыхВопросов/Form.form @@ -362,7 +362,6 @@ true true true - UseIfNecessary auto true @@ -494,7 +493,7 @@ ПеренестиВШаблон - Auto + DontUse Auto diff --git a/SSL/src/Catalogs/ШаблоныАнкет/Forms/ФормаПростыхВопросов/Module.bsl b/SSL/src/Catalogs/ШаблоныАнкет/Forms/ФормаПростыхВопросов/Module.bsl index 85b0501ce..661e08fdc 100644 --- a/SSL/src/Catalogs/ШаблоныАнкет/Forms/ФормаПростыхВопросов/Module.bsl +++ b/SSL/src/Catalogs/ШаблоныАнкет/Forms/ФормаПростыхВопросов/Module.bsl @@ -62,12 +62,12 @@ Если Не ЗначениеЗаполнено(Формулировка) Тогда Отказ = Истина; - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(НСтр("ru = ' Не заполнена формулировка'"),,"Формулировка"); + ОбщегоНазначенияКлиентСервер.СообщитьПользователю(НСтр("ru = 'Не заполнена формулировка'"),,"Формулировка"); КонецЕсли; Если ТипСтрокиДерева = "Вопрос" И (Не ЗначениеЗаполнено(ЭлементарныйВопрос)) Тогда Отказ = Истина; - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(НСтр("ru = ' Не указан элементарный вопрос'"),,"ЭлементарныйВопрос"); + ОбщегоНазначенияКлиентСервер.СообщитьПользователю(НСтр("ru = 'Не указан элементарный вопрос'"),,"ЭлементарныйВопрос"); КонецЕсли; Если Отказ Тогда diff --git a/SSL/src/Catalogs/ШаблоныАнкет/Forms/ФормаСписка/Form.form b/SSL/src/Catalogs/ШаблоныАнкет/Forms/ФормаСписка/Form.form index ab2a7c14b..8fe38e73b 100644 --- a/SSL/src/Catalogs/ШаблоныАнкет/Forms/ФормаСписка/Form.form +++ b/SSL/src/Catalogs/ШаблоныАнкет/Forms/ФормаСписка/Form.form @@ -306,7 +306,6 @@ true true true - UseIfNecessary auto true diff --git a/SSL/src/Catalogs/ШаблоныАнкет/Forms/ФормаЭлемента/Form.form b/SSL/src/Catalogs/ШаблоныАнкет/Forms/ФормаЭлемента/Form.form index d7754f7ed..428517f81 100644 --- a/SSL/src/Catalogs/ШаблоныАнкет/Forms/ФормаЭлемента/Form.form +++ b/SSL/src/Catalogs/ШаблоныАнкет/Forms/ФормаЭлемента/Form.form @@ -1528,7 +1528,6 @@ true true true - UseIfNecessary auto true @@ -2147,7 +2146,7 @@ ДобавитьРаздел - Auto + DontUse Auto @@ -2173,7 +2172,7 @@ ДобавитьПростойВопрос - Auto + DontUse Auto @@ -2195,7 +2194,7 @@ ЗакончитьРедактирование - Auto + DontUse Auto @@ -2221,7 +2220,7 @@ ДобавитьВопросСУсловием - Auto + DontUse Auto @@ -2247,7 +2246,7 @@ ДобавитьТабличныйВопрос - Auto + DontUse Auto @@ -2269,7 +2268,7 @@ ОткрытьФормуЗаполненияАнкеты - Auto + DontUse Auto diff --git a/SSL/src/Catalogs/ШаблоныЗаданийОчереди/Forms/ФормаЭлемента/Form.form b/SSL/src/Catalogs/ШаблоныЗаданийОчереди/Forms/ФормаЭлемента/Form.form index b4b8dc84b..4598eba78 100644 --- a/SSL/src/Catalogs/ШаблоныЗаданийОчереди/Forms/ФормаЭлемента/Form.form +++ b/SSL/src/Catalogs/ШаблоныЗаданийОчереди/Forms/ФормаЭлемента/Form.form @@ -372,7 +372,6 @@ true true true - UseIfNecessary auto true @@ -448,7 +447,7 @@ TextPicture - Auto + DontUse Auto diff --git a/SSL/src/ChartsOfCharacteristicTypes/ВопросыДляАнкетирования/Forms/ФормаВыбора/Form.form b/SSL/src/ChartsOfCharacteristicTypes/ВопросыДляАнкетирования/Forms/ФормаВыбора/Form.form index c39c72d74..44274be9e 100644 --- a/SSL/src/ChartsOfCharacteristicTypes/ВопросыДляАнкетирования/Forms/ФормаВыбора/Form.form +++ b/SSL/src/ChartsOfCharacteristicTypes/ВопросыДляАнкетирования/Forms/ФормаВыбора/Form.form @@ -277,7 +277,6 @@ true true true - UseIfNecessary auto true diff --git a/SSL/src/ChartsOfCharacteristicTypes/ВопросыДляАнкетирования/Forms/ФормаСписка/Form.form b/SSL/src/ChartsOfCharacteristicTypes/ВопросыДляАнкетирования/Forms/ФормаСписка/Form.form index 59faf6f2a..c79eaf087 100644 --- a/SSL/src/ChartsOfCharacteristicTypes/ВопросыДляАнкетирования/Forms/ФормаСписка/Form.form +++ b/SSL/src/ChartsOfCharacteristicTypes/ВопросыДляАнкетирования/Forms/ФормаСписка/Form.form @@ -349,7 +349,6 @@ true true true - UseIfNecessary auto true diff --git a/SSL/src/ChartsOfCharacteristicTypes/ВопросыДляАнкетирования/Forms/ФормаЭлемента/Form.form b/SSL/src/ChartsOfCharacteristicTypes/ВопросыДляАнкетирования/Forms/ФормаЭлемента/Form.form index 4d8ea18d7..bfa97c836 100644 --- a/SSL/src/ChartsOfCharacteristicTypes/ВопросыДляАнкетирования/Forms/ФормаЭлемента/Form.form +++ b/SSL/src/ChartsOfCharacteristicTypes/ВопросыДляАнкетирования/Forms/ФормаЭлемента/Form.form @@ -1251,6 +1251,7 @@ true Auto Auto + true true true @@ -1330,7 +1331,6 @@ 77 true true - false false Left @@ -1350,7 +1350,6 @@ Пустая 72 - false ПустаяExtendedTooltip 127 @@ -1381,7 +1380,6 @@ Зависимые параметры 72 - false ЗависимыеПараметрыExtendedTooltip 104 @@ -1419,7 +1417,6 @@ true true true - UseIfNecessary auto true @@ -1553,7 +1550,7 @@ true - Auto + DontUse Auto @@ -1579,7 +1576,7 @@ true - Auto + DontUse Auto diff --git a/SSL/src/ChartsOfCharacteristicTypes/ВопросыДляАнкетирования/ВопросыДляАнкетирования.mdo b/SSL/src/ChartsOfCharacteristicTypes/ВопросыДляАнкетирования/ВопросыДляАнкетирования.mdo index 96190bcf7..832a4f8c1 100644 --- a/SSL/src/ChartsOfCharacteristicTypes/ВопросыДляАнкетирования/ВопросыДляАнкетирования.mdo +++ b/SSL/src/ChartsOfCharacteristicTypes/ВопросыДляАнкетирования/ВопросыДляАнкетирования.mdo @@ -39,7 +39,7 @@ Description ru - Наименование вопроса для представление в списке вопросов. Не выводится респонденту. + Наименование вопроса для представления в списке вопросов. Не выводится респонденту. ShowError @@ -193,6 +193,7 @@ ShowError + true Enum.ТипыОтветовНаВопрос.EmptyRef diff --git a/SSL/src/ChartsOfCharacteristicTypes/ДополнительныеРеквизитыИСведения/Forms/ВыборРеквизита/Form.form b/SSL/src/ChartsOfCharacteristicTypes/ДополнительныеРеквизитыИСведения/Forms/ВыборРеквизита/Form.form new file mode 100644 index 000000000..64a7d2d5b --- /dev/null +++ b/SSL/src/ChartsOfCharacteristicTypes/ДополнительныеРеквизитыИСведения/Forms/ВыборРеквизита/Form.form @@ -0,0 +1,421 @@ + + + + <key>ru</key> + <value>Выбор реквизита</value> + + + РеквизитыОбъекта + 1 + true + true + + true + + + РеквизитыОбъекта + + None + Add + CancelSearch + Change + Copy + CopyToClipboard + Delete + EndEdit + Find + MoveDown + MoveUp + OutputList + SelectAll + ShowMultipleSelection + ShowRowRearrangement + SortListAsc + SortListDesc + + РеквизитыОбъектаПредставление + 14 + true + true + + true + + + РеквизитыОбъекта.Представление + + + РеквизитыОбъектаПредставлениеРасширеннаяПодсказка + 16 + Label + true + true + + Left + + + + РеквизитыОбъектаПредставлениеКонтекстноеМеню + 15 + true + + InputField + Auto + true + Left + true + + true + true + true + true + true + true + Normal + + + + РеквизитыОбъектаКоманднаяПанель + 3 + Left + + + Selection + РеквизитыОбъектаВыбор + + + РеквизитыОбъектаСтрокаПоиска + 5 + + РеквизитыОбъектаСтрокаПоискаРасширеннаяПодсказка + 7 + Label + true + true + + Left + + + + РеквизитыОбъектаСтрокаПоискаКонтекстноеМеню + 6 + true + + РеквизитыОбъекта + + true + + + + РеквизитыОбъектаСостояниеПросмотра + 8 + + РеквизитыОбъектаСостояниеПросмотраРасширеннаяПодсказка + 10 + Label + true + true + + Left + + + + РеквизитыОбъектаСостояниеПросмотраКонтекстноеМеню + 9 + true + + ViewStatusAddition + РеквизитыОбъекта + + true + + + + РеквизитыОбъектаУправлениеПоиском + 11 + + РеквизитыОбъектаУправлениеПоискомРасширеннаяПодсказка + 13 + Label + true + true + + Left + + + + РеквизитыОбъектаУправлениеПоискомКонтекстноеМеню + 12 + true + + SearchControlAddition + РеквизитыОбъекта + + true + + + + РеквизитыОбъектаРасширеннаяПодсказка + 4 + Label + true + true + + Left + + + + РеквизитыОбъектаКонтекстноеМеню + 2 + true + + true + true + true + true + MultiRow + 1 + 1 + AutoUse + AutoUse + true + true + false + false + false + true + Auto + Auto + true + true + true + true + + РеквизитыОбъекта.НомерКартинки + + + CommonPicture.ВидыОпераций + + true + + + Bottom + true + + ФормаКоманднаяПанель + -1 + + ФормаКомандаВыбрать + 17 + true + true + + true + + + ФормаКомандаВыбратьРасширеннаяПодсказка + 18 + Label + true + true + + Left + + + Form.Command.КомандаВыбрать + Auto + true + true + true + UserCmds + Auto + + + ФормаКомандаОтмена + 19 + true + true + + true + + + ФормаКомандаОтменаРасширеннаяПодсказка + 20 + Label + true + true + + Left + + + Form.Command.КомандаОтмена + Normal + Auto + true + true + UserCmds + Auto + + Right + + + OnCreateAtServer + ПриСозданииНаСервере + + 60 + 20 + LockOwner + true + true + Vertical + true + true + true + auto + true + + РеквизитыОбъекта + + <key>ru</key> + <value>Реквизиты объекта</value> + + 1 + + ValueTable + + + true + + + true + + + Реквизит + + <key>ru</key> + <value>Реквизит</value> + + 1 + + ChartOfCharacteristicTypesRef.ДополнительныеРеквизитыИСведения + String + + + + true + + + true + + + + Представление + + <key>ru</key> + <value>Представление</value> + + 2 + + String + + + + true + + + true + + + + ТипЗначения + + <key>ru</key> + <value>Тип значения</value> + + 4 + + TypeDescription + + + true + + + true + + + + НомерКартинки + + <key>ru</key> + <value>Номер картинки</value> + + 5 + + Number + + 10 + + + + true + + + true + + + + + КомандаВыбрать + + <key>ru</key> + <value>Выбрать</value> + + 1 + + ru + Команда выбрать + + + true + + + + КомандаВыбрать + + + DontUse + Auto + + + КомандаОтмена + + <key>ru</key> + <value>Отмена</value> + + 2 + + ru + Команда отмена + + + true + + + + КомандаОтмена + + + DontUse + Auto + + + РеквизитыОбъекта + + String + + + + + + + + diff --git a/SSL/src/ChartsOfCharacteristicTypes/ДополнительныеРеквизитыИСведения/Forms/ВыборРеквизита/Module.bsl b/SSL/src/ChartsOfCharacteristicTypes/ДополнительныеРеквизитыИСведения/Forms/ВыборРеквизита/Module.bsl new file mode 100644 index 000000000..778285097 --- /dev/null +++ b/SSL/src/ChartsOfCharacteristicTypes/ДополнительныеРеквизитыИСведения/Forms/ВыборРеквизита/Module.bsl @@ -0,0 +1,49 @@ +#Область ОбработчикиСобытийФормы + +&НаСервере +Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) + Если Параметры.Свойство("АвтоТест") Тогда + Возврат; + КонецЕсли; + + ТаблицаРеквизитов = ПолучитьИзВременногоХранилища(Параметры.РеквизитыОбъекта); + ЗначениеВРеквизитФормы(ТаблицаРеквизитов, "РеквизитыОбъекта"); +КонецПроцедуры + +#КонецОбласти + +#Область ОбработчикиКомандФормы + +&НаКлиенте +Процедура КомандаВыбрать(Команда) + ВыбратьЭлементИЗакрыть(); +КонецПроцедуры + +&НаКлиенте +Процедура КомандаОтмена(Команда) + Закрыть(); +КонецПроцедуры + +&НаКлиенте +Процедура РеквизитыОбъектаВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка) + ВыбратьЭлементИЗакрыть(); +КонецПроцедуры + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +&НаКлиенте +Процедура ВыбратьЭлементИЗакрыть() + ВыбраннаяСтрока = Элементы.РеквизитыОбъекта.ТекущиеДанные; + ПараметрыВыбора = Новый Структура; + ПараметрыВыбора.Вставить("Реквизит", ВыбраннаяСтрока.Реквизит); + ПараметрыВыбора.Вставить("Представление", ВыбраннаяСтрока.Представление); + ПараметрыВыбора.Вставить("ТипЗначения", ВыбраннаяСтрока.ТипЗначения); + + Оповестить("Свойства_ВыборРеквизитаОбъекта", ПараметрыВыбора); + + Закрыть(); +КонецПроцедуры + +#КонецОбласти \ No newline at end of file diff --git a/SSL/src/ChartsOfCharacteristicTypes/ДополнительныеРеквизитыИСведения/Forms/ЗависимостьРеквизитов/Form.form b/SSL/src/ChartsOfCharacteristicTypes/ДополнительныеРеквизитыИСведения/Forms/ЗависимостьРеквизитов/Form.form new file mode 100644 index 000000000..d07a2ab20 --- /dev/null +++ b/SSL/src/ChartsOfCharacteristicTypes/ДополнительныеРеквизитыИСведения/Forms/ЗависимостьРеквизитов/Form.form @@ -0,0 +1,721 @@ + + + + ЗависимостиРеквизитов + 5 + + <key>ru</key> + <value>Зависит от значения свойств и реквизитов</value> + + true + true + + true + + + ЗависимостиРеквизитов + + Top + Add + Change + Copy + EndEdit + MoveDown + MoveUp + SelectAll + ShowMultipleSelection + ShowRowRearrangement + SortListAsc + SortListDesc + + ЗависимостиРеквизитовРеквизит + 18 + true + true + + true + + + ЗависимостиРеквизитов.Представление + + + ЗависимостиРеквизитовРеквизитРасширеннаяПодсказка + 20 + Label + true + true + + Left + + + + ЗависимостиРеквизитовРеквизитКонтекстноеМеню + 19 + true + + InputField + Auto + true + Left + true + + + StartChoice + ЗависимостиРеквизитовРеквизитНачалоВыбора + + true + true + true + true + true + true + true + true + Normal + + + + ЗависимостиРеквизитовВидСравнения + 21 + true + true + + true + + + ЗависимостиРеквизитов.Условие + + + OnChange + ЗависимостиРеквизитовВидСравненияПриИзменении + + + ЗависимостиРеквизитовВидСравненияРасширеннаяПодсказка + 23 + Label + true + true + + Left + + + + ЗависимостиРеквизитовВидСравненияКонтекстноеМеню + 22 + true + + InputField + Auto + true + Left + true + + true + true + true + true + true + true + true + + + ru + Равно + + + Равно + + + + + ru + Не равно + + + Не равно + + + + + ru + Заполнено + + + Заполнено + + + + + ru + Не заполнено + + + Не заполнено + + + Normal + + + + ЗависимостиРеквизитовПравоеЗначение + 24 + true + true + + true + + + ЗависимостиРеквизитов.Значение + + + ЗависимостиРеквизитовПравоеЗначениеРасширеннаяПодсказка + 26 + Label + true + true + + Left + + + + ЗависимостиРеквизитовПравоеЗначениеКонтекстноеМеню + 25 + true + + InputField + Auto + true + Left + true + + true + true + true + true + true + true + Normal + + + + ЗависимостиРеквизитовКоманднаяПанель + 7 + + ЗависимостиРеквизитовДобавитьУсловие + 34 + true + true + + true + + + ЗависимостиРеквизитовДобавитьУсловиеРасширеннаяПодсказка + 35 + Label + true + true + + Left + + + Form.Command.ДобавитьУсловие + Normal + Auto + true + true + UserCmds + Auto + + + ЗависимостиРеквизитовУдалитьУсловие + 29 + + <key>ru</key> + <value>Удалить условие</value> + + true + true + + true + + + ЗависимостиРеквизитовУдалитьУсловиеРасширеннаяПодсказка + 30 + Label + true + true + + Left + + + Form.Item.ЗависимостиРеквизитов.StandardCommand.Delete + Normal + Auto + true + true + UserCmds + Auto + InCommandBarAndInAdditionalSubmenu + + Left + true + + + BeforeAddRow + ЗависимостиРеквизитовПередНачаломДобавления + + + BeforeRowChange + ЗависимостиРеквизитовПередНачаломИзменения + + + ЗависимостиРеквизитовСтрокаПоиска + 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 + + true + true + 80 + true + true + true + MultiRow +
        true
        + 1 + 1 + AutoUse + AutoUse + true + true + false + true + Auto + Auto + true + true + true + true + true + +
        + Bottom + true + + ФормаКоманднаяПанель + -1 + + ФормаКомандаОк + 3 + true + true + + true + + + ФормаКомандаОкРасширеннаяПодсказка + 4 + Label + true + true + + Left + + + Form.Command.КомандаОк + Auto + true + true + true + UserCmds + Auto + + + ФормаКомандаОтмена + 1 + true + true + + true + + + ФормаКомандаОтменаРасширеннаяПодсказка + 2 + Label + true + true + + Left + + + Form.Command.КомандаОтмена + Normal + Auto + true + true + UserCmds + Auto + + Right + + + NotificationProcessing + ОбработкаОповещения + + + OnCreateAtServer + ПриСозданииНаСервере + + LockOwner + true + true + Vertical + true + true + true + auto + true + + ЗависимостиРеквизитов + + <key>ru</key> + <value>Зависимости реквизитов</value> + + 1 + + ValueTable + + + true + + + true + + + Представление + + <key>ru</key> + <value>Реквизит</value> + + 1 + + String + + + + true + + + true + + + + Условие + + <key>ru</key> + <value>Вид сравнения</value> + + 2 + + String + + + + true + + + true + + + + Значение + + <key>ru</key> + <value>Значение</value> + + 3 + + Boolean + String + Date + Number + AnyRef + + 10 + + + + + + true + + + true + + + + Реквизит + + <key>ru</key> + <value>Реквизит</value> + + 4 + + ChartOfCharacteristicTypesRef.ДополнительныеРеквизитыИСведения + String + + + + true + + + true + + + + ТипЗначения + + <key>ru</key> + <value>Тип значения</value> + + 7 + + TypeDescription + + + true + + + true + + + + ЗависимоеСвойство + + <key>ru</key> + <value>Зависимое свойство</value> + + 5 + + String + + + + true + + + true + + + + + РеквизитыОбъектаВХранилище + + <key>ru</key> + <value>Реквизиты объекта в хранилище</value> + + 2 + + String + + + + true + + + true + + + + НастраиваемоеСвойство + + <key>ru</key> + <value>Настраиваемое свойство</value> + + 3 + + String + + + + true + + + true + + + + ДобавлениеСтроки + + <key>ru</key> + <value>Добавление строки</value> + + 4 + + Boolean + + + true + + + true + + + + КомандаОк + + <key>ru</key> + <value>ОК</value> + + 1 + + ru + Команда ок + + + true + + + + КомандаОк + + + DontUse + Auto + + + КомандаОтмена + + <key>ru</key> + <value>Отмена</value> + + 2 + + ru + Команда отмена + + + true + + + + КомандаОтмена + + + DontUse + Auto + + + ДобавитьУсловие + + <key>ru</key> + <value>Добавить условие</value> + + 3 + + ru + Добавить условие + + + true + + + + ДобавитьУсловие + + + DontUse + Auto + + + НастраиваемоеСвойство + + String + + + + + + + +
        diff --git a/SSL/src/ChartsOfCharacteristicTypes/ДополнительныеРеквизитыИСведения/Forms/ЗависимостьРеквизитов/Module.bsl b/SSL/src/ChartsOfCharacteristicTypes/ДополнительныеРеквизитыИСведения/Forms/ЗависимостьРеквизитов/Module.bsl new file mode 100644 index 000000000..5531ff99e --- /dev/null +++ b/SSL/src/ChartsOfCharacteristicTypes/ДополнительныеРеквизитыИСведения/Forms/ЗависимостьРеквизитов/Module.bsl @@ -0,0 +1,239 @@ +#Область ОбработчикиСобытийФормы + +&НаСервере +Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) + + Если Параметры.Свойство("АвтоТест") Тогда + Возврат; + КонецЕсли; + + УстановитьУсловноеОформление(); + + НастраиваемоеСвойство = Параметры.НастраиваемоеСвойство; + + СвойстваОбъекта = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(Параметры.ДополнительныйРеквизит, "Заголовок, ЗависимостиДополнительныхРеквизитов"); + + Заголовок = НСтр("ru = '%1 дополнительного реквизита ""%2""'"); + Если НастраиваемоеСвойство = "Доступен" Тогда + ПредставлениеСвойства = НСтр("ru = 'Доступность'"); + ИначеЕсли НастраиваемоеСвойство = "ЗаполнятьОбязательно" Тогда + ПредставлениеСвойства = НСтр("ru = 'Обязательность заполнения'"); + Иначе + ПредставлениеСвойства = НСтр("ru = 'Видимость'"); + КонецЕсли; + Заголовок = СтрЗаменить(Заголовок, "%1", ПредставлениеСвойства); + Заголовок = СтрЗаменить(Заголовок, "%2", СвойстваОбъекта.Заголовок); + + НаборСвойств = Параметры.Набор; + Пока ЗначениеЗаполнено(НаборСвойств.Родитель) Цикл + НаборСвойств = НаборСвойств.Родитель; + КонецЦикла; + + НаборДополнительныхРеквизитов = НаборСвойств.ДополнительныеРеквизиты; + + ИмяПредопределенныхДанных = НаборСвойств.ИмяПредопределенныхДанных; + Если СтрНайти(ИмяПредопределенныхДанных, "__") > 0 Тогда + ПолноеИмяОбъектаМетаданных = СтрЗаменить(ИмяПредопределенныхДанных, "__", "._"); + Иначе + ПолноеИмяОбъектаМетаданных = СтрЗаменить(ИмяПредопределенныхДанных, "_", "."); + КонецЕсли; + + РеквизитыОбъекта = СписокРеквизитовДляОтбора(ПолноеИмяОбъектаМетаданных, НаборДополнительныхРеквизитов); + + ЗависимостиДополнительныхРеквизитов = Параметры.ДополнительныйРеквизит.ЗависимостиДополнительныхРеквизитов; + Для Каждого СтрокаТабличнойЧасти Из ЗависимостиДополнительныхРеквизитов Цикл + Если СтрокаТабличнойЧасти.ЗависимоеСвойство = НастраиваемоеСвойство Тогда + СтрокаОтбора = ЗависимостиРеквизитов.Добавить(); + ЗаполнитьЗначенияСвойств(СтрокаОтбора, СтрокаТабличнойЧасти); + + ОписаниеРеквизита = РеквизитыОбъекта.Найти(СтрокаОтбора.Реквизит, "Реквизит"); + Если ОписаниеРеквизита = Неопределено Тогда + Продолжить; // Реквизит объекта не найден. + КонецЕсли; + СтрокаОтбора.Представление = ОписаниеРеквизита.Представление; + СтрокаОтбора.ТипЗначения = ОписаниеРеквизита.ТипЗначения; + КонецЕсли; + КонецЦикла; + +КонецПроцедуры + +#КонецОбласти + +#Область ОбработчикиСобытийТаблицыФормы + +&НаКлиенте +Процедура ЗависимостиРеквизитовРеквизитНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка) + СтандартнаяОбработка = Ложь; + ОткрытьФормуВыбораРеквизита(); +КонецПроцедуры + +&НаКлиенте +Процедура ЗависимостиРеквизитовПередНачаломИзменения(Элемент, Отказ) + ЗависимостиРеквизитовУстановитьОграничениеТиповДляЗначения(); +КонецПроцедуры + +&НаКлиенте +Процедура ЗависимостиРеквизитовВидСравненияПриИзменении(Элемент) + ТекущаяСтрока = ЗависимостиРеквизитов.НайтиПоИдентификатору(Элементы.ЗависимостиРеквизитов.ТекущаяСтрока); + ТекущаяСтрока.Значение = Неопределено; +КонецПроцедуры + +&НаКлиенте +Процедура ЗависимостиРеквизитовПередНачаломДобавления(Элемент, Отказ, Копирование, Родитель, Группа, Параметр) + Если Не ДобавлениеСтроки Тогда + Отказ = Истина; + Иначе + ОткрытьФормуВыбораРеквизита(); + ДобавлениеСтроки = Ложь; + КонецЕсли; +КонецПроцедуры + +&НаКлиенте +Процедура ОткрытьФормуВыбораРеквизита() + ПараметрыФормы = Новый Структура; + ПараметрыФормы.Вставить("РеквизитыОбъекта", РеквизитыОбъектаВХранилище); + ОткрытьФорму("ПланВидовХарактеристик.ДополнительныеРеквизитыИСведения.Форма.ВыборРеквизита", ПараметрыФормы); +КонецПроцедуры + +#КонецОбласти + +#Область ОбработчикиКомандФормы + +&НаКлиенте +Процедура ДобавитьУсловие(Команда) + ДобавлениеСтроки = Истина; + Элементы.ЗависимостиРеквизитов.ДобавитьСтроку(); +КонецПроцедуры + +&НаКлиенте +Процедура КомандаОк(Команда) + Результат = Новый Структура; + Результат.Вставить(НастраиваемоеСвойство, НастройкиОтбораВХранилищеЗначений()); + Оповестить("Свойства_УстановленаЗависимостьРеквизита", Результат); + Закрыть(); +КонецПроцедуры + +&НаКлиенте +Процедура КомандаОтмена(Команда) + Закрыть(); +КонецПроцедуры + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +&НаСервере +Функция НастройкиОтбораВХранилищеЗначений() + + Если ЗависимостиРеквизитов.Количество() = 0 Тогда + Возврат Неопределено; + КонецЕсли; + + ТаблицаЗависимостей = РеквизитФормыВЗначение("ЗависимостиРеквизитов"); + КопияТаблицы = ТаблицаЗависимостей.Скопировать(); + КопияТаблицы.Колонки.Удалить("Представление"); + КопияТаблицы.Колонки.Удалить("ТипЗначения"); + + Возврат Новый ХранилищеЗначения(КопияТаблицы); + +КонецФункции + +&НаСервере +Функция СписокРеквизитовДляОтбора(ПолноеИмяОбъектаМетаданных, НаборДополнительныхРеквизитов) + + РеквизитыОбъекта = Новый ТаблицаЗначений; + РеквизитыОбъекта.Колонки.Добавить("Реквизит"); + РеквизитыОбъекта.Колонки.Добавить("Представление", Новый ОписаниеТипов("Строка")); + РеквизитыОбъекта.Колонки.Добавить("ТипЗначения", Новый ОписаниеТипов); + РеквизитыОбъекта.Колонки.Добавить("НомерКартинки", Новый ОписаниеТипов("Число")); + + ОбъектМетаданных = Метаданные.НайтиПоПолномуИмени(ПолноеИмяОбъектаМетаданных); + + Для Каждого ДополнительныйРеквизит Из НаборДополнительныхРеквизитов Цикл + СвойстваОбъекта = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(ДополнительныйРеквизит.Свойство, "Наименование, ТипЗначения"); + СтрокаРеквизит = РеквизитыОбъекта.Добавить(); + СтрокаРеквизит.Реквизит = ДополнительныйРеквизит.Свойство; + СтрокаРеквизит.Представление = СвойстваОбъекта.Наименование; + СтрокаРеквизит.НомерКартинки = 2; + СтрокаРеквизит.ТипЗначения = СвойстваОбъекта.ТипЗначения; + КонецЦикла; + + Для Каждого Реквизит Из ОбъектМетаданных.СтандартныеРеквизиты Цикл + ДобавитьРеквизитВТаблицу(РеквизитыОбъекта, Реквизит); + КонецЦикла; + + Для Каждого Реквизит Из ОбъектМетаданных.Реквизиты Цикл + ДобавитьРеквизитВТаблицу(РеквизитыОбъекта, Реквизит); + КонецЦикла; + + РеквизитыОбъекта.Сортировать("Представление Возр"); + + РеквизитыОбъектаВХранилище = ПоместитьВоВременноеХранилище(РеквизитыОбъекта, УникальныйИдентификатор); + + Возврат РеквизитыОбъекта; + +КонецФункции + +&НаСервере +Процедура ДобавитьРеквизитВТаблицу(РеквизитыОбъекта, Реквизит) + СтрокаРеквизит = РеквизитыОбъекта.Добавить(); + СтрокаРеквизит.Реквизит = Реквизит.Имя; + СтрокаРеквизит.Представление = Реквизит.Представление(); + СтрокаРеквизит.НомерКартинки = 1; + СтрокаРеквизит.ТипЗначения = Реквизит.Тип; +КонецПроцедуры + +&НаКлиенте +Процедура ОбработкаОповещения(ИмяСобытия, Параметр, Источник) + Если ИмяСобытия = "Свойства_ВыборРеквизитаОбъекта" Тогда + ТекущаяСтрока = ЗависимостиРеквизитов.НайтиПоИдентификатору(Элементы.ЗависимостиРеквизитов.ТекущаяСтрока); + ЗаполнитьЗначенияСвойств(ТекущаяСтрока, Параметр); + ЗависимостиРеквизитовУстановитьОграничениеТиповДляЗначения(); + ТекущаяСтрока.ЗависимоеСвойство = НастраиваемоеСвойство; + ТекущаяСтрока.Условие = "Равно"; + ТекущаяСтрока.Значение = ТекущаяСтрока.ТипЗначения.ПривестиЗначение(Неопределено); + КонецЕсли; +КонецПроцедуры + +&НаКлиенте +Процедура ЗависимостиРеквизитовУстановитьОграничениеТиповДляЗначения() + + ТаблицаФормы = Элементы.ЗависимостиРеквизитов; + ПолеВвода = Элементы.ЗависимостиРеквизитовПравоеЗначение; + + ПараметрыВыбораМассив = Новый Массив; + Если ТипЗнч(ТаблицаФормы.ТекущиеДанные.Реквизит) <> Тип("Строка") Тогда + ПараметрыВыбораМассив.Добавить(Новый ПараметрВыбора("Отбор.Владелец", ТаблицаФормы.ТекущиеДанные.Реквизит)); + КонецЕсли; + + ПолеВвода.ПараметрыВыбора = Новый ФиксированныйМассив(ПараметрыВыбораМассив); + ПолеВвода.ОграничениеТипа = ТаблицаФормы.ТекущиеДанные.ТипЗначения; + +КонецПроцедуры + +&НаСервере +Процедура УстановитьУсловноеОформление() + + ЭлементУсловногоОформления = УсловноеОформление.Элементы.Добавить(); + + ЭлементДоступность = ЭлементУсловногоОформления.Оформление.Элементы.Найти("Доступность"); + ЭлементДоступность.Значение = Ложь; + ЭлементДоступность.Использование = Истина; + + ЗначенияСравнения = Новый СписокЗначений; + ЗначенияСравнения.Добавить("Заполнено"); + ЗначенияСравнения.Добавить("Не заполнено"); // исключение, является идентификатором. + + ЭлементОтбораДанных = ЭлементУсловногоОформления.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); + ЭлементОтбораДанных.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("ЗависимостиРеквизитов.Условие"); + ЭлементОтбораДанных.ВидСравнения = ВидСравненияКомпоновкиДанных.ВСписке; + ЭлементОтбораДанных.ПравоеЗначение = ЗначенияСравнения; + ЭлементОтбораДанных.Использование = Истина; + + ЭлементОформляемогоПоля = ЭлементУсловногоОформления.Поля.Элементы.Добавить(); + ЭлементОформляемогоПоля.Поле = Новый ПолеКомпоновкиДанных("ЗависимостиРеквизитовПравоеЗначение"); + ЭлементОформляемогоПоля.Использование = Истина; + +КонецПроцедуры + +#КонецОбласти diff --git a/SSL/src/ChartsOfCharacteristicTypes/ДополнительныеРеквизитыИСведения/Forms/ИзменениеНастройкиСвойства/Form.form b/SSL/src/ChartsOfCharacteristicTypes/ДополнительныеРеквизитыИСведения/Forms/ИзменениеНастройкиСвойства/Form.form index d9c6553cf..b53f67a5a 100644 --- a/SSL/src/ChartsOfCharacteristicTypes/ДополнительныеРеквизитыИСведения/Forms/ИзменениеНастройкиСвойства/Form.form +++ b/SSL/src/ChartsOfCharacteristicTypes/ДополнительныеРеквизитыИСведения/Forms/ИзменениеНастройкиСвойства/Form.form @@ -1081,7 +1081,6 @@ true true true - UseIfNecessary auto true @@ -1236,7 +1235,7 @@ TextPicture - Auto + DontUse Auto diff --git a/SSL/src/ChartsOfCharacteristicTypes/ДополнительныеРеквизитыИСведения/Forms/ИзменениеНастройкиСвойства/Module.bsl b/SSL/src/ChartsOfCharacteristicTypes/ДополнительныеРеквизитыИСведения/Forms/ИзменениеНастройкиСвойства/Module.bsl index 20467836d..eaee3d6fc 100644 --- a/SSL/src/ChartsOfCharacteristicTypes/ДополнительныеРеквизитыИСведения/Forms/ИзменениеНастройкиСвойства/Module.bsl +++ b/SSL/src/ChartsOfCharacteristicTypes/ДополнительныеРеквизитыИСведения/Forms/ИзменениеНастройкиСвойства/Module.bsl @@ -38,20 +38,16 @@ ЭтоДополнительноеСведение = Параметры.ЭтоДополнительноеСведение; Элементы.ОтдельныеЗначенияРеквизитаКомментарий.Заголовок = - СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - Элементы.ОтдельныеЗначенияРеквизитаКомментарий.Заголовок, ТекущийНаборСвойств); + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(Элементы.ОтдельныеЗначенияРеквизитаКомментарий.Заголовок, ТекущийНаборСвойств); Элементы.ОбщиеЗначенияРеквизитовКомментарий.Заголовок = - СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - Элементы.ОбщиеЗначенияРеквизитовКомментарий.Заголовок, ТекущийНаборСвойств); + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(Элементы.ОбщиеЗначенияРеквизитовКомментарий.Заголовок, ТекущийНаборСвойств); Элементы.ОтдельныеЗначенияСведенияКомментарий.Заголовок = - СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - Элементы.ОтдельныеЗначенияСведенияКомментарий.Заголовок, ТекущийНаборСвойств); + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(Элементы.ОтдельныеЗначенияСведенияКомментарий.Заголовок, ТекущийНаборСвойств); Элементы.ОбщиеЗначенияСведенийКомментарий.Заголовок = - СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - Элементы.ОбщиеЗначенияСведенийКомментарий.Заголовок, ТекущийНаборСвойств); + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(Элементы.ОбщиеЗначенияСведенийКомментарий.Заголовок, ТекущийНаборСвойств); КонецПроцедуры diff --git a/SSL/src/ChartsOfCharacteristicTypes/ДополнительныеРеквизитыИСведения/Forms/РазблокированиеРеквизитов/Form.form b/SSL/src/ChartsOfCharacteristicTypes/ДополнительныеРеквизитыИСведения/Forms/РазблокированиеРеквизитов/Form.form index 3a40dcc79..eef13374b 100644 --- a/SSL/src/ChartsOfCharacteristicTypes/ДополнительныеРеквизитыИСведения/Forms/РазблокированиеРеквизитов/Form.form +++ b/SSL/src/ChartsOfCharacteristicTypes/ДополнительныеРеквизитыИСведения/Forms/РазблокированиеРеквизитов/Form.form @@ -603,7 +603,6 @@ true true true - UseIfNecessary auto true @@ -625,7 +624,7 @@ РазрешитьРедактирование - Auto + DontUse Auto diff --git a/SSL/src/ChartsOfCharacteristicTypes/ДополнительныеРеквизитыИСведения/Forms/РазблокированиеРеквизитов/Module.bsl b/SSL/src/ChartsOfCharacteristicTypes/ДополнительныеРеквизитыИСведения/Forms/РазблокированиеРеквизитов/Module.bsl index 5aaf1fe80..e47f68599 100644 --- a/SSL/src/ChartsOfCharacteristicTypes/ДополнительныеРеквизитыИСведения/Forms/РазблокированиеРеквизитов/Module.bsl +++ b/SSL/src/ChartsOfCharacteristicTypes/ДополнительныеРеквизитыИСведения/Forms/РазблокированиеРеквизитов/Module.bsl @@ -41,10 +41,7 @@ РазблокируемыеРеквизиты = Новый Массив; РазблокируемыеРеквизиты.Добавить("ТипЗначения"); - Закрыть(); - - ЗапретРедактированияРеквизитовОбъектовКлиент.УстановитьДоступностьЭлементовФормы( - ВладелецФормы, РазблокируемыеРеквизиты); + ОповеститьОВыборе(РазблокируемыеРеквизиты); КонецПроцедуры diff --git a/SSL/src/ChartsOfCharacteristicTypes/ДополнительныеРеквизитыИСведения/Forms/ФормаВыбора/Form.form b/SSL/src/ChartsOfCharacteristicTypes/ДополнительныеРеквизитыИСведения/Forms/ФормаВыбора/Form.form index 2e7d6733f..cb2d05393 100644 --- a/SSL/src/ChartsOfCharacteristicTypes/ДополнительныеРеквизитыИСведения/Forms/ФормаВыбора/Form.form +++ b/SSL/src/ChartsOfCharacteristicTypes/ДополнительныеРеквизитыИСведения/Forms/ФормаВыбора/Form.form @@ -607,7 +607,6 @@ true true true - UseIfNecessary auto true @@ -622,9 +621,6 @@ true - - Список.IsFolder - Список.Ref diff --git a/SSL/src/ChartsOfCharacteristicTypes/ДополнительныеРеквизитыИСведения/Forms/ФормаВыбора/Module.bsl b/SSL/src/ChartsOfCharacteristicTypes/ДополнительныеРеквизитыИСведения/Forms/ФормаВыбора/Module.bsl index c4b58d480..e40b3ad7c 100644 --- a/SSL/src/ChartsOfCharacteristicTypes/ДополнительныеРеквизитыИСведения/Forms/ФормаВыбора/Module.bsl +++ b/SSL/src/ChartsOfCharacteristicTypes/ДополнительныеРеквизитыИСведения/Forms/ФормаВыбора/Module.bsl @@ -8,6 +8,10 @@ Возврат; КонецЕсли; + Если Параметры.Свойство("ЭтоВыборЗначенияДоступа") Тогда + Параметры.ЭтоДополнительноеСведение = Истина; + КонецЕсли; + Если Параметры.ЭтоДополнительноеСведение <> Неопределено Тогда ЭтоДополнительноеСведение = Параметры.ЭтоДополнительноеСведение; @@ -15,11 +19,6 @@ Список, "ЭтоДополнительноеСведение", ЭтоДополнительноеСведение, , , Истина); КонецЕсли; - // Отбор не помеченных на удаление. - ОбщегоНазначенияКлиентСервер.УстановитьЭлементОтбораДинамическогоСписка( - Список, "ПометкаУдаления", Ложь, , , Истина, - РежимОтображенияЭлементаНастройкиКомпоновкиДанных.Обычный); - Если Параметры.ВыборОбщегоСвойства Тогда ВидВыбора = "ВыборОбщегоСвойства"; diff --git a/SSL/src/ChartsOfCharacteristicTypes/ДополнительныеРеквизитыИСведения/Forms/ФормаСписка/Form.form b/SSL/src/ChartsOfCharacteristicTypes/ДополнительныеРеквизитыИСведения/Forms/ФормаСписка/Form.form index fee748c5b..29c9f9e8a 100644 --- a/SSL/src/ChartsOfCharacteristicTypes/ДополнительныеРеквизитыИСведения/Forms/ФормаСписка/Form.form +++ b/SSL/src/ChartsOfCharacteristicTypes/ДополнительныеРеквизитыИСведения/Forms/ФормаСписка/Form.form @@ -355,7 +355,6 @@ true true true - UseIfNecessary auto true @@ -371,10 +370,10 @@ true - Список.IsFolder + Список.Ref - Список.Ref + Список.ЗаголовокФормыВыбораЗначения
        true
        diff --git a/SSL/src/ChartsOfCharacteristicTypes/ДополнительныеРеквизитыИСведения/Forms/ФормаЭлемента/Attributes/СписокДополнительныхРеквизитов/ExtInfo/ListSettings.dcss b/SSL/src/ChartsOfCharacteristicTypes/ДополнительныеРеквизитыИСведения/Forms/ФормаЭлемента/Attributes/СписокДополнительныхРеквизитов/ExtInfo/ListSettings.dcss new file mode 100644 index 000000000..61e6fb4bb --- /dev/null +++ b/SSL/src/ChartsOfCharacteristicTypes/ДополнительныеРеквизитыИСведения/Forms/ФормаЭлемента/Attributes/СписокДополнительныхРеквизитов/ExtInfo/ListSettings.dcss @@ -0,0 +1,17 @@ + + + + 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/ChartsOfCharacteristicTypes/ДополнительныеРеквизитыИСведения/Forms/ФормаЭлемента/Form.form b/SSL/src/ChartsOfCharacteristicTypes/ДополнительныеРеквизитыИСведения/Forms/ФормаЭлемента/Form.form index da8cebee4..cd78ae24f 100644 --- a/SSL/src/ChartsOfCharacteristicTypes/ДополнительныеРеквизитыИСведения/Forms/ФормаЭлемента/Form.form +++ b/SSL/src/ChartsOfCharacteristicTypes/ДополнительныеРеквизитыИСведения/Forms/ФормаЭлемента/Form.form @@ -1,189 +1,24 @@ - ГруппаНаименованиеРеквизита - 79 - - ДекорацияНаименование - 81 - - <key>ru</key> - <value>Наименование:</value> - - true - true - - true - - - ru - Краткое представление свойства, которое -выводится в формах редактирования его значения. - - - ДекорацияНаименованиеРасширеннаяПодсказка - 116 - Label - true - true - - Left - - - - ДекорацияНаименованиеКонтекстноеМеню - 82 - true - - Label - true - true - - Left - - - - Заголовок - 1 - true - true - - true - - - Объект.Заголовок - - true - None - - ЗаголовокExtendedTooltip - 118 - Label - true - true - - Left - - - - ЗаголовокКонтекстноеМеню - 2 - true - - InputField - Enter - true - Left - true - - true - true - true - true - true - Normal - - - - ЭтоДополнительноеСведение - 20 - true - - true - - - ЭтоДополнительноеСведение - - None - - OnChange - ЭтоДополнительноеСведениеПриИзменении - - - ЭтоДополнительноеСведениеExtendedTooltip - 119 - Label - true - true - - Left - - - - ЭтоДополнительноеСведениеКонтекстноеМеню - 21 - true - - RadioButtonField - Enter - true - Left - true - - 2 - - - ru - Дополнительный реквизит - - - 0 - - - - - ru - Дополнительное сведение - - - 1 - - - Vertical - - - - ЗаполнятьОбязательно - 54 - true - true - - true - - - Объект.ЗаполнятьОбязательно - - Right - - ЗаполнятьОбязательноExtendedTooltip - 120 - Label - true - true - - Left - - - - ЗаполнятьОбязательноКонтекстноеМеню - 55 - true - - CheckBoxField - Enter - true - Left - true - - + ОсновнаяКоманднаяПанель + 240 true true true + + <key>ru</key> + <value>Основная командная панель</value> + + + ru + Основная командная панель + - ГруппаНаименованиеРеквизитаРасширеннаяПодсказка - 115 + ОсновнаяКоманднаяПанельРасширеннаяПодсказка + 241 Label true true @@ -191,21 +26,847 @@ Left
        - UsualGroup - - Auto - true - true - Auto - Auto + CommandBar + + Left + Form - Страницы - 167 + СтраницыПомощникКарточка + 200 - ГлавнаяСтраница - 169 + ВыборРеквизита + 202 + + СписокДополнительныхРеквизитов + 208 + + <key>ru</key> + <value>Выберите %1 для включения в набор "%2"</value> + + true + true + + true + + + СписокДополнительныхРеквизитов + + Top + Copy + Create + Delete + DynamicListStandardSettings + LoadDynamicListSettings + SaveDynamicListSettings + ShowMultipleSelection + + СписокДополнительныхРеквизитовЗаголовок + 221 + true + true + + true + + + СписокДополнительныхРеквизитов.Заголовок + + + СписокДополнительныхРеквизитовЗаголовокРасширеннаяПодсказка + 223 + Label + true + true + + Left + + + + СписокДополнительныхРеквизитовЗаголовокКонтекстноеМеню + 222 + true + + LabelField + Enter + true + Left + true + + true + true + + + None + + СписокДополнительныхРеквизитовКоманднаяПанель + 210 + Left + true + + + Selection + СписокДополнительныхРеквизитовВыбор + + + OnActivateRow + СписокДополнительныхРеквизитовПриАктивизацииСтроки + + + СписокДополнительныхРеквизитовСтрокаПоиска + 212 + + СписокДополнительныхРеквизитовСтрокаПоискаРасширеннаяПодсказка + 214 + Label + true + true + + Left + + + + СписокДополнительныхРеквизитовСтрокаПоискаКонтекстноеМеню + 213 + true + + СписокДополнительныхРеквизитов + + true + + + + СписокДополнительныхРеквизитовСостояниеПросмотра + 215 + + СписокДополнительныхРеквизитовСостояниеПросмотраРасширеннаяПодсказка + 217 + Label + true + true + + Left + + + + СписокДополнительныхРеквизитовСостояниеПросмотраКонтекстноеМеню + 216 + true + + ViewStatusAddition + СписокДополнительныхРеквизитов + + true + + + + СписокДополнительныхРеквизитовУправлениеПоиском + 218 + + СписокДополнительныхРеквизитовУправлениеПоискомРасширеннаяПодсказка + 220 + Label + true + true + + Left + + + + СписокДополнительныхРеквизитовУправлениеПоискомКонтекстноеМеню + 219 + true + + SearchControlAddition + СписокДополнительныхРеквизитов + + true + + + + СписокДополнительныхРеквизитовРасширеннаяПодсказка + 211 + Label + true + true + + Left + + + + СписокДополнительныхРеквизитовКонтекстноеМеню + 209 + true + + Tree + true + true + true + true + true + MultiRow + 1 + 1 + AutoUse + AutoUse + true + true + Auto + Auto + ExpandTopLevel + true + true + true + + СписокДополнительныхРеквизитов.НомерКартинки + + + CommonPicture.ДополнительныеРеквизитыСведения + + None + None + None + true + + 60 + + 0001-01-01T00:00:00 + 0001-01-01T00:00:00 + + + true + true + + + + РасшифровкаРеквизита + 260 + + ЗначенияДополнительныхРеквизитов + 271 + + <key>ru</key> + <value>Значения реквизита</value> + + true + true + + true + + + ЗначенияДополнительныхРеквизитов + + Top + + ЗначенияДополнительныхРеквизитовСсылка + 284 + true + true + + true + + + ЗначенияДополнительныхРеквизитов.Ссылка + + + ЗначенияДополнительныхРеквизитовСсылкаРасширеннаяПодсказка + 286 + Label + true + true + + Left + + + + ЗначенияДополнительныхРеквизитовСсылкаКонтекстноеМеню + 285 + true + + InputField + Auto + true + Left + true + + true + true + true + true + true + true + Normal + + + + ЗначенияДополнительныхРеквизитовКоманднаяПанель + 273 + Left + + + ЗначенияДополнительныхРеквизитовСтрокаПоиска + 275 + + ЗначенияДополнительныхРеквизитовСтрокаПоискаРасширеннаяПодсказка + 277 + Label + true + true + + Left + + + + ЗначенияДополнительныхРеквизитовСтрокаПоискаКонтекстноеМеню + 276 + true + + ЗначенияДополнительныхРеквизитов + + true + + + + ЗначенияДополнительныхРеквизитовСостояниеПросмотра + 278 + + ЗначенияДополнительныхРеквизитовСостояниеПросмотраРасширеннаяПодсказка + 280 + Label + true + true + + Left + + + + ЗначенияДополнительныхРеквизитовСостояниеПросмотраКонтекстноеМеню + 279 + true + + ViewStatusAddition + ЗначенияДополнительныхРеквизитов + + true + + + + ЗначенияДополнительныхРеквизитовУправлениеПоиском + 281 + + ЗначенияДополнительныхРеквизитовУправлениеПоискомРасширеннаяПодсказка + 283 + Label + true + true + + Left + + + + ЗначенияДополнительныхРеквизитовУправлениеПоискомКонтекстноеМеню + 282 + true + + SearchControlAddition + ЗначенияДополнительныхРеквизитов + + true + + + + ЗначенияДополнительныхРеквизитовРасширеннаяПодсказка + 274 + Label + true + true + + Left + + + + ЗначенияДополнительныхРеквизитовКонтекстноеМеню + 272 + true + + HierarchicalList + true + true + true + true + true + MultiRow + 1 + 1 + AutoUse + AutoUse + true + true + false + false + true + Auto + Auto + true + true + true + true + + ЗначенияДополнительныхРеквизитов.КодКартинки + + + StdPicture.Attribute + + + Style.FormBackColor + + true + + + СписокДополнительныхРеквизитовПодсказка + 262 + + <key>ru</key> + <value>Всплывающая подсказка</value> + + true + true + + true + + + Items.СписокДополнительныхРеквизитов.CurrentData.Подсказка + + Top + + СписокДополнительныхРеквизитовПодсказкаРасширеннаяПодсказка + 264 + Label + true + true + + Left + + + + СписокДополнительныхРеквизитовПодсказкаКонтекстноеМеню + 263 + true + + InputField + Enter + true + Left + true + + true + true + true + true + true + true + Normal + + ru + Не задана + + + + + СписокДополнительныхРеквизитовЗаголовокФормыЗначения + 265 + true + true + + true + + + Items.СписокДополнительныхРеквизитов.CurrentData.ЗаголовокФормыЗначения + + Top + + СписокДополнительныхРеквизитовЗаголовокФормыЗначенияРасширеннаяПодсказка + 267 + Label + true + true + + Left + + + + СписокДополнительныхРеквизитовЗаголовокФормыЗначенияКонтекстноеМеню + 266 + true + + InputField + Enter + true + Left + true + + true + true + true + true + true + true + Normal + + ru + Не задан + + + + + СписокДополнительныхРеквизитовЗаголовокФормыВыбораЗначения + 268 + true + true + + true + + + Items.СписокДополнительныхРеквизитов.CurrentData.ЗаголовокФормыВыбораЗначения + + Top + + СписокДополнительныхРеквизитовЗаголовокФормыВыбораЗначенияРасширеннаяПодсказка + 270 + Label + true + true + + Left + + + + СписокДополнительныхРеквизитовЗаголовокФормыВыбораЗначенияКонтекстноеМеню + 269 + true + + InputField + Enter + true + Left + true + + true + true + true + true + true + true + Normal + + ru + Не задан + + + + true + true + + true + + + Style.FormTextColor + + true + + РасшифровкаРеквизитаРасширеннаяПодсказка + 261 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + true + true + Auto + Auto + + + true + true + + true + + + <key>ru</key> + <value>Выбор реквизита</value> + + + ВыборРеквизитаРасширеннаяПодсказка + 203 + Label + true + true + + Left + + + Page + + LeftWidest + + + + ВыборДействия + 204 + + РежимДобавленияРеквизита + 237 + + <key>ru</key> + <value>Выберите вариант добавления дополнительного %1 "%2" в набор "%3"</value> + + true + true + + true + + + РежимДобавленияРеквизита + + Top + ShowBottom + + РежимДобавленияРеквизитаРасширеннаяПодсказка + 239 + Label + true + true + + Left + + + + РежимДобавленияРеквизитаКонтекстноеМеню + 238 + true + + RadioButtonField + Top + Enter + true + Left + true + + 1 + + + ru + 1 + +1 + + + 1 + + + Vertical + + + true + true + + true + + + <key>ru</key> + <value>Выбор действия</value> + + + ВыборДействияРасширеннаяПодсказка + 205 + Label + true + true + + Left + + + Page + + Vertical + + + + КарточкаРеквизита + 206 + + ГруппаНаименованиеРеквизита + 79 + + ДекорацияНаименование + 81 + + <key>ru</key> + <value>Наименование:</value> + + true + true + + true + + + ru + Краткое представление свойства, которое +выводится в формах редактирования его значения. + + + ДекорацияНаименованиеРасширеннаяПодсказка + 116 + Label + true + true + + Left + + + + ДекорацияНаименованиеКонтекстноеМеню + 82 + true + + Label + true + true + + Left + + + + Заголовок + 1 + true + true + + true + + + Объект.Заголовок + + true + None + + ЗаголовокExtendedTooltip + 118 + Label + true + true + + Left + + + + ЗаголовокКонтекстноеМеню + 2 + true + + InputField + Enter + true + Left + true + + true + true + true + true + true + Normal + + + + ЭтоДополнительноеСведение + 20 + true + + true + + + ЭтоДополнительноеСведение + + None + + OnChange + ЭтоДополнительноеСведениеПриИзменении + + + ЭтоДополнительноеСведениеExtendedTooltip + 119 + Label + true + true + + Left + + + + ЭтоДополнительноеСведениеКонтекстноеМеню + 21 + true + + RadioButtonField + Enter + true + Left + true + + 2 + + + ru + Дополнительный реквизит + + + 0 + + + + + ru + Дополнительное сведение + + + 1 + + + Vertical + + + true + true + + true + + + ГруппаНаименованиеРеквизитаРасширеннаяПодсказка + 115 + Label + true + true + + Left + + + UsualGroup + + Auto + true + true + Auto + Auto + + ТипЗначенияРеквизита 43 @@ -503,497 +1164,40 @@ - ДополнительныеЗначения - 56 - - Значения - 57 - true - true - - true - - - Значения - - None - Copy - Delete - - ЗначенияНаименование - 60 - true - true - - true - - - Значения.Description - - - ЗначенияНаименованиеExtendedTooltip - 148 - Label - true - true - - Left - - - - ЗначенияНаименованиеКонтекстноеМеню - 61 - true - - LabelField - Enter - true - Left - true - - true - true - - - - ЗначенияВес - 83 - true - true - - true - - - Значения.Вес - - - ЗначенияВесExtendedTooltip - 149 - Label - true - true - - Left - - - - ЗначенияВесКонтекстноеМеню - 84 - true - - LabelField - Enter - true - Left - true - - true - true - - - - ЗначенияКоманднаяПанель - 59 + Страницы + 167 + + ГлавнаяСтраница + 169 + + ГруппаСвойстваИЗависимости + 324 - ЗначенияКоманднаяПанельРедактирования - 108 - - ЗначенияСоздать - 62 - true - true - - true - - - ЗначенияСоздатьExtendedTooltip - 141 - Label - true - true - - Left - - - Form.Item.Значения.StandardCommand.Create - Normal - Auto - true - true - UserCmds - Auto - - - ЗначенияСоздатьГруппу - 68 - true - true - - true - - - ЗначенияСоздатьГруппуExtendedTooltip - 142 - Label - true - true - - Left - - - Form.Item.Значения.StandardCommand.CreateFolder - Normal - Auto - true - true - UserCmds - Auto - - - ЗначенияИзменить - 64 - true - true - - true - - - ЗначенияИзменитьExtendedTooltip - 143 - Label - true - true - - Left - - - Form.Item.Значения.StandardCommand.Change - Normal - Auto - true - true - UserCmds - Auto - - - ЗначенияУстановитьПометкуУдаления - 65 - true - true - - true - - - ЗначенияУстановитьПометкуУдаленияExtendedTooltip - 144 - Label - true - true - - Left - - - Form.Item.Значения.StandardCommand.SetDeletionMark - Normal - Auto - true - true - UserCmds - Auto - - true - true - - true - - - <key>ru</key> - <value>Значения командная панель редактирования</value> - - - ЗначенияКоманднаяПанельРедактированияExtendedTooltip - 140 - Label - true - true - - Left - - - - - - ЗначенияНайти - 66 - true - true - - true - - - ЗначенияНайтиExtendedTooltip - 145 - Label - true - true - - Left - - - Form.Item.Значения.StandardCommand.Find - Normal - Auto - true - true - UserCmds - Auto - - - ЗначенияОтменитьПоиск - 67 - true - true - - true - - - ЗначенияОтменитьПоискExtendedTooltip - 146 - Label - true - true - - Left - - - Form.Item.Значения.StandardCommand.CancelSearch - Normal - Auto - true - true - UserCmds - Auto - - Left - - - BeforeAddRow - ЗначенияПередНачаломДобавления - - - BeforeRowChange - ЗначенияПередНачаломИзменения - - - OnChange - ЗначенияПриИзменении - - - ЗначенияСтрокаПоиска - 173 - - ЗначенияСтрокаПоискаРасширеннаяПодсказка - 175 - Label - true - true - - Left - - - - ЗначенияСтрокаПоискаКонтекстноеМеню - 174 - true - - Значения - - true - - - - ЗначенияСостояниеПросмотра - 176 - - ЗначенияСостояниеПросмотраРасширеннаяПодсказка - 178 - Label - true - true - - Left - - - - ЗначенияСостояниеПросмотраКонтекстноеМеню - 177 - true - - ViewStatusAddition - Значения - - true - - - - ЗначенияУправлениеПоиском - 179 - - ЗначенияУправлениеПоискомРасширеннаяПодсказка - 181 - Label - true - true - - Left - - - - ЗначенияУправлениеПоискомКонтекстноеМеню - 180 - true - - SearchControlAddition - Значения - - true - - - - ЗначенияExtendedTooltip - 147 - Label - true - true - - Left - - - - ЗначенияКонтекстноеМеню - 58 - - ЗначенияКонтекстноеМенюРедактирования - 109 - - ЗначенияСоздатьКонтекстноеМеню - 110 - true - true - - true - - - ЗначенияСоздатьКонтекстноеМенюРасширеннаяПодсказка - 135 - Label - true - true - - Left - - - Form.Item.Значения.StandardCommand.Create - Normal - Auto - true - true - UserCmds - Auto - - - ЗначенияСоздатьГруппуКонтекстноеМеню - 111 - true - true - - true - - - ЗначенияСоздатьГруппуКонтекстноеМенюРасширеннаяПодсказка - 136 - Label - true - true - - Left - - - Form.Item.Значения.StandardCommand.CreateFolder - Normal - Auto - true - true - UserCmds - Auto - - - ЗначенияИзменитьКонтекстноеМеню - 112 - true - true - - true - - - ЗначенияИзменитьКонтекстноеМенюРасширеннаяПодсказка - 137 - Label - true - true - - Left - - - Form.Item.Значения.StandardCommand.Change - Normal - Auto - true - true - UserCmds - Auto - - - ЗначенияУстановитьПометкуУдаленияКонтекстноеМеню - 113 - true - true - - true - - - ЗначенияУстановитьПометкуУдаленияКонтекстноеМенюРасширеннаяПодсказка - 138 - Label - true - true - - Left - - - Form.Item.Значения.StandardCommand.SetDeletionMark - Normal - Auto - true - true - UserCmds - Auto - - - ЗначенияКонтекстноеМенюСтандартныеКоманды - 86 - true - true - - true - + ГруппаСвойства + 326 + + Доступен + 187 <key>ru</key> - <value>Значения контекстное меню стандартные команды</value> + <value>Доступен</value> + true + true + + true + + + Объект.Доступен + + Right + + OnChange + ДоступенПриИзменении + - ЗначенияКонтекстноеМенюСтандартныеКомандыExtendedTooltip - 139 + ДоступенРасширеннаяПодсказка + 189 Label true true @@ -1001,8 +1205,249 @@ Left - - Item.Значения + + ДоступенКонтекстноеМеню + 188 + true + + CheckBoxField + Enter + true + Left + true + + + + Виден + 330 + + <key>ru</key> + <value>Виден</value> + + true + true + + true + + + Объект.Виден + + Right + + OnChange + ВиденПриИзменении + + + ВиденРасширеннаяПодсказка + 332 + Label + true + true + + Left + + + + ВиденКонтекстноеМеню + 331 + true + + CheckBoxField + Enter + true + Left + true + + + + ЗаполнятьОбязательно + 184 + true + true + + true + + + Объект.ЗаполнятьОбязательно + + Right + + OnChange + ЗаполнятьОбязательноПриИзменении + + + ЗаполнятьОбязательноРасширеннаяПодсказка + 186 + Label + true + true + + Left + + + + ЗаполнятьОбязательноКонтекстноеМеню + 185 + true + + CheckBoxField + Enter + true + Left + true + + + true + true + + true + + + <key>ru</key> + <value>Группа свойства</value> + + + ru + Группа свойства + + + ГруппаСвойстваРасширеннаяПодсказка + 327 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + true + true + Auto + Auto + + + + ГруппаНастройкаЗависимостей + 328 + + ЗадатьУсловиеДоступности + 194 + + <key>ru</key> + <value>всегда</value> + + true + true + + true + + + ЗадатьУсловиеДоступностиРасширеннаяПодсказка + 196 + Label + true + true + + Left + + + + ЗадатьУсловиеДоступностиКонтекстноеМеню + 195 + true + + Label + true + true + + + Click + ЗадатьУсловиеДоступностиНажатие + + true + Left + + + + ЗадатьУсловиеВидимости + 333 + + <key>ru</key> + <value>всегда</value> + + true + true + + true + + + ЗадатьУсловиеВидимостиРасширеннаяПодсказка + 335 + Label + true + true + + Left + + + + ЗадатьУсловиеВидимостиКонтекстноеМеню + 334 + true + + Label + true + true + + + Click + ЗадатьУсловиеВидимостиНажатие + + true + Left + + + + ЗадатьУсловиеЗаполнения + 197 + + <key>ru</key> + <value>всегда</value> + + true + true + + true + + + ЗадатьУсловиеЗаполненияРасширеннаяПодсказка + 199 + Label + true + true + + Left + + + + ЗадатьУсловиеЗаполненияКонтекстноеМеню + 198 + true + + Label + true + true + + + Click + ЗадатьУсловиеНажатие + + true + Left true @@ -1012,11 +1457,15 @@ <key>ru</key> - <value>Значения контекстное меню редактирования</value> + <value>Группа настройка зависимостей</value> + + ru + Группа настройка зависимостей + - ЗначенияКонтекстноеМенюРедактированияExtendedTooltip - 134 + ГруппаНастройкаЗависимостейРасширеннаяПодсказка + 329 Label true true @@ -1024,108 +1473,32 @@ Left - + UsualGroup + + Vertical + Auto + true + true + Auto + Auto + - - HierarchicalList - true - true - true - 9 - true - true - MultiRow -
        true
        - 1 - 1 - AutoUse - AutoUse - true - true - Auto - Auto - true - true - true - true - - Значения.DefaultPicture - - None - None - None - true - - 60 - - 0001-01-01T00:00:00 - 0001-01-01T00:00:00 - - - true - true - -
        - - ДополнительныеЗначенияСВесом - 69 - true - true - - true - - - Объект.ДополнительныеЗначенияСВесом - - Right - - OnChange - ДополнительныеЗначенияСВесомПриИзменении - - - ДополнительныеЗначенияСВесомExtendedTooltip - 150 - Label - true - true - - Left - - - - ДополнительныеЗначенияСВесомКонтекстноеМеню - 70 - true - - CheckBoxField - Enter - true - Left - true - - - - УточнениеСпискаЗначений - 89 - - УточнениеСпискаЗначенийКомментарий - 87 + true + true + + true + <key>ru</key> - <value>Список значений общий с реквизитом "Цвет" набора "Номенклатура (сумки)" </value> + <value>Группа свойства и зависимости</value> - true - true - - true - ru - Переход к редактированию списка значений. + Группа свойства и зависимости - УточнениеСпискаЗначенийКомментарийExtendedTooltip - 152 + ГруппаСвойстваИЗависимостиРасширеннаяПодсказка + 325 Label true true @@ -1133,34 +1506,200 @@ Left - - УточнениеСпискаЗначенийКомментарийКонтекстноеМеню - 88 - true - - Label - true - true - - - Click - УточнениеСпискаЗначенийКомментарийНажатие - - true - Left + UsualGroup + + Auto + true + true + Auto + Auto - - УточнениеСпискаЗначенийИзменить - 105 + + ОстальныеРеквизиты + 107 + + Подсказка + 30 + + <key>ru</key> + <value>Всплывающая подсказка</value> + + true + true + + true + + + Объект.Подсказка + + + ПодсказкаExtendedTooltip + 155 + Label + true + true + + Left + + + + ПодсказкаКонтекстноеМеню + 31 + true + + InputField + Enter + true + Left + true + + true + true + true + true + true + true + Normal + + + + ГруппаЗаголовкиФормЗначений + 32 + + ЗаголовокФормыЗначения + 33 + true + true + + true + + + Объект.ЗаголовокФормыЗначения + + + ru + Используется в заголовке формы дополнительного значения свойства. + + + ЗаголовокФормыЗначенияExtendedTooltip + 157 + Label + true + true + + Left + + + + ЗаголовокФормыЗначенияКонтекстноеМеню + 34 + true + + InputField + Enter + true + Left + true + + 20 + true + true + true + true + true + true + Normal + + + + ЗаголовокФормыВыбораЗначения + 35 + true + true + + true + + + Объект.ЗаголовокФормыВыбораЗначения + + + ru + Используется в заголовке формы выбора дополнительного значения свойства. + + + ЗаголовокФормыВыбораЗначенияExtendedTooltip + 158 + Label + true + true + + Left + + + + ЗаголовокФормыВыбораЗначенияКонтекстноеМеню + 36 + true + + InputField + Enter + true + Left + true + + 20 + true + true + true + true + true + true + Normal + + + true + true + + true + + + <key>ru</key> + <value>Группа заголовки форм значений</value> + + false + + ГруппаЗаголовкиФормЗначенийExtendedTooltip + 156 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + true + true + Auto + Auto + + true true true + + <key>ru</key> + <value>Остальные реквизиты</value> + - УточнениеСпискаЗначенийИзменитьExtendedTooltip - 153 + ОстальныеРеквизитыExtendedTooltip + 154 Label true true @@ -1168,14 +1707,117 @@ Left - UsualButton - Form.Command.УточнениеСпискаЗначенийИзменить - Normal - Auto - true - true - UserCmds - Auto + UsualGroup + + Vertical + Auto + true + true + Auto + Auto + + + + УточнениеНаборов + 96 + + УточнениеНаборовКомментарий + 99 + + <key>ru</key> + <value>Общий реквизит входит в набор "Расходный кассовый ордер" </value> + + true + true + + true + + + ru + Переход к набору. + + + УточнениеНаборовКомментарийExtendedTooltip + 161 + Label + true + true + + Left + + + + УточнениеНаборовКомментарийКонтекстноеМеню + 100 + true + + Label + true + true + + + Click + УточнениеНаборовКомментарийНажатие + + true + Left + + + + УточнениеНаборовИзменить + 106 + true + true + + true + + + УточнениеНаборовИзменитьExtendedTooltip + 162 + Label + true + true + + Left + + + UsualButton + Form.Command.УточнениеНаборовИзменить + Normal + Auto + true + true + UserCmds + Auto + + true + true + + true + + + <key>ru</key> + <value>Уточнение наборов</value> + + + УточнениеНаборовExtendedTooltip + 160 + Label + true + true + + Left + + + UsualGroup + + Auto + NormalSeparation + true + true + Auto + Auto + true true @@ -1184,15 +1826,15 @@ <key>ru</key> - <value>Уточнение списка значений</value> + <value>Главное</value> ru - Уточнение списка значений + Главная страница - УточнениеСпискаЗначенийExtendedTooltip - 151 + ГлавнаяСтраницаРасширеннаяПодсказка + 170 Label true true @@ -1200,113 +1842,1044 @@ Left - UsualGroup - - Auto - true - true - Auto - Auto - - - true - true - - true - - - <key>ru</key> - <value>Дополнительные значения:</value> - - - ДополнительныеЗначенияExtendedTooltip - 133 - Label - true - true - - Left - - - UsualGroup - - Vertical - Auto - true - true - Auto - Auto - - - - ОстальныеРеквизиты - 107 - - Подсказка - 30 - - <key>ru</key> - <value>Всплывающая подсказка</value> - - true - true - - true - - - Объект.Подсказка - - - ПодсказкаExtendedTooltip - 155 - Label - true - true - - Left - - - - ПодсказкаКонтекстноеМеню - 31 - true - - InputField - Enter - true - Left - true - - true - true - true - true - true - true - Normal + Page + + Vertical + auto - ГруппаЗаголовкиФормЗначений - 32 - - ЗаголовокФормыЗначения - 33 + СтраницаЗначения + 182 + + СтраницыЗначенияРеквизита + 287 + + ДополнительныеЗначения + 56 + + Значения + 57 + true + true + + true + + + Значения + + None + Copy + Delete + + ЗначенияНаименование + 60 + true + true + + true + + + Значения.Description + + + ЗначенияНаименованиеExtendedTooltip + 148 + Label + true + true + + Left + + + + ЗначенияНаименованиеКонтекстноеМеню + 61 + true + + LabelField + Enter + true + Left + true + + true + true + + + + ЗначенияВес + 83 + true + true + + true + + + Значения.Вес + + + ЗначенияВесExtendedTooltip + 149 + Label + true + true + + Left + + + + ЗначенияВесКонтекстноеМеню + 84 + true + + LabelField + Enter + true + Left + true + + 16 + true + true + + + + ЗначенияКоманднаяПанель + 59 + + ЗначенияКоманднаяПанельРедактирования + 108 + + ЗначенияСоздать + 62 + true + true + + true + + + ЗначенияСоздатьExtendedTooltip + 141 + Label + true + true + + Left + + + Form.Item.Значения.StandardCommand.Create + Normal + Auto + true + true + UserCmds + Auto + + + ЗначенияСоздатьГруппу + 68 + true + true + + true + + + ЗначенияСоздатьГруппуExtendedTooltip + 142 + Label + true + true + + Left + + + Form.Item.Значения.StandardCommand.CreateFolder + Normal + Auto + true + true + UserCmds + Auto + + + ЗначенияИзменить + 64 + true + true + + true + + + ЗначенияИзменитьExtendedTooltip + 143 + Label + true + true + + Left + + + Form.Item.Значения.StandardCommand.Change + Normal + Auto + true + true + UserCmds + Auto + + + ЗначенияУстановитьПометкуУдаления + 65 + true + true + + true + + + ЗначенияУстановитьПометкуУдаленияExtendedTooltip + 144 + Label + true + true + + Left + + + Form.Item.Значения.StandardCommand.SetDeletionMark + Normal + Auto + true + true + UserCmds + Auto + + true + true + + true + + + <key>ru</key> + <value>Значения командная панель редактирования</value> + + + ЗначенияКоманднаяПанельРедактированияExtendedTooltip + 140 + Label + true + true + + Left + + + + + + ЗначенияНайти + 66 + true + true + + true + + + ЗначенияНайтиExtendedTooltip + 145 + Label + true + true + + Left + + + Form.Item.Значения.StandardCommand.Find + Normal + Auto + true + true + UserCmds + Auto + + + ЗначенияОтменитьПоиск + 67 + true + true + + true + + + ЗначенияОтменитьПоискExtendedTooltip + 146 + Label + true + true + + Left + + + Form.Item.Значения.StandardCommand.CancelSearch + Normal + Auto + true + true + UserCmds + Auto + + + ФормаПоискИУдалениеДублей + 322 + true + true + + true + + + ФормаПоискИУдалениеДублейРасширеннаяПодсказка + 323 + Label + true + true + + Left + + + Form.Command.ПоискИУдалениеДублей + Normal + Auto + true + true + UserCmds + Auto + InAdditionalSubmenu + + Left + + + BeforeAddRow + ЗначенияПередНачаломДобавления + + + BeforeRowChange + ЗначенияПередНачаломИзменения + + + OnChange + ЗначенияПриИзменении + + + ЗначенияСтрокаПоиска + 173 + + ЗначенияСтрокаПоискаРасширеннаяПодсказка + 175 + Label + true + true + + Left + + + + ЗначенияСтрокаПоискаКонтекстноеМеню + 174 + true + + Значения + + true + + + + ЗначенияСостояниеПросмотра + 176 + + ЗначенияСостояниеПросмотраРасширеннаяПодсказка + 178 + Label + true + true + + Left + + + + ЗначенияСостояниеПросмотраКонтекстноеМеню + 177 + true + + ViewStatusAddition + Значения + + true + + + + ЗначенияУправлениеПоиском + 179 + + ЗначенияУправлениеПоискомРасширеннаяПодсказка + 181 + Label + true + true + + Left + + + + ЗначенияУправлениеПоискомКонтекстноеМеню + 180 + true + + SearchControlAddition + Значения + + true + + + + ЗначенияExtendedTooltip + 147 + Label + true + true + + Left + + + + ЗначенияКонтекстноеМеню + 58 + + ЗначенияКонтекстноеМенюРедактирования + 109 + + ЗначенияСоздатьКонтекстноеМеню + 110 + true + true + + true + + + ЗначенияСоздатьКонтекстноеМенюРасширеннаяПодсказка + 135 + Label + true + true + + Left + + + Form.Item.Значения.StandardCommand.Create + Normal + Auto + true + true + UserCmds + Auto + + + ЗначенияСоздатьГруппуКонтекстноеМеню + 111 + true + true + + true + + + ЗначенияСоздатьГруппуКонтекстноеМенюРасширеннаяПодсказка + 136 + Label + true + true + + Left + + + Form.Item.Значения.StandardCommand.CreateFolder + Normal + Auto + true + true + UserCmds + Auto + + + ЗначенияИзменитьКонтекстноеМеню + 112 + true + true + + true + + + ЗначенияИзменитьКонтекстноеМенюРасширеннаяПодсказка + 137 + Label + true + true + + Left + + + Form.Item.Значения.StandardCommand.Change + Normal + Auto + true + true + UserCmds + Auto + + + ЗначенияУстановитьПометкуУдаленияКонтекстноеМеню + 113 + true + true + + true + + + ЗначенияУстановитьПометкуУдаленияКонтекстноеМенюРасширеннаяПодсказка + 138 + Label + true + true + + Left + + + Form.Item.Значения.StandardCommand.SetDeletionMark + Normal + Auto + true + true + UserCmds + Auto + + + ЗначенияКонтекстноеМенюСтандартныеКоманды + 86 + true + true + + true + + + <key>ru</key> + <value>Значения контекстное меню стандартные команды</value> + + + ЗначенияКонтекстноеМенюСтандартныеКомандыExtendedTooltip + 139 + Label + true + true + + Left + + + + Item.Значения + + + true + true + + true + + + <key>ru</key> + <value>Значения контекстное меню редактирования</value> + + + ЗначенияКонтекстноеМенюРедактированияExtendedTooltip + 134 + Label + true + true + + Left + + + + + + Tree + true + true + true + 9 + true + true + MultiRow + Row +
        true
        + 1 + 1 + AutoUse + AutoUse + true + true + Auto + Auto + ExpandTopLevel + true + true + true + true + + Значения.DefaultPicture + + None + None + None + true + + 60 + + 0001-01-01T00:00:00 + 0001-01-01T00:00:00 + + + true + +
        + true + true + + true + + + <key>ru</key> + <value>Дополнительные значения:</value> + + + ДополнительныеЗначенияExtendedTooltip + 133 + Label + true + true + + Left + + + Page + + Vertical + auto + +
        + + СтраницаДеревоЗначений + 289 + + ЗначенияДополнительногоРеквизита + 291 + true + true + + true + + + ЗначенияДополнительныхРеквизитов + + None + Add + Change + Copy + CopyToClipboard + Delete + EndEdit + HierarchicalList + List + MoveDown + MoveUp + OutputList + SelectAll + ShowMultipleSelection + ShowRowRearrangement + SortListAsc + SortListDesc + Tree + + ЗначенияДополнительногоРеквизитаНаименование + 304 + true + true + + true + + + ЗначенияДополнительныхРеквизитов.Наименование + + + ЗначенияДополнительногоРеквизитаНаименованиеРасширеннаяПодсказка + 306 + Label + true + true + + Left + + + + ЗначенияДополнительногоРеквизитаНаименованиеКонтекстноеМеню + 305 + true + + InputField + true + Auto + true + Left + true + + true + true + true + true + true + true + Normal + + + + ЗначенияДополнительногоРеквизитаВес + 307 + + <key>ru</key> + <value>Весовой коэффициент</value> + + true + true + + true + + + ЗначенияДополнительныхРеквизитов.Вес + + + ЗначенияДополнительногоРеквизитаВесРасширеннаяПодсказка + 309 + Label + true + true + + Left + + + + ЗначенияДополнительногоРеквизитаВесКонтекстноеМеню + 308 + true + + InputField + true + Auto + true + Left + true + + true + true + true + true + true + true + Normal + + + + ЗначенияДополнительногоРеквизитаКоманднаяПанель + 293 + + ЗначенияДополнительныхРеквизитов1Группа1 + 310 + + ЗначенияДополнительногоРеквизитаСоздать + 312 + true + true + + true + + + ЗначенияДополнительногоРеквизитаСоздатьРасширеннаяПодсказка + 313 + Label + true + true + + Left + + + Form.Item.Значения.StandardCommand.Create + Normal + Auto + true + true + UserCmds + Auto + + + ЗначенияДополнительногоРеквизитаГруппу + 314 + true + true + + true + + + ЗначенияДополнительногоРеквизитаГруппуРасширеннаяПодсказка + 315 + Label + true + true + + Left + + + Form.Item.Значения.StandardCommand.CreateFolder + Normal + Auto + true + true + UserCmds + Auto + + true + true + + true + + + ЗначенияДополнительныхРеквизитов1Группа1РасширеннаяПодсказка + 311 + Label + true + true + + Left + + + + + Left + + + ЗначенияДополнительногоРеквизитаСтрокаПоиска + 295 + + ЗначенияДополнительногоРеквизитаСтрокаПоискаРасширеннаяПодсказка + 297 + Label + true + true + + Left + + + + ЗначенияДополнительногоРеквизитаСтрокаПоискаКонтекстноеМеню + 296 + true + + ЗначенияДополнительногоРеквизита + + true + + + + ЗначенияДополнительногоРеквизитаСостояниеПросмотра + 298 + + ЗначенияДополнительногоРеквизитаСостояниеПросмотраРасширеннаяПодсказка + 300 + Label + true + true + + Left + + + + ЗначенияДополнительногоРеквизитаСостояниеПросмотраКонтекстноеМеню + 299 + true + + ViewStatusAddition + ЗначенияДополнительногоРеквизита + + true + + + + ЗначенияДополнительногоРеквизитаУправлениеПоиском + 301 + + ЗначенияДополнительногоРеквизитаУправлениеПоискомРасширеннаяПодсказка + 303 + Label + true + true + + Left + + + + ЗначенияДополнительногоРеквизитаУправлениеПоискомКонтекстноеМеню + 302 + true + + SearchControlAddition + ЗначенияДополнительногоРеквизита + + true + + + + ЗначенияДополнительногоРеквизитаРасширеннаяПодсказка + 294 + Label + true + true + + Left + + + + ЗначенияДополнительногоРеквизитаКонтекстноеМеню + 292 + + КонтекстноеМенюЗначенияДополнительногоРеквизитаСоздать1 + 318 + true + true + + true + + + КонтекстноеМенюЗначенияДополнительногоРеквизитаСоздать1РасширеннаяПодсказка + 319 + Label + true + true + + Left + + + Form.Item.Значения.StandardCommand.Create + Normal + Auto + true + true + UserCmds + Auto + + + КонтекстноеМенюЗначенияДополнительногоРеквизитаГруппу + 316 + true + true + + true + + + КонтекстноеМенюЗначенияДополнительногоРеквизитаГруппуРасширеннаяПодсказка + 317 + Label + true + true + + Left + + + Form.Item.Значения.StandardCommand.CreateFolder + Normal + Auto + true + true + UserCmds + Auto + + true + + Tree + true + true + true + true + true + MultiRow + Row +
        true
        + 1 + 1 + AutoUse + AutoUse + true + true + false + true + Auto + Auto + ExpandTopLevel + true + true + true + true + + ЗначенияДополнительныхРеквизитов.КодКартинки + + + StdPicture.Attribute + + true +
        + true + true + + true + + + <key>ru</key> + <value>Страница дерево значений</value> + + + ru + Страница дерево значений + + + СтраницаДеревоЗначенийРасширеннаяПодсказка + 290 + Label + true + true + + Left + + + Page + + Vertical + auto + +
        true true true - - Объект.ЗаголовокФормыЗначения - - + <key>ru</key> - <value>Используется в заголовке формы дополнительного значения свойства.</value> - </toolTip> + <value>Страницы значения реквизита</value> + - ЗаголовокФормыЗначенияExtendedTooltip - 157 + СтраницыЗначенияРеквизитаРасширеннаяПодсказка + 288 Label true true @@ -1314,45 +2887,30 @@ Left - - ЗаголовокФормыЗначенияКонтекстноеМеню - 34 - true - - InputField - Enter - true - Left - true - - 20 - true - true - true - true - true - true - Normal + Pages + + Auto
        - ЗаголовокФормыВыбораЗначения - 35 + ДополнительныеЗначенияСВесом + 69 true true true - Объект.ЗаголовокФормыВыбораЗначения + Объект.ДополнительныеЗначенияСВесом - - ru - Используется в заголовке формы выбора дополнительного значения свойства. - + Right + + OnChange + ДополнительныеЗначенияСВесомПриИзменении + - ЗаголовокФормыВыбораЗначенияExtendedTooltip - 158 + ДополнительныеЗначенияСВесомExtendedTooltip + 150 Label true true @@ -1361,24 +2919,120 @@ - ЗаголовокФормыВыбораЗначенияКонтекстноеМеню - 36 + ДополнительныеЗначенияСВесомКонтекстноеМеню + 70 true - InputField + CheckBoxField Enter true Left true - - 20 + + + + УточнениеСпискаЗначений + 89 + + УточнениеСпискаЗначенийКомментарий + 87 + + <key>ru</key> + <value>Список значений общий с реквизитом "Цвет" набора "Номенклатура (сумки)" </value> + + true + true + + true + + + ru + Переход к редактированию списка значений. + + + УточнениеСпискаЗначенийКомментарийExtendedTooltip + 152 + Label + true + true + + Left + + + + УточнениеСпискаЗначенийКомментарийКонтекстноеМеню + 88 + true + + Label true true - true - true - true - true - Normal + + + Click + УточнениеСпискаЗначенийКомментарийНажатие + + true + Left + + + + УточнениеСпискаЗначенийИзменить + 105 + true + true + + true + + + УточнениеСпискаЗначенийИзменитьExtendedTooltip + 153 + Label + true + true + + Left + + + UsualButton + Form.Command.УточнениеСпискаЗначенийИзменить + Normal + Auto + true + true + UserCmds + Auto + + true + true + + true + + + <key>ru</key> + <value>Уточнение списка значений</value> + + + ru + Уточнение списка значений + + + УточнениеСпискаЗначенийExtendedTooltip + 151 + Label + true + true + + Left + + + UsualGroup + + Auto + true + true + Auto + Auto true @@ -1388,80 +3042,15 @@ <key>ru</key> - <value>Группа заголовки форм значений</value> + <value>Значения</value> - false - - ГруппаЗаголовкиФормЗначенийExtendedTooltip - 156 - Label - true - true - - Left - - - UsualGroup - - Vertical - Auto - true - true - Auto - Auto - -
        - true - true - - true - - - <key>ru</key> - <value>Остальные реквизиты</value> - - - ОстальныеРеквизитыExtendedTooltip - 154 - Label - true - true - - Left - - - UsualGroup - - Vertical - Auto - true - true - Auto - Auto - -
        - - УточнениеНаборов - 96 - - УточнениеНаборовКомментарий - 99 - - <key>ru</key> - <value>Общий реквизит входит в набор "Расходный кассовый ордер" </value> - - true - true - - true - ru - Переход к набору. + Страница значения - УточнениеНаборовКомментарийExtendedTooltip - 161 + СтраницаЗначенияРасширеннаяПодсказка + 183 Label true true @@ -1469,34 +3058,82 @@ Left - - УточнениеНаборовКомментарийКонтекстноеМеню - 100 - true - - Label - true - true - - - Click - УточнениеНаборовКомментарийНажатие - - true - Left + Page + + Vertical + auto - - УточнениеНаборовИзменить - 106 + + СтраницаКомментарий + 171 + + Комментарий + 28 + true + true + + true + + + Объект.Комментарий + + None + + OnChange + КомментарийПриИзменении + + + КомментарийExtendedTooltip + 159 + Label + true + true + + Left + + + + КомментарийКонтекстноеМеню + 29 + true + + InputField + Enter + true + Left + true + + + Opening + КомментарийОткрытие + + true + 2 + true + true + true + true + true + false + true + true + true + Normal + + true true true + + <key>ru</key> + <value>Комментарий</value> + - УточнениеНаборовИзменитьExtendedTooltip - 162 + СтраницаКомментарийРасширеннаяПодсказка + 172 Label true true @@ -1504,14 +3141,11 @@ Left - UsualButton - Form.Command.УточнениеНаборовИзменить - Normal - Auto - true - true - UserCmds - Auto + Page + + Vertical + auto + true true @@ -1520,11 +3154,15 @@ <key>ru</key> - <value>Уточнение наборов</value> + <value>Страницы</value> + + ru + Страницы + - УточнениеНаборовExtendedTooltip - 160 + СтраницыРасширеннаяПодсказка + 168 Label true true @@ -1532,13 +3170,9 @@ Left - UsualGroup - - Auto - NormalSeparation - true - true - Auto + Pages + + TabsOnTop Auto @@ -1549,15 +3183,11 @@ <key>ru</key> - <value>Главная</value> + <value>Карточка реквизита</value> - - ru - Главная страница - - ГлавнаяСтраницаРасширеннаяПодсказка - 170 + КарточкаРеквизитаРасширеннаяПодсказка + 207 Label true true @@ -1568,86 +3198,6 @@ Page Vertical - auto - - - - СтраницаКомментарий - 171 - - Комментарий - 28 - true - true - - true - - - Объект.Комментарий - - None - - КомментарийExtendedTooltip - 159 - Label - true - true - - Left - - - - КомментарийКонтекстноеМеню - 29 - true - - InputField - Enter - true - Left - true - - - Opening - КомментарийОткрытие - - true - 2 - true - true - true - true - true - false - true - true - true - Normal - - - true - true - - true - - - <key>ru</key> - <value>Комментарий</value> - - - СтраницаКомментарийРасширеннаяПодсказка - 172 - Label - true - true - - Left - - - Page - - Vertical - auto true @@ -1657,15 +3207,11 @@ <key>ru</key> - <value>Страницы</value> + <value>Страницы помощник карточка</value> - - ru - Страницы - - СтраницыРасширеннаяПодсказка - 168 + СтраницыПомощникКарточкаРасширеннаяПодсказка + 201 Label true true @@ -1675,7 +3221,173 @@ Pages - TabsOnTop + Auto + +
        + + КоманднаяПанельПомощника + 227 + + КоманднаяПанельЛево + 229 + + КомандаНазад + 233 + true + true + + true + + + КомандаНазадРасширеннаяПодсказка + 234 + Label + true + true + + Left + + + Form.Command.КомандаНазад + Normal + Auto + true + true + UserCmds + Auto + + true + true + + true + + + <key>ru</key> + <value>Командная панель лево</value> + + + ru + Командная панель лево + + + КоманднаяПанельЛевоРасширеннаяПодсказка + 230 + Label + true + true + + Left + + + CommandBar + + Left + + + + КоманднаяПанельПраво + 231 + + КомандаДалее + 235 + true + true + + true + + + КомандаДалееРасширеннаяПодсказка + 236 + Label + true + true + + Left + + + Form.Command.КомандаДалее + Normal + Auto + true + true + UserCmds + Auto + + + Закрыть + 242 + true + true + + true + + + ЗакрытьРасширеннаяПодсказка + 243 + Label + true + true + + Left + + + Form.Command.ЗакрытьФорму + Normal + Auto + true + true + UserCmds + Auto + + true + true + + true + + + <key>ru</key> + <value>Командная панель право</value> + + + КоманднаяПанельПравоРасширеннаяПодсказка + 232 + Label + true + true + + Left + + + CommandBar + + Right + + + true + true + + true + + + <key>ru</key> + <value>Командная панель помощника</value> + + + КоманднаяПанельПомощникаРасширеннаяПодсказка + 228 + Label + true + true + + Left + + + UsualGroup + + Auto + true + true + Auto Auto @@ -1683,12 +3395,19 @@ ФормаКоманднаяПанель -1 Left - true ChoiceProcessing ОбработкаВыбора + + NotificationProcessing + ОбработкаОповещения + + + OnOpen + ПриОткрытии + OnCreateAtServer ПриСозданииНаСервере @@ -1863,6 +3582,270 @@ true + + СписокДополнительныхРеквизитов + + <key>ru</key> + <value>Список дополнительных реквизитов</value> + + 12 + + DynamicList + + + true + + + true + + + СписокДополнительныхРеквизитов.Ref + + + ВЫБРАТЬ + Свойства.Ссылка, + Свойства.ВерсияДанных, + Свойства.ПометкаУдаления, + Свойства.Предопределенный, + Свойства.Заголовок, + ВЫБОР + КОГДА Свойства.НаборСвойств = ЗНАЧЕНИЕ(Справочник.НаборыДополнительныхРеквизитовИСведений.ПустаяСсылка) + ТОГДА &ПредставлениеГруппировкиОбщихСвойств + КОГДА Свойства.НаборСвойств.Родитель = ЗНАЧЕНИЕ(Справочник.НаборыДополнительныхРеквизитовИСведений.ПустаяСсылка) + ТОГДА Свойства.НаборСвойств + ИНАЧЕ Свойства.НаборСвойств.Родитель.Наименование + " (" + Свойства.НаборСвойств.Наименование + ")" + КОНЕЦ КАК НаборСвойствГруппировка, + Свойства.НаборСвойств, + Свойства.ДополнительныеЗначенияИспользуются, + Свойства.ВладелецДополнительныхЗначений, + Свойства.Наименование, + Свойства.ТипЗначения, + Свойства.ЭтоДополнительноеСведение, + Свойства.МногострочноеПолеВвода, + Свойства.ЗаполнятьОбязательно, + Свойства.ЗаголовокФормыЗначения, + Свойства.ЗаголовокФормыВыбораЗначения, + Свойства.ФорматСвойства, + Свойства.Комментарий, + Свойства.Подсказка, + ВЫБОР + КОГДА Свойства.ЭтоДополнительноеСведение + ТОГДА 2 + ИНАЧЕ 1 + КОНЕЦ + ВЫБОР + КОГДА Свойства.Предопределенный + ТОГДА 6 + КОГДА Свойства.ПометкаУдаления + ТОГДА 3 + ИНАЧЕ 0 + КОНЕЦ КАК НомерКартинки +ИЗ + ПланВидовХарактеристик.ДополнительныеРеквизитыИСведения КАК Свойства + ChartOfCharacteristicTypes.ДополнительныеРеквизитыИСведения + true + true + true + true + true + + + + ПереданныеПараметрыФормы + + <key>ru</key> + <value>Переданные параметры формы</value> + + 13 + + + true + + + true + + + + РежимДобавленияРеквизита + + <key>ru</key> + <value>Режим добавления реквизита</value> + + 14 + + String + + + + true + + + true + + + + РежимПомощника + + <key>ru</key> + <value>Режим помощника</value> + + 15 + + Boolean + + + true + + + true + + + + ЗначенияДополнительныхРеквизитов + + <key>ru</key> + <value>Значения дополнительных реквизитов</value> + + 16 + + ValueTree + + + true + + + true + + + Ссылка + + <key>ru</key> + <value>Ссылка</value> + + 1 + + CatalogRef.ЗначенияСвойствОбъектовИерархия + CatalogRef.ЗначенияСвойствОбъектов + + + true + + + true + + + + КодКартинки + + <key>ru</key> + <value>Код картинки</value> + + 3 + + Number + + 10 + + + + true + + + true + + + + Вес + + <key>ru</key> + <value>Вес</value> + + 2 + + Number + + 10 + + + + true + + + true + + + + Наименование + + <key>ru</key> + <value>Наименование</value> + + 4 + + String + + + + true + + + true + + + + + ПустаяСсылка + + <key>ru</key> + <value>Пустая ссылка</value> + + 17 + + ChartOfCharacteristicTypesRef.ДополнительныеРеквизитыИСведения + + + true + + + true + + + + УсловияЗависимостиРеквизитов + + <key>ru</key> + <value>Условия зависимости реквизитов</value> + + 18 + + ValueList + + + true + + + true + + + + + + + ИзмененыУсловияЗависимостиРеквизитов + + <key>ru</key> + <value>Изменены условия зависимости реквизитов</value> + + 19 + + Boolean + + + true + + + true + + РедактироватьФорматЗначения @@ -1883,7 +3866,7 @@ </handler> </action> <modifiesStoredData>true</modifiesStoredData> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <formCommands> @@ -1905,7 +3888,7 @@ <name>УточнениеСпискаЗначенийИзменить</name> </handler> </action> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <formCommands> @@ -1927,7 +3910,95 @@ <name>УточнениеНаборовИзменить</name> </handler> </action> - <currentRowUse>Auto</currentRowUse> + <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> + + 5 + + ru + Команда назад + + + true + + + + КомандаНазад + + + DontUse + Auto + + + ЗакрытьФорму + + <key>ru</key> + <value>Закрыть</value> + + 6 + + ru + Закрыть форму + + + true + + + + ЗакрытьФорму + + + DontUse + Auto + + + ПоискИУдалениеДублей + + <key>ru</key> + <value>Поиск и удаление дублей...</value> + + 7 + + ru + Поиск и удаление дублей + + + true + + + + ПоискИУдалениеДублей + + + DontUse Auto @@ -1952,6 +4023,28 @@ Boolean + + ВыборОбщегоСвойства + + Boolean + + + + ВыбранныеЗначения + + + + ВыборВладельцаДополнительныхЗначений + + Boolean + + + + КопированиеСВопросом + + Boolean + + diff --git a/SSL/src/ChartsOfCharacteristicTypes/ДополнительныеРеквизитыИСведения/Forms/ФормаЭлемента/Help/ru.html b/SSL/src/ChartsOfCharacteristicTypes/ДополнительныеРеквизитыИСведения/Forms/ФормаЭлемента/Help/ru.html index b3716b5a8..cd7f9dabb 100644 --- a/SSL/src/ChartsOfCharacteristicTypes/ДополнительныеРеквизитыИСведения/Forms/ФормаЭлемента/Help/ru.html +++ b/SSL/src/ChartsOfCharacteristicTypes/ДополнительныеРеквизитыИСведения/Forms/ФормаЭлемента/Help/ru.html @@ -1,31 +1,80 @@

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

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

        -

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

        +

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

      • Строка - Определите Длину строки, выберите параметр Фиксированная или Переменная (если введенная строка получится меньше предполагаемой длины, то количество знаков, отведенное под это значение, будет автоматически уменьшено до фактической). Максимальная длина строки в этом случае 1024 символа. Также можно включить флажок Неограниченная, если планируется вводить большой объем текстовой информации. 
        • Для дополнительного реквизита типа Строка в программе предлагается возможность сделать поле многострочным. Для этого включите флажок Многострочное поле ввода и введите количество строк.
      • Число - выберите Длину числа и его Точность. По умолчанию программа предлагает длину числа 15 и точность 3. В зависимости от вводимых данных эти цифры могут меняться. Необходимо учитывать, что в количество знаков Длины числа входит количество знаков целой части, и десятичная точка, и количество знаков дробной части. При необходимости включите флажок Неотрицательное. diff --git a/SSL/src/ChartsOfCharacteristicTypes/ДополнительныеРеквизитыИСведения/Forms/ФормаЭлемента/Module.bsl b/SSL/src/ChartsOfCharacteristicTypes/ДополнительныеРеквизитыИСведения/Forms/ФормаЭлемента/Module.bsl index d69072df3..9a6afc924 100644 --- a/SSL/src/ChartsOfCharacteristicTypes/ДополнительныеРеквизитыИСведения/Forms/ФормаЭлемента/Module.bsl +++ b/SSL/src/ChartsOfCharacteristicTypes/ДополнительныеРеквизитыИСведения/Forms/ФормаЭлемента/Module.bsl @@ -10,42 +10,51 @@ Возврат; КонецЕсли; - // Обработчик подсистемы запрета редактирования реквизитов объектов. - ЗапретРедактированияРеквизитовОбъектов.ЗаблокироватьРеквизиты(ЭтотОбъект); + ПереданныеПараметрыФормы = Новый Структура; + ПереданныеПараметрыФормы.Вставить("ВладелецДополнительныхЗначений"); + ПереданныеПараметрыФормы.Вставить("ПоказатьУточнениеНабора"); + ПереданныеПараметрыФормы.Вставить("ТекущийНаборСвойств"); + ПереданныеПараметрыФормы.Вставить("ЭтоДополнительноеСведение"); + ПереданныеПараметрыФормы.Вставить("ВыборОбщегоСвойства"); + ПереданныеПараметрыФормы.Вставить("ВыбранныеЗначения"); + ПереданныеПараметрыФормы.Вставить("ВыборВладельцаДополнительныхЗначений"); + ПереданныеПараметрыФормы.Вставить("ЗначениеКопирования"); + ПереданныеПараметрыФормы.Вставить("КопированиеСВопросом"); + ПереданныеПараметрыФормы.Вставить("Перетаскивание", Ложь); + ЗаполнитьЗначенияСвойств(ПереданныеПараметрыФормы, Параметры); - ТекущийНаборСвойств = Параметры.ТекущийНаборСвойств; + Если ПереданныеПараметрыФормы.КопированиеСВопросом + И Не ПолучитьФункциональнуюОпцию("ИспользоватьОбщиеДополнительныеРеквизитыИСведения") + И (Не РеквизитСоСпискомДополнительныхЗначений() + Или Не ПолучитьФункциональнуюОпцию("ИспользоватьОбщиеДополнительныеЗначения")) Тогда + ПереданныеПараметрыФормы.КопированиеСВопросом = Ложь; + ПереданныеПараметрыФормы.ЗначениеКопирования = ПереданныеПараметрыФормы.ВладелецДополнительныхЗначений; + КонецЕсли; - Если ЗначениеЗаполнено(Объект.Ссылка) Тогда - Элементы.ЭтоДополнительноеСведение.Доступность = Ложь; - ПоказатьУточнениеНабора = Параметры.ПоказатьУточнениеНабора; + Если ПереданныеПараметрыФормы.ВыборОбщегоСвойства + Или ПереданныеПараметрыФормы.ВыборВладельцаДополнительныхЗначений + Или ПереданныеПараметрыФормы.КопированиеСВопросом Тогда + ЭтотОбъект.РежимОткрытияОкна = РежимОткрытияОкнаФормы.БлокироватьОкноВладельца; + РежимПомощника = Истина; + Если ПереданныеПараметрыФормы.КопированиеСВопросом Тогда + Элементы.СтраницыПомощникКарточка.ТекущаяСтраница = Элементы.ВыборДействия; + ЗаполнитьСписокДействийПриДобавленииРеквизита(); + Иначе + ЗаполнитьСтраницуВыбора(); + КонецЕсли; + ОбновитьСоставЭлементовФормы(); + + Если ОбщегоНазначенияКлиентСервер.ЭтоВебКлиент() Тогда + Элементы.КарточкаРеквизита.Видимость = Ложь; + КонецЕсли; Иначе - Если ЗначениеЗаполнено(ТекущийНаборСвойств) Тогда - Объект.НаборСвойств = ТекущийНаборСвойств; - КонецЕсли; - - Если ЗначениеЗаполнено(Параметры.ВладелецДополнительныхЗначений) Тогда - Объект.ВладелецДополнительныхЗначений = Параметры.ВладелецДополнительныхЗначений; - КонецЕсли; - - Если Параметры.ЭтоДополнительноеСведение <> Неопределено Тогда - Объект.ЭтоДополнительноеСведение = Параметры.ЭтоДополнительноеСведение; - - ИначеЕсли НЕ ЗначениеЗаполнено(Параметры.ЗначениеКопирования) Тогда - Элементы.ЭтоДополнительноеСведение.Видимость = Истина; - КонецЕсли; + ЗаполнитьКарточкуРеквизитаИлиСведения(); + // Обработчик подсистемы запрета редактирования реквизитов объектов. + ЗапретРедактированияРеквизитовОбъектов.ЗаблокироватьРеквизиты(ЭтотОбъект, Элементы.ОсновнаяКоманднаяПанель); КонецЕсли; - Если Объект.Предопределенный И НЕ ЗначениеЗаполнено(Объект.Заголовок) Тогда - Объект.Заголовок = Объект.Наименование; - КонецЕсли; - - ЭтоДополнительноеСведение = ?(Объект.ЭтоДополнительноеСведение, 1, 0); - - ОбновитьСоставЭлементовФормы(); - - Если Объект.МногострочноеПолеВвода > 0 Тогда - МногострочноеПолеВвода = Истина; - МногострочноеПолеВводаЧисло = Объект.МногострочноеПолеВвода; + Если Не ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ПоискИУдалениеДублей") Тогда + Элементы.ФормаПоискИУдалениеДублей.Видимость = Ложь; КонецЕсли; КонецПроцедуры @@ -53,6 +62,13 @@ &НаКлиенте Процедура ОбработкаВыбора(ВыбранноеЗначение, ИсточникВыбора) + // СтандартныеПодсистемы.ЗапретРедактированияРеквизитовОбъектов + Если ВРег(ИсточникВыбора.ИмяФормы) = ВРег("ПланВидовХарактеристик.ДополнительныеРеквизитыИСведения.Форма.РазблокированиеРеквизитов") Тогда + ЗапретРедактированияРеквизитовОбъектовКлиент.УстановитьДоступностьЭлементовФормы(ЭтотОбъект, ВыбранноеЗначение); + Возврат; + КонецЕсли; + // Конец СтандартныеПодсистемы.ЗапретРедактированияРеквизитовОбъектов + Если ТипЗнч(ВыбранноеЗначение) = Тип("ПланВидовХарактеристикСсылка.ДополнительныеРеквизитыИСведения") Тогда Закрыть(); @@ -128,6 +144,8 @@ КонецЕсли; КонецЕсли; + УстановитьЗависимостиДополнительныхРеквизитов(ТекущийОбъект); + КонецПроцедуры &НаСервере @@ -156,6 +174,7 @@ ОбъектНаборСвойств.Записать(); ТекущийОбъект.ДополнительныеСвойства.Вставить("ИзмененныйНабор", ДобавитьВНабор); КонецЕсли; + КонецЕсли; Если ПараметрыЗаписи.Свойство("ОчиститьВведенныеВесовыеКоэффициенты") Тогда @@ -167,6 +186,10 @@ &НаСервере Процедура ПослеЗаписиНаСервере(ТекущийОбъект, ПараметрыЗаписи) + Если РежимДобавленияРеквизита = "СоздатьКопированием" Тогда + ЗаписатьЗначенияДополнительногоРеквизитаПриКопировании(ТекущийОбъект); + КонецЕсли; + // Обработчик подсистемы запрета редактирования реквизитов объектов. ЗапретРедактированияРеквизитовОбъектов.ЗаблокироватьРеквизиты(ЭтотОбъект); @@ -201,6 +224,15 @@ КонецПроцедуры +&НаКлиенте +Процедура ПриОткрытии(Отказ) + Если РежимПомощника Тогда + УстановитьНастройкиПомощника(); + Иначе + УстановитьКартинкуКомментария(); + КонецЕсли; +КонецПроцедуры + #КонецОбласти #Область ОбработчикиСобытийЭлементовШапкиФормы @@ -242,6 +274,16 @@ КонецПроцедуры +&НаКлиенте +Процедура СписокДополнительныхРеквизитовПриАктивизацииСтроки(Элемент) + Если ТипЗнч(Элемент.ТекущаяСтрока) = Тип("ПланВидовХарактеристикСсылка.ДополнительныеРеквизитыИСведения") Тогда + ВладелецЗначений = Элемент.ТекущаяСтрока; + ЗаполнитьЗначенияДополнительныхРеквизитов(ВладелецЗначений); + Иначе + ЗначенияДополнительныхРеквизитов.ПолучитьЭлементы().Очистить(); + КонецЕсли; +КонецПроцедуры + &НаКлиенте Процедура ДополнительныеЗначенияСВесомПриИзменении(Элемент) @@ -284,6 +326,80 @@ КонецПроцедуры +&НаКлиенте +Процедура ДоступенПриИзменении(Элемент) + Если ЗначениеЗаполнено(Объект.Ссылка) Тогда + Элементы.ЗадатьУсловиеДоступности.Доступность = Объект.Доступен; + КонецЕсли; +КонецПроцедуры + +&НаКлиенте +Процедура ЗаполнятьОбязательноПриИзменении(Элемент) + Если ЗначениеЗаполнено(Объект.Ссылка) Тогда + Элементы.ЗадатьУсловиеЗаполнения.Доступность = Объект.ЗаполнятьОбязательно; + КонецЕсли; +КонецПроцедуры + +&НаКлиенте +Процедура ВиденПриИзменении(Элемент) + Если ЗначениеЗаполнено(Объект.Ссылка) Тогда + Элементы.ЗадатьУсловиеВидимости.Доступность = Объект.Виден; + КонецЕсли; +КонецПроцедуры + +&НаКлиенте +Процедура ЗадатьУсловиеДоступностиНажатие(Элемент) + ОткрытьФормуНастройкиЗависимости("Доступен"); +КонецПроцедуры + +&НаКлиенте +Процедура ЗадатьУсловиеНажатие(Элемент) + ОткрытьФормуНастройкиЗависимости("ЗаполнятьОбязательно"); +КонецПроцедуры + +&НаКлиенте +Процедура ЗадатьУсловиеВидимостиНажатие(Элемент) + ОткрытьФормуНастройкиЗависимости("Виден"); +КонецПроцедуры + +&НаКлиенте +Процедура ОбработкаОповещения(ИмяСобытия, Параметр, Источник) + Если ИмяСобытия = "Свойства_УстановленаЗависимостьРеквизита" Тогда + Модифицированность = Истина; + ЗначениеДобавлено = Ложь; + Для Каждого УсловиеЗависимости Из УсловияЗависимостиРеквизитов Цикл + Значение = Неопределено; + Если Параметр.Свойство(УсловиеЗависимости.Представление, Значение) Тогда + ЗначениеВХранилище = ПоместитьВоВременноеХранилище(Значение, УникальныйИдентификатор); + УсловиеЗависимости.Значение = ЗначениеВХранилище; + ЗначениеДобавлено = Истина; + КонецЕсли; + КонецЦикла; + Если Не ЗначениеДобавлено Тогда + Для Каждого ПереданныйПараметр Из Параметр Цикл + ЗначениеВХранилище = ПоместитьВоВременноеХранилище(ПереданныйПараметр.Значение, УникальныйИдентификатор); + УсловияЗависимостиРеквизитов.Добавить(ЗначениеВХранилище, ПереданныйПараметр.Ключ); + КонецЦикла; + КонецЕсли; + КонецЕсли; +КонецПроцедуры + +&НаКлиенте +Процедура КомментарийПриИзменении(Элемент) + УстановитьКартинкуКомментария(); +КонецПроцедуры + +#КонецОбласти + +#Область ОбработчикиСобытийЭлементовТаблицыФормыСписокДополнительныхРеквизитов + +&НаКлиенте +Процедура СписокДополнительныхРеквизитовВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка) + СтандартнаяОбработка = Ложь; + + КомандаДалее(Неопределено); +КонецПроцедуры + #КонецОбласти #Область ОбработчикиСобытийЭлементовТаблицыФормыЗначения @@ -340,6 +456,74 @@ #Область ОбработчикиКомандФормы +&НаКлиенте +Процедура КомандаДалее(Команда) + + Если ОбщегоНазначенияКлиентСервер.ЭтоВебКлиент() Тогда + Если Не Элементы.КарточкаРеквизита.Видимость Тогда + Элементы.КарточкаРеквизита.Видимость = Истина; + КонецЕсли; + КонецЕсли; + + Если РежимДобавленияРеквизита = "СделатьОбщим" Тогда + КонвертироватьДополнительныйРеквизитВОбщий(); + КонецЕсли; + + Если РежимДобавленияРеквизита = "ДобавитьОбщийРеквизитВНабор" + Или РежимДобавленияРеквизита = "СделатьОбщим" Тогда + Результат = Новый Структура; + Результат.Вставить("ОбщееСвойство", ПереданныеПараметрыФормы.ВладелецДополнительныхЗначений); + Если ПереданныеПараметрыФормы.Перетаскивание Тогда + Результат.Вставить("Перетаскивание", Истина); + КонецЕсли; + ОповеститьОВыборе(Результат); + Возврат; + КонецЕсли; + + ОсновнаяСтраница = Элементы.СтраницыПомощникКарточка; + ИндексСтраницы = ОсновнаяСтраница.ПодчиненныеЭлементы.Индекс(ОсновнаяСтраница.ТекущаяСтраница); + Если ИндексСтраницы = 0 + И ТипЗнч(Элементы.СписокДополнительныхРеквизитов.ТекущаяСтрока) <> Тип("ПланВидовХарактеристикСсылка.ДополнительныеРеквизитыИСведения") Тогда + ТекстПредупреждения = НСтр("ru = 'Выберите элемент, а не группу! + |Для раскрытия групп используйте ""Ctrl"" и стрелки вверх/вниз или клавиши ""+"" и ""-"" на дополнительной клавиатуре.'"); + ПоказатьПредупреждение(, ТекстПредупреждения); + Возврат; + КонецЕсли; + Если ИндексСтраницы = 2 Тогда + Если РежимДобавленияРеквизита = "СоздатьКопированием" Тогда + Элементы.СтраницыЗначенияРеквизита.ТекущаяСтраница = Элементы.ДополнительныеЗначения; + КонецЕсли; + Записать(); + Закрыть(); + Возврат; + КонецЕсли; + ТекущаяСтраница = ОсновнаяСтраница.ПодчиненныеЭлементы.Получить(ИндексСтраницы + 1); + УстановитьНастройкиПомощника(ТекущаяСтраница); + + ПриСменеСтраницы("Вперед", ОсновнаяСтраница, ТекущаяСтраница); + +КонецПроцедуры + +&НаКлиенте +Процедура КомандаНазад(Команда) + + ОсновнаяСтраница = Элементы.СтраницыПомощникКарточка; + ИндексСтраницы = ОсновнаяСтраница.ПодчиненныеЭлементы.Индекс(ОсновнаяСтраница.ТекущаяСтраница); + Если ИндексСтраницы = 1 Тогда + РежимДобавленияРеквизита = ""; + КонецЕсли; + ТекущаяСтраница = ОсновнаяСтраница.ПодчиненныеЭлементы.Получить(ИндексСтраницы - 1); + УстановитьНастройкиПомощника(ТекущаяСтраница); + + ПриСменеСтраницы("Назад", ОсновнаяСтраница, ТекущаяСтраница); + +КонецПроцедуры + +&НаКлиенте +Процедура ЗакрытьФорму(Команда) + Закрыть(); +КонецПроцедуры + &НаКлиенте Процедура РедактироватьФорматЗначения(Команда) @@ -388,10 +572,224 @@ КонецПроцедуры +&НаКлиенте +Процедура ПоискИУдалениеДублей(Команда) + МодульПоискИУдалениеДублейКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("ПоискИУдалениеДублейКлиент"); + ИмяФормыПоискИУдалениеДублей = МодульПоискИУдалениеДублейКлиент.ИмяФормыОбработкиПоискИУдалениеДублей(); + ОткрытьФорму(ИмяФормыПоискИУдалениеДублей); +КонецПроцедуры + #КонецОбласти #Область СлужебныеПроцедурыИФункции +&НаКлиенте +Процедура УстановитьКартинкуКомментария() + + Элементы.СтраницаКомментарий.Картинка = ОбщегоНазначенияКлиентСервер.КартинкаКомментария(Объект.Комментарий); + +КонецПроцедуры + +&НаСервере +Процедура УстановитьЗависимостиДополнительныхРеквизитов(ТекущийОбъект) + + Если УсловияЗависимостиРеквизитов.Количество() = 0 Тогда + Возврат; + КонецЕсли; + + ЗависимостиДополнительныхРеквизитов = ТекущийОбъект.ЗависимостиДополнительныхРеквизитов; + + Для Каждого УсловиеЗависимости Из УсловияЗависимостиРеквизитов Цикл + ОтборСтрок = Новый Структура; + ОтборСтрок.Вставить("ЗависимоеСвойство", УсловиеЗависимости.Представление); + МассивСтрок = ЗависимостиДополнительныхРеквизитов.НайтиСтроки(ОтборСтрок); + Для Каждого СтрокаТабличнойЧасти Из МассивСтрок Цикл + ЗависимостиДополнительныхРеквизитов.Удалить(СтрокаТабличнойЧасти); + КонецЦикла; + + ЗначениеИзХранилища = ПолучитьИзВременногоХранилища(УсловиеЗависимости.Значение); + Если ЗначениеИзХранилища = Неопределено Тогда + Продолжить; + КонецЕсли; + Для Каждого НоваяЗависимость Из ЗначениеИзХранилища.Получить() Цикл + ЗаполнитьЗначенияСвойств(ТекущийОбъект.ЗависимостиДополнительныхРеквизитов.Добавить(), НоваяЗависимость); + КонецЦикла; + КонецЦикла; + +КонецПроцедуры + +&НаСервере +Процедура ЗаполнитьСтраницуВыбора() + + ИспользоватьОбщиеДополнительныеЗначения = ПолучитьФункциональнуюОпцию("ИспользоватьОбщиеДополнительныеЗначения"); + ИспользоватьОбщиеДополнительныеРеквизитыИСведения = ПолучитьФункциональнуюОпцию("ИспользоватьОбщиеДополнительныеРеквизитыИСведения"); + + Если ПереданныеПараметрыФормы.ЭтоДополнительноеСведение <> Неопределено Тогда + ЭтоДополнительноеСведение = ПереданныеПараметрыФормы.ЭтоДополнительноеСведение; + + ОбщегоНазначенияКлиентСервер.УстановитьЭлементОтбораДинамическогоСписка( + СписокДополнительныхРеквизитов, "ЭтоДополнительноеСведение", (ЭтоДополнительноеСведение = 1), , , Истина); + КонецЕсли; + + Если Не ИспользоватьОбщиеДополнительныеРеквизитыИСведения Тогда + ОбщегоНазначенияКлиентСервер.УстановитьЭлементОтбораДинамическогоСписка( + СписокДополнительныхРеквизитов, "НаборСвойств", , ВидСравненияКомпоновкиДанных.Заполнено, , Истина); + КонецЕсли; + + ОбщегоНазначенияКлиентСервер.УстановитьЭлементОтбораДинамическогоСписка( + СписокДополнительныхРеквизитов, "ВладелецДополнительныхЗначений", , + ВидСравненияКомпоновкиДанных.НеЗаполнено, , Истина); + + ОбщегоНазначенияКлиентСервер.УстановитьПараметрДинамическогоСписка( + СписокДополнительныхРеквизитов, + "ПредставлениеГруппировкиОбщихСвойств", + НСтр("ru = 'Общие (для нескольких наборов)'"), + Истина); + + // Группировка свойств по наборам. + ГруппировкаДанных = СписокДополнительныхРеквизитов.КомпоновщикНастроек.Настройки.Структура.Добавить(Тип("ГруппировкаКомпоновкиДанных")); + ГруппировкаДанных.ИдентификаторПользовательскойНастройки = "ГруппировкаСвойствПоНаборам"; + ГруппировкаДанных.РежимОтображения = РежимОтображенияЭлементаНастройкиКомпоновкиДанных.Недоступный; + + ПоляГруппировки = ГруппировкаДанных.ПоляГруппировки; + + ЭлементГруппировкиДанных = ПоляГруппировки.Элементы.Добавить(Тип("ПолеГруппировкиКомпоновкиДанных")); + ЭлементГруппировкиДанных.Поле = Новый ПолеКомпоновкиДанных("НаборСвойствГруппировка"); + ЭлементГруппировкиДанных.Использование = Истина; + +КонецПроцедуры + +&НаСервере +Процедура ЗаполнитьЗначенияДополнительныхРеквизитов(ВладелецЗначений) + + ДеревоЗначений = РеквизитФормыВЗначение("ЗначенияДополнительныхРеквизитов"); + + Запрос = Новый Запрос; + Запрос.Текст = + "ВЫБРАТЬ + | ЗначенияСвойствОбъектов.Ссылка КАК Ссылка, + | ЗначенияСвойствОбъектов.Владелец КАК Владелец, + | 0 КАК КодКартинки, + | ЗначенияСвойствОбъектов.Вес, + | ЗначенияСвойствОбъектов.Наименование + |ИЗ + | Справочник.ЗначенияСвойствОбъектов КАК ЗначенияСвойствОбъектов + |ГДЕ + | ЗначенияСвойствОбъектов.ПометкаУдаления = ЛОЖЬ + | И ЗначенияСвойствОбъектов.Владелец = &Владелец + | + |ОБЪЕДИНИТЬ ВСЕ + | + |ВЫБРАТЬ + | ЗначенияСвойствОбъектовИерархия.Ссылка, + | ЗначенияСвойствОбъектовИерархия.Владелец, + | 0, + | ЗначенияСвойствОбъектовИерархия.Вес, + | ЗначенияСвойствОбъектовИерархия.Наименование + |ИЗ + | Справочник.ЗначенияСвойствОбъектовИерархия КАК ЗначенияСвойствОбъектовИерархия + |ГДЕ + | ЗначенияСвойствОбъектовИерархия.ПометкаУдаления = ЛОЖЬ + | И ЗначенияСвойствОбъектовИерархия.Владелец = &Владелец + | + |УПОРЯДОЧИТЬ ПО + | Ссылка ИЕРАРХИЯ"; + Запрос.УстановитьПараметр("Владелец", ВладелецЗначений); + Результат = Запрос.Выполнить().Выгрузить(ОбходРезультатаЗапроса.ПоГруппировкамСИерархией); + + ДеревоЗначений = Результат.Скопировать(); + ЗначениеВРеквизитФормы(ДеревоЗначений, "ЗначенияДополнительныхРеквизитов"); + +КонецПроцедуры + +&НаСервере +Процедура КонвертироватьДополнительныйРеквизитВОбщий() + НачатьТранзакцию(); + Попытка + ВыбранныйРеквизит = ПереданныеПараметрыФормы.ВладелецДополнительныхЗначений; + ВыбранныйРеквизитОбъект = ВыбранныйРеквизит.ПолучитьОбъект(); + ВыбранныйРеквизитОбъект.НаборСвойств = Справочники.НаборыДополнительныхРеквизитовИСведений.ПустаяСсылка(); + ВыбранныйРеквизитОбъект.Записать(); + + ЗафиксироватьТранзакцию(); + Исключение + ОтменитьТранзакцию(); + ВызватьИсключение; + КонецПопытки; +КонецПроцедуры + +&НаСервере +Процедура ЗаполнитьКарточкуРеквизитаИлиСведения() + + Если ЗначениеЗаполнено(ПереданныеПараметрыФормы.ЗначениеКопирования) Тогда + РежимДобавленияРеквизита = "СоздатьКопированием"; + КонецЕсли; + + СозданиеРеквизитаКопированием = (РежимДобавленияРеквизита = "СоздатьКопированием"); + + ТекущийНаборСвойств = ПереданныеПараметрыФормы.ТекущийНаборСвойств; + + Если ЗначениеЗаполнено(Объект.Ссылка) Тогда + Элементы.ЭтоДополнительноеСведение.Доступность = Ложь; + ПоказатьУточнениеНабора = ПереданныеПараметрыФормы.ПоказатьУточнениеНабора; + Иначе + Объект.Доступен = Истина; + Объект.Виден = Истина; + + Объект.ЗависимостиДополнительныхРеквизитов.Очистить(); + Если ЗначениеЗаполнено(ТекущийНаборСвойств) Тогда + Объект.НаборСвойств = ТекущийНаборСвойств; + КонецЕсли; + + Если СозданиеРеквизитаКопированием Тогда + Объект.ВладелецДополнительныхЗначений = ПланыВидовХарактеристик.ДополнительныеРеквизитыИСведения.ПустаяСсылка(); + ИначеЕсли ЗначениеЗаполнено(ПереданныеПараметрыФормы.ВладелецДополнительныхЗначений) Тогда + Объект.ВладелецДополнительныхЗначений = ПереданныеПараметрыФормы.ВладелецДополнительныхЗначений; + КонецЕсли; + + Если ПереданныеПараметрыФормы.ЭтоДополнительноеСведение <> Неопределено Тогда + Объект.ЭтоДополнительноеСведение = ПереданныеПараметрыФормы.ЭтоДополнительноеСведение; + + ИначеЕсли НЕ ЗначениеЗаполнено(ПереданныеПараметрыФормы.ЗначениеКопирования) Тогда + Элементы.ЭтоДополнительноеСведение.Видимость = Истина; + КонецЕсли; + КонецЕсли; + + Если Объект.Предопределенный И НЕ ЗначениеЗаполнено(Объект.Заголовок) Тогда + Объект.Заголовок = Объект.Наименование; + КонецЕсли; + + ЭтоДополнительноеСведение = ?(Объект.ЭтоДополнительноеСведение, 1, 0); + + Если СозданиеРеквизитаКопированием Тогда + // Для случаев, когда копирование выполняется из карточки реквизита по команде "Скопировать". + Если Не ЗначениеЗаполнено(ПереданныеПараметрыФормы.ВладелецДополнительныхЗначений) Тогда + ПереданныеПараметрыФормы.ВладелецДополнительныхЗначений = ПереданныеПараметрыФормы.ЗначениеКопирования; + КонецЕсли; + + СвойстваВладельца = ОбщегоНазначения.ЗначенияРеквизитовОбъекта( + ПереданныеПараметрыФормы.ВладелецДополнительныхЗначений, "ТипЗначения, ДополнительныеЗначенияСВесом"); + + Объект.ТипЗначения = СвойстваВладельца.ТипЗначения; + + ЗначенияВладельцаСВесом = СвойстваВладельца.ДополнительныеЗначенияСВесом; + Объект.ДополнительныеЗначенияСВесом = ЗначенияВладельцаСВесом; + Элементы.ЗначенияДополнительногоРеквизита.Шапка = ЗначенияВладельцаСВесом; + Элементы.ЗначенияДополнительногоРеквизитаВес.Видимость = ЗначенияВладельцаСВесом; + Элементы.СтраницыЗначенияРеквизита.ТекущаяСтраница = Элементы.СтраницаДеревоЗначений; + + ЗаполнитьЗначенияДополнительныхРеквизитов(ПереданныеПараметрыФормы.ВладелецДополнительныхЗначений); + КонецЕсли; + + ОбновитьСоставЭлементовФормы(); + + Если Объект.МногострочноеПолеВвода > 0 Тогда + МногострочноеПолеВвода = Истина; + МногострочноеПолеВводаЧисло = Объект.МногострочноеПолеВвода; + КонецЕсли; + +КонецПроцедуры + &НаКлиенте Процедура ОбновитьФормуДляРедактирования(Результат, Параметр) Экспорт #Если ВебКлиент Тогда @@ -516,6 +914,10 @@ Возврат; КонецЕсли; + Если РежимДобавленияРеквизита = "СоздатьКопированием" Тогда + Элементы.СтраницыЗначенияРеквизита.ТекущаяСтраница = Элементы.ДополнительныеЗначения; + КонецЕсли; + Если Объект.ТипЗначения.СодержитТип(Тип("СправочникСсылка.ЗначенияСвойствОбъектов")) Тогда ИмяТаблицыЗначений = "Справочник.ЗначенияСвойствОбъектов"; Иначе @@ -687,58 +1089,125 @@ УстановитьЗаголовокКнопкиФормата(ЭтотОбъект); ТекстПредупреждения = ""; - Массив = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(Текст, ";"); + Массив = СтрРазделить(Текст, ";", Ложь); Для каждого Подстрока Из Массив Цикл - Если Найти(Подстрока, "ДП=") > 0 ИЛИ Найти(Подстрока, "DE=") > 0 Тогда - ТекстПредупреждения = ТекстПредупреждения + Символы.ПС + - НСтр("ru = 'Представление пустой даты не поддерживается в полях ввода.'"); + Если СтрНайти(Подстрока, "ДП=") > 0 ИЛИ СтрНайти(Подстрока, "DE=") > 0 Тогда + ТекстПредупреждения = ТекстПредупреждения + Символы.ПС + + НСтр("ru = 'Представление пустой даты не поддерживается в полях ввода.'"); Продолжить; КонецЕсли; - Если Найти(Подстрока, "ЧН=") > 0 ИЛИ Найти(Подстрока, "NZ=") > 0 Тогда - ТекстПредупреждения = ТекстПредупреждения + Символы.ПС + - НСтр("ru = 'Представление пустого числа не поддерживается в полях ввода.'"); + Если СтрНайти(Подстрока, "ЧН=") > 0 ИЛИ СтрНайти(Подстрока, "NZ=") > 0 Тогда + ТекстПредупреждения = ТекстПредупреждения + Символы.ПС + + НСтр("ru = 'Представление пустого числа не поддерживается в полях ввода.'"); Продолжить; КонецЕсли; - Если Найти(Подстрока, "ДФ=") > 0 ИЛИ Найти(Подстрока, "DF=") > 0 Тогда - Если Найти(Подстрока, "ддд") > 0 ИЛИ Найти(Подстрока, "ddd") > 0 Тогда - ТекстПредупреждения = ТекстПредупреждения + Символы.ПС + - НСтр("ru = 'Кратное название дня недели не поддерживается в полях ввода.'"); + Если СтрНайти(Подстрока, "ДФ=") > 0 ИЛИ СтрНайти(Подстрока, "DF=") > 0 Тогда + Если СтрНайти(Подстрока, "ддд") > 0 ИЛИ СтрНайти(Подстрока, "ddd") > 0 Тогда + ТекстПредупреждения = ТекстПредупреждения + Символы.ПС + + НСтр("ru = 'Кратное название дня недели не поддерживается в полях ввода.'"); КонецЕсли; - Если Найти(Подстрока, "дддд") > 0 ИЛИ Найти(Подстрока, "dddd") > 0 Тогда - ТекстПредупреждения = ТекстПредупреждения + Символы.ПС + - НСтр("ru = 'Полное название дня недели не поддерживается в полях ввода.'"); + Если СтрНайти(Подстрока, "дддд") > 0 ИЛИ СтрНайти(Подстрока, "dddd") > 0 Тогда + ТекстПредупреждения = ТекстПредупреждения + Символы.ПС + + НСтр("ru = 'Полное название дня недели не поддерживается в полях ввода.'"); КонецЕсли; - Если Найти(Подстрока, "МММ") > 0 ИЛИ Найти(Подстрока, "MMM") > 0 Тогда - ТекстПредупреждения = ТекстПредупреждения + Символы.ПС + - НСтр("ru = 'Кратное название месяца не поддерживается в полях ввода.'"); + Если СтрНайти(Подстрока, "МММ") > 0 ИЛИ СтрНайти(Подстрока, "MMM") > 0 Тогда + ТекстПредупреждения = ТекстПредупреждения + Символы.ПС + + НСтр("ru = 'Кратное название месяца не поддерживается в полях ввода.'"); КонецЕсли; - Если Найти(Подстрока, "ММММ") > 0 ИЛИ Найти(Подстрока, "MMMM") > 0 Тогда - ТекстПредупреждения = ТекстПредупреждения + Символы.ПС + - НСтр("ru = 'Полное название месяца не поддерживается в полях ввода.'"); + Если СтрНайти(Подстрока, "ММММ") > 0 ИЛИ СтрНайти(Подстрока, "MMMM") > 0 Тогда + ТекстПредупреждения = ТекстПредупреждения + Символы.ПС + + НСтр("ru = 'Полное название месяца не поддерживается в полях ввода.'"); КонецЕсли; КонецЕсли; - Если Найти(Подстрока, "ДЛФ=") > 0 ИЛИ Найти(Подстрока, "DLF=") > 0 Тогда - Если Найти(Подстрока, "ДД") > 0 ИЛИ Найти(Подстрока, "DD") > 0 Тогда - ТекстПредупреждения = ТекстПредупреждения + Символы.ПС + - НСтр("ru = 'Длинная дата (месяц прописью) не поддерживается в полях ввода.'"); + Если СтрНайти(Подстрока, "ДЛФ=") > 0 ИЛИ СтрНайти(Подстрока, "DLF=") > 0 Тогда + Если СтрНайти(Подстрока, "ДД") > 0 ИЛИ СтрНайти(Подстрока, "DD") > 0 Тогда + ТекстПредупреждения = ТекстПредупреждения + Символы.ПС + + НСтр("ru = 'Длинная дата (месяц прописью) не поддерживается в полях ввода.'"); КонецЕсли; КонецЕсли; КонецЦикла; Если ЗначениеЗаполнено(ТекстПредупреждения) Тогда - ТекстПредупреждения = ТекстПредупреждения + Символы.ПС + - НСтр("ru = 'В местах использования полей надписей ограничений нет.'"); + ТекстПредупреждения = ТекстПредупреждения + Символы.ПС + + НСтр("ru = 'В местах использования полей надписей ограничений нет.'"); ПоказатьПредупреждение(, ТекстПредупреждения); КонецЕсли; КонецЕсли; КонецПроцедуры +&НаКлиенте +Процедура УстановитьНастройкиПомощника(ТекущаяСтраница = Неопределено) + + Если ТекущаяСтраница = Неопределено Тогда + ТекущаяСтраница = Элементы.СтраницыПомощникКарточка.ТекущаяСтраница; + КонецЕсли; + + ШаблонЗаголовкаСписка = НСтр("ru = 'Выберите %1 для включения в набор ""%2""'"); + ШаблонЗаголовкаПереключателя = НСтр("ru = 'Выберите вариант добавления дополнительного %1 ""%2"" в набор ""%3""'"); + + Если ТекущаяСтраница = Элементы.ВыборРеквизита Тогда + Если ПереданныеПараметрыФормы.ЭтоДополнительноеСведение Тогда + Заголовок = НСтр("ru = 'Добавление дополнительного сведения'"); + Иначе + Заголовок = НСтр("ru = 'Добавление дополнительного реквизита'"); + КонецЕсли; + + Элементы.КоманднаяПанельЛево.Доступность = Ложь; + Элементы.КомандаДалее.Заголовок = НСтр("ru = 'Далее >'"); + + Элементы.СписокДополнительныхРеквизитов.Заголовок = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + ШаблонЗаголовкаСписка, + ?(ПереданныеПараметрыФормы.ЭтоДополнительноеСведение, НСтр("ru = 'дополнительное сведение'"), НСтр("ru = 'дополнительный реквизит'")), + Строка(ПереданныеПараметрыФормы.ТекущийНаборСвойств)); + + ИначеЕсли ТекущаяСтраница = Элементы.ВыборДействия Тогда + Если ПереданныеПараметрыФормы.КопированиеСВопросом Тогда + Элементы.КоманднаяПанельЛево.Доступность = Ложь; + ВладелецДополнительныхЗначений = ПереданныеПараметрыФормы.ВладелецДополнительныхЗначений; + Иначе + Элементы.КоманднаяПанельЛево.Доступность = Истина; + ВыбранныйЭлемент = Элементы.СписокДополнительныхРеквизитов.ТекущиеДанные; + Если ВыбранныйЭлемент = Неопределено Тогда + ВладелецДополнительныхЗначений = ПереданныеПараметрыФормы.ВладелецДополнительныхЗначений; + Иначе + ВладелецДополнительныхЗначений = Элементы.СписокДополнительныхРеквизитов.ТекущиеДанные.Ссылка; + КонецЕсли; + КонецЕсли; + Элементы.КомандаДалее.Заголовок = НСтр("ru = 'Далее >'"); + + Элементы.РежимДобавленияРеквизита.Заголовок = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + ШаблонЗаголовкаПереключателя, + ?(ПереданныеПараметрыФормы.ЭтоДополнительноеСведение, НСтр("ru = 'сведения'"), НСтр("ru = 'реквизита'")), + Строка(ВладелецДополнительныхЗначений), + Строка(ПереданныеПараметрыФормы.ТекущийНаборСвойств)); + + Если ПереданныеПараметрыФормы.ЭтоДополнительноеСведение Тогда + Заголовок = НСтр("ru = 'Добавление дополнительного сведения'"); + Иначе + Заголовок = НСтр("ru = 'Добавление дополнительного реквизита'"); + КонецЕсли; + + Иначе + Элементы.КомандаДалее.Заголовок = НСтр("ru = 'Готово'"); + Элементы.КоманднаяПанельЛево.Доступность = Истина; + КонецЕсли; + +КонецПроцедуры + &НаСервере Процедура ОбновитьСоставЭлементовФормы(ТекстПредупреждения = "") - Заголовок = ПолучитьЗаголовок(Объект); + Если РежимПомощника Тогда + Элементы.ОсновнаяКоманднаяПанель.Видимость = Ложь; + Элементы.КомандаДалее.КнопкаПоУмолчанию = Истина; + Иначе + Элементы.КоманднаяПанельПомощника.Видимость = Ложь; + Элементы.СтраницыПомощникКарточка.ТекущаяСтраница = Элементы.КарточкаРеквизита; + КонецЕсли; + + УстановитьЗаголовокФормы(); Если НЕ Объект.ТипЗначения.СодержитТип(Тип("Число")) И НЕ Объект.ТипЗначения.СодержитТип(Тип("Дата")) @@ -770,15 +1239,28 @@ Если Объект.ЭтоДополнительноеСведение Тогда Объект.ЗаполнятьОбязательно = Ложь; - Элементы.ЗаполнятьОбязательно.Видимость = Ложь; + Элементы.ГруппаСвойстваИЗависимости.Видимость = Ложь; Иначе - Элементы.ЗаполнятьОбязательно.Видимость = Истина; + Элементы.ГруппаСвойстваИЗависимости.Видимость = Истина; КонецЕсли; Если ЗначениеЗаполнено(Объект.Ссылка) Тогда СтарыйТипЗначения = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(Объект.Ссылка, "ТипЗначения"); + Если ЗначениеЗаполнено(Объект.НаборСвойств) Тогда + Элементы.ЗадатьУсловиеЗаполнения.Доступность = Объект.ЗаполнятьОбязательно; + Элементы.ЗадатьУсловиеДоступности.Доступность = Объект.Доступен; + Элементы.ЗадатьУсловиеВидимости.Доступность = Объект.Виден; + Иначе + Элементы.ГруппаНастройкаЗависимостей.Видимость = Ложь; + Элементы.Виден.Видимость = Ложь; + Элементы.Доступен.Видимость = Ложь; + КонецЕсли; + УстановитьЗаголовкиГиперссылок(); Иначе СтарыйТипЗначения = Новый ОписаниеТипов; + Элементы.ЗадатьУсловиеЗаполнения.Доступность = Ложь; + Элементы.ЗадатьУсловиеДоступности.Доступность = Ложь; + Элементы.ЗадатьУсловиеВидимости.Доступность = Ложь; КонецЕсли; Если ЗначениеЗаполнено(Объект.ВладелецДополнительныхЗначений) Тогда @@ -906,11 +1388,11 @@ Если УправлениеСвойствамиСлужебный.ТипЗначенияСодержитЗначенияСвойств(Объект.ТипЗначения) Тогда Элементы.ГруппаЗаголовкиФормЗначений.Видимость = Истина; Элементы.ДополнительныеЗначенияСВесом.Видимость = Истина; - Элементы.ДополнительныеЗначения.Видимость = Истина; + Элементы.СтраницаЗначения.Видимость = Истина; Иначе Элементы.ГруппаЗаголовкиФормЗначений.Видимость = Ложь; Элементы.ДополнительныеЗначенияСВесом.Видимость = Ложь; - Элементы.ДополнительныеЗначения.Видимость = Ложь; + Элементы.СтраницаЗначения.Видимость = Ложь; КонецЕсли; Элементы.Значения.Шапка = ЗначенияСВесом; @@ -933,14 +1415,12 @@ Элементы.ЗначенияКоманднаяПанельРедактирования.Видимость = Истина; Элементы.ЗначенияКонтекстноеМенюРедактирования.Видимость = Истина; Элементы.ДополнительныеЗначенияСВесом.Видимость = Истина; - Элементы.ГруппаЗаголовкиФормЗначений.Видимость = Истина; Иначе Элементы.УточнениеСпискаЗначений.Видимость = Истина; Элементы.ДополнительныеЗначения.ТолькоПросмотр = Истина; Элементы.ЗначенияКоманднаяПанельРедактирования.Видимость = Ложь; Элементы.ЗначенияКонтекстноеМенюРедактирования.Видимость = Ложь; Элементы.ДополнительныеЗначенияСВесом.Видимость = Ложь; - Элементы.ГруппаЗаголовкиФормЗначений.Видимость = Ложь; Элементы.УточнениеСпискаЗначенийКомментарий.Гиперссылка = ЗначениеЗаполнено(Объект.Ссылка); Элементы.УточнениеСпискаЗначенийИзменить.Доступность = ЗначениеЗаполнено(Объект.Ссылка); @@ -955,8 +1435,7 @@ КонецЕсли; Элементы.УточнениеСпискаЗначенийКомментарий.Заголовок = - СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - ШаблонУточнения, СвойстваВладельца.Заголовок, Строка(СвойстваВладельца.НаборСвойств)) + " "; + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонУточнения, СвойстваВладельца.Заголовок, Строка(СвойстваВладельца.НаборСвойств)) + " "; КонецЕсли; ОбновитьСписокНаборов(); @@ -994,8 +1473,7 @@ Иначе ШаблонУточнения = НСтр("ru = 'Реквизит входит в набор: %1'"); КонецЕсли; - ТекстКомментария = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - ШаблонУточнения, СокрЛП(СписокНаборов[0].Представление)); + ТекстКомментария = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонУточнения, СокрЛП(СписокНаборов[0].Представление)); Иначе Если СписокНаборов.Количество() > 1 Тогда Если Объект.ЭтоДополнительноеСведение Тогда @@ -1004,19 +1482,10 @@ ШаблонУточнения = НСтр("ru = 'Общий реквизит входит в %1 %2'"); КонецЕсли; - СтрокаНаборы = СокрЛП(ЧислоПрописью( - СписокНаборов.Количество(), "НД=Ложь", "набор,набора,наборов,м,,,,,0")); + СтрокаНаборы = ПользователиСлужебныйКлиентСервер.ПредметЦелогоЧисла(СписокНаборов.Количество(), + "Л = ru_RU", НСтр("ru = 'набор,набора,наборов,,,,,,0'")); - Пока Истина Цикл - Позиция = Найти(СтрокаНаборы, " "); - Если Позиция = 0 Тогда - Прервать; - КонецЕсли; - СтрокаНаборы = СокрЛП(Сред(СтрокаНаборы, Позиция + 1)); - КонецЦикла; - - ТекстКомментария = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - ШаблонУточнения, Формат(СписокНаборов.Количество(), "ЧГ="), СтрокаНаборы); + ТекстКомментария = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонУточнения, Формат(СписокНаборов.Количество(), "ЧГ="), СтрокаНаборы); Иначе Если Объект.ЭтоДополнительноеСведение Тогда ШаблонУточнения = НСтр("ru = 'Общее сведение входит в набор: %1'"); @@ -1024,8 +1493,7 @@ ШаблонУточнения = НСтр("ru = 'Общий реквизит входит в набор: %1'"); КонецЕсли; - ТекстКомментария = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - ШаблонУточнения, СокрЛП(СписокНаборов[0].Представление)); + ТекстКомментария = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонУточнения, СокрЛП(СписокНаборов[0].Представление)); КонецЕсли; КонецЕсли; Иначе @@ -1145,6 +1613,227 @@ КонецПроцедуры +&НаКлиенте +Процедура ПриСменеСтраницы(Направление, ОсновнаяСтраница, ТекущаяСтраница) + + ОсновнаяСтраница.ТекущаяСтраница = ТекущаяСтраница; + Если ТекущаяСтраница = Элементы.ВыборДействия Тогда + Если Направление = "Вперед" Тогда + ВыбранныйЭлемент = Элементы.СписокДополнительныхРеквизитов.ТекущиеДанные; + ПереданныеПараметрыФормы.ВладелецДополнительныхЗначений = ВыбранныйЭлемент.Ссылка; + ЗаполнитьСписокДействийПриДобавленииРеквизита(); + КонецЕсли; + ИначеЕсли ТекущаяСтраница = Элементы.КарточкаРеквизита Тогда + ЗаполнитьКарточкуРеквизитаИлиСведения(); + КонецЕсли; + +КонецПроцедуры + +&НаСервере +Функция ЭтоОбщийДополнительныйРеквизит(ВыбранныйЭлемент) + НаборСвойствРеквизита = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(ВыбранныйЭлемент, "НаборСвойств"); + Возврат Не ЗначениеЗаполнено(НаборСвойствРеквизита.НаборСвойств); +КонецФункции + +&НаСервере +Функция РеквизитСоСпискомДополнительныхЗначений() + + РеквизитСоСпискомДополнительныхЗначений = Истина; + СвойстваВладельца = ОбщегоНазначения.ЗначенияРеквизитовОбъекта( + ПереданныеПараметрыФормы.ВладелецДополнительныхЗначений, "ТипЗначения"); + Если Не СвойстваВладельца.ТипЗначения.СодержитТип(Тип("СправочникСсылка.ЗначенияСвойствОбъектов")) + И Не СвойстваВладельца.ТипЗначения.СодержитТип(Тип("СправочникСсылка.ЗначенияСвойствОбъектовИерархия")) Тогда + РеквизитСоСпискомДополнительныхЗначений = Ложь; + КонецЕсли; + + Возврат РеквизитСоСпискомДополнительныхЗначений; +КонецФункции + +&НаСервере +Процедура ЗаполнитьСписокДействийПриДобавленииРеквизита() + + ЭтоОбщийДополнительныйРеквизит = ЭтоОбщийДополнительныйРеквизит(ПереданныеПараметрыФормы.ВладелецДополнительныхЗначений); + ИспользоватьОбщиеДополнительныеЗначения = ПолучитьФункциональнуюОпцию("ИспользоватьОбщиеДополнительныеЗначения"); + ИспользоватьОбщиеДополнительныеРеквизитыИСведения = ПолучитьФункциональнуюОпцию("ИспользоватьОбщиеДополнительныеРеквизитыИСведения"); + + РеквизитСоСпискомДополнительныхЗначений = РеквизитСоСпискомДополнительныхЗначений(); + + Если ПереданныеПараметрыФормы.ЭтоДополнительноеСведение Тогда + ДобавитьОбщий = НСтр("ru = 'Добавить общее сведение в набор (рекомендуется) + | + |Выбранное сведение уже входит в несколько наборов, поэтому рекомендуется также включить его в этот набор ""как есть"". + |В этом случае будет возможно отбирать по нему данные разных типов в списках и отчетах.'"); + СделатьОбщим = НСтр("ru = 'Сделать дополнительное сведение общим и добавить в набор + | + |Этот вариант подходит для тех случаев, когда сведение должно быть одинаково для обоих наборов. + |В этом случае будет возможно отбирать по нему данные разных типов в списках и отчетах.'"); + СделатьПоОбразцу = НСтр("ru = 'Сделать копию сведения по образцу (с общим списком значений) + | + |Список значений этого сведения будет одинаков для обоих наборов. + |С помощью этого варианта удобно выполнять централизованную настройку списка значений сразу для нескольких однотипных сведений. + |При этом можно отредактировать наименование и ряд других свойств сведения.'"); + СоздатьКопированием = НСтр("ru = 'Сделать копию сведения + | + |Будет создана копия сведения%1'"); + Иначе + ДобавитьОбщий = НСтр("ru = 'Добавить общий реквизит в набор (рекомендуется) + | + |Выбранный реквизит уже входит в несколько наборов, поэтому рекомендуется также включить его в этот набор ""как есть"". + |В этом случае будет возможно отбирать по нему данные разных типов в списках и отчетах.'"); + СделатьОбщим = НСтр("ru = 'Сделать реквизит общим и добавить в набор + | + |Этот вариант подходит для тех случаев, когда реквизит должен быть одинаков для обоих наборов. + |В этом случае будет возможно отбирать по нему данные разных типов в списках и отчетах.'"); + СделатьПоОбразцу = НСтр("ru = 'Сделать копию реквизита по образцу (с общим списком значений) + | + |Список значений этого реквизита будет одинаков для обоих наборов. + |С помощью этого варианта удобно выполнять централизованную настройку списка значений сразу для нескольких однотипных реквизитов. + |При этом можно отредактировать наименование и ряд других свойств реквизита.'"); + СоздатьКопированием = НСтр("ru = 'Сделать копию реквизита + | + |Будет создана копия реквизита%1'"); + КонецЕсли; + + СписокВыбора = Элементы.РежимДобавленияРеквизита.СписокВыбора; + СписокВыбора.Очистить(); + + Если РеквизитСоСпискомДополнительныхЗначений Тогда + ШаблонВставки = " " + НСтр("ru = 'и всех его значений.'"); + Иначе + ШаблонВставки = "."; + КонецЕсли; + СоздатьКопированием = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(СоздатьКопированием, ШаблонВставки); + + СписокВыбора.Добавить("СоздатьКопированием", СоздатьКопированием); + + Если ИспользоватьОбщиеДополнительныеЗначения И РеквизитСоСпискомДополнительныхЗначений Тогда + СписокВыбора.Добавить("СоздатьПоОбразцу", СделатьПоОбразцу); + КонецЕсли; + + Если ИспользоватьОбщиеДополнительныеРеквизитыИСведения И ЭтоОбщийДополнительныйРеквизит Тогда + СписокВыбора.Добавить("ДобавитьОбщийРеквизитВНабор", ДобавитьОбщий); + ИначеЕсли ИспользоватьОбщиеДополнительныеРеквизитыИСведения Тогда + СписокВыбора.Добавить("СделатьОбщим", СделатьОбщим); + КонецЕсли; + + РежимДобавленияРеквизита = "СоздатьКопированием"; + +КонецПроцедуры + +&НаСервере +Процедура ЗаписатьЗначенияДополнительногоРеквизитаПриКопировании(ТекущийОбъект) + + Если ТекущийОбъект.ТипЗначения.СодержитТип(Тип("СправочникСсылка.ЗначенияСвойствОбъектовИерархия")) Тогда + Родитель = Справочники.ЗначенияСвойствОбъектовИерархия.ПустаяСсылка(); + Иначе + Родитель = Справочники.ЗначенияСвойствОбъектов.ПустаяСсылка(); + КонецЕсли; + + Владелец = ТекущийОбъект.Ссылка; + СтрокаДерева = ЗначенияДополнительныхРеквизитов.ПолучитьЭлементы(); + ЗаписатьЗначенияДополнительногоРеквизитаПриКопированииРекурсивно(Владелец, СтрокаДерева, Родитель); + СтрокаДерева.Очистить(); + Элементы.СтраницыЗначенияРеквизита.ТекущаяСтраница = Элементы.ДополнительныеЗначения; + +КонецПроцедуры + +&НаСервере +Процедура ЗаписатьЗначенияДополнительногоРеквизитаПриКопированииРекурсивно(Владелец, СтрокаДерева, Родитель) + + Для Каждого ЭлементДерева Из СтрокаДерева Цикл + КопияОбъекта = ЭлементДерева.Ссылка.ПолучитьОбъект().Скопировать(); + КопияОбъекта.Владелец = Владелец; + КопияОбъекта.Родитель = Родитель; + КопияОбъекта.Записать(); + + ДочерниеЭлементы = ЭлементДерева.ПолучитьЭлементы(); + ЗаписатьЗначенияДополнительногоРеквизитаПриКопированииРекурсивно(Владелец, ДочерниеЭлементы, КопияОбъекта.Ссылка) + КонецЦикла; + +КонецПроцедуры + +&НаСервере +Процедура УстановитьЗаголовкиГиперссылок() + + ЗаданаЗависимостьДоступности = Ложь; + ЗаданаЗависимостьОбязательностиЗаполнения = Ложь; + ЗаданаЗависимостьВидимости = Ложь; + ЗависимостиСвойств = Объект.ЗависимостиДополнительныхРеквизитов; + Для Каждого ЗависимостьСвойства Из ЗависимостиСвойств Цикл + Если ЗависимостьСвойства.ЗависимоеСвойство = "Доступен" Тогда + ЗаданаЗависимостьДоступности = Истина; + ИначеЕсли ЗависимостьСвойства.ЗависимоеСвойство = "ЗаполнятьОбязательно" Тогда + ЗаданаЗависимостьОбязательностиЗаполнения = Истина; + ИначеЕсли ЗависимостьСвойства.ЗависимоеСвойство = "Виден" Тогда + ЗаданаЗависимостьВидимости = Истина; + КонецЕсли; + КонецЦикла; + + ШаблонЗависимостьЗадана = НСтр("ru = 'при заданном условии'"); + ШаблонЗависимостьНеЗадана = НСтр("ru = 'всегда'"); + + Элементы.ЗадатьУсловиеДоступности.Заголовок = ?(ЗаданаЗависимостьДоступности, + ШаблонЗависимостьЗадана, + ШаблонЗависимостьНеЗадана); + + Элементы.ЗадатьУсловиеЗаполнения.Заголовок = ?(ЗаданаЗависимостьОбязательностиЗаполнения, + ШаблонЗависимостьЗадана, + ШаблонЗависимостьНеЗадана); + + Элементы.ЗадатьУсловиеВидимости.Заголовок = ?(ЗаданаЗависимостьВидимости, + ШаблонЗависимостьЗадана, + ШаблонЗависимостьНеЗадана); + +КонецПроцедуры + +&НаКлиенте +Процедура ОткрытьФормуНастройкиЗависимости(НастраиваемоеСвойство) + + ПараметрыФормы = Новый Структура; + ПараметрыФормы.Вставить("ДополнительныйРеквизит", Объект.Ссылка); + ПараметрыФормы.Вставить("Набор", Объект.НаборСвойств); + ПараметрыФормы.Вставить("НастраиваемоеСвойство", НастраиваемоеСвойство); + + ОткрытьФорму("ПланВидовХарактеристик.ДополнительныеРеквизитыИСведения.Форма.ЗависимостьРеквизитов", ПараметрыФормы); + +КонецПроцедуры + +&НаСервере +Процедура УстановитьЗаголовокФормы() + + Если ЗначениеЗаполнено(Объект.Ссылка) Тогда + + Если ЗначениеЗаполнено(Объект.НаборСвойств) Тогда + Если Объект.ЭтоДополнительноеСведение Тогда + Заголовок = Строка(Объект.Заголовок) + " " + НСтр("ru = '(Дополнительное сведение)'"); + Иначе + Заголовок = Строка(Объект.Заголовок) + " " + НСтр("ru = '(Дополнительный реквизит)'"); + КонецЕсли; + Иначе + Если Объект.ЭтоДополнительноеСведение Тогда + Заголовок = Строка(Объект.Заголовок) + " " + НСтр("ru = '(Общее дополнительное сведение)'"); + Иначе + Заголовок = Строка(Объект.Заголовок) + " " + НСтр("ru = '(Общий дополнительный реквизит)'"); + КонецЕсли; + КонецЕсли; + Иначе + Если ЗначениеЗаполнено(Объект.НаборСвойств) Тогда + Если Объект.ЭтоДополнительноеСведение Тогда + Заголовок = НСтр("ru = 'Дополнительное сведение (создание)'"); + Иначе + Заголовок = НСтр("ru = 'Дополнительный реквизит (создание)'"); + КонецЕсли; + Иначе + Если Объект.ЭтоДополнительноеСведение Тогда + Заголовок = НСтр("ru = 'Общее дополнительное сведение (создание)'"); + Иначе + Заголовок = НСтр("ru = 'Общий дополнительный реквизит (создание)'"); + КонецЕсли; + КонецЕсли; + КонецЕсли; + +КонецПроцедуры + &НаСервереБезКонтекста Функция НаименованиеУжеИспользуется(Знач Заголовок, Знач ТекущееСвойство, Знач НаборСвойств, НовоеНаименование) @@ -1202,9 +1891,8 @@ КонецЕсли; ТекстВопроса = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - ТекстВопроса + НСтр("ru =' - | - |Рекомендуется использовать другое наименование, + ТекстВопроса + Символы.ПС + Символы.ПС + + НСтр("ru ='Рекомендуется использовать другое наименование, |иначе программа может работать некорректно.'"), НовоеНаименование); @@ -1212,44 +1900,6 @@ КонецФункции -&НаКлиентеНаСервереБезКонтекста -Функция ПолучитьЗаголовок(Объект) - - Если ЗначениеЗаполнено(Объект.Ссылка) Тогда - - Если ЗначениеЗаполнено(Объект.НаборСвойств) Тогда - Если Объект.ЭтоДополнительноеСведение Тогда - Заголовок = Строка(Объект.Заголовок) + " " + НСтр("ru = '(Дополнительное сведение)'"); - Иначе - Заголовок = Строка(Объект.Заголовок) + " " + НСтр("ru = '(Дополнительный реквизит)'"); - КонецЕсли; - Иначе - Если Объект.ЭтоДополнительноеСведение Тогда - Заголовок = Строка(Объект.Заголовок) + " " + НСтр("ru = '(Общее дополнительное сведение)'"); - Иначе - Заголовок = Строка(Объект.Заголовок) + " " + НСтр("ru = '(Общий дополнительный реквизит)'"); - КонецЕсли; - КонецЕсли; - Иначе - Если ЗначениеЗаполнено(Объект.НаборСвойств) Тогда - Если Объект.ЭтоДополнительноеСведение Тогда - Заголовок = НСтр("ru = 'Дополнительное сведение (создание)'"); - Иначе - Заголовок = НСтр("ru = 'Дополнительный реквизит (создание)'"); - КонецЕсли; - Иначе - Если Объект.ЭтоДополнительноеСведение Тогда - Заголовок = НСтр("ru = 'Общее дополнительное сведение (создание)'"); - Иначе - Заголовок = НСтр("ru = 'Общий дополнительный реквизит (создание)'"); - КонецЕсли; - КонецЕсли; - КонецЕсли; - - Возврат Заголовок; - -КонецФункции - &НаКлиентеНаСервереБезКонтекста Процедура УстановитьЗаголовокКнопкиФормата(Форма) diff --git a/SSL/src/ChartsOfCharacteristicTypes/ДополнительныеРеквизитыИСведения/ManagerModule.bsl b/SSL/src/ChartsOfCharacteristicTypes/ДополнительныеРеквизитыИСведения/ManagerModule.bsl index 0ac17d713..b19b8510e 100644 --- a/SSL/src/ChartsOfCharacteristicTypes/ДополнительныеРеквизитыИСведения/ManagerModule.bsl +++ b/SSL/src/ChartsOfCharacteristicTypes/ДополнительныеРеквизитыИСведения/ManagerModule.bsl @@ -2,12 +2,13 @@ #Область ПрограммныйИнтерфейс -// Возвращает имена блокируемых реквизитов для подсистемы -// "Запрет редактирования реквизитов объектов". -// +// Возвращает описание блокируемых реквизитов. +// // Возвращаемое значение: -// Массив Строк - имена блокируемых реквизитов. -// +// Массив - содержит строки в формате ИмяРеквизита[;ИмяЭлементаФормы,...] +// где ИмяРеквизита - имя реквизита объекта, ИмяЭлементаФормы - имя элемента формы, +// связанного с реквизитом. +// Функция ПолучитьБлокируемыеРеквизитыОбъекта() Экспорт Результат = Новый Массив; @@ -38,6 +39,22 @@ #КонецОбласти +#КонецЕсли + +#Область ОбработчикиСобытий + +Процедура ОбработкаПолученияДанныхВыбора(ДанныеВыбора, Параметры, СтандартнаяОбработка) + + Если Параметры.Свойство("ЭтоВыборЗначенияДоступа") Тогда + Параметры.Отбор.Вставить("ЭтоДополнительноеСведение", Истина); + КонецЕсли; + +КонецПроцедуры + +#КонецОбласти + +#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда + #Область СлужебныеПроцедурыИФункции // Изменяет настройку свойства с общего свойства или общего списка значений свойства @@ -202,7 +219,7 @@ КорневойНабор = ПредопределенныеЭлементы[ИмяПредопределенного]; Если КорневойНабор <> Неопределено Тогда - Если ЗначениеЗаполнено(ОбщегоНазначения.ЗначениеРеквизитаОбъекта(КорневойНабор, "ЭтоГруппа")) = Истина Тогда + Если ЗначениеЗаполнено(ОбщегоНазначения.ЗначениеРеквизитаОбъекта(КорневойНабор, "ЭтоГруппа")) Тогда ТребуетсяАнализНаборовКаждогоОбъектаВладельца = Истина; КонецЕсли; КонецЕсли; @@ -470,4 +487,4 @@ #КонецОбласти -#КонецЕсли +#КонецЕсли \ No newline at end of file diff --git a/SSL/src/ChartsOfCharacteristicTypes/ДополнительныеРеквизитыИСведения/ObjectModule.bsl b/SSL/src/ChartsOfCharacteristicTypes/ДополнительныеРеквизитыИСведения/ObjectModule.bsl index 9011f42b3..801d006dd 100644 --- a/SSL/src/ChartsOfCharacteristicTypes/ДополнительныеРеквизитыИСведения/ObjectModule.bsl +++ b/SSL/src/ChartsOfCharacteristicTypes/ДополнительныеРеквизитыИСведения/ObjectModule.bsl @@ -58,6 +58,13 @@ КонецЦикла; КонецЕсли; + // Для общих реквизитов зависимости очищаются. + Если Не ЭтоДополнительноеСведение + И Не ЗначениеЗаполнено(НаборСвойств) + И ЗависимостиДополнительныхРеквизитов.Количество() > 0 Тогда + ЗависимостиДополнительныхРеквизитов.Очистить(); + КонецЕсли; + КонецПроцедуры Процедура ПередУдалением(Отказ) diff --git a/SSL/src/ChartsOfCharacteristicTypes/ДополнительныеРеквизитыИСведения/ДополнительныеРеквизитыИСведения.mdo b/SSL/src/ChartsOfCharacteristicTypes/ДополнительныеРеквизитыИСведения/ДополнительныеРеквизитыИСведения.mdo index 5c80ddbac..ff476f609 100644 --- a/SSL/src/ChartsOfCharacteristicTypes/ДополнительныеРеквизитыИСведения/ДополнительныеРеквизитыИСведения.mdo +++ b/SSL/src/ChartsOfCharacteristicTypes/ДополнительныеРеквизитыИСведения/ДополнительныеРеквизитыИСведения.mdo @@ -139,11 +139,101 @@ ChartOfCharacteristicTypes.ДополнительныеРеквизитыИСведения.Form.ФормаЭлемента ChartOfCharacteristicTypes.ДополнительныеРеквизитыИСведения.Form.ФормаСписка ChartOfCharacteristicTypes.ДополнительныеРеквизитыИСведения.Form.ФормаВыбора + + Виден + + ru + Виден + + + Boolean + + + ru + Настройка видимости дополнительного реквизита + + + + + Use + + + ВладелецДополнительныхЗначений + + ru + Владелец дополнительных значений + + + ChartOfCharacteristicTypesRef.ДополнительныеРеквизитыИСведения + + + ru + Свойство-образец, с которым у этого свойства одинаковый список дополнительных значений + + + + + Use + + + ДополнительныеЗначенияИспользуются + + ru + Дополнительные значения используются + + + Boolean + + + ru + Тип значения включает дополнительные значения + + + + + Use + + + ДополнительныеЗначенияСВесом + + ru + Значения дополнительно характеризуются весовым коэффициентом + + + Boolean + + + ru + Для дополнительных значений можно указать весовой коэффициент + + + + + Use + + + Доступен + + ru + Доступен + + + Boolean + + + ru + Настройка доступности дополнительного реквизита + + + + + Use + Заголовок ru - Наименование (заголовок) + Наименование String @@ -154,7 +244,7 @@ ru Краткое представление свойства, которое -выводится в формах редактирования его значения. +выводится в формах редактирования его значения @@ -164,6 +254,113 @@ Use Use + + ЗаголовокФормыВыбораЗначения + + ru + Заголовок формы выбора значения + + + String + + 150 + + + + ru + Используется в заголовке формы выбора дополнительного значения свойства + + + + + Use + Use + + + ЗаголовокФормыЗначения + + ru + Заголовок формы значения + + + String + + 150 + + + + ru + Используется в заголовке формы дополнительного значения свойства + + + + + Use + Use + + + ЗаполнятьОбязательно + + ru + Заполнять обязательно + + + Boolean + + + ru + Настройка проверки заполненности дополнительного реквизита + + + + + Use + Use + + + Комментарий + + ru + Комментарий + + + String + + + + ru + Поясняет назначение свойства + + + + + Use + ForFolderAndItem + Use + + + МногострочноеПолеВвода + + ru + Многострочное поле ввода + + + Number + + 2 + true + + + + ru + Число строк в многострочном поле ввода + + + + + Use + Use + НаборСвойств @@ -183,206 +380,6 @@ Use Use - - ЭтоДополнительноеСведение - - ru - Это дополнительное сведение - - - Boolean - - - ru - Свойство является дополнительным сведением, а не дополнительным реквизитом. - - - - - Index - Use - Use - - - ЗаполнятьОбязательно - - ru - Заполнять обязательно - - - Boolean - - - ru - Настройка проверки заполненности дополнительного реквизита. - - - - - Use - Use - - - МногострочноеПолеВвода - - ru - Многострочное поле ввода - - - Number - - 2 - true - - - - ru - Число строк в многострочном поле ввода. - - - - - Use - Use - - - ДополнительныеЗначенияИспользуются - - ru - Дополнительные значения используются - - - Boolean - - - ru - Тип значения включает дополнительные значения. - - - - - Use - - - ВладелецДополнительныхЗначений - - ru - Владелец дополнительных значений - - - ChartOfCharacteristicTypesRef.ДополнительныеРеквизитыИСведения - - - ru - Свойство-образец, с которым у этого свойства одинаковый список дополнительных значений. - - - - - Use - - - ДополнительныеЗначенияСВесом - - ru - Значения дополнительно характеризуются весовым коэффициентом - - - Boolean - - - ru - Для дополнительных значений можно указать весовой коэффициент. - - - - - Use - - - ЗаголовокФормыЗначения - - ru - Заголовок формы значения - - - String - - 150 - - - - ru - Используется в заголовке формы дополнительного значения свойства. - - - - - Use - Use - - - ЗаголовокФормыВыбораЗначения - - ru - Заголовок формы выбора значения - - - String - - 150 - - - - ru - Используется в заголовке формы выбора дополнительного значения свойства. - - - - - Use - Use - - - ФорматСвойства - - ru - Формат свойства - - - String - - - - ru - Хранит формат свойства для удобства представления. - - - - - Use - - - Комментарий - - ru - Комментарий - - - String - - - - ru - Поясняет назначение свойства. - - - - - Use - ForFolderAndItem - Use - Подсказка @@ -395,7 +392,7 @@ ru - Показывается пользователю при редактировании свойства в форме объекта. + Показывается пользователю при редактировании свойства в форме объекта @@ -415,13 +412,164 @@ ru - Ранее содержал заголовок формы значения и заголовок формы выбора значений. + Ранее содержал заголовок формы значения и заголовок формы выбора значений Use + + ФорматСвойства + + ru + Формат свойства + + + String + + + + ru + Хранит формат свойства для удобства представления + + + + + Use + + + ЭтоДополнительноеСведение + + ru + Это дополнительное сведение + + + Boolean + + + ru + Свойство является дополнительным сведением, а не дополнительным реквизитом + + + + + Index + Use + Use + + + + + + + ЗависимостиДополнительныхРеквизитов + + ru + Зависимости дополнительных реквизитов + + + Use + LineNumber + + Use + + + + + ЗависимоеСвойство + + ru + Зависимое свойство + + + String + + + + ru + Имя свойства дополнительного реквизита, для которого настроена зависимость. + + + + Use + Use + + + Реквизит + + ru + Реквизит + + + ChartOfCharacteristicTypesRef.ДополнительныеРеквизитыИСведения + String + + 99 + + + + ru + Имя реквизита формы или ссылка на дополнительный реквизит, от которого зависит текущий дополнительный реквизит. + + + + Use + Use + + + Условие + + ru + Условие + + + String + + 10 + + + + ru + Вид зависимости. "Равно", "Не равно", "Заполнено" или "Не заполнено". + + + + Use + Use + + + Значение + + ru + Значение + + + Boolean + String + Date + Number + AnyRef + + 10 + + + 10 + + + Date + + + + ru + Значение реквизита в условии. + + + + Use + Use + + ФормаЭлемента @@ -477,4 +625,22 @@ PersonalComputer MobileDevice + + ЗависимостьРеквизитов + + ru + Зависимость реквизитов + + PersonalComputer + MobileDevice + + + ВыборРеквизита + + ru + Выбор реквизита + + PersonalComputer + MobileDevice + diff --git a/SSL/src/ChartsOfCharacteristicTypes/ОбъектыАдресацииЗадач/Forms/ФормаСписка/Form.form b/SSL/src/ChartsOfCharacteristicTypes/ОбъектыАдресацииЗадач/Forms/ФормаСписка/Form.form index 580ff43ef..276df7ceb 100644 --- a/SSL/src/ChartsOfCharacteristicTypes/ОбъектыАдресацииЗадач/Forms/ФормаСписка/Form.form +++ b/SSL/src/ChartsOfCharacteristicTypes/ОбъектыАдресацииЗадач/Forms/ФормаСписка/Form.form @@ -352,7 +352,6 @@ true true true - UseIfNecessary auto true diff --git a/SSL/src/ChartsOfCharacteristicTypes/ОбъектыАдресацииЗадач/Forms/ФормаЭлемента/Form.form b/SSL/src/ChartsOfCharacteristicTypes/ОбъектыАдресацииЗадач/Forms/ФормаЭлемента/Form.form index f8c728b8c..aa388790d 100644 --- a/SSL/src/ChartsOfCharacteristicTypes/ОбъектыАдресацииЗадач/Forms/ФормаЭлемента/Form.form +++ b/SSL/src/ChartsOfCharacteristicTypes/ОбъектыАдресацииЗадач/Forms/ФормаЭлемента/Form.form @@ -93,7 +93,6 @@ true true true - UseIfNecessary auto true diff --git a/SSL/src/ChartsOfCharacteristicTypes/РазделыДатЗапретаИзменения/ObjectModule.bsl b/SSL/src/ChartsOfCharacteristicTypes/РазделыДатЗапретаИзменения/ObjectModule.bsl index 8b3d6a3bf..1fa98d355 100644 --- a/SSL/src/ChartsOfCharacteristicTypes/РазделыДатЗапретаИзменения/ObjectModule.bsl +++ b/SSL/src/ChartsOfCharacteristicTypes/РазделыДатЗапретаИзменения/ObjectModule.bsl @@ -15,10 +15,11 @@ Возврат; КонецЕсли; - ВызватьИсключение(НСтр("ru = 'Изменение разделов дат запрета изменения - |выполняется только через конфигуратор. - | - |Удаление допустимо.'")); + ВызватьИсключение + НСтр("ru = 'Изменение разделов дат запрета изменения + |выполняется только через конфигуратор. + | + |Удаление допустимо.'"); КонецПроцедуры diff --git a/SSL/src/ChartsOfCharacteristicTypes/РазделыДатЗапретаИзменения/РазделыДатЗапретаИзменения.mdo b/SSL/src/ChartsOfCharacteristicTypes/РазделыДатЗапретаИзменения/РазделыДатЗапретаИзменения.mdo index 4377f68d7..1ae240eb6 100644 --- a/SSL/src/ChartsOfCharacteristicTypes/РазделыДатЗапретаИзменения/РазделыДатЗапретаИзменения.mdo +++ b/SSL/src/ChartsOfCharacteristicTypes/РазделыДатЗапретаИзменения/РазделыДатЗапретаИзменения.mdo @@ -108,6 +108,15 @@ Variable 150 AsDescription + + + ОбработкаПерсональныхДанных + Обработка персональных данных + + ChartOfCharacteristicTypesRef.РазделыДатЗапретаИзменения + + + InDialog BothWays diff --git a/SSL/src/CommandGroups/ПараметрыОбменаДанными/ПараметрыОбменаДанными.mdo b/SSL/src/CommandGroups/ПараметрыСинхронизацииДанных/ПараметрыСинхронизацииДанных.mdo similarity index 89% rename from SSL/src/CommandGroups/ПараметрыОбменаДанными/ПараметрыОбменаДанными.mdo rename to SSL/src/CommandGroups/ПараметрыСинхронизацииДанных/ПараметрыСинхронизацииДанных.mdo index e0b788a26..1c7d33038 100644 --- a/SSL/src/CommandGroups/ПараметрыОбменаДанными/ПараметрыОбменаДанными.mdo +++ b/SSL/src/CommandGroups/ПараметрыСинхронизацииДанных/ПараметрыСинхронизацииДанных.mdo @@ -1,6 +1,6 @@ - ПараметрыОбменаДанными + ПараметрыСинхронизацииДанных ru Параметры синхронизации данных diff --git a/SSL/src/CommandGroups/ВыполнениеОбменаДанными/ВыполнениеОбменаДанными.mdo b/SSL/src/CommandGroups/СинхронизацияДанных/СинхронизацияДанных.mdo similarity index 90% rename from SSL/src/CommandGroups/ВыполнениеОбменаДанными/ВыполнениеОбменаДанными.mdo rename to SSL/src/CommandGroups/СинхронизацияДанных/СинхронизацияДанных.mdo index dba84ffb0..456fe37d0 100644 --- a/SSL/src/CommandGroups/ВыполнениеОбменаДанными/ВыполнениеОбменаДанными.mdo +++ b/SSL/src/CommandGroups/СинхронизацияДанных/СинхронизацияДанных.mdo @@ -1,6 +1,6 @@ - ВыполнениеОбменаДанными + СинхронизацияДанных ru Синхронизация данных diff --git a/SSL/src/CommonAttributes/ОбластьДанныхВспомогательныеДанные/ОбластьДанныхВспомогательныеДанные.mdo b/SSL/src/CommonAttributes/ОбластьДанныхВспомогательныеДанные/ОбластьДанныхВспомогательныеДанные.mdo index 2b77ca23e..d263f4d2f 100644 --- a/SSL/src/CommonAttributes/ОбластьДанныхВспомогательныеДанные/ОбластьДанныхВспомогательныеДанные.mdo +++ b/SSL/src/CommonAttributes/ОбластьДанныхВспомогательныеДанные/ОбластьДанныхВспомогательныеДанные.mdo @@ -16,6 +16,14 @@ Use + + InformationRegister.ЗамерыКомментарииСтатистики + DontUse + + + InformationRegister.СтатистикаКонфигурации + DontUse + Catalog.СообщенияОбластейДанных Use @@ -24,6 +32,14 @@ Constant.ВыполнятьЗамерыПроизводительности DontUse + + ScheduledJob.РассылкаОтчетов + Use + + + InformationRegister.ЗамерыВремениТехнологические + DontUse + InformationRegister.РейтингАктивностиОбластейДанных Use @@ -56,6 +72,10 @@ Catalog.ОчередьЗаданий DontUse + + InformationRegister.ЗамерыОбластиСтатистики + DontUse + InformationRegister.СостоянияКонтрагентов Use @@ -80,10 +100,30 @@ Constant.ОценкаПроизводительностиПериодЗаписи DontUse + + InformationRegister.ОбластиСтатистики + DontUse + InformationRegister.УдалитьЗамерыВремени DontUse + + ScheduledJob.СборИОтправкаСтатистики + DontUse + + + Constant.ОценкаПроизводительностиЭкспортВсехКлючевыхОпераций + DontUse + + + InformationRegister.БуферОперацийСтатистики + DontUse + + + Constant.ПараметрыЦентраМониторинга + DontUse + Constant.СведенияОбОбновленииИБ Use @@ -96,18 +136,42 @@ InformationRegister.УдалитьСтраныМира DontUse + + InformationRegister.ДампыПлатформы + DontUse + + + InformationRegister.ЗамерыОперацииСтатистики + DontUse + Constant.ПредставлениеОбластиДанных Use + + InformationRegister.КомментарииСтатистики + DontUse + Constant.ВыполнитьРезервноеКопированиеОбластиДанных Use + + InformationRegister.ОперацииСтатистики + DontUse + Catalog.ОчередьЗаданийОбластейДанных Use + + InformationRegister.КомментарииОперацииСтатистики + DontUse + + + InformationRegister.ПакетыДляОтправки + DontUse + InformationRegister.БлокировкиСеансовОбластейДанных Use diff --git a/SSL/src/CommonAttributes/ОбластьДанныхОсновныеДанные/ОбластьДанныхОсновныеДанные.mdo b/SSL/src/CommonAttributes/ОбластьДанныхОсновныеДанные/ОбластьДанныхОсновныеДанные.mdo index 38fae3271..1c7cd33fc 100644 --- a/SSL/src/CommonAttributes/ОбластьДанныхОсновныеДанные/ОбластьДанныхОсновныеДанные.mdo +++ b/SSL/src/CommonAttributes/ОбластьДанныхОсновныеДанные/ОбластьДанныхОсновныеДанные.mdo @@ -52,14 +52,26 @@ ScheduledJob.ОбновлениеИндексаППД DontUse + + InformationRegister.ЗамерыКомментарииСтатистики + DontUse + ExchangePlan.ОбменСообщениями DontUse + + ScheduledJob.ОчисткаНенужныхФайлов + DontUse + Constant.ИспользоватьДополнительныеОтчетыИОбработки DontUse + + InformationRegister.СтатистикаКонфигурации + DontUse + ChartOfCharacteristicTypes.РазделыДатЗапретаИзменения DontUse @@ -96,6 +108,10 @@ Constant.ВыполнятьЗамерыПроизводительности DontUse + + ScheduledJob.РассылкаОтчетов + Use + Constant.ПрофильБезопасностиИнформационнойБазы DontUse @@ -104,6 +120,10 @@ Constant.ИспользоватьПроверкуКонтрагентов DontUse + + InformationRegister.ЗамерыВремениТехнологические + DontUse + Constant.ИспользоватьСинхронизациюДанныхВМоделиСервиса DontUse @@ -177,7 +197,7 @@ DontUse - Constant.ПарольСлужебногоПользователяМенеджераСервиса + Constant.УдалитьПарольСлужебногоПользователяМенеджераСервиса DontUse @@ -280,6 +300,10 @@ Catalog.ОчередьЗаданий DontUse + + InformationRegister.ЗамерыОбластиСтатистики + DontUse + InformationRegister.ДополнительныеАдресныеСведения DontUse @@ -364,10 +388,6 @@ ScheduledJob.УдалениеПомеченных DontUse - - ScheduledJob.ПересчетТекущихЗначенийОтносительныхДатЗапретаИзменения - DontUse - Constant.КаталогСообщенийОбменаДаннымиДляLinux DontUse @@ -401,7 +421,7 @@ DontUse - Constant.ИмяСлужебногоПользователяМенеджераСервиса + Constant.УдалитьИмяСлужебногоПользователяМенеджераСервиса DontUse @@ -420,6 +440,10 @@ InformationRegister.ПравилаДляОбменаДанными DontUse + + InformationRegister.ОбластиСтатистики + DontUse + Constant.НастройкаПодчиненногоУзлаРИБЗавершена DontUse @@ -448,6 +472,10 @@ InformationRegister.УдалитьЗамерыВремени DontUse + + ScheduledJob.СборИОтправкаСтатистики + DontUse + Constant.ПараметрыВариантовОтчетов DontUse @@ -464,6 +492,10 @@ Constant.РазмерБлокаПередачиФайла DontUse + + Constant.ОценкаПроизводительностиЭкспортВсехКлючевыхОпераций + DontUse + Constant.СообщениеОбменаДаннымиИзГлавногоУзла DontUse @@ -472,6 +504,14 @@ ScheduledJob.ЗагрузкаКурсовВалют DontUse + + InformationRegister.БуферОперацийСтатистики + DontUse + + + Constant.ПараметрыЦентраМониторинга + DontUse + ScheduledJob.УведомлениеИсполнителейОНовыхЗадачах DontUse @@ -540,6 +580,14 @@ ScheduledJob.УстановкаПериодаРассчитанныхИтогов DontUse + + InformationRegister.ДампыПлатформы + DontUse + + + InformationRegister.ЗамерыОперацииСтатистики + DontUse + Constant.ИсточникДанныхАдресногоКлассификатора DontUse @@ -548,6 +596,10 @@ Constant.ПредставлениеОбластиДанных DontUse + + InformationRegister.КомментарииСтатистики + DontUse + InformationRegister.АдресныеОбъекты DontUse @@ -556,6 +608,10 @@ Constant.ВыполнитьРезервноеКопированиеОбластиДанных DontUse + + InformationRegister.ОперацииСтатистики + DontUse + Catalog.ОчередьЗаданийОбластейДанных DontUse @@ -564,6 +620,14 @@ Constant.ПовторитьЗагрузкуСообщенияОбменаДаннымиПередЗапуском DontUse + + InformationRegister.КомментарииОперацииСтатистики + DontUse + + + InformationRegister.ПакетыДляОтправки + DontUse + Constant.ДетализироватьОбновлениеИБВЖурналеРегистрации DontUse @@ -584,6 +648,10 @@ Catalog.ПоставляемыеДанные DontUse + + InformationRegister.БезопасноеХранилищеДанных + DontUse + Constant.ПараметрыДополнительныхРеквизитовИСведений DontUse diff --git a/SSL/src/CommonCommands/ДополнительныеПечатныеФормыОбъекта/CommandModule.bsl b/SSL/src/CommonCommands/ДополнительныеПечатныеФормыОбъекта/CommandModule.bsl deleted file mode 100644 index cca777c7e..000000000 --- a/SSL/src/CommonCommands/ДополнительныеПечатныеФормыОбъекта/CommandModule.bsl +++ /dev/null @@ -1,14 +0,0 @@ - -#Область ОбработчикиСобытий - -&НаКлиенте -Процедура ОбработкаКоманды(ПараметрКоманды, ПараметрыВыполненияКоманды) - - ДополнительныеОтчетыИОбработкиКлиент.ОткрытьФормуКомандДополнительныхОтчетовИОбработок( - ПараметрКоманды, - ПараметрыВыполненияКоманды, - ДополнительныеОтчетыИОбработкиКлиентСервер.ВидОбработкиПечатнаяФорма()); - -КонецПроцедуры - -#КонецОбласти diff --git a/SSL/src/CommonCommands/ДополнительныеПечатныеФормыОбъекта/ДополнительныеПечатныеФормыОбъекта.mdo b/SSL/src/CommonCommands/ДополнительныеПечатныеФормыОбъекта/ДополнительныеПечатныеФормыОбъекта.mdo deleted file mode 100644 index 3f3faff58..000000000 --- a/SSL/src/CommonCommands/ДополнительныеПечатныеФормыОбъекта/ДополнительныеПечатныеФормыОбъекта.mdo +++ /dev/null @@ -1,15 +0,0 @@ - - - ДополнительныеПечатныеФормыОбъекта - - ru - Дополнительные печатные формы... - - CommandGroup.Печать - Multiple - Auto - - ru - Перейти к списку дополнительных печатных форм - - diff --git a/SSL/src/CommonCommands/ДополнительныеСведенияКоманднаяПанель/ДополнительныеСведенияКоманднаяПанель.mdo b/SSL/src/CommonCommands/ДополнительныеСведенияКоманднаяПанель/ДополнительныеСведенияКоманднаяПанель.mdo index af7b26f7e..26fd1dd5c 100644 --- a/SSL/src/CommonCommands/ДополнительныеСведенияКоманднаяПанель/ДополнительныеСведенияКоманднаяПанель.mdo +++ b/SSL/src/CommonCommands/ДополнительныеСведенияКоманднаяПанель/ДополнительныеСведенияКоманднаяПанель.mdo @@ -7,15 +7,7 @@ FormCommandBarImportant - DocumentRef.ЭлектронноеПисьмоИсходящее - DocumentRef.ЗапланированноеВзаимодействие - CatalogRef.ПапкиФайлов - CatalogRef.ВнешниеПользователи - DocumentRef.ЭлектронноеПисьмоВходящее - DocumentRef.ТелефонныйЗвонок - DocumentRef.Встреча - DocumentRef.СообщениеSMS - CatalogRef.Пользователи + DefinedType.ВладелецДополнительныхСведений Picture diff --git a/SSL/src/CommonCommands/ДополнительныеСведенияПанельНавигации/CommandModule.bsl b/SSL/src/CommonCommands/ДополнительныеСведенияПанельНавигации/CommandModule.bsl deleted file mode 100644 index fcf9a36c4..000000000 --- a/SSL/src/CommonCommands/ДополнительныеСведенияПанельНавигации/CommandModule.bsl +++ /dev/null @@ -1,24 +0,0 @@ - -#Область ОбработчикиСобытий - -&НаКлиенте -Процедура ОбработкаКоманды(ПараметрКоманды, ПараметрыВыполненияКоманды) - - Если ПараметрКоманды = Неопределено Тогда - Возврат; - КонецЕсли; - - ПараметрыФормы = Новый Структура; - ПараметрыФормы.Вставить("Ссылка", ПараметрКоманды); - ПараметрыФормы.Вставить("ПанельНавигацииФормы", Истина); - - ОткрытьФорму( - "ОбщаяФорма.РедактированиеДополнительныхСведений", - ПараметрыФормы, - ПараметрыВыполненияКоманды.Источник, - ПараметрыВыполненияКоманды.Уникальность, - ПараметрыВыполненияКоманды.Окно); - -КонецПроцедуры - -#КонецОбласти diff --git a/SSL/src/CommonCommands/ДополнительныеСведенияПанельНавигации/ДополнительныеСведенияПанельНавигации.mdo b/SSL/src/CommonCommands/ДополнительныеСведенияПанельНавигации/ДополнительныеСведенияПанельНавигации.mdo deleted file mode 100644 index 7df31ece8..000000000 --- a/SSL/src/CommonCommands/ДополнительныеСведенияПанельНавигации/ДополнительныеСведенияПанельНавигации.mdo +++ /dev/null @@ -1,20 +0,0 @@ - - - ДополнительныеСведенияПанельНавигации - - ru - Дополнительные сведения - - FormNavigationPanelSeeAlso - - CatalogRef.Файлы - - Picture - - ru - Открыть дополнительные сведения - - - CommonPicture.ДополнительныеСведения - - diff --git a/SSL/src/CommonCommands/ОткрытьПравилаСинхронизацииДанных/CommandModule.bsl b/SSL/src/CommonCommands/ЗагрузитьКомплектПравил/CommandModule.bsl similarity index 100% rename from SSL/src/CommonCommands/ОткрытьПравилаСинхронизацииДанных/CommandModule.bsl rename to SSL/src/CommonCommands/ЗагрузитьКомплектПравил/CommandModule.bsl diff --git a/SSL/src/CommonCommands/ОткрытьПравилаСинхронизацииДанных/ОткрытьПравилаСинхронизацииДанных.mdo b/SSL/src/CommonCommands/ЗагрузитьКомплектПравил/ЗагрузитьКомплектПравил.mdo similarity index 90% rename from SSL/src/CommonCommands/ОткрытьПравилаСинхронизацииДанных/ОткрытьПравилаСинхронизацииДанных.mdo rename to SSL/src/CommonCommands/ЗагрузитьКомплектПравил/ЗагрузитьКомплектПравил.mdo index 852595704..c7ef119aa 100644 --- a/SSL/src/CommonCommands/ОткрытьПравилаСинхронизацииДанных/ОткрытьПравилаСинхронизацииДанных.mdo +++ b/SSL/src/CommonCommands/ЗагрузитьКомплектПравил/ЗагрузитьКомплектПравил.mdo @@ -1,6 +1,6 @@ - ОткрытьПравилаСинхронизацииДанных + ЗагрузитьКомплектПравил ru Загрузить комплект правил diff --git a/SSL/src/CommonCommands/ОткрытьПравилаКонвертацииОбъектов/CommandModule.bsl b/SSL/src/CommonCommands/ЗагрузитьПравилаКонвертацииОбъектов/CommandModule.bsl similarity index 100% rename from SSL/src/CommonCommands/ОткрытьПравилаКонвертацииОбъектов/CommandModule.bsl rename to SSL/src/CommonCommands/ЗагрузитьПравилаКонвертацииОбъектов/CommandModule.bsl diff --git a/SSL/src/CommonCommands/ОткрытьПравилаКонвертацииОбъектов/ОткрытьПравилаКонвертацииОбъектов.mdo b/SSL/src/CommonCommands/ЗагрузитьПравилаКонвертацииОбъектов/ЗагрузитьПравилаКонвертацииОбъектов.mdo similarity index 67% rename from SSL/src/CommonCommands/ОткрытьПравилаКонвертацииОбъектов/ОткрытьПравилаКонвертацииОбъектов.mdo rename to SSL/src/CommonCommands/ЗагрузитьПравилаКонвертацииОбъектов/ЗагрузитьПравилаКонвертацииОбъектов.mdo index 2a8dd7b4f..bf064333a 100644 --- a/SSL/src/CommonCommands/ОткрытьПравилаКонвертацииОбъектов/ОткрытьПравилаКонвертацииОбъектов.mdo +++ b/SSL/src/CommonCommands/ЗагрузитьПравилаКонвертацииОбъектов/ЗагрузитьПравилаКонвертацииОбъектов.mdo @@ -1,10 +1,10 @@ - ОткрытьПравилаКонвертацииОбъектов + ЗагрузитьПравилаКонвертацииОбъектов ru Загрузить правила конвертации объектов - CommandGroup.ПараметрыОбменаДанными + CommandGroup.ПараметрыСинхронизацииДанных Auto diff --git a/SSL/src/CommonCommands/ОткрытьПравилаРегистрацииОбъектов/CommandModule.bsl b/SSL/src/CommonCommands/ЗагрузитьПравилаРегистрацииОбъектов/CommandModule.bsl similarity index 100% rename from SSL/src/CommonCommands/ОткрытьПравилаРегистрацииОбъектов/CommandModule.bsl rename to SSL/src/CommonCommands/ЗагрузитьПравилаРегистрацииОбъектов/CommandModule.bsl diff --git a/SSL/src/CommonCommands/ОткрытьПравилаРегистрацииОбъектов/ОткрытьПравилаРегистрацииОбъектов.mdo b/SSL/src/CommonCommands/ЗагрузитьПравилаРегистрацииОбъектов/ЗагрузитьПравилаРегистрацииОбъектов.mdo similarity index 67% rename from SSL/src/CommonCommands/ОткрытьПравилаРегистрацииОбъектов/ОткрытьПравилаРегистрацииОбъектов.mdo rename to SSL/src/CommonCommands/ЗагрузитьПравилаРегистрацииОбъектов/ЗагрузитьПравилаРегистрацииОбъектов.mdo index 0e16ecfa8..2235bbe69 100644 --- a/SSL/src/CommonCommands/ОткрытьПравилаРегистрацииОбъектов/ОткрытьПравилаРегистрацииОбъектов.mdo +++ b/SSL/src/CommonCommands/ЗагрузитьПравилаРегистрацииОбъектов/ЗагрузитьПравилаРегистрацииОбъектов.mdo @@ -1,10 +1,10 @@ - ОткрытьПравилаРегистрацииОбъектов + ЗагрузитьПравилаРегистрацииОбъектов ru Загрузить правила регистрации объектов - CommandGroup.ПараметрыОбменаДанными + CommandGroup.ПараметрыСинхронизацииДанных Auto diff --git a/SSL/src/CommonCommands/ЗадачиПоБизнесПроцессу/ЗадачиПоБизнесПроцессу.mdo b/SSL/src/CommonCommands/ЗадачиПоБизнесПроцессу/ЗадачиПоБизнесПроцессу.mdo index 34a550343..4ca147e64 100644 --- a/SSL/src/CommonCommands/ЗадачиПоБизнесПроцессу/ЗадачиПоБизнесПроцессу.mdo +++ b/SSL/src/CommonCommands/ЗадачиПоБизнесПроцессу/ЗадачиПоБизнесПроцессу.mdo @@ -8,7 +8,7 @@ Задача выбранного бизнес-процесса FormNavigationPanelGoTo - BusinessProcessRef.Задание + DefinedType.БизнесПроцесс Auto diff --git a/SSL/src/CommonCommands/ЗадачиПоПредмету/CommandModule.bsl b/SSL/src/CommonCommands/ЗадачиПоПредмету/CommandModule.bsl index 9d33bd5fe..1f48b78e7 100644 --- a/SSL/src/CommonCommands/ЗадачиПоПредмету/CommandModule.bsl +++ b/SSL/src/CommonCommands/ЗадачиПоПредмету/CommandModule.bsl @@ -1,3 +1,4 @@ +#Область ОбработчикиСобытий &НаКлиенте Процедура ОбработкаКоманды(ПараметрКоманды, ПараметрыВыполненияКоманды) @@ -7,3 +8,5 @@ ПараметрыВыполненияКоманды.Источник.КлючУникальности, ПараметрыВыполненияКоманды.Окно); КонецПроцедуры + +#КонецОбласти \ No newline at end of file diff --git a/SSL/src/CommonCommands/ЗадачиПоПредмету/ЗадачиПоПредмету.mdo b/SSL/src/CommonCommands/ЗадачиПоПредмету/ЗадачиПоПредмету.mdo index 1be21bbb1..c2ec72de4 100644 --- a/SSL/src/CommonCommands/ЗадачиПоПредмету/ЗадачиПоПредмету.mdo +++ b/SSL/src/CommonCommands/ЗадачиПоПредмету/ЗадачиПоПредмету.mdo @@ -8,8 +8,7 @@ Задачи, созданные на основании выбранного предмета FormNavigationPanelGoTo - CatalogRef.Файлы - CatalogRef.Пользователи + DefinedType.ПредметЗадачи Auto diff --git a/SSL/src/CommonCommands/ЗаполнениеОбъекта/ЗаполнениеОбъекта.mdo b/SSL/src/CommonCommands/ЗаполнениеОбъекта/ЗаполнениеОбъекта.mdo index 54ad56606..f1fa4db4c 100644 --- a/SSL/src/CommonCommands/ЗаполнениеОбъекта/ЗаполнениеОбъекта.mdo +++ b/SSL/src/CommonCommands/ЗаполнениеОбъекта/ЗаполнениеОбъекта.mdo @@ -6,6 +6,9 @@ Заполнение... FormCommandBarImportant + + DefinedType.ОбъектСДополнительнымиКомандами + Multiple true Auto diff --git a/SSL/src/CommonCommands/ИсторияИзменений/ИсторияИзменений.mdo b/SSL/src/CommonCommands/ИсторияИзменений/ИсторияИзменений.mdo index 33ceb3726..462f99b42 100644 --- a/SSL/src/CommonCommands/ИсторияИзменений/ИсторияИзменений.mdo +++ b/SSL/src/CommonCommands/ИсторияИзменений/ИсторияИзменений.mdo @@ -6,6 +6,9 @@ История изменений FormNavigationPanelSeeAlso + + DefinedType.ВерсионируемыеДанные + PictureAndText ru diff --git a/SSL/src/CommonCommands/КартаМаршрутаБизнесПроцесса/КартаМаршрутаБизнесПроцесса.mdo b/SSL/src/CommonCommands/КартаМаршрутаБизнесПроцесса/КартаМаршрутаБизнесПроцесса.mdo index 7ad157b89..4236ea7a3 100644 --- a/SSL/src/CommonCommands/КартаМаршрутаБизнесПроцесса/КартаМаршрутаБизнесПроцесса.mdo +++ b/SSL/src/CommonCommands/КартаМаршрутаБизнесПроцесса/КартаМаршрутаБизнесПроцесса.mdo @@ -7,7 +7,7 @@ FormCommandBarImportant - BusinessProcessRef.Задание + DefinedType.БизнесПроцесс Auto diff --git a/SSL/src/CommonCommands/МоиЗаметкиПоПредмету/МоиЗаметкиПоПредмету.mdo b/SSL/src/CommonCommands/МоиЗаметкиПоПредмету/МоиЗаметкиПоПредмету.mdo index e680dacc3..b0300c06b 100644 --- a/SSL/src/CommonCommands/МоиЗаметкиПоПредмету/МоиЗаметкиПоПредмету.mdo +++ b/SSL/src/CommonCommands/МоиЗаметкиПоПредмету/МоиЗаметкиПоПредмету.mdo @@ -6,5 +6,8 @@ Мои заметки FormNavigationPanelGoTo + + DefinedType.ПредметЗаметок + PictureAndText diff --git a/SSL/src/CommonCommands/Напомнить/Напомнить.mdo b/SSL/src/CommonCommands/Напомнить/Напомнить.mdo index 99df59186..2d6d9f387 100644 --- a/SSL/src/CommonCommands/Напомнить/Напомнить.mdo +++ b/SSL/src/CommonCommands/Напомнить/Напомнить.mdo @@ -7,8 +7,7 @@ CommandGroup.Органайзер - CatalogRef.Заметки - TaskRef.ЗадачаИсполнителя + DefinedType.ПредметНапоминания Auto diff --git a/SSL/src/CommonCommands/НастроитьПараметрыТранспортаСообщенийОбмена/НастроитьПараметрыТранспортаСообщенийОбмена.mdo b/SSL/src/CommonCommands/НастроитьПараметрыТранспортаСообщенийОбмена/НастроитьПараметрыТранспортаСообщенийОбмена.mdo index 33fc358ee..b526e0f2d 100644 --- a/SSL/src/CommonCommands/НастроитьПараметрыТранспортаСообщенийОбмена/НастроитьПараметрыТранспортаСообщенийОбмена.mdo +++ b/SSL/src/CommonCommands/НастроитьПараметрыТранспортаСообщенийОбмена/НастроитьПараметрыТранспортаСообщенийОбмена.mdo @@ -5,7 +5,7 @@ ru Параметры подключения - CommandGroup.ПараметрыОбменаДанными + CommandGroup.ПараметрыСинхронизацииДанных ExchangePlanRef.ОбменСообщениями diff --git a/SSL/src/CommonCommands/НастроитьПрава/CommandModule.bsl b/SSL/src/CommonCommands/НастроитьПрава/CommandModule.bsl index be7ce2785..718dde135 100644 --- a/SSL/src/CommonCommands/НастроитьПрава/CommandModule.bsl +++ b/SSL/src/CommonCommands/НастроитьПрава/CommandModule.bsl @@ -1,3 +1,4 @@ +#Область ОбработчикиСобытий &НаКлиенте Процедура ОбработкаКоманды(СсылкаНаОбъект, ПараметрыВыполненияКоманды) @@ -11,3 +12,4 @@ КонецПроцедуры +#КонецОбласти diff --git a/SSL/src/CommonCommands/НастройкаСистемнойУчетнойЗаписиЭлектроннойПочты/НастройкаСистемнойУчетнойЗаписиЭлектроннойПочты.mdo b/SSL/src/CommonCommands/НастройкаСистемнойУчетнойЗаписиЭлектроннойПочты/НастройкаСистемнойУчетнойЗаписиЭлектроннойПочты.mdo index 7f5563d64..efaf2c4cf 100644 --- a/SSL/src/CommonCommands/НастройкаСистемнойУчетнойЗаписиЭлектроннойПочты/НастройкаСистемнойУчетнойЗаписиЭлектроннойПочты.mdo +++ b/SSL/src/CommonCommands/НастройкаСистемнойУчетнойЗаписиЭлектроннойПочты/НастройкаСистемнойУчетнойЗаписиЭлектроннойПочты.mdo @@ -3,7 +3,7 @@ НастройкаСистемнойУчетнойЗаписиЭлектроннойПочты ru - Настройка системной учетной записи электронной почты + Настройка системной учетной записи ActionsPanelTools Auto diff --git a/SSL/src/CommonCommands/ОтчетыОбъекта/ОтчетыОбъекта.mdo b/SSL/src/CommonCommands/ОтчетыОбъекта/ОтчетыОбъекта.mdo index 110eea359..dcceb519e 100644 --- a/SSL/src/CommonCommands/ОтчетыОбъекта/ОтчетыОбъекта.mdo +++ b/SSL/src/CommonCommands/ОтчетыОбъекта/ОтчетыОбъекта.mdo @@ -6,6 +6,9 @@ Отчеты... FormCommandBarImportant + + DefinedType.ОбъектСДополнительнымиКомандами + Multiple Auto diff --git a/SSL/src/CommonCommands/ПолучитьНастройкиОбменаДаннымиДляВторойИнформационнойБазы/CommandModule.bsl b/SSL/src/CommonCommands/ПолучитьНастройкиСинхронизацииДляДругойПрограммы/CommandModule.bsl similarity index 100% rename from SSL/src/CommonCommands/ПолучитьНастройкиОбменаДаннымиДляВторойИнформационнойБазы/CommandModule.bsl rename to SSL/src/CommonCommands/ПолучитьНастройкиСинхронизацииДляДругойПрограммы/CommandModule.bsl diff --git a/SSL/src/CommonCommands/ПолучитьНастройкиОбменаДаннымиДляВторойИнформационнойБазы/ПолучитьНастройкиОбменаДаннымиДляВторойИнформационнойБазы.mdo b/SSL/src/CommonCommands/ПолучитьНастройкиСинхронизацииДляДругойПрограммы/ПолучитьНастройкиСинхронизацииДляДругойПрограммы.mdo similarity index 65% rename from SSL/src/CommonCommands/ПолучитьНастройкиОбменаДаннымиДляВторойИнформационнойБазы/ПолучитьНастройкиОбменаДаннымиДляВторойИнформационнойБазы.mdo rename to SSL/src/CommonCommands/ПолучитьНастройкиСинхронизацииДляДругойПрограммы/ПолучитьНастройкиСинхронизацииДляДругойПрограммы.mdo index 9c7677a79..9503ecc4c 100644 --- a/SSL/src/CommonCommands/ПолучитьНастройкиОбменаДаннымиДляВторойИнформационнойБазы/ПолучитьНастройкиОбменаДаннымиДляВторойИнформационнойБазы.mdo +++ b/SSL/src/CommonCommands/ПолучитьНастройкиСинхронизацииДляДругойПрограммы/ПолучитьНастройкиСинхронизацииДляДругойПрограммы.mdo @@ -1,10 +1,10 @@ - ПолучитьНастройкиОбменаДаннымиДляВторойИнформационнойБазы + ПолучитьНастройкиСинхронизацииДляДругойПрограммы ru Получить настройки синхронизации для другой программы... - CommandGroup.ПараметрыОбменаДанными + CommandGroup.ПараметрыСинхронизацииДанных Auto diff --git a/SSL/src/CommonCommands/ПраваДоступа/CommandModule.bsl b/SSL/src/CommonCommands/ПраваДоступа/CommandModule.bsl index 2ac2edf58..74dbfdceb 100644 --- a/SSL/src/CommonCommands/ПраваДоступа/CommandModule.bsl +++ b/SSL/src/CommonCommands/ПраваДоступа/CommandModule.bsl @@ -1,3 +1,4 @@ +#Область ОбработчикиСобытий &НаКлиенте Процедура ОбработкаКоманды(ПараметрКоманды, ПараметрыВыполненияКоманды) @@ -6,9 +7,9 @@ Возврат; КонецЕсли; - Если СтандартныеПодсистемыКлиентПовтИсп.ПараметрыРаботыКлиента( - ).УпрощенныйИнтерфейсНастройкиПравДоступа Тогда - + ПараметрыРаботыКлиента = СтандартныеПодсистемыКлиентПовтИсп.ПараметрыРаботыКлиента(); + + Если ПараметрыРаботыКлиента.УпрощенныйИнтерфейсНастройкиПравДоступа Тогда ИмяФормы = "ОбщаяФорма.ПраваДоступаУпрощенно"; Иначе ИмяФормы = "ОбщаяФорма.ПраваДоступа"; @@ -25,3 +26,5 @@ ПараметрыВыполненияКоманды.Окно); КонецПроцедуры + +#КонецОбласти diff --git a/SSL/src/CommonCommands/ОткрытьРезультатыОбменаДанными/CommandModule.bsl b/SSL/src/CommonCommands/ПредупрежденияПриСинхронизацииДанных/CommandModule.bsl similarity index 100% rename from SSL/src/CommonCommands/ОткрытьРезультатыОбменаДанными/CommandModule.bsl rename to SSL/src/CommonCommands/ПредупрежденияПриСинхронизацииДанных/CommandModule.bsl diff --git a/SSL/src/CommonCommands/ОткрытьРезультатыОбменаДанными/ОткрытьРезультатыОбменаДанными.mdo b/SSL/src/CommonCommands/ПредупрежденияПриСинхронизацииДанных/ПредупрежденияПриСинхронизацииДанных.mdo similarity index 82% rename from SSL/src/CommonCommands/ОткрытьРезультатыОбменаДанными/ОткрытьРезультатыОбменаДанными.mdo rename to SSL/src/CommonCommands/ПредупрежденияПриСинхронизацииДанных/ПредупрежденияПриСинхронизацииДанных.mdo index bf4e052eb..c0414df20 100644 --- a/SSL/src/CommonCommands/ОткрытьРезультатыОбменаДанными/ОткрытьРезультатыОбменаДанными.mdo +++ b/SSL/src/CommonCommands/ПредупрежденияПриСинхронизацииДанных/ПредупрежденияПриСинхронизацииДанных.mdo @@ -1,6 +1,6 @@ - ОткрытьРезультатыОбменаДанными + ПредупрежденияПриСинхронизацииДанных ru Предупреждения при синхронизации данных diff --git a/SSL/src/CommonCommands/ПрисоединенныеФайлы/CommandModule.bsl b/SSL/src/CommonCommands/ПрисоединенныеФайлы/CommandModule.bsl index 3c405e0cc..bbeb23433 100644 --- a/SSL/src/CommonCommands/ПрисоединенныеФайлы/CommandModule.bsl +++ b/SSL/src/CommonCommands/ПрисоединенныеФайлы/CommandModule.bsl @@ -1,3 +1,4 @@ +#Область ОбработчикиСобытий &НаКлиенте Процедура ОбработкаКоманды(ПараметрКоманды, ПараметрыВыполненияКоманды) @@ -14,3 +15,5 @@ ПараметрыВыполненияКоманды.Окно); КонецПроцедуры + +#КонецОбласти \ No newline at end of file diff --git a/SSL/src/CommonCommands/ПрисоединенныеФайлыКОбъекту/ПрисоединенныеФайлыКОбъекту.mdo b/SSL/src/CommonCommands/ПрисоединенныеФайлыКОбъекту/ПрисоединенныеФайлыКОбъекту.mdo index fda1284e2..fc7743739 100644 --- a/SSL/src/CommonCommands/ПрисоединенныеФайлыКОбъекту/ПрисоединенныеФайлыКОбъекту.mdo +++ b/SSL/src/CommonCommands/ПрисоединенныеФайлыКОбъекту/ПрисоединенныеФайлыКОбъекту.mdo @@ -7,10 +7,7 @@ FormNavigationPanelGoTo - DocumentRef.ЗапланированноеВзаимодействие - DocumentRef.ТелефонныйЗвонок - DocumentRef.Встреча - DocumentRef.СообщениеSMS + DefinedType.ВладелецПрисоединенныхФайлов Auto diff --git a/SSL/src/CommonCommands/РазместитьФайлыНачальногоОбраза/CommandModule.bsl b/SSL/src/CommonCommands/РазместитьФайлыНачальногоОбраза/CommandModule.bsl index 1aecfbccb..d1b5bef70 100644 --- a/SSL/src/CommonCommands/РазместитьФайлыНачальногоОбраза/CommandModule.bsl +++ b/SSL/src/CommonCommands/РазместитьФайлыНачальногоОбраза/CommandModule.bsl @@ -1,3 +1,5 @@ +#Область ОбработчикиСобытий + &НаКлиенте Процедура ОбработкаКоманды(ПараметрКоманды, ПараметрыВыполненияКоманды) @@ -10,9 +12,15 @@ КонецПроцедуры +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + &НаСервере Функция ЕстьФайлыВТомах() Возврат ФайловыеФункцииСлужебный.ЕстьФайлыВТомах(); КонецФункции + +#КонецОбласти diff --git a/SSL/src/CommonCommands/РолиИИсполнителиЗадач/CommandModule.bsl b/SSL/src/CommonCommands/РолиИИсполнителиЗадач/CommandModule.bsl index 77f71236f..38f4c3afb 100644 --- a/SSL/src/CommonCommands/РолиИИсполнителиЗадач/CommandModule.bsl +++ b/SSL/src/CommonCommands/РолиИИсполнителиЗадач/CommandModule.bsl @@ -2,7 +2,7 @@ &НаКлиенте Процедура ОбработкаКоманды(ПараметрКоманды, ПараметрыВыполненияКоманды) - ОткрытьФорму("РегистрСведений.ИсполнителиЗадач.Форма.АдресацияПоОбъекту", + ОткрытьФорму("РегистрСведений.ИсполнителиЗадач.Форма.РолиИИсполнителиЗадач", Новый Структура("ОсновнойОбъектАдресации", ПараметрКоманды), ПараметрыВыполненияКоманды.Источник, ПараметрыВыполненияКоманды.Уникальность, diff --git a/SSL/src/CommonCommands/РолиИИсполнителиЗадач/РолиИИсполнителиЗадач.mdo b/SSL/src/CommonCommands/РолиИИсполнителиЗадач/РолиИИсполнителиЗадач.mdo index 5d37f58f8..ad91d95ea 100644 --- a/SSL/src/CommonCommands/РолиИИсполнителиЗадач/РолиИИсполнителиЗадач.mdo +++ b/SSL/src/CommonCommands/РолиИИсполнителиЗадач/РолиИИсполнителиЗадач.mdo @@ -7,7 +7,7 @@ FormNavigationPanelGoTo - CatalogRef.Организации + DefinedType.ОбъектАдресации PictureAndText diff --git a/SSL/src/CommonCommands/СведенияОПользователе/CommandModule.bsl b/SSL/src/CommonCommands/СведенияОПользователе/CommandModule.bsl index cae5aa340..777d8a038 100644 --- a/SSL/src/CommonCommands/СведенияОПользователе/CommandModule.bsl +++ b/SSL/src/CommonCommands/СведенияОПользователе/CommandModule.bsl @@ -1,6 +1,10 @@ +#Область ОбработчикиСобытий + &НаКлиенте Процедура ОбработкаКоманды(ПараметрКоманды, ПараметрыВыполненияКоманды) ПоказатьЗначение(, ПользователиКлиентСервер.АвторизованныйПользователь()); КонецПроцедуры + +#КонецОбласти \ No newline at end of file diff --git a/SSL/src/CommonCommands/СинхронизацияДанных/CommandModule.bsl b/SSL/src/CommonCommands/СинхронизацияДанных/CommandModule.bsl new file mode 100644 index 000000000..a5544e6c3 --- /dev/null +++ b/SSL/src/CommonCommands/СинхронизацияДанных/CommandModule.bsl @@ -0,0 +1,16 @@ + +#Область ОбработчикиСобытий + +&НаКлиенте +Процедура ОбработкаКоманды(ПараметрКоманды, ПараметрыВыполненияКоманды) + + ПараметрыРаботыКлиента = СтандартныеПодсистемыКлиентПовтИсп.ПараметрыРаботыКлиентаПриЗапуске(); + ИмяОткрываемойФормы = ?(ПараметрыРаботыКлиента.РазделениеВключено, + "ОбщаяФорма.СинхронизацияДанныхВМоделиСервиса", + "ОбщаяФорма.СинхронизацияДанных"); + + ОткрытьФорму(ИмяОткрываемойФормы); + +КонецПроцедуры + +#КонецОбласти diff --git a/SSL/src/CommonCommands/ОткрытьОбменыДанными/ОткрытьОбменыДанными.mdo b/SSL/src/CommonCommands/СинхронизацияДанных/СинхронизацияДанных.mdo similarity index 86% rename from SSL/src/CommonCommands/ОткрытьОбменыДанными/ОткрытьОбменыДанными.mdo rename to SSL/src/CommonCommands/СинхронизацияДанных/СинхронизацияДанных.mdo index e0e0ce9da..ecd553d2c 100644 --- a/SSL/src/CommonCommands/ОткрытьОбменыДанными/ОткрытьОбменыДанными.mdo +++ b/SSL/src/CommonCommands/СинхронизацияДанных/СинхронизацияДанных.mdo @@ -1,6 +1,6 @@ - ОткрытьОбменыДанными + СинхронизацияДанных ru Синхронизация данных diff --git a/SSL/src/CommonCommands/ВыполнитьОбменДанными/CommandModule.bsl b/SSL/src/CommonCommands/Синхронизировать/CommandModule.bsl similarity index 100% rename from SSL/src/CommonCommands/ВыполнитьОбменДанными/CommandModule.bsl rename to SSL/src/CommonCommands/Синхронизировать/CommandModule.bsl diff --git a/SSL/src/CommonCommands/ВыполнитьОбменДанными/ВыполнитьОбменДанными.mdo b/SSL/src/CommonCommands/Синхронизировать/Синхронизировать.mdo similarity index 84% rename from SSL/src/CommonCommands/ВыполнитьОбменДанными/ВыполнитьОбменДанными.mdo rename to SSL/src/CommonCommands/Синхронизировать/Синхронизировать.mdo index b8fe91470..2a549dd42 100644 --- a/SSL/src/CommonCommands/ВыполнитьОбменДанными/ВыполнитьОбменДанными.mdo +++ b/SSL/src/CommonCommands/Синхронизировать/Синхронизировать.mdo @@ -1,11 +1,11 @@ - ВыполнитьОбменДанными + Синхронизировать ru Синхронизировать - CommandGroup.ВыполнениеОбменаДанными + CommandGroup.СинхронизацияДанных PictureAndText ru diff --git a/SSL/src/CommonCommands/ВыполнитьОбменДаннымиИнтерактивно/CommandModule.bsl b/SSL/src/CommonCommands/СинхронизироватьСДополнительнымиПараметрами/CommandModule.bsl similarity index 100% rename from SSL/src/CommonCommands/ВыполнитьОбменДаннымиИнтерактивно/CommandModule.bsl rename to SSL/src/CommonCommands/СинхронизироватьСДополнительнымиПараметрами/CommandModule.bsl diff --git a/SSL/src/CommonCommands/ВыполнитьОбменДаннымиИнтерактивно/ВыполнитьОбменДаннымиИнтерактивно.mdo b/SSL/src/CommonCommands/СинхронизироватьСДополнительнымиПараметрами/СинхронизироватьСДополнительнымиПараметрами.mdo similarity index 82% rename from SSL/src/CommonCommands/ВыполнитьОбменДаннымиИнтерактивно/ВыполнитьОбменДаннымиИнтерактивно.mdo rename to SSL/src/CommonCommands/СинхронизироватьСДополнительнымиПараметрами/СинхронизироватьСДополнительнымиПараметрами.mdo index cdd31092d..2904e4194 100644 --- a/SSL/src/CommonCommands/ВыполнитьОбменДаннымиИнтерактивно/ВыполнитьОбменДаннымиИнтерактивно.mdo +++ b/SSL/src/CommonCommands/СинхронизироватьСДополнительнымиПараметрами/СинхронизироватьСДополнительнымиПараметрами.mdo @@ -1,11 +1,11 @@ - ВыполнитьОбменДаннымиИнтерактивно + СинхронизироватьСДополнительнымиПараметрами ru Синхронизировать с дополнительными параметрами... - CommandGroup.ВыполнениеОбменаДанными + CommandGroup.СинхронизацияДанных PictureAndText ru diff --git a/SSL/src/CommonCommands/ОткрытьОбменыДанными/CommandModule.bsl b/SSL/src/CommonCommands/СменитьПароль/CommandModule.bsl similarity index 72% rename from SSL/src/CommonCommands/ОткрытьОбменыДанными/CommandModule.bsl rename to SSL/src/CommonCommands/СменитьПароль/CommandModule.bsl index 5ec93d687..e88c061c9 100644 --- a/SSL/src/CommonCommands/ОткрытьОбменыДанными/CommandModule.bsl +++ b/SSL/src/CommonCommands/СменитьПароль/CommandModule.bsl @@ -4,7 +4,7 @@ &НаКлиенте Процедура ОбработкаКоманды(ПараметрКоманды, ПараметрыВыполненияКоманды) - ОткрытьФорму("ОбщаяФорма.ОбменыДанными"); + ПользователиСлужебныйКлиент.ОткрытьФормуСменыПароля(); КонецПроцедуры diff --git a/SSL/src/CommonCommands/СменитьПароль/СменитьПароль.mdo b/SSL/src/CommonCommands/СменитьПароль/СменитьПароль.mdo new file mode 100644 index 000000000..1b2d96f52 --- /dev/null +++ b/SSL/src/CommonCommands/СменитьПароль/СменитьПароль.mdo @@ -0,0 +1,10 @@ + + + СменитьПароль + + ru + Сменить пароль + + ActionsPanelTools + Auto + diff --git a/SSL/src/CommonCommands/ПерейтиВЖурналРегистрацииСобытийВыгрузкиДанных/CommandModule.bsl b/SSL/src/CommonCommands/СобытияОтправки/CommandModule.bsl similarity index 100% rename from SSL/src/CommonCommands/ПерейтиВЖурналРегистрацииСобытийВыгрузкиДанных/CommandModule.bsl rename to SSL/src/CommonCommands/СобытияОтправки/CommandModule.bsl diff --git a/SSL/src/CommonCommands/ПерейтиВЖурналРегистрацииСобытийВыгрузкиДанных/ПерейтиВЖурналРегистрацииСобытийВыгрузкиДанных.mdo b/SSL/src/CommonCommands/СобытияОтправки/СобытияОтправки.mdo similarity index 87% rename from SSL/src/CommonCommands/ПерейтиВЖурналРегистрацииСобытийВыгрузкиДанных/ПерейтиВЖурналРегистрацииСобытийВыгрузкиДанных.mdo rename to SSL/src/CommonCommands/СобытияОтправки/СобытияОтправки.mdo index 3e31cec4a..deb37f293 100644 --- a/SSL/src/CommonCommands/ПерейтиВЖурналРегистрацииСобытийВыгрузкиДанных/ПерейтиВЖурналРегистрацииСобытийВыгрузкиДанных.mdo +++ b/SSL/src/CommonCommands/СобытияОтправки/СобытияОтправки.mdo @@ -1,6 +1,6 @@ - ПерейтиВЖурналРегистрацииСобытийВыгрузкиДанных + СобытияОтправки ru События отправки diff --git a/SSL/src/CommonCommands/ПерейтиВЖурналРегистрацииСобытийЗагрузкиДанных/CommandModule.bsl b/SSL/src/CommonCommands/СобытияПолучения/CommandModule.bsl similarity index 100% rename from SSL/src/CommonCommands/ПерейтиВЖурналРегистрацииСобытийЗагрузкиДанных/CommandModule.bsl rename to SSL/src/CommonCommands/СобытияПолучения/CommandModule.bsl diff --git a/SSL/src/CommonCommands/ПерейтиВЖурналРегистрацииСобытийЗагрузкиДанных/ПерейтиВЖурналРегистрацииСобытийЗагрузкиДанных.mdo b/SSL/src/CommonCommands/СобытияПолучения/СобытияПолучения.mdo similarity index 88% rename from SSL/src/CommonCommands/ПерейтиВЖурналРегистрацииСобытийЗагрузкиДанных/ПерейтиВЖурналРегистрацииСобытийЗагрузкиДанных.mdo rename to SSL/src/CommonCommands/СобытияПолучения/СобытияПолучения.mdo index 43c4a6519..86ea1d564 100644 --- a/SSL/src/CommonCommands/ПерейтиВЖурналРегистрацииСобытийЗагрузкиДанных/ПерейтиВЖурналРегистрацииСобытийЗагрузкиДанных.mdo +++ b/SSL/src/CommonCommands/СобытияПолучения/СобытияПолучения.mdo @@ -1,6 +1,6 @@ - ПерейтиВЖурналРегистрацииСобытийЗагрузкиДанных + СобытияПолучения ru События получения diff --git a/SSL/src/CommonCommands/СозданиеНачальногоОбразаСФайлами/CommandModule.bsl b/SSL/src/CommonCommands/СозданиеНачальногоОбразаСФайлами/CommandModule.bsl index aeea029ef..16ac4bb03 100644 --- a/SSL/src/CommonCommands/СозданиеНачальногоОбразаСФайлами/CommandModule.bsl +++ b/SSL/src/CommonCommands/СозданиеНачальногоОбразаСФайлами/CommandModule.bsl @@ -1,6 +1,9 @@ +#Область ОбработчикиСобытий &НаКлиенте Процедура ОбработкаКоманды(ПараметрКоманды, ПараметрыВыполненияКоманды) ПараметрыФормы = Новый Структура("Узел", ПараметрКоманды); ОткрытьФорму("ОбщаяФорма.СозданиеНачальногоОбразаСФайлами", ПараметрыФормы, ПараметрыВыполненияКоманды.Источник, ПараметрыВыполненияКоманды.Уникальность, ПараметрыВыполненияКоманды.Окно); КонецПроцедуры + +#КонецОбласти diff --git a/SSL/src/CommonCommands/СозданиеСвязанныхОбъектов/СозданиеСвязанныхОбъектов.mdo b/SSL/src/CommonCommands/СозданиеСвязанныхОбъектов/СозданиеСвязанныхОбъектов.mdo index 7d44720a8..8ce8ec170 100644 --- a/SSL/src/CommonCommands/СозданиеСвязанныхОбъектов/СозданиеСвязанныхОбъектов.mdo +++ b/SSL/src/CommonCommands/СозданиеСвязанныхОбъектов/СозданиеСвязанныхОбъектов.mdo @@ -6,6 +6,9 @@ Создание связанных объектов... FormCommandBarCreateBasedOn + + DefinedType.ОбъектСДополнительнымиКомандами + Multiple true Auto diff --git a/SSL/src/CommonCommands/СоздатьЗаметкуПоПредмету/СоздатьЗаметкуПоПредмету.mdo b/SSL/src/CommonCommands/СоздатьЗаметкуПоПредмету/СоздатьЗаметкуПоПредмету.mdo index e54f3dd20..23ceff399 100644 --- a/SSL/src/CommonCommands/СоздатьЗаметкуПоПредмету/СоздатьЗаметкуПоПредмету.mdo +++ b/SSL/src/CommonCommands/СоздатьЗаметкуПоПредмету/СоздатьЗаметкуПоПредмету.mdo @@ -6,6 +6,9 @@ Создать заметку CommandGroup.Органайзер + + DefinedType.ПредметЗаметок + Auto CommonPicture.Заметка diff --git a/SSL/src/CommonCommands/СоставОтправляемыхДанных/СоставОтправляемыхДанных.mdo b/SSL/src/CommonCommands/СоставОтправляемыхДанных/СоставОтправляемыхДанных.mdo index 594a88364..653fe21ab 100644 --- a/SSL/src/CommonCommands/СоставОтправляемыхДанных/СоставОтправляемыхДанных.mdo +++ b/SSL/src/CommonCommands/СоставОтправляемыхДанных/СоставОтправляемыхДанных.mdo @@ -5,7 +5,7 @@ ru Состав отправляемых данных - CommandGroup.ПараметрыОбменаДанными + CommandGroup.ПараметрыСинхронизацииДанных Auto StdPicture.InputFieldOpen diff --git a/SSL/src/CommonCommands/ОткрытьСценарииОбменовДанными/CommandModule.bsl b/SSL/src/CommonCommands/СценарииСинхронизации/CommandModule.bsl similarity index 100% rename from SSL/src/CommonCommands/ОткрытьСценарииОбменовДанными/CommandModule.bsl rename to SSL/src/CommonCommands/СценарииСинхронизации/CommandModule.bsl diff --git a/SSL/src/CommonCommands/ОткрытьСценарииОбменовДанными/ОткрытьСценарииОбменовДанными.mdo b/SSL/src/CommonCommands/СценарииСинхронизации/СценарииСинхронизации.mdo similarity index 87% rename from SSL/src/CommonCommands/ОткрытьСценарииОбменовДанными/ОткрытьСценарииОбменовДанными.mdo rename to SSL/src/CommonCommands/СценарииСинхронизации/СценарииСинхронизации.mdo index ec04062f3..1c2b90cfd 100644 --- a/SSL/src/CommonCommands/ОткрытьСценарииОбменовДанными/ОткрытьСценарииОбменовДанными.mdo +++ b/SSL/src/CommonCommands/СценарииСинхронизации/СценарииСинхронизации.mdo @@ -1,6 +1,6 @@ - ОткрытьСценарииОбменовДанными + СценарииСинхронизации ru Сценарии синхронизации diff --git a/SSL/src/CommonCommands/УдалитьНастройкуСинхронизации/УдалитьНастройкуСинхронизации.mdo b/SSL/src/CommonCommands/УдалитьНастройкуСинхронизации/УдалитьНастройкуСинхронизации.mdo index 2dfd7cf69..06122543e 100644 --- a/SSL/src/CommonCommands/УдалитьНастройкуСинхронизации/УдалитьНастройкуСинхронизации.mdo +++ b/SSL/src/CommonCommands/УдалитьНастройкуСинхронизации/УдалитьНастройкуСинхронизации.mdo @@ -5,7 +5,7 @@ ru Удалить настройку синхронизации - CommandGroup.ПараметрыОбменаДанными + CommandGroup.ПараметрыСинхронизацииДанных Auto StdPicture.Delete diff --git a/SSL/src/CommonForms/АвторизацияНаСайтеПоддержкиПользователей/Form.form b/SSL/src/CommonForms/АвторизацияНаСайтеПоддержкиПользователей/Form.form index fb7225e4e..a081be5dc 100644 --- a/SSL/src/CommonForms/АвторизацияНаСайтеПоддержкиПользователей/Form.form +++ b/SSL/src/CommonForms/АвторизацияНаСайтеПоддержкиПользователей/Form.form @@ -103,6 +103,10 @@ ru Пароль для регистрации на сайте фирмы 1С + + OnChange + ПарольПриИзменении + ПарольExtendedTooltip 24 @@ -133,21 +137,59 @@ Normal - - ЗапомнитьПароль - 4 + + ГруппаЗапомнитьПароль + 30 + + ЗапомнитьПароль + 4 + true + true + + true + + + ЗапомнитьПароль + + Right + + ЗапомнитьПарольРасширеннаяПодсказка + 25 + Label + true + true + + Left + + + + ЗапомнитьПарольКонтекстноеМеню + 5 + true + + CheckBoxField + Enter + true + Left + true + + true true true - - ЗапомнитьПароль - - Right + + <key>ru</key> + <value>Группа запомнить пароль</value> + + + ru + Группа запомнить пароль + - ЗапомнитьПарольРасширеннаяПодсказка - 25 + ГруппаЗапомнитьПарольРасширеннаяПодсказка + 31 Label true true @@ -155,17 +197,15 @@ Left - - ЗапомнитьПарольКонтекстноеМеню - 5 - true - - CheckBoxField - Enter - true - Left - true - + UsualGroup + + Vertical + Auto + true + true + Auto + Auto + true true @@ -190,28 +230,66 @@ Vertical Auto - NormalSeparation true true Auto Auto - - ПерейтиКРегистрацииНаСайте - 17 - - <key>ru</key> - <value>Перейти к регистрации на сайте поддержки пользователей</value> - + + ГруппаПерейтиКРегистрацииНаСайте + 32 + + ПерейтиКРегистрацииНаСайте + 17 + + <key>ru</key> + <value>Перейти к регистрации на сайте поддержки пользователей</value> + + true + true + + true + + + ПерейтиКРегистрацииНаСайтеExtendedTooltip + 26 + Label + true + true + + Left + + + + ПерейтиКРегистрацииНаСайтеКонтекстноеМеню + 18 + true + + Label + true + true + + + Click + ПерейтиКРегистрацииНаСайтеНажатие + + true + Left + + true true true + + <key>ru</key> + <value>Группа перейти к регистрации на сайте</value> + - ПерейтиКРегистрацииНаСайтеExtendedTooltip - 26 + ГруппаПерейтиКРегистрацииНаСайтеРасширеннаяПодсказка + 33 Label true true @@ -219,21 +297,15 @@ Left - - ПерейтиКРегистрацииНаСайтеКонтекстноеМеню - 18 - true - - Label - true - true - - - Click - ПерейтиКРегистрацииНаСайтеНажатие - - true - Left + UsualGroup + + Vertical + Auto + NormalSeparation + true + true + Auto + Auto Bottom @@ -392,6 +464,23 @@ true + + ПарольИзменен + + <key>ru</key> + <value>Пароль изменен</value> + + 5 + + Boolean + + + true + + + true + + СохранитьДанныеАутентификацииИПродолжить @@ -411,9 +500,15 @@ <name>СохранитьДанныеАутентификацииИПродолжить</name> </handler> </action> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> + <parameters> + <name>ЗапомнитьПароль</name> + <valueType> + <types>Boolean</types> + </valueType> + </parameters> <commandInterface> <navigationPanel/> <commandBar/> diff --git a/SSL/src/CommonForms/АвторизацияНаСайтеПоддержкиПользователей/Module.bsl b/SSL/src/CommonForms/АвторизацияНаСайтеПоддержкиПользователей/Module.bsl index 2ea3f4449..233ac2bee 100644 --- a/SSL/src/CommonForms/АвторизацияНаСайтеПоддержкиПользователей/Module.bsl +++ b/SSL/src/CommonForms/АвторизацияНаСайтеПоддержкиПользователей/Module.bsl @@ -1,4 +1,3 @@ - #Область ОбработчикиСобытийФормы &НаСервере @@ -11,10 +10,18 @@ Аутентификация = СтандартныеПодсистемыСервер.ПараметрыАутентификацииНаСайте(); Если Аутентификация <> Неопределено Тогда Логин = Аутентификация.Логин; - Пароль = Аутентификация.Пароль; + Если ЗначениеЗаполнено(Аутентификация.Пароль) Тогда + Пароль = ЭтотОбъект.УникальныйИдентификатор; + КонецЕсли; КонецЕсли; - ЗапомнитьПароль = Не ПустаяСтрока(Пароль); + Если Параметры.ЗапомнитьПароль Тогда + Элементы.ЗапомнитьПароль.Видимость = Ложь; + ЗапомнитьПароль = Истина; + Иначе + ЗапомнитьПароль = Не ПустаяСтрока(Пароль); + КонецЕсли; + КонецПроцедуры #КонецОбласти @@ -28,6 +35,11 @@ КонецПроцедуры +&НаКлиенте +Процедура ПарольПриИзменении(Элемент) + ПарольИзменен = Истина; +КонецПроцедуры + #КонецОбласти #Область ОбработчикиКомандФормы @@ -36,19 +48,26 @@ Процедура СохранитьДанныеАутентификацииИПродолжить() Если ПустаяСтрока(Логин) И Не ПустаяСтрока(Пароль) Тогда - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(НСтр("ru = 'Введите код пользователя для авторизации на сайте фирмы 1С.'"),, "Логин"); + ОбщегоНазначенияКлиентСервер.СообщитьПользователю(НСтр("ru = 'Введите код пользователя для авторизации на сайте фирмы ""1С"".'"),, "Логин"); Возврат; КонецЕсли; Если ПустаяСтрока(Логин) Тогда - СохранитьДанныеАутентификации(Неопределено); + СохранитьДанныеАутентификации(Неопределено, Ложь, Ложь); Результат = КодВозвратаДиалога.Отмена; Иначе - СохранитьДанныеАутентификации(Новый Структура("Логин,Пароль", Логин, ?(ЗапомнитьПароль, Пароль, ""))); - Результат = Новый Структура("Логин,Пароль", Логин, Пароль); + ОписаниеОшибки = ""; + ЛогинИПароль = Новый Структура("Логин,Пароль", Логин, Пароль); + СохранитьДанныеАутентификации(ЛогинИПароль, ПарольИзменен, ЗапомнитьПароль, ОписаниеОшибки); + + Если НЕ ПустаяСтрока(ОписаниеОшибки) Тогда + ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ОписаниеОшибки,, "Логин"); + Возврат; + КонецЕсли; + Результат = Новый Структура("Логин,Пароль", ЛогинИПароль.Логин, ЛогинИПароль.Пароль); КонецЕсли; - Закрыть(Результат); + КонецПроцедуры #КонецОбласти @@ -56,10 +75,76 @@ #Область СлужебныеПроцедурыИФункции &НаСервереБезКонтекста -Процедура СохранитьДанныеАутентификации(Знач Аутентификация) +Процедура СохранитьДанныеАутентификации(Аутентификация, ПарольИзменен, ЗапомнитьПароль, ОписаниеОшибки = "") - СтандартныеПодсистемыСервер.СохранитьПараметрыАутентификацииНаСайте(Аутентификация); + Если Аутентификация = Неопределено Тогда + СтандартныеПодсистемыСервер.СохранитьПараметрыАутентификацииНаСайте(Аутентификация); + Возврат; + КонецЕсли; + + Если НЕ ПарольИзменен Тогда + ПредыдущаяАутентификация = СтандартныеПодсистемыСервер.ПараметрыАутентификацииНаСайте(); + Если ПредыдущаяАутентификация <> Неопределено Тогда + Аутентификация.Пароль = ПредыдущаяАутентификация.Пароль; + КонецЕсли; + КонецЕсли; + + Если ЗапомнитьПароль Тогда + Если ПараметрыАутентификацииКорректные(Аутентификация, ОписаниеОшибки) Тогда + СтандартныеПодсистемыСервер.СохранитьПараметрыАутентификацииНаСайте(Аутентификация); + КонецЕсли; + Иначе + АутентификацияДляСохранения = Новый Структура("Логин, Пароль", Аутентификация.Логин, Неопределено); + СтандартныеПодсистемыСервер.СохранитьПараметрыАутентификацииНаСайте(АутентификацияДляСохранения); + КонецЕсли; КонецПроцедуры +&НаСервереБезКонтекста +Функция ПараметрыАутентификацииКорректные(ПараметрыАутентификацииНаСайте, ОписаниеОшибки = "") + + Если ПараметрыАутентификацииНаСайте = Неопределено Тогда + Возврат Истина; + КонецЕсли; + + Билет = ""; + Попытка + ВебСервис = ОбщегоНазначения.WSПрокси( + "https://login.1c.ru/api/public/ticket?wsdl", + "http://api.cas.jasig.org/", + "TicketApiImplService", + "TicketApiImplPort", + ПараметрыАутентификацииНаСайте.Логин, + ПараметрыАутентификацииНаСайте.Пароль, + 5, + Ложь); + + Билет = ВебСервис.getTicket( + ПараметрыАутентификацииНаСайте.Логин, + ПараметрыАутентификацииНаСайте.Пароль, + "its.1c.ru"); + Исключение + ИнформацияОбОшибке = ИнформацияОбОшибке(); + КраткоеПредставлениеОшибки = КраткоеПредставлениеОшибки(ИнформацияОбОшибке); + Если СтрНайти(КраткоеПредставлениеОшибки, "IncorrectLoginOrPasswordApiException") > 0 Тогда + ОписаниеОшибки = НСтр("ru = 'Не удалось подключиться к веб-сервису сайта «1С» по причине: + |• Некорректное имя пользователя или пароль.'"); + Иначе + ОписаниеОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Не удалось подключиться к веб-сервису сайта «1С». Возможные причины: + |• Некорректно введен или не введен логин и пароль; + |• Нет подключения к Интернету; + |• На веб-узле возникли неполадки; + |• Брандмауэр или другое промежуточное ПО (антивирусы и т.п.) блокируют попытки программы подключиться к Интернету; + |• Подключение к Интернету выполняется через прокси-сервер, но его параметры не заданы в программе. + | Техническая информация: %1'"), + КраткоеПредставлениеОшибки); + КонецЕсли; + КонецПопытки; + + Возврат ЗначениеЗаполнено(Билет); + +КонецФункции + + #КонецОбласти diff --git a/SSL/src/CommonForms/АдреснаяКнига/Form.form b/SSL/src/CommonForms/АдреснаяКнига/Form.form index c73d8e612..7e703562f 100644 --- a/SSL/src/CommonForms/АдреснаяКнига/Form.form +++ b/SSL/src/CommonForms/АдреснаяКнига/Form.form @@ -2568,7 +2568,6 @@ <autoFillCheck>true</autoFillCheck> <allowFormCustomize>true</allowFormCustomize> <enabled>true</enabled> - <verticalScroll>UseIfNecessary</verticalScroll> <showTitle>auto</showTitle> <showCloseButton>true</showCloseButton> <attributes> @@ -2808,7 +2807,7 @@ <common>true</common> </edit> <notDefaultUseAlwaysAttributes xsi:type="form:DataPath"> - <segments>СписокПользователей.IsFolder</segments> + <segments>СписокПользователей.Description</segments> </notDefaultUseAlwaysAttributes> <extInfo xsi:type="form:DynamicListExtInfo"> <queryText>ВЫБРАТЬ @@ -2826,6 +2825,7 @@ ГДЕ Пользователи.Служебный = ЛОЖЬ И Пользователи.ПометкаУдаления = ЛОЖЬ + И Пользователи.Недействителен = ЛОЖЬ И ИСТИНА В (ВЫБРАТЬ ИСТИНА @@ -2833,7 +2833,8 @@ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ГДЕ СоставыГруппПользователей.Пользователь = Пользователи.Ссылка - И СоставыГруппПользователей.ГруппаПользователей = &ГруппаПользователей)</queryText> + И СоставыГруппПользователей.ГруппаПользователей = &ГруппаПользователей) +</queryText> <mainTable>Catalog.Пользователи</mainTable> <dynamicDataRead>true</dynamicDataRead> <autoFillAvailableFields>true</autoFillAvailableFields> @@ -3150,7 +3151,7 @@ </handler> </action> <representation>TextPicture</representation> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <formCommands> @@ -3176,7 +3177,7 @@ </handler> </action> <representation>TextPicture</representation> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <formCommands> @@ -3202,7 +3203,7 @@ </handler> </action> <representation>TextPicture</representation> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <formCommands> @@ -3228,7 +3229,7 @@ </handler> </action> <representation>TextPicture</representation> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <formCommands> @@ -3254,7 +3255,7 @@ </handler> </action> <representation>TextPicture</representation> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <formCommands> @@ -3276,7 +3277,7 @@ <name>ИзменитьГруппуКомуВыполнить</name> </handler> </action> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <formCommands> @@ -3298,7 +3299,7 @@ <name>ИзменитьГруппуКопииВыполнить</name> </handler> </action> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <formCommands> @@ -3320,7 +3321,7 @@ <name>ИзменитьГруппуСкрытыеВыполнить</name> </handler> </action> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <formCommands> @@ -3345,7 +3346,7 @@ <name>НайтиВСпискеИзСпискаПолучателейВыполнить</name> </handler> </action> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <formCommands> @@ -3367,7 +3368,7 @@ <name>НайтиПоАдресуВыполнить</name> </handler> </action> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <formCommands> @@ -3389,7 +3390,7 @@ <name>НайтиПоПредставлениюВыполнить</name> </handler> </action> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <formCommands> @@ -3411,7 +3412,7 @@ <name>УстановитьАдресКонтактаВыполнить</name> </handler> </action> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <formCommands> @@ -3436,7 +3437,7 @@ <name>НайтиВСпискеИзСпискаНайденныхВыполнить</name> </handler> </action> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <formCommands> @@ -3459,7 +3460,7 @@ </handler> </action> <representation>Text</representation> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <formCommands> @@ -3482,7 +3483,7 @@ </handler> </action> <representation>Text</representation> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <formCommands> @@ -3504,7 +3505,7 @@ <name>ПереместитьИзСпискаВВыбранное</name> </handler> </action> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <parameters> diff --git a/SSL/src/CommonForms/АдреснаяКнига/Module.bsl b/SSL/src/CommonForms/АдреснаяКнига/Module.bsl index f0581d5f9..de7f4ba4d 100644 --- a/SSL/src/CommonForms/АдреснаяКнига/Module.bsl +++ b/SSL/src/CommonForms/АдреснаяКнига/Module.bsl @@ -88,7 +88,7 @@ Если НЕ ПустаяСтрока(ТекущиеДанные.СписокАдресов) Тогда Элементы.Адрес.СписокВыбора.ЗагрузитьЗначения( - СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(ТекущиеДанные.СписокАдресов,";")); + СтрРазделить(ТекущиеДанные.СписокАдресов,";")); КонецЕсли; КонецЕсли; @@ -116,7 +116,7 @@ КонецЕсли; Адрес = Результат.Адреса[0]; - СписокАдресов = СтроковыеФункцииКлиентСервер.СтрокаИзМассиваПодстрок(Результат.Адреса.ВыгрузитьЗначения(), ";"); + СписокАдресов = СтрСоединить(Результат.Адреса.ВыгрузитьЗначения(), ";"); ДобавитьПолучателя(Адрес, Результат.Наименование, ВыбраннаяСтрока, СписокАдресов); @@ -140,7 +140,7 @@ Результат = ВзаимодействияВызовСервера.ПолучитьНаименованиеИАдресаЭлектроннойПочтыКонтакта(ТекущиеДанные.Ссылка); Если Результат <> Неопределено И Результат.Адреса.Количество() > 0 Тогда - СписокАдресов = СтроковыеФункцииКлиентСервер.СтрокаИзМассиваПодстрок(Результат.Адреса.ВыгрузитьЗначения(), ";"); + СписокАдресов = СтрСоединить(Результат.Адреса.ВыгрузитьЗначения(), ";"); Иначе СписокАдресов = ""; КонецЕсли; @@ -169,13 +169,19 @@ Результат = Новый Массив; Для Каждого СтрокаТаблицы Из ПолучателиПисьма Цикл + Если ПустаяСтрока(СтрокаТаблицы.Адрес) Тогда Продолжить; КонецЕсли; Группа = ?(ПустаяСтрока(СтрокаТаблицы.Группа), "Кому", СтрокаТаблицы.Группа); - Контакт = Новый Структура("Адрес, Представление, Контакт, Группа", - СтрокаТаблицы.Адрес, СтрокаТаблицы.Представление, СтрокаТаблицы.Контакт, Группа); + + Контакт = Новый Структура; + Контакт.Вставить("Адрес", СтрокаТаблицы.Адрес); + Контакт.Вставить("Представление", СтрокаТаблицы.Представление); + Контакт.Вставить("Контакт", СтрокаТаблицы.Контакт); + Контакт.Вставить("Группа", Группа); Результат.Добавить(Контакт); + КонецЦикла; ОповеститьОВыборе(Результат); @@ -583,7 +589,7 @@ Результат = ВзаимодействияВызовСервера.ПолучитьНаименованиеИАдресаЭлектроннойПочтыКонтакта(ТекущиеДанные.Ссылка); Если Результат <> Неопределено И Результат.Адреса.Количество() > 0 Тогда - СписокАдресов = СтроковыеФункцииКлиентСервер.СтрокаИзМассиваПодстрок(Результат.Адреса.ВыгрузитьЗначения(), ";"); + СписокАдресов = СтрСоединить(Результат.Адреса.ВыгрузитьЗначения(), ";"); Иначе СписокАдресов = ""; КонецЕсли; @@ -654,11 +660,11 @@ &НаКлиенте Процедура УправлениеСтраницами() - Если Элементы.СтраницыСписки.ТекущаяСтраница = Элементы.СтраницаВсеКонтактыПоПредмету ИЛИ - Элементы.СтраницыСписки.ТекущаяСтраница = Элементы.СтраницаПоискКонтактов ИЛИ - Элементы.СтраницыСписки.ТекущаяСтраница.ПодчиненныеЭлементы.Количество() = 1 ИЛИ - (Элементы.СтраницыСписки.ТекущаяСтраница = Элементы.СтраницаПользователей И - (НЕ ИспользоватьГруппыПользователей))Тогда + Если Элементы.СтраницыСписки.ТекущаяСтраница = Элементы.СтраницаВсеКонтактыПоПредмету + ИЛИ Элементы.СтраницыСписки.ТекущаяСтраница = Элементы.СтраницаПоискКонтактов + ИЛИ Элементы.СтраницыСписки.ТекущаяСтраница.ПодчиненныеЭлементы.Количество() = 1 + ИЛИ (Элементы.СтраницыСписки.ТекущаяСтраница = Элементы.СтраницаПользователей + И (НЕ ИспользоватьГруппыПользователей))Тогда Элементы.СтраницыПереместить.ТекущаяСтраница = Элементы.СтраницаПереместитьОднаТаблица; @@ -687,7 +693,7 @@ &НаКлиенте Процедура УстановитьАдресИПредставлениеВыбранногоКонтакта(ТекущиеДанные, Представление, Адрес) - Позиция = Найти(Представление, "<"); + Позиция = СтрНайти(Представление, "<"); Представление = ?(Позиция= 0, "", СокрЛП(Лев(Представление, Позиция-1))); ТекущиеДанные.Адрес = Адрес; diff --git a/SSL/src/CommonForms/АутентификацияВСервисе/Form.form b/SSL/src/CommonForms/АутентификацияВСервисе/Form.form index 04b60c719..b68de59f9 100644 --- a/SSL/src/CommonForms/АутентификацияВСервисе/Form.form +++ b/SSL/src/CommonForms/АутентификацияВСервисе/Form.form @@ -223,7 +223,6 @@ <autoFillCheck>true</autoFillCheck> <allowFormCustomize>true</allowFormCustomize> <enabled>true</enabled> - <verticalScroll>UseIfNecessary</verticalScroll> <showTitle>auto</showTitle> <showCloseButton>true</showCloseButton> <attributes> @@ -278,7 +277,7 @@ <name>ОК</name> </handler> </action> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <formCommands> @@ -300,7 +299,7 @@ <name>Отмена</name> </handler> </action> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <commandInterface> diff --git a/SSL/src/CommonForms/АутентификацияВСервисе/Module.bsl b/SSL/src/CommonForms/АутентификацияВСервисе/Module.bsl index 32a2436cb..1ea67373f 100644 --- a/SSL/src/CommonForms/АутентификацияВСервисе/Module.bsl +++ b/SSL/src/CommonForms/АутентификацияВСервисе/Module.bsl @@ -24,7 +24,7 @@ Процедура ОК(Команда) ПарольПользователяСервиса = Пароль; - Закрыть(); + Закрыть(ПарольПользователяСервиса); КонецПроцедуры diff --git a/SSL/src/CommonForms/ВводЗначенийСпискомСФлажками/Form.form b/SSL/src/CommonForms/ВводЗначенийСпискомСФлажками/Form.form index d128c3ebd..3b89061d0 100644 --- a/SSL/src/CommonForms/ВводЗначенийСпискомСФлажками/Form.form +++ b/SSL/src/CommonForms/ВводЗначенийСпискомСФлажками/Form.form @@ -1,9 +1,5 @@ <?xml version="1.0" encoding="UTF-8"?> <form:Form xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:core="http://g5.1c.ru/v8/dt/mcore" xmlns:form="http://g5.1c.ru/v8/dt/form"> - <title> - <key>ru</key> - <value>Выбранные объекты</value> - Список 1 @@ -1209,24 +1205,6 @@ true - - ПредставлениеПоля - - <key>ru</key> - <value>Представление поля</value> - - 3 - - String - - - - true - - - true - - ЗавершитьРедактирование @@ -1246,7 +1224,7 @@ <name>ЗавершитьРедактирование</name> </handler> </action> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <formCommands> @@ -1271,7 +1249,7 @@ <name>ВставитьИзБуфераОбмена</name> </handler> </action> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <commandInterface> diff --git a/SSL/src/CommonForms/ВводЗначенийСпискомСФлажками/Help/ru.html b/SSL/src/CommonForms/ВводЗначенийСпискомСФлажками/Help/ru.html index 4e69509d9..c393037bf 100644 --- a/SSL/src/CommonForms/ВводЗначенийСпискомСФлажками/Help/ru.html +++ b/SSL/src/CommonForms/ВводЗначенийСпискомСФлажками/Help/ru.html @@ -1,6 +1,6 @@ <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"><html><head><meta content="text/html; charset=utf-8" http-equiv="Content-Type"></meta><link rel="stylesheet" type="text/css" href="v8help://service_book/service_style"></link><meta name="GENERATOR" content="MSHTML 9.00.8112.16421"></meta></head><body> <p>Предназначен для ввода нескольких значений в список для отбора.</p> -<p>Открывается из вкладки <strong>Отборы</strong> окна <a href="SettingsStorage.ХранилищеВариантовОтчетов.Form.НастройкиОтчета/Help">Настройки отчета</a> по двойному щелчку мыши в столбце <strong>Значение</strong> для операций <strong>В списке</strong>, <strong>Не в списке</strong>, <strong>В группе из списка</strong>, <strong>Не в группе из списка</strong>.</p> +<p>Открывается из вкладки <strong>Отборы</strong> окна <a href="CommonForm.ФормаНастроекОтчета/Help">Настройки отчета</a> по двойному щелчку мыши в столбце <strong>Значение</strong> для операций <strong>В списке</strong>, <strong>Не в списке</strong>, <strong>В группе из списка</strong>, <strong>Не в группе из списка</strong>.</p> <h3>Подбор значений</h3> <ul><li> <div>Для добавления нескольких значений в список нажмите кнопку <strong>Подбор</strong>. Выберите несколько значений из соответствующего списка. </div> diff --git a/SSL/src/CommonForms/ВводЗначенийСпискомСФлажками/Module.bsl b/SSL/src/CommonForms/ВводЗначенийСпискомСФлажками/Module.bsl index 8005b1abf..3ae6c66e2 100644 --- a/SSL/src/CommonForms/ВводЗначенийСпискомСФлажками/Module.bsl +++ b/SSL/src/CommonForms/ВводЗначенийСпискомСФлажками/Module.bsl @@ -12,13 +12,15 @@ Возврат; КонецЕсли; - Параметры.Свойство("Представление", ПредставлениеПоля); Параметры.Свойство("ОграничиватьВыборУказаннымиЗначениями", ОграничиватьВыборУказаннымиЗначениями); ИнформацияОТипах = ОтчетыКлиентСервер.АнализТипов(Параметры.ОписаниеТипов, Истина); ЗначенияДляВыбора = ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(Параметры, "ЗначенияДляВыбора"); Отмеченные = ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(Параметры, "Отмеченные"); - Заголовок = НСтр("ru = 'Список выбранных'") + " (" + ПредставлениеПоля + ")"; + Заголовок = ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(Параметры, "Представление"); + Если ПустаяСтрока(Заголовок) Тогда + Заголовок = Строка(Параметры.ОписаниеТипов); + КонецЕсли; Если ИнформацияОТипах.КоличествоТипов = 0 Тогда ОграничиватьВыборУказаннымиЗначениями = Истина; @@ -31,11 +33,11 @@ Список.ТипЗначения = ИнформацияОТипах.ОписаниеТиповДляФормы; Если ТипЗнч(ЗначенияДляВыбора) = Тип("СписокЗначений") Тогда ЗначенияДляВыбора.ЗаполнитьПометки(Ложь); - ОтчетыКлиентСервер.ДополнитьСписок(Список, ЗначенияДляВыбора, Истина); + ОтчетыКлиентСервер.ДополнитьСписок(Список, ЗначенияДляВыбора, Истина, Истина); КонецЕсли; Если ТипЗнч(Отмеченные) = Тип("СписокЗначений") Тогда Отмеченные.ЗаполнитьПометки(Истина); - ОтчетыКлиентСервер.ДополнитьСписок(Список, Отмеченные, Истина); + ОтчетыКлиентСервер.ДополнитьСписок(Список, Отмеченные, Истина, Истина); КонецЕсли; Если ОграничиватьВыборУказаннымиЗначениями Тогда @@ -170,14 +172,27 @@ &НаКлиенте Процедура СписокОбработкаВыбора(Элемент, РезультатВыбора, СтандартнаяОбработка) СтандартнаяОбработка = Ложь; - // Добавление выбранных элементов с контролем уникальности. - Если ТипЗнч(РезультатВыбора) = Тип("Массив") Тогда - Для Каждого Значение Из РезультатВыбора Цикл - ОтчетыКлиентСервер.ДобавитьУникальноеЗначениеВСписок(Список, Значение, Неопределено, Истина); - КонецЦикла; - Иначе - ОтчетыКлиентСервер.ДобавитьУникальноеЗначениеВСписок(Список, РезультатВыбора, Неопределено, Истина); + + Выбранные = ОтчетыКлиентСервер.ЗначенияСписком(РезультатВыбора); + Выбранные.ЗаполнитьПометки(Истина); + + Дополнение = ОтчетыКлиентСервер.ДополнитьСписок(Список, Выбранные, Истина, Истина); + + Если Дополнение.Всего = 0 Тогда + Возврат; КонецЕсли; + Результат = Новый Структура; + Если Дополнение.Всего = 1 Тогда + ЗаголовокОповещения = НСтр("ru = 'Элемент добавлен в список'"); + Иначе + ЗаголовокОповещения = НСтр("ru = 'Элементы добавлены в список'"); + КонецЕсли; + СтандартныеПодсистемыКлиентСервер.ВывестиОповещение( + Результат, + ЗаголовокОповещения, + Строка(Выбранные), + БиблиотекаКартинок.ВыполнитьЗадачу); + СтандартныеПодсистемыКлиент.ПоказатьРезультатВыполнения(ЭтотОбъект, Результат); КонецПроцедуры #КонецОбласти @@ -203,7 +218,7 @@ ПараметрыПоиска = Новый Структура; ПараметрыПоиска.Вставить("ОписаниеТипов", Список.ТипЗначения); ПараметрыПоиска.Вставить("ПараметрыВыбора", Элементы.СписокЗначение.ПараметрыВыбора); - ПараметрыПоиска.Вставить("ПредставлениеПоля", ПредставлениеПоля); + ПараметрыПоиска.Вставить("ПредставлениеПоля", Заголовок); ПараметрыПоиска.Вставить("Сценарий", "ПоискСсылок"); ПараметрыВыполнения = Новый Структура; diff --git a/SSL/src/CommonForms/ВключениеПроверкиКонтрагентов/Form.form b/SSL/src/CommonForms/ВключениеПроверкиКонтрагентов/Form.form index c0bf97023..e22109332 100644 --- a/SSL/src/CommonForms/ВключениеПроверкиКонтрагентов/Form.form +++ b/SSL/src/CommonForms/ВключениеПроверкиКонтрагентов/Form.form @@ -328,7 +328,7 @@ <name>ВключитьСервисСейчас</name> </handler> </action> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <formCommands> @@ -350,7 +350,7 @@ <name>БольшеНеПоказывать</name> </handler> </action> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <formCommands> @@ -372,7 +372,7 @@ <name>НапомнитьПозже</name> </handler> </action> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <commandInterface> diff --git a/SSL/src/CommonForms/ВключениеПроверкиКонтрагентов/ВключениеПроверкиКонтрагентов.mdo b/SSL/src/CommonForms/ВключениеПроверкиКонтрагентов/ВключениеПроверкиКонтрагентов.mdo index 6e721012b..215640746 100644 --- a/SSL/src/CommonForms/ВключениеПроверкиКонтрагентов/ВключениеПроверкиКонтрагентов.mdo +++ b/SSL/src/CommonForms/ВключениеПроверкиКонтрагентов/ВключениеПроверкиКонтрагентов.mdo @@ -3,7 +3,7 @@ <name>ВключениеПроверкиКонтрагентов</name> <synonym> <key>ru</key> - <value>Включение сервиса проверки существования контрагентов</value> + <value>Включение проверки контрагентов</value> </synonym> <usePurposes>PersonalComputer</usePurposes> <usePurposes>MobileDevice</usePurposes> diff --git a/SSL/src/CommonForms/Вопрос/Form.form b/SSL/src/CommonForms/Вопрос/Form.form index 5334f9ed2..d5e01af4e 100644 --- a/SSL/src/CommonForms/Вопрос/Form.form +++ b/SSL/src/CommonForms/Вопрос/Form.form @@ -113,13 +113,15 @@ <showInFooter>true</showInFooter> <extInfo xsi:type="form:InputFieldExtInfo"> <autoMaxWidth>true</autoMaxWidth> - <height>10</height> <autoMaxHeight>true</autoMaxHeight> <wrap>true</wrap> <multiLine>true</multiLine> <chooseType>true</chooseType> <typeDomainEnabled>true</typeDomainEnabled> <textEdit>true</textEdit> + <borderColor xsi:type="core:ColorRef"> + <color>Style.FormBackColor</color> + </borderColor> <textSize>Normal</textSize> </extInfo> </items> @@ -170,6 +172,7 @@ <key>ru</key> <value>Строки</value> </toolTip> + <width>35</width> <extendedTooltip> <name>СтрокиExtendedTooltip</name> <id>19</id> @@ -282,11 +285,8 @@ <windowOpeningMode>LockOwner</windowOpeningMode> <enterKeyBehavior>DefaultButton</enterKeyBehavior> <saveWindowSettings>true</saveWindowSettings> - <autoUrl>true</autoUrl> <group>Vertical</group> - <autoFillCheck>true</autoFillCheck> <enabled>true</enabled> - <verticalScroll>UseIfNecessary</verticalScroll> <showTitle>auto</showTitle> <showCloseButton>true</showCloseButton> <attributes> diff --git a/SSL/src/CommonForms/Вопрос/Module.bsl b/SSL/src/CommonForms/Вопрос/Module.bsl index 3825211c0..b1c5c0e0c 100644 --- a/SSL/src/CommonForms/Вопрос/Module.bsl +++ b/SSL/src/CommonForms/Вопрос/Module.bsl @@ -3,7 +3,6 @@ &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) - Если Параметры.Свойство("АвтоТест") Тогда Возврат; КонецЕсли; @@ -14,6 +13,8 @@ ШиринаЗаголовка = 1.3 * СтрДлина(Заголовок); Если ШиринаЗаголовка > 40 И ШиринаЗаголовка < 80 Тогда Ширина = ШиринаЗаголовка; + ИначеЕсли ШиринаЗаголовка >= 80 Тогда + Ширина = 80; КонецЕсли; КонецЕсли; @@ -21,20 +22,34 @@ РежимОткрытияОкна = РежимОткрытияОкнаФормы.БлокироватьВесьИнтерфейс; КонецЕсли; - // Картинка + // Картинка. Если Параметры.Картинка.Вид <> ВидКартинки.Пустая Тогда Элементы.Предупреждение.Картинка = Параметры.Картинка; + Иначе + // В этом случае можно скрыть картинку. + // Но для обратной совместимости реализован параметр ПоказыватьКартинку. + // Например, кто-то из потребителей мог открывать форму напрямую со своими параметрами, + // в обход API БФ, в частности СтандартныеПодсистемыКлиент.ПоказатьВопросПользователю. + ПоказыватьКартинку = ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(Параметры, "ПоказыватьКартинку", Истина); + Если Не ПоказыватьКартинку Тогда + Элементы.Предупреждение.Видимость = Ложь; + КонецЕсли; КонецЕсли; // Размещение текста. - Если СтрЧислоСтрок(Параметры.ТекстСообщения) < 15 Тогда - // Можно вывести все строки в виде надписи. - Элементы.ТекстСообщения.Заголовок = Параметры.ТекстСообщения; - Элементы.МногострочныйТекстСообщения.Видимость = Ложь; - Иначе - // Многострочный режим. + МногострочныйРежим = СтрЧислоСтрок(Параметры.ТекстСообщения) > 15 + Или ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(Параметры, "МожноКопировать", Ложь); + Если МногострочныйРежим Тогда Элементы.ТекстСообщения.Видимость = Ложь; ТекстСообщения = Параметры.ТекстСообщения; + Если ТекущийВариантИнтерфейсаКлиентскогоПриложения() = ВариантИнтерфейсаКлиентскогоПриложения.Версия8_2 Тогда + Элементы.МногострочныйТекстСообщения.ЦветРамки = Новый Цвет; // Для платформы (при изменении цвета рамки появляется белый контур). + КонецЕсли; + ПримернаяВысотаПоля = СтандартныеПодсистемыКлиентСервер.ЧислоСтрок(Параметры.ТекстСообщения, Элементы.Строки.Ширина); + Элементы.Строки.Высота = Мин(ПримернаяВысотаПоля, 10); + Иначе // Вывод в виде надписи. + Элементы.МногострочныйТекстСообщения.Видимость = Ложь; + Элементы.ТекстСообщения.Заголовок = Параметры.ТекстСообщения; КонецЕсли; // Размещение флажка. @@ -48,7 +63,8 @@ ДобавитьКомандыИКнопкиНаФорму(Параметры.Кнопки); // Установка кнопки по умолчанию. - УстановитьКнопкуПоУмолчанию(Параметры.КнопкаПоУмолчанию); + ВыделятьКнопкуПоУмолчанию = ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(Параметры, "ВыделятьКнопкуПоУмолчанию", Истина); + УстановитьКнопкуПоУмолчанию(Параметры.КнопкаПоУмолчанию, ВыделятьКнопкуПоУмолчанию); // Установка кнопки для обратного отсчета. УстановитьКнопкуОжидания(Параметры.КнопкаТаймаута); @@ -105,9 +121,7 @@ НовыйЗаголовок = ( ОжиданиеЗаголовокКнопки + " (" - + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'осталось %1 сек.'"), - Строка(ОжиданиеСчетчик)) + + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'осталось %1 сек.'"), Строка(ОжиданиеСчетчик)) + ")"); Элементы[ОжиданиеИмяКнопки].Заголовок = НовыйЗаголовок; @@ -192,19 +206,26 @@ КонецПроцедуры &НаСервере -Процедура УстановитьКнопкуПоУмолчанию(КнопкаПоУмолчанию) +Процедура УстановитьКнопкуПоУмолчанию(КнопкаПоУмолчанию, ВыделятьКнопкуПоУмолчанию) Если СоответствиеКнопокИВозвращаемыхЗначений.Количество() = 0 Тогда Возврат; КонецЕсли; + Кнопка = Неопределено; Для Каждого Элемент Из СоответствиеКнопокИВозвращаемыхЗначений Цикл Если Элемент.Значение = КнопкаПоУмолчанию Тогда - Элементы[Элемент.Ключ].КнопкаПоУмолчанию = Истина; - Возврат; + Кнопка = Элементы[Элемент.Ключ]; + Прервать; КонецЕсли; КонецЦикла; - Элементы.КоманднаяПанель.ПодчиненныеЭлементы[0].КнопкаПоУмолчанию = Истина; + Если Кнопка = Неопределено Тогда + Кнопка = Элементы.КоманднаяПанель.ПодчиненныеЭлементы[0]; + КонецЕсли; + Если ВыделятьКнопкуПоУмолчанию Тогда + Кнопка.КнопкаПоУмолчанию = Истина; + КонецЕсли; + ТекущийЭлемент = Кнопка; КонецПроцедуры &НаСервере diff --git a/SSL/src/CommonForms/ВопросОбУстановкеРасширенияРаботыСКриптографией/Form.form b/SSL/src/CommonForms/ВопросОбУстановкеРасширенияРаботыСКриптографией/Form.form index 71f5c727c..1811d2c3c 100644 --- a/SSL/src/CommonForms/ВопросОбУстановкеРасширенияРаботыСКриптографией/Form.form +++ b/SSL/src/CommonForms/ВопросОбУстановкеРасширенияРаботыСКриптографией/Form.form @@ -125,7 +125,6 @@ <group>Vertical</group> <autoFillCheck>true</autoFillCheck> <enabled>true</enabled> - <verticalScroll>UseIfNecessary</verticalScroll> <showTitle>auto</showTitle> <showCloseButton>true</showCloseButton> <attributes> @@ -165,7 +164,7 @@ <name>УстановитьИПродолжить</name> </handler> </action> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <formCommands> @@ -187,7 +186,7 @@ <name>Отмена</name> </handler> </action> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <parameters> diff --git a/SSL/src/CommonForms/ВопросОбУстановкеРасширенияРаботыСФайлами/Form.form b/SSL/src/CommonForms/ВопросОбУстановкеРасширенияРаботыСФайлами/Form.form index 0f148849c..6cabe1a25 100644 --- a/SSL/src/CommonForms/ВопросОбУстановкеРасширенияРаботыСФайлами/Form.form +++ b/SSL/src/CommonForms/ВопросОбУстановкеРасширенияРаботыСФайлами/Form.form @@ -154,7 +154,6 @@ <group>Vertical</group> <autoFillCheck>true</autoFillCheck> <enabled>true</enabled> - <verticalScroll>UseIfNecessary</verticalScroll> <showTitle>auto</showTitle> <showCloseButton>true</showCloseButton> <attributes> @@ -194,7 +193,7 @@ <name>УстановитьИПродолжить</name> </handler> </action> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <formCommands> @@ -216,7 +215,7 @@ <name>ПродолжитьБезУстановки</name> </handler> </action> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <formCommands> @@ -238,7 +237,7 @@ <name>БольшеНеНапоминать</name> </handler> </action> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <parameters> diff --git a/SSL/src/CommonForms/ВосстановлениеСвязиСГлавнымУзлом/Form.form b/SSL/src/CommonForms/ВосстановлениеСвязиСГлавнымУзлом/Form.form index 60ab5cbe3..253568e1d 100644 --- a/SSL/src/CommonForms/ВосстановлениеСвязиСГлавнымУзлом/Form.form +++ b/SSL/src/CommonForms/ВосстановлениеСвязиСГлавнымУзлом/Form.form @@ -330,7 +330,7 @@ <name>Восстановить</name> </handler> </action> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <formCommands> @@ -348,7 +348,7 @@ <name>Отключить</name> </handler> </action> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <formCommands> @@ -370,7 +370,7 @@ <name>ЗавершитьРаботу</name> </handler> </action> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <commandInterface> diff --git a/SSL/src/CommonForms/ВосстановлениеСвязиСГлавнымУзлом/Help/ru.html b/SSL/src/CommonForms/ВосстановлениеСвязиСГлавнымУзлом/Help/ru.html index 2cb0543fe..0fc393b07 100644 --- a/SSL/src/CommonForms/ВосстановлениеСвязиСГлавнымУзлом/Help/ru.html +++ b/SSL/src/CommonForms/ВосстановлениеСвязиСГлавнымУзлом/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 9.00.8112.16421"></meta></head><body> <p>Нажмите кнопку <strong>Восстановить</strong>, чтобы восстановить главный узел перед продолжением запуска. Это требуется после отмены главного узла для загрузки в подчиненный узел конфигурации главного узла в процессе восстановления распределенной информационной базы (недопустимо загружать конфигурацию более ранней версии).</p> <p>Нажмите кнопку <strong>Отключить</strong>, чтобы безвозвратно отключить связь с главным узлом перед продолжением запуска. Это требуется после отмены главного узла в следующих случаях:<br>- при создании главного узла из копии подчиненного узла;<br>- при создании самостоятельной информационной базы из подчиненного узла (или его копии).</p> -<p>См. также статью на ИТС <a href="http://its.1c.ru/db/metod8dev#content:5802:1">Восстановление работоспособности распределенной информационной базы (БСП)</a>.</p> +<p>См. также статью на ИТС <a href="http://its.1c.ru/db/metod8dev#content:5802:1">Администрирование узлов распределенной информационной базы (БСП)</a>.</p> <p> </p></body></html> \ No newline at end of file diff --git a/SSL/src/CommonForms/ВспомогательнаяФормаНастроекОтчета/Form.form b/SSL/src/CommonForms/ВспомогательнаяФормаНастроекОтчета/Form.form new file mode 100644 index 000000000..6c0d84c18 --- /dev/null +++ b/SSL/src/CommonForms/ВспомогательнаяФормаНастроекОтчета/Form.form @@ -0,0 +1,76 @@ +<?xml version="1.0" encoding="UTF-8"?> +<form:Form xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:form="http://g5.1c.ru/v8/dt/form"> + <items xsi:type="form:FormGroup"> + <name>КомпоновщикНастроекПользовательскиеНастройки</name> + <id>1</id> + <visible>true</visible> + <enabled>true</enabled> + <userVisible> + <common>true</common> + </userVisible> + <title> + <key>ru</key> + <value>Пользовательские настройки</value> + + + КомпоновщикНастроекПользовательскиеНастройкиРасширеннаяПодсказка + 2 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + true + true + Auto + Auto + + + Bottom + true + + FormCommandBar + -1 + Right + true + + DontBlock + true + true + true + Vertical + true + true + true + UseIfNecessary + auto + true + + Отчет + 1 + + ReportObject + + + true + + + true + +
        true
        +
        + + + + + + Settings + КомпоновщикНастроекПользовательскиеНастройки + + diff --git a/SSL/src/CommonForms/ВспомогательнаяФормаНастроекОтчета/ВспомогательнаяФормаНастроекОтчета.mdo b/SSL/src/CommonForms/ВспомогательнаяФормаНастроекОтчета/ВспомогательнаяФормаНастроекОтчета.mdo new file mode 100644 index 000000000..f32d2f3bd --- /dev/null +++ b/SSL/src/CommonForms/ВспомогательнаяФормаНастроекОтчета/ВспомогательнаяФормаНастроекОтчета.mdo @@ -0,0 +1,10 @@ + + + ВспомогательнаяФормаНастроекОтчета + + ru + Вспомогательная форма настроек отчета + + PersonalComputer + MobileDevice + diff --git a/SSL/src/CommonForms/ВходВОбластьДанных/Form.form b/SSL/src/CommonForms/ВходВОбластьДанных/Form.form index f8f318cd6..3d7b7e015 100644 --- a/SSL/src/CommonForms/ВходВОбластьДанных/Form.form +++ b/SSL/src/CommonForms/ВходВОбластьДанных/Form.form @@ -145,7 +145,6 @@ true true true - UseIfNecessary auto true @@ -188,7 +187,7 @@ ВойтиВОбластьДанных - Auto + DontUse Auto
        @@ -210,7 +209,7 @@ ВыйтиИзОбластиДанных - Auto + DontUse Auto diff --git a/SSL/src/CommonForms/ВходВПрограммуЗапрещен/Form.form b/SSL/src/CommonForms/ВходВПрограммуЗапрещен/Form.form new file mode 100644 index 000000000..de5f01281 --- /dev/null +++ b/SSL/src/CommonForms/ВходВПрограммуЗапрещен/Form.form @@ -0,0 +1,192 @@ + + + + ГруппаПредупреждение + 9 + + Картинка + 6 + + <key>ru</key> + <value>Картинка</value> + + true + true + + true + + + КартинкаРасширеннаяПодсказка + 8 + Label + true + true + + Left + + + + КартинкаКонтекстноеМеню + 7 + true + + 3 + true + 2 + true + + + CommonPicture.Ошибка32 + + + + + Надпись + 1 + + <key>ru</key> + <value>Ваша учетная запись отключена. +Дальнейшая работа невозможна и будет +автоматически завершена через 5 минут. + +Обратитесь к администратору.</value> + + true + true + + true + + + НадписьРасширеннаяПодсказка + 3 + Label + true + true + + Left + + + + НадписьКонтекстноеМеню + 2 + true + + Label + true + true + true + + Left + + + true + true + + true + + + <key>ru</key> + <value>Группа предупреждение</value> + + + ru + Группа предупреждение + + + ГруппаПредупреждениеРасширеннаяПодсказка + 10 + Label + true + true + + Left + + + UsualGroup + + Auto + true + true + Auto + Auto + + + Bottom + true + + ФормаКоманднаяПанель + -1 + + ФормаЗавершитьРаботу + 4 + true + true + + true + + + ФормаЗавершитьРаботуРасширеннаяПодсказка + 5 + Label + true + true + + Left + + + Form.Command.ЗавершитьРаботу + Normal + Auto + true + true + UserCmds + Auto + + Center + + + OnOpen + ПриОткрытии + + + OnClose + ПриЗакрытии + + 29 + LockWholeInterface + true + true + true + Vertical + true + true + true + auto + true + + ЗавершитьРаботу + + <key>ru</key> + <value>Завершить работу</value> + + 1 + + ru + Завершить работу + + + true + + + + ЗавершитьРаботу + + + DontUse + Auto + + + + + + diff --git a/SSL/src/CommonForms/ВходВПрограммуЗапрещен/Module.bsl b/SSL/src/CommonForms/ВходВПрограммуЗапрещен/Module.bsl new file mode 100644 index 000000000..ca1991806 --- /dev/null +++ b/SSL/src/CommonForms/ВходВПрограммуЗапрещен/Module.bsl @@ -0,0 +1,39 @@ +#Область ОбработчикиСобытийФормы + +&НаКлиенте +Процедура ПриОткрытии(Отказ) + + ПодключитьОбработчикОжидания("ОбработчикОжиданияЗавершитьРаботу", 5 * 60, Истина); + +КонецПроцедуры + +&НаКлиенте +Процедура ПриЗакрытии() + + ПрекратитьРаботуСистемы(); + +КонецПроцедуры + +#КонецОбласти + +#Область ОбработчикиКомандФормы + +&НаКлиенте +Процедура ЗавершитьРаботу(Команда) + + Закрыть(); + +КонецПроцедуры + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +&НаКлиенте +Процедура ОбработчикОжиданияЗавершитьРаботу() + + Закрыть(); + +КонецПроцедуры + +#КонецОбласти diff --git a/SSL/src/CommonForms/ВходВПрограммуЗапрещен/ВходВПрограммуЗапрещен.mdo b/SSL/src/CommonForms/ВходВПрограммуЗапрещен/ВходВПрограммуЗапрещен.mdo new file mode 100644 index 000000000..eb02759cd --- /dev/null +++ b/SSL/src/CommonForms/ВходВПрограммуЗапрещен/ВходВПрограммуЗапрещен.mdo @@ -0,0 +1,10 @@ + + + ВходВПрограммуЗапрещен + + ru + Вход в программу запрещен + + PersonalComputer + MobileDevice + diff --git a/SSL/src/CommonForms/ВыборДаты/Form.form b/SSL/src/CommonForms/ВыборДаты/Form.form index 4170fee1a..5a6108e12 100644 --- a/SSL/src/CommonForms/ВыборДаты/Form.form +++ b/SSL/src/CommonForms/ВыборДаты/Form.form @@ -185,7 +185,6 @@ true true true - UseIfNecessary auto true @@ -227,7 +226,7 @@ ОК - Auto + DontUse Auto @@ -249,7 +248,7 @@ Отмена - Auto + DontUse Auto diff --git a/SSL/src/CommonForms/ВыборДействияПриОбнаруженииОтличийФайла/Form.form b/SSL/src/CommonForms/ВыборДействияПриОбнаруженииОтличийФайла/Form.form index 87406cfbe..02dfbb9a5 100644 --- a/SSL/src/CommonForms/ВыборДействияПриОбнаруженииОтличийФайла/Form.form +++ b/SSL/src/CommonForms/ВыборДействияПриОбнаруженииОтличийФайла/Form.form @@ -727,7 +727,6 @@ Vertical true true - UseIfNecessary auto true @@ -861,7 +860,7 @@ ОткрытьСуществующий - Auto + DontUse Auto @@ -883,7 +882,7 @@ ВзятьИзХранилища - Auto + DontUse Auto @@ -909,7 +908,7 @@ Picture - Auto + DontUse Auto @@ -931,7 +930,7 @@ Поместить - Auto + DontUse Auto @@ -953,7 +952,7 @@ НеПомещать - Auto + DontUse Auto @@ -975,7 +974,7 @@ Отменить - Auto + DontUse Auto diff --git a/SSL/src/CommonForms/ВыборИсполнителяБизнесПроцесса/Form.form b/SSL/src/CommonForms/ВыборИсполнителяБизнесПроцесса/Form.form index 02d53c30b..eafc8b178 100644 --- a/SSL/src/CommonForms/ВыборИсполнителяБизнесПроцесса/Form.form +++ b/SSL/src/CommonForms/ВыборИсполнителяБизнесПроцесса/Form.form @@ -609,7 +609,6 @@ true true true - UseIfNecessary auto true @@ -628,9 +627,6 @@ true - - СписокПользователи.Подразделение - СписокПользователи.Ref @@ -643,8 +639,6 @@ ВЫБОР КОГДА Пользователи.ПометкаУдаления ТОГДА 0 - КОГДА Пользователи.ИдентификаторПользователяИБ = &ПустойУникальныйИдентификатор - ТОГДА 4 ИНАЧЕ 1 КОНЕЦ КАК НомерКартинки ИЗ @@ -745,7 +739,7 @@ TextPicture - Auto + DontUse Auto diff --git a/SSL/src/CommonForms/ВыборИсполнителяБизнесПроцесса/Help/ru.html b/SSL/src/CommonForms/ВыборИсполнителяБизнесПроцесса/Help/ru.html index d04a4e22b..64f8da60d 100644 --- a/SSL/src/CommonForms/ВыборИсполнителяБизнесПроцесса/Help/ru.html +++ b/SSL/src/CommonForms/ВыборИсполнителяБизнесПроцесса/Help/ru.html @@ -1,11 +1,18 @@

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

        Открывается из бизнес-процесса по кнопке выбора в поле Исполнитель. 

        -

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

        -

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

        +

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

        +

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

        Пользователи

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

        Роли исполнителей

        +

        Особенности взаимодействия с внешними пользователями

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

        Роли исполнителей

        • При ролевой адресации поручение выдается не персонально исполнителю, а некоторой роли бизнес-процесса (например, Старший по залу). 
          • diff --git a/SSL/src/CommonForms/ВыборИсполнителяБизнесПроцесса/Module.bsl b/SSL/src/CommonForms/ВыборИсполнителяБизнесПроцесса/Module.bsl index 068852331..38740cb7f 100644 --- a/SSL/src/CommonForms/ВыборИсполнителяБизнесПроцесса/Module.bsl +++ b/SSL/src/CommonForms/ВыборИсполнителяБизнесПроцесса/Module.bsl @@ -17,9 +17,6 @@ СписокРоли, "ВнешняяРоль", Ложь); КонецЕсли; - ОбновитьЗначениеПараметраКомпоновкиДанных(СписокПользователи, "ПустойУникальныйИдентификатор", - Новый УникальныйИдентификатор("00000000-0000-0000-0000-000000000000")); - Если ТипЗнч(Параметры.Исполнитель) = Тип("СправочникСсылка.Пользователи") Тогда ТекущийЭлемент = Элементы.СписокПользователи; @@ -101,20 +98,4 @@ КонецФункции -&НаКлиентеНаСервереБезКонтекста -Процедура ОбновитьЗначениеПараметраКомпоновкиДанных(Знач ВладелецПараметров, Знач ИмяПараметра, Знач ЗначениеПараметра) - - Для каждого Параметр Из ВладелецПараметров.Параметры.Элементы Цикл - Если Строка(Параметр.Параметр) = ИмяПараметра Тогда - Если Параметр.Использование И Параметр.Значение = ЗначениеПараметра Тогда - Возврат; - КонецЕсли; - Прервать; - КонецЕсли; - КонецЦикла; - - ВладелецПараметров.Параметры.УстановитьЗначениеПараметра(ИмяПараметра, ЗначениеПараметра); - -КонецПроцедуры - #КонецОбласти diff --git a/SSL/src/CommonForms/ВыборКонтакта/Form.form b/SSL/src/CommonForms/ВыборКонтакта/Form.form index fd18d4d20..2ce54a0eb 100644 --- a/SSL/src/CommonForms/ВыборКонтакта/Form.form +++ b/SSL/src/CommonForms/ВыборКонтакта/Form.form @@ -1167,7 +1167,6 @@ true true true - UseIfNecessary auto true @@ -1429,9 +1428,6 @@ true - - СписокПользователей.IsFolder - ВЫБРАТЬ Пользователи.Ссылка, @@ -1448,6 +1444,7 @@ ГДЕ Пользователи.Служебный = ЛОЖЬ И Пользователи.ПометкаУдаления = ЛОЖЬ + И Пользователи.Недействителен = ЛОЖЬ И ИСТИНА В (ВЫБРАТЬ ИСТИНА @@ -1455,7 +1452,8 @@ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ГДЕ СоставыГруппПользователей.Пользователь = Пользователи.Ссылка - И СоставыГруппПользователей.ГруппаПользователей = &ГруппаПользователей) + И СоставыГруппПользователей.ГруппаПользователей = &ГруппаПользователей) + Catalog.Пользователи true true @@ -1615,7 +1613,7 @@ TextPicture - Auto + DontUse Auto @@ -1640,7 +1638,7 @@ НайтиВСпискеИзСпискаПредметовВыполнить - Auto + DontUse Auto @@ -1665,7 +1663,7 @@ НайтиВСпискеИзСпискаНайденныхВыполнить - Auto + DontUse Auto @@ -1691,7 +1689,7 @@ TextPicture - Auto + DontUse Auto diff --git a/SSL/src/CommonForms/ВыборОбъектовИнформационнойБазыКорреспондента/Form.form b/SSL/src/CommonForms/ВыборОбъектовИнформационнойБазыКорреспондента/Form.form index b50eec473..5cc5b22c7 100644 --- a/SSL/src/CommonForms/ВыборОбъектовИнформационнойБазыКорреспондента/Form.form +++ b/SSL/src/CommonForms/ВыборОбъектовИнформационнойБазыКорреспондента/Form.form @@ -355,7 +355,6 @@ true true true - UseIfNecessary auto true @@ -500,7 +499,7 @@ TextPicture - Auto + DontUse Auto diff --git a/SSL/src/CommonForms/ВыборОбъектовИнформационнойБазыКорреспондента/Module.bsl b/SSL/src/CommonForms/ВыборОбъектовИнформационнойБазыКорреспондента/Module.bsl index f58a928aa..415bcd345 100644 --- a/SSL/src/CommonForms/ВыборОбъектовИнформационнойБазыКорреспондента/Module.bsl +++ b/SSL/src/CommonForms/ВыборОбъектовИнформационнойБазыКорреспондента/Module.bsl @@ -78,10 +78,8 @@ КонецЕсли; ИначеЕсли Параметры.ПараметрыВнешнегоСоединения.ТипСоединения = "ВременноеХранилище" Тогда - - ДанныеБазыКорреспондента = ПолучитьИзВременногоХранилища( - Параметры.ПараметрыВнешнегоСоединения.АдресВременногоХранилища - ).Получить().Получить(Параметры.ПолноеИмяТаблицыБазыКорреспондента); + ДанныеВременногоХранилища = ПолучитьИзВременногоХранилища(Параметры.ПараметрыВнешнегоСоединения.АдресВременногоХранилища); + ДанныеБазыКорреспондента = ДанныеВременногоХранилища.Получить().Получить(Параметры.ПолноеИмяТаблицыБазыКорреспондента); СвойстваОбъектаМетаданных = ДанныеБазыКорреспондента.СвойстваОбъектаМетаданных; ТаблицаБазыКорреспондента = ОбщегоНазначения.ЗначениеИзСтрокиXML(ДанныеБазыКорреспондента.ТаблицаБазыКорреспондента); @@ -153,8 +151,7 @@ ЭтоГруппа = ТекущиеДанные.ИндексКартинки=0 Или ТекущиеДанные.ИндексКартинки=1; Если (ЭтоГруппа И ВыборГруппИЭлементов=ГруппыИЭлементы.Элементы) - Или (Не ЭтоГруппа И ВыборГруппИЭлементов=ГруппыИЭлементы.Группы) - Тогда + Или (Не ЭтоГруппа И ВыборГруппИЭлементов=ГруппыИЭлементы.Группы) Тогда Возврат; КонецЕсли; diff --git a/SSL/src/CommonForms/ВыборОбъектовМетаданных/Form.form b/SSL/src/CommonForms/ВыборОбъектовМетаданных/Form.form index 7e6509c0b..1e136bf99 100644 --- a/SSL/src/CommonForms/ВыборОбъектовМетаданных/Form.form +++ b/SSL/src/CommonForms/ВыборОбъектовМетаданных/Form.form @@ -410,7 +410,6 @@ true true true - UseIfNecessary auto true @@ -688,7 +687,7 @@ ВыбратьВыполнить - Auto + DontUse Auto @@ -710,7 +709,7 @@ ЗакрытьВыполнить - Auto + DontUse Auto diff --git a/SSL/src/CommonForms/ВыборОбъектовМетаданных/Module.bsl b/SSL/src/CommonForms/ВыборОбъектовМетаданных/Module.bsl index 30020e83b..d8802e4ca 100644 --- a/SSL/src/CommonForms/ВыборОбъектовМетаданных/Module.bsl +++ b/SSL/src/CommonForms/ВыборОбъектовМетаданных/Module.bsl @@ -41,7 +41,7 @@ Если Параметры.ФильтрПоОбъектамМетаданных.Количество() > 0 Тогда Параметры.КоллекцииВыбираемыхОбъектовМетаданных.Очистить(); Для Каждого ОбъектМетаданныхПолноеИмя Из Параметры.ФильтрПоОбъектамМетаданных Цикл - ИмяБазовогоТипа = ОбщегоНазначения.ИмяБазовогоТипаПоОбъектуМетаданных(Метаданные.НайтиПоПолномуИмени(ОбъектМетаданныхПолноеИмя)); + ИмяБазовогоТипа = ОбщегоНазначения.ИмяБазовогоТипаПоОбъектуМетаданных(Метаданные.НайтиПоПолномуИмени(ОбъектМетаданныхПолноеИмя.Значение)); Если Параметры.КоллекцииВыбираемыхОбъектовМетаданных.НайтиПоЗначению(ИмяБазовогоТипа) = Неопределено Тогда Параметры.КоллекцииВыбираемыхОбъектовМетаданных.Добавить(ИмяБазовогоТипа); КонецЕсли; @@ -279,7 +279,16 @@ // Функция ПараметрыЭлементаДереваОбъектовМетаданных() - Возврат Новый Структура("Имя,ПолноеИмя,Синоним,Пометка,Картинка,КартинкаОбъекта,Родитель", "", "", Ложь, 0, 0, Неопределено); + СтруктураПараметров = Новый Структура; + СтруктураПараметров.Вставить("Имя", ""); + СтруктураПараметров.Вставить("ПолноеИмя", ""); + СтруктураПараметров.Вставить("Синоним", Ложь); + СтруктураПараметров.Вставить("Пометка", 0); + СтруктураПараметров.Вставить("Картинка", 0); + СтруктураПараметров.Вставить("КартинкаОбъекта", Неопределено); + СтруктураПараметров.Вставить("Родитель", Неопределено); + + Возврат СтруктураПараметров; КонецФункции diff --git a/SSL/src/CommonForms/ВыборПроизвольногоПериода/Form.form b/SSL/src/CommonForms/ВыборПроизвольногоПериода/Form.form index 427fd4b34..fe8d74cd5 100644 --- a/SSL/src/CommonForms/ВыборПроизвольногоПериода/Form.form +++ b/SSL/src/CommonForms/ВыборПроизвольногоПериода/Form.form @@ -153,7 +153,6 @@ true true true - UseIfNecessary auto true @@ -236,7 +235,7 @@ Выбрать - Auto + DontUse Auto diff --git a/SSL/src/CommonForms/ВыборПутиКАрхивуФайловТомов/Form.form b/SSL/src/CommonForms/ВыборПутиКАрхивуФайловТомов/Form.form index 2e79abb29..e3b48b751 100644 --- a/SSL/src/CommonForms/ВыборПутиКАрхивуФайловТомов/Form.form +++ b/SSL/src/CommonForms/ВыборПутиКАрхивуФайловТомов/Form.form @@ -184,7 +184,6 @@ Vertical true true - UseIfNecessary auto true @@ -242,7 +241,7 @@ Разместить - Auto + DontUse Auto diff --git a/SSL/src/CommonForms/ВыборПутиКАрхивуФайловТомов/Help/ru.html b/SSL/src/CommonForms/ВыборПутиКАрхивуФайловТомов/Help/ru.html index 70afcc9bb..1900ac0fe 100644 --- a/SSL/src/CommonForms/ВыборПутиКАрхивуФайловТомов/Help/ru.html +++ b/SSL/src/CommonForms/ВыборПутиКАрхивуФайловТомов/Help/ru.html @@ -1,7 +1,7 @@

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

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

            -

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

            +

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

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

            • Для сервера 1С:Предприятия под управлением Microsoft Windows - укажите путь к архиву с помощью кнопки ;

            или

            • Для сервера 1С:Предприятия под управлением Linux - напишите путь к архиву.

            Нажмите Разместить.

            diff --git a/SSL/src/CommonForms/ВыборПутиКАрхивуФайловТомов/Module.bsl b/SSL/src/CommonForms/ВыборПутиКАрхивуФайловТомов/Module.bsl index 348a660a7..e0bdb554d 100644 --- a/SSL/src/CommonForms/ВыборПутиКАрхивуФайловТомов/Module.bsl +++ b/SSL/src/CommonForms/ВыборПутиКАрхивуФайловТомов/Module.bsl @@ -65,7 +65,7 @@ Если НЕ СтандартныеПодсистемыКлиентПовтИсп.ПараметрыРаботыКлиента().ИнформационнаяБазаФайловая Тогда - Если Не ПустаяСтрока(ПутьКАрхивуWindows) И (Лев(ПутьКАрхивуWindows, 2) <> "\\" ИЛИ Найти(ПутьКАрхивуWindows, ":") <> 0) Тогда + Если Не ПустаяСтрока(ПутьКАрхивуWindows) И (Лев(ПутьКАрхивуWindows, 2) <> "\\" ИЛИ СтрНайти(ПутьКАрхивуWindows, ":") <> 0) Тогда ТекстОшибки = НСтр("ru = 'Путь к архиву с файлами начального образа |должен быть в формате UNC (\\servername\resource).'"); ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстОшибки, , "ПутьКАрхивуWindows"); diff --git a/SSL/src/CommonForms/ВыборРолиИсполнителя/Form.form b/SSL/src/CommonForms/ВыборРолиИсполнителя/Form.form index c12ccb751..f628b3c5d 100644 --- a/SSL/src/CommonForms/ВыборРолиИсполнителя/Form.form +++ b/SSL/src/CommonForms/ВыборРолиИсполнителя/Form.form @@ -303,7 +303,6 @@ Vertical true true - UseIfNecessary auto true @@ -445,7 +444,7 @@ OKВыполнить - Auto + DontUse Auto diff --git a/SSL/src/CommonForms/ВыборРолиИсполнителя/Module.bsl b/SSL/src/CommonForms/ВыборРолиИсполнителя/Module.bsl index 1e5f65531..0e9321621 100644 --- a/SSL/src/CommonForms/ВыборРолиИсполнителя/Module.bsl +++ b/SSL/src/CommonForms/ВыборРолиИсполнителя/Module.bsl @@ -32,18 +32,14 @@ Если ЗаданыТипыОсновногоОбъектаАдресации И ОсновнойОбъектАдресации = Неопределено Тогда ОбщегоНазначенияКлиентСервер.СообщитьПользователю( - СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Поле ""%1"" не заполнено.'"), - Роль.ТипыОсновногоОбъектаАдресации.Наименование ),,, - "ОсновнойОбъектАдресации", - Отказ); + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Поле ""%1"" не заполнено.'"), Роль.ТипыОсновногоОбъектаАдресации.Наименование ),,, + "ОсновнойОбъектАдресации", Отказ); ИначеЕсли ЗаданыТипыДополнительногоОбъектаАдресации И ДополнительныйОбъектАдресации = Неопределено Тогда ОбщегоНазначенияКлиентСервер.СообщитьПользователю( - СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Поле ""%1"" не заполнено.'"), - Роль.ТипыДополнительногоОбъектаАдресации.Наименование ),,, - "ДополнительныйОбъектАдресации", - Отказ); + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Поле ""%1"" не заполнено.'"), Роль.ТипыДополнительногоОбъектаАдресации.Наименование ),,, + "ДополнительныйОбъектАдресации", Отказ); КонецЕсли; diff --git a/SSL/src/CommonForms/ВыборТиповПользователей/Form.form b/SSL/src/CommonForms/ВыборТиповПользователей/Form.form new file mode 100644 index 000000000..9eb7c8050 --- /dev/null +++ b/SSL/src/CommonForms/ВыборТиповПользователей/Form.form @@ -0,0 +1,407 @@ + + + + Назначение + 47 + true + true + + true + + + Назначение + + None + + НазначениеГруппа + 66 + + НазначениеПометка + 63 + true + true + + true + + + Назначение.Check + + + НазначениеПометкаРасширеннаяПодсказка + 65 + Label + true + true + + Left + + + + НазначениеПометкаКонтекстноеМеню + 64 + true + + CheckBoxField + Auto + true + Left + true + + + + НазначениеЗначение + 60 + true + true + + true + + + Назначение.Value + + + НазначениеЗначениеРасширеннаяПодсказка + 62 + Label + true + true + + Left + + + + НазначениеЗначениеКонтекстноеМеню + 61 + true + + InputField + true + Auto + true + Left + true + + true + true + true + true + true + true + Normal + + + true + true + + true + + + <key>ru</key> + <value>Назначение группа</value> + + + ru + Назначение группа + + + НазначениеГруппаРасширеннаяПодсказка + 67 + Label + true + true + + Left + + + ColumnGroup + + InCell + auto + true + + + + НазначениеКоманднаяПанель + 49 + Left + + + НазначениеСтрокаПоиска + 51 + + НазначениеСтрокаПоискаРасширеннаяПодсказка + 53 + Label + true + true + + Left + + + + НазначениеСтрокаПоискаКонтекстноеМеню + 52 + true + + Назначение + + true + + + + НазначениеСостояниеПросмотра + 54 + + НазначениеСостояниеПросмотраРасширеннаяПодсказка + 56 + Label + true + true + + Left + + + + НазначениеСостояниеПросмотраКонтекстноеМеню + 55 + true + + ViewStatusAddition + Назначение + + true + + + + НазначениеУправлениеПоиском + 57 + + НазначениеУправлениеПоискомРасширеннаяПодсказка + 59 + Label + true + true + + Left + + + + НазначениеУправлениеПоискомКонтекстноеМеню + 58 + true + + SearchControlAddition + Назначение + + true + + + + НазначениеРасширеннаяПодсказка + 50 + Label + true + true + + Left + + + + НазначениеКонтекстноеМеню + 48 + true + + true + true + true + true + true + MultiRow + 1 + 1 + AutoUse + AutoUse + true + true + false + false + false + true + Auto + Auto + true + true + + Назначение.Picture + + true + + + ФормаКоманднаяПанель + -1 + + ФормаВыбрать + 21 + true + true + + true + + + ФормаВыбратьРасширеннаяПодсказка + 22 + Label + true + true + + Left + + + Form.Command.Выбрать + Auto + true + true + true + UserCmds + Auto + + + НазначениеУстановитьФлажки + 68 + true + true + + true + + + НазначениеУстановитьФлажкиРасширеннаяПодсказка + 69 + Label + true + true + + Left + + + Form.Item.Назначение.StandardCommand.CheckAll + Normal + Auto + true + true + UserCmds + Auto + InCommandBarAndInAdditionalSubmenu + + + НазначениеСнятьФлажки + 70 + true + true + + true + + + НазначениеСнятьФлажкиРасширеннаяПодсказка + 71 + Label + true + true + + Left + + + Form.Item.Назначение.StandardCommand.UncheckAll + Normal + Auto + true + true + UserCmds + Auto + InCommandBarAndInAdditionalSubmenu + + Left + true + + + OnCreateAtServer + ПриСозданииНаСервере + + LockOwner + true + true + Vertical + true + true + true + auto + true + + Назначение + + <key>ru</key> + <value>Назначение</value> + + 2 + + ValueList + + + true + + + true + + + + + + + Выбрать + + <key>ru</key> + <value>Выбрать</value> + + 1 + + ru + Выбрать + + + true + + + + Выбрать + + + DontUse + Auto + + + Заголовок + + String + + + + + Назначение + + + + ВыбиратьПользователей + + Boolean + + + + ЭтоОтбор + + Boolean + + + + + + + diff --git a/SSL/src/CommonForms/ВыборТиповПользователей/Help/ru.html b/SSL/src/CommonForms/ВыборТиповПользователей/Help/ru.html new file mode 100644 index 000000000..7f4318131 --- /dev/null +++ b/SSL/src/CommonForms/ВыборТиповПользователей/Help/ru.html @@ -0,0 +1,5 @@ + +

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

            +

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

            +

            См. также:

            + \ 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..48bdb51c8 --- /dev/null +++ b/SSL/src/CommonForms/ВыборТиповПользователей/Module.bsl @@ -0,0 +1,69 @@ + +#Область ОбработчикиСобытийФормы + +&НаСервере +Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) + + Если Параметры.Свойство("АвтоТест") Тогда + Возврат; + КонецЕсли; + + Заголовок = Параметры.Заголовок; + + МассивПредставлений = ?(Параметры.ЭтоОтбор, + СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(Параметры.Назначение, ", "), + Неопределено); + + Если Параметры.ВыбиратьПользователей Тогда + ДобавитьСтрокуТипа(Справочники.Пользователи.ПустаяСсылка(), Тип("СправочникСсылка.Пользователи"), МассивПредставлений); + КонецЕсли; + + Если ВнешниеПользователи.ИспользоватьВнешнихПользователей() Тогда + + Для Каждого Тип Из Метаданные.ОпределяемыеТипы.ВнешнийПользователь.Тип.Типы() Цикл + + ОписаниеТипаСсылки = Новый ОписаниеТипов(ОбщегоНазначенияКлиентСервер.ЗначениеВМассиве(Тип)); + Значение = ОписаниеТипаСсылки.ПривестиЗначение(Неопределено); + + ДобавитьСтрокуТипа(Значение, Тип, МассивПредставлений); + + КонецЦикла; + + КонецЕсли; + +КонецПроцедуры + +#КонецОбласти + +#Область ОбработчикиКомандФормы + +&НаКлиенте +Процедура Выбрать(Команда) + + Закрыть(Назначение); + +КонецПроцедуры + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +&НаСервере +Процедура ДобавитьСтрокуТипа(Значение, Тип, МассивПредставлений) + + Представление = Метаданные.НайтиПоТипу(Тип).Синоним; + + Если Параметры.ЭтоОтбор Тогда + Пометка = МассивПредставлений.Найти(Представление) <> Неопределено; + Иначе + ПараметрыОтбора = Новый Структура; + ПараметрыОтбора.Вставить("ТипПользователей", Значение); + НайденныеСтроки = Параметры.Назначение.НайтиСтроки(ПараметрыОтбора); + Пометка = НайденныеСтроки.Количество() = 1; + КонецЕсли; + + Назначение.Добавить(Значение, Представление, Пометка); + +КонецПроцедуры + +#КонецОбласти \ No newline at end of file diff --git a/SSL/src/CommonForms/ПодтверждениеПароляУчетнойЗаписи/ПодтверждениеПароляУчетнойЗаписи.mdo b/SSL/src/CommonForms/ВыборТиповПользователей/ВыборТиповПользователей.mdo similarity index 53% rename from SSL/src/CommonForms/ПодтверждениеПароляУчетнойЗаписи/ПодтверждениеПароляУчетнойЗаписи.mdo rename to SSL/src/CommonForms/ВыборТиповПользователей/ВыборТиповПользователей.mdo index 703aba9cb..1e78d244c 100644 --- a/SSL/src/CommonForms/ПодтверждениеПароляУчетнойЗаписи/ПодтверждениеПароляУчетнойЗаписи.mdo +++ b/SSL/src/CommonForms/ВыборТиповПользователей/ВыборТиповПользователей.mdo @@ -1,11 +1,10 @@ - - ПодтверждениеПароляУчетнойЗаписи + + ВыборТиповПользователей ru - Подтверждение пароля учетной записи + Выбор типов пользователей - true ru diff --git a/SSL/src/CommonForms/ВыборУзловПлановОбмена/Form.form b/SSL/src/CommonForms/ВыборУзловПлановОбмена/Form.form index fd557c966..87c27ee0d 100644 --- a/SSL/src/CommonForms/ВыборУзловПлановОбмена/Form.form +++ b/SSL/src/CommonForms/ВыборУзловПлановОбмена/Form.form @@ -309,7 +309,6 @@ true true true - UseIfNecessary auto true @@ -456,7 +455,7 @@ TextPicture - Auto + DontUse Auto diff --git a/SSL/src/CommonForms/ВыборУзловПлановОбмена/Help/ru.html b/SSL/src/CommonForms/ВыборУзловПлановОбмена/Help/ru.html index b96d4715d..8f0570db5 100644 --- a/SSL/src/CommonForms/ВыборУзловПлановОбмена/Help/ru.html +++ b/SSL/src/CommonForms/ВыборУзловПлановОбмена/Help/ru.html @@ -3,7 +3,7 @@

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

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

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

            Выбор узла плана обмена

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

          Выбор узла плана обмена

          • Выделите нужное значение, нажмите Выбрать.

          Подбор узлов плана обмена

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

          См. также:

          \ No newline at end of file diff --git a/SSL/src/CommonForms/ВыборУзловПлановОбмена/Module.bsl b/SSL/src/CommonForms/ВыборУзловПлановОбмена/Module.bsl index 5f5e83da8..90e5cfc30 100644 --- a/SSL/src/CommonForms/ВыборУзловПлановОбмена/Module.bsl +++ b/SSL/src/CommonForms/ВыборУзловПлановОбмена/Module.bsl @@ -127,7 +127,6 @@ КонецЕсли; Запрос = Новый Запрос; - Запрос.УстановитьПараметр("ЭтотУзел", ПланыОбмена[ОбъектМетаданных.Имя].ЭтотУзел()); Запрос.Текст = "ВЫБРАТЬ | ТаблицаПланаОбмена.Ссылка, @@ -135,7 +134,7 @@ |ИЗ | &ТаблицаПланаОбмена КАК ТаблицаПланаОбмена |ГДЕ - | ТаблицаПланаОбмена.Ссылка <> &ЭтотУзел + | НЕ ТаблицаПланаОбмена.ЭтотУзел | |УПОРЯДОЧИТЬ ПО | Представление"; diff --git a/SSL/src/CommonForms/ВыборФорматаВложений/Form.form b/SSL/src/CommonForms/ВыборФорматаВложений/Form.form index edd3c25bb..142afcd6e 100644 --- a/SSL/src/CommonForms/ВыборФорматаВложений/Form.form +++ b/SSL/src/CommonForms/ВыборФорматаВложений/Form.form @@ -249,7 +249,6 @@ WeakSeparation true true - auto Auto Auto @@ -424,7 +423,6 @@ true true true - UseIfNecessary auto true @@ -489,7 +487,7 @@ Выбрать - Auto + DontUse Auto diff --git a/SSL/src/CommonForms/ГруппыПользователей/Form.form b/SSL/src/CommonForms/ГруппыПользователей/Form.form index 6ec0f9bde..8af2144a0 100644 --- a/SSL/src/CommonForms/ГруппыПользователей/Form.form +++ b/SSL/src/CommonForms/ГруппыПользователей/Form.form @@ -642,7 +642,6 @@ true true true - UseIfNecessary auto true @@ -805,7 +804,7 @@ Text - Auto + DontUse Auto @@ -827,7 +826,7 @@ СнятьФлажки - Auto + DontUse Auto diff --git a/SSL/src/CommonForms/ГруппыПользователей/Module.bsl b/SSL/src/CommonForms/ГруппыПользователей/Module.bsl index e36ae4fb8..e75e1b76f 100644 --- a/SSL/src/CommonForms/ГруппыПользователей/Module.bsl +++ b/SSL/src/CommonForms/ГруппыПользователей/Module.bsl @@ -37,8 +37,10 @@ ТипПользователей = ТипЗнч(ПользовательИзМассива); КонецЕсли; ТипПользователяИзМассива = ТипЗнч(ПользовательИзМассива); + Если ТипПользователяИзМассива <> Тип("СправочникСсылка.Пользователи") - И ТипПользователяИзМассива <> Тип("СправочникСсылка.ВнешниеПользователи") Тогда + И ТипПользователяИзМассива <> Тип("СправочникСсылка.ВнешниеПользователи") Тогда + ВызватьИсключение НСтр("ru = 'Команда не может быть выполнена для указанного объекта.'"); КонецЕсли; @@ -48,7 +50,8 @@ КонецЦикла; Если КоличествоПользователей > 1 - И Параметры.Пользователь = Неопределено Тогда + И Параметры.Пользователь = Неопределено Тогда + Заголовок = НСтр("ru = 'Группы пользователей'"); Элементы.ДеревоГруппПометка.ТриСостояния = Истина; КонецЕсли; @@ -63,6 +66,12 @@ Возврат; КонецЕсли; + Если ОбщегоНазначенияПовтИсп.ЭтоАвтономноеРабочееМесто() Тогда + Элементы.ФормаЗаписатьИЗакрыть.Доступность = Ложь; + Элементы.ФормаИсключитьИзВсехГрупп.Доступность = Ложь; + Элементы.ДеревоГрупп.ТолькоПросмотр = Истина; + КонецЕсли; + КонецПроцедуры &НаКлиенте @@ -247,8 +256,17 @@ ПользовательСсылка = СписокПользователей.МассивПользователей[0]; Если ТипПользователя = "ВнешнийПользователь" Тогда - ПользовательКосвенноВключенВГруппу = (Группа.ВсеОбъектыАвторизации И - (ТипЗнч(ПользовательСсылка.ОбъектАвторизации) = ТипЗнч(Группа.ТипОбъектовАвторизации))); + + Тип = ТипЗнч(ПользовательСсылка.ОбъектАвторизации); + ОписаниеТипаСсылки = Новый ОписаниеТипов(ОбщегоНазначенияКлиентСервер.ЗначениеВМассиве(Тип)); + Значение = ОписаниеТипаСсылки.ПривестиЗначение(Неопределено); + Назначение = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(Группа.Ссылка, "Назначение").Выгрузить(); + + Отбор = Новый Структура; + Отбор.Вставить("ТипПользователей", Значение); + + ПользовательКосвенноВключенВГруппу = Группа.ВсеОбъектыАвторизации + И Назначение.НайтиСтроки(Отбор).Количество() <> 0; НоваяСтрокаГрупп.ГруппаНеИзменяется = ПользовательКосвенноВключенВГруппу; КонецЕсли; @@ -312,7 +330,6 @@ Запрос.Текст = "ВЫБРАТЬ | ГруппыВнешнихПользователей.Ссылка, | ГруппыВнешнихПользователей.Родитель, - | ГруппыВнешнихПользователей.ТипОбъектовАвторизации, | ГруппыВнешнихПользователей.ВсеОбъектыАвторизации |ИЗ | Справочник.ГруппыВнешнихПользователей КАК ГруппыВнешнихПользователей @@ -447,39 +464,47 @@ Для Каждого НеПеремещенныйПользователь Из НеПеремещенныеПользователи Цикл Предмет = Строка(НеПеремещенныйПользователь.Ключ); КонецЦикла; - СообщениеПользователю = НСтр("ru = 'Пользователя ""%1"" не удалось включить в выбранные группы, - |т.к. у них различается тип или у групп установлен признак ""Все пользователи заданного типа"".'"); + СообщениеПользователю = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Пользователя ""%1"" не удалось включить в выбранные группы, + |т.к. у них различается тип или у групп установлен признак ""Все пользователи заданного типа"".'"), + Предмет); Иначе - ПараметрыПредметаИсчисления = НСтр("ru = 'пользователю,пользователям,пользователям,,,,,,0'"); - Предмет = ПользователиСлужебный.ФормированиеОкончанияСлова(КоличествоНеПеремещенныхПользователей, ПараметрыПредметаИсчисления); - СообщениеПользователю = НСтр("ru = 'Не всех пользователей удалось включить в выбранные группы, - |т.к. у них различается тип или у групп установлен признак ""Все пользователи заданного типа"".'"); + Предмет = Формат(КоличествоНеПеремещенныхПользователей, "ЧДЦ=0") + " " + + ПользователиСлужебныйКлиентСервер.ПредметЦелогоЧисла(КоличествоНеПеремещенныхПользователей, + "Л = ru_RU", НСтр("ru = 'пользователю,пользователям,пользователям,,,,,,0'")); + СообщениеПользователю = + НСтр("ru = 'Не всех пользователей удалось включить в выбранные группы, + |т.к. у них различается тип или у групп установлен признак ""Все пользователи заданного типа"".'"); Для Каждого НеПеремещенныйПользователь Из НеПеремещенныеПользователи Цикл - СтрокаПользователей = СтрокаПользователей + Строка(НеПеремещенныйПользователь.Ключ) + " : " + - СтроковыеФункцииКлиентСервер.СтрокаИзМассиваПодстрок(НеПеремещенныйПользователь.Значение) + Символы.ПС; + СтрокаПользователей = СтрокаПользователей + Строка(НеПеремещенныйПользователь.Ключ) + + " : " + СтрСоединить(НеПеремещенныйПользователь.Значение, ",") + Символы.ПС; КонецЦикла; - УведомлениеПользователя.ПолныйТекстСообщения = НСтр("ru = 'Следующие пользователи не были включены в группы:'") + - Символы.ПС + Символы.ПС + СтрокаПользователей; + УведомлениеПользователя.ПолныйТекстСообщения = + НСтр("ru = 'Следующие пользователи не были включены в группы:'") + + Символы.ПС + Символы.ПС + СтрокаПользователей; КонецЕсли; - УведомлениеПользователя.Сообщение = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - СообщениеПользователю, Предмет); + + УведомлениеПользователя.Сообщение = СообщениеПользователю; УведомлениеПользователя.ЕстьОшибки = Истина; - Возврат; + ИначеЕсли КоличествоПользователей = 1 Тогда - НаименованиеПользователя = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(МассивПеремещенныхПользователей[0], "Наименование"); - СообщениеПользователю = НСтр("ru = 'Изменен состав групп у пользователя ""%1""'"); + НаименованиеПользователя = ОбщегоНазначения.ЗначениеРеквизитаОбъекта( + МассивПеремещенныхПользователей[0], "Наименование"); + УведомлениеПользователя.Сообщение = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - СообщениеПользователю, НаименованиеПользователя); + НСтр("ru = 'Изменен состав групп у пользователя ""%1""'"), + НаименованиеПользователя); + ИначеЕсли КоличествоПользователей > 1 Тогда + СтрокаОбъект = Формат(КоличествоПользователей, "ЧДЦ=0") + " " + + ПользователиСлужебныйКлиентСервер.ПредметЦелогоЧисла(КоличествоПользователей, + "Л = ru_RU", НСтр("ru = 'пользователя,пользователей,пользователей,,,,,,0'")); - СообщениеПользователю = НСтр("ru = 'Изменен состав групп у %1'"); - СтрокаОбъект = ПользователиСлужебный.ФормированиеОкончанияСлова( - КоличествоПользователей, НСтр("ru = 'пользователя,пользователей,пользователей,,,,,,0'")); УведомлениеПользователя.Сообщение = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - СообщениеПользователю, СтрокаОбъект); - + НСтр("ru = 'Изменен состав групп у %1'"), СтрокаОбъект); КонецЕсли; + УведомлениеПользователя.ЕстьОшибки = Ложь; КонецПроцедуры diff --git a/SSL/src/CommonForms/ДлительнаяОперация/Form.form b/SSL/src/CommonForms/ДлительнаяОперация/Form.form index 2e6d454ed..c21c87f6e 100644 --- a/SSL/src/CommonForms/ДлительнаяОперация/Form.form +++ b/SSL/src/CommonForms/ДлительнаяОперация/Form.form @@ -123,7 +123,6 @@ true true true - UseIfNecessary auto true diff --git a/SSL/src/CommonForms/ДлительнаяОперацияДополнительныхОтчетовИОбработок/Form.form b/SSL/src/CommonForms/ДлительнаяОперацияДополнительныхОтчетовИОбработок/Form.form index a1a319e0f..bda29961d 100644 --- a/SSL/src/CommonForms/ДлительнаяОперацияДополнительныхОтчетовИОбработок/Form.form +++ b/SSL/src/CommonForms/ДлительнаяОперацияДополнительныхОтчетовИОбработок/Form.form @@ -196,7 +196,6 @@ true true true - UseIfNecessary auto true @@ -395,7 +394,7 @@ Text - Auto + DontUse Auto diff --git a/SSL/src/CommonForms/ДлительнаяОперацияДополнительныхОтчетовИОбработок/Module.bsl b/SSL/src/CommonForms/ДлительнаяОперацияДополнительныхОтчетовИОбработок/Module.bsl index 4c764c01e..4ef69de32 100644 --- a/SSL/src/CommonForms/ДлительнаяОперацияДополнительныхОтчетовИОбработок/Module.bsl +++ b/SSL/src/CommonForms/ДлительнаяОперацияДополнительныхОтчетовИОбработок/Module.bsl @@ -29,7 +29,7 @@ ЗаданиеРезультат = ДлительныеОперации.ЗапуститьВыполнениеВФоне( УникальныйИдентификатор, - "ДополнительныеОтчетыИОбработки.ВыполнитьКоманду", + "ДополнительныеОтчетыИОбработки.ВыполнитьКоманду", ПараметрыЗапускаФоновогоЗадания, СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Выполнение дополнительного отчета или обработки ""%1"", имя команды ""%2""'"), diff --git a/SSL/src/CommonForms/ДобавлениеЭлектроннойПодписиИзФайла/Form.form b/SSL/src/CommonForms/ДобавлениеЭлектроннойПодписиИзФайла/Form.form index 8e90a7ff0..799b7bd71 100644 --- a/SSL/src/CommonForms/ДобавлениеЭлектроннойПодписиИзФайла/Form.form +++ b/SSL/src/CommonForms/ДобавлениеЭлектроннойПодписиИзФайла/Form.form @@ -421,7 +421,6 @@ Vertical true true - UseIfNecessary auto true @@ -548,7 +547,7 @@ ОК - Auto + DontUse Auto diff --git a/SSL/src/CommonForms/ДобавлениеЭлектроннойПодписиИзФайла/Module.bsl b/SSL/src/CommonForms/ДобавлениеЭлектроннойПодписиИзФайла/Module.bsl index 3b2020236..ed370fc90 100644 --- a/SSL/src/CommonForms/ДобавлениеЭлектроннойПодписиИзФайла/Module.bsl +++ b/SSL/src/CommonForms/ДобавлениеЭлектроннойПодписиИзФайла/Module.bsl @@ -223,8 +223,7 @@ Диалог = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Открытие); Диалог.МножественныйВыбор = Ложь; Диалог.Заголовок = НСтр("ru = 'Выберите файл электронной подписи'"); - Диалог.Фильтр = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Файлы подписи (*.%1)|*.%1|Все файлы(*.*)|*.*'"), + Диалог.Фильтр = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Файлы подписи (*.%1)|*.%1|Все файлы(*.*)|*.*'"), ЭлектроннаяПодписьКлиентСервер.ПерсональныеНастройки().РасширениеДляФайловПодписи); Если Не Контекст.ДобавитьНовуюСтроку Тогда diff --git a/SSL/src/CommonForms/ДополнительныеОтчетыИОбработки/Form.form b/SSL/src/CommonForms/ДополнительныеОтчетыИОбработки/Form.form index e5c13f7e1..d6a6b5dd1 100644 --- a/SSL/src/CommonForms/ДополнительныеОтчетыИОбработки/Form.form +++ b/SSL/src/CommonForms/ДополнительныеОтчетыИОбработки/Form.form @@ -650,7 +650,6 @@ true true true - UseIfNecessary auto true @@ -1017,7 +1016,7 @@ TextPicture - Auto + DontUse Auto @@ -1042,7 +1041,7 @@ НастроитьСписок - Auto + DontUse Auto @@ -1064,7 +1063,7 @@ ОтменитьВыполнениеОбработки - Auto + DontUse Auto diff --git a/SSL/src/CommonForms/ДополнительныеОтчетыИОбработки/Module.bsl b/SSL/src/CommonForms/ДополнительныеОтчетыИОбработки/Module.bsl index 889c9d23f..60a79de2c 100644 --- a/SSL/src/CommonForms/ДополнительныеОтчетыИОбработки/Module.bsl +++ b/SSL/src/CommonForms/ДополнительныеОтчетыИОбработки/Module.bsl @@ -87,9 +87,9 @@ ФоновоеЗаданиеПроверитьВыполнениеПриЗакрытии = Ложь; ОтключитьОбработчикОжидания("ПроверитьВыполнениеФоновогоЗадания"); - Результат = ПроверитьВыполнениеФоновогоЗаданияНаСервере(ФоновоеЗаданиеИдентификатор, ФоновоеЗаданиеАдресХранилища, Истина); - Если Результат.Выполнено ИЛИ Результат.ВызваноИсключение Тогда - ПоказатьРезультатВыполненияОбработки(Результат, Ложь); + Задание = ПроверитьВыполнениеФоновогоЗаданияНаСервере(ФоновоеЗаданиеИдентификатор, ФоновоеЗаданиеАдресХранилища, Истина); + Если Задание.Завершено Тогда + ПоказатьРезультатВыполненияОбработки(Задание, Ложь); КонецЕсли; КонецЕсли; КонецПроцедуры @@ -212,10 +212,10 @@ ПараметрыВызоваСервера.ИдентификаторКоманды = ВыполняемаяКоманда.Идентификатор; ПараметрыВызоваСервера.ОбъектыНазначения = ВыполняемаяКоманда.ОбъектыНазначения; - Результат = ВыполнитьСерверныйМетодОбработкиНаСервере(ПараметрыВызоваСервера); + Задание = ВыполнитьСерверныйМетодОбработкиНаСервере(ПараметрыВызоваСервера); - Если Результат.Выполнено ИЛИ Результат.ВызваноИсключение Тогда - ПоказатьРезультатВыполненияОбработки(Результат, Истина); + Если Задание.Завершено Тогда + ПоказатьРезультатВыполненияОбработки(Задание, Истина); Иначе ДлительныеОперацииКлиент.ИнициализироватьПараметрыОбработчикаОжидания(ПараметрыОбработчика); ПодключитьОбработчикОжидания("ПроверитьВыполнениеФоновогоЗадания", 1, Истина); @@ -224,7 +224,7 @@ &НаСервере Функция ВыполнитьСерверныйМетодОбработкиНаСервере(ПараметрыВызоваСервера) - Результат = Новый Структура("Выполнено, ВызваноИсключение, Значение", Ложь, Ложь, Неопределено); + Задание = Новый Структура("Завершено, Успешно, Значение", Ложь, Неопределено, Неопределено); Попытка РезультатФоновогоЗадания = ДлительныеОперации.ЗапуститьВыполнениеВФоне( @@ -232,64 +232,50 @@ "ДополнительныеОтчетыИОбработки.ВыполнитьКоманду", ПараметрыВызоваСервера, НСтр("ru = 'Дополнительные отчеты и обработки: Выполнение серверного метода обработки'")); - Если РезультатФоновогоЗадания.ЗаданиеВыполнено Тогда - Результат.Выполнено = Истина; - Результат.Значение = ПолучитьИзВременногоХранилища(РезультатФоновогоЗадания.АдресХранилища); + Задание.Завершено = Истина; + Задание.Успешно = Истина; + Задание.Значение = ПолучитьИзВременногоХранилища(РезультатФоновогоЗадания.АдресХранилища); Иначе ФоновоеЗаданиеИдентификатор = РезультатФоновогоЗадания.ИдентификаторЗадания; ФоновоеЗаданиеАдресХранилища = РезультатФоновогоЗадания.АдресХранилища; КонецЕсли; Исключение - Результат.ВызваноИсключение = Истина; - ДополнительныеОтчетыИОбработки.ЗаписатьОшибку( - ПараметрыВызоваСервера.ДополнительнаяОбработкаСсылка, - НСтр("ru = 'Команда %1: Ошибка выполнения:%2'"), - ПараметрыВызоваСервера.ИдентификаторКоманды, - Символы.ПС + ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); + Задание.Завершено = Истина; + Задание.Успешно = Ложь; + Задание.Значение = Новый Структура; + Текст = НСтр("ru = 'Не удалось выполнить команду.'"); + СтандартныеПодсистемыКлиентСервер.ВывестиИнформациюОбОшибке(Задание.Значение, Текст, ИнформацияОбОшибке()); КонецПопытки; - Возврат Результат; + Возврат Задание; КонецФункции &НаКлиенте -Процедура ПоказатьРезультатВыполненияОбработки(Результат, ЗакрытьЭтуФорму) +Процедура ПоказатьРезультатВыполненияОбработки(Задание, ЗакрытьЭтуФорму) // Добавление оповещения в результат выполнения (если требуется). - РезультатВыполнения = ?(Результат = Неопределено, Неопределено, Результат.Значение); - Если ВыполняемаяКоманда.ПоказыватьОповещение Тогда - Если РезультатВыполнения = Неопределено Тогда - РезультатВыполнения = СтандартныеПодсистемыКлиентСервер.НовыйРезультатВыполнения(); - КонецЕсли; - Если НЕ РезультатВыполнения.Свойство("ВыводОповещения") Тогда - РезультатВыполнения.Вставить("ВыводОповещения", Новый Структура("Использование, Заголовок, Текст, Картинка", Ложь)); - КонецЕсли; - Если РезультатВыполнения.ВыводОповещения.Использование <> Истина Тогда - РезультатВыполнения.ВыводОповещения.Использование = Истина; - РезультатВыполнения.ВыводОповещения.Заголовок = НСтр("ru = 'Команда выполнена'"); - РезультатВыполнения.ВыводОповещения.Текст = ВыполняемаяКоманда.Представление; - КонецЕсли; + РезультатВыполнения = Задание.Значение; + Если РезультатВыполнения = Неопределено Тогда + РезультатВыполнения = Новый Структура; КонецЕсли; - Если Результат <> Неопределено И Результат.ВызваноИсключение Тогда - // Переключение на страницу со списком команд. - Элементы.Страницы.ТекущаяСтраница = Элементы.СтраницаОткрытьОбработку; - Элементы.СтраницыКомандныеПанели.ТекущаяСтраница = Элементы.СтраницаКоманднаяПанельСтраницыОткрытьОбработку; - // Вывод сообщения об ошибке. - ТекстПредупреждения = НСтр("ru = 'Не удалось выполнить команду ""%1"". - |Подробности см. в журнале регистрации.'"); - ТекстПредупреждения = СтрЗаменить(ТекстПредупреждения, "%1", ВыполняемаяКоманда.Представление); - ПоказатьПредупреждение(, ТекстПредупреждения); - // Отмена закрытия. - Возврат; - КонецЕсли; - - // Обновить форму владельца - Если ЭтоФормаОбъекта Тогда - Попытка - ВладелецФормы.Прочитать(); - Исключение - // Действие не требуется. - КонецПопытки; + Если Задание.Успешно Тогда + // Показать всплывающее оповещение. + Если ВыполняемаяКоманда.ПоказыватьОповещение Тогда + СтандартныеПодсистемыКлиентСервер.ВывестиОповещение( + РезультатВыполнения, + НСтр("ru = 'Команда выполнена'"), + ВыполняемаяКоманда.Представление); + КонецЕсли; + + // Обновить форму владельца + Если ЭтоФормаОбъекта Тогда + Попытка + ВладелецФормы.Прочитать(); + Исключение + // Действие не требуется. + КонецПопытки; + КонецЕсли; КонецЕсли; // Фоновое задание уже завершилось. @@ -306,9 +292,9 @@ &НаКлиенте Процедура ПроверитьВыполнениеФоновогоЗадания() - Результат = ПроверитьВыполнениеФоновогоЗаданияНаСервере(ФоновоеЗаданиеИдентификатор, ФоновоеЗаданиеАдресХранилища); - Если Результат.Выполнено ИЛИ Результат.ВызваноИсключение Тогда - ПоказатьРезультатВыполненияОбработки(Результат, Истина); + Задание = ПроверитьВыполнениеФоновогоЗаданияНаСервере(ФоновоеЗаданиеИдентификатор, ФоновоеЗаданиеАдресХранилища); + Если Задание.Завершено Тогда + ПоказатьРезультатВыполненияОбработки(Задание, Истина); Иначе ДлительныеОперацииКлиент.ОбновитьПараметрыОбработчикаОжидания(ПараметрыОбработчика); ПодключитьОбработчикОжидания("ПроверитьВыполнениеФоновогоЗадания", ПараметрыОбработчика.ТекущийИнтервал, Истина); @@ -317,19 +303,24 @@ &НаСервереБезКонтекста Функция ПроверитьВыполнениеФоновогоЗаданияНаСервере(ФоновоеЗаданиеИдентификатор, ФоновоеЗаданиеАдресХранилища, Отменить = Ложь) - Результат = Новый Структура("Выполнено, ВызваноИсключение, Значение", Ложь, Ложь, Неопределено); + Задание = Новый Структура("Завершено, Успешно, Значение", Ложь, Неопределено, Неопределено); Попытка Если ДлительныеОперации.ЗаданиеВыполнено(ФоновоеЗаданиеИдентификатор) Тогда - Результат.Выполнено = Истина; - Результат.Значение = ПолучитьИзВременногоХранилища(ФоновоеЗаданиеАдресХранилища); + Задание.Завершено = Истина; + Задание.Успешно = Истина; + Задание.Значение = ПолучитьИзВременногоХранилища(ФоновоеЗаданиеАдресХранилища); КонецЕсли; Исключение - Результат.ВызваноИсключение = Истина; + Задание.Завершено = Истина; + Задание.Успешно = Ложь; + Задание.Значение = Новый Структура; + Текст = НСтр("ru = 'Не удалось выполнить команду.'"); + СтандартныеПодсистемыКлиентСервер.ВывестиИнформациюОбОшибке(Задание.Значение, Текст, ИнформацияОбОшибке()); КонецПопытки; - Если Отменить Тогда + Если Не Задание.Завершено И Отменить Тогда ДлительныеОперации.ОтменитьВыполнениеЗадания(ФоновоеЗаданиеИдентификатор); КонецЕсли; - Возврат Результат; + Возврат Задание; КонецФункции #КонецОбласти diff --git a/SSL/src/CommonForms/ДополнительныеПараметрыПроксиСервера/Form.form b/SSL/src/CommonForms/ДополнительныеПараметрыПроксиСервера/Form.form index 2146735a9..9f4799808 100644 --- a/SSL/src/CommonForms/ДополнительныеПараметрыПроксиСервера/Form.form +++ b/SSL/src/CommonForms/ДополнительныеПараметрыПроксиСервера/Form.form @@ -779,7 +779,6 @@ true true true - UseIfNecessary auto true @@ -1016,7 +1015,7 @@ КнопкаОК - Auto + DontUse Auto diff --git a/SSL/src/CommonForms/ДополнительныеПараметрыПроксиСервера/Module.bsl b/SSL/src/CommonForms/ДополнительныеПараметрыПроксиСервера/Module.bsl index ec79f8938..ba38939ed 100644 --- a/SSL/src/CommonForms/ДополнительныеПараметрыПроксиСервера/Module.bsl +++ b/SSL/src/CommonForms/ДополнительныеПараметрыПроксиСервера/Module.bsl @@ -179,7 +179,7 @@ ДлинаСтроки = СтрДлина(ПроверяемаяСтрока); Для Итератор = 1 По ДлинаСтроки Цикл ТекущийСимвол = Сред(ПроверяемаяСтрока, Итератор, 1); - Если Найти(ДопустимыеСимволы, ТекущийСимвол) = 0 Тогда + Если СтрНайти(ДопустимыеСимволы, ТекущийСимвол) = 0 Тогда Если СписокНедопустимыхСимволов.НайтиПоЗначению(ТекущийСимвол) = Неопределено Тогда СписокНедопустимыхСимволов.Добавить(ТекущийСимвол); КонецЕсли; diff --git a/SSL/src/CommonForms/ЗаполнениеРеквизитовКонтрагента/Form.form b/SSL/src/CommonForms/ЗаполнениеРеквизитовКонтрагента/Form.form new file mode 100644 index 000000000..5c5847bf1 --- /dev/null +++ b/SSL/src/CommonForms/ЗаполнениеРеквизитовКонтрагента/Form.form @@ -0,0 +1,1029 @@ + + + + ГруппаПоиск + 9 + + ГруппаРеквизитыПоиска + 46 + + СтрокаПоиска + 1 + true + true + + true + + + СтрокаПоиска + + true + None + + OnChange + СтрокаПоискаПриИзменении + + + СтрокаПоискаРасширеннаяПодсказка + 3 + Label + true + true + + Left + + + + СтрокаПоискаКонтекстноеМеню + 2 + true + + InputField + Enter + true + Left + true + + 35 + true + true + false + true + true + true + true + Normal + + ru + ИНН или наименование для поиска + + + + + Регион + 48 + true + true + + true + + + Регион + + None + + OnChange + РегионПриИзменении + + + РегионРасширеннаяПодсказка + 50 + Label + true + true + + Left + + + + РегионКонтекстноеМеню + 49 + true + + InputField + Enter + true + Left + true + + 25 + true + true + true + true + true + true + true + Normal + + + + Адрес + 4 + true + true + + true + + + Адрес + + None + + АдресРасширеннаяПодсказка + 6 + Label + true + true + + Left + + + + АдресКонтекстноеМеню + 5 + true + + InputField + Enter + true + Left + true + + 25 + true + true + false + true + true + true + true + Normal + + ru + Город, улица + + + + + КнопкаНайтиРеквизиты + 11 + true + true + + true + + + КнопкаНайтиРеквизитыРасширеннаяПодсказка + 12 + Label + true + true + + Left + + + UsualButton + Form.Command.НайтиКонтрагентов + Auto + true + true + true + UserCmds + Auto + + true + true + + true + + + <key>ru</key> + <value>Реквизиты поиска</value> + + + ru + Реквизиты поиска + + + ГруппаРеквизитыПоискаРасширеннаяПодсказка + 47 + Label + true + true + + Left + + + UsualGroup + + Auto + true + true + Auto + Auto + + + true + true + + true + + + <key>ru</key> + <value>Введите текст для поиска</value> + + + ru + Группа поиск + + + ГруппаПоискРасширеннаяПодсказка + 10 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + true + true + + Style.ФонУправляющегоПоля + + Auto + Auto + + + + Контрагенты + 13 + true + true + + true + + + Контрагенты + + None + Add + Change + Copy + Delete + EndEdit + + КонтрагентыНаименование + 32 + true + true + + true + + + Контрагенты.Наименование + + + КонтрагентыНаименованиеРасширеннаяПодсказка + 34 + Label + true + true + + Left + + + + КонтрагентыНаименованиеКонтекстноеМеню + 33 + true + + InputField + Auto + true + true + Left + true + + 40 + true + 4 + true + true + true + true + true + Normal + + + + КонтрагентыЮридическийАдрес + 35 + true + true + + true + + + Контрагенты.ЮридическийАдрес + + + КонтрагентыЮридическийАдресРасширеннаяПодсказка + 37 + Label + true + true + + Left + + + + КонтрагентыЮридическийАдресКонтекстноеМеню + 36 + true + + InputField + Auto + true + true + Left + true + + 30 + true + 3 + true + true + true + true + true + Normal + + + + КонтрагентыРуководитель + 38 + true + true + + true + + + Контрагенты.Руководитель + + + КонтрагентыРуководительРасширеннаяПодсказка + 40 + Label + true + true + + Left + + + + КонтрагентыРуководительКонтекстноеМеню + 39 + true + + InputField + Auto + true + Left + true + + 20 + true + true + true + true + true + true + Normal + + + + КонтрагентыИНН + 41 + true + true + + true + + + Контрагенты.ИНН + + + КонтрагентыИННРасширеннаяПодсказка + 43 + Label + true + true + + Left + + + + КонтрагентыИННКонтекстноеМеню + 42 + true + + InputField + Auto + true + Left + true + + 10 + true + true + false + true + true + true + true + Normal + + + None + + КонтрагентыКоманднаяПанель + 15 + Left + true + + + Selection + КонтрагентыВыбор + + + КонтрагентыСтрокаПоиска + 17 + + КонтрагентыСтрокаПоискаРасширеннаяПодсказка + 21 + Label + true + true + + Left + + + + КонтрагентыСтрокаПоискаКонтекстноеМеню + 20 + true + + Контрагенты + + true + + + + КонтрагентыСостояниеПросмотра + 22 + + КонтрагентыСостояниеПросмотраРасширеннаяПодсказка + 26 + Label + true + true + + Left + + + + КонтрагентыСостояниеПросмотраКонтекстноеМеню + 25 + true + + ViewStatusAddition + Контрагенты + + true + + + + КонтрагентыУправлениеПоиском + 27 + + КонтрагентыУправлениеПоискомРасширеннаяПодсказка + 31 + Label + true + true + + Left + + + + КонтрагентыУправлениеПоискомКонтекстноеМеню + 30 + true + + SearchControlAddition + Контрагенты + + true + + + + КонтрагентыРасширеннаяПодсказка + 16 + Label + true + true + + Left + + + + КонтрагентыКонтекстноеМеню + 14 + true + + true + true + true + 12 + true + true + MultiRow +
          true
          + 1 + 1 + AutoUse + AutoUse + true + true + false + true + Auto + Auto + true + true + true + true + true + +
          + + ГруппаПодвал + 60 + + Информация + 53 + true + true + + true + + + Информация + + None + + ИнформацияРасширеннаяПодсказка + 55 + Label + true + true + + Left + + + + ИнформацияКонтекстноеМеню + 54 + true + + LabelField + Enter + true + Left + true + + true + true + + + + ГруппаКоманднаяПанель + 56 + + КнопкаВыбратьКонтрагента + 44 + true + true + + true + + + КнопкаВыбратьКонтрагентаРасширеннаяПодсказка + 45 + Label + true + true + + Left + + + Form.Command.ВыбратьКонтрагента + Normal + Auto + true + true + UserCmds + Auto + + + Отмена + 62 + true + true + + true + + + ОтменаРасширеннаяПодсказка + 63 + Label + true + true + + Left + + + Form.StandardCommand.Cancel + Normal + Auto + true + true + UserCmds + Auto + + + Справка + 58 + true + true + + true + + + СправкаРасширеннаяПодсказка + 59 + Label + true + true + + Left + + + Form.StandardCommand.Help + Normal + Auto + true + true + UserCmds + Auto + + true + true + + true + + + <key>ru</key> + <value>Командная панель</value> + + + ru + Командная панель + + false + + ГруппаКоманднаяПанельРасширеннаяПодсказка + 57 + Label + true + true + + Left + + + CommandBar + + Right + + + true + true + + true + + + <key>ru</key> + <value>Подвал</value> + + + ru + Подвал + + + ГруппаПодвалРасширеннаяПодсказка + 61 + Label + true + true + + Left + + + UsualGroup + + Auto + true + true + Auto + Auto + + + None + false + + ФормаКоманднаяПанель + -1 + Right + true + + + OnOpen + ПриОткрытии + + + OnLoadDataFromSettingsAtServer + ПриЗагрузкеДанныхИзНастроекНаСервере + + + OnCreateAtServer + ПриСозданииНаСервере + + LockOwner + Use + true + true + true + Vertical + true + true + true + auto + true + + СтрокаПоиска + + <key>ru</key> + <value>Строка для поиска</value> + + 1 + + String + + 250 + + + + true + + + true + + ShowError + + + Адрес + + <key>ru</key> + <value>Адрес для поиска</value> + + 2 + + String + + 100 + + + + true + + + true + + + + Контрагенты + + <key>ru</key> + <value>Контрагенты</value> + + 3 + + ValueTable + + + true + + + true + + + Наименование + + <key>ru</key> + <value>Наименование</value> + + 1 + + String + + + + true + + + true + + + + ЮридическийАдрес + + <key>ru</key> + <value>Юридический адрес</value> + + 2 + + String + + + + true + + + true + + + + Руководитель + + <key>ru</key> + <value>Руководитель</value> + + 3 + + String + + + + true + + + true + + + + ИНН + + <key>ru</key> + <value>ИНН</value> + + 4 + + String + + 12 + + + + true + + + true + + + + + Регион + + <key>ru</key> + <value>Регион для поиска</value> + + 5 + + + true + + + true + + + Регион + + + + КоличествоНайденных + + <key>ru</key> + <value>Количество найденных</value> + + 4 + + Number + + 5 + true + + + + true + + + true + + + + Информация + + <key>ru</key> + <value>Информация</value> + + 6 + + String + + + + true + + + true + + + + НайтиКонтрагентов + + <key>ru</key> + <value>Найти</value> + + 1 + + ru + Найти похожих контрагентов в данных ЕГРЮЛ + + + true + + + + НайтиКонтрагентов + + + DontUse + Auto + + + ВыбратьКонтрагента + + <key>ru</key> + <value>Выбрать</value> + + 2 + + ru + Выбрать контрагента + + + true + + + + ВыбратьКонтрагента + + + DontUse + Auto + + + СтрокаПоиска + + String + + + + + Заголовок + + String + + + + + + + +
          diff --git a/SSL/src/CommonForms/ЗаполнениеРеквизитовКонтрагента/Help/ru.html b/SSL/src/CommonForms/ЗаполнениеРеквизитовКонтрагента/Help/ru.html new file mode 100644 index 000000000..54cac556d --- /dev/null +++ b/SSL/src/CommonForms/ЗаполнениеРеквизитовКонтрагента/Help/ru.html @@ -0,0 +1,10 @@ + +

          Заполнение реквизитов контрагента

          +

          +

          Форма предназначена для автоматического заполнения реквизитов контрагента на основании данных Единого государственного реестра юридических лиц (ЕГРЮЛ).

          +

          Для поиска в ЕГРЮЛ необходимо указать одно или несколько слов из наименования контрагента или его ИНН и нажать "Найти".

          +

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

          +

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

          +

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

          +

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

          +

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

          \ 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..03a5cfd3f --- /dev/null +++ b/SSL/src/CommonForms/ЗаполнениеРеквизитовКонтрагента/Module.bsl @@ -0,0 +1,271 @@ +#Область ОбработчикиСобытийФормы + +&НаСервере +Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) + + СтрокаПоиска = Параметры.СтрокаПоиска; + Если НЕ ПустаяСтрока(Параметры.Заголовок) Тогда + Заголовок = Параметры.Заголовок; + КонецЕсли; + + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.АдресныйКлассификатор") Тогда + + МодульАдресныйКлассификатор = ОбщегоНазначения.ОбщийМодуль("АдресныйКлассификатор"); + ТаблицаРегионов = МодульАдресныйКлассификатор.КлассификаторСубъектовРФ(); + Элементы.Регион.СписокВыбора.Очистить(); + Для каждого СтрокаТаблицы Из ТаблицаРегионов Цикл + Элементы.Регион.СписокВыбора.Добавить( + Формат(СтрокаТаблицы.КодСубъектаРФ, "ЧЦ=2; ЧДЦ=; ЧВН="), + СтрокаТаблицы.Наименование + " " + СтрокаТаблицы.Сокращение); + КонецЦикла; + Элементы.Регион.СписокВыбора.СортироватьПоПредставлению(); + + КонецЕсли; + + Элементы.Регион.СписокВыбора.Вставить(0, "", НСтр("ru='Все регионы'")); + Регион = ""; + УправлениеФормой(ЭтотОбъект); + +КонецПроцедуры + +&НаКлиенте +Процедура ПриОткрытии(Отказ) + + Если ЗначениеЗаполнено(СтрокаПоиска) Тогда + ПодключитьОбработчикОжидания("ВыполнитьПоискКонтрагентов", 0.1, Истина); + КонецЕсли; + +КонецПроцедуры + +&НаСервере +Процедура ПриЗагрузкеДанныхИзНастроекНаСервере(Настройки) + + Регион = Настройки["Регион"]; + Если Элементы.Регион.СписокВыбора.НайтиПоЗначению(Регион) = Неопределено Тогда + Регион = ""; + КонецЕсли; + +КонецПроцедуры + +#КонецОбласти + +#Область ОбработчикиСобытийЭлементовШапкиФормы + +&НаКлиенте +Процедура СтрокаПоискаПриИзменении(Элемент) + + Если ЭтоИНН(СтрокаПоиска) Тогда + Адрес = ""; + ВыполнитьПоискКонтрагентов(); + КонецЕсли; + УправлениеФормой(ЭтотОбъект); + +КонецПроцедуры + +&НаКлиенте +Процедура РегионПриИзменении(Элемент) + + Если Элементы.Регион.СписокВыбора.НайтиПоЗначению(Регион) = Неопределено Тогда + Регион = ""; + КонецЕсли; + +КонецПроцедуры + +#КонецОбласти + +#Область ОбработчикиСобытийЭлементовТаблицыФормыКонтрагенты + +&НаКлиенте +Процедура КонтрагентыВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка) + + СтандартнаяОбработка = Ложь; + ВыполнитьВыборКонтрагента(); + +КонецПроцедуры + +#КонецОбласти + +#Область ОбработчикиКомандФормы + +&НаКлиенте +Процедура НайтиКонтрагентов(Команда) + + ВыполнитьПоискКонтрагентов(); + +КонецПроцедуры + +&НаКлиенте +Процедура ВыбратьКонтрагента(Команда) + + ВыполнитьВыборКонтрагента(); + +КонецПроцедуры + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +&НаКлиентеНаСервереБезКонтекста +Функция ЭтоИНН(СтрокаПоиска) + + Результат = ЗначениеЗаполнено(СтрокаПоиска) + И (СтрДлина(СтрокаПоиска) = 10 ИЛИ СтрДлина(СтрокаПоиска) = 12) + И СтроковыеФункцииКлиентСервер.ТолькоЦифрыВСтроке(СтрокаПоиска); + Возврат Результат; + +КонецФункции + +&НаКлиенте +Процедура ВыполнитьПоискКонтрагентов() Экспорт + + ОписаниеОшибки = ""; + НайтиРеквизитыНаСервере(ОписаниеОшибки); + + // Обработка ошибок + Если ЗначениеЗаполнено(ОписаниеОшибки) Тогда + Если ОписаниеОшибки = "НеУказаныПараметрыАутентификации" Тогда + ТекстВопроса = НСтр("ru='Для автоматического заполнения реквизитов контрагентов + |необходимо подключиться к интернет-поддержке пользователей. + |Подключиться сейчас?'"); + ОписаниеОповещения = Новый ОписаниеОповещения("ПодключитьИнтернетПоддержку", ЭтотОбъект); + ПоказатьВопрос(ОписаниеОповещения, ТекстВопроса, РежимДиалогаВопрос.ДаНет); + ИначеЕсли ОписаниеОшибки = "НеУказанПароль" Тогда + ТекстВопроса = НСтр("ru='Необходимо указать пароль к Интернет-поддержке пользователей + |и установить флажок ""Запомнить пароль"". + |Указать сейчас?'"); + ОписаниеОповещения = Новый ОписаниеОповещения("ПодключитьИнтернетПоддержку", ЭтотОбъект); + ПоказатьВопрос(ОписаниеОповещения, ТекстВопроса, РежимДиалогаВопрос.ДаНет); + Иначе + ПоказатьПредупреждение(, ОписаниеОшибки); + КонецЕсли; + ИначеЕсли КоличествоНайденных > 20 Тогда + ТекстПредупреждения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru='Найдено слишком много похожих контрагентов (%1). Уточните реквизиты для поиска.'"), + КоличествоНайденных); + ПоказатьПредупреждение(, ТекстПредупреждения); + ИначеЕсли НЕ ПустаяСтрока(СтрокаПоиска) И КоличествоНайденных = 0 Тогда + ПоказатьПредупреждение(, НСтр("ru='Ничего не найдено. Уточните реквизиты для поиска.'")); + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура ВыполнитьВыборКонтрагента() + + ТекДанные = Элементы.Контрагенты.ТекущиеДанные; + Если ТекДанные = Неопределено Тогда + Если Контрагенты.Количество() = 0 Тогда + ТекстПредупреждения = НСтр("ru='Ничего не найдено. Уточните реквизиты и нажмите ""Найти"".'"); + ПоказатьПредупреждение(, ТекстПредупреждения); + КонецЕсли; + Возврат; + КонецЕсли; + + ОповеститьОВыборе(ТекДанные.ИНН); + +КонецПроцедуры + +&НаСервере +Процедура НайтиРеквизитыНаСервере(ОписаниеОшибки) + + Если НЕ ПроверитьЗаполнение() Тогда + Возврат; + КонецЕсли; + + Информация = ""; + Контрагенты.Очистить(); + КоличествоНайденных = 0; + + ПоискПоИНН = ЭтоИНН(СтрокаПоиска); + ПоискЮридическогоЛица = (ПоискПоИНН И СтрДлина(СтрокаПоиска) = 10) + ИЛИ НЕ ПоискПоИНН; + Если ПоискПоИНН Тогда + Если ПоискЮридическогоЛица Тогда + НайденныеРеквизиты = ДанныеЕдиныхГосРеестров.РеквизитыЮридическогоЛицаПоИНН(СтрокаПоиска); + Иначе + НайденныеРеквизиты = ДанныеЕдиныхГосРеестров.РеквизитыПредпринимателяПоИНН(СтрокаПоиска); + КонецЕсли; + Иначе + НайденныеРеквизиты = ДанныеЕдиныхГосРеестров.РеквизитыЮридическихЛицПоНаименованию(СтрокаПоиска, Регион, Адрес); + КонецЕсли; + Если ЗначениеЗаполнено(НайденныеРеквизиты.ОписаниеОшибки) Тогда + ОписаниеОшибки = НайденныеРеквизиты.ОписаниеОшибки; + Возврат; + КонецЕсли; + + Если ПоискПоИНН Тогда + НоваяСтрока = Контрагенты.Добавить(); + НоваяСтрока.ИНН = НайденныеРеквизиты.ИНН; + Если ПоискЮридическогоЛица Тогда + НоваяСтрока.Наименование = НайденныеРеквизиты.НаименованиеПолное; + Если НайденныеРеквизиты.ЮридическийАдрес <> Неопределено Тогда + НоваяСтрока.ЮридическийАдрес = НайденныеРеквизиты.ЮридическийАдрес.Представление; + КонецЕсли; + Если НайденныеРеквизиты.Руководитель <> Неопределено Тогда + НоваяСтрока.Руководитель = НайденныеРеквизиты.Руководитель.Представление; + КонецЕсли; + Иначе + НоваяСтрока.Наименование = НайденныеРеквизиты.Наименование; + КонецЕсли; + КоличествоНайденных = 1; + Иначе + Для каждого РеквизитыОрганизации Из НайденныеРеквизиты.РеквизитыОрганизаций Цикл + НоваяСтрока = Контрагенты.Добавить(); + НоваяСтрока.ИНН = РеквизитыОрганизации.ИНН; + НоваяСтрока.Наименование = РеквизитыОрганизации.НаименованиеПолное; + Если РеквизитыОрганизации.ЮридическийАдрес <> Неопределено Тогда + НоваяСтрока.ЮридическийАдрес = РеквизитыОрганизации.ЮридическийАдрес.Представление; + КонецЕсли; + Если РеквизитыОрганизации.Руководитель <> Неопределено Тогда + НоваяСтрока.Руководитель = РеквизитыОрганизации.Руководитель.Фамилия + + " " + РеквизитыОрганизации.Руководитель.Имя + + " " + РеквизитыОрганизации.Руководитель.Отчество; + КонецЕсли; + КонецЦикла; + КоличествоНайденных = НайденныеРеквизиты.КоличествоНайденных; + КонецЕсли; + + Если КоличествоНайденных > 20 Тогда + ТекущийЭлемент = Элементы.СтрокаПоиска; + Информация = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru='Показаны первые 20 контрагентов из %1 найденных. Уточните реквизиты для поиска.'"), + КоличествоНайденных); + ИначеЕсли КоличествоНайденных > 0 Тогда + ТекущийЭлемент = Элементы.Контрагенты; + Элементы.Контрагенты.ТекущаяСтрока = Контрагенты[0].ПолучитьИдентификатор(); + Иначе + ТекущийЭлемент = Элементы.СтрокаПоиска; + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура ПодключитьИнтернетПоддержку(Ответ, ДопПараметры) Экспорт + + Если Ответ = КодВозвратаДиалога.Да Тогда + ОписаниеОповещения = Новый ОписаниеОповещения("ПодключитьИнтернетПоддержкуЗавершение", ЭтотОбъект, ДопПараметры); + СтандартныеПодсистемыКлиент.АвторизоватьНаСайтеПоддержкиПользователей(ЭтотОбъект, ОписаниеОповещения); + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура ПодключитьИнтернетПоддержкуЗавершение(Результат, ДопПараметры) Экспорт + + Если Результат <> Неопределено Тогда + ВыполнитьПоискКонтрагентов(); + КонецЕсли; + +КонецПроцедуры + +&НаКлиентеНаСервереБезКонтекста +Процедура УправлениеФормой(Форма) + + ЭтоИНН = ЭтоИНН(Форма.СтрокаПоиска); + Форма.Элементы.Регион.Доступность = НЕ ЭтоИНН; + Форма.Элементы.Адрес.Доступность = НЕ ЭтоИНН; + +КонецПроцедуры + +#КонецОбласти + diff --git a/SSL/src/CommonForms/ЗаполнениеРеквизитовКонтрагента/ЗаполнениеРеквизитовКонтрагента.mdo b/SSL/src/CommonForms/ЗаполнениеРеквизитовКонтрагента/ЗаполнениеРеквизитовКонтрагента.mdo new file mode 100644 index 000000000..36b7f4aa3 --- /dev/null +++ b/SSL/src/CommonForms/ЗаполнениеРеквизитовКонтрагента/ЗаполнениеРеквизитовКонтрагента.mdo @@ -0,0 +1,16 @@ + + + ЗаполнениеРеквизитовКонтрагента + + ru + Заполнение реквизитов контрагента + + + + ru + + + PersonalComputer + MobileDevice + true + diff --git a/SSL/src/CommonForms/ИнформацияНеразделенногоПользователя/Form.form b/SSL/src/CommonForms/ИнформацияНеразделенногоПользователя/Form.form deleted file mode 100644 index ab9119a02..000000000 --- a/SSL/src/CommonForms/ИнформацияНеразделенногоПользователя/Form.form +++ /dev/null @@ -1,108 +0,0 @@ - - - - <key>ru</key> - <value>Служебный пользователь</value> - - - НеразделенныйПользователь - 1 - - <key>ru</key> - <value>Неразделенный пользователь</value> - - true - true - - true - - - НеразделенныйПользовательExtendedTooltip - 3 - Label - true - true - - Left - - - - НеразделенныйПользовательКонтекстноеМеню - 2 - true - - Label - true - true - - Left - - - None - false - - ФормаКоманднаяПанель - -1 - Left - true - - - OnCreateAtServer - ПриСозданииНаСервере - - LockOwner - true - true - Vertical - true - true - UseIfNecessary - auto - true - - - - 0 - - - - 0 - - - - 0 - - - - 0 - - - - - - 0 - - - - 0 - - - - 0 - - - - 0 - - - - 0 - - - - 0 - - - - - diff --git a/SSL/src/CommonForms/ИнформацияНеразделенногоПользователя/Module.bsl b/SSL/src/CommonForms/ИнформацияНеразделенногоПользователя/Module.bsl deleted file mode 100644 index 2e41c5919..000000000 --- a/SSL/src/CommonForms/ИнформацияНеразделенногоПользователя/Module.bsl +++ /dev/null @@ -1,17 +0,0 @@ - -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ - -&НаСервере -Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) - - Если Параметры.Свойство("АвтоТест") Тогда // Возврат при получении формы для анализа. - Возврат; - КонецЕсли; - - ШаблонСообщения = НСтр("ru = 'Просмотр сведений о пользователе %1 не доступен, т.к. это - |служебная учетная запись, предусмотренная для администраторов сервиса.'"); - Элементы.НеразделенныйПользователь.Заголовок = - СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонСообщения, Параметры.Ключ.Наименование); - -КонецПроцедуры diff --git a/SSL/src/CommonForms/МастерАнкетыПоРазделам/Form.form b/SSL/src/CommonForms/МастерАнкетыПоРазделам/Form.form index 91ebf62b0..2e5c9da11 100644 --- a/SSL/src/CommonForms/МастерАнкетыПоРазделам/Form.form +++ b/SSL/src/CommonForms/МастерАнкетыПоРазделам/Form.form @@ -1042,7 +1042,6 @@ true true true - UseIfNecessary auto true @@ -2167,7 +2166,7 @@ СкрытьПоказатьДеревоРазделов - Auto + DontUse Auto @@ -2189,7 +2188,7 @@ ПредыдущийРаздел - Auto + DontUse Auto @@ -2211,7 +2210,7 @@ СледующийРаздел - Auto + DontUse Auto @@ -2233,7 +2232,7 @@ ВыборРаздела - Auto + DontUse Auto diff --git a/SSL/src/CommonForms/МастерАнкетыПоРазделам/Module.bsl b/SSL/src/CommonForms/МастерАнкетыПоРазделам/Module.bsl index 3f00a04af..2bb89dd1a 100644 --- a/SSL/src/CommonForms/МастерАнкетыПоРазделам/Module.bsl +++ b/SSL/src/CommonForms/МастерАнкетыПоРазделам/Module.bsl @@ -10,7 +10,7 @@ Возврат; КонецЕсли; - Если Параметры.Свойство("ШаблонАнкеты") = Ложь Тогда + Если НЕ Параметры.Свойство("ШаблонАнкеты") Тогда Отказ = Истина; Возврат; Иначе diff --git a/SSL/src/CommonForms/НапоминаниеПриРедактировании/Form.form b/SSL/src/CommonForms/НапоминаниеПриРедактировании/Form.form index eb29e89f6..cc2a13603 100644 --- a/SSL/src/CommonForms/НапоминаниеПриРедактировании/Form.form +++ b/SSL/src/CommonForms/НапоминаниеПриРедактировании/Form.form @@ -301,6 +301,32 @@ UserCmds Auto + + ФормаОтмена + 28 + true + true + + true + + + ФормаОтменаРасширеннаяПодсказка + 29 + Label + true + true + + Left + + + Form.StandardCommand.Cancel + Normal + Auto + true + true + UserCmds + Auto + Right @@ -318,7 +344,6 @@ true true true - UseIfNecessary auto true @@ -375,7 +400,7 @@ ПродолжитьВыполнить - Auto + DontUse Auto diff --git a/SSL/src/CommonForms/НапоминаниеПриРедактировании/Module.bsl b/SSL/src/CommonForms/НапоминаниеПриРедактировании/Module.bsl index 409540535..8b0346e85 100644 --- a/SSL/src/CommonForms/НапоминаниеПриРедактировании/Module.bsl +++ b/SSL/src/CommonForms/НапоминаниеПриРедактировании/Module.bsl @@ -17,7 +17,7 @@ СистемнаяИнформация = Новый СистемнаяИнформация; - Если Найти(СистемнаяИнформация.ИнформацияПрограммыПросмотра, "Firefox") <> 0 Тогда + Если СтрНайти(СистемнаяИнформация.ИнформацияПрограммыПросмотра, "Firefox") <> 0 Тогда Элементы.Дополнения.ТекущаяСтраница = Элементы.MozillaFireFox; Иначе Элементы.Дополнения.ТекущаяСтраница = Элементы.Пустая; @@ -31,13 +31,16 @@ &НаКлиенте Процедура ПродолжитьВыполнить(Команда) + Если БольшеНеПоказывать = Истина Тогда ОбщегоНазначенияВызовСервера.ХранилищеОбщихНастроекСохранитьИОбновитьПовторноИспользуемыеЗначения( "НастройкиПрограммы", "ПоказыватьПодсказкиПриРедактированииФайлов", Ложь); КонецЕсли; - Закрыть(БольшеНеПоказывать); + + Закрыть(Истина); + КонецПроцедуры #КонецОбласти diff --git a/SSL/src/CommonForms/Настройка1СБухфон/Form.form b/SSL/src/CommonForms/Настройка1СБухфон/Form.form index db72440f9..a8460bd1f 100644 --- a/SSL/src/CommonForms/Настройка1СБухфон/Form.form +++ b/SSL/src/CommonForms/Настройка1СБухфон/Form.form @@ -714,7 +714,6 @@ true true true - UseIfNecessary auto true @@ -829,7 +828,7 @@ ПолучитьАккаунт1СБухфон - Auto + DontUse Auto @@ -851,7 +850,7 @@ ТехническиеТребования - Auto + DontUse Auto @@ -873,7 +872,7 @@ Сохранить - Auto + DontUse Auto @@ -895,7 +894,7 @@ СкачайтеПрограмму - Auto + DontUse Auto diff --git a/SSL/src/CommonForms/НастройкаКомандПечати/ConditionalAppearance.dcssca b/SSL/src/CommonForms/НастройкаКомандПечати/ConditionalAppearance.dcssca new file mode 100644 index 000000000..132e9ef43 --- /dev/null +++ b/SSL/src/CommonForms/НастройкаКомандПечати/ConditionalAppearance.dcssca @@ -0,0 +1,59 @@ + + + + false + + + КомандыПечати + + + + + КомандыПечати.МенеджерПечати + Contains + ДополнительныеОтчетыИОбработки + + + + + Шрифт + + + + + + + + КомандыПечати + + + + + КомандыПечати.Видимость + Equal + 0 + + + + + ЦветТекста + web:Gray + + + + + + + + КомандыПечати.Владелец + Filled + + + + + Шрифт + + + + + diff --git a/SSL/src/CommonForms/НастройкаКомандПечати/Form.form b/SSL/src/CommonForms/НастройкаКомандПечати/Form.form new file mode 100644 index 000000000..bf266d73d --- /dev/null +++ b/SSL/src/CommonForms/НастройкаКомандПечати/Form.form @@ -0,0 +1,845 @@ + + + + <key>ru</key> + <value>Настройка подменю "Печать"</value> + + + КомандыПечати + 1 + true + true + + true + + + КомандыПечати + + None + + КомандыПечатиГруппа1 + 32 + + КомандыПечатиВидимость + 11 + + <key>ru</key> + <value>Использование</value> + + true + true + + true + + + КомандыПечати.Видимость + + + OnChange + КомандыПечатиВидимостьПриИзменении + + + КомандыПечатиВидимостьРасширеннаяПодсказка + 13 + Label + true + true + + Left + + + + КомандыПечатиВидимостьКонтекстноеМеню + 12 + true + + CheckBoxField + Auto + Left + true + + true + + + + КомандыПечатиПредставление + 8 + + <key>ru</key> + <value>Команда печати</value> + + true + true + + true + + + КомандыПечати.Представление + + + КомандыПечатиПредставлениеРасширеннаяПодсказка + 10 + Label + true + true + + Left + + + + КомандыПечатиПредставлениеКонтекстноеМеню + 9 + true + + InputField + true + Auto + true + Left + true + + true + true + true + true + true + true + true + Normal + + + true + true + + true + + + <key>ru</key> + <value>Команда Печати</value> + + + КомандыПечатиГруппа1РасширеннаяПодсказка + 33 + Label + true + true + + Left + + + ColumnGroup + + InCell + auto + true + + + + КомандыПечатиГруппа2 + 44 + + КомандыПечатиКомментарий + 34 + + <key>ru</key> + <value>Внешняя печатная форма</value> + + true + true + + true + + + КомандыПечати.Комментарий + + + КомандыПечатиКомментарийРасширеннаяПодсказка + 36 + Label + true + true + + Left + + + + КомандыПечатиКомментарийКонтекстноеМеню + 35 + true + + InputField + true + Auto + true + true + Left + true + Show + Always + + true + true + true + true + true + true + Normal + + + true + true + + true + + + КомандыПечатиГруппа2РасширеннаяПодсказка + 45 + Label + true + true + + Left + + + ColumnGroup + + InCell + auto + true + + + + КомандыПечатиКоманднаяПанель + 3 + Left + + + Selection + КомандыПечатиВыбор + + + КомандыПечатиСтрокаПоиска + 23 + + КомандыПечатиСтрокаПоискаРасширеннаяПодсказка + 25 + Label + true + true + + Left + + + + КомандыПечатиСтрокаПоискаКонтекстноеМеню + 24 + true + + КомандыПечати + + true + + + + КомандыПечатиСостояниеПросмотра + 26 + + КомандыПечатиСостояниеПросмотраРасширеннаяПодсказка + 28 + Label + true + true + + Left + + + + КомандыПечатиСостояниеПросмотраКонтекстноеМеню + 27 + true + + ViewStatusAddition + КомандыПечати + + true + + + + КомандыПечатиУправлениеПоиском + 29 + + КомандыПечатиУправлениеПоискомРасширеннаяПодсказка + 31 + Label + true + true + + Left + + + + КомандыПечатиУправлениеПоискомКонтекстноеМеню + 30 + true + + SearchControlAddition + КомандыПечати + + true + + + + КомандыПечатиРасширеннаяПодсказка + 4 + Label + true + true + + Left + + + + КомандыПечатиКонтекстноеМеню + 2 + true + + Tree + true + true + true + MultiRow +
          true
          + 1 + 1 + AutoUse + AutoUse + true + true + true + Auto + Auto + true + true + true + true + None + None + None + true +
          + + ФормаКоманднаяПанель + -1 + + ФормаЗаписатьИЗакрыть + 46 + true + true + + true + + + ФормаЗаписатьИЗакрытьРасширеннаяПодсказка + 47 + Label + true + true + + Left + + + Form.Command.ЗаписатьИЗакрыть + Auto + true + true + true + UserCmds + Auto + + + ФормаПоказатьВСписке + 48 + true + true + + true + + + ФормаПоказатьВСпискеРасширеннаяПодсказка + 49 + Label + true + true + + Left + + + Form.Command.ПоказатьВСписке + Normal + Auto + true + true + UserCmds + Auto + + + ФормаУстановитьФлажки + 19 + true + true + + true + + + ФормаУстановитьФлажкиРасширеннаяПодсказка + 20 + Label + true + true + + Left + + + Form.Command.УстановитьФлажки + Normal + Auto + true + true + UserCmds + Auto + + + ФормаСнятьФлажки + 21 + true + true + + true + + + ФормаСнятьФлажкиРасширеннаяПодсказка + 22 + Label + true + true + + Left + + + Form.Command.СнятьФлажки + Normal + Auto + true + true + UserCmds + Auto + + + ФормаГруппа1 + 39 + + ФормаУстановитьНастройкиПоУмолчанию + 37 + + <key>ru</key> + <value>Перечитать</value> + + true + true + + true + + + ФормаУстановитьНастройкиПоУмолчаниюРасширеннаяПодсказка + 38 + Label + true + true + + Left + + + Form.Command.УстановитьНастройкиПоУмолчанию + Normal + Auto + true + true + UserCmds + Auto + InAdditionalSubmenu + + true + true + + true + + + ФормаГруппа1РасширеннаяПодсказка + 40 + Label + true + true + + Left + + + + + Left + true + + + OnCreateAtServer + ПриСозданииНаСервере + + Abort + Cancel + Close + Ignore + No + OK + RestoreValues + Retry + SaveValues + Yes + 60 + 10 + DontBlock + true + true + Vertical + true + true + true + auto + true + + КомандыПечати + + <key>ru</key> + <value>Команды печати</value> + + 1 + + ValueTree + + + true + + + true + + true + + Владелец + + <key>ru</key> + <value>Владелец</value> + + 1 + + CatalogRef.ИдентификаторыОбъектовМетаданных + + + true + + + true + + + + Представление + + <key>ru</key> + <value>Представление</value> + + 2 + + String + + + + true + + + true + + + + Видимость + + <key>ru</key> + <value>Видимость</value> + + 3 + + Number + + 1 + true + + + + true + + + true + + + + Картинка + + <key>ru</key> + <value>Картинка</value> + + 4 + + Picture + + + true + + + true + + + + УникальныйИдентификатор + + <key>ru</key> + <value>Уникальный идентификатор</value> + + 5 + + String + + + + true + + + true + + + + МенеджерПечати + + <key>ru</key> + <value>Менеджер печати</value> + + 6 + + String + + + + true + + + true + + + + Комментарий + + <key>ru</key> + <value>Комментарий</value> + + 7 + + String + + + + true + + + true + + + + НавигационнаяСсылка + + <key>ru</key> + <value>Навигационная ссылка</value> + + 8 + + String + + + + true + + + true + + + + ЭтоВнешняяКомандаПечати + + <key>ru</key> + <value>Это внешняя команда печати</value> + + 9 + + Boolean + + + true + + + true + + + + + Отбор + + <key>ru</key> + <value>Отбор</value> + + 4 + + ValueList + + + true + + + true + + + + + + + УстановитьФлажки + + <key>ru</key> + <value>Установить флажки</value> + + 1 + + ru + Установить флажки + + + true + + + StdPicture.CheckAll + + + + УстановитьФлажки + + + DontUse + Auto + + + СнятьФлажки + + <key>ru</key> + <value>Снять флажки</value> + + 2 + + ru + Снять флажки + + + true + + + StdPicture.UncheckAll + + + + СнятьФлажки + + + DontUse + Auto + + + УстановитьНастройкиПоУмолчанию + + <key>ru</key> + <value>Установить настройки по умолчанию</value> + + 3 + + ru + Перечитать настройки + + + true + + + StdPicture.Reread + + + + УстановитьНастройкиПоУмолчанию + + + DontUse + Auto + + + ЗаписатьИЗакрыть + + <key>ru</key> + <value>Записать и закрыть</value> + + 4 + + ru + Записать и закрыть + + + true + + + + ЗаписатьИЗакрыть + + + DontUse + Auto + + + ПоказатьВСписке + + <key>ru</key> + <value>Перейти в список</value> + + 5 + + ru + Показать в списке + + + true + + + + ПоказатьВСписке + + + DontUse + Auto + + + Отбор + + ValueList + + + + + + +
          diff --git a/SSL/src/CommonForms/НастройкаКомандПечати/Module.bsl b/SSL/src/CommonForms/НастройкаКомандПечати/Module.bsl new file mode 100644 index 000000000..0cf7ddd37 --- /dev/null +++ b/SSL/src/CommonForms/НастройкаКомандПечати/Module.bsl @@ -0,0 +1,267 @@ + +#Область ОбработчикиСобытийФормы + +&НаСервере +Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) + + Отбор = Параметры.Отбор; + + Если Отбор.Количество() > 0 Тогда + Элементы.КомандыПечати.НачальноеОтображениеДерева = НачальноеОтображениеДерева.РаскрыватьВсеУровни; + КонецЕсли; + + ЗаполнитьСписокКомандПечати(); + +КонецПроцедуры + +#КонецОбласти + +#Область ОбработчикиСобытийЭлементовТаблицыФормыКомандыПечати + +&НаКлиенте +Процедура КомандыПечатиВидимостьПриИзменении(Элемент) + ПриИзмененииФлажка(Элементы.КомандыПечати, "Видимость"); +КонецПроцедуры + +#КонецОбласти + +#Область ОбработчикиКомандФормы + +&НаКлиенте +Процедура ЗаписатьИЗакрыть(Команда) + Записать(); + Закрыть(); +КонецПроцедуры + +&НаКлиенте +Процедура ПоказатьВСписке(Команда) + + Если Модифицированность Тогда + Оповещение = Новый ОписаниеОповещения("ПоказатьВСпискеЗавершение", ЭтотОбъект, Параметры); + ТекстВопроса = НСтр("ru = 'Данные были изменены. Сохранить изменения?'"); + ПоказатьВопрос(Оповещение, ТекстВопроса, РежимДиалогаВопрос.ДаНетОтмена, , + КодВозвратаДиалога.Отмена); + Возврат; + КонецЕсли; + + ПерейтиКСписку(); + +КонецПроцедуры + +&НаКлиенте +Процедура УстановитьФлажки(Команда) + ЗаполнитьЗначениеРеквизитаКоллекции(КомандыПечати, "Видимость", Истина); +КонецПроцедуры + +&НаКлиенте +Процедура СнятьФлажки(Команда) + ЗаполнитьЗначениеРеквизитаКоллекции(КомандыПечати, "Видимость", Ложь); +КонецПроцедуры + +&НаКлиенте +Процедура УстановитьНастройкиПоУмолчанию(Команда) + ЗаполнитьСписокКомандПечати(); + Модифицированность = Ложь; +КонецПроцедуры + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +&НаСервере +Процедура ОбновитьФлажокВладельцаКоманд(ВладелецКоманд) + ЕстьВыбранныеЭлементы = Ложь; + ВыбраныВсеЭлементы = Истина; + Для Каждого КомандаПечати Из ВладелецКоманд.ПолучитьЭлементы() Цикл + ЕстьВыбранныеЭлементы = ЕстьВыбранныеЭлементы Или КомандаПечати.Видимость; + ВыбраныВсеЭлементы = ВыбраныВсеЭлементы И КомандаПечати.Видимость; + КонецЦикла; + ВладелецКоманд.Видимость = ЕстьВыбранныеЭлементы + ?(ЕстьВыбранныеЭлементы, (Не ВыбраныВсеЭлементы), ЕстьВыбранныеЭлементы); +КонецПроцедуры + +&НаКлиенте +Процедура КомандыПечатиВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка) + Если Поле.Имя = Элементы.КомандыПечатиКомментарий.Имя + И Не ПустаяСтрока(Элементы.КомандыПечати.ТекущиеДанные.НавигационнаяСсылка) Тогда + ПерейтиПоНавигационнойСсылке(Элементы.КомандыПечати.ТекущиеДанные.НавигационнаяСсылка); + КонецЕсли; +КонецПроцедуры + +&НаСервере +Процедура ЗаписатьНастройкиКоманд() + НаборЗаписей = РегистрыСведений.НастройкиКомандПечати.СоздатьНаборЗаписей(); + Для Каждого НаборКоманд Из КомандыПечати.ПолучитьЭлементы() Цикл + НаборЗаписей.Отбор.Владелец.Установить(НаборКоманд.Владелец); + НаборЗаписей.Прочитать(); + НаборЗаписей.Очистить(); + ЗаписываемыеНастройки = НаборЗаписей.Выгрузить(); + Для Каждого Настройка Из НаборКоманд.ПолучитьЭлементы() Цикл + ЗаполнитьЗначенияСвойств(ЗаписываемыеНастройки.Добавить(), Настройка); + КонецЦикла; + ЗаписываемыеНастройки.Свернуть("Владелец,УникальныйИдентификатор", "Видимость"); + НаборЗаписей.Загрузить(ЗаписываемыеНастройки); + НаборЗаписей.Записать(); + КонецЦикла; + Модифицированность = Ложь; +КонецПроцедуры + +&НаКлиенте +Процедура ПриИзмененииФлажка(ДеревоФормы, ИмяФлажка) + + ТекущиеДанные = ДеревоФормы.ТекущиеДанные; + + Если ТекущиеДанные[ИмяФлажка] = 2 Тогда + ТекущиеДанные[ИмяФлажка] = 0; + КонецЕсли; + + Пометка = ТекущиеДанные[ИмяФлажка]; + + // Обновление подчиненных флажков. + Для Каждого ПодчиненныйРеквизит Из ТекущиеДанные.ПолучитьЭлементы() Цикл + ПодчиненныйРеквизит[ИмяФлажка] = Пометка; + КонецЦикла; + + // Обновление родительского флажка. + Родитель = ТекущиеДанные.ПолучитьРодителя(); + Если Родитель <> Неопределено Тогда + ЕстьВыбранныеЭлементы = Ложь; + ВыбраныВсеЭлементы = Истина; + Для Каждого Элемент Из Родитель.ПолучитьЭлементы() Цикл + ЕстьВыбранныеЭлементы = ЕстьВыбранныеЭлементы Или Элемент[ИмяФлажка]; + ВыбраныВсеЭлементы = ВыбраныВсеЭлементы И Элемент[ИмяФлажка]; + КонецЦикла; + Родитель[ИмяФлажка] = ЕстьВыбранныеЭлементы + ?(ЕстьВыбранныеЭлементы, (Не ВыбраныВсеЭлементы), ЕстьВыбранныеЭлементы); + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура ЗаполнитьЗначениеРеквизитаКоллекции(Коллекция, ИмяРеквизита, Значение) + Для Каждого Элемент Из Коллекция.ПолучитьЭлементы() Цикл + Элемент[ИмяРеквизита] = Значение; + ЗаполнитьЗначениеРеквизитаКоллекции(Элемент, ИмяРеквизита, Значение); + КонецЦикла; +КонецПроцедуры + +&НаСервере +Процедура ЗаполнитьСписокКомандПечати() + + УстановитьПривилегированныйРежим(Истина); + ИсточникиКомандПечати = УправлениеПечатью.ИсточникиКомандПечати(); + + КомандыПечати.ПолучитьЭлементы().Очистить(); + Для Каждого ИсточникКомандПечати Из ИсточникиКомандПечати Цикл + ИдентификаторИсточникаКомандПечати = ОбщегоНазначения.ИдентификаторОбъектаМетаданных(ИсточникКомандПечати); + Если Отбор.Количество() > 0 И Отбор.НайтиПоЗначению(ИдентификаторИсточникаКомандПечати) = Неопределено Тогда + Продолжить; + КонецЕсли; + + КомандыПечатиОбъекта = УправлениеПечатью.КомандыПечатиОбъекта(ИсточникКомандПечати); + + КомандыПечатиОбъекта.Колонки.Добавить("Владелец"); + КомандыПечатиОбъекта.ЗаполнитьЗначения(ИдентификаторИсточникаКомандПечати, "Владелец"); + + КомандыПечатиОбъекта.Колонки.Добавить("ЭтоВнешняяКомандаПечати"); + Для Каждого КомандаПечати Из КомандыПечатиОбъекта Цикл + КомандаПечати.ЭтоВнешняяКомандаПечати = КомандаПечати.МенеджерПечати = "СтандартныеПодсистемы.ДополнительныеОтчетыИОбработки"; + КонецЦикла; + + Если КомандыПечатиОбъекта.Количество() = 0 Тогда + Продолжить; + КонецЕсли; + + ОписаниеИсточника = КомандыПечати.ПолучитьЭлементы().Добавить(); + ОписаниеИсточника.Владелец = ИдентификаторИсточникаКомандПечати; + ОписаниеИсточника.Представление = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(ИдентификаторИсточникаКомандПечати, "Синоним"); + ОписаниеИсточника.Видимость = 2; + ОписаниеИсточника.НавигационнаяСсылка = "e1cib/list/" + ИдентификаторИсточникаКомандПечати.ПолноеИмя; + + Для Каждого КомандаПечати Из КомандыПечатиОбъекта Цикл + Если КомандаПечати.Картинка.Вид = ВидКартинки.Пустая Тогда + КомандаПечати.Картинка = БиблиотекаКартинок.Пустая; + КонецЕсли; + ОписаниеКомандыПечати = ОписаниеИсточника.ПолучитьЭлементы().Добавить(); + ЗаполнитьЗначенияСвойств(ОписаниеКомандыПечати, КомандаПечати); + ОписаниеКомандыПечати.Видимость = Не КомандаПечати.Отключена; + Если ОписаниеКомандыПечати.МенеджерПечати = "СтандартныеПодсистемы.ДополнительныеОтчетыИОбработки" Тогда + ОписаниеКомандыПечати.Комментарий = Строка(КомандаПечати.ДополнительныеПараметры.Ссылка); + ОписаниеКомандыПечати.НавигационнаяСсылка = ПолучитьНавигационнуюСсылку(КомандаПечати.ДополнительныеПараметры.Ссылка); + КонецЕсли; + КонецЦикла; + + ОбновитьФлажокВладельцаКоманд(ОписаниеИсточника); + КонецЦикла; + + ДеревоКоманд = РеквизитФормыВЗначение("КомандыПечати"); + ДеревоКоманд.Строки.Сортировать("Представление", Истина); + ЗначениеВРеквизитФормы(ДеревоКоманд, "КомандыПечати"); + +КонецПроцедуры + +&НаКлиенте +Процедура Записать() + ЗаписатьНастройкиКоманд(); + ОбновитьПовторноИспользуемыеЗначения(); +КонецПроцедуры + +&НаКлиенте +Процедура ПоказатьВСпискеЗавершение(РезультатВопроса, ДополнительныеПараметры) Экспорт + + Если РезультатВопроса = Неопределено Или РезультатВопроса = КодВозвратаДиалога.Отмена Тогда + Возврат; + КонецЕсли; + + Если РезультатВопроса = КодВозвратаДиалога.Да Тогда + Записать(); + КонецЕсли; + + ПерейтиКСписку(); + +КонецПроцедуры + +&НаКлиенте +Процедура ПерейтиКСписку() + + ВладелецКоманд = Элементы.КомандыПечати.ТекущиеДанные; + Если ВладелецКоманд = Неопределено Тогда + Возврат; + КонецЕсли; + + Родитель = ВладелецКоманд.ПолучитьРодителя(); + Если Родитель <> Неопределено Тогда + ВладелецКоманд = Родитель; + КонецЕсли; + + НавигационнаяСсылка = ВладелецКоманд.НавигационнаяСсылка; + + Для Каждого ОкноКлиентскогоПриложения Из ПолучитьОкна() Цикл + Если ОкноКлиентскогоПриложения.ПолучитьНавигационнуюСсылку() = НавигационнаяСсылка Тогда + Форма = ОкноКлиентскогоПриложения.Содержимое[0]; + ОписаниеОповещения = Новый ОписаниеОповещения("ПерейтиКСпискуЗавершение", ЭтотОбъект, + Новый Структура("Форма, НавигационнаяСсылка", Форма, НавигационнаяСсылка)); + Кнопки = Новый СписокЗначений; + Кнопки.Добавить("Переоткрыть", НСтр("ru = 'Переоткрыть'")); + Кнопки.Добавить("Отмена", НСтр("ru = 'Не переоткрывать'")); + ТекстВопроса = + НСтр("ru = 'Список уже открыт. Переоткрыть список, + |чтобы увидеть изменения меню печать?'"); + ПоказатьВопрос(ОписаниеОповещения, ТекстВопроса, Кнопки, , "Переоткрыть"); + Возврат; + КонецЕсли; + КонецЦикла; + + ПерейтиПоНавигационнойСсылке(НавигационнаяСсылка); +КонецПроцедуры + +&НаКлиенте +Процедура ПерейтиКСпискуЗавершение(РезультатВопроса, ДополнительныеПараметры) Экспорт + Если РезультатВопроса = "Отмена" Тогда + Возврат; + КонецЕсли; + + ДополнительныеПараметры.Форма.Закрыть(); + ПерейтиПоНавигационнойСсылке(ДополнительныеПараметры.НавигационнаяСсылка); +КонецПроцедуры + +#КонецОбласти + diff --git a/SSL/src/CommonForms/НастройкаКомандПечати/НастройкаКомандПечати.mdo b/SSL/src/CommonForms/НастройкаКомандПечати/НастройкаКомандПечати.mdo new file mode 100644 index 000000000..44ddac104 --- /dev/null +++ b/SSL/src/CommonForms/НастройкаКомандПечати/НастройкаКомандПечати.mdo @@ -0,0 +1,10 @@ + + + НастройкаКомандПечати + + ru + Настройка команд печати + + PersonalComputer + MobileDevice + diff --git a/SSL/src/CommonForms/НастройкаМоихОтчетовИОбработок/Form.form b/SSL/src/CommonForms/НастройкаМоихОтчетовИОбработок/Form.form index 0cae224f2..9267e681f 100644 --- a/SSL/src/CommonForms/НастройкаМоихОтчетовИОбработок/Form.form +++ b/SSL/src/CommonForms/НастройкаМоихОтчетовИОбработок/Form.form @@ -635,7 +635,6 @@ true true true - UseIfNecessary auto true @@ -988,7 +987,7 @@ true - Auto + DontUse Auto @@ -1011,7 +1010,7 @@ true - Auto + DontUse Auto @@ -1034,7 +1033,7 @@ true - Auto + DontUse Auto @@ -1057,7 +1056,7 @@ true - Auto + DontUse Auto @@ -1079,7 +1078,7 @@ ОК - Auto + DontUse Auto diff --git a/SSL/src/CommonForms/НастройкаМоихОтчетовИОбработок/Module.bsl b/SSL/src/CommonForms/НастройкаМоихОтчетовИОбработок/Module.bsl index 5af075159..e690b4afc 100644 --- a/SSL/src/CommonForms/НастройкаМоихОтчетовИОбработок/Module.bsl +++ b/SSL/src/CommonForms/НастройкаМоихОтчетовИОбработок/Module.bsl @@ -99,7 +99,7 @@ Запрос = Новый Запрос; ТекстЗапроса = - "ВЫБРАТЬ + "ВЫБРАТЬ РАЗРЕШЕННЫЕ | ДопОтчетыИОбработки.Ссылка КАК Обработка, | ТаблицаКоманды.Представление КАК Наименование, | ТаблицаРазделы.Раздел КАК Раздел, @@ -146,7 +146,7 @@ ВариантыПубликации.Добавить(Перечисления.ВариантыПубликацииДополнительныхОтчетовИОбработок.РежимОтладки); КонецЕсли; - Запрос.УстановитьПараметр("Пользователь", Пользователи.ТекущийПользователь()); + Запрос.УстановитьПараметр("Пользователь", ПользователиКлиентСервер.АвторизованныйПользователь()); Запрос.УстановитьПараметр("ВариантыПубликации", ВариантыПубликации); Запрос.УстановитьПараметр("ВидОбработок", ВидОбработок); @@ -329,7 +329,7 @@ Процедура ЗаписатьНаборОбработокПользователя() ТекстЗапроса = " - |ВЫБРАТЬ + |ВЫБРАТЬ РАЗРЕШЕННЫЕ | ДополнительныеОтчетыИОбработкиКоманды.Идентификатор КАК Идентификатор, | ДополнительныеОтчетыИОбработки.Ссылка КАК Обработка |ИЗ diff --git a/SSL/src/CommonForms/НастройкаОбменаСообщениями/Form.form b/SSL/src/CommonForms/НастройкаОбменаСообщениями/Form.form index 98591b502..5baf134e4 100644 --- a/SSL/src/CommonForms/НастройкаОбменаСообщениями/Form.form +++ b/SSL/src/CommonForms/НастройкаОбменаСообщениями/Form.form @@ -1240,7 +1240,6 @@ true true true - UseIfNecessary auto true @@ -1513,7 +1512,7 @@ TextPicture - Auto + DontUse Auto @@ -1539,7 +1538,7 @@ TextPicture - Auto + DontUse Auto @@ -1565,7 +1564,7 @@ ОбновитьМонитор - Auto + DontUse Auto @@ -1591,7 +1590,7 @@ ИзменитьКонечнуюТочку - Auto + DontUse Auto @@ -1613,7 +1612,7 @@ ПерейтиВЖурналРегистрацииСобытийВыгрузкиДанных - Auto + DontUse Auto @@ -1635,7 +1634,7 @@ ПерейтиВЖурналРегистрацииСобытийЗагрузкиДанных - Auto + DontUse Auto @@ -1658,7 +1657,7 @@ Picture - Auto + DontUse Auto @@ -1680,7 +1679,7 @@ ВключитьОтключитьРасписаниеОтправкиИПолученияСообщенийСистемы - Auto + DontUse Auto @@ -1702,7 +1701,7 @@ НастроитьПодписки - Auto + DontUse Auto @@ -1724,7 +1723,7 @@ Подробно - Auto + DontUse Auto diff --git a/SSL/src/CommonForms/НастройкаОбменаСообщениями/Module.bsl b/SSL/src/CommonForms/НастройкаОбменаСообщениями/Module.bsl index 6d8d7423b..d9deec759 100644 --- a/SSL/src/CommonForms/НастройкаОбменаСообщениями/Module.bsl +++ b/SSL/src/CommonForms/НастройкаОбменаСообщениями/Module.bsl @@ -21,7 +21,7 @@ УстановитьПривилегированныйРежим(Истина); Элементы.СписокСостоянияУзловВключитьОтключитьРасписаниеОтправкиИПолученияСообщенийСистемы.Пометка = - РегламентныеЗаданияСервер.ПолучитьИспользованиеРегламентногоЗадания( + РегламентныеЗаданияСервер.РегламентноеЗаданиеИспользуется( Метаданные.РегламентныеЗадания.ОтправкаИПолучениеСообщенийСистемы);; КонецПроцедуры @@ -32,8 +32,7 @@ Если ИмяСобытия = ОбменСообщениямиКлиент.ИмяСобытияВыполненаОтправкаИПолучениеСообщений() ИЛИ ИмяСобытия = ОбменСообщениямиКлиент.ИмяСобытияЗакрытаФормаКонечнойТочки() ИЛИ ИмяСобытия = ОбменСообщениямиКлиент.ИмяСобытияДобавленаКонечнаяТочка() - ИЛИ ИмяСобытия = ОбменСообщениямиКлиент.ИмяСобытияУстановленаВедущаяКонечнаяТочка() - Тогда + ИЛИ ИмяСобытия = ОбменСообщениямиКлиент.ИмяСобытияУстановленаВедущаяКонечнаяТочка() Тогда ОбновитьДанныеМонитора(); @@ -167,7 +166,7 @@ УстановитьПривилегированныйРежим(Истина); Элементы.СписокСостоянияУзловВключитьОтключитьРасписаниеОтправкиИПолученияСообщенийСистемы.Пометка = - НЕ РегламентныеЗаданияСервер.ПолучитьИспользованиеРегламентногоЗадания( + НЕ РегламентныеЗаданияСервер.РегламентноеЗаданиеИспользуется( Метаданные.РегламентныеЗадания.ОтправкаИПолучениеСообщенийСистемы); РегламентныеЗаданияСервер.УстановитьИспользованиеРегламентногоЗадания( @@ -181,7 +180,7 @@ УстановитьПривилегированныйРежим(Истина); - Возврат РегламентныеЗаданияСервер.ПолучитьРасписаниеРегламентногоЗадания( + Возврат РегламентныеЗаданияСервер.РасписаниеРегламентногоЗадания( Метаданные.РегламентныеЗадания.ОтправкаИПолучениеСообщенийСистемы); КонецФункции diff --git a/SSL/src/CommonForms/НастройкаОсновногоРабочегоКаталога/Form.form b/SSL/src/CommonForms/НастройкаОсновногоРабочегоКаталога/Form.form index f59203018..5a49ecca0 100644 --- a/SSL/src/CommonForms/НастройкаОсновногоРабочегоКаталога/Form.form +++ b/SSL/src/CommonForms/НастройкаОсновногоРабочегоКаталога/Form.form @@ -505,7 +505,6 @@ Vertical true true - UseIfNecessary auto true @@ -640,7 +639,7 @@ Picture - Auto + DontUse Auto @@ -662,7 +661,7 @@ СписокФайловВыполнить - Auto + DontUse Auto @@ -688,7 +687,7 @@ Picture - Auto + DontUse Auto diff --git a/SSL/src/CommonForms/НастройкаОтправкиSMS/Form.form b/SSL/src/CommonForms/НастройкаОтправкиSMS/Form.form index 2038b67d4..ee91209da 100644 --- a/SSL/src/CommonForms/НастройкаОтправкиSMS/Form.form +++ b/SSL/src/CommonForms/НастройкаОтправкиSMS/Form.form @@ -1,5 +1,5 @@ - + ПровайдерSMS 5 @@ -15,6 +15,10 @@ НаборКонстант.ПровайдерSMS + + OnChange + ПровайдерSMSПриИзменении + ПровайдерSMSExtendedTooltip 11 @@ -45,6 +49,9 @@ true true true + + Style.ФонУправляющегоПоля + Normal @@ -61,7 +68,7 @@ true - НаборКонстант.ЛогинДляОтправкиSMS + ЛогинДляОтправкиSMS ЛогинДляОтправкиSMSExtendedTooltip @@ -108,7 +115,7 @@ true - НаборКонстант.ПарольДляОтправкиSMS + ПарольДляОтправкиSMS ПарольДляОтправкиSMSExtendedTooltip @@ -136,6 +143,7 @@ true false true + true true true true @@ -228,6 +236,10 @@ Left true + + OnCreateAtServer + ПриСозданииНаСервере + LockOwner true true @@ -254,6 +266,46 @@
          true
          true
          + + ЛогинДляОтправкиSMS + + <key>ru</key> + <value>Логин для отправки SMS</value> + + 2 + + String + + 100 + + + + true + + + true + + + + ПарольДляОтправкиSMS + + <key>ru</key> + <value>Пароль для отправки SMS</value> + + 3 + + String + + 100 + + + + true + + + true + + @@ -263,5 +315,9 @@ AfterWrite ПослеЗаписи
          + + OnWriteAtServer + ПриЗаписиНаСервере + diff --git a/SSL/src/CommonForms/НастройкаОтправкиSMS/Module.bsl b/SSL/src/CommonForms/НастройкаОтправкиSMS/Module.bsl index 18f75ad52..fb5fcf803 100644 --- a/SSL/src/CommonForms/НастройкаОтправкиSMS/Module.bsl +++ b/SSL/src/CommonForms/НастройкаОтправкиSMS/Module.bsl @@ -1,12 +1,36 @@ #Область ОбработчикиСобытийФормы +&НаСервере +Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) + + Владелец = ОбщегоНазначения.ИдентификаторОбъектаМетаданных("Константа.ПровайдерSMS"); + УстановитьПривилегированныйРежим(Истина); + ПарольИЛогин = ОбщегоНазначения.ПрочитатьДанныеИзБезопасногоХранилища(Владелец, "Пароль, Логин"); + УстановитьПривилегированныйРежим(Ложь); + ЛогинДляОтправкиSMS = ПарольИЛогин.Логин; + ПарольДляОтправкиSMS = ?(ЗначениеЗаполнено(ПарольИЛогин.Пароль), ЭтотОбъект.УникальныйИдентификатор, ""); + +КонецПроцедуры + &НаКлиенте Процедура ПослеЗаписи(ПараметрыЗаписи) + ОбновитьПовторноИспользуемыеЗначения(); Оповестить("Запись_НастройкиОтправкиSMS", ПараметрыЗаписи, ЭтотОбъект); КонецПроцедуры +&НаСервере +Процедура ПриЗаписиНаСервере(Отказ, ТекущийОбъект, ПараметрыЗаписи) + УстановитьПривилегированныйРежим(Истина); + Владелец = ОбщегоНазначения.ИдентификаторОбъектаМетаданных("Константа.ПровайдерSMS"); + Если ПарольДляОтправкиSMS <> Строка(ЭтотОбъект.УникальныйИдентификатор) Тогда + ОбщегоНазначения.ЗаписатьДанныеВБезопасноеХранилище(Владелец, ПарольДляОтправкиSMS); + КонецЕсли; + ОбщегоНазначения.ЗаписатьДанныеВБезопасноеХранилище(Владелец, ЛогинДляОтправкиSMS, "Логин"); + УстановитьПривилегированныйРежим(Ложь); +КонецПроцедуры + #КонецОбласти #Область ОбработчикиСобытийЭлементовШапкиФормы @@ -21,4 +45,10 @@ ПерейтиПоНавигационнойСсылке("http://www.mtscommunicator.ru/service/"); КонецПроцедуры +&НаКлиенте +Процедура ПровайдерSMSПриИзменении(Элемент) + ЛогинДляОтправкиSMS = ""; + ПарольДляОтправкиSMS = ""; +КонецПроцедуры + #КонецОбласти diff --git a/SSL/src/CommonForms/НастройкиВходаПользователей/Form.form b/SSL/src/CommonForms/НастройкиВходаПользователей/Form.form new file mode 100644 index 000000000..696f46e7b --- /dev/null +++ b/SSL/src/CommonForms/НастройкиВходаПользователей/Form.form @@ -0,0 +1,1426 @@ + + + + ГруппаСложностьПароля + 33 + + ПарольДолженОтвечатьТребованиямСложности + 4 + true + true + + true + + + ПарольДолженОтвечатьТребованиямСложности + + Right + + ru + Проверять, чтобы новый пароль: +- имел не менее 7 символов; +- содержал любые 3 из 4-х типов символов: заглавные буквы, + строчные буквы, цифры, специальные символы; +- не совпадал с именем (для входа). + + Button + + OnChange + ПарольДолженОтвечатьТребованиямСложностиПриИзменении + + + ПарольДолженОтвечатьТребованиямСложностиРасширеннаяПодсказка + 6 + Label + true + true + + Left + + + + ПарольДолженОтвечатьТребованиямСложностиКонтекстноеМеню + 5 + true + + CheckBoxField + Enter + true + Left + true + + + + ГруппаМинимальнаяДлинаПароля + 43 + + ГруппаМинимальнаяДлинаПароляВключить + 100 + + МинимальнаяДлинаПароляВключить + 86 + true + true + + true + + + МинимальнаяДлинаПароляВключить + + Right + + OnChange + НастройкаВключитьПриИзменении + + + МинимальнаяДлинаПароляВключитьРасширеннаяПодсказка + 88 + Label + true + true + + Left + + + + МинимальнаяДлинаПароляВключитьКонтекстноеМеню + 87 + true + + CheckBoxField + Enter + true + Left + true + + + true + true + + true + + + <key>ru</key> + <value>Группа минимальная длина пароля включить</value> + + 34 + false + + ГруппаМинимальнаяДлинаПароляВключитьРасширеннаяПодсказка + 101 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + true + true + Auto + Auto + + + + МинимальнаяДлинаПароля + 1 + true + true + + true + + + МинимальнаяДлинаПароля + + None + + OnChange + МинимальнаяДлинаПароляПриИзменении + + + МинимальнаяДлинаПароляРасширеннаяПодсказка + 3 + Label + true + true + + Left + + + + МинимальнаяДлинаПароляКонтекстноеМеню + 2 + true + + InputField + Enter + true + Left + true + + true + true + true + true + true + true + + 1 + + Normal + + + + ПояснениеМинимальнаяДлинаПароля + 45 + + <key>ru</key> + <value>знак.</value> + + true + true + + true + + + ПояснениеМинимальнаяДлинаПароляРасширеннаяПодсказка + 47 + Label + true + true + + Left + + + + ПояснениеМинимальнаяДлинаПароляКонтекстноеМеню + 46 + true + + Label + true + true + + Left + + + true + true + + true + + + <key>ru</key> + <value>Группа минимальная длина пароля</value> + + + ГруппаМинимальнаяДлинаПароляРасширеннаяПодсказка + 44 + Label + true + true + + Left + + + UsualGroup + + Auto + true + true + Auto + Auto + + + true + true + + true + + + <key>ru</key> + <value>Группа сложность пароля</value> + + + ГруппаСложностьПароляРасширеннаяПодсказка + 34 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + true + true + Auto + Auto + + + + ГруппаСменаПароля + 108 + + ГруппаМаксимальныйСрокДействияПароля + 53 + + ГруппаМаксимальныйСрокДействияПароляВключить + 104 + + МаксимальныйСрокДействияПароляВключить + 92 + true + true + + true + + + МаксимальныйСрокДействияПароляВключить + + Right + + OnChange + НастройкаВключитьПриИзменении + + + МаксимальныйСрокДействияПароляВключитьРасширеннаяПодсказка + 94 + Label + true + true + + Left + + + + МаксимальныйСрокДействияПароляВключитьКонтекстноеМеню + 93 + true + + CheckBoxField + Enter + true + Left + true + + + true + true + + true + + + <key>ru</key> + <value>Группа максимальный срок действия пароля включить</value> + + 34 + false + + ГруппаМаксимальныйСрокДействияПароляВключитьРасширеннаяПодсказка + 105 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + true + true + Auto + Auto + + + + МаксимальныйСрокДействияПароля + 12 + true + true + + true + + + МаксимальныйСрокДействияПароля + + None + + ru + Срок после первого входа с новым паролем, +после которого пользователю потребуется сменить пароль. + + + МаксимальныйСрокДействияПароляРасширеннаяПодсказка + 14 + Label + true + true + + Left + + + + МаксимальныйСрокДействияПароляКонтекстноеМеню + 13 + true + + InputField + Enter + true + Left + true + + true + true + true + true + true + true + + 1 + + Normal + + + + ПояснениеМаксимальныйСрокДействияПароля + 55 + + <key>ru</key> + <value>дн.</value> + + true + true + + true + + + ПояснениеМаксимальныйСрокДействияПароляРасширеннаяПодсказка + 57 + Label + true + true + + Left + + + + ПояснениеМаксимальныйСрокДействияПароляКонтекстноеМеню + 56 + true + + Label + true + true + + Left + + + true + true + + true + + + <key>ru</key> + <value>Группа максимальный срок действия пароля</value> + + + ГруппаМаксимальныйСрокДействияПароляРасширеннаяПодсказка + 54 + Label + true + true + + Left + + + UsualGroup + + Auto + true + true + Auto + Auto + + + + ГруппаМинимальныйСрокДействияПароля + 48 + + ГруппаМинимальныйСрокДействияПароляВключить + 98 + + МинимальныйСрокДействияПароляВключить + 89 + true + true + + true + + + МинимальныйСрокДействияПароляВключить + + Right + + OnChange + НастройкаВключитьПриИзменении + + + МинимальныйСрокДействияПароляВключитьРасширеннаяПодсказка + 91 + Label + true + true + + Left + + + + МинимальныйСрокДействияПароляВключитьКонтекстноеМеню + 90 + true + + CheckBoxField + Enter + true + Left + true + + + true + true + + true + + + <key>ru</key> + <value>Группа минимальный срок действия пароля включить</value> + + 34 + false + + ГруппаМинимальныйСрокДействияПароляВключитьРасширеннаяПодсказка + 99 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + true + true + Auto + Auto + + + + МинимальныйСрокДействияПароля + 25 + true + true + + true + + + МинимальныйСрокДействияПароля + + None + + ru + Срок после первого входа с новым паролем, +в течение которого пользователь не сможет сменить пароль. + + + МинимальныйСрокДействияПароляРасширеннаяПодсказка + 27 + Label + true + true + + Left + + + + МинимальныйСрокДействияПароляКонтекстноеМеню + 26 + true + + InputField + Enter + true + Left + true + + true + true + true + true + true + true + + 1 + + Normal + + + + ПояснениеМинимальныйСрокДействияПароля + 50 + + <key>ru</key> + <value>дн.</value> + + true + true + + true + + + ПояснениеМинимальныйСрокДействияПароляРасширеннаяПодсказка + 52 + Label + true + true + + Left + + + + ПояснениеМинимальныйСрокДействияПароляКонтекстноеМеню + 51 + true + + Label + true + true + + Left + + + true + true + + true + + + <key>ru</key> + <value>Группа минимальный срок действия пароля</value> + + + ГруппаМинимальныйСрокДействияПароляРасширеннаяПодсказка + 49 + Label + true + true + + Left + + + UsualGroup + + Auto + true + true + Auto + Auto + + + + ГруппаЗапретитьПовторениеПароляСредиПоследних + 38 + + ГруппаЗапретитьПовторениеПароляСредиПоследнихВключить + 102 + + ЗапретитьПовторениеПароляСредиПоследнихВключить + 83 + true + true + + true + + + ЗапретитьПовторениеПароляСредиПоследнихВключить + + Right + + OnChange + НастройкаВключитьПриИзменении + + + ЗапретитьПовторениеПароляСредиПоследнихВключитьРасширеннаяПодсказка + 85 + Label + true + true + + Left + + + + ЗапретитьПовторениеПароляСредиПоследнихВключитьКонтекстноеМеню + 84 + true + + CheckBoxField + Enter + true + Left + true + + + true + true + + true + + + <key>ru</key> + <value>Группа запретить повторение пароля среди последних включить</value> + + 34 + false + + ГруппаЗапретитьПовторениеПароляСредиПоследнихВключитьРасширеннаяПодсказка + 103 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + true + true + Auto + Auto + + + + ЗапретитьПовторениеПароляСредиПоследних + 7 + true + true + + true + + + ЗапретитьПовторениеПароляСредиПоследних + + None + + ЗапретитьПовторениеПароляСредиПоследнихРасширеннаяПодсказка + 9 + Label + true + true + + Left + + + + ЗапретитьПовторениеПароляСредиПоследнихКонтекстноеМеню + 8 + true + + InputField + Enter + true + Left + true + + true + true + true + true + true + true + + 1 + + Normal + + + + ПояснениеЗапретитьПовторениеПароляСредиПоследних + 40 + + <key>ru</key> + <value>знач.</value> + + true + true + + true + + + ПояснениеЗапретитьПовторениеПароляСредиПоследнихРасширеннаяПодсказка + 42 + Label + true + true + + Left + + + + ПояснениеЗапретитьПовторениеПароляСредиПоследнихКонтекстноеМеню + 41 + true + + Label + true + true + + Left + + + true + true + + true + + + <key>ru</key> + <value>Группа запретить повторение пароля среди последних</value> + + + ГруппаЗапретитьПовторениеПароляСредиПоследнихРасширеннаяПодсказка + 39 + Label + true + true + + Left + + + UsualGroup + + Auto + true + true + Auto + Auto + + + true + true + + true + + + <key>ru</key> + <value>Группа смена пароля</value> + + + ГруппаСменаПароляРасширеннаяПодсказка + 109 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + NormalSeparation + true + true + Auto + Auto + + + + ГруппаПросрочкаРаботыВПрограммеДоЗапрещенияВхода + 75 + + ГруппаПросрочкаРаботыВПрограммеДоЗапрещенияВходаВключить + 106 + + ПросрочкаРаботыВПрограммеДоЗапрещенияВходаВключить + 95 + true + true + + true + + + ПросрочкаРаботыВПрограммеДоЗапрещенияВходаВключить + + Right + 2 + + OnChange + НастройкаВключитьПриИзменении + + + ПросрочкаРаботыВПрограммеДоЗапрещенияВходаВключитьРасширеннаяПодсказка + 97 + Label + true + true + + Left + + + + ПросрочкаРаботыВПрограммеДоЗапрещенияВходаВключитьКонтекстноеМеню + 96 + true + + CheckBoxField + Top + Enter + true + Left + true + + + true + true + + true + + + <key>ru</key> + <value>Группа просрочка работы в программе до запрещения входа включить</value> + + 34 + false + + ГруппаПросрочкаРаботыВПрограммеДоЗапрещенияВходаВключитьРасширеннаяПодсказка + 107 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + true + true + Auto + Auto + + + + ПросрочкаРаботыВПрограммеДоЗапрещенияВхода + 77 + true + true + + true + + + ПросрочкаРаботыВПрограммеДоЗапрещенияВхода + + None + + ru + Срок относительно последней активности пользователя, +после которого вход в программу будет запрещен. + +Не влияет на администраторов. + + + ПросрочкаРаботыВПрограммеДоЗапрещенияВходаРасширеннаяПодсказка + 79 + Label + true + true + + Left + + + + ПросрочкаРаботыВПрограммеДоЗапрещенияВходаКонтекстноеМеню + 78 + true + + InputField + Enter + true + Left + true + + true + true + true + true + true + true + + 1 + + Normal + + + + ПояснениеПросрочкаРаботыВПрограммеДоЗапрещенияВхода + 80 + + <key>ru</key> + <value>дн.</value> + + true + true + + true + + + ПояснениеПросрочкаРаботыВПрограммеДоЗапрещенияВходаРасширеннаяПодсказка + 82 + Label + true + true + + Left + + + + ПояснениеПросрочкаРаботыВПрограммеДоЗапрещенияВходаКонтекстноеМеню + 81 + true + + Label + true + true + + Left + + + true + true + + true + + + <key>ru</key> + <value>Группа просрочка работы в программе до запрещения входа</value> + + + ГруппаПросрочкаРаботыВПрограммеДоЗапрещенияВходаРасширеннаяПодсказка + 76 + Label + true + true + + Left + + + UsualGroup + + Auto + true + true + Auto + Auto + + + + ФормаКоманднаяПанель + -1 + + ФормаЗаписатьИЗакрыть + 10 + true + true + + true + + + ФормаЗаписатьИЗакрытьРасширеннаяПодсказка + 11 + Label + true + true + + Left + + + Form.Command.ЗаписатьИЗакрыть + Auto + true + true + true + UserCmds + Auto + + + ФормаСправка + 110 + true + true + + true + + + ФормаСправкаРасширеннаяПодсказка + 111 + Label + true + true + + Left + + + Form.StandardCommand.Help + Normal + Auto + true + true + UserCmds + Auto + + Left + + + OnCreateAtServer + ПриСозданииНаСервере + + LockOwner + true + true + true + Vertical + true + true + true + auto + true + + МинимальнаяДлинаПароля + + <key>ru</key> + <value>Минимальная длина пароля</value> + + 1 + + Number + + 2 + true + + + + true + + + true + + + + ПарольДолженОтвечатьТребованиямСложности + + <key>ru</key> + <value>Пароль должен отвечать требованиям сложности</value> + + 2 + + Boolean + + + true + + + true + + + + ЗапретитьПовторениеПароляСредиПоследних + + <key>ru</key> + <value>Запретить повторение пароля среди последних</value> + + 4 + + Number + + 2 + true + + + + true + + + true + + + + МаксимальныйСрокДействияПароля + + <key>ru</key> + <value>Максимальный срок действия пароля</value> + + 5 + + Number + + 2 + true + + + + true + + + true + + + + МинимальныйСрокДействияПароля + + <key>ru</key> + <value>Минимальный срок действия пароля</value> + + 8 + + Number + + 2 + true + + + + true + + + true + + + + ПоказатьНастройкиВнешнихПользователей + + <key>ru</key> + <value>Показать настройки внешних пользователей</value> + + 9 + + Boolean + + + true + + + true + + + + ПросрочкаРаботыВПрограммеДоЗапрещенияВхода + + <key>ru</key> + <value>Просрочка работы в программе до запрещения входа</value> + + 15 + + Number + + 2 + true + + + + true + + + true + + + + ЗапретитьПовторениеПароляСредиПоследнихВключить + + <key>ru</key> + <value>Запретить повторение пароля среди последних:</value> + + 16 + + Boolean + + + true + + + true + + + + МинимальнаяДлинаПароляВключить + + <key>ru</key> + <value>Минимальная длина пароля:</value> + + 17 + + Boolean + + + true + + + true + + + + МинимальныйСрокДействияПароляВключить + + <key>ru</key> + <value>Минимальный срок действия пароля:</value> + + 18 + + Boolean + + + true + + + true + + + + МаксимальныйСрокДействияПароляВключить + + <key>ru</key> + <value>Максимальный срок действия пароля:</value> + + 19 + + Boolean + + + true + + + true + + + + ПросрочкаРаботыВПрограммеДоЗапрещенияВходаВключить + + <key>ru</key> + <value>Запрещать вход в программу пользователям, которые не работали в программе более:</value> + + 20 + + Boolean + + + true + + + true + + + + ПредлагаемыеЗначенияНастроек + + <key>ru</key> + <value>Предлагаемые значения настроек</value> + + 21 + + + true + + + true + + + + ЗаписатьИЗакрыть + + <key>ru</key> + <value>Записать и закрыть</value> + + 1 + + ru + Записать и закрыть + + + true + + + + ЗаписатьИЗакрыть + + + DontUse + Auto + + + ПроверитьОтправкуКодаПодтверждения + + <key>ru</key> + <value>Проверить</value> + + 2 + + ru + Проверить отправку кода подтверждения +(на почтовый ящик текущего пользователя) + + + true + + DontUse + Auto + + + ПроверитьОтправкуПриглашенияНаВход + + <key>ru</key> + <value>Проверить</value> + + 3 + + ru + Проверить отправку приглашения на вход +(на почтовый ящик текущего пользователя) + + + true + + DontUse + Auto + + + ПоказатьНастройкиВнешнихПользователей + + Boolean + + + + + + + diff --git a/SSL/src/CommonForms/НастройкиВходаПользователей/Help/ru.html b/SSL/src/CommonForms/НастройкиВходаПользователей/Help/ru.html new file mode 100644 index 000000000..2cf86f2f0 --- /dev/null +++ b/SSL/src/CommonForms/НастройкиВходаПользователей/Help/ru.html @@ -0,0 +1,11 @@ + +

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

          +

          Требования к паролю

          +

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

          +
          • Пароль должен отвечать требованиям сложности - настройка и контроль сложности пароля. Включите флажок, для того чтобы проверять, чтобы новый пароль имел не менее 7 символов, содержал любые 3 из 4-х типов символов: заглавные буквы, строчные буквы, цифры, специальные символы, не совпадал с именем (для входа); +
          • Минимальная длина пароля - по умолчанию 8 знаков; +
          • Максимальный срок действия пароля - срок после первого входа с новым паролем, после которого пользователю потребуется сменить пароль, по умолчанию 30 дней. +
          • Минимальный срок действия пароля - срок после первого входа с новым паролем, в течение которого пользователь не может сменить пароль, по умолчанию 1 день. +
          • Запретить повторение пароля среди последних - по умолчанию 10 значений. Таким образом, обеспечивается контроль повторяемости паролей; +
          • Запрещать вход в программу пользователям, которые не работали в программе более - срок относительно последней активности пользователя, после которого вход в программу будет запрещен, по умолчанию 45 дней.

          См. также:

          + \ 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..6bb8c65cc --- /dev/null +++ b/SSL/src/CommonForms/НастройкиВходаПользователей/Module.bsl @@ -0,0 +1,148 @@ +#Область ОбработчикиСобытийФормы + +&НаСервере +Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) + + Если Параметры.Свойство("АвтоТест") Тогда + Возврат; + КонецЕсли; + + ПоказатьНастройкиВнешнихПользователей = Параметры.ПоказатьНастройкиВнешнихПользователей; + + ПредлагаемыеЗначенияНастроек = Новый Структура; + ПредлагаемыеЗначенияНастроек.Вставить("МинимальнаяДлинаПароля", 8); + ПредлагаемыеЗначенияНастроек.Вставить("МаксимальныйСрокДействияПароля", 30); + ПредлагаемыеЗначенияНастроек.Вставить("МинимальныйСрокДействияПароля", 1); + ПредлагаемыеЗначенияНастроек.Вставить("ЗапретитьПовторениеПароляСредиПоследних", 10); + ПредлагаемыеЗначенияНастроек.Вставить("ПросрочкаРаботыВПрограммеДоЗапрещенияВхода", 45); + + Если ПоказатьНастройкиВнешнихПользователей Тогда + СтандартныеПодсистемыСервер.УстановитьКлючНазначенияФормы(ЭтотОбъект, "ВнешниеПользователи"); + АвтоЗаголовок = Ложь; + Заголовок = НСтр("ru = 'Настройки входа внешних пользователей'"); + ЗаполнитьЗначенияСвойств(ЭтотОбъект, ПользователиСлужебный.НастройкиВхода().ВнешниеПользователи); + Иначе + ЗаполнитьЗначенияСвойств(ЭтотОбъект, ПользователиСлужебный.НастройкиВхода().Пользователи); + КонецЕсли; + + Для Каждого КлючИЗначение Из ПредлагаемыеЗначенияНастроек Цикл + Если ЗначениеЗаполнено(ЭтотОбъект[КлючИЗначение.Ключ]) Тогда + ЭтотОбъект[КлючИЗначение.Ключ + "Включить"] = Истина; + Иначе + ЭтотОбъект[КлючИЗначение.Ключ] = КлючИЗначение.Значение; + Элементы[КлючИЗначение.Ключ].Доступность = Ложь; + КонецЕсли; + КонецЦикла; + +КонецПроцедуры + +#КонецОбласти + +#Область ОбработчикиСобытийЭлементовШапкиФормы + +&НаКлиенте +Процедура ПарольДолженОтвечатьТребованиямСложностиПриИзменении(Элемент) + + Если МинимальнаяДлинаПароля < 7 Тогда + МинимальнаяДлинаПароля = 7; + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура МинимальнаяДлинаПароляПриИзменении(Элемент) + + Если МинимальнаяДлинаПароля < 7 + И ПарольДолженОтвечатьТребованиямСложности Тогда + + МинимальнаяДлинаПароля = 7; + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура НастройкаВключитьПриИзменении(Элемент) + + ИмяНастройки = Лев(Элемент.Имя, СтрДлина(Элемент.Имя) - СтрДлина("Включить")); + + Если ЭтотОбъект[Элемент.Имя] = Ложь Тогда + ЭтотОбъект[ИмяНастройки] = ПредлагаемыеЗначенияНастроек[ИмяНастройки]; + КонецЕсли; + + Элементы[ИмяНастройки].Доступность = ЭтотОбъект[Элемент.Имя]; + +КонецПроцедуры + +#КонецОбласти + +#Область ОбработчикиКомандФормы + +&НаКлиенте +Процедура ЗаписатьИЗакрыть(Команда) + + ЗаписатьНаСервере(); + Оповестить("Запись_НаборКонстант", Новый Структура, "НастройкиВходаПользователей"); + Закрыть(); + +КонецПроцедуры + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +&НаСервере +Процедура ЗаписатьНаСервере() + + Блокировка = Новый БлокировкаДанных; + ЭлементБлокировки = Блокировка.Добавить("Константа.НастройкиВходаПользователей"); + ЭлементБлокировки.Режим = РежимБлокировкиДанных.Исключительный; + + НачатьТранзакцию(); + Попытка + Блокировка.Заблокировать(); + НастройкиВхода = ПользователиСлужебный.НастройкиВхода(); + + Если ПоказатьНастройкиВнешнихПользователей Тогда + Настройки = НастройкиВхода.ВнешниеПользователи; + Иначе + Настройки = НастройкиВхода.Пользователи; + КонецЕсли; + + Настройки.ПарольДолженОтвечатьТребованиямСложности = ПарольДолженОтвечатьТребованиямСложности; + + Если Не ЗначениеЗаполнено(ПросрочкаРаботыВПрограммеДоЗапрещенияВхода) Тогда + Настройки.ПросрочкаРаботыВПрограммеДатаВключения = '00010101'; + + ИначеЕсли Не ЗначениеЗаполнено(Настройки.ПросрочкаРаботыВПрограммеДатаВключения) + Или Не ЗначениеЗаполнено(Настройки.ПросрочкаРаботыВПрограммеДоЗапрещенияВхода) Тогда + + Настройки.ПросрочкаРаботыВПрограммеДатаВключения = НачалоДня(ТекущаяДатаСеанса()); + КонецЕсли; + + Для Каждого КлючИЗначение Из ПредлагаемыеЗначенияНастроек Цикл + Если ЭтотОбъект[КлючИЗначение.Ключ + "Включить"] Тогда + Настройки[КлючИЗначение.Ключ] = ЭтотОбъект[КлючИЗначение.Ключ]; + Иначе + Настройки[КлючИЗначение.Ключ] = 0; + КонецЕсли; + КонецЦикла; + + Константы.НастройкиВходаПользователей.Установить(Новый ХранилищеЗначения(НастройкиВхода)); + + Если ЗначениеЗаполнено(НастройкиВхода.Пользователи.ПросрочкаРаботыВПрограммеДоЗапрещенияВхода) + Или ЗначениеЗаполнено(НастройкиВхода.ВнешниеПользователи.ПросрочкаРаботыВПрограммеДоЗапрещенияВхода) Тогда + + ПользователиСлужебный.ИзменитьЗаданиеКонтрольАктивностиПользователей(Истина); + КонецЕсли; + + ЗафиксироватьТранзакцию(); + Исключение + ОтменитьТранзакцию(); + ВызватьИсключение; + КонецПопытки; + + ОбновитьПовторноИспользуемыеЗначения(); + +КонецПроцедуры + +#КонецОбласти diff --git a/SSL/src/CommonForms/НастройкиВходаПользователей/НастройкиВходаПользователей.mdo b/SSL/src/CommonForms/НастройкиВходаПользователей/НастройкиВходаПользователей.mdo new file mode 100644 index 000000000..44bb7b586 --- /dev/null +++ b/SSL/src/CommonForms/НастройкиВходаПользователей/НастройкиВходаПользователей.mdo @@ -0,0 +1,15 @@ + + + НастройкиВходаПользователей + + ru + Настройки входа пользователей + + + + ru + + + PersonalComputer + MobileDevice + diff --git a/SSL/src/CommonForms/НастройкиПравОбъектов/Form.form b/SSL/src/CommonForms/НастройкиПравОбъектов/Form.form index d7d4cf818..829237bf6 100644 --- a/SSL/src/CommonForms/НастройкиПравОбъектов/Form.form +++ b/SSL/src/CommonForms/НастройкиПравОбъектов/Form.form @@ -703,7 +703,6 @@ true true true - UseIfNecessary auto true @@ -983,7 +982,7 @@ TextPicture - Auto + DontUse Auto @@ -1005,7 +1004,7 @@ Записать - Auto + DontUse Auto @@ -1030,7 +1029,7 @@ Перечитать - Auto + DontUse Auto @@ -1052,7 +1051,7 @@ УстановитьРазрешениеПрава - Auto + DontUse Auto @@ -1074,7 +1073,7 @@ УстановитьЗапретПрава - Auto + DontUse Auto @@ -1096,7 +1095,7 @@ СнятьУстановкуПрава - Auto + DontUse Auto diff --git a/SSL/src/CommonForms/НастройкиПравОбъектов/Module.bsl b/SSL/src/CommonForms/НастройкиПравОбъектов/Module.bsl index a3d9d76e9..9d8f32394 100644 --- a/SSL/src/CommonForms/НастройкиПравОбъектов/Module.bsl +++ b/SSL/src/CommonForms/НастройкиПравОбъектов/Module.bsl @@ -11,8 +11,8 @@ КонецЕсли; СсылкаНаОбъект = Параметры.СсылкаНаОбъект; - ВозможныеПрава = УправлениеДоступомСлужебныйПовтИсп.Параметры( - ).ВозможныеПраваДляНастройкиПравОбъектов; + ТекущиеПараметры = УправлениеДоступомСлужебныйПовтИсп.Параметры(); + ВозможныеПрава = ТекущиеПараметры.ВозможныеПраваДляНастройкиПравОбъектов; Если ВозможныеПрава.ПоТипамСсылок[ТипЗнч(СсылкаНаОбъект)] = Неопределено Тогда ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( @@ -510,9 +510,9 @@ &НаСервере Процедура ДобавитьРеквизитыИлиЭлементыФормы(НовыеРеквизиты = Неопределено) - ОписанияВозможныхПрав = УправлениеДоступомСлужебныйПовтИсп.Параметры( - ).ВозможныеПраваДляНастройкиПравОбъектов.ПоТипамСсылок.Получить( - ТипЗнч(Параметры.СсылкаНаОбъект)); + ТекущиеПараметры = УправлениеДоступомСлужебныйПовтИсп.Параметры(); + ПоТипамСсылок = ТекущиеПараметры.ВозможныеПраваДляНастройкиПравОбъектов.ПоТипамСсылок; + ОписанияВозможныхПрав = ПоТипамСсылок.Получить(ТипЗнч(Параметры.СсылкаНаОбъект)); ОписаниеТиповПсевдоФлажка = Новый ОписаниеТипов("Булево, Число", Новый КвалификаторыЧисла(1, 0, ДопустимыйЗнак.Неотрицательный)); @@ -721,10 +721,11 @@ Возврат; КонецЕсли; - // Проверка дублей - Отбор = Новый Структура("ВладелецНастройки, Пользователь", - ТекущаяСтрока["ВладелецНастройки"], - ТекущаяСтрока["Пользователь"]); + // Проверка дублей. + Отбор = Новый Структура; + Отбор.Вставить("ВладелецНастройки", ТекущаяСтрока["ВладелецНастройки"]); + Отбор.Вставить("Пользователь", ТекущаяСтрока["Пользователь"]); + Если ГруппыПрав.НайтиСтроки(Отбор).Количество() > 1 Тогда Если ТипЗнч(Отбор.Пользователь) = Тип("СправочникСсылка.Пользователи") Тогда ТекстСообщения = НСтр("ru = 'Настройка для пользователя ""%1"" уже есть.'"); @@ -788,11 +789,10 @@ ТекущийВладелецНастройки); Если ПроверкаУдаления Тогда - ТекстСообщения = ТекстСообщения + Символы.ПС + Символы.ПС - + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Для удаления всех унаследованных прав следует - |снять флажок ""%1"".'"), - Элементы.НаследоватьПраваРодителей.Заголовок); + ТекстСообщения = ТекстСообщения + Символы.ПС + Символы.ПС + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Для удаления всех унаследованных прав следует + |снять флажок ""%1"".'"), + Элементы.НаследоватьПраваРодителей.Заголовок); КонецЕсли; КонецЕсли; diff --git a/SSL/src/CommonForms/НастройкиПроверкиКонтрагентов/Form.form b/SSL/src/CommonForms/НастройкиПроверкиКонтрагентов/Form.form index 5d7ec3d9c..f8127bb7c 100644 --- a/SSL/src/CommonForms/НастройкиПроверкиКонтрагентов/Form.form +++ b/SSL/src/CommonForms/НастройкиПроверкиКонтрагентов/Form.form @@ -298,7 +298,7 @@ ПроверитьДоступКСервису - Auto + DontUse Auto diff --git a/SSL/src/CommonForms/НастройкиРегистрацииСобытийДоступаКПерсональнымДанным/Form.form b/SSL/src/CommonForms/НастройкиРегистрацииСобытийДоступаКПерсональнымДанным/Form.form index 85e4373e4..0e1ecdcee 100644 --- a/SSL/src/CommonForms/НастройкиРегистрацииСобытийДоступаКПерсональнымДанным/Form.form +++ b/SSL/src/CommonForms/НастройкиРегистрацииСобытийДоступаКПерсональнымДанным/Form.form @@ -1,5 +1,9 @@ + + <key>ru</key> + <value>Регистрация событий доступа к персональным данным</value> + ОбластиПерсональныхДанных 7 @@ -212,13 +216,11 @@ 60 LockOwner true - true true Vertical true true true - UseIfNecessary auto true @@ -262,7 +264,7 @@ Text - Auto + DontUse Auto diff --git a/SSL/src/CommonForms/НастройкиРегистрацииСобытийДоступаКПерсональнымДанным/НастройкиРегистрацииСобытийДоступаКПерсональнымДанным.mdo b/SSL/src/CommonForms/НастройкиРегистрацииСобытийДоступаКПерсональнымДанным/НастройкиРегистрацииСобытийДоступаКПерсональнымДанным.mdo index 28a51b0cf..31e478402 100644 --- a/SSL/src/CommonForms/НастройкиРегистрацииСобытийДоступаКПерсональнымДанным/НастройкиРегистрацииСобытийДоступаКПерсональнымДанным.mdo +++ b/SSL/src/CommonForms/НастройкиРегистрацииСобытийДоступаКПерсональнымДанным/НастройкиРегистрацииСобытийДоступаКПерсональнымДанным.mdo @@ -3,7 +3,7 @@ НастройкиРегистрацииСобытийДоступаКПерсональнымДанным ru - Регистрация событий доступа к персональным данным + Настройки регистрации событий доступа к персональным данным diff --git a/SSL/src/CommonForms/НастройкиЭлектроннойПодписиИШифрования/Form.form b/SSL/src/CommonForms/НастройкиЭлектроннойПодписиИШифрования/Form.form index 73f2e35b9..a216cfe1d 100644 --- a/SSL/src/CommonForms/НастройкиЭлектроннойПодписиИШифрования/Form.form +++ b/SSL/src/CommonForms/НастройкиЭлектроннойПодписиИШифрования/Form.form @@ -2335,7 +2335,6 @@ true true true - UseIfNecessary auto true @@ -2787,7 +2786,7 @@ Text - Auto + DontUse Auto @@ -2813,7 +2812,7 @@ Text - Auto + DontUse Auto @@ -2835,7 +2834,7 @@ УстановитьРасширение - Auto + DontUse Auto @@ -2857,7 +2856,7 @@ ДобавитьЗаявлениеНаВыпускСертификата - Auto + DontUse Auto @@ -2879,7 +2878,7 @@ ДобавитьИзУстановленныхНаКомпьютере - Auto + DontUse Auto diff --git a/SSL/src/CommonForms/НастройкиЭлектроннойПодписиИШифрования/Module.bsl b/SSL/src/CommonForms/НастройкиЭлектроннойПодписиИШифрования/Module.bsl index 3469f5a1e..d69904495 100644 --- a/SSL/src/CommonForms/НастройкиЭлектроннойПодписиИШифрования/Module.bsl +++ b/SSL/src/CommonForms/НастройкиЭлектроннойПодписиИШифрования/Module.bsl @@ -30,8 +30,6 @@ Элементы.Страницы.ТекущаяСтраница = Элементы.СтраницаПрограммы; КонецЕсли; - РежимРаботы = ОбщегоНазначенияПовтИсп.РежимРаботыПрограммы(); - Если ОбщегоНазначенияПовтИсп.РазделениеВключено() Тогда УстановитьПроверкуПодписейНаСервере(Ложь); Элементы.ПроверятьПодписиНаСервере.Видимость = Ложь; @@ -41,9 +39,7 @@ ПодписыватьНаСервере = Константы.СоздаватьЭлектронныеПодписиНаСервере.Получить(); КонецЕсли; - РежимРаботы = ОбщегоНазначенияПовтИсп.РежимРаботыПрограммы(); - - Если РежимРаботы.ЭтоАдминистраторПрограммы Тогда + Если Пользователи.ЭтоПолноправныйПользователь() Тогда СертификатыПоказать = "ВсеСертификаты"; Иначе СертификатыПоказать = "МоиСертификаты"; @@ -80,6 +76,8 @@ Элементы.ПрограммыИзменить.ТолькоВоВсехДействиях = Ложь; КонецЕсли; + РежимРаботы = ОбщегоНазначенияПовтИсп.РежимРаботыПрограммы(); + Если Не РежимРаботы.ЭтоLinuxКлиент Тогда Элементы.ГруппаПрограммыLinuxПутьКПрограмме.Видимость = Ложь; КонецЕсли; @@ -363,8 +361,7 @@ СодержимоеВопроса = Новый Массив; СодержимоеВопроса.Добавить(БиблиотекаКартинок.Вопрос32); - СодержимоеВопроса.Добавить(СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - ТекстВопроса, ТекущиеДанные.Наименование)); + СодержимоеВопроса.Добавить(СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ТекстВопроса, ТекущиеДанные.Наименование)); ПоказатьВопрос( Новый ОписаниеОповещения("ПрограммыУстановитьПометкуУдаленияПродолжить", ЭтотОбъект, ТекущиеДанные.Ссылка), @@ -758,12 +755,11 @@ Выборка = Запрос.Выполнить().Выбрать(); - РежимРаботы = ОбщегоНазначенияПовтИсп.РежимРаботыПрограммы(); ОбработанныеСтроки = Новый Соответствие; Индекс = 0; Пока Выборка.Следующий() Цикл - Если Не РежимРаботы.ЭтоАдминистраторПрограммы И Выборка.ПометкаУдаления Тогда + Если Не Пользователи.ЭтоПолноправныйПользователь() И Выборка.ПометкаУдаления Тогда Продолжить; КонецЕсли; Строки = Программы.НайтиСтроки(Новый Структура("Ссылка", Выборка.Ссылка)); diff --git a/SSL/src/CommonForms/ОписаниеИзмененийСистемы/Form.form b/SSL/src/CommonForms/ОписаниеИзмененийПрограммы/Form.form similarity index 99% rename from SSL/src/CommonForms/ОписаниеИзмененийСистемы/Form.form rename to SSL/src/CommonForms/ОписаниеИзмененийПрограммы/Form.form index e81a87ff8..671b03c67 100644 --- a/SSL/src/CommonForms/ОписаниеИзмененийСистемы/Form.form +++ b/SSL/src/CommonForms/ОписаниеИзмененийПрограммы/Form.form @@ -893,7 +893,7 @@ ОтложенноеОбновлениеДанных - Auto + DontUse Auto diff --git a/SSL/src/CommonForms/ОписаниеИзмененийСистемы/Help/ru.html b/SSL/src/CommonForms/ОписаниеИзмененийПрограммы/Help/ru.html similarity index 86% rename from SSL/src/CommonForms/ОписаниеИзмененийСистемы/Help/ru.html rename to SSL/src/CommonForms/ОписаниеИзмененийПрограммы/Help/ru.html index 5fa4f5869..0b75129cc 100644 --- a/SSL/src/CommonForms/ОписаниеИзмененийСистемы/Help/ru.html +++ b/SSL/src/CommonForms/ОписаниеИзмененийПрограммы/Help/ru.html @@ -6,8 +6,8 @@
        • Для удобства навигации по тексту можно свернуть или  Развернуть все группы (заголовки).
        • Также предусмотрена команда поиска, с помощью которой можно быстро найти нужную информацию о новой версии.

        Информация о ходе обновления версии ИБ

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

        Возможности для администратора

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

          См. также:

          \ No newline at end of file diff --git a/SSL/src/CommonForms/ОписаниеИзмененийСистемы/Module.bsl b/SSL/src/CommonForms/ОписаниеИзмененийПрограммы/Module.bsl similarity index 94% rename from SSL/src/CommonForms/ОписаниеИзмененийСистемы/Module.bsl rename to SSL/src/CommonForms/ОписаниеИзмененийПрограммы/Module.bsl index 8f8a7ebcd..4b6e900ae 100644 --- a/SSL/src/CommonForms/ОписаниеИзмененийСистемы/Module.bsl +++ b/SSL/src/CommonForms/ОписаниеИзмененийПрограммы/Module.bsl @@ -11,8 +11,7 @@ Элементы.АдресФормыВПрограмме.Видимость = Ложь; КонецЕсли; - Заголовок = НСтр("ru = 'Что нового в конфигурации %1'"); - Заголовок = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(Заголовок, Метаданные.Синоним); + Заголовок = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Что нового в конфигурации %1'"), Метаданные.Синоним); Если ЗначениеЗаполнено(Параметры.ВремяНачалаОбновления) Тогда ВремяНачалаОбновления = Параметры.ВремяНачалаОбновления; @@ -36,8 +35,7 @@ КонецЕсли; Если ДокументОписаниеОбновлений.ВысотаТаблицы = 0 Тогда - Текст = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Конфигурация успешно обновлена на версию %1'"), Метаданные.Версия); + Текст = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Конфигурация успешно обновлена на версию %1'"), Метаданные.Версия); ДокументОписаниеОбновлений.Область("R1C1:R1C1").Текст = Текст; КонецЕсли; @@ -93,7 +91,7 @@ Если Не КлиентСервернаяБаза И Пользователи.ЭтоПолноправныйПользователь(, Истина) Тогда ПараметрЗапускаКлиента = ПараметрыСеанса.ПараметрыКлиентаНаСервере.Получить("ПараметрЗапуска"); - ВыполненоОтключениеРегламентныхЗаданий = Найти(ПараметрЗапускаКлиента, "РегламентныеЗаданияОтключены") <> 0; + ВыполненоОтключениеРегламентныхЗаданий = СтрНайти(ПараметрЗапускаКлиента, "РегламентныеЗаданияОтключены") <> 0; Если Не ВыполненоОтключениеРегламентныхЗаданий Тогда Элементы.ГруппаОтключеныРегламентныеЗадания.Видимость = Ложь; КонецЕсли; @@ -119,7 +117,7 @@ &НаКлиенте Процедура ОписаниеОбновленийВыбор(Элемент, Область, СтандартнаяОбработка) - Если Найти(Область.Текст, "http://") = 1 Или Найти(Область.Текст, "https://") = 1 Тогда + Если СтрНайти(Область.Текст, "http://") = 1 Или СтрНайти(Область.Текст, "https://") = 1 Тогда ПерейтиПоНавигационнойСсылке(Область.Текст); КонецЕсли; @@ -145,7 +143,7 @@ &НаКлиенте Процедура ОтложенноеОбновлениеДанных(Команда) - ОткрытьФорму("Обработка.ОбновлениеИнформационнойБазы.Форма.ИндикацияХодаОтложенногоОбновленияИБ"); + ОткрытьФорму("Обработка.РезультатыОбновленияПрограммы.Форма.ИндикацияХодаОтложенногоОбновленияИБ"); КонецПроцедуры #КонецОбласти diff --git a/SSL/src/CommonForms/ОписаниеИзмененийСистемы/ОписаниеИзмененийСистемы.mdo b/SSL/src/CommonForms/ОписаниеИзмененийПрограммы/ОписаниеИзмененийПрограммы.mdo similarity index 89% rename from SSL/src/CommonForms/ОписаниеИзмененийСистемы/ОписаниеИзмененийСистемы.mdo rename to SSL/src/CommonForms/ОписаниеИзмененийПрограммы/ОписаниеИзмененийПрограммы.mdo index 4c87fea5c..7211d145d 100644 --- a/SSL/src/CommonForms/ОписаниеИзмененийСистемы/ОписаниеИзмененийСистемы.mdo +++ b/SSL/src/CommonForms/ОписаниеИзмененийПрограммы/ОписаниеИзмененийПрограммы.mdo @@ -1,6 +1,6 @@ - ОписаниеИзмененийСистемы + ОписаниеИзмененийПрограммы ru Описание изменений программы diff --git a/SSL/src/CommonForms/ОтправкаSMS/Form.form b/SSL/src/CommonForms/ОтправкаSMS/Form.form new file mode 100644 index 000000000..90971209a --- /dev/null +++ b/SSL/src/CommonForms/ОтправкаSMS/Form.form @@ -0,0 +1,926 @@ + + + + <key>ru</key> + <value>Отправка SMS на телефон</value> + + + Страницы + 41 + + ПараметрыОтправки + 15 + + ГруппаТекстСообщения + 18 + + ТекстСообщения + 3 + true + true + + true + + + ТекстСообщения + + + ТекстСообщенияРасширеннаяПодсказка + 27 + Label + true + true + + Left + + + + ТекстСообщенияКонтекстноеМеню + 4 + true + + InputField + Enter + true + Left + true + + + EditTextChange + ТекстИзменениеТекстаРедактирования + + true + 5 + true + true + true + true + true + true + DontUse + Normal + + + + ГруппаТранслит + 36 + + ОтправлятьВТранслите + 21 + true + true + + true + + + ОтправлятьВТранслите + + Right + + ОтправлятьВТранслитеExtendedTooltip + 28 + Label + true + true + + Left + + + + ОтправлятьВТранслитеКонтекстноеМеню + 22 + true + + CheckBoxField + Enter + true + Left + true + + + + ДлинаСообщенияСимволов + 38 + true + true + + true + + + ДлинаСообщенияСимволов + + + ДлинаСообщенияСимволовРасширеннаяПодсказка + 40 + Label + true + true + + Left + + + + ДлинаСообщенияСимволовКонтекстноеМеню + 39 + true + + LabelField + Enter + true + Left + true + + true + true + + + true + true + + true + + + <key>ru</key> + <value>Группа транслит</value> + + + ru + Группа транслит + + + ГруппаТранслитРасширеннаяПодсказка + 37 + Label + true + true + + Left + + + UsualGroup + + Auto + true + true + Auto + Auto + + + + ГруппаИмяОтправителя + 62 + + ДобавлятьОтправителя + 64 + + <key>ru</key> + <value>Имя отправителя:</value> + + true + true + + true + + + ДобавлятьОтправителя + + Right + + OnChange + ДобавлятьОтправителяПриИзменении + + + ДобавлятьОтправителяРасширеннаяПодсказка + 66 + Label + true + true + + Left + + + + ДобавлятьОтправителяКонтекстноеМеню + 65 + true + + CheckBoxField + Enter + true + Left + true + + + + ИмяОтправителя + 13 + true + false + + true + + + ИмяОтправителя + + None + + ИмяОтправителяExtendedTooltip + 29 + Label + true + true + + Left + + + + ИмяОтправителяКонтекстноеМеню + 14 + true + + InputField + Enter + true + Left + true + + true + true + false + true + true + true + true + Normal + + + true + true + + true + + + <key>ru</key> + <value>Группа имя отправителя</value> + + + ru + Группа имя отправителя + + + ГруппаИмяОтправителяРасширеннаяПодсказка + 63 + Label + true + true + + Left + + + UsualGroup + + Auto + true + true + Auto + Auto + + + true + true + + true + + + <key>ru</key> + <value>Группа текст сообщения</value> + + + ru + Группа текст сообщения + + + ГруппаТекстСообщенияРасширеннаяПодсказка + 26 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + true + true + Auto + Auto + + + true + true + + true + + + <key>ru</key> + <value>Параметры отправки</value> + + + ПараметрыОтправкиExtendedTooltip + 24 + Label + true + true + + Left + + + Page + + Vertical + auto + + + + СтраницаСтатус + 8 + + ГруппаПроверкаСтатуса + 45 + + ДекорацияАнимация + 51 + true + true + + true + + + ДекорацияАнимацияРасширеннаяПодсказка + 53 + Label + true + true + + Left + + + + ДекорацияАнимацияКонтекстноеМеню + 52 + true + + 5 + true + 4 + true + + + CommonPicture.ДлительнаяОперация48 + + + + + ГруппаИнформацияОСтатусеДоставки + 67 + + Отступ + 74 + true + true + + true + + + ОтступРасширеннаяПодсказка + 76 + Label + true + true + + Left + + + + ОтступКонтекстноеМеню + 75 + true + + Label + true + true + + Left + + + + ГруппаСтатусДоставки + 77 + + СтатусОтправки + 71 + true + true + + true + + + СтатусОтправки + + None + + СтатусОтправкиРасширеннаяПодсказка + 73 + Label + true + true + + Left + + + + СтатусОтправкиКонтекстноеМеню + 72 + true + + LabelField + Enter + true + Left + true + + true + true + + + true + true + + true + + + <key>ru</key> + <value>Группа статус доставки</value> + + + ru + Группа статус доставки + + + ГруппаСтатусДоставкиРасширеннаяПодсказка + 78 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + true + true + Auto + Auto + + + true + true + + true + + + ГруппаИнформацияОСтатусеДоставкиРасширеннаяПодсказка + 68 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + true + true + Auto + Auto + + + true + true + + true + + + <key>ru</key> + <value>Группа проверка статуса</value> + + + ru + Группа проверка статуса + + + ГруппаПроверкаСтатусаРасширеннаяПодсказка + 46 + Label + true + true + + Left + + + UsualGroup + + Auto + true + true + Auto + Auto + + + true + true + + true + + + <key>ru</key> + <value>Страница статус</value> + + + ru + Страница статус + + true + + СтраницаСтатусРасширеннаяПодсказка + 30 + Label + true + true + + Left + + + Page + + auto + + + true + true + + true + + + <key>ru</key> + <value>Страницы</value> + + + ru + Страницы + + + СтраницыРасширеннаяПодсказка + 42 + Label + true + true + + Left + + + Pages + + Auto + + + + ГруппаКоманднаяПанель + 43 + + НастройкаОтправкиSMSОткрыть + 34 + true + true + + true + + + НастройкаОтправкиSMSОткрытьРасширеннаяПодсказка + 35 + Label + true + true + + Left + + + CommonForm.НастройкаОтправкиSMS.StandardCommand.Open + Normal + Auto + true + true + UserCmds + Auto + + + Отправить + 5 + + <key>ru</key> + <value>Отправить ></value> + + true + true + + true + + + ОтправитьExtendedTooltip + 23 + Label + true + true + + Left + + + Form.Command.Отправить + Auto + true + true + true + UserCmds + Auto + + + Закрыть + 79 + true + + true + + + ЗакрытьРасширеннаяПодсказка + 80 + Label + true + true + + Left + + + Form.StandardCommand.Close + Normal + Auto + true + true + UserCmds + Auto + + true + true + + true + + + ГруппаКоманднаяПанельРасширеннаяПодсказка + 44 + Label + true + true + + Left + + + CommandBar + + Right + + + + ФормаКоманднаяПанель + -1 + Left + + + OnOpen + ПриОткрытии + + + OnCreateAtServer + ПриСозданииНаСервере + + LockOwner + Use + true + true + Vertical + true + true + true + auto + true + + НомераПолучателей + + <key>ru</key> + <value>Номера получателей</value> + + 1 + + String + + + + true + + + true + + ShowError + + + ТекстСообщения + + <key>ru</key> + <value>Текст сообщения</value> + + 2 + + String + + + + true + + + true + + ShowError + + + ИдентификаторСообщения + + <key>ru</key> + <value>Идентификатор сообщения</value> + + 3 + + String + + 20 + + + + true + + + true + + + + ИмяОтправителя + + <key>ru</key> + <value>Имя отправителя</value> + + 4 + + String + + 20 + + + + true + + + true + + + ИмяОтправителя + + + + ОтправлятьВТранслите + + <key>ru</key> + <value>Отправлять в транслите</value> + + 5 + + Boolean + + + true + + + true + + + ОтправлятьВТранслите + + + + ДлинаСообщенияСимволов + + <key>ru</key> + <value>Длина сообщения, символов</value> + + 6 + + String + + 6 + + + + true + + + true + + + + ДобавлятьОтправителя + + <key>ru</key> + <value>Добавлять отправителя</value> + + 7 + + Boolean + + + true + + + true + + + + СтатусОтправки + + <key>ru</key> + <value>Статус отправки</value> + + 8 + + String + + + + true + + + true + + + + Отправить + + <key>ru</key> + <value>Отправить</value> + + 1 + + ru + Отправить + + + true + + + + Отправить + + + DontUse + Auto + + + НомераПолучателей + + + + Текст + + String + + + + + + + + diff --git a/SSL/src/CommonForms/ОтправкаSMS/Help/ru.html b/SSL/src/CommonForms/ОтправкаSMS/Help/ru.html new file mode 100644 index 000000000..dc037afff --- /dev/null +++ b/SSL/src/CommonForms/ОтправкаSMS/Help/ru.html @@ -0,0 +1,13 @@ + +

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

          +

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

          +

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

          +

          Заполнение сообщения

          +
          • Напишите Текст сообщения. Максимальная длина текста одного сообщения составляет 140 символов (160 символов в латинице или 70 символов в кириллице). Провайдеры могут поддерживать отправку "длинных SMS" (несколько склеенных между собой SMS). Максимальная длина таких SMS определяется оператором, например, Билайн - 480 символов (в латинице), МТС - 1000 символов (в латинице). Необходимо учитывать, что некоторые модели телефонов не умеют склеивать длинные 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 new file mode 100644 index 000000000..d2e1a06df --- /dev/null +++ b/SSL/src/CommonForms/ОтправкаSMS/Module.bsl @@ -0,0 +1,193 @@ + +#Область ОбработчикиСобытийФормы + +&НаСервере +Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) + + Если Параметры.Свойство("АвтоТест") Тогда // Возврат при получении формы для анализа. + Возврат; + КонецЕсли; + + СтатусОтправки = НСтр("ru = 'Сообщение отправляется...'"); + ТекстСообщения = Параметры.Текст; + Если ТипЗнч(Параметры.НомераПолучателей) = Тип("Массив") Тогда + Разделитель = ""; + Для каждого НомерТелефона Из Параметры.НомераПолучателей Цикл + НомераПолучателей = НомераПолучателей + Разделитель + НомерТелефона; + Разделитель = ","; + КонецЦикла; + ИначеЕсли ТипЗнч(Параметры.НомераПолучателей) = Тип("СписокЗначений") Тогда + Разделитель = ""; + Для каждого ИнформацияОТелефоне Из Параметры.НомераПолучателей Цикл + НомераПолучателей = НомераПолучателей + Разделитель + ИнформацияОТелефоне.Значение; + Разделитель = ","; + КонецЦикла; + Иначе + НомераПолучателей = Строка(Параметры.НомераПолучателей); + КонецЕсли; + + Заголовок = НСтр("ru = 'Отправка SMS на телефон'") + " " + НомераПолучателей; +КонецПроцедуры + +&НаКлиенте +Процедура ПриОткрытии(Отказ) + ДлинаСообщенияСимволов = 0; +КонецПроцедуры + +#КонецОбласти + +#Область ОбработчикиСобытийЭлементовШапкиФормы + +&НаКлиенте +Процедура ДобавлятьОтправителяПриИзменении(Элемент) + Элементы.ИмяОтправителя.Доступность = ДобавлятьОтправителя; +КонецПроцедуры + +#КонецОбласти + +#Область ОбработчикиКомандФормы + +&НаКлиенте +Процедура Отправить(Команда) + + Если СтрДлина(ТекстСообщения) = 0 Тогда + ПоказатьПредупреждение(, НСтр("ru = 'Необходимо ввести текст сообщения'")); + Возврат; + КонецЕсли; + + Если НЕ ОтправкаSMSНастроена() Тогда + ОткрытьФорму("ОбщаяФорма.НастройкаОтправкиSMS"); + Возврат; + КонецЕсли; + + Элементы.Страницы.ТекущаяСтраница = Элементы.СтраницаСтатус; + + Если Элементы.Найти("НастройкаОтправкиSMSОткрыть") <> Неопределено Тогда + Элементы.НастройкаОтправкиSMSОткрыть.Видимость = Ложь; + КонецЕсли; + + Элементы.Закрыть.Видимость = Истина; + Элементы.Закрыть.КнопкаПоУмолчанию = Истина; + Элементы.Отправить.Видимость = Ложь; + + // Отправка из серверного контекста. + ОтправитьSMS(); + + // проверка статуса отправки + Если Не ПустаяСтрока(ИдентификаторСообщения) Тогда + ПроверитьСтатусДоставки(); + Иначе + Элементы.ДекорацияАнимация.Картинка = БиблиотекаКартинок.Ошибка32; + СтатусОтправки = НСтр("ru = 'Сообщение не было отправлено (см. журнал регистрации).'"); + ОшибкаОтправкиСообщения(); + КонецЕсли; + +КонецПроцедуры + +&НаСервереБезКонтекста +Процедура ОшибкаОтправкиСообщения() + ОписаниеОшибки = НСтр("ru = 'При попытке передать сообщение для отправки провайдеру SMS услуг возникла ошибка.'"); + ИмяСобытия = НСтр("ru = 'Ошибка отправки SMS отсутствует идентификатор сообщения.'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()); + ЗаписьЖурналаРегистрации(ИмяСобытия, УровеньЖурналаРегистрации.Ошибка, , , ОписаниеОшибки); +КонецПроцедуры + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +&НаСервере +Процедура ОтправитьSMS() + + // Сброс отображаемого статуса доставки. + ИдентификаторСообщения = ""; + + // Подготовка номеров получателей. + МассивНомеров = СтрокиТекстаВМассив(НомераПолучателей); + + // отправка + РезультатОтправки = ОтправкаSMS.ОтправитьSMS(МассивНомеров, ТекстСообщения, ИмяОтправителя, ОтправлятьВТранслите); + + // Проверка доставки для первого получателя. + Если РезультатОтправки.ОтправленныеСообщения.Количество() > 0 Тогда + ИдентификаторСообщения = РезультатОтправки.ОтправленныеСообщения[0].ИдентификаторСообщения; + КонецЕсли; + + // Вывод информации об ошибках в процессе отправки. + Если Не ПустаяСтрока(РезультатОтправки.ОписаниеОшибки) Тогда + ОбщегоНазначенияКлиентСервер.СообщитьПользователю(РезультатОтправки.ОписаниеОшибки); + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура ПроверитьСтатусДоставки() + + ОтключитьОбработчикОжидания("ПроверитьСтатусДоставки");; + РезультатДоставки = СтатусДоставки(ИдентификаторСообщения); + СтатусОтправки = РезультатДоставки.Описание; + + Если РезультатДоставки.Статус = "Отправляется" ИЛИ РезультатДоставки.Статус = "Отправлено" Тогда + // Повтор проверки статуса доставки, если сообщение в процессе передачи абоненту. + ПодключитьОбработчикОжидания("ПроверитьСтатусДоставки", 5, Истина); + ИначеЕсли РезультатДоставки.Статус = "Доставлено" Тогда + Элементы.ДекорацияАнимация.Картинка = БиблиотекаКартинок.Успешно32; + Иначе + Элементы.ДекорацияАнимация.Картинка = БиблиотекаКартинок.Ошибка32; + КонецЕсли; + +КонецПроцедуры + +&НаСервереБезКонтекста +Функция СтатусДоставки(ИдентификаторСообщения) + + СтатусыДоставки = Новый Соответствие; + СтатусыДоставки.Вставить("Ошибка", НСтр("ru = 'Произошла ошибка при подключении к провайдеру SMS'")); + СтатусыДоставки.Вставить("НеОтправлялось", НСтр("ru = 'Сообщение не отправлялось.'")); + СтатусыДоставки.Вставить("Отправляется", НСтр("ru = 'Отправка сообщения...'")); + СтатусыДоставки.Вставить("Отправлено", НСтр("ru = 'Отправлено, ожидается подтверждение о доставке...'")); + СтатусыДоставки.Вставить("НеОтправлено", НСтр("ru = 'Сообщение не отправлено'")); + СтатусыДоставки.Вставить("Доставлено", НСтр("ru = 'Сообщение доставлено'")); + СтатусыДоставки.Вставить("НеДоставлено", НСтр("ru = 'Не доставлено'")); + + РезультатДоставки = Новый Структура("Статус, Описание"); + РезультатДоставки.Статус = ОтправкаSMS.СтатусДоставки(ИдентификаторСообщения); + РезультатДоставки.Описание = СтатусыДоставки.Получить(РезультатДоставки.Статус); + Если РезультатДоставки.Описание = Неопределено Тогда + РезультатДоставки.Описание = СтатусыДоставки["НеДоставлено"]; + КонецЕсли; + + Возврат РезультатДоставки; + +КонецФункции + +&НаСервере +Функция СтрокиТекстаВМассив(Текст) + + Результат = Новый Массив; + + ТекстовыйДокумент = Новый ТекстовыйДокумент; + ТекстовыйДокумент.УстановитьТекст(Текст); + + Для НомерСтроки = 1 По ТекстовыйДокумент.КоличествоСтрок() Цикл + Строка = ТекстовыйДокумент.ПолучитьСтроку(НомерСтроки); + Если Не ПустаяСтрока(Строка) Тогда + Результат.Добавить(Строка); + КонецЕсли; + КонецЦикла; + + Возврат Результат; + +КонецФункции + +&НаКлиенте +Процедура ТекстИзменениеТекстаРедактирования(Элемент, Текст, СтандартнаяОбработка) + ДлинаСообщенияСимволов = СтрДлина(Текст); + СтандартнаяОбработка = Ложь; +КонецПроцедуры + +&НаСервереБезКонтекста +Функция ОтправкаSMSНастроена() + Возврат ОтправкаSMS.НастройкаОтправкиSMSВыполнена(); +КонецФункции + +#КонецОбласти diff --git a/SSL/src/CommonForms/ИнформацияНеразделенногоПользователя/ИнформацияНеразделенногоПользователя.mdo b/SSL/src/CommonForms/ОтправкаSMS/ОтправкаSMS.mdo similarity index 56% rename from SSL/src/CommonForms/ИнформацияНеразделенногоПользователя/ИнформацияНеразделенногоПользователя.mdo rename to SSL/src/CommonForms/ОтправкаSMS/ОтправкаSMS.mdo index c03a4f2cf..313c76b9f 100644 --- a/SSL/src/CommonForms/ИнформацияНеразделенногоПользователя/ИнформацияНеразделенногоПользователя.mdo +++ b/SSL/src/CommonForms/ОтправкаSMS/ОтправкаSMS.mdo @@ -1,10 +1,15 @@ - - ИнформацияНеразделенногоПользователя + + ОтправкаSMS ru - Информация неразделенного пользователя + Отправка SMS + + + ru + + PersonalComputer MobileDevice true diff --git a/SSL/src/CommonForms/ОтправкаСообщения/Form.form b/SSL/src/CommonForms/ОтправкаСообщения/Form.form index 61320cd4a..12cff6a92 100644 --- a/SSL/src/CommonForms/ОтправкаСообщения/Form.form +++ b/SSL/src/CommonForms/ОтправкаСообщения/Form.form @@ -1165,7 +1165,7 @@ ОтправитьПисьмо - Auto + DontUse Auto @@ -1191,7 +1191,7 @@ TextPicture - Auto + DontUse Auto @@ -1216,7 +1216,7 @@ ОткрытьФайл - Auto + DontUse Auto diff --git a/SSL/src/CommonForms/ОтправкаСообщения/Module.bsl b/SSL/src/CommonForms/ОтправкаСообщения/Module.bsl index 4f159409f..d3e733d17 100644 --- a/SSL/src/CommonForms/ОтправкаСообщения/Module.bsl +++ b/SSL/src/CommonForms/ОтправкаСообщения/Module.bsl @@ -122,7 +122,7 @@ ПочтовыйАдресПолучателя = Параметры.Кому; ИначеЕсли ТипЗнч(Параметры.Кому) = Тип("Массив") Тогда Для Каждого СтруктураПолучателя Из Параметры.Кому Цикл - МассивАдресов = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(СтруктураПолучателя.Адрес, ";"); + МассивАдресов = СтрРазделить(СтруктураПолучателя.Адрес, ";"); Для Каждого Адрес Из МассивАдресов Цикл Если ПустаяСтрока(Адрес) Тогда Продолжить; @@ -327,7 +327,7 @@ Исключение ОбщегоНазначенияКлиентСервер.СообщитьПользователю( КраткоеПредставлениеОшибки(ИнформацияОбОшибке()), , - ПочтовыйАдресПолучателя); + "ПочтовыйАдресПолучателя"); Возврат; КонецПопытки; diff --git a/SSL/src/CommonForms/ОтправкаТабличныхДокументовПоПочте/Form.form b/SSL/src/CommonForms/ОтправкаТабличныхДокументовПоПочте/Form.form index ba00795ff..b27bebecf 100644 --- a/SSL/src/CommonForms/ОтправкаТабличныхДокументовПоПочте/Form.form +++ b/SSL/src/CommonForms/ОтправкаТабличныхДокументовПоПочте/Form.form @@ -345,7 +345,6 @@ true true true - UseIfNecessary auto true @@ -467,7 +466,7 @@ Прикрепить - Auto + DontUse Auto diff --git a/SSL/src/CommonForms/ОтправкаТабличныхДокументовПоПочте/Module.bsl b/SSL/src/CommonForms/ОтправкаТабличныхДокументовПоПочте/Module.bsl index 24796541d..5c3ae6e03 100644 --- a/SSL/src/CommonForms/ОтправкаТабличныхДокументовПоПочте/Module.bsl +++ b/SSL/src/CommonForms/ОтправкаТабличныхДокументовПоПочте/Module.bsl @@ -55,29 +55,20 @@ &НаКлиенте Процедура Прикрепить(Команда) - - ВыбранныеФорматыСохранения = Новый Массив; - + ОтмеченныеФорматы = Новый Массив; Для Каждого ВыбранныйФормат Из ФорматыСохранения Цикл Если ВыбранныйФормат.Пометка Тогда - ВыбранныеФорматыСохранения.Добавить(ВыбранныйФормат.Значение); + ОтмеченныеФорматы.Добавить(ВыбранныйФормат.Значение); КонецЕсли; КонецЦикла; - Если ВыбранныеФорматыСохранения.Количество() = 0 Тогда + Если ОтмеченныеФорматы.Количество() = 0 Тогда ПоказатьПредупреждение(, НСтр("ru = 'Необходимо указать как минимум один из предложенных форматов.'")); Возврат; КонецЕсли; - ПараметрыОтправки = Новый Структура; - ПараметрыОтправки.Вставить("Тема", Тема); - ПараметрыОтправки.Вставить("Вложения", ПоместитьТабличныеДокументыВоВременноеХранилище(ВыбранныеФорматыСохранения)); - ПараметрыОтправки.Вставить("УдалятьФайлыПослеОтправки", Истина); - - Закрыть(Истина); - - РаботаСПочтовымиСообщениямиКлиент.СоздатьНовоеПисьмо(ПараметрыОтправки); - + СохраненныеДокументы = ПоместитьТабличныеДокументыВоВременноеХранилище(ОтмеченныеФорматы); + ОповеститьОВыборе(СохраненныеДокументы); КонецПроцедуры #КонецОбласти @@ -171,7 +162,7 @@ КонецФункции &НаСервере -Функция ПоместитьТабличныеДокументыВоВременноеХранилище(ВыбранныеФорматыСохранения) +Функция ПоместитьТабличныеДокументыВоВременноеХранилище(ОтмеченныеФорматы) Результат = Новый СписокЗначений; // Архив @@ -192,7 +183,7 @@ Продолжить; КонецЕсли; - Для Каждого ТипФайла Из ВыбранныеФорматыСохранения Цикл + Для Каждого ТипФайла Из ОтмеченныеФорматы Цикл ПараметрыФормата = ТаблицаФорматов.НайтиСтроки(Новый Структура("ТипФайлаТабличногоДокумента", ТипФайла))[0]; ИмяФайла = ТабличныйДокумент.Представление + "." + ПараметрыФормата.Расширение; diff --git a/SSL/src/CommonForms/ОтчетОСохраненииФайловЭлектронныхПодписей/Form.form b/SSL/src/CommonForms/ОтчетОСохраненииФайловЭлектронныхПодписей/Form.form index 591677aef..b01be26ea 100644 --- a/SSL/src/CommonForms/ОтчетОСохраненииФайловЭлектронныхПодписей/Form.form +++ b/SSL/src/CommonForms/ОтчетОСохраненииФайловЭлектронныхПодписей/Form.form @@ -118,7 +118,6 @@ Vertical true true - UseIfNecessary auto true @@ -176,7 +175,7 @@ ОткрытьПапкуСФайлами - Auto + DontUse Auto diff --git a/SSL/src/CommonForms/ПанельОтчетов/Form.form b/SSL/src/CommonForms/ПанельОтчетов/Form.form index 3e7f5287f..f2de5d0b6 100644 --- a/SSL/src/CommonForms/ПанельОтчетов/Form.form +++ b/SSL/src/CommonForms/ПанельОтчетов/Form.form @@ -494,7 +494,8 @@ 382 <key>ru</key> - <value>В быстрый доступ следует перемещать отчеты, которые используются постоянно. + <value>Для перемещения отчета в эту группу нажмите на отчете правой кнопкой мыши и выберите "Переместить в быстрый доступ". +В быстрый доступ следует перемещать отчеты, которые используются постоянно. Отчеты, перемещенные в быстрый доступ, будут отображаться вверху панели отчетов, выше всех остальных отчетов. Это персональная настройка, у каждого пользователя свой быстрый доступ.</value> @@ -1475,6 +1476,76 @@ Auto + + Декорация2 + 389 + true + true + + true + + + Декорация2РасширеннаяПодсказка + 391 + Label + true + true + + Left + + + + Декорация2КонтекстноеМеню + 390 + true + + Label + true + true + + true + Left + + + + ОписаниеМобильногоПриложения + 392 + + <key>ru</key> + <value>Как посмотреть отчеты на смартфоне или планшете?</value> + + true + true + + true + + + ОписаниеМобильногоПриложенияРасширеннаяПодсказка + 394 + Label + true + true + + Left + + + + ОписаниеМобильногоПриложенияКонтекстноеМеню + 393 + true + + Label + true + true + + + Click + ОписаниеМобильногоПриложенияНажатие + + true + Left + + true true @@ -1526,6 +1597,10 @@ BeforeClose ПередЗакрытием + + OnReopen + ПриПовторномОткрытии + OnCreateAtServer ПриСозданииНаСервере @@ -1547,7 +1622,6 @@ true true true - Use auto true @@ -1697,6 +1771,7 @@ 2 + CatalogRef.ИдентификаторыОбъектовРасширений String CatalogRef.ДополнительныеОтчетыИОбработки CatalogRef.ИдентификаторыОбъектовМетаданных @@ -1773,6 +1848,7 @@ 6 + CatalogRef.ИдентификаторыОбъектовРасширений CatalogRef.ИдентификаторыОбъектовМетаданных @@ -1973,12 +2049,12 @@ - СкрытОтбором + КлючЗамеров <key>ru</key> - <value>Скрыт отбором</value> + <value>Ключ замеров</value> - 20 + 15 String @@ -2109,6 +2185,7 @@ 16 + CatalogRef.ИдентификаторыОбъектовРасширений CatalogRef.ИдентификаторыОбъектовМетаданных @@ -2140,6 +2217,7 @@ 1 + CatalogRef.ИдентификаторыОбъектовРасширений CatalogRef.ИдентификаторыОбъектовМетаданных @@ -2275,6 +2353,7 @@ 6 + CatalogRef.ИдентификаторыОбъектовРасширений CatalogRef.ИдентификаторыОбъектовМетаданных @@ -2292,6 +2371,7 @@ 7 + CatalogRef.ИдентификаторыОбъектовРасширений CatalogRef.ИдентификаторыОбъектовМетаданных @@ -2327,10 +2407,7 @@ 17 - Number - - 1 - + Boolean true @@ -2347,8 +2424,7 @@ 20 - Number - + Boolean true @@ -2476,6 +2552,21 @@ true + + ПараметрыКлиента + + <key>ru</key> + <value>Параметры клиента</value> + + 26 + + + true + + + true + + Настроить @@ -2500,7 +2591,7 @@ </handler> </action> <representation>TextPicture</representation> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <formCommands> @@ -2525,7 +2616,7 @@ <name>ПереместитьВБыстрыйДоступ</name> </handler> </action> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <formCommands> @@ -2550,7 +2641,7 @@ <name>УбратьИзБыстрогоДоступа</name> </handler> </action> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <formCommands> @@ -2575,7 +2666,7 @@ <name>Изменить</name> </handler> </action> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <formCommands> @@ -2598,7 +2689,7 @@ </handler> </action> <representation>TextPicture</representation> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <formCommands> @@ -2620,7 +2711,7 @@ <name>ВсеОтчеты</name> </handler> </action> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <formCommands> @@ -2646,7 +2737,7 @@ <name>Обновить</name> </handler> </action> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <formCommands> @@ -2669,7 +2760,7 @@ </handler> </action> <representation>TextPicture</representation> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <parameters> diff --git a/SSL/src/CommonForms/ПанельОтчетов/Module.bsl b/SSL/src/CommonForms/ПанельОтчетов/Module.bsl index 183bf6c59..3bb9a5770 100644 --- a/SSL/src/CommonForms/ПанельОтчетов/Module.bsl +++ b/SSL/src/CommonForms/ПанельОтчетов/Module.bsl @@ -6,6 +6,9 @@ Возврат; КонецЕсли; + ПараметрыКлиента = ВариантыОтчетов.ПараметрыКлиента(); + ПараметрыКлиента.Вставить("ПутьКПодсистеме", Параметры.ПутьКПодсистеме); + КартинкаБыстрыйДоступ = БиблиотекаКартинок.БыстрыйДоступ; ЦветСкрытыхВариантов = ЦветаСтиля.СкрытыйВариантОтчетаЦвет; ЦветВидимыхВариантов = ЦветаСтиля.ВидимыйВариантОтчетаЦвет; @@ -16,21 +19,28 @@ Элементы.КоманднаяПанель.Ширина = 25; Элементы.СтрокаПоиска.Ширина = 35; ЦветГруппыВариантовОтчетов = ЦветаСтиля.ГруппаВариантовОтчетовЦвет82; - ШрифтВажнойГруппы = Новый Шрифт("MS Shell Dlg", 10, Истина, Ложь, Ложь, Ложь, 100); + ШрифтВажнойГруппы = Новый Шрифт("MS Shell Dlg", 10, Истина, Ложь, Ложь, Ложь, 100); ШрифтОбычнойГруппы = Новый Шрифт("MS Shell Dlg", 8, Истина, Ложь, Ложь, Ложь, 100); - ШрифтРаздела = Новый Шрифт("MS Shell Dlg", 12, Истина, Ложь, Ложь, Ложь, 100); + ШрифтРаздела = Новый Шрифт("MS Shell Dlg", 12, Истина, Ложь, Ложь, Ложь, 100); ШрифтВажнойНадписи = Новый Шрифт(, , Истина); Иначе // Такси. ЦветГруппыВариантовОтчетов = ЦветаСтиля.ГруппаВариантовОтчетовЦвет; - ШрифтВажнойГруппы = Новый Шрифт("Arial", 12, Ложь, Ложь, Ложь, Ложь, 100); + ШрифтВажнойГруппы = Новый Шрифт("Arial", 12, Ложь, Ложь, Ложь, Ложь, 100); ШрифтОбычнойГруппы = Новый Шрифт("Arial", 12, Ложь, Ложь, Ложь, Ложь, 90); - ШрифтРаздела = Новый Шрифт("Arial", 12, Истина, Ложь, Ложь, Ложь, 100); + ШрифтРаздела = Новый Шрифт("Arial", 12, Истина, Ложь, Ложь, Ложь, 100); ШрифтВажнойНадписи = Новый Шрифт("Arial", 10, Истина, Ложь, Ложь, Ложь, 100); КонецЕсли; ГлобальныеНастройки = ВариантыОтчетов.ГлобальныеНастройки(); Элементы.СтрокаПоиска.ПодсказкаВвода = ГлобальныеНастройки.Поиск.ПодсказкаВвода; + ОписаниеМобильногоПриложения = ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(ГлобальныеНастройки, "ОписаниеМобильногоПриложения"); + Если ОписаниеМобильногоПриложения = Неопределено Тогда + Элементы.ОписаниеМобильногоПриложения.Видимость = Ложь; + Иначе + ПараметрыКлиента.Вставить("ОписаниеМобильногоПриложения", ОписаниеМобильногоПриложения); + КонецЕсли; + ЦветРаздела = ЦветГруппыВариантовОтчетов; Элементы.БыстрыйДоступШапкаНадпись.Шрифт = ШрифтВажнойГруппы; @@ -62,7 +72,7 @@ КонецЕсли; // Заполнение панели. - ОбновитьПанельОтчетов(); + ОбновитьПанельОтчетовНаСервере(); КонецПроцедуры &НаКлиенте @@ -72,27 +82,41 @@ #Иначе ВебКлиент = Ложь; #КонецЕсли - Если ПоказатьОповещениеОПодсказках Тогда + Если ПоказатьОповещениеОПодсказках И ПоказыватьПодсказки Тогда ПоказатьОповещениеПользователя( НСтр("ru = 'Новая возможность'"), "e1cib/data/ХранилищеНастроек.ХранилищеВариантовОтчетов.Форма.ОписаниеНовойВозможностиПоВыводуОписаний", НСтр("ru = 'Вывод описаний в панелях отчетов'"), - БиблиотекаКартинок.Информация32 - ); + БиблиотекаКартинок.Информация32); КонецЕсли; КонецПроцедуры &НаКлиенте -Процедура ОбработкаОповещения(ИмяСобытия, Параметр, Источник) - Если ИмяСобытия = ВариантыОтчетовКлиентСервер.ИмяСобытияИзменениеВарианта() Тогда - Событие = ""; - Если ТипЗнч(Параметр) = Тип("Структура") Тогда - Если Параметр.Свойство("ПоказыватьПодсказки") Тогда - ПоказыватьПодсказки = Параметр.ПоказыватьПодсказки; - Событие = "ПоказыватьПодсказкиПриИзменении"; - КонецЕсли; +Процедура ПриПовторномОткрытии() + Если РежимНастройки Или ЗначениеЗаполнено(СтрокаПоиска) Тогда + РежимНастройки = Ложь; + СтрокаПоиска = ""; + ОбновитьПанельОтчетовНаКлиенте("ПриПовторномОткрытии"); + КонецЕсли; +КонецПроцедуры + +&НаКлиенте +Процедура ОбработкаОповещения(ИмяГлобальногоСобытия, Изменения, Источник) + Если Источник = ЭтотОбъект Тогда + Возврат; + КонецЕсли; + ИмяЛокальногоСобытия = Неопределено; + Если ИмяГлобальногоСобытия = ВариантыОтчетовКлиентСервер.ИмяСобытияИзменениеВарианта() Тогда + ИмяЛокальногоСобытия = ""; + ИначеЕсли ИмяГлобальногоСобытия = ВариантыОтчетовКлиентСервер.ИмяСобытияИзменениеОбщихНастроек() Тогда + Если Изменения.ПоказыватьПодсказки <> ПоказыватьПодсказки + Или Изменения.ИскатьВоВсехРазделах <> ИскатьВоВсехРазделах Тогда + ИмяЛокальногоСобытия = ""; КонецЕсли; - ОбновитьПанельОтчетов(Событие); + ЗаполнитьЗначенияСвойств(ЭтотОбъект, Изменения, "ПоказыватьПодсказки, ИскатьВоВсехРазделах, ПоказатьОповещениеОПодсказках"); + КонецЕсли; + Если ИмяЛокальногоСобытия <> Неопределено Тогда + ОбновитьПанельОтчетовНаКлиенте(ИмяЛокальногоСобытия); КонецЕсли; КонецПроцедуры @@ -114,43 +138,7 @@ Возврат; КонецЕсли; Вариант = Найденные[0]; - - ПараметрыОткрытия = Новый Структура; - ПараметрыОткрытия.Вставить("КлючВарианта", Вариант.КлючВарианта); - ПараметрыОткрытия.Вставить("Раздел", ТекущийРазделСсылка); - - Соседи = ДобавленныеВарианты.НайтиСтроки(Новый Структура("Подсистема", Вариант.Подсистема)); - Если Соседи.Количество() > 1 Тогда - Найденные = ПодсистемыПрограммы.НайтиСтроки(Новый Структура("Ссылка", Вариант.Подсистема)); - ПараметрыОткрытия.Вставить("Подсистема", Вариант.Подсистема); - ПараметрыОткрытия.Вставить("ПодсистемаПредставление", Найденные[0].Представление); - КонецЕсли; - - // Открытие - Если Вариант.Дополнительный Тогда - - ПараметрыОткрытия.Вставить("Вариант", Вариант.Ссылка); - ПараметрыОткрытия.Вставить("Отчет", Вариант.Отчет); - ВариантыОтчетовКлиент.ОткрытьВариантДополнительногоОтчета(ПараметрыОткрытия); - - ИначеЕсли Не ЗначениеЗаполнено(Вариант.ИмяОтчета) Тогда - - ТекстПредупреждения = СтрЗаменить(НСтр("ru = 'Не заполнено имя отчета для варианта ""%1"".'"), "%1", Вариант.Наименование); - ПоказатьПредупреждение(, ТекстПредупреждения); - - Иначе - - Уникальность = "Отчет." + Вариант.ИмяОтчета; - Если ЗначениеЗаполнено(Вариант.КлючВарианта) Тогда - Уникальность = Уникальность + "/КлючВарианта." + Вариант.КлючВарианта; - КонецЕсли; - - ПараметрыОткрытия.Вставить("КлючПараметровПечати", Уникальность); - ПараметрыОткрытия.Вставить("КлючСохраненияПоложенияОкна", Уникальность); - - ОткрытьФорму("Отчет." + Вариант.ИмяОтчета + ".Форма", ПараметрыОткрытия, Неопределено, Уникальность); - - КонецЕсли; + ВариантыОтчетовКлиент.ОткрытьФормуОтчета(ЭтотОбъект, Вариант, Новый Структура("Подсистема", Вариант.Подсистема)); КонецПроцедуры &НаКлиенте @@ -208,7 +196,7 @@ Возврат; КонецЕсли; - ОбновитьПанельОтчетов("СтрокаПоискаПриИзменении"); + ОбновитьПанельОтчетовНаКлиенте("СтрокаПоискаПриИзменении"); Если ЗначениеЗаполнено(СтрокаПоиска) Тогда ТекущийЭлемент = Элементы.СтрокаПоиска; @@ -218,7 +206,7 @@ &НаКлиенте Процедура ИскатьВоВсехРазделахПриИзменении(Элемент) Если ЗначениеЗаполнено(СтрокаПоиска) Тогда - ОбновитьПанельОтчетов("ИскатьВоВсехРазделахПриИзменении"); + ОбновитьПанельОтчетовНаКлиенте("ИскатьВоВсехРазделахПриИзменении"); ТекущийЭлемент = Элементы.ВыполнитьПоиск; Иначе ТекущийЭлемент = Элементы.СтрокаПоиска; @@ -228,7 +216,7 @@ &НаКлиенте Процедура ЗаголовокРазделаНажатие(Элемент) ГруппаРазделаИмя = Элемент.Родитель.Имя; - Подстроки = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(ГруппаРазделаИмя, "_"); + Подстроки = СтрРазделить(ГруппаРазделаИмя, "_"); ПриоритетРаздела = Подстроки[1]; Найденные = ПодсистемыПрограммы.НайтиСтроки(Новый Структура("Приоритет", ПриоритетРаздела)); Если Найденные.Количество() = 0 Тогда @@ -236,20 +224,30 @@ КонецЕсли; Раздел = Найденные[0]; + ПутьКПодсистеме = СтрЗаменить(Раздел.ПолноеИмя, "Подсистема.", ""); + ФормаПараметры = Новый Структура; - ФормаПараметры.Вставить("ПутьКПодсистеме", СтрЗаменить(Раздел.ПолноеИмя, "Подсистема.", "")); + ФормаПараметры.Вставить("ПутьКПодсистеме", ПутьКПодсистеме); ФормаПараметры.Вставить("СтрокаПоиска", СтрокаПоиска); ФормаПараметры.Вставить("ИскатьВоВсехРазделах", 0); ФормаВладелец = ЭтотОбъект; ФормаУникальность = Истина; + Если ПараметрыКлиента.ВыполнятьЗамеры Тогда + Замер = НачатьЗамер("ПанельОтчетов.Открытие", ПараметрыКлиента.ПрефиксЗамеров + "; " + ПутьКПодсистеме); + КонецЕсли; + ОткрытьФорму("ОбщаяФорма.ПанельОтчетов", ФормаПараметры, ФормаВладелец, ФормаУникальность); + + Если ПараметрыКлиента.ВыполнятьЗамеры Тогда + ЗакончитьЗамер(Замер); + КонецЕсли; КонецПроцедуры &НаКлиенте Процедура ПоказыватьПодсказкиПриИзменении(Элемент) - ОбновитьПанельОтчетов("ПоказыватьПодсказкиПриИзменении"); + ОбновитьПанельОтчетовНаКлиенте("ПоказыватьПодсказкиПриИзменении"); КонецПроцедуры #КонецОбласти @@ -259,13 +257,13 @@ &НаКлиенте Процедура Настроить(Команда) РежимНастройки = Не РежимНастройки; - ОбновитьПанельОтчетов(); + ОбновитьПанельОтчетовНаКлиенте(?(РежимНастройки, "ВходВРежимНастройки", "ВыходИзРежимаНастройки")); КонецПроцедуры &НаКлиенте Процедура ПереместитьВБыстрыйДоступ(Команда) Если ВебКлиент Тогда - Элемент = Элементы.Найти(Сред(Команда.Имя, Найти(Команда.Имя, "_")+1)); + Элемент = Элементы.Найти(Сред(Команда.Имя, СтрНайти(Команда.Имя, "_")+1)); Иначе Элемент = ТекущийЭлемент; КонецЕсли; @@ -285,7 +283,7 @@ &НаКлиенте Процедура УбратьИзБыстрогоДоступа(Команда) Если ВебКлиент Тогда - Элемент = Элементы.Найти(Сред(Команда.Имя, Найти(Команда.Имя, "_")+1)); + Элемент = Элементы.Найти(Сред(Команда.Имя, СтрНайти(Команда.Имя, "_")+1)); Иначе Элемент = ТекущийЭлемент; КонецЕсли; @@ -305,7 +303,7 @@ &НаКлиенте Процедура Изменить(Команда) Если ВебКлиент Тогда - Элемент = Элементы.Найти(Сред(Команда.Имя, Найти(Команда.Имя, "_")+1)); + Элемент = Элементы.Найти(Сред(Команда.Имя, СтрНайти(Команда.Имя, "_")+1)); Иначе Элемент = ТекущийЭлемент; КонецЕсли; @@ -342,17 +340,26 @@ РазделСсылка = ТекущийРазделСсылка; КонецЕсли; ФормаПараметры.Вставить("РазделСсылка", РазделСсылка); + + Если ПараметрыКлиента.ВыполнятьЗамеры Тогда + Замер = НачатьЗамер("СписокОтчетов.Открытие"); + КонецЕсли; + ОткрытьФорму("Справочник.ВариантыОтчетов.ФормаСписка", ФормаПараметры, , "ВариантыОтчетов.ВсеОтчеты"); + + Если ПараметрыКлиента.ВыполнятьЗамеры Тогда + ЗакончитьЗамер(Замер); + КонецЕсли; КонецПроцедуры &НаКлиенте Процедура Обновить(Команда) - ОбновитьПанельОтчетов(); + ОбновитьПанельОтчетовНаКлиенте("Обновить"); КонецПроцедуры &НаКлиенте Процедура ВыполнитьПоиск(Команда) - ОбновитьПанельОтчетов(); + ОбновитьПанельОтчетовНаКлиенте("ВыполнитьПоиск"); КонецПроцедуры #КонецОбласти @@ -399,7 +406,71 @@ &НаКлиенте Процедура СброситьНастройкиЗавершение(Ответ, ДополнительныеПараметры) Экспорт Если Ответ = КодВозвратаДиалога.Да Тогда - СброситьНастройкиИОбновитьПанельОтчетов(); + РежимНастройки = Ложь; + ОбновитьПанельОтчетовНаКлиенте("СброситьНастройки"); + КонецЕсли; +КонецПроцедуры + +&НаКлиенте +Процедура ОбновитьПанельОтчетовНаКлиенте(Событие = "") + Если ПараметрыКлиента.ВыполнятьЗамеры Тогда + Замер = НачатьЗамер(Событие); + КонецЕсли; + + Результат = ОбновитьПанельОтчетовНаСервере(Событие); + + Если ПараметрыКлиента.ВыполнятьЗамеры Тогда + ЗакончитьЗамер(Замер); + КонецЕсли; + + СтандартныеПодсистемыКлиент.ПоказатьРезультатВыполнения(ЭтотОбъект, Результат); +КонецПроцедуры + +&НаКлиенте +Функция НачатьЗамер(Событие, Комментарий = Неопределено) + Если Комментарий = Неопределено Тогда + Комментарий = ПараметрыКлиента.ПрефиксЗамеров; + КонецЕсли; + + Замер = Новый Структура("Имя, Идентификатор, МодульОценкаПроизводительностиКлиентСервер"); + Если Событие = "СписокОтчетов.Открытие" Или Событие = "ПанельОтчетов.Открытие" Тогда + Замер.Имя = Событие; + Комментарий = Комментарий + "; " + НСтр("ru = 'Из панели отчетов:'") + " " + ПараметрыКлиента.ПутьКПодсистеме; + Иначе + Если РежимНастройки Или Событие = "ВыходИзРежимаНастройки" Тогда + Замер.Имя = "ПанельОтчетов.РежимНастройки"; + ИначеЕсли ЗначениеЗаполнено(СтрокаПоиска) Тогда + Замер.Имя = "ПанельОтчетов.Поиск"; // Сам по себе поиск интересен только в режиме просмотра. + КонецЕсли; + Комментарий = Комментарий + "; " + ПараметрыКлиента.ПутьКПодсистеме; + Комментарий = Комментарий + "; " + НСтр("ru = 'Подсказки:'") + " " + Строка(ПоказыватьПодсказки); + КонецЕсли; + + Если Замер.Имя = Неопределено Тогда + Возврат Неопределено; + КонецЕсли; + + Если ЗначениеЗаполнено(СтрокаПоиска) Тогда + Комментарий = Комментарий + + "; " + НСтр("ru = 'Поиск:'") + " " + Строка(СтрокаПоиска) + + "; " + НСтр("ru = 'Во всех разделах:'") + " " + Строка(ИскатьВоВсехРазделах); + Иначе + Комментарий = Комментарий + "; " + НСтр("ru = 'Без поиска'"); + КонецЕсли; + + Если Событие = "ВыходИзРежимаНастройки" Тогда + Комментарий = Комментарий + "; " + НСтр("ru = 'Выход из режима настройки'"); + КонецЕсли; + Замер.Идентификатор = Новый УникальныйИдентификатор; + Замер.МодульОценкаПроизводительностиКлиентСервер = ОбщегоНазначенияКлиент.ОбщийМодуль("ОценкаПроизводительностиКлиентСервер"); + Замер.МодульОценкаПроизводительностиКлиентСервер.НачатьРучнойЗамерВремени(Замер.Имя, Замер.Идентификатор, Комментарий); + Возврат Замер; +КонецФункции + +&НаКлиенте +Процедура ЗакончитьЗамер(Замер) + Если Замер <> Неопределено Тогда + Замер.МодульОценкаПроизводительностиКлиентСервер.ЗакончитьРучнойЗамерВремени(Замер.Идентификатор); КонецЕсли; КонецПроцедуры @@ -467,15 +538,13 @@ КонецПроцедуры &НаСервере -Процедура СброситьНастройкиИОбновитьПанельОтчетов() - РежимНастройки = Ложь; - РегистрыСведений.НастройкиВариантовОтчетов.СброситьНастройкиПользователяВРазделе(ТекущийРазделСсылка); - ОбновитьПанельОтчетов(); -КонецПроцедуры - -&НаСервере -Процедура ОбновитьПанельОтчетов(Знач Событие = "") - Если Событие = "" Или Событие = "СтрокаПоискаПриИзменении" Тогда +Функция ОбновитьПанельОтчетовНаСервере(Знач Событие = "") + Результат = Новый Структура; + Если Событие = "СброситьНастройки" Тогда + РегистрыСведений.НастройкиВариантовОтчетов.СброситьНастройкиПользователяВРазделе(ТекущийРазделСсылка); + КонецЕсли; + + Если Событие = "" Или Событие = "СтрокаПоискаПриИзменении" Или Событие = "СброситьНастройки" Тогда Если ЗначениеЗаполнено(СтрокаПоиска) Тогда СписокВыбора = Элементы.СтрокаПоиска.СписокВыбора; ЭлементСписка = СписокВыбора.НайтиПоЗначению(СтрокаПоиска); @@ -496,7 +565,19 @@ КонецЕсли; ИначеЕсли Событие = "ПоказыватьПодсказкиПриИзменении" Или Событие = "ИскатьВоВсехРазделахПриИзменении" Тогда - СохранитьНастройкиВсехПанелейОтчетов(); + + ОбщиеНастройки = Новый Структура; + ОбщиеНастройки.Вставить("ПоказыватьПодсказки", ПоказыватьПодсказки); + ОбщиеНастройки.Вставить("ИскатьВоВсехРазделах", ИскатьВоВсехРазделах); + ОбщиеНастройки.Вставить("ПоказатьОповещениеОПодсказках", ПоказатьОповещениеОПодсказках); + + ВариантыОтчетов.СохранитьОбщиеНастройкиПанели(ОбщиеНастройки); + + СтандартныеПодсистемыКлиентСервер.ОповеститьОткрытыеФормы( + Результат, + ВариантыОтчетовКлиентСервер.ИмяСобытияИзменениеОбщихНастроек(), + ОбщиеНастройки); + КонецЕсли; Элементы.ИскатьВоВсехРазделах.Видимость = Не РежимНастройки И ЗначениеЗаполнено(СтрокаПоиска); @@ -542,7 +623,9 @@ // Заполнение панели отчетов ЗаполнитьПанельОтчетов(); -КонецПроцедуры + + Возврат Результат; +КонецФункции //////////////////////////////////////////////////////////////////////////////// // Сервер @@ -670,8 +753,7 @@ &НаСервере Процедура ЗагрузитьВсеНастройки() ОбщиеНастройки = ВариантыОтчетов.ОбщиеНастройкиПанели(); - // СПоказатьОповещениеОПодсказках, ПоказыватьПодсказки, ИскатьВоВсехРазделах". - ЗаполнитьЗначенияСвойств(ЭтотОбъект, ОбщиеНастройки); + ЗаполнитьЗначенияСвойств(ЭтотОбъект, ОбщиеНастройки, "ПоказатьОповещениеОПодсказках, ПоказыватьПодсказки, ИскатьВоВсехРазделах"); ЛокальныеНастройки = ОбщегоНазначения.ХранилищеОбщихНастроекЗагрузить( ВариантыОтчетовКлиентСервер.ПолноеИмяПодсистемы(), @@ -681,18 +763,6 @@ КонецЕсли; КонецПроцедуры -&НаСервере -Процедура СохранитьНастройкиВсехПанелейОтчетов() - ОбщиеНастройки = Новый Структура; - ОбщиеНастройки.Вставить("ПоказыватьПодсказки", ПоказыватьПодсказки); - ОбщиеНастройки.Вставить("ИскатьВоВсехРазделах", ИскатьВоВсехРазделах); - - ОбщегоНазначения.ХранилищеОбщихНастроекСохранить( - ВариантыОтчетовКлиентСервер.ПолноеИмяПодсистемы(), - "ПанельОтчетов", - ОбщиеНастройки); -КонецПроцедуры - &НаСервере Процедура СохранитьНастройкиЭтойПанелиОтчетов() ЛокальныеНастройки = Новый Структура; @@ -738,7 +808,7 @@ КонецЦикла; Если ПараметрыЗаполнения.НеВыведено > 0 Тогда // Вывод информационной надписи. ЗаголовокНадписи = НСтр("ru = 'Выведены первые %1 отчетов из других разделов, уточните поисковый запрос.'"); - ЗаголовокНадписи = СтрЗаменить(ЗаголовокНадписи, "%1", ПараметрыЗаполнения.ПределВывода); + ЗаголовокНадписи = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ЗаголовокНадписи, ПараметрыЗаполнения.ПределВывода); Надпись = Элементы.Вставить("ПределВыводаПревышен", Тип("ДекорацияФормы"), Элементы.РезультатыПоискаИзДругихРазделов); Надпись.Заголовок = ЗаголовокНадписи; Надпись.Шрифт = ШрифтВажнойНадписи; @@ -885,8 +955,13 @@ | ВариантыОтчетов.ТипОтчета, | ВариантыОтчетов.КлючВарианта, | ВариантыОтчетов.Автор, - | ВариантыОтчетов.ВидимостьПоУмолчанию, - | ВариантыОтчетов.Родитель + | ВЫБОР + | КОГДА ВариантыОтчетов.ВидимостьПоУмолчаниюПереопределена + | ТОГДА ВариантыОтчетов.ВидимостьПоУмолчанию + | ИНАЧЕ ПредопределенныеРазмещение.Ссылка.ВидимостьПоУмолчанию + | КОНЕЦ КАК ВидимостьПоУмолчанию, + | ВариантыОтчетов.Родитель, + | ВариантыОтчетов.ПредопределенныйВариант.КлючЗамеров КАК КлючЗамеров |ПОМЕСТИТЬ втПредопределенные |ИЗ | Справочник.ВариантыОтчетов КАК ВариантыОтчетов @@ -898,6 +973,41 @@ | И (ВариантыОтчетов.ПометкаУдаления = ЛОЖЬ) | И (ВариантыОтчетов.Отчет В (&ОтчетыПользователя)) | И (НЕ ПредопределенныеРазмещение.Ссылка В (&ОтключенныеВариантыПрограммы)) + | + |ОБЪЕДИНИТЬ ВСЕ + | + |ВЫБРАТЬ + | ВариантыОтчетов.Ссылка, + | ПредопределенныеРазмещение.Подсистема, + | ПредопределенныеРазмещение.Важный, + | ПредопределенныеРазмещение.СмТакже, + | ВЫБОР + | КОГДА ПОДСТРОКА(ВариантыОтчетов.Описание, 1, 1) = """" + | ТОГДА ВЫРАЗИТЬ(ПредопределенныеРазмещение.Ссылка.Описание КАК СТРОКА(1000)) + | ИНАЧЕ ВЫРАЗИТЬ(ВариантыОтчетов.Описание КАК СТРОКА(1000)) + | КОНЕЦ, + | ВариантыОтчетов.Наименование, + | ВариантыОтчетов.Отчет, + | ВариантыОтчетов.ТипОтчета, + | ВариантыОтчетов.КлючВарианта, + | ВариантыОтчетов.Автор, + | ВЫБОР + | КОГДА ВариантыОтчетов.ВидимостьПоУмолчаниюПереопределена + | ТОГДА ВариантыОтчетов.ВидимостьПоУмолчанию + | ИНАЧЕ ПредопределенныеРазмещение.Ссылка.ВидимостьПоУмолчанию + | КОНЕЦ, + | ВариантыОтчетов.Родитель, + | ВариантыОтчетов.ПредопределенныйВариант.КлючЗамеров + |ИЗ + | Справочник.ВариантыОтчетов КАК ВариантыОтчетов + | ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.ПредопределенныеВариантыОтчетовРасширений.Размещение КАК ПредопределенныеРазмещение + | ПО (ВариантыОтчетов.Ссылка В (&ВариантыНайденныеПоиском) + | ИЛИ ПредопределенныеРазмещение.Подсистема В (&ПодсистемыНайденныеПоиском)) + | И ВариантыОтчетов.ПредопределенныйВариант = ПредопределенныеРазмещение.Ссылка + | И (ПредопределенныеРазмещение.Подсистема В (&МассивПодсистем)) + | И (ВариантыОтчетов.ПометкаУдаления = ЛОЖЬ) + | И (ВариантыОтчетов.Отчет В (&ОтчетыПользователя)) + | И (НЕ ПредопределенныеРазмещение.Ссылка В (&ОтключенныеВариантыПрограммы)) |; | |//////////////////////////////////////////////////////////////////////////////// @@ -920,7 +1030,8 @@ | ВариантыРазмещение.Ссылка.КлючВарианта, | ВариантыРазмещение.Ссылка.Автор, | ВариантыРазмещение.Ссылка.Родитель, - | ВариантыРазмещение.Ссылка.ВидимостьПоУмолчанию + | ВариантыРазмещение.Ссылка.ВидимостьПоУмолчанию, + | ВариантыРазмещение.Ссылка.ПредопределенныйВариант.КлючЗамеров КАК КлючЗамеров |ПОМЕСТИТЬ втВарианты |ИЗ | Справочник.ВариантыОтчетов.Размещение КАК ВариантыРазмещение @@ -953,7 +1064,8 @@ | КОГДА ЕСТЬNULL(втВарианты.Родитель, втПредопределенные.Родитель) = ЗНАЧЕНИЕ(Справочник.ВариантыОтчетов.ПустаяСсылка) | ТОГДА ИСТИНА | ИНАЧЕ ЛОЖЬ - | КОНЕЦ КАК ВерхнийУровень + | КОНЕЦ КАК ВерхнийУровень, + | ЕСТЬNULL(втВарианты.КлючЗамеров, втПредопределенные.КлючЗамеров) КАК КлючЗамеров |ПОМЕСТИТЬ втВсеВарианты |ИЗ | втПредопределенные КАК втПредопределенные @@ -989,6 +1101,7 @@ | ЕСТЬNULL(ЛичныеНастройки.БыстрыйДоступ, ЛОЖЬ) КАК БыстрыйДоступ, | ВЫБОР | КОГДА втВсеВарианты.ТипОтчета = &ТипВнутренний + | ИЛИ втВсеВарианты.ТипОтчета = &ТипРасширение | ТОГДА втВсеВарианты.Отчет.Имя | КОГДА втВсеВарианты.ТипОтчета = &ТипДополнительный | ТОГДА """" @@ -1001,7 +1114,8 @@ | втВсеВарианты.ТипОтчета, | втВсеВарианты.КлючВарианта, | втВсеВарианты.Родитель, - | втВсеВарианты.ВерхнийУровень КАК ВерхнийУровень + | втВсеВарианты.ВерхнийУровень КАК ВерхнийУровень, + | втВсеВарианты.КлючЗамеров |ИЗ | втВсеВарианты КАК втВсеВарианты | ЛЕВОЕ СОЕДИНЕНИЕ втПодсистемы КАК втПодсистемы @@ -1038,11 +1152,17 @@ РезультатПоиска = ВариантыОтчетов.НайтиСсылки(ПараметрыПоиска); + Если ПользователиКлиентСервер.ЭтоСеансВнешнегоПользователя() Тогда + Запрос.УстановитьПараметр("ТекущийПользователь", ПользователиКлиентСервер.ТекущийВнешнийПользователь()); + Иначе + Запрос.УстановитьПараметр("ТекущийПользователь", Пользователи.ТекущийПользователь()); + КонецЕсли; + Запрос.УстановитьПараметр("МассивПодсистем", МассивПодсистем); Запрос.УстановитьПараметр("ТаблицаПодсистем", ТаблицаПодсистем); Запрос.УстановитьПараметр("РазделСсылка", ТекущийРазделСсылка); - Запрос.УстановитьПараметр("ТекущийПользователь", Пользователи.ТекущийПользователь()); Запрос.УстановитьПараметр("ТипВнутренний", Перечисления.ТипыОтчетов.Внутренний); + Запрос.УстановитьПараметр("ТипРасширение", Перечисления.ТипыОтчетов.Расширение); Запрос.УстановитьПараметр("ТипДополнительный", Перечисления.ТипыОтчетов.Дополнительный); Запрос.УстановитьПараметр("ВариантыНайденныеПоиском", РезультатПоиска.Ссылки); Если ИспользоватьПодсветку И РезультатПоиска.Подсистемы.Количество() > 0 Тогда @@ -1087,6 +1207,7 @@ ТаблицаРезультат.Колонки.Добавить("КоличествоПодчиненных", Новый ОписаниеТипов("Число")); Если ИспользоватьПодсветку Тогда + // Удаление записей о вариантах, связанных с подсистемами, если запись не фигурирует в связи. Для Каждого КлючИЗначение Из РезультатПоиска.ВариантыСвязанныеСПодсистемами Цикл ВариантСсылка = КлючИЗначение.Ключ; СвязанныеПодсистемы = КлючИЗначение.Значение; @@ -1097,6 +1218,16 @@ КонецЕсли; КонецЦикла; КонецЦикла; + // Удаление записей о родителях, связанных с вариантами, если родитель пытается вывестись один (без вариантов). + Для Каждого РодительСсылка Из РезультатПоиска.РодителиСвязанныеСВариантами Цикл + МестаВывода = ТаблицаРезультат.НайтиСтроки(Новый Структура("Ссылка", РодительСсылка)); + Для Каждого СтрокаТаблицы Из МестаВывода Цикл + Найденные = ТаблицаРезультат.НайтиСтроки(Новый Структура("Подсистема, Родитель", СтрокаТаблицы.Подсистема, РодительСсылка)); + Если Найденные.Количество() = 0 Тогда + ТаблицаРезультат.Удалить(СтрокаТаблицы); + КонецЕсли; + КонецЦикла; + КонецЦикла; КонецЕсли; Если ТолькоТекущийРаздел Тогда @@ -1225,10 +1356,7 @@ И ( ЕстьВариантыБезГруппы Или ЕстьВариантыСГруппой - Или ЕстьВариантыСмТакже - ) - ) - ); + Или ЕстьВариантыСмТакже))); Элементы[ПараметрыЗаполнения.Префикс + "БезГруппыПодвал"].Видимость = ЕстьВариантыБезГруппы; Элементы[ПараметрыЗаполнения.Префикс + "СГруппойПодвал"].Видимость = ЕстьВариантыСГруппой; Элементы[ПараметрыЗаполнения.Префикс + "СмТакжеПодвал"].Видимость = ЕстьВариантыСмТакже; @@ -1765,7 +1893,7 @@ Если ТребуетсяПодсветка Тогда Если СтрокаПорядкаВывода.ЭтоПродолжение Тогда Суффикс = НСтр("ru = '(продолжение)'"); - Если Прав(ПодсветкаПредставления.Значение, СтрДлина(Суффикс)) <> Суффикс Тогда + Если Не СтрЗаканчиваетсяНа(ПодсветкаПредставления.Значение, Суффикс) Тогда ПодсветкаПредставления.Значение = ПодсветкаПредставления.Значение + " " + Суффикс; КонецЕсли; КонецЕсли; @@ -2030,4 +2158,9 @@ КонецФункции +&НаКлиенте +Процедура ОписаниеМобильногоПриложенияНажатие(Элемент) + СтандартныеПодсистемыКлиент.ПоказатьРезультатВыполнения(ЭтотОбъект, ПараметрыКлиента.ОписаниеМобильногоПриложения); +КонецПроцедуры + #КонецОбласти diff --git a/SSL/src/CommonForms/ПараметрыАдминистрированияПрограммы/Form.form b/SSL/src/CommonForms/ПараметрыАдминистрированияПрограммы/Form.form index cb69e0ae9..3e640b5f6 100644 --- a/SSL/src/CommonForms/ПараметрыАдминистрированияПрограммы/Form.form +++ b/SSL/src/CommonForms/ПараметрыАдминистрированияПрограммы/Form.form @@ -1143,7 +1143,6 @@ <autoFillCheck>true</autoFillCheck> <allowFormCustomize>true</allowFormCustomize> <enabled>true</enabled> - <verticalScroll>UseIfNecessary</verticalScroll> <showTitle>auto</showTitle> <showCloseButton>true</showCloseButton> <attributes> @@ -1416,7 +1415,7 @@ <name>Записать</name> </handler> </action> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <formCommands> @@ -1438,7 +1437,7 @@ <name>Отмена</name> </handler> </action> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <parameters> diff --git a/SSL/src/CommonForms/ПараметрыАдминистрированияПрограммы/Module.bsl b/SSL/src/CommonForms/ПараметрыАдминистрированияПрограммы/Module.bsl index 004cd7c25..3a6b82450 100644 --- a/SSL/src/CommonForms/ПараметрыАдминистрированияПрограммы/Module.bsl +++ b/SSL/src/CommonForms/ПараметрыАдминистрированияПрограммы/Module.bsl @@ -29,7 +29,7 @@ Если ПользовательИБ <> Неопределено Тогда ИдентификаторАдминистратораИБ = ПользовательИБ.УникальныйИдентификатор; КонецЕсли; - Пользователи.НайтиНеоднозначныхПользователейИБ(, ИдентификаторАдминистратораИБ); + Пользователи.НайтиНеоднозначныхПользователейИБ(Неопределено, ИдентификаторАдминистратораИБ); АдминистраторИБ = Справочники.Пользователи.НайтиПоРеквизиту("ИдентификаторПользователяИБ", ИдентификаторАдминистратораИБ); КонецЕсли; @@ -71,7 +71,8 @@ Исключение Возврат; // Обработка не требуется. Форма будет открыта в штатном режиме. КонецПопытки; - Закрыть(ПараметрыАдминистрирования); + Отказ = Истина; + ВыполнитьОбработкуОповещения(ЭтотОбъект.ОписаниеОповещенияОЗакрытии, ПараметрыАдминистрирования); КонецЕсли; КонецПроцедуры @@ -283,7 +284,7 @@ КонецЕсли; ПараметрыПодключения = ОбщегоНазначенияКлиентСервер.СтруктураПараметровДляУстановкиВнешнегоСоединения(); - ПараметрыПодключения.КаталогИнформационнойБазы = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(СтрокаСоединенияИнформационнойБазы(), """")[1]; + ПараметрыПодключения.КаталогИнформационнойБазы = СтрРазделить(СтрокаСоединенияИнформационнойБазы(), """")[1]; ПараметрыПодключения.ИмяПользователя = ИмяАдминистратораИнформационнойБазы; ПараметрыПодключения.ПарольПользователя = ПарольАдминистратораИнформационнойБазы; diff --git a/SSL/src/CommonForms/ПараметрыПроксиСервера/Form.form b/SSL/src/CommonForms/ПараметрыПроксиСервера/Form.form index a4646bbb5..47a3c696f 100644 --- a/SSL/src/CommonForms/ПараметрыПроксиСервера/Form.form +++ b/SSL/src/CommonForms/ПараметрыПроксиСервера/Form.form @@ -582,7 +582,6 @@ <autoFillCheck>true</autoFillCheck> <allowFormCustomize>true</allowFormCustomize> <enabled>true</enabled> - <verticalScroll>UseIfNecessary</verticalScroll> <showTitle>auto</showTitle> <showCloseButton>true</showCloseButton> <attributes> @@ -941,7 +940,7 @@ </handler> </action> <representation>TextPicture</representation> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <formCommands> @@ -963,7 +962,7 @@ <name>ДополнительныеПараметрыПроксиСервера</name> </handler> </action> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <formCommands> @@ -985,7 +984,7 @@ <name>КнопкаОтмена</name> </handler> </action> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <parameters> diff --git a/SSL/src/CommonForms/ПараметрыПроксиСервера/Module.bsl b/SSL/src/CommonForms/ПараметрыПроксиСервера/Module.bsl index fd77f6667..e5f9301fc 100644 --- a/SSL/src/CommonForms/ПараметрыПроксиСервера/Module.bsl +++ b/SSL/src/CommonForms/ПараметрыПроксиСервера/Module.bsl @@ -19,6 +19,8 @@ Если НастройкаПроксиНаКлиенте Тогда НастройкаПроксиСервера = ПолучениеФайловИзИнтернета.НастройкиПроксиНаКлиенте(); Иначе + АвтоЗаголовок = Ложь; + Заголовок = НСтр("ru = 'Параметры прокси-сервера на сервере 1С:Предприятия'"); НастройкаПроксиСервера = ПолучениеФайловИзИнтернета.НастройкиПроксиНаСервере(); КонецЕсли; @@ -303,11 +305,11 @@ Если НастройкаПроксиНаКлиенте ИЛИ ОбщегоНазначенияПовтИсп.РежимРаботыПрограммы().Файловый Тогда - ОбщегоНазначения.ХранилищеОбщихНастроекСохранить("НастройкаПроксиСервера", , НастройкаПроксиСервера); - ОбновитьПовторноИспользуемыеЗначения(); + ОбщегоНазначения.ХранилищеОбщихНастроекСохранить("НастройкаПроксиСервера", "", НастройкаПроксиСервера); Иначе ПолучениеФайловИзИнтернетаСлужебный.СохранитьНастройкиПроксиНаСервере1СПредприятие(НастройкаПроксиСервера); КонецЕсли; + ОбновитьПовторноИспользуемыеЗначения(); КонецПроцедуры @@ -348,8 +350,8 @@ Результат.Вставить("СерверFTP" , Прокси.Сервер("ftp")); Результат.Вставить("ПортFTP" , Прокси.Порт("ftp")); - Результат.Вставить("Пользователь", Прокси.Пользователь); - Результат.Вставить("Пароль" , Прокси.Пароль); + Результат.Вставить("Пользователь", Прокси.Пользователь("")); + Результат.Вставить("Пароль" , Прокси.Пароль("")); Результат.Вставить("НеИспользоватьПроксиДляЛокальныхАдресов", Прокси.НеИспользоватьПроксиДляЛокальныхАдресов); @@ -384,7 +386,7 @@ Функция НормализованныйАдресПроксиСервера(Знач АдресПроксиСервера) АдресПроксиСервера = СокрЛП(АдресПроксиСервера); - ПозицияПробела = Найти(АдресПроксиСервера, " "); + ПозицияПробела = СтрНайти(АдресПроксиСервера, " "); Если ПозицияПробела > 0 Тогда // Если в адресе сервера присутствуют пробелы, то // берется часть адреса перед первым пробелом. diff --git a/SSL/src/CommonForms/ПечатьДокументов/Form.form b/SSL/src/CommonForms/ПечатьДокументов/Form.form index a46db0127..5b6cc78d7 100644 --- a/SSL/src/CommonForms/ПечатьДокументов/Form.form +++ b/SSL/src/CommonForms/ПечатьДокументов/Form.form @@ -59,6 +59,33 @@ <horizontalAlign>Left</horizontalAlign> </extInfo> </items> + <items xsi:type="form:Button"> + <name>ПредварительныйПросмотр</name> + <id>214</id> + <visible>true</visible> + <enabled>true</enabled> + <userVisible> + <common>true</common> + </userVisible> + <extendedTooltip> + <name>ПредварительныйПросмотрРасширеннаяПодсказка</name> + <id>215</id> + <type>Label</type> + <autoMaxWidth>true</autoMaxWidth> + <autoMaxHeight>true</autoMaxHeight> + <extInfo xsi:type="form:LabelDecorationExtInfo"> + <horizontalAlign>Left</horizontalAlign> + </extInfo> + </extendedTooltip> + <type>UsualButton</type> + <commandName>Form.Item.ТекущаяПечатнаяФорма.StandardCommand.Preview</commandName> + <buttonImportance>Normal</buttonImportance> + <representation>Picture</representation> + <autoMaxWidth>true</autoMaxWidth> + <autoMaxHeight>true</autoMaxHeight> + <placementArea>UserCmds</placementArea> + <representationInContextMenu>Auto</representationInContextMenu> + </items> <items xsi:type="form:FormField"> <name>Копий</name> <id>117</id> @@ -329,6 +356,33 @@ </extendedTooltip> <extInfo xsi:type="form:ButtonGroupExtInfo"/> </items> + <items xsi:type="form:Button"> + <name>ВычислитьСумму</name> + <id>187</id> + <visible>true</visible> + <enabled>true</enabled> + <userVisible> + <common>true</common> + </userVisible> + <extendedTooltip> + <name>ВычислитьСуммуExtendedTooltip</name> + <id>188</id> + <type>Label</type> + <autoMaxWidth>true</autoMaxWidth> + <autoMaxHeight>true</autoMaxHeight> + <extInfo xsi:type="form:LabelDecorationExtInfo"> + <horizontalAlign>Left</horizontalAlign> + </extInfo> + </extendedTooltip> + <commandName>Form.Command.ВычислитьСумму</commandName> + <buttonImportance>Normal</buttonImportance> + <representation>Auto</representation> + <autoMaxWidth>true</autoMaxWidth> + <autoMaxHeight>true</autoMaxHeight> + <placementArea>UserCmds</placementArea> + <representationInContextMenu>Auto</representationInContextMenu> + <locationInCommandBar>InCommandBarAndInAdditionalSubmenu</locationInCommandBar> + </items> <visible>true</visible> <enabled>true</enabled> <userVisible> @@ -353,124 +407,6 @@ <horizontalAlign>Left</horizontalAlign> </extInfo> </items> - <items xsi:type="form:FormGroup"> - <name>ГруппаСумма</name> - <id>185</id> - <items xsi:type="form:Button"> - <name>ВычислитьСумму</name> - <id>187</id> - <visible>true</visible> - <enabled>true</enabled> - <userVisible> - <common>true</common> - </userVisible> - <extendedTooltip> - <name>ВычислитьСуммуExtendedTooltip</name> - <id>188</id> - <type>Label</type> - <autoMaxWidth>true</autoMaxWidth> - <autoMaxHeight>true</autoMaxHeight> - <extInfo xsi:type="form:LabelDecorationExtInfo"> - <horizontalAlign>Left</horizontalAlign> - </extInfo> - </extendedTooltip> - <type>UsualButton</type> - <commandName>Form.Command.ВычислитьСумму</commandName> - <buttonImportance>Normal</buttonImportance> - <representation>Auto</representation> - <autoMaxWidth>true</autoMaxWidth> - <autoMaxHeight>true</autoMaxHeight> - <placementArea>UserCmds</placementArea> - <representationInContextMenu>Auto</representationInContextMenu> - </items> - <items xsi:type="form:FormField"> - <name>Сумма</name> - <id>189</id> - <visible>true</visible> - <enabled>true</enabled> - <userVisible> - <common>true</common> - </userVisible> - <dataPath xsi:type="form:DataPath"> - <segments>СуммаВыделенныхЯчеек</segments> - </dataPath> - <titleLocation>None</titleLocation> - <toolTip> - <key>ru</key> - <value>Сумма чисел выделенных ячеек</value> - </toolTip> - <extendedTooltip> - <name>СуммаExtendedTooltip</name> - <id>191</id> - <type>Label</type> - <autoMaxWidth>true</autoMaxWidth> - <autoMaxHeight>true</autoMaxHeight> - <extInfo xsi:type="form:LabelDecorationExtInfo"> - <horizontalAlign>Left</horizontalAlign> - </extInfo> - </extendedTooltip> - <contextMenu> - <name>СуммаКонтекстноеМеню</name> - <id>190</id> - <autoFill>true</autoFill> - </contextMenu> - <type>InputField</type> - <editMode>Enter</editMode> - <showInHeader>true</showInHeader> - <headerHorizontalAlign>Left</headerHorizontalAlign> - <showInFooter>true</showInFooter> - <extInfo xsi:type="form:InputFieldExtInfo"> - <width>10</width> - <autoMaxWidth>true</autoMaxWidth> - <autoMaxHeight>true</autoMaxHeight> - <wrap>true</wrap> - <editFormat> - <key>ru</key> - <value>ЧН=-</value> - </editFormat> - <chooseType>true</chooseType> - <typeDomainEnabled>true</typeDomainEnabled> - <backColor xsi:type="core:ColorRef"> - <color>Style.FormBackColor</color> - </backColor> - <borderColor xsi:type="core:ColorRef"> - <color>Style.FormBackColor</color> - </borderColor> - <textSize>Normal</textSize> - </extInfo> - </items> - <visible>true</visible> - <enabled>true</enabled> - <userVisible> - <common>true</common> - </userVisible> - <title> - <key>ru</key> - <value> </value> - - - ru - - - - ГруппаСуммаExtendedTooltip - 186 - Label - true - true - - Left - - - UsualGroup - - Auto - true - true - Auto - Auto - - КоманднаяПанельЕще 192 @@ -502,6 +438,58 @@ Auto InAdditionalSubmenu + + ФормаПредварительныйПросмотр + 216 + true + true + + true + + + ФормаПредварительныйПросмотрРасширеннаяПодсказка + 217 + Label + true + true + + Left + + + Form.Item.ТекущаяПечатнаяФорма.StandardCommand.Preview + Normal + Auto + true + true + UserCmds + Auto + + + ФормаПараметрыСтраницы + 218 + true + true + + true + + + ФормаПараметрыСтраницыРасширеннаяПодсказка + 219 + Label + true + true + + Left + + + Form.Item.ТекущаяПечатнаяФорма.StandardCommand.PageSetup + Normal + Auto + true + true + UserCmds + Auto + ГруппаСохранитьОтправитьВсеДействия 194 @@ -695,6 +683,7 @@ true UserCmds Auto + InAdditionalSubmenu КнопкаСнятьФлажкиПодменю @@ -721,6 +710,7 @@ true UserCmds Auto + InAdditionalSubmenu КнопкаПереместитьВверхПодменю @@ -747,6 +737,7 @@ true UserCmds Auto + InAdditionalSubmenu КнопкаПереместитьВнизПодменю @@ -773,6 +764,7 @@ true UserCmds Auto + InAdditionalSubmenu КнопкаСброситьНастройкиПодменю @@ -799,6 +791,7 @@ true UserCmds Auto + InAdditionalSubmenu true true @@ -1357,23 +1350,23 @@ Страницы 9 - СтраницаПечатнаяФормаОбразец - 104 + СтраницаТекущаяПечатнаяФорма + 209 - ПечатнаяФормаОбразец - 105 + ТекущаяПечатнаяФорма + 211 true true true - ПечатнаяФормаОбразец + ТекущаяПечатнаяФорма None - ПечатнаяФормаОбразецExtendedTooltip - 180 + ТекущаяПечатнаяФормаРасширеннаяПодсказка + 213 Label true true @@ -1382,8 +1375,8 @@ - ПечатнаяФормаОбразецКонтекстноеМеню - 106 + ТекущаяПечатнаяФормаКонтекстноеМеню + 212 true SpreadsheetDocumentField @@ -1392,7 +1385,7 @@ Left true - 50 + 30 true 10 true @@ -1401,8 +1394,8 @@ Special ScrollAlways ScrollAlways + Always Auto - true true true true @@ -1413,9 +1406,17 @@ true + + <key>ru</key> + <value>Страница текущая печатная форма</value> + + + ru + Страница текущая печатная форма + - СтраницаПечатнаяФормаОбразецExtendedTooltip - 179 + СтраницаТекущаяПечатнаяФормаРасширеннаяПодсказка + 210 Label true true @@ -1425,9 +1426,6 @@ Page - - StdPicture.SpreadsheetInsertPageBreak - Vertical auto @@ -1648,8 +1646,7 @@ OnClose ПриЗакрытии - 115 - 20 + 15 DontBlock true true @@ -2072,6 +2069,59 @@ true + + ТекущаяПечатнаяФорма + + <key>ru</key> + <value>Текущая печатная форма</value> + + 20 + + SpreadsheetDocument + + + true + + + true + + + + + ТекущийРеквизитСПечатнойФормой + + <key>ru</key> + <value>Текущий реквизит с печатной формой</value> + + 21 + + String + + + + true + + + true + + + + РазделениеВключено + + <key>ru</key> + <value>Разделение включено</value> + + 22 + + Boolean + + + true + + + true + + Отправить @@ -2094,8 +2144,8 @@ <name>Отправить</name> </handler> </action> - <representation>Text</representation> - <currentRowUse>Auto</currentRowUse> + <representation>Picture</representation> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <formCommands> @@ -2122,7 +2172,7 @@ </handler> </action> <representation>TextPicture</representation> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <formCommands> @@ -2149,7 +2199,7 @@ </handler> </action> <representation>Picture</representation> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <formCommands> @@ -2172,7 +2222,7 @@ </handler> </action> <representation>Picture</representation> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <formCommands> @@ -2197,7 +2247,7 @@ <name>УстановитьФлажки</name> </handler> </action> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <formCommands> @@ -2222,7 +2272,7 @@ <name>СнятьФлажки</name> </handler> </action> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <formCommands> @@ -2247,7 +2297,7 @@ <name>ПоказатьСкрытьНастройкуКоличестваКопий</name> </handler> </action> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <formCommands> @@ -2272,8 +2322,8 @@ <name>Сохранить</name> </handler> </action> - <representation>Text</representation> - <currentRowUse>Auto</currentRowUse> + <representation>Picture</representation> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <formCommands> @@ -2295,7 +2345,7 @@ <name>СброситьНастройки</name> </handler> </action> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <formCommands> @@ -2321,7 +2371,7 @@ </handler> </action> <representation>Picture</representation> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <formCommands> @@ -2346,7 +2396,7 @@ <name>ПереключитьРедактирование</name> </handler> </action> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <formCommands> @@ -2372,7 +2422,7 @@ </handler> </action> <representation>Picture</representation> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <parameters> diff --git a/SSL/src/CommonForms/ПечатьДокументов/Module.bsl b/SSL/src/CommonForms/ПечатьДокументов/Module.bsl index b88ddcc55..32d3c2d15 100644 --- a/SSL/src/CommonForms/ПечатьДокументов/Module.bsl +++ b/SSL/src/CommonForms/ПечатьДокументов/Module.bsl @@ -11,6 +11,8 @@ Возврат; КонецЕсли; + РазделениеВключено = ОбщегоНазначенияПовтИсп.РазделениеВключено(); + Если Не Пользователи.РолиДоступны("ИзменениеМакетовПечатныхФорм") Тогда Элементы.КнопкаПерейтиКУправлениюМакетами.Видимость = Ложь; КонецЕсли; @@ -171,11 +173,6 @@ КонецЕсли; КонецПроцедуры -&НаКлиенте -Процедура Подключаемый_ПолеТабличногоДокументаПриАктивизацииОбласти(Элемент) - РассчитатьСуммуЯчеек(); -КонецПроцедуры - #КонецОбласти #Область ОбработчикиСобытийЭлементовТаблицыФормыНастройкиПечатныхФорм @@ -237,6 +234,7 @@ &НаКлиенте Процедура Сохранить(Команда) + ОбновитьДанныеТекущейПечатнойФормыКлиент(); ПараметрыФормы = Новый Структура; ПараметрыФормы.Вставить("ОбъектыПечати", ОбъектыПечати); ОткрытьФорму("ОбщаяФорма.СохранениеПечатнойФормы", ПараметрыФормы, ЭтотОбъект); @@ -244,9 +242,8 @@ &НаКлиенте Процедура Отправить(Команда) - + ОбновитьДанныеТекущейПечатнойФормыКлиент(); ОтправитьПечатныеФормыПоПочте(); - КонецПроцедуры &НаКлиенте @@ -264,14 +261,15 @@ &НаКлиенте Процедура ПерейтиКУправлениюМакетами(Команда) + ОбновитьДанныеТекущейПечатнойФормыКлиент(); ОткрытьФорму("РегистрСведений.ПользовательскиеМакетыПечати.Форма.МакетыПечатныхФорм"); КонецПроцедуры &НаКлиенте Процедура Печать(Команда) + ОбновитьДанныеТекущейПечатнойФормыКлиент(); ТабличныеДокументы = ТабличныеДокументыДляПечати(); - УправлениеПечатьюКлиент.РаспечататьТабличныеДокументы(ТабличныеДокументы, ОбъектыПечати, ТабличныеДокументы.Количество() > 1, ?(НастройкиПечатныхФорм.Количество() > 1, Копий, 1)); @@ -299,6 +297,7 @@ &НаКлиенте Процедура ИзменитьМакет(Команда) + ОбновитьДанныеТекущейПечатнойФормыКлиент(); ОткрытьМакетДляРедактирования(); КонецПроцедуры @@ -309,13 +308,7 @@ &НаКлиенте Процедура ВычислитьСумму(Команда) - НастройкаПечатнойФормы = ТекущаяНастройкаПечатнойФормы(); - Если НастройкаПечатнойФормы <> Неопределено Тогда - ТабличныйДокумент = ЭтотОбъект[НастройкаПечатнойФормы.ИмяРеквизита]; - ВыделенныеОбласти = СтандартныеПодсистемыКлиент.ВыделенныеОбласти(ТабличныйДокумент); - СуммаВыделенныхЯчеек = ВычислитьСуммуСервер(ТабличныйДокумент, ВыделенныеОбласти); - Элементы.ВычислитьСумму.Доступность = Ложь; - КонецЕсли; + СтандартныеПодсистемыКлиент.ПоказатьРасчетЯчеек(ЭтотОбъект, ТекущаяПечатнаяФорма); КонецПроцедуры #КонецОбласти @@ -396,7 +389,7 @@ Иначе ИменаМакетов = Параметры.ИменаМакетов; Если ТипЗнч(ИменаМакетов) = Тип("Массив") Тогда - ИменаМакетов = СтроковыеФункцииКлиентСервер.СтрокаИзМассиваПодстрок(ИменаМакетов); + ИменаМакетов = СтрСоединить(ИменаМакетов, ","); КонецЕсли; КлючНастроек = Параметры.ИмяМенеджераПечати + "-" + ИменаМакетов; @@ -469,7 +462,6 @@ НовыйЭлемент.Вывод = ВычислитьИспользованиеВывода(ОписаниеПечатнойФормы.ТабличныйДокумент); НовыйЭлемент.Редактирование = НовыйЭлемент.Вывод = ИспользованиеВывода.Разрешить И Не ОписаниеПечатнойФормы.ТабличныйДокумент.ТолькоПросмотр; НовыйЭлемент.Защита = ОписаниеПечатнойФормы.ТабличныйДокумент.Защита; - НовыйЭлемент.УстановитьДействие("ПриАктивизацииОбласти", "Подключаемый_ПолеТабличногоДокументаПриАктивизацииОбласти"); // Таблица настроек печатных форм (продолжение). НоваяНастройкаПечатнойФормы.ИмяСтраницы = ИмяСтраницы; @@ -521,7 +513,10 @@ Элементы.Копий.Видимость = ЕстьРазрешенныйВывод И ЕстьДанныеДляПечати; Элементы.КнопкаРедактирование.Видимость = ЕстьРазрешенныйВывод И ЕстьДанныеДляПечати И ЕстьРазрешенноеРедактирование; - Элементы.ГруппаСумма.Видимость = ЕстьДанныеДляПечати; + Если Не ЕстьДанныеДляПечати Тогда + Элементы.ВычислитьСумму.Видимость = Ложь; + Элементы.ТекущаяПечатнаяФорма.УстановитьДействие("ПриАктивизацииОбласти", ""); + КонецЕсли; Элементы.КнопкаПоказатьСкрытьНастройкуКомплекта.Видимость = ЭтоПечатьКомплекта(); Элементы.НастройкиПечатныхФорм.Видимость = ЭтоПечатьКомплекта(); @@ -546,9 +541,6 @@ ДоступноИзменениеМакетов = Пользователи.РолиДоступны("ИзменениеМакетовПечатныхФорм") И ЕстьРедактируемыеМакеты(); Элементы.КнопкаИзменитьМакет.Видимость = ДоступноИзменениеМакетов И ЕстьДанныеДляПечати; - // Отключение "технологической" страницы, которая нужна только в конфигураторе для дизайна формы. - Элементы.СтраницаПечатнаяФормаОбразец.Видимость = Ложь; - КонецПроцедуры &НаСервере @@ -624,18 +616,53 @@ ТекущаяСтраница = Элементы.СтраницаПечатнаяФормаНедоступна; ПечатнаяФормаДоступна = НастройкаПечатнойФормы <> Неопределено И ЭтотОбъект[НастройкаПечатнойФормы.ИмяРеквизита].ВысотаТаблицы > 0; Если ПечатнаяФормаДоступна Тогда - ТекущаяСтраница = Элементы[НастройкаПечатнойФормы.ИмяСтраницы]; + УстановитьТекущийТабличныйДокумент(НастройкаПечатнойФормы.ИмяРеквизита); + ЗаполнитьЗначенияСвойств(Элементы.ТекущаяПечатнаяФорма, Элементы[НастройкаПечатнойФормы.ИмяРеквизита], + "Вывод, Защита, Редактирование"); + + ТекущаяСтраница = Элементы.СтраницаТекущаяПечатнаяФорма; КонецЕсли; Элементы.Страницы.ТекущаяСтраница = ТекущаяСтраница; - Элементы.ГруппаСумма.Доступность = ПечатнаяФормаДоступна; - РассчитатьСуммуЯчеек(); + Элементы.ВычислитьСумму.Доступность = ПечатнаяФормаДоступна; ПереключитьПометкуКнопкиРедактирование(); УстановитьДоступностьИзмененияМакета(); КонецПроцедуры +&НаСервере +Процедура УстановитьТекущийТабличныйДокумент(ИмяРеквизита) + + Если ОбщегоНазначенияПовтИсп.РазделениеВключено() Тогда + ОбновитьДанныеТекущейПечатнойФормыСервер(); + ТекущаяПечатнаяФорма = Новый ТабличныйДокумент; + ТекущаяПечатнаяФорма.Вывести(ЭтотОбъект[ИмяРеквизита]); + ЗаполнитьЗначенияСвойств(ТекущаяПечатнаяФорма, ЭтотОбъект[ИмяРеквизита], "АвтоМасштаб,Вывод,ВысотаСтраницы,ДвусторонняяПечать,Защита,ИмяПринтера,КодЯзыкаМакета,КоличествоЭкземпляров,МасштабПечати,ОриентацияСтраницы,ПолеСверху,ПолеСлева,ПолеСнизу,ПолеСправа,РазборПоКопиям,РазмерКолонтитулаСверху,РазмерКолонтитулаСнизу,РазмерСтраницы,ТочностьПечати,ЧерноБелаяПечать,ШиринаСтраницы,ЭкземпляровНаСтранице"); + ТекущийРеквизитСПечатнойФормой = ИмяРеквизита; + Иначе + ТекущаяПечатнаяФорма = ЭтотОбъект[ИмяРеквизита]; + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура ОбновитьДанныеТекущейПечатнойФормыКлиент() + Если РазделениеВключено Тогда + ОбновитьДанныеТекущейПечатнойФормыСервер(); + КонецЕсли; +КонецПроцедуры + +&НаСервере +Процедура ОбновитьДанныеТекущейПечатнойФормыСервер() + Если Не ПустаяСтрока(ТекущийРеквизитСПечатнойФормой) Тогда + ЭтотОбъект[ТекущийРеквизитСПечатнойФормой] = Новый ТабличныйДокумент; + ЭтотОбъект[ТекущийРеквизитСПечатнойФормой].Вывести(ТекущаяПечатнаяФорма); + ЗаполнитьЗначенияСвойств(ЭтотОбъект[ТекущийРеквизитСПечатнойФормой], ТекущаяПечатнаяФорма, "АвтоМасштаб,Вывод,ВысотаСтраницы,ДвусторонняяПечать,Защита,ИмяПринтера,КодЯзыкаМакета,КоличествоЭкземпляров,МасштабПечати,ОриентацияСтраницы,ПолеСверху,ПолеСлева,ПолеСнизу,ПолеСправа,РазборПоКопиям,РазмерКолонтитулаСверху,РазмерКолонтитулаСнизу,РазмерСтраницы,ТочностьПечати,ЧерноБелаяПечать,ШиринаСтраницы,ЭкземпляровНаСтранице"); + КонецЕсли; +КонецПроцедуры + + &НаКлиенте Процедура УстановитьСнятьФлажки(Пометка) Для Каждого НастройкаПечатнойФормы Из НастройкиПечатныхФорм Цикл @@ -1077,6 +1104,7 @@ Если НастройкаПечатнойФормы <> Неопределено Тогда ПолеТабличногоДокумента = Элементы[НастройкаПечатнойФормы.ИмяРеквизита]; ПолеТабличногоДокумента.Редактирование = Не ПолеТабличногоДокумента.Редактирование; + Элементы.ТекущаяПечатнаяФорма.Редактирование = ПолеТабличногоДокумента.Редактирование; ПереключитьПометкуКнопкиРедактирование(); КонецЕсли; КонецПроцедуры @@ -1159,17 +1187,15 @@ Возврат; КонецЕсли; - Для Каждого НастройкаПечатнойФормы Из НастройкиПечатныхФорм Цикл - ПолеТабличногоДокумента = Элементы[НастройкаПечатнойФормы.ИмяРеквизита]; - ТабличныйДокумент = ЭтотОбъект[НастройкаПечатнойФормы.ИмяРеквизита]; - ОбластьВыбранногоДокумента = ТабличныйДокумент.Области.Найти(ВыбранныйЭлемент.Значение); - - ПолеТабличногоДокумента.ТекущаяОбласть = ТабличныйДокумент.Область("R1C1"); // переход к началу - - Если ОбластьВыбранногоДокумента <> Неопределено Тогда - ПолеТабличногоДокумента.ТекущаяОбласть = ТабличныйДокумент.Область(ОбластьВыбранногоДокумента.Верх,,ОбластьВыбранногоДокумента.Низ,); - КонецЕсли; - КонецЦикла; + ПолеТабличногоДокумента = Элементы.ТекущаяПечатнаяФорма; + ТабличныйДокумент = ТекущаяПечатнаяФорма; + ОбластьВыбранногоДокумента = ТабличныйДокумент.Области.Найти(ВыбранныйЭлемент.Значение); + + ПолеТабличногоДокумента.ТекущаяОбласть = ТабличныйДокумент.Область("R1C1"); // переход к началу + + Если ОбластьВыбранногоДокумента <> Неопределено Тогда + ПолеТабличногоДокумента.ТекущаяОбласть = ТабличныйДокумент.Область(ОбластьВыбранногоДокумента.Верх,,ОбластьВыбранногоДокумента.Низ,); + КонецЕсли; КонецПроцедуры @@ -1217,11 +1243,7 @@ // Если имя уже было ранее использовано, прибавляем счетчик в конце имени. Если НомерИспользования > 1 Тогда ИмяВременногоФайла = ОбщегоНазначенияКлиентСервер.ЗаменитьНедопустимыеСимволыВИмениФайла( - СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - ШаблонИмениФайла, - ИмяМакета, - " (" + НомерИспользования + ")", - Расширение)); + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонИмениФайла, ИмяМакета, " (" + НомерИспользования + ")", Расширение)); КонецЕсли; Возврат ИмяВременногоФайла; @@ -1246,35 +1268,4 @@ Возврат ТабличныеДокументы; КонецФункции -#Область Автосумма - -&НаКлиенте -Процедура РассчитатьСуммуЯчеек() - ИнтервалОжидания = ?(ПолучитьСкоростьКлиентскогоСоединения() = СкоростьКлиентскогоСоединения.Низкая, 1, 0.2); - ПодключитьОбработчикОжидания("Подключаемый_РассчитатьСуммуЯчеек", ИнтервалОжидания, Истина); -КонецПроцедуры - -&НаКлиенте -Процедура Подключаемый_РассчитатьСуммуЯчеек() - НастройкаПечатнойФормы = ТекущаяНастройкаПечатнойФормы(); - Если НастройкаПечатнойФормы = Неопределено Тогда - Возврат; - КонецЕсли; - - ТабличныйДокумент = ЭтотОбъект[НастройкаПечатнойФормы.ИмяРеквизита]; - СуммаВыделенныхЯчеек = СтандартныеПодсистемыКлиентСервер.СуммаЯчеек(ТабличныйДокумент, Неопределено); - Элементы.ВычислитьСумму.Доступность = (СуммаВыделенныхЯчеек = "<"); -КонецПроцедуры - -&НаСервереБезКонтекста -Функция ВычислитьСуммуСервер(Знач ТабличныйДокумент, Знач ВыделенныеОбласти) - Возврат СтандартныеПодсистемыКлиентСервер.СуммаЯчеек(ТабличныйДокумент, ВыделенныеОбласти); -КонецФункции - #КонецОбласти - -#КонецОбласти - - - - diff --git a/SSL/src/CommonForms/ПодготовкаНовогоПисьма/Form.form b/SSL/src/CommonForms/ПодготовкаНовогоПисьма/Form.form index 11398db72..992198833 100644 --- a/SSL/src/CommonForms/ПодготовкаНовогоПисьма/Form.form +++ b/SSL/src/CommonForms/ПодготовкаНовогоПисьма/Form.form @@ -980,7 +980,6 @@ <autoFillCheck>true</autoFillCheck> <allowFormCustomize>true</allowFormCustomize> <enabled>true</enabled> - <verticalScroll>UseIfNecessary</verticalScroll> <showTitle>auto</showTitle> <showCloseButton>true</showCloseButton> <attributes> @@ -1204,7 +1203,7 @@ <name>Выбрать</name> </handler> </action> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <formCommands> @@ -1229,7 +1228,7 @@ <name>ВыбратьВсехПолучателей</name> </handler> </action> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <formCommands> @@ -1254,7 +1253,7 @@ <name>ОтменитьВыборДляВсех</name> </handler> </action> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <parameters> diff --git a/SSL/src/CommonForms/ПодключениеКонечнойТочки/Form.form b/SSL/src/CommonForms/ПодключениеКонечнойТочки/Form.form index 01570a936..4398fcf0a 100644 --- a/SSL/src/CommonForms/ПодключениеКонечнойТочки/Form.form +++ b/SSL/src/CommonForms/ПодключениеКонечнойТочки/Form.form @@ -564,7 +564,6 @@ <autoFillCheck>true</autoFillCheck> <allowFormCustomize>true</allowFormCustomize> <enabled>true</enabled> - <verticalScroll>UseIfNecessary</verticalScroll> <showTitle>auto</showTitle> <showCloseButton>true</showCloseButton> <attributes> @@ -722,7 +721,7 @@ <name>ПодключитьКонечнуюТочку</name> </handler> </action> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <commandInterface> diff --git a/SSL/src/CommonForms/ПодключениеКонечнойТочки/Module.bsl b/SSL/src/CommonForms/ПодключениеКонечнойТочки/Module.bsl index 413849732..5d246fe0c 100644 --- a/SSL/src/CommonForms/ПодключениеКонечнойТочки/Module.bsl +++ b/SSL/src/CommonForms/ПодключениеКонечнойТочки/Module.bsl @@ -92,14 +92,20 @@ Возврат; КонецЕсли; + НастройкиПодключенияОтправителя = ОбменДаннымиСервер.СтруктураПараметровWS(); + НастройкиПодключенияОтправителя.WSURLВебСервиса = НастройкиОтправителяWSURLВебСервиса; + НастройкиПодключенияОтправителя.WSИмяПользователя = НастройкиОтправителяWSИмяПользователя; + НастройкиПодключенияОтправителя.WSПароль = НастройкиОтправителяWSПароль; + + НастройкиПодключенияПолучателя = ОбменДаннымиСервер.СтруктураПараметровWS(); + НастройкиПодключенияПолучателя.WSURLВебСервиса = НастройкиПолучателяWSURLВебСервиса; + НастройкиПодключенияПолучателя.WSИмяПользователя = НастройкиПолучателяWSИмяПользователя; + НастройкиПодключенияПолучателя.WSПароль = НастройкиПолучателяWSПароль; + ОбменСообщениями.ПодключитьКонечнуюТочку( Отказ, - НастройкиОтправителяWSURLВебСервиса, - НастройкиОтправителяWSИмяПользователя, - НастройкиОтправителяWSПароль, - НастройкиПолучателяWSURLВебСервиса, - НастройкиПолучателяWSИмяПользователя, - НастройкиПолучателяWSПароль); + НастройкиПодключенияОтправителя, + НастройкиПодключенияПолучателя); КонецПроцедуры diff --git a/SSL/src/CommonForms/ПодтверждениеПароляУчетнойЗаписи/Form.form b/SSL/src/CommonForms/ПодтверждениеПароляУчетнойЗаписи/Form.form deleted file mode 100644 index 11fe3813e..000000000 --- a/SSL/src/CommonForms/ПодтверждениеПароляУчетнойЗаписи/Form.form +++ /dev/null @@ -1,357 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<form:Form xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:form="http://g5.1c.ru/v8/dt/form"> - <items xsi:type="form:FormField"> - <name>Пароль</name> - <id>6</id> - <visible>true</visible> - <enabled>true</enabled> - <userVisible> - <common>true</common> - </userVisible> - <dataPath xsi:type="form:DataPath"> - <segments>Пароль</segments> - </dataPath> - <toolTip> - <key>ru</key> - <value>Введите пароль учетной записи</value> - </toolTip> - <extendedTooltip> - <name>ПарольExtendedTooltip</name> - <id>13</id> - <type>Label</type> - <autoMaxWidth>true</autoMaxWidth> - <autoMaxHeight>true</autoMaxHeight> - <extInfo xsi:type="form:LabelDecorationExtInfo"> - <horizontalAlign>Left</horizontalAlign> - </extInfo> - </extendedTooltip> - <contextMenu> - <name>ПарольКонтекстноеМеню</name> - <id>7</id> - <autoFill>true</autoFill> - </contextMenu> - <type>InputField</type> - <editMode>Enter</editMode> - <showInHeader>true</showInHeader> - <headerHorizontalAlign>Left</headerHorizontalAlign> - <showInFooter>true</showInFooter> - <extInfo xsi:type="form:InputFieldExtInfo"> - <autoMaxWidth>true</autoMaxWidth> - <autoMaxHeight>true</autoMaxHeight> - <passwordMode>true</passwordMode> - <chooseType>true</chooseType> - <typeDomainEnabled>true</typeDomainEnabled> - <textEdit>true</textEdit> - <textSize>Normal</textSize> - </extInfo> - </items> - <items xsi:type="form:FormField"> - <name>ПодтверждениеПароля</name> - <id>4</id> - <title> - <key>ru</key> - <value>Подтверждение</value> - - true - true - - true - - - ПодтверждениеПароля - - - ru - Введите пароль учетной записи ещё раз - - - ПодтверждениеПароляExtendedTooltip - 14 - Label - true - true - - Left - - - - ПодтверждениеПароляКонтекстноеМеню - 5 - true - - InputField - Enter - true - Left - true - - true - true - true - true - true - true - Normal - - - - СохранятьПароль - 8 - true - true - - true - - - СохранятьПароль - - Right - - ru - Сохранять пароль в информационной базе - - - СохранятьПарольExtendedTooltip - 15 - Label - true - true - - Left - - - - СохранятьПарольКонтекстноеМеню - 9 - true - - CheckBoxField - Enter - true - Left - true - - - Bottom - true - - ФормаКоманднаяПанель - -1 - - СохранитьПарольИПродолжить - 3 - true - true - - true - - false - - СохранитьПарольИПродолжитьExtendedTooltip - 10 - Label - true - true - - Left - - - Form.Command.СохранитьПарольИПродолжить - Auto - true - true - true - UserCmds - Auto - - - Отмена - 2 - true - true - - true - - false - - ОтменаExtendedTooltip - 11 - Label - true - true - - Left - - - Form.StandardCommand.Cancel - Normal - Auto - true - true - UserCmds - Auto - - - Справка - 1 - true - true - - true - - false - - СправкаExtendedTooltip - 12 - Label - true - true - - Left - - - Form.StandardCommand.Help - Normal - Auto - true - true - UserCmds - Auto - - Right - - - OnCreateAtServer - ПриСозданииНаСервере - - LockOwner - true - true - true - Vertical - true - true - true - UseIfNecessary - auto - true - - Пароль - - <key>ru</key> - <value>Пароль</value> - - 1 - - String - - - - true - - - true - - - - ПодтверждениеПароля - - <key>ru</key> - <value>Подтверждение пароля</value> - - 2 - - String - - - - true - - - true - - - - СохранятьПароль - - <key>ru</key> - <value>Сохранять пароль</value> - - 3 - - Boolean - - - true - - - true - - - - УчетнаяЗапись - - <key>ru</key> - <value>Учетная запись</value> - - 4 - - CatalogRef.УчетныеЗаписиЭлектроннойПочты - - - true - - - true - - - - ПроверитьВозможностьОтправкиИПолучения - - <key>ru</key> - <value>Проверить возможность отправки и получения</value> - - 5 - - Boolean - - - true - - - true - - - - СохранитьПарольИПродолжить - - <key>ru</key> - <value>Продолжить</value> - - 1 - - ru - Сохранить пароль в информационной базе и отправить сообщение - - - true - - - - СохранитьПарольИПродолжитьВыполнить - - - Auto - Auto - - - УчетнаяЗапись - - CatalogRef.УчетныеЗаписиЭлектроннойПочты - - - - - - - diff --git a/SSL/src/CommonForms/ПодтверждениеПароляУчетнойЗаписи/Help/ru.html b/SSL/src/CommonForms/ПодтверждениеПароляУчетнойЗаписи/Help/ru.html deleted file mode 100644 index 4763f7d58..000000000 --- a/SSL/src/CommonForms/ПодтверждениеПароляУчетнойЗаписи/Help/ru.html +++ /dev/null @@ -1,8 +0,0 @@ - -

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

          -

          Ввод пароля и отправка письма

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

          Сохранение пароля

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

          См. также:

          - \ No newline at end of file diff --git a/SSL/src/CommonForms/ПодтверждениеПароляУчетнойЗаписи/Module.bsl b/SSL/src/CommonForms/ПодтверждениеПароляУчетнойЗаписи/Module.bsl deleted file mode 100644 index 0fda8af0a..000000000 --- a/SSL/src/CommonForms/ПодтверждениеПароляУчетнойЗаписи/Module.bsl +++ /dev/null @@ -1,114 +0,0 @@ -// ------------------------------------------------------------------------------ -// СПЕЦИФИКАЦИЯ ПАРАМЕТРОВ ПЕРЕДАВАЕМЫХ В ФОРМУ -// -// УчетнаяЗапись* - СправочникСсылка.УчетныеЗаписиЭлектроннойПочты -// -// ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ -// -// Неопределено - пользователь отказался от ввода пароля. -// Структура - -// ключ "Статус", булево - истина или ложь в зависимости от успеха вызова -// ключ "Пароль", строка - в случае если статус Истина содержит пароль -// ключ "СообщениеОбОшибке" - в случае если статус Истина содержит текст -// сообщения об ошибке. -// -// ------------------------------------------------------------------------------ -// СПЕЦИФИКАЦИЯ ФУНКЦИОНИРОВАНИЯ ФОРМЫ -// -// Если в списке переданных учетных записей более одной записи, то на форме -// появится возможность выбора учетной записи, с которой будет отправлено -// электронное сообщение. -// -// ------------------------------------------------------------------------------ - -#Область ОбработчикиСобытийФормы - -&НаСервере -Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) - Если Параметры.Свойство("АвтоТест") Тогда - Возврат; - КонецЕсли; - - Параметры.Свойство("ПроверитьВозможностьОтправкиИПолучения", ПроверитьВозможностьОтправкиИПолучения); - - Если Параметры.УчетнаяЗапись.Пустая() Тогда - Отказ = Истина; - Возврат; - КонецЕсли; - - УчетнаяЗапись = Параметры.УчетнаяЗапись; - Результат = ЗагрузитьПароль(); - - Если ЗначениеЗаполнено(Результат) Тогда - Пароль = Результат; - ПодтверждениеПароля = Результат; - СохранятьПароль = Истина; - Иначе - Пароль = ""; - ПодтверждениеПароля = ""; - СохранятьПароль = Ложь; - КонецЕсли; - - Если Не ПравоДоступа("СохранениеДанныхПользователя", Метаданные) Тогда - Элементы.СохранятьПароль.Видимость = Ложь; - КонецЕсли; - -КонецПроцедуры - -#КонецОбласти - -#Область ОбработчикиКомандФормы - -&НаКлиенте -Процедура СохранитьПарольИПродолжитьВыполнить() - - Если Пароль <> ПодтверждениеПароля Тогда - ОбщегоНазначенияКлиентСервер.СообщитьПользователю( - НСтр("ru = 'Пароль и подтверждение пароля не совпадают'"), , "Пароль"); - Возврат; - КонецЕсли; - - Если СохранятьПароль Тогда - СохранитьПароль(Пароль); - Иначе - СохранитьПароль(Неопределено); - КонецЕсли; - - Если ПроверитьВозможностьОтправкиИПолучения Тогда - ОписаниеОповещения = Новый ОписаниеОповещения("СохранитьПарольИПродолжитьВыполнитьЗавершение", ЭтотОбъект, Пароль); - РаботаСПочтовымиСообщениямиКлиент.ПроверитьВозможностьОтправкиИПолученияЭлектроннойПочты(ОписаниеОповещения, УчетнаяЗапись, Пароль); - Возврат; - КонецЕсли; - - СохранитьПарольИПродолжитьВыполнитьЗавершение(Пароль); -КонецПроцедуры - -#КонецОбласти - -#Область СлужебныеПроцедурыИФункции - -&НаСервере -Процедура СохранитьПароль(Значение) - - ОбщегоНазначения.ХранилищеОбщихНастроекСохранить( - "ФормаПодтвержденияПароляУчетнойЗаписи", - УчетнаяЗапись, - Значение); - -КонецПроцедуры - -&НаСервере -Функция ЗагрузитьПароль() - - Возврат ОбщегоНазначения.ХранилищеОбщихНастроекЗагрузить("ФормаПодтвержденияПароляУчетнойЗаписи", УчетнаяЗапись); - -КонецФункции - -&НаКлиенте -Процедура СохранитьПарольИПродолжитьВыполнитьЗавершение(Пароль) Экспорт - - ОповеститьОВыборе(Пароль); - -КонецПроцедуры - -#КонецОбласти diff --git a/SSL/src/CommonForms/ПоискИсполняемогоФайла1СБухфон/Form.form b/SSL/src/CommonForms/ПоискИсполняемогоФайла1СБухфон/Form.form index f06bbc68b..56bf83cc6 100644 --- a/SSL/src/CommonForms/ПоискИсполняемогоФайла1СБухфон/Form.form +++ b/SSL/src/CommonForms/ПоискИсполняемогоФайла1СБухфон/Form.form @@ -365,7 +365,6 @@ true true true - UseIfNecessary auto true @@ -463,7 +462,7 @@ Сохранить - Auto + DontUse Auto
          diff --git a/SSL/src/CommonForms/ПоказателиВыделенныхЯчеек/Form.form b/SSL/src/CommonForms/ПоказателиВыделенныхЯчеек/Form.form new file mode 100644 index 000000000..243e5ad13 --- /dev/null +++ b/SSL/src/CommonForms/ПоказателиВыделенныхЯчеек/Form.form @@ -0,0 +1,554 @@ + + + + <key>ru</key> + <value>Показатели выделенных ячеек</value> + + + Группа1 + 7 + + Сумма + 1 + true + true + + true + + + Сумма + + + ru + Сумма числовых ячеек. + + + СуммаРасширеннаяПодсказка + 3 + Label + true + true + + Left + + + + СуммаКонтекстноеМеню + 2 + true + + InputField + Enter + true + Left + true + + 17 + true + true + true + + ru + ЧЦ=15; ЧДЦ=2; ЧН=0 + + true + true + true + Normal + + + + КоличествоЧисловых + 15 + true + true + + true + + + КоличествоЧисловых + + + ru + Количество числовых ячеек (без учета пустых ячеек). + + + КоличествоЧисловыхРасширеннаяПодсказка + 17 + Label + true + true + + Left + + + + КоличествоЧисловыхКонтекстноеМеню + 16 + true + + InputField + Enter + true + Left + true + + 17 + true + true + true + true + true + true + Normal + + + + Среднее + 4 + true + true + + true + + + Среднее + + + ru + Среднее арифметическое числовых ячеек (без учета пустых ячеек). + + + СреднееРасширеннаяПодсказка + 6 + Label + true + true + + Left + + + + СреднееКонтекстноеМеню + 5 + true + + InputField + Enter + true + Left + true + + 17 + true + true + true + + ru + ЧЦ=15; ЧДЦ=4; ЧН=0 + + true + true + true + Normal + + + + Минимум + 9 + true + true + + true + + + Минимум + + + ru + Наименьшее число из выделенных ячеек (без учета пустых ячеек). + + + МинимумРасширеннаяПодсказка + 11 + Label + true + true + + Left + + + + МинимумКонтекстноеМеню + 10 + true + + InputField + Enter + true + Left + true + + 17 + true + true + true + + ru + ЧЦ=15; ЧДЦ=2; ЧН=0 + + true + true + true + Normal + + + + Максимум + 12 + true + true + + true + + + Максимум + + + ru + Наибольшее число из выделенных ячеек. + + + МаксимумРасширеннаяПодсказка + 14 + Label + true + true + + Left + + + + МаксимумКонтекстноеМеню + 13 + true + + InputField + Enter + true + Left + true + + 17 + true + true + true + + ru + ЧЦ=15; ЧДЦ=2; ЧН=0 + + true + true + true + Normal + + + true + true + + true + + true + + Группа1РасширеннаяПодсказка + 8 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + true + true + Auto + Auto + + + + Группа2 + 24 + + КоличествоНеПустых + 26 + true + true + + true + + + КоличествоНеПустых + + + ru + Количество не пустых ячеек (включая ячейки с числами и текстом). + + + КоличествоНеПустыхРасширеннаяПодсказка + 28 + Label + true + true + + Left + + + + КоличествоНеПустыхКонтекстноеМеню + 27 + true + + InputField + Enter + true + Left + true + + 17 + true + true + true + true + true + true + Normal + + + true + true + + true + + true + + Группа2РасширеннаяПодсказка + 25 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + NormalSeparation + true + true + Auto + Auto + + + Bottom + true + + ФормаКоманднаяПанель + -1 + + Закрыть + 22 + true + true + + true + + + ЗакрытьРасширеннаяПодсказка + 23 + Label + true + true + + Left + + + Form.StandardCommand.Close + true + true + true + UserCmds + Auto + + + Справка + 29 + true + true + + true + + + СправкаРасширеннаяПодсказка + 30 + Label + true + true + + Left + + + Form.StandardCommand.Help + Normal + Auto + true + true + UserCmds + Auto + + Right + + + OnCreateAtServer + ПриСозданииНаСервере + + LockOwner + true + Vertical + true + auto + true + + Сумма + + <key>ru</key> + <value>Сумма</value> + + 1 + + Number + + 25 + 5 + + + + true + + + true + + + + Среднее + + <key>ru</key> + <value>Среднее</value> + + 2 + + Number + + 25 + 5 + + + + true + + + true + + + + Минимум + + <key>ru</key> + <value>Минимум</value> + + 3 + + Number + + 25 + 5 + + + + true + + + true + + + + Максимум + + <key>ru</key> + <value>Максимум</value> + + 4 + + Number + + 25 + 5 + + + + true + + + true + + + + КоличествоЧисловых + + <key>ru</key> + <value>Количество</value> + + 5 + + Number + + 10 + + + + true + + + true + + + + КоличествоНеПустых + + <key>ru</key> + <value>Всего ячеек</value> + + 6 + + Number + + 10 + + + + true + + + true + + + + + + + diff --git a/SSL/src/CommonForms/ПоказателиВыделенныхЯчеек/Help/ru.html b/SSL/src/CommonForms/ПоказателиВыделенныхЯчеек/Help/ru.html new file mode 100644 index 000000000..d858de4dd --- /dev/null +++ b/SSL/src/CommonForms/ПоказателиВыделенныхЯчеек/Help/ru.html @@ -0,0 +1,11 @@ + +

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

          +

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

          +

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

          +

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

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

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

          +
          • Всего ячеек - количество всех выделенных ячеек, независимо от содержащейся в них информации.
          \ 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..cd12c3223 --- /dev/null +++ b/SSL/src/CommonForms/ПоказателиВыделенныхЯчеек/Module.bsl @@ -0,0 +1,29 @@ +#Область ОбработчикиСобытийФормы + +&НаСервере +Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) + Если Параметры.Свойство("АвтоТест") Тогда + Возврат; + КонецЕсли; + + // Параметры: + // ТабличныйДокумент - ТабличныйДокумент - Таблица, для которой выполняются расчеты. + // ВыделенныеОбласти - Массив - Области документа, которые требуется рассчитать. + // См. возвращаемое значение функции СтандартныеПодсистемыКлиент.ВыделенныеОбласти(). + + Расчет = ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(Параметры, "Расчет"); + Если ТипЗнч(Расчет) = Тип("Структура") Тогда + ЗаполнитьЗначенияСвойств(ЭтотОбъект, Расчет); + Элементы.Переместить(Элементы.Закрыть, КоманднаяПанель); + Иначе + Расчет = СтандартныеПодсистемыКлиентСервер.РасчетЯчеек(Параметры.ТабличныйДокумент, Параметры.ВыделенныеОбласти); + ЗаполнитьЗначенияСвойств(ЭтотОбъект, Расчет); + Если Расчет.КоличествоЧисловых > 0 Тогда + Среднее = Расчет.Сумма / Расчет.КоличествоЧисловых; + КонецЕсли; + КонецЕсли; + +КонецПроцедуры + +#КонецОбласти + diff --git a/SSL/src/CommonForms/ПоказателиВыделенныхЯчеек/ПоказателиВыделенныхЯчеек.mdo b/SSL/src/CommonForms/ПоказателиВыделенныхЯчеек/ПоказателиВыделенныхЯчеек.mdo new file mode 100644 index 000000000..81de8aeea --- /dev/null +++ b/SSL/src/CommonForms/ПоказателиВыделенныхЯчеек/ПоказателиВыделенныхЯчеек.mdo @@ -0,0 +1,16 @@ + + + ПоказателиВыделенныхЯчеек + + ru + Показатели выделенных ячеек + + + + ru + + + PersonalComputer + MobileDevice + true + diff --git a/SSL/src/CommonForms/ПользователиСервиса/Form.form b/SSL/src/CommonForms/ПользователиСервиса/Form.form index 5a6310495..a22bd9625 100644 --- a/SSL/src/CommonForms/ПользователиСервиса/Form.form +++ b/SSL/src/CommonForms/ПользователиСервиса/Form.form @@ -473,7 +473,6 @@ true true true - UseIfNecessary auto true @@ -621,7 +620,7 @@ УстановитьВсе - Auto + DontUse Auto @@ -646,7 +645,7 @@ СнятьВсе - Auto + DontUse Auto @@ -668,7 +667,7 @@ ДобавитьВыбранныхПользователей - Auto + DontUse Auto diff --git a/SSL/src/CommonForms/ПользователиСервиса/Module.bsl b/SSL/src/CommonForms/ПользователиСервиса/Module.bsl index 23723f7cf..d818a8ab0 100644 --- a/SSL/src/CommonForms/ПользователиСервиса/Module.bsl +++ b/SSL/src/CommonForms/ПользователиСервиса/Module.bsl @@ -108,7 +108,7 @@ ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно; ОтборЭлемента.ПравоеЗначение = Истина; - Элемент.Оформление.УстановитьЗначениеПараметра("ЦветФона", ЦветаСтиля.НедоступныеДанныеЦвет); + Элемент.Оформление.УстановитьЗначениеПараметра("ЦветФона", ЦветаСтиля.ТекстЗапрещеннойЯчейкиЦвет); КонецПроцедуры diff --git a/SSL/src/CommonForms/ПраваДоступа/Form.form b/SSL/src/CommonForms/ПраваДоступа/Form.form index 41edcffb1..8e72e00cd 100644 --- a/SSL/src/CommonForms/ПраваДоступа/Form.form +++ b/SSL/src/CommonForms/ПраваДоступа/Form.form @@ -439,12 +439,6 @@ true true true - - ГруппыДоступа.Описание - - - CommonPicture.СостоянияПользователей - None None None @@ -1175,7 +1169,6 @@ true true true - UseIfNecessary auto true @@ -1550,7 +1543,7 @@ ВключитьВГруппу - Auto + DontUse Auto @@ -1572,7 +1565,7 @@ ИсключитьИзГруппы - Auto + DontUse Auto @@ -1599,7 +1592,7 @@ TextPicture - Auto + DontUse Auto @@ -1621,7 +1614,7 @@ Обновить - Auto + DontUse Auto @@ -1643,7 +1636,7 @@ TextPicture - Auto + DontUse Auto @@ -1669,7 +1662,7 @@ TextPicture - Auto + DontUse Auto diff --git a/SSL/src/CommonForms/ПраваДоступа/Module.bsl b/SSL/src/CommonForms/ПраваДоступа/Module.bsl index 5078846f1..ea7af7a5b 100644 --- a/SSL/src/CommonForms/ПраваДоступа/Module.bsl +++ b/SSL/src/CommonForms/ПраваДоступа/Module.bsl @@ -65,6 +65,13 @@ ОбработатьИнтерфейсРолей("НастроитьИнтерфейсРолейПриСозданииФормы"); ОбработатьИнтерфейсРолей("УстановитьТолькоПросмотрРолей", Истина); + Если ОбщегоНазначенияПовтИсп.ЭтоАвтономноеРабочееМесто() Тогда + Элементы.ФормаВключитьВГруппу.Доступность = Ложь; + Элементы.ФормаИсключитьИзГруппы.Доступность = Ложь; + Элементы.ГруппыДоступаВключитьВГруппу.Доступность = Ложь; + Элементы.ГруппыДоступаИсключитьИзГруппы.Доступность = Ложь; + КонецЕсли; + КонецПроцедуры &НаКлиенте @@ -381,30 +388,34 @@ Если НЕ РазрешеноИзменениеСоставаПользователейГруппы(ГруппаДоступа) Тогда Если Добавить Тогда - ОписаниеОшибки = НСтр("ru = 'Невозможно включить пользователя в группу доступа, - |так как текущий пользователь - |не ответственный за участников группы доступа и - |не полноправный администратор.'"); + ОписаниеОшибки = + НСтр("ru = 'Невозможно включить пользователя в группу доступа, + |так как текущий пользователь + |не ответственный за участников группы доступа и + |не полноправный администратор.'"); Иначе - ОписаниеОшибки = НСтр("ru = 'Невозможно исключить пользователя из группы доступа, - |так как текущий пользователь - |не ответственный за участников группы доступа и - |не полноправный администратор.'"); + ОписаниеОшибки = + НСтр("ru = 'Невозможно исключить пользователя из группы доступа, + |так как текущий пользователь + |не ответственный за участников группы доступа и + |не полноправный администратор.'"); КонецЕсли; Возврат; КонецЕсли; Если НЕ Добавить И НЕ ПользовательВключенВГруппуДоступа(ТекущаяГруппаДоступа) Тогда - ОписаниеОшибки = НСтр("ru = 'Невозможно исключить пользователя из группы доступа, - |так как он включен в нее косвенно.'"); + ОписаниеОшибки = + НСтр("ru = 'Невозможно исключить пользователя из группы доступа, + |так как он включен в нее косвенно.'"); Возврат; КонецЕсли; Если ОбщегоНазначенияПовтИсп.РазделениеВключено() - И ГруппаДоступа = Справочники.ГруппыДоступа.Администраторы Тогда + И ГруппаДоступа = Справочники.ГруппыДоступа.Администраторы + И ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаВМоделиСервиса.ПользователиВМоделиСервиса") Тогда - ДействияСПользователемСервиса = Неопределено; - УправлениеДоступомСлужебный.ПриПолученииДействийСПользователемСервиса(ДействияСПользователемСервиса); + МодульПользователиСлужебныйВМоделиСервиса = ОбщегоНазначения.ОбщийМодуль("ПользователиСлужебныйВМоделиСервиса"); + ДействияСПользователемСервиса = МодульПользователиСлужебныйВМоделиСервиса.ПолучитьДействияСПользователемСервиса(); Если НЕ ДействияСПользователемСервиса.ИзменениеАдминистративногоДоступа Тогда ВызватьИсключение diff --git a/SSL/src/CommonForms/ПраваДоступаУпрощенно/Form.form b/SSL/src/CommonForms/ПраваДоступаУпрощенно/Form.form index f56f5e582..5084032a1 100644 --- a/SSL/src/CommonForms/ПраваДоступаУпрощенно/Form.form +++ b/SSL/src/CommonForms/ПраваДоступаУпрощенно/Form.form @@ -1082,6 +1082,10 @@ Left true + + OnOpen + ПриОткрытии + BeforeClose ПередЗакрытием @@ -1103,7 +1107,6 @@ true true true - UseIfNecessary auto true @@ -1561,7 +1564,7 @@ TextPicture - Auto + DontUse Auto @@ -1583,7 +1586,7 @@ TextPicture - Auto + DontUse Auto @@ -1605,7 +1608,7 @@ ПоказыватьНеиспользуемыеВидыДоступа - Auto + DontUse Auto diff --git a/SSL/src/CommonForms/ПраваДоступаУпрощенно/Help/ru.html b/SSL/src/CommonForms/ПраваДоступаУпрощенно/Help/ru.html index 202a9321a..8060f6ffa 100644 --- a/SSL/src/CommonForms/ПраваДоступаУпрощенно/Help/ru.html +++ b/SSL/src/CommonForms/ПраваДоступаУпрощенно/Help/ru.html @@ -8,9 +8,9 @@
        • Различают основные и дополнительные профили:
          • Основной профиль описывает некоторую совокупность прав доступа, достаточную для выполнения в программе определенного участка работ. Например, если сотрудник выполняет в программе только функции бухгалтера, то ему должны быть назначены профиль Бухгалтер, а также служебный профиль Пользователь (который разрешает выполнять вход в программу).
          • С помощью дополнительных профилей пользователя могут быть выданы вспомогательные права, дополнительно к основным. Например, дополнительно к основным профилям Бухгалтер и Кладовщик предусмотрены профили Ведение переписки с контрагентами и Печать непроведенных документов.

        Виды доступа

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

            Вид доступа "Пользователи"

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

            Отчет по правам доступа

            diff --git a/SSL/src/CommonForms/ПраваДоступаУпрощенно/Module.bsl b/SSL/src/CommonForms/ПраваДоступаУпрощенно/Module.bsl index a9dc85bea..1e4320539 100644 --- a/SSL/src/CommonForms/ПраваДоступаУпрощенно/Module.bsl +++ b/SSL/src/CommonForms/ПраваДоступаУпрощенно/Module.bsl @@ -59,10 +59,12 @@ Элементы.Доступ.Видимость = Ложь; КонецЕсли; - Если ОбщегоНазначенияПовтИсп.РазделениеВключено() Тогда - ДействияСПользователемСервиса = Неопределено; - УправлениеДоступомСлужебный.ПриПолученииДействийСПользователемСервиса( - ДействияСПользователемСервиса, Параметры.Пользователь); + Если ОбщегоНазначенияПовтИсп.РазделениеВключено() + И ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаВМоделиСервиса.ПользователиВМоделиСервиса") Тогда + + МодульПользователиСлужебныйВМоделиСервиса = ОбщегоНазначения.ОбщийМодуль("ПользователиСлужебныйВМоделиСервиса"); + ДействияСПользователемСервиса = МодульПользователиСлужебныйВМоделиСервиса.ПолучитьДействияСПользователемСервиса(); + ЗапретИзмененияАдминистративногоДоступа = НЕ ДействияСПользователемСервиса.ИзменениеАдминистративногоДоступа; КонецЕсли; @@ -70,6 +72,18 @@ КонецПроцедуры +&НаКлиенте +Процедура ПриОткрытии(Отказ) + + Если ТипЗнч(ВладелецФормы) <> Тип("УправляемаяФорма") + Или ВладелецФормы.Окно <> Окно Тогда + + АвтоЗаголовок = Ложь; + Заголовок = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Права доступа (%1)'"), Строка(Параметры.Пользователь)); + КонецЕсли; + +КонецПроцедуры + &НаКлиенте Процедура ПередЗакрытием(Отказ, СтандартнаяОбработка) @@ -101,10 +115,10 @@ ТекущаяСтрокаЗначенияДоступаПриОшибке = Элементы.ЗначенияДоступа.ТекущаяСтрока; Элементы.Профили.ТекущаяСтрока = СвойстваПрофиля.ПолучитьИдентификатор(); - ПриИзмененииТекущегоПрофиля(ЭтотОбъект); + ПриИзмененииТекущегоПрофиля(ЭтотОбъект, Ложь); Элементы.ВидыДоступа.ТекущаяСтрока = ТекущаяСтрокаВидаДоступа; - УправлениеДоступомСлужебныйКлиентСервер.ПриИзмененииТекущегоВидаДоступа(ЭтотОбъект); + УправлениеДоступомСлужебныйКлиентСервер.ПриИзмененииТекущегоВидаДоступа(ЭтотОбъект, Ложь); ОбщегоНазначенияКлиентСервер.СообщитьОшибкиПользователю(Ошибки, Отказ); Иначе @@ -381,7 +395,7 @@ ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно; ОтборЭлемента.ПравоеЗначение = Справочники.ПрофилиГруппДоступа.Администратор; - Элемент.Оформление.УстановитьЗначениеПараметра("ЦветФона", ЦветаСтиля.НедоступныеДанныеЦвет); + Элемент.Оформление.УстановитьЗначениеПараметра("ЦветФона", ЦветаСтиля.ТекстЗапрещеннойЯчейкиЦвет); КонецПроцедуры @@ -475,8 +489,8 @@ | Справочник.ПрофилиГруппДоступа КАК Профили | ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ГруппыДоступа КАК ГруппыДоступа | ПО Профили.Ссылка = ГруппыДоступа.Профиль - | И (ГруппыДоступа.Пользователь = &Пользователь - | ИЛИ Профили.Ссылка В (ЗНАЧЕНИЕ(Справочник.ПрофилиГруппДоступа.Администратор))) + | И (НЕ(ГруппыДоступа.Пользователь <> &Пользователь + | И НЕ Профили.Ссылка В (ЗНАЧЕНИЕ(Справочник.ПрофилиГруппДоступа.Администратор)))) | ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ГруппыДоступа.Пользователи КАК ГруппыДоступаПользователи | ПО (ГруппыДоступа.Ссылка = ГруппыДоступаПользователи.Ссылка) | И (ГруппыДоступаПользователи.Пользователь = &Пользователь) @@ -515,6 +529,10 @@ | И (ПрофилиВидыДоступа.ВидДоступа = ГруппыДоступаВидыДоступа.ВидДоступа) |ГДЕ | НЕ ПрофилиВидыДоступа.Предустановленный + | + |УПОРЯДОЧИТЬ ПО + | Профили.Ссылка.Наименование, + | ПрофилиВидыДоступа.НомерСтроки |; | |//////////////////////////////////////////////////////////////////////////////// @@ -531,7 +549,12 @@ | ПО Профили.ПерсональнаяГруппаДоступа = ГруппыДоступаЗначенияДоступа.Ссылка | И (ПрофилиВидыДоступа.ВидДоступа = ГруппыДоступаЗначенияДоступа.ВидДоступа) |ГДЕ - | НЕ ПрофилиВидыДоступа.Предустановленный"; + | НЕ ПрофилиВидыДоступа.Предустановленный + | + |УПОРЯДОЧИТЬ ПО + | Профили.Ссылка.Наименование, + | ПрофилиВидыДоступа.НомерСтроки, + | ГруппыДоступаЗначенияДоступа.НомерСтроки"; УстановитьПривилегированныйРежим(Истина); РезультатыЗапроса = Запрос.ВыполнитьПакет(); @@ -551,7 +574,7 @@ Возврат; КонецЕсли; - Пользователи.НайтиНеоднозначныхПользователейИБ(,); + Пользователи.НайтиНеоднозначныхПользователейИБ(Неопределено); // Получение списка изменений. Запрос = Новый Запрос; @@ -564,8 +587,20 @@ Запрос.УстановитьПараметр( "ВидыДоступа", ВидыДоступа.Выгрузить(, "ГруппаДоступа, ВидДоступа, ВсеРазрешены")); - Запрос.УстановитьПараметр( - "ЗначенияДоступа", ЗначенияДоступа.Выгрузить(, "ГруппаДоступа, ВидДоступа, ЗначениеДоступа")); + ТаблицаЗначений = ЗначенияДоступа.Выгрузить(, "ГруппаДоступа, ВидДоступа, ЗначениеДоступа"); + ТаблицаЗначений.Колонки.Добавить("НомерСтроки", Новый ОписаниеТипов("Число",,, + Новый КвалификаторыЧисла(10, 0, ДопустимыйЗнак.Неотрицательный))); + + ГруппаДоступаВСтроке = Неопределено; + Для Каждого Строка Из ТаблицаЗначений Цикл + Если ГруппаДоступаВСтроке <> Строка.ГруппаДоступа Тогда + ГруппаДоступаВСтроке = Строка.ГруппаДоступа; + ТекущийНомерСтроки = 1; + КонецЕсли; + Строка.НомерСтроки = ТекущийНомерСтроки; + ТекущийНомерСтроки = ТекущийНомерСтроки + 1; + КонецЦикла; + Запрос.УстановитьПараметр("ЗначенияДоступа", ТаблицаЗначений); Запрос.Текст = "ВЫБРАТЬ @@ -590,6 +625,7 @@ |ВЫБРАТЬ | ЗначенияДоступа.ГруппаДоступа КАК Профиль, | ЗначенияДоступа.ВидДоступа, + | ЗначенияДоступа.НомерСтроки, | ЗначенияДоступа.ЗначениеДоступа |ПОМЕСТИТЬ ЗначенияДоступа |ИЗ @@ -610,8 +646,8 @@ | Справочник.ПрофилиГруппДоступа КАК Профили | ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ГруппыДоступа КАК ГруппыДоступа | ПО Профили.Ссылка = ГруппыДоступа.Профиль - | И (ГруппыДоступа.Пользователь = &Пользователь - | ИЛИ Профили.Ссылка В (ЗНАЧЕНИЕ(Справочник.ПрофилиГруппДоступа.Администратор))) + | И (НЕ(ГруппыДоступа.Пользователь <> &Пользователь + | И НЕ Профили.Ссылка В (ЗНАЧЕНИЕ(Справочник.ПрофилиГруппДоступа.Администратор)))) | ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ГруппыДоступа.Пользователи КАК ГруппыДоступаПользователи | ПО (ГруппыДоступа.Ссылка = ГруппыДоступаПользователи.Ссылка) | И (ГруппыДоступаПользователи.Пользователь = &Пользователь) @@ -635,6 +671,7 @@ |ВЫБРАТЬ | Профили.Ссылка КАК Профиль, | ГруппыДоступаЗначенияДоступа.ВидДоступа, + | ГруппыДоступаЗначенияДоступа.НомерСтроки, | ГруппыДоступаЗначенияДоступа.ЗначениеДоступа |ПОМЕСТИТЬ ТекущиеЗначенияДоступа |ИЗ @@ -692,6 +729,7 @@ | ЛЕВОЕ СОЕДИНЕНИЕ ТекущиеЗначенияДоступа КАК ТекущиеЗначенияДоступа | ПО ЗначенияДоступа.Профиль = ТекущиеЗначенияДоступа.Профиль | И ЗначенияДоступа.ВидДоступа = ТекущиеЗначенияДоступа.ВидДоступа + | И ЗначенияДоступа.НомерСтроки = ТекущиеЗначенияДоступа.НомерСтроки | И ЗначенияДоступа.ЗначениеДоступа = ТекущиеЗначенияДоступа.ЗначениеДоступа | ГДЕ | ТекущиеЗначенияДоступа.ВидДоступа ЕСТЬ NULL @@ -705,6 +743,7 @@ | ЛЕВОЕ СОЕДИНЕНИЕ ЗначенияДоступа КАК ЗначенияДоступа | ПО (ЗначенияДоступа.Профиль = ТекущиеЗначенияДоступа.Профиль) | И (ЗначенияДоступа.ВидДоступа = ТекущиеЗначенияДоступа.ВидДоступа) + | И (ЗначенияДоступа.НомерСтроки = ТекущиеЗначенияДоступа.НомерСтроки) | И (ЗначенияДоступа.ЗначениеДоступа = ТекущиеЗначенияДоступа.ЗначениеДоступа) | ГДЕ | ЗначенияДоступа.ВидДоступа ЕСТЬ NULL ) КАК ПрофилиИзмененныхГрупп @@ -813,17 +852,17 @@ КонецПроцедуры &НаКлиентеНаСервереБезКонтекста -Процедура ПриИзмененииТекущегоПрофиля(Знач Форма) +Процедура ПриИзмененииТекущегоПрофиля(Знач Форма, Знач НаКлиенте = Истина) Элементы = Форма.Элементы; Профили = Форма.Профили; ВидыДоступа = Форма.ВидыДоступа; - #Если Клиент Тогда + Если НаКлиенте Тогда ТекущиеДанные = Элементы.Профили.ТекущиеДанные; - #Иначе + Иначе ТекущиеДанные = Профили.НайтиПоИдентификатору(?(Элементы.Профили.ТекущаяСтрока = Неопределено, -1, Элементы.Профили.ТекущаяСтрока)); - #КонецЕсли + КонецЕсли; Форма.ТекущийПрофиль = Неопределено; РедактированиеТекущихОграничений = Ложь; @@ -860,7 +899,7 @@ ТекущиеВидыДоступа = ВидыДоступа.НайтиСтроки(Новый Структура("ГруппаДоступа", Форма.ТекущаяГруппаДоступа)); Если ТекущиеВидыДоступа.Количество() = 0 Тогда Элементы.ЗначенияДоступа.ОтборСтрок = Новый ФиксированнаяСтруктура("ГруппаДоступа, ВидДоступа", Форма.ТекущаяГруппаДоступа, ""); - УправлениеДоступомСлужебныйКлиентСервер.ПриИзмененииТекущегоВидаДоступа(Форма); + УправлениеДоступомСлужебныйКлиентСервер.ПриИзмененииТекущегоВидаДоступа(Форма, НаКлиенте); Иначе Элементы.ВидыДоступа.ТекущаяСтрока = ТекущиеВидыДоступа[0].ПолучитьИдентификатор(); КонецЕсли; diff --git a/SSL/src/CommonForms/ПредупрежденияПриЗавершенииРаботы/Form.form b/SSL/src/CommonForms/ПредупрежденияПриЗавершенииРаботы/Form.form index 9288b4a58..1ccdeb97a 100644 --- a/SSL/src/CommonForms/ПредупрежденияПриЗавершенииРаботы/Form.form +++ b/SSL/src/CommonForms/ПредупрежденияПриЗавершенииРаботы/Form.form @@ -194,7 +194,6 @@ true true true - UseIfNecessary auto true @@ -256,7 +255,7 @@ Завершить - Auto + DontUse Auto @@ -278,7 +277,7 @@ Отмена - Auto + DontUse Auto diff --git a/SSL/src/CommonForms/ПрисоединенныеФайлы/Form.form b/SSL/src/CommonForms/ПрисоединенныеФайлы/Form.form index 480f48d9a..6ae8961ea 100644 --- a/SSL/src/CommonForms/ПрисоединенныеФайлы/Form.form +++ b/SSL/src/CommonForms/ПрисоединенныеФайлы/Form.form @@ -4,6 +4,57 @@ ru Присоединенные файлы + + ВладелецФайла + 280 + + Style.LargeTextFont + false + false + false + false + + true + true + + true + + + ВладелецФайла + + + ВладелецФайлаРасширеннаяПодсказка + 282 + Label + true + true + + Left + + + + ВладелецФайлаКонтекстноеМеню + 281 + true + + LabelField + Enter + true + Left + true + + true + true + true + + Style.LargeTextFont + false + false + false + false + + + ГруппаПользовательскихНастроек 240 @@ -68,16 +119,20 @@ Auto - ФормаСоздать - 1 + Добавить + 261 + + <key>ru</key> + <value>Добавить</value> + true true true - ФормаСоздатьExtendedTooltip - 103 + ДобавитьРасширеннаяПодсказка + 262 Label true true @@ -85,13 +140,104 @@ Left - Form.Command.Создать + Form.Command.Добавить Normal + Auto true true UserCmds Auto + + ПодменюДобавить + 257 + + ДобавитьИзФайлаНаДиске + 1 + + <key>ru</key> + <value>Из файла на диске ...</value> + + true + true + + true + + + ДобавитьИзФайлаНаДискеРасширеннаяПодсказка + 103 + Label + true + true + + Left + + + Form.Command.Добавить + Normal + true + true + UserCmds + Auto + + + ДобавитьФайлСоСканера + 259 + true + true + + true + + + ДобавитьФайлСоСканераРасширеннаяПодсказка + 260 + Label + true + true + + Left + + + Form.Command.ДобавитьФайлСоСканера + Normal + Auto + true + true + UserCmds + Auto + + true + true + + true + + + <key>ru</key> + <value>Добавить</value> + + + ru + Подменю добавить + + + ПодменюДобавитьРасширеннаяПодсказка + 258 + Label + true + true + + Left + + + Popup + + + StdPicture.CreateListItem + + Auto + Normal + + ФормаИзменить 102 @@ -198,6 +344,84 @@ UserCmds Auto + + Предпросмотр + 272 + true + true + + true + + + ПредпросмотрРасширеннаяПодсказка + 273 + Label + true + true + + Left + + + Form.Command.Предпросмотр + Normal + Auto + true + true + UserCmds + Auto + InAdditionalSubmenu + + + Печать + 265 + true + true + + true + + + ПечатьРасширеннаяПодсказка + 266 + Label + true + true + + Left + + + Form.Command.Печать + Normal + Auto + true + true + UserCmds + Auto + + + Отправить + 263 + true + true + + true + + + ОтправитьРасширеннаяПодсказка + 264 + Label + true + true + + Left + + + Form.Command.Отправить + Normal + true + true + UserCmds + Auto + true true @@ -1046,38 +1270,644 @@ Left - - Список - 6 - true - true - - true - - - Список - - None - Refresh - - СписокНомерКартинкиПодписанЗашифрован - 206 + + ГруппаФайлы + 270 + + Список + 6 true true true - Список.НомерКартинкиПодписанЗашифрован + Список None - - ru - Наличие электронной подписи или шифрования - + Refresh + + СписокНомерКартинкиПодписанЗашифрован + 206 + true + true + + true + + + Список.НомерКартинкиПодписанЗашифрован + + None + + ru + Наличие электронной подписи или шифрования + + + СписокНомерКартинкиПодписанЗашифрованРасширеннаяПодсказка + 208 + Label + true + true + + Left + + + + СписокНомерКартинкиПодписанЗашифрованКонтекстноеМеню + 207 + true + + PictureField + true + Enter + true + + CommonPicture.ПодписанЗашифрованЗаголовок + + Left + true + + 2 + true + true + true + true + + CommonPicture.ПодписанЗашифрованСостояния + + + + 1 + + + + + СписокГруппаИмяОписание + 204 + + СписокНаименование + 86 + + <key>ru</key> + <value>Наименование</value> + + true + true + + true + + + Список.Наименование + + + ru + Имя файла (без расширения) + + + СписокНаименованиеExtendedTooltip + 159 + Label + true + true + + Left + + + + СписокНаименованиеКонтекстноеМеню + 87 + true + + LabelField + true + Enter + true + true + Left + true + + 20 + true + true + + + + СписокОписание + 168 + + <key>ru</key> + <value>Описание</value> + + true + true + + true + + + Список.Описание + + None + + ru + Краткое описание файла + + + СписокОписаниеРасширеннаяПодсказка + 170 + Label + true + true + + Left + + + + СписокОписаниеКонтекстноеМеню + 169 + true + + LabelField + true + Enter + true + true + Left + true + + 5 + true + true + + + true + true + + true + + + <key>ru</key> + <value>Список группа имя описание</value> + + + ru + Список группа имя описание + + None + + СписокГруппаИмяОписаниеРасширеннаяПодсказка + 205 + Label + true + true + + Left + + + ColumnGroup + + InCell + auto + true + + + + СписокВажныеРеквизиты + 214 + + СписокАвтор + 182 + + <key>ru</key> + <value>Автор</value> + + true + true + + true + + + Список.Автор + + + ru + Пользователь, который добавил файл в список + + + СписокАвторРасширеннаяПодсказка + 184 + Label + true + true + + Left + + + + СписокАвторКонтекстноеМеню + 183 + true + + LabelField + true + Enter + true + Left + true + + 15 + true + true + false + + + + СписокДатаИзменения + 100 + + <key>ru</key> + <value>Дата изменения</value> + + true + true + + true + + + Список.ДатаИзменения + + + ru + Дата изменения данных файла (местное время) + + + СписокДатаИзмененияРасширеннаяПодсказка + 162 + Label + true + true + + Left + + + + СписокДатаИзмененияКонтекстноеМеню + 101 + true + + LabelField + true + Enter + true + Left + true + + 15 + true + true + false + + + true + true + + true + + + <key>ru</key> + <value>Список важные реквизиты</value> + + + ru + Список важные реквизиты + + None + + СписокВажныеРеквизитыРасширеннаяПодсказка + 215 + Label + true + true + + Left + + + ColumnGroup + + auto + true + + + + СписокРазмер + 98 + + <key>ru</key> + <value>Размер (КБ)</value> + + true + true + + + Список.Размер + + + ru + Размер файла в килобайтах + + + СписокРазмерExtendedTooltip + 164 + Label + true + true + + Left + + + + СписокРазмерКонтекстноеМеню + 99 + true + + LabelField + Enter + true + Left + true + + 10 + true + true + false + + ru + ЧЦ=10; ЧН=0 + + + + + СписокРедактирует + 199 + true + true + + + Список.Редактирует + + + ru + Пользователь, который занял файл для редактирования + + + СписокРедактируетРасширеннаяПодсказка + 201 + Label + true + true + + Left + + + + СписокРедактируетКонтекстноеМеню + 200 + true + + LabelField + true + Enter + true + Left + true + + true + true + + + + СписокДатаСоздания + 179 + + <key>ru</key> + <value>Дата создания</value> + + true + true + + + Список.ДатаСоздания + + + ru + Дата добавления файла в список + + + СписокДатаСозданияРасширеннаяПодсказка + 181 + Label + true + true + + Left + + + + СписокДатаСозданияКонтекстноеМеню + 180 + true + + LabelField + true + Enter + true + Left + true + + 15 + true + true + false + + + + СписокОтредактировал + 191 + true + true + + + Список.Отредактировал + + + ru + Последний пользователь, который отредактировал файл + + + СписокОтредактировалРасширеннаяПодсказка + 193 + Label + true + true + + Left + + + + СписокОтредактировалКонтекстноеМеню + 192 + true + + LabelField + true + Enter + true + Left + true + + true + true + + + + СписокСсылка + 165 + true + true + + + Список.Ссылка + + + СписокСсылкаРасширеннаяПодсказка + 167 + Label + true + true + + Left + + + + СписокСсылкаКонтекстноеМеню + 166 + true + + LabelField + Enter + true + Left + true + + 1 + true + true + + + None + + СписокКоманднаяПанель + 8 + Left + true + + + DragCheck + СписокПроверкаПеретаскивания + + + Selection + СписокВыбор + + + BeforeAddRow + СписокПередНачаломДобавления + + + OnActivateRow + СписокПриАктивизацииСтроки + + + Drag + СписокПеретаскивание + + + BeforeRowChange + СписокПередНачаломИзменения + + + СписокСтрокаПоиска + 248 + + СписокСтрокаПоискаРасширеннаяПодсказка + 250 + Label + true + true + + Left + + + + СписокСтрокаПоискаКонтекстноеМеню + 249 + true + + Список + + true + + + + СписокСостояниеПросмотра + 251 + + СписокСостояниеПросмотраРасширеннаяПодсказка + 253 + Label + true + true + + Left + + + + СписокСостояниеПросмотраКонтекстноеМеню + 252 + true + + ViewStatusAddition + Список + + true + + + + СписокУправлениеПоиском + 254 + + СписокУправлениеПоискомРасширеннаяПодсказка + 256 + Label + true + true + + Left + + + + СписокУправлениеПоискомКонтекстноеМеню + 255 + true + + SearchControlAddition + Список + + true + + - СписокНомерКартинкиПодписанЗашифрованРасширеннаяПодсказка - 208 + СписокExtendedTooltip + 156 Label true true @@ -1086,601 +1916,843 @@ - СписокНомерКартинкиПодписанЗашифрованКонтекстноеМеню - 207 + СписокКонтекстноеМеню + 7 + + СписокКонтекстноеМенюДобавить + 54 + true + true + + true + + + СписокКонтекстноеМенюДобавитьРасширеннаяПодсказка + 132 + Label + true + true + + Left + + + Form.Command.Добавить + Normal + Auto + true + true + UserCmds + Auto + + + СписокКонтекстноеМенюГруппаКомандДобавить + 274 + + СписокКонтекстноеМенюДобавитьИзФайлаНаДиске + 276 + + <key>ru</key> + <value>Из файла на диске ...</value> + + true + true + + true + + + СписокКонтекстноеМенюДобавитьИзФайлаНаДискеРасширеннаяПодсказка + 277 + Label + true + true + + Left + + + Form.Command.Добавить + Normal + Auto + true + true + UserCmds + Auto + + + СписокКонтекстноеМенюДобавитьФайлСоСканера + 278 + true + true + + true + + + СписокКонтекстноеМенюДобавитьФайлСоСканераРасширеннаяПодсказка + 279 + Label + true + true + + Left + + + Form.Command.ДобавитьФайлСоСканера + Normal + Auto + true + true + UserCmds + Auto + + true + true + + true + + + <key>ru</key> + <value>Добавить</value> + + + ru + Список контекстное меню группа команд добавить + + + СписокКонтекстноеМенюГруппаКомандДобавитьРасширеннаяПодсказка + 275 + Label + true + true + + Left + + + Popup + + + StdPicture.CreateListItem + + Auto + Normal + + + + СписокКонтекстноеМенюИзменить + 202 + true + true + + true + + + СписокКонтекстноеМенюИзменитьРасширеннаяПодсказка + 203 + Label + true + true + + Left + + + Form.Command.ОткрытьСвойстваФайла + Normal + Auto + true + true + UserCmds + Auto + + + СписокКонтекстноеМенюГруппаКомандОсновные + 55 + + СписокКонтекстноеМенюОткрыть + 56 + true + true + + true + + + СписокКонтекстноеМенюОткрытьРасширеннаяПодсказка + 134 + Label + true + true + + Left + + + Form.Command.ОткрытьФайлДляПросмотра + Normal + Auto + true + true + UserCmds + Auto + + + СписокКонтекстноеМенюРедактировать + 58 + true + true + + true + + + СписокКонтекстноеМенюРедактироватьExtendedTooltip + 136 + Label + true + true + + Left + + + Form.Command.Редактировать + Normal + Auto + true + true + UserCmds + Auto + + + СписокКонтекстноеМенюЗакончитьРедактирование + 59 + true + true + + true + + + СписокКонтекстноеМенюЗакончитьРедактированиеExtendedTooltip + 137 + Label + true + true + + Left + + + Form.Command.ЗакончитьРедактирование + Normal + Auto + true + true + UserCmds + Auto + + true + true + + true + + + <key>ru</key> + <value>Список контекстное меню группа команд основные</value> + + + ru + Список контекстное меню группа команд основные + + + СписокКонтекстноеМенюГруппаКомандОсновныеРасширеннаяПодсказка + 133 + Label + true + true + + Left + + + + + + СписокКонтекстноеМенюГруппаКомандЭлектроннаяПодписьИШифрование + 79 + + СписокКонтекстноеМенюГруппаКомандЭлектроннаяПодпись + 246 + + СписокКонтекстноеМенюЭППодписать + 80 + true + true + + true + + + СписокКонтекстноеМенюЭППодписатьРасширеннаяПодсказка + 150 + Label + true + true + + Left + + + Form.Command.Подписать + Normal + Auto + true + true + UserCmds + Auto + + + СписокКонтекстноеМенюДобавитьЭПИзФайла + 81 + true + true + + true + + + СписокКонтекстноеМенюДобавитьЭПИзФайлаРасширеннаяПодсказка + 151 + Label + true + true + + Left + + + Form.Command.ДобавитьЭПИзФайла + Normal + Auto + true + true + UserCmds + Auto + + + СписокКонтекстноеМенюСохранитьВместеСЭП + 82 + true + true + + true + + + СписокКонтекстноеМенюСохранитьВместеСЭПРасширеннаяПодсказка + 152 + Label + true + true + + Left + + + Form.Command.СохранитьВместеСЭП + Normal + Auto + true + true + UserCmds + Auto + + true + true + + true + + + <key>ru</key> + <value>Список контекстное меню группа команд электронная подпись</value> + + + СписокКонтекстноеМенюГруппаКомандЭлектроннаяПодписьРасширеннаяПодсказка + 247 + Label + true + true + + Left + + + + + + СписокКонтекстноеМенюГруппаКомандШифрование + 83 + + СписокКонтекстноеМенюЗашифровать + 84 + true + true + + true + + + СписокКонтекстноеМенюЗашифроватьExtendedTooltip + 154 + Label + true + true + + Left + + + Form.Command.Зашифровать + Normal + Auto + true + true + UserCmds + Auto + + + СписокКонтекстноеМенюРасшифровать + 85 + true + true + + true + + + СписокКонтекстноеМенюРасшифроватьExtendedTooltip + 155 + Label + true + true + + Left + + + Form.Command.Расшифровать + Normal + Auto + true + true + UserCmds + Auto + + true + true + + true + + + <key>ru</key> + <value>Список контекстное меню группа команд шифрование</value> + + + ru + Список контекстное меню группа команд шифрование + + + СписокКонтекстноеМенюГруппаКомандШифрованиеРасширеннаяПодсказка + 153 + Label + true + true + + Left + + + + + true + true + + true + + + <key>ru</key> + <value>Электронная подпись и шифрование</value> + + + ru + Электронная подпись и шифрование + + + СписокКонтекстноеМенюГруппаКомандЭлектроннаяПодписьИШифрованиеРасширеннаяПодсказка + 149 + Label + true + true + + Left + + + Popup + + + CommonPicture.ПодписанЗашифрованЗаголовок + + Auto + Normal + + + + СписокКонтекстноеМенюГруппаКомандДополнительные + 61 + + СписокКонтекстноеМенюСкопировать + 63 + true + true + + true + + + СписокКонтекстноеМенюСкопироватьExtendedTooltip + 140 + Label + true + true + + Left + + + Form.Command.Скопировать + Normal + Auto + true + true + UserCmds + Auto + + + СписокКонтекстноеМенюУстановитьПометкуУдаления + 64 + true + true + + true + + + СписокКонтекстноеМенюУстановитьПометкуУдаленияExtendedTooltip + 141 + Label + true + true + + Left + + + Form.Command.УстановитьПометкуУдаления + Normal + Auto + true + true + UserCmds + Auto + + + СписокКонтекстноеМенюСохранитьКак + 65 + true + true + + true + + + СписокКонтекстноеМенюСохранитьКакExtendedTooltip + 142 + Label + true + true + + Left + + + Form.Command.СохранитьКак + Normal + Auto + true + true + UserCmds + Auto + + + СписокКонтекстноеМенюОсвободить + 60 + true + true + + true + + + СписокКонтекстноеМенюОсвободитьExtendedTooltip + 138 + Label + true + true + + Left + + + Form.Command.Освободить + Normal + Auto + true + true + UserCmds + Auto + + + СписокКонтекстноеМенюОбновитьИзФайлаНаДиске + 66 + true + true + + true + + + СписокКонтекстноеМенюОбновитьИзФайлаНаДискеExtendedTooltip + 143 + Label + true + true + + Left + + + Form.Command.ОбновитьИзФайлаНаДиске + Normal + Auto + true + true + UserCmds + Auto + + + СписокКонтекстноеМенюОткрытьКаталогФайла + 68 + true + true + + true + + + СписокКонтекстноеМенюОткрытьКаталогФайлаExtendedTooltip + 145 + Label + true + true + + Left + + + Form.Command.ОткрытьКаталогФайла + Normal + Auto + true + true + UserCmds + Auto + + true + true + + true + + + <key>ru</key> + <value>Список контекстное меню группа команд дополнительные</value> + + + СписокКонтекстноеМенюГруппаКомандДополнительныеРасширеннаяПодсказка + 139 + Label + true + true + + Left + + + + + + СписокКонтекстноеМенюГруппаКомандОтСписка + 69 + + СписокКонтекстноеМенюНайти + 70 + true + true + + true + + + СписокКонтекстноеМенюНайтиExtendedTooltip + 147 + Label + true + true + + Left + + + Form.Item.Список.StandardCommand.Find + Normal + Auto + true + true + UserCmds + Auto + + + СписокКонтекстноеМенюОтменитьПоиск + 71 + true + true + + true + + + СписокКонтекстноеМенюОтменитьПоискExtendedTooltip + 148 + Label + true + true + + Left + + + Form.Item.Список.StandardCommand.CancelSearch + Normal + Auto + true + true + UserCmds + Auto + + true + true + + true + + + <key>ru</key> + <value>Список контекстное меню группа команд от списка</value> + + + ru + Список контекстное меню группа команд от списка + + + СписокКонтекстноеМенюГруппаКомандОтСпискаExtendedTooltip + 146 + Label + true + true + + Left + + + + + + HierarchicalList + true + true + 1 + true + 8 + true + true + true + MultiRow +
            true
            + 1 + 1 + AutoUse + AutoUse + true + true + Auto + Auto + true + true + true + true + + Список.ИндексКартинки + + + CommonPicture.КоллекцияПиктограммФайлов + + None + None + None + true + + 60 + + 0001-01-01T00:00:00 + 0001-01-01T00:00:00 + + + true + true + ГруппаПользовательскихНастроек + +
            + + АдресДанныхФайла + 267 + true + + true + + + АдресДанныхФайла + + None + + АдресДанныхФайлаРасширеннаяПодсказка + 269 + Label + true + true + + Left + + + + АдресДанныхФайлаКонтекстноеМеню + 268 true PictureField - true Enter true - - CommonPicture.ПодписанЗашифрованЗаголовок - Left true - 2 true true true true - - CommonPicture.ПодписанЗашифрованСостояния - + AutoSize + + ru + Выберите файл для предварительного просмотра + 1 - - СписокГруппаИмяОписание - 204 - - СписокНаименование - 86 - - <key>ru</key> - <value>Наименование</value> - - true - true - - true - - - Список.Наименование - - - ru - Имя файла (без расширения) - - - СписокНаименованиеExtendedTooltip - 159 - Label - true - true - - Left - - - - СписокНаименованиеКонтекстноеМеню - 87 - true - - LabelField - true - Enter - true - true - Left - true - - 20 - true - true - - - - СписокОписание - 168 - - <key>ru</key> - <value>Описание</value> - - true - true - - true - - - Список.Описание - - None - - ru - Краткое описание файла - - - СписокОписаниеРасширеннаяПодсказка - 170 - Label - true - true - - Left - - - - СписокОписаниеКонтекстноеМеню - 169 - true - - LabelField - true - Enter - true - true - Left - true - - 5 - true - true - - - true - true - - true - - - <key>ru</key> - <value>Список группа имя описание</value> - - - ru - Список группа имя описание - - None - - СписокГруппаИмяОписаниеРасширеннаяПодсказка - 205 - Label - true - true - - Left - - - ColumnGroup - - InCell - auto - true - - - - СписокВажныеРеквизиты - 214 - - СписокАвтор - 182 - - <key>ru</key> - <value>Автор</value> - - true - true - - true - - - Список.Автор - - - ru - Пользователь, который добавил файл в список - - - СписокАвторРасширеннаяПодсказка - 184 - Label - true - true - - Left - - - - СписокАвторКонтекстноеМеню - 183 - true - - LabelField - true - Enter - true - Left - true - - 15 - true - true - false - - - - СписокДатаИзменения - 100 - - <key>ru</key> - <value>Дата изменения</value> - - true - true - - true - - - Список.ДатаИзменения - - - ru - Дата изменения данных файла (местное время) - - - СписокДатаИзмененияРасширеннаяПодсказка - 162 - Label - true - true - - Left - - - - СписокДатаИзмененияКонтекстноеМеню - 101 - true - - LabelField - true - Enter - true - Left - true - - 15 - true - true - false - - - true - true - - true - - - <key>ru</key> - <value>Список важные реквизиты</value> - - - ru - Список важные реквизиты - - None - - СписокВажныеРеквизитыРасширеннаяПодсказка - 215 - Label - true - true - - Left - - - ColumnGroup - - auto - true - - - - СписокРазмер - 98 - - <key>ru</key> - <value>Размер (КБ)</value> - - true - true - - - Список.Размер - - - ru - Размер файла в килобайтах - - - СписокРазмерExtendedTooltip - 164 - Label - true - true - - Left - - - - СписокРазмерКонтекстноеМеню - 99 - true - - LabelField - Enter - true - Left - true - - 10 - true - true - false - - ru - ЧЦ=10; ЧН=0 - - - - - СписокРедактирует - 199 - true - true - - - Список.Редактирует - - - ru - Пользователь, который занял файл для редактирования - - - СписокРедактируетРасширеннаяПодсказка - 201 - Label - true - true - - Left - - - - СписокРедактируетКонтекстноеМеню - 200 - true - - LabelField - true - Enter - true - Left - true - - true - true - - - - СписокДатаСоздания - 179 - - <key>ru</key> - <value>Дата создания</value> - - true - true - - - Список.ДатаСоздания - - - ru - Дата добавления файла в список - - - СписокДатаСозданияРасширеннаяПодсказка - 181 - Label - true - true - - Left - - - - СписокДатаСозданияКонтекстноеМеню - 180 - true - - LabelField - true - Enter - true - Left - true - - 15 - true - true - false - - - - СписокОтредактировал - 191 - true - true - - - Список.Отредактировал - - - ru - Последний пользователь, который отредактировал файл - - - СписокОтредактировалРасширеннаяПодсказка - 193 - Label - true - true - - Left - - - - СписокОтредактировалКонтекстноеМеню - 192 - true - - LabelField - true - Enter - true - Left - true - - true - true - - - - СписокСсылка - 165 - true - true - - - Список.Ссылка - - - СписокСсылкаРасширеннаяПодсказка - 167 - Label - true - true - - Left - - - - СписокСсылкаКонтекстноеМеню - 166 - true - - LabelField - Enter - true - Left - true - - 1 - true - true - - - None - - СписокКоманднаяПанель - 8 - Left - true - - - DragCheck - СписокПроверкаПеретаскивания - - - Selection - СписокВыбор - - - BeforeAddRow - СписокПередНачаломДобавления - - - OnActivateRow - СписокПриАктивизацииСтроки - - - Drag - СписокПеретаскивание - - - BeforeRowChange - СписокПередНачаломИзменения - - - СписокСтрокаПоиска - 248 - - СписокСтрокаПоискаРасширеннаяПодсказка - 250 - Label - true - true - - Left - - - - СписокСтрокаПоискаКонтекстноеМеню - 249 - true - - Список - - true - - - - СписокСостояниеПросмотра - 251 - - СписокСостояниеПросмотраРасширеннаяПодсказка - 253 - Label - true - true - - Left - - - - СписокСостояниеПросмотраКонтекстноеМеню - 252 - true - - ViewStatusAddition - Список - - true - - - - СписокУправлениеПоиском - 254 - - СписокУправлениеПоискомРасширеннаяПодсказка - 256 - Label - true - true - - Left - - - - СписокУправлениеПоискомКонтекстноеМеню - 255 - true - - SearchControlAddition - Список - - true - - + true + true + + true + + + <key>ru</key> + <value>Группа файлы</value> + + + ru + Группа файлы + - СписокExtendedTooltip - 156 + ГруппаФайлыРасширеннаяПодсказка + 271 Label true true @@ -1688,687 +2760,13 @@ Left - - СписокКонтекстноеМеню - 7 - - СписокКонтекстноеМенюСоздать - 54 - true - true - - true - - - СписокКонтекстноеМенюСоздатьExtendedTooltip - 132 - Label - true - true - - Left - - - Form.Command.Создать - Normal - Auto - true - true - UserCmds - Auto - - - СписокКонтекстноеМенюИзменить - 202 - true - true - - true - - - СписокКонтекстноеМенюИзменитьРасширеннаяПодсказка - 203 - Label - true - true - - Left - - - Form.Command.ОткрытьСвойстваФайла - Normal - Auto - true - true - UserCmds - Auto - - - СписокКонтекстноеМенюГруппаКомандОсновные - 55 - - СписокКонтекстноеМенюОткрыть - 56 - true - true - - true - - - СписокКонтекстноеМенюОткрытьРасширеннаяПодсказка - 134 - Label - true - true - - Left - - - Form.Command.ОткрытьФайлДляПросмотра - Normal - Auto - true - true - UserCmds - Auto - - - СписокКонтекстноеМенюРедактировать - 58 - true - true - - true - - - СписокКонтекстноеМенюРедактироватьExtendedTooltip - 136 - Label - true - true - - Left - - - Form.Command.Редактировать - Normal - Auto - true - true - UserCmds - Auto - - - СписокКонтекстноеМенюЗакончитьРедактирование - 59 - true - true - - true - - - СписокКонтекстноеМенюЗакончитьРедактированиеExtendedTooltip - 137 - Label - true - true - - Left - - - Form.Command.ЗакончитьРедактирование - Normal - Auto - true - true - UserCmds - Auto - - true - true - - true - - - <key>ru</key> - <value>Список контекстное меню группа команд основные</value> - - - ru - Список контекстное меню группа команд основные - - - СписокКонтекстноеМенюГруппаКомандОсновныеРасширеннаяПодсказка - 133 - Label - true - true - - Left - - - - - - СписокКонтекстноеМенюГруппаКомандЭлектроннаяПодписьИШифрование - 79 - - СписокКонтекстноеМенюГруппаКомандЭлектроннаяПодпись - 246 - - СписокКонтекстноеМенюЭППодписать - 80 - true - true - - true - - - СписокКонтекстноеМенюЭППодписатьРасширеннаяПодсказка - 150 - Label - true - true - - Left - - - Form.Command.Подписать - Normal - Auto - true - true - UserCmds - Auto - - - СписокКонтекстноеМенюДобавитьЭПИзФайла - 81 - true - true - - true - - - СписокКонтекстноеМенюДобавитьЭПИзФайлаРасширеннаяПодсказка - 151 - Label - true - true - - Left - - - Form.Command.ДобавитьЭПИзФайла - Normal - Auto - true - true - UserCmds - Auto - - - СписокКонтекстноеМенюСохранитьВместеСЭП - 82 - true - true - - true - - - СписокКонтекстноеМенюСохранитьВместеСЭПРасширеннаяПодсказка - 152 - Label - true - true - - Left - - - Form.Command.СохранитьВместеСЭП - Normal - Auto - true - true - UserCmds - Auto - - true - true - - true - - - <key>ru</key> - <value>Список контекстное меню группа команд электронная подпись</value> - - - СписокКонтекстноеМенюГруппаКомандЭлектроннаяПодписьРасширеннаяПодсказка - 247 - Label - true - true - - Left - - - - - - СписокКонтекстноеМенюГруппаКомандШифрование - 83 - - СписокКонтекстноеМенюЗашифровать - 84 - true - true - - true - - - СписокКонтекстноеМенюЗашифроватьExtendedTooltip - 154 - Label - true - true - - Left - - - Form.Command.Зашифровать - Normal - Auto - true - true - UserCmds - Auto - - - СписокКонтекстноеМенюРасшифровать - 85 - true - true - - true - - - СписокКонтекстноеМенюРасшифроватьExtendedTooltip - 155 - Label - true - true - - Left - - - Form.Command.Расшифровать - Normal - Auto - true - true - UserCmds - Auto - - true - true - - true - - - <key>ru</key> - <value>Список контекстное меню группа команд шифрование</value> - - - ru - Список контекстное меню группа команд шифрование - - - СписокКонтекстноеМенюГруппаКомандШифрованиеРасширеннаяПодсказка - 153 - Label - true - true - - Left - - - - - true - true - - true - - - <key>ru</key> - <value>Электронная подпись и шифрование</value> - - - ru - Электронная подпись и шифрование - - - СписокКонтекстноеМенюГруппаКомандЭлектроннаяПодписьИШифрованиеРасширеннаяПодсказка - 149 - Label - true - true - - Left - - - Popup - - - CommonPicture.ПодписанЗашифрованЗаголовок - - Auto - Normal - - - - СписокКонтекстноеМенюГруппаКомандДополнительные - 61 - - СписокКонтекстноеМенюСкопировать - 63 - true - true - - true - - - СписокКонтекстноеМенюСкопироватьExtendedTooltip - 140 - Label - true - true - - Left - - - Form.Command.Скопировать - Normal - Auto - true - true - UserCmds - Auto - - - СписокКонтекстноеМенюУстановитьПометкуУдаления - 64 - true - true - - true - - - СписокКонтекстноеМенюУстановитьПометкуУдаленияExtendedTooltip - 141 - Label - true - true - - Left - - - Form.Command.УстановитьПометкуУдаления - Normal - Auto - true - true - UserCmds - Auto - - - СписокКонтекстноеМенюСохранитьКак - 65 - true - true - - true - - - СписокКонтекстноеМенюСохранитьКакExtendedTooltip - 142 - Label - true - true - - Left - - - Form.Command.СохранитьКак - Normal - Auto - true - true - UserCmds - Auto - - - СписокКонтекстноеМенюОсвободить - 60 - true - true - - true - - - СписокКонтекстноеМенюОсвободитьExtendedTooltip - 138 - Label - true - true - - Left - - - Form.Command.Освободить - Normal - Auto - true - true - UserCmds - Auto - - - СписокКонтекстноеМенюОбновитьИзФайлаНаДиске - 66 - true - true - - true - - - СписокКонтекстноеМенюОбновитьИзФайлаНаДискеExtendedTooltip - 143 - Label - true - true - - Left - - - Form.Command.ОбновитьИзФайлаНаДиске - Normal - Auto - true - true - UserCmds - Auto - - - СписокКонтекстноеМенюОткрытьКаталогФайла - 68 - true - true - - true - - - СписокКонтекстноеМенюОткрытьКаталогФайлаExtendedTooltip - 145 - Label - true - true - - Left - - - Form.Command.ОткрытьКаталогФайла - Normal - Auto - true - true - UserCmds - Auto - - true - true - - true - - - <key>ru</key> - <value>Список контекстное меню группа команд дополнительные</value> - - - СписокКонтекстноеМенюГруппаКомандДополнительныеРасширеннаяПодсказка - 139 - Label - true - true - - Left - - - - - - СписокКонтекстноеМенюГруппаКомандОтСписка - 69 - - СписокКонтекстноеМенюНайти - 70 - true - true - - true - - - СписокКонтекстноеМенюНайтиExtendedTooltip - 147 - Label - true - true - - Left - - - Form.Item.Список.StandardCommand.Find - Normal - Auto - true - true - UserCmds - Auto - - - СписокКонтекстноеМенюОтменитьПоиск - 71 - true - true - - true - - - СписокКонтекстноеМенюОтменитьПоискExtendedTooltip - 148 - Label - true - true - - Left - - - Form.Item.Список.StandardCommand.CancelSearch - Normal - Auto - true - true - UserCmds - Auto - - true - true - - true - - - <key>ru</key> - <value>Список контекстное меню группа команд от списка</value> - - - ru - Список контекстное меню группа команд от списка - - - СписокКонтекстноеМенюГруппаКомандОтСпискаExtendedTooltip - 146 - Label - true - true - - Left - - - - - - HierarchicalList - true - true - true - 8 - true - true - true - MultiRow -
            true
            - 1 - 1 - AutoUse - AutoUse - true - true - Auto - Auto - true - true - true - true - - Список.ИндексКартинки - - - CommonPicture.КоллекцияПиктограммФайлов - - None - None - None - true - - 60 - - 0001-01-01T00:00:00 - 0001-01-01T00:00:00 - - - true - true - ГруппаПользовательскихНастроек + UsualGroup + + Auto + true + true + Auto + Auto
            @@ -2397,7 +2795,6 @@ true true true - UseIfNecessary auto true @@ -2416,21 +2813,18 @@ true - - Список.DeletionMark - - - Список.Ref - - - Список.ПодписанЭЦП - Список.Зашифрован Список.ПодписанЭП + + Список.ПометкаУдаления + + + Список.Расширение + Список.Ссылка @@ -2450,6 +2844,7 @@ ЛОЖЬ КАК ПометкаУдаления, 1 КАК ИндексКартинки, ВЫРАЗИТЬ("" КАК Строка(150)) КАК Наименование, + ВЫРАЗИТЬ("" КАК Строка(10)) КАК Расширение, ВЫРАЗИТЬ("" КАК Строка(500)) КАК Описание, ЗНАЧЕНИЕ(Справочник.Пользователи.ПустаяСсылка) КАК Автор, ДАТАВРЕМЯ(1, 1, 1, 0, 0, 0) КАК ДатаСоздания, @@ -2500,6 +2895,123 @@ true + + АдресДанныхФайла + 2 + + String + + + + true + + + true + + + + РасширенияПоддерживающиеПредпросмотр + + <key>ru</key> + <value>Расширения, поддерживающие предпросмотр</value> + + 3 + + ValueList + + + true + + + true + + + + + + + Предпросмотр + + <key>ru</key> + <value>Предпросмотр</value> + + 7 + + Boolean + + + true + + + true + + + + ПараметрыОтправки + + <key>ru</key> + <value>Параметры отправки</value> + + 6 + + + true + + + true + + + + ЕстьПравоДобавления + + <key>ru</key> + <value>Есть право добавления</value> + + 8 + + Boolean + + + true + + + true + + + + ВладелецФайла + + <key>ru</key> + <value>Владелец</value> + + 9 + + AnyRef + + + true + + + true + + + + ПростаяФорма + + <key>ru</key> + <value>Простая форма</value> + + 10 + + Boolean + + + true + + + true + + ОткрытьФайлДляПросмотра @@ -2523,7 +3035,7 @@ </handler> </action> <representation>TextPicture</representation> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <formCommands> @@ -2549,7 +3061,7 @@ </handler> </action> <representation>Picture</representation> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <formCommands> @@ -2571,7 +3083,7 @@ <name>ОткрытьКаталогФайла</name> </handler> </action> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <formCommands> @@ -2597,7 +3109,7 @@ </handler> </action> <representation>TextPicture</representation> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <formCommands> @@ -2622,7 +3134,7 @@ <name>УстановитьПометкуУдаления</name> </handler> </action> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <formCommands> @@ -2649,7 +3161,7 @@ </handler> </action> <representation>TextPicture</representation> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <formCommands> @@ -2675,7 +3187,7 @@ </handler> </action> <representation>TextPicture</representation> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <formCommands> @@ -2701,7 +3213,7 @@ </handler> </action> <representation>TextPicture</representation> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <formCommands> @@ -2724,7 +3236,7 @@ </handler> </action> <representation>Text</representation> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <formCommands> @@ -2746,7 +3258,7 @@ <name>СохранитьВместеСЭП</name> </handler> </action> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <formCommands> @@ -2768,7 +3280,7 @@ <name>ДобавитьЭПИзФайла</name> </handler> </action> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <formCommands> @@ -2793,7 +3305,7 @@ <name>Зашифровать</name> </handler> </action> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <formCommands> @@ -2815,7 +3327,7 @@ <name>Расшифровать</name> </handler> </action> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <formCommands> @@ -2842,14 +3354,14 @@ </handler> </action> <representation>Picture</representation> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <formCommands> - <name>Создать</name> + <name>Добавить</name> <title> <key>ru</key> - <value>Создать ...</value> + <value>Добавить</value> 6 @@ -2859,16 +3371,13 @@ true - - StdPicture.CreateListItem - - Создать + Добавить TextPicture - Auto + DontUse Auto @@ -2894,7 +3403,7 @@ Скопировать - Auto + DontUse Auto @@ -2920,7 +3429,98 @@ Обновить - Auto + DontUse + Auto + + + ДобавитьФайлСоСканера + + <key>ru</key> + <value>Со сканера ...</value> + + 18 + + ru + Добавить файл со сканера + + + true + + + + ДобавитьФайлСоСканера + + + DontUse + Auto + + + Отправить + + <key>ru</key> + <value>Отправить</value> + + 19 + + ru + Отправить + + + true + + + CommonPicture.ОтправитьЭлектронноеПисьмо + + + + Отправить + + + DontUse + Auto + + + Печать + + <key>ru</key> + <value>Печать</value> + + 20 + + ru + Печать + + + true + + + + Печать + + + DontUse + Auto + + + Предпросмотр + + <key>ru</key> + <value>Предпросмотр</value> + + 21 + + ru + Предпросмотр + + + true + + + + Предпросмотр + + + DontUse Auto @@ -2928,6 +3528,12 @@ true + + ТолькоПросмотр + + Boolean + + diff --git a/SSL/src/CommonForms/ПрисоединенныеФайлы/Module.bsl b/SSL/src/CommonForms/ПрисоединенныеФайлы/Module.bsl index 7c989b6f7..77caba858 100644 --- a/SSL/src/CommonForms/ПрисоединенныеФайлы/Module.bsl +++ b/SSL/src/CommonForms/ПрисоединенныеФайлы/Module.bsl @@ -10,21 +10,46 @@ Возврат; КонецЕсли; + ВладелецФайла = Параметры.ВладелецФайла; + ТекущаяСсылка = ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(Параметры, "ТекущаяСтрока"); + СписокОткрытИзКарточкиФайла = ЗначениеЗаполнено(ТекущаяСсылка); + Элементы.ВладелецФайла.Видимость = СписокОткрытИзКарточкиФайла; + Если СписокОткрытИзКарточкиФайла И ВладелецФайла = Неопределено Тогда + ВладелецФайла = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(ТекущаяСсылка, "ВладелецФайла"); + Параметры.ВладелецФайла = ВладелецФайла; + КонецЕсли; Если Параметры.ВладелецФайла = Неопределено Тогда ВызватьИсключение НСтр("ru = 'Список присоединенных файлов можно посмотреть |только в форме объекта-владельца.'"); КонецЕсли; + Если Параметры.Свойство("ПростаяФорма") Тогда + ПростаяФорма = Параметры.ПростаяФорма; + Элементы.ФормаРедактировать.ТолькоВоВсехДействиях = Истина; + Элементы.ФормаОткрыть.ТолькоВоВсехДействиях = Истина; + Элементы.ФормаЗакончитьРедактирование.ТолькоВоВсехДействиях = Истина; + Элементы.СписокВажныеРеквизиты.Видимость = Ложь; + Предпросмотр = Истина; + КонецЕсли; + + Если Параметры.Свойство("ЗаголовокФормы") Тогда + Заголовок = Параметры.ЗаголовокФормы; + ИначеЕсли СписокОткрытИзКарточкиФайла Тогда + Заголовок = Заголовок + " (" + Строка(ТипЗнч(ВладелецФайла)) + " " + Строка(ВладелецФайла) + ")"; + КонецЕсли; + + Если Параметры.Свойство("ПараметрыОтправки") Тогда + ПараметрыОтправки = Параметры.ПараметрыОтправки; + Иначе + ПараметрыОтправки = ФайловыеФункцииСлужебный.ПодготовитьСтруктуруПараметровОтправки(); + КонецЕсли; + Если Параметры.РежимВыбора Тогда СтандартныеПодсистемыСервер.УстановитьКлючНазначенияФормы(ЭтотОбъект, "ВыборПодбор"); РежимОткрытияОкна = РежимОткрытияОкнаФормы.БлокироватьОкноВладельца; Заголовок = НСтр("ru = 'Выбор присоединенного файла'"); - // Отбор не помеченных на удаление. - ОбщегоНазначенияКлиентСервер.УстановитьЭлементОтбораДинамическогоСписка( - Список, "ПометкаУдаления", Ложь, , , Истина, - РежимОтображенияЭлементаНастройкиКомпоновкиДанных.Обычный); Иначе Элементы.Список.РежимВыбора = Ложь; КонецЕсли; @@ -36,20 +61,21 @@ МетаданныеСправочникаСФайлами = Метаданные.НайтиПоТипу(ТипСправочникаСФайлами); + ЕстьПравоДобавления = Истина; + Если НЕ ПравоДоступа("ИнтерактивноеДобавление", МетаданныеСправочникаСФайлами) Тогда СкрытьКнопкиДобавления(); - Иначе - Если ОбщегоНазначенияКлиентСервер.ЭтоВебКлиент() Тогда - Если НЕ ПравоДобавления(ИмяСправочникаХранилищаФайлов, Параметры.ВладелецФайла) Тогда - СкрытьКнопкиДобавления(); - КонецЕсли; - КонецЕсли; + ЕстьПравоДобавления = Ложь; КонецЕсли; - - Если НЕ ПравоДоступа("Редактирование", МетаданныеСправочникаСФайлами) - ИЛИ НЕ ПравоДоступа("Редактирование", Параметры.ВладелецФайла.Метаданные()) - ИЛИ Параметры.ТолькоПросмотр = Истина Тогда - + + Если ПользователиКлиентСервер.ЭтоСеансВнешнегоПользователя() Тогда + ТолькоПросмотр = Не ПравоДоступа("Редактирование", МетаданныеСправочникаСФайлами); + Иначе + ТолькоПросмотр = Параметры.ТолькоПросмотр Или НЕ ПравоДоступа("Редактирование", МетаданныеСправочникаСФайлами) + Или НЕ ПравоДоступа("Редактирование", Параметры.ВладелецФайла.Метаданные()); + КонецЕсли; + + Если ТолькоПросмотр Тогда СкрытьКнопкиИзменения(); КонецЕсли; @@ -78,11 +104,32 @@ Элементы.ФормаУстановитьПометкуУдаления.ТолькоВоВсехДействиях = Ложь; КонецЕсли; + ИспользоватьПредпросмотр = ОбщегоНазначения.ХранилищеОбщихНастроекЗагрузить( + ТипСправочникаСФайлами, + "Предпросмотр"); + + Если ИспользоватьПредпросмотр <> Неопределено Тогда + Предпросмотр = ИспользоватьПредпросмотр; + КонецЕсли; + + Элементы.АдресДанныхФайла.Видимость = Предпросмотр; + Элементы.Предпросмотр.Пометка = Предпросмотр; + + РасширенияПоддерживающиеПредпросмотр = ФайловыеФункцииСлужебный.СписокРасширенийДляПредпросмотра(); + КонецПроцедуры &НаКлиенте Процедура ПриОткрытии(Отказ) + Если ЕстьПравоДобавления Тогда + ДоступнаКомандаСканировать = ФайловыеФункцииСлужебныйКлиент.ДоступнаКомандаСканировать(); + Элементы.ПодменюДобавить.Видимость = ДоступнаКомандаСканировать; + Элементы.Добавить.Видимость = Не ДоступнаКомандаСканировать; + Элементы.СписокКонтекстноеМенюГруппаКомандДобавить.Видимость = ДоступнаКомандаСканировать; + Элементы.СписокКонтекстноеМенюДобавить.Видимость = Не ДоступнаКомандаСканировать; + КонецЕсли; + УстановитьДоступностьКнопок(); // ТекущаяДата получена не для сохранения в базе данных, а используется @@ -153,8 +200,27 @@ &НаКлиенте Процедура СписокПриАктивизацииСтроки(Элемент) + Если НЕ ДействиеРазрешено() Тогда + Возврат; + КонецЕсли; + УстановитьДоступностьКнопок(); + Если Не Предпросмотр Тогда + Возврат; + КонецЕсли; + + ТекущиеДанные = Элементы.Список.ТекущиеДанные; + + Если РасширенияПоддерживающиеПредпросмотр.НайтиПоЗначению(ТекущиеДанные.Расширение) <> Неопределено Тогда + ДанныеФайла = ПолучитьДанныеФайла(ТекущиеДанные.Ссылка, УникальныйИдентификатор); + АдресДанныхФайла = ДанныеФайла.СсылкаНаДвоичныеДанныеФайла; + Иначе + ТекстНевыбраннойКартинки = НСтр("ru = 'Нет данных для предварительного просмотра'"); + АдресДанныхФайла = Неопределено; + Элементы.АдресДанныхФайла.ТекстНевыбраннойКартинки = ТекстНевыбраннойКартинки; + КонецЕсли; + КонецПроцедуры &НаКлиенте @@ -212,7 +278,7 @@ МассивИменФайлов = Новый Массив; Если ТипЗнч(ПараметрыПеретаскивания.Значение) = Тип("Файл") - И ПараметрыПеретаскивания.Значение.ЭтоФайл() = Истина Тогда + И ПараметрыПеретаскивания.Значение.ЭтоФайл() Тогда МассивИменФайлов.Добавить(ПараметрыПеретаскивания.Значение.ПолноеИмя); @@ -247,12 +313,32 @@ // Обработчики команд файлов &НаКлиенте -Процедура Создать(Команда) +Процедура Добавить(Команда) Элементы.Список.ДобавитьСтроку(); КонецПроцедуры +&НаКлиенте +Процедура ДобавитьФайлСоСканера(Команда) + + ЗначениеПараметраКД = Список.Параметры.НайтиЗначениеПараметра(Новый ПараметрКомпоновкиДанных("ВладелецФайлов")); + Если ЗначениеПараметраКД = Неопределено Тогда + ВладелецФайла = Неопределено; + Иначе + ВладелецФайла = ЗначениеПараметраКД.Значение; + КонецЕсли; + + ПараметрыДобавления = Новый Структура; + ПараметрыДобавления.Вставить("ОбработчикРезультата", Неопределено); + ПараметрыДобавления.Вставить("ВладелецФайла", ВладелецФайла); + ПараметрыДобавления.Вставить("ФормаВладелец", ЭтотОбъект); + ПараметрыДобавления.Вставить("НеОткрыватьКарточкуПослеСозданияИзФайла", Истина); + ПараметрыДобавления.Вставить("ЭтоФайл", Ложь); + ФайловыеФункцииСлужебныйКлиент.ДобавитьСоСканера(ПараметрыДобавления); + +КонецПроцедуры + &НаКлиенте Процедура ОткрытьФайлДляПросмотра(Команда) @@ -397,6 +483,46 @@ КонецЕсли; КонецПроцедуры +&НаКлиенте +Процедура Отправить(Команда) + + ФайловыеФункцииСлужебныйКлиент.ОтправитьФайлыПоПочте( + Элементы.Список.ВыделенныеСтроки, УникальныйИдентификатор, ПараметрыОтправки); + +КонецПроцедуры + +&НаКлиенте +Процедура Печать(Команда) + + #Если ВебКлиент Тогда + ПоказатьПредупреждение(, НСтр("ru = 'В Веб-клиенте печать файлов не поддерживается.'")); + Возврат; + #КонецЕсли + + СистемнаяИнфо = Новый СистемнаяИнформация; + Если СистемнаяИнфо.ТипПлатформы <> ТипПлатформы.Windows_x86 + И СистемнаяИнфо.ТипПлатформы <> ТипПлатформы.Windows_x86_64 Тогда + ПоказатьПредупреждение(, НСтр("ru = 'Печать файлов возможна только в Windows.'")); + Возврат; + КонецЕсли; + + ВыделенныеСтроки = Элементы.Список.ВыделенныеСтроки; + Если ВыделенныеСтроки.Количество() > 0 Тогда + ПрисоединенныеФайлыКлиент.НапечататьФайлы(ВыделенныеСтроки, ЭтаФорма.УникальныйИдентификатор); + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура Предпросмотр(Команда) + + Предпросмотр = Не Предпросмотр; + Элементы.Предпросмотр.Пометка = Предпросмотр; + УстановитьВидимостьПредпросмотра(Предпросмотр); + СохранитьВариантПредпросмотра(ТипСправочникаСФайлами, Предпросмотр); + +КонецПроцедуры + /////////////////////////////////////////////////////////////////////////////////// // Обработчики команд для поддержки ЭП и шифрования. @@ -563,8 +689,6 @@ Возврат; КонецЕсли; - ПрисоединенныеФайлыКлиент.ОткрытьФайл(ДанныеФайла, Истина); - Если НЕ ТекущиеДанные.ФайлРедактируется Тогда ЗанятьФайлДляРедактированияСервер(ТекущиеДанные.Ссылка); @@ -573,6 +697,8 @@ УстановитьДоступностьКнопок(); КонецЕсли; + ПрисоединенныеФайлыКлиент.ОткрытьФайл(ДанныеФайла, Истина); + КонецПроцедуры &НаКлиенте @@ -654,7 +780,7 @@ ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно; ОтборЭлемента.ПравоеЗначение = Истина; - Элемент.Оформление.УстановитьЗначениеПараметра("ЦветТекста", ЦветаСтиля.НедоступныеДанныеЦвет); + Элемент.Оформление.УстановитьЗначениеПараметра("ЦветТекста", ЦветаСтиля.ТекстЗапрещеннойЯчейкиЦвет); // Оформление файла, занятого для редактирования текущим пользователем. @@ -740,8 +866,11 @@ &НаСервере Процедура СкрытьКнопкиДобавления() - Элементы.ФормаСоздать.Видимость = Ложь; - Элементы.СписокКонтекстноеМенюСоздать.Видимость = Ложь; + Элементы.Добавить.Видимость = Ложь; + Элементы.ДобавитьИзФайлаНаДиске.Видимость = Ложь; + Элементы.ДобавитьФайлСоСканера.Видимость = Ложь; + Элементы.СписокКонтекстноеМенюДобавить.Видимость = Ложь; + Элементы.СписокКонтекстноеМенюГруппаКомандДобавить.Видимость = Ложь; Элементы.ФормаСкопировать.Видимость = Ложь; Элементы.СписокКонтекстноеМенюСкопировать.Видимость = Ложь; @@ -773,8 +902,8 @@ Если ТекущиеДанные = Неопределено Тогда ИменаКоманд = Новый Массив; - ИменаКоманд.Добавить("Создать"); - + ИменаКоманд.Добавить("Добавить"); + ИменаКоманд.Добавить("ДобавитьФайлСоСканера"); ИначеЕсли ТипЗнч(Элементы.Список.ТекущаяСтрока) <> ТипСправочникаСФайлами Тогда ИменаКоманд = Новый Массив; Иначе @@ -890,6 +1019,7 @@ | ТОГДА ИСТИНА | ИНАЧЕ ЛОЖЬ | КОНЕЦ КАК ФайлРедактируетДругойПользователь, + | Файлы.Расширение КАК Расширение, | Файлы.Редактирует КАК Редактирует |ИЗ | &ИмяСправочника КАК Файлы @@ -913,31 +1043,12 @@ Список.Параметры.УстановитьЗначениеПараметра("ВладелецФайлов", Параметры.ВладелецФайла); Список.Параметры.УстановитьЗначениеПараметра("ТекущийПользователь", Пользователи.АвторизованныйПользователь()); Список.Параметры.УстановитьЗначениеПараметра("ПустыеПользователи", ПустыеПользователи); - Список.Параметры.УстановитьЗначениеПараметра("СекундДоМестногоВремени", '00010101'); // Установка на клиенте + Список.Параметры.УстановитьЗначениеПараметра("СекундДоМестногоВремени", 0); // Установка на клиенте Список.ОсновнаяТаблица = ПолноеИмяСправочника; Список.ДинамическоеСчитываниеДанных = Истина; КонецПроцедуры -&НаСервереБезКонтекста -Функция ПравоДобавления(ИмяСправочника, ВладелецФайла) - - НачатьТранзакцию(); - - Попытка - НовыйФайл = Справочники[ИмяСправочника].СоздатьЭлемент(); - НовыйФайл.ВладелецФайла = ВладелецФайла; - НовыйФайл.Наименование = "УдалитьФайл"; - НовыйФайл.Записать(); - ОтменитьТранзакцию(); - Возврат Истина; - Исключение - ОтменитьТранзакцию(); - Возврат Ложь; - КонецПопытки; - -КонецФункции - &НаКлиентеНаСервереБезКонтекста Функция ПолучитьИменаКомандФормы() @@ -971,7 +1082,9 @@ ИменаКоманд.Добавить("ОбновитьИзФайлаНаДиске"); // Команды независимые от состояния объектов. - ИменаКоманд.Добавить("Создать"); + ИменаКоманд.Добавить("Добавить"); + ИменаКоманд.Добавить("ДобавитьИзФайлаНаДиске"); + ИменаКоманд.Добавить("ДобавитьФайлСоСканера"); ИменаКоманд.Добавить("ОткрытьСвойстваФайла"); ИменаКоманд.Добавить("Скопировать"); @@ -1097,4 +1210,29 @@ КонецПроцедуры +&НаСервереБезКонтекста +Процедура СохранитьВариантПредпросмотра(ТипСправочникаСФайлами, Предпросмотр) + ОбщегоНазначения.ХранилищеОбщихНастроекСохранить(ТипСправочникаСФайлами, "Предпросмотр", Предпросмотр); +КонецПроцедуры + +&НаКлиенте +Процедура УстановитьВидимостьПредпросмотра(ИспользоватьПредпросмотр) + + Элементы.АдресДанныхФайла.Видимость = ИспользоватьПредпросмотр; + Элементы.Предпросмотр.Пометка = ИспользоватьПредпросмотр; + +КонецПроцедуры + +&НаКлиенте +Функция ДействиеРазрешено() + + ДействиеРазрешено = Истина; + Если Элементы.Список.ТекущиеДанные = Неопределено Тогда + ДействиеРазрешено = Ложь; + КонецЕсли; + + Возврат ДействиеРазрешено; + +КонецФункции + #КонецОбласти diff --git a/SSL/src/CommonForms/ПрисоединенныйФайл/Form.form b/SSL/src/CommonForms/ПрисоединенныйФайл/Form.form index 4788c3057..e37a0846b 100644 --- a/SSL/src/CommonForms/ПрисоединенныйФайл/Form.form +++ b/SSL/src/CommonForms/ПрисоединенныйФайл/Form.form @@ -1389,6 +1389,33 @@ Auto InAdditionalSubmenu
            + + ФормаПоказатьВСписке + 149 + true + true + + true + + + ФормаПоказатьВСпискеРасширеннаяПодсказка + 150 + Label + true + true + + Left + + + Form.Command.ПоказатьВСписке + Normal + Auto + true + true + UserCmds + Auto + InAdditionalSubmenu + ГруппаФайловыеФункции 10 @@ -1961,7 +1988,6 @@ true true true - UseIfNecessary auto true @@ -2528,7 +2554,7 @@ СтандартнаяЗаписатьИЗакрыть - Auto + DontUse Auto @@ -2554,7 +2580,7 @@ СтандартнаяЗаписать - Auto + DontUse Auto @@ -2579,7 +2605,7 @@ СтандартнаяПеречитать - Auto + DontUse Auto @@ -2605,7 +2631,7 @@ СтандартныеСкопировать - Auto + DontUse Auto @@ -2630,7 +2656,7 @@ СтандартныеУстановитьПометкуУдаления - Auto + DontUse Auto @@ -2653,7 +2679,7 @@ TextPicture - Auto + DontUse Auto @@ -2679,7 +2705,7 @@ TextPicture - Auto + DontUse Auto @@ -2705,7 +2731,7 @@ Picture - Auto + DontUse Auto @@ -2727,7 +2753,7 @@ ОткрытьКаталогФайла - Auto + DontUse Auto @@ -2754,7 +2780,7 @@ TextPicture - Auto + DontUse Auto @@ -2780,7 +2806,7 @@ TextPicture - Auto + DontUse Auto @@ -2806,7 +2832,7 @@ TextPicture - Auto + DontUse Auto @@ -2828,7 +2854,7 @@ ДобавитьЭПИзФайла - Auto + DontUse Auto @@ -2853,7 +2879,7 @@ Зашифровать - Auto + DontUse Auto @@ -2875,7 +2901,7 @@ Расшифровать - Auto + DontUse Auto @@ -2897,7 +2923,7 @@ СохранитьВместеСЭП - Auto + DontUse Auto @@ -2920,7 +2946,7 @@ Text - Auto + DontUse Auto @@ -2942,7 +2968,7 @@ КомандаЭПСписокОткрытьПодпись - Auto + DontUse Auto @@ -2964,7 +2990,7 @@ ПроверитьЭП - Auto + DontUse Auto @@ -2986,7 +3012,7 @@ УдалитьЭП - Auto + DontUse Auto @@ -3008,7 +3034,7 @@ ПроверитьВсе - Auto + DontUse Auto @@ -3030,7 +3056,7 @@ СохранитьПодпись - Auto + DontUse Auto @@ -3052,7 +3078,32 @@ ОткрытьСертификатШифрования - Auto + DontUse + Auto + + + ПоказатьВСписке + + <key>ru</key> + <value>Показать в списке</value> + + 24 + + ru + Показать в списке + + + true + + + StdPicture.ShowInList + + + + ПоказатьВСписке + + + DontUse Auto diff --git a/SSL/src/CommonForms/ПрисоединенныйФайл/Module.bsl b/SSL/src/CommonForms/ПрисоединенныйФайл/Module.bsl index 187d4331b..0d01bbfdf 100644 --- a/SSL/src/CommonForms/ПрисоединенныйФайл/Module.bsl +++ b/SSL/src/CommonForms/ПрисоединенныйФайл/Module.bsl @@ -149,6 +149,11 @@ /////////////////////////////////////////////////////////////////////////////////// // Обработчики команд файлов +&НаКлиенте +Процедура ПоказатьВСписке(Команда) + СтандартныеПодсистемыКлиент.ПоказатьВСписке(ЭтотОбъект["Объект"].Ссылка, Неопределено); +КонецПроцедуры + &НаКлиенте Процедура ОбновитьИзФайлаНаДиске(Команда) @@ -1152,8 +1157,8 @@ Для каждого Элемент Из Элементы Цикл Если ТипЗнч(Элемент) = Тип("ПолеФормы") - И Лев(Элемент.ПутьКДанным, СтрДлина("ОбъектПрототип[0].")) = "ОбъектПрототип[0]." - И Прав(Элемент.Имя, 1) = "0" Тогда + И СтрНачинаетсяС(Элемент.ПутьКДанным, "ОбъектПрототип[0].") + И СтрЗаканчиваетсяНа(Элемент.Имя, "0") Тогда ИмяЭлемента = Лев(Элемент.Имя, СтрДлина(Элемент.Имя) -1); Если Элементы.Найти(ИмяЭлемента) <> Неопределено Тогда diff --git a/SSL/src/CommonForms/РедактированиеДополнительныхСведений/Form.form b/SSL/src/CommonForms/РедактированиеДополнительныхСведений/Form.form index 8c8ce8880..924e44203 100644 --- a/SSL/src/CommonForms/РедактированиеДополнительныхСведений/Form.form +++ b/SSL/src/CommonForms/РедактированиеДополнительныхСведений/Form.form @@ -433,7 +433,6 @@ true true true - UseIfNecessary auto true @@ -660,7 +659,7 @@ ИзменитьСоставДополнительныхСведений - Auto + DontUse Auto @@ -681,7 +680,7 @@ Записать - Auto + DontUse Auto @@ -703,7 +702,7 @@ ЗаписатьИЗакрыть - Auto + DontUse Auto @@ -713,12 +712,6 @@ true - - ПанельНавигацииФормы - - Boolean - - diff --git a/SSL/src/CommonForms/РедактированиеДополнительныхСведений/Help/ru.html b/SSL/src/CommonForms/РедактированиеДополнительныхСведений/Help/ru.html index c9234fa48..8612df7d8 100644 --- a/SSL/src/CommonForms/РедактированиеДополнительныхСведений/Help/ru.html +++ b/SSL/src/CommonForms/РедактированиеДополнительныхСведений/Help/ru.html @@ -1,6 +1,6 @@

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

            -

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

            +

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

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

            • Наименование - наименование поля дополнительного сведения;
            • Поле Значение предназначено для просмотра или ввода значений дополнительного сведения.

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

            diff --git a/SSL/src/CommonForms/РедактированиеДополнительныхСведений/Module.bsl b/SSL/src/CommonForms/РедактированиеДополнительныхСведений/Module.bsl index 8b76788fb..763a53a02 100644 --- a/SSL/src/CommonForms/РедактированиеДополнительныхСведений/Module.bsl +++ b/SSL/src/CommonForms/РедактированиеДополнительныхСведений/Module.bsl @@ -11,15 +11,10 @@ Если Не Пользователи.РолиДоступны("ИзменениеДополнительныхСведений") Тогда Элементы.ФормаЗаписать.Видимость = Ложь; Элементы.ФормаЗаписатьИЗакрыть.Видимость = Ложь; - Элементы.ИзменитьСоставДополнительныхСведений.Видимость = Ложь; КонецЕсли; - Если Параметры.ПанельНавигацииФормы - И ПравоДоступа("Редактирование", Метаданные.РегистрыСведений.ДополнительныеСведения) Тогда - - Элементы.ФормаЗаписатьИЗакрыть.Видимость = Ложь; - Элементы.ФормаЗаписать.КнопкаПоУмолчанию = Истина; - Элементы.ФормаЗаписать.Отображение = ОтображениеКнопки.КартинкаИТекст; + Если Не Пользователи.РолиДоступны("ДобавлениеИзменениеДополнительныхРеквизитовИСведений") Тогда + Элементы.ИзменитьСоставДополнительныхСведений.Видимость = Ложь; КонецЕсли; СсылкаНаОбъект = Параметры.Ссылка; @@ -173,8 +168,8 @@ ЗаполнитьЗначенияСвойств(НоваяСтрока, Строка); НоваяСтрока.НомерКартинки = ?(Строка.Удалено, 0, -1); - Если Строка.Значение = Неопределено И - ОбщегоНазначения.ОписаниеТипаСостоитИзТипа(Строка.ТипЗначения, Тип("Булево")) Тогда + Если Строка.Значение = Неопределено + И ОбщегоНазначения.ОписаниеТипаСостоитИзТипа(Строка.ТипЗначения, Тип("Булево")) Тогда НоваяСтрока.Значение = Ложь; КонецЕсли; КонецЦикла; diff --git a/SSL/src/CommonForms/РедактированиеТабличногоДокумента/Form.form b/SSL/src/CommonForms/РедактированиеТабличногоДокумента/Form.form index 25ab2b2bd..7d67b4ab5 100644 --- a/SSL/src/CommonForms/РедактированиеТабличногоДокумента/Form.form +++ b/SSL/src/CommonForms/РедактированиеТабличногоДокумента/Form.form @@ -1592,7 +1592,7 @@ ЗаписатьИЗакрыть - Auto + DontUse Auto @@ -1618,7 +1618,7 @@ TextPicture - Auto + DontUse Auto @@ -1644,7 +1644,7 @@ true - Auto + DontUse Auto @@ -1670,7 +1670,7 @@ true - Auto + DontUse Auto @@ -1695,7 +1695,7 @@ Записать - Auto + DontUse Auto @@ -1718,7 +1718,7 @@ true - Auto + DontUse Auto @@ -1740,7 +1740,7 @@ РедактироватьВоВнешнейПрограмме - Auto + DontUse Auto diff --git a/SSL/src/CommonForms/РедактированиеТабличногоДокумента/Module.bsl b/SSL/src/CommonForms/РедактированиеТабличногоДокумента/Module.bsl index 34e2fa08f..529108f98 100644 --- a/SSL/src/CommonForms/РедактированиеТабличногоДокумента/Module.bsl +++ b/SSL/src/CommonForms/РедактированиеТабличногоДокумента/Module.bsl @@ -59,8 +59,7 @@ &НаКлиенте Процедура ПередЗакрытием(Отказ, СтандартнаяОбработка) - ТекстВопроса = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Сохранить изменения в %1?'"), ИмяДокумента); + ТекстВопроса = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Сохранить изменения в %1?'"), ИмяДокумента); ОписаниеОповещения = Новый ОписаниеОповещения("ПодтвердитьИЗакрыть", ЭтотОбъект); ОбщегоНазначенияКлиент.ПоказатьПодтверждениеЗакрытияФормы(ОписаниеОповещения, Отказ, ТекстВопроса); @@ -402,12 +401,12 @@ &НаКлиенте Функция ОписаниеФайла(ПолноеИмя) - ПозицияРазделителя = СтроковыеФункцииКлиентСервер.НайтиСимволСКонца(ПолноеИмя, ПолучитьРазделительПути()); + ПозицияРазделителя = СтрНайти(ПолноеИмя, ПолучитьРазделительПути(), НаправлениеПоиска.СКонца); Имя = Сред(ПолноеИмя, ПозицияРазделителя + 1); Путь = Лев(ПолноеИмя, ПозицияРазделителя); - ПозицияРасширения = СтроковыеФункцииКлиентСервер.НайтиСимволСКонца(Имя, "."); + ПозицияРасширения = СтрНайти(Имя, ".", НаправлениеПоиска.СКонца); ИмяБезРасширения = Лев(Имя, ПозицияРасширения - 1); Расширение = Сред(Имя, ПозицияРасширения + 1); diff --git a/SSL/src/CommonForms/Сертификат/Form.form b/SSL/src/CommonForms/Сертификат/Form.form index 81e0bf383..caf951bd3 100644 --- a/SSL/src/CommonForms/Сертификат/Form.form +++ b/SSL/src/CommonForms/Сертификат/Form.form @@ -1340,7 +1340,6 @@ Vertical true true - UseIfNecessary auto true @@ -1710,7 +1709,7 @@ СохранитьВФайл - Auto + DontUse Auto @@ -1732,7 +1731,7 @@ Проверить - Auto + DontUse Auto diff --git a/SSL/src/CommonForms/Сертификат/Module.bsl b/SSL/src/CommonForms/Сертификат/Module.bsl index 7d53d487d..de05c4f54 100644 --- a/SSL/src/CommonForms/Сертификат/Module.bsl +++ b/SSL/src/CommonForms/Сертификат/Module.bsl @@ -74,7 +74,7 @@ &НаКлиенте Процедура СохранитьВФайл(Команда) - ЭлектроннаяПодписьСлужебныйКлиент.СохранитьСертификат(, АдресСертификата); + ЭлектроннаяПодписьСлужебныйКлиент.СохранитьСертификат(Неопределено, АдресСертификата); КонецПроцедуры @@ -238,7 +238,7 @@ Строка = СтрПолучитьСтроку(Назначение, Индекс); ТекущийКод = ""; - Позиция = СтроковыеФункцииКлиентСервер.НайтиСимволСКонца(Строка, "("); + Позиция = СтрНайти(Строка, "(", НаправлениеПоиска.СКонца); Если Позиция <> 0 Тогда ТекущийКод = Сред(Строка, Позиция + 1, СтрДлина(Строка) - Позиция - 1); КонецЕсли; diff --git a/SSL/src/CommonForms/ОбменыДанными/Form.form b/SSL/src/CommonForms/СинхронизацияДанных/Form.form similarity index 99% rename from SSL/src/CommonForms/ОбменыДанными/Form.form rename to SSL/src/CommonForms/СинхронизацияДанных/Form.form index 3fa07a0b0..6769067f6 100644 --- a/SSL/src/CommonForms/ОбменыДанными/Form.form +++ b/SSL/src/CommonForms/СинхронизацияДанных/Form.form @@ -4308,7 +4308,6 @@ true true true - UseIfNecessary auto true @@ -4788,7 +4787,7 @@ ОбновитьМонитор - Auto + DontUse Auto @@ -4814,7 +4813,7 @@ TextPicture - Auto + DontUse Auto @@ -4839,7 +4838,7 @@ ИзменитьУзелИнформационнойБазы - Auto + DontUse Auto @@ -4861,7 +4860,7 @@ ПерейтиВЖурналРегистрацииСобытийЗагрузкиДанных - Auto + DontUse Auto @@ -4883,7 +4882,7 @@ ПерейтиВЖурналРегистрацииСобытийВыгрузкиДанных - Auto + DontUse Auto @@ -4909,7 +4908,7 @@ Picture - Auto + DontUse Auto @@ -4934,7 +4933,7 @@ НастроитьСценарииОбменаДанными - Auto + DontUse Auto @@ -4956,7 +4955,7 @@ УстановитьОбновление - Auto + DontUse Auto @@ -4982,7 +4981,7 @@ TextPicture - Auto + DontUse Auto @@ -5008,7 +5007,7 @@ TextPicture - Auto + DontUse Auto @@ -5030,7 +5029,7 @@ НастроитьСценарииОбменаДаннымиОдна - Auto + DontUse Auto @@ -5052,7 +5051,7 @@ СкрытьУспешные - Auto + DontUse Auto @@ -5073,7 +5072,7 @@ ИнформацияПоОбмену - Auto + DontUse Auto @@ -5095,7 +5094,7 @@ ОткрытьРезультатыОднаСинхронизация - Auto + DontUse Auto @@ -5120,7 +5119,7 @@ СоставОтправляемыхДанных - Auto + DontUse Auto @@ -5146,7 +5145,7 @@ TextPicture - Auto + DontUse Auto @@ -5168,7 +5167,7 @@ ЗагрузитьПравилаСинхронизацииДанных - Auto + DontUse Auto diff --git a/SSL/src/CommonForms/ОбменыДанными/Help/ru.html b/SSL/src/CommonForms/СинхронизацияДанных/Help/ru.html similarity index 98% rename from SSL/src/CommonForms/ОбменыДанными/Help/ru.html rename to SSL/src/CommonForms/СинхронизацияДанных/Help/ru.html index ce8c41671..a19c967b5 100644 --- a/SSL/src/CommonForms/ОбменыДанными/Help/ru.html +++ b/SSL/src/CommonForms/СинхронизацияДанных/Help/ru.html @@ -38,7 +38,7 @@
            • Нажмите Только неуспешные, в этом случае будут отражаться только неудавшиеся попытки синхронизации данных или попытки, в ходе которых были получены предупреждения.

            Просмотр журнала регистрации

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

            Замена правил для синхронизации из внешнего файла

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

          Замена правил для синхронизации из внешнего файла

          • Для замены типовых правил конвертации объектов и правил регистрации объектов правилами из внешнего файла необходимо:
            •  Открыть синхронизацию данных, для которой требуется изменить правила. diff --git a/SSL/src/CommonForms/ОбменыДанными/Module.bsl b/SSL/src/CommonForms/СинхронизацияДанных/Module.bsl similarity index 99% rename from SSL/src/CommonForms/ОбменыДанными/Module.bsl rename to SSL/src/CommonForms/СинхронизацияДанных/Module.bsl index 1bf96afc4..94377736c 100644 --- a/SSL/src/CommonForms/ОбменыДанными/Module.bsl +++ b/SSL/src/CommonForms/СинхронизацияДанных/Module.bsl @@ -758,7 +758,7 @@ "ЗаголовокКомандыДляСозданияНовогоОбменаДанными", ПредопределеннаяНастройка); - СоздатьКомандуИЭлементФормы(НаименованиеКоманды, ЗаголовокКоманды + НСтр("ru = ' (в сервисе)'"), СуммирующаяГруппа); + СоздатьКомандуИЭлементФормы(НаименованиеКоманды, ЗаголовокКоманды + " " + НСтр("ru = '(в сервисе)'"), СуммирующаяГруппа); КонецЦикла; @@ -773,7 +773,7 @@ Если МенеджерПланаОбмена.КорреспондентВМоделиСервиса() Тогда СоздатьКомандуИЭлементФормы(НаименованиеКоманды + "КорреспондентВМоделиСервиса", - ЗаголовокКоманды + НСтр("ru = ' (в сервисе)'"), + ЗаголовокКоманды + " " + НСтр("ru = '(в сервисе)'"), РодительскаяГруппа); КонецЕсли; @@ -1029,8 +1029,7 @@ ОписаниеОшибки = Новый Структура; ОписаниеОшибки.Вставить("ТекстОшибки", НСтр("ru = 'Синхронизация данных не может быть выполнена, так как используются правила, предназначенные для программы ""%1"". Следует использовать правила из конфигурации или загрузить корректный комплект правил из файла.'")); - ОписаниеОшибки.ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ОписаниеОшибки.ТекстОшибки, - ИнформацияОПравилах.СинонимКонфигурацииВПравилах); + ОписаниеОшибки.ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ОписаниеОшибки.ТекстОшибки, ИнформацияОПравилах.СинонимКонфигурацииВПравилах); ОписаниеОшибки.Вставить("ВидОшибки", "НекорректнаяКонфигурация"); ОписаниеОшибки.Вставить("Картинка", БиблиотекаКартинок.Ошибка32); Возврат Ложь; @@ -1055,8 +1054,7 @@ КонецЕсли; - ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ТекстОшибки, Метаданные.Синоним, - ВерсияВПравилахБезСборки, ВерсияКонфигурацииБезСборки); + ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ТекстОшибки, Метаданные.Синоним, ВерсияВПравилахБезСборки, ВерсияКонфигурацииБезСборки); ОписаниеОшибки = Новый Структура; ОписаниеОшибки.Вставить("ТекстОшибки", ТекстОшибки); diff --git a/SSL/src/CommonForms/ОбменыДанными/ОбменыДанными.mdo b/SSL/src/CommonForms/СинхронизацияДанных/СинхронизацияДанных.mdo similarity index 89% rename from SSL/src/CommonForms/ОбменыДанными/ОбменыДанными.mdo rename to SSL/src/CommonForms/СинхронизацияДанных/СинхронизацияДанных.mdo index 0e91f41d7..dc326eb9c 100644 --- a/SSL/src/CommonForms/ОбменыДанными/ОбменыДанными.mdo +++ b/SSL/src/CommonForms/СинхронизацияДанных/СинхронизацияДанных.mdo @@ -1,6 +1,6 @@ - ОбменыДанными + СинхронизацияДанных ru Синхронизация данных diff --git a/SSL/src/CommonForms/СменаПароля/Form.form b/SSL/src/CommonForms/СменаПароля/Form.form new file mode 100644 index 000000000..31ef86fe5 --- /dev/null +++ b/SSL/src/CommonForms/СменаПароля/Form.form @@ -0,0 +1,1216 @@ + + + + ПояснениеПриВходе + 1 + + <key>ru</key> + <value>Для входа в программу нужно сменить пароль на новый.</value> + + true + true + + true + + + ПояснениеПриВходеРасширеннаяПодсказка + 3 + Label + true + true + + Left + + + + ПояснениеПриВходеКонтекстноеМеню + 2 + true + + Label + true + true + + Left + + + + ГруппаПароль + 14 + + ГруппаПарольСтолбцы + 39 + + ГруппаПарольЛевыйСтолбец + 16 + + СтарыйПарольНадпись + 69 + + <key>ru</key> + <value>Старый пароль:</value> + + true + true + + true + + + СтарыйПарольНадписьРасширеннаяПодсказка + 71 + Label + true + true + + Left + + + + СтарыйПарольНадписьКонтекстноеМеню + 70 + true + + Label + true + true + + Left + + + + НовыйПарольНадпись + 20 + + <key>ru</key> + <value>Новый пароль:</value> + + true + true + + true + + + НовыйПарольНадписьРасширеннаяПодсказка + 22 + Label + true + true + + Left + + + + НовыйПарольНадписьКонтекстноеМеню + 21 + true + + Label + true + true + + Left + + + + ПодтверждениеПароляНадпись + 23 + + <key>ru</key> + <value>Подтверждение:</value> + + true + true + + true + + + ПодтверждениеПароляНадписьРасширеннаяПодсказка + 25 + Label + true + true + + Left + + + + ПодтверждениеПароляНадписьКонтекстноеМеню + 24 + true + + Label + true + true + + Left + + + + ГоризонтальныйОтступ + 47 + true + true + + true + + + ГоризонтальныйОтступРасширеннаяПодсказка + 49 + Label + true + true + + Left + + + + ГоризонтальныйОтступКонтекстноеМеню + 48 + true + + Label + true + true + + Left + + + true + true + + true + + + <key>ru</key> + <value>Группа пароль левый столбец</value> + + + ГруппаПарольЛевыйСтолбецРасширеннаяПодсказка + 17 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + true + true + Auto + Auto + + + + ГруппаПарольПравыйСтолбец + 18 + + СтарыйПароль + 66 + true + true + + true + + + СтарыйПароль + + None + + СтарыйПарольРасширеннаяПодсказка + 68 + Label + true + true + + Left + + + + СтарыйПарольКонтекстноеМеню + 67 + true + + InputField + Enter + true + Left + true + + 14 + true + true + false + true + true + true + true + true + Normal + + + + ГруппаНовыйПароль + 72 + + НовыйПароль + 8 + true + true + + true + + + НовыйПароль + + None + + ru + Надежный пароль: +- имеет не менее 7 символов; +- содержит любые 3 из 4-х типов символов: заглавные буквы, + строчные буквы, цифры, специальные символы; +- не совпадает с именем (для входа). + + Button + + OnChange + ПарольПриИзменении + + + НовыйПарольРасширеннаяПодсказка + 10 + Label + true + true + + Left + + + + НовыйПарольКонтекстноеМеню + 9 + true + + InputField + Enter + true + Left + true + + + EditTextChange + ПарольИзменениеТекстаРедактирования + + 14 + true + true + false + true + true + true + true + true + Normal + + + + НовыйПароль2 + 96 + true + + true + + + НовыйПароль + + None + + ru + Надежный пароль: +- имеет не менее 7 символов; +- содержит любые 3 из 4-х типов символов: заглавные буквы, + строчные буквы, цифры, специальные символы; +- не совпадает с именем (для входа). + + Button + + OnChange + ПарольПриИзменении + + + НовыйПароль2РасширеннаяПодсказка + 98 + Label + true + true + + Left + + + + НовыйПароль2КонтекстноеМеню + 97 + true + + InputField + Enter + true + Left + true + + + EditTextChange + ПарольИзменениеТекстаРедактирования + + 14 + true + true + false + true + true + true + true + Normal + + + + СоздатьПароль + 29 + true + true + + true + + + СоздатьПарольРасширеннаяПодсказка + 30 + Label + true + true + + Left + + + UsualButton + Form.Command.СоздатьПароль + Normal + Auto + true + true + UserCmds + Auto + + true + true + + true + + + <key>ru</key> + <value>Группа новый пароль</value> + + + ГруппаНовыйПарольРасширеннаяПодсказка + 73 + Label + true + true + + Left + + + UsualGroup + + Auto + true + true + Auto + Auto + + + + ГруппаПодтверждение + 74 + + Подтверждение + 11 + true + true + + true + + + Подтверждение + + None + + OnChange + ПарольПриИзменении + + + ПодтверждениеРасширеннаяПодсказка + 13 + Label + true + true + + Left + + + + ПодтверждениеКонтекстноеМеню + 12 + true + + InputField + Enter + true + Left + true + + + EditTextChange + ПарольИзменениеТекстаРедактирования + + 14 + true + true + false + true + true + true + true + true + Normal + + + + ГруппаОшибки + 81 + + СтраницаОшибка + 83 + + НадписьПарольНеСовпадает + 76 + + <key>ru</key> + <value>(не совпадает)</value> + + true + true + + true + + + НадписьПарольНеСовпадаетРасширеннаяПодсказка + 78 + Label + true + true + + Left + + + + НадписьПарольНеСовпадаетКонтекстноеМеню + 77 + true + + Label + true + true + true + + Style.ПоясняющийОшибкуТекст + + + Left + + + true + true + + true + + + <key>ru</key> + <value>Страница ошибка</value> + + + СтраницаОшибкаРасширеннаяПодсказка + 84 + Label + true + true + + Left + + + Page + + Vertical + auto + + + + СтраницаПустая + 85 + + НадписьПустая + 87 + true + true + + true + + + НадписьПустаяРасширеннаяПодсказка + 89 + Label + true + true + + Left + + + + НадписьПустаяКонтекстноеМеню + 88 + true + + Label + true + true + + Left + + + true + true + + true + + + <key>ru</key> + <value>Страница пустая</value> + + + СтраницаПустаяРасширеннаяПодсказка + 86 + Label + true + true + + Left + + + Page + + Vertical + auto + + + true + true + + true + + + <key>ru</key> + <value>Группа ошибки</value> + + + ГруппаОшибкиРасширеннаяПодсказка + 82 + Label + true + true + + Left + + + Pages + + Auto + + + true + true + + true + + + <key>ru</key> + <value>Группа подтверждение</value> + + false + + ГруппаПодтверждениеРасширеннаяПодсказка + 75 + Label + true + true + + Left + + + UsualGroup + + Auto + true + true + Auto + Auto + + + + ГруппаПоказыватьНовыйПароль + 31 + + ПоказыватьНовыйПароль + 26 + true + true + + true + + + ПоказыватьНовыйПароль + + Right + + OnChange + ПоказыватьНовыйПарольПриИзменении + + + ПоказыватьНовыйПарольРасширеннаяПодсказка + 28 + Label + true + true + + Left + + + + ПоказыватьНовыйПарольКонтекстноеМеню + 27 + true + + CheckBoxField + Enter + true + Left + true + + + true + true + + true + + + <key>ru</key> + <value>Группа показывать новый пароль</value> + + + ГруппаПоказыватьНовыйПарольРасширеннаяПодсказка + 32 + Label + true + true + + Left + + + UsualGroup + + Auto + true + true + Auto + Auto + + + true + true + + true + + + <key>ru</key> + <value>Группа пароль правый столбец</value> + + + ru + Группа пароль правый столбец + + + ГруппаПарольПравыйСтолбецРасширеннаяПодсказка + 19 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + true + true + Auto + Auto + + + true + true + + true + + + <key>ru</key> + <value>Группа пароль столбцы</value> + + + ГруппаПарольСтолбцыРасширеннаяПодсказка + 40 + Label + true + true + + Left + + + UsualGroup + + Auto + true + true + Auto + Auto + + + + ВертикальныйОтступ + 36 + true + true + + true + + + ВертикальныйОтступРасширеннаяПодсказка + 38 + Label + true + true + + Left + + + + ВертикальныйОтступКонтекстноеМеню + 37 + true + + Label + 38 + true + true + + System.DefaultGUIFont + 25 + + + Left + + + true + true + + true + + + <key>ru</key> + <value>Группа пароль</value> + + false + + ГруппаПарольРасширеннаяПодсказка + 15 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + NormalSeparation + true + true + Auto + Auto + + + Bottom + true + + ФормаКоманднаяПанель + -1 + + ФормаУстановитьПароль + 4 + true + true + + true + + + ФормаУстановитьПарольРасширеннаяПодсказка + 5 + Label + true + true + + Left + + + Form.Command.УстановитьПароль + Auto + true + true + true + UserCmds + Auto + + + ФормаЗакрытьФорму + 79 + + <key>ru</key> + <value>Завершить работу</value> + + true + true + + true + + + ФормаЗакрытьФормуРасширеннаяПодсказка + 80 + Label + true + true + + Left + + + Form.Command.ЗакрытьФорму + Normal + true + true + UserCmds + Auto + InCommandBarAndInAdditionalSubmenu + + Left + true + + + OnOpen + ПриОткрытии + + + OnCreateAtServer + ПриСозданииНаСервере + + CustomizeForm + LockWholeInterface + true + true + true + Vertical + true + true + true + auto + true + + НовыйПароль + + <key>ru</key> + <value>Новый пароль</value> + + 1 + + String + + + + true + + + true + + + + Подтверждение + + <key>ru</key> + <value>Подтверждение</value> + + 2 + + String + + + + true + + + true + + + + ПоказыватьНовыйПароль + + <key>ru</key> + <value>Показывать новый пароль</value> + + 3 + + Boolean + + + true + + + true + + + + СтарыйПароль + + <key>ru</key> + <value>Старый пароль</value> + + 5 + + String + + + + true + + + true + + + + ПриВходеВПрограмму + + <key>ru</key> + <value>При входе в программу</value> + + 6 + + Boolean + + + true + + + true + + + + Пользователь + + <key>ru</key> + <value>Пользователь</value> + + 7 + + CatalogRef.ВнешниеПользователи + CatalogRef.Пользователи + + + true + + + true + + + + ТекстОшибки + + <key>ru</key> + <value>Текст ошибки</value> + + 8 + + String + + + + true + + + true + + + + ПарольПользователяСервиса + + <key>ru</key> + <value>Пароль пользователя сервиса</value> + + 9 + + + true + + + true + + + + ИдентификаторПользователяИБ + + <key>ru</key> + <value>Идентификатор пользователя ИБ</value> + + 11 + + UUID + + + true + + + true + + + + ПоследнееПодтверждение + + <key>ru</key> + <value>Последнее подтверждение</value> + + 12 + + String + + + + true + + + true + + + + ЭтоТекущийПользовательИБ + + <key>ru</key> + <value>Это текущий пользователь ИБ</value> + + 13 + + Boolean + + + true + + + true + + + + УстановитьПароль + + <key>ru</key> + <value>Установить пароль</value> + + 1 + + true + + + + УстановитьПароль + + + DontUse + Auto + + + СоздатьПароль + + <key>ru</key> + <value>Создать пароль</value> + + 3 + + ru + Создать новый надежный пароль + + + true + + + + СоздатьПароль + + + DontUse + Auto + + + ЗакрытьФорму + + <key>ru</key> + <value>Закрыть форму</value> + + 4 + + true + + + + ЗакрытьФорму + + + DontUse + Auto + + + Пользователь + + CatalogRef.ВнешниеПользователи + CatalogRef.Пользователи + + + + ПриВходеВПрограмму + + Boolean + + + + + + + diff --git a/SSL/src/CommonForms/СменаПароля/Help/ru.html b/SSL/src/CommonForms/СменаПароля/Help/ru.html new file mode 100644 index 000000000..341faa718 --- /dev/null +++ b/SSL/src/CommonForms/СменаПароля/Help/ru.html @@ -0,0 +1,23 @@ + +

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

              +

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

              +

              Ввод пароля

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

              Автоматическое создание пароля

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

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

              +

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

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

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

              +
              • Примеры хороших паролей:
                “nj7{jhjibq*Gfhjkm,
                F5”njnGhkmNj;t{HI. +
              • Примеры неудачных паролей:
                Иванов,
                qwerty,
                12345678,
                123123123.
              \ No newline at end of file diff --git a/SSL/src/CommonForms/СменаПароля/Module.bsl b/SSL/src/CommonForms/СменаПароля/Module.bsl new file mode 100644 index 000000000..f1dec4fd1 --- /dev/null +++ b/SSL/src/CommonForms/СменаПароля/Module.bsl @@ -0,0 +1,423 @@ + +#Область ОбработчикиСобытийФормы + +&НаСервере +Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) + + Если Параметры.Свойство("АвтоТест") Тогда // Возврат при получении формы для анализа. + Возврат; + КонецЕсли; + + ПриВходеВПрограмму = Параметры.ПриВходеВПрограмму; + + Если ЗначениеЗаполнено(Параметры.Пользователь) Тогда + Пользователь = Параметры.Пользователь; + Иначе + Пользователь = Пользователи.АвторизованныйПользователь(); + КонецЕсли; + + ДополнительныеПараметры = Новый Структура; + Если Не ПользователиСлужебный.ВозможноИзменитьПароль(Пользователь, ДополнительныеПараметры) Тогда + ТекстОшибки = ДополнительныеПараметры.ТекстОшибки; + Возврат; + КонецЕсли; + ЭтоТекущийПользовательИБ = ДополнительныеПараметры.ЭтоТекущийПользовательИБ; + + ИдентификаторПользователяИБ = ДополнительныеПараметры.ИдентификаторПользователяИБ; + + Если ПриВходеВПрограмму Тогда + Если ДополнительныеПараметры.ПарольУстановлен Тогда + КлючНазначенияФормы = "СменаПароляПриВходеВПрограмму"; + Иначе + КлючНазначенияФормы = "УстановкаПароляПриВходеВПрограмму"; + Элементы.ПояснениеПриВходе.Заголовок = + НСтр("ru = 'Для входа в программу нужно установить пароль.'") + КонецЕсли; + Иначе + Если Не ДополнительныеПараметры.ЭтоТекущийПользовательИБ + Или Не ДополнительныеПараметры.ПарольУстановлен Тогда + + КлючНазначенияФормы = "УстановкаПароля"; + КонецЕсли; + Элементы.ПояснениеПриВходе.Видимость = Ложь; + Элементы.ФормаЗакрытьФорму.Заголовок = НСтр("ru = 'Отмена'"); + КонецЕсли; + + СтандартныеПодсистемыСервер.УстановитьКлючНазначенияФормы(ЭтотОбъект, КлючНазначенияФормы, , Ложь); + + Если Не ДополнительныеПараметры.ЭтоТекущийПользовательИБ + Или Не ДополнительныеПараметры.ПарольУстановлен Тогда + + Элементы.СтарыйПарольНадпись.Видимость = Ложь; + Элементы.СтарыйПароль.Видимость = Ложь; + АвтоЗаголовок = Ложь; + Заголовок = НСтр("ru = 'Установка пароля'"); + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура ПриОткрытии(Отказ) + + Если ЗначениеЗаполнено(ТекстОшибки) Тогда + Отказ = Истина; + ПодключитьОбработчикОжидания("ПоказатьТекстОшибкиИСообщитьОЗакрытии", 0.1, Истина); + Иначе + ПроверитьПодтверждениеПароля(); + КонецЕсли; + +КонецПроцедуры + +#КонецОбласти + +#Область ОбработчикиСобытийЭлементовШапкиФормы + +&НаКлиенте +Процедура ПарольПриИзменении(Элемент) + + ПоследнееПодтверждение = ""; + ПроверитьПодтверждениеПароля(); + +КонецПроцедуры + +&НаКлиенте +Процедура ПарольИзменениеТекстаРедактирования(Элемент, Текст, СтандартнаяОбработка) + + ПроверитьПодтверждениеПароля(Элемент); + +КонецПроцедуры + +&НаКлиенте +Процедура ПоказыватьНовыйПарольПриИзменении(Элемент) + + ПоказыватьНовыйПарольПриИзмененииНаСервере(); + ПроверитьПодтверждениеПароля(); + +КонецПроцедуры + +#КонецОбласти + +#Область ОбработчикиКомандФормы + +&НаКлиенте +Процедура СоздатьПароль(Команда) + + Подтверждение = ""; + ПоследнееПодтверждение = ""; + + СоздатьПарольНаСервере(); + ПроверитьПодтверждениеПароля(); + +КонецПроцедуры + +&НаКлиенте +Процедура УстановитьПароль(Команда) + + ТекстПредупреждения = НСтр("ru = 'Подтверждение пароля указано некорректно.'"); + + Если ПоказыватьНовыйПароль + И НовыйПароль <> ПоследнееПодтверждение + И ЭтоТекущийПользовательИБ Тогда + + ПоказыватьНовыйПароль = Ложь; + Подтверждение = ""; + ПоследнееПодтверждение = ""; + ПоказыватьНовыйПарольПриИзмененииНаСервере(); + ПроверитьПодтверждениеПароля(); + ТекущийЭлемент = Элементы.Подтверждение; + Если ЗначениеЗаполнено(НовыйПароль) Тогда + ПоказатьПредупреждение(, ТекстПредупреждения); + Возврат; + КонецЕсли; + КонецЕсли; + + Если Не ПоказыватьНовыйПароль И НовыйПароль <> Подтверждение Тогда + ТекущийЭлемент = Элементы.Подтверждение; + Элементы.Подтверждение.ВыделенныйТекст = Элементы.Подтверждение.ТекстРедактирования; + ПоказатьПредупреждение(, ТекстПредупреждения); + Возврат; + КонецЕсли; + + Если Не ЭтоТекущийПользовательИБ + И СтандартныеПодсистемыКлиентПовтИсп.ПараметрыРаботыКлиента().РазделениеВключено + И ПарольПользователяСервиса = Неопределено Тогда + + СтандартныеПодсистемыКлиент.ПриЗапросеПароляДляАутентификацииВСервисе( + Новый ОписаниеОповещения("УстановитьПарольЗавершение", ЭтотОбъект), + ЭтотОбъект, + ПарольПользователяСервиса); + Иначе + УстановитьПарольЗавершение(Null, Неопределено); + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура ЗакрытьФорму(Команда) + + Закрыть(); + +КонецПроцедуры + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +&НаКлиенте +Процедура ПоказатьТекстОшибкиИСообщитьОЗакрытии() + + ПоказатьПредупреждение(Новый ОписаниеОповещения( + "ПоказатьТекстОшибкиИСообщитьОЗакрытииЗавершение", ЭтотОбъект), ТекстОшибки); + +КонецПроцедуры + +&НаКлиенте +Процедура БездействиеПриЗакрытии() Экспорт + + Возврат; + +КонецПроцедуры + +&НаКлиенте +Процедура ПоказатьТекстОшибкиИСообщитьОЗакрытииЗавершение(Контекст) Экспорт + + Если ЭтотОбъект.ОписаниеОповещенияОЗакрытии <> Неопределено Тогда + ВыполнитьОбработкуОповещения(ЭтотОбъект.ОписаниеОповещенияОЗакрытии); + ЭтотОбъект.ОписаниеОповещенияОЗакрытии = Новый ОписаниеОповещения("БездействиеПриЗакрытии", ЭтотОбъект); + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура ПроверитьПодтверждениеПароля(ПолеПароля = Неопределено) + + Если ПоказыватьНовыйПароль И Не ЭтоТекущийПользовательИБ Тогда + ПарольСовпадает = Истина; + + ИначеЕсли ПолеПароля = Элементы.НовыйПароль + Или ПолеПароля = Элементы.НовыйПароль2 Тогда + + ПарольСовпадает = (ПолеПароля.ТекстРедактирования = Подтверждение); + + ИначеЕсли ПолеПароля = Элементы.Подтверждение Тогда + ПарольСовпадает = (НовыйПароль = ПолеПароля.ТекстРедактирования); + + ИначеЕсли ПоказыватьНовыйПароль Тогда + ПарольСовпадает = (НовыйПароль = ПоследнееПодтверждение); + Иначе + ПарольСовпадает = (НовыйПароль = Подтверждение); + КонецЕсли; + + Элементы.ГруппаОшибки.ТекущаяСтраница = ?(ПарольСовпадает, + Элементы.СтраницаПустая, Элементы.СтраницаОшибка); + +КонецПроцедуры + +&НаСервере +Процедура ПоказыватьНовыйПарольПриИзмененииНаСервере() + + Элементы.ПодтверждениеПароляНадпись.Доступность = Не ПоказыватьНовыйПароль Или ЭтоТекущийПользовательИБ; + Элементы.Подтверждение.Доступность = Не ПоказыватьНовыйПароль; + + Элементы.НовыйПароль.Видимость = Не ПоказыватьНовыйПароль; + Элементы.НовыйПароль2.Видимость = ПоказыватьНовыйПароль; + + Если ПоказыватьНовыйПароль Тогда + ПоследнееПодтверждение = Подтверждение; + Подтверждение = ""; + Иначе + Подтверждение = ПоследнееПодтверждение; + ПоследнееПодтверждение = ""; + КонецЕсли; + +КонецПроцедуры + +&НаСервере +Процедура СоздатьПарольНаСервере() + + Если ТипЗнч(Пользователь) = Тип("СправочникСсылка.ВнешниеПользователи") Тогда + НастройкиВхода = ПользователиСлужебныйПовтИсп.Настройки().ВнешниеПользователи; + Иначе + НастройкиВхода = ПользователиСлужебныйПовтИсп.Настройки().Пользователи; + КонецЕсли; + + Если НастройкиВхода.МинимальнаяДлинаПароля > 8 Тогда + МинимальнаяДлинаПароля = НастройкиВхода.МинимальнаяДлинаПароля; + Иначе + МинимальнаяДлинаПароля = 8; + КонецЕсли; + + ПараметрыПароля = ПользователиСлужебный.ПараметрыПароля(МинимальнаяДлинаПароля, Истина); + + НовыйПароль = ПользователиСлужебный.СоздатьПароль(ПараметрыПароля); + + ПоказыватьНовыйПароль = Истина; + ПоказыватьНовыйПарольПриИзмененииНаСервере(); + +КонецПроцедуры + +// Продолжение процедуры УстановитьПароль. +&НаКлиенте +Процедура УстановитьПарольЗавершение(НовыйПарольПользователяСервиса, Контекст) Экспорт + + Если НовыйПарольПользователяСервиса = Неопределено Тогда + Возврат; + КонецЕсли; + + Если НовыйПарольПользователяСервиса <> Null Тогда + ПарольПользователяСервиса = НовыйПарольПользователяСервиса; + КонецЕсли; + + ТекстОшибки = ""; + Если УстановитьПарольНаСервере(ТекстОшибки) Тогда + Закрыть(Новый Структура("УстановленПустойПароль", НовыйПароль = "")); + Иначе + ПоказатьПредупреждение(, ТекстОшибки); + КонецЕсли; + +КонецПроцедуры + +&НаСервере +Функция УстановитьПарольНаСервере(ТекстОшибки) + + ДополнительныеПараметры = Новый Структура; + Если Не ПользователиСлужебный.ВозможноИзменитьПароль(Пользователь, ДополнительныеПараметры) Тогда + ТекстОшибки = ДополнительныеПараметры.ТекстОшибки; + Возврат Ложь; + КонецЕсли; + + УстановитьПривилегированныйРежим(Истина); + + Если ДополнительныеПараметры.ЭтоТекущийПользовательИБ + И ДополнительныеПараметры.ПарольУстановлен Тогда + + СтарыйПарольСовпадает = Ложь; + ПользователиСлужебный.СохраняемоеЗначениеСтрокиПароля(СтарыйПароль, + ИдентификаторПользователяИБ, СтарыйПарольСовпадает); + Если Не СтарыйПарольСовпадает Тогда + ТекстОшибки = НСтр("ru = 'Старый пароль указан неверно.'"); + СтарыйПароль = ""; + ТекущийЭлемент = Элементы.СтарыйПароль; + Возврат Ложь; + КонецЕсли; + КонецЕсли; + + Если ТипЗнч(Пользователь) = Тип("СправочникСсылка.ВнешниеПользователи") Тогда + НастройкиВхода = ПользователиСлужебныйПовтИсп.Настройки().ВнешниеПользователи; + Иначе + НастройкиВхода = ПользователиСлужебныйПовтИсп.Настройки().Пользователи; + КонецЕсли; + + Если ПользователиСлужебныйПовтИсп.Настройки().ОбщиеНастройкиВхода Тогда + МинимальнаяДлинаПароля = НастройкиВхода.МинимальнаяДлинаПароля; + Если НастройкиВхода.ПарольДолженОтвечатьТребованиямСложности И МинимальнаяДлинаПароля < 7 Тогда + МинимальнаяДлинаПароля = 7; + КонецЕсли; + Если СтрДлина(НовыйПароль) < МинимальнаяДлинаПароля Тогда + ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Количество символов нового пароля должно быть не менее %1.'"), + Формат(МинимальнаяДлинаПароля, "ЧГ=")); + Возврат Ложь; + КонецЕсли; + Если НастройкиВхода.ПарольДолженОтвечатьТребованиямСложности + И Не ПользователиСлужебный.ПарольОтвечаетТребованиямСложности(НовыйПароль) Тогда + + ТекстОшибки = НСтр("ru = 'Пароль не отвечает требованиям сложности.'") + + Символы.ПС + Символы.ПС + + Элементы.НовыйПароль.Подсказка; + Возврат Ложь; + КонецЕсли; + КонецЕсли; + + СохраняемоеЗначениеПароля = ПользователиСлужебный.СохраняемоеЗначениеСтрокиПароля(НовыйПароль); + + Блокировка = Новый БлокировкаДанных; + ЭлементБлокировки = Блокировка.Добавить(Метаданные.НайтиПоТипу(ТипЗнч(Пользователь)).ПолноеИмя()); + ЭлементБлокировки.Режим = РежимБлокировкиДанных.Исключительный; + ЭлементБлокировки.УстановитьЗначение("Ссылка", Пользователь); + ЭлементБлокировки = Блокировка.Добавить("РегистрСведений.СведенияОПользователях"); + ЭлементБлокировки.Режим = РежимБлокировкиДанных.Исключительный; + ЭлементБлокировки.УстановитьЗначение("Пользователь", Пользователь); + НачатьТранзакцию(); + Попытка + Блокировка.Заблокировать(); + НаборЗаписей = РегистрыСведений.СведенияОПользователях.СоздатьНаборЗаписей(); + НаборЗаписей.Отбор.Пользователь.Установить(Пользователь); + НаборЗаписей.Прочитать(); + Если НаборЗаписей.Количество() = 0 Тогда + СведенияОПользователе = НаборЗаписей.Добавить(); + СведенияОПользователе.Пользователь = Пользователь; + Иначе + СведенияОПользователе = НаборЗаписей[0]; + КонецЕсли; + СведенияОПользователе.ДатаНачалаИспользованияПароля = Неопределено; + Если ПриВходеВПрограмму Тогда + СведенияОПользователе.ПотребоватьСменуПароляПриВходе = Ложь; + КонецЕсли; + ИспользованныеПароли = СведенияОПользователе.ИспользованныеПароли.Получить(); + Если ИспользованныеПароли = Неопределено Тогда + ИспользованныеПароли = Новый Массив; + КонецЕсли; + + Если ПользователиСлужебныйПовтИсп.Настройки().ОбщиеНастройкиВхода + И ЗначениеЗаполнено(НастройкиВхода.ЗапретитьПовторениеПароляСредиПоследних) Тогда + + Если ИспользованныеПароли.Найти(СохраняемоеЗначениеПароля) <> Неопределено Тогда + ТекстОшибки = НСтр("ru = 'Новый пароль использовался ранее.'"); + ОтменитьТранзакцию(); + Возврат Ложь; + КонецЕсли; + ИспользованныеПароли.Добавить(СохраняемоеЗначениеПароля); + Пока ИспользованныеПароли.Количество() > НастройкиВхода.ЗапретитьПовторениеПароляСредиПоследних Цикл + ИспользованныеПароли.Удалить(0); + КонецЦикла; + Иначе + ИспользованныеПароли.Очистить(); + КонецЕсли; + СведенияОПользователе.ИспользованныеПароли = Новый ХранилищеЗначения(ИспользованныеПароли); + НаборЗаписей.Записать(); + + ОписаниеПользователяИБ = Новый Структура; + ОписаниеПользователяИБ.Вставить("Действие", "Записать"); + ОписаниеПользователяИБ.Вставить("Пароль", НовыйПароль); + + ТекущийОбъект = Пользователь.ПолучитьОбъект(); + ТекущийОбъект.ДополнительныеСвойства.Вставить("ОписаниеПользователяИБ", ОписаниеПользователяИБ); + Если ОбщегоНазначенияПовтИсп.РазделениеВключено() Тогда + Если ЭтоТекущийПользовательИБ Тогда + ТекущийОбъект.ДополнительныеСвойства.Вставить("ПарольПользователяСервиса", СтарыйПароль); + Иначе + ТекущийОбъект.ДополнительныеСвойства.Вставить("ПарольПользователяСервиса", ПарольПользователяСервиса); + КонецЕсли; + ТекущийОбъект.ДополнительныеСвойства.Вставить("СинхронизироватьССервисом", Истина); + КонецЕсли; + Попытка + ТекущийОбъект.Записать(); + Исключение + ПарольПользователяСервиса = Неопределено; + ВызватьИсключение; + КонецПопытки; + + ЗафиксироватьТранзакцию(); + Исключение + ИнформацияОбОшибке = ИнформацияОбОшибке(); + ОтменитьТранзакцию(); + ЗаписьЖурналаРегистрации( + НСтр("ru = 'Пользователи.Ошибка смены пароля'", + ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), + УровеньЖурналаРегистрации.Ошибка, + Метаданные.НайтиПоТипу(ТипЗнч(Пользователь)), + Пользователь, + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Не удалось сменить пароль пользователя ""%1"" по причине: + |%2'"), + Пользователь, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке))); + ТекстОшибки = КраткоеПредставлениеОшибки(ИнформацияОбОшибке); + Возврат Ложь; + КонецПопытки; + + Возврат Истина; + +КонецФункции + +#КонецОбласти diff --git a/SSL/src/CommonForms/СменаПароля/СменаПароля.mdo b/SSL/src/CommonForms/СменаПароля/СменаПароля.mdo new file mode 100644 index 000000000..cc20670cc --- /dev/null +++ b/SSL/src/CommonForms/СменаПароля/СменаПароля.mdo @@ -0,0 +1,15 @@ + + + СменаПароля + + ru + Смена пароля + + + + ru + + + PersonalComputer + MobileDevice + diff --git a/SSL/src/CommonForms/СозданиеНачальногоОбразаСФайлами/Form.form b/SSL/src/CommonForms/СозданиеНачальногоОбразаСФайлами/Form.form index d11858ddd..8267cdba0 100644 --- a/SSL/src/CommonForms/СозданиеНачальногоОбразаСФайлами/Form.form +++ b/SSL/src/CommonForms/СозданиеНачальногоОбразаСФайлами/Form.form @@ -4,87 +4,988 @@ ru Создание начального образа информационной базы - - ВидБазы - 1 - true - true - - true - - - ВидБазы - - None - - OnChange - ВидБазыПриИзменении - - - ВидБазыExtendedTooltip - 51 - Label - true - true - - Left - - - - ВидБазыКонтекстноеМеню - 2 - true - - RadioButtonField - Enter - true - Left - true - - - - ru - На данном компьютере или на компьютере в локальной сети - - - 0 - - - - - ru - На сервере 1С:Предприятия - - - 1 - - - Vertical - - - Параметры - 3 + СтраницыФормы + 79 - Страницы - 4 + ИсходныеДанные + 81 + + ВидБазы + 1 + true + true + + true + + + ВидБазы + + None + + OnChange + ВидБазыПриИзменении + + + ВидБазыExtendedTooltip + 51 + Label + true + true + + Left + + + + ВидБазыКонтекстноеМеню + 2 + true + + RadioButtonField + Enter + true + Left + true + + + + ru + На данном компьютере или на компьютере в локальной сети + + + 0 + + + + + ru + На сервере 1С:Предприятия + + + 1 + + + Vertical + + - ЗаполнитьПараметрыФайловойБазы - 5 + Параметры + 3 + + Страницы + 4 + + ЗаполнитьПараметрыФайловойБазы + 5 + + ЯзыкФайловойБазы + 7 + true + true + + true + + + Язык + + + ЯзыкФайловойБазыExtendedTooltip + 55 + Label + true + true + + Left + + + + ЯзыкФайловойБазыКонтекстноеМеню + 8 + true + + InputField + Enter + true + Left + true + + true + true + true + true + true + Normal + + + + ГруппаПутьФайловойБазы + 37 + + ПолноеИмяФайловойБазы + 35 + + <key>ru</key> + <value>Для сервера 1С:Предприятия под управлением Microsoft Windows</value> + + true + true + + true + + + ПолноеИмяФайловойБазыWindows + + Top + 1 + + ПолноеИмяФайловойБазыExtendedTooltip + 57 + Label + true + true + + Left + + + + ПолноеИмяФайловойБазыКонтекстноеМеню + 36 + true + + InputField + Enter + true + Left + true + + + StartChoice + ПолноеИмяФайловойБазыНачалоВыбора + + true + true + true + true + true + true + true + Normal + + + + ПолноеИмяФайловойБазыLinux + 38 + + <key>ru</key> + <value>Для сервера 1С:Предприятия под управлением Linux</value> + + true + true + + true + + + ПолноеИмяФайловойБазыLinux + + Top + + ПолноеИмяФайловойБазыLinuxExtendedTooltip + 58 + Label + true + true + + Left + + + + ПолноеИмяФайловойБазыLinuxКонтекстноеМеню + 39 + true + + InputField + Enter + true + Left + true + + true + true + true + true + true + true + Normal + + + true + true + + true + + + <key>ru</key> + <value>Полное имя файловой базы</value> + + + ru + Группа путь файловой базы + + + ГруппаПутьФайловойБазыExtendedTooltip + 56 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + WeakSeparation + true + true + auto + Auto + Auto + + + true + true + + true + + + <key>ru</key> + <value>Заполнить параметры файловой базы</value> + + + ru + Заполнить параметры файловой базы + + + ЗаполнитьПараметрыФайловойБазыExtendedTooltip + 54 + Label + true + true + + Left + + + Page + + Vertical + auto + + + + ЗаполнитьПараметрыСервернойБазы + 6 + + ВертикальнаяГруппа1 + 75 + + Сервер + 9 + true + true + + true + + + Сервер + + + СерверExtendedTooltip + 60 + Label + true + true + + Left + + + + СерверКонтекстноеМеню + 10 + true + + InputField + Enter + true + Left + true + + true + true + true + true + true + true + Normal + + + + ИмяБазы + 11 + true + true + + true + + + ИмяБазы + + + ИмяБазыExtendedTooltip + 61 + Label + true + true + + Left + + + + ИмяБазыКонтекстноеМеню + 12 + true + + InputField + Enter + true + Left + true + + true + true + true + true + true + true + Normal + + + + ЗащищенноеСоединение + 13 + true + true + + true + + + ЗащищенноеСоединение + + + ЗащищенноеСоединениеExtendedTooltip + 62 + Label + true + true + + Left + + + + ЗащищенноеСоединениеКонтекстноеМеню + 14 + true + + InputField + DontShow + Enter + true + Left + true + + 20 + true + true + true + true + true + true + + + ru + Выключено + + + 0 + + + + + ru + Установка соединения + + + 1 + + + + + ru + Постоянно + + + 2 + + + Normal + + + + ЯзыкБазыСервера + 27 + true + true + + true + + + Язык + + + ЯзыкБазыСервераExtendedTooltip + 69 + Label + true + true + + Left + + + + ЯзыкБазыСервераКонтекстноеМеню + 28 + true + + InputField + Enter + true + Left + true + + true + true + true + true + true + Normal + + + + УстановитьБлокировкуРегламентныхЗаданий + 46 + true + true + + true + + + УстановитьБлокировкуРегламентныхЗаданий + + Right + + УстановитьБлокировкуРегламентныхЗаданийExtendedTooltip + 70 + Label + true + true + + Left + + + + УстановитьБлокировкуРегламентныхЗаданийКонтекстноеМеню + 47 + true + + CheckBoxField + Enter + true + Left + true + + + true + true + + true + + + <key>ru</key> + <value>Вертикальная группа 1</value> + + + ВертикальнаяГруппа1РасширеннаяПодсказка + 76 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + true + true + Auto + Auto + + + + ВертикальнаяГруппа2 + 77 + + ТипСУБД + 15 + true + true + + true + + + ТипСУБД + + + ТипСУБДExtendedTooltip + 63 + Label + true + true + + Left + + + + ТипСУБДКонтекстноеМеню + 16 + true + + InputField + DontShow + Enter + true + Left + true + + true + true + true + true + true + + + ru + Microsoft SQL Server + + + MSSQLServer + + + + + ru + PostgreSQL + + + PostgreSQL + + + + + ru + IBM DB2 + + + IBMDB2 + + + + + ru + Oracle Database + + + Oracle + + + Normal + + + + СерверБазыДанных + 17 + true + true + + true + + + СерверБазыДанных + + + СерверБазыДанныхExtendedTooltip + 64 + Label + true + true + + Left + + + + СерверБазыДанныхКонтекстноеМеню + 18 + true + + InputField + DontShow + Enter + true + Left + true + + true + true + true + true + true + Normal + + + + ИмяБазыДанных + 19 + true + true + + true + + + ИмяБазыДанных + + + ИмяБазыДанныхExtendedTooltip + 65 + Label + true + true + + Left + + + + ИмяБазыДанныхКонтекстноеМеню + 20 + true + + InputField + Enter + true + Left + true + + true + true + true + true + true + Normal + + + + ПользовательБазыДанных + 21 + true + true + + true + + + ПользовательБазыДанных + + + ПользовательБазыДанныхExtendedTooltip + 66 + Label + true + true + + Left + + + + ПользовательБазыДанныхКонтекстноеМеню + 22 + true + + InputField + Enter + true + Left + true + + true + true + true + true + true + Normal + + + + ПарольПользователя + 23 + true + true + + true + + + ПарольПользователя + + + ПарольПользователяExtendedTooltip + 67 + Label + true + true + + Left + + + + ПарольПользователяКонтекстноеМеню + 24 + true + + InputField + Enter + true + Left + true + + true + true + true + true + true + true + Normal + + + + СмещениеДат + 25 + true + true + + true + + + СмещениеДат + + + СмещениеДатExtendedTooltip + 68 + Label + true + true + + Left + + + + СмещениеДатКонтекстноеМеню + 26 + true + + InputField + Enter + true + Left + true + + true + true + true + true + true + true + + + ru + 0 + + + 0 + + + + + ru + 2000 + + + 2000 + + + Normal + + + true + true + + true + + + <key>ru</key> + <value>Вертикальная группа 2</value> + + + ВертикальнаяГруппа2РасширеннаяПодсказка + 78 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + true + true + Auto + Auto + + + true + true + + true + + + <key>ru</key> + <value>Заполнить параметры серверной базы</value> + + + ru + Заполнить параметры серверной базы + + + ЗаполнитьПараметрыСервернойБазыExtendedTooltip + 59 + Label + true + true + + Left + + + Page + + auto + + + true + true + + true + + + <key>ru</key> + <value>Страницы</value> + + + ru + Страницы + + + СтраницыExtendedTooltip + 53 + Label + true + true + + Left + + + Pages + + Auto + + + true + true + + true + + + <key>ru</key> + <value>Параметры информационной базы</value> + + + ru + Параметры + + + ПараметрыExtendedTooltip + 52 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + WeakSeparation + true + true + auto + Auto + Auto + + + + ГруппаПутьКАрхивуСФайламиТомов + 40 - ЯзыкФайловойБазы - 7 + ПутьКАрхивуСФайламиТомов + 33 + + <key>ru</key> + <value>Для сервера 1С:Предприятия под управлением Microsoft Windows</value> + true true true - Язык + ПутьКАрхивуСФайламиТомовWindows + Top - ЯзыкФайловойБазыExtendedTooltip - 55 + ПутьКАрхивуСФайламиТомовExtendedTooltip + 72 Label true true @@ -93,8 +994,59 @@ - ЯзыкФайловойБазыКонтекстноеМеню - 8 + ПутьКАрхивуСФайламиТомовКонтекстноеМеню + 34 + true + + InputField + Enter + true + Left + true + + + StartChoice + ПутьКАрхивуСФайламиТомовНачалоВыбора + + true + true + true + true + true + true + true + Normal + + + + ПутьКАрхивуСФайламиТомовLinux + 41 + + <key>ru</key> + <value>Для сервера 1С:Предприятия под управлением Linux</value> + + true + true + + true + + + ПутьКАрхивуСФайламиТомовLinux + + Top + + ПутьКАрхивуСФайламиТомовLinuxExtendedTooltip + 73 + Label + true + true + + Left + + + + ПутьКАрхивуСФайламиТомовLinuxКонтекстноеМеню + 42 true InputField @@ -105,148 +1057,13 @@ true true - true + true + true true true Normal - - ГруппаПутьФайловойБазы - 37 - - ПолноеИмяФайловойБазы - 35 - - <key>ru</key> - <value>Для сервера 1С:Предприятия под управлением Microsoft Windows</value> - - true - true - - true - - - ПолноеИмяФайловойБазыWindows - - Top - 1 - - ПолноеИмяФайловойБазыExtendedTooltip - 57 - Label - true - true - - Left - - - - ПолноеИмяФайловойБазыКонтекстноеМеню - 36 - true - - InputField - Enter - true - Left - true - - - StartChoice - ПолноеИмяФайловойБазыНачалоВыбора - - true - true - true - true - true - true - true - Normal - - - - ПолноеИмяФайловойБазыLinux - 38 - - <key>ru</key> - <value>Для сервера 1С:Предприятия под управлением Linux</value> - - true - true - - true - - - ПолноеИмяФайловойБазыLinux - - Top - - ПолноеИмяФайловойБазыLinuxExtendedTooltip - 58 - Label - true - true - - Left - - - - ПолноеИмяФайловойБазыLinuxКонтекстноеМеню - 39 - true - - InputField - Enter - true - Left - true - - true - true - true - true - true - true - Normal - - - true - true - - true - - - <key>ru</key> - <value>Полное имя файловой базы</value> - - - ru - Группа путь файловой базы - - - ГруппаПутьФайловойБазыExtendedTooltip - 56 - Label - true - true - - Left - - - UsualGroup - - Vertical - Auto - WeakSeparation - true - true - auto - Auto - Auto - - true true @@ -254,15 +1071,15 @@ <key>ru</key> - <value>Заполнить параметры файловой базы</value> + <value>Полное имя архива с файлами томов</value> ru - Заполнить параметры файловой базы + Группа путь к архиву с файлами томов - ЗаполнитьПараметрыФайловойБазыExtendedTooltip - 54 + ГруппаПутьКАрхивуСФайламиТомовExtendedTooltip + 71 Label true true @@ -270,603 +1087,21 @@ Left - Page - + UsualGroup + Vertical + Auto + WeakSeparation + true + true auto + Auto + Auto - ЗаполнитьПараметрыСервернойБазы - 6 - - ВертикальнаяГруппа1 - 75 - - Сервер - 9 - true - true - - true - - - Сервер - - - СерверExtendedTooltip - 60 - Label - true - true - - Left - - - - СерверКонтекстноеМеню - 10 - true - - InputField - Enter - true - Left - true - - true - true - true - true - true - true - Normal - - - - ИмяБазы - 11 - true - true - - true - - - ИмяБазы - - - ИмяБазыExtendedTooltip - 61 - Label - true - true - - Left - - - - ИмяБазыКонтекстноеМеню - 12 - true - - InputField - Enter - true - Left - true - - true - true - true - true - true - true - Normal - - - - ЗащищенноеСоединение - 13 - true - true - - true - - - ЗащищенноеСоединение - - - ЗащищенноеСоединениеExtendedTooltip - 62 - Label - true - true - - Left - - - - ЗащищенноеСоединениеКонтекстноеМеню - 14 - true - - InputField - DontShow - Enter - true - Left - true - - 20 - true - true - true - true - true - true - - - ru - Выключено - - - 0 - - - - - ru - Установка соединения - - - 1 - - - - - ru - Постоянно - - - 2 - - - Normal - - - - ЯзыкБазыСервера - 27 - true - true - - true - - - Язык - - - ЯзыкБазыСервераExtendedTooltip - 69 - Label - true - true - - Left - - - - ЯзыкБазыСервераКонтекстноеМеню - 28 - true - - InputField - Enter - true - Left - true - - true - true - true - true - true - Normal - - - - УстановитьБлокировкуРегламентныхЗаданий - 46 - true - true - - true - - - УстановитьБлокировкуРегламентныхЗаданий - - Right - - УстановитьБлокировкуРегламентныхЗаданийExtendedTooltip - 70 - Label - true - true - - Left - - - - УстановитьБлокировкуРегламентныхЗаданийКонтекстноеМеню - 47 - true - - CheckBoxField - Enter - true - Left - true - - - true - true - - true - - - <key>ru</key> - <value>Вертикальная группа 1</value> - - - ВертикальнаяГруппа1РасширеннаяПодсказка - 76 - Label - true - true - - Left - - - UsualGroup - - Vertical - Auto - true - true - Auto - Auto - - - - ВертикальнаяГруппа2 - 77 - - ТипСУБД - 15 - true - true - - true - - - ТипСУБД - - - ТипСУБДExtendedTooltip - 63 - Label - true - true - - Left - - - - ТипСУБДКонтекстноеМеню - 16 - true - - InputField - DontShow - Enter - true - Left - true - - true - true - true - true - true - - - ru - Microsoft SQL Server - - - MSSQLServer - - - - - ru - PostgreSQL - - - PostgreSQL - - - - - ru - IBM DB2 - - - IBMDB2 - - - - - ru - Oracle Database - - - Oracle - - - Normal - - - - СерверБазыДанных - 17 - true - true - - true - - - СерверБазыДанных - - - СерверБазыДанныхExtendedTooltip - 64 - Label - true - true - - Left - - - - СерверБазыДанныхКонтекстноеМеню - 18 - true - - InputField - DontShow - Enter - true - Left - true - - true - true - true - true - true - Normal - - - - ИмяБазыДанных - 19 - true - true - - true - - - ИмяБазыДанных - - - ИмяБазыДанныхExtendedTooltip - 65 - Label - true - true - - Left - - - - ИмяБазыДанныхКонтекстноеМеню - 20 - true - - InputField - Enter - true - Left - true - - true - true - true - true - true - Normal - - - - ПользовательБазыДанных - 21 - true - true - - true - - - ПользовательБазыДанных - - - ПользовательБазыДанныхExtendedTooltip - 66 - Label - true - true - - Left - - - - ПользовательБазыДанныхКонтекстноеМеню - 22 - true - - InputField - Enter - true - Left - true - - true - true - true - true - true - Normal - - - - ПарольПользователя - 23 - true - true - - true - - - ПарольПользователя - - - ПарольПользователяExtendedTooltip - 67 - Label - true - true - - Left - - - - ПарольПользователяКонтекстноеМеню - 24 - true - - InputField - Enter - true - Left - true - - true - true - true - true - true - true - Normal - - - - СмещениеДат - 25 - true - true - - true - - - СмещениеДат - - - СмещениеДатExtendedTooltip - 68 - Label - true - true - - Left - - - - СмещениеДатКонтекстноеМеню - 26 - true - - InputField - Enter - true - Left - true - - true - true - true - true - true - true - - - ru - 0 - - - 0 - - - - - ru - 2000 - - - 2000 - - - Normal - - - true - true - - true - - - <key>ru</key> - <value>Вертикальная группа 2</value> - - - ВертикальнаяГруппа2РасширеннаяПодсказка - 78 - Label - true - true - - Left - - - UsualGroup - - Vertical - Auto - true - true - Auto - Auto - - + ПанельДействий + 29 true true @@ -874,15 +1109,15 @@ <key>ru</key> - <value>Заполнить параметры серверной базы</value> + <value>Панель действий</value> ru - Заполнить параметры серверной базы + Панель действий - ЗаполнитьПараметрыСервернойБазыExtendedTooltip - 59 + ПанельДействийExtendedTooltip + 74 Label true true @@ -890,9 +1125,9 @@ Left - Page - - auto + CommandBar + + Right true @@ -902,15 +1137,15 @@ <key>ru</key> - <value>Страницы</value> + <value>Исходные данные</value> ru - Страницы + Исходные данные - СтраницыExtendedTooltip - 53 + ИсходныеДанныеРасширеннаяПодсказка + 82 Label true true @@ -918,68 +1153,145 @@ Left - Pages - - Auto + Page + + Vertical + auto - true - true - - true - - - <key>ru</key> - <value>Параметры информационной базы</value> - - - ru - Параметры - - - ПараметрыExtendedTooltip - 52 - Label - true - true - - Left - - - UsualGroup - - Vertical - Auto - WeakSeparation - true - true - auto - Auto - Auto - - - - ГруппаПутьКАрхивуСФайламиТомов - 40 - - ПутьКАрхивуСФайламиТомов - 33 - - <key>ru</key> - <value>Для сервера 1С:Предприятия под управлением Microsoft Windows</value> - + + ОжиданиеСозданияНачальногоОбраза + 83 + + Статус + 85 + + <key>ru</key> + <value>Создание начального образа</value> + + true + true + + true + + + СтатусРасширеннаяПодсказка + 87 + Label + true + true + + Left + + + + СтатусКонтекстноеМеню + 86 + true + + Label + true + true + + Left + Center + + + + ПроцентВыполнения + 88 + true + true + + true + + + ПроцентВыполнения + + None + + ПроцентВыполненияРасширеннаяПодсказка + 90 + Label + true + true + + Left + + + + ПроцентВыполненияКонтекстноеМеню + 89 + true + + ProgressBarField + Enter + true + Left + true + + 32 + true + 1 + true + true + 100 + true + + + + ДопИнформацияВыполнениеЗагрузка + 91 + true + true + + true + + + ДопИнформацияВыполнение + + None + + ДопИнформацияВыполнениеЗагрузкаРасширеннаяПодсказка + 93 + Label + true + true + + Left + + + + ДопИнформацияВыполнениеЗагрузкаКонтекстноеМеню + 92 + true + + LabelField + Enter + true + Left + true + + true + true + + true true true - - ПутьКАрхивуСФайламиТомовWindows - - Top + + <key>ru</key> + <value>Ожидание синхронизации данных</value> + + + ru + Ожидание синхронизации данных + - ПутьКАрхивуСФайламиТомовExtendedTooltip - 72 + ОжиданиеСозданияНачальногоОбразаРасширеннаяПодсказка + 84 Label true true @@ -987,50 +1299,66 @@ Left - - ПутьКАрхивуСФайламиТомовКонтекстноеМеню - 34 - true - - InputField - Enter - true - Left - true - - - StartChoice - ПутьКАрхивуСФайламиТомовНачалоВыбора - - true - true - true - true - true - true - true - Normal + Page + + Vertical + auto - - ПутьКАрхивуСФайламиТомовLinux - 41 - - <key>ru</key> - <value>Для сервера 1С:Предприятия под управлением Linux</value> - + + Результат + 94 + + СтатусГотово + 96 + + <key>ru</key> + <value>Создание начального образа успешно завершено</value> + + true + true + + true + + + СтатусГотовоРасширеннаяПодсказка + 98 + Label + true + true + + Left + + + + СтатусГотовоКонтекстноеМеню + 97 + true + + Label + true + true + + Left + Center + + true true true - - ПутьКАрхивуСФайламиТомовLinux - - Top + + <key>ru</key> + <value>Результат</value> + + + ru + Результат + - ПутьКАрхивуСФайламиТомовLinuxExtendedTooltip - 73 + РезультатРасширеннаяПодсказка + 95 Label true true @@ -1038,24 +1366,10 @@ Left - - ПутьКАрхивуСФайламиТомовLinuxКонтекстноеМеню - 42 - true - - InputField - Enter - true - Left - true - - true - true - true - true - true - true - Normal + Page + + Vertical + auto true @@ -1065,15 +1379,15 @@ <key>ru</key> - <value>Полное имя архива с файлами томов</value> + <value>Страницы формы</value> ru - Группа путь к архиву с файлами томов + Страницы формы - ГруппаПутьКАрхивуСФайламиТомовExtendedTooltip - 71 + СтраницыФормыРасширеннаяПодсказка + 80 Label true true @@ -1081,49 +1395,11 @@ Left - UsualGroup - - Vertical - Auto - WeakSeparation - true - true - auto - Auto + Pages + Auto - - ПанельДействий - 29 - true - true - - true - - - <key>ru</key> - <value>Панель действий</value> - - - ru - Панель действий - - - ПанельДействийExtendedTooltip - 74 - Label - true - true - - Left - - - CommandBar - - Right - - Bottom true @@ -1161,7 +1437,7 @@ 44 <key>ru</key> - <value>Отмена</value> + <value>Закрыть</value> true true @@ -1215,6 +1491,10 @@ Right + + OnOpen + ПриОткрытии + OnCreateAtServer ПриСозданииНаСервере @@ -1227,7 +1507,6 @@ true true true - UseIfNecessary auto true @@ -1557,6 +1836,149 @@ true + + ДлительнаяОперация + + <key>ru</key> + <value>Длительная операция</value> + + 19 + + Boolean + + + true + + + true + + + + ДлительнаяОперацияЗавершена + + <key>ru</key> + <value>Длительная операция завершена</value> + + 20 + + Boolean + + + true + + + true + + + + ДлительнаяОперацияЗавершенаСОшибкой + + <key>ru</key> + <value>Длительная операция завершена с ошибкой</value> + + 21 + + Boolean + + + true + + + true + + + + ДопИнформацияВыполнение + + <key>ru</key> + <value>Доп информация выполнение</value> + + 22 + + String + + 150 + + + + true + + + true + + + + ИдентификаторДлительнойОперации + + <key>ru</key> + <value>Идентификатор длительной операции</value> + + 23 + + String + + + + true + + + true + + + + ПроцентВыполнения + + <key>ru</key> + <value>Процент выполнения</value> + + 24 + + Number + + 3 + true + + + + true + + + true + + + + ФоновоеЗаданиеАдресХранилища + + <key>ru</key> + <value>Фоновое задание адрес хранилища</value> + + 25 + + String + + + + true + + + true + + + + ФоновоеЗаданиеИдентификатор + + <key>ru</key> + <value>Фоновое задание идентификатор</value> + + 26 + + + true + + + true + + СоздатьНачальныйОбраз @@ -1576,7 +1998,7 @@ <name>СоздатьНачальныйОбраз</name> </handler> </action> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <commandInterface> diff --git a/SSL/src/CommonForms/СозданиеНачальногоОбразаСФайлами/Help/ru.html b/SSL/src/CommonForms/СозданиеНачальногоОбразаСФайлами/Help/ru.html index 3ca8abe90..86ea2ea1b 100644 --- a/SSL/src/CommonForms/СозданиеНачальногоОбразаСФайлами/Help/ru.html +++ b/SSL/src/CommonForms/СозданиеНачальногоОбразаСФайлами/Help/ru.html @@ -1,6 +1,6 @@ <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"><html><head><meta content="text/html; charset=utf-8" http-equiv="Content-Type"></meta><link rel="stylesheet" type="text/css" href="v8help://service_book/service_style"></link><meta name="GENERATOR" content="MSHTML 9.00.8112.16421"></meta></head><body> <p style="MARGIN-RIGHT: 0px" dir="ltr">Предназначена для указания параметров файловой или клиент-серверной базы при создании начального образа РИБ. При настройке синхронизации РИБ (внешние файлы) необходимо указать, где будет создан начальный образ РИБ. Если файлы хранятся в <a href="Catalog.ТомаХраненияФайлов/Help">томах</a>, также потребуется указать путь к файлу, в который будет записан архив (.zip) со всеми файлами в томах. </p> -<p style="MARGIN-RIGHT: 0px" dir="ltr">Открывается по команде <img src="StdPicture.CreateInitialImage" width="16" height="16"></img> <strong>Создать начальный образ </strong>из <a href="DataProcessor.ПомощникСозданияОбменаДанными/Help">Помощника создания синхронизации данных</a> при настройке синхронизации РИБ (внешние файлы). Также можно в списке <a href="CommonForm.ОбменыДанными/Help">Синхронизация данных</a> с помощью кнопки <img src="StdPicture.Change"></img> открыть настройку синхронизации РИБ (внешние файлы), нажать кнопку  <img src="StdPicture.CreateInitialImage"></img> <strong>Создание начального образа подчиненного узла распределенной информационной базы</strong>.</p> +<p style="MARGIN-RIGHT: 0px" dir="ltr">Открывается по команде <img src="StdPicture.CreateInitialImage" width="16" height="16"></img> <strong>Создать начальный образ </strong>из <a href="DataProcessor.ПомощникСозданияОбменаДанными/Help">Помощника создания синхронизации данных</a> при настройке синхронизации РИБ (внешние файлы). Также можно в списке <a href="CommonForm.СинхронизацияДанных/Help">Синхронизация данных</a> с помощью кнопки <img src="StdPicture.Change"></img> открыть настройку синхронизации РИБ (внешние файлы), нажать кнопку  <img src="StdPicture.CreateInitialImage"></img> <strong>Создание начального образа подчиненного узла распределенной информационной базы</strong>.</p> <h3 style="MARGIN-RIGHT: 0px" dir="ltr">Параметры информационной базы</h3> <p style="MARGIN-RIGHT: 0px" dir="ltr">Укажите с помощью переключателя, где будет создаваться начальный образ информационной базы: </p> <ul style="MARGIN-RIGHT: 0px" dir="ltr"><li> diff --git a/SSL/src/CommonForms/СозданиеНачальногоОбразаСФайлами/Module.bsl b/SSL/src/CommonForms/СозданиеНачальногоОбразаСФайлами/Module.bsl index 35e41dca0..9b3f13ef6 100644 --- a/SSL/src/CommonForms/СозданиеНачальногоОбразаСФайлами/Module.bsl +++ b/SSL/src/CommonForms/СозданиеНачальногоОбразаСФайлами/Module.bsl @@ -66,6 +66,12 @@ КонецПроцедуры +&НаКлиенте +Процедура ПриОткрытии(Отказ) + Элементы.СтраницыФормы.ТекущаяСтраница = Элементы.ИсходныеДанные; + Элементы.СоздатьНачальныйОбраз.Видимость = Истина; +КонецПроцедуры + #КонецОбласти #Область ОбработчикиСобытийЭлементовШапкиФормы @@ -117,47 +123,21 @@ Процедура СоздатьНачальныйОбраз(Команда) ОчиститьСообщения(); - - Состояние( - НСтр("ru = 'Синхронизация данных'"), - , - НСтр("ru = 'Осуществляется создание начального образа...'"), - БиблиотекаКартинок.СоздатьНачальныйОбраз); - - Если ВидБазы = 0 Тогда - - Если НЕ МожноСоздатьФайловуюБазу Тогда - ВызватьИсключение - НСтр("ru = 'Создание начального образа файловой информационной базы - |на данной платформе не поддерживается.'"); - КонецЕсли; - - Если Не СоздатьФайловыйНачальныйОбразНаСервере() Тогда - Состояние(); - Возврат; - КонецЕсли; - - Иначе - Если Не СоздатьСерверныйНачальныйОбразНаСервере() Тогда - Состояние(); - Возврат; - КонецЕсли; + Если ВидБазы = 0 И НЕ МожноСоздатьФайловуюБазу Тогда + ВызватьИсключение + НСтр("ru = 'Создание начального образа файловой информационной базы + |на данной платформе не поддерживается.'"); КонецЕсли; - - Обработчик = Новый ОписаниеОповещения("СоздатьНачальныйОбразЗавершение", ЭтотОбъект); - ПоказатьПредупреждение(Обработчик, НСтр("ru = 'Создание начального образа успешно завершено.'")); + ПроцентВыполнения = 0; + ДопИнформацияВыполнение = ""; + ПодключитьОбработчикОжидания("ЗапуститьСозданиеНачальногоОбраза", 1, Истина); КонецПроцедуры #КонецОбласти #Область СлужебныеПроцедурыИФункции -&НаКлиенте -Процедура СоздатьНачальныйОбразЗавершение(ПараметрыВыполнения) Экспорт - Закрыть(); -КонецПроцедуры - &НаКлиенте Процедура ОбработчикСохраненияФайла(ИмяСвойства, СтандартнаяОбработка, @@ -216,24 +196,62 @@ КонецПроцедуры -&НаСервере -Функция СоздатьФайловыйНачальныйОбразНаСервере() +&НаКлиенте +Процедура ЗапуститьСозданиеНачальногоОбраза() + ФоновоеЗаданиеЗапуститьНаКлиенте(ВидБазы); +КонецПроцедуры + +&НаКлиенте +Процедура ФоновоеЗаданиеЗапуститьНаКлиенте(Действие) - Возврат ФайловыеФункцииСлужебный.СоздатьФайловыйНачальныйОбразНаСервере( - Узел, - УникальныйИдентификатор, - Язык, - ПолноеИмяФайловойБазыWindows, - ПолноеИмяФайловойБазыLinux, - ПутьКАрхивуСФайламиТомовWindows, - ПутьКАрхивуСФайламиТомовLinux); - -КонецФункции + Результат = ФоновоеЗаданиеЗапустить(Действие); + Если Результат.ФоновоеЗаданиеЗапущено Тогда + ПерейтиКСтраницеОжидания(); + ПодключитьОбработчикОжидания("ФоновоеЗаданиеПроверитьНаКлиенте", 2, Истина); + ИначеЕсли Результат.Отказ Тогда + // Ошибка, фоновое задание не запустилось. + Возврат; + Иначе + // Фоновое задание выполнилось сразу же. + ПерейтиКСтраницеОжидания(); + ПроцентВыполнения = 100; + ДопИнформацияВыполнение = ""; + // Переход к странице с результатом с задержкой в 1 сек. + ПодключитьОбработчикОжидания("ЗапуститьПереходРезультат", 1, Истина); + КонецЕсли; +КонецПроцедуры + +&НаКлиенте +Процедура ПерейтиКСтраницеОжидания() + Элементы.СтраницыФормы.ТекущаяСтраница = Элементы.ОжиданиеСозданияНачальногоОбраза; + Элементы.СоздатьНачальныйОбраз.Видимость = Ложь; +КонецПроцедуры &НаСервере -Функция СоздатьСерверныйНачальныйОбразНаСервере() +Функция ФоновоеЗаданиеЗапустить(Знач Действие) + Результат = Новый Структура; + Результат.Вставить("ФоновоеЗаданиеЗапущено", Ложь); + Результат.Вставить("Отказ", Ложь); - СтрокаСоединения = + ПараметрыЗадания = Новый Структура; + ПараметрыЗадания.Вставить("Узел", Узел); + ПараметрыЗадания.Вставить("ПутьКАрхивуСФайламиТомовWindows", ПутьКАрхивуСФайламиТомовWindows); + ПараметрыЗадания.Вставить("ПутьКАрхивуСФайламиТомовLinux", ПутьКАрхивуСФайламиТомовLinux); + + Если Действие = 0 Тогда + // Файловый начальный образ. + ПараметрыЗадания.Вставить("УникальныйИдентификаторФормы", УникальныйИдентификатор); + ПараметрыЗадания.Вставить("Язык", Язык); + ПараметрыЗадания.Вставить("ПолноеИмяФайловойБазыWindows", ПолноеИмяФайловойБазыWindows); + ПараметрыЗадания.Вставить("ПолноеИмяФайловойБазыLinux", ПолноеИмяФайловойБазыLinux); + НаименованиеЗадания = НСтр("ru = 'Создание файлового начального образа'"); + НаименованиеПроцедуры = "СоздатьФайловыйНачальныйОбразНаСервере"; + + // Функция обработки, проверки и подготовки параметров. + МожноЗапускатьЗадание = ФайловыеФункцииСлужебный.ПодготовитьДанныеДляСозданияФайловогоНачальногоОбраза(ПараметрыЗадания); + Иначе + // Серверный начальный образ. + СтрокаСоединения = "Srvr=""" + Сервер + """;" + "Ref=""" + ИмяБазы + """;" + "DBMS=""" + ТипСУБД + """;" @@ -244,10 +262,123 @@ + "SQLYOffs=""" + Формат(СмещениеДат, "ЧГ=") + """;" + "Locale=""" + Язык + """;" + "SchJobDn=""" + ?(УстановитьБлокировкуРегламентныхЗаданий, "Y", "N") + """;"; + + ПараметрыЗадания.Вставить("СтрокаСоединения", СтрокаСоединения); + НаименованиеЗадания = НСтр("ru = 'Создание серверного начального образа'"); + НаименованиеПроцедуры = "СоздатьСерверныйНачальныйОбразНаСервере"; + + // Функция обработки, проверки и подготовки параметров. + МожноЗапускатьЗадание = ФайловыеФункцииСлужебный.ПодготовитьДанныеДляСозданияСерверногоНачальногоОбраза(ПараметрыЗадания); + КонецЕсли; + Если МожноЗапускатьЗадание = Ложь Тогда + // Ошибка при инициализации параметров. + Результат.Отказ = Истина; + Возврат Результат; + КонецЕсли; - Возврат ФайловыеФункцииСлужебный.СоздатьСерверныйНачальныйОбразНаСервере( - Узел, СтрокаСоединения, ПутьКАрхивуСФайламиТомовWindows, ПутьКАрхивуСФайламиТомовLinux); + // Запуск фонового задания. + РезультатФоновогоЗадания = ДлительныеОперации.ЗапуститьВыполнениеВФоне( + УникальныйИдентификатор, + "ФайловыеФункцииСлужебный."+НаименованиеПроцедуры, + ПараметрыЗадания, + НаименованиеЗадания); + + ФоновоеЗаданиеИдентификатор = РезультатФоновогоЗадания.ИдентификаторЗадания; + ФоновоеЗаданиеАдресХранилища = РезультатФоновогоЗадания.АдресХранилища; + + Если РезультатФоновогоЗадания.ЗаданиеВыполнено Тогда + ФоновоеЗаданиеЗагрузитьРезультат(Результат); + Результат.ФоновоеЗаданиеЗапущено = Ложь; + Иначе + ФоновоеЗаданиеПрочитатьПромежуточныйРезультат(); + Результат.ФоновоеЗаданиеЗапущено = Истина; + КонецЕсли; + + Возврат Результат; КонецФункции +&НаКлиенте +Процедура ФоновоеЗаданиеПроверитьНаКлиенте() + Результат = ФоновоеЗаданиеПолучитьРезультат(); + Если Результат.ФоновоеЗаданиеВыполнено Тогда + ПроцентВыполнения = 100; + ДопИнформацияВыполнение = ""; + // Переход дальше с задержкой на 1 секунду. + ПодключитьОбработчикОжидания("ЗапуститьПереходРезультат", 1, Истина); + + Иначе + ПодключитьОбработчикОжидания("ФоновоеЗаданиеПроверитьНаКлиенте", 2, Истина); + КонецЕсли; +КонецПроцедуры + +&НаСервере +Процедура ФоновоеЗаданиеПрочитатьПромежуточныйРезультат() + Прогресс = ДлительныеОперации.ПрочитатьПрогресс(ФоновоеЗаданиеИдентификатор); + Если Прогресс <> Неопределено Тогда + ПроцентВыполнения = Прогресс.Процент; + ДопИнформацияВыполнение = Прогресс.Текст; + КонецЕсли; +КонецПроцедуры + +&НаСервере +Процедура ФоновоеЗаданиеЗагрузитьРезультат(Результат) + РезультатВыполненияВФоне = ПолучитьИзВременногоХранилища(ФоновоеЗаданиеАдресХранилища); + Если РезультатВыполненияВФоне = Неопределено Тогда + Возврат; + КонецЕсли; + УдалитьИзВременногоХранилища(ФоновоеЗаданиеАдресХранилища); + + ФоновоеЗаданиеАдресХранилища = Неопределено; + ФоновоеЗаданиеИдентификатор = Неопределено; +КонецПроцедуры + +&НаСервере +Функция ФоновоеЗаданиеПолучитьРезультат() + Результат = Новый Структура; + Результат.Вставить("ФоновоеЗаданиеВыполнено", Ложь); + Состояние = СостояниеЗадания(ФоновоеЗаданиеИдентификатор); + + Если Состояние = "Активно" Тогда + ФоновоеЗаданиеПрочитатьПромежуточныйРезультат(); + ИначеЕсли Состояние = "Завершено" + Или Состояние = "ЗавершеноАварийно" Тогда + Результат.ФоновоеЗаданиеВыполнено = Истина; + ФоновоеЗаданиеЗагрузитьРезультат(Результат); + КонецЕсли; + Возврат Результат; +КонецФункции + +// Возвращает состояние выполнения фонового задания. +// Используется для реализации логики длительных операций. +// +// Параметры: +// ИдентификаторЗадания - УникальныйИдентификатор - идентификатор фонового задания, для которого необходимо получить +// состояние. +// +// Возвращаемое значение: +// Строка - состояние выполнения фонового задания: +// "Активно" - задание выполняется; +// "Завершено" - задание выполнено успешно; +// "ЗавершеноАварийно" - задание завершено аварийно или отменено пользователем. +// +Функция СостояниеЗадания(Знач ИдентификаторЗадания) + + Попытка + Результат = ?(ДлительныеОперации.ЗаданиеВыполнено(ИдентификаторЗадания), "Завершено", "Активно"); + Исключение + Результат = "ЗавершеноАварийно"; + ЗаписьЖурналаРегистрации(НСтр("ru = 'Обмен данными'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), + УровеньЖурналаРегистрации.Ошибка,,, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); + КонецПопытки; + + Возврат Результат; +КонецФункции + +&НаКлиенте +Процедура ЗапуститьПереходРезультат() + Элементы.СтраницыФормы.ТекущаяСтраница = Элементы.Результат; + Элементы.СоздатьНачальныйОбраз.Видимость = Ложь; +КонецПроцедуры + #КонецОбласти diff --git a/SSL/src/CommonForms/СозданиеРезервнойКопии/Form.form b/SSL/src/CommonForms/СозданиеРезервнойКопии/Form.form index d5677f410..42c1c792d 100644 --- a/SSL/src/CommonForms/СозданиеРезервнойКопии/Form.form +++ b/SSL/src/CommonForms/СозданиеРезервнойКопии/Form.form @@ -461,7 +461,6 @@ <autoFillCheck>true</autoFillCheck> <allowFormCustomize>true</allowFormCustomize> <enabled>true</enabled> - <verticalScroll>UseIfNecessary</verticalScroll> <showTitle>auto</showTitle> <showCloseButton>true</showCloseButton> <attributes> @@ -532,7 +531,7 @@ <name>СоздатьКопиюОбласти</name> </handler> </action> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <commandInterface> diff --git a/SSL/src/CommonForms/СохранениеВместеСЭлектроннойПодписью/Form.form b/SSL/src/CommonForms/СохранениеВместеСЭлектроннойПодписью/Form.form index 0fbd1b8d6..25f025f63 100644 --- a/SSL/src/CommonForms/СохранениеВместеСЭлектроннойПодписью/Form.form +++ b/SSL/src/CommonForms/СохранениеВместеСЭлектроннойПодписью/Form.form @@ -539,7 +539,6 @@ <group>Vertical</group> <autoFillCheck>true</autoFillCheck> <enabled>true</enabled> - <verticalScroll>UseIfNecessary</verticalScroll> <showTitle>auto</showTitle> <showCloseButton>true</showCloseButton> <attributes> @@ -737,7 +736,7 @@ <name>ВыбратьПодпись</name> </handler> </action> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <parameters> diff --git a/SSL/src/CommonForms/СохранениеПечатнойФормы/Form.form b/SSL/src/CommonForms/СохранениеПечатнойФормы/Form.form index a2209b612..883fdf39a 100644 --- a/SSL/src/CommonForms/СохранениеПечатнойФормы/Form.form +++ b/SSL/src/CommonForms/СохранениеПечатнойФормы/Form.form @@ -713,7 +713,6 @@ <autoFillCheck>true</autoFillCheck> <allowFormCustomize>true</allowFormCustomize> <enabled>true</enabled> - <verticalScroll>UseIfNecessary</verticalScroll> <showTitle>auto</showTitle> <showCloseButton>true</showCloseButton> <attributes> @@ -841,7 +840,7 @@ <name>Сохранить</name> </handler> </action> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <parameters> diff --git a/SSL/src/CommonForms/СтруктураПодчиненности/Form.form b/SSL/src/CommonForms/СтруктураПодчиненности/Form.form index 9081d6b02..b965fc366 100644 --- a/SSL/src/CommonForms/СтруктураПодчиненности/Form.form +++ b/SSL/src/CommonForms/СтруктураПодчиненности/Form.form @@ -473,7 +473,7 @@ <name>Обновить</name> </handler> </action> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <formCommands> @@ -495,7 +495,7 @@ <name>ВывестиДляТекущего</name> </handler> </action> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <commandInterface> diff --git a/SSL/src/CommonForms/СтруктураПодчиненности/Module.bsl b/SSL/src/CommonForms/СтруктураПодчиненности/Module.bsl index fb5454233..856c7ef1c 100644 --- a/SSL/src/CommonForms/СтруктураПодчиненности/Module.bsl +++ b/SSL/src/CommonForms/СтруктураПодчиненности/Module.bsl @@ -628,8 +628,10 @@ Если Метаданные.КритерииОтбора.СвязанныеДокументы.Тип.СодержитТип(ТипЗнч(ЗначениеКритерияОтбора)) Тогда + УстановитьПривилегированныйРежим(Истина); + Запрос = Новый Запрос; - Запрос.Текст = "ВЫБРАТЬ РАЗРЕШЕННЫЕ + Запрос.Текст = "ВЫБРАТЬ | СвязанныеДокументы.Ссылка |ИЗ | КритерийОтбора.СвязанныеДокументы(&ЗначениеКритерияОтбора) КАК СвязанныеДокументы"; diff --git a/SSL/src/CommonForms/УстановкаВедущейКонечнойТочки/Form.form b/SSL/src/CommonForms/УстановкаВедущейКонечнойТочки/Form.form index 57950281b..a6415bf74 100644 --- a/SSL/src/CommonForms/УстановкаВедущейКонечнойТочки/Form.form +++ b/SSL/src/CommonForms/УстановкаВедущейКонечнойТочки/Form.form @@ -245,7 +245,6 @@ <autoFillCheck>true</autoFillCheck> <allowFormCustomize>true</allowFormCustomize> <enabled>true</enabled> - <verticalScroll>UseIfNecessary</verticalScroll> <showTitle>auto</showTitle> <showCloseButton>true</showCloseButton> <attributes> @@ -378,7 +377,7 @@ <name>Установить</name> </handler> </action> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <commandInterface> diff --git a/SSL/src/CommonForms/УстановкаВедущейКонечнойТочки/Module.bsl b/SSL/src/CommonForms/УстановкаВедущейКонечнойТочки/Module.bsl index 50bc73522..ee6308fdc 100644 --- a/SSL/src/CommonForms/УстановкаВедущейКонечнойТочки/Module.bsl +++ b/SSL/src/CommonForms/УстановкаВедущейКонечнойТочки/Module.bsl @@ -15,8 +15,7 @@ // Зачитываем значения настроек подключения. ЗаполнитьЗначенияСвойств(ЭтотОбъект, РегистрыСведений.НастройкиТранспортаОбмена.НастройкиТранспортаWS(КонечнаяТочка)); - Заголовок = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Установка ведущей конечной точки для ""%1""'"), + Заголовок = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Установка ведущей конечной точки для ""%1""'"), ОбщегоНазначения.ЗначениеРеквизитаОбъекта(КонечнаяТочка, "Наименование")); КонецПроцедуры diff --git a/SSL/src/CommonForms/УстановленныеРасширения/Form.form b/SSL/src/CommonForms/УстановленныеРасширения/Form.form new file mode 100644 index 000000000..3200d398a --- /dev/null +++ b/SSL/src/CommonForms/УстановленныеРасширения/Form.form @@ -0,0 +1,1539 @@ +<?xml version="1.0" encoding="UTF-8"?> +<form:Form xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:core="http://g5.1c.ru/v8/dt/mcore" xmlns:form="http://g5.1c.ru/v8/dt/form"> + <items xsi:type="form:FormGroup"> + <name>СтраницыОбновление</name> + <id>101</id> + <items xsi:type="form:FormGroup"> + <name>СтраницаСписокРасширений</name> + <id>108</id> + <items xsi:type="form:FormGroup"> + <name>ГруппаПредупреждение</name> + <id>78</id> + <items xsi:type="form:Decoration"> + <name>ПредупреждениеКартинка</name> + <id>80</id> + <title> + <key>ru</key> + <value>Предупреждение картинка</value> + + true + true + + true + + + ПредупреждениеКартинкаРасширеннаяПодсказка + 82 + Label + true + true + + Left + + + + ПредупреждениеКартинкаКонтекстноеМеню + 81 + true + + 6 + true + 2 + true + + + CommonPicture.Предупреждение32 + + + + + ГруппаПредупреждениеОписание + 88 + + ПредупреждениеОписание + 83 + + <key>ru</key> + <value>Чтобы продолжить работу с учетом сделанных изменений, необходимо перезапустить сеанс.</value> + + true + true + + true + + + ПредупреждениеОписаниеРасширеннаяПодсказка + 85 + Label + true + true + + Left + + + + ПредупреждениеОписаниеКонтекстноеМеню + 84 + true + + Label + true + true + + Left + + + + ПерезапуститьПрограмму + 86 + + <key>ru</key> + <value>Перезапустить</value> + + true + true + + true + + + ПерезапуститьПрограммуРасширеннаяПодсказка + 87 + Label + true + true + + Left + + + UsualButton + Form.Command.ПерезапуститьПрограмму + Normal + Auto + true + true + UserCmds + Auto + + true + true + + true + + + <key>ru</key> + <value>Группа предупреждение описание</value> + + + ГруппаПредупреждениеОписаниеРасширеннаяПодсказка + 89 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + true + true + Auto + Auto + + + true + true + + true + + + <key>ru</key> + <value>Группа предупреждение</value> + + + ru + Группа предупреждение + + + ГруппаПредупреждениеРасширеннаяПодсказка + 79 + Label + true + true + + Left + + + UsualGroup + + Auto + true + true + Auto + Auto + + + + ГруппаИнформация + 121 + + ИнформацияКартинка + 123 + + <key>ru</key> + <value>Информация картинка</value> + + true + true + + true + + + ИнформацияКартинкаРасширеннаяПодсказка + 125 + Label + true + true + + Left + + + + ИнформацияКартинкаКонтекстноеМеню + 124 + true + + 6 + true + 2 + true + + + CommonPicture.Информация32 + + + + + ГруппаИнформацияОписание + 126 + + ИнформацияОписание + 128 + + <key>ru</key> + <value>Изменения вступят в силу для всех пользователей области данных при следующем входе в программу.</value> + + true + true + + true + + + ИнформацияОписаниеРасширеннаяПодсказка + 130 + Label + true + true + + Left + + + + ИнформацияОписаниеКонтекстноеМеню + 129 + true + + Label + true + true + + Left + Center + 2 + + + true + true + + true + + + <key>ru</key> + <value>Группа информация описание</value> + + + ГруппаИнформацияОписаниеРасширеннаяПодсказка + 127 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + true + true + Auto + Auto + + + true + true + + true + + + <key>ru</key> + <value>Группа информация</value> + + + ГруппаИнформацияРасширеннаяПодсказка + 122 + Label + true + true + + Left + + + UsualGroup + + Auto + true + true + Auto + Auto + + + + СписокРасширений + 19 + true + true + + true + + + СписокРасширений + + None + CancelSearch + Change + Copy + CopyToClipboard + EndEdit + Find + MoveDown + MoveUp + OutputList + ShowRowRearrangement + SortListAsc + SortListDesc + + СписокРасширенийСиноним + 53 + + <key>ru</key> + <value>Наименование</value> + + true + true + + true + + + СписокРасширений.Синоним + + + СписокРасширенийСинонимРасширеннаяПодсказка + 55 + Label + true + true + + Left + + + + СписокРасширенийСинонимКонтекстноеМеню + 54 + true + + InputField + true + Auto + true + Left + true + + 50 + true + true + true + true + true + true + Normal + + + + СписокРасширенийВерсия + 38 + true + true + + true + + + СписокРасширений.Версия + + + СписокРасширенийВерсияРасширеннаяПодсказка + 40 + Label + true + true + + Left + + + + СписокРасширенийВерсияКонтекстноеМеню + 39 + true + + InputField + true + Auto + true + Left + true + + 10 + true + true + true + true + true + true + Normal + + + + СписокРасширенийКонтрольнаяСумма + 98 + true + true + + + СписокРасширений.КонтрольнаяСумма + + + СписокРасширенийКонтрольнаяСуммаРасширеннаяПодсказка + 100 + Label + true + true + + Left + + + + СписокРасширенийКонтрольнаяСуммаКонтекстноеМеню + 99 + true + + InputField + true + Auto + true + Left + true + + true + true + true + true + true + true + Normal + + + + СписокРасширенийБезопасныйРежимФлаг + 50 + true + true + + true + + + СписокРасширений.БезопасныйРежимФлаг + + + СписокРасширенийБезопасныйРежимФлагРасширеннаяПодсказка + 52 + Label + true + true + + Left + + + + СписокРасширенийБезопасныйРежимФлагКонтекстноеМеню + 51 + true + + CheckBoxField + Auto + true + Left + true + + + None + + СписокРасширенийКоманднаяПанель + 21 + Left + true + + + OnEditEnd + СписокРасширенийПриОкончанииРедактирования + + + BeforeAddRow + СписокРасширенийПередНачаломДобавления + + + BeforeDeleteRow + СписокРасширенийПередУдалением + + + OnActivateRow + СписокРасширенийПриАктивизацииСтроки + + + СписокРасширенийСтрокаПоиска + 23 + + СписокРасширенийСтрокаПоискаРасширеннаяПодсказка + 25 + Label + true + true + + Left + + + + СписокРасширенийСтрокаПоискаКонтекстноеМеню + 24 + true + + СписокРасширений + + true + + + + СписокРасширенийСостояниеПросмотра + 26 + + СписокРасширенийСостояниеПросмотраРасширеннаяПодсказка + 28 + Label + true + true + + Left + + + + СписокРасширенийСостояниеПросмотраКонтекстноеМеню + 27 + true + + ViewStatusAddition + СписокРасширений + + true + + + + СписокРасширенийУправлениеПоиском + 29 + + СписокРасширенийУправлениеПоискомРасширеннаяПодсказка + 31 + Label + true + true + + Left + + + + СписокРасширенийУправлениеПоискомКонтекстноеМеню + 30 + true + + SearchControlAddition + СписокРасширений + + true + + + + СписокРасширенийРасширеннаяПодсказка + 22 + Label + true + true + + Left + + + + СписокРасширенийКонтекстноеМеню + 20 + + СписокРасширенийКонтекстноеМенюДобавить + 113 + true + true + + true + + + СписокРасширенийКонтекстноеМенюДобавитьРасширеннаяПодсказка + 114 + Label + true + true + + Left + + + Form.Item.СписокРасширений.StandardCommand.Add + Normal + Auto + true + true + UserCmds + Auto + + + СписокРасширенийКонтекстноеМенюУдалить + 115 + true + true + + true + + + СписокРасширенийКонтекстноеМенюУдалитьРасширеннаяПодсказка + 116 + Label + true + true + + Left + + + Form.Item.СписокРасширений.StandardCommand.Delete + Normal + Auto + true + true + UserCmds + Auto + + + СписокРасширенийКонтекстноеМенюГруппа + 119 + + СписокРасширенийКонтекстноеМенюВыделитьВсе + 117 + true + true + + true + + + СписокРасширенийКонтекстноеМенюВыделитьВсеРасширеннаяПодсказка + 118 + Label + true + true + + Left + + + Form.Item.СписокРасширений.StandardCommand.SelectAll + Normal + Auto + true + true + UserCmds + Auto + + true + true + + true + + + <key>ru</key> + <value>Список расширений контекстное меню группа</value> + + + СписокРасширенийКонтекстноеМенюГруппаРасширеннаяПодсказка + 120 + Label + true + true + + Left + + + + + + СписокРасширенийКонтекстноеМенюОбновитьИзФайлаНаДиске + 64 + true + true + + true + + + СписокРасширенийКонтекстноеМенюОбновитьИзФайлаНаДискеРасширеннаяПодсказка + 65 + Label + true + true + + Left + + + Form.Command.ОбновитьИзФайлаНаДиске + Normal + Auto + true + true + UserCmds + Auto + + + СписокРасширенийКонтекстноеМенюСохранитьКак + 66 + true + true + + true + + + СписокРасширенийКонтекстноеМенюСохранитьКакРасширеннаяПодсказка + 67 + Label + true + true + + Left + + + Form.Command.СохранитьКак + Normal + Auto + true + true + UserCmds + Auto + + + true + true + true + true + true + MultiRow +
              true
              + 1 + 1 + AutoUse + AutoUse + true + true + true + Auto + Auto + true + true + true + true + + CommonPicture.ПиктограммыЭлементов + + true + +
              + true + true + + true + + + <key>ru</key> + <value>Страница список расширений</value> + + + СтраницаСписокРасширенийРасширеннаяПодсказка + 109 + Label + true + true + + Left + + + Page + + Vertical + auto + + + + СтраницаДлительнаяОперация + 103 + + ДлительнаяОперация + 105 + true + true + + true + + + ДлительнаяОперацияРасширеннаяПодсказка + 107 + Label + true + true + + Left + + + + ДлительнаяОперацияКонтекстноеМеню + 106 + true + + 5 + true + 3 + true + + + CommonPicture.ДлительнаяОперация48 + + + + + ДлительнаяОперацияНадпись + 110 + + <key>ru</key> + <value>Выполняется подготовка расширений к использованию. Пожалуйста, подождите...</value> + + true + true + + true + + + ДлительнаяОперацияНадписьРасширеннаяПодсказка + 112 + Label + true + true + + Left + + + + ДлительнаяОперацияНадписьКонтекстноеМеню + 111 + true + + Label + true + 3 + true + + Left + Center + + + true + true + + true + + + СтраницаДлительнаяОперацияРасширеннаяПодсказка + 104 + Label + true + true + + Left + + + Page + + auto + + + true + true + + true + + + <key>ru</key> + <value>Страницы обновление</value> + + + СтраницыОбновлениеРасширеннаяПодсказка + 102 + Label + true + true + + Left + + + Pages + + Auto + + + Top + true + + ФормаКоманднаяПанель + -1 + + СписокРасширенийДобавить + 58 + true + true + + true + + + СписокРасширенийДобавитьРасширеннаяПодсказка + 59 + Label + true + true + + Left + + + Form.Item.СписокРасширений.StandardCommand.Add + Normal + Auto + true + true + UserCmds + Auto + + + СписокРасширенийУдалить + 60 + true + true + + true + + + СписокРасширенийУдалитьРасширеннаяПодсказка + 61 + Label + true + true + + Left + + + Form.Item.СписокРасширений.StandardCommand.Delete + Normal + Auto + true + true + UserCmds + Auto + InCommandBarAndInAdditionalSubmenu + + + КнопкиСписка + 56 + + СписокРасширенийОбновитьИСохранить + 96 + + СписокРасширенийОбновитьИзФайлаНаДиске + 92 + true + true + + true + + + СписокРасширенийОбновитьИзФайлаНаДискеРасширеннаяПодсказка + 93 + Label + true + true + + Left + + + Form.Command.ОбновитьИзФайлаНаДиске + Normal + Auto + true + true + UserCmds + Auto + InAdditionalSubmenu + + + СписокРасширенийСохранитьКак + 94 + true + true + + true + + + СписокРасширенийСохранитьКакРасширеннаяПодсказка + 95 + Label + true + true + + Left + + + Form.Command.СохранитьКак + Normal + Auto + true + true + UserCmds + Auto + InAdditionalSubmenu + + true + true + + true + + + <key>ru</key> + <value>Список расширений обновить и сохранить</value> + + + ru + Список расширений обновить и сохранить + + + СписокРасширенийОбновитьИСохранитьРасширеннаяПодсказка + 97 + Label + true + true + + Left + + + + + + СписокРасширенийОбновить + 68 + true + true + + true + + + СписокРасширенийОбновитьРасширеннаяПодсказка + 69 + Label + true + true + + Left + + + Form.Command.Обновить + Normal + true + true + UserCmds + Auto + InAdditionalSubmenu + + + СписокРасширенийПерезапуститьПрограмму + 70 + true + true + + true + + + СписокРасширенийПерезапуститьПрограммуРасширеннаяПодсказка + 71 + Label + true + true + + Left + + + Form.Command.ПерезапуститьПрограмму + Normal + Auto + true + true + UserCmds + Auto + InAdditionalSubmenu + + true + true + + true + + + <key>ru</key> + <value>Кнопки списка</value> + + + КнопкиСпискаРасширеннаяПодсказка + 57 + Label + true + true + + Left + + + + Item.СписокРасширений + + + + ФормаУдалитьКэшиРасширений + 131 + true + true + + + ФормаУдалитьКэшиРасширенийРасширеннаяПодсказка + 132 + Label + true + true + + Left + + + Form.Command.УдалитьУстаревшиеКэшиРасширений + Normal + Auto + true + true + UserCmds + Auto + InAdditionalSubmenu + + + ФормаСправка + 74 + true + true + + true + + + ФормаСправкаРасширеннаяПодсказка + 75 + Label + true + true + + Left + + + Form.StandardCommand.Help + Normal + Auto + true + true + UserCmds + Auto + InCommandBarAndInAdditionalSubmenu + + Left + true + + + OnCreateAtServer + ПриСозданииНаСервере + + 80 + DontBlock + true + true + true + Vertical + true + true + true + auto + true + + СписокРасширений + + <key>ru</key> + <value>Список расширений</value> + + 2 + + ValueTable + + + true + + + true + + true + + ИдентификаторРасширения + + <key>ru</key> + <value>Идентификатор расширения</value> + + 1 + + String + + 36 + true + + + + true + + + true + + + + Имя + + <key>ru</key> + <value>Имя</value> + + 2 + + String + + + + true + + + true + + + + Версия + + <key>ru</key> + <value>Версия</value> + + 3 + + String + + + + true + + + true + + + + БезопасныйРежим + + <key>ru</key> + <value>Безопасный режим</value> + + 4 + + Boolean + String + + + + true + + + true + + + + КонтрольнаяСумма + + <key>ru</key> + <value>Контрольная сумма</value> + + 6 + + String + + + + true + + + true + + + + БезопасныйРежимФлаг + + <key>ru</key> + <value>Безопасный режим</value> + + 7 + + Boolean + + + true + + + true + + + + Синоним + + <key>ru</key> + <value>Синоним</value> + + 8 + + String + + + + true + + + true + + + + + РасширенияИзменены + + <key>ru</key> + <value>Расширения изменены</value> + + 1 + + Boolean + + + true + + + true + + + + ИдентификаторТекущейСтроки + + <key>ru</key> + <value>Идентификатор текущей строки</value> + + 3 + + + true + + + true + + + + УстановленныеРасширенияНедоступны + + <key>ru</key> + <value>Установленные расширения недоступны</value> + + 4 + + Boolean + + + true + + + true + + + + ОбновитьИзФайлаНаДиске + + <key>ru</key> + <value>Обновить из файла на диске...</value> + + 1 + + ru + Обновить из файла на диске + + + true + + + CommonPicture.ОбновитьФайлИзФайлаНаДиске + + + + ОбновитьИзФайлаНаДиске + + + DontUse + Auto + + + СохранитьКак + + <key>ru</key> + <value>Сохранить как...</value> + + 2 + + ru + Сохранить как + + + true + + + CommonPicture.СохранитьФайлКак + + + + СохранитьКак + + + DontUse + Auto + + + Обновить + + <key>ru</key> + <value>Обновить</value> + + 3 + + ru + Обновить + + + true + + F5 + + StdPicture.Refresh + + + + Обновить + + + DontUse + Auto + + + ПерезапуститьПрограмму + + <key>ru</key> + <value>Перезапустить программу</value> + + 4 + + ru + Перезапустить программу + + + true + + + + ПерезапуститьПрограмму + + + DontUse + Auto + + + УдалитьУстаревшиеКэшиРасширений + + <key>ru</key> + <value>Удалить устаревшие кэши расширений</value> + + 5 + + ru + Удалить устаревшие версии параметров работы расширений + + + true + + + + УдалитьУстаревшиеКэшиРасширений + + + DontUse + Auto + + + + + + diff --git a/SSL/src/CommonForms/УстановленныеРасширения/Help/ru.html b/SSL/src/CommonForms/УстановленныеРасширения/Help/ru.html new file mode 100644 index 000000000..b15d6ad3d --- /dev/null +++ b/SSL/src/CommonForms/УстановленныеРасширения/Help/ru.html @@ -0,0 +1,28 @@ + +

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

              +

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

              +

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

              +

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

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

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

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

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

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

              Перезапуск программы

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

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

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

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

              +
              • +
                Выделите расширение, нажмите Еще - Обновить из файла на диске, укажите путь к файлу на компьютере.
                +
              • +
                Следует использовать эту команду для установки новой версии расширения.
                +
              • +
                Также нужно использовать эту возможность для возврата к предыдущей версии, если новая версия содержит ошибку (однако не рекомендуется устанавливать расширение меньшей версии, т.к. это может привести к потере сделанных настроек).
              \ 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..f6cc3694d --- /dev/null +++ b/SSL/src/CommonForms/УстановленныеРасширения/Module.bsl @@ -0,0 +1,780 @@ +&НаКлиенте +Перем ТекущийКонтекст; + +#Область ОбработчикиСобытийФормы + +&НаСервере +Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) + + ПроверитьДоступностьРазделенныхДанных(); + + Если Не Пользователи.ЭтоПолноправныйПользователь() Тогда + ВызватьИсключение НСтр("ru = 'Недостаточно прав доступа. Обратитесь к администратору.'"); + КонецЕсли; + + Если Не ПравоДоступа("Администрирование", Метаданные) Тогда + Элементы.СписокРасширенийБезопасныйРежимФлаг.ТолькоПросмотр = Истина; + КонецЕсли; + + Если СтандартныеПодсистемыСервер.ЭтоБазоваяВерсияКонфигурации() Тогда + ВызватьИсключение НСтр("ru = 'Расширения недоступны в базовой версии программы.'"); + КонецЕсли; + + Если Не ПравоДоступа("АдминистрированиеРасширенийКонфигурации", Метаданные) Тогда + Элементы.СписокРасширенийОбновить.ТолькоВоВсехДействиях = Ложь; + Элементы.СписокРасширений.ТолькоПросмотр = Истина; + Элементы.СписокРасширенийДобавить.Видимость = Ложь; + Элементы.СписокРасширенийУдалить.Видимость = Ложь; + Элементы.СписокРасширенийОбновитьИзФайлаНаДиске.Видимость = Ложь; + Элементы.СписокРасширенийСохранитьКак.Видимость = Ложь; + Элементы.СписокРасширенийКонтекстноеМенюДобавить.Видимость = Ложь; + Элементы.СписокРасширенийКонтекстноеМенюУдалить.Видимость = Ложь; + Элементы.СписокРасширенийКонтекстноеМенюОбновитьИзФайлаНаДиске.Видимость = Ложь; + Элементы.СписокРасширенийКонтекстноеМенюСохранитьКак.Видимость = Ложь; + КонецЕсли; + + ОбновитьСписок(); + + УстановленныеРасширенияНедоступны = + СтандартныеПодсистемыСервер.УстановленныеРасширенияНедоступны(); + +КонецПроцедуры + +#КонецОбласти + +#Область ОбработчикиКомандФормы + +&НаКлиенте +Процедура Обновить(Команда) + + ОбновитьСписок(); + +КонецПроцедуры + +&НаКлиенте +Процедура СохранитьКак(Команда) + + ТекущееРасширение = Элементы.СписокРасширений.ТекущиеДанные; + + Если ТекущееРасширение = Неопределено Тогда + Возврат; + КонецЕсли; + + Адрес = СохранитьНаСервере(ТекущееРасширение.ИдентификаторРасширения); + + Если Адрес = Неопределено Тогда + Возврат; + КонецЕсли; + + Контекст = Новый Структура; + Контекст.Вставить("Адрес", Адрес); + Контекст.Вставить("НачальноеИмяФайла", ТекущееРасширение.Имя + + "_" + ТекущееРасширение.Версия + ".cfe"); + + ОбщегоНазначенияКлиент.ПоказатьВопросОбУстановкеРасширенияРаботыСФайлами( + Новый ОписаниеОповещения("СохранитьКакПослеУстановкиРасширения", ЭтотОбъект, Контекст)); + +КонецПроцедуры + +&НаКлиенте +Процедура СохранитьКакПослеУстановкиРасширения(РасширениеПодключено, Контекст) Экспорт + + Если РасширениеПодключено Тогда + ПолучаемыеФайлы = Новый Массив; + ПолучаемыеФайлы.Добавить(Новый ОписаниеПередаваемогоФайла( + Контекст.НачальноеИмяФайла, Контекст.Адрес)); + + Диалог = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Сохранение); + Диалог.Заголовок = НСтр("ru = 'Выберите файл для сохранения расширения конфигурации'"); + Диалог.Фильтр = НСтр("ru = 'Файлы расширений конфигурации (*.cfe)|*.cfe|Все файлы (*.*)|*.*'"); + Диалог.МножественныйВыбор = Ложь; + + НачатьПолучениеФайлов(Новый ОписаниеОповещения("СохранитьКакПослеПолученияФайлов", ЭтотОбъект, Контекст), + ПолучаемыеФайлы, Диалог); + Иначе + ПолучитьФайл(Контекст.Адрес, Контекст.НачальноеИмяФайла); + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура СохранитьКакПослеПолученияФайлов(ПолученныеФайлы, Контекст) Экспорт + + Возврат; + +КонецПроцедуры + +&НаКлиенте +Процедура ОбновитьИзФайлаНаДиске(Команда) + + ТекущееРасширение = Элементы.СписокРасширений.ТекущиеДанные; + + Если ТекущееРасширение = Неопределено Тогда + Возврат; + КонецЕсли; + + ЗагрузитьРасширение(ТекущееРасширение.ИдентификаторРасширения); + +КонецПроцедуры + +&НаКлиенте +Процедура ПерезапуститьПрограмму(Команда) + ЗавершитьРаботуСистемы(Ложь, Истина); +КонецПроцедуры + +&НаКлиенте +Процедура УдалитьУстаревшиеКэшиРасширений(Команда) + + УдалитьУстаревшиеКэшиРасширенийНаСервере(); + + ПоказатьПредупреждение(, НСтр("ru = 'Выполнено удаление устаревших версий параметров работы расширений.'")); + +КонецПроцедуры + +#КонецОбласти + +#Область ОбработчикиСобытийЭлементовТаблицыФормыСписокРасширений + +&НаКлиенте +Процедура СписокРасширенийПриАктивизацииСтроки(Элемент) + + Если Элементы.СписокРасширений.ТекущиеДанные <> Неопределено Тогда + ИдентификаторТекущейСтроки = Элементы.СписокРасширений.ТекущаяСтрока; + Иначе + ИдентификаторТекущейСтроки = Неопределено; + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура СписокРасширенийПередНачаломДобавления(Элемент, Отказ, Копирование, Родитель, Группа, Параметр) + + Отказ = Истина; + ЗагрузитьРасширение(Неопределено, Истина); + +КонецПроцедуры + +&НаКлиенте +Процедура СписокРасширенийПередУдалением(Элемент, Отказ) + + Отказ = Истина; + УдалитьРасширения(Элемент.ВыделенныеСтроки); + +КонецПроцедуры + +&НаКлиенте +Процедура СписокРасширенийПриОкончанииРедактирования(Элемент, НоваяСтрока, ОтменаРедактирования) + + ТекущееРасширение = Элементы.СписокРасширений.ТекущиеДанные; + Если ТекущееРасширение = Неопределено Тогда + Возврат; + КонецЕсли; + + СписокРасширенийПриОкончанииРедактированияНаСервере(ТекущееРасширение.ПолучитьИдентификатор()); + +КонецПроцедуры + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +&НаСервере +Процедура ОбновитьСписок(ПослеДобавления = Ложь) + + Если ПослеДобавления Тогда + ИндексТекущейСтроки = СписокРасширений.Количество(); + Иначе + ИндексТекущейСтроки = 0; + Если ИдентификаторТекущейСтроки <> Неопределено Тогда + Строка = СписокРасширений.НайтиПоИдентификатору(ИдентификаторТекущейСтроки); + Если Строка <> Неопределено Тогда + ИндексТекущейСтроки = СписокРасширений.Индекс(Строка); + КонецЕсли; + КонецЕсли; + КонецЕсли; + + СписокРасширений.Очистить(); + + УстановитьПривилегированныйРежим(Истина); + Расширения = РасширенияКонфигурации.Получить(Неопределено); + УстановитьПривилегированныйРежим(Ложь); + + Для Каждого Расширение Из Расширения Цикл + + ЭлементРасширения = СписокРасширений.Добавить(); + ЭлементРасширения.ИдентификаторРасширения = Расширение.УникальныйИдентификатор; + ЭлементРасширения.Имя = Расширение.Имя; + ЭлементРасширения.Версия = Расширение.Версия; + ЭлементРасширения.КонтрольнаяСумма = Base64Строка(Расширение.ХешСумма); + ЭлементРасширения.Синоним = Расширение.Синоним; + ЭлементРасширения.БезопасныйРежим = Расширение.БезопасныйРежим; + + Если ПустаяСтрока(ЭлементРасширения.Синоним) Тогда + ЭлементРасширения.Синоним = ЭлементРасширения.Имя; + КонецЕсли; + + Если ТипЗнч(Расширение.БезопасныйРежим) = Тип("Булево") Тогда + ЭлементРасширения.БезопасныйРежимФлаг = Расширение.БезопасныйРежим; + Иначе + ЭлементРасширения.БезопасныйРежимФлаг = Истина; + КонецЕсли; + КонецЦикла; + + Если ИндексТекущейСтроки >= СписокРасширений.Количество() Тогда + ИндексТекущейСтроки = СписокРасширений.Количество() - 1; + КонецЕсли; + Если ИндексТекущейСтроки >= 0 Тогда + Элементы.СписокРасширений.ТекущаяСтрока = СписокРасширений.Получить( + ИндексТекущейСтроки).ПолучитьИдентификатор(); + КонецЕсли; + + СоставРасширенийИзменен = ПараметрыСеанса.УстановленныеРасширения + <> СтандартныеПодсистемыСервер.КонтрольныеСуммыРасширений(СписокРасширений); + + Если СтандартныеПодсистемыСервер.УстановленныеРасширенияНедоступны() Тогда + Элементы.ГруппаПредупреждение.Видимость = Ложь; + Элементы.ГруппаИнформация.Видимость = СоставРасширенийИзменен; + Иначе + Элементы.ГруппаПредупреждение.Видимость = СоставРасширенийИзменен; + Элементы.ГруппаИнформация.Видимость = Ложь; + КонецЕсли; + +КонецПроцедуры + +&НаСервере +Функция СохранитьНаСервере(ИдентификаторРасширения) + + Расширение = НайтиРасширение(ИдентификаторРасширения); + + Если Расширение <> Неопределено Тогда + Возврат ПоместитьВоВременноеХранилище(Расширение.ПолучитьДанные(), ЭтотОбъект.УникальныйИдентификатор); + КонецЕсли; + + Возврат Неопределено; + +КонецФункции + +&НаСервере +Функция НайтиРасширение(ИдентификаторРасширения) + + Отбор = Новый Структура; + Отбор.Вставить("УникальныйИдентификатор", Новый УникальныйИдентификатор(ИдентификаторРасширения)); + Расширения = РасширенияКонфигурации.Получить(Отбор); + + Расширение = Неопределено; + + Если Расширения.Количество() = 1 Тогда + Расширение = Расширения[0]; + КонецЕсли; + + Возврат Расширение; + +КонецФункции + +&НаСервере +Процедура УдалитьУстаревшиеКэшиРасширенийНаСервере() + + УстановитьПривилегированныйРежим(Истина); + + Справочники.ВерсииРасширений.УдалитьУстаревшиеВерсииПараметров(); + +КонецПроцедуры + +&НаКлиенте +Процедура УдалитьРасширения(ВыделенныеСтроки) + + Если ВыделенныеСтроки.Количество() = 0 Тогда + Возврат; + КонецЕсли; + + Контекст = Новый Структура; + Контекст.Вставить("ВыделенныеСтроки", ВыделенныеСтроки); + + Оповещение = Новый ОписаниеОповещения("УдалитьРасширениеПослеПодтверждения", ЭтотОбъект, Контекст); + Если ВыделенныеСтроки.Количество() > 1 Тогда + ТекстВопроса = Нстр("ru = 'Вы уверены, что хотите удалить выделенные расширения?'", "ru"); + Иначе + ТекстВопроса = Нстр("ru = 'Вы уверены, что хотите удалить расширение?'", "ru"); + КонецЕсли; + + ПоказатьВопрос(Оповещение, ТекстВопроса, РежимДиалогаВопрос.ДаНет); + +КонецПроцедуры + +&НаКлиенте +Процедура УдалитьРасширениеПослеПодтверждения(Результат, Контекст) Экспорт + + Если Результат = КодВозвратаДиалога.Да Тогда + + Запросы = ЗапросНаОтменуРазрешенийИспользованияВнешнегоМодуля(Контекст.ВыделенныеСтроки); + + РаботаВБезопасномРежимеКлиент.ПрименитьЗапросыНаИспользованиеВнешнихРесурсов(Запросы, + ЭтотОбъект, Новый ОписаниеОповещения("УдалитьРасширениеПродолжение", ЭтотОбъект, Контекст)); + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура УдалитьРасширениеПродолжение(Результат, Контекст) Экспорт + + Если Результат = КодВозвратаДиалога.ОК Тогда + ПоказатьДлительнуюОперацию(); + ТекущийКонтекст = Контекст; + ПодключитьОбработчикОжидания("УдалитьРасширениеЗавершение", 0.1, Истина); + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура УдалитьРасширениеЗавершение() + + Контекст = ТекущийКонтекст; + + ПоказатьДлительнуюОперацию(); + Попытка + УдалитьРасширенияНаСервере(Контекст.ВыделенныеСтроки); + Исключение + ИнформацияОбОшибке = ИнформацияОбОшибке(); + СкрытьДлительнуюОперацию(); + ПоказатьПредупреждение(, СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'После удаления, при подготовке оставшихся расширений к работе, произошла ошибка: + |%1'"), КраткоеПредставлениеОшибки(ИнформацияОбОшибке))); + Возврат; + КонецПопытки; + СкрытьДлительнуюОперацию(); + +КонецПроцедуры + +&НаСервере +Процедура УдалитьРасширенияНаСервере(ВыделенныеСтроки) + + ПроверитьДоступностьРазделенныхДанных(); + + УдаленныеРасширения = Новый Массив; + + НачатьТранзакцию(); + Попытка + Для Каждого ИдентификаторСтроки Из ВыделенныеСтроки Цикл + ТекущееРасширение = СписокРасширений.НайтиПоИдентификатору(ИдентификаторСтроки); + Расширение = НайтиРасширение(ТекущееРасширение.ИдентификаторРасширения); + Если Расширение <> Неопределено Тогда + ОписаниеРасширения = Новый Структура; + ОписаниеРасширения.Вставить("Расширение", Расширение); + ОписаниеРасширения.Вставить("ДанныеРасширения", Расширение.ПолучитьДанные()); + УдаленныеРасширения.Добавить(ОписаниеРасширения); + КонецЕсли; + КонецЦикла; + Для Каждого ОписаниеРасширения Из УдаленныеРасширения Цикл + ОписаниеРасширения.Расширение.Удалить(); + КонецЦикла; + Если РасширенияКонфигурации.Получить().Количество() = 0 Тогда + Справочники.ВерсииРасширений.ПриУдаленииВсехРасширений(); + КонецЕсли; + ЗафиксироватьТранзакцию(); + Исключение + ОтменитьТранзакцию(); + ВызватьИсключение; + КонецПопытки; + + Попытка + ОбновитьПараметрыРаботыРасширений(); + РасширенияИзменены = Истина; + Исключение + ИнформацияОбОшибке = ИнформацияОбОшибке(); + НачатьТранзакцию(); + Попытка + Для Каждого ОписаниеРасширения Из УдаленныеРасширения Цикл + ОписаниеРасширения.Расширение.Записать(ОписаниеРасширения.ДанныеРасширения); + КонецЦикла; + ЗафиксироватьТранзакцию(); + Исключение + ОтменитьТранзакцию(); + ТекущаяИнформацияОбОшибке = ИнформацияОбОшибке(); + ВызватьИсключение КраткоеПредставлениеОшибки(ИнформацияОбОшибке) + Символы.ПС + Символы.ПС + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'При попытке восстановить удаленные расширения произошла еще одна ошибка: + |%1'"), КраткоеПредставлениеОшибки(ТекущаяИнформацияОбОшибке)); + КонецПопытки; + ВызватьИсключение КраткоеПредставлениеОшибки(ИнформацияОбОшибке) + Символы.ПС + Символы.ПС + + НСтр("ru = 'Удаленные расширения были восстановлены.'"); + КонецПопытки; + + ОбновитьСписок(); + +КонецПроцедуры + +&НаСервере +Функция ЗапросНаОтменуРазрешенийИспользованияВнешнегоМодуля(ВыделенныеСтроки) + + Разрешения = Новый Массив; + + Для Каждого ИдентификаторСтроки Из ВыделенныеСтроки Цикл + ТекущееРасширение = СписокРасширений.НайтиПоИдентификатору(ИдентификаторСтроки); + Разрешения.Добавить(РаботаВБезопасномРежиме.РазрешениеНаИспользованиеВнешнегоМодуля( + ТекущееРасширение.Имя, ТекущееРасширение.КонтрольнаяСумма)); + КонецЦикла; + + Запросы = Новый Массив; + Запросы.Добавить(РаботаВБезопасномРежиме.ЗапросНаОтменуРазрешенийИспользованияВнешнихРесурсов( + ОбщегоНазначения.ИдентификаторОбъектаМетаданных("РегистрСведений.ПараметрыРаботыВерсийРасширений"), + Разрешения)); + + Возврат Запросы; + +КонецФункции + +&НаКлиенте +Процедура ПоказатьДлительнуюОперацию() + + Если УстановленныеРасширенияНедоступны Тогда + Возврат; + КонецЕсли; + + Элементы.СтраницыОбновление.ТекущаяСтраница = Элементы.СтраницаДлительнаяОперация; + Элементы.СписокРасширенийДобавить.Доступность = Ложь; + Элементы.СписокРасширенийУдалить.Доступность = Ложь; + +КонецПроцедуры + +&НаКлиенте +Процедура СкрытьДлительнуюОперацию() + + Если УстановленныеРасширенияНедоступны Тогда + Возврат; + КонецЕсли; + + Элементы.СтраницыОбновление.ТекущаяСтраница = Элементы.СтраницаСписокРасширений; + Элементы.СписокРасширенийДобавить.Доступность = Истина; + Элементы.СписокРасширенийУдалить.Доступность = Истина; + +КонецПроцедуры + +&НаКлиенте +Процедура ЗагрузитьРасширение(Знач ИдентификаторРасширения, МножественныйВыбор = Ложь) + + Контекст = Новый Структура; + Контекст.Вставить("ИдентификаторРасширения", ИдентификаторРасширения); + Контекст.Вставить("МножественныйВыбор", МножественныйВыбор); + + ОбщегоНазначенияКлиент.ПоказатьВопросОбУстановкеРасширенияРаботыСФайлами( + Новый ОписаниеОповещения("ЗагрузитьРасширениеПослеУстановкиРасширения", ЭтотОбъект, Контекст)); + +КонецПроцедуры + +&НаКлиенте +Процедура ЗагрузитьРасширениеПослеУстановкиРасширения(РасширениеПодключено, Контекст) Экспорт + + Если РасширениеПодключено Тогда + Диалог = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Открытие); + Диалог.Фильтр = НСтр("ru = 'Расширение конфигурации'", "ru")+ " (*.cfe)|*.cfe"; + Диалог.МножественныйВыбор = Контекст.МножественныйВыбор; + Диалог.ПроверятьСуществованиеФайла = Истина; + Диалог.Заголовок = НСтр("ru = 'Выберите файл расширения конфигурации'", "ru"); + НачатьПомещениеФайлов(Новый ОписаниеОповещения( + "ЗагрузитьРасширениеПослеПомещенияФайлов", ЭтотОбъект, Контекст), + , Диалог, , УникальныйИдентификатор); + Иначе + РасширенияФайла = "*.cfe"; + НачатьПомещениеФайла(Новый ОписаниеОповещения( + "ЗагрузитьРасширениеПослеПомещенияФайла", ЭтотОбъект, Контекст), + , РасширенияФайла, , ЭтотОбъект.УникальныйИдентификатор); + КонецЕсли + +КонецПроцедуры + +&НаКлиенте +Процедура ЗагрузитьРасширениеПослеПомещенияФайла(ФайлПомещен, Адрес, ВыбранноеИмяФайла, Контекст) Экспорт + + Если ФайлПомещен Тогда + ПомещенныеФайлы = Новый Массив; + ПомещенныеФайлы.Добавить(Новый ОписаниеПередаваемогоФайла(ВыбранноеИмяФайла, Адрес)); + ЗагрузитьРасширениеПослеПомещенияФайлов(ПомещенныеФайлы, Контекст); + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура ЗагрузитьРасширениеПослеПомещенияФайлов(ПомещенныеФайлы, Контекст) Экспорт + + Если ПомещенныеФайлы = Неопределено + Или ПомещенныеФайлы.Количество() = 0 Тогда + + Возврат; + КонецЕсли; + + Контекст.Вставить("ПомещенныеФайлы", ПомещенныеФайлы); + + ЗапросыРазрешений = Новый Массив; + Попытка + ДобавитьЗапросРазрешений(ЗапросыРазрешений, ПомещенныеФайлы, Контекст.ИдентификаторРасширения); + Исключение + ИнформацияОбОшибке = ИнформацияОбОшибке(); + ПоказатьПредупреждение(, КраткоеПредставлениеОшибки(ИнформацияОбОшибке)); + Возврат; + КонецПопытки; + + ОповещениеОЗакрытии = Новый ОписаниеОповещения( + "ЗагрузитьРасширениеПродолжение", ЭтотОбъект, Контекст); + + РаботаВБезопасномРежимеКлиент.ПрименитьЗапросыНаИспользованиеВнешнихРесурсов( + ЗапросыРазрешений, ЭтотОбъект, ОповещениеОЗакрытии); + +КонецПроцедуры + +&НаКлиенте +Процедура ЗагрузитьРасширениеПродолжение(Результат, Контекст) Экспорт + + Если Результат <> КодВозвратаДиалога.ОК Тогда + Возврат; + КонецЕсли; + + ПоказатьДлительнуюОперацию(); + ТекущийКонтекст = Контекст; + ПодключитьОбработчикОжидания("ЗагрузитьРасширениеЗавершение", 0.1, Истина); + +КонецПроцедуры + +&НаКлиенте +Процедура ЗагрузитьРасширениеЗавершение() + + Контекст = ТекущийКонтекст; + Попытка + ИзменитьРасширенияНаСервере(Контекст.ПомещенныеФайлы, Контекст.ИдентификаторРасширения); + Исключение + ИнформацияОбОшибке = ИнформацияОбОшибке(); + СкрытьДлительнуюОперацию(); + ПоказатьПредупреждение(, СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'После добавления, при подготовке расширений к работе, произошла ошибка: + |%1'"), КраткоеПредставлениеОшибки(ИнформацияОбОшибке))); + Возврат; + КонецПопытки; + СкрытьДлительнуюОперацию(); + + Если Не РасширенияИзменены Тогда + Возврат; + КонецЕсли; + + Если Контекст.ИдентификаторРасширения = Неопределено Тогда + Если Контекст.ПомещенныеФайлы.Количество() > 1 Тогда + ТекстОповещения = НСтр("ru = 'Расширения конфигурации добавлены'", "ru"); + Иначе + ТекстОповещения = НСтр("ru = 'Расширение конфигурации добавлено'", "ru"); + КонецЕсли; + Иначе + ТекстОповещения = НСтр("ru = 'Расширение конфигурации обновлено'", "ru"); + КонецЕсли; + + ПоказатьОповещениеПользователя(ТекстОповещения); + +КонецПроцедуры + +&НаСервере +Процедура ИзменитьРасширенияНаСервере(ПомещенныеФайлы, ИдентификаторРасширения = Неопределено) + + ПроверитьДоступностьРазделенныхДанных(); + + РасширенияИзменены = Ложь; + + Расширение = Неопределено; + + Если ИдентификаторРасширения <> Неопределено Тогда + Расширение = НайтиРасширение(ИдентификаторРасширения); + Если Расширение = Неопределено Тогда + Возврат; + КонецЕсли; + ПрежнееИмяРасширения = Расширение.Имя; + ДанныеРасширения = Расширение.ПолучитьДанные(); + КонецЕсли; + + ДобавленныеРасширения = Новый Массив; + + НачатьТранзакцию(); + Попытка + Если ИдентификаторРасширения <> Неопределено Тогда + Расширение.Записать(ПолучитьИзВременногоХранилища(ПомещенныеФайлы[0].Хранение)); + Если ПрежнееИмяРасширения <> Расширение.Имя Тогда + ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Нельзя загрузить расширение ""%1"" в ""%2"".'"), + Расширение.Имя, + ПрежнееИмяРасширения); + КонецЕсли; + Иначе + Для Каждого ПомещенныйФайл Из ПомещенныеФайлы Цикл + Расширение = РасширенияКонфигурации.Создать(); + Расширение.Записать(ПолучитьИзВременногоХранилища(ПомещенныйФайл.Хранение)); + ДобавленныеРасширения.Вставить(0, Расширение); + КонецЦикла; + КонецЕсли; + ЗафиксироватьТранзакцию(); + Исключение + ОтменитьТранзакцию(); + ВызватьИсключение; + КонецПопытки; + + Попытка + ОбновитьПараметрыРаботыРасширений(); + РасширенияИзменены = Истина; + Исключение + ИнформацияОбОшибке = ИнформацияОбОшибке(); + Если ИдентификаторРасширения <> Неопределено Тогда + Расширение.Записать(ДанныеРасширения); + Иначе + НачатьТранзакцию(); + Попытка + Для Каждого ДобавленноеРасширение Из ДобавленныеРасширения Цикл + Отбор = Новый Структура("Имя", ДобавленноеРасширение.Имя); + Расширения = РасширенияКонфигурации.Получить(Отбор); + Для Каждого Расширение Из Расширения Цикл + Если Расширение.ХешСумма = ДобавленноеРасширение.ХешСумма Тогда + Расширение.Удалить(); + КонецЕсли; + КонецЦикла; + КонецЦикла; + ЗафиксироватьТранзакцию(); + Исключение + ТекущаяИнформацияОбОшибке = ИнформацияОбОшибке(); + ОтменитьТранзакцию(); + Если ИдентификаторРасширения <> Неопределено Тогда + ВызватьИсключение КраткоеПредставлениеОшибки(ИнформацияОбОшибке) + Символы.ПС + Символы.ПС + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'При попытке восстановить измененное расширение произошла еще одна ошибка: + |%1'"), КраткоеПредставлениеОшибки(ТекущаяИнформацияОбОшибке)); + Иначе + ВызватьИсключение КраткоеПредставлениеОшибки(ИнформацияОбОшибке) + Символы.ПС + Символы.ПС + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'При попытке удалить добавленные расширения произошла еще одна ошибка: + |%1'"), КраткоеПредставлениеОшибки(ТекущаяИнформацияОбОшибке)); + КонецЕсли; + КонецПопытки; + КонецЕсли; + ВызватьИсключение КраткоеПредставлениеОшибки(ИнформацияОбОшибке) + Символы.ПС + Символы.ПС + + НСтр("ru = 'Добавленные расширения были удалены.'"); + КонецПопытки; + + ОбновитьСписок(ИдентификаторРасширения = Неопределено); + +КонецПроцедуры + +&НаСервере +Процедура СписокРасширенийПриОкончанииРедактированияНаСервере(ИдентификаторРасширения) + + НайденноеРасширение = СписокРасширений.НайтиПоИдентификатору(ИдентификаторРасширения); + + Если НайденноеРасширение = Неопределено Тогда + Возврат; + КонецЕсли; + + Расширение = НайтиРасширение(НайденноеРасширение.ИдентификаторРасширения); + + Если Расширение <> Неопределено Тогда + + Если ТипЗнч(Расширение.БезопасныйРежим) = Тип("Булево") Тогда + ПрежнееЗначениеБезопасногоРежима = Расширение.БезопасныйРежим; + Иначе + ПрежнееЗначениеБезопасногоРежима = Истина; + КонецЕсли; + + Если Не НайденноеРасширение.БезопасныйРежимФлаг И НайденноеРасширение.БезопасныйРежимФлаг <> ПрежнееЗначениеБезопасногоРежима Тогда + Расширение.БезопасныйРежим = НайденноеРасширение.БезопасныйРежим; + Иначе + НайденноеРасширение.БезопасныйРежим = Истина; + КонецЕсли; + + Расширение.Записать(); + + КонецЕсли; + +КонецПроцедуры + +&НаСервере +Функция ДобавитьЗапросРазрешений(ЗапросыРазрешений, ПомещенныеФайлы, ИдентификаторРасширения = Неопределено) + + Разрешения = Новый Массив; + + Для Каждого ПомещенныйФайл Из ПомещенныеФайлы Цикл + НачатьТранзакцию(); + Попытка + Если ИдентификаторРасширения = Неопределено Тогда + ВременноеРасширение = РасширенияКонфигурации.Создать(); + Иначе + ВременноеРасширение = НайтиРасширение(ИдентификаторРасширения); + КонецЕсли; + ВременноеРасширение.Записать(ПолучитьИзВременногоХранилища(ПомещенныйФайл.Хранение)); + ВременноеРасширение.Удалить(); + ОтменитьТранзакцию(); + Разрешения.Добавить(РаботаВБезопасномРежиме.РазрешениеНаИспользованиеВнешнегоМодуля( + ВременноеРасширение.Имя, Base64Строка(ВременноеРасширение.ХешСумма))); + Исключение + ОтменитьТранзакцию(); + ВызватьИсключение; + КонецПопытки; + КонецЦикла; + + УстановленныеРасширения = РасширенияКонфигурации.Получить(); + Для Каждого Расширение Из УстановленныеРасширения Цикл + Разрешения.Добавить(РаботаВБезопасномРежиме.РазрешениеНаИспользованиеВнешнегоМодуля( + Расширение.Имя, Base64Строка(Расширение.ХешСумма))); + КонецЦикла; + + ЗапросыРазрешений.Добавить(РаботаВБезопасномРежиме.ЗапросНаИспользованиеВнешнихРесурсов(Разрешения, + ОбщегоНазначения.ИдентификаторОбъектаМетаданных("РегистрСведений.ПараметрыРаботыВерсийРасширений"))); + + Возврат Истина; + +КонецФункции + +&НаСервере +Процедура ОбновитьПараметрыРаботыРасширений() + + Если СтандартныеПодсистемыСервер.УстановленныеРасширенияНедоступны() Тогда + Возврат; + КонецЕсли; + + УстановленныеРасширения = ПараметрыСеанса.УстановленныеРасширения; + Попытка + ОчищаемыеПараметры = Новый Массив; + ОчищаемыеПараметры.Добавить("АдресСвойствРасширений"); + ОчищаемыеПараметры.Добавить("УстановленныеРасширения"); + ПараметрыСеанса.Очистить(ОчищаемыеПараметры); + ХранилищеСвойствРасширений = Справочники.ИдентификаторыОбъектовМетаданных.ХранилищеСвойствРасширений(); + ПараметрыВыполнения = Новый Структура; + ПараметрыВыполнения.Вставить("УстановленныеРасширения", ПараметрыСеанса.УстановленныеРасширения); + ПараметрыВыполнения.Вставить("ХранилищеСвойствРасширений", ХранилищеСвойствРасширений); + ПараметрыПроцедуры = Новый Массив; + ПараметрыПроцедуры.Добавить(ПараметрыВыполнения); + ФоновоеЗадание = ФоновыеЗадания.Выполнить( + "СтандартныеПодсистемыСервер.ЗаполнитьВсеПараметрыРаботыРасширенийФоновоеЗадание", + ПараметрыПроцедуры); + Попытка + ФоновоеЗадание.ОжидатьЗавершения(); + Исключение + ИнформацияОбОшибке = ИнформацияОбОшибке(); + КонецПопытки; + Отбор = Новый Структура("УникальныйИдентификатор", ФоновоеЗадание.УникальныйИдентификатор); + ФоновоеЗадание = ФоновыеЗадания.ПолучитьФоновыеЗадания(Отбор)[0]; + Если ИнформацияОбОшибке <> Неопределено Тогда + ИнформацияОбОшибке = ФоновоеЗадание.ИнформацияОбОшибке; + КонецЕсли; + Исключение + ИнформацияОбОшибке = ИнформацияОбОшибке(); + КонецПопытки; + + ПараметрыСеанса.УстановленныеРасширения = УстановленныеРасширения; + ОчищаемыеПараметры = Новый Массив; + ОчищаемыеПараметры.Добавить("АдресСвойствРасширений"); + ПараметрыСеанса.Очистить(ОчищаемыеПараметры); + + Если ИнформацияОбОшибке <> Неопределено Тогда + ВызватьИсключение ПодробноеПредставлениеОшибки(ИнформацияОбОшибке); + КонецЕсли; + +КонецПроцедуры + +&НаСервере +Процедура ПроверитьДоступностьРазделенныхДанных() + + Если Не ОбщегоНазначенияПовтИсп.ДоступноИспользованиеРазделенныхДанных() Тогда + ВызватьИсключение НСтр("ru = 'Расширения недоступны в неразделенном режиме.'"); + КонецЕсли; + +КонецПроцедуры + + +#КонецОбласти diff --git a/SSL/src/CommonForms/УстановленныеРасширения/УстановленныеРасширения.mdo b/SSL/src/CommonForms/УстановленныеРасширения/УстановленныеРасширения.mdo new file mode 100644 index 000000000..129b0e468 --- /dev/null +++ b/SSL/src/CommonForms/УстановленныеРасширения/УстановленныеРасширения.mdo @@ -0,0 +1,16 @@ + + + УстановленныеРасширения + + ru + Установленные расширения + + + + ru + + + PersonalComputer + MobileDevice + true + diff --git a/SSL/src/CommonForms/УточнениеКонтактов/Form.form b/SSL/src/CommonForms/УточнениеКонтактов/Form.form index 06c0379e7..72e3017ec 100644 --- a/SSL/src/CommonForms/УточнениеКонтактов/Form.form +++ b/SSL/src/CommonForms/УточнениеКонтактов/Form.form @@ -442,7 +442,6 @@ true true true - UseIfNecessary auto true @@ -811,7 +810,7 @@ КомандаОКВыполнить - Auto + DontUse Auto diff --git a/SSL/src/CommonForms/УточнениеКонтактов/Module.bsl b/SSL/src/CommonForms/УточнениеКонтактов/Module.bsl index ce3379620..db6dade8b 100644 --- a/SSL/src/CommonForms/УточнениеКонтактов/Module.bsl +++ b/SSL/src/CommonForms/УточнениеКонтактов/Module.bsl @@ -106,9 +106,9 @@ Возврат ; КонецЕсли; - Если ТипЗнч(ВыбранноеЗначение) = Тип("Структура") И - (ВыбранноеЗначение.Адрес <> ТекущиеДанные.ТекущийАдресКонтакта ИЛИ - ВыбранноеЗначение.Вид <> ТекущиеДанные.ТекущийВидКонтактнойИнформации) Тогда + Если ТипЗнч(ВыбранноеЗначение) = Тип("Структура") + И (ВыбранноеЗначение.Адрес <> ТекущиеДанные.ТекущийАдресКонтакта + ИЛИ ВыбранноеЗначение.Вид <> ТекущиеДанные.ТекущийВидКонтактнойИнформации) Тогда ТекущиеДанные.ТекущийАдресКонтакта = ВыбранноеЗначение.Адрес; ТекущиеДанные.ТекущийВидКонтактнойИнформации = ВыбранноеЗначение.Вид; @@ -285,11 +285,12 @@ ЕстьКонтактнаяИнформацияДляИзменения = Истина; КонецЕсли; - СтруктураДанные = Новый Структура("Представление,Адрес,Контакт,Группа", - СтрокаТаблицыКонтактов.Представление, - СтрокаТаблицыКонтактов.Адрес, - СтрокаТаблицыКонтактов.Контакт, - СтрокаТаблицыКонтактов.Группа); + СтруктураДанные = Новый Структура; + + СтруктураДанные.Вставить("Представление", СтрокаТаблицыКонтактов.Представление); + СтруктураДанные.Вставить("Адрес", СтрокаТаблицыКонтактов.Адрес); + СтруктураДанные.Вставить("Контакт", СтрокаТаблицыКонтактов.Контакт); + СтруктураДанные.Вставить("Группа", СтрокаТаблицыКонтактов.Группа); РезультатВыбора.Добавить(СтруктураДанные); @@ -599,7 +600,7 @@ СтрокаТабличнойЧасти.Представление = Выборка.Адрес; СтрокаТабличнойЧасти.АдресЭП = Выборка.Адрес; - Позиция = Найти(СтрокаТабличнойЧасти.АдресЭП, "@"); + Позиция = СтрНайти(СтрокаТабличнойЧасти.АдресЭП, "@"); Если Позиция <> 0 Тогда СтрокаТабличнойЧасти.ДоменноеИмяСервера = Сред(СтрокаТабличнойЧасти.АдресЭП, Позиция+1); КонецЕсли; @@ -617,8 +618,8 @@ Если НайденнаяСтрока.Изменять Тогда Если НайденнаяСтрока.СписокНайденныхКонтактов.Количество() > 1 Тогда ВыполнятьЗамену = Ложь; - ИначеЕсли НайденнаяСтрока.СписокНайденныхКонтактов.Количество() = 1 И - НайденнаяСтрока.СписокНайденныхКонтактов.Получить(0) <> КонтактОбъект.Ссылка Тогда + ИначеЕсли НайденнаяСтрока.СписокНайденныхКонтактов.Количество() = 1 + И НайденнаяСтрока.СписокНайденныхКонтактов.Получить(0) <> КонтактОбъект.Ссылка Тогда ВыполнятьЗамену = Ложь; @@ -740,8 +741,9 @@ Исключение ТекстСообщенияОбОшибке = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Во время обновления контактной информации %1 произошла ошибка - |%2'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), Выборка.Контакт,ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); + НСтр("ru = 'Во время обновления контактной информации %1 произошла ошибка + |%2'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), + Выборка.Контакт,ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); ЗаписьЖурналаРегистрации(УправлениеЭлектроннойПочтой.СобытиеЖурналаРегистрации(), УровеньЖурналаРегистрации.Ошибка, , , @@ -761,8 +763,8 @@ &НаКлиенте Процедура УстановитьСнятьПризнакИзменятьЕслиНеобходимо(ТекущиеДанные) - Если (НЕ ЗначениеЗаполнено(ТекущиеДанные.Адрес) ИЛИ Не ЗначениеЗаполнено(ТекущиеДанные.Контакт) ИЛИ - ВРег(ТекущиеДанные.Адрес) = ВРег(ТекущиеДанные.ТекущийАдресКонтакта)) Тогда + Если (НЕ ЗначениеЗаполнено(ТекущиеДанные.Адрес) ИЛИ Не ЗначениеЗаполнено(ТекущиеДанные.Контакт) + ИЛИ ВРег(ТекущиеДанные.Адрес) = ВРег(ТекущиеДанные.ТекущийАдресКонтакта)) Тогда ТекущиеДанные.Изменять = Ложь; diff --git a/SSL/src/CommonForms/ФайлыВТоме/Form.form b/SSL/src/CommonForms/ФайлыВТоме/Form.form index a78d7a4c6..cacdb4f8a 100644 --- a/SSL/src/CommonForms/ФайлыВТоме/Form.form +++ b/SSL/src/CommonForms/ФайлыВТоме/Form.form @@ -444,7 +444,6 @@ true true true - UseIfNecessary auto true diff --git a/SSL/src/CommonForms/ФайлыВТоме/Module.bsl b/SSL/src/CommonForms/ФайлыВТоме/Module.bsl index 3d4c02f48..755912f5e 100644 --- a/SSL/src/CommonForms/ФайлыВТоме/Module.bsl +++ b/SSL/src/CommonForms/ФайлыВТоме/Module.bsl @@ -140,7 +140,7 @@ Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ПрисоединенныеФайлы") Тогда Для каждого Справочник Из Метаданные.Справочники Цикл - Если Прав(Справочник.Имя, 19) = "ПрисоединенныеФайлы" Тогда + Если СтрЗаканчиваетсяНа(Справочник.Имя, "ПрисоединенныеФайлы") Тогда ИменаХранилищФайлов.Добавить(Справочник.Имя, Справочник.Представление()); КонецЕсли; КонецЦикла; diff --git a/SSL/src/CommonForms/ФормаВариантаОтчета/Form.form b/SSL/src/CommonForms/ФормаВариантаОтчета/Form.form index acc8521ea..d204fbcb7 100644 --- a/SSL/src/CommonForms/ФормаВариантаОтчета/Form.form +++ b/SSL/src/CommonForms/ФормаВариантаОтчета/Form.form @@ -155,7 +155,7 @@ 6 <key>ru</key> - <value>Настройки параметов</value> + <value>Настройки параметров</value> true true @@ -3816,7 +3816,6 @@ true true true - UseIfNecessary auto true @@ -3937,7 +3936,7 @@ ЗавершитьРедактирование - Auto + DontUse Auto diff --git a/SSL/src/CommonForms/ФормаВариантаОтчета/Module.bsl b/SSL/src/CommonForms/ФормаВариантаОтчета/Module.bsl index 702ab0aea..4475ce197 100644 --- a/SSL/src/CommonForms/ФормаВариантаОтчета/Module.bsl +++ b/SSL/src/CommonForms/ФормаВариантаОтчета/Module.bsl @@ -1,6 +1,8 @@ //////////////////////////////////////////////////////////////////////////////// // Стандартный функционал +#Область СтандартныйФункционал + &НаКлиенте Процедура ПоляГруппировкиНедоступны() @@ -54,7 +56,7 @@ Элементы.ЛокальныйОтбор.ТолькоПросмотр = Ложь; КонецПроцедуры - + &НаКлиенте Процедура ОтборНедоступен() @@ -189,10 +191,10 @@ ЭлементСтруктуры = Отчет.КомпоновщикНастроек.Настройки.ПолучитьОбъектПоИдентификатору(Элементы.КомпоновщикНастроекНастройки.ТекущаяСтрока); ТипЭлемента = ТипЗнч(ЭлементСтруктуры); - Если ТипЭлемента = Неопределено ИЛИ - ТипЭлемента = Тип("КоллекцияЭлементовСтруктурыДиаграммыКомпоновкиДанных") ИЛИ - ТипЭлемента = Тип("КоллекцияЭлементовСтруктурыТаблицыКомпоновкиДанных") Тогда - + Если ТипЭлемента = Неопределено + Или ТипЭлемента = Тип("КоллекцияЭлементовСтруктурыДиаграммыКомпоновкиДанных") + Или ТипЭлемента = Тип("КоллекцияЭлементовСтруктурыТаблицыКомпоновкиДанных") Тогда + ПоляГруппировкиНедоступны(); ВыбранныеПоляНедоступны(); ОтборНедоступен(); @@ -200,8 +202,8 @@ УсловноеОформлениеНедоступно(); ПараметрыВыводаНедоступны(); - ИначеЕсли ТипЭлемента = Тип("НастройкиКомпоновкиДанных") ИЛИ - ТипЭлемента = Тип("НастройкиВложенногоОбъектаКомпоновкиДанных") Тогда + ИначеЕсли ТипЭлемента = Тип("НастройкиКомпоновкиДанных") + Или ТипЭлемента = Тип("НастройкиВложенногоОбъектаКомпоновкиДанных") Тогда ПоляГруппировкиНедоступны(); @@ -225,20 +227,20 @@ Элементы.ЛокальныеПараметрыВывода.ТолькоПросмотр = Истина; Элементы.СтраницыПараметровВывода.ТекущаяСтраница = Элементы.НастройкиПараметровВывода; - ИначеЕсли ТипЭлемента = Тип("ГруппировкаКомпоновкиДанных") ИЛИ - ТипЭлемента = Тип("ГруппировкаТаблицыКомпоновкиДанных") ИЛИ - ТипЭлемента = Тип("ГруппировкаДиаграммыКомпоновкиДанных") Тогда - + ИначеЕсли ТипЭлемента = Тип("ГруппировкаКомпоновкиДанных") + Или ТипЭлемента = Тип("ГруппировкаТаблицыКомпоновкиДанных") + Или ТипЭлемента = Тип("ГруппировкаДиаграммыКомпоновкиДанных") Тогда + Элементы.СтраницыПолейГруппировки.ТекущаяСтраница = Элементы.НастройкиПолейГруппировки; - + ВыбранныеПоляДоступны(ЭлементСтруктуры); ОтборДоступен(ЭлементСтруктуры); ПорядокДоступен(ЭлементСтруктуры); УсловноеОформлениеДоступно(ЭлементСтруктуры); ПараметрыВыводаДоступны(ЭлементСтруктуры); - ИначеЕсли ТипЭлемента = Тип("ТаблицаКомпоновкиДанных") ИЛИ - ТипЭлемента = Тип("ДиаграммаКомпоновкиДанных") Тогда + ИначеЕсли ТипЭлемента = Тип("ТаблицаКомпоновкиДанных") + Или ТипЭлемента = Тип("ДиаграммаКомпоновкиДанных") Тогда ПоляГруппировкиНедоступны(); ВыбранныеПоляДоступны(ЭлементСтруктуры); @@ -349,6 +351,8 @@ КонецПроцедуры +#КонецОбласти + #Область ОбработчикиСобытийФормы &НаСервере @@ -359,9 +363,12 @@ Если Параметры.Свойство("ПредставлениеВарианта") И ЗначениеЗаполнено(Параметры.ПредставлениеВарианта) Тогда АвтоЗаголовок = Ложь; - Заголовок = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Изменение варианта отчета ""%1""'"), - Параметры.ПредставлениеВарианта); + Заголовок = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Изменение варианта отчета ""%1""'"), Параметры.ПредставлениеВарианта); + КонецЕсли; + + НастройкиОтчета = ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(Параметры, "НастройкиОтчета"); + Если ТипЗнч(НастройкиОтчета) = Тип("Структура") И НастройкиОтчета.СхемаМодифицирована Тогда + Отчет.КомпоновщикНастроек.Инициализировать(Новый ИсточникДоступныхНастроекКомпоновкиДанных(НастройкиОтчета.АдресСхемы)); КонецЕсли; КонецПроцедуры @@ -391,6 +398,13 @@ РезультатВыбора.Вставить("ПользовательскиеНастройкиКД", Отчет.КомпоновщикНастроек.ПользовательскиеНастройки); КонецЕсли; + #Если ВебКлиент Тогда + РезультатВыбора.ВариантМодифицирован = Истина; // Для платформы. + РезультатВыбора.Вставить("НастройкиКД", Отчет.КомпоновщикНастроек.Настройки); + РезультатВыбора.ПользовательскиеНастройкиМодифицированы = Истина; + РезультатВыбора.Вставить("ПользовательскиеНастройкиКД", Отчет.КомпоновщикНастроек.ПользовательскиеНастройки); + #КонецЕсли + ОповеститьОВыборе(РезультатВыбора); КонецЕсли; КонецПроцедуры diff --git a/SSL/src/SettingsStorages/ХранилищеВариантовОтчетов/Forms/НастройкиОтчета/ConditionalAppearance.dcssca b/SSL/src/CommonForms/ФормаНастроекОтчета/ConditionalAppearance.dcssca similarity index 100% rename from SSL/src/SettingsStorages/ХранилищеВариантовОтчетов/Forms/НастройкиОтчета/ConditionalAppearance.dcssca rename to SSL/src/CommonForms/ФормаНастроекОтчета/ConditionalAppearance.dcssca diff --git a/SSL/src/CommonForms/ФормаНастроекОтчета/Form.form b/SSL/src/CommonForms/ФормаНастроекОтчета/Form.form index 2ac83cfc3..b41a2cfec 100644 --- a/SSL/src/CommonForms/ФормаНастроекОтчета/Form.form +++ b/SSL/src/CommonForms/ФормаНастроекОтчета/Form.form @@ -1,109 +1,23 @@ - - - КомпоновщикНастроекПользовательскиеНастройки - 1 - - <key>ru</key> - <value>Пользовательские настройки</value> - + + + ТекущийУзелКДТипДиаграммы + 788 true true true - Отчет.SettingsComposer.UserSettings + ТекущийУзелКДТипДиаграммы - None - HierarchicalList - List - Tree - None - - КомпоновщикНастроекПользовательскиеНастройкиКоманднаяПанель - 3 - Left - true - OnChange - КомпоновщикНастроекПользовательскиеНастройкиПриИзменении + ТекущийУзелКДТипДиаграммыПриИзменении - - КомпоновщикНастроекПользовательскиеНастройкиСтрокаПоиска - 11 - - КомпоновщикНастроекПользовательскиеНастройкиСтрокаПоискаРасширеннаяПодсказка - 13 - Label - true - true - - Left - - - - КомпоновщикНастроекПользовательскиеНастройкиСтрокаПоискаКонтекстноеМеню - 12 - true - - КомпоновщикНастроекПользовательскиеНастройки - - true - - - - КомпоновщикНастроекПользовательскиеНастройкиСостояниеПросмотра - 14 - - КомпоновщикНастроекПользовательскиеНастройкиСостояниеПросмотраРасширеннаяПодсказка - 16 - Label - true - true - - Left - - - - КомпоновщикНастроекПользовательскиеНастройкиСостояниеПросмотраКонтекстноеМеню - 15 - true - - ViewStatusAddition - КомпоновщикНастроекПользовательскиеНастройки - - true - - - - КомпоновщикНастроекПользовательскиеНастройкиУправлениеПоиском - 17 - - КомпоновщикНастроекПользовательскиеНастройкиУправлениеПоискомРасширеннаяПодсказка - 19 - Label - true - true - - Left - - - - КомпоновщикНастроекПользовательскиеНастройкиУправлениеПоискомКонтекстноеМеню - 18 - true - - SearchControlAddition - КомпоновщикНастроекПользовательскиеНастройки - - true - - - КомпоновщикНастроекПользовательскиеНастройкиExtendedTooltip - 10 + ТекущийУзелКДТипДиаграммыРасширеннаяПодсказка + 790 Label true true @@ -112,140 +26,9353 @@ - КомпоновщикНастроекПользовательскиеНастройкиКонтекстноеМеню - 2 + ТекущийУзелКДТипДиаграммыКонтекстноеМеню + 789 true - HierarchicalList - true - true - true - true - true - true - MultiRow -
              true
              - 1 - 1 - AutoUse - AutoUse - true - true - false - Auto - Auto + InputField + Enter + true + Left + true + + 35 + true + true + false + true + true + true + true + Normal + +
              + + СтраницыНастроек + 35 + + СтраницаСоставГруппировки + 585 + + КомандыСоставаГруппировки + 604 + + КомандыСоставаГруппировки_ДобавлениеУдаление + 606 + + СоставГруппировки_Добавить + 608 + + <key>ru</key> + <value>Добавить</value> + + true + true + + true + + + СоставГруппировки_ДобавитьРасширеннаяПодсказка + 609 + Label + true + true + + Left + + + Form.Item.СоставГруппировки.StandardCommand.Add + Normal + PictureAndText + true + true + UserCmds + Auto + InCommandBarAndInAdditionalSubmenu + + + СоставГруппировки_Удалить + 610 + true + true + + true + + + СоставГруппировки_УдалитьРасширеннаяПодсказка + 611 + Label + true + true + + Left + + + Form.Item.СоставГруппировки.StandardCommand.Delete + Normal + Picture + true + true + UserCmds + Auto + InCommandBarAndInAdditionalSubmenu + + true + true + + true + + + <key>ru</key> + <value> </value> + + + ru + + + + КомандыСоставаГруппировки_ДобавлениеУдалениеРасширеннаяПодсказка + 607 + Label + true + true + + Left + + + + + + КомандыСоставаГруппировки_Приоритет + 612 + + СоставГруппировки_ПереместитьВверх + 614 + true + true + + true + + + СоставГруппировки_ПереместитьВверхРасширеннаяПодсказка + 615 + Label + true + true + + Left + + + Form.Command.СоставГруппировки_ПереместитьВверх + Normal + Auto + true + true + UserCmds + Auto + InCommandBarAndInAdditionalSubmenu + + + СоставГруппировки_ПереместитьВниз + 616 + true + true + + true + + + СоставГруппировки_ПереместитьВнизРасширеннаяПодсказка + 617 + Label + true + true + + Left + + + Form.Command.СоставГруппировки_ПереместитьВниз + Normal + Auto + true + true + UserCmds + Auto + InCommandBarAndInAdditionalSubmenu + + true + true + + true + + + <key>ru</key> + <value> </value> + + + ru + + + + КомандыСоставаГруппировки_ПриоритетРасширеннаяПодсказка + 613 + Label + true + true + + Left + + + + + true + true + + true + + + <key>ru</key> + <value> </value> + + + ru + + + + КомандыСоставаГруппировкиРасширеннаяПодсказка + 605 + Label + true + true + + Left + + + CommandBar + + Left + + + + СоставГруппировки + 624 + true + true + + true + + + СоставГруппировки + + None + Change + Copy + CopyToClipboard + EndEdit + HierarchicalList + List + MoveDown + MoveUp + OutputList + SelectAll + SortListAsc + SortListDesc + Tree + + СоставГруппировкиГруппа1 + 643 + + СоставГруппировкиИспользование + 659 + true + true + + true + + + СоставГруппировки.Использование + + + OnChange + СоставГруппировкиИспользованиеПриИзменении + + + СоставГруппировкиИспользованиеРасширеннаяПодсказка + 661 + Label + true + true + + Left + + + + СоставГруппировкиИспользованиеКонтекстноеМеню + 660 + true + + CheckBoxField + Auto + Left + true + + + + СоставГруппировкиПредставление + 662 + true + true + + true + + + СоставГруппировки.Представление + + + СоставГруппировкиПредставлениеРасширеннаяПодсказка + 664 + Label + true + true + + Left + + + + СоставГруппировкиПредставлениеКонтекстноеМеню + 663 + true + + InputField + Auto + true + Left + true + + true + true + true + true + true + true + Normal + + + true + true + + true + + + <key>ru</key> + <value> </value> + + + ru + + + + СоставГруппировкиГруппа1РасширеннаяПодсказка + 644 + Label + true + true + + Left + + + ColumnGroup + + InCell + auto + true + + + + СоставГруппировкиГруппа2 + 817 + + СоставГруппировкиТипГруппировки + 665 + true + true + + true + + + СоставГруппировки.ТипГруппировки + + + OnChange + СоставГруппировкиТипГруппировкиПриИзменении + + + СоставГруппировкиТипГруппировкиРасширеннаяПодсказка + 667 + Label + true + true + + Left + + + + СоставГруппировкиТипГруппировкиКонтекстноеМеню + 666 + true + + InputField + Auto + true + Left + true + + true + true + true + true + true + true + Normal + + + + СоставГруппировкиТипДополнения + 814 + true + true + + true + + + СоставГруппировки.ТипДополнения + + + OnChange + СоставГруппировкиТипДополненияПриИзменении + + + СоставГруппировкиТипДополненияРасширеннаяПодсказка + 816 + Label + true + true + + Left + + + + СоставГруппировкиТипДополненияКонтекстноеМеню + 815 + true + + InputField + Auto + true + Left + true + + true + true + true + true + true + true + Normal + + + true + true + + true + + + СоставГруппировкиГруппа2РасширеннаяПодсказка + 818 + Label + true + true + + Left + + + ColumnGroup + + Vertical + auto + true + + + Top + + СоставГруппировкиКоманднаяПанель + 626 + Left + + + Selection + СоставГруппировкиВыбор + + + BeforeAddRow + СоставГруппировкиПередНачаломДобавления + + + BeforeDeleteRow + СоставГруппировкиПередУдалением + + + СоставГруппировкиСтрокаПоиска + 628 + + СоставГруппировкиСтрокаПоискаРасширеннаяПодсказка + 632 + Label + true + true + + Left + + + + СоставГруппировкиСтрокаПоискаКонтекстноеМеню + 631 + true + + СоставГруппировки + + true + + + + СоставГруппировкиСостояниеПросмотра + 633 + + СоставГруппировкиСостояниеПросмотраРасширеннаяПодсказка + 637 + Label + true + true + + Left + + + + СоставГруппировкиСостояниеПросмотраКонтекстноеМеню + 636 + true + + ViewStatusAddition + СоставГруппировки + + true + + + + СоставГруппировкиУправлениеПоиском + 638 + + СоставГруппировкиУправлениеПоискомРасширеннаяПодсказка + 642 + Label + true + true + + Left + + + + СоставГруппировкиУправлениеПоискомКонтекстноеМеню + 641 + true + + SearchControlAddition + СоставГруппировки + + true + + + + СоставГруппировкиРасширеннаяПодсказка + 627 + Label + true + true + + Left + + + + СоставГруппировкиКонтекстноеМеню + 625 + + КомандыСоставаГруппировки_ДобавлениеУдаление1 + 647 + + СоставГруппировки_Добавить1 + 649 + + <key>ru</key> + <value>Добавить</value> + + true + true + + true + + + СоставГруппировки_Добавить1РасширеннаяПодсказка + 650 + Label + true + true + + Left + + + Form.Item.СоставГруппировки.StandardCommand.Add + Normal + PictureAndText + true + true + UserCmds + Auto + InCommandBarAndInAdditionalSubmenu + + + СоставГруппировки_Удалить1 + 651 + true + true + + true + + + СоставГруппировки_Удалить1РасширеннаяПодсказка + 652 + Label + true + true + + Left + + + Form.Item.СоставГруппировки.StandardCommand.Delete + Normal + Picture + true + true + UserCmds + Auto + InCommandBarAndInAdditionalSubmenu + + true + true + + true + + + <key>ru</key> + <value> </value> + + + ru + + + + КомандыСоставаГруппировки_ДобавлениеУдаление1РасширеннаяПодсказка + 648 + Label + true + true + + Left + + + + + + КомандыСоставаГруппировки_Приоритет1 + 653 + + СоставГруппировки_ПереместитьВверх1 + 655 + true + true + + true + + + СоставГруппировки_ПереместитьВверх1РасширеннаяПодсказка + 656 + Label + true + true + + Left + + + Form.Command.СоставГруппировки_ПереместитьВверх + Normal + Auto + true + true + UserCmds + Auto + InCommandBarAndInAdditionalSubmenu + + + СоставГруппировки_ПереместитьВниз1 + 657 + true + true + + true + + + СоставГруппировки_ПереместитьВниз1РасширеннаяПодсказка + 658 + Label + true + true + + Left + + + Form.Command.СоставГруппировки_ПереместитьВниз + Normal + Auto + true + true + UserCmds + Auto + InCommandBarAndInAdditionalSubmenu + + true + true + + true + + + <key>ru</key> + <value> </value> + + + ru + + + + КомандыСоставаГруппировки_Приоритет1РасширеннаяПодсказка + 654 + Label + true + true + + Left + + + + + + Tree + true + true + true + true + true + true + AfterCurrentRow + MultiRow +
              true
              + 1 + 1 + AutoUse + AutoUse + true + true + false + false + false + false + false + DontUse + Auto + ExpandAllLevels + true + true + true + true + + СоставГруппировки.ИндексКартинки + + + CommonPicture.ПиктограммыНастроекОтчета + + true +
              + true + true + + true + + + <key>ru</key> + <value>Состав группировки</value> + + + ru + Страница состав группировки + + + СтраницаСоставГруппировкиРасширеннаяПодсказка + 586 + Label + true + true + + Left + + + Page + + + StdPicture.DataCompositionGroupFields + + Vertical + auto + +
              + + СтраницаОтборы + 320 + + БыстрыеОтборы + 98 + true + true + + true + + + <key>ru</key> + <value>Быстрые отборы</value> + + + ru + Быстрые отборы + + + БыстрыеОтборыРасширеннаяПодсказка + 99 + Label + true + true + + Left + + + UsualGroup + + Auto + NormalSeparation + true + true + Auto + Auto + + + + ОбычныеОтборы + 39 + true + true + + true + + + <key>ru</key> + <value> </value> + + + ru + + + + ОбычныеОтборыРасширеннаяПодсказка + 40 + Label + true + true + + Left + + + UsualGroup + + Auto + true + true + Auto + Auto + + + + ГруппаОтборыРасширенныйРежим + 924 + + Отборы + 342 + true + true + + true + + + Отборы + + None + Change + Copy + CopyToClipboard + EndEdit + HierarchicalList + List + MoveDown + MoveUp + OutputList + SelectAll + SortListAsc + SortListDesc + Tree + + ОтборыГруппа1 + 361 + + ОтборыИспользование + 363 + true + true + + true + + + Отборы.Использование + + + OnChange + ОтборыИспользованиеПриИзменении + + + ОтборыИспользованиеРасширеннаяПодсказка + 365 + Label + true + true + + Left + + + + ОтборыИспользованиеКонтекстноеМеню + 364 + true + + CheckBoxField + Auto + Left + true + + + + ОтборыПредставление + 366 + true + true + + true + + + Отборы.Представление + + + ОтборыПредставлениеРасширеннаяПодсказка + 368 + Label + true + true + + Left + + + + ОтборыПредставлениеКонтекстноеМеню + 367 + true + + InputField + true + Auto + true + Left + true + + true + true + true + true + true + true + Normal + + + true + true + + true + + + <key>ru</key> + <value> </value> + + + ru + + + + ОтборыГруппа1РасширеннаяПодсказка + 362 + Label + true + true + + Left + + + ColumnGroup + + InCell + auto + true + + + + ОтборыУсловие + 375 + true + true + + true + + + Отборы.Условие + + + ОтборыУсловиеРасширеннаяПодсказка + 377 + Label + true + true + + Left + + + + ОтборыУсловиеКонтекстноеМеню + 376 + true + + InputField + true + Auto + true + Left + true + + true + true + true + true + true + true + Normal + + + Items.Отборы.CurrentData.ТипУсловия + + + + + + ОтборыГруппа2 + 804 + + ОтборыЗначение + 372 + true + true + + true + + + Отборы.Значение + + + OnChange + ОтборыЗначениеПриИзменении + + + ОтборыЗначениеРасширеннаяПодсказка + 374 + Label + true + true + + Left + + + + ОтборыЗначениеКонтекстноеМеню + 373 + true + + InputField + Enter + true + Left + true + + true + true + true + true + true + true + Normal + + + Items.Отборы.CurrentData.ТипЗначения + + + + + + ОтборыПредставлениеЗначения + 801 + true + true + + true + + + Отборы.ПредставлениеЗначения + + + ОтборыПредставлениеЗначенияРасширеннаяПодсказка + 803 + Label + true + true + + Left + + + + ОтборыПредставлениеЗначенияКонтекстноеМеню + 802 + true + + InputField + Auto + true + Left + true + + true + true + true + true + true + true + Normal + + + true + true + + true + + + ОтборыГруппа2РасширеннаяПодсказка + 805 + Label + true + true + + Left + + + ColumnGroup + + Vertical + auto + true + + + + ОтборыИндексКартинкиДоступа + 369 + true + true + + true + + + Отборы.ИндексКартинкиДоступа + + None + + ru + Размещение определяет где и как виден этот параметр или отбор. + + + ОтборыИндексКартинкиДоступаРасширеннаяПодсказка + 371 + Label + true + true + + Left + + + + ОтборыИндексКартинкиДоступаКонтекстноеМеню + 370 + true + + PictureField + Auto + true + + CommonPicture.БыстрыйДоступ + + Left + true + + 2 + true + true + true + + CommonPicture.ПиктограммыДоступаКНастройкамОтчета + + + + 1 + + + + + ОтборыЗаголовок + 378 + true + true + + true + + + Отборы.Заголовок + + + OnChange + ОтборыЗаголовокПриИзменении + + + ОтборыЗаголовокРасширеннаяПодсказка + 380 + Label + true + true + + Left + + + + ОтборыЗаголовокКонтекстноеМеню + 379 + true + + InputField + Auto + true + Left + true + + true + true + true + true + true + true + true + Normal + + + Top + + ОтборыКоманднаяПанель + 344 + + КомандыОтборов_ДобавлениеУдаление + 324 + + Отборы_Добавить + 326 + + <key>ru</key> + <value>Добавить отбор</value> + + true + true + + true + + + Отборы_ДобавитьРасширеннаяПодсказка + 327 + Label + true + true + + Left + + + Form.Item.Отборы.StandardCommand.Add + Normal + PictureAndText + true + true + UserCmds + Auto + InCommandBarAndInAdditionalSubmenu + + + Отборы_Удалить + 328 + true + true + + true + + + Отборы_УдалитьРасширеннаяПодсказка + 329 + Label + true + true + + Left + + + Form.Item.Отборы.StandardCommand.Delete + Normal + Picture + true + true + UserCmds + Auto + InCommandBarAndInAdditionalSubmenu + + true + true + + true + + + <key>ru</key> + <value> </value> + + + ru + + + + КомандыОтборов_ДобавлениеУдалениеРасширеннаяПодсказка + 325 + Label + true + true + + Left + + + + + + КомандыОтборов_Приоритет + 415 + + Отборы_ПереместитьВверх + 417 + true + true + + true + + + Отборы_ПереместитьВверхРасширеннаяПодсказка + 418 + Label + true + true + + Left + + + Form.Command.Отборы_ПереместитьВверх + Normal + Auto + true + true + UserCmds + Auto + + + Отборы_ПереместитьВниз + 419 + true + true + + true + + + Отборы_ПереместитьВнизРасширеннаяПодсказка + 420 + Label + true + true + + Left + + + Form.Command.Отборы_ПереместитьВниз + Normal + Auto + true + true + UserCmds + Auto + + true + true + + true + + + <key>ru</key> + <value> </value> + + + ru + + + + КомандыОтборов_ПриоритетРасширеннаяПодсказка + 416 + Label + true + true + + Left + + + + + + КомандыОтборов_Группы + 336 + + Отборы_Сгруппировать + 338 + true + true + + true + + + Отборы_СгруппироватьРасширеннаяПодсказка + 339 + Label + true + true + + Left + + + Form.Command.Отборы_Сгруппировать + Normal + Auto + true + true + UserCmds + + StdPicture.CreateFolder + + Auto + InAdditionalSubmenu + + + Отборы_Разгруппировать + 340 + true + true + + true + + + Отборы_РазгруппироватьРасширеннаяПодсказка + 341 + Label + true + true + + Left + + + Form.Command.Отборы_Разгруппировать + Normal + Auto + true + true + UserCmds + Auto + InAdditionalSubmenu + + true + true + + true + + + <key>ru</key> + <value> </value> + + + ru + + + + КомандыОтборов_ГруппыРасширеннаяПодсказка + 337 + Label + true + true + + Left + + + + + + КомандыОтборов_Флажки + 1059 + + ОтборыОтборы_УстановитьФлажки + 1061 + true + true + + true + + + ОтборыОтборы_УстановитьФлажкиРасширеннаяПодсказка + 1062 + Label + true + true + + Left + + + Form.Command.Отборы_УстановитьФлажки + Normal + Auto + true + true + UserCmds + Auto + + + ОтборыОтборы_СнятьФлажки + 1063 + true + true + + true + + + ОтборыОтборы_СнятьФлажкиРасширеннаяПодсказка + 1064 + Label + true + true + + Left + + + Form.Command.Отборы_СнятьФлажки + Normal + Auto + true + true + UserCmds + Auto + + true + true + + true + + + <key>ru</key> + <value>Команды отборов флажки</value> + + + ru + Команды отборов флажки + + + КомандыОтборов_ФлажкиРасширеннаяПодсказка + 1060 + Label + true + true + + Left + + + + + Left + + + Selection + ОтборыВыбор + + + BeforeAddRow + ОтборыПередНачаломДобавления + + + BeforeDeleteRow + ОтборыПередУдалением + + + OnActivateRow + ОтборыПриАктивизацииСтроки + + + ОтборыСтрокаПоиска + 346 + + ОтборыСтрокаПоискаРасширеннаяПодсказка + 350 + Label + true + true + + Left + + + + ОтборыСтрокаПоискаКонтекстноеМеню + 349 + true + + Отборы + + true + + + + ОтборыСостояниеПросмотра + 351 + + ОтборыСостояниеПросмотраРасширеннаяПодсказка + 355 + Label + true + true + + Left + + + + ОтборыСостояниеПросмотраКонтекстноеМеню + 354 + true + + ViewStatusAddition + Отборы + + true + + + + ОтборыУправлениеПоиском + 356 + + ОтборыУправлениеПоискомРасширеннаяПодсказка + 360 + Label + true + true + + Left + + + + ОтборыУправлениеПоискомКонтекстноеМеню + 359 + true + + SearchControlAddition + Отборы + + true + + + + ОтборыРасширеннаяПодсказка + 345 + Label + true + true + + Left + + + + ОтборыКонтекстноеМеню + 343 + + КомандыОтборов_ДобавлениеУдаление1 + 403 + + Отборы_Добавить1 + 405 + + <key>ru</key> + <value>Добавить отбор</value> + + true + true + + true + + + Отборы_Добавить1РасширеннаяПодсказка + 406 + Label + true + true + + Left + + + Form.Item.Отборы.StandardCommand.Add + Normal + PictureAndText + true + true + UserCmds + Auto + InCommandBarAndInAdditionalSubmenu + + + Отборы_Удалить1 + 407 + true + true + + true + + + Отборы_Удалить1РасширеннаяПодсказка + 408 + Label + true + true + + Left + + + Form.Item.Отборы.StandardCommand.Delete + Normal + Picture + true + true + UserCmds + Auto + InCommandBarAndInAdditionalSubmenu + + true + true + + true + + + <key>ru</key> + <value> </value> + + + ru + + + + КомандыОтборов_ДобавлениеУдаление1РасширеннаяПодсказка + 404 + Label + true + true + + Left + + + + + + КомандыОтборов_Приоритет1 + 421 + + Отборы_ПереместитьВверх1 + 423 + true + true + + true + + + Отборы_ПереместитьВверх1РасширеннаяПодсказка + 424 + Label + true + true + + Left + + + Form.Command.Отборы_ПереместитьВверх + Normal + Auto + true + true + UserCmds + Auto + + + Отборы_ПереместитьВниз1 + 425 + true + true + + true + + + Отборы_ПереместитьВниз1РасширеннаяПодсказка + 426 + Label + true + true + + Left + + + Form.Command.Отборы_ПереместитьВниз + Normal + Auto + true + true + UserCmds + Auto + + true + true + + true + + + <key>ru</key> + <value> </value> + + + ru + + + + КомандыОтборов_Приоритет1РасширеннаяПодсказка + 422 + Label + true + true + + Left + + + + + + КомандыОтборов_Группы1 + 409 + + Отборы_Сгруппировать1 + 411 + true + true + + true + + + Отборы_Сгруппировать1РасширеннаяПодсказка + 412 + Label + true + true + + Left + + + Form.Command.Отборы_Сгруппировать + Normal + Auto + true + true + UserCmds + + StdPicture.CreateFolder + + Auto + InAdditionalSubmenu + + + Отборы_Разгруппировать1 + 413 + true + true + + true + + + Отборы_Разгруппировать1РасширеннаяПодсказка + 414 + Label + true + true + + Left + + + Form.Command.Отборы_Разгруппировать + Normal + Auto + true + true + UserCmds + Auto + InAdditionalSubmenu + + true + true + + true + + + <key>ru</key> + <value> </value> + + + ru + + + + КомандыОтборов_Группы1РасширеннаяПодсказка + 410 + Label + true + true + + Left + + + + + + КомандыОтборов_Флажки1 + 1065 + + ОтборыОтборы_УстановитьФлажки1 + 1067 + true + true + + true + + + ОтборыОтборы_УстановитьФлажки1РасширеннаяПодсказка + 1068 + Label + true + true + + Left + + + Form.Command.Отборы_УстановитьФлажки + Normal + Auto + true + true + UserCmds + Auto + + + ОтборыОтборы_СнятьФлажки1 + 1069 + true + true + + true + + + ОтборыОтборы_СнятьФлажки1РасширеннаяПодсказка + 1070 + Label + true + true + + Left + + + Form.Command.Отборы_СнятьФлажки + Normal + Auto + true + true + UserCmds + Auto + + true + true + + true + + + <key>ru</key> + <value>Команды отборов флажки</value> + + + ru + Команды отборов флажки + + + КомандыОтборов_Флажки1РасширеннаяПодсказка + 1066 + Label + true + true + + Left + + + + + + Tree + true + true + true + true + true + AfterCurrentRow + MultiRow +
              true
              + 1 + 1 + AutoUse + AutoUse + true + true + false + false + false + false + false + DontUse + Auto + ExpandAllLevels + true + true + + Отборы.ИндексКартинки + + + CommonPicture.ПиктограммыПараметровИОтборов + + true +
              + + ГруппаЕстьВложенныеОтборы + 806 + + КартинкаИнформация1 + 808 + + <key>ru</key> + <value>Картинка информация</value> + + true + true + + true + + + КартинкаИнформация1РасширеннаяПодсказка + 810 + Label + true + true + + Left + + + + КартинкаИнформация1КонтекстноеМеню + 809 + true + + 2 + true + 1 + true + + + CommonPicture.Информация + + + + + ПодсказкаЕстьВложенныеОтборы + 811 + + <key>ru</key> + <value>В отчете имеются вложенные отборы, которые можно настроить на странице <b>Структура</>.</value> + + true + true + + true + + + ПодсказкаЕстьВложенныеОтборыРасширеннаяПодсказка + 813 + Label + true + true + + Left + + + + ПодсказкаЕстьВложенныеОтборыКонтекстноеМеню + 812 + true + + true + Label + true + true + + Style.ПоясняющийТекст + + + + URLProcessing + ПодсказкаЕстьВложенныеОтчетыОбработкаНавигационнойСсылки + + Left + + + true + true + + true + + + <key>ru</key> + <value>Группа есть вложенные отборы</value> + + + ru + Группа есть вложенные отборы + + + ГруппаЕстьВложенныеОтборыРасширеннаяПодсказка + 807 + Label + true + true + + Left + + + UsualGroup + + Auto + true + true + Auto + Auto + + + true + true + + true + + + <key>ru</key> + <value>Группа отборы расширенный режим</value> + + + ru + Группа отборы расширенный режим + + + ГруппаОтборыРасширенныйРежимРасширеннаяПодсказка + 925 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + true + true + Auto + Auto + +
              + true + true + + true + + + <key>ru</key> + <value>Отборы</value> + + + ru + Страница выбранные поля + + + СтраницаОтборыРасширеннаяПодсказка + 321 + Label + true + true + + Left + + + Page + + + CommonPicture.Отборы + + Vertical + auto + +
              + + СтраницаВыбранныеПоляИСортировки + 126 + + ГруппаПоляИСортировки + 900 + + ВыбранныеПоля + 230 + true + true + + true + + + ВыбранныеПоля + + None + Change + Copy + CopyToClipboard + EndEdit + HierarchicalList + List + MoveDown + MoveUp + OutputList + SelectAll + SortListAsc + SortListDesc + Tree + + ВыбранныеПоляГруппа1 + 257 + + ВыбранныеПоляИспользование + 259 + true + true + + true + + + ВыбранныеПоля.Использование + + + OnChange + ВыбранныеПоляИспользованиеПриИзменении + + + ВыбранныеПоляИспользованиеРасширеннаяПодсказка + 261 + Label + true + true + + Left + + + + ВыбранныеПоляИспользованиеКонтекстноеМеню + 260 + true + + CheckBoxField + Auto + Left + true + + + + ВыбранныеПоляПредставление + 262 + true + true + + true + + + ВыбранныеПоля.Представление + + + ВыбранныеПоляПредставлениеРасширеннаяПодсказка + 264 + Label + true + true + + Left + + + + ВыбранныеПоляПредставлениеКонтекстноеМеню + 263 + true + + InputField + true + Auto + true + Left + true + + true + true + true + true + true + true + Normal + + + true + true + + true + + + <key>ru</key> + <value>Выбранные поля группа1</value> + + + ru + Выбранные поля группа1 + + + ВыбранныеПоляГруппа1РасширеннаяПодсказка + 258 + Label + true + true + + Left + + + ColumnGroup + + InCell + auto + true + + + Top + + ВыбранныеПоляКоманднаяПанель + 232 + + КомандыВыбранныхПолей_ДобавлениеУдаление + 212 + + ВыбранныеПоля_Добавить + 214 + + <key>ru</key> + <value>Добавить</value> + + true + true + + true + + + ВыбранныеПоля_ДобавитьРасширеннаяПодсказка + 215 + Label + true + true + + Left + + + Form.Item.ВыбранныеПоля.StandardCommand.Add + Normal + PictureAndText + true + true + UserCmds + Auto + InCommandBarAndInAdditionalSubmenu + + + ВыбранныеПоля_Удалить + 216 + true + true + + true + + + ВыбранныеПоля_УдалитьРасширеннаяПодсказка + 217 + Label + true + true + + Left + + + Form.Item.ВыбранныеПоля.StandardCommand.Delete + Normal + Picture + true + true + UserCmds + Auto + InCommandBarAndInAdditionalSubmenu + + true + true + + true + + + <key>ru</key> + <value> </value> + + + ru + + + + КомандыВыбранныхПолей_ДобавлениеУдалениеРасширеннаяПодсказка + 213 + Label + true + true + + Left + + + + + + КомандыВыбранныхПолей_Приоритет + 218 + + ВыбранныеПоля_ПереместитьВверх + 220 + true + true + + true + + + ВыбранныеПоля_ПереместитьВверхРасширеннаяПодсказка + 221 + Label + true + true + + Left + + + Form.Command.ВыбранныеПоля_ПереместитьВверх + Normal + Auto + true + true + UserCmds + Auto + InCommandBarAndInAdditionalSubmenu + + + ВыбранныеПоля_ПереместитьВниз + 222 + true + true + + true + + + ВыбранныеПоля_ПереместитьВнизРасширеннаяПодсказка + 223 + Label + true + true + + Left + + + Form.Command.ВыбранныеПоля_ПереместитьВниз + Normal + Auto + true + true + UserCmds + Auto + InCommandBarAndInAdditionalSubmenu + + true + true + + true + + + <key>ru</key> + <value> </value> + + + ru + + + + КомандыВыбранныхПолей_ПриоритетРасширеннаяПодсказка + 219 + Label + true + true + + Left + + + + + + КомандыВыбранныхПолей_Группы + 284 + + ВыбранныеПоля_Сгруппировать + 288 + true + true + + true + + + ВыбранныеПоля_СгруппироватьРасширеннаяПодсказка + 289 + Label + true + true + + Left + + + Form.Command.ВыбранныеПоля_Сгруппировать + Normal + Auto + true + true + UserCmds + + StdPicture.CreateFolder + + Auto + InAdditionalSubmenu + + + ВыбранныеПоля_Разгруппировать + 290 + true + true + + true + + + ВыбранныеПоля_РазгруппироватьРасширеннаяПодсказка + 291 + Label + true + true + + Left + + + Form.Command.ВыбранныеПоля_Разгруппировать + Normal + Auto + true + true + UserCmds + Auto + InAdditionalSubmenu + + true + true + + true + + + <key>ru</key> + <value>Команды выбранных полей группы</value> + + + ru + Команды выбранных полей группы + + + КомандыВыбранныхПолей_ГруппыРасширеннаяПодсказка + 285 + Label + true + true + + Left + + + + + + КомандыВыбранныхПолей_Флажки + 1035 + + ВыбранныеПоляВыбранныеПоля_УстановитьФлажки + 1037 + true + true + + true + + + ВыбранныеПоляВыбранныеПоля_УстановитьФлажкиРасширеннаяПодсказка + 1038 + Label + true + true + + Left + + + Form.Command.ВыбранныеПоля_УстановитьФлажки + Normal + Auto + true + true + UserCmds + Auto + + + ВыбранныеПоляВыбранныеПоля_СнятьФлажки + 1039 + true + true + + true + + + ВыбранныеПоляВыбранныеПоля_СнятьФлажкиРасширеннаяПодсказка + 1040 + Label + true + true + + Left + + + Form.Command.ВыбранныеПоля_СнятьФлажки + Normal + Auto + true + true + UserCmds + Auto + + true + true + + true + + + <key>ru</key> + <value>Команды выбранных полей флажки</value> + + + ru + Команды выбранных полей флажки + + + КомандыВыбранныхПолей_ФлажкиРасширеннаяПодсказка + 1036 + Label + true + true + + Left + + + + + Left + + + DragCheck + ВыбранныеПоляПроверкаПеретаскивания + + + Selection + ВыбранныеПоляВыбор + + + BeforeAddRow + ВыбранныеПоляПередНачаломДобавления + + + BeforeDeleteRow + ВыбранныеПоляПередУдалением + + + DragStart + ВыбранныеПоляНачалоПеретаскивания + + + Drag + ВыбранныеПоляПеретаскивание + + + DragEnd + ВыбранныеПоляОкончаниеПеретаскивания + + + ВыбранныеПоляСтрокаПоиска + 234 + + ВыбранныеПоляСтрокаПоискаРасширеннаяПодсказка + 238 + Label + true + true + + Left + + + + ВыбранныеПоляСтрокаПоискаКонтекстноеМеню + 237 + true + + ВыбранныеПоля + + true + + + + ВыбранныеПоляСостояниеПросмотра + 239 + + ВыбранныеПоляСостояниеПросмотраРасширеннаяПодсказка + 243 + Label + true + true + + Left + + + + ВыбранныеПоляСостояниеПросмотраКонтекстноеМеню + 242 + true + + ViewStatusAddition + ВыбранныеПоля + + true + + + + ВыбранныеПоляУправлениеПоиском + 244 + + ВыбранныеПоляУправлениеПоискомРасширеннаяПодсказка + 248 + Label + true + true + + Left + + + + ВыбранныеПоляУправлениеПоискомКонтекстноеМеню + 247 + true + + SearchControlAddition + ВыбранныеПоля + + true + + + + ВыбранныеПоляРасширеннаяПодсказка + 233 + Label + true + true + + Left + + + + ВыбранныеПоляКонтекстноеМеню + 231 + + КомандыВыбранныхПолей_ДобавлениеУдаление1 + 397 + + ВыбранныеПоля_Добавить1 + 399 + + <key>ru</key> + <value>Добавить</value> + + true + true + + true + + + ВыбранныеПоля_Добавить1РасширеннаяПодсказка + 400 + Label + true + true + + Left + + + Form.Item.ВыбранныеПоля.StandardCommand.Add + Normal + PictureAndText + true + true + UserCmds + Auto + InCommandBarAndInAdditionalSubmenu + + + ВыбранныеПоля_Удалить1 + 401 + true + true + + true + + + ВыбранныеПоля_Удалить1РасширеннаяПодсказка + 402 + Label + true + true + + Left + + + Form.Item.ВыбранныеПоля.StandardCommand.Delete + Normal + Picture + true + true + UserCmds + Auto + InCommandBarAndInAdditionalSubmenu + + true + true + + true + + + <key>ru</key> + <value> </value> + + + ru + + + + КомандыВыбранныхПолей_ДобавлениеУдаление1РасширеннаяПодсказка + 398 + Label + true + true + + Left + + + + + + КомандыВыбранныхПолей_Приоритет1 + 391 + + ВыбранныеПоля_ПереместитьВверх1 + 393 + true + true + + true + + + ВыбранныеПоля_ПереместитьВверх1РасширеннаяПодсказка + 394 + Label + true + true + + Left + + + Form.Command.ВыбранныеПоля_ПереместитьВверх + Normal + Auto + true + true + UserCmds + Auto + InCommandBarAndInAdditionalSubmenu + + + ВыбранныеПоля_ПереместитьВниз1 + 395 + true + true + + true + + + ВыбранныеПоля_ПереместитьВниз1РасширеннаяПодсказка + 396 + Label + true + true + + Left + + + Form.Command.ВыбранныеПоля_ПереместитьВниз + Normal + Auto + true + true + UserCmds + Auto + InCommandBarAndInAdditionalSubmenu + + true + true + + true + + + <key>ru</key> + <value> </value> + + + ru + + + + КомандыВыбранныхПолей_Приоритет1РасширеннаяПодсказка + 392 + Label + true + true + + Left + + + + + + КомандыВыбранныхПолей_Группы1 + 385 + + ВыбранныеПоля_Сгруппировать1 + 387 + true + true + + true + + + ВыбранныеПоля_Сгруппировать1РасширеннаяПодсказка + 388 + Label + true + true + + Left + + + Form.Command.ВыбранныеПоля_Сгруппировать + Normal + Auto + true + true + UserCmds + + StdPicture.CreateFolder + + Auto + InAdditionalSubmenu + + + ВыбранныеПоля_Разгруппировать1 + 389 + true + true + + true + + + ВыбранныеПоля_Разгруппировать1РасширеннаяПодсказка + 390 + Label + true + true + + Left + + + Form.Command.ВыбранныеПоля_Разгруппировать + Normal + Auto + true + true + UserCmds + Auto + InAdditionalSubmenu + + true + true + + true + + + <key>ru</key> + <value>Команды выбранных полей группы</value> + + + ru + Команды выбранных полей группы + + + КомандыВыбранныхПолей_Группы1РасширеннаяПодсказка + 386 + Label + true + true + + Left + + + + + + КомандыВыбранныхПолей_Флажки1 + 1041 + + ВыбранныеПоляВыбранныеПоля_УстановитьФлажки1 + 1043 + true + true + + true + + + ВыбранныеПоляВыбранныеПоля_УстановитьФлажки1РасширеннаяПодсказка + 1044 + Label + true + true + + Left + + + Form.Command.ВыбранныеПоля_УстановитьФлажки + Normal + Auto + true + true + UserCmds + Auto + + + ВыбранныеПоляВыбранныеПоля_СнятьФлажки1 + 1045 + true + true + + true + + + ВыбранныеПоляВыбранныеПоля_СнятьФлажки1РасширеннаяПодсказка + 1046 + Label + true + true + + Left + + + Form.Command.ВыбранныеПоля_СнятьФлажки + Normal + Auto + true + true + UserCmds + Auto + + true + true + + true + + + <key>ru</key> + <value>Команды выбранных полей флажки</value> + + + ru + Команды выбранных полей флажки + + + КомандыВыбранныхПолей_Флажки1РасширеннаяПодсказка + 1042 + Label + true + true + + Left + + + + + + Tree + true + true + true + true + true + AfterCurrentRow + MultiRow + 1 + 1 + AutoUse + AutoUse + true + true + false + false + false + false + false + DontUse + Auto + ExpandAllLevels + true + true + true + true + + ВыбранныеПоля.ИндексКартинки + + + CommonPicture.ПиктограммыНастроекОтчета + + true + + + ГруппаСортировки + 1013 + + КомандыПолейИСортировок + 902 + + Декорация1 + 904 + true + true + + true + + + Декорация1РасширеннаяПодсказка + 906 + Label + true + true + + Left + + + + Декорация1КонтекстноеМеню + 905 + true + + Label + true + true + true + + Left + + + + ВыбранныеПоля_Сортировка_Вправо + 907 + true + true + + true + + + ВыбранныеПоля_Сортировка_ВправоРасширеннаяПодсказка + 908 + Label + true + true + + Left + + + UsualButton + Form.Command.ВыбранныеПоля_Сортировка_Вправо + Normal + Auto + true + true + UserCmds + Auto + + + ВыбранныеПоля_Сортировка_Влево + 909 + true + true + + true + + + ВыбранныеПоля_Сортировка_ВлевоРасширеннаяПодсказка + 910 + Label + true + true + + Left + + + UsualButton + Form.Command.ВыбранныеПоля_Сортировка_Влево + Normal + Auto + true + true + UserCmds + Auto + + + ВыбранныеПоля_Сортировка_ВлевоВсе + 911 + true + true + + true + + + ВыбранныеПоля_Сортировка_ВлевоВсеРасширеннаяПодсказка + 912 + Label + true + true + + Left + + + UsualButton + Form.Command.ВыбранныеПоля_Сортировка_ВлевоВсе + Normal + Auto + true + true + UserCmds + Auto + + + Декорация2 + 913 + true + true + + true + + + Декорация2РасширеннаяПодсказка + 915 + Label + true + true + + Left + + + + Декорация2КонтекстноеМеню + 914 + true + + Label + true + true + true + + Left + + + + Декорация3 + 1010 + true + true + + true + + + Декорация3РасширеннаяПодсказка + 1012 + Label + true + true + + Left + + + + Декорация3КонтекстноеМеню + 1011 + true + + Label + true + true + + Left + + + true + true + + true + + + <key>ru</key> + <value>Команды полей и сортировок</value> + + + ru + Команды полей и сортировок + + + КомандыПолейИСортировокРасширеннаяПодсказка + 903 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + true + true + Auto + Auto + + + + Сортировка + 130 + true + true + + true + + + Сортировка + + None + Change + Copy + CopyToClipboard + EndEdit + MoveDown + MoveUp + OutputList + SelectAll + SortListAsc + SortListDesc + + СортировкаГруппа1 + 163 + + СортировкаИспользование + 773 + true + true + + true + + + Сортировка.Использование + + + OnChange + СортировкаИспользованиеПриИзменении + + + СортировкаИспользованиеРасширеннаяПодсказка + 775 + Label + true + true + + Left + + + + СортировкаИспользованиеКонтекстноеМеню + 774 + true + + CheckBoxField + Auto + true + Left + true + + + + СортировкаПредставление + 155 + true + true + + true + + + Сортировка.Представление + + + СортировкаПредставлениеРасширеннаяПодсказка + 157 + Label + true + true + + Left + + + + СортировкаПредставлениеКонтекстноеМеню + 156 + true + + InputField + true + Auto + true + Left + true + + true + true + true + true + true + true + Normal + + + true + true + + true + + + СортировкаГруппа1РасширеннаяПодсказка + 164 + Label + true + true + + Left + + + ColumnGroup + + InCell + auto + true + + + + СортировкаНаправление + 158 + true + true + + true + + + Сортировка.Направление + + + СортировкаНаправлениеРасширеннаяПодсказка + 160 + Label + true + true + + Left + + + + СортировкаНаправлениеКонтекстноеМеню + 159 + true + + LabelField + Auto + Right + true + true + Left + true + Show + Always + + 12 + true + true + false + true + + + Top + + СортировкаКоманднаяПанель + 132 + + КомандыСортировки_ДобавлениеУдаление + 204 + + Сортировка_Добавить + 206 + true + true + + true + + + Сортировка_ДобавитьРасширеннаяПодсказка + 207 + Label + true + true + + Left + + + Form.Item.Сортировка.StandardCommand.Add + Normal + PictureAndText + true + true + UserCmds + Auto + InCommandBarAndInAdditionalSubmenu + + + Сортировка_Удалить + 208 + true + true + + true + + + Сортировка_УдалитьРасширеннаяПодсказка + 209 + Label + true + true + + Left + + + Form.Item.Сортировка.StandardCommand.Delete + Normal + Picture + true + true + UserCmds + Auto + InCommandBarAndInAdditionalSubmenu + + true + true + + true + + + <key>ru</key> + <value>Команды сортировки добавление удаление</value> + + + ru + Команды сортировки добавление удаление + + + КомандыСортировки_ДобавлениеУдалениеРасширеннаяПодсказка + 205 + Label + true + true + + Left + + + + + + КомандыСортировки_Приоритет + 175 + + Сортировка_ПереместитьВверх + 165 + true + true + + true + + + Сортировка_ПереместитьВверхРасширеннаяПодсказка + 166 + Label + true + true + + Left + + + Form.Command.Сортировка_ПереместитьВверх + Normal + Auto + true + true + UserCmds + Auto + + + Сортировка_ПереместитьВниз + 167 + true + true + + true + + + Сортировка_ПереместитьВнизРасширеннаяПодсказка + 168 + Label + true + true + + Left + + + Form.Command.Сортировка_ПереместитьВниз + Normal + Auto + true + true + UserCmds + Auto + + true + true + + true + + + <key>ru</key> + <value>Команды сортировки приоритет</value> + + + ru + Команды сортировки приоритет + + + КомандыСортировки_ПриоритетРасширеннаяПодсказка + 176 + Label + true + true + + Left + + + + + + КомандыСортировки_Направление + 173 + + Сортировка_ПоВозрастанию + 169 + true + + true + + + Сортировка_ПоВозрастаниюРасширеннаяПодсказка + 170 + Label + true + true + + Left + + + Form.Command.Сортировка_ПоВозрастанию + Normal + Auto + true + true + UserCmds + Auto + + + Сортировка_ПоУбыванию + 171 + true + + true + + + Сортировка_ПоУбываниюРасширеннаяПодсказка + 172 + Label + true + true + + Left + + + Form.Command.Сортировка_ПоУбыванию + Normal + Auto + true + true + UserCmds + Auto + + true + true + + true + + + <key>ru</key> + <value>Команды сортировки направление</value> + + + ru + Команды сортировки направление + + + КомандыСортировки_НаправлениеРасширеннаяПодсказка + 174 + Label + true + true + + Left + + + + + + КомандыСортировки_Флажки + 1047 + + СортировкаСортировка_УстановитьФлажки + 1049 + true + true + + true + + + СортировкаСортировка_УстановитьФлажкиРасширеннаяПодсказка + 1050 + Label + true + true + + Left + + + Form.Command.Сортировка_УстановитьФлажки + Normal + Auto + true + true + UserCmds + Auto + + + СортировкаСортировка_СнятьФлажки + 1051 + true + true + + true + + + СортировкаСортировка_СнятьФлажкиРасширеннаяПодсказка + 1052 + Label + true + true + + Left + + + Form.Command.Сортировка_СнятьФлажки + Normal + Auto + true + true + UserCmds + Auto + + true + true + + true + + + <key>ru</key> + <value>Команды сортировки флажки</value> + + + ru + Команды сортировки флажки + + + КомандыСортировки_ФлажкиРасширеннаяПодсказка + 1048 + Label + true + true + + Left + + + + + Left + + + DragCheck + СортировкаПроверкаПеретаскивания + + + Selection + СортировкаВыбор + + + BeforeAddRow + СортировкаПередНачаломДобавления + + + BeforeDeleteRow + СортировкаПередУдалением + + + DragStart + СортировкаНачалоПеретаскивания + + + Drag + СортировкаПеретаскивание + + + DragEnd + СортировкаОкончаниеПеретаскивания + + + СортировкаСтрокаПоиска + 134 + + СортировкаСтрокаПоискаРасширеннаяПодсказка + 138 + Label + true + true + + Left + + + + СортировкаСтрокаПоискаКонтекстноеМеню + 137 + true + + Сортировка + + true + + + + СортировкаСостояниеПросмотра + 139 + + СортировкаСостояниеПросмотраРасширеннаяПодсказка + 143 + Label + true + true + + Left + + + + СортировкаСостояниеПросмотраКонтекстноеМеню + 142 + true + + ViewStatusAddition + Сортировка + + true + + + + СортировкаУправлениеПоиском + 144 + + СортировкаУправлениеПоискомРасширеннаяПодсказка + 148 + Label + true + true + + Left + + + + СортировкаУправлениеПоискомКонтекстноеМеню + 147 + true + + SearchControlAddition + Сортировка + + true + + + + СортировкаРасширеннаяПодсказка + 133 + Label + true + true + + Left + + + + СортировкаКонтекстноеМеню + 131 + + КомандыСортировки_ДобавлениеУдаление1 + 1015 + + Сортировка_Добавить2 + 1017 + true + true + + true + + + Сортировка_Добавить2РасширеннаяПодсказка + 1018 + Label + true + true + + Left + + + Form.Item.Сортировка.StandardCommand.Add + Normal + PictureAndText + true + true + UserCmds + Auto + InCommandBarAndInAdditionalSubmenu + + + Сортировка_Удалить2 + 1019 + true + true + + true + + + Сортировка_Удалить2РасширеннаяПодсказка + 1020 + Label + true + true + + Left + + + Form.Item.Сортировка.StandardCommand.Delete + Normal + Picture + true + true + UserCmds + Auto + InCommandBarAndInAdditionalSubmenu + + true + true + + true + + + <key>ru</key> + <value>Команды сортировки добавление удаление</value> + + + ru + Команды сортировки добавление удаление + + + КомандыСортировки_ДобавлениеУдаление1РасширеннаяПодсказка + 1016 + Label + true + true + + Left + + + + + + КомандыСортировки_Приоритет1 + 1021 + + Сортировка_ПереместитьВверх1 + 1023 + true + true + + true + + + Сортировка_ПереместитьВверх1РасширеннаяПодсказка + 1024 + Label + true + true + + Left + + + Form.Command.Сортировка_ПереместитьВверх + Normal + Auto + true + true + UserCmds + Auto + + + Сортировка_ПереместитьВниз1 + 1025 + true + true + + true + + + Сортировка_ПереместитьВниз1РасширеннаяПодсказка + 1026 + Label + true + true + + Left + + + Form.Command.Сортировка_ПереместитьВниз + Normal + Auto + true + true + UserCmds + Auto + + true + true + + true + + + <key>ru</key> + <value>Команды сортировки приоритет</value> + + + ru + Команды сортировки приоритет + + + КомандыСортировки_Приоритет1РасширеннаяПодсказка + 1022 + Label + true + true + + Left + + + + + + КомандыСортировки_Направление1 + 1027 + + Сортировка_ПоВозрастанию1 + 1029 + true + + true + + + Сортировка_ПоВозрастанию1РасширеннаяПодсказка + 1030 + Label + true + true + + Left + + + Form.Command.Сортировка_ПоВозрастанию + Normal + Auto + true + true + UserCmds + Auto + + + Сортировка_ПоУбыванию1 + 1031 + true + + true + + + Сортировка_ПоУбыванию1РасширеннаяПодсказка + 1032 + Label + true + true + + Left + + + Form.Command.Сортировка_ПоУбыванию + Normal + Auto + true + true + UserCmds + Auto + + true + true + + true + + + <key>ru</key> + <value>Команды сортировки направление</value> + + + ru + Команды сортировки направление + + + КомандыСортировки_Направление1РасширеннаяПодсказка + 1028 + Label + true + true + + Left + + + + + + КомандыСортировки_Флажки1 + 1053 + + СортировкаСортировка_УстановитьФлажки1 + 1055 + true + true + + true + + + СортировкаСортировка_УстановитьФлажки1РасширеннаяПодсказка + 1056 + Label + true + true + + Left + + + Form.Command.Сортировка_УстановитьФлажки + Normal + Auto + true + true + UserCmds + Auto + + + СортировкаСортировка_СнятьФлажки1 + 1057 + true + true + + true + + + СортировкаСортировка_СнятьФлажки1РасширеннаяПодсказка + 1058 + Label + true + true + + Left + + + Form.Command.Сортировка_СнятьФлажки + Normal + Auto + true + true + UserCmds + Auto + + true + true + + true + + + <key>ru</key> + <value>Команды сортировки флажки</value> + + + ru + Команды сортировки флажки + + + КомандыСортировки_Флажки1РасширеннаяПодсказка + 1054 + Label + true + true + + Left + + + + + + Tree + true + true + true + true + true + AfterCurrentRow + MultiRow + 1 + 1 + AutoUse + true + true + false + false + false + false + false + DontUse + Auto + ExpandAllLevels + true + true + true + true + + Сортировка.ИндексКартинки + + + CommonPicture.ПиктограммыНастроекОтчета + + true + + true + true + + true + + + <key>ru</key> + <value>Группа сортировки</value> + + + ru + Группа сортировки + + + ГруппаСортировкиРасширеннаяПодсказка + 1014 + Label + true + true + + Left + + + UsualGroup + + Auto + true + true + Auto + Auto + + + true + true + + true + + + <key>ru</key> + <value>Группа поля и сортировки</value> + + + ru + Группа поля и сортировки + + + ГруппаПоляИСортировкиРасширеннаяПодсказка + 901 + Label + true + true + + Left + + + UsualGroup + + Auto + true + true + Auto + Auto + + + + ГруппаЕстьВложенныеПоляИлиСортировки + 1002 + + КартинкаИнформация3 + 1004 + + <key>ru</key> + <value>Картинка информация</value> + + true + true + + true + + + КартинкаИнформация3РасширеннаяПодсказка + 1006 + Label + true + true + + Left + + + + КартинкаИнформация3КонтекстноеМеню + 1005 + true + + 2 + true + 1 + true + + + CommonPicture.Информация + + + + + ПодсказкаЕстьВложенныеПоляИлиСортировки + 1007 + + <key>ru</key> + <value>В отчете имеются вложенные поля и сортировки, которые можно настроить на странице <b>Структура</>.</value> + + true + true + + true + + + ПодсказкаЕстьВложенныеПоляИлиСортировкиРасширеннаяПодсказка + 1009 + Label + true + true + + Left + + + + ПодсказкаЕстьВложенныеПоляИлиСортировкиКонтекстноеМеню + 1008 + true + + true + Label + true + true + + Style.ПоясняющийТекст + + + + URLProcessing + ПодсказкаЕстьВложенныеОтчетыОбработкаНавигационнойСсылки + + Left + + + true + true + + true + + + ГруппаЕстьВложенныеПоляИлиСортировкиРасширеннаяПодсказка + 1003 + Label + true + true + + Left + + + UsualGroup + + Auto + true + true + Auto + Auto + + + true + true + + true + + + <key>ru</key> + <value>Поля и сортировки</value> + + + ru + Страница выбранные поля и сортировки + + + СтраницаВыбранныеПоляИСортировкиРасширеннаяПодсказка + 127 + Label + true + true + + Left + + + Page + + + CommonPicture.ПоляИСортировки + + Vertical + auto + + + + СтраницаОформление + 590 + + СтраницаДополнительноПодвал + 51 + true + true + + true + + + <key>ru</key> + <value> </value> + + + ru + + + + СтраницаДополнительноПодвалРасширеннаяПодсказка + 52 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + true + true + Auto + Auto + + + + СтраницаДополнительноГруппировки + 49 + true + true + + true + + + <key>ru</key> + <value> </value> + + + ru + + + + СтраницаДополнительноГруппировкиРасширеннаяПодсказка + 50 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + true + true + Auto + Auto + + + + СтраницаДополнительноШапка + 47 + true + true + + true + + + <key>ru</key> + <value> </value> + + + ru + + + + СтраницаДополнительноШапкаРасширеннаяПодсказка + 48 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + true + true + Auto + Auto + + + + ГруппаОформлениеРасширенныйРежим + 922 + + Оформление + 838 + true + true + + true + + + Оформление + + None + Change + Copy + CopyToClipboard + EndEdit + HierarchicalList + List + MoveDown + MoveUp + OutputList + SelectAll + SortListAsc + SortListDesc + Tree + + ОформлениеГруппа1 + 889 + + ОформлениеИспользование + 891 + true + true + + true + + + Оформление.Использование + + + ОформлениеИспользованиеРасширеннаяПодсказка + 893 + Label + true + true + + Left + + + + ОформлениеИспользованиеКонтекстноеМеню + 892 + true + + CheckBoxField + Auto + Left + true + + + + ОформлениеЗаголовок + 894 + true + true + + true + + + Оформление.Заголовок + + + ОформлениеЗаголовокРасширеннаяПодсказка + 896 + Label + true + true + + Left + + + + ОформлениеЗаголовокКонтекстноеМеню + 895 + true + + InputField + Auto + true + Left + true + + true + true + false + true + true + true + true + Normal + + + true + true + + true + + + ОформлениеГруппа1РасширеннаяПодсказка + 890 + Label + true + true + + Left + + + ColumnGroup + + InCell + auto + true + + + + ОформлениеИндексКартинкиДоступа + 897 + true + true + + true + + + Оформление.ИндексКартинкиДоступа + + None + + ОформлениеИндексКартинкиДоступаРасширеннаяПодсказка + 899 + Label + true + true + + Left + + + + ОформлениеИндексКартинкиДоступаКонтекстноеМеню + 898 + true + + PictureField + Auto + true + + CommonPicture.БыстрыйДоступ + + Left + true + + 2 + true + true + true + true + + CommonPicture.ПиктограммыДоступаКНастройкамОтчета + + + + 1 + + + + Top + + ОформлениеКоманднаяПанель + 840 + + КомандыОформления_ДобавлениеУдаление + 826 + + Оформление_Добавить + 828 + + <key>ru</key> + <value>Добавить</value> + + true + true + + true + + + Оформление_ДобавитьРасширеннаяПодсказка + 829 + Label + true + true + + Left + + + Form.Item.Оформление.StandardCommand.Add + Normal + PictureAndText + true + true + UserCmds + Auto + InCommandBarAndInAdditionalSubmenu + + + Оформление_Удалить + 830 + true + true + + true + + + Оформление_УдалитьРасширеннаяПодсказка + 831 + Label + true + true + + Left + + + Form.Item.Оформление.StandardCommand.Delete + Normal + Picture + true + true + UserCmds + Auto + InCommandBarAndInAdditionalSubmenu + + true + true + + true + + + <key>ru</key> + <value> </value> + + + ru + + + + КомандыОформления_ДобавлениеУдалениеРасширеннаяПодсказка + 827 + Label + true + true + + Left + + + + + + КомандыОформления_Приоритет + 832 + + Оформление_ПереместитьВверх + 834 + true + true + + true + + + Оформление_ПереместитьВверхРасширеннаяПодсказка + 835 + Label + true + true + + Left + + + Form.Command.Оформление_ПереместитьВверх + Normal + Auto + true + true + UserCmds + Auto + + + Оформление_ПереместитьВниз + 836 + true + true + + true + + + Оформление_ПереместитьВнизРасширеннаяПодсказка + 837 + Label + true + true + + Left + + + Form.Command.Оформление_ПереместитьВниз + Normal + Auto + true + true + UserCmds + Auto + + true + true + + true + + + <key>ru</key> + <value> </value> + + + ru + + + + КомандыОформления_ПриоритетРасширеннаяПодсказка + 833 + Label + true + true + + Left + + + + + Left + + + Selection + ОформлениеВыбор + + + BeforeAddRow + ОформлениеПередНачаломДобавления + + + BeforeDeleteRow + ОформлениеПередУдалением + + + ОформлениеСтрокаПоиска + 842 + + ОформлениеСтрокаПоискаРасширеннаяПодсказка + 846 + Label + true + true + + Left + + + + ОформлениеСтрокаПоискаКонтекстноеМеню + 845 + true + + Оформление + + true + + + + ОформлениеСостояниеПросмотра + 847 + + ОформлениеСостояниеПросмотраРасширеннаяПодсказка + 851 + Label + true + true + + Left + + + + ОформлениеСостояниеПросмотраКонтекстноеМеню + 850 + true + + ViewStatusAddition + Оформление + + true + + + + ОформлениеУправлениеПоиском + 852 + + ОформлениеУправлениеПоискомРасширеннаяПодсказка + 856 + Label + true + true + + Left + + + + ОформлениеУправлениеПоискомКонтекстноеМеню + 855 + true + + SearchControlAddition + Оформление + + true + + + + ОформлениеРасширеннаяПодсказка + 841 + Label + true + true + + Left + + + + ОформлениеКонтекстноеМеню + 839 + true + + Tree + true + true + true + true + true + AfterCurrentRow + MultiRow +
              true
              + 1 + 1 + AutoUse + AutoUse + true + true + false + false + false + true + Auto + Auto + ExpandAllLevels + true + true + true + true + + CommonPicture.ПиктограммыЭлементов + + true +
              + true + true + + true + + + <key>ru</key> + <value>Группа оформление расширенный режим</value> + + + ru + Группа оформление расширенный режим + + + ГруппаОформлениеРасширенныйРежимРасширеннаяПодсказка + 923 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + true + true + Auto + Auto + +
              + + ГруппаЕстьВложенноеОформление + 926 + + КартинкаИнформация2 + 928 + + <key>ru</key> + <value>Картинка информация</value> + + true + true + + true + + + КартинкаИнформация2РасширеннаяПодсказка + 930 + Label + true + true + + Left + + + + КартинкаИнформация2КонтекстноеМеню + 929 + true + + 2 + true + 1 + true + + + CommonPicture.Информация + + + + + ПодсказкаЕстьВложенноеОформление + 931 + + <key>ru</key> + <value>В отчете имеется оформление вложенных элементов, которое можно настроить на странице <b>Структура</>.</value> + + true + true + + true + + + ПодсказкаЕстьВложенноеОформлениеРасширеннаяПодсказка + 933 + Label + true + true + + Left + + + + ПодсказкаЕстьВложенноеОформлениеКонтекстноеМеню + 932 + true + + true + Label + true + true + + Style.ПоясняющийТекст + + + + URLProcessing + ПодсказкаЕстьВложенныеОтчетыОбработкаНавигационнойСсылки + + Left + + + true + true + + true + + + <key>ru</key> + <value>Группа есть вложенное оформление</value> + + + ru + Группа есть вложенное оформление + + + ГруппаЕстьВложенноеОформлениеРасширеннаяПодсказка + 927 + Label + true + true + + Left + + + UsualGroup + + Auto + true + true + Auto + Auto + + + true + true + + true + + + <key>ru</key> + <value>Оформление</value> + + + ru + Страница оформление + + + СтраницаОформлениеРасширеннаяПодсказка + 591 + Label + true + true + + Left + + + Page + + + CommonPicture.Оформление + + Vertical + auto + +
              + + СтраницаСтруктураВарианта + 427 + + СтруктураВарианта + 429 + true + true + + true + + + СтруктураВарианта + + None + Change + Choose + Copy + CopyToClipboard + EndEdit + HierarchicalList + List + MoveDown + MoveUp + OutputList + SortListAsc + SortListDesc + Tree + + СтруктураВариантаГруппа2 + 448 + + СтруктураВариантаИспользование + 494 + true + true + + true + + + СтруктураВарианта.Использование + + + OnChange + СтруктураВариантаИспользованиеПриИзменении + + + СтруктураВариантаИспользованиеРасширеннаяПодсказка + 496 + Label + true + true + + Left + + + + СтруктураВариантаИспользованиеКонтекстноеМеню + 495 + true + + CheckBoxField + Auto + Left + true + + + + СтруктураВариантаПредставление + 497 + true + true + + true + + + СтруктураВарианта.Представление + + + СтруктураВариантаПредставлениеРасширеннаяПодсказка + 499 + Label + true + true + + Left + + + + СтруктураВариантаПредставлениеКонтекстноеМеню + 498 + true + + InputField + true + Auto + true + Left + true + + true + true + true + true + true + Normal + + + true + true + + true + + + <key>ru</key> + <value> </value> + + + ru + + + + СтруктураВариантаГруппа2РасширеннаяПодсказка + 449 + Label + true + true + + Left + + + ColumnGroup + + InCell + auto + true + + + + СтруктураВариантаЗаголовок + 554 + true + true + + true + + + СтруктураВарианта.Заголовок + + + OnChange + СтруктураВариантаЗаголовокПриИзменении + + + СтруктураВариантаЗаголовокРасширеннаяПодсказка + 556 + Label + true + true + + Left + + + + СтруктураВариантаЗаголовокКонтекстноеМеню + 555 + true + + InputField + Auto + true + Left + true + + true + true + true + true + true + true + true + Normal + + System.DefaultGUIFont + Arial + 10.0 + true + false + false + false + + + + + СтруктураВариантаСодержитОтборы + 967 + true + true + + true + + + СтруктураВарианта.СодержитОтборы + + true + None + + ru + Картинка показывается если у элемента настроены отборы. + + + СтруктураВариантаСодержитОтборыРасширеннаяПодсказка + 969 + Label + true + true + + Left + + + + СтруктураВариантаСодержитОтборыКонтекстноеМеню + 968 + true + + PictureField + Auto + true + + CommonPicture.Отборы + + Left + true + + 2 + true + true + + CommonPicture.Отборы + + + + 1 + + + + + СтруктураВариантаСодержитПоляИлиСортировки + 997 + true + true + + true + + + СтруктураВарианта.СодержитПоляИлиСортировки + + true + None + + ru + Картинка показывается если у элемента настроены поля и сортировки. + + + СтруктураВариантаСодержитПоляИлиСортировкиРасширеннаяПодсказка + 999 + Label + true + true + + Left + + + + СтруктураВариантаСодержитПоляИлиСортировкиКонтекстноеМеню + 998 + true + + PictureField + Auto + true + + CommonPicture.ПоляИСортировки + + Left + true + + 2 + true + true + + CommonPicture.ПоляИСортировки + + + + 1 + + + + + СтруктураВариантаСодержитУсловноеОформление + 934 + true + true + + true + + + СтруктураВарианта.СодержитУсловноеОформление + + true + None + + ru + Картинка показывается если у элемента настроено оформление. + + + СтруктураВариантаСодержитУсловноеОформлениеРасширеннаяПодсказка + 936 + Label + true + true + + Left + + + + СтруктураВариантаСодержитУсловноеОформлениеКонтекстноеМеню + 935 + true + + PictureField + Auto + true + + CommonPicture.Оформление + + Left + true + + 2 + true + true + + CommonPicture.Оформление + + + + 1 + + + + Top + + СтруктураВариантаКоманднаяПанель + 431 + + КомандыСтруктурыВарианта_Добавление + 468 + + СтруктураВарианта_Добавить + 508 + true + true + + true + + + СтруктураВарианта_ДобавитьРасширеннаяПодсказка + 509 + Label + true + true + + Left + + + Form.Item.СтруктураВарианта.StandardCommand.Add + Normal + Picture + true + true + UserCmds + + CommonPicture.ДобавитьВложенный + + Auto + + + СтруктураВарианта_Сгруппировать + 510 + true + true + + true + + + СтруктураВарианта_СгруппироватьРасширеннаяПодсказка + 511 + Label + true + true + + Left + + + Form.Command.СтруктураВарианта_Сгруппировать + Normal + Auto + true + true + UserCmds + Auto + + + СтруктураВарианта_ДобавлениеТаблицИДиаграмм + 776 + + СтруктураВарианта_ДобавитьТаблицу + 780 + true + true + + true + + + СтруктураВарианта_ДобавитьТаблицуРасширеннаяПодсказка + 781 + Label + true + true + + Left + + + Form.Command.СтруктураВарианта_ДобавитьТаблицу + Normal + Auto + true + true + UserCmds + Auto + InAdditionalSubmenu + + + СтруктураВарианта_ДобавитьДиаграмму + 778 + true + true + + true + + + СтруктураВарианта_ДобавитьДиаграммуРасширеннаяПодсказка + 779 + Label + true + true + + Left + + + Form.Command.СтруктураВарианта_ДобавитьДиаграмму + Normal + Auto + true + true + UserCmds + Auto + InAdditionalSubmenu + + true + true + + true + + + <key>ru</key> + <value>Структура варианта добавление таблиц и диаграмм</value> + + + ru + Структура варианта добавление таблиц и диаграмм + + + СтруктураВарианта_ДобавлениеТаблицИДиаграммРасширеннаяПодсказка + 777 + Label + true + true + + Left + + + + + true + true + + true + + + <key>ru</key> + <value> </value> + + + ru + + + + КомандыСтруктурыВарианта_ДобавлениеРасширеннаяПодсказка + 469 + Label + true + true + + Left + + + + + + КомандыСтруктурыВарианта_Изменение + 516 + + СтруктураВарианта_Изменить + 512 + true + true + + true + + + СтруктураВарианта_ИзменитьРасширеннаяПодсказка + 513 + Label + true + true + + Left + + + Form.Command.СтруктураВарианта_Изменить + Normal + Picture + true + true + UserCmds + Auto + InCommandBarAndInAdditionalSubmenu + + + СтруктураВарианта_Удалить + 668 + true + true + + true + + + СтруктураВарианта_УдалитьРасширеннаяПодсказка + 669 + Label + true + true + + Left + + + Form.Item.СтруктураВарианта.StandardCommand.Delete + Normal + Picture + true + true + UserCmds + Auto + InCommandBarAndInAdditionalSubmenu + + true + true + + true + + + <key>ru</key> + <value>Команды структуры варианта изменение</value> + + + ru + Команды структуры варианта изменение + + + КомандыСтруктурыВарианта_ИзменениеРасширеннаяПодсказка + 517 + Label + true + true + + Left + + + + + + КомандыСтруктурыВарианта_ДвижениеПоИерархии + 456 + + СтруктураВарианта_ПереместитьВышеИЛевее + 500 + true + true + + true + + + СтруктураВарианта_ПереместитьВышеИЛевееРасширеннаяПодсказка + 501 + Label + true + true + + Left + + + Form.Command.СтруктураВарианта_ПереместитьВышеИЛевее + Normal + Auto + true + true + UserCmds + Auto + + + СтруктураВарианта_ПереместитьНижеИПравее + 502 + true + true + + true + + + СтруктураВарианта_ПереместитьНижеИПравееРасширеннаяПодсказка + 503 + Label + true + true + + Left + + + Form.Command.СтруктураВарианта_ПереместитьНижеИПравее + Normal + Auto + true + true + UserCmds + Auto + + true + true + + true + + + <key>ru</key> + <value> </value> + + + ru + + + + КомандыСтруктурыВарианта_ДвижениеПоИерархииРасширеннаяПодсказка + 457 + Label + true + true + + Left + + + + + + КомандыСтруктурыВарианта_ДвижениеВнутриРодителя + 462 + + СтруктураВарианта_ПереместитьВверх + 504 + true + true + + true + + + СтруктураВарианта_ПереместитьВверхРасширеннаяПодсказка + 505 + Label + true + true + + Left + + + Form.Command.СтруктураВарианта_ПереместитьВверх + Normal + Auto + true + true + UserCmds + Auto + + + СтруктураВарианта_ПереместитьВниз + 506 + true + true + + true + + + СтруктураВарианта_ПереместитьВнизРасширеннаяПодсказка + 507 + Label + true + true + + Left + + + Form.Command.СтруктураВарианта_ПереместитьВниз + Normal + Auto + true + true + UserCmds + Auto + + true + true + + true + + + <key>ru</key> + <value> </value> + + + ru + + + + КомандыСтруктурыВарианта_ДвижениеВнутриРодителяРасширеннаяПодсказка + 463 + Label + true + true + + Left + + + + + + КомандыСтруктурыВарианта_Флажки + 518 + + СтруктураВарианта_УстановитьФлажки + 520 + true + true + + true + + + СтруктураВарианта_УстановитьФлажкиРасширеннаяПодсказка + 521 + Label + true + true + + Left + + + Form.Command.СтруктураВарианта_УстановитьФлажки + Normal + Auto + true + true + UserCmds + Auto + + + СтруктураВарианта_СнятьФлажки + 522 + true + true + + true + + + СтруктураВарианта_СнятьФлажкиРасширеннаяПодсказка + 523 + Label + true + true + + Left + + + Form.Command.СтруктураВарианта_СнятьФлажки + Normal + Auto + true + true + UserCmds + Auto + + true + true + + true + + + <key>ru</key> + <value>Команды структуры варианта флажки</value> + + + ru + Команды структуры варианта флажки + + + КомандыСтруктурыВарианта_ФлажкиРасширеннаяПодсказка + 519 + Label + true + true + + Left + + + + + Left + + + DragCheck + СтруктураВариантаПроверкаПеретаскивания + + + Selection + СтруктураВариантаВыбор + + + BeforeAddRow + СтруктураВариантаПередНачаломДобавления + + + BeforeDeleteRow + СтруктураВариантаПередУдалением + + + OnActivateRow + СтруктураВариантаПриАктивизацииСтроки + + + DragStart + СтруктураВариантаНачалоПеретаскивания + + + Drag + СтруктураВариантаПеретаскивание + + + СтруктураВариантаСтрокаПоиска + 433 + + СтруктураВариантаСтрокаПоискаРасширеннаяПодсказка + 437 + Label + true + true + + Left + + + + СтруктураВариантаСтрокаПоискаКонтекстноеМеню + 436 + true + + СтруктураВарианта + + true + + + + СтруктураВариантаСостояниеПросмотра + 438 + + СтруктураВариантаСостояниеПросмотраРасширеннаяПодсказка + 442 + Label + true + true + + Left + + + + СтруктураВариантаСостояниеПросмотраКонтекстноеМеню + 441 + true + + ViewStatusAddition + СтруктураВарианта + + true + + + + СтруктураВариантаУправлениеПоиском + 443 + + СтруктураВариантаУправлениеПоискомРасширеннаяПодсказка + 447 + Label + true + true + + Left + + + + СтруктураВариантаУправлениеПоискомКонтекстноеМеню + 446 + true + + SearchControlAddition + СтруктураВарианта + + true + + + + СтруктураВариантаРасширеннаяПодсказка + 432 + Label + true + true + + Left + + + + СтруктураВариантаКонтекстноеМеню + 430 + + КомандыСтруктурыВарианта_Добавление1 + 741 + + СтруктураВарианта_Добавить1 + 743 + true + true + + true + + + СтруктураВарианта_Добавить1РасширеннаяПодсказка + 744 + Label + true + true + + Left + + + Form.Item.СтруктураВарианта.StandardCommand.Add + Normal + Picture + true + true + UserCmds + + CommonPicture.ДобавитьВложенный + + Auto + + + СтруктураВарианта_Сгруппировать1 + 747 + true + true + + true + + + СтруктураВарианта_Сгруппировать1РасширеннаяПодсказка + 748 + Label + true + true + + Left + + + Form.Command.СтруктураВарианта_Сгруппировать + Normal + Auto + true + true + UserCmds + Auto + + + СтруктураВарианта_ДобавлениеТаблицИДиаграмм1 + 782 + + СтруктураВарианта_ДобавитьТаблицу1 + 784 + true + true + + true + + + СтруктураВарианта_ДобавитьТаблицу1РасширеннаяПодсказка + 785 + Label + true + true + + Left + + + Form.Command.СтруктураВарианта_ДобавитьТаблицу + Normal + Auto + true + true + UserCmds + Auto + InAdditionalSubmenu + + + СтруктураВарианта_ДобавитьДиаграмму1 + 786 + true + true + + true + + + СтруктураВарианта_ДобавитьДиаграмму1РасширеннаяПодсказка + 787 + Label + true + true + + Left + + + Form.Command.СтруктураВарианта_ДобавитьДиаграмму + Normal + Auto + true + true + UserCmds + Auto + InAdditionalSubmenu + + true + true + + true + + + <key>ru</key> + <value>Структура варианта добавление таблиц и диаграмм</value> + + + ru + Структура варианта добавление таблиц и диаграмм + + + СтруктураВарианта_ДобавлениеТаблицИДиаграмм1РасширеннаяПодсказка + 783 + Label + true + true + + Left + + + + + true + true + + true + + + <key>ru</key> + <value> </value> + + + ru + + + + КомандыСтруктурыВарианта_Добавление1РасширеннаяПодсказка + 742 + Label + true + true + + Left + + + + + + КомандыСтруктурыВарианта_Изменение1 + 749 + + СтруктураВарианта_Изменить1 + 751 + true + true + + true + + + СтруктураВарианта_Изменить1РасширеннаяПодсказка + 752 + Label + true + true + + Left + + + Form.Command.СтруктураВарианта_Изменить + Normal + Picture + true + true + UserCmds + Auto + InCommandBarAndInAdditionalSubmenu + + + СтруктураВарианта_Удалить1 + 753 + true + true + + true + + + СтруктураВарианта_Удалить1РасширеннаяПодсказка + 754 + Label + true + true + + Left + + + Form.Item.СтруктураВарианта.StandardCommand.Delete + Normal + Picture + true + true + UserCmds + Auto + InCommandBarAndInAdditionalSubmenu + + true + true + + true + + + <key>ru</key> + <value>Команды структуры варианта изменение</value> + + + ru + Команды структуры варианта изменение + + + КомандыСтруктурыВарианта_Изменение1РасширеннаяПодсказка + 750 + Label + true + true + + Left + + + + + + КомандыСтруктурыВарианта_ДвижениеПоИерархии1 + 755 + + СтруктураВарианта_ПереместитьВышеИЛевее1 + 757 + true + true + + true + + + СтруктураВарианта_ПереместитьВышеИЛевее1РасширеннаяПодсказка + 758 + Label + true + true + + Left + + + Form.Command.СтруктураВарианта_ПереместитьВышеИЛевее + Normal + Auto + true + true + UserCmds + Auto + + + СтруктураВарианта_ПереместитьНижеИПравее1 + 759 + true + true + + true + + + СтруктураВарианта_ПереместитьНижеИПравее1РасширеннаяПодсказка + 760 + Label + true + true + + Left + + + Form.Command.СтруктураВарианта_ПереместитьНижеИПравее + Normal + Auto + true + true + UserCmds + Auto + + true + true + + true + + + <key>ru</key> + <value> </value> + + + ru + + + + КомандыСтруктурыВарианта_ДвижениеПоИерархии1РасширеннаяПодсказка + 756 + Label + true + true + + Left + + + + + + КомандыСтруктурыВарианта_ДвижениеВнутриРодителя1 + 761 + + СтруктураВарианта_ПереместитьВверх1 + 763 + true + true + + true + + + СтруктураВарианта_ПереместитьВверх1РасширеннаяПодсказка + 764 + Label + true + true + + Left + + + Form.Command.СтруктураВарианта_ПереместитьВверх + Normal + Auto + true + true + UserCmds + Auto + + + СтруктураВарианта_ПереместитьВниз1 + 765 + true + true + + true + + + СтруктураВарианта_ПереместитьВниз1РасширеннаяПодсказка + 766 + Label + true + true + + Left + + + Form.Command.СтруктураВарианта_ПереместитьВниз + Normal + Auto + true + true + UserCmds + Auto + + true + true + + true + + + <key>ru</key> + <value> </value> + + + ru + + + + КомандыСтруктурыВарианта_ДвижениеВнутриРодителя1РасширеннаяПодсказка + 762 + Label + true + true + + Left + + + + + + КомандыСтруктурыВарианта_Флажки1 + 767 + + СтруктураВарианта_УстановитьФлажки1 + 769 + true + true + + true + + + СтруктураВарианта_УстановитьФлажки1РасширеннаяПодсказка + 770 + Label + true + true + + Left + + + Form.Command.СтруктураВарианта_УстановитьФлажки + Normal + Auto + true + true + UserCmds + Auto + InCommandBarAndInAdditionalSubmenu + + + СтруктураВарианта_СнятьФлажки1 + 771 + true + true + + true + + + СтруктураВарианта_СнятьФлажки1РасширеннаяПодсказка + 772 + Label + true + true + + Left + + + Form.Command.СтруктураВарианта_СнятьФлажки + Normal + Auto + true + true + UserCmds + Auto + InCommandBarAndInAdditionalSubmenu + + true + true + + true + + + <key>ru</key> + <value>Команды структуры варианта флажки</value> + + + ru + Команды структуры варианта флажки + + + КомандыСтруктурыВарианта_Флажки1РасширеннаяПодсказка + 768 + Label + true + true + + Left + + + + + + Tree + true + true + true + true + true + true + AfterCurrentRow +
              true
              + 1 + 1 + AutoUse + AutoUse + true + true + false + false + false + true + Auto + Auto + ExpandAllLevels + true + true + true + true + + СтруктураВарианта.ИндексКартинки + + + CommonPicture.ПиктограммыСтруктурыОтчета + + true +
              + true + true + + true + + + <key>ru</key> + <value>Структура</value> + + + ru + Страница структура варианта + + + СтраницаСтруктураВариантаРасширеннаяПодсказка + 428 + Label + true + true + + Left + + + Page + + + CommonPicture.Структура + + Vertical + auto + +
              + + СтраницаНетПользовательскихНастроек + 1071 + + КартинкаИнформация4 + 1078 + + <key>ru</key> + <value>Картинка информация</value> + + true + true + + true + + + КартинкаИнформация4РасширеннаяПодсказка + 1080 + Label + true + true + + Left + + + + КартинкаИнформация4КонтекстноеМеню + 1079 + true + + 2 + true + 1 + true + + + CommonPicture.Информация + + + + + ПодсказкаНетПользовательскихНастроек + 1081 + + <key>ru</key> + <value>У этого отчета нет ни одной пользовательской настройки. +<link 1>Перейти к расширенной настройке.</></value> + + true + true + + true + + + ПодсказкаНетПользовательскихНастроекРасширеннаяПодсказка + 1083 + Label + true + true + + Left + + + + ПодсказкаНетПользовательскихНастроекКонтекстноеМеню + 1082 + true + + true + Label + true + true + + + URLProcessing + ПодсказкаНетПользовательскихНастроекОбработкаНавигационнойСсылки + + Left + + + true + + true + + + <key>ru</key> + <value>Страница нет пользовательских настроек</value> + + + ru + + + true + + СтраницаНетПользовательскихНастроекРасширеннаяПодсказка + 1072 + Label + true + true + + Left + + + Page + + auto + + + + НеОтсортированное + 62 + true + true + + true + + + <key>ru</key> + <value>Не отсортированные</value> + + + ru + + + true + + НеОтсортированноеРасширеннаяПодсказка + 63 + Label + true + true + + Left + + + Page + + Vertical + auto + + + true + true + + true + + + <key>ru</key> + <value>Страницы настроек</value> + + + ru + Страницы настроек + true true - None - None - None - true - All - Show + + СтраницыНастроекРасширеннаяПодсказка + 36 + Label + true + true + + Left + + + Pages + + TabsOnTop + Auto + +
              + + ГруппаЕстьВложенныеОтчеты + 791 + + КартинкаИнформация + 793 + + <key>ru</key> + <value>Картинка информация</value> + + true + true + + true + + + КартинкаИнформацияРасширеннаяПодсказка + 795 + Label + true + true + + Left + + + + КартинкаИнформацияКонтекстноеМеню + 794 + true + + 2 + true + 1 + true + + + CommonPicture.Информация + + + + + ПодсказкаЕстьВложенныеОтчеты + 796 + + <key>ru</key> + <value>У этого отчета сложная структура настроек (имеются вложенные отчеты). +<link 1>Перейти к </><link 1>настройке</><link 1> вложенных отчетов</>.</value> + + true + true + + true + + + ПодсказкаЕстьВложенныеОтчетыРасширеннаяПодсказка + 798 + Label + true + true + + Left + + + + ПодсказкаЕстьВложенныеОтчетыКонтекстноеМеню + 797 + true + + true + Label + true + true + + + URLProcessing + ПодсказкаЕстьВложенныеОтчетыОбработкаНавигационнойСсылки + + Left + + + true + true + + true + + + <key>ru</key> + <value>Группа есть вложенные отчеты</value> + + + ru + Группа есть вложенные отчеты + + + ГруппаЕстьВложенныеОтчетыРасширеннаяПодсказка + 792 + Label + true + true + + Left + + + UsualGroup + + Auto + true + true + Auto + Auto + + + + КомандыФормы + 73 + + РасширенныйРежим + 113 + + <key>ru</key> + <value>Вид</value> + + true + true + + true + + + РасширенныйРежим + + Button + + OnChange + РасширенныйРежимПриИзменении + + + РасширенныйРежимРасширеннаяПодсказка + 115 + + <key>ru</key> + <value>Простой режим предназначен для изменения текущих настроек отчета, которые сохраняются автоматически. +Расширенный режим предназначен для изменения структуры отчета. После изменения структуры отчет необходимо сохранить как новый или перезаписать существующий.</value> + + Label + true + true + + Left + + + + РасширенныйРежимКонтекстноеМеню + 114 + true + + RadioButtonField + Enter + true + Left + true + + Tumbler + false + + + ru + Простой + + + 0 + + + + + ru + Расширенный + + + 1 + + + Vertical + + + + КомандыФормы_Правая + 80 + + Группа1 + 1033 + + ИзменитьФорму + 318 + + <key>ru</key> + <value>Изменить форму...</value> + + true + + true + + + ИзменитьФормуРасширеннаяПодсказка + 319 + Label + true + true + + Left + + + Form.StandardCommand.CustomizeForm + Normal + Picture + true + true + UserCmds + Auto + InCommandBarAndInAdditionalSubmenu + + true + true + + true + + + <key>ru</key> + <value>1</value> + + + Группа1РасширеннаяПодсказка + 1034 + Label + true + true + + Left + + + + + + ЗакрытьИСформировать + 21 + true + true + + true + + + ЗакрытьИСформироватьРасширеннаяПодсказка + 22 + Label + true + true + + Left + + + Form.Command.ЗакрытьИСформировать + true + true + true + UserCmds + Auto + InCommandBarAndInAdditionalSubmenu + + + Закрыть + 4 + true + true + + true + + + ЗакрытьРасширеннаяПодсказка + 7 + Label + true + true + + Left + + + Form.Command.ЗакрытьБезФормирования + Normal + true + true + UserCmds + Auto + InCommandBarAndInAdditionalSubmenu + + + ИзменитьУсловияОтборов + 1000 + true + true + + true + + + ИзменитьУсловияОтборовРасширеннаяПодсказка + 1001 + Label + true + true + + Left + + + Form.Command.ИзменитьУсловияОтборов + Normal + Picture + true + true + UserCmds + Auto + InCommandBarAndInAdditionalSubmenu + + + Справка + 799 + true + true + + true + + + СправкаРасширеннаяПодсказка + 800 + Label + true + true + + Left + + + Form.StandardCommand.Help + Normal + Auto + true + true + UserCmds + Auto + InCommandBarAndInAdditionalSubmenu + + true + true + + true + + + <key>ru</key> + <value> </value> + + + ru + + + true + + КомандыФормы_ПраваяРасширеннаяПодсказка + 81 + Label + true + true + + Left + + + CommandBar + + Right + + + true + true + + true + + + <key>ru</key> + <value> </value> + + + ru + + + true + + КомандыФормыРасширеннаяПодсказка + 74 + Label + true + true + + Left + + + UsualGroup + + Auto + true + true + Auto + Auto + Bottom true ФормаКоманднаяПанель -1 - - ЗавершитьРедактирование - 4 - true - true - - true - - - ЗавершитьРедактированиеExtendedTooltip - 7 - Label - true - true - - Left - - - Form.Command.ЗавершитьРедактирование - Auto - true - true - true - UserCmds - Auto - - - ФормаЗавершитьРедактирование - 5 - true - - true - - - ФормаЗавершитьРедактированиеExtendedTooltip - 8 - Label - true - true - - Left - - - Form.StandardCommand.EndEdit - Normal - Auto - true - true - UserCmds - Auto - - - ФормаОтмена - 6 - true - true - - true - - - ФормаОтменаExtendedTooltip - 9 - Label - true - true - - Left - - - Form.StandardCommand.CancelEdit - Normal - Auto - true - true - UserCmds - Auto - Right - true + + OnOpen + ПриОткрытии + + + BeforeClose + ПередЗакрытием + OnCreateAtServer ПриСозданииНаСервере + + OnClose + ПриЗакрытии + LockOwner true - true true Vertical true true true - UseIfNecessary auto true - Отчет + НастройкиОтчета + + <key>ru</key> + <value>Настройки отчета</value> + + 2 + + + true + + + + + ПостоянныеКоманды + + <key>ru</key> + <value>Постоянные команды</value> + + 3 + + ValueList + + + + + + + + + ПостоянныеРеквизиты + + <key>ru</key> + <value>Постоянные реквизиты</value> + + 4 + + ValueList + + + + + + + + + ВариантНаименование + + <key>ru</key> + <value>Вариант отчета</value> + + 11 + + String + + + + true + + + true + + + + ВариантСсылка + + <key>ru</key> + <value>Вариант ссылка</value> + + 13 + + CatalogRef.ВариантыОтчетов + + + true + + + true + + + + БыстрыйПоискИменОбъектовМетаданных + + <key>ru</key> + <value>Быстрый поиск имен объектов метаданных</value> + + 18 + + + true + + + true + + + + БыстрыйПоискОтключаемыхСвязей + + <key>ru</key> + <value>Быстрый поиск отключаемых связей</value> + + 19 + + + true + + + true + + + + БыстрыйПоискПользовательскихНастроек + + <key>ru</key> + <value>Быстрый поиск пользовательских настроек</value> + + 20 + + + true + + + true + + + + ШрифтОбычнойГруппы + + <key>ru</key> + <value>Шрифт обычной группы</value> + + 23 + + Font + + + true + + + true + + + + РасширенныйРежим + + <key>ru</key> + <value>Расширенный режим</value> + + 5 + + Number + + 1 + + + + true + + + true + + + + Сортировка + + <key>ru</key> + <value>Сортировка</value> + + 10 + + ValueTree + + + true + + + true + + + ИдентификаторКД + + <key>ru</key> + <value>Идентификатор КД</value> + + 1 + + + true + + + true + + + + Использование + + <key>ru</key> + <value>Использование</value> + + 2 + + Boolean + + + true + + + true + + + + Представление + + <key>ru</key> + <value>Представление</value> + + 3 + + String + + + + true + + + true + + + + Направление + + <key>ru</key> + <value>Направление</value> + + 4 + + DataCompositionSortDirection + + + true + + + true + + + + ЭтоРаздел + + <key>ru</key> + <value>Это раздел</value> + + 5 + + Boolean + + + true + + + true + + + + ИндексКартинки + + <key>ru</key> + <value>Индекс картинки</value> + + 6 + + Number + + 10 + + + + true + + + true + + + + ТипНастройки + + <key>ru</key> + <value>Тип настройки</value> + + 7 + + String + + + + true + + + true + + + + ПоказыватьНаправление + + <key>ru</key> + <value>Показывать направление</value> + + 8 + + Boolean + + + true + + + true + + + + + РежимИзмененияУзлаВарианта + + <key>ru</key> + <value>Режим изменения узла варианта</value> + + 15 + + Boolean + + + true + + + true + + + + ВыбранныеПоля + + <key>ru</key> + <value>Поля</value> + + 21 + + ValueTree + + + true + + + true + + + ИдентификаторКД + + <key>ru</key> + <value>Идентификатор КД</value> + + 1 + + + true + + + true + + + + Использование + + <key>ru</key> + <value>Использование</value> + + 2 + + Boolean + + + true + + + true + + + + Представление + + <key>ru</key> + <value>Представление</value> + + 3 + + String + + + + true + + + true + + + + ЭтоГруппа + + <key>ru</key> + <value>Это группа</value> + + 4 + + Boolean + + + true + + + true + + + + Расположение + + <key>ru</key> + <value>Расположение</value> + + 5 + + DataCompositionFieldPlacement + + + true + + + true + + + + ИндексКартинки + + <key>ru</key> + <value>Индекс картинки</value> + + 6 + + Number + + 10 + + + + true + + + true + + + + ЭтоРаздел + + <key>ru</key> + <value>Это раздел</value> + + 7 + + Boolean + + + true + + + true + + + + ТипНастройки + + <key>ru</key> + <value>Тип настройки</value> + + 8 + + String + + + + true + + + true + + + + ПолеКД + + <key>ru</key> + <value>Поле КД</value> + + 9 + + + true + + + true + + + + + Отборы + + <key>ru</key> + <value>Отборы</value> + + 24 + + ValueTree + + + true + + + true + + + ИдентификаторКД + + <key>ru</key> + <value>Идентификатор КД</value> + + 1 + + + true + + + true + + + + Использование + + <key>ru</key> + <value>Использование</value> + + 2 + + Boolean + + + true + + + true + + + + Представление + + <key>ru</key> + <value>Поле</value> + + 3 + + String + + + + true + + + true + + + + Расположение + + <key>ru</key> + <value>Расположение</value> + + 5 + + DataCompositionFieldPlacement + + + true + + + true + + + + ИндексКартинки + + <key>ru</key> + <value>Индекс картинки</value> + + 6 + + Number + + 10 + + + + true + + + true + + + + Условие + + <key>ru</key> + <value>Условие</value> + + 7 + + EnumRef.ДоступныеПериодыОтчета + DataCompositionComparisonType + + + true + + + true + + + + Значение + + <key>ru</key> + <value>Значение</value> + + 8 + + + true + + + true + + + + ИндексКартинкиДоступа + + <key>ru</key> + <value>Отображение</value> + + 9 + + Number + + 10 + + + + true + + + true + + + + Заголовок + + <key>ru</key> + <value>Заголовок</value> + + 10 + + String + + + + true + + + true + + + + ЭтоРаздел + + <key>ru</key> + <value>Это раздел</value> + + 11 + + Boolean + + + true + + + true + + + + ЭтоГруппа + + <key>ru</key> + <value>Это группа</value> + + 4 + + Boolean + + + true + + + true + + + + ЭтоПараметр + + <key>ru</key> + <value>Это параметр</value> + + 12 + + Boolean + + + true + + + true + + + + ТипЗначения + + <key>ru</key> + <value>Тип значения</value> + + 13 + + TypeDescription + + + true + + + true + + + + ЗаголовокПереопределен + + <key>ru</key> + <value>Заголовок переопределен</value> + + 14 + + Boolean + + + true + + + true + + + + ТипУсловия + + <key>ru</key> + <value>Тип условия</value> + + 15 + + TypeDescription + + + true + + + true + + + + Дополнительно + + <key>ru</key> + <value>Дополнительно</value> + + 17 + + + true + + + true + + + + ВводСписком + + <key>ru</key> + <value>Ввод списком</value> + + 18 + + Boolean + + + true + + + true + + + + ВыводитьФлажок + + <key>ru</key> + <value>Выводить флажок</value> + + 19 + + Boolean + + + true + + + true + + + + ВыборГруппИЭлементов + + <key>ru</key> + <value>Выбор групп и элементов</value> + + 16 + + + true + + + true + + + + ФиксированныйСписокВыбора + + <key>ru</key> + <value>Фиксированный список выбора</value> + + 20 + + Boolean + + + true + + + true + + + + ПредставлениеЗначения + + <key>ru</key> + <value>Значение</value> + + 21 + + String + + + + true + + + true + + + + ФормаВыбора + + <key>ru</key> + <value>Форма выбора</value> + + 22 + + String + + + + true + + + true + + + + + СтруктураВарианта + + <key>ru</key> + <value>Структура</value> + + 26 + + ValueTree + + + true + + + true + + + ИдентификаторКД + + <key>ru</key> + <value>Идентификатор КД</value> + + 1 + + + true + + + true + + + + Использование + + <key>ru</key> + <value>Использование</value> + + 2 + + Boolean + + + true + + + true + + + + Представление + + <key>ru</key> + <value>Группируемые поля</value> + + 3 + + String + + + + true + + + true + + + + ЭтоГруппа + + <key>ru</key> + <value>Это группа</value> + + 4 + + Boolean + + + true + + + true + + + + ИндексКартинки + + <key>ru</key> + <value>Индекс картинки</value> + + 6 + + Number + + 10 + + + + true + + + true + + + + ФлажокДоступен + + <key>ru</key> + <value>Флажок доступен</value> + + 7 + + Boolean + + + true + + + true + + + + Заголовок + + <key>ru</key> + <value>Заголовок</value> + + 8 + + String + + + + true + + + true + + + + Подтип + + <key>ru</key> + <value>Подтип</value> + + 12 + + String + + + + true + + + true + + + + Тип + + <key>ru</key> + <value>Тип</value> + + 11 + + String + + + + true + + + true + + + + Подсвечивать + + <key>ru</key> + <value>Подсвечивать</value> + + 13 + + Boolean + + + true + + + true + + + + СодержитОтборы + + <key>ru</key> + <value>Содержит отборы</value> + + 5 + + Boolean + + + true + + + true + + + + СодержитПоляИлиСортировки + + <key>ru</key> + <value>Содержит поля или сортировки</value> + + 9 + + Boolean + + + true + + + true + + + + СодержитУсловноеОформление + + <key>ru</key> + <value>Содержит условное оформление</value> + + 10 + + Boolean + + + true + + + true + + + + ЭтоРаздел + + <key>ru</key> + <value>Это раздел</value> + + 14 + + Boolean + + + true + + + true + + + + + ЦветНеактивныхЗначенийТаблицы + + <key>ru</key> + <value>Цвет неактивных значений таблицы</value> + + 27 + + Color + + + true + + + true + + + + КомпоновщикНастроек + + <key>ru</key> + <value>Компоновщик настроек</value> + + 22 + + DataCompositionSettingsComposer + + + true + + + true + + + + ВариантИзменен + + <key>ru</key> + <value>Вариант изменен</value> + + 28 + + Boolean + + + true + + + true + + + + РезультатВыбораСформирован + + <key>ru</key> + <value>Результат выбора сформирован</value> + 1 + + Boolean + + + true + + + true + + + + ИдентификаторТекущегоУзлаКД + + <key>ru</key> + <value>Идентификатор текущего узла КД</value> + + 29 + + + true + + + true + + + + СоставГруппировки + + <key>ru</key> + <value>Состав группировки</value> + + 36 + + ValueTree + + + true + + + true + + + ИдентификаторКД + + <key>ru</key> + <value>Идентификатор КД</value> + + 1 + + + true + + + true + + + + Использование + + <key>ru</key> + <value>Использование</value> + + 2 + + Boolean + + + true + + + true + + + + Представление + + <key>ru</key> + <value>Поле</value> + + 3 + + String + + + + true + + + true + + + + ЭтоГруппа + + <key>ru</key> + <value>Это группа</value> + + 4 + + Boolean + + + true + + + true + + + + ТипГруппировки + + <key>ru</key> + <value>Тип группировки</value> + + 5 + + DataCompositionGroupType + + + true + + + true + + + + ИндексКартинки + + <key>ru</key> + <value>Индекс картинки</value> + + 6 + + Number + + 10 + + + + true + + + true + + + + Картинка + + <key>ru</key> + <value>Картинка</value> + + 7 + + Picture + + + true + + + true + + + + ТипДополнения + + <key>ru</key> + <value>Тип дополнения</value> + + 8 + + DataCompositionPeriodAdditionType + + + true + + + true + + + + ПоказыватьТипДополнения + + <key>ru</key> + <value>Показывать тип дополнения</value> + + 9 + + Boolean + + + true + + + true + + + + ТипНастройки + + <key>ru</key> + <value>Тип настройки</value> + + 10 + + String + + + + true + + + true + + + + ПолеКД + + <key>ru</key> + <value>Поле КД</value> + + 11 + + + true + + + true + + + + + БыстрыйПоискНастроекВарианта + + <key>ru</key> + <value>Быстрый поиск настроек варианта</value> + + 6 + + + true + + + true + + + + ОтключаемыеСвязи + + <key>ru</key> + <value>Отключаемые связи</value> + + 7 + + ValueTable + + + true + + + true + + + ТипСвязи + + <key>ru</key> + <value>Тип связи</value> + + 1 + + String + + + + true + + + true + + + + ВедущийИдентификаторВФорме + + <key>ru</key> + <value>Ведущий идентификатор в форме</value> + + 2 + + + true + + + true + + + + ПодчиненныйИдентификаторВФорме + + <key>ru</key> + <value>Подчиненный идентификатор в форме</value> + + 3 + + + true + + + true + + + + ВедущийТип + + <key>ru</key> + <value>Ведущий тип</value> + + 4 + + TypeDescription + + + true + + + true + + + + ПодчиненныйТип + + <key>ru</key> + <value>Подчиненный тип</value> + + 5 + + TypeDescription + + + true + + + true + + + + ПодчиненныйИмяПараметра + + <key>ru</key> + <value>Подчиненный имя параметра</value> + + 6 + + String + + + + true + + + true + + + + ПодчиненныйДействие + + <key>ru</key> + <value>Подчиненный действие</value> + + 7 + + + true + + + true + + + + + ПользовательскиеНастройкиМодифицированы + + <key>ru</key> + <value>Пользовательские настройки модифицированы</value> + + 8 + + Boolean + + + true + + + true + + + + ТипТекущегоУзлаКД + + <key>ru</key> + <value>Тип текущего узла КД</value> + + 37 + + String + + + + true + + + true + + + + ТекущийУзелКДТипДиаграммы + + <key>ru</key> + <value>Тип диаграммы</value> + + 38 + + + true + + + true + + + + Оформление + + <key>ru</key> + <value>Оформление</value> + + 9 + + ValueTree + + + true + + + true + + + ИдентификаторКД + + <key>ru</key> + <value>Идентификатор КД</value> + + 1 + + + true + + + true + + + + Использование + + <key>ru</key> + <value>Использование</value> + + 2 + + Boolean + + + true + + + true + + + + Представление + + <key>ru</key> + <value>Стиль, оформляемые поля и условие</value> + + 3 + + String + + + + true + + + true + + + + ЭтоГруппа + + <key>ru</key> + <value>Это группа</value> + + 4 + + Boolean + + + true + + + true + + + + Расположение + + <key>ru</key> + <value>Расположение</value> + + 5 + + DataCompositionFieldPlacement + + + true + + + true + + + + ИндексКартинки + + <key>ru</key> + <value>Индекс картинки</value> + + 6 + + Number + + 10 + + + + true + + + true + + + + ОбластьИспользования + + <key>ru</key> + <value>Область использования</value> + + 10 + + String + + + + true + + + true + + + + ИндексКартинкиДоступа + + <key>ru</key> + <value>Индекс картинки доступа</value> + + 11 + + Number + + 10 + + + + true + + + true + + + + Заголовок + + <key>ru</key> + <value>Заголовок</value> + + 12 + + String + + + + true + + + true + + + + ЗаголовокПереопределен + + <key>ru</key> + <value>Заголовок переопределен</value> + + 13 + + Boolean + + + true + + + true + + + + + Отчет + + <key>ru</key> + <value>Отчет</value> + + 39 ReportObject @@ -257,26 +9384,1002 @@
              true
              - - ЗавершитьРедактирование + + НеобходимоОбновитьНастройки <key>ru</key> - <value>Завершить редактирование</value> + <value>Необходимо обновить настройки</value> + + 40 + + Boolean + + + true + + + true + + + + РезультатЗаполненияНастроек + + <key>ru</key> + <value>Результат заполнения настроек</value> + + 41 + + + true + + + true + + + + ФормаПараметры + + <key>ru</key> + <value>Форма параметры</value> + + 42 + + + true + + + + + ЗакрытьБезФормирования + + <key>ru</key> + <value>Закрыть</value> 1 ru - Завершить редактирование + Завершить редактирование настроек и закрыть true - ЗавершитьРедактирование + ЗакрытьБезФормирования - Auto + DontUse + Auto + + + ЗакрытьИСформировать + + <key>ru</key> + <value>Закрыть и сформировать</value> + + 2 + + ru + Закрыть и сформировать + + + true + + + StdPicture.GenerateReport + + + + ЗакрытьИСформировать + + + DontUse + Auto + + + Сортировка_ПереместитьВверх + + <key>ru</key> + <value>Переместить вверх</value> + + 6 + + ru + Поднять приоритет сортировки по колонке + + + true + + + StdPicture.MoveUp + + + + Сортировка_ПереместитьВверх + + + DontUse + Auto + + + Сортировка_ПереместитьВниз + + <key>ru</key> + <value>Переместить вниз</value> + + 7 + + ru + Понизить приоритет сортировки по колонке + + + true + + + StdPicture.MoveDown + + + + Сортировка_ПереместитьВниз + + + DontUse + Auto + + + Сортировка_ПоВозрастанию + + <key>ru</key> + <value>Сортировать по возрастанию</value> + + 8 + + ru + Сортировать данные колонки по возрастанию + + + true + + + StdPicture.SortListAsc + + + + Сортировка_ПоВозрастанию + + + DontUse + Auto + + + Сортировка_ПоУбыванию + + <key>ru</key> + <value>Сортировать по убыванию</value> + + 9 + + ru + Сортировать данные колонки по убыванию + + + true + + + StdPicture.SortListDesc + + + + Сортировка_ПоУбыванию + + + DontUse + Auto + + + ВыбранныеПоля_ПереместитьВверх + + <key>ru</key> + <value>Переместить вверх</value> + + 10 + + ru + Переместить поле выше или левее + + + true + + + StdPicture.MoveUp + + + + ВыбранныеПоля_ПереместитьВверх + + + DontUse + Auto + + + ВыбранныеПоля_ПереместитьВниз + + <key>ru</key> + <value>Переместить вниз</value> + + 11 + + ru + Переместить поле ниже или правее + + + true + + + StdPicture.MoveDown + + + + ВыбранныеПоля_ПереместитьВниз + + + DontUse + Auto + + + ВыбранныеПоля_Сгруппировать + + <key>ru</key> + <value>Сгруппировать</value> + + 12 + + ru + Выбранные поля сгруппировать + + + true + + + StdPicture.CreateFolder + + + + ВыбранныеПоля_Сгруппировать + + + DontUse + Auto + + + ВыбранныеПоля_Разгруппировать + + <key>ru</key> + <value>Разгруппировать</value> + + 13 + + ru + Выбранные поля разгруппировать + + + true + + + + ВыбранныеПоля_Разгруппировать + + + DontUse + Auto + + + Отборы_Сгруппировать + + <key>ru</key> + <value>Сгруппировать отборы</value> + + 3 + + ru + Создать группу и поместить в нее выделенные отборы + + + true + + + StdPicture.CreateFolder + + + + Отборы_Сгруппировать + + + DontUse + Auto + + + Отборы_Разгруппировать + + <key>ru</key> + <value>Разгруппировать</value> + + 4 + + ru + Удалить выделенную группу, сохранив вложенные отборы + + + true + + + + Отборы_Разгруппировать + + + DontUse + Auto + + + Отборы_ПереместитьВверх + + <key>ru</key> + <value>Переместить вверх</value> + + 5 + + ru + Переместить вверх + + + true + + + StdPicture.MoveUp + + + + Отборы_ПереместитьВверх + + + DontUse + Auto + + + Отборы_ПереместитьВниз + + <key>ru</key> + <value>Переместить вниз</value> + + 14 + + ru + Переместить вниз + + + true + + + StdPicture.MoveDown + + + + Отборы_ПереместитьВниз + + + DontUse + Auto + + + СтруктураВарианта_Сгруппировать + + <key>ru</key> + <value>Сгруппировать...</value> + + 15 + + ru + Обернуть эту строку в группировку по полю... + + + true + + + CommonPicture.ДобавитьРодительский + + + + СтруктураВарианта_Сгруппировать + + + Picture + DontUse + Auto + + + СтруктураВарианта_ПереместитьВышеИЛевее + + <key>ru</key> + <value>Переместить выше и левее</value> + + 17 + + ru + Структура варианта переместить выше и левее + + + true + + + CommonPicture.ПереместитьВлевоВверх + + + + СтруктураВарианта_ПереместитьВышеИЛевее + + + Picture + DontUse + Auto + + + СтруктураВарианта_ПереместитьНижеИПравее + + <key>ru</key> + <value>Переместить ниже и правее</value> + + 18 + + ru + Структура варианта переместить ниже и правее + + + true + + + CommonPicture.ПереместитьВправоВниз + + + + СтруктураВарианта_ПереместитьНижеИПравее + + + Picture + DontUse + Auto + + + СтруктураВарианта_ПереместитьВверх + + <key>ru</key> + <value>Переместить вверх</value> + + 19 + + ru + Переместить вверх + + + true + + + StdPicture.MoveUp + + + + СтруктураВарианта_ПереместитьВверх + + + Picture + DontUse + Auto + + + СтруктураВарианта_ПереместитьВниз + + <key>ru</key> + <value>Переместить вниз</value> + + 20 + + ru + Переместить вниз + + + true + + + StdPicture.MoveDown + + + + СтруктураВарианта_ПереместитьВниз + + + Picture + DontUse + Auto + + + СтруктураВарианта_УстановитьФлажки + + <key>ru</key> + <value>Установить флажки</value> + + 21 + + ru + Включить все группировки + + + true + + + StdPicture.CheckAll + + + + СтруктураВарианта_УстановитьФлажки + + + Picture + DontUse + Auto + + + СтруктураВарианта_СнятьФлажки + + <key>ru</key> + <value>Снять флажки</value> + + 22 + + ru + Отключить все группировки + + + true + + + StdPicture.UncheckAll + + + + СтруктураВарианта_СнятьФлажки + + + Picture + DontUse + Auto + + + СоставГруппировки_ПереместитьВверх + + <key>ru</key> + <value>Переместить вверх</value> + + 16 + + ru + Переместить поле выше или левее + + + true + + + StdPicture.MoveUp + + + + СоставГруппировки_ПереместитьВверх + + + DontUse + Auto + + + СоставГруппировки_ПереместитьВниз + + <key>ru</key> + <value>Переместить вниз</value> + + 23 + + ru + Переместить поле ниже или правее + + + true + + + StdPicture.MoveDown + + + + СоставГруппировки_ПереместитьВниз + + + DontUse + Auto + + + Оформление_ПереместитьВниз + + <key>ru</key> + <value>Переместить вниз</value> + + 24 + + ru + Переместить поле ниже или правее + + + true + + + StdPicture.MoveDown + + + + ВыбранныеПоля_ПереместитьВниз + + + DontUse + Auto + + + Оформление_ПереместитьВверх + + <key>ru</key> + <value>Переместить вверх</value> + + 25 + + ru + Переместить поле выше или левее + + + true + + + StdPicture.MoveUp + + + + ВыбранныеПоля_ПереместитьВверх + + + DontUse + Auto + + + СтруктураВарианта_Изменить + + <key>ru</key> + <value>Изменить</value> + + 26 + + true + + F2 + + StdPicture.Change + + + + СтруктураВарианта_Изменить + + + Picture + DontUse + Auto + + + СтруктураВарианта_ДобавитьТаблицу + + <key>ru</key> + <value>Добавить таблицу</value> + + 27 + + ru + Добавить таблицу + + + true + + + StdPicture.DataCompositionNewTable + + + + СтруктураВарианта_ДобавитьТаблицу + + + DontUse + Auto + + + СтруктураВарианта_ДобавитьДиаграмму + + <key>ru</key> + <value>Добавить диаграмму</value> + + 28 + + ru + Добавить диаграмму + + + true + + + StdPicture.DataCompositionNewChart + + + + СтруктураВарианта_ДобавитьДиаграмму + + + DontUse + Auto + + + ВыбранныеПоля_Сортировка_Влево + + <key>ru</key> + <value>Удалить выбранные сортировки</value> + + 29 + + ru + Удалить выбранные сортировки + + + true + + + StdPicture.MoveLeft + + + + ВыбранныеПоля_Сортировка_Влево + + + Picture + DontUse + Auto + + + ВыбранныеПоля_Сортировка_Вправо + + <key>ru</key> + <value>Добавить сортировку по выбранному полю</value> + + 30 + + ru + Добавить сортировку по выбранному полю + + + true + + + StdPicture.MoveRight + + + + ВыбранныеПоля_Сортировка_Вправо + + + Picture + DontUse + Auto + + + ВыбранныеПоля_Сортировка_ВлевоВсе + + <key>ru</key> + <value>Удалить все сортировки</value> + + 31 + + ru + Удалить все сортировки + + + true + + + CommonPicture.ПереместитьВлевоВсе + + + + ВыбранныеПоля_Сортировка_ВлевоВсе + + + Picture + DontUse + Auto + + + ИзменитьУсловияОтборов + + <key>ru</key> + <value>Изменить условия отборов...</value> + + 32 + + ru + Изменить условия отборов + + + true + + + CommonPicture.ВидСравнения + + + + ИзменитьУсловияОтборов + + + DontUse + Auto + + + ВыбранныеПоля_УстановитьФлажки + + <key>ru</key> + <value>Установить флажки</value> + + 33 + + ru + Включить флажки всех полей + + + true + + + StdPicture.CheckAll + + + + ВыбранныеПоля_УстановитьФлажки + + + Picture + DontUse + Auto + + + ВыбранныеПоля_СнятьФлажки + + <key>ru</key> + <value>Снять флажки</value> + + 34 + + ru + Снять флажки всех полей + + + true + + + StdPicture.UncheckAll + + + + ВыбранныеПоля_СнятьФлажки + + + Picture + DontUse + Auto + + + Сортировка_СнятьФлажки + + <key>ru</key> + <value>Снять флажки</value> + + 35 + + ru + Отключить все сортировки + + + true + + + StdPicture.UncheckAll + + + + Сортировка_СнятьФлажки + + + Picture + DontUse + Auto + + + Сортировка_УстановитьФлажки + + <key>ru</key> + <value>Установить флажки</value> + + 36 + + ru + Включить все сортировки + + + true + + + StdPicture.CheckAll + + + + Сортировка_УстановитьФлажки + + + Picture + DontUse + Auto + + + Отборы_УстановитьФлажки + + <key>ru</key> + <value>Установить флажки</value> + + 37 + + ru + Включить все параметры и отборы + + + true + + + StdPicture.CheckAll + + + + Отборы_УстановитьФлажки + + + DontUse + Auto + + + Отборы_СнятьФлажки + + <key>ru</key> + <value>Снять флажки</value> + + 38 + + ru + Отключить все параметры и отборы + + + true + + + StdPicture.UncheckAll + + + + Отборы_СнятьФлажки + + + DontUse Auto @@ -284,6 +10387,17 @@ - Settings + + OnLoadUserSettingsAtServer + ПриЗагрузкеПользовательскихНастроекНаСервере + + + OnLoadVariantAtServer + ПриЗагрузкеВариантаНаСервере + + + OnUpdateUserSettingSetAtServer + ПриОбновленииСоставаПользовательскихНастроекНаСервере +
              diff --git a/SSL/src/CommonForms/ФормаНастроекОтчета/Help/ru.html b/SSL/src/CommonForms/ФормаНастроекОтчета/Help/ru.html index a52e326db..f452976f3 100644 --- a/SSL/src/CommonForms/ФормаНастроекОтчета/Help/ru.html +++ b/SSL/src/CommonForms/ФормаНастроекОтчета/Help/ru.html @@ -1,31 +1,50 @@ -

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

              +

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

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

              -

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

              +

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

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

              Окно настроек в зависимости от сложности отчета состоит из нескольких вкладок:

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

            Окно настроек в зависимости от сложности отчета состоит из нескольких вкладок:

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

            Отборы

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

            Поля

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

            Сортировка

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

            Оформление

            -
            • На вкладке можно поменять некоторые параметры оформления отчета, например, с помощью флажка включить или выключить Цвет фона, в который можно окрасить все поля.

            Структура

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

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

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

            См. также:

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

      Поля и сортировки

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

      Оформление

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

      Структура

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

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

      \ 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 ae437ae07..0ae265632 100644 --- a/SSL/src/CommonForms/ФормаНастроекОтчета/Module.bsl +++ b/SSL/src/CommonForms/ФормаНастроекОтчета/Module.bsl @@ -1,3 +1,8 @@ +&НаКлиенте +Перем ПеременныеКлиента; + +//////////////////////////////////////////////////////////////////////////////// +// ФОРМА #Область ОбработчикиСобытийФормы @@ -7,51 +12,6201 @@ Возврат; КонецЕсли; - Если Параметры.Свойство("ПредставлениеВарианта") И ЗначениеЗаполнено(Параметры.ПредставлениеВарианта) Тогда - АвтоЗаголовок = Ложь; - Заголовок = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Изменение настроек отчета ""%1""'"), - Параметры.ПредставлениеВарианта); + ФормаПараметры = Новый Структура( + "КлючНазначенияИспользования, КлючПользовательскихНастроек, + |Расшифровка, СформироватьПриОткрытии, ТолькоПросмотр, + |ФиксированныеНастройки, Раздел, Подсистема, ПодсистемаПредставление"); + ЗаполнитьЗначенияСвойств(ФормаПараметры, Параметры); + ФормаПараметры.Вставить("Отбор", Новый Структура); + Если ТипЗнч(Параметры.Отбор) = Тип("Структура") Тогда + ОбщегоНазначенияКлиентСервер.ДополнитьСтруктуру(ФормаПараметры.Отбор, Параметры.Отбор, Истина); + Параметры.Отбор.Очистить(); + КонецЕсли; + + Если Не Параметры.Свойство("НастройкиОтчета", НастройкиОтчета) Тогда + ВызватьИсключение НСтр("ru = 'Не передан служебный параметр ""НастройкиОтчета"".'"); + КонецЕсли; + Если Не Параметры.Свойство("ВариантНаименование", ВариантНаименование) Тогда + ВызватьИсключение НСтр("ru = 'Не передан служебный параметр ""ВариантНаименование"".'"); + КонецЕсли; + Параметры.Свойство("ИдентификаторТекущегоУзлаКД", ИдентификаторТекущегоУзлаКД); + КлючСохраненияПоложенияОкна = НастройкиОтчета.ПолноеИмя; + Если ИдентификаторТекущегоУзлаКД <> Неопределено Тогда + ПолныйПутьТекущегоУзлаКД = ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(Параметры, "ПолныйПутьТекущегоУзлаКД"); + НастройкиКД = ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(Параметры, "Вариант"); + Если НастройкиКД = Неопределено Тогда + НастройкиКД = Отчет.КомпоновщикНастроек.Настройки; + КонецЕсли; + КорневойУзел = ОтчетыКлиентСервер.НайтиЭлементПоПолномуПути(НастройкиКД, ПолныйПутьТекущегоУзлаКД); + Если КорневойУзел <> Неопределено Тогда + ИдентификаторТекущегоУзлаКД = НастройкиКД.ПолучитьИдентификаторПоОбъекту(КорневойУзел); + КонецЕсли; + РежимИзмененияУзлаВарианта = Истина; + Высота = 0; + КлючСохраненияПоложенияОкна = КлючСохраненияПоложенияОкна + ".Узел"; + Если Не Параметры.Свойство("Заголовок", Заголовок) Тогда + ВызватьИсключение НСтр("ru = 'Не передан служебный параметр ""Заголовок"".'"); + КонецЕсли; + Если Не Параметры.Свойство("ТипТекущегоУзлаКД", ТипТекущегоУзлаКД) Тогда + ВызватьИсключение НСтр("ru = 'Не передан служебный параметр ""ТипТекущегоУзлаКД"".'"); + КонецЕсли; + Иначе + Если Не ЗначениеЗаполнено(ВариантНаименование) Тогда + ВариантНаименование = НастройкиОтчета.Наименование; + КонецЕсли; + Заголовок = НСтр("ru = 'Настройки отчета'") + " """ + ВариантНаименование + """"; + КонецЕсли; + КлючНазначенияИспользования = КлючСохраненияПоложенияОкна; + + Элементы.РасширенныйРежим.Видимость = НастройкиОтчета.РазрешеноМенятьВарианты; + + Если РежимИзмененияУзлаВарианта Тогда + ИмяСтраницы = ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(Параметры, "ИмяСтраницы", "СтраницаСоставГруппировки"); + РасширенныйРежим = 1; + Иначе + РасширенныйРежим = ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(НастройкиОтчета, "ФормаНастроекРасширенныйРежим", 0); + ИмяСтраницы = ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(НастройкиОтчета, "ФормаНастроекИмяСтраницы", "СтраницаОтборы"); + КонецЕсли; + Страница = Элементы.Найти(ИмяСтраницы); + Если Страница <> Неопределено Тогда + Элементы.СтраницыНастроек.ТекущаяСтраница = Страница; + КонецЕсли; + + Если НастройкиОтчета.СхемаМодифицирована Тогда + Отчет.КомпоновщикНастроек.Инициализировать(Новый ИсточникДоступныхНастроекКомпоновкиДанных(НастройкиОтчета.АдресСхемы)); + КонецЕсли; + + ЦветНеактивныхЗначенийТаблицы = ЦветаСтиля.ТекстЗапрещеннойЯчейкиЦвет; + + // Регистрация команд и реквизитов формы, которые не удаляются при перезаполнении быстрых настроек. + НаборРеквизитов = ПолучитьРеквизиты(); + Для Каждого Реквизит Из НаборРеквизитов Цикл + ПостоянныеРеквизиты.Добавить(ПолноеИмяРеквизита(Реквизит)); + КонецЦикла; + Для Каждого Команда Из Команды Цикл + ПостоянныеКоманды.Добавить(Команда.Имя); + КонецЦикла; + + ДобавитьУсловноеОформление(); + + НеобходимоОбновитьНастройки = Истина; +КонецПроцедуры + +&НаСервере +Процедура ПриЗагрузкеВариантаНаСервере(Настройки) + Если Параметры.Свойство("АвтоТест") Тогда + Возврат; + КонецЕсли; + + Если ТипЗнч(ФормаПараметры.Отбор) = Тип("Структура") Тогда + ОтчетыСервер.УстановитьФиксированныеОтборы(ФормаПараметры.Отбор, Отчет.КомпоновщикНастроек, НастройкиОтчета); + КонецЕсли; + + НеобходимоОбновитьНастройки = Истина; +КонецПроцедуры + +&НаСервере +Процедура ПриЗагрузкеПользовательскихНастроекНаСервере(Настройки) + Если Параметры.Свойство("АвтоТест") Тогда + Возврат; + КонецЕсли; + + НеобходимоОбновитьНастройки = Истина; +КонецПроцедуры + +&НаСервере +Процедура ПриОбновленииСоставаПользовательскихНастроекНаСервере(СтандартнаяОбработка) + Если Параметры.Свойство("АвтоТест") Тогда + Возврат; + КонецЕсли; + + СтандартнаяОбработка = Ложь; + ВариантМодифицирован = Ложь; + + Если НеобходимоОбновитьНастройки Тогда + НеобходимоОбновитьНастройки = Ложь; + + ПараметрыЗаполнения = Новый Структура; + ПараметрыЗаполнения.Вставить("ИмяСобытия", "ПриСозданииНаСервере"); + Если Не РежимИзмененияУзлаВарианта И РасширенныйРежим = 1 Тогда + ПараметрыЗаполнения.Вставить("ОбновитьНастройкиВарианта", Истина); + КонецЕсли; + РезультатЗаполненияНастроек = БыстрыеНастройкиЗаполнить(ПараметрыЗаполнения); + КонецЕсли; +КонецПроцедуры + +&НаКлиенте +Процедура ПриОткрытии(Отказ) + ПеременныеКлиента = Новый Структура; + ПоказатьРезультатЗаполненияНастроек(Неопределено); +КонецПроцедуры + +&НаКлиенте +Процедура ПередЗакрытием(Отказ, СтандартнаяОбработка) + ВариантМодифицирован = Ложь; +КонецПроцедуры + +&НаКлиенте +Процедура ПриЗакрытии() + Если Не РезультатВыбораСформирован Тогда + Если ОписаниеОповещенияОЗакрытии <> Неопределено Тогда + ВыполнитьОбработкуОповещения(ОписаниеОповещенияОЗакрытии, РезультатВыбора(Ложь)); + КонецЕсли; + КонецЕсли; +КонецПроцедуры + +#КонецОбласти + +//////////////////////////////////////////////////////////////////////////////// +// ЭЛЕМЕНТЫ + +#Область ОбработчикиСобытийЭлементовШапкиФормы + +&НаКлиенте +Процедура РасширенныйРежимПриИзменении(Элемент) + ПараметрыЗаполнения = Новый Структура; + ПараметрыЗаполнения.Вставить("ИмяСобытия", "РасширенныйРежимПриИзменении"); + Если РасширенныйРежим = 1 Тогда + ПараметрыЗаполнения.Вставить("ОбновитьНастройкиВарианта", Истина); + Иначе + ПараметрыЗаполнения.Вставить("СброситьПользовательскиеНастройки", Истина); + КонецЕсли; + БыстрыеНастройкиЗаполнитьКлиент(ПараметрыЗаполнения); +КонецПроцедуры + +&НаКлиенте +Процедура ПодсказкаНетПользовательскихНастроекОбработкаНавигационнойСсылки(Элемент, НавигационнаяСсылкаФорматированнойСтроки, СтандартнаяОбработка) + СтандартнаяОбработка = Ложь; + РасширенныйРежим = Истина; + РасширенныйРежимПриИзменении(Неопределено); +КонецПроцедуры + +&НаКлиенте +Процедура ТекущийУзелКДТипДиаграммыПриИзменении(Элемент) + КорневойУзелКД = Отчет.КомпоновщикНастроек.Настройки.ПолучитьОбъектПоИдентификатору(ИдентификаторТекущегоУзлаКД); + Если ТипЗнч(КорневойУзелКД) = Тип("НастройкиВложенногоОбъектаКомпоновкиДанных") Тогда + КорневойУзелКД = КорневойУзелКД.Настройки; + КонецЕсли; + УстановитьПараметрВывода(КорневойУзелКД, "ТипДиаграммы", ТекущийУзелКДТипДиаграммы); + + ПользовательскиеНастройкиМодифицированы = Истина; + ВариантМодифицирован = Ложь; + Если РасширенныйРежим = 1 Тогда + ВариантИзменен = Истина; + КонецЕсли; +КонецПроцедуры + +&НаКлиенте +Процедура ПодсказкаЕстьВложенныеОтчетыОбработкаНавигационнойСсылки(Элемент, НавигационнаяСсылка, СтандартнаяОбработка) + СтандартнаяОбработка = Ложь; + + ПараметрыФормы = Новый Структура; + ОбщегоНазначенияКлиентСервер.ДополнитьСтруктуру(ПараметрыФормы, ФормаПараметры, Истина); + ПараметрыФормы.Вставить("Вариант", Отчет.КомпоновщикНастроек.Настройки); + ПараметрыФормы.Вставить("КлючВарианта", Строка(КлючТекущегоВарианта)); + ПараметрыФормы.Вставить("ПользовательскиеНастройки", Отчет.КомпоновщикНастроек.ПользовательскиеНастройки); + ПараметрыФормы.Вставить("ПредставлениеВарианта", ВариантНаименование); + ПараметрыФормы.Вставить("ПредставлениеПользовательскихНастроек", ""); + + Обработчик = Новый ОписаниеОповещения("ФормаВариантаЗавершение", ЭтотОбъект); + + Режим = РежимОткрытияОкнаФормы.БлокироватьОкноВладельца; + + ОткрытьФорму(НастройкиОтчета.ПолноеИмя + ".ФормаВарианта", ПараметрыФормы, ЭтотОбъект, , , , Обработчик, Режим); +КонецПроцедуры + +&НаКлиенте +Процедура ФормаВариантаЗавершение(Результат, ПараметрыВыполнения) Экспорт + Если ТипЗнч(Результат) <> Тип("Структура") Тогда + Возврат; + КонецЕсли; + БыстрыеНастройкиЗаполнитьКлиент(Результат); +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// Подключаемые + +&НаКлиенте +Процедура Подключаемый_ФлажокИспользование_ПриИзменении(Элемент) + ФлажокИмя = Элемент.Имя; + ИдентификаторЭлемента = Прав(ФлажокИмя, 32); + Тип = Лев(ФлажокИмя, СтрНайти(ФлажокИмя, "_")-1); + + ПользовательскаяНастройкаКД = НайтиПользовательскуюНастройкуЭлемента(ИдентификаторЭлемента); + + Если Тип = "ЭлементОтбора" Или Тип = "ЗначениеПараметра" Тогда + ТаблицаИмя = Тип + "_СписокЗначений_" + ИдентификаторЭлемента; + ТаблицаФормы = Элементы.Найти(ТаблицаИмя); + Если ТаблицаФормы <> Неопределено Тогда + ТаблицаФормы.ЦветТекста = ?(ПользовательскаяНастройкаКД.Использование, Новый Цвет, ЦветНеактивныхЗначенийТаблицы); + КонецЕсли; + КонецЕсли; + + ПользовательскиеНастройкиМодифицированы = Истина; + Если РасширенныйРежим = 1 Тогда + Найденные = НайтиНастройкуВарианта(ЭтотОбъект, ИдентификаторЭлемента); + Если Найденные <> Неопределено Тогда + Найденные.ЭлементКД.Использование = ПользовательскаяНастройкаКД.Использование; + ВариантИзменен = Истина; + КонецЕсли; + КонецЕсли; +КонецПроцедуры + +&НаКлиенте +Процедура Подключаемый_ПолеВвода_ПриИзменении(Элемент) + ИдентификаторЭлемента = Прав(Элемент.Имя, 32); + + ПользовательскаяНастройкаКД = НайтиПользовательскуюНастройкуЭлемента(ИдентификаторЭлемента); + Если ТипЗнч(ПользовательскаяНастройкаКД) = Тип("ЗначениеПараметраНастроекКомпоновкиДанных") Тогда + Значение = ПользовательскаяНастройкаКД.Значение; + ИначеЕсли ТипЗнч(ПользовательскаяНастройкаКД) = Тип("ЭлементОтбораКомпоновкиДанных") Тогда + Значение = ПользовательскаяНастройкаКД.ПравоеЗначение; + Иначе + Возврат; + КонецЕсли; + + Если ЗначениеЗаполнено(Значение) Тогда + ПользовательскаяНастройкаКД.Использование = Истина; + КонецЕсли; + + Если ПользовательскаяНастройкаКД.Использование Тогда // Очистка значений при изменении значения. + Найденные = ОтключаемыеСвязи.НайтиСтроки(Новый Структура("ВедущийИдентификаторВФорме", ИдентификаторЭлемента)); + Для Каждого Связь Из Найденные Цикл + Если Не ЗначениеЗаполнено(Связь.ПодчиненныйИдентификаторВФорме) Тогда + Продолжить; + КонецЕсли; + Если Связь.ТипСвязи = "ПараметровВыбора" Тогда + Если Связь.ПодчиненныйДействие <> РежимИзмененияСвязанногоЗначения.Очищать Тогда + Продолжить; + КонецЕсли; + Иначе + Продолжить; + КонецЕсли; + ПодчиненныйДополнительно = НайтиДополнительныеНастройкиЭлемента(Связь.ПодчиненныйИдентификаторВФорме); + Если ПодчиненныйДополнительно <> Неопределено Тогда + Если ПодчиненныйДополнительно.ВыводитьФлажок Тогда + ПодчиненныйНастройкаКД = НайтиПользовательскуюНастройкуЭлемента(Связь.ПодчиненныйИдентификаторВФорме); + Если ПодчиненныйНастройкаКД <> Неопределено Тогда + ПодчиненныйНастройкаКД.Использование = Ложь; + КонецЕсли; + КонецЕсли; + Если Не ПодчиненныйДополнительно.ОграничиватьВыборУказаннымиЗначениями Тогда + ПодчиненныйДополнительно.ЗначенияДляВыбора.Очистить(); + КонецЕсли; + КонецЕсли; + КонецЦикла; + КонецЕсли; + + ПользовательскиеНастройкиМодифицированы = Истина; +КонецПроцедуры + +&НаКлиенте +Процедура Подключаемый_ФлажокЗначения_ПриИзменении(Элемент) + ИдентификаторЭлемента = Прав(Элемент.Имя, 32); + Значение = ЭтотОбъект[Элемент.Имя]; + + ПользовательскаяНастройкаКД = НайтиПользовательскуюНастройкуЭлемента(ИдентификаторЭлемента); + Если ТипЗнч(ПользовательскаяНастройкаКД) = Тип("ЗначениеПараметраНастроекКомпоновкиДанных") Тогда + ПользовательскаяНастройкаКД.Значение = Значение; + Иначе + ПользовательскаяНастройкаКД.ПравоеЗначение = Значение; + КонецЕсли; + + ПользовательскиеНастройкиМодифицированы = Истина; +КонецПроцедуры + +&НаКлиенте +Процедура Подключаемый_СписокКомпоновщика_НачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка) + ОтчетыКлиент.СписокКомпоновщикаНачалоВыбора(ЭтотОбъект, Элемент, ДанныеВыбора, СтандартнаяОбработка); +КонецПроцедуры + +&НаКлиенте +Процедура Подключаемый_ЗначениеКомпоновщика_НачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка) + ОтчетыКлиент.ЗначениеКомпоновщикаНачалоВыбора(ЭтотОбъект, Элемент, ДанныеВыбора, СтандартнаяОбработка); +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// Подключаемые - Стандартный период. + +&НаКлиенте +Процедура Подключаемый_СтандартныйПериод_Вид_ПриИзменении(Элемент) + ВидПериодаИмя = Элемент.Имя; + ИдентификаторЭлемента = Прав(ВидПериодаИмя, 32); + СвойстваНастройкиТип = Лев(ВидПериодаИмя, СтрНайти(ВидПериодаИмя, "_Вид_")-1); + + СтраницыИмя = СвойстваНастройкиТип + "_Страницы_" + ИдентификаторЭлемента; + ЗначениеИмя = СвойстваНастройкиТип + "_Значение_" + ИдентификаторЭлемента; + ПредставлениеИмя = СвойстваНастройкиТип + "_Представление_" + ИдентификаторЭлемента; + СтраницаПроизвольныйИмя = СвойстваНастройкиТип + "_СтраницаПроизвольный_" + ИдентификаторЭлемента; + СтраницаСтандартныйИмя = СвойстваНастройкиТип + "_СтраницаСтандартный_" + ИдентификаторЭлемента; + + Значение = ЭтотОбъект[ЗначениеИмя]; + + ВидПериода = ЭтотОбъект[ВидПериодаИмя]; + + Если ЗначениеЗаполнено(ВидПериода) Тогда + ВыбранПроизвольный = ВидПериода = ПредопределенноеЗначение("Перечисление.ДоступныеПериодыОтчета.ПроизвольныйПериод"); + Иначе + ВидПериода = ПредопределенноеЗначение("Перечисление.ДоступныеПериодыОтчета.ПроизвольныйПериод"); + ЭтотОбъект[ВидПериодаИмя] = ВидПериода; + ВыбранПроизвольный = Истина; + КонецЕсли; + + Если ВыбранПроизвольный Тогда + + // Переключение страницы. + Элементы[СтраницыИмя].ТекущаяСтраница = Элементы[СтраницаПроизвольныйИмя]; + + Значение.Вариант = ВариантСтандартногоПериода.ПроизвольныйПериод; + + Иначе + + // Переключение страницы. + Элементы[СтраницыИмя].ТекущаяСтраница = Элементы[СтраницаСтандартныйИмя]; + + // Приведение значения периода в соответствие с выбранным видом. + ДатаСеанса = НачалоДня(ОбщегоНазначенияКлиент.ДатаСеанса()); + НачалоПериода = НачалоДня(Значение.ДатаНачала); + КонецПериода = КонецДня(Значение.ДатаОкончания); + Если Не ЗначениеЗаполнено(НачалоПериода) + Или (ДатаСеанса >= НачалоПериода И ДатаСеанса <= КонецПериода) Тогда + НачалоПериода = ДатаСеанса; + КонецЕсли; + НачалоПериода = ОтчетыКлиентСервер.НачалоПериодаОтчета(ВидПериода, НачалоПериода); + КонецПериода = ОтчетыКлиентСервер.КонецПериодаОтчета(ВидПериода, НачалоПериода); + + Значение.ДатаНачала = НачалоПериода; + Значение.ДатаОкончания = КонецПериода; + + КонецЕсли; + + Представление = ОтчетыКлиентСервер.ПредставлениеСтандартногоПериода(Значение, ВидПериода); + ЭтотОбъект[ПредставлениеИмя] = Представление; + ЭтотОбъект[ЗначениеИмя] = Значение; + + ПользовательскаяНастройкаКД = НайтиПользовательскуюНастройкуЭлемента(ИдентификаторЭлемента); + Если ТипЗнч(ПользовательскаяНастройкаКД) = Тип("ЗначениеПараметраНастроекКомпоновкиДанных") Тогда + ПользовательскаяНастройкаКД.Значение = Значение; + Иначе + ПользовательскаяНастройкаКД.ПравоеЗначение = Значение; + КонецЕсли; + + ПользовательскаяНастройкаКД.Использование = Истина; + + ПользовательскиеНастройкиМодифицированы = Истина; +КонецПроцедуры + +&НаКлиенте +Процедура Подключаемый_СтандартныйПериод_Значение_НачалоВыбора(Элемент, СтандартнаяОбработка) + СтандартнаяОбработка = Ложь; + + // Формирование сведений по элементу. + ПредставлениеИмя = Элемент.Имя; + ИдентификаторЭлемента = Прав(ПредставлениеИмя, 32); + СвойстваНастройкиТип = Лев(ПредставлениеИмя, СтрНайти(ПредставлениеИмя, "_Представление_")-1); + + ЗначениеИмя = СвойстваНастройкиТип + "_Значение_" + ИдентификаторЭлемента; + ВидПериодаИмя = СвойстваНастройкиТип + "_Вид_" + ИдентификаторЭлемента; + + Значение = ЭтотОбъект[ЗначениеИмя]; + ВидПериода = ЭтотОбъект[ВидПериодаИмя]; + + НачалоПериода = Значение.ДатаНачала; + Если НачалоПериода = '00010101' Тогда + НачалоПериода = ОтчетыКлиентСервер.НачалоПериодаОтчета(ВидПериода, ОбщегоНазначенияКлиент.ДатаСеанса()); + КонецЕсли; + + // Параметры для чтения из обработчиков: + ПараметрыВыбора = Новый Структура; + // Для выбора значения: + ПараметрыВыбора.Вставить("Значение", Значение); + ПараметрыВыбора.Вставить("Элемент", Элемент); + // Для загрузки значения: + ПараметрыВыбора.Вставить("ИдентификаторЭлемента", ИдентификаторЭлемента); + ПараметрыВыбора.Вставить("ПредставлениеИмя", ПредставлениеИмя); + ПараметрыВыбора.Вставить("ЗначениеИмя", ЗначениеИмя); + ПараметрыВыбора.Вставить("ВидПериода", ВидПериода); + ПараметрыВыбора.Вставить("ЭтоПараметр", СвойстваНастройкиТип = "ЗначениеПараметраНастроек"); + + ВыборПериодаИзВыпадающегоСписка(-1, ПараметрыВыбора); +КонецПроцедуры + +&НаКлиенте +Процедура Подключаемый_СтандартныйПериод_НачалоПериода_ПриИзменении(Элемент) + // Формирование сведений по элементу. + ПериодНачалоИмя = Элемент.Имя; + ИдентификаторЭлемента = Прав(ПериодНачалоИмя, 32); + СвойстваНастройкиТип = Лев(ПериодНачалоИмя, СтрНайти(ПериодНачалоИмя, "_Начало_")-1); + ЗначениеИмя = СвойстваНастройкиТип + "_Значение_" + ИдентификаторЭлемента; + + Значение = ЭтотОбъект[ЗначениеИмя]; + + Если Значение.ДатаНачала <> '00010101' Тогда + Значение.ДатаНачала = НачалоДня(Значение.ДатаНачала); + КонецЕсли; + + // Запись значения в пользовательские настройки компоновки данных. + ПользовательскаяНастройкаКД = НайтиПользовательскуюНастройкуЭлемента(ИдентификаторЭлемента); + Если ТипЗнч(ПользовательскаяНастройкаКД) = Тип("ЗначениеПараметраНастроекКомпоновкиДанных") Тогда + ПользовательскаяНастройкаКД.Значение = Значение; + Иначе + ПользовательскаяНастройкаКД.ПравоеЗначение = Значение; + КонецЕсли; + + Если Значение.ДатаНачала <> '00010101' Тогда + ПользовательскаяНастройкаКД.Использование = Истина; + КонецЕсли; + + ПользовательскиеНастройкиМодифицированы = Истина; +КонецПроцедуры + +&НаКлиенте +Процедура Подключаемый_СтандартныйПериод_КонецПериода_ПриИзменении(Элемент) + // Формирование сведений по элементу. + ПериодОкончаниеИмя = Элемент.Имя; + ИдентификаторЭлемента = Прав(ПериодОкончаниеИмя, 32); + СвойстваНастройкиТип = Лев(ПериодОкончаниеИмя, СтрНайти(ПериодОкончаниеИмя, "_Окончание_")-1); + + ЗначениеИмя = СвойстваНастройкиТип + "_Значение_" + ИдентификаторЭлемента; + + Значение = ЭтотОбъект[ЗначениеИмя]; + + Если Значение.ДатаОкончания <> '00010101' Тогда + Значение.ДатаОкончания = КонецДня(Значение.ДатаОкончания); + КонецЕсли; + + // Запись значения в пользовательские настройки компоновки данных. + ПользовательскаяНастройкаКД = НайтиПользовательскуюНастройкуЭлемента(ИдентификаторЭлемента); + Если ТипЗнч(ПользовательскаяНастройкаКД) = Тип("ЗначениеПараметраНастроекКомпоновкиДанных") Тогда + ПользовательскаяНастройкаКД.Значение = Значение; + Иначе + ПользовательскаяНастройкаКД.ПравоеЗначение = Значение; + КонецЕсли; + + Если Значение.ДатаОкончания <> '00010101' Тогда + ПользовательскаяНастройкаКД.Использование = Истина; + КонецЕсли; + + ПользовательскиеНастройкиМодифицированы = Истина; +КонецПроцедуры + +&НаКлиенте +Процедура Подключаемый_СтандартныйПериод_Значение_Очистка(Элемент, СтандартнаяОбработка) + СтандартнаяОбработка = Ложь; +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// Подключаемые - Список значений с кнопкой "Подбор". + +&НаКлиенте +Процедура Подключаемый_СписокСПодбором_ПриИзменении(ТаблицаФормы) + // Обновление выбранных значений в данных СКД. + ИдентификаторЭлемента = Прав(ТаблицаФормы.Имя, 32); + + СписокЗначенийВФорме = ЭтотОбъект[ТаблицаФормы.Имя]; + ПользовательскаяНастройкаКД = НайтиПользовательскуюНастройкуЭлемента(ИдентификаторЭлемента); + ДополнительныеНастройки = НайтиДополнительныеНастройкиЭлемента(ИдентификаторЭлемента); + + СписокЗначенийВСКД = Новый СписокЗначений; + Если Не ДополнительныеНастройки.ОграничиватьВыборУказаннымиЗначениями Тогда + ДополнительныеНастройки.ЗначенияДляВыбора = Новый СписокЗначений; + КонецЕсли; + Для Каждого ЭлементСпискаВФорме Из СписокЗначенийВФорме Цикл + ЗначениеВФорме = ЭлементСпискаВФорме.Значение; + Если Не ДополнительныеНастройки.ОграничиватьВыборУказаннымиЗначениями Тогда + Если ДополнительныеНастройки.ЗначенияДляВыбора.НайтиПоЗначению(ЗначениеВФорме) <> Неопределено Тогда + Продолжить; + КонецЕсли; + ЗаполнитьЗначенияСвойств(ДополнительныеНастройки.ЗначенияДляВыбора.Добавить(), ЭлементСпискаВФорме); + КонецЕсли; + Если ЭлементСпискаВФорме.Пометка Тогда + СписокЗначенийВСКД.Добавить(ЗначениеВФорме); + КонецЕсли; + КонецЦикла; + Если ТипЗнч(ПользовательскаяНастройкаКД) = Тип("ЭлементОтбораКомпоновкиДанных") Тогда + ПользовательскаяНастройкаКД.ПравоеЗначение = СписокЗначенийВСКД; + Иначе + ПользовательскаяНастройкаКД.Значение = СписокЗначенийВСКД; + КонецЕсли; + + // Включение флажка Использование. + ПользовательскаяНастройкаКД.Использование = Истина; + ТаблицаФормы.ЦветТекста = ?(ПользовательскаяНастройкаКД.Использование, Новый Цвет, ЦветНеактивныхЗначенийТаблицы); + + ПользовательскиеНастройкиМодифицированы = Истина; +КонецПроцедуры + +&НаКлиенте +Процедура Подключаемый_СписокСПодбором_Значение_АвтоПодбор(Элемент, Текст, ДанныеВыбора, Параметры, Ожидание, СтандартнаяОбработка) + Если Параметры = Неопределено Тогда + Возврат; + КонецЕсли; + + ИдентификаторЭлемента = Прав(Элемент.Имя, 32); + + // Добавление динамических параметров выбора (от ведущих). + Найденные = ОтключаемыеСвязи.НайтиСтроки(Новый Структура("ПодчиненныйИдентификаторВФорме", ИдентификаторЭлемента)); + Для Каждого Связь Из Найденные Цикл + Если Не ЗначениеЗаполнено(Связь.ВедущийИдентификаторВФорме) + Или Не ЗначениеЗаполнено(Связь.ПодчиненныйИмяПараметра) Тогда + Продолжить; + КонецЕсли; + ВедущийНастройкаКД = НайтиПользовательскуюНастройкуЭлемента(Связь.ВедущийИдентификаторВФорме); + Если Не ВедущийНастройкаКД.Использование Тогда + Продолжить; + КонецЕсли; + Если ТипЗнч(ВедущийНастройкаКД) = Тип("ЭлементОтбораКомпоновкиДанных") Тогда + ВедущийЗначение = ВедущийНастройкаКД.ПравоеЗначение; + Иначе + ВедущийЗначение = ВедущийНастройкаКД.Значение; + КонецЕсли; + Если Связь.ТипСвязи = "ПараметровВыбора" Тогда + МассивКлючей = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(Связь.ПодчиненныйИмяПараметра, ".", Истина, Истина); + ВГраница = МассивКлючей.ВГраница(); + Контекст = Параметры; + Для Индекс = 0 По ВГраница Цикл + Ключ = МассивКлючей[Индекс]; + Если Индекс = ВГраница Тогда + Контекст.Вставить(Ключ, ВедущийЗначение); + Иначе + ВложенныйКонтекст = ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(Контекст, Ключ); + Если ВложенныйКонтекст = Неопределено Тогда + ВложенныйКонтекст = Контекст.Вставить(Ключ, Новый Структура); + ИначеЕсли ТипЗнч(ВложенныйКонтекст) <> Тип("Структура") Тогда + Прервать; + КонецЕсли; + Контекст = ВложенныйКонтекст; + КонецЕсли; + КонецЦикла; + ИначеЕсли Связь.ТипСвязи = "ПоТипу" Тогда + ВедущийТип = ТипЗнч(ВедущийЗначение); + ДополнительныеНастройки = НайтиДополнительныеНастройкиЭлемента(ИдентификаторЭлемента); + Если ДополнительныеНастройки <> Неопределено + И ДополнительныеНастройки.ОписаниеТипов.СодержитТип(ВедущийТип) + И ДополнительныеНастройки.ОписаниеТипов.Типы().Количество() > 1 Тогда + МассивТипов = Новый Массив; + МассивТипов.Добавить(ВедущийТип); + Элемент.ДоступныеТипы = Новый ОписаниеТипов(МассивТипов); + КонецЕсли; + КонецЕсли; + КонецЦикла; +КонецПроцедуры + +&НаКлиенте +Процедура Подключаемый_СписокСПодбором_Использование_ПриИзменении(Элемент) + // Включение флажка Использование если пользователь включил флажок в строке таблицы. + КолонкаИспользованиеИмя = Элемент.Имя; + ИдентификаторЭлемента = Прав(КолонкаИспользованиеИмя, 32); + СвойстваНастройкиТип = Лев(КолонкаИспользованиеИмя, СтрНайти(КолонкаИспользованиеИмя, "_Колонка_Использование_")-1); + + ТаблицаИмя = СвойстваНастройкиТип + "_СписокЗначений_" + ИдентификаторЭлемента; + + ЭлементСпискаВФорме = Элементы[ТаблицаИмя].ТекущиеДанные; + Если ЭлементСпискаВФорме <> Неопределено И ЭлементСпискаВФорме.Пометка Тогда + // Включение флажка Использование. + ПользовательскаяНастройкаКД = НайтиПользовательскуюНастройкуЭлемента(ИдентификаторЭлемента); + ПользовательскаяНастройкаКД.Использование = Истина; + + // Оформление строк. + ТаблицаФормы = Элементы.Найти(ТаблицаИмя); + ТаблицаФормы.ЦветТекста = ?(ПользовательскаяНастройкаКД.Использование, Новый Цвет, ЦветНеактивныхЗначенийТаблицы); + + ПользовательскиеНастройкиМодифицированы = Истина; + КонецЕсли; +КонецПроцедуры + +&НаКлиенте +Процедура Подключаемый_СписокСПодбором_ПередНачаломИзменения(Элемент, Отказ) + СтрокаИдентификатор = Элемент.ТекущаяСтрока; + Если СтрокаИдентификатор = Неопределено Тогда + Возврат; + КонецЕсли; + + СписокЗначенийВФорме = ЭтотОбъект[Элемент.Имя]; + ЭлементСпискаВФорме = СписокЗначенийВФорме.НайтиПоИдентификатору(СтрокаИдентификатор); + + ТекущаяСтрока = Элемент.ТекущиеДанные; + Если ТекущаяСтрока = Неопределено Тогда + Возврат; + КонецЕсли; + ЭлементСпискаДоНачалаИзменения = Новый Структура("Идентификатор, Пометка, Значение, Представление"); + ЗаполнитьЗначенияСвойств(ЭлементСпискаДоНачалаИзменения, ЭлементСпискаВФорме); + ЭлементСпискаДоНачалаИзменения.Идентификатор = СтрокаИдентификатор; + ПеременныеКлиента.Вставить("ЭлементСпискаДоНачалаИзменения", ЭлементСпискаДоНачалаИзменения); +КонецПроцедуры + +&НаКлиенте +Процедура Подключаемый_СписокСПодбором_ПередОкончаниемРедактирования(Элемент, НоваяСтрока, ОтменаНачалаРедактирования, ОтменаЗавершенияРедактирования) + Если ОтменаНачалаРедактирования Тогда + Возврат; + КонецЕсли; + + СтрокаИдентификатор = Элемент.ТекущаяСтрока; + Если СтрокаИдентификатор = Неопределено Тогда + Возврат; + КонецЕсли; + ИдентификаторЭлемента = Прав(Элемент.Имя, 32); + СписокЗначенийВФорме = ЭтотОбъект[Элемент.Имя]; + ЭлементСпискаВФорме = СписокЗначенийВФорме.НайтиПоИдентификатору(СтрокаИдентификатор); + + Значение = ЭлементСпискаВФорме.Значение; + Если Значение = Неопределено + Или Значение = Тип("Неопределено") + Или Значение = Новый ОписаниеТипов("Неопределено") + Или Не ЗначениеЗаполнено(Значение) Тогда + ОтменаЗавершенияРедактирования = Истина; // Запрет пустых значений. + Иначе + Для Каждого ЭлементСпискаДубльВФорме Из СписокЗначенийВФорме Цикл + Если ЭлементСпискаДубльВФорме.Значение = Значение И ЭлементСпискаДубльВФорме <> ЭлементСпискаВФорме Тогда + Состояние(НСтр("ru = 'Обнаружены дублирующиеся записи. Редактирование отменено.'")); + ОтменаЗавершенияРедактирования = Истина; // Запрет дублей. + Прервать; + КонецЕсли; + КонецЦикла; + КонецЕсли; + + ЭлементСпискаДоНачалаИзменения = ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(ПеременныеКлиента, "ЭлементСпискаДоНачалаИзменения"); + ЕстьИнформация = (ЭлементСпискаДоНачалаИзменения <> Неопределено И ЭлементСпискаДоНачалаИзменения.Идентификатор = СтрокаИдентификатор); + Если Не ОтменаЗавершенияРедактирования И ЕстьИнформация И ЭлементСпискаДоНачалаИзменения.Значение <> Значение Тогда + ДополнительныеНастройки = НайтиДополнительныеНастройкиЭлемента(ИдентификаторЭлемента); + Если ДополнительныеНастройки.ОграничиватьВыборУказаннымиЗначениями Тогда + ОтменаЗавершенияРедактирования = Истина; + Иначе + ЭлементСпискаВФорме.Представление = ""; // Автозаполнение представления. + ЭлементСпискаВФорме.Пометка = Истина; // Включение флажка. + КонецЕсли; + КонецЕсли; + + Если ОтменаЗавершенияРедактирования Тогда + // Откат значений. + Если ЕстьИнформация Тогда + ЗаполнитьЗначенияСвойств(ЭлементСпискаВФорме, ЭлементСпискаДоНачалаИзменения); + КонецЕсли; + // Перезапуск события "ПередОкончаниемРедактирования" с ОтменаНачалаРедактирования = Истина. + Элемент.ЗакончитьРедактированиеСтроки(Истина); + Иначе + Если НоваяСтрока Тогда + ЭлементСпискаВФорме.Пометка = Истина; // Включение флажка. + КонецЕсли; + ПользовательскиеНастройкиМодифицированы = Истина; + КонецЕсли; +КонецПроцедуры + +&НаКлиенте +Процедура Подключаемый_СписокСПодбором_Подбор(Команда) + КнопкаПодборИмя = Команда.Имя; + + ИдентификаторЭлемента = Прав(КнопкаПодборИмя, 32); + СвойстваНастройкиТип = Лев(КнопкаПодборИмя, СтрНайти(КнопкаПодборИмя, "_Подбор_")-1); + + ТаблицаИмя = СвойстваНастройкиТип + "_СписокЗначений_" + ИдентификаторЭлемента; + КолонкаЗначениеИмя = СвойстваНастройкиТип + "_Колонка_Значение_" + ИдентификаторЭлемента; + КнопкаПодборИмя = СвойстваНастройкиТип + "_Подбор_" + ИдентификаторЭлемента; + + ТаблицаЗначение = ЭтотОбъект[ТаблицаИмя]; + КолонкаЗначениеЭлемент = Элементы[КолонкаЗначениеИмя]; + + ОписаниеТипов = ТаблицаЗначение.ТипЗначения; + + ПараметрыЭлемента = Новый Структура; + ПараметрыЭлемента.Вставить("ИдентификаторЭлемента", ИдентификаторЭлемента); + ПараметрыЭлемента.Вставить("ВыбранныйТип", Неопределено); + ПараметрыЭлемента.Вставить("КолонкаЗначениеЭлемент", КолонкаЗначениеЭлемент); + ПараметрыЭлемента.Вставить("ТаблицаЭлемент", Элементы[ТаблицаИмя]); + ПараметрыЭлемента.Вставить("ВыборТолькоГрупп", КолонкаЗначениеЭлемент.ВыборГруппИЭлементов = ГруппыИЭлементы.Группы); + ПараметрыЭлемента.Вставить("ПараметрыВыбора", Новый Массив); + + Найденные = ОтключаемыеСвязи.НайтиСтроки(Новый Структура("ПодчиненныйИдентификаторВФорме", ИдентификаторЭлемента)); + Для Каждого Связь Из Найденные Цикл + Если Не ЗначениеЗаполнено(Связь.ВедущийИдентификаторВФорме) + Или Не ЗначениеЗаполнено(Связь.ПодчиненныйИмяПараметра) Тогда + Продолжить; + КонецЕсли; + ВедущийНастройкаКД = НайтиПользовательскуюНастройкуЭлемента(Связь.ВедущийИдентификаторВФорме); + Если Не ВедущийНастройкаКД.Использование Тогда + Продолжить; + КонецЕсли; + Если ТипЗнч(ВедущийНастройкаКД) = Тип("ЭлементОтбораКомпоновкиДанных") Тогда + ВедущийЗначение = ВедущийНастройкаКД.ПравоеЗначение; + Иначе + ВедущийЗначение = ВедущийНастройкаКД.Значение; + КонецЕсли; + Если Связь.ТипСвязи = "ПараметровВыбора" Тогда + ПараметрыЭлемента.ПараметрыВыбора.Добавить(Новый ПараметрВыбора(Связь.ПодчиненныйИмяПараметра, ВедущийЗначение)); + ИначеЕсли Связь.ТипСвязи = "ПоТипу" Тогда + ТипВедущего = ТипЗнч(ВедущийЗначение); + Если ОписаниеТипов.СодержитТип(ТипВедущего) Тогда + ПараметрыЭлемента.ВыбранныйТип = ТипВедущего; + КонецЕсли; + КонецЕсли; + КонецЦикла; + + Если ПараметрыЭлемента.ВыбранныйТип <> Неопределено Тогда // Тип определен ведущим. + Подключаемый_СписокСПодбором_Подбор_ОткрытьФормуВыбора(-1, ПараметрыЭлемента); + Возврат; + КонецЕсли; + + // Выбор типа из списка. + СписокВыбора = Новый СписокЗначений; + + ПростыеТипы = Новый Соответствие; + ПростыеТипы.Вставить(Тип("Строка"), Истина); + ПростыеТипы.Вставить(Тип("Дата"), Истина); + ПростыеТипы.Вставить(Тип("Число"), Истина); + + МассивТипов = ОписаниеТипов.Типы(); + Для Каждого Тип Из МассивТипов Цикл + // Исключение типов, для которых нет групп. + Если ПараметрыЭлемента.ВыборТолькоГрупп Тогда + ИмяОбъектаМетаданных = БыстрыйПоискИменОбъектовМетаданных.Получить(Тип); + ВидОбъектаМетаданных = ВРег(Лев(ИмяОбъектаМетаданных, СтрНайти(ИмяОбъектаМетаданных, ".")-1)); + Если ВидОбъектаМетаданных <> "СПРАВОЧНИК" И ВидОбъектаМетаданных <> "ПЛАНВИДОВХАРАКТЕРИСТИК" И ВидОбъектаМетаданных <> "ПЛАНСЧЕТОВ" Тогда + Продолжить; + КонецЕсли; + КонецЕсли; + // Исключение простых типов. + Если ПростыеТипы[Тип] = Истина Тогда + Продолжить; + КонецЕсли; + // Добавление типа в список выбора. + СписокВыбора.Добавить(Тип, Строка(Тип)); + КонецЦикла; + + Если СписокВыбора.Количество() = 0 Тогда + ПараметрыЭлемента.ТаблицаЭлемент.ДобавитьСтроку(); + Возврат; + ИначеЕсли СписокВыбора.Количество() = 1 Тогда + // Один тип - выбор не требуется. + ПараметрыЭлемента.ВыбранныйТип = СписокВыбора[0].Значение; + Подключаемый_СписокСПодбором_Подбор_ОткрытьФормуВыбора(-1, ПараметрыЭлемента); + Иначе + // Более одного типа. + Обработчик = Новый ОписаниеОповещения("Подключаемый_СписокСПодбором_Подбор_ОткрытьФормуВыбора", ЭтотОбъект, ПараметрыЭлемента); + ПоказатьВыборИзМеню(Обработчик, СписокВыбора, Элементы[КнопкаПодборИмя]); + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура Подключаемый_СписокСПодбором_Подбор_ОткрытьФормуВыбора(ВыбранныйЭлемент, ПараметрыЭлемента) Экспорт + Если ВыбранныйЭлемент = Неопределено Тогда + Возврат; + ИначеЕсли ВыбранныйЭлемент <> -1 Тогда + ПараметрыЭлемента.ВыбранныйТип = ВыбранныйЭлемент.Значение; + КонецЕсли; + + КолонкаЗначениеЭлемент = ПараметрыЭлемента.КолонкаЗначениеЭлемент; + + // Полное имя формы выбора. + // Свойство "ФормаВыбора" недоступно на клиенте даже для чтения, + // поэтому для хранения предустановленных имен форм выбора используется коллекция БыстрыйПоискИменОбъектовМетаданных. + ПутьКФорме = БыстрыйПоискИменОбъектовМетаданных.Получить(ПараметрыЭлемента.ИдентификаторЭлемента); + Если Не ЗначениеЗаполнено(ПутьКФорме) Тогда + ИмяОбъектаМетаданных = БыстрыйПоискИменОбъектовМетаданных.Получить(ПараметрыЭлемента.ВыбранныйТип); + Если ПараметрыЭлемента.ВыборТолькоГрупп Тогда + ВидОбъектаМетаданных = ВРег(Лев(ИмяОбъектаМетаданных, СтрНайти(ИмяОбъектаМетаданных, ".")-1)); + Если ВидОбъектаМетаданных = "СПРАВОЧНИК" Или ВидОбъектаМетаданных = "ПЛАНВИДОВХАРАКТЕРИСТИК" Тогда + ПутьКФорме = ИмяОбъектаМетаданных + ".ФормаВыбораГруппы"; + Иначе + ПутьКФорме = ИмяОбъектаМетаданных + ".ФормаВыбора"; + КонецЕсли; + Иначе + ПутьКФорме = ИмяОбъектаМетаданных + ".ФормаВыбора"; + КонецЕсли; + КонецЕсли; + + ВыборГруппИЭлементов = ОтчетыКлиентСервер.ПривестиЗначениеКТипуИспользованиеГруппИЭлементов(КолонкаЗначениеЭлемент.ВыборГруппИЭлементов); + + ПараметрыФормыВыбора = Новый Структура; + // Стандартные параметры формы. + ПараметрыФормыВыбора.Вставить("ЗакрыватьПриВыборе", Ложь); + ПараметрыФормыВыбора.Вставить("ЗакрыватьПриЗакрытииВладельца", Истина); + ПараметрыФормыВыбора.Вставить("Отбор", Новый Структура); + // Стандартные параметры формы выбора (см. Расширение управляемой формы для динамического списка). + ПараметрыФормыВыбора.Вставить("ВыборГруппИЭлементов", ВыборГруппИЭлементов); + ПараметрыФормыВыбора.Вставить("МножественныйВыбор", Истина); + ПараметрыФормыВыбора.Вставить("РежимВыбора", Истина); + // Предполагаемые реквизиты. + ПараметрыФормыВыбора.Вставить("РежимОткрытияОкна", РежимОткрытияОкнаФормы.БлокироватьОкноВладельца); + ПараметрыФормыВыбора.Вставить("РазрешитьНачалоПеретаскивания", Ложь); + + // Добавление фиксированных параметров выбора. + Для Каждого ПараметрВыбора Из КолонкаЗначениеЭлемент.ПараметрыВыбора Цикл + Если ПустаяСтрока(ПараметрВыбора.Имя) Тогда + Продолжить; + КонецЕсли; + Если ЗначениеЗаполнено(ПараметрВыбора.Имя) Тогда + Если ВРег(Лев(ПараметрВыбора.Имя, 6)) = ВРег("Отбор.") Тогда + ПараметрыФормыВыбора.Отбор.Вставить(Сред(ПараметрВыбора.Имя, 7), ПараметрВыбора.Значение); + Иначе + ПараметрыФормыВыбора.Вставить(ПараметрВыбора.Имя, ПараметрВыбора.Значение); + КонецЕсли; + КонецЕсли; + КонецЦикла; + + // Добавление динамических параметров выбора (от ведущих). Для обратной совместимости. + Для Каждого СвязьПараметраВыбора Из КолонкаЗначениеЭлемент.СвязиПараметровВыбора Цикл + Если ПустаяСтрока(СвязьПараметраВыбора.Имя) Тогда + Продолжить; + КонецЕсли; + ВедущийЗначение = ЭтотОбъект[СвязьПараметраВыбора.ПутьКДанным]; + Если ВРег(Лев(СвязьПараметраВыбора.Имя, 6)) = ВРег("Отбор.") Тогда + ПараметрыФормыВыбора.Отбор.Вставить(Сред(СвязьПараметраВыбора.Имя, 7), ВедущийЗначение); + Иначе + ПараметрыФормыВыбора.Вставить(СвязьПараметраВыбора.Имя, ВедущийЗначение); + КонецЕсли; + КонецЦикла; + + // Добавление динамических параметров выбора (от ведущих). + Для Каждого ПараметрВыбора Из ПараметрыЭлемента.ПараметрыВыбора Цикл + Если ПустаяСтрока(ПараметрВыбора.Имя) Тогда + Продолжить; + КонецЕсли; + Если ЗначениеЗаполнено(ПараметрВыбора.Имя) Тогда + Если ВРег(Лев(ПараметрВыбора.Имя, 6)) = ВРег("Отбор.") Тогда + ПараметрыФормыВыбора.Отбор.Вставить(Сред(ПараметрВыбора.Имя, 7), ПараметрВыбора.Значение); + Иначе + ПараметрыФормыВыбора.Вставить(ПараметрВыбора.Имя, ПараметрВыбора.Значение); + КонецЕсли; + КонецЕсли; + КонецЦикла; + + ОткрытьФорму(ПутьКФорме, ПараметрыФормыВыбора, ПараметрыЭлемента.ТаблицаЭлемент); +КонецПроцедуры + +&НаКлиенте +Процедура Подключаемый_СписокСПодбором_ОбработкаВыбора(Элемент, РезультатВыбора, СтандартнаяОбработка) + СтандартнаяОбработка = Ложь; + + // Списки в данных формы. + ТаблицаИмя = Элемент.Имя; + ИдентификаторЭлемента = Прав(Элемент.Имя, 32); + СписокЗначенийВФорме = ЭтотОбъект[Элемент.Имя]; + ПользовательскаяНастройкаКД = НайтиПользовательскуюНастройкуЭлемента(ИдентификаторЭлемента); + + Если ТипЗнч(ПользовательскаяНастройкаКД) = Тип("ЗначениеПараметраНастроекКомпоновкиДанных") Тогда + СписокЗначенийВСКД = ПользовательскаяНастройкаКД.Значение; + Иначе + СписокЗначенийВСКД = ПользовательскаяНастройкаКД.ПравоеЗначение; + КонецЕсли; + СписокЗначенийВСКД = ОтчетыКлиентСервер.ЗначенияСписком(СписокЗначенийВСКД); + + Выбранные = ОтчетыКлиентСервер.ЗначенияСписком(РезультатВыбора); + Выбранные.ЗаполнитьПометки(Истина); + + Дополнение = ОтчетыКлиентСервер.ДополнитьСписок(СписокЗначенийВСКД, Выбранные, Ложь, Истина); + ОтчетыКлиентСервер.ДополнитьСписок(СписокЗначенийВФорме, Выбранные, Ложь, Истина); + + // Включение флажка Использование. + ПользовательскаяНастройкаКД.Использование = Истина; + + Если ТипЗнч(ПользовательскаяНастройкаКД) = Тип("ЗначениеПараметраНастроекКомпоновкиДанных") Тогда + ПользовательскаяНастройкаКД.Значение = СписокЗначенийВСКД; + Иначе + ПользовательскаяНастройкаКД.ПравоеЗначение = СписокЗначенийВСКД; + КонецЕсли; + + // Оформление строк. + ТаблицаФормы = Элементы.Найти(ТаблицаИмя); + ТаблицаФормы.ЦветТекста = ?(ПользовательскаяНастройкаКД.Использование, Новый Цвет, ЦветНеактивныхЗначенийТаблицы); + + ПользовательскиеНастройкиМодифицированы = Истина; + + Если Дополнение.Всего > 0 Тогда + Результат = Новый Структура; + Если Дополнение.Всего = 1 Тогда + ЗаголовокОповещения = НСтр("ru = 'Элемент добавлен в список'"); + Иначе + ЗаголовокОповещения = НСтр("ru = 'Элементы добавлены в список'"); + КонецЕсли; + СтандартныеПодсистемыКлиентСервер.ВывестиОповещение( + Результат, + ЗаголовокОповещения, + Строка(Выбранные), + БиблиотекаКартинок.ВыполнитьЗадачу); + СтандартныеПодсистемыКлиент.ПоказатьРезультатВыполнения(ЭтотОбъект, Результат); + КонецЕсли; +КонецПроцедуры + +&НаКлиенте +Процедура Подключаемый_СписокСПодбором_ВставитьИзБуфера(Команда) + КнопкаВставитьИмя = Команда.Имя; + + ИдентификаторЭлемента = Прав(КнопкаВставитьИмя, 32); + СвойстваНастройкиТип = Лев(КнопкаВставитьИмя, СтрНайти(КнопкаВставитьИмя, "_")-1); + + ТаблицаИмя = СвойстваНастройкиТип + "_СписокЗначений_" + ИдентификаторЭлемента; + КолонкаЗначениеИмя = СвойстваНастройкиТип + "_Колонка_Значение_" + ИдентификаторЭлемента; + + Список = ЭтотОбъект[ТаблицаИмя]; + СписокЭлемент = Элементы[ТаблицаИмя]; + КолонкаЗначениеЭлемент = Элементы[КолонкаЗначениеИмя]; + + ПараметрыПоиска = Новый Структура; + ПараметрыПоиска.Вставить("ОписаниеТипов", ОписаниеТиповУдалитьПримитивные(Список.ТипЗначения)); + ПараметрыПоиска.Вставить("ПараметрыВыбора", КолонкаЗначениеЭлемент.ПараметрыВыбора); + ПараметрыПоиска.Вставить("ПредставлениеПоля", СписокЭлемент.Заголовок); + ПараметрыПоиска.Вставить("Сценарий", "ВставкаИзБуфераОбмена"); + + ПараметрыВыполнения = Новый Структура; + ПараметрыВыполнения.Вставить("ИдентификаторЭлемента", ИдентификаторЭлемента); + ПараметрыВыполнения.Вставить("ТаблицаИмя", ТаблицаИмя); + Обработчик = Новый ОписаниеОповещения("Подключаемый_СписокСПодбором_ВставитьИзБуфера_Завершение", ЭтотОбъект, ПараметрыВыполнения); + + МодульЗагрузкаДанныхИзФайлаКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("ЗагрузкаДанныхИзФайлаКлиент"); + МодульЗагрузкаДанныхИзФайлаКлиент.ПоказатьФормуЗаполненияСсылок(ПараметрыПоиска, Обработчик); +КонецПроцедуры + +&НаКлиенте +Процедура Подключаемый_СписокСПодбором_ВставитьИзБуфера_Завершение(НайденныеОбъекты, ПараметрыВыполнения) Экспорт + Если НайденныеОбъекты = Неопределено Тогда + Возврат; + КонецЕсли; + + ИдентификаторЭлемента = ПараметрыВыполнения.ИдентификаторЭлемента; + + ПользовательскаяНастройкаКД = НайтиПользовательскуюНастройкуЭлемента(ИдентификаторЭлемента); + ДополнительныеНастройки = НайтиДополнительныеНастройкиЭлемента(ИдентификаторЭлемента); + + Список = ЭтотОбъект[ПараметрыВыполнения.ТаблицаИмя]; + Если ТипЗнч(ПользовательскаяНастройкаКД) = Тип("ЭлементОтбораКомпоновкиДанных") Тогда + Отмеченные = ПользовательскаяНастройкаКД.ПравоеЗначение; + Иначе + Отмеченные = ПользовательскаяНастройкаКД.Значение; + КонецЕсли; + Для Каждого Значение Из НайденныеОбъекты Цикл + ОтчетыКлиентСервер.ДобавитьУникальноеЗначениеВСписок(Список, Значение, Неопределено, Истина); + ОтчетыКлиентСервер.ДобавитьУникальноеЗначениеВСписок(Отмеченные, Значение, Неопределено, Истина); + КонецЦикла; + + // Включение флажка Использование. + ПользовательскаяНастройкаКД.Использование = Истина; + + // Оформление строк. + ТаблицаФормы = Элементы.Найти(ПараметрыВыполнения.ТаблицаИмя); + ТаблицаФормы.ЦветТекста = ?(ПользовательскаяНастройкаКД.Использование, Новый Цвет, ЦветНеактивныхЗначенийТаблицы); + + ПользовательскиеНастройкиМодифицированы = Истина; +КонецПроцедуры + +&НаКлиенте +Процедура Подключаемый_СписокСПодбором_Добавить(Команда) + + КнопкаПодборИмя = Команда.Имя; + + ИдентификаторЭлемента = Прав(КнопкаПодборИмя, 32); + СвойстваНастройкиТип = Лев(КнопкаПодборИмя, СтрНайти(КнопкаПодборИмя, "_Подбор_") - 1); + + ТаблицаИмя = СвойстваНастройкиТип + "_СписокЗначений_" + ИдентификаторЭлемента; + + Элементы[ТаблицаИмя].ДобавитьСтроку(); + +КонецПроцедуры + +&НаКлиенте +Процедура Подключаемый_ФиксированныйСписок_ПередНачаломДобавления(Элемент, Отказ, Копирование, Родитель, Группа, Параметр) + Отказ = Истина; +КонецПроцедуры + +&НаКлиенте +Процедура Подключаемый_ФиксированныйСписок_ПередУдалением(Элемент, Отказ) + Отказ = Истина; +КонецПроцедуры + +#КонецОбласти + +//////////////////////////////////////////////////////////////////////////////// +// ТАБЛИЦА Сортировка + +#Область ОбработчикиСобытийЭлементовТаблицыФормыСортировка + +&НаКлиенте +Процедура СортировкаВыбор(Элемент, СтрокаИдентификатор, Поле, СтандартнаяОбработка) + СтандартнаяОбработка = Ложь; + СтрокаТаблицы = Элементы.Сортировка.ТекущиеДанные; + Если СтрокаТаблицы = Неопределено Тогда + Возврат; + КонецЕсли; + Если СтрокаТаблицы.ТипНастройки = "ЭлементПорядка" Тогда + ИмяКолонки = Поле.Имя; + Если ИмяКолонки = "СортировкаПредставление" Тогда // Изменение поля + ТаблицыПолейИзменить("Сортировка", СтрокаИдентификатор, СтрокаТаблицы); + ИначеЕсли ИмяКолонки = "СортировкаНаправление" Тогда // Изменение порядка. + ТаблицыПолейИзменитьНаправлениеСортировки("Сортировка", СтрокаТаблицы, Неопределено); + КонецЕсли; + КонецЕсли; +КонецПроцедуры + +&НаКлиенте +Процедура СортировкаПередНачаломДобавления(Элемент, Отказ, Копирование, Родитель, Группа, Параметр) + Отказ = Истина; + Обработчик = Новый ОписаниеОповещения("СортировкаПослеВыбораПоля", ЭтотОбъект); + ТаблицыПолейПоказатьВыборПоля("Сортировка", Обработчик); +КонецПроцедуры + +&НаКлиенте +Процедура СортировкаПослеВыбораПоля(ДоступноеПолеКД, ПараметрыВыполнения) Экспорт + Если ДоступноеПолеКД = Неопределено Тогда + Возврат; + КонецЕсли; + + Результат = ТаблицыПолейВставить("Сортировка", Тип("ЭлементПорядкаКомпоновкиДанных"), 0, Неопределено); + + ЭлементКД = Результат.ЭлементКД; + ЭлементКД.Использование = Истина; + ЭлементКД.Поле = ДоступноеПолеКД.Поле; + ЭлементКД.ТипУпорядочивания = НаправлениеСортировкиКомпоновкиДанных.Возр; + + СтрокаТаблицы = Результат.СтрокаТаблицы; + СтрокаТаблицы.Использование = ЭлементКД.Использование; + СтрокаТаблицы.Представление = ДоступноеПолеКД.Заголовок; + СтрокаТаблицы.Направление = ЭлементКД.ТипУпорядочивания; + + УстановитьМодифицированность(); +КонецПроцедуры + +&НаКлиенте +Процедура СортировкаПередУдалением(Элемент, Отказ) + ТаблицыПолейПередУдалением(Элемент.Имя, Отказ); +КонецПроцедуры + +&НаКлиенте +Процедура СортировкаИспользованиеПриИзменении(Элемент) + ТаблицыПолейИзменитьИспользование("Сортировка"); +КонецПроцедуры + +&НаКлиенте +Процедура Сортировка_ПоУбыванию(Команда) + ТаблицыПолейИзменитьНаправлениеСортировки("Сортировка", Неопределено, НаправлениеСортировкиКомпоновкиДанных.Убыв); +КонецПроцедуры + +&НаКлиенте +Процедура Сортировка_ПоВозрастанию(Команда) + ТаблицыПолейИзменитьНаправлениеСортировки("Сортировка", Неопределено, НаправлениеСортировкиКомпоновкиДанных.Возр); +КонецПроцедуры + +&НаКлиенте +Процедура Сортировка_ПереместитьВверх(Команда) + Сценарий = Новый Структура; + Сценарий.Вставить("Шаги", "ОпределитьВыделенныеСтроки, СдвинутьСтроки"); + Сценарий.Вставить("Действие", "Переместить"); + Сценарий.Вставить("ТаблицаИмя", "Сортировка"); + Сценарий.Вставить("Направление", -1); + + ЗапуститьСценарий(Сценарий); +КонецПроцедуры + +&НаКлиенте +Процедура Сортировка_ПереместитьВниз(Команда) + Сценарий = Новый Структура; + Сценарий.Вставить("Шаги", "ОпределитьВыделенныеСтроки, СдвинутьСтроки"); + Сценарий.Вставить("Действие", "Переместить"); + Сценарий.Вставить("ТаблицаИмя", "Сортировка"); + Сценарий.Вставить("Направление", 1); + + ЗапуститьСценарий(Сценарий); +КонецПроцедуры + +&НаКлиенте +Процедура Сортировка_УстановитьФлажки(Команда) + УстановитьФлажкиИспользованиеВоВсемДереве("Сортировка", Истина); +КонецПроцедуры + +&НаКлиенте +Процедура Сортировка_СнятьФлажки(Команда) + УстановитьФлажкиИспользованиеВоВсемДереве("Сортировка", Ложь); +КонецПроцедуры + +&НаКлиенте +Процедура СортировкаНачалоПеретаскивания(Элемент, ПараметрыПеретаскивания, РазрешитьПеретаскивание) + Если Не ЗарегистрироватьНачалоПеретаскивания("Сортировка") Тогда + РазрешитьПеретаскивание = Ложь; + КонецЕсли; +КонецПроцедуры + +&НаКлиенте +Процедура СортировкаПроверкаПеретаскивания(Элемент, ПараметрыПеретаскивания, СтандартнаяОбработка, ИдентификаторЦели, Поле) + СтандартнаяОбработка = Ложь; + ПроверитьВозможностьПеретаскивания("Сортировка", ИдентификаторЦели, ПараметрыПеретаскивания); +КонецПроцедуры + +&НаКлиенте +Процедура СортировкаПеретаскивание(Элемент, ПараметрыПеретаскивания, СтандартнаяОбработка, ИдентификаторЦели, Поле) + // Возникает в приемнике при окончании перетаскивания когда все проверки пройдены. + СтандартнаяОбработка = Ложь; + ИсточникПеретаскивания = ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(ПеременныеКлиента, "ИсточникПеретаскивания"); + Если ИсточникПеретаскивания = Неопределено Тогда + Возврат; + КонецЕсли; + Если ИсточникПеретаскивания.ТаблицаИмя = "Сортировка" Тогда + ПеретаскиваниеВПределахТаблицы(ИсточникПеретаскивания, ИдентификаторЦели); + ИначеЕсли ИсточникПеретаскивания.ТаблицаИмя = "ВыбранныеПоля" Тогда + ПеретаскиваниеВыбранныхПолейВСортировки(ИсточникПеретаскивания, ИдентификаторЦели); + КонецЕсли; +КонецПроцедуры + +&НаКлиенте +Процедура СортировкаОкончаниеПеретаскивания(Элемент, ПараметрыПеретаскивания, СтандартнаяОбработка) + СтандартнаяОбработка = Ложь; +КонецПроцедуры + +&НаКлиенте +Процедура ВыбранныеПоля_Сортировка_Вправо(Команда) + ИсточникПеретаскивания = Неопределено; + Если Не ЗарегистрироватьНачалоПеретаскивания("ВыбранныеПоля", ИсточникПеретаскивания) Тогда + Возврат; + КонецЕсли; + ПеретаскиваниеВыбранныхПолейВСортировки(ИсточникПеретаскивания, Элементы.Сортировка.ТекущаяСтрока); +КонецПроцедуры + +&НаКлиенте +Процедура ВыбранныеПоля_Сортировка_Влево(Команда) + ИсточникПеретаскивания = Неопределено; + Если Не ЗарегистрироватьНачалоПеретаскивания("Сортировка", ИсточникПеретаскивания) Тогда + Возврат; + КонецЕсли; + ПеретаскиваниеСортировокВВыбранныеПоля(ИсточникПеретаскивания, Элементы.ВыбранныеПоля.ТекущаяСтрока); +КонецПроцедуры + +&НаКлиенте +Процедура ВыбранныеПоля_Сортировка_ВлевоВсе(Команда) + КорневаяСтрока = КорневаяСтрокаПоУмолчанию("Сортировка"); + ТаблицыПолейУдалить("Сортировка", КорневаяСтрока.ПолучитьЭлементы(), Истина); +КонецПроцедуры + +#КонецОбласти + +//////////////////////////////////////////////////////////////////////////////// +// ТАБЛИЦА ВыбранныеПоля + +#Область ОбработчикиСобытийЭлементовТаблицыФормыВыбранныеПоля + +&НаКлиенте +Процедура ВыбранныеПоляВыбор(Элемент, СтрокаИдентификатор, Поле, СтандартнаяОбработка) + СтандартнаяОбработка = Ложь; + СтрокаТаблицы = Элементы.ВыбранныеПоля.ТекущиеДанные; + Если СтрокаТаблицы = Неопределено Тогда + Возврат; + КонецЕсли; + ИмяКолонки = Поле.Имя; + Если ИмяКолонки = "ВыбранныеПоляПредставление" Тогда // Изменение порядка. + Если СтрокаТаблицы.ТипНастройки = "ВыбранноеПоле" Тогда + ТаблицыПолейИзменить("ВыбранныеПоля", СтрокаИдентификатор, СтрокаТаблицы); + ИначеЕсли СтрокаТаблицы.ТипНастройки = "ГруппаВыбранныхПолей" Тогда + ТаблицыПолейИзменитьГруппу("ВыбранныеПоля", СтрокаИдентификатор, СтрокаТаблицы); + КонецЕсли; + КонецЕсли; +КонецПроцедуры + +&НаКлиенте +Процедура ВыбранныеПоляПередНачаломДобавления(Элемент, Отказ, Копирование, Родитель, Группа, Параметр) + Отказ = Истина; + Обработчик = Новый ОписаниеОповещения("ВыбранныеПоляПослеВыбораПоля", ЭтотОбъект); + ТаблицыПолейПоказатьВыборПоля("ВыбранныеПоля", Обработчик); +КонецПроцедуры + +&НаКлиенте +Процедура ВыбранныеПоляПослеВыбораПоля(ДоступноеПолеКД, ПараметрыВыполнения) Экспорт + Если ДоступноеПолеКД = Неопределено Тогда + Возврат; + КонецЕсли; + + Результат = ТаблицыПолейВставить("ВыбранныеПоля", Тип("ВыбранноеПолеКомпоновкиДанных"), 0, Неопределено); + + ЭлементКД = Результат.ЭлементКД; + ЭлементКД.Использование = Истина; + ЭлементКД.Поле = ДоступноеПолеКД.Поле; + + СтрокаТаблицы = Результат.СтрокаТаблицы; + СтрокаТаблицы.Использование = ЭлементКД.Использование; + СтрокаТаблицы.Представление = ДоступноеПолеКД.Заголовок; + СтрокаТаблицы.ЭтоГруппа = Ложь; + СтрокаТаблицы.ИндексКартинки = 4; + СтрокаТаблицы.ПолеКД = ЭлементКД.Поле; + + ПослеИзмененияФлажкаИспользование("ВыбранныеПоля", СтрокаТаблицы, ЭлементКД); + + УстановитьМодифицированность(); +КонецПроцедуры + +&НаКлиенте +Процедура ВыбранныеПоляПередУдалением(Элемент, Отказ) + ТаблицыПолейПередУдалением(Элемент.Имя, Отказ); +КонецПроцедуры + +&НаКлиенте +Процедура ВыбранныеПоляИспользованиеПриИзменении(Элемент) + ТаблицыПолейИзменитьИспользование("ВыбранныеПоля"); +КонецПроцедуры + +&НаКлиенте +Процедура ВыбранныеПоля_ПереместитьВверх(Команда) + Сценарий = Новый Структура; + Сценарий.Вставить("Шаги", "ОпределитьВыделенныеСтроки, СдвинутьСтроки"); + Сценарий.Вставить("Действие", "Переместить"); + Сценарий.Вставить("ТаблицаИмя", "ВыбранныеПоля"); + Сценарий.Вставить("Направление", -1); + + ЗапуститьСценарий(Сценарий); +КонецПроцедуры + +&НаКлиенте +Процедура ВыбранныеПоля_ПереместитьВниз(Команда) + Сценарий = Новый Структура; + Сценарий.Вставить("Шаги", "ОпределитьВыделенныеСтроки, СдвинутьСтроки"); + Сценарий.Вставить("Действие", "Переместить"); + Сценарий.Вставить("ТаблицаИмя", "ВыбранныеПоля"); + Сценарий.Вставить("Направление", 1); + + ЗапуститьСценарий(Сценарий); +КонецПроцедуры + +&НаКлиенте +Процедура ВыбранныеПоля_Сгруппировать(Команда) + Сценарий = Новый Структура; + Сценарий.Вставить("Шаги", "ОпределитьВыделенныеСтроки, ОтредактироватьГруппуПолей, СгруппироватьСтроки, ОбновитьФорму"); + Сценарий.Вставить("Действие", "Сгруппировать"); + Сценарий.Вставить("ТаблицаИмя", "ВыбранныеПоля"); + Сценарий.Вставить("ТипГруппыКД", Тип("ГруппаВыбранныхПолейКомпоновкиДанных")); + + ЗапуститьСценарий(Сценарий); +КонецПроцедуры + +&НаКлиенте +Процедура ВыбранныеПоля_Разгруппировать(Команда) + ТаблицыПолейРазгруппировать("ВыбранныеПоля"); +КонецПроцедуры + +&НаКлиенте +Процедура ВыбранныеПоля_УстановитьФлажки(Команда) + УстановитьФлажкиИспользованиеВоВсемДереве("ВыбранныеПоля", Истина); +КонецПроцедуры + +&НаКлиенте +Процедура ВыбранныеПоля_СнятьФлажки(Команда) + УстановитьФлажкиИспользованиеВоВсемДереве("ВыбранныеПоля", Ложь); +КонецПроцедуры + +&НаКлиенте +Процедура ВыбранныеПоляНачалоПеретаскивания(Элемент, ПараметрыПеретаскивания, РазрешитьПеретаскивание) + Если Не ЗарегистрироватьНачалоПеретаскивания("ВыбранныеПоля") Тогда + РазрешитьПеретаскивание = Ложь; + КонецЕсли; +КонецПроцедуры + +&НаКлиенте +Процедура ВыбранныеПоляПроверкаПеретаскивания(Элемент, ПараметрыПеретаскивания, СтандартнаяОбработка, ИдентификаторЦели, Поле) + СтандартнаяОбработка = Ложь; + ПроверитьВозможностьПеретаскивания("ВыбранныеПоля", ИдентификаторЦели, ПараметрыПеретаскивания); +КонецПроцедуры + +&НаКлиенте +Процедура ВыбранныеПоляПеретаскивание(Элемент, ПараметрыПеретаскивания, СтандартнаяОбработка, ИдентификаторЦели, Поле) + // Возникает в приемнике при окончании перетаскивания когда все проверки пройдены. + СтандартнаяОбработка = Ложь; + ИсточникПеретаскивания = ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(ПеременныеКлиента, "ИсточникПеретаскивания"); + Если ИсточникПеретаскивания = Неопределено Тогда + Возврат; + КонецЕсли; + Если ИсточникПеретаскивания.ТаблицаИмя = "ВыбранныеПоля" Тогда + ПеретаскиваниеВПределахТаблицы(ИсточникПеретаскивания, ИдентификаторЦели); + ИначеЕсли ИсточникПеретаскивания.ТаблицаИмя = "Сортировка" Тогда + ПеретаскиваниеСортировокВВыбранныеПоля(ИсточникПеретаскивания, ИдентификаторЦели); + КонецЕсли; +КонецПроцедуры + +&НаКлиенте +Процедура ВыбранныеПоляОкончаниеПеретаскивания(Элемент, ПараметрыПеретаскивания, СтандартнаяОбработка) + СтандартнаяОбработка = Ложь; +КонецПроцедуры + +#КонецОбласти + +//////////////////////////////////////////////////////////////////////////////// +// ТАБЛИЦА Отборы + +#Область ОбработчикиСобытийЭлементовТаблицыФормыОтборы + +&НаКлиенте +Процедура ОтборыВыбор(Элемент, СтрокаИдентификатор, Поле, СтандартнаяОбработка) + СтандартнаяОбработка = Ложь; + ИмяКолонки = Поле.Имя; + Если РасширенныйРежим <> 1 Тогда + Возврат; + КонецЕсли; + СтрокаТаблицы = Элементы.Отборы.ТекущиеДанные; + Если СтрокаТаблицы = Неопределено Тогда + Возврат; + КонецЕсли; + Если СтрокаТаблицы.ЭтоРаздел Тогда + Возврат; + КонецЕсли; + + Если ИмяКолонки = "ОтборыПредставление" Тогда // Изменение порядка. + + Если СтрокаТаблицы.ЭтоПараметр Тогда + Возврат; + КонецЕсли; + Если СтрокаТаблицы.ЭтоГруппа Тогда + ТаблицыПолейИзменитьГруппу("Отборы", СтрокаИдентификатор, СтрокаТаблицы); + Иначе + ТаблицыПолейИзменить("Отборы", СтрокаИдентификатор, СтрокаТаблицы); + КонецЕсли; + + ИначеЕсли ИмяКолонки = "ОтборыИндексКартинкиДоступа" Тогда // Изменение быстрого доступа к отбору. + + ТаблицыПолейИзменитьУровеньДоступа("Отборы", СтрокаИдентификатор, Истина, Не СтрокаТаблицы.ЭтоПараметр); + + ИначеЕсли ИмяКолонки = "ОтборыЗначение" + Или ИмяКолонки = "ОтборыПредставлениеЗначения" Тогда + + Если СтрокаТаблицы.ЭтоГруппа Тогда + Возврат; + КонецЕсли; + Если СтрокаТаблицы.Условие = ВидСравненияКомпоновкиДанных.Заполнено + Или СтрокаТаблицы.Условие = ВидСравненияКомпоновкиДанных.НеЗаполнено Тогда + Возврат; + КонецЕсли; + + ЭтоПериод = (СтрокаТаблицы.ТипУсловия = Новый ОписаниеТипов("ПеречислениеСсылка.ДоступныеПериодыОтчета")); + Если ЭтоПериод Тогда + ОтборыПоказатьВыборПериода(СтрокаТаблицы); + Иначе + Если СтрокаТаблицы.ВводСписком Тогда + ОтборыПоказатьСписокСФлажками(СтрокаТаблицы); + ИначеЕсли СтрокаТаблицы.ФиксированныйСписокВыбора Тогда + ОтборыВыбратьЗначениеИзСписка(СтрокаТаблицы); + Иначе + ОтборыПоказатьВыборСсылки(СтрокаТаблицы, СтандартнаяОбработка); + КонецЕсли; + КонецЕсли; + + ИначеЕсли ИмяКолонки = "ОтборыУсловие" Тогда + + Если СтрокаТаблицы.ЭтоГруппа Тогда + Возврат; + КонецЕсли; + ЭтоПериод = (СтрокаТаблицы.ТипУсловия = Новый ОписаниеТипов("ПеречислениеСсылка.ДоступныеПериодыОтчета")); + Если ЭтоПериод Тогда + ОтборыПоказатьВыборПериода(СтрокаТаблицы); + Иначе + ОтборыВыбратьВидСравнения(СтрокаТаблицы); + КонецЕсли; + + ИначеЕсли ИмяКолонки = "ОтборыЗаголовок" Тогда + + СтандартнаяОбработка = Истина; + + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура ОтборыПередНачаломДобавления(Элемент, Отказ, Копирование, Родитель, Группа, Параметр) + Отказ = Истина; + Если РасширенныйРежим = 0 Тогда + Возврат; + КонецЕсли; + + Если Не РежимИзмененияУзлаВарианта Тогда + ТекущаяСтрока = Элементы.Отборы.ТекущиеДанные; + Если (ТекущаяСтрока = Неопределено) + Или (ТекущаяСтрока.ЭтоПараметр) + Или (ТекущаяСтрока.ЭтоРаздел И ТекущаяСтрока.ИдентификаторКД = "ПараметрыДанных") Тогда + ТекущаяСтрока = Отборы.ПолучитьЭлементы()[1]; + Элементы.Отборы.ТекущаяСтрока = ТекущаяСтрока.ПолучитьИдентификатор(); + КонецЕсли; + КонецЕсли; + + Обработчик = Новый ОписаниеОповещения("ОтборыПослеВыбораПоля", ЭтотОбъект); + ТаблицыПолейПоказатьВыборПоля("Отборы", Обработчик); +КонецПроцедуры + +&НаКлиенте +Процедура ОтборыПослеВыбораПоля(ДоступноеПолеОтбораКД, ПараметрыВыполнения) Экспорт + Если ДоступноеПолеОтбораКД = Неопределено Тогда + Возврат; + КонецЕсли; + + Результат = ТаблицыПолейВставить("Отборы", Тип("ЭлементОтбораКомпоновкиДанных"), 0, Неопределено); + + ЭлементКД = Результат.ЭлементКД; + ЭлементКД.Использование = Истина; + ЭлементКД.ЛевоеЗначение = ДоступноеПолеОтбораКД.Поле; + ЭлементКД.ПравоеЗначение = ДоступноеПолеОтбораКД.Тип.ПривестиЗначение(); + ЭлементКД.РежимОтображения = РежимОтображенияЭлементаНастройкиКомпоновкиДанных.Обычный; + ЭлементКД.ИдентификаторПользовательскойНастройки = Строка(Новый УникальныйИдентификатор()); + + УстановитьМодифицированность(); + Обновить(); +КонецПроцедуры + +&НаКлиенте +Процедура ОтборыПередУдалением(Элемент, Отказ) + СтрокаТаблицы = Элемент.ТекущиеДанные; + Если СтрокаТаблицы = Неопределено Тогда + Возврат; + КонецЕсли; + Если СтрокаТаблицы.ЭтоРаздел + Или СтрокаТаблицы.ЭтоПараметр Тогда + Отказ = Истина; + Возврат; + КонецЕсли; + ТаблицыПолейПередУдалением(Элемент.Имя, Отказ); +КонецПроцедуры + +&НаКлиенте +Процедура Отборы_Сгруппировать(Команда) + Сценарий = Новый Структура; + Сценарий.Вставить("Шаги", "ОпределитьВыделенныеСтроки, СгруппироватьСтроки, ОбновитьФорму"); + Сценарий.Вставить("Действие", "Сгруппировать"); + Сценарий.Вставить("ТаблицаИмя", "Отборы"); + Сценарий.Вставить("ТипГруппыКД", Тип("ГруппаЭлементовОтбораКомпоновкиДанных")); + + ЗапуститьСценарий(Сценарий); +КонецПроцедуры + +&НаКлиенте +Процедура Отборы_Разгруппировать(Команда) + ТаблицыПолейРазгруппировать("Отборы"); +КонецПроцедуры + +&НаКлиенте +Процедура Отборы_ПереместитьВверх(Команда) + Сценарий = Новый Структура; + Сценарий.Вставить("Шаги", "ОпределитьВыделенныеСтроки, СдвинутьСтроки"); + Сценарий.Вставить("Действие", "Переместить"); + Сценарий.Вставить("ТаблицаИмя", "Отборы"); + Сценарий.Вставить("Направление", -1); + + ЗапуститьСценарий(Сценарий); +КонецПроцедуры + +&НаКлиенте +Процедура Отборы_ПереместитьВниз(Команда) + Сценарий = Новый Структура; + Сценарий.Вставить("Шаги", "ОпределитьВыделенныеСтроки, СдвинутьСтроки"); + Сценарий.Вставить("Действие", "Переместить"); + Сценарий.Вставить("ТаблицаИмя", "Отборы"); + Сценарий.Вставить("Направление", 1); + + ЗапуститьСценарий(Сценарий); +КонецПроцедуры + +&НаКлиенте +Процедура Отборы_УстановитьФлажки(Команда) + УстановитьФлажкиИспользованиеВоВсемДереве("Отборы", Истина); +КонецПроцедуры + +&НаКлиенте +Процедура Отборы_СнятьФлажки(Команда) + УстановитьФлажкиИспользованиеВоВсемДереве("Отборы", Ложь); +КонецПроцедуры + +&НаКлиенте +Процедура ОтборыИспользованиеПриИзменении(Элемент) + ТаблицыПолейИзменитьИспользование("Отборы"); +КонецПроцедуры + +&НаКлиенте +Процедура ОтборыЗначениеПриИзменении(Элемент) + ТаблицыПолейИзменитьЗначение("Отборы"); +КонецПроцедуры + +&НаКлиенте +Процедура ОтборыЗаголовокПриИзменении(Элемент) + СтрокаТаблицы = Элементы.Отборы.ТекущиеДанные; + Если СтрокаТаблицы = Неопределено Тогда + Возврат; + КонецЕсли; + + УзелКД = ТаблицыПолейНайтиУзел(ЭтотОбъект, "Отборы", СтрокаТаблицы); + ЭлементКД = УзелКД.ПолучитьОбъектПоИдентификатору(СтрокаТаблицы.ИдентификаторКД); + Если ЭлементКД = Неопределено Тогда + Возврат; + КонецЕсли; + + Если ПустаяСтрока(СтрокаТаблицы.Заголовок) Тогда + СтрокаТаблицы.Заголовок = СтрокаТаблицы.Представление; + КонецЕсли; + СтрокаТаблицы.ЗаголовокПереопределен = (СтрокаТаблицы.Заголовок <> СтрокаТаблицы.Представление); + + Если Не СтрокаТаблицы.ЭтоПараметр Тогда + Если СтрокаТаблицы.ИндексКартинкиДоступа = 1 Или СтрокаТаблицы.ИндексКартинкиДоступа = 3 Тогда + ЭлементКД.Представление = "1"; + Иначе + ЭлементКД.Представление = ""; + КонецЕсли; + КонецЕсли; + Если СтрокаТаблицы.ЗаголовокПереопределен Тогда + ЭлементКД.ПредставлениеПользовательскойНастройки = СтрокаТаблицы.Заголовок; + Иначе + ЭлементКД.ПредставлениеПользовательскойНастройки = ""; + КонецЕсли; + + УстановитьМодифицированность(); +КонецПроцедуры + +&НаКлиенте +Процедура ОтборыПриАктивизацииСтроки(Элемент) + СтрокаТаблицы = Элементы.Отборы.ТекущиеДанные; + Если СтрокаТаблицы = Неопределено Тогда + Возврат; + КонецЕсли; + + МожноУдалятьИПеремещать = Истина; + Если СтрокаТаблицы.ЭтоРаздел + Или СтрокаТаблицы.ЭтоПараметр Тогда + МожноУдалятьИПеремещать = Ложь; + КонецЕсли; + + Элементы.Отборы_Удалить.Доступность = МожноУдалятьИПеремещать; + Элементы.Отборы_Удалить1.Доступность = МожноУдалятьИПеремещать; + Элементы.Отборы_Сгруппировать.Доступность = МожноУдалятьИПеремещать; + Элементы.Отборы_Сгруппировать1.Доступность = МожноУдалятьИПеремещать; + Элементы.Отборы_Разгруппировать.Доступность = МожноУдалятьИПеремещать; + Элементы.Отборы_Разгруппировать1.Доступность = МожноУдалятьИПеремещать; + Элементы.Отборы_ПереместитьВверх.Доступность = МожноУдалятьИПеремещать; + Элементы.Отборы_ПереместитьВверх1.Доступность = МожноУдалятьИПеремещать; + Элементы.Отборы_ПереместитьВниз.Доступность = МожноУдалятьИПеремещать; + Элементы.Отборы_ПереместитьВниз1.Доступность = МожноУдалятьИПеремещать; + + Если Не СтрокаТаблицы.ЭтоРаздел И Не СтрокаТаблицы.ЭтоГруппа Тогда + Элементы.ОтборыЗначение.ВыборГруппИЭлементов = ОтчетыКлиентСервер.ПривестиЗначениеКТипуГруппыИЭлементы( + СтрокаТаблицы.Условие, + СтрокаТаблицы.ВыборГруппИЭлементов); КонецЕсли; КонецПроцедуры #КонецОбласти -#Область ОбработчикиСобытийЭлементовТаблицыФормыКомпоновщикНастроекПользовательскиеНастройки +//////////////////////////////////////////////////////////////////////////////// +// ТАБЛИЦА СтруктураВарианта + +#Область ОбработчикиСобытийЭлементовТаблицыФормыСтруктураВарианта &НаКлиенте -Процедура КомпоновщикНастроекПользовательскиеНастройкиПриИзменении(Элемент) - ПользовательскиеНастройкиМодифицированы = Истина; +Процедура СтруктураВариантаПриАктивизацииСтроки(Элемент) + СтрокаТаблицы = Элементы.СтруктураВарианта.ТекущиеДанные; + Если СтрокаТаблицы = Неопределено Тогда + Возврат; + КонецЕсли; + + МожноДобавлятьВложенные = Истина; + МожноГруппировать = Истина; + МожноОткрывать = Истина; + МожноУдалятьИПеремещать = Истина; + МожноДобавлятьТаблицыИДиаграммы = Ложь; + + Родитель = СтрокаТаблицы.ПолучитьРодителя(); + РодителяМожноПеремещать = (Родитель <> Неопределено + И Родитель.Тип <> "Настройки" + И Родитель.Тип <> "КоллекцияЭлементовСтруктурыТаблицы" + И Родитель.Тип <> "КоллекцияЭлементовСтруктурыДиаграммы"); + ЕстьСоседние = ПолучитьЭлементы(СтруктураВарианта, Родитель).Количество() > 1; + + ЕстьПодчиненные = (СтрокаТаблицы.ПолучитьЭлементы().Количество() > 0); + Если СтрокаТаблицы.Тип = "Таблица" + Или СтрокаТаблицы.Тип = "Диаграмма" + Или СтрокаТаблицы.Тип = "НастройкиВложенногоОбъекта" Тогда + МожноОткрывать = Ложь; + МожноДобавлятьВложенные = Ложь; + ИначеЕсли СтрокаТаблицы.Тип = "Настройки" + Или СтрокаТаблицы.Тип = "КоллекцияЭлементовСтруктурыТаблицы" + Или СтрокаТаблицы.Тип = "КоллекцияЭлементовСтруктурыДиаграммы" Тогда + МожноОткрывать = Ложь; + МожноУдалятьИПеремещать = Ложь; + МожноГруппировать = Ложь; + ИначеЕсли СтрокаТаблицы.Тип = "НастройкиВложенногоОбъекта" Тогда + МожноОткрывать = Ложь; + МожноГруппировать = Ложь; + КонецЕсли; + + Если СтрокаТаблицы.Тип = "Настройки" Или СтрокаТаблицы.Тип = "Группировка" Тогда + МожноДобавлятьТаблицыИДиаграммы = Истина; + КонецЕсли; + + Элементы.СтруктураВарианта_Добавить.Доступность = МожноДобавлятьВложенные; + Элементы.СтруктураВарианта_Добавить1.Доступность = МожноДобавлятьВложенные; + Элементы.СтруктураВарианта_Изменить.Доступность = МожноОткрывать; + Элементы.СтруктураВарианта_Изменить1.Доступность = МожноОткрывать; + Элементы.СтруктураВарианта_ДобавитьТаблицу.Доступность = МожноДобавлятьТаблицыИДиаграммы; + Элементы.СтруктураВарианта_ДобавитьТаблицу1.Доступность = МожноДобавлятьТаблицыИДиаграммы; + Элементы.СтруктураВарианта_ДобавитьДиаграмму.Доступность = МожноДобавлятьТаблицыИДиаграммы; + Элементы.СтруктураВарианта_ДобавитьДиаграмму1.Доступность = МожноДобавлятьТаблицыИДиаграммы; + Элементы.СтруктураВарианта_Удалить.Доступность = МожноУдалятьИПеремещать; + Элементы.СтруктураВарианта_Удалить1.Доступность = МожноУдалятьИПеремещать; + Элементы.СтруктураВарианта_Сгруппировать.Доступность = МожноГруппировать; + Элементы.СтруктураВарианта_Сгруппировать1.Доступность = МожноГруппировать; + Элементы.СтруктураВарианта_ПереместитьВышеИЛевее.Доступность = МожноУдалятьИПеремещать И РодителяМожноПеремещать И МожноДобавлятьВложенные И МожноГруппировать; + Элементы.СтруктураВарианта_ПереместитьВышеИЛевее1.Доступность = МожноУдалятьИПеремещать И РодителяМожноПеремещать И МожноДобавлятьВложенные И МожноГруппировать; + Элементы.СтруктураВарианта_ПереместитьНижеИПравее.Доступность = МожноУдалятьИПеремещать И ЕстьПодчиненные И МожноДобавлятьВложенные И МожноГруппировать; + Элементы.СтруктураВарианта_ПереместитьНижеИПравее1.Доступность = МожноУдалятьИПеремещать И ЕстьПодчиненные И МожноДобавлятьВложенные И МожноГруппировать; + Элементы.СтруктураВарианта_ПереместитьВверх.Доступность = МожноУдалятьИПеремещать И ЕстьСоседние; + Элементы.СтруктураВарианта_ПереместитьВверх1.Доступность = МожноУдалятьИПеремещать И ЕстьСоседние; + Элементы.СтруктураВарианта_ПереместитьВниз.Доступность = МожноУдалятьИПеремещать И ЕстьСоседние; + Элементы.СтруктураВарианта_ПереместитьВниз1.Доступность = МожноУдалятьИПеремещать И ЕстьСоседние; + КонецПроцедуры -#КонецОбласти - -#Область ОбработчикиКомандФормы +&НаКлиенте +Процедура СтруктураВариантаВыбор(Элемент, СтрокаИдентификатор, Поле, СтандартнаяОбработка) + СтандартнаяОбработка = Ложь; + Если РасширенныйРежим <> 1 Тогда + Возврат; + КонецЕсли; + СтрокаТаблицы = Элементы.СтруктураВарианта.ТекущиеДанные; + Если СтрокаТаблицы = Неопределено Тогда + Возврат; + КонецЕсли; + Если СтрокаТаблицы.Тип = "КоллекцияЭлементовСтруктурыТаблицы" + Или СтрокаТаблицы.Тип = "КоллекцияЭлементовСтруктурыДиаграммы" + Или СтрокаТаблицы.Тип = "Настройки" Тогда + Возврат; + КонецЕсли; + ИмяКолонки = Поле.Имя; + Если ИмяКолонки = "СтруктураВариантаПредставление" + Или ИмяКолонки = "СтруктураВариантаСодержитОтборы" + Или ИмяКолонки = "СтруктураВариантаСодержитПоляИлиСортировки" + Или ИмяКолонки = "СтруктураВариантаСодержитУсловноеОформление" Тогда + Если СтрокаТаблицы.Тип = "Таблица" + Или СтрокаТаблицы.Тип = "НастройкиВложенногоОбъекта" Тогда + Возврат; + КонецЕсли; + + Если ИмяКолонки = "СтруктураВариантаСодержитОтборы" Тогда + ИмяСтраницы = "СтраницаОтборы"; + ИначеЕсли ИмяКолонки = "СтруктураВариантаСодержитПоляИлиСортировки" Тогда + ИмяСтраницы = "СтраницаВыбранныеПоляИСортировки"; + ИначеЕсли ИмяКолонки = "СтруктураВариантаСодержитУсловноеОформление" Тогда + ИмяСтраницы = "СтраницаОформление"; + Иначе + ИмяСтраницы = Неопределено; + КонецЕсли; + + СтруктураВариантаИзменитьУзел("СтруктураВарианта", СтрокаИдентификатор, СтрокаТаблицы, ИмяСтраницы); + Иначе + СтандартнаяОбработка = Истина; + КонецЕсли; +КонецПроцедуры &НаКлиенте -Процедура ЗавершитьРедактирование(Команда) - Если МодальныйРежим - Или РежимОткрытияОкна = РежимОткрытияОкнаФормы.БлокироватьВесьИнтерфейс - Или ВладелецФормы = Неопределено Тогда - Закрыть(Истина); +Процедура СтруктураВариантаПередНачаломДобавления(Элемент, Отказ, Копирование, Родитель, Группа, Параметр) + Отказ = Истина; + Если РасширенныйРежим = 0 Тогда + Возврат; + КонецЕсли; + Если Не Элементы.СтруктураВарианта_Добавить.Доступность Тогда + Возврат; + КонецЕсли; + Если Копирование Тогда + Возврат; + КонецЕсли; + + СтруктураВариантаДобавитьГруппировку(Истина); +КонецПроцедуры + +&НаКлиенте +Процедура СтруктураВарианта_Сгруппировать(Команда) + Если Не Элементы.СтруктураВарианта_Сгруппировать.Доступность Тогда + Возврат; + КонецЕсли; + СтруктураВариантаДобавитьГруппировку(Ложь); +КонецПроцедуры + +&НаКлиенте +Процедура СтруктураВариантаДобавитьГруппировку(ВнутрьТекущей) + ПараметрыВыполнения = Новый Структура; + ПараметрыВыполнения.Вставить("ВнутрьТекущей", ВнутрьТекущей); + ПараметрыВыполнения.Вставить("Оборачивать", Истина); + + ИдентификаторУзлаНастроек = Неопределено; + СтрокаТаблицы = Элементы.СтруктураВарианта.ТекущиеДанные; + Если СтрокаТаблицы <> Неопределено Тогда + Если Не ВнутрьТекущей Тогда + СтрокаТаблицы = СтрокаТаблицы.ПолучитьРодителя(); + КонецЕсли; + Если ВнутрьТекущей Тогда + Если СтрокаТаблицы.Тип = "Настройки" И Не СтрокаТаблицы.ФлажокДоступен Тогда + ПараметрыВыполнения.Оборачивать = Ложь; + ИначеЕсли СтрокаТаблицы.ПолучитьЭлементы().Количество() > 1 Тогда + ПараметрыВыполнения.Оборачивать = Ложь; + КонецЕсли; + КонецЕсли; + Пока СтрокаТаблицы <> Неопределено Цикл + Если СтрокаТаблицы.Тип = "Настройки" + Или СтрокаТаблицы.Тип = "НастройкиВложенногоОбъекта" + Или СтрокаТаблицы.Тип = "Группировка" + Или СтрокаТаблицы.Тип = "ГруппировкаТаблицы" + Или СтрокаТаблицы.Тип = "ГруппировкаДиаграммы" Тогда + ИдентификаторУзлаНастроек = СтрокаТаблицы.ИдентификаторКД; + Прервать; + КонецЕсли; + СтрокаТаблицы = СтрокаТаблицы.ПолучитьРодителя(); + КонецЦикла; + КонецЕсли; + + Обработчик = Новый ОписаниеОповещения("СтруктураВариантаДобавитьГруппировкуПослеВыбораПоля", ЭтотОбъект, ПараметрыВыполнения); + ТаблицыПолейПоказатьВыборПоля("СтруктураВарианта", Обработчик, Неопределено, ИдентификаторУзлаНастроек); +КонецПроцедуры + +&НаКлиенте +Процедура СтруктураВариантаДобавитьГруппировкуПослеВыбораПоля(ДоступноеПолеКД, ПараметрыВыполнения) Экспорт + Если ДоступноеПолеКД = Неопределено Тогда + Возврат; + КонецЕсли; + + ТекущаяСтрока = Элементы.СтруктураВарианта.ТекущиеДанные; + + СтрокиПеремещаемыеВНовуюГруппировку = Новый Массив; + Если ПараметрыВыполнения.Оборачивать Тогда + Если ПараметрыВыполнения.ВнутрьТекущей Тогда + Найденные = ТекущаяСтрока.ПолучитьЭлементы(); + Для Каждого ПеремещаемаяСтрока Из Найденные Цикл + СтрокиПеремещаемыеВНовуюГруппировку.Добавить(ПеремещаемаяСтрока); + КонецЦикла; + Иначе + СтрокиПеремещаемыеВНовуюГруппировку.Добавить(ТекущаяСтрока); + КонецЕсли; + КонецЕсли; + + // Добавление новой группировки. + Результат = ТаблицыПолейВставить("СтруктураВарианта", Тип("ГруппировкаКомпоновкиДанных"), ТекущаяСтрока, ПараметрыВыполнения.ВнутрьТекущей); + + ЭлементКД = Результат.ЭлементКД; + ЭлементКД.Использование = Истина; + ЭлементКД.Выбор.Элементы.Добавить(Тип("АвтоВыбранноеПолеКомпоновкиДанных")); + ЭлементКД.Порядок.Элементы.Добавить(Тип("АвтоЭлементПорядкаКомпоновкиДанных")); + + Если ДоступноеПолеКД = "<>" Тогда + // Детальные записи - добавлять поле не требуется. + Представление = НСтр("ru = '<Детальные записи>'"); Иначе - РезультатВыбора = Новый Структура; - РезультатВыбора.Вставить("ВариантМодифицирован", Ложь); - РезультатВыбора.Вставить("ПользовательскиеНастройкиМодифицированы", Ложь); + ПолеГруппировкиКД = ЭлементКД.ПоляГруппировки.Элементы.Добавить(Тип("ПолеГруппировкиКомпоновкиДанных")); + ПолеГруппировкиКД.Использование = Истина; + ПолеГруппировкиКД.Поле = ДоступноеПолеКД.Поле; + Представление = Строка(ДоступноеПолеКД.Заголовок); + КонецЕсли; + + СтрокаТаблицы = Результат.СтрокаТаблицы; + СтрокаТаблицы.Использование = ЭлементКД.Использование; + СтрокаТаблицы.Представление = Представление; + СтрокаТаблицы.ИндексКартинки = 1; + СтрокаТаблицы.ФлажокДоступен = Истина; + СтрокаТаблицы.Тип = ОтчетыКлиентСервер.ТипНастройкиСтрокой(ТипЗнч(ЭлементКД)); + + Если Не ПараметрыВыполнения.ВнутрьТекущей Тогда + СтрокаТаблицы.Заголовок = ТекущаяСтрока.Заголовок; + СтруктураВариантаОбновитьЗаголовокЭлементаВКомпоновщике(СтрокаТаблицы); + ТекущаяСтрока.Заголовок = ""; + СтруктураВариантаОбновитьЗаголовокЭлементаВКомпоновщике(ТекущаяСтрока); + КонецЕсли; + + // Перемещение текущей группировки в новую. + Для Каждого ПеремещаемаяСтрока Из СтрокиПеремещаемыеВНовуюГруппировку Цикл + Результат = ТаблицыПолейПереместить("СтруктураВарианта", ПеремещаемаяСтрока, СтрокаТаблицы, Неопределено, Ложь); + КонецЦикла; + + // Бантики. + Элементы.СтруктураВарианта.Развернуть(СтрокаТаблицы.ПолучитьИдентификатор(), Истина); + Элементы.СтруктураВарианта.ТекущаяСтрока = СтрокаТаблицы.ПолучитьИдентификатор(); + + ПользовательскиеНастройкиМодифицированы = Истина; + Если РасширенныйРежим = 1 Тогда + ВариантИзменен = Истина; + КонецЕсли; +КонецПроцедуры + +&НаКлиенте +Процедура СтруктураВарианта_ДобавитьТаблицу(Команда) + Если Не Элементы.СтруктураВарианта_ДобавитьТаблицу.Доступность Тогда + Возврат; + КонецЕсли; + ДобавитьТаблицуИлиДиаграмму(Тип("ТаблицаКомпоновкиДанных")); +КонецПроцедуры + +&НаКлиенте +Процедура СтруктураВарианта_ДобавитьДиаграмму(Команда) + Если Не Элементы.СтруктураВарианта_ДобавитьДиаграмму.Доступность Тогда + Возврат; + КонецЕсли; + ДобавитьТаблицуИлиДиаграмму(Тип("ДиаграммаКомпоновкиДанных")); +КонецПроцедуры + +&НаКлиенте +Процедура СтруктураВарианта_УстановитьФлажки(Команда) + УстановитьФлажкиИспользованиеВоВсемДереве("СтруктураВарианта", Истина); +КонецПроцедуры + +&НаКлиенте +Процедура СтруктураВарианта_СнятьФлажки(Команда) + УстановитьФлажкиИспользованиеВоВсемДереве("СтруктураВарианта", Ложь); +КонецПроцедуры + +&НаКлиенте +Процедура ДобавитьТаблицуИлиДиаграмму(ТипЭлемента) + ТекущаяСтрока = Элементы.СтруктураВарианта.ТекущиеДанные; + + Результат = ТаблицыПолейВставить("СтруктураВарианта", ТипЭлемента, ТекущаяСтрока, Истина); + ЭлементКД = Результат.ЭлементКД; + + СтрокаТаблицы = Результат.СтрокаТаблицы; + СтрокаТаблицы.Тип = ОтчетыКлиентСервер.ТипНастройкиСтрокой(ТипЭлемента); + СтрокаТаблицы.Заголовок = СтрокаТаблицы.Представление; + СтрокаТаблицы.ФлажокДоступен = Истина; + СтрокаТаблицы.Использование = ЭлементКД.Использование; + + УзелКД = ТаблицыПолейНайтиУзел(ЭтотОбъект, "СтруктураВарианта"); + ВложенныеСтроки = СтрокаТаблицы.ПолучитьЭлементы(); + + Если СтрокаТаблицы.Тип = "Диаграмма" Тогда - Если ВариантМодифицирован Тогда - РезультатВыбора.ВариантМодифицирован = Истина; - РезультатВыбора.Вставить("НастройкиКД", Отчет.КомпоновщикНастроек.Настройки); + ЭлементКД.Выбор.Элементы.Добавить(Тип("АвтоВыбранноеПолеКомпоновкиДанных")); + УстановитьПараметрВывода(ЭлементКД, "ТипДиаграммы.СоединениеЗначенийПоСериям", ТипСоединенияЗначенийПоСериямДиаграммы.СоединениеКраев); + УстановитьПараметрВывода(ЭлементКД, "ТипДиаграммы.ЛинииСоединенияЗначенийПоСериям"); + УстановитьПараметрВывода(ЭлементКД, "ТипДиаграммы.ЦветСоединенияЗначенийПоСериям", WebЦвета.СеребристоСерый); + УстановитьПараметрВывода(ЭлементКД, "ТипДиаграммы.РежимСглаживания", РежимСглаживанияДиаграммы.ГладкаяКривая); + УстановитьПараметрВывода(ЭлементКД, "ТипДиаграммы.РежимПолупрозрачности", РежимПолупрозрачностиДиаграммы.Использовать); + + СтрокаТаблицы.Представление = НСтр("ru = 'Диаграмма'"); + СтрокаТаблицы.ИндексКартинки = 3; + + ВложенныйЭлементКД = ЭлементКД.Точки; + ВложеннаяСтрока = ВложенныеСтроки.Добавить(); + ВложеннаяСтрока.Тип = ОтчетыКлиентСервер.ТипНастройкиСтрокой(ТипЗнч(ВложенныйЭлементКД)); + ВложеннаяСтрока.Подтип = "ДиаграммаТочки"; + ВложеннаяСтрока.ИдентификаторКД = УзелКД.ПолучитьИдентификаторПоОбъекту(ВложенныйЭлементКД); + ВложеннаяСтрока.ИндексКартинки = -1; + ВложеннаяСтрока.Представление = НСтр("ru = 'Точки'"); + + ВложенныйЭлементКД = ЭлементКД.Серии; + ВложеннаяСтрока = ВложенныеСтроки.Добавить(); + ВложеннаяСтрока.Тип = ОтчетыКлиентСервер.ТипНастройкиСтрокой(ТипЗнч(ВложенныйЭлементКД)); + ВложеннаяСтрока.Подтип = "ДиаграммаСерии"; + ВложеннаяСтрока.ИдентификаторКД = УзелКД.ПолучитьИдентификаторПоОбъекту(ВложенныйЭлементКД); + ВложеннаяСтрока.ИндексКартинки = -1; + ВложеннаяСтрока.Представление = НСтр("ru = 'Серии'"); + + ИначеЕсли СтрокаТаблицы.Тип = "Таблица" Тогда + + СтрокаТаблицы.Представление = НСтр("ru = 'Таблица'"); + СтрокаТаблицы.ИндексКартинки = 2; + + ВложенныйЭлементКД = ЭлементКД.Строки; + ВложеннаяСтрока = ВложенныеСтроки.Добавить(); + ВложеннаяСтрока.Тип = ОтчетыКлиентСервер.ТипНастройкиСтрокой(ТипЗнч(ВложенныйЭлементКД)); + ВложеннаяСтрока.Подтип = "ТаблицаСтроки"; + ВложеннаяСтрока.ИдентификаторКД = УзелКД.ПолучитьИдентификаторПоОбъекту(ВложенныйЭлементКД); + ВложеннаяСтрока.ИндексКартинки = -1; + ВложеннаяСтрока.Представление = НСтр("ru = 'Строки'"); + + ВложенныйЭлементКД = ЭлементКД.Колонки; + ВложеннаяСтрока = ВложенныеСтроки.Добавить(); + ВложеннаяСтрока.Тип = ОтчетыКлиентСервер.ТипНастройкиСтрокой(ТипЗнч(ВложенныйЭлементКД)); + ВложеннаяСтрока.Подтип = "ТаблицаКолонки"; + ВложеннаяСтрока.ИдентификаторКД = УзелКД.ПолучитьИдентификаторПоОбъекту(ВложенныйЭлементКД); + ВложеннаяСтрока.ИндексКартинки = -1; + ВложеннаяСтрока.Представление = НСтр("ru = 'Колонки'"); + + КонецЕсли; + + Элементы.СтруктураВарианта.Развернуть(СтрокаТаблицы.ПолучитьИдентификатор(), Истина); + УстановитьМодифицированность(); +КонецПроцедуры + +&НаКлиенте +Процедура СтруктураВариантаНачалоПеретаскивания(Элемент, ПараметрыПеретаскивания, СтандартнаяОбработка) + // Проверка общих условий. + Если РасширенныйРежим = 0 Тогда + СтандартнаяОбработка = Ложь; + Возврат; + КонецЕсли; + // Проверка источника. + СтрокаТаблицы = СтруктураВарианта.НайтиПоИдентификатору(ПараметрыПеретаскивания.Значение); + Если СтрокаТаблицы = Неопределено Тогда + СтандартнаяОбработка = Ложь; + Возврат; + КонецЕсли; + Если СтрокаТаблицы.Тип = "КоллекцияЭлементовСтруктурыДиаграммы" + Или СтрокаТаблицы.Тип = "КоллекцияЭлементовСтруктурыТаблицы" + Или СтрокаТаблицы.Тип = "Настройки" Тогда + СтандартнаяОбработка = Ложь; + Возврат; + КонецЕсли; +КонецПроцедуры + +&НаКлиенте +Процедура СтруктураВариантаПроверкаПеретаскивания(Элемент, ПараметрыПеретаскивания, СтандартнаяОбработка, ИдентификаторЦели, Поле) + // Проверка общих условий. + Если ИдентификаторЦели = Неопределено Тогда + ПараметрыПеретаскивания.Действие = ДействиеПеретаскивания.Отмена; + Возврат; + КонецЕсли; + // Проверка источника. + СтрокаТаблицы = СтруктураВарианта.НайтиПоИдентификатору(ПараметрыПеретаскивания.Значение); + Если СтрокаТаблицы = Неопределено Тогда + ПараметрыПеретаскивания.Действие = ДействиеПеретаскивания.Отмена; + Возврат; + КонецЕсли; + // Проверка приемника. + НовыйРодитель = СтруктураВарианта.НайтиПоИдентификатору(ИдентификаторЦели); + Если НовыйРодитель = Неопределено Тогда + ПараметрыПеретаскивания.Действие = ДействиеПеретаскивания.Отмена; + Возврат; + КонецЕсли; + Если НовыйРодитель.Тип = "Таблица" + Или НовыйРодитель.Тип = "Диаграмма" Тогда + ПараметрыПеретаскивания.Действие = ДействиеПеретаскивания.Отмена; + Возврат; + КонецЕсли; + + // Проверка совместимости источника с приемником. + ДопустимоТолькоНаличиеГруппировок = Ложь; + Если НовыйРодитель.Тип = "КоллекцияЭлементовСтруктурыТаблицы" + Или НовыйРодитель.Тип = "КоллекцияЭлементовСтруктурыДиаграммы" + Или НовыйРодитель.Тип = "ГруппировкаТаблицы" + Или НовыйРодитель.Тип = "ГруппировкаДиаграммы" Тогда + ДопустимоТолькоНаличиеГруппировок = Истина; + КонецЕсли; + + Если ДопустимоТолькоНаличиеГруппировок + И СтрокаТаблицы.Тип <> "Группировка" + И СтрокаТаблицы.Тип <> "ГруппировкаТаблицы" + И СтрокаТаблицы.Тип <> "ГруппировкаДиаграммы" Тогда + ПараметрыПеретаскивания.Действие = ДействиеПеретаскивания.Отмена; + Возврат; + КонецЕсли; + + КоллекцииКоллекций = Новый Массив; + КоллекцииКоллекций.Добавить(СтрокаТаблицы.ПолучитьЭлементы()); + Количество = 1; + Пока Количество > 0 Цикл + Коллекция = КоллекцииКоллекций[0]; + Количество = Количество - 1; + КоллекцииКоллекций.Удалить(0); + Для Каждого ВложеннаяСтрокаТаблицы Из Коллекция Цикл + Если ВложеннаяСтрокаТаблицы = НовыйРодитель Тогда + ПараметрыПеретаскивания.Действие = ДействиеПеретаскивания.Отмена; + Возврат; + КонецЕсли; + Если ДопустимоТолькоНаличиеГруппировок + И ВложеннаяСтрокаТаблицы.Тип <> "Группировка" + И ВложеннаяСтрокаТаблицы.Тип <> "ГруппировкаТаблицы" + И ВложеннаяСтрокаТаблицы.Тип <> "ГруппировкаДиаграммы" Тогда + ПараметрыПеретаскивания.Действие = ДействиеПеретаскивания.Отмена; + Возврат; + КонецЕсли; + КоллекцииКоллекций.Добавить(ВложеннаяСтрокаТаблицы.ПолучитьЭлементы()); + Количество = Количество + 1; + КонецЦикла; + КонецЦикла; + +КонецПроцедуры + +&НаКлиенте +Процедура СтруктураВариантаПеретаскивание(Элемент, ПараметрыПеретаскивания, СтандартнаяОбработка, ИдентификаторЦели, Поле) + // Все проверки пройдены. + СтандартнаяОбработка = Ложь; + + СтрокаТаблицы = СтруктураВарианта.НайтиПоИдентификатору(ПараметрыПеретаскивания.Значение); + НовыйРодитель = СтруктураВарианта.НайтиПоИдентификатору(ИдентификаторЦели); + + Результат = ТаблицыПолейПереместить("СтруктураВарианта", СтрокаТаблицы, НовыйРодитель, Неопределено, Ложь); + + Элементы.СтруктураВарианта.Развернуть(НовыйРодитель.ПолучитьИдентификатор(), Истина); + Элементы.СтруктураВарианта.ТекущаяСтрока = Результат.СтрокаДерева.ПолучитьИдентификатор(); + + ПользовательскиеНастройкиМодифицированы = Истина; + Если РасширенныйРежим = 1 Тогда + ВариантИзменен = Истина; + КонецЕсли; +КонецПроцедуры + +&НаКлиенте +Процедура СтруктураВариантаИспользованиеПриИзменении(Элемент) + ТаблицыПолейИзменитьИспользование("СтруктураВарианта"); +КонецПроцедуры + +&НаКлиенте +Процедура СтруктураВариантаЗаголовокПриИзменении(Элемент) + СтрокаТаблицы = Элементы.СтруктураВарианта.ТекущиеДанные; + Если СтрокаТаблицы = Неопределено Тогда + Возврат; + КонецЕсли; + + СтруктураВариантаОбновитьЗаголовокЭлементаВКомпоновщике(СтрокаТаблицы); + + ПользовательскиеНастройкиМодифицированы = Истина; + Если РасширенныйРежим = 1 Тогда + ВариантИзменен = Истина; + КонецЕсли; +КонецПроцедуры + +&НаКлиенте +Процедура СтруктураВарианта_ПереместитьВверх(Команда) + Сценарий = Новый Структура; + Сценарий.Вставить("Шаги", "ОпределитьВыделенныеСтроки, СдвинутьСтроки"); + Сценарий.Вставить("Действие", "Переместить"); + Сценарий.Вставить("ТаблицаИмя", "СтруктураВарианта"); + Сценарий.Вставить("Направление", -1); + + ЗапуститьСценарий(Сценарий); +КонецПроцедуры + +&НаКлиенте +Процедура СтруктураВарианта_ПереместитьВниз(Команда) + Сценарий = Новый Структура; + Сценарий.Вставить("Шаги", "ОпределитьВыделенныеСтроки, СдвинутьСтроки"); + Сценарий.Вставить("Действие", "Переместить"); + Сценарий.Вставить("ТаблицаИмя", "СтруктураВарианта"); + Сценарий.Вставить("Направление", 1); + + ЗапуститьСценарий(Сценарий); +КонецПроцедуры + +&НаКлиенте +Процедура СтруктураВарианта_Изменить(Команда) + ТаблицаЭлемент = Элементы.СтруктураВарианта; + Поле = ТаблицаЭлемент.ТекущийЭлемент; + СтандартнаяОбработка = Истина; + СтрокаИдентификатор = ТаблицаЭлемент.ТекущаяСтрока; + СтруктураВариантаВыбор(ТаблицаЭлемент, СтрокаИдентификатор, Поле, СтандартнаяОбработка); +КонецПроцедуры + +&НаКлиенте +Процедура СтруктураВариантаПередУдалением(Элемент, Отказ) + Отказ = Истина; + Если РасширенныйРежим = 0 Или Не Элементы.СтруктураВарианта_Удалить.Доступность Тогда + Возврат; + КонецЕсли; + + Сценарий = Новый Структура; + Сценарий.Вставить("Шаги", "ОпределитьВыделенныеСтроки, УдалитьСтроки, ОбновитьФорму"); + Сценарий.Вставить("Действие", "Удалить"); + Сценарий.Вставить("ТаблицаИмя", "СтруктураВарианта"); + + ЗапуститьСценарий(Сценарий); +КонецПроцедуры + +&НаКлиенте +Процедура СтруктураВарианта_ПереместитьВышеИЛевее(Команда) + Если Не Элементы.СтруктураВарианта_ПереместитьВышеИЛевее.Доступность Тогда + Возврат; + КонецЕсли; + СтрокаТаблицыВверх = Элементы.СтруктураВарианта.ТекущиеДанные; + Если СтрокаТаблицыВверх = Неопределено Тогда + Возврат; + КонецЕсли; + СтрокаТаблицыВниз = СтрокаТаблицыВверх.ПолучитьРодителя(); + Если СтрокаТаблицыВниз = Неопределено Тогда + Возврат; + КонецЕсли; + + ПараметрыВыполнения = Новый Структура; + ПараметрыВыполнения.Вставить("Режим", "ВверхИВлево"); + ПараметрыВыполнения.Вставить("СтрокаТаблицыВверх", СтрокаТаблицыВверх); + ПараметрыВыполнения.Вставить("СтрокаТаблицыВниз", СтрокаТаблицыВниз); + СтруктураВарианта_Переместить(-1, ПараметрыВыполнения); +КонецПроцедуры + +&НаКлиенте +Процедура СтруктураВарианта_ПереместитьНижеИПравее(Команда) + Если Не Элементы.СтруктураВарианта_ПереместитьНижеИПравее.Доступность Тогда + Возврат; + КонецЕсли; + СтрокаТаблицыВниз = Элементы.СтруктураВарианта.ТекущиеДанные; + Если СтрокаТаблицыВниз = Неопределено Тогда + Возврат; + КонецЕсли; + ПараметрыВыполнения = Новый Структура; + ПараметрыВыполнения.Вставить("Режим", "ВнизИВправо"); + ПараметрыВыполнения.Вставить("СтрокаТаблицыВверх", Неопределено); + ПараметрыВыполнения.Вставить("СтрокаТаблицыВниз", СтрокаТаблицыВниз); + + ПодчиненныеСтроки = СтрокаТаблицыВниз.ПолучитьЭлементы(); + Количество = ПодчиненныеСтроки.Количество(); + Если Количество = 0 Тогда + Возврат; + ИначеЕсли Количество = 1 Тогда + ПараметрыВыполнения.СтрокаТаблицыВверх = ПодчиненныеСтроки[0]; + СтруктураВарианта_Переместить(-1, ПараметрыВыполнения); + Иначе + Список = Новый СписокЗначений; + Для НомерСтроки = 1 По Количество Цикл + ПодчиненнаяСтрока = ПодчиненныеСтроки[НомерСтроки-1]; + Список.Добавить(ПодчиненнаяСтрока.ПолучитьИдентификатор(), ПодчиненнаяСтрока.Представление); + КонецЦикла; + Обработчик = Новый ОписаниеОповещения("СтруктураВарианта_Переместить", ЭтотОбъект, ПараметрыВыполнения); + ПоказатьВыборИзСписка(Обработчик, Список); + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура СтруктураВарианта_Переместить(Результат, ПараметрыВыполнения) Экспорт + Если Результат <> -1 Тогда + Если ТипЗнч(Результат) <> Тип("ЭлементСпискаЗначений") Тогда + Возврат; КонецЕсли; - - Если ВариантМодифицирован Или ПользовательскиеНастройкиМодифицированы Тогда - РезультатВыбора.ПользовательскиеНастройкиМодифицированы = Истина; - РезультатВыбора.Вставить("ПользовательскиеНастройкиКД", Отчет.КомпоновщикНастроек.ПользовательскиеНастройки); + СтрокаТаблицыВверх = СтруктураВарианта.НайтиПоИдентификатору(Результат.Значение); + Иначе + СтрокаТаблицыВверх = ПараметрыВыполнения.СтрокаТаблицыВверх; + КонецЕсли; + СтрокаТаблицыВниз = ПараметрыВыполнения.СтрокаТаблицыВниз; + + // 0. Запомнить перед каким элементом вставлять верхнюю строку. + СтрокиВниз = СтрокаТаблицыВниз.ПолучитьЭлементы(); + Индекс = СтрокиВниз.Индекс(СтрокаТаблицыВверх); + МассивИдентификаторовСтрокВниз = Новый Массив; + Для Каждого СтрокаТаблицы Из СтрокиВниз Цикл + Если СтрокаТаблицы = СтрокаТаблицыВверх Тогда + Продолжить; КонецЕсли; - - ОповеститьОВыборе(РезультатВыбора); + МассивИдентификаторовСтрокВниз.Добавить(СтрокаТаблицы.ПолучитьИдентификатор()); + КонецЦикла; + + // 1. Переместить нижнюю строку на уровень с верхней. + Результат1 = ТаблицыПолейПереместить("СтруктураВарианта", СтрокаТаблицыВверх, СтрокаТаблицыВниз.ПолучитьРодителя(), СтрокаТаблицыВниз, Ложь); + СтрокаТаблицыВверх = Результат1.СтрокаДерева; + + // 2. Запомнить какие строки нужно переместить. + СтрокиВверх = СтрокаТаблицыВверх.ПолучитьЭлементы(); + + // 3. Обмен строками. + Для Каждого СтрокаТаблицы Из СтрокиВверх Цикл + Результат2 = ТаблицыПолейПереместить("СтруктураВарианта", СтрокаТаблицы, СтрокаТаблицыВниз, Неопределено, Ложь); + КонецЦикла; + Для Каждого СтрокаТаблицыИдентификатор Из МассивИдентификаторовСтрокВниз Цикл + СтрокаТаблицы = СтруктураВарианта.НайтиПоИдентификатору(СтрокаТаблицыИдентификатор); + Результат3 = ТаблицыПолейПереместить("СтруктураВарианта", СтрокаТаблицы, СтрокаТаблицыВверх, Неопределено, Ложь); + КонецЦикла; + + // 4. Переместить верхнюю строку в нижнюю. + СтрокиВверх = СтрокаТаблицыВверх.ПолучитьЭлементы(); + Если СтрокиВверх.Количество() - 1 < Индекс Тогда + ПередЧемВставить = Неопределено; + Иначе + ПередЧемВставить = СтрокиВверх[Индекс]; + КонецЕсли; + Результат4 = ТаблицыПолейПереместить("СтруктураВарианта", СтрокаТаблицыВниз, СтрокаТаблицыВверх, ПередЧемВставить, Ложь); + СтрокаТаблицыВниз = Результат4.СтрокаДерева; + + // Бантики. + Если ПараметрыВыполнения.Режим = "ВнизИВправо" Тогда + ТекущаяСтрока = СтрокаТаблицыВниз; + Иначе + ТекущаяСтрока = СтрокаТаблицыВверх; + КонецЕсли; + ТекущаяСтрокаИдентификатор = ТекущаяСтрока.ПолучитьИдентификатор(); + Элементы.СтруктураВарианта.Развернуть(ТекущаяСтрокаИдентификатор, Истина); + Элементы.СтруктураВарианта.ТекущаяСтрока = ТекущаяСтрокаИдентификатор; + + ПользовательскиеНастройкиМодифицированы = Истина; + Если РасширенныйРежим = 1 Тогда + ВариантИзменен = Истина; КонецЕсли; КонецПроцедуры #КонецОбласти + +//////////////////////////////////////////////////////////////////////////////// +// ТАБЛИЦА СоставГруппировки + +#Область ОбработчикиСобытийЭлементовТаблицыФормыСоставГруппировки + +&НаКлиенте +Процедура СоставГруппировкиИспользованиеПриИзменении(Элемент) + ТаблицыПолейИзменитьИспользование("СоставГруппировки"); +КонецПроцедуры + +&НаКлиенте +Процедура СоставГруппировкиВыбор(Элемент, СтрокаИдентификатор, Поле, СтандартнаяОбработка) + СтандартнаяОбработка = Ложь; + СтрокаТаблицы = Элементы.СоставГруппировки.ТекущиеДанные; + Если СтрокаТаблицы = Неопределено Тогда + Возврат; + КонецЕсли; + ИмяКолонки = Поле.Имя; + Если ИмяКолонки = "СоставГруппировкиПредставление" Тогда + Если СтрокаТаблицы.ТипНастройки = "ПолеГруппировки" Тогда + ТаблицыПолейИзменить("СоставГруппировки", СтрокаИдентификатор, СтрокаТаблицы); + КонецЕсли; + ИначеЕсли ИмяКолонки = "СоставГруппировкиТипГруппировки" + Или ИмяКолонки = "СоставГруппировкиТипДополнения" Тогда + СтандартнаяОбработка = Истина; + КонецЕсли; +КонецПроцедуры + +&НаКлиенте +Процедура СоставГруппировкиПередНачаломДобавления(Элемент, Отказ, Копирование, Родитель, Группа, Параметр) + Отказ = Истина; + Обработчик = Новый ОписаниеОповещения("СоставГруппировкиПослеВыбораПоля", ЭтотОбъект); + ТаблицыПолейПоказатьВыборПоля("СоставГруппировки", Обработчик); +КонецПроцедуры + +&НаКлиенте +Процедура СоставГруппировкиПослеВыбораПоля(ДоступноеПолеКД, ПараметрыВыполнения) Экспорт + Если ДоступноеПолеКД = Неопределено Тогда + Возврат; + КонецЕсли; + + Результат = ТаблицыПолейВставить("СоставГруппировки", Тип("ПолеГруппировкиКомпоновкиДанных"), 0, Ложь); + + ЭлементКД = Результат.ЭлементКД; + ЭлементКД.Использование = Истина; + ЭлементКД.Поле = ДоступноеПолеКД.Поле; + + СтрокаТаблицы = Результат.СтрокаТаблицы; + СтрокаТаблицы.Использование = ЭлементКД.Использование; + СтрокаТаблицы.Представление = ДоступноеПолеКД.Заголовок; + СтрокаТаблицы.ТипГруппировки = ЭлементКД.ТипГруппировки; + СтрокаТаблицы.ТипДополнения = ЭлементКД.ТипДополнения; + СтрокаТаблицы.ПолеКД = ЭлементКД.Поле; + + Если ДоступноеПолеКД.Ресурс Тогда + СтрокаТаблицы.ИндексКартинки = 20; + ИначеЕсли ДоступноеПолеКД.Таблица Тогда + СтрокаТаблицы.ИндексКартинки = 21; + ИначеЕсли ДоступноеПолеКД.Папка Тогда + СтрокаТаблицы.ИндексКартинки = 1; + Иначе + СтрокаТаблицы.ИндексКартинки = 4; + КонецЕсли; + + ИнформацияОТипах = ОтчетыКлиентСервер.АнализТипов(ДоступноеПолеКД.ТипЗначения, Ложь); + Если ИнформацияОТипах.СодержитТипПериод Или ИнформацияОТипах.СодержитТипДата Тогда + СтрокаТаблицы.ПоказыватьТипДополнения = Истина; + КонецЕсли; + + ПослеИзмененияФлажкаИспользование("СоставГруппировки", СтрокаТаблицы, ЭлементКД); + + УстановитьМодифицированность(); +КонецПроцедуры + +&НаКлиенте +Процедура СоставГруппировкиТипГруппировкиПриИзменении(Элемент) + ТаблицыПолейИзменитьТипГруппировки("СоставГруппировки"); +КонецПроцедуры + +&НаКлиенте +Процедура СоставГруппировкиТипДополненияПриИзменении(Элемент) + ТаблицыПолейИзменитьТипГруппировки("СоставГруппировки"); +КонецПроцедуры + +&НаКлиенте +Процедура СоставГруппировкиПередУдалением(Элемент, Отказ) + ТаблицыПолейПередУдалением(Элемент.Имя, Отказ); +КонецПроцедуры + +&НаКлиенте +Процедура СоставГруппировки_ПереместитьВверх(Команда) + Сценарий = Новый Структура; + Сценарий.Вставить("Шаги", "ОпределитьВыделенныеСтроки, СдвинутьСтроки"); + Сценарий.Вставить("Действие", "Переместить"); + Сценарий.Вставить("ТаблицаИмя", "СоставГруппировки"); + Сценарий.Вставить("Направление", -1); + + ЗапуститьСценарий(Сценарий); +КонецПроцедуры + +&НаКлиенте +Процедура СоставГруппировки_ПереместитьВниз(Команда) + Сценарий = Новый Структура; + Сценарий.Вставить("Шаги", "ОпределитьВыделенныеСтроки, СдвинутьСтроки"); + Сценарий.Вставить("Действие", "Переместить"); + Сценарий.Вставить("ТаблицаИмя", "СоставГруппировки"); + Сценарий.Вставить("Направление", 1); + + ЗапуститьСценарий(Сценарий); +КонецПроцедуры + +#КонецОбласти + +//////////////////////////////////////////////////////////////////////////////// +// ТАБЛИЦА Оформление + +#Область ОбработчикиСобытийЭлементовТаблицыФормыОформление + +&НаКлиенте +Процедура ОформлениеПередНачаломДобавления(Элемент, Отказ, Копирование, Родитель, Группа, Параметр) + Отказ = Истина; + Если РасширенныйРежим = 0 Тогда + Возврат; + КонецЕсли; + + ОформлениеИзменитьЭлемент("Оформление", Неопределено, Неопределено); +КонецПроцедуры + +&НаКлиенте +Процедура ОформлениеВыбор(Элемент, СтрокаИдентификатор, Поле, СтандартнаяОбработка) + СтандартнаяОбработка = Ложь; + Если РасширенныйРежим <> 1 Тогда + Возврат; + КонецЕсли; + СтрокаТаблицы = Элементы.Оформление.ТекущиеДанные; + Если СтрокаТаблицы = Неопределено Тогда + Возврат; + КонецЕсли; + + ИмяКолонки = Поле.Имя; + Если ИмяКолонки = "ОформлениеЗаголовок" Тогда // Изменение порядка. + + ОформлениеИзменитьЭлемент("Оформление", СтрокаИдентификатор, СтрокаТаблицы); + + ИначеЕсли ИмяКолонки = "ОформлениеИндексКартинкиДоступа" Тогда // Изменение быстрого доступа к отбору. + + ТаблицыПолейИзменитьУровеньДоступа("Оформление", СтрокаИдентификатор, Истина, Ложь); + + КонецЕсли; +КонецПроцедуры + +&НаКлиенте +Процедура ОформлениеПередУдалением(Элемент, Отказ) + ТаблицыПолейПередУдалением(Элемент.Имя, Отказ); +КонецПроцедуры + +#КонецОбласти + +//////////////////////////////////////////////////////////////////////////////// +// КОМАНДЫ + +#Область ОбработчикиКомандФормы + +&НаКлиенте +Процедура ЗакрытьИСформировать(Команда) + ЗаписатьИЗакрыть(Истина); +КонецПроцедуры + +&НаКлиенте +Процедура ЗакрытьБезФормирования(Команда) + ЗаписатьИЗакрыть(Ложь); +КонецПроцедуры + +&НаКлиенте +Процедура НастройкиПоУмолчанию(Команда) + ПараметрыЗаполнения = Новый Структура; + ПараметрыЗаполнения.Вставить("ИмяСобытия", "НастройкиПоУмолчанию"); + ПараметрыЗаполнения.Вставить("ПользовательскиеНастройкиМодифицированы", Истина); + ПараметрыЗаполнения.Вставить("СброситьПользовательскиеНастройки", Истина); + БыстрыеНастройкиЗаполнитьКлиент(ПараметрыЗаполнения); +КонецПроцедуры + +&НаКлиенте +Процедура ИзменитьУсловияОтборов(Команда) + ПараметрыФормы = Новый Структура; + ПараметрыФормы.Вставить("НастройкиОтчета", НастройкиОтчета); + ПараметрыФормы.Вставить("КомпоновщикНастроек", Отчет.КомпоновщикНастроек); + Обработчик = Новый ОписаниеОповещения("ИзменитьУсловияОтборовЗавершение", ЭтотОбъект); + ОткрытьФорму("ХранилищеНастроек.ХранилищеВариантовОтчетов.Форма.УсловияОтборовОтчета", ПараметрыФормы, ЭтотОбъект, Истина, , , Обработчик); +КонецПроцедуры + +&НаКлиенте +Процедура ИзменитьУсловияОтборовЗавершение(ВыборПользователя, Контекст) Экспорт + Если ВыборПользователя = Неопределено + Или ВыборПользователя = КодВозвратаДиалога.Отмена + Или ВыборПользователя.Количество() = 0 Тогда + Возврат; + КонецЕсли; + ПараметрыЗаполнения = Новый Структура; + ПараметрыЗаполнения.Вставить("ИмяСобытия", "ИзменитьУсловияОтборов"); + ПараметрыЗаполнения.Вставить("ПользовательскиеНастройкиМодифицированы", Истина); + ПараметрыЗаполнения.Вставить("УсловияОтборов", ВыборПользователя); + БыстрыеНастройкиЗаполнитьКлиент(ПараметрыЗаполнения); +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// Подключаемые команды + +&НаКлиенте +Процедура Подключаемый_Команда(Команда) + // Механизмы расширения + Результат = Ложь; + Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.РассылкаОтчетов") Тогда + МодульРассылкаОтчетовКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("РассылкаОтчетовКлиент"); + МодульРассылкаОтчетовКлиент.ФормаОтчетаОбработчикКоманды(ЭтотОбъект, Команда, Результат); + КонецЕсли; + ОтчетыКлиентПереопределяемый.ОбработчикКоманды(ЭтотОбъект, Команда, Результат); +КонецПроцедуры + +&НаКлиенте +Процедура Подключаемый_ИзменитьВидСравнения(Команда) + ИдентификаторЭлемента = Прав(Команда.Имя, 32); + Контекст = Новый Структура; + Контекст.Вставить("ИдентификаторЭлемента", ИдентификаторЭлемента); + Обработчик = Новый ОписаниеОповещения("ПослеВыбораВидаСравнения", ЭтотОбъект, Контекст); + ОтчетыКлиент.ИзменитьВидСравнения(ЭтотОбъект, ИдентификаторЭлемента, Обработчик); +КонецПроцедуры + +&НаКлиенте +Процедура ПослеВыбораВидаСравнения(ВидСравнения, Контекст) Экспорт + Если ВидСравнения <> Неопределено Тогда + ПараметрыЗаполнения = Новый Структура; + ПараметрыЗаполнения.Вставить("ИмяСобытия", "ИзменитьВидСравнения"); + ПараметрыЗаполнения.Вставить("ПользовательскиеНастройкиМодифицированы", Истина); + БыстрыеНастройкиЗаполнитьКлиент(ПараметрыЗаполнения); + КонецЕсли; +КонецПроцедуры + +#КонецОбласти + +//////////////////////////////////////////////////////////////////////////////// +// ВСПОМОГАТЕЛЬНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ + +#Область СлужебныеПроцедурыИФункции + +//////////////////////////////////////////////////////////////////////////////// +// Клиент + +&НаКлиенте +Процедура ЗаписатьИЗакрыть(Переформировать) + ОповеститьОВыборе(РезультатВыбора(Переформировать)); +КонецПроцедуры + +&НаКлиенте +Функция РезультатВыбора(Переформировать) + РезультатВыбораСформирован = Истина; + + Если РежимИзмененияУзлаВарианта И Не Переформировать Тогда + Возврат Неопределено; + КонецЕсли; + + РезультатВыбора = Новый Структура; + РезультатВыбора.Вставить("ИмяСобытия", "ФормаНастроек"); + РезультатВыбора.Вставить("Переформировать", Переформировать); + РезультатВыбора.Вставить("ВариантМодифицирован", Ложь); + РезультатВыбора.Вставить("ПользовательскиеНастройкиМодифицированы", Ложь); + РезультатВыбора.Вставить("ФормаНастроекРасширенныйРежим", РасширенныйРежим); + РезультатВыбора.Вставить("ФормаНастроекИмяСтраницы", Элементы.СтраницыНастроек.ТекущаяСтраница.Имя); + + Если ВариантИзменен Тогда + РезультатВыбора.ВариантМодифицирован = Истина; + РезультатВыбора.Вставить("НастройкиКД", Отчет.КомпоновщикНастроек.Настройки); + КонецЕсли; + + Если ВариантИзменен Или ПользовательскиеНастройкиМодифицированы Тогда + РезультатВыбора.ПользовательскиеНастройкиМодифицированы = Истина; + РезультатВыбора.Вставить("ПользовательскиеНастройкиКД", Отчет.КомпоновщикНастроек.ПользовательскиеНастройки); + КонецЕсли; + + Если ВариантИзменен И РасширенныйРежим = 1 Тогда + РезультатВыбора.Вставить("СброситьПользовательскиеНастройки", Истина); + КонецЕсли; + + Возврат РезультатВыбора; +КонецФункции + +&НаКлиенте +Процедура ВыборПериодаИзВыпадающегоСписка(Результат, ПараметрыВыбора) Экспорт + Если Результат = Неопределено Тогда + Возврат; // Отмена выбора. + КонецЕсли; + + Если Результат = -1 Тогда // Начало выбора. + // Чтение параметров для формирования списка из сохраненного значения периода. + ПараметрыВыбора.Вставить("НачалоПериода", ПараметрыВыбора.Значение.ДатаНачала); + ПараметрыВыбора.Вставить("Вариант", ПараметрыВыбора.Значение.Вариант); + ИндексНачальногоЗначения = Неопределено; + ИначеЕсли ТипЗнч(Результат.Значение) = Тип("Структура") Тогда + // Чтение параметров для формирования списка из выбранного значения. + ПараметрыВыбора.Вставить("НачалоПериода", Результат.Значение.НачалоПериода); + ПараметрыВыбора.Вставить("Вариант", Результат.Значение.Вариант); + ИндексНачальногоЗначения = Результат.Значение.ИндексНачальногоЗначения; + Иначе + // Загрузка результата выбора. + ЗагрузитьРезультатВыбораПериодаИзВыпадающегоСписка(Результат, ПараметрыВыбора); + Возврат; + КонецЕсли; + + // Формирование списка выбора. + Если ПараметрыВыбора.Вариант = Неопределено Или ПараметрыВыбора.Вариант = ВариантСтандартногоПериода.ПроизвольныйПериод Тогда + + СписокПериодов = ОтчетыКлиентСервер.СписокФиксированныхПериодов(ПараметрыВыбора.НачалоПериода, ПараметрыВыбора.ВидПериода); + + Если ИндексНачальногоЗначения = Неопределено Тогда + ИндексНачальногоЗначения = СписокПериодов.НайтиПоЗначению(ПараметрыВыбора.НачалоПериода); + КонецЕсли; + + ОписаниеНавигационногоЭлемента = Новый Структура; + ОписаниеНавигационногоЭлемента.Вставить("НачалоПериода", СписокПериодов[0].Значение); + ОписаниеНавигационногоЭлемента.Вставить("Вариант", Неопределено); + ОписаниеНавигационногоЭлемента.Вставить("ИндексНачальногоЗначения", 0); + СписокПериодов[0].Значение = ОписаниеНавигационногоЭлемента; + + ОписаниеНавигационногоЭлемента = Новый Структура; + ОписаниеНавигационногоЭлемента.Вставить("НачалоПериода", СписокПериодов[8].Значение); + ОписаниеНавигационногоЭлемента.Вставить("Вариант", Неопределено); + ОписаниеНавигационногоЭлемента.Вставить("ИндексНачальногоЗначения", 8); + СписокПериодов[8].Значение = ОписаниеНавигационногоЭлемента; + + Если Не ПараметрыВыбора.Свойство("ВариантСтандартногоПериодаПоВиду") Тогда + ПараметрыВыбора.Вставить("ВариантСтандартногоПериодаПоВиду", ОтчетыКлиентСервер.ПривестиВидПериодаКСтандартному(ПараметрыВыбора.ВидПериода)); + КонецЕсли; + + ОписаниеНавигационногоЭлемента = Новый Структура; + ОписаниеНавигационногоЭлемента.Вставить("НачалоПериода", ПараметрыВыбора.НачалоПериода); + ОписаниеНавигационногоЭлемента.Вставить("Вариант", ПараметрыВыбора.ВариантСтандартногоПериодаПоВиду); + ОписаниеНавигационногоЭлемента.Вставить("ИндексНачальногоЗначения", Неопределено); + СписокПериодов.Добавить(ОписаниеНавигационногоЭлемента, НСтр("ru = 'Относительный...'")); + + Иначе + + СписокПериодов = ОтчетыКлиентСервер.СписокВычисляемыхПериодов(ПараметрыВыбора.ВидПериода); + + Если ИндексНачальногоЗначения = Неопределено Тогда + ИндексНачальногоЗначения = СписокПериодов.НайтиПоЗначению(ПараметрыВыбора.Вариант); + КонецЕсли; + + ОписаниеНавигационногоЭлемента = Новый Структура; + ОписаниеНавигационногоЭлемента.Вставить("НачалоПериода", ПараметрыВыбора.НачалоПериода); + ОписаниеНавигационногоЭлемента.Вставить("Вариант", Неопределено); + ОписаниеНавигационногоЭлемента.Вставить("ИндексНачальногоЗначения", Неопределено); + СписокПериодов.Добавить(ОписаниеНавигационногоЭлемента, НСтр("ru = 'Фиксированный...'")); + + КонецЕсли; + + Если ИндексНачальногоЗначения = Неопределено Тогда + ИндексНачальногоЗначения = СписокПериодов.Количество() - 1; + КонецЕсли; + + ПеременныеКлиента.Вставить("ВыборПериодаИзВыпадающегоСписка", Новый Структура); + ПеременныеКлиента.ВыборПериодаИзВыпадающегоСписка.Вставить("ПараметрыВыбора", ПараметрыВыбора); + ПеременныеКлиента.ВыборПериодаИзВыпадающегоСписка.Вставить("СписокПериодов", СписокПериодов); + ПеременныеКлиента.ВыборПериодаИзВыпадающегоСписка.Вставить("ИндексНачальногоЗначения", ИндексНачальногоЗначения); + Если Результат = -1 Тогда + НачатьВыборПериодаИзВыпадающегоСписка(); + Иначе + ПодключитьОбработчикОжидания("НачатьВыборПериодаИзВыпадающегоСписка", 0.1, Истина); + КонецЕсли; +КонецПроцедуры + +&НаКлиенте +Процедура НачатьВыборПериодаИзВыпадающегоСписка() + Если ПеременныеКлиента.Свойство("ВыборПериодаИзВыпадающегоСписка") Тогда + Контекст = ПеременныеКлиента.ВыборПериодаИзВыпадающегоСписка; + ПеременныеКлиента.Удалить("ВыборПериодаИзВыпадающегоСписка"); + Обработчик = Новый ОписаниеОповещения("ВыборПериодаИзВыпадающегоСписка", ЭтотОбъект, Контекст.ПараметрыВыбора); + ПоказатьВыборИзСписка(Обработчик, Контекст.СписокПериодов, Контекст.ПараметрыВыбора.Элемент, Контекст.ИндексНачальногоЗначения); + КонецЕсли; +КонецПроцедуры + +&НаКлиенте +Процедура ЗагрузитьРезультатВыбораПериодаИзВыпадающегоСписка(Результат, ПараметрыВыбора) + Значение = ПараметрыВыбора.Значение; + + // Запись результата выбора в данные формы и пользовательские настройки КД. + Если ТипЗнч(Результат.Значение) = Тип("ВариантСтандартногоПериода") Тогда + ЭтотОбъект[ПараметрыВыбора.ПредставлениеИмя] = ?(ПустаяСтрока(Результат.Представление), Строка(Результат.Значение), Результат.Представление); + Значение.Вариант = Результат.Значение; + Иначе + НачалоПериода = ОтчетыКлиентСервер.НачалоПериодаОтчета(ПараметрыВыбора.ВидПериода, Результат.Значение); + КонецПериода = ОтчетыКлиентСервер.КонецПериодаОтчета(ПараметрыВыбора.ВидПериода, Результат.Значение); + + ЭтотОбъект[ПараметрыВыбора.ПредставлениеИмя] = Результат.Представление; + + Значение.Вариант = ВариантСтандартногоПериода.ПроизвольныйПериод; + Значение.ДатаНачала = НачалоПериода; + Значение.ДатаОкончания = КонецПериода; + КонецЕсли; + + ЭтотОбъект[ПараметрыВыбора.ЗначениеИмя] = Значение; + + ПользовательскаяНастройкаКД = НайтиПользовательскуюНастройкуЭлемента(ПараметрыВыбора.ИдентификаторЭлемента); + Если ПараметрыВыбора.ЭтоПараметр Тогда + ПользовательскаяНастройкаКД.Значение = Значение; + Иначе + ПользовательскаяНастройкаКД.ПравоеЗначение = Значение; + КонецЕсли; + + ПользовательскаяНастройкаКД.Использование = Истина; + + ПользовательскиеНастройкиМодифицированы = Истина; +КонецПроцедуры + +&НаКлиенте +Функция НайтиПользовательскуюНастройкуЭлемента(ИдентификаторЭлемента) Экспорт + // Для пользовательских настроек хранятся идентификаторы компоновки данных, + // поскольку они не могут храниться по ссылке (происходит копирование значения). + Если ИдентификаторЭлемента = "Сортировка" Тогда + Если РежимИзмененияУзлаВарианта Тогда + КорневойУзел = Отчет.КомпоновщикНастроек.Настройки.ПолучитьОбъектПоИдентификатору(ИдентификаторТекущегоУзлаКД); + Возврат КорневойУзел.Порядок; + ИначеЕсли РасширенныйРежим = 1 Тогда + Возврат Отчет.КомпоновщикНастроек.Настройки.Порядок; + Иначе + ИдентификаторЭлемента = ИдентификаторЭлемента; + КонецЕсли; + ИначеЕсли ИдентификаторЭлемента = "ВыбранныеПоля" Тогда + Если РежимИзмененияУзлаВарианта Тогда + КорневойУзел = Отчет.КомпоновщикНастроек.Настройки.ПолучитьОбъектПоИдентификатору(ИдентификаторТекущегоУзлаКД); + Возврат КорневойУзел.Выбор; + ИначеЕсли РасширенныйРежим = 1 Тогда + Возврат Отчет.КомпоновщикНастроек.Настройки.Выбор; + Иначе + ИдентификаторЭлемента = ИдентификаторЭлемента; + КонецЕсли; + ИначеЕсли ИдентификаторЭлемента = "Отборы" Тогда + Если РежимИзмененияУзлаВарианта Тогда + КорневойУзел = Отчет.КомпоновщикНастроек.Настройки.ПолучитьОбъектПоИдентификатору(ИдентификаторТекущегоУзлаКД); + Возврат КорневойУзел.Отбор; + ИначеЕсли РасширенныйРежим = 1 Тогда + Возврат Отчет.КомпоновщикНастроек.Настройки.Отбор; + Иначе + ИдентификаторЭлемента = ИдентификаторЭлемента; + КонецЕсли; + ИначеЕсли ИдентификаторЭлемента = "СтруктураВарианта" Тогда + Если РасширенныйРежим = 1 Тогда + Возврат Отчет.КомпоновщикНастроек.Настройки; + Иначе + Возврат Отчет.КомпоновщикНастроек.ПользовательскиеНастройки; + КонецЕсли; + КонецЕсли; + ИдентификаторКД = БыстрыйПоискПользовательскихНастроек.Получить(ИдентификаторЭлемента); + Возврат Отчет.КомпоновщикНастроек.ПользовательскиеНастройки.ПолучитьОбъектПоИдентификатору(ИдентификаторКД); +КонецФункции + +&НаКлиенте +Функция НайтиДополнительныеНастройкиЭлемента(ИдентификаторЭлемента) Экспорт + // Для пользовательских настроек хранятся идентификаторы компоновки данных, + // поскольку они не могут храниться по ссылке (происходит копирование значения). + ВсеДополнительныеНастройки = ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(Отчет.КомпоновщикНастроек.ПользовательскиеНастройки.ДополнительныеСвойства, "ЭлементыФормы"); + Если ВсеДополнительныеНастройки = Неопределено Тогда + Возврат Неопределено; + Иначе + Возврат ВсеДополнительныеНастройки[ИдентификаторЭлемента]; + КонецЕсли; +КонецФункции + +&НаКлиенте +Процедура БыстрыеНастройкиЗаполнитьКлиент(ПараметрыЗаполнения) + Если ПараметрыЗаполнения = Неопределено Тогда + ПараметрыЗаполнения = Новый Структура("ИмяСобытия", "ПослеИзмененияКоллекции"); + КонецЕсли; + РезультатКлиента = БыстрыеНастройкиЗаполнить(ПараметрыЗаполнения); + ПоказатьРезультатЗаполненияНастроек(РезультатКлиента); +КонецПроцедуры + +&НаКлиенте +Процедура ПоказатьРезультатЗаполненияНастроек(РезультатКлиента) + Если РезультатКлиента = Неопределено Тогда + РезультатКлиента = РезультатЗаполненияНастроек; + РезультатЗаполненияНастроек = Неопределено; + КонецЕсли; + Если ТипЗнч(РезультатКлиента) <> Тип("Структура") Тогда + Возврат; + КонецЕсли; + + // Для платформы (переопределение доступных значений на клиенте). + СвоиСпискиВыбора = ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(РезультатКлиента, "СвоиСпискиВыбора"); + Если ТипЗнч(СвоиСпискиВыбора) = Тип("Массив") Тогда + Для Каждого ИдентификаторЭлемента Из СвоиСпискиВыбора Цикл + НастройкаВарианта = НайтиНастройкуВарианта(ЭтотОбъект, ИдентификаторЭлемента); + Если НастройкаВарианта = Неопределено Тогда + Продолжить; + КонецЕсли; + ДополнительныеНастройки = НайтиДополнительныеНастройкиЭлемента(ИдентификаторЭлемента); + Если ДополнительныеНастройки = Неопределено Тогда + Продолжить; + КонецЕсли; + Тип = ТипЗнч(НастройкаВарианта.ЭлементКД); + Если Тип = Тип("ЗначениеПараметраНастроекКомпоновкиДанных") Тогда + ДоступныеПараметры = НастройкаВарианта.УзелКД.ДоступныеПараметры; + ДоступнаяНастройкаКД = ДоступныеПараметры.НайтиПараметр(НастройкаВарианта.ЭлементКД.Параметр); + Если ДоступнаяНастройкаКД.ДоступныеЗначения = Неопределено Тогда + Продолжить; + КонецЕсли; + ДоступнаяНастройкаКД.ДоступныеЗначения.Очистить(); + Для Каждого Элемент Из ДополнительныеНастройки.ЗначенияДляВыбора Цикл + ЗаполнитьЗначенияСвойств(ДоступнаяНастройкаКД.ДоступныеЗначения.Добавить(), Элемент); + КонецЦикла; + ИначеЕсли Тип = Тип("ЭлементОтбораКомпоновкиДанных") Тогда + ДоступныеПоляОтбора = НастройкаВарианта.УзелКД.ДоступныеПоляОтбора; + ДоступнаяНастройкаКД = ДоступныеПоляОтбора.НайтиПоле(НастройкаВарианта.ЭлементКД.ЛевоеЗначение); + ДоступнаяНастройкаКД.ДоступныеЗначения = ДополнительныеНастройки.ЗначенияДляВыбора; + КонецЕсли; + КонецЦикла; + КонецЕсли; + + СтандартныеПодсистемыКлиент.ПоказатьРезультатВыполнения(ЭтотОбъект, РезультатКлиента); +КонецПроцедуры + +&НаКлиенте +Процедура УстановитьПараметрВывода(ЭлементКД, Имя, Значение = Неопределено, Использование = Истина) + ПараметрКД = ЭлементКД.ПараметрыВывода.НайтиЗначениеПараметра(Новый ПараметрКомпоновкиДанных(Имя)); + Если ПараметрКД = Неопределено Тогда + Возврат; + КонецЕсли; + Если Значение <> Неопределено Тогда + ПараметрКД.Значение = Значение; + КонецЕсли; + Если Использование <> Неопределено Тогда + ПараметрКД.Использование = Использование; + КонецЕсли; +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// Клиент - Движок сценарного выполнения. + +&НаКлиенте +Процедура ЗапуститьСценарий(Сценарий) + // Плюсы сценарного выполнения: + // Изоляция обработчиков. + // Текущий шаг может ничего не знать о следующем или предыдущем шаге. + // Единый обработчик оповещения. + // Минимальный клиентский программный интерфейс формы. + // Избавляет от необходимости "разворачивать" стек в обратную сторону + // после закрытия диалога с пользователем. + // Удобная группировка кода. + // Код, вызывающий диалог и обрабатывающий ответ располагаются в одной функции. + // Простая последовательность шагов. + // Удобное отключение шагов. + + Если ТипЗнч(Сценарий.Шаги) = Тип("Строка") Тогда + Сценарий.Шаги = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(Сценарий.Шаги, ",", Истина, Истина); + КонецЕсли; + Сценарий.Вставить("ШагиВГраница", Сценарий.Шаги.ВГраница()); + Сценарий.Вставить("СледующийШагИндекс", 0); + Сценарий.Вставить("ТекущийШаг", Неопределено); + Сценарий.Вставить("ТекущийШагУточнение", ""); + Сценарий.Вставить("Обработчик", Новый ОписаниеОповещения("ВыполнитьСценарий", ЭтотОбъект, Сценарий)); + Сценарий.Вставить("ПричинаОтказа", ""); + + НайтиСледующийШаг(Сценарий); + + ВыполнитьСценарий(Неопределено, Сценарий); +КонецПроцедуры + +&НаКлиенте +Процедура ВыполнитьСценарий(ВыборПользователя, Сценарий) Экспорт + Пока ВыполнитьШаг(ВыборПользователя, Сценарий) Цикл + Если Не НайтиСледующийШаг(Сценарий) Тогда + Прервать; + КонецЕсли; + КонецЦикла; + + Если ЗначениеЗаполнено(Сценарий.ПричинаОтказа) Тогда + ПоказатьПредупреждение(, Сценарий.ПричинаОтказа); + КонецЕсли; +КонецПроцедуры + +&НаКлиенте +Функция НайтиСледующийШаг(Сценарий) + Если Сценарий.СледующийШагИндекс > Сценарий.ШагиВГраница Тогда + Возврат Ложь; + КонецЕсли; + Сценарий.ТекущийШаг = Сценарий.Шаги.Получить(Сценарий.СледующийШагИндекс); + Сценарий.ТекущийШагУточнение = ""; + Сценарий.СледующийШагИндекс = Сценарий.СледующийШагИндекс + 1; + Возврат Истина; +КонецФункции + +&НаКлиенте +Функция ВыполнитьШаг(ВыборПользователя, Сценарий) + + Если Сценарий.ТекущийШаг = "ОпределитьВыделенныеСтроки" Тогда + Возврат ШагОпределитьВыделенныеСтроки(ВыборПользователя, Сценарий); + + ИначеЕсли Сценарий.ТекущийШаг = "ОтредактироватьГруппуПолей" Тогда + Возврат ШагОтредактироватьГруппуПолей(ВыборПользователя, Сценарий); + + ИначеЕсли Сценарий.ТекущийШаг = "СгруппироватьСтроки" Тогда + Возврат ШагСгруппироватьСтроки(ВыборПользователя, Сценарий); + + ИначеЕсли Сценарий.ТекущийШаг = "СдвинутьСтроки" Тогда + Возврат ШагСдвинутьСтроки(ВыборПользователя, Сценарий); + + ИначеЕсли Сценарий.ТекущийШаг = "УдалитьСтроки" Тогда + Возврат ШагУдалитьСтроки(ВыборПользователя, Сценарий); + + ИначеЕсли Сценарий.ТекущийШаг = "ОбновитьФорму" Тогда + Возврат ШагОбновитьФорму(ВыборПользователя, Сценарий); + + Иначе + Сценарий.ПричинаОтказа = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Ошибка в сценарии: Неизвестный шаг ""%1"".'"), Сценарий.ТекущийШаг); + Возврат Ложь; + + КонецЕсли; + + // Альтернативы этим веткам условий: + // "Вычислить()" - неприемлемо использовать только для минимизации кода; + // "ВыполнитьОбработкуОповещения()" - не выгодно, т.к. поддерживаются только процедуры, + // а следовательно следующий шаг придется запускать из предыдущего шага; + // Т.е. исчезает такой большой плюс как изоляция обработчиков от асинхронной логики. + +КонецФункции + +//////////////////////////////////////////////////////////////////////////////// +// Клиент - Шаги сценарного выполнения. + +&НаКлиенте +Функция ШагОбновитьФорму(ВыборПользователя, Сценарий) + Сценарий.Вставить("ИмяСобытия", Сценарий.ТаблицаИмя + "." + Сценарий.Действие); + + // Временное хранилище несериализуемых параметров. + Хранилище = Новый Структура("Обработчик, СтрокиДерева, ТекущаяСтрока, ТекущийРодитель"); + ЗаполнитьЗначенияСвойств(Хранилище, Сценарий); + Для Каждого КлючИЗначение Из Хранилище Цикл + Сценарий.Удалить(КлючИЗначение.Ключ); + КонецЦикла; + + // Вызов сервера. + БыстрыеНастройкиЗаполнитьКлиент(Сценарий); + + // Возвращение параметров. + ОбщегоНазначенияКлиентСервер.ДополнитьСтруктуру(Сценарий, Хранилище, Истина); + + Возврат Истина; // Продолжить сценарий. +КонецФункции + +&НаКлиенте +Функция ШагОпределитьВыделенныеСтроки(ВыборПользователя, Сценарий) + // 1. Дополняет структуру сценария информацией: + Сценарий.Вставить("СтрокиДерева", Новый Массив); // Выделенные строки (не идентификаторы). + Сценарий.Вставить("ТекущаяСтрока", Неопределено); // Активная строка (не идентификатор). + // 2. Осуществляет проверку выделенных строк согласно сценарию. + // 3. Останавливает сценарий если ничего не выделено. + ТаблицаЭлемент = Элементы[Сценарий.ТаблицаИмя]; + ТаблицаРеквизит = ЭтотОбъект[Сценарий.ТаблицаИмя]; + ТекущаяСтрокаИдентификатор = ТаблицаЭлемент.ТекущаяСтрока; + + Особенности = Новый Структура("МогутБытьРазделы, МогутБытьПараметры, + |ТребоватьОдногоРодителя"); + Особенности.МогутБытьРазделы = (Сценарий.ТаблицаИмя = "Отборы" Или Сценарий.ТаблицаИмя = "ВыбранныеПоля" Или Сценарий.ТаблицаИмя = "Сортировка"); + Особенности.МогутБытьПараметры = (Сценарий.ТаблицаИмя = "Отборы"); + Особенности.ТребоватьОдногоРодителя = (Сценарий.Действие = "Переместить" Или Сценарий.Действие = "Сгруппировать"); + Если Особенности.ТребоватьОдногоРодителя Тогда + Сценарий.Вставить("ТекущийРодитель", -1); + КонецЕсли; + + ВыделенныеСтроки = МассивСортировать(ТаблицаЭлемент.ВыделенныеСтроки, НаправлениеСортировки.Возр); + Для Каждого СтрокаИдентификатор Из ВыделенныеСтроки Цикл + СтрокаДерева = ТаблицаРеквизит.НайтиПоИдентификатору(СтрокаИдентификатор); + Если Не ЗарегистрироватьВыделеннуюСтроку(Сценарий, СтрокаДерева, Особенности) Тогда + Возврат Ложь; // Завершить сценарий. + КонецЕсли; + Если СтрокаИдентификатор = ТекущаяСтрокаИдентификатор Тогда + Сценарий.ТекущаяСтрока = СтрокаДерева; + КонецЕсли; + КонецЦикла; + Если Сценарий.СтрокиДерева.Количество() = 0 Тогда + Сценарий.ПричинаОтказа = НСтр("ru = 'Выберите элементы.'"); + Возврат Ложь; // Завершить сценарий. + КонецЕсли; + Если Сценарий.ТекущаяСтрока = Неопределено Тогда + Если Сценарий.Действие = "ИзменитьГруппу" Тогда + Сценарий.ПричинаОтказа = НСтр("ru = 'Выберите группу.'"); + Возврат Ложь; // Завершить сценарий. + КонецЕсли; + КонецЕсли; + + Возврат Истина; // Продолжить сценарий. +КонецФункции + +&НаКлиенте +Функция ЗарегистрироватьВыделеннуюСтроку(Сценарий, СтрокаДерева, Особенности) + Если Сценарий.СтрокиДерева.Найти(СтрокаДерева) <> Неопределено Тогда + Возврат Истина; // Пропустить строку. + КонецЕсли; + Если Особенности.МогутБытьРазделы И СтрокаДерева.ЭтоРаздел Тогда + Возврат Истина; // Пропустить строку. + КонецЕсли; + Если Особенности.МогутБытьПараметры И СтрокаДерева.ЭтоПараметр Тогда + Если Сценарий.Действие = "Переместить" Тогда + Сценарий.ПричинаОтказа = НСтр("ru = 'Параметры не могут быть перемещены.'"); + ИначеЕсли Сценарий.Действие = "Сгруппировать" Тогда + Сценарий.ПричинаОтказа = НСтр("ru = 'Параметры не могут быть участниками групп.'"); + ИначеЕсли Сценарий.Действие = "Удалить" Тогда + Сценарий.ПричинаОтказа = НСтр("ru = 'Параметры не могут быть удалены.'"); + КонецЕсли; + Возврат Ложь; // Завершить сценарий. + КонецЕсли; + Если Особенности.ТребоватьОдногоРодителя Тогда + Родитель = СтрокаДерева.ПолучитьРодителя(); + Если Сценарий.ТекущийРодитель = -1 Тогда + Сценарий.ТекущийРодитель = Родитель; + ИначеЕсли Сценарий.ТекущийРодитель <> Родитель Тогда + Если Сценарий.Действие = "Переместить" Тогда + Сценарий.ПричинаОтказа = НСтр("ru = 'Выбранные элементы не могут быть перемещены, поскольку они принадлежат разным родителям.'"); + ИначеЕсли Сценарий.Действие = "Сгруппировать" Тогда + Сценарий.ПричинаОтказа = НСтр("ru = 'Выбранные элементы не могут быть сгруппированы, поскольку они принадлежат разным родителям.'"); + КонецЕсли; + Возврат Ложь; // Завершить сценарий. + КонецЕсли; + КонецЕсли; + Сценарий.СтрокиДерева.Добавить(СтрокаДерева); + Возврат Истина; // Следующая строка. +КонецФункции + +&НаКлиенте +Функция ШагОтредактироватьГруппуПолей(ВыборПользователя, Сценарий) + // По результатам редактирования группы дополняет структуру сценария информацией: + // * ЗаголовокГруппы - Строка + // * Расположение - РасположениеПоляКомпоновкиДанных + + Если Сценарий.ТекущийШагУточнение = "" Тогда // Первый вызов + ПараметрыФормы = Новый Структура; + Если Сценарий.Действие = "ИзменитьГруппу" Тогда + УзелКД = ТаблицыПолейНайтиУзел(ЭтотОбъект, Сценарий.ТаблицаИмя, Сценарий.ТекущаяСтрока); + ЭлементКД = УзелКД.ПолучитьОбъектПоИдентификатору(Сценарий.ТекущаяСтрока.ИдентификаторКД); + ПараметрыФормы.Вставить("ЗаголовокГруппы", ЭлементКД.Заголовок); + ПараметрыФормы.Вставить("Расположение", ЭлементКД.Расположение); + Иначе + ПараметрыФормы.Вставить("Расположение", РасположениеПоляКомпоновкиДанных.Авто); + КонецЕсли; + + Блокировать = РежимОткрытияОкнаФормы.БлокироватьОкноВладельца; + + Сценарий.ТекущийШагУточнение = "ОбработкаВыбора"; + ОткрытьФорму("ХранилищеНастроек.ХранилищеВариантовОтчетов.Форма.ГруппаВыбранныхПолей", ПараметрыФормы, ЭтотОбъект, Истина, , , Сценарий.Обработчик, Блокировать); + Возврат Ложь; // Приостановить сценарий. + + ИначеЕсли Сценарий.ТекущийШагУточнение = "ОбработкаВыбора" Тогда // После закрытия формы. + + Если ВыборПользователя = Неопределено Или ВыборПользователя = КодВозвратаДиалога.Отмена Тогда + Возврат Ложь; // Отменить сценарий. + КонецЕсли; + + Сценарий.Вставить("ЗаголовокГруппы", ВыборПользователя.ЗаголовокГруппы); + Сценарий.Вставить("Расположение", ВыборПользователя.Расположение); + Возврат Истина; // Продолжить сценарий. + + КонецЕсли; + +КонецФункции + +&НаКлиенте +Функция ШагСгруппироватьСтроки(ВыборПользователя, Сценарий) + ТекущийРодитель = Сценарий.ТекущийРодитель; + ТаблицаЭлемент = Элементы[Сценарий.ТаблицаИмя]; + УзелКД = ТаблицыПолейНайтиУзел(ЭтотОбъект, Сценарий.ТаблицаИмя, Неопределено); + + Если Сценарий.ТекущийРодитель = Неопределено Тогда + ТаблицаРеквизит = ЭтотОбъект[Сценарий.ТаблицаИмя]; + Если Сценарий.ТаблицаИмя = "Отборы" И Не РежимИзмененияУзлаВарианта Тогда + ТекущийРодитель = ТаблицаРеквизит.ПолучитьЭлементы()[1]; + Иначе + ТекущийРодитель = ТаблицаРеквизит; + КонецЕсли; + ТекущийРодительКД = УзелКД; + ИначеЕсли ТипЗнч(ТекущийРодитель.ИдентификаторКД) <> Тип("ИдентификаторКомпоновкиДанных") Тогда + ТекущийРодительКД = УзелКД; + Иначе + ТекущийРодительКД = УзелКД.ПолучитьОбъектПоИдентификатору(ТекущийРодитель.ИдентификаторКД); + КонецЕсли; + СтрокиРодителя = ТекущийРодитель.ПолучитьЭлементы(); + СтрокиРодителяКД = ТекущийРодительКД.Элементы; + + // Проверки пройдены. Добавление группы в родителя родителя. + Группы = ТаблицыПолейВставить(Сценарий.ТаблицаИмя, Сценарий.ТипГруппыКД, 0, Ложь); + + ЭлементКД = Группы.ЭлементКД; + ЭлементКД.Использование = Истина; + НоваяКоллекцияЭлементовКД = ЭлементКД.Элементы; + + ГруппаДерева = Группы.СтрокаТаблицы; + ГруппаДерева.Использование = ЭлементКД.Использование; + ГруппаДерева.ЭтоГруппа = Истина; + НоваяКоллекцияСтрокДерева = ГруппаДерева.ПолучитьЭлементы(); + + Если Сценарий.ТаблицаИмя = "Отборы" Тогда + ГруппаДерева.Представление = Строка(ЭлементКД.ТипГруппы); + ГруппаДерева.ИндексКартинки = -1; + ГруппаДерева.ИндексКартинкиДоступа = 5; + ГруппаДерева.Заголовок = ГруппаДерева.Представление; + Иначе + ЭлементКД.Заголовок = Сценарий.ЗаголовокГруппы; + ЭлементКД.Расположение = Сценарий.Расположение; + ГруппаДерева.ИндексКартинки = 1; + ГруппаДерева.Представление = ЭлементКД.Заголовок; + Если ЭлементКД.Расположение <> РасположениеПоляКомпоновкиДанных.Авто Тогда + ГруппаДерева.Представление = ГруппаДерева.Представление + " (" + Строка(ЭлементКД.Расположение) + ")"; + КонецЕсли; + КонецЕсли; + + Для Каждого СтараяСтрокаДерева Из Сценарий.СтрокиДерева Цикл + СтарыйЭлементКД = УзелКД.ПолучитьОбъектПоИдентификатору(СтараяСтрокаДерева.ИдентификаторКД); + ТаблицыПолейСкопироватьРекурсивно(УзелКД, СтараяСтрокаДерева, НоваяКоллекцияСтрокДерева, СтарыйЭлементКД, НоваяКоллекцияЭлементовКД); + СтрокиРодителя.Удалить(СтараяСтрокаДерева); + СтрокиРодителяКД.Удалить(СтарыйЭлементКД); + КонецЦикла; + + ПользовательскиеНастройкиМодифицированы = Истина; + Если РасширенныйРежим = 1 Тогда + ВариантИзменен = Истина; + КонецЕсли; + + Возврат Истина; // Продолжить сценарий. +КонецФункции + +&НаКлиенте +Функция ШагСдвинутьСтроки(ВыборПользователя, Сценарий) + ТекущийРодитель = Сценарий.ТекущийРодитель; + ТаблицаЭлемент = Элементы[Сценарий.ТаблицаИмя]; + УзелКД = ТаблицыПолейНайтиУзел(ЭтотОбъект, Сценарий.ТаблицаИмя, Неопределено); + + Если Сценарий.ТекущийРодитель = Неопределено Тогда + ТаблицаРеквизит = ЭтотОбъект[Сценарий.ТаблицаИмя]; + Если Сценарий.ТаблицаИмя = "Отборы" И Не РежимИзмененияУзлаВарианта Тогда + ТекущийРодитель = ТаблицаРеквизит.ПолучитьЭлементы()[1]; + Иначе + ТекущийРодитель = ТаблицаРеквизит; + КонецЕсли; + ТекущийРодительКД = УзелКД; + ИначеЕсли ТипЗнч(ТекущийРодитель.ИдентификаторКД) <> Тип("ИдентификаторКомпоновкиДанных") Тогда + ТекущийРодительКД = УзелКД; + Иначе + ТекущийРодительКД = УзелКД.ПолучитьОбъектПоИдентификатору(ТекущийРодитель.ИдентификаторКД); + КонецЕсли; + СтрокиРодителя = ТекущийРодитель.ПолучитьЭлементы(); + СтрокиРодителяКД = ПолучитьЭлементыКД(УзелКД, ТекущийРодительКД); + + ВерхняяГраницаСтрок = СтрокиРодителя.Количество() - 1; + ВыделеноСтрок = Сценарий.СтрокиДерева.Количество(); + + // Массив выделенных строк на встречу движению: + // Если двигаем строки в "+", то обходим "от большего к меньшему"; + // Если в "-", то обходим "от меньшего к большему". + ДвигаемсяПоВозрастанию = (Сценарий.Направление < 0); + + Для Номер = 1 По ВыделеноСтрок Цикл + Если ДвигаемсяПоВозрастанию Тогда + ИндексВМассиве = Номер - 1; + Иначе + ИндексВМассиве = ВыделеноСтрок - Номер; + КонецЕсли; + + СтрокаДерева = Сценарий.СтрокиДерева[ИндексВМассиве]; + ЭлементКД = УзелКД.ПолучитьОбъектПоИдентификатору(СтрокаДерева.ИдентификаторКД); + + ИндексВДереве = СтрокиРодителя.Индекс(СтрокаДерева); + ГдеОкажетсяСтрока = ИндексВДереве + Сценарий.Направление; + Если ГдеОкажетсяСтрока < 0 Тогда // Перемещаем "в конец". + СтрокиРодителя.Сдвинуть(ИндексВДереве, ВерхняяГраницаСтрок - ИндексВДереве); + СтрокиРодителяКД.Сдвинуть(ЭлементКД, ВерхняяГраницаСтрок - ИндексВДереве); + ИначеЕсли ГдеОкажетсяСтрока > ВерхняяГраницаСтрок Тогда // Перемещаем "в начало". + СтрокиРодителя.Сдвинуть(ИндексВДереве, -ИндексВДереве); + СтрокиРодителяКД.Сдвинуть(ЭлементКД, -ИндексВДереве); + Иначе + СтрокиРодителя.Сдвинуть(ИндексВДереве, Сценарий.Направление); + СтрокиРодителяКД.Сдвинуть(ЭлементКД, Сценарий.Направление); + КонецЕсли; + КонецЦикла; + + ПользовательскиеНастройкиМодифицированы = Истина; + Если РасширенныйРежим = 1 Тогда + ВариантИзменен = Истина; + КонецЕсли; + + Возврат Истина; // Продолжить сценарий. +КонецФункции + +&НаКлиенте +Функция ШагУдалитьСтроки(ВыборПользователя, Сценарий) + + ТаблицаРеквизит = ЭтотОбъект[Сценарий.ТаблицаИмя]; + + Для Каждого СтрокаТаблицы Из Сценарий.СтрокиДерева Цикл + + УзелКД = ТаблицыПолейНайтиУзел(ЭтотОбъект, Сценарий.ТаблицаИмя, СтрокаТаблицы); + ЭлементКД = УзелКД.ПолучитьОбъектПоИдентификатору(СтрокаТаблицы.ИдентификаторКД); + + СтрокаРодитель = СтрокаТаблицы.ПолучитьРодителя(); + РодительКД = НайтиОбъектКД(УзелКД, СтрокаРодитель); + + ОткудаУдалить = ПолучитьЭлементы(ТаблицаРеквизит, СтрокаРодитель); + ОткудаУдалить.Удалить(СтрокаТаблицы); + + ОткудаУдалитьКД = ПолучитьЭлементыКД(УзелКД, РодительКД); + ОткудаУдалитьКД.Удалить(ЭлементКД); + + КонецЦикла; + + ПользовательскиеНастройкиМодифицированы = Истина; + Если РасширенныйРежим = 1 Тогда + ВариантИзменен = Истина; + КонецЕсли; + + Возврат Истина; // Продолжить сценарий. +КонецФункции + +//////////////////////////////////////////////////////////////////////////////// +// Клиент - Параметры и отборы. + +&НаКлиенте +Процедура ОтборыПоказатьВыборПериода(СтрокаТаблицы) + Контекст = Новый Структура; + Контекст.Вставить("СтрокаИдентификатор", СтрокаТаблицы.ПолучитьИдентификатор()); + Обработчик = Новый ОписаниеОповещения("ОтборыЗавершениеВыбораПериода", ЭтотОбъект, Контекст); + Диалог = Новый ДиалогРедактированияСтандартногоПериода; + Диалог.Период = СтрокаТаблицы.Значение; + Диалог.Показать(Обработчик); +КонецПроцедуры + +&НаКлиенте +Процедура ОтборыЗавершениеВыбораПериода(Период, Контекст) Экспорт + Если Период = Неопределено Тогда + Возврат; + КонецЕсли; + + СтрокаТаблицы = Отборы.НайтиПоИдентификатору(Контекст.СтрокаИдентификатор); + Если СтрокаТаблицы = Неопределено Тогда + Возврат; + КонецЕсли; + + УзелКД = ТаблицыПолейНайтиУзел(ЭтотОбъект, "Отборы", СтрокаТаблицы); + ЭлементКД = УзелКД.ПолучитьОбъектПоИдентификатору(СтрокаТаблицы.ИдентификаторКД); + Если ЭлементКД = Неопределено Тогда + Возврат; + КонецЕсли; + + СтрокаТаблицы.Значение = Период; + СтрокаТаблицы.Условие = ОтчетыКлиентСервер.ПолучитьВидСтандартногоПериода(СтрокаТаблицы.Значение); + + Если СтрокаТаблицы.ЭтоПараметр Тогда + ЭлементКД.Значение = СтрокаТаблицы.Значение; + Иначе + ЭлементКД.ПравоеЗначение = СтрокаТаблицы.Значение; + КонецЕсли; + + ПользовательскиеНастройкиМодифицированы = Истина; + Если РасширенныйРежим = 1 Тогда + ВариантИзменен = Истина; + КонецЕсли; +КонецПроцедуры + +&НаКлиенте +Процедура ОтборыПоказатьВыборСсылки(СтрокаТаблицы, СтандартнаяОбработка) + ПараметрыФормы = ПараметрыВыбораОтбора(СтрокаТаблицы); + Если ПараметрыФормы = Неопределено Тогда + СтандартнаяОбработка = Истина; + Возврат; + КонецЕсли; + + Анализ = ОтчетыКлиентСервер.АнализТипов(ПараметрыФормы.ОписаниеТипов, Ложь); + Если Не Анализ.СодержитОбъектныеТипы Тогда + СтандартнаяОбработка = Истина; + Возврат; + КонецЕсли; + + ПараметрыФормы.Вставить("МножественныйВыбор", Ложь); + ПараметрыФормы.Вставить("Отмеченные", ОтчетыКлиентСервер.ЗначенияСписком(СтрокаТаблицы.Значение)); + ПараметрыФормы.Вставить("Представление", СтрокаТаблицы.Представление); + + Контекст = Новый Структура; + Контекст.Вставить("СтрокаИдентификатор", СтрокаТаблицы.ПолучитьИдентификатор()); + Контекст.Вставить("ПараметрыФормы", ПараметрыФормы); + + Обработчик = Новый ОписаниеОповещения("ОтборыПоказатьВыборСсылкиПослеВыбораТипа", ЭтотОбъект, Контекст); + + // Полное имя формы выбора. + // Свойство "ФормаВыбора" недоступно на клиенте даже для чтения, + // поэтому для хранения предустановленных имен форм выбора используется коллекция БыстрыйПоискИменОбъектовМетаданных. + Если ЗначениеЗаполнено(ПараметрыФормы.ПутьКФорме) Тогда + ВыполнитьОбработкуОповещения(Обработчик, ПараметрыФормы.ПутьКФорме); + Иначе + // Выбор типа из списка. + СписокВыбора = Новый СписокЗначений; + СписокВыбора.ЗагрузитьЗначения(Анализ.ОбъектныеТипы); + + Если СписокВыбора.Количество() = 1 Тогда // Один тип - выбор не требуется. + ВыполнитьОбработкуОповещения(Обработчик, СписокВыбора[0]); + Иначе + ПоказатьВыборИзСписка(Обработчик, СписокВыбора); + КонецЕсли; + КонецЕсли; +КонецПроцедуры + +&НаКлиенте +Процедура ОтборыПоказатьВыборСсылкиПослеВыбораТипа(ПутьКФормеИлиЭлементСписка, Контекст) Экспорт + Если ТипЗнч(ПутьКФормеИлиЭлементСписка) = Тип("Строка") Тогда + ПутьКФорме = ПутьКФормеИлиЭлементСписка; + ИначеЕсли ТипЗнч(ПутьКФормеИлиЭлементСписка) = Тип("ЭлементСпискаЗначений") Тогда + Тип = ПутьКФормеИлиЭлементСписка.Значение; + ИмяОбъектаМетаданных = БыстрыйПоискИменОбъектовМетаданных.Получить(Тип); + Если Контекст.ПараметрыФормы.ВыборГруппИЭлементов = ГруппыИЭлементы.Группы Тогда + ВидОбъектаМетаданных = ВРег(СтрРазделить(ИмяОбъектаМетаданных, ".")[0]); + Если ВидОбъектаМетаданных = "СПРАВОЧНИК" Или ВидОбъектаМетаданных = "ПЛАНВИДОВХАРАКТЕРИСТИК" Тогда + ПутьКФорме = ИмяОбъектаМетаданных + ".ФормаВыбораГруппы"; + Иначе + ПутьКФорме = ИмяОбъектаМетаданных + ".ФормаВыбора"; + КонецЕсли; + Иначе + ПутьКФорме = ИмяОбъектаМетаданных + ".ФормаВыбора"; + КонецЕсли; + Иначе + Возврат; + КонецЕсли; + + Обработчик = Новый ОписаниеОповещения("ОтборыЗавершениеВыбораСсылки", ЭтотОбъект, Контекст); + + Блокировать = РежимОткрытияОкнаФормы.БлокироватьОкноВладельца; + + ОткрытьФорму(ПутьКФорме, Контекст.ПараметрыФормы, ЭтотОбъект, , , , Обработчик, Блокировать); +КонецПроцедуры + +&НаКлиенте +Процедура ОтборыЗавершениеВыбораСсылки(Ссылка, Контекст) Экспорт + Если Не Контекст.ПараметрыФормы.ОписаниеТипов.СодержитТип(ТипЗнч(Ссылка)) Или Не ЗначениеЗаполнено(Ссылка) Тогда + Возврат; + КонецЕсли; + + СтрокаТаблицы = Отборы.НайтиПоИдентификатору(Контекст.СтрокаИдентификатор); + Если СтрокаТаблицы = Неопределено Тогда + Возврат; + КонецЕсли; + + УзелКД = ТаблицыПолейНайтиУзел(ЭтотОбъект, "Отборы", СтрокаТаблицы); + ЭлементКД = УзелКД.ПолучитьОбъектПоИдентификатору(СтрокаТаблицы.ИдентификаторКД); + Если ЭлементКД = Неопределено Тогда + Возврат; + КонецЕсли; + + СтрокаТаблицы.Значение = Ссылка; + + Если СтрокаТаблицы.ЭтоПараметр Тогда + ЭлементКД.Значение = Ссылка; + Иначе + ЭлементКД.ПравоеЗначение = Ссылка; + КонецЕсли; + + ПользовательскиеНастройкиМодифицированы = Истина; + Если РасширенныйРежим = 1 Тогда + ВариантИзменен = Истина; + КонецЕсли; +КонецПроцедуры + +&НаКлиенте +Процедура ОтборыПоказатьСписокСФлажками(СтрокаТаблицы) + ПараметрыФормы = ПараметрыВыбораОтбора(СтрокаТаблицы); + Если ПараметрыФормы = Неопределено Тогда + Возврат; + КонецЕсли; + + ПараметрыОбработчика = Новый Структура; + ПараметрыОбработчика.Вставить("СтрокаИдентификатор", СтрокаТаблицы.ПолучитьИдентификатор()); + Обработчик = Новый ОписаниеОповещения("ОтборыЗавершениеВводаСпискомСФлажками", ЭтотОбъект, ПараметрыОбработчика); + + ПараметрыФормы.Вставить("Отмеченные", ОтчетыКлиентСервер.ЗначенияСписком(СтрокаТаблицы.Значение)); + ПараметрыФормы.Вставить("Представление", СтрокаТаблицы.Представление); + + Блокировать = РежимОткрытияОкнаФормы.БлокироватьОкноВладельца; + + ОткрытьФорму("ОбщаяФорма.ВводЗначенийСпискомСФлажками", ПараметрыФормы, ЭтотОбъект, , , , Обработчик, Блокировать); +КонецПроцедуры + +&НаКлиенте +Функция ПараметрыВыбораОтбора(СтрокаТаблицы) + ИдентификаторЭлемента = СтрокаТаблицы.ПолучитьИдентификатор(); + + УзелКД = ТаблицыПолейНайтиУзел(ЭтотОбъект, "Отборы", СтрокаТаблицы); + ЭлементКД = УзелКД.ПолучитьОбъектПоИдентификатору(СтрокаТаблицы.ИдентификаторКД); + Если ЭлементКД = Неопределено Тогда + Возврат Неопределено; + КонецЕсли; + + Результат = Новый Структура("ЗначенияДляВыбора, ОграничиватьВыборУказаннымиЗначениями, ОписаниеТипов"); + + ДополнительныеНастройки = СтрокаТаблицы.Дополнительно; + ЗаполнитьЗначенияСвойств(Результат, ДополнительныеНастройки); + + ВыборГруппИЭлементов = ОтчетыКлиентСервер.ПривестиЗначениеКТипуГруппыИЭлементы( + СтрокаТаблицы.Условие, + СтрокаТаблицы.ВыборГруппИЭлементов); + + // Включенный флажок ВводСписком означает что параметры готовятся для промежуточной формы ВводЗначенийСпискомСФлажками. + Результат.Вставить("ВводСписком", СтрокаТаблицы.ВводСписком); + + // Стандартные параметры формы. + Результат.Вставить("ЗакрыватьПриВыборе", Истина); + Результат.Вставить("ЗакрыватьПриЗакрытииВладельца", Истина); + Результат.Вставить("Отбор", Новый Структура); + // Стандартные параметры формы выбора (см. Расширение управляемой формы для динамического списка). + Результат.Вставить("ВыборГруппИЭлементов", ВыборГруппИЭлементов); + Результат.Вставить("МножественныйВыбор", Ложь); + Результат.Вставить("РежимВыбора", Истина); + // Предполагаемые реквизиты. + Результат.Вставить("РежимОткрытияОкна", РежимОткрытияОкнаФормы.БлокироватьОкноВладельца); + Результат.Вставить("РазрешитьНачалоПеретаскивания", Ложь); + + Результат.Вставить("ПутьКФорме", ДополнительныеНастройки.ФормаВыбора); + + Результат.Вставить("ПараметрыВыбора", Новый Массив); + Результат.Вставить("КлючУникальности", ЭлементКД.ИдентификаторПользовательскойНастройки); + + // Фиксированные параметры выбора и связи от скрытых ведущих (предопределенные в текущем контексте). + Для Каждого ПараметрВыбора Из ДополнительныеНастройки.ПараметрыВыбора Цикл + Если ПустаяСтрока(ПараметрВыбора.Имя) Тогда + Продолжить; + КонецЕсли; + Если Результат.ВводСписком Тогда + Результат.ПараметрыВыбора.Добавить(ПараметрВыбора); + Иначе + Если ВРег(Лев(ПараметрВыбора.Имя, 6)) = ВРег("Отбор.") Тогда + Результат.Отбор.Вставить(Сред(ПараметрВыбора.Имя, 7), ПараметрВыбора.Значение); + Иначе + Результат.Вставить(ПараметрВыбора.Имя, ПараметрВыбора.Значение); + КонецЕсли; + КонецЕсли; + КонецЦикла; + + // Динамические связи от ведущих. + Связи = ОтключаемыеСвязи.НайтиСтроки(Новый Структура("ПодчиненныйИдентификаторВФорме", ИдентификаторЭлемента)); + Для Каждого Связь Из Связи Цикл + СтрокаВедущий = Отборы.НайтиПоИдентификатору(Связь.ВедущийИдентификаторВФорме); + Если СтрокаВедущий = Неопределено Тогда + Продолжить; + КонецЕсли; + Если Не СтрокаВедущий.Использование Тогда + Продолжить; + КонецЕсли; + ЗначениеВедущего = СтрокаВедущий.Значение; + ТипЗначенияВедущего = ТипЗнч(ЗначениеВедущего); + Если Связь.ТипСвязи = "ПоТипу" Тогда + Если СтрокаВедущий.Условие <> ВидСравненияКомпоновкиДанных.Равно Тогда + Продолжить; + КонецЕсли; + Результат.Вставить("ОграничениеТипа", ТипЗначенияВедущего); + Если Результат.ОписаниеТипов.СодержитТип(ТипЗначенияВедущего) Тогда + Вычитаемые = Результат.ОписаниеТипов.Типы(); + Вычитаемые.Удалить(Вычитаемые.Найти(ТипЗначенияВедущего)); + Результат.ОписаниеТипов = Новый ОписаниеТипов(Результат.ОписаниеТипов, , Вычитаемые); + КонецЕсли; + ИначеЕсли Связь.ТипСвязи = "ПоМетаданным" Или Связь.ТипСвязи = "ПараметровВыбора" Тогда + Если Связь.ТипСвязи = "ПоМетаданным" И Не Связь.ВедущийТип.СодержитТип(ТипЗначенияВедущего) Тогда + Продолжить; + КонецЕсли; + Если Результат.ВводСписком Тогда + Результат.ПараметрыВыбора.Добавить(Новый ПараметрВыбора(Связь.ПодчиненныйИмяПараметра, ЗначениеВедущего)); + Иначе + Если ВРег(Лев(Связь.ПодчиненныйИмяПараметра, 6)) = ВРег("Отбор.") Тогда + Результат.Отбор.Вставить(Сред(Связь.ПодчиненныйИмяПараметра, 7), ЗначениеВедущего); + Иначе + Результат.Вставить(Связь.ПодчиненныйИмяПараметра, ЗначениеВедущего); + КонецЕсли; + КонецЕсли; + КонецЕсли; + КонецЦикла; + + Возврат Результат; +КонецФункции + +&НаКлиенте +Процедура ОтборыЗавершениеВводаСпискомСФлажками(РезультатВыбора, Контекст) Экспорт + Если ТипЗнч(РезультатВыбора) <> Тип("СписокЗначений") Тогда + Возврат; + КонецЕсли; + + СтрокаТаблицы = Отборы.НайтиПоИдентификатору(Контекст.СтрокаИдентификатор); + Если СтрокаТаблицы = Неопределено Тогда + Возврат; + КонецЕсли; + + УзелКД = ТаблицыПолейНайтиУзел(ЭтотОбъект, "Отборы", СтрокаТаблицы); + ЭлементКД = УзелКД.ПолучитьОбъектПоИдентификатору(СтрокаТаблицы.ИдентификаторКД); + Если ЭлементКД = Неопределено Тогда + Возврат; + КонецЕсли; + + ДополнительныеНастройки = СтрокаТаблицы.Дополнительно; + + // Загрузка выбранных значений в 2 списка. + СписокЗначенийВСКД = Новый СписокЗначений; + Если Не ДополнительныеНастройки.ОграничиватьВыборУказаннымиЗначениями Тогда + ДополнительныеНастройки.ЗначенияДляВыбора = Новый СписокЗначений; + КонецЕсли; + Для Каждого ЭлементСпискаВФорме Из РезультатВыбора Цикл + ЗначениеВФорме = ЭлементСпискаВФорме.Значение; + Если Не ДополнительныеНастройки.ОграничиватьВыборУказаннымиЗначениями Тогда + Если ДополнительныеНастройки.ЗначенияДляВыбора.НайтиПоЗначению(ЗначениеВФорме) <> Неопределено Тогда + Продолжить; + КонецЕсли; + ЗаполнитьЗначенияСвойств(ДополнительныеНастройки.ЗначенияДляВыбора.Добавить(), ЭлементСпискаВФорме); + КонецЕсли; + Если ЭлементСпискаВФорме.Пометка Тогда + ОтчетыКлиентСервер.ДобавитьУникальноеЗначениеВСписок(СписокЗначенийВСКД, ЗначениеВФорме, ЭлементСпискаВФорме.Представление, Истина); + КонецЕсли; + КонецЦикла; + Если ТипЗнч(ЭлементКД) = Тип("ЭлементОтбораКомпоновкиДанных") Тогда + ЭлементКД.ПравоеЗначение = СписокЗначенийВСКД; + Иначе + ЭлементКД.Значение = СписокЗначенийВСКД; + КонецЕсли; + СтрокаТаблицы.Значение = СписокЗначенийВСКД; + + // Включение флажка Использование. + ЭлементКД.Использование = Истина; + СтрокаТаблицы.Использование = Истина; + + ПользовательскиеНастройкиМодифицированы = Истина; + Если РасширенныйРежим = 1 Тогда + ВариантИзменен = Истина; + КонецЕсли; +КонецПроцедуры + +&НаКлиенте +Процедура ОтборыВыбратьВидСравнения(СтрокаТаблицы) + Если СтрокаТаблицы.ЭтоПараметр Тогда + Возврат; + КонецЕсли; + + Контекст = Новый Структура; + Контекст.Вставить("СтрокаИдентификатор", СтрокаТаблицы.ПолучитьИдентификатор()); + Обработчик = Новый ОписаниеОповещения("ОтборыЗавершениеВыбораВидаСравнения", ЭтотОбъект, Контекст); + + ИнформацияОТипах = ОтчетыКлиентСервер.АнализТипов(СтрокаТаблицы.ТипЗначения, Ложь); + + Список = Новый СписокЗначений; + + ФиксированныйСписок = ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(СтрокаТаблицы.Дополнительно, "ОграничиватьВыборУказаннымиЗначениями", Ложь); + Если ИнформацияОТипах.ОграниченнойДлины Или ФиксированныйСписок Тогда + + Список.Добавить(ВидСравненияКомпоновкиДанных.Равно); + Список.Добавить(ВидСравненияКомпоновкиДанных.НеРавно); + + Список.Добавить(ВидСравненияКомпоновкиДанных.ВСписке); + Список.Добавить(ВидСравненияКомпоновкиДанных.НеВСписке); + + КонецЕсли; + + Если ИнформацияОТипах.ОграниченнойДлины + И ИнформацияОТипах.СодержитОбъектныеТипы Тогда + + Список.Добавить(ВидСравненияКомпоновкиДанных.ВСпискеПоИерархии); // НСтр("ru = 'В списке включая подчиненные'") + Список.Добавить(ВидСравненияКомпоновкиДанных.НеВСпискеПоИерархии); // НСтр("ru = 'Не в списке включая подчиненные'"). + + Список.Добавить(ВидСравненияКомпоновкиДанных.ВИерархии); // НСтр("ru = 'В группе'") + Список.Добавить(ВидСравненияКомпоновкиДанных.НеВИерархии); // НСтр("ru = 'Не в группе'") + + КонецЕсли; + + Если ИнформацияОТипах.ОграниченнойДлины + И ИнформацияОТипах.КоличествоПримитивныхТипов > 0 Тогда + + Список.Добавить(ВидСравненияКомпоновкиДанных.Меньше); + Список.Добавить(ВидСравненияКомпоновкиДанных.МеньшеИлиРавно); + + Список.Добавить(ВидСравненияКомпоновкиДанных.Больше); + Список.Добавить(ВидСравненияКомпоновкиДанных.БольшеИлиРавно); + + КонецЕсли; + + Если Не ФиксированныйСписок И ИнформацияОТипах.СодержитТипСтрока Тогда + + Список.Добавить(ВидСравненияКомпоновкиДанных.Содержит); + Список.Добавить(ВидСравненияКомпоновкиДанных.НеСодержит); + + Список.Добавить(ВидСравненияКомпоновкиДанных.Подобно); + Список.Добавить(ВидСравненияКомпоновкиДанных.НеПодобно); + + Список.Добавить(ВидСравненияКомпоновкиДанных.НачинаетсяС); + Список.Добавить(ВидСравненияКомпоновкиДанных.НеНачинаетсяС); + + КонецЕсли; + + Если ИнформацияОТипах.ОграниченнойДлины Или ФиксированныйСписок Тогда + + Список.Добавить(ВидСравненияКомпоновкиДанных.Заполнено); + Список.Добавить(ВидСравненияКомпоновкиДанных.НеЗаполнено); + + КонецЕсли; + + ПоказатьВыборИзМеню(Обработчик, Список, Элементы.Отборы); + +КонецПроцедуры + +&НаКлиенте +Процедура ОтборыЗавершениеВыбораВидаСравнения(Результат, Контекст) Экспорт + Если Результат = Неопределено Тогда + Возврат; + КонецЕсли; + + СтрокаТаблицы = Отборы.НайтиПоИдентификатору(Контекст.СтрокаИдентификатор); + Если СтрокаТаблицы = Неопределено Тогда + Возврат; + КонецЕсли; + + УзелКД = ТаблицыПолейНайтиУзел(ЭтотОбъект, "Отборы", СтрокаТаблицы); + ЭлементКД = УзелКД.ПолучитьОбъектПоИдентификатору(СтрокаТаблицы.ИдентификаторКД); + Если ЭлементКД = Неопределено Тогда + Возврат; + КонецЕсли; + + СтрокаТаблицы.Условие = Результат.Значение; + ЭлементКД.ВидСравнения = Результат.Значение; + + БылВводСписком = СтрокаТаблицы.ВводСписком; + СталВводСписком = Ложь; + Если СтрокаТаблицы.Условие = ВидСравненияКомпоновкиДанных.ВСписке + Или СтрокаТаблицы.Условие = ВидСравненияКомпоновкиДанных.ВСпискеПоИерархии + Или СтрокаТаблицы.Условие = ВидСравненияКомпоновкиДанных.НеВСписке + Или СтрокаТаблицы.Условие = ВидСравненияКомпоновкиДанных.НеВСпискеПоИерархии Тогда + Элементы.ОтборыЗначение.ВыборГруппИЭлементов = ГруппыИЭлементы.ГруппыИЭлементы; + СталВводСписком = Истина; + ИначеЕсли СтрокаТаблицы.Условие = ВидСравненияКомпоновкиДанных.ВИерархии + Или СтрокаТаблицы.Условие = ВидСравненияКомпоновкиДанных.НеВИерархии Тогда + Элементы.ОтборыЗначение.ВыборГруппИЭлементов = ГруппыИЭлементы.Группы; + Иначе + Элементы.ОтборыЗначение.ВыборГруппИЭлементов = СтрокаТаблицы.ВыборГруппИЭлементов; + КонецЕсли; + + Если БылВводСписком <> СталВводСписком Тогда + Если БылВводСписком Тогда + Если ТипЗнч(ЭлементКД.ПравоеЗначение) = Тип("СписокЗначений") + И ЭлементКД.ПравоеЗначение.Количество() > 0 Тогда + ЭлементКД.ПравоеЗначение = ЭлементКД.ПравоеЗначение[0].Значение; + Иначе + ЭлементКД.ПравоеЗначение = Неопределено; + КонецЕсли; + Иначе + ЭлементКД.ПравоеЗначение = ОтчетыКлиентСервер.ЗначенияСписком(ЭлементКД.ПравоеЗначение); + КонецЕсли; + Обновить(); // Серьезные изменения, для учета всех связей и особенностей вывода следует перерисовать полностью. + КонецЕсли; + + УстановитьМодифицированность(); +КонецПроцедуры + +&НаКлиенте +Процедура ОтборыВыбратьЗначениеИзСписка(СтрокаТаблицы) + Если СтрокаТаблицы.Дополнительно = Неопределено Тогда + Возврат; + КонецЕсли; + ЗначенияДляВыбора = ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(СтрокаТаблицы.Дополнительно, "ЗначенияДляВыбора"); + Если ТипЗнч(ЗначенияДляВыбора) <> Тип("СписокЗначений") Или ЗначенияДляВыбора.Количество() = 0 Тогда + Возврат; + КонецЕсли; + Контекст = Новый Структура; + Контекст.Вставить("СтрокаИдентификатор", СтрокаТаблицы.ПолучитьИдентификатор()); + Обработчик = Новый ОписаниеОповещения("ОтборыЗавершениеВыбораЗначенияИзСписка", ЭтотОбъект, Контекст); + ПоказатьВыборИзМеню(Обработчик, ЗначенияДляВыбора, Элементы.Отборы); +КонецПроцедуры + +&НаКлиенте +Процедура ОтборыЗавершениеВыбораЗначенияИзСписка(Результат, Контекст) Экспорт + Если Результат = Неопределено Тогда + Возврат; + КонецЕсли; + + СтрокаТаблицы = Отборы.НайтиПоИдентификатору(Контекст.СтрокаИдентификатор); + Если СтрокаТаблицы = Неопределено Тогда + Возврат; + КонецЕсли; + + УзелКД = ТаблицыПолейНайтиУзел(ЭтотОбъект, "Отборы", СтрокаТаблицы); + ЭлементКД = УзелКД.ПолучитьОбъектПоИдентификатору(СтрокаТаблицы.ИдентификаторКД); + Если ЭлементКД = Неопределено Тогда + Возврат; + КонецЕсли; + + // Отражение изменений в значении. + Если ТипЗнч(ЭлементКД) = Тип("ЭлементОтбораКомпоновкиДанных") Тогда + ЭлементКД.ПравоеЗначение = Результат.Значение; + Иначе + ЭлементКД.Значение = Результат.Значение; + КонецЕсли; + СтрокаТаблицы.ПредставлениеЗначения = Результат.Представление; + + // Включение флажка Использование. + ЭлементКД.Использование = Истина; + СтрокаТаблицы.Использование = Истина; + + ПользовательскиеНастройкиМодифицированы = Истина; + Если РасширенныйРежим = 1 Тогда + ВариантИзменен = Истина; + КонецЕсли; +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// Клиент - Структура варианта. + +&НаКлиенте +Процедура СтруктураВариантаИзменитьУзел(ТаблицаИмя, СтрокаИдентификатор, СтрокаТаблицы, ИмяСтраницы) + Контекст = Новый Структура("ТаблицаИмя, СтрокаИдентификатор", ТаблицаИмя, СтрокаИдентификатор); + Обработчик = Новый ОписаниеОповещения("СтруктураВариантаИзменитьУзелЗавершение", ЭтотОбъект, Контекст); + + ШаблонЗаголовка = НСтр("ru = 'Настройка %1 отчета ""%2""'"); + Если СтрокаТаблицы.Тип = "Диаграмма" Тогда + ПредставлениеУзла = НСтр("ru = 'диаграммы'"); + Иначе + ПредставлениеУзла = НСтр("ru = 'группировки'"); + КонецЕсли; + Если ЗначениеЗаполнено(СтрокаТаблицы.Заголовок) Тогда + ПредставлениеУзла = ПредставлениеУзла + " """ + СтрокаТаблицы.Заголовок + """"; + КонецЕсли; + + УзелКД = ТаблицыПолейНайтиУзел(ЭтотОбъект, ТаблицаИмя); + ЭлементКД = НайтиОбъектКД(УзелКД, СтрокаТаблицы); + ПолныйПуть = ОтчетыКлиентСервер.ПолныйПутьКЭлементу(Отчет.КомпоновщикНастроек.Настройки, ЭлементКД); + Если ПолныйПуть = Неопределено Тогда + Возврат; + КонецЕсли; + + ПараметрыФормы = Новый Структура; + ПараметрыФормы.Вставить("КлючВарианта", Строка(КлючТекущегоВарианта)); + ПараметрыФормы.Вставить("Вариант", Отчет.КомпоновщикНастроек.Настройки); + ПараметрыФормы.Вставить("ПользовательскиеНастройки", Отчет.КомпоновщикНастроек.ПользовательскиеНастройки); + ПараметрыФормы.Вставить("НастройкиОтчета", НастройкиОтчета); + ПараметрыФормы.Вставить("ВариантНаименование", ВариантНаименование); + ПараметрыФормы.Вставить("ИдентификаторТекущегоУзлаКД", СтрокаТаблицы.ИдентификаторКД); + ПараметрыФормы.Вставить("ТипТекущегоУзлаКД", СтрокаТаблицы.Тип); + ПараметрыФормы.Вставить("ПолныйПутьТекущегоУзлаКД", ПолныйПуть); + ПараметрыФормы.Вставить("Заголовок", СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонЗаголовка, ПредставлениеУзла, ВариантНаименование)); + Если ИмяСтраницы <> Неопределено Тогда + ПараметрыФормы.Вставить("ИмяСтраницы", ИмяСтраницы); + КонецЕсли; + + Режим = РежимОткрытияОкнаФормы.БлокироватьОкноВладельца; + + ВыполнятьЗамеры = НастройкиОтчета.ВыполнятьЗамеры И ЗначениеЗаполнено(НастройкиОтчета.КлючЗамеров); + Если ВыполнятьЗамеры Тогда + ИдентификаторЗамера = Новый УникальныйИдентификатор; + МодульОценкаПроизводительностиКлиентСервер = ОбщегоНазначенияКлиент.ОбщийМодуль("ОценкаПроизводительностиКлиентСервер"); + МодульОценкаПроизводительностиКлиентСервер.НачатьРучнойЗамерВремени( + НастройкиОтчета.КлючЗамеров + ".Настройки", + ИдентификаторЗамера, + НастройкиОтчета.ПрефиксЗамеров); + КонецЕсли; + + ОткрытьФорму(НастройкиОтчета.ПолноеИмя + ".ФормаНастроек", ПараметрыФормы, ЭтотОбъект, , , , Обработчик, Режим); +КонецПроцедуры + +&НаКлиенте +Процедура СтруктураВариантаИзменитьУзелЗавершение(Результат, Контекст) Экспорт + Если Результат = Неопределено Или Результат = КодВозвратаДиалога.Отмена Тогда + Возврат; + КонецЕсли; + РезультатКлиента = БыстрыеНастройкиЗаполнить(Результат); + ПоказатьРезультатЗаполненияНастроек(РезультатКлиента); +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// Клиент - Таблицы полей (универсальные точки входа). + +&НаКлиенте +Процедура ТаблицыПолейИзменитьУровеньДоступа(ТаблицаИмя, СтрокаИдентификатор, ПоказыватьРежимыВвода, ПоказыватьРежимыФлажков) + Контекст = Новый Структура("ТаблицаИмя, СтрокаИдентификатор", ТаблицаИмя, СтрокаИдентификатор); + Обработчик = Новый ОписаниеОповещения("ТаблицыПолейИзменитьУровеньДоступаЗавершение", ЭтотОбъект, Контекст); + + Список = Новый СписокЗначений; + Если ПоказыватьРежимыВвода Тогда + Список.Добавить(2, НСтр("ru = 'В шапке отчета'"), , БиблиотекаКартинок.БыстрыйДоступ); + КонецЕсли; + Если ПоказыватьРежимыФлажков Тогда + Список.Добавить(1, НСтр("ru = 'Только флажок в шапке отчета'"), , БиблиотекаКартинок.БыстрыйДоступСФлажком); + КонецЕсли; + Если ПоказыватьРежимыВвода Тогда + Список.Добавить(4, НСтр("ru = 'В настройках отчета'"), , БиблиотекаКартинок.Реквизит); + КонецЕсли; + Если ПоказыватьРежимыФлажков Тогда + Список.Добавить(3, НСтр("ru = 'Только флажок в настройках отчета'"), , БиблиотекаКартинок.ОбычныйДоступСФлажком); + КонецЕсли; + Список.Добавить(5, НСтр("ru = 'Не показывать'"), , БиблиотекаКартинок.СкрытаяНастройкаОтчета); + + ПоказатьВыборИзМеню(Обработчик, Список); +КонецПроцедуры + +&НаКлиенте +Процедура ТаблицыПолейИзменитьУровеньДоступаЗавершение(Результат, Контекст) Экспорт + Если Результат = Неопределено Или Результат = КодВозвратаДиалога.Отмена Тогда + Возврат; + КонецЕсли; + ИндексКартинкиДоступа = Результат.Значение; + + СтрокаТаблицы = ЭтотОбъект[Контекст.ТаблицаИмя].НайтиПоИдентификатору(Контекст.СтрокаИдентификатор); + Если СтрокаТаблицы = Неопределено Тогда + Возврат; + КонецЕсли; + + УзелКД = ТаблицыПолейНайтиУзел(ЭтотОбъект, Контекст.ТаблицаИмя, СтрокаТаблицы); + ЭлементКД = УзелКД.ПолучитьОбъектПоИдентификатору(СтрокаТаблицы.ИдентификаторКД); + Если ЭлементКД = Неопределено Тогда + Возврат; + КонецЕсли; + + ТаблицыПолейУстановитьУровеньДоступа(Контекст.ТаблицаИмя, СтрокаТаблицы, ЭлементКД, ИндексКартинкиДоступа); + + УстановитьМодифицированность(); +КонецПроцедуры + +&НаКлиенте +Процедура ТаблицыПолейУстановитьУровеньДоступа(ИмяТаблицы, СтрокаТаблицы, ЭлементКД, ИндексКартинкиДоступа) + Если ИндексКартинкиДоступа = Неопределено Тогда + ИндексКартинкиДоступа = СтрокаТаблицы.ИндексКартинкиДоступа; + Иначе + СтрокаТаблицы.ИндексКартинкиДоступа = ИндексКартинкиДоступа; + КонецЕсли; + + Если ИндексКартинкиДоступа = 1 Или ИндексКартинкиДоступа = 2 Тогда + ЭлементКД.РежимОтображения = РежимОтображенияЭлементаНастройкиКомпоновкиДанных.БыстрыйДоступ; + ИначеЕсли ИндексКартинкиДоступа = 3 Или ИндексКартинкиДоступа = 4 Тогда + ЭлементКД.РежимОтображения = РежимОтображенияЭлементаНастройкиКомпоновкиДанных.Обычный; + Иначе + ЭлементКД.РежимОтображения = РежимОтображенияЭлементаНастройкиКомпоновкиДанных.Недоступный; + КонецЕсли; + + Если ИмяТаблицы = "Отборы" И Не СтрокаТаблицы.ЭтоПараметр Тогда + Если ИндексКартинкиДоступа = 1 Или ИндексКартинкиДоступа = 3 Тогда + ЭлементКД.Представление = "1"; + Иначе + ЭлементКД.Представление = ""; + КонецЕсли; + ИначеЕсли ИмяТаблицы = "Оформление" Тогда + Если СтрокаТаблицы.ЗаголовокПереопределен Тогда + ЭлементКД.Представление = СтрокаТаблицы.Заголовок; + Иначе + Если ИндексКартинкиДоступа = 1 Или ИндексКартинкиДоступа = 3 Тогда + ЭлементКД.Представление = "1"; + Иначе + ЭлементКД.Представление = ""; + КонецЕсли; + КонецЕсли; + КонецЕсли; + + Если ЭлементКД.РежимОтображения = РежимОтображенияЭлементаНастройкиКомпоновкиДанных.Недоступный Тогда + ЭлементКД.ИдентификаторПользовательскойНастройки = ""; + ИначеЕсли Не ЗначениеЗаполнено(ЭлементКД.ИдентификаторПользовательскойНастройки) Тогда + ЭлементКД.ИдентификаторПользовательскойНастройки = Новый УникальныйИдентификатор; + КонецЕсли; +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// Клиент - Оформление. + +&НаКлиенте +Процедура ОформлениеИзменитьЭлемент(ТаблицаИмя, СтрокаИдентификатор, СтрокаТаблицы) + Контекст = Новый Структура("ТаблицаИмя, СтрокаИдентификатор", ТаблицаИмя, СтрокаИдентификатор); + Обработчик = Новый ОписаниеОповещения("ОформлениеИзменитьЭлементЗавершение", ЭтотОбъект, Контекст); + + ПараметрыФормы = Новый Структура; + ПараметрыФормы.Вставить("НастройкиОтчета", НастройкиОтчета); + ПараметрыФормы.Вставить("КомпоновщикНастроек", Отчет.КомпоновщикНастроек); + ПараметрыФормы.Вставить("ИдентификаторТекущегоУзлаКД", ИдентификаторТекущегоУзлаКД); + Если СтрокаТаблицы = Неопределено Тогда + ПараметрыФормы.Вставить("ИдентификаторКД", Неопределено); + ПараметрыФормы.Вставить("Наименование", ""); + Иначе + ПараметрыФормы.Вставить("ИдентификаторКД", СтрокаТаблицы.ИдентификаторКД); + ПараметрыФормы.Вставить("Наименование", СтрокаТаблицы.Заголовок); + КонецЕсли; + ПараметрыФормы.Вставить("Заголовок", СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Элемент условного оформления отчета ""%1""'"), ВариантНаименование)); + + ОткрытьФорму("ХранилищеНастроек.ХранилищеВариантовОтчетов.Форма.ЭлементУсловногоОформленияОтчета", ПараметрыФормы, ЭтотОбъект, , , , Обработчик); +КонецПроцедуры + +&НаКлиенте +Процедура ОформлениеИзменитьЭлементЗавершение(Результат, Контекст) Экспорт + Если Результат = Неопределено Или Результат = КодВозвратаДиалога.Отмена Тогда + Возврат; + КонецЕсли; + ЭтоНовый = (Контекст.СтрокаИдентификатор = Неопределено); + + Таблица = ЭтотОбъект[Контекст.ТаблицаИмя]; + Если ЭтоНовый Тогда + РезультатВставки = ТаблицыПолейВставить(Контекст.ТаблицаИмя, Тип("ЭлементУсловногоОформленияКомпоновкиДанных"), 0, Ложь); + СтрокаТаблицы = РезультатВставки.СтрокаТаблицы; + УзелКД = РезультатВставки.УзелКД; + ЭлементКД = РезультатВставки.ЭлементКД; + СтрокаТаблицы.ИндексКартинкиДоступа = 4; + Иначе + СтрокаТаблицы = Таблица.НайтиПоИдентификатору(Контекст.СтрокаИдентификатор); + Если СтрокаТаблицы = Неопределено Тогда + Возврат; + КонецЕсли; + + УзелКД = ТаблицыПолейНайтиУзел(ЭтотОбъект, Контекст.ТаблицаИмя, СтрокаТаблицы); + ЭлементКД = УзелКД.ПолучитьОбъектПоИдентификатору(СтрокаТаблицы.ИдентификаторКД); + Если ЭлементКД = Неопределено Тогда + Возврат; + КонецЕсли; + + ЭлементКД.Отбор.Элементы.Очистить(); + ЭлементКД.Поля.Элементы.Очистить(); + КонецЕсли; + + ОтчетыКлиентСервер.ЗаполнитьСвойстваРекурсивно(УзелКД, ЭлементКД, Результат.ЭлементКД); + + СтрокаТаблицы.Использование = ЭлементКД.Использование; + СтрокаТаблицы.Заголовок = Результат.Наименование; + СтрокаТаблицы.ЗаголовокПереопределен = (СтрокаТаблицы.Заголовок <> СтрокаТаблицы.Представление); + + ТаблицыПолейУстановитьУровеньДоступа(Контекст.ТаблицаИмя, СтрокаТаблицы, ЭлементКД, Неопределено); + + Если СтрокаТаблицы.ЗаголовокПереопределен Тогда + ЭлементКД.ПредставлениеПользовательскойНастройки = СтрокаТаблицы.Заголовок; + Иначе + ЭлементКД.ПредставлениеПользовательскойНастройки = ""; + КонецЕсли; + + УстановитьМодифицированность(); +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// Клиент - Таблицы полей (функциональная часть). + +&НаКлиенте +Процедура ТаблицыПолейРазгруппировать(ТаблицаИмя) + ТаблицаЭлемент = Элементы[ТаблицаИмя]; + ТаблицаРеквизит = ЭтотОбъект[ТаблицаИмя]; + ВыделенныеСтроки = ТаблицаЭлемент.ВыделенныеСтроки; + ВыделенныеСтроки = ОбщегоНазначенияКлиентСервер.СвернутьМассив(ВыделенныеСтроки); // Для платформы. + Если ВыделенныеСтроки.Количество() <> 1 Тогда + ПоказатьПредупреждение(, НСтр("ru = 'Выберите одну группу.'")); + Возврат; + КонецЕсли; + + ГруппаДерева = ТаблицаРеквизит.НайтиПоИдентификатору(ВыделенныеСтроки[0]); + Если ГруппаДерева = Неопределено Или Не ГруппаДерева.ЭтоГруппа Тогда + ПоказатьПредупреждение(, НСтр("ru = 'Выберите группу.'")); + Возврат; + КонецЕсли; + + УзелКД = ТаблицыПолейНайтиУзел(ЭтотОбъект, ТаблицаИмя, Неопределено); + ГруппаКД = УзелКД.ПолучитьОбъектПоИдентификатору(ГруппаДерева.ИдентификаторКД); + + Родитель = ГруппаДерева.ПолучитьРодителя(); + Если Родитель = Неопределено Тогда + Родитель = ТаблицаРеквизит; + КонецЕсли; + НоваяКоллекцияСтрокДерева = Родитель.ПолучитьЭлементы(); + + РодительКД = ГруппаКД.Родитель; + Если РодительКД = Неопределено Тогда + РодительКД = УзелКД; + КонецЕсли; + НоваяКоллекцияЭлементовКД = РодительКД.Элементы; + + Индекс = НоваяКоллекцияСтрокДерева.Индекс(ГруппаДерева); + ИндексКД = НоваяКоллекцияЭлементовКД.Индекс(ГруппаКД); + + ТекущаяСтрока = Неопределено; + + СтрокиРодителя = ГруппаДерева.ПолучитьЭлементы(); + СтрокиРодителяКД = ГруппаКД.Элементы; + Для Каждого СтараяСтрокаДерева Из СтрокиРодителя Цикл + СтарыйЭлементКД = УзелКД.ПолучитьОбъектПоИдентификатору(СтараяСтрокаДерева.ИдентификаторКД); + ПеренесенныеСтроки = ТаблицыПолейСкопироватьРекурсивно(УзелКД, СтараяСтрокаДерева, НоваяКоллекцияСтрокДерева, СтарыйЭлементКД, НоваяКоллекцияЭлементовКД, Индекс, ИндексКД); + Если ТекущаяСтрока = Неопределено Тогда + ТекущаяСтрока = ПеренесенныеСтроки.СтрокаДерева; + КонецЕсли; + КонецЦикла; + + НоваяКоллекцияСтрокДерева.Удалить(ГруппаДерева); + НоваяКоллекцияЭлементовКД.Удалить(ГруппаКД); + + Если ТекущаяСтрока <> Неопределено Тогда + ТаблицаЭлемент.ТекущаяСтрока = ТекущаяСтрока.ПолучитьИдентификатор(); + КонецЕсли; + + ПользовательскиеНастройкиМодифицированы = Истина; + Если РасширенныйРежим = 1 Тогда + ВариантИзменен = Истина; + КонецЕсли; +КонецПроцедуры + +&НаКлиенте +Процедура ТаблицыПолейПередУдалением(ТаблицаИмя, Отказ) + Отказ = Истина; + СтрокаТаблицы = Элементы[ТаблицаИмя].ТекущиеДанные; + Если СтрокаТаблицы = Неопределено Тогда + Возврат; + КонецЕсли; + ТаблицыПолейУдалить(ТаблицаИмя, СтрокаТаблицы, Ложь); + УстановитьМодифицированность(); +КонецПроцедуры + +&НаКлиенте +Процедура ТаблицыПолейИзменить(ТаблицаИмя, СтрокаИдентификатор, СтрокаТаблицы) + Контекст = Новый Структура("ТаблицаИмя, СтрокаИдентификатор", ТаблицаИмя, СтрокаИдентификатор); + Обработчик = Новый ОписаниеОповещения("ТаблицыПолейИзменитьЗавершение", ЭтотОбъект, Контекст); + + Таблица = ЭтотОбъект[ТаблицаИмя]; + СтрокаТаблицы = Таблица.НайтиПоИдентификатору(СтрокаИдентификатор); + УзелКД = ТаблицыПолейНайтиУзел(ЭтотОбъект, ТаблицаИмя, СтрокаТаблицы); + ЭлементКД = УзелКД.ПолучитьОбъектПоИдентификатору(СтрокаТаблицы.ИдентификаторКД); + + ТаблицыПолейПоказатьВыборПоля(ТаблицаИмя, Обработчик, ?(ТаблицаИмя = "Отборы", ЭлементКД.ЛевоеЗначение, ЭлементКД.Поле)); +КонецПроцедуры + +&НаКлиенте +Процедура ТаблицыПолейИзменитьЗавершение(ДоступноеПолеКД, Контекст) Экспорт + Если ДоступноеПолеКД = Неопределено Тогда + Возврат; + КонецЕсли; + + СтрокаТаблицы = ЭтотОбъект[Контекст.ТаблицаИмя].НайтиПоИдентификатору(Контекст.СтрокаИдентификатор); + Если СтрокаТаблицы = Неопределено Тогда + Возврат; + КонецЕсли; + + УзелКД = ТаблицыПолейНайтиУзел(ЭтотОбъект, Контекст.ТаблицаИмя, СтрокаТаблицы); + ЭлементКД = УзелКД.ПолучитьОбъектПоИдентификатору(СтрокаТаблицы.ИдентификаторКД); + Если ЭлементКД = Неопределено Тогда + Возврат; + КонецЕсли; + + СтрокаТаблицы.Представление = ДоступноеПолеКД.Заголовок; + Если Контекст.ТаблицаИмя = "Отборы" Тогда + ЭлементКД.ЛевоеЗначение = ДоступноеПолеКД.Поле; + Если ДоступноеПолеКД.ДоступныеВидыСравнения <> Неопределено + И ДоступноеПолеКД.ДоступныеВидыСравнения.НайтиПоЗначению(ЭлементКД.ВидСравнения) = Неопределено + И ДоступноеПолеКД.ДоступныеВидыСравнения.Количество() > 0 Тогда + ЭлементКД.ВидСравнения = ДоступноеПолеКД.ДоступныеВидыСравнения[0].Значение; + КонецЕсли; + ОтчетыКлиентСервер.ПривестиЗначениеКТипу(ЭлементКД.ПравоеЗначение, ДоступноеПолеКД.ТипЗначения); + Обновить(); // Серьезные изменения, для учета всех связей и особенностей вывода следует перерисовать полностью. + Иначе + ЭлементКД.Поле = ДоступноеПолеКД.Поле; + КонецЕсли; + + УстановитьМодифицированность(); +КонецПроцедуры + +&НаКлиенте +Процедура ТаблицыПолейИзменитьИспользование(ТаблицаИмя) + Таблица = Элементы[ТаблицаИмя]; + СтрокаТаблицы = Таблица.ТекущиеДанные; + Если СтрокаТаблицы = Неопределено Тогда + Возврат; + КонецЕсли; + + Если ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(СтрокаТаблицы, "ВыводитьФлажок") = Ложь Тогда + СтрокаТаблицы.Использование = Истина; + Возврат; + КонецЕсли; + + УзелКД = ТаблицыПолейНайтиУзел(ЭтотОбъект, ТаблицаИмя, СтрокаТаблицы); + ЭлементКД = УзелКД.ПолучитьОбъектПоИдентификатору(СтрокаТаблицы.ИдентификаторКД); + Если ЭлементКД = Неопределено Тогда + Возврат; + КонецЕсли; + + ЭлементКД.Использование = СтрокаТаблицы.Использование; + + ПослеИзмененияФлажкаИспользование(ТаблицаИмя, СтрокаТаблицы, ЭлементКД); + + УстановитьМодифицированность(); +КонецПроцедуры + +&НаКлиенте +Процедура ПослеИзмененияФлажкаИспользование(ТаблицаИмя, СтрокаТаблицы, ЭлементКД) + Если ТаблицаИмя = "СоставГруппировки" Тогда + СвязаннаяТаблицаИмя = "ВыбранныеПоля"; + ИначеЕсли ТаблицаИмя = "ВыбранныеПоля" Тогда + СвязаннаяТаблицаИмя = "СоставГруппировки"; + Иначе + СвязаннаяТаблицаИмя = Неопределено; + КонецЕсли; + + Если СвязаннаяТаблицаИмя <> Неопределено И ЗначениеЗаполнено(СтрокаТаблицы.ПолеКД) Тогда + Условие = Новый Структура("ПолеКД", СтрокаТаблицы.ПолеКД); + УстановитьФлажокИспользованиеПоУсловию(СвязаннаяТаблицаИмя, Условие, СтрокаТаблицы.Использование); + КонецЕсли; +КонецПроцедуры + +&НаКлиенте +Процедура УстановитьФлажокИспользованиеПоУсловию(ТаблицаИмя, Условие, Использование) + Таблица = ЭтотОбъект[ТаблицаИмя]; + Найденные = ОтчетыКлиентСервер.НайтиСтрокиТаблицы(Таблица, Условие); + УзелКД = Неопределено; + Для Каждого СтрокаТаблицы Из Найденные Цикл + Если СтрокаТаблицы.Использование = Использование Тогда + Продолжить; + КонецЕсли; + Если УзелКД = Неопределено Тогда + УзелКД = ТаблицыПолейНайтиУзел(ЭтотОбъект, ТаблицаИмя, СтрокаТаблицы); + КонецЕсли; + ЭлементКД = УзелКД.ПолучитьОбъектПоИдентификатору(СтрокаТаблицы.ИдентификаторКД); + Если ЭлементКД = Неопределено Тогда + Продолжить; + КонецЕсли; + СтрокаТаблицы.Использование = Использование; + ЭлементКД.Использование = Использование; + КонецЦикла; +КонецПроцедуры + +&НаКлиенте +Процедура УстановитьФлажкиИспользованиеВоВсемДереве(ТаблицаИмя, Использование, МассивСтрок = Неопределено, УзелКД = Неопределено) + ОпределятьУзелНаЛету = Ложь; + Если МассивСтрок = Неопределено Тогда + МассивСтрок = ЭтотОбъект[ТаблицаИмя].ПолучитьЭлементы(); + ОпределятьУзелНаЛету = (ТаблицаИмя = "Отборы"); + КонецЕсли; + + Для Каждого СтрокаДерева Из МассивСтрок Цикл + Если УзелКД = Неопределено Или ОпределятьУзелНаЛету Тогда + УзелКД = ТаблицыПолейНайтиУзел(ЭтотОбъект, ТаблицаИмя, СтрокаДерева); + КонецЕсли; + + Если ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(СтрокаДерева, "ВыводитьФлажок") <> Ложь + И ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(СтрокаДерева, "ЭтоРаздел") <> Истина Тогда + ЭлементКД = УзелКД.ПолучитьОбъектПоИдентификатору(СтрокаДерева.ИдентификаторКД); + Если ЭлементКД <> Неопределено Тогда + СтрокаДерева.Использование = Использование; + ЭлементКД.Использование = Использование; + ПослеИзмененияФлажкаИспользование(ТаблицаИмя, СтрокаДерева, ЭлементКД); + КонецЕсли; + КонецЕсли; + + УстановитьФлажкиИспользованиеВоВсемДереве(ТаблицаИмя, Использование, СтрокаДерева.ПолучитьЭлементы(), УзелКД); + КонецЦикла; + + УстановитьМодифицированность(); +КонецПроцедуры + +&НаКлиенте +Процедура ТаблицыПолейИзменитьЗначение(ТаблицаИмя) + СтрокаТаблицы = Элементы[ТаблицаИмя].ТекущиеДанные; + Если СтрокаТаблицы = Неопределено Тогда + Возврат; + КонецЕсли; + + УзелКД = ТаблицыПолейНайтиУзел(ЭтотОбъект, ТаблицаИмя, СтрокаТаблицы); + ЭлементКД = УзелКД.ПолучитьОбъектПоИдентификатору(СтрокаТаблицы.ИдентификаторКД); + Если ЭлементКД = Неопределено Тогда + Возврат; + КонецЕсли; + + Если СтрокаТаблицы.ЭтоПараметр Тогда + ЭлементКД.Значение = СтрокаТаблицы.Значение; + Иначе + ЭлементКД.ПравоеЗначение = СтрокаТаблицы.Значение; + КонецЕсли; + + ПользовательскиеНастройкиМодифицированы = Истина; + Если РасширенныйРежим = 1 Тогда + ВариантИзменен = Истина; + КонецЕсли; +КонецПроцедуры + +&НаКлиенте +Процедура ТаблицыПолейИзменитьТипГруппировки(ТаблицаИмя) + СтрокаТаблицы = Элементы[ТаблицаИмя].ТекущиеДанные; + Если СтрокаТаблицы = Неопределено Тогда + Возврат; + КонецЕсли; + + УзелКД = ТаблицыПолейНайтиУзел(ЭтотОбъект, ТаблицаИмя, СтрокаТаблицы); + ЭлементКД = УзелКД.ПолучитьОбъектПоИдентификатору(СтрокаТаблицы.ИдентификаторКД); + Если ЭлементКД = Неопределено Тогда + Возврат; + КонецЕсли; + + Если СтрокаТаблицы.ПоказыватьТипДополнения Тогда + ЭлементКД.ТипДополнения = СтрокаТаблицы.ТипДополнения; + Иначе + ЭлементКД.ТипГруппировки = СтрокаТаблицы.ТипГруппировки; + КонецЕсли; + + ПользовательскиеНастройкиМодифицированы = Истина; + Если РасширенныйРежим = 1 Тогда + ВариантИзменен = Истина; + КонецЕсли; +КонецПроцедуры + +&НаКлиенте +Процедура ТаблицыПолейИзменитьГруппу(ТаблицаИмя, СтрокаИдентификатор, СтрокаТаблицы) + УзелКД = ТаблицыПолейНайтиУзел(ЭтотОбъект, ТаблицаИмя, СтрокаТаблицы); + ЭлементКД = УзелКД.ПолучитьОбъектПоИдентификатору(СтрокаТаблицы.ИдентификаторКД); + + Контекст = Новый Структура("ТаблицаИмя, СтрокаИдентификатор", ТаблицаИмя, СтрокаИдентификатор); + Обработчик = Новый ОписаниеОповещения("ТаблицыПолейИзменитьГруппуЗавершение", ЭтотОбъект, Контекст); + + Если ТаблицаИмя = "Отборы" Тогда + Список = Новый СписокЗначений; + Список.Добавить(ТипГруппыЭлементовОтбораКомпоновкиДанных.ГруппаИ); + Список.Добавить(ТипГруппыЭлементовОтбораКомпоновкиДанных.ГруппаИли); + Список.Добавить(ТипГруппыЭлементовОтбораКомпоновкиДанных.ГруппаНе); + ПоказатьВыборИзМеню(Обработчик, Список); + Иначе + ПараметрыФормы = Новый Структура; + ПараметрыФормы.Вставить("ЗаголовокГруппы", ЭлементКД.Заголовок); + ПараметрыФормы.Вставить("Расположение", ЭлементКД.Расположение); + + Блокировать = РежимОткрытияОкнаФормы.БлокироватьОкноВладельца; + + ОткрытьФорму("ХранилищеНастроек.ХранилищеВариантовОтчетов.Форма.ГруппаВыбранныхПолей", ПараметрыФормы, ЭтотОбъект, Истина, , , Обработчик, Блокировать); + КонецЕсли; +КонецПроцедуры + +&НаКлиенте +Процедура ТаблицыПолейИзменитьГруппуЗавершение(Результат, Контекст) Экспорт + Если Результат = Неопределено Или Результат = КодВозвратаДиалога.Отмена Тогда + Возврат; + КонецЕсли; + + СтрокаТаблицы = ЭтотОбъект[Контекст.ТаблицаИмя].НайтиПоИдентификатору(Контекст.СтрокаИдентификатор); + Если СтрокаТаблицы = Неопределено Тогда + Возврат; + КонецЕсли; + + УзелКД = ТаблицыПолейНайтиУзел(ЭтотОбъект, Контекст.ТаблицаИмя, СтрокаТаблицы); + ЭлементКД = УзелКД.ПолучитьОбъектПоИдентификатору(СтрокаТаблицы.ИдентификаторКД); + Если ЭлементКД = Неопределено Тогда + Возврат; + КонецЕсли; + + Если Контекст.ТаблицаИмя = "Отборы" Тогда + ЭлементКД.ТипГруппы = Результат.Значение; + СтрокаТаблицы.Представление = Строка(Результат.Значение); + Если Не СтрокаТаблицы.ЗаголовокПереопределен Тогда + СтрокаТаблицы.Заголовок = СтрокаТаблицы.Представление; + КонецЕсли; + Иначе + ЭлементКД.Заголовок = Результат.ЗаголовокГруппы; + ЭлементКД.Расположение = Результат.Расположение; + СтрокаТаблицы.Представление = ЭлементКД.Заголовок; + Если ЭлементКД.Расположение <> РасположениеПоляКомпоновкиДанных.Авто Тогда + СтрокаТаблицы.Представление = СтрокаТаблицы.Представление + " (" + Строка(ЭлементКД.Расположение) + ")"; + КонецЕсли; + КонецЕсли; + + ПользовательскиеНастройкиМодифицированы = Истина; + Если РасширенныйРежим = 1 Тогда + ВариантИзменен = Истина; + КонецЕсли; +КонецПроцедуры + +&НаКлиенте +Функция ТаблицыПолейВставить(ТаблицаИмя, ТипЭлемента, ТекущаяСтрока, ВнутрьСтроки) + Если ТекущаяСтрока = Неопределено Тогда + Возврат Неопределено; + КонецЕсли; + + ТаблицаЭлемент = Элементы[ТаблицаИмя]; + ТаблицаРеквизит = ЭтотОбъект[ТаблицаИмя]; + УзелКД = ТаблицыПолейНайтиУзел(ЭтотОбъект, ТаблицаИмя); + + Если ТекущаяСтрока = 0 Тогда + ТекущаяСтрока = ТаблицаЭлемент.ТекущиеДанные; + КонецЕсли; + + Если ТекущаяСтрока = Неопределено Тогда + + КудаВставить = ТаблицаРеквизит.ПолучитьЭлементы(); + Индекс = Неопределено; + ЭлементКД = Неопределено; + КудаВставитьКД = ПолучитьЭлементыКД(УзелКД, ТекущаяСтрока); + ИндексКД = Неопределено; + + Иначе + + ЭлементКД = НайтиОбъектКД(УзелКД, ТекущаяСтрока); + Если ВнутрьСтроки = Неопределено Тогда + ВнутрьСтроки = ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(ТекущаяСтрока, "ЭтоГруппа", Ложь); + КонецЕсли; + + Если ЭлементКД = Неопределено Тогда + ВнутрьСтроки = Истина; + КонецЕсли; + + Если ВнутрьСтроки Тогда + КудаВставить = ТекущаяСтрока.ПолучитьЭлементы(); + Индекс = Неопределено; + КудаВставитьКД = ПолучитьЭлементыКД(УзелКД, ЭлементКД); + ИндексКД = Неопределено + Иначе // Вставка на один уровень со строкой. + СтрокаРодитель = ТекущаяСтрока.ПолучитьРодителя(); + Если СтрокаРодитель = Неопределено Тогда + КудаВставить = ТаблицаРеквизит.ПолучитьЭлементы(); + Иначе + КудаВставить = СтрокаРодитель.ПолучитьЭлементы(); + КонецЕсли; + Индекс = КудаВставить.Индекс(ТекущаяСтрока) + 1; + РодительКД = НайтиОбъектКД(УзелКД, СтрокаРодитель); + КудаВставитьКД = ПолучитьЭлементыКД(УзелКД, РодительКД); + ИндексКД = КудаВставитьКД.Индекс(ЭлементКД) + 1; + КонецЕсли; + + КонецЕсли; + + Если Индекс = Неопределено Тогда + НоваяСтрока = КудаВставить.Добавить(); + Иначе + НоваяСтрока = КудаВставить.Вставить(Индекс); + КонецЕсли; + + Если ОтчетыКлиентСервер.ПриДобавленииВКоллекциюНужноУказыватьТипЭлемента(ТипЗнч(КудаВставитьКД)) Тогда + Если ИндексКД = Неопределено Тогда + НовыйЭлементКД = КудаВставитьКД.Добавить(ТипЭлемента); + Иначе + НовыйЭлементКД = КудаВставитьКД.Вставить(ИндексКД, ТипЭлемента); + КонецЕсли; + Иначе + Если ИндексКД = Неопределено Тогда + НовыйЭлементКД = КудаВставитьКД.Добавить(); + Иначе + НовыйЭлементКД = КудаВставитьКД.Вставить(ИндексКД); + КонецЕсли; + КонецЕсли; + ТаблицаЭлемент.ТекущаяСтрока = НоваяСтрока.ПолучитьИдентификатор(); + НоваяСтрока.ИдентификаторКД = УзелКД.ПолучитьИдентификаторПоОбъекту(НовыйЭлементКД); + + Результат = Новый Структура("СтрокаТаблицы, УзелКД, ЭлементКД"); + Результат.СтрокаТаблицы = НоваяСтрока; + Результат.УзелКД = УзелКД; + Результат.ЭлементКД = НовыйЭлементКД; + Возврат Результат; +КонецФункции + +&НаКлиенте +Функция ТаблицыПолейПереместить(Знач ТаблицаИмя, Знач СтрокаТаблицы, Знач НовыйРодитель, Знач ПередЧемВставить, Знач ОставитьКопию) + ТаблицаЭлемент = Элементы[ТаблицаИмя]; + ТаблицаРеквизит = ЭтотОбъект[ТаблицаИмя]; + УзелКД = ТаблицыПолейНайтиУзел(ЭтотОбъект, ТаблицаИмя); + ЭлементКД = НайтиОбъектКД(УзелКД, СтрокаТаблицы); + + Если НовыйРодитель = Неопределено Тогда + НовыйРодитель = ПолучитьРодителя(ТаблицаИмя, ПередЧемВставить); + КонецЕсли; + + Если ПередЧемВставить = Неопределено Тогда + Если ТаблицаИмя = "СтруктураВарианта" + Или НовыйРодитель = Неопределено + Или ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(НовыйРодитель, "ЭтоРаздел") = Истина + Или ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(НовыйРодитель, "ЭтоГруппа") = Истина Тогда + // Внутрь родителя. + Иначе + // На один уровень с родителем. + ПередЧемВставить = НовыйРодитель; + НовыйРодитель = ПолучитьРодителя(ТаблицаИмя, НовыйРодитель); + КонецЕсли; + КонецЕсли; + + НовыйРодительКД = НайтиОбъектКД(УзелКД, НовыйРодитель); + КудаВставить = ПолучитьЭлементы(ТаблицаРеквизит, НовыйРодитель); + КудаВставитьКД = ПолучитьЭлементыКД(УзелКД, НовыйРодительКД); + + СтарыйРодитель = ПолучитьРодителя(ТаблицаИмя, СтрокаТаблицы); + ОткудаПереместить = ПолучитьЭлементы(ТаблицаРеквизит, СтарыйРодитель); + + СтарыйРодительКД = НайтиОбъектКД(УзелКД, СтарыйРодитель); + ОткудаПереместитьКД = ПолучитьЭлементыКД(УзелКД, СтарыйРодительКД); + + Если ПередЧемВставить = Неопределено Тогда + Индекс = Неопределено; + ИндексКД = Неопределено; + Иначе + ПередЧемВставитьКД = НайтиОбъектКД(УзелКД, ПередЧемВставить); + Индекс = КудаВставить.Индекс(ПередЧемВставить); + ИндексКД = КудаВставитьКД.Индекс(ПередЧемВставитьКД); + Если НовыйРодитель = СтарыйРодитель + И ОткудаПереместить.Индекс(СтрокаТаблицы) > Индекс Тогда + Индекс = Индекс - 1; + ИндексКД = ИндексКД - 1; + КонецЕсли; + КонецЕсли; + + Результат = Новый Структура("СтрокаДерева, СтрокаКД"); + + ПоискЭлементовКД = Новый Соответствие; + Результат.СтрокаКД = ОтчетыКлиентСервер.СкопироватьРекурсивно(УзелКД, ЭлементКД, КудаВставитьКД, ИндексКД, ПоискЭлементовКД); + + ПоискСтрокТаблицы = Новый Соответствие; + Результат.СтрокаДерева = ОтчетыКлиентСервер.СкопироватьРекурсивно(Неопределено, СтрокаТаблицы, КудаВставить, Индекс, ПоискСтрокТаблицы); + + Для Каждого КлючИЗначение Из ПоискСтрокТаблицы Цикл + СтараяСтрока = КлючИЗначение.Ключ; + НоваяСтрока = КлючИЗначение.Значение; + НоваяСтрока.ИдентификаторКД = ПоискЭлементовКД.Получить(СтараяСтрока.ИдентификаторКД); + КонецЦикла; + + Если Не ОставитьКопию Тогда + ОткудаПереместить.Удалить(СтрокаТаблицы); + ОткудаПереместитьКД.Удалить(ЭлементКД); + КонецЕсли; + + Возврат Результат; +КонецФункции + +&НаКлиенте +Процедура ТаблицыПолейУдалить(Знач ТаблицаИмя, Знач СтрокаТаблицыИлиМассивСтрок, Знач ИспользованиеАвто) + Таблица = ЭтотОбъект[ТаблицаИмя]; + УзелКД = ТаблицыПолейНайтиУзел(ЭтотОбъект, ТаблицаИмя); + Если ТипЗнч(СтрокаТаблицыИлиМассивСтрок) = Тип("ДанныеФормыЭлементДерева") Тогда + ТаблицыПолейУдалитьМеханика(ТаблицаИмя, Таблица, УзелКД, СтрокаТаблицыИлиМассивСтрок, ИспользованиеАвто); + Иначе + Количество = СтрокаТаблицыИлиМассивСтрок.Количество(); + Для Номер = 1 По Количество Цикл + ОбратныйИндекс = Количество - Номер; + СтрокаТаблицы = СтрокаТаблицыИлиМассивСтрок[ОбратныйИндекс]; + ТаблицыПолейУдалитьМеханика(ТаблицаИмя, Таблица, УзелКД, СтрокаТаблицы, ИспользованиеАвто); + КонецЦикла; + КонецЕсли; +КонецПроцедуры + +&НаКлиенте +Процедура ТаблицыПолейУдалитьМеханика(ТаблицаИмя, Таблица, УзелКД, СтрокаТаблицы, ИспользованиеАвто) + ЭлементКД = НайтиОбъектКД(УзелКД, СтрокаТаблицы); + + СвязаннаяТаблицаИмя = Неопределено; + Если ТаблицаИмя = "ВыбранныеПоля" Тогда + Если СтрокаТаблицы.ЭтоРаздел Тогда + Возврат; + ИначеЕсли СтрокаТаблицы.ТипНастройки = "АвтоВыбранноеПоле" Тогда + Если ИспользованиеАвто <> Неопределено И ЭлементКД.Использование <> ИспользованиеАвто Тогда + СтрокаТаблицы.Использование = ИспользованиеАвто; + ЭлементКД.Использование = ИспользованиеАвто; + КонецЕсли; + Возврат; + КонецЕсли; + СвязаннаяТаблицаИмя = "СоставГруппировки"; + ИначеЕсли ТаблицаИмя = "Сортировка" Тогда + Если СтрокаТаблицы.ЭтоРаздел Тогда + Возврат; + ИначеЕсли СтрокаТаблицы.ТипНастройки = "АвтоЭлементПорядка" Тогда + Если ИспользованиеАвто <> Неопределено И ЭлементКД.Использование <> ИспользованиеАвто Тогда + СтрокаТаблицы.Использование = ИспользованиеАвто; + ЭлементКД.Использование = ИспользованиеАвто; + КонецЕсли; + Возврат; + КонецЕсли; + ИначеЕсли ТаблицаИмя = "СоставГруппировки" Тогда + Если СтрокаТаблицы.ТипНастройки = "АвтоПолеГруппировки" Тогда + Если ИспользованиеАвто <> Неопределено И ЭлементКД.Использование <> ИспользованиеАвто Тогда + СтрокаТаблицы.Использование = ИспользованиеАвто; + ЭлементКД.Использование = ИспользованиеАвто; + КонецЕсли; + Возврат; + КонецЕсли; + СвязаннаяТаблицаИмя = "ВыбранныеПоля"; + КонецЕсли; + Если СвязаннаяТаблицаИмя <> Неопределено И ЗначениеЗаполнено(СтрокаТаблицы.ПолеКД) Тогда + Условие = Новый Структура("ПолеКД", СтрокаТаблицы.ПолеКД); + УстановитьФлажокИспользованиеПоУсловию(СвязаннаяТаблицаИмя, Условие, Ложь); + КонецЕсли; + + Родитель = ПолучитьРодителя(ТаблицаИмя, СтрокаТаблицы); + СтрокиРодителя = ПолучитьЭлементы(Таблица, Родитель); + + РодительКД = НайтиОбъектКД(УзелКД, Родитель); + СтрокиРодителяКД = ПолучитьЭлементыКД(УзелКД, РодительКД); + + СтрокиРодителя.Удалить(СтрокаТаблицы); + СтрокиРодителяКД.Удалить(ЭлементКД); + +КонецПроцедуры + +&НаКлиенте +Функция НайтиОбъектКД(Знач УзелКД, Знач СтрокаТаблицы) + Если СтрокаТаблицы = Неопределено Или ТипЗнч(СтрокаТаблицы.ИдентификаторКД) <> Тип("ИдентификаторКомпоновкиДанных") Тогда + Возврат Неопределено; + Иначе + Возврат УзелКД.ПолучитьОбъектПоИдентификатору(СтрокаТаблицы.ИдентификаторКД); + КонецЕсли; +КонецФункции + +&НаКлиенте +Функция ПолучитьЭлементыКД(Знач УзелКД, Знач ОбъектКД) + Если ОбъектКД = Неопределено Тогда + ОбъектКД = УзелКД; + КонецЕсли; + ТипОбъекта = ТипЗнч(ОбъектКД); + Если ТипОбъекта = Тип("НастройкиКомпоновкиДанных") + Или ТипОбъекта = Тип("ГруппировкаКомпоновкиДанных") + Или ТипОбъекта = Тип("ГруппировкаТаблицыКомпоновкиДанных") + Или ТипОбъекта = Тип("ГруппировкаДиаграммыКомпоновкиДанных") Тогда + Возврат ОбъектКД.Структура; + ИначеЕсли ТипОбъекта = Тип("КоллекцияЭлементовСтруктурыТаблицыКомпоновкиДанных") + Или ТипОбъекта = Тип("КоллекцияЭлементовСтруктурыДиаграммыКомпоновкиДанных") Тогда + Возврат ОбъектКД; + Иначе + Возврат ОбъектКД.Элементы; + КонецЕсли; +КонецФункции + +&НаКлиенте +Функция ПолучитьЭлементы(Знач ДеревоФормы, Знач СтрокаДерева) + Если СтрокаДерева = Неопределено Тогда + СтрокаДерева = ДеревоФормы; + КонецЕсли; + Возврат СтрокаДерева.ПолучитьЭлементы(); +КонецФункции + +&НаКлиенте +Функция ПолучитьРодителя(Знач ТаблицаИмя, Знач СтрокаДерева) + Если СтрокаДерева = Неопределено Тогда + СтрокаРодителя = Неопределено; + Иначе + СтрокаРодителя = СтрокаДерева.ПолучитьРодителя(); + КонецЕсли; + + Если СтрокаРодителя = Неопределено Тогда + СтрокаРодителя = КорневаяСтрокаПоУмолчанию(ТаблицаИмя); + КонецЕсли; + + Возврат СтрокаРодителя; +КонецФункции + +&НаКлиенте +Функция КорневаяСтрокаПоУмолчанию(Знач ТаблицаИмя) + + Если ТаблицаИмя = "ВыбранныеПоля" Тогда + Возврат ВыбранныеПоля.ПолучитьЭлементы()[0]; + + ИначеЕсли ТаблицаИмя = "Сортировка" Тогда + Возврат Сортировка.ПолучитьЭлементы()[0]; + + ИначеЕсли ТаблицаИмя = "СтруктураВарианта" Тогда + Возврат СтруктураВарианта.ПолучитьЭлементы()[0]; + + ИначеЕсли ТаблицаИмя = "Отборы" Тогда + Если РежимИзмененияУзлаВарианта Тогда + Возврат Отборы.ПолучитьЭлементы()[0]; + Иначе + Возврат Отборы.ПолучитьЭлементы()[1]; + КонецЕсли; + + Иначе + Возврат Неопределено; + КонецЕсли; + +КонецФункции + +&НаКлиенте +Функция НайтиПоИдентификатору(ТаблицаРеквизит, ИдентификаторСтроки) + Если ИдентификаторСтроки = Неопределено Тогда + СтрокаТаблицы = Неопределено; + Иначе + СтрокаТаблицы = ТаблицаРеквизит.НайтиПоИдентификатору(ИдентификаторСтроки); + КонецЕсли; + Возврат СтрокаТаблицы; +КонецФункции + +&НаКлиенте +Процедура ТаблицыПолейИзменитьНаправлениеСортировки(ТаблицаИмя, СтрокаТаблицы, Направление) + Если СтрокаТаблицы = Неопределено Тогда + СтрокаТаблицы = Элементы[ТаблицаИмя].ТекущиеДанные; + Если СтрокаТаблицы = Неопределено Тогда + Возврат; + КонецЕсли; + КонецЕсли; + + УзелКД = ТаблицыПолейНайтиУзел(ЭтотОбъект, ТаблицаИмя, СтрокаТаблицы); + ЭлементКД = УзелКД.ПолучитьОбъектПоИдентификатору(СтрокаТаблицы.ИдентификаторКД); + Если ЭлементКД = Неопределено Тогда + Возврат; + КонецЕсли; + + // Заполнение необязательных параметров. + Если Направление = Неопределено Тогда + Если ЭлементКД.ТипУпорядочивания = НаправлениеСортировкиКомпоновкиДанных.Возр Тогда + Направление = НаправлениеСортировкиКомпоновкиДанных.Убыв; + Иначе + Направление = НаправлениеСортировкиКомпоновкиДанных.Возр; + КонецЕсли; + КонецЕсли; + + // Изменение направления сортировки. + ЭлементКД.ТипУпорядочивания = Направление; + СтрокаТаблицы.Направление = Направление; + + УстановитьМодифицированность(); +КонецПроцедуры + +&НаКлиенте +Процедура ТаблицыПолейПоказатьВыборПоля(ТаблицаИмя, Обработчик, ПолеКД = Неопределено, ИдентификаторУзлаКД = Неопределено) + ПараметрыФормы = Новый Структура; + ПараметрыФормы.Вставить("НастройкиОтчета", НастройкиОтчета); + ПараметрыФормы.Вставить("КомпоновщикНастроек", Отчет.КомпоновщикНастроек); + ПараметрыФормы.Вставить("Режим", ТаблицаИмя); + ПараметрыФормы.Вставить("ПолеКД", ПолеКД); + ПараметрыФормы.Вставить("ИдентификаторТекущегоУзлаКД", ?(ИдентификаторУзлаКД = Неопределено, ИдентификаторТекущегоУзлаКД, ИдентификаторУзлаКД)); + + Блокировать = РежимОткрытияОкнаФормы.БлокироватьОкноВладельца; + + ОткрытьФорму("ХранилищеНастроек.ХранилищеВариантовОтчетов.Форма.ВыборПоляОтчета", ПараметрыФормы, ЭтотОбъект, Истина, , , Обработчик, Блокировать); +КонецПроцедуры + +&НаКлиенте +Функция ТаблицыПолейСкопироватьРекурсивно(УзелКД, ЧтоКопировать, КудаВставить, ЧтоКопироватьКД, КудаВставитьКД, Индекс = Неопределено, ИндексКД = Неопределено) + Результат = Новый Структура("СтрокаДерева, СтрокаКД"); + + ПоискЭлементовКД = Новый Соответствие; + Результат.СтрокаКД = ОтчетыКлиентСервер.СкопироватьРекурсивно(УзелКД, ЧтоКопироватьКД, КудаВставитьКД, ИндексКД, ПоискЭлементовКД); + + ПоискСтрокТаблицы = Новый Соответствие; + Результат.СтрокаДерева = ОтчетыКлиентСервер.СкопироватьРекурсивно(Неопределено, ЧтоКопировать, КудаВставить, Индекс, ПоискСтрокТаблицы); + + Для Каждого КлючИЗначение Из ПоискСтрокТаблицы Цикл + СтараяСтрока = КлючИЗначение.Ключ; + НоваяСтрока = КлючИЗначение.Значение; + НоваяСтрока.ИдентификаторКД = ПоискЭлементовКД.Получить(СтараяСтрока.ИдентификаторКД); + КонецЦикла; + + Возврат Результат; +КонецФункции + +&НаКлиенте +Процедура СтруктураВариантаОбновитьЗаголовокЭлементаВКомпоновщике(СтрокаТаблицы) + УзелКД = ТаблицыПолейНайтиУзел(ЭтотОбъект, "СтруктураВарианта", СтрокаТаблицы); + ЭлементКД = УзелКД.ПолучитьОбъектПоИдентификатору(СтрокаТаблицы.ИдентификаторКД); + Если ЭлементКД = Неопределено Тогда + Возврат; + КонецЕсли; + + ЗаголовокИспользование = ЗначениеЗаполнено(СтрокаТаблицы.Заголовок); + + ЗначениеПараметраКД = ЭлементКД.ПараметрыВывода.НайтиЗначениеПараметра(Новый ПараметрКомпоновкиДанных("ВыводитьЗаголовок")); + Если ЗначениеПараметраКД <> Неопределено Тогда + ЗначениеПараметраКД.Использование = Истина; + Если ЗаголовокИспользование Тогда + ЗначениеПараметраКД.Значение = ТипВыводаТекстаКомпоновкиДанных.Выводить; + Иначе + ЗначениеПараметраКД.Значение = ТипВыводаТекстаКомпоновкиДанных.НеВыводить; + КонецЕсли; + КонецЕсли; + + ЗначениеПараметраКД = ЭлементКД.ПараметрыВывода.НайтиЗначениеПараметра(Новый ПараметрКомпоновкиДанных("Заголовок")); + Если ЗначениеПараметраКД <> Неопределено Тогда + ЗначениеПараметраКД.Использование = Истина; + ЗначениеПараметраКД.Значение = СтрокаТаблицы.Заголовок; + КонецЕсли; +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// Клиент или сервер + +&НаКлиентеНаСервереБезКонтекста +Функция ЭтоГруппа(ТипЭлемента) + Если ТипЭлемента = Тип("ГруппаВыбранныхПолейКомпоновкиДанных") + Или ТипЭлемента = Тип("ГруппаЭлементовОтбораКомпоновкиДанных") + Или ТипЭлемента = Тип("ГруппировкаКомпоновкиДанных") + Или ТипЭлемента = Тип("НастройкиВложенногоОбъектаКомпоновкиДанных") + Или ТипЭлемента = Тип("КоллекцияЭлементовСтруктурыТаблицыКомпоновкиДанных") + Или ТипЭлемента = Тип("КоллекцияЭлементовСтруктурыДиаграммыКомпоновкиДанных") Тогда + Возврат Истина; + КонецЕсли; + Возврат Ложь; +КонецФункции + +&НаКлиентеНаСервереБезКонтекста +Функция ОписаниеТиповУдалитьПримитивные(ИсходноеОписаниеТипов) + ВычитаемыеТипы = Новый Массив; + Если ИсходноеОписаниеТипов.СодержитТип(Тип("Строка")) Тогда + ВычитаемыеТипы.Добавить(Тип("Строка")); + КонецЕсли; + Если ИсходноеОписаниеТипов.СодержитТип(Тип("Дата")) Тогда + ВычитаемыеТипы.Добавить(Тип("Дата")); + КонецЕсли; + Если ИсходноеОписаниеТипов.СодержитТип(Тип("Число")) Тогда + ВычитаемыеТипы.Добавить(Тип("Число")); + КонецЕсли; + Если ВычитаемыеТипы.Количество() = 0 Тогда + Возврат ИсходноеОписаниеТипов; + КонецЕсли; + Возврат Новый ОписаниеТипов(ИсходноеОписаниеТипов, , ВычитаемыеТипы); +КонецФункции + +&НаКлиентеНаСервереБезКонтекста +Функция ТаблицыПолейНайтиУзел(ЭтотОбъект, ТаблицаИмя, СтрокаТаблицы = Неопределено, ИдентификаторУзлаКД = Неопределено) + Если ЭтотОбъект.РасширенныйРежим = 1 Тогда + Если ИдентификаторУзлаКД = Неопределено Тогда + ИдентификаторУзлаКД = ЭтотОбъект.ИдентификаторТекущегоУзлаКД; + КонецЕсли; + Если ИдентификаторУзлаКД = Неопределено Тогда + КорневойУзел = ЭтотОбъект.Отчет.КомпоновщикНастроек.Настройки; + Иначе + КорневойУзел = ЭтотОбъект.Отчет.КомпоновщикНастроек.Настройки.ПолучитьОбъектПоИдентификатору(ИдентификаторУзлаКД); + Если ТипЗнч(КорневойУзел) = Тип("НастройкиВложенногоОбъектаКомпоновкиДанных") Тогда + КорневойУзел = КорневойУзел.Настройки; + КонецЕсли; + КонецЕсли; + Если ТаблицаИмя = "Сортировка" Тогда + Возврат КорневойУзел.Порядок; + ИначеЕсли ТаблицаИмя = "ВыбранныеПоля" Тогда + Возврат КорневойУзел.Выбор; + ИначеЕсли ТаблицаИмя = "Отборы" Тогда + Если СтрокаТаблицы = Неопределено Или Не СтрокаТаблицы.ЭтоПараметр Тогда + Возврат КорневойУзел.Отбор; + Иначе + Возврат КорневойУзел.ПараметрыДанных; + КонецЕсли; + ИначеЕсли ТаблицаИмя = "СоставГруппировки" Тогда + Возврат КорневойУзел.ПоляГруппировки; + ИначеЕсли ТаблицаИмя = "Оформление" Тогда + Возврат КорневойУзел.УсловноеОформление; + ИначеЕсли ТаблицаИмя = "СтруктураВарианта" Тогда + Возврат КорневойУзел; + Иначе + ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Изменение узлов таблицы ""%1"" не поддерживается.'"), ТаблицаИмя); + КонецЕсли; + Иначе + Если ТаблицаИмя = "СтруктураВарианта" Тогда + Возврат ЭтотОбъект.Отчет.КомпоновщикНастроек.ПользовательскиеНастройки; + КонецЕсли; + ИдентификаторКД = ЭтотОбъект.БыстрыйПоискПользовательскихНастроек.Получить(ТаблицаИмя); + Если ИдентификаторКД = Неопределено Тогда + Возврат Неопределено; + Иначе + Возврат ЭтотОбъект.Отчет.КомпоновщикНастроек.ПользовательскиеНастройки.ПолучитьОбъектПоИдентификатору(ИдентификаторКД); + КонецЕсли; + КонецЕсли; + +КонецФункции + +&НаКлиентеНаСервереБезКонтекста +Функция МассивСортировать(ИсходныйМассив, НаправлениеСортировки = Неопределено) + Список = Новый СписокЗначений; + Список.ЗагрузитьЗначения(ИсходныйМассив); + Список.СортироватьПоЗначению(НаправлениеСортировки); + Возврат Список.ВыгрузитьЗначения(); +КонецФункции + +&НаКлиентеНаСервереБезКонтекста +Функция НайтиНастройкуВарианта(ЭтотОбъект, ИдентификаторЭлемента) + ПоискНастройкиВарианта = ЭтотОбъект.БыстрыйПоискНастроекВарианта.Получить(ИдентификаторЭлемента); + Если ПоискНастройкиВарианта = Неопределено Тогда + Возврат Неопределено; + КонецЕсли; + КорневойУзелКД = ЭтотОбъект.Отчет.КомпоновщикНастроек.Настройки.ПолучитьОбъектПоИдентификатору(ПоискНастройкиВарианта.ИдентификаторУзлаКД); + Результат = Новый Структура("УзелКД, ЭлементКД"); + Результат.УзелКД = КорневойУзелКД[ПоискНастройкиВарианта.ИмяКоллекции]; + Результат.ЭлементКД = Результат.УзелКД.ПолучитьОбъектПоИдентификатору(ПоискНастройкиВарианта.ИдентификаторЭлементаКД); + Возврат Результат; +КонецФункции + +//////////////////////////////////////////////////////////////////////////////// +// Вызов сервера + +&НаСервере +Функция БыстрыеНастройкиЗаполнить(Знач ПараметрыКлиента) + + // Вставка значений по умолчанию для обязательных ключей параметров заполнения. + ПараметрыЗаполнения = БыстрыеНастройкиДозаполнитьПараметры(ПараметрыКлиента); + + // Вызов переопределяемого модуля. + Если НастройкиОтчета.События.ПередЗаполнениемПанелиБыстрыхНастроек Тогда + ОтчетОбъект = ОтчетыСервер.ОтчетОбъект(ПараметрыЗаполнения.ОтчетОбъектИлиПолноеИмя); + ОтчетОбъект.ПередЗаполнениемПанелиБыстрыхНастроек(ЭтотОбъект, ПараметрыЗаполнения); + КонецЕсли; + + // Сохранить состояние до начала изменения. + БыстрыеНастройкиЗапомнитьСостояние(ПараметрыЗаполнения); + + // Запись новых настроек варианта и пользовательских настроек в компоновщик. + БыстрыеНастройкиЗагрузитьНастройкиВКомпоновщик(ПараметрыЗаполнения); + Если ПараметрыЗаполнения.Прервать Тогда + Возврат ПараметрыЗаполнения.Результат; + КонецЕсли; + + // Получение информации из КД. + УсловияВывода = Новый Структура; + УсловияВывода.Вставить("ТолькоПользовательские", РасширенныйРежим = 0); + УсловияВывода.Вставить("ТолькоБыстрые", Ложь); + УсловияВывода.Вставить("ИдентификаторТекущегоУзлаКД", ИдентификаторТекущегоУзлаКД); + Информация = ОтчетыСервер.РасширеннаяИнформацияОНастройках( + Отчет.КомпоновщикНастроек, + НастройкиОтчета, + ПараметрыЗаполнения.ОтчетОбъектИлиПолноеИмя, + УсловияВывода); + + // Удаление элементов старых настроек. + БыстрыеНастройкиУдалитьСтарыеЭлементыИКоманды(ПараметрыЗаполнения); + + // Добавление элементов актуальных настроек и загрузка значений. + БыстрыеНастройкиСоздатьЭлементыУправленияИЗагрузитьЗначения(ПараметрыЗаполнения, Информация); + + // Добавление элементов актуальных настроек и загрузка значений. + РасширенныеНастройкиЗагрузитьЗначения(ПараметрыЗаполнения, Информация); + + // Связи. + ЗарегистрироватьОтключаемыеСвязи(Информация); + + // Сохранить состояние до начала изменения. + БыстрыеНастройкиВосстановитьСостояние(ПараметрыЗаполнения); + + // Заголовок и свойства элементов. + ВидимостьДоступностьКорректность(ПараметрыЗаполнения.ИмяСобытия); + + // Вызов переопределяемого модуля. + Если НастройкиОтчета.События.ПослеЗаполненияПанелиБыстрыхНастроек Тогда + ОтчетОбъект = ОтчетыСервер.ОтчетОбъект(ПараметрыЗаполнения.ОтчетОбъектИлиПолноеИмя); + ОтчетОбъект.ПослеЗаполненияПанелиБыстрыхНастроек(ЭтотОбъект, ПараметрыЗаполнения); + КонецЕсли; + + Возврат ПараметрыЗаполнения.Результат; +КонецФункции + +&НаСервере +Процедура ВидимостьДоступностьКорректность(ИмяСобытия = "") + Если ИмяСобытия = "ПриСозданииНаСервере" Тогда + Если РежимИзмененияУзлаВарианта Тогда + Элементы.РасширенныйРежим.Видимость = Ложь; + Элементы.ЗакрытьИСформировать.Заголовок = НСтр("ru = 'Завершить редактирование'"); + Элементы.Закрыть.Заголовок = НСтр("ru = 'Отмена'"); + Элементы.Переместить(Элементы.СтраницаОтборы, Элементы.СтраницыНастроек, Элементы.СтраницаОформление); + КонецЕсли; + КонецЕсли; +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// Сервер + +&НаСервере +Функция ОтчетОбъект() + Возврат ОбщегоНазначения.ОбъектПоПолномуИмени(НастройкиОтчета.ПолноеИмя); +КонецФункции + +&НаСервере +Процедура ДобавитьУсловноеОформление() + // Отборы. + Инструкция = СтандартныеПодсистемыСервер.ИнструкцияУсловногоОформления(); + Инструкция.Отборы.Вставить("Отборы.ЗаголовокПереопределен", Ложь); + Инструкция.Поля = "ОтборыЗаголовок"; + Инструкция.Оформление.Вставить("ЦветТекста", ЦветаСтиля.ТекстЗапрещеннойЯчейкиЦвет); + СтандартныеПодсистемыСервер.ДобавитьЭлементУсловногоОформления(ЭтотОбъект, Инструкция); + + Инструкция = СтандартныеПодсистемыСервер.ИнструкцияУсловногоОформления(); + Инструкция.Отборы.Вставить("Отборы.ВыводитьФлажок", Ложь); + Инструкция.Поля = "ОтборыИспользование"; + Инструкция.Оформление.Вставить("Видимость", Ложь); + Инструкция.Оформление.Вставить("Отображать", Ложь); + СтандартныеПодсистемыСервер.ДобавитьЭлементУсловногоОформления(ЭтотОбъект, Инструкция); + + Инструкция = СтандартныеПодсистемыСервер.ИнструкцияУсловногоОформления(); + Инструкция.Отборы.Вставить("Отборы.ЭтоРаздел", Истина); + Инструкция.Поля = "ОтборыУсловие, ОтборыЗначение, ОтборыПредставлениеЗначения, ОтборыИндексКартинкиДоступа, ОтборыЗаголовок"; + Инструкция.Оформление.Вставить("ТолькоПросмотр", Истина); + СтандартныеПодсистемыСервер.ДобавитьЭлементУсловногоОформления(ЭтотОбъект, Инструкция); + + Инструкция = СтандартныеПодсистемыСервер.ИнструкцияУсловногоОформления(); + Инструкция.Отборы.Вставить("Отборы.ЭтоГруппа", Истина); + Инструкция.Поля = "ОтборыУсловие, ОтборыЗначение, ОтборыПредставлениеЗначения"; + Инструкция.Оформление.Вставить("ТолькоПросмотр", Истина); + СтандартныеПодсистемыСервер.ДобавитьЭлементУсловногоОформления(ЭтотОбъект, Инструкция); + + Инструкция = СтандартныеПодсистемыСервер.ИнструкцияУсловногоОформления(); + Инструкция.Отборы.Вставить("Отборы.ФиксированныйСписокВыбора", Ложь); + Инструкция.Поля = "ОтборыПредставлениеЗначения"; + Инструкция.Оформление.Вставить("Видимость", Ложь); + Инструкция.Оформление.Вставить("Отображать", Ложь); + СтандартныеПодсистемыСервер.ДобавитьЭлементУсловногоОформления(ЭтотОбъект, Инструкция); + + Инструкция = СтандартныеПодсистемыСервер.ИнструкцияУсловногоОформления(); + Инструкция.Отборы.Вставить("Отборы.ФиксированныйСписокВыбора", Истина); + Инструкция.Поля = "ОтборыЗначение"; + Инструкция.Оформление.Вставить("Видимость", Ложь); + Инструкция.Оформление.Вставить("Отображать", Ложь); + СтандартныеПодсистемыСервер.ДобавитьЭлементУсловногоОформления(ЭтотОбъект, Инструкция); + + // Выбранные поля. + Инструкция = СтандартныеПодсистемыСервер.ИнструкцияУсловногоОформления(); + Инструкция.Отборы.Вставить("ВыбранныеПоля.ЭтоРаздел", Истина); + Инструкция.Поля = "ВыбранныеПоляИспользование"; + Инструкция.Оформление.Вставить("Видимость", Ложь); + Инструкция.Оформление.Вставить("Отображать", Ложь); + СтандартныеПодсистемыСервер.ДобавитьЭлементУсловногоОформления(ЭтотОбъект, Инструкция); + + // Сортировки. + Инструкция = СтандартныеПодсистемыСервер.ИнструкцияУсловногоОформления(); + Инструкция.Отборы.Вставить("Сортировка.ЭтоРаздел", Истина); + Инструкция.Поля = "СортировкаИспользование, СортировкаНаправление"; + Инструкция.Оформление.Вставить("Видимость", Ложь); + Инструкция.Оформление.Вставить("Отображать", Ложь); + СтандартныеПодсистемыСервер.ДобавитьЭлементУсловногоОформления(ЭтотОбъект, Инструкция); + + Инструкция = СтандартныеПодсистемыСервер.ИнструкцияУсловногоОформления(); + Инструкция.Отборы.Вставить("Сортировка.ТипНастройки", "АвтоЭлементПорядка"); + Инструкция.Поля = "СортировкаНаправление"; + Инструкция.Оформление.Вставить("Видимость", Ложь); + Инструкция.Оформление.Вставить("Отображать", Ложь); + СтандартныеПодсистемыСервер.ДобавитьЭлементУсловногоОформления(ЭтотОбъект, Инструкция); + + // Состав группировки. + Если РежимИзмененияУзлаВарианта Тогда + Инструкция = СтандартныеПодсистемыСервер.ИнструкцияУсловногоОформления(); + Инструкция.Отборы.Вставить("СоставГруппировки.ПоказыватьТипДополнения", Истина); + Инструкция.Поля = "СоставГруппировкиТипГруппировки"; + Инструкция.Оформление.Вставить("Видимость", Ложь); + Инструкция.Оформление.Вставить("Отображать", Ложь); + СтандартныеПодсистемыСервер.ДобавитьЭлементУсловногоОформления(ЭтотОбъект, Инструкция); + + Инструкция = СтандартныеПодсистемыСервер.ИнструкцияУсловногоОформления(); + Инструкция.Отборы.Вставить("СоставГруппировки.ПоказыватьТипДополнения", Ложь); + Инструкция.Поля = "СоставГруппировкиТипДополнения"; + Инструкция.Оформление.Вставить("Видимость", Ложь); + Инструкция.Оформление.Вставить("Отображать", Ложь); + СтандартныеПодсистемыСервер.ДобавитьЭлементУсловногоОформления(ЭтотОбъект, Инструкция); + КонецЕсли; + +КонецПроцедуры + +&НаСервере +Функция БыстрыеНастройкиДозаполнитьПараметры(ПараметрыКлиента) + ПараметрыЗаполнения = Новый Структура; + ОбщегоНазначенияКлиентСервер.ДополнитьСтруктуру(ПараметрыЗаполнения, ПараметрыКлиента, Истина); + Если Не ПараметрыЗаполнения.Свойство("ИмяСобытия") Тогда + ПараметрыЗаполнения.Вставить("ИмяСобытия", ""); + КонецЕсли; + Если Не ПараметрыЗаполнения.Свойство("ВариантМодифицирован") Тогда + ПараметрыЗаполнения.Вставить("ВариантМодифицирован", Ложь); + КонецЕсли; + Если Не ПараметрыЗаполнения.Свойство("ПользовательскиеНастройкиМодифицированы") Тогда + ПараметрыЗаполнения.Вставить("ПользовательскиеНастройкиМодифицированы", Ложь); + КонецЕсли; + Если Не ПараметрыЗаполнения.Свойство("Результат") Тогда + ПараметрыЗаполнения.Вставить("Результат", Новый Структура); + КонецЕсли; + ПараметрыЗаполнения.Вставить("Прервать", Ложь); + ПараметрыЗаполнения.Вставить("ОтчетОбъектИлиПолноеИмя", НастройкиОтчета.ПолноеИмя); + + Возврат ПараметрыЗаполнения; +КонецФункции + +&НаСервере +Процедура БыстрыеНастройкиЗапомнитьСостояние(ПараметрыЗаполнения) + Если ПараметрыЗаполнения.ИмяСобытия = "ПриСозданииНаСервере" Тогда + Возврат; // Ничего восстанавливать не требуется. + КонецЕсли; + + ВыделенныеСтроки = Новый Структура; + ПараметрыЗаполнения.Вставить("ВыделенныеСтроки", ВыделенныеСтроки); + + ИменаТаблиц = "Отборы, ВыбранныеПоля, Сортировка, " + ?(РежимИзмененияУзлаВарианта, "СтруктураВарианта", "СоставГруппировки"); + ИменаТаблиц = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(ИменаТаблиц, ",", Истина, Истина); + Для Каждого ИмяТаблицы Из ИменаТаблиц Цикл + ВыделенныеСтроки.Вставить(ИмяТаблицы, ОтчетыСервер.ЗапомнитьВыделенныеСтроки(ЭтотОбъект, ИмяТаблицы, "ИдентификаторКД")); + СтандартныеПодсистемыКлиентСервер.РазвернутьУзлыДерева(ПараметрыЗаполнения.Результат, ИмяТаблицы, "*", Истина); + КонецЦикла; +КонецПроцедуры + +&НаСервере +Процедура БыстрыеНастройкиВосстановитьСостояние(ПараметрыЗаполнения) + ВыделенныеСтроки = ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(ПараметрыЗаполнения, "ВыделенныеСтроки"); + Если ТипЗнч(ВыделенныеСтроки) = Тип("Структура") Тогда + Для Каждого КлючИЗначение Из ВыделенныеСтроки Цикл + ОтчетыСервер.ВосстановитьВыделенныеСтроки(ЭтотОбъект, КлючИЗначение.Ключ, КлючИЗначение.Значение); + КонецЦикла; + КонецЕсли; +КонецПроцедуры + +&НаСервере +Процедура БыстрыеНастройкиЗагрузитьНастройкиВКомпоновщик(ПараметрыЗаполнения) + Если ПараметрыЗаполнения.Свойство("КомпоновщикНастроекКД") Тогда + Отчет.КомпоновщикНастроек.ЗагрузитьНастройки(ПараметрыЗаполнения.КомпоновщикНастроекКД.Настройки); + Отчет.КомпоновщикНастроек.ЗагрузитьПользовательскиеНастройки(ПараметрыЗаполнения.КомпоновщикНастроекКД.ПользовательскиеНастройки); + КонецЕсли; + + Если ПараметрыЗаполнения.Свойство("НастройкиКД") Тогда + Отчет.КомпоновщикНастроек.ЗагрузитьНастройки(ПараметрыЗаполнения.НастройкиКД); + КонецЕсли; + + Если ПараметрыЗаполнения.Свойство("ПользовательскиеНастройкиКД") Тогда + Отчет.КомпоновщикНастроек.ЗагрузитьПользовательскиеНастройки(ПараметрыЗаполнения.ПользовательскиеНастройкиКД); + КонецЕсли; + + ОбновитьНастройкиВарианта = ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(ПараметрыЗаполнения, "ОбновитьНастройкиВарианта", Ложь); + Если ОбновитьНастройкиВарианта Тогда + ИнформацияОбОшибке = Неопределено; + Попытка + НастройкиКД = Отчет.КомпоновщикНастроек.ПолучитьНастройки(); + Исключение + ИнформацияОбОшибке = ИнформацияОбОшибке(); + КонецПопытки; + Если ИнформацияОбОшибке <> Неопределено Тогда + СтандартныеПодсистемыКлиентСервер.ВывестиИнформациюОбОшибке( + ПараметрыЗаполнения.Результат, + НСтр("ru = 'Не удалось получить настройки отчета:'"), + ИнформацияОбОшибке); + ПараметрыЗаполнения.Прервать = Истина; + Возврат; + КонецЕсли; + Отчет.КомпоновщикНастроек.ЗагрузитьФиксированныеНастройки(Новый НастройкиКомпоновкиДанных); + Отчет.КомпоновщикНастроек.ЗагрузитьНастройки(НастройкиКД); + КонецЕсли; + + СброситьПользовательскиеНастройки = ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(ПараметрыЗаполнения, "СброситьПользовательскиеНастройки", Ложь); + Если СброситьПользовательскиеНастройки Тогда + ПустойКомпоновщик = Новый КомпоновщикНастроекКомпоновкиДанных; + Отчет.КомпоновщикНастроек.ЗагрузитьПользовательскиеНастройки(ПустойКомпоновщик.ПользовательскиеНастройки); + КонецЕсли; + + УсловияОтборов = ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(ПараметрыЗаполнения, "УсловияОтборов"); + Если УсловияОтборов <> Неопределено Тогда + УзелКД = Отчет.КомпоновщикНастроек.ПользовательскиеНастройки; + Для Каждого КлючИЗначение Из УсловияОтборов Цикл + ПользовательскаяНастройкаКД = УзелКД.ПолучитьОбъектПоИдентификатору(КлючИЗначение.Ключ); + ПользовательскаяНастройкаКД.ВидСравнения = КлючИЗначение.Значение; + КонецЦикла; + КонецЕсли; + + Если ПараметрыЗаполнения.ВариантМодифицирован Тогда + ВариантИзменен = Истина; + КонецЕсли; + Если ПараметрыЗаполнения.ПользовательскиеНастройкиМодифицированы Тогда + ПользовательскиеНастройкиМодифицированы = Истина; + КонецЕсли; +КонецПроцедуры + +&НаСервере +Процедура БыстрыеНастройкиУдалитьСтарыеЭлементыИКоманды(ПараметрыЗаполнения) + // Удаление элементов. + УдаляемыеЭлементы = Новый Массив; + ДобавитьПодчиненныеЭлементы(УдаляемыеЭлементы, Элементы.БыстрыеОтборы.ПодчиненныеЭлементы); + ДобавитьПодчиненныеЭлементы(УдаляемыеЭлементы, Элементы.ОбычныеОтборы.ПодчиненныеЭлементы); + ДобавитьПодчиненныеЭлементы(УдаляемыеЭлементы, Элементы.СтраницаДополнительноШапка.ПодчиненныеЭлементы); + ДобавитьПодчиненныеЭлементы(УдаляемыеЭлементы, Элементы.СтраницаДополнительноГруппировки.ПодчиненныеЭлементы); + ДобавитьПодчиненныеЭлементы(УдаляемыеЭлементы, Элементы.СтраницаДополнительноПодвал.ПодчиненныеЭлементы); + Для Каждого Элемент Из УдаляемыеЭлементы Цикл + Элементы.Удалить(Элемент); + КонецЦикла; + + // Удаление команд + УдаляемыеКоманды = Новый Массив; + Для Каждого Команда Из Команды Цикл + Если ПостоянныеКоманды.НайтиПоЗначению(Команда.Имя) = Неопределено Тогда + УдаляемыеКоманды.Добавить(Команда); + КонецЕсли; + КонецЦикла; + Для Каждого Команда Из УдаляемыеКоманды Цикл + Команды.Удалить(Команда); + КонецЦикла; +КонецПроцедуры + +&НаСервере +Процедура ДобавитьПодчиненныеЭлементы(Куда, Откуда) + Для Каждого ПодчиненныйЭлемент Из Откуда Цикл + Если ТипЗнч(ПодчиненныйЭлемент) = Тип("ГруппаФормы") + Или ТипЗнч(ПодчиненныйЭлемент) = Тип("ТаблицаФормы") Тогда + ДобавитьПодчиненныеЭлементы(Куда, ПодчиненныйЭлемент.ПодчиненныеЭлементы); + КонецЕсли; + Куда.Добавить(ПодчиненныйЭлемент); + КонецЦикла; +КонецПроцедуры + +&НаСервере +Процедура БыстрыеНастройкиСоздатьЭлементыУправленияИЗагрузитьЗначения(ПараметрыЗаполнения, Информация) + // Кэши для быстрого поиска с клиента. + СоответствиеПользовательскихНастроек = Новый Соответствие; + СоответствиеИменОбъектовМетаданных = Информация.СоответствиеИменОбъектовМетаданных; + СоответствиеОтключаемыхСвязей = Новый Соответствие; + СоответствиеНастроекВарианта = Новый Соответствие; + + // Удаление реквизитов + ПараметрыЗаполнения.Вставить("Реквизиты", Новый Структура); + ПараметрыЗаполнения.Реквизиты.Вставить("Добавляемые", Новый Массив); + ПараметрыЗаполнения.Реквизиты.Вставить("Удаляемые", Новый Массив); + ПараметрыЗаполнения.Реквизиты.Вставить("Существующие", Новый Соответствие); + ОписаниеТиповТаблицаЗначений = Новый ОписаниеТипов("ТаблицаЗначений"); + ВсеРеквизиты = ПолучитьРеквизиты(); + Для Каждого Реквизит Из ВсеРеквизиты Цикл + РеквизитПолноеИмя = ПолноеИмяРеквизита(Реквизит); + Если ПостоянныеРеквизиты.НайтиПоЗначению(РеквизитПолноеИмя) = Неопределено Тогда + ПараметрыЗаполнения.Реквизиты.Существующие.Вставить(РеквизитПолноеИмя, Реквизит.ТипЗначения); + Подчиненные = ПолучитьРеквизиты(РеквизитПолноеИмя); + Если ОтчетыСервер.ОписанияТиповСовпадают(Реквизит.ТипЗначения, ОписаниеТиповТаблицаЗначений) Тогда + Для Каждого Подчиненный Из Подчиненные Цикл + ПодчиненныйПолноеИмя = ПолноеИмяРеквизита(Подчиненный); + ПараметрыЗаполнения.Реквизиты.Существующие.Вставить(ПодчиненныйПолноеИмя, Подчиненный.ТипЗначения); + КонецЦикла; + КонецЕсли; + КонецЕсли; + КонецЦикла; + + // Локальные переменные для установки значений и свойств после создания реквизитов. + ДобавленныеПоляВвода = Новый Структура; + ДобавленныеСпискиЗначений = Новый Массив; + ДобавленныеСтандартныеПериоды = Новый Массив; + + // Структура связей. + Связи = Информация.Связи; + + ИменаОсновныхРеквизитовФормы = Новый Соответствие; + ИменаЭлементовДляУстановкиСвязей = Новый Соответствие; + НастройкиСВидомСравненияРавно = Новый Соответствие; + + КомпоновщикНастроекКД = Отчет.КомпоновщикНастроек; + ПользовательскиеНастройкиКД = КомпоновщикНастроекКД.ПользовательскиеНастройки; + НастройкиКД = КомпоновщикНастроекКД.Настройки; + + ДополнительныеНастройкиЭлементов = ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(ПользовательскиеНастройкиКД.ДополнительныеСвойства, "ЭлементыФормы"); + Если ДополнительныеНастройкиЭлементов = Неопределено Тогда + ДополнительныеНастройкиЭлементов = Новый Соответствие; + КонецЕсли; + + Режимы = РежимОтображенияЭлементаНастройкиКомпоновкиДанных; + + ГруппыВывода = Новый Структура; + ГруппыВывода.Вставить("БыстрыеОтборы", Новый Структура("Порядок, Размер", Новый Массив, 0)); + ГруппыВывода.Вставить("ОбычныеОтборы", Новый Структура("Порядок, Размер", Новый Массив, 0)); + ГруппыВывода.Вставить("ДополнительныеШапка", Новый Структура("Порядок, Размер", Новый Массив, 0)); + ГруппыВывода.Вставить("ДополнительныеПодвал", Новый Структура("Порядок, Размер", Новый Массив, 0)); + ГруппыВывода.Вставить("ДополнительныеЗакладки", Новый СписокЗначений); + ДополнительныеЗакладкиПоиск = Новый Соответствие; + + ОтчетОбъект = Неопределено; + + ЕстьЗагрузкаДанныхИзФайла = ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ЗагрузкаДанныхИзФайла"); + + Если РежимИзмененияУзлаВарианта Тогда + ВыводимыеНастройки = Новый Массив; + Иначе + ВыводимыеНастройки = Информация.ПользовательскиеНастройки.Скопировать(Новый Структура("ВыводРазрешен", Истина)); + ВыводимыеНастройки.Сортировать("ИндексВКоллекции Возр"); + КонецЕсли; + + ВыводимыеТипыНастроек = Новый Массив; + Если РасширенныйРежим <> 1 Тогда + ВыводимыеТипыНастроек.Добавить("ЭлементОтбора"); + ВыводимыеТипыНастроек.Добавить("ГруппаЭлементовОтбора"); + ВыводимыеТипыНастроек.Добавить("ЗначениеПараметраНастроек"); + ВыводимыеТипыНастроек.Добавить("ЭлементУсловногоОформления"); + КонецЕсли; + + Прочее = Новый Структура; + Прочее.Вставить("Связи", Связи); + Прочее.Вставить("ОтчетОбъект", Неопределено); + Прочее.Вставить("ПараметрыЗаполнения", ПараметрыЗаполнения); + Прочее.Вставить("ПутьККомпоновщику", "Отчет.КомпоновщикНастроек"); + Прочее.Вставить("ЕстьЗагрузкаДанныхИзФайла", ЕстьЗагрузкаДанныхИзФайла); + Прочее.Вставить("ДополнительныеНастройкиЭлементов", ДополнительныеНастройкиЭлементов); + Прочее.Вставить("ИменаОсновныхРеквизитовФормы", ИменаОсновныхРеквизитовФормы); + Прочее.Вставить("ИменаЭлементовДляУстановкиСвязей", ИменаЭлементовДляУстановкиСвязей); + Прочее.Вставить("СоответствиеИменОбъектовМетаданных", СоответствиеИменОбъектовМетаданных); + Прочее.Вставить("ДобавленныеПоляВвода", ДобавленныеПоляВвода); + Прочее.Вставить("ДобавленныеСтандартныеПериоды", ДобавленныеСтандартныеПериоды); + Прочее.Вставить("ДобавленныеСпискиЗначений", ДобавленныеСпискиЗначений); + Прочее.Вставить("ЕстьОтборыСУсловиями", Ложь); + + Для Каждого СвойстваНастройки Из ВыводимыеНастройки Цикл + НастройкаВарианта = СвойстваНастройки.НастройкаВарианта; + Если НастройкаВарианта = Неопределено Тогда + Продолжить; + КонецЕсли; + + Если (СвойстваНастройки.Тип = "ВыбранныеПоля" + Или СвойстваНастройки.Тип = "Отбор" + Или СвойстваНастройки.Тип = "Порядок") + И СвойстваНастройки.СтрокаДерева = Информация.ДеревоВариантаКорневаяСтрока Тогда + // Регистрация в информации о пользовательских настройках. + ТаблицаИмя = СвойстваНастройки.Тип; + Если ТаблицаИмя = "Порядок" Тогда + ТаблицаИмя = "Сортировка"; + КонецЕсли; + СоответствиеПользовательскихНастроек.Вставить(ТаблицаИмя, СвойстваНастройки.ИдентификаторКД); + Продолжить; // Вывод не требуется. + КонецЕсли; + + Если ВыводимыеТипыНастроек.Найти(СвойстваНастройки.Тип) = Неопределено Тогда + Продолжить; + КонецЕсли; + + СоответствиеПользовательскихНастроек.Вставить(СвойстваНастройки.ИдентификаторЭлемента, СвойстваНастройки.ИдентификаторКД); + + ПоискНастройкиВарианта = Новый Структура; + ПоискНастройкиВарианта.Вставить("ИдентификаторУзлаКД", СвойстваНастройки.СтрокаДерева.ИдентификаторКД); + ПоискНастройкиВарианта.Вставить("ИмяКоллекции", НастройкаВарианта.ИмяКоллекции); + ПоискНастройкиВарианта.Вставить("ИдентификаторЭлементаКД", НастройкаВарианта.ИдентификаторКД); + СоответствиеНастроекВарианта.Вставить(СвойстваНастройки.ИдентификаторЭлемента, ПоискНастройкиВарианта); + + // Определение группы для вывода. + Если СвойстваНастройки.Тип = "ЭлементУсловногоОформления" Тогда + // Определение раздела. + КорневаяСтрокаДереваВарианта = Неопределено; + ТекущаяСтрока = СвойстваНастройки.СтрокаДерева; + Пока ТекущаяСтрока <> Неопределено Цикл + Если ЗначениеЗаполнено(ТекущаяСтрока.Заголовок) И ТекущаяСтрока.УзелКД <> НастройкиКД Тогда + КорневаяСтрокаДереваВарианта = ТекущаяСтрока; + КонецЕсли; + ТекущаяСтрока = ТекущаяСтрока.Родитель; + КонецЦикла; + Если КорневаяСтрокаДереваВарианта = Неопределено Тогда // Раздел не найден. Вывод в основную часть. + ГруппаВывода = ГруппыВывода.ДополнительныеПодвал; + Иначе // Раздел найден. Вывод в группу на закладке "Дополнительно": + ЗаголовокЗакладки = КорневаяСтрокаДереваВарианта.Заголовок; + ГруппаВывода = ДополнительныеЗакладкиПоиск.Получить(ЗаголовокЗакладки); + Если ГруппаВывода = Неопределено Тогда + ГруппаВывода = Новый Структура("Порядок, Размер", Новый Массив, 0); + ГруппаВывода.Вставить("Заголовок", ЗаголовокЗакладки); + ГруппаВывода.Вставить("ИмяФлажка", ""); + ГруппыВывода.ДополнительныеЗакладки.Добавить(ГруппаВывода, ЗаголовокЗакладки); + ДополнительныеЗакладкиПоиск.Вставить(ЗаголовокЗакладки, ГруппаВывода); + КонецЕсли; + КонецЕсли; + Иначе + Если СвойстваНастройки.Быстрая Тогда + ГруппаВывода = ГруппыВывода.БыстрыеОтборы; + Иначе + ГруппаВывода = ГруппыВывода.ОбычныеОтборы; + КонецЕсли; + КонецЕсли; + + //////////////////////////////////////////////////////////////////////////////// + // Генератор + + ОтчетыСервер.ВывестиЭлементыНастройки(ЭтотОбъект, Элементы, СвойстваНастройки, ГруппаВывода, Прочее); + КонецЦикла; + + Элементы.ИзменитьУсловияОтборов.Видимость = Прочее.ЕстьОтборыСУсловиями; + + ОтчетыСервер.ВывестиПоПорядку(ЭтотОбъект, ГруппыВывода.БыстрыеОтборы, Элементы.БыстрыеОтборы, 2, Ложь); + ОтчетыСервер.ВывестиПоПорядку(ЭтотОбъект, ГруппыВывода.ОбычныеОтборы, Элементы.ОбычныеОтборы, 2, Ложь); + ОтчетыСервер.ВывестиПоПорядку(ЭтотОбъект, ГруппыВывода.ДополнительныеШапка, Элементы.СтраницаДополнительноШапка, 1); + ОтчетыСервер.ВывестиПоПорядку(ЭтотОбъект, ГруппыВывода.ДополнительныеПодвал, Элементы.СтраницаДополнительноПодвал, 1); + + НомерДополнительнойГруппы = 0; + Для Каждого ОписаниеЗакладки Из ГруппыВывода.ДополнительныеЗакладки Цикл + НомерДополнительнойГруппы = НомерДополнительнойГруппы + 1; + ГруппаВывода = ОписаниеЗакладки.Значение; + + ГруппаИмя = "ГруппаНастроек_" + Строка(НомерДополнительнойГруппы); + КолонкиИмя = "ГруппаНастроек_Колонки_" + Строка(НомерДополнительнойГруппы); + ОтступИмя = "ГруппаНастроек_Отступ_" + Строка(НомерДополнительнойГруппы); + + ТекущаяГруппа = Элементы.Добавить(ГруппаИмя, Тип("ГруппаФормы"), Элементы.СтраницаДополнительноГруппировки); + ТекущаяГруппа.Вид = ВидГруппыФормы.ОбычнаяГруппа; + ТекущаяГруппа.Группировка = ГруппировкаПодчиненныхЭлементовФормы.Вертикальная; + ТекущаяГруппа.Заголовок = ГруппаВывода.Заголовок; + ТекущаяГруппа.Отображение = ОтображениеОбычнойГруппы.Нет; + ТекущаяГруппа.ОтображатьЗаголовок = Истина; + ТекущаяГруппа.ШрифтЗаголовка = Новый Шрифт(ШрифтыСтиля.ОбычныйШрифтТекста, , , Истина); + ТекущаяГруппа.ЦветТекстаЗаголовка = ЦветаСтиля.ЦветТекстаПоля; + + Если ГруппаВывода.ИмяФлажка <> "" Тогда + ТекущаяГруппа.ОтображатьЗаголовок = Ложь; + Флажок = Элементы[ГруппаВывода.ИмяФлажка]; + Флажок.Заголовок = ГруппаВывода.Заголовок; + Элементы.Переместить(Флажок, ТекущаяГруппа); + КонецЕсли; + + Если ГруппаВывода.Размер > 0 Тогда + Колонки = Элементы.Добавить(КолонкиИмя, Тип("ГруппаФормы"), ТекущаяГруппа); + Колонки.Вид = ВидГруппыФормы.ОбычнаяГруппа; + Колонки.Группировка = ГруппировкаПодчиненныхЭлементовФормы.Горизонтальная; + Колонки.Отображение = ОтображениеОбычнойГруппы.Нет; + Колонки.ОтображатьЗаголовок = Ложь; + + Отступ = Элементы.Добавить(ОтступИмя, Тип("ДекорацияФормы"), Колонки); + Отступ.Вид = ВидДекорацииФормы.Надпись; + Отступ.Заголовок = " "; + + ОтчетыСервер.ВывестиПоПорядку(ЭтотОбъект, ГруппаВывода, Колонки, 1); + КонецЕсли; + КонецЦикла; + + // Удаление старых и добавление новых реквизитов. + Для Каждого КлючИЗначение Из ПараметрыЗаполнения.Реквизиты.Существующие Цикл + ПараметрыЗаполнения.Реквизиты.Удаляемые.Добавить(КлючИЗначение.Ключ); + КонецЦикла; + ИзменитьРеквизиты(ПараметрыЗаполнения.Реквизиты.Добавляемые, ПараметрыЗаполнения.Реквизиты.Удаляемые); + + // Поля ввода (установка значений и связей). + Для Каждого КлючИЗначение Из ДобавленныеПоляВвода Цикл + ИмяРеквизита = КлючИЗначение.Ключ; + ЭтотОбъект[ИмяРеквизита] = КлючИЗначение.Значение; + Элементы[ИмяРеквизита].ПутьКДанным = ИмяРеквизита; + КонецЦикла; + + // Стандартные периоды (установка значений и связей). + Для Каждого СвойстваНастройки Из ДобавленныеСтандартныеПериоды Цикл + Дополнительно = СвойстваНастройки.Дополнительно; + ЭтотОбъект[Дополнительно.ЗначениеИмя] = СвойстваНастройки.Значение; + ЭтотОбъект[Дополнительно.ВидПериодаИмя] = Дополнительно.ВидПериода; + ЭтотОбъект[Дополнительно.ПредставлениеИмя] = Дополнительно.Представление; + Элементы[Дополнительно.ВидПериодаИмя].ПутьКДанным = Дополнительно.ВидПериодаИмя; + Элементы[Дополнительно.ПредставлениеИмя].ПутьКДанным = Дополнительно.ПредставлениеИмя; + Элементы[Дополнительно.ПериодНачалоИмя].ПутьКДанным = Дополнительно.ЗначениеИмя + ".ДатаНачала"; + Элементы[Дополнительно.ПериодОкончаниеИмя].ПутьКДанным = Дополнительно.ЗначениеИмя + ".ДатаОкончания"; + КонецЦикла; + + // Поля подбора (установка значений и связей). + Для Каждого СвойстваНастройки Из ДобавленныеСпискиЗначений Цикл + Дополнительно = СвойстваНастройки.Дополнительно; + ТаблицаИмя = Дополнительно.ТаблицаИмя; + ТаблицаФормы = Элементы[ТаблицаИмя]; + КолонкаИспользование = Элементы[Дополнительно.ИмяКолонкиИспользование]; + КолонкаЗначение = Элементы[Дополнительно.ИмяКолонкиЗначение]; + СписокСФлажками = Новый СписокЗначений; + + ТипНеопределено = Тип("Неопределено"); + ОписаниеТиповНеопределено = Новый ОписаниеТипов("Неопределено"); + Количество = СвойстваНастройки.ОтмеченныеЗначения.Количество(); + Для Номер = 1 По Количество Цикл + ОбратныйИндекс = Количество - Номер; + ЭлементСписка = СвойстваНастройки.ОтмеченныеЗначения[ОбратныйИндекс]; + Значение = ЭлементСписка.Значение; + Если Не ЗначениеЗаполнено(ЭлементСписка.Представление) + И (Значение = Неопределено + Или Значение = ТипНеопределено + Или Значение = ОписаниеТиповНеопределено + Или Не ЗначениеЗаполнено(Значение)) Тогда + СвойстваНастройки.ОтмеченныеЗначения.Удалить(ОбратныйИндекс); + Продолжить; // Запрет пустых значений. + КонецЕсли; + Если СвойстваНастройки.ОграничиватьВыборУказаннымиЗначениями + И СвойстваНастройки.ЗначенияДляВыбора.НайтиПоЗначению(Значение) = Неопределено Тогда + СвойстваНастройки.ОтмеченныеЗначения.Удалить(ОбратныйИндекс); + Продолжить; // Выбранное значение не входит в список доступных для выбора. + КонецЕсли; + ОтчетыКлиентСервер.ДобавитьУникальноеЗначениеВСписок(СписокСФлажками, Значение, ЭлементСписка.Представление, Истина); + КонецЦикла; + + Для Каждого ЭлементСписка Из СвойстваНастройки.ЗначенияДляВыбора Цикл + ОтчетыКлиентСервер.ДобавитьУникальноеЗначениеВСписок(СписокСФлажками, ЭлементСписка.Значение, ЭлементСписка.Представление, Ложь); + КонецЦикла; + + СписокСФлажками.СортироватьПоПредставлению(НаправлениеСортировки.Возр); + + ЭтотОбъект[ТаблицаИмя] = СписокСФлажками; + ЭтотОбъект[ТаблицаИмя].ТипЗначения = СвойстваНастройки.ОписаниеТипов; + ТаблицаФормы.ПутьКДанным = ТаблицаИмя; + КолонкаЗначение.ПутьКДанным = ТаблицаИмя + ".Значение"; + КолонкаИспользование.ПутьКДанным = ТаблицаИмя + ".Пометка"; + + // Некоторые обработчики событий можно подключить только после установки связи элементов с данными. + ТаблицаФормы.УстановитьДействие("ПередНачаломИзменения", "Подключаемый_СписокСПодбором_ПередНачаломИзменения"); + ТаблицаФормы.УстановитьДействие("ПередОкончаниемРедактирования", "Подключаемый_СписокСПодбором_ПередОкончаниемРедактирования"); + ТаблицаФормы.УстановитьДействие("ПриИзменении", "Подключаемый_СписокСПодбором_ПриИзменении"); + Если СвойстваНастройки.ОграничиватьВыборУказаннымиЗначениями Тогда + ТаблицаФормы.УстановитьДействие("ПередНачаломДобавления", "Подключаемый_ФиксированныйСписок_ПередНачаломДобавления"); + ТаблицаФормы.УстановитьДействие("ПередУдалением", "Подключаемый_ФиксированныйСписок_ПередУдалением"); + Иначе + ТаблицаФормы.УстановитьДействие("ОбработкаВыбора", "Подключаемый_СписокСПодбором_ОбработкаВыбора"); + КолонкаЗначение.УстановитьДействие("АвтоПодбор", "Подключаемый_СписокСПодбором_Значение_АвтоПодбор"); + КонецЕсли; + КолонкаИспользование.УстановитьДействие("ПриИзменении", "Подключаемый_СписокСПодбором_Использование_ПриИзменении"); + КонецЦикла; + + // Сохранение соответствий для быстрого поиска в данные формы. + БыстрыйПоискПользовательскихНастроек = Новый ФиксированноеСоответствие(СоответствиеПользовательскихНастроек); + БыстрыйПоискИменОбъектовМетаданных = Новый ФиксированноеСоответствие(СоответствиеИменОбъектовМетаданных); + БыстрыйПоискОтключаемыхСвязей = Новый ФиксированноеСоответствие(СоответствиеОтключаемыхСвязей); + БыстрыйПоискНастроекВарианта = Новый ФиксированноеСоответствие(СоответствиеНастроекВарианта); + + ПользовательскиеНастройкиКД.ДополнительныеСвойства.Вставить("ЭлементыФормы", ДополнительныеНастройкиЭлементов); +КонецПроцедуры + +&НаСервере +Функция ПолноеИмяРеквизита(Реквизит) + Возврат ?(ПустаяСтрока(Реквизит.Путь), "", Реквизит.Путь + ".") + Реквизит.Имя; +КонецФункции + +&НаСервере +Процедура РасширенныеНастройкиЗагрузитьЗначения(ПараметрыЗаполнения, Информация) + Если РежимИзмененияУзлаВарианта Тогда + Найденные = Информация.ДеревоВарианта.Строки.НайтиСтроки(Новый Структура("ИдентификаторКД", ИдентификаторТекущегоУзлаКД), Истина); + КорневаяСтрока = Найденные[0]; + Иначе + КорневаяСтрока = Информация.ДеревоВариантаКорневаяСтрока; + КонецЕсли; + Информация.Вставить("ТекущаяСтрокаДерева", КорневаяСтрока); + Информация.НастройкиВарианта.Колонки.Добавить("ИдентификаторВФорме"); + + Если РежимИзмененияУзлаВарианта И ТипТекущегоУзлаКД <> "Диаграмма" Тогда + СоставГруппировки.ПолучитьЭлементы().Очистить(); + ЗарегистрироватьЭлементыСоставаГруппировки(); + Иначе + Элементы.СтраницаСоставГруппировки.Видимость = Ложь; + КонецЕсли; + + ВыбранныеПоля.ПолучитьЭлементы().Очистить(); + ВидимостьВыбранныхПолей = ЗарегистрироватьЭлементыВыбранныхПолей(); + Если ВидимостьВыбранныхПолей Тогда + СтандартныеПодсистемыКлиентСервер.РазвернутьУзлыДерева(ПараметрыЗаполнения.Результат, "ВыбранныеПоля", "*", Истина); + КонецЕсли; + + ВидимостьСортировок = Ложь; + Если ТипТекущегоУзлаКД <> "Диаграмма" Тогда + Сортировка.ПолучитьЭлементы().Очистить(); + ВидимостьСортировок = ЗарегистрироватьЭлементыСортировки(); + КонецЕсли; + Если ВидимостьСортировок Тогда + СтандартныеПодсистемыКлиентСервер.РазвернутьУзлыДерева(ПараметрыЗаполнения.Результат, "Сортировка", "*", Истина); + КонецЕсли; + + ВидимостьТаблицыОтборов = (РасширенныйРежим = 1 И ТипТекущегоУзлаКД <> "Диаграмма"); + Если ВидимостьТаблицыОтборов Тогда + Отборы.ПолучитьЭлементы().Очистить(); + ЗарегистрироватьПараметры(Информация); + ЗарегистрироватьЭлементыОтборов(Информация); + СтандартныеПодсистемыКлиентСервер.РазвернутьУзлыДерева(ПараметрыЗаполнения.Результат, "Отборы", "*", Истина); + КонецЕсли; + + ВидимостьУсловногоОформления = (РасширенныйРежим = 1); + Если ВидимостьУсловногоОформления Тогда + Оформление.ПолучитьЭлементы().Очистить(); + ЗарегистрироватьЭлементыОформления(Информация); + СтандартныеПодсистемыКлиентСервер.РазвернутьУзлыДерева(ПараметрыЗаполнения.Результат, "Оформление", "*", Истина); + КонецЕсли; + + Если ВидимостьВыбранныхПолей И ВидимостьСортировок Тогда + Элементы.СтраницаВыбранныеПоляИСортировки.Заголовок = НСтр("ru = 'Поля и сортировки'"); + ИначеЕсли ВидимостьВыбранныхПолей Тогда + Элементы.СтраницаВыбранныеПоляИСортировки.Заголовок = НСтр("ru = 'Поля'"); + ИначеЕсли ВидимостьСортировок Тогда + Элементы.СтраницаВыбранныеПоляИСортировки.Заголовок = НСтр("ru = 'Сортировки'"); + КонецЕсли; + + Если РасширенныйРежим = 1 И Не РежимИзмененияУзлаВарианта Тогда + Элементы.ГруппаЕстьВложенныеОтчеты.Видимость = Информация.ЕстьВложенныеОтчеты; + Элементы.ГруппаЕстьВложенныеОтборы.Видимость = Информация.ЕстьВложенныеОтборы; + Элементы.ГруппаЕстьВложенноеОформление.Видимость = Информация.ЕстьВложенноеОформление; + Элементы.ГруппаЕстьВложенныеПоляИлиСортировки.Видимость = Информация.ЕстьВложенныеПоля Или Информация.ЕстьВложенныеСортировки; + Иначе + Элементы.ГруппаЕстьВложенныеОтчеты.Видимость = Ложь; + Элементы.ГруппаЕстьВложенныеОтборы.Видимость = Ложь; + Элементы.ГруппаЕстьВложенноеОформление.Видимость = Ложь; + Элементы.ГруппаЕстьВложенныеПоляИлиСортировки.Видимость = Ложь; + КонецЕсли; + + Если ТипТекущегоУзлаКД = "Диаграмма" Тогда + Элементы.ТекущийУзелКДТипДиаграммы.Видимость = Истина; + Элементы.ТекущийУзелКДТипДиаграммы.ОграничениеТипа = Новый ОписаниеТипов("ТипДиаграммы"); + + КорневойУзелКД = Отчет.КомпоновщикНастроек.Настройки.ПолучитьОбъектПоИдентификатору(ИдентификаторТекущегоУзлаКД); + Если ТипЗнч(КорневойУзелКД) = Тип("НастройкиВложенногоОбъектаКомпоновкиДанных") Тогда + КорневойУзелКД = КорневойУзелКД.Настройки; + КонецЕсли; + ПараметрКД = КорневойУзелКД.ПараметрыВывода.НайтиЗначениеПараметра(Новый ПараметрКомпоновкиДанных("ТипДиаграммы")); + Если ПараметрКД = Неопределено Тогда + Элементы.ТекущийУзелКДТипДиаграммы.Видимость = Ложь; + Иначе + ТекущийУзелКДТипДиаграммы = ПараметрКД.Значение; + КонецЕсли; + Иначе + Элементы.ТекущийУзелКДТипДиаграммы.Видимость = Ложь; + КонецЕсли; + + ВидимостьСтруктуры = Ложь; + Если Не РежимИзмененияУзлаВарианта И КорневаяСтрока.Тип <> "НастройкиВложенногоОбъекта" Тогда + СтрокиРодителя = СтруктураВарианта.ПолучитьЭлементы(); + СтрокиРодителя.Очистить(); + ЕстьФлажки = ЗарегистрироватьЭлементСтруктурыОтчета(КорневаяСтрока, СтрокиРодителя); + СтандартныеПодсистемыКлиентСервер.РазвернутьУзлыДерева(ПараметрыЗаполнения.Результат, "СтруктураВарианта", "*", Истина); + ВидимостьСтруктуры = ЕстьФлажки Или РасширенныйРежим = 1; + КонецЕсли; + + Если Не Информация.ЕстьБыстрыеНастройки + И Не Информация.ЕстьОбычныеНастройки + И Не ВидимостьСтруктуры + И Не ВидимостьУсловногоОформления + И Не ВидимостьВыбранныхПолей + И Не ВидимостьСортировок + И Не ВидимостьТаблицыОтборов Тогда + Элементы.СтраницаНетПользовательскихНастроек.Видимость = Истина; + Элементы.СтраницыНастроек.ОтображениеСтраниц = ОтображениеСтраницФормы.Нет; + Элементы.СтраницыНастроек.ТекущаяСтраница = Элементы.СтраницаНетПользовательскихНастроек; + Элементы.ЗакрытьИСформировать.Видимость = Ложь; + Иначе + Элементы.СтраницаВыбранныеПоляИСортировки.Видимость = ВидимостьВыбранныхПолей Или ВидимостьСортировок; + Элементы.ВыбранныеПоля.Видимость = ВидимостьВыбранныхПолей; + Элементы.Сортировка.Видимость = ВидимостьСортировок; + Элементы.КомандыПолейИСортировок.Видимость = ВидимостьВыбранныхПолей И ВидимостьСортировок; + Элементы.ГруппаОтборыРасширенныйРежим.Видимость = ВидимостьТаблицыОтборов; + Элементы.ГруппаОформлениеРасширенныйРежим.Видимость = ВидимостьУсловногоОформления; + Элементы.СтраницаСтруктураВарианта.Видимость = ВидимостьСтруктуры; + Элементы.СтраницаНетПользовательскихНастроек.Видимость = Ложь; + Элементы.СтраницыНастроек.ОтображениеСтраниц = ОтображениеСтраницФормы.ЗакладкиСверху; + Элементы.ЗакрытьИСформировать.Видимость = Истина; + КонецЕсли; + + // Видимость элементов. + Элементы.КомандыСтруктурыВарианта_Добавление.Видимость = (РасширенныйРежим = 1); + Элементы.КомандыСтруктурыВарианта_Добавление1.Видимость = (РасширенныйРежим = 1); + Элементы.КомандыСтруктурыВарианта_Изменение.Видимость = (РасширенныйРежим = 1); + Элементы.КомандыСтруктурыВарианта_Изменение1.Видимость = (РасширенныйРежим = 1); + Элементы.КомандыСтруктурыВарианта_ДвижениеПоИерархии.Видимость = (РасширенныйРежим = 1); + Элементы.КомандыСтруктурыВарианта_ДвижениеПоИерархии1.Видимость = (РасширенныйРежим = 1); + Элементы.КомандыСтруктурыВарианта_ДвижениеВнутриРодителя.Видимость = (РасширенныйРежим = 1); + Элементы.КомандыСтруктурыВарианта_ДвижениеВнутриРодителя1.Видимость = (РасширенныйРежим = 1); + Элементы.СтруктураВарианта.ИзменятьСоставСтрок = (РасширенныйРежим = 1); + Элементы.СтруктураВарианта.ИзменятьПорядокСтрок = (РасширенныйРежим = 1); + Элементы.СтруктураВарианта.РазрешитьНачалоПеретаскивания = (РасширенныйРежим = 1); + Элементы.СтруктураВарианта.РазрешитьПеретаскивание = (РасширенныйРежим = 1); + Элементы.СтруктураВарианта.Шапка = (РасширенныйРежим = 1); + Элементы.СтруктураВариантаЗаголовок.Видимость = (РасширенныйРежим = 1); + Элементы.СтруктураВариантаСодержитОтборы.Видимость = (РасширенныйРежим = 1); + Элементы.СтруктураВариантаСодержитПоляИлиСортировки.Видимость = (РасширенныйРежим = 1); + Элементы.СтруктураВариантаСодержитУсловноеОформление.Видимость = (РасширенныйРежим = 1); + Элементы.КомандыВыбранныхПолей_ДобавлениеУдаление.Видимость = (РасширенныйРежим = 1); + Элементы.КомандыВыбранныхПолей_ДобавлениеУдаление1.Видимость = (РасширенныйРежим = 1); + Элементы.КомандыВыбранныхПолей_Группы.Видимость = (РасширенныйРежим = 1); + Элементы.КомандыВыбранныхПолей_Группы1.Видимость = (РасширенныйРежим = 1); + Элементы.КомандыСортировки_ДобавлениеУдаление.Видимость = (РасширенныйРежим = 1) Или (ВидимостьСортировок И Не ВидимостьВыбранныхПолей); + Элементы.КомандыСортировки_ДобавлениеУдаление1.Видимость = (РасширенныйРежим = 1) Или (ВидимостьСортировок И Не ВидимостьВыбранныхПолей); +КонецПроцедуры + +&НаСервере +Функция ЗарегистрироватьЭлементСтруктурыОтчета(СтрокаДерева, СтрокиРодителя) + СтрокаФормы = СтрокиРодителя.Добавить(); + ЗаполнитьЗначенияСвойств(СтрокаФормы, СтрокаДерева, "ИдентификаторКД, Представление, Заголовок, Тип, Подтип, + |СодержитОтборы, СодержитУсловноеОформление"); + СтрокаФормы.СодержитПоляИлиСортировки = СтрокаДерева.СодержитПоля Или СтрокаДерева.СодержитСортировки; + + СтрокаФормы.ФлажокДоступен = Истина; + Если (РасширенныйРежим = 0 И СтрокаДерева.ПользовательскаяНастройка = Неопределено) + Или СтрокаДерева.Тип = "КоллекцияЭлементовСтруктурыДиаграммы" + Или СтрокаДерева.Тип = "КоллекцияЭлементовСтруктурыТаблицы" + Или СтрокаДерева.Тип = "Настройки" Тогда + СтрокаФормы.ФлажокДоступен = Ложь; + КонецЕсли; + + Если РасширенныйРежим = 0 И ЗначениеЗаполнено(СтрокаФормы.Заголовок) Тогда + СтрокаФормы.Представление = СтрокаФормы.Заголовок; + СтрокаФормы.Подсвечивать = Истина; + КонецЕсли; + + СтрокаФормы.ИндексКартинки = -1; + Если СтрокаДерева.Тип = "Группировка" + Или СтрокаДерева.Тип = "ГруппировкаТаблицы" + Или СтрокаДерева.Тип = "ГруппировкаДиаграммы" Тогда + СтрокаФормы.ИндексКартинки = 1; + ИначеЕсли СтрокаДерева.Тип = "Таблица" Тогда + СтрокаФормы.ИндексКартинки = 2; + ИначеЕсли СтрокаДерева.Тип = "Диаграмма" Тогда + СтрокаФормы.ИндексКартинки = 3; + ИначеЕсли СтрокаДерева.Тип = "НастройкиВложенногоОбъекта" Тогда + СтрокаФормы.ИндексКартинки = 4; + КонецЕсли; + + Если СтрокаФормы.Тип = "Настройки" Тогда + СтрокаФормы.ЭтоРаздел = Истина; + СтрокаФормы.Заголовок = ""; + СтрокаФормы.Представление = НСтр("ru = 'Отчет'"); + СтрокаФормы.СодержитОтборы = Ложь; + СтрокаФормы.СодержитПоляИлиСортировки = Ложь; + СтрокаФормы.СодержитУсловноеОформление = Ложь; + СтрокаФормы.Подсвечивать = Ложь; + КонецЕсли; + + Если СтрокаФормы.ФлажокДоступен Тогда + Если РасширенныйРежим = 0 Тогда + СтрокаФормы.ИдентификаторКД = СтрокаДерева.ПользовательскаяНастройка.ИдентификаторКД; + СтрокаФормы.Использование = СтрокаДерева.ПользовательскаяНастройка.ПользовательскаяНастройкаКД.Использование; + Иначе + СтрокаФормы.Использование = СтрокаДерева.УзелКД.Использование; + КонецЕсли; + КонецЕсли; + + ПодчиненныеСтрокиРодителя = СтрокаФормы.ПолучитьЭлементы(); + + ЕстьВложенныеФлажки = Ложь; + Для Каждого ПодчиненнаяСтрокаДерева Из СтрокаДерева.Строки Цикл + Если ЗарегистрироватьЭлементСтруктурыОтчета(ПодчиненнаяСтрокаДерева, ПодчиненныеСтрокиРодителя) Тогда + ЕстьВложенныеФлажки = Истина; + КонецЕсли; + КонецЦикла; + + Возврат СтрокаФормы.ФлажокДоступен Или ЕстьВложенныеФлажки; +КонецФункции + +&НаСервере +Функция ЗарегистрироватьЭлементыСортировки() + УзелКД = ТаблицыПолейНайтиУзел(ЭтотОбъект, "Сортировка", Неопределено); + Если УзелКД = Неопределено Тогда + Возврат Ложь; + КонецЕсли; + НаборСтрокКД = УзелКД.Элементы; + + СтрокаРаздел = Сортировка.ПолучитьЭлементы().Добавить(); + СтрокаРаздел.ЭтоРаздел = Истина; + СтрокаРаздел.Представление = НСтр("ru = 'Сортировки'"); + СтрокаРаздел.ИндексКартинки = 15; + СтрокаРаздел.ИдентификаторКД = Неопределено; + НаборСтрок = СтрокаРаздел.ПолучитьЭлементы(); + + ДоступныеПоля = УзелКД.ДоступныеПоляПорядка; + Для Каждого ЭлементКД Из НаборСтрокКД Цикл + ТипНастройки = ОтчетыКлиентСервер.ТипНастройкиСтрокой(ТипЗнч(ЭлементКД)); + Если ТипНастройки = "ЭлементПорядка" И Не ЗначениеЗаполнено(ЭлементКД.Поле) Тогда + Продолжить; + КонецЕсли; + + СтрокаТаблицы = НаборСтрок.Добавить(); + СтрокаТаблицы.ИдентификаторКД = УзелКД.ПолучитьИдентификаторПоОбъекту(ЭлементКД); + СтрокаТаблицы.ТипНастройки = ТипНастройки; + СтрокаТаблицы.Использование = ЭлементКД.Использование; + СтрокаТаблицы.ИндексКартинки = -1; + + Если ТипНастройки = "АвтоЭлементПорядка" Тогда + СтрокаТаблицы.Представление = НСтр("ru = 'Авто (сортировки родителя)'"); + ИначеЕсли ТипНастройки = "ЭлементПорядка" Тогда + СтрокаТаблицы.Направление = ЭлементКД.ТипУпорядочивания; + ДоступноеПоле = ДоступныеПоля.НайтиПоле(ЭлементКД.Поле); + Если ДоступноеПоле = Неопределено Тогда + СтрокаТаблицы.Представление = ОтчетыКлиентСервер.ИмяВПредставление(Строка(ЭлементКД.Поле)); + Иначе + СтрокаТаблицы.Представление = ДоступноеПоле.Заголовок; + КонецЕсли; + КонецЕсли; + КонецЦикла; + + Возврат Истина; +КонецФункции + +&НаСервере +Процедура ЗарегистрироватьЭлементыСоставаГруппировки(УзелКД = Неопределено, НаборСтрокКД = Неопределено, НаборСтрок = Неопределено) + Если УзелКД = Неопределено Тогда + УзелКД = ТаблицыПолейНайтиУзел(ЭтотОбъект, "СоставГруппировки", Неопределено); + Если УзелКД = Неопределено Тогда + Возврат; + КонецЕсли; + КонецЕсли; + Если НаборСтрокКД = Неопределено Тогда + НаборСтрокКД = УзелКД.Элементы; + КонецЕсли; + Если НаборСтрок = Неопределено Тогда + НаборСтрок = СоставГруппировки.ПолучитьЭлементы(); + КонецЕсли; + ДоступныеПоля = УзелКД.ДоступныеПоляПолейГруппировок; + Для Каждого ЭлементКД Из НаборСтрокКД Цикл + ТипНастройки = ОтчетыКлиентСервер.ТипНастройкиСтрокой(ТипЗнч(ЭлементКД)); + ПолеКД = Неопределено; + Если ТипНастройки = "ПолеГруппировки" Тогда + Если Не ЗначениеЗаполнено(ЭлементКД.Поле) Тогда + Продолжить; + КонецЕсли; + ПолеКД = ЭлементКД.Поле; + КонецЕсли; + + СтрокаТаблицы = НаборСтрок.Добавить(); + СтрокаТаблицы.ИдентификаторКД = УзелКД.ПолучитьИдентификаторПоОбъекту(ЭлементКД); + СтрокаТаблицы.ТипНастройки = ТипНастройки; + СтрокаТаблицы.Использование = ЭлементКД.Использование; + СтрокаТаблицы.ПолеКД = ПолеКД; + + Если ТипНастройки = "АвтоПолеГруппировки" Тогда + СтрокаТаблицы.Представление = НСтр("ru = 'Авто (по всем полям)'"); + СтрокаТаблицы.ИндексКартинки = 6; + ИначеЕсли ТипНастройки = "ПолеГруппировки" Тогда + СтрокаТаблицы.ТипГруппировки = ЭлементКД.ТипГруппировки; + СтрокаТаблицы.ТипДополнения = ЭлементКД.ТипДополнения; + ДоступноеПоле = ДоступныеПоля.НайтиПоле(ЭлементКД.Поле); + Если ДоступноеПоле = Неопределено Тогда + СтрокаТаблицы.Представление = ОтчетыКлиентСервер.ИмяВПредставление(Строка(ЭлементКД.Поле)); + СтрокаТаблицы.ИндексКартинки = 5; + Иначе + СтрокаТаблицы.Представление = ДоступноеПоле.Заголовок; + Если ДоступноеПоле.Ресурс Тогда + СтрокаТаблицы.ИндексКартинки = 20; + ИначеЕсли ДоступноеПоле.Таблица Тогда + СтрокаТаблицы.ИндексКартинки = 21; + ИначеЕсли ДоступноеПоле.Папка Тогда + СтрокаТаблицы.ИндексКартинки = 1; + Иначе + СтрокаТаблицы.ИндексКартинки = 4; + КонецЕсли; + ИнформацияОТипах = ОтчетыКлиентСервер.АнализТипов(ДоступноеПоле.ТипЗначения, Ложь); + Если ИнформацияОТипах.СодержитТипПериод Или ИнформацияОТипах.СодержитТипДата Тогда + СтрокаТаблицы.ПоказыватьТипДополнения = Истина; + КонецЕсли; + КонецЕсли; + КонецЕсли; + КонецЦикла; +КонецПроцедуры + +&НаСервере +Функция ЗарегистрироватьЭлементыВыбранныхПолей(УзелКД = Неопределено, НаборСтрокКД = Неопределено, НаборСтрок = Неопределено, ДоступныеПоля = Неопределено) + Если УзелКД = Неопределено Тогда + УзелКД = ТаблицыПолейНайтиУзел(ЭтотОбъект, "ВыбранныеПоля", Неопределено); + Если УзелКД = Неопределено Тогда + Возврат Ложь; + КонецЕсли; + КонецЕсли; + Если НаборСтрокКД = Неопределено Тогда + НаборСтрокКД = УзелКД.Элементы; + КонецЕсли; + Если НаборСтрок = Неопределено Тогда + СтрокаРаздел = ВыбранныеПоля.ПолучитьЭлементы().Добавить(); + СтрокаРаздел.ЭтоРаздел = Истина; + СтрокаРаздел.Представление = НСтр("ru = 'Поля'"); + СтрокаРаздел.ИндексКартинки = 14; + СтрокаРаздел.ИдентификаторКД = "ВыбранныеПоля"; + НаборСтрок = СтрокаРаздел.ПолучитьЭлементы(); + КонецЕсли; + Если ДоступныеПоля = Неопределено Тогда + ДоступныеПоля = УзелКД.ДоступныеПоляВыбора; + КонецЕсли; + + Для Каждого ЭлементКД Из НаборСтрокКД Цикл + ТипНастройки = ОтчетыКлиентСервер.ТипНастройкиСтрокой(ТипЗнч(ЭлементКД)); + ЭтоГруппа = Ложь; + ПолеКД = Неопределено; + Если ТипНастройки = "АвтоВыбранноеПоле" Тогда + Представление = НСтр("ru = 'Авто (поля родителя)'"); + ИндексКартинки = 6; + Иначе + Если ТипНастройки = "ГруппаВыбранныхПолей" Тогда + ЭтоГруппа = Истина; + ИндексКартинки = 1; + Иначе + ИндексКартинки = 4; + КонецЕсли; + + Представление = ЭлементКД.Заголовок; + Если ЗначениеЗаполнено(ЭлементКД.Поле) Тогда + ДоступноеПоле = ДоступныеПоля.НайтиПоле(ЭлементКД.Поле); + ПолеКД = ЭлементКД.Поле; + Иначе + Если Не ЭтоГруппа Тогда + Продолжить; + КонецЕсли; + ДоступноеПоле = Неопределено; + КонецЕсли; + Если ДоступноеПоле = Неопределено Тогда + Если Не ЭтоГруппа Тогда + ИндексКартинки = 5; + Представление = ОтчетыКлиентСервер.ИмяВПредставление(Строка(ЭлементКД.Поле)); + КонецЕсли; + ИначеЕсли Представление = "" Тогда + Представление = ДоступноеПоле.Заголовок; + КонецЕсли; + Если ЭтоГруппа И ЭлементКД.Расположение <> РасположениеПоляКомпоновкиДанных.Авто Тогда + Представление = Представление + " (" + Строка(ЭлементКД.Расположение) + ")"; + КонецЕсли; + КонецЕсли; + + СтрокаТаблицы = НаборСтрок.Добавить(); + ЗаполнитьЗначенияСвойств(СтрокаТаблицы, ЭлементКД); + СтрокаТаблицы.ТипНастройки = ТипНастройки; + СтрокаТаблицы.ИндексКартинки = ИндексКартинки; + СтрокаТаблицы.ЭтоГруппа = ЭтоГруппа; + СтрокаТаблицы.Представление = Представление; + СтрокаТаблицы.ИдентификаторКД = УзелКД.ПолучитьИдентификаторПоОбъекту(ЭлементКД); + СтрокаТаблицы.ПолеКД = ПолеКД; + + Если ЭтоГруппа Тогда + ЗарегистрироватьЭлементыВыбранныхПолей(УзелКД, ЭлементКД.Элементы, СтрокаТаблицы.ПолучитьЭлементы(), ДоступныеПоля); + КонецЕсли; + КонецЦикла; + + Возврат Истина; +КонецФункции + +&НаСервере +Процедура ЗарегистрироватьПараметры(Информация) + Если РежимИзмененияУзлаВарианта Тогда + Возврат; + КонецЕсли; + + УсловияПоиска = Новый Структура("СтрокаДерева, ИмяКоллекции", Информация.ТекущаяСтрокаДерева, "ПараметрыДанных"); + Найденные = Информация.НастройкиВарианта.Строки.НайтиСтроки(УсловияПоиска, Ложь); + Если Найденные.Количество() = 0 Тогда + Возврат; + КонецЕсли; + НаборСтрокВарианта = Найденные[0].Строки; + + СтрокаРаздел = Отборы.ПолучитьЭлементы().Добавить(); + СтрокаРаздел.ЭтоРаздел = Истина; + СтрокаРаздел.ЭтоПараметр = Истина; + СтрокаРаздел.Представление = НСтр("ru = 'Параметры'"); + СтрокаРаздел.ИндексКартинки = 2; + СтрокаРаздел.ИдентификаторКД = "ПараметрыДанных"; + НаборСтрок = СтрокаРаздел.ПолучитьЭлементы(); + + Для Каждого НастройкаВарианта Из НаборСтрокВарианта Цикл + Если Не НастройкаВарианта.ВыводРазрешен Тогда + Продолжить; + КонецЕсли; + + ДоступнаяНастройкаКД = НастройкаВарианта.ДоступнаяНастройкаКД; + ЭлементКД = НастройкаВарианта.ЭлементКД; + + Если ЗначениеЗаполнено(НастройкаВарианта.ДоступнаяНастройкаКД.Заголовок) Тогда + Представление = НастройкаВарианта.ДоступнаяНастройкаКД.Заголовок; + Иначе + Представление = Строка(ЭлементКД.Параметр); + КонецЕсли; + + СтрокаТаблицы = НаборСтрок.Добавить(); + СтрокаТаблицы.Использование = ЭлементКД.Использование; + СтрокаТаблицы.Значение = НастройкаВарианта.Значение; + СтрокаТаблицы.ИдентификаторКД = НастройкаВарианта.ИдентификаторКД; + СтрокаТаблицы.Представление = Представление; + СтрокаТаблицы.ЭтоПараметр = Истина; + СтрокаТаблицы.ИндексКартинки = -1; + СтрокаТаблицы.ТипЗначения = НастройкаВарианта.ДоступнаяНастройкаКД.ТипЗначения; + СтрокаТаблицы.ВводСписком = НастройкаВарианта.ВводСписком; + СтрокаТаблицы.ВыводитьФлажок = НастройкаВарианта.ВыводитьФлажок; + СтрокаТаблицы.ВыборГруппИЭлементов = НастройкаВарианта.ВыборГруппИЭлементов; + + Если НастройкаВарианта.ОграничиватьВыборУказаннымиЗначениями + И ТипЗнч(НастройкаВарианта.ЗначенияДляВыбора) = Тип("СписокЗначений") Тогда + Если СтрокаТаблицы.ВводСписком Тогда + Если ТипЗнч(СтрокаТаблицы.Значение) = Тип("СписокЗначений") Тогда + Для Каждого ЭлементСписка Из СтрокаТаблицы.Значение Цикл + ЭлементДляВыбора = НастройкаВарианта.ЗначенияДляВыбора.НайтиПоЗначению(ЭлементСписка.Значение); + Если ЭлементДляВыбора <> Неопределено Тогда + ЭлементСписка.Представление = ЭлементДляВыбора.Представление; + КонецЕсли; + КонецЦикла; + КонецЕсли; + Иначе + СтрокаТаблицы.ФиксированныйСписокВыбора = Истина; + ЭлементДляВыбора = НастройкаВарианта.ЗначенияДляВыбора.НайтиПоЗначению(СтрокаТаблицы.Значение); + Если ЭлементДляВыбора <> Неопределено Тогда + СтрокаТаблицы.ПредставлениеЗначения = ЭлементДляВыбора.Представление; + КонецЕсли; + КонецЕсли; + КонецЕсли; + + НастройкаВарианта.ИдентификаторВФорме = СтрокаТаблицы.ПолучитьИдентификатор(); + + Если ТипЗнч(СтрокаТаблицы.Значение) = Тип("СтандартныйПериод") Тогда + СтрокаТаблицы.Условие = ОтчетыКлиентСервер.ПолучитьВидСтандартногоПериода(СтрокаТаблицы.Значение); + СтрокаТаблицы.ТипУсловия = Новый ОписаниеТипов("ПеречислениеСсылка.ДоступныеПериодыОтчета"); + Иначе + СтрокаТаблицы.ТипУсловия = Новый ОписаниеТипов("Неопределено"); + КонецЕсли; + + СтрокаТаблицы.Заголовок = Представление; + Если ЗначениеЗаполнено(ЭлементКД.ИдентификаторПользовательскойНастройки) Тогда + Если ЗначениеЗаполнено(ЭлементКД.ПредставлениеПользовательскойНастройки) Тогда + СтрокаТаблицы.Заголовок = ЭлементКД.ПредставлениеПользовательскойНастройки; + КонецЕсли; + Если ЭлементКД.РежимОтображения = РежимОтображенияЭлементаНастройкиКомпоновкиДанных.БыстрыйДоступ Тогда + СтрокаТаблицы.ИндексКартинкиДоступа = 2; + ИначеЕсли ЭлементКД.РежимОтображения = РежимОтображенияЭлементаНастройкиКомпоновкиДанных.Обычный Тогда + СтрокаТаблицы.ИндексКартинкиДоступа = 4; + Иначе + СтрокаТаблицы.ИндексКартинкиДоступа = 5; + КонецЕсли; + Иначе + СтрокаТаблицы.ИндексКартинкиДоступа = 5; + КонецЕсли; + + Дополнительно = Новый Структура("ОписаниеТипов, ОграничиватьВыборУказаннымиЗначениями, + |ПараметрыВыбора, ФормаВыбора, ЗначенияДляВыбора"); + ЗаполнитьЗначенияСвойств(Дополнительно, НастройкаВарианта); + СтрокаТаблицы.Дополнительно = Дополнительно; + + КонецЦикла; +КонецПроцедуры + +&НаСервере +Процедура ЗарегистрироватьЭлементыОтборов(Информация, НаборСтрокВарианта = Неопределено, НаборСтрокФормы = Неопределено) + Если НаборСтрокВарианта = Неопределено Тогда + УсловияПоиска = Новый Структура("СтрокаДерева, ИмяКоллекции", Информация.ТекущаяСтрокаДерева, "Отбор"); + Найденные = Информация.НастройкиВарианта.Строки.НайтиСтроки(УсловияПоиска, Ложь); + Если Найденные.Количество() = 0 Тогда + Возврат; + КонецЕсли; + НаборСтрокВарианта = Найденные[0].Строки; + КонецЕсли; + Если НаборСтрокФормы = Неопределено Тогда + НаборСтрокФормы = Отборы.ПолучитьЭлементы(); + СтрокаРаздел = НаборСтрокФормы.Добавить(); + СтрокаРаздел.ЭтоРаздел = Истина; + СтрокаРаздел.Представление = НСтр("ru = 'Отборы'"); + СтрокаРаздел.ИндексКартинки = 3; + СтрокаРаздел.ИдентификаторКД = "Отборы"; + НаборСтрокФормы = СтрокаРаздел.ПолучитьЭлементы(); + КонецЕсли; + Для Каждого НастройкаВарианта Из НаборСтрокВарианта Цикл + Если НастройкаВарианта.Тип = "ГруппаЭлементовОтбора" Тогда + ЭтоГруппа = Истина; + Представление = Строка(НастройкаВарианта.ЭлементКД.ТипГруппы); + ИначеЕсли НастройкаВарианта.Тип = "ЭлементОтбора" Тогда + // БыстрыйВыбор, ВыборГруппИЭлементов, ДоступныеВидыСравнения, ДоступныеЗначения, Маска, Папка + // Поле, Ресурс, СвязьПоТипу, Таблица, ФормаВыбора, ФорматРедактирования, Элементы + // ПолучитьПараметрыВыбора(), ПолучитьСвязиПараметровВыбора() + Если НастройкаВарианта.ДоступнаяНастройкаКД = Неопределено Тогда + Продолжить; + КонецЕсли; + ЭтоГруппа = Ложь; + Если ЗначениеЗаполнено(НастройкаВарианта.ДоступнаяНастройкаКД.Заголовок) Тогда + Представление = НастройкаВарианта.ДоступнаяНастройкаКД.Заголовок; + Иначе + Представление = Строка(НастройкаВарианта.ЭлементКД.ЛевоеЗначение); + КонецЕсли; + Иначе + Продолжить; + КонецЕсли; + + ЭлементКД = НастройкаВарианта.ЭлементКД; + + СтрокаТаблицы = НаборСтрокФормы.Добавить(); + СтрокаТаблицы.Использование = НастройкаВарианта.ЭлементКД.Использование; + СтрокаТаблицы.Представление = Представление; //ОтчетыКлиентСервер.ПредставлениеОбъектаКД(Информация.ТекущаяСтрокаДерева.УзелКД.Отбор, ЭлементКД, Неопределено).Представление + СтрокаТаблицы.Заголовок = Представление; + СтрокаТаблицы.ИдентификаторКД = НастройкаВарианта.ИдентификаторКД; + СтрокаТаблицы.ЭтоПараметр = Ложь; + СтрокаТаблицы.ЭтоГруппа = ЭтоГруппа; + СтрокаТаблицы.ВводСписком = НастройкаВарианта.ВводСписком; + СтрокаТаблицы.ВыводитьФлажок = НастройкаВарианта.ВыводитьФлажок; + СтрокаТаблицы.ФормаВыбора = НастройкаВарианта.ФормаВыбора; + СтрокаТаблицы.ВыборГруппИЭлементов = НастройкаВарианта.ВыборГруппИЭлементов; + + НастройкаВарианта.ИдентификаторВФорме = СтрокаТаблицы.ПолучитьИдентификатор(); + + ВыводитьТолькоФлажок = Ложь; + Если ЗначениеЗаполнено(ЭлементКД.Представление) Тогда + ВыводитьТолькоФлажок = Истина; + Если ЭлементКД.Представление <> "1" Тогда + СтрокаТаблицы.Заголовок = ЭлементКД.Представление; + КонецЕсли; + КонецЕсли; + Если ЗначениеЗаполнено(ЭлементКД.ПредставлениеПользовательскойНастройки) Тогда + СтрокаТаблицы.Заголовок = ЭлементКД.ПредставлениеПользовательскойНастройки; + КонецЕсли; + СтрокаТаблицы.ЗаголовокПереопределен = (СтрокаТаблицы.Заголовок <> СтрокаТаблицы.Представление); + + Если ЗначениеЗаполнено(ЭлементКД.ИдентификаторПользовательскойНастройки) Тогда + Если ЭлементКД.РежимОтображения = РежимОтображенияЭлементаНастройкиКомпоновкиДанных.БыстрыйДоступ Тогда + СтрокаТаблицы.ИндексКартинкиДоступа = ?(ВыводитьТолькоФлажок, 1, 2); + ИначеЕсли ЭлементКД.РежимОтображения = РежимОтображенияЭлементаНастройкиКомпоновкиДанных.Обычный Тогда + СтрокаТаблицы.ИндексКартинкиДоступа = ?(ВыводитьТолькоФлажок, 3, 4); + Иначе + СтрокаТаблицы.ИндексКартинкиДоступа = 5; + КонецЕсли; + Иначе + СтрокаТаблицы.ИндексКартинкиДоступа = 5; + КонецЕсли; + + Если ЭтоГруппа Тогда + СтрокаТаблицы.ИндексКартинки = -1; + ЗарегистрироватьЭлементыОтборов(Информация, НастройкаВарианта.Строки, СтрокаТаблицы.ПолучитьЭлементы()); + Иначе + СтрокаТаблицы.Значение = НастройкаВарианта.Значение; + Если НастройкаВарианта.ОграничиватьВыборУказаннымиЗначениями + И ТипЗнч(НастройкаВарианта.ЗначенияДляВыбора) = Тип("СписокЗначений") Тогда + Если СтрокаТаблицы.ВводСписком Тогда + Если ТипЗнч(СтрокаТаблицы.Значение) = Тип("СписокЗначений") Тогда + Для Каждого ЭлементСписка Из СтрокаТаблицы.Значение Цикл + ЭлементДляВыбора = НастройкаВарианта.ЗначенияДляВыбора.НайтиПоЗначению(ЭлементСписка.Значение); + Если ЭлементДляВыбора <> Неопределено Тогда + ЭлементСписка.Представление = ЭлементДляВыбора.Представление; + КонецЕсли; + КонецЦикла; + КонецЕсли; + Иначе + СтрокаТаблицы.ФиксированныйСписокВыбора = Истина; + ЭлементДляВыбора = НастройкаВарианта.ЗначенияДляВыбора.НайтиПоЗначению(СтрокаТаблицы.Значение); + Если ЭлементДляВыбора <> Неопределено Тогда + СтрокаТаблицы.ПредставлениеЗначения = ЭлементДляВыбора.Представление; + КонецЕсли; + КонецЕсли; + КонецЕсли; + СтрокаТаблицы.ТипЗначения = НастройкаВарианта.ОписаниеТипов; + СтрокаТаблицы.ИндексКартинки = -1; + Если ТипЗнч(СтрокаТаблицы.Значение) = Тип("СтандартныйПериод") Тогда + СтрокаТаблицы.Условие = ОтчетыКлиентСервер.ПолучитьВидСтандартногоПериода(СтрокаТаблицы.Значение); + СтрокаТаблицы.ТипУсловия = Новый ОписаниеТипов("ПеречислениеСсылка.ДоступныеПериодыОтчета"); + Иначе + СтрокаТаблицы.Условие = НастройкаВарианта.ВидСравнения; + СтрокаТаблицы.ТипУсловия = Новый ОписаниеТипов("ВидСравненияКомпоновкиДанных"); + КонецЕсли; + КонецЕсли; + + Дополнительно = Новый Структура("ОписаниеТипов, ОграничиватьВыборУказаннымиЗначениями, + |ПараметрыВыбора, ФормаВыбора, ЗначенияДляВыбора"); + ЗаполнитьЗначенияСвойств(Дополнительно, НастройкаВарианта); + СтрокаТаблицы.Дополнительно = Дополнительно; + + КонецЦикла; +КонецПроцедуры + +&НаСервере +Процедура ЗарегистрироватьОтключаемыеСвязи(Информация) + ОтключаемыеСвязи.Очистить(); + Для Каждого ОписаниеСвязи Из Информация.ОтключаемыеСвязи Цикл + Связь = ОтключаемыеСвязи.Добавить(); + ЗаполнитьЗначенияСвойств(Связь, ОписаниеСвязи); + Если РасширенныйРежим = 1 Тогда + Связь.ВедущийИдентификаторВФорме = ОписаниеСвязи.Ведущий.ИдентификаторВФорме; + Связь.ПодчиненныйИдентификаторВФорме = ОписаниеСвязи.Подчиненный.ИдентификаторВФорме; + Иначе + Связь.ВедущийИдентификаторВФорме = ОписаниеСвязи.Ведущий.ИдентификаторЭлемента; + Связь.ПодчиненныйИдентификаторВФорме = ОписаниеСвязи.Подчиненный.ИдентификаторЭлемента; + КонецЕсли; + КонецЦикла; +КонецПроцедуры + +&НаСервере +Процедура ЗарегистрироватьЭлементыОформления(Информация, НаборСтрокВарианта = Неопределено, НаборСтрокФормы = Неопределено) + Если НаборСтрокВарианта = Неопределено Тогда + УсловияПоиска = Новый Структура("СтрокаДерева, ИмяКоллекции", Информация.ТекущаяСтрокаДерева, "УсловноеОформление"); + Найденные = Информация.НастройкиВарианта.Строки.НайтиСтроки(УсловияПоиска, Ложь); + Если Найденные.Количество() = 0 Тогда + Возврат; + КонецЕсли; + НаборСтрокВарианта = Найденные[0].Строки; + КонецЕсли; + Если НаборСтрокФормы = Неопределено Тогда + НаборСтрокФормы = Оформление.ПолучитьЭлементы(); + КонецЕсли; + Для Каждого НастройкаВарианта Из НаборСтрокВарианта Цикл + ЭлементКД = НастройкаВарианта.ЭлементКД; + + СтрокаТаблицы = НаборСтрокФормы.Добавить(); + СтрокаТаблицы.Использование = ЭлементКД.Использование; + СтрокаТаблицы.Представление = НастройкаВарианта.Представление; + СтрокаТаблицы.Заголовок = СтрокаТаблицы.Представление; + СтрокаТаблицы.ИдентификаторКД = НастройкаВарианта.ИдентификаторКД; + СтрокаТаблицы.ИндексКартинки = -1; + + НастройкаВарианта.ИдентификаторВФорме = СтрокаТаблицы.ПолучитьИдентификатор(); + + ВыводитьТолькоФлажок = Ложь; + Если ЗначениеЗаполнено(ЭлементКД.Представление) Тогда + ВыводитьТолькоФлажок = Истина; + Если ЭлементКД.Представление <> "1" Тогда + СтрокаТаблицы.Заголовок = ЭлементКД.Представление; + КонецЕсли; + КонецЕсли; + Если ЗначениеЗаполнено(ЭлементКД.ПредставлениеПользовательскойНастройки) Тогда + СтрокаТаблицы.Заголовок = ЭлементКД.ПредставлениеПользовательскойНастройки; + КонецЕсли; + СтрокаТаблицы.ЗаголовокПереопределен = (СтрокаТаблицы.Заголовок <> СтрокаТаблицы.Представление); + + Если ЗначениеЗаполнено(ЭлементКД.ИдентификаторПользовательскойНастройки) Тогда + Если ЭлементКД.РежимОтображения = РежимОтображенияЭлементаНастройкиКомпоновкиДанных.БыстрыйДоступ Тогда + СтрокаТаблицы.ИндексКартинкиДоступа = 2; + ИначеЕсли ЭлементКД.РежимОтображения = РежимОтображенияЭлементаНастройкиКомпоновкиДанных.Обычный Тогда + СтрокаТаблицы.ИндексКартинкиДоступа = 4; + Иначе + СтрокаТаблицы.ИндексКартинкиДоступа = 5; + КонецЕсли; + Иначе + СтрокаТаблицы.ИндексКартинкиДоступа = 5; + КонецЕсли; + КонецЦикла; +КонецПроцедуры + +&НаКлиенте +Процедура ПеретаскиваниеВПределахТаблицы(ИсточникПеретаскивания, ИдентификаторЦели) + // Определение параметров. + ТаблицаИмя = ИсточникПеретаскивания.ТаблицаИмя; + ПеремещаемыеСтроки = ИсточникПеретаскивания.СтрокиДерева; + ТекущаяСтрока = ИсточникПеретаскивания.ТекущаяСтрока; + + ТаблицаРеквизит = ЭтотОбъект[ТаблицаИмя]; + СтрокаЦели = НайтиПоИдентификатору(ТаблицаРеквизит, ИдентификаторЦели); + Родитель = ПолучитьРодителя(ТаблицаИмя, СтрокаЦели); + ТаблицаЭлемент = Элементы[ТаблицаИмя]; + ВыделенныеСтроки = ТаблицаЭлемент.ВыделенныеСтроки; + ВыделенныеСтроки.Очистить(); + + ПеремещенныеСтроки = Новый Массив; // Для платформы. + + Для Каждого ПеремещаемаяСтрока Из ПеремещаемыеСтроки Цикл + ЭтоТекущая = (ПеремещаемаяСтрока = ТекущаяСтрока); + + // Перемещение. + Результат = ТаблицыПолейПереместить(ТаблицаИмя, ПеремещаемаяСтрока, СтрокаЦели, Неопределено, Ложь); + + // Бантики (начало). + Если ЭтоТекущая Тогда + ТекущаяСтрока = Результат.СтрокаДерева; + КонецЕсли; + ПеремещенныеСтроки.Добавить(Результат.СтрокаДерева); + КонецЦикла; + + // Бантики (завершение). + ТаблицаЭлемент.ТекущаяСтрока = ТекущаяСтрока.ПолучитьИдентификатор(); + Для Каждого СтрокаТаблицы Из ПеремещенныеСтроки Цикл + НоваяСтрокаИдентификатор = СтрокаТаблицы.ПолучитьИдентификатор(); + Если ВыделенныеСтроки.Найти(НоваяСтрокаИдентификатор) = Неопределено Тогда + ВыделенныеСтроки.Добавить(НоваяСтрокаИдентификатор); + КонецЕсли; + КонецЦикла; + + ТаблицаЭлемент.Развернуть(Родитель.ПолучитьИдентификатор(), Истина); + + УстановитьМодифицированность(); +КонецПроцедуры + +&НаКлиенте +Процедура ПеретаскиваниеВыбранныхПолейВСортировки(ИсточникПеретаскивания, ИдентификаторЦели) + // Определение параметров источника. + ИсточникТаблицаИмя = ИсточникПеретаскивания.ТаблицаИмя; + ИсточникТаблица = ЭтотОбъект[ИсточникТаблицаИмя]; + ИсточникУзелКД = ТаблицыПолейНайтиУзел(ЭтотОбъект, ИсточникТаблицаИмя); + + // Определение параметров приемника. + ЦельТаблицаИмя = "Сортировка"; + ЦельТаблица = ЭтотОбъект[ЦельТаблицаИмя]; + ЦельУзелКД = ТаблицыПолейНайтиУзел(ЭтотОбъект, ЦельТаблицаИмя); + + ПередЧемВставить = НайтиПоИдентификатору(ЦельТаблица, ИдентификаторЦели); + ПередЧемВставитьКД = НайтиОбъектКД(ЦельУзелКД, ПередЧемВставить); + + ЦельРодитель = ПолучитьРодителя(ЦельТаблицаИмя, ПередЧемВставить); + ЦельРодительКД = НайтиОбъектКД(ЦельУзелКД, ЦельРодитель); + + КудаВставить = ПолучитьЭлементы(ЦельТаблица, ЦельРодитель); + КудаВставитьКД = ПолучитьЭлементыКД(ЦельУзелКД, ЦельРодительКД); + + Если ПередЧемВставитьКД = Неопределено Тогда + Индекс = Неопределено; + ИндексКД = Неопределено; + Иначе + Индекс = КудаВставить.Индекс(ПередЧемВставить) + 1; + ИндексКД = КудаВставитьКД.Индекс(ПередЧемВставитьКД) + 1; + КонецЕсли; + + ТипЭлемента = Тип("ЭлементПорядкаКомпоновкиДанных"); + + // Вывод результата. + ИсточникТекущаяСтрока = ИсточникПеретаскивания.ТекущаяСтрока; + ЦельТекущаяСтрока = Неопределено; + ПоляКоторыеНеУдалосьДобавить = Новый Массив; + + // Обход источника. + ПеремещенныеСтроки = Новый Массив; + Обработанные = Новый Массив; + + Коллекции = Новый Массив; + Количество = 0; + ТекущаяКоллекция = ИсточникПеретаскивания.СтрокиДерева; + Пока Истина Цикл + // Обход текущей коллекции. + Для Каждого ИсточникСтрокаТаблицы Из ТекущаяКоллекция Цикл + Если ИсточникСтрокаТаблицы.ТипНастройки = "АвтоВыбранноеПоле" Тогда + Продолжить; + КонецЕсли; + Если Обработанные.Найти(ИсточникСтрокаТаблицы) <> Неопределено Тогда + Продолжить; + КонецЕсли; + Обработанные.Добавить(ИсточникСтрокаТаблицы); + + // Регистрация новой коллекции к обработке. + Если ИсточникСтрокаТаблицы.ЭтоГруппа Тогда + Коллекции.Добавить(ИсточникСтрокаТаблицы.ПолучитьЭлементы()); + Количество = Количество + 1; + Продолжить; + КонецЕсли; + + // Анализ строки источника. + ЭтоТекущая = (ИсточникСтрокаТаблицы = ИсточникТекущаяСтрока); + + ИсточникОбъектКД = НайтиОбъектКД(ИсточникУзелКД, ИсточникСтрокаТаблицы); + + ДоступноеПолеКД = ЦельУзелКД.ДоступныеПоляПорядка.НайтиПоле(ИсточникОбъектКД.Поле); + Если ДоступноеПолеКД = Неопределено Тогда + ПоляКоторыеНеУдалосьДобавить.Добавить(ИсточникСтрокаТаблицы.Представление); + Продолжить; + КонецЕсли; + + // Добавление строки приемника. + Если Индекс = Неопределено Тогда + НоваяСтрока = КудаВставить.Добавить(); + Иначе + НоваяСтрока = КудаВставить.Вставить(Индекс); + Индекс = Индекс + 1; + КонецЕсли; + + Если ИндексКД = Неопределено Тогда + НовыйЭлементКД = КудаВставитьКД.Добавить(ТипЭлемента); + Иначе + НовыйЭлементКД = КудаВставитьКД.Вставить(ИндексКД, ТипЭлемента); + ИндексКД = ИндексКД + 1; + КонецЕсли; + + НовыйЭлементКД.Использование = Истина; + НовыйЭлементКД.Поле = ДоступноеПолеКД.Поле; + НовыйЭлементКД.ТипУпорядочивания = НаправлениеСортировкиКомпоновкиДанных.Возр; + + НоваяСтрока.ИдентификаторКД = ЦельУзелКД.ПолучитьИдентификаторПоОбъекту(НовыйЭлементКД); + НоваяСтрока.Использование = НовыйЭлементКД.Использование; + НоваяСтрока.Представление = ДоступноеПолеКД.Заголовок; + НоваяСтрока.Направление = НовыйЭлементКД.ТипУпорядочивания; + НоваяСтрока.ИндексКартинки = -1; + + Если ЭтоТекущая Или ЦельТекущаяСтрока = Неопределено Тогда + ЦельТекущаяСтрока = НоваяСтрока; + КонецЕсли; + + ПеремещенныеСтроки.Добавить(НоваяСтрока); + + КонецЦикла; + + // Переход к следующей коллекции. + Если Количество = 0 Тогда + Прервать; + КонецЕсли; + Количество = Количество - 1; + ТекущаяКоллекция = Коллекции[0]; + Коллекции.Удалить(0); + КонецЦикла; + + // Бантики (завершение). + ЦельТаблицаЭлемент = Элементы[ЦельТаблицаИмя]; + ТекущийЭлемент = ЦельТаблицаЭлемент; + ЦельТаблицаЭлемент.ВыделенныеСтроки.Очистить(); + Если ЦельТекущаяСтрока <> Неопределено Тогда + ЦельТаблицаЭлемент.ТекущаяСтрока = ЦельТекущаяСтрока.ПолучитьИдентификатор(); + КонецЕсли; + Для Каждого НоваяСтрока Из ПеремещенныеСтроки Цикл + НоваяСтрокаИдентификатор = НоваяСтрока.ПолучитьИдентификатор(); + Если ЦельТаблицаЭлемент.ВыделенныеСтроки.Найти(НоваяСтрокаИдентификатор) = Неопределено Тогда + ЦельТаблицаЭлемент.ВыделенныеСтроки.Добавить(НоваяСтрокаИдентификатор); + КонецЕсли; + КонецЦикла; + // } + + ЦельТаблицаЭлемент.Развернуть(ЦельРодитель.ПолучитьИдентификатор(), Истина); + + ПользовательскиеНастройкиМодифицированы = Истина; + Если РасширенныйРежим = 1 Тогда + ВариантИзменен = Истина; + КонецЕсли; + + ПодключитьОбработчикОжидания("Обновить", 3, Истина); +КонецПроцедуры + +&НаКлиенте +Процедура Обновить() + БыстрыеНастройкиЗаполнитьКлиент(Неопределено); +КонецПроцедуры + +&НаКлиенте +Процедура ПеретаскиваниеСортировокВВыбранныеПоля(ИсточникПеретаскивания, ИдентификаторЦели) + ТаблицыПолейУдалить(ИсточникПеретаскивания.ТаблицаИмя, ИсточникПеретаскивания.СтрокиДерева, Ложь); + УстановитьМодифицированность(); +КонецПроцедуры + +&НаКлиенте +Функция ЗарегистрироватьНачалоПеретаскивания(ТаблицаИмя, ИсточникПеретаскивания = Неопределено) + Сценарий = Новый Структура; + Сценарий.Вставить("Шаги", "ОпределитьВыделенныеСтроки"); + Сценарий.Вставить("Действие", "НачалоПеретаскивания"); + Сценарий.Вставить("ТаблицаИмя", ТаблицаИмя); + + ЗапуститьСценарий(Сценарий); + + Если ЗначениеЗаполнено(Сценарий.ПричинаОтказа) Тогда + Возврат Ложь; + КонецЕсли; + + ИсточникПеретаскивания = Новый Структура("ТаблицаИмя, СтрокиДерева, ТекущаяСтрока"); + ЗаполнитьЗначенияСвойств(ИсточникПеретаскивания, Сценарий); + ПеременныеКлиента.Вставить("ИсточникПеретаскивания", ИсточникПеретаскивания); + Возврат Истина; +КонецФункции + +&НаКлиенте +Процедура ПроверитьВозможностьПеретаскивания(ТаблицаИмя, ИдентификаторЦели, ПараметрыПеретаскивания) + ИсточникПеретаскивания = ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(ПеременныеКлиента, "ИсточникПеретаскивания"); + Если ИсточникПеретаскивания = Неопределено Тогда + ПараметрыПеретаскивания.Действие = ДействиеПеретаскивания.Отмена; + ИначеЕсли ИсточникПеретаскивания.ТаблицаИмя = ТаблицаИмя Тогда + ПараметрыПеретаскивания.Действие = ДействиеПеретаскивания.Перемещение; + Если ИдентификаторЦели <> Неопределено Тогда + СтрокаРодитель = ЭтотОбъект[ТаблицаИмя].НайтиПоИдентификатору(ИдентификаторЦели); + Пока СтрокаРодитель <> Неопределено И Не СтрокаРодитель.ЭтоРаздел Цикл + Если ИсточникПеретаскивания.СтрокиДерева.Найти(СтрокаРодитель) <> Неопределено Тогда + ПараметрыПеретаскивания.Действие = ДействиеПеретаскивания.Отмена; + Прервать; + КонецЕсли; + СтрокаРодитель = СтрокаРодитель.ПолучитьРодителя(); + КонецЦикла; + КонецЕсли; + Иначе + ПараметрыПеретаскивания.Действие = ДействиеПеретаскивания.Выбор; + КонецЕсли; +КонецПроцедуры + +&НаКлиенте +Процедура УстановитьМодифицированность() + ПользовательскиеНастройкиМодифицированы = Истина; + Если РасширенныйРежим = 1 Тогда + ВариантИзменен = Истина; + КонецЕсли; + + Если ОбщегоНазначенияКлиентСервер.РежимОтладки() Тогда + ПодключитьОбработчикОжидания("Обновить", 3, Истина); + КонецЕсли; +КонецПроцедуры + +#КонецОбласти \ No newline at end of file diff --git a/SSL/src/CommonForms/ФормаОтчета/Form.form b/SSL/src/CommonForms/ФормаОтчета/Form.form index f08d19b7e..15ff85a17 100644 --- a/SSL/src/CommonForms/ФормаОтчета/Form.form +++ b/SSL/src/CommonForms/ФормаОтчета/Form.form @@ -36,83 +36,76 @@
      - НеОтсортированное - 516 - true - true - - true - - - <key>ru</key> - <value>Не отсортированное</value> - - - ru - Не отсортированное - - - НеОтсортированноеРасширеннаяПодсказка - 517 - Label - true - true - - Left - - - UsualGroup - - Vertical - Auto - true - true - Auto - Auto - - - - Кнопки - 44 - - КомандыЛевая - 49 - - СформироватьОтчет_Левая - 412 - true - true - - true - - - СформироватьОтчет_ЛеваяРасширеннаяПодсказка - 413 - Label - true - true - - Left - - - Form.Command.ОтчетСкомпоноватьРезультат - true + ОсновнаяКоманднаяПанель + 5 + + СформироватьОтчет + 101 + true + true + + true + + + СформироватьОтчетРасширеннаяПодсказка + 135 + Label true true - UserCmds - Auto - + + Left + + + Form.Command.ОтчетСкомпоноватьРезультат + Auto + true + true + true + UserCmds + Auto + InCommandBarAndInAdditionalSubmenu + + + ФормироватьСразу + 468 + true + true + + true + + + ФормироватьСразуРасширеннаяПодсказка + 469 + Label + true + true + + Left + + + Form.Command.ФормироватьСразу + Normal + Auto + true + true + UserCmds + Auto + InAdditionalSubmenu + + + ГруппаНастройкиОтчета + 104 - ВсеНастройки_Левая - 500 + ВсеНастройки + 458 true true true - ВсеНастройки_ЛеваяРасширеннаяПодсказка - 501 + ВсеНастройкиРасширеннаяПодсказка + 459 Label true true @@ -126,12 +119,40 @@ true UserCmds Auto + InCommandBarAndInAdditionalSubmenu + + + ИзменитьУсловияОтборов + 630 + true + true + + true + + + ИзменитьУсловияОтборовРасширеннаяПодсказка + 631 + Label + true + true + + Left + + + Form.Command.ИзменитьУсловияОтборов + Normal + Auto + true + true + UserCmds + Auto + InAdditionalSubmenu - ГруппаНастройкиОтчета_Левая + ГруппаВариантыОтчета 358 - СохранитьВариант_Левая + СохранитьВариант 506 <key>ru</key> @@ -143,7 +164,7 @@ <common>true</common> </userVisible> <extendedTooltip> - <name>СохранитьВариант_ЛеваяРасширеннаяПодсказка</name> + <name>СохранитьВариантРасширеннаяПодсказка</name> <id>507</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> @@ -165,7 +186,7 @@ <locationInCommandBar>InCommandBarAndInAdditionalSubmenu</locationInCommandBar> </items> <items xsi:type="form:FormGroup"> - <name>ВариантыОтчета_Левая</name> + <name>ВариантыОтчета</name> <id>360</id> <visible>true</visible> <enabled>true</enabled> @@ -174,14 +195,14 @@ </userVisible> <title> <key>ru</key> - <value>Варианты отчета левая</value> + <value>Варианты отчета</value> ru - Варианты отчета левая + Варианты отчета - ВариантыОтчета_ЛеваяРасширеннаяПодсказка + ВариантыОтчетаРасширеннаяПодсказка 361 Label true @@ -212,11 +233,12 @@ Form.Command.ДругиеОтчеты Normal - Auto + PictureAndText true true UserCmds Auto + InCommandBarAndInAdditionalSubmenu true true @@ -232,7 +254,7 @@ Выбрать настройки - ГруппаНастройкиОтчета_ЛеваяРасширеннаяПодсказка + ГруппаВариантыОтчетаРасширеннаяПодсказка 359 Label true @@ -250,8 +272,264 @@ Normal + + ГруппаПрочиеНастройкиОтчета + 502 + + КомандыВариантовОтчета + 450 + + ИзменитьВариант + 452 + true + true + + true + + + ИзменитьВариантРасширеннаяПодсказка + 453 + Label + true + true + + Left + + + Form.Command.ИзменитьВариантОтчета + Normal + Auto + true + true + UserCmds + Auto + InAdditionalSubmenu + + + ВыбратьВариант + 639 + + <key>ru</key> + <value>Выбрать вариант отчета...</value> + + true + true + + true + + + ВыбратьВариантРасширеннаяПодсказка + 640 + Label + true + true + + Left + + + Form.StandardCommand.LoadVariant + Normal + Auto + true + true + UserCmds + Auto + InAdditionalSubmenu + + true + true + + true + + + <key>ru</key> + <value>Команды вариантов отчета</value> + + + ru + Команды вариантов отчета + + true + + КомандыВариантовОтчетаРасширеннаяПодсказка + 451 + Label + true + true + + Left + + + + + + СброситьНастройки + 382 + true + true + + true + + + СброситьНастройкиРасширеннаяПодсказка + 383 + Label + true + true + + Left + + + Form.Command.НастройкиПоУмолчанию + Normal + Auto + true + true + UserCmds + Auto + InAdditionalSubmenu + + + ГруппаПользовательскиеНастройки + 504 + + ВыбратьНастройки + 462 + true + true + + true + + + ВыбратьНастройкиРасширеннаяПодсказка + 463 + Label + true + true + + Left + + + Form.StandardCommand.LoadReportSettings + Normal + Auto + true + true + UserCmds + Auto + InAdditionalSubmenu + + + СохранитьНастройки + 460 + true + true + + true + + + СохранитьНастройкиРасширеннаяПодсказка + 461 + Label + true + true + + Left + + + Form.StandardCommand.SaveReportSettings + Normal + Auto + true + true + UserCmds + Auto + InAdditionalSubmenu + + true + true + + true + + + <key>ru</key> + <value> </value> + + + ru + + + + ГруппаПользовательскиеНастройкиРасширеннаяПодсказка + 505 + Label + true + true + + Left + + + + + true + true + + true + + + <key>ru</key> + <value>Прочее</value> + + + ru + Группа прочие настройки отчета + + + ГруппаПрочиеНастройкиОтчетаРасширеннаяПодсказка + 503 + Label + true + true + + Left + + + Popup + + Auto + Normal + + + true + true + + true + + + <key>ru</key> + <value> </value> + + + ru + + + + ГруппаНастройкиОтчетаРасширеннаяПодсказка + 144 + Label + true + true + + Left + + + + + + ГруппаРаботаВТаблице + 518 - Найти_Левая + Найти 62 true true @@ -259,7 +537,7 @@ true
      - Найти_ЛеваяРасширеннаяПодсказка + НайтиРасширеннаяПодсказка 120 Label true @@ -277,16 +555,262 @@ InCommandBarAndInAdditionalSubmenu - Печать_Левая - 56 + РазвернутьВсеГруппы + 61 true true true - Печать_ЛеваяРасширеннаяПодсказка - 124 + РазвернутьВсеГруппыРасширеннаяПодсказка + 122 + Label + true + true + + Left + + + Form.Item.ОтчетТабличныйДокумент.StandardCommand.ExpandAllGroups + Normal + Picture + true + true + UserCmds + Auto + InCommandBarAndInAdditionalSubmenu + + + СвернутьВсеГруппы + 60 + true + true + + true + + + СвернутьВсеГруппыРасширеннаяПодсказка + 121 + Label + true + true + + Left + + + Form.Item.ОтчетТабличныйДокумент.StandardCommand.CollapseAllGroups + Normal + Picture + true + true + UserCmds + Auto + InCommandBarAndInAdditionalSubmenu + + + АвтоСуммаКнопка + 637 + true + true + + true + + + АвтоСуммаКнопкаРасширеннаяПодсказка + 638 + Label + true + true + + Left + + + Form.Command.ВычислитьСумму + Normal + Picture + true + true + UserCmds + Auto + + + КомандыТабличногоДокумента + 526 + + ЗафиксироватьТаблицу + 528 + true + true + + true + + + ЗафиксироватьТаблицуРасширеннаяПодсказка + 529 + Label + true + true + + Left + + + Form.Item.ОтчетТабличныйДокумент.StandardCommand.FixTable + Normal + Auto + true + true + UserCmds + Auto + + + ОтображатьГруппировки + 530 + true + true + + true + + + ОтображатьГруппировкиРасширеннаяПодсказка + 531 + Label + true + true + + Left + + + Form.Item.ОтчетТабличныйДокумент.StandardCommand.ShowGroups + Normal + Auto + true + true + UserCmds + Auto + + + Редактирование + 532 + true + true + + true + + + РедактированиеРасширеннаяПодсказка + 533 + Label + true + true + + Left + + + Form.Item.ОтчетТабличныйДокумент.StandardCommand.Edit + Normal + Auto + true + true + UserCmds + Auto + + true + true + + true + + + <key>ru</key> + <value>Таблица</value> + + + ru + Команды табличного документа + + + КомандыТабличногоДокументаРасширеннаяПодсказка + 527 + Label + true + true + + Left + + + Popup + + Auto + Normal + + + true + true + + true + + + <key>ru</key> + <value>Группа работа в таблице</value> + + + ru + Группа работа в таблице + + + ГруппаРаботаВТаблицеРасширеннаяПодсказка + 519 + Label + true + true + + Left + + + + + + ГруппаПрограммныйИнтерфейс + 641 + true + true + + true + + + <key>ru</key> + <value>Группа кнопок</value> + + + ru + Динамически добавляемые кнопки + + + ГруппаПрограммныйИнтерфейсРасширеннаяПодсказка + 642 + Label + true + true + + Left + + + + + + ГруппаВывод + 534 + + Печать + 52 + true + true + + true + + + ПечатьРасширеннаяПодсказка + 138 Label true true @@ -304,16 +828,16 @@ InCommandBarAndInAdditionalSubmenu - ПредварительныйПросмотр_Левая - 102 + ПредварительныйПросмотр + 90 true true true - ПредварительныйПросмотр_ЛеваяРасширеннаяПодсказка - 125 + ПредварительныйПросмотрРасширеннаяПодсказка + 139 Label true true @@ -331,8 +855,35 @@ InCommandBarAndInAdditionalSubmenu - Сохранить_Левая - 57 + ПараметрыСтраницы + 94 + true + true + + true + + + ПараметрыСтраницыРасширеннаяПодсказка + 140 + Label + true + true + + Left + + + Form.Item.ОтчетТабличныйДокумент.StandardCommand.PageSetup + Normal + Auto + true + true + UserCmds + Auto + InAdditionalSubmenu + + + Сохранить + 51 <key>ru</key> <value>Сохранить...</value> @@ -343,8 +894,8 @@ <common>true</common> </userVisible> <extendedTooltip> - <name>Сохранить_ЛеваяРасширеннаяПодсказка</name> - <id>126</id> + <name>СохранитьРасширеннаяПодсказка</name> + <id>141</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -362,10 +913,10 @@ <locationInCommandBar>InCommandBarAndInAdditionalSubmenu</locationInCommandBar> </items> <items xsi:type="form:FormGroup"> - <name>ГруппаОтправить_Левая</name> + <name>ГруппаОтправить</name> <id>63</id> <items xsi:type="form:Button"> - <name>ОтправитьПоЭлектроннойПочте_Левая</name> + <name>ОтправитьПоЭлектроннойПочте</name> <id>97</id> <visible>true</visible> <enabled>true</enabled> @@ -373,7 +924,7 @@ <common>true</common> </userVisible> <extendedTooltip> - <name>ОтправитьПоЭлектроннойПочте_ЛеваяРасширеннаяПодсказка</name> + <name>ОтправитьПоЭлектроннойПочтеРасширеннаяПодсказка</name> <id>128</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> @@ -405,7 +956,7 @@ <value>Отправить отчет по электронной почте</value> </toolTip> <extendedTooltip> - <name>ГруппаОтправить_ЛеваяРасширеннаяПодсказка</name> + <name>ГруппаОтправитьРасширеннаяПодсказка</name> <id>127</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> @@ -423,88 +974,6 @@ <importance>Normal</importance> </extInfo> </items> - <items xsi:type="form:FormGroup"> - <name>ГруппаСвернутьРазвернуть</name> - <id>518</id> - <items xsi:type="form:Button"> - <name>СвернутьВсеГруппы_Левая</name> - <id>60</id> - <visible>true</visible> - <enabled>true</enabled> - <userVisible> - <common>true</common> - </userVisible> - <extendedTooltip> - <name>СвернутьВсеГруппы_ЛеваяРасширеннаяПодсказка</name> - <id>121</id> - <type>Label</type> - <autoMaxWidth>true</autoMaxWidth> - <autoMaxHeight>true</autoMaxHeight> - <extInfo xsi:type="form:LabelDecorationExtInfo"> - <horizontalAlign>Left</horizontalAlign> - </extInfo> - </extendedTooltip> - <commandName>Form.Item.ОтчетТабличныйДокумент.StandardCommand.CollapseAllGroups</commandName> - <buttonImportance>Normal</buttonImportance> - <representation>Picture</representation> - <autoMaxWidth>true</autoMaxWidth> - <autoMaxHeight>true</autoMaxHeight> - <placementArea>UserCmds</placementArea> - <representationInContextMenu>Auto</representationInContextMenu> - <locationInCommandBar>InCommandBarAndInAdditionalSubmenu</locationInCommandBar> - </items> - <items xsi:type="form:Button"> - <name>РазвернутьВсеГруппы_Левая</name> - <id>61</id> - <visible>true</visible> - <enabled>true</enabled> - <userVisible> - <common>true</common> - </userVisible> - <extendedTooltip> - <name>РазвернутьВсеГруппы_ЛеваяРасширеннаяПодсказка</name> - <id>122</id> - <type>Label</type> - <autoMaxWidth>true</autoMaxWidth> - <autoMaxHeight>true</autoMaxHeight> - <extInfo xsi:type="form:LabelDecorationExtInfo"> - <horizontalAlign>Left</horizontalAlign> - </extInfo> - </extendedTooltip> - <commandName>Form.Item.ОтчетТабличныйДокумент.StandardCommand.ExpandAllGroups</commandName> - <buttonImportance>Normal</buttonImportance> - <representation>Picture</representation> - <autoMaxWidth>true</autoMaxWidth> - <autoMaxHeight>true</autoMaxHeight> - <placementArea>UserCmds</placementArea> - <representationInContextMenu>Auto</representationInContextMenu> - <locationInCommandBar>InCommandBarAndInAdditionalSubmenu</locationInCommandBar> - </items> - <visible>true</visible> - <enabled>true</enabled> - <userVisible> - <common>true</common> - </userVisible> - <title> - <key>ru</key> - <value>Группа свернуть развернуть</value> - - - ru - Группа свернуть развернуть - - - ГруппаСвернутьРазвернутьРасширеннаяПодсказка - 519 - Label - true - true - - Left - - - - true true @@ -512,15 +981,15 @@ <key>ru</key> - <value>Команды левая</value> + <value>Группа вывод</value> ru - Команды левая + Группа вывод - КомандыЛеваяРасширеннаяПодсказка - 116 + ГруппаВыводРасширеннаяПодсказка + 535 Label true true @@ -528,115 +997,19 @@ Left - CommandBar - - Left - + - - АвтоСуммаГруппа - 110 - - АвтоСуммаКнопка - 111 - true - true - - true - - - АвтоСуммаКнопкаРасширеннаяПодсказка - 130 - Label - true - true - - Left - - - UsualButton - Form.Command.ВычислитьСумму - Normal - Auto - true - true - UserCmds - Auto - - - АвтоСуммаНадпись - 105 - true - true - - true - - - СуммаВыделенныхЯчеек - - None - - ru - Сумма чисел выделенных ячеек - - - АвтоСуммаНадписьРасширеннаяПодсказка - 131 - Label - true - true - - Left - - - - АвтоСуммаНадписьКонтекстноеМеню - 106 - true - - InputField - Enter - true - Left - true - - 10 - true - true - false - false - true - - ru - ЧН=- - - true - true - - Style.FormBackColor - - - Style.FormBackColor - - Normal - - + + НовоеОкно + 41 true true true - - <key>ru</key> - <value> </value> - - - ru - - - АвтоСуммаГруппаРасширеннаяПодсказка - 129 + НовоеОкноРасширеннаяПодсказка + 159 Label true true @@ -644,724 +1017,26 @@ Left - UsualGroup - - Auto - true - true - Auto - Auto - + Form.StandardCommand.NewWindow + Normal + Auto + true + true + UserCmds + Auto + InAdditionalSubmenu - - КомандыЕще - 5 - - СформироватьОтчет - 101 - true - true - - true - - - СформироватьОтчетРасширеннаяПодсказка - 135 - Label - true - true - - Left - - - Form.Command.ОтчетСкомпоноватьРезультат - Normal - Auto - true - true - UserCmds - Auto - InAdditionalSubmenu - - - ФормироватьСразу - 468 - true - true - - true - - - ФормироватьСразуРасширеннаяПодсказка - 469 - Label - true - true - - Left - - - Form.Command.ФормироватьСразу - Normal - Auto - true - true - UserCmds - Auto - InAdditionalSubmenu - - - ГруппаНастройкиОтчета - 104 - - ВсеНастройки - 458 - true - true - - true - - - ВсеНастройкиРасширеннаяПодсказка - 459 - Label - true - true - - Left - - - Form.Command.ВсеНастройки - Normal - Auto - true - true - UserCmds - Auto - InAdditionalSubmenu - - - ВыбратьВариант - 454 - - <key>ru</key> - <value>Выбрать вариант отчета...</value> - - true - true - - true - - - ВыбратьВариантРасширеннаяПодсказка - 455 - Label - true - true - - Left - - - Form.StandardCommand.LoadVariant - Normal - Picture - true - true - UserCmds - - CommonPicture.ВыбратьВариантОтчета - - Auto - InAdditionalSubmenu - - - СохранитьВариант - 456 - - <key>ru</key> - <value>Сохранить вариант отчета...</value> - - true - true - - true - - - СохранитьВариантРасширеннаяПодсказка - 457 - Label - true - true - - Left - - - Form.StandardCommand.SaveVariant - Normal - Auto - true - true - UserCmds - - CommonPicture.СохранитьВариантОтчета - - Auto - InAdditionalSubmenu - - - ГруппаПрочиеНастройкиОтчета - 502 - - КомандыВариантовОтчета - 450 - - ИзменитьВариант - 452 - true - true - - true - - - ИзменитьВариантРасширеннаяПодсказка - 453 - Label - true - true - - Left - - - Form.Command.ИзменитьВариантОтчета - Normal - Auto - true - true - UserCmds - Auto - InAdditionalSubmenu - - true - true - - true - - - <key>ru</key> - <value>Команды вариантов отчета</value> - - - ru - Команды вариантов отчета - - true - - КомандыВариантовОтчетаРасширеннаяПодсказка - 451 - Label - true - true - - Left - - - - - - СброситьНастройки - 382 - true - true - - true - - - СброситьНастройкиРасширеннаяПодсказка - 383 - Label - true - true - - Left - - - Form.Command.НастройкиПоУмолчанию - Normal - Auto - true - true - UserCmds - Auto - InAdditionalSubmenu - - - ГруппаПользовательскиеНастройки - 504 - - НастройкиОтчета - 510 - - <key>ru</key> - <value>Все настройки...</value> - - true - true - - true - - - НастройкиОтчетаРасширеннаяПодсказка - 511 - Label - true - true - - Left - - - Form.StandardCommand.ReportSettings - Normal - Auto - true - true - UserCmds - Auto - InAdditionalSubmenu - - - ВыбратьНастройки - 462 - true - true - - true - - - ВыбратьНастройкиРасширеннаяПодсказка - 463 - Label - true - true - - Left - - - Form.StandardCommand.LoadReportSettings - Normal - Auto - true - true - UserCmds - Auto - InAdditionalSubmenu - - - СохранитьНастройки - 460 - true - true - - true - - - СохранитьНастройкиРасширеннаяПодсказка - 461 - Label - true - true - - Left - - - Form.StandardCommand.SaveReportSettings - Normal - Auto - true - true - UserCmds - Auto - InAdditionalSubmenu - - true - true - - true - - - <key>ru</key> - <value> </value> - - - ru - - - - ГруппаПользовательскиеНастройкиРасширеннаяПодсказка - 505 - Label - true - true - - Left - - - - - true - true - - true - - - <key>ru</key> - <value>Прочее</value> - - - ru - Группа прочие настройки отчета - - - ГруппаПрочиеНастройкиОтчетаРасширеннаяПодсказка - 503 - Label - true - true - - Left - - - Popup - - Auto - Normal - - - true - true - - true - - - <key>ru</key> - <value> </value> - - - ru - - - - ГруппаНастройкиОтчетаРасширеннаяПодсказка - 144 - Label - true - true - - Left - - - - - - ГруппаПечать - 93 - - Печать - 52 - true - true - - true - - - ПечатьРасширеннаяПодсказка - 138 - Label - true - true - - Left - - - Form.StandardCommand.Print - Normal - Auto - true - true - UserCmds - Auto - InAdditionalSubmenu - - - ПредварительныйПросмотр - 90 - true - true - - true - - - ПредварительныйПросмотрРасширеннаяПодсказка - 139 - Label - true - true - - Left - - - Form.Item.ОтчетТабличныйДокумент.StandardCommand.Preview - Normal - Auto - true - true - UserCmds - Auto - InAdditionalSubmenu - - - ПараметрыСтраницы - 94 - true - true - - true - - - ПараметрыСтраницыРасширеннаяПодсказка - 140 - Label - true - true - - Left - - - Form.Item.ОтчетТабличныйДокумент.StandardCommand.PageSetup - Normal - Auto - true - true - UserCmds - Auto - InAdditionalSubmenu - - true - true - - true - - - <key>ru</key> - <value>Печать</value> - - - ru - - - - ГруппаПечатьРасширеннаяПодсказка - 137 - Label - true - true - - Left - - - - - - Сохранить - 51 - - <key>ru</key> - <value>Сохранить...</value> - - true - true - - true - - - СохранитьРасширеннаяПодсказка - 141 - Label - true - true - - Left - - - Form.StandardCommand.Save - Normal - Auto - true - true - UserCmds - Auto - InAdditionalSubmenu - - - ГруппаОтправить - 74 - - ОтправитьПоЭлектроннойПочте - 98 - true - true - - true - - - ОтправитьПоЭлектроннойПочтеРасширеннаяПодсказка - 143 - Label - true - true - - Left - - - Form.Command.ОтправитьПоЭлектроннойПочте - Normal - Auto - true - true - UserCmds - Auto - InAdditionalSubmenu - - true - true - - true - - - <key>ru</key> - <value>Отправить</value> - - - ru - Отправить отчет по электронной почте - - - ГруппаОтправитьРасширеннаяПодсказка - 142 - Label - true - true - - Left - - - Popup - - - CommonPicture.ОтправитьЭлектронноеПисьмо - - Auto - Normal - - - - НовоеОкно - 41 - true - true - - true - - - НовоеОкноРасширеннаяПодсказка - 159 - Label - true - true - - Left - - - Form.StandardCommand.NewWindow - Normal - Auto - true - true - UserCmds - Auto - InAdditionalSubmenu - - - ИзменитьФорму - 42 - true - true - - true - - - ИзменитьФормуРасширеннаяПодсказка - 160 - Label - true - true - - Left - - - Form.StandardCommand.CustomizeForm - Normal - Auto - true - true - UserCmds - Auto - InAdditionalSubmenu - - - Справка - 43 - true - true - - true - - - СправкаРасширеннаяПодсказка - 161 - Label - true - true - - Left - - - Form.StandardCommand.Help - Normal - Auto - true - true - UserCmds - Auto - InCommandBarAndInAdditionalSubmenu - + + ИзменитьФорму + 42 true true true - - <key>ru</key> - <value>Команды еще</value> - - - ru - Команды еще - - 13 - false - КомандыЕщеРасширеннаяПодсказка - 133 + ИзменитьФормуРасширеннаяПодсказка + 160 Label true true @@ -1369,10 +1044,41 @@ Left - CommandBar - - Right - + Form.StandardCommand.CustomizeForm + Normal + Auto + true + true + UserCmds + Auto + InAdditionalSubmenu + + + Справка + 43 + true + true + + true + + + СправкаРасширеннаяПодсказка + 161 + Label + true + true + + Left + + + Form.StandardCommand.Help + Normal + Auto + true + true + UserCmds + Auto + InCommandBarAndInAdditionalSubmenu true true @@ -1381,15 +1087,47 @@ <key>ru</key> - <value>Кнопки</value> + <value>Основная командная панель</value> ru - Кнопки + Основная командная панель + + true + + ОсновнаяКоманднаяПанельРасширеннаяПодсказка + 133 + Label + true + true + + Left + + + CommandBar + + Left + + + + НеОтсортированное + 516 + true + true + + true + + + <key>ru</key> + <value>Не отсортированное</value> + + + ru + Не отсортированное - КнопкиРасширеннаяПодсказка - 115 + НеОтсортированноеРасширеннаяПодсказка + 517 Label true true @@ -1399,6 +1137,7 @@ UsualGroup + Vertical Auto true true @@ -1551,10 +1290,6 @@ AdditionalDetailProcessing ОтчетТабличныйДокументОбработкаДополнительнойРасшифровки
      - - OnActivate - ОтчетТабличныйДокументПриАктивизацииОбласти - DetailProcessing ОтчетТабличныйДокументОбработкаРасшифровки @@ -1606,6 +1341,7 @@ FillCheckProcessingAtServer ОбработкаПроверкиЗаполненияНаСервере + ReportSettings DontBlock true true @@ -1755,8 +1491,12 @@ ValueList - - + + true + + + true + @@ -1918,24 +1658,6 @@ true
      - - СуммаВыделенныхЯчеек - - <key>ru</key> - <value>Сумма</value> - - 23 - - String - - - - true - - - true - - ЕстьБыстрыеНастройки @@ -2296,6 +2018,36 @@ </edit> </columns> </attributes> + <attributes> + <name>БыстрыйПоискНастроекВарианта</name> + <title> + <key>ru</key> + <value>Быстрый поиск настроек варианта</value> + + 35 + + + true + + + true + + + + РезультатЗаполненияНастроек + + <key>ru</key> + <value>Результат заполнения настроек</value> + + 36 + + + true + + + true + + ВсеНастройки @@ -2319,7 +2071,7 @@ </handler> </action> <representation>TextPicture</representation> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <formCommands> @@ -2336,13 +2088,12 @@ <use> <common>true</common> </use> - <shortcut>Ctrl+F2</shortcut> <action xsi:type="form:FormCommandHandlerContainer"> <handler> <name>ИзменитьВариантОтчета</name> </handler> </action> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <formCommands> @@ -2364,7 +2115,7 @@ <name>НастройкиПоУмолчанию</name> </handler> </action> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <formCommands> @@ -2389,7 +2140,7 @@ <name>ОтправитьПоЭлектроннойПочте</name> </handler> </action> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <formCommands> @@ -2416,7 +2167,7 @@ </handler> </action> <representation>Text</representation> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <formCommands> @@ -2442,7 +2193,7 @@ </handler> </action> <representation>Picture</representation> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <formCommands> @@ -2464,7 +2215,7 @@ <name>ФормироватьСразу</name> </handler> </action> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <formCommands> @@ -2489,7 +2240,69 @@ <name>ДругиеОтчеты</name> </handler> </action> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> + <selectedRowsUse>Auto</selectedRowsUse> + </formCommands> + <formCommands> + <name>ИзменитьВидСравнения</name> + <title> + <key>ru</key> + <value>Изменить вид сравнения</value> + + 9 + + ru + Изменить вид сравнения + + + true + + DontUse + Auto + + + ВыбратьПериод + + <key>ru</key> + <value>Выбрать период</value> + + 10 + + ru + Выбрать период + + + true + + + StdPicture.InputFieldSelect + + DontUse + Auto + + + ИзменитьУсловияОтборов + + <key>ru</key> + <value>Изменить условия отборов...</value> + + 11 + + ru + Изменить условия отборов + + + true + + + CommonPicture.ВидСравнения + + + + ИзменитьУсловияОтборов + + + DontUse Auto diff --git a/SSL/src/CommonForms/ФормаОтчета/Help/ru.html b/SSL/src/CommonForms/ФормаОтчета/Help/ru.html index 3508dcafd..c95ce3066 100644 --- a/SSL/src/CommonForms/ФормаОтчета/Help/ru.html +++ b/SSL/src/CommonForms/ФормаОтчета/Help/ru.html @@ -1,16 +1,17 @@

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

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

      -

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

      -

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

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

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

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

      Настройки

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

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

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

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

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

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

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

      • @@ -22,7 +23,7 @@
      • С помощью соответствующего флажка можно Закрывать окно после перехода к отчету.

      Печать отчета

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

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

        С помощью кнопки  Отправить отчет по электронной почте можно:

        diff --git a/SSL/src/CommonForms/ФормаОтчета/Module.bsl b/SSL/src/CommonForms/ФормаОтчета/Module.bsl index 72c54e4db..717f535cf 100644 --- a/SSL/src/CommonForms/ФормаОтчета/Module.bsl +++ b/SSL/src/CommonForms/ФормаОтчета/Module.bsl @@ -5,7 +5,7 @@ Перем ПеременныеКлиента; //////////////////////////////////////////////////////////////////////////////// -// СОБЫТИЯ ФОРМЫ +// ФОРМА #Область ОбработчикиСобытийФормы @@ -17,10 +17,6 @@ ВариантыПанелиКлючТекущегоВарианта = " - "; - Если ТекущийВариантИнтерфейсаКлиентскогоПриложения() = ВариантИнтерфейсаКлиентскогоПриложения.Версия8_2 Тогда - Элементы.КомандыЕще.Ширина = 15; - КонецЕсли; - // Параметры формы. РежимРасшифровки = (Параметры.Свойство("Расшифровка") И Параметры.Расшифровка <> Неопределено); РежимВариантаОтчета = (ТипЗнч(КлючТекущегоВарианта) = Тип("Строка") И Не ПустаяСтрока(КлючТекущегоВарианта)); @@ -48,12 +44,14 @@ АдресСхемы = ПоместитьВоВременноеХранилище(ОтчетОбъект.СхемаКомпоновкиДанных, УникальныйИдентификатор); НастройкиОтчета.Вставить("АдресСхемы", АдресСхемы); + НастройкиОтчета.Вставить("СхемаМодифицирована", Ложь); НастройкиОтчета.Вставить("ПолноеИмя", ОтчетМетаданные.ПолноеИмя()); НастройкиОтчета.Вставить("Наименование", СокрЛП(ОтчетМетаданные.Представление())); Информация = ВариантыОтчетов.СформироватьИнформациюОбОтчетеПоПолномуИмени(НастройкиОтчета.ПолноеИмя); НастройкиОтчета.Вставить("ОтчетСсылка", Информация.Отчет); - НастройкиОтчета.Вставить("ВариантСсылка", ВариантыОтчетов.ПолучитьСсылку(НастройкиОтчета.ОтчетСсылка, КлючТекущегоВарианта)); + ОбновитьИнформациюОВариантеОтчета(); + ОбщегоНазначенияКлиентСервер.ДополнитьСтруктуру(НастройкиОтчета, ВариантыОтчетов.ПараметрыКлиента()); Если ВариантыОтчетовПовтИсп.ОтчетыСНастройками().Найти(НастройкиОтчета.ОтчетСсылка) <> Неопределено Тогда ОтчетОбъект.ОпределитьНастройкиФормы(ЭтотОбъект, КлючТекущегоВарианта, НастройкиОтчета); @@ -76,6 +74,7 @@ КонецЕсли; НастройкиОтчета.Вставить("Внешний", ТипЗнч(НастройкиОтчета.ОтчетСсылка) = Тип("Строка")); + НастройкиОтчета.Вставить("Безопасный", БезопасныйРежим()); НастройкиОтчета.Вставить("ПредопределенныеВарианты", Новый СписокЗначений); Если НастройкиОтчета.Внешний И ОтчетОбъект.СхемаКомпоновкиДанных <> Неопределено Тогда Для Каждого Вариант Из ОтчетОбъект.СхемаКомпоновкиДанных.ВариантыНастроек Цикл @@ -85,32 +84,39 @@ // Параметры по умолчанию Если НастройкиОтчета.Свойство("ВыводитьСуммуВыделенныхЯчеек") И Не НастройкиОтчета.ВыводитьСуммуВыделенныхЯчеек Тогда - Элементы.АвтоСуммаГруппа.Видимость = Ложь; + Элементы.АвтоСуммаКнопка.Видимость = Ложь; Элементы.ОтчетТабличныйДокумент.УстановитьДействие("ПриАктивизацииОбласти", ""); КонецЕсли; // Скрытие команд вариантов Если Не НастройкиОтчета.Свойство("РазрешеноМенятьВарианты") Или Параметры.Свойство("ВидимостьКомандВариантовОтчетов") Тогда НастройкиОтчета.Вставить("РазрешеноМенятьВарианты", ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(Параметры, "ВидимостьКомандВариантовОтчетов")); + Если НастройкиОтчета.РазрешеноМенятьВарианты = Ложь Тогда + АвтоНавигационнаяСсылка = Ложь; + КонецЕсли; КонецЕсли; Если ТипЗнч(НастройкиОтчета.РазрешеноМенятьВарианты) <> Тип("Булево") Тогда НастройкиОтчета.РазрешеноМенятьВарианты = ВариантыОтчетовПовтИсп.ПравоДобавления(); Если НастройкиОтчета.РазрешеноМенятьВарианты // Команды не отключены параметрами открытия формы. - И Параметры.КлючВарианта = Неопределено // Открывается без контекста. - И ЗначениеЗаполнено(НастройкиОтчета.ВариантСсылка) Тогда // Вариант зарегистрирован. - ПредопределенныйВариант = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(НастройкиОтчета.ВариантСсылка, "ПредопределенныйВариант"); - Если ЗначениеЗаполнено(ПредопределенныйВариант) Тогда - Отключенные = ВариантыОтчетовПовтИсп.ОтключенныеВариантыПрограммы(); - Если Отключенные.Найти(ПредопределенныйВариант) <> Неопределено Тогда // Вариант отключен. - Текст = НСтр("ru = 'Контекстный вариант ""%1"" отчета ""%2"" открыт без контекста.'"); - ВариантыОтчетов.ПредупреждениеПоВарианту(НастройкиОтчета.ВариантСсылка, Текст, НастройкиОтчета.ВариантСсылка, НастройкиОтчета.ОтчетСсылка); - НастройкиОтчета.РазрешеноМенятьВарианты = Ложь; - КонецЕсли; + И ЗначениеЗаполнено(НастройкиОтчета.ВариантСсылка) // Вариант зарегистрирован. + И ЗначениеЗаполнено(НастройкиОтчета.ПредопределенныйСсылка) Тогда // Это предопределенный. + Отключенные = ВариантыОтчетовПовтИсп.ОтключенныеВариантыПрограммы(); + Если Отключенные.Найти(НастройкиОтчета.ПредопределенныйСсылка) <> Неопределено Тогда // Вариант отключен. + Текст = НСтр("ru = 'Контекстный вариант ""%1"" отчета ""%2"" открыт без контекста.'"); + ВариантыОтчетов.ПредупреждениеПоВарианту(НастройкиОтчета.ВариантСсылка, Текст, НастройкиОтчета.ВариантСсылка, НастройкиОтчета.ОтчетСсылка); + НастройкиОтчета.РазрешеноМенятьВарианты = Ложь; + АвтоНавигационнаяСсылка = Ложь; КонецЕсли; КонецЕсли; КонецЕсли; - Если Не НастройкиОтчета.РазрешеноМенятьВарианты Тогда - АвтоНавигационнаяСсылка = Ложь; + Если Не ВариантыОтчетов.ОтчетПодключенКФормеНастроек(ОтчетМетаданные) Тогда + НастройкиОтчета.РазрешеноМенятьВарианты = Ложь; + ТекстОшибки = ВариантыОтчетовКлиентСервер.ТекстОшибки(1, НастройкиОтчета.ПолноеИмя); + Если ОбщегоНазначенияКлиентСервер.РежимОтладки() Тогда + ВызватьИсключение ТекстОшибки; + Иначе + ВариантыОтчетов.ОшибкаПоВарианту(НастройкиОтчета.ОтчетСсылка, ТекстОшибки); + КонецЕсли; КонецЕсли; // Регистрация команд и реквизитов формы, которые не удаляются при перезаполнении быстрых настроек. @@ -126,10 +132,22 @@ // Приведение зависимых элементов формы к кондиции. ВидимостьДоступностьКорректность(""); - // Тесная интеграция с подсистемами БСП. - Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.РассылкаОтчетов") Тогда - МодульРассылкаОтчетов = ОбщегоНазначения.ОбщийМодуль("РассылкаОтчетов"); - МодульРассылкаОтчетов.ФормаОтчетаДобавитьКоманды(ЭтотОбъект, Отказ, СтандартнаяОбработка); + // Тесная интеграция с почтой и рассылкой. + ДоступнаОтправкаПисем = Ложь; + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаСПочтовымиСообщениями") Тогда + МодульРаботаСПочтовымиСообщениями = ОбщегоНазначения.ОбщийМодуль("РаботаСПочтовымиСообщениями"); + ДоступнаОтправкаПисем = МодульРаботаСПочтовымиСообщениями.ДоступнаОтправкаПисем(); + КонецЕсли; + Если ДоступнаОтправкаПисем Тогда + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.РассылкаОтчетов") Тогда + МодульРассылкаОтчетов = ОбщегоНазначения.ОбщийМодуль("РассылкаОтчетов"); + МодульРассылкаОтчетов.ФормаОтчетаДобавитьКоманды(ЭтотОбъект, Отказ, СтандартнаяОбработка); + Иначе // Если в подменю одна команда, то выпадающий список не отображается. + Элементы.ОтправитьПоЭлектроннойПочте.Заголовок = Элементы.ГруппаОтправить.Заголовок + "..."; + Элементы.Переместить(Элементы.ОтправитьПоЭлектроннойПочте, Элементы.ГруппаОтправить.Родитель, Элементы.ГруппаОтправить); + КонецЕсли; + Иначе + Элементы.ГруппаОтправить.Видимость = Ложь; КонецЕсли; // События. @@ -138,28 +156,24 @@ ОтчетОбъект.ПриСозданииНаСервере(ЭтотОбъект, Отказ, СтандартнаяОбработка); КонецЕсли; - // Если в подменю одна команда, то выпадающий список не отображается. - Если Элементы.ГруппаОтправить_Левая.ПодчиненныеЭлементы.Количество() = 1 Тогда - Элементы.ОтправитьПоЭлектроннойПочте_Левая.Заголовок = Элементы.ГруппаОтправить_Левая.Заголовок + "..."; - Элементы.Переместить(Элементы.ОтправитьПоЭлектроннойПочте_Левая, Элементы.КомандыЛевая, Элементы.ГруппаОтправить_Левая); - КонецЕсли; - Если Элементы.ГруппаОтправить.ПодчиненныеЭлементы.Количество() = 1 Тогда - Элементы.ОтправитьПоЭлектроннойПочте.Заголовок = Элементы.ГруппаОтправить.Заголовок + "..."; - Элементы.Переместить(Элементы.ОтправитьПоЭлектроннойПочте, Элементы.КомандыЕще, Элементы.ГруппаОтправить); - КонецЕсли; КонецПроцедуры &НаКлиенте Процедура ПриОткрытии(Отказ) ПеременныеКлиента = Новый Структура; + ПеременныеКлиента.Вставить("УспешноСформирован", Ложь); + ПеременныеКлиента.Вставить("ВыполнятьЗамеры", Ложь); + ПеременныеКлиента.Вставить("Непосредственно", НастройкиОтчета.Внешний Или НастройкиОтчета.Безопасный); + ПеременныеКлиента.Вставить("ФормированиеПриОткрытии", Ложь); ПеременныеКлиента.Вставить("ИнтервалОжидания", ?(ПолучитьСкоростьКлиентскогоСоединения() = СкоростьКлиентскогоСоединения.Низкая, 1, 0.2)); Если Не Отказ Тогда ФормаОткрыта = Истина; КонецЕсли; Если НастройкиОтчета.ФормироватьСразу Тогда - Отчет.КомпоновщикНастроек.ПользовательскиеНастройки.ДополнительныеСвойства.Вставить("ФормированиеПриОткрытии", Истина); + ПеременныеКлиента.ФормированиеПриОткрытии = Истина; ПодключитьОбработчикОжидания("СФормировать", 0.1, Истина); КонецЕсли; + ПоказатьРезультатЗаполненияНастроек(Неопределено); КонецПроцедуры &НаКлиенте @@ -182,11 +196,7 @@ Или СуффиксФормыИсточника = ВРег("ФормаНастроек") Или СуффиксФормыИсточника = ВРег("ФормаВариантаОтчета") Или СуффиксФормыИсточника = ВРег("ФормаВарианта") Тогда - БыстрыеНастройкиЗаполнить(Результат); - Если Результат.Свойство("Переформировать") И Результат.Переформировать Тогда - ОчиститьСообщения(); - Сформировать(); - КонецЕсли; + БыстрыеНастройкиЗаполнитьКлиент(Результат); РезультатОбработан = Истина; КонецЕсли; КонецЕсли; @@ -226,7 +236,7 @@ // Обновление ссылки варианта отчета. Если ВариантыПанелиКлючТекущегоВарианта <> КлючТекущегоВарианта Тогда - НастройкиОтчета.ВариантСсылка = ВариантыОтчетов.ПолучитьСсылку(НастройкиОтчета.ОтчетСсылка, КлючТекущегоВарианта); + ОбновитьИнформациюОВариантеОтчета(); КонецЕсли; // Вызов переопределяемого модуля. @@ -250,41 +260,7 @@ Отчет.КомпоновщикНастроек.Настройки.ДополнительныеСвойства.Вставить("ВариантНаименование", ОтчетНаименованиеТекущегоВарианта); КонецЕсли; Если ТипЗнч(ФормаПараметры.Отбор) = Тип("Структура") Тогда - ПараметрыКД = Отчет.КомпоновщикНастроек.Настройки.ПараметрыДанных; - ОтборыКД = Отчет.КомпоновщикНастроек.Настройки.Отбор; - Недоступный = РежимОтображенияЭлементаНастройкиКомпоновкиДанных.Недоступный; - Для Каждого КлючИЗначение Из ФормаПараметры.Отбор Цикл - Имя = КлючИЗначение.Ключ; - Значение = КлючИЗначение.Значение; - Если ТипЗнч(Значение) = Тип("ФиксированныйМассив") Тогда - Значение = Новый Массив(Значение); - КонецЕсли; - Если ТипЗнч(Значение) = Тип("Массив") Тогда - Список = Новый СписокЗначений; - Список.ЗагрузитьЗначения(Значение); - Значение = Список; - КонецЕсли; - ПараметрКД = ПараметрыКД.НайтиЗначениеПараметра(Новый ПараметрКомпоновкиДанных(Имя)); - Если ТипЗнч(ПараметрКД) = Тип("ЗначениеПараметраНастроекКомпоновкиДанных") Тогда - ПараметрКД.ИдентификаторПользовательскойНастройки = ""; - ПараметрКД.Использование = Истина; - ПараметрКД.РежимОтображения = Недоступный; - ПараметрКД.Значение = Значение; - Продолжить; - КонецЕсли; - ДоступноеПолеКД = ОтборыКД.ДоступныеПоляОтбора.НайтиПоле(Новый ПолеКомпоновкиДанных(Имя)); - Если ТипЗнч(ДоступноеПолеКД) = Тип("ДоступноеПолеОтбораКомпоновкиДанных") Тогда - Если ТипЗнч(Значение) = Тип("СписокЗначений") Тогда - ВидСравненияКД = ВидСравненияКомпоновкиДанных.ВСписке; - Иначе - ВидСравненияКД = ВидСравненияКомпоновкиДанных.Равно; - КонецЕсли; - ОбщегоНазначенияКлиентСервер.УстановитьЭлементОтбора(ОтборыКД, Имя, Значение, ВидСравненияКД, , Истина, Недоступный, ""); - Продолжить; - КонецЕсли; - ТекстОшибки = НСтр("ru = 'Не удалось установить фиксированный отбор ""%1"".'"); - ВариантыОтчетов.ОшибкаПоВарианту(НастройкиОтчета.ВариантСсылка, ТекстОшибки, Имя); - КонецЦикла; + ОтчетыСервер.УстановитьФиксированныеОтборы(ФормаПараметры.Отбор, Отчет.КомпоновщикНастроек, НастройкиОтчета); КонецЕсли; // Заполнение панели быстрых настроек. @@ -293,8 +269,6 @@ // Вызов переопределяемого модуля. Если НастройкиОтчета.События.ПриЗагрузкеВариантаНаСервере Тогда ОтчетОбъект.ПриЗагрузкеВариантаНаСервере(ЭтотОбъект, НовыеНастройкиКД); - Иначе - ОтчетыПереопределяемый.ПриЗагрузкеВариантаНаСервере(ЭтотОбъект, НовыеНастройкиКД); КонецЕсли; КонецПроцедуры @@ -311,8 +285,6 @@ Если НастройкиОтчета.События.ПриЗагрузкеПользовательскихНастроекНаСервере Тогда ОтчетОбъект = РеквизитФормыВЗначение("Отчет"); ОтчетОбъект.ПриЗагрузкеПользовательскихНастроекНаСервере(ЭтотОбъект, НовыеПользовательскиеНастройкиКД); - Иначе - ОтчетыПереопределяемый.ПриЗагрузкеПользовательскихНастроекНаСервере(ЭтотОбъект, НовыеПользовательскиеНастройкиКД); КонецЕсли; КонецПроцедуры @@ -327,12 +299,11 @@ СтандартнаяОбработка = Ложь; ПараметрыЗаполнения = Новый Структура; - ПараметрыЗаполнения.Вставить("Событие", Новый Структура); - ПараметрыЗаполнения.Событие.Вставить("Имя", "ПриОбновленииСоставаПользовательскихНастроекНаСервере"); - ПараметрыЗаполнения.Событие.Вставить("СтандартнаяОбработка", СтандартнаяОбработка); - БыстрыеНастройкиЗаполнить(ПараметрыЗаполнения); - Если ПараметрыЗаполнения.Событие.СтандартнаяОбработка <> СтандартнаяОбработка Тогда - СтандартнаяОбработка = ПараметрыЗаполнения.Событие.СтандартнаяОбработка; + ПараметрыЗаполнения.Вставить("ИмяСобытия", "ПриОбновленииСоставаПользовательскихНастроекНаСервере"); + ПараметрыЗаполнения.Вставить("СтандартнаяОбработкаСобытия", СтандартнаяОбработка); + РезультатЗаполненияНастроек = БыстрыеНастройкиЗаполнить(ПараметрыЗаполнения); + Если ПараметрыЗаполнения.СтандартнаяОбработкаСобытия <> СтандартнаяОбработка Тогда + СтандартнаяОбработка = ПараметрыЗаполнения.СтандартнаяОбработкаСобытия; КонецЕсли; КонецПроцедуры @@ -341,9 +312,6 @@ Если Не РежимВариантаОтчета Тогда Возврат; КонецЕсли; - Если ОбщегоНазначенияКлиентСервер.ЭтоВебКлиент() Тогда // Для платформы 8.3.5. - Возврат; - КонецЕсли; ПользовательскиеНастройкиКД = Отчет.КомпоновщикНастроек.ПользовательскиеНастройки; Для Каждого ПользовательскаяНастройкаКД Из ПользовательскиеНастройкиКД.Элементы Цикл Тип = ОтчетыКлиентСервер.ТипНастройкиСтрокой(ТипЗнч(ПользовательскаяНастройкаКД)); @@ -388,9 +356,10 @@ Возврат; КонецЕсли; НовыеНастройкиКД = Отчет.КомпоновщикНастроек.ПолучитьНастройки(); + ПользовательскиеНастройкиКД = Отчет.КомпоновщикНастроек.ПользовательскиеНастройки; Отчет.КомпоновщикНастроек.ЗагрузитьНастройки(НовыеНастройкиКД); - // Для платформы 8.3.5. - НастройкиКД.ДополнительныеСвойства.Вставить("Адрес", ПоместитьВоВременноеХранилище(НовыеНастройкиКД)); + Отчет.КомпоновщикНастроек.ЗагрузитьПользовательскиеНастройки(ПользовательскиеНастройкиКД); // Для платформы. + НастройкиКД.ДополнительныеСвойства.Вставить("Адрес", ПоместитьВоВременноеХранилище(НовыеНастройкиКД)); // Для платформы. НастройкиКД = НовыеНастройкиКД; ВариантыПанелиКлючТекущегоВарианта = " - "; ВидимостьДоступностьКорректность("ВариантОтчета"); @@ -416,7 +385,7 @@ #КонецОбласти //////////////////////////////////////////////////////////////////////////////// -// СОБЫТИЯ ЭЛЕМЕНТОВ +// ЭЛЕМЕНТЫ #Область ОбработчикиСобытийЭлементовШапкиФормы @@ -433,13 +402,6 @@ ОтчетыКлиентПереопределяемый.ОбработкаДополнительнойРасшифровки(ЭтотОбъект, Элемент, Расшифровка, СтандартнаяОбработка); КонецПроцедуры -&НаКлиенте -Процедура ОтчетТабличныйДокументПриАктивизацииОбласти(Элемент) - Если НастройкиОтчета.ВыводитьСуммуВыделенныхЯчеек Тогда - ПодключитьОбработчикОжидания("РассчитатьСуммуЯчеек", ПеременныеКлиента.ИнтервалОжидания, Истина); - КонецЕсли; -КонецПроцедуры - //////////////////////////////////////////////////////////////////////////////// // Подключаемые @@ -478,10 +440,10 @@ Иначе Продолжить; КонецЕсли; - ПодчиненныйДополнительно = ОтчетыКлиент.НайтиДополнительныеНастройкиЭлемента(ЭтотОбъект, Связь.ПодчиненныйИдентификаторВФорме); + ПодчиненныйДополнительно = НайтиДополнительныеНастройкиЭлемента(Связь.ПодчиненныйИдентификаторВФорме); Если ПодчиненныйДополнительно <> Неопределено Тогда Если ПодчиненныйДополнительно.ВыводитьФлажок Тогда - ПодчиненныйНастройкаКД = ОтчетыКлиент.НайтиПользовательскуюНастройкуЭлемента(ЭтотОбъект, Связь.ПодчиненныйИдентификаторВФорме); + ПодчиненныйНастройкаКД = НайтиПользовательскуюНастройкуЭлемента(Связь.ПодчиненныйИдентификаторВФорме); Если ПодчиненныйНастройкаКД <> Неопределено Тогда ПодчиненныйНастройкаКД.Использование = Ложь; КонецЕсли; @@ -508,10 +470,21 @@ КонецПроцедуры &НаКлиенте -Процедура Подключаемый_СписокКомпоновщика_Значение_НачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка) +Процедура Подключаемый_СписокКомпоновщика_НачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка) ОтчетыКлиент.СписокКомпоновщикаНачалоВыбора(ЭтотОбъект, Элемент, ДанныеВыбора, СтандартнаяОбработка); КонецПроцедуры +&НаКлиенте +Процедура Подключаемый_ЗначениеКомпоновщика_НачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка) + ОтчетыКлиент.ЗначениеКомпоновщикаНачалоВыбора(ЭтотОбъект, Элемент, ДанныеВыбора, СтандартнаяОбработка); +КонецПроцедуры + +&НаКлиенте +Процедура Подключаемый_ВидСравнения_НачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка) + СтандартнаяОбработка = Ложь; + Подключаемый_ИзменитьВидСравнения(Элемент); +КонецПроцедуры + //////////////////////////////////////////////////////////////////////////////// // Подключаемые - Стандартный период. @@ -685,22 +658,41 @@ #КонецОбласти //////////////////////////////////////////////////////////////////////////////// -// СОБЫТИЯ КНОПОК +// КОМАНДЫ #Область ОбработчикиКомандФормы &НаКлиенте Процедура ВсеНастройки(Команда) + Имя = НастройкиОтчета.ПолноеИмя + ".ФормаНастроек"; + ПараметрыФормы = Новый Структура; + ОбщегоНазначенияКлиентСервер.ДополнитьСтруктуру(ПараметрыФормы, ФормаПараметры, Истина); + ПараметрыФормы.Вставить("КлючВарианта", Строка(КлючТекущегоВарианта)); + ПараметрыФормы.Вставить("Вариант", Отчет.КомпоновщикНастроек.Настройки); + ПараметрыФормы.Вставить("ПользовательскиеНастройки", Отчет.КомпоновщикНастроек.ПользовательскиеНастройки); ПараметрыФормы.Вставить("НастройкиОтчета", НастройкиОтчета); - ПараметрыФормы.Вставить("КомпоновщикНастроек", Отчет.КомпоновщикНастроек); ПараметрыФормы.Вставить("ВариантНаименование", Строка(ОтчетНаименованиеТекущегоВарианта)); Режим = РежимОткрытияОкнаФормы.БлокироватьОкноВладельца; Обработчик = Новый ОписаниеОповещения("ВсеНастройкиЗавершение", ЭтотОбъект); - ОткрытьФорму("ХранилищеНастроек.ХранилищеВариантовОтчетов.Форма.НастройкиОтчета", ПараметрыФормы, ЭтотОбъект, , , , Обработчик, Режим); + ВыполнятьЗамеры = НастройкиОтчета.ВыполнятьЗамеры И ЗначениеЗаполнено(НастройкиОтчета.КлючЗамеров); + Если ВыполнятьЗамеры Тогда + ИдентификаторЗамера = Новый УникальныйИдентификатор; + МодульОценкаПроизводительностиКлиентСервер = ОбщегоНазначенияКлиент.ОбщийМодуль("ОценкаПроизводительностиКлиентСервер"); + МодульОценкаПроизводительностиКлиентСервер.НачатьРучнойЗамерВремени( + НастройкиОтчета.КлючЗамеров + ".Настройки", + ИдентификаторЗамера, + НастройкиОтчета.ПрефиксЗамеров); + КонецЕсли; + + ОткрытьФорму(Имя, ПараметрыФормы, ЭтотОбъект, , , , Обработчик, Режим); + + Если ВыполнятьЗамеры Тогда + МодульОценкаПроизводительностиКлиентСервер.ЗакончитьРучнойЗамерВремени(ИдентификаторЗамера); + КонецЕсли; КонецПроцедуры &НаКлиенте @@ -708,16 +700,14 @@ Если Результат = Неопределено Тогда Возврат; КонецЕсли; - БыстрыеНастройкиЗаполнить(Результат); - Если Результат.Свойство("Переформировать") И Результат.Переформировать Тогда - ОчиститьСообщения(); - Сформировать(); - КонецЕсли; + БыстрыеНастройкиЗаполнитьКлиент(Результат); КонецПроцедуры &НаКлиенте Процедура ИзменитьВариантОтчета(Команда) - ПараметрыФормы = Новый Структура(ФормаПараметры); + ПараметрыФормы = Новый Структура; + ОбщегоНазначенияКлиентСервер.ДополнитьСтруктуру(ПараметрыФормы, ФормаПараметры, Истина); + ПараметрыФормы.Вставить("НастройкиОтчета", НастройкиОтчета); ПараметрыФормы.Вставить("Вариант", Отчет.КомпоновщикНастроек.Настройки); ПараметрыФормы.Вставить("КлючВарианта", Строка(КлючТекущегоВарианта)); ПараметрыФормы.Вставить("ПользовательскиеНастройки", Отчет.КомпоновщикНастроек.ПользовательскиеНастройки); @@ -730,12 +720,11 @@ &НаКлиенте Процедура НастройкиПоУмолчанию(Команда) ПараметрыЗаполнения = Новый Структура; - ПараметрыЗаполнения.Вставить("Событие", Новый Структура); - ПараметрыЗаполнения.Событие.Вставить("Имя", "НастройкиПоУмолчанию"); + ПараметрыЗаполнения.Вставить("ИмяСобытия", "НастройкиПоУмолчанию"); ПараметрыЗаполнения.Вставить("СброситьПользовательскиеНастройки", Истина); ПараметрыЗаполнения.Вставить("ПользовательскиеНастройкиМодифицированы", Истина); - БыстрыеНастройкиЗаполнить(ПараметрыЗаполнения); + БыстрыеНастройкиЗаполнитьКлиент(ПараметрыЗаполнения); КонецПроцедуры &НаКлиенте @@ -744,7 +733,7 @@ Если ОтображениеСостояния.Видимость = Истина И ОтображениеСостояния.ДополнительныйРежимОтображения = ДополнительныйРежимОтображения.Неактуальность Тогда ТекстВопроса = НСтр("ru = 'Отчет не сформирован. Сформировать?'"); - Обработчик = Новый ОписаниеОповещения("ОтправитьПоЭлектроннойПочтеЗавершение", ЭтотОбъект); + Обработчик = Новый ОписаниеОповещения("ОтправитьПоЭлектроннойПочтеПослеДиалогаСформировать", ЭтотОбъект); ПоказатьВопрос(Обработчик, ТекстВопроса, РежимДиалогаВопрос.ДаНет, 60, КодВозвратаДиалога.Да); Иначе ПоказатьДиалогОтправкиПоЭлектроннойПочте(); @@ -759,9 +748,7 @@ &НаКлиенте Процедура ВычислитьСумму(Команда) - ВыделенныеОбласти = СтандартныеПодсистемыКлиент.ВыделенныеОбласти(ОтчетТабличныйДокумент); - СуммаВыделенныхЯчеек = ВычислитьСуммуСервер(ОтчетТабличныйДокумент, ВыделенныеОбласти); - Элементы.АвтоСуммаКнопка.Доступность = Ложь; + СтандартныеПодсистемыКлиент.ПоказатьРасчетЯчеек(ЭтотОбъект, ОтчетТабличныйДокумент); КонецПроцедуры &НаКлиенте @@ -801,11 +788,13 @@ Процедура Подключаемый_Команда(Команда) // Механизмы расширения Результат = Ложь; - Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.РассылкаОтчетов") Тогда - МодульРассылкаОтчетовКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("РассылкаОтчетовКлиент"); - МодульРассылкаОтчетовКлиент.ФормаОтчетаОбработчикКоманды(ЭтотОбъект, Команда, Результат); + КомандаВПостоянных = ПостоянныеКоманды.НайтиПоЗначению(Команда.Имя); + Если КомандаВПостоянных <> Неопределено И ЗначениеЗаполнено(КомандаВПостоянных.Представление) Тогда + МодульКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль(КомандаВПостоянных.Представление); + МодульКлиент.ФормаОтчетаОбработчикКоманды(ЭтотОбъект, Команда, Результат); + Иначе + ОтчетыКлиентПереопределяемый.ОбработчикКоманды(ЭтотОбъект, Команда, Результат); КонецЕсли; - ОтчетыКлиентПереопределяемый.ОбработчикКоманды(ЭтотОбъект, Команда, Результат); КонецПроцедуры &НаКлиенте @@ -818,11 +807,56 @@ ВариантФормы = Найденные[0]; ЗагрузитьВариант(ВариантФормы.КлючВарианта); КлючУникальности = Лев(КлючУникальности, Найти(КлючУникальности, "/")) + "КлючВарианта." + ВариантФормы.КлючВарианта; + ПоказатьРезультатЗаполненияНастроек(Неопределено); Если НастройкиОтчета.ФормироватьСразу Тогда ПодключитьОбработчикОжидания("Сформировать", 0.1, Истина); КонецЕсли; КонецПроцедуры +&НаКлиенте +Процедура Подключаемый_ИзменитьВидСравнения(Команда) + ИдентификаторЭлемента = Прав(Команда.Имя, 32); + Контекст = Новый Структура; + Контекст.Вставить("ИдентификаторЭлемента", ИдентификаторЭлемента); + Обработчик = Новый ОписаниеОповещения("ПослеВыбораВидаСравнения", ЭтотОбъект, Контекст); + ОтчетыКлиент.ИзменитьВидСравнения(ЭтотОбъект, ИдентификаторЭлемента, Обработчик); +КонецПроцедуры + +&НаКлиенте +Процедура ПослеВыбораВидаСравнения(ВидСравнения, Контекст) Экспорт + Если ВидСравнения = Неопределено Тогда + Возврат; + КонецЕсли; + ПараметрыЗаполнения = Новый Структура; + ПараметрыЗаполнения.Вставить("ИмяСобытия", "ИзменитьВидСравнения"); + ПараметрыЗаполнения.Вставить("ПользовательскиеНастройкиМодифицированы", Истина); + БыстрыеНастройкиЗаполнитьКлиент(ПараметрыЗаполнения); +КонецПроцедуры + +&НаКлиенте +Процедура ИзменитьУсловияОтборов(Команда) + ПараметрыФормы = Новый Структура; + ПараметрыФормы.Вставить("НастройкиОтчета", НастройкиОтчета); + ПараметрыФормы.Вставить("КомпоновщикНастроек", Отчет.КомпоновщикНастроек); + ПараметрыФормы.Вставить("ТолькоБыстрые", Истина); + Обработчик = Новый ОписаниеОповещения("ИзменитьУсловияОтборовЗавершение", ЭтотОбъект); + ОткрытьФорму("ХранилищеНастроек.ХранилищеВариантовОтчетов.Форма.УсловияОтборовОтчета", ПараметрыФормы, ЭтотОбъект, Истина, , , Обработчик); +КонецПроцедуры + +&НаКлиенте +Процедура ИзменитьУсловияОтборовЗавершение(ВыборПользователя, Контекст) Экспорт + Если ВыборПользователя = Неопределено + Или ВыборПользователя = КодВозвратаДиалога.Отмена + Или ВыборПользователя.Количество() = 0 Тогда + Возврат; + КонецЕсли; + ПараметрыЗаполнения = Новый Структура; + ПараметрыЗаполнения.Вставить("ИмяСобытия", "ИзменитьУсловияОтборов"); + ПараметрыЗаполнения.Вставить("ПользовательскиеНастройкиМодифицированы", Истина); + ПараметрыЗаполнения.Вставить("УсловияОтборов", ВыборПользователя); + БыстрыеНастройкиЗаполнитьКлиент(ПараметрыЗаполнения); +КонецПроцедуры + #КонецОбласти //////////////////////////////////////////////////////////////////////////////// @@ -960,98 +994,100 @@ КонецПроцедуры &НаКлиенте -Функция НайтиПользовательскуюНастройкуЭлемента(ИмяИлиИдентификаторЭлемента) - // Для пользовательских настроек хранятся идентификаторы компоновки данных, - // поскольку они не могут храниться по ссылке (происходит копирование значения). - Если СтрДлина(ИмяИлиИдентификаторЭлемента) = 32 Тогда - ИдентификаторЭлемента = ИмяИлиИдентификаторЭлемента; - Иначе - ИдентификаторЭлемента = Прав(ИмяИлиИдентификаторЭлемента, 32); - КонецЕсли; - ИдентификаторКД = БыстрыйПоискПользовательскихНастроек.Получить(ИдентификаторЭлемента); - Возврат Отчет.КомпоновщикНастроек.ПользовательскиеНастройки.ПолучитьОбъектПоИдентификатору(ИдентификаторКД); -КонецФункции - -&НаКлиенте -// Исключение из стандартов разработки. Функция ВыполнитьКонтекстныйВызовСервера(КлючОперации, ПараметрыОперации) Экспорт - // Программный интерфейс для контекстного вызова сервера из клиентского общего модуля. + // Исключение из стандартов разработки. + // Программный интерфейс для контекстного вызова сервера из клиентского общего модуля. Возврат КонтекстныйВызовСервера(КлючОперации, ПараметрыОперации); КонецФункции &НаКлиенте Процедура ФоновоеЗаданиеПроверитьНаКлиенте() - Если ФоновоеЗаданиеВыполнено() Тогда - ПоказатьОповещениеПользователя(НСтр("ru = 'Отчет сформирован'"), , Заголовок); - Иначе + Задание = ФоновоеЗаданиеПроверитьНаСервере(); + Если Задание.Выполняется Тогда ДлительныеОперацииКлиент.ОбновитьПараметрыОбработчикаОжидания(ПараметрыОбработчика); ПодключитьОбработчикОжидания("ФоновоеЗаданиеПроверитьНаКлиенте", ПараметрыОбработчика.ТекущийИнтервал, Истина); + Иначе + ПеременныеКлиента.УспешноСформирован = Задание.Успех; + Если ПеременныеКлиента.УспешноСформирован Тогда + ПоказатьОповещениеПользователя(НСтр("ru = 'Отчет сформирован'"), , Заголовок); + Иначе + ПоказатьОповещениеПользователя(НСтр("ru = 'Отчет не сформирован'"), , Заголовок); + КонецЕсли; + ПослеФормированияНаКлиенте(); КонецЕсли; КонецПроцедуры &НаКлиенте -Процедура РассчитатьСуммуЯчеек() - СуммаВыделенныхЯчеек = СтандартныеПодсистемыКлиентСервер.СуммаЯчеек(ОтчетТабличныйДокумент, Неопределено); - Элементы.АвтоСуммаКнопка.Доступность = (СуммаВыделенныхЯчеек = "<"); -КонецПроцедуры - -&НаКлиенте -Процедура ОтправитьПоЭлектроннойПочтеЗавершение(Ответ, ДополнительныеПараметры) Экспорт +Процедура ОтправитьПоЭлектроннойПочтеПослеДиалогаСформировать(Ответ, ДополнительныеПараметры) Экспорт Если Ответ = КодВозвратаДиалога.Да Тогда - СформироватьНепосредственно(); - ПоказатьДиалогОтправкиПоЭлектроннойПочте(); + ПеременныеКлиента.Вставить("ОтправитьПослеФормирования", Истина); + Сформировать(); КонецЕсли; КонецПроцедуры -&НаКлиенте -Процедура ПоказатьДиалогОтправкиПоЭлектроннойПочте() - ОписаниеОповещения = Новый ОписаниеОповещения("ПоказатьДиалогОтправкиПоЭлектроннойПочтеЗавершение", ЭтотОбъект); - Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаСПочтовымиСообщениями") Тогда - МодульРаботаСПочтовымиСообщениямиКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("РаботаСПочтовымиСообщениямиКлиент"); - МодульРаботаСПочтовымиСообщениямиКлиент.ПроверитьНаличиеУчетнойЗаписиДляОтправкиПочты(ОписаниеОповещения); - КонецЕсли; -КонецПроцедуры - -&НаКлиенте -Процедура ПоказатьДиалогОтправкиПоЭлектроннойПочтеЗавершение(УчетнаяЗаписьНастроена, ДополнительныеПараметры) Экспорт - Если УчетнаяЗаписьНастроена <> Истина Тогда - Возврат; - КонецЕсли; - - ТабличныеДокументы = Новый СписокЗначений; - ТабличныеДокументы.Добавить(ЭтотОбъект.ОтчетТабличныйДокумент, ЭтотОбъект.ОтчетНаименованиеТекущегоВарианта); - - ФормаЗаголовок = СтрЗаменить(НСтр("ru = 'Отправка отчета ""%1"" по почте'"), "%1", ЭтотОбъект.ОтчетНаименованиеТекущегоВарианта); - - ПараметрыФормы = Новый Структура; - ПараметрыФормы.Вставить("ТабличныеДокументы", ТабличныеДокументы); - ПараметрыФормы.Вставить("Тема", ЭтотОбъект.ОтчетНаименованиеТекущегоВарианта); - ПараметрыФормы.Вставить("Заголовок", ФормаЗаголовок); - - ОткрытьФорму("ОбщаяФорма.ОтправкаТабличныхДокументовПоПочте", ПараметрыФормы); -КонецПроцедуры - &НаКлиенте Процедура Сформировать() - Если СтандартныеПодсистемыКлиентПовтИсп.ПараметрыРаботыКлиента().ИнформационнаяБазаФайловая - Или ТипЗнч(НастройкиОтчета.ОтчетСсылка) = Тип("Строка") Тогда + ПередФормированиемНаКлиенте(); + Если ПеременныеКлиента.Непосредственно Тогда + ТребуетсяОбработчик = Ложь; СформироватьНепосредственно(); Иначе - ТребуетсяОбработчик = ФоновоеЗаданиеЗапустить(); - Если ТребуетсяОбработчик Тогда - ДлительныеОперацииКлиент.ИнициализироватьПараметрыОбработчикаОжидания(ПараметрыОбработчика); - ПодключитьОбработчикОжидания("ФоновоеЗаданиеПроверитьНаКлиенте", 1, Истина); + ТребуетсяОбработчик = ФоновоеЗаданиеЗапустить(ПеременныеКлиента.ФормированиеПриОткрытии); + КонецЕсли; + Если ТребуетсяОбработчик Тогда + ДлительныеОперацииКлиент.ИнициализироватьПараметрыОбработчикаОжидания(ПараметрыОбработчика); + ПодключитьОбработчикОжидания("ФоновоеЗаданиеПроверитьНаКлиенте", 1, Истина); + Иначе + ПослеФормированияНаКлиенте(); + КонецЕсли; +КонецПроцедуры + +&НаКлиенте +Процедура ПередФормированиемНаКлиенте() + ПеременныеКлиента.Вставить("ВыполнятьЗамеры", НастройкиОтчета.ВыполнятьЗамеры И ЗначениеЗаполнено(НастройкиОтчета.КлючЗамеров)); + Если ПеременныеКлиента.ВыполнятьЗамеры Тогда + ВариантыОтчетовКлиентСервер.ДополнитьСтруктуруКлючом(ПеременныеКлиента, "МодульОценкаПроизводительностиКлиентСервер"); + ВариантыОтчетовКлиентСервер.ДополнитьСтруктуруКлючом(ПеременныеКлиента, "ИдентификаторЗамера"); + Комментарий = НастройкиОтчета.ПрефиксЗамеров + "; " + НСтр("ru = 'Непосредственно:'") + " " + Строка(ПеременныеКлиента.Непосредственно); + ПеременныеКлиента.ИдентификаторЗамера = Новый УникальныйИдентификатор; + ПеременныеКлиента.МодульОценкаПроизводительностиКлиентСервер = ОбщегоНазначенияКлиент.ОбщийМодуль("ОценкаПроизводительностиКлиентСервер"); + ПеременныеКлиента.МодульОценкаПроизводительностиКлиентСервер.НачатьРучнойЗамерВремени( + НастройкиОтчета.КлючЗамеров + ".Формирование", + ПеременныеКлиента.ИдентификаторЗамера, + Комментарий); + КонецЕсли; +КонецПроцедуры + +&НаКлиенте +Процедура ПослеФормированияНаКлиенте() + ОтключитьОбработчикОжидания("ФоновоеЗаданиеПроверитьНаКлиенте"); + ПеременныеКлиента.ФормированиеПриОткрытии = Ложь; + Если ПеременныеКлиента.ВыполнятьЗамеры Тогда + ПеременныеКлиента.МодульОценкаПроизводительностиКлиентСервер.ЗакончитьРучнойЗамерВремени(ПеременныеКлиента.ИдентификаторЗамера); + КонецЕсли; + Если ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(ПеременныеКлиента, "ОтправитьПослеФормирования") = Истина Тогда + ПеременныеКлиента.ОтправитьПослеФормирования = Ложь; + Если ПеременныеКлиента.УспешноСформирован Тогда + ПоказатьДиалогОтправкиПоЭлектроннойПочте(); КонецЕсли; КонецЕсли; + ПоказатьРезультатЗаполненияНастроек(Неопределено); + ОбновитьОтображениеДанных(); // Для платформы. +КонецПроцедуры + +&НаКлиенте +Процедура ПоказатьДиалогОтправкиПоЭлектроннойПочте() + ТабличныеДокументы = Новый СписокЗначений; + ТабличныеДокументы.Добавить(ОтчетТабличныйДокумент, ОтчетНаименованиеТекущегоВарианта); - СостояниеДоИзменения = Новый Структура("Видимость, ДополнительныйРежимОтображения, Картинка, Текст"); - ЗаполнитьЗначенияСвойств(СостояниеДоИзменения, Элементы.ОтчетТабличныйДокумент.ОтображениеСостояния); + ЗаголовокСохранения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Отправка отчета ""%1"" по почте'"), ОтчетНаименованиеТекущегоВарианта); - Отчет.КомпоновщикНастроек.ПользовательскиеНастройки.ДополнительныеСвойства.Удалить("ФормированиеПриОткрытии"); + ПараметрыОтправки = Новый Структура("Тема", ОтчетНаименованиеТекущегоВарианта); - ЗаполнитьЗначенияСвойств(Элементы.ОтчетТабличныйДокумент.ОтображениеСостояния, СостояниеДоИзменения); + МодульРаботаСПочтовымиСообщениямиКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("РаботаСПочтовымиСообщениямиКлиент"); + МодульРаботаСПочтовымиСообщениямиКлиент.ОтправитьТабличныеДокументы(ТабличныеДокументы, ЗаголовокСохранения, ПараметрыОтправки); КонецПроцедуры &НаКлиенте @@ -1062,6 +1098,114 @@ ВидимостьДоступностьКорректность(""); КонецПроцедуры +&НаКлиенте +Функция НайтиПользовательскуюНастройкуЭлемента(ИмяИлиИдентификаторЭлемента) Экспорт + // Для пользовательских настроек хранятся идентификаторы компоновки данных, + // поскольку они не могут храниться по ссылке (происходит копирование значения). + Если СтрДлина(ИмяИлиИдентификаторЭлемента) = 32 Тогда + ИдентификаторЭлемента = ИмяИлиИдентификаторЭлемента; + Иначе + ИдентификаторЭлемента = Прав(ИмяИлиИдентификаторЭлемента, 32); + КонецЕсли; + ИдентификаторКД = БыстрыйПоискПользовательскихНастроек.Получить(ИдентификаторЭлемента); + Если ИдентификаторКД = Неопределено Тогда + Возврат Неопределено; + Иначе + Возврат Отчет.КомпоновщикНастроек.ПользовательскиеНастройки.ПолучитьОбъектПоИдентификатору(ИдентификаторКД); + КонецЕсли; +КонецФункции + +&НаКлиенте +Функция НайтиДополнительныеНастройкиЭлемента(ИдентификаторЭлемента) Экспорт + // Для пользовательских настроек хранятся идентификаторы компоновки данных, + // поскольку они не могут храниться по ссылке (происходит копирование значения). + ВсеДополнительныеНастройки = ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры( + Отчет.КомпоновщикНастроек.ПользовательскиеНастройки.ДополнительныеСвойства, "ЭлементыФормы"); + Если ВсеДополнительныеНастройки = Неопределено Тогда + Возврат Неопределено; + Иначе + Возврат ВсеДополнительныеНастройки[ИдентификаторЭлемента]; + КонецЕсли; +КонецФункции + +&НаКлиенте +Процедура БыстрыеНастройкиЗаполнитьКлиент(ПараметрыЗаполнения) + Если ПараметрыЗаполнения = Неопределено Тогда + ПараметрыЗаполнения = Новый Структура("ИмяСобытия", "ПослеИзмененияКоллекции"); + КонецЕсли; + РезультатКлиента = БыстрыеНастройкиЗаполнить(ПараметрыЗаполнения); + ПоказатьРезультатЗаполненияНастроек(РезультатКлиента); + Если ПараметрыЗаполнения.Свойство("Переформировать") И ПараметрыЗаполнения.Переформировать Тогда + ОчиститьСообщения(); + Сформировать(); + КонецЕсли; +КонецПроцедуры + +&НаКлиенте +Процедура ПоказатьРезультатЗаполненияНастроек(РезультатКлиента) + Если РезультатКлиента = Неопределено Тогда + РезультатКлиента = РезультатЗаполненияНастроек; + РезультатЗаполненияНастроек = Неопределено; + КонецЕсли; + Если ТипЗнч(РезультатКлиента) <> Тип("Структура") Тогда + Возврат; + КонецЕсли; + + // Для платформы (переопределение доступных значений на клиенте). + СвоиСпискиВыбора = ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(РезультатКлиента, "СвоиСпискиВыбора"); + Если ТипЗнч(СвоиСпискиВыбора) = Тип("Массив") Тогда + Для Каждого ИдентификаторЭлемента Из СвоиСпискиВыбора Цикл + НастройкаВарианта = НайтиНастройкуВарианта(ЭтотОбъект, ИдентификаторЭлемента); + Если НастройкаВарианта = Неопределено Тогда + Продолжить; + КонецЕсли; + ДополнительныеНастройки = НайтиДополнительныеНастройкиЭлемента(ИдентификаторЭлемента); + Если ДополнительныеНастройки = Неопределено + Или ТипЗнч(ДополнительныеНастройки.ЗначенияДляВыбора) <> Тип("СписокЗначений") Тогда + Продолжить; + КонецЕсли; + Тип = ТипЗнч(НастройкаВарианта.ЭлементКД); + Если Тип = Тип("ЗначениеПараметраНастроекКомпоновкиДанных") Тогда + ДоступныеПараметры = НастройкаВарианта.УзелКД.ДоступныеПараметры; + ДоступнаяНастройкаКД = ДоступныеПараметры.НайтиПараметр(НастройкаВарианта.ЭлементКД.Параметр); + ИначеЕсли Тип = Тип("ЭлементОтбораКомпоновкиДанных") Тогда + ДоступныеПоляОтбора = НастройкаВарианта.УзелКД.ДоступныеПоляОтбора; + ДоступнаяНастройкаКД = ДоступныеПоляОтбора.НайтиПоле(НастройкаВарианта.ЭлементКД.ЛевоеЗначение); + КонецЕсли; + Если ДоступнаяНастройкаКД = Неопределено + Или ТипЗнч(ДоступнаяНастройкаКД.ДоступныеЗначения) <> Тип("СписокЗначений") Тогда + Продолжить; + КонецЕсли; + Попытка + ДоступнаяНастройкаКД.ДоступныеЗначения.Очистить(); + Для Каждого Элемент Из ДополнительныеНастройки.ЗначенияДляВыбора Цикл + ЗаполнитьЗначенияСвойств(ДоступнаяНастройкаКД.ДоступныеЗначения.Добавить(), Элемент); + КонецЦикла; + Исключение + Продолжить; // Для платформы. + КонецПопытки; + КонецЦикла; + КонецЕсли; + + СтандартныеПодсистемыКлиент.ПоказатьРезультатВыполнения(ЭтотОбъект, РезультатКлиента); +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// Клиент или сервер + +&НаКлиентеНаСервереБезКонтекста +Функция НайтиНастройкуВарианта(ЭтотОбъект, ИдентификаторЭлемента) + ПоискНастройкиВарианта = ЭтотОбъект.БыстрыйПоискНастроекВарианта.Получить(ИдентификаторЭлемента); + Если ПоискНастройкиВарианта = Неопределено Тогда + Возврат Неопределено; + КонецЕсли; + КорневойУзелКД = ЭтотОбъект.Отчет.КомпоновщикНастроек.Настройки.ПолучитьОбъектПоИдентификатору(ПоискНастройкиВарианта.ИдентификаторУзлаКД); + Результат = Новый Структура("УзелКД, ЭлементКД"); + Результат.УзелКД = КорневойУзелКД[ПоискНастройкиВарианта.ИмяКоллекции]; + Результат.ЭлементКД = Результат.УзелКД.ПолучитьОбъектПоИдентификатору(ПоискНастройкиВарианта.ИдентификаторЭлементаКД); + Возврат Результат; +КонецФункции + //////////////////////////////////////////////////////////////////////////////// // Вызов сервера @@ -1070,16 +1214,23 @@ ПоказыватьКомандыВариантовОтчетов = РежимВариантаОтчета И НастройкиОтчета.РазрешеноМенятьВарианты; Если Изменения = "" Тогда + Если Не РежимВариантаОтчета Тогда + Элементы.ИзменитьУсловияОтборов.Видимость = Ложь; + КонецЕсли; + // Вычисление параметров отображения. ЕстьНастройки = ЕстьБыстрыеНастройки Или ЕстьОбычныеНастройки; // Применение параметров отображения. - Элементы.ВсеНастройки_Левая.Видимость = ПоказыватьКомандыВариантовОтчетов Или ЕстьОбычныеНастройки; - Элементы.ВсеНастройки.Видимость = ПоказыватьКомандыВариантовОтчетов Или ЕстьОбычныеНастройки; - Элементы.ГруппаНастройкиОтчета_Левая.Видимость = ПоказыватьКомандыВариантовОтчетов; - Элементы.ВыбратьВариант.Видимость = ПоказыватьКомандыВариантовОтчетов И Не РежимРасшифровки; - Элементы.СохранитьВариант.Видимость = ПоказыватьКомандыВариантовОтчетов; - Элементы.ИзменитьВариант.Видимость = ПоказыватьКомандыВариантовОтчетов; + Элементы.ВсеНастройки.Видимость = ПоказыватьКомандыВариантовОтчетов Или ЕстьОбычныеНастройки; + Элементы.ГруппаВариантыОтчета.Видимость = ПоказыватьКомандыВариантовОтчетов; + Элементы.ИзменитьВариант.Видимость = ПоказыватьКомандыВариантовОтчетов; + Элементы.ВыбратьВариант.Видимость = ПоказыватьКомандыВариантовОтчетов; + ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы( + Элементы, + "СохранитьВариант", + "Видимость", + ПоказыватьКомандыВариантовОтчетов); // Для платформы (кнопка исчезает если команда недоступна по правам). Элементы.ГруппаПользовательскиеНастройки.Видимость = ПоказыватьКомандыВариантовОтчетов И ЕстьНастройки; // Формировать сразу. @@ -1121,21 +1272,15 @@ КонецПроцедуры &НаСервере -Процедура БыстрыеНастройкиЗаполнить(Знач ПараметрыЗаполнения) +Функция БыстрыеНастройкиЗаполнить(Знач ПараметрыКлиента) // Вставка значений по умолчанию для обязательных ключей параметров заполнения. - БыстрыеНастройкиДозаполнитьПараметры(ПараметрыЗаполнения); - - Если НастройкиОтчета.События.ПередЗаполнениемПанелиБыстрыхНастроек - Или НастройкиОтчета.События.ПослеЗаполненияПанелиБыстрыхНастроек Тогда - ОтчетОбъект = РеквизитФормыВЗначение("Отчет"); - КонецЕсли; + ПараметрыЗаполнения = БыстрыеНастройкиДозаполнитьПараметры(ПараметрыКлиента); // Вызов переопределяемого модуля. Если НастройкиОтчета.События.ПередЗаполнениемПанелиБыстрыхНастроек Тогда + ОтчетОбъект = ОтчетыСервер.ОтчетОбъект(ПараметрыЗаполнения.ОтчетОбъектИлиПолноеИмя); ОтчетОбъект.ПередЗаполнениемПанелиБыстрыхНастроек(ЭтотОбъект, ПараметрыЗаполнения); - Иначе - ОтчетыПереопределяемый.ПередЗаполнениемПанелиБыстрыхНастроек(ЭтотОбъект, ПараметрыЗаполнения); КонецЕсли; // Запись новых настроек варианта и пользовательских настроек в компоновщик. @@ -1146,7 +1291,11 @@ УсловияВывода.Вставить("ТолькоПользовательские", Истина); УсловияВывода.Вставить("ТолькоБыстрые", Истина); УсловияВывода.Вставить("ИдентификаторТекущегоУзлаКД", Неопределено); - Информация = ОтчетыСервер.РасширеннаяИнформацияОНастройках(Отчет.КомпоновщикНастроек, ЭтотОбъект, УсловияВывода); + Информация = ОтчетыСервер.РасширеннаяИнформацияОНастройках( + Отчет.КомпоновщикНастроек, + НастройкиОтчета, + ПараметрыЗаполнения.ОтчетОбъектИлиПолноеИмя, + УсловияВывода); ЕстьБыстрыеНастройки = Информация.ЕстьБыстрыеНастройки; ЕстьОбычныеНастройки = Информация.ЕстьОбычныеНастройки; @@ -1159,6 +1308,13 @@ // Связи. ЗарегистрироватьОтключаемыеСвязи(Информация); + // Стандартные периоды. + НастройкиОтчета.Вставить("СтандартныеПериоды", Новый Массив); + СтандартныеПериоды = Информация.ПользовательскиеНастройки.НайтиСтроки(Новый Структура("ТипЭлементов", "СтандартныйПериод")); + Для Каждого СвойстваНастройки Из СтандартныеПериоды Цикл + НастройкиОтчета.СтандартныеПериоды.Добавить(СвойстваНастройки.ИдентификаторКД); + КонецЦикла; + // Обработка дополнительных настроек. ПослеИзмененияКлючевыхСостояний(ПараметрыЗаполнения); @@ -1167,16 +1323,16 @@ // Вызов переопределяемого модуля. Если НастройкиОтчета.События.ПослеЗаполненияПанелиБыстрыхНастроек Тогда + ОтчетОбъект = ОтчетыСервер.ОтчетОбъект(ПараметрыЗаполнения.ОтчетОбъектИлиПолноеИмя); ОтчетОбъект.ПослеЗаполненияПанелиБыстрыхНастроек(ЭтотОбъект, ПараметрыЗаполнения); - Иначе - ОтчетыПереопределяемый.ПослеЗаполненияПанелиБыстрыхНастроек(ЭтотОбъект, ПараметрыЗаполнения); КонецЕсли; Если НастройкиОтчета.Свойство("ОтчетОбъект") Тогда НастройкиОтчета.Удалить("ОтчетОбъект"); КонецЕсли; -КонецПроцедуры + Возврат ПараметрыЗаполнения.Результат; +КонецФункции &НаСервере Функция КонтекстныйВызовСервера(КлючОперации, ПараметрыОперации) @@ -1184,15 +1340,12 @@ Если НастройкиОтчета.События.КонтекстныйВызовСервера Тогда ОтчетОбъект = РеквизитФормыВЗначение("Отчет"); ОтчетОбъект.КонтекстныйВызовСервера(ЭтотОбъект, КлючОперации, ПараметрыОперации, РезультатВызова); - Иначе - ОтчетыПереопределяемый.КонтекстныйВызовСервера(ЭтотОбъект, КлючОперации, ПараметрыОперации, РезультатВызова); КонецЕсли; Возврат РезультатВызова; КонецФункции &НаСервере Процедура СформироватьНепосредственно() - ДопСвойства = Отчет.КомпоновщикНастроек.ПользовательскиеНастройки.ДополнительныеСвойства; // Формирование отчета. @@ -1228,18 +1381,14 @@ Если РезультатФормирования.ВариантМодифицирован Или РезультатФормирования.ПользовательскиеНастройкиМодифицированы Тогда - РезультатФормирования.Вставить("Событие", Новый Структура); - РезультатФормирования.Событие.Вставить("Имя", "ПослеФормирования"); - РезультатФормирования.Событие.Вставить("Непосредственно", Истина); - БыстрыеНастройкиЗаполнить(РезультатФормирования); + РезультатФормирования.Вставить("ИмяСобытия", "ПослеФормирования"); + РезультатФормирования.Вставить("Непосредственно", Истина); + РезультатЗаполненияНастроек = БыстрыеНастройкиЗаполнить(РезультатФормирования); КонецЕсли; КонецПроцедуры &НаСервере -Функция ФоновоеЗаданиеЗапустить() - ДопСвойства = Отчет.КомпоновщикНастроек.ПользовательскиеНастройки.ДополнительныеСвойства; - - ФормированиеПриОткрытии = ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(ДопСвойства, "ФормированиеПриОткрытии", Ложь); +Функция ФоновоеЗаданиеЗапустить(Знач ФормированиеПриОткрытии) Если Не ПроверитьЗаполнение() Тогда Если ФормированиеПриОткрытии Тогда ТекстОшибки = ""; @@ -1253,25 +1402,52 @@ КонецЕсли; // Запуск фонового задания - ДопСвойства.Вставить("КлючВарианта", КлючТекущегоВарианта); - ПараметрыФормированияОтчета = Новый Структура; - ПараметрыФормированияОтчета.Вставить("ОтчетСсылка", НастройкиОтчета.ОтчетСсылка); - ПараметрыФормированияОтчета.Вставить("Настройки", Отчет.КомпоновщикНастроек.Настройки); - ПараметрыФормированияОтчета.Вставить("ФиксированныеНастройки", Отчет.КомпоновщикНастроек.ФиксированныеНастройки); - ПараметрыФормированияОтчета.Вставить("ПользовательскиеНастройки", Отчет.КомпоновщикНастроек.ПользовательскиеНастройки); + ПараметрыФормированияОтчета.Вставить("ОтчетСсылка", НастройкиОтчета.ОтчетСсылка); + ПараметрыФормированияОтчета.Вставить("КлючВарианта", КлючТекущегоВарианта); + ПараметрыФормированияОтчета.Вставить("НастройкиКД", Отчет.КомпоновщикНастроек.Настройки); + ПараметрыФормированияОтчета.Вставить("ФиксированныеНастройкиКД", Отчет.КомпоновщикНастроек.ФиксированныеНастройки); + ПараметрыФормированияОтчета.Вставить("ПользовательскиеНастройкиКД", Отчет.КомпоновщикНастроек.ПользовательскиеНастройки); + + Если НастройкиОтчета.ВыполнятьЗамеры И ЗначениеЗаполнено(НастройкиОтчета.КлючЗамеров) Тогда + Разрезы = Новый Структура; + Разрезы.Вставить("ИмяОтчета", СтрРазделить(НастройкиОтчета.ПолноеИмя, ".")[1]); + Разрезы.Вставить("ИмяИсходногоВарианта", НастройкиОтчета.ИмяИсходногоВарианта); + Разрезы.Вставить("Внешний", Число(НастройкиОтчета.Внешний)); + Разрезы.Вставить("Пользовательский", Число(НастройкиОтчета.Пользовательский)); + Разрезы.Вставить("Расшифровка", Число(РежимРасшифровки)); + Разрезы.Вставить("Модифицирован", Число(ВариантМодифицирован)); + + Если НастройкиОтчета.Свойство("СтандартныеПериоды") Тогда + Для Каждого ИдентификаторКД Из НастройкиОтчета.СтандартныеПериоды Цикл + ПользовательскаяНастройкаКД = Отчет.КомпоновщикНастроек.ПользовательскиеНастройки.ПолучитьОбъектПоИдентификатору(ИдентификаторКД); + Если ТипЗнч(ПользовательскаяНастройкаКД) = Тип("ЭлементОтбораКомпоновкиДанных") Тогда + Значение = ПользовательскаяНастройкаКД.ПравоеЗначение; + ИначеЕсли ТипЗнч(ПользовательскаяНастройкаКД) = Тип("ЗначениеПараметраНастроекКомпоновкиДанных") Тогда + Значение = ПользовательскаяНастройкаКД.Значение; + Иначе + Продолжить; + КонецЕсли; + Если ПользовательскаяНастройкаКД.Использование И ТипЗнч(Значение) = Тип("СтандартныйПериод") Тогда + ОбщегоНазначенияКлиентСервер.ДополнитьСтруктуру(Разрезы, ОтчетыСервер.АнализПериода(Значение), Истина); + Прервать; + КонецЕсли; + КонецЦикла; + КонецЕсли; + + ПараметрыФормированияОтчета.Вставить("ИмяКлючевойОперации", НРег(ВариантыОтчетовКлиентСервер.СтруктураВСтроку(Разрезы, "=", "/"))); + КонецЕсли; ИнформацияОбОшибке = Неопределено; Попытка РезультатФоновогоЗадания = ДлительныеОперации.ЗапуститьВыполнениеВФоне( УникальныйИдентификатор, - "ВариантыОтчетов.СформироватьОтчет", + "ВариантыОтчетов.СформироватьОтчетВФоне", ПараметрыФормированияОтчета, НСтр("ru = 'Варианты отчетов: Формирование отчета'")); Исключение ИнформацияОбОшибке = ИнформацияОбОшибке(); КонецПопытки; - ДопСвойства.Удалить("КлючВарианта"); Если ИнформацияОбОшибке <> Неопределено Тогда ПоказатьОшибкиФормирования(ИнформацияОбОшибке); Возврат Ложь; @@ -1298,19 +1474,17 @@ КонецФункции &НаСервере -Функция ФоновоеЗаданиеВыполнено() - Попытка - ЗаданиеВыполнено = ДлительныеОперации.ЗаданиеВыполнено(ФоновоеЗаданиеИдентификатор); - Исключение - ПоказатьОшибкиФормирования(ИнформацияОбОшибке()); - ВызватьИсключение; - КонецПопытки; - - Если ЗаданиеВыполнено Тогда - ФоновоеЗаданиеЗагрузитьРезультат(); +Функция ФоновоеЗаданиеПроверитьНаСервере() + Задание = ДлительныеОперации.НайтиЗаданиеСлужебный(ФоновоеЗаданиеИдентификатор); + Если Не Задание.Выполняется Тогда + Если Задание.Успех Тогда + ФоновоеЗаданиеЗагрузитьРезультат(); + Иначе + ПоказатьОшибкиФормирования(Задание.Ошибка); + КонецЕсли; КонецЕсли; - - Возврат ЗаданиеВыполнено; + Задание.Удалить("Ошибка"); + Возврат Задание; КонецФункции &НаСервереБезКонтекста @@ -1318,14 +1492,16 @@ ДлительныеОперации.ОтменитьВыполнениеЗадания(ФоновоеЗаданиеИдентификатор); КонецПроцедуры -&НаСервереБезКонтекста -Функция ВычислитьСуммуСервер(Знач ОтчетТабличныйДокумент, Знач ВыделенныеОбласти) - Возврат СтандартныеПодсистемыКлиентСервер.СуммаЯчеек(ОтчетТабличныйДокумент, ВыделенныеОбласти); -КонецФункции - &НаСервере Процедура ЗагрузитьВариант(КлючВарианта) + // Сохранение текущих пользовательских настроек. + ОбщегоНазначения.ХранилищеСистемныхНастроекСохранить( + НастройкиОтчета.ПолноеИмя + "/" + КлючТекущегоВарианта + "/ТекущиеПользовательскиеНастройки", + "", + Отчет.КомпоновщикНастроек.ПользовательскиеНастройки); + // Загрузка нового варианта. УстановитьТекущийВариант(КлючВарианта); + // Переключение состояния. ОтображениеСостояния = Элементы.ОтчетТабличныйДокумент.ОтображениеСостояния; ОтображениеСостояния.Видимость = Истина; ОтображениеСостояния.ДополнительныйРежимОтображения = ДополнительныйРежимОтображения.Неактуальность; @@ -1337,9 +1513,11 @@ // Сервер &НаСервере -Процедура БыстрыеНастройкиДозаполнитьПараметры(ПараметрыЗаполнения) - Если Не ПараметрыЗаполнения.Свойство("Событие") Тогда - ПараметрыЗаполнения.Вставить("Событие", Новый Структура("Имя", "")); +Функция БыстрыеНастройкиДозаполнитьПараметры(ПараметрыКлиента) + ПараметрыЗаполнения = Новый Структура; + ОбщегоНазначенияКлиентСервер.ДополнитьСтруктуру(ПараметрыЗаполнения, ПараметрыКлиента, Истина); + Если Не ПараметрыЗаполнения.Свойство("ИмяСобытия") Тогда + ПараметрыЗаполнения.Вставить("ИмяСобытия", ""); КонецЕсли; Если Не ПараметрыЗаполнения.Свойство("ВариантМодифицирован") Тогда ПараметрыЗаполнения.Вставить("ВариантМодифицирован", Ложь); @@ -1350,7 +1528,18 @@ Если Не ПараметрыЗаполнения.Свойство("СброситьПользовательскиеНастройки") Тогда ПараметрыЗаполнения.Вставить("СброситьПользовательскиеНастройки", Ложь); КонецЕсли; -КонецПроцедуры + Если Не ПараметрыЗаполнения.Свойство("Результат") Тогда + ПараметрыЗаполнения.Вставить("Результат", Новый Структура); + КонецЕсли; + + ПараметрыЗаполнения.Вставить("ОтчетОбъектИлиПолноеИмя", НастройкиОтчета.ПолноеИмя); + Если НастройкиОтчета.События.ПередЗаполнениемПанелиБыстрыхНастроек + Или НастройкиОтчета.События.ПослеЗаполненияПанелиБыстрыхНастроек Тогда + ПараметрыЗаполнения.ОтчетОбъектИлиПолноеИмя = РеквизитФормыВЗначение("Отчет"); + КонецЕсли; + + Возврат ПараметрыЗаполнения; +КонецФункции &НаСервере Процедура БыстрыеНастройкиЗагрузитьНастройкиВКомпоновщик(ПараметрыЗаполнения) @@ -1379,6 +1568,15 @@ НастройкиОтчета.Вставить("ФормаНастроекИмяСтраницы", ПараметрыЗаполнения.ФормаНастроекИмяСтраницы); КонецЕсли; + УсловияОтборов = ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(ПараметрыЗаполнения, "УсловияОтборов"); + Если УсловияОтборов <> Неопределено Тогда + УзелКД = Отчет.КомпоновщикНастроек.ПользовательскиеНастройки; + Для Каждого КлючИЗначение Из УсловияОтборов Цикл + ПользовательскаяНастройкаКД = УзелКД.ПолучитьОбъектПоИдентификатору(КлючИЗначение.Ключ); + ПользовательскаяНастройкаКД.ВидСравнения = КлючИЗначение.Значение; + КонецЦикла; + КонецЕсли; + Если ПараметрыЗаполнения.ВариантМодифицирован Тогда ВариантМодифицирован = Истина; КонецЕсли; @@ -1434,6 +1632,7 @@ СоответствиеПользовательскихНастроек = Новый Соответствие; СоответствиеИменОбъектовМетаданных = Информация.СоответствиеИменОбъектовМетаданных; СоответствиеОтключаемыхСвязей = Новый Соответствие; + СоответствиеНастроекВарианта = Новый Соответствие; // Удаление реквизитов ПараметрыЗаполнения.Вставить("Реквизиты", Новый Структура); @@ -1500,14 +1699,27 @@ Прочее.Вставить("ДобавленныеПоляВвода", ДобавленныеПоляВвода); Прочее.Вставить("ДобавленныеСтандартныеПериоды", ДобавленныеСтандартныеПериоды); Прочее.Вставить("ДобавленныеСпискиЗначений", Неопределено); + Прочее.Вставить("ЕстьОтборыСУсловиями", Ложь); + + ГруппаВывода = ГруппыВывода.Быстрые; Для Каждого СвойстваНастройки Из ВыводимыеНастройки Цикл СоответствиеПользовательскихНастроек.Вставить(СвойстваНастройки.ИдентификаторЭлемента, СвойстваНастройки.ИдентификаторКД); - ГруппаВывода = ГруппыВывода.Быстрые; + + Если СвойстваНастройки.НастройкаВарианта <> Неопределено Тогда + ПоискНастройкиВарианта = Новый Структура; + ПоискНастройкиВарианта.Вставить("ИдентификаторУзлаКД", СвойстваНастройки.СтрокаДерева.ИдентификаторКД); + ПоискНастройкиВарианта.Вставить("ИмяКоллекции", СвойстваНастройки.НастройкаВарианта.ИмяКоллекции); + ПоискНастройкиВарианта.Вставить("ИдентификаторЭлементаКД", СвойстваНастройки.НастройкаВарианта.ИдентификаторКД); + СоответствиеНастроекВарианта.Вставить(СвойстваНастройки.ИдентификаторЭлемента, ПоискНастройкиВарианта); + КонецЕсли; + ОтчетыСервер.ВывестиЭлементыНастройки(ЭтотОбъект, Элементы, СвойстваНастройки, ГруппаВывода, Прочее); КонецЦикла; - ОтчетыСервер.ВывестиПоПорядку(ЭтотОбъект, ГруппыВывода.Быстрые, Элементы.БыстрыеНастройки, 2, Ложь); + Элементы.ИзменитьУсловияОтборов.Видимость = Прочее.ЕстьОтборыСУсловиями; + + ОтчетыСервер.ВывестиПоПорядку(ЭтотОбъект, ГруппаВывода, Элементы.БыстрыеНастройки, 2, Ложь); // Удаление старых и добавление новых реквизитов. Для Каждого КлючИЗначение Из ПараметрыЗаполнения.Реквизиты.Существующие Цикл @@ -1538,6 +1750,7 @@ БыстрыйПоискПользовательскихНастроек = Новый ФиксированноеСоответствие(СоответствиеПользовательскихНастроек); БыстрыйПоискИменОбъектовМетаданных = Новый ФиксированноеСоответствие(СоответствиеИменОбъектовМетаданных); БыстрыйПоискОтключаемыхСвязей = Новый ФиксированноеСоответствие(СоответствиеОтключаемыхСвязей); + БыстрыйПоискНастроекВарианта = Новый ФиксированноеСоответствие(СоответствиеНастроекВарианта); ПользовательскиеНастройкиКД.ДополнительныеСвойства.Вставить("ЭлементыФормы", ДополнительныеНастройкиЭлементов); КонецПроцедуры @@ -1563,27 +1776,27 @@ РезультатФормирования = ПолучитьИзВременногоХранилища(ФоновоеЗаданиеАдресХранилища); - Если РезультатФормирования = Неопределено Тогда + Успех = ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(РезультатФормирования, "Успех"); + Если Успех <> Истина Тогда СформироватьНепосредственно(); Иначе НастройкиПечатиСохранить(); - ОтчетТабличныйДокумент = РезультатФормирования.ОтчетТабличныйДокумент; + ОтчетТабличныйДокумент = РезультатФормирования.ТабличныйДокумент; НастройкиПечатиВосстановить(); Если ЗначениеЗаполнено(ОтчетДанныеРасшифровки) И ЭтоАдресВременногоХранилища(ОтчетДанныеРасшифровки) Тогда УдалитьИзВременногоХранилища(ОтчетДанныеРасшифровки); КонецЕсли; - ОтчетДанныеРасшифровки = ПоместитьВоВременноеХранилище(РезультатФормирования.ОтчетРасшифровка, УникальныйИдентификатор); + ОтчетДанныеРасшифровки = ПоместитьВоВременноеХранилище(РезультатФормирования.Расшифровка, УникальныйИдентификатор); Если РезультатФормирования.ВариантМодифицирован Или РезультатФормирования.ПользовательскиеНастройкиМодифицированы Тогда - РезультатФормирования.Вставить("Событие", Новый Структура); - РезультатФормирования.Событие.Вставить("Имя", "ПослеФормирования"); - РезультатФормирования.Событие.Вставить("Непосредственно", Ложь); - БыстрыеНастройкиЗаполнить(РезультатФормирования); + РезультатФормирования.Вставить("ИмяСобытия", "ПослеФормирования"); + РезультатФормирования.Вставить("Непосредственно", Ложь); + РезультатЗаполненияНастроек = БыстрыеНастройкиЗаполнить(РезультатФормирования); КонецЕсли; КонецЕсли; @@ -1597,7 +1810,7 @@ &НаСервере Процедура ПоказатьОшибкиФормирования(ИнформацияОбОшибке) Если ТипЗнч(ИнформацияОбОшибке) = Тип("ИнформацияОбОшибке") Тогда - ОписаниеОшибки = ОтчетыКлиентСервер.КраткоеПредставлениеОшибкиФормированияОтчета(ИнформацияОбОшибке); + ОписаниеОшибки = СтандартныеПодсистемыКлиентСервер.ИсходнаяПричинаОшибки(ИнформацияОбОшибке); ПодробноеПредставлениеОшибки = НСтр("ru = 'Ошибка при формировании:'") + Символы.ПС + ПодробноеПредставлениеОшибки(ИнформацияОбОшибке); Если ПустаяСтрока(ОписаниеОшибки) Тогда ОписаниеОшибки = ПодробноеПредставлениеОшибки; @@ -1703,7 +1916,7 @@ ТаблицаВариантов.Свернуть("Ссылка, КлючВарианта, Наименование"); ТаблицаВариантов.Сортировать("Наименование Возр, КлючВарианта Возр"); - Группа = Элементы.ВариантыОтчета_Левая; + Группа = Элементы.ВариантыОтчета; КнопкиГруппы = Группа.ПодчиненныеЭлементы; ПоследнийИндекс = ВариантыФормы.Количество() - 1; Для Каждого СтрокаТаблицы Из ТаблицаВариантов Цикл @@ -1732,7 +1945,7 @@ ПостоянныеКоманды.Добавить(ВариантФормы.ИмяКоманды); КонецЕсли; - Кнопка.Пометка = (НастройкиОтчета.ВариантСсылка = ВариантФормы.Ссылка); + Кнопка.Пометка = (КлючТекущегоВарианта = СтрокаТаблицы.КлючВарианта); КонецЦикла; Найденные = ВариантыФормы.НайтиСтроки(Новый Структура("Найден", Ложь)); @@ -1747,7 +1960,7 @@ &НаСервере Процедура ПослеИзмененияКлючевыхСостояний(ПараметрыЗаполнения) - Если ПараметрыЗаполнения.Событие.Имя <> "ПослеФормирования" Тогда + Если ПараметрыЗаполнения.ИмяСобытия <> "ПослеФормирования" Тогда Переформировать = ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(ПараметрыЗаполнения, "Переформировать"); Если Переформировать = Истина Тогда ОтображениеСостояния = Элементы.ОтчетТабличныйДокумент.ОтображениеСостояния; @@ -1781,4 +1994,44 @@ КонецЦикла; КонецПроцедуры -#КонецОбласти +&НаСервере +Процедура ОбновитьИнформациюОВариантеОтчета() + Запрос = Новый Запрос; + Запрос.Текст = + "ВЫБРАТЬ РАЗРЕШЕННЫЕ ПЕРВЫЕ 1 + | ВариантыОтчетов.Ссылка КАК ВариантСсылка, + | ВариантыОтчетов.ПредопределенныйВариант.КлючЗамеров КАК КлючЗамеров, + | ВариантыОтчетов.ПредопределенныйВариант КАК ПредопределенныйСсылка, + | ВЫБОР + | КОГДА ВариантыОтчетов.Пользовательский + | ИЛИ ВариантыОтчетов.Родитель.КлючВарианта ЕСТЬ NULL + | ТОГДА ВариантыОтчетов.КлючВарианта + | ИНАЧЕ ВариантыОтчетов.Родитель.КлючВарианта + | КОНЕЦ КАК ИмяИсходногоВарианта, + | ВариантыОтчетов.Пользовательский КАК Пользовательский + |ИЗ + | Справочник.ВариантыОтчетов КАК ВариантыОтчетов + |ГДЕ + | ВариантыОтчетов.Отчет = &Отчет + | И ВариантыОтчетов.КлючВарианта = &КлючВарианта"; + Запрос.УстановитьПараметр("Отчет", НастройкиОтчета.ОтчетСсылка); + Запрос.УстановитьПараметр("КлючВарианта", КлючТекущегоВарианта); + + Выборка = Запрос.Выполнить().Выбрать(); + + Если Выборка.Следующий() Тогда + НастройкиОтчета.Вставить("ВариантСсылка", Выборка.ВариантСсылка); + НастройкиОтчета.Вставить("КлючЗамеров", Выборка.КлючЗамеров); + НастройкиОтчета.Вставить("ПредопределенныйСсылка", Выборка.ПредопределенныйСсылка); + НастройкиОтчета.Вставить("ИмяИсходногоВарианта", ?(Выборка.Пользовательский, КлючТекущегоВарианта, Выборка.ИмяИсходногоВарианта)); + НастройкиОтчета.Вставить("Пользовательский", Выборка.Пользовательский); + Иначе + НастройкиОтчета.Вставить("ВариантСсылка", Неопределено); + НастройкиОтчета.Вставить("КлючЗамеров", Неопределено); + НастройкиОтчета.Вставить("ПредопределенныйСсылка", Неопределено); + НастройкиОтчета.Вставить("ИмяИсходногоВарианта", Неопределено); + НастройкиОтчета.Вставить("Пользовательский", Неопределено); + КонецЕсли; +КонецПроцедуры + +#КонецОбласти \ No newline at end of file diff --git a/SSL/src/DataProcessors/ПолнотекстовыйПоискВДанных/Forms/Форма/Form.form b/SSL/src/CommonForms/ФормаПоиска/Form.form similarity index 80% rename from SSL/src/DataProcessors/ПолнотекстовыйПоискВДанных/Forms/Форма/Form.form rename to SSL/src/CommonForms/ФормаПоиска/Form.form index 23c381fe1..9a8ff7313 100644 --- a/SSL/src/DataProcessors/ПолнотекстовыйПоискВДанных/Forms/Форма/Form.form +++ b/SSL/src/CommonForms/ФормаПоиска/Form.form @@ -165,6 +165,114 @@ Auto + + ГруппаОбластьПоиска + 62 + + ОбластьПоискаЗаголовок + 64 + + <key>ru</key> + <value>Область поиска:</value> + + true + true + + true + + + ОбластьПоискаЗаголовокРасширеннаяПодсказка + 66 + Label + true + true + + Left + + + + ОбластьПоискаЗаголовокКонтекстноеМеню + 65 + true + + Label + true + true + + Left + + + + ОбластиПоискаПредставление + 67 + + <key>ru</key> + <value>Везде</value> + + true + true + + true + + + ОбластиПоискаПредставлениеРасширеннаяПодсказка + 69 + Label + true + true + + Left + + + + ОбластиПоискаПредставлениеКонтекстноеМеню + 68 + true + + Label + true + true + + + Click + ОбластиПоискаНажатие + + true + Left + + + true + true + + true + + + <key>ru</key> + <value>Группа область поиска</value> + + + ru + Группа область поиска + + + ГруппаОбластьПоискаРасширеннаяПодсказка + 63 + Label + true + true + + Left + + + UsualGroup + + Auto + true + true + Auto + Auto + + ГруппаИнформацияОНайденном 31 @@ -384,6 +492,10 @@ OnCreateAtServer ПриСозданииНаСервере + + OnClose + ПриЗакрытии + DontBlock true true @@ -543,6 +655,43 @@ true + + ОбластиПоиска + + <key>ru</key> + <value>Области поиска</value> + + 15 + + ValueList + + + true + + + true + + + + + + + ИскатьВРазделах + + <key>ru</key> + <value>Искать в разделах</value> + + 16 + + Boolean + + + true + + + true + + ВыполнитьПоиск @@ -566,7 +715,7 @@ </handler> </action> <representation>Text</representation> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <formCommands> @@ -592,7 +741,7 @@ </handler> </action> <representation>Picture</representation> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <formCommands> @@ -618,7 +767,7 @@ </handler> </action> <representation>Picture</representation> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <parameters> diff --git a/SSL/src/DataProcessors/ПолнотекстовыйПоискВДанных/Forms/Форма/Module.bsl b/SSL/src/CommonForms/ФормаПоиска/Module.bsl similarity index 73% rename from SSL/src/DataProcessors/ПолнотекстовыйПоискВДанных/Forms/Форма/Module.bsl rename to SSL/src/CommonForms/ФормаПоиска/Module.bsl index da291364c..942ef84b2 100644 --- a/SSL/src/DataProcessors/ПолнотекстовыйПоискВДанных/Forms/Форма/Module.bsl +++ b/SSL/src/CommonForms/ФормаПоиска/Module.bsl @@ -13,19 +13,29 @@ Элементы.Далее.Доступность = Ложь; Элементы.Назад.Доступность = Ложь; - Массив = ОбщегоНазначения.ХранилищеОбщихНастроекЗагрузить("ПолнотекстовыйПоискСтрокиПолнотекстовогоПоиска"); + НастройкиПоиска = ОбщегоНазначения.ХранилищеОбщихНастроекЗагрузить("НастройкиПолнотекстовогоПоиска", ""); + Если НастройкиПоиска <> Неопределено Тогда + Если НастройкиПоиска.Свойство("ИскатьВРазделах") Тогда + ИскатьВРазделах = НастройкиПоиска.ИскатьВРазделах; + КонецЕсли; + ОбластиПоиска = НастройкиПоиска.ОбластиПоиска; + КонецЕсли; + + Массив = ОбщегоНазначения.ХранилищеОбщихНастроекЗагрузить("ПолнотекстовыйПоискСтрокиПолнотекстовогоПоиска", ""); Если Массив <> Неопределено Тогда Элементы.СтрокаПоиска.СписокВыбора.ЗагрузитьЗначения(Массив); КонецЕсли; Если Не ПустаяСтрока(Параметры.ПереданнаяСтрокаПоиска) Тогда + ИскатьВРазделах = Ложь; + СтрокаПоиска = Параметры.ПереданнаяСтрокаПоиска; СохранитьСтрокуПоиска(Элементы.СтрокаПоиска.СписокВыбора, СтрокаПоиска); Попытка Результат = ВыполнитьПоискСервер(0, ТекущаяПозиция, СтрокаПоиска); - Исключение + Исключение ОбщегоНазначенияКлиентСервер.СообщитьПользователю(КраткоеПредставлениеОшибки(ИнформацияОбОшибке())); Возврат; КонецПопытки; @@ -38,10 +48,10 @@ Если РезультатыПоиска.Количество() <> 0 Тогда ПоказаныРезультатыСПо = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Показаны %1 - %2 из %3'"), - Строка(ТекущаяПозиция + 1), - Строка(ТекущаяПозиция + РезультатыПоиска.Количество()), - Строка(ПолноеКоличество) ); + НСтр("ru = 'Показаны %1 - %2 из %3'"), + Строка(ТекущаяПозиция + 1), + Строка(ТекущаяПозиция + РезультатыПоиска.Количество()), + Строка(ПолноеКоличество) ); Элементы.Далее.Доступность = (ПолноеКоличество - ТекущаяПозиция) > РезультатыПоиска.Количество(); Элементы.Назад.Доступность = (ТекущаяПозиция > 0); @@ -61,7 +71,15 @@ |</table> |</body> |</html>"; - КонецЕсли; + СформироватьПредставлениеОбластиПоиска(); + КонецЕсли; +КонецПроцедуры + +&НаКлиенте +Процедура ПриЗакрытии() + + СохранитьНастройкиПоиска(); + КонецПроцедуры #КонецОбласти @@ -102,11 +120,11 @@ СтандартнаяОбработка = Ложь; ЧастьURL = ЭлементHTML.outerHTML; - Позиция = Найти(ЧастьURL, "sel_num="); + Позиция = СтрНайти(ЧастьURL, "sel_num="); ЧастьURLОбрезанная = Сред(ЧастьURL, Позиция + 9); - ПозицияОкончание = Найти(ЧастьURLОбрезанная, """"); + ПозицияОкончание = СтрНайти(ЧастьURLОбрезанная, """"); Если ПозицияОкончание = 0 Тогда - ПозицияОкончание = Найти(ЧастьURLОбрезанная, "'"); + ПозицияОкончание = СтрНайти(ЧастьURLОбрезанная, "'"); Если ПозицияОкончание = 0 Тогда ПозицияОкончание = 2; КонецЕсли; @@ -134,6 +152,34 @@ КонецЕсли; КонецПроцедуры +&НаКлиенте +Процедура ОбластиПоискаНажатие(Элемент) + + ПараметрыОткрытия = Новый Структура; + ПараметрыОткрытия.Вставить("ОбластиПоиска", ОбластиПоиска); + ПараметрыОткрытия.Вставить("ИскатьВРазделах", ИскатьВРазделах); + + ОписаниеОповещения = + Новый ОписаниеОповещения("ОбластиПоискаНажатиеПродолжение", ЭтотОбъект); + + ОткрытьФорму( + "Обработка.ПолнотекстовыйПоискВДанных.Форма.Настройки", + ПараметрыОткрытия,,,,, + ОписаниеОповещения); + +КонецПроцедуры + +&НаКлиенте +Процедура ОбластиПоискаНажатиеПродолжение(Результат, Параметры) Экспорт + + Если ТипЗнч(Результат) = Тип("Структура") Тогда + ОбластиПоиска = Результат.ОбластиПоиска; + ИскатьВРазделах = Результат.ИскатьВРазделах; + СформироватьПредставлениеОбластиПоиска(); + КонецЕсли; + +КонецПроцедуры + #КонецОбласти #Область ОбработчикиКомандФормы @@ -180,7 +226,7 @@ Возврат; КонецЕсли; - ЭтоНавигационнаяСсылка = Найти(СтрокаПоиска, "e1cib/data/") <> 0; + ЭтоНавигационнаяСсылка = СтрНайти(СтрокаПоиска, "e1cib/data/") <> 0; Если ЭтоНавигационнаяСсылка Тогда ПерейтиПоНавигационнойСсылке(СтрокаПоиска); СтрокаПоиска = ""; @@ -190,7 +236,10 @@ Состояние(СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Выполняется поиск ""%1""...'"), СтрокаПоиска)); СписокВыбора = Элементы.СтрокаПоиска.СписокВыбора.Скопировать(); - Результат = СохранитьСтрокуИВыполнитьПоискСервер(Направление, ТекущаяПозиция, СтрокаПоиска, СписокВыбора); + ДополнительныеПараметры = Новый Структура; + ДополнительныеПараметры.Вставить("ИскатьВРазделах", ИскатьВРазделах); + ДополнительныеПараметры.Вставить("ОбластиПоиска", ОбластиПоиска); + Результат = СохранитьСтрокуИВыполнитьПоискСервер(Направление, ТекущаяПозиция, СтрокаПоиска, СписокВыбора, ДополнительныеПараметры); Элементы.СтрокаПоиска.СписокВыбора.Очистить(); Для Каждого ЭлементСпискаВыбора Из СписокВыбора Цикл Элементы.СтрокаПоиска.СписокВыбора.Добавить(ЭлементСпискаВыбора.Значение, ЭлементСпискаВыбора.Представление); @@ -320,12 +369,12 @@ КонецФункции &НаСервереБезКонтекста -Функция СохранитьСтрокуИВыполнитьПоискСервер(Направление, ТекущаяПозиция, СтрокаПоиска, СписокВыбора) +Функция СохранитьСтрокуИВыполнитьПоискСервер(Направление, ТекущаяПозиция, СтрокаПоиска, СписокВыбора, ДополнительныеПараметры) // Процедура выполняет полнотекстовый поиск. СохранитьСтрокуПоиска(СписокВыбора, СтрокаПоиска); - Возврат ВыполнитьПоискСервер(Направление, ТекущаяПозиция, СтрокаПоиска); + Возврат ВыполнитьПоискСервер(Направление, ТекущаяПозиция, СтрокаПоиска, ДополнительныеПараметры); КонецФункции @@ -349,20 +398,42 @@ Строки = СписокВыбора.ВыгрузитьЗначения(); ОбщегоНазначения.ХранилищеОбщихНастроекСохранить( - "ПолнотекстовыйПоискСтрокиПолнотекстовогоПоиска", - , + "ПолнотекстовыйПоискСтрокиПолнотекстовогоПоиска", + "", Строки); + КонецПроцедуры + +&НаСервере +Процедура СохранитьНастройкиПоиска() + + Настройки = Новый Структура; + Настройки.Вставить("ОбластиПоиска", ОбластиПоиска); + Настройки.Вставить("ИскатьВРазделах", ИскатьВРазделах); + + ОбщегоНазначения.ХранилищеОбщихНастроекСохранить("НастройкиПолнотекстовогоПоиска", "", Настройки); + КонецПроцедуры &НаСервереБезКонтекста -Функция ВыполнитьПоискСервер(Направление, ТекущаяПозиция, СтрокаПоиска) +Функция ВыполнитьПоискСервер(Направление, ТекущаяПозиция, СтрокаПоиска, ДополнительныеПараметры = Неопределено) // Процедура выполняет полнотекстовый поиск. РазмерПорции = 20; СписокПоиска = ПолнотекстовыйПоиск.СоздатьСписок(СтрокаПоиска, РазмерПорции); + Если ДополнительныеПараметры <> Неопределено Тогда + Если ДополнительныеПараметры.ИскатьВРазделах И ДополнительныеПараметры.ОбластиПоиска.Количество() > 0 Тогда + СписокПоиска.ИспользованиеМетаданных = ИспользованиеМетаданныхПолнотекстовогоПоиска.НеИспользовать; + ОбластьПоиска = Новый Массив; + Для Каждого Область Из ДополнительныеПараметры.ОбластиПоиска Цикл + ОбластьПоиска.Добавить(ОбщегоНазначения.ОбъектМетаданныхПоИдентификатору(Область.Значение)); + КонецЦикла; + СписокПоиска.ОбластьПоиска = ОбластьПоиска; + КонецЕсли; + КонецЕсли; + Если Направление = 0 Тогда СписокПоиска.ПерваяЧасть(); ИначеЕсли Направление = -1 Тогда @@ -411,4 +482,40 @@ КонецЕсли; КонецПроцедуры +&НаСервере +Процедура СформироватьПредставлениеОбластиПоиска() + + Если Не ИскатьВРазделах Или ОбластиПоиска.Количество() = 0 Тогда + Элементы.ОбластиПоискаПредставление.Заголовок = НСтр("ru = 'Везде'"); + Возврат; + КонецЕсли; + + ПредставлениеОбластиПоиска = ""; + Если ОбластиПоиска.Количество() < 4 Тогда + Для Каждого Область Из ОбластиПоиска Цикл + ОбъектМетаданных = ОбщегоНазначения.ОбъектМетаданныхПоИдентификатору(Область.Значение); + ПредставлениеОбластиПоиска = ПредставлениеОбластиПоиска + ПредставлениеФормыСписка(ОбъектМетаданных) + ","; + КонецЦикла; + Элементы.ОбластиПоискаПредставление.Заголовок = Лев(ПредставлениеОбластиПоиска, СтрДлина(ПредставлениеОбластиПоиска)-1); + Иначе + Элементы.ОбластиПоискаПредставление.Заголовок = НСтр("ru = 'В выбранных разделах'"); + КонецЕсли; + +КонецПроцедуры + +&НаСервере +Функция ПредставлениеФормыСписка(Объект) + + Если Не ПустаяСтрока(Объект.РасширенноеПредставлениеСписка) Тогда + Представление = Объект.РасширенноеПредставлениеСписка; + ИначеЕсли Не ПустаяСтрока(Объект.ПредставлениеСписка) Тогда + Представление = Объект.ПредставлениеСписка; + Иначе + Представление = Объект.Представление(); + КонецЕсли; + + Возврат Представление; + +КонецФункции + #КонецОбласти diff --git a/SSL/src/CommonForms/ФормаПоиска/ФормаПоиска.mdo b/SSL/src/CommonForms/ФормаПоиска/ФормаПоиска.mdo new file mode 100644 index 000000000..9fa4cbb28 --- /dev/null +++ b/SSL/src/CommonForms/ФормаПоиска/ФормаПоиска.mdo @@ -0,0 +1,10 @@ +<?xml version="1.0" encoding="UTF-8"?> +<mdclass:CommonForm xmlns:mdclass="http://g5.1c.ru/v8/dt/metadata/mdclass" uuid="61789ea5-aad2-4b3b-a1c7-3ff7409379eb"> + <name>ФормаПоиска</name> + <synonym> + <key>ru</key> + <value>Форма поиска</value> + </synonym> + <usePurposes>PersonalComputer</usePurposes> + <usePurposes>MobileDevice</usePurposes> +</mdclass:CommonForm> diff --git a/SSL/src/CommonForms/ЭлектроннаяПодпись/Form.form b/SSL/src/CommonForms/ЭлектроннаяПодпись/Form.form index 840faa5e9..27862409e 100644 --- a/SSL/src/CommonForms/ЭлектроннаяПодпись/Form.form +++ b/SSL/src/CommonForms/ЭлектроннаяПодпись/Form.form @@ -269,7 +269,6 @@ <group>Vertical</group> <autoFillCheck>true</autoFillCheck> <enabled>true</enabled> - <verticalScroll>UseIfNecessary</verticalScroll> <showTitle>auto</showTitle> <showCloseButton>true</showCloseButton> <attributes> @@ -410,7 +409,7 @@ <name>СохранитьВФайл</name> </handler> </action> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <formCommands> @@ -432,7 +431,7 @@ <name>ОткрытьСертификат</name> </handler> </action> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <parameters> diff --git a/SSL/src/CommonModules/АдминистрированиеКластераCOMКлиентСервер/Module.bsl b/SSL/src/CommonModules/АдминистрированиеКластераCOMКлиентСервер/Module.bsl index 2726914df..026617942 100644 --- a/SSL/src/CommonModules/АдминистрированиеКластераCOMКлиентСервер/Module.bsl +++ b/SSL/src/CommonModules/АдминистрированиеКластераCOMКлиентСервер/Module.bsl @@ -1080,8 +1080,7 @@ КонецЦикла; - ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'На рабочем сервере %1 не найден кластер %2'"), + ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'На рабочем сервере %1 не найден кластер %2'"), СоединениеСАгентомСервера.ConnectionString, ПортКластера); @@ -1105,8 +1104,7 @@ КонецЕсли; КонецЦикла; - ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'В кластере серверов %1:%2 не найдено активных рабочих процессов.'"), + ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'В кластере серверов %1:%2 не найдено активных рабочих процессов.'"), Кластер.HostName, Формат(Кластер.MainPort, "ЧГ=0")); @@ -1133,12 +1131,10 @@ КонецЦикла; - ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'В кластере серверов %1:%2 не найдена информационная база ""%3""!'"), + ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'В кластере серверов %1:%2 не найдена информационная база ""%3""!'"), Кластер.HostName, Формат(Кластер.MainPort, "ЧГ=0"), - ИмяВКластере - ); + ИмяВКластере); КонецФункции @@ -1163,10 +1159,10 @@ Если Не ЗначениеЗаполнено(ИнформационнаяБаза.DBMS) Тогда - ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Неправильные имя и пароль администратора информационной базы %1 в кластере серверов %2:%3 (имя: ""%4"").'"), + ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Неправильные имя и пароль администратора информационной базы %1 в кластере серверов %2:%3 (имя: ""%4"").'"), ИмяВКластере, - Кластер.HostName, Кластер.MainPort, + Кластер.HostName, + Кластер.MainPort, ИмяАдминистратораИБ); КонецЕсли; @@ -1177,12 +1173,10 @@ КонецЦикла; - ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'В кластере серверов %1:%2 не найдена информационная база ""%3""!'"), + ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'В кластере серверов %1:%2 не найдена информационная база ""%3""!'"), Кластер.HostName, Формат(Кластер.MainPort, "ЧГ=0"), - ИмяВКластере - ); + ИмяВКластере); КонецФункции @@ -1375,12 +1369,10 @@ КонецЦикла; - ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'В кластере серверов %1:%2 не найден профиль безопасности ""%3""!'"), + ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'В кластере серверов %1:%2 не найден профиль безопасности ""%3""!'"), Кластер.HostName, Формат(Кластер.MainPort, "ЧГ=0"), - ИмяПрофиля - ); + ИмяПрофиля); КонецФункции @@ -1550,8 +1542,7 @@ СоединениеСАгентомСервера.UnregSecurityProfileVirtualDirectory( Кластер, ИмяПрофиля, - УдаляемыйВиртуальныйКаталог.Alias - ); + УдаляемыйВиртуальныйКаталог.Alias); КонецЦикла; СоздаваемыеВиртуальныеКаталоги = СвойстваПрофиляБезопасности.ВиртуальныеКаталоги; Для Каждого СоздаваемыйВиртуальныйКаталог Из СоздаваемыеВиртуальныеКаталоги Цикл @@ -1559,8 +1550,7 @@ ЗаполнитьСвойстваОбъектаОбъектнойМоделиCOMАдминистратораПоОписанию( ВиртуальныйКаталог, СоздаваемыйВиртуальныйКаталог, - СловарьСвойствВиртуальногоКаталога() - ); + СловарьСвойствВиртуальногоКаталога()); СоединениеСАгентомСервера.RegSecurityProfileVirtualDirectory(Кластер, ИмяПрофиля, ВиртуальныйКаталог); КонецЦикла; @@ -1570,8 +1560,7 @@ СоединениеСАгентомСервера.UnregSecurityProfileCOMClass( Кластер, ИмяПрофиля, - УдаляемыйCOMКласс.Name - ); + УдаляемыйCOMКласс.Name); КонецЦикла; СоздаваемыеCOMКлассы = СвойстваПрофиляБезопасности.COMКлассы; Для Каждого СоздаваемыйCOMКласс Из СоздаваемыеCOMКлассы Цикл @@ -1579,8 +1568,7 @@ ЗаполнитьСвойстваОбъектаОбъектнойМоделиCOMАдминистратораПоОписанию( COMКласс, СоздаваемыйCOMКласс, - СловарьСвойствCOMКласса() - ); + СловарьСвойствCOMКласса()); СоединениеСАгентомСервера.RegSecurityProfileCOMClass(Кластер, ИмяПрофиля, COMКласс); КонецЦикла; @@ -1590,8 +1578,7 @@ СоединениеСАгентомСервера.UnregSecurityProfileAddIn( Кластер, ИмяПрофиля, - УдаляемыйВнешнийКомпонент.Name - ); + УдаляемыйВнешнийКомпонент.Name); КонецЦикла; СоздаваемыеВнешниеКомпоненты = СвойстваПрофиляБезопасности.ВнешниеКомпоненты; Для Каждого СоздаваемыйВнешнийКомпонент Из СоздаваемыеВнешниеКомпоненты Цикл @@ -1599,8 +1586,7 @@ ЗаполнитьСвойстваОбъектаОбъектнойМоделиCOMАдминистратораПоОписанию( ВнешнийКомпонент, СоздаваемыйВнешнийКомпонент, - СловарьСвойствВнешнейКомпоненты() - ); + СловарьСвойствВнешнейКомпоненты()); СоединениеСАгентомСервера.RegSecurityProfileAddIn(Кластер, ИмяПрофиля, ВнешнийКомпонент); КонецЦикла; @@ -1610,8 +1596,7 @@ СоединениеСАгентомСервера.UnregSecurityProfileUnSafeExternalModule( Кластер, ИмяПрофиля, - УдаляемыйВнешнийМодуль.Name - ); + УдаляемыйВнешнийМодуль.Name); КонецЦикла; СоздаваемыеВнешниеМодули = СвойстваПрофиляБезопасности.ВнешниеМодули; Для Каждого СоздаваемыйВнешнийМодуль Из СоздаваемыеВнешниеМодули Цикл @@ -1619,8 +1604,7 @@ ЗаполнитьСвойстваОбъектаОбъектнойМоделиCOMАдминистратораПоОписанию( ВнешнийМодуль, СоздаваемыйВнешнийМодуль, - СловарьСвойствВнешнегоМодуля() - ); + СловарьСвойствВнешнегоМодуля()); СоединениеСАгентомСервера.RegSecurityProfileUnSafeExternalModule(Кластер, ИмяПрофиля, ВнешнийМодуль); КонецЦикла; @@ -1630,8 +1614,7 @@ СоединениеСАгентомСервера.UnregSecurityProfileApplication( Кластер, ИмяПрофиля, - УдаляемоеПриложениеОС.Name - ); + УдаляемоеПриложениеОС.Name); КонецЦикла; СоздаваемыеПриложенияОС = СвойстваПрофиляБезопасности.ПриложенияОС; Для Каждого СоздаваемоеПриложениеОС Из СоздаваемыеПриложенияОС Цикл @@ -1639,8 +1622,7 @@ ЗаполнитьСвойстваОбъектаОбъектнойМоделиCOMАдминистратораПоОписанию( ПриложениеОС, СоздаваемоеПриложениеОС, - СловарьСвойствПриложенияОС() - ); + СловарьСвойствПриложенияОС()); СоединениеСАгентомСервера.RegSecurityProfileApplication(Кластер, ИмяПрофиля, ПриложениеОС); КонецЦикла; @@ -1650,8 +1632,7 @@ СоединениеСАгентомСервера.UnregSecurityProfileInternetResource( Кластер, ИмяПрофиля, - УдаляемыйИнтернетРесурс.Name - ); + УдаляемыйИнтернетРесурс.Name); КонецЦикла; СоздаваемыеИнтернетРесурсы = СвойстваПрофиляБезопасности.ИнтернетРесурсы; Для Каждого СоздаваемыйИнтернетРесурс Из СоздаваемыеИнтернетРесурсы Цикл @@ -1659,8 +1640,7 @@ ЗаполнитьСвойстваОбъектаОбъектнойМоделиCOMАдминистратораПоОписанию( ИнтернетРесурс, СоздаваемыйИнтернетРесурс, - СловарьСвойствИнтернетРесурса() - ); + СловарьСвойствИнтернетРесурса()); СоединениеСАгентомСервера.RegSecurityProfileInternetResource(Кластер, ИмяПрофиля, ИнтернетРесурс); КонецЦикла; diff --git a/SSL/src/CommonModules/АдминистрированиеКластераRASКлиентСервер/Module.bsl b/SSL/src/CommonModules/АдминистрированиеКластераRASКлиентСервер/Module.bsl index bdeac5e38..c0be1dc90 100644 --- a/SSL/src/CommonModules/АдминистрированиеКластераRASКлиентСервер/Module.bsl +++ b/SSL/src/CommonModules/АдминистрированиеКластераRASКлиентСервер/Module.bsl @@ -717,71 +717,30 @@ #КонецОбласти -#КонецОбласти +#Область ИнформационныеБазы -#Область СлужебныеПроцедурыИФункции - -// Возвращает описания кластеров серверов. -// -// ПараметрыАдминистрированияКластера - Структура, описывающая параметры подключения к кластеру серверов, -// описание - см. АдминистрированиеКластераКлиентСервер.ПараметрыАдминистрированияКластера(), -// Фильтр - Структура, параметры фильтрации кластеров серверов. -// -// Возвращаемое значение: Массив(Структура). -// -Функция ПолучитьКластеры(Знач ПараметрыАдминистрированияКластера, Знач Фильтр = Неопределено) - - Шаблон = "%rac cluster list"; - ПотокВывода = ВыполнитьКоманду(Шаблон, ПараметрыАдминистрированияКластера); - Результат = ПарсерВывода(ПотокВывода, Неопределено, Фильтр); - Возврат Результат; - -КонецФункции - -// Возвращает внутренний идентификатор кластера серверов. -// -// Параметры: -// ПараметрыАдминистрированияКластера - Структура, описывающая параметры подключения к кластеру серверов, -// описание - см. АдминистрированиеКластераКлиентСервер.ПараметрыАдминистрированияКластера(). -// -// Возвращаемое значение - Строка, внутренний идентификатор кластера серверов. -// -Функция ПолучитьКластер(Знач ПараметрыАдминистрированияКластера) - - Фильтр = Новый Структура("port", ПараметрыАдминистрированияКластера.ПортКластера); - - Кластеры = ПолучитьКластеры(ПараметрыАдминистрированияКластера, Фильтр); - - Если Кластеры.Количество() = 1 Тогда - Возврат Кластеры[0].Получить("cluster"); - Иначе - ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Не обнаружен кластер серверов с портом %1'"), ПараметрыАдминистрированияКластера.ПортКластера); - КонецЕсли; - -КонецФункции - -// Возвращает описания рабочих серверов. +// Возвращает внутренний идентификатор информационной базы. // // Параметры: // ИдентификаторКластера - Строка, внутренний идентификатор кластера серверов, // ПараметрыАдминистрированияКластера - Структура, описывающая параметры подключения к кластеру серверов, // описание - см. АдминистрированиеКластераКлиентСервер.ПараметрыАдминистрированияКластера(), -// Фильтр - Структура, параметры фильтрации рабочих серверов. +// ПараметрыАдминистрированияИнформационнойБазы - Структура, описывающая параметры подключения к информационной базе, +// описание - см. АдминистрированиеКластераКлиентСервер.ПараметрыАдминистрированияИнформационнойБазыКластера(). // -// Возвращаемое значение: Массив(Структура). +// Возвращаемое значение: Строка, внутренний идентификатор кластера серверов. // -Функция ПолучитьРабочиеСерверы(Знач ИдентификаторКластера, Знач ПараметрыАдминистрированияКластера, Знач Фильтр = Неопределено) +Функция ПолучитьИнформационнуюБазу(Знач ИдентификаторКластера, Знач ПараметрыАдминистрированияКластера, Знач ПараметрыАдминистрированияИнформационнойБазы) Экспорт - Шаблон = "%rac server --cluster=%cluster% --cluster-user=%?cluster-user% --cluster-pwd=%?cluster-pwd% list"; + Фильтр = Новый Структура("name", ПараметрыАдминистрированияИнформационнойБазы.ИмяВКластере); - Параметры = Новый Соответствие(); + ИнформационныеБазы = ПолучитьИнформационныеБазы(ИдентификаторКластера, ПараметрыАдминистрированияКластера, Фильтр); - Параметры.Вставить("cluster", ИдентификаторКластера); - ЗаполнитьПараметрыАутентификацииВКластере(ПараметрыАдминистрированияКластера, Параметры); - - ПотокВывода = ВыполнитьКоманду(Шаблон, ПараметрыАдминистрированияКластера, Параметры); - Результат = ПарсерВывода(ПотокВывода, Неопределено, Фильтр); - Возврат Результат; + Если ИнформационныеБазы.Количество() = 1 Тогда + Возврат ИнформационныеБазы[0].Получить("infobase"); + Иначе + ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'В кластере серверов %1 не зарегистрирована информационная база %2!'"), ИдентификаторКластера, ПараметрыАдминистрированияИнформационнойБазы.ИмяВКластере); + КонецЕсли; КонецФункции @@ -795,7 +754,7 @@ // // Возвращаемое значение: Массив(Структура). // -Функция ПолучитьИнформационныеБазы(Знач ИдентификаторКластера, Знач ПараметрыАдминистрированияКластера, Знач Фильтр = Неопределено) +Функция ПолучитьИнформационныеБазы(Знач ИдентификаторКластера, Знач ПараметрыАдминистрированияКластера, Знач Фильтр = Неопределено) Экспорт Шаблон = "%rac infobase summary --cluster=%cluster% --cluster-user=%?cluster-user% --cluster-pwd=%?cluster-pwd% list"; @@ -810,31 +769,53 @@ КонецФункции -// Возвращает внутренний идентификатор информационной базы. +#КонецОбласти + +#Область Кластер + +// Возвращает внутренний идентификатор кластера серверов. // // Параметры: -// ИдентификаторКластера - Строка, внутренний идентификатор кластера серверов, // ПараметрыАдминистрированияКластера - Структура, описывающая параметры подключения к кластеру серверов, -// описание - см. АдминистрированиеКластераКлиентСервер.ПараметрыАдминистрированияКластера(), -// ПараметрыАдминистрированияИнформационнойБазы - Структура, описывающая параметры подключения к информационной базе, -// описание - см. АдминистрированиеКластераКлиентСервер.ПараметрыАдминистрированияИнформационнойБазыКластера(). +// описание - см. АдминистрированиеКластераКлиентСервер.ПараметрыАдминистрированияКластера(). // -// Возвращаемое значение: Строка, внутренний идентификатор кластера серверов. +// Возвращаемое значение - Строка, внутренний идентификатор кластера серверов. // -Функция ПолучитьИнформационнуюБазу(Знач ИдентификаторКластера, Знач ПараметрыАдминистрированияКластера, Знач ПараметрыАдминистрированияИнформационнойБазы) +Функция ПолучитьКластер(Знач ПараметрыАдминистрированияКластера) Экспорт - Фильтр = Новый Структура("name", ПараметрыАдминистрированияИнформационнойБазы.ИмяВКластере); + Фильтр = Новый Структура("port", ПараметрыАдминистрированияКластера.ПортКластера); - ИнформационныеБазы = ПолучитьИнформационныеБазы(ИдентификаторКластера, ПараметрыАдминистрированияКластера, Фильтр); + Кластеры = ПолучитьКластеры(ПараметрыАдминистрированияКластера, Фильтр); - Если ИнформационныеБазы.Количество() = 1 Тогда - Возврат ИнформационныеБазы[0].Получить("infobase"); + Если Кластеры.Количество() = 1 Тогда + Возврат Кластеры[0].Получить("cluster"); Иначе - ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'В кластере серверов %1 не зарегистрирована информационная база %2!'"), ИдентификаторКластера, ПараметрыАдминистрированияИнформационнойБазы.ИмяВКластере); + ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Не обнаружен кластер серверов с портом %1'"), ПараметрыАдминистрированияКластера.ПортКластера); КонецЕсли; КонецФункции +// Возвращает описания кластеров серверов. +// +// ПараметрыАдминистрированияКластера - Структура, описывающая параметры подключения к кластеру серверов, +// описание - см. АдминистрированиеКластераКлиентСервер.ПараметрыАдминистрированияКластера(), +// Фильтр - Структура, параметры фильтрации кластеров серверов. +// +// Возвращаемое значение: Массив(Структура). +// +Функция ПолучитьКластеры(Знач ПараметрыАдминистрированияКластера, Знач Фильтр = Неопределено) Экспорт + + Шаблон = "%rac cluster list"; + ПотокВывода = ВыполнитьКоманду(Шаблон, ПараметрыАдминистрированияКластера); + Результат = ПарсерВывода(ПотокВывода, Неопределено, Фильтр); + Возврат Результат; + +КонецФункции + +#КонецОбласти + +#Область РабочиеПроцессыСерверы + // Возвращает описания рабочих процессов. // // Параметры: @@ -845,7 +826,7 @@ // // Возвращаемое значение: Массив(Структура). // -Функция ПолучитьРабочиеПроцессы(Знач ИдентификаторКластера, Знач ПараметрыАдминистрированияКластера, Знач Фильтр = Неопределено) +Функция ПолучитьРабочиеПроцессы(Знач ИдентификаторКластера, Знач ПараметрыАдминистрированияКластера, Знач Фильтр = Неопределено) Экспорт Шаблон = "%rac process --cluster=%cluster% --cluster-user=%?cluster-user% --cluster-pwd=%?cluster-pwd% list --server=%server%"; @@ -869,6 +850,37 @@ КонецФункции +// Возвращает описания рабочих серверов. +// +// Параметры: +// ИдентификаторКластера - Строка, внутренний идентификатор кластера серверов, +// ПараметрыАдминистрированияКластера - Структура, описывающая параметры подключения к кластеру серверов, +// описание - см. АдминистрированиеКластераКлиентСервер.ПараметрыАдминистрированияКластера(), +// Фильтр - Структура, параметры фильтрации рабочих серверов. +// +// Возвращаемое значение: Массив(Структура). +// +Функция ПолучитьРабочиеСерверы(Знач ИдентификаторКластера, Знач ПараметрыАдминистрированияКластера, Знач Фильтр = Неопределено) Экспорт + + Шаблон = "%rac server --cluster=%cluster% --cluster-user=%?cluster-user% --cluster-pwd=%?cluster-pwd% list"; + + Параметры = Новый Соответствие(); + + Параметры.Вставить("cluster", ИдентификаторКластера); + ЗаполнитьПараметрыАутентификацииВКластере(ПараметрыАдминистрированияКластера, Параметры); + + ПотокВывода = ВыполнитьКоманду(Шаблон, ПараметрыАдминистрированияКластера, Параметры); + Результат = ПарсерВывода(ПотокВывода, Неопределено, Фильтр); + Возврат Результат; + +КонецФункции + +#КонецОбласти + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + // Возвращает описания сеансов информационной базы. // // Параметры: @@ -1554,7 +1566,7 @@ КонецЕсли; Если ТипЗнч(Значение) = Тип("Строка") Тогда - Если Найти(Значение, """") > 0 Или Найти(Значение, " ") > 0 Или Найти(Значение, "-") > 0 Или Найти(Значение, "!") > 0 Тогда + Если СтрНайти(Значение, """") > 0 Или СтрНайти(Значение, " ") > 0 Или СтрНайти(Значение, "-") > 0 Или СтрНайти(Значение, "!") > 0 Тогда Возврат """" + СтрЗаменить(Значение, """", """""") + """"; КонецЕсли; КонецЕсли; @@ -1740,7 +1752,7 @@ Результат = КаталогПрограммы(); СимволРазделителя = ПолучитьРазделительПути(); - Если Не Прав(Результат, 1) = СимволРазделителя Тогда + Если Не СтрЗаканчиваетсяНа(Результат, СимволРазделителя) Тогда Результат = Результат + СимволРазделителя; КонецЕсли; @@ -1808,14 +1820,14 @@ Для Шаг = 1 По РазмерВывода Цикл ЭлементПотока = СтрПолучитьСтроку(ПотокВывода, Шаг); ЭлементПотока = СокрЛП(ЭлементПотока); - ПоложениеРазделителя = Найти(ЭлементПотока, ":"); + ПоложениеРазделителя = СтрНайти(ЭлементПотока, ":"); Если ПоложениеРазделителя > 0 Тогда ИмяСвойства = СокрЛП(Лев(ЭлементПотока, ПоложениеРазделителя - 1)); ЗначениеСвойства = ПривестиЭлементВывода(СокрЛП(Прав(ЭлементПотока, СтрДлина(ЭлементПотока) - ПоложениеРазделителя))); Если СвойстваЭкранируемыеКавычками().Найти(ИмяСвойства) <> Неопределено Тогда - Если Лев(ЗначениеСвойства, 1) = """" И Прав(ЗначениеСвойства, 1) = """" Тогда + Если СтрНачинаетсяС(ЗначениеСвойства, """") И СтрЗаканчиваетсяНа(ЗначениеСвойства, """") Тогда ЗначениеСвойства = Лев(ЗначениеСвойства, СтрДлина(ЗначениеСвойства) - 1); ЗначениеСвойства = Прав(ЗначениеСвойства, СтрДлина(ЗначениеСвойства) - 1) КонецЕсли; diff --git a/SSL/src/CommonModules/АдминистрированиеКластераКлиентСервер/Module.bsl b/SSL/src/CommonModules/АдминистрированиеКластераКлиентСервер/Module.bsl index 0d83577cd..19a97b017 100644 --- a/SSL/src/CommonModules/АдминистрированиеКластераКлиентСервер/Module.bsl +++ b/SSL/src/CommonModules/АдминистрированиеКластераКлиентСервер/Module.bsl @@ -1337,8 +1337,7 @@ Иначе - ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Неизвестный тип подключения: %1!'"), ПараметрыАдминистрирования.ТипПодключения); + ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Неизвестный тип подключения: %1!'"), ПараметрыАдминистрирования.ТипПодключения); КонецЕсли; diff --git a/SSL/src/CommonModules/АдресныйКлассификатор/Module.bsl b/SSL/src/CommonModules/АдресныйКлассификатор/Module.bsl index 80b7444e7..aa7b3914f 100644 --- a/SSL/src/CommonModules/АдресныйКлассификатор/Module.bsl +++ b/SSL/src/CommonModules/АдресныйКлассификатор/Module.bsl @@ -271,13 +271,5 @@ КонецФункции -// Устарела. Следует использовать КоличествоЗагруженныхРегионов или КлассификаторЗагружен. -// -Функция ЧислоЗаполненныхАдресныхОбъектов() Экспорт - - Возврат КоличествоЗагруженныхРегионов(); - -КонецФункции - #КонецОбласти diff --git a/SSL/src/CommonModules/АдресныйКлассификаторКлиент/Module.bsl b/SSL/src/CommonModules/АдресныйКлассификаторКлиент/Module.bsl index 25710c248..b22d08f73 100644 --- a/SSL/src/CommonModules/АдресныйКлассификаторКлиент/Module.bsl +++ b/SSL/src/CommonModules/АдресныйКлассификаторКлиент/Module.bsl @@ -29,14 +29,11 @@ // Нужен запрос профиля безопасности. ОписаниеОповещения = Новый ОписаниеОповещения( "ПолучениеРазрешенияБезопасностиПроверкиНаличияОбновленияАдресныхОбъектов", - ЭтотОбъект, ПараметрыВыполнения - ); + ЭтотОбъект, ПараметрыВыполнения); РаботаВБезопасномРежимеКлиент.ПрименитьЗапросыНаИспользованиеВнешнихРесурсов( АдресныйКлассификаторВызовСервера.ЗапросРазрешенийБезопасностиОбновления(), - Владелец, - ОписаниеОповещения, - ); + Владелец, ОписаниеОповещения,); КонецПроцедуры @@ -89,12 +86,8 @@ ПараметрыФормы.Вставить("Режим", "ПроверкаОбновления"); ОткрытьФорму("РегистрСведений.АдресныеОбъекты.Форма.ЗагрузкаАдресногоКлассификатора", ПараметрыФормы, - ПараметрыВыполнения.Источник, - ПараметрыВыполнения.Уникальность, - ПараметрыВыполнения.Окно, - ПараметрыВыполнения.НавигационнаяСсылка - ); - + ПараметрыВыполнения.Источник, ПараметрыВыполнения.Уникальность, + ПараметрыВыполнения.Окно, ПараметрыВыполнения.НавигационнаяСсылка); КонецПроцедуры #КонецОбласти @@ -266,8 +259,7 @@ СообщениеОбОшибке = СообщениеОбОшибке + НСтр("ru = 'Актуальные адресные сведения можно загрузить по адресу http://its.1c.ru/download/fias'"); ОбщегоНазначенияКлиентСервер.ДобавитьОшибкуПользователю(ДополнительныеПараметры.Результат.Ошибки, ДополнительныеПараметры.ПолеОшибки, - СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(СообщениеОбОшибке, - КлючЗначение.Значение, ДополнительныеПараметры.ОтсутствующиеФайлы[КлючЗначение.Ключ]), Неопределено); + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(СообщениеОбОшибке, КлючЗначение.Значение, ДополнительныеПараметры.ОтсутствующиеФайлы[КлючЗначение.Ключ]), Неопределено); КонецЦикла; ВыполнитьОбработкуОповещения(ДополнительныеПараметры.ОписаниеЗавершения, ДополнительныеПараметры.Результат); diff --git a/SSL/src/CommonModules/АдресныйКлассификаторПовтИсп/Module.bsl b/SSL/src/CommonModules/АдресныйКлассификаторПовтИсп/Module.bsl index e330d0774..7c30a1f56 100644 --- a/SSL/src/CommonModules/АдресныйКлассификаторПовтИсп/Module.bsl +++ b/SSL/src/CommonModules/АдресныйКлассификаторПовтИсп/Module.bsl @@ -52,57 +52,4 @@ КонецФункции -// Возвращает данные о загруженных регионах -// -// Возвращаемое значение: -// Соответствие - Ключ - код субъекта РФ, Значение - Истина, если регион загружен -// -Функция СведенияОЗагруженныхРегионах() Экспорт - - Результат = Новый Соответствие; - - Запрос = Новый Запрос; - Запрос.Текст = - "ВЫБРАТЬ - | РодительскийОбъект.КодСубъектаРФ КАК КодСубъектаРФ, - | РодительскийОбъект.Наименование КАК Наименование, - | РодительскийОбъект.Сокращение КАК Сокращение, - | ВЫБОР - | КОГДА 1 В - | (ВЫБРАТЬ ПЕРВЫЕ 1 - | 1 - | ИЗ - | РегистрСведений.АдресныеОбъекты - | ГДЕ - | РегистрСведений.АдресныеОбъекты.Уровень В (2, 3, 4, 5, 6) - | И РегистрСведений.АдресныеОбъекты.КодСубъектаРФ = Регион.КодСубъектаРФ) - | ТОГДА ИСТИНА - | ИНАЧЕ ЛОЖЬ - | КОНЕЦ КАК РегионЗагружен - |ИЗ - | РегистрСведений.АдресныеОбъекты КАК РодительскийОбъект - | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.АдресныеОбъекты КАК Регион - | ПО (Регион.Уровень = 1) - | И (Регион.КодСубъектаРФ = РодительскийОбъект.КодСубъектаРФ) - | И (Регион.КодОкруга = 0) - | И (Регион.КодРайона = 0) - | И (Регион.КодГорода = 0) - | И (Регион.КодВнутригородскогоРайона = 0) - | И (Регион.КодНаселенногоПункта = 0) - | И (Регион.КодУлицы = 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 e4e531b40..20e25abb5 100644 --- a/SSL/src/CommonModules/АдресныйКлассификаторСлужебный/Module.bsl +++ b/SSL/src/CommonModules/АдресныйКлассификаторСлужебный/Module.bsl @@ -2,9 +2,7 @@ // Подсистема "Адресный классификатор". //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// -#Область СлужебныеПроцедурыИФункции - -#Область СлужебныйПрограммныйИнтерфейсКонтактнаяИнформация +#Область СлужебныйПрограммныйИнтерфейс // Проверка доступности поставщика - локальной базы или сервиса. // @@ -56,9 +54,7 @@ // Процедура ЗаполнитьВерсиюПоставщикаДанныхВнутр(Результат) Экспорт - Результат.Данные = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'БСП %1'"), СтандартныеПодсистемыСервер.ВерсияБиблиотеки() - ); + Результат.Данные = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'БСП %1'"), СтандартныеПодсистемыСервер.ВерсияБиблиотеки()); КонецПроцедуры @@ -124,9 +120,9 @@ Данные = Новый ТаблицаЗначений; Колонки = Данные.Колонки; - Колонки.Добавить("Неактуален", Новый ОписаниеТипов("Булево")); - Колонки.Добавить("Идентификатор", Новый ОписаниеТипов("УникальныйИдентификатор")); - Колонки.Добавить("Представление", Новый ОписаниеТипов("Строка")); + Колонки.Добавить("Неактуален", Новый ОписаниеТипов("Булево")); + Колонки.Добавить("Идентификатор", Новый ОписаниеТипов("УникальныйИдентификатор")); + Колонки.Добавить("Представление", Новый ОписаниеТипов("Строка")); Данные.Индексы.Добавить("Идентификатор"); Данные.Индексы.Добавить("Представление"); @@ -168,9 +164,7 @@ // Процедура ЗаполнитьАдресаПоПочтовомуИндексуКлассификатораВнутр(Результат, Индекс, Уровни, ДополнительныеПараметры) Экспорт - ТекстЗапроса = -#Область ТекстЗапроса - "ВЫБРАТЬ + ТекстЗапроса = "ВЫБРАТЬ | АдресныеОбъекты.Уровень КАК Уровень, | АдресныеОбъекты.КодСубъектаРФ КАК КодСубъектаРФ, | АдресныеОбъекты.КодОкруга КАК КодОкруга, @@ -398,7 +392,6 @@ | КОЛИЧЕСТВО(ПодчиненныйНаименование) |ПО | ОБЩИЕ"; -#КонецОбласти Запрос = Новый Запрос(ТекстЗапроса); Запрос.УстановитьПараметр("ПочтовыйИндекс", Индекс); @@ -564,10 +557,10 @@ Данные = Новый ТаблицаЗначений; Колонки = Данные.Колонки; - Колонки.Добавить("Неактуален", ТипБулево); - Колонки.Добавить("Идентификатор", Новый ОписаниеТипов("УникальныйИдентификатор")); - Колонки.Добавить("Представление", Новый ОписаниеТипов("Строка")); - Колонки.Добавить("РегионЗагружен", ТипБулево); + Колонки.Добавить("Неактуален", ТипБулево); + Колонки.Добавить("Идентификатор", Новый ОписаниеТипов("УникальныйИдентификатор")); + Колонки.Добавить("Представление", Новый ОписаниеТипов("Строка")); + Колонки.Добавить("РегионЗагружен", ТипБулево); Данные.Индексы.Добавить("Идентификатор"); Данные.Индексы.Добавить("Представление"); @@ -665,9 +658,7 @@ // Особые случаи Если Уровень = 1 Тогда // Запрос регионов, игнорируем родителя. - ТекстЗапроса = -#Область ТекстЗапроса - "ВЫБРАТЬ " + ТекстРазмерПорции + " + ТекстЗапроса = "ВЫБРАТЬ " + ТекстРазмерПорции + " | Регион.Идентификатор КАК Идентификатор, | Регион.Наименование + "" "" + Регион.Сокращение КАК Представление, | @@ -720,12 +711,9 @@ |УПОРЯДОЧИТЬ ПО | Представление " + ТекстСортировкиПорции + " |"; -#КонецОбласти ИначеЕсли Уровень = -1 Тогда // Запрос ориентиров, родитель - адресный объект. - ТекстЗапроса = -#Область ТекстЗапроса - "ВЫБРАТЬ " + ТекстРазмерПорции + " + ТекстЗапроса = "ВЫБРАТЬ " + ТекстРазмерПорции + " | Идентификатор КАК Идентификатор, | Описание КАК Представление |ИЗ @@ -749,12 +737,9 @@ |УПОРЯДОЧИТЬ ПО | Представление " + ТекстСортировкиПорции + " |"; -#КонецОбласти Иначе // Обычный уровень - ТекстЗапроса = -#Область ТекстЗапроса - "ВЫБРАТЬ " + ТекстРазмерПорции + " + ТекстЗапроса = "ВЫБРАТЬ " + ТекстРазмерПорции + " | АдресныйОбъект.Идентификатор КАК Идентификатор, | АдресныйОбъект.Наименование + "" "" + АдресныйОбъект.Сокращение КАК Представление, | ИСТИНА КАК РегионЗагружен, @@ -881,7 +866,6 @@ |УПОРЯДОЧИТЬ ПО | Представление " + ТекстСортировкиПорции + " |"; -#КонецОбласти КонецЕсли; Запрос = Новый Запрос(ТекстЗапроса); @@ -963,11 +947,7 @@ Источник = ИсточникДанныхАдресногоКлассификатора(); Если ПустаяСтрока(Источник) Тогда // Локальное, всегда корректное. - Если УровниЗапроса.Найти(7) = Неопределено Тогда - СписокАвтоподбораЧастиНаселенногоПункта(Результат, Текст, Родитель, УровниЗапроса, ДополнительныеПараметры); - Иначе - СписокАвтоподбораЧастиУлицы(Результат, Текст, Родитель, УровниЗапроса, ДополнительныеПараметры); - КонецЕсли; + ЗаполнитьСписокАвтоподбораЧастиАдресаВнутр(Результат, Текст, Родитель, УровниЗапроса, ДополнительныеПараметры); ИначеЕсли Источник = "Сервис1С" Тогда // Веб сервис 1С, может быть на обслуживании. @@ -983,311 +963,68 @@ Возврат Результат; КонецФункции -// Заполнение данных для автоподбора из загруженных данных для населенного пункта +// Возвращает список для автоподбора элемента адреса, поиск по подобию. // -Процедура СписокАвтоподбораЧастиНаселенногоПункта(Результат, Текст, Родитель, УровниЗапроса, ДополнительныеПараметры) Экспорт +// Параметры: +// Текст - Строка - Текст, введенный в поле. +// Родитель - УникальныйИдентификатор - Родительский объект. +// Уровни - Массив, ФиксированныйМассив - Набор требуемых уровней данных. 1-7, 90, 91 - адресные +// объекты, -1 - ориентиры. +// ДополнительныеПараметры - Структура - Описание настройке поиска. Поля: +// * ФорматАдреса - Строка - Тип используемого классификатора. +// +// Возвращаемое значение: +// Структура - найденные варианты. Содержит поля: +// * Отказ - Булево - Поставщик не доступен. +// * ПодробноеПредставлениеОшибки - Строка - Описание ошибки, если поставщик недоступен. Неопределено, если Отказ +// = Ложь. +// * КраткоеПредставлениеОшибки - Строка - Описание ошибки, если поставщик недоступен. Неопределено, если Отказ +// = Ложь. +// * Данные - ТаблицаЗначений - Содержит данные для выбора. Колонки: +// ** Неактуален - Булево - Флаг неактуальности строки данных. +// ** Идентификатор - УникальныйИдентификатор - Код классификатора для поиска вариантов по индексу. +// ** Представление - Строка - Представление варианта. +// ** РегионЗагружен - Булево - Имеет смысл только для регионов. Истина, если есть записи. +// +Функция ВариантыАвтоподбораНомеровДомов(ИдентификаторАдресногоОбъекта, Текст) Экспорт - ТекстПоиска = ЗамаскироватьСпецсимволыПодобия(Текст); + ВариантыДомов = Новый СписокЗначений; - Запрос = Новый Запрос; - Запрос.УстановитьПараметр("НачалоФразы", ТекстПоиска + "%"); - Запрос.УстановитьПараметр("Уровни", УровниЗапроса); - - Если ЗначениеЗаполнено(Родитель) И УровниЗапроса.Количество() = 1 Тогда - Уровень = УровниЗапроса[0]; - ТекстОтбора = ?(Уровень > 2, " И РодительскийОбъект.КодОкруга = АдресныйОбъект.КодОкруга", ""); - ТекстОтбора = ТекстОтбора + ?(Уровень > 3, " И РодительскийОбъект.КодРайона = АдресныйОбъект.КодРайона ", ""); - ТекстОтбора = ТекстОтбора + ?(Уровень > 4, " И РодительскийОбъект.КодГорода = АдресныйОбъект.КодГорода ", ""); - ТекстОтбора = ТекстОтбора + ?(Уровень > 5, " И РодительскийОбъект.КодВнутригородскогоРайона = АдресныйОбъект.КодВнутригородскогоРайона ", ""); - ТекстОтбора = ТекстОтбора + ?(Уровень > 6, " И РодительскийОбъект.КодНаселенногоПункта = АдресныйОбъект.КодНаселенногоПункта ", ""); + Источник = ИсточникДанныхАдресногоКлассификатора(); + Если ПустаяСтрока(Источник) Тогда + // Локальное, всегда корректное. + Запрос = Новый Запрос; + Запрос.Текст = + "ВЫБРАТЬ + | ДомаЗданияСтроения.Строения КАК Строения + |ИЗ + | РегистрСведений.ДомаЗданияСтроения КАК ДомаЗданияСтроения + |ГДЕ + | ДомаЗданияСтроения.АдресныйОбъект = &АдресныйОбъект"; - Запрос.УстановитьПараметр("Идентификатор", Родитель); - ТекстЗапросаПодходящиеОбъекты = "ВЫБРАТЬ ПЕРВЫЕ 200 - | АдресныйОбъект.Уровень, - | АдресныйОбъект.КодСубъектаРФ, - | АдресныйОбъект.КодОкруга, - | АдресныйОбъект.КодРайона, - | АдресныйОбъект.КодГорода, - | АдресныйОбъект.КодВнутригородскогоРайона, - | АдресныйОбъект.КодНаселенногоПункта, - | АдресныйОбъект.Идентификатор, - | АдресныйОбъект.Наименование, - | АдресныйОбъект.Сокращение - |ПОМЕСТИТЬ - | ПодходящиеОбъекты - |ИЗ - | РегистрСведений.АдресныеОбъекты КАК РодительскийОбъект - | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.АдресныеОбъекты КАК АдресныйОбъект - | ПО РодительскийОбъект.КодСубъектаРФ = АдресныйОбъект.КодСубъектаРФ " + ТекстОтбора + " - |ГДЕ - | АдресныйОбъект.Наименование ПОДОБНО &НачалоФразы - | И РодительскийОбъект.Идентификатор = &Идентификатор - | И АдресныйОбъект.Уровень = " + Строка(Уровень) + " - |УПОРЯДОЧИТЬ ПО - | АдресныйОбъект.Уровень - |ИНДЕКСИРОВАТЬ ПО - | АдресныйОбъект.Уровень, - | АдресныйОбъект.КодСубъектаРФ, - | АдресныйОбъект.КодОкруга, - | АдресныйОбъект.КодРайона, - | АдресныйОбъект.КодГорода, - | АдресныйОбъект.КодВнутригородскогоРайона, - | АдресныйОбъект.КодНаселенногоПункта, - | АдресныйОбъект.Идентификатор - |"; - Иначе - ТекстЗапросаПодходящиеОбъекты = "ВЫБРАТЬ ПЕРВЫЕ 200 - | АдресныйОбъект.Уровень, - | АдресныйОбъект.КодСубъектаРФ, - | АдресныйОбъект.КодОкруга, - | АдресныйОбъект.КодРайона, - | АдресныйОбъект.КодГорода, - | АдресныйОбъект.КодВнутригородскогоРайона, - | АдресныйОбъект.КодНаселенногоПункта, - | АдресныйОбъект.Идентификатор, - | АдресныйОбъект.Наименование, - | АдресныйОбъект.Сокращение - |ПОМЕСТИТЬ - | ПодходящиеОбъекты - |ИЗ - | РегистрСведений.АдресныеОбъекты КАК АдресныйОбъект - |ГДЕ - | АдресныйОбъект.Наименование ПОДОБНО &НачалоФразы - | И АдресныйОбъект.Уровень В (&Уровни) - |УПОРЯДОЧИТЬ ПО - | АдресныйОбъект.Уровень - |ИНДЕКСИРОВАТЬ ПО - | АдресныйОбъект.Уровень, - | АдресныйОбъект.КодСубъектаРФ, - | АдресныйОбъект.КодОкруга, - | АдресныйОбъект.КодРайона, - | АдресныйОбъект.КодГорода, - | АдресныйОбъект.КодВнутригородскогоРайона, - | АдресныйОбъект.КодНаселенногоПункта, - | АдресныйОбъект.Идентификатор - |"; + Запрос.УстановитьПараметр("АдресныйОбъект", ИдентификаторАдресногоОбъекта); + Запись = Запрос.Выполнить().Выбрать(); + + Пока Запись.Следующий() Цикл + Если ЗначениеЗаполнено(Запись.Строения) Тогда + Описание = Запись.Строения.Получить(); + Если Не ПустаяСтрока(Описание) Тогда + Описание = Сред(Описание, 25); + Если Не ПустаяСтрока(Описание) Тогда + ИзвлечьСписокДомов(Описание, Текст, ВариантыДомов); + КонецЕсли; + КонецЕсли; + КонецЕсли; + КонецЦикла; + ИначеЕсли Источник = "Сервис1С" Тогда + // Подбор номеров домов в Веб сервис 1С не поддерживается + Возврат ВариантыДомов; КонецЕсли; - ТекстЗапроса = ТекстЗапросаПодходящиеОбъекты + " - |;///////////////////////////////////////////////////////////////////////////////// - | - |ВЫБРАТЬ ПЕРВЫЕ 20 - | АдресныйОбъект.КодСубъектаРФ КАК КодСубъектаРФ, - | СубъектРФ.Наименование КАК СубъектРФНаименование, - | СубъектРФ.Сокращение КАК СубъектРФСокращение, - | - | Округ.Наименование КАК ОкругНаименование, - | Округ.Сокращение КАК ОкругСокращение, - | - | Район.Наименование КАК РайонНаименование, - | Район.Сокращение КАК РайонСокращение, - | - | Город.Наименование КАК ГородНаименование, - | Город.Сокращение КАК ГородСокращение, - | - | ВнутригородскойРайон.Наименование КАК ВнутригородскойРайонНаименование, - | ВнутригородскойРайон.Сокращение КАК ВнутригородскойРайонСокращение, - | - | НаселенныйПункт.Наименование КАК НаселенныйПунктНаименование, - | НаселенныйПункт.Сокращение КАК НаселенныйПунктСокращение, - | - | АдресныйОбъект.Идентификатор КАК Идентификатор, - | - | АдресныйОбъект.Наименование КАК Наименование, - | АдресныйОбъект.Сокращение КАК Сокращение - | - |ИЗ - | ПодходящиеОбъекты КАК АдресныйОбъект - | - |ЛЕВОЕ СОЕДИНЕНИЕ - | РегистрСведений.АдресныеОбъекты КАК СубъектРФ - |ПО - | СубъектРФ.Уровень = 1 - | И СубъектРФ.КодСубъектаРФ = АдресныйОбъект.КодСубъектаРФ - | И СубъектРФ.КодОкруга = 0 - | И СубъектРФ.КодРайона = 0 - | И СубъектРФ.КодГорода = 0 - | И СубъектРФ.КодВнутригородскогоРайона = 0 - | И СубъектРФ.КодНаселенногоПункта = 0 - | И СубъектРФ.КодУлицы = 0 - | И СубъектРФ.КодДополнительногоЭлемента = 0 - | И СубъектРФ.КодПодчиненногоЭлемента = 0 - | И СубъектРФ.Идентификатор <> АдресныйОбъект.Идентификатор - | - |ЛЕВОЕ СОЕДИНЕНИЕ - | РегистрСведений.АдресныеОбъекты КАК Округ - |ПО - | Округ.Уровень = 2 - | И Округ.КодСубъектаРФ = АдресныйОбъект.КодСубъектаРФ - | И Округ.КодОкруга = АдресныйОбъект.КодОкруга - | И Округ.КодРайона = 0 - | И Округ.КодГорода = 0 - | И Округ.КодВнутригородскогоРайона = 0 - | И Округ.КодНаселенногоПункта = 0 - | И Округ.КодУлицы = 0 - | И Округ.КодДополнительногоЭлемента = 0 - | И Округ.КодПодчиненногоЭлемента = 0 - | И Округ.Идентификатор <> АдресныйОбъект.Идентификатор - | - |ЛЕВОЕ СОЕДИНЕНИЕ - | РегистрСведений.АдресныеОбъекты КАК Район - |ПО - | Район.Уровень = 3 - | И Район.КодСубъектаРФ = АдресныйОбъект.КодСубъектаРФ - | И Район.КодОкруга = АдресныйОбъект.КодОкруга - | И Район.КодРайона = АдресныйОбъект.КодРайона - | И Район.КодГорода = 0 - | И Район.КодВнутригородскогоРайона = 0 - | И Район.КодНаселенногоПункта = 0 - | И Район.КодУлицы = 0 - | И Район.КодДополнительногоЭлемента = 0 - | И Район.КодПодчиненногоЭлемента = 0 - | И Район.Идентификатор <> АдресныйОбъект.Идентификатор - | - |ЛЕВОЕ СОЕДИНЕНИЕ - | РегистрСведений.АдресныеОбъекты КАК Город - |ПО - | Город.Уровень = 4 - | И Город.КодСубъектаРФ = АдресныйОбъект.КодСубъектаРФ - | И Город.КодОкруга = АдресныйОбъект.КодОкруга - | И Город.КодРайона = АдресныйОбъект.КодРайона - | И Город.КодГорода = АдресныйОбъект.КодГорода - | И Город.КодВнутригородскогоРайона = 0 - | И Город.КодНаселенногоПункта = 0 - | И Город.КодУлицы = 0 - | И Город.КодДополнительногоЭлемента = 0 - | И Город.КодПодчиненногоЭлемента = 0 - | И Город.Идентификатор <> АдресныйОбъект.Идентификатор - | - |ЛЕВОЕ СОЕДИНЕНИЕ - | РегистрСведений.АдресныеОбъекты КАК ВнутригородскойРайон - |ПО - | ВнутригородскойРайон.Уровень = 5 - | И ВнутригородскойРайон.КодСубъектаРФ = АдресныйОбъект.КодСубъектаРФ - | И ВнутригородскойРайон.КодОкруга = АдресныйОбъект.КодОкруга - | И ВнутригородскойРайон.КодРайона = АдресныйОбъект.КодРайона - | И ВнутригородскойРайон.КодГорода = АдресныйОбъект.КодГорода - | И ВнутригородскойРайон.КодВнутригородскогоРайона = АдресныйОбъект.КодВнутригородскогоРайона - | И ВнутригородскойРайон.КодНаселенногоПункта = 0 - | И ВнутригородскойРайон.КодУлицы = 0 - | И ВнутригородскойРайон.КодДополнительногоЭлемента = 0 - | И ВнутригородскойРайон.КодПодчиненногоЭлемента = 0 - | И ВнутригородскойРайон.Идентификатор <> АдресныйОбъект.Идентификатор - | - |ЛЕВОЕ СОЕДИНЕНИЕ - | РегистрСведений.АдресныеОбъекты КАК НаселенныйПункт - |ПО - | НаселенныйПункт.Уровень = 6 - | И НаселенныйПункт.КодСубъектаРФ = АдресныйОбъект.КодСубъектаРФ - | И НаселенныйПункт.КодОкруга = АдресныйОбъект.КодОкруга - | И НаселенныйПункт.КодРайона = АдресныйОбъект.КодРайона - | И НаселенныйПункт.КодГорода = АдресныйОбъект.КодГорода - | И НаселенныйПункт.КодВнутригородскогоРайона = АдресныйОбъект.КодВнутригородскогоРайона - | И НаселенныйПункт.КодНаселенногоПункта = АдресныйОбъект.КодНаселенногоПункта - | И НаселенныйПункт.КодУлицы = 0 - | И НаселенныйПункт.КодДополнительногоЭлемента = 0 - | И НаселенныйПункт.КодПодчиненногоЭлемента = 0 - | И НаселенныйПункт.Идентификатор <> АдресныйОбъект.Идентификатор - | - |УПОРЯДОЧИТЬ ПО - | НаселенныйПунктНаименование, - | ВнутригородскойРайонНаименование, - | ГородНаименование, - | РайонНаименование, - | ОкругНаименование, - | СубъектРФНаименование - |"; - - Запрос.Текст = ТекстЗапроса; + ВариантыДомов.СортироватьПоЗначению(); + Возврат ВариантыДомов; - Данные = Результат.Данные; - СведенияОЗагруженныхРегионах = АдресныйКлассификаторПовтИсп.СведенияОЗагруженныхРегионах(); - Для Каждого Строка Из Запрос.Выполнить().Выгрузить() Цикл - СтрокаРезультата = Данные.Добавить(); - ЗаполнитьЗначенияСвойств(СтрокаРезультата, Строка, "Идентификатор"); - Представление = ""; - - ДобавитьВПредставлениеЭлементАдреса(Представление, Строка.Наименование, Строка.Сокращение); - Если УровниЗапроса.Найти(6) <> Неопределено Тогда - ДобавитьВПредставлениеЭлементАдреса(Представление, Строка.НаселенныйПунктНаименование, Строка.НаселенныйПунктСокращение); - КонецЕсли; - Если УровниЗапроса.Найти(5) <> Неопределено Тогда - ДобавитьВПредставлениеЭлементАдреса(Представление, Строка.ВнутригородскойРайонНаименование, Строка.ВнутригородскойРайонСокращение); - КонецЕсли; - Если УровниЗапроса.Найти(4) <> Неопределено Тогда - ДобавитьВПредставлениеЭлементАдреса(Представление, Строка.ГородНаименование, Строка.ГородСокращение); - КонецЕсли; - Если УровниЗапроса.Найти(3) <> Неопределено Тогда - ДобавитьВПредставлениеЭлементАдреса(Представление, Строка.РайонНаименование, Строка.РайонСокращение); - КонецЕсли; - Если УровниЗапроса.Найти(2) <> Неопределено Тогда - ДобавитьВПредставлениеЭлементАдреса(Представление, Строка.ОкругНаименование, Строка.ОкругСокращение); - КонецЕсли; - Если УровниЗапроса.Найти(1) <> Неопределено Тогда - ДобавитьВПредставлениеЭлементАдреса(Представление, Строка.СубъектРФНаименование, Строка.СубъектРФСокращение); - КонецЕсли; - СтрокаРезультата.Представление = Представление; - СтрокаРезультата.РегионЗагружен = СведенияОЗагруженныхРегионах[Строка.КодСубъектаРФ]; - - КонецЦикла; - -КонецПроцедуры - -// Заполнение данных для автоподбора из загруженных данных для улиц -// -Процедура СписокАвтоподбораЧастиУлицы(Результат, Текст, Родитель, УровниЗапроса, ДополнительныеПараметры) Экспорт - - ТекстПоиска = ЗамаскироватьСпецсимволыПодобия(Текст); - Запрос = Новый Запрос; - - Запрос.Текст = - "ВЫБРАТЬ ПЕРВЫЕ 5000 - | АдресныеОбъекты.Наименование КАК Наименование, - | АдресныеОбъекты.Уровень КАК Уровень, - | АдресныеОбъекты.Идентификатор КАК Идентификатор, - | АдресныеОбъекты.Сокращение - |ПОМЕСТИТЬ НайденныеАдресныеОбъекты - |ИЗ - | РегистрСведений.АдресныеОбъекты КАК РодительскийОбъект - | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.АдресныеОбъекты КАК АдресныеОбъекты - | ПО РодительскийОбъект.КодСубъектаРФ = АдресныеОбъекты.КодСубъектаРФ - | И РодительскийОбъект.КодОкруга = АдресныеОбъекты.КодОкруга - | И РодительскийОбъект.КодРайона = АдресныеОбъекты.КодРайона - | И РодительскийОбъект.КодГорода = АдресныеОбъекты.КодГорода - | И РодительскийОбъект.КодВнутригородскогоРайона = АдресныеОбъекты.КодВнутригородскогоРайона - | И РодительскийОбъект.КодНаселенногоПункта = АдресныеОбъекты.КодНаселенногоПункта - |ГДЕ - | РодительскийОбъект.Идентификатор = &Идентификатор - | И АдресныеОбъекты.Уровень = 7 - | - |ИНДЕКСИРОВАТЬ ПО - | Наименование - |; - | - |//////////////////////////////////////////////////////////////////////////////// - |ВЫБРАТЬ ПЕРВЫЕ 20 - | НайденныеАдресныеОбъекты.Наименование + "" "" + НайденныеАдресныеОбъекты.Сокращение КАК Представление, - | НайденныеАдресныеОбъекты.Идентификатор, - | ИСТИНА КАК РегионЗагружен - |ИЗ - | НайденныеАдресныеОбъекты КАК НайденныеАдресныеОбъекты - |ГДЕ - | (НайденныеАдресныеОбъекты.Наименование ПОДОБНО &НачалоФразы - | ИЛИ НайденныеАдресныеОбъекты.Наименование ПОДОБНО &НачалоСлова)"; - - Запрос.УстановитьПараметр("Идентификатор", Новый УникальныйИдентификатор(Родитель)); - Запрос.УстановитьПараметр("НачалоФразы", ТекстПоиска + "%"); - Запрос.УстановитьПараметр("НачалоСлова", "% " + ТекстПоиска + "%"); - - РезультатЗапроса = Запрос.Выполнить().Выгрузить(); - - Данные = Результат.Данные; - Для Каждого Строка Из РезультатЗапроса Цикл - СтрокаРезультата = Данные.Добавить(); - ЗаполнитьЗначенияСвойств(СтрокаРезультата, Строка); - КонецЦикла; - -КонецПроцедуры +КонецФункции // Конструктор таблицы - результата автоподбора. @@ -1298,10 +1035,10 @@ Данные = Новый ТаблицаЗначений; Колонки = Данные.Колонки; - Колонки.Добавить("Неактуален", ТипБулево); - Колонки.Добавить("Идентификатор", Новый ОписаниеТипов("УникальныйИдентификатор")); - Колонки.Добавить("Представление", Новый ОписаниеТипов("Строка")); - Колонки.Добавить("РегионЗагружен", ТипБулево); + Колонки.Добавить("Неактуален", ТипБулево); + Колонки.Добавить("Идентификатор", Новый ОписаниеТипов("УникальныйИдентификатор")); + Колонки.Добавить("Представление", Новый ОписаниеТипов("Строка")); + Колонки.Добавить("РегионЗагружен", ТипБулево); Возврат Данные КонецФункции @@ -1343,11 +1080,9 @@ Запрос.УстановитьПараметр("Уровни", УровниЗапроса); Если ЗначениеЗаполнено(Родитель) Тогда - Запрос.УстановитьПараметр("Родитель", Новый УникальныйИдентификатор(Родитель) ); - ТекстЗапросаПодходящиеОбъекты = -#Область ТекстЗапроса - "// Родитель указан явно - |ВЫБРАТЬ ПЕРВЫЕ " + ОтбиратьЗаписейДляАнализа + " + Запрос.УстановитьПараметр("Родитель", Новый УникальныйИдентификатор(Родитель)); + // Родитель указан явно + ТекстЗапросаПодходящиеОбъекты = "ВЫБРАТЬ ПЕРВЫЕ " + ОтбиратьЗаписейДляАнализа + " | АдресныйОбъект.Уровень, | АдресныйОбъект.КодСубъектаРФ, | АдресныйОбъект.КодОкруга, @@ -1360,7 +1095,8 @@ | АдресныйОбъект.КодПодчиненногоЭлемента, | АдресныйОбъект.Идентификатор, | - | АдресныйОбъект.Наименование, + | АдресныйОбъект.Наименование, + | АдресныйОбъект.Актуален КАК Актуален, | АдресныйОбъект.Сокращение, | | ВЫБОР КОГДА 1 В ( @@ -1570,14 +1306,10 @@ | АдресныйОбъект.КодПодчиненногоЭлемента, | АдресныйОбъект.Идентификатор |"; -#КонецОбласти - Иначе Запрос.УстановитьПараметр("Родитель", Неопределено); - ТекстЗапросаПодходящиеОбъекты = -#Область ТекстЗапроса - "// Родитель НЕ указан - |ВЫБРАТЬ ПЕРВЫЕ " + ОтбиратьЗаписейДляАнализа + " + // Родитель НЕ указан + ТекстЗапросаПодходящиеОбъекты = "ВЫБРАТЬ ПЕРВЫЕ " + ОтбиратьЗаписейДляАнализа + " | АдресныйОбъект.Уровень, | АдресныйОбъект.КодСубъектаРФ, | АдресныйОбъект.КодОкруга, @@ -1590,7 +1322,8 @@ | АдресныйОбъект.КодПодчиненногоЭлемента, | АдресныйОбъект.Идентификатор, | АдресныйОбъект.Наименование, - | АдресныйОбъект.Сокращение, + | АдресныйОбъект.Сокращение, + | АдресныйОбъект.Актуален КАК Актуален, | | ВЫБОР КОГДА 1 В ( | ВЫБРАТЬ ПЕРВЫЕ 1 1 ИЗ РегистрСведений.АдресныеОбъекты @@ -1646,13 +1379,9 @@ | АдресныйОбъект.КодПодчиненногоЭлемента, | АдресныйОбъект.Идентификатор |"; -#КонецОбласти - КонецЕсли; - ТекстЗапроса = -#Область ТекстЗапроса - ТекстЗапросаПодходящиеОбъекты + " + ТекстЗапроса = ТекстЗапросаПодходящиеОбъекты + " |;///////////////////////////////////////////////////////////////////////////////// | |ВЫБРАТЬ ПЕРВЫЕ " + ОтбиратьЗаписейДляСписка + " @@ -1688,7 +1417,8 @@ | АдресныйОбъект.Наименование КАК Наименование, | АдресныйОбъект.Сокращение КАК Сокращение, | - | РегионЗагружен КАК РегионЗагружен + | РегионЗагружен КАК РегионЗагружен, + | НЕ АдресныйОбъект.Актуален КАК Неактуален | |ИЗ | ПодходящиеОбъекты КАК АдресныйОбъект @@ -1848,15 +1578,14 @@ | ОкругНаименование, | СубъектРФНаименование |"; -#КонецОбласти - + Запрос.Текст = ТекстЗапроса; Данные = Результат.Данные; Для Каждого Строка Из Запрос.Выполнить().Выгрузить() Цикл СтрокаРезультата = Данные.Добавить(); - ЗаполнитьЗначенияСвойств(СтрокаРезультата, Строка, "Идентификатор, РегионЗагружен"); + ЗаполнитьЗначенияСвойств(СтрокаРезультата, Строка, "Идентификатор, РегионЗагружен, Неактуален"); Представление = ""; ДобавитьВПредставлениеЭлементАдреса(Представление, Строка.Наименование, Строка.Сокращение); @@ -1950,9 +1679,7 @@ // Процедура ЗаполнитьДополнительныеАдресныеСведенияВнутр(Результат, Идентификатор) Экспорт - ТекстЗапроса = -#Область ТекстЗапроса - "ВЫБРАТЬ ПЕРВЫЕ 1 + ТекстЗапроса = "ВЫБРАТЬ ПЕРВЫЕ 1 | OKATO, | ОКТМО, | КодИФНСФЛ, @@ -1982,10 +1709,8 @@ | РегистрСведений.ОриентирыАдресныхОбъектов | ГДЕ | Идентификатор = &Идентификатор - | ) - |"; -#КонецОбласти - + | )"; + Запрос = Новый Запрос(ТекстЗапроса); Запрос.УстановитьПараметр("Идентификатор", Идентификатор); @@ -2008,7 +1733,7 @@ // = Ложь. // * КраткоеПредставлениеОшибки - Строка - Описание ошибки, если поставщик недоступен. Неопределено, если Отказ // = Ложь. -// * Данные - ОбъектXDTO - Адрес, см (http://www.v8.1c.ru/ssl/contactinfo) АдресРФ. +// * Данные - ОбъектXDTO - Адрес, см (http://www.v8.1c.ru/ssl/AddressSystem) АдресРФ. // Функция АктуальныеАдресныеСведения(Идентификатор) Экспорт @@ -2052,9 +1777,7 @@ // Процедура ЗаполнитьАктуальныеАдресныеСведенияВнутр(Результат, Идентификатор) Экспорт - ТекстЗапроса = -#Область ТекстЗапроса - "ВЫБРАТЬ + ТекстЗапроса = "ВЫБРАТЬ | СубъектРФ.Наименование + "" "" + СубъектРФ.Сокращение КАК СубъектРФПредставление, | Округ.Наименование + "" "" + Округ.Сокращение КАК ОкругПредставление, | Район.Наименование + "" "" + Район.Сокращение КАК РайонПредставление, @@ -2282,12 +2005,10 @@ |ПО | СлужебныеАдресныеСведенияПодчиненный.Тип = ""ТипАдрЭл"" | И СлужебныеАдресныеСведенияПодчиненный.Идентификатор = 91 - | И СлужебныеАдресныеСведенияПодчиненный.Ключ = """" - |"; -#КонецОбласти + | И СлужебныеАдресныеСведенияПодчиненный.Ключ = """""; // Пустой адрес - Адрес = ФабрикаXDTO.Создать( ФабрикаXDTO.Тип( ПространствоИменАдресаРФ(), "АдресРФ") ); + Адрес = ФабрикаXDTO.Создать( ФабрикаXDTO.Тип(ПространствоИменАдресаРФ(), "АдресРФ") ); Результат.Данные = Адрес; Запрос = Новый Запрос(ТекстЗапроса); @@ -2481,117 +2202,24 @@ Процедура УстановитьИдентификаторыНаселенногоПункта(ЧастиАдреса, ИдентификаторНаселенногоПункта) Экспорт - Запрос = Новый Запрос; - Запрос.Текст = - "ВЫБРАТЬ ПЕРВЫЕ 1 - | Регион.Идентификатор КАК ИдентификаторРегион, - | Округ.Идентификатор КАК ИдентификаторОкруг, - | Район.Идентификатор КАК ИдентификаторРайон, - | Город.Идентификатор КАК ИдентификаторГород, - | ВнутригРайон.Идентификатор КАК ИдентификаторВнутригРайон, - | НаселенныйПункт.Идентификатор КАК ИдентификаторНаселенныйПункт - |ИЗ - | РегистрСведений.АдресныеОбъекты КАК АдресныйОбъект - | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.АдресныеОбъекты КАК Регион - | ПО (Регион.Уровень = 1) - | И (Регион.КодСубъектаРФ = АдресныйОбъект.КодСубъектаРФ) - | И (Регион.КодОкруга = 0) - | И (Регион.КодРайона = 0) - | И (Регион.КодГорода = 0) - | И (Регион.КодВнутригородскогоРайона = 0) - | И (Регион.КодНаселенногоПункта = 0) - | И (Регион.КодУлицы = 0) - | И (Регион.КодДополнительногоЭлемента = 0) - | И (Регион.КодПодчиненногоЭлемента = 0) - | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.АдресныеОбъекты КАК Округ - | ПО (Округ.Уровень = 2) - | И (Округ.КодСубъектаРФ = АдресныйОбъект.КодСубъектаРФ) - | И (Округ.КодОкруга = АдресныйОбъект.КодОкруга) - | И (Округ.КодРайона = 0) - | И (Округ.КодГорода = 0) - | И (Округ.КодВнутригородскогоРайона = 0) - | И (Округ.КодНаселенногоПункта = 0) - | И (Округ.КодУлицы = 0) - | И (Округ.КодДополнительногоЭлемента = 0) - | И (Округ.КодПодчиненногоЭлемента = 0) - | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.АдресныеОбъекты КАК Район - | ПО (Район.Уровень = 3) - | И (Район.КодСубъектаРФ = АдресныйОбъект.КодСубъектаРФ) - | И (Район.КодОкруга = АдресныйОбъект.КодОкруга) - | И (Район.КодРайона = АдресныйОбъект.КодРайона) - | И (Район.КодГорода = 0) - | И (Район.КодВнутригородскогоРайона = 0) - | И (Район.КодНаселенногоПункта = 0) - | И (Район.КодУлицы = 0) - | И (Район.КодДополнительногоЭлемента = 0) - | И (Район.КодПодчиненногоЭлемента = 0) - | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.АдресныеОбъекты КАК Город - | ПО (Город.Уровень = 4) - | И (Город.КодСубъектаРФ = АдресныйОбъект.КодСубъектаРФ) - | И (Город.КодОкруга = АдресныйОбъект.КодОкруга) - | И (Город.КодРайона = АдресныйОбъект.КодРайона) - | И (Город.КодГорода = АдресныйОбъект.КодГорода) - | И (Город.КодВнутригородскогоРайона = 0) - | И (Город.КодНаселенногоПункта = 0) - | И (Город.КодУлицы = 0) - | И (Город.КодДополнительногоЭлемента = 0) - | И (Город.КодПодчиненногоЭлемента = 0) - | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.АдресныеОбъекты КАК ВнутригРайон - | ПО (ВнутригРайон.Уровень = 5) - | И (ВнутригРайон.КодСубъектаРФ = АдресныйОбъект.КодСубъектаРФ) - | И (ВнутригРайон.КодОкруга = АдресныйОбъект.КодОкруга) - | И (ВнутригРайон.КодРайона = АдресныйОбъект.КодРайона) - | И (ВнутригРайон.КодГорода = АдресныйОбъект.КодГорода) - | И (ВнутригРайон.КодВнутригородскогоРайона = АдресныйОбъект.КодВнутригородскогоРайона) - | И (ВнутригРайон.КодНаселенногоПункта = 0) - | И (ВнутригРайон.КодУлицы = 0) - | И (ВнутригРайон.КодДополнительногоЭлемента = 0) - | И (ВнутригРайон.КодПодчиненногоЭлемента = 0) - | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.АдресныеОбъекты КАК НаселенныйПункт - | ПО (НаселенныйПункт.Уровень = 6) - | И (НаселенныйПункт.КодСубъектаРФ = АдресныйОбъект.КодСубъектаРФ) - | И (НаселенныйПункт.КодОкруга = АдресныйОбъект.КодОкруга) - | И (НаселенныйПункт.КодРайона = АдресныйОбъект.КодРайона) - | И (НаселенныйПункт.КодГорода = АдресныйОбъект.КодГорода) - | И (НаселенныйПункт.КодВнутригородскогоРайона = АдресныйОбъект.КодВнутригородскогоРайона) - | И (НаселенныйПункт.КодНаселенногоПункта = АдресныйОбъект.КодНаселенногоПункта) - | И (НаселенныйПункт.КодУлицы = 0) - | И (НаселенныйПункт.КодДополнительногоЭлемента = 0) - | И (НаселенныйПункт.КодПодчиненногоЭлемента = 0)"; - - Где = ""; - Разделитель = " ГДЕ "; + ПоляАдреса = Новый Соответствие(); + ПоляАдреса.Вставить("Регион", ЧастиАдреса.Регион); + ПоляАдреса.Вставить("Округ", ЧастиАдреса.Округ); + ПоляАдреса.Вставить("Район", ЧастиАдреса.Район); + ПоляАдреса.Вставить("Город", ЧастиАдреса.Город); + ПоляАдреса.Вставить("ВнутригородскойРайон", ЧастиАдреса.ВнутригРайон); + ПоляАдреса.Вставить("НаселенныйПункт", ЧастиАдреса.НаселенныйПункт); + ПоляАдреса.Вставить("Улица", ЧастиАдреса.Улица); + + ИдентификаторыАдреса = ИдентификаторыАдреса(ПоляАдреса, Ложь, Истина); + + Если ИдентификаторыАдреса <> Неопределено Тогда Для каждого Часть Из ЧастиАдреса Цикл - Значение = Часть.Значение; - Если ЗначениеЗаполнено(Значение.Представление) И Часть.Значение.Уровень < 7 Тогда - Где = Где + Разделитель + Часть.Ключ +".Наименование = """ + Значение.Наименование + """ И " + Часть.Ключ + ".Сокращение = """ + Значение.Сокращение + """"; - Разделитель = " И "; + Если ИдентификаторыАдреса.Свойство("Идентификатор" + Часть.Ключ) Тогда + Часть.Значение.Идентификатор = ИдентификаторыАдреса["Идентификатор" + Часть.Ключ]; КонецЕсли; КонецЦикла; - - Запрос.Текст = Запрос.Текст + Где; - - Если ЗначениеЗаполнено(ИдентификаторНаселенногоПункта) Тогда - Запрос.Текст = Запрос.Текст + Разделитель + " АдресныйОбъект.Идентификатор = &Идентификатор"; - Запрос.УстановитьПараметр("Идентификатор", ИдентификаторНаселенногоПункта); - КонецЕсли; - - РезультатЗапроса = Запрос.Выполнить().Выбрать(); - - НижнийУровеньСИдентификатором = 0; - Если РезультатЗапроса.Следующий() Тогда - Для каждого Часть Из ЧастиАдреса Цикл - Если ЗначениеЗаполнено(Часть.Значение.Представление) И Часть.Значение.Уровень < 7 Тогда - Часть.Значение.Идентификатор = РезультатЗапроса["Идентификатор" + Часть.Ключ]; - Если ЗначениеЗаполнено(Часть.Значение.Идентификатор) И НижнийУровеньСИдентификатором < Часть.Значение.Уровень Тогда - ИдентификаторНаселенногоПункта = Часть.Значение.Идентификатор; - НижнийУровеньСИдентификатором = Часть.Значение.Уровень; - КонецЕсли; - КонецЕсли; - КонецЦикла; - КонецЕсли; - - + КонецЕсли; КонецПроцедуры @@ -2600,7 +2228,7 @@ // Параметры: // Адреса - Массив - Проверяемые адреса. Содержит структуры с полями: // * Адрес - ОбъектXDTO, Строка - Проверяемый адрес -// ((http://www.v8.1c.ru/ssl/contactinfo) АдресРФ) или его +// ((http://www.v8.1c.ru/ssl/AddressSystem) АдресРФ) или его // XML-сериализация. // * ФорматАдреса - Строка - Тип используемого классификатора для проверки. // @@ -2647,15 +2275,8 @@ АдресXDTO = ПроверяемыйАдрес.Адрес; Если ТипЗнч(АдресXDTO) = ТипСтрока Тогда - Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.КонтактнаяИнформация") Тогда - ПолныйАдресXDTO = ДесериализацияАдресаXDTO(АдресXDTO); - АдресXDTO = ПолныйАдресXDTO.Состав.Состав; - Иначе - Результат.Отказ = Истина; - Результат.КраткоеПредставлениеОшибки = НСтр("ru = 'Адрес не может быть проверен, так как не распознан.'"); - Результат.ПодробноеПредставлениеОшибки = Результат.КраткоеПредставлениеОшибки; - Возврат Результат; - КонецЕсли; + ПолныйАдресXDTO = ДесериализацияАдресаXDTO(АдресXDTO); + АдресXDTO = ПолныйАдресXDTO.Состав.Состав; КонецЕсли; АдресаДляПроверки.Добавить(Новый Структура("Адрес, Уровни", АдресXDTO, Уровни)); @@ -2762,10 +2383,8 @@ РегионЗагруженВАдресныеСведения = СведенияОРегионе(Адрес.СубъектРФ).Загружен; Если РегионЗагруженВАдресныеСведения = Неопределено Тогда - ДобавитьОшибкуПроверкиАдресаПоКлассификатору(ОшибкиПроверки, "СубъектРФ", СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Регион ""%1"" не существует'"), - Адрес.СубъектРФ - )); + ДобавитьОшибкуПроверкиАдресаПоКлассификатору(ОшибкиПроверки, "СубъектРФ", + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Регион ""%1"" не существует'"), Адрес.СубъектРФ)); Результат.АдресПроверен = Истина; Возврат Результат; ИначеЕсли НЕ РегионЗагруженВАдресныеСведения Тогда @@ -2775,9 +2394,7 @@ КонецЕсли; // Расшифровка свойств адреса - Запрос = Новый Запрос( -#Область ТекстЗапроса - "ВЫБРАТЬ + Запрос = Новый Запрос("ВЫБРАТЬ | Значение |ИЗ | РегистрСведений.СлужебныеАдресныеСведения @@ -2822,10 +2439,7 @@ | И ТипыСтроения.Значение = Расшифровка.Ключ | |ГДЕ - | Расшифровка.Тип = ""ДопАдрЭлНомер"" - |" -#КонецОбласти - ); + | Расшифровка.Тип = ""ДопАдрЭлНомер"""); НаборРезультатов = Запрос.ВыполнитьПакет(); Таблица = НаборРезультатов[0].Выгрузить(); @@ -2886,18 +2500,16 @@ ИндексЭлемент = ПолучитьXDTOРеквизитОбъекта(Адрес, "ДопАдрЭл[ТипАдрЭл='10100000']"); Индекс = ?(ИндексЭлемент <> Неопределено, ИндексЭлемент.Значение, ""); - ПроверятьОкруг = Не ПустаяСтрока(Округ.Наименование) И Уровни.Найти(2) <> Неопределено; - ПроверятьРайон = Не ПустаяСтрока(Район.Наименование) И Уровни.Найти(3) <> Неопределено; - ПроверятьГород = Не ПустаяСтрока(Город.Наименование) И Уровни.Найти(4) <> Неопределено; - ПроверятьВнутригородскойРайон = Не ПустаяСтрока(ВнутригородскойРайон.Наименование) И Уровни.Найти(5) <> Неопределено; - ПроверятьНаселенныйПункт = Не ПустаяСтрока(НаселенныйПункт.Наименование) И Уровни.Найти(6) <> Неопределено; - ПроверятьУлицу = Не ПустаяСтрока(Улица.Наименование) И Уровни.Найти(7) <> Неопределено; + ПроверятьОкруг = Не ПустаяСтрока(Округ.Наименование); + ПроверятьРайон = Не ПустаяСтрока(Район.Наименование); + ПроверятьГород = Не ПустаяСтрока(Город.Наименование); + ПроверятьВнутригородскойРайон = Не ПустаяСтрока(ВнутригородскойРайон.Наименование); + ПроверятьНаселенныйПункт = Не ПустаяСтрока(НаселенныйПункт.Наименование); + ПроверятьУлицу = Не ПустаяСтрока(Улица.Наименование); ПроверятьДополнительный = Не ПустаяСтрока(Дополнительный.Наименование); ПроверятьПодчиненный = Не ПустаяСтрока(Подчиненный.Наименование); - Запрос.Текст = -#Область ТекстЗапроса - "ВЫБРАТЬ + Запрос.Текст = "ВЫБРАТЬ | ИСТИНА КАК СубъектРФНайден, | СубъектРФ.Идентификатор КАК СубъектРФИдентификатор, | СубъектРФ.ПочтовыйИндекс КАК СубъектРФПочтовыйИндекс, @@ -3135,9 +2747,8 @@ | И СубъектРФ.КодНаселенногоПункта = 0 | И СубъектРФ.КодУлицы = 0 | И СубъектРФ.КодДополнительногоЭлемента = 0 - | И СубъектРФ.КодПодчиненногоЭлемента = 0 - |"; -#КонецОбласти + | И СубъектРФ.КодПодчиненногоЭлемента = 0"; + Запрос.УстановитьПараметр("СубъектРФНаименование", СубъектРФ.Наименование); Запрос.УстановитьПараметр("СубъектРФСокращение", СубъектРФ.Сокращение); @@ -3169,8 +2780,8 @@ РезультатЗапроса = Запрос.Выполнить(); Если РезультатЗапроса.Пустой() Тогда // Нет региона - ДобавитьОшибкуПроверкиАдресаПоКлассификатору(ОшибкиПроверки, "СубъектРФ", СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Субъект РФ (регион) ""%1"" не найден в адресном классификаторе'"), СубъектРФ.Наименование + " " + СубъектРФ.Сокращение)); + ДобавитьОшибкуПроверкиАдресаПоКлассификатору(ОшибкиПроверки, "СубъектРФ", + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Субъект РФ (регион) ""%1"" не найден в адресном классификаторе'"), СубъектРФ.Наименование + " " + СубъектРФ.Сокращение)); Возврат Результат; КонецЕсли; @@ -3180,6 +2791,7 @@ КорректныеЗаписи = Новый Массив; ИндексНайден = Ложь; + УлицаНайдена = Ложь; ВариантАдреса = Новый Структура; Для Каждого Запись Из ЗаписиДомов Цикл; ЗаполнитьПочтовыйИндексИКодКЛАДРПоИерархииФИАС(ВариантАдреса, Запись); @@ -3190,71 +2802,48 @@ ИндексНайден = Истина; КонецЕсли; КонецЕсли; - + Если ПроверятьОкруг И Не Запись.ОкругНайден Тогда - ДобавитьОшибкуПроверкиАдресаПоКлассификатору(ОшибкиПроверки, "Округ", СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Округ ""%1"" отсутствует в адресном классификаторе'"), - Округ.Наименование + " " + Округ.Сокращение - )); + ДобавитьОшибкуПроверкиАдресаПоКлассификатору(ОшибкиПроверки, "Округ", + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Округ ""%1"" отсутствует в адресном классификаторе'"), Округ.Наименование + " " + Округ.Сокращение)); КонецЕсли; Если ПроверятьРайон И Не Запись.РайонНайден Тогда - ДобавитьОшибкуПроверкиАдресаПоКлассификатору(ОшибкиПроверки, "СвРайМО/Район", СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Район ""%1"" отсутствует в адресном классификаторе'"), - Район.Наименование + " " + Район.Сокращение - )); + ДобавитьОшибкуПроверкиАдресаПоКлассификатору(ОшибкиПроверки, "СвРайМО/Район", + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Район ""%1"" отсутствует в адресном классификаторе'"), Район.Наименование + " " + Район.Сокращение)); КонецЕсли; Если ПроверятьГород И Не Запись.ГородНайден Тогда - ДобавитьОшибкуПроверкиАдресаПоКлассификатору(ОшибкиПроверки, "Город", СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Город ""%1"" отсутствует в адресном классификаторе'"), - Город.Наименование + " " + Город.Сокращение - )); + ДобавитьОшибкуПроверкиАдресаПоКлассификатору(ОшибкиПроверки, "Город", + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Город ""%1"" отсутствует в адресном классификаторе'"), Город.Наименование + " " + Город.Сокращение)); КонецЕсли; - + Если ПроверятьВнутригородскойРайон И Не Запись.ВнутригородскойРайонНайден Тогда - ДобавитьОшибкуПроверкиАдресаПоКлассификатору(ОшибкиПроверки, "ВнутригРайон", СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Внутригородской район ""%1"" отсутствует в адресном классификаторе'"), - ВнутригородскойРайон.Наименование + " " + ВнутригородскойРайон.Сокращение - )); + ДобавитьОшибкуПроверкиАдресаПоКлассификатору(ОшибкиПроверки, "ВнутригРайон", + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Внутригородской район ""%1"" отсутствует в адресном классификаторе'"), + ВнутригородскойРайон.Наименование + " " + ВнутригородскойРайон.Сокращение)); КонецЕсли; - + Если ПроверятьНаселенныйПункт И Не Запись.НаселенныйПунктНайден Тогда - ДобавитьОшибкуПроверкиАдресаПоКлассификатору(ОшибкиПроверки, "НаселПункт", СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Населенный пункт ""%1"" отсутствует в адресном классификаторе'"), - НаселенныйПункт.Наименование + " " + НаселенныйПункт.Сокращение - )); + ДобавитьОшибкуПроверкиАдресаПоКлассификатору(ОшибкиПроверки, "НаселПункт", + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Населенный пункт ""%1"" отсутствует в адресном классификаторе'"), + НаселенныйПункт.Наименование + " " + НаселенныйПункт.Сокращение)); КонецЕсли; - Если ПроверятьУлицу И Не Запись.УлицаНайден Тогда - ИсторияОбъекта = ИсторияАдресногоОбъекта(Улица.Наименование, Улица.Сокращение, Запись); - Если ИсторияОбъекта.Количество() > 0 Тогда - Для каждого СтрокаОбъект Из ИсторияОбъекта Цикл - ДобавитьОшибкуПроверкиАдресаПоКлассификатору(ОшибкиПроверки, "Улица", СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Улица ""%1"" была переименована в ""%2""'"), - СтрокаОбъект.Значение, СтрокаОбъект.Представление - )); - КонецЦикла; - Иначе - ДобавитьОшибкуПроверкиАдресаПоКлассификатору(ОшибкиПроверки, "Улица", СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Улица ""%1"" отсутствует в адресном классификаторе'"), - Улица.Наименование + " " + Улица.Сокращение - )); - КонецЕсли; + Если ПроверятьУлицу И Запись.УлицаНайден Тогда + УлицаНайдена = Истина; КонецЕсли; Если ПроверятьДополнительный И Не Запись.ДополнительныйНайден Тогда - ДобавитьОшибкуПроверкиАдресаПоКлассификатору(ОшибкиПроверки, "Дополнительный", СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Дополнительный элемент ""%1""отсутствует в адресном классификаторе'"), - Дополнительный.Наименование + " " + Дополнительный.Сокращение - )); + ДобавитьОшибкуПроверкиАдресаПоКлассификатору(ОшибкиПроверки, "Дополнительный", + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Дополнительный элемент ""%1""отсутствует в адресном классификаторе'"), + Дополнительный.Наименование + " " + Дополнительный.Сокращение)); КонецЕсли; Если ПроверятьПодчиненный И Не Запись.ПодчиненныйНайден Тогда - ДобавитьОшибкуПроверкиАдресаПоКлассификатору(ОшибкиПроверки, "Подчиненный", СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Подчиненный элемент ""%1"" отсутствует в адресном классификаторе'"), - Подчиненный.Наименование + " " + Подчиненный.Сокращение - )); + ДобавитьОшибкуПроверкиАдресаПоКлассификатору(ОшибкиПроверки, "Подчиненный", + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Подчиненный элемент ""%1"" отсутствует в адресном классификаторе'"), + Подчиненный.Наименование + " " + Подчиненный.Сокращение)); КонецЕсли; Если ОшибкиПроверки.Количество() = 0 Тогда @@ -3264,12 +2853,25 @@ КонецЦикла; - Если НЕ ИндексНайден Тогда - ДобавитьОшибкуПроверкиАдресаПоКлассификатору(ОшибкиПроверки, "Индекс", СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Индекс ""%1"" в адресном классификаторе не соответствует введенному адресу'"), Индекс)); - Возврат Результат; + Если ПроверятьУлицу И НЕ УлицаНайдена Тогда + ИсторияОбъекта = ИсторияАдресногоОбъекта(Улица.Наименование, Улица.Сокращение, Запись); + Если ИсторияОбъекта.Количество() > 0 Тогда + Для каждого СтрокаОбъект Из ИсторияОбъекта Цикл + ДобавитьОшибкуПроверкиАдресаПоКлассификатору(ОшибкиПроверки, "Улица", + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Улица ""%1"" была переименована в ""%2""'"), СтрокаОбъект.Значение, СтрокаОбъект.Представление)); + КонецЦикла; + Иначе + ДобавитьОшибкуПроверкиАдресаПоКлассификатору(ОшибкиПроверки, "Улица", + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Улица ""%1"" отсутствует в адресном классификаторе'"), Улица.Наименование + " " + Улица.Сокращение)); + КонецЕсли; КонецЕсли; + Если НЕ ИндексНайден Тогда + ДобавитьОшибкуПроверкиАдресаПоКлассификатору(ОшибкиПроверки, "Индекс", + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Индекс ""%1"" в адресном классификаторе не соответствует введенному адресу'"), Индекс)); + Возврат Результат; + КонецЕсли; + Если КорректныеЗаписи.Количество() = 0 Тогда // Нет смысла искать дома и выдавать варианты, надо посмотреть в историю. Возврат Результат; @@ -3294,7 +2896,7 @@ ЗаполнитьИдентификаторПоИерархииФИАС(ВариантАдреса, Запись); ЗаполнитьДополнительныеДанныеПоИерархииФИАС(ВариантАдреса, Запись, ИдентификаторДополнительно); ЗаполнитьПочтовыйИндексИКодКЛАДРПоИерархииФИАС(ВариантАдреса, Запись); - Если ЗначениеЗаполнено(Индекс) И ВариантАдреса.Свойство("Индекс") И Формат(ВариантАдреса.Индекс, "ЧРГ=' '; ЧГ=0") = Индекс Тогда + Если ЗначениеЗаполнено(Индекс) И ВариантАдреса.Свойство("Индекс") И Формат(ВариантАдреса.Индекс, "ЧРГ=; ЧГ=0") = Индекс Тогда ИндексКорректный = Истина; КонецЕсли; ВариантыАдреса.Добавить(ВариантАдреса); @@ -3303,26 +2905,22 @@ КонецЕсли; КонецЕсли; КонецЦикла; - КонецЕсли; ЕстьВарианты = ВариантыАдреса.Количество() > 0; - Если ЕстьЗаписиДомов И Не ЕстьВарианты Тогда - ОписаниеЗданияПоСоответствиюФИАС = ОписаниеЗданияПоСоответствиюФИАС(ЗданияИПомещения); Если ЗначениеЗаполнено(ОписаниеЗданияПоСоответствиюФИАС) Тогда - ДобавитьОшибкуПроверкиАдресаПоКлассификатору(ОшибкиПроверки, "Подчиненный", СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = '""%1"" отсутствует в адресном классификаторе'"), ОписаниеЗданияПоСоответствиюФИАС(ЗданияИПомещения) - )); + ДобавитьОшибкуПроверкиАдресаПоКлассификатору(ОшибкиПроверки, "Подчиненный", + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = '""%1"" отсутствует в адресном классификаторе'"), ОписаниеЗданияПоСоответствиюФИАС(ЗданияИПомещения))); КонецЕсли; ВариантАдреса = Новый Структура; ЗаполнитьПочтовыйИндексИКодКЛАДРПоИерархииФИАС(ВариантАдреса, Запись); - Если ЗначениеЗаполнено(Индекс) И ВариантАдреса.Свойство("Индекс") И Формат(ВариантАдреса.Индекс, "ЧРГ=' '; ЧГ=0") = Индекс Тогда + Если ЗначениеЗаполнено(Индекс) И ВариантАдреса.Свойство("Индекс") И Формат(ВариантАдреса.Индекс, "ЧРГ=; ЧГ=0") = Индекс Тогда ИндексКорректный = Истина; КонецЕсли; - + ИначеЕсли Не ЕстьЗаписиДомов И Не ЕстьВарианты Тогда // Добавляем варианты, ошибкой не считаем. Для Каждого Запись Из КорректныеЗаписи Цикл @@ -3332,7 +2930,7 @@ ЗаполнитьПочтовыйИндексИКодКЛАДРПоИерархииФИАС(ВариантАдреса, Запись); ВариантыАдреса.Добавить(ВариантАдреса); - Если ЗначениеЗаполнено(Индекс) И ВариантАдреса.Свойство("Индекс") И Формат(ВариантАдреса.Индекс, "ЧРГ=' '; ЧГ=0") = Индекс Тогда + Если ЗначениеЗаполнено(Индекс) И ВариантАдреса.Свойство("Индекс") И Формат(ВариантАдреса.Индекс, "ЧРГ=; ЧГ=0") = Индекс Тогда ИндексКорректный = Истина; КонецЕсли; КонецЦикла; @@ -3341,8 +2939,8 @@ // Проверить индекс Если НЕ ИндексКорректный И ЗначениеЗаполнено(Индекс) Тогда - ДобавитьОшибкуПроверкиАдресаПоКлассификатору(ОшибкиПроверки, "Индекс", СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Индекс ""%1"" в адресном классификаторе не соответствует введенному адресу'"), Индекс)); + ДобавитьОшибкуПроверкиАдресаПоКлассификатору(ОшибкиПроверки, "Индекс", + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Индекс ""%1"" в адресном классификаторе не соответствует введенному адресу'"), Индекс)); КонецЕсли; Возврат Результат; @@ -3426,292 +3024,313 @@ // Возвращает идентификатор адресного объекта по частям адреса. // // Параметры: -// Адрес - ФабрикаXDTO - Адрес объекта. +// Адрес - ФабрикаXDTO - Адрес объекта. // ИскатьПоУлице - Булево - Искать по улице. // Возвращаемое значение: // УникальныйИдентификатор - идентификатор адресного объекта. Функция ИдентификаторАдресногоОбъектаПоЧастямАдреса(Адрес, ИскатьПоУлице = Ложь) Экспорт - Если Адрес = Неопределено Тогда + Если Адрес = Неопределено ИЛИ ПустаяСтрока(Адрес.СубъектРФ) Тогда Возврат Неопределено; КонецЕсли; - КодСубъектаРФ = 0; - ИдентификаторСубъектаРФ = Неопределено; - КодОкруга = 0; - КодРайона = 0; - КодГорода = 0; - КодВнутригородскогоРайона = 0; - КодНаселенногоПункта = 0; - КодУлицы = 0; - ИдентификаторНаселенногоПункта = Неопределено; - - Если ЗначениеЗаполнено(Адрес.СубъектРФ) Тогда - СубъектРФ = АдресныйКлассификаторКлиентСервер.НаименованиеИСокращение(Адрес.СубъектРФ); - Запрос = Новый Запрос; - Запрос.Текст = - "ВЫБРАТЬ - | АдресныйОбъект.Идентификатор КАК ИдентификаторАдресныйОбъект, - | АдресныйОбъект.КодСубъектаРФ - |ИЗ - | РегистрСведений.АдресныеОбъекты КАК АдресныйОбъект - |ГДЕ - | АдресныйОбъект.Наименование = &Наименование - | И АдресныйОбъект.Уровень = 1 - | И АдресныйОбъект.КодОкруга = 0 - | И АдресныйОбъект.КодРайона = 0 - | И АдресныйОбъект.КодГорода = 0 - | И АдресныйОбъект.КодВнутригородскогоРайона = 0 - | И АдресныйОбъект.КодНаселенногоПункта = 0 - | И АдресныйОбъект.КодУлицы = 0 - | И АдресныйОбъект.КодДополнительногоЭлемента = 0 - | И АдресныйОбъект.КодПодчиненногоЭлемента = 0 - | И АдресныйОбъект.Сокращение = &Сокращение"; - - Запрос.УстановитьПараметр("Наименование", СубъектРФ.Наименование); - Запрос.УстановитьПараметр("Сокращение", СубъектРФ.Сокращение); - РезультатЗапроса = Запрос.Выполнить().Выбрать(); - - Если РезультатЗапроса.Следующий() Тогда - КодСубъектаРФ = РезультатЗапроса.КодСубъектаРФ; - ИдентификаторНаселенногоПункта = РезультатЗапроса.ИдентификаторАдресныйОбъект; - КонецЕсли; - КонецЕсли; - - Если ЗначениеЗаполнено(Адрес.Округ) Тогда - Округ = АдресныйКлассификаторКлиентСервер.НаименованиеИСокращение(Адрес.Округ); - - Запрос = Новый Запрос; - Запрос.Текст = - "ВЫБРАТЬ - | АдресныйОбъект.Идентификатор КАК ИдентификаторАдресныйОбъект, - | АдресныйОбъект.КодОкруга - |ИЗ - | РегистрСведений.АдресныеОбъекты КАК АдресныйОбъект - |ГДЕ - | АдресныйОбъект.Наименование = &Наименование - | И АдресныйОбъект.Уровень = 2 - | И АдресныйОбъект.КодСубъектаРФ = &КодСубъектаРФ - | И АдресныйОбъект.КодРайона = 0 - | И АдресныйОбъект.КодГорода = 0 - | И АдресныйОбъект.КодВнутригородскогоРайона = 0 - | И АдресныйОбъект.КодНаселенногоПункта = 0 - | И АдресныйОбъект.КодУлицы = 0 - | И АдресныйОбъект.КодДополнительногоЭлемента = 0 - | И АдресныйОбъект.КодПодчиненногоЭлемента = 0 - | И АдресныйОбъект.Сокращение = &Сокращение"; - - Запрос.УстановитьПараметр("КодСубъектаРФ", КодСубъектаРФ); - Запрос.УстановитьПараметр("Наименование", Округ.Наименование); - Запрос.УстановитьПараметр("Сокращение", Округ.Сокращение); - - РезультатЗапроса = Запрос.Выполнить().Выбрать(); - - Если РезультатЗапроса.Следующий() Тогда - КодОкруга = РезультатЗапроса.КодОкруга; - ИдентификаторНаселенногоПункта = РезультатЗапроса.ИдентификаторАдресныйОбъект; - КонецЕсли; - КонецЕсли; - - Если Адрес.СвРайМО <> Неопределено И ЗначениеЗаполнено(Адрес.СвРайМО.Район) Тогда - - Район = АдресныйКлассификаторКлиентСервер.НаименованиеИСокращение(Адрес.СвРайМО.Район); - - Запрос = Новый Запрос; - Запрос.Текст = - "ВЫБРАТЬ - | АдресныйОбъект.Идентификатор КАК ИдентификаторАдресныйОбъект, - | АдресныйОбъект.КодРайона - |ИЗ - | РегистрСведений.АдресныеОбъекты КАК АдресныйОбъект - |ГДЕ - | АдресныйОбъект.Наименование = &Наименование - | И АдресныйОбъект.Уровень = 3 - | И АдресныйОбъект.КодСубъектаРФ = &КодСубъектаРФ - | И АдресныйОбъект.КодОкруга = &КодОкруга - | И АдресныйОбъект.КодГорода = 0 - | И АдресныйОбъект.КодВнутригородскогоРайона = 0 - | И АдресныйОбъект.КодНаселенногоПункта = 0 - | И АдресныйОбъект.КодУлицы = 0 - | И АдресныйОбъект.КодДополнительногоЭлемента = 0 - | И АдресныйОбъект.КодПодчиненногоЭлемента = 0 - | И АдресныйОбъект.Сокращение = &Сокращение"; - - Запрос.УстановитьПараметр("КодСубъектаРФ", КодСубъектаРФ); - Запрос.УстановитьПараметр("КодОкруга", КодОкруга); - Запрос.УстановитьПараметр("Наименование", Район.Наименование); - Запрос.УстановитьПараметр("Сокращение", Район.Сокращение); - - РезультатЗапроса = Запрос.Выполнить().Выбрать(); - - Если РезультатЗапроса.Следующий() Тогда - КодРайона = РезультатЗапроса.КодРайона; - ИдентификаторНаселенногоПункта = РезультатЗапроса.ИдентификаторАдресныйОбъект; - КонецЕсли; - КонецЕсли; - - Если ЗначениеЗаполнено(Адрес.Город) Тогда - Город = АдресныйКлассификаторКлиентСервер.НаименованиеИСокращение(Адрес.Город); - - Запрос = Новый Запрос; - Запрос.Текст = - "ВЫБРАТЬ - | АдресныйОбъект.Идентификатор КАК ИдентификаторАдресныйОбъект, - | АдресныйОбъект.КодГорода - |ИЗ - | РегистрСведений.АдресныеОбъекты КАК АдресныйОбъект - |ГДЕ - | АдресныйОбъект.Наименование = &Наименование - | И АдресныйОбъект.Уровень = 4 - | И АдресныйОбъект.КодСубъектаРФ = &КодСубъектаРФ - | И АдресныйОбъект.КодОкруга = &КодОкруга - | И АдресныйОбъект.КодРайона = &КодРайона - | И АдресныйОбъект.КодВнутригородскогоРайона = 0 - | И АдресныйОбъект.КодНаселенногоПункта = 0 - | И АдресныйОбъект.КодУлицы = 0 - | И АдресныйОбъект.КодДополнительногоЭлемента = 0 - | И АдресныйОбъект.КодПодчиненногоЭлемента = 0 - | И АдресныйОбъект.Сокращение = &Сокращение"; - - Запрос.УстановитьПараметр("КодОкруга", КодОкруга); - Запрос.УстановитьПараметр("КодРайона", КодРайона); - Запрос.УстановитьПараметр("КодСубъектаРФ", КодСубъектаРФ); - Запрос.УстановитьПараметр("Наименование", Город.Наименование); - Запрос.УстановитьПараметр("Сокращение", Город.Сокращение); - - РезультатЗапроса = Запрос.Выполнить().Выбрать(); - - Если РезультатЗапроса.Следующий() Тогда - КодГорода = РезультатЗапроса.КодГорода; - ИдентификаторНаселенногоПункта = РезультатЗапроса.ИдентификаторАдресныйОбъект; - КонецЕсли; - КонецЕсли; - - Если ЗначениеЗаполнено(Адрес.ВнутригРайон) Тогда - ВнутригРайон = АдресныйКлассификаторКлиентСервер.НаименованиеИСокращение(Адрес.ВнутригРайон); - - Запрос = Новый Запрос; - Запрос.Текст = - "ВЫБРАТЬ - | АдресныйОбъект.Идентификатор КАК ИдентификаторАдресныйОбъект, - | АдресныйОбъект.КодВнутригородскогоРайона - |ИЗ - | РегистрСведений.АдресныеОбъекты КАК АдресныйОбъект - |ГДЕ - | АдресныйОбъект.Наименование = &Наименование - | И АдресныйОбъект.Уровень = 5 - | И АдресныйОбъект.КодСубъектаРФ = &КодСубъектаРФ - | И АдресныйОбъект.КодОкруга = &КодОкруга - | И АдресныйОбъект.КодРайона = &КодРайона - | И АдресныйОбъект.КодГорода = &КодГорода - | И АдресныйОбъект.КодНаселенногоПункта = 0 - | И АдресныйОбъект.КодУлицы = 0 - | И АдресныйОбъект.КодДополнительногоЭлемента = 0 - | И АдресныйОбъект.КодПодчиненногоЭлемента = 0 - | И АдресныйОбъект.Сокращение = &Сокращение"; - - Запрос.УстановитьПараметр("КодСубъектаРФ", КодСубъектаРФ); - Запрос.УстановитьПараметр("КодОкруга", КодОкруга); - Запрос.УстановитьПараметр("КодРайона", КодРайона); - Запрос.УстановитьПараметр("КодГорода", КодГорода); - Запрос.УстановитьПараметр("Наименование", ВнутригРайон.Наименование); - Запрос.УстановитьПараметр("Сокращение", ВнутригРайон.Сокращение); - - РезультатЗапроса = Запрос.Выполнить().Выбрать(); - - Если РезультатЗапроса.Следующий() Тогда - КодВнутригородскогоРайона = РезультатЗапроса.КодВнутригородскогоРайона; - ИдентификаторНаселенногоПункта = РезультатЗапроса.ИдентификаторАдресныйОбъект; - КонецЕсли; - КонецЕсли; - - Если ЗначениеЗаполнено(Адрес.НаселПункт) Тогда - НаселПункт = АдресныйКлассификаторКлиентСервер.НаименованиеИСокращение(Адрес.НаселПункт); - - Запрос = Новый Запрос; - Запрос.Текст = - "ВЫБРАТЬ - | АдресныйОбъект.Идентификатор КАК ИдентификаторАдресныйОбъект, - | АдресныйОбъект.КодНаселенногоПункта - |ИЗ - | РегистрСведений.АдресныеОбъекты КАК АдресныйОбъект - |ГДЕ - | АдресныйОбъект.Наименование = &Наименование - | И АдресныйОбъект.Уровень = 6 - | И АдресныйОбъект.КодСубъектаРФ = &КодСубъектаРФ - | И АдресныйОбъект.КодОкруга = &КодОкруга - | И АдресныйОбъект.КодРайона = &КодРайона - | И АдресныйОбъект.КодГорода = &КодГорода - | И АдресныйОбъект.КодВнутригородскогоРайона = &КодВнутригородскогоРайона - | И АдресныйОбъект.КодУлицы = 0 - | И АдресныйОбъект.КодДополнительногоЭлемента = 0 - | И АдресныйОбъект.КодПодчиненногоЭлемента = 0 - | И АдресныйОбъект.Сокращение = &Сокращение"; - - Запрос.УстановитьПараметр("КодСубъектаРФ", КодСубъектаРФ); - Запрос.УстановитьПараметр("КодОкруга", КодОкруга); - Запрос.УстановитьПараметр("КодРайона", КодРайона); - Запрос.УстановитьПараметр("КодГорода", КодГорода); - Запрос.УстановитьПараметр("КодВнутригородскогоРайона", КодВнутригородскогоРайона); - Запрос.УстановитьПараметр("Наименование", НаселПункт.Наименование); - Запрос.УстановитьПараметр("Сокращение", НаселПункт.Сокращение); - РезультатЗапроса = Запрос.Выполнить().Выбрать(); - - Если РезультатЗапроса.Следующий() Тогда - КодНаселенногоПункта = РезультатЗапроса.КодНаселенногоПункта; - ИдентификаторНаселенногоПункта = РезультатЗапроса.ИдентификаторАдресныйОбъект; - КонецЕсли; - КонецЕсли; - - // Улица - Если ЗначениеЗаполнено(Адрес.Улица) И ИскатьПоУлице Тогда - Улица = АдресныйКлассификаторКлиентСервер.НаименованиеИСокращение(Адрес.Улица); - - Запрос = Новый Запрос; - Запрос.Текст = - "ВЫБРАТЬ - | АдресныйОбъект.Идентификатор КАК ИдентификаторАдресныйОбъект, - | АдресныйОбъект.КодУлицы - |ИЗ - | РегистрСведений.АдресныеОбъекты КАК АдресныйОбъект - |ГДЕ - | АдресныйОбъект.Наименование = &Наименование - | И АдресныйОбъект.Уровень = 7 - | И АдресныйОбъект.КодСубъектаРФ = &КодСубъектаРФ - | И АдресныйОбъект.КодОкруга = &КодОкруга - | И АдресныйОбъект.КодРайона = &КодРайона - | И АдресныйОбъект.КодГорода = &КодГорода - | И АдресныйОбъект.КодВнутригородскогоРайона = &КодВнутригородскогоРайона - | И АдресныйОбъект.КодНаселенногоПункта = &КодНаселенногоПункта - | И АдресныйОбъект.КодДополнительногоЭлемента = 0 - | И АдресныйОбъект.КодПодчиненногоЭлемента = 0 - | И АдресныйОбъект.Сокращение = &Сокращение"; - - Запрос.УстановитьПараметр("КодСубъектаРФ", КодСубъектаРФ); - Запрос.УстановитьПараметр("КодОкруга", КодОкруга); - Запрос.УстановитьПараметр("КодРайона", КодРайона); - Запрос.УстановитьПараметр("КодГорода", КодГорода); - Запрос.УстановитьПараметр("КодВнутригородскогоРайона", КодВнутригородскогоРайона); - Запрос.УстановитьПараметр("КодНаселенногоПункта", КодНаселенногоПункта); - Запрос.УстановитьПараметр("Наименование", Улица.Наименование); - Запрос.УстановитьПараметр("Сокращение", Улица.Сокращение); - РезультатЗапроса = Запрос.Выполнить().Выбрать(); - - Если РезультатЗапроса.Следующий() Тогда - КодУлицы = РезультатЗапроса.КодУлицы; - ИдентификаторНаселенногоПункта = РезультатЗапроса.ИдентификаторАдресныйОбъект; - КонецЕсли; - КонецЕсли; - - Возврат ИдентификаторНаселенногоПункта; + ПоляАдреса = Новый Соответствие(); //"Регион + ПоляАдреса.Вставить("Регион", АдресныйКлассификаторКлиентСервер.НаименованиеИСокращение(Адрес.СубъектРФ)); + ПоляАдреса.Вставить("Округ", АдресныйКлассификаторКлиентСервер.НаименованиеИСокращение(Адрес.Округ)); + Район = ?(ПустаяСтрока(Адрес.СвРайМО), "", Адрес.СвРайМО.Район); + ПоляАдреса.Вставить("Район", АдресныйКлассификаторКлиентСервер.НаименованиеИСокращение(Район)); + ПоляАдреса.Вставить("Город", АдресныйКлассификаторКлиентСервер.НаименованиеИСокращение(Адрес.Город)); + ПоляАдреса.Вставить("ВнутригородскойРайон", АдресныйКлассификаторКлиентСервер.НаименованиеИСокращение(Адрес.ВнутригРайон)); + ПоляАдреса.Вставить("НаселенныйПункт", АдресныйКлассификаторКлиентСервер.НаименованиеИСокращение(Адрес.НаселПункт)); + ПоляАдреса.Вставить("Улица", АдресныйКлассификаторКлиентСервер.НаименованиеИСокращение(Адрес.Улица)); + Возврат ИдентификаторыАдреса(ПоляАдреса, ИскатьПоУлице); КонецФункции -// Определяет индекс адреса по частям адреса. -// -Функция ИндексАдресаПоЧастямАдреса(Адрес, Идентификатор = Неопределено) Экспорт +Функция ИдентификаторыАдресаПоКлассификаторуСервис1С(АдресаДляПроверки, ИскатьПоУлице, ВсеИдентификаторыАдреса); - Индекс = 0; + Результат = Новый Структура; + Идентификатор = Неопределено; + + Идентификатор = ИдентификаторЭлементаАдресаСервис1С(АдресаДляПроверки["Регион"].Наименование, + АдресаДляПроверки["Регион"].Сокращение, Идентификатор, 1); + Результат.Вставить("ИдентификаторРегион", Идентификатор); + + Если ЗначениеЗаполнено(АдресаДляПроверки["Округ"].Наименование) Тогда + Идентификатор = ИдентификаторЭлементаАдресаСервис1С(АдресаДляПроверки["Округ"].Наименование, + АдресаДляПроверки["Округ"].Сокращение, Идентификатор, 2); + Результат.Вставить("ИдентификаторОкруг", Идентификатор); + КонецЕсли; + + Если ЗначениеЗаполнено(АдресаДляПроверки["Район"].Наименование) Тогда + Идентификатор = ИдентификаторЭлементаАдресаСервис1С(АдресаДляПроверки["Район"].Наименование, + АдресаДляПроверки["Район"].Сокращение, Идентификатор, 3); + Результат.Вставить("ИдентификаторРайон", Идентификатор); + КонецЕсли; + + Если ЗначениеЗаполнено(АдресаДляПроверки["Город"].Наименование) Тогда + Идентификатор = ИдентификаторЭлементаАдресаСервис1С(АдресаДляПроверки["Город"].Наименование, + АдресаДляПроверки["Город"].Сокращение, Идентификатор, 4); + Результат.Вставить("ИдентификаторГород", Идентификатор); + КонецЕсли; + + Если ЗначениеЗаполнено(АдресаДляПроверки["ВнутригородскойРайон"].Наименование) Тогда + Идентификатор = ИдентификаторЭлементаАдресаСервис1С(АдресаДляПроверки["ВнутригородскойРайон"].Наименование, + АдресаДляПроверки["ВнутригородскойРайон"].Сокращение, Идентификатор, 5); + Результат.Вставить("ИдентификаторВнутригРайон", Идентификатор); + КонецЕсли; + + Если ЗначениеЗаполнено(АдресаДляПроверки["НаселенныйПункт"].Наименование) Тогда + Идентификатор = ИдентификаторЭлементаАдресаСервис1С(АдресаДляПроверки["НаселенныйПункт"].Наименование, + АдресаДляПроверки["НаселенныйПункт"].Сокращение, Идентификатор, 6); + Результат.Вставить("ИдентификаторНаселенныйПункт", Идентификатор); + КонецЕсли; + + Если ИскатьПоУлице И ЗначениеЗаполнено(АдресаДляПроверки["Улица"].Наименование) Тогда + Идентификатор = ИдентификаторЭлементаАдресаСервис1С(АдресаДляПроверки["Улица"].Наименование, + АдресаДляПроверки["Улица"].Сокращение, Идентификатор, 7); + Результат.Вставить("ИдентификаторУлица", Идентификатор); + КонецЕсли; + + Если ВсеИдентификаторыАдреса Тогда + Возврат Результат; + КонецЕсли; + Возврат Идентификатор; + +КонецФункции + +Функция ИдентификаторЭлементаАдресаСервис1С(Наименование, Сокращение, ИдентификаторРодитель, Уровень) + + Если НЕ ЗначениеЗаполнено(ИдентификаторРодитель) И Уровень > 1 Тогда + Возврат Неопределено; // т.к. мы не знаем объект верхнего уровня, то нет смысла искать + КонецЕсли; + + Сервис = АдресныйКлассификаторПовтИсп.СервисКлассификатора1С(); + КодЯзыка = ТекущийКодЛокализации(); + + Порция = Сервис.Autocomplete(ИдентификаторРодитель, Уровень, Наименование, 100, КодЯзыка, Метаданные.Имя); + Представление = Наименование + " " + Сокращение; + + Список = Порция.ПолучитьСписок("Item"); + Для Каждого Строка Из Список Цикл + Если Строка.Presentation = Представление Тогда + Возврат Новый УникальныйИдентификатор(Строка.ID); + Продолжить; + КонецЕсли; + КонецЦикла; + + Возврат Неопределено; + +КонецФункции + +Функция ИдентификаторыАдреса(ПоляАдреса, ИскатьПоУлице, ВсеИдентификаторыАдреса = Ложь) + + Источник = ИсточникДанныхАдресногоКлассификатора(); + Если Источник = "Сервис1С" Тогда + Попытка + Возврат ИдентификаторыАдресаПоКлассификаторуСервис1С(ПоляАдреса, ИскатьПоУлице, ВсеИдентификаторыАдреса); + Исключение + РезультатВебСервис = СтруктураОписанияОшибкиПоставщика(); + ЗаписьЖурналаРегистрации(СобытиеЖурналаРегистрации(), УровеньЖурналаРегистрации.Ошибка, , , РезультатВебСервис.ПодробноеПредставлениеОшибки); + Возврат Неопределено; + КонецПопытки; + КонецЕсли; + + Возврат ИдентификаторыАдресаПоКлассификатору(ПоляАдреса, ИскатьПоУлице, ВсеИдентификаторыАдреса); + +КонецФункции + +Функция ИдентификаторыАдресаПоКлассификатору(ПоляАдреса, ИскатьПоУлице, ВсеИдентификаторыАдреса = Ложь) + + ТекстСоединения = ""; + + Если ВсеИдентификаторыАдреса Тогда + ТекстВыбратьИдентификаторы = "АдресныйОбъектРегион.Идентификатор КАК ИдентификаторРегион, "; + Иначе + ТекстВыбратьИдентификаторы = "АдресныйОбъектРегион.Идентификатор КАК Идентификатор"; + КонецЕсли; + + Если ПустаяСтрока(ПоляАдреса["Округ"].Наименование) Тогда + сОкруг = "0"; + Иначе + ТекстСоединения = ТекстСоединения + Символы.ПС + "ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.АдресныеОбъекты КАК АдресныеОбъектыОкруг + | ПО АдресныеОбъектыОкруг.Наименование = """ + ПоляАдреса["Округ"].Наименование + """ + | И АдресныеОбъектыОкруг.КодСубъектаРФ = АдресныйОбъектРегион.КодСубъектаРФ + | И АдресныеОбъектыОкруг.Уровень = 2 + | И АдресныеОбъектыОкруг.КодРайона = 0 + | И АдресныеОбъектыОкруг.КодГорода = 0 + | И АдресныеОбъектыОкруг.КодВнутригородскогоРайона = 0 + | И АдресныеОбъектыОкруг.КодНаселенногоПункта = 0 + | И АдресныеОбъектыОкруг.КодУлицы = 0 + | И АдресныеОбъектыОкруг.КодДополнительногоЭлемента = 0 + | И АдресныеОбъектыОкруг.КодПодчиненногоЭлемента = 0"; + сОкруг = "АдресныеОбъектыОкруг.КодОкруга"; + Если ВсеИдентификаторыАдреса Тогда + ТекстВыбратьИдентификаторы = ТекстВыбратьИдентификаторы + "АдресныеОбъектыОкруг.Идентификатор КАК ИдентификаторОкруг, "; + Иначе + ТекстВыбратьИдентификаторы = "АдресныеОбъектыОкруг.Идентификатор КАК Идентификатор"; + КонецЕсли; + КонецЕсли; + + Если ПустаяСтрока(ПоляАдреса["Район"].Наименование) Тогда + сРайон = "0"; + Иначе + ТекстСоединения = ТекстСоединения + Символы.ПС + "ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.АдресныеОбъекты КАК АдресныеОбъектыРайон + | ПО АдресныеОбъектыРайон.Наименование = """ + ПоляАдреса["Район"].Наименование + """ + | И АдресныеОбъектыРайон.КодОкруга = " + сОкруг + " + | И АдресныеОбъектыРайон.КодСубъектаРФ = АдресныйОбъектРегион.КодСубъектаРФ + | И АдресныеОбъектыРайон.Уровень = 3 + | И АдресныеОбъектыРайон.КодГорода = 0 + | И АдресныеОбъектыРайон.КодВнутригородскогоРайона = 0 + | И АдресныеОбъектыРайон.КодНаселенногоПункта = 0 + | И АдресныеОбъектыРайон.КодУлицы = 0 + | И АдресныеОбъектыРайон.КодДополнительногоЭлемента = 0 + | И АдресныеОбъектыРайон.КодПодчиненногоЭлемента = 0"; + сРайон = "АдресныеОбъектыРайон.КодРайона"; + Если ВсеИдентификаторыАдреса Тогда + ТекстВыбратьИдентификаторы = ТекстВыбратьИдентификаторы + "АдресныеОбъектыРайон.Идентификатор КАК ИдентификаторРайон, "; + Иначе + ТекстВыбратьИдентификаторы = "АдресныеОбъектыРайон.Идентификатор КАК Идентификатор"; + КонецЕсли; + КонецЕсли; + + Если ПустаяСтрока(ПоляАдреса["Город"].Наименование) Тогда + сГород = "0"; + Иначе + ТекстСоединения = ТекстСоединения + Символы.ПС + " ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.АдресныеОбъекты КАК АдресныеОбъектыГород + | ПО АдресныеОбъектыГород.Наименование = """ + ПоляАдреса["Город"].Наименование + """ + | И АдресныеОбъектыГород.КодСубъектаРФ = АдресныйОбъектРегион.КодСубъектаРФ + | И АдресныеОбъектыГород.Уровень = 4 + | И АдресныеОбъектыГород.КодОкруга = " + сОкруг + " + | И АдресныеОбъектыГород.КодРайона = " + сРайон + " + | И АдресныеОбъектыГород.КодВнутригородскогоРайона = 0 + | И АдресныеОбъектыГород.КодНаселенногоПункта = 0 + | И АдресныеОбъектыГород.КодУлицы = 0 + | И АдресныеОбъектыГород.КодДополнительногоЭлемента = 0 + | И АдресныеОбъектыГород.КодПодчиненногоЭлемента = 0"; + сГород = "АдресныеОбъектыГород.КодГорода"; + Если ВсеИдентификаторыАдреса Тогда + ТекстВыбратьИдентификаторы = ТекстВыбратьИдентификаторы + "АдресныеОбъектыГород.Идентификатор КАК ИдентификаторГород, "; + Иначе + ТекстВыбратьИдентификаторы = "АдресныеОбъектыГород.Идентификатор КАК Идентификатор"; + КонецЕсли; + КонецЕсли; + + Если ПустаяСтрока(ПоляАдреса["ВнутригородскойРайон"].Наименование) Тогда + сВнутригородскойРайон = "0"; + Иначе + ТекстСоединения = ТекстСоединения + Символы.ПС + " ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.АдресныеОбъекты КАК АдресныеОбъектыВнутригородскойРайон + | ПО АдресныеОбъектыВнутригородскойРайон.Наименование = """ + ПоляАдреса["ВнутригородскойРайон"].Наименование + """ + | И АдресныеОбъектыВнутригородскойРайон.КодСубъектаРФ = АдресныйОбъектРегион.КодСубъектаРФ + | И АдресныеОбъектыВнутригородскойРайон.КодОкруга = " + сОкруг + " + | И АдресныеОбъектыВнутригородскойРайон.КодРайона = " + сРайон + " + | И АдресныеОбъектыВнутригородскойРайон.КодГорода = " + сГород + " + | И АдресныеОбъектыВнутригородскойРайон.КодНаселенногоПункта = 0 + | И АдресныеОбъектыВнутригородскойРайон.КодУлицы = 0 + | И АдресныеОбъектыВнутригородскойРайон.КодДополнительногоЭлемента = 0 + | И АдресныеОбъектыВнутригородскойРайон.КодПодчиненногоЭлемента = 0"; + сВнутригородскойРайон = "АдресныеОбъектыВнутригородскойРайон.КодВнутригородскогоРайона"; + Если ВсеИдентификаторыАдреса Тогда + ТекстВыбратьИдентификаторы = ТекстВыбратьИдентификаторы + "АдресныеОбъектыВнутригородскойРайон.Идентификатор КАК ИдентификаторВнутригРайон, "; + Иначе + ТекстВыбратьИдентификаторы = "АдресныеОбъектыВнутригородскойРайон.Идентификатор КАК Идентификатор"; + КонецЕсли; + КонецЕсли; + + Если ПустаяСтрока(ПоляАдреса["НаселенныйПункт"].Наименование) Тогда + сНаселенногоПункта = "0"; + Иначе + ТекстСоединения = ТекстСоединения + Символы.ПС + " ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.АдресныеОбъекты КАК АдресныеОбъектыНаселенныйПункт + | ПО АдресныеОбъектыНаселенныйПункт.Наименование = """ + ПоляАдреса["НаселенныйПункт"].Наименование + """ + | И АдресныеОбъектыНаселенныйПункт.КодСубъектаРФ = АдресныйОбъектРегион.КодСубъектаРФ + | И АдресныеОбъектыНаселенныйПункт.Уровень = 6 + | И АдресныеОбъектыНаселенныйПункт.КодОкруга = " + сОкруг + " + | И АдресныеОбъектыНаселенныйПункт.КодРайона = " + сРайон + " + | И АдресныеОбъектыНаселенныйПункт.КодГорода = " + сГород + " + | И АдресныеОбъектыНаселенныйПункт.КодВнутригородскогоРайона = " + сВнутригородскойРайон + " + | И АдресныеОбъектыНаселенныйПункт.КодУлицы = 0 + | И АдресныеОбъектыНаселенныйПункт.КодДополнительногоЭлемента = 0 + | И АдресныеОбъектыНаселенныйПункт.КодПодчиненногоЭлемента = 0"; + сНаселенногоПункта = "АдресныеОбъектыНаселенныйПункт.КодНаселенногоПункта"; + Если ВсеИдентификаторыАдреса Тогда + ТекстВыбратьИдентификаторы = ТекстВыбратьИдентификаторы + "АдресныеОбъектыНаселенныйПункт.Идентификатор КАК ИдентификаторНаселенныйПункт, "; + Иначе + ТекстВыбратьИдентификаторы = "АдресныеОбъектыНаселенныйПункт.Идентификатор КАК Идентификатор"; + КонецЕсли; + КонецЕсли; + + Если ИскатьПоУлице И НЕ ПустаяСтрока(ПоляАдреса["Улица"].Наименование) Тогда + ТекстСоединения = ТекстСоединения + Символы.ПС + " ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.АдресныеОбъекты КАК АдресныеОбъектыУлица + | ПО АдресныеОбъектыУлица.Наименование = """ + ПоляАдреса["Улица"].Наименование + """ + | И АдресныеОбъектыУлица.КодСубъектаРФ = АдресныйОбъектРегион.КодСубъектаРФ + | И АдресныеОбъектыУлица.Уровень = 7 + | И АдресныеОбъектыУлица.КодОкруга = " + сОкруг + " + | И АдресныеОбъектыУлица.КодРайона = " + сРайон + " + | И АдресныеОбъектыУлица.КодГорода = " + сГород + " + | И АдресныеОбъектыУлица.КодВнутригородскогоРайона = " + сВнутригородскойРайон + " + | И АдресныеОбъектыУлица.КодНаселенногоПункта = " + сНаселенногоПункта + " + | И АдресныеОбъектыУлица.КодДополнительногоЭлемента = 0 + | И АдресныеОбъектыУлица.КодПодчиненногоЭлемента = 0"; + Если ВсеИдентификаторыАдреса Тогда + ТекстВыбратьИдентификаторы = ТекстВыбратьИдентификаторы + "АдресныеОбъектыУлица.Идентификатор КАК ИдентификаторУлица, "; + Иначе + ТекстВыбратьИдентификаторы = "АдресныеОбъектыУлица.Идентификатор КАК Идентификатор"; + КонецЕсли; + Иначе + сУлица = "0"; + КонецЕсли; + + Если ВсеИдентификаторыАдреса Тогда + ТекстВыбратьИдентификаторы = Лев(ТекстВыбратьИдентификаторы, СтрДлина(ТекстВыбратьИдентификаторы) - 2); + КонецЕсли; + + Запрос = Новый Запрос; + Запрос.Текст = + "ВЫБРАТЬ ПЕРВЫЕ 1 + | " + ТекстВыбратьИдентификаторы + " + |ИЗ + | РегистрСведений.АдресныеОбъекты КАК АдресныйОбъектРегион " + ТекстСоединения + " + |ГДЕ + | АдресныйОбъектРегион.Наименование = &Регион + | И АдресныйОбъектРегион.Уровень = 1 + | И АдресныйОбъектРегион.КодОкруга = 0 + | И АдресныйОбъектРегион.КодРайона = 0 + | И АдресныйОбъектРегион.КодГорода = 0 + | И АдресныйОбъектРегион.КодВнутригородскогоРайона = 0 + | И АдресныйОбъектРегион.КодНаселенногоПункта = 0 + | И АдресныйОбъектРегион.КодУлицы = 0 + | И АдресныйОбъектРегион.КодДополнительногоЭлемента = 0 + | И АдресныйОбъектРегион.КодПодчиненногоЭлемента = 0 + | И АдресныйОбъектРегион.Сокращение = &РегионСокращение"; + + Запрос.УстановитьПараметр("Регион", ПоляАдреса["Регион"].Наименование); + Запрос.УстановитьПараметр("РегионСокращение", ПоляАдреса["Регион"].Сокращение); + + РезультатЗапроса = Запрос.Выполнить().Выгрузить(); + + Если РезультатЗапроса.Количество() > 0 Тогда + Идентификаторы = РезультатЗапроса[0]; + Если ВсеИдентификаторыАдреса Тогда + Результат = Новый Структура; + Для каждого Колонка Из РезультатЗапроса.Колонки Цикл + Результат.Вставить(Колонка.Имя, Идентификаторы[Колонка.Имя]); + КонецЦикла; + Возврат Результат; + Иначе + Если ЗначениеЗаполнено(Идентификаторы.Идентификатор) Тогда + Возврат Идентификаторы.Идентификатор; + КонецЕсли; + КонецЕсли; + КонецЕсли; + + Возврат Неопределено; +КонецФункции + +// Определяет индекс и ОКТМО адреса по частям адреса. +// +Функция ИндексИОКТМОАдресаПоЧастямАдреса(Адрес, Идентификатор = Неопределено) Экспорт + + Результат = Новый Структура("Индекс, ОКТМО", Неопределено, Неопределено); Источник = ИсточникДанныхАдресногоКлассификатора(); Если ПустаяСтрока(Источник) Тогда // Локальное @@ -3728,18 +3347,36 @@ |ИЗ | РегистрСведений.АдресныеОбъекты КАК АдресныеОбъекты |ГДЕ + | АдресныеОбъекты.Идентификатор = &Идентификатор + |; + | + |//////////////////////////////////////////////////////////////////////////////// + |ВЫБРАТЬ + | АдресныеОбъекты.Дополнительно КАК Дополнительно, + | ДополнительныеАдресныеСведения.КодСубъектаРФ, + | ДополнительныеАдресныеСведения.OKATO, + | ДополнительныеАдресныеСведения.ОКТМО, + | ДополнительныеАдресныеСведения.КодИФНСФЛ, + | ДополнительныеАдресныеСведения.КодИФНСЮЛ, + | ДополнительныеАдресныеСведения.КодУчасткаИФНСФЛ, + | ДополнительныеАдресныеСведения.КодУчасткаИФНСЮЛ + |ИЗ + | РегистрСведений.АдресныеОбъекты КАК АдресныеОбъекты + | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ДополнительныеАдресныеСведения КАК ДополнительныеАдресныеСведения + | ПО АдресныеОбъекты.Дополнительно = ДополнительныеАдресныеСведения.Идентификатор + |ГДЕ | АдресныеОбъекты.Идентификатор = &Идентификатор"; Запрос.УстановитьПараметр("Идентификатор", Идентификатор); + РезультатЗапроса = Запрос.ВыполнитьПакет(); + РезультатЗапросаИндекс = РезультатЗапроса[0].Выбрать(); + РезультатЗапросаОКТМО = РезультатЗапроса[1].Выбрать(); - РезультатЗапроса = Запрос.Выполнить().Выбрать(); - - Если РезультатЗапроса.Следующий() Тогда - Если РезультатЗапроса.ПочтовыйИндекс = 0 Тогда + Если РезультатЗапросаИндекс.Следующий() Тогда + Если РезультатЗапросаИндекс.ПочтовыйИндекс = 0 Тогда // Расшифровка свойств адреса Запрос = Новый Запрос( - #Область ТекстЗапроса "ВЫБРАТЬ | Значение |ИЗ @@ -3773,10 +3410,7 @@ | И ТипыСтроения.Значение = Расшифровка.Ключ | |ГДЕ - | Расшифровка.Тип = ""ДопАдрЭлНомер"" - |" - #КонецОбласти - ); + | Расшифровка.Тип = ""ДопАдрЭлНомер"""); НаборРезультатов = Запрос.ВыполнитьПакет(); Таблица = НаборРезультатов[0].Выгрузить(); @@ -3802,7 +3436,7 @@ КонецЕсли; Продолжить; ИначеЕсли ТипАдресногоЭлемента = ТипАдрЭлПочтовыйИндекс Тогда - Индекс = ТипЧисло.ПривестиЗначение(ДополнительныйЭлемент.Значение); + Результат.Индекс = ТипЧисло.ПривестиЗначение(ДополнительныйЭлемент.Значение); Продолжить; КонецЕсли; КонецЦикла; @@ -3816,9 +3450,9 @@ |ГДЕ | ДомаЗданияСтроения.АдресныйОбъект = &Идентификатор"; Запрос.УстановитьПараметр("Идентификатор", Идентификатор); - РезультатЗапроса = Запрос.Выполнить().Выгрузить(); + РезультатЗапросаСДомами = Запрос.Выполнить().Выгрузить(); - Для Каждого Запись Из РезультатЗапроса Цикл + Для Каждого Запись Из РезультатЗапросаСДомами Цикл // Если Запись.Строения равно Null значит по этому адресу нет домов. Если ЗначениеЗаполнено(Запись.Строения) Тогда Описание = Запись.Строения.Получить(); @@ -3830,44 +3464,45 @@ ЕстьЗаписиДомов = Истина; Если ОписаниеЗданийФИАССодержитДанные(Описание, ЗданияИПомещения) Тогда - Индекс = Запись.ПочтовыйИндекс; + Результат.Индекс = Запись.ПочтовыйИндекс; КонецЕсли; КонецЕсли; КонецЕсли; КонецЕсли; КонецЦикла; Иначе - Индекс = РезультатЗапроса.ПочтовыйИндекс; + Результат.Индекс = РезультатЗапросаИндекс.ПочтовыйИндекс; КонецЕсли; КонецЕсли; + + Если РезультатЗапросаОКТМО.Следующий() Тогда + Результат.ОКТМО = РезультатЗапросаОКТМО.ОКТМО; + КонецЕсли; КонецЕсли; ИначеЕсли Источник = "Сервис1С" Тогда // Веб сервис 1С, может быть на обслуживании. АдресаДляПроверки = Новый Массив; - Результат = Новый Структура("Данные", Новый Массив); - СтруктураОписанияОшибкиПоставщика(Результат); + РезультатВебСервис = Новый Структура("Данные", Новый Массив); + СтруктураОписанияОшибкиПоставщика(РезультатВебСервис); Уровни = АдресныйКлассификаторПовтИсп.УровниКлассификатораФИАС(); АдресаДляПроверки.Добавить(Новый Структура("Адрес, Уровни", Адрес, Уровни)); Попытка - ЗаполнитьРезультатПроверкиАдресаПоКлассификаторуСервис1С(Результат, АдресаДляПроверки); + ЗаполнитьРезультатПроверкиАдресаПоКлассификаторуСервис1С(РезультатВебСервис, АдресаДляПроверки); Исключение - СтруктураОписанияОшибкиПоставщика(Результат, ИнформацияОбОшибке()); - ЗаписьЖурналаРегистрации( СобытиеЖурналаРегистрации(), УровеньЖурналаРегистрации.Ошибка, , , Результат.ПодробноеПредставлениеОшибки); + СтруктураОписанияОшибкиПоставщика(РезультатВебСервис, ИнформацияОбОшибке()); + ЗаписьЖурналаРегистрации( СобытиеЖурналаРегистрации(), УровеньЖурналаРегистрации.Ошибка, , , РезультатВебСервис.ПодробноеПредставлениеОшибки); КонецПопытки; - Если НЕ Результат.Отказ Тогда - Если Результат.Данные[0].Варианты.Количество() > 0 Тогда - Индекс = Результат.Данные[0].Варианты[0].Индекс; + Если НЕ РезультатВебСервис.Отказ Тогда + Если РезультатВебСервис.Данные[0].Варианты.Количество() > 0 Тогда + Результат.Индекс = РезультатВебСервис.Данные[0].Варианты[0].Индекс; + Результат.ОКТМО = РезультатВебСервис.Данные[0].Варианты[0].ОКТМО КонецЕсли; КонецЕсли; КонецЕсли; - Если Индекс = 0 Тогда - Возврат Неопределено; - Иначе - Возврат Индекс; - КонецЕсли; + Возврат Результат; КонецФункции Процедура ДобавитьОшибкуПроверкиАдресаПоКлассификатору(ВсеОшибки, Ключ, Текст, Подсказка = Неопределено); @@ -3973,8 +3608,7 @@ Если НомерВладения = НомерДомаИлиВладенияЗдания И НомерКорпуса = НомерКорпусаЗдания - И НомерСтроения = НомерСтроенияЗдания - Тогда + И НомерСтроения = НомерСтроенияЗдания Тогда // Точное попадания Возврат Истина; КонецЕсли; @@ -3999,7 +3633,7 @@ НомерЧислом = ""; Для Позиция = 1 По СтрДлина(НомерДомаИлиВладенияЗдания) Цикл Символ = Сред(НомерДомаИлиВладенияЗдания, Позиция, 1); - Если Найти("0123456789", Символ) = 0 Тогда + Если СтрНайти("0123456789", Символ) = 0 Тогда Прервать; КонецЕсли; НомерЧислом = НомерЧислом + Символ; @@ -4015,8 +3649,7 @@ Если НомерЧетный Тогда // Четный Если (Интервал.Начало <= НомерЧислом Или Интервал.Начало = 0) - И (Интервал.Конец >= НомерЧислом Или Интервал.Конец = 0) - Тогда + И (Интервал.Конец >= НомерЧислом Или Интервал.Конец = 0) Тогда Возврат Истина; КонецЕсли; КонецЕсли; @@ -4025,8 +3658,7 @@ Если Не НомерЧетный Тогда // Нечетный Если (Интервал.Начало <= НомерЧислом Или Интервал.Начало = 0) - И (Интервал.Конец >= НомерЧислом Или Интервал.Конец = 0) - Тогда + И (Интервал.Конец >= НомерЧислом Или Интервал.Конец = 0) Тогда Возврат Истина; КонецЕсли; КонецЕсли; @@ -4034,8 +3666,7 @@ Иначе // Обычный Если (Интервал.Начало <= НомерЧислом Или Интервал.Начало = 0) - И (Интервал.Конец >= НомерЧислом Или Интервал.Конец = 0) - Тогда + И (Интервал.Конец >= НомерЧислом Или Интервал.Конец = 0) Тогда Возврат Истина; КонецЕсли; @@ -4122,9 +3753,7 @@ // Пространство имен для операций XDTO с адресом. // Функция ПространствоИменАдресаРФ() - - Возврат "http://www.v8.1c.ru/ssl/contactinfo"; - + Возврат "http://www.v8.1c.ru/ssl/AddressSystem"; КонецФункции // Устанавливает в XDTO адресе значение по XPath. @@ -4201,7 +3830,7 @@ Результат = ?(ЧислоСвойств = 0, Неопределено, ОбъектXTDO); Для Индекс = 1 По ЧислоСвойств Цикл Результат = Результат.Получить(СтрПолучитьСтроку(СтрокаСвойств, Индекс)); - Если Результат = Неопределено Тогда + Если Результат = Неопределено Тогда Прервать; КонецЕсли; КонецЦикла; @@ -4247,9 +3876,9 @@ Если ТипЗнч(ИнформацияОбОшибке.Причина) = Тип("ИнформацияОбОшибке") Тогда Если ИнформацияОбОшибке.Причина.Причина <> Неопределено Тогда ОписаниеОшибкиДляПоиска = ВРег(ИнформацияОбОшибке.Причина.Причина.Описание); - ПозицияНачало = Найти(ОписаниеОшибкиДляПоиска , "<FAULTSTRING>"); + ПозицияНачало = СтрНайти(ОписаниеОшибкиДляПоиска , "<FAULTSTRING>"); Если ПозицияНачало > 0 Тогда - ПозицияОкончание = Найти(ОписаниеОшибкиДляПоиска , "</FAULTSTRING>"); + ПозицияОкончание = СтрНайти(ОписаниеОшибкиДляПоиска , "</FAULTSTRING>"); Текст = Сред(ИнформацияОбОшибке.Причина.Причина.Описание, ПозицияНачало + 13, ПозицияОкончание - ПозицияНачало - 13); КонецЕсли; @@ -4257,14 +3886,14 @@ КонецЕсли; // Отрезаем клиентский текст - Позиция = Найти(Текст, ": "); + Позиция = СтрНайти(Текст, ": "); Если Позиция > 0 Тогда Текст = СокрЛ(Сред(Текст, Позиция + 1)); КонецЕсли; // Отрезаем серверный текст Пока Истина Цикл - Позиция = Найти(Текст, "}:"); + Позиция = СтрНайти(Текст, "}:"); Если Позиция = 0 Тогда Прервать; КонецЕсли; @@ -4280,9 +3909,9 @@ Фильтр = Новый Структура("Уровень", 0); НераспознанныеСтроки = ДоступныеУровни.НайтиСтроки(Фильтр); Для каждого НераспознаннаяЧастьАдреса Из НераспознанныеСтроки Цикл - Если (ВРЕГ(НераспознаннаяЧастьАдреса.Наименование) = "МОСКВА" ИЛИ - ВРЕГ(НераспознаннаяЧастьАдреса.Наименование) = "САНКТ-ПЕТЕРБУРГ") - И ПустаяСтрока(НераспознаннаяЧастьАдреса.Сокращение) Тогда + Если (ВРЕГ(НераспознаннаяЧастьАдреса.Наименование) = "МОСКВА" + ИЛИ ВРЕГ(НераспознаннаяЧастьАдреса.Наименование) = "САНКТ-ПЕТЕРБУРГ") + И ПустаяСтрока(НераспознаннаяЧастьАдреса.Сокращение) Тогда НераспознаннаяЧастьАдреса.Сокращение = "г"; НераспознаннаяЧастьАдреса.Значение = НераспознаннаяЧастьАдреса.Наименование + " " + НераспознаннаяЧастьАдреса.Сокращение; КонецЕсли; @@ -4352,8 +3981,6 @@ Возврат ДоступныеУровни; КонецФункции - - Функция УстановитьСоответствиеЧастейАдресаИхУровню(ЧастиАдреса, Уровни) Экспорт ОбработатьОбщепринятыеСокращения(ЧастиАдреса); @@ -4648,9 +4275,9 @@ Разделитель = ""; Для каждого Элемент Из СписокПолей Цикл - ТекстЗапросаВыборки = ТекстЗапросаВыборки + Разделитель + " " + Элемент.Ключ +".Наименование + "" "" + - | " + Элемент.Ключ + ".Сокращение КАК "+ Элемент.Ключ + ", " + Элемент.Ключ +".Уровень КАК " + Элемент.Ключ + "Уровень, " + - Элемент.Ключ + "." + Элемент.Значение + " КАК " + Элемент.Значение; + ТекстЗапросаВыборки = ТекстЗапросаВыборки + Разделитель + " " + Элемент.Ключ + + ".Наименование + "" "" + " + Элемент.Ключ + ".Сокращение КАК "+ Элемент.Ключ + ", " + Элемент.Ключ + ".Уровень КАК " + + Элемент.Ключ + "Уровень, " + Элемент.Ключ + "." + Элемент.Значение + " КАК " + Элемент.Значение; Разделитель = ", "; КонецЦикла; @@ -4670,11 +4297,11 @@ СтрокаАдреса = ЧастиАдреса.Найти(Результат[Элемент.Ключ], "Значение"); Если СтрокаАдреса <> Неопределено Тогда СтрокаАдреса.Уровень = Результат[Элемент.Ключ + "Уровень"]; - УсловиеГдеДляДополнительныхТерриторий = УсловиеГдеДляДополнительныхТерриторий + Разделитель + - "АдресныеОбъекты." + СписокПолей.Получить(Элемент.Ключ) + " = " + Формат(Результат[Элемент.Значение], "ЧРГ=''; ЧГ=0"); + УсловиеГдеДляДополнительныхТерриторий = УсловиеГдеДляДополнительныхТерриторий + Разделитель + + "АдресныеОбъекты." + СписокПолей.Получить(Элемент.Ключ) + " = " + Формат(Результат[Элемент.Значение], "ЧРГ=; ЧГ=0"); Иначе - УсловиеГдеДляДополнительныхТерриторий = УсловиеГдеДляДополнительныхТерриторий + Разделитель + - "АдресныеОбъекты." + СписокПолей.Получить(Элемент.Ключ) + " = 0"; + УсловиеГдеДляДополнительныхТерриторий = УсловиеГдеДляДополнительныхТерриторий + Разделитель + + "АдресныеОбъекты." + СписокПолей.Получить(Элемент.Ключ) + " = 0"; КонецЕсли; Разделитель = " И "; КонецЦикла; @@ -4787,6 +4414,10 @@ Процедура УстановитьУровниУлицыПоЧастямАдреса(ИдентификаторНаселенногоПункта, ЧастиАдреса) Экспорт + Если ТипЗнч(ИдентификаторНаселенногоПункта) = Тип("Строка") Тогда + ИдентификаторНаселенногоПункта = Новый УникальныйИдентификатор(ИдентификаторНаселенногоПункта); + КонецЕсли; + Шаблон = " ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.АдресныеОбъекты КАК %1 | ПО (%1.КодСубъектаРФ = НаселенныйПункт.КодСубъектаРФ) | И (%1.КодОкруга = НаселенныйПункт.КодОкруга) @@ -4803,15 +4434,14 @@ Для Индекс = 0 По ЧастиАдреса.Количество() -1 Цикл ЧастьАдреса = ЧастиАдреса[Индекс]; НазваниеТаблицы = "АдресныйОбъект"+ Строка(Индекс); - СтрокаВыбрать = СтрокаВыбрать + РазделительВыбрать + НазваниеТаблицы + ".Идентификатор КАК " + НазваниеТаблицы + "Идентификатор, " + - НазваниеТаблицы + ".Уровень КАК " + НазваниеТаблицы + "Уровень " ; + СтрокаВыбрать = СтрокаВыбрать + РазделительВыбрать + НазваниеТаблицы + ".Идентификатор КАК " + НазваниеТаблицы + "Идентификатор, " + + НазваниеТаблицы + ".Уровень КАК " + НазваниеТаблицы + "Уровень " ; СтрокаИз = СтрокаИз + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(Шаблон, НазваниеТаблицы, ЧастьАдреса.Наименование, ЧастьАдреса.Сокращение); РазделительВыбрать = ", "; КонецЦикла; - - ТекстЗапроса = "ВЫБРАТЬ " + СтрокаВыбрать + " ИЗ РегистрСведений.АдресныеОбъекты КАК НаселенныйПункт " + - СтрокаИз + " ГДЕ НаселенныйПункт.Идентификатор = &Идентификатор"; + ТекстЗапроса = "ВЫБРАТЬ " + СтрокаВыбрать + " ИЗ РегистрСведений.АдресныеОбъекты КАК НаселенныйПункт " + + СтрокаИз + " ГДЕ НаселенныйПункт.Идентификатор = &Идентификатор"; Запрос = Новый Запрос(ТекстЗапроса); Запрос.УстановитьПараметр("Идентификатор", ИдентификаторНаселенногоПункта); @@ -5040,8 +4670,9 @@ Разделитель = ""; Для каждого Элемент Из СписокПолей Цикл - ТекстЗапросаВыборки = ТекстЗапросаВыборки + Разделитель + " " + Элемент.Ключ +".Наименование + "" "" + - | " + Элемент.Ключ + ".Сокращение КАК "+ Элемент.Ключ + ", " + Элемент.Ключ +".Уровень КАК " + Элемент.Ключ + "Уровень"; + ТекстЗапросаВыборки = ТекстЗапросаВыборки + Разделитель + " " + Элемент.Ключ + + ".Наименование + "" "" + " + Элемент.Ключ + ".Сокращение КАК "+ Элемент.Ключ + ", " + + Элемент.Ключ +".Уровень КАК " + Элемент.Ключ + "Уровень"; Разделитель = ", "; КонецЦикла; @@ -5066,7 +4697,6 @@ КонецПроцедуры - // Определяет улицу и дополнительную территорию, функция используется для совместимости данных перенесенных из КЛАДР. // // Параметры: @@ -5151,8 +4781,240 @@ КонецФункции + +// Заполнить коды адреса +// +// Параметры: +// Адрес - Структура - Структура содержащая поля адреса +// +Процедура ЗаполнитьКодыАдреса(Адрес) Экспорт + + ТекстСоединения = ""; + ТекстДляВыбрать = ""; + ИмяОбъектаДляДополнительныхСведений = "АдресныйОбъектРегион"; + + Если ПустаяСтрока(Адрес.Округ) Тогда + сОкруг = "0"; + ТекстДляВыбрать = "НЕОПРЕДЕЛЕНО КАК КодКЛАДРОкруг, "; + Иначе + ТекстСоединения = ТекстСоединения + Символы.ПС + "ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.АдресныеОбъекты КАК АдресныеОбъектыОкруг + | ПО АдресныеОбъектыОкруг.Наименование = """ + Адрес.Округ + """ + | И АдресныйОбъектОкруг.КодСубъектаРФ = АдресныеОбъектыРайон.КодСубъектаРФ + | И АдресныйОбъектОкруг.Уровень = 2 + | И АдресныйОбъектОкруг.КодРайона = 0 + | И АдресныйОбъектОкруг.КодГорода = 0 + | И АдресныйОбъектОкруг.КодВнутригородскогоРайона = 0 + | И АдресныйОбъектОкруг.КодНаселенногоПункта = 0 + | И АдресныйОбъектОкруг.КодУлицы = 0 + | И АдресныйОбъектОкруг.КодДополнительногоЭлемента = 0 + | И АдресныйОбъектОкруг.КодПодчиненногоЭлемента = 0"; + сОкруг = "АдресныеОбъектыОкруг.КодОкруга"; + ТекстДляВыбрать = "АдресныйОбъектОкруг.КодКЛАДР КАК КодКЛАДРОкруг, "; + ИмяОбъектаДляДополнительныхСведений = "АдресныеОбъектыОкруг"; + КонецЕсли; + + Если ПустаяСтрока(Адрес.Район) Тогда + сРайон = "0"; + ТекстДляВыбрать = ТекстДляВыбрать + "НЕОПРЕДЕЛЕНО КАК КодКЛАДРРайон, "; + Иначе + ТекстСоединения = ТекстСоединения + Символы.ПС + "ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.АдресныеОбъекты КАК АдресныеОбъектыРайон + | ПО АдресныеОбъектыРайон.Наименование = """ + Адрес.Район + """ + | И АдресныеОбъектыРайон.КодОкруга = " + сОкруг + " + | И АдресныйОбъектРегион.КодСубъектаРФ = АдресныеОбъектыРайон.КодСубъектаРФ + | И АдресныеОбъектыРайон.Уровень = 3 + | И АдресныеОбъектыРайон.КодГорода = 0 + | И АдресныеОбъектыРайон.КодВнутригородскогоРайона = 0 + | И АдресныеОбъектыРайон.КодНаселенногоПункта = 0 + | И АдресныеОбъектыРайон.КодУлицы = 0 + | И АдресныеОбъектыРайон.КодДополнительногоЭлемента = 0 + | И АдресныеОбъектыРайон.КодПодчиненногоЭлемента = 0"; + сРайон = "АдресныеОбъектыРайон.КодРайона"; + ТекстДляВыбрать = ТекстДляВыбрать + "АдресныеОбъектыРайон.КодКЛАДР КАК КодКЛАДРРайон, "; + ИмяОбъектаДляДополнительныхСведений = "АдресныеОбъектыРайон"; + КонецЕсли; + + Если ПустаяСтрока(Адрес.Город) Тогда + сГород = "0"; + ТекстДляВыбрать = ТекстДляВыбрать + "НЕОПРЕДЕЛЕНО КАК КодКЛАДРГород, "; + Иначе + ТекстСоединения = ТекстСоединения + Символы.ПС + " ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.АдресныеОбъекты КАК АдресныеОбъектыГород + | ПО АдресныеОбъектыГород.Наименование = """ + Адрес.Город + """ + | И АдресныйОбъектРегион.КодСубъектаРФ = АдресныеОбъектыГород.КодСубъектаРФ + | И АдресныеОбъектыГород.Уровень = 4 + | И АдресныеОбъектыГород.КодОкруга = " + сОкруг + " + | И АдресныеОбъектыГород.КодРайона = " + сРайон + " + | И АдресныеОбъектыГород.КодВнутригородскогоРайона = 0 + | И АдресныеОбъектыГород.КодНаселенногоПункта = 0 + | И АдресныеОбъектыГород.КодУлицы = 0 + | И АдресныеОбъектыГород.КодДополнительногоЭлемента = 0 + | И АдресныеОбъектыГород.КодПодчиненногоЭлемента = 0"; + + сГород = "АдресныеОбъектыГород.КодГорода"; + ТекстДляВыбрать = ТекстДляВыбрать + "АдресныеОбъектыГород.КодКЛАДР КАК КодКЛАДРГород, "; + ИмяОбъектаДляДополнительныхСведений = "АдресныеОбъектыГород"; + КонецЕсли; + + Если ПустаяСтрока(Адрес.ВнутригородскойРайон) Тогда + сВнутригородскойРайон = "0"; + ТекстДляВыбрать = ТекстДляВыбрать + "НЕОПРЕДЕЛЕНО КАК КодКЛАДРВнутригородскойРайон, "; + Иначе + ТекстСоединения = ТекстСоединения + Символы.ПС + " ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.АдресныеОбъекты КАК АдресныеОбъектыВнутригородскойРайон + | ПО АдресныеОбъектыВнутригородскойРайон.Наименование = """ + Адрес.ВнутригородскойРайон + """ + | И АдресныйОбъектРегион.КодСубъектаРФ = АдресныеОбъектыВнутригородскойРайон.КодСубъектаРФ + | И АдресныеОбъектыВнутригородскойРайон.КодОкруга = " + сОкруг + " + | И АдресныеОбъектыВнутригородскойРайон.КодРайона = " + сРайон + " + | И АдресныеОбъектыВнутригородскойРайон.КодГорода = " + сГород + " + | И АдресныеОбъектыВнутригородскойРайон.КодНаселенногоПункта = 0 + | И АдресныеОбъектыВнутригородскойРайон.КодУлицы = 0 + | И АдресныеОбъектыВнутригородскойРайон.КодДополнительногоЭлемента = 0 + | И АдресныеОбъектыВнутригородскойРайон.КодПодчиненногоЭлемента = 0"; + сВнутригородскойРайон = "АдресныеОбъектыВнутригородскойРайон.КодВнутригородскогоРайона"; + ТекстДляВыбрать = ТекстДляВыбрать + "АдресныеОбъектыВнутригородскойРайон.КодКЛАДР КАК КодКЛАДРВнутригородскойРайон, "; + ИмяОбъектаДляДополнительныхСведений = "АдресныеОбъектыВнутригородскойРайон"; + КонецЕсли; + + Если ПустаяСтрока(Адрес.НаселенныйПункт) Тогда + сНаселенногоПункта = "0"; + ТекстДляВыбрать = ТекстДляВыбрать + "НЕОПРЕДЕЛЕНО КАК КодКЛАДРНаселенныйПункт, "; + Иначе + ТекстСоединения = ТекстСоединения + Символы.ПС + " ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.АдресныеОбъекты КАК АдресныеОбъектыНаселенныйПункт + | ПО АдресныеОбъектыНаселенныйПункт.Наименование = """ + Адрес.НаселенныйПункт + """ + | И АдресныйОбъектРегион.КодСубъектаРФ = АдресныеОбъектыНаселенныйПункт.КодСубъектаРФ + | И АдресныеОбъектыНаселенныйПункт.Уровень = 6 + | И АдресныеОбъектыНаселенныйПункт.КодОкруга = " + сОкруг + " + | И АдресныеОбъектыНаселенныйПункт.КодРайона = " + сРайон + " + | И АдресныеОбъектыНаселенныйПункт.КодГорода = " + сГород + " + | И АдресныеОбъектыНаселенныйПункт.КодВнутригородскогоРайона = " + сВнутригородскойРайон + " + | И АдресныеОбъектыНаселенныйПункт.КодУлицы = 0 + | И АдресныеОбъектыНаселенныйПункт.КодДополнительногоЭлемента = 0 + | И АдресныеОбъектыНаселенныйПункт.КодПодчиненногоЭлемента = 0"; + сНаселенногоПункта = "АдресныеОбъектыНаселенныйПункт.КодНаселенногоПункта"; + ТекстДляВыбрать = ТекстДляВыбрать + "АдресныеОбъектыНаселенныйПункт.КодКЛАДР КАК КодКЛАДРНаселенныйПункт, "; + ИмяОбъектаДляДополнительныхСведений = "АдресныеОбъектыНаселенныйПункт"; + КонецЕсли; + + Если ПустаяСтрока(Адрес.Улица) Тогда + сУлица = "0"; + ТекстДляВыбрать = ТекстДляВыбрать + "НЕОПРЕДЕЛЕНО КАК КодКЛАДРУлица, "; + Иначе + ТекстСоединения = ТекстСоединения + Символы.ПС + " ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.АдресныеОбъекты КАК АдресныеОбъектыУлица + | ПО АдресныеОбъектыУлица.Наименование = """ + Адрес.Улица + """ + | И АдресныйОбъектРегион.КодСубъектаРФ = АдресныеОбъектыУлица.КодСубъектаРФ + | И АдресныеОбъектыУлица.Уровень = 7 + | И АдресныеОбъектыУлица.КодОкруга = " + сОкруг + " + | И АдресныеОбъектыУлица.КодРайона = " + сРайон + " + | И АдресныеОбъектыУлица.КодГорода = " + сГород + " + | И АдресныеОбъектыУлица.КодВнутригородскогоРайона = " + сВнутригородскойРайон + " + | И АдресныеОбъектыУлица.КодНаселенногоПункта = " + сНаселенногоПункта + " + | И АдресныеОбъектыУлица.КодДополнительногоЭлемента = 0 + | И АдресныеОбъектыУлица.КодПодчиненногоЭлемента = 0"; + + сУлица = "АдресныеОбъектыУлица.КодНаселенногоПункта"; + ТекстДляВыбрать = ТекстДляВыбрать + "АдресныеОбъектыУлица.КодКЛАДР КАК КодКЛАДРУлица, "; + ИмяОбъектаДляДополнительныхСведений = "АдресныеОбъектыУлица"; + КонецЕсли; + + Запрос = Новый Запрос; + Запрос.Текст = + "ВЫБРАТЬ ПЕРВЫЕ 1 + | АдресныйОбъектРегион.КодКЛАДР КАК КодКЛАДРРегион, + | АдресныйОбъектРегион.КодСубъектаРФ КАК КодСубъектаРФ, " + ТекстДляВыбрать + " + | ДополнительныеАдресныеСведения.OKATO КАК OKATO, + | ДополнительныеАдресныеСведения.ОКТМО КАК ОКТМО, + | ДополнительныеАдресныеСведения.КодИФНСФЛ, + | ДополнительныеАдресныеСведения.КодИФНСЮЛ, + | ДополнительныеАдресныеСведения.КодУчасткаИФНСФЛ, + | ДополнительныеАдресныеСведения.КодУчасткаИФНСЮЛ + |ИЗ + | РегистрСведений.АдресныеОбъекты КАК АдресныйОбъектРегион " + ТекстСоединения + " + | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ДополнительныеАдресныеСведения КАК ДополнительныеАдресныеСведения + | ПО (" + ИмяОбъектаДляДополнительныхСведений + ".Дополнительно = ДополнительныеАдресныеСведения.Идентификатор) + |ГДЕ + | АдресныйОбъектРегион.Наименование = &Регион + | И АдресныйОбъектРегион.Уровень = 1 + | И АдресныйОбъектРегион.КодОкруга = 0 + | И АдресныйОбъектРегион.КодРайона = 0 + | И АдресныйОбъектРегион.КодГорода = 0 + | И АдресныйОбъектРегион.КодВнутригородскогоРайона = 0 + | И АдресныйОбъектРегион.КодНаселенногоПункта = 0 + | И АдресныйОбъектРегион.КодУлицы = 0 + | И АдресныйОбъектРегион.КодДополнительногоЭлемента = 0 + | И АдресныйОбъектРегион.КодПодчиненногоЭлемента = 0 + | И АдресныйОбъектРегион.Сокращение = &РегионСокращение"; + + Запрос.УстановитьПараметр("Регион", Адрес.Регион); + Запрос.УстановитьПараметр("РегионСокращение", Адрес.РегионСокращение); + + РезультатЗапроса = Запрос.Выполнить().Выбрать(); + + Если РезультатЗапроса.Следующий() Тогда + Адрес.КодыКЛАДР.Регион = РезультатЗапроса.КодКЛАДРРегион; + Адрес.КодыКЛАДР.Округ = РезультатЗапроса.КодКЛАДРОкруг; + Адрес.КодыКЛАДР.Город = РезультатЗапроса.КодКЛАДРГород; + Адрес.КодыКЛАДР.ВнутригородскойРайон = РезультатЗапроса.КодКЛАДРВнутригородскойРайон; + Адрес.КодыКЛАДР.НаселенныйПункт = РезультатЗапроса.КодКЛАДРНаселенныйПункт; + Адрес.КодыКЛАДР.Улица = РезультатЗапроса.КодКЛАДРУлица; + Адрес.ДополнительныеКоды.ОКТМО = РезультатЗапроса.ОКТМО; + Адрес.ДополнительныеКоды.ОКАТО = РезультатЗапроса.OKATO; + Адрес.ДополнительныеКоды.КодИФНСФЛ = РезультатЗапроса.КодИФНСФЛ; + Адрес.ДополнительныеКоды.КодИФНСЮЛ = РезультатЗапроса.КодИФНСЮЛ; + Адрес.ДополнительныеКоды.КодУчасткаИФНСФЛ = РезультатЗапроса.КодУчасткаИФНСФЛ; + Адрес.ДополнительныеКоды.КодУчасткаИФНСЮЛ = РезультатЗапроса.КодУчасткаИФНСЮЛ; + КонецЕсли; + +КонецПроцедуры + + +// Функция - Полные наименования сокращений +// +// Параметры: +// СоответствиеСокращений - Соответствие - сокращения адреса +// +Процедура ПолныеНаименованияСокращений(СоответствиеСокращений) Экспорт + + Запрос = Новый Запрос; + Запрос.Текст = "ВЫБРАТЬ + | ТаблицаСокращений.Уровень КАК Уровень, + | ТаблицаСокращений.Сокращение КАК Сокращение + |ПОМЕСТИТЬ ТаблицаСокращений + |ИЗ + | &ТаблицаСокращений КАК ТаблицаСокращений + |; + | + |//////////////////////////////////////////////////////////////////////////////// + |ВЫБРАТЬ + | УровниСокращенийАдресныхСведений.Сокращение КАК Сокращение, + | УровниСокращенийАдресныхСведений.Уровень КАК Уровень, + | УровниСокращенийАдресныхСведений.Значение КАК Значение + |ИЗ + | ТаблицаСокращений КАК ТаблицаСокращений + | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.УровниСокращенийАдресныхСведений КАК УровниСокращенийАдресныхСведений + | ПО ТаблицаСокращений.Уровень = УровниСокращенийАдресныхСведений.Уровень + | И (ТаблицаСокращений.Сокращение ПОДОБНО УровниСокращенийАдресныхСведений.Сокращение)"; + + ТаблицаСоответствиеСокращений = Новый ТаблицаЗначений; + ТаблицаСоответствиеСокращений.Колонки.Добавить("Уровень", Новый ОписаниеТипов("Число")); + ТаблицаСоответствиеСокращений.Колонки.Добавить("Сокращение", Новый ОписаниеТипов("Строка")); + Для каждого Элемент Из СоответствиеСокращений Цикл + НоваяСтрока = ТаблицаСоответствиеСокращений.Добавить(); + НоваяСтрока.Уровень = Элемент.Ключ; + НоваяСтрока.Сокращение = Элемент.Значение; + КонецЦикла; + + Запрос.УстановитьПараметр("ТаблицаСокращений", ТаблицаСоответствиеСокращений); + РезультатЗапроса = Запрос.Выполнить().Выбрать(); + + Пока РезультатЗапроса.Следующий() Цикл + СоответствиеСокращений[РезультатЗапроса.Уровень] = РезультатЗапроса.Значение; + КонецЦикла; + +КонецПроцедуры + + #КонецОбласти +#Область СлужебныеПроцедурыИФункции + #Область СлужебныйПрограммныйИнтерфейсФоновыеОперацииСКлассификатором // Обработчик фоновой загрузки. @@ -5188,7 +5050,7 @@ Процедура ПриДобавленииОбработчиковСлужебныхСобытий(КлиентскиеОбработчики, СерверныеОбработчики) Экспорт // СЕРВЕРНЫЕ ОБРАБОТЧИКИ. - СерверныеОбработчики["СтандартныеПодсистемы.БазоваяФункциональность\ПриДобавленииПараметровРаботыКлиентскойЛогикиСтандартныхПодсистем"].Добавить( + СерверныеОбработчики["СтандартныеПодсистемы.БазоваяФункциональность\ПриДобавленииПараметровРаботыКлиента"].Добавить( "АдресныйКлассификаторСлужебный"); // Обновление @@ -5213,7 +5075,7 @@ // Параметры: // Параметры - Структура - структура параметров. // -Процедура ПриДобавленииПараметровРаботыКлиентскойЛогикиСтандартныхПодсистем(Параметры) Экспорт +Процедура ПриДобавленииПараметровРаботыКлиента(Параметры) Экспорт Параметры.Вставить("АдресныйКлассификаторУстарел", УстаревшийКлассификаторСодержитСведения()); @@ -5234,8 +5096,7 @@ // Разрешение на проверку обновления. АдресФайлаВерсий = ОбщегоНазначенияКлиентСервер.СтруктураURI( - АдресФайлаОписанияДоступныхВерсий() - ); + АдресФайлаОписанияДоступныхВерсий()); Протокол = ВРег(АдресФайлаВерсий.Схема); Адрес = АдресФайлаВерсий.Хост; @@ -5244,10 +5105,9 @@ Разрешения = Новый Массив; Разрешения.Добавить( - РаботаВБезопасномРежиме.РазрешениеНаИспользованиеИнтернетРесурса(Протокол, Адрес, Порт, Описание) - ); + РаботаВБезопасномРежиме.РазрешениеНаИспользованиеИнтернетРесурса(Протокол, Адрес, Порт, Описание)); - ВладелецРазрешения = ОбщегоНазначения.ИдентификаторОбъектаМетаданных("РегистрСведений.АдресныеОбъекты"); + ВладелецРазрешения = ОбщегоНазначения.ИдентификаторОбъектаМетаданных(Метаданные.РегистрыСведений.АдресныеОбъекты.ПолноеИмя()); ЗапросРазрешений = РаботаВБезопасномРежиме.ЗапросНаИспользованиеВнешнихРесурсов(Разрешения, ВладелецРазрешения, Истина); @@ -5301,24 +5161,21 @@ МодульТекущиеДелаСервер = ОбщегоНазначения.ОбщийМодуль("ТекущиеДелаСервер"); Разделы = МодульТекущиеДелаСервер.РазделыДляОбъекта("РегистрСведений.АдресныеОбъекты"); - Если Разделы = Неопределено Тогда + Если Разделы.Количество() = 0 Тогда // Не вынесены в командный интерфейс. РазделАдминистрирование = Метаданные.Подсистемы.Найти("Администрирование"); Если РазделАдминистрирование = Неопределено Тогда - Возврат; + Возврат; КонецЕсли; - Разделы = Новый Массив; Разделы.Добавить(РазделАдминистрирование); КонецЕсли; // 1. Необходимость актуализировать адресный классификатор - в старом классификаторе больше нет записей о регионах. - Регионы = ЗаполненныеРегионыУстаревшегоКлассификатора(); - Если Регионы.Количество() > 0 Тогда - - Для Каждого Раздел Из Разделы Цикл + КоличествоРегионов = ЗаполненныеРегионыУстаревшегоКлассификатора().Количество(); + Для Каждого Раздел Из Разделы Цикл Дело = ТекущиеДела.Добавить(); Дело.Идентификатор = "АктуализацияАдресногоКлассификатора"; - Дело.ЕстьДела = Истина; + Дело.ЕстьДела = ?(КоличествоРегионов > 0, Истина, Ложь); Дело.Важное = Истина; Дело.Владелец = Раздел; Дело.Представление = НСтр("ru = 'Адресный классификатор устарел'"); @@ -5326,35 +5183,24 @@ Дело.Подсказка = НСтр("ru = 'Автоподбор и проверка корректности адресов временно недоступны.'"); Дело.ПараметрыФормы = Новый Структура; Дело.Форма = "РегистрСведений.АдресныеОбъекты.Форма.АктуализацияУстаревшегоКлассификатора"; - КонецЦикла; - - Возврат; - - КонецЕсли; + КонецЦикла; - Если ОбщегоНазначенияКлиентСервер.ЭтоВебКлиент() Тогда - Возврат; // В веб-клиенте работа с адресным классификатором не поддерживается. - КонецЕсли; - - // 2. Необходимость обновления - выводим всегда. + // 2. Необходимость обновления адресного классификатора ПоследнееОбновление = ОписаниеПоследнейЗагрузки(); Подсказка = ПоследнееОбновление.Представление; - Если ПоследнееОбновление.НеобходимоОбновление Тогда - Подсказка = Подсказка + Символы.ПС + НСтр("ru = 'Необходимо проверить наличие обновлений.'"); - - Для Каждого Раздел Из Разделы Цикл - Дело = ТекущиеДела.Добавить(); - Дело.Идентификатор = "ОбновлениеАдресногоКлассификатора"; - Дело.ЕстьДела = Истина; - Дело.Важное = ПоследнееОбновление.НеобходимоОбновление; - Дело.Владелец = Раздел; - Дело.Представление = НСтр("ru = 'Адресный классификатор устарел'"); - Дело.Количество = 0; - Дело.Подсказка = Подсказка; - Дело.ПараметрыФормы = Новый Структура("Режим", "ПроверкаОбновления"); - Дело.Форма = "РегистрСведений.АдресныеОбъекты.Форма.ЗагрузкаАдресногоКлассификатора"; - КонецЦикла; - КонецЕсли; + Подсказка = Подсказка + Символы.ПС + НСтр("ru = 'Необходимо проверить наличие обновлений.'"); + Для Каждого Раздел Из Разделы Цикл + Дело = ТекущиеДела.Добавить(); + Дело.Идентификатор = "ОбновлениеАдресногоКлассификатора"; + Дело.ЕстьДела = ПоследнееОбновление.НеобходимоОбновление ; + Дело.Важное = ПоследнееОбновление.НеобходимоОбновление; + Дело.Владелец = Раздел; + Дело.Представление = НСтр("ru = 'Адресный классификатор устарел'"); + Дело.Количество = 0; + Дело.Подсказка = Подсказка; + Дело.ПараметрыФормы = Новый Структура("Режим", "ПроверкаОбновления"); + Дело.Форма = "РегистрСведений.АдресныеОбъекты.Форма.ЗагрузкаАдресногоКлассификатора"; + КонецЦикла; КонецПроцедуры @@ -5479,8 +5325,12 @@ Функция ЗаполненныеРегионыУстаревшегоКлассификатора() Экспорт - // Выбираем все регионы, по которым еще есть записи. - Запрос = Новый Запрос(" + Результат = Новый Массив; + Если Метаданные.РегистрыСведений.Найти("УдалитьАдресныйКлассификатор") <> Неопределено + И ПравоДоступа("Изменение", Метаданные.РегистрыСведений.УдалитьАдресныйКлассификатор) Тогда + + // Выбираем все регионы, по которым еще есть записи. + Запрос = Новый Запрос(" |ВЫБРАТЬ РАЗЛИЧНЫЕ | Регионы.КодАдресногоОбъектаВКоде КАК КодСубъектаРФ |ИЗ @@ -5501,9 +5351,10 @@ | ) |"); - Результат = Запрос.Выполнить().Выгрузить().ВыгрузитьКолонку("КодСубъектаРФ"); - + Результат = Запрос.Выполнить().Выгрузить().ВыгрузитьКолонку("КодСубъектаРФ"); + КонецЕсли; Возврат Результат; + КонецФункции // Проверяет есть ли хоть одна запись КЛАДР (исключая записи о регионах) требующая переноса. @@ -5514,12 +5365,15 @@ Возврат Ложь; КонецЕсли; - Запрос = Новый Запрос("ВЫБРАТЬ РАЗРЕШЕННЫЕ ПЕРВЫЕ 1 - | Регионы.КодАдресногоОбъектаВКоде КАК КодСубъектаРФ - |ИЗ - | РегистрСведений.УдалитьАдресныйКлассификатор КАК Регионы - |ГДЕ - | Регионы.ТипАдресногоЭлемента > 1"); + Запрос = Новый Запрос(" + |ВЫБРАТЬ ПЕРВЫЕ 1 + | Регионы.КодАдресногоОбъектаВКоде КАК КодСубъектаРФ + |ИЗ + | РегистрСведений.УдалитьАдресныйКлассификатор КАК Регионы + |ГДЕ + | Регионы.ТипАдресногоЭлемента > 1 + |"); + Результат = Запрос.Выполнить().Выбрать(); Если Результат.Следующий() Тогда @@ -5540,8 +5394,7 @@ Для Каждого СубъектРФ Из КодыСубъектовРФ Цикл НомерПоПорядку = НомерПоПорядку + 1; - ДлительныеОперации.СообщитьПрогресс( , СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Актуализация сведений о регионе ""%1 - %2"" (осталось %3) ...'"), + ДлительныеОперации.СообщитьПрогресс(,СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Актуализация сведений о регионе ""%1 - %2"" (осталось %3) ...'"), СубъектРФ, АдресныйКлассификатор.НаименованиеРегионаПоКоду(СубъектРФ), Формат(ВсегоСубъектов - НомерПоПорядку, "ЧН="))); @@ -5778,7 +5631,6 @@ Пока Выборка.Следующий() Цикл ЕстьЗаписиДомов = Истина; Пока ЕстьЗаписиДомов Цикл - КодАдресногоОбъекта = Цел(Выборка.Код / 10000); СтрокаАдресногоОбъекта = ТаблицаАдресныхОбъектов.Найти(КодАдресногоОбъекта, "КодКЛАДР"); ИдентификаторАдресногоОбъекта = ?(СтрокаАдресногоОбъекта = Неопределено, Неопределено, СтрокаАдресногоОбъекта.Идентификатор); @@ -5820,8 +5672,7 @@ СтрокаСлужебныхАдресныхСведений("STRSTAT", 2, Неопределено, "Сооружение", СтрокаСлужебныхАдресныхСведений("STRSTAT", 3, Неопределено, "Литера", СтрокаСлужебныхАдресныхСведений("STRSTAT", 3, Неопределено, "Литер", - РегистрыСведений.СлужебныеАдресныеСведения.СоздатьНаборЗаписей().ВыгрузитьКолонки() - )))))))))); + РегистрыСведений.СлужебныеАдресныеСведения.СоздатьНаборЗаписей().ВыгрузитьКолонки())))))))))); Результат.Индексы.Добавить("Тип, Значение"); Возврат Результат; @@ -5861,8 +5712,7 @@ СтрокаЧастейЗданияКЛАДР("ЛИТЕР", "Литера", "STRSTAT", СтрокаЧастейЗданияКЛАДР("СООРУЖЕНИЕ", "Сооружение", "STRSTAT", СтрокаЧастейЗданияКЛАДР("УЧАСТОК", "Участок", "STRSTAT", - "Префикс, Идентификатор, ТипСтатуса, Длина" - ))))))))))); + "Префикс, Идентификатор, ТипСтатуса, Длина"))))))))))); Результат.Сортировать("Длина УБЫВ, Префикс"); Результат.Индексы.Добавить("Идентификатор"); @@ -5963,7 +5813,7 @@ // Разбиваем описание на части. ВариантыОписаний = ВРег(СтрЗаменить( СокрЛП(СтрЗаменить(Описание, ",", Символы.ПС)), " ", "")); Для НомерСтроки = 1 По СтрЧислоСтрок(ВариантыОписаний) Цикл - ОдиночноеОписание = ВРег( СокрЛП( СтрПолучитьСтроку(ВариантыОписаний, НомерСтроки) )); + ОдиночноеОписание = ВРег( СокрЛП( СтрПолучитьСтроку(ВариантыОписаний, НомерСтроки))); Если ПустаяСтрока(ОдиночноеОписание) Тогда Продолжить; КонецЕсли; @@ -6012,33 +5862,27 @@ // Функция ОписаниеДиапазонаКЛАДР(Описание, ТаблицыДанных) - ПозицияДефиса = Найти(Описание, "-"); + ПозицияДефиса = СтрНайти(Описание, "-"); Символ = Лев(Описание, 1); Если Символ = "Н" Тогда // Нечетный Диапазон = Сред(Описание, 2); Фильтр = Новый Структура("Тип, Значение", "INTVSTAT", "Нечетный"); - ИначеЕсли Символ = "Ч" Тогда // Четный Фильтр = Новый Структура("Тип, Значение", "INTVSTAT", "Четный"); - ИначеЕсли ПозицияДефиса > 0 И ЭтоЦифра(Символ) Тогда // Обычный Фильтр = Новый Структура("Тип, Значение", "INTVSTAT", "Обычный"); - - Иначе + Иначе // Не диапазон Возврат Неопределено - КонецЕсли; ВариантыТипов = ТаблицыДанных.СлужебныеАдресныеСведения.НайтиСтроки(Фильтр); Если ВариантыТипов.Количество() = 0 Тогда - ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Ошибка поиска типа диапазона для %1'"), Описание - ); + ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Ошибка поиска типа диапазона для %1'"), Описание); КонецЕсли; Разделитель = Символы.Таб; @@ -6119,7 +5963,7 @@ Функция ЭтоЦифра(Символ) - Возврат Найти("0123456789", Символ) > 0; + Возврат СтрНайти("0123456789", Символ) > 0; КонецФункции @@ -6149,7 +5993,7 @@ // Тип текущей части Позиция = 1; Для Каждого ТипЧасти Из ТипыЧастейЗдания Цикл - Если Лев(Текст, ТипЧасти.Длина) = ТипЧасти.Префикс Тогда + Если СтрНачинаетсяС(Текст, ТипЧасти.Префикс) Тогда Идентификатор = ТипЧасти.Идентификатор; Позиция = 1 + ТипЧасти.Длина; Прервать; @@ -6161,12 +6005,11 @@ Позиция = 0; Для Каждого ТипЧасти Из ТипыЧастейЗдания Цикл // Ищем ближайший следующий тип, после которого должно быть значение. - ТестПозиции = Найти(Текст, ТипЧасти.Префикс); + ТестПозиции = СтрНайти(Текст, ТипЧасти.Префикс); Если ТестПозиции > 0 // Нашли И (Позиция = 0 Или ТестПозиции<Позиция) // Ближайший - И Не ПустаяСтрока(Сред(Текст, ТестПозиции + ТипЧасти.Длина, 1)) // Со значением - Тогда - Позиция = ТестПозиции; + И Не ПустаяСтрока(Сред(Текст, ТестПозиции + ТипЧасти.Длина, 1)) Тогда // Со значением + Позиция = ТестПозиции; КонецЕсли; КонецЦикла; @@ -6222,105 +6065,106 @@ // Считаем, что уникальность обеспечивается не идентификатором (что правильно), а кодом субъекта // из-за особенностей платформы по передаче уникального идентификатора в таблицу-параметр запроса. - Запрос = Новый Запрос(" - |ВЫБРАТЬ - | Параметр.Наименование КАК Наименование, - | Параметр.Сокращение КАК Сокращение, - | Параметр.КодСубъектаРФ КАК КодСубъектаРФ - |ПОМЕСТИТЬ - | Классификатор - |ИЗ - | &Классификатор КАК Параметр - |;/////////////////////////////////////////////////////////////////////////////////// - | - |ВЫБРАТЬ - | ВсеДоступныеРегионы.Наименование + "" "" + ВсеДоступныеРегионы.Сокращение КАК Представление, - | ВсеДоступныеРегионы.КодСубъектаРФ КАК КодСубъектаРФ, - | ИдентификаторыАдресныхОбъектов.Идентификатор КАК Идентификатор, - | ВЫБОР - | КОГДА АдресныеОбъекты.КодСубъектаРФ ЕСТЬ NULL ТОГДА ЛОЖЬ - | ИНАЧЕ ИСТИНА - | КОНЕЦ КАК Загружено, - | ЕСТЬNULL(Версии.ДатаВерсии, ДАТАВРЕМЯ(1,1,1)) КАК ДатаВерсии - |ИЗ - |( - | ВЫБРАТЬ РАЗЛИЧНЫЕ - | АдресныеОбъекты.Наименование КАК Наименование, - | АдресныеОбъекты.Сокращение КАК Сокращение, - | АдресныеОбъекты.КодСубъектаРФ КАК КодСубъектаРФ - | ИЗ - | РегистрСведений.АдресныеОбъекты КАК АдресныеОбъекты - | ГДЕ - | АдресныеОбъекты.Уровень = 1 - | И АдресныеОбъекты.КодОкруга = 0 - | И АдресныеОбъекты.КодРайона = 0 - | И АдресныеОбъекты.КодГорода = 0 - | И АдресныеОбъекты.КодВнутригородскогоРайона = 0 - | И АдресныеОбъекты.КодНаселенногоПункта = 0 - | И АдресныеОбъекты.КодУлицы = 0 - | И АдресныеОбъекты.КодДополнительногоЭлемента = 0 - | И АдресныеОбъекты.КодПодчиненногоЭлемента = 0 - | ОБЪЕДИНИТЬ - | ВЫБРАТЬ - | Классификатор.Наименование, - | Классификатор.Сокращение, - | Классификатор.КодСубъектаРФ - | ИЗ - | Классификатор КАК Классификатор - |) КАК ВсеДоступныеРегионы - | - |ЛЕВОЕ СОЕДИНЕНИЕ ( - | ВЫБРАТЬ - | Регионы.КодСубъектаРФ КАК КодСубъектаРФ - | ИЗ - | РегистрСведений.АдресныеОбъекты КАК Регионы - | ГДЕ - | Регионы.Уровень = 1 - | И 1 В ( - | ВЫБРАТЬ ПЕРВЫЕ 1 1 ИЗ РегистрСведений.АдресныеОбъекты - | ГДЕ Уровень = 2 И КодСубъектаРФ = Регионы.КодСубъектаРФ - | ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ ПЕРВЫЕ 1 1 ИЗ РегистрСведений.АдресныеОбъекты - | ГДЕ Уровень = 3 И КодСубъектаРФ = Регионы.КодСубъектаРФ - | ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ ПЕРВЫЕ 1 1 ИЗ РегистрСведений.АдресныеОбъекты - | ГДЕ Уровень = 4 И КодСубъектаРФ = Регионы.КодСубъектаРФ - | ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ ПЕРВЫЕ 1 1 ИЗ РегистрСведений.АдресныеОбъекты - | ГДЕ Уровень = 5 И КодСубъектаРФ = Регионы.КодСубъектаРФ - | ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ ПЕРВЫЕ 1 1 ИЗ РегистрСведений.АдресныеОбъекты - | ГДЕ Уровень = 6 И КодСубъектаРФ = Регионы.КодСубъектаРФ - | ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ ПЕРВЫЕ 1 1 ИЗ РегистрСведений.АдресныеОбъекты - | ГДЕ Уровень = 7 И КодСубъектаРФ = Регионы.КодСубъектаРФ - | ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ ПЕРВЫЕ 1 1 ИЗ РегистрСведений.АдресныеОбъекты - | ГДЕ Уровень = 90 И КодСубъектаРФ = Регионы.КодСубъектаРФ - | ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ ПЕРВЫЕ 1 1 ИЗ РегистрСведений.АдресныеОбъекты - | ГДЕ Уровень = 91 И КодСубъектаРФ = Регионы.КодСубъектаРФ - | ) - |) КАК АдресныеОбъекты - |ПО - | АдресныеОбъекты.КодСубъектаРФ = ВсеДоступныеРегионы.КодСубъектаРФ - | - |ЛЕВОЕ СОЕДИНЕНИЕ - | РегистрСведений.АдресныеОбъекты КАК ИдентификаторыАдресныхОбъектов - |ПО - | ИдентификаторыАдресныхОбъектов.КодСубъектаРФ = ВсеДоступныеРегионы.КодСубъектаРФ - | И ИдентификаторыАдресныхОбъектов.Уровень = 1 - | И ИдентификаторыАдресныхОбъектов.КодОкруга = 0 - | И ИдентификаторыАдресныхОбъектов.КодРайона = 0 - | И ИдентификаторыАдресныхОбъектов.КодГорода = 0 - | И ИдентификаторыАдресныхОбъектов.КодВнутригородскогоРайона = 0 - | И ИдентификаторыАдресныхОбъектов.КодНаселенногоПункта = 0 - | И ИдентификаторыАдресныхОбъектов.КодУлицы = 0 - | И ИдентификаторыАдресныхОбъектов.КодДополнительногоЭлемента = 0 - | И ИдентификаторыАдресныхОбъектов.КодПодчиненногоЭлемента = 0 - | - |ЛЕВОЕ СОЕДИНЕНИЕ - | РегистрСведений.ЗагруженныеВерсииАдресныхСведений КАК Версии - |ПО - | Версии.КодСубъектаРФ = ВсеДоступныеРегионы.КодСубъектаРФ - | - |УПОРЯДОЧИТЬ ПО - | ВсеДоступныеРегионы.КодСубъектаРФ, - | ВсеДоступныеРегионы.Наименование + "" "" + ВсеДоступныеРегионы.Сокращение - |"); + Запрос = Новый Запрос("ВЫБРАТЬ + | Параметр.Наименование КАК Наименование, + | Параметр.Сокращение КАК Сокращение, + | Параметр.КодСубъектаРФ КАК КодСубъектаРФ + |ПОМЕСТИТЬ Классификатор + |ИЗ + | &Классификатор КАК Параметр + |; + | + |//////////////////////////////////////////////////////////////////////////////// + |ВЫБРАТЬ + | ВЫБОР + | КОГДА ВсеДоступныеРегионы.Наименование ЕСТЬ NULL + | ТОГДА Классификатор.Наименование + "" "" + Классификатор.Сокращение + | ИНАЧЕ ВсеДоступныеРегионы.Наименование + "" "" + ВсеДоступныеРегионы.Сокращение + | КОНЕЦ КАК Представление, + | ВЫБОР + | КОГДА ВсеДоступныеРегионы.КодСубъектаРФ ЕСТЬ NULL + | ТОГДА Классификатор.КодСубъектаРФ + | ИНАЧЕ ВсеДоступныеРегионы.КодСубъектаРФ + | КОНЕЦ КАК КодСубъектаРФ, + | ИдентификаторыАдресныхОбъектов.Идентификатор КАК Идентификатор, + | ВЫБОР + | КОГДА АдресныеОбъекты.КодСубъектаРФ ЕСТЬ NULL + | ТОГДА ЛОЖЬ + | ИНАЧЕ ИСТИНА + | КОНЕЦ КАК Загружено, + | ЕСТЬNULL(Версии.ДатаВерсии, ДАТАВРЕМЯ(1, 1, 1)) КАК ДатаВерсии + |ИЗ + | (ВЫБРАТЬ РАЗЛИЧНЫЕ + | АдресныеОбъекты.Наименование КАК Наименование, + | АдресныеОбъекты.Сокращение КАК Сокращение, + | АдресныеОбъекты.КодСубъектаРФ КАК КодСубъектаРФ + | ИЗ + | РегистрСведений.АдресныеОбъекты КАК АдресныеОбъекты + | ГДЕ + | АдресныеОбъекты.Уровень = 1 + | И АдресныеОбъекты.КодОкруга = 0 + | И АдресныеОбъекты.КодРайона = 0 + | И АдресныеОбъекты.КодГорода = 0 + | И АдресныеОбъекты.КодВнутригородскогоРайона = 0 + | И АдресныеОбъекты.КодНаселенногоПункта = 0 + | И АдресныеОбъекты.КодУлицы = 0 + | И АдресныеОбъекты.КодДополнительногоЭлемента = 0 + | И АдресныеОбъекты.КодПодчиненногоЭлемента = 0) КАК ВсеДоступныеРегионы + | ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ + | Регионы.КодСубъектаРФ КАК КодСубъектаРФ + | ИЗ + | РегистрСведений.АдресныеОбъекты КАК Регионы + | ГДЕ + | Регионы.Уровень = 1 + | И 1 В + | (ВЫБРАТЬ ПЕРВЫЕ 1 1 ИЗ РегистрСведений.АдресныеОбъекты + | ГДЕ РегистрСведений.АдресныеОбъекты.Уровень = 2 + | И РегистрСведений.АдресныеОбъекты.КодСубъектаРФ = Регионы.КодСубъектаРФ + | ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ ПЕРВЫЕ 1 1 ИЗ РегистрСведений.АдресныеОбъекты + | ГДЕ РегистрСведений.АдресныеОбъекты.Уровень = 3 + | И РегистрСведений.АдресныеОбъекты.КодСубъектаРФ = Регионы.КодСубъектаРФ + | ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ ПЕРВЫЕ 1 1 ИЗ РегистрСведений.АдресныеОбъекты + | ГДЕ РегистрСведений.АдресныеОбъекты.Уровень = 4 + | И РегистрСведений.АдресныеОбъекты.КодСубъектаРФ = Регионы.КодСубъектаРФ + | ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ ПЕРВЫЕ 1 1 ИЗ РегистрСведений.АдресныеОбъекты + | ГДЕ РегистрСведений.АдресныеОбъекты.Уровень = 5 + | И РегистрСведений.АдресныеОбъекты.КодСубъектаРФ = Регионы.КодСубъектаРФ + | ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ ПЕРВЫЕ 1 1 ИЗ РегистрСведений.АдресныеОбъекты + | ГДЕ РегистрСведений.АдресныеОбъекты.Уровень = 6 + | И РегистрСведений.АдресныеОбъекты.КодСубъектаРФ = Регионы.КодСубъектаРФ + | ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ ПЕРВЫЕ 1 1 ИЗ РегистрСведений.АдресныеОбъекты + | ГДЕ РегистрСведений.АдресныеОбъекты.Уровень = 7 + | И РегистрСведений.АдресныеОбъекты.КодСубъектаРФ = Регионы.КодСубъектаРФ + | ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ ПЕРВЫЕ 1 1 ИЗ РегистрСведений.АдресныеОбъекты + | ГДЕ РегистрСведений.АдресныеОбъекты.Уровень = 90 + | И РегистрСведений.АдресныеОбъекты.КодСубъектаРФ = Регионы.КодСубъектаРФ + | ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ ПЕРВЫЕ 1 1 ИЗ РегистрСведений.АдресныеОбъекты + | ГДЕ РегистрСведений.АдресныеОбъекты.Уровень = 91 + | И РегистрСведений.АдресныеОбъекты.КодСубъектаРФ = Регионы.КодСубъектаРФ)) КАК АдресныеОбъекты + | ПО (АдресныеОбъекты.КодСубъектаРФ = ВсеДоступныеРегионы.КодСубъектаРФ) + | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.АдресныеОбъекты КАК ИдентификаторыАдресныхОбъектов + | ПО (ИдентификаторыАдресныхОбъектов.КодСубъектаРФ = ВсеДоступныеРегионы.КодСубъектаРФ) + | И (ИдентификаторыАдресныхОбъектов.Уровень = 1) + | И (ИдентификаторыАдресныхОбъектов.КодОкруга = 0) + | И (ИдентификаторыАдресныхОбъектов.КодРайона = 0) + | И (ИдентификаторыАдресныхОбъектов.КодГорода = 0) + | И (ИдентификаторыАдресныхОбъектов.КодВнутригородскогоРайона = 0) + | И (ИдентификаторыАдресныхОбъектов.КодНаселенногоПункта = 0) + | И (ИдентификаторыАдресныхОбъектов.КодУлицы = 0) + | И (ИдентификаторыАдресныхОбъектов.КодДополнительногоЭлемента = 0) + | И (ИдентификаторыАдресныхОбъектов.КодПодчиненногоЭлемента = 0) + | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЗагруженныеВерсииАдресныхСведений КАК Версии + | ПО (Версии.КодСубъектаРФ = ВсеДоступныеРегионы.КодСубъектаРФ) + | ПОЛНОЕ СОЕДИНЕНИЕ Классификатор КАК Классификатор + | ПО (Классификатор.КодСубъектаРФ = ВсеДоступныеРегионы.КодСубъектаРФ) + | + |УПОРЯДОЧИТЬ ПО + | ВЫБОР + | КОГДА ВсеДоступныеРегионы.КодСубъектаРФ ЕСТЬ NULL + | ТОГДА Классификатор.КодСубъектаРФ + | ИНАЧЕ ВсеДоступныеРегионы.КодСубъектаРФ + | КОНЕЦ"); + Запрос.УстановитьПараметр("Классификатор", Классификатор); ЗагруженныеСведения = Запрос.Выполнить().Выгрузить(); @@ -6466,8 +6310,7 @@ НомерПоПорядку = НомерПоПорядку + 1; Если ОповещатьОПрогрессе Тогда - ДлительныеОперации.СообщитьПрогресс( , СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Загрузка региона ""%1 - %2"" (осталось %3) ...'"), + ДлительныеОперации.СообщитьПрогресс(, СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Загрузка региона ""%1 - %2"" (осталось %3) ...'"), СубъектРФ, АдресныйКлассификатор.НаименованиеРегионаПоКоду(СубъектРФ), Формат(ВсегоСубъектов - НомерПоПорядку, "ЧН="))); КонецЕсли; @@ -6527,6 +6370,44 @@ КонецПроцедуры +// Извлекает список домов полученного из регистра сведения описания и добавляет их в список значений +// +// Параметры: +// СтрокаСоСпискомДомов - Строка - описание списка домов из регистра сведения +// СтрокаПоиска - Строка - Строка отбора +// ВариантыДомов - Список значений - Список домов +// +Процедура ИзвлечьСписокДомов(СтрокаСоСпискомДомов, СтрокаПоиска, ВариантыДомов) + + ТипЧисло = Новый ОписаниеТипов("Число"); + СтрокаСоСпискомДомов = СтрЗаменить(СтрокаСоСпискомДомов, Символы.ПС, ""); + СтрокаСоСпискомДомов = ВРег(СтрЗаменить(СтрокаСоСпискомДомов, Символы.Таб, Символы.ПС)); + ЧислоСтрок = СтрЧислоСтрок(СтрокаСоСпискомДомов); + Позиция = 1; + + Пока Позиция <= ЧислоСтрок Цикл + Строка = СтрПолучитьСтроку(СтрокаСоСпискомДомов, Позиция); + + Если Строка = "H" Тогда + ВидВладения = ТипЧисло.ПривестиЗначение(СтрПолучитьСтроку(СтрокаСоСпискомДомов, Позиция + 1)); + НомерВладения = СокрЛП( СтрПолучитьСтроку(СтрокаСоСпискомДомов, Позиция + 2) ); + НомерКорпуса = СокрЛП( СтрПолучитьСтроку(СтрокаСоСпискомДомов, Позиция + 3) ); + ВидСтроения = ТипЧисло.ПривестиЗначение(СтрПолучитьСтроку(СтрокаСоСпискомДомов, Позиция + 4)); + НомерСтроения = СокрЛП( СтрПолучитьСтроку(СтрокаСоСпискомДомов, Позиция + 5) ); + + Если ЗначениеЗаполнено(НомерВладения) Тогда + Если СтрНачинаетсяС(НомерВладения, СтрокаПоиска) + И ВариантыДомов.НайтиПоЗначению(НомерВладения) = Неопределено Тогда + ВариантыДомов.Добавить(НомерВладения, НомерВладения); + КонецЕсли; + КонецЕсли; + Позиция = Позиция + 5; + КонецЕсли; + + Позиция = Позиция + 1; + КонецЦикла; +КонецПроцедуры + // Удаляет устаревшие данные КЛАДР. // Процедура ОчиститьУстаревшиеАдресныеСведенияКЛАДР(Параметры, АдресРезультата) Экспорт @@ -6545,7 +6426,6 @@ КонецПроцедуры - // Загрузка всех данных классификатора адресов с сайта. // // Параметры: @@ -6597,8 +6477,8 @@ ЗагруженныйФайл = ПолучениеФайловИзИнтернета.СкачатьФайлНаСервере(ОписаниеРегиона.Адрес, ПараметрыПолучения); Если Не ЗагруженныйФайл.Статус Тогда УдалитьВременныйФайл(ВременныйКаталог); - ВызватьИсключение ЗагруженныйФайл.СообщениеОбОшибке + Символы.ПС + - НСтр("ru = 'Возможные причины: + ВызватьИсключение ЗагруженныйФайл.СообщениеОбОшибке + Символы.ПС + + НСтр("ru = 'Возможные причины: |• Некорректно введен или не введен логин и пароль; |• Нет подключения к Интернету; |• На веб-узле возникли неполадки; @@ -6629,11 +6509,9 @@ Для Каждого СубъектРФ Из КодыСубъектовРФ Цикл НомерПоПорядку = НомерПоПорядку + 1; - ДлительныеОперации.СообщитьПрогресс( , СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Очистка региона ""%1 - %2"" (осталось %3) ...'"), + ДлительныеОперации.СообщитьПрогресс(, СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Очистка региона ""%1 - %2"" (осталось %3) ...'"), СубъектРФ, АдресныйКлассификатор.НаименованиеРегионаПоКоду(СубъектРФ), - Формат(ВсегоСубъектов - НомерПоПорядку, "ЧН=") - )); + Формат(ВсегоСубъектов - НомерПоПорядку, "ЧН="))); НачатьТранзакцию(); Попытка @@ -6669,15 +6547,13 @@ // Запрос обновления Адрес = ОбщегоНазначенияКлиентСервер.СтруктураURI( АдресФайлаОписанияДоступныхВерсий() ); Разрешения.Добавить( РаботаВБезопасномРежиме.РазрешениеНаИспользованиеИнтернетРесурса( - ВРег(Адрес.Схема), Адрес.Хост, Адрес.Порт, НСтр("ru = 'Проверка обновления адресного классификатора.'") - )); + ВРег(Адрес.Схема), Адрес.Хост, Адрес.Порт, НСтр("ru = 'Проверка обновления адресного классификатора.'"))); // Корневой каталог данных - используется только для получения разрешения. // Фактический адрес для загрузки считывается из файла обновлений. Адрес = ОбщегоНазначенияКлиентСервер.СтруктураURI("http://downloads.v8.1c.ru/tmplts/ITS/KLADR/"); Разрешения.Добавить( РаботаВБезопасномРежиме.РазрешениеНаИспользованиеИнтернетРесурса( - ВРег(Адрес.Схема), Адрес.Хост, Адрес.Порт, НСтр("ru = 'Загрузка данных адресного классификатора.'") - )); + ВРег(Адрес.Схема), Адрес.Хост, Адрес.Порт, НСтр("ru = 'Загрузка данных адресного классификатора.'"))); Возврат Разрешения; КонецФункции @@ -6716,14 +6592,16 @@ // * Адрес - Строка - Адрес для скачивания файла данных региона. // * ДоступноОбновление - Булево - Флаг доступности обновления для данного региона. // * Загружено - Булево - Флаг того, что данные хоть раз загружались. +// * ДатаОбновления - Дата - Дата обновления адресных сведений. // -Функция ДоступныеВерсииАдресныхСведений() Экспорт +Функция ДоступныеВерсииАдресныхСведений(АдресВоВременномХранилище = Неопределено) Экспорт Результат = Новый ТаблицаЗначений; ТипСтрока = Новый ОписаниеТипов("Строка"); ТипЧисло = Новый ОписаниеТипов("Число"); ТипБулево = Новый ОписаниеТипов("Булево"); + ТипДата = Новый ОписаниеТипов("Дата"); Колонки = Результат.Колонки; Колонки.Добавить("КодСубъектаРФ", ТипЧисло); @@ -6734,13 +6612,14 @@ Колонки.Добавить("Адрес", ТипСтрока); Колонки.Добавить("ДоступноОбновление", ТипБулево); Колонки.Добавить("Загружено", ТипБулево); + Колонки.Добавить("ДатаОбновления", ТипДата); Результат.Индексы.Добавить("КодСубъектаРФ"); АдресОписания = АдресИнтернетаВключаяПорт( АдресФайлаОписанияДоступныхВерсий() ); РезультатПолученияФайла = ПолучениеФайловИзИнтернета.СкачатьФайлНаСервере(АдресОписания.Адрес); Если Не РезультатПолученияФайла.Статус Тогда - ВызватьИсключение РезультатПолученияФайла.СообщениеОбОшибке; + Возврат Результат; КонецЕсли; // Получен zip, внутри которого xml. @@ -6759,10 +6638,11 @@ ДатаПоследнейВерсии = '00000000'; ПоследняяПубликация = Неопределено; + ДатаБДФИАС = Неопределено; Для Каждого Публикация Из ДоступныеДанные.ПолучитьСписок("Publication") Цикл Если Публикация.UpdateDate > ДатаПоследнейВерсии Тогда - ДатаПоследнейВерсии = Публикация.UpdateDate; + ДатаПоследнейВерсии = Публикация.UpdateDate - 86400; ПоследняяПубликация = Публикация; КонецЕсли; КонецЦикла; @@ -6787,17 +6667,22 @@ СтрокаРегиона.Идентификатор = Идентификатор; СтрокаРегиона.Адрес = ЗаписьРегиона.Url; СтрокаРегиона.Загружено = ТекущийСубъект <> Неопределено И ТекущийСубъект.Загружено; + СтрокаРегиона.ДатаОбновления = ДатаПоследнейВерсии; - СтрокаРегиона.ДоступноОбновление = ТекущийСубъект = Неопределено // Новый регион - Или ТекущийСубъект.ДатаВерсии < ДатаПоследнейВерсии // Обновленный регион - Или ( // Обновленные данные существующего субъекта. - ТекущийСубъект.КодСубъектаРФ <> ЗаписьРегиона.REGIONCODE - Или ТекущийСубъект.Представление <> ЗаписьРегиона.FORMALNAME - Или ТекущийСубъект.Сокращение <> ЗаписьРегиона.SHORTNAME - Или ТекущийСубъект.Индекс <> ЗаписьРегиона.POSTALCODE - ); + Если ЗначениеЗаполнено(ТекущийСубъект.ДатаВерсии) Тогда + СтрокаРегиона.ДоступноОбновление = ТекущийСубъект = Неопределено // Новый регион + Или ТекущийСубъект.ДатаВерсии < ДатаПоследнейВерсии // Обновленный регион + Или (ТекущийСубъект.КодСубъектаРФ <> ЗаписьРегиона.REGIONCODE);// Обновленные данные существующего субъекта. + КонецЕсли; КонецЦикла; + Если АдресВоВременномХранилище <> Неопределено Тогда + Ответ = Новый Структура("Отказ, Таблица"); + Ответ.Отказ = Ложь; + Ответ.Таблица = Результат; + ПоместитьВоВременноеХранилище(Ответ, АдресВоВременномХранилище); + КонецЕсли; + Возврат Результат; КонецФункции @@ -6856,10 +6741,8 @@ Представление = НСтр("ru = 'Адресный классификатор был загружен позавчера.'"); Иначе - Представление = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Адресный классификатор был загружен %1 назад.'"), ОбщегоНазначения.ИнтервалВремениСтрокой(КонецПериода, НачалоПериода) - ); - + Представление = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Адресный классификатор был загружен %1 назад.'"), + ОбщегоНазначения.ИнтервалВремениСтрокой(КонецПериода, НачалоПериода)); КонецЕсли; Результат.НеобходимоОбновление = ДнейРазницы > 30; @@ -6914,8 +6797,7 @@ |ВЫБРАТЬ | Уровень, Сокращение |ИЗ - | РегистрСведений.ИсторияАдресныхОбъектов - |"); + | РегистрСведений.ИсторияАдресныхОбъектов"); Варианты = Запрос.Выполнить().Выгрузить(); Сокращения = РегистрыСведений.УровниСокращенийАдресныхСведений.СоздатьНаборЗаписей(); @@ -7308,8 +7190,7 @@ | РегистрСведений.УдалитьАдресныйКлассификатор |ГДЕ | ТипАдресногоЭлемента = 1 - | И КодАдресногоОбъектаВКоде = &КодСубъектаРФ - |"); + | И КодАдресногоОбъектаВКоде = &КодСубъектаРФ"); Запрос.УстановитьПараметр("КодСубъектаРФ", КодСубъектаРФ); Регион = Запрос.Выполнить().Выгрузить(); @@ -7370,9 +7251,7 @@ КонецЦикла; Если ТипXDTOЗаписи = Неопределено Тогда - ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'В файле ""%1"" не найден список записей в типе %2'"), Результат.ПолноеИмя, Результат.ТипXDTO - ); + ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'В файле ""%1"" не найден список записей в типе %2'"), Результат.ПолноеИмя, Результат.ТипXDTO); КонецЕсли; Результат.Вставить("ТипXDTO", ТипXDTOЗаголовка); @@ -7401,9 +7280,7 @@ // Позиционируемся на следующий узел. ФайлЧтения.Прочитать(); Иначе - ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'В файле ""%1"" не найден корневой узел %2'"), Результат.ПолноеИмя, ИмяОписывающегоУзла - ); + ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'В файле ""%1"" не найден корневой узел %2'"), Результат.ПолноеИмя, ИмяОписывающегоУзла); КонецЕсли; Результат.Вставить("КодСубъектаРФ", КодСубъектаРФ); @@ -7542,7 +7419,7 @@ КонецЕсли; ИмяФайла = СоставАдреса.ПутьНаСервере; - ПозицияПараметра = Найти(ИмяФайла, "?"); + ПозицияПараметра = СтрНайти(ИмяФайла, "?"); Если ПозицияПараметра > 0 Тогда ИмяФайла = Лев(ИмяФайла, ПозицияПараметра - 1); КонецЕсли; @@ -7576,11 +7453,11 @@ Исключение ЗаписьЖурналаРегистрации(СобытиеЖурналаРегистрации(), УровеньЖурналаРегистрации.Предупреждение, ,, СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Не удалось удалить временный файл - |%1 - |по причине: %2'"), ПолноеИмяФайла, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()))); + |%1 по причине: %2'"), ПолноеИмяФайла, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()))); КонецПопытки КонецПроцедуры #КонецОбласти -#КонецОбласти \ No newline at end of file +#КонецОбласти + diff --git a/SSL/src/CommonModules/Анкетирование/Module.bsl b/SSL/src/CommonModules/Анкетирование/Module.bsl index 4badb97a1..bf7b2eb49 100644 --- a/SSL/src/CommonModules/Анкетирование/Module.bsl +++ b/SSL/src/CommonModules/Анкетирование/Module.bsl @@ -883,8 +883,7 @@ ТекстПодсказки = ""; Если СтрокаТаблицы.МинимальноеЗначение <> 0 И СтрокаТаблицы.МаксимальноеЗначение <> 0 Тогда ТекстПодсказки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Допустим ввод значения от %1 до %2'"), - СтрокаТаблицы.МинимальноеЗначение, - СтрокаТаблицы.МаксимальноеЗначение); + СтрокаТаблицы.МинимальноеЗначение, СтрокаТаблицы.МаксимальноеЗначение); ИначеЕсли СтрокаТаблицы.МинимальноеЗначение = 0 И СтрокаТаблицы.МаксимальноеЗначение <> 0 Тогда ТекстПодсказки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Допустим ввод значения до %1'"), СтрокаТаблицы.МаксимальноеЗначение); Иначе @@ -1026,8 +1025,8 @@ ИмяКолонки = ИмяТаблицы + "_Колонка_" + инд; - Если СтрокаТаблицы.ТипТабличногоВопроса <> Перечисления.ТипыТабличныхВопросов.ПредопределенныеОтветыВСтрокахИКолонках И - СтрокаТаблицы.ТипТабличногоВопроса <> Перечисления.ТипыТабличныхВопросов.ПредопределенныеОтветыВКолонках Тогда + Если СтрокаТаблицы.ТипТабличногоВопроса <> Перечисления.ТипыТабличныхВопросов.ПредопределенныеОтветыВСтрокахИКолонках + И СтрокаТаблицы.ТипТабличногоВопроса <> Перечисления.ТипыТабличныхВопросов.ПредопределенныеОтветыВКолонках Тогда НайденныеСтроки = Форма.ВопросыПредставлениеТипы.НайтиСтроки(Новый Структура("Вопрос",СтрокаТаблицы.СоставТабличногоВопроса[инд-1].ЭлементарныйВопрос)); Если НайденныеСтроки.Количество() > 0 Тогда РеквизитыЭлементарногоВопроса = НайденныеСтроки[0]; diff --git a/SSL/src/CommonModules/БизнесПроцессыИЗадачиВызовСервера/Module.bsl b/SSL/src/CommonModules/БизнесПроцессыИЗадачиВызовСервера/Module.bsl index 8079556a9..370cef25f 100644 --- a/SSL/src/CommonModules/БизнесПроцессыИЗадачиВызовСервера/Module.bsl +++ b/SSL/src/CommonModules/БизнесПроцессыИЗадачиВызовСервера/Module.bsl @@ -17,8 +17,7 @@ Если ТипЗнч(ЗадачаСсылка) <> Тип("ЗадачаСсылка.ЗадачаИсполнителя") Тогда - ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Неправильный тип параметра ЗадачаСсылка (передан: %1; ожидается: %2)'"), + ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Неправильный тип параметра ЗадачаСсылка (передан: %1; ожидается: %2)'"), ТипЗнч(ЗадачаСсылка), "ЗадачаСсылка.ЗадачаИсполнителя"); ВызватьИсключение ТекстСообщения; @@ -32,12 +31,8 @@ ТипБизнесПроцесса = Реквизиты.БизнесПроцесс.Метаданные(); ПараметрыФормы = БизнесПроцессы[ТипБизнесПроцесса.Имя].ФормаВыполненияЗадачи(ЗадачаСсылка, Реквизиты.ТочкаМаршрута); - ЗадачаВнешняя = Ложь; - БизнесПроцессыИЗадачиСервер.ПриОпределенииВнешнейЗадачи(ЗадачаСсылка, ЗадачаВнешняя); - Если ЗадачаВнешняя Тогда - БизнесПроцессыИЗадачиПереопределяемый.ПриПолученииФормыВыполненияЗадачи( - ТипБизнесПроцесса.Имя, ЗадачаСсылка, Реквизиты.ТочкаМаршрута, ПараметрыФормы); - КонецЕсли; + БизнесПроцессыИЗадачиПереопределяемый.ПриПолученииФормыВыполненияЗадачи( + ТипБизнесПроцесса.Имя, ЗадачаСсылка, Реквизиты.ТочкаМаршрута, ПараметрыФормы); Возврат ПараметрыФормы; @@ -320,8 +315,8 @@ ЗадачаОбъект.Заблокировать(); ЗадачаОбъект.ПринятаКИсполнению = Истина; ЗадачаОбъект.ДатаПринятияКИсполнению = ТекущаяДатаСеанса(); - Если ЗадачаОбъект.Исполнитель.Пустая() Тогда - ЗадачаОбъект.Исполнитель = Пользователи.ТекущийПользователь(); + Если НЕ ЗначениеЗаполнено(ЗадачаОбъект.Исполнитель) Тогда + ЗадачаОбъект.Исполнитель = ПользователиКлиентСервер.АвторизованныйПользователь(); КонецЕсли; ЗадачаОбъект.Записать(); @@ -364,7 +359,7 @@ ЗадачаОбъект.ДатаПринятияКИсполнению = "00010101000000"; Если Не ЗадачаОбъект.РольИсполнителя.Пустая() Тогда ЗадачаОбъект.Исполнитель = Справочники.Пользователи.ПустаяСсылка(); - КонецЕсли; + КонецЕсли; ЗадачаОбъект.Записать(); НовыйМассивЗадач.Добавить(Задача); @@ -400,13 +395,13 @@ // Процедура УведомитьИсполнителейОНовыхЗадачах() Экспорт - ОбщегоНазначения.ПриНачалеВыполненияРегламентногоЗадания(); + ОбщегоНазначения.ПриНачалеВыполненияРегламентногоЗадания(Метаданные.РегламентныеЗадания.УведомлениеИсполнителейОНовыхЗадачах); + Если Не ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаСПочтовымиСообщениями") Тогда + Возврат; + КонецЕсли; - // Получаем текущее время компьютера сервера - ТекущаяДата(). - ДатаУведомления = ТекущаяДата(); - УстановитьПривилегированныйРежим(Истина); + ДатаУведомления = ТекущаяДатаСеанса(); ДатаПоследнегоУведомления = Константы.ДатаУведомленияОНовыхЗадачах.Получить(); - УстановитьПривилегированныйРежим(Ложь); // Если оповещение ранее не производилось, или последнее оповещение происходило // ранее, чем за сутки, то отбираем новые задачи за последние сутки. @@ -417,8 +412,7 @@ ЗаписьЖурналаРегистрации(БизнесПроцессыИЗадачиСервер.СобытиеЖурналаРегистрации(), УровеньЖурналаРегистрации.Информация, , , - СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Начато регламентное уведомление о новых задачах за период %1 - %2'"), + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Начато регламентное уведомление о новых задачах за период %1 - %2'"), ДатаПоследнегоУведомления, ДатаУведомления)); ЗадачиПоИсполнителям = ВыбратьНовыеЗадачиПоИсполнителям(ДатаПоследнегоУведомления, ДатаУведомления); @@ -432,8 +426,7 @@ ЗаписьЖурналаРегистрации(БизнесПроцессыИЗадачиСервер.СобытиеЖурналаРегистрации(), УровеньЖурналаРегистрации.Информация, , , - СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Завершено регламентное уведомление о новых задачах (уведомлено исполнителей: %1)'"), + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Завершено регламентное уведомление о новых задачах (уведомлено исполнителей: %1)'"), ЗадачиПоИсполнителям.Строки.Количество())); КонецПроцедуры @@ -442,8 +435,11 @@ // Процедура ПроконтролироватьЗадачи() Экспорт - ОбщегоНазначения.ПриНачалеВыполненияРегламентногоЗадания(); - + ОбщегоНазначения.ПриНачалеВыполненияРегламентногоЗадания(Метаданные.РегламентныеЗадания.МониторингЗадач); + Если Не ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаСПочтовымиСообщениями") Тогда + Возврат; + КонецЕсли; + ПросроченныеЗадачи = ВыбратьПросроченныеЗадачи(); Если ПросроченныеЗадачи.Количество() = 0 Тогда Возврат; @@ -494,22 +490,6 @@ КонецФункции -// Устарела. Следует использовать ФормаВыполненияЗадачи. -// -// Получить структуру с описанием формы выполнения задачи. -// -// Параметры: -// ЗадачаСсылка - ЗадачаСсылка.ЗадачаИсполнителя - задача. -// -// Возвращаемое значение: -// Структура - структуру с описанием формы выполнения задачи. -// -Функция ПолучитьФормуВыполненияЗадачи(Знач ЗадачаСсылка) Экспорт - - Возврат ФормаВыполненияЗадачи(ЗадачаСсылка); - -КонецФункции - #КонецОбласти #Область СлужебныеПроцедурыИФункции @@ -544,13 +524,13 @@ ТекстЗапроса = БазовыйТекстЗапроса + " И ИсполнителиЗадач.ОсновнойОбъектАдресации = &ООА |И ИсполнителиЗадач.ДополнительныйОбъектАдресации = &ДОА"; ИначеЕсли ЗначениеЗаполнено(ООА) Тогда - ТекстЗапроса = БазовыйТекстЗапроса + - " И ИсполнителиЗадач.ОсновнойОбъектАдресации = &ООА + ТекстЗапроса = БазовыйТекстЗапроса + + " И ИсполнителиЗадач.ОсновнойОбъектАдресации = &ООА |И (ИсполнителиЗадач.ДополнительныйОбъектАдресации = ЗНАЧЕНИЕ(ПланВидовХарактеристик.ОбъектыАдресацииЗадач.ПустаяСсылка) | ИЛИ ИсполнителиЗадач.ДополнительныйОбъектАдресации = Неопределено)"; Иначе - ТекстЗапроса = БазовыйТекстЗапроса + - " И (ИсполнителиЗадач.ОсновнойОбъектАдресации = ЗНАЧЕНИЕ(ПланВидовХарактеристик.ОбъектыАдресацииЗадач.ПустаяСсылка) + ТекстЗапроса = БазовыйТекстЗапроса + + " И (ИсполнителиЗадач.ОсновнойОбъектАдресации = ЗНАЧЕНИЕ(ПланВидовХарактеристик.ОбъектыАдресацииЗадач.ПустаяСсылка) | ИЛИ ИсполнителиЗадач.ОсновнойОбъектАдресации = Неопределено) |И (ИсполнителиЗадач.ДополнительныйОбъектАдресации = ЗНАЧЕНИЕ(ПланВидовХарактеристик.ОбъектыАдресацииЗадач.ПустаяСсылка) | ИЛИ ИсполнителиЗадач.ДополнительныйОбъектАдресации = Неопределено)"; @@ -686,6 +666,16 @@ Запрос.УстановитьПараметр("Дата", СрокИсполнения); ПросроченныеЗадачи = Запрос.Выполнить().Выгрузить(); + + Индекс = ПросроченныеЗадачи.Количество() - 1; + Пока Индекс > 0 Цикл + ПросроченнаяЗадача = ПросроченныеЗадачи[Индекс]; + Если ПросроченнаяЗадача.Исполнитель = Неопределено И ЭтоВедущаяЗадача(ПросроченнаяЗадача.Ссылка) Тогда + ПросроченныеЗадачи.Удалить(ПросроченнаяЗадача); + КонецЕсли; + Индекс = Индекс - 1; + КонецЦикла; + Возврат ПросроченныеЗадачи; КонецФункции @@ -741,8 +731,7 @@ Процедура ОтправитьУведомлениеОПросроченныхЗадачах(ПисьмоИзНабора) Если ПустаяСтрока(ПисьмоИзНабора.ПочтовыйАдрес) Тогда - ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Уведомление не было отправлено, так как у пользователя %1 не задан адрес электронной почты.'"), + ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Уведомление не было отправлено, так как у пользователя %1 не задан адрес электронной почты.'"), ПисьмоИзНабора.Получатель); ЗаписьЖурналаРегистрации(НСтр("ru = 'Бизнес-процессы и задачи.Уведомление о просроченных задачах'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), @@ -753,49 +742,43 @@ ПараметрыПисьма = Новый Структура; ПараметрыПисьма.Вставить("Кому", ПисьмоИзНабора.ПочтовыйАдрес); Если ПисьмоИзНабора.ТипПисьма = "Исполнителю" Тогда - ТекстТелаПисьма = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Не выполненные в срок задачи: - | - |%1'"), ПисьмоИзНабора.ТекстПисьма); + ТекстТелаПисьма = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Не выполненные в срок задачи: + | + |%1'"), ПисьмоИзНабора.ТекстПисьма); ПараметрыПисьма.Вставить("Тело", ТекстТелаПисьма); - ТекстТемыПисьма = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Не выполненные в срок задачи (%1)'"), + ТекстТемыПисьма = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Не выполненные в срок задачи (%1)'"), Строка(ПисьмоИзНабора.КоличествоЗадач )); ПараметрыПисьма.Вставить("Тема", ТекстТемыПисьма); ИначеЕсли ПисьмоИзНабора.ТипПисьма = "Автору" Тогда - ТекстТелаПисьма = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'По введенным задачам прошел крайний срок: - | - |%1'"), ПисьмоИзНабора.ТекстПисьма); + ТекстТелаПисьма = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'По введенным задачам прошел крайний срок: + | + |%1'"), ПисьмоИзНабора.ТекстПисьма); ПараметрыПисьма.Вставить("Тело", ТекстТелаПисьма); - ТекстТемыПисьма = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'По задачам истек контрольный срок (%1)'"), + ТекстТемыПисьма = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'По задачам истек контрольный срок (%1)'"), Строка(ПисьмоИзНабора.КоличествоЗадач)); ПараметрыПисьма.Вставить("Тема", ТекстТемыПисьма); ИначеЕсли ПисьмоИзНабора.ТипПисьма = "Координатору" Тогда - ТекстТелаПисьма = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Прошел крайний срок по задачам: - | - |%1'"), ПисьмоИзНабора.ТекстПисьма); + ТекстТелаПисьма = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Прошел крайний срок по задачам: + | + |%1'"), ПисьмоИзНабора.ТекстПисьма); ПараметрыПисьма.Вставить("Тело", ТекстТелаПисьма); - ТекстТемыПисьма = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Истек контрольный срок задач (%1)'"), + ТекстТемыПисьма = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Истек контрольный срок задач (%1)'"), Строка(ПисьмоИзНабора.КоличествоЗадач)); ПараметрыПисьма.Вставить("Тема", ТекстТемыПисьма); КонецЕсли; ТекстСообщения = ""; + МодульРаботаСПочтовымиСообщениями = ОбщегоНазначения.ОбщийМодуль("РаботаСПочтовымиСообщениями"); Попытка - РаботаСПочтовымиСообщениями.ОтправитьПочтовоеСообщение( - РаботаСПочтовымиСообщениями.СистемнаяУчетнаяЗапись(), ПараметрыПисьма); + МодульРаботаСПочтовымиСообщениями.ОтправитьПочтовоеСообщение( + МодульРаботаСПочтовымиСообщениями.СистемнаяУчетнаяЗапись(), ПараметрыПисьма); Исключение ОписаниеОшибки = ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); - ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Ошибка при отправке уведомления о просроченных задачах: %1.'"), + ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Ошибка при отправке уведомления о просроченных задачах: %1.'"), ОписаниеОшибки); УровеньВажностиСобытия = УровеньЖурналаРегистрации.Ошибка; КонецПопытки; @@ -807,9 +790,7 @@ ПараметрыПисьма.Кому[0].Представление + " <" + ПараметрыПисьма.Кому[0].Адрес + ">"); КонецЕсли; - ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Уведомление о просроченных задачах успешно отправлено на адрес %1.'"), Кому); - + ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Уведомление о просроченных задачах успешно отправлено на адрес %1.'"), Кому); УровеньВажностиСобытия = УровеньЖурналаРегистрации.Информация; КонецЕсли; @@ -828,15 +809,9 @@ ЗадачаОбъект.Исполнитель = Ответственный; ЗадачаОбъект.Предмет = ЗадачаСсылка; - ЗадачаОбъект.Описание = - СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Задача не может быть исполнена, так как у роли не задано ни одного исполнителя: - |%1'"), Строка(ЗадачаСсылка)); - - ЗадачаОбъект.Наименование = - СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Назначить исполнителей: задача не может быть исполнена %1'"), Строка(ЗадачаСсылка)); - + ЗадачаОбъект.Описание = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Задача не может быть исполнена, так как у роли не задано ни одного исполнителя: + |%1'"), Строка(ЗадачаСсылка)); + ЗадачаОбъект.Наименование = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Назначить исполнителей: задача не может быть исполнена %1'"), Строка(ЗадачаСсылка)); ЗадачаОбъект.Записать(); КонецЦикла; @@ -898,8 +873,7 @@ ЗаписьЖурналаРегистрации(НСтр("ru = 'Бизнес-процессы и задачи.Уведомление о новых задачах'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), УровеньЖурналаРегистрации.Информация,,, - СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Уведомление не отправлено, так как не указан почтовый адрес у пользователя %1.'"), Строка(Исполнитель))); + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Уведомление не отправлено, так как не указан почтовый адрес у пользователя %1.'"), Строка(Исполнитель))); Возврат Ложь; КонецЕсли; @@ -907,23 +881,22 @@ Для Каждого Задача Из ЗадачиПоИсполнителю.Строки Цикл ТекстПисьма = ТекстПисьма + СформироватьПредставлениеЗадачи(Задача); КонецЦикла; - ТемаПисьма = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Направлены задачи - %1'"), Метаданные.КраткаяИнформация); + ТемаПисьма = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Направлены задачи - %1'"), Метаданные.КраткаяИнформация); ПараметрыПисьма = Новый Структура; ПараметрыПисьма.Вставить("Тема", ТемаПисьма); ПараметрыПисьма.Вставить("Тело", ТекстПисьма); ПараметрыПисьма.Вставить("Кому", ПочтовыйАдресПолучателя); + МодульРаботаСПочтовымиСообщениями = ОбщегоНазначения.ОбщийМодуль("РаботаСПочтовымиСообщениями"); Попытка - РаботаСПочтовымиСообщениями.ОтправитьПочтовоеСообщение( - РаботаСПочтовымиСообщениями.СистемнаяУчетнаяЗапись(), ПараметрыПисьма); + МодульРаботаСПочтовымиСообщениями.ОтправитьПочтовоеСообщение( + МодульРаботаСПочтовымиСообщениями.СистемнаяУчетнаяЗапись(), ПараметрыПисьма); Исключение ЗаписьЖурналаРегистрации(НСтр("ru = 'Бизнес-процессы и задачи.Уведомление о новых задачах'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), УровеньЖурналаРегистрации.Ошибка,,, - СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Ошибка при отправке уведомления о новых задачах: %1'"), + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Ошибка при отправке уведомления о новых задачах: %1'"), ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()))); Возврат Ложь; КонецПопытки; @@ -931,44 +904,37 @@ ЗаписьЖурналаРегистрации(НСтр("ru = 'Бизнес-процессы и задачи.Уведомление о новых задачах'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), УровеньЖурналаРегистрации.Информация,,, - СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Уведомления успешно отправлены на адрес %1.'"), ПочтовыйАдресПолучателя)); + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Уведомления успешно отправлены на адрес %1.'"), ПочтовыйАдресПолучателя)); Возврат Истина; КонецФункции Функция СформироватьПредставлениеЗадачи(ЗадачаСтруктура) - ШаблонСтроки = - НСтр("ru = '%1 + Результат = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = '%1 | - |Крайний срок: %2'") + Символы.ПС; + |Крайний срок: %2'") + Символы.ПС, + ЗадачаСтруктура.Ссылка, + Формат(ЗадачаСтруктура.СрокИсполнения, "ДЛФ=DD; ДП='не указан'")); Если ЗначениеЗаполнено(ЗадачаСтруктура.Исполнитель) Тогда - ШаблонСтроки = ШаблонСтроки + НСтр("ru = 'Исполнитель: %3'") + Символы.ПС; + Результат = Результат + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Исполнитель: %3'"), ЗадачаСтруктура.Исполнитель) + Символы.ПС; КонецЕсли; Если ЗначениеЗаполнено(ЗадачаСтруктура.РольИсполнителя) Тогда - ШаблонСтроки = ШаблонСтроки + НСтр("ru = 'Роль: %4'") + Символы.ПС; + Результат = Результат + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Роль: %4'"), ЗадачаСтруктура.РольИсполнителя) + Символы.ПС; КонецЕсли; Если ЗначениеЗаполнено(ЗадачаСтруктура.ОсновнойОбъектАдресации) Тогда - ШаблонСтроки = ШаблонСтроки + НСтр("ru = 'Основной объект адресации: %5'") + Символы.ПС; + Результат = Результат + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Основной объект адресации: %5'"), ЗадачаСтруктура.ОсновнойОбъектАдресации) + Символы.ПС; КонецЕсли; Если ЗначениеЗаполнено(ЗадачаСтруктура.ДополнительныйОбъектАдресации) Тогда - ШаблонСтроки = ШаблонСтроки + НСтр("ru = 'Доп. объект адресации: %6'") + Символы.ПС; + Результат = Результат + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Доп. объект адресации: %6'"), ЗадачаСтруктура.ДополнительныйОбъектАдресации) + Символы.ПС; КонецЕсли; Если ЗначениеЗаполнено(ЗадачаСтруктура.Автор) Тогда - ШаблонСтроки = ШаблонСтроки + НСтр("ru = 'Автор: %7'") + Символы.ПС; + Результат = Результат + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Автор: %7'"), ЗадачаСтруктура.Автор) + Символы.ПС; КонецЕсли; Если ЗначениеЗаполнено(ЗадачаСтруктура.Описание) Тогда - ШаблонСтроки = ШаблонСтроки + Символы.ПС + НСтр("ru = '%8'") + Символы.ПС; + Результат = Результат + Символы.ПС + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = '%8'"), ЗадачаСтруктура.Описание) + Символы.ПС; КонецЕсли; - ШаблонСтроки = ШаблонСтроки + Символы.ПС; - - Возврат СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонСтроки, - ЗадачаСтруктура.Ссылка, - Формат(ЗадачаСтруктура.СрокИсполнения, "ДЛФ=DD; ДП='не указан'"), ЗадачаСтруктура.Исполнитель, - ЗадачаСтруктура.РольИсполнителя, ЗадачаСтруктура.ОсновнойОбъектАдресации, - ЗадачаСтруктура.ДополнительныйОбъектАдресации, ЗадачаСтруктура.Автор, - ЗадачаСтруктура.Описание); + Возврат Результат + Символы.ПС; КонецФункции diff --git a/SSL/src/CommonModules/БизнесПроцессыИЗадачиКлиент/Module.bsl b/SSL/src/CommonModules/БизнесПроцессыИЗадачиКлиент/Module.bsl index 2098a1d5d..5ebdff51c 100644 --- a/SSL/src/CommonModules/БизнесПроцессыИЗадачиКлиент/Module.bsl +++ b/SSL/src/CommonModules/БизнесПроцессыИЗадачиКлиент/Module.bsl @@ -186,10 +186,10 @@ // ДатаПринятияКИсполнению устанавливается пустой - она будет проинициализирована // текущей датой сеанса перед записью самой задачи. Форма.Объект.ДатаПринятияКИсполнению = Дата('00010101'); - Если Форма.Объект.Исполнитель.Пустая() Тогда + Если НЕ ЗначениеЗаполнено(Форма.Объект.Исполнитель) Тогда Форма.Объект.Исполнитель = ТекущийПользователь; - КонецЕсли; - + КонецЕсли; + Форма.Записать(); Состояние(НСтр("ru = 'Задача принята к исполнению.'")); ОбновитьДоступностьКомандПринятияКИсполнению(Форма); @@ -404,55 +404,6 @@ КонецФункции -// Устарела. Более не требуется. -// -// Стандартный обработчик Выбор для списков задач. -// Для вызова из обработчика события таблицы формы Выбор. -// -// Параметры: -// аналогичны параметрам обработчика таблицы формы Выбор. -// -Процедура СписокЗадачВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка) Экспорт - -КонецПроцедуры - -// Устарела. Более не требуется. -// -// Стандартный обработчик ПередНачаломИзменения для списков задач. -// Для вызова из обработчика события таблицы формы ПередНачаломИзменения. -// -// Параметры: -// аналогичны параметрам обработчика таблицы формы ПередНачаломИзменения. -// -Процедура СписокЗадачПередНачаломИзменения(Элемент, Отказ) Экспорт - -КонецПроцедуры - -// Устарела. Более не требуется. -// Вместо нее следует вызывать. -// -// ПоказатьЗначение(, ЗадачаСсылка); -// -// Открыть форму выполнения задачи, которую предоставляет бизнес-процесс. -// -// Параметры: -// ЗадачаСсылка - ЗадачаИсполнителяСсылка - задача. -// -// Возвращаемое значение: -// Булево - Истина, если форма выполнения задачи была найдена и открыта. -// -Функция ОткрытьФормуВыполненияЗадачи(Знач ЗадачаСсылка) Экспорт - - ПараметрыФормы = БизнесПроцессыИЗадачиВызовСервера.ФормаВыполненияЗадачи(ЗадачаСсылка); - ИмяФормыВыполненияЗадачи = ""; - Результат = ПараметрыФормы.Свойство("ИмяФормы", ИмяФормыВыполненияЗадачи); - Если Результат Тогда - ОткрытьФорму(ИмяФормыВыполненияЗадачи, ПараметрыФормы.ПараметрыФормы); - КонецЕсли; - Возврат Результат; - -КонецФункции - #КонецОбласти #Область СлужебныеПроцедурыИФункции @@ -520,13 +471,6 @@ Возврат; КонецЕсли; - // Для обратной совместимости. - Отказ = БизнесПроцессыИЗадачиКлиентПереопределяемый.ВыбратьИсполнителя(ЭлементИсполнитель, РеквизитИсполнитель, - ТолькоПростыеРоли, БезВнешнихРолей); - Если Отказ = Истина Тогда - Возврат; - КонецЕсли; - ПараметрыФормы = Новый Структура("Исполнитель, ТолькоПростыеРоли, БезВнешнихРолей", РеквизитИсполнитель, ТолькоПростыеРоли, БезВнешнихРолей); ОткрытьФорму("ОбщаяФорма.ВыборИсполнителяБизнесПроцесса", ПараметрыФормы, ЭлементИсполнитель); diff --git a/SSL/src/CommonModules/БизнесПроцессыИЗадачиКлиентПереопределяемый/Module.bsl b/SSL/src/CommonModules/БизнесПроцессыИЗадачиКлиентПереопределяемый/Module.bsl index 9553a43b5..b4fe8dfd3 100644 --- a/SSL/src/CommonModules/БизнесПроцессыИЗадачиКлиентПереопределяемый/Module.bsl +++ b/SSL/src/CommonModules/БизнесПроцессыИЗадачиКлиентПереопределяемый/Module.bsl @@ -25,38 +25,4 @@ КонецПроцедуры -// Заполняет список узлов планов обмена - доступных информационных баз, -// в которых могут быть определены внешние роли. -// -// Параметры: -// ПланыОбменаДляВыбора - Массив - список узлов планов обмена. -// Если оставить незаполненным, то будут доступны все узлы всех планов обменов, -// предусмотренных в конфигурации. -// -Процедура ЗаполнитьМассивПлановОбмена(ПланыОбменаДляВыбора) Экспорт - -КонецПроцедуры - -// Устарела. Следует использовать ПриВыбореИсполнителя. -// Открывает форму выбора исполнителя. -// -// Параметры: -// ЭлементИсполнитель - элемент формы, в которой выполняется выбора исполнителя, -// который будет указан как владелец формы выбора исполнителя. -// РеквизитИсполнитель - выбранное ранее значение исполнителя. -// Используется для установки текущей строки в форме выбора исполнителя. -// ТолькоПростыеРоли - Булево, если Истина, то указывает что для выбора нужно -// использовать только роли без объектов адресации. -// БезВнешнихРолей - Булево, если Истина, то указывает, что для выбора надо -// использовать только роли, у которых не установлен признак ВнешняяРоль. -// -// Возвращаемое значение: -// Булево - если Истина, то не требуется выводить форму выбора исполнителя по умолчанию. -// -Функция ВыбратьИсполнителя(ЭлементИсполнитель, РеквизитИсполнитель, ТолькоПростыеРоли, БезВнешнихРолей) Экспорт - - Возврат Ложь; - -КонецФункции - #КонецОбласти diff --git a/SSL/src/CommonModules/БизнесПроцессыИЗадачиПереопределяемый/Module.bsl b/SSL/src/CommonModules/БизнесПроцессыИЗадачиПереопределяемый/Module.bsl index e7daa6126..e8a18b666 100644 --- a/SSL/src/CommonModules/БизнесПроцессыИЗадачиПереопределяемый/Module.bsl +++ b/SSL/src/CommonModules/БизнесПроцессыИЗадачиПереопределяемый/Module.bsl @@ -39,7 +39,7 @@ КонецПроцедуры -// Вызывается для заполнения параметров формы внешней задачи. +// Вызывается для заполнения параметров формы задачи. // // Параметры: // ИмяБизнесПроцесса - Строка - название бизнес-процесса. @@ -80,29 +80,4 @@ КонецПроцедуры -// Устарела. Следует использовать ПриПроверкеПравНаОстановкуБизнесПроцесса. -// Вызывается для проверки прав на остановку и продолжение бизнес-процесса. -// -// Параметры: -// БизнесПроцесс - Ссылка на бизнес-процесс. -// -Функция ЕстьПраваНаОстановкуБизнесПроцесса(БизнесПроцесс) Экспорт - - Возврат Неопределено; - -КонецФункции - -// Устарела. Следует использовать ПриЗаполненииГлавнойЗадачиБизнесПроцесса. -// Вызывается для заполнения реквизита ГлавнаяЗадача из данных заполнения. -// Параметры: -// -// БизнесПроцессОбъект - бизнес-процесс. -// ДанныеЗаполнения - данные заполнения, которые передаются в обработчик заполнения. -// -Функция ЗаполнитьГлавнуюЗадачу(БизнесПроцессОбъект, ДанныеЗаполнения) Экспорт - - Возврат Ложь; - -КонецФункции - #КонецОбласти diff --git a/SSL/src/CommonModules/БизнесПроцессыИЗадачиСервер/Module.bsl b/SSL/src/CommonModules/БизнесПроцессыИЗадачиСервер/Module.bsl index 1a5a20869..17be7bd6a 100644 --- a/SSL/src/CommonModules/БизнесПроцессыИЗадачиСервер/Module.bsl +++ b/SSL/src/CommonModules/БизнесПроцессыИЗадачиСервер/Module.bsl @@ -19,8 +19,10 @@ ФормаЗадачи.ТолькоПросмотр = ЗадачаОбъект.Выполнена; - ЭлементГруппаСостояние.Видимость = ЗадачаОбъект.Выполнена; Если ЗадачаОбъект.Выполнена Тогда + Если ЭлементГруппаСостояние <> Неопределено Тогда + ЭлементГруппаСостояние.Видимость = Истина; + КонецЕсли; Родитель = ?(ЭлементГруппаСостояние <> Неопределено, ЭлементГруппаСостояние, ФормаЗадачи); Элемент = ФормаЗадачи.Элементы.Найти("__СостояниеЗадачиКартинка"); Если Элемент = Неопределено Тогда @@ -40,15 +42,16 @@ ИспользоватьДатуИВремяВСрокахЗадач = ПолучитьФункциональнуюОпцию("ИспользоватьДатуИВремяВСрокахЗадач"); ДатаИсполненияСтрокой = ?(ИспользоватьДатуИВремяВСрокахЗадач, Формат(ЗадачаОбъект.ДатаИсполнения, "ДЛФ=DT"), Формат(ЗадачаОбъект.ДатаИсполнения, "ДЛФ=D")); - Элемент.Заголовок = - СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru ='Задача выполнена %1 пользователем %2.'"), - ДатаИсполненияСтрокой, - ИсполнительСтрокой(ЗадачаОбъект.Исполнитель, ЗадачаОбъект.РольИсполнителя, - ЗадачаОбъект.ОсновнойОбъектАдресации, ЗадачаОбъект.ДополнительныйОбъектАдресации)); + Элемент.Заголовок = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru ='Задача выполнена %1 пользователем %2.'"), + ДатаИсполненияСтрокой, + ИсполнительСтрокой(ЗадачаОбъект.Исполнитель, ЗадачаОбъект.РольИсполнителя, + ЗадачаОбъект.ОсновнойОбъектАдресации, ЗадачаОбъект.ДополнительныйОбъектАдресации)); КонецЕсли; Если БизнесПроцессыИЗадачиВызовСервера.ЭтоВедущаяЗадача(ЗадачаОбъект.Ссылка) Тогда + Если ЭлементГруппаСостояние <> Неопределено Тогда + ЭлементГруппаСостояние.Видимость = Истина; + КонецЕсли; Родитель = ?(ЭлементГруппаСостояние <> Неопределено, ЭлементГруппаСостояние, ФормаЗадачи); Элемент = ФормаЗадачи.Элементы.Найти("__ВедущаяЗадачаКартинка"); Если Элемент = Неопределено Тогда @@ -63,7 +66,7 @@ Если Элемент = Неопределено Тогда Элемент = ФормаЗадачи.Элементы.Добавить("__ВедущаяЗадача", Тип("ДекорацияФормы"), Родитель); Элемент.Вид = ВидДекорацииФормы.Надпись; - Элемент.Заголовок = НСтр("ru ='Это ведущая задача для вложенных бизнес-процессов.'"); + Элемент.Заголовок = НСтр("ru ='Это ведущая задача для вложенных бизнес-процессов. Она будет выполнена автоматически при их завершении.'"); Элемент.Высота = 0; // автовысота КонецЕсли; КонецЕсли; @@ -192,7 +195,7 @@ ЭлементОтбораДанных.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Наименование"); ЭлементОтбораДанных.ВидСравнения = ВидСравненияКомпоновкиДанных.НеЗаполнено; - ЭлементУсловногоОформления.Оформление.УстановитьЗначениеПараметра("ЦветТекста", ЦветаСтиля.НедоступныеДанныеЦвет); + ЭлементУсловногоОформления.Оформление.УстановитьЗначениеПараметра("ЦветТекста", ЦветаСтиля.ТекстЗапрещеннойЯчейкиЦвет); ЭлементУсловногоОформления.Оформление.УстановитьЗначениеПараметра("Текст", НСтр("ru = 'Без описания'")); // Завершенный бизнес-процесс @@ -222,7 +225,7 @@ Функция ИсполнительСтрокой(Знач Исполнитель, Знач РольИсполнителя, Знач ОсновнойОбъектАдресации = Неопределено, Знач ДополнительныйОбъектАдресации = Неопределено) Экспорт - Если НЕ Исполнитель.Пустая() Тогда + Если ЗначениеЗаполнено(Исполнитель) Тогда Возврат Строка(Исполнитель) ИначеЕсли НЕ РольИсполнителя.Пустая() Тогда Возврат РольСтрокой(РольИсполнителя, ОсновнойОбъектАдресации, ДополнительныйОбъектАдресации); @@ -254,7 +257,7 @@ КонецЕсли; Возврат Результат; КонецЕсли; - Возврат НСтр("ru = 'Не указана'"); + Возврат ""; КонецФункции @@ -401,7 +404,8 @@ |ИЗ | %2 КАК %1 |ГДЕ - | %1.ГлавнаяЗадача = &ГлавнаяЗадача", МетаданныеБизнесПроцесса.Имя, МетаданныеБизнесПроцесса.ПолноеИмя()); + | %1.ГлавнаяЗадача = &ГлавнаяЗадача", + МетаданныеБизнесПроцесса.Имя, МетаданныеБизнесПроцесса.ПолноеИмя()); Запрос = Новый Запрос(ТекстЗапроса); Запрос.УстановитьПараметр("ГлавнаяЗадача", ЗадачаСсылка); @@ -527,6 +531,191 @@ КонецПроцедуры +// Заполняет реквизит ГлавнаяЗадача при создании бизнес-процесса +// на основании другого бизнес-процесса. +// +Процедура ЗаполнитьГлавнуюЗадачу(БизнесПроцессОбъект, ДанныеЗаполнения) Экспорт + + СтандартнаяОбработка = Истина; + БизнесПроцессыИЗадачиПереопределяемый.ПриЗаполненииГлавнойЗадачиБизнесПроцесса(БизнесПроцессОбъект, ДанныеЗаполнения, СтандартнаяОбработка); + Если Не СтандартнаяОбработка Тогда + Возврат; + КонецЕсли; + + Если ДанныеЗаполнения = Неопределено Тогда + Возврат; + КонецЕсли; + + Если ТипЗнч(ДанныеЗаполнения) = Тип("ЗадачаСсылка.ЗадачаИсполнителя") Тогда + БизнесПроцессОбъект.ГлавнаяЗадача = ДанныеЗаполнения; + КонецЕсли; + +КонецПроцедуры + +// Получить группу исполнителей задач, которая соответствует реквизитам адресации. +// Если группа еще не существует, то создается и возвращается новая. +// +// Параметры: +// РольИсполнителя - СправочникСсылка.РолиИсполнителей +// ОсновнойОбъектАдресации - ЛюбаяСсылка +// ДополнительныйОбъектАдресации - ЛюбаяСсылка +// +// Возвращаемое значение: +// СправочникСсылка.ГруппыИсполнителейЗадач +// +Функция ГруппаИсполнителейЗадач(РольИсполнителя, ОсновнойОбъектАдресации, ДополнительныйОбъектАдресации) Экспорт + + НачатьТранзакцию(); + Попытка + Блокировка = Новый БлокировкаДанных; + ЭлементБлокировки = Блокировка.Добавить("Справочник.ГруппыИсполнителейЗадач"); + ЭлементБлокировки.УстановитьЗначение("РольИсполнителя", РольИсполнителя); + ЭлементБлокировки.УстановитьЗначение("ОсновнойОбъектАдресации", ОсновнойОбъектАдресации); + ЭлементБлокировки.УстановитьЗначение("ДополнительныйОбъектАдресации", ДополнительныйОбъектАдресации); + Блокировка.Заблокировать(); + + Запрос = Новый Запрос( + "ВЫБРАТЬ + | ГруппыИсполнителейЗадач.Ссылка КАК Ссылка + |ИЗ + | Справочник.ГруппыИсполнителейЗадач КАК ГруппыИсполнителейЗадач + |ГДЕ + | ГруппыИсполнителейЗадач.РольИсполнителя = &РольИсполнителя + | И ГруппыИсполнителейЗадач.ОсновнойОбъектАдресации = &ОсновнойОбъектАдресации + | И ГруппыИсполнителейЗадач.ДополнительныйОбъектАдресации = &ДополнительныйОбъектАдресации"); + Запрос.УстановитьПараметр("РольИсполнителя", РольИсполнителя); + Запрос.УстановитьПараметр("ОсновнойОбъектАдресации", ОсновнойОбъектАдресации); + Запрос.УстановитьПараметр("ДополнительныйОбъектАдресации", ДополнительныйОбъектАдресации); + Выборка = Запрос.Выполнить().Выбрать(); + Если Выборка.Следующий() Тогда + ГруппаИсполнителей = Выборка.Ссылка; + Иначе + // Требуется добавить новую группу исполнителей задач. + ГруппаИсполнителейОбъект = Справочники.ГруппыИсполнителейЗадач.СоздатьЭлемент(); + ГруппаИсполнителейОбъект.РольИсполнителя = РольИсполнителя; + ГруппаИсполнителейОбъект.ОсновнойОбъектАдресации = ОсновнойОбъектАдресации; + ГруппаИсполнителейОбъект.ДополнительныйОбъектАдресации = ДополнительныйОбъектАдресации; + ГруппаИсполнителейОбъект.Записать(); + ГруппаИсполнителей = ГруппаИсполнителейОбъект.Ссылка; + КонецЕсли; + ЗафиксироватьТранзакцию(); + Возврат ГруппаИсполнителей; + Исключение + ОтменитьТранзакцию(); + ВызватьИсключение; + КонецПопытки; + +КонецФункции + +//////////////////////////////////////////////////////////////////////////////// +// Обновление информационной базы. + +// Подготовить первую порцию объектов для отложенной обработки прав доступа. +// Для вызова из отложенных обработчиков обновления при изменении логики формирования наборов значений доступа. +// +// Параметры: +// Параметры - Структура - структура параметров отложенного обработчика обновления. +// БизнесПроцесс - ОбъектМетаданных: БизнесПроцесс - метаданные бизнес-процесса, наборы значений доступа +// которого требуется обновить. +// ИмяПроцедуры - Строка - имя процедуры отложенного обработчика обновления для журнала регистрации. +// РазмерПорции - Число - количество объектов, обрабатываемых за один вызов. +// +Процедура НачатьОбновлениеПорцииНаборовЗначенийДоступа(Параметры, БизнесПроцесс, ИмяПроцедуры, РазмерПорции = 1000) Экспорт + + Если Параметры.ПрогрессВыполнения.ВсегоОбъектов = 0 Тогда + Запрос = Новый Запрос; + Запрос.Текст = + "ВЫБРАТЬ + | КОЛИЧЕСТВО(ТаблицаСНаборамиЗначенийДоступа.Ссылка) КАК Количество, + | МАКСИМУМ(ТаблицаСНаборамиЗначенийДоступа.Дата) КАК Дата + |ИЗ + | %1 КАК ТаблицаСНаборамиЗначенийДоступа"; + + Запрос.Текст = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(Запрос.Текст, БизнесПроцесс.ПолноеИмя()); + РезультатЗапроса = Запрос.Выполнить().Выгрузить(); + Параметры.ПрогрессВыполнения.ВсегоОбъектов = РезультатЗапроса[0].Количество; + + Если Не Параметры.Свойство("НачальнаяДатаКОбработке") Тогда + Параметры.Вставить("НачальнаяДатаКОбработке", РезультатЗапроса[0].Дата); + КонецЕсли; + + КонецЕсли; + + Если Не Параметры.Свойство("ПроблемныеОбъекты") Тогда + Параметры.Вставить("ПроблемныеОбъекты", Новый Массив); + КонецЕсли; + + Запрос = Новый Запрос; + Запрос.Текст = + "ВЫБРАТЬ ПЕРВЫЕ %1 + | ТаблицаСНаборамиЗначенийДоступа.Ссылка КАК Ссылка, + | ТаблицаСНаборамиЗначенийДоступа.Дата КАК Дата + |ИЗ + | %2 КАК ТаблицаСНаборамиЗначенийДоступа + |ГДЕ ТаблицаСНаборамиЗначенийДоступа.Дата <= &НачальнаяДатаКОбработке + |УПОРЯДОЧИТЬ ПО + | Дата УБЫВ"; + + Запрос.Текст = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(Запрос.Текст, Формат(РазмерПорции, "ЧГ=0"), БизнесПроцесс.ПолноеИмя()); + Запрос.УстановитьПараметр("НачальнаяДатаКОбработке", Параметры.НачальнаяДатаКОбработке); + + РезультатЗапроса = Запрос.Выполнить().Выгрузить(); + ОбъектыКОбработке = РезультатЗапроса.ВыгрузитьКолонку("Ссылка"); + Параметры.Вставить("ОбъектыКОбработке", ОбъектыКОбработке); + + ОбщегоНазначенияКлиентСервер.ДополнитьМассив(Параметры.ОбъектыКОбработке, Параметры.ПроблемныеОбъекты); + Параметры.ПроблемныеОбъекты.Очистить(); + + Параметры.ОбработкаЗавершена = ОбъектыКОбработке.Количество() = 0 + Или (ОбъектыКОбработке.Количество() = 1 И РезультатЗапроса[0].Дата = Параметры.НачальнаяДатаКОбработке); + Если Не Параметры.ОбработкаЗавершена Тогда + + Если Не Параметры.Свойство("БизнесПроцесс") Тогда + Параметры.Вставить("БизнесПроцесс", БизнесПроцесс); + КонецЕсли; + + Если Не Параметры.Свойство("ОбъектовОбработано") Тогда + Параметры.Вставить("ОбъектовОбработано", 0); + КонецЕсли; + + Если Не Параметры.Свойство("ИмяПроцедуры") Тогда + Параметры.Вставить("ИмяПроцедуры", ИмяПроцедуры); + КонецЕсли; + + Параметры.НачальнаяДатаКОбработке = РезультатЗапроса[РезультатЗапроса.Количество() - 1].Дата; + КонецЕсли; + +КонецПроцедуры + +// Завершить обработку первой порции объектов для отложенной обработки прав доступа. +// Для вызова из отложенных обработчиков обновления при изменении логики формирования наборов значений доступа. +// +// Параметры: +// Параметры - Структура - структура параметров отложенного обработчика обновления. +// +Процедура ЗавершитьОбновлениеПорцииНаборовЗначенийДоступа(Параметры) Экспорт + + Параметры.ПрогрессВыполнения.ОбработаноОбъектов = Параметры.ПрогрессВыполнения.ОбработаноОбъектов + Параметры.ОбъектовОбработано; + Если Параметры.ОбъектовОбработано = 0 Тогда + ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Процедуре ""%1"" не удалось обновить права доступа для некоторых объектов (пропущены): %1'"), + Параметры.ИмяПроцедуры, Параметры.ПроблемныеОбъекты.Количество()); + ВызватьИсключение ТекстСообщения; + КонецЕсли; + + ЗаписьЖурналаРегистрации(ОбновлениеИнформационнойБазы.СобытиеЖурналаРегистрации(), УровеньЖурналаРегистрации.Информация, + Параметры.БизнесПроцесс,, + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Процедура ""%1"" обновила права доступа для очередной порции объектов: %2'"), + Параметры.ИмяПроцедуры, Параметры.ОбъектовОбработано)); + + // Очистка временных параметров, которые не нужно сохранять между сеансами. + Параметры.Удалить("ОбъектыКОбработке"); + Параметры.Удалить("ИмяПроцедуры"); + Параметры.Удалить("БизнесПроцесс"); + Параметры.Удалить("ОбъектовОбработано"); + +КонецПроцедуры + #КонецОбласти #Область СлужебныйПрограммныйИнтерфейс @@ -534,48 +723,13 @@ // Объявляет служебные события подсистемы БизнесПроцессыИЗадачи: // // Серверные события: -// ПриОпределенииПредставленияПредметаВнешнейЗадачи, -// ПриОпределенииСпискаФайлов, -// ПриВыполненииЗадачиИсточника. +// - // // См. описание этой же процедуры в модуле СтандартныеПодсистемыСервер. Процедура ПриДобавленииСлужебныхСобытий(КлиентскиеСобытия, СерверныеСобытия) Экспорт // СЕРВЕРНЫЕ СОБЫТИЯ. - // Возвращает содержание переданного объекта для передачи в другую информационную систему. - // -// Параметры: - // ПредметЗадачи - объект, представление которого надо сформировать. - // Представление - Строка - содержание в виде HTML или MXL документа. - // - // Синтаксис: - // Процедура ПриОпределенииПредставленияПредметаВнешнейЗадачи(ПредметЗадачи, Представление) Экспорт - // - СерверныеСобытия.Добавить( - "СтандартныеПодсистемы.БизнесПроцессыИЗадачи\ПриОпределенииПредставленияПредметаВнешнейЗадачи"); - - // Возвращает массив объектов типа ОписаниеПередаваемогоФайла или Неопределено. - // -// Параметры: - // ПредметЗадачи - объект, список файлов которого надо вернуть. - // СписокФайлов - Массив - список файлов предмета. - // - // Синтаксис: - // Процедура ПриОпределенииСпискаФайлов(ПредметЗадачи, СписокФайлов) Экспорт - // - СерверныеСобытия.Добавить("СтандартныеПодсистемы.БизнесПроцессыИЗадачи\ПриОпределенииСпискаФайлов"); - - // Помечает задачу-источник бизнес-процесса БизнесПроцесс как выполненную. - // -// Параметры: - // БизнесПроцесс - БизнесПроцессОбъект.Задание - // - // Синтаксис: - // Процедура ПриВыполненииЗадачиИсточника(БизнесПроцесс) Экспорт - // - СерверныеСобытия.Добавить("СтандартныеПодсистемы.БизнесПроцессыИЗадачи\ПриВыполненииЗадачиИсточника"); - КонецПроцедуры // См. описание этой же процедуры в модуле СтандартныеПодсистемыСервер. @@ -586,9 +740,6 @@ СерверныеОбработчики["СтандартныеПодсистемы.ОбновлениеВерсииИБ\ПриДобавленииОбработчиковОбновления"].Добавить( "БизнесПроцессыИЗадачиСервер"); - СерверныеОбработчики["СтандартныеПодсистемы.БазоваяФункциональность\ПриОпределенииПредставленияПредмета"].Добавить( - "БизнесПроцессыИЗадачиСервер"); - СерверныеОбработчики["СтандартныеПодсистемы.БазоваяФункциональность\ПриДобавленииИсключенийПоискаСсылок"].Добавить( "БизнесПроцессыИЗадачиСервер"); @@ -634,7 +785,7 @@ // Возвращает менеджер временных таблиц, содержащий временную таблицу пользователей // некоторых дополнительных групп пользователей, например, пользователей групп -// исполнителей задач, которые соответствуют ключам адресации. +// исполнителей задач, которые соответствуют ключам адресации // (РольИсполнителя + ОсновнойОбъектАдресации + ДополнительныйОбъектАдресации). // // При изменении состава дополнительных групп пользователей, необходимо вызвать @@ -665,7 +816,11 @@ // когда СодеражаниеПараметра = "Исполнители". // Массив указанных выше типов. // -Процедура ПриОпределенииГруппИсполнителей(МенеджерВременныхТаблиц, СодержаниеПараметра, ЗначениеПараметра) Экспорт +// НетГруппИсполнителей - Булево, если Ложь, МенеджерВременныхТаблиц содержит временную таблицу, иначе нет. +// +Процедура ПриОпределенииГруппИсполнителей(МенеджерВременныхТаблиц, СодержаниеПараметра, ЗначениеПараметра, НетГруппИсполнителей) Экспорт + + НетГруппИсполнителей = Ложь; Запрос = Новый Запрос; Запрос.МенеджерВременныхТаблиц = МенеджерВременныхТаблиц; @@ -717,7 +872,6 @@ КонецПроцедуры - // Определить список справочников, доступных для загрузки с помощью подсистемы "Загрузка данных из файла". // // Параметры: @@ -757,6 +911,17 @@ Объекты.Вставить(Метаданные.Справочники.РолиИсполнителей.ПолноеИмя(), "РеквизитыНеРедактируемыеВГрупповойОбработке"); КонецПроцедуры +// См. описание одноименной процедуры в общем модуле РегламентныеЗаданияПереопределяемый. +// +Процедура ПриОпределенииЗависимостейРегламентныхЗаданий(Зависимости) Экспорт + Зависимость = Зависимости.Добавить(); + Зависимость.РегламентноеЗадание = Метаданные.РегламентныеЗадания.МониторингЗадач; + Зависимость.ФункциональнаяОпция = Метаданные.ФункциональныеОпции.ИспользоватьБизнесПроцессыИЗадачи; + + Зависимость = Зависимости.Добавить(); + Зависимость.РегламентноеЗадание = Метаданные.РегламентныеЗадания.УведомлениеИсполнителейОНовыхЗадачах; + Зависимость.ФункциональнаяОпция = Метаданные.ФункциональныеОпции.ИспользоватьБизнесПроцессыИЗадачи; +КонецПроцедуры #КонецОбласти @@ -765,24 +930,6 @@ //////////////////////////////////////////////////////////////////////////////// // Обработчики событий подсистем БСП. -// Устанавливает текстовое описание предмета. -// -// Параметры: -// СсылкаНаПредмет - ЛюбаяСсылка - объект ссылочного типа. -// Представление - Строка - сюда необходимо поместить текстовое описание. -Процедура ПриОпределенииПредставленияПредмета(СсылкаНаПредмет, Представление) Экспорт - - Если ТипЗнч(СсылкаНаПредмет) = Тип("ЗадачаСсылка.ЗадачаИсполнителя") Тогда - ПредставлениеОбъекта = СсылкаНаПредмет.Метаданные().ПредставлениеОбъекта; - Если ПустаяСтрока(ПредставлениеОбъекта) Тогда - ПредставлениеОбъекта = СсылкаНаПредмет.Метаданные().Представление(); - КонецЕсли; - Представление = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - "%1 (%2)", СсылкаНаПредмет.Наименование, ПредставлениеОбъекта); - КонецЕсли; - -КонецПроцедуры - // Заполняет массив списком имен объектов метаданных, данные которых могут содержать ссылки на различные объекты // метаданных, но при этом эти ссылки не должны учитываться в бизнес-логике приложения. // @@ -901,15 +1048,15 @@ Возврат; КонецЕсли; - Описание = Описание + - " - |БизнесПроцесс.Задание.Чтение.Пользователи - |БизнесПроцесс.Задание.Изменение.Пользователи - |Задача.ЗадачаИсполнителя.Чтение.Объект.БизнесПроцесс.Задание - |Задача.ЗадачаИсполнителя.Чтение.Пользователи - |Задача.ЗадачаИсполнителя.Изменение.Пользователи - |РегистрСведений.ДанныеБизнесПроцессов.Чтение.Объект.БизнесПроцесс.Задание - |"; + Описание = Описание + + " + |БизнесПроцесс.Задание.Чтение.Пользователи + |БизнесПроцесс.Задание.Изменение.Пользователи + |Задача.ЗадачаИсполнителя.Чтение.Объект.БизнесПроцесс.Задание + |Задача.ЗадачаИсполнителя.Чтение.Пользователи + |Задача.ЗадачаИсполнителя.Изменение.Пользователи + |РегистрСведений.ДанныеБизнесПроцессов.Чтение.Объект.БизнесПроцесс.Задание + |"; КонецПроцедуры @@ -918,15 +1065,16 @@ // Их можно удалить, если они не требуются для ограничения прав доступа. // // Параметры: -// ВидыДоступа - ТаблицаЗначений с полями: -// - Имя - Строка - имя используемое в описании поставляемых -// профилей групп доступа и текстах ОДД. -// - Представление - Строка - представляет вид доступа в профилях и группах доступа. -// - ТипЗначений - Тип - тип ссылки значений доступа. Например, Тип("СправочникСсылка.Номенклатура"). -// - ТипГруппЗначений - Тип - тип ссылки групп значений доступа. Например, -// Тип("СправочникСсылка.ГруппыДоступаНоменклатуры"). -// - НесколькоГруппЗначений - Булево - Истина указывает, что для значения доступа (Номенклатуры), -// можно выбрать несколько групп значений (Групп доступа номенклатуры). +// ВидыДоступа - ТаблицаЗначений - с колонками: +// * Имя - Строка - имя используемое в описании поставляемых +// профилей групп доступа и текстах ОДД. +// * Представление - Строка - представляет вид доступа в профилях и группах доступа. +// * ТипЗначений - Тип - тип ссылки значений доступа. +// Например, Тип("СправочникСсылка.Номенклатура"). +// * ТипГруппЗначений - Тип - тип ссылки групп значений доступа. +// Например, Тип("СправочникСсылка.ГруппыДоступаНоменклатуры"). +// * НесколькоГруппЗначений - Булево - Истина указывает, что для значения доступа (Номенклатуры), можно +// выбрать несколько групп значений (Групп доступа номенклатуры). // Процедура ПриЗаполненииВидовДоступа(ВидыДоступа) Экспорт @@ -976,16 +1124,15 @@ // Процедура ПриЗаполненииСпискаТекущихДел(ТекущиеДела) Экспорт - МодульТекущиеДелаСлужебный = ОбщегоНазначения.ОбщийМодуль("ТекущиеДелаСлужебный"); + МодульТекущиеДелаСервер = ОбщегоНазначения.ОбщийМодуль("ТекущиеДелаСервер"); Если Не ПравоДоступа("Редактирование", Метаданные.Задачи.ЗадачаИсполнителя) - Или МодульТекущиеДелаСлужебный.ДелоОтключено("ЗадачиИсполнителя") Тогда + Или МодульТекущиеДелаСервер.ДелоОтключено("ЗадачиИсполнителя") Тогда Возврат; КонецЕсли; Если Не ПолучитьФункциональнуюОпцию("ИспользоватьБизнесПроцессыИЗадачи") Тогда Возврат; КонецЕсли; - МодульТекущиеДелаСервер = ОбщегоНазначения.ОбщийМодуль("ТекущиеДелаСервер"); КоличествоЗадачИсполнителя = КоличествоЗадачИсполнителя(); @@ -993,8 +1140,10 @@ // не делается проверка существования подсистемы. Разделы = МодульТекущиеДелаСервер.РазделыДляОбъекта(Метаданные.Задачи.ЗадачаИсполнителя.ПолноеИмя()); - Если Разделы = Неопределено Тогда - Возврат; // Задачи не вынесены в командный интерфейс пользователя. + Если ПользователиКлиентСервер.ЭтоСеансВнешнегоПользователя() Тогда + Если Разделы.Количество() = 0 Тогда + Разделы.Добавить(Метаданные.Задачи.ЗадачаИсполнителя); + КонецЕсли; КонецЕсли; Для Каждого Раздел Из Разделы Цикл @@ -1006,7 +1155,8 @@ Дело.Представление = НСтр("ru = 'Мои задачи'"); Дело.Количество = КоличествоЗадачИсполнителя.Всего; Дело.Форма = "Задача.ЗадачаИсполнителя.Форма.МоиЗадачи"; - Дело.ПараметрыФормы = Новый Структура("Отбор", Новый Структура("Выполнена", Ложь)); + ЗначениеОтбора = Новый Структура("Выполнена", Ложь); + Дело.ПараметрыФормы = Новый Структура("Отбор", ЗначениеОтбора); Дело.Владелец = Раздел; Дело = ТекущиеДела.Добавить(); @@ -1150,13 +1300,14 @@ |ГДЕ | ИсполнителиЗадач.РольИсполнителя = &РольИсполнителя"; Если ОсновнойОбъектАдресации <> Неопределено Тогда - ТекстЗапроса = ТекстЗапроса + - " И ИсполнителиЗадач.ОсновнойОбъектАдресации = &ОсновнойОбъектАдресации"; + ТекстЗапроса = ТекстЗапроса + + " И ИсполнителиЗадач.ОсновнойОбъектАдресации = &ОсновнойОбъектАдресации"; КонецЕсли; Если ДополнительныйОбъектАдресации <> Неопределено Тогда - ТекстЗапроса = ТекстЗапроса + - " И ИсполнителиЗадач.ДополнительныйОбъектАдресации = &ДополнительныйОбъектАдресации"; + ТекстЗапроса = ТекстЗапроса + + " И ИсполнителиЗадач.ДополнительныйОбъектАдресации = &ДополнительныйОбъектАдресации"; КонецЕсли; + Запрос = Новый Запрос(ТекстЗапроса); Запрос.Параметры.Вставить("РольИсполнителя", РольСсылка); Запрос.Параметры.Вставить("ОсновнойОбъектАдресации", ОсновнойОбъектАдресации); @@ -1211,7 +1362,8 @@ |ИЗ | %2 КАК %1 |ГДЕ - | %1.ВедущаяЗадача = &ВедущаяЗадача", МетаданныеБизнесПроцесса.Имя, МетаданныеБизнесПроцесса.ПолноеИмя(), + | %1.ВедущаяЗадача = &ВедущаяЗадача", + МетаданныеБизнесПроцесса.Имя, МетаданныеБизнесПроцесса.ПолноеИмя(), ?(Итерация = 1, "РАЗРЕШЕННЫЕ", "")); ТекстЗапроса = ТекстЗапроса + ФрагментЗапроса; Итерация = Итерация + 1; @@ -1278,13 +1430,13 @@ "ВЫБРАТЬ РАЗРЕШЕННЫЕ | БизнесПроцессы.Ссылка КАК Ссылка |ИЗ - | %БизнесПроцесс% КАК БизнесПроцессы + | %1 КАК БизнесПроцессы |ГДЕ | БизнесПроцессы.ВедущаяЗадача = &ВедущаяЗадача | И БизнесПроцессы.ПометкаУдаления = ЛОЖЬ | И БизнесПроцессы.Завершен = ЛОЖЬ"; - Запрос.Текст = СтрЗаменить(Запрос.Текст, "%БизнесПроцесс%", МетаданныеБизнесПроцесса.ПолноеИмя()); + Запрос.Текст = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(Запрос.Текст, МетаданныеБизнесПроцесса.ПолноеИмя()); Запрос.УстановитьПараметр("ВедущаяЗадача", ЗадачаСсылка); Результат = Запрос.Выполнить(); @@ -1315,13 +1467,13 @@ "ВЫБРАТЬ РАЗРЕШЕННЫЕ | БизнесПроцессы.Ссылка КАК Ссылка |ИЗ - | %БизнесПроцесс% КАК БизнесПроцессы + | %1 КАК БизнесПроцессы |ГДЕ | БизнесПроцессы.ГлавнаяЗадача = &ГлавнаяЗадача | И БизнесПроцессы.ПометкаУдаления = ЛОЖЬ | И БизнесПроцессы.Завершен = ЛОЖЬ"; - Запрос.Текст = СтрЗаменить(Запрос.Текст, "%БизнесПроцесс%", МетаданныеБизнесПроцесса.ПолноеИмя()); + Запрос.Текст = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(Запрос.Текст, МетаданныеБизнесПроцесса.ПолноеИмя()); Запрос.УстановитьПараметр("ГлавнаяЗадача", ЗадачаСсылка); Результат = Запрос.Выполнить(); @@ -1340,33 +1492,6 @@ КонецПроцедуры -// Заполняет реквизит ГлавнаяЗадача при создании бизнес-процесса -// на основании другого бизнес-процесса. -// -Процедура ЗаполнитьГлавнуюЗадачу(БизнесПроцессОбъект, ДанныеЗаполнения) Экспорт - - СтандартнаяОбработка = Истина; - БизнесПроцессыИЗадачиПереопределяемый.ПриЗаполненииГлавнойЗадачиБизнесПроцесса(БизнесПроцессОбъект, ДанныеЗаполнения, СтандартнаяОбработка); - Если Не СтандартнаяОбработка Тогда - Возврат; - КонецЕсли; - - // Для обратной совместимости. - Отказ = БизнесПроцессыИЗадачиПереопределяемый.ЗаполнитьГлавнуюЗадачу(БизнесПроцессОбъект, ДанныеЗаполнения); - Если Отказ Тогда - Возврат; - КонецЕсли; - - Если ДанныеЗаполнения = Неопределено Тогда - Возврат; - КонецЕсли; - - Если ТипЗнч(ДанныеЗаполнения) = Тип("ЗадачаСсылка.ЗадачаИсполнителя") Тогда - БизнесПроцессОбъект.ГлавнаяЗадача = ДанныеЗаполнения; - КонецЕсли; - -КонецПроцедуры - // Получает группы исполнителей задач согласно новым записям исполнителей задач. // // Параметры: @@ -1428,61 +1553,6 @@ КонецФункции -// Получить группу исполнителей задач, которая соответствует реквизитам адресации. -// Если группа еще не существует, то создается и возвращается новая. -// -// Параметры: -// РольИсполнителя - СправочникСсылка.РолиИсполнителей -// ОсновнойОбъектАдресации - ЛюбаяСсылка -// ДополнительныйОбъектАдресации - ЛюбаяСсылка -// -// Возвращаемое значение: -// СправочникСсылка.ГруппыИсполнителейЗадач -// -Функция ГруппаИсполнителейЗадач(РольИсполнителя, ОсновнойОбъектАдресации, ДополнительныйОбъектАдресации) Экспорт - - НачатьТранзакцию(); - Попытка - Блокировка = Новый БлокировкаДанных; - ЭлементБлокировки = Блокировка.Добавить("Справочник.ГруппыИсполнителейЗадач"); - ЭлементБлокировки.УстановитьЗначение("РольИсполнителя", РольИсполнителя); - ЭлементБлокировки.УстановитьЗначение("ОсновнойОбъектАдресации", ОсновнойОбъектАдресации); - ЭлементБлокировки.УстановитьЗначение("ДополнительныйОбъектАдресации", ДополнительныйОбъектАдресации); - Блокировка.Заблокировать(); - - Запрос = Новый Запрос( - "ВЫБРАТЬ - | ГруппыИсполнителейЗадач.Ссылка КАК Ссылка - |ИЗ - | Справочник.ГруппыИсполнителейЗадач КАК ГруппыИсполнителейЗадач - |ГДЕ - | ГруппыИсполнителейЗадач.РольИсполнителя = &РольИсполнителя - | И ГруппыИсполнителейЗадач.ОсновнойОбъектАдресации = &ОсновнойОбъектАдресации - | И ГруппыИсполнителейЗадач.ДополнительныйОбъектАдресации = &ДополнительныйОбъектАдресации"); - Запрос.УстановитьПараметр("РольИсполнителя", РольИсполнителя); - Запрос.УстановитьПараметр("ОсновнойОбъектАдресации", ОсновнойОбъектАдресации); - Запрос.УстановитьПараметр("ДополнительныйОбъектАдресации", ДополнительныйОбъектАдресации); - Выборка = Запрос.Выполнить().Выбрать(); - Если Выборка.Следующий() Тогда - ГруппаИсполнителей = Выборка.Ссылка; - Иначе - // Требуется добавить новую группу исполнителей задач. - ГруппаИсполнителейОбъект = Справочники.ГруппыИсполнителейЗадач.СоздатьЭлемент(); - ГруппаИсполнителейОбъект.РольИсполнителя = РольИсполнителя; - ГруппаИсполнителейОбъект.ОсновнойОбъектАдресации = ОсновнойОбъектАдресации; - ГруппаИсполнителейОбъект.ДополнительныйОбъектАдресации = ДополнительныйОбъектАдресации; - ГруппаИсполнителейОбъект.Записать(); - ГруппаИсполнителей = ГруппаИсполнителейОбъект.Ссылка; - КонецЕсли; - ЗафиксироватьТранзакцию(); - Возврат ГруппаИсполнителей; - Исключение - ОтменитьТранзакцию(); - ВызватьИсключение; - КонецПопытки; - -КонецФункции - // Пометить на удаление вложенные и подчиненные бизнес-процессы задачи ЗадачаСсылка. // // Параметры: @@ -1545,12 +1615,6 @@ Возврат ЕстьПрава; КонецЕсли; - // Для обратной совместимости. - Результат = БизнесПроцессыИЗадачиПереопределяемый.ЕстьПраваНаОстановкуБизнесПроцесса(БизнесПроцесс); - Если Результат <> Неопределено Тогда - Возврат Результат; - КонецЕсли; - Если Пользователи.ЭтоПолноправныйПользователь() Тогда Возврат Истина; КонецЕсли; @@ -1574,7 +1638,7 @@ Список.Параметры.УстановитьЗначениеПараметра("КонецДня", Сегодня.ДатаОкончания); Список.Параметры.УстановитьЗначениеПараметра("КонецНедели", ЭтаНеделя.ДатаОкончания); Список.Параметры.УстановитьЗначениеПараметра("КонецСледующейНедели", СледующаяНеделя.ДатаОкончания); - Список.Параметры.УстановитьЗначениеПараметра("Просрочено", НСтр("ru = ' Просрочено'")); + Список.Параметры.УстановитьЗначениеПараметра("Просрочено", " " + НСтр("ru = 'Просрочено'")); Список.Параметры.УстановитьЗначениеПараметра("Сегодня", НСтр("ru = 'В течение сегодня'")); Список.Параметры.УстановитьЗначениеПараметра("ЭтаНеделя", НСтр("ru = 'До конца недели'")); Список.Параметры.УстановитьЗначениеПараметра("СледующаяНеделя", НСтр("ru = 'На следующей неделе'")); @@ -1656,7 +1720,6 @@ Запрос.УстановитьПараметр("Сегодня", Сегодня.ДатаОкончания); Запрос.УстановитьПараметр("КонецНедели", ЭтаНеделя.ДатаОкончания); Запрос.УстановитьПараметр("КонецСледующейНедели", СледующаяНеделя.ДатаОкончания); - РезультатЗапроса = Запрос.Выполнить().Выгрузить(); Результат = Новый Структура("Всего,Просроченные,НаСегодня,НаНеделю,НаСледующуюНеделю"); @@ -1683,25 +1746,36 @@ Обработчик = Обработчики.Добавить(); Обработчик.Версия = "1.0.2.2"; - Обработчик.Процедура = "БизнесПроцессыИЗадачиСервер.ОбновлениеИнформационнойБазы"; + Обработчик.НачальноеЗаполнение = Истина; + Обработчик.Процедура = "БизнесПроцессыИЗадачиСервер.ЗаполнитьОтветственногоЗаКонтрольИсполнения"; Обработчик = Обработчики.Добавить(); Обработчик.Версия = "1.0.6.6"; - Обработчик.Процедура = "БизнесПроцессыИЗадачиСервер.ОбновлениеИнформационнойБазыПредметСтрокой"; + Обработчик.Процедура = "БизнесПроцессыИЗадачиСервер.ЗаполнитьПредметСтрокой"; Обработчик = Обработчики.Добавить(); Обработчик.Версия = "1.1.1.2"; - Обработчик.Процедура = "БизнесПроцессыИЗадачиСервер.ОбновлениеСостоянияИПринятияКИсполнению"; + Обработчик.Процедура = "БизнесПроцессыИЗадачиСервер.ЗаполнитьСостоянияИПринятияКИсполнению"; Обработчик = Обработчики.Добавить(); Обработчик.Версия = "1.2.1.1"; - Обработчик.Процедура = "БизнесПроцессыИЗадачиСервер.ОбновлениеКодаРолиИсполнителя"; + Обработчик.Процедура = "БизнесПроцессыИЗадачиСервер.ЗаполнитьКодРолиИсполнителя"; + + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.УправлениеДоступом") Тогда + Обработчик = Обработчики.Добавить(); + Обработчик.Версия = "2.3.1.78"; + Обработчик.Идентификатор = Новый УникальныйИдентификатор("80A64E76-12CC-4075-A80B-9EB93C411C85"); + Обработчик.Процедура = "БизнесПроцессыИЗадачиСервер.ОбновитьНаборыЗначенийДоступаЗаданий"; + Обработчик.Комментарий = НСтр("ru = 'Обновление прав доступа для бизнес-процесса ""Задание"". + |До завершения обработки будут действовать прежние права доступа к заданиям.'"); + Обработчик.РежимВыполнения = "Отложенно"; + КонецЕсли; КонецПроцедуры // Инициализировать предопределенную роль исполнителей ОтветственныйЗаКонтрольИсполнения. // -Процедура ОбновлениеИнформационнойБазы() Экспорт +Процедура ЗаполнитьОтветственногоЗаКонтрольИсполнения() Экспорт ВсеОбъектыАдресации = ПланыВидовХарактеристик.ОбъектыАдресацииЗадач.ВсеОбъектыАдресации; @@ -1716,7 +1790,7 @@ // Инициализировать новое поле Состояние у тех бизнес-процессов, у которых оно есть. // -Процедура ОбновлениеСостоянияИПринятияКИсполнению() Экспорт +Процедура ЗаполнитьСостоянияИПринятияКИсполнению() Экспорт // Обновления состояния бизнес-процессов и задач. Для каждого МетаданныеБизнесПроцесса Из Метаданные.БизнесПроцессы Цикл @@ -1731,9 +1805,9 @@ "ВЫБРАТЬ | БизнесПроцессы.Ссылка КАК Ссылка |ИЗ - | %БизнесПроцесс% КАК БизнесПроцессы"; + | %1 КАК БизнесПроцессы"; - Запрос.Текст = СтрЗаменить(Запрос.Текст, "%БизнесПроцесс%", МетаданныеБизнесПроцесса.ПолноеИмя()); + Запрос.Текст = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(Запрос.Текст, МетаданныеБизнесПроцесса.ПолноеИмя()); Результат = Запрос.Выполнить(); @@ -1781,7 +1855,7 @@ // Заполнить новое поле ПредметСтрокой у задачи ЗадачаИсполнителя. // -Процедура ОбновлениеИнформационнойБазыПредметСтрокой() Экспорт +Процедура ЗаполнитьПредметСтрокой() Экспорт Запрос = Новый Запрос; Запрос.Текст = @@ -1810,7 +1884,7 @@ // Перенести данные из стандартного реквизита Код в новый реквизит КраткоеПредставление. // -Процедура ОбновлениеКодаРолиИсполнителя() Экспорт +Процедура ЗаполнитьКодРолиИсполнителя() Экспорт Запрос = Новый Запрос; Запрос.Текст = @@ -1837,13 +1911,91 @@ КонецПроцедуры +Процедура ОбновитьНаборыЗначенийДоступаЗаданий(Параметры) Экспорт + + БизнесПроцесс = Метаданные.БизнесПроцессы.Задание; + ИмяПроцедуры = "БизнесПроцессыИЗадачиСервер.ОбновитьНаборыЗначенийДоступаЗаданий"; + + НачатьОбновлениеПорцииНаборовЗначенийДоступа(Параметры, БизнесПроцесс, ИмяПроцедуры, 1000); + Если Параметры.ОбработкаЗавершена Тогда + Возврат; + КонецЕсли; + + Для Каждого ЗаданиеСсылка Из Параметры.ОбъектыКОбработке Цикл + + Попытка + ОбновитьНаборыЗначенийДоступаЗадания(ЗаданиеСсылка); + Параметры.ОбъектовОбработано = Параметры.ОбъектовОбработано + 1; + Исключение + // Если не удалось обработать какой-либо объект, в следующий раз повторим попытку снова. + Параметры.ПроблемныеОбъекты.Добавить(ЗаданиеСсылка); + + ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Не удалось обновить права доступа для ""%1"" в обработчике ""%2"" по причине: + |%3'"), + ЗаданиеСсылка, ИмяПроцедуры, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); + ЗаписьЖурналаРегистрации(ОбновлениеИнформационнойБазы.СобытиеЖурналаРегистрации(), УровеньЖурналаРегистрации.Предупреждение, + БизнесПроцесс, ЗаданиеСсылка, ТекстСообщения); + КонецПопытки; + + КонецЦикла; + + ЗавершитьОбновлениеПорцииНаборовЗначенийДоступа(Параметры); + +КонецПроцедуры + +Процедура ОбновитьНаборыЗначенийДоступаЗадания(ЗаданиеСсылка) + + МодульУправлениеДоступом = ОбщегоНазначения.ОбщийМодуль("УправлениеДоступом"); + НачатьТранзакцию(); + Попытка + + // Блокируем объект от изменения другими сеансами. + Блокировка = Новый БлокировкаДанных; + ЭлементБлокировки = Блокировка.Добавить("БизнесПроцесс.Задание"); + ЭлементБлокировки.УстановитьЗначение("Ссылка", ЗаданиеСсылка); + Блокировка.Заблокировать(); + + ЗаданиеОбъект = ЗаданиеСсылка.ПолучитьОбъект(); + // Если объект ранее был удален или обработан другими сеансами, пропускаем его. + Если ЗаданиеОбъект = Неопределено Тогда + ОтменитьТранзакцию(); + Возврат; + КонецЕсли; + Если ЗаданиеОбъект.ГруппаИсполнителейЗадач <> Справочники.ГруппыИсполнителейЗадач.ПустаяСсылка() Тогда + ОтменитьТранзакцию(); + Возврат; + КонецЕсли; + + ЗаданиеОбъект.ГруппаИсполнителейЗадач = ?(ТипЗнч(ЗаданиеОбъект.Исполнитель) = Тип("СправочникСсылка.РолиИсполнителей"), + ГруппаИсполнителейЗадач(ЗаданиеОбъект.Исполнитель, + ЗаданиеОбъект.ОсновнойОбъектАдресации, ЗаданиеОбъект.ДополнительныйОбъектАдресации), + ЗаданиеОбъект.Исполнитель); + ЗаданиеОбъект.ГруппаИсполнителейЗадачПроверяющий = ?(ТипЗнч(ЗаданиеОбъект.Проверяющий) = Тип("СправочникСсылка.РолиИсполнителей"), + ГруппаИсполнителейЗадач(ЗаданиеОбъект.Проверяющий, + ЗаданиеОбъект.ОсновнойОбъектАдресацииПроверяющий, ЗаданиеОбъект.ДополнительныйОбъектАдресацииПроверяющий), + ЗаданиеОбъект.Проверяющий); + + МодульУправлениеДоступом.ОбновитьНаборыЗначенийДоступа(ЗаданиеОбъект); + Если ЗаданиеОбъект.Модифицированность() Тогда + ОбновлениеИнформационнойБазы.ЗаписатьДанные(ЗаданиеОбъект); + КонецЕсли; + + ЗафиксироватьТранзакцию(); + Исключение + ОтменитьТранзакцию(); + ВызватьИсключение; + КонецПопытки; + +КонецПроцедуры + /////////////////////////////////////////////////////////////////////////////// // Обработчики условных вызовов в другие подсистемы. // Возвращает адрес электронной почты пользователя Получатель для рассылки уведомлений о задачах. // // Параметры: -// Получатель - СправочникСсылка.Пользователи +// Получатель - СправочникСсылка.Пользователи, СправочникСсылка.ВнешниеПользователи - исполнитель задачи. // Адрес - Строка - возвращаемый адрес электронной почты. // // @@ -1851,35 +2003,26 @@ Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.КонтактнаяИнформация") Тогда МодульУправлениеКонтактнойИнформацией = ОбщегоНазначения.ОбщийМодуль("УправлениеКонтактнойИнформацией"); - Адрес = МодульУправлениеКонтактнойИнформацией.КонтактнаяИнформацияОбъекта( - Получатель, Справочники.ВидыКонтактнойИнформации.EmailПользователя); + Если ТипЗнч(Получатель) = Тип("СправочникСсылка.Пользователи") Тогда + Адрес = МодульУправлениеКонтактнойИнформацией.КонтактнаяИнформацияОбъекта( + Получатель, Справочники.ВидыКонтактнойИнформации.EmailПользователя); + ИначеЕсли ТипЗнч(Получатель) = Тип("СправочникСсылка.ВнешниеПользователи") Тогда + Адрес = ЭлектроннаяПочтаВнешнегоПользователя(Получатель); + КонецЕсли; КонецЕсли; КонецПроцедуры -// Возвращает Истина, если используется подсистема ВнешниеЗадачиИБизнесПроцессы. -Процедура ПриОпределенииИспользованияВнешнихЗадачИБизнесПроцессов(ПодсистемаИспользуется) Экспорт +Функция ЭлектроннаяПочтаВнешнегоПользователя(Получатель) - Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ВнешниеБизнесПроцессыИЗадачи") Тогда - ПодсистемаИспользуется = Истина; - Иначе - ПодсистемаИспользуется = Ложь; + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.КонтактнаяИнформация") Тогда + МодульУправлениеКонтактнойИнформациейСлужебный = ОбщегоНазначения.ОбщийМодуль("УправлениеКонтактнойИнформациейСлужебный"); + Возврат МодульУправлениеКонтактнойИнформациейСлужебный.ПервоеЗначениеКонтактнойИнформацииОбъектаПоТипу( + Получатель.ОбъектАвторизации, Перечисления.ТипыКонтактнойИнформации.АдресЭлектроннойПочты); КонецЕсли; -КонецПроцедуры - -// Возвращает Истина, если задача является внешней. -// -// Параметры: -// ЗадачаСсылка - ЗадачаСсылка.ЗадачаИсполнителя -// -Процедура ПриОпределенииВнешнейЗадачи(ЗадачаСсылка, ЗадачаВнешняя) Экспорт + Возврат ""; - Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ВнешниеБизнесПроцессыИЗадачи") Тогда - Иначе - ЗадачаВнешняя = Ложь; - КонецЕсли; - -КонецПроцедуры +КонецФункции #КонецОбласти diff --git a/SSL/src/CommonModules/ВариантыОтчетов/Module.bsl b/SSL/src/CommonModules/ВариантыОтчетов/Module.bsl index 346b56e2c..479883680 100644 --- a/SSL/src/CommonModules/ВариантыОтчетов/Module.bsl +++ b/SSL/src/CommonModules/ВариантыОтчетов/Module.bsl @@ -17,11 +17,13 @@ Функция ИспользуемыеРазделы() Экспорт Результат = Новый ТаблицаЗначений; Результат.Колонки.Добавить("Ссылка", Новый ОписаниеТипов("СправочникСсылка.ИдентификаторыОбъектовМетаданных")); - Результат.Колонки.Добавить("Метаданные", Новый ОписаниеТипов("ОбъектМетаданных")); + Результат.Колонки.Добавить("Метаданные", Новый ОписаниеТипов("ОбъектМетаданных, Строка")); Результат.Колонки.Добавить("Имя", ОписаниеТиповСтрока()); Результат.Колонки.Добавить("Представление", ОписаниеТиповСтрока()); Результат.Колонки.Добавить("ЗаголовокПанели", ОписаниеТиповСтрока()); + ИдентификаторНачальнойСтраницы = ВариантыОтчетовКлиентСервер.ИдентификаторНачальнойСтраницы(); + СписокРазделов = Новый СписокЗначений; ВариантыОтчетовПереопределяемый.ОпределитьРазделыСВариантамиОтчетов(СписокРазделов); @@ -40,11 +42,17 @@ КонецЕсли; Строка = Результат.Добавить(); - Строка.Ссылка = ОбщегоНазначения.ИдентификаторОбъектаМетаданных(РазделМетаданные); - Строка.Метаданные = РазделМетаданные; - Строка.Имя = РазделМетаданные.Имя; - Строка.Представление = РазделМетаданные.Представление(); - Строка.ЗаголовокПанели = СтрЗаменить(ШаблонЗаголовка, "%1", Строка.Представление); + Строка.Ссылка = ОбщегоНазначения.ИдентификаторОбъектаМетаданных(РазделМетаданные); + Если РазделМетаданные = ИдентификаторНачальнойСтраницы Тогда + Строка.Метаданные = ИдентификаторНачальнойСтраницы; + Строка.Имя = ИдентификаторНачальнойСтраницы; + Строка.Представление = НСтр("ru = 'Начальная страница'"); + Иначе + Строка.Метаданные = РазделМетаданные; + Строка.Имя = РазделМетаданные.Имя; + Строка.Представление = РазделМетаданные.Представление(); + КонецЕсли; + Строка.ЗаголовокПанели = СтрЗаменить(ШаблонЗаголовка, "%1", Строка.Представление); // Переход на СтрШаблон невозможен. КонецЦикла; Возврат Результат; @@ -64,14 +72,30 @@ Результат = Неопределено; Запрос = Новый Запрос; - Запрос.Текст = - "ВЫБРАТЬ РАЗРЕШЕННЫЕ ПЕРВЫЕ 1 - | ВариантыОтчетов.Ссылка - |ИЗ - | Справочник.ВариантыОтчетов КАК ВариантыОтчетов - |ГДЕ - | ВариантыОтчетов.Отчет = &Отчет - | И ВариантыОтчетов.КлючВарианта = &КлючВарианта"; + Если ТипЗнч(Отчет) = Тип("СправочникСсылка.ИдентификаторыОбъектовРасширений") Тогда + Запрос.Текст = + "ВЫБРАТЬ РАЗРЕШЕННЫЕ ПЕРВЫЕ 1 + | ВариантыОтчетов.Вариант КАК Ссылка + |ИЗ + | РегистрСведений.ПредопределенныеВариантыОтчетовВерсийРасширений КАК ВариантыОтчетов + |ГДЕ + | ВариантыОтчетов.Отчет = &Отчет + | И ВариантыОтчетов.ВерсияРасширений = &ВерсияРасширений + | И ВариантыОтчетов.КлючВарианта = &КлючВарианта"; + Запрос.УстановитьПараметр("ВерсияРасширений", ПараметрыСеанса.ВерсияРасширений); + Иначе + Запрос.Текст = + "ВЫБРАТЬ РАЗРЕШЕННЫЕ ПЕРВЫЕ 1 + | ВариантыОтчетов.Ссылка + |ИЗ + | Справочник.ВариантыОтчетов КАК ВариантыОтчетов + |ГДЕ + | ВариантыОтчетов.Отчет = &Отчет + | И ВариантыОтчетов.КлючВарианта = &КлючВарианта + | + |УПОРЯДОЧИТЬ ПО + | ВариантыОтчетов.ПометкаУдаления"; + КонецЕсли; Запрос.УстановитьПараметр("Отчет", Отчет); Запрос.УстановитьПараметр("КлючВарианта", КлючВарианта); @@ -114,7 +138,7 @@ // Вызывает модуль менеджера отчета для заполнения его настроек. // Для использования в ВариантыОтчетовПереопределяемый.НастроитьВариантыОтчетов(). -// См. описание функции ДеревоНастроекВариантовОтчетовКонфигурации(). +// См. описание функции ДеревоПредопределенных(). // // Параметры: // Настройки - Коллекция - Передается "как есть" из процедуры НастроитьВариантыОтчетов. @@ -126,9 +150,9 @@ // // // // Параметры: // // Настройки - Коллекция - Используется для описания настроек отчетов и вариантов -// // См. описание к ВариантыОтчетов.ДеревоНастроекВариантовОтчетовКонфигурации(). +// // См. описание к ВариантыОтчетов.ДеревоПредопределенных(). // // НастройкиОтчета - СтрокаДереваЗначений - Настройки размещения всех вариантов отчета. -// // См. "Реквизиты для изменения" функции ВариантыОтчетов.ДеревоНастроекВариантовОтчетовКонфигурации(). +// // См. "Реквизиты для изменения" функции ВариантыОтчетов.ДеревоПредопределенных(). // // // // Описание: // // См. ВариантыОтчетовПереопределяемый.НастроитьВариантыОтчетов(). @@ -149,17 +173,17 @@ // Находит настройки указанного отчета. Используется для настройки размещения и общих параметров отчета. // Для использования в ВариантыОтчетовПереопределяемый.НастроитьВариантыОтчетов(). -// См. описание функции ДеревоНастроекВариантовОтчетовКонфигурации(). +// См. описание функции ДеревоПредопределенных(). // // Параметры: // ДеревоВариантов - ДеревоЗначений - Используется для описания настроек отчетов и вариантов. -// См. описание функции ДеревоНастроекВариантовОтчетовКонфигурации(). +// См. описание функции ДеревоПредопределенных(). // ОтчетЗначениеИлиМетаданные - ОбъектМетаданных, СправочникСсылка.ИдентификаторыОбъектовМетаданных - // Метаданные или ссылка отчета. // // Возвращаемое значение: // СтрокаДереваЗначений - Отчет. -// См. "Реквизиты для изменения" функции ДеревоНастроекВариантовОтчетовКонфигурации(). +// См. "Реквизиты для изменения" функции ДеревоПредопределенных(). // Функция ОписаниеОтчета(ДеревоВариантов, ОтчетЗначениеИлиМетаданные) Экспорт ЭтоМетаданные = (ТипЗнч(ОтчетЗначениеИлиМетаданные) = Тип("ОбъектМетаданных")); @@ -171,8 +195,8 @@ Если СтрокаОтчет = Неопределено Тогда ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Ошибка получения описания отчета ""%1"", - |он не подключен к подсистеме ""%2""'"), + НСтр("ru = 'Ошибка получения описания отчета ""%1"": он не подключен к подсистеме ""%2"". + |Проверьте свойство ""Хранилище вариантов"" в свойствах отчета.'"), Строка(ОтчетЗначениеИлиМетаданные), ВариантыОтчетовКлиентСервер.НаименованиеПодсистемы("")); КонецЕсли; @@ -185,14 +209,14 @@ // // Параметры: // ДеревоВариантов - ДеревоЗначений - Используется для описания настроек отчетов и вариантов -// см. описание функции ДеревоНастроекВариантовОтчетовКонфигурации(). +// см. описание функции ДеревоПредопределенных(). // ОтчетСтрокаДереваИлиЗначениеИлиМетаданные - СтрокаДерева, ОбъектМетаданных, // СправочникСсылка.ИдентификаторыОбъектовМетаданных - Описание настроек, метаданные или ссылка отчета. // КлючВарианта - Строка - Имя варианта отчета как оно задано в схеме компоновки данных. // // Возвращаемое значение: // СтрокаДереваЗначений - Вариант. -// См. "Реквизиты для изменения" функции ДеревоНастроекВариантовОтчетовКонфигурации(). +// См. "Реквизиты для изменения" функции ДеревоПредопределенных(). // Функция ОписаниеВарианта(ДеревоВариантов, ОтчетСтрокаДереваИлиЗначениеИлиМетаданные, КлючВарианта) Экспорт Если ТипЗнч(ОтчетСтрокаДереваИлиЗначениеИлиМетаданные) = Тип("СтрокаДереваЗначений") Тогда @@ -386,19 +410,21 @@ Если РазрешеноИндексированиеНеразделенныхДанных() Тогда Обработчик = Обработчики.Добавить(); - Обработчик.РежимВыполнения = ?(ОбщегоНазначенияПовтИсп.РазделениеВключено(), "Монопольно", "Отложенно"); + Обработчик.РежимВыполнения = ?(ОбщегоНазначенияПовтИсп.РазделениеВключено(), "Оперативно", "Отложенно"); + Обработчик.Идентификатор = Новый УникальныйИдентификатор("38d2a135-53e0-4c68-9bd6-3d6df9b9dcfb"); Обработчик.ОбщиеДанные = Истина; Обработчик.Версия = Версия; - Обработчик.Процедура = "ВариантыОтчетов.ОтложенноеПолноеОбновлениеОбщихДанных"; + Обработчик.Процедура = "ВариантыОтчетов.ОтложенноеОбновлениеОбщихДанныхКонфигурацииПолное"; Обработчик.Комментарий = НСтр("ru = 'Полное обновление индекса поиска отчетов, предусмотренных в программе. |Поиск отчетов временно недоступен.'"); КонецЕсли; Обработчик = Обработчики.Добавить(); Обработчик.РежимВыполнения = "Отложенно"; + Обработчик.Идентификатор = Новый УникальныйИдентификатор("5ba93197-230b-4ac8-9abb-ab3662e5ff76"); Обработчик.ОбщиеДанные = Ложь; Обработчик.Версия = Версия; - Обработчик.Процедура = "ВариантыОтчетов.ОтложенноеПолноеОбновлениеРазделенныхДанных"; + Обработчик.Процедура = "ВариантыОтчетов.ОтложенноеОбновлениеРазделенныхДанныхКонфигурацииПолное"; Обработчик.Комментарий = НСтр("ru = 'Полное обновление индекса поиска отчетов, сохраненных пользователями. |Поиск отчетов временно недоступен.'"); @@ -407,6 +433,117 @@ //////////////////////////////////////////////////////////////////////////////// // Для вызова из обработчиков обновления прикладной конфигурации. +// Сбрасывает пользовательские настройки указанных отчетов. +// +// Параметры: +// Ключ - ОбъектМетаданных: Отчет, Строка, "*" - Отчет, для которого требуется сбросить настройки. +// * ОбъектМетаданных: Отчет - Отчет, для которого требуется сбросить настройки. +// * СправочникСсылка.ВариантыОтчетов - Вариант отчета, для которого требуется сбросить настройки. +// * Строка - Полное имя варианта отчета, для которого требуется сбросить настройки. +// Заполняется в формате "<ИмяОтчета>/<ИмяВарианта>". +// Если передать "*", то будут сброшены настройки всех отчетов конфигурации. +// ТипыНастроек - Структура - Необязательный. Типы пользовательских настроек, которые требуется сбросить. +// Ключи структуры тоже являются необязательными. Значение по умолчанию указано в скобках. +// * ЭлементОтбора - Булево - (Ложь) Сбрасывать настройку "ЭлементОтбораКомпоновкиДанных". +// * ЗначениеПараметраНастроек - Булево - (Ложь) Сбрасывать настройку "ЗначениеПараметраНастроекКомпоновкиДанных". +// * ВыбранныеПоля - Булево - (берется из ключа Прочие) Сбрасывать настройку "ВыбранныеПоляКомпоновкиДанных". +// * Порядок - Булево - (берется из ключа Прочие) Сбрасывать настройку "ПорядокКомпоновкиДанных". +// * ЭлементУсловногоОформления - Булево - (берется из ключа Прочие) Сбрасывать настройку "ЭлементУсловногоОформленияКомпоновкиДанных". +// * Прочие - Булево - (Истина) Сбрасывать прочие настройки, не описанные в структуре явно. +// +Процедура СброситьПользовательскиеНастройки(Ключ, ТипыНастроек = Неопределено) Экспорт + КлючиВариантов = Новый Массив; + Запрос = Новый Запрос; + ШаблонЗапроса = + "ВЫБРАТЬ + | ВариантыОтчетов.Отчет.Имя КАК ИмяОтчета, + | ВариантыОтчетов.КлючВарианта + |ИЗ + | Справочник.ВариантыОтчетов КАК ВариантыОтчетов + |ГДЕ + | &Условие"; + Если Ключ = "*" Тогда + Запрос.Текст = СтрЗаменить(ШаблонЗапроса, "&Условие", "ТипОтчета = ЗНАЧЕНИЕ(Перечисление.ТипыОтчетов.Внутренний)"); + ИначеЕсли ТипЗнч(Ключ) = Тип("ОбъектМетаданных") Тогда + Запрос.Текст = СтрЗаменить(ШаблонЗапроса, "&Условие", "Отчет = &Отчет"); + Запрос.УстановитьПараметр("Отчет", ОбщегоНазначения.ИдентификаторОбъектаМетаданных(Ключ)); + ИначеЕсли ТипЗнч(Ключ) = Тип("СправочникСсылка.ВариантыОтчетов") Тогда + Запрос.Текст = СтрЗаменить(ШаблонЗапроса, "&Условие", "Ссылка = &Ссылка"); + Запрос.УстановитьПараметр("Ссылка", Ключ); + ИначеЕсли ТипЗнч(Ключ) = Тип("Строка") Тогда + КлючиВариантов.Добавить(Ключ); + Иначе + ВызватьИсключение НСтр("ru = 'Некорректное значение параметра ""Отчет""'"); + КонецЕсли; + Если Не ПустаяСтрока(Запрос.Текст) Тогда + Выборка = Запрос.Выполнить().Выбрать(); + Пока Выборка.Следующий() Цикл + КлючиВариантов.Добавить(Выборка.ИмяОтчета +"/"+ Выборка.КлючВарианта); + КонецЦикла; + КонецЕсли; + + Если ТипыНастроек = Неопределено Тогда + ТипыНастроек = Новый Структура; + КонецЕсли; + ВариантыОтчетовКлиентСервер.ДополнитьСтруктуруКлючом(ТипыНастроек, "ЭлементОтбора", Истина); + ВариантыОтчетовКлиентСервер.ДополнитьСтруктуруКлючом(ТипыНастроек, "ЗначениеПараметраНастроек", Истина); + СбрасыватьПрочие = ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(ТипыНастроек, "Прочие", Истина); + + Для Каждого ПолноеИмяВарианта Из КлючиВариантов Цикл + КлючОбъекта = "Отчет." + ПолноеИмяВарианта + "/ТекущиеПользовательскиеНастройки"; + ВыборкаХранилища = ХранилищеСистемныхНастроек.Выбрать(Новый Структура("КлючОбъекта", КлючОбъекта)); + ОшибокЧтенияПодряд = 0; + Пока Истина Цикл + Попытка + ЭлементВыборкиПолучен = ВыборкаХранилища.Следующий(); + ОшибокЧтенияПодряд = 0; + Исключение + ЭлементВыборкиПолучен = Неопределено; + ОшибокЧтенияПодряд = ОшибокЧтенияПодряд + 1; + ОшибкаПоВарианту( + Неопределено, + НСтр("ru = 'В процессе выборки пользовательских настроек отчетов из системного хранилища возникла ошибка:'") + + Символы.ПС + + ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); + КонецПопытки; + + Если ЭлементВыборкиПолучен = Ложь Тогда + Прервать; + ИначеЕсли ЭлементВыборкиПолучен = Неопределено Тогда + Если ОшибокЧтенияПодряд > 100 Тогда + Прервать; + Иначе + Продолжить; + КонецЕсли; + КонецЕсли; + + ПользовательскиеНастройкиКД = ВыборкаХранилища.Настройки; + Если ТипЗнч(ПользовательскиеНастройкиКД) <> Тип("ПользовательскиеНастройкиКомпоновкиДанных") Тогда + Продолжить; + КонецЕсли; + ЕстьИзменения = Ложь; + Количество = ПользовательскиеНастройкиКД.Элементы.Количество(); + Для Номер = 1 По Количество Цикл + ОбратныйИндекс = Количество - Номер; + ПользовательскаяНастройкаКД = ПользовательскиеНастройкиКД.Элементы[ОбратныйИндекс]; + Тип = ОтчетыКлиентСервер.ТипНастройкиСтрокой(ТипЗнч(ПользовательскаяНастройкаКД)); + Если ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(ТипыНастроек, Тип, СбрасыватьПрочие) = Истина Тогда + ПользовательскиеНастройкиКД.Элементы.Удалить(ОбратныйИндекс); + ЕстьИзменения = Истина; + КонецЕсли; + КонецЦикла; + Если ЕстьИзменения Тогда + ОбщегоНазначения.ХранилищеСистемныхНастроекСохранить( + ВыборкаХранилища.КлючОбъекта, + ВыборкаХранилища.КлючНастроек, + ПользовательскиеНастройкиКД, + , + ВыборкаХранилища.Пользователь); + КонецЕсли; + КонецЦикла; + КонецЦикла; +КонецПроцедуры + // Переносит пользовательские варианты из стандартного хранилища вариантов в хранилище подсистемы. // Используется при частичном внедрении - когда ХранилищеВариантовОтчетов установлено не для всей конфигурации, // а в свойствах конкретных отчетов, подключенных к подсистеме. @@ -715,7 +852,7 @@ // // Параметры: // Настройки - Коллекция - Используется для описания настроек отчетов и вариантов - // см. описание к ВариантыОтчетов.ДеревоНастроекВариантовОтчетовКонфигурации(). + // см. описание к ВариантыОтчетов.ДеревоПредопределенных(). // // Описание: // См. ВариантыОтчетовПереопределяемый.НастроитьВариантыОтчетов(). @@ -758,6 +895,9 @@ Событие = "СтандартныеПодсистемы.БазоваяФункциональность\ПриПолученииОбязательныхОбъектовПланаОбмена"; СерверныеОбработчики[Событие].Добавить(СерверныйМодуль); + Событие = "СтандартныеПодсистемы.БазоваяФункциональность\ПриДобавленииПараметровРаботыКлиентаПриЗапуске"; + СерверныеОбработчики[Событие].Добавить(СерверныйМодуль); + Если ОбщегоНазначения.ПодсистемаСуществует("ТехнологияСервиса.ВыгрузкаЗагрузкаДанных") Тогда Событие = "ТехнологияСервиса.ВыгрузкаЗагрузкаДанных\ПриЗаполненииТиповОбщихДанныхПоддерживающихСопоставлениеСсылокПриЗагрузке"; СерверныеОбработчики[Событие].Добавить(СерверныйМодуль); @@ -786,7 +926,7 @@ Обработчик.УправлениеОбработчиками = Истина; Обработчик.РежимВыполнения = "Оперативно"; Обработчик.Версия = "*"; - Обработчик.Процедура = "ВариантыОтчетов.ОбновитьОбщиеДанные"; + Обработчик.Процедура = "ВариантыОтчетов.ОперативноеОбновлениеОбщихДанныхКонфигурации"; Обработчик.Приоритет = 90; //////////////////////////////////////////////////////////////////////////////// @@ -815,7 +955,7 @@ Обработчик = Обработчики.Добавить(); Обработчик.РежимВыполнения = "Оперативно"; Обработчик.Версия = "*"; - Обработчик.Процедура = "ВариантыОтчетов.ОбновитьРазделенныеДанные"; + Обработчик.Процедура = "ВариантыОтчетов.ОперативноеОбновлениеРазделенныхДанныхКонфигурации"; Обработчик.Приоритет = 70; //////////////////////////////////////////////////////////////////////////////// @@ -825,21 +965,23 @@ Если РазрешеноИндексированиеНеразделенныхДанных() Тогда Обработчик = Обработчики.Добавить(); Обработчик.РежимВыполнения = ?(ОбщегоНазначенияПовтИсп.РазделениеВключено(), "Оперативно", "Отложенно"); + Обработчик.Идентификатор = Новый УникальныйИдентификатор("0a485fd0-d72b-434f-917a-9c63a40f69cb"); Обработчик.ОбщиеДанные = Истина; Обработчик.Версия = "*"; - Обработчик.Процедура = "ВариантыОтчетов.ОтложенноеИнкрементальноеОбновлениеОбщихДанных"; - Обработчик.Комментарий = НСтр("ru = 'Инкрементальное обновление индекса поиска отчетов, предусмотренных в программе. + Обработчик.Процедура = "ВариантыОтчетов.ОтложенноеОбновлениеОбщихДанныхКонфигурацииИнкрементальное"; + Обработчик.Комментарий = НСтр("ru = 'Обновление индекса поиска отчетов, предусмотренных в программе. |Поиск отчетов временно недоступен.'"); КонецЕсли; // 3.2. Заполнить информацию для поиска вариантов отчетов. Обработчик = Обработчики.Добавить(); Обработчик.РежимВыполнения = "Отложенно"; + Обработчик.Идентификатор = Новый УникальныйИдентификатор("814d41ec-82e2-4d25-9334-8335e589fc1f"); Обработчик.ОбщиеДанные = Ложь; Обработчик.Версия = "2.2.3.31"; Обработчик.Процедура = "ВариантыОтчетов.СократитьКоличествоБыстрыхНастроек"; Обработчик.Комментарий = НСтр("ru = 'Уменьшает количество быстрых настроек - |в пользовательских отчетах до 2 шт.'"); + |в пользовательских отчетах до 2 шт.'"); КонецПроцедуры @@ -899,6 +1041,15 @@ КонецПроцедуры +// Заполняет параметры, которые используется клиентским кодом на запуске конфигурации. +// +// Параметры: +// Параметры - Структура - Параметры запуска. +// +Процедура ПриДобавленииПараметровРаботыКлиентаПриЗапуске(Параметры) Экспорт + Параметры.Вставить("ВариантыОтчетов", Новый ФиксированнаяСтруктура(ПараметрыКлиента())); +КонецПроцедуры + //////////////////////////////////////////////////////////////////////////////// // Обработчики условных вызовов. @@ -912,65 +1063,70 @@ // // Возвращаемое значение: // Структура - Параметры отчета, в том числе Объект отчета. -// * Объект - ОтчетОбъект.<Имя отчета>, ВнешнийОтчет - Объект отчета. -// * Имя - Строка - Имя объекта отчета. -// * Метаданные - ОбъектМетаданных - Объект метаданных отчета. -// * Ссылка - Произвольный - Ссылка отчета. -// * Ошибки - Строка - Текст ошибки. +// * Объект - ОтчетОбъект.<Имя отчета>, ВнешнийОтчет - Объект отчета. +// * Имя - Строка - Имя объекта отчета. +// * Метаданные - ОбъектМетаданных - Объект метаданных отчета. +// * Ссылка - Произвольный - Ссылка отчета. +// * Успех - Булево - Истина если удалось подключить отчет. +// * ТекстОшибки - Строка - Текст ошибки. // // Места использования: // РассылкаОтчетов.ИнициализироватьОтчет(). // -Функция ПодключитьОтчетОбъект(СсылкаВариантаИлиОтчета) Экспорт - Результат = Новый Структура; - Результат.Вставить("Объект", Неопределено); - Результат.Вставить("Имя", ""); - Результат.Вставить("ПолноеИмя", ""); - Результат.Вставить("Метаданные", Неопределено); - Результат.Вставить("Ссылка", Неопределено); - Результат.Вставить("Подключен", Ложь); - Результат.Вставить("Ошибки", ""); +Функция ПодключитьОтчетОбъект(СсылкаВариантаИлиОтчета, ПолучатьМетаданные) Экспорт + Результат = Новый Структура("Объект, Имя, ПолноеИмя, Метаданные, Ссылка, ТекстОшибки"); + Результат.Вставить("Успех", Ложь); - Если ТипЗнч(СсылкаВариантаИлиОтчета) = Тип("СправочникСсылка.ВариантыОтчетов") Тогда + Если СсылкаВариантаИлиОтчета = Неопределено Тогда + Результат.ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'В методе ""%1"" не указан параметр ""%2"".'"), + "ПодключитьОтчетОбъект", + "СсылкаВариантаИлиОтчета"); + Возврат Результат; + ИначеЕсли ТипЗнч(СсылкаВариантаИлиОтчета) = Тип("СправочникСсылка.ВариантыОтчетов") Тогда Результат.Ссылка = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(СсылкаВариантаИлиОтчета, "Отчет"); + Если Результат.Ссылка = Неопределено Тогда + Результат.ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Вариант отчета ""%1"" не найден в программе'"), + Строка(СсылкаВариантаИлиОтчета)); + Возврат Результат; + КонецЕсли; Иначе Результат.Ссылка = СсылкаВариантаИлиОтчета; КонецЕсли; - Если Результат.Ссылка = Неопределено Тогда - Результат.Ошибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Вариант отчета ""%1"" не найден в программе'"), - Строка(СсылкаВариантаИлиОтчета)); - Возврат Результат; - ИначеЕсли ТипЗнч(Результат.Ссылка) = Тип("Строка") Тогда - Результат.Ошибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + Если ТипЗнч(Результат.Ссылка) = Тип("Строка") Тогда + Результат.ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Для варианта ""%1"" отчет ""%2"" записан как внешний и не может быть подключен из программы'"), Строка(СсылкаВариантаИлиОтчета), Результат.Ссылка); Возврат Результат; КонецЕсли; - Если ТипЗнч(Результат.Ссылка) = Тип("СправочникСсылка.ИдентификаторыОбъектовМетаданных") Тогда + Если ТипЗнч(Результат.Ссылка) = Тип("СправочникСсылка.ИдентификаторыОбъектовМетаданных") + Или ТипЗнч(Результат.Ссылка) = Тип("СправочникСсылка.ИдентификаторыОбъектовРасширений") Тогда Результат.Имя = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(Результат.Ссылка, "Имя"); - Результат.Метаданные = Метаданные.Отчеты.Найти(Результат.Имя); - Если Результат.Метаданные = Неопределено Тогда - Результат.Ошибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Для варианта ""%1"" отчет ""%2"" не найден в программе'"), - Строка(СсылкаВариантаИлиОтчета), - Результат.Имя); - Возврат Результат; + Если ПолучатьМетаданные Тогда + Результат.Метаданные = Метаданные.Отчеты.Найти(Результат.Имя); + Если Результат.Метаданные = Неопределено Тогда + Результат.ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Для варианта ""%1"" отчет ""%2"" не найден в программе'"), + Строка(СсылкаВариантаИлиОтчета), + Результат.Имя); + Возврат Результат; + КонецЕсли; КонецЕсли; Результат.Объект = Отчеты[Результат.Имя].Создать(); - Результат.Подключен = Истина; + Результат.Успех = Истина; Иначе Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ДополнительныеОтчетыИОбработки") Тогда МодульДополнительныеОтчетыИОбработки = ОбщегоНазначения.ОбщийМодуль("ДополнительныеОтчетыИОбработки"); - МодульДополнительныеОтчетыИОбработки.ПриПодключенииДопОтчета(Результат.Ссылка, Результат, Результат.Подключен); + МодульДополнительныеОтчетыИОбработки.ПриПодключенииДопОтчета(Результат.Ссылка, Результат, Результат.Успех, ПолучатьМетаданные); КонецЕсли; КонецЕсли; - Если Результат.Подключен Тогда + Если Результат.Успех И ПолучатьМетаданные Тогда Результат.ПолноеИмя = Результат.Метаданные.ПолноеИмя(); КонецЕсли; @@ -1164,12 +1320,12 @@ // Поиск связи вариантов отчетов с этой функциональной опцией. Если Не ПеременныеИнициализированы Тогда ПеременныеИнициализированы = Истина; - ТаблицаОпций = Константы.ПараметрыВариантовОтчетов.Получить().Получить().ТаблицаФункциональныхОпций; + ТаблицаОпций = ВариантыОтчетовПовтИсп.Параметры().ТаблицаФункциональныхОпций; ИмяСобытия = ВариантыОтчетовКлиентСервер.ИмяСобытияИзменениеВарианта(); КонецЕсли; Если ТаблицаОпций.Найти(ФункциональнаяОпцияМетаданные.Имя, "ИмяФункциональнойОпции") <> Неопределено Тогда - СтандартныеПодсистемыКлиентСервер.РезультатВыполненияДобавитьОповещениеОткрытыхФорм(Результат, ИмяСобытия); + СтандартныеПодсистемыКлиентСервер.ОповеститьОткрытыеФормы(Результат, ИмяСобытия); Возврат; КонецЕсли; @@ -1177,7 +1333,7 @@ Для Каждого ЭлементСоставаФункциональнойОпции Из ФункциональнаяОпцияМетаданные.Состав Цикл Если ТипЗнч(ЭлементСоставаФункциональнойОпции.Объект) = Тип("ОбъектМетаданных") И Метаданные.Отчеты.Содержит(ЭлементСоставаФункциональнойОпции.Объект) Тогда - СтандартныеПодсистемыКлиентСервер.РезультатВыполненияДобавитьОповещениеОткрытыхФорм(Результат, ИмяСобытия); + СтандартныеПодсистемыКлиентСервер.ОповеститьОткрытыеФормы(Результат, ИмяСобытия); Возврат; КонецЕсли; КонецЦикла; @@ -1187,7 +1343,6 @@ КонецПроцедуры - // Определить список справочников, доступных для загрузки с помощью подсистемы "Загрузка данных из файла". // // Параметры: @@ -1223,6 +1378,103 @@ Объекты.Вставить(Метаданные.Справочники.ВариантыОтчетов.ПолноеИмя(), "РеквизитыРедактируемыеВГрупповойОбработке"); Объекты.Вставить(Метаданные.Справочники.ПользовательскиеНастройкиОтчетов.ПолноеИмя(), "РеквизитыРедактируемыеВГрупповойОбработке"); Объекты.Вставить(Метаданные.Справочники.ПредопределенныеВариантыОтчетов.ПолноеИмя(), "РеквизитыРедактируемыеВГрупповойОбработке"); + Объекты.Вставить(Метаданные.Справочники.ПредопределенныеВариантыОтчетовРасширений.ПолноеИмя(), "РеквизитыРедактируемыеВГрупповойОбработке"); +КонецПроцедуры + +// Формирует параметры открытия формы отчета. +// Используется перед вызовом ВариантыОтчетовКлиент.ОткрытьФормуОтчета(). +// +// Параметры: +// ВариантСсылка - СправочникСсылка.ВариантыОтчетов - Ссылка открываемого варианта отчета. +// +Функция ПараметрыОткрытия(ВариантСсылка) Экспорт + ТекстЗапроса = + "ВЫБРАТЬ РАЗРЕШЕННЫЕ + | ВариантыОтчетов.Отчет, + | ВариантыОтчетов.ТипОтчета, + | ВариантыОтчетов.Отчет.Имя КАК ИмяОтчета, + | ВариантыОтчетов.КлючВарианта, + | ВариантыОтчетов.ПредопределенныйВариант.КлючЗамеров КАК КлючЗамеров + |ИЗ + | Справочник.ВариантыОтчетов КАК ВариантыОтчетов + |ГДЕ + | ВариантыОтчетов.Ссылка = &Ссылка"; + + Запрос = Новый Запрос; + Запрос.УстановитьПараметр("Ссылка", ВариантСсылка); + Запрос.Текст = ТекстЗапроса; + + Выборка = Запрос.Выполнить().Выбрать(); + Если Не Выборка.Следующий() Тогда + ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Недостаточно прав для открытия варианта ""%1"".'"), Строка(ВариантСсылка)); + КонецЕсли; + + ПараметрыОткрытия = Новый Структура("Ссылка, Отчет, ТипОтчета, ИмяОтчета, КлючВарианта, КлючЗамеров"); + ЗаполнитьЗначенияСвойств(ПараметрыОткрытия, Выборка); + ПараметрыОткрытия.Ссылка = ВариантСсылка; + ПараметрыОткрытия.ТипОтчета = ВариантыОтчетовКлиентСервер.ТипОтчетаСтрокой(Выборка.ТипОтчета, Выборка.Отчет); + + ПриПодключенииОтчета(ПараметрыОткрытия); + + Возврат ПараметрыОткрытия; +КонецФункции + +// Подключение дополнительных отчетов. +Процедура ПриПодключенииОтчета(ПараметрыОткрытия) Экспорт + + ПараметрыОткрытия.Вставить("Подключен", Ложь); + + Если ПараметрыОткрытия.ТипОтчета = "Внутренний" Тогда + ПараметрыОткрытия.Подключен = Истина; // Отчеты конфигурации всегда подключены. + ИначеЕсли ПараметрыОткрытия.ТипОтчета = "Расширение" Тогда + Если Метаданные.Отчеты.Найти(ПараметрыОткрытия.ИмяОтчета) = Неопределено Тогда + СтандартныеПодсистемыКлиентСервер.ВывестиПредупреждение(ПараметрыОткрытия, + НСтр("ru = 'Отчет ""%1"" не найден в программе. + |Возможно, расширение с отчетом было отключено.'")); + Иначе + ПараметрыОткрытия.Подключен = Истина; + КонецЕсли; + ИначеЕсли ПараметрыОткрытия.ТипОтчета = "Дополнительный" Тогда + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ДополнительныеОтчетыИОбработки") Тогда + МодульДополнительныеОтчетыИОбработки = ОбщегоНазначения.ОбщийМодуль("ДополнительныеОтчетыИОбработки"); + МодульДополнительныеОтчетыИОбработки.ПриПодключенииОтчета(ПараметрыОткрытия); + Иначе + СтандартныеПодсистемыКлиентСервер.ВывестиПредупреждение(ПараметрыОткрытия, + НСтр("ru = 'Невозможно открыть вариант дополнительного отчета'"), + НСтр("ru = 'Не внедрена обслуживающая подсистема.'")); + КонецЕсли; + КонецЕсли; + +КонецПроцедуры + +// См. описание в процедуре ЗаполнитьВсеПараметрыРаботыРасширений +// общего модуля СтандартныеПодсистемыСервер. +// +Процедура ПриЗаполненииВсехПараметровРаботыРасширений() Экспорт + + Настройки = Новый Структура; + Настройки.Вставить("Конфигурация", Ложь); + Настройки.Вставить("Расширения", Истина); + + Настройки.Вставить("ОбщиеДанные", Истина); + Настройки.Вставить("РазделенныеДанные", Истина); + Настройки.Вставить("Оперативное", Истина); + Настройки.Вставить("Отложенное", Истина); + Настройки.Вставить("Полное", Истина); + + Обновить(Настройки); + +КонецПроцедуры + +// См. описание в процедуре ОчиститьВсеПараметрыРаботыРасширений +// общего модуля СтандартныеПодсистемыСервер. +// +Процедура ПриОчисткеВсехПараметровРаботыРасширений() Экспорт + + НаборЗаписей = РегистрыСведений.ПредопределенныеВариантыОтчетовВерсийРасширений.СоздатьНаборЗаписей(); + НаборЗаписей.Отбор.ВерсияРасширений.Установить(ПараметрыСеанса.ВерсияРасширений); + НаборЗаписей.Записать(); + КонецПроцедуры //////////////////////////////////////////////////////////////////////////////// @@ -1230,109 +1482,466 @@ // Актуализирует данные подсистемы с учетом режима работы программы. // Пример использования: после очистки хранилищ настроек. -Процедура Обновить(Настройки = Неопределено) Экспорт +// +// Параметры: +// Настройки - Структура - Необязательный. Настройки обновления. +// * Конфигурация - Булево - Необязательный. Обновлять кэши метаданных конфигурации. +// * Расширения - Булево - Необязательный. Обновлять кэши метаданных расширений. +// * ОбщиеДанные - Булево - Необязательный. Обновлять неразделенные данные. +// * РазделенныеДанные - Булево - Необязательный. Обновлять разделенные данные. +// * Оперативное - Булево - Необязательный. Оперативное обновление данных. +// * Отложенное - Булево - Необязательный. Отложенное обновление данных. +// * Полное - Булево - Необязательный. Не учитывать хеш-суммы при отложенном обновление данных. +// +// На развитие: +// * ТипОтчета - Строка - "*", "Внутренний", "Расширения" - Обязательный. Обновлять кэши метаданных конфигурации. +// * ТипДанных - Строка - "*", "ОперативныеОбщие", "ОперативныеПользовательские", "ОтложенныеИнкрементально", "ОтложенныеПолностью" - Обязательный. Какие данные обновлять. +// Данные обновляются с учетом текущего разделения. +// Из разделенного сеанса - только разделенные данные, из неразделенного - только неразделенные. +// +Функция Обновить(Настройки = Неопределено) Экспорт Если Настройки = Неопределено Тогда - Настройки = Новый Структура("ОбщиеДанные, РазделенныеДанные"); - + Настройки = Новый Структура; + КонецЕсли; + + ПоУмолчанию = Новый Структура("Конфигурация, Расширения, ОбщиеДанные, РазделенныеДанные, Оперативное, Отложенное, Полное"); + Если Настройки.Количество() < ПоУмолчанию.Количество() Тогда РежимРаботы = ОбщегоНазначенияПовтИсп.РежимРаботыПрограммы(); Если РежимРаботы.МодельСервиса Тогда - Если ОбщегоНазначения.ИспользованиеРазделителяСеанса() Тогда - Настройки.ОбщиеДанные = Ложь; - Настройки.РазделенныеДанные = Истина; - Иначе - Настройки.ОбщиеДанные = Истина; - Настройки.РазделенныеДанные = Ложь; + Если ОбщегоНазначения.ИспользованиеРазделителяСеанса() Тогда // Разделенный сеанс. + ПоУмолчанию.ОбщиеДанные = Ложь; + ПоУмолчанию.РазделенныеДанные = Истина; + Иначе // Неразделенный сеанс. + ПоУмолчанию.ОбщиеДанные = Истина; + ПоУмолчанию.РазделенныеДанные = Ложь; КонецЕсли; Иначе - Если РежимРаботы.Автономный Тогда - Настройки.ОбщиеДанные = Ложь; - Настройки.РазделенныеДанные = Истина; - Иначе - Настройки.ОбщиеДанные = Истина; - Настройки.РазделенныеДанные = Истина; + Если РежимРаботы.Автономный Тогда // АРМ. + ПоУмолчанию.ОбщиеДанные = Ложь; + ПоУмолчанию.РазделенныеДанные = Истина; + Иначе // Коробка. + ПоУмолчанию.ОбщиеДанные = Истина; + ПоУмолчанию.РазделенныеДанные = Истина; + КонецЕсли; + КонецЕсли; + ПоУмолчанию.Конфигурация = Истина; + ПоУмолчанию.Расширения = ПоУмолчанию.РазделенныеДанные; + ПоУмолчанию.Оперативное = Истина; + ПоУмолчанию.Отложенное = Ложь; + ПоУмолчанию.Полное = Ложь; + ОбщегоНазначенияКлиентСервер.ДополнитьСтруктуру(Настройки, ПоУмолчанию, Ложь); + КонецЕсли; + + Результат = Новый Структура; + Результат.Вставить("ЕстьИзменения", Ложь); + + Если Настройки.Оперативное Тогда + + Если Настройки.ОбщиеДанные Тогда + + Если Настройки.Конфигурация Тогда + ПромежуточныйРезультат = ОперативноеОбновлениеОбщихДанных("ОбщиеДанныеКонфигурации", Неопределено); + Результат.Вставить("Оперативное_ОбщиеДанные_Конфигурация", ПромежуточныйРезультат); + Если ПромежуточныйРезультат <> Неопределено И ПромежуточныйРезультат.ЕстьИзменения Тогда + Результат.ЕстьИзменения = Истина; + КонецЕсли; + КонецЕсли; + + Если Настройки.Расширения Тогда + ПромежуточныйРезультат = ОперативноеОбновлениеОбщихДанных("ОбщиеДанныеРасширений", Неопределено); + Результат.Вставить("Оперативное_ОбщиеДанные_Расширения", ПромежуточныйРезультат); + Если ПромежуточныйРезультат <> Неопределено И ПромежуточныйРезультат.ЕстьИзменения Тогда + Результат.ЕстьИзменения = Истина; + КонецЕсли; + КонецЕсли; + + КонецЕсли; + + Если Настройки.РазделенныеДанные Тогда + + Если Настройки.Конфигурация Тогда + ПромежуточныйРезультат = ОперативноеОбновлениеРазделенныхДанных("РазделенныеДанныеКонфигурации"); + Результат.Вставить("Оперативное_РазделенныеДанные_Конфигурация", ПромежуточныйРезультат); + Если ПромежуточныйРезультат <> Неопределено И ПромежуточныйРезультат.ЕстьИзменения Тогда + Результат.ЕстьИзменения = Истина; + КонецЕсли; + КонецЕсли; + + Если Настройки.Расширения Тогда + ПромежуточныйРезультат = ОперативноеОбновлениеРазделенныхДанных("РазделенныеДанныеРасширений"); + Результат.Вставить("Оперативное_РазделенныеДанные_Расширения", ПромежуточныйРезультат); + Если ПромежуточныйРезультат <> Неопределено И ПромежуточныйРезультат.ЕстьИзменения Тогда + Результат.ЕстьИзменения = Истина; + КонецЕсли; + КонецЕсли; + + КонецЕсли; + + КонецЕсли; + + Если Настройки.Отложенное Тогда + + Если Настройки.ОбщиеДанные Тогда + + Если Настройки.Конфигурация Тогда + ПромежуточныйРезультат = ОтложенноеОбновлениеДанных("ОбщиеДанныеКонфигурации", Настройки.Полное); + Результат.Вставить("Отложенное_ОбщиеДанные_Конфигурация", ПромежуточныйРезультат); + Если ПромежуточныйРезультат <> Неопределено И ПромежуточныйРезультат.ЕстьИзменения Тогда + Результат.ЕстьИзменения = Истина; + КонецЕсли; + КонецЕсли; + + Если Настройки.Расширения Тогда + ПромежуточныйРезультат = ОтложенноеОбновлениеДанных("ОбщиеДанныеРасширений", Настройки.Полное); + Результат.Вставить("Отложенное_ОбщиеДанные_Расширения", ПромежуточныйРезультат); + Если ПромежуточныйРезультат <> Неопределено И ПромежуточныйРезультат.ЕстьИзменения Тогда + Результат.ЕстьИзменения = Истина; + КонецЕсли; + КонецЕсли; + + КонецЕсли; + + Если Настройки.РазделенныеДанные Тогда + + Если Настройки.Конфигурация Тогда + ПромежуточныйРезультат = ОтложенноеОбновлениеДанных("РазделенныеДанныеКонфигурации", Настройки.Полное); + Результат.Вставить("Отложенное_РазделенныеДанные_Конфигурация", ПромежуточныйРезультат); + Если ПромежуточныйРезультат <> Неопределено И ПромежуточныйРезультат.ЕстьИзменения Тогда + Результат.ЕстьИзменения = Истина; + КонецЕсли; + КонецЕсли; + + Если Настройки.Расширения Тогда + ПромежуточныйРезультат = ОтложенноеОбновлениеДанных("РазделенныеДанныеРасширений", Настройки.Полное); + Результат.Вставить("Отложенное_РазделенныеДанные_Расширения", ПромежуточныйРезультат); + Если ПромежуточныйРезультат <> Неопределено И ПромежуточныйРезультат.ЕстьИзменения Тогда + Результат.ЕстьИзменения = Истина; + КонецЕсли; + КонецЕсли; + + КонецЕсли; + + КонецЕсли; + + Возврат Результат; +КонецФункции + +// См. описание процедуры СтандартныеПодсистемыСервер.СобратьСтатистикуКонфигурации. +Процедура СобратьСтатистикуКонфигурации() Экспорт + + Если Не ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ЦентрМониторинга") Тогда + Возврат; + КонецЕсли; + + МодульЦентрМониторинга = ОбщегоНазначения.ОбщийМодуль("ЦентрМониторинга"); + + ТекстЗапроса = + "ВЫБРАТЬ + | КОЛИЧЕСТВО(1) КАК Количество + |ИЗ + | Справочник.ВариантыОтчетов КАК ВариантыОтчетов + |ГДЕ + | ВариантыОтчетов.Пользовательский"; + + Запрос = Новый Запрос(ТекстЗапроса); + Выборка = Запрос.Выполнить().Выбрать(); + Выборка.Следующий(); + + МодульЦентрМониторинга.ЗаписатьСтатистикуОбъектаКонфигурации("Справочник.ВариантыОтчетов.Пользовательский", Выборка.Количество()); + +КонецПроцедуры + +// Формирует отчет с указанными параметрами. +// +// Параметры: +// Параметры - Структура - Настройки отчета. +// ПроверятьЗаполнение - Булево - Если Истина то перед формированием будет проведена проверка заполнения. +// ПолучатьФлажокПустой - Булево - Если Истина то после формирования будет проведен анализ заполненности. +// +// Возвращаемое значение: +// Структура - Результат формирования. +// +// Места использования: +// РассылкаОтчетов.СформироватьОтчет(). +// +// См. также: +// <Метод>(). +// +Функция СформироватьОтчет(Знач Параметры, Знач ПроверятьЗаполнение, Знач ПолучатьФлажокПустой) Экспорт + Результат = Новый Структура("ТекстОшибки, Расшифровка, НастройкиКД, ПользовательскиеНастройкиКД"); + + ОбщегоНазначенияКлиентСервер.ДополнитьСтруктуру(Результат, Параметры, Истина); + + Результат.Вставить("Успех", Ложь); + Результат.Вставить("ТабличныйДокумент", Новый ТабличныйДокумент); + Результат.Вставить("ВариантМодифицирован", Ложь); + Результат.Вставить("ПользовательскиеНастройкиМодифицированы", Ложь); + + ПодключитьОтчетОбъект = Не Результат.Свойство("ОтчетОбъект"); + ЗачитатьОтчетСсылка = ПодключитьОтчетОбъект И Не Результат.Свойство("ОтчетСсылка"); + ЗачитатьОбщиеНастройки = Не Результат.Свойство("НастройкиКД"); + ЗачитатьКлючВарианта = Не Результат.Свойство("КлючВарианта"); + + Если ЗачитатьОтчетСсылка Или ЗачитатьОбщиеНастройки Или ЗачитатьКлючВарианта Тогда + ВариантСсылка = ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(Результат, "ВариантСсылка"); + Если ВариантСсылка = Неопределено Тогда + Если ЗачитатьОтчетСсылка Тогда + Результат.ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'В методе ""%1"" не указан ни один из параметров ""%2"".'"), + "СформироватьОтчет", + "Параметры.ВариантСсылка, Параметры.ОтчетСсылка, Параметры.ОтчетОбъект"); + Возврат Результат; + КонецЕсли; + Если ЗачитатьКлючВарианта Тогда + Результат.Вставить("КлючВарианта", Неопределено); + КонецЕсли; + Иначе + Считываемые = Новый Массив; + Если ЗачитатьОтчетСсылка Тогда + Считываемые.Добавить("Отчет"); + КонецЕсли; + Если ЗачитатьОбщиеНастройки Тогда + Считываемые.Добавить("Настройки"); + КонецЕсли; + Если ЗачитатьКлючВарианта Тогда + Считываемые.Добавить("КлючВарианта"); + КонецЕсли; + Значения = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(ВариантСсылка, Считываемые); + Если ЗачитатьОтчетСсылка Тогда + Результат.Вставить("ОтчетСсылка", Значения.Отчет); + КонецЕсли; + Если ЗачитатьОбщиеНастройки Тогда + НастройкиКД = Значения.Настройки.Получить(); + Если ТипЗнч(НастройкиКД) = Тип("НастройкиКомпоновкиДанных") Тогда + Результат.Вставить("НастройкиКД", НастройкиКД); + КонецЕсли; + КонецЕсли; + Если ЗачитатьКлючВарианта Тогда + Результат.Вставить("КлючВарианта", Значения.КлючВарианта); КонецЕсли; КонецЕсли; КонецЕсли; - Если Настройки.ОбщиеДанные = Истина Тогда - ПараметрыОбновления = Новый Структура("РазделенныеОбработчики"); - ПараметрыОбновления.РазделенныеОбработчики = ОбновлениеИнформационнойБазы.НоваяТаблицаОбработчиковОбновления(); - ОбновитьОбщиеДанные(ПараметрыОбновления); - ОтложенноеПолноеОбновлениеОбщихДанных(ПараметрыОбновления); + Если ПодключитьОтчетОбъект Тогда + Подключение = ПодключитьОтчетОбъект(Результат.ОтчетСсылка, Ложь); + Результат.Вставить("Подключение", Подключение); + Если Подключение.Успех Тогда + Результат.Вставить("ОтчетОбъект", Подключение.Объект); + Иначе + Результат.ТекстОшибки = НСтр("ru = 'Не удалось сформировать отчет:'") + Символы.ПС + Подключение.ТекстОшибки; + Возврат Результат; + КонецЕсли; КонецЕсли; - Если Настройки.РазделенныеДанные = Истина Тогда - ОбновитьРазделенныеДанные(); - ОтложенноеПолноеОбновлениеРазделенныхДанных(); + ОтчетОбъект = Результат.ОтчетОбъект; + КомпоновщикНастроекКД = ОтчетОбъект.КомпоновщикНастроек; + + // При загрузке настроек: 1 проверка на тип, 2 проверка на адрес (не на значение). + ФиксированныеНастройкиКД = ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(Результат, "ФиксированныеНастройкиКД"); + Если ТипЗнч(ФиксированныеНастройкиКД) = Тип("НастройкиКомпоновкиДанных") + И КомпоновщикНастроекКД.ФиксированныеНастройки <> ФиксированныеНастройкиКД Тогда + КомпоновщикНастроекКД.ЗагрузитьФиксированныеНастройки(ФиксированныеНастройкиКД); КонецЕсли; -КонецПроцедуры + НастройкиКД = ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(Результат, "НастройкиКД"); + Если ТипЗнч(НастройкиКД) = Тип("НастройкиКомпоновкиДанных") + И КомпоновщикНастроекКД.Настройки <> НастройкиКД Тогда + КомпоновщикНастроекКД.ЗагрузитьНастройки(НастройкиКД); + КонецЕсли; + + ПользовательскиеНастройкиКД = ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(Результат, "ПользовательскиеНастройкиКД"); + Если ТипЗнч(ПользовательскиеНастройкиКД) = Тип("ПользовательскиеНастройкиКомпоновкиДанных") + И КомпоновщикНастроекКД.ПользовательскиеНастройки <> ПользовательскиеНастройкиКД Тогда + КомпоновщикНастроекКД.ЗагрузитьПользовательскиеНастройки(ПользовательскиеНастройкиКД); + КонецЕсли; + + ДопСвойства = КомпоновщикНастроекКД.ПользовательскиеНастройки.ДополнительныеСвойства; + ДопСвойства.Вставить("КлючВарианта", Результат.КлючВарианта); + + Если ПроверятьЗаполнение Тогда + ИсходныеСообщенияПользователю = ПолучитьСообщенияПользователю(Истина); + ПроверкаПройдена = ОтчетОбъект.ПроверитьЗаполнение(); + СообщенияПользователю = ПолучитьСообщенияПользователю(Истина); + Для Каждого Сообщение Из ИсходныеСообщенияПользователю Цикл + Сообщение.Сообщить(); + КонецЦикла; + Если Не ПроверкаПройдена Тогда + Результат.ТекстОшибки = НСтр("ru = 'Отчет не прошел проверку заполнения:'"); + Для Каждого Сообщение Из СообщенияПользователю Цикл + Результат.ТекстОшибки = Результат.ТекстОшибки + Символы.ПС + Сообщение.Текст; + КонецЦикла; + Возврат Результат; + КонецЕсли; + КонецЕсли; + + ИмяКлючевойОперации = ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(Параметры, "ИмяКлючевойОперации", ""); + КомментарийКлючевойОперации = ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(Параметры, "КомментарийКлючевойОперации", ""); + ВыполнятьЗамеры = ИмяКлючевойОперации <> "" И ВыполнятьЗамеры(); + Если ВыполнятьЗамеры Тогда + ВремяНачала = ТекущаяУниверсальнаяДатаВМиллисекундах(); + КонецЕсли; + + ОтчетОбъект.СкомпоноватьРезультат(Результат.ТабличныйДокумент, Результат.Расшифровка); + + Если ВыполнятьЗамеры Тогда + МодульОценкаПроизводительностиКлиентСервер = ОбщегоНазначения.ОбщийМодуль("ОценкаПроизводительностиКлиентСервер"); + МодульОценкаПроизводительностиКлиентСервер.ЗакончитьЗамерВремениТехнологический( + ИмяКлючевойОперации, + ВремяНачала/1000, + КомментарийКлючевойОперации); + КонецЕсли; + + Если ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(ДопСвойства, "ВариантМодифицирован") = Истина Тогда + Результат.ВариантМодифицирован = Истина; + Результат.Вставить("НастройкиКД", КомпоновщикНастроекКД.Настройки); + КонецЕсли; + + Если Результат.ВариантМодифицирован + Или ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(ДопСвойства, "ПользовательскиеНастройкиМодифицированы") = Истина Тогда + Результат.ПользовательскиеНастройкиМодифицированы = Истина; + Результат.Вставить("ПользовательскиеНастройкиКД", КомпоновщикНастроекКД.ПользовательскиеНастройки); + КонецЕсли; + + Если ПолучатьФлажокПустой Тогда + Если ДопСвойства.Свойство("ОтчетПустой") Тогда + Пустой = ДопСвойства.ОтчетПустой; + Иначе + Пустой = ОтчетПустой(ОтчетОбъект); + КонецЕсли; + Результат.Вставить("Пустой", Пустой); + КонецЕсли; + + ДопСвойства.Удалить("ВариантМодифицирован"); + ДопСвойства.Удалить("ПользовательскиеНастройкиМодифицированы"); + ДопСвойства.Удалить("КлючВарианта"); + ДопСвойства.Удалить("ОтчетПустой"); + + Результат.Успех = Истина; + + Возврат Результат; +КонецФункции #КонецОбласти #Область СлужебныеПроцедурыИФункции // Формирует отчет с указанными настройками, используется в фоновых заданиях. -Процедура СформироватьОтчет(ПараметрыФормированияОтчета, АдресХранилища) Экспорт +Процедура СформироватьОтчетВФоне(Параметры, АдресХранилища) Экспорт + Результат = Новый Структура("ТекстОшибки, ТабличныйДокумент, Расшифровка"); + Результат.Вставить("Успех", Ложь); + Результат.Вставить("ВариантМодифицирован", Ложь); + Результат.Вставить("ПользовательскиеНастройкиМодифицированы", Ложь); - ОтчетСсылка = ПараметрыФормированияОтчета.ОтчетСсылка; - Если ТипЗнч(ОтчетСсылка) = Тип("СправочникСсылка.ИдентификаторыОбъектовМетаданных") Тогда - ОтчетОбъект = Отчеты[ОтчетСсылка.Имя].Создать(); - Иначе - ОтчетОбъект = Неопределено; - Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ДополнительныеОтчетыИОбработки") Тогда - МодульДополнительныеОтчетыИОбработки = ОбщегоНазначения.ОбщийМодуль("ДополнительныеОтчетыИОбработки"); - ОтчетОбъект = МодульДополнительныеОтчетыИОбработки.ПолучитьОбъектВнешнейОбработки(ОтчетСсылка); - КонецЕсли; + Формирование = СформироватьОтчет(Параметры, Ложь, Ложь); + ЗаполнитьЗначенияСвойств(Результат, Формирование); + Если Формирование.ВариантМодифицирован Тогда + Результат.Вставить("НастройкиКД", Формирование.НастройкиКД); + КонецЕсли; + Если Формирование.ПользовательскиеНастройкиМодифицированы Тогда + Результат.Вставить("ПользовательскиеНастройкиКД", Формирование.ПользовательскиеНастройкиКД); КонецЕсли; - Если ОтчетОбъект = Неопределено Тогда - ОшибкаПоВарианту(Неопределено, НСтр("ru = 'Не удалось получить объект отчета ""%1""'"), ОтчетСсылка); - Возврат; - КонецЕсли; - - ОтчетОбъект.КомпоновщикНастроек.ЗагрузитьФиксированныеНастройки(ПараметрыФормированияОтчета.ФиксированныеНастройки); - ОтчетОбъект.КомпоновщикНастроек.ЗагрузитьНастройки(ПараметрыФормированияОтчета.Настройки); - ОтчетОбъект.КомпоновщикНастроек.ЗагрузитьПользовательскиеНастройки(ПараметрыФормированияОтчета.ПользовательскиеНастройки); - - ТабличныйДокумент = Новый ТабличныйДокумент; - Расшифровка = Неопределено; - - ОтчетОбъект.СкомпоноватьРезультат(ТабличныйДокумент, Расшифровка); - - ДопСвойства = ОтчетОбъект.КомпоновщикНастроек.ПользовательскиеНастройки.ДополнительныеСвойства; - - РезультатФормирования = Новый Структура; - РезультатФормирования.Вставить("ОтчетТабличныйДокумент", ТабличныйДокумент); - РезультатФормирования.Вставить("ОтчетРасшифровка", Расшифровка); - РезультатФормирования.Вставить("ВариантМодифицирован", Ложь); - РезультатФормирования.Вставить("ПользовательскиеНастройкиМодифицированы", Ложь); - - Если ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(ДопСвойства, "ВариантМодифицирован") = Истина Тогда - РезультатФормирования.ВариантМодифицирован = Истина; - РезультатФормирования.Вставить("НастройкиКД", ОтчетОбъект.КомпоновщикНастроек.Настройки); - КонецЕсли; - - Если РезультатФормирования.ВариантМодифицирован - Или ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(ДопСвойства, "ПользовательскиеНастройкиМодифицированы") = Истина Тогда - РезультатФормирования.ПользовательскиеНастройкиМодифицированы = Истина; - РезультатФормирования.Вставить("ПользовательскиеНастройкиКД", ОтчетОбъект.КомпоновщикНастроек.ПользовательскиеНастройки); - КонецЕсли; - - ДопСвойства.Удалить("ВариантМодифицирован"); - ДопСвойства.Удалить("ПользовательскиеНастройкиМодифицированы"); - ДопСвойства.Удалить("КлючВарианта"); - - ПоместитьВоВременноеХранилище(РезультатФормирования, АдресХранилища); + ПоместитьВоВременноеХранилище(Результат, АдресХранилища); КонецПроцедуры +Функция ОтчетПустой(ОтчетОбъект) + + // Объект для создания макета компоновки данных. + КомпоновщикМакетаКД = Новый КомпоновщикМакетаКомпоновкиДанных; + + // Выполняет компоновку макета. + МакетКД = КомпоновщикМакетаКД.Выполнить(ОтчетОбъект.СхемаКомпоновкиДанных, ОтчетОбъект.КомпоновщикНастроек.ПолучитьНастройки()); + + // Пропуск проверки на то, что отчет пустой. + Если ЕстьВнешнийНаборДанных(МакетКД.НаборыДанных) Тогда + Возврат Ложь; + КонецЕсли; + + // Объект, выполняющий компоновку данных. + ПроцессорКД = Новый ПроцессорКомпоновкиДанных; + + // Инициализировать объект. + ПроцессорКД.Инициализировать(МакетКД, , , Истина); + + // Объект для вывода результата компоновки в табличный документ. + ПроцессорВыводаРезультатаКД = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент; + + // Устанавливает табличный документ, в который нужно выводить результат. + ПроцессорВыводаРезультатаКД.УстановитьДокумент(Новый ТабличныйДокумент); + + // Последовательный вывод + ПроцессорВыводаРезультатаКД.НачатьВывод(); + + // Получает следующий элемент результата компоновки. + ЭлементРезультатаКД = ПроцессорКД.Следующий(); + Пока ЭлементРезультатаКД <> Неопределено Цикл + + // Вывести элемент результата компоновки отчета в документ. + ПроцессорВыводаРезультатаКД.ВывестиЭлемент(ЭлементРезультатаКД); + + // Определить не пустой результат. + Для Каждого ЗначениеПараметраМакетаКД Из ЭлементРезультатаКД.ЗначенияПараметров Цикл + Попытка + ЗначениеЗаполнено = ЗначениеЗаполнено(ЗначениеПараметраМакетаКД.Значение); + Исключение + ЗначениеЗаполнено = Ложь; // Линия, Рамка, Цвет и другие объекты КД, которые могут фигурировать при выводе. + КонецПопытки; + Если ЗначениеЗаполнено Тогда + ПроцессорВыводаРезультатаКД.ЗакончитьВывод(); + Возврат Ложь; + КонецЕсли; + КонецЦикла; + + // Получает следующий элемент результата компоновки. + ЭлементРезультатаКД = ПроцессорКД.Следующий(); + КонецЦикла; + + // Указание объекту о том, что вывод результата завершен. + ПроцессорВыводаРезультатаКД.ЗакончитьВывод(); + + Возврат Истина; +КонецФункции + +// Проверяет наличие внешних наборов данных. +// +// Параметры: +// НаборыДанных - НаборыДанныхМакетаКомпоновкиДанных - Коллекция проверяемых наборов данных. +// +// Возвращаемое значение: +// Булево - Истина если есть внешние наборы данных. +// +Функция ЕстьВнешнийНаборДанных(НаборыДанных) + + Для Каждого НаборДанных Из НаборыДанных Цикл + + Если ТипЗнч(НаборДанных) = Тип("НаборДанныхОбъектМакетаКомпоновкиДанных") Тогда + + Возврат Истина; + + ИначеЕсли ТипЗнч(НаборДанных) = Тип("НаборДанныхОбъединениеМакетаКомпоновкиДанных") Тогда + + Если ЕстьВнешнийНаборДанных(НаборДанных.Элементы) Тогда + + Возврат Истина; + + КонецЕсли; + + КонецЕсли; + + КонецЦикла; + + Возврат Ложь; + +КонецФункции + // Формирует дерево настроек и размещения предопределенных вариантов отчетов. // Только для отчетов, подключенных к подсистеме. // -// Возвращаемое значение: +// Возвращаемое значение: // ДеревоВариантов - ДеревоЗначений - Настройки предопределенных вариантов отчетов, подключенных к подсистеме. -// Реквизиты, открытые для изменения: +// +// Реквизиты для изменения: // * Включен - Булево - Если Ложь, то вариант отчета не регистрируется в подсистеме. // * ВидимостьПоУмолчанию - Булево - Если Ложь, то вариант отчета по умолчанию скрыт в панели отчетов. // * Наименование - Строка - Наименование варианта отчета. @@ -1354,6 +1963,9 @@ // К сожалению, в макетах отсутствует информация о связях полей и их представлений (которая есть в СКД), // поэтому для более точной работы механизма поиска рекомендуется заполнять НаименованияПолей, а не // ИменаМакетов. +// * ФорматНастроекСКД - Булево - Отчет использует типовой формат хранения настроек на механике СКД, +// а его основные формы поддерживают стандартную схему взаимодействия между формами (параметры и тип возвращаемого значения). +// Если Ложь, тогда для отчета отключаются проверки консистентности и некоторые механизмы, которые рассчитывают на типовой формат. // * ОпределитьНастройкиФормы - Булево - Отчет имеет программный интерфейс для тесной интеграции с формой отчета, // в том числе может переопределять некоторые настройки формы и подписываться на ее события. // Если Истина и отчет подключен к общей форме ФормаОтчета, @@ -1373,7 +1985,7 @@ // Процедура ОпределитьНастройкиФормы(Форма, КлючВарианта, Настройки) Экспорт // // Код процедуры. // КонецПроцедуры -// +// // Служебные реквизиты (только для чтения): // * Отчет - <см. Справочники.ВариантыОтчетов.Реквизиты.Отчет> - Полное имя или ссылка на отчет. // * Метаданные - ОбъектМетаданных: Отчет - Метаданные отчета. @@ -1383,6 +1995,75 @@ // * СистемнаяИнформация - Структура - Другая служебная информация. // Функция ДеревоНастроекВариантовОтчетовКонфигурации() Экспорт + Возврат ДеревоПредопределенных("Внутренний"); +КонецФункции + +// Формирует дерево настроек и размещения предопределенных вариантов отчетов. +// Только для отчетов, подключенных к подсистеме. +// +// Параметры: +// ФильтрПоТипуОтчетов - Неопределено, Строка - Необязательный. Типы отчетов, для которых требуется сформировать дерево настроек. +// * Неопределено - Сформировать информацию по отчетам конфигурации и подключенных расширений. +// * "Внутренний" - Значение по умолчанию. Сформировать информацию по отчетам конфигурации. +// * "Расширение" - Сформировать информацию по отчетам подключенных расширений. +// +// Возвращаемое значение: +// ДеревоВариантов - ДеревоЗначений - Настройки предопределенных вариантов отчетов, подключенных к подсистеме. +// +// Реквизиты для изменения: +// * Включен - Булево - Если Ложь, то вариант отчета не регистрируется в подсистеме. +// * ВидимостьПоУмолчанию - Булево - Если Ложь, то вариант отчета по умолчанию скрыт в панели отчетов. +// * Наименование - Строка - Наименование варианта отчета. +// * Описание - Строка - Информация о варианте отчета. +// * Размещение - Соответствие - Настройки размещения варианта отчета в разделах. +// ** Ключ - ОбъектМетаданных - Подсистема, в которой размещается отчет или вариант отчета. +// ** Значение - Строка - Настройки размещения в подсистеме (группе). +// *** "" - Вывод отчета в подсистеме без специального выделение. +// *** "Важный" - Вывод отчета в подсистеме с выделением жирным шрифтом. +// *** "СмТакже" - Вывод отчета в группе "См. также". +// * ФункциональныеОпции - Массив из Строка - Имена функциональных опций варианта отчета. +// * НастройкиДляПоиска - Структура - Дополнительные настройки для поиска этого варианта отчета. +// ** НаименованияПолей - Строка - Имена полей варианта отчета. +// ** НаименованияПараметровИОтборов - Строка - Имена настроек варианта отчета. +// ** ИменаМакетов - Строка - Используется вместо НаименованияПолей. +// Имена макетов табличных или текстовых документов, +// из которых требуется извлечь информацию о наименованиях полей. +// Имена перечисляются через запятую. +// К сожалению, в макетах отсутствует информация о связях полей и их представлений (которая есть в СКД), +// поэтому для более точной работы механизма поиска рекомендуется заполнять НаименованияПолей, а не +// ИменаМакетов. +// * ФорматНастроекСКД - Булево - Отчет использует типовой формат хранения настроек на механике СКД, +// а его основные формы поддерживают стандартную схему взаимодействия между формами (параметры и тип возвращаемого значения). +// Если Ложь, тогда для отчета отключаются проверки консистентности и некоторые механизмы, которые рассчитывают на типовой формат. +// * ОпределитьНастройкиФормы - Булево - Отчет имеет программный интерфейс для тесной интеграции с формой отчета, +// в том числе может переопределять некоторые настройки формы и подписываться на ее события. +// Если Истина и отчет подключен к общей форме ФормаОтчета, +// тогда в модуле объекта отчета следует определить процедуру по шаблону: +// +// // Настройки общей формы отчета подсистемы "Варианты отчетов". +// // +// // Параметры: +// // Форма - УправляемаяФорма, Неопределено - Форма отчета или форма настроек отчета. +// // Неопределено когда вызов без контекста. +// // КлючВарианта - Строка, Неопределено - Имя предопределенного +// // или уникальный идентификатор пользовательского варианта отчета. +// // Неопределено когда вызов без контекста. +// // Настройки - Структура - см. возвращаемое значение +// // ОтчетыКлиентСервер.ПолучитьНастройкиОтчетаПоУмолчанию(). +// // +// Процедура ОпределитьНастройкиФормы(Форма, КлючВарианта, Настройки) Экспорт +// // Код процедуры. +// КонецПроцедуры +// +// Служебные реквизиты (только для чтения): +// * Отчет - <см. Справочники.ВариантыОтчетов.Реквизиты.Отчет> - Полное имя или ссылка на отчет. +// * Метаданные - ОбъектМетаданных: Отчет - Метаданные отчета. +// * КлючВарианта - Строка - Имя варианта отчета. +// * ОписаниеПолучено - Булево - Флажок что описание строки уже получено. +// Описание получается методом ОписаниеВарианта(). +// * СистемнаяИнформация - Структура - Другая служебная информация. +// +Функция ДеревоПредопределенных(ФильтрПоТипуОтчетов = "Внутренний") Экспорт РеквизитыСправочника = Метаданные.Справочники.ВариантыОтчетов.Реквизиты; ДеревоВариантов = Новый ДеревоЗначений; @@ -1397,39 +2078,51 @@ ДеревоВариантов.Колонки.Добавить("Размещение", Новый ОписаниеТипов("Соответствие")); ДеревоВариантов.Колонки.Добавить("НастройкиДляПоиска", Новый ОписаниеТипов("Структура")); ДеревоВариантов.Колонки.Добавить("СистемнаяИнформация", Новый ОписаниеТипов("Структура")); + ДеревоВариантов.Колонки.Добавить("Тип", ОписаниеТиповСтрока()); ДеревоВариантов.Колонки.Добавить("ЭтоВариант", Новый ОписаниеТипов("Булево")); ДеревоВариантов.Колонки.Добавить("ФункциональныеОпции", Новый ОписаниеТипов("Массив")); ДеревоВариантов.Колонки.Добавить("ГруппироватьПоОтчету", Новый ОписаниеТипов("Булево")); + ДеревоВариантов.Колонки.Добавить("КлючЗамеров", Новый ОписаниеТипов("Строка")); ДеревоВариантов.Колонки.Добавить("ОсновнойВариант"); + ДеревоВариантов.Колонки.Добавить("ФорматНастроекСКД", Новый ОписаниеТипов("Булево")); ДеревоВариантов.Колонки.Добавить("ОпределитьНастройкиФормы", Новый ОписаниеТипов("Булево")); ВыводитьОтчетыВместоВариантов = ГлобальныеНастройки().ВыводитьОтчетыВместоВариантов; РазрешеноИндексирование = РазрешеноИндексированиеНеразделенныхДанных(); ПодсистемыОтчетов = РазмещениеОтчетовВПодсистемах(); - ПодключеныВсеОтчеты = ПодключеныВсеОтчеты(); + КэшФлажкаХранилища = Неопределено; + КэшФлажкаОсновнойФормы = Неопределено; + КэшФлажкаФормыНастроек = Неопределено; Для Каждого ОтчетМетаданные Из Метаданные.Отчеты Цикл - Если Не ПодключеныВсеОтчеты Тогда - // Проверка подключен ли конкретный отчет. - Если ОтчетМетаданные.ХранилищеВариантов = Неопределено - Или ОтчетМетаданные.ХранилищеВариантов.Имя <> "ХранилищеВариантовОтчетов" Тогда - Продолжить; - КонецЕсли; + Если Не ОтчетПодключенКХранилищу(ОтчетМетаданные, КэшФлажкаХранилища) Тогда + Продолжить; КонецЕсли; + ОтчетСсылка = ОбщегоНазначения.ИдентификаторОбъектаМетаданных(ОтчетМетаданные); + ОтчетТип = ВариантыОтчетовКлиентСервер.ТипОтчетаСтрокой(Неопределено, ОтчетСсылка); + Если ФильтрПоТипуОтчетов <> Неопределено И ФильтрПоТипуОтчетов <> ОтчетТип Тогда + Продолжить; + КонецЕсли; + + ПостроенНаСКД = (ОтчетМетаданные.ОсновнаяСхемаКомпоновкиДанных <> Неопределено); + ЕстьРеквизиты = (ОтчетМетаданные.Реквизиты.Количество() > 0); + // Настройки. СтрокаОтчет = ДеревоВариантов.Строки.Добавить(); - СтрокаОтчет.Отчет = ОбщегоНазначения.ИдентификаторОбъектаМетаданных(ОтчетМетаданные); + СтрокаОтчет.Отчет = ОтчетСсылка; СтрокаОтчет.Метаданные = ОтчетМетаданные; СтрокаОтчет.Включен = Истина; СтрокаОтчет.ВидимостьПоУмолчанию = Истина; СтрокаОтчет.Описание = ОтчетМетаданные.Пояснение; СтрокаОтчет.Наименование = ОтчетМетаданные.Представление(); СтрокаОтчет.ОписаниеПолучено = Истина; + СтрокаОтчет.Тип = ОтчетТип; СтрокаОтчет.ЭтоВариант = Ложь; СтрокаОтчет.ГруппироватьПоОтчету = ВыводитьОтчетыВместоВариантов; - СтрокаОтчет.СистемнаяИнформация = Новый Структура; - СтрокаОтчет.СистемнаяИнформация.Вставить("ПостроенНаСКД", ОтчетМетаданные.ОсновнаяСхемаКомпоновкиДанных <> Неопределено); + СтрокаОтчет.ЭтоВариант = Ложь; + СтрокаОтчет.ФорматНастроекСКД = ПостроенНаСКД И Не ЕстьРеквизиты; + СтрокаОтчет.СистемнаяИнформация.Вставить("ПостроенНаСКД", ПостроенНаСКД); // Подсистемы. Найденные = ПодсистемыОтчетов.НайтиСтроки(Новый Структура("ОтчетМетаданные", ОтчетМетаданные)); @@ -1451,7 +2144,7 @@ СхемаКД = ОтчетОбъект.СхемаКомпоновкиДанных; Исключение ТекстОшибки = НСтр("ru = 'Не удалось прочитать схему отчета ""%1"":'"); - ТекстОшибки = СтрЗаменить(ТекстОшибки, "%1", ОтчетМетаданные.Имя); + ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ТекстОшибки, ОтчетМетаданные.Имя); ТекстОшибки = ТекстОшибки + Символы.ПС + ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); ПредупреждениеПоВарианту(Неопределено, ТекстОшибки); КонецПопытки; @@ -1461,7 +2154,7 @@ ВариантыНастроек = СхемаКД.ВариантыНастроек; Исключение ТекстОшибки = НСтр("ru = 'Не удалось прочитать список вариантов отчета ""%1"" из схемы:'"); - ТекстОшибки = СтрЗаменить(ТекстОшибки, "%1", ОтчетМетаданные.Имя); + ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ТекстОшибки, ОтчетМетаданные.Имя); ТекстОшибки = ТекстОшибки + Символы.ПС + ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); ПредупреждениеПоВарианту(Неопределено, ТекстОшибки); КонецПопытки; @@ -1472,7 +2165,7 @@ ВариантыНастроек = ОтчетМенеджер.ВариантыНастроек(); Исключение ТекстОшибки = НСтр("ru = 'Не удалось прочитать список вариантов отчета ""%1"" из модуля менеджера:'"); - ТекстОшибки = СтрЗаменить(ТекстОшибки, "%1", ОтчетМетаданные.Имя); + ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ТекстОшибки, ОтчетМетаданные.Имя); ТекстОшибки = ТекстОшибки + Символы.ПС + ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); ОшибкаПоВарианту(Неопределено, ТекстОшибки); КонецПопытки; @@ -1484,6 +2177,7 @@ Вариант.Отчет = СтрокаОтчет.Отчет; Вариант.КлючВарианта = ВариантНастроекКД.Имя; Вариант.Наименование = ВариантНастроекКД.Представление; + Вариант.Тип = ОтчетТип; Вариант.ЭтоВариант = Истина; Если СтрокаОтчет.ОсновнойВариант = Неопределено Тогда СтрокаОтчет.ОсновнойВариант = Вариант; @@ -1516,15 +2210,16 @@ КонецЦикла; - // Механизмы расширения: - // Подключаемые обработчики подсистем БСП. - Обработчики = ОбщегоНазначения.ОбработчикиСлужебногоСобытия("СтандартныеПодсистемы.ВариантыОтчетов\ПриНастройкеВариантовОтчетов"); - Для Каждого Обработчик Из Обработчики Цикл - Обработчик.Модуль.ПриНастройкеВариантовОтчетов(ДеревоВариантов); - КонецЦикла; - - // Переопределяемая часть. - ВариантыОтчетовПереопределяемый.НастроитьВариантыОтчетов(ДеревоВариантов); + // Механизмы расширения. + Если ФильтрПоТипуОтчетов = Неопределено Или ФильтрПоТипуОтчетов = "Внутренний" Тогда + // Подключаемые обработчики подсистем БСП. + Обработчики = ОбщегоНазначения.ОбработчикиСлужебногоСобытия("СтандартныеПодсистемы.ВариантыОтчетов\ПриНастройкеВариантовОтчетов"); + Для Каждого Обработчик Из Обработчики Цикл + Обработчик.Модуль.ПриНастройкеВариантовОтчетов(ДеревоВариантов); + КонецЦикла; + // Переопределяемый модуль конфигурации. + ВариантыОтчетовПереопределяемый.НастроитьВариантыОтчетов(ДеревоВариантов); + КонецЕсли; // Определение основных вариантов. Для Каждого СтрокаОтчет Из ДеревоВариантов.Строки Цикл @@ -1543,6 +2238,19 @@ Иначе СтрокаОтчет.ОсновнойВариант = Неопределено; КонецЕсли; + + Если СтрокаОтчет.ФорматНастроекСКД Тогда + ПодключенКОсновнойФорме = ОтчетПодключенКОсновнойФорме(СтрокаОтчет.Метаданные, КэшФлажкаОсновнойФормы); + ПодключенКФормеНастроек = ОтчетПодключенКФормеНастроек(СтрокаОтчет.Метаданные, КэшФлажкаФормыНастроек); + Если ПодключенКОсновнойФорме <> ПодключенКФормеНастроек Тогда + ТекстОшибки = ВариантыОтчетовКлиентСервер.ТекстОшибки(?(ПодключенКОсновнойФорме, 1, 2), СтрокаОтчет.Метаданные.ПолноеИмя()); + Если ОбщегоНазначенияКлиентСервер.РежимОтладки() Тогда + ОшибкаПоВарианту(ОтчетСсылка, ТекстОшибки); + Иначе + ПредупреждениеПоВарианту(ОтчетСсылка, ТекстОшибки); + КонецЕсли; + КонецЕсли; + КонецЕсли; КонецЦикла; Возврат ДеревоВариантов; @@ -1583,6 +2291,7 @@ СтрокаВариант.Размещение = ОбщегоНазначенияКлиентСервер.СкопироватьСоответствие(СтрокаОтчет.Размещение); СтрокаВариант.ФункциональныеОпции = ОбщегоНазначенияКлиентСервер.СкопироватьМассив(СтрокаОтчет.ФункциональныеОпции); СтрокаВариант.НастройкиДляПоиска = ОбщегоНазначенияКлиентСервер.СкопироватьСтруктуру(СтрокаОтчет.НастройкиДляПоиска); + СтрокаВариант.КлючЗамеров = СтрХеш("Отчет." + СтрокаОтчет.Метаданные.Имя + "." + СтрокаВариант.КлючВарианта, 135); КонецПроцедуры @@ -1624,12 +2333,12 @@ // Функция ИзмененияКлючей() - ОписаниеТиповРеквизитаКлючВарианта = Метаданные.Справочники.ВариантыОтчетов.Реквизиты.КлючВарианта.Тип; + РеквизитыВариантов = Метаданные.Справочники.ВариантыОтчетов.Реквизиты; Изменения = Новый ТаблицаЗначений; Изменения.Колонки.Добавить("Отчет", Новый ОписаниеТипов("ОбъектМетаданных")); - Изменения.Колонки.Добавить("СтароеИмяВарианта", ОписаниеТиповРеквизитаКлючВарианта); - Изменения.Колонки.Добавить("АктуальноеИмяВарианта", ОписаниеТиповРеквизитаКлючВарианта); + Изменения.Колонки.Добавить("СтароеИмяВарианта", РеквизитыВариантов.КлючВарианта.Тип); + Изменения.Колонки.Добавить("АктуальноеИмяВарианта", РеквизитыВариантов.КлючВарианта.Тип); // Подключаемые обработчики подсистем БСП. Обработчики = ОбщегоНазначения.ОбработчикиСлужебногоСобытия("СтандартныеПодсистемы.ВариантыОтчетов\ПриРегистрацииИзмененийИменВариантовОтчетов"); @@ -1641,7 +2350,7 @@ ВариантыОтчетовПереопределяемый.ЗарегистрироватьИзмененияКлючейВариантовОтчетов(Изменения); Изменения.Колонки.Отчет.Имя = "ОтчетМетаданные"; - Изменения.Колонки.Добавить("Отчет", Метаданные.Справочники.ПредопределенныеВариантыОтчетов.Реквизиты.Отчет.Тип); + Изменения.Колонки.Добавить("Отчет", РеквизитыВариантов.Отчет.Тип); // Проверить корректность замен. Для Каждого Изменение Из Изменения Цикл @@ -1697,7 +2406,7 @@ Результат.Отчет = ОтчетПолноеИмя; Результат.ОтчетПолноеИмя = ОтчетПолноеИмя; - ПозицияТочки = Найти(ОтчетПолноеИмя, "."); + ПозицияТочки = СтрНайти(ОтчетПолноеИмя, "."); Если ПозицияТочки = 0 Тогда Префикс = ""; Результат.ОтчетИмя = ОтчетПолноеИмя; @@ -1736,23 +2445,21 @@ // Заменить тип и ссылку внешнего отчета для дополнительных отчетов, подключенных к хранилищу подсистемы. Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ДополнительныеОтчетыИОбработки") Тогда - Результат.Вставить("ПодключеныВсеОтчеты", ПодключеныВсеОтчеты()); - + Результат.Вставить("ПоУмолчаниюВсеПодключеныКХранилищу", ПоУмолчаниюВсеПодключеныКХранилищу()); МодульДополнительныеОтчетыИОбработки = ОбщегоНазначения.ОбщийМодуль("ДополнительныеОтчетыИОбработки"); МодульДополнительныеОтчетыИОбработки.ПриОпределенииТипаИСсылкиЕслиОтчетДополнительный(Результат); + Результат.Удалить("ПоУмолчаниюВсеПодключеныКХранилищу"); - Если Результат.Свойство("ОтчетДополнительный") Тогда + Если ТипЗнч(Результат.Отчет) <> Тип("Строка") Тогда Результат.ТипОтчета = Перечисления.ТипыОтчетов.Дополнительный; - Результат.Удалить("ОтчетДополнительный"); КонецЕсли; - Результат.Удалить("ПодключеныВсеОтчеты"); КонецЕсли; Иначе Результат.Отчет = ОбщегоНазначения.ИдентификаторОбъектаМетаданных(Результат.ОтчетМетаданные); - Результат.ТипОтчета = Перечисления.ТипыОтчетов.Внутренний; + Результат.ТипОтчета = ВариантыОтчетовКлиентСервер.ТипОтчета(Результат.Отчет); КонецЕсли; @@ -1820,7 +2527,8 @@ // Функция СброситьНастройкиВариантаОтчета(ВариантОбъект) Экспорт Если ВариантОбъект.Пользовательский - Или ВариантОбъект.ТипОтчета <> Перечисления.ТипыОтчетов.Внутренний + Или (ВариантОбъект.ТипОтчета <> Перечисления.ТипыОтчетов.Внутренний + И ВариантОбъект.ТипОтчета <> Перечисления.ТипыОтчетов.Расширение) Или Не ЗначениеЗаполнено(ВариантОбъект.ПредопределенныйВариант) Тогда Возврат Ложь; КонецЕсли; @@ -1838,41 +2546,6 @@ Возврат Истина; КонецФункции -// Добавляет подсистемы родителя с фильтром по правам доступа и функциональным опциям. -// -Процедура ДобавитьПодсистемыТекущегоПользователя(РодительСтрока, РодительМетаданные = Неопределено, РазделСсылка = Неопределено) Экспорт - ДляКорневойСтроки = (РодительМетаданные = Неопределено); - ПриоритетРодителя = ?(ДляКорневойСтроки, "", РодительСтрока.Приоритет); - Подсистемы = ?(ДляКорневойСтроки, ИспользуемыеРазделы(), РодительМетаданные.Подсистемы); - Приоритет = 0; - Для Каждого Подсистема Из Подсистемы Цикл - ПодсистемаМетаданные = ?(ДляКорневойСтроки, Подсистема.Метаданные, Подсистема); - Если ПодсистемаМетаданные.ВключатьВКомандныйИнтерфейс - И ПравоДоступа("Просмотр", ПодсистемаМетаданные) - И ОбщегоНазначения.ОбъектМетаданныхДоступенПоФункциональнымОпциям(ПодсистемаМетаданные) Тогда - - Приоритет = Приоритет + 1; - - СтрокаДерева = РодительСтрока.Строки.Добавить(); - СтрокаДерева.Ссылка = ОбщегоНазначения.ИдентификаторОбъектаМетаданных(ПодсистемаМетаданные); - СтрокаДерева.Имя = ПодсистемаМетаданные.Имя; - СтрокаДерева.ПолноеИмя = ПодсистемаМетаданные.ПолноеИмя(); - СтрокаДерева.Представление = ПодсистемаМетаданные.Представление(); - СтрокаДерева.РазделСсылка = ?(ДляКорневойСтроки, СтрокаДерева.Ссылка, РазделСсылка); - СтрокаДерева.Приоритет = ПриоритетРодителя + Формат(Приоритет, "ЧЦ=4; ЧДЦ=0; ЧВН=; ЧГ=0"); - Если ДляКорневойСтроки Тогда - СтрокаДерева.ПолноеПредставление = Подсистема.ЗаголовокПанели; - ИначеЕсли СтрДлина(ПриоритетРодителя) > 12 Тогда - СтрокаДерева.ПолноеПредставление = РодительСтрока.Представление + ": " + СтрокаДерева.Представление; - Иначе - СтрокаДерева.ПолноеПредставление = СтрокаДерева.Представление; - КонецЕсли; - - ДобавитьПодсистемыТекущегоПользователя(СтрокаДерева, ПодсистемаМетаданные, СтрокаДерева.РазделСсылка); - КонецЕсли; - КонецЦикла; -КонецПроцедуры - // Формирует описание типов Строка заданной длины. Функция ОписаниеТиповСтрока(ДлинаСтроки = 1000) Экспорт Возврат Новый ОписаниеТипов("Строка", , Новый КвалификаторыСтроки(ДлинаСтроки)); @@ -1938,18 +2611,18 @@ КонецФункции // Определяет способ внедрения подсистемы. -Функция ПодключеныВсеОтчеты() Экспорт +Функция ПоУмолчаниюВсеПодключеныКХранилищу() Экспорт Возврат (Метаданные.ХранилищеВариантовОтчетов <> Неопределено И Метаданные.ХранилищеВариантовОтчетов.Имя = "ХранилищеВариантовОтчетов"); КонецФункции // Определяет подключен ли отчет к подсистеме. -Функция ОтчетПодключенКХранилищу(ОтчетМетаданные, ПодключеныВсеОтчеты = Неопределено) Экспорт +Функция ОтчетПодключенКХранилищу(ОтчетМетаданные, ПоУмолчаниюВсеПодключены = Неопределено) Экспорт ХранилищеМетаданные = ОтчетМетаданные.ХранилищеВариантов; Если ХранилищеМетаданные = Неопределено Тогда - Если ПодключеныВсеОтчеты = Неопределено Тогда - ПодключеныВсеОтчеты = ПодключеныВсеОтчеты(); + Если ПоУмолчаниюВсеПодключены = Неопределено Тогда + ПоУмолчаниюВсеПодключены = ПоУмолчаниюВсеПодключеныКХранилищу(); КонецЕсли; - ОтчетПодключен = ПодключеныВсеОтчеты; + ОтчетПодключен = ПоУмолчаниюВсеПодключены; Иначе ОтчетПодключен = (ХранилищеМетаданные = Метаданные.ХранилищаНастроек.ХранилищеВариантовОтчетов); КонецЕсли; @@ -1957,32 +2630,52 @@ КонецФункции // Определяет способ подключения общей формы отчета. -Функция ФормаОтчетаИспользуетсяПоУмолчанию() Экспорт +Функция ПоУмолчаниюВсеПодключеныКОсновнойФорме() Экспорт ФормаМетаданные = Метаданные.ОсновнаяФормаОтчета; Возврат (ФормаМетаданные <> Неопределено И ФормаМетаданные = Метаданные.ОбщиеФормы.ФормаОтчета); КонецФункции // Определяет способ подключения общей формы отчета. -Функция ФормаОтчетаИспользуетсяДляОтчета(ОтчетМетаданные, ФормаОтчетаИспользуетсяПоУмолчанию = Неопределено) Экспорт +Функция ОтчетПодключенКОсновнойФорме(ОтчетМетаданные, ПоУмолчаниюВсеПодключены = Неопределено) Экспорт ФормаМетаданные = ОтчетМетаданные.ОсновнаяФорма; Если ФормаМетаданные = Неопределено Тогда - Если ФормаОтчетаИспользуетсяПоУмолчанию = Неопределено Тогда - ФормаОтчетаИспользуетсяПоУмолчанию = ФормаОтчетаИспользуетсяПоУмолчанию(); + Если ПоУмолчаниюВсеПодключены = Неопределено Тогда + ПоУмолчаниюВсеПодключены = ПоУмолчаниюВсеПодключеныКОсновнойФорме(); КонецЕсли; - ОтчетПодключен = ФормаОтчетаИспользуетсяПоУмолчанию; + ОтчетПодключен = ПоУмолчаниюВсеПодключены; Иначе ОтчетПодключен = (ФормаМетаданные = Метаданные.ОбщиеФормы.ФормаОтчета); КонецЕсли; Возврат ОтчетПодключен; КонецФункции +// Определяет способ подключения общей формы отчета. +Функция ПоУмолчаниюВсеПодключеныКФормеНастроек() Экспорт + ФормаМетаданные = Метаданные.ОсновнаяФормаНастроекОтчета; + Возврат (ФормаМетаданные <> Неопределено И ФормаМетаданные = Метаданные.ОбщиеФормы.ФормаНастроекОтчета); +КонецФункции + +// Определяет способ подключения общей формы отчета. +Функция ОтчетПодключенКФормеНастроек(ОтчетМетаданные, ПоУмолчаниюВсеПодключены = Неопределено) Экспорт + ФормаМетаданные = ОтчетМетаданные.ОсновнаяФормаНастроек; + Если ФормаМетаданные = Неопределено Тогда + Если ПоУмолчаниюВсеПодключены = Неопределено Тогда + ПоУмолчаниюВсеПодключены = ПоУмолчаниюВсеПодключеныКФормеНастроек(); + КонецЕсли; + ОтчетПодключен = ПоУмолчаниюВсеПодключены; + Иначе + ОтчетПодключен = (ФормаМетаданные = Метаданные.ОбщиеФормы.ФормаНастроекОтчета); + КонецЕсли; + Возврат ОтчетПодключен; +КонецФункции + // Создает фильтр по реквизиту КлючОбъекта для СтандартноеХранилищеНастроекМенеджер.Выбрать(). Функция НовыйФильтрПоКлючуОбъекта(ИменаОтчетов) Экспорт Если ИменаОтчетов = "" Или ИменаОтчетов = "*" Тогда Возврат Неопределено; КонецЕсли; - ПозицияРазделителя = Найти(ИменаОтчетов, ","); + ПозицияРазделителя = СтрНайти(ИменаОтчетов, ","); Если ПозицияРазделителя = 0 Тогда КлючОбъекта = ИменаОтчетов; ИменаОтчетов = ""; @@ -1991,7 +2684,7 @@ ИменаОтчетов = Сред(ИменаОтчетов, ПозицияРазделителя + 1); КонецЕсли; - Если Найти(КлючОбъекта, ".") = 0 Тогда + Если СтрНайти(КлючОбъекта, ".") = 0 Тогда КлючОбъекта = "Отчет." + КлючОбъекта; КонецЕсли; @@ -2022,73 +2715,101 @@ ВариантыОтчетовКлиентСервер.ПолноеИмяПодсистемы(), "ПанельОтчетов"); Если ОбщиеНастройки = Неопределено Тогда - ОбщиеНастройки = Новый Структура("ПоказатьОповещениеОПодсказках, ПоказыватьПодсказки, ИскатьВоВсехРазделах"); - ОбщиеНастройки.ПоказатьОповещениеОПодсказках = Истина; - ОбщиеНастройки.ПоказыватьПодсказки = ?(ГлобальныеНастройки().ВыводитьОписания, 1, 0); - ОбщиеНастройки.ИскатьВоВсехРазделах = Ложь; + ОбщиеНастройки = Новый Структура("ПоказыватьПодсказки, ИскатьВоВсехРазделах, ПоказатьОповещениеОПодсказках"); + ОбщиеНастройки.ПоказатьОповещениеОПодсказках = Ложь; + ОбщиеНастройки.ПоказыватьПодсказки = ГлобальныеНастройки().ВыводитьОписания; + ОбщиеНастройки.ИскатьВоВсехРазделах = Ложь; Иначе - ОбщиеНастройки.Вставить("ПоказатьОповещениеОПодсказках", Ложь); + // Возможность можно считать новой для пользователя только в том случае, + // если у пользователя есть понимание что такое "старые" возможности (т.е. если он уже работал с этой формой). + Если Не ОбщиеНастройки.Свойство("ПоказатьОповещениеОПодсказках") Тогда + ОбщиеНастройки.Вставить("ПоказатьОповещениеОПодсказках", Истина); + КонецЕсли; КонецЕсли; Возврат ОбщиеНастройки; КонецФункции +// Глобальные настройки панели отчетов. +Функция СохранитьОбщиеНастройкиПанели(ОбщиеНастройки) Экспорт + Если ТипЗнч(ОбщиеНастройки) <> Тип("Структура") Тогда + Возврат Неопределено; + КонецЕсли; + Если ОбщиеНастройки.Количество() < 3 Тогда + ОбщегоНазначенияКлиентСервер.ДополнитьСтруктуру(ОбщиеНастройки, ОбщиеНастройкиПанели(), Ложь); + КонецЕсли; + ОбщегоНазначения.ХранилищеОбщихНастроекСохранить( + ВариантыОтчетовКлиентСервер.ПолноеИмяПодсистемы(), + "ПанельОтчетов", + ОбщиеНастройки); + Возврат ОбщиеНастройки; +КонецФункции + +// Глобальные клиентские настройки отчетов. +Функция ПараметрыКлиента() Экспорт + ПараметрыКлиента = Новый Структура; + ПараметрыКлиента.Вставить("ВыполнятьЗамеры", ВыполнятьЗамеры()); + Если ПараметрыКлиента.ВыполнятьЗамеры Тогда + УстановитьПривилегированныйРежим(Истина); + ПараметрыКлиента.Вставить("ПрефиксЗамеров", СтрЗаменить(ПараметрыСеанса["КомментарийЗамераВремени"], ";", "; ")); + КонецЕсли; + + Возврат ПараметрыКлиента; +КонецФункции + +// Глобальные клиентские настройки отчетов. +Функция ВыполнятьЗамеры() Экспорт + Если БезопасныйРежим() <> Ложь Тогда + Возврат Ложь; + КонецЕсли; + + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ОценкаПроизводительности") Тогда + МодульОценкаПроизводительностиВызовСервераПовтИсп = ОбщегоНазначения.ОбщийМодуль("ОценкаПроизводительностиВызовСервераПовтИсп"); + Если МодульОценкаПроизводительностиВызовСервераПовтИсп.ВыполнятьЗамерыПроизводительности() Тогда + Возврат Истина; + КонецЕсли; + КонецЕсли; + + Возврат Ложь; +КонецФункции + //////////////////////////////////////////////////////////////////////////////// // Журнал регистрации -// Запись ошибки в журнале регистрации по варианту отчета. +// Запись ошибки в журнал регистрации. Процедура ОшибкаПоВарианту(Вариант, Сообщение, Реквизит1 = Неопределено, Реквизит2 = Неопределено, Реквизит3 = Неопределено) Экспорт - ЗаписьЖурналаРегистрации( - ВариантыОтчетовКлиентСервер.НаименованиеПодсистемы(Неопределено), - УровеньЖурналаРегистрации.Ошибка, - Метаданные.Справочники.ВариантыОтчетов, - Вариант, - СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - Сообщение, - Строка(Реквизит1), - Строка(Реквизит2), - Строка(Реквизит3))); + Уровень = УровеньЖурналаРегистрации.Ошибка; + ЗаписьЖурнала(Уровень, Вариант, Сообщение, Реквизит1, Реквизит2, Реквизит3); КонецПроцедуры -// Запись информации в журнале регистрации по варианту отчета. -Процедура ИнформацияПоВарианту(Вариант, Сообщение, Реквизит1 = Неопределено, Реквизит2 = Неопределено, Реквизит3 = Неопределено) Экспорт - ЗаписьЖурналаРегистрации( - ВариантыОтчетовКлиентСервер.НаименованиеПодсистемы(Неопределено), - УровеньЖурналаРегистрации.Информация, - Метаданные.Справочники.ВариантыОтчетов, - Вариант, - СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - Сообщение, - Строка(Реквизит1), - Строка(Реквизит2), - Строка(Реквизит3))); -КонецПроцедуры - -// Запись предупреждения в журнале регистрации по варианту отчета. +// Запись предупреждения в журнал регистрации. Процедура ПредупреждениеПоВарианту(Вариант, Сообщение, Реквизит1 = Неопределено, Реквизит2 = Неопределено, Реквизит3 = Неопределено) Экспорт - ЗаписьЖурналаРегистрации( - ВариантыОтчетовКлиентСервер.НаименованиеПодсистемы(Неопределено), - УровеньЖурналаРегистрации.Предупреждение, - Метаданные.Справочники.ВариантыОтчетов, - Вариант, - СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - Сообщение, - Строка(Реквизит1), - Строка(Реквизит2), - Строка(Реквизит3))); + Уровень = УровеньЖурналаРегистрации.Предупреждение; + ЗаписьЖурнала(Уровень, Вариант, Сообщение, Реквизит1, Реквизит2, Реквизит3); КонецПроцедуры -// Запись предупреждения в журнале регистрации по варианту отчета. +// Запись информации в журнал регистрации. +Процедура ИнформацияПоВарианту(Вариант, Сообщение, Реквизит1 = Неопределено, Реквизит2 = Неопределено, Реквизит3 = Неопределено) Экспорт + Уровень = УровеньЖурналаРегистрации.Информация; + ЗаписьЖурнала(Уровень, Вариант, Сообщение, Реквизит1, Реквизит2, Реквизит3); +КонецПроцедуры + +// Запись примечания в журнал регистрации. Процедура ПримечаниеПоВарианту(Вариант, Сообщение, Реквизит1 = Неопределено, Реквизит2 = Неопределено, Реквизит3 = Неопределено) Экспорт + Уровень = УровеньЖурналаРегистрации.Примечание; + ЗаписьЖурнала(Уровень, Вариант, Сообщение, Реквизит1, Реквизит2, Реквизит3); +КонецПроцедуры + +// Запись в журнал регистрации. +Процедура ЗаписьЖурнала(Уровень, Ссылка, Текст, Параметр1 = Неопределено, Параметр2 = Неопределено, Параметр3 = Неопределено) + Текст = СтрЗаменить(Текст, "%1", Параметр1); // Переход на СтрШаблон невозможен. + Текст = СтрЗаменить(Текст, "%2", Параметр2); + Текст = СтрЗаменить(Текст, "%3", Параметр3); ЗаписьЖурналаРегистрации( ВариантыОтчетовКлиентСервер.НаименованиеПодсистемы(Неопределено), - УровеньЖурналаРегистрации.Примечание, + Уровень, Метаданные.Справочники.ВариантыОтчетов, - Вариант, - СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - Сообщение, - Строка(Реквизит1), - Строка(Реквизит2), - Строка(Реквизит3))); + Ссылка, + Текст); КонецПроцедуры // Записывает в журнал регистрации событие запуска процедуры и открывает транзакцию. @@ -2178,62 +2899,46 @@ //////////////////////////////////////////////////////////////////////////////// // Обновление информационной базы. -// [*] Актуализирует неразделенные данные: справочник ПредопределенныеВариантыОтчетов и константу -// ПараметрыВариантовОтчетов. -Процедура ОбновитьОбщиеДанные(ПараметрыОбновления) Экспорт +// [*] Актуализирует кэш метаданных конфигурации: справочник ПредопределенныеВариантыОтчетов +// и константу ПараметрыВариантовОтчетов. +Процедура ОперативноеОбновлениеОбщихДанныхКонфигурации(ПараметрыОбновления) Экспорт - //////////////////////////////////////////////////////////////////////////////// - // Выполняется только для предопределенных вариантов отчетов. - // План обновления: - - Кэш = Новый Структура; - Кэш.Вставить("ИспользуемыеРазделы", ИспользуемыеРазделы()); - Кэш.Вставить("ПодключеныВсеОтчеты", ПодключеныВсеОтчеты()); - Кэш.Вставить("ДеревоВариантов", ДеревоНастроекВариантовОтчетовКонфигурации()); - Кэш.Вставить("ОбновитьОбласти", Ложь); - - //////////////////////////////////////////////////////////////////////////////// - // 1. Заменить устаревшие ключи вариантов отчетов на актуальные. - АктуализироватьКлючиПредопределенных(Кэш); - - //////////////////////////////////////////////////////////////////////////////// - // 2. Актуализировать предопределенные варианты отчетов и перезаписать - // константу, в которой хранятся привязки к функциональным опциям. - ОбновитьНастройкиПредопределенных(Кэш); - - //////////////////////////////////////////////////////////////////////////////// - // 3. Установить пометку удаления вариантов удаленных отчетов. - ПометитьНаУдалениеВариантыУдаленныхОтчетов(Кэш, Истина); - - //////////////////////////////////////////////////////////////////////////////// - // 4. Обновить разделенные данные в модели сервиса. - Если Кэш.ОбновитьОбласти И ОбщегоНазначенияПовтИсп.РазделениеВключено() Тогда - Обработчик = ПараметрыОбновления.РазделенныеОбработчики.Добавить(); - Обработчик.РежимВыполнения = "Оперативно"; - Обработчик.Версия = "*"; - Обработчик.Процедура = "ВариантыОтчетов.ОбновитьРазделенныеДанные"; - Обработчик.Приоритет = 70; - КонецЕсли; - - // Для платформы (очистка коллекции вручную для освобождение памяти от цикличных ссылок). - Кэш.ДеревоВариантов.Колонки.Очистить(); - Кэш.ДеревоВариантов.Строки.Очистить(); + ОперативноеОбновлениеОбщихДанных("ОбщиеДанныеКонфигурации", ПараметрыОбновления.РазделенныеОбработчики); КонецПроцедуры -// [*] Актуализирует разделенные данные: справочник ВариантыОтчетов. -Процедура ОбновитьРазделенныеДанные() Экспорт +// [*] Актуализирует данные справочника ВариантыОтчетов в части отчетов конфигурации. +Процедура ОперативноеОбновлениеРазделенныхДанныхКонфигурации() Экспорт - //////////////////////////////////////////////////////////////////////////////// - // План обновления: + ОперативноеОбновлениеРазделенныхДанных("РазделенныеДанныеКонфигурации"); - //////////////////////////////////////////////////////////////////////////////// - // 1. Актуализировать разделенные варианты отчетов. - АктуализироватьСоставОбласти(); +КонецПроцедуры + +// [*] Актуализирует данные справочника ВариантыОтчетов в части отчетов расширений. +Процедура ОперативноеОбновлениеРазделенныхДанныхРасширений() Экспорт - //////////////////////////////////////////////////////////////////////////////// - // 2. Установить пометку удаления вариантов удаленных отчетов. - ПометитьНаУдалениеВариантыУдаленныхОтчетов(Неопределено, Ложь); + ОперативноеОбновлениеРазделенныхДанных("РазделенныеДанныеРасширений"); + +КонецПроцедуры + +// Частичное индекса поиска предопределенных вариантов отчетов - только по изменениям в настройках вариантов. +Процедура ОтложенноеОбновлениеОбщихДанныхКонфигурацииИнкрементальное(Параметры = Неопределено) Экспорт + + ОтложенноеОбновлениеДанных("ОбщиеДанныеКонфигурации", Ложь); + +КонецПроцедуры + +// Полное обновление индекса поиска предопределенных вариантов отчетов. +Процедура ОтложенноеОбновлениеОбщихДанныхКонфигурацииПолное(Параметры = Неопределено) Экспорт + + ОтложенноеОбновлениеДанных("ОбщиеДанныеКонфигурации", Истина); + +КонецПроцедуры + +// Полное обновление индекса поиска вариантов отчетов. +Процедура ОтложенноеОбновлениеРазделенныхДанныхКонфигурацииПолное(Параметры = Неопределено) Экспорт + + ОтложенноеОбновлениеДанных("РазделенныеДанныеКонфигурации", Истина); КонецПроцедуры @@ -2334,7 +3039,6 @@ | &Изменения КАК Изменения | |ИНДЕКСИРОВАТЬ ПО - | Отчет, | СтароеИмяВарианта, | АктуальноеИмяВарианта |; @@ -2357,7 +3061,6 @@ | И ВариантыОтчетов.ПредопределенныйВариант = &ПустойПредопределенный | |ИНДЕКСИРОВАТЬ ПО - | Отчет, | АктуальныйКлючВарианта, | Ссылка |; @@ -2376,7 +3079,7 @@ Запрос = Новый Запрос; Запрос.УстановитьПараметр("Изменения", Изменения); - Запрос.УстановитьПараметр("ТипОтчета", Перечисления.ТипыОтчетов.Внутренний); + Запрос.УстановитьПараметр("ТипОтчета", Перечисления.ТипыОтчетов.Внутренний); // Поддержка расширений не требуется. Запрос.УстановитьПараметр("ПустойПредопределенный", Справочники.ПредопределенныеВариантыОтчетов.ПустаяСсылка()); Запрос.Текст = ТекстЗапроса; @@ -2393,7 +3096,7 @@ ВариантОбъект.Размещение.Удалить(СтрокаТаблицы); КонецЦикла; ВариантОбъект.Описание = ""; - ОбновлениеИнформационнойБазы.ЗаписатьДанные(ВариантОбъект); + ОбновлениеИнформационнойБазы.ЗаписатьОбъект(ВариантОбъект); Иначе ВариантОбъект.УстановитьПометкуУдаления(Истина); КонецЕсли; @@ -2403,103 +3106,6 @@ КонецПроцедуры -// Частичное индекса поиска предопределенных вариантов отчетов - только по изменениям в настройках вариантов. -Процедура ОтложенноеИнкрементальноеОбновлениеОбщихДанных(Параметры = Неопределено) Экспорт - ОтложенноеОбновлениеОбщихДанных(Ложь); -КонецПроцедуры - -// Полное обновление индекса поиска предопределенных вариантов отчетов. -Процедура ОтложенноеПолноеОбновлениеОбщихДанных(Параметры = Неопределено) Экспорт - ОтложенноеОбновлениеОбщихДанных(Истина); -КонецПроцедуры - -// Обновление индекса поиска предопределенных вариантов отчетов. -Процедура ОтложенноеОбновлениеОбщихДанных(Полное) - Если Не РазрешеноИндексированиеНеразделенныхДанных() Тогда - Возврат; - КонецЕсли; - Если Полное Тогда - ПредставлениеПроцедуры = НСтр("ru = 'Отложенное обновление общих данных (полное)'"); - Иначе - ПредставлениеПроцедуры = НСтр("ru = 'Отложенное обновление общих данных (по изменениям)'"); - КонецЕсли; - ЗапускПроцедуры(ПредставлениеПроцедуры); - - ДеревоВариантов = ДеревоНастроекВариантовОтчетовКонфигурации(); - - СтарыеСведения = Новый Структура("ХешНастроек, НаименованияПолей, НаименованияПараметровИОтборов"); - Запрос = Новый Запрос("ВЫБРАТЬ Ссылка ИЗ Справочник.ПредопределенныеВариантыОтчетов ГДЕ ПометкаУдаления = ЛОЖЬ"); - Выборка = Запрос.Выполнить().Выбрать(); - Пока Выборка.Следующий() Цикл - ПримечаниеПоВарианту(Выборка.Ссылка, НСтр("ru = 'Индексация схемы'")); - ВариантОбъект = Выборка.Ссылка.ПолучитьОбъект(); - ВариантОбъект.ДополнительныеСвойства.Вставить("ДеревоВариантов", ДеревоВариантов); - ЗаполнитьЗначенияСвойств(СтарыеСведения, ВариантОбъект); - ВариантОбъект.НаименованияПолей = ""; - ВариантОбъект.НаименованияПараметровИОтборов = ""; - Если Полное Тогда // Переиндексировать принудительно, без проверки хеш-суммы. - ВариантОбъект.ДополнительныеСвойства.Вставить("ИндексироватьСхему", Истина); - КонецЕсли; - СхемаПроиндексирована = ПроиндексироватьСодержимоеСхемы(ВариантОбъект); - Если Полное Или (СхемаПроиндексирована - И ИзменилисьНастройкиПоискаПредопределенного(ВариантОбъект, СтарыеСведения)) Тогда - ЗаписатьПредопределенный(ВариантОбъект); - КонецЕсли; - КонецЦикла; - - // Для платформы (очистка коллекции вручную для освобождение памяти от цикличных ссылок). - ДеревоВариантов.Колонки.Очистить(); - ДеревоВариантов.Строки.Очистить(); - - ЗавершениеПроцедуры(ПредставлениеПроцедуры); -КонецПроцедуры - -// Полное обновление индекса поиска вариантов отчетов. -Процедура ОтложенноеПолноеОбновлениеРазделенныхДанных(Параметры = Неопределено) Экспорт - ПредставлениеПроцедуры = НСтр("ru = 'Отложенное обновление разделенных данных (полное)'"); - ЗапускПроцедуры(ПредставлениеПроцедуры); - - КэшОтчетов = Новый Соответствие; - - ТекстЗапроса = - "ВЫБРАТЬ - | Таблица.Ссылка, - | Таблица.Отчет - |ИЗ - | Справочник.ВариантыОтчетов КАК Таблица - |ГДЕ - | (Таблица.ПредопределенныйВариант = &ПустаяСсылка - | ИЛИ Таблица.ПредопределенныйВариант = НЕОПРЕДЕЛЕНО - | ИЛИ Таблица.ПредопределенныйВариант.ПометкаУдаления = ЛОЖЬ)"; - - Запрос = Новый Запрос(ТекстЗапроса); - Запрос.УстановитьПараметр("ПустаяСсылка", Справочники.ПредопределенныеВариантыОтчетов.ПустаяСсылка()); - Выборка = Запрос.Выполнить().Выбрать(); - Пока Выборка.Следующий() Цикл - ОтчетОбъект = КэшОтчетов.Получить(Выборка.Отчет); // Чтение кэша. - Если ОтчетОбъект = Неопределено Тогда // Запись в кэш. - РезультатПодключения = ПодключитьОтчетОбъект(Выборка.Отчет); - Если РезультатПодключения.Подключен Тогда - ОтчетОбъект = РезультатПодключения.Объект; - Иначе // Отчет не найден. - ОшибкаПоВарианту(Выборка.Ссылка, РезультатПодключения.Ошибки); - ОтчетОбъект = ""; - КонецЕсли; - КэшОтчетов.Вставить(Выборка.Отчет, ОтчетОбъект); - КонецЕсли; - Если ОтчетОбъект = "" Тогда - Продолжить; - КонецЕсли; - - ВариантОбъект = Выборка.Ссылка.ПолучитьОбъект(); - ВариантОбъект.ДополнительныеСвойства.Вставить("ИндексироватьСхему", Истина); - ВариантОбъект.ДополнительныеСвойства.Вставить("ОтчетОбъект", ОтчетОбъект); - ЗаписатьПредопределенный(ВариантОбъект); - КонецЦикла; - - ЗавершениеПроцедуры(ПредставлениеПроцедуры); -КонецПроцедуры - // [2.2.3.30] Уменьшает количество быстрых настроек в пользовательских вариантах отчетов до 2 шт. Процедура СократитьКоличествоБыстрыхНастроек(ВходящиеПараметры = Неопределено) Экспорт ПредставлениеПроцедуры = НСтр("ru = 'Сокращение количества быстрых настроек в отчетах'"); @@ -2508,8 +3114,7 @@ // Чтение сведений от предыдущего запуска с ошибками. Параметры = ОбщегоНазначения.ХранилищеОбщихНастроекЗагрузить( ВариантыОтчетовКлиентСервер.ПолноеИмяПодсистемы(), - "СократитьКоличествоБыстрыхНастроек" - ); + "СократитьКоличествоБыстрыхНастроек"); Запрос = Новый Запрос; Если Параметры = Неопределено Тогда Запрос.Текст = "ВЫБРАТЬ Ссылка, Отчет ИЗ Справочник.ВариантыОтчетов ГДЕ Пользовательский И ТипОтчета <> &Внешний"; @@ -2525,23 +3130,23 @@ Записано = 0; Ошибок = 0; КэшОтчетов = Новый Соответствие; - ИспользуетсяПоУмолчанию = ФормаОтчетаИспользуетсяПоУмолчанию(); + КэшФлажка = Неопределено; ВариантыСОшибками = Новый Массив; Для Каждого СтрокаТаблицы Из ТаблицаОтчетов Цикл ОтчетОбъект = КэшОтчетов.Получить(СтрокаТаблицы.Отчет); // Чтение кэша. Если ОтчетОбъект = Неопределено Тогда // Запись в кэш. - РезультатПодключения = ПодключитьОтчетОбъект(СтрокаТаблицы.Отчет); - Если РезультатПодключения.Подключен Тогда - ОтчетОбъект = РезультатПодключения.Объект; - ОтчетМетаданные = РезультатПодключения.Метаданные; - Если Не ФормаОтчетаИспользуетсяДляОтчета(ОтчетМетаданные, ИспользуетсяПоУмолчанию) Тогда + Подключение = ПодключитьОтчетОбъект(СтрокаТаблицы.Отчет, Истина); + Если Подключение.Успех Тогда + ОтчетОбъект = Подключение.Объект; + ОтчетМетаданные = Подключение.Метаданные; + Если Не ОтчетПодключенКОсновнойФорме(ОтчетМетаданные, КэшФлажка) Тогда // Отчет не подключен к общей форме отчета. // Уменьшение количества быстрых настроек должно выполняться прикладным кодом. ОтчетОбъект = ""; КонецЕсли; Иначе // Отчет не найден. - ОшибкаПоВарианту(СтрокаТаблицы.Ссылка, РезультатПодключения.Ошибки); + ОшибкаПоВарианту(СтрокаТаблицы.Ссылка, Подключение.ТекстОшибки); ОтчетОбъект = ""; КонецЕсли; КэшОтчетов.Вставить(СтрокаТаблицы.Отчет, ОтчетОбъект); @@ -2585,15 +3190,13 @@ ОбщегоНазначения.ХранилищеОбщихНастроекСохранить( ВариантыОтчетовКлиентСервер.ПолноеИмяПодсистемы(), "СократитьКоличествоБыстрыхНастроек", - Параметры - ); + Параметры); ИначеЕсли НомерПопытки > 1 Тогда // Удаление сведений от предыдущих запусков. ОбщегоНазначения.ХранилищеОбщихНастроекУдалить( ВариантыОтчетовКлиентСервер.ПолноеИмяПодсистемы(), "СократитьКоличествоБыстрыхНастроек", - ИмяПользователя() - ); + ИмяПользователя()); КонецЕсли; ЗавершениеПроцедуры(ПредставлениеПроцедуры, Записано); @@ -2602,7 +3205,7 @@ // Следующий запуск должен состояться. ТекстОшибки = ПредставлениеПроцедуры + ":" + Символы.ПС + НСтр("ru = 'Не удалось уменьшить количество быстрых настроек %1 отчетов.'"); - ТекстОшибки = СтрЗаменить(ТекстОшибки, "%1", Ошибок); + ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ТекстОшибки, Ошибок); ВызватьИсключение ТекстОшибки; КонецЕсли; КонецПроцедуры @@ -2610,9 +3213,263 @@ //////////////////////////////////////////////////////////////////////////////// // Обновление информационной базы / Начальное заполнение и актуализация справочников. +// Актуализирует кэш метаданных конфигурации/подключенных расширений. +Функция ОперативноеОбновлениеОбщихДанных(Режим, РазделенныеОбработчики) Экспорт + + //////////////////////////////////////////////////////////////////////////////// + // Выполняется только для предопределенных вариантов отчетов. + // План обновления: + + Кэш = Новый Структура; + Кэш.Вставить("Режим", Режим); + Кэш.Вставить("ОбновлятьКонфигурацию", Режим = "ОбщиеДанныеКонфигурации"); + Кэш.Вставить("ОбновлятьРасширения", Режим = "ОбщиеДанныеРасширений"); + Кэш.Вставить("РазделенныеОбработчики", РазделенныеОбработчики); + Кэш.Вставить("ЕстьИзменения", Ложь); + Кэш.Вставить("ЕстьВажныеИзменения", Ложь); + Кэш.Вставить("ДеревоВариантов", ДеревоПредопределенных(?(Кэш.ОбновлятьКонфигурацию, "Внутренний", "Расширение"))); + Кэш.Вставить("ОбновлятьЗамеры", Кэш.ОбновлятьКонфигурацию И ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ОценкаПроизводительности")); + Кэш.Вставить("ТаблицаЗамеров", ТаблицаЗамеров()); + Кэш.Вставить("МодельСервиса", ОбщегоНазначенияПовтИсп.РазделениеВключено()); + Кэш.Вставить("Уточнение", ?(Кэш.Режим = "ОбщиеДанныеКонфигурации", НСтр("ru = 'метаданные конфигурации'"), НСтр("ru = 'метаданные расширений'"))); + + // План обновления: + + //////////////////////////////////////////////////////////////////////////////// + // 1. Заменить устаревшие ключи вариантов отчетов на актуальные. + АктуализироватьКлючиПредопределенных(Кэш); + + //////////////////////////////////////////////////////////////////////////////// + // 2. Актуализировать предопределенные варианты отчетов и перезаписать + // константу, в которой хранятся привязки к функциональным опциям. + ОбновитьНастройкиПредопределенных(Кэш); + + //////////////////////////////////////////////////////////////////////////////// + // 3. Установить пометку удаления вариантов удаленных отчетов. + ПометитьНаУдалениеВариантыУдаленныхОтчетов(Кэш); + + //////////////////////////////////////////////////////////////////////////////// + // 4. Зарегистрировать ключевые операции. + Если Кэш.ОбновлятьЗамеры Тогда + ОбновитьЗамерыВариантов(Кэш); + КонецЕсли; + + //////////////////////////////////////////////////////////////////////////////// + // 5. Записать параметры в константу/регистр с хранилищем значения. + ЗаписатьПараметрыВариантовОтчетов(Кэш); + + //////////////////////////////////////////////////////////////////////////////// + // 6. Записать срез ключей вариантов отчетов расширений в регистр. + ЗафиксироватьТекущуюВерсиюРасширений(Кэш); + + //////////////////////////////////////////////////////////////////////////////// + // 7. Обновить разделенные данные в модели сервиса. + Если Кэш.МодельСервиса И Кэш.ЕстьВажныеИзменения Тогда + Обработчики = Кэш.РазделенныеОбработчики; + Если Обработчики = Неопределено Тогда + Обработчики = ОбновлениеИнформационнойБазы.НоваяТаблицаОбработчиковОбновления(); + Кэш.РазделенныеОбработчики = Обработчики; + КонецЕсли; + + Обработчик = Обработчики.Добавить(); + Обработчик.РежимВыполнения = "Оперативно"; + Обработчик.Версия = "*"; + Обработчик.Процедура = "ВариантыОтчетов.ОперативноеОбновлениеРазделенныхДанныхКонфигурации"; + Обработчик.Приоритет = 70; + КонецЕсли; + + // Для платформы (очистка коллекции вручную для освобождение памяти от цикличных ссылок). + Кэш.ДеревоВариантов.Колонки.Очистить(); + Кэш.ДеревоВариантов.Строки.Очистить(); + + Возврат Кэш; +КонецФункции + +// Актуализирует данные справочника ВариантыОтчетов. +Функция ОперативноеОбновлениеРазделенныхДанных(Режим) Экспорт + + Кэш = Новый Структура; + Кэш.Вставить("Режим", Режим); + Кэш.Вставить("ЕстьИзменения", Ложь); + Кэш.Вставить("ЕстьВажныеИзменения", Ложь); + Кэш.Вставить("Уточнение", НРег(ОтчетыКлиентСервер.ИмяВПредставление(Режим))); + + //////////////////////////////////////////////////////////////////////////////// + // План обновления: + + //////////////////////////////////////////////////////////////////////////////// + // 1. Актуализировать разделенные варианты отчетов. + АктуализироватьСоставОбласти(Кэш); + + //////////////////////////////////////////////////////////////////////////////// + // 2. Установить пометку удаления вариантов удаленных отчетов. + ПометитьНаУдалениеВариантыУдаленныхОтчетов(Кэш); + + Возврат Кэш; + +КонецФункции + +// Обновление индекса поиска предопределенных вариантов отчетов. +Функция ОтложенноеОбновлениеДанных(Режим, Полное) Экспорт + Если Режим = "ОбщиеДанныеКонфигурации" И Не РазрешеноИндексированиеНеразделенныхДанных() Тогда + Возврат Неопределено; + КонецЕсли; + + Кэш = Новый Структура; + Кэш.Вставить("Режим", Режим); + Кэш.Вставить("ЕстьИзменения", Ложь); + Кэш.Вставить("ЕстьВажныеИзменения", Ложь); + Кэш.Вставить("ОбщиеДанные", Режим = "ОбщиеДанныеКонфигурации" Или Режим = "ОбщиеДанныеРасширений"); + Кэш.Вставить("Полное", Полное); + Кэш.Вставить("Уточнение", НРег(ОтчетыКлиентСервер.ИмяВПредставление(Режим))); + Кэш.Уточнение = Кэш.Уточнение + ", " + ?(Полное, НСтр("ru = 'полное'"), НСтр("ru = 'по изменениям'")); + + // План обновления: + + //////////////////////////////////////////////////////////////////////////////// + // 1. Обновить индекс поиска отчетов. + ОбновитьИндексПоиска(Кэш); + + Возврат Кэш; +КонецФункции + +// Обновление индекса поиска отчетов. +Процедура ОбновитьИндексПоиска(Кэш) + Если Кэш.Режим = "ОбщиеДанныеКонфигурации" И Не РазрешеноИндексированиеНеразделенныхДанных() Тогда + Возврат; + КонецЕсли; + + ПредставлениеПроцедуры = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Обновление индекса поиска (%1)'"), Кэш.Уточнение); + ЗапускПроцедуры(ПредставлениеПроцедуры); + + Запрос = Новый Запрос; + + Если Кэш.ОбщиеДанные Тогда + Поиск = Новый Структура("Отчет, КлючВарианта, ЭтоВариант", , , Истина); + Если Кэш.Режим = "ОбщиеДанныеКонфигурации" Тогда + ДеревоВариантов = ДеревоПредопределенных("Внутренний"); + Запрос.Текст = + "ВЫБРАТЬ + | ПредопределенныеВариантыОтчетов.Ссылка, + | ПредопределенныеВариантыОтчетов.Отчет + |ИЗ + | Справочник.ПредопределенныеВариантыОтчетов КАК ПредопределенныеВариантыОтчетов + |ГДЕ + | ПредопределенныеВариантыОтчетов.ПометкаУдаления = ЛОЖЬ"; + ИначеЕсли Кэш.Режим = "ОбщиеДанныеРасширений" Тогда + ДеревоВариантов = ДеревоПредопределенных("Расширение"); + Запрос.Текст = + "ВЫБРАТЬ + | ПредопределенныеВариантыОтчетовВерсийРасширений.Вариант КАК Ссылка, + | ПредопределенныеВариантыОтчетовВерсийРасширений.Отчет + |ИЗ + | РегистрСведений.ПредопределенныеВариантыОтчетовВерсийРасширений КАК ПредопределенныеВариантыОтчетовВерсийРасширений + |ГДЕ + | ПредопределенныеВариантыОтчетовВерсийРасширений.ВерсияРасширений = &ВерсияРасширений + | И ПредопределенныеВариантыОтчетовВерсийРасширений.Вариант <> &ПустаяСсылка"; + Запрос.УстановитьПараметр("ВерсияРасширений", ПараметрыСеанса.ВерсияРасширений); + Запрос.УстановитьПараметр("ПустаяСсылка", Справочники.ПредопределенныеВариантыОтчетовРасширений.ПустаяСсылка()); + КонецЕсли; + Иначе + Запрос.Текст = + "ВЫБРАТЬ + | ВариантыОтчетов.Ссылка, + | ВариантыОтчетов.Отчет + |ИЗ + | Справочник.ВариантыОтчетов КАК ВариантыОтчетов + |ГДЕ + | ВариантыОтчетов.Пользовательский + | И ВариантыОтчетов.ТипОтчета = &ТипОтчета + | И ВариантыОтчетов.Отчет В(&ДоступныеОтчеты)"; + Запрос.УстановитьПараметр("ДоступныеОтчеты", ВариантыОтчетовПовтИсп.ДоступныеОтчеты(Ложь)); + Если Кэш.Режим = "РазделенныеДанныеКонфигурации" Тогда + Запрос.УстановитьПараметр("ТипОтчета", Перечисления.ТипыОтчетов.Внутренний); + ИначеЕсли Кэш.Режим = "РазделенныеДанныеРасширений" Тогда + Запрос.УстановитьПараметр("ТипОтчета", Перечисления.ТипыОтчетов.Расширение); + КонецЕсли; + КонецЕсли; + + КэшОтчетов = Новый Соответствие; + СтарыеСведения = Новый Структура("ХешНастроек, НаименованияПолей, НаименованияПараметровИОтборов"); + + Выборка = Запрос.Выполнить().Выбрать(); + Пока Выборка.Следующий() Цикл + ПримечаниеПоВарианту(Выборка.Ссылка, НСтр("ru = 'Индексация схемы'")); + + ОтчетОбъект = КэшОтчетов.Получить(Выборка.Отчет); // Чтение кэша. + Если ОтчетОбъект = "" Тогда + Продолжить; // Отчет не подключен, ошибка зарегистрирована ранее. + КонецЕсли; + + ВариантОбъект = Выборка.Ссылка.ПолучитьОбъект(); + + Если Кэш.ОбщиеДанные Тогда + ЗаполнитьЗначенияСвойств(Поиск, ВариантОбъект, "Отчет, КлючВарианта"); + Найденные = ДеревоВариантов.Строки.НайтиСтроки(Поиск, Истина); + Если Найденные.Количество() = 0 Тогда + ТекстОшибки = НСтр("ru = 'Вариант ""%1"" не найден для отчета ""%2""'"); + ОшибкаПоВарианту(ВариантОбъект.Ссылка, ТекстОшибки, ВариантОбъект.КлючВарианта, ВариантОбъект.Отчет); + Продолжить; // Возникла проблема. + КонецЕсли; + + ОписаниеВарианта = Найденные[0]; + СтрокаОтчет = ОписаниеВарианта.Родитель; + ЗаполнитьОписаниеСтрокиВарианта(ОписаниеВарианта, СтрокаОтчет); + + // Если вариант отключен, то и в поиске он не участвует. + Если Не ОписаниеВарианта.Включен Тогда + Продолжить; // Заполнение не требуется. + КонецЕсли; + + Если ОтчетОбъект = Неопределено Тогда + ОтчетОбъект = ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(СтрокаОтчет.СистемнаяИнформация, "ОтчетОбъект"); + КонецЕсли; + НастройкиКД = ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(ОписаниеВарианта.СистемнаяИнформация, "НастройкиКД"); + ВариантОбъект.ДополнительныеСвойства.Вставить("НастройкиКД", НастройкиКД); + ВариантОбъект.ДополнительныеСвойства.Вставить("НастройкиДляПоиска", ОписаниеВарианта.НастройкиДляПоиска); + КонецЕсли; + + ВариантОбъект.ДополнительныеСвойства.Вставить("ОтчетОбъект", ОтчетОбъект); + + ЗаполнитьЗначенияСвойств(СтарыеСведения, ВариантОбъект); + ВариантОбъект.НаименованияПолей = ""; + ВариантОбъект.НаименованияПараметровИОтборов = ""; + Если Кэш.Полное Тогда // Переиндексировать принудительно, без проверки хеш-суммы. + ВариантОбъект.ДополнительныеСвойства.Вставить("ИндексироватьСхему", Истина); + КонецЕсли; + СхемаПроиндексирована = ПроиндексироватьСодержимоеСхемы(ВариантОбъект); + Если СхемаПроиндексирована И ИзменилисьНастройкиПоиска(ВариантОбъект, СтарыеСведения) Тогда + Если Кэш.ОбщиеДанные Тогда + ЗаписатьПредопределенный(ВариантОбъект); + Иначе + ОбновлениеИнформационнойБазы.ЗаписатьОбъект(ВариантОбъект); + КонецЕсли; + Кэш.ЕстьИзменения = Истина; + КонецЕсли; + + // Сохранение инициализированного объекта в кэш. + Если ОтчетОбъект = Неопределено Тогда + ОтчетОбъект = ВариантОбъект.ДополнительныеСвойства.ОтчетОбъект; + Если ОтчетОбъект = Неопределено Тогда + ОтчетОбъект = ""; // Отчет не был подключен, регистрация пустой строки для пропуска других вариантов. + КонецЕсли; + КэшОтчетов.Вставить(Выборка.Отчет, ОтчетОбъект); + КонецЕсли; + КонецЦикла; + + // Для платформы (очистка коллекции вручную для освобождение памяти от цикличных ссылок). + Если Кэш.ОбщиеДанные Тогда + ДеревоВариантов.Колонки.Очистить(); + ДеревоВариантов.Строки.Очистить(); + КонецЕсли; + + ЗавершениеПроцедуры(ПредставлениеПроцедуры); + +КонецПроцедуры + // Замена старых ключей вариантов отчетов на актуальные. Процедура АктуализироватьКлючиПредопределенных(Кэш) - ПредставлениеПроцедуры = НСтр("ru = 'Обновить ключи вариантов отчетов'"); + ПредставлениеПроцедуры = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Обновление ключей вариантов отчетов (%1)'"), Кэш.Уточнение); ЗапускПроцедуры(ПредставлениеПроцедуры); // Составить таблицу замен старых ключей вариантов на актуальные. @@ -2649,6 +3506,10 @@ | ВариантыОтчетовАктуальные.Ссылка ЕСТЬ NULL | И НЕ ВариантыОтчетовСтарые.Ссылка ЕСТЬ NULL "; + Если Кэш.Режим = "ОбщиеДанныеРасширений" Тогда + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, ".ПредопределенныеВариантыОтчетов", ".ПредопределенныеВариантыОтчетовРасширений"); + КонецЕсли; + Запрос = Новый Запрос; Запрос.УстановитьПараметр("Изменения", Изменения); Запрос.Текст = ТекстЗапроса; @@ -2656,7 +3517,8 @@ // Заменить старые имена вариантов на актуальные. Выборка = Запрос.Выполнить().Выбрать(); Пока Выборка.Следующий() Цикл - Кэш.ОбновитьОбласти = Истина; + Кэш.ЕстьИзменения = Истина; + Кэш.ЕстьВажныеИзменения = Истина; ВариантОбъект = Выборка.Ссылка.ПолучитьОбъект(); ВариантОбъект.КлючВарианта = Выборка.АктуальноеИмяВарианта; ЗаписатьПредопределенный(ВариантОбъект); @@ -2667,38 +3529,53 @@ // Актуализация предопределенных вариантов отчетов. Процедура ОбновитьНастройкиПредопределенных(Кэш) - ПредставлениеПроцедуры = НСтр("ru = 'Обновить предопределенные'"); + ПредставлениеПроцедуры = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Обновление настроек предопределенных (%1)'"), Кэш.Уточнение); ЗапускПроцедуры(ПредставлениеПроцедуры); + РеквизитыВариантов = Метаданные.Справочники.ВариантыОтчетов.Реквизиты; + ТаблицаФункциональныхОпций = Новый ТаблицаЗначений; - ТаблицаФункциональныхОпций.Колонки.Добавить("Отчет", Новый ОписаниеТипов("СправочникСсылка.ИдентификаторыОбъектовМетаданных")); - ТаблицаФункциональныхОпций.Колонки.Добавить("ПредопределенныйВариант", Новый ОписаниеТипов("СправочникСсылка.ПредопределенныеВариантыОтчетов")); - ТаблицаФункциональныхОпций.Колонки.Добавить("ИмяФункциональнойОпции", Новый ОписаниеТипов("Строка")); + ТаблицаФункциональныхОпций.Колонки.Добавить("Отчет", РеквизитыВариантов.Отчет.Тип); + ТаблицаФункциональныхОпций.Колонки.Добавить("ПредопределенныйВариант", РеквизитыВариантов.ПредопределенныйВариант.Тип); + ТаблицаФункциональныхОпций.Колонки.Добавить("ИмяФункциональнойОпции", Новый ОписаниеТипов("Строка")); + Кэш.Вставить("ТаблицаФункциональныхОпций", ТаблицаФункциональныхОпций); ОтчетыСНастройкамиСписок = Новый СписокЗначений; + Кэш.Вставить("ОтчетыСНастройкамиСписок", ОтчетыСНастройкамиСписок); Кэш.ДеревоВариантов.Колонки.Добавить("НайденВБазеДанных", Новый ОписаниеТипов("Булево")); Кэш.ДеревоВариантов.Колонки.Добавить("ВариантИзБазы", Новый ОписаниеТипов("СтрокаТаблицыЗначений")); - Кэш.ДеревоВариантов.Колонки.Добавить("ВариантРодитель", Новый ОписаниеТипов("СправочникСсылка.ПредопределенныеВариантыОтчетов")); - ПоискВарианта = Новый Структура("Отчет, КлючВарианта, НайденВБазеДанных, ЭтоВариант", , , Ложь, Истина); - ПустаяСсылка = Справочники.ПредопределенныеВариантыОтчетов.ПустаяСсылка(); + + Если Кэш.Режим = "ОбщиеДанныеКонфигурации" Тогда + Кэш.ДеревоВариантов.Колонки.Добавить("ВариантРодитель", Новый ОписаниеТипов("СправочникСсылка.ПредопределенныеВариантыОтчетов")); + ТекстЗапроса = "ВЫБРАТЬ * ИЗ Справочник.ПредопределенныеВариантыОтчетов УПОРЯДОЧИТЬ ПО ПометкаУдаления"; + ПустаяСсылка = Справочники.ПредопределенныеВариантыОтчетов.ПустаяСсылка(); + ИначеЕсли Кэш.Режим = "ОбщиеДанныеРасширений" Тогда + Кэш.ДеревоВариантов.Колонки.Добавить("ВариантРодитель", Новый ОписаниеТипов("СправочникСсылка.ПредопределенныеВариантыОтчетовРасширений")); + ТекстЗапроса = "ВЫБРАТЬ * ИЗ Справочник.ПредопределенныеВариантыОтчетовРасширений УПОРЯДОЧИТЬ ПО ПометкаУдаления"; + ПустаяСсылка = Справочники.ПредопределенныеВариантыОтчетовРасширений.ПустаяСсылка(); + КонецЕсли; // Сопоставление информации из базы и из метаданных и пометка на удаление устаревших объектов из базы. - Запрос = Новый Запрос("ВЫБРАТЬ * ИЗ Справочник.ПредопределенныеВариантыОтчетов УПОРЯДОЧИТЬ ПО ПометкаУдаления"); + ПоискВарианта = Новый Структура("Отчет, КлючВарианта, НайденВБазеДанных, ЭтоВариант"); + ПоискВарианта.НайденВБазеДанных = Ложь; + ПоискВарианта.ЭтоВариант = Истина; + Запрос = Новый Запрос(ТекстЗапроса); ТаблицаПредопределенные = Запрос.Выполнить().Выгрузить(); Для Каждого ВариантИзБазы Из ТаблицаПредопределенные Цикл ЗаполнитьЗначенияСвойств(ПоискВарианта, ВариантИзБазы, "Отчет, КлючВарианта"); Найденные = Кэш.ДеревоВариантов.Строки.НайтиСтроки(ПоискВарианта, Истина); Если Найденные.Количество() = 0 Тогда - Если ВариантИзБазы.ПометкаУдаления И ВариантИзБазы.Родитель <> ПустаяСсылка Тогда + Если ВариантИзБазы.ПометкаУдаления И ВариантИзБазы.Родитель = ПустаяСсылка Тогда Продолжить; // Действие не требуется. КонецЕсли; ВариантОбъект = ВариантИзБазы.Ссылка.ПолучитьОбъект(); ВариантОбъект.ПометкаУдаления = Истина; ВариантОбъект.Родитель = ПустаяСсылка; ЗаписатьПредопределенный(ВариантОбъект); - Кэш.ОбновитьОбласти = Истина; + Кэш.ЕстьИзменения = Истина; + Кэш.ЕстьВажныеИзменения = Истина; Иначе ОписаниеВарианта = Найденные[0]; ЗаполнитьОписаниеСтрокиВарианта(ОписаниеВарианта); @@ -2736,31 +3613,19 @@ КонецЦикла; КонецЦикла; - // Перезапись константы только в случае если обработчик обновления был запущен "для записи" (в монопольном режиме). - ТаблицаФункциональныхОпций.Сортировать("Отчет, ПредопределенныйВариант, ИмяФункциональнойОпции"); - ОтчетыСНастройкамиСписок.СортироватьПоЗначению(); - ОтчетыСНастройками = ОтчетыСНастройкамиСписок.ВыгрузитьЗначения(); - - НовоеЗначение = Новый Структура; - НовоеЗначение.Вставить("ТаблицаФункциональныхОпций", ТаблицаФункциональныхОпций); - НовоеЗначение.Вставить("ОтчетыСНастройками", ОтчетыСНастройками); - - СтароеЗначение = Константы.ПараметрыВариантовОтчетов.Получить().Получить(); - Если ОбщегоНазначения.ЗначениеВСтрокуXML(НовоеЗначение) <> ОбщегоНазначения.ЗначениеВСтрокуXML(СтароеЗначение) Тогда - КонстантаОбъект = Константы.ПараметрыВариантовОтчетов.СоздатьМенеджерЗначения(); - КонстантаОбъект.Значение = Новый ХранилищеЗначения(НовоеЗначение, Новый СжатиеДанных(9)); - ОбновлениеИнформационнойБазы.ЗаписатьДанные(КонстантаОбъект, Ложь, Ложь); - КонецЕсли; - ЗавершениеПроцедуры(ПредставлениеПроцедуры); КонецПроцедуры // Записывает настройки варианта в данные справочника. Функция ОбновитьПредопределенный(Кэш, ОписаниеВарианта) + ВариантИзБазы = ОписаниеВарианта.ВариантИзБазы; + Если Кэш.ОбновлятьЗамеры Тогда + Ключ = ?(ОписаниеВарианта.НайденВБазеДанных, ВариантИзБазы.КлючЗамеров, ""); + ЗарегистрироватьЗамерыВариантаКОбновлению(Кэш, Ключ, ОписаниеВарианта.КлючЗамеров, ОписаниеВарианта.Наименование); + КонецЕсли; Если ОписаниеВарианта.НайденВБазеДанных Тогда - ВариантИзБазы = ОписаниеВарианта.ВариантИзБазы; Если ИзменилисьКлючевыеНастройкиПредопределенного(ОписаниеВарианта, ВариантИзБазы) Тогда - Кэш.ОбновитьОбласти = Истина; // Перезапись с обновлением разделенных данных. + Кэш.ЕстьВажныеИзменения = Истина; // Перезапись ключевых настроек (потребуется обновление разделенных данных). ИначеЕсли ИзменилисьВторостепенныеНастройкиПредопределенного(ОписаниеВарианта, ВариантИзБазы) Тогда // Перезапись без обновления разделенных данных. Иначе @@ -2773,8 +3638,12 @@ ВариантОбъект.ПометкаУдаления = Ложь; КонецЕсли; Иначе - Кэш.ОбновитьОбласти = Истина; // Регистрация нового. - ВариантОбъект = Справочники.ПредопределенныеВариантыОтчетов.СоздатьЭлемент(); + Кэш.ЕстьВажныеИзменения = Истина; // Регистрация нового (потребуется обновление разделенных данных). + Если Кэш.Режим = "ОбщиеДанныеКонфигурации" Тогда + ВариантОбъект = Справочники.ПредопределенныеВариантыОтчетов.СоздатьЭлемент(); + ИначеЕсли Кэш.Режим = "ОбщиеДанныеРасширений" Тогда + ВариантОбъект = Справочники.ПредопределенныеВариантыОтчетовРасширений.СоздатьЭлемент(); + КонецЕсли; КонецЕсли; ЗаполнитьЗначенияСвойств(ВариантОбъект, ОписаниеВарианта, "Отчет, КлючВарианта, Наименование, Включен, ВидимостьПоУмолчанию, Описание, ГруппироватьПоОтчету"); @@ -2788,6 +3657,11 @@ СтрокаРазмещения.СмТакже = (НРег(КлючИЗначение.Значение) = НРег("СмТакже")); КонецЦикла; + Если Кэш.ОбновлятьЗамеры Тогда + ВариантОбъект.КлючЗамеров = ОписаниеВарианта.КлючЗамеров; + КонецЕсли; + + Кэш.ЕстьИзменения = Истина; ЗаписатьПредопределенный(ВариантОбъект); Возврат ВариантОбъект.Ссылка; @@ -2810,6 +3684,7 @@ // Шапка Если ВариантИзБазы.Включен <> ОписаниеВарианта.Включен Или ВариантИзБазы.Описание <> ОписаниеВарианта.Описание + Или ВариантИзБазы.КлючЗамеров <> ОписаниеВарианта.КлючЗамеров Или ВариантИзБазы.ГруппироватьПоОтчету <> ОписаниеВарианта.ГруппироватьПоОтчету Тогда Возврат Истина; КонецЕсли; @@ -2834,7 +3709,7 @@ КонецФункции // Определяет изменились ли настройки поиска предопределенного варианта отчета. -Функция ИзменилисьНастройкиПоискаПредопределенного(ВариантИзБазы, СтарыеСведения) +Функция ИзменилисьНастройкиПоиска(ВариантИзБазы, СтарыеСведения) Если ВариантИзБазы.ХешНастроек <> СтарыеСведения.ХешНастроек Или ВариантИзБазы.НаименованияПолей <> СтарыеСведения.НаименованияПолей Или ВариантИзБазы.НаименованияПараметровИОтборов <> СтарыеСведения.НаименованияПараметровИОтборов Тогда @@ -2845,26 +3720,25 @@ КонецФункции // Приводит разделенные данные в соответствие с неразделенными данными. -Процедура АктуализироватьСоставОбласти() - - ПредставлениеПроцедуры = НСтр("ru = 'Обновить разделенные вариантов отчетов'"); +Процедура АктуализироватьСоставОбласти(Кэш) + ПредставлениеПроцедуры = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Обновление вариантов отчетов (%1)'"), Кэш.Уточнение); ЗапускПроцедуры(ПредставлениеПроцедуры); // Обновление сведений предопределенных вариантов. ТекстЗапроса = "ВЫБРАТЬ - | ПредопределенныеВариантыОтчетов.Ссылка КАК ПредопределенныйВариант, - | ПредопределенныеВариантыОтчетов.Наименование КАК Наименование, - | ПредопределенныеВариантыОтчетов.Отчет КАК Отчет, - | ПредопределенныеВариантыОтчетов.ГруппироватьПоОтчету КАК ГруппироватьПоОтчету, - | ПредопределенныеВариантыОтчетов.КлючВарианта КАК КлючВарианта, - | ПредопределенныеВариантыОтчетов.ВидимостьПоУмолчанию КАК ВидимостьПоУмолчанию, - | ПредопределенныеВариантыОтчетов.Родитель КАК Родитель + | ПредопределенныеКонфигурации.Ссылка КАК ПредопределенныйВариант, + | ПредопределенныеКонфигурации.Наименование КАК Наименование, + | ПредопределенныеКонфигурации.Отчет КАК Отчет, + | ПредопределенныеКонфигурации.ГруппироватьПоОтчету КАК ГруппироватьПоОтчету, + | ПредопределенныеКонфигурации.КлючВарианта КАК КлючВарианта, + | ПредопределенныеКонфигурации.ВидимостьПоУмолчанию КАК ВидимостьПоУмолчанию, + | ПредопределенныеКонфигурации.Родитель КАК Родитель |ПОМЕСТИТЬ втПредопределенные |ИЗ - | Справочник.ПредопределенныеВариантыОтчетов КАК ПредопределенныеВариантыОтчетов + | Справочник.ПредопределенныеВариантыОтчетов КАК ПредопределенныеКонфигурации |ГДЕ - | ПредопределенныеВариантыОтчетов.ПометкаУдаления = ЛОЖЬ + | ПредопределенныеКонфигурации.ПометкаУдаления = ЛОЖЬ |; | |//////////////////////////////////////////////////////////////////////////////// @@ -2877,13 +3751,14 @@ | ВариантыОтчетов.Наименование, | ВариантыОтчетов.ПредопределенныйВариант, | ВариантыОтчетов.ВидимостьПоУмолчанию, - | ВариантыОтчетов.Родитель + | ВариантыОтчетов.Родитель, + | ВариантыОтчетов.ВидимостьПоУмолчаниюПереопределена |ПОМЕСТИТЬ втВариантыОтчетов |ИЗ | Справочник.ВариантыОтчетов КАК ВариантыОтчетов |ГДЕ - | (ВариантыОтчетов.ТипОтчета = ЗНАЧЕНИЕ(Перечисление.ТипыОтчетов.Внутренний) - | ИЛИ ТИПЗНАЧЕНИЯ(ВариантыОтчетов.Отчет) = ТИП(Справочник.ИдентификаторыОбъектовМетаданных)) + | (ВариантыОтчетов.ТипОтчета = &ТипОтчета + | ИЛИ ТИПЗНАЧЕНИЯ(ВариантыОтчетов.Отчет) = &ТипРеквизитаОтчет) | И ВариантыОтчетов.Пользовательский = ЛОЖЬ |; | @@ -2904,11 +3779,18 @@ | втПредопределенные.Отчет КАК Отчет, | втПредопределенные.КлючВарианта КАК КлючВарианта, | втПредопределенные.ГруппироватьПоОтчету КАК ГруппироватьПоОтчету, - | втПредопределенные.Родитель КАК ПредопределенныйВариантРодитель, - | втПредопределенные.ВидимостьПоУмолчанию КАК ВидимостьПоУмолчанию, + | ВЫБОР + | КОГДА втПредопределенные.Родитель = &ПустаяСсылкаВарианта + | ТОГДА НЕОПРЕДЕЛЕНО + | ИНАЧЕ втПредопределенные.Родитель + | КОНЕЦ КАК ПредопределенныйВариантРодитель, + | ВЫБОР + | КОГДА втВариантыОтчетов.ВидимостьПоУмолчаниюПереопределена + | ТОГДА втВариантыОтчетов.ВидимостьПоУмолчанию + | ИНАЧЕ втВариантыОтчетов.ВидимостьПоУмолчанию + | КОНЕЦ КАК ВидимостьПоУмолчанию, | втВариантыОтчетов.Ссылка КАК РеквизитСсылка, | втВариантыОтчетов.Родитель КАК РеквизитРодитель, - | втВариантыОтчетов.ТипОтчета КАК РеквизитТипОтчета, | втВариантыОтчетов.Отчет КАК РеквизитОтчет, | втВариантыОтчетов.КлючВарианта КАК РеквизитКлючВарианта, | втВариантыОтчетов.Наименование КАК РеквизитНаименование, @@ -2921,9 +3803,18 @@ | ПО втВариантыОтчетов.ПредопределенныйВариант = втПредопределенные.ПредопределенныйВариант"; Запрос = Новый Запрос; + Если Кэш.Режим = "РазделенныеДанныеКонфигурации" Тогда + Запрос.УстановитьПараметр("ТипОтчета", Перечисления.ТипыОтчетов.Внутренний); + Запрос.УстановитьПараметр("ТипРеквизитаОтчет", Тип("СправочникСсылка.ИдентификаторыОбъектовМетаданных")); + Запрос.УстановитьПараметр("ПустаяСсылкаВарианта", Справочники.ПредопределенныеВариантыОтчетов.ПустаяСсылка()); + ИначеЕсли Кэш.Режим = "РазделенныеДанныеРасширений" Тогда + Запрос.УстановитьПараметр("ТипОтчета", Перечисления.ТипыОтчетов.Расширение); + Запрос.УстановитьПараметр("ТипРеквизитаОтчет", Тип("СправочникСсылка.ИдентификаторыОбъектовРасширений")); + Запрос.УстановитьПараметр("ПустаяСсылкаВарианта", Справочники.ПредопределенныеВариантыОтчетовРасширений.ПустаяСсылка()); + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, ".ПредопределенныеВариантыОтчетов", ".ПредопределенныеВариантыОтчетовРасширений"); + КонецЕсли; Запрос.Текст = ТекстЗапроса; - Кэш = Новый Структура; Кэш.Вставить("ПустаяСсылка", Справочники.ВариантыОтчетов.ПустаяСсылка()); Кэш.Вставить("ПоискРодителей", Новый Соответствие); Кэш.Вставить("ОбработанныеПредопределенные", Новый Массив); @@ -2937,22 +3828,15 @@ Шаблоны.УстановкаПометкиУдаления.Вставить("Родитель", Кэш.ПустаяСсылка); Шаблоны.УстановкаПометкиУдаления.Вставить("ПометкаУдаления", Истина); - Шаблоны.Вставить("ОбновлениеСведений", Новый Структура); - Шаблоны.ОбновлениеСведений.Вставить("ТипОтчета", Перечисления.ТипыОтчетов.Внутренний); - Шаблоны.ОбновлениеСведений.Вставить("ПометкаУдаления", Ложь); - Шаблоны.ОбновлениеСведений.Вставить("Родитель", Неопределено); - Шаблоны.ОбновлениеСведений.Вставить("Наименование", Неопределено); - Шаблоны.ОбновлениеСведений.Вставить("Отчет", Неопределено); - Шаблоны.ОбновлениеСведений.Вставить("КлючВарианта", Неопределено); - Шаблоны.ОбновлениеСведений.Вставить("ПредопределенныйВариант", Неопределено); - Шаблоны.ОбновлениеСведений.Вставить("ВидимостьПоУмолчанию", Неопределено); + Шаблоны.Вставить("НовыеДанные", Новый Структура("ПометкаУдаления, Родитель, + |Наименование, Отчет, КлючВарианта, ПредопределенныйВариант, ВидимостьПоУмолчанию")); СводнаяТаблицаПредопределенных = Запрос.Выполнить().Выгрузить(); СводнаяТаблицаПредопределенных.Колонки.Добавить("Обработана", Новый ОписаниеТипов("Булево")); СводнаяТаблицаПредопределенных.Колонки.Добавить("Родитель", Новый ОписаниеТипов("СправочникСсылка.ВариантыОтчетов")); // Обновление основных предопределенных вариантов (без родителя). - Поиск = Новый Структура("ПредопределенныйВариантРодитель, УстановитьПометкуУдаления", Справочники.ПредопределенныеВариантыОтчетов.ПустаяСсылка(), Ложь); + Поиск = Новый Структура("ПредопределенныйВариантРодитель, УстановитьПометкуУдаления", Неопределено, Ложь); Найденные = СводнаяТаблицаПредопределенных.НайтиСтроки(Поиск); Для Каждого СтрокаТаблицы Из Найденные Цикл Если СтрокаТаблицы.Обработана Тогда @@ -3023,10 +3907,11 @@ Запрос.Текст = ТекстЗапроса; Выборка = Запрос.Выполнить().Выбрать(); Пока Выборка.Следующий() Цикл + Кэш.ЕстьИзменения = Истина; ВариантОбъект = Выборка.Ссылка.ПолучитьОбъект(); ВариантОбъект.Родитель = Выборка.Родитель; ВариантОбъект.Заблокировать(); - ОбновлениеИнформационнойБазы.ЗаписатьДанные(ВариантОбъект, ВариантОбъект.ЭтоНовый(), Ложь); + ОбновлениеИнформационнойБазы.ЗаписатьОбъект(ВариантОбъект); КонецЦикла; ЗавершениеПроцедуры(ПредставлениеПроцедуры); @@ -3051,19 +3936,18 @@ СтрокаТаблицы.Родитель = Кэш.ПустаяСсылка; КонецЕсли; Кэш.ОбработанныеПредопределенные.Добавить(СтрокаТаблицы.ПредопределенныйВариант); - ЗаполнитьЗначенияСвойств(Шаблоны.ОбновлениеСведений, СтрокаТаблицы); - Шаблоны.ОбновлениеСведений.ПометкаУдаления = Ложь; + ЗаполнитьЗначенияСвойств(Шаблоны.НовыеДанные, СтрокаТаблицы); + Шаблоны.НовыеДанные.ПометкаУдаления = Ложь; Если СтрокаТаблицы.СоздатьНовый Тогда // Добавить. ВариантОбъект = Справочники.ВариантыОтчетов.СоздатьЭлемент(); ВариантОбъект.ПредопределенныйВариант = СтрокаТаблицы.ПредопределенныйВариант; - ВариантОбъект.ТипОтчета = Перечисления.ТипыОтчетов.Внутренний; ВариантОбъект.Пользовательский = Ложь; Иначе // Обновить (если есть изменения). - Если СовпадаютЗначенияСвойств(Шаблоны.ОбновлениеСведений, СтрокаТаблицы, "Реквизит") Тогда + Если СовпадаютЗначенияСвойств(Шаблоны.НовыеДанные, СтрокаТаблицы, "Реквизит") Тогда Возврат; // Изменений нет. КонецЕсли; // Перенос пользовательских настроек. - ЗаменитьКлючиПользовательскихНастроек(Шаблоны.ОбновлениеСведений, СтрокаТаблицы); + ЗаменитьКлючиПользовательскихНастроек(Шаблоны.НовыеДанные, СтрокаТаблицы); ВариантОбъект = СтрокаТаблицы.РеквизитСсылка.ПолучитьОбъект(); КонецЕсли; Если ВариантОбъект.ВидимостьПоУмолчаниюПереопределена Тогда @@ -3071,11 +3955,14 @@ Иначе ИсключаяСвойства = Неопределено; КонецЕсли; - ЗаполнитьЗначенияСвойств(ВариантОбъект, Шаблоны.ОбновлениеСведений, , ИсключаяСвойства); + ЗаполнитьЗначенияСвойств(ВариантОбъект, Шаблоны.НовыеДанные, , ИсключаяСвойства); + ТипОтчетаСтрокой = ВариантыОтчетовКлиентСервер.ТипОтчетаСтрокой(Неопределено, ВариантОбъект.Отчет); + ВариантОбъект.ТипОтчета = Перечисления.ТипыОтчетов[ТипОтчетаСтрокой]; КонецЕсли; + Кэш.ЕстьИзменения = Истина; ВариантОбъект.Заблокировать(); - ОбновлениеИнформационнойБазы.ЗаписатьДанные(ВариантОбъект, ВариантОбъект.ЭтоНовый(), Ложь); + ОбновлениеИнформационнойБазы.ЗаписатьОбъект(ВариантОбъект); СтрокаТаблицы.РеквизитСсылка = ВариантОбъект.Ссылка; КонецПроцедуры @@ -3091,39 +3978,39 @@ КонецФункции // Установка пометки удаления вариантов удаленных отчетов. -Процедура ПометитьНаУдалениеВариантыУдаленныхОтчетов(Кэш, ОбщиеДанные) - Запрос = Новый Запрос; - Запрос.Текст = - "ВЫБРАТЬ - | ДанныеСправочника.Ссылка - |ИЗ - | Справочник.ПредопределенныеВариантыОтчетов КАК ДанныеСправочника - |ГДЕ - | ДанныеСправочника.ПометкаУдаления = ЛОЖЬ - | И (ДанныеСправочника.Отчет = НЕОПРЕДЕЛЕНО - | ИЛИ ДанныеСправочника.Отчет.ПометкаУдаления = ИСТИНА)"; - - Если Не ОбщиеДанные Тогда - Запрос.Текст = СтрЗаменить(Запрос.Текст, "Справочник.ПредопределенныеВариантыОтчетов", "Справочник.ВариантыОтчетов"); - КонецЕсли; - - Результат = Запрос.Выполнить(); - Если Результат.Пустой() Тогда - Возврат; - КонецЕсли; - - Если ОбщиеДанные Тогда - Кэш.ОбновитьОбласти = Истина; - Суффикс = НСтр("ru = 'общие данные'"); - Иначе - Суффикс = НСтр("ru = 'область данных'"); - КонецЕсли; - - ПредставлениеПроцедуры = НСтр("ru = 'Удаление вариантов удаленных отчетов'") + " (" + Суффикс + ")"; +Процедура ПометитьНаУдалениеВариантыУдаленныхОтчетов(Кэш) + ПредставлениеПроцедуры = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Удаление вариантов удаленных отчетов (%1)'"), Кэш.Уточнение); ЗапускПроцедуры(ПредставлениеПроцедуры); - МассивСсылокВариантов = Результат.Выгрузить().ВыгрузитьКолонку("Ссылка"); + Запрос = Новый Запрос; + ТекстЗапроса = + "ВЫБРАТЬ + | ВариантыОтчетов.Ссылка + |ИЗ + | Справочник.ВариантыОтчетов КАК ВариантыОтчетов + |ГДЕ + | ВариантыОтчетов.ПометкаУдаления = ЛОЖЬ + | И (ВариантыОтчетов.Отчет = НЕОПРЕДЕЛЕНО + | ИЛИ ЕСТЬNULL(ВариантыОтчетов.Отчет.ПометкаУдаления, ИСТИНА) = ИСТИНА) + | И ВариантыОтчетов.ТипОтчета = &ТипОтчета"; + + Если Кэш.Режим = "ОбщиеДанныеКонфигурации" Тогда + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, ".ВариантыОтчетов", ".ПредопределенныеВариантыОтчетов"); + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "И ВариантыОтчетов.ТипОтчета = &ТипОтчета", ""); + ИначеЕсли Кэш.Режим = "ОбщиеДанныеРасширений" Тогда + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, ".ВариантыОтчетов", ".ПредопределенныеВариантыОтчетовРасширений"); + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "И ВариантыОтчетов.ТипОтчета = &ТипОтчета", ""); + ИначеЕсли Кэш.Режим = "РазделенныеДанныеКонфигурации" Тогда + Запрос.УстановитьПараметр("ТипОтчета", Перечисления.ТипыОтчетов.Внутренний); + ИначеЕсли Кэш.Режим = "РазделенныеДанныеРасширений" Тогда + Запрос.УстановитьПараметр("ТипОтчета", Перечисления.ТипыОтчетов.Расширение); + КонецЕсли; + + Запрос.Текст = ТекстЗапроса; + МассивСсылокВариантов = Запрос.Выполнить().Выгрузить().ВыгрузитьКолонку("Ссылка"); Для Каждого ВариантСсылка Из МассивСсылокВариантов Цикл + Кэш.ЕстьИзменения = Истина; + Кэш.ЕстьВажныеИзменения = Истина; ВариантОбъект = ВариантСсылка.ПолучитьОбъект(); ВариантОбъект.Заблокировать(); ВариантОбъект.ПометкаУдаления = Истина; @@ -3196,7 +4083,223 @@ // Записывает предопределенный объект. Процедура ЗаписатьПредопределенный(ВариантОбъект) ВариантОбъект.ДополнительныеСвойства.Вставить("ЗаполнениеПредопределенных"); - ОбновлениеИнформационнойБазы.ЗаписатьДанные(ВариантОбъект, ВариантОбъект.ЭтоНовый(), Ложь); + ОбновлениеИнформационнойБазы.ЗаписатьОбъект(ВариантОбъект); +КонецПроцедуры + +// Регистрирует изменения в таблице замеров. +Процедура ЗарегистрироватьЗамерыВариантаКОбновлению(Кэш, Знач СтарыйКлюч, Знач АктуальныйКлюч, Знач АктуальноеНаименование) + Если ПустаяСтрока(СтарыйКлюч) Тогда + СтарыйКлюч = АктуальныйКлюч; + КонецЕсли; + + ОбновлениеЗамера = Кэш.ТаблицаЗамеров.Добавить(); + ОбновлениеЗамера.СтароеИмя = СтарыйКлюч + ".Открытие"; + ОбновлениеЗамера.АктуальноеИмя = АктуальныйКлюч + ".Открытие"; + ОбновлениеЗамера.АктуальноеНаименование = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Отчет ""%1"" (открытие)'"), АктуальноеНаименование); + + ОбновлениеЗамера = Кэш.ТаблицаЗамеров.Добавить(); + ОбновлениеЗамера.СтароеИмя = СтарыйКлюч + ".Формирование"; + ОбновлениеЗамера.АктуальноеИмя = АктуальныйКлюч + ".Формирование"; + ОбновлениеЗамера.АктуальноеНаименование = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Отчет ""%1"" (формирование)'"), АктуальноеНаименование); + + ОбновлениеЗамера = Кэш.ТаблицаЗамеров.Добавить(); + ОбновлениеЗамера.СтароеИмя = СтарыйКлюч + ".Настройки"; + ОбновлениеЗамера.АктуальноеИмя = АктуальныйКлюч + ".Настройки"; + ОбновлениеЗамера.АктуальноеНаименование = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Отчет ""%1"" (настройки)'"), АктуальноеНаименование); +КонецПроцедуры + +// Регистрирует изменения в таблице замеров. +Процедура ОбновитьЗамерыВариантов(Кэш) + // Регистрация глобальных ключевых операций. + СписокОпераций = СписокГлобальныхКлючевыхОпераций(); + Для Каждого ЭлементСписка Из СписокОпераций Цикл + ОбновлениеЗамера = Кэш.ТаблицаЗамеров.Добавить(); + ОбновлениеЗамера.СтароеИмя = ЭлементСписка.Значение; + ОбновлениеЗамера.АктуальноеИмя = ЭлементСписка.Значение; + ОбновлениеЗамера.АктуальноеНаименование = ЭлементСписка.Представление; + КонецЦикла; + + ПриОбновленииКлючевыхОпераций(Кэш.ТаблицаЗамеров); +КонецПроцедуры + +// Актуализирует состав указанных ключевых операций. +// +// Параметры: +// ТаблицаОбновленияКлючевыхОпераций - ТаблицаЗначений - Состав ключевых операций. +// * СтароеИмя - Строка - Старое имя ключевой операции. +// * АктуальноеИмя - Строка - Актуальное имя ключевой операции. +// * АктуальноеНаименование - Строка - Представление ключевой операции. +// +// Места использования: +// ВариантыОтчетов.ОбновитьЗамерыВариантов(). +// +Процедура ПриОбновленииКлючевыхОпераций(ТаблицаОбновленияКлючевыхОпераций) Экспорт + ТекстЗапроса = + "ВЫБРАТЬ + | ТаблицаОбновленияКлючевыхОпераций.СтароеИмя КАК СтароеИмя, + | ТаблицаОбновленияКлючевыхОпераций.АктуальноеИмя КАК АктуальноеИмя, + | ТаблицаОбновленияКлючевыхОпераций.АктуальноеНаименование КАК АктуальноеНаименование + |ПОМЕСТИТЬ втТаблицаОбновления + |ИЗ + | &ТаблицаОбновленияКлючевыхОпераций КАК ТаблицаОбновленияКлючевыхОпераций + |; + | + |//////////////////////////////////////////////////////////////////////////////// + |ВЫБРАТЬ + | втТаблицаОбновления.АктуальноеИмя, + | втТаблицаОбновления.АктуальноеНаименование, + | ВЫБОР + | КОГДА НЕ АктуальныеОперации.Ссылка ЕСТЬ NULL + | ТОГДА 2 + | КОГДА НЕ СтарыеОперации.Ссылка ЕСТЬ NULL + | ТОГДА 1 + | ИНАЧЕ 3 + | КОНЕЦ КАК Приоритет, + | ЕСТЬNULL(АктуальныеОперации.Ссылка, СтарыеОперации.Ссылка) КАК Ссылка, + | ЕСТЬNULL(АктуальныеОперации.Имя, СтарыеОперации.Имя) КАК Имя, + | ЕСТЬNULL(АктуальныеОперации.Наименование, СтарыеОперации.Наименование) КАК Наименование + |ИЗ + | втТаблицаОбновления КАК втТаблицаОбновления + | ЛЕВОЕ СОЕДИНЕНИЕ Справочник.КлючевыеОперации КАК АктуальныеОперации + | ПО втТаблицаОбновления.АктуальноеИмя = АктуальныеОперации.Имя + | И (АктуальныеОперации.ПометкаУдаления = ЛОЖЬ) + | ЛЕВОЕ СОЕДИНЕНИЕ Справочник.КлючевыеОперации КАК СтарыеОперации + | ПО втТаблицаОбновления.СтароеИмя = СтарыеОперации.Имя + | И (СтарыеОперации.ПометкаУдаления = ЛОЖЬ) + | + |УПОРЯДОЧИТЬ ПО + | Приоритет УБЫВ"; + + МодульОценкаПроизводительностиВызовСервераПолныеПрава = ОбщегоНазначения.ОбщийМодуль("ОценкаПроизводительностиВызовСервераПолныеПрава"); + + Запрос = Новый Запрос(ТекстЗапроса); + Запрос.УстановитьПараметр("ТаблицаОбновленияКлючевыхОпераций", ТаблицаОбновленияКлючевыхОпераций); + + Обработанные = Новый Массив; + Выборка = Запрос.Выполнить().Выбрать(); + Пока Выборка.Следующий() Цикл + АктуальноеИмя = Выборка.АктуальноеИмя; + Если Обработанные.Найти(АктуальноеИмя) = Неопределено Тогда + Обработанные.Добавить(АктуальноеИмя); + Иначе + Продолжить; // Уже обработана операция с таким именем и более высоким приоритетом. + КонецЕсли; + Если Выборка.Имя = АктуальноеИмя + И Выборка.Наименование = Выборка.АктуальноеНаименование Тогда + Продолжить; // Обновление не требуется. + КонецЕсли; + Если Выборка.Приоритет = 3 Тогда + КлючеваяОперацияСсылка = МодульОценкаПроизводительностиВызовСервераПолныеПрава.СоздатьКлючевуюОперацию(АктуальноеИмя); + Иначе + КлючеваяОперацияСсылка = Выборка.Ссылка; + КонецЕсли; + КлючеваяОперацияОбъект = КлючеваяОперацияСсылка.ПолучитьОбъект(); + КлючеваяОперацияОбъект.Имя = АктуальноеИмя; + КлючеваяОперацияОбъект.Наименование = Выборка.АктуальноеНаименование; + ОбновлениеИнформационнойБазы.ЗаписатьОбъект(КлючеваяОперацияОбъект); + КонецЦикла; + +КонецПроцедуры + +// Шаблон таблицы для обновления замеров. +Функция ТаблицаЗамеров() + Результат = Новый ТаблицаЗначений; + Результат.Колонки.Добавить("СтароеИмя", ОписаниеТиповСтрока(150)); + Результат.Колонки.Добавить("АктуальноеИмя", ОписаниеТиповСтрока(150)); + Результат.Колонки.Добавить("АктуальноеНаименование", ОписаниеТиповСтрока(150)); + Возврат Результат; +КонецФункции + +// Возвращает список глобальных ключевых операций. +Функция СписокГлобальныхКлючевыхОпераций() + СписокОпераций = Новый СписокЗначений; + СписокОпераций.Добавить("ПанельОтчетов.Открытие", НСтр("ru = 'Панель отчетов (открытие)'")); + СписокОпераций.Добавить("ПанельОтчетов.Поиск", НСтр("ru = 'Панель отчетов (поиск в режиме просмотра)'")); + СписокОпераций.Добавить("ПанельОтчетов.РежимНастройки", НСтр("ru = 'Панель отчетов (режим настройки)'")); + СписокОпераций.Добавить("СписокОтчетов.Открытие", НСтр("ru = 'Список отчетов (открытие)'")); + СписокОпераций.Добавить("СписокОтчетов.Поиск", НСтр("ru = 'Список отчетов (поиск)'")); + Возврат СписокОпераций; +КонецФункции + +// Запись константы ПараметрыВариантовОтчетов. +// +// Значение константы: +// ХранилищеЗначения (Структура) - Кэшируемые параметры: +// * ТаблицаФункциональныхОпций - ТаблицаЗначений - Имена опций и предопределенных вариантов отчетов. +// ** Отчет - СправочникСсылка.ИдентификаторыОбъектовМетаданных - Ссылка отчета. +// ** ПредопределенныйВариант - СправочникСсылка.ПредопределенныеВариантыОтчетов - Ссылка варианта. +// ** ИмяФункциональнойОпции - Строка - Имя ФО. +// * ОтчетыСНастройками - Массив из СправочникСсылка.ИдентификаторыОбъектовМетаданных - Отчеты, +// в модуле объекта которых размещены процедуры тесной интеграции с общей формой отчета. +// +Процедура ЗаписатьПараметрыВариантовОтчетов(Кэш) + Если Кэш.Режим = "ОбщиеДанныеРасширений" И Не ЗначениеЗаполнено(ПараметрыСеанса.ВерсияРасширений) Тогда + Возврат; // Обновление не требуется. + КонецЕсли; + ПредставлениеПроцедуры = НСтр("ru = 'Запись неразделенного кэша в константу'"); + ЗапускПроцедуры(ПредставлениеПроцедуры); + + // Перезапись константы только в случае если обработчик обновления был запущен "для записи" (в монопольном режиме). + Кэш.ТаблицаФункциональныхОпций.Сортировать("Отчет, ПредопределенныйВариант, ИмяФункциональнойОпции"); + Кэш.ОтчетыСНастройкамиСписок.СортироватьПоЗначению(); + + НовоеЗначение = Новый Структура; + НовоеЗначение.Вставить("ТаблицаФункциональныхОпций", Кэш.ТаблицаФункциональныхОпций); + НовоеЗначение.Вставить("ОтчетыСНастройками", Кэш.ОтчетыСНастройкамиСписок.ВыгрузитьЗначения()); + + Если Кэш.Режим = "ОбщиеДанныеКонфигурации" Тогда + СтароеЗначение = Константы.ПараметрыВариантовОтчетов.Получить().Получить(); + Если ОбщегоНазначения.ЗначениеВСтрокуXML(НовоеЗначение) <> ОбщегоНазначения.ЗначениеВСтрокуXML(СтароеЗначение) Тогда + КонстантаОбъект = Константы.ПараметрыВариантовОтчетов.СоздатьМенеджерЗначения(); + КонстантаОбъект.Значение = Новый ХранилищеЗначения(НовоеЗначение, Новый СжатиеДанных(9)); + ОбновлениеИнформационнойБазы.ЗаписатьДанные(КонстантаОбъект, Ложь, Ложь); + КонецЕсли; + ИначеЕсли Кэш.Режим = "ОбщиеДанныеРасширений" Тогда + ИмяПодсистемы = ВариантыОтчетовКлиентСервер.ПолноеИмяПодсистемы(); + ХранилищеЗначения = Новый ХранилищеЗначения(НовоеЗначение); + СтандартныеПодсистемыСервер.УстановитьПараметрРаботыРасширения(ИмяПодсистемы, ХранилищеЗначения); + КонецЕсли; + + ЗавершениеПроцедуры(ПредставлениеПроцедуры); +КонецПроцедуры + +// Запись регистра ПредопределенныеВариантыОтчетовВерсийРасширений. +// +// Сохраняемое значение: +// ХранилищеЗначения (Структура) - Кэшируемые параметры: +// * ТаблицаФункциональныхОпций - ТаблицаЗначений - Имена опций и предопределенных вариантов отчетов. +// ** Отчет - СправочникСсылка.ИдентификаторыОбъектовРасширений - Ссылка отчета. +// ** ПредопределенныйВариант - СправочникСсылка.ПредопределенныеВариантыОтчетовРасширений - Ссылка варианта. +// ** ИмяФункциональнойОпции - Строка - Имя ФО. +// * ОтчетыСНастройками - Массив из СправочникСсылка.ИдентификаторыОбъектовРасширений - Отчеты, +// в модуле объекта которых размещены процедуры тесной интеграции с общей формой отчета. +// +Процедура ЗафиксироватьТекущуюВерсиюРасширений(Кэш) + Если Не ЗначениеЗаполнено(ПараметрыСеанса.ВерсияРасширений) Тогда + Возврат; // Обновление не требуется. + КонецЕсли; + + ПредставлениеПроцедуры = НСтр("ru = 'Запись регистра версий расширений'"); + ЗапускПроцедуры(ПредставлениеПроцедуры); + + Запрос = Новый Запрос; + Запрос.Текст = + "ВЫБРАТЬ + | ПредопределенныеРасширений.Ссылка КАК Вариант, + | ПредопределенныеРасширений.Отчет, + | ПредопределенныеРасширений.КлючВарианта + |ИЗ + | Справочник.ПредопределенныеВариантыОтчетовРасширений КАК ПредопределенныеРасширений + |ГДЕ + | ПредопределенныеРасширений.ПометкаУдаления = ЛОЖЬ"; + + Таблица = Запрос.Выполнить().Выгрузить(); + Измерения = Новый Структура("ВерсияРасширений", ПараметрыСеанса.ВерсияРасширений); + Ресурсы = Новый Структура; + Набор = РегистрыСведений.ПредопределенныеВариантыОтчетовВерсийРасширений.Набор(Таблица, Измерения, Ресурсы, Истина); + ОбновлениеИнформационнойБазы.ЗаписатьНаборЗаписей(Набор, Истина); + + ЗавершениеПроцедуры(ПредставлениеПроцедуры); КонецПроцедуры //////////////////////////////////////////////////////////////////////////////// @@ -3207,25 +4310,31 @@ // Процедура Редакция21ПривестиНастройкиПоРазделам(ВариантОбъект) - Найденные = ВариантОбъект.Размещение.НайтиСтроки(Новый Структура("Подсистема", Справочники.ИдентификаторыОбъектовМетаданных.ПустаяСсылка())); - Для Каждого СтрокаТаблицы Из Найденные Цикл + Количество = ВариантОбъект.Размещение.Количество(); + Для Номер = 1 По Количество Цикл + ОбратныйИндекс = Количество - Номер; + СтрокаТаблицы = ВариантОбъект.Размещение[ОбратныйИндекс]; + + Если ЗначениеЗаполнено(СтрокаТаблицы.Подсистема) Тогда + Продолжить; // Заполнение не требуется. + КонецЕсли; Если Не ЗначениеЗаполнено(СтрокаТаблицы.УдалитьПодсистема) Тогда ВариантОбъект.Размещение.Удалить(СтрокаТаблицы); - Продолжить; + Продолжить; // Заполнение невозможно. КонецЕсли; ПодсистемаПолноеИмя = "Подсистема." + СтрЗаменить(СтрокаТаблицы.УдалитьПодсистема, "\", ".Подсистема."); ПодсистемаМетаданные = Метаданные.НайтиПоПолномуИмени(ПодсистемаПолноеИмя); Если ПодсистемаМетаданные = Неопределено Тогда ВариантОбъект.Размещение.Удалить(СтрокаТаблицы); - Продолжить; + Продолжить; // Заполнение невозможно. КонецЕсли; ПодсистемаСсылка = ОбщегоНазначения.ИдентификаторОбъектаМетаданных(ПодсистемаМетаданные);; Если Не ЗначениеЗаполнено(ПодсистемаСсылка) Тогда ВариантОбъект.Размещение.Удалить(СтрокаТаблицы); - Продолжить; + Продолжить; // Заполнение невозможно. КонецЕсли; СтрокаТаблицы.Использование = Истина; @@ -3275,68 +4384,19 @@ Форма.Элементы.ДеревоПодсистемВажность.СписокВыбора.Добавить(ВариантыОтчетовКлиентСервер.ПредставлениеВажный()); Форма.Элементы.ДеревоПодсистемВажность.СписокВыбора.Добавить(ВариантыОтчетовКлиентСервер.ПредставлениеСмТакже()); - Инструкция = ИнструкцияУсловногоОформления(); + Инструкция = СтандартныеПодсистемыСервер.ИнструкцияУсловногоОформления(); Инструкция.Поля = "ДеревоПодсистем"; Инструкция.Отборы.Вставить("ДеревоПодсистем.Приоритет", ""); Инструкция.Оформление.Вставить("ТолькоПросмотр", Истина); - ДобавитьЭлементУсловногоОформления(Форма, Инструкция); + СтандартныеПодсистемыСервер.ДобавитьЭлементУсловногоОформления(Форма, Инструкция); - Инструкция = ИнструкцияУсловногоОформления(); + Инструкция = СтандартныеПодсистемыСервер.ИнструкцияУсловногоОформления(); Инструкция.Поля = "ДеревоПодсистемИспользование, ДеревоПодсистемВажность"; Инструкция.Отборы.Вставить("ДеревоПодсистем.Приоритет", ""); Инструкция.Оформление.Вставить("Отображать", Ложь); - ДобавитьЭлементУсловногоОформления(Форма, Инструкция); + СтандартныеПодсистемыСервер.ДобавитьЭлементУсловногоОформления(Форма, Инструкция); КонецПроцедуры -// Описание инструкции для добавления элемента условного оформления. -Функция ИнструкцияУсловногоОформления() Экспорт - Возврат Новый Структура("Отборы, Оформление, Поля", Новый Соответствие, Новый Соответствие, ""); -КонецФункции - -// Добавляет элемент условного оформления согласно описанию из инструкции. -Функция ДобавитьЭлементУсловногоОформления(Форма, ИнструкцияУсловногоОформления) Экспорт - ЭлементУсловногоОформленияКД = Форма.УсловноеОформление.Элементы.Добавить(); - ЭлементУсловногоОформленияКД.Использование = Истина; - - Для Каждого КлючИЗначение Из ИнструкцияУсловногоОформления.Отборы Цикл - ЭлементОтбораКД = ЭлементУсловногоОформленияКД.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); - ЭлементОтбораКД.ЛевоеЗначение = Новый ПолеКомпоновкиДанных(КлючИЗначение.Ключ); - Настройка = КлючИЗначение.Значение; - Тип = ТипЗнч(Настройка); - Если Тип = Тип("Структура") Тогда - ЭлементОтбораКД.ВидСравнения = ВидСравненияКомпоновкиДанных[Настройка.Вид]; - ЭлементОтбораКД.ПравоеЗначение = Настройка.Значение; - ИначеЕсли Тип = Тип("Массив") Тогда - ЭлементОтбораКД.ВидСравнения = ВидСравненияКомпоновкиДанных.ВСписке; - ЭлементОтбораКД.ПравоеЗначение = Настройка; - ИначеЕсли Тип = Тип("ВидСравненияКомпоновкиДанных") Тогда - ЭлементОтбораКД.ВидСравнения = Настройка; - Иначе - ЭлементОтбораКД.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно; - ЭлементОтбораКД.ПравоеЗначение = Настройка; - КонецЕсли; - ЭлементОтбораКД.Применение = ТипПримененияОтбораКомпоновкиДанных.Элементы; - КонецЦикла; - - Для Каждого КлючИЗначение Из ИнструкцияУсловногоОформления.Оформление Цикл - ЭлементУсловногоОформленияКД.Оформление.УстановитьЗначениеПараметра( - Новый ПараметрКомпоновкиДанных(КлючИЗначение.Ключ), - КлючИЗначение.Значение); - КонецЦикла; - - Поля = ИнструкцияУсловногоОформления.Поля; - Если ТипЗнч(Поля) = Тип("Строка") Тогда - Поля = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(Поля, ",", Истина, Истина); - КонецЕсли; - Для Каждого Поле Из Поля Цикл - ПолеКД = ЭлементУсловногоОформленияКД.Поля.Элементы.Добавить(); - ПолеКД.Использование = Истина; - ПолеКД.Поле = Новый ПолеКомпоновкиДанных(Поле); - КонецЦикла; - - Возврат ЭлементУсловногоОформленияКД; -КонецФункции - // Формирует дерево подсистем по данным варианта-основания. Функция ДеревоПодсистемСформировать(Форма, ВариантОснование) Экспорт // Пустое дерево без настроек. @@ -3360,7 +4420,24 @@ КонецЦикла; // Размещение, предопределенное разработчиком. - Запрос = Новый Запрос("ВЫБРАТЬ * ИЗ Справочник.ПредопределенныеВариантыОтчетов.Размещение ГДЕ Ссылка = &Ссылка И НЕ Подсистема В (&Подсистемы)"); + ТекстЗапроса = + "ВЫБРАТЬ + | Размещение.Ссылка, + | Размещение.НомерСтроки, + | Размещение.Подсистема, + | Размещение.Важный, + | Размещение.СмТакже + |ИЗ + | Справочник.ПредопределенныеВариантыОтчетов.Размещение КАК Размещение + |ГДЕ + | Размещение.Ссылка = &Ссылка + | И НЕ Размещение.Подсистема В (&Подсистемы)"; + + Если ТипЗнч(ВариантОснование.ПредопределенныйВариант) = Тип("СправочникСсылка.ПредопределенныеВариантыОтчетовРасширений") Тогда + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "ПредопределенныеВариантыОтчетов", "ПредопределенныеВариантыОтчетовРасширений"); + КонецЕсли; + + Запрос = Новый Запрос(ТекстЗапроса); Запрос.УстановитьПараметр("Ссылка", ВариантОснование.ПредопределенныйВариант); // Не зачитывать настройки подсистем, переопределенные администратором. Запрос.УстановитьПараметр("Подсистемы", Подсистемы); @@ -3449,12 +4526,10 @@ // Вызывается из события ПриЗаписи вариантов. Часть проверок выполняется до вызова. Функция ПроиндексироватьСодержимоеСхемы(ВариантОбъект) Экспорт - Перем ИндексироватьСхему, ОтчетОбъект, НастройкиКД, ЭтоПредопределенный; - ДополнительныеСвойства = ВариантОбъект.ДополнительныеСвойства; // В некоторых случаях заранее известно что настройки уже проиндексированы. - ДополнительныеСвойства.Свойство("ИндексироватьСхему", ИндексироватьСхему); + ИндексироватьСхему = ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(ДополнительныеСвойства, "ИндексироватьСхему"); Если ИндексироватьСхему = Ложь Тогда Возврат Ложь; // Заполнение не требуется. КонецЕсли; @@ -3464,96 +4539,57 @@ КонецЕсли; // Механика ручного индексирования из данных варианта. - ИндексироватьНаименованияПолей = Лев(ВариантОбъект.НаименованияПолей, 1) <> "#"; - ИндексироватьНаименованияПараметровИОтборов = Лев(ВариантОбъект.НаименованияПараметровИОтборов, 1) <> "#"; - Если Не ИндексироватьНаименованияПолей И Не ИндексироватьНаименованияПараметровИОтборов Тогда + ЗаполнитьПоля = Лев(ВариантОбъект.НаименованияПолей, 1) <> "#"; + ЗаполнитьФильтры = Лев(ВариантОбъект.НаименованияПараметровИОтборов, 1) <> "#"; + Если Не ЗаполнитьПоля И Не ЗаполнитьФильтры Тогда Возврат Ложь; // Заполнение не требуется. КонецЕсли; // Получение объекта отчета, настроек СКД и варианта. - ЭтоПредопределенный = Ложь; + ЭтоПредопределенный = ТипЗнч(ВариантОбъект) = Тип("СправочникОбъект.ПредопределенныеВариантыОтчетов") + Или ТипЗнч(ВариантОбъект) = Тип("СправочникОбъект.ПредопределенныеВариантыОтчетовРасширений") + Или Не ВариантОбъект.Пользовательский; - // Настройки предопределенных получаются из дерева значений, которое передается в дополнительных параметрах. - Если ТипЗнч(ВариантОбъект) = Тип("СправочникОбъект.ПредопределенныеВариантыОтчетов") Тогда - ЭтоПредопределенный = Истина; - - Поиск = Новый Структура("Отчет, КлючВарианта, ЭтоВариант", ВариантОбъект.Отчет, ВариантОбъект.КлючВарианта, Истина); - Найденные = ДополнительныеСвойства.ДеревоВариантов.Строки.НайтиСтроки(Поиск, Истина); - Если Найденные.Количество() = 0 Тогда - ТекстОшибки = НСтр("ru = 'Вариант ""%1"" не найден для отчета ""%2""'"); - ОшибкаПоВарианту(ВариантОбъект.Ссылка, ТекстОшибки, ВариантОбъект.КлючВарианта, ВариантОбъект.Отчет); - Возврат Ложь; // Возникла проблема. + // Предустановленные настройки поиска. + НастройкиДляПоиска = ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(ДополнительныеСвойства, "НастройкиДляПоиска"); + Если НастройкиДляПоиска <> Неопределено Тогда + Если ЗаполнитьПоля И ЗначениеЗаполнено(НастройкиДляПоиска.НаименованияПолей) Тогда + ВариантОбъект.НаименованияПолей = "#" + СокрЛП(НастройкиДляПоиска.НаименованияПолей); + ЗаполнитьПоля = Ложь; КонецЕсли; - - ОписаниеВарианта = Найденные[0]; - СтрокаОтчет = ОписаниеВарианта.Родитель; - ЗаполнитьОписаниеСтрокиВарианта(ОписаниеВарианта, СтрокаОтчет); - - // Если вариант отключен, то и в поиске он не участвует. - Если Не ОписаниеВарианта.Включен Тогда - Возврат Ложь; // Заполнение не требуется. + Если ЗаполнитьФильтры И ЗначениеЗаполнено(НастройкиДляПоиска.НаименованияПараметровИОтборов) Тогда + ВариантОбъект.НаименованияПараметровИОтборов = "#" + СокрЛП(НастройкиДляПоиска.НаименованияПараметровИОтборов); + ЗаполнитьФильтры = Ложь; КонецЕсли; - - // Предустановленные настройки поиска. - Если ЗначениеЗаполнено(ОписаниеВарианта.НастройкиДляПоиска.НаименованияПолей) Тогда - ВариантОбъект.НаименованияПолей = "#" + СокрЛП(ОписаниеВарианта.НастройкиДляПоиска.НаименованияПолей); - ИндексироватьНаименованияПолей = Ложь; - КонецЕсли; - Если ЗначениеЗаполнено(ОписаниеВарианта.НастройкиДляПоиска.НаименованияПараметровИОтборов) Тогда - ВариантОбъект.НаименованияПараметровИОтборов = "#" + СокрЛП(ОписаниеВарианта.НастройкиДляПоиска.НаименованияПараметровИОтборов); - ИндексироватьНаименованияПараметровИОтборов = Ложь; - КонецЕсли; - Если Не ИндексироватьНаименованияПолей И Не ИндексироватьНаименованияПараметровИОтборов Тогда + Если Не ЗаполнитьПоля И Не ЗаполнитьФильтры Тогда Возврат Истина; // Заполнение выполнено - объект надо записать. КонецЕсли; - - // Объект отчета. - Если Не СтрокаОтчет.СистемнаяИнформация.ПостроенНаСКД Тогда - Если СтрокаОтчет.Размещение.Количество() > 0 Тогда - ТекстОшибки = НСтр("ru = 'Для отчета ""%2"" не заполнены настройки поиска: наименования полей или параметров и отборов. - |Подробнее - см. процедуру ""НастроитьВариантыОтчетов"" модуля ""ВариантыОтчетовПереопределяемый"".'"); - ОшибкаПоВарианту(ВариантОбъект.Ссылка, ТекстОшибки, "", ВариантОбъект.Отчет); - КонецЕсли; - Возврат Ложь; // Возникла проблема. - КонецЕсли; - Если Не СтрокаОтчет.СистемнаяИнформация.Свойство("ОтчетОбъект") Тогда - Возврат Ложь; // Возникла проблема (уже записана в функции ДеревоНастроекВариантовОтчетов). - КонецЕсли; - ОтчетОбъект = СтрокаОтчет.СистемнаяИнформация.ОтчетОбъект; - - // Извлечение текстов макетов возможно только после получения объекта отчета. - Если ИндексироватьНаименованияПолей И ЗначениеЗаполнено(ОписаниеВарианта.НастройкиДляПоиска.ИменаМакетов) Тогда - ВариантОбъект.НаименованияПолей = "#" + ИзвлечьТекстМакета(ОтчетОбъект, ОписаниеВарианта.НастройкиДляПоиска.ИменаМакетов); - ИндексироватьНаименованияПолей = Ложь; - КонецЕсли; - Если Не ИндексироватьНаименованияПолей И Не ИндексироватьНаименованияПараметровИОтборов Тогда - Возврат Истина; // Заполнение выполнено - объект надо записать. - КонецЕсли; - - // Настройки компоновки данных. - Если Не ОписаниеВарианта.СистемнаяИнформация.Свойство("НастройкиКД") Тогда - Возврат Ложь; // Возникла проблема (уже записана в функции ДеревоНастроекВариантовОтчетов). - КонецЕсли; - НастройкиКД = ОписаниеВарианта.СистемнаяИнформация.НастройкиКД; - Иначе - Если Не ВариантОбъект.Пользовательский Тогда - ЭтоПредопределенный = Истина; - КонецЕсли; КонецЕсли; - // В некоторых сценариях объект может быть закэширован в дополнительных свойствах. - Если ОтчетОбъект = Неопределено Тогда - ДополнительныеСвойства.Свойство("ОтчетОбъект", ОтчетОбъект); - КонецЕсли; + // В некоторых сценариях объект может быть уже закэширован в дополнительных свойствах. + ОтчетОбъект = ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(ДополнительныеСвойства, "ОтчетОбъект"); // Когда объект отчета не закэширован - подключение отчета штатным способом. Если ОтчетОбъект = Неопределено Тогда - РезультатПодключения = ПодключитьОтчетОбъект(ВариантОбъект.Отчет); - Если Не РезультатПодключения.Подключен Тогда // Отчет не найден. - ОшибкаПоВарианту(ВариантОбъект.Ссылка, РезультатПодключения.Ошибки); - Возврат Ложь; // Возникла проблема. + Подключение = ПодключитьОтчетОбъект(ВариантОбъект.Отчет, Ложь); + Если Подключение.Успех Тогда // Отчет не найден. + ОтчетОбъект = Подключение.Объект; + ДополнительныеСвойства.Вставить("ОтчетОбъект", ОтчетОбъект); + Иначе + ОшибкаПоВарианту(ВариантОбъект.Ссылка, Подключение.ТекстОшибки); + КонецЕсли; + КонецЕсли; + Если ОтчетОбъект = "" Тогда + Возврат Ложь; // Возникла проблема. + КонецЕсли; + + // Извлечение текстов макетов возможно только после получения объекта отчета. + Если ЗаполнитьПоля И НастройкиДляПоиска <> Неопределено И ЗначениеЗаполнено(НастройкиДляПоиска.ИменаМакетов) Тогда + ВариантОбъект.НаименованияПолей = "#" + ИзвлечьТекстМакета(ОтчетОбъект, НастройкиДляПоиска.ИменаМакетов); + ЗаполнитьПоля = Ложь; + Если Не ЗаполнитьПоля И Не ЗаполнитьФильтры Тогда + Возврат Истина; // Заполнение выполнено - объект надо записать. КонецЕсли; - ОтчетОбъект = РезультатПодключения.Объект; КонецЕсли; // Схема компоновки, на основании которой будет выполняться отчет. @@ -3561,18 +4597,27 @@ // Если отчет не на СКД, следовательно представления не заполняются или заполняются прикладными механизмами. Если СхемаКД = Неопределено Тогда - Если Не ЗначениеЗаполнено(ВариантОбъект.НаименованияПолей) - Или Не ЗначениеЗаполнено(ВариантОбъект.НаименованияПараметровИОтборов) Тогда - ТекстОшибки = НСтр("ru = 'Для варианта ""%1"" отчета ""%2"" не заполнены настройки поиска: наименования полей или параметров и отборов.'"); - ИнформацияПоВарианту(ВариантОбъект.Ссылка, ТекстОшибки, ВариантОбъект.КлючВарианта, ВариантОбъект.Отчет); + ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Для варианта ""%1"" отчета ""%2"" не заполнены настройки поиска: + |Наименования полей или Наименования параметров и отборов.'"), + ВариантОбъект.КлючВарианта, + ВариантОбъект.Отчет); + Если ЭтоПредопределенный Тогда + ТекстОшибки = ТекстОшибки + Символы.ПС + + НСтр("ru = 'Подробнее - см. процедуру ""НастроитьВариантыОтчетов"" модуля ""ВариантыОтчетовПереопределяемый"".'"); + Если ВариантОбъект.Размещение.Количество() > 0 Тогда + ОшибкаПоВарианту(ВариантОбъект.Ссылка, ТекстОшибки); + Иначе + ИнформацияПоВарианту(ВариантОбъект.Ссылка, ТекстОшибки); + КонецЕсли; + Иначе + ИнформацияПоВарианту(ВариантОбъект.Ссылка, ТекстОшибки); КонецЕсли; Возврат Ложь; // Возникла проблема. КонецЕсли; // Чтение настроек из переданных параметров. - Если ТипЗнч(НастройкиКД) <> Тип("НастройкиКомпоновкиДанных") Тогда - ДополнительныеСвойства.Свойство("НастройкиКД", НастройкиКД); - КонецЕсли; + НастройкиКД = ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(ДополнительныеСвойства, "НастройкиКД"); // Чтение настроек из схемы. Если ТипЗнч(НастройкиКД) <> Тип("НастройкиКомпоновкиДанных") Тогда @@ -3583,12 +4628,18 @@ КонецЕсли; // Чтение настроек из данных варианта. - Если ТипЗнч(НастройкиКД) <> Тип("НастройкиКомпоновкиДанных") Тогда + Если ТипЗнч(НастройкиКД) <> Тип("НастройкиКомпоновкиДанных") + И ТипЗнч(ВариантОбъект) = Тип("СправочникОбъект.ВариантыОтчетов") Тогда НастройкиКД = ВариантОбъект.Настройки.Получить(); КонецЕсли; // Последняя проверка. Если ТипЗнч(НастройкиКД) <> Тип("НастройкиКомпоновкиДанных") Тогда + Если ТипЗнч(ВариантОбъект) = Тип("СправочникОбъект.ПредопределенныеВариантыОтчетов") + Или ТипЗнч(ВариантОбъект) = Тип("СправочникОбъект.ПредопределенныеВариантыОтчетовРасширений") Тогда + Текст = НСтр("ru = 'Не удалось прочитать настройки предопределенного варианта отчета ""%1"".'"); + ОшибкаПоВарианту(ВариантОбъект.Ссылка, Текст, ВариантОбъект.КлючЗамеров); + КонецЕсли; Возврат Ложь; // Возникла проблема. КонецЕсли; @@ -3609,7 +4660,7 @@ // Загружает настройки в компоновщик. КомпоновщикНастроекКД.ЗагрузитьНастройки(НастройкиКД); - Если ИндексироватьНаименованияПолей Тогда + Если ЗаполнитьПоля Тогда // Преобразование всех настроек автоматической группировки в наборы полей. // См. "АвтоВыбранноеПолеКомпоновкиДанных", "АвтоПолеГруппировкиКомпоновкиДанных", // "АвтоЭлементПорядкаКомпоновкиДанных" в синтакс-помощнике. @@ -3618,7 +4669,7 @@ ВариантОбъект.НаименованияПолей = СформироватьПредставленияПолей(КомпоновщикНастроекКД); КонецЕсли; - Если ИндексироватьНаименованияПараметровИОтборов Тогда + Если ЗаполнитьФильтры Тогда ВариантОбъект.НаименованияПараметровИОтборов = СформироватьПредставленияПараметровИОтборов(КомпоновщикНастроекКД); КонецЕсли; @@ -3683,7 +4734,7 @@ КонецЦикла; РазделительХранения = ВариантыОтчетовКлиентСервер.РазделительХранения(); - Возврат СтроковыеФункцииКлиентСервер.СтрокаИзМассиваПодстрок(Результат, РазделительХранения); + Возврат СтрСоединить(Результат, РазделительХранения); КонецФункции // Представления параметров и отборов из СКД. @@ -3741,21 +4792,17 @@ КонецЦикла; РазделительХранения = ВариантыОтчетовКлиентСервер.РазделительХранения(); - Возврат СтроковыеФункцииКлиентСервер.СтрокаИзМассиваПодстрок(Результат, РазделительХранения); + Возврат СтрСоединить(Результат, РазделительХранения); КонецФункции // Извлекает текстовую информацию из макета. Функция ИзвлечьТекстМакета(ОтчетОбъект, ИменаМакетов) Экспорт ИзвлеченныйТекст = ""; Если ТипЗнч(ИменаМакетов) = Тип("Строка") Тогда - ИменаМакетов = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок( - ИменаМакетов, - ",", - Истина, - Истина); + ИменаМакетов = СтрРазделить(ИменаМакетов, ",", Ложь); КонецЕсли; Для Каждого ИмяМакета Из ИменаМакетов Цикл - Макет = ОтчетОбъект.ПолучитьМакет(ИмяМакета); + Макет = ОтчетОбъект.ПолучитьМакет(СокрЛП(ИмяМакета)); Если ТипЗнч(Макет) = Тип("ТабличныйДокумент") Тогда Низ = Макет.ВысотаТаблицы; Право = Макет.ШиринаТаблицы; @@ -3788,14 +4835,14 @@ Если СтрокаСРазделителями = "" Тогда Возврат; КонецЕсли; - Позиция = Найти(СтрокаСРазделителями, ","); + Позиция = СтрНайти(СтрокаСРазделителями, ","); Пока Позиция > 0 Цикл Подстрока = СокрП(Лев(СтрокаСРазделителями, Позиция - 1)); Если Подстрока <> "" И Массив.Найти(Подстрока) = Неопределено Тогда Массив.Добавить(Подстрока); КонецЕсли; СтрокаСРазделителями = СокрЛ(Сред(СтрокаСРазделителями, Позиция + 1)); - Позиция = Найти(СтрокаСРазделителями, ","); + Позиция = СтрНайти(СтрокаСРазделителями, ","); КонецЦикла; Если СтрокаСРазделителями <> "" И Массив.Найти(СтрокаСРазделителями) = Неопределено Тогда Массив.Добавить(СтрокаСРазделителями); @@ -3840,7 +4887,10 @@ УсловияВывода.Вставить("ТолькоПользовательские", Истина); УсловияВывода.Вставить("ТолькоБыстрые", Истина); УсловияВывода.Вставить("ИдентификаторТекущегоУзлаКД", Неопределено); - Информация = ОтчетыСервер.РасширеннаяИнформацияОНастройках(КомпоновщикНастроекКД, Неопределено, УсловияВывода); + + НастройкиОтчета = НастройкиФормыОтчета(ВариантОбъект.Отчет, ВариантОбъект.КлючВарианта, ОтчетОбъект); + + Информация = ОтчетыСервер.РасширеннаяИнформацияОНастройках(КомпоновщикНастроекКД, НастройкиОтчета, ОтчетОбъект, УсловияВывода); БыстрыеНастройки = Информация.ПользовательскиеНастройки.Скопировать(Новый Структура("ВыводРазрешен, Быстрая", Истина, Истина)); Если БыстрыеНастройки.Количество() <= 2 Тогда Возврат Ложь; // Уменьшение количества не требуется. @@ -3865,6 +4915,33 @@ Возврат Истина; КонецФункции +Функция НастройкиФормыОтчета(ОтчетСсылка, КлючВарианта, ОтчетОбъект) Экспорт + НастройкиОтчета = ОтчетыКлиентСервер.ПолучитьНастройкиОтчетаПоУмолчанию(); + Если ВариантыОтчетовПовтИсп.ОтчетыСНастройками().Найти(ОтчетСсылка) <> Неопределено Тогда + Если ОтчетОбъект = Неопределено Тогда + Подключение = ПодключитьОтчетОбъект(ОтчетСсылка, Ложь); + Если Подключение.Успех Тогда + ОтчетОбъект = Подключение.Объект; + Иначе + Текст = НСтр("ru = 'Не удалось получить настройки отчета ""%1"":'") + Символы.ПС + Подключение.ТекстОшибки; + ИнформацияПоВарианту(ОтчетСсылка, Текст, ОтчетСсылка); + Возврат НастройкиОтчета; + КонецЕсли; + КонецЕсли; + ОтчетОбъект.ОпределитьНастройкиФормы(Неопределено, КлючВарианта, НастройкиОтчета); + СоответствиеПериодичностиПараметров = Новый Соответствие; + Для Каждого КлючИЗначение Из НастройкиОтчета.СоответствиеПериодичностиПараметров Цикл + ПолеКД = КлючИЗначение.Ключ; + Если ТипЗнч(ПолеКД) = Тип("ПараметрКомпоновкиДанных") Тогда + ПолеКД = Новый ПолеКомпоновкиДанных("ПараметрыДанных." + Строка(ПолеКД)); + КонецЕсли; + СоответствиеПериодичностиПараметров.Вставить(ПолеКД, КлючИЗначение.Значение); + КонецЦикла; + НастройкиОтчета.Вставить("СоответствиеПериодичностиПараметров", СоответствиеПериодичностиПараметров); + КонецЕсли; + Возврат НастройкиОтчета; +КонецФункции + //////////////////////////////////////////////////////////////////////////////// // Поиск. @@ -3985,6 +5062,8 @@ Запрос.УстановитьПараметр("ОтчетыПользователя", ОтборПоОтчетам); Запрос.УстановитьПараметр("ОтключенныеВариантыПрограммы", ПараметрыПоиска.ОтключенныеВариантыПрограммы); + ПравоЧтенияАвторов = ПравоДоступа("Чтение", Метаданные.Справочники.Пользователи); + Если ЕстьОтборПоПодсистемам Или ЕстьСтрокаПоиска Тогда ТекстЗапроса = "ВЫБРАТЬ РАЗРЕШЕННЫЕ @@ -4000,32 +5079,34 @@ | ВариантыОтчетов.Пользовательский КАК Пользовательский, | ВариантыОтчетов.ПредопределенныйВариант КАК ПредопределенныйВариант, | ВЫБОР - | КОГДА ПОДСТРОКА(ВариантыОтчетов.НаименованияПараметровИОтборов, 1, 1) = """" - | ТОГДА ВЫРАЗИТЬ(Предопределенные.НаименованияПараметровИОтборов КАК СТРОКА(1000)) - | ИНАЧЕ ВЫРАЗИТЬ(ВариантыОтчетов.НаименованияПараметровИОтборов КАК СТРОКА(1000)) - | КОНЕЦ КАК НаименованияПараметровИОтборов, - | ВЫБОР | КОГДА ПОДСТРОКА(ВариантыОтчетов.НаименованияПолей, 1, 1) = """" - | ТОГДА ВЫРАЗИТЬ(Предопределенные.НаименованияПолей КАК СТРОКА(1000)) + | ТОГДА ВЫРАЗИТЬ(ЕСТЬNULL(ВариантыКонфигурации.НаименованияПолей, ВариантыРасширений.НаименованияПолей) КАК СТРОКА(1000)) | ИНАЧЕ ВЫРАЗИТЬ(ВариантыОтчетов.НаименованияПолей КАК СТРОКА(1000)) | КОНЕЦ КАК НаименованияПолей, | ВЫБОР + | КОГДА ПОДСТРОКА(ВариантыОтчетов.НаименованияПараметровИОтборов, 1, 1) = """" + | ТОГДА ВЫРАЗИТЬ(ЕСТЬNULL(ВариантыКонфигурации.НаименованияПараметровИОтборов, ВариантыРасширений.НаименованияПараметровИОтборов) КАК СТРОКА(1000)) + | ИНАЧЕ ВЫРАЗИТЬ(ВариантыОтчетов.НаименованияПараметровИОтборов КАК СТРОКА(1000)) + | КОНЕЦ КАК НаименованияПараметровИОтборов, + | ВЫБОР | КОГДА ПОДСТРОКА(ВариантыОтчетов.Описание, 1, 1) = """" - | ТОГДА ВЫРАЗИТЬ(Предопределенные.Описание КАК СТРОКА(1000)) + | ТОГДА ВЫРАЗИТЬ(ЕСТЬNULL(ВариантыКонфигурации.Описание, ВариантыРасширений.Описание) КАК СТРОКА(1000)) | ИНАЧЕ ВЫРАЗИТЬ(ВариантыОтчетов.Описание КАК СТРОКА(1000)) | КОНЕЦ КАК Описание, | ВариантыОтчетов.ВидимостьПоУмолчанию КАК ВидимостьПоУмолчанию |ПОМЕСТИТЬ Варианты |ИЗ | Справочник.ВариантыОтчетов КАК ВариантыОтчетов - | ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ПредопределенныеВариантыОтчетов КАК Предопределенные - | ПО ВариантыОтчетов.ПредопределенныйВариант = Предопределенные.Ссылка + | ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ПредопределенныеВариантыОтчетов КАК ВариантыКонфигурации + | ПО ВариантыОтчетов.ПредопределенныйВариант = ВариантыКонфигурации.Ссылка + | ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ПредопределенныеВариантыОтчетовРасширений КАК ВариантыРасширений + | ПО ВариантыОтчетов.ПредопределенныйВариант = ВариантыРасширений.Ссылка |ГДЕ | ВариантыОтчетов.ТипОтчета В(&ТипыОтчетов) | И ВариантыОтчетов.Отчет В(&ОтчетыПользователя) | И НЕ ВариантыОтчетов.ПредопределенныйВариант В (&ОтключенныеВариантыПрограммы) | И ВариантыОтчетов.ПометкаУдаления = ЛОЖЬ - | И НЕ ЕСТЬNULL(Предопределенные.ПометкаУдаления, ЛОЖЬ) + | И НЕ ЕСТЬNULL(ВариантыКонфигурации.ПометкаУдаления, ЕСТЬNULL(ВариантыРасширений.ПометкаУдаления, ЛОЖЬ)) |; | |//////////////////////////////////////////////////////////////////////////////// @@ -4053,14 +5134,27 @@ | И (ВариантыРазмещение.Подсистема В (&МассивПодсистем))) КАК РазмещениеВариантов | ПОЛНОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ | ВариантыОтчетов.Ссылка КАК Ссылка, - | ПредопределенныеРазмещение.Подсистема КАК Подсистема, - | ПредопределенныеРазмещение.Подсистема.Синоним КАК НаименованиеПодсистемы + | РазмещениеКонфигурации.Подсистема КАК Подсистема, + | РазмещениеКонфигурации.Подсистема.Синоним КАК НаименованиеПодсистемы | ИЗ | Варианты КАК ВариантыОтчетов - | ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.ПредопределенныеВариантыОтчетов.Размещение КАК ПредопределенныеРазмещение + | ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.ПредопределенныеВариантыОтчетов.Размещение КАК РазмещениеКонфигурации | ПО (ВариантыОтчетов.Пользовательский = ЛОЖЬ) - | И ВариантыОтчетов.ПредопределенныйВариант = ПредопределенныеРазмещение.Ссылка - | И (ПредопределенныеРазмещение.Подсистема В (&МассивПодсистем))) КАК РазмещениеПредопределенных + | И ВариантыОтчетов.ПредопределенныйВариант = РазмещениеКонфигурации.Ссылка + | И (РазмещениеКонфигурации.Подсистема В (&МассивПодсистем)) + | + | ОБЪЕДИНИТЬ ВСЕ + | + | ВЫБРАТЬ + | ВариантыОтчетов.Ссылка, + | РазмещениеРасширений.Подсистема, + | РазмещениеРасширений.Подсистема.Синоним + | ИЗ + | Варианты КАК ВариантыОтчетов + | ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.ПредопределенныеВариантыОтчетовРасширений.Размещение КАК РазмещениеРасширений + | ПО (ВариантыОтчетов.Пользовательский = ЛОЖЬ) + | И ВариантыОтчетов.ПредопределенныйВариант = РазмещениеРасширений.Ссылка + | И (РазмещениеРасширений.Подсистема В (&МассивПодсистем))) КАК РазмещениеПредопределенных | ПО РазмещениеВариантов.Ссылка = РазмещениеПредопределенных.Ссылка | И РазмещениеВариантов.Подсистема = РазмещениеПредопределенных.Подсистема |ГДЕ @@ -4173,7 +5267,13 @@ Иначе // Удаление отбора по подсистемам. ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "И (ВариантыРазмещение.Подсистема В (&МассивПодсистем))", ""); - ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "И (ПредопределенныеРазмещение.Подсистема В (&МассивПодсистем))", ""); + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "И (РазмещениеКонфигурации.Подсистема В (&МассивПодсистем))", ""); + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "И (РазмещениеРасширений.Подсистема В (&МассивПодсистем))", ""); + КонецЕсли; + + Если Не ПравоЧтенияАвторов Тогда + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "ВариантыОтчетов.Автор КАК Автор", "НЕОПРЕДЕЛЕНО КАК Автор"); + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "ВЫРАЗИТЬ(ВариантыОтчетов.Автор.Наименование КАК СТРОКА(1000)) КАК АвторПредставление", "НЕОПРЕДЕЛЕНО КАК АвторПредставление"); КонецЕсли; Если ЕстьСтрокаПоиска И Не ЕстьОтборПоПодсистемам Тогда @@ -4197,7 +5297,7 @@ КонецЕсли; Иначе ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "И ВариантыОтчетов.ПометкаУдаления = ЛОЖЬ", ""); - ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "И НЕ ЕСТЬNULL(Предопределенные.ПометкаУдаления, ЛОЖЬ)", ""); + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "И НЕ ЕСТЬNULL(ВариантыКонфигурации.ПометкаУдаления, ЕСТЬNULL(ВариантыРасширений.ПометкаУдаления, ЛОЖЬ))", ""); ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "И Пользовательские.ПометкаУдаления = ЛОЖЬ", ""); КонецЕсли; @@ -4220,29 +5320,32 @@ // Условие для поиска вариантов. ПоискВариантовИПодсистем = "(" + СтрЗаменить(ШаблонПоиска, "<ИмяТаблицы.ИмяПоля>", "ВариантыОтчетов.НаименованиеВарианта") - + " - | Или " + + Символы.ПС + + " Или " + СтрЗаменить(ШаблонПоиска, "<ИмяТаблицы.ИмяПоля>", "Размещение.НаименованиеПодсистемы") - + " - | Или " + + Символы.ПС + + " Или " + СтрЗаменить(ШаблонПоиска, "<ИмяТаблицы.ИмяПоля>", "ВариантыОтчетов.НаименованияПолей") - + " - | Или " + + Символы.ПС + + " Или " + СтрЗаменить(ШаблонПоиска, "<ИмяТаблицы.ИмяПоля>", "ВариантыОтчетов.НаименованияПараметровИОтборов") - + " - | Или " - + СтрЗаменить(ШаблонПоиска, "<ИмяТаблицы.ИмяПоля>", "ВариантыОтчетов.Описание") - + " - | Или " - + СтрЗаменить(ШаблонПоиска, "<ИмяТаблицы.ИмяПоля>", "ВариантыОтчетов.АвторПредставление") - + ")"; + + Символы.ПС + + " Или " + + СтрЗаменить(ШаблонПоиска, "<ИмяТаблицы.ИмяПоля>", "ВариантыОтчетов.Описание"); + Если ПравоЧтенияАвторов Тогда + ПоискВариантовИПодсистем = ПоискВариантовИПодсистем + + Символы.ПС + + " Или " + + СтрЗаменить(ШаблонПоиска, "<ИмяТаблицы.ИмяПоля>", "ВариантыОтчетов.АвторПредставление"); + КонецЕсли; + ПоискВариантовИПодсистем = ПоискВариантовИПодсистем + ")"; + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&ПоискВариантовИПодсистем", ПоискВариантовИПодсистем); ПоискПользовательскихНастроек = ( "(" + СтрЗаменить(ШаблонПоиска, "<ИмяТаблицы.ИмяПоля>", "Пользовательские.Наименование") - + ")" - ); + + ")"); ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&ПоискПользовательскихНастроек", ПоискПользовательскихНастроек); Иначе @@ -4258,7 +5361,7 @@ | |ВЫБРАТЬ РАЗЛИЧНЫЕ | Пользовательские.Вариант,"); - ТекстЗапроса = СокрП(Лев(ТекстЗапроса, Найти(ТекстЗапроса, НачалоВыборкиИзТаблицы) - 1)); + ТекстЗапроса = СокрП(Лев(ТекстЗапроса, СтрНайти(ТекстЗапроса, НачалоВыборкиИзТаблицы) - 1)); КонецЕсли; // Удаление лишних полей когда они не нужны ни для поиска ни для итоговой таблицы. @@ -4270,7 +5373,7 @@ ТекстЗапроса, "ВЫБОР | КОГДА ПОДСТРОКА(ВариантыОтчетов.НаименованияПолей, 1, 1) = """" - | ТОГДА ВЫРАЗИТЬ(Предопределенные.НаименованияПолей КАК СТРОКА(1000)) + | ТОГДА ВЫРАЗИТЬ(ЕСТЬNULL(ВариантыКонфигурации.НаименованияПолей, ВариантыРасширений.НаименованияПолей) КАК СТРОКА(1000)) | ИНАЧЕ ВЫРАЗИТЬ(ВариантыОтчетов.НаименованияПолей КАК СТРОКА(1000)) | КОНЕЦ КАК", "НЕОПРЕДЕЛЕНО КАК"); @@ -4279,7 +5382,7 @@ ТекстЗапроса, "ВЫБОР | КОГДА ПОДСТРОКА(ВариантыОтчетов.НаименованияПараметровИОтборов, 1, 1) = """" - | ТОГДА ВЫРАЗИТЬ(Предопределенные.НаименованияПараметровИОтборов КАК СТРОКА(1000)) + | ТОГДА ВЫРАЗИТЬ(ЕСТЬNULL(ВариантыКонфигурации.НаименованияПараметровИОтборов, ВариантыРасширений.НаименованияПараметровИОтборов) КАК СТРОКА(1000)) | ИНАЧЕ ВЫРАЗИТЬ(ВариантыОтчетов.НаименованияПараметровИОтборов КАК СТРОКА(1000)) | КОНЕЦ КАК", "НЕОПРЕДЕЛЕНО КАК"); @@ -4288,19 +5391,23 @@ ТекстЗапроса, "ВЫБОР | КОГДА ПОДСТРОКА(ВариантыОтчетов.Описание, 1, 1) = """" - | ТОГДА ВЫРАЗИТЬ(Предопределенные.Описание КАК СТРОКА(1000)) + | ТОГДА ВЫРАЗИТЬ(ЕСТЬNULL(ВариантыКонфигурации.Описание, ВариантыРасширений.Описание) КАК СТРОКА(1000)) | ИНАЧЕ ВЫРАЗИТЬ(ВариантыОтчетов.Описание КАК СТРОКА(1000)) | КОНЕЦ КАК", "НЕОПРЕДЕЛЕНО КАК"); // НаименованиеПодсистемы ТекстЗапроса = СтрЗаменить( ТекстЗапроса, - "ВариантыРазмещение.Подсистема.Синоним КАК", - "НЕОПРЕДЕЛЕНО КАК"); + "ВариантыРазмещение.Подсистема.Синоним", + "НЕОПРЕДЕЛЕНО"); ТекстЗапроса = СтрЗаменить( ТекстЗапроса, - "ПредопределенныеРазмещение.Подсистема.Синоним КАК", - "НЕОПРЕДЕЛЕНО КАК"); + "РазмещениеКонфигурации.Подсистема.Синоним", + "НЕОПРЕДЕЛЕНО"); + ТекстЗапроса = СтрЗаменить( + ТекстЗапроса, + "РазмещениеРасширений.Подсистема.Синоним", + "НЕОПРЕДЕЛЕНО"); КонецЕсли; // Удаление лишних полей когда они не нужны для итоговой таблицы. @@ -4358,6 +5465,7 @@ Результат.Вставить("Подсистемы", Новый Массив); Результат.Вставить("ПодсветкаПодсистем", Новый Соответствие); Результат.Вставить("ВариантыСвязанныеСПодсистемами", Новый Соответствие); + Результат.Вставить("РодителиСвязанныеСВариантами", Новый Массив); ТаблицаЗначений = Запрос.Выполнить().Выгрузить(); Если ПолучатьИтоговуюТаблицу Тогда @@ -4518,8 +5626,14 @@ Если СвязанныеПодсистемы.Количество() > 0 Тогда Результат.ВариантыСвязанныеСПодсистемами.Вставить(Вариант.Ссылка, СвязанныеПодсистемы); КонецЕсли; + // Удаление связи "от подчиненного", если родитель найден самостоятельно. + ИндексРодителя = Результат.РодителиСвязанныеСВариантами.Найти(Вариант.Ссылка); + Если ИндексРодителя <> Неопределено Тогда + Результат.РодителиСвязанныеСВариантами.Удалить(ИндексРодителя); + КонецЕсли; Если ЗначениеЗаполнено(Вариант.Родитель) И Результат.Ссылки.Найти(Вариант.Родитель) = Неопределено Тогда Результат.Ссылки.Добавить(Вариант.Родитель); + Результат.РодителиСвязанныеСВариантами.Добавить(Вариант.Родитель); КонецЕсли; КонецЕсли; @@ -4548,12 +5662,12 @@ // Находит слово и отмечает место, где оно найдено. Возвращает Истина если слово найдено. Функция ОтметитьСлово(СтруктураГде, Слово, ИспользоватьРазделитель = Ложь) Экспорт - Если Лев(СтруктураГде.Значение, 1) = "#" Тогда + Если СтрНачинаетсяС(СтруктураГде.Значение, "#") Тогда СтруктураГде.Значение = Сред(СтруктураГде.Значение, 2); КонецЕсли; Результат = ""; ОстатокВРег = ВРег(СтруктураГде.Значение); - Позиция = Найти(ОстатокВРег, Слово); + Позиция = СтрНайти(ОстатокВРег, Слово); Если Позиция = 0 Тогда Возврат Ложь; КонецЕсли; @@ -4566,7 +5680,7 @@ РазделительПредставления = ВариантыОтчетовКлиентСервер.РазделительПредставления(); ДлинаРазделителя = СтрДлина(РазделительХранения); Пока Позиция > 10 Цикл - ПозицияРазделителя = Найти(ОстатокВРег, РазделительХранения); + ПозицияРазделителя = СтрНайти(ОстатокВРег, РазделительХранения); Если ПозицияРазделителя = 0 Тогда Прервать; КонецЕсли; @@ -4575,13 +5689,11 @@ СтруктураГде.Значение = ( Сред(СтруктураГде.Значение, ПозицияРазделителя + ДлинаРазделителя) + РазделительХранения - + Лев(СтруктураГде.Значение, ПозицияРазделителя - 1) - ); + + Лев(СтруктураГде.Значение, ПозицияРазделителя - 1)); ОстатокВРег = ( Сред(ОстатокВРег, ПозицияРазделителя + ДлинаРазделителя) + РазделительХранения - + Лев(ОстатокВРег, ПозицияРазделителя - 1) - ); + + Лев(ОстатокВРег, ПозицияРазделителя - 1)); // Обновление информации о расположении слова. Позиция = Позиция - ПозицияРазделителя - ДлинаРазделителя + 1; Иначе @@ -4590,7 +5702,7 @@ КонецЦикла; СтруктураГде.Значение = СтрЗаменить(СтруктураГде.Значение, РазделительХранения, РазделительПредставления); ОстатокВРег = СтрЗаменить(ОстатокВРег, РазделительХранения, РазделительПредставления); - Позиция = Найти(ОстатокВРег, Слово); + Позиция = СтрНайти(ОстатокВРег, Слово); КонецЕсли; КонецЕсли; // Регистрация найденного слова. @@ -4603,18 +5715,18 @@ СтруктураГде.ПодсветкаСлов.Добавить(ДлинаЛевойЧасти + Позиция + ДлинаСлова, "-"); ОстатокВРег = Сред(ОстатокВРег, Позиция + ДлинаСлова); ДлинаЛевойЧасти = ДлинаЛевойЧасти + Позиция + ДлинаСлова - 1; - Позиция = Найти(ОстатокВРег, Слово); + Позиция = СтрНайти(ОстатокВРег, Слово); КонецЦикла; Возврат Истина; КонецФункции // Удаляет временную таблицу из текста запроса. Процедура УдалитьВременнуюТаблицу(ТекстЗапроса, ИмяВременнойТаблицы) - ПозицияВременнойТаблицы = Найти(ТекстЗапроса, "ПОМЕСТИТЬ " + ИмяВременнойТаблицы); + ПозицияВременнойТаблицы = СтрНайти(ТекстЗапроса, "ПОМЕСТИТЬ " + ИмяВременнойТаблицы); ЛеваяЧасть = ""; ПраваяЧасть = ТекстЗапроса; Пока Истина Цикл - ПозицияТочкиСЗапятой = Найти(ПраваяЧасть, Символы.ПС + ";"); + ПозицияТочкиСЗапятой = СтрНайти(ПраваяЧасть, Символы.ПС + ";"); Если ПозицияТочкиСЗапятой = 0 Тогда Прервать; ИначеЕсли ПозицияТочкиСЗапятой > ПозицияВременнойТаблицы Тогда @@ -4629,6 +5741,9 @@ ТекстЗапроса = ЛеваяЧасть + ПраваяЧасть; КонецПроцедуры +//////////////////////////////////////////////////////////////////////////////// +// Прочее. + // Выгружает текст и параметры запроса в XML. Функция ЗапросВXML(Запрос) Экспорт Структура = Новый Структура("Текст, Параметры"); @@ -4636,5 +5751,22 @@ Возврат ОбщегоНазначения.ЗначениеВСтрокуXML(Структура); КонецФункции -#КонецОбласти +// Возвращает строку ключа настроек, не превышающую допустимую длину. +// Если строка превышает допустимую длину, то лишние символы справа вырезаются +// и вместо них вставляется MD5 хеш-сумма строки. +// +// Параметры: +// Строка - Строка - Строковый идентификатор произвольной длины. +// ДопустимаяДлина - Число - Максимальная длина строки. +// +Функция СтрХеш(Знач Строка, ДопустимаяДлина) + Если СтрДлина(Строка) <= ДопустимаяДлина Тогда + Возврат Строка; + Иначе + ХешированиеДанных = Новый ХешированиеДанных(ХешФункция.MD5); + ХешированиеДанных.Добавить(Строка); + Возврат Лев(Строка, ДопустимаяДлина-32) + СтрЗаменить(ХешированиеДанных.ХешСумма, " ", ""); + КонецЕсли; +КонецФункции +#КонецОбласти diff --git a/SSL/src/CommonModules/ВариантыОтчетовВызовСервера/Module.bsl b/SSL/src/CommonModules/ВариантыОтчетовВызовСервера/Module.bsl new file mode 100644 index 000000000..2b9f8e863 --- /dev/null +++ b/SSL/src/CommonModules/ВариантыОтчетовВызовСервера/Module.bsl @@ -0,0 +1,29 @@ +//////////////////////////////////////////////////////////////////////////////// +// Подсистема "Варианты отчетов" (вызов сервера). +// +//////////////////////////////////////////////////////////////////////////////// + +#Область СлужебныеПроцедурыИФункции + +// Открывает форму дополнительного отчета с заданным вариантом. +// +// Параметры: +// Ссылка - СправочникСсылка.ДополнительныеОтчетыИОбработки - Ссылка дополнительного отчета. +// КлючВарианта - Строка - Имя варианта дополнительного отчета. +// +Функция ПараметрыОткрытия(ВариантСсылка) Экспорт + Возврат ВариантыОтчетов.ПараметрыОткрытия(ВариантСсылка); +КонецФункции + +// Открывает форму дополнительного отчета с заданным вариантом. +// +// Параметры: +// Ссылка - СправочникСсылка.ДополнительныеОтчетыИОбработки - Ссылка дополнительного отчета. +// КлючВарианта - Строка - Имя варианта дополнительного отчета. +// +Процедура ПриПодключенииОтчета(ПараметрыОткрытия) Экспорт + ВариантыОтчетов.ПриПодключенииОтчета(ПараметрыОткрытия); +КонецПроцедуры + +#КонецОбласти + diff --git a/SSL/src/CommonModules/ВариантыОтчетовВызовСервера/ВариантыОтчетовВызовСервера.mdo b/SSL/src/CommonModules/ВариантыОтчетовВызовСервера/ВариантыОтчетовВызовСервера.mdo new file mode 100644 index 000000000..af5a01c52 --- /dev/null +++ b/SSL/src/CommonModules/ВариантыОтчетовВызовСервера/ВариантыОтчетовВызовСервера.mdo @@ -0,0 +1,10 @@ +<?xml version="1.0" encoding="UTF-8"?> +<mdclass:CommonModule xmlns:mdclass="http://g5.1c.ru/v8/dt/metadata/mdclass" uuid="ed5ff5b0-f980-4b9a-9299-eef68e3b42d5"> + <name>ВариантыОтчетовВызовСервера</name> + <synonym> + <key>ru</key> + <value>Варианты отчетов вызов сервера</value> + </synonym> + <server>true</server> + <serverCall>true</serverCall> +</mdclass:CommonModule> diff --git a/SSL/src/CommonModules/ВариантыОтчетовКлиент/Module.bsl b/SSL/src/CommonModules/ВариантыОтчетовКлиент/Module.bsl index 6e97bc743..6e293813a 100644 --- a/SSL/src/CommonModules/ВариантыОтчетовКлиент/Module.bsl +++ b/SSL/src/CommonModules/ВариантыОтчетовКлиент/Module.bsl @@ -16,9 +16,25 @@ // Процедура ПоказатьПанельОтчетов(ПутьКПодсистеме, ПараметрыВыполненияКоманды, Удалить_Заголовок = "") Экспорт ФормаПараметры = Новый Структура("ПутьКПодсистеме", ПутьКПодсистеме); + ФормаОкно = ?(ПараметрыВыполненияКоманды = Неопределено, Неопределено, ПараметрыВыполненияКоманды.Окно); ФормаСсылка = ?(ПараметрыВыполненияКоманды = Неопределено, Неопределено, ПараметрыВыполненияКоманды.НавигационнаяСсылка); + + ПараметрыКлиента = ПараметрыКлиента(); + Если ПараметрыКлиента.ВыполнятьЗамеры Тогда + ИдентификаторЗамера = Новый УникальныйИдентификатор; + МодульОценкаПроизводительностиКлиентСервер = ОбщегоНазначенияКлиент.ОбщийМодуль("ОценкаПроизводительностиКлиентСервер"); + МодульОценкаПроизводительностиКлиентСервер.НачатьРучнойЗамерВремени( + "ПанельОтчетов.Открытие", + ИдентификаторЗамера, + ПараметрыКлиента.ПрефиксЗамеров + "; " + ПутьКПодсистеме); + КонецЕсли; + ОткрытьФорму("ОбщаяФорма.ПанельОтчетов", ФормаПараметры, , ПутьКПодсистеме, ФормаОкно, ФормаСсылка); + + Если ПараметрыКлиента.ВыполнятьЗамеры Тогда + МодульОценкаПроизводительностиКлиентСервер.ЗакончитьРучнойЗамерВремени(ИдентификаторЗамера); + КонецЕсли; КонецПроцедуры // Открывает диалог настройки размещения нескольких вариантов в разделах. @@ -100,83 +116,105 @@ // Открывает форму отчета. // // Параметры: -// ПараметрыОтчета - Структура - Основная информация об отчете, необходимая для его открытия. -// ПараметрыФормы - Структура - Параметры открытия формы отчета. +// ФормаВладелец - УправляемаяФорма, Неопределено - Форма, из которой открывается отчет. +// Вариант - Структура, Коллекция - Параметры формы. +// * Ссылка - СправочникСсылка.ВариантыОтчетов - Ссылка варианта отчета. +// * ТипОтчета - Строка, ПеречислениеСсылка.ТипыОтчетов - "Внутренний" или "Дополнительный". +// * ИмяОтчета - Строка - Имя отчета как оно задано в метаданных. +// * КлючВарианта - Строка - Имя варианта отчета как оно задано в СКД отчета. +// * Отчет - Произвольный - Ссылка отчета. Для внутренних отчетов можно не указывать. +// * ВыполнятьЗамеры - Булево - Необязательный. Истина если необходимо замерять время открытия. +// * ИмяОперации - Строка - Необязательный. Имя ключевой операции для замеров времени открытия. +// ДополнительныеПараметры - Структура, Неопределено - Дополнение к стандартным параметрам открытия формы отчета. // -Процедура Открыть(ПараметрыОтчета, ПараметрыФормы, Владелец) Экспорт - - Уникальность = ПараметрыОтчета.ПолноеИмя; - Если ЗначениеЗаполнено(ПараметрыОтчета.КлючВарианта) Тогда - Уникальность = Уникальность + "/КлючВарианта." + ПараметрыОтчета.КлючВарианта; +// Вспомогательные методы: +// ВариантыОтчетов.ПараметрыОткрытия(ВариантСсылка) подготавливает параметры открытия +// на основании ссылки варианта отчета. +// +Процедура ОткрытьФормуОтчета(Знач ФормаВладелец, Знач Вариант, Знач ДополнительныеПараметры = Неопределено) Экспорт + Тип = ТипЗнч(Вариант); + Если Тип = Тип("Структура") Тогда + ПараметрыОткрытия = Вариант; + Иначе + Если Тип = Тип("СправочникСсылка.ВариантыОтчетов") Тогда + ПараметрыОткрытия = ВариантыОтчетовВызовСервера.ПараметрыОткрытия(Вариант); + Иначе + ПараметрыОткрытия = Новый Структура("Ссылка, Отчет, ТипОтчета, ИмяОтчета, КлючВарианта, КлючЗамеров"); + Если ТипЗнч(ФормаВладелец) = Тип("УправляемаяФорма") Тогда + ЗаполнитьЗначенияСвойств(ПараметрыОткрытия, ФормаВладелец); + КонецЕсли; + ЗаполнитьЗначенияСвойств(ПараметрыОткрытия, Вариант); + КонецЕсли; КонецЕсли; - Если ПараметрыФормы = Неопределено Тогда - ПараметрыФормы = Новый Структура; + Если ДополнительныеПараметры <> Неопределено Тогда + ОбщегоНазначенияКлиентСервер.ДополнитьСтруктуру(ПараметрыОткрытия, ДополнительныеПараметры, Истина); КонецЕсли; - ПараметрыФормы.Вставить("КлючВарианта", ПараметрыОтчета.КлючВарианта); - ПараметрыФормы.Вставить("КлючПараметровПечати", Уникальность); - ПараметрыФормы.Вставить("КлючСохраненияПоложенияОкна", Уникальность); + ВариантыОтчетовКлиентСервер.ДополнитьСтруктуруКлючом(ПараметрыОткрытия, "ВыполнятьЗамеры", Ложь); - ОткрытьФорму(ПараметрыОтчета.ПолноеИмя + ".Форма", ПараметрыФормы, Владелец, Уникальность); + ПараметрыОткрытия.ТипОтчета = ВариантыОтчетовКлиентСервер.ТипОтчетаСтрокой(ПараметрыОткрытия.ТипОтчета, ПараметрыОткрытия.Отчет); + Если Не ЗначениеЗаполнено(ПараметрыОткрытия.ТипОтчета) Тогда + ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Не определен тип отчета в %1'"), "ВариантыОтчетовКлиент.ОткрытьФормуОтчета"); + ИначеЕсли ПараметрыОткрытия.ТипОтчета = "Внутренний" Или ПараметрыОткрытия.ТипОтчета = "Расширение" Тогда + Вид = "Отчет"; + КлючЗамеров = ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(ПараметрыОткрытия, "КлючЗамеров"); + Если ЗначениеЗаполнено(КлючЗамеров) Тогда + ПараметрыКлиента = ПараметрыКлиента(); + Если ПараметрыКлиента.ВыполнятьЗамеры Тогда + ПараметрыОткрытия.ВыполнятьЗамеры = Истина; + ПараметрыОткрытия.Вставить("ИмяОперации", КлючЗамеров + ".Открытие"); + ПараметрыОткрытия.Вставить("КомментарийОперации", ПараметрыКлиента.ПрефиксЗамеров); + КонецЕсли; + КонецЕсли; + ИначеЕсли ПараметрыОткрытия.ТипОтчета = "Дополнительный" Тогда + Вид = "ВнешнийОтчет"; + Если Не ПараметрыОткрытия.Свойство("Подключен") Тогда + ВариантыОтчетовВызовСервера.ПриПодключенииОтчета(ПараметрыОткрытия); + КонецЕсли; + Если Не ПараметрыОткрытия.Подключен Тогда + СтандартныеПодсистемыКлиент.ПоказатьРезультатВыполнения(ФормаВладелец, ПараметрыОткрытия); + Возврат; + КонецЕсли; + Иначе + ПоказатьПредупреждение(, НСтр("ru = 'Вариант внешнего отчета можно открыть только из формы отчета.'")); + Возврат; + КонецЕсли; + Если Не ЗначениеЗаполнено(ПараметрыОткрытия.ИмяОтчета) Тогда + ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Не определено имя отчета в %1'"), "ВариантыОтчетовКлиент.ОткрытьФормуОтчета"); + КонецЕсли; + + ПолноеИмяОтчета = Вид + "." + ПараметрыОткрытия.ИмяОтчета; + + Уникальность = ПолноеИмяОтчета; + Если ЗначениеЗаполнено(ПараметрыОткрытия.КлючВарианта) Тогда + Уникальность = Уникальность + "/КлючВарианта." + ПараметрыОткрытия.КлючВарианта; + КонецЕсли; + ПараметрыОткрытия.Вставить("КлючПараметровПечати", Уникальность); + ПараметрыОткрытия.Вставить("КлючСохраненияПоложенияОкна", Уникальность); + + Если ПараметрыОткрытия.ВыполнятьЗамеры Тогда + ВариантыОтчетовКлиентСервер.ДополнитьСтруктуруКлючом(ПараметрыОткрытия, "КомментарийОперации"); + ИдентификаторЗамера = Новый УникальныйИдентификатор; + МодульОценкаПроизводительностиКлиентСервер = ОбщегоНазначенияКлиент.ОбщийМодуль("ОценкаПроизводительностиКлиентСервер"); + МодульОценкаПроизводительностиКлиентСервер.НачатьРучнойЗамерВремени( + ПараметрыОткрытия.ИмяОперации, + ИдентификаторЗамера, + ПараметрыОткрытия.КомментарийОперации); + КонецЕсли; + + ОткрытьФорму(ПолноеИмяОтчета + ".Форма", ПараметрыОткрытия, Неопределено, Истина); + + Если ПараметрыОткрытия.ВыполнятьЗамеры Тогда + МодульОценкаПроизводительностиКлиентСервер.ЗакончитьРучнойЗамерВремени(ИдентификаторЗамера); + КонецЕсли; КонецПроцедуры #КонецОбласти #Область СлужебныеПроцедурыИФункции -// Открывает форму отчета. -// -// Параметры: -// Форма - УправляемаяФорма - Форма, из которой открывается отчет. -// -Процедура ОткрытьВариантОтчета(Форма) Экспорт - Если Форма.ИмяФормы = "Справочник.ВариантыОтчетов.Форма.ФормаСписка" Тогда - Вариант = Форма.Элементы.Список.ТекущиеДанные; - ИначеЕсли Форма.ИмяФормы = "Справочник.ВариантыОтчетов.Форма.ФормаЭлемента" Тогда - Вариант = Форма.Объект; - Иначе - Возврат; - КонецЕсли; - - Если Вариант = Неопределено ИЛИ Вариант.Ссылка.Пустая() Тогда - - ПоказатьПредупреждение(, НСтр("ru = 'Выберите вариант отчета.'")); - - ИначеЕсли Вариант.ТипОтчета = ПредопределенноеЗначение("Перечисление.ТипыОтчетов.Внешний") Тогда - - ПоказатьПредупреждение(, НСтр("ru = 'Вариант внешнего отчета можно открыть только из формы отчета.'")); - - ИначеЕсли Вариант.ТипОтчета = ПредопределенноеЗначение("Перечисление.ТипыОтчетов.Дополнительный") Тогда - - ПараметрыОткрытия = Новый Структура("Ссылка, Отчет, КлючВарианта"); - ЗаполнитьЗначенияСвойств(ПараметрыОткрытия, Вариант); - ОткрытьВариантДополнительногоОтчета(ПараметрыОткрытия); - - Иначе - - Если Форма.ИмяФормы = "Справочник.ВариантыОтчетов.Форма.ФормаСписка" Тогда - ИмяОтчета = Вариант.ИмяОтчета; - Иначе - ИмяОтчета = Форма.ИмяОтчета; - КонецЕсли; - - Уникальность = "Отчет." + ИмяОтчета; - Если ЗначениеЗаполнено(Вариант.КлючВарианта) Тогда - Уникальность = Уникальность + "/КлючВарианта." + Вариант.КлючВарианта; - КонецЕсли; - - ПараметрыОткрытия = Новый Структура; - ПараметрыОткрытия.Вставить("КлючВарианта", Вариант.КлючВарианта); - ПараметрыОткрытия.Вставить("КлючПараметровПечати", Уникальность); - ПараметрыОткрытия.Вставить("КлючСохраненияПоложенияОкна", Уникальность); - - ОткрытьФорму("Отчет." + ИмяОтчета + ".Форма", ПараметрыОткрытия, Неопределено, Уникальность); - - КонецЕсли; -КонецПроцедуры - // Открывает форму настроек (в частности размещения) варианта отчета. Процедура ПоказатьНастройкиОтчета(ВариантСсылка) Экспорт ПараметрыФормы = Новый Структура; @@ -269,6 +307,9 @@ Если Не Форма.Модифицированность Тогда Форма.Модифицированность = Истина; КонецЕсли; + #Если ВебКлиент Тогда + Форма.ОбновитьОтображениеДанных(); // Для платформы. + #КонецЕсли КонецЕсли; КонецЕсли; @@ -279,24 +320,10 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// Обработчики условных вызовов в другие подсистемы. - -// Открывает форму дополнительного отчета с заданным вариантом. -// -// Параметры: -// Вариант - Структура - Информация о варианте отчета: -// * Ссылка - СправочникСсылка.ВариантыОтчетов - Ссылка варианта отчета. -// * Отчет - <см. Справочники.ВариантыОтчетов.Реквизиты.Отчет> - Ссылка или имя отчета. -// * КлючВарианта - Строка - Имя варианта отчета. -// -Процедура ОткрытьВариантДополнительногоОтчета(Вариант) Экспорт - - Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.ДополнительныеОтчетыИОбработки") Тогда - МодульДополнительныеОтчетыИОбработкиКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("ДополнительныеОтчетыИОбработкиКлиент"); - МодульДополнительныеОтчетыИОбработкиКлиент.ОткрытьВариантДополнительногоОтчета(Вариант.Отчет, Вариант.КлючВарианта); - КонецЕсли; - -КонецПроцедуры +Функция ПараметрыКлиента() Экспорт + Возврат ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры( + СтандартныеПодсистемыКлиентПовтИсп.ПараметрыРаботыКлиентаПриЗапуске(), + "ВариантыОтчетов"); +КонецФункции #КонецОбласти diff --git a/SSL/src/CommonModules/ВариантыОтчетовКлиентСервер/Module.bsl b/SSL/src/CommonModules/ВариантыОтчетовКлиентСервер/Module.bsl index 17a9870c4..8ae930866 100644 --- a/SSL/src/CommonModules/ВариантыОтчетовКлиентСервер/Module.bsl +++ b/SSL/src/CommonModules/ВариантыОтчетовКлиентСервер/Module.bsl @@ -4,6 +4,34 @@ // Выполняется на клиенте и на сервере. //////////////////////////////////////////////////////////////////////////////// +#Область ПрограммныйИнтерфейс + +// Идентификатор, который используется для начальной страницы в модуле ВариантыОтчетовПереопределяемый. +Функция ИдентификаторНачальнойСтраницы() Экспорт + + Возврат "Подсистемы"; + +КонецФункции + +#КонецОбласти + +#Область СлужебныйПрограммныйИнтерфейс + +// Добавляет Ключ в Структуру если его нет. +// +// Параметры: +// Структура - Структура - Дополняемая структура. +// Ключ - Строка - Имя свойства. +// Значение - Произвольный - Необязательный. Значение свойства если оно отсутствует в структуре. +// +Процедура ДополнитьСтруктуруКлючом(Структура, Ключ, Значение = Неопределено) Экспорт + Если Не Структура.Свойство(Ключ) Тогда + Структура.Вставить(Ключ, Значение); + КонецЕсли; +КонецПроцедуры + +#КонецОбласти + #Область СлужебныеПроцедурыИФункции // Представление подсистемы. Используется при записи в журнал регистрации и в других местах. @@ -26,9 +54,19 @@ Возврат ПолноеИмяПодсистемы() + ".ИзменениеВарианта"; КонецФункции +// Имя события оповещения для изменения общих настроек. +Функция ИмяСобытияИзменениеОбщихНастроек() Экспорт + Возврат ПолноеИмяПодсистемы() + ".ИзменениеОбщихНастроек"; +КонецФункции + +// Краткое имя подсистемы. +Функция ИмяПодсистемы() Экспорт + Возврат "ВариантыОтчетов"; +КонецФункции + // Полное имя подсистемы. Функция ПолноеИмяПодсистемы() Экспорт - Возврат "СтандартныеПодсистемы.ВариантыОтчетов"; + Возврат "СтандартныеПодсистемы." + ИмяПодсистемы(); КонецФункции // Разделитель, который используется при хранении нескольких наименований в одном строковом реквизите. @@ -79,4 +117,125 @@ Возврат СловаИИхДлина.ВыгрузитьЗначения(); КонецФункции +// Превращает тип отчета в строковый идентификатор. +Функция ТипОтчетаСтрокой(Знач ТипОтчета, Знач Отчет = Неопределено) Экспорт + ТипТипаОтчета = ТипЗнч(ТипОтчета); + Если ТипТипаОтчета = Тип("Строка") Тогда + Возврат ТипОтчета; + ИначеЕсли ТипТипаОтчета = Тип("ПеречислениеСсылка.ТипыОтчетов") Тогда + Если ТипОтчета = ПредопределенноеЗначение("Перечисление.ТипыОтчетов.Внутренний") Тогда + Возврат "Внутренний"; + ИначеЕсли ТипОтчета = ПредопределенноеЗначение("Перечисление.ТипыОтчетов.Расширение") Тогда + Возврат "Расширение"; + ИначеЕсли ТипОтчета = ПредопределенноеЗначение("Перечисление.ТипыОтчетов.Дополнительный") Тогда + Возврат "Дополнительный"; + ИначеЕсли ТипОтчета = ПредопределенноеЗначение("Перечисление.ТипыОтчетов.Внешний") Тогда + Возврат "Внешний"; + Иначе + Возврат Неопределено; + КонецЕсли; + Иначе + Если ТипТипаОтчета <> Тип("Тип") Тогда + ТипОтчета = ТипЗнч(Отчет); + КонецЕсли; + Если ТипОтчета = Тип("СправочникСсылка.ИдентификаторыОбъектовМетаданных") Тогда + Возврат "Внутренний"; + ИначеЕсли ТипОтчета = Тип("СправочникСсылка.ИдентификаторыОбъектовРасширений") Тогда + Возврат "Расширение"; + ИначеЕсли ТипОтчета = Тип("Строка") Тогда + Возврат "Внешний"; + Иначе + Возврат "Дополнительный"; + КонецЕсли; + КонецЕсли; +КонецФункции + +// Превращает тип отчета в строковый идентификатор. +Функция ТипОтчета(ОтчетСсылка) Экспорт + ТипСсылки = ТипЗнч(ОтчетСсылка); + Если ТипСсылки = Тип("СправочникСсылка.ИдентификаторыОбъектовМетаданных") Тогда + Ключ = "Внутренний"; + ИначеЕсли ТипСсылки = Тип("СправочникСсылка.ИдентификаторыОбъектовРасширений") Тогда + Ключ = "Расширение"; + ИначеЕсли ТипСсылки = Тип("Строка") Тогда + Ключ = "Внешний"; + Иначе + Ключ = "Дополнительный"; + КонецЕсли; + Возврат ПредопределенноеЗначение("Перечисление.ТипыОтчетов." + Ключ); +КонецФункции + +// Возвращает текст ошибки по ее числовому номеру. +Функция ТекстОшибки(Номер, Реквизит1 = Неопределено, Реквизит2 = Неопределено, Реквизит3 = Неопределено) Экспорт + Если Номер = 1 Или Номер = 2 Тогда + Если Номер = 1 Тогда + ТекстОшибки = НСтр("ru = 'Отчет ""%1"" подключен к основной форме, но не подключен к форме настроек.'"); + Иначе + ТекстОшибки = НСтр("ru = 'Отчет ""%1"" не подключен к основной форме, но подключен к форме настроек.'"); + КонецЕсли; + ТекстОшибки = ТекстОшибки + Символы.ПС + НСтр("ru = 'Подробнее см. в документации по внедрению подсистемы.'"); + ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ТекстОшибки, Реквизит1); + КонецЕсли; + Возврат ТекстОшибки; +КонецФункции + +// Возвращает индекс пиктограммы в зависимости от переданного типа и модификаторов. +Функция ИндексПиктограммыНастроекОтчета(ИмяТипа, Предопределенный = Ложь, ПометкаУдаления = Ложь) Экспорт + Если ИмяТипа = "Папка" Тогда + Возврат ?(Предопределенный, 3, ?(ПометкаУдаления, 2, 1)); + ИначеЕсли ИмяТипа = "Элемент" Тогда + Возврат ?(Предопределенный, 6, ?(ПометкаУдаления, 5, 4)); + ИначеЕсли ИмяТипа = "Группировка" + Или ИмяТипа = "ГруппировкаТаблицы" + Или ИмяТипа = "ГруппировкаДиаграммы" Тогда + Возврат ?(Предопределенный, 9, ?(ПометкаУдаления, 8, 7)); + ИначеЕсли ИмяТипа = "Таблица" Тогда + Возврат 10; + ИначеЕсли ИмяТипа = "Отчеты" + Или ИмяТипа = "НастройкиВложенногоОбъекта" Тогда + Возврат 11; + ИначеЕсли ИмяТипа = "ПолеВвода" Тогда + Возврат 12; + ИначеЕсли ИмяТипа = "Отборы" + Или ИмяТипа = "Отбор" Тогда + Возврат 13; + ИначеЕсли ИмяТипа = "ВыбранныеПоля" Тогда + Возврат 14; + ИначеЕсли ИмяТипа = "Сортировки" Тогда + Возврат 15; + ИначеЕсли ИмяТипа = "Оформление" + Или ИмяТипа = "УсловноеОформление" Тогда + Возврат 16; + ИначеЕсли ИмяТипа = "Настройки" Тогда + Возврат 17; + ИначеЕсли ИмяТипа = "Структура" Тогда + Возврат 18; + ИначеЕсли ИмяТипа = "Выражение" Тогда + Возврат 19; + ИначеЕсли ИмяТипа = "Ресурс" Тогда + Возврат 20; + ИначеЕсли ИмяТипа = "ТабличнаяЧасть" Тогда + Возврат 21; + ИначеЕсли ИмяТипа = "" Тогда + Возврат 0; + Иначе + Возврат -1; + КонецЕсли; +КонецФункции + +// Формирует строковое представление структуры. +// Полученное представление поддается обратному преобразованию +// при условии отсутствия указанных разделителей в представлениях ключей и значений структуры. +// +Функция СтруктураВСтроку(Структура, РазделительКлючаИЗначения = "=", РазделительЭлементов = ";") Экспорт + Результат = ""; + Для Каждого КлючИЗначение Из Структура Цикл + Результат = Результат + ?(Результат = "", "", РазделительЭлементов) + + КлючИЗначение.Ключ + + РазделительКлючаИЗначения + + КлючИЗначение.Значение; + КонецЦикла; + Возврат Результат; +КонецФункции + #КонецОбласти diff --git a/SSL/src/CommonModules/ВариантыОтчетовПереопределяемый/Module.bsl b/SSL/src/CommonModules/ВариантыОтчетовПереопределяемый/Module.bsl index 2e21b0910..c96bb0558 100644 --- a/SSL/src/CommonModules/ВариантыОтчетовПереопределяемый/Module.bsl +++ b/SSL/src/CommonModules/ВариантыОтчетовПереопределяемый/Module.bsl @@ -7,11 +7,16 @@ #Область ПрограммныйИнтерфейс +//////////////////////////////////////////////////////////////////////////////// +// Настройки подсистемы + // Определяет разделы, в которых доступна панель отчетов. // // Параметры: // Разделы - СписокЗначений - Разделы в которые выведена команды открытия панели отчетов. // * Значение - ОбъектМетаданных: Подсистема - Метаданные подсистемы. +// - Строка - Используется для панели отчетов начальной страницы. +// В качестве раздела можно указать ВариантыОтчетовКлиентСервер.ИдентификаторНачальнойСтраницы(). // * Представление - Строка - Заголовок панели отчетов этого раздела. // // Описание: @@ -19,7 +24,8 @@ // в которых размещены команды вызова панелей отчетов. // // Например: -// Разделы.Добавить(Метаданные.Подсистемы.ИмяПодсистемы); +// Разделы.Добавить(Метаданные.Подсистемы.ИмяПодсистемы, <ЗаголовокПанелиОтчетов>); +// Разделы.Добавить(ВариантыОтчетовКлиентСервер.ИдентификаторНачальнойСтраницы(), <ЗаголовокПанелиОтчетовНачальнойСтраницы>); // Процедура ОпределитьРазделыСВариантамиОтчетов(Разделы) Экспорт diff --git a/SSL/src/CommonModules/ВариантыОтчетовПовтИсп/Module.bsl b/SSL/src/CommonModules/ВариантыОтчетовПовтИсп/Module.bsl index 23ab75d34..c217bbfe1 100644 --- a/SSL/src/CommonModules/ВариантыОтчетовПовтИсп/Module.bsl +++ b/SSL/src/CommonModules/ВариантыОтчетовПовтИсп/Module.bsl @@ -16,12 +16,17 @@ // Данный массив следует использовать во всех запросах к таблице // справочника "ВариантыОтчетов" как отбор по реквизиту "Отчет". // -Функция ДоступныеОтчеты() Экспорт +Функция ДоступныеОтчеты(ПроверятьФункциональныеОпции = Истина) Экспорт Результат = Новый Массив; + КэшФлажка = Неопределено; Для Каждого ОтчетМетаданные Из Метаданные.Отчеты Цикл Если ПравоДоступа("Просмотр", ОтчетМетаданные) - И ОбщегоНазначения.ОбъектМетаданныхДоступенПоФункциональнымОпциям(ОтчетМетаданные) Тогда + И ВариантыОтчетов.ОтчетПодключенКХранилищу(ОтчетМетаданные, КэшФлажка) Тогда + Если ПроверятьФункциональныеОпции + И Не ОбщегоНазначения.ОбъектМетаданныхДоступенПоФункциональнымОпциям(ОтчетМетаданные) Тогда + Продолжить; + КонецЕсли; Результат.Добавить(ОбщегоНазначения.ИдентификаторОбъектаМетаданных(ОтчетМетаданные)); КонецЕсли; КонецЦикла; @@ -32,7 +37,7 @@ // Формирует список вариантов отчетов конфигурации, недоступных текущему пользователю по функциональным опциям. // // Возвращаемое значение: -// Массив из СправочникСсылка.ПредопределенныеВариантыОтчетов - +// Массив из СправочникСсылка.ПредопределенныеВариантыОтчетов, СправочникСсылка.ПредопределенныеВариантыОтчетовРасширений - // Варианты отчетов, которые отключены по функциональным опциям. // // Описание: @@ -42,43 +47,61 @@ Функция ОтключенныеВариантыПрограммы() Экспорт // Получить варианты, недоступные по функциональным опциям. - ЗначениеКонстанты = Константы.ПараметрыВариантовОтчетов.Получить(); - Структура = ЗначениеКонстанты.Получить(); - ТаблицаОпций = Структура.ТаблицаФункциональныхОпций; - ТаблицаОпций.Колонки.Добавить("ОтчетДоступен", Новый ОписаниеТипов("Булево")); - ТаблицаОпций.Колонки.Добавить("ЗначениеОпции", Новый ОписаниеТипов("Число")); + ТаблицаОпций = ВариантыОтчетовПовтИсп.Параметры().ТаблицаФункциональныхОпций; + + ТаблицаВариантов = ТаблицаОпций.СкопироватьКолонки("ПредопределенныйВариант, ИмяФункциональнойОпции"); + ТаблицаВариантов.Колонки.Добавить("ЗначениеОпции", Новый ОписаниеТипов("Число")); ОтчетыПользователя = ВариантыОтчетовПовтИсп.ДоступныеОтчеты(); Для Каждого ОтчетСсылка Из ОтчетыПользователя Цикл Найденные = ТаблицаОпций.НайтиСтроки(Новый Структура("Отчет", ОтчетСсылка)); Для Каждого СтрокаТаблицы Из Найденные Цикл - СтрокаТаблицы.ОтчетДоступен = Истина; + СтрокаВариант = ТаблицаВариантов.Добавить(); + ЗаполнитьЗначенияСвойств(СтрокаВариант, СтрокаТаблицы); Значение = ПолучитьФункциональнуюОпцию(СтрокаТаблицы.ИмяФункциональнойОпции); Если Значение = Истина Тогда - СтрокаТаблицы.ЗначениеОпции = 1; + СтрокаВариант.ЗначениеОпции = 1; КонецЕсли; КонецЦикла; КонецЦикла; - ТаблицаОпций.Свернуть("ПредопределенныйВариант, ОтчетДоступен", "ЗначениеОпции"); - ТаблицаВариантов = ТаблицаОпций.Скопировать(Новый Структура("ОтчетДоступен, ЗначениеОпции", Истина, 0)); - ТаблицаВариантов.Свернуть("ПредопределенныйВариант"); - ОтключенныеВарианты = ТаблицаВариантов.ВыгрузитьКолонку("ПредопределенныйВариант"); + ТаблицаВариантов.Свернуть("ПредопределенныйВариант", "ЗначениеОпции"); + ТаблицаОтключенных = ТаблицаВариантов.Скопировать(Новый Структура("ЗначениеОпции", 0)); + ТаблицаОтключенных.Свернуть("ПредопределенныйВариант"); + ОтключенныеВарианты = ТаблицаОтключенных.ВыгрузитьКолонку("ПредопределенныйВариант"); // Добавить варианты, отключенные разработчиком. Запрос = Новый Запрос; Запрос.УстановитьПараметр("ОтчетыПользователя", ОтчетыПользователя); + Запрос.УстановитьПараметр("ВерсияРасширений", ПараметрыСеанса.ВерсияРасширений); Запрос.УстановитьПараметр("МассивОтключенных", ОтключенныеВарианты); Запрос.Текст = "ВЫБРАТЬ РАЗРЕШЕННЫЕ - | ПредопределенныеВариантыОтчетов.Ссылка + | ВариантыКонфигурации.Ссылка |ИЗ - | Справочник.ПредопределенныеВариантыОтчетов КАК ПредопределенныеВариантыОтчетов + | Справочник.ПредопределенныеВариантыОтчетов КАК ВариантыКонфигурации |ГДЕ - | ПредопределенныеВариантыОтчетов.Включен = ЛОЖЬ - | И ПредопределенныеВариантыОтчетов.Отчет В(&ОтчетыПользователя) - | И НЕ ПредопределенныеВариантыОтчетов.Ссылка В (&МассивОтключенных) - | И ПредопределенныеВариантыОтчетов.ПометкаУдаления = ЛОЖЬ"; + | (ВариантыКонфигурации.Включен = ЛОЖЬ + | ИЛИ ВариантыКонфигурации.ПометкаУдаления = ИСТИНА) + | И ВариантыКонфигурации.Отчет В(&ОтчетыПользователя) + | И НЕ ВариантыКонфигурации.Ссылка В (&МассивОтключенных) + | + |ОБЪЕДИНИТЬ ВСЕ + | + |ВЫБРАТЬ + | ВариантыРасширений.Ссылка + |ИЗ + | Справочник.ПредопределенныеВариантыОтчетовРасширений КАК ВариантыРасширений + | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ПредопределенныеВариантыОтчетовВерсийРасширений КАК Версии + | ПО ВариантыРасширений.Ссылка = Версии.Вариант + | И ВариантыРасширений.Отчет = Версии.Отчет + | И (Версии.ВерсияРасширений = &ВерсияРасширений) + |ГДЕ + | (ВариантыРасширений.Включен = ЛОЖЬ + | ИЛИ ВариантыРасширений.ПометкаУдаления = ИСТИНА + | ИЛИ Версии.Вариант ЕСТЬ NULL ) + | И ВариантыРасширений.Отчет В(&ОтчетыПользователя) + | И НЕ ВариантыРасширений.Ссылка В (&МассивОтключенных)"; Выборка = Запрос.Выполнить().Выбрать(); Пока Выборка.Следующий() Цикл @@ -113,11 +136,74 @@ КорневаяСтрока.Ссылка = Справочники.ИдентификаторыОбъектовМетаданных.ПустаяСсылка(); КорневаяСтрока.Представление = НСтр("ru = 'Все разделы'"); - ВариантыОтчетов.ДобавитьПодсистемыТекущегоПользователя(КорневаяСтрока, Неопределено, Неопределено); + ДобавитьПодсистемыТекущегоПользователя(КорневаяСтрока, Неопределено, Неопределено); Возврат Результат; КонецФункции +// Добавляет подсистемы родителя с фильтром по правам доступа и функциональным опциям. +Процедура ДобавитьПодсистемыТекущегоПользователя(РодительСтрока, РодительМетаданные = Неопределено, РазделСсылка = Неопределено) + Если РодительМетаданные = Неопределено Тогда + ДляКорневойСтроки = Истина; + ПриоритетРодителя = ""; + Подсистемы = ВариантыОтчетов.ИспользуемыеРазделы(); + ИдентификаторНачальнойСтраницы = ВариантыОтчетовКлиентСервер.ИдентификаторНачальнойСтраницы(); + Иначе + ДляКорневойСтроки = Ложь; + ПриоритетРодителя = РодительСтрока.Приоритет; + Подсистемы = РодительМетаданные.Подсистемы; + ИдентификаторНачальнойСтраницы = ""; + КонецЕсли; + Приоритет = 0; + Для Каждого Подсистема Из Подсистемы Цикл + Если ДляКорневойСтроки Тогда + ПодсистемаМетаданные = Подсистема.Метаданные; + ЭтоНачальнаяСтраница = (ПодсистемаМетаданные = ИдентификаторНачальнойСтраницы); + Иначе + ПодсистемаМетаданные = Подсистема; + ЭтоНачальнаяСтраница = Ложь; + КонецЕсли; + + Приоритет = Приоритет + 1; + + Если Не ЭтоНачальнаяСтраница Тогда + Если Не ПодсистемаМетаданные.ВключатьВКомандныйИнтерфейс + Или Не ПравоДоступа("Просмотр", ПодсистемаМетаданные) + Или Не ОбщегоНазначения.ОбъектМетаданныхДоступенПоФункциональнымОпциям(ПодсистемаМетаданные) Тогда + Продолжить; // Подсистема не доступна по ФО или по правам. + КонецЕсли; + КонецЕсли; + + СтрокаДерева = РодительСтрока.Строки.Добавить(); + Если ЭтоНачальнаяСтраница Тогда + СтрокаДерева.Имя = ИдентификаторНачальнойСтраницы; + СтрокаДерева.ПолноеИмя = "Подсистема." + ИдентификаторНачальнойСтраницы; + СтрокаДерева.Представление = НСтр("ru = 'Начальная страница'"); + Иначе + СтрокаДерева.Имя = ПодсистемаМетаданные.Имя; + СтрокаДерева.ПолноеИмя = ПодсистемаМетаданные.ПолноеИмя(); + СтрокаДерева.Представление = ПодсистемаМетаданные.Представление(); + КонецЕсли; + Если ДляКорневойСтроки Тогда + СтрокаДерева.Ссылка = Подсистема.Ссылка; + СтрокаДерева.РазделСсылка = Подсистема.Ссылка; + СтрокаДерева.ПолноеПредставление = Подсистема.ЗаголовокПанели; + Иначе + СтрокаДерева.Ссылка = ОбщегоНазначения.ИдентификаторОбъектаМетаданных(ПодсистемаМетаданные); + СтрокаДерева.РазделСсылка = РазделСсылка; + Если СтрДлина(ПриоритетРодителя) > 12 Тогда + СтрокаДерева.ПолноеПредставление = РодительСтрока.Представление + ": " + СтрокаДерева.Представление; + Иначе + СтрокаДерева.ПолноеПредставление = СтрокаДерева.Представление; + КонецЕсли; + КонецЕсли; + СтрокаДерева.Приоритет = ПриоритетРодителя + Формат(Приоритет, "ЧЦ=4; ЧДЦ=0; ЧВН=; ЧГ=0"); + Если Не ЭтоНачальнаяСтраница Тогда + ДобавитьПодсистемыТекущегоПользователя(СтрокаДерева, ПодсистемаМетаданные, СтрокаДерева.РазделСсылка); + КонецЕсли; + КонецЦикла; +КонецПроцедуры + // Возвращает Истина если у пользователя есть право чтения вариантов отчетов. Функция ПравоЧтения() Экспорт Возврат ПравоДоступа("Чтение", Метаданные.Справочники.ВариантыОтчетов); @@ -128,6 +214,7 @@ Возврат ПравоДоступа("СохранениеДанныхПользователя", Метаданные) И ПравоДоступа("Добавление", Метаданные.Справочники.ВариантыОтчетов); КонецФункции +// Устарела: Следует использовать ВариантыОтчетовПовтИсп.Параметры().ОтчетыСНастройками. // Массив отчетов, которые хранят настройки общей формы "ФормаОтчета" и переопределяют их в модуле объекта. // // Возвращаемое значение: @@ -138,15 +225,47 @@ // ВариантыОтчетовПереопределяемый.НастроитьВариантыОтчетов(). // Функция ОтчетыСНастройками() Экспорт - ЗначениеКонстанты = Константы.ПараметрыВариантовОтчетов.Получить(); - ОтчетыСНастройками = ЗначениеКонстанты.Получить().ОтчетыСНастройками; + Возврат ВариантыОтчетовПовтИсп.Параметры().ОтчетыСНастройками; +КонецФункции + +// Параметры подсистемы, закэшированные при обновлении. +Функция Параметры() Экспорт + ХранилищеЗначения = Константы.ПараметрыВариантовОтчетов.Получить(); + Параметры = ХранилищеЗначения.Получить(); + + Если ЗначениеЗаполнено(ПараметрыСеанса.ВерсияРасширений) Тогда + ХранилищеЗначения = СтандартныеПодсистемыСервер.ПараметрРаботыРасширения(ВариантыОтчетовКлиентСервер.ПолноеИмяПодсистемы()); + Если ХранилищеЗначения = Неопределено Тогда + Если Не Пользователи.ЭтоПолноправныйПользователь() Тогда + УстановитьПривилегированныйРежим(Истина); + Если Не ПривилегированныйРежим() Тогда + ВызватьИсключение НСтр("ru = 'Не удалось обновить вспомогательные данные расширений. Обратитесь к администратору.'"); + КонецЕсли; + КонецЕсли; + Настройки = Новый Структура; + Настройки.Вставить("Конфигурация", Ложь); + Настройки.Вставить("Расширения", Истина); + Настройки.Вставить("ОбщиеДанные", Истина); + Настройки.Вставить("РазделенныеДанные", Истина); + Настройки.Вставить("Оперативное", Истина); + Настройки.Вставить("Отложенное", Истина); + Настройки.Вставить("Полное", Истина); + Обновление = ВариантыОтчетов.Обновить(Настройки); + ХранилищеЗначения = СтандартныеПодсистемыСервер.ПараметрРаботыРасширения(ВариантыОтчетовКлиентСервер.ПолноеИмяПодсистемы()); + КонецЕсли; + Если ХранилищеЗначения <> Неопределено Тогда + ПараметрыРасширений = ХранилищеЗначения.Получить(); + ОбщегоНазначенияКлиентСервер.ДополнитьМассив(Параметры.ОтчетыСНастройками, ПараметрыРасширений.ОтчетыСНастройками); + ОбщегоНазначенияКлиентСервер.ДополнитьТаблицу(Параметры.ТаблицаФункциональныхОпций, ПараметрыРасширений.ТаблицаФункциональныхОпций); + КонецЕсли; + КонецЕсли; Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ДополнительныеОтчетыИОбработки") Тогда МодульДополнительныеОтчетыИОбработки = ОбщегоНазначения.ОбщийМодуль("ДополнительныеОтчетыИОбработки"); - МодульДополнительныеОтчетыИОбработки.ПриОпределенииОтчетовСНастройками(ОтчетыСНастройками); + МодульДополнительныеОтчетыИОбработки.ПриОпределенииОтчетовСНастройками(Параметры.ОтчетыСНастройками); КонецЕсли; - Возврат ОтчетыСНастройками; + Возврат Параметры; КонецФункции #КонецОбласти diff --git a/SSL/src/CommonModules/ВерсионированиеОбъектов/Module.bsl b/SSL/src/CommonModules/ВерсионированиеОбъектов/Module.bsl index 56bf6e1ee..122acb438 100644 --- a/SSL/src/CommonModules/ВерсионированиеОбъектов/Module.bsl +++ b/SSL/src/CommonModules/ВерсионированиеОбъектов/Module.bsl @@ -55,7 +55,6 @@ НоваяЗапись = НаборЗаписейНастроек.Добавить(); НоваяЗапись.ТипОбъекта = ВерсионируемыйОбъект; НоваяЗапись.Вариант = Перечисления.ВариантыВерсионированияОбъектов.НеВерсионировать; - НоваяЗапись.Использовать = ? (НоваяЗапись.Вариант = Перечисления.ВариантыВерсионированияОбъектов.НеВерсионировать, Ложь, Истина); КонецЦикла; НаборЗаписейНастроек.Записать(Истина); @@ -103,7 +102,7 @@ ПолноеИмяМетаданных = Неопределено; Если Пользователи.РолиДоступны("ЧтениеВерсийОбъектов") И ПолучитьФункциональнуюОпцию("ИспользоватьВерсионированиеОбъектов") Тогда - ИмяФормыМассив = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(Форма.ИмяФормы, "."); + ИмяФормыМассив = СтрРазделить(Форма.ИмяФормы, ".", Ложь); ПолноеИмяМетаданных = ИмяФормыМассив[0] + "." + ИмяФормыМассив[1]; КонецЕсли; @@ -144,11 +143,15 @@ ОписаниеОбъекта.Вставить("ДатаИзменения", ТекущаяДатаСеанса()); ОписаниеОбъекта.Вставить("Комментарий", ""); НомерВерсии = 0; + + ВерсионированиеОбъектовПереопределяемый.ПослеРазбораВерсииОбъекта(СсылкаНаОбъект, ОписаниеОбъекта); Иначе ОписаниеОбъекта = РазборВерсии(СсылкаНаОбъект, НомерВерсии); КонецЕсли; - Описание = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = '№ %1 / (%2) / %3'"), - НомерВерсии, Строка(ОписаниеОбъекта.ДатаИзменения), СокрЛП(Строка(ОписаниеОбъекта.АвторИзменения))); + + Описание = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = '№ %1 / (%2) / %3'"), НомерВерсии, + Строка(ОписаниеОбъекта.ДатаИзменения), СокрЛП(Строка(ОписаниеОбъекта.АвторИзменения))); + ОписаниеОбъекта.Вставить("Описание", Описание); ОписаниеОбъекта.Вставить("НомерВерсии", НомерВерсии); @@ -159,14 +162,6 @@ КонецФункции -// Устарела. Следует использовать ОтчетПоВерсииОбъекта. -// -Функция ПолучитьПечатнуюФормуОбъекта(СсылкаНаОбъект) Экспорт - - Возврат ОтчетПоВерсииОбъекта(СсылкаНаОбъект); - -КонецФункции - #КонецОбласти #Область СлужебныйПрограммныйИнтерфейс @@ -213,7 +208,8 @@ Обработчик.Версия = "2.2.3.8"; Обработчик.Процедура = "ВерсионированиеОбъектов.ОбновитьСведенияОВерсияхОбъектов"; Обработчик.РежимВыполнения = "Отложенно"; - Обработчик.Комментарий = НСтр("ru = 'Обновление сведений о записанных версиях объектов.'"); + Обработчик.Идентификатор = Новый УникальныйИдентификатор("b403067e-7c2d-461c-89f9-5d5fc95dcab6"); + Обработчик.Комментарий = НСтр("ru = 'Обновление сведений о записанных версиях объектов. После выполнения обновления увеличится скорость записи версионируемых объектов.'"); Обработчик = Обработчики.Добавить(); Обработчик.Версия = "2.2.4.13"; @@ -251,9 +247,8 @@ НСтр("ru = 'Версионирование'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), УровеньЖурналаРегистрации.Ошибка, НаборЗаписей.Метаданные(), , - СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Не удалось обновить сведения о версии №%1 объекта ""%2"" по причине: - |%3'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Не удалось обновить сведения о версии №%1 объекта ""%2"" по причине: + |%3'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), Выборка.НомерВерсии, ОбщегоНазначения.ПредметСтрокой(Выборка.Объект), ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()))); @@ -277,6 +272,7 @@ // Параметры: // Объект - для создания версии. // +//Процедура ПриСозданииВерсииОбъекта(Объект, РежимЗаписиПроведение) Экспорт Процедура ПриСозданииВерсииОбъекта(Объект, РежимЗаписи) Экспорт Перем НомерПоследнейВерсии, Комментарий; @@ -374,21 +370,16 @@ // Процедура ПриЗаполненииСпискаТекущихДел(ТекущиеДела) Экспорт - МодульТекущиеДелаСлужебный = ОбщегоНазначения.ОбщийМодуль("ТекущиеДелаСлужебный"); + МодульТекущиеДелаСервер = ОбщегоНазначения.ОбщийМодуль("ТекущиеДелаСервер"); Если Не ПравоДоступа("Редактирование", Метаданные.РегистрыСведений.НастройкиВерсионированияОбъектов) - Или МодульТекущиеДелаСлужебный.ДелоОтключено("УстаревшиеВерсииОбъектов") Тогда + Или МодульТекущиеДелаСервер.ДелоОтключено("УстаревшиеВерсииОбъектов") Тогда Возврат; КонецЕсли; - МодульТекущиеДелаСервер = ОбщегоНазначения.ОбщийМодуль("ТекущиеДелаСервер"); // Процедура вызывается только при наличии подсистемы "Текущие дела", поэтому здесь // не делается проверка существования подсистемы. Разделы = МодульТекущиеДелаСервер.РазделыДляОбъекта(Метаданные.РегистрыСведений.НастройкиВерсионированияОбъектов.ПолноеИмя()); - Если Разделы = Неопределено Тогда - Возврат; - КонецЕсли; - ИнформацияОбУстаревшихВерсиях = ИнформацияОбУстаревшихВерсиях(); РазмерУстаревшихДанных = РазмерДанныхСтрокой(ИнформацияОбУстаревшихВерсиях.РазмерДанных); Подсказка = НСтр("ru = 'Устаревших версий: %1 (%2)'"); @@ -458,9 +449,7 @@ МенеджерЗаписи.НомерВерсии = СведенияОВерсииОбъекта.НомерВерсии - 1; МенеджерЗаписи.Прочитать(); Если МенеджерЗаписи.Выбран() Тогда - ДвоичныеДанные = СериализоватьОбъект(Объект.Ссылка.ПолучитьОбъект()); - ХранилищеДанных = Новый ХранилищеЗначения(ДвоичныеДанные, Новый СжатиеДанных(9)); - МенеджерЗаписи.ВерсияОбъекта = ХранилищеДанных; + МенеджерЗаписи.ВерсияОбъекта = Новый ХранилищеЗначения(ДанныеДляХранения(Объект.Ссылка), Новый СжатиеДанных(9)); МенеджерЗаписи.Записать(); КонецЕсли; КонецЕсли; @@ -653,8 +642,8 @@ Иначе - ТипыВерсий.Добавить(Перечисления.ТипыВерсийОбъекта.НепринятыеДанныеПоДатеЗапретаОбъектСуществует); - ТипыВерсий.Добавить(Перечисления.ТипыВерсийОбъекта.НепринятыеДанныеПоДатеЗапретаОбъектНеСуществует); + ТипыВерсий.Добавить(Перечисления.ТипыВерсийОбъекта.НепринятыйПоДатеЗапретаОбъектСуществуетВБазе); + ТипыВерсий.Добавить(Перечисления.ТипыВерсийОбъекта.НепринятыйПоДатеЗапретаОбъектНеСуществуетВБазе); Если ЗначениеЗаполнено(СтрокаПоиска) Тогда @@ -673,8 +662,8 @@ ТипыВерсий.Добавить(Перечисления.ТипыВерсийОбъекта.ПринятыеДанныеПоКоллизии); ТипыВерсий.Добавить(Перечисления.ТипыВерсийОбъекта.НепринятыеДанныеПоКоллизии); - ТипыВерсий.Добавить(Перечисления.ТипыВерсийОбъекта.НепринятыеДанныеПоДатеЗапретаОбъектСуществует); - ТипыВерсий.Добавить(Перечисления.ТипыВерсийОбъекта.НепринятыеДанныеПоДатеЗапретаОбъектНеСуществует); + ТипыВерсий.Добавить(Перечисления.ТипыВерсийОбъекта.НепринятыйПоДатеЗапретаОбъектСуществуетВБазе); + ТипыВерсий.Добавить(Перечисления.ТипыВерсийОбъекта.НепринятыйПоДатеЗапретаОбъектНеСуществуетВБазе); КонецЕсли; ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "[ОтборПоПричине]", СтрокаОтбора); @@ -778,7 +767,6 @@ "ВЫБРАТЬ | УдалитьНастройкиВерсионированияОбъектов.ТипОбъекта КАК ИмяОбъекта, | УдалитьНастройкиВерсионированияОбъектов.Вариант, - | УдалитьНастройкиВерсионированияОбъектов.Использовать, | УдалитьНастройкиВерсионированияОбъектов.СрокХраненияВерсий |ИЗ | РегистрСведений.УдалитьНастройкиВерсионированияОбъектов КАК УдалитьНастройкиВерсионированияОбъектов"; @@ -810,6 +798,16 @@ КонецПроцедуры +// Проверяет наличие у пользователя прав на чтение информации о версиях. +// +Функция ЕстьПравоНаЧтениеВерсийОбъектов() Экспорт + Возврат Пользователи.РолиДоступны("ЧтениеВерсийОбъектов, ЧтениеИнформацииОВерсияхОбъектов"); +КонецФункции + +Функция ЕстьПравоЧтенияИнформацииОВерсияхОбъектов() Экспорт + Возврат Пользователи.РолиДоступны("ЧтениеИнформацииОВерсияхОбъектов"); +КонецФункции + //////////////////////////////////////////////////////////////////////////////// // Обработчики условных вызовов в эту подсистему. @@ -850,9 +848,8 @@ КонецЕсли; Объект.ДополнительныеСвойства.Вставить("ВерсионированиеОбъектовКомментарийКВерсии", - СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Выполнен переход к версии №%1 от %2'"), - Строка(НомерВерсии), Формат(ДатаВерсии, "ДЛФ=DT"))); + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Выполнен переход к версии №%1 от %2'"), Строка(НомерВерсии), Формат(ДатаВерсии, "ДЛФ=DT"))); + Объект.ДополнительныеСвойства.Вставить("ПропуститьПроверкуЗапретаИзменения"); Объект.Записать(); @@ -861,6 +858,48 @@ КонецПроцедуры +// См. описание процедуры СтандартныеПодсистемыСервер.СобратьСтатистикуКонфигурации. +Процедура СобратьСтатистикуКонфигурации() Экспорт + + Если Не ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ЦентрМониторинга") Тогда + Возврат; + КонецЕсли; + + МодульЦентрМониторинга = ОбщегоНазначения.ОбщийМодуль("ЦентрМониторинга"); + + ТекстЗапроса = + "ВЫБРАТЬ + | ТИПЗНАЧЕНИЯ(ВерсииОбъектов.Объект) КАК ТипОбъекта, + | СУММА(1) КАК Количество + |ИЗ + | РегистрСведений.ВерсииОбъектов КАК ВерсииОбъектов + | + |СГРУППИРОВАТЬ ПО + | ТИПЗНАЧЕНИЯ(ВерсииОбъектов.Объект)"; + + Запрос = Новый Запрос(ТекстЗапроса); + Выборка = Запрос.Выполнить().Выбрать(); + Пока Выборка.Следующий() Цикл + ОбъектМетаданных = Метаданные.НайтиПоТипу(Выборка.ТипОбъекта); + МодульЦентрМониторинга.ЗаписатьСтатистикуОбъектаКонфигурации("КоличествоВерсийОбъекта." + ОбъектМетаданных.ПолноеИмя(), Выборка.Количество); + КонецЦикла; + + ТекстЗапроса = + "ВЫБРАТЬ + | НастройкиВерсионированияОбъектов.ТипОбъекта.ПолноеИмя КАК ИмяОбъекта + |ИЗ + | РегистрСведений.НастройкиВерсионированияОбъектов КАК НастройкиВерсионированияОбъектов + |ГДЕ + | НастройкиВерсионированияОбъектов.Использовать = ИСТИНА"; + + Запрос = Новый Запрос(ТекстЗапроса); + Выборка = Запрос.Выполнить().Выбрать(); + Пока Выборка.Следующий() Цикл + МодульЦентрМониторинга.ЗаписатьСтатистикуОбъектаКонфигурации("ВключеноВерсионированиеОбъекта." + Выборка.ИмяОбъекта, Истина); + КонецЦикла; + +КонецПроцедуры + #КонецОбласти #Область СлужебныеПроцедурыИФункции @@ -1004,7 +1043,7 @@ Запрос.УстановитьПараметр("Ссылка", Ссылка); Запрос.УстановитьПараметр("НомерВерсии", Число(НомерВерсии)); - Результат = Новый Структура("ВерсияОбъекта, АвторВерсии, ДатаВерсии, Комментарий"); + Результат = Новый Структура("ВерсияОбъекта, ТабличныеДокументы, АвторВерсии, ДатаВерсии, Комментарий"); Выборка = Запрос.Выполнить().Выбрать(); Если Выборка.Следующий() Тогда @@ -1013,6 +1052,11 @@ Если Результат.ВерсияОбъекта = Неопределено Тогда Результат.ВерсияОбъекта = ДанныеВерсииОбъекта(Ссылка, НомерВерсии, Выборка.КонтрольнаяСумма); КонецЕсли; + + Если ТипЗнч(Результат.ВерсияОбъекта) = Тип("Структура") Тогда + Результат.ТабличныеДокументы = Результат.ВерсияОбъекта.ТабличныеДокументы; + Результат.ВерсияОбъекта = Результат.ВерсияОбъекта.Объект; + КонецЕсли; КонецЕсли; Если Результат.ВерсияОбъекта = Неопределено Тогда @@ -1067,24 +1111,22 @@ КонецПроцедуры -// Проверяет наличие у пользователя прав на чтение информации о версиях. -// -Функция ЕстьПравоНаЧтениеВерсийОбъектов() Экспорт - Возврат Пользователи.РолиДоступны("ЧтениеВерсийОбъектов, ЧтениеИнформацииОВерсияхОбъектов"); -КонецФункции - // Записывает версию объекта в информационную базу. // // Параметры: // Источник - Объект - записываемый объект ИБ; // РежимЗаписи - РежимЗаписиДокумента. // +//Процедура ЗаписатьВерсиюОбъекта(Источник, РежимЗаписиПроведение = Ложь) Экспорт Процедура ЗаписатьВерсиюОбъекта(Источник, РежимЗаписи = Неопределено) Экспорт - Если Источник.ОбменДанными.Загрузка Тогда Возврат; КонецЕсли; + Если СтандартныеПодсистемыСервер.ЭтоИдентификаторОбъектаМетаданных(Источник) Тогда + Возврат; + КонецЕсли; + Если Источник.ДополнительныеСвойства.Свойство("СведенияОВерсииОбъекта") Тогда Возврат; КонецЕсли; @@ -1126,7 +1168,7 @@ Если Выборка.Следующий() Тогда Результат = Выборка.ВерсияОбъекта.Получить(); Если Результат = Неопределено И Выборка.НомерВерсии = НомерПоследнейВерсии(СсылкаНаОбъект) Тогда - Результат = СериализоватьОбъект(СсылкаНаОбъект.ПолучитьОбъект()); + Результат = ДанныеДляХранения(СсылкаНаОбъект); КонецЕсли; Возврат Результат; КонецЕсли; @@ -1153,7 +1195,7 @@ Возврат ДанныеВерсииОбъекта(СсылкаНаОбъект, НомерВерсии, Выборка.КонтрольнаяСумма); КонецЕсли; - Возврат СериализоватьОбъект(СсылкаНаОбъект.ПолучитьОбъект()); + Возврат ДанныеДляХранения(СсылкаНаОбъект); КонецЕсли; КонецФункции @@ -1185,7 +1227,7 @@ // Только для служебного использования. Процедура ОчиститьУстаревшиеВерсииОбъектов() Экспорт - ОбщегоНазначения.ПриНачалеВыполненияРегламентногоЗадания(); + ОбщегоНазначения.ПриНачалеВыполненияРегламентногоЗадания(Метаданные.РегламентныеЗадания.ОчисткаУстаревшихВерсийОбъектов); УстановитьПривилегированныйРежим(Истина); @@ -1265,6 +1307,8 @@ | НастройкиВерсионированияОбъектов.СрокХраненияВерсий КАК СрокХраненияВерсий |ИЗ | РегистрСведений.НастройкиВерсионированияОбъектов КАК НастройкиВерсионированияОбъектов + |ГДЕ + | НЕ НастройкиВерсионированияОбъектов.ТипОбъекта.ПометкаУдаления | |УПОРЯДОЧИТЬ ПО | СрокХраненияВерсий @@ -1430,8 +1474,7 @@ РазмерДанных = Окр(РазмерДанных, 0); КонецЕсли; - Возврат СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = '%1 %2'"), РазмерДанных, ЕдиницаИзмерения); + Возврат СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = '%1 %2'"), РазмерДанных, ЕдиницаИзмерения); КонецФункции @@ -1505,16 +1548,6 @@ ЧтениеXML = Новый ЧтениеFastInfoSet; ЧтениеXML.УстановитьДвоичныеДанные(ДвоичныеДанные); - ЗаписьXML = Новый ЗаписьXML; - ЗаписьXML.УстановитьСтроку(); - Пока ЧтениеXML.Прочитать() Цикл - ЗаписьXML.ЗаписатьТекущий(ЧтениеXML); - КонецЦикла; - СтрокаXML = ЗаписьXML.Закрыть(); - - ЧтениеXML = Новый ЧтениеXML; - ЧтениеXML.УстановитьСтроку(СтрокаXML); - // Уровень позиции маркера в иерархии XML: // 0 - уровень не задан // 1 - первый элемент (имя объекта) @@ -1525,14 +1558,11 @@ МетаданныеОбъекта = Ссылка.Метаданные(); ТабличныеЧастиМТД = МетаданныеОбъекта.ТабличныеЧасти; - ТипЗначения = ""; - ТипЗначенияПоляТЧ = ""; // Основной цикл разбора по XML. Пока ЧтениеXML.Прочитать() Цикл - Если ЧтениеXML.ТипУзла = ТипУзлаXML.НачалоЭлемента Тогда УровеньЧтения = УровеньЧтения + 1; Если УровеньЧтения = 1 Тогда // Указатель на первом элементе XML - корень XML. @@ -1552,44 +1582,34 @@ Если ЧтениеXML.КоличествоАтрибутов() > 0 Тогда Пока ЧтениеXML.ПрочитатьАтрибут() Цикл Если ЧтениеXML.ТипУзла = ТипУзлаXML.Атрибут - И ЧтениеXML.Имя = "xsi:type" Тогда - НовоеЗР.ТипРеквизита = ЧтениеXML.Значение; - - XMLТип = ЧтениеXML.Значение; - - Если Лев(XMLТип, 3) = "xs:" Тогда - НовоеЗР.Тип = ИзXMLТипа(Новый ТипДанныхXML(Прав(XMLТип, СтрДлина(XMLТип)-3), "http://www.w3.org/2001/XMLSchema")); - Иначе - НовоеЗР.Тип = ИзXMLТипа(Новый ТипДанныхXML(XMLТип, "")); - КонецЕсли; - + И ЧтениеXML.Имя = "xsi:type" Тогда + НовоеЗР.ТипРеквизита = ЧтениеXML.Значение; + XMLТип = ЧтениеXML.Значение; + Если СтрНачинаетсяС(XMLТип, "xs:") Тогда + НовоеЗР.Тип = ИзXMLТипа(Новый ТипДанныхXML(Прав(XMLТип, СтрДлина(XMLТип)-3), "http://www.w3.org/2001/XMLSchema")); + Иначе + НовоеЗР.Тип = ИзXMLТипа(Новый ТипДанныхXML(XMLТип, "")); + КонецЕсли; КонецЕсли; КонецЦикла; КонецЕсли; Если Не ЗначениеЗаполнено(НовоеЗР.Тип) Тогда - ОписаниеРеквизита = МетаданныеОбъекта.Реквизиты.Найти(НовоеЗР.НаименованиеРеквизита); - Если ОписаниеРеквизита = Неопределено Тогда - НаименованиеРеквизита = ПолучитьПредставлениеРеквизитаНаЯзыке(НовоеЗР.НаименованиеРеквизита); - Если ОбщегоНазначения.ЭтоСтандартныйРеквизит(МетаданныеОбъекта.СтандартныеРеквизиты, НаименованиеРеквизита) Тогда - ОписаниеРеквизита = МетаданныеОбъекта.СтандартныеРеквизиты[НаименованиеРеквизита]; - + Иначе + ОписаниеРеквизита = Метаданные.ОбщиеРеквизиты.Найти(НаименованиеРеквизита); КонецЕсли; - КонецЕсли; Если ОписаниеРеквизита <> Неопределено И ОписаниеРеквизита.Тип.Типы().Количество() = 1 Тогда НовоеЗР.Тип = ОписаниеРеквизита.Тип.Типы()[0]; КонецЕсли; - КонецЕсли; - ИначеЕсли (УровеньЧтения = 3) И (ЧтениеXML.Имя = "Row") Тогда // Указатель на поле табличной части. Если ТабличныеЧасти[ИмяТабличнойЧасти] = Неопределено Тогда ТабличныеЧасти.Вставить(ИмяТабличнойЧасти, Новый ТаблицаЗначений); @@ -1597,10 +1617,8 @@ ТабличныеЧасти[ИмяТабличнойЧасти].Добавить(); ИначеЕсли УровеньЧтения = 4 Тогда // Указатель на поле табличной части. - ТипЗначенияПоляТЧ = ""; - - ИмяПоляТЧ = ЧтениеXML.Имя; // + ИмяПоляТЧ = ЧтениеXML.Имя; Таблица = ТабличныеЧасти[ИмяТабличнойЧасти]; Если Таблица.Колонки.Найти(ИмяПоляТЧ)= Неопределено Тогда Таблица.Колонки.Добавить(ИмяПоляТЧ); @@ -1609,19 +1627,16 @@ Если ЧтениеXML.КоличествоАтрибутов() > 0 Тогда Пока ЧтениеXML.ПрочитатьАтрибут() Цикл Если ЧтениеXML.ТипУзла = ТипУзлаXML.Атрибут - И ЧтениеXML.Имя = "xsi:type" Тогда - XMLТип = ЧтениеXML.Значение; - - Если Лев(XMLТип, 3) = "xs:" Тогда - ТипЗначенияПоляТЧ = ИзXMLТипа(Новый ТипДанныхXML(Прав(XMLТип, СтрДлина(XMLТип)-3), "http://www.w3.org/2001/XMLSchema")); - Иначе - ТипЗначенияПоляТЧ = ИзXMLТипа(Новый ТипДанныхXML(XMLТип, "")); - КонецЕсли; - + И ЧтениеXML.Имя = "xsi:type" Тогда + XMLТип = ЧтениеXML.Значение; + Если СтрНачинаетсяС(XMLТип, "xs:") Тогда + ТипЗначенияПоляТЧ = ИзXMLТипа(Новый ТипДанныхXML(Прав(XMLТип, СтрДлина(XMLТип)-3), "http://www.w3.org/2001/XMLSchema")); + Иначе + ТипЗначенияПоляТЧ = ИзXMLТипа(Новый ТипДанныхXML(XMLТип, "")); + КонецЕсли; КонецЕсли; КонецЦикла; КонецЕсли; - КонецЕсли; ИначеЕсли ЧтениеXML.ТипУзла = ТипУзлаXML.КонецЭлемента Тогда УровеньЧтения = УровеньЧтения - 1; @@ -1640,16 +1655,14 @@ ОписаниеРТЧ = Неопределено; Если ТабличныеЧастиМТД.Найти(ИмяТабличнойЧасти) <> Неопределено Тогда ОписаниеРТЧ = ТабличныеЧастиМТД[ИмяТабличнойЧасти].Реквизиты.Найти(ИмяПоляТЧ); - Если ОписаниеРТЧ <> Неопределено - И ОписаниеРТЧ.Тип.Типы().Количество() = 1 Тогда - ТипЗначенияПоляТЧ = ОписаниеРТЧ.Тип.Типы()[0]; + И ОписаниеРТЧ.Тип.Типы().Количество() = 1 Тогда + ТипЗначенияПоляТЧ = ОписаниеРТЧ.Тип.Типы()[0]; КонецЕсли; - КонецЕсли; + КонецЕсли; КонецЕсли; ПоследняяСтрока[ИмяПоляТЧ] = ?(ЗначениеЗаполнено(ТипЗначенияПоляТЧ), XMLЗначение(ТипЗначенияПоляТЧ, ЧтениеXML.Значение), ЧтениеXML.Значение); - КонецЕсли; КонецЕсли; КонецЦикла; @@ -1733,6 +1746,7 @@ ЧислоВыведенныхСтрок = ВывестиРеквизитыПоРазобранномуОбъекту(ТабличныйДокумент, ОписаниеОбъекта, СсылкаНаОбъект); ЧислоВыведенныхСтрок = ВывестиТабличныеЧастиПоРазобранномуОбъекту(ТабличныйДокумент, ОписаниеОбъекта, ЧислоВыведенныхСтрок + 7, СсылкаНаОбъект); + ВывестиТабличныеДокументыПоРазобранномуОбъекту(ТабличныйДокумент, ОписаниеОбъекта); Иначе СформироватьПоСтандартномуМакету(ТабличныйДокумент, Макет, ОписаниеОбъекта, ОписаниеОбъекта.Описание, СсылкаНаОбъект); КонецЕсли; @@ -1777,18 +1791,39 @@ ТЧОтчета.Вывести(Шапка); Для Каждого МетаданныеТЧ Из МетаданныеОбъекта.ТабличныеЧасти Цикл - Если ВерсияОбъекта[МетаданныеТЧ.Имя].Количество() > 0 Тогда + Если ВерсияОбъекта.ТабличныеЧасти[МетаданныеТЧ.Имя].Количество() > 0 Тогда Область = Макет.ПолучитьОбласть(МетаданныеТЧ.Имя+"Шапка"); ТЧОтчета.Вывести(Область); ОбластьДеталиПриходаТовара = Макет.ПолучитьОбласть(МетаданныеТЧ.Имя); - Для Каждого ТекСтрокаДеталиПриходаТовара Из ВерсияОбъекта[МетаданныеТЧ.Имя] Цикл + Для Каждого ТекСтрокаДеталиПриходаТовара Из ВерсияОбъекта.ТабличныеЧасти[МетаданныеТЧ.Имя] Цикл ОбластьДеталиПриходаТовара.Параметры.Заполнить(ТекСтрокаДеталиПриходаТовара); ТЧОтчета.Вывести(ОбластьДеталиПриходаТовара); КонецЦикла; КонецЕсли; КонецЦикла; + Если ВерсияОбъекта.Свойство("ТабличныеДокументы") Тогда + ТабличныеДокументы = ВерсияОбъекта.ТабличныеДокументы; + Если ТабличныеДокументы <> Неопределено Тогда + Если Макет.Области.Найти("ШапкаТабличныхДокументов") <> Неопределено Тогда + ШапкаТабличныхДокументов = Макет.ПолучитьОбласть("ШапкаТабличныхДокументов"); + ТЧОтчета.Вывести(ШапкаТабличныхДокументов); + ШапкаТабличногоДокумента = ?(Макет.Области.Найти("ШапкаТабличногоДокумента") = Неопределено, + Неопределено, Макет.ПолучитьОбласть("ШапкаТабличногоДокумента")); + + Для Каждого ЭлементСтруктуры Из ТабличныеДокументы Цикл + Если ШапкаТабличногоДокумента <> Неопределено Тогда + НаименованиеТабличногоДокумента = Новый Структура("НаименованиеТабличногоДокумента", ЭлементСтруктуры.Значение.Наименование); + ШапкаТабличногоДокумента.Параметры.Заполнить(НаименованиеТабличногоДокумента); + ТЧОтчета.Вывести(ШапкаТабличногоДокумента); + КонецЕсли; + ТЧОтчета.Вывести(ЭлементСтруктуры.Значение.Данные); + КонецЦикла; + КонецЕсли; + КонецЕсли; + КонецЕсли; + ТЧОтчета.ОтображатьСетку = Ложь; ТЧОтчета.Защита = Истина; ТЧОтчета.ТолькоПросмотр = Истина; @@ -1804,9 +1839,9 @@ ТЧОтчета.Область("C"+Строка(НомерКолонки)).ШиринаКолонки = 50; - Регион = "R" + Строка(НомерСтроки) + "C"+Строка(НомерКолонки); + Регион = "R" + Формат(НомерСтроки, "ЧГ=0") + "C" + Формат(НомерКолонки, "ЧГ=0"); ТЧОтчета.Область(Регион).Текст = Текст; - ТЧОтчета.Область(Регион).ЦветФона = ЦветаСтиля.НедоступныеДанныеЦвет; + ТЧОтчета.Область(Регион).ЦветФона = ЦветаСтиля.ТекстЗапрещеннойЯчейкиЦвет; ТЧОтчета.Область(Регион).Шрифт = Новый Шрифт(, 8, Истина, , , ); ТЧОтчета.Область(Регион).ГраницаСверху = Новый Линия(ТипЛинииЯчейкиТабличногоДокумента.Сплошная); ТЧОтчета.Область(Регион).ГраницаСнизу = Новый Линия(ТипЛинииЯчейкиТабличногоДокумента.Сплошная); @@ -1830,33 +1865,21 @@ ЧислоВыводимыхСтрок = 0; Для Каждого ЭлементРеквизит Из ВерсияОбъекта.Реквизиты Цикл - - НаименованиеРеквизита = ПолучитьПредставлениеРеквизитаНаЯзыке(ЭлементРеквизит.НаименованиеРеквизита); - - ОписаниеРеквизита = СсылкаНаОбъект.Метаданные().Реквизиты.Найти(НаименованиеРеквизита); - - Если ОписаниеРеквизита = Неопределено Тогда - Для Каждого ОписаниеСтандартногоРеквизита Из СсылкаНаОбъект.Метаданные().СтандартныеРеквизиты Цикл - Если ОписаниеСтандартногоРеквизита.Имя = НаименованиеРеквизита Тогда - ОписаниеРеквизита = ОписаниеСтандартногоРеквизита; - Прервать; - КонецЕсли; - КонецЦикла; + СтруктураОписанияНаименования = НаименованиеВыводимогоРеквизита(СсылкаНаОбъект, ЭлементРеквизит.НаименованиеРеквизита); + Если Не СтруктураОписанияНаименования.ВыводитьРеквизит Тогда + Продолжить; КонецЕсли; + ВыводимоеНаименование = СтруктураОписанияНаименования.ВыводимоеНаименование; + ОписаниеРеквизита = СтруктураОписанияНаименования.ОписаниеРеквизита; + ЗначениеРеквизита = ?(ЭлементРеквизит.ЗначениеРеквизита = Неопределено, "", ЭлементРеквизит.ЗначениеРеквизита); - - ВыводимоеНаименование = НаименованиеРеквизита; - Если ОписаниеРеквизита <> Неопределено Тогда - ВыводимоеНаименование = ОписаниеРеквизита.Представление(); - КонецЕсли; - ПредставлениеЗначения = ПредставлениеЗначенияРеквизита(ЗначениеРеквизита, ОписаниеРеквизита); УстановитьСвойстваТекста(Секция.Область("R1C2"), ВыводимоеНаименование, , Истина); УстановитьСвойстваТекста(Секция.Область("R1C3"), ПредставлениеЗначения); Секция.Область("R1C2:R1C3").ГраницаСнизу = Новый Линия(ТипЛинииЯчейкиТабличногоДокумента.Сплошная, 1, 0); - Секция.Область("R1C2:R1C3").ЦветРамки = ЦветаСтиля.НедоступныеДанныеЦвет; + Секция.Область("R1C2:R1C3").ЦветРамки = ЦветаСтиля.ТекстЗапрещеннойЯчейкиЦвет; ТЧОтчета.Вывести(Секция); @@ -1892,8 +1915,8 @@ Секция = ТЧОтчета.ПолучитьОбласть("R" + Строка(НомерСтрокиВывода)); ВывестиТекстВОтчет(ТЧОтчета, Секция, "R1C1:R1C100", " "); ОбластьВывода = ВывестиТекстВОтчет(ТЧОтчета, Секция, "R1C2", СинонимТЧ, 11, Истина); - ТЧОтчета.Область("R" + ОбластьВывода.Верх + "C2").СоздатьФорматСтрок(); - ТЧОтчета.Область("R" + ОбластьВывода.Верх + "C2").ШиринаКолонки = Окр(СтрДлина(СинонимТЧ)*2, 0, РежимОкругления.Окр15как20); + ТЧОтчета.Область("R" + Формат(ОбластьВывода.Верх, "ЧГ=0") + "C2").СоздатьФорматСтрок(); + ТЧОтчета.Область("R" + Формат(ОбластьВывода.Верх, "ЧГ=0") + "C2").ШиринаКолонки = Окр(СтрДлина(СинонимТЧ)*2, 0, РежимОкругления.Окр15как20); ТЧОтчета.НачатьГруппуСтрок("ГруппаСтрок"); ВывестиТекстВОтчет(ТЧОтчета, Секция, "R1C1:R1C3", " "); @@ -1913,12 +1936,12 @@ Секция = Новый ТабличныйДокумент; ОбластьСекции = Секция.Область("R1C1"); УстановитьСвойстваТекста(ОбластьСекции, "N", , Истина, Истина); - ОбластьСекции.ЦветФона = ЦветаСтиля.НедоступныеДанныеЦвет; + ОбластьСекции.ЦветФона = ЦветаСтиля.ТекстЗапрещеннойЯчейкиЦвет; НомерСтроки = 1; Для Каждого СтрокаТабличнойЧасти Из ТабличнаяЧасть Цикл НомерСтроки = НомерСтроки + 1; - УстановитьСвойстваТекста(Секция.Область("R" + НомерСтроки + "C1"), Строка(НомерСтроки-1), , Ложь, Истина); + УстановитьСвойстваТекста(Секция.Область("R" + Формат(НомерСтроки, "ЧГ=0") + "C1"), Формат(НомерСтроки-1, "ЧГ=0"), , Ложь, Истина); КонецЦикла; ДобавляемаяТЧ.Присоединить(Секция); @@ -1938,7 +1961,7 @@ Иначе ВыводимоеНаименованиеПоля = ОписаниеПоля.Синоним; КонецЕсли; - ЦветЗаголовкаКолонки = ?(ОписаниеПоля = Неопределено, ЦветаСтиля.ЗаголовокУдаленногоРеквизитаФон, ЦветаСтиля.НедоступныеДанныеЦвет); + ЦветЗаголовкаКолонки = ?(ОписаниеПоля = Неопределено, ЦветаСтиля.ЗаголовокУдаленногоРеквизитаФон, ЦветаСтиля.ТекстЗапрещеннойЯчейкиЦвет); СекцияОбласти = Секция.Область("R1C1"); УстановитьСвойстваТекста(СекцияОбласти, ВыводимоеНаименованиеПоля, , Истина, Истина); СекцияОбласти.ЦветФона = ЦветЗаголовкаКолонки; @@ -1949,26 +1972,26 @@ Значение = ?(СтрокаТабличнойЧасти[НаименованиеПоля] = Неопределено, "", СтрокаТабличнойЧасти[НаименованиеПоля]); ПредставлениеЗначения = ПредставлениеЗначенияРеквизита(Значение, ОписаниеПоля); - УстановитьСвойстваТекста(Секция.Область("R" + НомерСтроки + "C1"), ПредставлениеЗначения, , , Истина); + УстановитьСвойстваТекста(Секция.Область("R" + Формат(НомерСтроки, "ЧГ=0") + "C1"), ПредставлениеЗначения, , , Истина); Если СтрДлина(ПредставлениеЗначения) > (СоответствиеРазмерностиКолонок[НомерКолонки] - 4) Тогда СоответствиеРазмерностиКолонок[НомерКолонки] = СтрДлина(ПредставлениеЗначения) + 4; КонецЕсли; - КонецЦикла; // Для Каждого СтрокаТабличнойЧасти Из ТабличнаяЧасть Цикл + КонецЦикла; ДобавляемаяТЧ.Присоединить(Секция); НомерКолонки = НомерКолонки + 1; - КонецЦикла; // Для Каждого КолонкаТабличнойЧасти Из ТабличнаяЧасть.Колонки Цикл + КонецЦикла; ОбластьВывода = ТЧОтчета.Вывести(ДобавляемаяТЧ); - ТЧОтчета.Область("R"+ОбластьВывода.Верх+"C1:R"+ОбластьВывода.Низ+"C"+НомерКолонки).СоздатьФорматСтрок(); - ТЧОтчета.Область("R"+ОбластьВывода.Верх+"C2").ШиринаКолонки = 7; + ТЧОтчета.Область(ОбластьВывода.Верх, 1, ОбластьВывода.Низ, НомерКолонки).СоздатьФорматСтрок(); + ТЧОтчета.Область("R" + Формат(ОбластьВывода.Верх, "ЧГ=0") + "C2").ШиринаКолонки = 7; Для ТекущийНомерКолонки = 3 По НомерКолонки-1 Цикл - ТЧОтчета.Область("R"+ОбластьВывода.Верх+"C"+ТекущийНомерКолонки).ШиринаКолонки = СоответствиеРазмерностиКолонок[ТекущийНомерКолонки]; + ТЧОтчета.Область("R" + Формат(ОбластьВывода.Верх, "ЧГ=0") + "C" + Формат(ТекущийНомерКолонки, "ЧГ=0")).ШиринаКолонки = СоответствиеРазмерностиКолонок[ТекущийНомерКолонки]; КонецЦикла; ТЧОтчета.ЗакончитьГруппуСтрок(); - КонецЕсли; // Если ТабличнаяЧасть.Количество() > 0 Тогда - КонецЦикла; // Для Каждого СтрокаТабличнаяЧасть Из ВерсияОбъекта.ТабличныеЧасти Цикл + КонецЕсли; + КонецЦикла; КонецЕсли; @@ -2084,11 +2107,113 @@ Результат.Вставить("АвторИзменения", СокрЛП(Строка(СведенияОВерсии.АвторВерсии))); Результат.Вставить("ДатаИзменения", СведенияОВерсии.ДатаВерсии); Результат.Вставить("Комментарий", СведенияОВерсии.Комментарий); + Результат.Вставить("ТабличныеДокументы", СведенияОВерсии.ТабличныеДокументы); + ВерсионированиеОбъектовПереопределяемый.ПослеРазбораВерсииОбъекта(Ссылка, Результат); Возврат Результат; КонецФункции +// Выводит табличные документы по разобранному объекту, при выводе единственного объекта. +Процедура ВывестиТабличныеДокументыПоРазобранномуОбъекту(ТабличныйДокумент, ОписаниеОбъекта) + + ТабличныеДокументы = ОписаниеОбъекта.ТабличныеДокументы; + + Если ТабличныеДокументы = Неопределено Тогда + Возврат; + КонецЕсли; + + ОбщийШаблон = РегистрыСведений.ВерсииОбъектов.ПолучитьМакет("СтандартныйМакетПредставленияОбъекта"); + + ШаблонЗаголовокТабличныеДокументы = ОбщийШаблон.ПолучитьОбласть("ШапкаТабличныхДокументов"); + ШаблонСтрокаТабличныеДокументы = ОбщийШаблон.ПолучитьОбласть("ШапкаТабличногоДокумента"); + ШаблонПустаяСтрока = ОбщийШаблон.ПолучитьОбласть("СвободнаяСтрока"); + + ТабличныйДокумент.Вывести(ШаблонПустаяСтрока); + ТабличныйДокумент.Вывести(ШаблонЗаголовокТабличныеДокументы); + ТабличныйДокумент.Вывести(ШаблонПустаяСтрока); + ТабличныйДокумент.НачатьГруппуСтрок("ГруппаТабличныхДокументов"); + + Для Каждого ЭлементСтруктуры Из ТабличныеДокументы Цикл + НаименованиеТабличногоДокумента = ЭлементСтруктуры.Значение.Наименование; + ШаблонСтрокаТабличныеДокументы.Параметры.НаименованиеТабличногоДокумента = НаименованиеТабличногоДокумента; + ТабличныйДокумент.Вывести(ШаблонСтрокаТабличныеДокументы); + ТабличныйДокумент.Вывести(ШаблонПустаяСтрока); + + ВыводимыйДокумент = ЭлементСтруктуры.Значение.Данные; + ОбластьВыводаТабличногоДокумента = ТабличныйДокумент.Вывести(ВыводимыйДокумент); + ОбластьВыводаТабличногоДокумента.СоздатьФорматСтрок(); + + Для НомерКолонки = 1 По ВыводимыйДокумент.ШиринаТаблицы Цикл + ШиринаКолонки = ВыводимыйДокумент.Область(1, НомерКолонки, ВыводимыйДокумент.ВысотаТаблицы, НомерКолонки).ШиринаКолонки; + ТабличныйДокумент.Область(ОбластьВыводаТабличногоДокумента.Верх, НомерКолонки, + ОбластьВыводаТабличногоДокумента.Низ, НомерКолонки).ШиринаКолонки = ШиринаКолонки; + КонецЦикла; + + ТабличныйДокумент.Вывести(ШаблонПустаяСтрока); + КонецЦикла; + + ТабличныйДокумент.ЗакончитьГруппуСтрок(); + ТабличныйДокумент.Вывести(ШаблонПустаяСтрока); + +КонецПроцедуры + +Функция НаименованиеВыводимогоРеквизита(СсылкаНаОбъект, Знач ИмяРеквизита) Экспорт + + ВыводитьРеквизит = Истина; + + ИмяРеквизита = ПолучитьПредставлениеРеквизитаНаЯзыке(ИмяРеквизита); + ОписаниеРеквизита = СсылкаНаОбъект.Метаданные().Реквизиты.Найти(ИмяРеквизита); + + Если ОписаниеРеквизита = Неопределено Тогда + Для Каждого ОписаниеСтандартногоРеквизита Из СсылкаНаОбъект.Метаданные().СтандартныеРеквизиты Цикл + Если ОписаниеСтандартногоРеквизита.Имя = ИмяРеквизита Тогда + ОписаниеРеквизита = ОписаниеСтандартногоРеквизита; + Прервать; + КонецЕсли; + КонецЦикла; + КонецЕсли; + + Если ОписаниеРеквизита = Неопределено Тогда + ОписаниеРеквизита = Метаданные.ОбщиеРеквизиты.Найти(ИмяРеквизита); + КонецЕсли; + + ПредставлениеРеквизита = ИмяРеквизита; + Если ОписаниеРеквизита <> Неопределено Тогда + ПредставлениеРеквизита = ОписаниеРеквизита.Представление(); + КонецЕсли; + + ВерсионированиеОбъектовПереопределяемый.ПриОпределенииНаименованияРеквизитаОбъекта(СсылкаНаОбъект, + ИмяРеквизита, ПредставлениеРеквизита, ВыводитьРеквизит); + + Возврат Новый Структура("ВыводимоеНаименование, ВыводитьРеквизит, ОписаниеРеквизита", + ПредставлениеРеквизита, ВыводитьРеквизит, ОписаниеРеквизита); + +КонецФункции + +Функция ДанныеДляХранения(СсылкаНаОбъект) + + ДанныеОбъекта = СериализоватьОбъект(СсылкаНаОбъект.ПолучитьОбъект()); + ТабличныеДокументы = ТабличныеДокументыОбъекта(СсылкаНаОбъект); + + Если ТабличныеДокументы = Неопределено Или ТабличныеДокументы.Количество() = 0 Тогда + Результат = ДанныеОбъекта; // ДвоичныеДанные + Иначе + Результат = Новый Структура; + Результат.Вставить("Объект", ДанныеОбъекта); + Результат.Вставить("ТабличныеДокументы", ТабличныеДокументы); + КонецЕсли; + + Возврат Результат; + +КонецФункции + +Функция ТабличныеДокументыОбъекта(Ссылка) + Результат = Новый Структура; + ВерсионированиеОбъектовПереопределяемый.ПриПолученииТабличныхДокументовОбъекта(Ссылка, Результат); + Возврат Результат; +КонецФункции + //////////////////////////////////////////////////////////////////////////////// // Обработчики служебных событий подсистем БСП. diff --git a/SSL/src/CommonModules/ВерсионированиеОбъектовПереопределяемый/Module.bsl b/SSL/src/CommonModules/ВерсионированиеОбъектовПереопределяемый/Module.bsl new file mode 100644 index 000000000..93cc2925f --- /dev/null +++ b/SSL/src/CommonModules/ВерсионированиеОбъектовПереопределяемый/Module.bsl @@ -0,0 +1,58 @@ +//////////////////////////////////////////////////////////////////////////////// +// Подсистема "Версионирование объектов". +// +//////////////////////////////////////////////////////////////////////////////// + +#Область ПрограммныйИнтерфейс + +// Вызывается для получения версионируемых табличных документов во время записи версии объекта. +// +// Параметры: +// Ссылка - Ссылка на версионируемый объект конфигурации. +// ТабличныеДокументы - Структура - содержит данные: +// * Ключ - Строка - Имя табличного документа; +// * Значение - Структура - содержит поля: +// * Наименование - Строка - Наименование табличного документа; +// * Данные - ТабличныйДокумент - версионируемый табличный документ. +// +// Возвращаемое значение: +// +Процедура ПриПолученииТабличныхДокументовОбъекта(Ссылка, ТабличныеДокументы) Экспорт + +КонецПроцедуры + +// Вызывается после разбора прочитанной из регистра версии объекта, +// может использоваться для дополнительной обработки результата разбора версии. +// +// Параметры: +// Ссылка - Ссылка на версионируемый объект конфигурации. +// Результат - Структура - Результат разбора версии подсистемой версионирования. +// +Процедура ПослеРазбораВерсииОбъекта(Ссылка, Результат) Экспорт + +КонецПроцедуры + +// Вызывается после определения реквизитов объекта из формы +// РегистрСведений.ВерсииОбъектов.ВыборРеквизитовОбъекта. +// +// Параметры: +// Ссылка - Ссылка на версионируемый объект конфигурации. +// ДеревоРеквизитов - ДанныеФормыДерево - Дерево реквизитов объектов. +// +Процедура ПриВыбореРеквизитовОбъекта(Ссылка, ДеревоРеквизитов) Экспорт + +КонецПроцедуры + +// Вызывается при получении представления реквизита объекта. +// +// Параметры: +// Ссылка - Ссылка на версионируемый объект конфигурации. +// ИмяРеквизита - Строка - ИмяРеквизита как задано в конфигураторе. +// НаименованиеРеквизита - Строка - выходной параметр, можно переопределить полученный синоним. +// Видимость - Булево - выводить реквизит в отчетах по версиям. +// +Процедура ПриОпределенииНаименованияРеквизитаОбъекта(Ссылка, ИмяРеквизита, НаименованиеРеквизита, Видимость) Экспорт + +КонецПроцедуры + +#КонецОбласти \ No newline at end of file diff --git a/SSL/src/CommonModules/ВерсионированиеОбъектовПереопределяемый/ВерсионированиеОбъектовПереопределяемый.mdo b/SSL/src/CommonModules/ВерсионированиеОбъектовПереопределяемый/ВерсионированиеОбъектовПереопределяемый.mdo new file mode 100644 index 000000000..6e8551c63 --- /dev/null +++ b/SSL/src/CommonModules/ВерсионированиеОбъектовПереопределяемый/ВерсионированиеОбъектовПереопределяемый.mdo @@ -0,0 +1,11 @@ +<?xml version="1.0" encoding="UTF-8"?> +<mdclass:CommonModule xmlns:mdclass="http://g5.1c.ru/v8/dt/metadata/mdclass" uuid="9ff1c73e-71be-4ea6-97fb-e710d995ee62"> + <name>ВерсионированиеОбъектовПереопределяемый</name> + <synonym> + <key>ru</key> + <value>Версионирование объектов переопределяемый</value> + </synonym> + <server>true</server> + <externalConnection>true</externalConnection> + <clientOrdinaryApplication>true</clientOrdinaryApplication> +</mdclass:CommonModule> diff --git a/SSL/src/CommonModules/ВерсионированиеОбъектовСобытия/Module.bsl b/SSL/src/CommonModules/ВерсионированиеОбъектовСобытия/Module.bsl index 778582f0e..8c003cd8e 100644 --- a/SSL/src/CommonModules/ВерсионированиеОбъектовСобытия/Module.bsl +++ b/SSL/src/CommonModules/ВерсионированиеОбъектовСобытия/Module.bsl @@ -31,7 +31,7 @@ #КонецОбласти -#Область СлужебныеПроцедурыИФункции +#Область СлужебныйПрограммныйИнтерфейс //////////////////////////////////////////////////////////////////////////////// // Обработчики условных вызовов в эту подсистему. @@ -53,6 +53,18 @@ КонецПроцедуры +// См. описание одноименной процедуры в общем модуле РегламентныеЗаданияПереопределяемый. +// +Процедура ПриОпределенииЗависимостейРегламентныхЗаданий(Зависимости) Экспорт + Зависимость = Зависимости.Добавить(); + Зависимость.РегламентноеЗадание = Метаданные.РегламентныеЗадания.ОчисткаУстаревшихВерсийОбъектов; + Зависимость.ФункциональнаяОпция = Метаданные.ФункциональныеОпции.ИспользоватьВерсионированиеОбъектов; +КонецПроцедуры + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + //////////////////////////////////////////////////////////////////////////////// // Обработчики подписок на события. diff --git a/SSL/src/CommonModules/Взаимодействия/Module.bsl b/SSL/src/CommonModules/Взаимодействия/Module.bsl index 9d606654b..e951d9e3f 100644 --- a/SSL/src/CommonModules/Взаимодействия/Module.bsl +++ b/SSL/src/CommonModules/Взаимодействия/Module.bsl @@ -101,17 +101,10 @@ УстановитьПредмет(Элемент, Предмет); Исключение ПредставлениеОшибки = КраткоеПредставлениеОшибки(ИнформацияОбОшибке()); - ОбщегоНазначенияКлиентСервер.СообщитьПользователю( - СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Ошибка при замене предмета у %1: %2'"), - Элемент, - ПредставлениеОшибки), - , - , - , - Отказ); + ОбщегоНазначенияКлиентСервер.СообщитьПользователю(СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Ошибка при замене предмета у %1: %2'"), Элемент, ПредставлениеОшибки), , , , Отказ); Отказ = Истина; Возврат; - КонецПопытки; КонецЦикла; @@ -131,9 +124,9 @@ Форма.ОбъектОснование = Параметры.Основание; КонецЕсли; - ИначеЕсли ТипЗнч(Параметры.Основание) = Тип("Структура") И - Параметры.Основание.Свойство("Объект") И - ВзаимодействияКлиентСервер.ЯвляетсяВзаимодействием(Параметры.Основание.Объект) Тогда + ИначеЕсли ТипЗнч(Параметры.Основание) = Тип("Структура") + И Параметры.Основание.Свойство("Объект") + И ВзаимодействияКлиентСервер.ЯвляетсяВзаимодействием(Параметры.Основание.Объект) Тогда Форма.НеобходимоОповещение = Истина; Если ИспользоватьВзаимодействиеОснование Тогда @@ -142,9 +135,9 @@ Форма.ОбъектОснование = Параметры.Основание.Объект; КонецЕсли; - ИначеЕсли ТипЗнч(Параметры.Основание) = Тип("Структура") И - (Параметры.Основание.Свойство("Основание") И - ВзаимодействияКлиентСервер.ЯвляетсяВзаимодействием(Параметры.Основание.Основание)) Тогда + ИначеЕсли ТипЗнч(Параметры.Основание) = Тип("Структура") + И (Параметры.Основание.Свойство("Основание") + И ВзаимодействияКлиентСервер.ЯвляетсяВзаимодействием(Параметры.Основание.Основание)) Тогда Форма.НеобходимоОповещение = Истина; Если ИспользоватьВзаимодействиеОснование Тогда @@ -183,7 +176,7 @@ "Взаимодействия"); КонецЕсли; - СерверныеОбработчики["СтандартныеПодсистемы.БазоваяФункциональность\ПриДобавленииПараметровРаботыКлиентскойЛогикиСтандартныхПодсистем"].Добавить( + СерверныеОбработчики["СтандартныеПодсистемы.БазоваяФункциональность\ПриДобавленииПараметровРаботыКлиента"].Добавить( "Взаимодействия"); Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ТекущиеДела") Тогда @@ -199,19 +192,6 @@ КонецПроцедуры -// Заполняет структуру параметров, необходимых для работы клиентского кода -// конфигурации. -// -// Параметры: -// Параметры - Структура - структура параметров. -// -Процедура ДобавитьПараметрыРаботыКлиента(Параметры) Экспорт - - Параметры.Вставить("ИспользоватьПочтовыйКлиент", ПолучитьФункциональнуюОпцию("ИспользоватьПочтовыйКлиент")); - Параметры.Вставить("ИспользоватьПрочиеВзаимодействия", ПолучитьФункциональнуюОпцию("ИспользоватьПрочиеВзаимодействия")); - -КонецПроцедуры - // Вызывается после удаления помеченных объектов. // // Параметры: @@ -290,6 +270,28 @@ Объекты.Вставить(Метаданные.Справочники.ЭлектронноеПисьмоИсходящееПрисоединенныеФайлы.ПолноеИмя(), "РеквизитыРедактируемыеВГрупповойОбработке"); КонецПроцедуры +//////////////////////////////////////////////////////////////////////////////// +// Обработчики условных вызовов в эту подсистему. + +// См. описание одноименной процедуры в общем модуле РегламентныеЗаданияПереопределяемый. +// +Процедура ПриОпределенииЗависимостейРегламентныхЗаданий(Зависимости) Экспорт + Зависимость = Зависимости.Добавить(); + Зависимость.РегламентноеЗадание = Метаданные.РегламентныеЗадания.ОбновлениеСтатусовДоставкиSMS; + Зависимость.ФункциональнаяОпция = Метаданные.ФункциональныеОпции.ИспользоватьПочтовыйКлиент; + Зависимость.ДоступноВМоделиСервиса = Ложь; + + Зависимость = Зависимости.Добавить(); + Зависимость.РегламентноеЗадание = Метаданные.РегламентныеЗадания.ОтправкаSMS; + Зависимость.ФункциональнаяОпция = Метаданные.ФункциональныеОпции.ИспользоватьПочтовыйКлиент; + Зависимость.ДоступноВМоделиСервиса = Ложь; + + Зависимость = Зависимости.Добавить(); + Зависимость.РегламентноеЗадание = Метаданные.РегламентныеЗадания.ПолучениеИОтправкаЭлектронныхПисем; + Зависимость.ФункциональнаяОпция = Метаданные.ФункциональныеОпции.ИспользоватьПочтовыйКлиент; + Зависимость.ДоступноВМоделиСервиса = Ложь; +КонецПроцедуры + #КонецОбласти #Область СлужебныеПроцедурыИФункции @@ -340,8 +342,7 @@ Если МодульУправлениеДоступомСлужебный.ВидДоступаСуществует("УчетныеЗаписиЭлектроннойПочты") Тогда - Описание = Описание + - " + Описание = Описание + " |Справочник.ПапкиЭлектронныхПисем.Чтение.УчетныеЗаписиЭлектроннойПочты |Справочник.ПапкиЭлектронныхПисем.Изменение.УчетныеЗаписиЭлектроннойПочты |Справочник.ПравилаОбработкиЭлектроннойПочты.Чтение.УчетныеЗаписиЭлектроннойПочты @@ -350,8 +351,7 @@ КонецЕсли; - Описание = Описание + - " + Описание = Описание + " |Документ.Встреча.Чтение.Объект.Документ.Встреча |Документ.Встреча.Изменение.Объект.Документ.Встреча |Документ.ЗапланированноеВзаимодействие.Чтение.Объект.Документ.ЗапланированноеВзаимодействие @@ -380,8 +380,7 @@ |"; Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ПрисоединенныеФайлы") Тогда - Описание = Описание + - " + Описание = Описание + " |Справочник.ВстречаПрисоединенныеФайлы.Чтение.Объект.Документ.Встреча |Справочник.ВстречаПрисоединенныеФайлы.Изменение.Объект.Документ.Встреча |Справочник.ЗапланированноеВзаимодействиеПрисоединенныеФайлы.Чтение.Объект.Документ.ЗапланированноеВзаимодействие @@ -395,6 +394,7 @@ |Справочник.ЭлектронноеПисьмоИсходящееПрисоединенныеФайлы.Чтение.Объект.Документ.ЭлектронноеПисьмоИсходящее |Справочник.ЭлектронноеПисьмоИсходящееПрисоединенныеФайлы.Изменение.Объект.Документ.ЭлектронноеПисьмоИсходящее |"; + КонецЕсли; КонецПроцедуры @@ -405,9 +405,14 @@ // Параметры: // Параметры - Структура - структура параметров. // -Процедура ПриДобавленииПараметровРаботыКлиентскойЛогикиСтандартныхПодсистем(Параметры) Экспорт +Процедура ПриДобавленииПараметровРаботыКлиента(Параметры) Экспорт - ДобавитьПараметрыРаботыКлиента(Параметры); + ИспользоватьПочтовыйКлиент = ПолучитьФункциональнуюОпцию("ИспользоватьПочтовыйКлиент"); + ЕстьПравоСозданиеИсходящихПисем = ПравоДоступа("Добавление", Метаданные.Документы.ЭлектронноеПисьмоИсходящее); + + Параметры.Вставить("ИспользоватьПочтовыйКлиент", ИспользоватьПочтовыйКлиент); + Параметры.Вставить("ИспользоватьПрочиеВзаимодействия", ПолучитьФункциональнуюОпцию("ИспользоватьПрочиеВзаимодействия")); + Параметры.Вставить("СозданиеИсходящихПисемДоступно", ИспользоватьПочтовыйКлиент И ЕстьПравоСозданиеИсходящихПисем); КонецПроцедуры @@ -474,13 +479,12 @@ // Процедура ПриЗаполненииСпискаТекущихДел(ТекущиеДела) Экспорт - МодульТекущиеДелаСлужебный = ОбщегоНазначения.ОбщийМодуль("ТекущиеДелаСлужебный"); + МодульТекущиеДелаСервер = ОбщегоНазначения.ОбщийМодуль("ТекущиеДелаСервер"); Если (Не Пользователи.ЭтоПолноправныйПользователь() И Не Пользователи.РолиДоступны("ДобавлениеИзменениеВзаимодействий")) - Или МодульТекущиеДелаСлужебный.ДелоОтключено("ВзаимодействияПочта") Тогда + Или МодульТекущиеДелаСервер.ДелоОтключено("ВзаимодействияПочта") Тогда Возврат; КонецЕсли; - МодульТекущиеДелаСервер = ОбщегоНазначения.ОбщийМодуль("ТекущиеДелаСервер"); НовыхПисемПоУчетнымЗаписям = НовыхПисемПоУчетнымЗаписям(); @@ -488,10 +492,6 @@ // не делается проверка существования подсистемы. Разделы = МодульТекущиеДелаСервер.РазделыДляОбъекта(Метаданные.ЖурналыДокументов.Взаимодействия.ПолноеИмя()); - Если Разделы = Неопределено Тогда - Возврат; - КонецЕсли; - Для Каждого Раздел Из Разделы Цикл ИдентификаторВзаимодействия = "Взаимодействия" + СтрЗаменить(Раздел.ПолноеИмя(), ".", ""); @@ -692,7 +692,7 @@ Функция ПолучитьДоменныйАдресДляПоиска(Адрес) Строка = Адрес; - Позиция = Найти(Строка, "@"); + Позиция = СтрНайти(Строка, "@"); Возврат ?(Позиция = 0, "", Сред(Строка, Позиция+1)); КонецФункции @@ -842,8 +842,8 @@ Иначе ТекстЗапроса = ПолучитьТекстЗапросаПоискКонтактовПоЦепочкеВзаимодействий(Истина); ИмяМетаданных = Предмет.Метаданные().ПолноеИмя(); - ТекстЗапроса = ТекстЗапроса + - ВзаимодействияПереопределяемый.ПолучитьТекстЗапросаПоискКонтактовПоПредмету(Ложь, ИмяМетаданных, Истина); + ТекстЗапроса = ТекстЗапроса + + ВзаимодействияПереопределяемый.ПолучитьТекстЗапросаПоискКонтактовПоПредмету(Ложь, ИмяМетаданных, Истина); КонецЕсли; ТекстЗапроса = ТекстЗапроса + ПолучитьТекстЗапросаНаПолучениеИнформацииОКонтактах(ВключатьEmail); @@ -856,8 +856,10 @@ ТаблицаКонтакты.Колонки.Добавить("ПредставлениеНаименования"); Для Каждого СтрокаТаблицы Из ТаблицаКонтакты Цикл - СтрокаТаблицы.ПредставлениеНаименования = СтрокаТаблицы.Наименование + - ?(ПустаяСтрока(СтрокаТаблицы.НаименованиеВладельца), "", " (" + СтрокаТаблицы.НаименованиеВладельца + ")"); + СтрокаТаблицы.ПредставлениеНаименования = СтрокаТаблицы.Наименование + + ?(ПустаяСтрока(СтрокаТаблицы.НаименованиеВладельца), + "", + " (" + СтрокаТаблицы.НаименованиеВладельца + ")"); КонецЦикла; Возврат ТаблицаКонтакты; @@ -898,9 +900,8 @@ ИмяПоля = ЭлементСписка.Представление; УсловиеНаСсылки = СтрЗаменить(ШаблонУсловияНаСсылки, "%ИмяПоля%", ИмяПоля); - ТекстЗапроса = ТекстЗапроса + (ТекстОбъединить + - - "ВЫБРАТЬ" + ТекстПроРазрешенные + " РАЗЛИЧНЫЕ + ТекстЗапроса = ТекстЗапроса + (ТекстОбъединить + + "ВЫБРАТЬ" + ТекстПроРазрешенные + " РАЗЛИЧНЫЕ | Таблица." + ИмяПоля + " |" + ТекстВременнаяТаблица + "ИЗ | Документ." + ИмяТаблицы + " КАК Таблица @@ -1130,7 +1131,7 @@ | ТаблицаКонтактнойИнформации.Ссылка, | ТаблицаКонтактнойИнформации.Представление, | " + ?(ЭлементМассиваОписания.ЕстьВладелец," ТаблицаКонтактнойИнформации.Ссылка.Владелец.Наименование","""""") + ", - | ТаблицаКонтактнойИнформации.Ссылка.Наименование + | ТаблицаКонтактнойИнформации.Ссылка." + ЭлементМассиваОписания.ИмяРеквизитаПредставлениеКонтакта + " КАК Наименование |ИЗ | Справочник." + ЭлементМассиваОписания.Имя + ".КонтактнаяИнформация КАК ТаблицаКонтактнойИнформации |ГДЕ @@ -1203,7 +1204,7 @@ |ВЫБРАТЬ | ТаблицаКонтактнойИнформации.Ссылка, | ПОДСТРОКА(ТаблицаКонтактнойИнформации.Представление, 1, 1000), - | ТаблицаКонтактнойИнформации.Ссылка.Наименование, + | ТаблицаКонтактнойИнформации.Ссылка." + ЭлементМассиваОписания.ИмяРеквизитаПредставлениеКонтакта + " КАК Наименование, | " + ?(ЭлементМассиваОписания.ЕстьВладелец," ТаблицаКонтактнойИнформации.Ссылка.Владелец.Наименование","""""") + " |ИЗ | Справочник." + ЭлементМассиваОписания.Имя + ".КонтактнаяИнформация КАК ТаблицаКонтактнойИнформации @@ -1273,7 +1274,7 @@ | |ВЫБРАТЬ | ТаблицаСправочника.Ссылка, - | ТаблицаСправочника.Наименование, + | ТаблицаСправочника." + ЭлементМассиваОписания.ИмяРеквизитаПредставлениеКонтакта + " КАК Наименование, | " + ?(ЭлементМассиваОписания.ЕстьВладелец," ТаблицаСправочника.Владелец.Наименование","""""") + ", | """" |ИЗ @@ -1338,7 +1339,7 @@ | |ВЫБРАТЬ | ТаблицаСправочника.Ссылка, - | ТаблицаСправочника.Наименование, + | ТаблицаСправочника." + ЭлементМассиваОписания.ИмяРеквизитаПредставлениеКонтакта + " КАК Наименование, | " + ?(ЭлементМассиваОписания.ЕстьВладелец," ТаблицаСправочника.Владелец.Наименование","""""") + ", | ТаблицаКонтактнаяИнформация.АдресЭП |ИЗ @@ -1465,7 +1466,7 @@ ТекстЗапроса = ТекстЗапроса + " | ТаблицаКонтактнаяИнформация.Ссылка КАК Контакт, - | ТаблицаКонтактнаяИнформация.Ссылка.Наименование КАК Наименование, + | ТаблицаКонтактнаяИнформация.Ссылка." + ЭлементМассиваОписания.ИмяРеквизитаПредставлениеКонтакта + " КАК Наименование, | ТаблицаКонтактнаяИнформация.АдресЭП КАК Представление, | " + ?(ЭлементМассиваОписания.ЕстьВладелец,"ТаблицаКонтактнаяИнформация.Ссылка.Владелец.Наименование ","""""") + ?(ПерваяТаблица," КАК НаименованиеВладельца ","") +" |ИЗ @@ -1555,8 +1556,10 @@ НоваяСтрока = Форма.НайденныеКонтакты.Добавить(); НоваяСтрока.Ссылка = Выборка.Контакт; НоваяСтрока.Представление = ?(ДляАдреснойКниги ,Выборка.Представление,СоответствиеОписаний.Получить(Выборка.Контакт)); - НоваяСтрока.НаименованиеКонтакта = Выборка.Наименование + - ?(ПустаяСтрока(Выборка.НаименованиеВладельца), "", " (" + Выборка.НаименованиеВладельца + ")"); + НоваяСтрока.НаименованиеКонтакта = Выборка.Наименование + + ?(ПустаяСтрока(Выборка.НаименованиеВладельца), + "", + " (" + Выборка.НаименованиеВладельца + ")"); КонецЦикла; Возврат ?(КоличествоНайденныхЭлементов < 101, "", НСтр("ru = 'Уточните параметры поиска. В списке отображены не все найденные контакты!'")); @@ -1595,7 +1598,7 @@ | |ВЫБРАТЬ | ТаблицаСправочника.Ссылка, - | ТаблицаСправочника.Наименование, + | ТаблицаСправочника." + ЭлементМассиваОписания.ИмяРеквизитаПредставлениеКонтакта + " КАК Наименование, | " + ?(ЭлементМассиваОписания.ЕстьВладелец," ТаблицаСправочника.Владелец.Наименование","""""") + ", | """" |ИЗ @@ -1650,7 +1653,7 @@ | |ВЫБРАТЬ | ТаблицаСправочника.Ссылка, - | ТаблицаСправочника.Наименование, + | ТаблицаСправочника." + ЭлементМассиваОписания.ИмяРеквизитаПредставлениеКонтакта + " КАК Наименование, | " + ?(ЭлементМассиваОписания.ЕстьВладелец," ТаблицаСправочника.Владелец.Наименование","""""") + ", | ТаблицаКонтактнаяИнформация.АдресЭП |ИЗ @@ -1918,8 +1921,8 @@ Предмет = ПолучитьЗначениеПредмета(Параметры.Основание); - ИначеЕсли ТипЗнч(Параметры.Основание) = Тип("Структура") И Параметры.Основание.Свойство("Основание") И - ВзаимодействияКлиентСервер.ЯвляетсяВзаимодействием(Параметры.Основание.Основание) Тогда + ИначеЕсли ТипЗнч(Параметры.Основание) = Тип("Структура") И Параметры.Основание.Свойство("Основание") + И ВзаимодействияКлиентСервер.ЯвляетсяВзаимодействием(Параметры.Основание.Основание) Тогда Предмет = ПолучитьЗначениеПредмета(Параметры.Основание.Основание); @@ -2036,9 +2039,7 @@ Если ТипКонтактнойИнформации = Перечисления.ТипыКонтактнойИнформации.Телефон Тогда МассивСтрокСТелефонами = Новый Массив; - МассивСтрок = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(Адрес, ";"); - - Для Каждого ЭлементМассива Из МассивСтрокСТелефонами Цикл + Для Каждого ЭлементМассива Из СтрРазделить(Адрес, ";", Ложь) Цикл СтруктураПолей = ВзаимодействияКлиентСервер.СтруктураПолейПоПредставлениюТелефона(ЭлементМассива); Если ВзаимодействияКлиентСервер.КорректноВведенНомерТелефона(СтруктураПолей) Тогда МассивСтрокСТелефонами.Добавить(ЭлементМассива); @@ -2046,7 +2047,7 @@ КонецЦикла; Если МассивСтрокСТелефонами.Количество() > 0 Тогда - Возврат СтроковыеФункцииКлиентСервер.СтрокаИзМассиваПодстрок(МассивСтрокСТелефонами, ";"); + Возврат СтрСоединить(МассивСтрокСТелефонами, ";"); КонецЕсли; Иначе @@ -2090,7 +2091,7 @@ КонецЕсли; // Для адреса электронной почты проверим, введен он или нет. - Если Найти(Адрес, "@") <> 0 Тогда + Если СтрНайти(Адрес, "@") <> 0 Тогда Возврат; КонецЕсли; @@ -2283,9 +2284,12 @@ // Функция ПолучитьПараметрыРаботыПользователяДляИсходящегоЭлектронногоПисьма(УчетнаяЗаписьЭлектроннойПочты,ФорматСообщения,ДляНового) Экспорт - СтруктураВозврата = - Новый Структура("Подпись, УведомитьОДоставке, УведомитьОПрочтении, ОтображатьТелоИсходногоПисьма, ВключатьТелоИсходногоПисьма", - Неопределено, Ложь, Ложь,Ложь, Ложь); + СтруктураВозврата = Новый Структура; + СтруктураВозврата.Вставить("Подпись", Неопределено); + СтруктураВозврата.Вставить("УведомитьОДоставке", Ложь); + СтруктураВозврата.Вставить("УведомитьОПрочтении", Ложь); + СтруктураВозврата.Вставить("ОтображатьТелоИсходногоПисьма", Ложь); + СтруктураВозврата.Вставить("ВключатьТелоИсходногоПисьма", Ложь); НастройкиРаботыСПочтой = ПолучитьНастройкуРаботаСПочтой(); ВключатьПодпись = Ложь; @@ -2486,8 +2490,8 @@ МодульЭлектроннаяПодписьКлиентСервер = ОбщегоНазначения.ОбщийМодуль("ЭлектроннаяПодписьКлиентСервер"); - РасширениеДляФайловПодписи = МодульЭлектроннаяПодписьКлиентСервер.ПерсональныеНастройки( - ).РасширениеДляФайловПодписи; + РасширениеДляФайловПодписи = + МодульЭлектроннаяПодписьКлиентСервер.ПерсональныеНастройки().РасширениеДляФайловПодписи; Иначе РасширениеДляФайловПодписи = "p7s"; КонецЕсли; @@ -2549,8 +2553,8 @@ КонецЕсли; Для каждого ЭП Из Выборка.ЭлектронныеПодписи.Выгрузить() Цикл - СоотвВложения.Вставить(Выборка.ПолноеНаименование + "-DS("+ ЭП.НомерСтроки + ")." + - РасширениеДляФайловПодписи,ЭП.Подпись.Получить()); + СоотвВложения.Вставить(Выборка.ПолноеНаименование + "-DS("+ ЭП.НомерСтроки + ")." + + РасширениеДляФайловПодписи,ЭП.Подпись.Получить()); КонецЦикла; КонецЦикла; @@ -2580,8 +2584,8 @@ Если НЕ ОбъектПисьмо.Ссылка.Пустая() Тогда Форма.Автозаголовок = Ложь; ЗаголовокФормы = ?(ПустаяСтрока(ОбъектПисьмо.Тема), НСтр("ru = 'Письмо без темы'"), ОбъектПисьмо.Тема); - ЗаголовокФормы = ЗаголовокФормы + - ?(ТипЗнч(ОбъектПисьмо.Ссылка) = Тип("ДокументСсылка.ЭлектронноеПисьмоВходящее"), " (Входящее)", " (Исходящее)"); + ЗаголовокФормы = ЗаголовокФормы + + ?(ТипЗнч(ОбъектПисьмо.Ссылка) = Тип("ДокументСсылка.ЭлектронноеПисьмоВходящее"), " (Входящее)", " (Исходящее)"); Форма.Заголовок = ЗаголовокФормы; Иначе Если ТипЗнч(ОбъектПисьмо.Ссылка) = Тип("ДокументСсылка.ЭлектронноеПисьмоИсходящее") Тогда @@ -2643,30 +2647,35 @@ Обработчик.Версия = "2.2.1.12"; Обработчик.Процедура = "РегистрыСведений.ПредметыПапкиВзаимодействий.ОбновитьХранениеРассмотреноРассмотретьПосле_2_2_0_0"; Обработчик.РежимВыполнения = "Отложенно"; + Обработчик.Идентификатор = Новый УникальныйИдентификатор("c12dc82c-2358-4abd-9622-656a6a188062"); Обработчик.Комментарий = НСтр("ru = 'Переносится хранение реквизитов ""Рассмотрено"" и ""РассмотретьПосле"" в регистр сведений ""ПредметыПапкиВзаимодействий"". Без выполнения обработчика значения данных реквизитов будут отображаться некорректно.'"); Обработчик = Обработчики.Добавить(); Обработчик.Версия = "2.2.1.12"; Обработчик.Процедура = "РегистрыСведений.КонтактыВзаимодействий.ЗаполнитьКонтактыВзаимодействий_2_2_0_0"; Обработчик.РежимВыполнения = "Отложенно"; + Обработчик.Идентификатор = Новый УникальныйИдентификатор("bfe0bff5-6d5c-4359-a994-6e76bf824454"); Обработчик.Комментарий = НСтр("ru = 'Заполняется вспомогательный регистр сведений ""КонтактыВзаимодействий"". Без выполнения обработчика не будут корректно работать отборы по контактам взаимодействий.'"); Обработчик = Обработчики.Добавить(); Обработчик.Версия = "2.2.1.12"; Обработчик.Процедура = "РегистрыСведений.СостоянияПапокПисем.РассчитатьСостоянияПапокЭлектронныхПисем_2_2_0_0"; Обработчик.РежимВыполнения = "Отложенно"; + Обработчик.Идентификатор = Новый УникальныйИдентификатор("48cc6281-e934-45d6-b673-819c68016d11"); Обработчик.Комментарий = НСтр("ru = 'Выполняется первоначальный расчет количества нерассмотренных писем по папкам. Без выполнения обработчика не будет корректно выводится информация о количестве нерассмотренных писем по папкам.'"); Обработчик = Обработчики.Добавить(); Обработчик.Версия = "2.2.1.12"; Обработчик.Процедура = "РегистрыСведений.СостоянияПредметовВзаимодействий.РассчитатьСостоянияПредметовВзаимодействий_2_2_0_0"; Обработчик.РежимВыполнения = "Отложенно"; + Обработчик.Идентификатор = Новый УникальныйИдентификатор("0eec6511-cb6c-443b-b27b-6b888aad99ef"); Обработчик.Комментарий = НСтр("ru = 'Выполняется первоначальный расчет количества состояний предметов взаимодействий. Без выполнения обработчика не будет корректно выводится информация в панель навигации журнала взаимодействий по предметам.'"); Обработчик = Обработчики.Добавить(); Обработчик.Версия = "2.2.1.12"; Обработчик.Процедура = "РегистрыСведений.СостоянияКонтактовВзаимодействий.РассчитатьСостоянияКонтактовВзаимодействий_2_2_0_0"; Обработчик.РежимВыполнения = "Отложенно"; + Обработчик.Идентификатор = Новый УникальныйИдентификатор("4ec55cf6-e322-49f2-b977-77b718a4e7ca"); Обработчик.Комментарий = НСтр("ru = 'Выполняется первоначальный расчет количества состояний контактов взаимодействий. Без выполнения обработчика не будет корректно выводится информация в панель навигации журнала взаимодействий по контактам.'"); Обработчик = Обработчики.Добавить(); @@ -3239,8 +3248,8 @@ КонецЕсли; Если Форма.ТолькоПочта Тогда - Если ТипВзаимодействия = Неопределено ИЛИ - Форма.Элементы.ТипВзаимодействия.СписокВыбора.НайтиПоЗначению(ТипВзаимодействия) = Неопределено Тогда + Если ТипВзаимодействия = Неопределено + ИЛИ Форма.Элементы.ТипВзаимодействия.СписокВыбора.НайтиПоЗначению(ТипВзаимодействия) = Неопределено Тогда ТипВзаимодействия = "ВсеПисьма"; Настройки.Удалить("ТипВзаимодействия"); КонецЕсли; @@ -3572,18 +3581,22 @@ КонецЦикла; - ЭлементHR = ДобавитьЭлементСАтрибутами( - ЭлементDIV,"hr",Новый Структура("size,width,align,tabindex","2","100%","center","-1")); + СтруктураАтрибутов = Новый Структура; + СтруктураАтрибутов.Вставить("size", "2"); + СтруктураАтрибутов.Вставить("width", "100%"); + СтруктураАтрибутов.Вставить("align", "center"); + СтруктураАтрибутов.Вставить("tabindex", "-1"); + + ЭлементHR = ДобавитьЭлементСАтрибутами(ЭлементDIV, "hr", СтруктураАтрибутов); ВставитьЭлементHTMLПервымДочернимЭлементом(ЭлементDIV,ЭлементHR,МассивДочернихУзловТелаОснование); - СтруктураДанныеШапкиПисьмаОснования = Новый Структура( - "ОтправительПредставление,ОтправительАдрес,Дата,Тема,ПолучателиПисьма,ПолучателиКопий", - ВыборкаОснование.ОтправительПредставление, - ВыборкаОснование.ОтправительАдрес, - ВыборкаОснование.Дата, - ВыборкаОснование.Тема, - ВыборкаОснование.ПолучателиПисьма, - ВыборкаОснование.ПолучателиКопий,); + СтруктураДанныеШапкиПисьмаОснования = Новый Структура; + СтруктураДанныеШапкиПисьмаОснования.Вставить("ОтправительПредставление", ВыборкаОснование.ОтправительПредставление); + СтруктураДанныеШапкиПисьмаОснования.Вставить("ОтправительАдрес", ВыборкаОснование.ОтправительАдрес); + СтруктураДанныеШапкиПисьмаОснования.Вставить("Дата", ВыборкаОснование.Дата); + СтруктураДанныеШапкиПисьмаОснования.Вставить("Тема", ВыборкаОснование.Тема); + СтруктураДанныеШапкиПисьмаОснования.Вставить("ПолучателиПисьма", ВыборкаОснование.ПолучателиПисьма); + СтруктураДанныеШапкиПисьмаОснования.Вставить("ПолучателиКопий", ВыборкаОснование.ПолучателиКопий); ЭлементШрифт = СформироватьЭлементДанныхШапкиПисьма(ЭлементDIV, СтруктураДанныеШапкиПисьмаОснования, @@ -3633,15 +3646,15 @@ Кодировка = "", ОбработатьКартинки = Ложь) - Если ТипТекста <> ТипТекстаПреобразование И - ТипТекста <> Перечисления.ТипыТекстовЭлектронныхПисем.ПростойТекст Тогда + Если ТипТекста <> ТипТекстаПреобразование + И ТипТекста <> Перечисления.ТипыТекстовЭлектронныхПисем.ПростойТекст Тогда ТекстВходящегоПисьма = ПолучитьОбычныйТекстИзHTML(ТекстHTML); ДокументHTML = ПолучитьДокументHTMLИзОбычногоТекста(ТекстВходящегоПисьма); - ИначеЕсли ТипТекста = Перечисления.ТипыТекстовЭлектронныхПисем.ПростойТекст ИЛИ - (ТипТекста.Пустая() И СокрЛП(ТекстHTML) = "") Тогда + ИначеЕсли ТипТекста = Перечисления.ТипыТекстовЭлектронныхПисем.ПростойТекст + ИЛИ (ТипТекста.Пустая() И СокрЛП(ТекстHTML) = "") Тогда ДокументHTML = ПолучитьДокументHTMLИзОбычногоТекста(Текст); @@ -3650,12 +3663,12 @@ КодировкаПисьма = Кодировка; Если ПустаяСтрока(КодировкаПисьма) Тогда - ПозицияАтрибутаКодировки = Найти(ТекстHTML,"charset"); + ПозицияАтрибутаКодировки = СтрНайти(ТекстHTML,"charset"); Если ПозицияАтрибутаКодировки <> 0 Тогда - инд = 0; - Пока КодСимвола(Сред(ТекстHTML,ПозицияАтрибутаКодировки + 8 + инд,1)) <> 34 Цикл - КодировкаПисьма = КодировкаПисьма + Сред(ТекстHTML,ПозицияАтрибутаКодировки + 8 + инд,1); - инд = инд + 1; + Инд = 0; + Пока КодСимвола(Сред(ТекстHTML,ПозицияАтрибутаКодировки + 8 + Инд,1)) <> 34 Цикл + КодировкаПисьма = КодировкаПисьма + Сред(ТекстHTML,ПозицияАтрибутаКодировки + 8 + Инд,1); + Инд = Инд + 1; КонецЦикла Иначе КодировкаПисьма = "utf8"; @@ -4006,8 +4019,8 @@ Для Каждого Получатель Из ТаблицаПолучателей Цикл - СтрокаКВозврату = СтрокаКВозврату + "'" + - ?(ПустаяСтрока(Получатель.Представление), Получатель.Адрес, Получатель.Представление + "<"+ Получатель.Адрес+">") + "'"+ ", "; + СтрокаКВозврату = СтрокаКВозврату + "'" + + ?(ПустаяСтрока(Получатель.Представление), Получатель.Адрес, Получатель.Представление + "<"+ Получатель.Адрес+">") + "'"+ ", "; КонецЦикла; @@ -4069,8 +4082,13 @@ ВставитьЭлементHTMLПервымДочернимЭлементом(ЭлементТелоПисьма,ЭлементПользователь, МассивДочернихУзловТела); // Горизонтальный разделитель - ЭлементHR = ДобавитьЭлементСАтрибутами(ЭлементТелоПисьма, "hr", - Новый Структура("size,width,align,tabindex","2","100%","center","-1")); + СтруктураАтрибутов = Новый Структура; + СтруктураАтрибутов.Вставить("size", "2"); + СтруктураАтрибутов.Вставить("width", "100%"); + СтруктураАтрибутов.Вставить("align", "center"); + СтруктураАтрибутов.Вставить("tabindex", "-1"); + + ЭлементHR = ДобавитьЭлементСАтрибутами(ЭлементТелоПисьма, "hr", СтруктураАтрибутов); ВставитьЭлементHTMLПервымДочернимЭлементом(ЭлементТелоПисьма,ЭлементHR,МассивДочернихУзловТела); // Шапка письма @@ -4214,11 +4232,11 @@ ЧтениеHTML = Новый ЧтениеHTML; НовыйТекстHTML = ТекстHTML; - ПозицияОткрытиеXML = Найти(НовыйТекстHTML,"<?xml"); + ПозицияОткрытиеXML = СтрНайти(НовыйТекстHTML,"<?xml"); Если ПозицияОткрытиеXML > 0 Тогда - ПозицияЗакрытиеXML = Найти(НовыйТекстHTML,"?>"); + ПозицияЗакрытиеXML = СтрНайти(НовыйТекстHTML,"?>"); Если ПозицияЗакрытиеXML > 0 Тогда НовыйТекстHTML = ЛЕВ(НовыйТекстHTML,ПозицияОткрытиеXML - 1) + ПРАВ(НовыйТекстHTML,СтрДлина(НовыйТекстHTML) - ПозицияЗакрытиеXML -1); @@ -4647,11 +4665,7 @@ // Выполняет процедуру отправки сообщений SMS. Процедура ОтправкаSMS() Экспорт - Если ОбщегоНазначенияПовтИсп.РазделениеВключено() Тогда - Возврат; - КонецЕсли; - - ОбщегоНазначения.ПриНачалеВыполненияРегламентногоЗадания(); + ОбщегоНазначения.ПриНачалеВыполненияРегламентногоЗадания(Метаданные.РегламентныеЗадания.ОтправкаSMS); Если НЕ ПолучитьФункциональнуюОпцию("ИспользоватьПочтовыйКлиент") Тогда Возврат; @@ -4757,11 +4771,7 @@ // Процедура ОбновлениеСтатусовДоставкиSMS() Экспорт - Если ОбщегоНазначенияПовтИсп.РазделениеВключено() Тогда - Возврат; - КонецЕсли; - - ОбщегоНазначения.ПриНачалеВыполненияРегламентногоЗадания(); + ОбщегоНазначения.ПриНачалеВыполненияРегламентногоЗадания(Метаданные.РегламентныеЗадания.ОбновлениеСтатусовДоставкиSMS); Если НЕ ПолучитьФункциональнуюОпцию("ИспользоватьПочтовыйКлиент") Тогда Возврат; @@ -4963,9 +4973,9 @@ Если НЕ НовыйРодитель.Пустая()Тогда ЗначенияРеквизитовПапки = ОбщегоНазначения.ЗначенияРеквизитовОбъекта( НовыйРодитель,"ПредопределеннаяПапка,Наименование"); - Если ЗначенияРеквизитовПапки <> Неопределено И - ЗначенияРеквизитовПапки.ПредопределеннаяПапка И - ЗначенияРеквизитовПапки.Наименование = НСтр("ru = 'Удаленные'") Тогда + Если ЗначенияРеквизитовПапки <> Неопределено + И ЗначенияРеквизитовПапки.ПредопределеннаяПапка + И ЗначенияРеквизитовПапки.Наименование = НСтр("ru = 'Удаленные'") Тогда ПеремещениеВПапкуУдаленные = Истина; @@ -5987,8 +5997,7 @@ КонецЕсли; - Запрос.Текст = ТекстКонтактыДляРасчета + - " + Запрос.Текст = ТекстКонтактыДляРасчета + " |ВЫБРАТЬ | ВложенныйЗапрос.Контакт, | МАКСИМУМ(ВложенныйЗапрос.ДатаПоследнегоВзаимодействия) КАК ДатаПоследнегоВзаимодействия, @@ -6681,6 +6690,8 @@ КонецЕсли; КонецЦикла; + Таблица.Свернуть("Контакт"); + Таблица.Колонки.Добавить("Взаимодействие"); Таблица.ЗаполнитьЗначения(ДокументОбъект.Ссылка, "Взаимодействие"); НаборЗаписей.ДополнительныеСвойства.Вставить("РассчитыватьРассмотрено", Истина); diff --git a/SSL/src/CommonModules/ВзаимодействияВызовСервера/Module.bsl b/SSL/src/CommonModules/ВзаимодействияВызовСервера/Module.bsl index 2b4527959..b7b3ac61d 100644 --- a/SSL/src/CommonModules/ВзаимодействияВызовСервера/Module.bsl +++ b/SSL/src/CommonModules/ВзаимодействияВызовСервера/Module.bsl @@ -74,18 +74,35 @@ Возврат Неопределено; КонецЕсли; - Если Контакт.Метаданные().Иерархический Тогда + МетаданныеКонтакта = Контакт.Метаданные(); + + Если МетаданныеКонтакта.Иерархический Тогда Если Контакт.ЭтоГруппа Тогда Возврат Неопределено; КонецЕсли; КонецЕсли; - ИмяТаблицы = Контакт.Метаданные().ПолноеИмя(); + МассивОписанияТиповКонтактов = ВзаимодействияКлиентСервер.ПолучитьМассивОписанияВозможныхКонтактов(); + ЭлементМассиваОписания = Неопределено; + Для Каждого ЭлементМассива Из МассивОписанияТиповКонтактов Цикл + + Если ЭлементМассива.Имя = МетаданныеКонтакта.Имя Тогда + ЭлементМассиваОписания = ЭлементМассива; + Прервать; + КонецЕсли; + + КонецЦикла; + + Если ЭлементМассиваОписания = Неопределено Тогда + Возврат Неопределено; + КонецЕсли; + + ИмяТаблицы = МетаданныеКонтакта.ПолноеИмя(); ТекстЗапроса = "ВЫБРАТЬ РАЗРЕШЕННЫЕ РАЗЛИЧНЫЕ | ЕстьNULL(ТаблицаКонтактнаяИнформация.АдресЭП,"""") КАК АдресЭП, - | Таблица.Наименование КАК Наименование + | Таблица." + ЭлементМассиваОписания.ИмяРеквизитаПредставлениеКонтакта + " КАК Наименование |ИЗ | " + ИмяТаблицы + " КАК Таблица | ЛЕВОЕ СОЕДИНЕНИЕ " + ИмяТаблицы + ".КонтактнаяИнформация КАК ТаблицаКонтактнаяИнформация diff --git a/SSL/src/CommonModules/ВзаимодействияКлиент/Module.bsl b/SSL/src/CommonModules/ВзаимодействияКлиент/Module.bsl index 845d3e2a9..9fa924729 100644 --- a/SSL/src/CommonModules/ВзаимодействияКлиент/Module.bsl +++ b/SSL/src/CommonModules/ВзаимодействияКлиент/Module.bsl @@ -149,8 +149,8 @@ Если (Параметр.ТипОповещения = "ЗаписьВзаимодействия" ИЛИ Параметр.ТипОповещения = "ЗаписьПредмета") И Параметр.Основание = Форма.Объект.Ссылка Тогда - Если (Форма.Предмет = Неопределено ИЛИ ВзаимодействияКлиентСервер.ЯвляетсяВзаимодействием(Форма.Предмет)) И - Форма.Предмет <> Параметр.Предмет Тогда + Если (Форма.Предмет = Неопределено ИЛИ ВзаимодействияКлиентСервер.ЯвляетсяВзаимодействием(Форма.Предмет)) + И Форма.Предмет <> Параметр.Предмет Тогда Форма.Предмет = Параметр.Предмет; Форма.ОтобразитьИзменениеДанных(Форма.Предмет, ВидИзмененияДанных.Изменение); КонецЕсли; @@ -162,8 +162,8 @@ Если ПустаяСтрока(Форма.Объект.АбонентПредставление) Тогда Форма.Объект.АбонентПредставление = Параметр.Наименование; КонецЕсли; - ИначеЕсли ТипЗнч(Форма.Объект.Ссылка)=Тип("ДокументСсылка.Встреча") ИЛИ - ТипЗнч(Форма.Объект.Ссылка)=Тип("ДокументСсылка.ЗапланированноеВзаимодействие")Тогда + ИначеЕсли ТипЗнч(Форма.Объект.Ссылка)=Тип("ДокументСсылка.Встреча") + ИЛИ ТипЗнч(Форма.Объект.Ссылка)=Тип("ДокументСсылка.ЗапланированноеВзаимодействие")Тогда Форма.Элементы.Участники.ТекущиеДанные.Контакт = Параметр.Ссылка; Если ПустаяСтрока(Форма.Элементы.Участники.ТекущиеДанные.ПредставлениеКонтакта) Тогда Форма.Элементы.Участники.ТекущиеДанные.ПредставлениеКонтакта = Параметр.Наименование; @@ -420,8 +420,8 @@ Возврат; КонецЕсли; - Если ТипЗнч(ТекущиеДанные.Ссылка) = Тип("ДокументСсылка.ЭлектронноеПисьмоВходящее") Или - ТипЗнч(ТекущиеДанные.Ссылка) = Тип("ДокументСсылка.ЭлектронноеПисьмоИсходящее") Тогда + Если ТипЗнч(ТекущиеДанные.Ссылка) = Тип("ДокументСсылка.ЭлектронноеПисьмоВходящее") + Или ТипЗнч(ТекущиеДанные.Ссылка) = Тип("ДокументСсылка.ЭлектронноеПисьмоИсходящее") Тогда Отказ = Истина; Если Не ТолькоПочта Тогда ПоказатьПредупреждение(, НСтр("ru = 'Копирование электронных писем запрещено'")); diff --git a/SSL/src/CommonModules/ВзаимодействияКлиентСервер/Module.bsl b/SSL/src/CommonModules/ВзаимодействияКлиентСервер/Module.bsl index 796549724..ba0bae86b 100644 --- a/SSL/src/CommonModules/ВзаимодействияКлиентСервер/Module.bsl +++ b/SSL/src/CommonModules/ВзаимодействияКлиентСервер/Module.bsl @@ -137,7 +137,7 @@ Если НЕ ПустаяСтрока(СтруктураПолей.КодСтраны) Тогда КодСтраны = СокрЛП(КодСтраны); - Если ЛЕВ(КодСтраны,1)= "+" Тогда + Если СтрНачинаетсяС(КодСтраны, "+") Тогда КодСтраны = Прав(КодСтраны, СтрДлина(СтруктураПолей.КодСтраны)-1); КонецЕсли; Если НЕ СтроковыеФункцииКлиентСервер.ТолькоЦифрыВСтроке(КодСтраны) Тогда @@ -184,17 +184,17 @@ текСтр = СокрЛП(Представление); // Вырежем добавочный номер с комментарием. - ПозДоб = Найти(ВРЕГ(текСтр), "ДОБ."); + ПозДоб = СтрНайти(ВРЕГ(текСтр), "ДОБ."); Если ПозДоб <> 0 Тогда ДобавочныйСКомментарием = СокрЛП(Сред(текСтр, ПозДоб+4)); текСтр = СокрЛП(Лев(текСтр, ПозДоб-1)); - Если Прав(текСтр, 1) = "," Тогда + Если СтрЗаканчиваетсяНа(текСтр, ",") Тогда текСтр = Лев(текСтр, СтрДлина(текСтр)-1); КонецЕсли; - ПозДоб = Найти(ВРЕГ(ДобавочныйСКомментарием), ", "); + ПозДоб = СтрНайти(ВРЕГ(ДобавочныйСКомментарием), ", "); Если ПозДоб <> 0 Тогда Добавочный = СокрЛП(Лев(ДобавочныйСКомментарием, ПозДоб-1)); @@ -206,12 +206,12 @@ КонецЕсли; // вырежем код города - Поз = Найти(текСтр, "("); + Поз = СтрНайти(текСтр, "("); Если Поз <> 0 Тогда КодСтраны = СокрЛП(Лев(текСтр, Поз-1)); текСтр = СокрЛП(Сред(текСтр, Поз+1)); - Поз = Найти(текСтр, ")"); + Поз = СтрНайти(текСтр, ")"); Если Поз <> 0 Тогда КодГорода = СокрЛП(Лев(текСтр, Поз-1)); @@ -219,7 +219,7 @@ КонецЕсли; КонецЕсли; - Поз = Найти(текСтр, ", "); + Поз = СтрНайти(текСтр, ", "); // Если добавочного номера нет - ориентируемся по номеру телефона и комментарию. Если ПозДоб = 0 И Поз <> 0 Тогда // вырежем комментарий @@ -251,7 +251,7 @@ // Функция ТемаПоТекстуСообщения(ТекстСообщения) Экспорт - МассивСтрок = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(ТекстСообщения," "); + МассивСтрок = СтрРазделить(ТекстСообщения," ", Ложь); Тема = ""; Для Инд = 0 По МассивСтрок.Количество() - 1 Цикл Если Инд > 2 Тогда @@ -333,7 +333,7 @@ Функция ПолучитьРасширениеФайла(Знач ИмяФайла) Экспорт РасширениеФайла = ""; - МассивСтрок = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(ИмяФайла, ".", Истина); + МассивСтрок = СтрРазделить(ИмяФайла, ".", Ложь); Если МассивСтрок.Количество() > 1 Тогда РасширениеФайла = МассивСтрок[МассивСтрок.Количество() - 1]; КонецЕсли; @@ -356,7 +356,7 @@ Пока Истина Цикл - Позиция = Макс(Найти(ИмяФайла, "\"), Найти(ИмяФайла, "/")); + Позиция = Макс(Найти(ИмяФайла, "\"), СтрНайти(ИмяФайла, "/")); Если Позиция = 0 Тогда Возврат; КонецЕсли; @@ -393,7 +393,7 @@ // // Параметры: // МассивОписания - Массив - массив, в который будут добавлена структура описания контакта. -// Тип - Тип - тип ссылки контакта. +// Тип - Тип - тип ссылки контакта. // ВозможностьИнтерактивногоСоздания - Булево - признак возможности интерактивного создания контакта из документов - // взаимодействий. // Имя - Строка - имя типа контакта , как оно определено в метаданных. @@ -406,6 +406,7 @@ // Связь - Строка - описывает возможную связь данного контакта с другим контактом, в // случае когда текущий контакт является реквизитом другого контакта. // Описывается следующей строкой "ИмяТаблицы.ИмяРеквизита". +// ИмяРеквизитаПредставлениеКонтакта - Строка - имя реквизита контакта, из которого будет получено представление контакта. // Процедура ДобавитьЭлементМассиваОписанияВозможныхТиповКонтактов( МассивОписания, @@ -417,19 +418,23 @@ ЕстьВладелец, ИмяВладельца, ИскатьПоДомену, - Связь) Экспорт + Связь, + ИмяРеквизитаПредставлениеКонтакта = "Наименование") Экспорт - МассивОписания.Добавить(Новый Структура( - "Тип,ВозможностьИнтерактивногоСоздания, Имя, Представление, Иерархический, ЕстьВладелец, ИмяВладельца, ИскатьПоДомену, Связь", - Тип, - ВозможностьИнтерактивногоСоздания, - Имя, - Представление, - Иерархический, - ЕстьВладелец, - ИмяВладельца, - ИскатьПоДомену, - Связь)); + СтруктураОписания = Новый Структура; + СтруктураОписания.Вставить("Тип", Тип); + СтруктураОписания.Вставить("ВозможностьИнтерактивногоСоздания", ВозможностьИнтерактивногоСоздания); + СтруктураОписания.Вставить("Имя", Имя); + СтруктураОписания.Вставить("Представление", Представление); + СтруктураОписания.Вставить("Иерархический", Иерархический); + СтруктураОписания.Вставить("ЕстьВладелец", ЕстьВладелец); + СтруктураОписания.Вставить("ИмяВладельца", ИмяВладельца); + СтруктураОписания.Вставить("ИскатьПоДомену", ИскатьПоДомену); + СтруктураОписания.Вставить("Связь", Связь); + СтруктураОписания.Вставить("ИмяРеквизитаПредставлениеКонтакта", ИмяРеквизитаПредставлениеКонтакта); + + + МассивОписания.Добавить(СтруктураОписания); КонецПроцедуры @@ -689,8 +694,10 @@ Представление = ""; Для Каждого СтрокаТаблицы Из ТаблицаАдресатов Цикл - Представление = Представление + - ПолучитьПредставлениеАдресата(СтрокаТаблицы.Представление, СтрокаТаблицы.Адрес, ?(ВключатьИмяКонтакта, СтрокаТаблицы.Контакт, "")) + "; "; + Представление = Представление + + ПолучитьПредставлениеАдресата(СтрокаТаблицы.Представление, + СтрокаТаблицы.Адрес, + ?(ВключатьИмяКонтакта, СтрокаТаблицы.Контакт, "")) + "; "; КонецЦикла; Возврат Представление; @@ -865,7 +872,7 @@ Функция СтатусПоИмениКоманды(ИмяКоманды) Экспорт - НайденнаяПозиция = Найти(ИмяКоманды, "_"); + НайденнаяПозиция = СтрНайти(ИмяКоманды, "_"); Если НайденнаяПозиция = 0 Тогда Возврат "Все"; КонецЕсли; @@ -881,7 +888,7 @@ Функция ТипВзаимодействияПоИмениКоманды(ИмяКоманды, ТолькоПочта) Экспорт - НайденнаяПозиция = Найти(ИмяКоманды, "_"); + НайденнаяПозиция = СтрНайти(ИмяКоманды, "_"); Если НайденнаяПозиция = 0 Тогда Возврат "Все"; КонецЕсли; diff --git a/SSL/src/CommonModules/ВнешниеПользователи/Module.bsl b/SSL/src/CommonModules/ВнешниеПользователи/Module.bsl index d79278450..2a79c7a3a 100644 --- a/SSL/src/CommonModules/ВнешниеПользователи/Module.bsl +++ b/SSL/src/CommonModules/ВнешниеПользователи/Module.bsl @@ -64,4 +64,30 @@ КонецФункции +// Используется для настройки отображения наличия внешних пользователей в списках справочников (партнеры, респонденты и др.) +// являющихся объектом авторизации в справочнике ВнешниеПользователи. +// +// Параметры: +// Форма - УправляемаяФорма - вызывающий объект. +// +Процедура НастроитьОтображениеСпискаВнешнихПользователей(Форма) Экспорт + + Если ПравоДоступа("Чтение", Метаданные.Справочники.ВнешниеПользователи) Тогда + Возврат; + КонецЕсли; + + // Удаление отображения недоступных сведений. + СхемаЗапроса = Новый СхемаЗапроса; + СхемаЗапроса.УстановитьТекстЗапроса(Форма.Список.ТекстЗапроса); + Источники = СхемаЗапроса.ПакетЗапросов[0].Операторы[0].Источники; + Для Индекс = 0 По Источники.Количество() - 1 Цикл + Если Источники[Индекс].Источник.ИмяТаблицы = "Справочник.ВнешниеПользователи" Тогда + Источники.Удалить(Индекс); + КонецЕсли; + КонецЦикла; + Форма.Список.ТекстЗапроса = СхемаЗапроса.ПолучитьТекстЗапроса(); + +КонецПроцедуры + + #КонецОбласти diff --git a/SSL/src/CommonModules/ГрафикиРаботы/Module.bsl b/SSL/src/CommonModules/ГрафикиРаботы/Module.bsl index be9ef5538..d8144f578 100644 --- a/SSL/src/CommonModules/ГрафикиРаботы/Module.bsl +++ b/SSL/src/CommonModules/ГрафикиРаботы/Module.bsl @@ -106,9 +106,7 @@ Если Выборка.ДатаПоКалендарю = Неопределено Тогда СообщениеОбОшибке = НСтр("ru = 'График работы «%1» не заполнен с даты %2 на указанное количество рабочих дней.'"); Если ВызыватьИсключение Тогда - ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - СообщениеОбОшибке, - ГрафикРаботы, Формат(ДатаОт, "ДЛФ=D")); + ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(СообщениеОбОшибке, ГрафикРаботы, Формат(ДатаОт, "ДЛФ=D")); Иначе Возврат Неопределено; КонецЕсли; diff --git a/SSL/src/CommonModules/ГрупповоеИзменениеОбъектовКлиент/Module.bsl b/SSL/src/CommonModules/ГрупповоеИзменениеОбъектовКлиент/Module.bsl index 124a8673f..ea6830acd 100644 --- a/SSL/src/CommonModules/ГрупповоеИзменениеОбъектовКлиент/Module.bsl +++ b/SSL/src/CommonModules/ГрупповоеИзменениеОбъектовКлиент/Module.bsl @@ -10,25 +10,40 @@ // Параметры: // Список - ТаблицаФормы - элемент формы списка, содержащий ссылки на изменяемые объекты. // -Процедура ИзменитьВыделенные(Список) Экспорт +// Используется для открытия формы группового изменения объектов. +// +// Параметры: +// Список - ТаблицаФормы - элемент формы списка, содержащий ссылки на изменяемые объекты. +// +Процедура ИзменитьВыделенные(СписокЭлемент, Знач СписокРеквизит = Неопределено) Экспорт - ВыделенныеСтроки = Список.ВыделенныеСтроки; + Если СписокРеквизит = Неопределено Тогда + Форма = СписокЭлемент.Родитель; + Пока ТипЗнч(Форма) <> Тип("УправляемаяФорма") Цикл + Форма = Форма.Родитель; + КонецЦикла; + + Попытка + СписокРеквизит = Форма.Список; + Исключение + СписокРеквизит = Неопределено; + КонецПопытки; + КонецЕсли; + + ВыделенныеСтроки = СписокЭлемент.ВыделенныеСтроки; ПараметрыФормы = Новый Структура("МассивОбъектов", Новый Массив); + ПараметрыФормы.Вставить("Список", СписокРеквизит); Для Каждого ВыделеннаяСтрока Из ВыделенныеСтроки Цикл Если ТипЗнч(ВыделеннаяСтрока) = Тип("СтрокаГруппировкиДинамическогоСписка") Тогда Продолжить; КонецЕсли; - ТекущаяСтрока = Список.ДанныеСтроки(ВыделеннаяСтрока); - + ТекущаяСтрока = СписокЭлемент.ДанныеСтроки(ВыделеннаяСтрока); Если ТекущаяСтрока <> Неопределено Тогда - ПараметрыФормы.МассивОбъектов.Добавить(ТекущаяСтрока.Ссылка); - КонецЕсли; - КонецЦикла; Если ПараметрыФормы.МассивОбъектов.Количество() = 0 Тогда diff --git a/SSL/src/CommonModules/ДанныеЕдиныхГосРеестров/Module.bsl b/SSL/src/CommonModules/ДанныеЕдиныхГосРеестров/Module.bsl index e1e68956b..c8ce74dce 100644 --- a/SSL/src/CommonModules/ДанныеЕдиныхГосРеестров/Module.bsl +++ b/SSL/src/CommonModules/ДанныеЕдиныхГосРеестров/Module.bsl @@ -16,53 +16,54 @@ // Функция РеквизитыЮридическогоЛицаПоИНН(Знач ИНН) Экспорт - РеквизитыЮридическогоЛица = НовыеРеквизитыЮридическогоЛица(); - РеквизитыЮридическогоЛица.ИНН = ИНН; + РеквизитыОрганизации = НовыеРеквизитыЮридическогоЛица(); + РеквизитыОрганизации.ИНН = ИНН; ОписаниеОшибки = ""; - Прокси = ПроксиСервиса(ОписаниеОшибки); + ОбъектXDTO = Неопределено; + Прокси = ПроксиСервиса(ОписаниеОшибки); Если Прокси <> Неопределено Тогда ВходныеПараметры = Прокси.ФабрикаXDTO.Создать( Прокси.ФабрикаXDTO.Тип(ПространствоИмен(), "getCorporationRequisitesByINN")); ВходныеПараметры.INN = ИНН; ВходныеПараметры.configurationName = Метаданные.Имя; Попытка - Ответ = Прокси.getCorporationRequisitesByINN(ВходныеПараметры); + Ответ = Прокси.getCorporationRequisitesByINN(ВходныеПараметры); + ОбъектXDTO = Ответ.РеквизитыЮрЛица; Исключение ИнформацияОбОшибке = ИнформацияОбОшибке(); - ОписаниеОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + ОписаниеОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru='ИНН %1:'"), ИНН) + Символы.ПС + ПодробноеПредставлениеОшибки(ИнформацияОбОшибке); КонецПопытки; КонецЕсли; - - Если ЗначениеЗаполнено(ОписаниеОшибки) Тогда - ОбработатьОшибкуСервиса(ОписаниеОшибки, РеквизитыЮридическогоЛица); - Возврат РеквизитыЮридическогоЛица; + + ОбработатьОшибкуСервиса(ОбъектXDTO, ОписаниеОшибки, "getCorporationRequisitesByINN", РеквизитыОрганизации); + + Если ЗначениеЗаполнено(РеквизитыОрганизации.ОписаниеОшибки) Тогда + Возврат РеквизитыОрганизации; КонецЕсли; - ОбъектXDTO = Ответ.РеквизитыЮрЛица; + ЗаполнитьНаименованияЮридическогоЛица(ОбъектXDTO, РеквизитыОрганизации); - ЗаполнитьНаименованияЮридическогоЛица(ОбъектXDTO, РеквизитыЮридическогоЛица); + РеквизитыОрганизации.РегистрационныйНомер = ОбъектXDTO.ОГРН; + РеквизитыОрганизации.КПП = ОбъектXDTO.КПП; - РеквизитыЮридическогоЛица.РегистрационныйНомер = ОбъектXDTO.ОГРН; - РеквизитыЮридическогоЛица.КПП = ОбъектXDTO.КПП; + РеквизитыОрганизации.ДатаРегистрации = ОбъектXDTO.СвНаимЮЛ.ДатаОбрЮЛ; - РеквизитыЮридическогоЛица.ДатаРегистрации = ОбъектXDTO.СвНаимЮЛ.ДатаОбрЮЛ; + ЗаполнитьКодОКВЭД(ОбъектXDTO, РеквизитыОрганизации); - ЗаполнитьКодОКВЭД(ОбъектXDTO, РеквизитыЮридическогоЛица); + ЗаполнитьРегистрациюВНалоговомОргане(ОбъектXDTO, РеквизитыОрганизации); - ЗаполнитьРегистрациюВНалоговомОргане(ОбъектXDTO, РеквизитыЮридическогоЛица); + ЗаполнитьРеквизитыПенсионногоФонда(ОбъектXDTO, РеквизитыОрганизации); - ЗаполнитьРеквизитыПенсионногоФонда(ОбъектXDTO, РеквизитыЮридическогоЛица); + ЗаполнитьРеквизитыФондаСоциальногоСтрахования(ОбъектXDTO, РеквизитыОрганизации); - ЗаполнитьРеквизитыФондаСоциальногоСтрахования(ОбъектXDTO, РеквизитыЮридическогоЛица); + ЗаполнитьЮридическийАдрес(ОбъектXDTO, РеквизитыОрганизации); - ЗаполнитьЮридическийАдрес(ОбъектXDTO, РеквизитыЮридическогоЛица); + ЗаполнитьРуководителяИНомерТелефона(ОбъектXDTO, РеквизитыОрганизации); - ЗаполнитьРуководителяИНомерТелефона(ОбъектXDTO, РеквизитыЮридическогоЛица); - - Возврат РеквизитыЮридическогоЛица; + Возврат РеквизитыОрганизации; КонецФункции @@ -82,29 +83,30 @@ РеквизитыПредпринимателя.ИНН = ИНН; ОписаниеОшибки = ""; - Прокси = ПроксиСервиса(ОписаниеОшибки); + ОбъектXDTO = Неопределено; + Прокси = ПроксиСервиса(ОписаниеОшибки); Если Прокси <> Неопределено Тогда ВходныеПараметры = Прокси.ФабрикаXDTO.Создать( Прокси.ФабрикаXDTO.Тип(ПространствоИмен(), "getEntrepreneurRequisitesByINN")); ВходныеПараметры.INN = ИНН; ВходныеПараметры.configurationName = Метаданные.Имя; Попытка - Ответ = Прокси.getEntrepreneurRequisitesByINN(ВходныеПараметры); + Ответ = Прокси.getEntrepreneurRequisitesByINN(ВходныеПараметры); + ОбъектXDTO = Ответ.РеквизитыИП; Исключение ИнформацияОбОшибке = ИнформацияОбОшибке(); - ОписаниеОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + ОписаниеОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru='ИНН %1:'"), ИНН) + Символы.ПС + ПодробноеПредставлениеОшибки(ИнформацияОбОшибке); КонецПопытки; КонецЕсли; - Если ЗначениеЗаполнено(ОписаниеОшибки) Тогда - ОбработатьОшибкуСервиса(ОписаниеОшибки, РеквизитыПредпринимателя); + ОбработатьОшибкуСервиса(ОбъектXDTO, ОписаниеОшибки, "getEntrepreneurRequisitesByINN", РеквизитыПредпринимателя); + + Если ЗначениеЗаполнено(РеквизитыПредпринимателя.ОписаниеОшибки) Тогда Возврат РеквизитыПредпринимателя; КонецЕсли; - ОбъектXDTO = Ответ.РеквизитыИП; - РеквизитыПредпринимателя.Фамилия = ТРег(ОбъектXDTO.СвФЛ.ФИОРус.Фамилия); РеквизитыПредпринимателя.Имя = ТРег(ОбъектXDTO.СвФЛ.ФИОРус.Имя); РеквизитыПредпринимателя.Отчество = ТРег(ОбъектXDTO.СвФЛ.ФИОРус.Отчество); @@ -118,16 +120,19 @@ ЗаполнитьСвидетельствоОРегистрации(ОбъектXDTO, РеквизитыПредпринимателя); - РеквизитыПредпринимателя.Наименование = РеквизитыПредпринимателя.Фамилия - + " " + РеквизитыПредпринимателя.Имя - + " " + РеквизитыПредпринимателя.Отчество; - РеквизитыПредпринимателя.НаименованиеПолное = Ответ.РеквизитыИП.НаимВидИП - + " " + РеквизитыПредпринимателя.Фамилия - + " " + РеквизитыПредпринимателя.Имя - + " " + РеквизитыПредпринимателя.Отчество; - РеквизитыПредпринимателя.НаименованиеСокращенное = ?(ОбъектXDTO.КодВидИП = "1", "ИП ", "") - + РеквизитыПредпринимателя.Наименование; - РеквизитыПредпринимателя.РегистрационныйНомер = ОбъектXDTO.ОГРНИП; + РеквизитыПредпринимателя.Наименование = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru='%1 %2 %3'"), + РеквизитыПредпринимателя.Фамилия, + РеквизитыПредпринимателя.Имя, + РеквизитыПредпринимателя.Отчество); + РеквизитыПредпринимателя.НаименованиеПолное = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru='Индивидуальный предприниматель %1'"), + РеквизитыПредпринимателя.Наименование); + РеквизитыПредпринимателя.НаименованиеСокращенное = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru='ИП %1'"), + РеквизитыПредпринимателя.Наименование); + + РеквизитыПредпринимателя.РегистрационныйНомер = ОбъектXDTO.ОГРН; Если ОбъектXDTO.СвГражд <> Неопределено Тогда РеквизитыПредпринимателя.КодСтраныГражданства = ОбъектXDTO.СвГражд.ОКСМ; @@ -141,37 +146,277 @@ КонецФункции +// Возвращаются основные реквизиты юридических лиц по данным ЕГРЮЛ, подходящих по условиям поиска по наименованию. +// +// Параметры: +// Наименование - Строка - одно или несколько слов из наименования юридического лица для поиска в ЕГРЮЛ. +// КодРегиона - Строка, 2 - код региона в юридическом адресе для поиска в ЕГРЮЛ. +// Адрес - Строка - одно или несколько слов из юридического адреса (от региона до улицы) для поиска в ЕГРЮЛ. +// +// Возвращаемое значение: +// Структура - реквизиты найденных юридических лиц. Содержание структуры: +// * РеквизитыЮрЛиц - Массив - реквизиты найденных юр.лиц. +// Элементы массива - Структура, описание см. функцию НовыеРеквизитыЮридическогоЛица. +// Заполняются только основные реквизиты (ИНН, наименование, юр.адрес, ФИО руководителя). +// Если найдено больше 20 контрагентов - возвращаются реквизиты только первых 20. +// * КоличествоНайденных - Число - общее количество найденных реквизитов (может быть больше 20). +// * ОписаниеОшибки - Строка - служебный реквизит. +// +Функция РеквизитыЮридическихЛицПоНаименованию(Знач Наименование, Знач КодРегиона = "", Знач Адрес = "") Экспорт + + РеквизитыОрганизаций = Новый Структура("РеквизитыОрганизаций,КоличествоНайденных,ОписаниеОшибки", + Новый Массив, 0, Неопределено); + + ОписаниеОшибки = ""; + ОбъектXDTO = Неопределено; + Прокси = ПроксиСервиса(ОписаниеОшибки); + Если Прокси <> Неопределено Тогда + ВходныеПараметры = Прокси.ФабрикаXDTO.Создать( + Прокси.ФабрикаXDTO.Тип(ПространствоИмен(), "getCorporationRequisitesByNameAndAddress")); + ВходныеПараметры.name = Наименование; + ВходныеПараметры.address = Адрес; + ВходныеПараметры.regionCode = КодРегиона; + ВходныеПараметры.configurationName = Метаданные.Имя; + Попытка + Ответ = Прокси.getCorporationRequisitesByNameAndAddress(ВходныеПараметры); + СписокXDTO = ?(Ответ.CorporationSearchResult = Неопределено, + Неопределено, + Ответ.CorporationSearchResult.РеквизитыЮрЛица); + Исключение + ИнформацияОбОшибке = ИнформацияОбОшибке(); + ОписаниеОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru='Наименование - %1:'"), Наименование) + + Символы.ПС + ПодробноеПредставлениеОшибки(ИнформацияОбОшибке); + КонецПопытки; + КонецЕсли; + + ОбработатьОшибкуСервиса(СписокXDTO, ОписаниеОшибки, "getCorporationRequisitesByNameAndAddress", РеквизитыОрганизаций); + + Если ЗначениеЗаполнено(РеквизитыОрганизаций.ОписаниеОшибки) Тогда + Возврат РеквизитыОрганизаций; + КонецЕсли; + + Для каждого ОбъектXDTO Из СписокXDTO Цикл + + РеквизитыОрганизации = НовыеРеквизитыЮридическогоЛица(); + РеквизитыОрганизации.ИНН = ОбъектXDTO.ИНН; + + ЗаполнитьНаименованияЮридическогоЛица(ОбъектXDTO, РеквизитыОрганизации); + + ЗаполнитьЮридическийАдрес(ОбъектXDTO, РеквизитыОрганизации); + + ЗаполнитьРуководителяИНомерТелефона(ОбъектXDTO, РеквизитыОрганизации); + + РеквизитыОрганизаций.РеквизитыОрганизаций.Добавить(РеквизитыОрганизации); + + КонецЦикла; + + РеквизитыОрганизаций.КоличествоНайденных = Ответ.CorporationSearchResult.corporationsFound; + + Возврат РеквизитыОрганизаций; + +КонецФункции + +// Возвращается информация о связях юридического лица, его руководителей и учредителей +// с другими лицами по данным ЕГРЮЛ. +// +// Параметры: +// ИНН - Строка - ИНН юридического лица, информацию о связях которого надо получить. +// +// Возвращаемое значение: +// Структура - информация о связях юридического лица. +// Содержание структуры - см. функцию НоваяИнформацияОСвязяхЮридическогоЛица. +// +Функция ИнформацияОСвязяхЮридическогоЛицаПоИНН(Знач ИНН) Экспорт + + ИнформацияОСвязях = НоваяИнформацияОСвязяхЮридическогоЛица(); + ИнформацияОСвязях.ИНН = ИНН; + + ОписаниеОшибки = ""; + ОбъектXDTO = Неопределено; + Прокси = ПроксиСервиса(ОписаниеОшибки); + Если Прокси <> Неопределено Тогда + ВходныеПараметры = Прокси.ФабрикаXDTO.Создать( + Прокси.ФабрикаXDTO.Тип(ПространствоИмен(), "checkCorporationTrustability")); + ВходныеПараметры.INN = ИНН; + ВходныеПараметры.configurationName = Метаданные.Имя; + Попытка + Ответ = Прокси.checkCorporationTrustability(ВходныеПараметры); + ОбъектXDTO = Ответ.CorporationTrustability; + Исключение + ИнформацияОбОшибке = ИнформацияОбОшибке(); + ОписаниеОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru='ИНН %1:'"), ИНН) + + Символы.ПС + ПодробноеПредставлениеОшибки(ИнформацияОбОшибке); + КонецПопытки; + КонецЕсли; + + ОбработатьОшибкуСервиса(ОбъектXDTO, ОписаниеОшибки, "checkCorporationTrustability", ИнформацияОСвязях); + + Если ЗначениеЗаполнено(ИнформацияОСвязях.ОписаниеОшибки) Тогда + Возврат ИнформацияОСвязях; + КонецЕсли; + + ЗаполнитьНаименованияЮридическогоЛица(ОбъектXDTO, ИнформацияОСвязях); + + ИнформацияОСвязях.РегистрационныйНомер = ОбъектXDTO.ОГРН; + ИнформацияОСвязях.КПП = ОбъектXDTO.КПП; + + ИнформацияОСвязях.ДатаРегистрации = ОбъектXDTO.СвНаимЮЛ.ДатаОбрЮЛ; + + ЗаполнитьИнформациюОСтатусе(ОбъектXDTO, ИнформацияОСвязях); + + ЗаполнитьЮридическийАдрес(ОбъектXDTO, ИнформацияОСвязях); + + ЗаполнитьРегистрациюВНалоговомОргане(ОбъектXDTO, ИнформацияОСвязях); + + ЗаполнитьРеквизитыПенсионногоФонда(ОбъектXDTO, ИнформацияОСвязях); + + ЗаполнитьРеквизитыФондаСоциальногоСтрахования(ОбъектXDTO, ИнформацияОСвязях); + + ЗаполнитьИнформациюОМассовостиАдреса(ОбъектXDTO, ИнформацияОСвязях); + + ЗаполнитьИнформациюОВидахДеятельности(ОбъектXDTO, ИнформацияОСвязях); + + ЗаполнитьИнформациюОЛицензиях(ОбъектXDTO, ИнформацияОСвязях); + + ЗаполнитьИнформациюОРуководителе(ОбъектXDTO, ИнформацияОСвязях); + + ЗаполнитьИнформациюОбУчрежденныхФирмах(ОбъектXDTO, ИнформацияОСвязях); + + ЗаполнитьИнформациюОбУчредителях(ОбъектXDTO, ИнформацияОСвязях); + + ЗаполнитьИнформациюОбУставномКапитале(ОбъектXDTO, ИнформацияОСвязях); + + ЗаполнитьИнформациюОПодразделениях(ОбъектXDTO, ИнформацияОСвязях); + + ЗаполнитьИнформациюОбИзмененияхВРеестре(ОбъектXDTO, ИнформацияОСвязях); + + Возврат ИнформацияОСвязях; + +КонецФункции + +// Возвращается информация о связях индивидуального предпринимателя с другими лицами по данным ЕГРЮЛ и ЕГРИП. +// +// Параметры: +// ИНН - Строка - ИНН индивидуального предпринимателя, информацию о связях которого надо получить. +// +// Возвращаемое значение: +// Структура - информация о связях индивидуального предпринимателя. +// Содержание структуры - см. функцию НоваяИнформацияОСвязяхПредпринимателя. +// +Функция ИнформацияОСвязяхПредпринимателяПоИНН(Знач ИНН) Экспорт + + ИнформацияОСвязях = НоваяИнформацияОСвязяхПредпринимателя(); + ИнформацияОСвязях.ИНН = ИНН; + + ОписаниеОшибки = ""; + ОбъектXDTO = Неопределено; + Прокси = ПроксиСервиса(ОписаниеОшибки); + Если Прокси <> Неопределено Тогда + ВходныеПараметры = Прокси.ФабрикаXDTO.Создать( + Прокси.ФабрикаXDTO.Тип(ПространствоИмен(), "checkPersonTrustabilityByInn")); + ВходныеПараметры.INN = ИНН; + ВходныеПараметры.configurationName = Метаданные.Имя; + Попытка + Ответ = Прокси.checkPersonTrustabilityByInn(ВходныеПараметры); + ОбъектXDTO = Ответ.PersonTrustability; + Исключение + ИнформацияОбОшибке = ИнформацияОбОшибке(); + ОписаниеОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru='ИНН %1:'"), ИНН) + + Символы.ПС + ПодробноеПредставлениеОшибки(ИнформацияОбОшибке); + КонецПопытки; + КонецЕсли; + + ОбработатьОшибкуСервиса(ОбъектXDTO, ОписаниеОшибки, "checkPersonTrustabilityByInn", ИнформацияОСвязях); + + Если ЗначениеЗаполнено(ИнформацияОСвязях.ОписаниеОшибки) Тогда + Возврат ИнформацияОСвязях; + КонецЕсли; + + ИнформацияОСвязях.Фамилия = ТРег(ОбъектXDTO.СвФЛ.ФИОРус.Фамилия); + ИнформацияОСвязях.Имя = ТРег(ОбъектXDTO.СвФЛ.ФИОРус.Имя); + ИнформацияОСвязях.Отчество = ТРег(ОбъектXDTO.СвФЛ.ФИОРус.Отчество); + ИнформацияОСвязях.Пол = ОбъектXDTO.СвФЛ.Пол; + + ИнформацияОСвязях.Наименование = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru='%1 %2 %3'"), + ИнформацияОСвязях.Фамилия, + ИнформацияОСвязях.Имя, + ИнформацияОСвязях.Отчество); + ИнформацияОСвязях.НаименованиеПолное = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru='Индивидуальный предприниматель %1'"), + ИнформацияОСвязях.Наименование); + ИнформацияОСвязях.НаименованиеСокращенное = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru='ИП %1'"), + ИнформацияОСвязях.Наименование); + + ИнформацияОСвязях.РегистрационныйНомер = ОбъектXDTO.ОГРН; + + Если ОбъектXDTO.СвГражд <> Неопределено Тогда + ИнформацияОСвязях.КодСтраныГражданства = ОбъектXDTO.СвГражд.ОКСМ; + КонецЕсли; + + Если ОбъектXDTO.СвРегИП <> Неопределено Тогда + ИнформацияОСвязях.ДатаРегистрации = ОбъектXDTO.СвРегИП.ДатаРег; + КонецЕсли; + + ЗаполнитьИнформациюОСтатусе(ОбъектXDTO, ИнформацияОСвязях); + + ЗаполнитьРегистрациюВНалоговомОргане(ОбъектXDTO, ИнформацияОСвязях); + + ЗаполнитьРеквизитыПенсионногоФонда(ОбъектXDTO, ИнформацияОСвязях); + + ЗаполнитьРеквизитыФондаСоциальногоСтрахования(ОбъектXDTO, ИнформацияОСвязях); + + ЗаполнитьИнформациюОВидахДеятельности(ОбъектXDTO, ИнформацияОСвязях); + + ЗаполнитьИнформациюОЛицензиях(ОбъектXDTO, ИнформацияОСвязях); + + ЗаполнитьСвязанныеОрганизацииФизическогоЛица( + ОбъектXDTO, + ИнформацияОСвязях, + ИнформацияОСвязях.ИНН, + ИнформацияОСвязях.ИНН); + + ЗаполнитьИнформациюОбИзмененияхВРеестре(ОбъектXDTO, ИнформацияОСвязях); + + Возврат ИнформацияОСвязях; + +КонецФункции + #КонецОбласти #Область ОписанияРеквизитов Функция НовыеРеквизитыЮридическогоЛица() - РеквизитыЮридическогоЛица = Новый Структура; + РеквизитыОрганизации = Новый Структура; // Заполняется на основе данных ЕГРЮЛ. - РеквизитыЮридическогоЛица.Вставить("ИНН"); // Строка, 10 - РеквизитыЮридическогоЛица.Вставить("КПП"); // Строка, 9 - РеквизитыЮридическогоЛица.Вставить("Наименование"); // Строка, 0 - РеквизитыЮридическогоЛица.Вставить("НаименованиеПолное"); // Строка, 0 - РеквизитыЮридическогоЛица.Вставить("НаименованиеСокращенное"); // Строка, 0 - РеквизитыЮридическогоЛица.Вставить("РегистрационныйНомер"); // Строка, 13 - ОГРН + РеквизитыОрганизации.Вставить("ИНН"); // Строка, 10 + РеквизитыОрганизации.Вставить("КПП"); // Строка, 9 + РеквизитыОрганизации.Вставить("Наименование"); // Строка, 0 + РеквизитыОрганизации.Вставить("НаименованиеПолное"); // Строка, 0 + РеквизитыОрганизации.Вставить("НаименованиеСокращенное"); // Строка, 0 + РеквизитыОрганизации.Вставить("РегистрационныйНомер"); // Строка, 13 - ОГРН // Следующие свойства могут содержать Неопределено в случае отсутствия в сервисе данных. - РеквизитыЮридическогоЛица.Вставить("ПравоваяФорма"); // Строка, 0 - РеквизитыЮридическогоЛица.Вставить("ЮридическийАдрес"); // Структура из НоваяКонтактнаяИнформация(). - РеквизитыЮридическогоЛица.Вставить("Телефон"); // Структура из НоваяКонтактнаяИнформация(). - РеквизитыЮридическогоЛица.Вставить("Руководитель"); // Структура из НовоеКонтактноеЛицо(). - РеквизитыЮридическогоЛица.Вставить("РегистрацияВНалоговомОргане"); // Структура из НоваяРегистрацияВНалоговомОргане(). - РеквизитыЮридическогоЛица.Вставить("ДатаРегистрации"); // Дата - РеквизитыЮридическогоЛица.Вставить("РегистрацияВПенсионномФонде"); // Структура из НоваяРегистрацияВПенсионномФонде(). - РеквизитыЮридическогоЛица.Вставить("РегистрацияВФСС"); // Структура из НоваяРегистрацияВФСС(). - РеквизитыЮридическогоЛица.Вставить("КодОКВЭД"); // Строка, 8 + РеквизитыОрганизации.Вставить("ПравоваяФорма"); // Строка, 0 + РеквизитыОрганизации.Вставить("ЮридическийАдрес"); // Структура из НоваяКонтактнаяИнформация(). + РеквизитыОрганизации.Вставить("Телефон"); // Структура из НоваяКонтактнаяИнформация(). + РеквизитыОрганизации.Вставить("Руководитель"); // Структура из НовоеКонтактноеЛицо(). + РеквизитыОрганизации.Вставить("РегистрацияВНалоговомОргане"); // Структура из НоваяРегистрацияВНалоговомОргане(). + РеквизитыОрганизации.Вставить("ДатаРегистрации"); // Дата + РеквизитыОрганизации.Вставить("РегистрацияВПенсионномФонде"); // Структура из НоваяРегистрацияВПенсионномФонде(). + РеквизитыОрганизации.Вставить("РегистрацияВФСС"); // Структура из НоваяРегистрацияВФСС(). + РеквизитыОрганизации.Вставить("КодОКВЭД"); // Строка, 8 // Служебный реквизит - РеквизитыЮридическогоЛица.Вставить("ОписаниеОшибки"); // Строка, 0 + РеквизитыОрганизации.Вставить("ОписаниеОшибки"); // Строка, 0 - Возврат РеквизитыЮридическогоЛица; + Возврат РеквизитыОрганизации; КонецФункции @@ -206,6 +451,73 @@ КонецФункции +Функция НоваяИнформацияОСвязяхЮридическогоЛица() + + ИнформацияОСвязях = НовыеРеквизитыЮридическогоЛица(); + + // Дополнительная информация о юридическом лице и его связях. + + ИнформацияОСвязях.Вставить("НаименованиеСтатуса"); // Строка + ИнформацияОСвязях.Вставить("КодСтатуса"); // Строка + + ИнформацияОСвязях.Вставить("УставныйКапитал"); // Число + + ИнформацияОСвязях.Вставить("ВидыДеятельности", НоваяТаблицаВидыДеятельности()); + + ИнформацияОСвязях.Вставить("Лицензии", НоваяТаблицаЛицензии()); + + // Все организации, которые зарегистрированы по тому же адресу, что и эта организация. + ИнформацияОСвязях.Вставить("ОрганизацииПоАдресу", НоваяТаблицаОрганизации()); + + // Все организации, где этот руководитель является руководителем. + ИнформацияОСвязях.Вставить("ОрганизацииГдеРуководитель", НоваяТаблицаОрганизации()); + ИнформацияОСвязях.Вставить("ОрганизацииГдеРуководительПоФИО", Ложь); + + // Все организации, где этот руководитель является учредителем. + ИнформацияОСвязях.Вставить("ОрганизацииГдеУчредитель", НоваяТаблицаОрганизацииГдеУчредитель()); + ИнформацияОСвязях.Вставить("ОрганизацииГдеУчредительПоФИО", Ложь); + + // Все организации, где эта организация является учредителем. + ИнформацияОСвязях.Вставить("УчрежденныеФирмы", НоваяТаблицаОрганизацииГдеУчредитель()); + + // Все учредители этой организации. + ИнформацияОСвязях.Вставить("Учредители", НоваяТаблицаУчредители()); + + ИнформацияОСвязях.Вставить("Подразделения", НоваяТаблицаПодразделения()); + + ИнформацияОСвязях.Вставить("ИзмененияВРеестре", НоваяТаблицаИзмененияВРеестре()); + + Возврат ИнформацияОСвязях; + +КонецФункции + +Функция НоваяИнформацияОСвязяхПредпринимателя() + + ИнформацияОСвязях = НовыеРеквизитыПредпринимателя(); + + // Дополнительная информация о предпринимателе и его связях. + + ИнформацияОСвязях.Вставить("НаименованиеСтатуса"); // Строка + ИнформацияОСвязях.Вставить("КодСтатуса"); // Строка + + ИнформацияОСвязях.Вставить("ВидыДеятельности", НоваяТаблицаВидыДеятельности()); + + ИнформацияОСвязях.Вставить("Лицензии", НоваяТаблицаЛицензии()); + + // Все организации, где этот предприниматель является руководителем. + ИнформацияОСвязях.Вставить("ОрганизацииГдеРуководитель", НоваяТаблицаОрганизации()); + ИнформацияОСвязях.Вставить("ОрганизацииГдеРуководительПоФИО", Ложь); + + // Все организации, где этот предприниматель является учредителем. + ИнформацияОСвязях.Вставить("ОрганизацииГдеУчредитель", НоваяТаблицаОрганизацииГдеУчредитель()); + ИнформацияОСвязях.Вставить("ОрганизацииГдеУчредительПоФИО", Ложь); + + ИнформацияОСвязях.Вставить("ИзмененияВРеестре", НоваяТаблицаИзмененияВРеестре()); + + Возврат ИнформацияОСвязях; + +КонецФункции + Функция НоваяКонтактнаяИнформация() Результат = Новый Структура; @@ -219,11 +531,13 @@ Функция НовоеКонтактноеЛицо() Результат = Новый Структура; - Результат.Вставить("Должность"); // Строка, 0 - Результат.Вставить("Фамилия"); // Строка, 0 - Результат.Вставить("Имя"); // Строка, 0 - Результат.Вставить("Отчество"); // Строка, 0 - Результат.Вставить("ИНН"); // Строка, 12 + Результат.Вставить("Должность"); // Строка, 0 + Результат.Вставить("Фамилия"); // Строка, 0 + Результат.Вставить("Имя"); // Строка, 0 + Результат.Вставить("Отчество"); // Строка, 0 + Результат.Вставить("Представление"); // Строка, 0 + Результат.Вставить("ИНН"); // Строка, 12 + Результат.Вставить("ДатаЗаписи"); // Дата Возврат Результат; КонецФункции @@ -231,10 +545,11 @@ Функция НоваяРегистрацияВНалоговомОргане() Результат = Новый Структура; - Результат.Вставить("Код"); // Строка, 4 - Результат.Вставить("Наименование"); // Строка, 0 - Результат.Вставить("ОКТМО"); // Строка, 11 - Результат.Вставить("ОКАТО"); // Строка, 11 + Результат.Вставить("Код"); // Строка, 4 + Результат.Вставить("Наименование"); // Строка, 0 + Результат.Вставить("ОКТМО"); // Строка, 11 + Результат.Вставить("ОКАТО"); // Строка, 11 + Результат.Вставить("ДатаРегистрации"); // Дата Возврат Результат; КонецФункции @@ -245,6 +560,7 @@ Результат.Вставить("РегистрационныйНомерПФР"); // Строка, 14 Результат.Вставить("КодОрганаПФР"); // Строка, 7 Результат.Вставить("НаименованиеОрганаПФР"); // Строка, 0 + Результат.Вставить("ДатаРегистрации"); // Дата Возврат Результат; КонецФункции @@ -256,6 +572,7 @@ Результат.Вставить("КодПодчиненности"); // Строка, 5 Результат.Вставить("КодОрганаФСС"); // Строка, 4 Результат.Вставить("НаименованиеОрганаФСС"); // Строка, 0 + Результат.Вставить("ДатаРегистрации"); // Дата Возврат Результат; КонецФункции @@ -270,9 +587,84 @@ КонецФункции +Функция НоваяТаблицаВидыДеятельности() + + Результат = Новый ТаблицаЗначений; + Результат.Колонки.Добавить("КодОКВЭД", Новый ОписаниеТипов("Строка")); + Результат.Колонки.Добавить("НаименованиеОКВЭД", Новый ОписаниеТипов("Строка")); + Возврат Результат; + +КонецФункции + +Функция НоваяТаблицаЛицензии() + + Результат = Новый ТаблицаЗначений; + Результат.Колонки.Добавить("Лицензия", Новый ОписаниеТипов("Строка")); + Результат.Колонки.Добавить("ОписаниеЛицензии", Новый ОписаниеТипов("Строка")); + Возврат Результат; + +КонецФункции + +Функция НоваяТаблицаИзмененияВРеестре() + + Результат = Новый ТаблицаЗначений; + Результат.Колонки.Добавить("ДатаИзменения", Новый ОписаниеТипов("Дата")); + Результат.Колонки.Добавить("ГосударственныйОрган", Новый ОписаниеТипов("Строка")); + Результат.Колонки.Добавить("ОписаниеИзменения", Новый ОписаниеТипов("Строка")); + Возврат Результат; + +КонецФункции + +Функция НоваяТаблицаПодразделения() + + Результат = Новый ТаблицаЗначений; + Результат.Колонки.Добавить("ОписаниеПодразделения", Новый ОписаниеТипов("Строка")); + Возврат Результат; + +КонецФункции + +Функция НоваяТаблицаОрганизации() + + Результат = Новый ТаблицаЗначений; + Результат.Колонки.Добавить("НаименованиеОрганизации", Новый ОписаниеТипов("Строка")); + Результат.Колонки.Добавить("ИНН", Новый ОписаниеТипов("Строка")); + Результат.Колонки.Добавить("КодСтатуса", Новый ОписаниеТипов("Строка")); + Результат.Колонки.Добавить("НаименованиеСтатуса", Новый ОписаниеТипов("Строка")); + Возврат Результат; + +КонецФункции + +Функция НоваяТаблицаОрганизацииГдеУчредитель() + + Результат = Новый ТаблицаЗначений; + Результат.Колонки.Добавить("ИНН", Новый ОписаниеТипов("Строка")); + Результат.Колонки.Добавить("НаименованиеОрганизации", Новый ОписаниеТипов("Строка")); + Результат.Колонки.Добавить("КодСтатуса", Новый ОписаниеТипов("Строка")); + Результат.Колонки.Добавить("НаименованиеСтатуса", Новый ОписаниеТипов("Строка")); + Результат.Колонки.Добавить("ПроцентКапитала", Новый ОписаниеТипов("Число", Новый КвалификаторыЧисла(10, 6))); + Результат.Колонки.Добавить("СуммаКапитала", Новый ОписаниеТипов("Число", Новый КвалификаторыЧисла(15, 2))); + Возврат Результат; + +КонецФункции + +Функция НоваяТаблицаУчредители() + + Результат = Новый ТаблицаЗначений; + Результат.Колонки.Добавить("Учредитель", Новый ОписаниеТипов("Строка")); + Результат.Колонки.Добавить("ИНН", Новый ОписаниеТипов("Строка")); + Результат.Колонки.Добавить("ПроцентКапитала", Новый ОписаниеТипов("Число", Новый КвалификаторыЧисла(10, 6))); + Результат.Колонки.Добавить("СуммаКапитала", Новый ОписаниеТипов("Число", Новый КвалификаторыЧисла(15, 2))); + Результат.Колонки.Добавить("ОрганизацииГдеРуководитель"); // Таблица значений + Результат.Колонки.Добавить("ОрганизацииГдеРуководительПоФИО", Новый ОписаниеТипов("Булево")); + Результат.Колонки.Добавить("ОрганизацииГдеУчредитель"); // Таблица значений + Результат.Колонки.Добавить("ОрганизацииГдеУчредительПоФИО", Новый ОписаниеТипов("Булево")); + Возврат Результат; + +КонецФункции + #КонецОбласти -#Область СлужебныеПроцедурыИФункции +#Область ЗаполнениеРеквизитов Процедура ЗаполнитьНаименованияЮридическогоЛица(ОбъектXDTO, Реквизиты) @@ -300,12 +692,13 @@ Реквизиты.НаименованиеСокращенное = ОбъектXDTO.СвНаимЮЛ.НаимЮЛСокр; Если НЕ ЗначениеЗаполнено(Реквизиты.НаименованиеСокращенное) - ИЛИ Реквизиты.НаименованиеСокращенное = "-" Тогда + ИЛИ НЕ ЗначениеЗаполнено(СтрЗаменить(Реквизиты.НаименованиеСокращенное, "-", "")) + ИЛИ ВРег(Реквизиты.НаименованиеСокращенное) = "НЕТ" Тогда Реквизиты.НаименованиеСокращенное = Реквизиты.НаименованиеПолное; КонецЕсли; Реквизиты.Наименование = Реквизиты.НаименованиеСокращенное; - Поз = Найти(Реквизиты.Наименование, """"); + Поз = СтрНайти(Реквизиты.Наименование, """"); Если Поз > 0 И Поз <= 10 Тогда Реквизиты.Наименование = СокрП(Сред(Реквизиты.Наименование, Поз)) + " " + СокрП(Лев(Реквизиты.Наименование, Поз-1)); Реквизиты.Наименование = СтрЗаменить(Реквизиты.Наименование, """", ""); @@ -342,12 +735,12 @@ ИначеЕсли ТипЗнч(ЗначениеСвойства) = Тип("Строка") Тогда - МассивСлов = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивСлов(ЗначениеСвойства, " "); + МассивСлов = СтрРазделить(ЗначениеСвойства, " ", Ложь); МаксИндексСлова = ?(МассивСлов.Количество() = 1, 0, МассивСлов.Количество() - 2); Для ИндексСлова = 0 По МаксИндексСлова Цикл МассивСлов[ИндексСлова] = ТРег(МассивСлов[ИндексСлова]); КонецЦикла; - Объект[СвойствоОбъекта.Имя] = СтроковыеФункцииКлиентСервер.СтрокаИзМассиваПодстрок(МассивСлов, " "); + Объект[СвойствоОбъекта.Имя] = СтрСоединить(МассивСлов, " "); Иначе @@ -368,8 +761,9 @@ Реквизиты.РегистрацияВНалоговомОргане = НоваяРегистрацияВНалоговомОргане(); - Реквизиты.РегистрацияВНалоговомОргане.Код = ОбъектXDTO.СвУчетНО.СвНО.КодНО; - Реквизиты.РегистрацияВНалоговомОргане.Наименование = ОбъектXDTO.СвУчетНО.СвНО.НаимНО; + Реквизиты.РегистрацияВНалоговомОргане.Код = ОбъектXDTO.СвУчетНО.СвНО.КодНО; + Реквизиты.РегистрацияВНалоговомОргане.Наименование = ОбъектXDTO.СвУчетНО.СвНО.НаимНО; + Реквизиты.РегистрацияВНалоговомОргане.ДатаРегистрации = ОбъектXDTO.СвУчетНО.ДатаПостУч; Если ОбъектXDTO.Свойства().Получить("СвАдрес") <> Неопределено // Адрес есть только у юридических лиц И ОбъектXDTO.СвАдрес <> Неопределено @@ -405,6 +799,378 @@ КонецПроцедуры +Процедура ЗаполнитьИнформациюОВидахДеятельности(ОбъектXDTO, ИнформацияОСвязях) + + Если ОбъектXDTO.СвОКВЭД <> Неопределено Тогда + + // Сначала добавляем строку с основным кодом. + Для Каждого ЭлементОКВЭД Из ОбъектXDTO.СвОКВЭД Цикл + Если ЭлементОКВЭД.ПрОснДоп = "1" Тогда + НоваяСтрока = ИнформацияОСвязях.ВидыДеятельности.Добавить(); + НоваяСтрока.КодОКВЭД = ЭлементОКВЭД.КодОКВЭД; + Прервать; + КонецЕсли; + КонецЦикла; + // Затем добавляем строки с неосновными кодами. + Для Каждого ЭлементОКВЭД Из ОбъектXDTO.СвОКВЭД Цикл + Если ЭлементОКВЭД.ПрОснДоп = "1" Тогда + Продолжить; + КонецЕсли; + НоваяСтрока = ИнформацияОСвязях.ВидыДеятельности.Добавить(); + НоваяСтрока.КодОКВЭД = ЭлементОКВЭД.КодОКВЭД; + КонецЦикла; + + КонецЕсли; + +КонецПроцедуры + +Процедура ЗаполнитьИнформациюОЛицензиях(ОбъектXDTO, ИнформацияОСвязях) + + Если ОбъектXDTO.СвЛицензия <> Неопределено Тогда + + Для каждого СтрокаЛицензии Из ОбъектXDTO.СвЛицензия Цикл + НоваяСтрока = ИнформацияОСвязях.Лицензии.Добавить(); + НоваяСтрока.Лицензия = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru='%1 от %2'"), + СтрокаЛицензии.НомЛиц, + Формат(СтрокаЛицензии.ДатаЛиц, "ДЛФ=D")); + Если СтрокаЛицензии.НаимЛицВидДеят <> Неопределено Тогда + ОписаниеЛицензии = ""; + Для каждого СтрокаОписания Из СтрокаЛицензии.НаимЛицВидДеят Цикл + ОписаниеЛицензии = ОписаниеЛицензии + ?(ПустаяСтрока(ОписаниеЛицензии), "", ", ") + СтрокаОписания; + КонецЦикла; + НоваяСтрока.ОписаниеЛицензии = ОписаниеЛицензии; + КонецЕсли; + КонецЦикла; + + КонецЕсли; + +КонецПроцедуры + +Процедура ЗаполнитьИнформациюОПодразделениях(ОбъектXDTO, ИнформацияОСвязях) + + Если ОбъектXDTO.СвПодразд <> Неопределено Тогда + + ПространствоИменКИ = УправлениеКонтактнойИнформациейКлиентСервер.ПространствоИмен(); + + Для каждого СтрокаПодразделения Из ОбъектXDTO.СвПодразд Цикл + + ОписаниеПодразделения = ""; + Если СтрокаПодразделения.АдрМНРФ <> Неопределено + И СтрокаПодразделения.АдрМНРФ.Состав <> Неопределено Тогда + + АдресРФ_КИ = ФабрикаXDTO.Создать(ФабрикаXDTO.Тип(ПространствоИменКИ, "АдресРФ")); + ЗаполнитьОбъектXDTOКонтактнойИнформации(ФабрикаXDTO, АдресРФ_КИ, СтрокаПодразделения.АдрМНРФ.Состав); + КИ = ФабрикаXDTO.Создать(ФабрикаXDTO.Тип(ПространствоИменКИ, "КонтактнаяИнформация")); + КИ.Состав = ФабрикаXDTO.Создать(ФабрикаXDTO.Тип(ПространствоИменКИ, "Адрес")); + КИ.Состав.Страна = ОбъектXDTO.СвАдрес.Адрес.Страна; + КИ.Состав.Состав = АдресРФ_КИ; + КИ.Представление = УправлениеКонтактнойИнформацией.ПредставлениеКонтактнойИнформации(КИ, + Новый Структура("Тип", Перечисления.ТипыКонтактнойИнформации.Адрес)); + + ОписаниеПодразделения = КИ.Представление; + + ИначеЕсли СтрокаПодразделения.АдрМНИн <> Неопределено Тогда + + ОписаниеПодразделения = СтрокаПодразделения.АдрМНИн.АдрИн; + + ИначеЕсли СтрокаПодразделения.НаимПолн <> Неопределено Тогда + + ОписаниеПодразделения = СтрокаПодразделения.НаимПолн; + + КонецЕсли; + + Если НЕ ПустаяСтрока(ОписаниеПодразделения) Тогда + НоваяСтрока = ИнформацияОСвязях.Подразделения.Добавить(); + НоваяСтрока.ОписаниеПодразделения = ОписаниеПодразделения; + КонецЕсли; + + КонецЦикла; + + КонецЕсли; + +КонецПроцедуры + +Процедура ЗаполнитьИнформациюОбИзмененияхВРеестре(ОбъектXDTO, ИнформацияОСвязях) + + Если ОбъектXDTO.СвЗапДейств <> Неопределено Тогда + + Для каждого СтрокаИзменения Из ОбъектXDTO.СвЗапДейств Цикл + НоваяСтрока = ИнформацияОСвязях.ИзмененияВРеестре.Добавить(); + НоваяСтрока.ДатаИзменения = СтрокаИзменения.ДатаЗап; + Если СтрокаИзменения.СвРегОрг <> Неопределено Тогда + НоваяСтрока.ГосударственныйОрган = СтрокаИзменения.СвРегОрг.НаимНО; + КонецЕсли; + ОписаниеИзменения = ""; + Если СтрокаИзменения.ВидЗап <> Неопределено Тогда + ОписаниеИзменения = ОписаниеИзменения + СтрокаИзменения.ВидЗап.НаимВидЗап; + КонецЕсли; + Если СтрокаИзменения.СвСвид <> Неопределено Тогда + Для каждого СтрокаСвидетельства Из СтрокаИзменения.СвСвид Цикл + ОписаниеИзменения = ОписаниеИзменения + ?(ПустаяСтрока(ОписаниеИзменения), "", Символы.ПС) + + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru='Выдано свидетельство %1 %2'"), + СтрокаСвидетельства.Серия, + СтрокаСвидетельства.Номер); + КонецЦикла; + КонецЕсли; + НоваяСтрока.ОписаниеИзменения = ОписаниеИзменения; + КонецЦикла; + + КонецЕсли; + +КонецПроцедуры + +Процедура ЗаполнитьИнформациюОРуководителе(ОбъектXDTO, ИнформацияОСвязях) + + Если ОбъектXDTO.СвУправлДеятСвязЮЛ <> Неопределено + И ОбъектXDTO.СвУправлДеятСвязЮЛ.СведДолжнФЛСвязЮЛ <> Неопределено Тогда + + Для каждого СтрокаРуководителя Из ОбъектXDTO.СвУправлДеятСвязЮЛ.СведДолжнФЛСвязЮЛ Цикл + + Если ПолучитьДанныеОРуководителеИНомерТелефона(СтрокаРуководителя.СведДолжнФЛ, ИнформацияОСвязях) Тогда + ЗаполнитьСвязанныеОрганизацииФизическогоЛица( + СтрокаРуководителя, + ИнформацияОСвязях, + ИнформацияОСвязях.ИНН, + ИнформацияОСвязях.Руководитель.ИНН); + Прервать; + КонецЕсли; + + КонецЦикла; + + КонецЕсли; + +КонецПроцедуры + +Процедура ЗаполнитьИнформациюОбУчрежденныхФирмах(ОбъектXDTO, ИнформацияОСвязях) + + Если ОбъектXDTO.СвязЮЛПоУчредителю <> Неопределено + И ОбъектXDTO.СвязЮЛПоУчредителю.СвязЮЛ <> Неопределено Тогда + + Для каждого ОбъектXDTOСвязЮЛ Из ОбъектXDTO.СвязЮЛПоУчредителю.СвязЮЛ Цикл + ЗаполнитьСтрокуОбУчредителе(ОбъектXDTOСвязЮЛ, ИнформацияОСвязях.УчрежденныеФирмы, ИнформацияОСвязях.ИНН); + КонецЦикла; + + КонецЕсли; + +КонецПроцедуры + +Процедура ЗаполнитьИнформациюОбУчредителях(ОбъектXDTO, ИнформацияОСвязях) + + Если ОбъектXDTO.СвУчредитСвязЮЛ <> Неопределено Тогда + + // Учредители - российские юридические лица. + + Если ОбъектXDTO.СвУчредитСвязЮЛ.УчрЮЛРосСвязЮЛ <> Неопределено Тогда + + Для каждого ДанныеУчредителя Из ОбъектXDTO.СвУчредитСвязЮЛ.УчрЮЛРосСвязЮЛ Цикл + + СтрокаУчредителя = ИнформацияОСвязях.Учредители.Добавить(); + СтрокаУчредителя.ОрганизацииГдеРуководитель = НоваяТаблицаОрганизации(); + СтрокаУчредителя.ОрганизацииГдеУчредитель = НоваяТаблицаОрганизацииГдеУчредитель(); + + СтрокаУчредителя.Учредитель = ДанныеУчредителя.УчрЮЛРос.НаимЮЛПолн; + СтрокаУчредителя.ИНН = ?(СтрДлина(ДанныеУчредителя.УчрЮЛРос.ИННЮЛ) = 10, ДанныеУчредителя.УчрЮЛРос.ИННЮЛ, ""); + + Если ДанныеУчредителя.УчрЮЛРос.ДоляУстКап <> Неопределено Тогда + СтрокаУчредителя.СуммаКапитала = ДанныеУчредителя.УчрЮЛРос.ДоляУстКап.НоминСтоим; + СтрокаУчредителя.ПроцентКапитала = ДанныеУчредителя.УчрЮЛРос.ДоляУстКап.Процент; + КонецЕсли; + + // Еще организации, где этот учредитель является учредителем. + + Если ДанныеУчредителя.связЮЛПоУчредителю <> Неопределено + И ДанныеУчредителя.связЮЛПоУчредителю.связЮЛ <> Неопределено Тогда + + Для каждого ОбъектXDTOСвязЮЛ Из ДанныеУчредителя.связЮЛПоУчредителю.связЮЛ Цикл + ЗаполнитьСтрокуОбУчредителе(ОбъектXDTOСвязЮЛ, СтрокаУчредителя.ОрганизацииГдеУчредитель, ИнформацияОСвязях.ИНН); + КонецЦикла; + + КонецЕсли; + + КонецЦикла; + + КонецЕсли; + + // Учредители - иностранные юридические лица. + + Если ОбъектXDTO.СвУчредитСвязЮЛ.УчрЮЛИнСвязЮЛ <> Неопределено Тогда + + Для каждого ДанныеУчредителя Из ОбъектXDTO.СвУчредитСвязЮЛ.УчрЮЛИнСвязЮЛ Цикл + + СтрокаУчредителя = ИнформацияОСвязях.Учредители.Добавить(); + СтрокаУчредителя.ОрганизацииГдеРуководитель = НоваяТаблицаОрганизации(); + СтрокаУчредителя.ОрганизацииГдеУчредитель = НоваяТаблицаОрганизацииГдеУчредитель(); + + Учредитель = ДанныеУчредителя.УчрЮЛИн.НаимЮЛПолн; + Если ДанныеУчредителя.УчрЮЛИн.СвРегИн <> Неопределено Тогда + Учредитель = Учредитель + " (" + ДанныеУчредителя.УчрЮЛИн.СвРегИн.НаимСтран + ")"; + КонецЕсли; + СтрокаУчредителя.Учредитель = Учредитель; + + Если ДанныеУчредителя.УчрЮЛИн.ДоляУстКап <> Неопределено Тогда + СтрокаУчредителя.СуммаКапитала = ДанныеУчредителя.УчрЮЛИн.ДоляУстКап.НоминСтоим; + СтрокаУчредителя.ПроцентКапитала = ДанныеУчредителя.УчрЮЛИн.ДоляУстКап.Процент; + КонецЕсли; + + // Еще организации, где этот учредитель является учредителем. + + Если ДанныеУчредителя.связЮЛПоУчредителю <> Неопределено + И ДанныеУчредителя.связЮЛПоУчредителю.связЮЛ <> Неопределено Тогда + + Для каждого ОбъектXDTOСвязЮЛ Из ДанныеУчредителя.связЮЛПоУчредителю.связЮЛ Цикл + ЗаполнитьСтрокуОбУчредителе(ОбъектXDTOСвязЮЛ, СтрокаУчредителя.ОрганизацииГдеУчредитель, ИнформацияОСвязях.ИНН); + КонецЦикла; + + КонецЕсли; + + КонецЦикла; + + КонецЕсли; + + // Учредители - физические лица. + + Если ОбъектXDTO.СвУчредитСвязЮЛ.УчрФЛСвязЮЛ <> Неопределено Тогда + + Для каждого ДанныеУчредителя Из ОбъектXDTO.СвУчредитСвязЮЛ.УчрФЛСвязЮЛ Цикл + + СтрокаУчредителя = ИнформацияОСвязях.Учредители.Добавить(); + СтрокаУчредителя.ОрганизацииГдеРуководитель = НоваяТаблицаОрганизации(); + СтрокаУчредителя.ОрганизацииГдеУчредитель = НоваяТаблицаОрганизацииГдеУчредитель(); + + Учредитель = НовоеКонтактноеЛицо(); + Если ДанныеУчредителя.УчрФЛ.ФИО <> Неопределено Тогда + Учредитель.Фамилия = ТРег(ДанныеУчредителя.УчрФЛ.ФИО.Фамилия); + Учредитель.Имя = ТРег(ДанныеУчредителя.УчрФЛ.ФИО.Имя); + Учредитель.Отчество = ТРег(ДанныеУчредителя.УчрФЛ.ФИО.Отчество); + Учредитель.ИНН = ДанныеУчредителя.УчрФЛ.ИННФЛ; + Учредитель.Представление = СокрЛП(СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru='%1 %2 %3'"), + Учредитель.Фамилия, + Учредитель.Имя, + Учредитель.Отчество)); + КонецЕсли; + + СтрокаУчредителя.Учредитель = Учредитель.Представление; + СтрокаУчредителя.ИНН = ?(СтрДлина(Учредитель.ИНН) = 12, Учредитель.ИНН, ""); + + Если ДанныеУчредителя.УчрФЛ.ДоляУстКап <> Неопределено Тогда + СтрокаУчредителя.СуммаКапитала = ДанныеУчредителя.УчрФЛ.ДоляУстКап.НоминСтоим; + СтрокаУчредителя.ПроцентКапитала = ДанныеУчредителя.УчрФЛ.ДоляУстКап.Процент; + КонецЕсли; + + ЗаполнитьСвязанныеОрганизацииФизическогоЛица( + ДанныеУчредителя, + СтрокаУчредителя, + ИнформацияОСвязях.ИНН, + СтрокаУчредителя.ИНН); + + КонецЦикла; + + КонецЕсли; + + КонецЕсли; + +КонецПроцедуры + +Процедура ЗаполнитьСвязанныеОрганизацииФизическогоЛица(ДанныеФизЛица, Результат, ИННКонтрагента, ИННФизЛица) + + Если ДанныеФизЛица.СвязЮЛПоПарам <> Неопределено Тогда + + // Организации, где это физическое лицо является руководителем. + + Если ЗначениеЗаполнено(ИННФизЛица) + И ДанныеФизЛица.СвязЮЛПоПарам.связЮЛПоДиректоруПоИНН <> Неопределено + И ДанныеФизЛица.СвязЮЛПоПарам.связЮЛПоДиректоруПоИНН.corporationsFound > 0 + И ДанныеФизЛица.СвязЮЛПоПарам.связЮЛПоДиректоруПоИНН.связЮЛ <> Неопределено Тогда + + Для каждого ОбъектXDTOСвязЮЛ Из ДанныеФизЛица.СвязЮЛПоПарам.связЮЛПоДиректоруПоИНН.связЮЛ Цикл + ЗаполнитьСтрокуОбОрганизации(ОбъектXDTOСвязЮЛ, Результат.ОрганизацииГдеРуководитель, ИННКонтрагента); + КонецЦикла; + + ИначеЕсли НЕ ЗначениеЗаполнено(ИННФизЛица) + И ДанныеФизЛица.СвязЮЛПоПарам.связЮЛПоДиректоруПоФИО <> Неопределено + И ДанныеФизЛица.СвязЮЛПоПарам.связЮЛПоДиректоруПоФИО.corporationsFound > 0 + И ДанныеФизЛица.СвязЮЛПоПарам.связЮЛПоДиректоруПоФИО.связЮЛ <> Неопределено Тогда + + Для каждого ОбъектXDTOСвязЮЛ Из ДанныеФизЛица.СвязЮЛПоПарам.связЮЛПоДиректоруПоФИО.связЮЛ Цикл + ЗаполнитьСтрокуОбОрганизации(ОбъектXDTOСвязЮЛ, Результат.ОрганизацииГдеРуководитель, ИННКонтрагента); + КонецЦикла; + Результат.ОрганизацииГдеРуководительПоФИО = Истина; + + КонецЕсли; + + // Организации, где это физическое лицо является учредителем. + + Если ЗначениеЗаполнено(ИННФизЛица) + И ДанныеФизЛица.СвязЮЛПоПарам.связЮЛПоУчредителюПоИНН <> Неопределено + И ДанныеФизЛица.СвязЮЛПоПарам.связЮЛПоУчредителюПоИНН.corporationsFound > 0 + И ДанныеФизЛица.СвязЮЛПоПарам.связЮЛПоУчредителюПоИНН.связЮЛ <> Неопределено Тогда + + Для каждого ОбъектXDTOСвязЮЛ Из ДанныеФизЛица.СвязЮЛПоПарам.связЮЛПоУчредителюПоИНН.связЮЛ Цикл + ЗаполнитьСтрокуОбУчредителе(ОбъектXDTOСвязЮЛ, Результат.ОрганизацииГдеУчредитель, ИННКонтрагента); + КонецЦикла; + + ИначеЕсли НЕ ЗначениеЗаполнено(ИННФизЛица) + И ДанныеФизЛица.СвязЮЛПоПарам.связЮЛПоУчредителюПоФИО <> Неопределено + И ДанныеФизЛица.СвязЮЛПоПарам.связЮЛПоУчредителюПоФИО.corporationsFound > 0 + И ДанныеФизЛица.СвязЮЛПоПарам.связЮЛПоУчредителюПоФИО.связЮЛ <> Неопределено Тогда + + Для каждого ОбъектXDTOСвязЮЛ Из ДанныеФизЛица.СвязЮЛПоПарам.связЮЛПоУчредителюПоФИО.связЮЛ Цикл + ЗаполнитьСтрокуОбУчредителе(ОбъектXDTOСвязЮЛ, Результат.ОрганизацииГдеУчредитель, ИННКонтрагента); + КонецЦикла; + Результат.ОрганизацииГдеУчредительПоФИО = Истина; + + КонецЕсли; + + КонецЕсли; + +КонецПроцедуры + +Процедура ЗаполнитьИнформациюОбУставномКапитале(ОбъектXDTO, ИнформацияОСвязях) + + Если ОбъектXDTO.СвУстКап <> Неопределено Тогда + + ИнформацияОСвязях.УставныйКапитал = ОбъектXDTO.СвУстКап.СумКап; + + ИначеЕсли ИнформацияОСвязях.Учредители.Количество() > 0 Тогда + + ИнформацияОСвязях.УставныйКапитал = ИнформацияОСвязях.Учредители.Итог("СуммаКапитала"); + + Иначе + + ИнформацияОСвязях.УставныйКапитал = 0; + + КонецЕсли; + +КонецПроцедуры + +Процедура ЗаполнитьИнформациюОСтатусе(ОбъектXDTO, Данные) + + Если ОбъектXDTO.СвСтатус_РО <> Неопределено + И ОбъектXDTO.СвСтатус_РО.СвСтатус <> Неопределено Тогда + + Данные.НаименованиеСтатуса = ОбъектXDTO.СвСтатус_РО.СвСтатус.НаимСтатус; + Данные.КодСтатуса = ОбъектXDTO.СвСтатус_РО.СвСтатус.КодСтатус; + + КонецЕсли; + +КонецПроцедуры + +Процедура ЗаполнитьИнформациюОМассовостиАдреса(ОбъектXDTO, ИнформацияОСвязях) + + Если ОбъектXDTO.СвязЮЛПоАдресу <> Неопределено + И ОбъектXDTO.СвязЮЛПоАдресу.СвязЮЛ <> Неопределено Тогда + + Для каждого ОбъектXDTOСвязЮЛ Из ОбъектXDTO.СвязЮЛПоАдресу.СвязЮЛ Цикл + ЗаполнитьСтрокуОбОрганизации(ОбъектXDTOСвязЮЛ, ИнформацияОСвязях.ОрганизацииПоАдресу, ИнформацияОСвязях.ИНН); + КонецЦикла; + + КонецЕсли; + +КонецПроцедуры + Процедура ЗаполнитьРеквизитыПенсионногоФонда(ОбъектXDTO, Реквизиты) Если ОбъектXDTO.СвРегПФ <> Неопределено Тогда @@ -413,7 +1179,7 @@ РегистрационныйНомерПФР = ОбъектXDTO.СвРегПФ.РегНомПФ; РегистрационныйНомерПФР = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru='%1-%2-%3'"), - Лев(РегистрационныйНомерПФР, 3), Сред(РегистрационныйНомерПФР,4, 3), Прав(РегистрационныйНомерПФР, 6)); + Лев(РегистрационныйНомерПФР, 3), Сред(РегистрационныйНомерПФР,4, 3), Прав(РегистрационныйНомерПФР, 6)); РегистрацияВПФР.РегистрационныйНомерПФР = РегистрационныйНомерПФР; Если ОбъектXDTO.СвРегПФ.СвОргПФ <> Неопределено Тогда КодОрганаПФР = ОбъектXDTO.СвРегПФ.СвОргПФ.КодПФ; @@ -422,6 +1188,7 @@ РегистрацияВПФР.КодОрганаПФР = КодОрганаПФР; РегистрацияВПФР.НаименованиеОрганаПФР = ОбъектXDTO.СвРегПФ.СвОргПФ.НаимПФ; КонецЕсли; + РегистрацияВПФР.ДатаРегистрации = ОбъектXDTO.СвРегПФ.ДатаРег; Реквизиты.РегистрацияВПенсионномФонде = РегистрацияВПФР; @@ -450,6 +1217,7 @@ РегистрацияВФСС.КодОрганаФСС = ОбъектXDTO.СвРегФСС.СвОргФСС.КодФСС; РегистрацияВФСС.НаименованиеОрганаФСС = ОбъектXDTO.СвРегФСС.СвОргФСС.НаимФСС; КонецЕсли; + РегистрацияВФСС.ДатаРегистрации = ОбъектXDTO.СвРегФСС.ДатаРег; Реквизиты.РегистрацияВФСС = РегистрацияВФСС; @@ -490,7 +1258,7 @@ Процедура ЗаполнитьЮридическийАдрес(ОбъектXDTO, Реквизиты) - ПространствоИменКИ = УправлениеКонтактнойИнформациейКлиентСерверПовтИсп.ПространствоИмен(); + ПространствоИменКИ = УправлениеКонтактнойИнформациейКлиентСервер.ПространствоИмен(); Если ОбъектXDTO.СвАдрес <> Неопределено И ОбъектXDTO.СвАдрес.Адрес <> Неопределено Тогда @@ -517,47 +1285,12 @@ Процедура ЗаполнитьРуководителяИНомерТелефона(ОбъектXDTO, Реквизиты) - ПространствоИменКИ = УправлениеКонтактнойИнформациейКлиентСерверПовтИсп.ПространствоИмен(); - Если ОбъектXDTO.СвУправлДеят <> Неопределено И ОбъектXDTO.СвУправлДеят.СведДолжнФЛ <> Неопределено Тогда Для каждого СведенияОДолжности Из ОбъектXDTO.СвУправлДеят.СведДолжнФЛ Цикл - Если Найти(СведенияОДолжности.НаимВидДолжн, "Руководитель") > 0 - И СведенияОДолжности.ФИО <> Неопределено Тогда - - // Руководитель - СтруктураКИ = НовоеКонтактноеЛицо(); - СтруктураКИ.Фамилия = ТРег(СведенияОДолжности.ФИО.Фамилия); - СтруктураКИ.Имя = ТРег(СведенияОДолжности.ФИО.Имя); - СтруктураКИ.Отчество = ТРег(СведенияОДолжности.ФИО.Отчество); - СтруктураКИ.Должность = ПредложениеСЗаглавнойБуквы(СведенияОДолжности.НаимДолжн); - СтруктураКИ.ИНН = СведенияОДолжности.ИННФЛ; - - Реквизиты.Руководитель = СтруктураКИ; - - // Номер телефона - Если ЗначениеЗаполнено(СведенияОДолжности.НомТел) Тогда - КИ = ФабрикаXDTO.Создать(ФабрикаXDTO.Тип(ПространствоИменКИ, "КонтактнаяИнформация")); - КИ.Состав = ФабрикаXDTO.Создать(ФабрикаXDTO.Тип(ПространствоИменКИ, "НомерТелефона")); - Если Лев(СведенияОДолжности.НомТел, 1) = "(" Тогда - КонецКодаГорода = Найти(СведенияОДолжности.НомТел, ")"); - КИ.Состав.КодГорода = Сред(СведенияОДолжности.НомТел, 2, КонецКодаГорода - 2); - КИ.Состав.Номер = Сред(СведенияОДолжности.НомТел, КонецКодаГорода + 1); - Иначе - КИ.Состав.Номер = СведенияОДолжности.НомТел; - КонецЕсли; - КИ.Представление = УправлениеКонтактнойИнформацией.ПредставлениеКонтактнойИнформации(КИ, - Новый Структура("Тип", Перечисления.ТипыКонтактнойИнформации.Телефон)); - СтруктураКИ = НоваяКонтактнаяИнформация(); - СтруктураКИ.КонтактнаяИнформация = СериализацияОбъектаXDTO(КИ); - СтруктураКИ.Представление = КИ.Представление; - - Реквизиты.Телефон = СтруктураКИ; - - КонецЕсли; + Если ПолучитьДанныеОРуководителеИНомерТелефона(СведенияОДолжности, Реквизиты) Тогда Прервать; - КонецЕсли; КонецЦикла; @@ -565,6 +1298,90 @@ КонецПроцедуры +Функция ПолучитьДанныеОРуководителеИНомерТелефона(СведенияОДолжности, Данные) + + Если СтрНайти(СведенияОДолжности.НаимВидДолжн, "Руководитель") = 0 + ИЛИ СведенияОДолжности.ФИО = Неопределено Тогда + Возврат Ложь; + КонецЕсли; + + // Руководитель + СтруктураКИ = НовоеКонтактноеЛицо(); + СтруктураКИ.Фамилия = ТРег(СведенияОДолжности.ФИО.Фамилия); + СтруктураКИ.Имя = ТРег(СведенияОДолжности.ФИО.Имя); + СтруктураКИ.Отчество = ТРег(СведенияОДолжности.ФИО.Отчество); + СтруктураКИ.Должность = ПредложениеСЗаглавнойБуквы(СведенияОДолжности.НаимДолжн); + СтруктураКИ.ИНН = СведенияОДолжности.ИННФл; + СтруктураКИ.ДатаЗаписи = СведенияОДолжности.ДатаНачДейств; + СтруктураКИ.Представление = СокрЛП(СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru='%1 %2 %3'"), + СтруктураКИ.Фамилия, + СтруктураКИ.Имя, + СтруктураКИ.Отчество)); + + Данные.Руководитель = СтруктураКИ; + + // Номер телефона + Если ЗначениеЗаполнено(СведенияОДолжности.НомТел) Тогда + ПространствоИменКИ = УправлениеКонтактнойИнформациейКлиентСервер.ПространствоИмен(); + КИ = ФабрикаXDTO.Создать(ФабрикаXDTO.Тип(ПространствоИменКИ, "КонтактнаяИнформация")); + КИ.Состав = ФабрикаXDTO.Создать(ФабрикаXDTO.Тип(ПространствоИменКИ, "НомерТелефона")); + Если Лев(СведенияОДолжности.НомТел, 1) = "(" Тогда + КонецКодаГорода = СтрНайти(СведенияОДолжности.НомТел, ")"); + КИ.Состав.КодГорода = Сред(СведенияОДолжности.НомТел, 2, КонецКодаГорода - 2); + КИ.Состав.Номер = Сред(СведенияОДолжности.НомТел, КонецКодаГорода + 1); + Иначе + КИ.Состав.Номер = СведенияОДолжности.НомТел; + КонецЕсли; + КИ.Представление = УправлениеКонтактнойИнформацией.ПредставлениеКонтактнойИнформации(КИ, + Новый Структура("Тип", Перечисления.ТипыКонтактнойИнформации.Телефон)); + СтруктураКИ = НоваяКонтактнаяИнформация(); + СтруктураКИ.КонтактнаяИнформация = СериализацияОбъектаXDTO(КИ); + СтруктураКИ.Представление = КИ.Представление; + + Данные.Телефон = СтруктураКИ; + + КонецЕсли; + + Возврат Истина; + +КонецФункции + +Функция ЗаполнитьСтрокуОбОрганизации(ОбъектXDTO, ТаблицаДанных, ИННКонтрагента) + + Если ЗначениеЗаполнено(ОбъектXDTO.ИНН) + И (ОбъектXDTO.ИНН = ИННКонтрагента + ИЛИ ТаблицаДанных.Найти(ОбъектXDTO.ИНН, "ИНН") <> Неопределено) Тогда + Возврат Неопределено; + КонецЕсли; + + РеквизитыЮЛ = НовыеРеквизитыЮридическогоЛица(); + ЗаполнитьНаименованияЮридическогоЛица(ОбъектXDTO, РеквизитыЮЛ); + НоваяСтрока = ТаблицаДанных.Добавить(); + НоваяСтрока.НаименованиеОрганизации = РеквизитыЮЛ.НаименованиеСокращенное; + НоваяСтрока.ИНН = ?(СтрДлина(ОбъектXDTO.ИНН) = 10, ОбъектXDTO.ИНН, ""); + ЗаполнитьИнформациюОСтатусе(ОбъектXDTO, НоваяСтрока); + + Возврат НоваяСтрока; + +КонецФункции + +Процедура ЗаполнитьСтрокуОбУчредителе(ОбъектXDTO, ТаблицаДанных, ИННКонтрагента) + + НоваяСтрока = ЗаполнитьСтрокуОбОрганизации(ОбъектXDTO, ТаблицаДанных, ИННКонтрагента); + + Если НоваяСтрока <> Неопределено + И ОбъектXDTO.ДоляУстКап <> Неопределено Тогда + НоваяСтрока.СуммаКапитала = ОбъектXDTO.ДоляУстКап.НоминСтоим; + НоваяСтрока.ПроцентКапитала = ОбъектXDTO.ДоляУстКап.Процент; + КонецЕсли; + +КонецПроцедуры + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + Функция ПредложениеСЗаглавнойБуквы(Строка) Если ЗначениеЗаполнено(Строка) Тогда @@ -585,20 +1402,25 @@ // Служебный текст. Должен быть обработан на клиенте. ОписаниеОшибки = "НеУказаныПараметрыАутентификации"; + ИначеЕсли НЕ ЗначениеЗаполнено(ПараметрыАутентификации.Пароль) Тогда + + // Служебный текст. Должен быть обработан на клиенте. + ОписаниеОшибки = "НеУказанПароль"; + Иначе Попытка Прокси = ОбщегоНазначения.WSПрокси( - АдресСервиса(), // АдресWSDL - ПространствоИмен(), // URIПространстваИмен - "RequisitesWebServiceEndpointImplService", // ИмяСервиса - "RequisitesWebServiceEndpointImplPort", // ИмяТочкиПодключения - ПараметрыАутентификации.login, // ИмяПользователя - ПараметрыАутентификации.password, // Пароль - 30); // Таймаут + АдресСервиса(), // АдресWSDL + ПространствоИмен(), // URIПространстваИмен + "RequisitesWebServiceEndpointImpl3Service", // ИмяСервиса + "RequisitesWebServiceEndpointImpl3Port", // ИмяТочкиПодключения + ПараметрыАутентификации.Логин, // ИмяПользователя + ПараметрыАутентификации.Пароль, // Пароль + 60); //Таймаут Исключение ИнформацияОбОшибке = ИнформацияОбОшибке(); - ОписаниеОшибки = ПодробноеПредставлениеОшибки(ИнформацияОбОшибке); + ОписаниеОшибки = ПодробноеПредставлениеОшибки(ИнформацияОбОшибке); КонецПопытки; КонецЕсли; @@ -610,13 +1432,13 @@ Функция ПараметрыАутентификацииВСервисе() Если ОбщегоНазначенияПовтИсп.РазделениеВключено() Тогда - Возврат Новый Структура("login,password", + Возврат Новый Структура("Логин,Пароль", "fresh", "fresh"); Иначе ДанныеАутентификации = СтандартныеПодсистемыСервер.ПараметрыАутентификацииНаСайте(); Если ДанныеАутентификации <> Неопределено Тогда - Возврат Новый Структура("login,password", + Возврат Новый Структура("Логин,Пароль", ДанныеАутентификации.Логин, ДанныеАутентификации.Пароль); Иначе @@ -629,7 +1451,7 @@ Функция АдресСервиса() - Возврат "https://api.orgregister.1c.ru/orgregister/v1?wsdl"; + Возврат "https://api.orgregister.1c.ru/orgregister/v3?wsdl"; КонецФункции @@ -639,56 +1461,105 @@ КонецФункции -Процедура ОбработатьОшибкуСервиса(ОписаниеОшибки, СтруктураРеквизитов) +Процедура ОбработатьОшибкуСервиса(ОбъектXDTO, ОписаниеОшибки, ИмяМетода, СтруктураРеквизитов) - КодОсновногоЯзыка = ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка(); // Для записи события в журнал регистрации. + Если ОбъектXDTO <> Неопределено + И НЕ ЗначениеЗаполнено(ОписаниеОшибки) Тогда + Возврат; + КонецЕсли; - Если ОписаниеОшибки = "НеУказаныПараметрыАутентификации" Тогда - ТекстОшибки = "НеУказаныПараметрыАутентификации"; // Служебный текст. Должен быть обработан на клиенте. - ОписаниеОшибки = НСтр("ru='Не указаны логин и пароль для доступа к Интернет-поддержке'"); - ТекстСобытия = НСтр("ru='Ошибка доступа'", КодОсновногоЯзыка); + КодОсновногоЯзыка = ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка(); // Для записи события в журнал регистрации + ОписаниеОшибкиВРег = ВРег(ОписаниеОшибки); + ТекстОшибки = ""; + + Если ОписаниеОшибкиВРег = ВРег("НеУказаныПараметрыАутентификации") Тогда - ИначеЕсли Найти(ОписаниеОшибки, """status"":401") > 0 Тогда - ТекстОшибки = НСтр("ru='Неверно указаны логин и пароль для доступа к Интернет-поддержке'"); + ТекстОшибки = "НеУказаныПараметрыАутентификации"; // Служебный текст. Должен быть обработан на клиенте. + ТекстСобытия = НСтр("ru='Ошибка доступа'", КодОсновногоЯзыка); + ОписаниеОшибки = НСтр("ru='Не указаны логин и пароль для доступа к интернет-поддержке'"); + + ИначеЕсли ОписаниеОшибкиВРег = ВРег("НеУказанПароль") Тогда + + ТекстОшибки = "НеУказанПароль"; // Служебный текст. Должен быть обработан на клиенте. + ТекстСобытия = НСтр("ru='Ошибка доступа'", КодОсновногоЯзыка); + ОписаниеОшибки = НСтр("ru='Не указан пароль для доступа к интернет-поддержке'"); + + ИначеЕсли СтрНайти(ОписаниеОшибкиВРег, """STATUS"":401") > 0 + ИЛИ СтрНайти(ОписаниеОшибкиВРег, "SERVER-9:") > 0 Тогда + + ТекстОшибки = НСтр("ru='Неверно указаны логин и пароль для доступа к интернет-поддержке'"); ТекстСобытия = НСтр("ru='Ошибка доступа'", КодОсновногоЯзыка); - ИначеЕсли Найти(ОписаниеОшибки, "SERVER-1:") > 0 Тогда - ТекстОшибки = НСтр("ru='Не указан ИНН юридического лица'"); + ИначеЕсли СтрНайти(ОписаниеОшибкиВРег, "SERVER-1:") > 0 Тогда + + Если ИмяМетода = "getCorporationRequisitesByINN" + ИЛИ ИмяМетода = "checkCorporationTrustability" Тогда + ТекстОшибки = НСтр("ru='Не указан ИНН юридического лица'"); + ИначеЕсли ИмяМетода = "getEntrepreneurRequisitesByINN" + ИЛИ ИмяМетода = "checkPersonTrustabilityByInn" Тогда + ТекстОшибки = НСтр("ru='Не указан ИНН предпринимателя'"); + ИначеЕсли ИмяМетода = "getCorporationRequisitesByNameAndAddress" Тогда + ТекстОшибки = НСтр("ru='Не указано наименование юридического лица'"); + КонецЕсли; ТекстСобытия = НСтр("ru='Ошибка получения данных'", КодОсновногоЯзыка); - ИначеЕсли Найти(ОписаниеОшибки, "SERVER-2:") > 0 Тогда - ТекстОшибки = НСтр("ru='ИНН юридического лица должен состоять из 10 цифр'"); + ИначеЕсли СтрНайти(ОписаниеОшибкиВРег, "SERVER-2:") > 0 Тогда + + Если ИмяМетода = "getCorporationRequisitesByINN" + ИЛИ ИмяМетода = "checkCorporationTrustability" Тогда + ТекстОшибки = НСтр("ru='ИНН юридического лица должен состоять из 10 цифр'"); + ИначеЕсли ИмяМетода = "getEntrepreneurRequisitesByINN" + ИЛИ ИмяМетода = "checkPersonTrustabilityByInn" Тогда + ТекстОшибки = НСтр("ru='ИНН предпринимателя должен состоять из 12 цифр'"); + КонецЕсли; ТекстСобытия = НСтр("ru='Ошибка получения данных'", КодОсновногоЯзыка); - ИначеЕсли Найти(ОписаниеОшибки, "SERVER-3:") > 0 Тогда - ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru='Не удалось найти данные для заполнения реквизитов по ИНН %1'"), - СтруктураРеквизитов.ИНН); + ИначеЕсли СтрНайти(ОписаниеОшибкиВРег, "SERVER-3:") > 0 Тогда + + Если ИмяМетода = "getCorporationRequisitesByINN" + ИЛИ ИмяМетода = "checkCorporationTrustability" Тогда + ТекстОшибки = НСтр("ru='ИНН юридического лица должен содержать только цифры'"); + ИначеЕсли ИмяМетода = "getEntrepreneurRequisitesByINN" + ИЛИ ИмяМетода = "checkPersonTrustabilityByInn" Тогда + ТекстОшибки = НСтр("ru='ИНН предпринимателя должен содержать только цифры'"); + КонецЕсли; ТекстСобытия = НСтр("ru='Ошибка получения данных'", КодОсновногоЯзыка); - ИначеЕсли Найти(ОписаниеОшибки, "SERVER-4:") > 0 Тогда - ТекстОшибки = НСтр("ru='Не указан ИНН предпринимателя'"); - ТекстСобытия = НСтр("ru='Ошибка получения данных'", КодОсновногоЯзыка); + ИначеЕсли СтрНайти(ОписаниеОшибки, "SERVER-7:") > 0 Тогда - ИначеЕсли Найти(ОписаниеОшибки, "SERVER-5:") > 0 Тогда - ТекстОшибки = НСтр("ru='ИНН предпринимателя должен состоять из 12 цифр'"); - ТекстСобытия = НСтр("ru='Ошибка получения данных'", КодОсновногоЯзыка); - - ИначеЕсли Найти(ОписаниеОшибки, "SERVER-6:") > 0 Тогда - ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru='Не удалось найти данные для заполнения реквизитов по ИНН %1'"), - СтруктураРеквизитов.ИНН); - ТекстСобытия = НСтр("ru='Ошибка получения данных'", КодОсновногоЯзыка); - - ИначеЕсли Найти(ОписаниеОшибки, "SERVER-7:") > 0 Тогда ТекстОшибки = НСтр("ru='Превышен лимит количества вызовов сервиса за один день'"); ТекстСобытия = НСтр("ru='Ошибка доступа'", КодОсновногоЯзыка); - ИначеЕсли Найти(ОписаниеОшибки, "SERVER-8:") > 0 Тогда + ИначеЕсли СтрНайти(ОписаниеОшибки, "SERVER-8:") > 0 Тогда + ТекстОшибки = НСтр("ru='Отсутствует действующий договор ИТС'"); ТекстСобытия = НСтр("ru='Ошибка доступа'", КодОсновногоЯзыка); - Иначе + ИначеЕсли НЕ ЗначениеЗаполнено(ОписаниеОшибки) + И ОбъектXDTO = Неопределено Тогда + + Если ИмяМетода = "getCorporationRequisitesByINN" + ИЛИ ИмяМетода = "getEntrepreneurRequisitesByINN" Тогда + ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru='Не удалось найти данные для заполнения реквизитов по ИНН %1'"), + СтруктураРеквизитов.ИНН); + ИначеЕсли ИмяМетода = "getCorporationRequisitesByNameAndAddress" Тогда + ТекстОшибки = НСтр("ru='Не удалось выполнить поиск по наименованию'"); + ИначеЕсли ИмяМетода = "checkCorporationTrustability" Тогда + ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru='Не удалось найти данные о юридическом лице с ИНН %1'"), + СтруктураРеквизитов.ИНН); + ИначеЕсли ИмяМетода = "checkPersonTrustabilityByInn" Тогда + ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru='Не удалось найти данные о предпринимателе с ИНН %1'"), + СтруктураРеквизитов.ИНН); + КонецЕсли; + ТекстСобытия = НСтр("ru='Ошибка получения данных'", КодОсновногоЯзыка); + ОписаниеОшибки = ТекстОшибки; + + КонецЕсли; + + Если ПустаяСтрока(ТекстОшибки) Тогда // Неклассифицированная ошибка ТекстОшибки = НСтр("ru='Ошибка при работе с сервисом (подробнее см. Журнал регистрации)'"); ТекстСобытия = НСтр("ru='Ошибка при работе с сервисом'", КодОсновногоЯзыка); КонецЕсли; diff --git a/SSL/src/CommonModules/ДатыЗапретаИзменения/Module.bsl b/SSL/src/CommonModules/ДатыЗапретаИзменения/Module.bsl index 1920f5897..87b145996 100644 --- a/SSL/src/CommonModules/ДатыЗапретаИзменения/Module.bsl +++ b/SSL/src/CommonModules/ДатыЗапретаИзменения/Module.bsl @@ -5,7 +5,7 @@ #Область ПрограммныйИнтерфейс -// Проверяет наличие запрета изменения элемента данных. +// Проверяет наличие запрета изменения данных при редактировании или загрузке. // Для работы функции требуется настройка процедуры ЗаполнитьИсточникиДанныхДляПроверкиЗапретаИзменения // модуля ДатыЗапретаИзмененияПереопределяемый. // @@ -13,11 +13,13 @@ // из базы данных через ИдентификаторДанных. // Если Данные - объект, тогда данные для проверки будут получены из экземпляра объекта или // набора записей. -// Если Данные - объект и задан ИдентификаторДанных, тогда будут выполнены две проверки, причем -// данные будут получены и из объекта/набора записей, и из базы данных через ИдентификаторДанных. +// Если Данные - объект и задан ИдентификаторДанных, тогда будут выполнены проверки старой и +// новой версии данных, причем данные будут получены и из объекта/набора записей, +// и из базы данных через ИдентификаторДанных. // // Параметры: -// Данные - Строка - (полное имя объекта метаданных). +// Данные - Строка - полное имя объекта метаданных. Проверка только старой версии данных. +// Требуется указать следующий параметр ИдентификаторДанных. // - СправочникОбъект.<Имя>, // ДокументОбъект.<Имя>, // ПланВидовХарактеристикОбъект.<Имя>, @@ -26,12 +28,13 @@ // БизнесПроцессОбъект.<Имя>, // ЗадачаОбъект.<Имя>, // ПланОбменаОбъект - объект данных. -// - РегистрСведенийНаборЗаписей.<Имя>.Отбор, -// РегистрНакопленияНаборЗаписей.<Имя>.Отбор, -// РегистрБухгалтерииНаборЗаписей.<Имя>.Отбор, -// РегистрРасчетаНаборЗаписей.<Имя>.Отбор - набор записей. +// - РегистрСведенийНаборЗаписей.<Имя>, +// РегистрНакопленияНаборЗаписей.<Имя>, +// РегистрБухгалтерииНаборЗаписей.<Имя>, +// РегистрРасчетаНаборЗаписей.<Имя> - набор записей. // -// ИдентификаторДанных - СправочникСсылка.<Имя>, +// ИдентификаторДанных - Неопределено - проверить только новую версию данных. +// - СправочникСсылка.<Имя>, // ДокументСсылка.<Имя>, // ПланВидовХарактеристикСсылка.<Имя>, // ПланСчетовСсылка.<Имя>, @@ -44,34 +47,30 @@ // РегистрБухгалтерииНаборЗаписей.<Имя>.Отбор, // РегистрРасчетаНаборЗаписей.<Имя>.Отбор - отбор набора записей. // -// СообщитьОЗапрете - Булево - если передать Ложь, сообщение пользователю -// о запрете изменения данных не будет отправлено. +// УзелПроверкиЗапретаЗагрузки - Неопределено - выполнить проверку изменения данных. +// - ПланыОбменаСсылка.<Имя плана обмена> - выполнить проверку +// загрузки данных для указанного узла. +// +// ОписаниеОшибки - Строка - (возвращаемое значение) описание запрета изменения или загрузки. +// - Null - в этом случае текст сообщения об ошибке не будет подготовлен, +// что ускоряет выполнение проверки, когда запрет найден. // // Возвращаемое значение: // Булево - если Истина, изменение запрещено. // -Функция ИзменениеЗапрещено(Знач Данные, - Знач ИдентификаторДанных = Неопределено, - Знач СообщитьОЗапрете = Истина, - // Устарели. Следующие параметры устарели и будут удалены - // в следующей редакции БСП. Вместо используется функция ЗагрузкаЗапрещена. - Знач СтандартнаяОбработка = Истина, - Знач УзелПланаОбмена = Неопределено, - НайденныеЗапреты = Неопределено) Экспорт +Функция ИзменениеЗапрещено(Данные, + ИдентификаторДанных = Неопределено, + ОписаниеОшибки = Null, + УзелПроверкиЗапретаЗагрузки = Неопределено) Экспорт - Возврат ДатыЗапретаИзмененияСлужебный.ИзменениеИлиЗагрузкаЗапрещена( - Данные, - ИдентификаторДанных, - СообщитьОЗапрете, - СтандартнаяОбработка, - УзелПланаОбмена, - НайденныеЗапреты); + Возврат ДатыЗапретаИзмененияСлужебный.ИзменениеЗапрещено(Данные, + ИдентификаторДанных, ОписаниеОшибки, УзелПроверкиЗапретаЗагрузки); КонецФункции // Проверяет наличие запрета загрузки элемента данных. -// Для работы функции требуется настройка процедуры ДанныеДляПроверкиЗапретаИзменения -// модуля ДатыЗапретаИзмененияПереопределяемый. +// Выполняется проверка старой и новой версии данных. Для работы требуется настройка +// процедуры ДанныеДляПроверкиЗапретаИзменения модуля ДатыЗапретаИзмененияПереопределяемый. // // Параметры: // Данные - СправочникОбъект.<Имя>, @@ -88,15 +87,16 @@ // РегистрБухгалтерииНаборЗаписей.<Имя>, // РегистрРасчетаНаборЗаписей.<Имя> - набор записей. // -// УзелПланаОбмена - ПланыОбменаСсылка.<Имя плана обмена> - узел, -// для которого будет выполнена проверка. +// УзелПроверкиЗапретаЗагрузки - ПланыОбменаСсылка.<Имя плана обмена> - узел, +// для которого будет выполнена проверка. // -// СообщениеОбОшибке - Строка (возвращаемое значение) - описание запрета загрузки. +// Отказ - Булево - устанавливается Истина, если загрузка запрещена. // -// Возвращаемое значение: -// Булево - если Истина, загрузка запрещена. +// ОписаниеОшибки - Строка - (возвращаемое значение) - описание запрета загрузки. +// - Null - в этом случае текст сообщения об ошибке не будет подготовлен, +// что ускоряет выполнение проверки, когда запрет найден. // -Функция ЗагрузкаЗапрещена(Данные, УзелПланаОбмена, СообщениеОбОшибке = "") Экспорт +Процедура ПроверитьДатыЗапретаЗагрузкиДанных(Данные, УзелПроверкиЗапретаЗагрузки, Отказ, ОписаниеОшибки = Null) Экспорт Если ТипЗнч(Данные) = Тип("УдалениеОбъекта") Тогда ОбъектМетаданных = Данные.Ссылка.Метаданные(); @@ -104,37 +104,25 @@ ОбъектМетаданных = Данные.Метаданные(); КонецЕсли; - - ИсточникиДанных = ДатыЗапретаИзмененияСлужебныйПовтИсп.ИсточникиДанныхДляПроверкиЗапретаИзменения( - ).НайтиСтроки(Новый Структура("Таблица", ОбъектМетаданных.ПолноеИмя())); - - Если ИсточникиДанных.Количество() = 0 Тогда - Возврат Ложь; // Для текущего типа объекта не определены запреты по датам. + ИсточникиДанных = ДатыЗапретаИзмененияСлужебный.ИсточникиДанныхДляПроверкиЗапретаИзменения(); + Если ИсточникиДанных.Получить(ОбъектМетаданных.ПолноеИмя()) = Неопределено Тогда + Возврат; // Для текущего типа объекта не определены запреты по датам. КонецЕсли; - Отказ = Ложь; - ДополнительныеПараметры = Новый Структура; - ДополнительныеПараметры.Вставить("СообщитьОЗапрете", Ложь); - ДополнительныеПараметры.Вставить("СтандартнаяОбработка", Ложь); - ДополнительныеПараметры.Вставить("УзелПланаОбмена", УзелПланаОбмена); - ДополнительныеПараметры.Вставить("НайденныеЗапреты", Новый Структура); + ДополнительныеПараметры.Вставить("ПроверкаЗапретаИзменения", Ложь); + ДополнительныеПараметры.Вставить("УзелПроверкиЗапретаЗагрузки", УзелПроверкиЗапретаЗагрузки); + ДополнительныеПараметры.Вставить("ОписаниеОшибки", ""); + ДополнительныеПараметры.Вставить("СообщитьОЗапрете", Ложь); - ДатыЗапретаИзмененияСлужебный.ПроверитьДатыЗапретаИзмененияЗагрузкиДанных( - Данные, - Отказ, - ОбщегоНазначения.ЭтоРегистр(ОбъектМетаданных), - Ложь, - ТипЗнч(Данные) = Тип("УдалениеОбъекта"), - ДополнительныеПараметры); + ЭтоРегистр = ОбщегоНазначения.ЭтоРегистр(ОбъектМетаданных); - Если Отказ Тогда - СообщениеОбОшибке = ДополнительныеПараметры.НайденныеЗапреты.НайденЗапретЗагрузкиДанных; - КонецЕсли; + ДатыЗапретаИзмененияСлужебный.ПроверитьДатыЗапретаИзмененияЗагрузкиДанных(Данные, + Отказ, ЭтоРегистр, ЭтоРегистр, ТипЗнч(Данные) = Тип("УдалениеОбъекта"), ДополнительныеПараметры); - Возврат Отказ; + ОписаниеОшибки = ДополнительныеПараметры.ОписаниеОшибки; -КонецФункции +КонецПроцедуры // Обработчик события формы ПриЧтенииНаСервере, который встраивается в формы элементов справочников, // документов, записей регистров и др., чтобы заблокировать форму при наличии запрета изменения. @@ -167,20 +155,17 @@ Для каждого ЭлементОтбора Из Источник.Отбор Цикл ЭлементОтбора.Установить(ТекущийОбъект[ЭлементОтбора.Имя], Истина); КонецЦикла; - ИдентификаторДанных = Источник.Отбор; ЗаполнитьЗначенияСвойств(Источник.Добавить(), ТекущийОбъект); Иначе Источник = ТекущийОбъект; - ИдентификаторДанных = ТекущийОбъект.Ссылка; КонецЕсли; - Если ДатыЗапретаИзмененияСлужебный.ПропуститьПроверкуДатЗапрета( - Источник, Ложь, Истина, Неопределено) Тогда - + Если ДатыЗапретаИзмененияСлужебный.ПропуститьПроверкуДатЗапрета(Источник, + Истина, Неопределено, "") Тогда Возврат Истина; КонецЕсли; - Если ИзменениеЗапрещено(ПолноеИмя, ИдентификаторДанных, Ложь) Тогда + Если ИзменениеЗапрещено(Источник) Тогда Форма.ТолькоПросмотр = Истина; КонецЕсли; @@ -211,188 +196,207 @@ // для авторизованного пользователя и/или узла плана обмена. // // Параметры: -// ДанныеДляПроверки - ТаблицаЗначений - возвращается функцией. -// ШаблонДанныхДляПроверки общего модуля ДатыЗапретаИзменения. +// ДанныеДляПроверки - ТаблицаЗначений - возвращается функцией ШаблонДанныхДляПроверки +// общего модуля ДатыЗапретаИзменения. // -// СообщитьОЗапрете - Булево - если истина, будет выведено сообщение -// о найденных запретах при проверке данных. +// ОписаниеДанных - Неопределено - текст сообщения о запрете не формируется. +// - Структура - со свойствами: +// * НоваяВерсия - Булево - если Истина, то сообщение о запрете +// формировать для новой версии, иначе для старой версии. +// * Данные - Ссылка,Объект - ссылка или объект данных для получения +// представления, которое будет использовано в сообщении о запрете. +// - НаборЗаписей - набор записей регистра для получения +// представления, которое будет использовано в сообщении о запрете. +// - Структура - со свойствами для сообщения о запрете: +// * Регистр - Строка - полное имя регистра. +// * - НаборЗаписей - набор записей регистра. +// * Отбор - Отбор - отбор набора записей. +// - Строка - подготовленное представление данных, +// которое будет использовано в сообщении о запрете. // -// ИдентификаторДанных - Ссылка - на объект данных для получения представления, -// используемого в сообщении о запрете. +// ОписаниеОшибки - Строка - (возвращаемое значение) описание запрета изменения или загрузки. +// Не заполняется, если параметр ОписаниеДанных не указан. +// - Null - в этом случае текст сообщения об ошибке не будет подготовлен, +// что ускоряет выполнение проверки, когда запрет найден. // -// СтандартнаяОбработка - Булево - если Ложь, проверка запрета изменения (для пользователей) -// будет пропущена. -// -// УзелПланаОбмена - Неопределено, ПланыОбменаСсылка.<Имя плана обмена> - -// если задать узел будет выполнена проверка запрета загрузки. -// -// НайденныеЗапреты - Структура - возвращаемое значение. -// Если найден запрет изменения данных, значит есть -// свойство НайденЗапретИзмененияДанных, если найден запрет -// загрузки данных, значит есть свойство НайденЗапретЗагрузкиДанных. +// УзелПроверкиЗапретаЗагрузки - Неопределено - выполнить проверку изменения данных. +// - ПланыОбменаСсылка.<Имя плана обмена> - выполнить проверку +// загрузки данных для указанного узла. // // Возвращаемое значение: // Булево - если Истина, значит найден хотя бы один запрет изменения. // Функция НайденЗапретИзмененияДанных(Знач ДанныеДляПроверки, - Знач СообщитьОЗапрете, - Знач ИдентификаторДанных, - Знач СтандартнаяОбработка = Истина, - Знач УзелПланаОбмена = Неопределено, - НайденныеЗапреты = Неопределено) Экспорт + ОписаниеДанных = Неопределено, + ОписаниеОшибки = Null, + УзелПроверкиЗапретаЗагрузки = Неопределено) Экспорт УстановитьПривилегированныйРежим(Истина); + СвойстваВстраивания = ДатыЗапретаИзмененияСлужебный.СвойстваРазделов(); + ПустойРаздел = ДатыЗапретаИзмененияСлужебныйПовтИсп.ПустойРаздел(); + Если ТипЗнч(ДанныеДляПроверки) = Тип("Структура") Тогда - ИдентификаторДанных = ДанныеДляПроверки.ИдентификаторДанныхДляПредставления; - ТаблицаДанных = ДанныеДляПроверки.Таблица; - ДанныеДляПроверки = ПолучитьДанныеДляПроверки(ДанныеДляПроверки); + ДействующиеДаты = ДанныеДляПроверки.ДействующиеДаты; + ДанныеДляПроверки = ДанныеДляПроверки.ДанныеДляПроверки; Иначе - Если ИдентификаторДанных = Неопределено Тогда - ТаблицаДанных = Неопределено; - Иначе - ТаблицаДанных = ИдентификаторДанных.Метаданные().ПолноеИмя(); - КонецЕсли; + ДействующиеДаты = ДатыЗапретаИзмененияСлужебный.ДействующиеДатыЗапрета(); КонецЕсли; - // Приведение пустых ссылок объектов к единому значению Неопределено. + // Приведение данных в соответствие варианту встраивания. Для каждого Строка Из ДанныеДляПроверки Цикл - Если НЕ ЗначениеЗаполнено(Строка.Объект) Тогда - Строка.Объект = Неопределено; + + Если СвойстваВстраивания.БезРазделовИОбъектов Тогда + Строка.Раздел = ПустойРаздел; + Строка.Объект = ПустойРаздел; + Иначе + Если ЗначениеЗаполнено(СвойстваВстраивания.ЕдинственныйРаздел) Тогда + Строка.Раздел = СвойстваВстраивания.ЕдинственныйРаздел; + КонецЕсли; + + Если СвойстваВстраивания.ВсеРазделыБезОбъектов + Или Не ЗначениеЗаполнено(Строка.Объект) Тогда + + Строка.Объект = Строка.Раздел; + КонецЕсли; КонецЕсли; + КонецЦикла; // Свертка лишних строк, чтобы сократить число проверок и сообщений. - ДанныеДляПроверки.Свернуть("Дата, Раздел, Объект"); - // Назначение ключей для отдельных проверок. - ДанныеДляПроверки.Колонки.Добавить("КлючСтроки", Новый ОписаниеТипов("Число")); - ТекущийКлючСтроки = 0; - Для каждого Строка Из ДанныеДляПроверки Цикл - Строка.КлючСтроки = ТекущийКлючСтроки; - ТекущийКлючСтроки = ТекущийКлючСтроки + 1; + РазделыИОбъекты = ДанныеДляПроверки.Скопировать(); + РазделыИОбъекты.Свернуть("Раздел, Объект"); + Отбор = Новый Структура("Раздел, Объект"); + РазделыИОбъекты.Колонки.Добавить("Дата", + Новый ОписаниеТипов("Дата", , , Новый КвалификаторыДаты(ЧастиДаты.Дата))); + + Для Каждого РазделИОбъект Из РазделыИОбъекты Цикл + ЗаполнитьЗначенияСвойств(Отбор, РазделИОбъект); + Строки = ДанныеДляПроверки.НайтиСтроки(Отбор); + МинимальнаяДата = Неопределено; + Для Каждого Строка Из Строки Цикл + ТекущаяДата = НачалоДня(Строка.Дата); + Если МинимальнаяДата = Неопределено Тогда + МинимальнаяДата = ТекущаяДата; + КонецЕсли; + Если ТекущаяДата < МинимальнаяДата Тогда + МинимальнаяДата = ТекущаяДата; + КонецЕсли; + КонецЦикла; + РазделИОбъект.Дата = МинимальнаяДата; + КонецЦикла; + ДанныеДляПроверки = РазделыИОбъекты; + + // Приоритеты дат запрета изменения. + // 1. Для раздела, объекта и пользователя. + // 2. Для раздела, объекта и группы пользователей. + // 3. Для раздела, объекта и любого пользователя. + // 4. Для раздела, любого объекта (объект = раздел) и пользователя. + // 5. Для раздела, любого объекта (объект = раздел) и группы пользователей. + // 6. Для раздела, любого объекта (объект = раздел) и любого пользователя. + // 7. Для любого раздела (пустой раздел), любого объекта (объект = раздел) и пользователя. + // 8. Для любого раздела (пустой раздел), любого объекта (объект = раздел) и группы пользователей. + // 9. Для любого раздела (пустой раздел), любого объекта (объект = раздел) и любого пользователя. + + // Приоритеты дат запрета загрузки. + // 1. Для раздела, объекта и узла. + // 2. Для раздела, объекта и любого узла. + // 3. Для раздела, любого объекта (объект = раздел) и узла. + // 4. Для раздела, любого объекта (объект = раздел) и любого узла. + // 5. Для любого раздела (пустой раздел), любого объекта (объект = раздел) и узла. + // 6. Для любого раздела (пустой раздел), любого объекта (объект = раздел) и любого узла. + + ЗапретыИзменения = ДанныеДляПроверки.Скопировать(Новый Массив); + ЗапретыИзменения.Колонки.Добавить("Адресат"); + ЗапретыИзменения.Колонки.Добавить("Данные"); + + ДополнительныеПараметры = Новый Структура; + ДополнительныеПараметры.Вставить("УзелПроверкиЗапретаЗагрузки", УзелПроверкиЗапретаЗагрузки); + + // Поиск запретов изменения данных. + Если УзелПроверкиЗапретаЗагрузки = Неопределено Тогда + Разделы = ДействующиеДаты.ДляПользователей.Разделы; + Пользователь = Пользователи.АвторизованныйПользователь(); + ГруппыПользователя = ДействующиеДаты.ГруппыПользователей.Получить(Пользователь); + Если ГруппыПользователя = Неопределено Тогда + ГруппыПользователя = Новый Массив; + КонецЕсли; + ДополнительныеПараметры.Вставить("Пользователь", Пользователь); + ДополнительныеПараметры.Вставить("ГруппыПользователя", ГруппыПользователя); + Иначе + Разделы = ДействующиеДаты.ДляИнформационныхБаз.Разделы; + ДополнительныеПараметры.Вставить("ПустойУзелПланаОбмена", + ОбщегоНазначения.МенеджерОбъектаПоСсылке(УзелПроверкиЗапретаЗагрузки).ПустаяСсылка()); + КонецЕсли; + + Для Каждого Данные Из ДанныеДляПроверки Цикл + РазделЗапрета = Данные.Раздел; + ОбъектЗапрета = Данные.Объект; + + Объекты = Разделы.Получить(РазделЗапрета); + Адресаты = Неопределено; + ДатаЗапрета = Неопределено; + + Если Объекты <> Неопределено Тогда + Адресаты = Объекты.Получить(ОбъектЗапрета); + Если Адресаты <> Неопределено Тогда + // Поиск для раздела и объекта. + ДатаЗапрета = НайтиДатуЗапрета(Адресаты, РазделЗапрета, ОбъектЗапрета, ДополнительныеПараметры); + КонецЕсли; + Если ДатаЗапрета = Неопределено Тогда + ОбъектЗапрета = РазделЗапрета; + Адресаты = Объекты.Получить(ОбъектЗапрета); + Если Адресаты <> Неопределено Тогда + // Поиск для раздела и любого объекта. + ДатаЗапрета = НайтиДатуЗапрета(Адресаты, РазделЗапрета, ОбъектЗапрета, ДополнительныеПараметры); + КонецЕсли; + КонецЕсли; + КонецЕсли; + Если ДатаЗапрета = Неопределено Тогда + РазделЗапрета = ПустойРаздел; + ОбъектЗапрета = РазделЗапрета; + Объекты = Разделы.Получить(РазделЗапрета); + Если Объекты = Неопределено Тогда + Продолжить; + КонецЕсли; + Адресаты = Объекты.Получить(ОбъектЗапрета); + Если Адресаты = Неопределено Тогда + Продолжить; + КонецЕсли; + // Поиск для любого раздела и любого объекта (общая дата). + ДатаЗапрета = НайтиДатуЗапрета(Адресаты, РазделЗапрета, ОбъектЗапрета, ДополнительныеПараметры); + Если ДатаЗапрета = Неопределено Тогда + Продолжить; + КонецЕсли; + КонецЕсли; + + Если ДатаЗапрета < Данные.Дата Тогда + Продолжить; + КонецЕсли; + + Если УзелПроверкиЗапретаЗагрузки = Неопределено Тогда + Адресат = Пользователь; + Иначе + Адресат = УзелПроверкиЗапретаЗагрузки; + КонецЕсли; + + Строка = ЗапретыИзменения.Добавить(); + Строка.Данные = Данные; + Строка.Раздел = РазделЗапрета; + Строка.Объект = ОбъектЗапрета; + Строка.Адресат = Адресат; + Строка.Дата = ДатаЗапрета; КонецЦикла; - СвойстваВстраивания = ДатыЗапретаИзмененияСлужебныйПовтИсп.СвойстваРазделов(); + Если ТипЗнч(ОписаниеДанных) = Тип("Структура") + И ТипЗнч(ОписаниеОшибки) <> Тип("Null") + И ЗапретыИзменения.Количество() > 0 Тогда + + ОписаниеОшибки = СообщениеОЗапретах(ЗапретыИзменения, + ОписаниеДанных, СвойстваВстраивания, УзелПроверкиЗапретаЗагрузки <> Неопределено); + КонецЕсли; - НачатьТранзакцию(); - Попытка - Запрос = Новый Запрос; - Запрос.УстановитьПараметр("ДанныеДляПроверки", ДанныеДляПроверки); - Запрос.УстановитьПараметр("БезРазделовИОбъектов", СвойстваВстраивания.БезРазделовИОбъектов); - Запрос.УстановитьПараметр("ВсеРазделыБезОбъектов", СвойстваВстраивания.ВсеРазделыБезОбъектов); - Запрос.УстановитьПараметр("ЕдинственныйРаздел", СвойстваВстраивания.ЕдинственныйРаздел); - Запрос.УстановитьПараметр("ПервыйРаздел", ?(СвойстваВстраивания.ЕдинственныйРаздел, - СвойстваВстраивания.ТипыОбъектовРазделов[0].Раздел, - Неопределено)); - Запрос.МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц; - Запрос.Текст = - "ВЫБРАТЬ - | ДанныеДляПроверки.Раздел, - | ДанныеДляПроверки.Объект, - | ДанныеДляПроверки.Дата, - | ДанныеДляПроверки.КлючСтроки - |ПОМЕСТИТЬ НачальныеДанные - |ИЗ - | &ДанныеДляПроверки КАК ДанныеДляПроверки - |; - | - |//////////////////////////////////////////////////////////////////////////////// - |ВЫБРАТЬ - | Данные.Раздел, - | Данные.Объект, - | МИНИМУМ(Данные.Дата) КАК Дата, - | МИНИМУМ(Данные.КлючСтроки) КАК КлючСтроки - |ПОМЕСТИТЬ ДанныеДляПроверки - |ИЗ - | (ВЫБРАТЬ - | ВЫБОР - | КОГДА &БезРазделовИОбъектов - | ТОГДА ЗНАЧЕНИЕ(ПланВидовХарактеристик.РазделыДатЗапретаИзменения.ПустаяСсылка) - | КОГДА &ЕдинственныйРаздел - | ТОГДА &ПервыйРаздел - | ИНАЧЕ НачальныеДанные.Раздел - | КОНЕЦ КАК Раздел, - | ВЫБОР - | КОГДА &БезРазделовИОбъектов - | ТОГДА ЗНАЧЕНИЕ(ПланВидовХарактеристик.РазделыДатЗапретаИзменения.ПустаяСсылка) - | ИНАЧЕ ВЫБОР - | КОГДА &ВсеРазделыБезОбъектов - | ИЛИ НачальныеДанные.Объект = НЕОПРЕДЕЛЕНО - | ТОГДА ВЫБОР - | КОГДА &ЕдинственныйРаздел - | ТОГДА &ПервыйРаздел - | ИНАЧЕ НачальныеДанные.Раздел - | КОНЕЦ - | ИНАЧЕ НачальныеДанные.Объект - | КОНЕЦ - | КОНЕЦ КАК Объект, - | НачальныеДанные.Дата КАК Дата, - | НачальныеДанные.КлючСтроки КАК КлючСтроки - | ИЗ - | НачальныеДанные КАК НачальныеДанные) КАК Данные - | - |СГРУППИРОВАТЬ ПО - | Данные.Раздел, - | Данные.Объект - | - |ИМЕЮЩИЕ - | (НЕ(Данные.Объект <> Данные.Раздел - | И ТИПЗНАЧЕНИЯ(Данные.Объект) = ТИП(ПланВидовХарактеристик.РазделыДатЗапретаИзменения))) И - | (НЕ(Данные.Объект <> Данные.Раздел - | И Данные.Раздел = ЗНАЧЕНИЕ(ПланВидовХарактеристик.РазделыДатЗапретаИзменения.ПустаяСсылка)))"; - Запрос.Выполнить(); - - НайденныеЗапреты = Новый Структура; - Запрос.УстановитьПараметр("ПустыеСсылкиУзловПлановОбмена", СвойстваВстраивания.ПустыеСсылкиУзловПлановОбмена); - Сообщение = ""; - - Если СтандартнаяОбработка Тогда - - Запрос.УстановитьПараметр("ВидНазначенияДатЗапретаДляВсех", - Перечисления.ВидыНазначенияДатЗапрета.ДляВсехПользователей); - - Запрос.УстановитьПараметр("Пользователь", Пользователи.АвторизованныйПользователь()); - - Если НайденЗапретИзмененияИлиЗагрузкиДанных( - Запрос, - СообщитьОЗапрете, - ИдентификаторДанных, - ТаблицаДанных, - СвойстваВстраивания, - Ложь, - Сообщение) Тогда - - НайденныеЗапреты.Вставить("НайденЗапретИзмененияДанных", Сообщение); - КонецЕсли; - КонецЕсли; - - Если УзелПланаОбмена <> Неопределено Тогда - - Запрос.УстановитьПараметр("ВидНазначенияДатЗапретаДляВсех", - Перечисления.ВидыНазначенияДатЗапрета.ДляВсехИнформационныхБаз); - - Запрос.УстановитьПараметр("Пользователь", УзелПланаОбмена); - - Если НайденЗапретИзмененияИлиЗагрузкиДанных( - Запрос, - СообщитьОЗапрете, - ИдентификаторДанных, - ТаблицаДанных, - СвойстваВстраивания, - Истина, - Сообщение) Тогда - - НайденныеЗапреты.Вставить("НайденЗапретЗагрузкиДанных", Сообщение); - КонецЕсли; - КонецЕсли; - - ЗафиксироватьТранзакцию(); - Исключение - ОтменитьТранзакцию(); - ВызватьИсключение; - КонецПопытки; - - Возврат НайденныеЗапреты.Количество() > 0; + Возврат ЗапретыИзменения.Количество() > 0; КонецФункции @@ -402,11 +406,9 @@ // // Возвращаемое значение: // ТаблицаЗначений - с колонками: -// * Таблица - Строка - полное имя объекта метаданных, например, "Документ.ПриходнаяНакладная". -// * ПолеДаты - Строка - имя реквизита объекта или табличной части, например "Дата", "Товары.ДатаОтгрузки". -// * Раздел - Строка - имя предопределенного элемента "ПланВидовХарактеристикСсылка.РазделыДатЗапрета". -// * ПолеОбъекта - Строка - имя реквизита объекта или реквизита табличной части, например "Организация", -// "Товары.Склад". +// * Раздел - ПланВидовХарактеристикСсылка.РазделыДатЗапретаИзменения - раздел для поиска дат запрета. +// * Объект - Метаданные.ПланыВидовХарактеристик.РазделыДатЗапретаИзменения.Тип - объект для поиска дат запрета. +// * Дата - Дата - дата без времени, которую нужно проверить на принадлежность установленным запретам. // Функция ШаблонДанныхДляПроверки() Экспорт @@ -436,7 +438,7 @@ Возврат; КонецЕсли; - ПроверитьДатыЗапретаИзмененияЗагрузкиДанных(Источник, Отказ); + ПроверитьДатыЗапретаИзмененияДанных(Источник, Отказ); КонецПроцедуры @@ -454,7 +456,7 @@ Возврат; КонецЕсли; - ПроверитьДатыЗапретаИзмененияЗагрузкиДанных(Источник, Отказ); + ПроверитьДатыЗапретаИзмененияДанных(Источник, Отказ); КонецПроцедуры @@ -472,7 +474,7 @@ Возврат; КонецЕсли; - ПроверитьДатыЗапретаИзмененияЗагрузкиДанных(Источник, Отказ, Истина, Замещение); + ПроверитьДатыЗапретаИзмененияДанных(Источник, Отказ, Истина, Замещение); КонецПроцедуры @@ -491,7 +493,7 @@ Возврат; КонецЕсли; - ПроверитьДатыЗапретаИзмененияЗагрузкиДанных(Источник, Отказ, Истина); + ПроверитьДатыЗапретаИзмененияДанных(Источник, Отказ, Истина); КонецПроцедуры @@ -518,7 +520,7 @@ Возврат; КонецЕсли; - ПроверитьДатыЗапретаИзмененияЗагрузкиДанных(Источник, Отказ, Истина, Замещение); + ПроверитьДатыЗапретаИзмененияДанных(Источник, Отказ, Истина, Замещение); КонецПроцедуры @@ -546,20 +548,7 @@ Возврат; КонецЕсли; - ПроверитьДатыЗапретаИзмененияЗагрузкиДанных(Источник, Отказ, , , Истина); - -КонецПроцедуры - -// Устарела. Будет удалена в следующей редакции БСП. -// Следует использовать функции ЗагрузкаЗапрещена и ИзменениеЗапрещено. -// -Процедура ВыполнитьПроверкуДатыЗапретаИзменения(Источник, Отказ) Экспорт - - Если ИзменениеЗапрещено(Источник) Тогда - Отказ = Истина; - ИначеЕсли ЗагрузкаЗапрещена(Источник, Неопределено) Тогда - Отказ = Истина; - КонецЕсли; + ПроверитьДатыЗапретаИзмененияДанных(Источник, Отказ, , , Истина); КонецПроцедуры @@ -567,7 +556,7 @@ #Область СлужебныеПроцедурыИФункции -Процедура ПроверитьДатыЗапретаИзмененияЗагрузкиДанных( +Процедура ПроверитьДатыЗапретаИзмененияДанных( Источник, Отказ, ИсточникРегистр = Ложь, Замещение = Истина, Удаление = Ложь) ДатыЗапретаИзмененияСлужебный.ПроверитьДатыЗапретаИзмененияЗагрузкиДанных( @@ -575,570 +564,184 @@ КонецПроцедуры -Функция ПолучитьДанныеДляПроверки(ПредварительныеДанные) +Функция НайтиДатуЗапрета(Адресаты, РазделЗапрета, ОбъектЗапрета, ДополнительныеПараметры) - ДанныеДляПроверки = ШаблонДанныхДляПроверки(); + ДатаЗапрета = Неопределено; - ИсточникиДанныхТаблиц = ДатыЗапретаИзмененияСлужебныйПовтИсп.ИсточникиДанныхДляПроверкиЗапретаИзменения(); - - Отбор = Новый Структура("Таблица", ПредварительныеДанные.Таблица); - ИсточникиДанных = ИсточникиДанныхТаблиц.НайтиСтроки(Отбор); - - Если ИсточникиДанных.Количество() = 0 Тогда - ВызватьИсключение(СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Для проверки запрета изменения не найдены - |источники данных для таблицы ""%1"".'"), - Отбор.Таблица)); - КонецЕсли; - - ОбъектМетаданных = Метаданные.НайтиПоПолномуИмени(ПредварительныеДанные.Таблица); - - ЭтоНаборЗаписей = ОбщегоНазначения.ЭтоРегистр(ОбъектМетаданных); - КлассОМ = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(Отбор.Таблица, ".")[0]; - - ЗначенияПолей = Неопределено; - - НачатьТранзакцию(); - Попытка - Если ПредварительныеДанные.ИдентификаторДанных <> Неопределено Тогда - - Если ЭтоНаборЗаписей Тогда - // Заполнение значений полей из базы данных. - Поля = ДатыЗапретаИзмененияСлужебный.ПолучитьПоляРегистра( - ИсточникиДанных, Отбор.Таблица); - - Запрос = Новый Запрос; - Запрос.Текст = - "ВЫБРАТЬ - | &Поля - |ИЗ - | &Таблица КАК Таблица - |ГДЕ - | &УсловиеОтбора"; - ВставитьПараметрыИУсловиеОтбора(Запрос, ПредварительныеДанные.ИдентификаторДанных); - Запрос.Текст = СтрЗаменить(Запрос.Текст, "&Поля", Поля); - Запрос.Текст = СтрЗаменить(Запрос.Текст, "&Таблица", Отбор.Таблица); - ЗначенияПолей = Запрос.Выполнить().Выгрузить(); - ЗначенияПолей.Свернуть(Поля); - - ИначеЕсли ЗначениеЗаполнено(ПредварительныеДанные.ИдентификаторДанных) Тогда - // Заполнение значений полей из базы данных. - ЗначенияПолей = ДатыЗапретаИзмененияСлужебный.ПолучитьСтруктуруПолейОбъекта( - ОбъектМетаданных, ИсточникиДанных, Отбор.Таблица); - // Установка значений полей. - Поля = ""; - Для каждого Поле Из ЗначенияПолей Цикл - Если ОбъектМетаданных.ТабличныеЧасти.Найти(Поле.Ключ) <> Неопределено Тогда - Поля = Поля + Поле.Ключ + ".(" + Поле.Значение + "),"; - Иначе - Поля = Поля + Поле.Ключ + ","; - КонецЕсли; - КонецЦикла; - Поля = Лев(Поля, СтрДлина(Поля)-1); - Запрос = Новый Запрос; - Запрос.Текст = - "ВЫБРАТЬ - | &Поля - |ИЗ - | &Таблица КАК Таблица - |ГДЕ - | Таблица.Ссылка = &Ссылка"; - Запрос.Текст = СтрЗаменить(Запрос.Текст, "&Поля", Поля); - Запрос.Текст = СтрЗаменить(Запрос.Текст, "&Таблица", Отбор.Таблица); - Запрос.УстановитьПараметр("Ссылка", ПредварительныеДанные.ИдентификаторДанных); - ДанныеИзБазы = Запрос.Выполнить().Выгрузить(); - Для каждого Поле Из ЗначенияПолей Цикл - Если ОбъектМетаданных.ТабличныеЧасти.Найти(Поле.Ключ) <> Неопределено Тогда - Поля = Поле.Значение; - ЗначенияПолей[Поле.Ключ] = ДанныеИзБазы[0][Поле.Ключ].Скопировать(, Поля); - ЗначенияПолей[Поле.Ключ].Свернуть(Поля); - Иначе - ЗначенияПолей[Поле.Ключ] = ДанныеИзБазы[0][Поле.Ключ]; - КонецЕсли; - КонецЦикла; + Если ДополнительныеПараметры.УзелПроверкиЗапретаЗагрузки = Неопределено Тогда + Адресат = ДополнительныеПараметры.Пользователь; + ДатаЗапрета = Адресаты.Получить(Адресат); + Если ДатаЗапрета = Неопределено Тогда + Для Каждого Группа Из ДополнительныеПараметры.ГруппыПользователя Цикл + Дата = Адресаты.Получить(Группа); + Если ДатаЗапрета = Неопределено Тогда + ДатаЗапрета = Дата; + Адресат = Группа; + ИначеЕсли ДатаЗапрета < Дата Тогда + ДатаЗапрета = Дата; + Адресат = Группа; + КонецЕсли; + КонецЦикла; + Если ДатаЗапрета = Неопределено Тогда + Адресат = Перечисления.ВидыНазначенияДатЗапрета.ДляВсехПользователей; + ДатаЗапрета = Адресаты.Получить(Адресат); КонецЕсли; КонецЕсли; - - Если ПредварительныеДанные.ЗначенияПолейИзОбъекта <> Неопределено Тогда - ДобавитьДанныеДляПроверки( - ДанныеДляПроверки, - ИсточникиДанных, - ПредварительныеДанные.ЗначенияПолейИзОбъекта, - ЭтоНаборЗаписей, - ОбъектМетаданных); + Иначе + Адресат = ДополнительныеПараметры.УзелПроверкиЗапретаЗагрузки; + ДатаЗапрета = Адресаты.Получить(Адресат); + Если ДатаЗапрета = Неопределено Тогда + Адресат = ДополнительныеПараметры.ПустойУзелПланаОбмена; + ДатаЗапрета = Адресаты.Получить(Адресат); КонецЕсли; - - Если ЗначенияПолей <> Неопределено Тогда - ДобавитьДанныеДляПроверки( - ДанныеДляПроверки, - ИсточникиДанных, - ЗначенияПолей, - ЭтоНаборЗаписей, - ОбъектМетаданных); + Если ДатаЗапрета = Неопределено Тогда + Адресат = Перечисления.ВидыНазначенияДатЗапрета.ДляВсехИнформационныхБаз; + ДатаЗапрета = Адресаты.Получить(Адресат); КонецЕсли; - - ЗафиксироватьТранзакцию(); - Исключение - ОтменитьТранзакцию(); - ВызватьИсключение; - КонецПопытки; + КонецЕсли; - Возврат ДанныеДляПроверки; + Возврат ДатаЗапрета; КонецФункции -Процедура ДобавитьДанныеДляПроверки(Знач ДанныеДляПроверки, - Знач ИсточникиДанных, - Знач ЗначенияПолей, - Знач ЭтоНаборЗаписей, - Знач ОбъектМетаданных) +Функция СообщениеОЗапретах(Запреты, + ОписаниеДанных, + СвойстваВстраивания, + ПоискЗапретовЗагрузки) - Для каждого ИсточникДанных Из ИсточникиДанных Цикл - Если ЭтоНаборЗаписей Тогда - Для каждого Строка Из ЗначенияПолей Цикл - ДобавитьСтрокуДанных(Строка, Строка, ИсточникДанных, ДанныеДляПроверки); - КонецЦикла; - Иначе - ДопИсточникДанных = Новый Структура("ПолеДаты, Раздел, ПолеОбъекта, Таблица"); - ЗаполнитьЗначенияСвойств(ДопИсточникДанных, ИсточникДанных); - ТЧПоляДаты = ""; - ПозицияТочки = Найти(ДопИсточникДанных.ПолеДаты, "."); - Если ПозицияТочки <> 0 Тогда - ТЧПоляДаты = Лев( ДопИсточникДанных.ПолеДаты, ПозицияТочки-1); - Если ОбъектМетаданных.ТабличныеЧасти.Найти(ТЧПоляДаты) = Неопределено Тогда - ТЧПоляДаты = ""; - Иначе - ДопИсточникДанных.ПолеДаты = Сред(ДопИсточникДанных.ПолеДаты, ПозицияТочки+1); - КонецЕсли; - КонецЕсли; - ТЧПоляОбъекта = ""; - ПолеОбъекта = ""; - Если ЗначениеЗаполнено(ДопИсточникДанных.ПолеОбъекта) Тогда - ПозицияТочки = Найти(ДопИсточникДанных.ПолеОбъекта, "."); - Если ПозицияТочки <> 0 Тогда - ТЧПоляОбъекта = Лев( ДопИсточникДанных.ПолеОбъекта, ПозицияТочки-1); - Если ОбъектМетаданных.ТабличныеЧасти.Найти(ТЧПоляОбъекта) = Неопределено Тогда - ТЧПоляОбъекта = ""; - Иначе - ДопИсточникДанных.ПолеОбъекта = Сред( - ДопИсточникДанных.ПолеОбъекта, ПозицияТочки + 1); - КонецЕсли; - КонецЕсли; - КонецЕсли; - Если ЗначениеЗаполнено(ТЧПоляДаты) И ЗначениеЗаполнено(ТЧПоляОбъекта) Тогда - Если ТЧПоляДаты = ТЧПоляОбъекта Тогда - Для каждого Строка Из ЗначенияПолей[ТЧПоляДаты] Цикл - ДобавитьСтрокуДанных(Строка, Строка, ДопИсточникДанных, ДанныеДляПроверки); - КонецЦикла; - Иначе - Для каждого СтрокаДаты Из ЗначенияПолей[ТЧПоляДаты] Цикл - Для каждого СтрокаОбъекта Из ЗначенияПолей[ТЧПоляОбъекта] Цикл - ДобавитьСтрокуДанных( - СтрокаДаты, СтрокаОбъекта, ДопИсточникДанных, ДанныеДляПроверки); - КонецЦикла; - КонецЦикла; - КонецЕсли; - ИначеЕсли ЗначениеЗаполнено(ТЧПоляДаты) Тогда - Для каждого Строка Из ЗначенияПолей[ТЧПоляДаты] Цикл - ДобавитьСтрокуДанных( - Строка, ЗначенияПолей, ДопИсточникДанных, ДанныеДляПроверки); - КонецЦикла; - ИначеЕсли ЗначениеЗаполнено(ТЧПоляОбъекта) Тогда - Для каждого Строка Из ЗначенияПолей[ТЧПоляОбъекта] Цикл - ДобавитьСтрокуДанных(ЗначенияПолей, Строка, ДопИсточникДанных, ДанныеДляПроверки); - КонецЦикла; + НоваяВерсия = ОписаниеДанных.НоваяВерсия; + Текст = ПредставлениеДанных(ОписаниеДанных.Данные); + Если ЗначениеЗаполнено(Текст) Тогда + Если ПоискЗапретовЗагрузки Тогда + Если НоваяВерсия Тогда + Шаблон = НСтр("ru = '%1 невозможно загрузить в запрещенный период.'"); Иначе - ДобавитьСтрокуДанных(ЗначенияПолей, ЗначенияПолей, ДопИсточникДанных, ДанныеДляПроверки); + Шаблон = НСтр("ru = '%1 в запрещенном периоде невозможно заменить загружаемыми данными.'"); + КонецЕсли; + Иначе + Если НоваяВерсия Тогда + Шаблон = НСтр("ru = '%1 невозможно поместить в запрещенный период.'"); + Иначе + Шаблон = НСтр("ru = '%1 в запрещенном периоде невозможно изменить.'"); КонецЕсли; КонецЕсли; + Текст = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(Шаблон, Текст) + Символы.ПС + Символы.ПС; + КонецЕсли; + + Для Каждого Запрет Из Запреты Цикл + Проверка = Запрет.Данные; + Если Запрет.Раздел = Запрет.Объект Тогда + Если Запрет.Раздел = ДатыЗапретаИзмененияСлужебныйПовтИсп.ПустойРаздел() Тогда + Текст = Текст + НСтр("ru = 'Дате %1'"); + Иначе + Текст = Текст + НСтр("ru = 'Дате %1 по разделу ""%2""'"); + КонецЕсли; + ИначеЕсли ЗначениеЗаполнено(СвойстваВстраивания.ЕдинственныйРаздел) Тогда + Текст = Текст + НСтр("ru = 'Дате %1 по объекту ""%3""'"); + Иначе + Текст = Текст + НСтр("ru = 'Дате %1 по объекту ""%3"" раздела ""%2""'"); + КонецЕсли; + Если ПоискЗапретовЗагрузки Тогда + Текст = Текст + " " + НСтр("ru = 'соответствует запрет загрузки данных'") + " "; + Иначе + Текст = Текст + " " + НСтр("ru = 'соответствует запрет изменения данных'") + " "; + КонецЕсли; + Если Запрет.Адресат = Перечисления.ВидыНазначенияДатЗапрета.ДляВсехПользователей Тогда + Текст = Текст + НСтр("ru = 'для всех пользователей'"); + + ИначеЕсли Запрет.Адресат = Перечисления.ВидыНазначенияДатЗапрета.ДляВсехИнформационныхБаз Тогда + Текст = Текст + НСтр("ru = 'для всех информационных баз'"); + + ИначеЕсли ТипЗнч(Запрет.Адресат) = Тип("СправочникСсылка.ГруппыПользователей") + ИЛИ ТипЗнч(Запрет.Адресат) = Тип("СправочникСсылка.ГруппыВнешнихПользователей") Тогда + Текст = Текст + НСтр("ru = 'для группы пользователей ""%4""'"); + + ИначеЕсли ТипЗнч(Запрет.Адресат) = Тип("СправочникСсылка.Пользователи") + ИЛИ ТипЗнч(Запрет.Адресат) = Тип("СправочникСсылка.ВнешниеПользователи") Тогда + Текст = Текст + НСтр("ru = 'для пользователя ""%4""'"); + + ИначеЕсли ЗначениеЗаполнено(Запрет.Адресат) Тогда + Текст = Текст + НСтр("ru = 'для информационной базы ""%4""'"); + Иначе + Текст = Текст + НСтр("ru = 'для всех информационных баз ""%6""'"); + КонецЕсли; + Текст = Текст + " " + НСтр("ru = 'по %5'"); + Если НЕ СвойстваВстраивания.БезРазделовИОбъектов Тогда + Если ЗначениеЗаполнено(Запрет.Раздел) Тогда + Если Запрет.Объект = Запрет.Раздел Тогда + Текст = Текст + " " + НСтр("ru = '(запрет установлен на раздел ""%2"")'"); + ИначеЕсли ЗначениеЗаполнено(СвойстваВстраивания.ЕдинственныйРаздел) Тогда + Текст = Текст + " " + НСтр("ru = '(запрет установлен на объект ""%3"")'"); + Иначе + Текст = Текст + " " + НСтр("ru = '(запрет установлен на объект ""%3"" раздела ""%2"")'"); + КонецЕсли; + Иначе + Текст = Текст + " " + НСтр("ru = '(установлена общая дата запрета)'"); + КонецЕсли; + КонецЕсли; + Текст = СтрЗаменить(Текст, "%1", Формат(Проверка.Дата, "ДЛФ=Д")); + Текст = СтрЗаменить(Текст, "%2", Проверка.Раздел); + Текст = СтрЗаменить(Текст, "%3", Проверка.Объект); + Текст = СтрЗаменить(Текст, "%4", Запрет.Адресат); + Текст = СтрЗаменить(Текст, "%5", Формат(Запрет.Дата, "ДЛФ=Д")); + Текст = СтрЗаменить(Текст, "%6", Запрет.Адресат.Метаданные().Представление()); + Текст = Текст + Символы.ПС; + + Текст = Текст + Символы.ПС; КонецЦикла; -КонецПроцедуры + Возврат СокрП(Текст); + +КонецФункции -Процедура ДобавитьСтрокуДанных(Знач СтрокаДаты, - Знач СтрокаОбъекта, - Знач ИсточникДанных, - Знач ДанныеДляПроверки) +Функция ПредставлениеДанных(Данные) - НоваяСтрока = ДанныеДляПроверки.Добавить(); - УстановитьЗначениеПоля(СтрокаДаты, НоваяСтрока.Дата, ИсточникДанных.ПолеДаты); - - Если ЗначениеЗаполнено(ИсточникДанных.Раздел) Тогда - НоваяСтрока.Раздел = ПланыВидовХарактеристик.РазделыДатЗапретаИзменения[ - ИсточникДанных.Раздел]; + Если ТипЗнч(Данные) = Тип("Строка") Тогда + Возврат СокрЛП(Данные); КонецЕсли; - Если ЗначениеЗаполнено(ИсточникДанных.ПолеОбъекта) Тогда - УстановитьЗначениеПоля(СтрокаОбъекта, НоваяСтрока.Объект, ИсточникДанных.ПолеОбъекта) - КонецЕсли; - -КонецПроцедуры - -Процедура УстановитьЗначениеПоля(Знач Строка, ПолеДанных, Знач ПолеИсточника) - - ПозицияТочки = Найти(ПолеИсточника, "."); - Если ПозицияТочки = 0 Тогда - ПолеДанных = Строка[ПолеИсточника]; + Если ТипЗнч(Данные) = Тип("Структура") Тогда + ЭтоРегистр = Истина; + Если ТипЗнч(Данные.Регистр) = Тип("Строка") Тогда + ОбъектМетаданных = Метаданные.НайтиПоПолномуИмени(Данные.Регистр); + Иначе + ОбъектМетаданных = Метаданные.НайтиПоТипу(ТипЗнч(Данные.Регистр)); + КонецЕсли; Иначе - Значение = Строка[Лев(ПолеИсточника, ПозицияТочки-1)]; - Реквизит = Сред(ПолеИсточника, ПозицияТочки+1); - ПолеДанных = ЗначениеРеквизита(Значение, Реквизит); + ОбъектМетаданных = Метаданные.НайтиПоТипу(ТипЗнч(Данные)); + ЭтоРегистр = ОбщегоНазначения.ЭтоРегистр(ОбъектМетаданных); КонецЕсли; -КонецПроцедуры - -Функция НайденЗапретИзмененияИлиЗагрузкиДанных(Запрос, - СообщитьОЗапрете, - ИдентификаторДанных, - ТаблицаДанных, - СвойстваВстраивания, - ПоискЗапретовЗагрузки, - Текст) - - Запрос.Текст = - "ВЫБРАТЬ - | ДанныеДляПроверки.КлючСтроки, - | ДатыЗапретаИзменения.Раздел, - | ДатыЗапретаИзменения.Объект, - | ДанныеДляПроверки.Дата, - | ДатыЗапретаИзменения.Пользователь, - | ДатыЗапретаИзменения.ДатаЗапрета, - | ВЫБОР - | КОГДА ТИПЗНАЧЕНИЯ(ДатыЗапретаИзменения.Пользователь) = ТИП(Перечисление.ВидыНазначенияДатЗапрета) - | ТОГДА 0 - | КОГДА ТИПЗНАЧЕНИЯ(ДатыЗапретаИзменения.Пользователь) = ТИП(Справочник.ГруппыПользователей) - | ТОГДА 1 - | КОГДА ТИПЗНАЧЕНИЯ(ДатыЗапретаИзменения.Пользователь) = ТИП(Справочник.ГруппыВнешнихПользователей) - | ТОГДА 1 - | КОГДА ДатыЗапретаИзменения.Пользователь В (&ПустыеСсылкиУзловПлановОбмена) - | ТОГДА 1 - | ИНАЧЕ 10 - | КОНЕЦ + ВЫБОР - | КОГДА ДатыЗапретаИзменения.Объект = ДатыЗапретаИзменения.Раздел - | ТОГДА 0 - | ИНАЧЕ 100 - | КОНЕЦ + ВЫБОР - | КОГДА ДатыЗапретаИзменения.Раздел = ЗНАЧЕНИЕ(ПланВидовХарактеристик.РазделыДатЗапретаИзменения.ПустаяСсылка) - | ТОГДА 0 - | ИНАЧЕ 1000 - | КОНЕЦ КАК Приоритет - |ПОМЕСТИТЬ ДатыЗапретаБезУчетаПриоритета - |ИЗ - | ДанныеДляПроверки КАК ДанныеДляПроверки - | ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ДатыЗапретаИзменения КАК ДатыЗапретаИзменения - | ПО (ДатыЗапретаИзменения.Раздел В (ДанныеДляПроверки.Раздел, ЗНАЧЕНИЕ(ПланВидовХарактеристик.РазделыДатЗапретаИзменения.ПустаяСсылка))) - | И (ДатыЗапретаИзменения.Объект В (ДанныеДляПроверки.Объект, ДатыЗапретаИзменения.Раздел)) - | И (ВЫБОР - | КОГДА ДатыЗапретаИзменения.Пользователь = &ВидНазначенияДатЗапретаДляВсех - | ТОГДА ИСТИНА - | КОГДА ДатыЗапретаИзменения.Пользователь = &Пользователь - | ИЛИ ДатыЗапретаИзменения.Пользователь В (&ПустыеСсылкиУзловПлановОбмена) - | И ТИПЗНАЧЕНИЯ(ДатыЗапретаИзменения.Пользователь) = ТИПЗНАЧЕНИЯ(&Пользователь) - | ТОГДА ИСТИНА - | ИНАЧЕ ДатыЗапретаИзменения.Пользователь В - | (ВЫБРАТЬ - | СоставыГруппПользователей.ГруппаПользователей - | ИЗ - | РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей - | ГДЕ - | СоставыГруппПользователей.Пользователь = &Пользователь) - | КОНЕЦ) - |; - | - |//////////////////////////////////////////////////////////////////////////////// - |ВЫБРАТЬ - | ДанныеДляПроверки.Раздел, - | ДанныеДляПроверки.Объект, - | ДанныеДляПроверки.Дата, - | ДанныеДляПроверки.КлючСтроки - |ИЗ - | ДанныеДляПроверки КАК ДанныеДляПроверки - |; - | - |//////////////////////////////////////////////////////////////////////////////// - |ВЫБРАТЬ РАЗЛИЧНЫЕ - | ДатыЗапрета.КлючСтроки КАК КлючСтроки, - | ДатыЗапрета.Раздел, - | ДатыЗапрета.Объект, - | ДатыЗапрета.Пользователь, - | ДатыЗапрета.ДатаЗапрета - |ИЗ - | ДатыЗапретаБезУчетаПриоритета КАК ДатыЗапрета - | ВНУТРЕННЕЕ СОЕДИНЕНИЕ (ВЫБРАТЬ - | ДатыЗапрета.КлючСтроки КАК КлючСтроки, - | ДатыЗапрета.Приоритет КАК Приоритет, - | МАКСИМУМ(ДатыЗапрета.ДатаЗапрета) КАК ДатаЗапрета - | ИЗ - | ДатыЗапретаБезУчетаПриоритета КАК ДатыЗапрета - | ВНУТРЕННЕЕ СОЕДИНЕНИЕ (ВЫБРАТЬ - | ДатыЗапрета.КлючСтроки КАК КлючСтроки, - | МАКСИМУМ(ДатыЗапрета.Приоритет) КАК Приоритет - | ИЗ - | ДатыЗапретаБезУчетаПриоритета КАК ДатыЗапрета - | - | СГРУППИРОВАТЬ ПО - | ДатыЗапрета.КлючСтроки) КАК МаксимальныеПриоритет - | ПО ДатыЗапрета.КлючСтроки = МаксимальныеПриоритет.КлючСтроки - | И ДатыЗапрета.Приоритет = МаксимальныеПриоритет.Приоритет - | - | СГРУППИРОВАТЬ ПО - | ДатыЗапрета.КлючСтроки, - | ДатыЗапрета.Приоритет) КАК ПриоритетныеДатыЗапрета - | ПО ДатыЗапрета.КлючСтроки = ПриоритетныеДатыЗапрета.КлючСтроки - | И ДатыЗапрета.Приоритет = ПриоритетныеДатыЗапрета.Приоритет - | И ДатыЗапрета.ДатаЗапрета = ПриоритетныеДатыЗапрета.ДатаЗапрета - |ГДЕ - | ДатыЗапрета.ДатаЗапрета >= ДатыЗапрета.Дата - | - |УПОРЯДОЧИТЬ ПО - | КлючСтроки - |ИТОГИ ПО - | КлючСтроки - |; - | - |//////////////////////////////////////////////////////////////////////////////// - |УНИЧТОЖИТЬ ДатыЗапретаБезУчетаПриоритета"; - - РезультатыЗапроса = Запрос.ВыполнитьПакет(); - - ЗапретыДанных = РезультатыЗапроса[2].Выгрузить(ОбходРезультатаЗапроса.ПоГруппировкам); - - Если ЗапретыДанных.Строки.Количество() > 0 Тогда - - Проверки = РезультатыЗапроса[1].Выгрузить(); - Текст = ПолучитьПредставлениеДанных(ИдентификаторДанных, ТаблицаДанных); - Если ЗначениеЗаполнено(Текст) Тогда - Если ПоискЗапретовЗагрузки Тогда - Текст = Текст - + НСтр("ru = ' запрещено загружать в запрещенный период.'") - + Символы.ПС - + Символы.ПС; - Иначе - Текст = Текст - + НСтр("ru = ' запрещено изменять или перемещать в запрещенный период.'") - + Символы.ПС - + Символы.ПС; - КонецЕсли; - КонецЕсли; - - Для каждого ОписаниеЗапретов Из ЗапретыДанных.Строки Цикл - Запреты = ОписаниеЗапретов.Строки; - Проверка = Проверки.Найти(ОписаниеЗапретов.КлючСтроки, "КлючСтроки"); - Если Проверка.Раздел = Проверка.Объект Тогда - Если Проверка.Раздел = ПланыВидовХарактеристик.РазделыДатЗапретаИзменения.ПустаяСсылка() Тогда - Текст = Текст + НСтр("ru = 'Дате %1'"); - Иначе - Текст = Текст + НСтр("ru = 'Дате %1 по разделу ""%2""'"); - КонецЕсли; - ИначеЕсли СвойстваВстраивания.ЕдинственныйРаздел Тогда - Текст = Текст + НСтр("ru = 'Дате %1 по объекту ""%3""'"); - Иначе - Текст = Текст + НСтр("ru = 'Дате %1 по объекту ""%3"" раздела ""%2""'"); - КонецЕсли; - Текст = Текст + " "; - Если Запреты.Количество() = 1 Тогда - Текст = Текст + НСтр("ru = 'соответствует запрет изменения данных'") + " "; - Иначе - Текст = Текст + НСтр("ru = 'соответствуют запреты изменения данных:'") + Символы.ПС; - КонецЕсли; - Для каждого Запрет Из Запреты Цикл - Текст = Текст + ?(Запреты.Количество() = 1, "", Символы.ПС + "- "); - Если Запрет.Пользователь = Перечисления.ВидыНазначенияДатЗапрета.ДляВсехПользователей Тогда - Текст = Текст + НСтр("ru = 'для всех пользователей'"); - - ИначеЕсли Запрет.Пользователь = Перечисления.ВидыНазначенияДатЗапрета.ДляВсехИнформационныхБаз Тогда - Текст = Текст + НСтр("ru = 'для всех информационных баз'"); - - ИначеЕсли ТипЗнч(Запрет.Пользователь) = Тип("СправочникСсылка.ГруппыПользователей") - ИЛИ ТипЗнч(Запрет.Пользователь) = Тип("СправочникСсылка.ГруппыВнешнихПользователей") Тогда - Текст = Текст + НСтр("ru = 'для группы пользователей ""%4""'"); - - ИначеЕсли ТипЗнч(Запрет.Пользователь) = Тип("СправочникСсылка.Пользователи") - ИЛИ ТипЗнч(Запрет.Пользователь) = Тип("СправочникСсылка.ВнешниеПользователи") Тогда - Текст = Текст + НСтр("ru = 'для пользователя ""%4""'"); - - ИначеЕсли ЗначениеЗаполнено(Запрет.Пользователь) Тогда - Текст = Текст + НСтр("ru = 'для информационной базы ""%4""'"); - Иначе - Текст = Текст + НСтр("ru = 'для всех информационных баз ""%6""'"); - КонецЕсли; - Текст = Текст + " " + НСтр("ru = 'по %5'"); - Если НЕ СвойстваВстраивания.БезРазделовИОбъектов Тогда - Если ЗначениеЗаполнено(Запрет.Раздел) Тогда - Если Запрет.Объект = Запрет.Раздел Тогда - Текст = Текст + " " + НСтр("ru = '(запрет установлен на раздел ""%2"")'"); - ИначеЕсли СвойстваВстраивания.ЕдинственныйРаздел Тогда - Текст = Текст + " " + НСтр("ru = '(запрет установлен на объект ""%3"")'"); - Иначе - Текст = Текст + " " + НСтр("ru = '(запрет установлен на объект ""%3"" раздела ""%2"")'"); - КонецЕсли; - Иначе - Текст = Текст + " " + НСтр("ru = '(установлена общая дата запрета)'"); - КонецЕсли; - КонецЕсли; - Текст = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - Текст, - Формат(Проверка.Дата, "ДЛФ=Д"), - Проверка.Раздел, - Проверка.Объект, - Запрет.Пользователь, - Формат(Запрет.ДатаЗапрета, "ДЛФ=Д"), - Запрет.Пользователь.Метаданные().Представление()) + Символы.ПС; - КонецЦикла; - Текст = Текст + Символы.ПС; - КонецЦикла; - - Если СообщитьОЗапрете Тогда - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(Текст); - ЗаписьЖурналаРегистрации( - ?(ПоискЗапретовЗагрузки, - НСтр("ru = 'Даты запрета изменения.Найдены запреты загрузки'", - ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), - НСтр("ru = 'Даты запрета изменения.Найдены запреты изменения'", - ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка())), - УровеньЖурналаРегистрации.Ошибка, - , - , - Текст, - РежимТранзакцииЗаписиЖурналаРегистрации.Транзакционная); - КонецЕсли; + Если ОбъектМетаданных = Неопределено Тогда + Возврат ""; КонецЕсли; - Возврат ЗапретыДанных.Строки.Количество() > 0; - -КонецФункции - -Функция ЗначениеРеквизита(Ссылка, ИмяРеквизита) - - Запрос = Новый Запрос; - Запрос.Текст = - "ВЫБРАТЬ - | ЕстьNULL(" + ИмяРеквизита + ", Неопределено) КАК ЗначениеРеквизита - |ИЗ - | " + Ссылка.Метаданные().ПолноеИмя() + " КАК Таблица - |ГДЕ - | Таблица.Ссылка = &Ссылка"; - Запрос.УстановитьПараметр("Ссылка", Ссылка); - - Выборка = Запрос.Выполнить().Выбрать(); - Выборка.Следующий(); - - Возврат Выборка.ЗначениеРеквизита; - -КонецФункции - -Функция ПолучитьПредставлениеДанных(ИдентификаторДанных, ТаблицаДанных) - - ПредставлениеДанных = ""; - ОбъектМетаданных = Метаданные.НайтиПоПолномуИмени(ТаблицаДанных); - - Если Метаданные.РегистрыСведений.Содержит(ОбъектМетаданных) Тогда - ПредставлениеДанных = НСтр("ru = 'Записи регистра сведений ""%1""'"); - - ИначеЕсли Метаданные.РегистрыНакопления.Содержит(ОбъектМетаданных) Тогда - ПредставлениеДанных = НСтр("ru = 'Записи регистра накопления ""%1""'"); - - ИначеЕсли Метаданные.РегистрыБухгалтерии.Содержит(ОбъектМетаданных) Тогда - ПредставлениеДанных = НСтр("ru = 'Записи регистра бухгалтерии ""%1""'"); - - ИначеЕсли Метаданные.РегистрыРасчета.Содержит(ОбъектМетаданных) Тогда - ПредставлениеДанных = НСтр("ru = 'Записи регистра расчета ""%1""'"); - - КонецЕсли; - - Если ЗначениеЗаполнено(ПредставлениеДанных) Тогда + Если ЭтоРегистр Тогда + ПредставлениеДанных = ОбъектМетаданных.Представление(); КоличествоПолей = 0; - Для каждого ЭлементОтбора Из ИдентификаторДанных Цикл - КоличествоПолей = КоличествоПолей + 1; + Для каждого ЭлементОтбора Из Данные.Отбор Цикл + Если ЭлементОтбора.Использование Тогда + КоличествоПолей = КоличествоПолей + 1; + КонецЕсли; КонецЦикла; Если КоличествоПолей = 1 Тогда ПредставлениеДанных = ПредставлениеДанных - + " " + НСтр("ru = 'с полем'") + " " + Строка(ИдентификаторДанных); + + " " + НСтр("ru = 'с полем'") + " " + Строка(Данные.Отбор); ИначеЕсли КоличествоПолей > 1 Тогда ПредставлениеДанных = ПредставлениеДанных - + " " + НСтр("ru = 'с полями'") + " " + Строка(ИдентификаторДанных); + + " " + НСтр("ru = 'с полями'") + " " + Строка(Данные.Отбор); КонецЕсли; + ИначеЕсли Метаданные.Документы.Содержит(ОбъектМетаданных) Тогда + ПредставлениеДанных = Строка(Данные); Иначе - Если Метаданные.Справочники.Содержит(ОбъектМетаданных) Тогда - ПредставлениеДанных = НСтр("ru = 'Элемент справочника ""%1""'"); - - ИначеЕсли Метаданные.Документы.Содержит(ОбъектМетаданных) Тогда - ПредставлениеДанных = НСтр("ru = 'Документ'"); - - ИначеЕсли Метаданные.ПланыВидовХарактеристик.Содержит(ОбъектМетаданных) Тогда - ПредставлениеДанных = НСтр("ru = 'План видов характеристик ""%1""'"); - - ИначеЕсли Метаданные.ПланыСчетов.Содержит(ОбъектМетаданных) Тогда - ПредставлениеДанных = НСтр("ru = 'План счетов ""%1""'"); - - ИначеЕсли Метаданные.ПланыВидовРасчета.Содержит(ОбъектМетаданных) Тогда - ПредставлениеДанных = НСтр("ru = 'План видов расчета ""%1""'"); - - ИначеЕсли Метаданные.БизнесПроцессы.Содержит(ОбъектМетаданных) Тогда - ПредставлениеДанных = НСтр("ru = 'Бизнес-процесс'"); - - ИначеЕсли Метаданные.Задачи.Содержит(ОбъектМетаданных) Тогда - ПредставлениеДанных = НСтр("ru = 'Задача'"); - - ИначеЕсли Метаданные.ПланыОбмена.Содержит(ОбъектМетаданных) Тогда - ПредставлениеДанных = НСтр("ru = 'План обмена ""%1""'"); - КонецЕсли; - - Если ЗначениеЗаполнено(ПредставлениеДанных) И ЗначениеЗаполнено(ИдентификаторДанных) Тогда - ПредставлениеДанных = ПредставлениеДанных + " " + Строка(ИдентификаторДанных); - Иначе - ПредставлениеДанных = ""; - КонецЕсли; + ПредставлениеДанных = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку("%1 (%2)", Строка(Данные), ОбъектМетаданных.Представление()); КонецЕсли; - - ПредставлениеДанных = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - ПредставлениеДанных, ОбъектМетаданных.Синоним); - + Возврат ПредставлениеДанных; КонецФункции -// Функция преобразует Отбор в условие на языке запросов и вставляет в запрос. -// -// Параметры: -// Запрос - Запрос. -// -// Отбор - РегистрСведенийНаборЗаписей.Отбор, -// РегистрНакопленияНаборЗаписей.Отбор, -// РегистрБухгалтерииНаборЗаписей.Отбор, -// РегистрРасчетаНаборЗаписей.Отбор. -// -// ПсевдонимТаблицы - Строка - псевдоним регистра в запросе. -// -// МестоУсловияОтбора - Строка - Идентификатор места условия в запросе, -// например, &УсловиеОтбора. -// -// Возвращаемое значение: -// Строка. -// -Процедура ВставитьПараметрыИУсловиеОтбора(Запрос, - Отбор, - ПсевдонимТаблицы = "Таблица", - МестоУсловияОтбора = "&УсловиеОтбора") - - Условие = ""; - Для каждого ЭлементОтбора Из Отбор Цикл - - Если ЭлементОтбора.Использование Тогда - Если НЕ ПустаяСтрока(Условие) Тогда - Условие = Условие + Символы.ПС + "И "; - КонецЕсли; - Запрос.УстановитьПараметр(ЭлементОтбора.Имя, ЭлементОтбора.Значение); - Условие = Условие - + ПсевдонимТаблицы + "." + ЭлементОтбора.Имя + " = &" + ЭлементОтбора.Имя; - КонецЕсли; - КонецЦикла; - Условие = ?(ЗначениеЗаполнено(Условие), Условие, "Истина"); - Запрос.Текст = СтрЗаменить(Запрос.Текст, МестоУсловияОтбора, Условие); - -КонецПроцедуры - #КонецОбласти diff --git a/SSL/src/CommonModules/ДатыЗапретаИзмененияПереопределяемый/Module.bsl b/SSL/src/CommonModules/ДатыЗапретаИзмененияПереопределяемый/Module.bsl index e1286b711..789ecbbca 100644 --- a/SSL/src/CommonModules/ДатыЗапретаИзмененияПереопределяемый/Module.bsl +++ b/SSL/src/CommonModules/ДатыЗапретаИзмененияПереопределяемый/Module.bsl @@ -19,16 +19,20 @@ КонецПроцедуры // Содержит описание таблиц и полей объектов для проверки запретов изменения данных. -// Вызывается из процедуры ИзменениеЗапрещено общего модуля ДатыЗапретаИзменения, используемой в подписке -// на событие ПередЗаписью объекта для проверки наличия запретов и отказа от изменений запрещенного объекта. +// Вызывается из процедуры ИзменениеЗапрещено общего модуля ДатыЗапретаИзменения, +// используемой в подписке на событие ПередЗаписью объекта для проверки наличия +// запретов и отказа от изменений запрещенного объекта. // // Параметры: // ИсточникиДанных - ТаблицаЗначений - с колонками: -// * Таблица - Строка - полное имя объекта метаданных, например, "Документ.ПриходнаяНакладная". -// * ПолеДаты - Строка - имя реквизита объекта или табличной части, например "Дата", "Товары.ДатаОтгрузки". -// * Раздел - Строка - имя предопределенного элемента "ПланВидовХарактеристикСсылка.РазделыДатЗапрета". -// * ПолеОбъекта - Строка - имя реквизита объекта или реквизита табличной части, например "Организация", -// "Товары.Склад". +// * Таблица - Строка - полное имя объекта метаданных, +// например, Метаданные.Документы.ПриходнаяНакладная.ПолноеИмя(). +// * ПолеДаты - Строка - имя реквизита объекта или табличной части, +// например "Дата", "Товары.ДатаОтгрузки". +// * Раздел - Строка - имя предопределенного элемента +// "ПланВидовХарактеристикСсылка.РазделыДатЗапрета". +// * ПолеОбъекта - Строка - имя реквизита объекта или реквизита табличной части, +// например "Организация", "Товары.Склад". // // Для добавления строки имеется процедура ДобавитьСтроку в общем модуле ДатыЗапретаИзменения. // @@ -54,23 +58,21 @@ // РегистрБухгалтерииНаборЗаписей, // РегистрРасчетаНаборЗаписей - набор записей (ПередЗаписью или ПриЧтенииНаСервере). // -// ПроверкаЗапретаИзменения - Булево - если установить Ложь проверка запрета -// изменения выполняться не будет. -// - Строка - два значения "НоваяВерсия" и "СтараяВерсия", обозначающие, -// что проверку нужно выполнять только для указанной версии объекта. +// ПроверкаЗапретаИзменения - Булево - когда Истина, тогда проверка изменения выполняется. +// Если установить Ложь, тогда проверка запрета изменения будет пропущена. // -// УзелПроверкиЗапретаЗагрузки - Неопределено, ПланыОбменаСсылка - -// когда Неопределено проверка запрета загрузки не выполняется. +// УзелПроверкиЗапретаЗагрузки - Неопределено - проверка запрета загрузки не выполняется. +// - ПланыОбменаСсылка - проверка запрета загрузки выполняется. Если +// установить Неопределено, проверка запрета загрузки будет пропущена. // -// СообщитьОЗапрете - Булево - начальное значение Истина. Если установить Ложь, -// тогда сообщение об ошибке не будет отправлено пользователю. -// Например, при интерактивной записи будет виден лишь отказ записи. -// В журнал регистрации сообщение будет записано в любом случае. +// ВерсияОбъекта - Строка - начальное значение "". Проверяются обе версии объекта. +// Если установить "СтараяВерсия" или "НоваяВерсия", тогда будет +// выполнена проверка только старой или только новой версии объекта. // Процедура ПередПроверкойЗапретаИзменения(Объект, ПроверкаЗапретаИзменения, УзелПроверкиЗапретаЗагрузки, - СообщитьОЗапрете) Экспорт + ВерсияОбъекта) Экспорт diff --git a/SSL/src/CommonModules/ДатыЗапретаИзмененияСлужебный/Module.bsl b/SSL/src/CommonModules/ДатыЗапретаИзмененияСлужебный/Module.bsl index 08e271375..a599c515f 100644 --- a/SSL/src/CommonModules/ДатыЗапретаИзмененияСлужебный/Module.bsl +++ b/SSL/src/CommonModules/ДатыЗапретаИзмененияСлужебный/Module.bsl @@ -13,19 +13,11 @@ СерверныеОбработчики["СтандартныеПодсистемы.ОбновлениеВерсииИБ\ПриДобавленииОбработчиковОбновления"].Добавить( "ДатыЗапретаИзмененияСлужебный"); - СерверныеОбработчики["СтандартныеПодсистемы.БазоваяФункциональность\ПриДобавленииОбработчиковУстановкиПараметровСеанса"].Добавить( - "ДатыЗапретаИзмененияСлужебный"); - Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ВариантыОтчетов") Тогда СерверныеОбработчики["СтандартныеПодсистемы.ВариантыОтчетов\ПриНастройкеВариантовОтчетов"].Добавить( "ДатыЗапретаИзмененияСлужебный"); КонецЕсли; - Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаВМоделиСервиса.ОчередьЗаданий") Тогда - СерверныеОбработчики["СтандартныеПодсистемы.РаботаВМоделиСервиса.ОчередьЗаданий\ПриПолученииСпискаШаблонов"].Добавить( - "ДатыЗапретаИзмененияСлужебный"); - КонецЕсли; - Если ОбщегоНазначения.ПодсистемаСуществует("ТехнологияСервиса.ВыгрузкаЗагрузкаДанных") Тогда СерверныеОбработчики[ "ТехнологияСервиса.ВыгрузкаЗагрузкаДанных\ПриЗаполненииТиповОбщихДанныхНеТребующихСопоставлениеСсылокПриЗагрузке"].Добавить( @@ -45,6 +37,83 @@ КонецПроцедуры +// Устанавливает необходимость обновления версии дат запрета изменения после изменения данных +// в режиме загрузки или непосредственно обновляет версию (загрузка в рамках обновления ИБ). +// +// Вызывается из события ПриЗаписи регистров ДатыЗапретаИзменения и СоставыГруппПользователей. +// +Процедура ОбновитьВерсиюДатЗапретаИзмененияПриЗагрузкеДанных(Объект) Экспорт + + УстановитьПривилегированныйРежим(Истина); + + Если ЗначениеЗаполнено(Объект.ОбменДанными.Отправитель) Тогда + ПараметрыСеанса.ОбновитьВерсиюДатЗапретаИзмененияПослеЗагрузкиДанных = Истина; + Иначе + ОбновитьВерсиюДатЗапретаИзменения(); + КонецЕсли; + +КонецПроцедуры + +// Возвращает соответствие имен параметров сеанса и обработчиков для их инициализации. +// +Процедура ПриДобавленииОбработчиковУстановкиПараметровСеанса(Обработчики) Экспорт + + Обработчики.Вставить("ПропуститьПроверкуЗапретаИзменения", + "ДатыЗапретаИзмененияСлужебный.УстановкаПараметровСеанса"); + + Обработчики.Вставить("ДействующиеДатыЗапретаИзменения", + "ДатыЗапретаИзмененияСлужебный.УстановкаПараметровСеанса"); + + Обработчики.Вставить("ОбновитьВерсиюДатЗапретаИзмененияПослеЗагрузкиДанных", + "ДатыЗапретаИзмененияСлужебный.УстановкаПараметровСеанса"); + +КонецПроцедуры + +// См. описание процедуры СтандартныеПодсистемыСервер.СобратьСтатистикуКонфигурации. +Процедура СобратьСтатистикуКонфигурации() Экспорт + + Если Не ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ЦентрМониторинга") Тогда + Возврат; + КонецЕсли; + + МодульЦентрМониторинга = ОбщегоНазначения.ОбщийМодуль("ЦентрМониторинга"); + + ТекстЗапроса = + "ВЫБРАТЬ + | КОЛИЧЕСТВО(1) КАК Количество + |ИЗ + | РегистрСведений.ДатыЗапретаИзменения КАК ДатыЗапретаИзменения"; + + Запрос = Новый Запрос(ТекстЗапроса); + Выборка = Запрос.Выполнить().Выбрать(); + Выборка.Следующий(); + + МодульЦентрМониторинга.ЗаписатьСтатистикуОбъектаКонфигурации("ДатаЗапретаУстановлена", Выборка.Количество > 0); + +КонецПроцедуры + +// Обработчики событий подсистемы Пользователи. + +// Обновляет группировки пользователей после обновления составов групп пользователей +// используемых для выполнения проверок разрешенных пользователей. +// +// Параметры: +// УчастникиИзменений - Массив значений типов: +// - СправочникСсылка.Пользователи. +// - СправочникСсылка.ВнешниеПользователи. +// Пользователи которые участвовали в изменении состава групп. +// +// ИзмененныеГруппы - Массив значений типов: +// - СправочникСсылка.ГруппыПользователей. +// - СправочникСсылка.ГруппыВнешнихПользователей. +// Группы, состав которых был изменен. +// +Процедура ПослеОбновленияСоставовГруппПользователей(УчастникиИзменений, ИзмененныеГруппы) Экспорт + + ОбновитьВерсиюДатЗапретаИзменения(); + +КонецПроцедуры + #КонецОбласти #Область СлужебныеПроцедурыИФункции @@ -68,13 +137,17 @@ Обработчик.Версия = "1.1.3.2"; Обработчик.Процедура = "ДатыЗапретаИзмененияСлужебный.УдалитьПустыеДатыЗапретаПоУмолчанию"; -КонецПроцедуры - -// Возвращает соответствие имен параметров сеанса и обработчиков для их инициализации. -// -Процедура ПриДобавленииОбработчиковУстановкиПараметровСеанса(Обработчики) Экспорт + Обработчик = Обработчики.Добавить(); + Обработчик.Версия = "2.3.1.51"; + Обработчик.Процедура = "ДатыЗапретаИзмененияСлужебный.ЗаполнитьИспользованиеДатЗапрета"; - Обработчики.Вставить("ПропуститьПроверкуЗапретаИзменения", "ДатыЗапретаИзмененияСлужебный.УстановкаПараметровСеанса"); + Обработчик = Обработчики.Добавить(); + Обработчик.Версия = "2.3.1.55"; + Обработчик.Процедура = "ДатыЗапретаИзмененияСлужебный.УстановитьОтносительныеДатыЗапрета"; + + Обработчик = Обработчики.Добавить(); + Обработчик.НачальноеЗаполнение = Истина; + Обработчик.Процедура = "ДатыЗапретаИзмененияСлужебный.УстановитьНачальнуюДатуЗапретаИзменения"; КонецПроцедуры @@ -172,25 +245,10 @@ // - они отключаются только с отключением всего отчета. // Процедура ПриНастройкеВариантовОтчетов(Настройки) Экспорт + МодульВариантыОтчетов = ОбщегоНазначения.ОбщийМодуль("ВариантыОтчетов"); МодульВариантыОтчетов.НастроитьОтчетВМодулеМенеджера(Настройки, Метаданные.Отчеты.ДатыЗапретаЗагрузки); МодульВариантыОтчетов.НастроитьОтчетВМодулеМенеджера(Настройки, Метаданные.Отчеты.ДатыЗапретаИзменения); -КонецПроцедуры - -// Обработчики событий подсистемы РаботаВМоделиСервиса.ОчередьЗаданий. - -// Обработчик события ПриПолученииСпискаШаблонов. -// -// Формирует список шаблонов заданий очереди. -// -// Параметры: -// Шаблоны - Массив строк. В параметр следует добавить имена предопределенных -// неразделенных регламентных заданий, которые должны использоваться в качестве -// шаблонов для заданий очереди. -// -Процедура ПриПолученииСпискаШаблонов(Шаблоны) Экспорт - - Шаблоны.Добавить("ПересчетТекущихЗначенийОтносительныхДатЗапретаИзменения"); КонецПроцедуры @@ -212,7 +270,7 @@ КонецПроцедуры //////////////////////////////////////////////////////////////////////////////// -// Другие процедуры и функции +// Основные процедуры и функции. // Устанавливает параметры сеанса подсистемы обмена данными. // @@ -222,246 +280,211 @@ // Процедура УстановкаПараметровСеанса(ИмяПараметра, УстановленныеПараметры) Экспорт - ПараметрыСеанса.ПропуститьПроверкуЗапретаИзменения = Ложь; - УстановленныеПараметры.Добавить("ПропуститьПроверкуЗапретаИзменения"); + Если ИмяПараметра = "ДействующиеДатыЗапретаИзменения" Тогда + Значение = ЗначениеПараметраСеансаДействующиеДатыЗапретаИзменения(); + ПараметрыСеанса.ДействующиеДатыЗапретаИзменения = Значение; + УстановленныеПараметры.Добавить("ДействующиеДатыЗапретаИзменения"); + ПоследняяПроверка = ДатыЗапретаИзмененияСлужебныйПовтИсп.ПоследняяПроверкаВерсииДействующихДатЗапрета(); + ПоследняяПроверка.Дата = ТекущаяДатаСеанса(); + + ИначеЕсли ИмяПараметра = "ПропуститьПроверкуЗапретаИзменения" Тогда + ПараметрыСеанса.ПропуститьПроверкуЗапретаИзменения = Ложь; + УстановленныеПараметры.Добавить("ПропуститьПроверкуЗапретаИзменения"); + + ИначеЕсли ИмяПараметра = "ОбновитьВерсиюДатЗапретаИзмененияПослеЗагрузкиДанных" Тогда + ПараметрыСеанса.ОбновитьВерсиюДатЗапретаИзмененияПослеЗагрузкиДанных = Ложь; + УстановленныеПараметры.Добавить("ОбновитьВерсиюДатЗапретаИзмененияПослеЗагрузкиДанных"); + КонецЕсли; КонецПроцедуры -// Выполняет пересчет и обновление текущий значений относительных -// дат запрета по состоянию на текущую дату сеанса. +// Обработчик подписки ОбновлениеВерсииДатЗапретаИзмененияПослеЗагрузкиДанных +// на событие ПриЗаписи любого плана обмена. // -// Параметры: -// ЗаписатьОписаниеРезультатаВЖурналРегистрации - Булево. -// ОписаниеРезультата - Строка. -// -Процедура ПересчитатьТекущиеЗначенияОтносительныхДатЗапрета(ЗаписатьОписаниеРезультатаВЖурналРегистрации = Истина, ОписаниеРезультата = "") Экспорт +Процедура ОбновлениеВерсииДатЗапретаИзмененияПослеЗагрузкиДанныхПриЗаписи(Источник, Отказ) Экспорт УстановитьПривилегированныйРежим(Истина); - Запрос = Новый Запрос; - Запрос.Текст = - "ВЫБРАТЬ - | ДатыЗапретаИзменения.Раздел, - | ДатыЗапретаИзменения.Объект, - | ДатыЗапретаИзменения.Пользователь, - | ДатыЗапретаИзменения.ДатаЗапрета, - | ДатыЗапретаИзменения.ОписаниеДатыЗапрета - |ИЗ - | РегистрСведений.ДатыЗапретаИзменения КАК ДатыЗапретаИзменения"; - - Выборка = Запрос.Выполнить().Выбрать(); - - ТекущаяДатаНаСервере = НачалоДня(ТекущаяДатаСеанса()); - МенеджерЗаписи = РегистрыСведений.ДатыЗапретаИзменения.СоздатьМенеджерЗаписи(); - ПредставлениеОшибки = ""; - Отказ = Ложь; - ЕстьОбновленныеДаты = Ложь; - НетОтносительныхДат = Истина; - - Пока Выборка.Следующий() Цикл - РассчитаннаяДатаЗапрета = РассчитатьДатуЗапретаПоОписанию( - ТекущаяДатаНаСервере, Выборка.ОписаниеДатыЗапрета); - - Если ЗначениеЗаполнено(РассчитаннаяДатаЗапрета) Тогда - НетОтносительныхДат = Ложь; - - Если Выборка.ДатаЗапрета <> РассчитаннаяДатаЗапрета Тогда - ЗаполнитьЗначенияСвойств(МенеджерЗаписи, Выборка); - - Блокировка = Новый БлокировкаДанных; - ЭлементБлокировки = Блокировка.Добавить(); - ЭлементБлокировки.Область = "РегистрСведений.ДатыЗапретаИзменения"; - ЭлементБлокировки.УстановитьЗначение("Раздел", Выборка.Раздел); - ЭлементБлокировки.УстановитьЗначение("Объект", Выборка.Объект); - ЭлементБлокировки.УстановитьЗначение("Пользователь", Выборка.Пользователь); - ЭлементБлокировки.Режим = РежимБлокировкиДанных.Исключительный; - - НачатьТранзакцию(); - Попытка - Блокировка.Заблокировать(); - МенеджерЗаписи.Прочитать(); - Если МенеджерЗаписи.Выбран() Тогда - Если Выборка.ОписаниеДатыЗапрета <> МенеджерЗаписи.ОписаниеДатыЗапрета Тогда - РассчитаннаяДатаЗапрета = РассчитатьДатуЗапретаПоОписанию( - ТекущаяДатаНаСервере, МенеджерЗаписи.ОписаниеДатыЗапрета); - КонецЕсли; - Если ЗначениеЗаполнено(РассчитаннаяДатаЗапрета) Тогда - МенеджерЗаписи.ДатаЗапрета = РассчитаннаяДатаЗапрета; - МенеджерЗаписи.Записать(); - ЕстьОбновленныеДаты = Истина; - КонецЕсли; - КонецЕсли; - ЗафиксироватьТранзакцию(); - Исключение - ОтменитьТранзакцию(); - Отказ = Истина; - ПредставлениеОшибки = ПредставлениеОшибки + Символы.ПС + Символы.ПС + - КраткоеПредставлениеОшибки(ИнформацияОбОшибке()); - КонецПопытки; - КонецЕсли; - КонецЕсли; - КонецЦикла; - - Если НетОтносительныхДат Тогда - ОписаниеРезультата = НСтр("ru = 'Относительные даты запрета не заданы.'"); - - ИначеЕсли Отказ Тогда - Если ЕстьОбновленныеДаты Тогда - ОписаниеРезультата = - НСтр("ru = 'Пересчитаны некоторые текущие значения относительных дат запрета. - |При пересчете возникли ошибки:'"); - Иначе - ОписаниеРезультата = - НСтр("ru = 'Не пересчитаны текущие значения дат запрета. - |При пересчете возникли ошибки:'"); - КонецЕсли; - ОписаниеРезультата = ОписаниеРезультата + ПредставлениеОшибки; - Иначе - Если ЕстьОбновленныеДаты Тогда - ОписаниеРезультата = - НСтр("ru = 'Успешно пересчитаны текущие значения относительных дат запрета.'"); - Иначе - ОписаниеРезультата = - НСтр("ru = 'Сегодня уже пересчитаны текущие значения относительных дат запрета.'"); - КонецЕсли; + Если ПараметрыСеанса.ОбновитьВерсиюДатЗапретаИзмененияПослеЗагрузкиДанных Тогда + ОбновитьВерсиюДатЗапретаИзменения(); + ПараметрыСеанса.ОбновитьВерсиюДатЗапретаИзмененияПослеЗагрузкиДанных = Ложь; КонецЕсли; - Если ЗаписатьОписаниеРезультатаВЖурналРегистрации Тогда - ЗаписьЖурналаРегистрации( - НСтр("ru = 'Даты запрета изменения.Пересчет относительных дат'", - ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), - ?(Отказ, УровеньЖурналаРегистрации.Ошибка, УровеньЖурналаРегистрации.Информация), - , - , - ОписаниеРезультата, - РежимТранзакцииЗаписиЖурналаРегистрации.Независимая); - КонецЕсли; - - Если Отказ Тогда - ВызватьИсключение - НСтр("ru = 'Не удалось пересчитать все относительные даты запрета. - |Подробности в журнале регистрации.'"); + Если Источник.ОбменДанными.Загрузка Тогда + Возврат; КонецЕсли; КонецПроцедуры -// Обработчик регламентного задания ПересчетТекущихЗначенийОтносительныхДатЗапретаИзменения. -Процедура ПересчетТекущихЗначенийОтносительныхДатЗапретаИзменения() Экспорт +// Обновляет версию дат запрета после изменения. +Процедура ОбновитьВерсиюДатЗапретаИзменения() Экспорт - ОбщегоНазначения.ПриНачалеВыполненияРегламентногоЗадания(); + УстановитьПривилегированныйРежим(Истина); + Константы.ВерсияДатЗапретаИзменения.Установить(Новый УникальныйИдентификатор); - ПересчитатьТекущиеЗначенияОтносительныхДатЗапрета(); + ПоследняяПроверка = ДатыЗапретаИзмененияСлужебныйПовтИсп.ПоследняяПроверкаВерсииДействующихДатЗапрета(); + ПоследняяПроверка.Дата = '00010101'; КонецПроцедуры -// Ищет даты запрета изменения/загрузки данных для объектов типа: -// СправочникОбъект, -// ПланВидовХарактеристикОбъект, -// ПланСчетовОбъект, -// ПланВидовРасчетаОбъект, -// БизнесПроцессОбъект, -// ЗадачаОбъект, -// ПланОбменаОбъект, -// ДокументОбъект, -// РегистрСведенийНаборЗаписей, -// РегистрНакопленияНаборЗаписей, -// РегистрБухгалтерииНаборЗаписей, -// РегистрРасчетаНаборЗаписей, -// УдалениеОбъекта. +// Возвращает дату запрета, рассчитанную по описанию относительной даты запрета. // // Параметры: -// Источник - один из типов, указанных выше. +// ОписаниеДатыЗапрета - Строка - содержит описание относительной даты запрета. +// ДатаЗапрета - Дата - абсолютная дата, полученная из регистра. +// НачалоДня - Дата - текущая дата сеанса на начало дня. +// - Неопределено - вычислить автоматически. // -// Отказ - Булево (возвращаемое значение), будет установлено Истина, -// если объект не проходит проверки дат запрета. -// -// ИсточникРегистр - Булево - Ложь - Источник является регистром, иначе объектом. -// -// Замещение - Булево - если источник является регистром и выполняется добавление, -// нужно указать Ложь. -// -// Удаление - Булево - если источник является объектом и выполняется удаление объекта, -// нужно указать Истина. -// -// СообщитьОЗапрете - Булево, если Истина, будет отправлено сообщение пользователю -// о запрете изменения данных. -// -// СтандартнаяОбработка - Булево, если Ложь, проверка запрета изменения (для пользователей) -// будет пропущена. -// -// УзелПланаОбмена - Неопределено, ПланыОбменаСсылка.<Имя плана обмена> - -// если задать узел будет выполнена проверка запрета загрузки. -// -// НайденныеЗапреты - Структура (возвращаемое значение). -// Если найден запрет изменения данных, значит есть -// свойство НайденЗапретИзмененияДанных, если найден запрет -// загрузки данных, значит есть свойство НайденЗапретЗагрузкиДанных. -// -Процедура ПроверитьДатыЗапретаИзмененияЗагрузкиДанных( - Источник, - Отказ, - ИсточникРегистр, - Замещение, - Удаление, - ДополнительныеПараметры = Неопределено) Экспорт +Функция ДатаЗапретаПоОписанию(ОписаниеДатыЗапрета, ДатаЗапрета, НачалоДня = '00010101') Экспорт - СообщитьОЗапрете = Истина; - СтандартнаяОбработка = Истина; - УзелПланаОбмена = Неопределено; - НайденныеЗапреты = Неопределено; + Если Не ЗначениеЗаполнено(ОписаниеДатыЗапрета) Тогда + Возврат ДатаЗапрета; + КонецЕсли; + + Если Не ЗначениеЗаполнено(НачалоДня) Тогда + НачалоДня = НачалоДня(ТекущаяДатаСеанса()); + КонецЕсли; + + Сутки = 60*60*24; + КоличествоДнейРазрешения = 0; + + ВариантДатыЗапрета = СтрПолучитьСтроку(ОписаниеДатыЗапрета, 1); + КоличествоДнейСтрокой = СтрПолучитьСтроку(ОписаниеДатыЗапрета, 2); + + Если ЗначениеЗаполнено(КоличествоДнейСтрокой) Тогда + ОписаниеТипа = Новый ОписаниеТипов("Число"); + КоличествоДнейРазрешения = ОписаниеТипа.ПривестиЗначение(КоличествоДнейСтрокой); + КонецЕсли; + + Если ВариантДатыЗапрета = "КонецПрошлогоГода" Тогда + ТекущаяДатаЗапрета = НачалоГода(НачалоДня) - Сутки; + ПредыдущаяДатаЗапрета = НачалоГода(ТекущаяДатаЗапрета) - Сутки; + + ИначеЕсли ВариантДатыЗапрета = "КонецПрошлогоКвартала" Тогда + ТекущаяДатаЗапрета = НачалоКвартала(НачалоДня) - Сутки; + ПредыдущаяДатаЗапрета = НачалоКвартала(ТекущаяДатаЗапрета) - Сутки; + + ИначеЕсли ВариантДатыЗапрета = "КонецПрошлогоМесяца" Тогда + ТекущаяДатаЗапрета = НачалоМесяца(НачалоДня) - Сутки; + ПредыдущаяДатаЗапрета = НачалоМесяца(ТекущаяДатаЗапрета) - Сутки; + + ИначеЕсли ВариантДатыЗапрета = "КонецПрошлойНедели" Тогда + ТекущаяДатаЗапрета = НачалоНедели(НачалоДня) - Сутки; + ПредыдущаяДатаЗапрета = НачалоНедели(ТекущаяДатаЗапрета) - Сутки; + + ИначеЕсли ВариантДатыЗапрета = "ПредыдущийДень" Тогда + ТекущаяДатаЗапрета = НачалоДня(НачалоДня) - Сутки; + ПредыдущаяДатаЗапрета = НачалоДня(ТекущаяДатаЗапрета) - Сутки; + Иначе + Возврат '00030303'; // Неизвестный формат. + КонецЕсли; + + Если ЗначениеЗаполнено(ТекущаяДатаЗапрета) Тогда + СрокРазрешения = ТекущаяДатаЗапрета + КоличествоДнейРазрешения * Сутки; + Если Не НачалоДня > СрокРазрешения Тогда + ТекущаяДатаЗапрета = ПредыдущаяДатаЗапрета; + КонецЕсли; + КонецЕсли; + + Возврат ТекущаяДатаЗапрета; + +КонецФункции + +// Ищет даты запрета изменения/загрузки данных для объекта. +// +// Параметры: +// Источник - СправочникОбъект, +// ПланВидовХарактеристикОбъект, +// ПланСчетовОбъект, +// ПланВидовРасчетаОбъект, +// БизнесПроцессОбъект, +// ЗадачаОбъект, +// ПланОбменаОбъект, +// ДокументОбъект - объект данных. +// - РегистрСведенийНаборЗаписей, +// РегистрНакопленияНаборЗаписей, +// РегистрБухгалтерииНаборЗаписей, +// РегистрРасчетаНаборЗаписей - набор записей. +// - УдалениеОбъекта - удаление объекта при загрузке. +// +// Отказ - Булево - (возвращаемое значение), будет установлено Истина, +// если объект не проходит проверки дат запрета. +// +// ИсточникРегистр - Булево - Ложь - Источник является регистром, иначе объектом. +// +// Замещение - Булево - если источник является регистром и выполняется добавление, +// нужно указать Ложь. +// +// Удаление - Булево - если источник является объектом и выполняется удаление объекта, +// нужно указать Истина. +// +// ДополнительныеПараметры - Неопределено - указанные ниже параметры имеют начальные значения. +// - Структура - со свойствами: +// * ПроверкаЗапретаИзменения - Булево - начальное значение Истина, если установить Ложь, +// проверка запрета изменения для пользователей) будет пропущена. +// * УзелПроверкиЗапретаЗагрузки - Неопределено - (начальное значение) выполнить проверку изменения данных. +// - ПланыОбменаСсылка.<Имя плана обмена> - выполнить проверку +// загрузки данных для указанного узла. +// * ОписаниеОшибки - Строка - (возвращаемое значение) - описание запрета загрузки. +// - Null - в этом случае текст сообщения об ошибке не будет подготовлен, +// что ускоряет выполнение проверки, когда запрет найден. +// * СообщитьОЗапрете - Булево - начальное значение Истина. Если указать Ложь, тогда +// непустое ОписаниеОшибки не будет отправлено пользователю и +// записано в журнал регистрации. +// +Процедура ПроверитьДатыЗапретаИзмененияЗагрузкиДанных(Источник, + Отказ, ИсточникРегистр, Замещение, Удаление, ДополнительныеПараметры = Неопределено) Экспорт + + ПроверкаЗапретаИзменения = Истина; + УзелПроверкиЗапретаЗагрузки = Неопределено; + ОписаниеОшибки = ""; + СообщитьОЗапрете = Истина; Если ТипЗнч(ДополнительныеПараметры) = Тип("Структура") Тогда - ДополнительныеПараметры.Свойство("СообщитьОЗапрете", СообщитьОЗапрете); - ДополнительныеПараметры.Свойство("СтандартнаяОбработка", СтандартнаяОбработка); - ДополнительныеПараметры.Свойство("УзелПланаОбмена", УзелПланаОбмена); - ДополнительныеПараметры.Свойство("НайденныеЗапреты", НайденныеЗапреты); + ДополнительныеПараметры.Свойство("ПроверкаЗапретаИзменения", ПроверкаЗапретаИзменения); + ДополнительныеПараметры.Свойство("УзелПроверкиЗапретаЗагрузки", УзелПроверкиЗапретаЗагрузки); + ДополнительныеПараметры.Свойство("ОписаниеОшибки", ОписаниеОшибки); + ДополнительныеПараметры.Свойство("СообщитьОЗапрете", СообщитьОЗапрете); КонецЕсли; - СтандартнаяОбработка = СтандартнаяОбработка <> Ложь; - Если ПропуститьПроверкуДатЗапрета( - Источник, - СообщитьОЗапрете, - СтандартнаяОбработка, - УзелПланаОбмена) Тогда + ВерсияОбъекта = ""; + Если ПропуститьПроверкуДатЗапрета(Источник, ПроверкаЗапретаИзменения, + УзелПроверкиЗапретаЗагрузки, ВерсияОбъекта) Тогда + Возврат; + КонецЕсли; - ИначеЕсли НЕ ИсточникРегистр - И НЕ Источник.ЭтоНовый() - И НЕ Удаление Тогда - - Если ИзменениеИлиЗагрузкаЗапрещена( - ?(СтандартнаяОбработка <> "СтараяВерсия", Источник, Источник.Метаданные().ПолноеИмя()), - ?(СтандартнаяОбработка <> "НоваяВерсия", Источник.Ссылка, Неопределено), - СообщитьОЗапрете, - СтандартнаяОбработка <> Ложь, - УзелПланаОбмена, - НайденныеЗапреты) Тогда + Если НЕ ИсточникРегистр + И НЕ Источник.ЭтоНовый() + И НЕ Удаление Тогда + + Если ИзменениеЗапрещено( + ?(ВерсияОбъекта <> "СтараяВерсия", Источник, Источник.Метаданные().ПолноеИмя()), + ?(ВерсияОбъекта <> "НоваяВерсия", Источник.Ссылка, Неопределено), + ОписаниеОшибки, + УзелПроверкиЗапретаЗагрузки) Тогда Отказ = Истина; КонецЕсли; ИначеЕсли ИсточникРегистр И Замещение Тогда - Если ИзменениеИлиЗагрузкаЗапрещена( - ?(СтандартнаяОбработка <> "СтараяВерсия", Источник, Источник.Метаданные().ПолноеИмя()), - ?(СтандартнаяОбработка <> "НоваяВерсия", Источник.Отбор, Неопределено), - СообщитьОЗапрете, - СтандартнаяОбработка <> Ложь, - УзелПланаОбмена, - НайденныеЗапреты) Тогда + Если ИзменениеЗапрещено( + ?(ВерсияОбъекта <> "СтараяВерсия", Источник, Источник.Метаданные().ПолноеИмя()), + ?(ВерсияОбъекта <> "НоваяВерсия", Источник.Отбор, Неопределено), + ОписаниеОшибки, + УзелПроверкиЗапретаЗагрузки) Тогда Отказ = Истина; КонецЕсли; ИначеЕсли ТипЗнч(Источник) = Тип("УдалениеОбъекта") Тогда - Если СтандартнаяОбработка <> "НоваяВерсия" - И ИзменениеИлиЗагрузкаЗапрещена( + Если ВерсияОбъекта <> "НоваяВерсия" + И ИзменениеЗапрещено( Источник.Метаданные().ПолноеИмя(), Источник.Ссылка, - СообщитьОЗапрете, - СтандартнаяОбработка <> Ложь, - УзелПланаОбмена, - НайденныеЗапреты) Тогда + ОписаниеОшибки, + УзелПроверкиЗапретаЗагрузки) Тогда Отказ = Истина; КонецЕсли; @@ -470,36 +493,52 @@ // НЕ ИсточникРегистр И Источник.ЭтоНовый() // ИЛИ ИсточникРегистр И НЕ Замещение // ИЛИ НЕ ИсточникРегистр И Удаление - Если СтандартнаяОбработка <> "СтараяВерсия" - И ИзменениеИлиЗагрузкаЗапрещена( + Если ВерсияОбъекта <> "СтараяВерсия" + И ИзменениеЗапрещено( Источник, , - СообщитьОЗапрете, - СтандартнаяОбработка <> Ложь, - УзелПланаОбмена, - НайденныеЗапреты) Тогда + ОписаниеОшибки, + УзелПроверкиЗапретаЗагрузки) Тогда Отказ = Истина; КонецЕсли; КонецЕсли; Если ТипЗнч(ДополнительныеПараметры) = Тип("Структура") Тогда - ДополнительныеПараметры.Вставить("СообщитьОЗапрете", СообщитьОЗапрете); - ДополнительныеПараметры.Вставить("СтандартнаяОбработка", СтандартнаяОбработка <> Ложь); - ДополнительныеПараметры.Вставить("УзелПланаОбмена", УзелПланаОбмена); - ДополнительныеПараметры.Вставить("НайденныеЗапреты", НайденныеЗапреты); + ДополнительныеПараметры.Вставить("ПроверкаЗапретаИзменения", ПроверкаЗапретаИзменения); + ДополнительныеПараметры.Вставить("УзелПроверкиЗапретаЗагрузки", УзелПроверкиЗапретаЗагрузки); + ДополнительныеПараметры.Вставить("ОписаниеОшибки", ОписаниеОшибки); + ДополнительныеПараметры.Вставить("СообщитьОЗапрете", СообщитьОЗапрете); КонецЕсли; + Если Не Отказ Или Не СообщитьОЗапрете Тогда + Возврат; + КонецЕсли; + + ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ОписаниеОшибки); + + ЗаписьЖурналаРегистрации( + ?(УзелПроверкиЗапретаЗагрузки <> Неопределено, + НСтр("ru = 'Даты запрета изменения.Найдены запреты загрузки'", + ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), + НСтр("ru = 'Даты запрета изменения.Найдены запреты изменения'", + ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка())), + УровеньЖурналаРегистрации.Ошибка, + , + , + ОписаниеОшибки, + РежимТранзакцииЗаписиЖурналаРегистрации.Транзакционная); + КонецПроцедуры // Проверяет необходимость проверки запрета изменения или загрузки данных. -Функция ПропуститьПроверкуДатЗапрета(Источник, - СообщитьОЗапрете, - СтандартнаяОбработка, - УзелПланаОбмена) Экспорт +Функция ПропуститьПроверкуДатЗапрета(Объект, + ПроверкаЗапретаИзменения, + УзелПроверкиЗапретаЗагрузки, + ВерсияОбъекта) Экспорт - Если ТипЗнч(Источник) <> Тип("УдалениеОбъекта") - И Источник.ДополнительныеСвойства.Свойство("ПропуститьПроверкуЗапретаИзменения") Тогда + Если ТипЗнч(Объект) <> Тип("УдалениеОбъекта") + И Объект.ДополнительныеСвойства.Свойство("ПропуститьПроверкуЗапретаИзменения") Тогда Возврат Истина; КонецЕсли; @@ -510,7 +549,7 @@ КонецЕсли; УстановитьПривилегированныйРежим(Ложь); - Если ЗапретИзмененияДанныхНеИспользуется() Тогда + Если ЗапретИзмененияДанныхНеИспользуется(ПроверкаЗапретаИзменения, УзелПроверкиЗапретаЗагрузки) Тогда Возврат Истина; КонецЕсли; @@ -519,153 +558,149 @@ КонецЕсли; ДатыЗапретаИзмененияПереопределяемый.ПередПроверкойЗапретаИзменения( - Источник, СтандартнаяОбработка, УзелПланаОбмена, СообщитьОЗапрете); + Объект, ПроверкаЗапретаИзменения, УзелПроверкиЗапретаЗагрузки, ВерсияОбъекта); - Если ТипЗнч(СтандартнаяОбработка) <> Тип("Булево") - И СтандартнаяОбработка <> "НоваяВерсия" - И СтандартнаяОбработка <> "СтараяВерсия" Тогда - ВызватьИсключение - НСтр("ru = 'Некорректное значение параметра ПроверкаЗапретаИзменения указано в процедуре - |ПередПроверкойЗапретаИзменения общего модуля ДатыЗапретаИзмененияПереопределяемый.'"); - КонецЕсли; - - Возврат СтандартнаяОбработка = Ложь // НЕ проверять запрет изменения. - И УзелПланаОбмена = Неопределено; // НЕ проверять запрет загрузки. + Возврат ПроверкаЗапретаИзменения = Ложь // НЕ проверять запрет изменения. + И УзелПроверкиЗапретаЗагрузки = Неопределено; // НЕ проверять запрет загрузки. КонецФункции -// Общая функция для поиска запретов изменения и загрузки данных. -Функция ИзменениеИлиЗагрузкаЗапрещена( - Данные, - ИдентификаторДанных, - СообщитьОЗапрете, - СтандартнаяОбработка, - УзелПланаОбмена, - НайденныеЗапреты) Экспорт +// См. одноименную функцию в общем модуле ДатыЗапретаИзменения. +Функция ИзменениеЗапрещено(Данные, ИдентификаторДанных, ОписаниеОшибки, УзелПроверкиЗапретаЗагрузки) Экспорт - ДанныеДляПроверки = Новый Структура; - // Необязательная ссылка на данные в базе данных. - ДанныеДляПроверки.Вставить("ИдентификаторДанных", ИдентификаторДанных); - ДанныеДляПроверки.Вставить("ИдентификаторДанныхДляПредставления", ИдентификаторДанных); + УстановитьПривилегированныйРежим(Истина); - Если ТипЗнч(Данные) = Тип("Строка") Тогда - // Имя таблицы, требуемое для свойства ИдентификаторДанных типа Отбор, + ЗапретНайден = Ложь; + ДействующиеДаты = ДействующиеДатыЗапрета(); + + ДатыЗапретаПоОбъектамНеУказаны = ?(УзелПроверкиЗапретаЗагрузки = Неопределено, + ДействующиеДаты.ДляПользователей.ДатыЗапретаПоОбъектамНеУказаны, + ДействующиеДаты.ДляИнформационныхБаз.ДатыЗапретаПоОбъектамНеУказаны); + + // Проверка старой версии объекта или набора записей. + Если ИдентификаторДанных <> Неопределено Тогда + ОписаниеДанных = Новый Структура; + ОписаниеДанных.Вставить("НоваяВерсия", Ложь); + + // Данные - это имя таблицы, требуемое для свойства ИдентификаторДанных типа Отбор, // а также когда исходные данные имеют тип УдалениеОбъекта. - ДанныеДляПроверки.Вставить("Таблица", Данные); - // ИдентификаторДанных заполнен, а объекта в памяти нет. - ДанныеДляПроверки.Вставить("ЗначенияПолейИзОбъекта", Неопределено); - Иначе - // Имя таблицы, требуемое для свойства ИдентификаторДанных типа Отбор. - ДанныеДляПроверки.Вставить("Таблица", Данные.Метаданные().ПолноеИмя()); - // ИдентификаторДанных может быть не заполнен, а объект в памяти есть. - Если ИдентификаторДанных = Неопределено Тогда - ДанныеДляПроверки.Вставить("ЗначенияПолейИзОбъекта", ИзвлечьЗначенияПолейИзОбъекта(Данные, - ДанныеДляПроверки.ИдентификаторДанныхДляПредставления)); + + Если ТипЗнч(ИдентификаторДанных) = Тип("Отбор") Тогда + ОписаниеДанных.Вставить("Данные", Новый Структура); + ОписаниеДанных.Данные.Вставить("Регистр", Данные); + ОписаниеДанных.Данные.Вставить("Отбор", ИдентификаторДанных); Иначе - ДанныеДляПроверки.Вставить("ЗначенияПолейИзОбъекта", ИзвлечьЗначенияПолейИзОбъекта(Данные)); + ОписаниеДанных.Вставить("Данные", ИдентификаторДанных); КонецЕсли; + + ДанныеДляПроверки = ДанныеДляПроверкиИзБазыДанных(Данные, + ИдентификаторДанных, ДействующиеДаты, ДатыЗапретаПоОбъектамНеУказаны); + + ДанныеИДаты = Новый Структура; + ДанныеИДаты.Вставить("ДействующиеДаты", ДействующиеДаты); + ДанныеИДаты.Вставить("ДанныеДляПроверки", ДанныеДляПроверки); + + ЗапретНайден = ДатыЗапретаИзменения.НайденЗапретИзмененияДанных(ДанныеИДаты, + ОписаниеДанных, ОписаниеОшибки, УзелПроверкиЗапретаЗагрузки); КонецЕсли; - НайденныеЗапреты = Неопределено; - ЗапретНайден = ДатыЗапретаИзменения.НайденЗапретИзмененияДанных( - ДанныеДляПроверки, СообщитьОЗапрете, , СтандартнаяОбработка, УзелПланаОбмена, НайденныеЗапреты); - - // Устарело. Оставлено для обратной совместимости, начиная с версии 2.1.2.15, - // так как было заявлено в документации без уточнения, но требовалось - // только для взаимодействия при обмене данными. - Если ЗапретНайден И ТипЗнч(Данные) <> Тип("Строка") Тогда - Для каждого КлючИЗначение Из НайденныеЗапреты Цикл - Данные.ДополнительныеСвойства.Вставить(КлючИЗначение.Ключ, КлючИЗначение.Значение); - КонецЦикла; + // Проверка новой версии объекта или набора записей. + Если Не ЗапретНайден И ТипЗнч(Данные) <> Тип("Строка") Тогда + + ОписаниеДанных = Новый Структура; + ОписаниеДанных.Вставить("НоваяВерсия", Истина); + ОписаниеДанных.Вставить("Данные", Данные); + + ДанныеДляПроверки = ДанныеДляПроверкиИзОбъекта(Данные, + ДействующиеДаты, ДатыЗапретаПоОбъектамНеУказаны); + + ДанныеИДаты = Новый Структура; + ДанныеИДаты.Вставить("ДействующиеДаты", ДействующиеДаты); + ДанныеИДаты.Вставить("ДанныеДляПроверки", ДанныеДляПроверки); + + ЗапретНайден = ДатыЗапретаИзменения.НайденЗапретИзмененияДанных(ДанныеИДаты, + ОписаниеДанных, ОписаниеОшибки, УзелПроверкиЗапретаЗагрузки); КонецЕсли; Возврат ЗапретНайден; КонецФункции -// Только для внутреннего использования. -Функция ПолучитьПоляРегистра(ИсточникиДанных, Таблица) Экспорт +// Возвращает действующие даты запрета с учетом последней версии после изменений. +Функция ДействующиеДатыЗапрета() Экспорт - ПоляРегистра = ","; + ПоследняяПроверка = ДатыЗапретаИзмененияСлужебныйПовтИсп.ПоследняяПроверкаВерсииДействующихДатЗапрета(); - Для каждого ИсточникДанных Из ИсточникиДанных Цикл - - Поля = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок( - ИсточникДанных.ПолеДаты, "."); - - Если Поля.Количество() = 0 Тогда - ВызватьИсключение(СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Для проверки запрета изменения - |в источнике данных для таблицы ""%1"" - |не задано поле даты.'"), - Таблица)); - ИначеЕсли НЕ ЗначениеЗаполнено(Поля[0]) Тогда - ВызватьИсключение(СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Для проверки запрета изменения - |в источнике данных для таблицы ""%1"" - |неверно задано поле даты: %2.'"), - Таблица, - ИсточникДанных.ПолеДаты)); - КонецЕсли; - Если Найти(ПоляРегистра, "," + Поля[0] + ",") = 0 Тогда - ПоляРегистра = ПоляРегистра + Поля[0] + ","; - КонецЕсли; - - Если ЗначениеЗаполнено(ИсточникДанных.ПолеОбъекта) Тогда + ДействующиеДаты = ПараметрыСеанса.ДействующиеДатыЗапретаИзменения; + + Если ТекущаяДатаСеанса() > (ПоследняяПроверка.Дата + 5) Тогда + Если ДействующиеДаты.НачалоДня <> НачалоДня(ТекущаяДатаСеанса()) + Или ДействующиеДаты.Версия <> Константы.ВерсияДатЗапретаИзменения.Получить() Тогда - Поля = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок( - ИсточникДанных.ПолеОбъекта, "."); - - Если НЕ ЗначениеЗаполнено(Поля[0]) Тогда - ВызватьИсключение(СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Для проверки запрета изменения - |в источнике данных для таблицы ""%1"" - |неверно задано поле объекта: %2.'"), - Таблица, - ИсточникДанных.ПолеОбъекта)); - КонецЕсли; - Если Найти(ПоляРегистра, "," + Поля[0] + ",") = 0 Тогда - ПоляРегистра = ПоляРегистра + Поля[0] + ","; - КонецЕсли; + ОчищаемыеПараметры = Новый Массив; + ОчищаемыеПараметры.Добавить("ДействующиеДатыЗапретаИзменения"); + ПараметрыСеанса.Очистить(ОчищаемыеПараметры); + ДействующиеДаты = ПараметрыСеанса.ДействующиеДатыЗапретаИзменения; КонецЕсли; - КонецЦикла; + ПоследняяПроверка.Дата = ТекущаяДатаСеанса(); + КонецЕсли; - Возврат Сред(ПоляРегистра, 2, СтрДлина(ПоляРегистра)-2); + Возврат ДействующиеДаты; КонецФункции -// Только для внутреннего использования. -Функция ПолучитьСтруктуруПолейОбъекта(ОбъектМетаданных, ИсточникиДанных, Таблица) Экспорт +// Возвращает свойства, характеризующие вариант встраивания. +Функция СвойстваРазделов() Экспорт - СтруктураПолей = Новый Структура; + Возврат ПараметрыСеанса.ДействующиеДатыЗапретаИзменения.СвойстваРазделов; - Для каждого ИсточникДанных Из ИсточникиДанных Цикл - - ДобавитьПоле(ОбъектМетаданных, - ИсточникДанных, - СтруктураПолей, - ИсточникДанных.ПолеДаты, - Таблица, - НСтр("ru = 'поле даты'")); - - Если ЗначениеЗаполнено(ИсточникДанных.ПолеОбъекта) Тогда - - ДобавитьПоле(ОбъектМетаданных, - ИсточникДанных, - СтруктураПолей, - ИсточникДанных.ПолеОбъекта, - Таблица, - НСтр("ru = 'поле объекта'")); - КонецЕсли; - КонецЦикла; +КонецФункции + +// Возвращает источники данных, заполненные в процедуре ЗаполнитьИсточникиДанныхДляПроверкиЗапретаИзменения +// общего модуля ДатыЗапретаИзмененияПереопределяемый. +// +Функция ИсточникиДанныхДляПроверкиЗапретаИзменения() Экспорт - Возврат СтруктураПолей; + Возврат ПараметрыСеанса.ДействующиеДатыЗапретаИзменения.ИсточникиДанных; + +КонецФункции + +// Возвращает пустую ссылку указанного типа. +Функция ПустаяСсылка(ТипСсылки) Экспорт + + Типы = Новый Массив; + Типы.Добавить(ТипСсылки); + ОписаниеТипов = Новый ОписаниеТипов(Типы); + + Возврат ОписаниеТипов.ПривестиЗначение(Неопределено); КонецФункции //////////////////////////////////////////////////////////////////////////////// // Обновление информационной базы. +// Обработчик заполнения общей начальной даты запрета изменения до 1980 года. +Процедура УстановитьНачальнуюДатуЗапретаИзменения() Экспорт + + УстановитьПривилегированныйРежим(Истина); + + НаборЗаписей = РегистрыСведений.ДатыЗапретаИзменения.СоздатьНаборЗаписей(); + НаборЗаписей.Прочитать(); + + Если НаборЗаписей.Количество() <> 0 Тогда + Возврат; + КонецЕсли; + Запись = НаборЗаписей.Добавить(); + Запись.Пользователь = Перечисления.ВидыНазначенияДатЗапрета.ДляВсехПользователей; + Запись.Раздел = ДатыЗапретаИзмененияСлужебныйПовтИсп.ПустойРаздел(); + Запись.Объект = ДатыЗапретаИзмененияСлужебныйПовтИсп.ПустойРаздел(); + Запись.ДатаЗапрета = '19791231'; + Запись.Комментарий = "(" + НСтр("ru = 'По умолчанию'") + ")"; + + ОбновлениеИнформационнойБазы.ЗаписатьДанные(НаборЗаписей); + +КонецПроцедуры + // Обработчик обновления выполняет замену значения Неопределено // измерения Пользователь регистра сведений ДатыЗапретаИзменения // на значение Перечисление.ВидыНазначенияДатЗапрета.ДляВсехПользователей. @@ -731,191 +766,945 @@ КонецПроцедуры +// Обработчик обновления выполняет заполнение констант +// использования дат запрета по наличию настроенных дат. +// +Процедура ЗаполнитьИспользованиеДатЗапрета() Экспорт + + Запрос = Новый Запрос; + Запрос.Текст = + "ВЫБРАТЬ РАЗЛИЧНЫЕ + | ДатыЗапретаИзменения.Пользователь КАК Адресат + |ИЗ + | РегистрСведений.ДатыЗапретаИзменения КАК ДатыЗапретаИзменения"; + + ЗапретИзмененияИспользуется = Ложь; + ЗапретЗагрузкиИспользуется = Ложь; + + ТипыПользователей = Новый Массив; + ТипыПользователей.Добавить(Тип("СправочникСсылка.Пользователи")); + ТипыПользователей.Добавить(Тип("СправочникСсылка.ГруппыПользователей")); + ТипыПользователей.Добавить(Тип("СправочникСсылка.ВнешниеПользователи")); + ТипыПользователей.Добавить(Тип("СправочникСсылка.ГруппыВнешнихПользователей")); + + Выборка = Запрос.Выполнить().Выбрать(); + Пока Выборка.Следующий() Цикл + + Если Выборка.Адресат = Перечисления.ВидыНазначенияДатЗапрета.ДляВсехПользователей Тогда + ЗапретИзмененияИспользуется = Истина; + + ИначеЕсли Выборка.Адресат = Перечисления.ВидыНазначенияДатЗапрета.ДляВсехИнформационныхБаз Тогда + ЗапретЗагрузкиИспользуется = Истина; + + ИначеЕсли ТипыПользователей.Найти(ТипЗнч(Выборка.Адресат)) <> Неопределено Тогда + ЗапретИзмененияИспользуется = Истина; + + ИначеЕсли ПланыОбмена.ТипВсеСсылки().СодержитТип(ТипЗнч(Выборка.Адресат)) Тогда + ЗапретЗагрузкиИспользуется = Истина; + КонецЕсли; + КонецЦикла; + + Если ЗапретИзмененияИспользуется Тогда + Константы.ИспользоватьДатыЗапретаИзменения.Установить(Истина); + КонецЕсли; + + Если ЗапретЗагрузкиИспользуется Тогда + Константы.ИспользоватьДатыЗапретаЗагрузки.Установить(Истина); + КонецЕсли; + +КонецПроцедуры + +// Обработчик устанавливает значение сохранение '00020202' для относительных дат запрета. +Процедура УстановитьОтносительныеДатыЗапрета() Экспорт + + Блокировка = Новый БлокировкаДанных; + ЭлементБлокировки = Блокировка.Добавить("РегистрСведений.ДатыЗапретаИзменения"); + ЭлементБлокировки.Режим = РежимБлокировкиДанных.Исключительный; + НачатьТранзакцию(); + Попытка + Блокировка.Заблокировать(); + НаборЗаписей = РегистрыСведений.ДатыЗапретаИзменения.СоздатьНаборЗаписей(); + НаборЗаписей.Прочитать(); + ЕстьИзменения = Ложь; + Для Каждого Запись Из НаборЗаписей Цикл + + Если ЗначениеЗаполнено(Запись.ОписаниеДатыЗапрета) + И Запись.ДатаЗапрета <> '00020202' Тогда + + Запись.ДатаЗапрета = '00020202'; + ЕстьИзменения = Истина; + КонецЕсли; + КонецЦикла; + Если ЕстьИзменения Тогда + ОбновлениеИнформационнойБазы.ЗаписатьДанные(НаборЗаписей); + КонецЕсли; + ЗафиксироватьТранзакцию(); + Исключение + ОтменитьТранзакцию(); + ВызватьИсключение; + КонецПопытки; + +КонецПроцедуры + //////////////////////////////////////////////////////////////////////////////// // Вспомогательные процедуры и функции. -Функция РассчитатьДатуЗапретаПоОписанию(ТекущаяДатаНаСервере, ОписаниеДатыЗапрета) - - Сутки = 60*60*24; - ВариантДатыЗапрета = ""; - КоличествоДнейРазрешения = 0; - - Если ЗначениеЗаполнено(ОписаниеДатыЗапрета) Тогда - ВариантДатыЗапрета = СтрПолучитьСтроку(ОписаниеДатыЗапрета, 1); - Строка2 = СтрПолучитьСтроку(ОписаниеДатыЗапрета, 2); - Если ЗначениеЗаполнено(Строка2) Тогда - ОписаниеТипа = Новый ОписаниеТипов("Число"); - КоличествоДнейРазрешения = ОписаниеТипа.ПривестиЗначение(Строка2); - КонецЕсли; - КонецЕсли; - - Если ВариантДатыЗапрета = "КонецПрошлогоГода" Тогда - ТекущаяДатаЗапрета = НачалоГода(ТекущаяДатаНаСервере) - Сутки; - ПредыдущаяДатаЗапрета = НачалоГода(ТекущаяДатаЗапрета) - Сутки; - - ИначеЕсли ВариантДатыЗапрета = "КонецПрошлогоКвартала" Тогда - ТекущаяДатаЗапрета = НачалоКвартала(ТекущаяДатаНаСервере) - Сутки; - ПредыдущаяДатаЗапрета = НачалоКвартала(ТекущаяДатаЗапрета) - Сутки; - - ИначеЕсли ВариантДатыЗапрета = "КонецПрошлогоМесяца" Тогда - ТекущаяДатаЗапрета = НачалоМесяца(ТекущаяДатаНаСервере) - Сутки; - ПредыдущаяДатаЗапрета = НачалоМесяца(ТекущаяДатаЗапрета) - Сутки; - - ИначеЕсли ВариантДатыЗапрета = "КонецПрошлойНедели" Тогда - ТекущаяДатаЗапрета = НачалоНедели(ТекущаяДатаНаСервере) - Сутки; - ПредыдущаяДатаЗапрета = НачалоНедели(ТекущаяДатаЗапрета) - Сутки; - - ИначеЕсли ВариантДатыЗапрета = "ПредыдущийДень" Тогда - ТекущаяДатаЗапрета = НачалоДня(ТекущаяДатаНаСервере) - Сутки; - ПредыдущаяДатаЗапрета = НачалоДня(ТекущаяДатаЗапрета) - Сутки; - Иначе - ТекущаяДатаЗапрета = '00000000'; - КонецЕсли; - - Если ЗначениеЗаполнено(ТекущаяДатаЗапрета) Тогда - СрокРазрешения = ТекущаяДатаЗапрета + КоличествоДнейРазрешения * Сутки; - Если НЕ ТекущаяДатаНаСервере > СрокРазрешения Тогда - ТекущаяДатаЗапрета = ПредыдущаяДатаЗапрета; - КонецЕсли; - КонецЕсли; - - Возврат ТекущаяДатаЗапрета; - -КонецФункции - -Функция ЗапретИзмененияДанныхНеИспользуется() - - УстановитьПривилегированныйРежим(Истина); +// Для процедуры ПропуститьПроверкуДатЗапрета. +Функция ЗапретИзмененияДанныхНеИспользуется(ПроверкаЗапретаИзменения, УзелПроверкиЗапретаЗагрузки) Если ОбновлениеИнформационнойБазыСлужебныйПовтИсп.НеобходимоОбновлениеИнформационнойБазы() Тогда Возврат Истина; КонецЕсли; - Запрос = Новый Запрос; - Запрос.Текст = - "ВЫБРАТЬ ПЕРВЫЕ 1 - | ИСТИНА КАК ЗначениеИстина - |ИЗ - | РегистрСведений.ДатыЗапретаИзменения КАК ДатыЗапретаИзменения"; - НеИспользуется = Запрос.Выполнить().Пустой(); + УстановитьПривилегированныйРежим(Истина); - Возврат НеИспользуется; + ДействующиеДатыЗапрета = ДействующиеДатыЗапрета(); + + Если (Не ДействующиеДатыЗапрета.ЗапретИзмененияИспользуется + Или ПроверкаЗапретаИзменения = Ложь) + И (Не ДействующиеДатыЗапрета.ЗапретЗагрузкиИспользуется + Или УзелПроверкиЗапретаЗагрузки = Неопределено) Тогда + + Возврат Истина; + КонецЕсли; + + Возврат Ложь; КонецФункции -Функция ИзвлечьЗначенияПолейИзОбъекта(Знач Данные, ИдентификаторДанныхДляПредставления = Неопределено) +// Для функции ИзменениеИлиЗагрузкаЗапрещена. +Функция ДанныеДляПроверкиИзБазыДанных(Данные, ИдентификаторДанных, ДействующиеДаты, ДатыЗапретаПоОбъектамНеУказаны) + + Если ТипЗнч(ИдентификаторДанных) = Тип("Отбор") Тогда + Если ТипЗнч(Данные) = Тип("Строка") Тогда + ОбъектМетаданных = Метаданные.НайтиПоПолномуИмени(Данные); + Иначе + ОбъектМетаданных = Данные.Метаданные(); + КонецЕсли; + Иначе + ОбъектМетаданных = ИдентификаторДанных.Метаданные(); + КонецЕсли; + + Таблица = ОбъектМетаданных.ПолноеИмя(); + ИсточникиДанных = ПолучитьИсточникиДанных(ДействующиеДаты, Таблица); + + ДанныеДляПроверки = ДатыЗапретаИзменения.ШаблонДанныхДляПроверки(); + Запрос = Новый Запрос; + Если ДатыЗапретаПоОбъектамНеУказаны Тогда + Запрос.Текст = ИсточникиДанных.ТекстЗапросаТолькоДаты; + Иначе + Запрос.Текст = ИсточникиДанных.ТекстЗапроса; + КонецЕсли; + Если ИсточникиДанных.ЭтоРегистр Тогда + ВставитьПараметрыИУсловиеОтбора(Запрос, ИдентификаторДанных); + Иначе + Запрос.УстановитьПараметр("Ссылка", ИдентификаторДанных); + КонецЕсли; + РезультатыЗапроса = Запрос.ВыполнитьПакет(); + Для Каждого ИсточникДанных Из ИсточникиДанных.Состав Цикл + Выборка = РезультатыЗапроса[ИсточникиДанных.Состав.Найти(ИсточникДанных)].Выбрать(); + Пока Выборка.Следующий() Цикл + Строка = ДанныеДляПроверки.Добавить(); + ЗаполнитьЗначенияСвойств(Строка, Выборка); + Строка.Раздел = ИсточникДанных.Раздел; + КонецЦикла; + КонецЦикла; + + Возврат ДанныеДляПроверки; + +КонецФункции + +// Для процедуры ДанныеДляПроверкиИзБазыДанных. +// Преобразует Отбор в условие на языке запросов и вставляет в запрос. +// +// Параметры: +// Запрос - Запрос. +// +// Отбор - РегистрСведенийНаборЗаписей.Отбор, +// РегистрНакопленияНаборЗаписей.Отбор, +// РегистрБухгалтерииНаборЗаписей.Отбор, +// РегистрРасчетаНаборЗаписей.Отбор. +// +// ПсевдонимТаблицы - Строка - псевдоним регистра в запросе. +// +// МестоУсловияОтбора - Строка - Идентификатор места условия в запросе, +// например, &УсловиеОтбора. +// +// Возвращаемое значение: +// Строка. +// +Процедура ВставитьПараметрыИУсловиеОтбора(Запрос, + Отбор, + ПсевдонимТаблицы = "ТекущаяТаблица", + МестоУсловияОтбора = "&УсловиеОтбора") + + Условие = ""; + Для каждого ЭлементОтбора Из Отбор Цикл + + Если ЭлементОтбора.Использование Тогда + Если НЕ ПустаяСтрока(Условие) Тогда + Условие = Условие + Символы.ПС + "И "; + КонецЕсли; + Запрос.УстановитьПараметр(ЭлементОтбора.Имя, ЭлементОтбора.Значение); + Условие = Условие + + ПсевдонимТаблицы + "." + ЭлементОтбора.Имя + " = &" + ЭлементОтбора.Имя; + КонецЕсли; + КонецЦикла; + Условие = ?(ЗначениеЗаполнено(Условие), Условие, "Истина"); + Запрос.Текст = СтрЗаменить(Запрос.Текст, МестоУсловияОтбора, Условие); + +КонецПроцедуры + +// Для функции ИзменениеИлиЗагрузкаЗапрещена. +Функция ДанныеДляПроверкиИзОбъекта(Данные, ДействующиеДаты, ДатыЗапретаПоОбъектамНеУказаны) ЗначенияПолей = Новый Структура; ОбъектМетаданных = Данные.Метаданные(); - Отбор = Новый Структура("Таблица", ОбъектМетаданных.ПолноеИмя()); - ИсточникиДанных = ПолучитьИсточникиДанных(Отбор); + Таблица = ОбъектМетаданных.ПолноеИмя(); + ИсточникиДанных = ПолучитьИсточникиДанных(ДействующиеДаты, Таблица); - Если ОбщегоНазначения.ЭтоРегистр(ОбъектМетаданных) Тогда - // Заполнение значений полей из набора записей. - ПоляРегистра = ПолучитьПоляРегистра(ИсточникиДанных, Отбор.Таблица); - ЗначенияПолей = Данные.Выгрузить(, ПоляРегистра); - ЗначенияПолей.Свернуть(ПоляРегистра); + ДанныеДляПроверки = ДатыЗапретаИзменения.ШаблонДанныхДляПроверки(); + БезОбъекта = ДатыЗапретаПоОбъектамНеУказаны; + + Если ИсточникиДанных.ЭтоРегистр Тогда + ЗначенияПолей = Данные.Выгрузить(, ИсточникиДанных.ПоляРегистра); + ЗначенияПолей.Свернуть(ИсточникиДанных.ПоляРегистра); Если ЗначенияПолей.Колонки.Найти("Регистратор") <> Неопределено И Данные.Отбор.Найти("Регистратор") <> Неопределено И ОбщегоНазначения.ЭтоРегистрСведений(ОбъектМетаданных) Тогда ЗначенияПолей.ЗаполнитьЗначения(Данные.Отбор.Регистратор.Значение, "Регистратор"); КонецЕсли; - ИдентификаторДанныхДляПредставления = Данные.Отбор; + Для Каждого Строка Из ЗначенияПолей Цикл + Для Каждого ИсточникДанных Из ИсточникиДанных.Состав Цикл + ДобавитьСтрокуДанных(Строка, Строка, ИсточникДанных, ДанныеДляПроверки, БезОбъекта); + КонецЦикла; + КонецЦикла; Иначе - // Заполнение значений полей из объекта. - ЗначенияПолей = ПолучитьСтруктуруПолейОбъекта(ОбъектМетаданных, ИсточникиДанных, Отбор.Таблица); - Для каждого Поле Из ЗначенияПолей Цикл - Если ОбъектМетаданных.ТабличныеЧасти.Найти(Поле.Ключ) <> Неопределено Тогда - Поля = Поле.Значение; - ЗначенияПолей[Поле.Ключ] = Данные[Поле.Ключ].Выгрузить(, Поля); - ЗначенияПолей[Поле.Ключ].Свернуть(Поля); + Для Каждого ИсточникДанных Из ИсточникиДанных.Состав Цикл + + Если Не ЗначениеЗаполнено(ИсточникДанных.ПолеДаты.ТабличнаяЧасть) + И Не ЗначениеЗаполнено(ИсточникДанных.ПолеОбъекта.ТабличнаяЧасть) Тогда + + ДобавитьСтрокуДанных(Данные, Данные, ИсточникДанных, ДанныеДляПроверки, БезОбъекта); + + ИначеЕсли Не ЗначениеЗаполнено(ИсточникДанных.ПолеДаты.ТабличнаяЧасть) Тогда + + Если БезОбъекта Тогда + ДобавитьСтрокуДанных(Данные, , ИсточникДанных, ДанныеДляПроверки, БезОбъекта); + Иначе + СтрокаДаты = Новый Структура("Значение", ЗначениеПоля(Данные, ИсточникДанных.ПолеДаты)); + Поле = ИсточникДанных.ПолеОбъекта.Имя; + ЗначенияОбъекта = Данные[ИсточникДанных.ПолеОбъекта.ТабличнаяЧасть].Выгрузить(, Поле); + ЗначенияОбъекта.Свернуть(Поле); + Для Каждого СтрокаОбъекта Из ЗначенияОбъекта Цикл + ДобавитьСтрокуДанных(СтрокаДаты, СтрокаОбъекта, ИсточникДанных, ДанныеДляПроверки); + КонецЦикла; + КонецЕсли; + + ИначеЕсли Не ЗначениеЗаполнено(ИсточникДанных.ПолеОбъекта.ТабличнаяЧасть) Тогда + + Если Не БезОбъекта Тогда + СтрокаОбъекта = Новый Структура("Значение", ЗначениеПоля(Данные, ИсточникДанных.ПолеОбъекта)); + КонецЕсли; + Поле = ИсточникДанных.ПолеДаты.Имя; + ЗначенияДаты = Данные[ИсточникДанных.ПолеДаты.ТабличнаяЧасть].Выгрузить(, Поле); + ЗначенияДаты.Свернуть(Поле); + Для Каждого СтрокаДаты Из ЗначенияДаты Цикл + ДобавитьСтрокуДанных(СтрокаДаты, СтрокаОбъекта, ИсточникДанных, ДанныеДляПроверки, БезОбъекта); + КонецЦикла; + + ИначеЕсли ИсточникДанных.ПолеДаты.ТабличнаяЧасть = ИсточникДанных.ПолеОбъекта.ТабличнаяЧасть Тогда + + Если БезОбъекта Тогда + Поля = ИсточникДанных.ПолеДаты.Имя; + Иначе + Поля = ИсточникДанных.ПолеДаты.Имя + "," + ИсточникДанных.ПолеОбъекта.Имя; + КонецЕсли; + Значения = Данные[ИсточникДанных.ПолеДаты.ТабличнаяЧасть].Выгрузить(, Поля); + Значения.Свернуть(Поля); + Для Каждого Строка Из Значения Цикл + ДобавитьСтрокуДанных(Строка, Строка, ИсточникДанных, ДанныеДляПроверки, БезОбъекта); + КонецЦикла; Иначе - ЗначенияПолей[Поле.Ключ] = Данные[Поле.Ключ]; + Поле = ИсточникДанных.ПолеДаты.Имя; + ЗначенияДаты = Данные[ИсточникДанных.ПолеДаты.ТабличнаяЧасть].Выгрузить(, Поле); + ЗначенияДаты.Свернуть(Поле); + + Если Не БезОбъекта Тогда + Поле = ИсточникДанных.ПолеОбъекта.Имя; + ЗначенияОбъекта = Данные[ИсточникДанных.ПолеОбъекта.ТабличнаяЧасть].Выгрузить(, Поле); + ЗначенияОбъекта.Свернуть(Поле); + КонецЕсли; + + Для Каждого СтрокаДаты Из ЗначенияДаты Цикл + СтрокаДаты = Новый Структура("Значение", ЗначениеПоля(СтрокаДаты, ИсточникДанных.ПолеДаты)); + Если БезОбъекта Тогда + ДобавитьСтрокуДанных(СтрокаДаты, , ИсточникДанных, ДанныеДляПроверки, БезОбъекта); + Иначе + Для Каждого СтрокаОбъекта Из ЗначенияОбъекта Цикл + ДобавитьСтрокуДанных(СтрокаДаты, СтрокаОбъекта, ИсточникДанных, ДанныеДляПроверки); + КонецЦикла; + КонецЕсли; + КонецЦикла; КонецЕсли; КонецЦикла; - Если Не Данные.ЭтоНовый() Тогда - ИдентификаторДанныхДляПредставления = Данные.Ссылка; - КонецЕсли; КонецЕсли; - Возврат ЗначенияПолей; + Возврат ДанныеДляПроверки; КонецФункции -Функция ПолучитьИсточникиДанных(Отбор) +// Для процедур ДанныеДляПроверкиИзБазыДанных, ДанныеДляПроверкиИзОбъекта. +Функция ПолучитьИсточникиДанных(ДействующиеДаты, Таблица) - ИсточникиДанныхТаблиц = ДатыЗапретаИзмененияСлужебныйПовтИсп.ИсточникиДанныхДляПроверкиЗапретаИзменения(); + ИсточникиДанных = ДействующиеДаты.ИсточникиДанных.Получить(Таблица); - ИсточникиДанных = ИсточникиДанныхТаблиц.НайтиСтроки(Отбор); - - Если ИсточникиДанных.Количество() = 0 Тогда - ВызватьИсключение(СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + Если ИсточникиДанных = Неопределено + Или ИсточникиДанных.Количество() = 0 Тогда + + ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Для проверки запрета изменения не найдены |источники данных для таблицы ""%1"".'"), - Отбор.Таблица)); + Таблица); КонецЕсли; Возврат ИсточникиДанных; КонецФункции -Процедура ДобавитьПоле(ОбъектМетаданных, - ИсточникДанных, - СтруктураПолей, - Поле, - Таблица, - ВидПоляДляСообщений) +// Для процедуры ДанныеДляПроверкиИзОбъекта. +Процедура ДобавитьСтрокуДанных(СтрокаДаты, СтрокаОбъекта, ИсточникДанных, ДанныеДляПроверки, БезОбъекта = Ложь) + + НоваяСтрока = ДанныеДляПроверки.Добавить(); + НоваяСтрока.Раздел = ИсточникДанных.Раздел; + НоваяСтрока.Дата = ЗначениеПоля(СтрокаДаты, ИсточникДанных.ПолеДаты); + + Если БезОбъекта Или Не ЗначениеЗаполнено(ИсточникДанных.ПолеОбъекта.Имя) Тогда + Возврат; + КонецЕсли; + + НоваяСтрока.Объект = ЗначениеПоля(СтрокаОбъекта, ИсточникДанных.ПолеОбъекта); + +КонецПроцедуры + +// Для процедуры ДобавитьСтрокуДанных1. +Функция ЗначениеПоля(ЗначенияПолей, Поле) + + Если ТипЗнч(ЗначенияПолей) = Тип("Структура") Тогда + Возврат ЗначенияПолей.Значение; + КонецЕсли; + + Если Не ЗначениеЗаполнено(Поле.Путь) Тогда + Возврат ЗначенияПолей[Поле.Имя]; + КонецЕсли; + + Ссылка = ЗначенияПолей[Поле.Имя]; + + Запрос = Новый Запрос; + Запрос.Текст = + "ВЫБРАТЬ + | ЕстьNULL(" + Поле.Путь + ", Неопределено) КАК ЗначениеРеквизита + |ИЗ + | " + Ссылка.Метаданные().ПолноеИмя() + " КАК Таблица + |ГДЕ + | Таблица.Ссылка = &Ссылка"; + Запрос.УстановитьПараметр("Ссылка", Ссылка); + + Выборка = Запрос.Выполнить().Выбрать(); + Выборка.Следующий(); + + Возврат Выборка.ЗначениеРеквизита; + +КонецФункции + +// Для процедуры УстановкаПараметровСеанса. +Функция ЗначениеПараметраСеансаДействующиеДатыЗапретаИзменения() + + // Приоритеты дат запрета изменения. + // 1. Для раздела, объекта и пользователя. + // 2. Для раздела, объекта и группы пользователей. + // 3. Для раздела, объекта и любого пользователя. + // 4. Для раздела, любого объекта (объект = раздел) и пользователя. + // 5. Для раздела, любого объекта (объект = раздел) и группы пользователей. + // 6. Для раздела, любого объекта (объект = раздел) и любого пользователя. + // 7. Для любого раздела (пустой раздел), любого объекта (объект = раздел) и пользователя. + // 8. Для любого раздела (пустой раздел), любого объекта (объект = раздел) и группы пользователей. + // 9. Для любого раздела (пустой раздел), любого объекта (объект = раздел) и любого пользователя. + + // Приоритеты дат запрета загрузки. + // 1. Для раздела, объекта и узла. + // 2. Для раздела, объекта и любого узла. + // 3. Для раздела, любого объекта (объект = раздел) и узла. + // 4. Для раздела, любого объекта (объект = раздел) и любого узла. + // 5. Для любого раздела (пустой раздел), любого объекта (объект = раздел) и узла. + // 6. Для любого раздела (пустой раздел), любого объекта (объект = раздел) и любого узла. + + Запрос = Новый Запрос; + Запрос.Текст = + "ВЫБРАТЬ + | Константы.ВерсияДатЗапретаИзменения, + | Константы.ИспользоватьДатыЗапретаЗагрузки, + | Константы.ИспользоватьДатыЗапретаИзменения + |ИЗ + | Константы КАК Константы + |; + | + |//////////////////////////////////////////////////////////////////////////////// + |ВЫБРАТЬ РАЗЛИЧНЫЕ + | СоставыГруппПользователей.Пользователь КАК Пользователь, + | СоставыГруппПользователей.ГруппаПользователей + |ИЗ + | РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + | ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ДатыЗапретаИзменения КАК ДатыЗапретаИзменения + | ПО СоставыГруппПользователей.ГруппаПользователей = ДатыЗапретаИзменения.Пользователь + | И (СоставыГруппПользователей.ГруппаПользователей <> СоставыГруппПользователей.Пользователь) + |ИТОГИ ПО + | Пользователь + |; + | + |//////////////////////////////////////////////////////////////////////////////// + |ВЫБРАТЬ + | ДатыЗапретаИзменения.Раздел КАК Раздел, + | ДатыЗапретаИзменения.Объект КАК Объект, + | ДатыЗапретаИзменения.Пользователь, + | ДатыЗапретаИзменения.ОписаниеДатыЗапрета, + | ДатыЗапретаИзменения.ДатаЗапрета + |ИЗ + | РегистрСведений.ДатыЗапретаИзменения КАК ДатыЗапретаИзменения + |ГДЕ + | НЕ(ДатыЗапретаИзменения.Пользователь <> ЗНАЧЕНИЕ(Перечисление.ВидыНазначенияДатЗапрета.ДляВсехПользователей) + | И ТИПЗНАЧЕНИЯ(ДатыЗапретаИзменения.Пользователь) <> ТИП(Справочник.Пользователи) + | И ТИПЗНАЧЕНИЯ(ДатыЗапретаИзменения.Пользователь) <> ТИП(Справочник.ГруппыПользователей) + | И ТИПЗНАЧЕНИЯ(ДатыЗапретаИзменения.Пользователь) <> ТИП(Справочник.ВнешниеПользователи) + | И ТИПЗНАЧЕНИЯ(ДатыЗапретаИзменения.Пользователь) <> ТИП(Справочник.ГруппыВнешнихПользователей)) + |ИТОГИ ПО + | Раздел, + | Объект + |; + | + |//////////////////////////////////////////////////////////////////////////////// + |ВЫБРАТЬ + | ДатыЗапретаИзменения.Раздел КАК Раздел, + | ДатыЗапретаИзменения.Объект КАК Объект, + | ДатыЗапретаИзменения.Пользователь, + | ДатыЗапретаИзменения.ОписаниеДатыЗапрета, + | ДатыЗапретаИзменения.ДатаЗапрета + |ИЗ + | РегистрСведений.ДатыЗапретаИзменения КАК ДатыЗапретаИзменения + |ГДЕ + | ДатыЗапретаИзменения.Пользователь <> НЕОПРЕДЕЛЕНО + | И ДатыЗапретаИзменения.Пользователь <> ЗНАЧЕНИЕ(Перечисление.ВидыНазначенияДатЗапрета.ПустаяСсылка) + | И ДатыЗапретаИзменения.Пользователь <> ЗНАЧЕНИЕ(Перечисление.ВидыНазначенияДатЗапрета.ДляВсехПользователей) + | И ТИПЗНАЧЕНИЯ(ДатыЗапретаИзменения.Пользователь) <> ТИП(Справочник.Пользователи) + | И ТИПЗНАЧЕНИЯ(ДатыЗапретаИзменения.Пользователь) <> ТИП(Справочник.ГруппыПользователей) + | И ТИПЗНАЧЕНИЯ(ДатыЗапретаИзменения.Пользователь) <> ТИП(Справочник.ВнешниеПользователи) + | И ТИПЗНАЧЕНИЯ(ДатыЗапретаИзменения.Пользователь) <> ТИП(Справочник.ГруппыВнешнихПользователей) + |ИТОГИ ПО + | Раздел, + | Объект + |; + | + |//////////////////////////////////////////////////////////////////////////////// + |ВЫБРАТЬ + | РазделыДатЗапретаИзменения.Ссылка КАК Ссылка, + | РазделыДатЗапретаИзменения.ТипЗначения КАК ТипЗначения, + | РазделыДатЗапретаИзменения.ИмяПредопределенныхДанных КАК Имя + |ИЗ + | ПланВидовХарактеристик.РазделыДатЗапретаИзменения КАК РазделыДатЗапретаИзменения + |ГДЕ + | РазделыДатЗапретаИзменения.Предопределенный"; + + НачалоДня = НачалоДня(ТекущаяДатаСеанса()); + + ДействующиеДаты = Новый Структура; + ДействующиеДаты.Вставить("НачалоДня", НачалоДня); + + Если ОбщегоНазначенияПовтИсп.ДоступноИспользованиеРазделенныхДанных() Тогда + РезультатыЗапроса = Запрос.ВыполнитьПакет(); + + ЗначенияКонстант = РезультатыЗапроса[0].Выгрузить()[0]; + ДействующиеДаты.Вставить("Версия", ЗначенияКонстант.ВерсияДатЗапретаИзменения); + ДействующиеДаты.Вставить("ЗапретИзмененияИспользуется", ЗначенияКонстант.ИспользоватьДатыЗапретаИзменения); + ДействующиеДаты.Вставить("ЗапретЗагрузкиИспользуется", ЗначенияКонстант.ИспользоватьДатыЗапретаЗагрузки); + + Выгрузка = РезультатыЗапроса[1].Выгрузить(ОбходРезультатаЗапроса.ПоГруппировкам); + ГруппыПользователей = Новый Соответствие; + Для Каждого Строка Из Выгрузка.Строки Цикл + ГруппыПользователей.Вставить(Строка.Пользователь, + Новый ФиксированныйМассив(Строка.Строки.ВыгрузитьКолонку("ГруппаПользователей"))); + КонецЦикла; + ДействующиеДаты.Вставить("ГруппыПользователей", Новый ФиксированноеСоответствие(ГруппыПользователей)); + + ДействующиеДаты.Вставить("ДляПользователей", УстановленныеДаты(РезультатыЗапроса[2], НачалоДня)); + ДействующиеДаты.Вставить("ДляИнформационныхБаз", УстановленныеДаты(РезультатыЗапроса[3], НачалоДня)); + Разделы = РезультатыЗапроса[4].Выгрузить(); + Иначе + ДействующиеДаты.Вставить("Версия", Новый УникальныйИдентификатор("00000000-0000-0000-0000-000000000000")); + ДействующиеДаты.Вставить("ЗапретИзмененияИспользуется", Ложь); + ДействующиеДаты.Вставить("ЗапретЗагрузкиИспользуется", Ложь); + ДействующиеДаты.Вставить("ГруппыПользователей", Новый ФиксированноеСоответствие(Новый Соответствие)); + УстановленныеДаты = Новый Структура; + УстановленныеДаты.Вставить("Разделы", Новый ФиксированноеСоответствие(Новый Соответствие)); + УстановленныеДаты.Вставить("ДатыЗапретаПоОбъектамНеУказаны", Истина); + ДействующиеДаты.Вставить("ДляПользователей", Новый ФиксированнаяСтруктура(УстановленныеДаты)); + ДействующиеДаты.Вставить("ДляИнформационныхБаз", Новый ФиксированнаяСтруктура(УстановленныеДаты)); + Запрос.Текст = + "ВЫБРАТЬ + | РазделыДатЗапретаИзменения.Ссылка КАК Ссылка, + | РазделыДатЗапретаИзменения.ТипЗначения КАК ТипЗначения, + | РазделыДатЗапретаИзменения.ИмяПредопределенныхДанных КАК Имя + |ИЗ + | ПланВидовХарактеристик.РазделыДатЗапретаИзменения КАК РазделыДатЗапретаИзменения + |ГДЕ + | РазделыДатЗапретаИзменения.Предопределенный"; + Разделы = Запрос.Выполнить().Выгрузить(); + КонецЕсли; + + ТипыАдресатов = Метаданные.ОпределяемыеТипы.АдресатЗапретаИзменения.Тип.Типы(); + ТипыАдресатовУзлов = Новый Массив; + ТипыАдресатовПользователей = Новый Массив; + Для каждого ТипАдресатов Из ТипыАдресатов Цикл + ОбъектМетаданных = Метаданные.НайтиПоТипу(ТипАдресатов); + Если Метаданные.ПланыОбмена.Содержит(ОбъектМетаданных) Тогда + ТипыАдресатовУзлов.Добавить(ТипАдресатов); + ИначеЕсли ТипАдресатов <> Тип("ПеречислениеСсылка.ВидыНазначенияДатЗапрета") Тогда + ТипыАдресатовПользователей.Добавить(ТипАдресатов); + КонецЕсли; + КонецЦикла; + + Если ДействующиеДаты.ДляПользователей.Разделы.Количество() = 0 Тогда + ДействующиеДаты.ЗапретИзмененияИспользуется = Ложь; + КонецЕсли; + + Если ДействующиеДаты.ДляИнформационныхБаз.Разделы.Количество() = 0 + Или ТипыАдресатовУзлов.Количество() = 0 Тогда + + ДействующиеДаты.ЗапретЗагрузкиИспользуется = Ложь; + КонецЕсли; + + СсылкиИменРазделов = Новый Соответствие; + ДействующиеДаты.Вставить("СвойстваРазделов", ТекущиеСвойстваРазделов(Разделы, СсылкиИменРазделов, ТипыАдресатовУзлов)); + ДействующиеДаты.Вставить("ИсточникиДанных", ТекущиеИсточникиДанныхДляПроверкиЗапретаИзменения(СсылкиИменРазделов)); + + Возврат Новый ФиксированнаяСтруктура(ДействующиеДаты); + +КонецФункции + +// Для процедуры ЗначениеПараметраСеансаДействующиеДатыЗапретаИзменения. + +Функция УстановленныеДаты(РезультатЗапроса, НачалоДня) + + Выгрузка = РезультатЗапроса.Выгрузить(ОбходРезультатаЗапроса.ПоГруппировкам); + + Разделы = Новый Соответствие; + ДатыЗапретаПоОбъектамНеУказаны = Истина; + + Для Каждого Раздел Из Выгрузка.Строки Цикл + Объекты = Новый Соответствие; + Для Каждого Объект Из Раздел.Строки Цикл + Адресаты = Новый Соответствие; + Для Каждого Адресат Из Объект.Строки Цикл + Адресаты.Вставить(Адресат.Пользователь, ДатаЗапретаПоОписанию( + Адресат.ОписаниеДатыЗапрета, Адресат.ДатаЗапрета, НачалоДня)); + КонецЦикла; + Объекты.Вставить(Объект.Объект, Новый ФиксированноеСоответствие(Адресаты)); + Если Объект.Объект <> Раздел.Раздел Тогда + ДатыЗапретаПоОбъектамНеУказаны = Ложь; + КонецЕсли; + КонецЦикла; + Разделы.Вставить(Раздел.Раздел, Новый ФиксированноеСоответствие(Объекты)); + КонецЦикла; + + УстановленныеДаты = Новый Структура; + УстановленныеДаты.Вставить("Разделы", Новый ФиксированноеСоответствие(Разделы)); + УстановленныеДаты.Вставить("ДатыЗапретаПоОбъектамНеУказаны", ДатыЗапретаПоОбъектамНеУказаны); + + Возврат Новый ФиксированнаяСтруктура(УстановленныеДаты); + +КонецФункции + +Функция ТекущиеСвойстваРазделов(Разделы, СсылкиИменРазделов, ТипыАдресатовУзлов) + + Свойства = Новый Структура; + Свойства.Вставить("ИспользоватьВнешнихПользователей", Ложь); + + ДатыЗапретаИзмененияПереопределяемый.НастройкаИнтерфейса(Свойства); + + Свойства.Вставить("ДатыЗапретаЗагрузкиВнедрены", ТипыАдресатовУзлов.Количество() > 0); + + ТипыАдресатов = Метаданные.ОпределяемыеТипы.АдресатЗапретаИзменения.Тип.Типы(); + ПустыеСсылкиУзлов = Новый Массив; + + Для Каждого ТипАдресатовУзлов Из ТипыАдресатовУзлов Цикл + ПустаяСсылкаУзла = ПустаяСсылка(ТипАдресатовУзлов); + ПустыеСсылкиУзлов.Добавить(ПустаяСсылкаУзла); + КонецЦикла; + + Свойства.Вставить("ПустыеСсылкиУзловПлановОбмена", Новый ФиксированныйМассив(ПустыеСсылкиУзлов)); + + Свойства.Вставить("ВсеРазделыБезОбъектов", Истина); + + РазделыБезОбъектов = Новый Массив; + ТипыОбъектовРазделов = Новый Соответствие; + + Для Каждого Раздел Из Разделы Цикл + СсылкиИменРазделов.Вставить(Раздел.Имя, Раздел.Ссылка); + + ТипыОбъектов = Новый Массив; + Для каждого Тип Из Раздел.ТипЗначения.Типы() Цикл + Если Тип <> Тип("ПланВидовХарактеристикСсылка.РазделыДатЗапретаИзменения") Тогда + Если ОбщегоНазначения.ЭтоСсылка(Тип) Тогда + МетаданныеТипа = Метаданные.НайтиПоТипу(Тип); + СвойстваТипа = Новый Структура; + СвойстваТипа.Вставить("ПолноеИмя", МетаданныеТипа.ПолноеИмя()); + СвойстваТипа.Вставить("Представление", МетаданныеТипа.ПредставлениеОбъекта); + ТипыОбъектов.Добавить(Новый ФиксированнаяСтруктура(СвойстваТипа)); + КонецЕсли; + КонецЕсли; + КонецЦикла; + ТипыОбъектовРазделов.Вставить(Раздел.Ссылка, Новый ФиксированныйМассив(ТипыОбъектов)); + + Если ТипыОбъектов.Количество() <> 0 Тогда + Свойства.ВсеРазделыБезОбъектов = Ложь; + Иначе + РазделыБезОбъектов.Добавить(Раздел.Ссылка); + КонецЕсли; + КонецЦикла; + + Свойства.Вставить("РазделыБезОбъектов", Новый ФиксированныйМассив(РазделыБезОбъектов)); + Свойства.Вставить("ТипыОбъектовРазделов", Новый ФиксированноеСоответствие(ТипыОбъектовРазделов)); + + ПустойРаздел = ДатыЗапретаИзмененияСлужебныйПовтИсп.ПустойРаздел(); + + Свойства.Вставить("БезРазделовИОбъектов", Разделы.Количество() = 0); + Свойства.Вставить("ЕдинственныйРаздел", ?(Разделы.Количество() = 1, Разделы[0].Ссылка, ПустойРаздел)); + Свойства.Вставить("ПоказыватьРазделы", НЕ ( НЕ Свойства.ВсеРазделыБезОбъектов + И ЗначениеЗаполнено(Свойства.ЕдинственныйРаздел))); + + Возврат Новый ФиксированнаяСтруктура(Свойства); + +КонецФункции + +Функция ТекущиеИсточникиДанныхДляПроверкиЗапретаИзменения(СсылкиИменРазделов) + + ИсточникиДанных = Новый ТаблицаЗначений; + ИсточникиДанных.Колонки.Добавить("Таблица", Новый ОписаниеТипов("Строка")); + ИсточникиДанных.Колонки.Добавить("ПолеДаты", Новый ОписаниеТипов("Строка")); + ИсточникиДанных.Колонки.Добавить("Раздел", Новый ОписаниеТипов("Строка")); + ИсточникиДанных.Колонки.Добавить("ПолеОбъекта", Новый ОписаниеТипов("Строка")); + + ИнтеграцияСтандартныхПодсистем.ПриЗаполненииИсточниковДанныхДляПроверкиЗапретаИзменения(ИсточникиДанных); + ДатыЗапретаИзмененияПереопределяемый.ЗаполнитьИсточникиДанныхДляПроверкиЗапретаИзменения(ИсточникиДанных); + + Источники = Новый Соответствие; + Таблицы = ИсточникиДанных.Скопировать(, "Таблица"); + Таблицы.Свернуть("Таблица"); + + Для Каждого Строка Из Таблицы Цикл + ИсточникиТаблицы = Новый Структура; + Попытка + Если СтрНачинаетсяС(ВРег(Строка.Таблица), ВРег("Регистр")) Тогда + ТипЭлемента = Тип(СтрЗаменить(Строка.Таблица, ".", "КлючЗаписи.")); + Иначе + ТипЭлемента = Тип(СтрЗаменить(Строка.Таблица, ".", "Ссылка.")); + КонецЕсли; + ОбъектМетаданных = Метаданные.НайтиПоТипу(ТипЭлемента); + Исключение + ОбъектМетаданных = Метаданные.НайтиПоПолномуИмени(Строка.Таблица); + КонецПопытки; + Если ОбъектМетаданных = Неопределено Тогда + ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Для проверки запрета изменения + |в источнике данных неверно указана таблица + |""%1"".'"), + Строка.Таблица); + КонецЕсли; + ЭтоРегистр = ОбщегоНазначения.ЭтоРегистр(ОбъектМетаданных); + ИсточникиТаблицы.Вставить("ЭтоРегистр", ЭтоРегистр); + + ИсточникиДанныхТаблицы = ИсточникиДанных.НайтиСтроки(Новый Структура("Таблица", Строка.Таблица)); + СоставИсточников = Новый Массив; + ПоляРегистра = Новый Соответствие; + ТекстЗапроса = ""; + ТекстЗапросаТолькоДаты = ""; + + Для Каждого Строка Из ИсточникиДанныхТаблицы Цикл + Источник = Новый Структура; + Источник.Вставить("Раздел", СсылкиИменРазделов.Получить(Строка.Раздел)); + Источник.Вставить("ПолеДаты", ПолеТаблицы(Строка, "ПолеДаты", ОбъектМетаданных, ЭтоРегистр)); + Источник.Вставить("ПолеОбъекта", ПолеТаблицы(Строка, "ПолеОбъекта", ОбъектМетаданных, ЭтоРегистр)); + Если ЭтоРегистр Тогда + ПоляРегистра.Вставить(Источник.ПолеДаты.Имя, Истина); + Если ЗначениеЗаполнено(Источник.ПолеОбъекта.Имя) Тогда + ДобавитьТекстЗапросаДляРегистра(ТекстЗапроса, Строка.Таблица, Источник); + ПоляРегистра.Вставить(Источник.ПолеОбъекта.Имя, Истина); + Иначе + ДобавитьТекстЗапросаТолькоДатыДляРегистра(ТекстЗапроса, Строка.Таблица, Источник); + КонецЕсли; + ДобавитьТекстЗапросаТолькоДатыДляРегистра(ТекстЗапросаТолькоДаты, Строка.Таблица, Источник); + Иначе + Если ЗначениеЗаполнено(Источник.ПолеОбъекта.Имя) Тогда + ДобавитьТекстЗапроса(ТекстЗапроса, Строка.Таблица, Источник); + Иначе + ДобавитьТекстЗапросаТолькоДаты(ТекстЗапроса, Строка.Таблица, Источник); + КонецЕсли; + ДобавитьТекстЗапросаТолькоДаты(ТекстЗапросаТолькоДаты, Строка.Таблица, Источник); + КонецЕсли; + СоставИсточников.Добавить(Новый ФиксированнаяСтруктура(Источник)); + КонецЦикла; + ИсточникиТаблицы.Вставить("Состав", Новый ФиксированныйМассив(СоставИсточников)); + ИсточникиТаблицы.Вставить("ТекстЗапроса", ТекстЗапроса); + ИсточникиТаблицы.Вставить("ТекстЗапросаТолькоДаты", ТекстЗапросаТолькоДаты); + Если ЭтоРегистр Тогда + Поля = ""; + Для Каждого КлючИЗначение Из ПоляРегистра Цикл + Поля = Поля + "," + КлючИЗначение.Ключ; + КонецЦикла; + ИсточникиТаблицы.Вставить("ПоляРегистра", Сред(Поля, 2)); + КонецЕсли; + Источники.Вставить(Строка.Таблица, Новый ФиксированнаяСтруктура(ИсточникиТаблицы)); + КонецЦикла; + + Возврат Новый ФиксированноеСоответствие(Источники); + +КонецФункции + +// Для функции ТекущиеИсточникиДанныхДляПроверкиЗапретаИзменения. + +Функция ПолеТаблицы(Источник, ВидПоля, ОбъектМетаданных, ЭтоРегистр) + + Свойства = Новый Структура("Имя, ТабличнаяЧасть, Путь, ИмяИПуть"); + + Поле = Источник[ВидПоля]; + Поля = СтрРазделить(Поле, ".", Ложь); - Поля = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(Поле, "."); Если Поля.Количество() = 0 Тогда - ВызватьИсключение(СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Для проверки запрета изменения - |в источнике данных для таблицы ""%1"" - |не задано %2.'"), - Таблица, - ВидПоляДляСообщений)); + Если ВидПоля = "ПолеДаты" Тогда + ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Для проверки запрета изменения + |в источнике данных для таблицы ""%1"" + |не задано поле даты.'"), + Источник.Таблица); + Иначе + Возврат Новый ФиксированнаяСтруктура(Свойства); + КонецЕсли; ИначеЕсли НЕ ЗначениеЗаполнено(Поля[0]) Тогда - ВызватьИсключение(СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Для проверки запрета изменения - |в источнике данных для таблицы ""%1"" - |неверно задано %2: ""%3""'"), - Таблица, - ВидПоляДляСообщений, - Поле)); - КонецЕсли; - - Если НЕ СтруктураПолей.Свойство(Поля[0]) Тогда - СтруктураПолей.Вставить(Поля[0]); - КонецЕсли; - - Если ОбъектМетаданных.ТабличныеЧасти.Найти(Поля[0]) <> Неопределено Тогда - Если Поля.Количество() = 1 Тогда - ВызватьИсключение(СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + Если ВидПоля = "ПолеДаты" Тогда + ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Для проверки запрета изменения |в источнике данных для таблицы ""%1"" - |неверно задано %2: - |не задано поле заданной табличной части ""%3"".'"), - Таблица, - ВидПоляДляСообщений, - Поле)); - ИначеЕсли НЕ ЗначениеЗаполнено(Поля[1]) Тогда - ВызватьИсключение(СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Для проверки запрета изменения - |в источнике данных для таблицы ""%1"" - |неверно задано %2: - |неверно задано поле заданной табличной части ""%3"".'"), - Таблица, - ВидПоляДляСообщений, - Поле)); - КонецЕсли; - Если СтруктураПолей[Поля[0]] = Неопределено Тогда - СтруктураПолей[Поля[0]] = Поля[1]; + |неверно задано поле даты: ""%2""'"), + Источник.Таблица, Поле); Иначе - СтруктураПолей[Поля[0]] = СтруктураПолей[Поле] + "," + Поля[1]; + ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Для проверки запрета изменения + |в источнике данных для таблицы ""%1"" + |неверно задано поле объекта: ""%2""'"), + Источник.Таблица, Поле); КонецЕсли; КонецЕсли; + Если ЭтоРегистр + Или ОбъектМетаданных.ТабличныеЧасти.Найти(Поля[0]) = Неопределено Тогда + + Свойства.ИмяИПуть = Поле; + Свойства.Имя = Поля[0]; + ПозицияТочки = Найти(Поле, "."); + Если ПозицияТочки > 0 Тогда + Свойства.Путь = Сред(Поле, ПозицияТочки + 1); + КонецЕсли; + Возврат Новый ФиксированнаяСтруктура(Свойства); + КонецЕсли; + + Если Поля.Количество() = 1 Тогда + Если ВидПоля = "ПолеДаты" Тогда + ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Для проверки запрета изменения + |в источнике данных для таблицы ""%1"" + |неверно задано поле даты: + |не задано поле заданной табличной части ""%2"".'"), + Источник.Таблица, Поля[0]); + Иначе + ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Для проверки запрета изменения + |в источнике данных для таблицы ""%1"" + |неверно задано поле объекта: + |не задано поле заданной табличной части ""%2"".'"), + Источник.Таблица, Поля[0]); + КонецЕсли; + ИначеЕсли НЕ ЗначениеЗаполнено(Поля[1]) Тогда + Если ВидПоля = "ПолеДаты" Тогда + ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Для проверки запрета изменения + |в источнике данных для таблицы ""%1"" + |неверно задано поле даты: + |неверно задано поле заданной табличной части ""%2"".'"), + Источник.Таблица, Поля[0]); + Иначе + ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Для проверки запрета изменения + |в источнике данных для таблицы ""%1"" + |неверно задано поле объекта: + |неверно задано поле заданной табличной части ""%2"".'"), + Источник.Таблица, Поля[0]); + КонецЕсли; + КонецЕсли; + + Свойства.ТабличнаяЧасть = Поля[0]; + Свойства.Имя = Поля[1]; + + ПозицияТочки = Найти(Поле, "."); + Свойства.ИмяИПуть = Сред(Поле, ПозицияТочки + 1); + + ПозицияТочки = Найти(Свойства.ИмяИПуть, "."); + Если ПозицияТочки > 0 Тогда + Свойства.Путь = Сред(Свойства.ИмяИПуть, ПозицияТочки + 1); + КонецЕсли; + + Возврат Новый ФиксированнаяСтруктура(Свойства); + +КонецФункции + +Процедура ДобавитьТекстЗапроса(ТекстЗапроса, Таблица, Источник) + + Если Не ЗначениеЗаполнено(Источник.ПолеДаты.ТабличнаяЧасть) + И Не ЗначениеЗаполнено(Источник.ПолеОбъекта.ТабличнаяЧасть) + Или Источник.ПолеДаты.ТабличнаяЧасть = Источник.ПолеОбъекта.ТабличнаяЧасть Тогда + + Если Источник.ПолеДаты.ТабличнаяЧасть = Источник.ПолеОбъекта.ТабличнаяЧасть Тогда + ТекущаяТаблица = Таблица + "." + Источник.ПолеДаты.ТабличнаяЧасть; + Иначе + ТекущаяТаблица = Таблица; + КонецЕсли; + + Текст = + "ВЫБРАТЬ + | ВЫРАЗИТЬ(&ПолеДаты КАК ДАТА) КАК Дата, + | ЕСТЬNULL(&ПолеОбъекта, НЕОПРЕДЕЛЕНО) КАК Объект + |ИЗ + | &Таблица КАК ТекущаяТаблица + |ГДЕ + | ТекущаяТаблица.Ссылка = &Ссылка"; + Текст = СтрЗаменить(Текст, "&Таблица", ТекущаяТаблица); + Текст = СтрЗаменить(Текст, "&ПолеДаты", "ТекущаяТаблица." + Источник.ПолеДаты.ИмяИПуть); + Текст = СтрЗаменить(Текст, "&ПолеОбъекта", "ТекущаяТаблица." + Источник.ПолеОбъекта.ИмяИПуть); + Иначе + Если ЗначениеЗаполнено(Источник.ПолеДаты.ТабличнаяЧасть) Тогда + ТаблицаПоляДаты = Таблица + "." + Источник.ПолеДаты.ТабличнаяЧасть; + Иначе + ТаблицаПоляДаты = Таблица; + КонецЕсли; + + Если ЗначениеЗаполнено(Источник.ПолеОбъекта.ТабличнаяЧасть) Тогда + ТаблицаПоляОбъекта = Таблица + "." + Источник.ПолеОбъекта.ТабличнаяЧасть; + Иначе + ТаблицаПоляОбъекта = Таблица; + КонецЕсли; + + Текст = + "ВЫБРАТЬ + | ВЫРАЗИТЬ(&ПолеДаты КАК ДАТА) КАК Дата, + | ЕСТЬNULL(&ПолеОбъекта, НЕОПРЕДЕЛЕНО) КАК Объект + |ИЗ + | ТаблицаДаты КАК ТаблицаПоляДаты + | ЛЕВОЕ СОЕДИНЕНИЕ ТаблицаОбъекта КАК ТаблицаПоляОбъекта + | ПО ТаблицаПоляДаты.Ссылка = ТаблицаПоляОбъекта.Ссылка + |ГДЕ + | ТаблицаПоляДаты.Ссылка = &Ссылка"; + Текст = СтрЗаменить(Текст, "ТаблицаДаты", ТаблицаПоляДаты); + Текст = СтрЗаменить(Текст, "ТаблицаОбъекта", ТаблицаПоляОбъекта); + Текст = СтрЗаменить(Текст, "&ПолеДаты", "ТаблицаПоляДаты." + Источник.ПолеДаты.ИмяИПуть); + Текст = СтрЗаменить(Текст, "&ПолеОбъекта", "ТаблицаПоляОбъекта." + Источник.ПолеОбъекта.ИмяИПуть); + КонецЕсли; + + ДобавитьТекстЗапросаВПакет(ТекстЗапроса, Текст); + +КонецПроцедуры + +Процедура ДобавитьТекстЗапросаТолькоДаты(ТекстЗапроса, Таблица, Источник) + + Если Не ЗначениеЗаполнено(Источник.ПолеДаты.ТабличнаяЧасть) Тогда + Текст = + "ВЫБРАТЬ + | ВЫРАЗИТЬ(&ПолеДаты КАК ДАТА) КАК Дата + |ИЗ + | &Таблица КАК ТекущаяТаблица + |ГДЕ + | ТекущаяТаблица.Ссылка = &Ссылка"; + Текст = СтрЗаменить(Текст, "&Таблица", Таблица); + Текст = СтрЗаменить(Текст, "&ПолеДаты", "ТекущаяТаблица." + Источник.ПолеДаты.ИмяИПуть); + Иначе + Текст = + "ВЫБРАТЬ ПЕРВЫЕ 1 + | ВЫРАЗИТЬ(&ПолеДаты КАК ДАТА) КАК Дата + |ИЗ + | &Таблица КАК ТекущаяТаблица + |ГДЕ + | ТекущаяТаблица.Ссылка = &Ссылка + | + |УПОРЯДОЧИТЬ ПО + | Дата"; + Текст = СтрЗаменить(Текст, "&Таблица", Таблица + "." + Источник.ПолеДаты.ТабличнаяЧасть); + Текст = СтрЗаменить(Текст, "&ПолеДаты", "ТекущаяТаблица." + Источник.ПолеДаты.ИмяИПуть); + КонецЕсли; + + ДобавитьТекстЗапросаВПакет(ТекстЗапроса, Текст); + +КонецПроцедуры + +Процедура ДобавитьТекстЗапросаДляРегистра(ТекстЗапроса, Таблица, Источник) + + Текст = + "ВЫБРАТЬ РАЗЛИЧНЫЕ + | ВЫРАЗИТЬ(&ПолеДаты КАК ДАТА) КАК Дата, + | ЕСТЬNULL(&ПолеОбъекта, НЕОПРЕДЕЛЕНО) КАК Объект + |ИЗ + | &Таблица КАК ТекущаяТаблица + |ГДЕ + | &УсловиеОтбора"; + + Текст = СтрЗаменить(Текст, "&Таблица", Таблица); + Текст = СтрЗаменить(Текст, "&ПолеДаты", "ТекущаяТаблица." + Источник.ПолеДаты.ИмяИПуть); + Текст = СтрЗаменить(Текст, "&ПолеОбъекта", "ТекущаяТаблица." + Источник.ПолеОбъекта.ИмяИПуть); + + ДобавитьТекстЗапросаВПакет(ТекстЗапроса, Текст); + +КонецПроцедуры + +Процедура ДобавитьТекстЗапросаТолькоДатыДляРегистра(ТекстЗапроса, Таблица, Источник) + + Текст = + "ВЫБРАТЬ ПЕРВЫЕ 1 + | ВЫРАЗИТЬ(&ПолеДаты КАК ДАТА) КАК Дата + |ИЗ + | &Таблица КАК ТекущаяТаблица + |ГДЕ + | &УсловиеОтбора + | + |УПОРЯДОЧИТЬ ПО + | Дата"; + + Текст = СтрЗаменить(Текст, "&Таблица", Таблица); + Текст = СтрЗаменить(Текст, "&ПолеДаты", "ТекущаяТаблица." + Источник.ПолеДаты.ИмяИПуть); + + ДобавитьТекстЗапросаВПакет(ТекстЗапроса, Текст); + +КонецПроцедуры + +Процедура ДобавитьТекстЗапросаВПакет(ТекстПакетаЗапросов, ТекстЗапроса) + + Если Не ЗначениеЗаполнено(ТекстПакетаЗапросов) Тогда + ТекстПакетаЗапросов = ТекстЗапроса; + Возврат; + КонецЕсли; + + ТекстПакетаЗапросов = ТекстПакетаЗапросов + " + |; + | + |//////////////////////////////////////////////////////////////////////////////// + |" + ТекстЗапроса; + КонецПроцедуры #КонецОбласти diff --git a/SSL/src/CommonModules/ДатыЗапретаИзмененияСлужебныйПовтИсп/Module.bsl b/SSL/src/CommonModules/ДатыЗапретаИзмененияСлужебныйПовтИсп/Module.bsl index eb3677565..66e555ad1 100644 --- a/SSL/src/CommonModules/ДатыЗапретаИзмененияСлужебныйПовтИсп/Module.bsl +++ b/SSL/src/CommonModules/ДатыЗапретаИзмененияСлужебныйПовтИсп/Module.bsl @@ -5,87 +5,6 @@ #Область СлужебныеПроцедурыИФункции -// Возвращает свойства, характеризующие вариант встраивания. -Функция СвойстваРазделов() Экспорт - - Свойства = Новый Структура; - Свойства.Вставить("ИспользоватьВнешнихПользователей", Ложь); - - ДатыЗапретаИзмененияПереопределяемый.НастройкаИнтерфейса(Свойства); - - Свойства.Вставить("ПустыеСсылкиУзловПлановОбмена", Новый Массив); - Свойства.Вставить("ИспользоватьДатыЗапретаЗагрузкиДанных", Ложь); - - ТипыАдресатаНастройки = Метаданные.РегистрыСведений.ДатыЗапретаИзменения - .Измерения.Пользователь.Тип.Типы(); - - Для каждого ТипАдресатаНастройки Из ТипыАдресатаНастройки Цикл - ОбъектМетаданных = Метаданные.НайтиПоТипу(ТипАдресатаНастройки); - Если Метаданные.ПланыОбмена.Содержит(ОбъектМетаданных) Тогда - Свойства.ИспользоватьДатыЗапретаЗагрузкиДанных = Истина; - Свойства.ПустыеСсылкиУзловПлановОбмена.Добавить( - ОбщегоНазначения.МенеджерОбъектаПоПолномуИмени( - ОбъектМетаданных.ПолноеИмя()).ПустаяСсылка()); - КонецЕсли; - КонецЦикла; - - Свойства.Вставить("ВсеРазделыБезОбъектов", Истина); - Свойства.Вставить("БезРазделовИОбъектов"); - Свойства.Вставить("ЕдинственныйРаздел"); - Свойства.Вставить("ПоказыватьРазделы"); - Свойства.Вставить("РазделыБезОбъектов", Новый СписокЗначений); - Свойства.Вставить("ТипыОбъектовРазделов", Новый ТаблицаЗначений); - - Свойства.ТипыОбъектовРазделов.Колонки.Добавить( - "Раздел", Новый ОписаниеТипов("ПланВидовХарактеристикСсылка.РазделыДатЗапретаИзменения")); - - Свойства.ТипыОбъектовРазделов.Колонки.Добавить( - "ТипыОбъекта", Новый ОписаниеТипов("СписокЗначений")); - - Запрос = Новый Запрос( - "ВЫБРАТЬ - | РазделыДатЗапретаИзменения.Ссылка - |ИЗ - | ПланВидовХарактеристик.РазделыДатЗапретаИзменения КАК РазделыДатЗапретаИзменения - |ГДЕ - | РазделыДатЗапретаИзменения.Предопределенный"); - - УстановитьПривилегированныйРежим(Истина); - Разделы = Запрос.Выполнить().Выгрузить().ВыгрузитьКолонку("Ссылка"); - - Для каждого Раздел Из Разделы Цикл - - ОписаниеРаздела = Свойства.ТипыОбъектовРазделов.Добавить(); - ОписаниеРаздела.Раздел = Раздел; - ОписаниеРаздела.ТипыОбъекта = Новый СписокЗначений; - - Для каждого Тип Из Раздел.ТипЗначения.Типы() Цикл - Если Тип <> Тип("ПланВидовХарактеристикСсылка.РазделыДатЗапретаИзменения") Тогда - Если ОбщегоНазначения.ЭтоСсылка(Тип) Тогда - МетаданныеТипа = Метаданные.НайтиПоТипу(Тип); - ОписаниеРаздела.ТипыОбъекта.Добавить( - МетаданныеТипа.ПолноеИмя(), - МетаданныеТипа.ПредставлениеОбъекта); - КонецЕсли; - КонецЕсли; - КонецЦикла; - - Если ОписаниеРаздела.ТипыОбъекта.Количество() <> 0 Тогда - Свойства.ВсеРазделыБезОбъектов = Ложь; - Иначе - Свойства.РазделыБезОбъектов.Добавить(Раздел); - КонецЕсли; - КонецЦикла; - - Свойства.БезРазделовИОбъектов = Разделы.Количество() = 0; - Свойства.ЕдинственныйРаздел = Разделы.Количество() = 1; - Свойства.ПоказыватьРазделы = НЕ ( НЕ Свойства.ВсеРазделыБезОбъектов - И Свойства.ЕдинственныйРаздел); - - Возврат Новый ФиксированнаяСтруктура(Свойства); - -КонецФункции - // См. комментарий в вызывающей функции ДатыЗапретаИзменения.ШаблонДанныхДляПроверки(). Функция ШаблонДанныхДляПроверки() Экспорт @@ -104,21 +23,23 @@ КонецФункции -// Возвращает источники данных, заполненные в процедуре. -// ДатыЗапретаИзмененияПереопределяемый.ЗаполнитьИсточникиДанныхДляПроверкиЗапретаИзменения(). +// Возвращает сведения о последней проверки версии действующих дат запрета изменения. // -Функция ИсточникиДанныхДляПроверкиЗапретаИзменения() Экспорт +// Возвращаемое значение: +// Структура - со свойствами: +// * Дата - Дата - дата и время последней проверки действующих дат. +// +Функция ПоследняяПроверкаВерсииДействующихДатЗапрета() Экспорт - ИсточникиДанных = Новый ТаблицаЗначений; - ИсточникиДанных.Колонки.Добавить("Таблица", Новый ОписаниеТипов("Строка")); - ИсточникиДанных.Колонки.Добавить("ПолеДаты", Новый ОписаниеТипов("Строка")); - ИсточникиДанных.Колонки.Добавить("Раздел", Новый ОписаниеТипов("Строка")); - ИсточникиДанных.Колонки.Добавить("ПолеОбъекта", Новый ОписаниеТипов("Строка")); + Возврат Новый Структура("Дата", '00010101'); - ДатыЗапретаИзмененияПереопределяемый.ЗаполнитьИсточникиДанныхДляПроверкиЗапретаИзменения( - ИсточникиДанных); +КонецФункции + +// Возвращает пустой раздел дат запрета. +Функция ПустойРаздел() Экспорт - Возврат ИсточникиДанных; + Возврат ДатыЗапретаИзмененияСлужебный.ПустаяСсылка( + Тип("ПланВидовХарактеристикСсылка.РазделыДатЗапретаИзменения")); КонецФункции diff --git a/SSL/src/CommonModules/ДлительныеОперации/Module.bsl b/SSL/src/CommonModules/ДлительныеОперации/Module.bsl index ab724be9f..958bfa418 100644 --- a/SSL/src/CommonModules/ДлительныеОперации/Module.bsl +++ b/SSL/src/CommonModules/ДлительныеОперации/Module.bsl @@ -31,65 +31,16 @@ // * ИдентификаторЗадания - УникальныйИдентификатор - уникальный идентификатор запущенного фонового задания; // * ЗаданиеВыполнено - Булево - Истина если задание было успешно выполнено за время вызова функции. // -Функция ЗапуститьВыполнениеВФоне(Знач ИдентификаторФормы, Знач ИмяЭкспортнойПроцедуры, - Знач Параметры, Знач НаименованиеЗадания = "", ИспользоватьДополнительноеВременноеХранилище = Ложь) Экспорт +Функция ЗапуститьВыполнениеВФоне(Знач ИдентификаторФормы, Знач ИмяЭкспортнойПроцедуры, Знач Параметры, + Знач НаименованиеЗадания = "", ИспользоватьДополнительноеВременноеХранилище = Ложь) Экспорт - АдресХранилища = ПоместитьВоВременноеХранилище(Неопределено, ИдентификаторФормы); - - Результат = Новый Структура; - Результат.Вставить("АдресХранилища", АдресХранилища); - Результат.Вставить("ЗаданиеВыполнено", Ложь); - Результат.Вставить("ИдентификаторЗадания", Неопределено); - - Если Не ЗначениеЗаполнено(НаименованиеЗадания) Тогда - НаименованиеЗадания = ИмяЭкспортнойПроцедуры; - КонецЕсли; - - ПараметрыЭкспортнойПроцедуры = Новый Массив; - ПараметрыЭкспортнойПроцедуры.Добавить(Параметры); - ПараметрыЭкспортнойПроцедуры.Добавить(АдресХранилища); - - Если ИспользоватьДополнительноеВременноеХранилище Тогда - АдресХранилищаДополнительный = ПоместитьВоВременноеХранилище(Неопределено, ИдентификаторФормы); - ПараметрыЭкспортнойПроцедуры.Добавить(АдресХранилищаДополнительный); - КонецЕсли; - - ЗапущеноЗаданий = 0; - Если ОбщегоНазначения.ИнформационнаяБазаФайловая() - И Не ОбновлениеИнформационнойБазы.НеобходимоОбновлениеИнформационнойБазы() Тогда - Отбор = Новый Структура; - Отбор.Вставить("Состояние", СостояниеФоновогоЗадания.Активно); - ЗапущеноЗаданий = ФоновыеЗадания.ПолучитьФоновыеЗадания(Отбор).Количество(); - КонецЕсли; - - Если ОбщегоНазначенияКлиентСервер.РежимОтладки() - Или ЗапущеноЗаданий > 0 Тогда - РаботаВБезопасномРежиме.ВыполнитьМетодКонфигурации(ИмяЭкспортнойПроцедуры, ПараметрыЭкспортнойПроцедуры); - Результат.ЗаданиеВыполнено = Истина; - Иначе - ПараметрыЗадания = Новый Массив; - ПараметрыЗадания.Добавить(ИмяЭкспортнойПроцедуры); - ПараметрыЗадания.Добавить(ПараметрыЭкспортнойПроцедуры); - ВремяОжидания = ?(ПолучитьСкоростьКлиентскогоСоединения() = СкоростьКлиентскогоСоединения.Низкая, 4, 2); - - Задание = СтандартныеПодсистемыСервер.ЗапуститьФоновоеЗаданиеСКонтекстомКлиента(ИмяЭкспортнойПроцедуры, - ПараметрыЭкспортнойПроцедуры,, НаименованиеЗадания); - - Попытка - Задание.ОжидатьЗавершения(ВремяОжидания); - Исключение - // Специальная обработка не требуется, возможно исключение вызвано истечением времени ожидания. - КонецПопытки; - - Результат.ЗаданиеВыполнено = ЗаданиеВыполнено(Задание.УникальныйИдентификатор); - Результат.ИдентификаторЗадания = Задание.УникальныйИдентификатор; - КонецЕсли; - - Если ИспользоватьДополнительноеВременноеХранилище Тогда - Результат.Вставить("АдресХранилищаДополнительный", АдресХранилищаДополнительный); - КонецЕсли; - - Возврат Результат; + Возврат ЗапуститьВыполнениеВФонеСлужебный( + ИдентификаторФормы, + ИмяЭкспортнойПроцедуры, + Параметры, + НаименованиеЗадания, + ИспользоватьДополнительноеВременноеХранилище, + Истина); КонецФункции @@ -228,8 +179,8 @@ ОбратныйИндекс = Количество - Номер; Сообщение = МассивСообщений[ОбратныйИндекс]; - Если Лев(Сообщение.Текст, 1) = "{" Тогда - Позиция = Найти(Сообщение.Текст, "}"); + Если СтрНачинаетсяС(Сообщение.Текст, "{") Тогда + Позиция = СтрНайти(Сообщение.Текст, "}"); Если Позиция > 2 Тогда ИдентификаторМеханизма = Сред(Сообщение.Текст, 2, Позиция - 2); Если ИдентификаторМеханизма = ИмяПодсистемы() Тогда @@ -246,6 +197,110 @@ #КонецОбласти +#Область СлужебныйПрограммныйИнтерфейс + +// Запускает выполнение процедуры в фоновом задании. +Функция ЗапуститьВыполнениеВФонеСлужебный(Знач ИдентификаторФормы, Знач ИмяЭкспортнойПроцедуры, Знач Параметры, + Знач НаименованиеЗадания = "", ИспользоватьДополнительноеВременноеХранилище = Ложь, ОжидатьЗавершение = Истина) Экспорт + + + АдресХранилища = ПоместитьВоВременноеХранилище(Неопределено, ИдентификаторФормы); + + Результат = Новый Структура; + Результат.Вставить("АдресХранилища", АдресХранилища); + Результат.Вставить("ЗаданиеВыполнено", Ложь); + Результат.Вставить("ИдентификаторЗадания", Неопределено); + + Если Не ЗначениеЗаполнено(НаименованиеЗадания) Тогда + НаименованиеЗадания = ИмяЭкспортнойПроцедуры; + КонецЕсли; + + ПараметрыЭкспортнойПроцедуры = Новый Массив; + ПараметрыЭкспортнойПроцедуры.Добавить(Параметры); + ПараметрыЭкспортнойПроцедуры.Добавить(АдресХранилища); + + Если ИспользоватьДополнительноеВременноеХранилище Тогда + АдресХранилищаДополнительный = ПоместитьВоВременноеХранилище(Неопределено, ИдентификаторФормы); + ПараметрыЭкспортнойПроцедуры.Добавить(АдресХранилищаДополнительный); + КонецЕсли; + + ЗапущеноЗаданий = 0; + Если ОбщегоНазначения.ИнформационнаяБазаФайловая() + И Не ОбновлениеИнформационнойБазы.НеобходимоОбновлениеИнформационнойБазы() Тогда + Отбор = Новый Структура; + Отбор.Вставить("Состояние", СостояниеФоновогоЗадания.Активно); + ЗапущеноЗаданий = ФоновыеЗадания.ПолучитьФоновыеЗадания(Отбор).Количество(); + КонецЕсли; + + Если ОбщегоНазначенияКлиентСервер.РежимОтладки() + Или ЗапущеноЗаданий > 0 Тогда + РаботаВБезопасномРежиме.ВыполнитьМетодКонфигурации(ИмяЭкспортнойПроцедуры, ПараметрыЭкспортнойПроцедуры); + Результат.ЗаданиеВыполнено = Истина; + Иначе + ПараметрыЗадания = Новый Массив; + ПараметрыЗадания.Добавить(ИмяЭкспортнойПроцедуры); + ПараметрыЗадания.Добавить(ПараметрыЭкспортнойПроцедуры); + ВремяОжидания = ?(ПолучитьСкоростьКлиентскогоСоединения() = СкоростьКлиентскогоСоединения.Низкая, 4, 2); + + Задание = СтандартныеПодсистемыСервер.ЗапуститьФоновоеЗаданиеСКонтекстомКлиента(ИмяЭкспортнойПроцедуры, + ПараметрыЭкспортнойПроцедуры,, НаименованиеЗадания); + + Если ОжидатьЗавершение Тогда + Попытка + Задание.ОжидатьЗавершения(ВремяОжидания); + Исключение + // Специальная обработка не требуется, возможно исключение вызвано истечением времени ожидания. + КонецПопытки; + КонецЕсли; + + Результат.ЗаданиеВыполнено = ЗаданиеВыполнено(Задание.УникальныйИдентификатор); + Результат.ИдентификаторЗадания = Задание.УникальныйИдентификатор; + КонецЕсли; + + Если ИспользоватьДополнительноеВременноеХранилище Тогда + Результат.Вставить("АдресХранилищаДополнительный", АдресХранилищаДополнительный); + КонецЕсли; + + Возврат Результат; + +КонецФункции + +// Считывает состояние фонового задания по переданному идентификатору. +// +// Параметры: +// Идентификатор - УникальныйИдентификатор - Идентификатор фонового задания. +// +// Возвращаемое значение: +// Неопределено - Задание не найдено. +// Структура - Сведения о задании. +// * Выполняется - Булево - Истина когда фоновое задание еще выполняется. +// * Успешно - Булево - Истина когда сеанс фонового задания завершился без ошибок. +// * Ошибка - Строка, ИнформацияОбОшибке, Неопределено - Описание ошибки. +// +Функция НайтиЗаданиеСлужебный(Знач Идентификатор) Экспорт + Задание = ФоновыеЗадания.НайтиПоУникальномуИдентификатору(Идентификатор); + Если Задание = Неопределено Тогда + Возврат Неопределено; + КонецЕсли; + + Результат = Новый Структура("Выполняется, Успех, Ошибка", Ложь, Ложь, Неопределено); + Если Задание.Состояние = СостояниеФоновогоЗадания.Активно Тогда + Результат.Выполняется = Истина; + Иначе + Результат.Выполняется = Ложь; + Если Задание.Состояние = СостояниеФоновогоЗадания.Завершено Тогда + Результат.Успех = Истина; + Иначе + Результат.Успех = Ложь; + Результат.Ошибка = Задание.ИнформацияОбОшибке; + КонецЕсли; + КонецЕсли; + + Возврат Результат; +КонецФункции + +#КонецОбласти + #Область СлужебныеПроцедурыИФункции Функция НайтиЗаданиеПоИдентификатору(Знач ИдентификаторЗадания) @@ -282,9 +337,7 @@ Исключение ЗаписьЖурналаРегистрации(НСтр("ru = 'Безопасное выполнение метода обработки'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), УровеньЖурналаРегистрации.Ошибка, , , ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); - ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru='Имя метода ""%1"" не соответствует требованиям образования имен переменных.'"), - ИмяМетода); + ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru='Имя метода ""%1"" не соответствует требованиям образования имен переменных.'"), ИмяМетода); КонецПопытки; ПараметрыВыполнения = Параметры.ПараметрыВыполнения; diff --git a/SSL/src/CommonModules/ДлительныеОперацииКлиент/Module.bsl b/SSL/src/CommonModules/ДлительныеОперацииКлиент/Module.bsl index 29e50d310..55eed629c 100644 --- a/SSL/src/CommonModules/ДлительныеОперацииКлиент/Module.bsl +++ b/SSL/src/CommonModules/ДлительныеОперацииКлиент/Module.bsl @@ -14,8 +14,11 @@ // Процедура ИнициализироватьПараметрыОбработчикаОжидания(ПараметрыОбработчикаОжидания) Экспорт - ПараметрыОбработчикаОжидания = Новый Структура( - "МинимальныйИнтервал,МаксимальныйИнтервал,ТекущийИнтервал,КоэффициентУвеличенияИнтервала", 1, 15, 1, 1.4); + ПараметрыОбработчикаОжидания = Новый Структура; + ПараметрыОбработчикаОжидания.Вставить("МинимальныйИнтервал", 1); + ПараметрыОбработчикаОжидания.Вставить("МаксимальныйИнтервал", 15); + ПараметрыОбработчикаОжидания.Вставить("ТекущийИнтервал", 1); + ПараметрыОбработчикаОжидания.Вставить("КоэффициентУвеличенияИнтервала", 1.4); КонецПроцедуры diff --git a/SSL/src/CommonModules/ДополнительныеОтчетыИОбработки/Module.bsl b/SSL/src/CommonModules/ДополнительныеОтчетыИОбработки/Module.bsl index 3de7dd111..d0e2b385e 100644 --- a/SSL/src/CommonModules/ДополнительныеОтчетыИОбработки/Module.bsl +++ b/SSL/src/CommonModules/ДополнительныеОтчетыИОбработки/Module.bsl @@ -217,9 +217,10 @@ Если ВнешняяОбработкаОбъект = Неопределено Тогда ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Внешняя обработка ""%1"" (тип ""%2"") не обслуживается подсистемой ""Дополнительные отчеты и обработки""'"), + НСтр("ru = 'Внешняя обработка ""%1"" (тип ""%2"") не обслуживается подсистемой ""%3""'"), Строка(Ссылка), - Строка(ТипЗнч(Ссылка))); + Строка(ТипЗнч(Ссылка)), + ДополнительныеОтчетыИОбработкиКлиентСервер.НаименованиеПодсистемы(Истина)); КонецЕсли; ВнешняяОбработкаОбъект.Печать( @@ -337,6 +338,7 @@ ТаблицаКоманд.Колонки.Добавить("ПоказыватьОповещение", РеквизитыТабличнойЧасти.ПоказыватьОповещение.Тип); ТаблицаКоманд.Колонки.Добавить("Модификатор", РеквизитыТабличнойЧасти.Модификатор.Тип); ТаблицаКоманд.Колонки.Добавить("Скрыть", РеквизитыТабличнойЧасти.Скрыть.Тип); + ТаблицаКоманд.Колонки.Добавить("ЗаменяемыеКоманды", РеквизитыТабличнойЧасти.ЗаменяемыеКоманды.Тип); ПараметрыРегистрации.Вставить("Команды", ТаблицаКоманд); ПараметрыРегистрации.Вставить("Разрешения", Новый Массив); @@ -349,7 +351,7 @@ // Параметры: // Форма - УправляемаяФорма - Форма, из которой вызвана команда. // ИмяЭлемента - Строка - Имя команды формы, которая была нажата. -// РезультатВыполнения - Структура - См. СтандартныеПодсистемыКлиентСервер.НовыйРезультатВыполнения(). +// РезультатВыполнения - Структура - См. СтандартныеПодсистемыКлиент.ПоказатьРезультатВыполнения(). // // Описание: // Предназначена для вызова кодом этой подсистемы из формы элемента назначаемого объекта (например, справочника или @@ -383,7 +385,7 @@ // * ОбъектыНазначения - Массив - Ссылки объектов, для которых выполняется обработка. Обязательный для // назначаемых обработок. // * РезультатВыполнения - Структура - Необязательный. Дополняет возвращаемое значение. -// См. СтандартныеПодсистемыКлиентСервер.НовыйРезультатВыполнения(). +// См. СтандартныеПодсистемыКлиент.ПоказатьРезультатВыполнения(). // АдресРезультата - Строка - Необязательный. Адрес временного хранилища по которому будет размещен результат // выполнения. // @@ -422,7 +424,7 @@ // Форма - УправляемаяФорма - Форма, в которую необходимо вернуть результат. // // Возвращаемое значение: -// РезультатВыполнения - Структура - См. СтандартныеПодсистемыКлиентСервер.НовыйРезультатВыполнения(). +// РезультатВыполнения - Структура - См. СтандартныеПодсистемыКлиент.ПоказатьРезультатВыполнения(). // // Важно: // Проверка функциональной опции "ИспользоватьДополнительныеОтчетыИОбработки" @@ -710,7 +712,19 @@ Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ТекущиеДела") Тогда СерверныеОбработчики["СтандартныеПодсистемы.ТекущиеДела\ПриЗаполненииСпискаТекущихДел"].Добавить( "ДополнительныеОтчетыИОбработки"); + КонецЕсли; + + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.УправлениеДоступом") Тогда + СерверныеОбработчики["СтандартныеПодсистемы.УправлениеДоступом\ПриЗаполненииВидовДоступа"].Добавить( + "ДополнительныеОтчетыИОбработки"); + + СерверныеОбработчики["СтандартныеПодсистемы.УправлениеДоступом\ПриЗаполненииИспользованияВидаДоступа"].Добавить( + "ДополнительныеОтчетыИОбработки"); + + СерверныеОбработчики["СтандартныеПодсистемы.УправлениеДоступом\ПриЗаполненииВидовОграниченийПравОбъектовМетаданных"].Добавить( + "ДополнительныеОтчетыИОбработки"); КонецЕсли; + КонецПроцедуры @@ -796,9 +810,9 @@ КонецЕсли; // Есть права на данные справочника. - МодульТекущиеДелаСлужебный = ОбщегоНазначения.ОбщийМодуль("ТекущиеДелаСлужебный"); + МодульТекущиеДелаСервер = ОбщегоНазначения.ОбщийМодуль("ТекущиеДелаСервер"); Если Не ПравоДоступа("Редактирование", Метаданные.Справочники.ДополнительныеОтчетыИОбработки) - Или МодульТекущиеДелаСлужебный.ДелоОтключено("ДополнительныеОтчетыИОбработки") Тогда + Или МодульТекущиеДелаСервер.ДелоОтключено("ДополнительныеОтчетыИОбработки") Тогда Возврат; КонецЕсли; @@ -813,7 +827,7 @@ ВывестиДело = Истина; ПровереноНаВерсию = ХранилищеОбщихНастроек.Загрузить("ТекущиеДела", "ДополнительныеОтчетыИОбработки"); Если ПровереноНаВерсию <> Неопределено Тогда - ВерсияМассив = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(Метаданные.Версия, "."); + ВерсияМассив = СтрРазделить(Метаданные.Версия, ".", Истина); ТекущаяВерсия = ВерсияМассив[0] + ВерсияМассив[1] + ВерсияМассив[2]; Если ПровереноНаВерсию = ТекущаяВерсия Тогда ВывестиДело = Ложь; // Дополнительные отчеты и обработки проверены на текущей версии. @@ -853,6 +867,99 @@ КонецПроцедуры +// Заполняет виды доступа, используемые в ограничениях прав доступа. +// Виды доступа Пользователи и ВнешниеПользователи уже заполнены. +// Их можно удалить, если они не требуются для ограничения прав доступа. +// +// Параметры: +// ВидыДоступа - ТаблицаЗначений - с колонками: +// * Имя - Строка - имя используемое в описании поставляемых +// профилей групп доступа и текстах ОДД. +// * Представление - Строка - представляет вид доступа в профилях и группах доступа. +// * ТипЗначений - Тип - тип ссылки значений доступа. +// Например, Тип("СправочникСсылка.Номенклатура"). +// * ТипГруппЗначений - Тип - тип ссылки групп значений доступа. +// Например, Тип("СправочникСсылка.ГруппыДоступаНоменклатуры"). +// * НесколькоГруппЗначений - Булево - Истина указывает, что для значения доступа (Номенклатуры), можно +// выбрать несколько групп значений (Групп доступа номенклатуры). +// +Процедура ПриЗаполненииВидовДоступа(ВидыДоступа) Экспорт + + ВидДоступа = ВидыДоступа.Добавить(); + ВидДоступа.Имя = "ДополнительныеОтчетыИОбработки"; + ВидДоступа.Представление = НСтр("ru = 'Дополнительные отчеты и обработки'"); + ВидДоступа.ТипЗначений = Тип("СправочникСсылка.ДополнительныеОтчетыИОбработки"); + +КонецПроцедуры + +// Заполняет использование видов доступа в зависимости от функциональных опций конфигурации, +// например, ИспользоватьГруппыДоступаНоменклатуры. +// +// Параметры: +// ВидДоступа - Строка - имя вида доступа заданное в процедуре ПриЗаполненииВидовДоступа. +// Использование - Булево - начальное значение Истина. +// +Процедура ПриЗаполненииИспользованияВидаДоступа(ИмяВидаДоступа, Использование) Экспорт + + УстановитьПривилегированныйРежим(Истина); + + Если ИмяВидаДоступа = "ДополнительныеОтчетыИОбработки" Тогда + Использование = Константы.ИспользоватьДополнительныеОтчетыИОбработки.Получить(); + КонецЕсли; + +КонецПроцедуры + +// Заполняет состав видов доступа, используемых при ограничении прав объектов метаданных. +// Если состав видов доступа не заполнен, отчет "Права доступа" покажет некорректные сведения. +// +// Обязательно требуется заполнить только виды доступа, используемые +// в шаблонах ограничения доступа явно, а виды доступа, используемые +// в наборах значений доступа могут быть получены из текущего состояния +// регистра сведений НаборыЗначенийДоступа. +// +// Для автоматической подготовки содержимого процедуры следует +// воспользоваться инструментами разработчика для подсистемы. +// Управление доступом. +// +// Параметры: +// Описание - Строка, многострочная строка формата <Таблица>.<Право>.<ВидДоступа>[.Таблица объекта]. +// Например, Документ.ПриходнаяНакладная.Чтение.Организации +// Документ.ПриходнаяНакладная.Чтение.Контрагенты +// Документ.ПриходнаяНакладная.Изменение.Организации +// Документ.ПриходнаяНакладная.Изменение.Контрагенты +// Документ.ЭлектронныеПисьма.Чтение.Объект.Документ.ЭлектронныеПисьма +// Документ.ЭлектронныеПисьма.Изменение.Объект.Документ.ЭлектронныеПисьма +// Документ.Файлы.Чтение.Объект.Справочник.ПапкиФайлов +// Документ.Файлы.Чтение.Объект.Документ.ЭлектронноеПисьмо +// Документ.Файлы.Изменение.Объект.Справочник.ПапкиФайлов +// Документ.Файлы.Изменение.Объект.Документ.ЭлектронноеПисьмо +// Вид доступа Объект предопределен, как литерал. Этот вид доступа используется в +// шаблонах ограничений доступа, как "ссылка" на другой объект, по которому +// ограничивается текущий объект таблицы. +// Когда вид доступа "Объект" задан, также требуется задать типы таблиц, +// которые используются для этого вида доступа. Т.е. перечислить типы, +// которые соответствуют полю, использованному в шаблоне ограничения доступа +// в паре с видом доступа "Объект". При перечислении типов по виду доступа "Объект" +// нужно перечислить только те типы поля, которые есть у поля. +// РегистрыСведений.НаборыЗначенийДоступа.Объект, остальные типы лишние. +// +Процедура ПриЗаполненииВидовОграниченийПравОбъектовМетаданных(Описание) Экспорт + + Если НЕ ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.УправлениеДоступом") Тогда + Возврат; + КонецЕсли; + + МодульУправлениеДоступомСлужебный = ОбщегоНазначения.ОбщийМодуль("УправлениеДоступомСлужебный"); + Если МодульУправлениеДоступомСлужебный.ВидДоступаСуществует("ДополнительныеОтчетыИОбработки") Тогда + + Описание = Описание + " + | + |Справочник.ДополнительныеОтчетыИОбработки.Чтение.ДополнительныеОтчетыИОбработки + |"; + КонецЕсли; + +КонецПроцедуры + //////////////////////////////////////////////////////////////////////////////// // Обработчики условных вызовов. @@ -873,8 +980,8 @@ | Справочник.ДополнительныеОтчетыИОбработки КАК Таблица |ГДЕ | Таблица.ИмяОбъекта = &ИмяОбъекта - | И Таблица.ИспользуетХранилищеВариантов = ИСТИНА | И Таблица.ПометкаУдаления = ЛОЖЬ + | И Таблица.ИспользуетХранилищеВариантов = ИСТИНА | И (Таблица.Вид = &ВидДополнительныйОтчет | ИЛИ Таблица.Вид = &ВидОтчет) | И Таблица.Публикация = &ПубликацияИспользуется"; @@ -884,7 +991,7 @@ Запрос.УстановитьПараметр("ВидОтчет", Перечисления.ВидыДополнительныхОтчетовИОбработок.Отчет); Запрос.УстановитьПараметр("ВидДополнительныйОтчет", Перечисления.ВидыДополнительныхОтчетовИОбработок.ДополнительныйОтчет); Запрос.УстановитьПараметр("ПубликацияИспользуется", Перечисления.ВариантыПубликацииДополнительныхОтчетовИОбработок.Используется); - Если ОтчетИнформация.ПодключеныВсеОтчеты Тогда + Если ОтчетИнформация.ПоУмолчаниюВсеПодключеныКХранилищу Тогда ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "И Таблица.ИспользуетХранилищеВариантов = ИСТИНА", ""); КонецЕсли; Запрос.Текст = ТекстЗапроса; @@ -895,7 +1002,6 @@ Если Выборка.Следующий() Тогда ОтчетИнформация.Отчет = Выборка.Ссылка; - ОтчетИнформация.Вставить("ОтчетДополнительный"); КонецЕсли; КонецПроцедуры @@ -956,13 +1062,13 @@ // ВариантыОтчетов.ПодключитьОтчетОбъект(). // РассылкаОтчетов.ИнициализироватьОтчет(). // -Процедура ПриПодключенииДопОтчета(Ссылка, ПараметрыОтчета, Результат) Экспорт +Процедура ПриПодключенииДопОтчета(Ссылка, ПараметрыОтчета, Результат, ПолучатьМетаданные) Экспорт Если Не ПолучитьФункциональнуюОпцию("ИспользоватьДополнительныеОтчетыИОбработки") Тогда - ПараметрыОтчета.Ошибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + ПараметрыОтчета.ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Элемент ""%1"" не подключен, потому что подсистема ""%2"" отключена в настройках программы. |Для включения подсистемы обратитесь к администратору программы.'"), "'"+ Строка(Ссылка) +"'", - ДополнительныеОтчетыИОбработкиКлиентСервер.НаименованиеПодсистемы("ru")); + ДополнительныеОтчетыИОбработкиКлиентСервер.НаименованиеПодсистемы(Истина)); Возврат; КонецЕсли; @@ -973,20 +1079,21 @@ Попытка ПараметрыОтчета.Имя = ПодключитьВнешнююОбработку(Ссылка); ПараметрыОтчета.Объект = ВнешниеОтчеты.Создать(ПараметрыОтчета.Имя); - ПараметрыОтчета.Метаданные = ПараметрыОтчета.Объект.Метаданные(); + Если ПолучатьМетаданные Тогда + ПараметрыОтчета.Метаданные = ПараметрыОтчета.Объект.Метаданные(); + КонецЕсли; Результат = Истина; Исключение - ПараметрыОтчета.Ошибки = - СтрЗаменить(НСтр("ru = 'При подключении дополнительного отчета ""%1"" возникла ошибка:'"), "%1", Строка(Ссылка)) - + Символы.ПС - + ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); + ПараметрыОтчета.ТекстОшибки = + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'При подключении дополнительного отчета ""%1"" возникла ошибка:'"), Строка(Ссылка)) + + Символы.ПС + ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); Результат = Ложь; КонецПопытки; Иначе - ПараметрыОтчета.Ошибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Элемент %1 не является дополнительным отчетом'"), + ПараметрыОтчета.ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Элемент %1 не является дополнительным отчетом'"), "'"+ Строка(Ссылка) +"'"); Результат = Ложь; @@ -995,16 +1102,73 @@ КонецПроцедуры +// Подключает отчет подсистемы "Дополнительные отчеты и обработки". +// Обработка исключений производится управляющим кодом. +// +// Параметры: +// Контекст - Структура - Набор параметров, получаемый в процессе проверки и подключения отчета. +// См. ВариантыОтчетов.ПриПодключенииОтчета(). +// +// Места использования: +// ВариантыОтчетов.ПриПодключенииОтчета(). +// +Процедура ПриПодключенииОтчета(Контекст) Экспорт + Ссылка = ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(Контекст, "Отчет"); + Если ТипЗнч(Ссылка) <> Тип("СправочникСсылка.ДополнительныеОтчетыИОбработки") Тогда + Текст = НСтр("ru = 'Не указан отчет'"); + Подробно = НСтр("ru = 'В процедуру ""ДополнительныеОтчетыИОбработки.ПриПодключенииОтчета"" не передан отчет.'"); + СтандартныеПодсистемыКлиентСервер.ВывестиПредупреждение(Контекст, Текст, Подробно); + Возврат; + КонецЕсли; + + Если Не ПолучитьФункциональнуюОпцию("ИспользоватьДополнительныеОтчетыИОбработки") Тогда + Текст = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Отчет ""%1"" не подключен'"), Строка(Ссылка)); + Подробно = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Подсистема ""%2"" отключена в настройках программы. + |Для включения подсистемы обратитесь к администратору программы.'"), + ДополнительныеОтчетыИОбработкиКлиентСервер.НаименованиеПодсистемы(Истина)); + СтандартныеПодсистемыКлиентСервер.ВывестиПредупреждение(Контекст, Текст, Подробно); + Возврат; + КонецЕсли; + + Вид = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(Ссылка, "Вид"); + Если Вид = Перечисления.ВидыДополнительныхОтчетовИОбработок.Отчет + Или Вид = Перечисления.ВидыДополнительныхОтчетовИОбработок.ДополнительныйОтчет Тогда + + ИнформацияОбОшибке = Неопределено; + Попытка + Контекст.ИмяОтчета = ПодключитьВнешнююОбработку(Ссылка); + Контекст.Подключен = Истина; + Исключение + ИнформацияОбОшибке = ИнформацияОбОшибке(); + КонецПопытки; + + Если ИнформацияОбОшибке <> Неопределено Тогда + Текст = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Отчет ""%1"" не подключен'"), Строка(Ссылка)); + Подробно = ПодробноеПредставлениеОшибки(ИнформацияОбОшибке); + СтандартныеПодсистемыКлиентСервер.ВывестиПредупреждение(Контекст, Текст, Подробно); + КонецЕсли; + + Иначе + + СтандартныеПодсистемыКлиентСервер.ВывестиПредупреждение(Контекст, + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Объект ""%1"" не является дополнительным отчетом'"), Строка(Ссылка))); + + КонецЕсли; + +КонецПроцедуры + + // Дополняет список команд печати внешними печатными формами. // // Параметры: // КомандыПечати - ТаблицаЗначений - См. УправлениеПечатью.СоздатьКоллекциюКомандПечати(). -// ИмяФормы - Строка - Полное имя формы, для которой необходимо получить список команд печати. +// ИмяОбъекта - Строка - Полное имя объекта метаданных, для которого необходимо получить список +// команд печати. // // Места использования: // УправлениеПечатью.КомандыПечатиФормы(). // -Процедура ПриПолученииКомандПечати(КомандыПечати, ИмяФормы) Экспорт +Процедура ПриПолученииКомандПечати(КомандыПечати, ИмяОбъекта) Экспорт Если Не ПолучитьФункциональнуюОпцию("ИспользоватьДополнительныеОтчетыИОбработки") Тогда Возврат; КонецЕсли; @@ -1012,13 +1176,7 @@ Возврат; КонецЕсли; - ФормаМетаданные = Метаданные.НайтиПоПолномуИмени(ИмяФормы); - Если ФормаМетаданные = Неопределено Тогда - Возврат; - КонецЕсли; - - ПолноеИмяОбъектаМетаданных = ФормаМетаданные.Родитель().ПолноеИмя(); - Запрос = НовыйЗапросПоДоступнымКомандам(Перечисления.ВидыДополнительныхОтчетовИОбработок.ПечатнаяФорма, ПолноеИмяОбъектаМетаданных); + Запрос = НовыйЗапросПоДоступнымКомандам(Перечисления.ВидыДополнительныхОтчетовИОбработок.ПечатнаяФорма, ИмяОбъекта); ТаблицаКоманд = Запрос.Выполнить().Выгрузить(); Если ТаблицаКоманд.Количество() = 0 Тогда @@ -1065,7 +1223,7 @@ ТаблицаКоманд = Запрос.Выполнить().Выгрузить(); Для Каждого Команда Из ТаблицаКоманд Цикл - Если Найти(Команда.Идентификатор, ",") = 0 Тогда // кроме "комплектов" + Если СтрНайти(Команда.Идентификатор, ",") = 0 Тогда // кроме "комплектов" ВнешниеПечатныеФормы.Добавить(Команда.Идентификатор, Команда.Представление); КонецЕсли; КонецЦикла; @@ -1096,25 +1254,17 @@ КонецПроцедуры -// Получает настройки дополнительных отчетов и обработок для переданного пользователя. -// -// Параметры: -// ПользовательСсылка - СправочникСсылка.Пользователи - Пользователь, для которого требуется получить настройки. -// Настройки - Структура - Прочие пользовательские настройки. -// * НазваниеНастройки - Строка - название, которое будет отображаться в дереве настроек обработки. -// * КартинкаНастройки - Картинка - картинка, которая будет отображаться в дереве обработки. -// * СписокНастроек - СписокЗначений - список полученных настроек. -// -// Места использования: -// ПользователиСлужебный.ПриПолученииПрочихПользовательскихНастроек(). -// -Процедура ПолучитьНастройкиДополнительныхОтчетовИОбработок(ПользовательСсылка, Настройки) Экспорт +// См. одноименную процедуру в общем модуле ПользователиПереопределяемый. +Процедура ПриПолученииПрочихНастроек(СведенияОПользователе, Настройки) Экспорт + + // Получает настройки дополнительных отчетов и обработок для переданного пользователя. + Если Не ПолучитьФункциональнуюОпцию("ИспользоватьДополнительныеОтчетыИОбработки") Тогда Возврат; КонецЕсли; // Название строки настроек, отображаемое в дереве настроек обработки. - НазваниеНастройки = НСтр("ru='Настройки быстрого доступа к дополнительным отчетам и обработкам'"); + НазваниеНастройки = НСтр("ru = 'Настройки быстрого доступа к дополнительным отчетам и обработкам'"); // Картинка строки настроек КартинкаНастройки = ""; @@ -1131,40 +1281,39 @@ |ГДЕ | Пользователь = &Пользователь"; - Запрос.Параметры.Вставить("Пользователь", ПользовательСсылка); + Запрос.Параметры.Вставить("Пользователь", СведенияОПользователе.ПользовательСсылка); РезультатЗапроса = Запрос.Выполнить().Выгрузить(); - Настройки = Новый Структура; - Настройки.Вставить("НазваниеНастройки", НазваниеНастройки); - Настройки.Вставить("КартинкаНастройки", КартинкаНастройки); - Настройки.Вставить("СписокНастроек", РезультатЗапроса); + НастройкаБыстрогоДоступа = Новый Структура; + НастройкаБыстрогоДоступа.Вставить("НазваниеНастройки", НазваниеНастройки); + НастройкаБыстрогоДоступа.Вставить("КартинкаНастройки", КартинкаНастройки); + НастройкаБыстрогоДоступа.Вставить("СписокНастроек", РезультатЗапроса); + + Настройки.Вставить("НастройкаБыстрогоДоступа", НастройкаБыстрогоДоступа); КонецПроцедуры -// Сохраняет команды дополнительных отчетов и обработок указанным пользователям. -// -// Параметры: -// Настройки - СписокЗначений - Список ключей сохраняемых настроек. -// ПользователиПолучатели - Массив из СправочникСсылка.Пользователи - -// Пользователи, которым нужно скопировать настройки. -// -// Места использования: -// ПользователиСлужебный.ПриСохраненииПрочихПользовательскихНастроек(). -// -Процедура ДобавитьКомандыВСписокБыстрогоДоступа(Настройки, ПользовательПриемник) Экспорт +// См. одноименную процедуру в общем модуле ПользователиПереопределяемый. +Процедура ПриСохраненииПрочихНастроек(СведенияОПользователе, Настройки) Экспорт + + // Сохраняет команды дополнительных отчетов и обработок указанным пользователям. Если Не ПолучитьФункциональнуюОпцию("ИспользоватьДополнительныеОтчетыИОбработки") Тогда Возврат; КонецЕсли; - Для Каждого ЭлементСтрока Из Настройки Цикл + Если Настройки.ИдентификаторНастройки <> "НастройкаБыстрогоДоступа" Тогда + Возврат; + КонецЕсли; + + Для Каждого ЭлементСтрока Из Настройки.ЗначениеНастройки Цикл Запись = РегистрыСведений.ПользовательскиеНастройкиДоступаКОбработкам.СоздатьМенеджерЗаписи(); Запись.ДополнительныйОтчетИлиОбработка = ЭлементСтрока.Значение; Запись.ИдентификаторКоманды = ЭлементСтрока.Представление; - Запись.Пользователь = ПользовательПриемник; + Запись.Пользователь = СведенияОПользователе.ПользовательСсылка; Запись.Доступно = Истина; Запись.Записать(Истина); @@ -1173,28 +1322,26 @@ КонецПроцедуры -// Очищает команды дополнительных отчетов и обработок у указанного пользователя. -// -// Параметры: -// СписокКлючей - СписокЗначений - Список ключей очищаемых настроек. -// ОчищаемыйПользователь - СправочникСсылка.Пользователи - -// Пользователь, для которого нужно очистить настройки. -// -// Места использования: -// ПользователиСлужебный.ПриУдаленииПрочихПользовательскихНастроек(). -// -Процедура УдалитьКомандыИзСпискаБыстрогоДоступа(СписокКлючей, ОчищаемыйПользователь) Экспорт +// См. одноименную процедуру в общем модуле ПользователиПереопределяемый. +Процедура ПриУдаленииПрочихНастроек(СведенияОПользователе, Настройки) Экспорт + + // Очищает команды дополнительных отчетов и обработок у указанного пользователя. + Если Не ПолучитьФункциональнуюОпцию("ИспользоватьДополнительныеОтчетыИОбработки") Тогда Возврат; КонецЕсли; - Для Каждого ЭлементСтрока Из СписокКлючей Цикл + Если Настройки.ИдентификаторНастройки <> "НастройкаБыстрогоДоступа" Тогда + Возврат; + КонецЕсли; + + Для Каждого ЭлементСтрока Из Настройки.ЗначениеНастройки Цикл Запись = РегистрыСведений.ПользовательскиеНастройкиДоступаКОбработкам.СоздатьМенеджерЗаписи(); Запись.ДополнительныйОтчетИлиОбработка = ЭлементСтрока.Значение; Запись.ИдентификаторКоманды = ЭлементСтрока.Представление; - Запись.Пользователь = ОчищаемыйПользователь; + Запись.Пользователь = СведенияОПользователе.ПользовательСсылка; Запись.Прочитать(); @@ -1250,6 +1397,98 @@ Объекты.Вставить(Метаданные.Справочники.ДополнительныеОтчетыИОбработки.ПолноеИмя(), "РеквизитыРедактируемыеВГрупповойОбработке"); КонецПроцедуры +// Определяет список объектов метаданных, к которым может быть применена назначаемая обработка переданного вида. +// +// Параметры: +// Вид - ПеречислениеСсылка.ВидыДополнительныхОтчетовИОбработок - Вид внешней обработки. +// +// Возвращаемое значение: +// ТаблицаЗначений - Описание объектов метаданных. +// * Метаданные - ОбъектМетаданных - Объект метаданных, подключенный к данному виду. +// * ПолноеИмя - Строка - Полное имя объекта метаданных, например "Справочник.Валюты". +// * Ссылка - СправочникСсылка.ИдентификаторыОбъектовМетаданных - Ссылка объекта метаданных. +// * Вид - Строка - Вид объекта метаданных. +// * Представление - Строка - Представление объекта метаданных. +// * ПолноеПредставление - Строка - Представление имени и вида объекта метаданных. +// Неопределено - Если передан некорректный Вид. +// +Функция ПодключенныеОбъектыМетаданных(Вид) Экспорт + Результат = Новый ТаблицаЗначений; + Результат.Колонки.Добавить("Метаданные"); + Результат.Колонки.Добавить("ПолноеИмя", Новый ОписаниеТипов("Строка")); + Результат.Колонки.Добавить("Ссылка", Новый ОписаниеТипов("СправочникСсылка.ИдентификаторыОбъектовМетаданных")); + Результат.Колонки.Добавить("Вид", Новый ОписаниеТипов("Строка")); + Результат.Колонки.Добавить("Представление", Новый ОписаниеТипов("Строка")); + Результат.Колонки.Добавить("ПолноеПредставление", Новый ОписаниеТипов("Строка")); + + МассивТиповИлиМетаданных = Новый Массив; + + Если Вид = Перечисления.ВидыДополнительныхОтчетовИОбработок.ЗаполнениеОбъекта Тогда + + МассивТиповИлиМетаданных = Метаданные.ОбщиеКоманды.ЗаполнениеОбъекта.ТипПараметраКоманды.Типы(); + + ИначеЕсли Вид = Перечисления.ВидыДополнительныхОтчетовИОбработок.Отчет Тогда + + МассивТиповИлиМетаданных = Метаданные.ОбщиеКоманды.ОтчетыОбъекта.ТипПараметраКоманды.Типы(); + + ИначеЕсли Вид = Перечисления.ВидыДополнительныхОтчетовИОбработок.ПечатнаяФорма Тогда + + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.Печать") Тогда + МодульУправлениеПечатью = ОбщегоНазначения.ОбщийМодуль("УправлениеПечатью"); + МассивТиповИлиМетаданных = МодульУправлениеПечатью.ИсточникиКомандПечати() + Иначе + Возврат Результат; + КонецЕсли; + + ИначеЕсли Вид = Перечисления.ВидыДополнительныхОтчетовИОбработок.СозданиеСвязанныхОбъектов Тогда + + МассивТиповИлиМетаданных = Метаданные.ОбщиеКоманды.СозданиеСвязанныхОбъектов.ТипПараметраКоманды.Типы(); + + ИначеЕсли Вид = Перечисления.ВидыДополнительныхОтчетовИОбработок.ДополнительнаяОбработка Тогда + + МассивТиповИлиМетаданных = РазделыДополнительныхОбработок(); + + ИначеЕсли Вид = Перечисления.ВидыДополнительныхОтчетовИОбработок.ДополнительныйОтчет Тогда + + МассивТиповИлиМетаданных = РазделыДополнительныхОтчетов(); + + Иначе + + Возврат Неопределено; + + КонецЕсли; + + Для Каждого ТипИлиМетаданные Из МассивТиповИлиМетаданных Цикл + Если ТипЗнч(ТипИлиМетаданные) = Тип("Тип") Тогда + ОбъектМетаданных = Метаданные.НайтиПоТипу(ТипИлиМетаданные); + Если ОбъектМетаданных = Неопределено Тогда + Продолжить; + КонецЕсли; + Иначе + ОбъектМетаданных = ТипИлиМетаданные; + КонецЕсли; + + СтрокаТаблицы = Результат.Добавить(); + СтрокаТаблицы.Метаданные = ОбъектМетаданных; + + Если ОбъектМетаданных = ДополнительныеОтчетыИОбработкиКлиентСервер.ИдентификаторРабочегоСтола() Тогда + СтрокаТаблицы.ПолноеИмя = ДополнительныеОтчетыИОбработкиКлиентСервер.ИдентификаторРабочегоСтола(); + СтрокаТаблицы.Ссылка = Справочники.ИдентификаторыОбъектовМетаданных.ПустаяСсылка(); + СтрокаТаблицы.Вид = "Подсистема"; + СтрокаТаблицы.Представление = НСтр("ru = 'Рабочий стол'"); + Иначе + СтрокаТаблицы.ПолноеИмя = ОбъектМетаданных.ПолноеИмя(); + СтрокаТаблицы.Ссылка = ОбщегоНазначения.ИдентификаторОбъектаМетаданных(ОбъектМетаданных); + СтрокаТаблицы.Вид = Лев(СтрокаТаблицы.ПолноеИмя, СтрНайти(СтрокаТаблицы.ПолноеИмя, ".") - 1); + СтрокаТаблицы.Представление = ОбъектМетаданных.Представление(); + КонецЕсли; + + СтрокаТаблицы.ПолноеПредставление = СтрокаТаблицы.Представление + " (" + СтрокаТаблицы.Вид + ")"; + КонецЦикла; + + Возврат Результат; +КонецФункции + //////////////////////////////////////////////////////////////////////////////// // Обработчики подписок на события. @@ -1617,7 +1856,7 @@ // Процедура ВыполнитьОбработкуПоРегламентномуЗаданию(ВнешняяОбработка, ИдентификаторКоманды) Экспорт - ОбщегоНазначения.ПриНачалеВыполненияРегламентногоЗадания(); + ОбщегоНазначения.ПриНачалеВыполненияРегламентногоЗадания(Метаданные.РегламентныеЗадания.ЗапускДополнительныхОбработок); // Запись журнала регистрации ЗаписатьИнформацию(ВнешняяОбработка, НСтр("ru = 'Команда %1: Запуск.'"), ИдентификаторКоманды); @@ -1679,7 +1918,7 @@ // Запросы принципиально отличаются для глобальных обработок и назначаемых. Если ЭтоГлобальныеОбработки Тогда ТекстЗапроса = - "ВЫБРАТЬ РАЗЛИЧНЫЕ + "ВЫБРАТЬ РАЗРЕШЕННЫЕ РАЗЛИЧНЫЕ | БыстрыйДоступ.ДополнительныйОтчетИлиОбработка КАК Ссылка, | БыстрыйДоступ.ИдентификаторКоманды |ПОМЕСТИТЬ втБыстрыйДоступ @@ -1691,7 +1930,7 @@ |; | |//////////////////////////////////////////////////////////////////////////////// - |ВЫБРАТЬ + |ВЫБРАТЬ РАЗРЕШЕННЫЕ | ТаблицаБыстрыйДоступ.Ссылка, | ТаблицаБыстрыйДоступ.ИдентификаторКоманды |ПОМЕСТИТЬ втСсылкиИКоманды @@ -1708,9 +1947,10 @@ |; | |//////////////////////////////////////////////////////////////////////////////// - |ВЫБРАТЬ + |ВЫБРАТЬ РАЗРЕШЕННЫЕ | ТаблицаКоманды.Ссылка, | ТаблицаКоманды.Идентификатор, + | ТаблицаКоманды.ЗаменяемыеКоманды, | ТаблицаКоманды.ВариантЗапуска, | ТаблицаКоманды.Представление КАК Представление, | ТаблицаКоманды.ПоказыватьОповещение, @@ -1730,7 +1970,7 @@ Иначе ТекстЗапроса = - "ВЫБРАТЬ РАЗЛИЧНЫЕ + "ВЫБРАТЬ РАЗРЕШЕННЫЕ РАЗЛИЧНЫЕ | ТаблицаНазначение.Ссылка |ПОМЕСТИТЬ втСсылки |ИЗ @@ -1746,9 +1986,10 @@ |; | |//////////////////////////////////////////////////////////////////////////////// - |ВЫБРАТЬ + |ВЫБРАТЬ РАЗРЕШЕННЫЕ | ТаблицаКоманды.Ссылка, | ТаблицаКоманды.Идентификатор, + | ТаблицаКоманды.ЗаменяемыеКоманды, | ТаблицаКоманды.ВариантЗапуска, | ТаблицаКоманды.Представление КАК Представление, | ТаблицаКоманды.ПоказыватьОповещение, @@ -1780,94 +2021,22 @@ Иначе Запрос.УстановитьПараметр("Публикация", Перечисления.ВариантыПубликацииДополнительныхОтчетовИОбработок.Используется); КонецЕсли; - Запрос.УстановитьПараметр("ТекущийПользователь", Пользователи.ТекущийПользователь()); + Запрос.УстановитьПараметр("ТекущийПользователь", ПользователиКлиентСервер.АвторизованныйПользователь()); Запрос.Текст = ТекстЗапроса; Возврат Запрос; КонецФункции -// Определяет список объектов метаданных, к которым может быть применена назначаемая обработка переданного вида. -// -// Параметры: -// Вид - ПеречислениеСсылка.ВидыДополнительныхОтчетовИОбработок - Вид внешней обработки. -// -// Возвращаемое значение: -// Неопределено - Если передан некорректный Вид. -// ТаблицаЗначений - Описание объектов метаданных. -// * ПолноеИмяОбъектаМетаданных - Строка - Полное имя объекта метаданных, например "Справочник.Валюты". -// * ОбъектНазначения - СправочникСсылка.ИдентификаторыОбъектовМетаданных - Ссылка объекта метаданных. -// * ВидОбъектаМетаданных - Строка - Вид объекта метаданных. -// * Представление - Строка - Представление объекта метаданных. -// * ПолноеПредставление - Строка - Представление имени и вида объекта метаданных. -// +// Устарела: Следует использовать ПодключенныеОбъектыМетаданных(). Функция НазначаемыеОбъектыМетаданныхПоВидуВнешнегоОбъекта(Вид) Экспорт - Назначение = Новый ТаблицаЗначений; - Назначение.Колонки.Добавить("ОбъектМетаданных"); - Назначение.Колонки.Добавить("ПолноеИмяОбъектаМетаданных", Новый ОписаниеТипов("Строка")); - Назначение.Колонки.Добавить("ОбъектНазначения", Новый ОписаниеТипов("СправочникСсылка.ИдентификаторыОбъектовМетаданных")); - Назначение.Колонки.Добавить("ВидОбъектаМетаданных", Новый ОписаниеТипов("Строка")); - Назначение.Колонки.Добавить("Представление", Новый ОписаниеТипов("Строка")); - Назначение.Колонки.Добавить("ПолноеПредставление", Новый ОписаниеТипов("Строка")); - - МассивТиповИлиМетаданных = Новый Массив; - - Если Вид = Перечисления.ВидыДополнительныхОтчетовИОбработок.ЗаполнениеОбъекта Тогда - - МассивТиповИлиМетаданных = Метаданные.ОбщиеКоманды.ЗаполнениеОбъекта.ТипПараметраКоманды.Типы(); - - ИначеЕсли Вид = Перечисления.ВидыДополнительныхОтчетовИОбработок.Отчет Тогда - - МассивТиповИлиМетаданных = Метаданные.ОбщиеКоманды.ОтчетыОбъекта.ТипПараметраКоманды.Типы(); - - ИначеЕсли Вид = Перечисления.ВидыДополнительныхОтчетовИОбработок.ПечатнаяФорма Тогда - - МассивТиповИлиМетаданных = Метаданные.ОбщиеКоманды.ДополнительныеПечатныеФормыОбъекта.ТипПараметраКоманды.Типы(); - - ИначеЕсли Вид = Перечисления.ВидыДополнительныхОтчетовИОбработок.СозданиеСвязанныхОбъектов Тогда - - МассивТиповИлиМетаданных = Метаданные.ОбщиеКоманды.СозданиеСвязанныхОбъектов.ТипПараметраКоманды.Типы(); - - ИначеЕсли Вид = Перечисления.ВидыДополнительныхОтчетовИОбработок.ДополнительнаяОбработка Тогда - - МассивТиповИлиМетаданных = РазделыДополнительныхОбработок(); - - ИначеЕсли Вид = Перечисления.ВидыДополнительныхОтчетовИОбработок.ДополнительныйОтчет Тогда - - МассивТиповИлиМетаданных = РазделыДополнительныхОтчетов(); - - Иначе - + Назначение = ПодключенныеОбъектыМетаданных(Вид); + Если Назначение = Неопределено Тогда Возврат Неопределено; - КонецЕсли; - - Для Каждого ТипИлиМетаданные Из МассивТиповИлиМетаданных Цикл - Если ТипЗнч(ТипИлиМетаданные) = Тип("Тип") Тогда - ОбъектМетаданных = Метаданные.НайтиПоТипу(ТипИлиМетаданные); - Если ОбъектМетаданных = Неопределено Тогда - Продолжить; - КонецЕсли; - Иначе - ОбъектМетаданных = ТипИлиМетаданные; - КонецЕсли; - - НовоеНазначение = Назначение.Добавить(); - - Если ОбъектМетаданных = ДополнительныеОтчетыИОбработкиКлиентСервер.ИдентификаторРабочегоСтола() Тогда - НовоеНазначение.ПолноеИмяОбъектаМетаданных = ДополнительныеОтчетыИОбработкиКлиентСервер.ИдентификаторРабочегоСтола(); - НовоеНазначение.ОбъектНазначения = Справочники.ИдентификаторыОбъектовМетаданных.ПустаяСсылка(); - НовоеНазначение.ВидОбъектаМетаданных = "Подсистема"; - НовоеНазначение.Представление = НСтр("ru = 'Рабочий стол'"); - Иначе - НовоеНазначение.ПолноеИмяОбъектаМетаданных = ОбъектМетаданных.ПолноеИмя(); - НовоеНазначение.ОбъектНазначения = ОбщегоНазначения.ИдентификаторОбъектаМетаданных(ОбъектМетаданных); - НовоеНазначение.ВидОбъектаМетаданных = Лев(НовоеНазначение.ПолноеИмяОбъектаМетаданных, Найти(НовоеНазначение.ПолноеИмяОбъектаМетаданных, ".") - 1); - НовоеНазначение.Представление = ОбъектМетаданных.Представление(); - КонецЕсли; - - НовоеНазначение.ПолноеПредставление = НовоеНазначение.Представление + " (" + НовоеНазначение.ВидОбъектаМетаданных + ")"; - КонецЦикла; - + Назначение.Колонки.Метаданные.Имя = "ОбъектМетаданных"; + Назначение.Колонки.ПолноеИмя.Имя = "ПолноеИмяОбъектаМетаданных"; + Назначение.Колонки.Ссылка.Имя = "ОбъектНазначения"; + Назначение.Колонки.Вид.Имя = "ВидОбъектаМетаданных"; Возврат Назначение; КонецФункции @@ -1959,9 +2128,7 @@ ПредставлениеРаздела = Метаданные.Подсистемы.Найти(Раздел).Представление(); КонецЕсли; - Возврат СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Раздел ""%1""'"), - ПредставлениеРаздела); + Возврат СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Раздел ""%1""'"), ПредставлениеРаздела); КонецФункции // Функция для добавления команд дополнительных обработок в список "своих". @@ -1972,7 +2139,7 @@ Запись.ДополнительныйОтчетИлиОбработка = ЭлементСтрока.Обработка; Запись.ИдентификаторКоманды = ЭлементСтрока.Идентификатор; - Запись.Пользователь = Пользователи.ТекущийПользователь(); + Запись.Пользователь = Пользователи.АвторизованныйПользователь(); Запись.Доступно = Истина; Запись.Записать(Истина); @@ -1989,7 +2156,7 @@ Запись.ДополнительныйОтчетИлиОбработка = ЭлементСтрока.Обработка; Запись.ИдентификаторКоманды = ЭлементСтрока.Идентификатор; - Запись.Пользователь = Пользователи.ТекущийПользователь(); + Запись.Пользователь = Пользователи.АвторизованныйПользователь(); Запись.Прочитать(); @@ -2195,17 +2362,16 @@ КонецПроцедуры // Запись события в журнал регистрации по дополнительному отчету или обработке. -Процедура ЗаписатьВЖурнал(Уровень, Ссылка, ТекстСообщения, Реквизит1, Реквизит2, Реквизит3) +Процедура ЗаписатьВЖурнал(Уровень, Ссылка, Текст, Параметр1, Параметр2, Параметр3) + Текст = СтрЗаменить(Текст, "%1", Параметр1); // Переход на СтрШаблон невозможен. + Текст = СтрЗаменить(Текст, "%2", Параметр2); + Текст = СтрЗаменить(Текст, "%3", Параметр3); ЗаписьЖурналаРегистрации( - ДополнительныеОтчетыИОбработкиКлиентСервер.НаименованиеПодсистемы(Неопределено), + ДополнительныеОтчетыИОбработкиКлиентСервер.НаименованиеПодсистемы(Ложь), Уровень, Метаданные.Справочники.ДополнительныеОтчетыИОбработки, Ссылка, - СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - ТекстСообщения, - Строка(Реквизит1), - Строка(Реквизит2), - Строка(Реквизит3))); + Текст); КонецПроцедуры //////////////////////////////////////////////////////////////////////////////// @@ -2215,7 +2381,7 @@ Процедура СформироватьПодменюКомандЗаполнения(Форма, Параметры) ТекстЗапроса = - "ВЫБРАТЬ РАЗЛИЧНЫЕ + "ВЫБРАТЬ РАЗРЕШЕННЫЕ РАЗЛИЧНЫЕ | ДополнительныеОтчетыИОбработкиНазначение.Ссылка |ПОМЕСТИТЬ втСсылки |ИЗ @@ -2229,7 +2395,7 @@ |; | |//////////////////////////////////////////////////////////////////////////////// - |ВЫБРАТЬ + |ВЫБРАТЬ РАЗРЕШЕННЫЕ | ДополнительныеОтчетыИОбработкиКоманды.Ссылка, | ДополнительныеОтчетыИОбработкиКоманды.Идентификатор, | ДополнительныеОтчетыИОбработкиКоманды.ВариантЗапуска, @@ -2510,15 +2676,15 @@ СведенияОВнешнемОбъекте.Свойство("ВерсияБСП") И ОбщегоНазначенияКлиентСервер.СравнитьВерсии(СведенияОВнешнемОбъекте.ВерсияБСП, "1.2.1.4") >= 0); - Если НЕ ПараметрыКоманды.Свойство("РезультатВыполнения") ИЛИ ТипЗнч(ПараметрыКоманды.РезультатВыполнения) <> Тип("Структура") Тогда - ПараметрыКоманды.Вставить("РезультатВыполнения", СтандартныеПодсистемыКлиентСервер.НовыйРезультатВыполнения()); + РезультатВыполнения = ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(ПараметрыКоманды, "РезультатВыполнения"); + Если ТипЗнч(РезультатВыполнения) <> Тип("Структура") Тогда + ПараметрыКоманды.Вставить("РезультатВыполнения", СтандартныеПодсистемыКлиентСервер.ОписаниеРезультатаВыполнения()); КонецЕсли; ОписаниеКоманды = СведенияОВнешнемОбъекте.Команды.Найти(ИдентификаторКоманды, "Идентификатор"); Если ОписаниеКоманды = Неопределено Тогда - ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Команда %1 не обнаружена!'"), ИдентификаторКоманды); + ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Команда %1 не обнаружена!'"), ИдентификаторКоманды); КонецЕсли; ЭтоСценарийВБезопасномРежиме = (ОписаниеКоманды.Использование = "СценарийВБезопасномРежиме"); @@ -2529,7 +2695,8 @@ ИЛИ ВидОбработки = Перечисления.ВидыДополнительныхОтчетовИОбработок.ДополнительныйОтчет Тогда ВыполнитьКомандуДополнительногоОтчетаИлиОбработки( - ВнешнийОбъект, ИдентификаторКоманды, + ВнешнийОбъект, + ИдентификаторКоманды, ?(ПередаватьПараметры, ПараметрыКоманды, Неопределено), ЭтоСценарийВБезопасномРежиме); @@ -2537,7 +2704,8 @@ ИзмененныеОбъекты = Новый Массив; ВыполнитьКомандуСозданияСвязанныхОбъектов( - ВнешнийОбъект, ИдентификаторКоманды, + ВнешнийОбъект, + ИдентификаторКоманды, ?(ПередаватьПараметры, ПараметрыКоманды, Неопределено), ПараметрыКоманды.ОбъектыНазначения, ИзмененныеОбъекты, @@ -2554,7 +2722,8 @@ // Здесь только произвольная печать. Печать в MXL выполняется средствами подсистемы Печать. ВыполнитьКомандуФормированияПечатнойФормы( - ВнешнийОбъект, ИдентификаторКоманды, + ВнешнийОбъект, + ИдентификаторКоманды, ?(ПередаватьПараметры, ПараметрыКоманды, Неопределено), ОбъектыНазначения, ЭтоСценарийВБезопасномРежиме); @@ -2562,7 +2731,8 @@ Иначе ВыполнитьНазначаемуюКомандуДополнительногоОтчетаИлиОбработки( - ВнешнийОбъект, ИдентификаторКоманды, + ВнешнийОбъект, + ИдентификаторКоманды, ?(ПередаватьПараметры, ПараметрыКоманды, Неопределено), ОбъектыНазначения, ЭтоСценарийВБезопасномРежиме); @@ -2700,11 +2870,10 @@ Если НЕ Объект.ЭтоНовый() И РегистрационныеДанные.Вид <> Объект.Вид Тогда Результат.ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Вид загружаемого объекта (%1) не соответствует текущему (%2). - |Для загрузки нового объекта нажмите ""Создать"".'"), - Строка(РегистрационныеДанные.Вид), - Строка(Объект.Вид) - ); + НСтр("ru = 'Вид загружаемого объекта (%1) не соответствует текущему (%2). + |Для загрузки нового объекта нажмите ""Создать"".'"), + Строка(РегистрационныеДанные.Вид), + Строка(Объект.Вид)); Возврат Результат; ИначеЕсли ПараметрыРегистрации.ЭтоОтчет <> (РегистрационныеДанные.Вид = ВидДополнительныйОтчет ИЛИ РегистрационныеДанные.Вид = ВидОтчет) Тогда Результат.ТекстОшибки = НСтр("ru = 'Вид обработки, указанный в сведениях о внешней обработке, не соответствует ее расширению.'"); @@ -2755,20 +2924,20 @@ И Объект.Вид <> ВидДополнительнаяОбработка Тогда Если РегистрационныеДанные.Свойство("Назначение") Тогда - НазначаемыеОбъектыМетаданных = НазначаемыеОбъектыМетаданныхПоВидуВнешнегоОбъекта(Объект.Вид); + ТаблицаОбъектовМетаданных = ПодключенныеОбъектыМетаданных(Объект.Вид); Для Каждого ПолноеИмяОбъектаМетаданных Из РегистрационныеДанные.Назначение Цикл - ПозицияТочки = Найти(ПолноеИмяОбъектаМетаданных, "."); + ПозицияТочки = СтрНайти(ПолноеИмяОбъектаМетаданных, "."); Если Сред(ПолноеИмяОбъектаМетаданных, ПозицияТочки + 1) = "*" Тогда - Поиск = Новый Структура("ВидОбъектаМетаданных", Лев(ПолноеИмяОбъектаМетаданных, ПозицияТочки - 1)); + Поиск = Новый Структура("Вид", Лев(ПолноеИмяОбъектаМетаданных, ПозицияТочки - 1)); Иначе - Поиск = Новый Структура("ПолноеИмяОбъектаМетаданных", ПолноеИмяОбъектаМетаданных); + Поиск = Новый Структура("ПолноеИмя", ПолноеИмяОбъектаМетаданных); КонецЕсли; - Найденные = НазначаемыеОбъектыМетаданных.НайтиСтроки(Поиск); + Найденные = ТаблицаОбъектовМетаданных.НайтиСтроки(Поиск); Для Каждого СтрокаТаблицы Из Найденные Цикл СтрокаНазначение = Объект.Назначение.Добавить(); - СтрокаНазначение.ОбъектНазначения = СтрокаТаблицы.ОбъектНазначения; + СтрокаНазначение.ОбъектНазначения = СтрокаТаблицы.Ссылка; КонецЦикла; КонецЦикла; КонецЕсли; @@ -2785,7 +2954,7 @@ Если НЕ ЗначениеЗаполнено(КомандаОписание.ВариантЗапуска) Тогда ОбщегоНазначенияКлиентСервер.СообщитьПользователю( - СтрЗаменить(НСтр("ru = 'Для команды ""%1"" не определен способ запуска.'"), "%1", КомандаОписание.Представление)); + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Для команды ""%1"" не определен способ запуска.'"), КомандаОписание.Представление)); КонецЕсли; Команда = Объект.Команды.Добавить(); @@ -2859,16 +3028,16 @@ // Подключение и получение имени, под которым объект будет подключаться. Менеджер = ?(ПараметрыРегистрации.ЭтоОтчет, ВнешниеОтчеты, ВнешниеОбработки); - #Если ТолстыйКлиентОбычноеПриложение Тогда - РезультатРегистрации.ИмяОбъекта = ПолучитьИмяВременногоФайла(); - ДвоичныеДанные = ПолучитьИзВременногоХранилища(ПараметрыРегистрации.АдресДанныхОбработки); - ДвоичныеДанные.Записать(РезультатРегистрации.ИмяОбъекта); - #Иначе - РезультатРегистрации.ИмяОбъекта = СокрЛП(Менеджер.Подключить(ПараметрыРегистрации.АдресДанныхОбработки, , Истина)); - #КонецЕсли - ИнформацияОбОшибке = Неопределено; Попытка + #Если ТолстыйКлиентОбычноеПриложение Тогда + РезультатРегистрации.ИмяОбъекта = ПолучитьИмяВременногоФайла(); + ДвоичныеДанные = ПолучитьИзВременногоХранилища(ПараметрыРегистрации.АдресДанныхОбработки); + ДвоичныеДанные.Записать(РезультатРегистрации.ИмяОбъекта); + #Иначе + РезультатРегистрации.ИмяОбъекта = СокрЛП(Менеджер.Подключить(ПараметрыРегистрации.АдресДанныхОбработки, , Истина)); + #КонецЕсли + // Получение сведений о внешней обработке. ВнешнийОбъект = Менеджер.Создать(РезультатРегистрации.ИмяОбъекта); ВнешнийОбъектМетаданные = ВнешнийОбъект.Метаданные(); @@ -2941,56 +3110,4 @@ КонецФункции -//////////////////////////////////////////////////////////////////////////////// -// Работа с формами - -// Описание инструкции для добавления элемента условного оформления. -Функция ИнструкцияУсловногоОформления() Экспорт - Возврат Новый Структура("Отборы, Оформление, Поля", Новый Соответствие, Новый Соответствие, ""); -КонецФункции - -// Добавляет элемент условного оформления согласно описанию из инструкции. -Функция ДобавитьЭлементУсловногоОформления(Форма, ИнструкцияУсловногоОформления) Экспорт - ЭлементУсловногоОформленияКД = Форма.УсловноеОформление.Элементы.Добавить(); - ЭлементУсловногоОформленияКД.Использование = Истина; - - Для Каждого КлючИЗначение Из ИнструкцияУсловногоОформления.Отборы Цикл - ЭлементОтбораКД = ЭлементУсловногоОформленияКД.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); - ЭлементОтбораКД.ЛевоеЗначение = Новый ПолеКомпоновкиДанных(КлючИЗначение.Ключ); - Настройка = КлючИЗначение.Значение; - Тип = ТипЗнч(Настройка); - Если Тип = Тип("Структура") Тогда - ЭлементОтбораКД.ВидСравнения = ВидСравненияКомпоновкиДанных[Настройка.Вид]; - ЭлементОтбораКД.ПравоеЗначение = Настройка.Значение; - ИначеЕсли Тип = Тип("Массив") Тогда - ЭлементОтбораКД.ВидСравнения = ВидСравненияКомпоновкиДанных.ВСписке; - ЭлементОтбораКД.ПравоеЗначение = Настройка; - ИначеЕсли Тип = Тип("ВидСравненияКомпоновкиДанных") Тогда - ЭлементОтбораКД.ВидСравнения = Настройка; - Иначе - ЭлементОтбораКД.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно; - ЭлементОтбораКД.ПравоеЗначение = Настройка; - КонецЕсли; - ЭлементОтбораКД.Применение = ТипПримененияОтбораКомпоновкиДанных.Элементы; - КонецЦикла; - - Для Каждого КлючИЗначение Из ИнструкцияУсловногоОформления.Оформление Цикл - ЭлементУсловногоОформленияКД.Оформление.УстановитьЗначениеПараметра( - Новый ПараметрКомпоновкиДанных(КлючИЗначение.Ключ), - КлючИЗначение.Значение); - КонецЦикла; - - Поля = ИнструкцияУсловногоОформления.Поля; - Если ТипЗнч(Поля) = Тип("Строка") Тогда - Поля = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(Поля, ","); - КонецЕсли; - Для Каждого Поле Из Поля Цикл - ПолеКД = ЭлементУсловногоОформленияКД.Поля.Элементы.Добавить(); - ПолеКД.Использование = Истина; - ПолеКД.Поле = Новый ПолеКомпоновкиДанных(Поле); - КонецЦикла; - - Возврат ЭлементУсловногоОформленияКД; -КонецФункции - #КонецОбласти diff --git a/SSL/src/CommonModules/ДополнительныеОтчетыИОбработкиВБезопасномРежиме/Module.bsl b/SSL/src/CommonModules/ДополнительныеОтчетыИОбработкиВБезопасномРежиме/Module.bsl index 74c0f2e31..98dc0f2e8 100644 --- a/SSL/src/CommonModules/ДополнительныеОтчетыИОбработкиВБезопасномРежиме/Module.bsl +++ b/SSL/src/CommonModules/ДополнительныеОтчетыИОбработкиВБезопасномРежиме/Module.bsl @@ -407,8 +407,7 @@ ИнформацияОбОшибке = ИнформацияОбОшибке(); СообщениеОбОшибке = НСтр("ru = 'Ошибка при создании FTP-соединения с сервером %1:'") + Символы.ПС + "%2"; - ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - СообщениеОбОшибке, ИмяСервера, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке)); + ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(СообщениеОбОшибке, ИмяСервера, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке)); КонецПопытки; Иначе @@ -424,7 +423,7 @@ ИнформацияОбОшибке = ИнформацияОбОшибке(); СообщениеОбОшибке = НСтр("ru = 'Ошибка при создании HTTP-соединения с сервером %1:'") + Символы.ПС + "%2"; - ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(СообщениеОбОшибке, ИмяСервера, + ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(СообщениеОбОшибке, ИмяСервера, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке)); КонецПопытки; КонецЕсли; @@ -437,7 +436,7 @@ ИнформацияОбОшибке = ИнформацияОбОшибке(); СообщениеОбОшибке = НСтр("ru = 'Ошибка при получении файла с сервера %1:'") + Символы.ПС + "%2"; - ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(СообщениеОбОшибке, ИмяСервера, + ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(СообщениеОбОшибке, ИмяСервера, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке)); КонецПопытки; @@ -514,8 +513,7 @@ ИнформацияОбОшибке = ИнформацияОбОшибке(); СообщениеОбОшибке = НСтр("ru = 'Ошибка при создании FTP-соединения с сервером %1:'") + Символы.ПС + "%2"; - ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - СообщениеОбОшибке, ИмяСервера, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке)); + ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(СообщениеОбОшибке, ИмяСервера, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке)); КонецПопытки; Иначе @@ -740,8 +738,7 @@ ПараметрыЗаписи.Замещать, ПараметрыЗаписи.ТолькоЗапись, ПараметрыЗаписи.ЗаписьФактическогоПериодаДействия, - ПараметрыЗаписи.ЗаписьПерерасчетов - ); + ПараметрыЗаписи.ЗаписьПерерасчетов); КонецЕсли; @@ -772,11 +769,9 @@ Для Каждого ЗапрещенныйСимвол Из ЗапрещенныеСимволы Цикл - Если Найти(ИмяМетода, ЗапрещенныйСимвол) > 0 Тогда + Если СтрНайти(ИмяМетода, ЗапрещенныйСимвол) > 0 Тогда - ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = '%1 не является корректным именем метода для COM-объекта или объекта внешней компоненты!'"), - ИмяМетода); + ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = '%1 не является корректным именем метода для COM-объекта или объекта внешней компоненты!'"), ИмяМетода); КонецЕсли; diff --git a/SSL/src/CommonModules/ДополнительныеОтчетыИОбработкиВБезопасномРежимеИнтерфейс/Module.bsl b/SSL/src/CommonModules/ДополнительныеОтчетыИОбработкиВБезопасномРежимеИнтерфейс/Module.bsl index b0d140002..95eba4948 100644 --- a/SSL/src/CommonModules/ДополнительныеОтчетыИОбработкиВБезопасномРежимеИнтерфейс/Module.bsl +++ b/SSL/src/CommonModules/ДополнительныеОтчетыИОбработкиВБезопасномРежимеИнтерфейс/Module.bsl @@ -708,10 +708,10 @@ Если CLSID = Неопределено Тогда ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Разрешение на использование COM-класса %1 не может быть предоставлено дополнительной обработке, работающей в режиме обратной совместимости с механизмом разрешений, реализованным в версии БСП 2.1.3. - |Для использования COM-класса требуется переработать дополнительную обработку для работы без режима обратной совместимости'"), - ProgId - ); + НСтр("ru = 'Разрешение на использование COM-класса ""%1"" не может быть предоставлено дополнительной обработке, + |работающей в режиме обратной совместимости с механизмом разрешений, реализованным в версии БСП 2.1.3. + |Для использования COM-класса требуется переработать дополнительную обработку для работы без режима обратной совместимости.'"), + ProgId); Иначе diff --git a/SSL/src/CommonModules/ДополнительныеОтчетыИОбработкиВБезопасномРежимеСлужебный/Module.bsl b/SSL/src/CommonModules/ДополнительныеОтчетыИОбработкиВБезопасномРежимеСлужебный/Module.bsl index c45c6f4b7..6a46bf185 100644 --- a/SSL/src/CommonModules/ДополнительныеОтчетыИОбработкиВБезопасномРежимеСлужебный/Module.bsl +++ b/SSL/src/CommonModules/ДополнительныеОтчетыИОбработкиВБезопасномРежимеСлужебный/Module.bsl @@ -307,9 +307,7 @@ Иначе - ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Неизвестный вид действия для этапа сценария: %1'"), - ШагСценария.ВидДействия); + ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Неизвестный вид действия для этапа сценария: %1'"), ШагСценария.ВидДействия); КонецЕсли; @@ -327,8 +325,10 @@ Если ПараметрМетода.Вид = ДополнительныеОтчетыИОбработкиВБезопасномРежимеИнтерфейс.ВидПараметраЗначение() Тогда НесохраняемыеПараметры.Добавить(ПараметрМетода.Значение); - ПодстрокаПараметров = ПодстрокаПараметров + "НесохраняемыеПараметры.Получить(" + - НесохраняемыеПараметры.ВГраница() + ")"; + ПодстрокаПараметров = ПодстрокаПараметров + + "НесохраняемыеПараметры.Получить(" + + НесохраняемыеПараметры.ВГраница() + + ")"; ИначеЕсли ПараметрМетода.Вид = ДополнительныеОтчетыИОбработкиВБезопасномРежимеИнтерфейс.ВидПараметраКлючСессии() Тогда @@ -352,9 +352,7 @@ Иначе - ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Неизвестный параметр для этапа сценария: %1'"), - ПараметрМетода.Вид); + ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Неизвестный параметр для этапа сценария: %1'"), ПараметрМетода.Вид); КонецЕсли; @@ -525,7 +523,7 @@ Результат = Результат + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( "<P><FONT size=2>%1%2</FONT></P>", РасшифровкаРазрешения, ?( ЕстьПараметры, - НСтр("ru = ' со следующими ограничениями:'"), + " " + НСтр("ru = 'со следующими ограничениями'") + ":", ".")); Если ЕстьПараметры Тогда @@ -539,18 +537,15 @@ Если ЗначениеЗаполнено(ЗначениеПараметра) Тогда - ОписаниеПараметра = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - Параметр.Описание, ЗначениеПараметра); + ОписаниеПараметра = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(Параметр.Описание, ЗначениеПараметра); Иначе - ОписаниеПараметра = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - "<B>%1</B>", Параметр.ОписаниеЛюбогоЗначения); + ОписаниеПараметра = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку("<B>%1</B>", Параметр.ОписаниеЛюбогоЗначения); КонецЕсли; - Результат = Результат + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - "<LI><FONT size=2>%1</FONT>", ОписаниеПараметра); + Результат = Результат + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку("<LI><FONT size=2>%1</FONT>", ОписаниеПараметра); КонецЦикла; @@ -582,8 +577,7 @@ // Только для внутреннего использования. Функция ТекстИсключенияРазрешениеНеПредоставлено(Знач КлючСессии, Знач ТипТребуемогоРазрешения) - Возврат СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Дополнительному отчету или обработке %1 не предоставлено разрешение {%2}%3!'"), + Возврат СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Дополнительному отчету или обработке %1 не предоставлено разрешение {%2}%3!'"), Строка(КлючСессии), ТипТребуемогоРазрешения.URIПространстваИмен, ТипТребуемогоРазрешения.Имя); КонецФункции diff --git a/SSL/src/CommonModules/ДополнительныеОтчетыИОбработкиКлиент/Module.bsl b/SSL/src/CommonModules/ДополнительныеОтчетыИОбработкиКлиент/Module.bsl index 677a7f3d5..7bb00655c 100644 --- a/SSL/src/CommonModules/ДополнительныеОтчетыИОбработкиКлиент/Module.bsl +++ b/SSL/src/CommonModules/ДополнительныеОтчетыИОбработкиКлиент/Module.bsl @@ -71,7 +71,7 @@ // * ОбъектыНазначения - Массив - Ссылки объектов, для которых выполняется команда. // Используется для назначаемых дополнительных обработок. // * РезультатВыполнения - Структура - -// См. СтандартныеПодсистемыКлиентСервер.НовыйРезультатВыполнения(). +// См. СтандартныеПодсистемыКлиент.ПоказатьРезультатВыполнения(). // Служебные параметры, зарезервированные подсистемой: // * ИдентификаторКоманды - Строка - Имя выполняемой команды. // Помимо обязательных параметров может содержать "свои" для использования в обработчике команды. @@ -86,7 +86,7 @@ // Примеры использования можно найти в дополнительной обработке демо базы. // // Возвращаемое значение: -// РезультатВыполнения - Структура - См. СтандартныеПодсистемыКлиентСервер.НовыйРезультатВыполнения(). +// РезультатВыполнения - Структура - См. СтандартныеПодсистемыКлиент.ПоказатьРезультатВыполнения(). // // Пример обработчика команды: // &НаКлиенте @@ -193,10 +193,9 @@ ДополнительныеПараметры.Вставить("Объект", Объект); ДополнительныеПараметры.Вставить("ВыполняемаяКоманда", ВыполняемаяКоманда); - Если Объект.Ссылка.Пустая() ИЛИ Форма.Модифицированность Тогда - ТекстВопроса = СтрЗаменить( + Если Объект.Ссылка.Пустая() Или Форма.Модифицированность Тогда + ТекстВопроса = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Для выполнения команды ""%1"" необходимо записать данные.'"), - "%1", ВыполняемаяКоманда.Представление); Кнопки = Новый СписокЗначений; @@ -507,7 +506,7 @@ ИначеЕсли ВыполняемаяКоманда.ВариантЗапуска = ПредопределенноеЗначение("Перечисление.СпособыВызоваДополнительныхОбработок.ВызовСерверногоМетода") Или ВыполняемаяКоманда.ВариантЗапуска = ПредопределенноеЗначение("Перечисление.СпособыВызоваДополнительныхОбработок.СценарийВБезопасномРежиме") Тогда - ПараметрыВызоваСервера.Вставить("РезультатВыполнения", СтандартныеПодсистемыКлиентСервер.НовыйРезультатВыполнения()); + ПараметрыВызоваСервера.Вставить("РезультатВыполнения", СтандартныеПодсистемыКлиентСервер.ОписаниеРезультатаВыполнения()); ДополнительныеОтчетыИОбработкиВызовСервера.ВыполнитьКоманду(ПараметрыВызоваСервера, Неопределено); Форма.Прочитать(); ПоказатьРезультатВыполненияКоманды(Форма, ПараметрыВызоваСервера.РезультатВыполнения); @@ -600,6 +599,9 @@ Если Не Форма.Модифицированность Тогда Форма.Модифицированность = Истина; КонецЕсли; + #Если ВебКлиент Тогда + Форма.ОбновитьОтображениеДанных(); // Для платформы. + #КонецЕсли КонецЕсли; КонецЕсли; diff --git a/SSL/src/CommonModules/ДополнительныеОтчетыИОбработкиКлиентСервер/Module.bsl b/SSL/src/CommonModules/ДополнительныеОтчетыИОбработкиКлиентСервер/Module.bsl index 5f34d4e78..c79c2735d 100644 --- a/SSL/src/CommonModules/ДополнительныеОтчетыИОбработкиКлиентСервер/Module.bsl +++ b/SSL/src/CommonModules/ДополнительныеОтчетыИОбработкиКлиентСервер/Module.bsl @@ -131,11 +131,20 @@ КонецФункции -// Наименование подсистемы. -Функция НаименованиеПодсистемы(КодЯзыка) Экспорт - - Возврат НСтр("ru = 'Дополнительные отчеты и обработки'", ?(КодЯзыка = Неопределено, ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка(), КодЯзыка)); - +// Формирует наименование подсистемы в требуемом формате локализации. +// +// Параметры: +// ДляПользователя - Булево - Код локализации. +// Истина - Использовать основной язык текущего сеанса. Используется для вывода сообщений пользователю. +// Ложь - Использовать основной язык конфигурации. Используется для записи сообщений в журнал регистрации. +// +// Возвращаемое значение: +// Строка - Представление подсистемы. +// +Функция НаименованиеПодсистемы(ДляПользователя) Экспорт + КодЯзыка = ?(ДляПользователя, ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка(), ""); + Возврат НСтр("ru = 'Дополнительные отчеты и обработки'", КодЯзыка); КонецФункции + #КонецОбласти diff --git a/SSL/src/CommonModules/ДополнительныеОтчетыИОбработкиПовтИсп/Module.bsl b/SSL/src/CommonModules/ДополнительныеОтчетыИОбработкиПовтИсп/Module.bsl index ffc3fd9d6..0504c3de1 100644 --- a/SSL/src/CommonModules/ДополнительныеОтчетыИОбработкиПовтИсп/Module.bsl +++ b/SSL/src/CommonModules/ДополнительныеОтчетыИОбработкиПовтИсп/Module.bsl @@ -43,7 +43,7 @@ КонецФункции -// Настройки формы для назначаемого объекта. +// Настройки для формы назначаемого объекта. Функция ПараметрыФормыНазначаемогоОбъекта(ПолноеИмяФормы, ТипФормы = Неопределено) Экспорт Если НЕ ПравоДоступа("Чтение", Метаданные.Справочники.ДополнительныеОтчетыИОбработки) Тогда Возврат ""; diff --git a/SSL/src/CommonModules/ДополнительныеОтчетыИОбработкиРегламентныеЗадания/Module.bsl b/SSL/src/CommonModules/ДополнительныеОтчетыИОбработкиРегламентныеЗадания/Module.bsl index 48349ee58..8e1b804e1 100644 --- a/SSL/src/CommonModules/ДополнительныеОтчетыИОбработкиРегламентныеЗадания/Module.bsl +++ b/SSL/src/CommonModules/ДополнительныеОтчетыИОбработкиРегламентныеЗадания/Module.bsl @@ -15,8 +15,8 @@ // Функция СоздатьНовоеЗадание(Знач Наименование) Экспорт - Если ОбщегоНазначенияПовтИсп.РазделениеВключено() И - ОбщегоНазначения.ПодсистемаСуществует("ТехнологияСервиса.РаботаВМоделиСервиса.ДополнительныеОтчетыИОбработкиВМоделиСервиса") Тогда + Если ОбщегоНазначенияПовтИсп.РазделениеВключено() + И ОбщегоНазначения.ПодсистемаСуществует("ТехнологияСервиса.РаботаВМоделиСервиса.ДополнительныеОтчетыИОбработкиВМоделиСервиса") Тогда МодульДополнительныеОтчетыИОбработкиРегламентныеЗаданияВМоделиСервиса = ОбщегоНазначения.ОбщийМодуль("ДополнительныеОтчетыИОбработкиРегламентныеЗаданияВМоделиСервиса"); Возврат МодульДополнительныеОтчетыИОбработкиРегламентныеЗаданияВМоделиСервиса.СоздатьНовоеЗадание(); КонецЕсли; @@ -38,8 +38,8 @@ // Функция ПолучитьИдентификаторЗадания(Знач Задание) Экспорт - Если ОбщегоНазначенияПовтИсп.РазделениеВключено() И - ОбщегоНазначения.ПодсистемаСуществует("ТехнологияСервиса.РаботаВМоделиСервиса.ДополнительныеОтчетыИОбработкиВМоделиСервиса") Тогда + Если ОбщегоНазначенияПовтИсп.РазделениеВключено() + И ОбщегоНазначения.ПодсистемаСуществует("ТехнологияСервиса.РаботаВМоделиСервиса.ДополнительныеОтчетыИОбработкиВМоделиСервиса") Тогда МодульДополнительныеОтчетыИОбработкиРегламентныеЗаданияВМоделиСервиса = ОбщегоНазначения.ОбщийМодуль("ДополнительныеОтчетыИОбработкиРегламентныеЗаданияВМоделиСервиса"); Возврат МодульДополнительныеОтчетыИОбработкиРегламентныеЗаданияВМоделиСервиса.ПолучитьИдентификаторЗадания(Задание); КонецЕсли; @@ -59,8 +59,8 @@ // Процедура УстановитьПараметрыЗадания(Задание, Использование, Наименование, Параметры, Расписание) Экспорт - Если ОбщегоНазначенияПовтИсп.РазделениеВключено() И - ОбщегоНазначения.ПодсистемаСуществует("ТехнологияСервиса.РаботаВМоделиСервиса.ДополнительныеОтчетыИОбработкиВМоделиСервиса") Тогда + Если ОбщегоНазначенияПовтИсп.РазделениеВключено() + И ОбщегоНазначения.ПодсистемаСуществует("ТехнологияСервиса.РаботаВМоделиСервиса.ДополнительныеОтчетыИОбработкиВМоделиСервиса") Тогда МодульДополнительныеОтчетыИОбработкиРегламентныеЗаданияВМоделиСервиса = ОбщегоНазначения.ОбщийМодуль("ДополнительныеОтчетыИОбработкиРегламентныеЗаданияВМоделиСервиса"); МодульДополнительныеОтчетыИОбработкиРегламентныеЗаданияВМоделиСервиса.УстановитьПараметрыЗадания(Задание, Использование, Параметры, Расписание); Возврат; @@ -88,8 +88,8 @@ // Функция ПолучитьПараметрыЗадания(Знач Задание) Экспорт - Если ОбщегоНазначенияПовтИсп.РазделениеВключено() И - ОбщегоНазначения.ПодсистемаСуществует("ТехнологияСервиса.РаботаВМоделиСервиса.ДополнительныеОтчетыИОбработкиВМоделиСервиса") Тогда + Если ОбщегоНазначенияПовтИсп.РазделениеВключено() + И ОбщегоНазначения.ПодсистемаСуществует("ТехнологияСервиса.РаботаВМоделиСервиса.ДополнительныеОтчетыИОбработкиВМоделиСервиса") Тогда МодульДополнительныеОтчетыИОбработкиРегламентныеЗаданияВМоделиСервиса = ОбщегоНазначения.ОбщийМодуль("ДополнительныеОтчетыИОбработкиРегламентныеЗаданияВМоделиСервиса"); Возврат МодульДополнительныеОтчетыИОбработкиРегламентныеЗаданияВМоделиСервиса.ПолучитьПараметрыЗадания(Задание); КонецЕсли; @@ -114,7 +114,7 @@ Функция НайтиЗадание(Знач Идентификатор) Экспорт Если ОбщегоНазначенияПовтИсп.РазделениеВключено() - И ОбщегоНазначения.ПодсистемаСуществует("ТехнологияСервиса.РаботаВМоделиСервиса.ДополнительныеОтчетыИОбработкиВМоделиСервиса") Тогда + И ОбщегоНазначения.ПодсистемаСуществует("ТехнологияСервиса.РаботаВМоделиСервиса.ДополнительныеОтчетыИОбработкиВМоделиСервиса") Тогда МодульДополнительныеОтчетыИОбработкиРегламентныеЗаданияВМоделиСервиса = ОбщегоНазначения.ОбщийМодуль("ДополнительныеОтчетыИОбработкиРегламентныеЗаданияВМоделиСервиса"); Возврат МодульДополнительныеОтчетыИОбработкиРегламентныеЗаданияВМоделиСервиса.НайтиЗадание(Идентификатор); КонецЕсли; @@ -138,8 +138,8 @@ // Процедура УдалитьЗадание(Знач Задание) Экспорт - Если ОбщегоНазначенияПовтИсп.РазделениеВключено() И - ОбщегоНазначения.ПодсистемаСуществует("ТехнологияСервиса.РаботаВМоделиСервиса.ДополнительныеОтчетыИОбработкиВМоделиСервиса") Тогда + Если ОбщегоНазначенияПовтИсп.РазделениеВключено() + И ОбщегоНазначения.ПодсистемаСуществует("ТехнологияСервиса.РаботаВМоделиСервиса.ДополнительныеОтчетыИОбработкиВМоделиСервиса") Тогда МодульДополнительныеОтчетыИОбработкиРегламентныеЗаданияВМоделиСервиса = ОбщегоНазначения.ОбщийМодуль("ДополнительныеОтчетыИОбработкиРегламентныеЗаданияВМоделиСервиса"); МодульДополнительныеОтчетыИОбработкиРегламентныеЗаданияВМоделиСервиса.УдалитьЗадание(Задание); Возврат; diff --git a/SSL/src/CommonModules/ЖурналРегистрации/Module.bsl b/SSL/src/CommonModules/ЖурналРегистрации/Module.bsl index 7369ebfdc..c3f99bcd8 100644 --- a/SSL/src/CommonModules/ЖурналРегистрации/Module.bsl +++ b/SSL/src/CommonModules/ЖурналРегистрации/Module.bsl @@ -143,8 +143,8 @@ ЗначениеРазделителя = РазделительСеанса.Ключ + "=" + РазделительСеанса.Значение; СписокРеквизитовРазделенияДанных.Добавить(ЗначениеРазделителя, ПредставлениеРазделителя); ПолноеПредставлениеРазделенияДанныхСеанса = ?(Не ПустаяСтрока(ПолноеПредставлениеРазделенияДанныхСеанса), - ПолноеПредставлениеРазделенияДанныхСеанса + "; ", "") + - ПредставлениеРазделителя; + ПолноеПредставлениеРазделенияДанныхСеанса + "; ", "") + + ПредставлениеРазделителя; КонецЦикла; СобытиеЖурнала.РазделениеДанныхСеанса = СписокРеквизитовРазделенияДанных; СобытиеЖурнала.ПредставлениеРазделенияДанныхСеанса = ПолноеПредставлениеРазделенияДанныхСеанса; @@ -210,9 +210,7 @@ Если СобытиеЖурнала.Данные <> Неопределено Тогда СобытиеЖурнала.Данные.Свойство("Имя", ИмяПользователяИБ); КонецЕсли; - СобытиеЖурнала.Данные = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Имя: %1, ...'"), - ИмяПользователяИБ); + СобытиеЖурнала.Данные = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Имя: %1, ...'"), ИмяПользователяИБ); КонецЕсли; @@ -225,9 +223,7 @@ СобытиеЖурнала.ИмяПользователя = Пользователи.ПолноеИмяНеУказанногоПользователя(); ИначеЕсли ПользователиИнформационнойБазы.НайтиПоУникальномуИдентификатору(СобытиеЖурнала.Пользователь) = Неопределено Тогда - СобытиеЖурнала.ИмяПользователя = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = '%1 <Удален>'"), - СобытиеЖурнала.ИмяПользователя); + СобытиеЖурнала.ИмяПользователя = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = '%1 <Удален>'"), СобытиеЖурнала.ИмяПользователя); КонецЕсли; Если МодульРаботаВМоделиСервиса <> Неопределено Тогда @@ -350,7 +346,7 @@ Если ТипЗнч(ЭлементОтбора.Значение) = Тип("СписокЗначений") Тогда ПреобразованиеЭлементаОтбора(Отбор, ЭлементОтбора); ИначеЕсли ВРег(ЭлементОтбора.Ключ) = ВРег("Транзакция") Тогда - Если Найти(ЭлементОтбора.Значение, "(") = 0 Тогда + Если СтрНайти(ЭлементОтбора.Значение, "(") = 0 Тогда Отбор.Вставить(ЭлементОтбора.Ключ, "(" + ЭлементОтбора.Значение); КонецЕсли; КонецЕсли; @@ -387,9 +383,9 @@ ИначеЕсли ВРег(КлючСтруктурыОтбора) = ВРег("РазделениеДанныхСеанса") Тогда МассивЗначенийРазделителей = Новый Массив; КлючСтруктурыОтбора = "РазделениеДанныхСеанса"; - РазделениеДанныхМассив = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(ЗначениеИзСписка.Значение, "="); + РазделениеДанныхМассив = СтрРазделить(ЗначениеИзСписка.Значение, "=", Истина); - ЗначенияРазделителя = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(РазделениеДанныхМассив[1], ","); + ЗначенияРазделителя = СтрРазделить(РазделениеДанныхМассив[1], ",", Истина); Для Каждого ЗначениеРазделителя Из ЗначенияРазделителя Цикл ЭлементОтбораПоРазделителю = Новый Структура("Значение, Использование", Число(ЗначениеРазделителя), Истина); МассивЗначенийРазделителей.Добавить(ЭлементОтбораПоРазделителю); @@ -398,7 +394,7 @@ НовоеЗначение.Вставить(РазделениеДанныхМассив[0], МассивЗначенийРазделителей); Иначе - ЗначенияОтбора = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(ЗначениеИзСписка.Значение, Символы.ПС); + ЗначенияОтбора = СтрРазделить(ЗначениеИзСписка.Значение, Символы.ПС, Истина); Для Каждого ЗначениеОтбора Из ЗначенияОтбора Цикл НовоеЗначение.Добавить(ЗначениеОтбора); КонецЦикла; @@ -436,13 +432,11 @@ Если ИмяОграничения = "Событие" И СписокОграничений.Количество() > 5 Тогда - Ограничение = ПредставлениеОтбора + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'События (%1)'"), СписокОграничений.Количество()); + Ограничение = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'События (%1)'"), СписокОграничений.Количество()); ИначеЕсли ИмяОграничения = "Сеанс" И СписокОграничений.Количество() > 3 Тогда - Ограничение = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Сеансы (%1)'"), СписокОграничений.Количество()); + Ограничение = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Сеансы (%1)'"), СписокОграничений.Количество()); Иначе diff --git a/SSL/src/CommonModules/ЖурналРегистрацииКлиент/Module.bsl b/SSL/src/CommonModules/ЖурналРегистрацииКлиент/Module.bsl index fade51621..9db86e6fd 100644 --- a/SSL/src/CommonModules/ЖурналРегистрацииКлиент/Module.bsl +++ b/SSL/src/CommonModules/ЖурналРегистрацииКлиент/Module.bsl @@ -31,6 +31,14 @@ Процедура ДобавитьСообщениеДляЖурналаРегистрации(Знач ИмяСобытия, Знач ПредставлениеУровня = "Информация", Знач Комментарий = "", Знач ДатаСобытия = "", Знач ЗаписатьСобытия = Ложь) Экспорт + ИмяПроцедуры = "ЖурналРегистрацииКлиент.ДобавитьСообщениеДляЖурналаРегистрации"; + ОбщегоНазначенияКлиентСервер.ПроверитьПараметр(ИмяПроцедуры, "ИмяСобытия", ИмяСобытия, Тип("Строка")); + ОбщегоНазначенияКлиентСервер.ПроверитьПараметр(ИмяПроцедуры, "ПредставлениеУровня", ПредставлениеУровня, Тип("Строка")); + ОбщегоНазначенияКлиентСервер.ПроверитьПараметр(ИмяПроцедуры, "Комментарий", Комментарий, Тип("Строка")); + Если ДатаСобытия <> "" Тогда + ОбщегоНазначенияКлиентСервер.ПроверитьПараметр(ИмяПроцедуры, "ДатаСобытия", ДатаСобытия, Тип("Дата")); + КонецЕсли; + ИмяПараметра = "СтандартныеПодсистемы.СообщенияДляЖурналаРегистрации"; Если ПараметрыПриложения[ИмяПараметра] = Неопределено Тогда ПараметрыПриложения.Вставить(ИмяПараметра, Новый СписокЗначений); @@ -40,9 +48,12 @@ ДатаСобытия = Формат(ДатаСобытия, "ДЛФ=DT"); КонецЕсли; - СтруктураСообщения = Новый Структура("ИмяСобытия, ПредставлениеУровня, Комментарий, ДатаСобытия", - ИмяСобытия, ПредставлениеУровня, Комментарий, ДатаСобытия); - + СтруктураСообщения = Новый Структура; + СтруктураСообщения.Вставить("ИмяСобытия", ИмяСобытия); + СтруктураСообщения.Вставить("ПредставлениеУровня", ПредставлениеУровня); + СтруктураСообщения.Вставить("Комментарий", Комментарий); + СтруктураСообщения.Вставить("ДатаСобытия", ДатаСобытия); + ПараметрыПриложения["СтандартныеПодсистемы.СообщенияДляЖурналаРегистрации"].Добавить(СтруктураСообщения); Если ЗаписатьСобытия Тогда @@ -87,14 +98,10 @@ Если ТекущиеДанные.Событие = "_$Data$_.Delete" Тогда // это - событие удаления ТекстПредупреждения = - СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - ТекстПредупреждения, - НСтр("ru = 'Данные удалены из информационной базы'")); + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ТекстПредупреждения, НСтр("ru = 'Данные удалены из информационной базы'")); Иначе ТекстПредупреждения = - СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - ТекстПредупреждения, - НСтр("ru = 'Возможно, данные удалены из информационной базы'")); + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ТекстПредупреждения, НСтр("ru = 'Возможно, данные удалены из информационной базы'")); КонецЕсли; ПоказатьПредупреждение(, ТекстПредупреждения); КонецПопытки; @@ -114,7 +121,7 @@ КонецЕсли; КлючУникальностиФормы = Данные.АдресДанных; - ОткрытьФорму("Обработка.ЖурналРегистрации.Форма.ФормаСобытия", СобытиеЖурналаРегистрацииВСтруктуру(Данные),, КлючУникальностиФормы); + ОткрытьФорму("Обработка.ЖурналРегистрации.Форма.Событие", СобытиеЖурналаРегистрацииВСтруктуру(Данные),, КлючУникальностиФормы); КонецПроцедуры @@ -248,10 +255,10 @@ ОтборЖурналаРегистрации.Удалить(ИмяЭлементаОтбора); КонецЕсли; - Если ИмяЭлементаОтбора = "Данные" Или // Не списочные отборы, только 1 значение. - ИмяЭлементаОтбора = "Комментарий" Или - ИмяЭлементаОтбора = "Транзакция" Или - ИмяЭлементаОтбора = "ПредставлениеДанных" Тогда + Если ИмяЭлементаОтбора = "Данные" // Не списочные отборы, только 1 значение. + Или ИмяЭлементаОтбора = "Комментарий" + Или ИмяЭлементаОтбора = "Транзакция" + Или ИмяЭлементаОтбора = "ПредставлениеДанных" Тогда ОтборЖурналаРегистрации.Вставить(ИмяЭлементаОтбора, ЗначениеОтбора); Иначе diff --git a/SSL/src/CommonModules/ЗаметкиПользователя/Module.bsl b/SSL/src/CommonModules/ЗаметкиПользователя/Module.bsl index f834f9955..c38bb0840 100644 --- a/SSL/src/CommonModules/ЗаметкиПользователя/Module.bsl +++ b/SSL/src/CommonModules/ЗаметкиПользователя/Module.bsl @@ -6,39 +6,14 @@ #Область ПрограммныйИнтерфейс -// Помечает на удаление заметки, связанные с удаляемым объектом. -Процедура ПометитьНаУдалениеЗаметкиПоПредмету(Источник, Отказ) Экспорт - Если Не Источник.ПометкаУдаления Тогда - Возврат; - КонецЕсли; - - ТекстЗапроса = - "ВЫБРАТЬ - | Заметки.Ссылка КАК Ссылка - |ИЗ - | Справочник.Заметки КАК Заметки - |ГДЕ - | Заметки.ПометкаУдаления = ЛОЖЬ - | И Заметки.Предмет = &Предмет"; - - Запрос = Новый Запрос(ТекстЗапроса); - Запрос.УстановитьПараметр("Предмет", Источник.Ссылка); - - УстановитьПривилегированныйРежим(Истина); - - Выборка = Запрос.Выполнить().Выбрать(); - Пока Выборка.Следующий() Цикл - ЗаметкаОбъект = Выборка.Ссылка.ПолучитьОбъект(); - ЗаметкаОбъект.УстановитьПометкуУдаления(Истина, Ложь); - ЗаметкаОбъект.ДополнительныеСвойства.Вставить("ПометкаУдаленияЗаметки", Истина); - Попытка - ЗаметкаОбъект.Записать(); - Исключение - ТекстОшибки = ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); - ЗаписьЖурналаРегистрации(НСтр("ru = 'Заметки пользователя.Установка пометки удаления'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), - УровеньЖурналаРегистрации.Ошибка, ЗаметкаОбъект.Метаданные(), ЗаметкаОбъект.Ссылка, ТекстОшибки); - КонецПопытки; - КонецЦикла; +// Добавляет признак изменения пометки удаления документа. +Процедура УстановитьСтатусИзмененияПометкиУдаленияДокумента(Источник, Отказ, РежимЗаписи, РежимПроведения) Экспорт + ЗаметкиПользователяСлужебный.УстановитьСтатусИзмененияПометкиУдаления(Источник); +КонецПроцедуры + +// Добавляет признак изменения пометки удаления объекта. +Процедура УстановитьСтатусИзмененияПометкиУдаленияОбъекта(Источник, Отказ) Экспорт + ЗаметкиПользователяСлужебный.УстановитьСтатусИзмененияПометкиУдаления(Источник); КонецПроцедуры #КонецОбласти diff --git a/SSL/src/CommonModules/ЗаметкиПользователяСлужебный/Module.bsl b/SSL/src/CommonModules/ЗаметкиПользователяСлужебный/Module.bsl index d222cc90a..a1f6caa64 100644 --- a/SSL/src/CommonModules/ЗаметкиПользователяСлужебный/Module.bsl +++ b/SSL/src/CommonModules/ЗаметкиПользователяСлужебный/Module.bsl @@ -42,6 +42,69 @@ #Область СлужебныеПроцедурыИФункции +Процедура УстановитьСнятьПометкуУдаленияЗаметок(Источник, Отказ) Экспорт + + Если Источник.ОбменДанными.Загрузка Тогда + Возврат; + КонецЕсли; + + ПометкаУдаления = Источник.ПометкаУдаления; + Если Не ПометкаУдаления И Не Источник.ДополнительныеСвойства.Свойство("СнятаПометкаУдаления") Тогда + Возврат; + КонецЕсли; + + ТекстЗапроса = + "ВЫБРАТЬ + | Заметки.Ссылка КАК Ссылка + |ИЗ + | Справочник.Заметки КАК Заметки + |ГДЕ + | Заметки.ПометкаУдаления = &ПометкаУдаления + | И &ПолеВладельца = &Владелец"; + + ПолеВладельца = "Заметки.Предмет"; + Если ТипЗнч(Источник) = Тип("СправочникОбъект.Пользователи") + И (ПометкаУдаления Или Источник.ДополнительныеСвойства.Свойство("СнятаПометкаУдаления")) Тогда + ПолеВладельца = "Заметки.Автор"; + КонецЕсли; + + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&ПолеВладельца", ПолеВладельца); + + Запрос = Новый Запрос(ТекстЗапроса); + Запрос.УстановитьПараметр("Владелец", Источник.Ссылка); + Запрос.УстановитьПараметр("ПометкаУдаления", Не ПометкаУдаления); + + УстановитьПривилегированныйРежим(Истина); + + Выборка = Запрос.Выполнить().Выбрать(); + Пока Выборка.Следующий() Цикл + ЗаметкаОбъект = Выборка.Ссылка.ПолучитьОбъект(); + ЗаметкаОбъект.УстановитьПометкуУдаления(ПометкаУдаления, Ложь); + ЗаметкаОбъект.ДополнительныеСвойства.Вставить("ПометкаУдаленияЗаметки", Истина); + Попытка + ЗаметкаОбъект.Записать(); + Исключение + ТекстОшибки = ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); + ЗаписьЖурналаРегистрации(НСтр("ru = 'Заметки пользователя.Изменение пометки удаления'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), + УровеньЖурналаРегистрации.Ошибка, ЗаметкаОбъект.Метаданные(), ЗаметкаОбъект.Ссылка, ТекстОшибки); + КонецПопытки; + КонецЦикла; + +КонецПроцедуры + +// Добавляет признак изменения пометки удаления объекта. +Процедура УстановитьСтатусИзмененияПометкиУдаления(Источник) Экспорт + + Если Источник.ОбменДанными.Загрузка Тогда + Возврат; + КонецЕсли; + + Если Не Источник.ПометкаУдаления И ОбщегоНазначения.ЗначениеРеквизитаОбъекта(Источник.Ссылка, "ПометкаУдаления") = Истина Тогда + Источник.ДополнительныеСвойства.Вставить("СнятаПометкаУдаления"); + КонецЕсли; + +КонецПроцедуры + // Заполняет список текущих дел пользователя. // // Параметры: @@ -60,26 +123,23 @@ // Процедура ПриЗаполненииСпискаТекущихДел(ТекущиеДела) Экспорт - МодульТекущиеДелаСлужебный = ОбщегоНазначения.ОбщийМодуль("ТекущиеДелаСлужебный"); + МодульТекущиеДелаСервер = ОбщегоНазначения.ОбщийМодуль("ТекущиеДелаСервер"); Если Не ПравоДоступа("Редактирование", Метаданные.Справочники.Заметки) - Или МодульТекущиеДелаСлужебный.ДелоОтключено("ЗаметкиПользователя") Тогда + Или Не ПолучитьФункциональнуюОпцию("ИспользоватьЗаметки") + Или МодульТекущиеДелаСервер.ДелоОтключено("ЗаметкиПользователя") Тогда Возврат; КонецЕсли; - МодульТекущиеДелаСервер = ОбщегоНазначения.ОбщийМодуль("ТекущиеДелаСервер"); // Процедура вызывается только при наличии подсистемы "Текущие дела", поэтому здесь // не делается проверка существования подсистемы. Разделы = МодульТекущиеДелаСервер.РазделыДляОбъекта(Метаданные.Справочники.Заметки.ПолноеИмя()); - Если Разделы = Неопределено Тогда - Возврат; // Заметки не вынесены в командный интерфейс пользователя. - КонецЕсли; - КоличествоЗаметок = КоличествоЗаметок(); Для Каждого Раздел Из Разделы Цикл + ИдентификаторЗаметки = "ЗаметкиПользователя" + СтрЗаменить(Раздел.ПолноеИмя(), ".", ""); Дело = ТекущиеДела.Добавить(); - Дело.Идентификатор = "ЗаметкиПользователя"; + Дело.Идентификатор = ИдентификаторЗаметки; Дело.ЕстьДела = КоличествоЗаметок > 0; Дело.Представление = НСтр("ru = 'Мои заметки'"); Дело.Количество = КоличествоЗаметок; @@ -105,45 +165,6 @@ КонецПроцедуры -Процедура УстановитьПометкуУдаленияЗаметкамПользователя(Источник, Отказ) Экспорт - - Если Источник.ОбменДанными.Загрузка Тогда - Возврат; - КонецЕсли; - - Если Не Источник.ПометкаУдаления Тогда - Возврат; - КонецЕсли; - - ТекстЗапроса = - "ВЫБРАТЬ - | Заметки.Ссылка КАК Ссылка - |ИЗ - | Справочник.Заметки КАК Заметки - |ГДЕ - | Заметки.ПометкаУдаления = ЛОЖЬ - | И Заметки.Автор = &Пользователь"; - - Запрос = Новый Запрос(ТекстЗапроса); - Запрос.УстановитьПараметр("Пользователь", Источник.Ссылка); - - УстановитьПривилегированныйРежим(Истина); - - Выборка = Запрос.Выполнить().Выбрать(); - Пока Выборка.Следующий() Цикл - ЗаметкаОбъект = Выборка.Ссылка.ПолучитьОбъект(); - ЗаметкаОбъект.УстановитьПометкуУдаления(Истина, Ложь); - ЗаметкаОбъект.ДополнительныеСвойства.Вставить("ПометкаУдаленияЗаметки", Истина); - Попытка - ЗаметкаОбъект.Записать(); - Исключение - ТекстОшибки = ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); - ЗаписьЖурналаРегистрации(НСтр("ru = 'Заметки пользователя.Установка пометки удаления'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), - УровеньЖурналаРегистрации.Ошибка, ЗаметкаОбъект.Метаданные(), ЗаметкаОбъект.Ссылка, ТекстОшибки); - КонецПопытки; - КонецЦикла; -КонецПроцедуры - Функция КоличествоЗаметок() Запрос = Новый Запрос; diff --git a/SSL/src/CommonModules/ЗапретРедактированияРеквизитовОбъектов/Module.bsl b/SSL/src/CommonModules/ЗапретРедактированияРеквизитовОбъектов/Module.bsl index 1cdeadfae..8d7717249 100644 --- a/SSL/src/CommonModules/ЗапретРедактированияРеквизитовОбъектов/Module.bsl +++ b/SSL/src/CommonModules/ЗапретРедактированияРеквизитовОбъектов/Module.bsl @@ -33,7 +33,8 @@ КонецЦикла; Если Не ФормаПодготовлена Тогда - ПодготовитьФорму(Форма, ОписаниеОбъекта.Ссылка, ГруппаДляКнопкиЗапрета, ЗаголовокКнопкиЗапрета); + ЗапретРедактированияРеквизитовОбъектовСлужебный.ПодготовитьФорму(Форма, + ОписаниеОбъекта.Ссылка, ГруппаДляКнопкиЗапрета, ЗаголовокКнопкиЗапрета); КонецЕсли; ЭтоНовыйОбъект = ОписаниеОбъекта.Ссылка.Пустая(); @@ -64,124 +65,3 @@ КонецПроцедуры #КонецОбласти - -#Область СлужебныеПроцедурыИФункции - -// Настраивает форму объекта для работы подсистемы: -// - добавляет реквизит ПараметрыЗапретаРедактированияРеквизитов для хранения внутренних данных -// - добавляет команду и кнопку РазрешитьРедактированиеРеквизитовОбъекта (если есть права). -// -Процедура ПодготовитьФорму(Форма, Ссылка, ГруппаДляКнопкиЗапрета, ЗаголовокКнопкиЗапрета) - - ОписаниеТиповСтрока100 = Новый ОписаниеТипов("Строка",,Новый КвалификаторыСтроки(100)); - ОписаниеТиповБулево = Новый ОписаниеТипов("Булево"); - ОписаниеТиповМассив = Новый ОписаниеТипов("СписокЗначений"); - - РеквизитыФормы = Новый Соответствие; - Для каждого РеквизитФормы Из Форма.ПолучитьРеквизиты() Цикл - РеквизитыФормы.Вставить(РеквизитФормы.Имя, РеквизитФормы.Заголовок); - КонецЦикла; - - // Добавление реквизитов на форму. - ДобавляемыеРеквизиты = Новый Массив; - ДобавляемыеРеквизиты.Добавить(Новый РеквизитФормы("ПараметрыЗапретаРедактированияРеквизитов", Новый ОписаниеТипов("ТаблицаЗначений"))); - ДобавляемыеРеквизиты.Добавить(Новый РеквизитФормы("ИмяРеквизита", ОписаниеТиповСтрока100, "ПараметрыЗапретаРедактированияРеквизитов")); - ДобавляемыеРеквизиты.Добавить(Новый РеквизитФормы("Представление", ОписаниеТиповСтрока100, "ПараметрыЗапретаРедактированияРеквизитов")); - ДобавляемыеРеквизиты.Добавить(Новый РеквизитФормы("РедактированиеРазрешено", ОписаниеТиповБулево, "ПараметрыЗапретаРедактированияРеквизитов")); - ДобавляемыеРеквизиты.Добавить(Новый РеквизитФормы("БлокируемыеЭлементы", ОписаниеТиповМассив, "ПараметрыЗапретаРедактированияРеквизитов")); - ДобавляемыеРеквизиты.Добавить(Новый РеквизитФормы("ПравоРедактирования", ОписаниеТиповБулево, "ПараметрыЗапретаРедактированияРеквизитов")); - - Форма.ИзменитьРеквизиты(ДобавляемыеРеквизиты); - - БлокируемыеРеквизиты = ОбщегоНазначения.МенеджерОбъектаПоСсылке(Ссылка).ПолучитьБлокируемыеРеквизитыОбъекта(); - ВсеРеквизитыБезПраваРедактирования = Истина; - - Для Каждого БлокируемыйРеквизит Из БлокируемыеРеквизиты Цикл - - ОписаниеРеквизита = Форма.ПараметрыЗапретаРедактированияРеквизитов.Добавить(); - - ИнформацияОБР = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(БлокируемыйРеквизит, ";"); - ОписаниеРеквизита.ИмяРеквизита = ИнформацияОБР[0]; - - Если ИнформацияОБР.Количество() > 1 Тогда - БлокируемыеЭлементы = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(ИнформацияОБР[1], ","); - Для Каждого БлокируемыйЭлемент Из БлокируемыеЭлементы Цикл - ОписаниеРеквизита.БлокируемыеЭлементы.Добавить(СокрЛП(БлокируемыйЭлемент)); - КонецЦикла; - КонецЕсли; - - ЗаполнитьСвязанныеЭлементы(ОписаниеРеквизита.БлокируемыеЭлементы, Форма, ОписаниеРеквизита.ИмяРеквизита); - - МетаданныеОбъекта = Ссылка.Метаданные(); - МетаданныеРеквизитаИлиТабличнойЧасти = МетаданныеОбъекта.Реквизиты.Найти(ОписаниеРеквизита.ИмяРеквизита); - СтандартныйРеквизитИлиТабличнаяЧасть = Ложь; - Если МетаданныеРеквизитаИлиТабличнойЧасти = Неопределено Тогда - МетаданныеРеквизитаИлиТабличнойЧасти = МетаданныеОбъекта.ТабличныеЧасти.Найти(ОписаниеРеквизита.ИмяРеквизита); - Если МетаданныеРеквизитаИлиТабличнойЧасти = Неопределено Тогда - Если ОбщегоНазначения.ЭтоСтандартныйРеквизит(МетаданныеОбъекта.СтандартныеРеквизиты, ОписаниеРеквизита.ИмяРеквизита) Тогда - МетаданныеРеквизитаИлиТабличнойЧасти = МетаданныеОбъекта.СтандартныеРеквизиты[ОписаниеРеквизита.ИмяРеквизита]; - СтандартныйРеквизитИлиТабличнаяЧасть = Истина; - КонецЕсли; - КонецЕсли; - КонецЕсли; - - Если МетаданныеРеквизитаИлиТабличнойЧасти = Неопределено Тогда - ОписаниеРеквизита.Представление = РеквизитыФормы[ОписаниеРеквизита.ИмяРеквизита]; - - ОписаниеРеквизита.ПравоРедактирования = Истина; - ВсеРеквизитыБезПраваРедактирования = Ложь; - Иначе - ОписаниеРеквизита.Представление = ?( - ЗначениеЗаполнено(МетаданныеРеквизитаИлиТабличнойЧасти.Синоним), - МетаданныеРеквизитаИлиТабличнойЧасти.Синоним, - МетаданныеРеквизитаИлиТабличнойЧасти.Имя); - - Если СтандартныйРеквизитИлиТабличнаяЧасть Тогда - ПравоРедактирования = ПравоДоступа("Редактирование", МетаданныеОбъекта, , МетаданныеРеквизитаИлиТабличнойЧасти.Имя); - Иначе - ПравоРедактирования = ПравоДоступа("Редактирование", МетаданныеРеквизитаИлиТабличнойЧасти); - КонецЕсли; - Если ПравоРедактирования Тогда - ОписаниеРеквизита.ПравоРедактирования = Истина; - ВсеРеквизитыБезПраваРедактирования = Ложь; - КонецЕсли; - КонецЕсли; - КонецЦикла; - - // Добавление команды и кнопки, если есть права. - Если Пользователи.РолиДоступны("РедактированиеРеквизитовОбъектов") - И ПравоДоступа("Редактирование", Ссылка.Метаданные()) - И НЕ ВсеРеквизитыБезПраваРедактирования Тогда - - // Добавление команды - Команда = Форма.Команды.Добавить("РазрешитьРедактированиеРеквизитовОбъекта"); - Команда.Заголовок = ?(ПустаяСтрока(ЗаголовокКнопкиЗапрета), НСтр("ru = 'Разрешить редактирование реквизитов'"), ЗаголовокКнопкиЗапрета); - Команда.Действие = "Подключаемый_РазрешитьРедактированиеРеквизитовОбъекта"; - Команда.Картинка = БиблиотекаКартинок.РазрешитьРедактированиеРеквизитовОбъекта; - Команда.ИзменяетСохраняемыеДанные = Истина; - - // Добавление кнопки - РодительскаяГруппа = ?(ГруппаДляКнопкиЗапрета <> Неопределено, ГруппаДляКнопкиЗапрета, Форма.КоманднаяПанель); - Кнопка = Форма.Элементы.Добавить("РазрешитьРедактированиеРеквизитовОбъекта", Тип("КнопкаФормы"), РодительскаяГруппа); - Кнопка.ТолькоВоВсехДействиях = Истина; - Кнопка.ИмяКоманды = "РазрешитьРедактированиеРеквизитовОбъекта"; - КонецЕсли; - -КонецПроцедуры - -// Возвращает имя элемента формы по имени реквизита объекта, ссылающегося на него. -Процедура ЗаполнитьСвязанныеЭлементы(МассивСвязанныхЭлементов, Форма, ИмяРеквизита) - - Для Каждого ЭлементФормы Из Форма.Элементы Цикл - Если (ТипЗнч(ЭлементФормы) = Тип("ПолеФормы") И ЭлементФормы.Вид <> ВидПоляФормы.ПолеНадписи) - ИЛИ ТипЗнч(ЭлементФормы) = Тип("ТаблицаФормы") Тогда - РазложенныйПутьКДанным = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(ЭлементФормы.ПутьКДанным, "."); - Если РазложенныйПутьКДанным.Количество() = 2 И РазложенныйПутьКДанным[1] = ИмяРеквизита Тогда - МассивСвязанныхЭлементов.Добавить(ЭлементФормы.Имя); - КонецЕсли; - КонецЕсли; - КонецЦикла; - -КонецПроцедуры - -#КонецОбласти diff --git a/SSL/src/CommonModules/ЗапретРедактированияРеквизитовОбъектовКлиент/Module.bsl b/SSL/src/CommonModules/ЗапретРедактированияРеквизитовОбъектовКлиент/Module.bsl index f978ec92b..cd54bb1da 100644 --- a/SSL/src/CommonModules/ЗапретРедактированияРеквизитовОбъектовКлиент/Module.bsl +++ b/SSL/src/CommonModules/ЗапретРедактированияРеквизитовОбъектовКлиент/Module.bsl @@ -90,6 +90,8 @@ КонецЕсли; КонецЦикла; + Форма.ОбновитьОтображениеДанных(); + КонецПроцедуры // Спрашивает у пользователя подтверждение на включение редактирования реквизитов @@ -117,30 +119,37 @@ РеквизитыПредставление = Лев(РеквизитыПредставление, СтрДлина(РеквизитыПредставление) - 2); Если СинонимыРеквизитов.Количество() > 1 Тогда - ТекстВопроса = НСтр("ru = 'Для того чтобы не допустить рассогласования данных в программе, следующие реквизиты не доступны для редактирования: - |%1. - | - |Перед тем, как разрешить их редактирование, рекомендуется оценить последствия, - |проверив все места использования этого элемента в программе. - |Поиск мест использования может занять длительное время.'"); - + ТекстВопроса = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Для того чтобы не допустить рассогласования данных в программе, + |следующие реквизиты не доступны для редактирования: + |%1. + | + |Перед тем, как разрешить их редактирование, рекомендуется оценить последствия, + |проверив все места использования этого элемента в программе. + |Поиск мест использования может занять длительное время.'"), + РеквизитыПредставление); Иначе - ТекстВопроса = НСтр("ru = 'Для того чтобы не допустить рассогласования данных в программе, реквизит %1 не доступен для редактирования. - | - |Перед тем, как разрешить его редактирование, рекомендуется оценить последствия, - |проверив все места использования %2 в программе. - |Поиск мест использования может занять длительное время.'"); + Если МассивСсылок.Количество() = 1 Тогда + ТекстВопроса = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Для того чтобы не допустить рассогласования данных в программе, + |реквизит %1 не доступен для редактирования. + | + |Перед тем, как разрешить его редактирование, рекомендуется оценить последствия, + |проверив все места использования ""%2"" в программе. + |Поиск мест использования может занять длительное время.'"), + РеквизитыПредставление, МассивСсылок[0]); + Иначе + ТекстВопроса = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Для того чтобы не допустить рассогласования данных в программе, + |реквизит %1 не доступен для редактирования. + | + |Перед тем, как разрешить его редактирование, рекомендуется оценить последствия, + |проверив все места использования выбранных элементов (%2) в программе. + |Поиск мест использования может занять длительное время.'"), + РеквизитыПредставление, МассивСсылок.Количество()); + КонецЕсли; КонецЕсли; - Если МассивСсылок.Количество() = 1 Тогда - ОбъектыПредставление = МассивСсылок[0]; - Иначе - ОбъектыПредставление = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'выбранных элементов (%1)'"), МассивСсылок.Количество()); - КонецЕсли; - - ТекстВопроса = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ТекстВопроса, РеквизитыПредставление, ОбъектыПредставление); - Параметры = Новый Структура; Параметры.Вставить("МассивСсылок", МассивСсылок); Параметры.Вставить("СинонимыРеквизитов", СинонимыРеквизитов); @@ -205,6 +214,7 @@ Если ВсеРеквизитыРазблокированы Тогда Форма.Элементы.РазрешитьРедактированиеРеквизитовОбъекта.Доступность = Ложь; + Форма.ОбновитьОтображениеДанных(); КонецЕсли; КонецПроцедуры @@ -266,11 +276,4 @@ КонецПроцедуры -// Устарела. Следует использовать функцию Реквизиты. -Функция РеквизитыКромеНевидимых(Знач Форма, Знач ТолькоЗаблокированные = Истина) Экспорт - - Возврат Реквизиты(Форма, ТолькоЗаблокированные); - -КонецФункции - #КонецОбласти diff --git a/SSL/src/CommonModules/ЗапретРедактированияРеквизитовОбъектовСлужебный/Module.bsl b/SSL/src/CommonModules/ЗапретРедактированияРеквизитовОбъектовСлужебный/Module.bsl new file mode 100644 index 000000000..be76bba23 --- /dev/null +++ b/SSL/src/CommonModules/ЗапретРедактированияРеквизитовОбъектовСлужебный/Module.bsl @@ -0,0 +1,153 @@ +//////////////////////////////////////////////////////////////////////////////// +// Подсистема "Запрет редактирования реквизитов объектов". +// +//////////////////////////////////////////////////////////////////////////////// + +#Область СлужебныйПрограммныйИнтерфейс + +// Проверяет, что для объекта метаданных предусмотрен запрет редактирования реквизитов. +// +// Параметры: +// ПолноеИмя - Строка - полное имя объекта метаданных. +// +Функция ЗапретРедактированияПредусмотрен(ПолноеИмя) Экспорт + + Объекты = Новый Соответствие; + ИнтеграцияСтандартныхПодсистем.ПриОпределенииОбъектовСЗаблокированнымиРеквизитами(Объекты); + ЗапретРедактированияРеквизитовОбъектовПереопределяемый.ПриОпределенииОбъектовСЗаблокированнымиРеквизитами(Объекты); + + Возврат Объекты[ПолноеИмя] <> Неопределено; + +КонецФункции + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +// Настраивает форму объекта для работы подсистемы: +// - добавляет реквизит ПараметрыЗапретаРедактированияРеквизитов для хранения внутренних данных +// - добавляет команду и кнопку РазрешитьРедактированиеРеквизитовОбъекта (если есть права). +// +Процедура ПодготовитьФорму(Форма, Ссылка, ГруппаДляКнопкиЗапрета, ЗаголовокКнопкиЗапрета) Экспорт + + ОписаниеТиповСтрока100 = Новый ОписаниеТипов("Строка",,Новый КвалификаторыСтроки(100)); + ОписаниеТиповБулево = Новый ОписаниеТипов("Булево"); + ОписаниеТиповМассив = Новый ОписаниеТипов("СписокЗначений"); + + РеквизитыФормы = Новый Соответствие; + Для каждого РеквизитФормы Из Форма.ПолучитьРеквизиты() Цикл + РеквизитыФормы.Вставить(РеквизитФормы.Имя, РеквизитФормы.Заголовок); + КонецЦикла; + + // Добавление реквизитов на форму. + ДобавляемыеРеквизиты = Новый Массив; + ДобавляемыеРеквизиты.Добавить(Новый РеквизитФормы("ПараметрыЗапретаРедактированияРеквизитов", Новый ОписаниеТипов("ТаблицаЗначений"))); + ДобавляемыеРеквизиты.Добавить(Новый РеквизитФормы("ИмяРеквизита", ОписаниеТиповСтрока100, "ПараметрыЗапретаРедактированияРеквизитов")); + ДобавляемыеРеквизиты.Добавить(Новый РеквизитФормы("Представление", ОписаниеТиповСтрока100, "ПараметрыЗапретаРедактированияРеквизитов")); + ДобавляемыеРеквизиты.Добавить(Новый РеквизитФормы("РедактированиеРазрешено", ОписаниеТиповБулево, "ПараметрыЗапретаРедактированияРеквизитов")); + ДобавляемыеРеквизиты.Добавить(Новый РеквизитФормы("БлокируемыеЭлементы", ОписаниеТиповМассив, "ПараметрыЗапретаРедактированияРеквизитов")); + ДобавляемыеРеквизиты.Добавить(Новый РеквизитФормы("ПравоРедактирования", ОписаниеТиповБулево, "ПараметрыЗапретаРедактированияРеквизитов")); + + Форма.ИзменитьРеквизиты(ДобавляемыеРеквизиты); + + БлокируемыеРеквизиты = ОбщегоНазначения.МенеджерОбъектаПоСсылке(Ссылка).ПолучитьБлокируемыеРеквизитыОбъекта(); + ВсеРеквизитыБезПраваРедактирования = Истина; + + Для Каждого БлокируемыйРеквизит Из БлокируемыеРеквизиты Цикл + + ОписаниеРеквизита = Форма.ПараметрыЗапретаРедактированияРеквизитов.Добавить(); + + ИнформацияОБР = СтрРазделить(БлокируемыйРеквизит, ";", Ложь); + ОписаниеРеквизита.ИмяРеквизита = ИнформацияОБР[0]; + + Если ИнформацияОБР.Количество() > 1 Тогда + БлокируемыеЭлементы = СтрРазделить(ИнформацияОБР[1], ",", Ложь); + Для Каждого БлокируемыйЭлемент Из БлокируемыеЭлементы Цикл + ОписаниеРеквизита.БлокируемыеЭлементы.Добавить(СокрЛП(БлокируемыйЭлемент)); + КонецЦикла; + КонецЕсли; + + ЗаполнитьСвязанныеЭлементы(ОписаниеРеквизита.БлокируемыеЭлементы, Форма, ОписаниеРеквизита.ИмяРеквизита); + + МетаданныеОбъекта = Ссылка.Метаданные(); + МетаданныеРеквизитаИлиТабличнойЧасти = МетаданныеОбъекта.Реквизиты.Найти(ОписаниеРеквизита.ИмяРеквизита); + СтандартныйРеквизитИлиТабличнаяЧасть = Ложь; + Если МетаданныеРеквизитаИлиТабличнойЧасти = Неопределено Тогда + МетаданныеРеквизитаИлиТабличнойЧасти = МетаданныеОбъекта.ТабличныеЧасти.Найти(ОписаниеРеквизита.ИмяРеквизита); + Если МетаданныеРеквизитаИлиТабличнойЧасти = Неопределено Тогда + Если ОбщегоНазначения.ЭтоСтандартныйРеквизит(МетаданныеОбъекта.СтандартныеРеквизиты, ОписаниеРеквизита.ИмяРеквизита) Тогда + МетаданныеРеквизитаИлиТабличнойЧасти = МетаданныеОбъекта.СтандартныеРеквизиты[ОписаниеРеквизита.ИмяРеквизита]; + СтандартныйРеквизитИлиТабличнаяЧасть = Истина; + КонецЕсли; + КонецЕсли; + КонецЕсли; + + Если МетаданныеРеквизитаИлиТабличнойЧасти = Неопределено Тогда + ОписаниеРеквизита.Представление = РеквизитыФормы[ОписаниеРеквизита.ИмяРеквизита]; + + ОписаниеРеквизита.ПравоРедактирования = Истина; + ВсеРеквизитыБезПраваРедактирования = Ложь; + Иначе + ОписаниеРеквизита.Представление = ?( + ЗначениеЗаполнено(МетаданныеРеквизитаИлиТабличнойЧасти.Синоним), + МетаданныеРеквизитаИлиТабличнойЧасти.Синоним, + МетаданныеРеквизитаИлиТабличнойЧасти.Имя); + + Если СтандартныйРеквизитИлиТабличнаяЧасть Тогда + ПравоРедактирования = ПравоДоступа("Редактирование", МетаданныеОбъекта, , МетаданныеРеквизитаИлиТабличнойЧасти.Имя); + Иначе + ПравоРедактирования = ПравоДоступа("Редактирование", МетаданныеРеквизитаИлиТабличнойЧасти); + КонецЕсли; + Если ПравоРедактирования Тогда + ОписаниеРеквизита.ПравоРедактирования = Истина; + ВсеРеквизитыБезПраваРедактирования = Ложь; + КонецЕсли; + КонецЕсли; + КонецЦикла; + + // Добавление команды и кнопки, если есть права. + Если Пользователи.РолиДоступны("РедактированиеРеквизитовОбъектов") + И ПравоДоступа("Редактирование", Ссылка.Метаданные()) + И НЕ ВсеРеквизитыБезПраваРедактирования Тогда + + // Добавление команды + Команда = Форма.Команды.Добавить("РазрешитьРедактированиеРеквизитовОбъекта"); + Команда.Заголовок = ?(ПустаяСтрока(ЗаголовокКнопкиЗапрета), НСтр("ru = 'Разрешить редактирование реквизитов'"), ЗаголовокКнопкиЗапрета); + Команда.Действие = "Подключаемый_РазрешитьРедактированиеРеквизитовОбъекта"; + Команда.Картинка = БиблиотекаКартинок.РазрешитьРедактированиеРеквизитовОбъекта; + Команда.ИзменяетСохраняемыеДанные = Истина; + + // Добавление кнопки + РодительскаяГруппа = ?(ГруппаДляКнопкиЗапрета <> Неопределено, ГруппаДляКнопкиЗапрета, Форма.КоманднаяПанель); + Кнопка = Форма.Элементы.Добавить("РазрешитьРедактированиеРеквизитовОбъекта", Тип("КнопкаФормы"), РодительскаяГруппа); + Кнопка.ТолькоВоВсехДействиях = Истина; + Кнопка.ИмяКоманды = "РазрешитьРедактированиеРеквизитовОбъекта"; + КонецЕсли; + +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// Вспомогательные процедуры и функции. + +// Для процедуры ПодготовитьФорму. +// Возвращает имя элемента формы по имени реквизита объекта, ссылающегося на него. +Процедура ЗаполнитьСвязанныеЭлементы(МассивСвязанныхЭлементов, Форма, ИмяРеквизита) + + Для Каждого ЭлементФормы Из Форма.Элементы Цикл + + Если ТипЗнч(ЭлементФормы) = Тип("ПолеФормы") И ЭлементФормы.Вид <> ВидПоляФормы.ПолеНадписи + ИЛИ ТипЗнч(ЭлементФормы) = Тип("ТаблицаФормы") Тогда + + РазложенныйПутьКДанным = СтрРазделить(ЭлементФормы.ПутьКДанным, ".", Ложь); + + Если РазложенныйПутьКДанным.Количество() = 2 + И РазложенныйПутьКДанным[1] = ИмяРеквизита Тогда + + МассивСвязанныхЭлементов.Добавить(ЭлементФормы.Имя); + КонецЕсли; + КонецЕсли; + КонецЦикла; + +КонецПроцедуры + +#КонецОбласти diff --git a/SSL/src/CommonModules/ЗапретРедактированияРеквизитовОбъектовСлужебный/ЗапретРедактированияРеквизитовОбъектовСлужебный.mdo b/SSL/src/CommonModules/ЗапретРедактированияРеквизитовОбъектовСлужебный/ЗапретРедактированияРеквизитовОбъектовСлужебный.mdo new file mode 100644 index 000000000..06d589376 --- /dev/null +++ b/SSL/src/CommonModules/ЗапретРедактированияРеквизитовОбъектовСлужебный/ЗапретРедактированияРеквизитовОбъектовСлужебный.mdo @@ -0,0 +1,11 @@ +<?xml version="1.0" encoding="UTF-8"?> +<mdclass:CommonModule xmlns:mdclass="http://g5.1c.ru/v8/dt/metadata/mdclass" uuid="84f05fe4-51d3-49a8-83e7-1cae2028147e"> + <name>ЗапретРедактированияРеквизитовОбъектовСлужебный</name> + <synonym> + <key>ru</key> + <value>Запрет редактирования реквизитов объектов служебный</value> + </synonym> + <server>true</server> + <externalConnection>true</externalConnection> + <clientOrdinaryApplication>true</clientOrdinaryApplication> +</mdclass:CommonModule> diff --git a/SSL/src/CommonModules/ЗапретРедактированияРеквизитовОбъектовСлужебныйКлиент/Module.bsl b/SSL/src/CommonModules/ЗапретРедактированияРеквизитовОбъектовСлужебныйКлиент/Module.bsl index e0ea5b91f..75e9e781e 100644 --- a/SSL/src/CommonModules/ЗапретРедактированияРеквизитовОбъектовСлужебныйКлиент/Module.bsl +++ b/SSL/src/CommonModules/ЗапретРедактированияРеквизитовОбъектовСлужебныйКлиент/Module.bsl @@ -43,13 +43,15 @@ Если ОбщегоНазначенияВызовСервера.ЕстьСсылкиНаОбъект(Параметры.МассивСсылок) Тогда Если Параметры.МассивСсылок.Количество() = 1 Тогда - ТекстСообщения = НСтр("ru = 'Элемент ""%1"" уже используется в других местах в программе. - |Не рекомендуется разрешать редактирование из-за риска рассогласования данных.'"); - ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ТекстСообщения, Параметры.МассивСсылок[0]); + ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Элемент ""%1"" уже используется в других местах в программе. + |Не рекомендуется разрешать редактирование из-за риска рассогласования данных.'"), + Параметры.МассивСсылок[0]); Иначе - ТекстСообщения = НСтр("ru = 'Выбранные элементы (%1) уже используются в других местах в программе. - |Не рекомендуется разрешать редактирование из-за риска рассогласования данных.'"); - ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ТекстСообщения, Параметры.МассивСсылок.Количество()); + ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Выбранные элементы (%1) уже используются в других местах в программе. + |Не рекомендуется разрешать редактирование из-за риска рассогласования данных.'"), + Параметры.МассивСсылок.Количество()); КонецЕсли; Кнопки = Новый СписокЗначений; @@ -64,9 +66,11 @@ ПоказатьОповещениеПользователя(НСтр("ru = 'Редактирование реквизитов разрешено'"), ПолучитьНавигационнуюСсылку(Параметры.МассивСсылок[0]), Параметры.МассивСсылок[0]); Иначе - ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Разрешено редактирование реквизитов объектов (%1)'"), Параметры.МассивСсылок.Количество()); - ПоказатьОповещениеПользователя(НСтр("ru = 'Редактирование реквизитов разрешено'"),, ТекстСообщения); + ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Разрешено редактирование реквизитов объектов (%1)'"), + Параметры.МассивСсылок.Количество()); + + ПоказатьОповещениеПользователя(НСтр("ru = 'Редактирование реквизитов разрешено'"),, + ТекстСообщения); КонецЕсли; ВыполнитьОбработкуОповещения(Параметры.ОбработкаПродолжения, Истина); КонецЕсли; diff --git a/SSL/src/CommonModules/ЗащитаПерсональныхДанных/Module.bsl b/SSL/src/CommonModules/ЗащитаПерсональныхДанных/Module.bsl index 89cfc059a..85b319387 100644 --- a/SSL/src/CommonModules/ЗащитаПерсональныхДанных/Module.bsl +++ b/SSL/src/CommonModules/ЗащитаПерсональныхДанных/Module.bsl @@ -120,20 +120,20 @@ КонецЕсли; ИспользованиеОбластейДанных[СтрокаСведений.ОбластьДанных] = Использование; // Составление описания использования события. - ПоляРегистрации = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(СтрокаСведений.ПоляРегистрации); + ПоляРегистрации = СтрРазделить(СтрокаСведений.ПоляРегистрации, ","); Для Индекс = 0 По ПоляРегистрации.ВГраница() Цикл // Если требуется составить массив полей. - Если Найти(ПоляРегистрации[Индекс], "|") > 0 Тогда - ПоляРегистрации[Индекс] = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(ПоляРегистрации[Индекс], "|"); + Если СтрНайти(ПоляРегистрации[Индекс], "|") > 0 Тогда + ПоляРегистрации[Индекс] = СтрРазделить(ПоляРегистрации[Индекс], "|"); КонецЕсли; КонецЦикла; ОписаниеИспользованияСобытияДоступа = Новый ОписаниеИспользованияСобытияДоступЖурналаРегистрации(СтрокаСведений.Объект); - ОписаниеИспользованияСобытияДоступа.ПоляДоступа = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(СтрокаСведений.ПоляДоступа); + ОписаниеИспользованияСобытияДоступа.ПоляДоступа = СтрРазделить(СтрокаСведений.ПоляДоступа, ","); ОписаниеИспользованияСобытияДоступа.ПоляРегистрации = ПоляРегистрации; ОписанияИспользования.Добавить(ОписаниеИспользованияСобытияДоступа); КонецЦикла; - // СВключение" ("Выключение") использования события "Доступ. Доступ" + // "Включение" ("Выключение") использования события "Доступ. Доступ" // журнала регистрации по созданному описанию. ИспользованиеСобытияДоступ = Новый ИспользованиеСобытияЖурналаРегистрации; ИспользованиеСобытияДоступ.Использование = Использование; @@ -201,17 +201,196 @@ // Процедура ДобавитьКомандуПечатиСогласияНаОбработкуПерсональныхДанных(КомандыПечати) Экспорт - Если Не Пользователи.РолиДоступны("ПодготовкаСогласияНаОбработкуПерсональныхДанных") Тогда + Если Не ПравоДоступа("ИнтерактивноеДобавление", Метаданные.Документы.СогласиеНаОбработкуПерсональныхДанных) Тогда Возврат; КонецЕсли; КомандаПечати = КомандыПечати.Добавить(); КомандаПечати.Идентификатор = "СогласиеНаОбработкуПерсональныхДанных"; - КомандаПечати.Представление = НСтр("ru = 'Согласие на обработку персональных данных...'"); + КомандаПечати.Представление = НСтр("ru = 'Согласие на обработку ПДн...'"); КомандаПечати.Обработчик = "ЗащитаПерсональныхДанныхКлиент.ОткрытьФормуСогласиеНаОбработкуПерсональныхДанных"; КонецПроцедуры +// Функция получает сведения о действующем на указанную дату согласии субъекта на обработку персональных данных. +// Получение сведений производится в привилегированном режиме. +// +// Параметры: +// Субъект - тип ОпределяемыйТип.СубъектПерсональныхДанных, субъект, наличие согласия которого определяется, +// Организация - тип СправочникСсылка.Организации, оператор персональных данных, которому предоставлено согласие, +// Дата - (необязательный), тип Дата, дата, на которую запрашивается состояние, если не указана, выбирается последняя запись. +// ИсключаемыйРегистратор - (необязательный), тип ДокументСсылка, текущий документ, +// передается для того, чтобы при поиске согласия игнорировать выполненные текущим документом движения. +// +// Возвращаемое значение - если обнаружено действующее согласие, тип Структура с полями ДатаПолучения, СрокДействия, ДокументОснование. +// Неопределено, если согласие не предоставлялось, или срок действия предоставленного согласия истек. +// +Функция ДействующееСогласиеНаОбработкуПерсональныхДанных(Субъект, Организация, Знач Дата = Неопределено, ИсключаемыйРегистратор = Неопределено) Экспорт + + Если Дата = Неопределено Тогда + Дата = ТекущаяДатаСеанса(); + КонецЕсли; + + ТекстЗапроса = + "ВЫБРАТЬ + | Согласия.Период КАК ДатаПолучения, + | Согласия.Регистратор КАК ДокументОснование, + | Согласия.Организация, + | Согласия.Субъект, + | Согласия.Действует, + | Согласия.СрокДействия + |ИЗ + | РегистрСведений.СогласияНаОбработкуПерсональныхДанных.СрезПоследних( + | &Дата, + | Организация = &Организация + | И Субъект = &Субъект + | И Регистратор <> &ИсключаемыйРегистратор) КАК Согласия + |ГДЕ + | Согласия.Действует = ИСТИНА + | И (Согласия.СрокДействия >= &Дата + | ИЛИ Согласия.СрокДействия = ДАТАВРЕМЯ(1, 1, 1))"; + + Запрос = Новый Запрос(ТекстЗапроса); + Запрос.УстановитьПараметр("Организация", Организация); + Запрос.УстановитьПараметр("Субъект", Субъект); + Запрос.УстановитьПараметр("Дата", Дата); + Запрос.УстановитьПараметр("ИсключаемыйРегистратор", ИсключаемыйРегистратор); + + УстановитьПривилегированныйРежим(Истина); + РезультатЗапроса = Запрос.Выполнить(); + УстановитьПривилегированныйРежим(Ложь); + + Если РезультатЗапроса.Пустой() Тогда + Возврат Неопределено; + КонецЕсли; + + Выборка = РезультатЗапроса.Выбрать(); + Выборка.Следующий(); + + Согласие = Новый Структура( + "ДатаПолучения, + |СрокДействия, + |ДокументОснование"); + + ЗаполнитьЗначенияСвойств(Согласие, Выборка); + + Возврат Согласие; + +КонецФункции + +#КонецОбласти + +#Область СлужебныйПрограммныйИнтерфейс + +// См. описание этой же процедуры в модуле СтандартныеПодсистемыСервер. +// +Процедура ПриДобавленииОбработчиковСлужебныхСобытий(КлиентскиеОбработчики, СерверныеОбработчики) Экспорт + + // СЕРВЕРНЫЕ ОБРАБОТЧИКИ. + СерверныеОбработчики["СтандартныеПодсистемы.Печать\ПриОпределенииОбъектовСКомандамиПечати"].Добавить("ЗащитаПерсональныхДанных"); + + // Текущие дела. + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ТекущиеДела") Тогда + СерверныеОбработчики["СтандартныеПодсистемы.ТекущиеДела\ПриЗаполненииСпискаТекущихДел"].Добавить( + "ЗащитаПерсональныхДанных"); + КонецЕсли; + +КонецПроцедуры + +// Определяет объекты, в которых есть процедура ДобавитьКомандыПечати(). +// +// Параметры: +// СписокОбъектов - Массив - список менеджеров объектов. +// +Процедура ПриОпределенииОбъектовСКомандамиПечати(СписокОбъектов) Экспорт + + СписокОбъектов.Добавить(Документы.СогласиеНаОбработкуПерсональныхДанных); + +КонецПроцедуры + +// Заполняет список текущих дел пользователя. +// +// Параметры: +// ТекущиеДела - ТаблицаЗначений - описание дел - таблица значений с колонками: +// * Идентификатор - Строка - Внутренний идентификатор дела, используемый механизмом "Текущие дела". +// * ЕстьДела - Булево - Если Истина, дело выводится в списке текущих дел пользователя. +// * Важное - Булево - Если Истина, дело будет выделено красным цветом. +// * Представление - Строка - Представление дела, выводимое пользователю. +// * Количество - Число - Количественный показатель дела, выводится в строке заголовка дела. +// * Форма - Строка - Полный путь к форме, которую необходимо открыть при нажатии на гиперссылку +// дела на панели "Текущие дела". +// * ПараметрыФормы- Структура - Параметры, с которыми нужно открывать форму показателя. +// * Владелец - Строка, ОбъектМетаданных - Строковый идентификатор дела, которое будет владельцем для +// текущего или объект метаданных подсистема. +// * Подсказка - Строка - Текст подсказки. +// +Процедура ПриЗаполненииСпискаТекущихДел(ТекущиеДела) Экспорт + + Если ОбщегоНазначенияПовтИсп.РазделениеВключено() Тогда + Возврат; // Модель сервиса. + КонецЕсли; + + Если Не ПравоДоступа("Изменение", Метаданные.Документы.СогласиеНаОбработкуПерсональныхДанных) Тогда + Возврат; // Нет прав. + КонецЕсли; + + МодульТекущиеДелаСервер = ОбщегоНазначения.ОбщийМодуль("ТекущиеДелаСервер"); + + Разделы = МодульТекущиеДелаСервер.РазделыДляОбъекта("ЖурналДокументов.СогласияНаОбработкуПерсональныхДанных"); + Если Разделы.Количество() = 0 Тогда + // Не вынесены в командный интерфейс. + РазделАдминистрирование = Метаданные.Подсистемы.Найти("Администрирование"); + Если РазделАдминистрирование = Неопределено Тогда + Возврат; + КонецЕсли; + Разделы.Добавить(РазделАдминистрирование); + КонецЕсли; + + ИстекшихСогласий = ИстекшиеСогласияНаОбработкуПерсональныхДанных(); + Для Каждого Раздел Из Разделы Цикл + Дело = ТекущиеДела.Добавить(); + Дело.Идентификатор = "ИстекшиеСогласияНаОбработкуПерсональныхДанных"; + Дело.ЕстьДела = ИстекшихСогласий.Количество() > 0; + Дело.Важное = Истина; + Дело.Владелец = Раздел; + Дело.Представление = НСтр("ru = 'Согласия на обработку ПДн'"); + Дело.Количество = ИстекшихСогласий.Количество(); + Дело.Подсказка = НСтр("ru = 'Истекли согласия на обработку персональных данных (ПДн). Необходимо прекратить обработку ПДн или запросить у субъекта продление согласия на обработку.'"); + Дело.ПараметрыФормы = Новый Структура; + Дело.Форма = "ЖурналДокументов.СогласияНаОбработкуПерсональныхДанных.Форма.ФормаСписка"; + КонецЦикла; + +КонецПроцедуры + +// Содержит описание таблиц и полей объектов для проверки запретов изменения данных. +// +// Параметры: +// ИсточникиДанных - ТаблицаЗначений - с колонками: +// * Таблица - Строка - полное имя объекта метаданных, +// например, Метаданные.Документы.ПриходнаяНакладная.ПолноеИмя(). +// * ПолеДаты - Строка - имя реквизита объекта или табличной части, +// например "Дата", "Товары.ДатаОтгрузки". +// * Раздел - Строка - имя предопределенного элемента +// "ПланВидовХарактеристикСсылка.РазделыДатЗапрета". +// * ПолеОбъекта - Строка - имя реквизита объекта или реквизита табличной части, +// например "Организация", "Товары.Склад". +// +// Для добавления строки имеется процедура ДобавитьСтроку в общем модуле ДатыЗапретаИзменения. +// +Процедура ПриЗаполненииИсточниковДанныхДляПроверкиЗапретаИзменения(ИсточникиДанных) Экспорт + + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ДатыЗапретаИзменения") Тогда + Модуль = ОбщегоНазначения.ОбщийМодуль("ДатыЗапретаИзменения"); + Модуль.ДобавитьСтроку(ИсточникиДанных, + Метаданные.Документы.СогласиеНаОбработкуПерсональныхДанных.ПолноеИмя(), + "ДатаПолучения", "ОбработкаПерсональныхДанных"); + Модуль.ДобавитьСтроку(ИсточникиДанных, + Метаданные.Документы.ОтзывСогласияНаОбработкуПерсональныхДанных.ПолноеИмя(), + "ДатаОтзыва", "ОбработкаПерсональныхДанных"); + КонецЕсли; + +КонецПроцедуры + #КонецОбласти #Область СлужебныеПроцедурыИФункции @@ -225,6 +404,19 @@ ТаблицаСведений.Колонки.Добавить("ПоляДоступа", Новый ОписаниеТипов("Строка")); ТаблицаСведений.Колонки.Добавить("ОбластьДанных", Новый ОписаниеТипов("Строка")); + // Сведения о персональных данных в самой подсистеме. + НовыеСведения = ТаблицаСведений.Добавить(); + НовыеСведения.Объект = "Документ.СогласиеНаОбработкуПерсональныхДанных"; + НовыеСведения.ПоляРегистрации = "Субъект,ФИОСубъекта"; + НовыеСведения.ПоляДоступа = "ФИОСубъекта,АдресСубъекта,ПаспортныеДанные,СрокДействия"; + НовыеСведения.ОбластьДанных = "ОбработкаПерсональныхДанных"; + + НовыеСведения = ТаблицаСведений.Добавить(); + НовыеСведения.Объект = "РегистрСведений.СогласияНаОбработкуПерсональныхДанных"; + НовыеСведения.ПоляРегистрации = "Субъект"; + НовыеСведения.ПоляДоступа = "СрокДействия"; + НовыеСведения.ОбластьДанных = "ОбработкаПерсональныхДанных"; + // Заполнение таблицы сведений потребителями. ЗащитаПерсональныхДанныхПереопределяемый.ЗаполнитьСведенияОПерсональныхДанных(ТаблицаСведений); @@ -240,6 +432,10 @@ ОбластиДанных.Колонки.Добавить("Представление", Новый ОписаниеТипов("Строка")); ОбластиДанных.Колонки.Добавить("Родитель", Новый ОписаниеТипов("Строка")); + НоваяОбласть = ОбластиДанных.Добавить(); + НоваяОбласть.Имя = "ОбработкаПерсональныхДанных"; + НоваяОбласть.Представление = НСтр("ru = 'Обработка ПДн'"); + // Заполнение областей потребителями. ЗащитаПерсональныхДанныхПереопределяемый.ЗаполнитьОбластиПерсональныхДанных(ОбластиДанных); @@ -271,6 +467,83 @@ КонецФункции +Функция ОписаниеДанныхОрганизации() Экспорт + + ДанныеОрганизации = Новый Структура( + "АдресОрганизации, + |ОтветственныйЗаОбработкуПерсональныхДанных"); + + Возврат ДанныеОрганизации; + +КонецФункции + +Функция ОписаниеДанныхСубъекта() Экспорт + + ДанныеСубъекта = Новый Структура( + "Субъект, + |ФИО, + |Адрес, + |ПаспортныеДанные"); + + Возврат ДанныеСубъекта; + +КонецФункции + +Функция ОписаниеРегистрацииСогласияНаОбработкуПерсональныхДанных() Экспорт + + Описание = Новый Структура( + "Организация, + |Субъект, + |ДатаРегистрации, + |Действует, + |СрокДействия"); + + Возврат Описание; + +КонецФункции + +Процедура ЗарегистрироватьСведенияОСогласииНаОбработкуПерсональныхДанных(Движения, ОписаниеРегистрации) Экспорт + + НоваяЗапись = Движения.СогласияНаОбработкуПерсональныхДанных.Добавить(); + + ЗаполнитьЗначенияСвойств(НоваяЗапись, ОписаниеРегистрации); + НоваяЗапись.Период = ОписаниеРегистрации.ДатаРегистрации; + + Движения.СогласияНаОбработкуПерсональныхДанных.Записывать = Истина; + +КонецПроцедуры + +Функция ИстекшиеСогласияНаОбработкуПерсональныхДанных(ДатаОценки = Неопределено) + + ИстекшиеСогласия = Новый Массив; + + Если ДатаОценки = Неопределено Тогда + ДатаОценки = ТекущаяДатаСеанса(); + КонецЕсли; + + Запрос = Новый Запрос( + "ВЫБРАТЬ РАЗРЕШЕННЫЕ + | Согласия.Период КАК ДатаПолучения, + | Согласия.Регистратор КАК ДокументОснование, + | Согласия.Организация, + | Согласия.Субъект, + | Согласия.СрокДействия + |ИЗ + | РегистрСведений.СогласияНаОбработкуПерсональныхДанных.СрезПоследних(&ДатаОценки, ) КАК Согласия + |ГДЕ + | Согласия.СрокДействия <> ДАТАВРЕМЯ(1, 1, 1) + | И Согласия.СрокДействия <= &ДатаОценки"); + + Запрос.УстановитьПараметр("ДатаОценки", ДатаОценки); + Выборка = Запрос.Выполнить().Выбрать(); + Пока Выборка.Следующий() Цикл + ИстекшиеСогласия.Добавить(Выборка.ДокументОснование); + КонецЦикла; + + Возврат ИстекшиеСогласия; + +КонецФункции + //////////////////////////////////////////////////////////////////////////////// // Работа с деревом областей персональных данных. // diff --git a/SSL/src/CommonModules/ЗащитаПерсональныхДанныхКлиент/Module.bsl b/SSL/src/CommonModules/ЗащитаПерсональныхДанныхКлиент/Module.bsl index fcdeef591..f56fd080f 100644 --- a/SSL/src/CommonModules/ЗащитаПерсональныхДанныхКлиент/Module.bsl +++ b/SSL/src/CommonModules/ЗащитаПерсональныхДанныхКлиент/Module.bsl @@ -14,8 +14,91 @@ // Функция ОткрытьФормуСогласиеНаОбработкуПерсональныхДанных(ПараметрыПечати) Экспорт - ОткрытьФорму("Обработка.СогласиеНаОбработкуПерсональныхДанных.Форма", Новый Структура("Субъекты", ПараметрыПечати.ОбъектыПечати), ПараметрыПечати.Форма); + Если ПараметрыПечати.ОбъектыПечати.Количество() = 0 Тогда + Возврат Неопределено; + КонецЕсли; + + Субъект = ПараметрыПечати.ОбъектыПечати[0]; + + ОткрытьФорму("Документ.СогласиеНаОбработкуПерсональныхДанных.ФормаОбъекта", Новый Структура("Субъект", Субъект), ПараметрыПечати.Форма); КонецФункции #КонецОбласти + +#Область СлужебныйПрограммныйИнтерфейс + +Функция ПечатьСогласияНаОбработкуПерсональныхДанных(ПараметрыПечати) Экспорт + + ИмяМенеджераПечати = ПараметрыПечати.МенеджерПечати; + ИмяМакета = ПараметрыПечати.Идентификатор; + СоставДокументов = ПараметрыПечати.ОбъектыПечати; + ФормаИсточник = ПараметрыПечати.Форма; + + ТекстСообщения = ?(СоставДокументов.Количество() > 1, + НСтр("ru = 'Выполняется формирование печатных форм...'"), + НСтр("ru = 'Выполняется формирование печатной формы...'")); + Состояние(ТекстСообщения); + + МакетИДанныеОбъекта = УправлениеПечатьюВызовСервера.МакетыИДанныеОбъектовДляПечати(ИмяМенеджераПечати, ИмяМакета, СоставДокументов); + + Для Каждого Согласие Из СоставДокументов Цикл + НапечататьСогласиеНаОбработкуПерсональныхДанныхСубъекта(Согласие, МакетИДанныеОбъекта, ИмяМакета, МакетИДанныеОбъекта.ЛокальныйКаталогФайловПечати); + КонецЦикла; + +КонецФункции + +Процедура НапечататьСогласиеНаОбработкуПерсональныхДанныхСубъекта(Согласие, МакетИДанныеОбъекта, ИмяМакета, ЛокальныйКаталогФайловПечати) + + ТипМакета = МакетИДанныеОбъекта.Макеты.ТипыМакетов[ИмяМакета]; + ДвоичныеДанныеМакетов = МакетИДанныеОбъекта.Макеты.ДвоичныеДанныеМакетов; + Области = МакетИДанныеОбъекта.Макеты.ОписаниеОбластей; + ДанныеОбъекта = МакетИДанныеОбъекта.Данные[Согласие][ИмяМакета]; + + Макет = УправлениеПечатьюКлиент.ИнициализироватьМакетОфисногоДокумента(ДвоичныеДанныеМакетов[ИмяМакета], ТипМакета, ИмяМакета); + Если Макет = Неопределено Тогда + Возврат; + КонецЕсли; + + ЗакрытьОкноПечатнойФормы = Ложь; + Попытка + ПечатнаяФорма = УправлениеПечатьюКлиент.ИнициализироватьПечатнуюФорму(ТипМакета, Макет.НастройкиСтраницыМакета); + Если ПечатнаяФорма = Неопределено Тогда + УправлениеПечатьюКлиент.ОчиститьСсылки(Макет); + Возврат; + КонецЕсли; + + // Вывод обычных областей с параметрами. + Область = УправлениеПечатьюКлиент.ОбластьМакета(Макет, Области[ИмяМакета]["Заголовок"]); + УправлениеПечатьюКлиент.ПрисоединитьОбластьИЗаполнитьПараметры(ПечатнаяФорма, Область, ДанныеОбъекта, Ложь); + + Область = УправлениеПечатьюКлиент.ОбластьМакета(Макет, Области[ИмяМакета]["НомерДата"]); + УправлениеПечатьюКлиент.ПрисоединитьОбластьИЗаполнитьПараметры(ПечатнаяФорма, Область, ДанныеОбъекта, Ложь); + + Область = УправлениеПечатьюКлиент.ОбластьМакета(Макет, Области[ИмяМакета]["Преамбула"]); + УправлениеПечатьюКлиент.ПрисоединитьОбластьИЗаполнитьПараметры(ПечатнаяФорма, Область, ДанныеОбъекта, Ложь); + + Область = УправлениеПечатьюКлиент.ОбластьМакета(Макет, Области[ИмяМакета]["ОсновнойТекст"]); + УправлениеПечатьюКлиент.ПрисоединитьОбластьИЗаполнитьПараметры(ПечатнаяФорма, Область, ДанныеОбъекта, Ложь); + + Область = УправлениеПечатьюКлиент.ОбластьМакета(Макет, Области[ИмяМакета]["РеквизитыОператора"]); + УправлениеПечатьюКлиент.ПрисоединитьОбластьИЗаполнитьПараметры(ПечатнаяФорма, Область, ДанныеОбъекта, Ложь); + + Область = УправлениеПечатьюКлиент.ОбластьМакета(Макет, Области[ИмяМакета]["РеквизитыСубъекта"]); + УправлениеПечатьюКлиент.ПрисоединитьОбластьИЗаполнитьПараметры(ПечатнаяФорма, Область, ДанныеОбъекта, Ложь); + + Область = УправлениеПечатьюКлиент.ОбластьМакета(Макет, Области[ИмяМакета]["Подпись"]); + УправлениеПечатьюКлиент.ПрисоединитьОбластьИЗаполнитьПараметры(ПечатнаяФорма, Область, ДанныеОбъекта, Ложь); + + УправлениеПечатьюКлиент.ПоказатьДокумент(ПечатнаяФорма); + Исключение + ОбщегоНазначенияКлиентСервер.СообщитьПользователю(КраткоеПредставлениеОшибки(ИнформацияОбОшибке())); + ЗакрытьОкноПечатнойФормы = Истина; + КонецПопытки; + + УправлениеПечатьюКлиент.ОчиститьСсылки(ПечатнаяФорма, ЗакрытьОкноПечатнойФормы); + УправлениеПечатьюКлиент.ОчиститьСсылки(Макет); + +КонецПроцедуры + +#КонецОбласти diff --git a/SSL/src/CommonModules/Интеграция1СБухфон/Module.bsl b/SSL/src/CommonModules/Интеграция1СБухфон/Module.bsl index db97a48fc..8a51cf6ad 100644 --- a/SSL/src/CommonModules/Интеграция1СБухфон/Module.bsl +++ b/SSL/src/CommonModules/Интеграция1СБухфон/Module.bsl @@ -12,7 +12,15 @@ НастройкиПользователя = Интеграция1СБухфонВызовСервера.НастройкиУчетнойЗаписиПользователя(); Элемент.Видимость = НастройкиПользователя.ВидимостьКнопки1СБухфон; - Если ТекущийВариантИнтерфейсаКлиентскогоПриложения() = ВариантИнтерфейсаКлиентскогоПриложения.Версия8_2 Тогда + НастройкиКлиентскогоПриложения = ХранилищеСистемныхНастроек.Загрузить("Общее/НастройкиКлиентскогоПриложения"); + Если НастройкиКлиентскогоПриложения = Неопределено Тогда + ВариантМасштаба = ВариантМасштабаФормКлиентскогоПриложения.Обычный; + Иначе + ВариантМасштаба = НастройкиКлиентскогоПриложения.ВариантМасштабаФормКлиентскогоПриложения; + КонецЕсли; + + Если ТекущийВариантИнтерфейсаКлиентскогоПриложения() = ВариантИнтерфейсаКлиентскогоПриложения.Версия8_2 + Или ВариантМасштаба = ВариантМасштабаФормКлиентскогоПриложения.Компактный Тогда Элемент.Ширина = 20; Элемент.Высота = 3; Иначе diff --git a/SSL/src/CommonModules/ИнтеграцияСтандартныхПодсистем/Module.bsl b/SSL/src/CommonModules/ИнтеграцияСтандартныхПодсистем/Module.bsl index 684252849..4a055692d 100644 --- a/SSL/src/CommonModules/ИнтеграцияСтандартныхПодсистем/Module.bsl +++ b/SSL/src/CommonModules/ИнтеграцияСтандартныхПодсистем/Module.bsl @@ -6,26 +6,28 @@ #Область СлужебныйПрограммныйИнтерфейс //////////////////////////////////////////////////////////////////////////////// -// Интеграция с подсистемой "Запрет редактирования реквизитов объектов". +// Интеграция с подсистемой "БазоваяФункциональность". -// Определить объекты метаданных, в модулях менеджеров которых ограничивается возможность редактирования реквизитов -// с помощью экспортной функции ПолучитьБлокируемыеРеквизитыОбъекта. +// См. описание в процедуре ЗаполнитьВсеПараметрыРаботыРасширений +// общего модуля СтандартныеПодсистемы. // -// Параметры: -// Объекты - Соответствие - в качестве ключа указать полное имя объекта метаданных, -// подключенного к подсистеме "Запрет редактирования реквизитов объектов". -// В качестве значения - пустую строку. -// -Процедура ПриОпределенииОбъектовСЗаблокированнымиРеквизитами(Объекты) Экспорт +Процедура ПриЗаполненииВсехПараметровРаботыРасширений() Экспорт - Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.КонтактнаяИнформация") Тогда - МодульУправлениеКонтактнойИнформациейСлужебный = ОбщегоНазначения.ОбщийМодуль("УправлениеКонтактнойИнформациейСлужебный"); - МодульУправлениеКонтактнойИнформациейСлужебный.ПриОпределенииОбъектовСЗаблокированнымиРеквизитами(Объекты); + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ВариантыОтчетов") Тогда + МодульВариантыОтчетов = ОбщегоНазначения.ОбщийМодуль("ВариантыОтчетов"); + МодульВариантыОтчетов.ПриЗаполненииВсехПараметровРаботыРасширений(); КонецЕсли; - Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.Свойства") Тогда - МодульУправлениеКонтактнойИнформациейСлужебный = ОбщегоНазначения.ОбщийМодуль("УправлениеСвойствамиСлужебный"); - МодульУправлениеКонтактнойИнформациейСлужебный.ПриОпределенииОбъектовСЗаблокированнымиРеквизитами(Объекты); +КонецПроцедуры + +// См. описание в процедуре ОчиститьВсеПараметрыРаботыРасширений +// общего модуля СтандартныеПодсистемы. +// +Процедура ПриОчисткеВсехПараметровРаботыРасширений() Экспорт + + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ВариантыОтчетов") Тогда + МодульВариантыОтчетов = ОбщегоНазначения.ОбщийМодуль("ВариантыОтчетов"); + МодульВариантыОтчетов.ПриОчисткеВсехПараметровРаботыРасширений(); КонецЕсли; КонецПроцедуры @@ -38,7 +40,7 @@ // // Параметры: // Объекты - Соответствие - в качестве ключа указать полное имя объекта метаданных, -// подключенного к подсистеме "Групповое изменение объектов". +// подключенного к подсистеме "Групповое изменение объектов". // Дополнительно в значении могут быть перечислены имена экспортных функций: // "РеквизитыНеРедактируемыеВГрупповойОбработке", // "РеквизитыРедактируемыеВГрупповойОбработке". @@ -50,43 +52,43 @@ СтандартныеПодсистемыСервер.ПриОпределенииОбъектовСРедактируемымиРеквизитами(Объекты); Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.Анкетирование") Тогда - МодульУправлениеКонтактнойИнформациейСлужебный = ОбщегоНазначения.ОбщийМодуль("Анкетирование"); - МодульУправлениеКонтактнойИнформациейСлужебный.ПриОпределенииОбъектовСРедактируемымиРеквизитами(Объекты); + МодульАнкетирование = ОбщегоНазначения.ОбщийМодуль("Анкетирование"); + МодульАнкетирование.ПриОпределенииОбъектовСРедактируемымиРеквизитами(Объекты); КонецЕсли; Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.Банки") Тогда - МодульУправлениеКонтактнойИнформациейСлужебный = ОбщегоНазначения.ОбщийМодуль("РаботаСБанками"); - МодульУправлениеКонтактнойИнформациейСлужебный.ПриОпределенииОбъектовСРедактируемымиРеквизитами(Объекты); + МодульРаботаСБанками = ОбщегоНазначения.ОбщийМодуль("РаботаСБанками"); + МодульРаботаСБанками.ПриОпределенииОбъектовСРедактируемымиРеквизитами(Объекты); КонецЕсли; Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.БизнесПроцессыИЗадачи") Тогда - МодульУправлениеКонтактнойИнформациейСлужебный = ОбщегоНазначения.ОбщийМодуль("БизнесПроцессыИЗадачиСервер"); - МодульУправлениеКонтактнойИнформациейСлужебный.ПриОпределенииОбъектовСРедактируемымиРеквизитами(Объекты); + МодульБизнесПроцессыИЗадачиСервер = ОбщегоНазначения.ОбщийМодуль("БизнесПроцессыИЗадачиСервер"); + МодульБизнесПроцессыИЗадачиСервер.ПриОпределенииОбъектовСРедактируемымиРеквизитами(Объекты); КонецЕсли; Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.Взаимодействия") Тогда - МодульУправлениеКонтактнойИнформациейСлужебный = ОбщегоНазначения.ОбщийМодуль("Взаимодействия"); - МодульУправлениеКонтактнойИнформациейСлужебный.ПриОпределенииОбъектовСРедактируемымиРеквизитами(Объекты); + МодульВзаимодействия = ОбщегоНазначения.ОбщийМодуль("Взаимодействия"); + МодульВзаимодействия.ПриОпределенииОбъектовСРедактируемымиРеквизитами(Объекты); КонецЕсли; Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.Валюты") Тогда - МодульУправлениеКонтактнойИнформациейСлужебный = ОбщегоНазначения.ОбщийМодуль("РаботаСКурсамиВалют"); - МодульУправлениеКонтактнойИнформациейСлужебный.ПриОпределенииОбъектовСРедактируемымиРеквизитами(Объекты); + МодульРаботаСКурсамиВалют = ОбщегоНазначения.ОбщийМодуль("РаботаСКурсамиВалют"); + МодульРаботаСКурсамиВалют.ПриОпределенииОбъектовСРедактируемымиРеквизитами(Объекты); КонецЕсли; Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ВариантыОтчетов") Тогда - МодульУправлениеКонтактнойИнформациейСлужебный = ОбщегоНазначения.ОбщийМодуль("ВариантыОтчетов"); - МодульУправлениеКонтактнойИнформациейСлужебный.ПриОпределенииОбъектовСРедактируемымиРеквизитами(Объекты); + МодульВариантыОтчетов = ОбщегоНазначения.ОбщийМодуль("ВариантыОтчетов"); + МодульВариантыОтчетов.ПриОпределенииОбъектовСРедактируемымиРеквизитами(Объекты); КонецЕсли; Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ДополнительныеОтчетыИОбработки") Тогда - МодульУправлениеКонтактнойИнформациейСлужебный = ОбщегоНазначения.ОбщийМодуль("ДополнительныеОтчетыИОбработки"); - МодульУправлениеКонтактнойИнформациейСлужебный.ПриОпределенииОбъектовСРедактируемымиРеквизитами(Объекты); + МодульДополнительныеОтчетыИОбработки = ОбщегоНазначения.ОбщийМодуль("ДополнительныеОтчетыИОбработки"); + МодульДополнительныеОтчетыИОбработки.ПриОпределенииОбъектовСРедактируемымиРеквизитами(Объекты); КонецЕсли; Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ЗаметкиПользователя") Тогда - МодульУправлениеКонтактнойИнформациейСлужебный = ОбщегоНазначения.ОбщийМодуль("ЗаметкиПользователяСлужебный"); - МодульУправлениеКонтактнойИнформациейСлужебный.ПриОпределенииОбъектовСРедактируемымиРеквизитами(Объекты); + МодульЗаметкиПользователяСлужебный = ОбщегоНазначения.ОбщийМодуль("ЗаметкиПользователяСлужебный"); + МодульЗаметкиПользователяСлужебный.ПриОпределенииОбъектовСРедактируемымиРеквизитами(Объекты); КонецЕсли; Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.КонтактнаяИнформация") Тогда @@ -95,58 +97,85 @@ КонецЕсли; Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ОбменДанными") Тогда - МодульУправлениеКонтактнойИнформациейСлужебный = ОбщегоНазначения.ОбщийМодуль("ОбменДаннымиСервер"); - МодульУправлениеКонтактнойИнформациейСлужебный.ПриОпределенииОбъектовСРедактируемымиРеквизитами(Объекты); + МодульОбменДаннымиСервер = ОбщегоНазначения.ОбщийМодуль("ОбменДаннымиСервер"); + МодульОбменДаннымиСервер.ПриОпределенииОбъектовСРедактируемымиРеквизитами(Объекты); КонецЕсли; Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.Организации") Тогда - МодульУправлениеКонтактнойИнформациейСлужебный = ОбщегоНазначения.ОбщийМодуль("ОрганизацииСлужебный"); - МодульУправлениеКонтактнойИнформациейСлужебный.ПриОпределенииОбъектовСРедактируемымиРеквизитами(Объекты); + МодульОрганизацииСлужебный = ОбщегоНазначения.ОбщийМодуль("ОрганизацииСлужебный"); + МодульОрганизацииСлужебный.ПриОпределенииОбъектовСРедактируемымиРеквизитами(Объекты); КонецЕсли; Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.Пользователи") Тогда - МодульУправлениеКонтактнойИнформациейСлужебный = ОбщегоНазначения.ОбщийМодуль("ПользователиСлужебный"); - МодульУправлениеКонтактнойИнформациейСлужебный.ПриОпределенииОбъектовСРедактируемымиРеквизитами(Объекты); + МодульПользователиСлужебный = ОбщегоНазначения.ОбщийМодуль("ПользователиСлужебный"); + МодульПользователиСлужебный.ПриОпределенииОбъектовСРедактируемымиРеквизитами(Объекты); КонецЕсли; Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаСФайлами") Тогда - МодульУправлениеКонтактнойИнформациейСлужебный = ОбщегоНазначения.ОбщийМодуль("РаботаСФайламиСлужебный"); - МодульУправлениеКонтактнойИнформациейСлужебный.ПриОпределенииОбъектовСРедактируемымиРеквизитами(Объекты); + МодульРаботаСФайламиСлужебный = ОбщегоНазначения.ОбщийМодуль("РаботаСФайламиСлужебный"); + МодульРаботаСФайламиСлужебный.ПриОпределенииОбъектовСРедактируемымиРеквизитами(Объекты); КонецЕсли; Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.РассылкаОтчетов") Тогда - МодульУправлениеКонтактнойИнформациейСлужебный = ОбщегоНазначения.ОбщийМодуль("РассылкаОтчетов"); - МодульУправлениеКонтактнойИнформациейСлужебный.ПриОпределенииОбъектовСРедактируемымиРеквизитами(Объекты); + МодульРассылкаОтчетов = ОбщегоНазначения.ОбщийМодуль("РассылкаОтчетов"); + МодульРассылкаОтчетов.ПриОпределенииОбъектовСРедактируемымиРеквизитами(Объекты); КонецЕсли; Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаСПочтовымиСообщениями") Тогда - МодульУправлениеКонтактнойИнформациейСлужебный = ОбщегоНазначения.ОбщийМодуль("РаботаСПочтовымиСообщениямиСлужебный"); - МодульУправлениеКонтактнойИнформациейСлужебный.ПриОпределенииОбъектовСРедактируемымиРеквизитами(Объекты); + МодульРаботаСПочтовымиСообщениямиСлужебный = ОбщегоНазначения.ОбщийМодуль("РаботаСПочтовымиСообщениямиСлужебный"); + МодульРаботаСПочтовымиСообщениямиСлужебный.ПриОпределенииОбъектовСРедактируемымиРеквизитами(Объекты); КонецЕсли; Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.Свойства") Тогда - МодульУправлениеКонтактнойИнформациейСлужебный = ОбщегоНазначения.ОбщийМодуль("УправлениеСвойствамиСлужебный"); - МодульУправлениеКонтактнойИнформациейСлужебный.ПриОпределенииОбъектовСРедактируемымиРеквизитами(Объекты); + МодульУправлениеСвойствамиСлужебный = ОбщегоНазначения.ОбщийМодуль("УправлениеСвойствамиСлужебный"); + МодульУправлениеСвойствамиСлужебный.ПриОпределенииОбъектовСРедактируемымиРеквизитами(Объекты); КонецЕсли; Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаВМоделиСервиса.ОбменСообщениями") Тогда - МодульУправлениеКонтактнойИнформациейСлужебный = ОбщегоНазначения.ОбщийМодуль("ОбменСообщениями"); - МодульУправлениеКонтактнойИнформациейСлужебный.ПриОпределенииОбъектовСРедактируемымиРеквизитами(Объекты); + МодульОбменСообщениями = ОбщегоНазначения.ОбщийМодуль("ОбменСообщениями"); + МодульОбменСообщениями.ПриОпределенииОбъектовСРедактируемымиРеквизитами(Объекты); КонецЕсли; Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.УправлениеДоступом") Тогда - МодульУправлениеКонтактнойИнформациейСлужебный = ОбщегоНазначения.ОбщийМодуль("УправлениеДоступомСлужебный"); - МодульУправлениеКонтактнойИнформациейСлужебный.ПриОпределенииОбъектовСРедактируемымиРеквизитами(Объекты); + МодульУправлениеДоступомСлужебный = ОбщегоНазначения.ОбщийМодуль("УправлениеДоступомСлужебный"); + МодульУправлениеДоступомСлужебный.ПриОпределенииОбъектовСРедактируемымиРеквизитами(Объекты); КонецЕсли; Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ФайловыеФункции") Тогда - МодульУправлениеКонтактнойИнформациейСлужебный = ОбщегоНазначения.ОбщийМодуль("ФайловыеФункцииСлужебный"); - МодульУправлениеКонтактнойИнформациейСлужебный.ПриОпределенииОбъектовСРедактируемымиРеквизитами(Объекты); + МодульФайловыеФункцииСлужебный = ОбщегоНазначения.ОбщийМодуль("ФайловыеФункцииСлужебный"); + МодульФайловыеФункцииСлужебный.ПриОпределенииОбъектовСРедактируемымиРеквизитами(Объекты); КонецЕсли; Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ЭлектроннаяПодпись") Тогда - МодульУправлениеКонтактнойИнформациейСлужебный = ОбщегоНазначения.ОбщийМодуль("ЭлектроннаяПодписьСлужебный"); - МодульУправлениеКонтактнойИнформациейСлужебный.ПриОпределенииОбъектовСРедактируемымиРеквизитами(Объекты); + МодульЭлектроннаяПодписьСлужебный = ОбщегоНазначения.ОбщийМодуль("ЭлектроннаяПодписьСлужебный"); + МодульЭлектроннаяПодписьСлужебный.ПриОпределенииОбъектовСРедактируемымиРеквизитами(Объекты); + КонецЕсли; + +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// Интеграция с подсистемой "Даты запрета изменения". + +// Содержит описание таблиц и полей объектов для проверки запретов изменения данных. +// +// Параметры: +// ИсточникиДанных - ТаблицаЗначений - с колонками: +// * Таблица - Строка - полное имя объекта метаданных, +// например, Метаданные.Документы.ПриходнаяНакладная.ПолноеИмя(). +// * ПолеДаты - Строка - имя реквизита объекта или табличной части, +// например "Дата", "Товары.ДатаОтгрузки". +// * Раздел - Строка - имя предопределенного элемента +// "ПланВидовХарактеристикСсылка.РазделыДатЗапрета". +// * ПолеОбъекта - Строка - имя реквизита объекта или реквизита табличной части, +// например "Организация", "Товары.Склад". +// +// Для добавления строки имеется процедура ДобавитьСтроку в общем модуле ДатыЗапретаИзменения. +// +Процедура ПриЗаполненииИсточниковДанныхДляПроверкиЗапретаИзменения(ИсточникиДанных) Экспорт + + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ЗащитаПерсональныхДанных") Тогда + Модуль = ОбщегоНазначения.ОбщийМодуль("ЗащитаПерсональныхДанных"); + Модуль.ПриЗаполненииИсточниковДанныхДляПроверкиЗапретаИзменения(ИсточникиДанных); КонецЕсли; КонецПроцедуры @@ -224,5 +253,392 @@ КонецПроцедуры -#КонецОбласти +//////////////////////////////////////////////////////////////////////////////// +// Интеграция с подсистемой "Запрет редактирования реквизитов объектов". +// Определить объекты метаданных, в модулях менеджеров которых ограничивается возможность редактирования реквизитов +// с помощью экспортной функции ПолучитьБлокируемыеРеквизитыОбъекта. +// +// Параметры: +// Объекты - Соответствие - в качестве ключа указать полное имя объекта метаданных, +// подключенного к подсистеме "Запрет редактирования реквизитов объектов". +// В качестве значения - пустую строку. +// +Процедура ПриОпределенииОбъектовСЗаблокированнымиРеквизитами(Объекты) Экспорт + + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.КонтактнаяИнформация") Тогда + МодульУправлениеКонтактнойИнформациейСлужебный = ОбщегоНазначения.ОбщийМодуль("УправлениеКонтактнойИнформациейСлужебный"); + МодульУправлениеКонтактнойИнформациейСлужебный.ПриОпределенииОбъектовСЗаблокированнымиРеквизитами(Объекты); + КонецЕсли; + + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.Свойства") Тогда + МодульУправлениеСвойствамиСлужебный = ОбщегоНазначения.ОбщийМодуль("УправлениеСвойствамиСлужебный"); + МодульУправлениеСвойствамиСлужебный.ПриОпределенииОбъектовСЗаблокированнымиРеквизитами(Объекты); + КонецЕсли; + +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// Интеграция с подсистемой "Пользователи". + +// См. одноименную процедуру в общем модуле ПользователиПереопределяемый. +Процедура ПриОпределенииНастроек(Настройки) Экспорт + + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.УправлениеДоступом") Тогда + МодульУправлениеДоступомСлужебный = ОбщегоНазначения.ОбщийМодуль("УправлениеДоступомСлужебный"); + МодульУправлениеДоступомСлужебный.ПриОпределенииНастроек(Настройки); + КонецЕсли; + +КонецПроцедуры + +// См. процедуру ИзменитьДействияВФорме в общем модуле ПользователиПереопределяемый. +Процедура ПриОпределенииДействийВФорме(Ссылка, ДействияВФорме) Экспорт + + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.УправлениеДоступом") Тогда + МодульУправлениеДоступомСлужебный = ОбщегоНазначения.ОбщийМодуль("УправлениеДоступомСлужебный"); + МодульУправлениеДоступомСлужебный.ПриОпределенииДействийВФорме(Ссылка, ДействияВФорме); + КонецЕсли; + +КонецПроцедуры + +// Переопределяет действие при авторизации администратора локальной ИБ +// или администратора области данных. +// +Процедура ПриАвторизацииАдминистратораПриНачалеРаботыСистемы(Администратор) Экспорт + + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.УправлениеДоступом") Тогда + МодульУправлениеДоступомСлужебный = ОбщегоНазначения.ОбщийМодуль("УправлениеДоступомСлужебный"); + МодульУправлениеДоступомСлужебный.ПриАвторизацииАдминистратораПриНачалеРаботыСистемы(Администратор); + КонецЕсли; + +КонецПроцедуры + +// Переопределяет текст комментария при авторизации пользователя ИБ, +// созданного в конфигураторе с административными правами. +// Вызывается из Пользователи.АвторизоватьТекущегоПользователя(). +// Комментарий записывается в журнал регистрации. +// +// Параметры: +// Комментарий - Строка - начальное значение задано. +// +Процедура ПослеЗаписиАдминистратораПриАвторизации(Комментарий) Экспорт + + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.УправлениеДоступом") Тогда + МодульУправлениеДоступомСлужебный = ОбщегоНазначения.ОбщийМодуль("УправлениеДоступомСлужебный"); + МодульУправлениеДоступомСлужебный.ПослеЗаписиАдминистратораПриАвторизации(Комментарий); + КонецЕсли; + +КонецПроцедуры + +// Доопределяет действия, необходимые после установки пользователя +// информационной базы у пользователя или внешнего пользователя, +// т.е. при изменении реквизита ИдентификаторПользователяИБ на не пустой. +// +// Например, можно обновить роли. +// +// Параметры: +// Ссылка - СправочникСсылка.Пользователи, СправочникСсылка.ВнешниеПользователи - пользователь. +// +Процедура ПослеУстановкиПользователяИБ(Ссылка, ПарольПользователяСервиса) Экспорт + + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.УправлениеДоступом") Тогда + МодульУправлениеДоступомСлужебный = ОбщегоНазначения.ОбщийМодуль("УправлениеДоступомСлужебный"); + МодульУправлениеДоступомСлужебный.ПослеУстановкиПользователяИБ(Ссылка, ПарольПользователяСервиса); + КонецЕсли; + +КонецПроцедуры + +// Позволяет переопределить текст вопроса перед записью первого администратора. +// Вызывается из обработчика ПередЗаписью формы пользователя. +// Вызов выполняется если установлен ЗапретРедактированияРолей() и +// количество пользователей информационной базы равно нулю. +// +// Параметры: +// ТекстВопроса - Строка - текст вопроса, который можно переопределить. +// +Процедура ПриОпределенииТекстаВопросаПередЗаписьюПервогоАдминистратора(ТекстВопроса) Экспорт + + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.УправлениеДоступом") Тогда + МодульУправлениеДоступомСлужебный = ОбщегоНазначения.ОбщийМодуль("УправлениеДоступомСлужебный"); + МодульУправлениеДоступомСлужебный.ПриОпределенииТекстаВопросаПередЗаписьюПервогоАдминистратора(ТекстВопроса); + КонецЕсли; + +КонецПроцедуры + +// Доопределяет действия при записи пользователя, когда он записывается +// совместно с пользователем ИБ, у которого есть роль ПолныеПрава. +// +// Параметры: +// Пользователь - СправочникСсылка.Пользователи (изменение объекта запрещено). +// +Процедура ПриЗаписиАдминистратора(Пользователь) Экспорт + + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.УправлениеДоступом") Тогда + МодульУправлениеДоступомСлужебный = ОбщегоНазначения.ОбщийМодуль("УправлениеДоступомСлужебный"); + МодульУправлениеДоступомСлужебный.ПриЗаписиАдминистратора(Пользователь); + КонецЕсли; + +КонецПроцедуры + +// Доопределяет действия, необходимые после добавления или изменения пользователя, +// группы пользователей, внешнего пользователя, группы внешних пользователей. +// +// Параметры: +// Ссылка - СправочникСсылка.Пользователи, +// СправочникСсылка.ГруппыПользователей, +// СправочникСсылка.ВнешниеПользователи, +// СправочникСсылка.ГруппыВнешнихПользователей - измененный объект. +// +// ЭтоНовый - Булево, если Истина, объект был добавлен, иначе изменен. +// +Процедура ПослеДобавленияИзмененияПользователяИлиГруппы(Ссылка, ЭтоНовый) Экспорт + + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.УправлениеДоступом") Тогда + МодульУправлениеДоступомСлужебный = ОбщегоНазначения.ОбщийМодуль("УправлениеДоступомСлужебный"); + МодульУправлениеДоступомСлужебный.ПослеДобавленияИзмененияПользователяИлиГруппы(Ссылка, ЭтоНовый); + КонецЕсли; + +КонецПроцедуры + +// Доопределяет действия, необходимые после завершения обновления +// связей в регистре СоставыГруппПользователей. +// +// Параметры: +// УчастникиИзменений - Массив значений типов: +// - СправочникСсылка.Пользователи. +// - СправочникСсылка.ВнешниеПользователи. +// Пользователи которые участвовали в изменении состава групп. +// +// ИзмененныеГруппы - Массив значений типов: +// - СправочникСсылка.ГруппыПользователей. +// - СправочникСсылка.ГруппыВнешнихПользователей. +// Группы, состав которых был изменен. +// +Процедура ПослеОбновленияСоставовГруппПользователей(УчастникиИзменений, ИзмененныеГруппы) Экспорт + + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.УправлениеДоступом") Тогда + МодульУправлениеДоступомСлужебный = ОбщегоНазначения.ОбщийМодуль("УправлениеДоступомСлужебный"); + МодульУправлениеДоступомСлужебный.ПослеОбновленияСоставовГруппПользователей(УчастникиИзменений, ИзмененныеГруппы); + КонецЕсли; + + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ДатыЗапретаИзменения") Тогда + МодульДатыЗапретаИзмененияСлужебный = ОбщегоНазначения.ОбщийМодуль("ДатыЗапретаИзмененияСлужебный"); + МодульДатыЗапретаИзмененияСлужебный.ПослеОбновленияСоставовГруппПользователей(УчастникиИзменений, ИзмененныеГруппы); + КонецЕсли; + +КонецПроцедуры + +// Доопределяет действия, необходимые после изменении объекта авторизации внешнего пользователя. +// +// Параметры: +// ВнешнийПользователь - СправочникСсылка.ВнешниеПользователи - внешний пользователь. +// СтарыйОбъектАвторизации - NULL - при добавлении внешнего пользователя. +// - ОпределяемыйТип.ВнешнийПользователь - тип объекта авторизации. +// НовыйОбъектАвторизации - ОпределяемыйТип.ВнешнийПользователь - тип объекта авторизации. +// +Процедура ПослеИзмененияОбъектаАвторизацииВнешнегоПользователя(ВнешнийПользователь, + СтарыйОбъектАвторизации, + НовыйОбъектАвторизации) Экспорт + + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.УправлениеДоступом") Тогда + МодульУправлениеДоступомСлужебный = ОбщегоНазначения.ОбщийМодуль("УправлениеДоступомСлужебный"); + МодульУправлениеДоступомСлужебный.ПослеИзмененияОбъектаАвторизацииВнешнегоПользователя( + ВнешнийПользователь, СтарыйОбъектАвторизации, НовыйОбъектАвторизации); + КонецЕсли; + +КонецПроцедуры + +// Получает варианты переданного отчета и их представления. +// +// Параметры: +// ОтчетМетаданные - Объект метаданных - отчет, для которого получаются варианты отчета. +// ПользовательИнформационнойБазы - Строка - имя пользователя информационной базы. +// СведенияОВариантахОтчетов - ТаблицаЗначений - таблица, в которую сохраняется информация о варианте отчета. +// * КлючОбъекта - Строка - ключ отчета вида "Отчет.НазваниеОтчета". +// * КлючВарианта - Строка - ключ варианта отчета. +// * Представление - Строка - представление варианта отчета. +// * СтандартнаяОбработка - Булево - если Истина - вариант отчета сохранен в стандартном хранилище. +// СтандартнаяОбработка - Булево - если Истина - вариант отчета сохранен в стандартном хранилище. +// +Процедура ПриПолученииПользовательскихВариантовОтчетов(ОтчетМетаданные, ПользовательИнформационнойБазы, СведенияОВариантахОтчетов, СтандартнаяОбработка) Экспорт + + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ВариантыОтчетов") Тогда + МодульВариантыОтчетов = ОбщегоНазначения.ОбщийМодуль("ВариантыОтчетов"); + МодульВариантыОтчетов.ПользовательскиеВариантыОтчетов(ОтчетМетаданные, ПользовательИнформационнойБазы, + СведенияОВариантахОтчетов, СтандартнаяОбработка); + КонецЕсли; + +КонецПроцедуры + +// Удаляет переданный вариант отчета из хранилища вариантов отчетов. +// +// Параметры: +// СведенияОВариантахОтчетов - ТаблицаЗначений - таблица, в которой сохранена информация о варианте отчета. +// * КлючОбъекта - Строка - ключ отчета вида "Отчет.НазваниеОтчета". +// * КлючВарианта - Строка - ключ варианта отчета. +// * Представление - Строка - представление варианта отчета. +// * СтандартнаяОбработка - Булево - если Истина - вариант отчета сохранен в стандартном хранилище. +// ПользовательИнформационнойБазы - Строка - имя пользователя информационной базы у которого очищается вариант отчета. +// СтандартнаяОбработка - Булево - если Истина - вариант отчета сохранен в стандартном хранилище. +// +Процедура ПриУдаленииПользовательскихВариантовОтчета(СведенияОВариантеОтчета, ПользовательИнформационнойБазы, СтандартнаяОбработка) Экспорт + + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ВариантыОтчетов") Тогда + МодульВариантыОтчетов = ОбщегоНазначения.ОбщийМодуль("ВариантыОтчетов"); + МодульВариантыОтчетов.УдалитьПользовательскийВариантОтчета(СведенияОВариантеОтчета, + ПользовательИнформационнойБазы, СтандартнаяОбработка); + КонецЕсли; + +КонецПроцедуры + +// См. одноименную процедуру в общем модуле ПользователиПереопределяемый. +Процедура ПриПолученииПрочихНастроек(СведенияОПользователе, Настройки) Экспорт + + // Добавление настроек дополнительных отчетов и обработок. + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ДополнительныеОтчетыИОбработки") Тогда + МодульДополнительныеОтчетыИОбработки = ОбщегоНазначения.ОбщийМодуль("ДополнительныеОтчетыИОбработки"); + МодульДополнительныеОтчетыИОбработки.ПриПолученииПрочихНастроек(СведенияОПользователе, Настройки); + КонецЕсли; + +КонецПроцедуры + +// См. одноименную процедуру в общем модуле ПользователиПереопределяемый. +Процедура ПриСохраненииПрочихНастроек(СведенияОПользователе, Настройки) Экспорт + + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ДополнительныеОтчетыИОбработки") Тогда + МодульДополнительныеОтчетыИОбработки = ОбщегоНазначения.ОбщийМодуль("ДополнительныеОтчетыИОбработки"); + МодульДополнительныеОтчетыИОбработки.ПриСохраненииПрочихНастроек(СведенияОПользователе, Настройки); + КонецЕсли; + +КонецПроцедуры + +// См. одноименную процедуру в общем модуле ПользователиПереопределяемый. +Процедура ПриУдаленииПрочихНастроек(СведенияОПользователе, Настройки) Экспорт + + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ДополнительныеОтчетыИОбработки") Тогда + МодульДополнительныеОтчетыИОбработки = ОбщегоНазначения.ОбщийМодуль("ДополнительныеОтчетыИОбработки"); + МодульДополнительныеОтчетыИОбработки.ПриУдаленииПрочихНастроек(СведенияОПользователе, Настройки); + КонецЕсли; + +КонецПроцедуры + +// Формирует запрос на изменение адреса электронной почты пользователя сервиса. +// +// Параметры: +// НоваяПочта - Строка - новый адрес электронной почты пользователя. +// Пользователь - СправочникСсылка.Пользователи - пользователь, которому требуется изменить +// адрес электронной почты. +// ПарольПользователяСервиса - Строка - пароль текущего пользователя для доступа к менеджеру сервиса. +// +Процедура ПриСозданииЗапросаНаСменуПочты(Знач НоваяПочта, Знач Пользователь, Знач ПарольПользователяСервиса) Экспорт + + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаВМоделиСервиса.ПользователиВМоделиСервиса") Тогда + МодульПользователиСлужебныйВМоделиСервиса = ОбщегоНазначения.ОбщийМодуль("ПользователиСлужебныйВМоделиСервиса"); + МодульПользователиСлужебныйВМоделиСервиса.СоздатьЗапросНаСменуПочты(НоваяПочта, Пользователь, ПарольПользователяСервиса); + КонецЕсли; + +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// Интеграция с подсистемой "Регламентные задания". + +// См. описание одноименной процедуры в общем модуле РегламентныеЗаданияПереопределяемый. +Процедура ПриОпределенииЗависимостейРегламентныхЗаданий(Зависимости) Экспорт + + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.Банки") Тогда + МодульРаботаСБанками = ОбщегоНазначения.ОбщийМодуль("РаботаСБанками"); + МодульРаботаСБанками.ПриОпределенииЗависимостейРегламентныхЗаданий(Зависимости); + КонецЕсли; + + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.БизнесПроцессыИЗадачи") Тогда + МодульБизнесПроцессыИЗадачиСервер = ОбщегоНазначения.ОбщийМодуль("БизнесПроцессыИЗадачиСервер"); + МодульБизнесПроцессыИЗадачиСервер.ПриОпределенииЗависимостейРегламентныхЗаданий(Зависимости); + КонецЕсли; + + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.Валюты") Тогда + МодульРаботаСКурсамиВалют = ОбщегоНазначения.ОбщийМодуль("РаботаСКурсамиВалют"); + МодульРаботаСКурсамиВалют.ПриОпределенииЗависимостейРегламентныхЗаданий(Зависимости); + КонецЕсли; + + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ВерсионированиеОбъектов") Тогда + МодульВерсионированиеОбъектовСобытия = ОбщегоНазначения.ОбщийМодуль("ВерсионированиеОбъектовСобытия"); + МодульВерсионированиеОбъектовСобытия.ПриОпределенииЗависимостейРегламентныхЗаданий(Зависимости); + КонецЕсли; + + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.Взаимодействия") Тогда + МодульВзаимодействия = ОбщегоНазначения.ОбщийМодуль("Взаимодействия"); + МодульВзаимодействия.ПриОпределенииЗависимостейРегламентныхЗаданий(Зависимости); + КонецЕсли; + + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ОбменДанными") Тогда + МодульОбменДаннымиСервер = ОбщегоНазначения.ОбщийМодуль("ОбменДаннымиСервер"); + МодульОбменДаннымиСервер.ПриОпределенииЗависимостейРегламентныхЗаданий(Зависимости); + КонецЕсли; + + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ПолнотекстовыйПоиск") Тогда + МодульПолнотекстовыйПоискСервер = ОбщегоНазначения.ОбщийМодуль("ПолнотекстовыйПоискСервер"); + МодульПолнотекстовыйПоискСервер.ПриОпределенииЗависимостейРегламентныхЗаданий(Зависимости); + КонецЕсли; + + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.УправлениеДоступом") Тогда + МодульУправлениеДоступомСлужебный = ОбщегоНазначения.ОбщийМодуль("УправлениеДоступомСлужебный"); + МодульУправлениеДоступомСлужебный.ПриОпределенииЗависимостейРегламентныхЗаданий(Зависимости); + КонецЕсли; + + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ФайловыеФункции") Тогда + МодульФайловыеФункцииСлужебный = ОбщегоНазначения.ОбщийМодуль("ФайловыеФункцииСлужебный"); + МодульФайловыеФункцииСлужебный.ПриОпределенииЗависимостейРегламентныхЗаданий(Зависимости); + КонецЕсли; + +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// Интеграция с подсистемой "Управление доступом". + +// Возвращает менеджер временных таблиц, содержащий временную таблицу пользователей +// некоторых дополнительных групп пользователей, например, пользователей групп +// исполнителей задач, которые соответствуют ключам адресации +// (РольИсполнителя + ОсновнойОбъектАдресации + ДополнительныйОбъектАдресации). +// +// При изменении состава дополнительных групп пользователей, необходимо вызвать +// процедуру ОбновитьПользователейГруппИсполнителей в модуле УправлениеДоступом, +// чтобы применить изменения к внутренним данным подсистемы. +// +// Параметры: +// МенеджерВременныхТаблиц - МенеджерВременныхТаблиц, в который можно поместить таблицу: +// ТаблицаГруппИсполнителей с полями: +// ГруппаИсполнителей - Например, +// СправочникСсылка.ГруппыИсполнителейЗадач. +// Пользователь - СправочникСсылка.Пользователи, +// СправочникСсылка.ВнешниеПользователи. +// +// СодержаниеПараметра - Неопределено - параметр не указан, вернуть все данные. +// Строка, когда +// "ГруппыИсполнителей" требуется вернуть +// только составы указанных групп исполнителей. +// "Исполнители" требуется вернуть +// только составы групп исполнителей, которые +// в которые входят указанные исполнители. +// +// ЗначениеПараметра - Неопределено, когда СодержаниеПараметра = Неопределено, +// - Например, СправочникСсылка.ГруппыИсполнителейЗадач, +// когда СодеражаниеПараметра = "ГруппыИсполнителей". +// - СправочникСсылка.Пользователи, +// СправочникСсылка.ВнешниеПользователи, +// когда СодеражаниеПараметра = "Исполнители". +// Массив указанных выше типов. +// +// НетГруппИсполнителей - Булево, если Ложь, МенеджерВременныхТаблиц содержит временную таблицу, иначе нет. +// +Процедура ПриОпределенииГруппИсполнителей(МенеджерВременныхТаблиц, СодержаниеПараметра, + ЗначениеПараметра, НетГруппИсполнителей) Экспорт + + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.БизнесПроцессыИЗадачи") Тогда + МодульБизнесПроцессыИЗадачиСервер = ОбщегоНазначения.ОбщийМодуль("БизнесПроцессыИЗадачиСервер"); + МодульБизнесПроцессыИЗадачиСервер.ПриОпределенииГруппИсполнителей(МенеджерВременныхТаблиц, + СодержаниеПараметра, ЗначениеПараметра, НетГруппИсполнителей); + КонецЕсли; + +КонецПроцедуры + +#КонецОбласти diff --git a/SSL/src/CommonModules/ИнтерфейсыСообщенийВМоделиСервиса/Module.bsl b/SSL/src/CommonModules/ИнтерфейсыСообщенийВМоделиСервиса/Module.bsl index e829b5ac6..f15f40ad5 100644 --- a/SSL/src/CommonModules/ИнтерфейсыСообщенийВМоделиСервиса/Module.bsl +++ b/SSL/src/CommonModules/ИнтерфейсыСообщенийВМоделиСервиса/Module.bsl @@ -22,9 +22,8 @@ ЗарегистрироватьВерсииОтправляемыхСообщений(ИнтерфейсыОтправителя); ИнтерфейсыОтправителя.Свойство(ИмяИнтерфейса, Результат); - Если Результат = Неопределено ИЛИ Результат.Количество() = 0 Тогда - ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Текущая информационная база не поддерживает интерфейс %1!'"), ИмяИнтерфейса); + Если Результат = Неопределено Или Результат.Количество() = 0 Тогда + ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Текущая информационная база не поддерживает интерфейс %1.'"), ИмяИнтерфейса); Иначе Возврат Результат; КонецЕсли; diff --git a/SSL/src/CommonModules/ИнформацияПриЗапуске/Module.bsl b/SSL/src/CommonModules/ИнформацияПриЗапуске/Module.bsl index 0928cc763..7676a495f 100644 --- a/SSL/src/CommonModules/ИнформацияПриЗапуске/Module.bsl +++ b/SSL/src/CommonModules/ИнформацияПриЗапуске/Module.bsl @@ -25,7 +25,7 @@ Событие = "СтандартныеПодсистемы.ОбновлениеВерсииИБ\ПослеОбновленияИнформационнойБазы"; СерверныеОбработчики[Событие].Добавить(СерверныйМодуль); - Событие = "СтандартныеПодсистемы.БазоваяФункциональность\ПриДобавленииПараметровРаботыКлиентскойЛогикиСтандартныхПодсистемПриЗапуске"; + Событие = "СтандартныеПодсистемы.БазоваяФункциональность\ПриДобавленииПараметровРаботыКлиентаПриЗапуске"; СерверныеОбработчики[Событие].Добавить(СерверныйМодуль); КонецПроцедуры @@ -91,7 +91,7 @@ // Параметры: // Параметры - Структура - Параметры запуска. // -Процедура ПриДобавленииПараметровРаботыКлиентскойЛогикиСтандартныхПодсистемПриЗапуске(Параметры) Экспорт +Процедура ПриДобавленииПараметровРаботыКлиентаПриЗапуске(Параметры) Экспорт Параметры.Вставить("ИнформацияПриЗапуске", Новый ФиксированнаяСтруктура(ГлобальныеНастройки())); КонецПроцедуры @@ -115,27 +115,30 @@ // [*] Актуализирует данные первого показа. Процедура ОбновитьКэшПервогоПоказа(НосительМакетов) Экспорт - Кэш = КэшДляПервогоПоказа(НосительМакетов); + Кэш = КэшДляПервогоПоказа(НосительМакетов); // Полная информация о пакетах, включая данные страниц. Приоритетные = Кэш.Приоритетные; Кэш.Удалить("Приоритетные"); - НомерПакета = 0; НаборЗаписей = РегистрыСведений.ПакетыИнформацииПриЗапуске.СоздатьНаборЗаписей(); + // Данные из кэша "перебрасываются" в регистр, а в кэше остаются только указатели. + НомерПакета = 0; ПодготовленныеПакеты = Новый Соответствие; Для Каждого ИмяМакета Из Приоритетные Цикл СоставПакета = ИзвлечьФайлыПакета(НосительМакетов, ИмяМакета); - НомерПакета = НомерПакета + 1; - ИмяПакета = "ПодготовленныйПакет" + Формат(НомерПакета, "ЧН=; ЧГ="); + // Запись данных пакета в регистр. Запись = НаборЗаписей.Добавить(); Запись.Номер = НомерПакета; Запись.Состав = Новый ХранилищеЗначения(СоставПакета); + + // Замена данных пакета на его номер (его "адрес" в регистре). ПодготовленныеПакеты.Вставить(ИмяМакета, НомерПакета); КонецЦикла; Кэш.Вставить("ПодготовленныеПакеты", ПодготовленныеПакеты); + // Теперь в кэше осталась только "легкая" структурированная информация; Она записывается в регистр под номером 0. Запись = НаборЗаписей.Добавить(); Запись.Номер = 0; Запись.Состав = Новый ХранилищеЗначения(Кэш); @@ -223,20 +226,22 @@ КонецЕсли; // Пропуск если данные не подходят к конфигурации. - Если КонфигурацияБазовая Тогда - ПоказыватьВБазовой = ДанныеЯчейки(ТабличныйДокумент, ПрефиксСтроки, 9, "Булево", Истина); - Если Не ПоказыватьВБазовой Тогда - Продолжить; - КонецЕсли; - ИначеЕсли КонфигурацияМоделиСервиса Тогда + Если КонфигурацияМоделиСервиса Тогда ПоказыватьВМоделиСервиса = ДанныеЯчейки(ТабличныйДокумент, ПрефиксСтроки, 10, "Булево", Истина); Если Не ПоказыватьВМоделиСервиса Тогда Продолжить; КонецЕсли; Иначе - ПоказыватьВПроф = ДанныеЯчейки(ТабличныйДокумент, ПрефиксСтроки, 8, "Булево", Истина); - Если Не ПоказыватьВПроф Тогда - Продолжить; + Если КонфигурацияБазовая Тогда + ПоказыватьВБазовой = ДанныеЯчейки(ТабличныйДокумент, ПрефиксСтроки, 9, "Булево", Истина); + Если Не ПоказыватьВБазовой Тогда + Продолжить; + КонецЕсли; + Иначе + ПоказыватьВПроф = ДанныеЯчейки(ТабличныйДокумент, ПрефиксСтроки, 8, "Булево", Истина); + Если Не ПоказыватьВПроф Тогда + Продолжить; + КонецЕсли; КонецЕсли; КонецЕсли; diff --git a/SSL/src/CommonModules/ИнформацияПриЗапускеКлиент/Module.bsl b/SSL/src/CommonModules/ИнформацияПриЗапускеКлиент/Module.bsl index 767219635..97312adb8 100644 --- a/SSL/src/CommonModules/ИнформацияПриЗапускеКлиент/Module.bsl +++ b/SSL/src/CommonModules/ИнформацияПриЗапускеКлиент/Module.bsl @@ -20,7 +20,14 @@ // Вызывается из обработчика ожидания, открывает окно информации. Процедура Показать() Экспорт + + Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.ОценкаПроизводительности") Тогда + МодульОценкаПроизводительностиКлиентСервер = ОбщегоНазначенияКлиент.ОбщийМодуль("ОценкаПроизводительностиКлиентСервер"); + МодульОценкаПроизводительностиКлиентСервер.НачатьЗамерВремени("ВремяОткрытияИнформацииПриЗапуске"); + КонецЕсли; + ОткрытьФорму("Обработка.ИнформацияПриЗапуске.Форма"); + КонецПроцедуры #КонецОбласти diff --git a/SSL/src/CommonModules/КалендарныеГрафики/Module.bsl b/SSL/src/CommonModules/КалендарныеГрафики/Module.bsl index a19a98caa..fa2481a29 100644 --- a/SSL/src/CommonModules/КалендарныеГрафики/Module.bsl +++ b/SSL/src/CommonModules/КалендарныеГрафики/Module.bsl @@ -94,9 +94,7 @@ Если Выборка.ДатаПоКалендарю = Неопределено Тогда СообщениеОбОшибке = НСтр("ru = 'Производственный календарь «%1» не заполнен с даты %2 на указанное количество рабочих дней.'"); Если ВызыватьИсключение Тогда - ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - СообщениеОбОшибке, - ГрафикРаботы, Формат(ДатаОт, "ДЛФ=D")); + ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(СообщениеОбОшибке, ГрафикРаботы, Формат(ДатаОт, "ДЛФ=D")); Иначе Возврат Неопределено; КонецЕсли; @@ -184,8 +182,7 @@ |ВЫБРАТЬ | ДАТАВРЕМЯ(%1)"; КонецЕсли; - ТекстЗапроса = ТекстЗапроса + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - ШаблонОбъединения, Формат(ДатаГрафика, "ДФ='гггг, ММ, д'")); + ТекстЗапроса = ТекстЗапроса + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонОбъединения, Формат(ДатаГрафика, "ДФ='гггг, ММ, д'")); КонецЦикла; МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц; @@ -277,9 +274,7 @@ Если Результат.Пустой() Тогда Если ВызыватьИсключение Тогда СообщениеОбОшибке = НСтр("ru = 'График работы «%1» не заполнен на период %2.'"); - ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - СообщениеОбОшибке, - ГрафикРаботы, ПредставлениеПериода(ДатаНачала, КонецДня(ДатаОкончания))); + ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(СообщениеОбОшибке, ГрафикРаботы, ПредставлениеПериода(ДатаНачала, КонецДня(ДатаОкончания))); Иначе Возврат Неопределено; КонецЕсли; @@ -402,10 +397,8 @@ Продолжить; КонецЕсли; Если ВызыватьИсключение Тогда - ТекстИсключения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Невозможно определить ближайшую рабочую дату для даты %1, возможно, график работы не заполнен.'"), - Формат(Выборка.Дата, "ДЛФ=D")); - ВызватьИсключение(ТекстИсключения); + ТекстСообщения = НСтр("ru = 'Невозможно определить ближайшую рабочую дату для даты %1, возможно, график работы не заполнен.'"); + ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ТекстСообщения, Формат(Выборка.Дата, "ДЛФ=D")); Иначе Возврат Неопределено; КонецЕсли; @@ -667,14 +660,14 @@ Обработчик.Процедура = "КалендарныеГрафики.ОбновитьИспользованиеНесколькихПроизводственныхКалендарей"; Обработчик = Обработчики.Добавить(); - Обработчик.Версия = "2.2.4.26"; - Обработчик.Процедура = "КалендарныеГрафики.ОбновитьДанныеПроизводственныхКалендарей"; + Обработчик.Версия = "2.3.1.2"; + Обработчик.Процедура = "КалендарныеГрафики.УдалитьОшибочныеДанныеПроизводственногоКалендаря"; Обработчик.РежимВыполнения = "Монопольно"; Обработчик.ОбщиеДанные = Истина; Обработчик = Обработчики.Добавить(); - Обработчик.Версия = "2.2.5.23"; - Обработчик.Процедура = "КалендарныеГрафики.УдалитьОшибочныеДанныеПроизводственногоКалендаря"; + Обработчик.Версия = "2.3.1.83"; + Обработчик.Процедура = "КалендарныеГрафики.ОбновитьДанныеПроизводственныхКалендарей"; Обработчик.РежимВыполнения = "Монопольно"; Обработчик.ОбщиеДанные = Истина; diff --git a/SSL/src/CommonModules/КалендарныеГрафикиСлужебныйВМоделиСервиса/Module.bsl b/SSL/src/CommonModules/КалендарныеГрафикиСлужебныйВМоделиСервиса/Module.bsl index 14aa60fb9..42c9f2123 100644 --- a/SSL/src/CommonModules/КалендарныеГрафикиСлужебныйВМоделиСервиса/Module.bsl +++ b/SSL/src/CommonModules/КалендарныеГрафикиСлужебныйВМоделиСервиса/Module.bsl @@ -174,9 +174,9 @@ // // Параметры: // УсловияОбновления - ТаблицаЗначений с условиями обновления графиков. -// ИдентификаторФайла - УникальныйИдентификатор файла обрабатываемых курсов. +// ИдентификаторФайла - УникальныйИдентификатор файла обрабатываемых поставляемых данных. // -Процедура ОбновитьГрафикиРаботы(Знач УсловияОбновления, Знач ИдентификаторОбновления) Экспорт +Процедура ОбновитьГрафикиРаботы(Знач УсловияОбновления, Знач ИдентификаторФайла) Экспорт Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ГрафикиРаботы") Тогда @@ -184,11 +184,11 @@ // Получение областей данных для обработки. ОбластиДляОбновления = ПоставляемыеДанные.ОбластиТребующиеОбработки( - ИдентификаторОбновления, "ДанныеПроизводственныхКалендарей"); + ИдентификаторФайла, "ДанныеПроизводственныхКалендарей"); // Обновление графиков работы по областям данных. РаспространитьДанныеПроизводственныхКалендарейПоГрафикамРаботы(УсловияОбновления, ОбластиДляОбновления, - ИдентификаторОбновления, "ДанныеПроизводственныхКалендарей", МодульГрафикиРаботы); + ИдентификаторФайла, "ДанныеПроизводственныхКалендарей", МодульГрафикиРаботы); КонецЕсли; @@ -231,8 +231,7 @@ Если ЧтениеXML.ТипУзла <> ТипУзлаXML.НачалоЭлемента Или ЧтениеXML.Имя <> Имя Тогда ЗаписьЖурналаРегистрации(НСтр("ru = 'Поставляемые данные.Календарные графики'", Метаданные.ОсновнойЯзык.КодЯзыка), УровеньЖурналаРегистрации.Ошибка, - ,, СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Неверный формат файла данных. Ожидается начало элемента %1'"), Имя)); + ,, СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Неверный формат файла данных. Ожидается начало элемента %1'"), Имя)); Возврат Ложь; КонецЕсли; @@ -245,8 +244,7 @@ Если ЧтениеXML.ТипУзла <> ТипУзлаXML.КонецЭлемента Или ЧтениеXML.Имя <> Имя Тогда ЗаписьЖурналаРегистрации(НСтр("ru = 'Поставляемые данные.Календарные графики'", Метаданные.ОсновнойЯзык.КодЯзыка), УровеньЖурналаРегистрации.Ошибка, - ,, СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Неверный формат файла данных. Ожидается конец элемента %1'"), Имя)); + ,, СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Неверный формат файла данных. Ожидается конец элемента %1'"), Имя)); Возврат Ложь; КонецЕсли; diff --git a/SSL/src/CommonModules/КонтрольДинамическогоОбновленияКонфигурацииВызовСервера/Module.bsl b/SSL/src/CommonModules/КонтрольДинамическогоОбновленияКонфигурацииВызовСервера/Module.bsl index 4d5a98cd8..02ad9fc25 100644 --- a/SSL/src/CommonModules/КонтрольДинамическогоОбновленияКонфигурацииВызовСервера/Module.bsl +++ b/SSL/src/CommonModules/КонтрольДинамическогоОбновленияКонфигурацииВызовСервера/Module.bsl @@ -9,7 +9,8 @@ // Функция КонфигурацияБДБылаИзмененаДинамически() Экспорт - Возврат КонфигурацияБазыДанныхИзмененаДинамически(); + Возврат КонфигурацияБазыДанныхИзмененаДинамически() + Или СтандартныеПодсистемыСервер.РасширенияИзмененыДинамически(); КонецФункции diff --git a/SSL/src/CommonModules/КонтрольДинамическогоОбновленияКонфигурацииКлиент/Module.bsl b/SSL/src/CommonModules/КонтрольДинамическогоОбновленияКонфигурацииКлиент/Module.bsl deleted file mode 100644 index dca25a6a6..000000000 --- a/SSL/src/CommonModules/КонтрольДинамическогоОбновленияКонфигурацииКлиент/Module.bsl +++ /dev/null @@ -1,56 +0,0 @@ -//////////////////////////////////////////////////////////////////////////////// -// Подсистема "Контроль динамического обновления конфигурации". -// -//////////////////////////////////////////////////////////////////////////////// - -#Область СлужебныйПрограммныйИнтерфейс - -// Выполняется при интерактивном начале работы пользователя с областью данных или в локальном режиме. -// Вызывается после завершения действий ПриНачалеРаботыСистемы. -// Используется для подключения обработчиков ожидания, которые не должны вызываться -// в случае интерактивных действий перед и при начале работы системы. -// -Процедура ПослеНачалаРаботыСистемы() Экспорт - - ПодключитьОбработчикОжидания("ОбработчикОжиданияПроверкиДинамическогоИзмененияИБ", 20 * 60); // раз в 20 минут - -КонецПроцедуры - -#КонецОбласти - -#Область СлужебныеПроцедурыИФункции - -// Обработчик ожидания проверяет, что информационная база была обновлена динамически, и -// сообщает об этом пользователю. -// -Процедура ОбработчикОжиданияПроверкиДинамическогоОбновления() Экспорт - - Если Не КонтрольДинамическогоОбновленияКонфигурацииВызовСервера.КонфигурацияБДБылаИзмененаДинамически() Тогда - Возврат; - КонецЕсли; - - ОтключитьОбработчикОжидания("ОбработчикОжиданияПроверкиДинамическогоИзмененияИБ"); - - ТекстСообщения = НСтр("ru = 'Версия программы обновлена (внесены изменения в конфигурацию информационной базы). - |Для дальнейшей работы рекомендуется перезапустить программу. - |Перезапустить?'"); - - ОписаниеОповещения = Новый ОписаниеОповещения("ОбработчикОжиданияПроверкиДинамическогоОбновленияЗавершение", ЭтотОбъект); - ПоказатьВопрос(ОписаниеОповещения, ТекстСообщения, РежимДиалогаВопрос.ДаНет); - -КонецПроцедуры - -// Обработчик оповещения, вызываемый из процедуры ОбработчикОжиданияПроверкиДинамическогоИзмененияИБ. -// -Процедура ОбработчикОжиданияПроверкиДинамическогоОбновленияЗавершение(Ответ, ДополнительныеПараметры) Экспорт - - Если Ответ = КодВозвратаДиалога.Да Тогда - СтандартныеПодсистемыКлиент.ПропуститьПредупреждениеПередЗавершениемРаботыСистемы(); - ЗавершитьРаботуСистемы(Истина, Истина); - КонецЕсли; - - ПодключитьОбработчикОжидания("ОбработчикОжиданияПроверкиДинамическогоИзмененияИБ", 20 * 60); // раз в 20 минут - -КонецПроцедуры - -#КонецОбласти 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 37e3b6ba6..6497438b3 100644 --- a/SSL/src/CommonModules/КонтрольДинамическогоОбновленияКонфигурацииГлобальный/Module.bsl +++ b/SSL/src/CommonModules/КонтрольДинамическогоОбновленияКонфигурацииСлужебный/Module.bsl @@ -8,10 +8,12 @@ // Обработчик ожидания проверяет, что информационная база была обновлена динамически, и // сообщает об этом пользователю. // -Процедура ОбработчикОжиданияПроверкиДинамическогоИзмененияИБ() Экспорт +Процедура ПриВыполненииСтандартныхПериодическихПроверокНаСервере(Параметры) Экспорт - КонтрольДинамическогоОбновленияКонфигурацииКлиент.ОбработчикОжиданияПроверкиДинамическогоОбновления(); + Параметры.Вставить("КонфигурацияБазыДанныхИзмененаДинамически", + КонтрольДинамическогоОбновленияКонфигурацииВызовСервера.КонфигурацияБДБылаИзмененаДинамически()); КонецПроцедуры + #КонецОбласти diff --git a/SSL/src/CommonModules/КонтрольДинамическогоОбновленияКонфигурацииГлобальный/КонтрольДинамическогоОбновленияКонфигурацииГлобальный.mdo b/SSL/src/CommonModules/КонтрольДинамическогоОбновленияКонфигурацииСлужебный/КонтрольДинамическогоОбновленияКонфигурацииСлужебный.mdo similarity index 66% rename from SSL/src/CommonModules/КонтрольДинамическогоОбновленияКонфигурацииГлобальный/КонтрольДинамическогоОбновленияКонфигурацииГлобальный.mdo rename to SSL/src/CommonModules/КонтрольДинамическогоОбновленияКонфигурацииСлужебный/КонтрольДинамическогоОбновленияКонфигурацииСлужебный.mdo index f1179babe..cf2d60611 100644 --- a/SSL/src/CommonModules/КонтрольДинамическогоОбновленияКонфигурацииГлобальный/КонтрольДинамическогоОбновленияКонфигурацииГлобальный.mdo +++ b/SSL/src/CommonModules/КонтрольДинамическогоОбновленияКонфигурацииСлужебный/КонтрольДинамическогоОбновленияКонфигурацииСлужебный.mdo @@ -1,11 +1,11 @@ <?xml version="1.0" encoding="UTF-8"?> <mdclass:CommonModule xmlns:mdclass="http://g5.1c.ru/v8/dt/metadata/mdclass" uuid="8aaf780f-ed74-4f44-9598-c14180053ff9"> - <name>КонтрольДинамическогоОбновленияКонфигурацииГлобальный</name> + <name>КонтрольДинамическогоОбновленияКонфигурацииСлужебный</name> <synonym> <key>ru</key> - <value>Контроль динамического обновления конфигурации глобальный</value> + <value>Контроль динамического обновления конфигурации служебный</value> </synonym> - <global>true</global> - <clientManagedApplication>true</clientManagedApplication> + <server>true</server> + <externalConnection>true</externalConnection> <clientOrdinaryApplication>true</clientOrdinaryApplication> </mdclass:CommonModule> diff --git a/SSL/src/CommonModules/КонтрольДинамическогоОбновленияКонфигурацииСлужебныйКлиент/Module.bsl b/SSL/src/CommonModules/КонтрольДинамическогоОбновленияКонфигурацииСлужебныйКлиент/Module.bsl new file mode 100644 index 000000000..81168882e --- /dev/null +++ b/SSL/src/CommonModules/КонтрольДинамическогоОбновленияКонфигурацииСлужебныйКлиент/Module.bsl @@ -0,0 +1,46 @@ +//////////////////////////////////////////////////////////////////////////////// +// Подсистема "Контроль динамического обновления конфигурации". +// +//////////////////////////////////////////////////////////////////////////////// + +#Область СлужебныеПроцедурыИФункции + +// Обработчик ожидания проверяет, что информационная база была обновлена динамически, и +// сообщает об этом пользователю. +// +Процедура ПриВыполненииСтандартныхПериодическихПроверок(Параметры, ОбработкаПродолжения) Экспорт + + Контекст = Новый Структура; + Контекст.Вставить("ОбработкаПродолжения", ОбработкаПродолжения); + + Если Не Параметры.КонфигурацияБазыДанныхИзмененаДинамически Тогда + ВыполнитьОбработкуОповещения(Контекст.ОбработкаПродолжения); + Возврат; + КонецЕсли; + + ТекстСообщения = + НСтр("ru = 'Версия программы обновлена (внесены изменения в конфигурацию информационной базы). + |Для дальнейшей работы рекомендуется перезапустить программу. + |Перезапустить?'"); + + ОписаниеОповещения = Новый ОписаниеОповещения( + "ПриВыполненииСтандартныхПериодическихПроверокЗавершение", ЭтотОбъект, Контекст); + + ПоказатьВопрос(ОписаниеОповещения, ТекстСообщения, РежимДиалогаВопрос.ДаНет); + +КонецПроцедуры + +// Продолжение процедуры ПриВыполненииСтандартныхПериодическихПроверок. +Процедура ПриВыполненииСтандартныхПериодическихПроверокЗавершение(Ответ, Контекст) Экспорт + + Если Ответ = КодВозвратаДиалога.Да Тогда + СтандартныеПодсистемыКлиент.ПропуститьПредупреждениеПередЗавершениемРаботыСистемы(); + ЗавершитьРаботуСистемы(Истина, Истина); + Возврат; + КонецЕсли; + + ВыполнитьОбработкуОповещения(Контекст.ОбработкаПродолжения); + +КонецПроцедуры + +#КонецОбласти diff --git a/SSL/src/CommonModules/КонтрольДинамическогоОбновленияКонфигурацииКлиент/КонтрольДинамическогоОбновленияКонфигурацииКлиент.mdo b/SSL/src/CommonModules/КонтрольДинамическогоОбновленияКонфигурацииСлужебныйКлиент/КонтрольДинамическогоОбновленияКонфигурацииСлужебныйКлиент.mdo similarity index 76% rename from SSL/src/CommonModules/КонтрольДинамическогоОбновленияКонфигурацииКлиент/КонтрольДинамическогоОбновленияКонфигурацииКлиент.mdo rename to SSL/src/CommonModules/КонтрольДинамическогоОбновленияКонфигурацииСлужебныйКлиент/КонтрольДинамическогоОбновленияКонфигурацииСлужебныйКлиент.mdo index d620f06dd..b6852172c 100644 --- a/SSL/src/CommonModules/КонтрольДинамическогоОбновленияКонфигурацииКлиент/КонтрольДинамическогоОбновленияКонфигурацииКлиент.mdo +++ b/SSL/src/CommonModules/КонтрольДинамическогоОбновленияКонфигурацииСлужебныйКлиент/КонтрольДинамическогоОбновленияКонфигурацииСлужебныйКлиент.mdo @@ -1,9 +1,9 @@ <?xml version="1.0" encoding="UTF-8"?> <mdclass:CommonModule xmlns:mdclass="http://g5.1c.ru/v8/dt/metadata/mdclass" uuid="dbd4d09d-f410-4453-9143-bd72da5464cc"> - <name>КонтрольДинамическогоОбновленияКонфигурацииКлиент</name> + <name>КонтрольДинамическогоОбновленияКонфигурацииСлужебныйКлиент</name> <synonym> <key>ru</key> - <value>Контроль динамического обновления конфигурации клиент</value> + <value>Контроль динамического обновления конфигурации служебный клиент</value> </synonym> <clientManagedApplication>true</clientManagedApplication> <clientOrdinaryApplication>true</clientOrdinaryApplication> diff --git a/SSL/src/CommonModules/КурсыВалютСлужебныйВМоделиСервиса/Module.bsl b/SSL/src/CommonModules/КурсыВалютСлужебныйВМоделиСервиса/Module.bsl index e825c1eb3..2920cae8c 100644 --- a/SSL/src/CommonModules/КурсыВалютСлужебныйВМоделиСервиса/Module.bsl +++ b/SSL/src/CommonModules/КурсыВалютСлужебныйВМоделиСервиса/Module.bsl @@ -117,7 +117,7 @@ // при подключении ИБ к МС, // при обновлении ИБ, когда после обновления потребовались валюты, которые были не нужны до этого // при ручной загрузке файла курсов в МС. - // Во всех случаях сбрасываем кеш, перезаписываются все курсы во всех областях данных. + // Во всех случаях сбрасываем кэш, перезаписываются все курсы во всех областях данных. ИначеЕсли Дескриптор.DataType = "КурсыВалют" Тогда Загружать = Истина; КонецЕсли; diff --git a/SSL/src/CommonModules/НапоминанияПользователяКлиент/Module.bsl b/SSL/src/CommonModules/НапоминанияПользователяКлиент/Module.bsl index bb1eed4ac..92ed4b0a4 100644 --- a/SSL/src/CommonModules/НапоминанияПользователяКлиент/Module.bsl +++ b/SSL/src/CommonModules/НапоминанияПользователяКлиент/Module.bsl @@ -80,7 +80,19 @@ // Открывает форму оповещения Процедура ОткрытьФормуОповещения() Экспорт - ФормаОповещения = НапоминанияПользователяКлиентПовтИсп.ПолучитьФормуОповещения(); + // Хранение формы в переменной требуется для предотвращения открытия дублей формы, + // а также для уменьшения количества серверных вызовов. + ИмяПараметра = "СтандартныеПодсистемы.ФормаОповещения"; + Если ПараметрыПриложения[ИмяПараметра] = Неопределено Тогда + #Если ВебКлиент Тогда + Окно = Неопределено; + #Иначе + Окно = ВариантОткрытияОкна.ОтдельноеОкно; + #КонецЕсли + ИмяФормыОповещения = "РегистрСведений.НапоминанияПользователя.Форма.ФормаОповещения"; + ПараметрыПриложения.Вставить(ИмяПараметра, ПолучитьФорму(ИмяФормыОповещения, , , , Окно)); + КонецЕсли; + ФормаОповещения = ПараметрыПриложения[ИмяПараметра]; ФормаОповещения.Открыть(); КонецПроцедуры diff --git a/SSL/src/CommonModules/НапоминанияПользователяКлиентПовтИсп/Module.bsl b/SSL/src/CommonModules/НапоминанияПользователяКлиентПовтИсп/Module.bsl index ca4d596dd..7585ee4fe 100644 --- a/SSL/src/CommonModules/НапоминанияПользователяКлиентПовтИсп/Module.bsl +++ b/SSL/src/CommonModules/НапоминанияПользователяКлиентПовтИсп/Module.bsl @@ -5,15 +5,6 @@ #Область СлужебныеПроцедурыИФункции -// Возвращает форму текущих оповещений пользователя. -Функция ПолучитьФормуОповещения() Экспорт - #Если ВебКлиент Тогда - Возврат ПолучитьФорму("РегистрСведений.НапоминанияПользователя.Форма.ФормаОповещения"); - #Иначе - Возврат ПолучитьФорму("РегистрСведений.НапоминанияПользователя.Форма.ФормаОповещения",,,,ВариантОткрытияОкна.ОтдельноеОкно); - #КонецЕсли -КонецФункции - // Выполняет запрос по напоминаниям для текущего пользователя на 30 минут вперед от текущего времени. // Момент времени смещен от текущего для того, чтобы данные были актуальны в течение жизни кэша. // При обработке результата выполнения функции необходимо учитывать эту особенность. diff --git a/SSL/src/CommonModules/НапоминанияПользователяСлужебный/Module.bsl b/SSL/src/CommonModules/НапоминанияПользователяСлужебный/Module.bsl index bc5cde54e..7134605f2 100644 --- a/SSL/src/CommonModules/НапоминанияПользователяСлужебный/Module.bsl +++ b/SSL/src/CommonModules/НапоминанияПользователяСлужебный/Module.bsl @@ -45,11 +45,11 @@ // СЕРВЕРНЫЕ ОБРАБОТЧИКИ. СерверныеОбработчики[ - "СтандартныеПодсистемы.БазоваяФункциональность\ПриДобавленииПараметровРаботыКлиентскойЛогикиСтандартныхПодсистемПриЗапуске"].Добавить( + "СтандартныеПодсистемы.БазоваяФункциональность\ПриДобавленииПараметровРаботыКлиентаПриЗапуске"].Добавить( "НапоминанияПользователяСлужебный"); СерверныеОбработчики[ - "СтандартныеПодсистемы.БазоваяФункциональность\ПриДобавленииПараметровРаботыКлиентскойЛогикиСтандартныхПодсистем"].Добавить( + "СтандартныеПодсистемы.БазоваяФункциональность\ПриДобавленииПараметровРаботыКлиента"].Добавить( "НапоминанияПользователяСлужебный"); КонецПроцедуры @@ -462,12 +462,19 @@ // Обработчик подписки на событие ПриЗаписи объекта, по поводу которого можно создавать напоминания. Процедура ПроверитьИзмененияДатВПредметеПриЗаписи(Источник, Отказ) Экспорт - Если Не ОбщегоНазначения.ЭтоПланОбмена(Источник.Метаданные()) И Источник.ОбменДанными.Загрузка Тогда - Возврат; + + Если Источник.ОбменДанными.Загрузка Тогда + Возврат; КонецЕсли; + + Если СтандартныеПодсистемыСервер.ЭтоИдентификаторОбъектаМетаданных(Источник) Тогда + Возврат; + КонецЕсли; + Если ПолучитьФункциональнуюОпцию("ИспользоватьНапоминанияПользователя") Тогда ПроверитьИзмененияДатВПредмете(Источник.Ссылка); КонецЕсли; + КонецПроцедуры // Создает напоминание пользователя. Если по объекту уже есть напоминание, то перезаписывает его. @@ -628,7 +635,7 @@ // Параметры: // Параметры - Структура - структура параметров запуска. // -Процедура ПриДобавленииПараметровРаботыКлиентскойЛогикиСтандартныхПодсистемПриЗапуске(Параметры) Экспорт +Процедура ПриДобавленииПараметровРаботыКлиентаПриЗапуске(Параметры) Экспорт Параметры.Вставить("НастройкиНапоминаний", Новый ФиксированнаяСтруктура("ИспользоватьНапоминания", ПолучитьНастройкиНапоминаний().ИспользоватьНапоминания)); @@ -641,7 +648,7 @@ // Параметры: // Параметры - Структура - структура параметров. // -Процедура ПриДобавленииПараметровРаботыКлиентскойЛогикиСтандартныхПодсистем(Параметры) Экспорт +Процедура ПриДобавленииПараметровРаботыКлиента(Параметры) Экспорт Параметры.Вставить("НастройкиНапоминаний", Новый ФиксированнаяСтруктура(ПолучитьНастройкиНапоминаний())); diff --git a/SSL/src/CommonModules/НастройкаПорядкаЭлементов/Module.bsl b/SSL/src/CommonModules/НастройкаПорядкаЭлементов/Module.bsl index 843adc193..e32a44b32 100644 --- a/SSL/src/CommonModules/НастройкаПорядкаЭлементов/Module.bsl +++ b/SSL/src/CommonModules/НастройкаПорядкаЭлементов/Module.bsl @@ -21,8 +21,12 @@ Возврат; КонецЕсли; + Если СтандартныеПодсистемыСервер.ЭтоИдентификаторОбъектаМетаданных(Источник) Тогда + Возврат; + КонецЕсли; + // Проверим, есть ли у объекта реквизит доп. упорядочивания. - Информация = НастройкаПорядкаЭлементовСлужебный.ПолучитьИнформациюДляПеремещения(Источник.Ссылка.Метаданные()); + Информация = ПолучитьИнформациюДляПеремещения(Источник.Ссылка.Метаданные()); Если Не УОбъектаЕстьРеквизитДопУпорядочивания(Источник, Информация) Тогда Возврат; КонецЕсли; @@ -50,13 +54,61 @@ // ОбъектКопирования - Ссылка - исходный объект, который является источником копирования. Процедура СброситьЗначениеРеквизитаУпорядочивания(Источник, ОбъектКопирования) Экспорт - Информация = НастройкаПорядкаЭлементовСлужебный.ПолучитьИнформациюДляПеремещения(Источник.Ссылка.Метаданные()); + Если СтандартныеПодсистемыСервер.ЭтоИдентификаторОбъектаМетаданных(Источник) Тогда + Возврат; + КонецЕсли; + + Информация = ПолучитьИнформациюДляПеремещения(Источник.Ссылка.Метаданные()); Если УОбъектаЕстьРеквизитДопУпорядочивания(Источник, Информация) Тогда Источник.РеквизитДопУпорядочивания = 0; КонецЕсли; КонецПроцедуры +// Возвращает структуру с информацией о метаданных объекта. +// +// Параметры: +// Ссылка - ссылка на объект. +// +// Возвращаемое значение: +// Структура - информация из метаданных объекта. +Функция ПолучитьИнформациюДляПеремещения(МетаданныеОбъекта) Экспорт + + Информация = Новый Структура; + + МетаданныеРеквизита = МетаданныеОбъекта.Реквизиты.РеквизитДопУпорядочивания; + + Информация.Вставить("ПолноеИмя", МетаданныеОбъекта.ПолноеИмя()); + + ЭтоСправочник = Метаданные.Справочники.Содержит(МетаданныеОбъекта); + ЭтоПВХ = Метаданные.ПланыВидовХарактеристик.Содержит(МетаданныеОбъекта); + + Если ЭтоСправочник ИЛИ ЭтоПВХ Тогда + + Информация.Вставить("ЕстьГруппы", МетаданныеОбъекта.Иерархический + И ?(ЭтоПВХ, Истина, МетаданныеОбъекта.ВидИерархии = Метаданные.СвойстваОбъектов.ВидИерархии.ИерархияГруппИЭлементов)); + + Информация.Вставить("ДляГрупп", (МетаданныеРеквизита.Использование <> Метаданные.СвойстваОбъектов.ИспользованиеРеквизита.ДляЭлемента)); + Информация.Вставить("ДляЭлементов", (МетаданныеРеквизита.Использование <> Метаданные.СвойстваОбъектов.ИспользованиеРеквизита.ДляГруппы)); + Информация.Вставить("ЕстьРодитель", МетаданныеОбъекта.Иерархический); + Информация.Вставить("ГруппыСверху", ?(НЕ Информация.ЕстьРодитель, Ложь, МетаданныеОбъекта.ГруппыСверху)); + Информация.Вставить("ЕстьВладелец", ?(ЭтоПВХ, Ложь, (МетаданныеОбъекта.Владельцы.Количество() <> 0))); + + Иначе + + Информация.Вставить("ЕстьГруппы", Ложь); + Информация.Вставить("ДляГрупп", Ложь); + Информация.Вставить("ДляЭлементов", Истина); + Информация.Вставить("ЕстьРодитель", Ложь); + Информация.Вставить("ЕстьВладелец", Ложь); + Информация.Вставить("ГруппыСверху", Ложь); + + КонецЕсли; + + Возврат Информация; + +КонецФункции + #КонецОбласти #Область СлужебныеПроцедурыИФункции diff --git a/SSL/src/CommonModules/НастройкаПорядкаЭлементовСлужебный/Module.bsl b/SSL/src/CommonModules/НастройкаПорядкаЭлементовСлужебный/Module.bsl index a48a0033b..5a291bfd2 100644 --- a/SSL/src/CommonModules/НастройкаПорядкаЭлементовСлужебный/Module.bsl +++ b/SSL/src/CommonModules/НастройкаПорядкаЭлементовСлужебный/Module.bsl @@ -29,51 +29,6 @@ КонецФункции -// Возвращает структуру с информацией о метаданных объекта. -// -// Параметры: -// Ссылка - ссылка на объект. -// -// Возвращаемое значение: -// Структура - информация из метаданных объекта. -Функция ПолучитьИнформациюДляПеремещения(МетаданныеОбъекта) Экспорт - - Информация = Новый Структура; - - МетаданныеРеквизита = МетаданныеОбъекта.Реквизиты.РеквизитДопУпорядочивания; - - Информация.Вставить("ПолноеИмя", МетаданныеОбъекта.ПолноеИмя()); - - ЭтоСправочник = Метаданные.Справочники.Содержит(МетаданныеОбъекта); - ЭтоПВХ = Метаданные.ПланыВидовХарактеристик.Содержит(МетаданныеОбъекта); - - Если ЭтоСправочник ИЛИ ЭтоПВХ Тогда - - Информация.Вставить("ЕстьГруппы", - МетаданныеОбъекта.Иерархический И - ?(ЭтоПВХ, Истина, МетаданныеОбъекта.ВидИерархии = Метаданные.СвойстваОбъектов.ВидИерархии.ИерархияГруппИЭлементов)); - - Информация.Вставить("ДляГрупп", (МетаданныеРеквизита.Использование <> Метаданные.СвойстваОбъектов.ИспользованиеРеквизита.ДляЭлемента)); - Информация.Вставить("ДляЭлементов", (МетаданныеРеквизита.Использование <> Метаданные.СвойстваОбъектов.ИспользованиеРеквизита.ДляГруппы)); - Информация.Вставить("ЕстьРодитель", МетаданныеОбъекта.Иерархический); - Информация.Вставить("ГруппыСверху", ?(НЕ Информация.ЕстьРодитель, Ложь, МетаданныеОбъекта.ГруппыСверху)); - Информация.Вставить("ЕстьВладелец", ?(ЭтоПВХ, Ложь, (МетаданныеОбъекта.Владельцы.Количество() <> 0))); - - Иначе - - Информация.Вставить("ЕстьГруппы", Ложь); - Информация.Вставить("ДляГрупп", Ложь); - Информация.Вставить("ДляЭлементов", Истина); - Информация.Вставить("ЕстьРодитель", Ложь); - Информация.Вставить("ЕстьВладелец", Ложь); - Информация.Вставить("ГруппыСверху", Ложь); - - КонецЕсли; - - Возврат Информация; - -КонецФункции - // Возвращает значение реквизита доп. упорядочивания для нового объекта. // // Параметры: @@ -216,7 +171,7 @@ КонецЕсли; КонецЦикла; - Информация = ПолучитьИнформациюДляПеремещения(Ссылка.Метаданные()); + Информация = НастройкаПорядкаЭлементов.ПолучитьИнформациюДляПеремещения(Ссылка.Метаданные()); // Для иерархических справочников может быть установлен отбор по родителю, если нет, // то способ отображения должен быть иерархический или в виде дерева. @@ -262,7 +217,7 @@ ТекстЗапроса = ТекстЗапроса + " УБЫВ"; КонецЕсли; - Информация = ПолучитьИнформациюДляПеремещения(ПеремещаемыйЭлемент.Метаданные()); + Информация = НастройкаПорядкаЭлементов.ПолучитьИнформациюДляПеремещения(ПеремещаемыйЭлемент.Метаданные()); ПостроительЗапроса = Новый ПостроительЗапроса(ТекстЗапроса); ПостроительЗапроса.ЗаполнитьНастройки(); @@ -435,7 +390,7 @@ |ГДЕ | ВсеЭлементы.РеквизитДопУпорядочивания = 0"; - Информация = ПолучитьИнформациюДляПеремещения(МетаданныеТаблицы); + Информация = НастройкаПорядкаЭлементов.ПолучитьИнформациюДляПеремещения(МетаданныеТаблицы); ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&Таблица", Информация.ПолноеИмя); diff --git a/SSL/src/CommonModules/НастройкаРазрешенийНаИспользованиеВнешнихРесурсовКлиент/Module.bsl b/SSL/src/CommonModules/НастройкаРазрешенийНаИспользованиеВнешнихРесурсовКлиент/Module.bsl index 2202bd123..e52f727ca 100644 --- a/SSL/src/CommonModules/НастройкаРазрешенийНаИспользованиеВнешнихРесурсовКлиент/Module.bsl +++ b/SSL/src/CommonModules/НастройкаРазрешенийНаИспользованиеВнешнихРесурсовКлиент/Module.bsl @@ -18,12 +18,13 @@ // Процедура ПослеНачалаРаботыСистемы() Экспорт - Если СтандартныеПодсистемыКлиентПовтИсп.ПараметрыРаботыКлиентаПриЗапуске().ОтображатьПомощникНастройкиРазрешений Тогда + ПараметрыРаботыКлиентаПриЗапуске = СтандартныеПодсистемыКлиентПовтИсп.ПараметрыРаботыКлиентаПриЗапуске(); + Если ПараметрыРаботыКлиентаПриЗапуске.ОтображатьПомощникНастройкиРазрешений Тогда - Если СтандартныеПодсистемыКлиентПовтИсп.ПараметрыРаботыКлиентаПриЗапуске().ПроверитьПримененияРазрешенийНаИспользованиеВнешнихРесурсов Тогда + Если ПараметрыРаботыКлиентаПриЗапуске.ПроверитьПримененияРазрешенийНаИспользованиеВнешнихРесурсов Тогда ПослеПроверкиПримененияРазрешенийНаИспользованиеВнешнихРесурсов( - СтандартныеПодсистемыКлиентПовтИсп.ПараметрыРаботыКлиентаПриЗапуске().ПроверкаПримененияРазрешенийНаИспользованиеВнешнихРесурсов); + ПараметрыРаботыКлиентаПриЗапуске.ПроверкаПримененияРазрешенийНаИспользованиеВнешнихРесурсов); КонецЕсли; @@ -179,8 +180,7 @@ , , ОписаниеОповещения, - РежимОткрытияОкнаФормы.БлокироватьВесьИнтерфейс - ); + РежимОткрытияОкнаФормы.БлокироватьВесьИнтерфейс); Иначе @@ -231,8 +231,7 @@ , , ОписаниеОповещения, - РежимОткрытияОкнаФормы.БлокироватьВесьИнтерфейс - ); + РежимОткрытияОкнаФормы.БлокироватьВесьИнтерфейс); Иначе @@ -300,8 +299,7 @@ , , ОписаниеОповещения, - РежимОткрытияОкнаФормы.БлокироватьВесьИнтерфейс - ); + РежимОткрытияОкнаФормы.БлокироватьВесьИнтерфейс); Иначе diff --git a/SSL/src/CommonModules/ОбменДаннымиXDTOСервер/Module.bsl b/SSL/src/CommonModules/ОбменДаннымиXDTOСервер/Module.bsl index 0919f4382..d4b41a0b1 100644 --- a/SSL/src/CommonModules/ОбменДаннымиXDTOСервер/Module.bsl +++ b/SSL/src/CommonModules/ОбменДаннымиXDTOСервер/Module.bsl @@ -45,6 +45,7 @@ КомпонентыОбмена.Вставить("ФлагОшибки", Ложь); КомпонентыОбмена.Вставить("СтрокаСообщенияОбОшибке", ""); КомпонентыОбмена.Вставить("КлючСообщенияЖурналаРегистрации", ОбменДаннымиСервер.СобытиеЖурналаРегистрацииОбменДанными()); + КомпонентыОбмена.Вставить("ИспользоватьКвитирование", Истина); СостояниеОбменаДанными = Новый Структура; СостояниеОбменаДанными.Вставить("УзелИнформационнойБазы"); @@ -66,6 +67,7 @@ Если НаправлениеОбмена = "Отправка" Тогда КомпонентыОбмена.Вставить("ВыгруженныеОбъекты", Новый Массив); + КомпонентыОбмена.Вставить("КоличествоОбъектовКВыгрузке", 0); КомпонентыОбмена.Вставить("СчетчикВыгруженныхОбъектов", 0); КомпонентыОбмена.Вставить("СоответствиеРегистрацияПоНеобходимости", Новый Соответствие); КомпонентыОбмена.Вставить("ВыгруженныеПоСсылкеОбъекты", Новый Массив); @@ -83,6 +85,8 @@ КомпонентыОбмена.Вставить("РежимЗагрузкиДанныхВИнформационнуюБазу", Истина); КомпонентыОбмена.Вставить("СчетчикЗагруженныхОбъектов", 0); КомпонентыОбмена.Вставить("КоличествоОбъектовНаТранзакцию", 0); + КомпонентыОбмена.Вставить("КоличествоОбъектовКЗагрузке", 0); + КомпонентыОбмена.Вставить("РазмерФайлаСообщенияОбмена", 0); ДокументыДляОтложенногоПроведения = Новый ТаблицаЗначений; ДокументыДляОтложенногоПроведения.Колонки.Добавить("ДокументСсылка"); @@ -95,8 +99,13 @@ ЗагруженныеОбъекты.Колонки.Добавить("ИмяОбработчика"); ЗагруженныеОбъекты.Колонки.Добавить("Объект"); ЗагруженныеОбъекты.Колонки.Добавить("Параметры"); + ЗагруженныеОбъекты.Колонки.Добавить("СсылкаНаОбъект"); КомпонентыОбмена.Вставить("ЗагруженныеОбъекты", ЗагруженныеОбъекты); + ТаблицаОбъектовСозданныхПоСсылкам = Новый ТаблицаЗначений(); + ТаблицаОбъектовСозданныхПоСсылкам.Колонки.Добавить("СсылкаНаОбъект"); + КомпонентыОбмена.Вставить("ТаблицаОбъектовСозданныхПоСсылкам", ТаблицаОбъектовСозданныхПоСсылкам); + КомпонентыОбмена.Вставить("ТаблицаДанныхЗаголовкаПакета", НоваяТаблицаДанныхЗаголовкаПакета()); КомпонентыОбмена.Вставить("ТаблицыДанныхСообщенияОбмена", Новый Соответствие); @@ -121,7 +130,8 @@ // Инициализация таблиц правил обмена. КомпонентыОбмена.Вставить("ПравилаОбработкиДанных", ТаблицаПравилОбработкиДанных(XMLСхема, МенеджерОбмена, НаправлениеОбмена)); - КомпонентыОбмена.Вставить("ПравилаКонвертацииОбъектов", ТаблицаПравилКонвертации(XMLСхема, МенеджерОбмена, НаправлениеОбмена)); + КомпонентыОбмена.Вставить("ПравилаКонвертацииОбъектов", ТаблицаПравилКонвертации( + XMLСхема, МенеджерОбмена, НаправлениеОбмена, КомпонентыОбмена.ПравилаОбработкиДанных)); КомпонентыОбмена.Вставить("ПравилаКонвертацииПредопределенныхДанных", ТаблицаПравилКонвертацииПредопределенныхДанных(XMLСхема, МенеджерОбмена, НаправлениеОбмена)); @@ -305,8 +315,7 @@ Если ПравилоКонвертации = Неопределено Тогда - ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Не найдено ПКО с именем %1'"), Имя); + ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Не найдено ПКО с именем %1'"), Имя); Иначе Возврат ПравилоКонвертации; @@ -391,6 +400,11 @@ КомпонентыОбмена.ФайлОбмена.ЗаписатьКонецЭлемента(); // Body КомпонентыОбмена.ФайлОбмена.ЗаписатьКонецЭлемента(); // Message + // Фиксация успешного завершения обмена. + Если КомпонентыОбмена.СостояниеОбменаДанными.РезультатВыполненияОбмена = Неопределено Тогда + КомпонентыОбмена.СостояниеОбменаДанными.РезультатВыполненияОбмена = Перечисления.РезультатыВыполненияОбмена.Выполнено; + КонецЕсли; + КонецПроцедуры // Выполняет преобразование структуры с данными в объект XDTO указанного типа в соответствии с правилами. @@ -443,7 +457,7 @@ ИначеЕсли ЭтоТаблицаОбъекта(Свойство) Тогда ТипСвойства = "Таблица"; ИначеЕсли Свойство.Имя = "КлючевыеСвойства" - Или Найти(Свойство.Тип.Имя, "КлючевыеСвойства") > 0 Тогда + Или СтрНайти(Свойство.Тип.Имя, "КлючевыеСвойства") > 0 Тогда ТипСвойства = "КлючевыеСвойства"; Иначе Если СвойствоНайдено Тогда @@ -457,8 +471,7 @@ ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Неизвестный тип свойства <%1>. Тип объекта: %2'"), Свойство.Имя, - Строка(ТипXDTO) - ); + Строка(ТипXDTO)); КонецЕсли; Если ТипСвойства = "ОбщееСоставноеСвойство" Тогда @@ -535,13 +548,13 @@ СоставноеЗначениеXDTO = ОбъектXDTOИзДанныхXDTO(КомпонентыОбмена, ЗначениеСвойства, СвойствоСоставногоТипа.Тип,,СсылкиИзОбъекта); // Свойство составного типа простое, и значение простое ИначеЕсли (ТипЗнч(ЗначениеСвойства) = Тип("Строка") - И Найти(СвойствоСоставногоТипа.Тип.Имя,"string")>0) + И СтрНайти(СвойствоСоставногоТипа.Тип.Имя,"string")>0) ИЛИ (ТипЗнч(ЗначениеСвойства) = Тип("Число") - И Найти(СвойствоСоставногоТипа.Тип.Имя,"decimal")>0) + И СтрНайти(СвойствоСоставногоТипа.Тип.Имя,"decimal")>0) ИЛИ (ТипЗнч(ЗначениеСвойства) = Тип("Булево") - И Найти(СвойствоСоставногоТипа.Тип.Имя,"boolean")>0) + И СтрНайти(СвойствоСоставногоТипа.Тип.Имя,"boolean")>0) ИЛИ (ТипЗнч(ЗначениеСвойства) = Тип("Дата") - И Найти(СвойствоСоставногоТипа.Тип.Имя,"date")>0) Тогда + И СтрНайти(СвойствоСоставногоТипа.Тип.Имя,"date")>0) Тогда СоставноеЗначениеXDTO = ЗначениеСвойства; ИначеЕсли ТипЗнч(ЗначениеСвойства) = Тип("Строка") @@ -584,7 +597,6 @@ Возврат Приемник; КонецФункции - // Выполняет преобразование данных информационной базы в структуру с данными в соответствии с правилами. // // Параметры: @@ -625,8 +637,7 @@ |Тип источника: %1 |Тип приемника: %2'"), Строка(ТипЗнч(Источник)), - ПравилоКонвертации.ТипXDTO - ); + ПравилоКонвертации.ТипXDTO); КонецЕсли; Иначе @@ -898,44 +909,47 @@ ДанныеИБ = Неопределено; ПолученныеДанные = ИнициализироватьПолученныеДанные(ПравилоКонвертации); - ПолученныеДанныеСсылка = ПолученныеДанные.Ссылка; - ВариантИдентификации = СокрЛП(ПравилоКонвертации.ВариантИдентификации); - - Если ВариантИдентификации = "ПоУникальномуИдентификатору" - Или ВариантИдентификации = "СначалаПоУникальномуИдентификаторуПотомПоПолямПоиска" Тогда + СоставСвойств = "Все"; + Если ПравилоКонвертации.ЭтоСсылочныйТип Тогда + ПолученныеДанныеСсылка = ПолученныеДанные.Ссылка; + ВариантИдентификации = СокрЛП(ПравилоКонвертации.ВариантИдентификации); - ПолученныеДанныеСсылка = СсылкаОбъектаПоУИДОбъектаXDTO( - ДанныеXDTO.Ссылка.Значение, - ПравилоКонвертации.ТипДанных, - КомпонентыОбмена); + Если ВариантИдентификации = "ПоУникальномуИдентификатору" + Или (ВариантИдентификации = "СначалаПоУникальномуИдентификаторуПотомПоПолямПоиска" + И ДанныеXDTO.Свойство("Ссылка")) Тогда - ПолученныеДанные.УстановитьСсылкуНового(ПолученныеДанныеСсылка); - - ДанныеИБ = ПолученныеДанныеСсылка.ПолучитьОбъект(); - - Если Действие = "ПолучитьСсылку" Тогда + ПолученныеДанныеСсылка = СсылкаОбъектаПоУИДОбъектаXDTO( + ДанныеXDTO.Ссылка.Значение, + ПравилоКонвертации.ТипДанных, + КомпонентыОбмена); + + ПолученныеДанные.УстановитьСсылкуНового(ПолученныеДанныеСсылка); - Если ДанныеИБ <> Неопределено Тогда - // Задача - получение ссылки. - // Идентификация - по УИД или УИД + поля поиска. - // Объект с полученной ссылкой (или с таким публичным идентификатором) существует. - Возврат ДанныеИБ.Ссылка; - ИначеЕсли ВариантИдентификации = "ПоУникальномуИдентификатору" Тогда - // Задача - получение ссылки. - // Идентификация - по УИД. - // Объект с полученной ссылкой (или с таким публичным идентификатором) не найден. - Возврат ПолученныеДанныеСсылка; + ДанныеИБ = ПолученныеДанныеСсылка.ПолучитьОбъект(); + + Если Действие = "ПолучитьСсылку" Тогда + + Если ДанныеИБ <> Неопределено Тогда + // Задача: получение ссылки. + // Идентификация: по УИД или УИД + поля поиска. + // Объект с полученной ссылкой (или с таким публичным идентификатором) существует. + Возврат ДанныеИБ.Ссылка; + ИначеЕсли ВариантИдентификации = "ПоУникальномуИдентификатору" Тогда + // Задача: получение ссылки. + // Идентификация: по УИД. + // Объект с полученной ссылкой (или с таким публичным идентификатором) не найден. + Возврат ПолученныеДанныеСсылка; + КонецЕсли; + КонецЕсли; - + Иначе + ПолученныеДанныеСсылка = ПравилоКонвертации.МенеджерОбъекта.ПолучитьСсылку(Новый УникальныйИдентификатор()); + ПолученныеДанные.УстановитьСсылкуНового(ПолученныеДанныеСсылка); КонецЕсли; - Иначе - ПолученныеДанныеСсылка = ПравилоКонвертации.МенеджерОбъекта.ПолучитьСсылку(Новый УникальныйИдентификатор()); - ПолученныеДанные.УстановитьСсылкуНового(ПолученныеДанныеСсылка); + // Определяем, какие свойства нужно конвертировать. + СоставСвойств = ?(Действие = "ПолучитьСсылку", "СвойстваПоиска", "Все"); КонецЕсли; - // Определяем, какие свойства нужно конвертировать. - СоставСвойств = ?(Действие = "ПолучитьСсылку", "СвойстваПоиска", "Все"); - // Конвертация свойств, для которых не нужно выполнение обработчика. КонвертацияСвойствСтруктурыОбъектаXDTO( КомпонентыОбмена, @@ -968,8 +982,10 @@ СоставСвойств); Если ДанныеИБ = Неопределено Тогда - - Если ВариантИдентификации = "ПоПолямПоиска" + Если ПравилоКонвертации.ЭтоРегистрСведений Тогда + // Идентификация не производится, отбор набора записей выполняется в алгоритмах правил. + ДанныеИБ = Неопределено; + ИначеЕсли ВариантИдентификации = "ПоПолямПоиска" Или ВариантИдентификации = "СначалаПоУникальномуИдентификаторуПотомПоПолямПоиска" Тогда ДанныеИБ = СсылкаОбъектаПоСвойствамОбъектаXDTO(ПравилоКонвертации, ПолученныеДанные); @@ -977,37 +993,40 @@ ДанныеИБ = Неопределено; КонецЕсли; - Если ДанныеИБ <> Неопределено Тогда - + Если ДанныеИБ <> Неопределено И ПравилоКонвертации.ЭтоСсылочныйТип Тогда Если Действие = "ПолучитьСсылку" Тогда - // Задача - получение ссылки. - // Идентификация - по УИД + поля поиска. + // Задача: получение ссылки. + // Идентификация: по УИД + поля поиска. // Объект найден по полям поиска. Возврат ДанныеИБ; Иначе ДанныеИБ = ДанныеИБ.ПолучитьОбъект(); КонецЕсли; - КонецЕсли; КонецЕсли; КонецЕсли; + ЗаписыватьОбъектВИБ = ?(Действие = "КонвертироватьИЗаписать", Истина, Ложь); + Если КомпонентыОбмена.РежимЗагрузкиДанныхВИнформационнуюБазу И (ВариантИдентификации = "ПоПолямПоиска" Или ВариантИдентификации = "СначалаПоУникальномуИдентификаторуПотомПоПолямПоиска") Тогда - Действие = "КонвертироватьИЗаписать"; + // Объекты, при идентификации которых используются поля поиска, + // должны быть записаны в информационную базу с целью получения одной и той же ссылки на объект при каждом поиске. + ЗаписыватьОбъектВИБ = Истина; КонецЕсли; - Если Действие = "КонвертироватьИЗаписать" Тогда + Если ЗаписыватьОбъектВИБ Тогда #Область ЗаписьОбъекта Если КомпонентыОбмена.ЭтоОбменЧерезПланОбмена И ДанныеИБ <> Неопределено - И ВариантИдентификации = "СначалаПоУникальномуИдентификаторуПотомПоПолямПоиска" Тогда + И ВариантИдентификации = "СначалаПоУникальномуИдентификаторуПотомПоПолямПоиска" + И ПравилоКонвертации.ЭтоСсылочныйТип Тогда ЗаписатьПриНеобходимостиПубличныйИдентификатор( ДанныеИБ, @@ -1036,10 +1055,10 @@ КонецЕсли; ДанныеДляЗаписиВИБ = ДанныеИБ; КонецЕсли; - - ПровестиГенерациюКодаНомераПриНеобходимости(ДанныеДляЗаписиВИБ); - - Если КомпонентыОбмена.ЭтоОбменЧерезПланОбмена Тогда + Если ПравилоКонвертации.ЭтоСсылочныйТип Тогда + ПровестиГенерациюКодаНомераПриНеобходимости(ДанныеДляЗаписиВИБ); + КонецЕсли; + Если КомпонентыОбмена.ЭтоОбменЧерезПланОбмена И НЕ ПравилоКонвертации.ЭтоРегистрСведений Тогда #Область СистемныйОбработчикПриПолученииДанныхОтПодчиненного ПолучениеЭлемента = ПолучениеЭлементаДанных.Авто; @@ -1048,12 +1067,11 @@ #КонецОбласти КонецЕсли; - Если ДанныеДляЗаписиВИБ.ПометкаУдаления Тогда + Если ПравилоКонвертации.ЭтоСсылочныйТип И ДанныеДляЗаписиВИБ.ПометкаУдаления Тогда ДанныеДляЗаписиВИБ.ПометкаУдаления = Ложь; КонецЕсли; - МетаданныеОбъекта = ДанныеДляЗаписиВИБ.Метаданные(); - Если Метаданные.Документы.Содержит(МетаданныеОбъекта) Тогда + Если ПравилоКонвертации.ЭтоДокумент Тогда Попытка @@ -1082,15 +1100,17 @@ КонецЕсли; Исключение + ЗаписатьВПротоколВыполнения(КомпонентыОбмена, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); КонецПопытки; Иначе ЗаписатьОбъектВИБ(КомпонентыОбмена, ДанныеДляЗаписиВИБ, ПравилоКонвертации.ТипДанных); - - КомпонентыОбмена.ОбъектыДляОтложеннойЗаписи.Вставить( - ДанныеДляЗаписиВИБ.Ссылка, ДанныеДляЗаписиВИБ.ДополнительныеСвойства); - + Если ПравилоКонвертации.ЭтоСсылочныйТип Тогда + КомпонентыОбмена.ОбъектыДляОтложеннойЗаписи.Вставить( + ДанныеДляЗаписиВИБ.Ссылка, + ДанныеДляЗаписиВИБ.ДополнительныеСвойства); + КонецЕсли; КонецЕсли; ЗапомнитьОбъектДляОтложенногоЗаполнения(ДанныеДляЗаписиВИБ, ПравилоКонвертации, КомпонентыОбмена); @@ -1103,6 +1123,33 @@ КонецЕсли; + // Объекты, создаваемые по ссылке, запоминаем в таблицу, + // чтобы после загрузки всех данных удалить объекты, + // которые так и не были загружены полностью ("временные объекты"). + // При загрузке объектов "целиком" удаляем объекты из таблицы, + // переводя их из состояния "временных" в "постоянные". + ТаблицаОбъектовСозданныхПоСсылкам = КомпонентыОбмена.ТаблицаОбъектовСозданныхПоСсылкам; + + Если Действие = "ПолучитьСсылку" И ЗаписыватьОбъектВИБ + И Не ПравилоКонвертации.РазрешитьСоздаватьОбъектИзСтруктуры Тогда + + СтрокаОбъекта = ТаблицаОбъектовСозданныхПоСсылкам.Найти(ДанныеДляЗаписиВИБ.Ссылка, "СсылкаНаОбъект"); + + Если СтрокаОбъекта = Неопределено Тогда + НоваяСтрока = ТаблицаОбъектовСозданныхПоСсылкам.Добавить(); + НоваяСтрока.СсылкаНаОбъект = ДанныеДляЗаписиВИБ.Ссылка; + КонецЕсли; + + ИначеЕсли Действие = "КонвертироватьИЗаписать" Тогда + + СтрокаОбъекта = ТаблицаОбъектовСозданныхПоСсылкам.Найти(ДанныеДляЗаписиВИБ.Ссылка, "СсылкаНаОбъект"); + + Если СтрокаОбъекта <> Неопределено Тогда + ТаблицаОбъектовСозданныхПоСсылкам.Удалить(СтрокаОбъекта); + КонецЕсли; + + КонецЕсли; + Возврат ДанныеДляЗаписиВИБ; КонецФункции @@ -1114,6 +1161,8 @@ // Процедура ПроизвестиЧтениеДанных(КомпонентыОбмена, ТаблицыДляЗагрузки = Неопределено) Экспорт + КомпонентыОбмена.ТаблицаОбъектовСозданныхПоСсылкам.Очистить(); + Если ТипЗнч(ТаблицыДляЗагрузки) = Тип("ТаблицаЗначений") И ТаблицыДляЗагрузки.Количество() = 0 Тогда Возврат; @@ -1196,7 +1245,8 @@ ПолученныеДанныеСсылка = Неопределено; ВариантИдентификации = СокрЛП(ПравилоКонвертации.ВариантИдентификации); Если ВариантИдентификации = "ПоУникальномуИдентификатору" - Или ВариантИдентификации = "СначалаПоУникальномуИдентификаторуПотомПоПолямПоиска" Тогда + Или (ВариантИдентификации = "СначалаПоУникальномуИдентификаторуПотомПоПолямПоиска" + И ДанныеXDTO.Свойство("Ссылка")) Тогда ПолученныеДанныеСсылка = ПравилоКонвертации.МенеджерОбъекта.ПолучитьСсылку(Новый УникальныйИдентификатор(ДанныеXDTO.Ссылка.Значение)); КонецЕсли; @@ -1216,12 +1266,15 @@ ДанныеДляЗаписиВИБ = СтруктураОбъектаXDTOВДанныеИБ(КомпонентыОбмена, ДанныеXDTO, ПравилоКонвертации, "Конвертировать"); ПровестиГенерациюКодаНомераПриНеобходимости(ДанныеДляЗаписиВИБ); - - УникальныйИдентификаторСтрокой = ДанныеXDTO.Ссылка.Значение; - ТаблицаДанныхСообщенияОбмена = КомпонентыОбмена.ТаблицыДанныхСообщенияОбмена.Получить(КлючТаблицыДанных); - СтрокаТаблицы = ТаблицаДанныхСообщенияОбмена.Найти(УникальныйИдентификаторСтрокой, "УникальныйИдентификатор"); + УникальныйИдентификаторСтрокой = ""; + СтрокаТаблицы = Неопределено; + Если ДанныеXDTO.Свойство("Ссылка") Тогда + УникальныйИдентификаторСтрокой = ДанныеXDTO.Ссылка.Значение; + СтрокаТаблицы = ТаблицаДанныхСообщенияОбмена.Найти(УникальныйИдентификаторСтрокой, "УникальныйИдентификатор"); + КонецЕсли; + Если СтрокаТаблицы = Неопределено Тогда @@ -1238,7 +1291,11 @@ КонецЕсли; - ИначеЕсли ПравилоКонвертации.ВариантИдентификации = "СначалаПоУникальномуИдентификаторуПотомПоПолямПоиска" + КомпонентыОбмена.СчетчикЗагруженныхОбъектов = КомпонентыОбмена.СчетчикЗагруженныхОбъектов + 1; + ОбменДаннымиСервер.РассчитатьПроцентЗагрузки(КомпонентыОбмена.СчетчикЗагруженныхОбъектов, КомпонентыОбмена.КоличествоОбъектовКЗагрузке, КомпонентыОбмена.РазмерФайлаСообщенияОбмена); + + ИначеЕсли (ПравилоКонвертации.ВариантИдентификации = "СначалаПоУникальномуИдентификаторуПотомПоПолямПоиска" + И ДанныеXDTO.Свойство("Ссылка")) Или ПравилоКонвертации.ВариантИдентификации = "ПоУникальномуИдентификатору" Тогда МассивОбъектовКУдалению.Добавить(СсылкаОбъектаПоУИДОбъектаXDTO(ДанныеXDTO.Ссылка.Значение, ПравилоКонвертации.ТипДанных, КомпонентыОбмена)); КонецЕсли; @@ -1251,12 +1308,17 @@ Если КомпонентыОбмена.РежимЗагрузкиДанныхВИнформационнуюБазу Тогда ПрименитьУдалениеОбъектов(КомпонентыОбмена, МассивОбъектовКУдалению, МассивЗагруженныхОбъектов); + УдалитьВременныеОбъектыСозданныеПоСсылкам(КомпонентыОбмена); ОтложенноеЗаполнениеОбъектов(КомпонентыОбмена); + КомпонентыОбмена.МенеджерОбмена.ПослеКонвертации(КомпонентыОбмена); ВыполнитьОтложенноеПроведениеДокументов(КомпонентыОбмена); ВыполнитьОтложеннуюЗаписьОбъектов(КомпонентыОбмена); КонецЕсли; - КомпонентыОбмена.МенеджерОбмена.ПослеКонвертации(КомпонентыОбмена); + // Фиксация успешного завершения обмена. + Если КомпонентыОбмена.СостояниеОбменаДанными.РезультатВыполненияОбмена = Неопределено Тогда + КомпонентыОбмена.СостояниеОбменаДанными.РезультатВыполненияОбмена = Перечисления.РезультатыВыполненияОбмена.Выполнено; + КонецЕсли; КонецПроцедуры @@ -1336,8 +1398,8 @@ СтрокаТаблицы.ПоляПоиска = ПравилоКонвертации.ПоляПредставленияОбъекта; СтрокаТаблицы.ПоляТаблицы = ПравилоКонвертации.РеквизитыШапкиПолученныхДанныхСтрокой; - СтрокаТаблицы.СинхронизироватьПоИдентификатору = ПравилоКонвертации.ВариантИдентификации = "СначалаПоУникальномуИдентификаторуПотомПоПолямПоиска" - Или ПравилоКонвертации.ВариантИдентификации = "ПоУникальномуИдентификатору"; + СтрокаТаблицы.СинхронизироватьПоИдентификатору = (ПравилоКонвертации.ВариантИдентификации = "СначалаПоУникальномуИдентификаторуПотомПоПолямПоиска" + И ДанныеXDTO.Свойство("Ссылка")) Или ПравилоКонвертации.ВариантИдентификации = "ПоУникальномуИдентификатору"; СтрокаТаблицы.ИспользоватьПредварительныйПросмотр = СтрокаТаблицы.СинхронизироватьПоИдентификатору; СтрокаТаблицы.ЭтоКлассификатор = ПравилоКонвертации.ВариантИдентификации = "СначалаПоУникальномуИдентификаторуПотомПоПолямПоиска"; @@ -1347,7 +1409,8 @@ МассивЗагруженныхОбъектов.Добавить(СсылкаОбъектаПоУИДОбъектаXDTO(ДанныеXDTO.Ссылка.Значение, ПравилоКонвертации.ТипДанных, КомпонентыОбмена)); КонецЕсли; - ИначеЕсли ПравилоКонвертации.ВариантИдентификации = "СначалаПоУникальномуИдентификаторуПотомПоПолямПоиска" + ИначеЕсли (ПравилоКонвертации.ВариантИдентификации = "СначалаПоУникальномуИдентификаторуПотомПоПолямПоиска" + И ДанныеXDTO.Свойство("Ссылка")) Или ПравилоКонвертации.ВариантИдентификации = "ПоУникальномуИдентификатору" Тогда МассивОбъектовКУдалению.Добавить(СсылкаОбъектаПоУИДОбъектаXDTO(ДанныеXDTO.Ссылка.Значение, ПравилоКонвертации.ТипДанных, КомпонентыОбмена)); КонецЕсли; @@ -1398,8 +1461,7 @@ | |Подробности: |%1'"), - КраткоеПредставлениеОшибки(ИнформацияОбОшибке()) - ); + КраткоеПредставлениеОшибки(ИнформацияОбОшибке())); КонецПопытки; ДанныеПолучателя = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(ЗаписьСообщения.Получатель, "НомерОтправленного, НомерПринятого, Код"); @@ -1484,7 +1546,17 @@ Если (ЧтениеXML.ТипУзла <> ТипУзлаXML.НачалоЭлемента Или ЧтениеXML.ЛокальноеИмя <> "Message") Тогда - ЗаписатьВПротоколВыполнения(КомпонентыОбмена, 9); + Если СообщениеОтНеобновленнойНастройки(ЧтениеXML) Тогда + СтрокаСообщенияОбОшибке = НСтр("ru = 'Получение данных от источника, в котором не выполнено + |обновление настройки синхронизации данных. Необходимо:'") + + Символы.ПС + НСтр("ru = '1) Выполнить повторную синхронизацию данных через некоторое время.'") + + Символы.ПС + НСтр("ru = '2) Выполнить синхронизацию данных на стороне источника, после этого + |повторно выполнить синхронизацию данных в этой информационной базе.'") + + Символы.ПС + НСтр("ru = '(1 - для вида транспорта Через интернет, 2 - для вида транспорта Другое)'"); + ЗаписатьВПротоколВыполнения(КомпонентыОбмена, СтрокаСообщенияОбОшибке); + Иначе + ЗаписатьВПротоколВыполнения(КомпонентыОбмена, 9); + КонецЕсли; Прервать; КонецЕсли; @@ -1502,6 +1574,12 @@ Прервать; КонецЕсли; + КомпонентыОбмена.XMLСхема = Header.Format; + + ФорматОбмена = РазложитьФорматОбмена(Header.Format); + КомпонентыОбмена.ВерсияФорматаОбмена = ФорматОбмена.Версия; + КомпонентыОбмена.МенеджерОбмена = МенеджерОбменаВерсииФормата(КомпонентыОбмена.УзелКорреспондента, + КомпонентыОбмена.ВерсияФорматаОбмена); Если ЭтоОбменЧерезПланОбмена Тогда @@ -1518,6 +1596,10 @@ КомпонентыОбмена.НомерВходящегоСообщения = Confirmation.MessageNo; КомпонентыОбмена.НомерСообщенияПолученногоКорреспондентом = Confirmation.ReceivedNo; + Если КомпонентыОбмена.НомерВходящегоСообщения <= 0 Тогда + КомпонентыОбмена.ИспользоватьКвитирование = Ложь; + КонецЕсли; + Если Метаданные.ПланыОбмена.Найти(ИмяПланаОбмена) = Неопределено Тогда ЗаписатьВПротоколВыполнения(КомпонентыОбмена, 177); Прервать; @@ -1539,78 +1621,68 @@ КонецЕсли; - КонецЕсли; - - ФорматОбмена = РазложитьФорматОбмена(Header.Format); - - Если ЭтоОбменЧерезПланОбмена Тогда - // Проверяем базовый формат МенеджерПланаОбмена = МенеджерПланаОбмена(КомпонентыОбмена.УзелКорреспондента); Если МенеджерПланаОбмена.ФорматОбмена() <> ФорматОбмена.БазовыйФормат Тогда ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Формат сообщения обмена <%1> не соответствует формату плана обмена <%2>.'"), ФорматОбмена.БазовыйФормат, - МенеджерПланаОбмена.ФорматОбмена() - ); + МенеджерПланаОбмена.ФорматОбмена()); КонецЕсли; // Проверяем версию формата сообщения обмена. Если ВерсииФорматаОбменаМассив(КомпонентыОбмена.УзелКорреспондента).Найти(ФорматОбмена.Версия) = Неопределено Тогда ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Версия формата сообщения обмена <%1> не поддерживается.'"), - ФорматОбмена.Версия - ); + ФорматОбмена.Версия); КонецЕсли; - Если ОбщегоНазначения.ЗначениеРеквизитаОбъекта(КомпонентыОбмена.УзелКорреспондента, "НомерПринятого") >= КомпонентыОбмена.НомерВходящегоСообщения Тогда + Если КомпонентыОбмена.ИспользоватьКвитирование Тогда - // Номер сообщения меньше либо равен ранее принятому. - КомпонентыОбмена.СостояниеОбменаДанными.РезультатВыполненияОбмена = - Перечисления.РезультатыВыполненияОбмена.Предупреждение_СообщениеОбменаБылоРанееПринято; - - ЗаписатьВПротоколВыполнения(КомпонентыОбмена, 174,,,,, Истина); - Прервать; + Если ОбщегоНазначения.ЗначениеРеквизитаОбъекта(КомпонентыОбмена.УзелКорреспондента, "НомерПринятого") >= КомпонентыОбмена.НомерВходящегоСообщения Тогда + + // Номер сообщения меньше либо равен ранее принятому. + КомпонентыОбмена.СостояниеОбменаДанными.РезультатВыполненияОбмена = + Перечисления.РезультатыВыполненияОбмена.Предупреждение_СообщениеОбменаБылоРанееПринято; + + ЗаписатьВПротоколВыполнения(КомпонентыОбмена, 174,,,,, Истина); + Прервать; + КонецЕсли; + + // Удаляем регистрацию изменений. + ПланыОбмена.УдалитьРегистрациюИзменений(КомпонентыОбмена.УзелКорреспондента, КомпонентыОбмена.НомерСообщенияПолученногоКорреспондентом); + + // Снимаем признак начальной выгрузки данных. + РегистрыСведений.ОбщиеНастройкиУзловИнформационныхБаз.СнятьПризнакНачальнойВыгрузкиДанных( + КомпонентыОбмена.УзелКорреспондента, КомпонентыОбмена.НомерСообщенияПолученногоКорреспондентом); КонецЕсли; - // Удаляем регистрацию изменений. - ПланыОбмена.УдалитьРегистрациюИзменений(КомпонентыОбмена.УзелКорреспондента, КомпонентыОбмена.НомерСообщенияПолученногоКорреспондентом); + // Проверяем возможность увеличения версии. + ДоступныеВерсииОтправителя = Header.AvailableVersion; + ДоступныеВерсииПолучателя = ВерсииФорматаОбменаМассив(КомпонентыОбмена.УзелКорреспондента); + НомерВерсииКорреспондента = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(КомпонентыОбмена.УзелКорреспондента, "ВерсияФорматаОбмена"); + МаксимальнаяОбщаяВерсия = НомерВерсииКорреспондента; - // Снимаем признак начальной выгрузки данных. - РегистрыСведений.ОбщиеНастройкиУзловИнформационныхБаз.СнятьПризнакНачальнойВыгрузкиДанных( - КомпонентыОбмена.УзелКорреспондента, КомпонентыОбмена.НомерСообщенияПолученногоКорреспондентом); - - КонецЕсли; - - - КомпонентыОбмена.XMLСхема = Header.Format; - КомпонентыОбмена.ВерсияФорматаОбмена = ФорматОбмена.Версия; - КомпонентыОбмена.МенеджерОбмена = МенеджерОбменаВерсииФормата( - КомпонентыОбмена.УзелКорреспондента, - КомпонентыОбмена.ВерсияФорматаОбмена); + Для Каждого ДоступнаяВерсияОтправителя Из ДоступныеВерсииОтправителя Цикл + Если ДоступныеВерсииПолучателя.Найти(ДоступнаяВерсияОтправителя) = Неопределено Тогда + Продолжить; + КонецЕсли; + РезультатСравненияВерсий = СравнитьВерсии(СокрЛП(ДоступнаяВерсияОтправителя), СокрЛП(МаксимальнаяОбщаяВерсия)); + Если РезультатСравненияВерсий > 0 Тогда + МаксимальнаяОбщаяВерсия = ДоступнаяВерсияОтправителя; + КонецЕсли; + КонецЦикла; - // Проверяем возможность увеличения версии. - ДоступныеВерсииОтправителя = Header.AvailableVersion; - ДоступныеВерсииПолучателя = ВерсииФорматаОбменаМассив(КомпонентыОбмена.УзелКорреспондента); - НомерВерсииКорреспондента = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(КомпонентыОбмена.УзелКорреспондента, "ВерсияФорматаОбмена"); - МаксимальнаяОбщаяВерсия = НомерВерсииКорреспондента; - Для Каждого ДоступнаяВерсияОтправителя Из ДоступныеВерсииОтправителя Цикл - Если ДоступныеВерсииПолучателя.Найти(ДоступнаяВерсияОтправителя) = Неопределено Тогда - Продолжить; + Если МаксимальнаяОбщаяВерсия <> НомерВерсииКорреспондента Тогда + // Обнаружена более свежая общая версия. + УзелКорреспондентаОбъект = КомпонентыОбмена.УзелКорреспондента.ПолучитьОбъект(); + УзелКорреспондентаОбъект.ВерсияФорматаОбмена = МаксимальнаяОбщаяВерсия; + УзелКорреспондентаОбъект.Записать(); + ЗаписатьВПротоколВыполнения(КомпонентыОбмена, + НСтр("ru = 'Изменен номер версии формата обмена.'"),,Ложь,,, Истина); КонецЕсли; - РезультатСравненияВерсий = СравнитьВерсии(СокрЛП(ДоступнаяВерсияОтправителя), СокрЛП(МаксимальнаяОбщаяВерсия)); - Если РезультатСравненияВерсий > 0 Тогда - МаксимальнаяОбщаяВерсия = ДоступнаяВерсияОтправителя; - КонецЕсли; - КонецЦикла; - Если МаксимальнаяОбщаяВерсия <> НомерВерсииКорреспондента Тогда - // Обнаружена более свежая общая версия. - УзелКорреспондентаОбъект = КомпонентыОбмена.УзелКорреспондента.ПолучитьОбъект(); - УзелКорреспондентаОбъект.ВерсияФорматаОбмена = МаксимальнаяОбщаяВерсия; - УзелКорреспондентаОбъект.Записать(); - ЗаписатьВПротоколВыполнения(КомпонентыОбмена, - НСтр("ru = 'Изменен номер версии формата обмена.'"),,Ложь,,, Истина); + КонецЕсли; ЧтениеXML.Прочитать(); // Body @@ -1627,6 +1699,19 @@ КонецПроцедуры +Функция СообщениеОтНеобновленнойНастройки(ЧтениеXML) + Если ЧтениеXML.ТипУзла = ТипУзлаXML.НачалоЭлемента + И ЧтениеXML.ЛокальноеИмя = "ФайлОбмена" Тогда + Пока ЧтениеXML.ПрочитатьАтрибут() Цикл + Если ЧтениеXML.ЛокальноеИмя = "ВерсияФормата" + ИЛИ ЧтениеXML.ЛокальноеИмя = "ВерсияКонфигурацииИсточника" Тогда + Возврат Истина; + КонецЕсли; + КонецЦикла; + КонецЕсли; + Возврат Ложь; +КонецФункции + // Выполняет преобразование объекта XDTO в структуру с данными. // // Параметры: @@ -1695,34 +1780,6 @@ КонецФункции -// Устанавливает значение параметра "Загрузка" для свойства объекта "ОбменДанными". -// -// Параметры: -// Объект - объект, для которого устанавливается свойство. -// Значение - значение устанавливаемого свойства "Загрузка". -// -Процедура УстановитьОбменДаннымиЗагрузка(Объект, Значение = Истина, Знач ОтправкаНазад = Ложь, УзелОбменаЗагрузкаДанных = Неопределено) Экспорт - - // Не все объекты, которые участвуют в обмене, имеют свойство "ОбменДанными". - Попытка - Объект.ОбменДанными.Загрузка = Значение; - Исключение - Возврат; - КонецПопытки; - - Если Не ОтправкаНазад - И УзелОбменаЗагрузкаДанных <> Неопределено - И НЕ УзелОбменаЗагрузкаДанных.Пустая() Тогда - - Попытка - Объект.ОбменДанными.Отправитель = УзелОбменаЗагрузкаДанных; - Исключение - КонецПопытки; - - КонецЕсли; - -КонецПроцедуры - // Записывает объект в информационную базу. // // Параметры: @@ -1748,9 +1805,9 @@ Если КомпонентыОбмена.ЭтоОбменЧерезПланОбмена Тогда // Устанавливаем режим загрузки данных для объекта. - УстановитьОбменДаннымиЗагрузка(Объект,, ОтправкаНазад, КомпонентыОбмена.УзелКорреспондента); + ОбменДаннымиСервер.УстановитьОбменДаннымиЗагрузка(Объект,, ОтправкаНазад, КомпонентыОбмена.УзелКорреспондента); Иначе - УстановитьОбменДаннымиЗагрузка(Объект,, ОтправкаНазад); + ОбменДаннымиСервер.УстановитьОбменДаннымиЗагрузка(Объект,, ОтправкаНазад); КонецЕсли; // Выполняем проверку на пометку удаления предопределенного элемента. @@ -1839,7 +1896,7 @@ // Устанавливаем узел-отправитель для предотвращения регистрации объекта на узле, для которого производим загрузку // проведение выполняем не в режиме загрузки. - УстановитьОбменДаннымиЗагрузка(Объект, Ложь, Ложь, УзелКорреспондента); + ОбменДаннымиСервер.УстановитьОбменДаннымиЗагрузка(Объект, Ложь, Ложь, УзелКорреспондента); Попытка @@ -1890,8 +1947,11 @@ // Функция ОтменитьПроведениеОбъектаВИБ(Объект, Отправитель) Экспорт + РегистрыСведений.РезультатыОбменаДанными.ЗарегистрироватьУстранениеПроблемы(Объект, + Перечисления.ТипыПроблемОбменаДанными.НепроведенныйДокумент); + // Устанавливаем режим загрузки данных для объекта. - УстановитьОбменДаннымиЗагрузка(Объект, Истина, Ложь, Отправитель); + ОбменДаннымиСервер.УстановитьОбменДаннымиЗагрузка(Объект, Истина, Ложь, Отправитель); // Проверка на коллизии дат запрета загрузки. Отказ = Ложь; @@ -2013,6 +2073,7 @@ #КонецОбласти #Область ОтправкаДанных + // Выполняет выгрузку объекта информационной базы. // // Параметры: @@ -2026,8 +2087,13 @@ ЗаписьXML = КомпонентыОбмена.ФайлОбмена; Если ТипЗнч(Объект) <> Тип("Структура") Тогда + Попытка + ТекОбъект = Объект.Ссылка; + Исключение + ТекОбъект = Объект; + КонецПопытки; - КомпонентыОбмена.ВыгруженныеОбъекты.Добавить(Объект.Ссылка); + КомпонентыОбмена.ВыгруженныеОбъекты.Добавить(ТекОбъект); ОбъектМетаданныхТекущий = Объект.Метаданные(); ПравилоОбработки = ПОДПоОбъектуМетаданных(КомпонентыОбмена, ОбъектМетаданныхТекущий); @@ -2092,20 +2158,21 @@ Если КомпонентыОбмена.ВыгруженныеОбъекты.Найти(ЗначениеСсылки) = Неопределено И ВыгружатьОбъектПоНеобходимости(КомпонентыОбмена, ЗначениеСсылки) Тогда - Если Не РегистрыСведений.ДанныеОбъектовДляРегистрацииВОбменах.ОбъектЕстьВРегистре(ЗначениеСсылки, КомпонентыОбмена.УзелКорреспондента) Тогда + Если Не РегистрыСведений.ДанныеОбъектовДляРегистрацииВОбменах.ОбъектЕстьВРегистре( + ЗначениеСсылки, КомпонентыОбмена.УзелКорреспондента) Тогда ОбъектВыгружаемыйПоСсылке = Неопределено; - Попытка + Если ОбщегоНазначения.СсылкаСуществует(ЗначениеСсылки) Тогда ОбъектВыгружаемыйПоСсылке = ЗначениеСсылки.ПолучитьОбъект(); - Исключение - КонецПопытки; + КонецЕсли; Если ОбъектВыгружаемыйПоСсылке <> Неопределено Тогда ВыгрузкаОбъектаВыборки(КомпонентыОбмена, ОбъектВыгружаемыйПоСсылке); КомпонентыОбмена.ВыгруженныеПоСсылкеОбъекты.Добавить(ЗначениеСсылки); - РегистрыСведений.ДанныеОбъектовДляРегистрацииВОбменах.ДобавитьОбъектВФильтрРазрешенныхОбъектов(ЗначениеСсылки, КомпонентыОбмена.УзелКорреспондента); + РегистрыСведений.ДанныеОбъектовДляРегистрацииВОбменах.ДобавитьОбъектВФильтрРазрешенныхОбъектов( + ЗначениеСсылки, КомпонентыОбмена.УзелКорреспондента); КонецЕсли; @@ -2119,13 +2186,57 @@ // 4. Записываем ОбъектXDTO в XML-файл. ФабрикаXDTO.ЗаписатьXML(ЗаписьXML, ОбъектXDTO); - + КонецЦикла; КонецПроцедуры #КонецОбласти +#Область ПолучениеДанные + +// Функция проверяет формат сообщения обмена: соответствует ли он формату обмена через EnterpriseData. +// +// Параметры: +// ЧтениеXML - ЧтениеXML - сообщение обмена. +// +// Возвращаемое значение +// Истина - формат соответствует, ложь - не соответствует. +Функция ПроверитьФорматСообщенияОбмена(ЧтениеXML) Экспорт + Если (ЧтениеXML.ТипУзла <> ТипУзлаXML.НачалоЭлемента + Или ЧтениеXML.ЛокальноеИмя <> "Message") Тогда + Возврат Ложь; + КонецЕсли; + + ЧтениеXML.Прочитать(); // Header + Если ЧтениеXML.ТипУзла <> ТипУзлаXML.НачалоЭлемента + Или ЧтениеXML.ЛокальноеИмя <> "Header" Тогда + Возврат Ложь; + КонецЕсли; + Попытка + Header = ФабрикаXDTO.ПрочитатьXML(ЧтениеXML, ФабрикаXDTO.Тип("http://www.1c.ru/SSL/Exchange/Message", "Header")); + Исключение + Возврат Ложь; + КонецПопытки; + Если ЧтениеXML.ТипУзла <> ТипУзлаXML.НачалоЭлемента + Или ЧтениеXML.ЛокальноеИмя <> "Body" Тогда + Возврат Ложь; + КонецЕсли; + Если Не Header.Установлено("Confirmation") Тогда + Возврат Ложь; + КонецЕсли; + Confirmation = Header.Confirmation; + + ИмяПланаОбмена = Confirmation.ExchangePlan; + + Если Метаданные.ПланыОбмена.Найти(ИмяПланаОбмена) = Неопределено Тогда + Возврат Ложь; + КонецЕсли; + Возврат Истина; +КонецФункции + +#КонецОбласти + #Область ПроцедурыИФункцииВерсионированияФорматаОбмена // Возвращает менеджер обмена данными, соответствующий указанной версии формата обмена. // @@ -2140,11 +2251,11 @@ Если Результат = Неопределено Тогда ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Не определен Менеджер конвертации для версии формата обмена <%1>.'"), - ВерсияФормата - ); + ВерсияФормата); КонецЕсли; Возврат Результат; + КонецФункции // Возвращает строку с форматом обмена. @@ -2159,10 +2270,10 @@ Функция ФорматОбмена(Знач УзелИнформационнойБазы, Знач ВерсияФормата) Экспорт ФорматОбмена = МенеджерПланаОбмена(УзелИнформационнойБазы).ФорматОбмена(); - ЭлементыФормата = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(ФорматОбмена, "/"); + ЭлементыФормата = СтрРазделить(ФорматОбмена, "/"); ЭлементыФормата.Добавить(ВерсияФормата); - Возврат СтроковыеФункцииКлиентСервер.СтрокаИзМассиваПодстрок(ЭлементыФормата, "/"); + Возврат СтрСоединить(ЭлементыФормата, "/"); КонецФункции // Возвращает строку с номером версии формата обмена, поддерживаемой получателем данных. @@ -2173,7 +2284,7 @@ Функция ВерсияФорматаОбменаПриВыгрузке(Знач Получатель) Экспорт Результат = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(Получатель, "ВерсияФорматаОбмена"); - Если Результат = Неопределено Тогда + Если Не ЗначениеЗаполнено(Результат) Тогда // Если версия формата обмена не задана, то используем минимальную версию. Результат = МинимальнаяВерсияФорматаОбмена(Получатель); @@ -2196,15 +2307,13 @@ Строка1 = ?(ПустаяСтрока(СтрокаВерсии1), "0.0", СтрокаВерсии1); Строка2 = ?(ПустаяСтрока(СтрокаВерсии2), "0.0", СтрокаВерсии2); - Версия1 = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(Строка1, "."); + Версия1 = СтрРазделить(Строка1, "."); Если Версия1.Количество() < 2 ИЛИ Версия1.Количество() > 3 Тогда - ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Неправильный формат параметра СтрокаВерсии1: %1'"), СтрокаВерсии1); + ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Неправильный формат параметра СтрокаВерсии1: %1'"), СтрокаВерсии1); КонецЕсли; - Версия2 = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(Строка2, "."); + Версия2 = СтрРазделить(Строка2, "."); Если Версия2.Количество() < 2 ИЛИ Версия2.Количество() > 3 Тогда - ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Неправильный формат параметра СтрокаВерсии2: %1'"), СтрокаВерсии2); + ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Неправильный формат параметра СтрокаВерсии2: %1'"), СтрокаВерсии2); КонецЕсли; Результат = 0; @@ -2267,7 +2376,7 @@ | ШапкаПланаОбмена.Ссылка = ДанныеОбъектовДляРегистрацииВОбменах.УзелИнформационнойБазы | И ДанныеОбъектовДляРегистрацииВОбменах.Ссылка = &Объект |ГДЕ - | ШапкаПланаОбмена.Ссылка <> &ЭтотУзел + | НЕ ШапкаПланаОбмена.ЭтотУзел | И ШапкаПланаОбмена.[ИмяРеквизитаФлага] = ЗНАЧЕНИЕ(Перечисление.РежимыВыгрузкиОбъектовОбмена.ВыгружатьПриНеобходимости) | И НЕ ШапкаПланаОбмена.ПометкаУдаления | И ДанныеОбъектовДляРегистрацииВОбменах.Ссылка = &Объект @@ -2278,7 +2387,6 @@ Запрос = Новый Запрос; Запрос.Текст = ТекстЗапроса; - Запрос.УстановитьПараметр("ЭтотУзел", ОбменДаннымиПовтИсп.ПолучитьЭтотУзелПланаОбмена(ИмяПланаОбмена)); Запрос.УстановитьПараметр("Объект", Ссылка); МассивУзлов = Запрос.Выполнить().Выгрузить().ВыгрузитьКолонку("Узел"); @@ -2376,31 +2484,56 @@ Возврат ПравилаОбработкиДанных; КонецФункции -Функция ТаблицаПравилКонвертации(XMLСхема, МенеджерОбмена , НаправлениеОбмена) +Функция ТаблицаПравилКонвертации(XMLСхема, МенеджерОбмена , НаправлениеОбмена, ПравилаОбработкиДанных) // Инициализация таблицы правил конвертации ПравилаКонвертации = Новый ТаблицаЗначений; ПравилаКонвертации.Колонки.Добавить("ИмяПКО", Новый ОписаниеТипов("Строка",,,,Новый КвалификаторыСтроки(50))); ПравилаКонвертации.Колонки.Добавить("ОбъектДанных"); - ПравилаКонвертации.Колонки.Добавить("ОбъектФормата", Новый ОписаниеТипов("Строка")); - ПравилаКонвертации.Колонки.Добавить("ТипПолученныхДанныхСтрокой", Новый ОписаниеТипов("Строка",,,,Новый КвалификаторыСтроки(300))); - ПравилаКонвертации.Колонки.Добавить("ИмяТаблицыПолученныхДанных", Новый ОписаниеТипов("Строка",,,,Новый КвалификаторыСтроки(300))); - ПравилаКонвертации.Колонки.Добавить("ПредставлениеТипаПолученныхДанных", Новый ОписаниеТипов("Строка",,,,Новый КвалификаторыСтроки(300))); - ПравилаКонвертации.Колонки.Добавить("Свойства", Новый ОписаниеТипов("ТаблицаЗначений")); - ПравилаКонвертации.Колонки.Добавить("ПоляПоиска", Новый ОписаниеТипов("Массив")); - ПравилаКонвертации.Колонки.Добавить("СвойстваТабличныхЧастей", Новый ОписаниеТипов("Структура")); - ПравилаКонвертации.Колонки.Добавить("ПоляПредставленияОбъекта", Новый ОписаниеТипов("Строка",,,,Новый КвалификаторыСтроки(300))); + ПравилаКонвертации.Колонки.Добавить("ОбъектФормата", Новый ОписаниеТипов("Строка")); + ПравилаКонвертации.Колонки.Добавить("ТипПолученныхДанныхСтрокой", Новый ОписаниеТипов("Строка",,,,Новый КвалификаторыСтроки(300))); + ПравилаКонвертации.Колонки.Добавить("ИмяТаблицыПолученныхДанных", Новый ОписаниеТипов("Строка",,,,Новый КвалификаторыСтроки(300))); + ПравилаКонвертации.Колонки.Добавить("ПредставлениеТипаПолученныхДанных", Новый ОписаниеТипов("Строка",,,,Новый КвалификаторыСтроки(300))); + ПравилаКонвертации.Колонки.Добавить("Свойства", Новый ОписаниеТипов("ТаблицаЗначений")); + ПравилаКонвертации.Колонки.Добавить("ПоляПоиска", Новый ОписаниеТипов("Массив")); + ПравилаКонвертации.Колонки.Добавить("СвойстваТабличныхЧастей", Новый ОписаниеТипов("Структура")); + ПравилаКонвертации.Колонки.Добавить("ПоляПредставленияОбъекта", Новый ОписаниеТипов("Строка",,,,Новый КвалификаторыСтроки(300))); ПравилаКонвертации.Колонки.Добавить("РеквизитыШапкиПолученныхДанныхСтрокой", Новый ОписаниеТипов("Строка",,,,Новый КвалификаторыСтроки(1000))); - ПравилаКонвертации.Колонки.Добавить("ПриОтправкеДанных", Новый ОписаниеТипов("Строка")); - ПравилаКонвертации.Колонки.Добавить("ПриКонвертацииДанныхXDTO", Новый ОписаниеТипов("Строка")); - ПравилаКонвертации.Колонки.Добавить("ПередЗаписьюПолученныхДанных", Новый ОписаниеТипов("Строка")); - ПравилаКонвертации.Колонки.Добавить("ПослеЗагрузкиВсехДанных", Новый ОписаниеТипов("Строка")); - ПравилаКонвертации.Колонки.Добавить("РасширеннаяСсылка", Новый ОписаниеТипов("Булево")); - ПравилаКонвертации.Колонки.Добавить("ПравилоДляГруппыСправочника", Новый ОписаниеТипов("Булево")); - ПравилаКонвертации.Колонки.Добавить("ВариантИдентификации", Новый ОписаниеТипов("Строка",,,,Новый КвалификаторыСтроки(60))); + ПравилаКонвертации.Колонки.Добавить("ПриОтправкеДанных", Новый ОписаниеТипов("Строка")); + ПравилаКонвертации.Колонки.Добавить("ПриКонвертацииДанныхXDTO", Новый ОписаниеТипов("Строка")); + ПравилаКонвертации.Колонки.Добавить("ПередЗаписьюПолученныхДанных", Новый ОписаниеТипов("Строка")); + ПравилаКонвертации.Колонки.Добавить("ПослеЗагрузкиВсехДанных", Новый ОписаниеТипов("Строка")); + ПравилаКонвертации.Колонки.Добавить("РасширеннаяСсылка", Новый ОписаниеТипов("Булево")); + ПравилаКонвертации.Колонки.Добавить("ПравилоДляГруппыСправочника", Новый ОписаниеТипов("Булево")); + ПравилаКонвертации.Колонки.Добавить("ВариантИдентификации", Новый ОписаниеТипов("Строка",,,,Новый КвалификаторыСтроки(60))); + ПравилаКонвертации.Колонки.Добавить("РазрешитьСоздаватьОбъектИзСтруктуры", Неопределено); МенеджерОбмена.ЗаполнитьПравилаКонвертацииОбъектов(НаправлениеОбмена, ПравилаКонвертации); + Если НаправлениеОбмена = "Получение" Тогда + + // Отберем строки правил конвертации, у которых не заполнен реквизит "РазрешитьСоздаватьОбъектИзСтруктуры". + ПараметрыОтбора = Новый Структура("РазрешитьСоздаватьОбъектИзСтруктуры", Неопределено); + СтрокиДляОбработки = ПравилаКонвертации.НайтиСтроки(ПараметрыОтбора); + + // Для найденых строк необходимо заполнить реквизит "РазрешитьСоздаватьОбъектИзСтруктуры". + // Реквизит заполняется по следующему алгоритму: + // если правило конвертации объекта формата не указано + // в правилах обработки данных для данного объекта формата, + // тогда реквзит заполняется значением "Истина", + // т.к. полученные по этому ПКО данные не смогут быть загружены самостоятельно, + // иначе заполняем значением "Ложь". + Для Каждого СтрокаОбработки Из СтрокиДляОбработки Цикл + СтрокаОбработки.РазрешитьСоздаватьОбъектИзСтруктуры = Истина; + СтрокаПравилОбработкиДанных = ПравилаОбработкиДанных.Найти(СтрокаОбработки.ОбъектФормата, "ОбъектВыборкиФормат"); + Если СтрокаПравилОбработкиДанных <> Неопределено Тогда + МассивИспользуемыхПКО = СтрокаПравилОбработкиДанных.ИспользуемыеПКО; + СтрокаОбработки.РазрешитьСоздаватьОбъектИзСтруктуры = МассивИспользуемыхПКО.Найти(СтрокаОбработки.ИмяПКО) = Неопределено; + КонецЕсли; + КонецЦикла; + + КонецЕсли; + // Добавляем служебные поля таблицы правил конвертации ПравилаКонвертации.Колонки.Добавить("ТипXDTO"); ПравилаКонвертации.Колонки.Добавить("ТипСсылкиXDTO"); @@ -2411,6 +2544,7 @@ ПравилаКонвертации.Колонки.Добавить("ПолноеИмя"); ПравилаКонвертации.Колонки.Добавить("ЭтоДокумент"); + ПравилаКонвертации.Колонки.Добавить("ЭтоРегистрСведений"); ПравилаКонвертации.Колонки.Добавить("ЭтоСправочник"); ПравилаКонвертации.Колонки.Добавить("ЭтоПеречисление"); ПравилаКонвертации.Колонки.Добавить("ЭтоПланВидовХарактеристик"); @@ -2447,7 +2581,7 @@ ПравилоКонвертации.ИмяТаблицыПолученныхДанных = МетаданныеОбъекта.ПолноеИмя(); ПравилоКонвертации.ПредставлениеТипаПолученныхДанных = МетаданныеОбъекта.Представление(); - ПравилоКонвертации.ТипПолученныхДанныхСтрокой = ИмяТипаДанныхПоОбъектуМетаданных(ПравилоКонвертации.ОбъектДанных, Ложь, Ложь); + ПравилоКонвертации.ТипПолученныхДанныхСтрокой = ИмяТипаДанныхПоОбъектуМетаданных(ПравилоКонвертации.ОбъектДанных, Неопределено); ПравилоКонвертации.ПоляПредставленияОбъекта = ?(ПравилоКонвертации.ПоляПоиска.Количество() = 0, "", ПравилоКонвертации.ПоляПоиска[0]); @@ -2494,13 +2628,14 @@ ИмяБазовогоТипа = ОбщегоНазначения.ИмяБазовогоТипаПоОбъектуМетаданных(ПравилоКонвертации.ОбъектДанных); - ПравилоКонвертации.ТипДанных = Тип(ИмяТипаДанныхПоОбъектуМетаданных(ПравилоКонвертации.ОбъектДанных, Ложь, Ложь)); + ПравилоКонвертации.ТипДанных = Тип(ИмяТипаДанныхПоОбъектуМетаданных(ПравилоКонвертации.ОбъектДанных, ИмяБазовогоТипа)); Иначе ИмяБазовогоТипа = ""; КонецЕсли; ПравилоКонвертации.ЭтоДокумент = (ИмяБазовогоТипа = ОбщегоНазначения.ИмяТипаДокументы()); + ПравилоКонвертации.ЭтоРегистрСведений = (ИмяБазовогоТипа = ОбщегоНазначения.ИмяТипаРегистрыСведений()); ПравилоКонвертации.ЭтоСправочник = (ИмяБазовогоТипа = ОбщегоНазначения.ИмяТипаСправочники()); ПравилоКонвертации.ЭтоПеречисление = (ИмяБазовогоТипа = ОбщегоНазначения.ИмяТипаПеречисления()); ПравилоКонвертации.ЭтоПланВидовХарактеристик = (ИмяБазовогоТипа = ОбщегоНазначения.ИмяТипаПланыВидовХарактеристик()); @@ -2560,8 +2695,9 @@ Если ЗначениеЗаполнено(ПравилоКонвертации.ПоляПоиска) Тогда Для Каждого ЭлементПолейПоиска Из ПравилоКонвертации.ПоляПоиска Цикл - ПоляПоискаМассивом = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(ЭлементПолейПоиска, ",",, Истина); + ПоляПоискаМассивом = СтрРазделить(ЭлементПолейПоиска, ","); Для Каждого ПолеПоиска Из ПоляПоискаМассивом Цикл + ПолеПоиска = СокрЛП(ПолеПоиска); Если ПолеПоиска = ПКС.СвойствоКонфигурации Тогда ПКС.ОбработкаПоисковогоСвойства = Истина; Прервать; @@ -2618,7 +2754,7 @@ Для Каждого ПравилоКонвертации Из ПравилаКонвертации Цикл ПравилоКонвертации.ТипXDTO = ФабрикаXDTO.Тип(XMLСхема, ПравилоКонвертации.ТипXDTO); - ПравилоКонвертации.ТипДанных = Тип(ИмяТипаДанныхПоОбъектуМетаданных(ПравилоКонвертации.ТипДанных, Ложь, Ложь)); + ПравилоКонвертации.ТипДанных = Тип(ИмяТипаДанныхПоОбъектуМетаданных(ПравилоКонвертации.ТипДанных, Неопределено)); КонецЦикла; @@ -2661,6 +2797,13 @@ // Получаем выборку измененных данных. ВыборкаИзменений = ПланыОбмена.ВыбратьИзменения(УзелДляОбмена, НомерСообщения); + КоличествоОбъектовКВыгрузке = 0; + Пока ВыборкаИзменений.Следующий() Цикл + КоличествоОбъектовКВыгрузке = КоличествоОбъектовКВыгрузке + 1; + КонецЦикла; + КомпонентыОбмена.Вставить("КоличествоОбъектовКВыгрузке", КоличествоОбъектовКВыгрузке); + ВыборкаИзменений.Сбросить(); + УзелДляОбменаОбъект = УзелДляОбмена.ПолучитьОбъект(); // Алгоритм выгрузки данных в XML-файл: @@ -2673,9 +2816,12 @@ Пока ВыборкаИзменений.Следующий() Цикл + КомпонентыОбмена.СчетчикВыгруженныхОбъектов = КомпонентыОбмена.СчетчикВыгруженныхОбъектов + 1; + ОбменДаннымиСервер.РассчитатьПроцентВыгрузки(КомпонентыОбмена.СчетчикВыгруженныхОбъектов, КомпонентыОбмена.КоличествоОбъектовКВыгрузке); + // 1. Получаем Данные из ИБ Данные = ВыборкаИзменений.Получить(); - + // 2. Отправляем информацию об удалении либо выгружаем данные. Если ТипЗнч(Данные) = Тип("УдалениеОбъекта") Тогда ВыгрузитьУдаление(КомпонентыОбмена, Данные.Ссылка); @@ -2833,8 +2979,7 @@ ПравилаКонвертацииПредопределенныхДанных, ТипЗнч(ЗначениеПеречисления), ТипПеречисленияXDTO); ЗначениеXDTO = ФабрикаXDTO.Создать(ТипПеречисленияXDTO, - ЗначениеПеречисленияXDTO(ПравилоКонвертации.КонвертацииЗначенийПриОтправке, ЗначениеПеречисления) - ); + ЗначениеПеречисленияXDTO(ПравилоКонвертации.КонвертацииЗначенийПриОтправке, ЗначениеПеречисления)); КонецЕсли; Возврат ЗначениеXDTO; @@ -2857,16 +3002,14 @@ ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Ошибка правил конвертации предопределенных данных. |Задано более одного правила конвертации для типа источника <%1>.'"), - Строка(Тип) - ); + Строка(Тип)); КонецЕсли; ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Ошибка правил конвертации предопределенных данных. |Правило конвертации не определено для типа источника <%1>.'"), - Строка(Тип) - ); + Строка(Тип)); Иначе @@ -2884,8 +3027,7 @@ НСтр("ru = 'Ошибка правил конвертации предопределенных данных. |Задано более одного правила конвертации для типа источника <%1> и типа приемника <%2>.'"), Строка(Тип), - Строка(ТипXDTO) - ); + Строка(ТипXDTO)); КонецЕсли; @@ -2893,8 +3035,7 @@ НСтр("ru = 'Ошибка правил конвертации предопределенных данных. |Правило конвертации не определено для типа источника <%1> и типа приемника <%2>.'"), Строка(Тип), - Строка(ТипXDTO) - ); + Строка(ТипXDTO)); КонецЕсли; @@ -2910,8 +3051,7 @@ |Тип значения источника: <%1> |Значение источника: <%2>'"), ТипЗнч(Значение), - Строка(Значение) - ); + Строка(Значение)); КонецЕсли; Возврат ЗначениеXDTO; @@ -3008,7 +3148,7 @@ Приемник.Вставить(ИмяСвойства, Значение); - ИначеЕсли Найти(ЗначениеXDTO.Тип().Имя, "КлючевыеСвойства") > 0 Тогда + ИначеЕсли СтрНайти(ЗначениеXDTO.Тип().Имя, "КлючевыеСвойства") > 0 Тогда Значение = Новый Структура("ЭтоНаборКлючевыхСвойств"); Значение.Вставить("ТипЗначения", СтрЗаменить(ЗначениеXDTO.Тип().Имя, "КлючевыеСвойства", "")); @@ -3023,7 +3163,7 @@ Приемник[ИмяСвойства] = Значение; КонецЕсли; - ИначеЕсли Найти(ЗначениеXDTO.Тип().Имя, "ОбщиеСвойства") > 0 Тогда + ИначеЕсли СтрНайти(ЗначениеXDTO.Тип().Имя, "ОбщиеСвойства") > 0 Тогда Для Каждого ПодСвойство Из ЗначениеXDTO.Свойства() Цикл @@ -3093,7 +3233,7 @@ Для Каждого Колонка Из Тип.Свойства Цикл - Если Найти(Колонка.Тип.Имя, "ОбщиеСвойства") > 0 Тогда + Если СтрНайти(Колонка.Тип.Имя, "ОбщиеСвойства") > 0 Тогда Для Каждого ПодКолонка Из Колонка.Тип.Свойства Цикл @@ -3279,20 +3419,34 @@ Результат = Неопределено; // ПравилоКонвертации.ПоляПоискаОбъекта - массив, содержит разные варианты поиска // элементы массива - таблица значений с полями поиска. - Если ПравилоКонвертации.ПоляПоиска = Неопределено ИЛИ - ТипЗнч(ПравилоКонвертации.ПоляПоиска) <> Тип("Массив") Тогда + Если ПравилоКонвертации.ПоляПоиска = Неопределено + ИЛИ ТипЗнч(ПравилоКонвертации.ПоляПоиска) <> Тип("Массив") Тогда Возврат Результат; КонецЕсли; Для Каждого ПопыткаПоиска Из ПравилоКонвертации.ПоляПоиска Цикл ПоляПоиска = Новый Структура(ПопыткаПоиска); ЗаполнитьЗначенияСвойств(ПоляПоиска, ПолученныеДанные); - + + // Если хотя бы одно поле поиска не заполнено, вариант поиска пропускается. + // Вариант поиска является полноценным, если заполнены все поля. + // В противном случае должен сработать другой вариант поиска. + ЕстьНезаполненныеПоля = Ложь; + Для Каждого ПолеПоиска Из ПоляПоиска Цикл + Если Не ЗначениеЗаполнено(ПолеПоиска.Значение) Тогда + ЕстьНезаполненныеПоля = Истина; + Прервать; + КонецЕсли; + КонецЦикла; + Если ЕстьНезаполненныеПоля Тогда + // Переход к следующему варианту поиска. + Продолжить; + КонецЕсли; + Если ПравилоКонвертации.ЭтоДокумент И ПоляПоиска.Количество() = 2 И ПоляПоиска.Свойство("Дата") - И ПоляПоиска.Свойство("Номер") - Тогда + И ПоляПоиска.Свойство("Номер") Тогда Результат = ПравилоКонвертации.МенеджерОбъекта.НайтиПоНомеру(ПоляПоиска.Номер, ПоляПоиска.Дата); @@ -3320,13 +3474,24 @@ Для Каждого ПолеПоиска Из ПоляПоиска Цикл - Запрос.УстановитьПараметр(ПолеПоиска.Ключ, ПолеПоиска.Значение); + Если ОбменДаннымиПовтИсп.ЭтоСтроковыйРеквизитНеограниченнойДлины(ПравилоКонвертации.ПолноеИмя, ПолеПоиска.Ключ) Тогда + + ОтборСтрокой = "ВЫРАЗИТЬ(Таблица.[Ключ] КАК СТРОКА([ДлинаСтроки])) = &[Ключ]"; + ОтборСтрокой = СтрЗаменить(ОтборСтрокой, "[Ключ]", ПолеПоиска.Ключ); + ОтборСтрокой = СтрЗаменить(ОтборСтрокой, "[ДлинаСтроки]", Формат(СтрДлина(ПолеПоиска.Значение), "ЧГ=0")); + Отбор.Добавить(ОтборСтрокой); + + Иначе + + Отбор.Добавить(СтрЗаменить("Таблица.[Ключ] = &[Ключ]", "[Ключ]", ПолеПоиска.Ключ)); + + КонецЕсли; - Отбор.Добавить(СтрЗаменить("Таблица.[Ключ] = &[Ключ]", "[Ключ]", ПолеПоиска.Ключ)); + Запрос.УстановитьПараметр(ПолеПоиска.Ключ, ПолеПоиска.Значение); КонецЦикла; - УсловиеОтбора = СтроковыеФункцииКлиентСервер.СтрокаИзМассиваПодстрок(Отбор, " И "); + УсловиеОтбора = СтрСоединить(Отбор, " И "); ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "[УсловиеОтбора]", УсловиеОтбора); ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "[ПолноеИмя]", ПравилоКонвертации.ПолноеИмя); Запрос.Текст = ТекстЗапроса; @@ -3354,7 +3519,12 @@ ПоляКопии = ПравилоКонвертации.Свойства.ВыгрузитьКолонку("СвойствоКонфигурации"); Если ПоляКопии.Количество() > 0 Тогда - ПоляКопии = СтроковыеФункцииКлиентСервер.СтрокаИзМассиваПодстрок(ПоляКопии, ",", Истина); + + Для НомерПоля = 1 По ПоляКопии.Количество() Цикл + ПоляКопии[НомерПоля - 1] = СокрЛП(ПоляКопии[НомерПоля - 1]); + КонецЦикла; + + ПоляКопии = СтрСоединить(ПоляКопии, ","); ЗаполнитьЗначенияСвойств(ДанныеИБ, ПолученныеДанные, ПоляКопии); КонецЕсли; @@ -3375,6 +3545,8 @@ Иначе ПолученныеДанные = ПравилоКонвертации.МенеджерОбъекта.СоздатьЭлемент(); КонецЕсли; + ИначеЕсли ПравилоКонвертации.ЭтоРегистрСведений Тогда + ПолученныеДанные = ПравилоКонвертации.МенеджерОбъекта.СоздатьНаборЗаписей(); КонецЕсли; Возврат ПолученныеДанные @@ -3442,7 +3614,7 @@ Если КлючевыеПоля = "" Тогда Возврат; // Без ключевых полей нельзя получить соответствие новых и старых данных. Иначе - КлючевыеПоля = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(КлючевыеПоля, ","); + КлючевыеПоля = СтрРазделить(КлючевыеПоля, ","); КонецЕсли; КонецЕсли; @@ -3468,22 +3640,22 @@ ИмяТипаОбъекта = ОбщегоНазначения.ВидОбъектаПоТипу(ТипЗнч(Объект.Ссылка)); - // По типу документа смотрим заполнен кол или номер. + // По типу документа смотрим заполнен код или номер. Если ИмяТипаОбъекта = "Документ" - ИЛИ ИмяТипаОбъекта = "БизнесПроцесс" - ИЛИ ИмяТипаОбъекта = "Задача" Тогда + Или ИмяТипаОбъекта = "БизнесПроцесс" + Или ИмяТипаОбъекта = "Задача" Тогда - Если НЕ ЗначениеЗаполнено(Объект.Номер) Тогда + Если Не ЗначениеЗаполнено(Объект.Номер) Тогда Объект.УстановитьНовыйНомер(); КонецЕсли; ИначеЕсли ИмяТипаОбъекта = "Справочник" - ИЛИ ИмяТипаОбъекта = "ПланВидовХарактеристик" - ИЛИ ИмяТипаОбъекта = "ПланОбмена" Тогда + Или ИмяТипаОбъекта = "ПланВидовХарактеристик" Тогда - Если НЕ ЗначениеЗаполнено(Объект.Код) Тогда + Если Не ЗначениеЗаполнено(Объект.Код) + И Объект.Метаданные().Автонумерация Тогда Объект.УстановитьНовыйКод(); @@ -3538,12 +3710,41 @@ // Занесем данные об объекте в таблицу отложенной обработки. НоваяСтрока = КомпонентыОбмена.ЗагруженныеОбъекты.Добавить(); НоваяСтрока.ИмяОбработчика = ПравилоКонвертации.ПослеЗагрузкиВсехДанных; - НоваяСтрока.Объект = ДанныеДляЗаписиВИБ; + НоваяСтрока.Объект = ДанныеДляЗаписиВИБ; + НоваяСтрока.СсылкаНаОбъект = ДанныеДляЗаписиВИБ.Ссылка; КонецЕсли; КонецПроцедуры +Процедура УдалитьВременныеОбъектыСозданныеПоСсылкам(КомпонентыОбмена) Экспорт + + ТаблицаОбъектовСозданныхПоСсылкам = КомпонентыОбмена.ТаблицаОбъектовСозданныхПоСсылкам; + + Для Каждого СтрокаТаблицы Из ТаблицаОбъектовСозданныхПоСсылкам Цикл + + СсылкаНаОбъект = СтрокаТаблицы.СсылкаНаОбъект; + + // Необходимо удалить ссылку на объект из таблицы для отложенного заполнения объектов. + СтрокаТаблицыОтложенногоЗаполнения = КомпонентыОбмена.ЗагруженныеОбъекты.Найти(СсылкаНаОбъект, "СсылкаНаОбъект"); + Если СтрокаТаблицыОтложенногоЗаполнения <> Неопределено Тогда + КомпонентыОбмена.ЗагруженныеОбъекты.Удалить(СтрокаТаблицыОтложенногоЗаполнения); + КонецЕсли; + + Если ЗначениеЗаполнено(СсылкаНаОбъект) Тогда + + ОбъектСозданныйПоСсылке = СсылкаНаОбъект.ПолучитьОбъект(); + ОбменДаннымиСервер.УстановитьОбменДаннымиЗагрузка(ОбъектСозданныйПоСсылке, Истина, Ложь, КомпонентыОбмена.УзелКорреспондента); + УдалитьОбъект(ОбъектСозданныйПоСсылке, Истина); + + КонецЕсли; + + КонецЦикла; + + ТаблицаОбъектовСозданныхПоСсылкам.Очистить(); + +КонецПроцедуры + Процедура ОтложенноеЗаполнениеОбъектов(КомпонентыОбмена) ПараметрыКонвертации = КомпонентыОбмена.ПараметрыКонвертации; @@ -3580,14 +3781,13 @@ |Тип источника: %1 |Описание ошибки: %2'"), Строка(Объект), - ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()) - ); + ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); КонецПопытки; ОбъектМодифицирован = СтруктураПараметров.ОбъектМодифицирован; Если ОбъектМодифицирован Тогда - УстановитьОбменДаннымиЗагрузка(Объект, Истина, Ложь, КомпонентыОбмена.УзелКорреспондента); + ОбменДаннымиСервер.УстановитьОбменДаннымиЗагрузка(Объект, Истина, Ложь, КомпонентыОбмена.УзелКорреспондента); Объект.Записать(); КонецЕсли; @@ -3615,7 +3815,7 @@ // Устанавливаем узел-отправитель для предотвращения регистрации объекта на узле, для которого производим загрузку // проведение выполняем не в режиме загрузки. - УстановитьОбменДаннымиЗагрузка(Объект, Ложь, Ложь, КомпонентыОбмена.УзелКорреспондента); + ОбменДаннымиСервер.УстановитьОбменДаннымиЗагрузка(Объект, Ложь, Ложь, КомпонентыОбмена.УзелКорреспондента); ОписаниеОшибки = ""; ОбъектЗаписанУспешно = Ложь; @@ -3686,17 +3886,14 @@ #Область Прочее -Функция РазложитьФорматОбмена(Знач ФорматОбмена) +Функция РазложитьФорматОбмена(Знач ФорматОбмена) Экспорт Результат = Новый Структура("БазовыйФормат, Версия"); - ЭлементыФормата = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(ФорматОбмена, "/"); + ЭлементыФормата = СтрРазделить(ФорматОбмена, "/"); Если ЭлементыФормата.Количество() = 0 Тогда - ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Неканоническое имя формата обмена <%1>'"), - ФорматОбмена - ); + ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Неканоническое имя формата обмена <%1>'"), ФорматОбмена); КонецЕсли; Результат.Версия = ЭлементыФормата[ЭлементыФормата.ВГраница()]; @@ -3705,7 +3902,7 @@ ЭлементыФормата.Удалить(ЭлементыФормата.ВГраница()); - Результат.БазовыйФормат = СтроковыеФункцииКлиентСервер.СтрокаИзМассиваПодстрок(ЭлементыФормата, "/"); + Результат.БазовыйФормат = СтрСоединить(ЭлементыФормата, "/"); Возврат Результат; КонецФункции @@ -3729,8 +3926,8 @@ |ВЫБРАТЬ | Ссылка |ИЗ РегистрСведений.ПубличныеИдентификаторыСинхронизируемыхОбъектов - |ГДЕ УзелИнформационнойБазы = &УзелИнформационнойБазы И - | Идентификатор = &Идентификатор"); + |ГДЕ УзелИнформационнойБазы = &УзелИнформационнойБазы + | И Идентификатор = &Идентификатор"); Запрос.УстановитьПараметр("УзелИнформационнойБазы", КомпонентыОбмена.УзелКорреспондента); Запрос.УстановитьПараметр("Идентификатор", УИДОбъектаXDTO); Выборка = Запрос.Выполнить().Выбрать(); @@ -3749,8 +3946,7 @@ Если КоличествоСсылокПодходящегоТипа > 1 Тогда ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Для уникального идентификатора <%1> и узла <%2> назначено несколько ссылок.'"), - Строка(УИДОбъектаXDTO), Строка(КомпонентыОбмена.УзелКорреспондента) - ); + Строка(УИДОбъектаXDTO), Строка(КомпонентыОбмена.УзелКорреспондента)); Иначе Возврат НайденнаяСсылка; КонецЕсли; @@ -3851,10 +4047,11 @@ Если Метаданные.Документы.Содержит(Объект.Метаданные()) И Объект.Проведен Тогда ОтменитьПроведениеОбъектаВИБ(Объект, КомпонентыОбмена.УзелКорреспондента); КонецЕсли; + ОбменДаннымиСервер.УстановитьОбменДаннымиЗагрузка(Объект, Истина, Ложь, КомпонентыОбмена.УзелКорреспондента); УдалитьОбъект(Объект, Ложь); Иначе - ТипПолученныхДанныхСтрокой = ИмяТипаДанныхПоОбъектуМетаданных(Объект.Метаданные(), Ложь, Ложь); + ТипПолученныхДанныхСтрокой = ИмяТипаДанныхПоОбъектуМетаданных(Объект.Метаданные(), Неопределено); СтрокаТаблицы = КомпонентыОбмена.ТаблицаДанныхЗаголовкаПакета.Добавить(); @@ -3912,10 +4109,17 @@ Возврат; КонецЕсли; - УстановитьОбменДаннымиЗагрузка(Объект); - - // Дли иерархических объектов пометку удаления только у конкретного объекта ставим. ИмяБазовогоТипа = ОбщегоНазначения.ИмяБазовогоТипаПоОбъектуМетаданных(Объект.Метаданные()); + + Если ИмяБазовогоТипа = "Документы" Тогда + ОбменДаннымиСервер.УстановитьОбменДаннымиЗагрузка(Объект, Ложь); + РегистрыСведений.РезультатыОбменаДанными.ЗарегистрироватьУстранениеПроблемы(Объект, + Перечисления.ТипыПроблемОбменаДанными.НепроведенныйДокумент); + КонецЕсли; + + ОбменДаннымиСервер.УстановитьОбменДаннымиЗагрузка(Объект); + + // Дли иерархических объектов пометку удаления ставим только у конкретного объекта. Если ИмяБазовогоТипа = "Справочники" Или ИмяБазовогоТипа = "ПланыВидовХарактеристик" Или ИмяБазовогоТипа = "ПланыСчетов" Тогда @@ -3946,8 +4150,7 @@ |Тип ссылки XDTO: %1 |Описание ошибки: %2'"), Строка(ТипСсылкиXDTO), - ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()) - ); + ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); КонецЕсли; @@ -3971,8 +4174,7 @@ |Тип объекта XDTO: %1 |Описание ошибки: %2'"), Строка(ТипОбъектаXDTO), - ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()) - ); + ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); КонецЕсли; @@ -4005,8 +4207,7 @@ Если ПравилоОбработки = Неопределено Тогда - ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Не найдено ПОД с именем %1'"), Имя); + ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Не найдено ПОД с именем %1'"), Имя); Иначе Возврат ПравилоОбработки; @@ -4047,8 +4248,7 @@ |Объект: %1 |Описание ошибки: %2'"), Строка(ОбъектОбработки), - ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()) - ); + ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); КонецПопытки; ОбъектОбработки = СтруктураПараметров.ОбъектОбработки; @@ -4129,8 +4329,7 @@ |Объект: %1 |Описание ошибки: %2'"), Строка(ДанныеИБ), - ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()) - ); + ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); КонецПопытки; ДанныеXDTO = СтруктураПараметров.ДанныеXDTO; @@ -4163,8 +4362,7 @@ |Тип источника: %1 |Описание ошибки: %2'"), Строка(ДанныеXDTO), - ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()) - ); + ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); КонецПопытки; ДанныеXDTO = СтруктураПараметров.ДанныеXDTO; @@ -4202,8 +4400,7 @@ |Объект: %1 |Описание ошибки: %2'"), Строка(ДанныеИБ), - ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()) - ); + ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); КонецПопытки; ДанныеИБ = СтруктураПараметров.ДанныеИБ; @@ -4311,15 +4508,18 @@ ВерсииФорматаОбмена = Новый Соответствие; - МенеджерПланаОбмена(УзелИнформационнойБазы).ПолучитьВерсииФорматаОбмена(ВерсииФорматаОбмена); + Если ЗначениеЗаполнено(УзелИнформационнойБазы) Тогда + МенеджерПланаОбмена(УзелИнформационнойБазы).ПолучитьВерсииФорматаОбмена(ВерсииФорматаОбмена); + Иначе + ОбменДаннымиПереопределяемый.ПриПолученииДоступныхВерсийФормата(ВерсииФорматаОбмена); + КонецЕсли; Если ВерсииФорматаОбмена.Количество() = 0 Тогда ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Не заданы версии формата обмена. |Имя плана обмена: %1 |Процедура: ПолучитьВерсииФорматаОбмена(<ВерсииФорматаОбмена>)'"), - УзелИнформационнойБазы.Метаданные().Имя - ); + УзелИнформационнойБазы.Метаданные().Имя); КонецЕсли; Результат = Новый Соответствие; @@ -4331,6 +4531,7 @@ КонецЦикла; Возврат Результат; + КонецФункции Функция СортироватьВерсииФормата(Знач ВерсииФормата) @@ -4351,13 +4552,10 @@ Процедура ПроверитьВерсию(Знач Версия) - Версии = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(Версия, "."); + Версии = СтрРазделить(Версия, "."); Если Версии.Количество() = 0 Тогда - ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Неканоническое представление версии формата обмена: <%1>.'"), - Версия - ); + ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Неканоническое представление версии формата обмена: <%1>.'"), Версия); КонецЕсли; КонецПроцедуры @@ -4412,7 +4610,7 @@ Функция ОтделитьРазделителем(Стр, Знач Разделитель, Режим=0) ПраваяЧасть = ""; - ПозРазделителя = Найти(Стр, Разделитель); + ПозРазделителя = СтрНайти(Стр, Разделитель); ДлинаРазделителя = СтрДлина(Разделитель); Если ПозРазделителя > 0 Тогда ПраваяЧасть = Сред(Стр, ПозРазделителя + ?(Режим=2, 0, ДлинаРазделителя)); @@ -4423,23 +4621,23 @@ КонецФункции // ОтделитьРазделителем() -Функция ИмяТипаДанныхПоОбъектуМетаданных(Знач ОбъектМетаданных, Знач ЭтоОбъект, Знач ЭтоКонстанта) - - Если ЭтоКонстанта = Неопределено Тогда +Функция ИмяТипаДанныхПоОбъектуМетаданных(Знач ОбъектМетаданных, Знач ИмяБазовогоТипа) + ЭтоКонстанта = Ложь; + ЭтоРегистрСведений = Ложь; + Если ИмяБазовогоТипа = Неопределено Тогда ИмяБазовогоТипа = ОбщегоНазначения.ИмяБазовогоТипаПоОбъектуМетаданных(ОбъектМетаданных); - ЭтоКонстанта = (ИмяБазовогоТипа = ОбщегоНазначения.ИмяТипаКонстанты()); КонецЕсли; + ЭтоКонстанта = (ИмяБазовогоТипа = ОбщегоНазначения.ИмяТипаКонстанты()); + ЭтоРегистрСведений = (ИмяБазовогоТипа = ОбщегоНазначения.ИмяТипаРегистрыСведений()); - ЛитералыТипа = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(ОбъектМетаданных.ПолноеИмя(), "."); + ЛитералыТипа = СтрРазделить(ОбъектМетаданных.ПолноеИмя(), "."); Если ЭтоКонстанта Тогда Результат = "[ТипТаблицы]МенеджерЗначения.[ИмяТаблицы]"; + ИначеЕсли ЭтоРегистрСведений Тогда + Результат = "[ТипТаблицы]НаборЗаписей.[ИмяТаблицы]"; Иначе - Если ЭтоОбъект Тогда - Результат = "[ТипТаблицы]Объект.[ИмяТаблицы]"; - Иначе - Результат = "[ТипТаблицы]Ссылка.[ИмяТаблицы]"; - КонецЕсли; + Результат = "[ТипТаблицы]Ссылка.[ИмяТаблицы]"; КонецЕсли; Результат = СтрЗаменить(Результат, "[ТипТаблицы]", ЛитералыТипа[0]); @@ -4460,7 +4658,7 @@ Для Каждого СтрокаДвижения Из ТаблицаДвижений Цикл // Имя регистра передается как значение, полученное с помощью // функции ПолноеИмя() метаданных регистра. - ПозицияТочки = Найти(СтрокаДвижения.Имя, "."); + ПозицияТочки = СтрНайти(СтрокаДвижения.Имя, "."); ТипРегистра = Лев(СтрокаДвижения.Имя, ПозицияТочки - 1); ИмяРегистра = СокрП(Сред(СтрокаДвижения.Имя, ПозицияТочки + 1)); diff --git a/SSL/src/CommonModules/ОбменДаннымиВнешнееСоединение/Module.bsl b/SSL/src/CommonModules/ОбменДаннымиВнешнееСоединение/Module.bsl index eeb2d1bba..f926e7740 100644 --- a/SSL/src/CommonModules/ОбменДаннымиВнешнееСоединение/Module.bsl +++ b/SSL/src/CommonModules/ОбменДаннымиВнешнееСоединение/Module.bsl @@ -12,8 +12,7 @@ ИмяПланаОбмена, КодУзлаИнформационнойБазы, ПолноеИмяФайлаСообщенияОбмена, - СтрокаСообщенияОбОшибке = "" - ) Экспорт + СтрокаСообщенияОбОшибке = "") Экспорт ОбменДаннымиСервер.ПроверитьИспользованиеОбменаДанными(); @@ -104,7 +103,6 @@ Функция ПрефиксИнформационнойБазыПоУмолчанию() Экспорт ПрефиксИнформационнойБазы = Неопределено; - ПрефиксИнформационнойБазы = ОбменДаннымиПереопределяемый.ПрефиксИнформационнойБазыПоУмолчанию(); ОбменДаннымиПереопределяемый.ПриОпределенииПрефиксаИнформационнойБазыПоУмолчанию(ПрефиксИнформационнойБазы); Возврат ПрефиксИнформационнойБазы; diff --git a/SSL/src/CommonModules/ОбменДаннымиВызовСервера/Module.bsl b/SSL/src/CommonModules/ОбменДаннымиВызовСервера/Module.bsl index b2752702b..140db3b77 100644 --- a/SSL/src/CommonModules/ОбменДаннымиВызовСервера/Module.bsl +++ b/SSL/src/CommonModules/ОбменДаннымиВызовСервера/Module.bsl @@ -3,6 +3,52 @@ // //////////////////////////////////////////////////////////////////////////////// +#Область СлужебныйПрограммныйИнтерфейс + +// Возвращает признак ошибки при запуске: +// 1) Ошибка загрузки сообщения обмена: +// - ошибка загрузки идентификаторов объектов метаданных при загрузке сообщения обмена, +// - ошибка проверки идентификаторов объектов метаданных, +// - ошибка загрузки сообщения обмена перед обновлением ИБ, +// - ошибка загрузки сообщения обмена перед обновлением ИБ в режиме когда версия не изменилась; +// 2) Ошибка обновления ИБ после успешной загрузки сообщения обмена. +// +Функция ПовторитьЗагрузкуСообщенияОбменаДаннымиПередЗапуском() Экспорт + + УстановитьПривилегированныйРежим(Истина); + + Возврат Константы.ПовторитьЗагрузкуСообщенияОбменаДаннымиПередЗапуском.Получить(); + +КонецФункции + +// Возвращает состояние выполнения фонового задания. +// Используется для реализации логики длительных операций. +// +// Параметры: +// ИдентификаторЗадания - УникальныйИдентификатор - идентификатор фонового задания, для которого необходимо получить +// состояние. +// +// Возвращаемое значение: +// Строка - состояние выполнения фонового задания: +// "Активно" - задание выполняется; +// "Завершено" - задание выполнено успешно; +// "ЗавершеноАварийно" - задание завершено аварийно или отменено пользователем. +// +Функция СостояниеЗадания(Знач ИдентификаторЗадания) Экспорт + + Попытка + Результат = ?(ДлительныеОперации.ЗаданиеВыполнено(ИдентификаторЗадания), "Завершено", "Активно"); + Исключение + Результат = "ЗавершеноАварийно"; + ЗаписьЖурналаРегистрации(ОбменДаннымиСервер.СобытиеЖурналаРегистрацииОбменДанными(), + УровеньЖурналаРегистрации.Ошибка,,, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); + КонецПопытки; + + Возврат Результат; +КонецФункции + +#КонецОбласти + #Область СлужебныеПроцедурыИФункции // Выполняет процесс обмена данными отдельно для каждой строки настройки обмена. @@ -123,8 +169,13 @@ // Процедура ВыполнитьЗагрузкуДляУзлаИнформационнойБазыЧерезФайл(Отказ, Знач УзелИнформационнойБазы, Знач ПолноеИмяФайлаСообщенияОбмена) Экспорт + ПараметрыОбменаДанными = ОбменДаннымиСервер.ПараметрыОбменаДаннымиЧерезФайлИлиСтроку(); + + ПараметрыОбменаДанными.УзелИнформационнойБазы = УзелИнформационнойБазы; + ПараметрыОбменаДанными.ПолноеИмяФайлаСообщенияОбмена = ПолноеИмяФайлаСообщенияОбмена; + ПараметрыОбменаДанными.ДействиеПриОбмене = Перечисления.ДействияПриОбмене.ЗагрузкаДанных; Попытка - ОбменДаннымиСервер.ВыполнитьОбменДаннымиДляУзлаИнформационнойБазыЧерезФайлИлиСтроку(УзелИнформационнойБазы, ПолноеИмяФайлаСообщенияОбмена, Перечисления.ДействияПриОбмене.ЗагрузкаДанных); + ОбменДаннымиСервер.ВыполнитьОбменДаннымиДляУзлаИнформационнойБазыЧерезФайлИлиСтроку(ПараметрыОбменаДанными); Исключение Отказ = Истина; КонецПопытки; @@ -158,8 +209,7 @@ Процедура ЗафиксироватьЗавершениеОбменаСОшибкой(Знач УзелИнформационнойБазы, Знач ДействиеПриОбмене, Знач ДатаНачала, - Знач СтрокаСообщенияОбОшибке - ) Экспорт + Знач СтрокаСообщенияОбОшибке) Экспорт УстановитьПривилегированныйРежим(Истина); @@ -177,8 +227,7 @@ Знач УзелИнформационнойБазы, Знач ИдентификаторФайла, Знач ДатаНачалаОперации, - Знач ПараметрыАутентификации = Неопределено - ) Экспорт + Знач ПараметрыАутентификации = Неопределено) Экспорт ОбменДаннымиСервер.ВыполнитьОбменДаннымиДляУзлаИнформационнойБазыЗавершениеДлительнойОперации( Отказ, @@ -287,41 +336,13 @@ КонецФункции -// Возвращает состояние выполнения фонового задания. -// Используется для реализации логики длительных операций. -// -// Параметры: -// ИдентификаторЗадания - УникальныйИдентификатор - идентификатор фонового задания, для которого необходимо получить -// состояние. -// -// Возвращаемое значение: -// Строка - состояние выполнения фонового задания: -// "Активно" - задание выполняется; -// "Завершено" - задание выполнено успешно; -// "ЗавершеноАварийно" - задание завершено аварийно или отменено пользователем. -// -Функция СостояниеЗадания(Знач ИдентификаторЗадания) Экспорт - - Попытка - Результат = ?(ДлительныеОперации.ЗаданиеВыполнено(ИдентификаторЗадания), "Завершено", "Активно"); - Исключение - Результат = "ЗавершеноАварийно"; - ЗаписьЖурналаРегистрации(ОбменДаннымиСервер.СобытиеЖурналаРегистрацииОбменДанными(), - УровеньЖурналаРегистрации.Ошибка,,, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()) - ); - КонецПопытки; - - Возврат Результат; -КонецФункции - // Получает состояние длительной операции (фонового задания), выполняемой в базе-корреспонденте. // Функция СостояниеДлительнойОперации(Знач ИдентификаторОперации, Знач URLВебСервиса, Знач ИмяПользователя, Знач Пароль, - СтрокаСообщенияОбОшибке = "" - ) Экспорт + СтрокаСообщенияОбОшибке = "") Экспорт Попытка @@ -341,8 +362,7 @@ Исключение Результат = "Failed"; ЗаписьЖурналаРегистрации(ОбменДаннымиСервер.СобытиеЖурналаРегистрацииОбменДанными(), - УровеньЖурналаРегистрации.Ошибка,,, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()) - ); + УровеньЖурналаРегистрации.Ошибка,,, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); КонецПопытки; Возврат Результат; @@ -354,8 +374,7 @@ Функция СостояниеДлительнойОперацииДляУзлаИнформационнойБазы(Знач ИдентификаторОперации, Знач УзелИнформационнойБазы, Знач ПараметрыАутентификации = Неопределено, - СтрокаСообщенияОбОшибке = "" - ) Экспорт + СтрокаСообщенияОбОшибке = "") Экспорт Попытка УстановитьПривилегированныйРежим(Истина); @@ -373,8 +392,7 @@ Исключение Результат = "Failed"; ЗаписьЖурналаРегистрации(ОбменДаннымиСервер.СобытиеЖурналаРегистрацииОбменДанными(), - УровеньЖурналаРегистрации.Ошибка,,, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()) - ); + УровеньЖурналаРегистрации.Ошибка,,, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); КонецПопытки; Возврат Результат; @@ -389,8 +407,7 @@ ИдентификаторФайла, ДлительнаяОперация, ИдентификаторОперации, - Знач ПараметрыАутентификации = Неопределено - ) Экспорт + Знач ПараметрыАутентификации = Неопределено) Экспорт Возврат ОбменДаннымиСервер.ПолучитьСообщениеОбменаВоВременныйКаталогИзИнформационнойБазыКорреспондентаЧерезВебСервис( Отказ, @@ -410,8 +427,7 @@ Отказ, УзелИнформационнойБазы, ИдентификаторФайла, - Знач ПараметрыАутентификации = Неопределено - ) Экспорт + Знач ПараметрыАутентификации = Неопределено) Экспорт Возврат ОбменДаннымиСервер.ПолучитьСообщениеОбменаВоВременныйКаталогИзИнформационнойБазыКорреспондентаЧерезВебСервисЗавершениеДлительнойОперации( Отказ, @@ -517,6 +533,9 @@ ПараметрыСеанса.ПриоритетныеДанныеОбмена = Новый ФиксированныйМассив(Новый Массив); УстановленныеПараметры.Добавить("ПриоритетныеДанныеОбмена"); + ПараметрыСеанса.ПараметрыСеансаСинхронизацииДанных = Новый ХранилищеЗначения(Новый Соответствие); + УстановленныеПараметры.Добавить("ПараметрыСеансаСинхронизацииДанных"); + СтруктураПроверки =Новый Структура; СтруктураПроверки.Вставить("ПроверятьРасхождениеВерсий", Ложь); СтруктураПроверки.Вставить("ЕстьОшибка", Ложь); @@ -530,6 +549,8 @@ ПараметрыСеанса.ПаролиСинхронизацииДанных = Новый ФиксированноеСоответствие(Новый Соответствие); УстановленныеПараметры.Добавить("ПаролиСинхронизацииДанных"); + ПараметрыСеанса.ПараметрыСеансаСинхронизацииДанных = Новый ХранилищеЗначения(Новый Соответствие); + УстановленныеПараметры.Добавить("ПараметрыСеансаСинхронизацииДанных"); КонецЕсли; КонецПроцедуры @@ -738,22 +759,6 @@ КонецФункции -// Возвращает признак ошибки при запуске: -// 1) Ошибка загрузки сообщения обмена: -// - ошибка загрузки идентификаторов объектов метаданных при загрузке сообщения обмена, -// - ошибка проверки идентификаторов объектов метаданных, -// - ошибка загрузки сообщения обмена перед обновлением ИБ, -// - ошибка загрузки сообщения обмена перед обновлением ИБ в режиме когда версия не изменилась; -// 2) Ошибка обновления ИБ после успешной загрузки сообщения обмена. -// -Функция ПовторитьЗагрузкуСообщенияОбменаДаннымиПередЗапуском() Экспорт - - УстановитьПривилегированныйРежим(Истина); - - Возврат Константы.ПовторитьЗагрузкуСообщенияОбменаДаннымиПередЗапуском.Получить() = Истина; - -КонецФункции - // Возвращает список приоритетных данных обмена. // // Возвращаемое значение: diff --git a/SSL/src/CommonModules/ОбменДаннымиКлиент/Module.bsl b/SSL/src/CommonModules/ОбменДаннымиКлиент/Module.bsl index a1ac7530b..d1829bdca 100644 --- a/SSL/src/CommonModules/ОбменДаннымиКлиент/Module.bsl +++ b/SSL/src/CommonModules/ОбменДаннымиКлиент/Module.bsl @@ -74,7 +74,7 @@ ДополнительнаяНастройка = ""; - Если Найти(ИмяПланаОбмена, "КорреспондентВМоделиСервиса") > 0 Тогда + Если СтрНайти(ИмяПланаОбмена, "КорреспондентВМоделиСервиса") > 0 Тогда ИмяПланаОбмена = СтрЗаменить(ИмяПланаОбмена, "КорреспондентВМоделиСервиса", ""); @@ -82,9 +82,9 @@ КонецЕсли; - Если Найти(ИмяПланаОбмена, "ИдентификаторНастройки") > 0 Тогда + Если СтрНайти(ИмяПланаОбмена, "ИдентификаторНастройки") > 0 Тогда - ЧислоСимволовИмяПланаОбмена = Найти(ИмяПланаОбмена, "ИдентификаторНастройки") - 1; + ЧислоСимволовИмяПланаОбмена = СтрНайти(ИмяПланаОбмена, "ИдентификаторНастройки") - 1; ДополнительнаяНастройка = Прав(ИмяПланаОбмена, СтрДлина(ИмяПланаОбмена) - ЧислоСимволовИмяПланаОбмена - 22); ИмяПланаОбмена = Лев(ИмяПланаОбмена, ЧислоСимволовИмяПланаОбмена); @@ -261,6 +261,33 @@ #КонецОбласти +#Область СлужебныйПрограммныйИнтерфейс + +// Открывает модально журнал регистрации с отбором по событиям выгрузки или загрузки данных для заданного узла плана +// обмена. +// +Процедура ПерейтиВЖурналРегистрацииСобытийДанныхМодально(УзелИнформационнойБазы, Владелец, ДействиеПриОбмене) Экспорт + + // вызов сервера + ПараметрыФормы = ОбменДаннымиВызовСервера.ПолучитьСтруктуруДанныхОтбораЖурналаРегистрации(УзелИнформационнойБазы, ДействиеПриОбмене); + + ОткрытьФорму("Обработка.ЖурналРегистрации.Форма", ПараметрыФормы, Владелец); + +КонецПроцедуры + +// Возвращает имя формы сообщения о неудачном обновлении при ошибке в ПРО при выполнении обновления информационной базы. +// +// Возвращаемое значение: +// Строка - имя формы сообщения о неудачном обновлении. +// +Функция ИмяФормыСообщенияОНеудачномОбновлении() Экспорт + + Возврат "РегистрСведений.ПравилаДляОбменаДанными.Форма.СообщениеОНеудачномОбновлении"; + +КонецФункции + +#КонецОбласти + #Область СлужебныеПроцедурыИФункции //////////////////////////////////////////////////////////////////////////////// @@ -736,8 +763,7 @@ Если Не Существует Тогда ПараметрыЗаполненияСпискаДляПередачи.БылиОшибки = Истина; Элемент = ПараметрыЗаполненияСпискаДляПередачи.ДанныеФайлов[ПараметрыЗаполненияСпискаДляПередачи.НомерПозиции]; - Элемент.ОписаниеОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Файл ""%1"" не существует или к нему нет доступа'"), Элемент.Имя); + Элемент.ОписаниеОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Файл ""%1"" не существует или к нему нет доступа'"), Элемент.Имя); // Переходим к следующему файлу, либо завершаем заполнение списка для передачи. Если ПараметрыЗаполненияСпискаДляПередачи.НомерПозиции = ПараметрыЗаполненияСпискаДляПередачи.ДанныеФайлов.ВГраница() Тогда @@ -768,8 +794,7 @@ Если ЭтоКаталог Тогда ПараметрыЗаполненияСпискаДляПередачи.БылиОшибки = Истина; - Элемент.ОписаниеОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Файл ""%1"" не существует или к нему нет доступа'"), Элемент.Имя); + Элемент.ОписаниеОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Файл ""%1"" не существует или к нему нет доступа'"), Элемент.Имя); Иначе ПараметрыЗаполненияСпискаДляПередачи.СписокДляПередачи.Добавить(Новый ОписаниеПередаваемогоФайла(Элемент.Имя)); КонецЕсли; @@ -1074,18 +1099,6 @@ КонецПроцедуры -// Открывает модально журнал регистрации с отбором по событиям выгрузки или загрузки данных для заданного узла плана -// обмена. -// -Процедура ПерейтиВЖурналРегистрацииСобытийДанныхМодально(УзелИнформационнойБазы, Владелец, ДействиеПриОбмене) Экспорт - - // вызов сервера - ПараметрыФормы = ОбменДаннымиВызовСервера.ПолучитьСтруктуруДанныхОтбораЖурналаРегистрации(УзелИнформационнойБазы, ДействиеПриОбмене); - - ОткрытьФорму("Обработка.ЖурналРегистрации.Форма", ПараметрыФормы, Владелец); - -КонецПроцедуры - // Открывает форму выполнения обмена данными для заданного узла плана обмена. // // Параметры: @@ -1238,7 +1251,7 @@ Если ТипЗнч(Форма) = Тип("УправляемаяФорма") И Не Форма.Модифицированность - И Найти(Форма.ИмяФормы, ИмяФормы) <> 0 Тогда + И СтрНайти(Форма.ИмяФормы, ИмяФормы) <> 0 Тогда Форма.Закрыть(); @@ -1272,8 +1285,8 @@ ПараметрыОткрытия = Новый Структура("Владелец, Уникальность, Окно, НавигационнаяСсылка, ОписаниеОповещенияОЗакрытии, РежимОткрытияОкна"); ЗаполнитьЗначенияСвойств(ПараметрыОткрытия, ДополнительныеПараметры.ПараметрыОткрытия); ОткрытьФорму(ДополнительныеПараметры.ИмяФормы, ДополнительныеПараметры.Параметры, - ПараметрыОткрытия.Владелец, ПараметрыОткрытия.Уникальность, ПараметрыОткрытия.Окно, ПараметрыОткрытия.НавигационнаяСсылка, ПараметрыОткрытия.ОписаниеОповещенияОЗакрытии, ПараметрыОткрытия.РежимОткрытияОкна - ); + ПараметрыОткрытия.Владелец, ПараметрыОткрытия.Уникальность, ПараметрыОткрытия.Окно, + ПараметрыОткрытия.НавигационнаяСсылка, ПараметрыОткрытия.ОписаниеОповещенияОЗакрытии, ПараметрыОткрытия.РежимОткрытияОкна); Если ДополнительныеПараметры.ПредыдущееОповещениеОЗакрытии <> Неопределено Тогда ВыполнитьОбработкуОповещения(ДополнительныеПараметры.ПредыдущееОповещениеОЗакрытии, РезультатЗакрытия); @@ -1281,14 +1294,6 @@ КонецПроцедуры -// Открывает форму сообщения о неудачном обновлении при ошибке в ПРО при выполнении обновления информационной базы. -// -Процедура ИмяФормыСообщенияОНеудачномОбновлении(ИмяОткрываемойФормы) Экспорт - - ИмяОткрываемойФормы = "РегистрСведений.ПравилаДляОбменаДанными.Форма.СообщениеОНеудачномОбновлении"; - -КонецПроцедуры - //////////////////////////////////////////////////////////////////////////////// // Обработчики условных вызовов из других подсистем. diff --git a/SSL/src/CommonModules/ОбменДаннымиКлиентСервер/Module.bsl b/SSL/src/CommonModules/ОбменДаннымиКлиентСервер/Module.bsl index 4e302af5c..8ee983259 100644 --- a/SSL/src/CommonModules/ОбменДаннымиКлиентСервер/Module.bsl +++ b/SSL/src/CommonModules/ОбменДаннымиКлиентСервер/Module.bsl @@ -13,8 +13,7 @@ СтрокаСообщения = НСтр("ru = 'В имени пользователя %1 содержатся недопустимые символы. |Имя пользователя не должно содержать символы %2.'"); - СтрокаСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(СтрокаСообщения, - ИмяПользователя, НедопустимыеСимволыВИмениПользователяWSПрокси()); + СтрокаСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(СтрокаСообщения, ИмяПользователя, НедопустимыеСимволыВИмениПользователяWSПрокси()); ВызватьИсключение СтрокаСообщения; КонецЕсли; @@ -36,7 +35,7 @@ Символ = Сред(СтрокаСимволов, Индекс, 1); - Если Найти(Строка, Символ) <> 0 Тогда + Если СтрНайти(Строка, Символ) <> 0 Тогда Возврат Истина; diff --git a/SSL/src/CommonModules/ОбменДаннымиПереопределяемый/Module.bsl b/SSL/src/CommonModules/ОбменДаннымиПереопределяемый/Module.bsl index f0005ddd4..b5054eee2 100644 --- a/SSL/src/CommonModules/ОбменДаннымиПереопределяемый/Module.bsl +++ b/SSL/src/CommonModules/ОбменДаннымиПереопределяемый/Module.bsl @@ -82,8 +82,7 @@ ДанныеСообщения, КоличествоЭлементовВТранзакции, ИмяСобытияЖурналаРегистрации, - КоличествоОтправленныхОбъектов - ) Экспорт + КоличествоОтправленныхОбъектов) Экспорт КонецПроцедуры @@ -133,8 +132,7 @@ ДанныеСообщения, КоличествоЭлементовВТранзакции, ИмяСобытияЖурналаРегистрации, - КоличествоПолученныхОбъектов - ) Экспорт + КоличествоПолученныхОбъектов) Экспорт КонецПроцедуры @@ -217,4 +215,24 @@ КонецФункции +// Обработчик начальной настройки ИБ после создания узла РИБ. +// Вызывается в момент первого запуска подчиненного узла РИБ (в том числе АРМ). +Процедура ПриНастройкеПодчиненногоУзлаРИБ() Экспорт + +КонецПроцедуры + +// Получает доступные для использования версии универсального формата EnterpriseData +// +// Параметры: +// ВерсииФормата - Соответствие - Соответствие номера версии формата, +// общему модулю, в котором находятся обработчики выгрузки/загрузки для данной версии. +// +// Пример тела процедуры: +// ВерсииФормата.Вставить("1.0.beta", _ДемоМенеджерОбменаЧерезУниверсальныйФормат); +Процедура ПриПолученииДоступныхВерсийФормата(ВерсииФормата) Экспорт + + + +КонецПроцедуры + #КонецОбласти diff --git a/SSL/src/CommonModules/ОбменДаннымиПовтИсп/Module.bsl b/SSL/src/CommonModules/ОбменДаннымиПовтИсп/Module.bsl index 94536562a..5a9150d4d 100644 --- a/SSL/src/CommonModules/ОбменДаннымиПовтИсп/Module.bsl +++ b/SSL/src/CommonModules/ОбменДаннымиПовтИсп/Module.bsl @@ -24,12 +24,11 @@ |ИЗ | ПланОбмена." + ИмяПланаОбмена + " КАК ПланОбмена |ГДЕ - | ПланОбмена.Ссылка <> &ЭтотУзел + | НЕ ПланОбмена.ЭтотУзел | И ПланОбмена.Ссылка <> &Отправитель"; Запрос = Новый Запрос; Запрос.Текст = ТекстЗапроса; - Запрос.УстановитьПараметр("ЭтотУзел", ПланыОбмена[ИмяПланаОбмена].ЭтотУзел()); Запрос.УстановитьПараметр("Отправитель", Отправитель); Возврат Не Запрос.Выполнить().Пустой(); @@ -123,16 +122,6 @@ КонецФункции -// Устарела. В будущем необходимо использовать "УстановитьВнешнееСоединениеСБазой". -// -Функция УстановитьВнешнееСоединение(ПараметрыВнешнегоСоединения, СтрокаСообщенияОбОшибке = "") Экспорт - - Результат = УстановитьВнешнееСоединениеСБазой(ПараметрыВнешнегоСоединения); - СтрокаСообщенияОбОшибке = Результат.ПодробноеОписаниеОшибки; - - Возврат Результат.Соединение; -КонецФункции - // Устанавливает внешнее соединение с информационной базой и возвращает описание соединения. // (Только для внутреннего использования). // @@ -356,8 +345,7 @@ Функция ЭтоУзелАвтономногоРабочегоМеста(Знач УзелИнформационнойБазы) Экспорт Возврат ОбменДаннымиПовтИсп.АвтономнаяРаботаПоддерживается() - И УзелИнформационнойБазы.Метаданные().Имя = ОбменДаннымиПовтИсп.ПланОбменаАвтономнойРаботы() - ; + И УзелИнформационнойБазы.Метаданные().Имя = ОбменДаннымиПовтИсп.ПланОбменаАвтономнойРаботы(); КонецФункции // @@ -394,6 +382,21 @@ Возврат Выборка.Ссылка; КонецФункции +Функция ЭтоСтроковыйРеквизитНеограниченнойДлины(ПолноеИмя, ИмяРеквизита) Экспорт + + ОбъектМетаданных = Метаданные.НайтиПоПолномуИмени(ПолноеИмя); + Реквизит = ОбъектМетаданных.Реквизиты.Найти(ИмяРеквизита); + + Если Реквизит <> Неопределено + И Реквизит.Тип.СодержитТип(Тип("Строка")) + И (Реквизит.Тип.КвалификаторыСтроки.Длина = 0) Тогда + Возврат Истина; + Иначе + Возврат Ложь; + КонецЕсли; + +КонецФункции + #КонецОбласти #Область СлужебныеПроцедурыИФункции @@ -790,18 +793,15 @@ // Функция ПолучитьМассивУзловПланаОбмена(ИмяПланаОбмена) Экспорт - ЭтотУзел = ПланыОбмена[ИмяПланаОбмена].ЭтотУзел(); - ТекстЗапроса = " |ВЫБРАТЬ | ПланОбмена.Ссылка |ИЗ ПланОбмена." + ИмяПланаОбмена + " КАК ПланОбмена |ГДЕ - | ПланОбмена.Ссылка <> &ЭтотУзел"; + | НЕ ПланОбмена.ЭтотУзел"; Запрос = Новый Запрос; Запрос.Текст = ТекстЗапроса; - Запрос.УстановитьПараметр("ЭтотУзел", ЭтотУзел); Возврат Запрос.Выполнить().Выгрузить().ВыгрузитьКолонку("Ссылка"); @@ -904,8 +904,7 @@ Функция ОбщиеДанныеУзлов(Знач УзелИнформационнойБазы) Экспорт Возврат ОбменДаннымиСервер.ОбщиеДанныеУзлов(ПолучитьИмяПланаОбмена(УзелИнформационнойБазы), - РегистрыСведений.ОбщиеНастройкиУзловИнформационныхБаз.ВерсияКорреспондента(УзелИнформационнойБазы) - ); + РегистрыСведений.ОбщиеНастройкиУзловИнформационныхБаз.ВерсияКорреспондента(УзелИнформационнойБазы)); КонецФункции // Для внутреннего использования. @@ -926,7 +925,7 @@ Для Каждого ТабличнаяЧасть Из ТабличныеЧасти Цикл - Если Найти(ОбщиеДанныеУзлов, ТабличнаяЧасть) <> 0 Тогда + Если СтрНайти(ОбщиеДанныеУзлов, ТабличнаяЧасть) <> 0 Тогда ТаблицыОбщие.Добавить(ТабличнаяЧасть); @@ -944,7 +943,7 @@ Для Каждого ТабличнаяЧасть Из ТабличныеЧасти Цикл - Если Найти(НастройкиЭтойБазы, ТабличнаяЧасть) <> 0 Тогда + Если СтрНайти(НастройкиЭтойБазы, ТабличнаяЧасть) <> 0 Тогда ТаблицыЭтойБазы.Добавить(ТабличнаяЧасть); @@ -958,11 +957,11 @@ Для Каждого ТабличнаяЧасть Из ТабличныеЧасти Цикл - Если Найти(НастройкиЭтойБазы, ТабличнаяЧасть) <> 0 Тогда + Если СтрНайти(НастройкиЭтойБазы, ТабличнаяЧасть) <> 0 Тогда ВсеТаблицыЭтойБазы.Добавить(ТабличнаяЧасть); - Если Найти(ОбщиеДанныеУзлов, ТабличнаяЧасть) = 0 Тогда + Если СтрНайти(ОбщиеДанныеУзлов, ТабличнаяЧасть) = 0 Тогда ТаблицыЭтойБазы.Добавить(ТабличнаяЧасть); @@ -998,7 +997,7 @@ ВсеТаблицыКорреспондента.Добавить(НастройкаКорреспондента.Ключ); - Если Найти(ОбщиеДанныеУзлов, НастройкаКорреспондента.Ключ) = 0 Тогда + Если СтрНайти(ОбщиеДанныеУзлов, НастройкаКорреспондента.Ключ) = 0 Тогда ТаблицыКорреспондента.Добавить(НастройкаКорреспондента.Ключ); @@ -1051,11 +1050,11 @@ Для Каждого ЭлементОтбора Из Отбор Цикл - Отбор[ЭлементОтбора.Ключ] = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(ЭлементОтбора.Значение); + Отбор[ЭлементОтбора.Ключ] = СтрРазделить(ЭлементОтбора.Значение, ","); КонецЦикла; - Возврат ОбщегоНазначения.ПолучитьДеревоМетаданныхКонфигурации(Отбор); + Возврат ОбщегоНазначения.ДеревоМетаданныхКонфигурации(Отбор); КонецФункции @@ -1352,8 +1351,7 @@ УзелИнформационнойБазы, ДействиеПриОбмене, ВидТранспортаСообщенийОбмена, - ИспользоватьНастройкиТранспорта = Истина - ) Экспорт + ИспользоватьНастройкиТранспорта = Истина) Экспорт Возврат ОбменДаннымиСервер.ПолучитьСтруктуруНастроекОбменаДляУзлаИнформационнойБазы( УзелИнформационнойБазы, @@ -1402,7 +1400,7 @@ Для Каждого Макет Из Метаданные.ПланыОбмена[ИмяПланаОбмена].Макеты Цикл - Если Найти(Макет.Имя, ЛитералИмениМакета) <> 0 И Найти(Макет.Имя, "Корреспондента") = 0 Тогда + Если СтрНайти(Макет.Имя, ЛитералИмениМакета) <> 0 И СтрНайти(Макет.Имя, "Корреспондента") = 0 Тогда СписокПравил.Добавить(Макет.Имя, Макет.Синоним); @@ -1526,7 +1524,7 @@ Если Используется И ПроверятьПраваДоступа Тогда МодульВерсионированиеОбъектов = ОбщегоНазначения.ОбщийМодуль("ВерсионированиеОбъектов"); - Используется = МодульВерсионированиеОбъектов.ЕстьПравоНаЧтениеВерсийОбъектов(); + Используется = МодульВерсионированиеОбъектов.ЕстьПравоЧтенияИнформацииОВерсияхОбъектов(); КонецЕсли; diff --git a/SSL/src/CommonModules/ОбменДаннымиСервер/Module.bsl b/SSL/src/CommonModules/ОбменДаннымиСервер/Module.bsl index f0f9618d0..ac3d7e23d 100644 --- a/SSL/src/CommonModules/ОбменДаннымиСервер/Module.bsl +++ b/SSL/src/CommonModules/ОбменДаннымиСервер/Module.bsl @@ -18,8 +18,8 @@ КонецЕсли; Форма.АвтоЗаголовок = Ложь; - Форма.Заголовок = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( Форма.Объект.Наименование + " (%1)", - ПереопределяемоеИмяУзлаПланаОбмена(Форма.Объект.Ссылка, "ЗаголовокУзлаПланаОбмена")); + Форма.Заголовок = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(Форма.Объект.Наименование + " (%1)", + ПереопределяемоеИмяУзлаПланаОбмена(Форма.Объект.Ссылка, "ЗаголовокУзлаПланаОбмена")); КонецПроцедуры @@ -51,7 +51,7 @@ Если Параметры.Свойство("ПолучитьЗначенияПоУмолчанию") Тогда - ИмяПланаОбмена = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(Форма.ИмяФормы, ".")[1]; + ИмяПланаОбмена = СтрРазделить(Форма.ИмяФормы, ".")[1]; НастройкаОтборовНаУзле = НастройкаОтборовНаУзле(ИмяПланаОбмена, Параметры.ВерсияКорреспондента, , ИдентификаторНастройки); НастройкаОтборовНаУзлеБазыКорреспондента = НастройкаОтборовНаУзлеБазыКорреспондента(ИмяПланаОбмена, Параметры.ВерсияКорреспондента, , ИдентификаторНастройки); @@ -438,6 +438,26 @@ КонецФункции +// Возвращает массив всех видов транспорта сообщений обмена, определенных в конфигурации. +// +// Параметры: +// Нет. +// +// Возвращаемое значение: +// Массив - Элементы массива имеют тип "ПеречислениеСсылка.ВидыТранспортаСообщенийОбмена". +// +Функция ВсеТранспортыСообщенийОбменаКонфигурации() Экспорт + + Результат = Новый Массив; + Результат.Добавить(Перечисления.ВидыТранспортаСообщенийОбмена.COM); + Результат.Добавить(Перечисления.ВидыТранспортаСообщенийОбмена.WS); + Результат.Добавить(Перечисления.ВидыТранспортаСообщенийОбмена.FILE); + Результат.Добавить(Перечисления.ВидыТранспортаСообщенийОбмена.FTP); + Результат.Добавить(Перечисления.ВидыТранспортаСообщенийОбмена.EMAIL); + + Возврат Результат; +КонецФункции + //////////////////////////////////////////////////////////////////////////////// // Работа с монитором проблем обмена данными. @@ -594,6 +614,14 @@ // СерверныеСобытия.Добавить("СтандартныеПодсистемы.ОбменДанными\ПриЗагрузкеДанныхСлужебный"); + // Обработчик начальной настройки ИБ после создания узла РИБ. + // Вызывается в момент первого запуска подчиненного узла РИБ (в том числе АРМ). + // + // Синтаксис: + // Процедура ПриНастройкеПодчиненногоУзлаРИБ() Экспорт + // + СерверныеСобытия.Добавить("СтандартныеПодсистемы.ОбменДанными\ПриНастройкеПодчиненногоУзлаРИБ"); + КонецПроцедуры // См. описание этой же процедуры в модуле СтандартныеПодсистемыСервер. @@ -620,10 +648,10 @@ СерверныеОбработчики["СтандартныеПодсистемы.БазоваяФункциональность\ПриОпределенииПоддерживаемыхВерсийПрограммныхИнтерфейсов"].Добавить( "ОбменДаннымиСервер"); - СерверныеОбработчики["СтандартныеПодсистемы.БазоваяФункциональность\ПриДобавленииПараметровРаботыКлиентскойЛогикиСтандартныхПодсистемПриЗапуске"].Добавить( + СерверныеОбработчики["СтандартныеПодсистемы.БазоваяФункциональность\ПриДобавленииПараметровРаботыКлиентаПриЗапуске"].Добавить( "ОбменДаннымиСервер"); - СерверныеОбработчики["СтандартныеПодсистемы.БазоваяФункциональность\ПриДобавленииПараметровРаботыКлиентскойЛогикиСтандартныхПодсистем"].Добавить( + СерверныеОбработчики["СтандартныеПодсистемы.БазоваяФункциональность\ПриДобавленииПараметровРаботыКлиента"].Добавить( "ОбменДаннымиСервер"); СерверныеОбработчики["СтандартныеПодсистемы.БазоваяФункциональность\ПриПолученииОбязательныхОбъектовПланаОбмена"].Добавить( @@ -664,10 +692,8 @@ //////////////////////////////////////////////////////////////////////////////// // Обработчики условных вызовов. -// Выполняет загрузку идентификаторов объектов метаданных, полученных из главного узла РИБ. -Процедура ПередПроверкойИдентификаторовОбъектовМетаданныхВПодчиненномУзлеРИБ(Отказ = Ложь) Экспорт - - Справочники.ИдентификаторыОбъектовМетаданных.ПроверкаИспользования(); +// Выполняет загрузку приоритетных данных, полученных из главного узла РИБ. +Процедура ЗагрузитьПриоритетныеДанныеВПодчиненныйУзелРИБ(Отказ = Ложь) Экспорт Если ОбменДаннымиВызовСервера.РежимЗагрузкиСообщенияОбменаДаннымиПередЗапуском( "ПропуститьЗагрузкуСообщенияОбменаДаннымиПередЗапуском") Тогда @@ -675,7 +701,7 @@ КонецЕсли; Если ОбменДаннымиВызовСервера.РежимЗагрузкиСообщенияОбменаДаннымиПередЗапуском( - "ПропуститьЗагрузкуИдентификаторовОбъектовМетаданныхПередЗапуском") Тогда + "ПропуститьЗагрузкуПриоритетныхДанныхПередЗапуском") Тогда Возврат; КонецЕсли; @@ -685,7 +711,7 @@ Попытка - Если ПолучитьФункциональнуюОпцию("ИспользоватьСинхронизациюДанных") = Ложь Тогда + Если НЕ ПолучитьФункциональнуюОпцию("ИспользоватьСинхронизациюДанных") Тогда Если ОбщегоНазначенияПовтИсп.РазделениеВключено() Тогда @@ -711,7 +737,7 @@ КонецЕсли; - Если ПолучитьФункциональнуюОпцию("ИспользоватьСинхронизациюДанных") = Истина Тогда + Если ПолучитьФункциональнуюОпцию("ИспользоватьСинхронизациюДанных") Тогда УзелИнформационнойБазы = ГлавныйУзел(); @@ -720,7 +746,13 @@ ВидТранспорта = РегистрыСведений.НастройкиТранспортаОбмена.ВидТранспортаСообщенийОбменаПоУмолчанию(УзелИнформационнойБазы); // Загрузка только параметров работы программы. - ВыполнитьОбменДаннымиДляУзлаИнформационнойБазы(Отказ, УзелИнформационнойБазы, Истина, Ложь, ВидТранспорта,,,,,, Истина); + + ПараметрыОбмена = ПараметрыОбмена(); + ПараметрыОбмена.ВидТранспортаСообщенийОбмена = ВидТранспорта; + ПараметрыОбмена.ВыполнятьЗагрузку = Истина; + ПараметрыОбмена.ВыполнятьВыгрузку = Ложь; + ПараметрыОбмена.ТолькоПараметры = Истина; + ВыполнитьОбменДаннымиДляУзлаИнформационнойБазы(УзелИнформационнойБазы, ПараметрыОбмена, Отказ); КонецЕсли; @@ -734,13 +766,13 @@ ВключитьПовторениеЗагрузкиСообщенияОбменаДаннымиПередЗапуском(); ЗаписьЖурналаРегистрации( - НСтр("ru = 'Обмен данными.Загрузка справочника ""Идентификаторы объектов метаданных""'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), + НСтр("ru = 'Обмен данными.Загрузка приоритетных данных'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), УровеньЖурналаРегистрации.Ошибка,,, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); ВызватьИсключение - НСтр("ru = 'Из главного узла не загружены изменения справочника ""Идентификаторы объектов метаданных"": - |ошибка загрузки данных. См. подробности в журнале регистрации.'"); + НСтр("ru = 'Ошибка загрузки приоритетных данных из сообщения обмена. + |См. подробности в журнале регистрации.'"); КонецПопытки; УстановитьПривилегированныйРежим(Истина); УстановитьРежимЗагрузкиСообщенияОбменаДаннымиПередЗапуском("ЗагрузкаРазрешена", Ложь); @@ -751,8 +783,8 @@ Если КонфигурацияИзменена() Тогда ВызватьИсключение НСтр("ru = 'Загружены изменения программы, полученные из главного узла. - |Завершите работу программы. Откройте программу в конфигураторе и - |выполните команду ""Обновить конфигурацию базы данных (F7)"". + |Завершите работу программы. Откройте программу в конфигураторе + |и выполните команду ""Обновить конфигурацию базы данных (F7)"". | |После этого запустите программу.'"); КонецЕсли; @@ -760,68 +792,20 @@ ВключитьПовторениеЗагрузкиСообщенияОбменаДаннымиПередЗапуском(); ВызватьИсключение - НСтр("ru = 'Из главного узла не загружены изменения справочника ""Идентификаторы объектов метаданных"": - |ошибка загрузки данных. См. подробности в журнале регистрации.'"); + НСтр("ru = 'Ошибка загрузки приоритетных данных из сообщения обмена. + |См. подробности в журнале регистрации.'"); КонецЕсли; КонецПроцедуры -// Устанавливает признак необходимости загрузки идентификаторов объектов метаданных из сообщения обмена. +// Устанавливает признак повторения загрузки при ошибке загрузки или обновления. // Очищает хранилище сообщения обмена, полученного из главного узла РИБ. -// Если указано, вызывает исключение с пояснением дальнейших действий. // -Процедура ПриОшибкеПроверкиИдентификаторовОбъектовМетаданныхВПодчиненномУзлеРИБ(ПриЗагрузке, ВызыватьИсключение = Ложь) Экспорт +Процедура ВключитьПовторениеЗагрузкиСообщенияОбменаДаннымиПередЗапуском() Экспорт - Справочники.ИдентификаторыОбъектовМетаданных.ПроверкаИспользования(); + ОчиститьСообщениеОбменаДаннымиИзГлавногоУзла(); - Если ПриЗагрузке Тогда - ВключитьПовторениеЗагрузкиСообщенияОбменаДаннымиПередЗапуском(); - - Если ВызыватьИсключение Тогда - ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Из главного узла не загружены изменения справочника ""Идентификаторы объектов метаданных"": - |при проверке обнаружено, что требуется загрузить критичные изменения (см. подробности в журнале - |регистрации в событии ""Идентификаторы объектов метаданных.Требуется загрузить критичные изменения""). - | - |Если недоступно сообщение обмена данными, тогда перезапустите программу, - |настройте параметры подключения и повторите синхронизацию. - |Если из главного узла не получены все необходимые изменения, тогда - |в главном узле выполните обновление информационной базы, - |зарегистрируйте данные для восстановления подчиненного узла РИБ и - |повторите синхронизацию данных в главном и подчиненном узлах. - | - |Чтобы выполнить обновление информационной базы в главном узле, один раз выполните - |запуск программы с параметром запуска ЗапуститьОбновлениеИнформационнойБазы. - |%1 - |'"), - ?(ОбменДаннымиПовтИсп.ЭтоАвтономноеРабочееМесто(), - НСтр("ru = 'Чтобы зарегистрировать данные для восстановления подчиненного узла РИБ, в главном узле - |в разделе ""Администрирование"" откройте ""Настройки синхронизации данных"", перейдите - |по ссылке ""Автономная работа"". По команде ""Состав отправляемых данных"" откройте - |форму ""Регистрация изменений"", в которой выполните команду - |""Зарегистрировать данные для восстановления подчиненного узла РИБ"" (меню Еще).'"), - НСтр("ru = 'Чтобы зарегистрировать данные для восстановления подчиненного узла РИБ, в главном узле - |в разделе ""Администрирование"" откройте ""Настройки синхронизации данных"", перейдите - |по ссылке ""Синхронизация данных"". По команде ""Состав отправляемых данных"" откройте - |форму ""Регистрация изменений"", в которой выполните команду - |""Зарегистрировать данные для восстановления подчиненного узла РИБ"" (меню Еще).'"))); - - ВызватьИсключение ТекстОшибки; - КонецЕсли; - - ИначеЕсли ВызыватьИсключение Тогда // Настройка в подчиненном узле ИБ при первом запуске. - ТекстОшибки = - НСтр("ru = 'В главном узле не обновлен справочник ""Идентификаторы объектов метаданных"": - |при проверке обнаружено, что требуется выполнить критичные изменения (см. подробности в журнале - |регистрации в событии ""Идентификаторы объектов метаданных.Требуется выполнить критичные изменения""). - | - |В главном узле выполните обновление информационной базы и повторите создание подчиненного узла. - | - |Чтобы выполнить обновление информационной базы в главном узле, один раз выполните - |запуск программы с параметром запуска ЗапуститьОбновлениеИнформационнойБазы.'"); - - ВызватьИсключение ТекстОшибки; - КонецЕсли; + Константы.ПовторитьЗагрузкуСообщенияОбменаДаннымиПередЗапуском.Установить(Истина); КонецПроцедуры @@ -863,10 +847,18 @@ УстановитьПривилегированныйРежим(Истина); Возврат ЭтоПодчиненныйУзелРИБ() - И Константы.НастройкаПодчиненногоУзлаРИБЗавершена.Получить() = Ложь; + И НЕ Константы.НастройкаПодчиненногоУзлаРИБЗавершена.Получить(); КонецФункции +// См. описание одноименной процедуры в общем модуле РегламентныеЗаданияПереопределяемый. +// +Процедура ПриОпределенииЗависимостейРегламентныхЗаданий(Зависимости) Экспорт + Зависимость = Зависимости.Добавить(); + Зависимость.РегламентноеЗадание = Метаданные.РегламентныеЗадания.УдалениеНеактуальнойИнформацииСинхронизации; + Зависимость.ФункциональнаяОпция = Метаданные.ФункциональныеОпции.ИспользоватьСинхронизациюДанных; +КонецПроцедуры + //////////////////////////////////////////////////////////////////////////////// // Обновление информационной базы. @@ -878,12 +870,15 @@ // Процедура ПриДобавленииОбработчиковОбновления(Обработчики) Экспорт - Обработчик = Обработчики.Добавить(); - Обработчик.Версия = "*"; - Обработчик.Приоритет = 1; - Обработчик.ОбщиеДанные = Истина; - Обработчик.МонопольныйРежим = Ложь; - Обработчик.Процедура = "ОбменДаннымиСервер.ВыполнитьОбновлениеПравилДляОбменаДанными"; + Если ПолучитьФункциональнуюОпцию("ИспользоватьСинхронизациюДанных") + Или ОбщегоНазначенияПовтИсп.РазделениеВключено() Тогда + Обработчик = Обработчики.Добавить(); + Обработчик.Версия = "*"; + Обработчик.Приоритет = 1; + Обработчик.ОбщиеДанные = Истина; + Обработчик.МонопольныйРежим = Ложь; + Обработчик.Процедура = "ОбменДаннымиСервер.ВыполнитьОбновлениеПравилДляОбменаДанными"; + КонецЕсли; Обработчик = Обработчики.Добавить(); Обработчик.Версия = "1.1.1.2"; @@ -935,6 +930,11 @@ // Процедура ВыполнитьОбновлениеПравилДляОбменаДанными() Экспорт + Если Не ПолучитьФункциональнуюОпцию("ИспользоватьСинхронизациюДанных") + И Не ОбщегоНазначенияПовтИсп.РазделениеВключено() Тогда + Возврат; + КонецЕсли; + // Для сценария, когда в конфигурации был удален или переименован план обмена. УдалитьНеактуальныеЗаписиВРегистреПравилДляОбменаДанными(); @@ -942,16 +942,7 @@ ПравилаРегистрацииЗагруженныеИзФайла = Новый Массив; ВыполнитьПроверкуНаличияПравилОбменаЗагруженныхИзФайла(ПравилаОбменаЗагруженныеИзФайла, ПравилаРегистрацииЗагруженныеИзФайла); - - Отказ = Ложь; - - ВыполнитьОбновлениеВерсииТиповыхПравилДляОбменаДанными(Отказ, ПравилаОбменаЗагруженныеИзФайла, ПравилаРегистрацииЗагруженныеИзФайла); - - Если Отказ Тогда - ВызватьИсключение НСтр("ru = 'При обновлении правил обмена данными возникли ошибки (см. Журнал регистрации).'"); - КонецЕсли; - - ОбменДаннымиВызовСервера.СброситьКэшМеханизмаРегистрацииОбъектов(); + ВыполнитьОбновлениеВерсииТиповыхПравилДляОбменаДанными(ПравилаОбменаЗагруженныеИзФайла, ПравилаРегистрацииЗагруженныеИзФайла); КонецПроцедуры @@ -991,7 +982,7 @@ ИменаРеквизитов = СтрЗаменить(ИменаРеквизитов, " ", ""); - Реквизиты = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(ИменаРеквизитов); + Реквизиты = СтрРазделить(ИменаРеквизитов, ","); ОбъектМодифицирован = Ложь; @@ -1078,7 +1069,7 @@ // Процедура ПроверитьУстановкуФункциональныхОпцийПриОбновленииИБ() Экспорт - Если Константы.ИспользоватьСинхронизациюДанных.Получить() = Истина Тогда + Если Константы.ИспользоватьСинхронизациюДанных.Получить() Тогда Константы.ИспользоватьСинхронизациюДанных.Установить(Истина); @@ -1091,7 +1082,7 @@ // Процедура ПроверитьУстановкуФункциональныхОпцийПриОбновленииИБ_2_1_2_21() Экспорт - Если ПолучитьФункциональнуюОпцию("ИспользоватьСинхронизациюДанных") = Ложь Тогда + Если НЕ ПолучитьФункциональнуюОпцию("ИспользоватьСинхронизациюДанных") Тогда Если ОбщегоНазначенияПовтИсп.РазделениеВключено() Тогда @@ -1147,7 +1138,7 @@ КонецПроцедуры -// Очищает сохраненные настройки общей формы ОбменыДанными. +// Очищает сохраненные настройки общей формы СинхронизацияДанных. // Процедура СброситьНастройкиМонитораОбмена() Экспорт @@ -1158,11 +1149,331 @@ МассивНастроекФормы.Добавить("/ТекущиеДанные"); Для Каждого ЭлементФормы Из МассивНастроекФормы Цикл - ХранилищеСистемныхНастроек.Удалить("ОбщаяФорма.ОбменыДанными" + ЭлементФормы, Неопределено, Неопределено); + ХранилищеСистемныхНастроек.Удалить("ОбщаяФорма.СинхронизацияДанных" + ЭлементФормы, Неопределено, Неопределено); КонецЦикла; КонецПроцедуры +// Предназначена для перевода паролей в безопасное хранилище. +// Используется в обработчике обновления ИБ. +Процедура ПеренестиПаролиВБезопасноеХранилище() Экспорт + + Запрос = Новый Запрос; + Запрос.Текст = "ВЫБРАТЬ + | НастройкиТранспортаОбмена.Узел, + | НастройкиТранспортаОбмена.УдалитьCOMПарольПользователя, + | НастройкиТранспортаОбмена.УдалитьFTPСоединениеПароль, + | НастройкиТранспортаОбмена.УдалитьWSПароль, + | НастройкиТранспортаОбмена.УдалитьПарольАрхиваСообщенияОбмена + |ИЗ + | РегистрСведений.НастройкиТранспортаОбмена КАК НастройкиТранспортаОбмена"; + РезультатЗапроса = Запрос.Выполнить().Выбрать(); + Пока РезультатЗапроса.Следующий() Цикл + Если НЕ ПустаяСтрока(РезультатЗапроса.УдалитьCOMПарольПользователя) + ИЛИ НЕ ПустаяСтрока(РезультатЗапроса.УдалитьFTPСоединениеПароль) + ИЛИ НЕ ПустаяСтрока(РезультатЗапроса.УдалитьWSПароль) + ИЛИ НЕ ПустаяСтрока(РезультатЗапроса.УдалитьПарольАрхиваСообщенияОбмена) Тогда + НачатьТранзакцию(); + Попытка + УстановитьПривилегированныйРежим(Истина); + ОбщегоНазначения.ЗаписатьДанныеВБезопасноеХранилище(РезультатЗапроса.Узел, РезультатЗапроса.УдалитьCOMПарольПользователя, "COMПарольПользователя"); + ОбщегоНазначения.ЗаписатьДанныеВБезопасноеХранилище(РезультатЗапроса.Узел, РезультатЗапроса.УдалитьFTPСоединениеПароль, "FTPСоединениеПароль"); + ОбщегоНазначения.ЗаписатьДанныеВБезопасноеХранилище(РезультатЗапроса.Узел, РезультатЗапроса.УдалитьWSПароль, "WSПароль"); + ОбщегоНазначения.ЗаписатьДанныеВБезопасноеХранилище(РезультатЗапроса.Узел, РезультатЗапроса.УдалитьПарольАрхиваСообщенияОбмена, "ПарольАрхиваСообщенияОбмен"); + УстановитьПривилегированныйРежим(Ложь); + НастройкиТранспортаОбмена = РегистрыСведений.НастройкиТранспортаОбмена.СоздатьМенеджерЗаписи(); + НастройкиТранспортаОбмена.Узел = РезультатЗапроса.Узел; + НастройкиТранспортаОбмена.Прочитать(); + НастройкиТранспортаОбмена.УдалитьCOMПарольПользователя = ""; + НастройкиТранспортаОбмена.УдалитьFTPСоединениеПароль = ""; + НастройкиТранспортаОбмена.УдалитьWSПароль = ""; + НастройкиТранспортаОбмена.УдалитьПарольАрхиваСообщенияОбмена = ""; + НастройкиТранспортаОбмена.Записать(); + ЗафиксироватьТранзакцию(); + Исключение + СтрокаСообщенияОбОшибке = ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); + ЗаписьЖурналаРегистрации(СобытиеЖурналаРегистрацииОбменДанными(), УровеньЖурналаРегистрации.Ошибка,,, СтрокаСообщенияОбОшибке); + ОтменитьТранзакцию(); + КонецПопытки; + КонецЕсли; + КонецЦикла; + +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// Обработчики условных вызовов из других подсистем. + +// Определить объекты метаданных, в модулях менеджеров которых ограничивается возможность +// редактирования реквизитов при групповом изменении. +// +// Параметры: +// Объекты - Соответствие - в качестве ключа указать полное имя объекта метаданных, +// подключенного к подсистеме "Групповое изменение объектов". +// Дополнительно в значении могут быть перечислены имена экспортных функций: +// "РеквизитыНеРедактируемыеВГрупповойОбработке", +// "РеквизитыРедактируемыеВГрупповойОбработке". +// Каждое имя должно начинаться с новой строки. +// Если указана пустая строка, значит в модуле менеджера определены обе функции. +// +Процедура ПриОпределенииОбъектовСРедактируемымиРеквизитами(Объекты) Экспорт + Объекты.Вставить(Метаданные.Справочники.СценарииОбменовДанными.ПолноеИмя(), "РеквизитыНеРедактируемыеВГрупповойОбработке"); +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// Прогресс-бар. + +// Вычисляет количество объектов к загрузке и размер файла сообщения обмена. +// Параметры: +// ИмяФайлаОбмена - Строка - имя файла сообщения обмена. +// ЭтоОбменXDTO - Булево - признак того, что выполняется обмен через универсальный формат. +// ЭтоОбменРИБ - Булево - признак того, что выполняется обмен РИБ. +// +// Возвращаемое значение: +// Структура - свойства структуры: +// * РазмерФайлаСообщенияОбмена - Число - размер файла в мегабайтах, по умолчанию 0. +// * КоличествоОбъектовКЗагрузке - Число - количество объектов к загрузке, по умолчанию 0. +// +// Вычисляет количество объектов к загрузке и размер файла сообщения обмена. +// Параметры: +// ИмяФайлаОбмена - Строка - имя файла сообщения обмена. +// ЭтоОбменXDTO - Булево - признак того, что выполняется обмен через универсальный формат. +// +// Возвращаемое значение: +// Структура - свойства структуры: +// * РазмерФайлаСообщенияОбмена - Число - размер файла в мегабайтах, по умолчанию 0. +// * КоличествоОбъектовКЗагрузке - Число - количество объектов к загрузке, по умолчанию 0. +// +Функция РезультатПодсчетаДанныхКЗагрузке(Знач ИмяФайлаОбмена, ЭтоОбменXDTO, ЭтоОбменРИБ = Ложь) Экспорт + + Результат = Новый Структура; + Результат.Вставить("РазмерФайлаСообщенияОбмена", 0); + Результат.Вставить("КоличествоОбъектовКЗагрузке", 0); + + Если НЕ ЗначениеЗаполнено(ИмяФайлаОбмена) Тогда + Возврат Результат; + КонецЕсли; + + ФайлСДанными = Новый Файл(ИмяФайлаОбмена); + // Размер сразу переводим в мегабайты. + Результат.РазмерФайлаСообщенияОбмена = Окр(ФайлСДанными.Размер() / 1048576, 1); + + ФайлОбмена = Новый ЧтениеXML; + Попытка + ФайлОбмена.ОткрытьФайл(ИмяФайлаОбмена); + Исключение + Возврат Результат; + КонецПопытки; + + // В зависимости от вида обмена используется разный алгоритм анализа файла обмена. + Если ЭтоОбменXDTO Тогда + ФайлОбмена.Прочитать(); // Message. + ФайлОбмена.Прочитать(); // Header начало. + ФайлОбмена.Пропустить(); // Header конец. + ФайлОбмена.Прочитать(); //Body начало. + Пока ФайлОбмена.Прочитать() Цикл + Если ФайлОбмена.ЛокальноеИмя <> "УдалениеОбъекта" + И ФайлОбмена.ЛокальноеИмя <> "Body" Тогда + Результат.КоличествоОбъектовКЗагрузке = Результат.КоличествоОбъектовКЗагрузке + 1; + КонецЕсли; + ФайлОбмена.Пропустить(); + КонецЦикла; + ИначеЕсли ЭтоОбменРИБ Тогда + ФайлОбмена.Прочитать(); // Message. + ФайлОбмена.Прочитать(); // Header начало. + ФайлОбмена.Пропустить(); // Header конец. + ФайлОбмена.Прочитать(); //Body начало. + Пока ФайлОбмена.Прочитать() Цикл + Если ФайлОбмена.ЛокальноеИмя = "Changes" + ИЛИ ФайлОбмена.ЛокальноеИмя = "Data" Тогда + Продолжить; + ИначеЕсли СтрНайти(ФайлОбмена.ЛокальноеИмя, "Config") = 0 + И СтрНайти(ФайлОбмена.ЛокальноеИмя, "Signature") = 0 + И СтрНайти(ФайлОбмена.ЛокальноеИмя, "Nodes") = 0 + И ФайлОбмена.ЛокальноеИмя <> "Parameters" + И ФайлОбмена.ЛокальноеИмя <> "Body" Тогда + Результат.КоличествоОбъектовКЗагрузке = Результат.КоличествоОбъектовКЗагрузке + 1; + КонецЕсли; + ФайлОбмена.Пропустить(); + КонецЦикла; + Иначе + + ФайлОбмена.Прочитать(); // Файл обмена. + ФайлОбмена.Прочитать(); // ПравилаОбмена начало. + ФайлОбмена.Пропустить(); // ПравилаОбмена конец. + + ФайлОбмена.Прочитать(); // Типы данных начало. + ФайлОбмена.Пропустить(); // ТипыДанных конец. + + ФайлОбмена.Прочитать(); // Данные по обмену начало. + ФайлОбмена.Пропустить(); // Данные по обмену конец. + Пока ФайлОбмена.Прочитать() Цикл + Если ФайлОбмена.ЛокальноеИмя = "Объект" + ИЛИ ФайлОбмена.ЛокальноеИмя = "НаборЗаписейРегистра" + ИЛИ ФайлОбмена.ЛокальноеИмя = "УдалениеОбъекта" + ИЛИ ФайлОбмена.ЛокальноеИмя = "ИнформацияОРегистрацииОбъекта" Тогда + Результат.КоличествоОбъектовКЗагрузке = Результат.КоличествоОбъектовКЗагрузке + 1; + КонецЕсли; + ФайлОбмена.Пропустить(); + КонецЦикла; + КонецЕсли; + ФайлОбмена.Закрыть(); + + Возврат Результат; +КонецФункции +// Рассчитывает процент выгрузки и записывает в виде сообщения пользователю. +// +// Параметры: +// КоличествоВыгруженных - Число - Количество выгруженных на данный момент объектов. +// КоличествоОбъектовКВыгрузке - Число - Количество объектов к выгрузке. +// +Процедура РассчитатьПроцентВыгрузки(КоличествоВыгруженных, КоличествоОбъектовКВыгрузке) Экспорт + // Сообщение о проценте выгрузки выдаем через каждые 10 объектов. + Если КоличествоВыгруженных = 0 ИЛИ КоличествоВыгруженных / 10 <> Цел(КоличествоВыгруженных / 10) Тогда + Возврат; + КонецЕсли; + Если КоличествоОбъектовКВыгрузке = 0 Тогда + ПроцентВыполнения = 95; + Шаблон = НСтр("ru = 'Обработано: %1 объектов.'"); + Текст = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(Шаблон, Формат(КоличествоВыгруженных, "ЧН=0; ЧГ=")); + + Иначе + // 5% полосы резервируем под выгрузку по ссылкам, проценты по количеству считаем от 95. + ПроцентВыполнения = Окр(Мин(КоличествоВыгруженных * 95 / КоличествоОбъектовКВыгрузке, 95)); + Шаблон = НСтр("ru = 'Обработано: %1 из %2 объектов.'"); + Текст = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + Шаблон, + Формат(КоличествоВыгруженных, "ЧН=0; ЧГ="), + Формат(КоличествоОбъектовКВыгрузке, "ЧН=0; ЧГ=")); + КонецЕсли; + + // Регистрация сообщения для чтения из клиентского сеанса. + ДлительныеОперации.СообщитьПрогресс(ПроцентВыполнения, Текст); +КонецПроцедуры + +// Рассчитывает процент загрузки и записывает в виде сообщения пользователю. +// +// Параметры: +// КоличествоЗагруженных - Число - Количество загруженных на данный момент объектов. +// КоличествоОбъектовКЗагрузке - Число - Количество объектов к загрузке. +// РазмерФайлаСообщенияОбмена - Число - Размер файла сообщения обмена в мегабайтах. +// +Процедура РассчитатьПроцентЗагрузки(КоличествоЗагруженных, КоличествоОбъектовКЗагрузке, РазмерФайлаСообщенияОбмена) Экспорт + // Сообщение о проценте загрузки выдаем через каждые 10 объектов. + Если КоличествоЗагруженных = 0 ИЛИ КоличествоЗагруженных / 10 <> Цел(КоличествоЗагруженных / 10) Тогда + Возврат; + КонецЕсли; + + Если КоличествоОбъектовКЗагрузке = 0 Тогда + // Возможно при загрузке через com соединение если на другой стороне не встроен прогресс-бар. + ПроцентВыполнения = 95; + Шаблон = НСтр("ru = 'Обработано %1 объектов.'"); + Текст = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(Шаблон, Формат(КоличествоЗагруженных, "ЧН=0; ЧГ=")); + Иначе + // 5% полосы резервируем под отложенное заполнение, проценты по количеству считаем от 95. + ПроцентВыполнения = Окр(Мин(КоличествоЗагруженных * 95 / КоличествоОбъектовКЗагрузке, 95)); + + Шаблон = НСтр("ru = 'Обработано: %1 из %2 объектов.'"); + Текст = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + Шаблон, + Формат(КоличествоЗагруженных, "ЧН=0; ЧГ="), + Формат(КоличествоОбъектовКЗагрузке, "ЧН=0; ЧГ=")); + КонецЕсли; + + // Дополняем размером файла. + Если РазмерФайлаСообщенияОбмена <> 0 Тогда + Шаблон = НСтр("ru = 'Размер сообщения %1 МБ'"); + ТекстДополнение = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(Шаблон, РазмерФайлаСообщенияОбмена); + Текст = Текст + " " + ТекстДополнение; + КонецЕсли; + + // Регистрация сообщения для чтения из клиентского сеанса. + ДлительныеОперации.СообщитьПрогресс(ПроцентВыполнения, Текст); + +КонецПроцедуры + +// Увеличение счетчика выгруженных объектов и расчет процента выгрузки. Только для РИБ. +// +// Параметры: +// Получатель - План обмена объект. +// СозданиеНачальногоОбраза - булево. +// +Процедура РассчитатьПроцентВыгрузкиРИБ(Получатель, СозданиеНачальногоОбраза) Экспорт + + Если Получатель = Неопределено + Или Не ОбменДаннымиПовтИсп.ЭтоУзелРаспределеннойИнформационнойБазы(Получатель.Ссылка) Тогда + Возврат; + КонецЕсли; + + // Подсчет количества объектов к выгрузке. + Если НЕ Получатель.ДополнительныеСвойства.Свойство("КоличествоОбъектовКВыгрузке") Тогда + Если СозданиеНачальногоОбраза Тогда + КоличествоОбъектовКВыгрузке = РассчитатьКоличествоОбъектовВБазе(Получатель); + Иначе + КоличествоОбъектовКВыгрузке = РассчитатьКоличествоЗарегистрированныхОбъектов(Получатель); + КонецЕсли; + Получатель.ДополнительныеСвойства.Вставить("КоличествоОбъектовКВыгрузке", КоличествоОбъектовКВыгрузке); + Получатель.ДополнительныеСвойства.Вставить("СчетчикВыгруженныхОбъектов", 1); + Возврат; // % выгрузки в этом случае можно не считать - это самое начало выгрузки. + Иначе + Если Получатель.ДополнительныеСвойства.Свойство("СчетчикВыгруженныхОбъектов") Тогда + Получатель.ДополнительныеСвойства.СчетчикВыгруженныхОбъектов = Получатель.ДополнительныеСвойства.СчетчикВыгруженныхОбъектов + 1; + Иначе + Возврат; + КонецЕсли; + КонецЕсли; + + РассчитатьПроцентВыгрузки(Получатель.ДополнительныеСвойства.СчетчикВыгруженныхОбъектов, + Получатель.ДополнительныеСвойства.КоличествоОбъектовКВыгрузке); +КонецПроцедуры + +// Увеличение счетчика загруженных объектов и расчет процента загрузки. Только для РИБ. +// +// Параметры: +// Отправитель - План обмена объект. +// +Процедура РассчитатьПроцентЗагрузкиРИБ(Отправитель) Экспорт + + Если Отправитель = Неопределено + Или Не ОбменДаннымиПовтИсп.ЭтоУзелРаспределеннойИнформационнойБазы(Отправитель.Ссылка) Тогда + Возврат; + КонецЕсли; + Если НЕ Отправитель.ДополнительныеСвойства.Свойство("КоличествоОбъектовКЗагрузке") + ИЛИ НЕ Отправитель.ДополнительныеСвойства.Свойство("РазмерФайлаСообщенияОбмена") Тогда + КоличествоОбъектовКЗагрузке = 0; + РазмерФайлаСообщенияОбмена = 0; + // Извлечение общего количества объектов к загрузке и размера файла сообщения обмена. + ТекущийПараметрСеанса = Неопределено; + УстановитьПривилегированныйРежим(Истина); + Попытка + ТекущийПараметрСеанса = ПараметрыСеанса.ПараметрыСеансаСинхронизацииДанных.Получить(); + Исключение + Возврат; + КонецПопытки; + УстановитьПривилегированныйРежим(Ложь); + Если ТипЗнч(ТекущийПараметрСеанса) = Тип("Соответствие") Тогда + ДанныеСинхронизации = ТекущийПараметрСеанса.Получить(Отправитель.Ссылка); + Если ДанныеСинхронизации = Неопределено + ИЛИ ТипЗнч(ДанныеСинхронизации) <> Тип("Структура") Тогда + Возврат; + КонецЕсли; + Отправитель.ДополнительныеСвойства.Вставить("КоличествоОбъектовКЗагрузке", + ДанныеСинхронизации.КоличествоОбъектовКЗагрузке); + Отправитель.ДополнительныеСвойства.Вставить("РазмерФайлаСообщенияОбмена", + ДанныеСинхронизации.РазмерФайлаСообщенияОбмена); + КонецЕсли; + КонецЕсли; + Если Не Отправитель.ДополнительныеСвойства.Свойство("СчетчикЗагруженныхОбъектов") Тогда + Отправитель.ДополнительныеСвойства.Вставить("СчетчикЗагруженныхОбъектов", 1); + Иначе + Отправитель.ДополнительныеСвойства.СчетчикЗагруженныхОбъектов = Отправитель.ДополнительныеСвойства.СчетчикЗагруженныхОбъектов + 1; + КонецЕсли; + + РассчитатьПроцентЗагрузки(Отправитель.ДополнительныеСвойства.СчетчикЗагруженныхОбъектов, + Отправитель.ДополнительныеСвойства.КоличествоОбъектовКЗагрузке, + Отправитель.ДополнительныеСвойства.РазмерФайлаСообщенияОбмена); + +КонецПроцедуры + // // Определяет является ли план обмена БСП разделенным. @@ -1278,7 +1589,7 @@ ПараметрыПоУмолчанию = НастройкиПланаОбменаПоУмолчанию(ИмяПланаОбмена); ПланыОбмена[ИмяПланаОбмена].ОпределитьНастройки(ПараметрыПоУмолчанию, ИдентификаторНастройки); - Если Найти(ИмяПараметра, ",") = 0 Тогда + Если СтрНайти(ИмяПараметра, ",") = 0 Тогда ЗначениеПараметра = ПараметрыПоУмолчанию[ИмяПараметра]; @@ -1293,6 +1604,364 @@ КонецФункции +// Для внутреннего использования. +// +Функция СтруктураПараметровWS() Экспорт + + СтруктураПараметров = Новый Структура; + СтруктураПараметров.Вставить("WSURLВебСервиса"); + СтруктураПараметров.Вставить("WSИмяПользователя"); + СтруктураПараметров.Вставить("WSПароль"); + + Возврат СтруктураПараметров; +КонецФункции + +// Для внутреннего использования. +// +Функция ТаблицаМонитораОбменаДанными(Знач ПланыОбмена, Знач ДополнительныеСвойстваПланаОбмена = "", Знач ТолькоОшибочные = Ложь) Экспорт + + ТекстЗапроса = "ВЫБРАТЬ + | СостоянияОбменовДанными.УзелИнформационнойБазы КАК УзелИнформационнойБазы, + | СостоянияОбменовДанными.ДатаОкончания КАК ДатаОкончания, + | ВЫБОР + | КОГДА СостоянияОбменовДанными.РезультатВыполненияОбмена = ЗНАЧЕНИЕ(Перечисление.РезультатыВыполненияОбмена.Предупреждение_СообщениеОбменаБылоРанееПринято) + | ИЛИ СостоянияОбменовДанными.РезультатВыполненияОбмена = ЗНАЧЕНИЕ(Перечисление.РезультатыВыполненияОбмена.ВыполненоСПредупреждениями) + | ТОГДА 2 + | КОГДА СостоянияОбменовДанными.РезультатВыполненияОбмена = ЗНАЧЕНИЕ(Перечисление.РезультатыВыполненияОбмена.Выполнено) + | ТОГДА ВЫБОР + | КОГДА ЕСТЬNULL(КоличествоПроблем.Количество, 0) > 0 + | ТОГДА 2 + | ИНАЧЕ 0 + | КОНЕЦ + | ИНАЧЕ 1 + | КОНЕЦ КАК РезультатВыполненияОбмена + |ПОМЕСТИТЬ СостоянияОбменовДаннымиЗагрузка + |ИЗ + | РегистрСведений.СостоянияОбменовДанными КАК СостоянияОбменовДанными + | ЛЕВОЕ СОЕДИНЕНИЕ КоличествоПроблем КАК КоличествоПроблем + | ПО СостоянияОбменовДанными.УзелИнформационнойБазы = КоличествоПроблем.УзелИнформационнойБазы + |ГДЕ + | СостоянияОбменовДанными.ДействиеПриОбмене = ЗНАЧЕНИЕ(Перечисление.ДействияПриОбмене.ЗагрузкаДанных) + |; + | + |//////////////////////////////////////////////////////////////////////////////// + |ВЫБРАТЬ + | СостоянияОбменовДанными.УзелИнформационнойБазы КАК УзелИнформационнойБазы, + | СостоянияОбменовДанными.ДатаОкончания КАК ДатаОкончания, + | ВЫБОР + | КОГДА СостоянияОбменовДанными.РезультатВыполненияОбмена = ЗНАЧЕНИЕ(Перечисление.РезультатыВыполненияОбмена.Предупреждение_СообщениеОбменаБылоРанееПринято) + | ТОГДА 2 + | КОГДА СостоянияОбменовДанными.РезультатВыполненияОбмена = ЗНАЧЕНИЕ(Перечисление.РезультатыВыполненияОбмена.ВыполненоСПредупреждениями) + | ТОГДА 2 + | КОГДА СостоянияОбменовДанными.РезультатВыполненияОбмена = ЗНАЧЕНИЕ(Перечисление.РезультатыВыполненияОбмена.Выполнено) + | ТОГДА 0 + | ИНАЧЕ 1 + | КОНЕЦ КАК РезультатВыполненияОбмена + |ПОМЕСТИТЬ СостоянияОбменовДаннымиВыгрузка + |ИЗ + | РегистрСведений.СостоянияОбменовДанными КАК СостоянияОбменовДанными + |ГДЕ + | СостоянияОбменовДанными.ДействиеПриОбмене = ЗНАЧЕНИЕ(Перечисление.ДействияПриОбмене.ВыгрузкаДанных) + |; + | + |//////////////////////////////////////////////////////////////////////////////// + |ВЫБРАТЬ + | СостоянияУспешныхОбменовДанными.УзелИнформационнойБазы КАК УзелИнформационнойБазы, + | СостоянияУспешныхОбменовДанными.ДатаОкончания КАК ДатаОкончания + |ПОМЕСТИТЬ СостоянияУспешныхОбменовДаннымиЗагрузка + |ИЗ + | РегистрСведений.СостоянияУспешныхОбменовДанными КАК СостоянияУспешныхОбменовДанными + |ГДЕ + | СостоянияУспешныхОбменовДанными.ДействиеПриОбмене = ЗНАЧЕНИЕ(Перечисление.ДействияПриОбмене.ЗагрузкаДанных) + |; + | + |//////////////////////////////////////////////////////////////////////////////// + |ВЫБРАТЬ + | СостоянияУспешныхОбменовДанными.УзелИнформационнойБазы КАК УзелИнформационнойБазы, + | СостоянияУспешныхОбменовДанными.ДатаОкончания КАК ДатаОкончания + |ПОМЕСТИТЬ СостоянияУспешныхОбменовДаннымиВыгрузка + |ИЗ + | РегистрСведений.СостоянияУспешныхОбменовДанными КАК СостоянияУспешныхОбменовДанными + |ГДЕ + | СостоянияУспешныхОбменовДанными.ДействиеПриОбмене = ЗНАЧЕНИЕ(Перечисление.ДействияПриОбмене.ВыгрузкаДанных) + |; + | + |//////////////////////////////////////////////////////////////////////////////// + |ВЫБРАТЬ + | СценарииОбменовДаннымиНастройкиОбмена.УзелИнформационнойБазы КАК УзелИнформационнойБазы + |ПОМЕСТИТЬ СценарииСинхронизацииДанных + |ИЗ + | Справочник.СценарииОбменовДанными.НастройкиОбмена КАК СценарииОбменовДаннымиНастройкиОбмена + |ГДЕ + | СценарииОбменовДаннымиНастройкиОбмена.Ссылка.ИспользоватьРегламентноеЗадание = ИСТИНА + | + |СГРУППИРОВАТЬ ПО + | СценарииОбменовДаннымиНастройкиОбмена.УзелИнформационнойБазы + |; + | + |//////////////////////////////////////////////////////////////////////////////// + |ВЫБРАТЬ + | ПланыОбмена.УзелИнформационнойБазы КАК УзелИнформационнойБазы, + | + | [ДополнительныеСвойстваПланаОбмена] + | + | ЕСТЬNULL(СостоянияОбменовДаннымиВыгрузка.РезультатВыполненияОбмена, 0) КАК РезультатПоследнейВыгрузкиДанных, + | ЕСТЬNULL(СостоянияОбменовДаннымиЗагрузка.РезультатВыполненияОбмена, 0) КАК РезультатПоследнейЗагрузкиДанных, + | СостоянияОбменовДаннымиЗагрузка.ДатаОкончания КАК ДатаПоследнейЗагрузки, + | СостоянияОбменовДаннымиВыгрузка.ДатаОкончания КАК ДатаПоследнейВыгрузки, + | СостоянияУспешныхОбменовДаннымиЗагрузка.ДатаОкончания КАК ДатаПоследнейУспешнойЗагрузки, + | СостоянияУспешныхОбменовДаннымиВыгрузка.ДатаОкончания КАК ДатаПоследнейУспешнойВыгрузки, + | ВЫБОР + | КОГДА СценарииСинхронизацииДанных.УзелИнформационнойБазы ЕСТЬ NULL + | ТОГДА 0 + | ИНАЧЕ 1 + | КОНЕЦ КАК РасписаниеНастроено + |ИЗ + | ПланыОбменаКонфигурации КАК ПланыОбмена + | ЛЕВОЕ СОЕДИНЕНИЕ СостоянияОбменовДаннымиЗагрузка КАК СостоянияОбменовДаннымиЗагрузка + | ПО ПланыОбмена.УзелИнформационнойБазы = СостоянияОбменовДаннымиЗагрузка.УзелИнформационнойБазы + | ЛЕВОЕ СОЕДИНЕНИЕ СостоянияОбменовДаннымиВыгрузка КАК СостоянияОбменовДаннымиВыгрузка + | ПО ПланыОбмена.УзелИнформационнойБазы = СостоянияОбменовДаннымиВыгрузка.УзелИнформационнойБазы + | ЛЕВОЕ СОЕДИНЕНИЕ СостоянияУспешныхОбменовДаннымиЗагрузка КАК СостоянияУспешныхОбменовДаннымиЗагрузка + | ПО ПланыОбмена.УзелИнформационнойБазы = СостоянияУспешныхОбменовДаннымиЗагрузка.УзелИнформационнойБазы + | ЛЕВОЕ СОЕДИНЕНИЕ СостоянияУспешныхОбменовДаннымиВыгрузка КАК СостоянияУспешныхОбменовДаннымиВыгрузка + | ПО ПланыОбмена.УзелИнформационнойБазы = СостоянияУспешныхОбменовДаннымиВыгрузка.УзелИнформационнойБазы + | ЛЕВОЕ СОЕДИНЕНИЕ СценарииСинхронизацииДанных КАК СценарииСинхронизацииДанных + | ПО ПланыОбмена.УзелИнформационнойБазы = СценарииСинхронизацииДанных.УзелИнформационнойБазы + | + |[Отбор] + | + |УПОРЯДОЧИТЬ ПО + | ПланыОбмена.Наименование"; + + УстановитьПривилегированныйРежим(Истина); + + МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц; + + ПолучитьТаблицуПлановОбменаДляМонитора(МенеджерВременныхТаблиц, ПланыОбмена, ДополнительныеСвойстваПланаОбмена); + ПолучитьТаблицуРезультатовОбменаДляМонитора(МенеджерВременныхТаблиц, ПланыОбмена); + + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "[ДополнительныеСвойстваПланаОбмена]", ПолучитьДополнительныеСвойстваПланаОбменаСтрокой(ДополнительныеСвойстваПланаОбмена)); + + Если ТолькоОшибочные Тогда + Отбор = " + |ГДЕ + | ЕСТЬNULL(СостоянияОбменовДаннымиВыгрузка.РезультатВыполненияОбмена, 0) <> 0 + | ИЛИ ЕСТЬNULL(СостоянияОбменовДаннымиЗагрузка.РезультатВыполненияОбмена, 0) <> 0"; + Иначе + Отбор = ""; + КонецЕсли; + + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "[Отбор]", Отбор); + + Запрос = Новый Запрос; + Запрос.Текст = ТекстЗапроса; + Запрос.МенеджерВременныхТаблиц = МенеджерВременныхТаблиц; + + НастройкиСинхронизации = Запрос.Выполнить().Выгрузить(); + НастройкиСинхронизации.Колонки.Добавить("ПредставлениеДатыПоследнейЗагрузки"); + НастройкиСинхронизации.Колонки.Добавить("ПредставлениеДатыПоследнейВыгрузки"); + НастройкиСинхронизации.Колонки.Добавить("ПредставлениеДатыПоследнейУспешнойЗагрузки"); + НастройкиСинхронизации.Колонки.Добавить("ПредставлениеДатыПоследнейУспешнойВыгрузки"); + НастройкиСинхронизации.Колонки.Добавить("ВариантОбменаДанными", Новый ОписаниеТипов("Строка")); + НастройкиСинхронизации.Колонки.Добавить("ИмяПланаОбмена", Новый ОписаниеТипов("Строка")); + + Для Каждого НастройкаСинхронизации Из НастройкиСинхронизации Цикл + + ПереопределяемоеИмяУзлаПланаОбмена = ПереопределяемоеИмяУзлаПланаОбмена(НастройкаСинхронизации.УзелИнформационнойБазы, "НаименованиеКонфигурацииКорреспондента"); + + Если ЗначениеЗаполнено(ПереопределяемоеИмяУзлаПланаОбмена) Тогда + НастройкаСинхронизации.ИмяПланаОбмена = ПереопределяемоеИмяУзлаПланаОбмена; + КонецЕсли; + + НастройкаСинхронизации.ПредставлениеДатыПоследнейЗагрузки = ОтносительнаяДатаСинхронизации(НастройкаСинхронизации.ДатаПоследнейЗагрузки); + НастройкаСинхронизации.ПредставлениеДатыПоследнейВыгрузки = ОтносительнаяДатаСинхронизации(НастройкаСинхронизации.ДатаПоследнейВыгрузки); + НастройкаСинхронизации.ПредставлениеДатыПоследнейУспешнойЗагрузки = ОтносительнаяДатаСинхронизации(НастройкаСинхронизации.ДатаПоследнейУспешнойЗагрузки); + НастройкаСинхронизации.ПредставлениеДатыПоследнейУспешнойВыгрузки = ОтносительнаяДатаСинхронизации(НастройкаСинхронизации.ДатаПоследнейУспешнойВыгрузки); + + НастройкаСинхронизации.ВариантОбменаДанными = ВариантОбменаДанными(НастройкаСинхронизации.УзелИнформационнойБазы); + + КонецЦикла; + + Возврат НастройкиСинхронизации; + +КонецФункции + +// Для внутреннего использования. +// +Процедура ПроверитьВозможностьВыполненияОбменов() Экспорт + + Если Не Пользователи.РолиДоступны("ВыполнениеСинхронизацииДанных, НастройкаСинхронизацииДанных") Тогда + + ВызватьИсключение НСтр("ru = 'Недостаточно прав для синхронизации данных.'"); + + ИначеЕсли ОбновлениеИнформационнойБазы.НеобходимоОбновлениеИнформационнойБазы() + И НЕ ОбменДаннымиВызовСервера.РежимЗагрузкиСообщенияОбменаДаннымиПередЗапуском("ЗагрузкаРазрешена") Тогда + + ВызватьИсключение НСтр("ru = 'Информационная база находится в состоянии обновления.'"); + + КонецЕсли; + +КонецПроцедуры + +// Для внутреннего использования. +Процедура ПроверитьИспользованиеОбменаДанными() Экспорт + + Если НЕ ПолучитьФункциональнуюОпцию("ИспользоватьСинхронизациюДанных") Тогда + + ТекстСообщения = НСтр("ru = 'Синхронизация данных запрещена администратором.'"); + ЗаписьЖурналаРегистрации(СобытиеЖурналаРегистрацииОбменДанными(), УровеньЖурналаРегистрации.Ошибка,,,ТекстСообщения); + ВызватьИсключение ТекстСообщения; + + КонецЕсли; + +КонецПроцедуры + +// Для внутреннего использования. +// +Функция ПараметрыОбмена() Экспорт + + СтруктураПараметров = Новый Структура; + + СтруктураПараметров.Вставить("ВидТранспортаСообщенийОбмена", Неопределено); + СтруктураПараметров.Вставить("ВыполнятьЗагрузку", Истина); + СтруктураПараметров.Вставить("ВыполнятьВыгрузку", Истина); + + СтруктураПараметров.Вставить("ТолькоПараметры", Ложь); + + СтруктураПараметров.Вставить("ДлительнаяОперацияРазрешена", Ложь); + СтруктураПараметров.Вставить("ДлительнаяОперация", Ложь); + СтруктураПараметров.Вставить("ИдентификаторОперации", ""); + СтруктураПараметров.Вставить("ИдентификаторФайла", ""); + СтруктураПараметров.Вставить("ПараметрыАутентификации", Неопределено); + + Возврат СтруктураПараметров; + +КонецФункции + +// Точка входа для выполнения итерации обмена данными - загрузки и выгрузки данных для узла плана обмена. +// +// Параметры: +// УзелИнформационнойБазы - ПланОбменаСсылка - узел плана обмена, для которого выполняется итерация обмена данными. +// ПараметрыОбменаДляУзла - Структура - содержит следующие параметры: +// * ВыполнятьЗагрузку - Булево - флаг необходимости выполнять загрузку данных. +// Необязательный, значение по умолчанию Истина. +// * ВыполнятьВыгрузку - Булево - флаг необходимости выполнять выгрузку данных. +// Необязательный, значение по умолчанию Истина. +// * ВидТранспортаСообщенийОбмена - ПеречислениеСсылка.ВидыТранспортаСообщенийОбмена - вид транспорта, +// который будет использоваться в процессе обмена данными. +// Если в РС значение не задано, то значение по умолчанию - Перечисления.ВидыТранспортаСообщенийОбмена.FILE. +// Необязательный, значение по умолчанию Неопределено. +// * ДлительнаяОперация - Булево - содержит сведения о том, является ли операция длительной. +// Необязательный, значение по умолчанию Ложь. +// * ИдентификаторОперации - Строка - содержит идентификатор длительной операции в виде строки. +// Необязательный, значение по умолчанию пустая строка. +// * ИдентификаторФайла - Строка - идентификатор файла сообщения в сервисе. +// Необязательный, значение по умолчанию пустая строка. +// * ДлительнаяОперацияРазрешена - Булево - содержит признак того, что длительная операция разрешена. +// Необязательный, значение по умолчанию Ложь. +// * ПараметрыАутентификации - Структура - содержит параметры аутентификации для обмена через Web-сервис. +// Необязательный, значение по умолчанию Неопределено. +// * ТолькоПараметры - Булево - содержит признак выборочной загрузки данных при обмене РИБ. +// Необязательный, значение по умолчанию Ложь. +// Отказ - Булево - флаг отказа; поднимается в случае возникновения ошибки при выполнении обмена. +// +Процедура ВыполнитьОбменДаннымиДляУзлаИнформационнойБазы(УзелИнформационнойБазы, ПараметрыОбмена, Отказ) Экспорт + + ДействиеЗагрузка = Перечисления.ДействияПриОбмене.ЗагрузкаДанных; + ДействиеВыгрузка = Перечисления.ДействияПриОбмене.ВыгрузкаДанных; + + ПроверитьВозможностьВыполненияОбменов(); + + ПроверитьИспользованиеОбменаДанными(); + + // Обмен через внешнее соединение. + Если ПараметрыОбмена.ВидТранспортаСообщенийОбмена = Перечисления.ВидыТранспортаСообщенийОбмена.COM Тогда + + ПроверитьВозможностьВнешнегоСоединения(); + + Если ПараметрыОбмена.ВыполнятьЗагрузку Тогда + ВыполнитьДействиеОбменаДляУзлаИнформационнойБазыПоВнешнемуСоединению(Отказ, УзелИнформационнойБазы, + ДействиеЗагрузка, Неопределено); + КонецЕсли; + + Если ПараметрыОбмена.ВыполнятьВыгрузку Тогда + ВыполнитьДействиеОбменаДляУзлаИнформационнойБазыПоВнешнемуСоединению(Отказ, УзелИнформационнойБазы, + ДействиеВыгрузка, Неопределено); + КонецЕсли; + + ИначеЕсли ПараметрыОбмена.ВидТранспортаСообщенийОбмена = Перечисления.ВидыТранспортаСообщенийОбмена.WS Тогда // Обмен через Web-сервис + + Если ПараметрыОбмена.ВыполнятьЗагрузку Тогда + ВыполнитьДействиеОбменаДляУзлаИнформационнойБазыЧерезWebСервис(УзелИнформационнойБазы, + ДействиеЗагрузка, ПараметрыОбмена, Отказ); + КонецЕсли; + + Если ПараметрыОбмена.ВыполнятьВыгрузку Тогда + ВыполнитьДействиеОбменаДляУзлаИнформационнойБазыЧерезWebСервис(УзелИнформационнойБазы, + ДействиеВыгрузка, ПараметрыОбмена, Отказ); + КонецЕсли; + + Иначе // Обмен через обычные каналы связи. + + ТолькоПараметры = ПараметрыОбмена.ТолькоПараметры; + ВидТранспортаСообщенийОбмена = ПараметрыОбмена.ВидТранспортаСообщенийОбмена; + + Если ПараметрыОбмена.ВыполнятьЗагрузку Тогда + ВыполнитьДействиеОбменаДляУзлаИнформационнойБазы(Отказ, УзелИнформационнойБазы, + ДействиеЗагрузка, ВидТранспортаСообщенийОбмена, ТолькоПараметры); + КонецЕсли; + + Если ПараметрыОбмена.ВыполнятьВыгрузку Тогда + ВыполнитьДействиеОбменаДляУзлаИнформационнойБазы(Отказ, УзелИнформационнойБазы, + ДействиеВыгрузка, ВидТранспортаСообщенийОбмена, ТолькоПараметры); + КонецЕсли; + + КонецЕсли; + +КонецПроцедуры + +// Для внутреннего использования. +// +Функция ПолучитьWSПроксиПоПараметрамПодключения( + СтруктураНастроек, + СтрокаСообщенияОбОшибке = "", + СообщениеПользователю = "", + ДелатьКонтрольныйВызов = Ложь) Экспорт + + Попытка + ОбменДаннымиКлиентСервер.ПроверитьНедопустимыеСимволыВИмениПользователяWSПрокси(СтруктураНастроек.WSИмяПользователя); + Исключение + СообщениеПользователю = КраткоеПредставлениеОшибки(ИнформацияОбОшибке()); + СтрокаСообщенияОбОшибке = ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); + ЗаписьЖурналаРегистрации(СобытиеЖурналаРегистрацииУстановкаПодключенияКWebСервису(), УровеньЖурналаРегистрации.Ошибка,,, СтрокаСообщенияОбОшибке); + Возврат Неопределено; + КонецПопытки; + + МестоположениеWSDL = "[URLВебСервиса]/ws/[ИмяСервиса]?wsdl"; + МестоположениеWSDL = СтрЗаменить(МестоположениеWSDL, "[URLВебСервиса]", СтруктураНастроек.WSURLВебСервиса); + МестоположениеWSDL = СтрЗаменить(МестоположениеWSDL, "[ИмяСервиса]", СтруктураНастроек.WSИмяСервиса); + + Попытка + WSПрокси = ОбщегоНазначения.WSПрокси( + МестоположениеWSDL, + СтруктураНастроек.WSURLПространстваИменСервиса, + СтруктураНастроек.WSИмяСервиса, + , + СтруктураНастроек.WSИмяПользователя, + СтруктураНастроек.WSПароль, + СтруктураНастроек.WSТаймаут, + ДелатьКонтрольныйВызов); + Исключение + СообщениеПользователю = КраткоеПредставлениеОшибки(ИнформацияОбОшибке()); + СтрокаСообщенияОбОшибке = ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); + ЗаписьЖурналаРегистрации(СобытиеЖурналаРегистрацииУстановкаПодключенияКWebСервису(), УровеньЖурналаРегистрации.Ошибка,,, СтрокаСообщенияОбОшибке); + Возврат Неопределено; + КонецПопытки; + + Возврат WSПрокси; +КонецФункции + // Выполняет действия по удалению настройки синхронизации данных. // // Параметры: @@ -1403,18 +2072,16 @@ Если (ВРег(Лев(СтрокаПодключения, 6)) <> "FTP://" И ВРег(Лев(СтрокаПодключения, 7)) <> "FTPS://") - ИЛИ Найти(СтрокаПодключения, "@") <> 0 Тогда + ИЛИ СтрНайти(СтрокаПодключения, "@") <> 0 Тогда ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Строка подключения к FTP-ресурсу не соответствует формату: ""%1""'"), СтрокаПодключения - ); + НСтр("ru = 'Строка подключения к FTP-ресурсу не соответствует формату: ""%1""'"), СтрокаПодключения); КонецЕсли; - ПараметрыПодключения = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(СтрокаПодключения, "/"); + ПараметрыПодключения = СтрРазделить(СтрокаПодключения, "/"); Если ПараметрыПодключения.Количество() < 3 Тогда ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'В строке подключения к FTP-ресурсу не указано имя сервера: ""%1""'"), СтрокаПодключения - ); + НСтр("ru = 'В строке подключения к FTP-ресурсу не указано имя сервера: ""%1""'"), СтрокаПодключения); КонецЕсли; Результат.Сервер = ПараметрыПодключения[2]; @@ -1431,7 +2098,7 @@ КонецЕсли; - Результат.Путь = СтроковыеФункцииКлиентСервер.СтрокаИзМассиваПодстрок(ПараметрыПодключения, "/"); + Результат.Путь = СтрСоединить(ПараметрыПодключения, "/"); Результат.Путь = СтрЗаменить(Результат.Путь, "@", ""); Возврат Результат; @@ -1441,39 +2108,11 @@ // Функция НастройкиПроксиСервера(ЗащищенноеСоединение) + Прокси = Неопределено; Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ПолучениеФайловИзИнтернета") Тогда - - МодульПолучениеФайловИзИнтернета = ОбщегоНазначения.ОбщийМодуль("ПолучениеФайловИзИнтернета"); - МодульПолучениеФайловИзИнтернета.НастройкиПроксиНаСервере(); - - Иначе - - НастройкаПроксиСервера = Неопределено; - - КонецЕсли; - - Если НастройкаПроксиСервера <> Неопределено Тогда - ИспользоватьПрокси = НастройкаПроксиСервера.Получить("ИспользоватьПрокси"); - ИспользоватьСистемныеНастройки = НастройкаПроксиСервера.Получить("ИспользоватьСистемныеНастройки"); - Если ИспользоватьПрокси Тогда - Если ИспользоватьСистемныеНастройки Тогда - // Системные настройки прокси-сервера. - Прокси = Новый ИнтернетПрокси(Истина); - Иначе - // Ручные настройки прокси-сервера. - Прокси = Новый ИнтернетПрокси; - Протокол = ?(ЗащищенноеСоединение = Неопределено, "ftp", "ftps"); - Прокси.Установить(Протокол, НастройкаПроксиСервера["Сервер"], НастройкаПроксиСервера["Порт"]); - Прокси.Пользователь = НастройкаПроксиСервера["Пользователь"]; - Прокси.Пароль = НастройкаПроксиСервера["Пароль"]; - Прокси.НеИспользоватьПроксиДляЛокальныхАдресов = НастройкаПроксиСервера["НеИспользоватьПроксиДляЛокальныхАдресов"]; - КонецЕсли; - Иначе - // Не использовать прокси-сервер. - Прокси = Новый ИнтернетПрокси(Ложь); - КонецЕсли; - Иначе - Прокси = Неопределено; + МодульПолучениеФайловИзИнтернетаКлиентСервер = ОбщегоНазначения.ОбщийМодуль("ПолучениеФайловИзИнтернетаКлиентСервер"); + Протокол = ?(ЗащищенноеСоединение = Неопределено, "ftp", "ftps"); + Прокси = МодульПолучениеФайловИзИнтернетаКлиентСервер.ПолучитьПрокси(Протокол); КонецЕсли; Возврат Прокси; @@ -1491,6 +2130,33 @@ КонецФункции +// Устанавливает значение параметра "Загрузка" для свойства объекта "ОбменДанными". +// +// Параметры: +// Объект - Любой объект - объект, для которого устанавливается свойство. +// Значение - Булево - значение устанавливаемого свойства "Загрузка". +// ОтправкаНазад - Булево - признак необходимости регистрации данных к обратной отправке. +// УзелОбмена - ПланОбменаСсылка - признак необходимости регистрации данных к обратной отправке. +// +Процедура УстановитьОбменДаннымиЗагрузка(Объект, Значение = Истина, ОтправкаНазад = Ложь, УзелОбмена = Неопределено) Экспорт + + Объект.ОбменДанными.Загрузка = Значение; + + Если Не ОтправкаНазад + И УзелОбмена <> Неопределено + И НЕ УзелОбмена.Пустая() Тогда + + ТипЗначенияОбъекта = ТипЗнч(Объект); + ОбъектМетаданных = Метаданные.НайтиПоТипу(ТипЗначенияОбъекта); + + Если Метаданные.ПланыОбмена[УзелОбмена.Метаданные().Имя].Состав.Содержит(ОбъектМетаданных) Тогда + Объект.ОбменДанными.Отправитель = УзелОбмена; + КонецЕсли; + + КонецЕсли; + +КонецПроцедуры + #КонецОбласти #Область СлужебныеПроцедурыИФункции @@ -1528,7 +2194,7 @@ // Добавляет параметры работы клиентской логики для подсистемы обмена данными. // -Процедура ПриДобавленииПараметровРаботыКлиентскойЛогикиСтандартныхПодсистемПриЗапуске(Параметры) Экспорт +Процедура ПриДобавленииПараметровРаботыКлиентаПриЗапуске(Параметры) Экспорт УстановитьПривилегированныйРежим(Истина); @@ -1580,9 +2246,11 @@ // Параметры: // Параметры - Структура - структура параметров. // -Процедура ПриДобавленииПараметровРаботыКлиентскойЛогикиСтандартныхПодсистем(Параметры) Экспорт +Процедура ПриДобавленииПараметровРаботыКлиента(Параметры) Экспорт - ДобавитьПараметрыРаботыКлиента(Параметры); + УстановитьПривилегированныйРежим(Истина); + + Параметры.Вставить("ГлавныйУзел", ГлавныйУзел()); КонецПроцедуры @@ -1660,7 +2328,7 @@ // Процедура ПриВключенииРазделенияПоОбластямДанных() Экспорт - Если ПолучитьФункциональнуюОпцию("ИспользоватьСинхронизациюДанных") = Ложь Тогда + Если НЕ ПолучитьФункциональнуюОпцию("ИспользоватьСинхронизациюДанных") Тогда Константы.ИспользоватьСинхронизациюДанных.Установить(Истина); КонецЕсли; @@ -1680,8 +2348,7 @@ |для мониторинга и синхронизации данных с другими программами.'"); // Основные возможности профиля. - РолиПрофиля = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок( - РолиПрофиляДоступаСинхронизацияДанныхСДругимиПрограммами()); + РолиПрофиля = СтрРазделить(РолиПрофиляДоступаСинхронизацияДанныхСДругимиПрограммами(), ","); Для Каждого Роль Из РолиПрофиля Цикл ОписаниеПрофиля.Роли.Добавить(СокрЛП(Роль)); КонецЦикла; @@ -1710,7 +2377,7 @@ // Процедура ПриЗаполненииРазрешенийНаДоступКВнешнимРесурсам(ЗапросыРазрешений) Экспорт - Если ПолучитьФункциональнуюОпцию("ИспользоватьСинхронизациюДанных") = Ложь Тогда + Если НЕ ПолучитьФункциональнуюОпцию("ИспользоватьСинхронизациюДанных") Тогда Возврат; КонецЕсли; @@ -1768,23 +2435,7 @@ Обработчики.Вставить("ПаролиСинхронизацииДанных", "ОбменДаннымиВызовСервера.УстановкаПараметровСеанса"); Обработчики.Вставить("ПриоритетныеДанныеОбмена", "ОбменДаннымиВызовСервера.УстановкаПараметровСеанса"); Обработчики.Вставить("ОшибкаРасхожденияВерсийПриПолученииДанных", "ОбменДаннымиВызовСервера.УстановкаПараметровСеанса"); - -КонецПроцедуры - -// Определить объекты метаданных, в модулях менеджеров которых ограничивается возможность -// редактирования реквизитов при групповом изменении. -// -// Параметры: -// Объекты - Соответствие - в качестве ключа указать полное имя объекта метаданных, -// подключенного к подсистеме "Групповое изменение объектов". -// Дополнительно в значении могут быть перечислены имена экспортных функций: -// "РеквизитыНеРедактируемыеВГрупповойОбработке", -// "РеквизитыРедактируемыеВГрупповойОбработке". -// Каждое имя должно начинаться с новой строки. -// Если указана пустая строка, значит в модуле менеджера определены обе функции. -// -Процедура ПриОпределенииОбъектовСРедактируемымиРеквизитами(Объекты) Экспорт - Объекты.Вставить(Метаданные.Справочники.СценарииОбменовДанными.ПолноеИмя(), "РеквизитыНеРедактируемыеВГрупповойОбработке"); + Обработчики.Вставить("ПараметрыСеансаСинхронизацииДанных", "ОбменДаннымиВызовСервера.УстановкаПараметровСеанса"); КонецПроцедуры //////////////////////////////////////////////////////////////////////////////// @@ -1857,6 +2508,13 @@ // Процедура ПриВключенииСинхронизацииДанных(Отказ) Экспорт + Задание = РегламентныеЗадания.НайтиПредопределенное(Метаданные.РегламентныеЗадания.УдалениеНеактуальнойИнформацииСинхронизации); + + Если Не Задание.Использование Тогда + Задание.Использование = Истина; + Задание.Записать(); + КонецЕсли; + КонецПроцедуры // Обработчик снятия константы ИспользоватьСинхронизациюДанных. @@ -1872,6 +2530,13 @@ МодульОбменДаннымиВМоделиСервиса.ПриОтключенииСинхронизацииДанных(Отказ); КонецЕсли; + Задание = РегламентныеЗадания.НайтиПредопределенное(Метаданные.РегламентныеЗадания.УдалениеНеактуальнойИнформацииСинхронизации); + + Если Задание.Использование Тогда + Задание.Использование = Ложь; + Задание.Записать(); + КонецЕсли; + КонецПроцедуры // Обработчик механизма регистрации объектов "После определения получателей". @@ -1906,135 +2571,22 @@ КонецПроцедуры Процедура ПриПродолженииНастройкиПодчиненногоУзлаРИБ() Экспорт - УстановитьПривилегированныйРежим(Истина); - ПользователиСлужебный.ОчиститьИдентификаторыНесуществующихПользователейИБ(); - Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаСПочтовымиСообщениями") Тогда - МодульРаботаСПочтовымиСообщениямиСлужебный = ОбщегоНазначения.ОбщийМодуль("РаботаСПочтовымиСообщениямиСлужебный"); - МодульРаботаСПочтовымиСообщениямиСлужебный.ОтключитьИспользованиеУчетныхЗаписей(); - КонецЕсли; + + ОбработчикиСобытия = ОбщегоНазначения.ОбработчикиСлужебногоСобытия( + "СтандартныеПодсистемы.ОбменДанными\ПриНастройкеПодчиненногоУзлаРИБ"); + + Для каждого Обработчик Из ОбработчикиСобытия Цикл + Обработчик.Модуль.ПриНастройкеПодчиненногоУзлаРИБ(); + КонецЦикла; + + ОбменДаннымиПереопределяемый.ПриНастройкеПодчиненногоУзлаРИБ(); + КонецПроцедуры //////////////////////////////////////////////////////////////////////////////// // Выполнение обмена данными -// Точка входа для выполнения итерации обмена данными - загрузки и выгрузки данных для узла плана обмена. -// -// Параметры: -// Отказ - Булево - флаг отказа; поднимается в случае возникновения ошибки при выполнении обмена. -// УзелИнформационнойБазы - ПланОбменаСсылка - узел плана обмена, для которого выполняется итерация обмена данными. -// ВыполнятьЗагрузку - Булево (необязательный) - флаг необходимости выполнять загрузку данных. Значение по -// умолчанию - Истина. -// ВыполнятьВыгрузку - Булево (необязательный) - флаг необходимости выполнять выгрузку данных. Значение по -// умолчанию - Истина. -// ВидТранспортаСообщенийОбмена (необязательный) - ПеречислениеСсылка.ВидыТранспортаСообщенийОбмена - вид транспорта, -// который будет использоваться в процессе обмена данными. -// Значение по умолчанию - значение из -// РС.НастройкиТранспортаОбмена.Ресурс.ВидТранспортаСообщенийОбменаПоУмолчанию; если в РС значение не задано, то -// значение по умолчанию - Перечисления.ВидыТранспортаСообщенийОбмена.FILE. -// -Процедура ВыполнитьОбменДаннымиДляУзлаИнформационнойБазы(Отказ, - Знач УзелИнформационнойБазы, - Знач ВыполнятьЗагрузку = Истина, - Знач ВыполнятьВыгрузку = Истина, - Знач ВидТранспортаСообщенийОбмена = Неопределено, - ДлительнаяОперация = Ложь, - ИдентификаторОперации = "", - ИдентификаторФайла = "", - Знач ДлительнаяОперацияРазрешена = Ложь, - Знач ПараметрыАутентификации = Неопределено, - Знач ТолькоПараметры = Ложь - ) Экспорт - - ПроверитьВозможностьВыполненияОбменов(); - - ПроверитьИспользованиеОбменаДанными(); - - // Обмен через внешнее соединение. - Если ВидТранспортаСообщенийОбмена = Перечисления.ВидыТранспортаСообщенийОбмена.COM Тогда - - ПроверитьВозможностьВнешнегоСоединения(); - - Если ВыполнятьЗагрузку Тогда - - // ЗАГРУЗКА ДАННЫХ ЧЕРЕЗ ВНЕШНЕЕ СОЕДИНЕНИЕ - ВыполнитьДействиеОбменаДляУзлаИнформационнойБазыПоВнешнемуСоединению(Отказ, - УзелИнформационнойБазы, - Перечисления.ДействияПриОбмене.ЗагрузкаДанных, - Неопределено); - - КонецЕсли; - - Если ВыполнятьВыгрузку Тогда - - // ВЫГРУЗКА ДАННЫХ ЧЕРЕЗ ВНЕШНЕЕ СОЕДИНЕНИЕ - ВыполнитьДействиеОбменаДляУзлаИнформационнойБазыПоВнешнемуСоединению(Отказ, - УзелИнформационнойБазы, - Перечисления.ДействияПриОбмене.ВыгрузкаДанных, - Неопределено); - - КонецЕсли; - - ИначеЕсли ВидТранспортаСообщенийОбмена = Перечисления.ВидыТранспортаСообщенийОбмена.WS Тогда // Обмен через Web-сервис - - Если ВыполнятьЗагрузку Тогда - - // ЗАГРУЗКА ДАННЫХ ЧЕРЕЗ WEB-СЕРВИС - ВыполнитьДействиеОбменаДляУзлаИнформационнойБазыЧерезWebСервис(Отказ, - УзелИнформационнойБазы, - Перечисления.ДействияПриОбмене.ЗагрузкаДанных, - ДлительнаяОперация, - ИдентификаторОперации, - ИдентификаторФайла, - ДлительнаяОперацияРазрешена, - ПараметрыАутентификации, - ТолькоПараметры); - - КонецЕсли; - - Если ВыполнятьВыгрузку Тогда - - // ВЫГРУЗКА ДАННЫХ ЧЕРЕЗ WEB-СЕРВИС - ВыполнитьДействиеОбменаДляУзлаИнформационнойБазыЧерезWebСервис(Отказ, - УзелИнформационнойБазы, - Перечисления.ДействияПриОбмене.ВыгрузкаДанных, - ДлительнаяОперация, - ИдентификаторОперации, - ИдентификаторФайла, - ДлительнаяОперацияРазрешена, - ПараметрыАутентификации, - ТолькоПараметры); - - КонецЕсли; - - Иначе // Обмен через обычные каналы связи. - - Если ВыполнятьЗагрузку Тогда - - // ЗАГРУЗКА ДАННЫХ - ВыполнитьДействиеОбменаДляУзлаИнформационнойБазы(Отказ, - УзелИнформационнойБазы, - Перечисления.ДействияПриОбмене.ЗагрузкаДанных, - ВидТранспортаСообщенийОбмена, - ТолькоПараметры); - - КонецЕсли; - - Если ВыполнятьВыгрузку Тогда - - // ВЫГРУЗКА ДАННЫХ - ВыполнитьДействиеОбменаДляУзлаИнформационнойБазы(Отказ, - УзелИнформационнойБазы, - Перечисления.ДействияПриОбмене.ВыгрузкаДанных, - ВидТранспортаСообщенийОбмена, - ТолькоПараметры); - - КонецЕсли; - - КонецЕсли; - -КонецПроцедуры - // Выполняет процесс обмена данными отдельно для каждой строки настройки обмена. // Процесс обмена данными состоит из двух стадий: // - инициализация обмена - подготовка подсистемы обмена данными к процессу обмена @@ -2112,7 +2664,9 @@ ИначеЕсли Выборка.ОбменЧерезВебСервис Тогда - ВыполнитьДействиеОбменаДляУзлаИнформационнойБазыЧерезWebСервис(Отказ, Выборка.УзелИнформационнойБазы, Выборка.ВыполняемоеДействие); + ПараметрыОбмена = ПараметрыОбмена(); + ВыполнитьДействиеОбменаДляУзлаИнформационнойБазыЧерезWebСервис(Выборка.УзелИнформационнойБазы, + Выборка.ВыполняемоеДействие, ПараметрыОбмена, Отказ); Иначе @@ -2392,8 +2946,7 @@ ИдентификаторФайла, ДлительнаяОперация, ИдентификаторОперации, - ПараметрыАутентификации = Неопределено - ) Экспорт + ПараметрыАутентификации = Неопределено) Экспорт ПроверитьВозможностьВыполненияОбменов(); @@ -2528,8 +3081,7 @@ Отказ, УзелИнформационнойБазы, ИдентификаторФайла, - Знач ПараметрыАутентификации = Неопределено - ) Экспорт + Знач ПараметрыАутентификации = Неопределено) Экспорт // Возвращаемое значение функции. Результат = Новый Структура; @@ -2608,8 +3160,7 @@ Знач ИдентификаторФайла, Знач ДатаНачалаОперации, Знач ПараметрыАутентификации = Неопределено, - ВыдаватьОшибку = Ложь - ) Экспорт + ВыдаватьОшибку = Ложь) Экспорт ПроверитьВозможностьВыполненияОбменов(); @@ -2633,11 +3184,15 @@ КонецПопытки; // Загрузка файла сообщения обмена в эту базу. + ПараметрыОбменаДанными = ПараметрыОбменаДаннымиЧерезФайлИлиСтроку(); + + ПараметрыОбменаДанными.УзелИнформационнойБазы = УзелИнформационнойБазы; + ПараметрыОбменаДанными.ПолноеИмяФайлаСообщенияОбмена = ФайлСообщенияОбмена; + ПараметрыОбменаДанными.ДействиеПриОбмене = Перечисления.ДействияПриОбмене.ЗагрузкаДанных; + ПараметрыОбменаДанными.ДатаНачалаОперации = ДатаНачалаОперации; + Попытка - ВыполнитьОбменДаннымиДляУзлаИнформационнойБазыЧерезФайлИлиСтроку( - УзелИнформационнойБазы, - ФайлСообщенияОбмена, - Перечисления.ДействияПриОбмене.ЗагрузкаДанных,,,, ДатаНачалаОперации); + ВыполнитьОбменДаннымиДляУзлаИнформационнойБазыЧерезФайлИлиСтроку(ПараметрыОбменаДанными); Исключение ЗафиксироватьЗавершениеОбменаСОшибкой(УзелИнформационнойБазы, Перечисления.ДействияПриОбмене.ЗагрузкаДанных, @@ -2653,6 +3208,8 @@ Попытка УдалитьФайлы(ФайлСообщенияОбмена); Исключение + ЗаписьЖурналаРегистрации(СобытиеЖурналаРегистрацииОбменДанными(), + УровеньЖурналаРегистрации.Ошибка,,, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); КонецПопытки; КонецПроцедуры @@ -2666,7 +3223,11 @@ // Процедура УдалитьНеактуальныеСообщенияОбмена() Экспорт - ОбщегоНазначения.ПриНачалеВыполненияРегламентногоЗадания(); + ОбщегоНазначения.ПриНачалеВыполненияРегламентногоЗадания(Метаданные.РегламентныеЗадания.УдалениеНеактуальнойИнформацииСинхронизации); + + Если НЕ ПолучитьФункциональнуюОпцию("ИспользоватьСинхронизациюДанных") Тогда + Возврат; + КонецЕсли; ПроверитьВозможностьАдминистрированияОбменов(); @@ -2729,12 +3290,14 @@ ПолноеИмяФайлаСообщенияОбмена = ПолучитьИмяВременногоФайла("xml"); - ВыполнитьОбменДаннымиДляУзлаИнформационнойБазыЧерезФайлИлиСтроку( - Неопределено, - ПолноеИмяФайлаСообщенияОбмена, - Перечисления.ДействияПриОбмене.ВыгрузкаДанных, - ИмяПланаОбмена, - КодУзлаИнформационнойБазы); + ПараметрыОбменаДанными = ПараметрыОбменаДаннымиЧерезФайлИлиСтроку(); + + ПараметрыОбменаДанными.ПолноеИмяФайлаСообщенияОбмена = ПолноеИмяФайлаСообщенияОбмена; + ПараметрыОбменаДанными.ДействиеПриОбмене = Перечисления.ДействияПриОбмене.ВыгрузкаДанных; + ПараметрыОбменаДанными.ИмяПланаОбмена = ИмяПланаОбмена; + ПараметрыОбменаДанными.КодУзлаИнформационнойБазы = КодУзлаИнформационнойБазы; + + ВыполнитьОбменДаннымиДляУзлаИнформационнойБазыЧерезФайлИлиСтроку(ПараметрыОбменаДанными); Адрес = ПоместитьВоВременноеХранилище(Новый ДвоичныеДанные(ПолноеИмяФайлаСообщенияОбмена)); @@ -2754,12 +3317,14 @@ КаталогВременногоХранилищаФайлов(), УникальноеИмяФайлаСообщенияОбмена()); - ВыполнитьОбменДаннымиДляУзлаИнформационнойБазыЧерезФайлИлиСтроку( - Неопределено, - ИмяФайлаСообщения, - Перечисления.ДействияПриОбмене.ВыгрузкаДанных, - ИмяПланаОбмена, - КодУзлаИнформационнойБазы); + ПараметрыОбменаДанными = ПараметрыОбменаДаннымиЧерезФайлИлиСтроку(); + + ПараметрыОбменаДанными.ПолноеИмяФайлаСообщенияОбмена = ИмяФайлаСообщения; + ПараметрыОбменаДанными.ДействиеПриОбмене = Перечисления.ДействияПриОбмене.ВыгрузкаДанных; + ПараметрыОбменаДанными.ИмяПланаОбмена = ИмяПланаОбмена; + ПараметрыОбменаДанными.КодУзлаИнформационнойБазы = КодУзлаИнформационнойБазы; + + ВыполнитьОбменДаннымиДляУзлаИнформационнойБазыЧерезФайлИлиСтроку(ПараметрыОбменаДанными); ПоместитьФайлВХранилище(ИмяФайлаСообщения, ИдентификаторФайла); @@ -2771,12 +3336,14 @@ Знач КодУзлаИнформационнойБазы, Знач ПолноеИмяФайлаСообщенияОбмена) Экспорт - ВыполнитьОбменДаннымиДляУзлаИнформационнойБазыЧерезФайлИлиСтроку( - Неопределено, - ПолноеИмяФайлаСообщенияОбмена, - Перечисления.ДействияПриОбмене.ВыгрузкаДанных, - ИмяПланаОбмена, - КодУзлаИнформационнойБазы); + ПараметрыОбменаДанными = ПараметрыОбменаДаннымиЧерезФайлИлиСтроку(); + + ПараметрыОбменаДанными.ПолноеИмяФайлаСообщенияОбмена = ПолноеИмяФайлаСообщенияОбмена; + ПараметрыОбменаДанными.ДействиеПриОбмене = Перечисления.ДействияПриОбмене.ВыгрузкаДанных; + ПараметрыОбменаДанными.ИмяПланаОбмена = ИмяПланаОбмена; + ПараметрыОбменаДанными.КодУзлаИнформационнойБазы = КодУзлаИнформационнойБазы; + + ВыполнитьОбменДаннымиДляУзлаИнформационнойБазыЧерезФайлИлиСтроку(ПараметрыОбменаДанными); КонецПроцедуры @@ -2784,12 +3351,16 @@ // Процедура ВыполнитьВыгрузкуДляУзлаИнформационнойБазыЧерезСтроку(Знач ИмяПланаОбмена, Знач КодУзлаИнформационнойБазы, СообщениеОбмена) Экспорт - ВыполнитьОбменДаннымиДляУзлаИнформационнойБазыЧерезФайлИлиСтроку(Неопределено, - "", - Перечисления.ДействияПриОбмене.ВыгрузкаДанных, - ИмяПланаОбмена, - КодУзлаИнформационнойБазы, - СообщениеОбмена); + ПараметрыОбменаДанными = ПараметрыОбменаДаннымиЧерезФайлИлиСтроку(); + + ПараметрыОбменаДанными.ДействиеПриОбмене = Перечисления.ДействияПриОбмене.ВыгрузкаДанных; + ПараметрыОбменаДанными.ИмяПланаОбмена = ИмяПланаОбмена; + ПараметрыОбменаДанными.КодУзлаИнформационнойБазы = КодУзлаИнформационнойБазы; + ПараметрыОбменаДанными.СообщениеОбмена = СообщениеОбмена; + + ВыполнитьОбменДаннымиДляУзлаИнформационнойБазыЧерезФайлИлиСтроку(ПараметрыОбменаДанными); + + СообщениеОбмена = ПараметрыОбменаДанными.СообщениеОбмена; КонецПроцедуры @@ -2797,12 +3368,16 @@ // Процедура ВыполнитьЗагрузкуДляУзлаИнформационнойБазыЧерезСтроку(Знач ИмяПланаОбмена, Знач КодУзлаИнформационнойБазы, СообщениеОбмена) Экспорт - ВыполнитьОбменДаннымиДляУзлаИнформационнойБазыЧерезФайлИлиСтроку(Неопределено, - "", - Перечисления.ДействияПриОбмене.ЗагрузкаДанных, - ИмяПланаОбмена, - КодУзлаИнформационнойБазы, - СообщениеОбмена); + ПараметрыОбменаДанными = ПараметрыОбменаДаннымиЧерезФайлИлиСтроку(); + + ПараметрыОбменаДанными.ДействиеПриОбмене = Перечисления.ДействияПриОбмене.ЗагрузкаДанных; + ПараметрыОбменаДанными.ИмяПланаОбмена = ИмяПланаОбмена; + ПараметрыОбменаДанными.КодУзлаИнформационнойБазы = КодУзлаИнформационнойБазы; + ПараметрыОбменаДанными.СообщениеОбмена = СообщениеОбмена; + + ВыполнитьОбменДаннымиДляУзлаИнформационнойБазыЧерезФайлИлиСтроку(ПараметрыОбменаДанными); + + СообщениеОбмена = ПараметрыОбменаДанными.СообщениеОбмена; КонецПроцедуры @@ -2816,13 +3391,15 @@ ИмяВременногоФайла = ПолучитьФайлИзХранилища(ИдентификаторФайла); + ПараметрыОбменаДанными = ПараметрыОбменаДаннымиЧерезФайлИлиСтроку(); + + ПараметрыОбменаДанными.ПолноеИмяФайлаСообщенияОбмена = ИмяВременногоФайла; + ПараметрыОбменаДанными.ДействиеПриОбмене = Перечисления.ДействияПриОбмене.ЗагрузкаДанных; + ПараметрыОбменаДанными.ИмяПланаОбмена = ИмяПланаОбмена; + ПараметрыОбменаДанными.КодУзлаИнформационнойБазы = КодУзлаИнформационнойБазы; + Попытка - ВыполнитьОбменДаннымиДляУзлаИнформационнойБазыЧерезФайлИлиСтроку( - Неопределено, - ИмяВременногоФайла, - Перечисления.ДействияПриОбмене.ЗагрузкаДанных, - ИмяПланаОбмена, - КодУзлаИнформационнойБазы); + ВыполнитьОбменДаннымиДляУзлаИнформационнойБазыЧерезФайлИлиСтроку(ПараметрыОбменаДанными); Исключение ПредставлениеОшибки = ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); УдалитьФайлы(ИмяВременногоФайла); @@ -2834,14 +3411,25 @@ // Для внутреннего использования. // -Процедура ВыполнитьОбменДаннымиДляУзлаИнформационнойБазыЧерезФайлИлиСтроку(УзелИнформационнойБазы = Неопределено, - ПолноеИмяФайлаСообщенияОбмена = "", - ДействиеПриОбмене, - ИмяПланаОбмена = "", - КодУзлаИнформационнойБазы = "", - СообщениеОбмена = "", - ДатаНачалаОперации = Неопределено - ) Экспорт +Функция ПараметрыОбменаДаннымиЧерезФайлИлиСтроку() Экспорт + + СтруктураПараметров = Новый Структура; + + СтруктураПараметров.Вставить("УзелИнформационнойБазы"); + СтруктураПараметров.Вставить("ПолноеИмяФайлаСообщенияОбмена", ""); + СтруктураПараметров.Вставить("ДействиеПриОбмене"); + СтруктураПараметров.Вставить("ИмяПланаОбмена", ""); + СтруктураПараметров.Вставить("КодУзлаИнформационнойБазы", ""); + СтруктураПараметров.Вставить("СообщениеОбмена", ""); + СтруктураПараметров.Вставить("ДатаНачалаОперации", ""); + + Возврат СтруктураПараметров; + +КонецФункции + +// Для внутреннего использования. +// +Процедура ВыполнитьОбменДаннымиДляУзлаИнформационнойБазыЧерезФайлИлиСтроку(ПараметрыОбмена) Экспорт ПроверитьВозможностьВыполненияОбменов(); @@ -2849,11 +3437,27 @@ УстановитьПривилегированныйРежим(Истина); - Если УзелИнформационнойБазы = Неопределено Тогда + Если ПараметрыОбмена.УзелИнформационнойБазы = Неопределено Тогда - УзелИнформационнойБазы = ПланыОбмена[ИмяПланаОбмена].НайтиПоКоду(КодУзлаИнформационнойБазы); + ИмяПланаОбмена = ПараметрыОбмена.ИмяПланаОбмена; + КодУзлаИнформационнойБазы = ПараметрыОбмена.КодУзлаИнформационнойБазы; - Если УзелИнформационнойБазы.Пустая() Тогда + ПараметрыОбмена.УзелИнформационнойБазы = ПланыОбмена[ИмяПланаОбмена].НайтиПоКоду(КодУзлаИнформационнойБазы); + + Если ПараметрыОбмена.УзелИнформационнойБазы.Пустая() + И ОбменДаннымиПовтИсп.ЭтоПланОбменаXDTO(ИмяПланаОбмена) Тогда + ОшибкаПерехода = Ложь; + НастройкаСинхронизацииЧерезУФ = ПланыОбмена[ИмяПланаОбмена].ПереходНаСинхронизациюЧерезУниверсальныйФорматИнтернет( + КодУзлаИнформационнойБазы, ОшибкаПерехода); + Если ЗначениеЗаполнено(НастройкаСинхронизацииЧерезУФ) Тогда + ПараметрыОбмена.УзелИнформационнойБазы = НастройкаСинхронизацииЧерезУФ; + ИначеЕсли ОшибкаПерехода Тогда + СтрокаСообщенияОбОшибке = НСтр("ru = 'Не удалось выполнить переход на синхронизацию данных через универсальный формат.'"); + ВызватьИсключение СтрокаСообщенияОбОшибке; + КонецЕсли; + КонецЕсли; + + Если ПараметрыОбмена.УзелИнформационнойБазы.Пустая() Тогда СтрокаСообщенияОбОшибке = НСтр("ru = 'Узел плана обмена %1 с кодом %2 не найден.'"); СтрокаСообщенияОбОшибке = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(СтрокаСообщенияОбОшибке, ИмяПланаОбмена, КодУзлаИнформационнойБазы); ВызватьИсключение СтрокаСообщенияОбОшибке; @@ -2862,7 +3466,8 @@ КонецЕсли; // ИНИЦИАЛИЗАЦИЯ ОБМЕНА ДАННЫМИ - СтруктураНастроекОбмена = ОбменДаннымиПовтИсп.ПолучитьСтруктуруНастроекОбменаДляУзлаИнформационнойБазы(УзелИнформационнойБазы, ДействиеПриОбмене, Неопределено, Ложь); + СтруктураНастроекОбмена = ОбменДаннымиПовтИсп.ПолучитьСтруктуруНастроекОбменаДляУзлаИнформационнойБазы( + ПараметрыОбмена.УзелИнформационнойБазы, ПараметрыОбмена.ДействиеПриОбмене, Неопределено, Ложь); Если СтруктураНастроекОбмена.Отказ Тогда СтрокаСообщенияОбОшибке = НСтр("ru = 'Ошибка при инициализации процесса обмена данными.'"); @@ -2871,7 +3476,7 @@ КонецЕсли; СтруктураНастроекОбмена.РезультатВыполненияОбмена = Неопределено; - СтруктураНастроекОбмена.ДатаНачала = ?(ДатаНачалаОперации = Неопределено, ТекущаяДатаСеанса(), ДатаНачалаОперации); + СтруктураНастроекОбмена.ДатаНачала = ?(ПараметрыОбмена.ДатаНачалаОперации = Неопределено, ТекущаяДатаСеанса(), ПараметрыОбмена.ДатаНачалаОперации); СтрокаСообщения = НСтр("ru = 'Начало процесса обмена данными для узла %1'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()); СтрокаСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(СтрокаСообщения, СтруктураНастроекОбмена.УзелИнформационнойБазыНаименование); @@ -2880,24 +3485,24 @@ Если СтруктураНастроекОбмена.ПроизводитьЗагрузкуДанных Тогда СозданВременныйФайл = Ложь; - Если ПолноеИмяФайлаСообщенияОбмена = "" - И СообщениеОбмена <> "" Тогда + Если ПараметрыОбмена.ПолноеИмяФайлаСообщенияОбмена = "" + И ПараметрыОбмена.СообщениеОбмена <> "" Тогда - ПолноеИмяФайлаСообщенияОбмена = ПолучитьИмяВременногоФайла(".xml"); + ПараметрыОбмена.ПолноеИмяФайлаСообщенияОбмена = ПолучитьИмяВременногоФайла(".xml"); ТекстовыйФайл = Новый ТекстовыйДокумент; - ТекстовыйФайл.УстановитьТекст(СообщениеОбмена); - ТекстовыйФайл.Записать(ПолноеИмяФайлаСообщенияОбмена); + ТекстовыйФайл.УстановитьТекст(ПараметрыОбмена.СообщениеОбмена); + ТекстовыйФайл.Записать(ПараметрыОбмена.ПолноеИмяФайлаСообщенияОбмена); СозданВременныйФайл = Истина; КонецЕсли; - ПрочитатьСообщениеСИзменениямиДляУзла(СтруктураНастроекОбмена, ПолноеИмяФайлаСообщенияОбмена, СообщениеОбмена); + ПрочитатьСообщениеСИзменениямиДляУзла(СтруктураНастроекОбмена, ПараметрыОбмена.ПолноеИмяФайлаСообщенияОбмена, ПараметрыОбмена.СообщениеОбмена); // {Обработчик: ПослеЧтенияСообщенияОбмена} Начало СтандартнаяОбработка = Истина; ПослеЧтенияСообщенияОбмена( СтруктураНастроекОбмена.УзелИнформационнойБазы, - ПолноеИмяФайлаСообщенияОбмена, + ПараметрыОбмена.ПолноеИмяФайлаСообщенияОбмена, РезультатВыполненияОбменаВыполнено(СтруктураНастроекОбмена.РезультатВыполненияОбмена), СтандартнаяОбработка); // {Обработчик: ПослеЧтенияСообщенияОбмена} Окончание @@ -2905,7 +3510,7 @@ Если СозданВременныйФайл Тогда Попытка - УдалитьФайлы(ПолноеИмяФайлаСообщенияОбмена); + УдалитьФайлы(ПараметрыОбмена.ПолноеИмяФайлаСообщенияОбмена); Исключение ЗаписьЖурналаРегистрации(СобытиеЖурналаРегистрацииОбменДанными(), УровеньЖурналаРегистрации.Ошибка,,, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); @@ -2914,7 +3519,7 @@ ИначеЕсли СтруктураНастроекОбмена.ПроизводитьВыгрузкуДанных Тогда - ЗаписатьСообщениеСИзменениямиДляУзла(СтруктураНастроекОбмена, ПолноеИмяФайлаСообщенияОбмена, СообщениеОбмена); + ЗаписатьСообщениеСИзменениямиДляУзла(СтруктураНастроекОбмена, ПараметрыОбмена.ПолноеИмяФайлаСообщенияОбмена, ПараметрыОбмена.СообщениеОбмена); КонецЕсли; @@ -2993,7 +3598,7 @@ УстановитьПривилегированныйРежим(Истина); - Возврат РегистрыСведений.ПравилаДляОбменаДанными.ПолучитьЗачитанныеПравилаКонвертацииОбъектов(ИмяПланаОбмена); + Возврат РегистрыСведений.ПравилаДляОбменаДанными.ПолучитьЗачитанныеПравилаКонвертацииОбъектов(ИмяПланаОбмена, ПолучатьПравилаКорреспондента); КонецФункции @@ -3004,8 +3609,7 @@ УзелИнформационнойБазы, ДействиеПриОбмене, ВидТранспортаСообщенийОбмена = Неопределено, - Знач ТолькоПараметры = Ложь - ) Экспорт + Знач ТолькоПараметры = Ложь) Экспорт УстановитьПривилегированныйРежим(Истина); @@ -3045,15 +3649,9 @@ // Для внутреннего использования. // -Процедура ВыполнитьДействиеОбменаДляУзлаИнформационнойБазыЧерезWebСервис(Отказ, - УзелИнформационнойБазы, - ДействиеПриОбмене, - ДлительнаяОперация = Ложь, - ИдентификаторОперации = "", - ИдентификаторФайла = "", - ДлительнаяОперацияРазрешена = Ложь, - ПараметрыАутентификации = Неопределено, - Знач ТолькоПараметры = Ложь) +Процедура ВыполнитьДействиеОбменаДляУзлаИнформационнойБазыЧерезWebСервис(УзелИнформационнойБазы, ДействиеПриОбмене, ПараметрыОбмена, Отказ) + + ТолькоПараметры = ПараметрыОбмена.ТолькоПараметры; УстановитьПривилегированныйРежим(Истина); @@ -3090,7 +3688,10 @@ СтрокаСообщенияОбОшибке = ""; // Получаем прокси веб-сервиса для узла информационной базы. - Прокси = ПолучитьWSПроксиДляУзлаИнформационнойБазы(УзелИнформационнойБазы, СтрокаСообщенияОбОшибке, ПараметрыАутентификации); + Прокси = ПолучитьWSПроксиДляУзлаИнформационнойБазы( + УзелИнформационнойБазы, + СтрокаСообщенияОбОшибке, + ПараметрыОбмена.ПараметрыАутентификации); Если Прокси = Неопределено Тогда @@ -3109,19 +3710,22 @@ Попытка Прокси.UploadData(СтруктураНастроекОбмена.ИмяПланаОбмена, - СтруктураНастроекОбмена.ТекущийУзелПланаОбменаКод, - ИдентификаторФайла, - ДлительнаяОперация, - ИдентификаторОперации, - ДлительнаяОперацияРазрешена); + СтруктураНастроекОбмена.ТекущийУзелПланаОбменаКод, + ПараметрыОбмена.ИдентификаторФайла, + ПараметрыОбмена.ДлительнаяОперация, + ПараметрыОбмена.ИдентификаторОперации, + ПараметрыОбмена.ДлительнаяОперацияРазрешена); - Если ДлительнаяОперация Тогда + Если ПараметрыОбмена.ДлительнаяОперация Тогда ЗаписьЖурналаРегистрацииОбменаДанными(НСтр("ru = 'Ожидание получения данных от базы-корреспондента...'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), СтруктураНастроекОбмена); Возврат; КонецЕсли; - ФайлСообщенияОбмена = ПолучитьФайлИзХранилищаВСервисе(Новый УникальныйИдентификатор(ИдентификаторФайла), УзелИнформационнойБазы,, ПараметрыАутентификации); + ФайлСообщенияОбмена = ПолучитьФайлИзХранилищаВСервисе( + Новый УникальныйИдентификатор(ПараметрыОбмена.ИдентификаторФайла), + УзелИнформационнойБазы,, + ПараметрыОбмена.ПараметрыАутентификации); Исключение ЗаписьЖурналаРегистрацииОбменаДанными(ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()), СтруктураНастроекОбмена, Истина); СтруктураНастроекОбмена.РезультатВыполненияОбмена = Перечисления.РезультатыВыполненияОбмена.Ошибка; @@ -3165,7 +3769,10 @@ СтрокаСообщенияОбОшибке = ""; // Получаем прокси веб-сервиса для узла информационной базы. - Прокси = ПолучитьWSПроксиДляУзлаИнформационнойБазы(УзелИнформационнойБазы, СтрокаСообщенияОбОшибке, ПараметрыАутентификации); + Прокси = ПолучитьWSПроксиДляУзлаИнформационнойБазы( + УзелИнформационнойБазы, + СтрокаСообщенияОбОшибке, + ПараметрыОбмена.ПараметрыАутентификации); Если Прокси = Неопределено Тогда @@ -3198,7 +3805,10 @@ СтрокаСообщенияОбОшибке = ""; // Получаем прокси веб-сервиса для узла информационной базы. - Прокси = ПолучитьWSПроксиДляУзлаИнформационнойБазы(УзелИнформационнойБазы, СтрокаСообщенияОбОшибке, ПараметрыАутентификации); + Прокси = ПолучитьWSПроксиДляУзлаИнформационнойБазы( + УзелИнформационнойБазы, + СтрокаСообщенияОбОшибке, + ПараметрыОбмена.ПараметрыАутентификации); Если Прокси = Неопределено Тогда @@ -3223,21 +3833,24 @@ Попытка - ИдентификаторФайлаСтрокой = Строка(ПоместитьФайлВХранилищеВСервисе(ФайлСообщенияОбмена, УзелИнформационнойБазы,, ПараметрыАутентификации)); + ИдентификаторФайлаСтрокой = Строка(ПоместитьФайлВХранилищеВСервисе( + ФайлСообщенияОбмена, УзелИнформационнойБазы,, ПараметрыОбмена.ПараметрыАутентификации)); Попытка УдалитьФайлы(ФайлСообщенияОбмена); Исключение + ЗаписьЖурналаРегистрации(СобытиеЖурналаРегистрацииОбменДанными(), + УровеньЖурналаРегистрации.Ошибка,,, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); КонецПопытки; Прокси.DownloadData(СтруктураНастроекОбмена.ИмяПланаОбмена, - СтруктураНастроекОбмена.ТекущийУзелПланаОбменаКод, - ИдентификаторФайлаСтрокой, - ДлительнаяОперация, - ИдентификаторОперации, - ДлительнаяОперацияРазрешена); + СтруктураНастроекОбмена.ТекущийУзелПланаОбменаКод, + ИдентификаторФайлаСтрокой, + ПараметрыОбмена.ДлительнаяОперация, + ПараметрыОбмена.ИдентификаторОперации, + ПараметрыОбмена.ДлительнаяОперацияРазрешена); - Если ДлительнаяОперация Тогда + Если ПараметрыОбмена.ДлительнаяОперация Тогда ЗаписьЖурналаРегистрацииОбменаДанными(НСтр("ru = 'Ожидание загрузки данных в базе-корреспонденте...'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), СтруктураНастроекОбмена); Возврат; @@ -3254,6 +3867,8 @@ Попытка УдалитьФайлы(ФайлСообщенияОбмена); Исключение + ЗаписьЖурналаРегистрации(СобытиеЖурналаРегистрацииОбменДанными(), + УровеньЖурналаРегистрации.Ошибка,,, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); КонецПопытки; Иначе @@ -3351,10 +3966,55 @@ Структура.Вставить("РежимОтладки", Ложь); Структура.Вставить("ИмяФайлаПротоколаОбмена", ""); + ЭтоПланОбменаXDTO = ОбменДаннымиПовтИсп.ЭтоПланОбменаXDTO(УзелИнформационнойБазы); + Если ЭтоПланОбменаXDTO Тогда + // Проверка наличия узла в базе-корреспонденте. + ПланОбменаМенеджер = ВнешнееСоединение.ПланыОбмена[Структура.ИмяПланаОбмена]; + ПланОбменаСсылка = ПланОбменаМенеджер.НайтиПоКоду(Структура.ТекущийУзелПланаОбменаКод); + Если НЕ ЗначениеЗаполнено(ПланОбменаСсылка.Code) Тогда + // При необходимости запуск перехода на синхронизацию данных через универсальный формат. + ТекстСообщения = НСтр("ru = 'Необходим переход на синхронизацию данных через универсальный формат в базе-корреспонденте.'"); + ЗаписьЖурналаРегистрацииОбменаДанными(ТекстСообщения, СтруктураНастроекОбмена, Ложь); + + СтруктураПараметров = Новый Структура(); + СтруктураПараметров.Вставить("Код", Структура.ТекущийУзелПланаОбменаКод); + СтруктураПараметров.Вставить("ВариантНастройки", + ОбщегоНазначения.ЗначениеРеквизитаОбъекта(УзелИнформационнойБазы, "ВариантНастройки")); + СтруктураПараметров.Вставить("Ошибка", Ложь); + СтруктураПараметров.Вставить("СообщениеОбОшибке", ""); + + ЕстьОшибки = Ложь; + СтрокаСообщенияОбОшибке = ""; + РезультатПерехода = + ПланОбменаМенеджер.ПереходНаСинхронизациюЧерезУниверсальныйФорматВнешнееСоединение(СтруктураПараметров); + Если СтруктураПараметров.Ошибка Тогда + ЕстьОшибки = Истина; + НСтрока = НСтр("ru = 'Ошибка при переходе на синхронизацию данных через универсальный формат: %1. Обмен отменен.'", + ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()); + СтрокаСообщенияОбОшибке = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтрока, + СтруктураПараметров.СообщениеОбОшибке); + ИначеЕсли РезультатПерехода = Неопределено Тогда + ЕстьОшибки = Истина; + СтрокаСообщенияОбОшибке = НСтр("ru = 'Переход на синхронизацию данных через универсальный формат не выполнен'"); + КонецЕсли; + Если ЕстьОшибки Тогда + // Синхронизация данных невозможна. + ЗаписьЖурналаРегистрацииОбменаДанными(СтрокаСообщенияОбОшибке, СтруктураНастроекОбмена, Истина); + СтруктураНастроекОбмена.РезультатВыполненияОбмена = Перечисления.РезультатыВыполненияОбмена.Отменено; + ЗафиксироватьЗавершениеОбмена(СтруктураНастроекОбмена); + Отказ = Истина; + Возврат; + Иначе + Сообщение = НСтр("ru = 'Переход на синхронизацию данных через универсальный формат завершен успешно.'"); + ЗаписьЖурналаРегистрацииОбменаДанными(СтрокаСообщенияОбОшибке, СтруктураНастроекОбмена, Ложь); + КонецЕсли; + КонецЕсли; + КонецЕсли; + Попытка СтруктураНастроекОбменаВнешнееСоединение = ВнешнееСоединение.ОбменДаннымиВнешнееСоединение.СтруктураНастроекОбмена(Структура); Исключение - // добавляем запись в ЖР + // Добавляем запись в ЖР. ЗаписьЖурналаРегистрацииОбменаДанными(ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()), СтруктураНастроекОбмена, Истина); // Если настройка содержит ошибки, то обмен не производим; статус "Отменено". @@ -3368,22 +4028,22 @@ СтруктураНастроекОбменаВнешнееСоединение.ДатаНачала = ВнешнееСоединение.ТекущаяДатаСеанса(); ВнешнееСоединение.ОбменДаннымиВнешнееСоединение.ЗаписьЖурналаРегистрацииНачалаОбменаДанными(СтруктураНастроекОбменаВнешнееСоединение); - // ОБМЕН ДАННЫМИ Если СтруктураНастроекОбмена.ПроизводитьЗагрузкуДанных Тогда - - // Получаем правила обмена из второй ИБ. - ПравилаКонвертацииОбъектов = ВнешнееСоединение.ОбменДаннымиВнешнееСоединение.ПолучитьПравилаКонвертацииОбъектов(СтруктураНастроекОбменаВнешнееСоединение.ИмяПланаОбмена); - - Если ПравилаКонвертацииОбъектов = Неопределено Тогда + Если НЕ ЭтоПланОбменаXDTO Тогда + // Получаем правила обмена из второй ИБ. + ПравилаКонвертацииОбъектов = ВнешнееСоединение.ОбменДаннымиВнешнееСоединение.ПолучитьПравилаКонвертацииОбъектов(СтруктураНастроекОбменаВнешнееСоединение.ИмяПланаОбмена); - // Правила обмена должны быть указаны. - НСтрока = НСтр("ru = 'Не заданы правила конвертации во второй информационной базе для плана обмена %1. Обмен отменен.'", - ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()); - СтрокаСообщенияОбОшибке = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтрока, СтруктураНастроекОбменаВнешнееСоединение.ИмяПланаОбмена); - ЗаписьЖурналаРегистрацииОбменаДанными(СтрокаСообщенияОбОшибке, СтруктураНастроекОбмена, Истина); - ЗафиксироватьЗавершениеИнициализацииОбмена(СтруктураНастроекОбмена); - Возврат; + Если ПравилаКонвертацииОбъектов = Неопределено Тогда + + // Правила обмена должны быть указаны. + НСтрока = НСтр("ru = 'Не заданы правила конвертации во второй информационной базе для плана обмена %1. Обмен отменен.'", + ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()); + СтрокаСообщенияОбОшибке = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтрока, СтруктураНастроекОбменаВнешнееСоединение.ИмяПланаОбмена); + ЗаписьЖурналаРегистрацииОбменаДанными(СтрокаСообщенияОбОшибке, СтруктураНастроекОбмена, Истина); + ЗафиксироватьЗавершениеИнициализацииОбмена(СтруктураНастроекОбмена); + Возврат; + КонецЕсли; КонецЕсли; // Обработка для загрузки данных. @@ -3391,71 +4051,75 @@ ОбработкаДляЗагрузкиДанных.ИмяФайлаОбмена = ""; ОбработкаДляЗагрузкиДанных.КоличествоОбъектовНаТранзакцию = СтруктураНастроекОбмена.КоличествоЭлементовВТранзакции; ОбработкаДляЗагрузкиДанных.ИспользоватьТранзакции = (ОбработкаДляЗагрузкиДанных.КоличествоОбъектовНаТранзакцию <> 1); - ОбработкаДляЗагрузкиДанных.ЗагрузкаДанныхВыполняетсяЧерезВнешнееСоединение = Истина; + Если НЕ ЭтоПланОбменаXDTO Тогда + ОбработкаДляЗагрузкиДанных.ЗагрузкаДанныхВыполняетсяЧерезВнешнееСоединение = Истина; + КонецЕсли; // Получаем инициализированную обработку для выгрузки данных. - ОбработкаОбменаДаннымиВнешнееСоединение = ВнешнееСоединение.Обработки.КонвертацияОбъектовИнформационныхБаз.Создать(); - ОбработкаОбменаДаннымиВнешнееСоединение.РежимОбмена = "Выгрузка"; - ОбработкаОбменаДаннымиВнешнееСоединение.СохраненныеНастройки = ПравилаКонвертацииОбъектов; - - Попытка - ОбработкаОбменаДаннымиВнешнееСоединение.ВосстановитьПравилаИзВнутреннегоФормата(); - Исключение - ЗаписьЖурналаРегистрацииОбменаДанными( - СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Возникла ошибка во второй информационной базе: %1'"), - ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())), СтруктураНастроекОбмена, Истина - ); - - // Если настройка содержит ошибки, то обмен не производим; статус "Отменено". - СтруктураНастроекОбмена.РезультатВыполненияОбмена = Перечисления.РезультатыВыполненияОбмена.Отменено; - ЗафиксироватьЗавершениеОбмена(СтруктураНастроекОбмена); - Отказ = Истина; - Возврат; - КонецПопытки; - - // задаем узлы обмена + Если ЭтоПланОбменаXDTO Тогда + ОбработкаОбменаДаннымиВнешнееСоединение = ВнешнееСоединение.Обработки.КонвертацияОбъектовXDTO.Создать(); + ОбработкаОбменаДаннымиВнешнееСоединение.РежимОбмена = "Выгрузка"; + Иначе + ОбработкаОбменаДаннымиВнешнееСоединение = ВнешнееСоединение.Обработки.КонвертацияОбъектовИнформационныхБаз.Создать(); + ОбработкаОбменаДаннымиВнешнееСоединение.СохраненныеНастройки = ПравилаКонвертацииОбъектов; + ОбработкаОбменаДаннымиВнешнееСоединение.ЗагрузкаДанныхВыполняетсяВоВнешнемСоединении = Ложь; + ОбработкаОбменаДаннымиВнешнееСоединение.РежимОбмена = "Выгрузка"; + Попытка + ОбработкаОбменаДаннымиВнешнееСоединение.ВосстановитьПравилаИзВнутреннегоФормата(); + Исключение + ЗаписьЖурналаРегистрацииОбменаДанными( + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Возникла ошибка во второй информационной базе: %1'"), + ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())), СтруктураНастроекОбмена, Истина); + + // Если настройка содержит ошибки, то обмен не производим; статус "Отменено". + СтруктураНастроекОбмена.РезультатВыполненияОбмена = Перечисления.РезультатыВыполненияОбмена.Отменено; + ЗафиксироватьЗавершениеОбмена(СтруктураНастроекОбмена); + Отказ = Истина; + Возврат; + КонецПопытки; + // Задаем узлы обмена. + ОбработкаОбменаДаннымиВнешнееСоединение.УзелДляФоновогоОбмена = Неопределено; + ОбработкаОбменаДаннымиВнешнееСоединение.НеВыгружатьОбъектыПоСсылкам = Истина; + ОбработкаОбменаДаннымиВнешнееСоединение.ИмяФайлаПравилОбмена = "1"; + ОбработкаОбменаДаннымиВнешнееСоединение.ВнешнееСоединение = Неопределено; + КонецЕсли; + + // Задаем узлы обмена (общие для любого вида обмена). ОбработкаОбменаДаннымиВнешнееСоединение.УзелДляОбмена = СтруктураНастроекОбменаВнешнееСоединение.УзелИнформационнойБазы; - ОбработкаОбменаДаннымиВнешнееСоединение.УзелДляФоновогоОбмена = Неопределено; - ОбработкаОбменаДаннымиВнешнееСоединение.НеВыгружатьОбъектыПоСсылкам = Истина; - ОбработкаОбменаДаннымиВнешнееСоединение.ИмяФайлаПравилОбмена = "1"; - - ОбработкаОбменаДаннымиВнешнееСоединение.ВнешнееСоединение = Неопределено; - ОбработкаОбменаДаннымиВнешнееСоединение.ЗагрузкаДанныхВыполняетсяВоВнешнемСоединении = Ложь; УстановитьОбщиеПараметрыДляОбработкиОбменаДанными(ОбработкаОбменаДаннымиВнешнееСоединение, СтруктураНастроекОбменаВнешнееСоединение, ОбменСБСП20); - ВерсияКонфигурацииПриемника = ""; - ВерсияИсточникаИзПравил = ""; - ТекстСообщения = ""; - ПараметрыВнешнегоСоединения = Новый Структура; - ПараметрыВнешнегоСоединения.Вставить("ВнешнееСоединение", ВнешнееСоединение); - ПараметрыВнешнегоСоединения.Вставить("ВерсияБСППоВнешнемуСоединению", ВерсияБСППоВнешнемуСоединению); - ПараметрыВнешнегоСоединения.Вставить("КлючСообщенияЖурналаРегистрации", СтруктураНастроекОбменаВнешнееСоединение.КлючСообщенияЖурналаРегистрации); - ПараметрыВнешнегоСоединения.Вставить("УзелИнформационнойБазы", СтруктураНастроекОбменаВнешнееСоединение.УзелИнформационнойБазы); - - ПравилаКонвертацииОбъектов.Получить().Конвертация.Свойство("ВерсияКонфигурацииИсточника", ВерсияКонфигурацииПриемника); - ОбработкаДляЗагрузкиДанных.СохраненныеНастройки.Получить().Конвертация.Свойство("ВерсияКонфигурацииИсточника", ВерсияИсточникаИзПравил); - - Если РазличаютсяВерсииКорреспондента(СтруктураНастроекОбмена.ИмяПланаОбмена, СтруктураНастроекОбмена.КлючСообщенияЖурналаРегистрации, - ВерсияИсточникаИзПравил, ВерсияКонфигурацииПриемника, ТекстСообщения, ПараметрыВнешнегоСоединения) Тогда + Если НЕ ЭтоПланОбменаXDTO Тогда + ВерсияКонфигурацииПриемника = ""; + ВерсияИсточникаИзПравил = ""; + ТекстСообщения = ""; + ПараметрыВнешнегоСоединения = Новый Структура; + ПараметрыВнешнегоСоединения.Вставить("ВнешнееСоединение", ВнешнееСоединение); + ПараметрыВнешнегоСоединения.Вставить("ВерсияБСППоВнешнемуСоединению", ВерсияБСППоВнешнемуСоединению); + ПараметрыВнешнегоСоединения.Вставить("КлючСообщенияЖурналаРегистрации", СтруктураНастроекОбменаВнешнееСоединение.КлючСообщенияЖурналаРегистрации); + ПараметрыВнешнегоСоединения.Вставить("УзелИнформационнойБазы", СтруктураНастроекОбменаВнешнееСоединение.УзелИнформационнойБазы); - ОбработкаОбменаДаннымиВнешнееСоединение = Неопределено; - Возврат; + ПравилаКонвертацииОбъектов.Получить().Конвертация.Свойство("ВерсияКонфигурацииИсточника", ВерсияКонфигурацииПриемника); + ОбработкаДляЗагрузкиДанных.СохраненныеНастройки.Получить().Конвертация.Свойство("ВерсияКонфигурацииИсточника", ВерсияИсточникаИзПравил); + Если РазличаютсяВерсииКорреспондента(СтруктураНастроекОбмена.ИмяПланаОбмена, СтруктураНастроекОбмена.КлючСообщенияЖурналаРегистрации, + ВерсияИсточникаИзПравил, ВерсияКонфигурацииПриемника, ТекстСообщения, ПараметрыВнешнегоСоединения) Тогда + + ОбработкаОбменаДаннымиВнешнееСоединение = Неопределено; + Возврат; + + КонецЕсли; КонецЕсли; - // ВЫГРУЗКА (КОРРЕСПОНДЕНТ) - ЗАГРУЗКА (ЭТА БАЗА) ОбработкаОбменаДаннымиВнешнееСоединение.ВыполнитьВыгрузкуДанных(ОбработкаДляЗагрузкиДанных); // Фиксируем состояние выполнения обмена данными. СтруктураНастроекОбмена.РезультатВыполненияОбмена = ОбработкаДляЗагрузкиДанных.РезультатВыполненияОбмена(); СтруктураНастроекОбмена.КоличествоОбъектовОбработано = ОбработкаДляЗагрузкиДанных.СчетчикЗагруженныхОбъектов(); - СтруктураНастроекОбмена.СообщениеПриОбмене = ОбработкаДляЗагрузкиДанных.КомментарийПриЗагрузкеДанных; - СтруктураНастроекОбмена.СтрокаСообщенияОбОшибке = ОбработкаДляЗагрузкиДанных.СтрокаСообщенияОбОшибке(); - - // Фиксируем состояние выполнения обмена данными (внешнее соединение). СтруктураНастроекОбменаВнешнееСоединение.РезультатВыполненияОбменаСтрокой = ОбработкаОбменаДаннымиВнешнееСоединение.РезультатВыполненияОбменаСтрокой(); СтруктураНастроекОбменаВнешнееСоединение.КоличествоОбъектовОбработано = ОбработкаОбменаДаннымиВнешнееСоединение.СчетчикВыгруженныхОбъектов(); + СтруктураНастроекОбмена.СообщениеПриОбмене = ОбработкаДляЗагрузкиДанных.КомментарийПриЗагрузкеДанных; + СтруктураНастроекОбмена.СтрокаСообщенияОбОшибке = ОбработкаДляЗагрузкиДанных.СтрокаСообщенияОбОшибке(); СтруктураНастроекОбменаВнешнееСоединение.СообщениеПриОбмене = ОбработкаОбменаДаннымиВнешнееСоединение.КомментарийПриВыгрузкеДанных; СтруктураНастроекОбменаВнешнееСоединение.СтрокаСообщенияОбОшибке = ОбработкаОбменаДаннымиВнешнееСоединение.СтрокаСообщенияОбОшибке(); @@ -3464,10 +4128,14 @@ ИначеЕсли СтруктураНастроекОбмена.ПроизводитьВыгрузкуДанных Тогда // Обработка для загрузки данных. - ОбработкаДляЗагрузкиДанных = ВнешнееСоединение.Обработки.КонвертацияОбъектовИнформационныхБаз.Создать(); + Если ЭтоПланОбменаXDTO Тогда + ОбработкаДляЗагрузкиДанных = ВнешнееСоединение.Обработки.КонвертацияОбъектовXDTO.Создать(); + Иначе + ОбработкаДляЗагрузкиДанных = ВнешнееСоединение.Обработки.КонвертацияОбъектовИнформационныхБаз.Создать(); + ОбработкаДляЗагрузкиДанных.ЗагрузкаДанныхВыполняетсяЧерезВнешнееСоединение = Истина; + КонецЕсли; ОбработкаДляЗагрузкиДанных.РежимОбмена = "Загрузка"; ОбработкаДляЗагрузкиДанных.УзелОбменаЗагрузкаДанных = СтруктураНастроекОбменаВнешнееСоединение.УзелИнформационнойБазы; - ОбработкаДляЗагрузкиДанных.ЗагрузкаДанныхВыполняетсяЧерезВнешнееСоединение = Истина; УстановитьОбщиеПараметрыДляОбработкиОбменаДанными(ОбработкаДляЗагрузкиДанных, СтруктураНастроекОбменаВнешнееСоединение, ОбменСБСП20); @@ -3477,8 +4145,10 @@ // Получаем инициализированную обработку для выгрузки данных. ОбработкаОбменаДаннымиXML = СтруктураНастроекОбмена.ОбработкаОбменаДанными; ОбработкаОбменаДаннымиXML.ИмяФайлаОбмена = ""; - ОбработкаОбменаДаннымиXML.ВнешнееСоединение = ВнешнееСоединение; - ОбработкаОбменаДаннымиXML.ЗагрузкаДанныхВыполняетсяВоВнешнемСоединении = Истина; + Если НЕ ЭтоПланОбменаXDTO Тогда + ОбработкаОбменаДаннымиXML.ВнешнееСоединение = ВнешнееСоединение; + ОбработкаОбменаДаннымиXML.ЗагрузкаДанныхВыполняетсяВоВнешнемСоединении = Истина; + КонецЕсли; // ВЫГРУЗКА (ЭТА БАЗА) - ЗАГРУЗКА (КОРРЕСПОНДЕНТ) ОбработкаОбменаДаннымиXML.ВыполнитьВыгрузкуДанных(ОбработкаДляЗагрузкиДанных); @@ -3486,15 +4156,12 @@ // Фиксируем состояние выполнения обмена данными. СтруктураНастроекОбмена.РезультатВыполненияОбмена = ОбработкаОбменаДаннымиXML.РезультатВыполненияОбмена(); СтруктураНастроекОбмена.КоличествоОбъектовОбработано = ОбработкаОбменаДаннымиXML.СчетчикВыгруженныхОбъектов(); - СтруктураНастроекОбмена.СообщениеПриОбмене = ОбработкаОбменаДаннымиXML.КомментарийПриВыгрузкеДанных; - СтруктураНастроекОбмена.СтрокаСообщенияОбОшибке = ОбработкаОбменаДаннымиXML.СтрокаСообщенияОбОшибке(); - - // Фиксируем состояние выполнения обмена данными (внешнее соединение). СтруктураНастроекОбменаВнешнееСоединение.РезультатВыполненияОбменаСтрокой = ОбработкаДляЗагрузкиДанных.РезультатВыполненияОбменаСтрокой(); СтруктураНастроекОбменаВнешнееСоединение.КоличествоОбъектовОбработано = ОбработкаДляЗагрузкиДанных.СчетчикЗагруженныхОбъектов(); + СтруктураНастроекОбмена.СообщениеПриОбмене = ОбработкаОбменаДаннымиXML.КомментарийПриВыгрузкеДанных; + СтруктураНастроекОбмена.СтрокаСообщенияОбОшибке = ОбработкаОбменаДаннымиXML.СтрокаСообщенияОбОшибке(); СтруктураНастроекОбменаВнешнееСоединение.СообщениеПриОбмене = ОбработкаДляЗагрузкиДанных.КомментарийПриЗагрузкеДанных; СтруктураНастроекОбменаВнешнееСоединение.СтрокаСообщенияОбОшибке = ОбработкаДляЗагрузкиДанных.СтрокаСообщенияОбОшибке(); - ОбработкаДляЗагрузкиДанных = Неопределено; КонецЕсли; @@ -3659,7 +4326,7 @@ Если Не СообщениеПрочитано Тогда - Если Константы.ЗагрузитьСообщениеОбменаДанными.Получить() = Ложь Тогда + Если НЕ Константы.ЗагрузитьСообщениеОбменаДанными.Получить() Тогда Константы.ЗагрузитьСообщениеОбменаДанными.Установить(Истина); КонецЕсли; @@ -3670,8 +4337,7 @@ Если УдалитьСообщение Тогда ОчиститьСообщениеОбменаДаннымиИзГлавногоУзла(); - - Если Константы.ЗагрузитьСообщениеОбменаДанными.Получить() = Истина Тогда + Если Константы.ЗагрузитьСообщениеОбменаДанными.Получить() Тогда Константы.ЗагрузитьСообщениеОбменаДанными.Установить(Ложь); КонецЕсли; @@ -4492,8 +5158,7 @@ Комментарий = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Начало получения сообщения обмена из Интернета (количество частей файла %1).'"), - Формат(КоличествоЧастей, "ЧН=0; ЧГ=0") - ); + Формат(КоличествоЧастей, "ЧН=0; ЧГ=0")); ЗаписьЖурналаРегистрацииОбменаДанными(Комментарий, СтруктураНастроекОбмена); // @@ -4522,7 +5187,7 @@ УдалитьФайлы(КаталогСборки); Исключение ЗаписьЖурналаРегистрации(СобытиеЖурналаРегистрацииУдалениеВременногоФайла(), - УровеньЖурналаРегистрации.Ошибка,,, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); + УровеньЖурналаРегистрации.Ошибка,,, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); КонецПопытки; ВызватьИсключение(НСтр("ru = 'Файл архива не содержит данных.'")); КонецЕсли; @@ -4532,8 +5197,7 @@ Комментарий = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Окончание получения сообщения обмена из Интернета (размер сжатого сообщения обмена %1 Мб).'"), - Формат(Окр(ФайлАрхива.Размер() / 1024 / 1024, 3), "ЧН=0; ЧГ=0") - ); + Формат(Окр(ФайлАрхива.Размер() / 1024 / 1024, 3), "ЧН=0; ЧГ=0")); ЗаписьЖурналаРегистрацииОбменаДанными(Комментарий, СтруктураНастроекОбмена); // @@ -4551,7 +5215,7 @@ УдалитьФайлы(КаталогСборки); Исключение ЗаписьЖурналаРегистрации(СобытиеЖурналаРегистрацииУдалениеВременногоФайла(), - УровеньЖурналаРегистрации.Ошибка,,, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); + УровеньЖурналаРегистрации.Ошибка,,, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); КонецПопытки; КонецЕсли; @@ -4618,7 +5282,7 @@ УдалитьФайлы(КаталогФайлов); Исключение ЗаписьЖурналаРегистрации(СобытиеЖурналаРегистрацииУдалениеВременногоФайла(), - УровеньЖурналаРегистрации.Ошибка,,, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); + УровеньЖурналаРегистрации.Ошибка,,, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); КонецПопытки; Прокси.SaveFileFromParts(ИдентификаторСессии, КоличествоЧастей, ИдентификаторФайла); @@ -5110,7 +5774,7 @@ | И ТаблицаРегистра.Период >= &ДатаНачалаВыгрузки"; ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "[ПолноеИмяОбъекта]", ПолноеИмяОбъекта); - ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "[Измерения]", СтроковыеФункцииКлиентСервер.СтрокаИзМассиваПодстрок(ОсновнойОтбор)); + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "[Измерения]", СтрСоединить(ОсновнойОтбор, ",")); Запрос = Новый Запрос; Запрос.УстановитьПараметр("ДатаНачалаВыгрузки", ДатаНачалаВыгрузки); @@ -5133,7 +5797,7 @@ | ТаблицаРегистра.Период >= &ДатаНачалаВыгрузки"; ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "[ПолноеИмяОбъекта]", ПолноеИмяОбъекта); - ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "[Измерения]", СтроковыеФункцииКлиентСервер.СтрокаИзМассиваПодстрок(ОсновнойОтбор)); + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "[Измерения]", СтрСоединить(ОсновнойОтбор, ",")); Запрос = Новый Запрос; Запрос.УстановитьПараметр("ДатаНачалаВыгрузки", ДатаНачалаВыгрузки); @@ -5155,7 +5819,7 @@ | ТаблицаРегистра.Организация В(&Организации)"; ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "[ПолноеИмяОбъекта]", ПолноеИмяОбъекта); - ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "[Измерения]", СтроковыеФункцииКлиентСервер.СтрокаИзМассиваПодстрок(ОсновнойОтбор)); + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "[Измерения]", СтрСоединить(ОсновнойОтбор, ",")); Запрос = Новый Запрос; Запрос.УстановитьПараметр("Организации", Организации); @@ -5193,178 +5857,6 @@ //////////////////////////////////////////////////////////////////////////////// // Вспомогательные служебные процедуры и функции. -// Для внутреннего использования. -// -Функция ТаблицаМонитораОбменаДанными(Знач ПланыОбмена, Знач ДополнительныеСвойстваПланаОбмена = "", Знач ТолькоОшибочные = Ложь) Экспорт - - ТекстЗапроса = "ВЫБРАТЬ - | СостоянияОбменовДанными.УзелИнформационнойБазы КАК УзелИнформационнойБазы, - | СостоянияОбменовДанными.ДатаОкончания КАК ДатаОкончания, - | ВЫБОР - | КОГДА СостоянияОбменовДанными.РезультатВыполненияОбмена = ЗНАЧЕНИЕ(Перечисление.РезультатыВыполненияОбмена.Предупреждение_СообщениеОбменаБылоРанееПринято) - | ИЛИ СостоянияОбменовДанными.РезультатВыполненияОбмена = ЗНАЧЕНИЕ(Перечисление.РезультатыВыполненияОбмена.ВыполненоСПредупреждениями) - | ТОГДА 2 - | КОГДА СостоянияОбменовДанными.РезультатВыполненияОбмена = ЗНАЧЕНИЕ(Перечисление.РезультатыВыполненияОбмена.Выполнено) - | ТОГДА ВЫБОР - | КОГДА ЕСТЬNULL(КоличествоПроблем.Количество, 0) > 0 - | ТОГДА 2 - | ИНАЧЕ 0 - | КОНЕЦ - | ИНАЧЕ 1 - | КОНЕЦ КАК РезультатВыполненияОбмена - |ПОМЕСТИТЬ СостоянияОбменовДаннымиЗагрузка - |ИЗ - | РегистрСведений.СостоянияОбменовДанными КАК СостоянияОбменовДанными - | ЛЕВОЕ СОЕДИНЕНИЕ КоличествоПроблем КАК КоличествоПроблем - | ПО СостоянияОбменовДанными.УзелИнформационнойБазы = КоличествоПроблем.УзелИнформационнойБазы - |ГДЕ - | СостоянияОбменовДанными.ДействиеПриОбмене = ЗНАЧЕНИЕ(Перечисление.ДействияПриОбмене.ЗагрузкаДанных) - |; - | - |//////////////////////////////////////////////////////////////////////////////// - |ВЫБРАТЬ - | СостоянияОбменовДанными.УзелИнформационнойБазы КАК УзелИнформационнойБазы, - | СостоянияОбменовДанными.ДатаОкончания КАК ДатаОкончания, - | ВЫБОР - | КОГДА СостоянияОбменовДанными.РезультатВыполненияОбмена = ЗНАЧЕНИЕ(Перечисление.РезультатыВыполненияОбмена.Предупреждение_СообщениеОбменаБылоРанееПринято) - | ТОГДА 2 - | КОГДА СостоянияОбменовДанными.РезультатВыполненияОбмена = ЗНАЧЕНИЕ(Перечисление.РезультатыВыполненияОбмена.ВыполненоСПредупреждениями) - | ТОГДА 2 - | КОГДА СостоянияОбменовДанными.РезультатВыполненияОбмена = ЗНАЧЕНИЕ(Перечисление.РезультатыВыполненияОбмена.Выполнено) - | ТОГДА 0 - | ИНАЧЕ 1 - | КОНЕЦ КАК РезультатВыполненияОбмена - |ПОМЕСТИТЬ СостоянияОбменовДаннымиВыгрузка - |ИЗ - | РегистрСведений.СостоянияОбменовДанными КАК СостоянияОбменовДанными - |ГДЕ - | СостоянияОбменовДанными.ДействиеПриОбмене = ЗНАЧЕНИЕ(Перечисление.ДействияПриОбмене.ВыгрузкаДанных) - |; - | - |//////////////////////////////////////////////////////////////////////////////// - |ВЫБРАТЬ - | СостоянияУспешныхОбменовДанными.УзелИнформационнойБазы КАК УзелИнформационнойБазы, - | СостоянияУспешныхОбменовДанными.ДатаОкончания КАК ДатаОкончания - |ПОМЕСТИТЬ СостоянияУспешныхОбменовДаннымиЗагрузка - |ИЗ - | РегистрСведений.СостоянияУспешныхОбменовДанными КАК СостоянияУспешныхОбменовДанными - |ГДЕ - | СостоянияУспешныхОбменовДанными.ДействиеПриОбмене = ЗНАЧЕНИЕ(Перечисление.ДействияПриОбмене.ЗагрузкаДанных) - |; - | - |//////////////////////////////////////////////////////////////////////////////// - |ВЫБРАТЬ - | СостоянияУспешныхОбменовДанными.УзелИнформационнойБазы КАК УзелИнформационнойБазы, - | СостоянияУспешныхОбменовДанными.ДатаОкончания КАК ДатаОкончания - |ПОМЕСТИТЬ СостоянияУспешныхОбменовДаннымиВыгрузка - |ИЗ - | РегистрСведений.СостоянияУспешныхОбменовДанными КАК СостоянияУспешныхОбменовДанными - |ГДЕ - | СостоянияУспешныхОбменовДанными.ДействиеПриОбмене = ЗНАЧЕНИЕ(Перечисление.ДействияПриОбмене.ВыгрузкаДанных) - |; - | - |//////////////////////////////////////////////////////////////////////////////// - |ВЫБРАТЬ - | СценарииОбменовДаннымиНастройкиОбмена.УзелИнформационнойБазы КАК УзелИнформационнойБазы - |ПОМЕСТИТЬ СценарииСинхронизацииДанных - |ИЗ - | Справочник.СценарииОбменовДанными.НастройкиОбмена КАК СценарииОбменовДаннымиНастройкиОбмена - |ГДЕ - | СценарииОбменовДаннымиНастройкиОбмена.Ссылка.ИспользоватьРегламентноеЗадание = ИСТИНА - | - |СГРУППИРОВАТЬ ПО - | СценарииОбменовДаннымиНастройкиОбмена.УзелИнформационнойБазы - |; - | - |//////////////////////////////////////////////////////////////////////////////// - |ВЫБРАТЬ - | ПланыОбмена.УзелИнформационнойБазы КАК УзелИнформационнойБазы, - | - | [ДополнительныеСвойстваПланаОбмена] - | - | ЕСТЬNULL(СостоянияОбменовДаннымиВыгрузка.РезультатВыполненияОбмена, 0) КАК РезультатПоследнейВыгрузкиДанных, - | ЕСТЬNULL(СостоянияОбменовДаннымиЗагрузка.РезультатВыполненияОбмена, 0) КАК РезультатПоследнейЗагрузкиДанных, - | СостоянияОбменовДаннымиЗагрузка.ДатаОкончания КАК ДатаПоследнейЗагрузки, - | СостоянияОбменовДаннымиВыгрузка.ДатаОкончания КАК ДатаПоследнейВыгрузки, - | СостоянияУспешныхОбменовДаннымиЗагрузка.ДатаОкончания КАК ДатаПоследнейУспешнойЗагрузки, - | СостоянияУспешныхОбменовДаннымиВыгрузка.ДатаОкончания КАК ДатаПоследнейУспешнойВыгрузки, - | ВЫБОР - | КОГДА СценарииСинхронизацииДанных.УзелИнформационнойБазы ЕСТЬ NULL - | ТОГДА 0 - | ИНАЧЕ 1 - | КОНЕЦ КАК РасписаниеНастроено - |ИЗ - | ПланыОбменаКонфигурации КАК ПланыОбмена - | ЛЕВОЕ СОЕДИНЕНИЕ СостоянияОбменовДаннымиЗагрузка КАК СостоянияОбменовДаннымиЗагрузка - | ПО ПланыОбмена.УзелИнформационнойБазы = СостоянияОбменовДаннымиЗагрузка.УзелИнформационнойБазы - | ЛЕВОЕ СОЕДИНЕНИЕ СостоянияОбменовДаннымиВыгрузка КАК СостоянияОбменовДаннымиВыгрузка - | ПО ПланыОбмена.УзелИнформационнойБазы = СостоянияОбменовДаннымиВыгрузка.УзелИнформационнойБазы - | ЛЕВОЕ СОЕДИНЕНИЕ СостоянияУспешныхОбменовДаннымиЗагрузка КАК СостоянияУспешныхОбменовДаннымиЗагрузка - | ПО ПланыОбмена.УзелИнформационнойБазы = СостоянияУспешныхОбменовДаннымиЗагрузка.УзелИнформационнойБазы - | ЛЕВОЕ СОЕДИНЕНИЕ СостоянияУспешныхОбменовДаннымиВыгрузка КАК СостоянияУспешныхОбменовДаннымиВыгрузка - | ПО ПланыОбмена.УзелИнформационнойБазы = СостоянияУспешныхОбменовДаннымиВыгрузка.УзелИнформационнойБазы - | ЛЕВОЕ СОЕДИНЕНИЕ СценарииСинхронизацииДанных КАК СценарииСинхронизацииДанных - | ПО ПланыОбмена.УзелИнформационнойБазы = СценарииСинхронизацииДанных.УзелИнформационнойБазы - | - |[Отбор] - | - |УПОРЯДОЧИТЬ ПО - | ПланыОбмена.Наименование"; - - УстановитьПривилегированныйРежим(Истина); - - МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц; - - ПолучитьТаблицуПлановОбменаДляМонитора(МенеджерВременныхТаблиц, ПланыОбмена, ДополнительныеСвойстваПланаОбмена); - ПолучитьТаблицуРезультатовОбменаДляМонитора(МенеджерВременныхТаблиц, ПланыОбмена); - - ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "[ДополнительныеСвойстваПланаОбмена]", ПолучитьДополнительныеСвойстваПланаОбменаСтрокой(ДополнительныеСвойстваПланаОбмена)); - - Если ТолькоОшибочные Тогда - Отбор = " - |ГДЕ - | ЕСТЬNULL(СостоянияОбменовДаннымиВыгрузка.РезультатВыполненияОбмена, 0) <> 0 - | ИЛИ ЕСТЬNULL(СостоянияОбменовДаннымиЗагрузка.РезультатВыполненияОбмена, 0) <> 0" - ; - Иначе - Отбор = ""; - КонецЕсли; - - ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "[Отбор]", Отбор); - - Запрос = Новый Запрос; - Запрос.Текст = ТекстЗапроса; - Запрос.МенеджерВременныхТаблиц = МенеджерВременныхТаблиц; - - НастройкиСинхронизации = Запрос.Выполнить().Выгрузить(); - НастройкиСинхронизации.Колонки.Добавить("ПредставлениеДатыПоследнейЗагрузки"); - НастройкиСинхронизации.Колонки.Добавить("ПредставлениеДатыПоследнейВыгрузки"); - НастройкиСинхронизации.Колонки.Добавить("ПредставлениеДатыПоследнейУспешнойЗагрузки"); - НастройкиСинхронизации.Колонки.Добавить("ПредставлениеДатыПоследнейУспешнойВыгрузки"); - НастройкиСинхронизации.Колонки.Добавить("ВариантОбменаДанными", Новый ОписаниеТипов("Строка")); - НастройкиСинхронизации.Колонки.Добавить("ИмяПланаОбмена", Новый ОписаниеТипов("Строка")); - - Для Каждого НастройкаСинхронизации Из НастройкиСинхронизации Цикл - - ПереопределяемоеИмяУзлаПланаОбмена = ПереопределяемоеИмяУзлаПланаОбмена(НастройкаСинхронизации.УзелИнформационнойБазы, "НаименованиеКонфигурацииКорреспондента"); - - Если ЗначениеЗаполнено(ПереопределяемоеИмяУзлаПланаОбмена) Тогда - НастройкаСинхронизации.ИмяПланаОбмена = ПереопределяемоеИмяУзлаПланаОбмена; - КонецЕсли; - - НастройкаСинхронизации.ПредставлениеДатыПоследнейЗагрузки = ОтносительнаяДатаСинхронизации(НастройкаСинхронизации.ДатаПоследнейЗагрузки); - НастройкаСинхронизации.ПредставлениеДатыПоследнейВыгрузки = ОтносительнаяДатаСинхронизации(НастройкаСинхронизации.ДатаПоследнейВыгрузки); - НастройкаСинхронизации.ПредставлениеДатыПоследнейУспешнойЗагрузки = ОтносительнаяДатаСинхронизации(НастройкаСинхронизации.ДатаПоследнейУспешнойЗагрузки); - НастройкаСинхронизации.ПредставлениеДатыПоследнейУспешнойВыгрузки = ОтносительнаяДатаСинхронизации(НастройкаСинхронизации.ДатаПоследнейУспешнойВыгрузки); - - НастройкаСинхронизации.ВариантОбменаДанными = ВариантОбменаДанными(НастройкаСинхронизации.УзелИнформационнойБазы); - - КонецЦикла; - - Возврат НастройкиСинхронизации; - -КонецФункции - Функция КоличествоНастроенныхОбменов(Знач ПланыОбмена) Экспорт ТекстЗапроса = "ВЫБРАТЬ @@ -5417,7 +5909,7 @@ Шаблон = "ПланыОбмена.[СвойствоСтрокой] КАК [СвойствоСтрокой]"; - СвойстваМассив = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(СвойстваСтрокой); + СвойстваМассив = СтрРазделить(СвойстваСтрокой, ","); Для Каждого СвойствоСтрокой Из СвойстваМассив Цикл @@ -5512,7 +6004,7 @@ Для Каждого Элемент Из ЗначенияПоУмолчанию Цикл - Если Найти(Элемент.Ключ, "_Ключ") > 0 Тогда + Если СтрНайти(Элемент.Ключ, "_Ключ") > 0 Тогда Продолжить; КонецЕсли; @@ -5592,7 +6084,7 @@ |ИЗ | ПланОбмена.[ИмяПланаОбмена] |ГДЕ - | Ссылка <> &ЭтотУзел[ИмяПланаОбмена] + | НЕ ЭтотУзел | И НЕ ПометкаУдаления |"; @@ -5606,9 +6098,6 @@ ТекстЗапросаДляПланаОбмена = СтрЗаменить(ТекстЗапросаДляПланаОбмена, "[ИмяПланаОбменаСиноним]", Метаданные.ПланыОбмена[ИмяПланаОбмена].Синоним); ТекстЗапросаДляПланаОбмена = СтрЗаменить(ТекстЗапросаДляПланаОбмена, "[ДополнительныеСвойстваПланаОбмена]", ДополнительныеСвойстваПланаОбменаСтрокой); - ИмяПараметра = СтрЗаменить("ЭтотУзел[ИмяПланаОбмена]", "[ИмяПланаОбмена]", ИмяПланаОбмена); - Запрос.УстановитьПараметр(ИмяПараметра, ОбменДаннымиПовтИсп.ПолучитьЭтотУзелПланаОбмена(ИмяПланаОбмена)); - // Удаляем литерал объединения для первой таблицы. Если ПустаяСтрока(ТекстЗапроса) Тогда @@ -5626,7 +6115,7 @@ Если Не ПустаяСтрока(ДополнительныеСвойстваПланаОбмена) Тогда - ДополнительныеСвойства = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(ДополнительныеСвойстваПланаОбмена); + ДополнительныеСвойства = СтрРазделить(ДополнительныеСвойстваПланаОбмена, ","); ДополнительныеСвойстваБезИсточникаДанных = Новый Массив; @@ -5636,7 +6125,7 @@ КонецЦикла; - ДополнительныеСвойстваБезИсточникаДанныхСтрокой = СтроковыеФункцииКлиентСервер.СтрокаИзМассиваПодстрок(ДополнительныеСвойстваБезИсточникаДанных) + ", "; + ДополнительныеСвойстваБезИсточникаДанныхСтрокой = СтрСоединить(ДополнительныеСвойстваБезИсточникаДанных, ",") + ", "; КонецЕсли; @@ -5739,37 +6228,6 @@ // -// Для внутреннего использования. -// -Процедура ПроверитьИспользованиеОбменаДанными() Экспорт - - Если ПолучитьФункциональнуюОпцию("ИспользоватьСинхронизациюДанных") <> Истина Тогда - - ТекстСообщения = НСтр("ru = 'Синхронизация данных запрещена администратором.'"); - ЗаписьЖурналаРегистрации(СобытиеЖурналаРегистрацииОбменДанными(), УровеньЖурналаРегистрации.Ошибка,,,ТекстСообщения); - ВызватьИсключение ТекстСообщения; - - КонецЕсли; - -КонецПроцедуры - -// Для внутреннего использования. -// -Процедура ПроверитьВозможностьВыполненияОбменов() Экспорт - - Если Не Пользователи.РолиДоступны("ВыполнениеСинхронизацииДанных, НастройкаСинхронизацииДанных") Тогда - - ВызватьИсключение НСтр("ru = 'Недостаточно прав для синхронизации данных.'"); - - ИначеЕсли ОбновлениеИнформационнойБазы.НеобходимоОбновлениеИнформационнойБазы() - И НЕ ОбменДаннымиВызовСервера.РежимЗагрузкиСообщенияОбменаДаннымиПередЗапуском("ЗагрузкаРазрешена") Тогда - - ВызватьИсключение НСтр("ru = 'Информационная база находится в состоянии обновления.'"); - - КонецЕсли; - -КонецПроцедуры - // Для внутреннего использования. // Процедура ПроверитьВозможностьАдминистрированияОбменов() Экспорт @@ -5814,8 +6272,7 @@ Возврат Истина; КонецЕсли; - РолиПрофиля = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок( - РолиПрофиляДоступаСинхронизацияДанныхСДругимиПрограммами()); + РолиПрофиля = СтрРазделить(РолиПрофиляДоступаСинхронизацияДанныхСДругимиПрограммами(), ","); Для Каждого Роль Из РолиПрофиля Цикл Если Не Пользователь.Роли.Содержит(Метаданные.Роли.Найти(СокрЛП(Роль))) Тогда @@ -6206,7 +6663,6 @@ Возврат КлючСообщения; - КонецФункции // Возвращает имя файла сообщения обмена данными по данным узла-отправителя и узла-получателя. @@ -6240,26 +6696,6 @@ КонецФункции -// Возвращает массив всех видов транспорта сообщений обмена, определенных в конфигурации. -// -// Параметры: -// Нет. -// -// Возвращаемое значение: -// Массив - Элементы массива имеют тип "ПеречислениеСсылка.ВидыТранспортаСообщенийОбмена". -// -Функция ВсеТранспортыСообщенийОбменаКонфигурации() Экспорт - - Результат = Новый Массив; - Результат.Добавить(Перечисления.ВидыТранспортаСообщенийОбмена.COM); - Результат.Добавить(Перечисления.ВидыТранспортаСообщенийОбмена.WS); - Результат.Добавить(Перечисления.ВидыТранспортаСообщенийОбмена.FILE); - Результат.Добавить(Перечисления.ВидыТранспортаСообщенийОбмена.FTP); - Результат.Добавить(Перечисления.ВидыТранспортаСообщенийОбмена.EMAIL); - - Возврат Результат; -КонецФункции - // Возвращает признак успешного выполнения обмена данными. // Функция РезультатВыполненияОбменаВыполнено(РезультатВыполненияОбмена) @@ -6305,7 +6741,7 @@ ПараметрыПодключения.ИмяИнформационнойБазыНаСервере1СПредприятия = НастройкиТранспорта.COMИмяИнформационнойБазыНаСервере1СПредприятия; ПараметрыПодключения.АутентификацияОперационнойСистемы = НастройкиТранспорта.COMАутентификацияОперационнойСистемы; ПараметрыПодключения.ИмяПользователя = НастройкиТранспорта.COMИмяПользователя; - ПараметрыПодключения.ПарольПользователя = НастройкиТранспорта.COMПарольПользователя; + ПараметрыПодключения.ПарольПользователя = НастройкиТранспорта.COMПарольПользователя; Возврат ПараметрыПодключения; КонецФункции @@ -6488,8 +6924,7 @@ Процедура ЗафиксироватьЗавершениеОбменаСОшибкой(Знач УзелИнформационнойБазы, Знач ДействиеПриОбмене, Знач ДатаНачала, - Знач СтрокаСообщенияОбОшибке - ) Экспорт + Знач СтрокаСообщенияОбОшибке) Экспорт Если ТипЗнч(ДействиеПриОбмене) = Тип("Строка") Тогда @@ -6517,7 +6952,7 @@ // Процедура ВыполнитьСравнениеИОбъединениеТаблицФормы(Форма, Отказ) - ИмяПланаОбмена = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(Форма.ИмяФормы, ".")[1]; + ИмяПланаОбмена = СтрРазделить(Форма.ИмяФормы, ".")[1]; ДанныеКорреспондента = ОбщиеДанныеУзловКорреспондента(ИмяПланаОбмена, Форма.Параметры.ПараметрыПодключения, Отказ); @@ -6750,7 +7185,7 @@ РеквизитыФормы = ИменаРеквизитовФормы(Форма); - Для Каждого Реквизит Из СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(Реквизиты) Цикл + Для Каждого Реквизит Из СтрРазделить(Реквизиты, ",") Цикл Реквизит = СокрЛП(Реквизит); @@ -6765,8 +7200,7 @@ Если ОтсутствующиеРеквизиты.Количество() > 0 Тогда ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Отсутствуют обязательные реквизиты формы настройки узла: %1'"), - СтроковыеФункцииКлиентСервер.СтрокаИзМассиваПодстрок(ОтсутствующиеРеквизиты) - ); + СтрСоединить(ОтсутствующиеРеквизиты, ",")); КонецЕсли; КонецПроцедуры @@ -6911,7 +7345,7 @@ Для Каждого Элемент Из НастройкаОтбора.Значение Цикл - Если Найти(Элемент.Ключ, "_Ключ") > 0 Тогда + Если СтрНайти(Элемент.Ключ, "_Ключ") > 0 Тогда Ключ = СтрЗаменить(Элемент.Ключ, "_Ключ", ""); @@ -6939,7 +7373,7 @@ Иначе - Если Найти(НастройкаОтбора.Ключ, "_Ключ") > 0 Тогда + Если СтрНайти(НастройкаОтбора.Ключ, "_Ключ") > 0 Тогда Ключ = СтрЗаменить(НастройкаОтбора.Ключ, "_Ключ", ""); @@ -6976,7 +7410,7 @@ Для Каждого Элемент Из НастройкаОтбора.Значение Цикл - Если Найти(Элемент.Ключ, "_Ключ") <> 0 Тогда + Если СтрНайти(Элемент.Ключ, "_Ключ") <> 0 Тогда Продолжить; @@ -7000,7 +7434,7 @@ Иначе - Если Найти(НастройкаОтбора.Ключ, "_Ключ") <> 0 Тогда + Если СтрНайти(НастройкаОтбора.Ключ, "_Ключ") <> 0 Тогда Продолжить; @@ -7012,9 +7446,8 @@ // Экранирование перечисления Если ТипЗнч(НастройкаОтбора.Значение) = Тип("Строка") - И ( Найти(НастройкаОтбора.Значение, "Перечисление.") <> 0 - ИЛИ Найти(НастройкаОтбора.Значение, "Enumeration.") <> 0 - ) Тогда + И ( СтрНайти(НастройкаОтбора.Значение, "Перечисление.") <> 0 + ИЛИ СтрНайти(НастройкаОтбора.Значение, "Enumeration.") <> 0) Тогда Результат.Вставить(НастройкаОтбора.Ключ, ПредопределенноеЗначение(НастройкаОтбора.Значение)); @@ -7499,7 +7932,6 @@ СвойстваЭтогоУзла = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(ПланыОбмена[ИмяПланаОбмена].ЭтотУзел(), "Код, Наименование"); ПрефиксИнформационнойБазы = Неопределено; - ПрефиксИнформационнойБазы = ОбменДаннымиПереопределяемый.ПрефиксИнформационнойБазыПоУмолчанию(); ОбменДаннымиПереопределяемый.ПриОпределенииПрефиксаИнформационнойБазыПоУмолчанию(ПрефиксИнформационнойБазы); Результат.ПрефиксИнформационнойБазы = ПолучитьФункциональнуюОпцию("ПрефиксИнформационнойБазы"); @@ -7529,7 +7961,7 @@ ОтборМассив = ИнформацияСтатистики.ВыгрузитьКолонку("ИмяТаблицыПриемника"); - ОтборСтрока = СтроковыеФункцииКлиентСервер.СтрокаИзМассиваПодстрок(ОтборМассив); + ОтборСтрока = СтрСоединить(ОтборМассив, ","); Отбор = Новый Структура("ПолноеИмя", ОтборСтрока); @@ -7617,8 +8049,7 @@ Если Элемент.КоличествоОбъектовВПриемнике = Неопределено И Элемент.КоличествоОбъектовВИсточнике = Неопределено - И Элемент.Строки.Количество() = 0 - Тогда + И Элемент.Строки.Количество() = 0 Тогда Элементы.Удалить(Элемент); КонецЕсли; @@ -7699,16 +8130,6 @@ Возврат Результат; КонецФункции -// Добавляет параметры работы клиентской логики для подсистемы обмена данными. -// -Процедура ДобавитьПараметрыРаботыКлиента(Параметры) Экспорт - - УстановитьПривилегированныйРежим(Истина); - - Параметры.Вставить("ГлавныйУзел", ГлавныйУзел()); - -КонецПроцедуры - // Для внутреннего использования. // Процедура ВыполнитьПроверкуНаличияПравилОбменаЗагруженныхИзФайла(ПравилаОбменаЗагруженныеИзФайла, ПравилаРегистрацииЗагруженныеИзФайла) @@ -7757,7 +8178,7 @@ |Эти правила могут быть несовместимы с новой версией программы. |Для предупреждения возможного возникновения ошибок при работе с программой рекомендуется актуализировать правила обмена из файла.'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()); - СтрокаСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(СтрокаСообщения, СтроковыеФункцииКлиентСервер.СтрокаИзМассиваПодстрок(ПланыОбменаМассив)); + СтрокаСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(СтрокаСообщения, СтрСоединить(ПланыОбменаМассив, ",")); ЗаписьЖурналаРегистрации(ОбновлениеИнформационнойБазы.СобытиеЖурналаРегистрации(), УровеньЖурналаРегистрации.Ошибка,,, СтрокаСообщения); @@ -7777,6 +8198,12 @@ // Инициализация свойств обработки переданными параметрами настроек. ЗаполнитьЗначенияСвойств(ОбработкаОбъект, СтруктураНастроек); + // Привилегированный режим установлен выше + Если СтруктураНастроек.Свойство("Узел") Тогда + Пароли = ОбщегоНазначения.ПрочитатьДанныеИзБезопасногоХранилища(СтруктураНастроек.Узел, "COMПарольПользователя, FTPСоединениеПароль, WSПароль, ПарольАрхиваСообщенияОбмена", Истина); + ЗаполнитьЗначенияСвойств(ОбработкаОбъект, Пароли); + КонецЕсли; + // Инициализация транспорта обмена. ОбработкаОбъект.Инициализация(); @@ -7868,8 +8295,7 @@ НастройкаТранспорта(Параметры, "COMИмяИнформационнойБазыНаСервере1СПредприятия", "ИмяИнформационнойБазыНаСервере1СПредприятия", НастройкаТранспорта(Параметры, "COMАутентификацияОперационнойСистемы", "АутентификацияОперационнойСистемы", НастройкаТранспорта(Параметры, "COMИмяПользователя", "ИмяПользователя", - НастройкаТранспорта(Параметры, "COMПарольПользователя", "ПарольПользователя", - ))))))); + НастройкаТранспорта(Параметры, "COMПарольПользователя", "ПарольПользователя",))))))); Возврат НастройкиТранспорта; КонецФункции @@ -7885,60 +8311,6 @@ Возврат Результат; КонецФункции -// Для внутреннего использования. -// -Функция ПолучитьWSПроксиПоПараметрамПодключения( - СтруктураНастроек, - СтрокаСообщенияОбОшибке = "", - СообщениеПользователю = "", - ДелатьКонтрольныйВызов = Ложь - ) Экспорт - - Попытка - ОбменДаннымиКлиентСервер.ПроверитьНедопустимыеСимволыВИмениПользователяWSПрокси(СтруктураНастроек.WSИмяПользователя); - Исключение - СообщениеПользователю = КраткоеПредставлениеОшибки(ИнформацияОбОшибке()); - СтрокаСообщенияОбОшибке = ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); - ЗаписьЖурналаРегистрации(СобытиеЖурналаРегистрацииУстановкаПодключенияКWebСервису(), УровеньЖурналаРегистрации.Ошибка,,, СтрокаСообщенияОбОшибке); - Возврат Неопределено; - КонецПопытки; - - МестоположениеWSDL = "[URLВебСервиса]/ws/[ИмяСервиса]?wsdl"; - МестоположениеWSDL = СтрЗаменить(МестоположениеWSDL, "[URLВебСервиса]", СтруктураНастроек.WSURLВебСервиса); - МестоположениеWSDL = СтрЗаменить(МестоположениеWSDL, "[ИмяСервиса]", СтруктураНастроек.WSИмяСервиса); - - Попытка - WSПрокси = ОбщегоНазначения.WSПрокси( - МестоположениеWSDL, - СтруктураНастроек.WSURLПространстваИменСервиса, - СтруктураНастроек.WSИмяСервиса, - , - СтруктураНастроек.WSИмяПользователя, - СтруктураНастроек.WSПароль, - СтруктураНастроек.WSТаймаут, - ДелатьКонтрольныйВызов); - Исключение - СообщениеПользователю = КраткоеПредставлениеОшибки(ИнформацияОбОшибке()); - СтрокаСообщенияОбОшибке = ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); - ЗаписьЖурналаРегистрации(СобытиеЖурналаРегистрацииУстановкаПодключенияКWebСервису(), УровеньЖурналаРегистрации.Ошибка,,, СтрокаСообщенияОбОшибке); - Возврат Неопределено; - КонецПопытки; - - Возврат WSПрокси; -КонецФункции - -// Для внутреннего использования. -// -Функция СтруктураПараметровWS() Экспорт - - СтруктураПараметров = Новый Структура; - СтруктураПараметров.Вставить("WSURLВебСервиса"); - СтруктураПараметров.Вставить("WSИмяПользователя"); - СтруктураПараметров.Вставить("WSПароль"); - - Возврат СтруктураПараметров; -КонецФункции - // Для внутреннего использования. // Функция ПолучитьWSПрокси(СтруктураНастроек, СтрокаСообщенияОбОшибке = "", СообщениеПользователю = "") Экспорт @@ -8085,10 +8457,27 @@ Попытка + КодКорреспондента = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(ОбменДаннымиПовтИсп.ПолучитьЭтотУзелПланаОбменаПоСсылке(Корреспондент), "Код"); + ИмяПланаОбмена = ОбменДаннымиПовтИсп.ПолучитьИмяПланаОбмена(Корреспондент); ЕстьПодключение = WSПрокси.TestConnection( - ОбменДаннымиПовтИсп.ПолучитьИмяПланаОбмена(Корреспондент), - ОбщегоНазначения.ЗначениеРеквизитаОбъекта(ОбменДаннымиПовтИсп.ПолучитьЭтотУзелПланаОбменаПоСсылке(Корреспондент), "Код"), + ИмяПланаОбмена, + КодКорреспондента, СообщениеПользователю); + + Если НЕ ЕстьПодключение Тогда + Если ОбменДаннымиПовтИсп.ЭтоПланОбменаXDTO(Корреспондент) Тогда + ИмяПланаОбменаСтаройНастройки = ""; + ВариантНастройки = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(Корреспондент, "ВариантНастройки"); + ИмяПланаОбменаСтаройНастройки = + ПланыОбмена[ИмяПланаОбмена].ИмяПланаОбменаСтаройНастройки(КодКорреспондента); + Если ИмяПланаОбменаСтаройНастройки <> "" Тогда + ЕстьПодключение = WSПрокси.TestConnection( + ИмяПланаОбменаСтаройНастройки, + КодКорреспондента, + СообщениеПользователю); + КонецЕсли; + КонецЕсли; + КонецЕсли; Если ЕстьПодключение Тогда УстановитьПарольСинхронизацииДанных(Корреспондент, СтруктураНастроек.WSПароль); @@ -8267,7 +8656,10 @@ // Для внутреннего использования. // -Процедура ВыполнитьОбновлениеВерсииТиповыхПравилДляОбменаДанными(Отказ, ПравилаОбменаЗагруженныеИзФайла, ПравилаРегистрацииЗагруженныеИзФайла) +Процедура ВыполнитьОбновлениеВерсииТиповыхПравилДляОбменаДанными(ПравилаОбменаЗагруженныеИзФайла, ПравилаРегистрацииЗагруженныеИзФайла) + + Отказ = Ложь; + ТекстЗапроса = ""; Для Каждого ИмяПланаОбмена Из ОбменДаннымиПовтИсп.ПланыОбменаБСП() Цикл @@ -8276,6 +8668,33 @@ Продолжить; КонецЕсли; + Если НЕ ПустаяСтрока(ТекстЗапроса) Тогда + ТекстЗапроса = ТекстЗапроса + Символы.ПС + "ОБЪЕДИНИТЬ ВСЕ" + Символы.ПС; + КонецЕсли; + + ТекстЗапроса = ТекстЗапроса + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку("ВЫБРАТЬ + | КОЛИЧЕСТВО (%1.Ссылка) КАК Количество, + | ""%1"" КАК ИмяПланаОбмена + |ИЗ + | ПланОбмена.%1 КАК %1", ИмяПланаОбмена); + + КонецЦикла; + Если ПустаяСтрока(ТекстЗапроса) Тогда + Возврат; + КонецЕсли; + Запрос = Новый Запрос(ТекстЗапроса); + Результат = Запрос.Выполнить().Выгрузить(); + + ВыполненоОбновлениеПравил = Ложь; + Для Каждого ЗаписьПланаОбмена Из Результат Цикл + + Если ЗаписьПланаОбмена.Количество <= 1 + И Не ОбщегоНазначенияПовтИсп.РазделениеВключено() Тогда // только ЭтотУзел + Продолжить; + КонецЕсли; + + ИмяПланаОбмена = ЗаписьПланаОбмена.ИмяПланаОбмена; + Если ПравилаОбменаЗагруженныеИзФайла.Найти(ИмяПланаОбмена) = Неопределено И ОбменДаннымиПовтИсп.ЕстьМакетПланаОбмена(ИмяПланаОбмена, "ПравилаОбмена") И ОбменДаннымиПовтИсп.ЕстьМакетПланаОбмена(ИмяПланаОбмена, "ПравилаОбменаКорреспондента") Тогда @@ -8287,6 +8706,8 @@ ЗагрузитьПравилаДляОбменаДанными(Отказ, ИмяПланаОбмена, Перечисления.ВидыПравилДляОбменаДанными.ПравилаКонвертацииОбъектов, "ПравилаОбмена", "ПравилаОбменаКорреспондента"); + + ВыполненоОбновлениеПравил = Истина; КонецЕсли; @@ -8300,10 +8721,20 @@ ЗагрузитьПравилаДляОбменаДанными(Отказ, ИмяПланаОбмена, Перечисления.ВидыПравилДляОбменаДанными.ПравилаРегистрацииОбъектов, "ПравилаРегистрации"); + ВыполненоОбновлениеПравил = Истина; + КонецЕсли; КонецЦикла; + Если Отказ Тогда + ВызватьИсключение НСтр("ru = 'При обновлении правил обмена данными возникли ошибки (см. Журнал регистрации).'"); + КонецЕсли; + + Если ВыполненоОбновлениеПравил Тогда + ОбменДаннымиВызовСервера.СброситьКэшМеханизмаРегистрацииОбъектов(); + КонецЕсли; + КонецПроцедуры // Создает набор записей регистра сведений по переданным значениям структуры. Добавляет одну запись в набор. @@ -8484,7 +8915,7 @@ Возврат; КонецЕсли; - Если ПолучитьФункциональнуюОпцию("ИспользоватьСинхронизациюДанных") = Истина Тогда + Если ПолучитьФункциональнуюОпцию("ИспользоватьСинхронизациюДанных") Тогда УзелИнформационнойБазы = ГлавныйУзел(); @@ -8502,8 +8933,11 @@ Отказ = Ложь; - // только загрузка - ВыполнитьОбменДаннымиДляУзлаИнформационнойБазы(Отказ, УзелИнформационнойБазы, Истина, Ложь, ВидТранспорта); + ПараметрыОбмена = ПараметрыОбмена(); + ПараметрыОбмена.ВидТранспортаСообщенийОбмена = ВидТранспорта; + ПараметрыОбмена.ВыполнятьЗагрузку = Истина; + ПараметрыОбмена.ВыполнятьВыгрузку = Ложь; + ВыполнитьОбменДаннымиДляУзлаИнформационнойБазы(УзелИнформационнойБазы, ПараметрыОбмена, Отказ); // Режим повтора требует включения в следующих случаях. // Случай 1. Получены метаданные с новой версией конфигурации, т.е. будет выполнено обновление ИБ. @@ -8546,7 +8980,7 @@ ОтключитьПовторениеЗагрузкиСообщенияОбменаДаннымиПередЗапуском(); Попытка - Если ПолучитьФункциональнуюОпцию("ИспользоватьСинхронизациюДанных") = Истина Тогда + Если ПолучитьФункциональнуюОпцию("ИспользоватьСинхронизациюДанных") Тогда УзелИнформационнойБазы = ГлавныйУзел(); @@ -8569,8 +9003,13 @@ Если ВыполнитьВыгрузку Тогда - // только выгрузка - ВыполнитьОбменДаннымиДляУзлаИнформационнойБазы(Ложь, УзелИнформационнойБазы, Ложь, Истина, ВидТранспорта); + Отказ = Ложь; + + ПараметрыОбмена = ПараметрыОбмена(); + ПараметрыОбмена.ВидТранспортаСообщенийОбмена = ВидТранспорта; + ПараметрыОбмена.ВыполнятьЗагрузку = Ложь; + ПараметрыОбмена.ВыполнятьВыгрузку = Истина; + ВыполнитьОбменДаннымиДляУзлаИнформационнойБазы(УзелИнформационнойБазы, ПараметрыОбмена, Отказ); КонецЕсли; @@ -8585,23 +9024,12 @@ КонецПроцедуры -// Устанавливает признак повторения загрузки при ошибке загрузки или обновления. -// Очищает хранилище сообщения обмена, полученного из главного узла РИБ. -// -Процедура ВключитьПовторениеЗагрузкиСообщенияОбменаДаннымиПередЗапуском() - - ОчиститьСообщениеОбменаДаннымиИзГлавногоУзла(); - - Константы.ПовторитьЗагрузкуСообщенияОбменаДаннымиПередЗапуском.Установить(Истина); - -КонецПроцедуры - // Сбрасывает признак повторения загрузки при ошибке загрузки или обновления. Процедура ОтключитьПовторениеЗагрузкиСообщенияОбменаДаннымиПередЗапуском() Экспорт УстановитьПривилегированныйРежим(Истина); - Если Константы.ПовторитьЗагрузкуСообщенияОбменаДаннымиПередЗапуском.Получить() = Истина Тогда + Если Константы.ПовторитьЗагрузкуСообщенияОбменаДаннымиПередЗапуском.Получить() Тогда Константы.ПовторитьЗагрузкуСообщенияОбменаДаннымиПередЗапуском.Установить(Ложь); КонецЕсли; @@ -8679,8 +9107,7 @@ // Функция СостояниеДлительнойОперацииДляУзлаИнформационнойБазы(Знач УзелИнформационнойБазы, Знач ИдентификаторОперации, - СтрокаСообщенияОбОшибке = "" - ) Экспорт + СтрокаСообщенияОбОшибке = "") Экспорт WSПрокси = ПолучитьWSПроксиДляУзлаИнформационнойБазы(УзелИнформационнойБазы, СтрокаСообщенияОбОшибке); @@ -8797,7 +9224,7 @@ УстановитьПривилегированныйРежим(Истина); - Возврат Константы.ЗагрузитьСообщениеОбменаДанными.Получить() = Истина; + Возврат Константы.ЗагрузитьСообщениеОбменаДанными.Получить(); КонецФункции @@ -9123,8 +9550,7 @@ ПолноеИмя = Объект.Метаданные().ПолноеИмя(); Возврат ОбщегоНазначенияПовтИсп.ЭтоРазделенныйОбъектМетаданных(ПолноеИмя, ОбщегоНазначенияПовтИсп.РазделительОсновныхДанных()) - ИЛИ ОбщегоНазначенияПовтИсп.ЭтоРазделенныйОбъектМетаданных(ПолноеИмя, ОбщегоНазначенияПовтИсп.РазделительВспомогательныхДанных()) - ; + ИЛИ ОбщегоНазначенияПовтИсп.ЭтоРазделенныйОбъектМетаданных(ПолноеИмя, ОбщегоНазначенияПовтИсп.РазделительВспомогательныхДанных()); КонецФункции //////////////////////////////////////////////////////////////////////////////// @@ -9475,12 +9901,11 @@ |ИЗ | ПланОбмена." + ИмяПланаОбмена + " КАК ПланОбмена |ГДЕ - | ПланОбмена.Ссылка <> &ЭтотУзел + | НЕ ПланОбмена.ЭтотУзел |"; Запрос = Новый Запрос; Запрос.Текст = ТекстЗапроса; - Запрос.УстановитьПараметр("ЭтотУзел", ПланыОбмена[ИмяПланаОбмена].ЭтотУзел()); Возврат Запрос.Выполнить().Пустой() @@ -9604,8 +10029,7 @@ УзелИнформационнойБазы, ДействиеПриОбмене, ВидТранспортаСообщенийОбмена, - ИспользоватьНастройкиТранспорта = Истина - ) Экспорт + ИспользоватьНастройкиТранспорта = Истина) Экспорт // Возвращаемое значение функции. СтруктураНастроекОбмена = СтруктураНастроекОбменаБазовая(); @@ -9747,14 +10171,6 @@ Возврат СтруктураНастроекОбмена; КонецФункции -// Для внутреннего использования. -// -Функция СтруктураНастроекОбменаДляСеансаИнтерактивнойЗагрузки(Знач УзелИнформационнойБазы, Знач ИмяФайлаСообщенияОбмена) Экспорт - - Возврат ОбменДаннымиПовтИсп.СтруктураНастроекОбменаДляСеансаИнтерактивнойЗагрузки(УзелИнформационнойБазы, ИмяФайлаСообщенияОбмена); - -КонецФункции - // Получает структуру настроек транспорта для выполнения обмена данными. // Функция ПолучитьСтруктуруНастроекТранспорта(УзелИнформационнойБазы, ВидТранспортаСообщенийОбмена) Экспорт @@ -9782,6 +10198,14 @@ Возврат СтруктураНастроекОбмена; КонецФункции +// Для внутреннего использования. +// +Функция СтруктураНастроекОбменаДляСеансаИнтерактивнойЗагрузки(Знач УзелИнформационнойБазы, Знач ИмяФайлаСообщенияОбмена) Экспорт + + Возврат ОбменДаннымиПовтИсп.СтруктураНастроекОбменаДляСеансаИнтерактивнойЗагрузки(УзелИнформационнойБазы, ИмяФайлаСообщенияОбмена); + +КонецФункции + // Для внутреннего использования. // Процедура ВыполнитьИнициализациюСтруктурыНастроекОбмена(СтруктураНастроекОбмена, НастройкаВыполненияОбмена, НомерСтроки) @@ -10557,7 +10981,8 @@ Функция КоличествоПроблемВерсионирования(УзлыОбмена = Неопределено, ЭтоКоличествоКоллизий = Неопределено, УчитыватьПроигнорированные = Ложь, Период = Неопределено, СтрокаПоиска = "") Экспорт - Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ВерсионированиеОбъектов") Тогда + ИспользуетсяВерсионирование = ОбменДаннымиПовтИсп.ИспользуетсяВерсионирование(, Истина); + Если ИспользуетсяВерсионирование Тогда МодульВерсионированиеОбъектов = ОбщегоНазначения.ОбщийМодуль("ВерсионированиеОбъектов"); Возврат МодульВерсионированиеОбъектов.КоличествоКоллизийИлиНепринятых(УзлыОбмена, ЭтоКоличествоКоллизий, УчитыватьПроигнорированные, Период, СтрокаПоиска); @@ -10612,7 +11037,7 @@ ПричинаОшибки = ТекстСообщения; Если Не ПустаяСтрока(СокрЛП(ТекстСообщения)) Тогда - ПричинаОшибки = НСтр("ru = ' По причине %1.'"); + ПричинаОшибки = " " + НСтр("ru = 'По причине %1.'"); ПричинаОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ПричинаОшибки, ТекстСообщения); КонецЕсли; @@ -10674,7 +11099,7 @@ ПричинаОшибки = ТекстСообщения; Если Не ПустаяСтрока(СокрЛП(ТекстСообщения)) Тогда - ПричинаОшибки = НСтр("ru = ' По причине %1.'"); + ПричинаОшибки = " " + НСтр("ru = 'По причине %1.'"); ПричинаОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ПричинаОшибки, ТекстСообщения); КонецЕсли; @@ -10691,6 +11116,127 @@ КонецПроцедуры +//////////////////////////////////////////////////////////////////////////////// +// Прогресс-бар. + +// Подсчет количества объектов ИБ, подлежащих выгрузке при создании начального образа. +// +// Параметры: +// Получатель - План обмена объект. +// +// Возвращаемое значение - число. +Функция РассчитатьКоличествоОбъектовВБазе(Получатель) + + ИмяПланаОбмена = Получатель.Метаданные().Имя; + СчетчикОбъектов = 0; + СоставПланаОбмена = Метаданные.ПланыОбмена[ИмяПланаОбмена].Состав; + + // 1. "Ссылочные" объекты. + СтруктураСсылочныхОбъектов = Новый Структура; + СтруктураСсылочныхОбъектов.Вставить("Справочник", Метаданные.Справочники); + СтруктураСсылочныхОбъектов.Вставить("Документ", Метаданные.Документы); + СтруктураСсылочныхОбъектов.Вставить("ПланВидовХарактеристик", Метаданные.ПланыВидовХарактеристик); + СтруктураСсылочныхОбъектов.Вставить("ПланВидовРасчета", Метаданные.ПланыВидовРасчета); + СтруктураСсылочныхОбъектов.Вставить("ПланСчетов", Метаданные.ПланыСчетов); + СтруктураСсылочныхОбъектов.Вставить("БизнесПроцесс", Метаданные.БизнесПроцессы); + СтруктураСсылочныхОбъектов.Вставить("Задача", Метаданные.Задачи); + СтруктураСсылочныхОбъектов.Вставить("ПланСчетов", Метаданные.ПланыСчетов); + + ТекстЗапроса = "ВЫБРАТЬ + |Количество(Ссылка) КАК КоличествоОбъектов + |ИЗ "; + Для Каждого СсылочныйОбъект Из СтруктураСсылочныхОбъектов Цикл + Для Каждого ОбъектМетаданных Из СсылочныйОбъект.Значение Цикл + Если СоставПланаОбмена.Найти(ОбъектМетаданных) = Неопределено Тогда + Продолжить; + КонецЕсли; + ПолноеИмяОбъекта = СсылочныйОбъект.Ключ +"."+ОбъектМетаданных.Имя; + Запрос = Новый Запрос; + Запрос.Текст = ТекстЗапроса + ПолноеИмяОбъекта; + Выборка = Запрос.Выполнить().Выбрать(); + Если Выборка.Следующий() Тогда + СчетчикОбъектов = СчетчикОбъектов + Выборка.КоличествоОбъектов; + КонецЕсли; + КонецЦикла; + КонецЦикла; + + // 2. Константы. + Для Каждого ОбъектМетаданных Из Метаданные.Константы Цикл + Если СоставПланаОбмена.Найти(ОбъектМетаданных) = Неопределено Тогда + Продолжить; + КонецЕсли; + СчетчикОбъектов = СчетчикОбъектов + 1; + КонецЦикла; + + // 3. Регистры сведений. + ТекстЗапроса = "ВЫБРАТЬ + |Количество(*) КАК КоличествоОбъектов + |ИЗ "; + ТекстЗапросаСРегистратором = "ВЫБРАТЬ + |Количество(РАЗЛИЧНЫЕ Регистратор) КАК КоличествоОбъектов + |ИЗ "; + Для Каждого ОбъектМетаданных Из Метаданные.РегистрыСведений Цикл + Если СоставПланаОбмена.Найти(ОбъектМетаданных) = Неопределено Тогда + Продолжить; + КонецЕсли; + ПолноеИмяОбъекта = "РегистрСведений."+ОбъектМетаданных.Имя; + Запрос = Новый Запрос; + Если ОбъектМетаданных.ПериодичностьРегистраСведений = Метаданные.СвойстваОбъектов.ПериодичностьРегистраСведений.ПозицияРегистратора Тогда + Запрос.Текст = ТекстЗапросаСРегистратором + ПолноеИмяОбъекта; + Иначе + Запрос.Текст = ТекстЗапроса + ПолноеИмяОбъекта; + КонецЕсли; + + Выборка = Запрос.Выполнить().Выбрать(); + Если Выборка.Следующий() Тогда + СчетчикОбъектов = СчетчикОбъектов + Выборка.КоличествоОбъектов; + КонецЕсли; + КонецЦикла; + + // 4. Регистры (подчиненные регистратору) и последовательности. + СтруктураРегистров = Новый Структура; + СтруктураРегистров.Вставить("РегистрНакопления", Метаданные.РегистрыНакопления); + СтруктураРегистров.Вставить("РегистрРасчета", Метаданные.РегистрыРасчета); + СтруктураРегистров.Вставить("РегистрБухгалтерии", Метаданные.РегистрыБухгалтерии); + СтруктураРегистров.Вставить("Последовательность", Метаданные.Последовательности); + + ТекстЗапроса = ТекстЗапросаСРегистратором; + Для Каждого Регистр Из СтруктураРегистров Цикл + Для Каждого ОбъектМетаданных Из Регистр.Значение Цикл + Если СоставПланаОбмена.Найти(ОбъектМетаданных) = Неопределено Тогда + Продолжить; + КонецЕсли; + ПолноеИмяОбъекта = Регистр.Ключ +"."+ОбъектМетаданных.Имя; + Запрос = Новый Запрос; + Запрос.Текст = ТекстЗапроса + ПолноеИмяОбъекта; + Выборка = Запрос.Выполнить().Выбрать(); + Если Выборка.Следующий() Тогда + СчетчикОбъектов = СчетчикОбъектов + Выборка.КоличествоОбъектов; + КонецЕсли; + КонецЦикла; + КонецЦикла; + + Возврат СчетчикОбъектов; + +КонецФункции + +// Подсчет количества объектов, зарегистрированных в плане обмена. +// +// Параметры: +// Получатель - План обмена объект. +// +// Возвращаемое значение - число. +Функция РассчитатьКоличествоЗарегистрированныхОбъектов(Получатель) + + ВыборкаИзменений = ПланыОбмена.ВыбратьИзменения(Получатель.Ссылка, Получатель.НомерОтправленного + 1); + КоличествоОбъектовКВыгрузке = 0; + Пока ВыборкаИзменений.Следующий() Цикл + КоличествоОбъектовКВыгрузке = КоличествоОбъектовКВыгрузке + 1; + КонецЦикла; + Возврат КоличествоОбъектовКВыгрузке; + +КонецФункции + //////////////////////////////////////////////////////////////////////////////// // ПРОЦЕДУРЫ И ФУНКЦИИ ОБЩЕГО НАЗНАЧЕНИЯ @@ -10761,8 +11307,7 @@ Возврат НСтр("ru = 'Синхронизация не выполнялась.'"); КонецЕсли; - Возврат СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Последняя синхронизация: %1'"), - ОтносительнаяДатаСинхронизации(ДатаСинхронизации)); + Возврат СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Последняя синхронизация: %1'"), ОтносительнаяДатаСинхронизации(ДатаСинхронизации)); КонецФункции // Возвращает представление относительной даты синхронизации. @@ -11081,7 +11626,7 @@ // Функция ЭтоОшибкаНомерСообщенияМеньшеИлиРавенНомеруРанееПринятогоСообщения(ОписаниеОшибки) - Возврат Найти(НРег(ОписаниеОшибки), НРег("ru = 'Номер сообщения меньше или равен'")) > 0; + Возврат СтрНайти(НРег(ОписаниеОшибки), НРег("ru = 'Номер сообщения меньше или равен'")) > 0; КонецФункции @@ -11531,23 +12076,19 @@ ПараметрыСценарияДополнения.Вставить("ВариантБезДополнения", Новый Структура("Использование, Порядок, Заголовок", Истина, 1)); ПараметрыСценарияДополнения.ВариантБезДополнения.Вставить("Пояснение", - НСтр("ru='Будут отправлены только данные согласно общим настройкам.'") - ); + НСтр("ru='Будут отправлены только данные согласно общим настройкам.'")); ПараметрыСценарияДополнения.Вставить("ВариантВсеДокументы", Новый Структура("Использование, Порядок, Заголовок", Истина, 2)); ПараметрыСценарияДополнения.ВариантВсеДокументы.Вставить("Пояснение", - НСтр("ru='Дополнительно будут отправлены все документы за период, удовлетворяющие условиям отбора.'") - ); + НСтр("ru='Дополнительно будут отправлены все документы за период, удовлетворяющие условиям отбора.'")); ПараметрыСценарияДополнения.Вставить("ВариантПроизвольныйОтбор", Новый Структура("Использование, Порядок, Заголовок", Истина, 3)); ПараметрыСценарияДополнения.ВариантПроизвольныйОтбор.Вставить("Пояснение", - НСтр("ru='Дополнительно будут отправлены данные согласно отбору.'") - ); + НСтр("ru='Дополнительно будут отправлены данные согласно отбору.'")); ПараметрыСценарияДополнения.Вставить("ВариантДополнительно", Новый Структура("Использование, Порядок, Заголовок", Ложь, 4)); ПараметрыСценарияДополнения.ВариантДополнительно.Вставить("Пояснение", - НСтр("ru='Будут отправлены дополнительные данные по настройкам.'") - ); + НСтр("ru='Будут отправлены дополнительные данные по настройкам.'")); ВариантДополнительно = ПараметрыСценарияДополнения.ВариантДополнительно; ВариантДополнительно.Вставить("Заголовок", ""); @@ -11988,26 +12529,22 @@ КонецЕсли; Если ПараметрыСценарияДополнения.Свойство("ВариантБезДополнения") - И ПараметрыСценарияДополнения.ВариантБезДополнения.Использование - Тогда + И ПараметрыСценарияДополнения.ВариантБезДополнения.Использование Тогда Результат.Добавить(0); КонецЕсли; Если ПараметрыСценарияДополнения.Свойство("ВариантВсеДокументы") - И ПараметрыСценарияДополнения.ВариантВсеДокументы.Использование - Тогда + И ПараметрыСценарияДополнения.ВариантВсеДокументы.Использование Тогда Результат.Добавить(1); КонецЕсли; Если ПараметрыСценарияДополнения.Свойство("ВариантПроизвольныйОтбор") - И ПараметрыСценарияДополнения.ВариантПроизвольныйОтбор.Использование - Тогда + И ПараметрыСценарияДополнения.ВариантПроизвольныйОтбор.Использование Тогда Результат.Добавить(2); КонецЕсли; Если ПараметрыСценарияДополнения.Свойство("ВариантДополнительно") - И ПараметрыСценарияДополнения.ВариантДополнительно.Использование - Тогда + И ПараметрыСценарияДополнения.ВариантДополнительно.Использование Тогда Результат.Добавить(3); КонецЕсли; @@ -12045,22 +12582,17 @@ // Процедура ПриЗаполненииСпискаТекущихДелПредупрежденияСинхронизации(ТекущиеДела) - МодульТекущиеДелаСлужебный = ОбщегоНазначения.ОбщийМодуль("ТекущиеДелаСлужебный"); + МодульТекущиеДелаСервер = ОбщегоНазначения.ОбщийМодуль("ТекущиеДелаСервер"); Если Не ПравоДоступа("Просмотр", Метаданные.РегистрыСведений.РезультатыОбменаДанными) - Или МодульТекущиеДелаСлужебный.ДелоОтключено("ПредупрежденияПриСинхронизации") Тогда + Или МодульТекущиеДелаСервер.ДелоОтключено("ПредупрежденияПриСинхронизации") Тогда Возврат; КонецЕсли; - МодульТекущиеДелаСервер = ОбщегоНазначения.ОбщийМодуль("ТекущиеДелаСервер"); КоличествоНерассмотренныхПроблем = КоличествоНерассмотренныхПроблем(); // Процедура вызывается только при наличии подсистемы "Текущие дела", поэтому здесь // не делается проверка существования подсистемы. - Разделы = МодульТекущиеДелаСервер.РазделыДляОбъекта(Метаданные.ОбщиеФормы.ОбменыДанными.ПолноеИмя()); - - Если Разделы = Неопределено Тогда - Возврат; - КонецЕсли; + Разделы = МодульТекущиеДелаСервер.РазделыДляОбъекта(Метаданные.ОбщиеФормы.СинхронизацияДанных.ПолноеИмя()); Для Каждого Раздел Из Разделы Цикл @@ -12095,22 +12627,17 @@ // Процедура ПриЗаполненииСпискаТекущихДелНеобходимоОбновление(ТекущиеДела) - МодульТекущиеДелаСлужебный = ОбщегоНазначения.ОбщийМодуль("ТекущиеДелаСлужебный"); + МодульТекущиеДелаСервер = ОбщегоНазначения.ОбщийМодуль("ТекущиеДелаСервер"); Если Не ПравоДоступа("Администрирование", Метаданные) - Или МодульТекущиеДелаСлужебный.ДелоОтключено("НеобходимоОбновлениеОбменДанными") Тогда + Или МодульТекущиеДелаСервер.ДелоОтключено("НеобходимоОбновлениеОбменДанными") Тогда Возврат; КонецЕсли; - МодульТекущиеДелаСервер = ОбщегоНазначения.ОбщийМодуль("ТекущиеДелаСервер"); ТребуетсяУстановкаОбновления = ТребуетсяУстановкаОбновления(); // Процедура вызывается только при наличии подсистемы "Текущие дела", поэтому здесь // не делается проверка существования подсистемы. - Разделы = МодульТекущиеДелаСервер.РазделыДляОбъекта(Метаданные.ОбщиеФормы.ОбменыДанными.ПолноеИмя()); - - Если Разделы = Неопределено Тогда - Возврат; - КонецЕсли; + Разделы = МодульТекущиеДелаСервер.РазделыДляОбъекта(Метаданные.ОбщиеФормы.СинхронизацияДанных.ПолноеИмя()); Для Каждого Раздел Из Разделы Цикл @@ -12154,9 +12681,9 @@ // Процедура ПриЗаполненииСпискаТекущихДелПроверитьСовместимостьСТекущейВерсией(ТекущиеДела) - МодульТекущиеДелаСлужебный = ОбщегоНазначения.ОбщийМодуль("ТекущиеДелаСлужебный"); + МодульТекущиеДелаСервер = ОбщегоНазначения.ОбщийМодуль("ТекущиеДелаСервер"); Если Не ПравоДоступа("Редактирование", Метаданные.РегистрыСведений.ПравилаДляОбменаДанными) - Или МодульТекущиеДелаСлужебный.ДелоОтключено("ПравилаОбмена") Тогда + Или МодульТекущиеДелаСервер.ДелоОтключено("ПравилаОбмена") Тогда Возврат; КонецЕсли; @@ -12171,7 +12698,7 @@ ВывестиДело = Истина; ПровереноНаВерсию = ХранилищеОбщихНастроек.Загрузить("ТекущиеДела", "ПланыОбмена"); Если ПровереноНаВерсию <> Неопределено Тогда - ВерсияМассив = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(Метаданные.Версия, "."); + ВерсияМассив = СтрРазделить(Метаданные.Версия, "."); ТекущаяВерсия = ВерсияМассив[0] + ВерсияМассив[1] + ВерсияМассив[2]; Если ПровереноНаВерсию = ТекущаяВерсия Тогда ВывестиДело = Ложь; // Дополнительные отчеты и обработки проверены на текущей версии. @@ -12186,7 +12713,7 @@ Дело.ЕстьДела = ВывестиДело И ПланыОбменаСПравиламиИзФайла > 0; Дело.Представление = НСтр("ru = 'Правила обмена'"); Дело.Количество = ПланыОбменаСПравиламиИзФайла; - Дело.Форма = "РегистрСведений.ПравилаДляОбменаДанными.Форма.ПроверкаПлановОбмена"; + Дело.Форма = "РегистрСведений.ПравилаДляОбменаДанными.Форма.ПроверкаСинхронизацииДанных"; Дело.Владелец = "ПроверитьСовместимостьСТекущейВерсией"; // Проверка наличия группы дела. Если группа отсутствует - добавляем. diff --git a/SSL/src/CommonModules/ОбменДаннымиСлужебный/Module.bsl b/SSL/src/CommonModules/ОбменДаннымиСлужебный/Module.bsl new file mode 100644 index 000000000..c65f95613 --- /dev/null +++ b/SSL/src/CommonModules/ОбменДаннымиСлужебный/Module.bsl @@ -0,0 +1,492 @@ +#Область СлужебныйПрограммныйИнтерфейс + +// Для внутреннего использования. +Функция ЗагрузитьЧастьФайла(ИдентификаторФайла, НомерЗагружаемойЧастиФайла, ЗагружаемаяЧастьФайла, СообщениеОбОшибке) Экспорт + + СообщениеОбОшибке = ""; + + Если Не ЗначениеЗаполнено(ИдентификаторФайла) Тогда + СообщениеОбОшибке = НСтр("ru = 'Не указан идентификатор загружаемого файла. Дальнейшее выполнение метода невозможно. + |Необходимо для загружаемого файла назначить уникальный идентификатор.'"); + ВызватьИсключение(СообщениеОбОшибке); + КонецЕсли; + + Если Не ЗначениеЗаполнено(ЗагружаемаяЧастьФайла) + И ТипЗнч(ЗагружаемаяЧастьФайла) <> Тип("ДвоичныеДанные") Тогда + СообщениеОбОшибке = НСтр("ru = 'Метод не может быть выполнен, т.к. переданные данные не соответствуют типу для получения данных.'"); + ВызватьИсключение(СообщениеОбОшибке); + КонецЕсли; + + Если Не ЗначениеЗаполнено(НомерЗагружаемойЧастиФайла) + Или НомерЗагружаемойЧастиФайла = 0 Тогда + НомерЗагружаемойЧастиФайла = 1; + КонецЕсли; + + КаталогВременныхФайлов = ВременныйКаталогВыгрузки(ИдентификаторФайла); + + Каталог = Новый Файл(КаталогВременныхФайлов); + Если Не Каталог.Существует() Тогда + СоздатьКаталог(КаталогВременныхФайлов); + КонецЕсли; + + ИмяФайла = ОбщегоНазначенияКлиентСервер.ПолучитьПолноеИмяФайла(КаталогВременныхФайлов, ПолучитьИмяЧастиФайла(НомерЗагружаемойЧастиФайла)); + ЗагружаемаяЧастьФайла.Записать(ИмяФайла); + +КонецФункции + +// Для внутреннего использования. +Функция ВыгрузитьЧастьФайла(ИдентификаторФайла, НомерВыгружаемойЧастиФайла, СообщениеОбОшибке) Экспорт + + СообщениеОбОшибке = ""; + ИмяЧастиФайла = ""; + КаталогВременныхФайлов = ВременныйКаталогВыгрузки(ИдентификаторФайла); + + Для КоличествоРазрядов = СтрДлина(Формат(НомерВыгружаемойЧастиФайла, "ЧДЦ=0; ЧГ=0")) По 5 Цикл + + ФорматнаяСтрока = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку("ЧЦ=%1; ЧВН=; ЧГ=0", Строка(КоличествоРазрядов)); + + ИмяФайла = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку("%1.zip.%2", ИдентификаторФайла, Формат(НомерВыгружаемойЧастиФайла, ФорматнаяСтрока)); + + ИменаФайлов = НайтиФайлы(КаталогВременныхФайлов, ИмяФайла); + + Если ИменаФайлов.Количество() > 0 Тогда + + ИмяЧастиФайла = ОбщегоНазначенияКлиентСервер.ПолучитьПолноеИмяФайла(КаталогВременныхФайлов, ИмяФайла); + Прервать; + + КонецЕсли; + + КонецЦикла; + + ЧастьФайла = Новый Файл(ИмяЧастиФайла); + + Если ЧастьФайла.Существует() Тогда + Возврат Новый ДвоичныеДанные(ИмяЧастиФайла); + Иначе + СообщениеОбОшибке = НСтр("ru = 'Часть файла с указанным номером не найдена.'"); + КонецЕсли; + +КонецФункции + +// Для внутреннего использования. +Функция ПодготовитьФайлДляЗагрузки(ИдентификаторФайла, СообщениеОбОшибке) Экспорт + + УстановитьПривилегированныйРежим(Истина); + + ИдентификаторФайлаВоВременномХранилище = ""; + + КаталогВременныхФайлов = ВременныйКаталогВыгрузки(ИдентификаторФайла); + ИмяАрхива = ОбщегоНазначенияКлиентСервер.ПолучитьПолноеИмяФайла(КаталогВременныхФайлов, "datafile.zip"); + + МассивПолученныхФайлов = НайтиФайлы(КаталогВременныхФайлов,"data.zip.*"); + + Если МассивПолученныхФайлов.Количество() > 0 Тогда + + ФайлыДляОбъединения = Новый Массив(); + ИмяЧастиФайла = ОбщегоНазначенияКлиентСервер.ПолучитьПолноеИмяФайла(КаталогВременныхФайлов, "data.zip.%1"); + + Для НомерЧасти = 1 По МассивПолученныхФайлов.Количество() Цикл + ФайлыДляОбъединения.Добавить(СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ИмяЧастиФайла, НомерЧасти)); + КонецЦикла; + + Иначе + ШаблонСообщения = НСтр("ru = 'Не найден ни один фрагмент сессии передачи с идентификатором %1. + |Необходимо убедиться, что в настройках программы заданы параметры + |""Каталог временных файлов для Linux"" и ""Каталог временных файлов для Windows"".'"); + СообщениеОбОшибке = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонСообщения, Строка(ИдентификаторФайла)); + ВызватьИсключение(СообщениеОбОшибке); + КонецЕсли; + + Попытка + ОбъединитьФайлы(ФайлыДляОбъединения, ИмяАрхива); + Исключение + СообщениеОбОшибке = КраткоеПредставлениеОшибки(ИнформацияОбОшибке()); + ВызватьИсключение(СообщениеОбОшибке); + КонецПопытки; + + // Распаковать. + Разархиватор = Новый ЧтениеZipФайла(ИмяАрхива); + + Если Разархиватор.Элементы.Количество() = 0 Тогда + + Попытка + УдалитьФайлы(КаталогВременныхФайлов); + Исключение + СообщениеОбОшибке = ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); + ЗаписьЖурналаРегистрации(ОбменДаннымиСервер.СобытиеЖурналаРегистрацииУдалениеВременногоФайла(), + УровеньЖурналаРегистрации.Ошибка,,, СообщениеОбОшибке); + ВызватьИсключение(СообщениеОбОшибке); + КонецПопытки; + + СообщениеОбОшибке = НСтр("ru = 'Файл архива не содержит данных.'"); + ВызватьИсключение(СообщениеОбОшибке); + + КонецЕсли; + + ИмяФайла = ОбщегоНазначенияКлиентСервер.ПолучитьПолноеИмяФайла(КаталогВременныхФайлов, Разархиватор.Элементы[0].Имя); + Разархиватор.Извлечь(Разархиватор.Элементы[0], КаталогВременныхФайлов); + Разархиватор.Закрыть(); + + // Помещаем файл в каталог временного хранилища файлов. + КаталогЗагрузки = ОбменДаннымиПовтИсп.КаталогВременногоХранилищаФайлов(); + ИмяФайлаСДанными = ОбщегоНазначенияКлиентСервер.ПолучитьИмяСРасширением(ИдентификаторФайла, ОбщегоНазначенияКлиентСервер.ПолучитьРасширениеИмениФайла(ИмяФайла)); + ИмяФайлаВКаталогеЗагрузки = ОбщегоНазначенияКлиентСервер.ПолучитьПолноеИмяФайла(КаталогЗагрузки, ИмяФайлаСДанными); + + Попытка + ПереместитьФайл(ИмяФайла, ИмяФайлаВКаталогеЗагрузки); + Исключение + СообщениеОбОшибке = ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); + ЗаписьЖурналаРегистрации(ОбменДаннымиСервер.СобытиеЖурналаРегистрацииУдалениеВременногоФайла(), + УровеньЖурналаРегистрации.Ошибка,,, СообщениеОбОшибке); + ВызватьИсключение(СообщениеОбОшибке); + КонецПопытки; + + ИдентификаторФайлаВоВременномХранилище = ОбменДаннымиСервер.ПоместитьФайлВХранилище(ИмяФайлаВКаталогеЗагрузки); + + // Удаляем временные файлы. + Попытка + УдалитьФайлы(КаталогВременныхФайлов); + Исключение + СообщениеОбОшибке = ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); + ЗаписьЖурналаРегистрации(ОбменДаннымиСервер.СобытиеЖурналаРегистрацииУдалениеВременногоФайла(), + УровеньЖурналаРегистрации.Ошибка,,, СообщениеОбОшибке); + ВызватьИсключение(СообщениеОбОшибке); + КонецПопытки; + + Возврат ИдентификаторФайлаВоВременномХранилище; + +КонецФункции + +// Для внутреннего использования. +Процедура ПодготовитьДанныеДляВыгрузкиИзИнформационнойБазы(ПараметрыWEBСервиса, СообщениеОбОшибке) Экспорт + + УстановитьПривилегированныйРежим(Истина); + + КомпонентыОбмена = КомпонентыОбмена("Отправка", ПараметрыWEBСервиса); + ИмяФайла = Строка(Новый УникальныйИдентификатор()) + ".xml"; + + КаталогВременныхФайлов = ОбменДаннымиПовтИсп.КаталогВременногоХранилищаФайлов(); + ПолноеИмяФайла = ОбщегоНазначенияКлиентСервер.ПолучитьПолноеИмяФайла( + КаталогВременныхФайлов, ИмяФайла); + + // Открываем файл обмена. + ОбменДаннымиXDTOСервер.ОткрытьФайлВыгрузки(КомпонентыОбмена, ПолноеИмяФайла); + + Если КомпонентыОбмена.ФлагОшибки Тогда + КомпонентыОбмена.ФайлОбмена = Неопределено; + ОбменДаннымиXDTOСервер.ЗавершитьВедениеПротоколаОбмена(КомпонентыОбмена); + ВызватьИсключение(ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); + КонецЕсли; + + // Выгрузка данных. + Попытка + ОбменДаннымиXDTOСервер.ПроизвестиВыгрузкуДанных(КомпонентыОбмена); + Исключение + Если КомпонентыОбмена.ЭтоОбменЧерезПланОбмена Тогда + РазблокироватьДанныеДляРедактирования(КомпонентыОбмена.УзелКорреспондента); + КонецЕсли; + ОбменДаннымиXDTOСервер.ЗаписатьВПротоколВыполнения(КомпонентыОбмена, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); + ОбменДаннымиXDTOСервер.ЗавершитьВедениеПротоколаОбмена(КомпонентыОбмена); + КомпонентыОбмена.ФайлОбмена = Неопределено; + ВызватьИсключение(ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); + КонецПопытки; + + КомпонентыОбмена.ФайлОбмена.Закрыть(); + + Если КомпонентыОбмена.ФлагОшибки Тогда + + СообщениеОбОшибке = КомпонентыОбмена.СтрокаСообщенияОбОшибке; + ВызватьИсключение(СообщениеОбОшибке); + + Иначе + + // Поместить файл во временное хранилище. + ИдентификаторФайлаВоВременномХранилище = Строка(ОбменДаннымиСервер.ПоместитьФайлВХранилище(ПолноеИмяФайла)); + + // Создаем временный каталог для хранения частей файла данных. + ВременныйКаталог = ВременныйКаталогВыгрузки( + ИдентификаторФайлаВоВременномХранилище); + ИмяНеразделенногоФайла = ОбщегоНазначенияКлиентСервер.ПолучитьПолноеИмяФайла( + ВременныйКаталог, ИдентификаторФайлаВоВременномХранилище + ?(ПараметрыWEBСервиса.РазмерЧастиФайла > 0, ".zip", ".zip.1")); + ИмяИсходногоФайлаВоВременномКаталоге = ОбщегоНазначенияКлиентСервер.ПолучитьПолноеИмяФайла( + ВременныйКаталог, "data.xml"); + + СоздатьКаталог(ВременныйКаталог); + КопироватьФайл(ПолноеИмяФайла, ИмяИсходногоФайлаВоВременномКаталоге); + + // Архивируем файл. + Архиватор = Новый ЗаписьZipФайла(ИмяНеразделенногоФайла); + Архиватор.Добавить(ИмяИсходногоФайлаВоВременномКаталоге); + Архиватор.Записать(); + + Если ПараметрыWEBСервиса.РазмерЧастиФайла > 0 Тогда + // Разделение файла на части. + ИменаФайлов = РазделитьФайл(ИмяНеразделенногоФайла, ПараметрыWEBСервиса.РазмерЧастиФайла * 1024); + Иначе + ИменаФайлов = Новый Массив(); + ИменаФайлов.Добавить(ИмяНеразделенногоФайла); + КонецЕсли; + + ВозвращаемоеЗначение = "{WEBService}$%1$%2"; + ВозвращаемоеЗначение = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ВозвращаемоеЗначение, ИменаФайлов.Количество(), ИдентификаторФайлаВоВременномХранилище); + + Сообщение = Новый СообщениеПользователю(); + Сообщение.Текст = ВозвращаемоеЗначение; + Сообщение.Сообщить(); + + КонецЕсли; + +КонецПроцедуры + +// Для внутреннего использования. +// +Процедура ЗагрузитьДанныеXDTOВИнформационнуюБазу(ПараметрыWEBСервиса, СообщениеОбОшибке) Экспорт + + УстановитьПривилегированныйРежим(Истина); + + КомпонентыОбмена = КомпонентыОбмена("Получение", ПараметрыWEBСервиса); + + Если КомпонентыОбмена.ФлагОшибки Тогда + СообщениеОбОшибке = КомпонентыОбмена.СтрокаСообщенияОбОшибке; + ВызватьИсключение(СообщениеОбОшибке); + КонецЕсли; + + Попытка + ОбменДаннымиXDTOСервер.ПроизвестиЧтениеДанных(КомпонентыОбмена); + Исключение + + СообщениеОбОшибке = НСтр("ru = 'Ошибка при загрузке данных: %1'"); + СообщениеОбОшибке = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(СообщениеОбОшибке, ОписаниеОшибки()); + ОбменДаннымиXDTOСервер.ЗаписатьВПротоколВыполнения(КомпонентыОбмена, СообщениеОбОшибке,,,,,Истина); + КомпонентыОбмена.ФлагОшибки = Истина; + + ВызватьИсключение(СообщениеОбОшибке); + + КонецПопытки; + + ОбменДаннымиXDTOСервер.УдалитьВременныеОбъектыСозданныеПоСсылкам(КомпонентыОбмена); + + КомпонентыОбмена.ФайлОбмена.Закрыть(); + + Если Не КомпонентыОбмена.ФлагОшибки + И КомпонентыОбмена.ЭтоОбменЧерезПланОбмена + И КомпонентыОбмена.ИспользоватьКвитирование Тогда + + // Запишем информацию о номере входящего сообщения. + ОбъектУзла = КомпонентыОбмена.УзелКорреспондента.ПолучитьОбъект(); + ОбъектУзла.НомерПринятого = КомпонентыОбмена.НомерВходящегоСообщения; + ОбъектУзла.ДополнительныеСвойства.Вставить("ПолучениеСообщенияОбмена"); + ОбъектУзла.Записать(); + + КонецЕсли; + +КонецПроцедуры + +// Для внутреннего использования. +// +Функция ВременныйКаталогВыгрузки(Знач ИдентификаторСессии) Экспорт + + УстановитьПривилегированныйРежим(Истина); + + ВременныйКаталог = "{ИдентификаторСессии}"; + ВременныйКаталог = СтрЗаменить(ВременныйКаталог, "ИдентификаторСессии", Строка(ИдентификаторСессии)); + + Результат = ОбщегоНазначенияКлиентСервер.ПолучитьПолноеИмяФайла(ОбменДаннымиПовтИсп.КаталогВременногоХранилищаФайлов(), ВременныйКаталог); + + Возврат Результат; + +КонецФункции + +// Для внутреннего использования. +// +Процедура ПроверитьВозможностьВыполненияОбменов() Экспорт + + Если Не Пользователи.РолиДоступны("ВыполнениеСинхронизацииДанных, НастройкаСинхронизацииДанных") Тогда + + ВызватьИсключение НСтр("ru = 'Недостаточно прав для синхронизации данных.'"); + + ИначеЕсли ОбновлениеИнформационнойБазы.НеобходимоОбновлениеИнформационнойБазы() + И Не ОбменДаннымиВызовСервера.РежимЗагрузкиСообщенияОбменаДаннымиПередЗапуском("ЗагрузкаРазрешена") Тогда + + ВызватьИсключение НСтр("ru = 'Информационная база находится в состоянии обновления.'"); + + КонецЕсли; + +КонецПроцедуры + +// Для внутреннего использования. +// +Процедура ПроверитьБлокировкуИнформационнойБазыДляОбновления() Экспорт + + Если ЗначениеЗаполнено(ОбновлениеИнформационнойБазыСлужебный.ИнформационнаяБазаЗаблокированаДляОбновления()) Тогда + + ВызватьИсключение НСтр("ru = 'Синхронизация данных временно недоступна в связи с обновлением приложения.'"); + + КонецЕсли; + +КонецПроцедуры + +// Для внутреннего использования. +Функция ПолучитьСтатусВыполненияПолученияДанных(ИдентификаторДлительнойОперации, СообщениеОбОшибке) Экспорт + + СообщениеОбОшибке = ""; + + УстановитьПривилегированныйРежим(Истина); + ФоновоеЗадание = ФоновыеЗадания.НайтиПоУникальномуИдентификатору(Новый УникальныйИдентификатор(ИдентификаторДлительнойОперации)); + + Если ФоновоеЗадание.ИнформацияОбОшибке <> Неопределено Тогда + СообщениеОбОшибке = ПодробноеПредставлениеОшибки(ФоновоеЗадание.ИнформацияОбОшибке); + КонецЕсли; + + СостоянияФоновогоЗадания = СостоянияФоновыхЗаданий(); + Возврат СостоянияФоновогоЗадания.Получить(ФоновоеЗадание.Состояние); + +КонецФункции + +// Для внутреннего использования. +Функция ПолучитьСтатусВыполненияПодготовкиДанныхКОтправке(ИдентификаторФоновогоЗадания, СообщениеОбОшибке) Экспорт + + СообщениеОбОшибке = ""; + + УстановитьПривилегированныйРежим(Истина); + + ВозвращаемаяСтруктура = ФабрикаXDTO.Создать( + ФабрикаXDTO.Тип("http://v8.1c.ru/SSL/Exchange/EnterpriseDataExchange", "PrepareDataOperationResult")); + + ФоновоеЗадание = ФоновыеЗадания.НайтиПоУникальномуИдентификатору(Новый УникальныйИдентификатор(ИдентификаторФоновогоЗадания)); + + СообщениеОбОшибке = ""; + КоличествоЧастейФайла = 0; + ИдентификаторФайла = ""; + СостояниеТекущегоФоновогоЗадания = СостоянияФоновыхЗаданий().Получить(ФоновоеЗадание.Состояние); + + Если ФоновоеЗадание.ИнформацияОбОшибке <> Неопределено Тогда + СообщениеОбОшибке = ПодробноеПредставлениеОшибки(ФоновоеЗадание.ИнформацияОбОшибке); + Иначе + Если ФоновоеЗадание.Состояние = СостояниеФоновогоЗадания.Завершено Тогда + МассивСообщений = ФоновоеЗадание.ПолучитьСообщенияПользователю(Истина); + Для Каждого СообщениеФоновогоЗадания Из МассивСообщений Цикл + Если Найти(СообщениеФоновогоЗадания.Текст, "{WEBService}") > 0 Тогда + МассивРезультата = СтрРазделить(СообщениеФоновогоЗадания.Текст, "$", Истина); + КоличествоЧастейФайла = МассивРезультата[1]; + ИдентификаторФайла = МассивРезультата[2]; + Прервать; + Иначе + Продолжить; + КонецЕсли; + КонецЦикла; + КонецЕсли; + КонецЕсли; + + ВозвращаемаяСтруктура.ErrorMessage = СообщениеОбОшибке; + ВозвращаемаяСтруктура.FileID = ИдентификаторФайла; + ВозвращаемаяСтруктура.PartCount = КоличествоЧастейФайла; + ВозвращаемаяСтруктура.Status = СостояниеТекущегоФоновогоЗадания; + + Возврат ВозвращаемаяСтруктура; + +КонецФункции + +// Для внутреннего использования. +Функция КомпонентыОбмена(НаправлениеОбмена, ПараметрыWEBСервиса) Экспорт + + КомпонентыОбмена = ОбменДаннымиXDTOСервер.ИнициализироватьКомпонентыОбмена(НаправлениеОбмена); + + Если ЗначениеЗаполнено(ПараметрыWEBСервиса.ИмяПланаОбмена) И ЗначениеЗаполнено(ПараметрыWEBСервиса.КодУзлаПланаОбмена) Тогда + КомпонентыОбмена.УзелКорреспондента = ПланыОбмена[ПараметрыWEBСервиса.ИмяПланаОбмена].НайтиПоКоду(ПараметрыWEBСервиса.КодУзлаПланаОбмена); + Иначе + КомпонентыОбмена.ЭтоОбменЧерезПланОбмена = Ложь; + КонецЕсли; + + КомпонентыОбмена.ВедениеПротоколаДанных.ВыводВПротоколИнформационныхСообщений = Ложь; + КомпонентыОбмена.СостояниеОбменаДанными.ДатаНачала = ТекущаяДатаСеанса(); + КомпонентыОбмена.ИспользоватьТранзакции = Ложь; + + Если НаправлениеОбмена = "Получение" Тогда + + КомпонентыОбмена.КлючСообщенияЖурналаРегистрации = СформироватьКлючСообщенияЖР(НаправлениеОбмена, ПараметрыWEBСервиса); + + ИмяФайла = ОбменДаннымиСервер.ПолучитьФайлИзХранилища(ПараметрыWEBСервиса.ИдентификаторФайлаВоВременномХранилище); + ОбменДаннымиXDTOСервер.ОткрытьФайлЗагрузки(КомпонентыОбмена, ИмяФайла); + + Иначе + + КомпонентыОбмена.КлючСообщенияЖурналаРегистрации = СформироватьКлючСообщенияЖР(НаправлениеОбмена, ПараметрыWEBСервиса); + КомпонентыОбмена.ВерсияФорматаОбмена = ОбменДаннымиXDTOСервер.ВерсияФорматаОбменаПриВыгрузке( + КомпонентыОбмена.УзелКорреспондента); + КомпонентыОбмена.XMLСхема = ОбменДаннымиXDTOСервер.ФорматОбмена( + КомпонентыОбмена.УзелКорреспондента, КомпонентыОбмена.ВерсияФорматаОбмена); + КомпонентыОбмена.МенеджерОбмена = ОбменДаннымиXDTOСервер.МенеджерОбменаВерсииФормата( + КомпонентыОбмена.УзелКорреспондента, КомпонентыОбмена.ВерсияФорматаОбмена); + КомпонентыОбмена.ТаблицаПравилаРегистрацииОбъектов = ОбменДаннымиXDTOСервер.ПравилаРегистрацииОбъектов( + КомпонентыОбмена.УзелКорреспондента); + КомпонентыОбмена.СвойстваУзлаПланаОбмена = ОбменДаннымиXDTOСервер.СвойстваУзлаПланаОбмена( + КомпонентыОбмена.УзелКорреспондента); + + КонецЕсли; + + Если КомпонентыОбмена.ФлагОшибки Тогда + Возврат КомпонентыОбмена; + КонецЕсли; + + ОбменДаннымиXDTOСервер.ИнициализироватьТаблицыПравилОбмена(КомпонентыОбмена); + + Возврат КомпонентыОбмена; + +КонецФункции + +// Для внутреннего использования. +Функция ИнициализироватьПараметрыWebСервиса() Экспорт + + СтруктураПараметров = Новый Структура; + СтруктураПараметров.Вставить("ИмяПланаОбмена"); + СтруктураПараметров.Вставить("КодУзлаПланаОбмена"); + СтруктураПараметров.Вставить("ИдентификаторФайлаВоВременномХранилище"); + СтруктураПараметров.Вставить("РазмерЧастиФайла"); + СтруктураПараметров.Вставить("ИмяWEBСервиса"); + + Возврат СтруктураПараметров; + +КонецФункции + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +Функция ПолучитьИмяЧастиФайла(НомерЧастиФайла, ИмяАрхива = "") + + Если Не ЗначениеЗаполнено(ИмяАрхива) Тогда + ИмяАрхива = "data"; + КонецЕсли; + + Результат = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку("%1.zip.%2", ИмяАрхива, Формат(НомерЧастиФайла, "ЧГ=0")); + + Возврат Результат; + +КонецФункции + +Функция СостоянияФоновыхЗаданий() + + СостоянияФоновогоЗадания = Новый Соответствие; + СостоянияФоновогоЗадания.Вставить(СостояниеФоновогоЗадания.Активно, "Active"); + СостоянияФоновогоЗадания.Вставить(СостояниеФоновогоЗадания.Завершено, "Completed"); + СостоянияФоновогоЗадания.Вставить(СостояниеФоновогоЗадания.ЗавершеноАварийно, "Failed"); + СостоянияФоновогоЗадания.Вставить(СостояниеФоновогоЗадания.Отменено, "Canceled"); + + Возврат СостоянияФоновогоЗадания; + +КонецФункции + +Функция СформироватьКлючСообщенияЖР(НаправлениеОбмена, ПараметрыWEBСервиса) + + Если НаправлениеОбмена = "Получение" Тогда + ШаблонКлючаСообщения = НСтр("ru = 'Загрузка данных через Web-сервис %1'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()); + Иначе + ШаблонКлючаСообщения = НСтр("ru = 'Выгрузка данных через Web-сервис %1'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()); + КонецЕсли; + + Возврат СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонКлючаСообщения, ПараметрыWEBСервиса.ИмяWEBСервиса); + +КонецФункции + +#КонецОбласти \ No newline at end of file diff --git a/SSL/src/CommonModules/ОбменДаннымиСлужебный/ОбменДаннымиСлужебный.mdo b/SSL/src/CommonModules/ОбменДаннымиСлужебный/ОбменДаннымиСлужебный.mdo new file mode 100644 index 000000000..a38fbf86b --- /dev/null +++ b/SSL/src/CommonModules/ОбменДаннымиСлужебный/ОбменДаннымиСлужебный.mdo @@ -0,0 +1,11 @@ +<?xml version="1.0" encoding="UTF-8"?> +<mdclass:CommonModule xmlns:mdclass="http://g5.1c.ru/v8/dt/metadata/mdclass" uuid="c5b4d6e4-4c99-46cb-98cf-9a0024215a12"> + <name>ОбменДаннымиСлужебный</name> + <synonym> + <key>ru</key> + <value>Обмен данными служебный</value> + </synonym> + <server>true</server> + <externalConnection>true</externalConnection> + <clientOrdinaryApplication>true</clientOrdinaryApplication> +</mdclass:CommonModule> diff --git a/SSL/src/CommonModules/ОбменДаннымиСобытия/Module.bsl b/SSL/src/CommonModules/ОбменДаннымиСобытия/Module.bsl index 7ffca53b0..beb61923d 100644 --- a/SSL/src/CommonModules/ОбменДаннымиСобытия/Module.bsl +++ b/SSL/src/CommonModules/ОбменДаннымиСобытия/Module.bsl @@ -73,7 +73,7 @@ // Процедура МеханизмРегистрацииОбъектовПередУдалением(ИмяПланаОбмена, Источник, Отказ) Экспорт - ДополнительныеПараметры = Новый Структура("ЭтоУдаление", Истина); + ДополнительныеПараметры = Новый Структура("ЭтоУдалениеОбъекта", Истина); ЗарегистрироватьИзменениеОбъекта(ИмяПланаОбмена, Источник, Отказ, ДополнительныеПараметры); КонецПроцедуры @@ -277,8 +277,7 @@ ОтправкаЭлемента, Знач СозданиеНачальногоОбраза = Ложь, Знач Получатель = Неопределено, - Знач Анализ = Истина - ) Экспорт + Знач Анализ = Истина) Экспорт Если Получатель = Неопределено Тогда @@ -303,8 +302,7 @@ Если Не СозданиеНачальногоОбраза И ОтправкаЭлемента <> ОтправкаЭлементаДанных.Игнорировать И ОбменДаннымиПовтИсп.ЭтоУзелРаспределеннойИнформационнойБазы(Получатель.Ссылка) - И ТипЗнч(ЭлементДанных) <> Тип("УдалениеОбъекта") - Тогда + И ТипЗнч(ЭлементДанных) <> Тип("УдалениеОбъекта") Тогда ИмяБазовогоТипа = ОбщегоНазначения.ИмяБазовогоТипаПоОбъектуМетаданных(ЭлементДанных.Метаданные()); @@ -578,8 +576,7 @@ И Не Источник.ЭтотУзел И ОбменДаннымиПовтИсп.ЭтоУзелОбменаДаннымиБСП(Источник.Ссылка) И ДанныеРазличаются(Источник, Источник.Ссылка.ПолучитьОбъект(),, "НомерОтправленного, НомерПринятого, ПометкаУдаления, Код, Наименование") - И ОбменДаннымиВызовСервера.ИзмененияЗарегистрированы(Источник.Ссылка) - Тогда + И ОбменДаннымиВызовСервера.ИзмененияЗарегистрированы(Источник.Ссылка) Тогда СохранитьРазрешенныеКВыгрузкеОбъекты(Источник); @@ -589,6 +586,7 @@ Если ОбщегоНазначенияПовтИсп.РазделениеВключено() И НЕ ОбщегоНазначенияПовтИсп.СеансЗапущенБезРазделителей() И Не Источник.ЭтоНовый() + И ОбменДаннымиПовтИсп.ЭтоУзелОбменаДаннымиБСП(Источник.Ссылка) И ДанныеРазличаются(Источник, Источник.Ссылка.ПолучитьОбъект(), "Код, Наименование") Тогда ВызватьИсключение Нстр("ru = 'Изменение наименования и кода синхронизации данных недопустимо.'"); @@ -617,8 +615,7 @@ Запрос = Новый Запрос; ТекстЗапроса = - "ВЫБРАТЬ - | * + "ВЫБРАТЬ * |ИЗ | [Таблица].Изменения КАК ТаблицаИзменений |ГДЕ @@ -881,8 +878,6 @@ КонецЕсли; - ОбменДаннымиВызовСервера.ПроверитьКэшМеханизмаРегистрацииОбъектов(); - // Определяем необходимость регистрации объекта на узле отправителе. Если Объект.ДополнительныеСвойства.Свойство("РегистрироватьОбъектНаУзлеОтправителе") Тогда Объект.ОбменДанными.Отправитель = Неопределено; @@ -897,14 +892,15 @@ Возврат; КонецЕсли; + ОбменДаннымиВызовСервера.ПроверитьКэшМеханизмаРегистрацииОбъектов(); + // При физическом удалении объекта ВРО не выполняем. ЗарегистрироватьОбъектКВыгрузке = ЭтоРегистр Или ЭтоУдалениеОбъекта Или ЭтоКонстанта; ОбъектМодифицирован = Объект.ДополнительныеСвойства.Свойство("ОтложеннаяЗапись") Или Объект.ДополнительныеСвойства.Свойство("ОтложенноеПроведение") Или ОбъектМодифицированДляПланаОбмена( - Объект, ОбъектМетаданных, ИмяПланаОбмена, РежимЗаписи, ЗарегистрироватьОбъектКВыгрузке - ); + Объект, ОбъектМетаданных, ИмяПланаОбмена, РежимЗаписи, ЗарегистрироватьОбъектКВыгрузке); Если Не ОбъектМодифицирован Тогда @@ -1387,7 +1383,7 @@ |ИЗ | ПланОбмена.[ИмяПланаОбмена] КАК ШапкаПланаОбмена |ГДЕ - | ШапкаПланаОбмена.Ссылка <> &ЭтотУзел + | НЕ ШапкаПланаОбмена.ЭтотУзел | И ШапкаПланаОбмена.[ИмяРеквизитаФлага] = ЗНАЧЕНИЕ(Перечисление.РежимыВыгрузкиОбъектовОбмена.ВыгружатьВсегда) | И НЕ ШапкаПланаОбмена.ПометкаУдаления |"; @@ -1396,7 +1392,6 @@ ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "[ИмяРеквизитаФлага]", ИмяРеквизитаФлага); Запрос = Новый Запрос; - Запрос.УстановитьПараметр("ЭтотУзел", ОбменДаннымиПовтИсп.ПолучитьЭтотУзелПланаОбмена(ИмяПланаОбмена)); Запрос.Текст = ТекстЗапроса; Возврат Запрос.Выполнить().Выгрузить().ВыгрузитьКолонку("Узел"); @@ -1432,7 +1427,7 @@ | ШапкаПланаОбмена.Ссылка = СоответствияОбъектовИнформационныхБаз.УзелИнформационнойБазы | И СоответствияОбъектовИнформационныхБаз.УникальныйИдентификаторИсточника = &Объект |ГДЕ - | ШапкаПланаОбмена.Ссылка <> &ЭтотУзел + | НЕ ШапкаПланаОбмена.ЭтотУзел | И ШапкаПланаОбмена.[ИмяРеквизитаФлага] = ЗНАЧЕНИЕ(Перечисление.РежимыВыгрузкиОбъектовОбмена.ВыгружатьПриНеобходимости) | И НЕ ШапкаПланаОбмена.ПометкаУдаления | И СоответствияОбъектовИнформационныхБаз.УникальныйИдентификаторИсточника = &Объект @@ -1443,7 +1438,6 @@ Запрос = Новый Запрос; Запрос.Текст = ТекстЗапроса; - Запрос.УстановитьПараметр("ЭтотУзел", ОбменДаннымиПовтИсп.ПолучитьЭтотУзелПланаОбмена(ИмяПланаОбмена)); Запрос.УстановитьПараметр("Объект", Ссылка); МассивУзлов = Запрос.Выполнить().Выгрузить().ВыгрузитьКолонку("Узел"); @@ -1891,13 +1885,11 @@ ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "[УсловиеОтбораПоРеквизитуФлагу]", "И (ПланОбменаОсновнаяТаблица.[ИмяРеквизитаФлага] = ЗНАЧЕНИЕ(Перечисление.РежимыВыгрузкиОбъектовОбмена.ВыгружатьПоУсловию) |ИЛИ ПланОбменаОсновнаяТаблица.[ИмяРеквизитаФлага] = ЗНАЧЕНИЕ(Перечисление.РежимыВыгрузкиОбъектовОбмена.ВыгружатьВручную) - |ИЛИ ПланОбменаОсновнаяТаблица.[ИмяРеквизитаФлага] = ЗНАЧЕНИЕ(Перечисление.РежимыВыгрузкиОбъектовОбмена.ПустаяСсылка))" - ); + |ИЛИ ПланОбменаОсновнаяТаблица.[ИмяРеквизитаФлага] = ЗНАЧЕНИЕ(Перечисление.РежимыВыгрузкиОбъектовОбмена.ПустаяСсылка))"); Иначе ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "[УсловиеОтбораПоРеквизитуФлагу]", "И (ПланОбменаОсновнаяТаблица.[ИмяРеквизитаФлага] = ЗНАЧЕНИЕ(Перечисление.РежимыВыгрузкиОбъектовОбмена.ВыгружатьПоУсловию) - |ИЛИ ПланОбменаОсновнаяТаблица.[ИмяРеквизитаФлага] = ЗНАЧЕНИЕ(Перечисление.РежимыВыгрузкиОбъектовОбмена.ПустаяСсылка))" - ); + |ИЛИ ПланОбменаОсновнаяТаблица.[ИмяРеквизитаФлага] = ЗНАЧЕНИЕ(Перечисление.РежимыВыгрузкиОбъектовОбмена.ПустаяСсылка))"); КонецЕсли; ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "[ИмяРеквизитаФлага]", ИмяРеквизитаФлага); @@ -1947,7 +1939,7 @@ Значение = Объект; - МассивПодстрок = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(СтрокаСвойствОбъекта, "."); + МассивПодстрок = СтрРазделить(СтрокаСвойствОбъекта, "."); // Значение получаем с учетом возможного разыменования свойства. Для Каждого ИмяСвойства Из МассивПодстрок Цикл @@ -2187,7 +2179,7 @@ Значение = Объект; - МассивПодстрок = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(СтрокаСвойствОбъекта, "."); + МассивПодстрок = СтрРазделить(СтрокаСвойствОбъекта, "."); // Значение получаем с учетом возможного разыменования свойства. Для Каждого ИмяСвойства Из МассивПодстрок Цикл @@ -2630,7 +2622,7 @@ СписокСвойств = СтрЗаменить(СписокСвойств, " ", ""); - СписокСвойств = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(СписокСвойств); + СписокСвойств = СтрРазделить(СписокСвойств, ","); ОбъектМетаданных = Приемник.Метаданные(); @@ -2653,7 +2645,7 @@ КонецЦикла; - СписокСвойствШапки = СтроковыеФункцииКлиентСервер.СтрокаИзМассиваПодстрок(СписокСвойствШапки); + СписокСвойствШапки = СтрСоединить(СписокСвойствШапки, ","); ЗаполнитьЗначенияСвойств(Приемник, Источник, СписокСвойствШапки); @@ -2673,7 +2665,7 @@ Для Каждого ТабличнаяЧасть Из ТабличныеЧасти Цикл - Если Найти(ИсключаяСвойства, ТабличнаяЧасть) <> 0 Тогда + Если СтрНайти(ИсключаяСвойства, ТабличнаяЧасть) <> 0 Тогда Продолжить; КонецЕсли; @@ -3302,15 +3294,18 @@ Возврат; КонецЕсли; - СообщениеОбОшибке = ""; Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ДатыЗапретаИзменения") Тогда МодульДатыЗапретаИзменения = ОбщегоНазначения.ОбщийМодуль("ДатыЗапретаИзменения"); - Если МодульДатыЗапретаИзменения.ЗагрузкаЗапрещена(ЭлементДанных, Отправитель, СообщениеОбОшибке) = Истина Тогда - - ЗарегистрироватьЗапретЗагрузкиДанныхПоДате(ЭлементДанных, Отправитель, СообщениеОбОшибке); + Отказ = Ложь; + ОписаниеОшибки = ""; + + МодульДатыЗапретаИзменения.ПроверитьДатыЗапретаЗагрузкиДанных(ЭлементДанных, + Отправитель, Отказ, ОписаниеОшибки); + + Если Отказ Тогда + ЗарегистрироватьЗапретЗагрузкиДанныхПоДате(ЭлементДанных, Отправитель, ОписаниеОшибки); ПолучениеЭлемента = ПолучениеЭлементаДанных.Игнорировать; - КонецЕсли; КонецЕсли; @@ -3329,7 +3324,7 @@ // СообщениеОбОшибке - Строка - Подробное описание причины отказа от загрузки. // // Примечание: Для проверки наличия запрета загрузки по дате см. процедуру -// общего модуля ДатыЗапретаИзменения.ЗагрузкаЗапрещена. +// общего модуля ДатыЗапретаИзменения.ПроверитьДатыЗапретаЗагрузкиДанных. // Процедура ЗарегистрироватьЗапретЗагрузкиДанныхПоДате(ЭлементДанных, Отправитель, СообщениеОбОшибке) @@ -3350,14 +3345,13 @@ ПриСозданииВерсииОбъекта(ОбъектВБазе, СведенияОВерсииОбъекта, Истина); СтрокаСообщенияОбОшибке = СообщениеОбОшибке; - ТипВерсииОбъекта = "НепринятыеДанныеПоДатеЗапретаОбъектСуществует"; + ТипВерсииОбъекта = "НепринятыйПоДатеЗапретаОбъектСуществуетВБазе"; Иначе СтрокаСообщенияОбОшибке = Нстр("ru = '%1 запрещено загружать в запрещенный период.%2%2%3'"); - СтрокаСообщенияОбОшибке = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(СтрокаСообщенияОбОшибке, - Строка(ЭлементДанных), Символы.ПС, СообщениеОбОшибке); - ТипВерсииОбъекта = "НепринятыеДанныеПоДатеЗапретаОбъектНеСуществует"; + СтрокаСообщенияОбОшибке = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(СтрокаСообщенияОбОшибке, Строка(ЭлементДанных), Символы.ПС, СообщениеОбОшибке); + ТипВерсииОбъекта = "НепринятыйПоДатеЗапретаОбъектНеСуществуетВБазе"; КонецЕсли; diff --git a/SSL/src/CommonModules/ОбменСообщениями/Module.bsl b/SSL/src/CommonModules/ОбменСообщениями/Module.bsl index 17e85d83b..e9351b71d 100644 --- a/SSL/src/CommonModules/ОбменСообщениями/Module.bsl +++ b/SSL/src/CommonModules/ОбменСообщениями/Module.bsl @@ -113,8 +113,8 @@ КонецЕсли; - ТекстЗапроса = ТекстЗапроса + - "ВЫБРАТЬ + ТекстЗапроса = ТекстЗапроса + + "ВЫБРАТЬ | ТаблицаИзменений.Узел КАК КонечнаяТочка, | ТаблицаИзменений.Ссылка КАК Сообщение |[ПОМЕСТИТЬ] @@ -205,18 +205,22 @@ // // Параметры: // Отказ - Булево - Флаг выполнения операции; поднимается в случае ошибок при подключении конечной точки. -// URLВебСервисаПолучателя - Строка - Веб-адрес подключаемой конечной точки. -// ИмяПользователяПолучателя - Строка - Пользователь для аутентификации в подключаемой конечной точке -// при работе через web-сервис подсистемы обмена сообщениями. -// ПарольПолучателя - Строка - Пароль пользователя в подключаемой конечной точке. -// URLВебСервисаОтправителя - Строка - Веб-адрес этой информационной базы со стороны подключаемой конечной точки. -// ИмяПользователяОтправителя - Строка - Пользователь для аутентификации в этой информационной базе -// при работе через web-сервис подсистемы обмена сообщениями. -// ПарольОтправителя - Строка - Пароль пользователя в этой информационной базе. +// НастройкиПодключенияОтправителя - Структура - Параметры подключения отправителя. Для инициализации используется +// функция ОбменДаннымиСервер.СтруктураПараметровWS. Содержит свойства: +// * WSURLВебСервиса - Строка - Веб-адрес подключаемой конечной точки. +// * WSИмяПользователя - Пользователь для аутентификации в подключаемой конечной точке +// при работе через web-сервис подсистемы обмена сообщениями. +// * WSПароль - Пароль пользователя в подключаемой конечной точке. +// НастройкиПодключенияПолучателя - Структура - Параметры подключения получателя. Для инициализации используется +// функция ОбменДаннымиСервер.СтруктураПараметровWS. Содержит свойства: +// * WSURLВебСервиса - Строка - Веб-адрес этой информационной базы со стороны подключаемой конечной точки. +// * WSИмяПользователя - Пользователь для аутентификации в этой информационной базе +// при работе через web-сервис подсистемы обмена сообщениями. +// * WSПароль - Пароль пользователя в этой информационной базе. // КонечнаяТочка - ПланОбменаСсылка.ОбменСообщениями, Неопределено - Если подключение конечной точки завершилось // успешно, то в этот параметр возвращается ссылка на узел плана обмена, -// который соответствует подключенной конечной точке. -// Если подключить конечную точку не удалось, то возвращается Неопределено. +// который соответствует подключенной конечной точке. +// Если подключить конечную точку не удалось, то возвращается Неопределено. // НаименованиеКонечнойТочкиПолучателя - Строка - Наименование подключаемой конечной точки. Если значение не задано, // то в качестве наименования используется синоним // конфигурации подключаемой конечной точки. @@ -225,26 +229,11 @@ // наименования используется синоним конфигурации этой информационной базы. // Процедура ПодключитьКонечнуюТочку(Отказ, - URLВебСервисаПолучателя, - ИмяПользователяПолучателя, - ПарольПолучателя, - URLВебСервисаОтправителя, - ИмяПользователяОтправителя, - ПарольОтправителя, + НастройкиПодключенияОтправителя, + НастройкиПодключенияПолучателя, КонечнаяТочка = Неопределено, НаименованиеКонечнойТочкиПолучателя = "", - НаименованиеКонечнойТочкиОтправителя = "" - ) Экспорт - - НастройкиПодключенияОтправителя = ОбменДаннымиСервер.СтруктураПараметровWS(); - НастройкиПодключенияОтправителя.WSURLВебСервиса = URLВебСервисаПолучателя; - НастройкиПодключенияОтправителя.WSИмяПользователя = ИмяПользователяПолучателя; - НастройкиПодключенияОтправителя.WSПароль = ПарольПолучателя; - - НастройкиПодключенияПолучателя = ОбменДаннымиСервер.СтруктураПараметровWS(); - НастройкиПодключенияПолучателя.WSURLВебСервиса = URLВебСервисаОтправителя; - НастройкиПодключенияПолучателя.WSИмяПользователя = ИмяПользователяОтправителя; - НастройкиПодключенияПолучателя.WSПароль = ПарольОтправителя; + НаименованиеКонечнойТочкиОтправителя = "") Экспорт ОбменСообщениямиВнутренний.ВыполнитьПодключениеКонечнойТочкиНаСторонеОтправителя(Отказ, НастройкиПодключенияОтправителя, @@ -265,34 +254,23 @@ // Отказ - Булево - Флаг выполнения операции; поднимается в случае ошибок. // КонечнаяТочка - ПланОбменаСсылка.ОбменСообщениями - Ссылка на узел плана обмена, который соответствует конечной // точке. -// URLВебСервисаПолучателя - Строка - Веб-адрес конечной точки. -// ИмяПользователяПолучателя - Строка - Пользователь для аутентификации в конечной точке -// при работе через web-сервис подсистемы обмена сообщениями. -// ПарольПолучателя - Строка - Пароль пользователя в конечной точке. -// URLВебСервисаОтправителя - Строка - Веб-адрес этой информационной базы со стороны конечной точки. -// ИмяПользователяОтправителя - Строка - Пользователь для аутентификации в этой информационной базе -// при работе через web-сервис подсистемы обмена сообщениями. -// ПарольОтправителя - Строка - Пароль пользователя в этой информационной базе. +// НастройкиПодключенияОтправителя - Структура - Параметры подключения отправителя. Для инициализации используется +// функция ОбменДаннымиСервер.СтруктураПараметровWS. Содержит свойства: +// * WSURLВебСервиса - Строка - Веб-адрес подключаемой конечной точки. +// * WSИмяПользователя - Пользователь для аутентификации в подключаемой конечной точке +// при работе через web-сервис подсистемы обмена сообщениями. +// * WSПароль - Пароль пользователя в подключаемой конечной точке. +// НастройкиПодключенияПолучателя - Структура - Параметры подключения получателя. Для инициализации используется +// функция ОбменДаннымиСервер.СтруктураПараметровWS. Содержит свойства: +// * WSURLВебСервиса - Строка - Веб-адрес этой информационной базы со стороны подключаемой конечной точки. +// * WSИмяПользователя - Пользователь для аутентификации в этой информационной базе +// при работе через web-сервис подсистемы обмена сообщениями. +// * WSПароль - Пароль пользователя в этой информационной базе. // Процедура ОбновитьНастройкиПодключенияКонечнойТочки(Отказ, КонечнаяТочка, - URLВебСервисаПолучателя, - ИмяПользователяПолучателя, - ПарольПолучателя, - URLВебСервисаОтправителя, - ИмяПользователяОтправителя, - ПарольОтправителя - ) Экспорт - - НастройкиПодключенияОтправителя = ОбменДаннымиСервер.СтруктураПараметровWS(); - НастройкиПодключенияОтправителя.WSURLВебСервиса = URLВебСервисаПолучателя; - НастройкиПодключенияОтправителя.WSИмяПользователя = ИмяПользователяПолучателя; - НастройкиПодключенияОтправителя.WSПароль = ПарольПолучателя; - - НастройкиПодключенияПолучателя = ОбменДаннымиСервер.СтруктураПараметровWS(); - НастройкиПодключенияПолучателя.WSURLВебСервиса = URLВебСервисаОтправителя; - НастройкиПодключенияПолучателя.WSИмяПользователя = ИмяПользователяОтправителя; - НастройкиПодключенияПолучателя.WSПароль = ПарольОтправителя; + НастройкиПодключенияОтправителя, + НастройкиПодключенияПолучателя) Экспорт ОбменСообщениямиВнутренний.ВыполнитьОбновлениеНастроекПодключенияКонечнойТочки(Отказ, КонечнаяТочка, НастройкиПодключенияОтправителя, НастройкиПодключенияПолучателя); @@ -549,8 +527,7 @@ ИначеЕсли ОбщегоНазначения.ЗначениеРеквизитаОбъекта(Получатель, "Заблокирована") Тогда - ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Попытка отправки сообщения заблокированной конечной точке ""%1"".'"), + ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Попытка отправки сообщения заблокированной конечной точке ""%1"".'"), Строка(Получатель)); КонецЕсли; @@ -726,8 +703,7 @@ ДанныеСообщения, КоличествоЭлементовВТранзакции, ИмяСобытияЖурналаРегистрации, - КоличествоОтправленныхОбъектов - ) Экспорт + КоличествоОтправленныхОбъектов) Экспорт ОбменСообщениямиВнутренний.ПриВыгрузкеДанных(СтандартнаяОбработка, Получатель, @@ -782,8 +758,7 @@ ДанныеСообщения, КоличествоЭлементовВТранзакции, ИмяСобытияЖурналаРегистрации, - КоличествоПолученныхОбъектов - ) Экспорт + КоличествоПолученныхОбъектов) Экспорт ОбменСообщениямиВнутренний.ПриЗагрузкеДанных(СтандартнаяОбработка, Отправитель, diff --git a/SSL/src/CommonModules/ОбменСообщениямиВнутренний/Module.bsl b/SSL/src/CommonModules/ОбменСообщениямиВнутренний/Module.bsl index 5775fe9ae..e59daed23 100644 --- a/SSL/src/CommonModules/ОбменСообщениямиВнутренний/Module.bsl +++ b/SSL/src/CommonModules/ОбменСообщениямиВнутренний/Module.bsl @@ -17,8 +17,7 @@ ДанныеСообщения, КоличествоЭлементовВТранзакции, ИмяСобытияЖурналаРегистрации, - КоличествоОтправленныхОбъектов - ) Экспорт + КоличествоОтправленныхОбъектов) Экспорт Если ТипЗнч(Получатель) <> Тип("ПланОбменаСсылка.ОбменСообщениями") Тогда Возврат; @@ -144,8 +143,7 @@ ДанныеСообщения, КоличествоЭлементовВТранзакции, ИмяСобытияЖурналаРегистрации, - КоличествоПолученныхОбъектов - ) Экспорт + КоличествоПолученныхОбъектов) Экспорт Если ТипЗнч(Отправитель) <> Тип("ПланОбменаСсылка.ОбменСообщениями") Тогда Возврат; @@ -385,7 +383,7 @@ // Процедура ОтправитьИПолучитьСообщенияПоРегламентномуЗаданию() Экспорт - ОбщегоНазначения.ПриНачалеВыполненияРегламентногоЗадания(); + ОбщегоНазначения.ПриНачалеВыполненияРегламентногоЗадания(Метаданные.РегламентныеЗадания.ОтправкаИПолучениеСообщенийСистемы); ОтправитьИПолучитьСообщения(Ложь); @@ -1173,7 +1171,12 @@ Отказ1 = Ложь; - ОбменДаннымиСервер.ВыполнитьОбменДаннымиДляУзлаИнформационнойБазы(Отказ1, Получатель, Истина, Ложь, Перечисления.ВидыТранспортаСообщенийОбмена.WS); + ПараметрыОбмена = ОбменДаннымиСервер.ПараметрыОбмена(); + ПараметрыОбмена.ВидТранспортаСообщенийОбмена = Перечисления.ВидыТранспортаСообщенийОбмена.WS; + ПараметрыОбмена.ВыполнятьЗагрузку = Истина; + ПараметрыОбмена.ВыполнятьВыгрузку = Ложь; + + ОбменДаннымиСервер.ВыполнитьОбменДаннымиДляУзлаИнформационнойБазы(Получатель, ПараметрыОбмена, Отказ1); Отказ = Отказ ИЛИ Отказ1; @@ -1184,7 +1187,12 @@ Отказ1 = Ложь; - ОбменДаннымиСервер.ВыполнитьОбменДаннымиДляУзлаИнформационнойБазы(Отказ1, Получатель, Ложь, Истина, Перечисления.ВидыТранспортаСообщенийОбмена.WS); + ПараметрыОбмена = ОбменДаннымиСервер.ПараметрыОбмена(); + ПараметрыОбмена.ВидТранспортаСообщенийОбмена = Перечисления.ВидыТранспортаСообщенийОбмена.WS; + ПараметрыОбмена.ВыполнятьЗагрузку = Ложь; + ПараметрыОбмена.ВыполнятьВыгрузку = Истина; + + ОбменДаннымиСервер.ВыполнитьОбменДаннымиДляУзлаИнформационнойБазы(Получатель, ПараметрыОбмена, Отказ1); Отказ = Отказ ИЛИ Отказ1; @@ -1225,7 +1233,11 @@ Отказ1 = Ложь; - ОбменДаннымиСервер.ВыполнитьОбменДаннымиДляУзлаИнформационнойБазы(Отказ1, Получатель, Истина, Ложь); + ПараметрыОбмена = ОбменДаннымиСервер.ПараметрыОбмена(); + ПараметрыОбмена.ВыполнятьЗагрузку = Истина; + ПараметрыОбмена.ВыполнятьВыгрузку = Ложь; + + ОбменДаннымиСервер.ВыполнитьОбменДаннымиДляУзлаИнформационнойБазы(Получатель, ПараметрыОбмена, Отказ1); Отказ = Отказ ИЛИ Отказ1; @@ -1236,7 +1248,11 @@ Отказ1 = Ложь; - ОбменДаннымиСервер.ВыполнитьОбменДаннымиДляУзлаИнформационнойБазы(Отказ1, Получатель, Ложь, Истина); + ПараметрыОбмена = ОбменДаннымиСервер.ПараметрыОбмена(); + ПараметрыОбмена.ВыполнятьЗагрузку = Ложь; + ПараметрыОбмена.ВыполнятьВыгрузку = Истина; + + ОбменДаннымиСервер.ВыполнитьОбменДаннымиДляУзлаИнформационнойБазы(Получатель, ПараметрыОбмена, Отказ1); Отказ = Отказ ИЛИ Отказ1; @@ -1250,8 +1266,7 @@ НастройкиПодключенияПолучателя, КонечнаяТочка, НаименованиеКонечнойТочкиПолучателя, - НаименованиеКонечнойТочкиОтправителя - ) Экспорт + НаименованиеКонечнойТочкиОтправителя) Экспорт ОбменДаннымиСервер.ПроверитьИспользованиеОбменаДанными(); diff --git a/SSL/src/CommonModules/ОбновлениеИнформационнойБазы/Module.bsl b/SSL/src/CommonModules/ОбновлениеИнформационнойБазы/Module.bsl index 3ab8a27c4..06136a557 100644 --- a/SSL/src/CommonModules/ОбновлениеИнформационнойБазы/Module.bsl +++ b/SSL/src/CommonModules/ОбновлениеИнформационнойБазы/Module.bsl @@ -91,6 +91,9 @@ // В этом случае оперативное (немонопольное обновление ИБ) будет // отменено и выдана ошибка с требованием выполнить обновление в // монопольном режиме. +// * Идентификатор - УникальныйИдентификатор - необходимо заполнять для обработчиков отложенного обновления, +// для остальных заполнение не требуется. Требуется для идентификации +// обработчика в случае его переименования. // Функция НоваяТаблицаОбработчиковОбновления() Экспорт @@ -108,6 +111,8 @@ Обработчики.Колонки.Добавить("ОбщиеДанные", Новый ОписаниеТипов("Булево")); Обработчики.Колонки.Добавить("УправлениеОбработчиками", Новый ОписаниеТипов("Булево")); Обработчики.Колонки.Добавить("МонопольныйРежим"); + // Для отложенных обработчиков обновления. + Обработчики.Колонки.Добавить("Идентификатор", Новый ОписаниеТипов("УникальныйИдентификатор")); // Устарело. Обратная совместимость до редакции "2.2". Обработчики.Колонки.Добавить("Опциональный"); @@ -147,13 +152,17 @@ // // Для использования в других библиотеках и конфигурациях. // +// Параметры: +// ВыполнятьОтложенныеОбработчики - Булево - если Истина, отложенное обновление будет выполнено +// в основном цикле обновления. Только для клиент-серверного режима работы. +// // Возвращаемое значение: // Строка - признак выполнения обработчиков обновления: // "Успешно", "НеТребуется", "ОшибкаУстановкиМонопольногоРежима". // -Функция ВыполнитьОбновлениеИнформационнойБазы() Экспорт +Функция ВыполнитьОбновлениеИнформационнойБазы(ВыполнятьОтложенныеОбработчики = Ложь) Экспорт - Возврат ОбновлениеИнформационнойБазыСлужебныйВызовСервера.ВыполнитьОбновлениеИнформационнойБазы(); + Возврат ОбновлениеИнформационнойБазыСлужебныйВызовСервера.ВыполнитьОбновлениеИнформационнойБазы(,, ВыполнятьОтложенныеОбработчики); КонецФункции @@ -183,6 +192,56 @@ КонецПроцедуры +// Записывает изменения в переданном объекте ссылочного типа. +// Для использования в обработчиках обновления. +// +// Параметры: +// Объект - Произвольный - записываемый объект ссылочного типа. Например, СправочникОбъект. +// РегистрироватьНаУзлахПлановОбмена - Булево - включает регистрацию на узлах планов обмена при записи объекта. +// ВключитьБизнесЛогику - Булево - включает бизнес-логику при записи объекта. +// +Процедура ЗаписатьОбъект(Знач Объект, Знач РегистрироватьНаУзлахПлановОбмена = Неопределено, + Знач ВключитьБизнесЛогику = Ложь) Экспорт + + Если РегистрироватьНаУзлахПлановОбмена = Неопределено Тогда + РегистрироватьНаУзлахПлановОбмена = Объект.ЭтоНовый(); + КонецЕсли; + + Объект.ОбменДанными.Загрузка = Не ВключитьБизнесЛогику; + Если Не РегистрироватьНаУзлахПлановОбмена Тогда + Объект.ДополнительныеСвойства.Вставить("ОтключитьМеханизмРегистрацииОбъектов"); + Объект.ОбменДанными.Получатели.АвтоЗаполнение = Ложь; + КонецЕсли; + + Объект.Записать(); + +КонецПроцедуры + +// Записывает изменения в переданном наборе записей. +// Для использования в обработчиках обновления. +// +// Параметры: +// НаборЗаписей - РегистрСведенийНаборЗаписей, +// РегистрНакопленияНаборЗаписей, +// РегистрБухгалтерииНаборЗаписей, +// РегистрРасчетаНаборЗаписей - набор записей, который необходимо записать. +// Замещать - Булево - Определяет режим замещения существующей записи в соответствии с текущими установками отбора. Истина - перед записью существующие записи будут удалены. Ложь - записи будут дописаны к уже существующим в информационной базе записям. +// РегистрироватьНаУзлахПлановОбмена - Булево - включает регистрацию на узлах планов обмена при записи объекта. +// ВключитьБизнесЛогику - Булево - включает бизнес-логику при записи объекта. +// +Процедура ЗаписатьНаборЗаписей(Знач НаборЗаписей, Замещать = Истина, Знач РегистрироватьНаУзлахПлановОбмена = Ложь, + Знач ВключитьБизнесЛогику = Ложь) Экспорт + + НаборЗаписей.ОбменДанными.Загрузка = Не ВключитьБизнесЛогику; + Если Не РегистрироватьНаУзлахПлановОбмена Тогда + НаборЗаписей.ДополнительныеСвойства.Вставить("ОтключитьМеханизмРегистрацииОбъектов"); + НаборЗаписей.ОбменДанными.Получатели.АвтоЗаполнение = Ложь; + КонецЕсли; + + НаборЗаписей.Записать(Замещать); + +КонецПроцедуры + // Удаляет переданный объект. // Для использования в обработчиках обновления. // @@ -204,33 +263,6 @@ КонецПроцедуры -// Записывает изменения в переданном объекте ссылочного типа. -// Для использования в обработчиках обновления. -// -// Параметры: -// Объект - Произвольный - записываемый объект ссылочного типа. Например, СправочникОбъект. -// РегистрироватьНаУзлахПлановОбмена - Булево - включает регистрацию на узлах планов обмена при записи объекта. -// ВключитьБизнесЛогику - Булево - включает бизнес-логику при записи объекта. -// -Процедура ЗаписатьОбъект(Знач Объект, Знач РегистрироватьНаУзлахПлановОбмена = Неопределено, - Знач ВключитьБизнесЛогику = Ложь) Экспорт - - Если РегистрироватьНаУзлахПлановОбмена = Неопределено И Объект.ЭтоНовый() Тогда - РегистрироватьНаУзлахПлановОбмена = Истина; - Иначе - РегистрироватьНаУзлахПлановОбмена = Ложь; - КонецЕсли; - - Объект.ОбменДанными.Загрузка = Не ВключитьБизнесЛогику; - Если Не РегистрироватьНаУзлахПлановОбмена Тогда - Объект.ДополнительныеСвойства.Вставить("ОтключитьМеханизмРегистрацииОбъектов"); - Объект.ОбменДанными.Получатели.АвтоЗаполнение = Ложь; - КонецЕсли; - - Объект.Записать(); - -КонецПроцедуры - // Возвращает строковую константу для формирования сообщений журнала регистрации. // // Возвращаемое значение: diff --git a/SSL/src/CommonModules/ОбновлениеИнформационнойБазыБСП/Module.bsl b/SSL/src/CommonModules/ОбновлениеИнформационнойБазыБСП/Module.bsl index 56cd4af06..068c51a2f 100644 --- a/SSL/src/CommonModules/ОбновлениеИнформационнойБазыБСП/Module.bsl +++ b/SSL/src/CommonModules/ОбновлениеИнформационнойБазыБСП/Module.bsl @@ -28,7 +28,7 @@ Процедура ПриДобавленииПодсистемы(Описание) Экспорт Описание.Имя = "СтандартныеПодсистемы"; - Описание.Версия = "2.2.5.36"; + Описание.Версия = "2.3.1.88"; КонецПроцедуры diff --git a/SSL/src/CommonModules/ОбновлениеИнформационнойБазыВызовСервера/Module.bsl b/SSL/src/CommonModules/ОбновлениеИнформационнойБазыВызовСервера/Module.bsl index 75f9d5f09..f53e10990 100644 --- a/SSL/src/CommonModules/ОбновлениеИнформационнойБазыВызовСервера/Module.bsl +++ b/SSL/src/CommonModules/ОбновлениеИнформационнойБазыВызовСервера/Module.bsl @@ -5,12 +5,14 @@ // //////////////////////////////////////////////////////////////////////////////// -#Область ПрограммныйИнтерфейс +#Область СлужебныйПрограммныйИнтерфейс -// Устарела. Следует использовать одноименную процедуру в общем модуле ОбновлениеИнформационнойБазы. -Функция ВыполнитьОбновлениеИнформационнойБазы() Экспорт +// Для интеграции с подсистемой "Обновление конфигурации". +// См. макет МакетФайлаОбновленияКонфигурации обработки ПоискИУстановкаОбновлений. +// +Функция ВыполнитьОбновлениеИнформационнойБазы(ВыполнятьОтложенныеОбработчики = Ложь) Экспорт - Возврат ОбновлениеИнформационнойБазы.ВыполнитьОбновлениеИнформационнойБазы(); + Возврат ОбновлениеИнформационнойБазы.ВыполнитьОбновлениеИнформационнойБазы(ВыполнятьОтложенныеОбработчики); КонецФункции diff --git a/SSL/src/CommonModules/ОбновлениеИнформационнойБазыВызовСервера/ОбновлениеИнформационнойБазыВызовСервера.mdo b/SSL/src/CommonModules/ОбновлениеИнформационнойБазыВызовСервера/ОбновлениеИнформационнойБазыВызовСервера.mdo index 0b7620d5b..43fa20f82 100644 --- a/SSL/src/CommonModules/ОбновлениеИнформационнойБазыВызовСервера/ОбновлениеИнформационнойБазыВызовСервера.mdo +++ b/SSL/src/CommonModules/ОбновлениеИнформационнойБазыВызовСервера/ОбновлениеИнформационнойБазыВызовСервера.mdo @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="UTF-8"?> -<mdclass:CommonModule xmlns:mdclass="http://g5.1c.ru/v8/dt/metadata/mdclass" uuid="958033a6-2a8e-473a-903b-34eee6507f5a"> +<mdclass:CommonModule xmlns:mdclass="http://g5.1c.ru/v8/dt/metadata/mdclass" uuid="f20a04a7-84fa-48e3-8ac5-28176c1fcada"> <name>ОбновлениеИнформационнойБазыВызовСервера</name> <synonym> <key>ru</key> diff --git a/SSL/src/CommonModules/ОбновлениеИнформационнойБазыГлобальный/Module.bsl b/SSL/src/CommonModules/ОбновлениеИнформационнойБазыГлобальный/Module.bsl index 20454f962..c7719cd5c 100644 --- a/SSL/src/CommonModules/ОбновлениеИнформационнойБазыГлобальный/Module.bsl +++ b/SSL/src/CommonModules/ОбновлениеИнформационнойБазыГлобальный/Module.bsl @@ -13,7 +13,7 @@ ПараметрыКлиента = СтандартныеПодсистемыКлиентПовтИсп.ПараметрыРаботыКлиентаПриЗапуске(); Если ПараметрыКлиента.Свойство("ПоказатьСообщениеОбОшибочныхОбработчиках") Тогда - ОткрытьФорму("Обработка.ОбновлениеИнформационнойБазы.Форма.ИндикацияХодаОтложенногоОбновленияИБ"); + ОткрытьФорму("Обработка.РезультатыОбновленияПрограммы.Форма.ИндикацияХодаОтложенногоОбновленияИБ"); Иначе ОбновлениеИнформационнойБазыКлиент.ОповеститьОтложенныеОбработчикиНеВыполнены(); КонецЕсли; diff --git a/SSL/src/CommonModules/ОбновлениеИнформационнойБазыКлиент/Module.bsl b/SSL/src/CommonModules/ОбновлениеИнформационнойБазыКлиент/Module.bsl index 03a6dcabb..9092208d0 100644 --- a/SSL/src/CommonModules/ОбновлениеИнформационнойБазыКлиент/Module.bsl +++ b/SSL/src/CommonModules/ОбновлениеИнформационнойБазыКлиент/Module.bsl @@ -4,6 +4,22 @@ // //////////////////////////////////////////////////////////////////////////////// +#Область СлужебныйПрограммныйИнтерфейс + +// Только для внутреннего использования. Продолжение процедуры ПередНачаломРаботыПрограммы. +Процедура ПроверитьСтатусОбработчиковОтложенногоОбновления(Параметры) Экспорт + + ПараметрыКлиента = СтандартныеПодсистемыКлиентПовтИсп.ПараметрыРаботыКлиентаПриЗапуске(); + Если ПараметрыКлиента.Свойство("НеобходимоВыполнитьОбработчикиОтложенногоОбновления") Тогда + Параметры.ИнтерактивнаяОбработка = Новый ОписаниеОповещения( + "ИнтерактивнаяОбработкаПроверкиСтатусаОтложенногоОбновления", + ЭтотОбъект); + КонецЕсли; + +КонецПроцедуры + +#КонецОбласти + #Область СлужебныеПроцедурыИФункции // См. описание параметра ПриЗапускеКлиентскогоПриложения в модуле. @@ -23,7 +39,7 @@ Иначе Если ПараметрыРаботыКлиента.Свойство("ЗагрузитьСообщениеОбменаДанными") Тогда Перезапустить = Ложь; - ОбновлениеИнформационнойБазыСлужебныйВызовСервера.ВыполнитьОбновлениеИнформационнойБазы(, Истина, Перезапустить); + ОбновлениеИнформационнойБазыСлужебныйВызовСервера.ВыполнитьОбновлениеИнформационнойБазы(Истина, Перезапустить); Если Перезапустить Тогда Параметры.Отказ = Истина; Параметры.Перезапустить = Истина; @@ -52,7 +68,7 @@ Если Параметры.Свойство("ФормаИндикацияХодаОбновленияИБ") Тогда Форма = Параметры.ФормаИндикацияХодаОбновленияИБ; Иначе - ИмяФормы = "Обработка.ОбновлениеИнформационнойБазы.Форма.ИндикацияХодаОбновленияИБ"; + ИмяФормы = "Обработка.РезультатыОбновленияПрограммы.Форма.ИндикацияХодаОбновленияИБ"; Форма = ОткрытьФорму(ИмяФормы,,,,,, Новый ОписаниеОповещения( "ПослеЗакрытияФормыИндикацияХодаОбновленияИБ", ЭтотОбъект, Параметры)); @@ -67,7 +83,7 @@ // Только для внутреннего использования. Продолжение процедуры ПередНачаломРаботыПрограммы. Процедура ЗагрузитьОбновитьПараметрыРаботыПрограммы(Параметры, Неопределен) Экспорт - ИмяФормы = "Обработка.ОбновлениеИнформационнойБазы.Форма.ИндикацияХодаОбновленияИБ"; + ИмяФормы = "Обработка.РезультатыОбновленияПрограммы.Форма.ИндикацияХодаОбновленияИБ"; Форма = ОткрытьФорму(ИмяФормы,,,,,, Новый ОписаниеОповещения( "ПослеЗакрытияФормыИндикацияХодаОбновленияИБ", ЭтотОбъект, Параметры)); @@ -96,8 +112,29 @@ КонецПроцедуры + +// Только для внутреннего использования. Продолжение процедуры ПроверитьСтатусОбработчиковОтложенногоОбновления. +Процедура ИнтерактивнаяОбработкаПроверкиСтатусаОтложенногоОбновления(Параметры, Неопределен) Экспорт + + ОткрытьФорму("Обработка.РезультатыОбновленияПрограммы.Форма.ОтложенноеОбновлениеНеЗавершено", , , , , , + Новый ОписаниеОповещения("ПослеЗакрытияФормыПроверкиСтатусаОтложенногоОбновления", + ЭтотОбъект, Параметры)); + +КонецПроцедуры + +// Только для внутреннего использования. Продолжение процедуры ПроверитьСтатусОбработчиковОтложенногоОбновления. +Процедура ПослеЗакрытияФормыПроверкиСтатусаОтложенногоОбновления(Результат, Параметры) Экспорт + + Если Результат <> Истина Тогда + Параметры.Отказ = Истина; + КонецЕсли; + + ВыполнитьОбработкуОповещения(Параметры.ОбработкаПродолжения); + +КонецПроцедуры + // Если есть непоказанные описания изменения и у пользователя не отключен -// показ - открыть форму ОписаниеИзмененийСистемы. +// показ - открыть форму ОписаниеИзмененийПрограммы. // Процедура ПоказатьОписаниеИзмененийСистемы() @@ -107,7 +144,7 @@ ПараметрыФормы = Новый Структура; ПараметрыФормы.Вставить("ПоказыватьТолькоИзменения", Истина); - ОткрытьФорму("ОбщаяФорма.ОписаниеИзмененийСистемы", ПараметрыФормы); + ОткрытьФорму("ОбщаяФорма.ОписаниеИзмененийПрограммы", ПараметрыФормы); КонецЕсли; КонецПроцедуры @@ -128,7 +165,7 @@ // Возвращает навигационную ссылку обработки ОбновлениеИнформационнойБазы. // Функция НавигационнаяСсылкаОбработки() - Возврат "e1cib/app/Обработка.ОбновлениеИнформационнойБазы"; + Возврат "e1cib/app/Обработка.РезультатыОбновленияПрограммы"; КонецФункции // Выполняется при интерактивном начале работы пользователя с областью данных или в локальном режиме. @@ -156,6 +193,9 @@ Процедура ПередНачаломРаботыСистемы(Параметры) Экспорт ПараметрыКлиента = СтандартныеПодсистемыКлиентПовтИсп.ПараметрыРаботыКлиентаПриЗапуске(); + Если Не ПараметрыКлиента.РазделениеВключено Или Не ПараметрыКлиента.ДоступноИспользованиеРазделенныхДанных Тогда + ОбновлениеИнформационнойБазыКлиентПереопределяемый.ПриОпределенииВозможностиОбновления(ПараметрыКлиента.ВерсияДанныхОсновнойКонфигурации); + КонецЕсли; Если ПараметрыКлиента.Свойство("ИнформационнаяБазаЗаблокированаДляОбновления") Тогда Параметры.Отказ = Истина; @@ -164,17 +204,6 @@ СтандартныеПодсистемыКлиент.ЭтотОбъект, ПараметрыКлиента.ИнформационнаяБазаЗаблокированаДляОбновления); - ИначеЕсли ПараметрыКлиента.Свойство("НеобходимоОбновлениеПараметровРаботыПрограммы") Тогда - Параметры.ИнтерактивнаяОбработка = Новый ОписаниеОповещения( - "ЗагрузитьОбновитьПараметрыРаботыПрограммы", ЭтотОбъект, Параметры); - - ИначеЕсли Найти(НРег(ПараметрЗапуска), НРег("ЗарегистрироватьПолноеИзменениеИОМДляПодчиненныхУзловРИБ")) > 0 Тогда - Параметры.Отказ = Истина; - Параметры.ИнтерактивнаяОбработка = Новый ОписаниеОповещения( - "ПоказатьПредупреждениеИПродолжить", - СтандартныеПодсистемыКлиент.ЭтотОбъект, - НСтр("ru = 'Параметр запуска ЗарегистрироватьПолноеИзменениеИОМДляПодчиненныхУзловРИБ - |можно использовать только совместно с параметром ЗапуститьОбновлениеИнформационнойБазы.'")); КонецЕсли; КонецПроцедуры diff --git a/SSL/src/CommonModules/ОбновлениеИнформационнойБазыКлиентПереопределяемый/Module.bsl b/SSL/src/CommonModules/ОбновлениеИнформационнойБазыКлиентПереопределяемый/Module.bsl index 8fe64d28c..f98d211bf 100644 --- a/SSL/src/CommonModules/ОбновлениеИнформационнойБазыКлиентПереопределяемый/Module.bsl +++ b/SSL/src/CommonModules/ОбновлениеИнформационнойБазыКлиентПереопределяемый/Module.bsl @@ -18,6 +18,19 @@ +КонецПроцедуры + +// Вызывается в обработчике ПередНачаломРаботыСистемы, проверяет возможность +// обновления на текущую версию программы. +// +// Параметры: +// ВерсияДанных - Строка - версия данных основной конфигурации, с которой выполняется обновление +// (из регистра сведений ВерсииПодсистем) +// +Процедура ПриОпределенииВозможностиОбновления(Знач ВерсияДанных) Экспорт + + + КонецПроцедуры #КонецОбласти diff --git a/SSL/src/CommonModules/ОбновлениеИнформационнойБазыПереопределяемый/Module.bsl b/SSL/src/CommonModules/ОбновлениеИнформационнойБазыПереопределяемый/Module.bsl index 6bdf9513e..24d3cfdb0 100644 --- a/SSL/src/CommonModules/ОбновлениеИнформационнойБазыПереопределяемый/Module.bsl +++ b/SSL/src/CommonModules/ОбновлениеИнформационнойБазыПереопределяемый/Module.bsl @@ -79,55 +79,19 @@ КонецПроцедуры -// Устарела. Следует использовать процедуру ПриДобавленииПодсистем -// общего модуля ПодсистемыКонфигурацииПереопределяемый. -// -// Вызывается перед началом обновления данных ИБ. -// Возвращает список процедур-обработчиков обновления ИБ для всех поддерживаемых версий ИБ. -// -// Пример добавления процедуры-обработчика в список: -// Обработчик = Обработчики.Добавить(); -// Обработчик.Версия = "1.1.0.0"; -// Обработчик.Процедура = "ОбновлениеИБ.ПерейтиНаВерсию_1_1_0_0"; -// -// Возвращаемое значение: -// ТаблицаЗначений - состав колонок см. в ОбновлениеИнформационнойБазы.НоваяТаблицаОбработчиковОбновления. -// -Функция ОбработчикиОбновления() Экспорт - - Обработчики = ОбновлениеИнформационнойБазы.НоваяТаблицаОбработчиковОбновления(); - - // Подключаются процедуры-обработчики обновления конфигурации. - - Возврат Обработчики; - -КонецФункции - -// Устарела. Следует использовать процедуру ПриОтключенииОбработчиковОбновления. -// -// Вызывается для получения списка обработчиков обновления, которые не нужно выполнять. -// Отключать можно только обработчики обновления с номером версии "*". -// -// Пример добавления отключаемого обработчика в список: -// НовоеИсключение = ОтключаемыеОбработчики.Добавить(); -// НовоеИсключение.ИдентификаторБиблиотеки = "СтандартныеПодсистемы"; -// НовоеИсключение.Версия = "*"; -// НовоеИсключение.Процедура = "ВариантыОтчетов.Обновить"; -// -// Версия - номер версии конфигурации, в которой нужно отключить -// выполнение обработчика. -// -Процедура ДобавитьОтключаемыеОбработчикиОбновления(ОтключаемыеОбработчики) Экспорт - -КонецПроцедуры - -// Устарела. Следует использовать процедуру ПриПолученииПоясненияДляРезультатовОбновленияПрограммы. -// Переопределяет текст подсказки, указывающий путь к форме "Результаты обновления программы". +// Переопределяет сообщение о наличии невыполненных отложенных обработчиков обновления +// на прошлую версию при попытке обновления. // // Параметры: -// ТекстПодсказки - Строка - текст подсказки. +// Параметры - Структура - структура со свойствами: +// * ТекстСообщения - Строка - текст сообщения, выводимый пользователю. По умолчанию +// текст сообщения построен с учетом того, что обновление можно +// продолжить, т.е. параметр ЗапрещатьПродолжение = Ложь. +// * КартинкаСообщения - БиблиотекаКартинок: Картинка - картинка, выводимая слева от сообщения. +// * ЗапрещатьПродолжение - Булево - если Истина, продолжить обновление будет невозможно. По умолчанию Ложь. // -Процедура ПолучитьТекстПоясненияДляРезультатовОбновленияПрограммы(ТекстПодсказки) Экспорт +Процедура ПриОпределенииПараметровСообщенияОНевыполненныхОтложенныхОбработчиках(Параметры) Экспорт + КонецПроцедуры diff --git a/SSL/src/CommonModules/ОбновлениеИнформационнойБазыСлужебный/Module.bsl b/SSL/src/CommonModules/ОбновлениеИнформационнойБазыСлужебный/Module.bsl index 91a8c29bb..27cec2c45 100644 --- a/SSL/src/CommonModules/ОбновлениеИнформационнойБазыСлужебный/Module.bsl +++ b/SSL/src/CommonModules/ОбновлениеИнформационнойБазыСлужебный/Module.bsl @@ -103,7 +103,7 @@ СерверныеОбработчики["СтандартныеПодсистемы.БазоваяФункциональность\ПриОтправкеДанныхГлавному"].Добавить( "ОбновлениеИнформационнойБазыСлужебный"); - СерверныеОбработчики["СтандартныеПодсистемы.БазоваяФункциональность\ПриДобавленииПараметровРаботыКлиентскойЛогикиСтандартныхПодсистемПриЗапуске"].Добавить( + СерверныеОбработчики["СтандартныеПодсистемы.БазоваяФункциональность\ПриДобавленииПараметровРаботыКлиентаПриЗапуске"].Добавить( "ОбновлениеИнформационнойБазыСлужебный"); СерверныеОбработчики["СтандартныеПодсистемы.БазоваяФункциональность\ПриПолученииОбязательныхОбъектовПланаОбмена"].Добавить( @@ -112,9 +112,6 @@ СерверныеОбработчики["СтандартныеПодсистемы.БазоваяФункциональность\ПриПолученииОбъектовНачальногоОбразаПланаОбмена"].Добавить( "ОбновлениеИнформационнойБазыСлужебный"); - СерверныеОбработчики["СтандартныеПодсистемы.БазоваяФункциональность\ПриДобавленииОбработчиковУстановкиПараметровСеанса"].Добавить( - "ОбновлениеИнформационнойБазыСлужебный"); - Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаВМоделиСервиса.ОчередьЗаданий") Тогда СерверныеОбработчики[ "СтандартныеПодсистемы.РаботаВМоделиСервиса.ОчередьЗаданий\ПриПолученииСпискаШаблонов"].Добавить( @@ -180,105 +177,6 @@ КонецФункции -// Возвращает текст причины блокировки, если требуется обновление ИБ и у текущего пользователя -// для этого недостаточно прав, иначе возвращает пустую строку. -// -// Параметры: -// УчитыватьПривилегированныйРежим - Булево - если указать Ложь, то при проверке прав текущего пользователя -// наличие привилегированного режима не будет учитываться. -// -// Возвращаемое значение: -// Строка - если база не заблокирована, тогда пустая строка, иначе сообщение о причине блокировки. -// -Функция ИнформационнаяБазаЗаблокированаДляОбновления(УчитыватьПривилегированныйРежим = Истина) Экспорт - - Сообщение = ""; - - ТекущийПользовательИБ = ПользователиИнформационнойБазы.ТекущийПользователь(); - - // Для входа в заблокированную базу достаточно только одного права администрирования. - Если УчитыватьПривилегированныйРежим Тогда - ЕстьПравоАдминистрирование = ПравоДоступа("Администрирование", Метаданные); - Иначе - ЕстьПравоАдминистрирование = ПравоДоступа("Администрирование", Метаданные, ТекущийПользовательИБ); - КонецЕсли; - - СообщениеАдминистраторуСистемы = - НСтр("ru = 'Вход в программу временно невозможен в связи с обновлением на новую версию. - |Для завершения обновления версии программы требуются административные права - |(роли ""Администратор системы"" и ""Полные права"").'"); - - УстановитьПривилегированныйРежим(Истина); - РазделениеВключено = ОбщегоНазначенияПовтИсп.РазделениеВключено(); - ДоступноИспользованиеРазделенныхДанных = ОбщегоНазначенияПовтИсп.ДоступноИспользованиеРазделенныхДанных(); - УстановитьПривилегированныйРежим(Ложь); - - Если НеобходимоОбновлениеНеразделенныхДанныхИнформационнойБазы() Тогда - - СообщениеАдминистраторуОбластиДанных = - НСтр("ru = 'Вход в приложение временно невозможен в связи с обновлением на новую версию. - |Обратитесь к администратору сервиса за подробностями.'"); - - Если ДоступноИспользованиеРазделенныхДанных Тогда - Сообщение = СообщениеАдминистраторуОбластиДанных; - - ИначеЕсли НЕ ЕстьПраваНаОбновлениеИнформационнойБазы(УчитыватьПривилегированныйРежим, Ложь) Тогда - - Если ЕстьПравоАдминистрирование Тогда - Сообщение = СообщениеАдминистраторуСистемы; - Иначе - Сообщение = СообщениеАдминистраторуОбластиДанных; - КонецЕсли; - КонецЕсли; - - Возврат Сообщение; - КонецЕсли; - - // Сообщение администратору сервиса не выдается. - Если РазделениеВключено И Не ДоступноИспользованиеРазделенныхДанных Тогда - Возврат ""; - КонецЕсли; - - Если ЕстьПраваНаОбновлениеИнформационнойБазы(УчитыватьПривилегированныйРежим, Истина) Тогда - Возврат ""; - КонецЕсли; - - ТребуетсяПовторитьЗагрузкуСообщенияОбменаДаннымиПередЗапуском = Ложь; - Если ОбщегоНазначения.ЭтоПодчиненныйУзелРИБ() - И ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ОбменДанными") Тогда - - МодульОбменДаннымиВызовСервера = ОбщегоНазначения.ОбщийМодуль("ОбменДаннымиВызовСервера"); - Если МодульОбменДаннымиВызовСервера.ПовторитьЗагрузкуСообщенияОбменаДаннымиПередЗапуском() Тогда - ТребуетсяПовторитьЗагрузкуСообщенияОбменаДаннымиПередЗапуском = Истина; - КонецЕсли; - КонецЕсли; - - Если Не ОбновлениеИнформационнойБазы.НеобходимоОбновлениеИнформационнойБазы() - И Не ТребуетсяПроверитьЛегальностьПолученияОбновления() - И Не ТребуетсяПовторитьЗагрузкуСообщенияОбменаДаннымиПередЗапуском Тогда - Возврат ""; - КонецЕсли; - - Если ЕстьПравоАдминистрирование Тогда - Возврат СообщениеАдминистраторуСистемы; - КонецЕсли; - - Если РазделениеВключено Тогда - // Сообщение пользователю сервиса. - Сообщение = - НСтр("ru = 'Вход в приложение временно невозможен в связи с обновлением на новую версию. - |Обратитесь к администратору сервиса за подробностями.'"); - Иначе - // Сообщение пользователю локального режима. - Сообщение = - НСтр("ru = 'Вход в программу временно невозможен в связи с обновлением на новую версию. - |Обратитесь к администратору за подробностями.'"); - КонецЕсли; - - Возврат Сообщение; - -КонецФункции - // Выполнить неинтерактивное обновление данных ИБ. // // Параметры: @@ -303,6 +201,8 @@ // * УстановленнаяБлокировкаИБ - Структура - структура со свойствами см. БлокировкаИБ(). // * ВФоне - Булево - если обновление информационной базы выполняется // в фоне, то следует передавать Истина, иначе Ложь. +// * ВыполнятьОтложенныеОбработчики - Булево - если Истина, отложенное обновление будет выполнено +// в основном цикле обновления. Только для клиент-серверного режима работы. // // Возвращаемое значение: // Строка - признак выполнения обработчиков обновления: @@ -310,6 +210,14 @@ // Функция ВыполнитьОбновлениеИнформационнойБазы(ПараметрыОбновления) Экспорт +#Если ВнешнееСоединение Тогда + // См. Справочники.ИдентификаторыОбъектовМетаданных.ПроверитьВозможностьЗапускаФоновогоЗадания. + Если ОбщегоНазначения.ИнформационнаяБазаФайловая() И РасширенияКонфигурации.Получить().Количество() > 0 Тогда + ВызватьИсключение НСтр("ru = 'Перед обновлением необходимо удалить все подключенные расширения конфигурации. + |После завершения обновления их нужно подключить заново.'"); + КонецЕсли; +#КонецЕсли + Если НЕ ПараметрыОбновления.ПриЗапускеКлиентскогоПриложения Тогда Попытка СтандартныеПодсистемыСервер.ЗагрузитьОбновитьПараметрыРаботыПрограммы(); @@ -319,6 +227,8 @@ КонецПопытки; КонецЕсли; + РежимВыполненияОтложенногоОбновления = РежимВыполненияОтложенногоОбновления(ПараметрыОбновления); + // Определяем факт смены имени конфигурации. РежимОбновленияДанных = РежимОбновленияДанных(); @@ -459,12 +369,11 @@ КонецЕсли; // Для файловой базы отложенные обработчики выполняются в основном цикле обновления. - Если ОбщегоНазначения.ИнформационнаяБазаФайловая() И - (Не ОбщегоНазначенияПовтИсп.РазделениеВключено() - Или ОбщегоНазначенияПовтИсп.ДоступноИспользованиеРазделенныхДанных()) Тогда + Если РежимВыполненияОтложенногоОбновления <> Неопределено + И РежимВыполненияОтложенногоОбновления = "Монопольно" Тогда ПараметрЗапускаКлиента = ПараметрыСеанса.ПараметрыКлиентаНаСервере.Получить("ПараметрЗапуска"); - Если Найти(НРег(ПараметрЗапускаКлиента), НРег("ОтладкаОтложенногоОбновления")) = 0 Тогда + Если СтрНайти(НРег(ПараметрЗапускаКлиента), НРег("ОтладкаОтложенногоОбновления")) = 0 Тогда ВыполнитьОтложенноеОбновлениеСейчас(); КонецЕсли; @@ -514,13 +423,9 @@ КонецЕсли; // Для клиент-серверной базы запланировать выполнение отложенных обработчиков обновления. - Если Не ОбщегоНазначения.ИнформационнаяБазаФайловая() Тогда - - Если Не ОбщегоНазначенияПовтИсп.РазделениеВключено() - Или ОбщегоНазначенияПовтИсп.ДоступноИспользованиеРазделенныхДанных() Тогда - ЗапланироватьОтложенноеОбновление(); - КонецЕсли; - + Если РежимВыполненияОтложенногоОбновления <> Неопределено + И РежимВыполненияОтложенногоОбновления = "Отложенно" Тогда + ЗапланироватьОтложенноеОбновление(); КонецЕсли; ОпределитьВыводОписанияОбновлений(ВыводитьОписаниеОбновлений); @@ -539,7 +444,13 @@ КонецЕсли; УстановитьПривилегированныйРежим(Истина); - СтандартныеПодсистемыСервер.УстановитьЗапускОбновленияИнформационнойБазы(Ложь); + ПараметрЗапускаКлиента = ПараметрыСеанса.ПараметрыКлиентаНаСервере.Получить("ПараметрЗапуска"); + Если СтрНайти(НРег(ПараметрЗапускаКлиента), НРег("ЗапуститьОбновлениеИнформационнойБазы")) > 0 Тогда + СтандартныеПодсистемыСервер.ЗарегистрироватьИзменениеПриоритетныхДанныхДляПодчиненныхУзловРИБ(); + КонецЕсли; + УстановитьПривилегированныйРежим(Ложь); + + УстановитьЗапускОбновленияИнформационнойБазы(Ложь); Возврат "Успешно"; @@ -692,14 +603,13 @@ Если НЕ СтандартнаяОбработка Тогда ОбщегоНазначенияКлиентСервер.ПроверитьПараметр("ПриОпределенииРежимаОбновленияДанных", "РежимОбновленияДанных", РежимОбновленияДанных, Тип("Строка")); - Сообщение = НСтр("ru = 'Недопустимое значение параметра %1 в %2. - |Ожидалось: %3; передано значение: %4 (тип %5).'"); - Сообщение = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(Сообщение, + Сообщение = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Недопустимое значение параметра %1 в %2. + |Ожидалось: %3; передано значение: %4 (тип %5).'"), "РежимОбновленияДанных", "ПриОпределенииРежимаОбновленияДанных", НСтр("ru = 'НачальноеЗаполнение, ОбновлениеВерсии или ПереходСДругойПрограммы'"), РежимОбновленияДанных, ТипЗнч(РежимОбновленияДанных)); - ОбщегоНазначенияКлиентСервер.Проверить(РежимОбновленияДанных = "НачальноеЗаполнение" Или - РежимОбновленияДанных = "ОбновлениеВерсии" Или РежимОбновленияДанных = "ПереходСДругойПрограммы", Сообщение); + ОбщегоНазначенияКлиентСервер.Проверить(РежимОбновленияДанных = "НачальноеЗаполнение" + Или РежимОбновленияДанных = "ОбновлениеВерсии" Или РежимОбновленияДанных = "ПереходСДругойПрограммы", Сообщение); Возврат РежимОбновленияДанных; КонецЕсли; @@ -717,43 +627,6 @@ КонецФункции -// Заполняет структуру параметров, необходимых для работы клиентского кода -// конфигурации. -// -// Параметры: -// Параметры - Структура - структура параметров. -// -Процедура ДобавитьПараметрыРаботыКлиента(Параметры) Экспорт - -КонецПроцедуры - -// Проверяет наличие обработчиков в текущем плане обновления. -// -// Параметры: -// ИдентификаторБиблиотеки - Строка - имя конфигурации или идентификатор библиотеки. -// -// Возвращаемое значение: -// Булево - Истина - текущий план обновления пустой, Ложь - иначе. -// -Функция ТекущийПланОбновленияПустой(Знач ИдентификаторБиблиотеки) Экспорт - - МенеджерЗаписи = РегистрыСведений.ВерсииПодсистем.СоздатьМенеджерЗаписи(); - МенеджерЗаписи.ИмяПодсистемы = ИдентификаторБиблиотеки; - МенеджерЗаписи.Прочитать(); - Если НЕ МенеджерЗаписи.Выбран() Тогда - Возврат Истина; - КонецЕсли; - - ОписаниеПлана = МенеджерЗаписи.ПланОбновления.Получить(); - - Если ОписаниеПлана = Неопределено Тогда - Возврат Истина; - КонецЕсли; - - Возврат ОписаниеПлана.План.Строки.Количество() = 0; - -КонецФункции - // Для внутреннего использования. Функция ОбработчикиОбновленияВИнтервале(Знач ИсходнаяТаблицаОбработчиков, Знач ВерсияОт, Знач ВерсияДо, Знач ПолучатьРазделенные = Ложь, Знач Отбор = "Монопольно") Экспорт @@ -782,7 +655,7 @@ // Определение обработчиков новых подсистем. ВсеОбработчики.Колонки.Добавить("ЭтоНоваяПодсистема", Новый ОписаниеТипов("Булево")); Для Каждого ОписаниеОбработчика Из ВсеОбработчики Цикл - Позиция = СтроковыеФункцииКлиентСервер.НайтиСимволСКонца(ОписаниеОбработчика.Процедура, "."); + Позиция = СтрНайти(ОписаниеОбработчика.Процедура, ".", НаправлениеПоиска.СКонца); ИмяМенеджера = Лев(ОписаниеОбработчика.Процедура, Позиция - 1); Если ОбъектыНовыхПодсистем.Найти(ИмяОбъектаМетаданныхПоИмениМенеджера(ИмяМенеджера)) <> Неопределено Тогда ОписаниеОбработчика.ЭтоНоваяПодсистема = Истина; @@ -834,6 +707,12 @@ КонецФункции +// Для внутреннего использования. +// +Функция НеобходимоВыполнитьОбновление(Знач ВерсияМетаданных, Знач ВерсияДанных) Экспорт + Возврат НЕ ПустаяСтрока(ВерсияМетаданных) И ВерсияДанных <> ВерсияМетаданных; +КонецФункции + // Возвращает Истина, если у пользователя не отключен показ описания изменений // системы после обновления и есть непоказанные изменения. // @@ -873,6 +752,276 @@ КонецФункции +// Проверяет статус отложенных обработчиков обновления. +// +Функция СтатусНевыполненныхОбработчиков(ПриОбновлении = Ложь) Экспорт + + СведенияОбОбновлении = СведенияОбОбновленииИнформационнойБазы(); + + Если ПриОбновлении Тогда + ВерсияДанных = ВерсияИБ(Метаданные.Имя); + ВерсияДанныхБезНомераСборки = ОбщегоНазначенияКлиентСервер.ВерсияКонфигурацииБезНомераСборки(ВерсияДанных); + ВерсияМетаданныхБезНомераСборки = ОбщегоНазначенияКлиентСервер.ВерсияКонфигурацииБезНомераСборки(Метаданные.Версия); + ПодредакцииРавны = (ВерсияДанныхБезНомераСборки = ВерсияМетаданныхБезНомераСборки); + + Если ВерсияДанных = "0.0.0.0" Или ПодредакцииРавны Тогда + // В пределах четвертой цифры можно обновляться при наличии невыполненных + // отложенных обработчиков обновления. + Возврат ""; + КонецЕсли; + + ВерсияДереваОбработчиков = СведенияОбОбновлении.ВерсияДереваОбработчиков; + Если ВерсияДереваОбработчиков <> "" И ОбщегоНазначенияКлиентСервер.СравнитьВерсии(ВерсияДереваОбработчиков, ВерсияДанных) > 0 Тогда + // Если в основном цикле обновления произошла ошибка, то при перезапуске не надо + // проверять дерево отложенных обработчиков, т.к. там будут еще невыполненные + // отложенные обработчики на текущую версию. + Возврат ""; + КонецЕсли; + КонецЕсли; + + ЕстьОбработчикиСОшибкой = Ложь; + ЕстьНевыполненныеОбработчики = Ложь; + ЕстьПриостановленныеОбработчики = Ложь; + Для Каждого СтрокаДереваБиблиотека Из СведенияОбОбновлении.ДеревоОбработчиков.Строки Цикл + Для Каждого СтрокаДереваВерсия Из СтрокаДереваБиблиотека.Строки Цикл + Для Каждого Обработчик Из СтрокаДереваВерсия.Строки Цикл + Если Обработчик.Статус = "Ошибка" Тогда + // Если найдены обработчики с ошибкой, цикл не прерывается, + // надо убедиться, что нет еще невыполненных обработчиков. + ЕстьОбработчикиСОшибкой = Истина; + ИначеЕсли Обработчик.Статус <> "Выполнено" Тогда + ЕстьНевыполненныеОбработчики = Истина; + Прервать; + ИначеЕсли Обработчик.Статус = "Приостановлен" Тогда + ЕстьПриостановленныеОбработчики = Истина; + КонецЕсли; + КонецЦикла; + КонецЦикла; + КонецЦикла; + + Если ЕстьНевыполненныеОбработчики Тогда + Возврат "СтатусНеВыполнено"; + ИначеЕсли ЕстьОбработчикиСОшибкой Тогда + Возврат "СтатусОшибка"; + ИначеЕсли ЕстьПриостановленныеОбработчики Тогда + Возврат "СтатусПриостановлен"; + Иначе + Возврат ""; + КонецЕсли; + +КонецФункции + +// Выполняет все процедуры отложенного обновления в цикле за один вызов. +// +Процедура ВыполнитьОтложенноеОбновлениеСейчас() Экспорт + + СведенияОбОбновлении = СведенияОбОбновленииИнформационнойБазы(); + + Если СведенияОбОбновлении.ВремяОкончаниеОтложенногоОбновления <> Неопределено Тогда + Возврат; + КонецЕсли; + + Если СведенияОбОбновлении.ВремяНачалаОтложенногоОбновления = Неопределено Тогда + СведенияОбОбновлении.ВремяНачалаОтложенногоОбновления = ТекущаяДатаСеанса(); + КонецЕсли; + + Если ТипЗнч(СведенияОбОбновлении.НомерСеанса) <> Тип("СписокЗначений") Тогда + СведенияОбОбновлении.НомерСеанса = Новый СписокЗначений; + КонецЕсли; + СведенияОбОбновлении.НомерСеанса.Добавить(НомерСеансаИнформационнойБазы()); + ЗаписатьСведенияОбОбновленииИнформационнойБазы(СведенияОбОбновлении); + + ОбработчикиВыполнялись = Истина; + Пока ОбработчикиВыполнялись Цикл + ОбработчикиВыполнялись = ВыполнитьОтложенныйОбработчикОбновления(СведенияОбОбновлении); + КонецЦикла; + +КонецПроцедуры + +// Для внутреннего использования. +Функция ДобавитьПараметрыРаботыКлиентаПриЗапуске(Параметры) Экспорт + + Параметры.Вставить("ВерсияДанныхОсновнойКонфигурации", ВерсияИБ(Метаданные.Имя)); + + // Проверка продолжения работы. + ОписаниеОшибки = ИнформационнаяБазаЗаблокированаДляОбновления(); + Если ЗначениеЗаполнено(ОписаниеОшибки) Тогда + Параметры.Вставить("ИнформационнаяБазаЗаблокированаДляОбновления", ОписаниеОшибки); + // Работа будет завершена. + Возврат Ложь; + КонецЕсли; + + Если ТребуетсяПроверитьЛегальностьПолученияОбновления() Тогда + Параметры.Вставить("ПроверитьЛегальностьПолученияОбновления"); + КонецЕсли; + + Возврат Истина; + +КонецФункции + +// Возвращает текст причины блокировки, если требуется обновление ИБ и у текущего пользователя +// для этого недостаточно прав, иначе возвращает пустую строку. +// +// Параметры: +// УчитыватьПривилегированныйРежим - Булево - если указать Ложь, то при проверке прав текущего пользователя +// наличие привилегированного режима не будет учитываться. +// +// Возвращаемое значение: +// Строка - если база не заблокирована, тогда пустая строка, иначе сообщение о причине блокировки. +// +Функция ИнформационнаяБазаЗаблокированаДляОбновления(УчитыватьПривилегированныйРежим = Истина) Экспорт + + Сообщение = ""; + + ТекущийПользовательИБ = ПользователиИнформационнойБазы.ТекущийПользователь(); + + // Для входа в заблокированную базу достаточно только одного права администрирования. + Если УчитыватьПривилегированныйРежим Тогда + ЕстьПравоАдминистрирование = ПравоДоступа("Администрирование", Метаданные); + Иначе + ЕстьПравоАдминистрирование = ПравоДоступа("Администрирование", Метаданные, ТекущийПользовательИБ); + КонецЕсли; + + СообщениеАдминистраторуСистемы = + НСтр("ru = 'Вход в программу временно невозможен в связи с обновлением на новую версию. + |Для завершения обновления версии программы требуются административные права + |(роли ""Администратор системы"" и ""Полные права"").'"); + + УстановитьПривилегированныйРежим(Истина); + РазделениеВключено = ОбщегоНазначенияПовтИсп.РазделениеВключено(); + ДоступноИспользованиеРазделенныхДанных = ОбщегоНазначенияПовтИсп.ДоступноИспользованиеРазделенныхДанных(); + УстановитьПривилегированныйРежим(Ложь); + + Если НеобходимоОбновлениеНеразделенныхДанныхИнформационнойБазы() Тогда + + СообщениеАдминистраторуОбластиДанных = + НСтр("ru = 'Вход в приложение временно невозможен в связи с обновлением на новую версию. + |Обратитесь к администратору сервиса за подробностями.'"); + + Если ДоступноИспользованиеРазделенныхДанных Тогда + Сообщение = СообщениеАдминистраторуОбластиДанных; + + ИначеЕсли НЕ ЕстьПраваНаОбновлениеИнформационнойБазы(УчитыватьПривилегированныйРежим, Ложь) Тогда + + Если ЕстьПравоАдминистрирование Тогда + Сообщение = СообщениеАдминистраторуСистемы; + Иначе + Сообщение = СообщениеАдминистраторуОбластиДанных; + КонецЕсли; + КонецЕсли; + + Возврат Сообщение; + КонецЕсли; + + // Сообщение администратору сервиса не выдается. + Если РазделениеВключено И Не ДоступноИспользованиеРазделенныхДанных Тогда + Возврат ""; + КонецЕсли; + + Если ЕстьПраваНаОбновлениеИнформационнойБазы(УчитыватьПривилегированныйРежим, Истина) Тогда + Возврат ""; + КонецЕсли; + + ТребуетсяПовторитьЗагрузкуСообщенияОбменаДаннымиПередЗапуском = Ложь; + Если ОбщегоНазначения.ЭтоПодчиненныйУзелРИБ() + И ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ОбменДанными") Тогда + МодульОбменДаннымиВызовСервера = ОбщегоНазначения.ОбщийМодуль("ОбменДаннымиВызовСервера"); + ТребуетсяПовторитьЗагрузкуСообщенияОбменаДаннымиПередЗапуском = + МодульОбменДаннымиВызовСервера.ПовторитьЗагрузкуСообщенияОбменаДаннымиПередЗапуском(); + КонецЕсли; + + // В этих случаях запуск не блокируется + Если Не ОбновлениеИнформационнойБазы.НеобходимоОбновлениеИнформационнойБазы() + И Не ТребуетсяПроверитьЛегальностьПолученияОбновления() + И Не ТребуетсяПовторитьЗагрузкуСообщенияОбменаДаннымиПередЗапуском Тогда + Возврат ""; + КонецЕсли; + + // Во всех остальных случаях запуск блокируется + Если ЕстьПравоАдминистрирование Тогда + Возврат СообщениеАдминистраторуСистемы; + КонецЕсли; + + Если РазделениеВключено Тогда + // Сообщение пользователю сервиса. + Сообщение = + НСтр("ru = 'Вход в приложение временно невозможен в связи с обновлением на новую версию. + |Обратитесь к администратору сервиса за подробностями.'"); + Иначе + // Сообщение пользователю локального режима. + Сообщение = + НСтр("ru = 'Вход в программу временно невозможен в связи с обновлением на новую версию. + |Обратитесь к администратору за подробностями.'"); + КонецЕсли; + + Возврат Сообщение; + +КонецФункции + +// Устанавливает состояние запуска обновления информационной. +// Требуется привилегированный режим. +// +// Параметры: +// Запуск - Булево - Если установить Истина, состояние будет установлено, +// если установить Ложь, состояние будет снято. +// +Процедура УстановитьЗапускОбновленияИнформационнойБазы(Запуск) Экспорт + + УстановитьПривилегированныйРежим(Истина); + ТекущиеПараметры = Новый Соответствие(ПараметрыСеанса.ПараметрыКлиентаНаСервере); + + Если Запуск = Истина Тогда + ТекущиеПараметры.Вставить("ЗапуститьОбновлениеИнформационнойБазы", Истина); + + ИначеЕсли ТекущиеПараметры.Получить("ЗапуститьОбновлениеИнформационнойБазы") <> Неопределено Тогда + ТекущиеПараметры.Удалить("ЗапуститьОбновлениеИнформационнойБазы"); + КонецЕсли; + + ПараметрыСеанса.ПараметрыКлиентаНаСервере = Новый ФиксированноеСоответствие(ТекущиеПараметры); + +КонецПроцедуры + +// Получает сведения об обновлении информационной базы +// из константы "СведенияОбОбновленииИБ". +Функция СведенияОбОбновленииИнформационнойБазы() Экспорт + + УстановитьПривилегированныйРежим(Истина); + + Если ОбщегоНазначенияПовтИсп.РазделениеВключено() + И Не ОбщегоНазначенияПовтИсп.ДоступноИспользованиеРазделенныхДанных() Тогда + + Возврат НовыеСведенияОбОбновлении(); + КонецЕсли; + + СведенияОбОбновленииИБ = Константы.СведенияОбОбновленииИБ.Получить().Получить(); + Если ТипЗнч(СведенияОбОбновленииИБ) <> Тип("Структура") Тогда + Возврат НовыеСведенияОбОбновлении(); + КонецЕсли; + Если СведенияОбОбновленииИБ.Количество() = 1 Тогда + Возврат НовыеСведенияОбОбновлении(); + КонецЕсли; + + СведенияОбОбновленииИБ = НовыеСведенияОбОбновлении(СведенияОбОбновленииИБ); + Возврат СведенияОбОбновленииИБ; + +КонецФункции + +// Записывает данные по обновлению в константу "СведенияОбОбновленииИБ". +// +Процедура ЗаписатьСведенияОбОбновленииИнформационнойБазы(Знач СведенияОбОбновлении) Экспорт + + Если СведенияОбОбновлении = Неопределено Тогда + НовоеЗначение = НовыеСведенияОбОбновлении(); + Иначе + НовоеЗначение = СведенияОбОбновлении; + КонецЕсли; + + МенеджерКонстанты = Константы.СведенияОбОбновленииИБ.СоздатьМенеджерЗначения(); + МенеджерКонстанты.Значение = Новый ХранилищеЗначения(НовоеЗначение); + ОбновлениеИнформационнойБазы.ЗаписатьДанные(МенеджерКонстанты); + +КонецПроцедуры + //////////////////////////////////////////////////////////////////////////////// // Обработчики условных вызовов в эту подсистемы. @@ -883,19 +1032,58 @@ КонецПроцедуры +// Возвращает соответствие имен параметров сеанса и обработчиков для их инициализации. +// +Процедура ПриДобавленииОбработчиковУстановкиПараметровСеанса(Обработчики) Экспорт + + Обработчики.Вставить("ВыполняетсяОбновлениеИБ", "ОбновлениеИнформационнойБазыСлужебный.УстановкаПараметровСеанса"); + +КонецПроцедуры + +// См. описание процедуры СтандартныеПодсистемыСервер.СобратьСтатистикуКонфигурации. +Процедура СобратьСтатистикуКонфигурации() Экспорт + + Если Не ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ЦентрМониторинга") Тогда + Возврат; + КонецЕсли; + + МодульЦентрМониторинга = ОбщегоНазначения.ОбщийМодуль("ЦентрМониторинга"); + + СведенияОбОбновлении = СведенияОбОбновленииИнформационнойБазы(); + Если СведенияОбОбновлении.ОтложенноеОбновлениеЗавершеноУспешно <> Истина Тогда + Возврат; // Получаем сведения только в том случае, когда отложенное обновление успешно завершилось. + КонецЕсли; + + Для Каждого СтрокаДереваБиблиотека Из СведенияОбОбновлении.ДеревоОбработчиков.Строки Цикл + Для Каждого СтрокаДереваВерсия Из СтрокаДереваБиблиотека.Строки Цикл + Для Каждого Обработчик Из СтрокаДереваВерсия.Строки Цикл + МодульЦентрМониторинга.ЗаписатьСтатистикуОбъектаКонфигурации("ВремяВыполненияОтложенногоОбработчика." + Обработчик.ИмяОбработчика, Обработчик.СтатистикаВыполнения["ДлительностьВыполнения"] / 1000); + КонецЦикла; + КонецЦикла; + КонецЦикла; + + ВремяНачала = СведенияОбОбновлении.ВремяНачалаОбновления; + ВремяОкончания = СведенияОбОбновлении.ВремяОкончанияОбновления; + + Если ЗначениеЗаполнено(ВремяНачала) И ЗначениеЗаполнено(ВремяОкончания) Тогда + МодульЦентрМониторинга.ЗаписатьСтатистикуОбъектаКонфигурации("ВремяВыполненияОбработчиков", + ВремяОкончания - ВремяНачала); + КонецЕсли; + + ВремяНачала = СведенияОбОбновлении.ВремяНачалаОтложенногоОбновления; + ВремяОкончания = СведенияОбОбновлении.ВремяОкончаниеОтложенногоОбновления; + + Если ЗначениеЗаполнено(ВремяНачала) И ЗначениеЗаполнено(ВремяОкончания) Тогда + МодульЦентрМониторинга.ЗаписатьСтатистикуОбъектаКонфигурации("ВремяВыполненияОтложенныхОбработчиков", + ВремяОкончания - ВремяНачала); + КонецЕсли; + +КонецПроцедуры + #КонецОбласти #Область СлужебныеПроцедурыИФункции -//////////////////////////////////////////////////////////////////////////////// -// Общего назначения - -// Для внутреннего использования. -// -Функция НеобходимоВыполнитьОбновление(Знач ВерсияМетаданных, Знач ВерсияДанных) Экспорт - Возврат НЕ ПустаяСтрока(ВерсияМетаданных) И ВерсияДанных <> ВерсияМетаданных; -КонецФункции - // Возвращает числовой вес версии для сравнения версий между собой. // // Параметры: @@ -910,7 +1098,7 @@ Возврат 0; КонецЕсли; - Возврат ВесВерсииИзМассиваСтрок(СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(Версия, ".")); + Возврат ВесВерсииИзМассиваСтрок(СтрРазделить(Версия, ".")); КонецФункции @@ -934,7 +1122,7 @@ // Для внутреннего использования. // -Функция ИтерацииОбновления() Экспорт +Функция ИтерацииОбновления() ИмяОсновнойКонфигурации = Метаданные.Имя; ИтерацияОбновлениеОсновнойПодсистемы = Неопределено; @@ -964,17 +1152,17 @@ ПроверитьСвойстваОбработчиков(ИтерацияОбновления); КонецЦикла; - // Для обратной совместимости. Если ИтерацияОбновлениеОсновнойПодсистемы = Неопределено Тогда - - ИтерацияОбновления = ИтерацияОбновления(ИмяОсновнойКонфигурации, Метаданные.Версия, - ОбновлениеИнформационнойБазыПереопределяемый.ОбработчикиОбновления(), Истина); - ИтерацияОбновления.ИмяОсновногоСерверногоМодуля = "ОбновлениеИнформационнойБазыПереопределяемый"; - ИтерацияОбновления.ОсновнойСерверныйМодуль = ОбновлениеИнформационнойБазыПереопределяемый; - ИтерацияОбновления.ПредыдущаяВерсия = ВерсияИБ(ИмяОсновнойКонфигурации); - ИтерацииОбновления.Добавить(ИтерацияОбновления); - - ПроверитьСвойстваОбработчиков(ИтерацияОбновления); + Если ИмяОсновнойКонфигурации = "БиблиотекаСтандартныхПодсистем" Тогда + ТекстСообщения = НСтр("ru = 'Файл поставки 1С:Библиотека стандартных подсистем не предназначен для создания + |информационных баз по шаблону. Перед использованием необходимо + |ознакомиться с документацией на ИТС (http://its.1c.ru/db/bspdoc)'"); + Иначе + ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Сведения об основной конфигурации ""%1"" не заданы. + |См. процедуру ПриДобавленииПодсистем общего модуля ПодсистемыКонфигурацииПереопределяемый.'"), + ИмяОсновнойКонфигурации); + КонецЕсли; + ВызватьИсключение ТекстСообщения; КонецЕсли; Возврат ИтерацииОбновления; @@ -1009,8 +1197,7 @@ Иначе ШаблонСообщения = НСтр("ru = 'Не найден план обновления библиотеки %1 с версии %2 на версию %3'"); КонецЕсли; - Сообщение = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонСообщения, ИдентификаторБиблиотеки, - ТекущаяВерсияИБ, ВерсияМетаданных); + Сообщение = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонСообщения, ИдентификаторБиблиотеки, ТекущаяВерсияИБ, ВерсияМетаданных); ЗаписатьИнформацию(Сообщение); ВыполняемыеОбработчики = ОбработчикиОбновленияВИнтервале(ОбработчикиОбновления, ТекущаяВерсияИБ, ВерсияМетаданных); @@ -1034,12 +1221,12 @@ Если ТекущаяВерсияИБ = "0.0.0.0" Тогда Сообщение = НСтр("ru = 'Выполняется начальное заполнение данных.'"); ИначеЕсли ИтерацияОбновления.ЭтоОсновнаяКонфигурация Тогда - Сообщение = НСтр("ru = 'Выполняется обновление информационной базы с версии %1 на версию %2.'"); + Сообщение = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Выполняется обновление информационной базы с версии %1 на версию %2.'"), + ТекущаяВерсияИБ, НоваяВерсияИБ); Иначе - Сообщение = НСтр("ru = 'Выполняется обновление данных библиотеки %3 с версии %1 на версию %2.'"); + Сообщение = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Выполняется обновление данных библиотеки %3 с версии %1 на версию %2.'"), + ТекущаяВерсияИБ, НоваяВерсияИБ, ИдентификаторБиблиотеки); КонецЕсли; - Сообщение = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(Сообщение, - ТекущаяВерсияИБ, НоваяВерсияИБ, ИдентификаторБиблиотеки); КонецЕсли; ЗаписатьИнформацию(Сообщение); @@ -1067,8 +1254,12 @@ КонецЕсли; КонецЕсли; - ДополнительныеПараметры = Новый Структура("ЗаписыватьВЖурнал, ИдентификаторБиблиотеки, ХодВыполненияОбработчиков, ВФоне", - ЗаписыватьВЖурнал, ИдентификаторБиблиотеки, Параметры.ХодВыполненияОбработчиков, Параметры.ВФоне); + ДополнительныеПараметры = Новый Структура; + ДополнительныеПараметры.Вставить("ЗаписыватьВЖурнал", ЗаписыватьВЖурнал); + ДополнительныеПараметры.Вставить("ИдентификаторБиблиотеки", ИдентификаторБиблиотеки); + ДополнительныеПараметры.Вставить("ХодВыполненияОбработчиков", Параметры.ХодВыполненияОбработчиков); + ДополнительныеПараметры.Вставить("ВФоне", Параметры.ВФоне); + ВыполнитьОбработчикОбновления(Обработчик, ПараметрыОбработчика, ДополнительныеПараметры); КонецЦикла; @@ -1076,13 +1267,12 @@ Сообщение = НСтр("ru = 'Выполнены обязательные процедуры обновления информационной базы.'"); Иначе Если ИтерацияОбновления.ЭтоОсновнаяКонфигурация Тогда - Сообщение = НСтр("ru = 'Выполнено обновление информационной базы с версии %1 на версию %2.'"); + Сообщение = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Выполнено обновление информационной базы с версии %1 на версию %2.'"), + ТекущаяВерсияИБ, НоваяВерсияИБ); Иначе - Сообщение = НСтр("ru = 'Выполнено обновление данных библиотеки %3 с версии %1 на версию %2.'"); + Сообщение = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Выполнено обновление данных библиотеки %3 с версии %1 на версию %2.'"), + ТекущаяВерсияИБ, НоваяВерсияИБ, ИдентификаторБиблиотеки); КонецЕсли; - - Сообщение = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(Сообщение, - ТекущаяВерсияИБ, НоваяВерсияИБ, ИдентификаторБиблиотеки); КонецЕсли; ЗаписатьИнформацию(Сообщение); @@ -1300,7 +1490,7 @@ И ИспользуетсяЗавершениеРаботыПользователей Тогда ПараметрЗапускаКлиента = ПараметрыСеанса.ПараметрыКлиентаНаСервере.Получить("ПараметрЗапуска"); - Если Найти(ПараметрЗапускаКлиента, "РегламентныеЗаданияОтключены") = 0 Тогда + Если СтрНайти(ПараметрЗапускаКлиента, "РегламентныеЗаданияОтключены") = 0 Тогда БлокировкаИБ.Ошибка = "ЗаблокироватьВыполнениеРегламентныхЗаданий"; Иначе БлокировкаИБ.Ошибка = "ОшибкаУстановкиМонопольногоРежима"; @@ -1358,13 +1548,14 @@ Результат.Вставить("Перезапустить", Ложь); Результат.Вставить("УстановленнаяБлокировкаИБ", Неопределено); Результат.Вставить("ВФоне", Ложь); + Результат.Вставить("ВыполнятьОтложенныеОбработчики", Ложь); Возврат Результат; КонецФункции // Для внутреннего использования. // -Функция НоваяТаблицаОбработчиковПереходаСДругойПрограммы() Экспорт +Функция НоваяТаблицаОбработчиковПереходаСДругойПрограммы() Обработчики = Новый ТаблицаЗначений; Обработчики.Колонки.Добавить("ПредыдущееИмяКонфигурации", Новый ОписаниеТипов("Строка", Новый КвалификаторыСтроки(0))); @@ -1633,6 +1824,8 @@ // Процедура СформироватьСписокОтложенныхОбработчиковОбновления(ИтерацииОбновления) + ПроверитьУникальностьИдентификаторовОтложенныхОбработчиков(ИтерацииОбновления); + ДеревоОбработчиков = ВыполненныеОбработчикиПрошлыхВерсий(ИтерацииОбновления); СведенияОбОбновлении = СведенияОбОбновленииИнформационнойБазы(); @@ -1647,6 +1840,9 @@ СведенияОбОбновлении.Вставить("ОтложенноеОбновлениеЗавершеноУспешно"); СведенияОбОбновлении.Вставить("ДеревоОбработчиков", Новый ДеревоЗначений()); СведенияОбОбновлении.Вставить("ВыводитьОписаниеОбновлений", Ложь); + СведенияОбОбновлении.Вставить("ПриостановленныеПроцедурыОбновления", Новый Массив); + СведенияОбОбновлении.Вставить("ЗапущенныеПроцедурыОбновления", Новый Массив); + СведенияОбОбновлении.Вставить("ФорсироватьОтложенноеОбновление", Ложь); ИмяБиблиотеки = ""; НомерВерсии = ""; @@ -1703,10 +1899,9 @@ Если СтрокаОбработчики.МонопольныйРежим = Истина Тогда - ТекстОшибки = НСтр("ru = 'У отложенного обработчика ""%1"" - |не должен быть установлен признак ""МонопольныйРежим"".'"); - ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - ТекстОшибки, СтрокаОбработчики.Процедура); + ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'У отложенного обработчика ""%1"" + |не должен быть установлен признак ""МонопольныйРежим"".'"), + СтрокаОбработчики.Процедура); ЗаписатьОшибку(ТекстОшибки); ВызватьИсключение ТекстОшибки; @@ -1714,6 +1909,7 @@ СтрокаДереваОбработчики = СтрокаДереваВерсии.Строки.Добавить(); СтрокаДереваОбработчики.ИмяБиблиотеки = ИмяБиблиотеки; + СтрокаДереваОбработчики.Идентификатор = СтрокаОбработчики.Идентификатор; СтрокаДереваОбработчики.НомерВерсии = СтрокаОбработчики.Версия; СтрокаДереваОбработчики.ВерсияРегистрации = СтрокаОбработчики.ВерсияРегистрации; СтрокаДереваОбработчики.ИмяОбработчика = СтрокаОбработчики.Процедура; @@ -1726,12 +1922,61 @@ КонецЦикла; - ВыполнитьПроверкуДереваВыполненныхОбработчиков(ДеревоОбработчиков); + СведенияОбОбновлении.ВерсияДереваОбработчиков = Метаданные.Версия; + ВыполнитьПроверкуДереваОтложенныхОбработчиков(ДеревоОбработчиков); СведенияОбОбновлении.ДеревоОбработчиков = ДеревоОбработчиков; ЗаписатьСведенияОбОбновленииИнформационнойБазы(СведенияОбОбновлении); КонецПроцедуры +Процедура ПроверитьУникальностьИдентификаторовОтложенныхОбработчиков(ИтерацииОбновления) + + Для Каждого ИтерацияОбновления Из ИтерацииОбновления Цикл + + ТаблицаПроверкиУникальности = Новый ТаблицаЗначений; + ТаблицаПроверкиУникальности.Колонки.Добавить("Идентификатор"); + ТаблицаПроверкиУникальности.Колонки.Добавить("Индекс"); + + ПараметрыОтбора = Новый Структура; + ПараметрыОтбора.Вставить("РежимВыполнения", "Отложенно"); + ТаблицаОбработчиков = ИтерацияОбновления.Обработчики; + + Обработчики = ТаблицаОбработчиков.НайтиСтроки(ПараметрыОтбора); + Для Каждого Обработчик Из Обработчики Цикл + Если Не ЗначениеЗаполнено(Обработчик.Идентификатор) Тогда + Продолжить; + КонецЕсли; + СтрокаТаблицы = ТаблицаПроверкиУникальности.Добавить(); + СтрокаТаблицы.Идентификатор = Строка(Обработчик.Идентификатор); + СтрокаТаблицы.Индекс = 1; + КонецЦикла; + + КонецЦикла; + + ИсходноеКоличествоСтрок = ТаблицаПроверкиУникальности.Количество(); + ТаблицаПроверкиУникальности.Свернуть("Идентификатор", "Индекс"); + ИтоговоеКоличествоСтрок = ТаблицаПроверкиУникальности.Количество(); + + // Быстрая проверка. + Если ИсходноеКоличествоСтрок = ИтоговоеКоличествоСтрок Тогда + Возврат; // Все идентификаторы уникальны. + КонецЕсли; + + ТаблицаПроверкиУникальности.Сортировать("Индекс Убыв"); + ТекстСообщения = НСтр("ru = 'Обнаружены неуникальные идентификаторы отложенных обработчиков: + |'"); + Для Каждого СтрокаИдентификатор Из ТаблицаПроверкиУникальности Цикл + Если СтрокаИдентификатор.Индекс = 1 Тогда + Прервать; + Иначе + ТекстСообщения = ТекстСообщения + Символы.ПС + СтрокаИдентификатор.Идентификатор; + КонецЕсли; + КонецЦикла; + + ВызватьИсключение ТекстСообщения; + +КонецПроцедуры + // Планирует выполнение отложенного обновления в клиент-серверной базе. // Процедура ЗапланироватьОтложенноеОбновление() @@ -1781,79 +2026,22 @@ МодульДатыЗапретаИзмененияСлужебный.ПропуститьПроверкуЗапретаИзменения(Истина); КонецЕсли; - Если Не ВыполнитьОтложенныйОбработчикОбновления(СведенияОбОбновлении) - Или ВыполненыВсеОтложенныеОбработчики(СведенияОбОбновлении) Тогда - ОтключитьОтложенноеОбновление(); - КонецЕсли; - -КонецПроцедуры - -// Выполняет все процедуры отложенного обновления в цикле за один вызов. -// -Процедура ВыполнитьОтложенноеОбновлениеСейчас() Экспорт - - СведенияОбОбновлении = СведенияОбОбновленииИнформационнойБазы(); - - Если СведенияОбОбновлении.ВремяОкончаниеОтложенногоОбновления <> Неопределено Тогда - Возврат; - КонецЕсли; - - Если СведенияОбОбновлении.ВремяНачалаОтложенногоОбновления = Неопределено Тогда - СведенияОбОбновлении.ВремяНачалаОтложенногоОбновления = ТекущаяДатаСеанса(); - КонецЕсли; - - Если ТипЗнч(СведенияОбОбновлении.НомерСеанса) <> Тип("СписокЗначений") Тогда - СведенияОбОбновлении.НомерСеанса = Новый СписокЗначений; - КонецЕсли; - СведенияОбОбновлении.НомерСеанса.Добавить(НомерСеансаИнформационнойБазы()); - ЗаписатьСведенияОбОбновленииИнформационнойБазы(СведенияОбОбновлении); ОбработчикиВыполнялись = Истина; - КоличествоЗапусков = 0; // Защита от бесконечного зацикливания из-за возможных ошибок в обработчиках обновления. - Пока ОбработчикиВыполнялись И КоличествоЗапусков < 10000 Цикл + Пока ОбработчикиВыполнялись Цикл ОбработчикиВыполнялись = ВыполнитьОтложенныйОбработчикОбновления(СведенияОбОбновлении); - КоличествоЗапусков = КоличествоЗапусков + 1; + + Если СведенияОбОбновлении.ФорсироватьОтложенноеОбновление Тогда + СведенияОбОбновлении = СведенияОбОбновленииИнформационнойБазы(); + Иначе + Прервать; + КонецЕсли; КонецЦикла; -КонецПроцедуры - -// Получает сведения об обновлении информационной базы. -Функция СведенияОбОбновленииИнформационнойБазы() Экспорт - - УстановитьПривилегированныйРежим(Истина); - - Если ОбщегоНазначенияПовтИсп.РазделениеВключено() - И Не ОбщегоНазначенияПовтИсп.ДоступноИспользованиеРазделенныхДанных() Тогда - - Возврат НовыеСведенияОбОбновлении(); + Если Не ОбработчикиВыполнялись Или ВыполненыВсеОтложенныеОбработчики(СведенияОбОбновлении) Тогда + ОтключитьОтложенноеОбновление(); КонецЕсли; - СведенияОбОбновленииИБ = Константы.СведенияОбОбновленииИБ.Получить().Получить(); - Если ТипЗнч(СведенияОбОбновленииИБ) <> Тип("Структура") Тогда - Возврат НовыеСведенияОбОбновлении(); - КонецЕсли; - Если СведенияОбОбновленииИБ.Количество() = 1 Тогда - Возврат НовыеСведенияОбОбновлении(); - КонецЕсли; - - СведенияОбОбновленииИБ = НовыеСведенияОбОбновлении(СведенияОбОбновленииИБ); - Возврат СведенияОбОбновленииИБ; - -КонецФункции - -// Записывает данные по обновлению в константу "СведенияОбОбновлении". -Процедура ЗаписатьСведенияОбОбновленииИнформационнойБазы(Знач СведенияОбОбновлении) Экспорт - - Если СведенияОбОбновлении = Неопределено Тогда - НовоеЗначение = НовыеСведенияОбОбновлении(); - Иначе - НовоеЗначение = СведенияОбОбновлении; - КонецЕсли; - - МенеджерКонстанты = Константы.СведенияОбОбновленииИБ.СоздатьМенеджерЗначения(); - МенеджерКонстанты.Значение = Новый ХранилищеЗначения(НовоеЗначение); - ОбновлениеИнформационнойБазы.ЗаписатьДанные(МенеджерКонстанты); - КонецПроцедуры // Только для внутреннего использования. @@ -1933,7 +2121,7 @@ // Добавляет параметры работы клиентской логики при запуске системы для подсистемы обмена данными в модели сервиса. // -Процедура ПриДобавленииПараметровРаботыКлиентскойЛогикиСтандартныхПодсистемПриЗапуске(Параметры) Экспорт +Процедура ПриДобавленииПараметровРаботыКлиентаПриЗапуске(Параметры) Экспорт Параметры.Вставить("НачальноеЗаполнениеДанных", РежимОбновленияДанных() = "НачальноеЗаполнение"); Параметры.Вставить("ПоказатьОписаниеИзмененийСистемы", ПоказатьОписаниеИзмененийСистемы()); @@ -2049,14 +2237,6 @@ КонецПроцедуры -// Возвращает соответствие имен параметров сеанса и обработчиков для их инициализации. -// -Процедура ПриДобавленииОбработчиковУстановкиПараметровСеанса(Обработчики) Экспорт - - Обработчики.Вставить("ВыполняетсяОбновлениеИБ", "ОбновлениеИнформационнойБазыСлужебный.УстановкаПараметровСеанса"); - -КонецПроцедуры - // Заполняет список текущих дел пользователя. // // Параметры: @@ -2075,37 +2255,33 @@ // Процедура ПриЗаполненииСпискаТекущихДел(ТекущиеДела) Экспорт - МодульТекущиеДелаСлужебный = ОбщегоНазначения.ОбщийМодуль("ТекущиеДелаСлужебный"); + МодульТекущиеДелаСервер = ОбщегоНазначения.ОбщийМодуль("ТекущиеДелаСервер"); Если Не Пользователи.ЭтоПолноправныйПользователь(, Истина) - Или МодульТекущиеДелаСлужебный.ДелоОтключено("ОтложенноеОбновление") Тогда + Или МодульТекущиеДелаСервер.ДелоОтключено("ОтложенноеОбновление") Тогда Возврат; КонецЕсли; Если ОбщегоНазначенияПовтИсп.РазделениеВключено() Тогда Возврат; КонецЕсли; - МодульТекущиеДелаСервер = ОбщегоНазначения.ОбщийМодуль("ТекущиеДелаСервер"); // Процедура вызывается только при наличии подсистемы "Текущие дела", поэтому здесь // не делается проверка существования подсистемы. - Разделы = МодульТекущиеДелаСервер.РазделыДляОбъекта(Метаданные.Обработки.ОбновлениеИнформационнойБазы.ПолноеИмя()); - - Если Разделы = Неопределено Тогда - Возврат; - КонецЕсли; + Разделы = МодульТекущиеДелаСервер.РазделыДляОбъекта(Метаданные.Обработки.РезультатыОбновленияПрограммы.ПолноеИмя()); СтатусОбработчиков = СтатусНевыполненныхОбработчиков(); ЕстьОбработчикиСОшибкой = (СтатусОбработчиков = "СтатусОшибка"); ЕстьНеВыполненныеОбработчики = (СтатусОбработчиков = "СтатусНеВыполнено"); + ЕстьПриостановленныеОбработчики = (СтатусОбработчиков = "СтатусПриостановлен"); Для Каждого Раздел Из Разделы Цикл Идентификатор = "ОтложенноеОбновление" + СтрЗаменить(Раздел.ПолноеИмя(), ".", ""); Дело = ТекущиеДела.Добавить(); Дело.Идентификатор = Идентификатор; - Дело.ЕстьДела = (ЕстьОбработчикиСОшибкой Или ЕстьНеВыполненныеОбработчики); + Дело.ЕстьДела = (ЕстьОбработчикиСОшибкой Или ЕстьНеВыполненныеОбработчики Или ЕстьПриостановленныеОбработчики); Дело.Важное = ЕстьОбработчикиСОшибкой; Дело.Представление = НСтр("ru = 'Обновление программы не завершено'"); - Дело.Форма = "Обработка.ОбновлениеИнформационнойБазы.Форма.ИндикацияХодаОтложенногоОбновленияИБ"; + Дело.Форма = "Обработка.РезультатыОбновленияПрограммы.Форма.ИндикацияХодаОтложенногоОбновленияИБ"; Дело.Владелец = Раздел; КонецЦикла; @@ -2404,8 +2580,11 @@ КонецЕсли; ПараметрыОбработчика.Вставить("МонопольныйРежим", Ложь); - ДополнительныеПараметры = Новый Структура("ЗаписыватьВЖурнал, ИдентификаторБиблиотеки, ХодВыполненияОбработчиков, ВФоне", - ЗаписыватьВЖурнал, ИтерацияОбновления.Подсистема, Неопределено, Ложь); + ДополнительныеПараметры = Новый Структура; + ДополнительныеПараметры.Вставить("ЗаписыватьВЖурнал", ЗаписыватьВЖурнал); + ДополнительныеПараметры.Вставить("ИдентификаторБиблиотеки", ИтерацияОбновления.Подсистема); + ДополнительныеПараметры.Вставить("ХодВыполненияОбработчиков", Неопределено); + ДополнительныеПараметры.Вставить("ВФоне", Ложь); ВыполнитьОбработчикОбновления(Обработчик, ПараметрыОбработчика, ДополнительныеПараметры); @@ -2484,8 +2663,6 @@ ОтключаемыеОбработчики.Колонки.Добавить("Версия"); ОбновлениеИнформационнойБазыПереопределяемый.ПриОтключенииОбработчиковОбновления(ОтключаемыеОбработчики); - // Вызов устаревшей процедуры для обратной совместимости. - ОбновлениеИнформационнойБазыПереопределяемый.ДобавитьОтключаемыеОбработчикиОбновления(ОтключаемыеОбработчики); // Поиск строки дерева, содержащей обработчики обновления с версией "*". ОбработчикиБиблиотеки = ВыполняемыеОбработчики.Строки.Найти("*", "Версия", Ложь); @@ -2507,14 +2684,12 @@ И ОтключаемыйОбработчик.Версия = ВерсияМетаданных Тогда ТекстИсключения = НСтр("ru='Обработчик обновления %1 не может быть отключен, |так как он выполняется только при переходе на версию %2'"); - ТекстИсключения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ТекстИсключения, - ВыполняемыйОбработчик.Процедура, ВыполняемыйОбработчик.Версия); + ТекстИсключения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ТекстИсключения, ВыполняемыйОбработчик.Процедура, ВыполняемыйОбработчик.Версия); ВызватьИсключение ТекстИсключения; ИначеЕсли ВыполняемыйОбработчик = Неопределено Тогда ТекстИсключения = НСтр("ru='Отключаемый обработчик обновления %1 не существует'"); - ТекстИсключения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ТекстИсключения, - ОтключаемыйОбработчик.Процедура); + ТекстИсключения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ТекстИсключения, ОтключаемыйОбработчик.Процедура); ВызватьИсключение ТекстИсключения; КонецЕсли; @@ -2526,10 +2701,8 @@ Процедура ВыполнитьОбработчикОбновления(Обработчик, Параметры, ДополнительныеПараметры) ЗаписатьИнформациюОХодеОбновления(Обработчик, ДополнительныеПараметры.ХодВыполненияОбработчиков, ДополнительныеПараметры.ВФоне); - Если ДополнительныеПараметры.ЗаписыватьВЖурнал Тогда - ОписаниеОбработчика = - ПодготовитьДетальнуюИнформациюОХодеОбновления(Обработчик, Параметры, ДополнительныеПараметры.ИдентификаторБиблиотеки); - КонецЕсли; + ОписаниеОбработчика = + ПодготовитьДетальнуюИнформациюОХодеОбновления(Обработчик, Параметры, ДополнительныеПараметры.ИдентификаторБиблиотеки); Если Параметры <> Неопределено Тогда ПараметрыОбработчика = Новый Массив; @@ -2567,6 +2740,11 @@ ЗаписатьДетальнуюИнформациюОХодеОбновления(ОписаниеОбработчика); КонецЕсли; + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ОценкаПроизводительности") Тогда + МодульОценкаПроизводительностиКлиентСервер = ОбщегоНазначения.ОбщийМодуль("ОценкаПроизводительностиКлиентСервер"); + МодульОценкаПроизводительностиКлиентСервер.ЗакончитьЗамерВремениТехнологический("ВремяВыполненияОбработчикаОбновления." + ОписаниеОбработчика.Процедура, ОписаниеОбработчика.ЗначениеНаНачало/1000); + КонецЕсли; + КонецПроцедуры Процедура ВыполнитьОбработчикиПослеОбновленияИнформационнойБазы(Знач ИтерацииОбновления, Знач ЗаписыватьВЖурнал, ВыводитьОписаниеОбновлений, Знач ОперативноеОбновление) @@ -2663,7 +2841,7 @@ , , ОбщегоНазначения.ЗначениеВСтрокуXML(ОписаниеОбработчика)); - + КонецПроцедуры Процедура ПроверитьВложеннуюТранзакцию(ТранзакцияАктивнаНаНачалоВыполнения, НазваниеОбработчика) @@ -2812,7 +2990,7 @@ Функция ИмяОбъектаМетаданныхПоИмениМенеджера(ИмяМенеджера) - Позиция = Найти(ИмяМенеджера, "."); + Позиция = СтрНайти(ИмяМенеджера, "."); Если Позиция = 0 Тогда Возврат "ОбщийМодуль." + ИмяМенеджера; КонецЕсли; @@ -2936,7 +3114,7 @@ Макет = ПолучитьОбщийМакет(МакетОписаниеОбновлений); Для каждого Область Из Макет.Области Цикл - Если Найти(Область.Имя, ПредикатВерсии) = 0 Тогда + Если СтрНайти(Область.Имя, ПредикатВерсии) = 0 Тогда Продолжить; КонецЕсли; @@ -2946,7 +3124,7 @@ Продолжить; КонецЕсли; - РазрядыВерсииСтроками = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(ВерсияВФорматеОписания, "_"); + РазрядыВерсииСтроками = СтрРазделить(ВерсияВФорматеОписания, "_"); Если РазрядыВерсииСтроками.Количество() <> 4 Тогда Продолжить; КонецЕсли; @@ -3042,30 +3220,29 @@ Функция ВыполненныеОбработчикиПрошлыхВерсий(ИтерацииОбновления) СведенияОбОбновлении = СведенияОбОбновленииИнформационнойБазы(); + ПараметрыПоиска = Новый Структура; + ПараметрыПоиска.Вставить("Статус"); + ПараметрыПоиска.Вставить("ИмяБиблиотеки"); + Если СведенияОбОбновлении.ОтложенноеОбновлениеЗавершеноУспешно <> Истина И СведенияОбОбновлении.ДеревоОбработчиков <> Неопределено И СведенияОбОбновлении.ДеревоОбработчиков.Строки.Количество() > 0 Тогда + ВыполнитьПроверкуДереваОтложенныхОбработчиков(СведенияОбОбновлении.ДеревоОбработчиков, Истина); + НеобходимоСохранитьНевыполненныеОбработчики = Ложь; Для Каждого Библиотека Из ИтерацииОбновления Цикл - // Сбрасываем количество попыток у обработчиков со статусом "Ошибка". - НайденныеОбработчики = СведенияОбОбновлении.ДеревоОбработчиков.Строки.НайтиСтроки(Новый Структура("Статус, ИмяБиблиотеки", "Ошибка", Библиотека.Подсистема), Истина); - Для Каждого ЭлементДерева Из НайденныеОбработчики Цикл - Если ЭлементДерева.НомерВерсии <> "*" - И ОбщегоНазначенияКлиентСервер.СравнитьВерсии(Библиотека.ПредыдущаяВерсия, ЭлементДерева.НомерВерсии) >= 0 Тогда - НеобходимоСохранитьНевыполненныеОбработчики = Истина; - КонецЕсли; - ЭлементДерева.ЧислоПопыток = 0; - КонецЦикла; + ПараметрыПоиска.ИмяБиблиотеки = Библиотека.Подсистема; + + // Сброс количество попыток у обработчиков со статусом "Ошибка". + ПараметрыПоиска.Статус = "Ошибка"; + ОбработчикиСОшибкой = СведенияОбОбновлении.ДеревоОбработчиков.Строки.НайтиСтроки(ПараметрыПоиска, Истина); + ПроверитьОтложенныеОбработчики(ОбработчикиСОшибкой, Библиотека, НеобходимоСохранитьНевыполненныеОбработчики); // Поиск невыполненных обработчиков, которые необходимо сохранить для повторного запуска. - НайденныеОбработчики = СведенияОбОбновлении.ДеревоОбработчиков.Строки.НайтиСтроки(Новый Структура("Статус, ИмяБиблиотеки", "НеВыполнено", Библиотека.Подсистема), Истина); - Для Каждого ЭлементДерева Из НайденныеОбработчики Цикл - Если ЭлементДерева.НомерВерсии <> "*" - И ОбщегоНазначенияКлиентСервер.СравнитьВерсии(Библиотека.ПредыдущаяВерсия, ЭлементДерева.НомерВерсии) >= 0 Тогда - НеобходимоСохранитьНевыполненныеОбработчики = Истина; - КонецЕсли; - КонецЦикла; + ПараметрыПоиска.Статус = "НеВыполнено"; + НевыполненныеОбработчики = СведенияОбОбновлении.ДеревоОбработчиков.Строки.НайтиСтроки(ПараметрыПоиска, Истина); + ПроверитьОтложенныеОбработчики(НевыполненныеОбработчики, Библиотека, НеобходимоСохранитьНевыполненныеОбработчики); Если НеобходимоСохранитьНевыполненныеОбработчики Тогда НеобходимоСохранитьНевыполненныеОбработчики = Ложь; @@ -3079,10 +3256,10 @@ КонецЦикла; // Удаление успешно выполненных обработчиков. - НайденныеОбработчики = СведенияОбОбновлении.ДеревоОбработчиков.Строки.НайтиСтроки(Новый Структура("Статус", "Выполнено"), Истина); - Для Каждого ЭлементДерева Из НайденныеОбработчики Цикл - СтрокаВерсии = ЭлементДерева.Родитель.Строки; - СтрокаВерсии.Удалить(ЭлементДерева); + ВыполненныеОбработчики = СведенияОбОбновлении.ДеревоОбработчиков.Строки.НайтиСтроки(Новый Структура("Статус", "Выполнено"), Истина); + Для Каждого СтарыйОбработчик Из ВыполненныеОбработчики Цикл + СтрокаВерсия = СтарыйОбработчик.Родитель.Строки; + СтрокаВерсия.Удалить(СтарыйОбработчик); КонецЦикла; Возврат СведенияОбОбновлении.ДеревоОбработчиков; @@ -3093,9 +3270,60 @@ КонецФункции +Процедура ПроверитьОтложенныеОбработчики(ПроверяемыеОбработчики, Библиотека, НеобходимоСохранитьНевыполненныеОбработчики) + Для Каждого ПроверяемыйОбработчик Из ПроверяемыеОбработчики Цикл + ОбработчикПереименован = Ложь; + Если Не ЗначениеЗаполнено(ПроверяемыйОбработчик.Идентификатор) Тогда + НайденныйОбработчик = Библиотека.Обработчики.Найти(ПроверяемыйОбработчик.ИмяОбработчика, "Процедура"); + Если НайденныйОбработчик <> Неопределено Тогда + ПроверяемыйОбработчик.Идентификатор = НайденныйОбработчик.Идентификатор; + КонецЕсли; + Иначе + ПроверитьПереименованиеОбработчика(ПроверяемыйОбработчик, Библиотека); + КонецЕсли; + + СохранитьНевыполненныеОбработчики = НеобходимоСохранитьНевыполненныйОтложенныйОбработчик(Библиотека, ПроверяемыйОбработчик); + Если СохранитьНевыполненныеОбработчики Тогда + НеобходимоСохранитьНевыполненныеОбработчики = Истина; + КонецЕсли; + КонецЦикла; +КонецПроцедуры + +Функция НеобходимоСохранитьНевыполненныйОтложенныйОбработчик(Библиотека, Обработчик) + Если Обработчик.НомерВерсии <> "*" + И ОбщегоНазначенияКлиентСервер.СравнитьВерсии(Библиотека.ПредыдущаяВерсия, Обработчик.НомерВерсии) >= 0 Тогда + Обработчик.Статус = "НеВыполнено"; + Обработчик.СтатистикаВыполнения.Очистить(); + Обработчик.ИнформацияОбОшибке = ""; + Обработчик.ЧислоПопыток = 0; + Возврат Истина; + КонецЕсли; + + Возврат Ложь; +КонецФункции + +Процедура ПроверитьПереименованиеОбработчика(СтарыйОбработчик, Библиотека) + НовыйОбработчик = Библиотека.Обработчики.Найти(СтарыйОбработчик.Идентификатор, "Идентификатор"); + Если НовыйОбработчик <> Неопределено + И НовыйОбработчик.Процедура <> СтарыйОбработчик.ИмяОбработчика Тогда + СтарыйОбработчик.ИмяОбработчика = НовыйОбработчик.Процедура; + КонецЕсли; +КонецПроцедуры + // Только для внутреннего использования. // -Процедура ВыполнитьПроверкуДереваВыполненныхОбработчиков(ДеревоОбработчиков) +Процедура ВыполнитьПроверкуДереваОтложенныхОбработчиков(ДеревоОбработчиков, ПроверятьСоставКолонок = Ложь) + + Если ПроверятьСоставКолонок Тогда + НовоеДеревоОбработчиков = НовыеСведенияОбОбработчикахОбновления(); + Для Каждого Колонка Из НовоеДеревоОбработчиков.Колонки Цикл + Если ДеревоОбработчиков.Колонки.Найти(Колонка.Имя) = Неопределено Тогда + ДеревоОбработчиков.Колонки.Добавить(Колонка.Имя, Колонка.ТипЗначения); + КонецЕсли; + КонецЦикла; + + Возврат; + КонецЕсли; Для Каждого СтрокаДереваБиблиотека Из ДеревоОбработчиков.Строки Цикл @@ -3162,6 +3390,29 @@ // Функция ВыполнитьОтложенныйОбработчикОбновления(СведенияОбОбновлении, ВыполнитьНеудачные = Ложь) + Для Каждого ПриостановленныйОбработчик Из СведенияОбОбновлении.ПриостановленныеПроцедурыОбновления Цикл + НайденныйОбработчик = СведенияОбОбновлении.ДеревоОбработчиков.Строки.Найти(ПриостановленныйОбработчик, "ИмяОбработчика", Истина); + Если НайденныйОбработчик <> Неопределено + И НайденныйОбработчик.Статус <> "Выполнено" Тогда + НайденныйОбработчик.Статус = "Приостановлен"; + КонецЕсли; + КонецЦикла; + + Для Каждого ЗапущенныйОбработчик Из СведенияОбОбновлении.ЗапущенныеПроцедурыОбновления Цикл + НайденныйОбработчик = СведенияОбОбновлении.ДеревоОбработчиков.Строки.Найти(ЗапущенныйОбработчик, "ИмяОбработчика", Истина); + Если НайденныйОбработчик <> Неопределено Тогда + НайденныйОбработчик.Статус = "НеВыполнено"; + КонецЕсли; + КонецЦикла; + + Если СведенияОбОбновлении.ПриостановленныеПроцедурыОбновления.Количество() > 0 + Или СведенияОбОбновлении.ЗапущенныеПроцедурыОбновления.Количество() > 0 Тогда + СведенияОбОбновлении.ПриостановленныеПроцедурыОбновления.Очистить(); + СведенияОбОбновлении.ЗапущенныеПроцедурыОбновления.Очистить(); + ЗаписатьСведенияОбОбновленииИнформационнойБазы(СведенияОбОбновлении); + КонецЕсли; + + // Инициализация параметров ОбработчикиВыполнялись = Ложь; ЕстьНеудачные = Ложь; ЕстьПропущенныеОбработчики = Ложь; @@ -3181,6 +3432,11 @@ Для Каждого ОбработчикОбновления Из ДеревоОбработчиковВерсия.Строки Цикл + Если ОбработчикОбновления.Статус = "Приостановлен" Тогда + ЕстьПропущенныеОбработчики = Истина; + Продолжить; + КонецЕсли; + Если ОбработчикОбновления.Статус = "Выполнено" Тогда Продолжить; КонецЕсли; @@ -3199,23 +3455,27 @@ ОбработчикиВыполнялись = Истина; ИмяОбработчика = ОбработчикОбновления.ИмяОбработчика; Попытка - СообщениеОЗапущенномОбработчике = НСтр("ru = 'Выполняется процедура обновления ""%1"".'"); - СообщениеОЗапущенномОбработчике = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - СообщениеОЗапущенномОбработчике, ИмяОбработчика); + СообщениеОЗапущенномОбработчике = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Выполняется процедура обновления ""%1"".'"), ИмяОбработчика); ЗаписьЖурналаРегистрации(СобытиеЖурналаРегистрации(), УровеньЖурналаРегистрации.Информация,,, СообщениеОЗапущенномОбработчике); - Параметры = Неопределено; - Если СведенияОбОбновлении.Свойство("ПараметрыОбработчикаОбновления", Параметры) Тогда - Если ТипЗнч(Параметры) = Тип("Структура") Тогда - Параметры.Вставить("ОбработкаЗавершена", Истина); - Иначе - Параметры = Новый Структура("ОбработкаЗавершена", Истина); - КонецЕсли; - Иначе - Параметры = Новый Структура("ОбработкаЗавершена", Истина); + // Прогресс выполнения процедуры обработки данных. + ПрогрессВыполнения = Новый Структура; + ПрогрессВыполнения.Вставить("ВсегоОбъектов", 0); + ПрогрессВыполнения.Вставить("ОбработаноОбъектов", 0); + Если ОбработчикОбновления.СтатистикаВыполнения["ПрогрессВыполнения"] <> Неопределено + И ТипЗнч(ОбработчикОбновления.СтатистикаВыполнения["ПрогрессВыполнения"]) = Тип("Структура") Тогда + ЗаполнитьЗначенияСвойств(ПрогрессВыполнения, ОбработчикОбновления.СтатистикаВыполнения["ПрогрессВыполнения"]); КонецЕсли; + // Инициализация параметров обработчика. + Параметры = ОбработчикОбновления.СтатистикаВыполнения["ПараметрыОбработчика"]; + Если Параметры = Неопределено Тогда + Параметры = Новый Структура; + КонецЕсли; + Параметры.Вставить("ОбработкаЗавершена", Истина); + Параметры.Вставить("ПрогрессВыполнения", ПрогрессВыполнения); + ПараметрыОбработчика = Новый Массив; ПараметрыОбработчика.Добавить(Параметры); @@ -3223,23 +3483,43 @@ ОписаниеОбработчика = ПодготовитьДетальнуюИнформациюОХодеОбновления(ОбработчикОбновления, Параметры, ОбработчикОбновления.ИмяБиблиотеки, Истина); КонецЕсли; - ОбработчикОбновления.Статус = "Выполняется"; - РаботаВБезопасномРежиме.ВыполнитьМетодКонфигурации(ИмяОбработчика, ПараметрыОбработчика); - - // Обработчик обновления передал параметры, которые нужно сохранить. - Если Параметры.Количество() > 1 И Не Параметры.ОбработкаЗавершена Тогда - СведенияОбОбновлении.Вставить("ПараметрыОбработчикаОбновления", Параметры); + КоличествоЗапусковПроцедурыОбновления = ОбработчикОбновления.СтатистикаВыполнения["КоличествоЗапусков"]; + Если КоличествоЗапусковПроцедурыОбновления = Неопределено Тогда + КоличествоЗапусковПроцедурыОбновления = 0; + ИначеЕсли КоличествоЗапусковПроцедурыОбновления > 10000 Тогда // Защита от зацикливания. + ОбработчикОбновления.ЧислоПопыток = 3; + ТекстОшибки = НСтр("ru = 'Превышено допустимое количество запусков процедуры обновления. + |Выполнение прервано для предотвращения зацикливания механизма обработки данных.'"); + ВызватьИсключение ТекстОшибки; КонецЕсли; + // Запуск отложенного обработчика обновления. + ОбработчикОбновления.Статус = "Выполняется"; + Если ОбработчикОбновления.СтатистикаВыполнения["НачалоОбработкиДанных"] = Неопределено Тогда + ОбработчикОбновления.СтатистикаВыполнения.Вставить("НачалоОбработкиДанных", ТекущаяДатаСеанса()); + КонецЕсли; + НачалоОбработкиДанных = ТекущаяУниверсальнаяДатаВМиллисекундах(); + РаботаВБезопасномРежиме.ВыполнитьМетодКонфигурации(ИмяОбработчика, ПараметрыОбработчика); + ЗавершениеОбработкиДанных = ТекущаяУниверсальнаяДатаВМиллисекундах(); + + // Если обработчик обновления передал параметры, их нужно сохранить. + ПереданныеПараметры = ПереданныеПараметрыОбработчикаОбновления(Параметры); + Если Параметры.ОбработкаЗавершена Тогда ОбработчикОбновления.Статус = "Выполнено"; - СведенияОбОбновлении.Удалить("ПараметрыОбработчикаОбновления"); - ЗаписатьСведенияОбОбновленииИнформационнойБазы(СведенияОбОбновлении); + ОбработчикОбновления.СтатистикаВыполнения.Вставить("ЗавершениеОбработкиДанных", ТекущаяДатаСеанса()); КонецЕсли; - Если ОбработчикОбновления.Статус = "Выполняется" Тогда - ЗаписатьСведенияОбОбновленииИнформационнойБазы(СведенияОбОбновлении); + // Сохранение данных по процедуре обработки данных. + ОбработчикОбновления.СтатистикаВыполнения.Вставить("ПрогрессВыполнения", Параметры.ПрогрессВыполнения); + + КоличествоЗапусковПроцедурыОбновления = КоличествоЗапусковПроцедурыОбновления + 1; + ДлительностьВыполнения = ЗавершениеОбработкиДанных - НачалоОбработкиДанных; + Если ОбработчикОбновления.СтатистикаВыполнения["ДлительностьВыполнения"] <> Неопределено Тогда + ДлительностьВыполнения = ДлительностьВыполнения + ОбработчикОбновления.СтатистикаВыполнения["ДлительностьВыполнения"]; КонецЕсли; + ОбработчикОбновления.СтатистикаВыполнения.Вставить("ДлительностьВыполнения", ДлительностьВыполнения); + ОбработчикОбновления.СтатистикаВыполнения.Вставить("КоличествоЗапусков", КоличествоЗапусковПроцедурыОбновления); Исключение @@ -3252,14 +3532,37 @@ КонецЦикла; ОбработчикОбновления.Статус = "Ошибка"; - СведенияОбОбновлении.Удалить("ПараметрыОбработчикаОбновления"); ОбработчикОбновления.ЧислоПопыток = ОбработчикОбновления.ЧислоПопыток + 1; ИнформацияОбОшибке = ИнформацияОбОшибке(); ОбработчикОбновления.ИнформацияОбОшибке = КраткоеПредставлениеОшибки(ИнформацияОбОшибке()); - ЗаписатьСведенияОбОбновленииИнформационнойБазы(СведенияОбОбновлении); ЗаписатьОшибку(ПодробноеПредставлениеОшибки(ИнформацияОбОшибке)); КонецПопытки; + ОбработчикОбновления.СтатистикаВыполнения.Вставить("ПараметрыОбработчика", ПереданныеПараметры); + + Если ОбщегоНазначения.ИнформационнаяБазаФайловая() Тогда + ЗаписатьСведенияОбОбновленииИнформационнойБазы(СведенияОбОбновлении); + Иначе + НачатьТранзакцию(); + Попытка + Блокировка = Новый БлокировкаДанных; + ЭлементБлокировки = Блокировка.Добавить("Константа.СведенияОбОбновленииИБ"); + Блокировка.Заблокировать(); + + НовыеСведенияОбОбновлении = СведенияОбОбновленииИнформационнойБазы(); + СведенияОбОбновлении.ПриостановленныеПроцедурыОбновления = НовыеСведенияОбОбновлении.ПриостановленныеПроцедурыОбновления; + СведенияОбОбновлении.ЗапущенныеПроцедурыОбновления = НовыеСведенияОбОбновлении.ЗапущенныеПроцедурыОбновления; + СведенияОбОбновлении.ФорсироватьОтложенноеОбновление = НовыеСведенияОбОбновлении.ФорсироватьОтложенноеОбновление; + + ЗаписатьСведенияОбОбновленииИнформационнойБазы(СведенияОбОбновлении); + + ЗафиксироватьТранзакцию(); + Исключение + ОтменитьТранзакцию(); + ВызватьИсключение; + КонецПопытки; + КонецЕсли; + ПроверитьВложеннуюТранзакцию(ТранзакцияАктивнаНаНачалоВыполнения, ИмяОбработчика); Если ЗаписыватьВЖурнал Тогда @@ -3292,9 +3595,9 @@ Иначе Если ЕстьПропущенныеОбработчики Тогда - ДеревоОбработчиковВерсия.Статус = "ЕстьПропущенныеОбработчики"; + ДеревоОбработчиковБиблиотека.Статус = "ЕстьПропущенныеОбработчики"; Иначе - ДеревоОбработчиковВерсия.Статус = "Завершено"; + ДеревоОбработчиковБиблиотека.Статус = "Завершено"; КонецЕсли; КонецЕсли; @@ -3312,6 +3615,18 @@ КонецФункции +Функция ПереданныеПараметрыОбработчикаОбновления(Параметры) + ПереданныеПараметры = Новый Структура; + Для Каждого Параметр Из Параметры Цикл + Если Параметр.Ключ <> "ОбработкаЗавершена" + И Параметр.Ключ <> "ПрогрессВыполнения" Тогда + ПереданныеПараметры.Вставить(Параметр.Ключ, Параметр.Значение); + КонецЕсли; + КонецЦикла; + + Возврат ПереданныеПараметры; +КонецФункции + // Только для внутреннего использования. // Функция НовыеСведенияОбОбновлении(СтарыеСведения = Неопределено) @@ -3326,9 +3641,14 @@ СведенияОбОбновлении.Вставить("ПараметрыОбработчикаОбновления"); СведенияОбОбновлении.Вставить("ОтложенноеОбновлениеЗавершеноУспешно"); СведенияОбОбновлении.Вставить("ДеревоОбработчиков", Новый ДеревоЗначений()); + СведенияОбОбновлении.Вставить("ВерсияДереваОбработчиков", ""); СведенияОбОбновлении.Вставить("ВыводитьОписаниеОбновлений", Ложь); СведенияОбОбновлении.Вставить("ЛегальнаяВерсия", ""); СведенияОбОбновлении.Вставить("НовыеПодсистемы", Новый Массив); + СведенияОбОбновлении.Вставить("ФорсироватьОтложенноеОбновление", Ложь); + СведенияОбОбновлении.Вставить("ПриостановленныеПроцедурыОбновления", Новый Массив); + СведенияОбОбновлении.Вставить("ЗапущенныеПроцедурыОбновления", Новый Массив); + Если ТипЗнч(СтарыеСведения) = Тип("Структура") Тогда ЗаполнитьЗначенияСвойств(СведенияОбОбновлении, СтарыеСведения); @@ -3346,9 +3666,11 @@ ДеревоОбработчиков.Колонки.Добавить("ИмяБиблиотеки"); ДеревоОбработчиков.Колонки.Добавить("НомерВерсии"); ДеревоОбработчиков.Колонки.Добавить("ВерсияРегистрации"); + ДеревоОбработчиков.Колонки.Добавить("Идентификатор"); ДеревоОбработчиков.Колонки.Добавить("ИмяОбработчика"); ДеревоОбработчиков.Колонки.Добавить("Статус"); ДеревоОбработчиков.Колонки.Добавить("ЧислоПопыток"); + ДеревоОбработчиков.Колонки.Добавить("СтатистикаВыполнения", Новый ОписаниеТипов("Соответствие")); ДеревоОбработчиков.Колонки.Добавить("ИнформацияОбОшибке"); ДеревоОбработчиков.Колонки.Добавить("Комментарий"); @@ -3356,24 +3678,25 @@ КонецФункции -// Проверяет статус отложенных обработчиков обновления. -// -Функция СтатусНевыполненныхОбработчиков() +Функция РежимВыполненияОтложенногоОбновления(ПараметрыОбновления) - СведенияОбОбновлении = СведенияОбОбновленииИнформационнойБазы(); - Для Каждого СтрокаДереваБиблиотека Из СведенияОбОбновлении.ДеревоОбработчиков.Строки Цикл - Для Каждого СтрокаДереваВерсия Из СтрокаДереваБиблиотека.Строки Цикл - Для Каждого Обработчик Из СтрокаДереваВерсия.Строки Цикл - Если Обработчик.Статус = "Ошибка" Тогда - Возврат "СтатусОшибка"; - ИначеЕсли Обработчик.Статус <> "Выполнено" Тогда - Возврат "СтатусНеВыполнено"; - КонецЕсли; - КонецЦикла; - КонецЦикла; - КонецЦикла; + ИнформационнаяБазаФайловая = ОбщегоНазначения.ИнформационнаяБазаФайловая(); + РазделениеВключено = ОбщегоНазначенияПовтИсп.РазделениеВключено(); + ДоступноИспользованиеРазделенныхДанных = ОбщегоНазначенияПовтИсп.ДоступноИспользованиеРазделенныхДанных(); + ВыполнятьОтложенныеОбработчики = ПараметрыОбновления.ВыполнятьОтложенныеОбработчики; + ПараметрЗапускаКлиента = ПараметрыСеанса.ПараметрыКлиентаНаСервере.Получить("ПараметрЗапуска"); - Возврат ""; + Если Не РазделениеВключено Или ДоступноИспользованиеРазделенныхДанных Тогда + Если ИнформационнаяБазаФайловая + Или СтрНайти(НРег(ПараметрЗапускаКлиента), НРег("ВыполнитьОтложенноеОбновлениеСейчас")) > 0 + Или ВыполнятьОтложенныеОбработчики Тогда + Возврат "Монопольно"; + Иначе + Возврат "Отложенно"; + КонецЕсли; + Иначе + Возврат Неопределено; + КонецЕсли; КонецФункции diff --git a/SSL/src/CommonModules/ОбновлениеИнформационнойБазыСлужебныйВМоделиСервиса/Module.bsl b/SSL/src/CommonModules/ОбновлениеИнформационнойБазыСлужебныйВМоделиСервиса/Module.bsl index 2a5db7494..5f8aa85b5 100644 --- a/SSL/src/CommonModules/ОбновлениеИнформационнойБазыСлужебныйВМоделиСервиса/Module.bsl +++ b/SSL/src/CommonModules/ОбновлениеИнформационнойБазыСлужебныйВМоделиСервиса/Module.bsl @@ -175,7 +175,7 @@ ШаблонКомментария = НСтр("ru = 'Обнаружен некорректный план обновления библиотеки %1 |Требуется план обновления на версию %2, найден план для обновления на версию %3'"); - ТекстКомментария = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонКомментария, Выборка.Имя); + ТекстКомментария = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонКомментария, Выборка.Имя, Строка(ОписаниеПланаОбновленияБиблиотеки.ВерсияНа), Строка(Выборка.Версия)); ЗаписьЖурналаРегистрации( ОбновлениеИнформационнойБазы.СобытиеЖурналаРегистрации(), УровеньЖурналаРегистрации.Ошибка, @@ -242,6 +242,122 @@ КонецПроцедуры +// Блокирует запись в регистре сведений ВерсииПодсистемОбластейДанных, которая соответствует текущей области данных, +// и возвращает ключ этой записи. +// +// Возвращаемое значение: +// РегистрСведенийКлючЗаписи. +// +Функция ЗаблокироватьВерсииОбластиДанных() Экспорт + + КлючЗаписи = Неопределено; + Если ОбщегоНазначенияПовтИсп.РазделениеВключено() Тогда + + Если ОбщегоНазначенияПовтИсп.ДоступноИспользованиеРазделенныхДанных() Тогда + УстановитьПривилегированныйРежим(Истина); + КонецЕсли; + + КлючЗаписи = КлючЗаписиВерсийПодсистем(); + + КонецЕсли; + + Если КлючЗаписи <> Неопределено Тогда + Попытка + ЗаблокироватьДанныеДляРедактирования(КлючЗаписи); + Исключение + ЗаписьЖурналаРегистрации(ОбновлениеИнформационнойБазы.СобытиеЖурналаРегистрации() + ". " + + НСтр("ru = 'Обновление области данных'", Метаданные.ОсновнойЯзык.КодЯзыка), + УровеньЖурналаРегистрации.Ошибка,,, + ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); + ВызватьИсключение(НСтр("ru = 'Ошибка обновления области данных. Запись версий области данных заблокирована.'")); + КонецПопытки; + КонецЕсли; + Возврат КлючЗаписи; + +КонецФункции + +// Разблокирует запись в регистре сведений ВерсииПодсистемОбластейДанных. +// +// Параметры: +// КлючЗаписи - РегистрСведенийКлючЗаписи +// +Процедура РазблокироватьВерсииОбластиДанных(КлючЗаписи) Экспорт + + Если КлючЗаписи <> Неопределено Тогда + РазблокироватьДанныеДляРедактирования(КлючЗаписи); + КонецЕсли; + +КонецПроцедуры + +// Только для внутреннего использования. +Процедура ПриОпределенииВерсииИБ(Знач ИдентификаторБиблиотеки, Знач ПолучитьВерсиюОбщихДанных, СтандартнаяОбработка, ВерсияИБ) Экспорт + + Если ОбщегоНазначения.ИспользованиеРазделителяСеанса() И Не ПолучитьВерсиюОбщихДанных Тогда + + СтандартнаяОбработка = Ложь; + + ТекстЗапроса = + "ВЫБРАТЬ + | ВерсииПодсистемОбластейДанных.Версия + |ИЗ + | РегистрСведений.ВерсииПодсистемОбластейДанных КАК ВерсииПодсистемОбластейДанных + |ГДЕ + | ВерсииПодсистемОбластейДанных.ИмяПодсистемы = &ИмяПодсистемы + | И ВерсииПодсистемОбластейДанных.ОбластьДанныхВспомогательныеДанные = &ОбластьДанныхВспомогательныеДанные"; + Запрос = Новый Запрос(ТекстЗапроса); + Запрос.УстановитьПараметр("ИмяПодсистемы", ИдентификаторБиблиотеки); + Запрос.УстановитьПараметр("ОбластьДанныхВспомогательныеДанные", ОбщегоНазначения.ЗначениеРазделителяСеанса()); + ТаблицаЗначений = Запрос.Выполнить().Выгрузить(); + ВерсияИБ = ""; + Если ТаблицаЗначений.Количество() > 0 Тогда + ВерсияИБ = СокрЛП(ТаблицаЗначений[0].Версия); + КонецЕсли; + + КонецЕсли; + +КонецПроцедуры + +// Только для внутреннего использования. +Процедура ПриОпределенииПервогоВходаВОбластьДанных(СтандартнаяОбработка, Результат) Экспорт + + Если ОбщегоНазначения.ИспользованиеРазделителяСеанса() Тогда + + СтандартнаяОбработка = Ложь; + + ТекстЗапроса = + "ВЫБРАТЬ ПЕРВЫЕ 1 + | 1 + |ИЗ + | РегистрСведений.ВерсииПодсистемОбластейДанных КАК ВерсииПодсистемОбластейДанных + |ГДЕ + | ВерсииПодсистемОбластейДанных.ОбластьДанныхВспомогательныеДанные = &ОбластьДанныхВспомогательныеДанные"; + Запрос = Новый Запрос(ТекстЗапроса); + Запрос.УстановитьПараметр("ОбластьДанныхВспомогательныеДанные", ОбщегоНазначения.ЗначениеРазделителяСеанса()); + Результат = Запрос.Выполнить().Пустой(); + + КонецЕсли; + +КонецПроцедуры + +// Только для внутреннего использования. +Процедура ПриУстановкеВерсииИБ(Знач ИдентификаторБиблиотеки, Знач НомерВерсии, СтандартнаяОбработка) Экспорт + + Если ОбщегоНазначения.ИспользованиеРазделителяСеанса() Тогда + + СтандартнаяОбработка = Ложь; + + ОбластьДанных = ОбщегоНазначения.ЗначениеРазделителяСеанса(); + + МенеджерЗаписи = РегистрыСведений.ВерсииПодсистемОбластейДанных.СоздатьМенеджерЗаписи(); + МенеджерЗаписи.ОбластьДанныхВспомогательныеДанные = ОбластьДанных; + МенеджерЗаписи.ИмяПодсистемы = ИдентификаторБиблиотеки; + МенеджерЗаписи.Версия = НомерВерсии; + МенеджерЗаписи.Записать(); + + КонецЕсли; + +КонецПроцедуры + #КонецОбласти #Область СлужебныеПроцедурыИФункции @@ -406,6 +522,13 @@ Обработчик.Процедура = "ОбновлениеИнформационнойБазыСлужебныйВМоделиСервиса.ПеренестиВерсииПодсистемВоВспомогательныеДанные"; Обработчик.ОбщиеДанные = Истина; + Обработчик = Обработчики.Добавить(); + Обработчик.Версия = "2.3.1.48"; + Обработчик.МонопольныйРежим = Ложь; + Обработчик.ОбщиеДанные = Истина; + Обработчик.НачальноеЗаполнение = Истина; + Обработчик.Процедура = "ОбновлениеИнформационнойБазыСлужебныйВМоделиСервиса.ПеренестиПаролиВБезопасноеХранилище"; + КонецПроцедуры // Заполняет массив типов, исключаемых из выгрузки и загрузки данных. @@ -505,6 +628,23 @@ КонецПроцедуры +// Перенести пароли в безопасное хранилище +// +Процедура ПеренестиПаролиВБезопасноеХранилище() Экспорт + + // Для служебного пользователя Менеджера сервиса + ИмяСлужебногоПользователяМенеджераСервиса = Константы.УдалитьИмяСлужебногоПользователяМенеджераСервиса.Получить(); + ПарольСлужебногоПользователяМенеджераСервиса = Константы.УдалитьПарольСлужебногоПользователяМенеджераСервиса.Получить(); + Владелец = ОбщегоНазначения.ИдентификаторОбъектаМетаданных("Константа.ВнутреннийАдресМенеджераСервиса"); + УстановитьПривилегированныйРежим(Истина); + ОбщегоНазначения.ЗаписатьДанныеВБезопасноеХранилище(Владелец, ИмяСлужебногоПользователяМенеджераСервиса, "ИмяСлужебногоПользователяМенеджераСервиса"); + ОбщегоНазначения.ЗаписатьДанныеВБезопасноеХранилище(Владелец, ПарольСлужебногоПользователяМенеджераСервиса, "ПарольСлужебногоПользователяМенеджераСервиса"); + УстановитьПривилегированныйРежим(Ложь); + Константы.УдалитьИмяСлужебногоПользователяМенеджераСервиса.Установить(""); + Константы.УдалитьПарольСлужебногоПользователяМенеджераСервиса.Установить(""); + +КонецПроцедуры + //////////////////////////////////////////////////////////////////////////////// // Обновление областей данных. @@ -738,122 +878,6 @@ КонецФункции -// Блокирует запись в регистре сведений ВерсииПодсистемОбластейДанных, которая соответствует текущей области данных, -// и возвращает ключ этой записи. -// -// Возвращаемое значение: -// РегистрСведенийКлючЗаписи. -// -Функция ЗаблокироватьВерсииОбластиДанных() Экспорт - - КлючЗаписи = Неопределено; - Если ОбщегоНазначенияПовтИсп.РазделениеВключено() Тогда - - Если ОбщегоНазначенияПовтИсп.ДоступноИспользованиеРазделенныхДанных() Тогда - УстановитьПривилегированныйРежим(Истина); - КонецЕсли; - - КлючЗаписи = КлючЗаписиВерсийПодсистем(); - - КонецЕсли; - - Если КлючЗаписи <> Неопределено Тогда - Попытка - ЗаблокироватьДанныеДляРедактирования(КлючЗаписи); - Исключение - ЗаписьЖурналаРегистрации(ОбновлениеИнформационнойБазы.СобытиеЖурналаРегистрации() + ". " - + НСтр("ru = 'Обновление области данных'", Метаданные.ОсновнойЯзык.КодЯзыка), - УровеньЖурналаРегистрации.Ошибка,,, - ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); - ВызватьИсключение(НСтр("ru = 'Ошибка обновления области данных. Запись версий области данных заблокирована.'")); - КонецПопытки; - КонецЕсли; - Возврат КлючЗаписи; - -КонецФункции - -// Разблокирует запись в регистре сведений ВерсииПодсистемОбластейДанных. -// -// Параметры: -// КлючЗаписи - РегистрСведенийКлючЗаписи -// -Процедура РазблокироватьВерсииОбластиДанных(КлючЗаписи) Экспорт - - Если КлючЗаписи <> Неопределено Тогда - РазблокироватьДанныеДляРедактирования(КлючЗаписи); - КонецЕсли; - -КонецПроцедуры - -// Только для внутреннего использования. -Процедура ПриОпределенииВерсииИБ(Знач ИдентификаторБиблиотеки, Знач ПолучитьВерсиюОбщихДанных, СтандартнаяОбработка, ВерсияИБ) Экспорт - - Если ОбщегоНазначения.ИспользованиеРазделителяСеанса() И Не ПолучитьВерсиюОбщихДанных Тогда - - СтандартнаяОбработка = Ложь; - - ТекстЗапроса = - "ВЫБРАТЬ - | ВерсииПодсистемОбластейДанных.Версия - |ИЗ - | РегистрСведений.ВерсииПодсистемОбластейДанных КАК ВерсииПодсистемОбластейДанных - |ГДЕ - | ВерсииПодсистемОбластейДанных.ИмяПодсистемы = &ИмяПодсистемы - | И ВерсииПодсистемОбластейДанных.ОбластьДанныхВспомогательныеДанные = &ОбластьДанныхВспомогательныеДанные"; - Запрос = Новый Запрос(ТекстЗапроса); - Запрос.УстановитьПараметр("ИмяПодсистемы", ИдентификаторБиблиотеки); - Запрос.УстановитьПараметр("ОбластьДанныхВспомогательныеДанные", ОбщегоНазначения.ЗначениеРазделителяСеанса()); - ТаблицаЗначений = Запрос.Выполнить().Выгрузить(); - ВерсияИБ = ""; - Если ТаблицаЗначений.Количество() > 0 Тогда - ВерсияИБ = СокрЛП(ТаблицаЗначений[0].Версия); - КонецЕсли; - - КонецЕсли; - -КонецПроцедуры - -// Только для внутреннего использования. -Процедура ПриОпределенииПервогоВходаВОбластьДанных(СтандартнаяОбработка, Результат) Экспорт - - Если ОбщегоНазначения.ИспользованиеРазделителяСеанса() Тогда - - СтандартнаяОбработка = Ложь; - - ТекстЗапроса = - "ВЫБРАТЬ ПЕРВЫЕ 1 - | 1 - |ИЗ - | РегистрСведений.ВерсииПодсистемОбластейДанных КАК ВерсииПодсистемОбластейДанных - |ГДЕ - | ВерсииПодсистемОбластейДанных.ОбластьДанныхВспомогательныеДанные = &ОбластьДанныхВспомогательныеДанные"; - Запрос = Новый Запрос(ТекстЗапроса); - Запрос.УстановитьПараметр("ОбластьДанныхВспомогательныеДанные", ОбщегоНазначения.ЗначениеРазделителяСеанса()); - Результат = Запрос.Выполнить().Пустой(); - - КонецЕсли; - -КонецПроцедуры - -// Только для внутреннего использования. -Процедура ПриУстановкеВерсииИБ(Знач ИдентификаторБиблиотеки, Знач НомерВерсии, СтандартнаяОбработка) Экспорт - - Если ОбщегоНазначения.ИспользованиеРазделителяСеанса() Тогда - - СтандартнаяОбработка = Ложь; - - ОбластьДанных = ОбщегоНазначения.ЗначениеРазделителяСеанса(); - - МенеджерЗаписи = РегистрыСведений.ВерсииПодсистемОбластейДанных.СоздатьМенеджерЗаписи(); - МенеджерЗаписи.ОбластьДанныхВспомогательныеДанные = ОбластьДанных; - МенеджерЗаписи.ИмяПодсистемы = ИдентификаторБиблиотеки; - МенеджерЗаписи.Версия = НомерВерсии; - МенеджерЗаписи.Записать(); - - КонецЕсли; - -КонецПроцедуры - // Только для внутреннего использования. Функция МинимальнаяВерсияОбластейДанных() Экспорт diff --git a/SSL/src/CommonModules/ОбновлениеИнформационнойБазыСлужебныйВызовСервера/Module.bsl b/SSL/src/CommonModules/ОбновлениеИнформационнойБазыСлужебныйВызовСервера/Module.bsl index 182fe97ab..30f44f92f 100644 --- a/SSL/src/CommonModules/ОбновлениеИнформационнойБазыСлужебныйВызовСервера/Module.bsl +++ b/SSL/src/CommonModules/ОбновлениеИнформационнойБазыСлужебныйВызовСервера/Module.bsl @@ -8,13 +8,12 @@ #Область СлужебныеПроцедурыИФункции // См. описание этой же функции в модуле ОбновлениеИнформационнойБазыСлужебный. -Функция ВыполнитьОбновлениеИнформационнойБазы(ИсключениеПриНевозможностиБлокировкиИБ = Истина, - ПриЗапускеКлиентскогоПриложения = Ложь, Перезапустить = Ложь) Экспорт +Функция ВыполнитьОбновлениеИнформационнойБазы(ПриЗапускеКлиентскогоПриложения = Ложь, Перезапустить = Ложь, ВыполнятьОтложенныеОбработчики = Ложь) Экспорт ПараметрыОбновления = ОбновлениеИнформационнойБазыСлужебный.ПараметрыОбновления(); - ПараметрыОбновления.ИсключениеПриНевозможностиБлокировкиИБ = ИсключениеПриНевозможностиБлокировкиИБ; ПараметрыОбновления.ПриЗапускеКлиентскогоПриложения = ПриЗапускеКлиентскогоПриложения; ПараметрыОбновления.Перезапустить = Перезапустить; + ПараметрыОбновления.ВыполнятьОтложенныеОбработчики = ВыполнятьОтложенныеОбработчики; Результат = ОбновлениеИнформационнойБазыСлужебный.ВыполнитьОбновлениеИнформационнойБазы(ПараметрыОбновления); @@ -48,12 +47,9 @@ Минуты = Цел((ВремяВСекундах - Часы * 3600) / 60); Секунды = ВремяВСекундах - Часы * 3600 - Минуты * 60; - ПродолжительностьЧасы = ?(Часы = 0, "", - СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = '%1 час'"), Часы)); - ПродолжительностьМинуты = ?(Минуты = 0, "", - СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = '%1 мин'"), Минуты)); - ПродолжительностьСекунды = ?(Секунды = 0, "", - СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = '%1 сек'"), Секунды)); + ПродолжительностьЧасы = ?(Часы = 0, "", СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = '%1 час'"), Часы)); + ПродолжительностьМинуты = ?(Минуты = 0, "", СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = '%1 мин'"), Минуты)); + ПродолжительностьСекунды = ?(Секунды = 0, "", СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = '%1 сек'"), Секунды)); ПродолжительностьОбновления = ПродолжительностьЧасы + " " + ПродолжительностьМинуты + " " + ПродолжительностьСекунды; СведенияОбОбновлении.ПродолжительностьОбновления = СокрЛП(ПродолжительностьОбновления); diff --git a/SSL/src/CommonModules/ОбновлениеКонфигурации/Module.bsl b/SSL/src/CommonModules/ОбновлениеКонфигурации/Module.bsl index 648519125..626569d03 100644 --- a/SSL/src/CommonModules/ОбновлениеКонфигурации/Module.bsl +++ b/SSL/src/CommonModules/ОбновлениеКонфигурации/Module.bsl @@ -20,10 +20,10 @@ // СЕРВЕРНЫЕ ОБРАБОТЧИКИ. - СерверныеОбработчики["СтандартныеПодсистемы.БазоваяФункциональность\ПриДобавленииПараметровРаботыКлиентскойЛогикиСтандартныхПодсистемПриЗапуске"].Добавить( + СерверныеОбработчики["СтандартныеПодсистемы.БазоваяФункциональность\ПриДобавленииПараметровРаботыКлиентаПриЗапуске"].Добавить( "ОбновлениеКонфигурации"); - СерверныеОбработчики["СтандартныеПодсистемы.БазоваяФункциональность\ПриДобавленииПараметровРаботыКлиентскойЛогикиСтандартныхПодсистем"].Добавить( + СерверныеОбработчики["СтандартныеПодсистемы.БазоваяФункциональность\ПриДобавленииПараметровРаботыКлиента"].Добавить( "ОбновлениеКонфигурации"); СерверныеОбработчики["СтандартныеПодсистемы.ОбновлениеВерсииИБ\ПриДобавленииОбработчиковОбновления"].Добавить( @@ -31,79 +31,13 @@ КонецПроцедуры -// Заполняет структуру параметров, необходимых для работы клиентского кода -// конфигурации. -// -// Параметры: -// Параметры - Структура - структура параметров. -// -Процедура ДобавитьПараметрыРаботыКлиента(Параметры) Экспорт - - Если Не ОбщегоНазначенияПовтИсп.ДоступноИспользованиеРазделенныхДанных() - ИЛИ ОбщегоНазначенияКлиентСервер.ЭтоLinuxКлиент() Тогда - Возврат; - КонецЕсли; - - Параметры.Вставить("НастройкиОбновления", Новый ФиксированнаяСтруктура(ПолучитьНастройкиОбновления())); - -КонецПроцедуры - -// Заполняет структуру параметров, необходимых для работы клиентского кода -// при запуске конфигурации. -// -// Параметры: -// Параметры - Структура - структура параметров. -// -Процедура ДобавитьПараметрыРаботыКлиентаПриЗапуске(Параметры) Экспорт - - Если ОбщегоНазначенияКлиентСервер.ЭтоLinuxКлиент() Тогда - Возврат; - КонецЕсли; - - Параметры.Вставить("НастройкиОбновления", Новый ФиксированнаяСтруктура(ПолучитьНастройкиОбновления())); - -КонецПроцедуры - -#КонецОбласти - -#Область СлужебныеПроцедурыИФункции - -// Проверить, что запуск программы выполнен от имени внешнего пользователя -// и выбросить исключение в этом случае. -// -// Параметры: -// ТекстСообщения - Строка - текст исключения. Если не задан, -// используется текст по умолчанию. -// -// Пример использования: -// ПрерватьВыполнениеЕслиАвторизованВнешнийПользователь(); -// ... далее располагается фрагмент кода, который рассчитывает только на выполнение -// из-под "обычного" пользователя. -// -Процедура ПрерватьВыполнениеЕслиАвторизованВнешнийПользователь(Знач ТекстСообщения = "") Экспорт - - УстановитьПривилегированныйРежим(Истина); - - Если ПользователиКлиентСервер.ЭтоСеансВнешнегоПользователя() Тогда - - ТекстИсключения = ТекстСообщения; - - Если ПустаяСтрока(ТекстИсключения) Тогда - ТекстИсключения = НСтр("ru = 'Данная операция не доступна внешнему пользователю системы.'"); - КонецЕсли; - - ВызватьИсключение ТекстИсключения; - - КонецЕсли; - -КонецПроцедуры - // Получить глобальные настройки обновления на сеанс 1С:Предприятия. // Функция ПолучитьНастройкиОбновления() Экспорт ЕстьДоступДляОбновления = ПроверитьДоступДляОбновления(); - ЕстьДоступДляПроверкиОбновления = ПроверитьДоступДляПроверкиОбновления(); + ЕстьДоступДляПроверкиОбновления = Пользователи.РолиДоступны("ПроверкаДоступныхОбновленийКонфигурации") + И ТипЗнч(Пользователи.АвторизованныйПользователь()) = Тип("СправочникСсылка.Пользователи"); КонфигурацияИзменена = ?(ЕстьДоступДляОбновления Или ЕстьДоступДляПроверкиОбновления, КонфигурацияИзменена(), Ложь); @@ -160,7 +94,99 @@ Если РезультатОбновления Тогда - ПослеЗавершенияОбновления(); + ОбновлениеИнформационнойБазыСлужебный.ПослеЗавершенияОбновления(); + + КонецЕсли; + +КонецПроцедуры + +// Получает из хранилища общих настроек настройки обновления конфигурации. +Функция ПолучитьСтруктуруНастроекПомощника() Экспорт + + Расписание = Неопределено; + Настройки = ОбщегоНазначения.ХранилищеОбщихНастроекЗагрузить("ОбновлениеКонфигурации", "НастройкиОбновленияКонфигурации"); + + Если Настройки = Неопределено Тогда + КоличествоСтарыхНастроек = 0; + ИначеЕсли ТипЗнч(Настройки) = Тип("Структура") ИЛИ ТипЗнч(Настройки) = Тип("Соответствие") Тогда + КоличествоСтарыхНастроек = Настройки.Количество(); + Иначе + КоличествоСтарыхНастроек = 0; + КонецЕсли; + Настройки = ОбновлениеКонфигурацииКлиентСервер.ПолучитьОбновленныеНастройкиОбновленияКонфигурации(Настройки); + // Если появились новые настройки, то их нужно сохранить. + Если Настройки.Количество() > КоличествоСтарыхНастроек Тогда + УстановитьПривилегированныйРежим(Истина); + ЗаписатьСтруктуруНастроекПомощника(Настройки); + УстановитьПривилегированныйРежим(Ложь); + КонецЕсли; + // Если в ранних версиях было сохранено расписание, и еще не отработал обработчик + // обновления ОбновлениеРасписанияПроверкиНаличияОбновления, то... + Если Настройки <> Неопределено И Настройки.Свойство("РасписаниеПроверкиНаличияОбновления", Расписание) + И ТипЗнч(Расписание) = Тип("РасписаниеРегламентногоЗадания") Тогда + Настройки.РасписаниеПроверкиНаличияОбновления = ОбщегоНазначенияКлиентСервер.РасписаниеВСтруктуру(Расписание); + КонецЕсли; + Возврат Настройки; + +КонецФункции + +//////////////////////////////////////////////////////////////////////////////// +// Обработчики условных вызовов из других подсистем. + +// Вызывается не через событие, т.к. нужно сделать вызов самым последним. +// +Процедура ПослеОбновленияИнформационнойБазы() Экспорт + + Если ОбщегоНазначенияПовтИсп.РазделениеВключено() Тогда + Возврат; + КонецЕсли; + + ЗначениеХранилища = Константы.СтатусОбновленияКонфигурации.Получить(); + + Статус = Неопределено; + Если ЗначениеХранилища <> Неопределено Тогда + Статус = ЗначениеХранилища.Получить(); + КонецЕсли; + + Если Статус <> Неопределено И Статус.ОбновлениеВыполнено И Статус.РезультатОбновленияКонфигурации <> Неопределено + И Не Статус.РезультатОбновленияКонфигурации Тогда + + Статус.РезультатОбновленияКонфигурации = Истина; + Константы.СтатусОбновленияКонфигурации.Установить(Новый ХранилищеЗначения(Статус)); + + КонецЕсли; + +КонецПроцедуры + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +// Проверить, что запуск программы выполнен от имени внешнего пользователя +// и выбросить исключение в этом случае. +// +// Параметры: +// ТекстСообщения - Строка - текст исключения. Если не задан, +// используется текст по умолчанию. +// +// Пример использования: +// ПрерватьВыполнениеЕслиАвторизованВнешнийПользователь(); +// ... далее располагается фрагмент кода, который рассчитывает только на выполнение +// из-под "обычного" пользователя. +// +Процедура ПрерватьВыполнениеЕслиАвторизованВнешнийПользователь(Знач ТекстСообщения = "") Экспорт + + УстановитьПривилегированныйРежим(Истина); + + Если ПользователиКлиентСервер.ЭтоСеансВнешнегоПользователя() Тогда + + ТекстИсключения = ТекстСообщения; + + Если ПустаяСтрока(ТекстИсключения) Тогда + ТекстИсключения = НСтр("ru = 'Данная операция не доступна внешнему пользователю системы.'"); + КонецЕсли; + + ВызватьИсключение ТекстИсключения; КонецЕсли; @@ -182,23 +208,20 @@ КонецЕсли; // Определение короткого имени - КороткоеИмя = ОбновлениеКонфигурацииПереопределяемый.КороткоеИмяКонфигурации(); - Если Не ЗначениеЗаполнено(КороткоеИмя) Тогда - КороткоеИмя = ""; - КонецЕсли; + КороткоеИмя = ""; ОбновлениеКонфигурацииПереопределяемый.ПриОпределенииКраткогоИмениКонфигурации(КороткоеИмя); КороткоеИмя = КороткоеИмя + "/"; // Определение редакции конфигурации. НомерРедакции = ""; - ПодстрокиВерсии = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(Метаданные.Версия, "."); + ПодстрокиВерсии = СтрРазделить(Метаданные.Версия, "."); Если ПодстрокиВерсии.Количество() > 1 Тогда НомерРедакции = ПодстрокиВерсии[0] + ПодстрокиВерсии[1] + "/"; КонецЕсли; // Определение версии платформы. ИнформацияСистемная = Новый СистемнаяИнформация; - ПодстрокиВерсии = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(ИнформацияСистемная.ВерсияПриложения, "."); + ПодстрокиВерсии = СтрРазделить(ИнформацияСистемная.ВерсияПриложения, "."); ВерсияПлатформы = ПодстрокиВерсии[0] + ПодстрокиВерсии[1] + "/"; // Определение группы версий @@ -230,10 +253,7 @@ // Функция АдресСервераДляПроверкиНаличияОбновления(СтруктураНастройки) - Значение = ОбновлениеКонфигурацииПереопределяемый.АдресСервераДляПроверкиНаличияОбновления(); - Если Не ЗначениеЗаполнено(Значение) Тогда - Значение = "downloads.1c.ru"; // Значение по умолчанию - КонецЕсли; + Значение = "downloads.1c.ru"; // Значение по умолчанию ОбновлениеКонфигурацииПереопределяемый.ПриОпределенииАдресаСервераДляПроверкиНаличияОбновления(Значение); Если СтруктураНастройки <> Неопределено Тогда // Значение из настроек пользователя. @@ -250,12 +270,7 @@ Функция КаталогОбновлений(СтруктураНастройки) - Значение = ОбновлениеКонфигурацииПереопределяемый.КаталогОбновлений(); - Если Не ЗначениеЗаполнено(Значение) Тогда - // Значение по умолчанию - Значение = ОбновлениеКонфигурацииКлиентСервер.ДобавитьКонечныйРазделительПути(Метаданные.АдресКаталогаОбновлений); - КонецЕсли; - + Значение = ОбновлениеКонфигурацииКлиентСервер.ДобавитьКонечныйРазделительПути(Метаданные.АдресКаталогаОбновлений); ОбновлениеКонфигурацииПереопределяемый.ПриОпределенииАдресаКаталогаОбновлений(Значение); Если СтруктураНастройки <> Неопределено Тогда // Значение из настроек пользователя. @@ -272,10 +287,7 @@ Функция АдресРесурсаДляПроверкиНаличияОбновления(СтруктураНастройки) - Значение = ОбновлениеКонфигурацииПереопределяемый.АдресРесурсаДляПроверкиНаличияОбновления(); - Если Не ЗначениеЗаполнено(Значение) Тогда - Значение = "/ipp/ITSREPV/V8Update/Configs/"; // Значение по умолчанию - КонецЕсли; + Значение = "/ipp/ITSREPV/V8Update/Configs/"; // Значение по умолчанию ОбновлениеКонфигурацииПереопределяемый.ПриОпределенииАдресаРесурсаДляПроверкиНаличияОбновления(Значение); Если СтруктураНастройки <> Неопределено Тогда // Значение из настроек пользователя. @@ -311,7 +323,7 @@ КонецФункции // Возвращает признак успешного обновления конфигурации на основе данных константы настроек. -Функция ОбновлениеКонфигурацииУспешно() Экспорт +Функция ОбновлениеКонфигурацииУспешно(КаталогСкрипта = "") Экспорт Если НЕ ПравоДоступа("Чтение", Метаданные.Константы.СтатусОбновленияКонфигурации) Тогда Возврат Неопределено; @@ -328,9 +340,16 @@ Возврат Неопределено; КонецЕсли; - Если НЕ Статус.ОбновлениеВыполнено ИЛИ - (Статус.ИмяАдминистратораОбновления <> ИмяПользователя()) Тогда + Если Не СтандартныеПодсистемыСервер.ЭтоБазоваяВерсияКонфигурации() + И Не Статус.ОбновлениеВыполнено + Или (Статус.ИмяАдминистратораОбновления <> ИмяПользователя()) Тогда + Возврат Неопределено; + + КонецЕсли; + + Если Статус.РезультатОбновленияКонфигурации <> Неопределено Тогда + Статус.Свойство("КаталогСкрипта", КаталогСкрипта); КонецЕсли; Возврат Статус.РезультатОбновленияКонфигурации; @@ -340,21 +359,19 @@ // Устанавливает новое значение в константу настроек обновления // соответственно успешности последней попытки обновления конфигурации. Процедура ЗаписатьСтатусОбновления(Знач ИмяАдминистратораОбновления, Знач ОбновлениеЗапланировано, - Знач ОбновлениеВыполнено, Знач РезультатОбновления, СообщенияДляЖурналаРегистрации = Неопределено) Экспорт - + Знач ОбновлениеВыполнено, Знач РезультатОбновления, КаталогСкрипта = "", СообщенияДляЖурналаРегистрации = Неопределено) Экспорт + ЖурналРегистрации.ЗаписатьСобытияВЖурналРегистрации(СообщенияДляЖурналаРегистрации); - Статус = Новый Структура("ИмяАдминистратораОбновления, - |ОбновлениеЗапланировано, - |ОбновлениеВыполнено, - |РезультатОбновленияКонфигурации", - ИмяАдминистратораОбновления, - ОбновлениеЗапланировано, - ОбновлениеВыполнено, - РезультатОбновления); - + Статус = Новый Структура; + Статус.Вставить("ИмяАдминистратораОбновления", ИмяАдминистратораОбновления); + Статус.Вставить("ОбновлениеЗапланировано", ОбновлениеЗапланировано); + Статус.Вставить("ОбновлениеВыполнено", ОбновлениеВыполнено); + Статус.Вставить("РезультатОбновленияКонфигурации", РезультатОбновления); + Статус.Вставить("КаталогСкрипта", КаталогСкрипта); + Константы.СтатусОбновленияКонфигурации.Установить(Новый ХранилищеЗначения(Статус)); - + КонецПроцедуры // Выполняет очистку всех настроек обновления конфигурации. @@ -364,36 +381,6 @@ КонецПроцедуры -// Получает из хранилища общих настроек настройки обновления конфигурации. -Функция ПолучитьСтруктуруНастроекПомощника() Экспорт - - Расписание = Неопределено; - Настройки = ОбщегоНазначения.ХранилищеОбщихНастроекЗагрузить("ОбновлениеКонфигурации", "НастройкиОбновленияКонфигурации"); - - Если Настройки = Неопределено Тогда - КоличествоСтарыхНастроек = 0; - ИначеЕсли ТипЗнч(Настройки) = Тип("Структура") ИЛИ ТипЗнч(Настройки) = Тип("Соответствие") Тогда - КоличествоСтарыхНастроек = Настройки.Количество(); - Иначе - КоличествоСтарыхНастроек = 0; - КонецЕсли; - Настройки = ОбновлениеКонфигурацииКлиентСервер.ПолучитьОбновленныеНастройкиОбновленияКонфигурации(Настройки); - // Если появились новые настройки, то их нужно сохранить. - Если Настройки.Количество() > КоличествоСтарыхНастроек Тогда - УстановитьПривилегированныйРежим(Истина); - ЗаписатьСтруктуруНастроекПомощника(Настройки); - УстановитьПривилегированныйРежим(Ложь); - КонецЕсли; - // Если в ранних версиях было сохранено расписание, и еще не отработал обработчик - // обновления ОбновлениеРасписанияПроверкиНаличияОбновления, то... - Если Настройки <> Неопределено И Настройки.Свойство("РасписаниеПроверкиНаличияОбновления", Расписание) - И ТипЗнч(Расписание) = Тип("РасписаниеРегламентногоЗадания") Тогда - Настройки.РасписаниеПроверкиНаличияОбновления = ОбщегоНазначенияКлиентСервер.РасписаниеВСтруктуру(Расписание); - КонецЕсли; - Возврат Настройки; - -КонецФункции - // Записывает настройки помощника обновления в хранилище общих настроек. Процедура ЗаписатьСтруктуруНастроекПомощника(НастройкиОбновленияКонфигурации, СообщенияДляЖурналаРегистрации = Неопределено) Экспорт @@ -418,14 +405,6 @@ Возврат Пользователи.ЭтоПолноправныйПользователь(, Истина); КонецФункции -// Возвращает признак доступности проведения обновления текущим пользователем. -Функция ПроверитьДоступДляПроверкиОбновления() Экспорт - - Возврат Пользователи.РолиДоступны("ПроверкаДоступныхОбновленийКонфигурации") - И ТипЗнч(Пользователи.АвторизованныйПользователь()) = Тип("СправочникСсылка.Пользователи"); - -КонецФункции - Процедура ОтправитьУведомлениеОбОбновлении(Знач ИмяПользователя, Знач АдресНазначения, Знач УспешноеОбновление) Тема = ? (УспешноеОбновление, НСтр("ru = 'Успешное обновление конфигурации ""%1"", версия %2'"), @@ -466,9 +445,9 @@ // Параметры: // Параметры - Структура - структура параметров. // -Процедура ПриДобавленииПараметровРаботыКлиентскойЛогикиСтандартныхПодсистемПриЗапуске(Параметры) Экспорт +Процедура ПриДобавленииПараметровРаботыКлиентаПриЗапуске(Параметры) Экспорт - ДобавитьПараметрыРаботыКлиента(Параметры); + ПриДобавленииПараметровРаботыКлиента(Параметры); КонецПроцедуры @@ -478,10 +457,15 @@ // Параметры: // Параметры - Структура - структура параметров. // -Процедура ПриДобавленииПараметровРаботыКлиентскойЛогикиСтандартныхПодсистем(Параметры) Экспорт +Процедура ПриДобавленииПараметровРаботыКлиента(Параметры) Экспорт - ДобавитьПараметрыРаботыКлиента(Параметры); + Если Не ОбщегоНазначенияПовтИсп.ДоступноИспользованиеРазделенныхДанных() + ИЛИ ОбщегоНазначенияКлиентСервер.ЭтоLinuxКлиент() Тогда + Возврат; + КонецЕсли; + Параметры.Вставить("НастройкиОбновления", Новый ФиксированнаяСтруктура(ПолучитьНастройкиОбновления())); + КонецПроцедуры //////////////////////////////////////////////////////////////////////////////// @@ -573,42 +557,4 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// Обработчики условных вызовов из других подсистем. - -// Вызывается не через событие, т.к. нужно сделать вызов самым последним. -// -Процедура ПослеОбновленияИнформационнойБазы() Экспорт - - Если ОбщегоНазначенияПовтИсп.РазделениеВключено() Тогда - Возврат; - КонецЕсли; - - ЗначениеХранилища = Константы.СтатусОбновленияКонфигурации.Получить(); - - Статус = Неопределено; - Если ЗначениеХранилища <> Неопределено Тогда - Статус = ЗначениеХранилища.Получить(); - КонецЕсли; - - Если Статус <> Неопределено И Статус.ОбновлениеВыполнено И Статус.РезультатОбновленияКонфигурации <> Неопределено - И Не Статус.РезультатОбновленияКонфигурации Тогда - - Статус.РезультатОбновленияКонфигурации = Истина; - Константы.СтатусОбновленияКонфигурации.Установить(Новый ХранилищеЗначения(Статус)); - - КонецЕсли; - -КонецПроцедуры - -//////////////////////////////////////////////////////////////////////////////// -// Обработчики условных вызовов в другие подсистемы. - -// Вызывается при выполнении скрипта обновления из процедуры ОбновлениеКонфигурации.ЗавершитьОбновление(). -Процедура ПослеЗавершенияОбновления() Экспорт - - ОбновлениеИнформационнойБазыСлужебный.ПослеЗавершенияОбновления(); - -КонецПроцедуры - #КонецОбласти diff --git a/SSL/src/CommonModules/ОбновлениеКонфигурацииКлиент/Module.bsl b/SSL/src/CommonModules/ОбновлениеКонфигурацииКлиент/Module.bsl index 834e3b497..1ece7f1b5 100644 --- a/SSL/src/CommonModules/ОбновлениеКонфигурацииКлиент/Module.bsl +++ b/SSL/src/CommonModules/ОбновлениеКонфигурацииКлиент/Module.bsl @@ -25,7 +25,7 @@ Если НаличиеОбновления Тогда // Надо завершить предыдущее обновление. - ОткрытьФорму("Обработка.ОбновлениеКонфигурации.Форма.Форма"); + ПоказатьПоискИУстановкуОбновлений(); Возврат; КонецЕсли; @@ -44,10 +44,10 @@ ПараметрыПриложения[ИмяПараметра] = НастройкиОбновления.НастройкиОбновленияКонфигурации; НастройкиОбновленияКонфигурации = ПараметрыПриложения[ИмяПараметра]; - Если НЕ НаличиеОбновления И НастройкиОбновленияКонфигурации <> Неопределено - И НастройкиОбновления.ЕстьДоступДляПроверкиОбновления И - (НастройкиОбновленияКонфигурации.ПроверятьНаличиеОбновленияПриЗапуске = 1 ИЛИ - НастройкиОбновленияКонфигурации.ПроверятьНаличиеОбновленияПриЗапуске = 2) Тогда + Если Не НаличиеОбновления И НастройкиОбновленияКонфигурации <> Неопределено + И НастройкиОбновления.ЕстьДоступДляПроверкиОбновления + И (НастройкиОбновленияКонфигурации.ПроверятьНаличиеОбновленияПриЗапуске = 1 + Или НастройкиОбновленияКонфигурации.ПроверятьНаличиеОбновленияПриЗапуске = 2) Тогда // Подключение обработчика ожидания для проверки наличия обновления в сети Интернет. Если НастройкиОбновленияКонфигурации.ПроверятьНаличиеОбновленияПриЗапуске = 1 @@ -82,7 +82,7 @@ Параметры.НуженФайлОбновления = НастройкиОбновленияКонфигурации.НуженФайлОбновления; Параметры.ФлагАвтоПереходаНаСтраницуСОбновлением = Истина; ПоказатьОповещениеПользователя(НСтр("ru = 'Обновление конфигурации'"), - "e1cib/app/Обработка.ОбновлениеКонфигурации", + "e1cib/app/Обработка.ПоискИУстановкаОбновлений", НСтр("ru = 'Конфигурация отличается от основной конфигурации информационной базы.'"), БиблиотекаКартинок.Информация32); Возврат; @@ -99,7 +99,7 @@ Параметры.НуженФайлОбновления = НастройкиОбновленияКонфигурации.НуженФайлОбновления; Параметры.ФлагАвтоПереходаНаСтраницуСОбновлением = Истина; ПоказатьОповещениеПользователя(НСтр("ru = 'Доступно обновление конфигурации'"), - "e1cib/app/Обработка.ОбновлениеКонфигурации", + "e1cib/app/Обработка.ПоискИУстановкаОбновлений", НСтр("ru = 'Версия:'") + " " + Параметры.ПараметрыФайлаПроверкиОбновления.Version, БиблиотекаКартинок.Информация32); Возврат; @@ -135,11 +135,9 @@ СообщениеОбОшибке = НСтр("ru = 'Не удалось создать временный каталог для проверки наличия обновлений. |%1'"); ЖурналРегистрацииКлиент.ДобавитьСообщениеДляЖурналаРегистрации(СобытиеЖурналаРегистрации(), "Ошибка", - СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(СообщениеОбОшибке, ПодробноеПредставлениеОшибки(ИнфоОбОшибке)),, - Истина); + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(СообщениеОбОшибке, ПодробноеПредставлениеОшибки(ИнфоОбОшибке)),, Истина); - СообщениеОбОшибке = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(СообщениеОбОшибке, - КраткоеПредставлениеОшибки(ИнфоОбОшибке)); + СообщениеОбОшибке = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(СообщениеОбОшибке, КраткоеПредставлениеОшибки(ИнфоОбОшибке)); Если ВыдаватьСообщения Тогда ПоказатьПредупреждение(, СообщениеОбОшибке); КонецЕсли; @@ -148,19 +146,21 @@ КонецЕсли; // Получаем сам файл из Интернета. - Результат = ПолучениеФайловИзИнтернетаКлиент.СкачатьФайлНаКлиенте(НастройкиОбновления.АдресСервераДляПроверкиНаличияОбновления + - ПараметрыОбновления.АдресРесурсовДляПроверкиНаличияОбновления + ПараметрыОбновления.ИмяФайлаПроверкиНаличияОбновления, - Новый Структура("ПутьДляСохранения", ? (ПустаяСтрока(ВременныйФайл), Неопределено, ВременныйФайл))); - + URL = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку("%1%2%3", + НастройкиОбновления.АдресСервераДляПроверкиНаличияОбновления, + ПараметрыОбновления.АдресРесурсовДляПроверкиНаличияОбновления, + ПараметрыОбновления.ИмяФайлаПроверкиНаличияОбновления); + ПараметрыПолучения = Новый Структура("ПутьДляСохранения", ?(ПустаяСтрока(ВременныйФайл), Неопределено, ВременныйФайл)); + Результат = ПолучениеФайловИзИнтернетаКлиент.СкачатьФайлНаКлиенте(URL, ПараметрыПолучения); + Если Результат.Статус <> Истина Тогда - СообщениеОбОшибке = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Не удалось проверить наличие обновлений. + СообщениеОбОшибке = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Не удалось проверить наличие обновлений. |%1'"), Результат.СообщениеОбОшибке); Если ВыдаватьСообщения Тогда ПоказатьПредупреждение(, СообщениеОбОшибке); КонецЕсли; Возврат СообщениеОбОшибке; - КонецЕсли; + КонецЕсли; Возврат ПараметрыДистрибутива(ВременныйФайл); @@ -195,20 +195,20 @@ Если ПустаяСтрока(ВременнаяСтрока) Тогда Продолжить; КонецЕсли; - Если Найти(ВременнаяСтрока,"fromversions=")>0 Тогда + Если СтрНайти(ВременнаяСтрока,"fromversions=")>0 Тогда ВременнаяСтрока = СокрЛП(Сред(ВременнаяСтрока,Найти(ВременнаяСтрока,"fromversions=")+СтрДлина("fromversions="))); ВременнаяСтрока = ?(Лев(ВременнаяСтрока,1)=";","",";") + ВременнаяСтрока + ?(Прав(ВременнаяСтрока,1)=";","",";"); ПараметрыКомплекта.Вставить("FromVersions",ВременнаяСтрока); - ИначеЕсли Найти(ВременнаяСтрока,"version=")>0 Тогда + ИначеЕсли СтрНайти(ВременнаяСтрока,"version=")>0 Тогда ПараметрыКомплекта.Вставить("Version",Сред(ВременнаяСтрока,Найти(ВременнаяСтрока,"version=")+СтрДлина("version="))); - ИначеЕсли Найти(ВременнаяСтрока,"updatedate=")>0 Тогда + ИначеЕсли СтрНайти(ВременнаяСтрока,"updatedate=")>0 Тогда // формат даты = Дата, ВременнаяСтрока = Сред(ВременнаяСтрока,Найти(ВременнаяСтрока,"updatedate=")+СтрДлина("updatedate=")); Если СтрДлина(ВременнаяСтрока)>8 Тогда - Если Найти(ВременнаяСтрока,".")=5 Тогда + Если СтрНайти(ВременнаяСтрока,".")=5 Тогда // дата в формате ГГГГ.ММ.ДД ВременнаяСтрока = СтрЗаменить(ВременнаяСтрока,".",""); - ИначеЕсли Найти(ВременнаяСтрока,".")=3 Тогда + ИначеЕсли СтрНайти(ВременнаяСтрока,".")=3 Тогда // дата в формате ДД.ММ.ГГГГ ВременнаяСтрока = Прав(ВременнаяСтрока,4)+Сред(ВременнаяСтрока,4,2)+Лев(ВременнаяСтрока,2); Иначе @@ -226,6 +226,12 @@ Возврат ПараметрыКомплекта; КонецФункции +Процедура ПоказатьПоискИУстановкуОбновлений(ПараметрыФормы = Неопределено) Экспорт + + ОткрытьФорму("Обработка.ПоискИУстановкаОбновлений.Форма.Форма", ПараметрыФормы); + +КонецПроцедуры + #КонецОбласти #Область СлужебныеПроцедурыИФункции @@ -239,7 +245,7 @@ ПараметрыФормы = Новый Структура("ЗавершениеРаботыСистемы, ПолученоОбновлениеКонфигурации", ЗавершениеРаботыСистемы, ЗавершениеРаботыСистемы); - ОткрытьФорму("Обработка.ОбновлениеКонфигурации.Форма.Форма", ПараметрыФормы); + ПоказатьПоискИУстановкуОбновлений(ПараметрыФормы); КонецПроцедуры @@ -272,7 +278,7 @@ СтруктураПараметров.Вставить("АдресКаталогаШаблоновНаСервереОбновлений" , АдресКаталогаШаблоновНаСервереОбновлений()); СтруктураПараметров.Вставить("АдресСервераОбновлений" , АдресСервераОбновлений()); СтруктураПараметров.Вставить("АдресСервисаПроверкиЛегальности" , АдресСервисаПроверкиЛегальности()); - СтруктураПараметров.Вставить("ИмяФайлаПроверкиНаличияОбновления" , ИмяФайлаПроверкиНаличияОбновления()); + СтруктураПараметров.Вставить("ИмяФайлаПроверкиНаличияОбновления" , "UpdInfo.txt"); Возврат СтруктураПараметров; #КонецЕсли @@ -301,7 +307,7 @@ // Возвращаемое значение: // Строка - адрес веб-страницы. // -Функция АдресРесурсовДляПроверкиНаличияОбновления(ПроверитьОбновленияДляНовойРедакции = Ложь) Экспорт +Функция АдресРесурсовДляПроверкиНаличияОбновления(ПроверитьОбновленияДляНовойРедакции = Ложь) НастройкиОбновления = СтандартныеПодсистемыКлиентПовтИсп.ПараметрыРаботыКлиента().НастройкиОбновления; КороткоеИмяКонфигурации = НастройкиОбновления.КороткоеИмяКонфигурации; @@ -309,8 +315,10 @@ Если ПроверитьОбновленияДляНовойРедакции Тогда КороткоеИмяКонфигурации = СтрЗаменить(КороткоеИмяКонфигурации, ТекущаяРедакцияПлатформы(), СледующаяРедакцияПлатформы()); КонецЕсли; - Результат = ОбновлениеКонфигурацииКлиентСервер.ДобавитьКонечныйРазделительПути(НастройкиОбновления.АдресРесурсаДляПроверкиНаличияОбновления) + - КороткоеИмяКонфигурации + "/"; + + Результат = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку("%1%2/", ОбновлениеКонфигурацииКлиентСервер.ДобавитьКонечныйРазделительПути( + НастройкиОбновления.АдресРесурсаДляПроверкиНаличияОбновления), КороткоеИмяКонфигурации); + Возврат Результат; КонецФункции @@ -318,7 +326,7 @@ Функция ТекущаяРедакцияПлатформы() СистемнаяИнформация = Новый СистемнаяИнформация; - МассивТекущейВерсии = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(СистемнаяИнформация.ВерсияПриложения, "."); + МассивТекущейВерсии = СтрРазделить(СистемнаяИнформация.ВерсияПриложения, "."); ТекущаяРедакция = МассивТекущейВерсии[0] + МассивТекущейВерсии[1]; Возврат ТекущаяРедакция; @@ -328,7 +336,7 @@ Функция СледующаяРедакцияПлатформы() Экспорт СистемнаяИнформация = Новый СистемнаяИнформация; - МассивТекущейВерсии = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(СистемнаяИнформация.ВерсияПриложения, "."); + МассивТекущейВерсии = СтрРазделить(СистемнаяИнформация.ВерсияПриложения, "."); СледующаяРедакция = МассивТекущейВерсии[0] + Строка(Число(МассивТекущейВерсии[1]) +1); Возврат СледующаяРедакция; @@ -340,13 +348,9 @@ // // Возвращаемое значение: // Строка - адрес веб-страницы. -Функция АдресСтраницыИнформацииОПолученииДоступаКПользовательскомуСайту() Экспорт - - АдресСтраницы = ОбновлениеКонфигурацииКлиентПереопределяемый.АдресСтраницыИнформацииОПолученииДоступаКПользовательскомуСайту(); - Если Не ЗначениеЗаполнено(АдресСтраницы) Тогда - АдресСтраницы = "http://users.v8.1c.ru/Rules.aspx"; // Значение по умолчанию - КонецЕсли; +Функция АдресСтраницыИнформацииОПолученииДоступаКПользовательскомуСайту() + АдресСтраницы = "http://users.v8.1c.ru/Rules.aspx"; // Значение по умолчанию ОбновлениеКонфигурацииКлиентПереопределяемый.ПриОпределенииАдресаСтраницыПолученияДоступаКСайтуОбновлений(АдресСтраницы); Возврат АдресСтраницы; @@ -358,11 +362,11 @@ // Возвращаемое значение: // Строка - адрес каталога на веб-сервере. // -Функция АдресКаталогаШаблоновНаСервереОбновлений() Экспорт +Функция АдресКаталогаШаблоновНаСервереОбновлений() СерверОбновлений = СтандартныеПодсистемыКлиентПовтИсп.ПараметрыРаботыКлиента().НастройкиОбновления.КаталогОбновлений; - Если Найти(СерверОбновлений, "ftp://") <> 0 Тогда + Если СтрНайти(СерверОбновлений, "ftp://") <> 0 Тогда Протокол = "ftp://"; Иначе Протокол = "http://"; @@ -370,7 +374,7 @@ СерверОбновлений = СтрЗаменить(СерверОбновлений, Протокол, ""); КаталогШаблоновНаСервере = ""; - Позиция = Найти(СерверОбновлений, "/"); + Позиция = СтрНайти(СерверОбновлений, "/"); Если Позиция > 0 Тогда КаталогШаблоновНаСервере = Сред(СерверОбновлений, Позиция, СтрДлина(СерверОбновлений)); КонецЕсли; @@ -394,18 +398,18 @@ // Возвращаемое значение: // Строка - адрес веб-сервера. // -Функция АдресСервераОбновлений() Экспорт +Функция АдресСервераОбновлений() СерверОбновлений = СтандартныеПодсистемыКлиентПовтИсп.ПараметрыРаботыКлиента().НастройкиОбновления.КаталогОбновлений; - Если Найти(СерверОбновлений, "ftp://") <> 0 Тогда + Если СтрНайти(СерверОбновлений, "ftp://") <> 0 Тогда Протокол = "ftp://"; Иначе Протокол = "http://"; КонецЕсли; СерверОбновлений = СтрЗаменить(СерверОбновлений, Протокол, ""); - Позиция = Найти(СерверОбновлений, "/"); + Позиция = СтрНайти(СерверОбновлений, "/"); Если Позиция > 0 Тогда СерверОбновлений = Сред(СерверОбновлений, 1, Позиция - 1); КонецЕсли; @@ -414,18 +418,6 @@ КонецФункции -// Получить имя файла с информацией о доступном обновлении на сайте поставщика -// конфигурации. -// -// Возвращаемое значение: -// Строка - имя файла. -// -Функция ИмяФайлаПроверкиНаличияОбновления() Экспорт - - Возврат "UpdInfo.txt"; - -КонецФункции - // Функция, выполняет включение и отключение проверки наличия обновления по расписанию. // // Параметры: @@ -540,9 +532,8 @@ Если Параметры.ИсточникОбновления <> -1 И Параметры.ИмяСтраницы = НаименованиеСтраницыДоступногоОбновления Тогда ЖурналРегистрацииКлиент.ДобавитьСообщениеДляЖурналаРегистрации(СобытиеЖурналаРегистрации(),, - НСтр("ru = 'Обнаружена новая версия конфигурации:'") + " " + - Параметры.ПараметрыФайлаПроверкиОбновления.Version); - + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Обнаружена новая версия конфигурации: %1'"), Параметры.ПараметрыФайлаПроверкиОбновления.Version)); + НастройкиОбновленияКонфигурации.ИсточникОбновления = 0; НастройкиОбновленияКонфигурации.РасписаниеПроверкиНаличияОбновления = РасписаниеПроверкиНаличияОбновления; ОбновлениеКонфигурацииВызовСервера.ЗаписатьСтруктуруНастроекПомощника(НастройкиОбновленияКонфигурации, ПараметрыПриложения["СтандартныеПодсистемы.СообщенияДляЖурналаРегистрации"]); @@ -551,7 +542,7 @@ Параметры.НуженФайлОбновления = НастройкиОбновленияКонфигурации.НуженФайлОбновления; Параметры.ФлагАвтоПереходаНаСтраницуСОбновлением = Истина; ПоказатьОповещениеПользователя(НСтр("ru = 'Доступно обновление конфигурации'"), - "e1cib/app/Обработка.ОбновлениеКонфигурации", + "e1cib/app/Обработка.ПоискИУстановкаОбновлений", НСтр("ru = 'Версия:'") + " " + Параметры.ПараметрыФайлаПроверкиОбновления.Version, БиблиотекаКартинок.Информация32); Иначе @@ -562,47 +553,9 @@ КонецПроцедуры -// Возвратить каталог файла - часть пути без имени файла. -// -// Параметры: -// ПутьКФайлу - Строка - путь к файлу. -// -// Возвращаемое значение: -// Строка - каталог файла -Функция ПолучитьКаталогФайла(Знач ПутьКФайлу) Экспорт - - ПозицияСимвола = ПолучитьНомерПоследнегоСимвола(ПутьКФайлу, "\"); - Если ПозицияСимвола > 1 Тогда - Возврат Сред(ПутьКФайлу, 1, ПозицияСимвола - 1); - Иначе - Возврат ""; - КонецЕсли; - -КонецФункции - -Функция ПолучитьНомерПоследнегоСимвола(Знач ИсходнаяСтрока, Знач СимволПоиска) - - ПозицияСимвола = СтрДлина(ИсходнаяСтрока); - Пока ПозицияСимвола >= 1 Цикл - - Если Сред(ИсходнаяСтрока, ПозицияСимвола, 1) = СимволПоиска Тогда - Возврат ПозицияСимвола; - КонецЕсли; - - ПозицияСимвола = ПозицияСимвола - 1; - КонецЦикла; - - Возврат 0; - -КонецФункции - Функция ПроверятьОбновлениеДляСледующейРедакцииПлатформы() - ПроверятьОбновление = ОбновлениеКонфигурацииКлиентПереопределяемый.ПроверятьОбновлениеДляСледующейРедакцииПлатформы(); - Если ПроверятьОбновление = Неопределено Тогда - ПроверятьОбновление = Ложь; - КонецЕсли; - + ПроверятьОбновление = Ложь; ОбновлениеКонфигурацииКлиентПереопределяемый.ПриПроверкеОбновленияДляСледующейРедакцииПлатформы(ПроверятьОбновление); Возврат ПроверятьОбновление; @@ -625,7 +578,7 @@ // Процедура ОткрытьВебСтраницу(Знач АдресСтраницы, Знач Заголовок = "") Экспорт - ОткрытьФорму("Обработка.ОбновлениеКонфигурации.Форма.Обозреватель", + ОткрытьФорму("Обработка.ПоискИУстановкаОбновлений.Форма.Обозреватель", Новый Структура("АдресСтраницы,Заголовок", АдресСтраницы, Заголовок)); КонецПроцедуры @@ -635,29 +588,6 @@ Возврат НСтр("ru = 'Обновление конфигурации'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()); КонецФункции -// Вызывается при завершении работы системы, чтобы запросить список предупреждений, -// выводимых пользователю пользователю. -// -// Параметры: -// см. ПриПолученииСпискаПредупрежденийЗавершенияРаботы. -// -Процедура ПриЗавершенииРаботыСистемы(Предупреждения) Экспорт - - Если ПараметрыПриложения["СтандартныеПодсистемы.ПредлагатьОбновлениеИнформационнойБазыПриЗавершенииСеанса"] = Истина Тогда - ПараметрыПредупреждения = СтандартныеПодсистемыКлиент.ПредупреждениеПриЗавершениеРаботы(); - ПараметрыПредупреждения.ТекстФлажка = НСтр("ru = 'Установить обновление конфигурации'"); - ПараметрыПредупреждения.Приоритет = 50; - ПараметрыПредупреждения.ВывестиОдноПредупреждение = Истина; - - ДействиеПриУстановленномФлажке = ПараметрыПредупреждения.ДействиеПриУстановленномФлажке; - ДействиеПриУстановленномФлажке.Форма = "Обработка.ОбновлениеКонфигурации.Форма.Форма"; - ДействиеПриУстановленномФлажке.ПараметрыФормы = Новый Структура("ЗавершениеРаботыСистемы, ВыполнитьОбновление", Истина, Истина); - - Предупреждения.Добавить(ПараметрыПредупреждения); - КонецЕсли; - -КонецПроцедуры - //////////////////////////////////////////////////////////////////////////////// // Обработчики условных вызовов в другие подсистемы. @@ -692,7 +622,18 @@ // Предупреждение: при выставлении своего флажка подсистема "Обновление конфигурации" очищает список // всех ранее добавленных предупреждений. - ПриЗавершенииРаботыСистемы(Предупреждения); + Если ПараметрыПриложения["СтандартныеПодсистемы.ПредлагатьОбновлениеИнформационнойБазыПриЗавершенииСеанса"] = Истина Тогда + ПараметрыПредупреждения = СтандартныеПодсистемыКлиент.ПредупреждениеПриЗавершениеРаботы(); + ПараметрыПредупреждения.ТекстФлажка = НСтр("ru = 'Установить обновление конфигурации'"); + ПараметрыПредупреждения.Приоритет = 50; + ПараметрыПредупреждения.ВывестиОдноПредупреждение = Истина; + + ДействиеПриУстановленномФлажке = ПараметрыПредупреждения.ДействиеПриУстановленномФлажке; + ДействиеПриУстановленномФлажке.Форма = ОбновлениеКонфигурацииКлиентСервер.ИмяФормыОбработкиОбновлениеКонфигурации(); + ДействиеПриУстановленномФлажке.ПараметрыФормы = Новый Структура("ЗавершениеРаботыСистемы, ВыполнитьОбновление", Истина, Истина); + + Предупреждения.Добавить(ПараметрыПредупреждения); + КонецЕсли; КонецПроцедуры @@ -714,17 +655,11 @@ // Функция ПроверитьЛегальностьСкачиванияОбновления(ПараметрыЗапроса) Экспорт - ПроверятьЛегальность = ОбновлениеКонфигурацииКлиентПереопределяемый.ИспользоватьПроверкуЛегальностиСкачиванияОбновления(); - Если ПроверятьЛегальность = Неопределено Тогда - ПроверятьЛегальность = Истина; - КонецЕсли; - + ПроверятьЛегальность = Истина; ОбновлениеКонфигурацииКлиентПереопределяемый.ПриПроверкеЛегальностиСкачиванияОбновлений(ПроверятьЛегальность); Если Не ПроверятьЛегальность Тогда - Возврат Новый Структура("ЗначениеРезультата, ТекстОшибки", Истина, ""); - КонецЕсли; Попытка diff --git a/SSL/src/CommonModules/ОбновлениеКонфигурацииКлиентПереопределяемый/Module.bsl b/SSL/src/CommonModules/ОбновлениеКонфигурацииКлиентПереопределяемый/Module.bsl index 25dbdf275..b10fde2ac 100644 --- a/SSL/src/CommonModules/ОбновлениеКонфигурацииКлиентПереопределяемый/Module.bsl +++ b/SSL/src/CommonModules/ОбновлениеКонфигурацииКлиентПереопределяемый/Module.bsl @@ -5,12 +5,6 @@ #Область ПрограммныйИнтерфейс -// Устарела. -// -Процедура ПриПереходеНаСтраницуПомощника(ПредыдущаяСтраница, СледующаяСтраница, Отказ) Экспорт - -КонецПроцедуры - // Обработчик вызывается перед завершением работы системы при обновлении конфигурации из помощника. // // Пример реализации: @@ -22,12 +16,6 @@ КонецПроцедуры -// Устарела. Следует использовать ПриПроверкеГотовностиКОбновлениюКонфигурации. -// -Функция ГотовностьКОбновлениюКонфигурации(Знач ВыдаватьСообщения) Экспорт - -КонецФункции - // Проверить, что информационную базу можно обновить. // Например, если выясняется, что обновление конфигурации не пройдет или // будет идти с проблемами, то пользователю выдается предупреждение, и @@ -48,12 +36,6 @@ КонецПроцедуры -// Устарела. Следует использовать ПриОпределенииАдресаСтраницыПолученияДоступаКСайтуОбновлений. -// -Функция АдресСтраницыИнформацииОПолученииДоступаКПользовательскомуСайту() Экспорт - -КонецФункции - // Получить адрес веб-страницы с информацией о том, как получить доступ к // пользовательскому разделу на сайте поставщика конфигурации. // @@ -64,12 +46,6 @@ КонецПроцедуры -// Устарела. Следует использовать ПриПроверкеОбновленияДляСледующейРедакцииПлатформы. -// -Функция ПроверятьОбновлениеДляСледующейРедакцииПлатформы() Экспорт - -КонецФункции - // Проверят необходимость проверки обновления для следующей редакции платформы. // Рекомендуется устанавливать значение Истина, только при следующих условиях: // - Для конфигурации используется обновление с сайта поддержки пользователей системы 1С:Предприятие. @@ -87,12 +63,6 @@ КонецПроцедуры -// Устарела. Следует использовать ПриПроверкеИспользованияПоверкиЛегальностиСкачиванияОбновлений. -// -Функция ИспользоватьПроверкуЛегальностиСкачиванияОбновления() Экспорт - -КонецФункции - // Признак необходимости использования проверки легальности скачивания обновления. // Рекомендуется устанавливать значение Истина, если конфигурация поддерживает обновление // с сайта поддержки пользователей. @@ -101,4 +71,17 @@ КонецПроцедуры +// Обработчик вызывается при скачивании файла обновления из Интернета +// +// Параметры: +// URL, ПараметрыПолучения - см. описание одноименных параметров +// в ПолучениеФайловИзИнтернетаКлиент.СкачатьФайлНаКлиенте. +// Результат - см. описание возвращаемого значения в процедуре +// ПолучениеФайловИзИнтернетаКлиент.СкачатьФайлНаКлиенте. +// СтандартнаяОбработка - Булево - Признак использования стандартного получения файла +// +Процедура ПриСкачиванииФайлаОбновления(URL, ПараметрыПолучения, Результат, СтандартнаяОбработка) Экспорт + +КонецПроцедуры + #КонецОбласти diff --git a/SSL/src/CommonModules/ОбновлениеКонфигурацииКлиентСервер/Module.bsl b/SSL/src/CommonModules/ОбновлениеКонфигурацииКлиентСервер/Module.bsl index 2de638819..9decc987f 100644 --- a/SSL/src/CommonModules/ОбновлениеКонфигурацииКлиентСервер/Module.bsl +++ b/SSL/src/CommonModules/ОбновлениеКонфигурацииКлиентСервер/Module.bsl @@ -34,7 +34,7 @@ // Возвращаемое значение: // Структура - структура настроек обновления. // -Функция НовыеНастройкиОбновленияКонфигурации() Экспорт +Функция НовыеНастройкиОбновленияКонфигурации() Результат = Новый Структура; Результат.Вставить("КодПользователяСервераОбновлений", ""); @@ -71,6 +71,7 @@ Результат.Вставить("ПортАгентаСервера", 0); Результат.Вставить("ПортКластераСерверов", 0); Результат.Вставить("ВремяПоследнейПроверкиОбновления", Дата(1, 1, 1)); + Результат.Вставить("ИменаФайловОбновления", ""); Возврат Результат; КонецФункции @@ -125,11 +126,11 @@ КонецЕсли; ДобавляемыйСимвол = "\"; - Если Найти(ПутьКаталога, "/") > 0 Тогда + Если СтрНайти(ПутьКаталога, "/") > 0 Тогда ДобавляемыйСимвол = "/"; КонецЕсли; - Если Прав(ПутьКаталога, 1) <> ДобавляемыйСимвол Тогда + Если Не СтрЗаканчиваетсяНа(ПутьКаталога, ДобавляемыйСимвол) Тогда Возврат ПутьКаталога + ДобавляемыйСимвол; Иначе Возврат ПутьКаталога; @@ -141,7 +142,7 @@ // Функция ИмяФормыОбработкиОбновлениеКонфигурации() Экспорт - Возврат "Обработка.ОбновлениеКонфигурации.Форма.Форма"; + Возврат "Обработка.ПоискИУстановкаОбновлений.Форма.Форма"; КонецФункции diff --git a/SSL/src/CommonModules/ОбновлениеКонфигурацииПереопределяемый/Module.bsl b/SSL/src/CommonModules/ОбновлениеКонфигурацииПереопределяемый/Module.bsl index 702c6215c..9aeae417e 100644 --- a/SSL/src/CommonModules/ОбновлениеКонфигурацииПереопределяемый/Module.bsl +++ b/SSL/src/CommonModules/ОбновлениеКонфигурацииПереопределяемый/Module.bsl @@ -5,12 +5,6 @@ #Область ПрограммныйИнтерфейс -// Устарела. Следует использовать ПриОпределенииКраткогоИмениКонфигурации. -// -Функция КороткоеИмяКонфигурации() Экспорт - -КонецФункции - // Определяет короткое имя (идентификатор) конфигурации. // // Параметры: @@ -22,12 +16,6 @@ КонецПроцедуры -// Устарела. Следует использовать ПриОпределенииАдресаСервераДляПроверкиНаличияОбновления. -// -Функция АдресСервераДляПроверкиНаличияОбновления() Экспорт - -КонецФункции - // Получает адрес веб-сервера поставщика конфигурации, на котором находится // информация о доступных обновлениях ("открытая" часть веб-сайта). // @@ -41,12 +29,6 @@ КонецПроцедуры -// Устарела. Следует использовать ПриОпределенииАдресаРесурсаДляПроверкиНаличияОбновления. -// -Функция АдресРесурсаДляПроверкиНаличияОбновления() Экспорт - -КонецФункции - // Получить адрес ресурса на веб-сервере для проверки наличия обновлений // (на "открытой" части веб-сайта). // @@ -57,12 +39,6 @@ КонецПроцедуры -// Устарела. Следует использовать ПриОпределенииКаталогаОбновлений. -// -Функция КаталогОбновлений() Экспорт - -КонецФункции - // Получает адрес веб-сайта с каталогом обновлений ("закрытая" часть веб-сайта). // // Параметры: diff --git a/SSL/src/CommonModules/ОбщегоНазначения/Module.bsl b/SSL/src/CommonModules/ОбщегоНазначения/Module.bsl index dc92f6393..84b82ef46 100644 --- a/SSL/src/CommonModules/ОбщегоНазначения/Module.bsl +++ b/SSL/src/CommonModules/ОбщегоНазначения/Module.bsl @@ -55,7 +55,7 @@ Если ПустаяСтрока(Реквизиты) Тогда Возврат Новый Структура; КонецЕсли; - Реквизиты = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(Реквизиты, ",", Истина); + Реквизиты = СтрРазделить(Реквизиты, ",", Ложь); КонецЕсли; СтруктураРеквизитов = Новый Структура; @@ -66,9 +66,7 @@ СтруктураРеквизитов.Вставить(СтрЗаменить(Реквизит, ".", ""), Реквизит); КонецЦикла; Иначе - ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Неверный тип второго параметра Реквизиты: %1'"), - Строка(ТипЗнч(Реквизиты))); + ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Неверный тип второго параметра Реквизиты: %1'"), Строка(ТипЗнч(Реквизиты))); КонецЕсли; ТекстПолей = ""; @@ -284,8 +282,13 @@ ВыполненоУспешно = Ложь; ДокументОбъект = ДокументСсылка.ПолучитьОбъект(); Если ДокументОбъект.ПроверитьЗаполнение() Тогда + РежимПроведения = РежимПроведенияДокумента.Неоперативный; + Если ДокументОбъект.Дата >= НачалоДня(ТекущаяДатаСеанса()) + И ДокументСсылка.Метаданные().ОперативноеПроведение = Метаданные.СвойстваОбъектов.ОперативноеПроведение.Разрешить Тогда + РежимПроведения = РежимПроведенияДокумента.Оперативный; + КонецЕсли; Попытка - ДокументОбъект.Записать(РежимЗаписиДокумента.Проведение); + ДокументОбъект.Записать(РежимЗаписиДокумента.Проведение, РежимПроведения); ВыполненоУспешно = Истина; Исключение ПредставлениеОшибки = КраткоеПредставлениеОшибки(ИнформацияОбОшибке()); @@ -383,155 +386,155 @@ // Замена ссылок происходит с транзакциями по изменяемому объекту и его связям, не по анализируемой ссылке. // // Параметры: +// ПарыЗамен - Соответствие - Пары замен. +// * Ключ - ЛюбаяСсылка - Что ищем (дубль). +// * Значение - ЛюбаяСсылка - На что заменяем (оригинал). +// Ссылки сами на себя и пустые ссылки для поиска будут проигнорированы. +// +// Параметры - Структура - Необязательный. Параметры замены. +// +// * СпособУдаления - Строка - Необязательный. Что делать с дублем после успешной замены. +// "" - По умолчанию. Не предпринимать никаких действий. +// "Пометка" - Помечать на удаление. +// "Непосредственно" - Удалять непосредственно. +// +// * УчитыватьПрикладныеПравила - Булево - Необязательный. Режим проверки параметра ПарыЗамен. +// Истина - По умолчанию. Проверять каждую пару "дубль-оригинал" (вызывается функция ВозможностьЗаменыЭлементов модуля менеджера). +// Ложь - Отключить прикладные проверки пар. +// +// * ВключатьБизнесЛогику - Булево - Необязательный. Режим записи мест использования при замене дублей на оригиналы. +// Истина - По умолчанию. Места использования дублей записываются в режиме ОбменДанными.Загрузка = Ложь. +// Ложь - Запись ведется в режиме ОбменДанными.Загрузка = Истина. +// +// * ЗаменаПарыВТранзакции - Булево - Необязательный. Определяет размер транзакции. +// Истина - По умолчанию. Транзакция охватывает все места использования одного дубля. +// Ложь - Замена каждого места использования выполняется в отдельной транзакции. +// +// * ПривилегированнаяЗапись - Булево - Необязательный. Требуется ли устанавливать привилегированный режим перед запись. +// Ложь - По умолчанию. Записывать с текущими правами. +// Истина - Записывать в привилегированном режиме. // -// ПарыЗамен - Соответствие - Ключ - искомая ссылка, Значение - ссылка для замены. Ссылки сами на себя и пустые -// ссылки для поиска будут проигнорированы. -// -// Параметры - Структура - Параметры замены. Может включать поля: -// -// * СпособУдаления - Строка, маркер способа удаления. Может принимать значения: -// "Непосредственно" - Если после замены ссылка нигде не используется, -// то она будет удалена непосредственно -// "Пометка" - Если после замены ссылка не используется, то -// она будет помечена на удаление. -// Любые другие значения отменяют необходимость удаления. -// Значение по умолчанию - пустая строка. -// -// * ВключатьБизнесЛогику - Булево, флаг необходимость включения бизнес логики при -// записи объектов. -// Значение по умолчанию - Истина. -// -// * ЗаменаПарыВТранзакции - Булево - при значении Истина транзакция охватывает все -// производимые замены для одной пары ссылок. -// Ложь - каждая замена ссылки в одном объекте выполняется в -// отдельной транзакции. -// Значение по умолчанию - Истина. -// -// * ПривилегированнаяЗапись - Булево - При значении Истина запись происходит в -// привилегированном режиме, иначе - с текущими -// правами. -// Значение по умолчанию - Ложь. -// -// Возвращаемое значение - ТаблицаЗначений - описание неуспешных замен (ошибок) с колонками: -// -// * Ссылка - ЛюбаяСсылка - Ссылка, которую заменяли. -// * ОбъектОшибки - Произвольный - Объект - причина ошибки. -// * ПредставлениеОбъектаОшибки - Строка - Строковое представление объекта ошибки. -// * ТипОшибки - Строка - Маркер типа ошибки. Возможны варианты: -// "ОшибкаБлокировки" - при обработке ссылки некоторые объекты были заблокированы -// "ДанныеИзменены" - в процессе обработки данные были изменены другим пользователем -// "ОшибкаЗаписи" - не смогли записать объект, или метод ВозможностьЗаменыЭлементов -// вернул отказ. -// "ОшибкаУдаления" - не смогли удалить объект -// "НеизвестныеДанные" - при обработке были найдены данные, которые -// не планировались к анализу, замена не реализована. -// * ТекстОшибки - Строка - Подробное описание ошибки. +// Возвращаемое значение: +// ТаблицаЗначений - Неуспешные замены (ошибки). +// * Ссылка - ЛюбаяСсылка - Ссылка, которую заменяли. +// * ОбъектОшибки - Произвольный - Объект - причина ошибки. +// * ПредставлениеОбъектаОшибки - Строка - Строковое представление объекта ошибки. +// * ТипОшибки - Строка - Тип ошибки: +// "ОшибкаБлокировки" - при обработке ссылки некоторые объекты были заблокированы. +// "ДанныеИзменены" - в процессе обработки данные были изменены другим пользователем. +// "ОшибкаЗаписи" - не смогли записать объект, или метод ВозможностьЗаменыЭлементов вернул отказ. +// "ОшибкаУдаления" - не смогли удалить объект. +// "НеизвестныеДанные" - при обработке были найдены данные, которые не планировались к анализу, замена не реализована. +// * ТекстОшибки - Строка - Подробное описание ошибки. // Функция ЗаменитьСсылки(Знач ПарыЗамен, Знач Параметры = Неопределено) Экспорт - // Умолчания - ПараметрыЗамены = Новый Структура; - ПараметрыЗамены.Вставить("УдалятьНепосредственно", Ложь); - ПараметрыЗамены.Вставить("ПомечатьНаУдаление", Ложь); - ПараметрыЗамены.Вставить("КонтрольПриЗаписи", Истина); - ПараметрыЗамены.Вставить("ПривилегированнаяЗапись", Ложь); + ТипСтрока = Новый ОписаниеТипов("Строка"); + ОшибкиЗамены = Новый ТаблицаЗначений; + ОшибкиЗамены.Колонки.Добавить("Ссылка"); + ОшибкиЗамены.Колонки.Добавить("ОбъектОшибки"); + ОшибкиЗамены.Колонки.Добавить("ПредставлениеОбъектаОшибки", ТипСтрока); + ОшибкиЗамены.Колонки.Добавить("ТипОшибки", ТипСтрока); + ОшибкиЗамены.Колонки.Добавить("ТекстОшибки", ТипСтрока); + + ОшибкиЗамены.Индексы.Добавить("Ссылка"); + ОшибкиЗамены.Индексы.Добавить("Ссылка, ОбъектОшибки, ТипОшибки"); + + ТаблицаОшибок = Новый ТаблицаЗначений; + ТаблицаОшибок.Колонки.Добавить("Дубль"); + ТаблицаОшибок.Колонки.Добавить("Оригинал"); + ТаблицаОшибок.Колонки.Добавить("МестоИспользованияПолноеИмя"); + ТаблицаОшибок.Колонки.Добавить("Кратко"); + ТаблицаОшибок.Колонки.Добавить("ИнформацияОбОшибке"); + + Результат = Новый Структура; + Результат.Вставить("ЕстьОшибки", Ложь); + Результат.Вставить("Ошибки", ОшибкиЗамены); + Результат.Вставить("ТаблицаОшибок", ТаблицаОшибок); + + // Значения по умолчанию. + ПараметрыВыполнения = Новый Структура; + ПараметрыВыполнения.Вставить("УдалятьНепосредственно", Ложь); + ПараметрыВыполнения.Вставить("ПомечатьНаУдаление", Ложь); + ПараметрыВыполнения.Вставить("ВключатьБизнесЛогику", Истина); + ПараметрыВыполнения.Вставить("ПривилегированнаяЗапись", Ложь); + ПараметрыВыполнения.Вставить("УчитыватьПрикладныеПравила", Ложь); ДлиннаяТранзакция = Истина; - Если Параметры <> Неопределено Тогда - - ОбщегоНазначенияКлиентСервер.ПроверитьПараметр( - "ОбщегоНазначения.ЗаменитьСсылки", "Параметры", Параметры, Тип("Структура")); - - ЗначениеПараметра = Неопределено; - Если Параметры.Свойство("СпособУдаления", ЗначениеПараметра) Тогда - Если ЗначениеПараметра = "Непосредственно" Тогда - ПараметрыЗамены.УдалятьНепосредственно = Истина; - ПараметрыЗамены.ПомечатьНаУдаление = Ложь; - ИначеЕсли ЗначениеПараметра = "Пометка" Тогда - ПараметрыЗамены.УдалятьНепосредственно = Ложь; - ПараметрыЗамены.ПомечатьНаУдаление = Истина; - Иначе - ТекстОшибки = НСтр("ru = 'Недопустимое значение параметра %1 в %2. - |Ожидалось: %3 или %4; передано значение: %5 (тип %6).'"); - ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ТекстОшибки, - "Параметры.СпособУдаления", - "ОбщегоНазначения.ЗаменитьСсылки", - "Непосредственно", - "Пометка", - ?(ЗначениеПараметра <> Неопределено, ЗначениеПараметра, "Неопределено"), - ТипЗнч(ЗначениеПараметра)); - ВызватьИсключение ТекстОшибки; - КонецЕсли; - КонецЕсли; - - - Если Параметры.Свойство("ВключатьБизнесЛогику", ЗначениеПараметра) Тогда - ОбщегоНазначенияКлиентСервер.ПроверитьПараметр( - "ОбщегоНазначения.ЗаменитьСсылки", "Параметры.КонтрольПриЗаписи", ЗначениеПараметра, Тип("Булево")); - ПараметрыЗамены.КонтрольПриЗаписи = ЗначениеПараметра; - КонецЕсли; - - Если Параметры.Свойство("ЗаменаПарыВТранзакции", ЗначениеПараметра) Тогда - ОбщегоНазначенияКлиентСервер.ПроверитьПараметр( - "ОбщегоНазначения.ЗаменитьСсылки", "Параметры.ЗаменаПарыВТранзакции", ЗначениеПараметра, Тип("Булево")); - ДлиннаяТранзакция = ЗначениеПараметра; - КонецЕсли; - - Если Параметры.Свойство("ПривилегированнаяЗапись", ЗначениеПараметра) Тогда - ОбщегоНазначенияКлиентСервер.ПроверитьПараметр( - "ОбщегоНазначения.ЗаменитьСсылки", "Параметры.ПривилегированнаяЗапись", ЗначениеПараметра, Тип("Булево")); - ПараметрыЗамены.ПривилегированнаяЗапись = ЗначениеПараметра; - КонецЕсли; - + // Переданные значения. + ЗначениеПараметра = ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(Параметры, "СпособУдаления"); + Если ЗначениеПараметра = "Непосредственно" Тогда + ПараметрыВыполнения.УдалятьНепосредственно = Истина; + ПараметрыВыполнения.ПомечатьНаУдаление = Ложь; + ИначеЕсли ЗначениеПараметра = "Пометка" Тогда + ПараметрыВыполнения.УдалятьНепосредственно = Ложь; + ПараметрыВыполнения.ПомечатьНаУдаление = Истина; КонецЕсли; - ТипСтрока = Новый ОписаниеТипов("Строка"); - - РезультатЗамены = Новый ТаблицаЗначений; - РезультатЗамены.Колонки.Добавить("Ссылка"); - РезультатЗамены.Колонки.Добавить("ОбъектОшибки"); - РезультатЗамены.Колонки.Добавить("ПредставлениеОбъектаОшибки", ТипСтрока); - РезультатЗамены.Колонки.Добавить("ТипОшибки", ТипСтрока); - РезультатЗамены.Колонки.Добавить("ТекстОшибки", ТипСтрока); - РезультатЗамены.Индексы.Добавить("Ссылка"); - РезультатЗамены.Индексы.Добавить("Ссылка, ОбъектОшибки, ТипОшибки"); + ЗначениеПараметра = ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(Параметры, "ВключатьБизнесЛогику"); + Если ТипЗнч(ЗначениеПараметра) = Тип("Булево") Тогда + ПараметрыВыполнения.ВключатьБизнесЛогику = ЗначениеПараметра; + КонецЕсли; + + ЗначениеПараметра = ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(Параметры, "ЗаменаПарыВТранзакции"); + Если ТипЗнч(ЗначениеПараметра) = Тип("Булево") Тогда + ДлиннаяТранзакция = ЗначениеПараметра; + КонецЕсли; + + ЗначениеПараметра = ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(Параметры, "ПривилегированнаяЗапись"); + Если ТипЗнч(ЗначениеПараметра) = Тип("Булево") Тогда + ПараметрыВыполнения.ПривилегированнаяЗапись = ЗначениеПараметра; + КонецЕсли; + + ЗначениеПараметра = ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(Параметры, "УчитыватьПрикладныеПравила"); + Если ТипЗнч(ЗначениеПараметра) = Тип("Булево") Тогда + ПараметрыВыполнения.УчитыватьПрикладныеПравила = ЗначениеПараметра; + КонецЕсли; Если ПарыЗамен.Количество() = 0 Тогда - Возврат РезультатЗамены; + Возврат Результат.Ошибки; КонецЕсли; - СписокСсылок = Новый Массив; + Дубли = Новый Массив; Для Каждого КлючЗначение Из ПарыЗамен Цикл - ТекущаяСсылка = КлючЗначение.Ключ; - ЦелеваяСсылка = КлючЗначение.Значение; - - Если ТекущаяСсылка = ЦелеваяСсылка Или ТекущаяСсылка.Пустая() Тогда - // Самого на себя и пустые ссылки не заменяем. - Продолжить; + Дубль = КлючЗначение.Ключ; + Оригинал = КлючЗначение.Значение; + Если Дубль = Оригинал Или Дубль.Пустая() Тогда + Продолжить; // Самого на себя и пустые ссылки не заменяем. + КонецЕсли; + Дубли.Добавить(Дубль); + // Пропускаем промежуточные замены, чтобы не строить граф (если A->B и B->C то вместо A->B производится замена A->C). + ОригиналОригинала = ПарыЗамен[Оригинал]; + ЕстьОригиналОригинала = (ОригиналОригинала <> Неопределено И ОригиналОригинала <> Дубль И ОригиналОригинала <> Оригинал); + Если ЕстьОригиналОригинала Тогда + Пока ЕстьОригиналОригинала Цикл + Оригинал = ОригиналОригинала; + ОригиналОригинала = ПарыЗамен[Оригинал]; + ЕстьОригиналОригинала = (ОригиналОригинала <> Неопределено И ОригиналОригинала <> Дубль И ОригиналОригинала <> Оригинал); + КонецЦикла; + ПарыЗамен.Вставить(Дубль, Оригинал); КонецЕсли; - - СписокСсылок.Добавить(ТекущаяСсылка); КонецЦикла; - Если ПараметрыЗамены.КонтрольПриЗаписи И ПодсистемаСуществует("СтандартныеПодсистемы.ПоискИУдалениеДублей") Тогда + Если ПараметрыВыполнения.УчитыватьПрикладныеПравила И ПодсистемаСуществует("СтандартныеПодсистемы.ПоискИУдалениеДублей") Тогда МодульПоискИУдалениеДублей = ОбщийМодуль("ПоискИУдалениеДублей"); Ошибки = МодульПоискИУдалениеДублей.ПроверитьВозможностьЗаменыЭлементов(ПарыЗамен, Параметры); Для Каждого КлючЗначение Из Ошибки Цикл - Что = КлючЗначение.Ключ; - НаЧто = ПарыЗамен[Что]; + Дубль = КлючЗначение.Ключ; + Оригинал = ПарыЗамен[Дубль]; ТекстОшибки = КлючЗначение.Значение; - Причина = ОписаниеОшибкиЗамены("ОшибкаЗаписи", НаЧто, ПредметСтрокой(НаЧто), ТекстОшибки); - ДобавитьРезультатЗамены(РезультатЗамены, Что, Причина); + Причина = ОписаниеОшибкиЗамены("ОшибкаЗаписи", Оригинал, ПредметСтрокой(Оригинал), ТекстОшибки); + ЗарегистрироватьОшибкуЗамены(Результат, Дубль, Причина); - Индекс = СписокСсылок.Найти(Что); + Индекс = Дубли.Найти(Дубль); Если Индекс <> Неопределено Тогда - СписокСсылок.Удалить(Индекс); // пропускаем проблемный элемент + Дубли.Удалить(Индекс); // пропускаем проблемный элемент КонецЕсли; КонецЦикла; КонецЕсли; - ТаблицаПоиска = МестаИспользования(СписокСсылок); + ТаблицаПоиска = МестаИспользования(Дубли); // Для каждой ссылки объекта будем производить замены в порядке "Константа", "Объект", "Набор". // Одновременно пустая строка в этой колонке - флаг того, что эта замена не нужна или уже была произведена. @@ -541,45 +544,37 @@ // Вспомогательные данные ТаблицаПоиска.Колонки.Добавить("ЦелеваяСсылка"); - - Конфигурация = Новый Структура; - Конфигурация.Вставить("ТипВсеСсылки", ОписаниеТипаВсеСсылки() ); - Конфигурация.Вставить("МетаКонстанты", Метаданные.Константы); - Конфигурация.Вставить("ТипКлючЗаписи", ОписаниеТипаКлючиЗаписей() ); - Конфигурация.Вставить("МетаПоследовательности", Метаданные.Последовательности); + ТаблицаПоиска.Колонки.Добавить("Обработано", Новый ОписаниеТипов("Булево")); // Определяем порядок обработки и проверяем то, что мы можем обработать. - ПроизводимыеЗамены = Новый Массив; - Для Каждого ТекущаяСсылка Из СписокСсылок Цикл - ЦелеваяСсылка = ПарыЗамен[ТекущаяСсылка]; - - РезультатРазметки = Неопределено; - РазметитьМестаИспользования(Конфигурация, ТекущаяСсылка, ЦелеваяСсылка, ТаблицаПоиска, РезультатРазметки); - - Если РезультатРазметки.ОшибкиРазметки.Количество() = 0 Тогда - ПроизводимыеЗамены.Добавить(ТекущаяСсылка); - - Иначе + Количество = Дубли.Количество(); + Для Номер = 1 По Количество Цикл + ОбратныйИндекс = Количество - Номер; + Дубль = Дубли[ОбратныйИндекс]; + РезультатРазметки = РазметитьМестаИспользования(ПараметрыВыполнения, Дубль, ПарыЗамен[Дубль], ТаблицаПоиска); + Если Не РезультатРазметки.Успех Тогда // Найдены неизвестные типы замены, не будем работать с этой ссылкой, возможно нарушение связности. + Дубли.Удалить(ОбратныйИндекс); Для Каждого Ошибка Из РезультатРазметки.ОшибкиРазметки Цикл ПредставлениеОбъектаОшибки = ПредметСтрокой(Ошибка.Объект); - ДобавитьРезультатЗамены(РезультатЗамены, ТекущаяСсылка, + ЗарегистрироватьОшибкуЗамены(Результат, Дубль, ОписаниеОшибкиЗамены("НеизвестныеДанные", Ошибка.Объект, ПредставлениеОбъектаОшибки, Ошибка.Текст)); КонецЦикла; - КонецЕсли; - КонецЦикла; + ПараметрыВыполнения.Вставить("ПарыЗамен", ПарыЗамен); + ПараметрыВыполнения.Вставить("УспешныеЗамены", Новый Соответствие); + Если ДлиннаяТранзакция Тогда - Для Каждого Ссылка Из ПроизводимыеЗамены Цикл - ЗаменитьСсылкуДлиннойТранзакцией(РезультатЗамены, Ссылка, ПараметрыЗамены, ТаблицаПоиска); + Для Каждого Дубль Из Дубли Цикл + ЗаменитьСсылкуДлиннойТранзакцией(Результат, Дубль, ПараметрыВыполнения, ТаблицаПоиска); КонецЦикла; Иначе - ЗаменитьСсылкиКороткимиТранзакциями(РезультатЗамены, ПараметрыЗамены, ПроизводимыеЗамены, ТаблицаПоиска); + ЗаменитьСсылкиКороткимиТранзакциями(Результат, ПараметрыВыполнения, Дубли, ТаблицаПоиска); КонецЕсли; - Возврат РезультатЗамены; + Возврат Результат.Ошибки; КонецФункции // Получает все места использования ссылок. @@ -609,6 +604,7 @@ МестаИспользования.Колонки.Добавить("ПредставлениеДанных", Новый ОписаниеТипов("Строка")); МестаИспользования.Колонки.Добавить("ТипСсылки"); + МестаИспользования.Колонки.Добавить("ИнформацияОМестеИспользования"); МестаИспользования.Колонки.Добавить("ВспомогательныеДанные", Новый ОписаниеТипов("Булево")); МестаИспользования.Индексы.Добавить("Ссылка"); @@ -623,7 +619,7 @@ МетаКонстанты = Метаданные.Константы; МетаДокументы = Метаданные.Документы; - ВспомогательныеМетаданные = ПолучитьОбщийСписокИсключенийПоискаСсылок(); + ИсключенияПоискаСсылок = ПолучитьОбщийСписокИсключенийПоискаСсылок(); КэшИзмерений = Новый Соответствие; @@ -633,26 +629,22 @@ Мета = Строка.Метаданные; ТипДанных = ТипЗнч(Данные); - ПутьВспомогательныхДанных = ВспомогательныеМетаданные[Мета]; + ИсключениеПоиска = ИсключенияПоискаСсылок[Мета]; - Если ПутьВспомогательныхДанных = Неопределено Тогда + Если ИсключениеПоиска = Неопределено Тогда ЭтоВспомогательныеДанные = (Ссылка = Данные); - ИначеЕсли ПутьВспомогательныхДанных = "*" Тогда + ИначеЕсли ИсключениеПоиска = "*" Тогда ЭтоВспомогательныеДанные = Истина; - ИначеЕсли ТипКлючиЗаписей.СодержитТип(ТипДанных) Тогда + Иначе ЭтоВспомогательныеДанные = Ложь; - Для Каждого СтрокаДанные Из Данные Цикл - Если Ссылка = ВычислитьЗначениеДанныхПоПути(СтрокаДанные, ПутьВспомогательныхДанных) Тогда + Для Каждого ПутьКРеквизиту Из ИсключениеПоиска Цикл + Если Ссылка = ВычислитьЗначениеДанныхПоПути(Данные, ПутьКРеквизиту) Тогда ЭтоВспомогательныеДанные = Истина; Прервать; КонецЕсли; КонецЦикла; - - Иначе - ЭтоВспомогательныеДанные = (Ссылка = ВычислитьЗначениеДанныхПоПути(Данные, ПутьВспомогательныхДанных) ); - КонецЕсли; Если МетаДокументы.Содержит(Мета) Тогда @@ -722,34 +714,22 @@ Возврат МестаИспользования; КонецФункции -// Устарела. Следует использовать ПоискИУдалениеДублей.НайтиДублиЭлемента. -// -Функция НайтиДублиЭлемента(Знач ОбластьПоиска, Знач ЭталонныйОбъект, Знач ДополнительныеПараметры) Экспорт - - Если ПодсистемаСуществует("СтандартныеПодсистемы.ПоискИУдалениеДублей") Тогда - МодульПоискИУдалениеДублей = ОбщийМодуль("ПоискИУдалениеДублей"); - Возврат МодульПоискИУдалениеДублей.НайтиДублиЭлемента(ОбластьПоиска, ЭталонныйОбъект, ДополнительныеПараметры); - КонецЕсли; - -КонецФункции - // Возвращает описание типа, включающего в себя все возможные ссылочные типы конфигурации. // Функция ОписаниеТипаВсеСсылки() Экспорт Возврат Новый ОписаниеТипов(Новый ОписаниеТипов(Новый ОписаниеТипов(Новый ОписаниеТипов(Новый ОписаниеТипов( Новый ОписаниеТипов(Новый ОписаниеТипов(Новый ОписаниеТипов(Новый ОписаниеТипов( - Справочники.ТипВсеСсылки(), - Документы.ТипВсеСсылки().Типы() - ), ПланыОбмена.ТипВсеСсылки().Типы() - ), Перечисления.ТипВсеСсылки().Типы() - ), ПланыВидовХарактеристик.ТипВсеСсылки().Типы() - ), ПланыСчетов.ТипВсеСсылки().Типы() - ), ПланыВидовРасчета.ТипВсеСсылки().Типы() - ), БизнесПроцессы.ТипВсеСсылки().Типы() - ), БизнесПроцессы.ТипВсеСсылкиТочекМаршрутаБизнесПроцессов().Типы() - ), Задачи.ТипВсеСсылки().Типы() - ); + Справочники.ТипВсеСсылки(), + Документы.ТипВсеСсылки().Типы()), + ПланыОбмена.ТипВсеСсылки().Типы()), + Перечисления.ТипВсеСсылки().Типы()), + ПланыВидовХарактеристик.ТипВсеСсылки().Типы()), + ПланыСчетов.ТипВсеСсылки().Типы()), + ПланыВидовРасчета.ТипВсеСсылки().Типы()), + БизнесПроцессы.ТипВсеСсылки().Типы()), + БизнесПроцессы.ТипВсеСсылкиТочекМаршрутаБизнесПроцессов().Типы()), + Задачи.ТипВсеСсылки().Типы()); КонецФункции @@ -1089,13 +1069,12 @@ ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ТекстИсключения, ТипЗнч(КоллекцияСтрок1)); КонецЕсли; Иначе - СравниваемыеКолонки = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(ИменаКолонок); + СравниваемыеКолонки = СтрРазделить(ИменаКолонок, ","); КонецЕсли; // Вычитаем исключаемые поля - СравниваемыеКолонки = ОбщегоНазначенияКлиентСервер.СократитьМассив(СравниваемыеКолонки, - СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(ИсключаяКолонки)); - + СравниваемыеКолонки = ОбщегоНазначенияКлиентСервер.СократитьМассив(СравниваемыеКолонки, СтрРазделить(ИсключаяКолонки, ",")); + Если УчитыватьПоследовательностьСтрок Тогда // Параллельный обход обеих коллекций. @@ -1501,14 +1480,6 @@ //////////////////////////////////////////////////////////////////////////////// // Процедуры и функции для работы с внешним соединением. -// Устарела. Следует использовать ОбщегоНазначенияКлиентСервер.ИмяCOMСоединителя. -// -Функция ИмяCOMСоединителя() Экспорт - - Возврат ОбщегоНазначенияКлиентСервер.ИмяCOMСоединителя(); - -КонецФункции - // Возвращает CLSID COM-класса для работы с 1С:Предприятием 8 через COM-соединение. // // Параметры: @@ -1520,33 +1491,14 @@ Функция ИдентификаторCOMСоединителя(Знач ИмяCOMСоединителя) Экспорт Если ИмяCOMСоединителя = "v83.COMConnector" Тогда - Возврат "181E893D-73A4-4722-B61D-D604B3D67D47"; - КонецЕсли; - ТекстИсключения = Нстр("ru = 'На задан CLSID для класса %1'"); - ТекстИсключения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ТекстИсключения, ИмяCOMСоединителя); + ТекстИсключения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'На задан CLSID для класса %1'"), ИмяCOMСоединителя); ВызватьИсключение ТекстИсключения; КонецФункции -// Устарела. Следует использовать ОбщегоНазначенияКлиентСервер.УстановитьВнешнееСоединение. -// -Функция УстановитьВнешнееСоединение(Параметры, СтрокаСообщенияОбОшибке = "", ОшибкаПодключенияКомпоненты = Ложь) Экспорт - - Возврат ОбщегоНазначенияКлиентСервер.УстановитьВнешнееСоединение(Параметры, СтрокаСообщенияОбОшибке, ОшибкаПодключенияКомпоненты); - -КонецФункции - -// Устарела. Следует использовать ОбщегоНазначенияКлиентСервер.УстановитьВнешнееСоединениеСБазой. -// -Функция УстановитьВнешнееСоединениеСБазой(Параметры) Экспорт - - Возврат ОбщегоНазначенияКлиентСервер.УстановитьВнешнееСоединениеСБазой(Параметры); - -КонецФункции - //////////////////////////////////////////////////////////////////////////////// // Вспомогательные процедуры и функции. @@ -1565,7 +1517,7 @@ Если ПустаяСтрока(СтрокаСоединенияИнформационнойБазы) Тогда СтрокаСоединенияИнформационнойБазы = СтрокаСоединенияИнформационнойБазы(); КонецЕсли; - Возврат Найти(Врег(СтрокаСоединенияИнформационнойБазы), "FILE=") = 1; + Возврат СтрНайти(Врег(СтрокаСоединенияИнформационнойБазы), "FILE=") = 1; КонецФункции @@ -1577,8 +1529,8 @@ // Процедура ОчиститьПараметрыСеанса(ПараметрыДляОчистки = "", Исключения = "") Экспорт - МассивИсключений = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(Исключения); - МассивПараметровДляОчистки = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(ПараметрыДляОчистки); + МассивИсключений = СтрРазделить(Исключения, ","); + МассивПараметровДляОчистки = СтрРазделить(ПараметрыДляОчистки, ",", Ложь); Если МассивПараметровДляОчистки.Количество() = 0 Тогда Для Каждого ПараметрСеанса Из Метаданные.ПараметрыСеанса Цикл @@ -1593,6 +1545,11 @@ МассивПараметровДляОчистки.Удалить(Индекс); КонецЕсли; + Индекс = МассивПараметровДляОчистки.Найти("УстановленныеРасширения"); + Если Индекс <> Неопределено Тогда + МассивПараметровДляОчистки.Удалить(Индекс); + КонецЕсли; + ПараметрыСеанса.Очистить(МассивПараметровДляОчистки); КонецПроцедуры @@ -1609,28 +1566,16 @@ Результат = ""; - ОбработчикиСобытия = ОбработчикиСлужебногоСобытия( - "СтандартныеПодсистемы.БазоваяФункциональность\ПриОпределенииПредставленияПредмета"); - - Для каждого Обработчик Из ОбработчикиСобытия Цикл - Обработчик.Модуль.ПриОпределенииПредставленияПредмета(СсылкаНаПредмет, Результат); - КонецЦикла; - - ОбщегоНазначенияПереопределяемый.УстановитьПредставлениеПредмета(СсылкаНаПредмет, Результат); - - Если ПустаяСтрока(Результат) Тогда - Если СсылкаНаПредмет = Неопределено Или СсылкаНаПредмет.Пустая() Тогда - Результат = НСтр("ru = 'не задан'"); - ИначеЕсли Метаданные.Документы.Содержит(СсылкаНаПредмет.Метаданные()) Тогда - Результат = Строка(СсылкаНаПредмет); - Иначе - ПредставлениеОбъекта = СсылкаНаПредмет.Метаданные().ПредставлениеОбъекта; - Если ПустаяСтрока(ПредставлениеОбъекта) Тогда - ПредставлениеОбъекта = СсылкаНаПредмет.Метаданные().Представление(); - КонецЕсли; - Результат = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - "%1 (%2)", Строка(СсылкаНаПредмет), ПредставлениеОбъекта); + Если СсылкаНаПредмет = Неопределено Или СсылкаНаПредмет.Пустая() Тогда + Результат = НСтр("ru = 'не задан'"); + ИначеЕсли Метаданные.Документы.Содержит(СсылкаНаПредмет.Метаданные()) Тогда + Результат = Строка(СсылкаНаПредмет); + Иначе + ПредставлениеОбъекта = СсылкаНаПредмет.Метаданные().ПредставлениеОбъекта; + Если ПустаяСтрока(ПредставлениеОбъекта) Тогда + ПредставлениеОбъекта = СсылкаНаПредмет.Метаданные().Представление(); КонецЕсли; + Результат = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку("%1 (%2)", Строка(СсылкаНаПредмет), ПредставлениеОбъекта); КонецЕсли; Возврат Результат; @@ -1638,27 +1583,29 @@ КонецФункции // Формирует соответствие для удаления объектов. +// +// Возвращаемое значение: +// Соответствие - Исключения поиска ссылок в разрезе объектов метаданных +// * Ключ - ОбъектМетаданных - Объект метаданных, для которого применяются исключения. +// * Значение - Строка, Массив - описание исключенных реквизитов. +// - "*" - Исключены все реквизиты объекта метаданных. +// - Массив из Строка - Относительные имена исключенных реквизитов. +// Функция ПолучитьОбщийСписокИсключенийПоискаСсылок() Экспорт - - ИсключенияПоискаСсылок = Новый Соответствие; - - МассивИсключений = Новый Массив; + МассивИсключенийСобытия = Новый Массив; ОбработчикиСобытия = ОбработчикиСлужебногоСобытия( "СтандартныеПодсистемы.БазоваяФункциональность\ПриДобавленииИсключенийПоискаСсылок"); Для Каждого Обработчик Из ОбработчикиСобытия Цикл - Обработчик.Модуль.ПриДобавленииИсключенийПоискаСсылок(МассивИсключений); + Обработчик.Модуль.ПриДобавленииИсключенийПоискаСсылок(МассивИсключенийСобытия); КонецЦикла; - ДобавитьИсключенияПоискаСсылок(ИсключенияПоискаСсылок, МассивИсключений); - МассивИсключений = ОбщегоНазначенияПереопределяемый.ПолучитьИсключенияПоискаСсылок(); - ДобавитьИсключенияПоискаСсылок(ИсключенияПоискаСсылок, МассивИсключений); - - МассивИсключений = Новый Массив; - ОбщегоНазначенияПереопределяемый.ПриДобавленииИсключенийПоискаСсылок(МассивИсключений); - ДобавитьИсключенияПоискаСсылок(ИсключенияПоискаСсылок, МассивИсключений); - - Возврат ИсключенияПоискаСсылок; + МассивИсключенийПереопределения = Новый Массив; + ОбщегоНазначенияПереопределяемый.ПриДобавленииИсключенийПоискаСсылок(МассивИсключенийПереопределения); + Результат = Новый Соответствие; + ДобавитьИсключенияПоискаСсылок(Результат, МассивИсключенийСобытия); + ДобавитьИсключенияПоискаСсылок(Результат, МассивИсключенийПереопределения); + Возврат Результат; КонецФункции // Возвращает значение в виде XML-строки. @@ -1710,24 +1657,7 @@ // Функция ОбъектXDTOВСтрокуXML(Знач ОбъектXDTO, Знач Фабрика = Неопределено) Экспорт - Если ОбщегоНазначенияКлиентСервер.РежимОтладки() Тогда - ОбъектXDTO.Проверить(); - Иначе - ИнформацияОбОшибке = Неопределено; - Попытка - ОбъектXDTO.Проверить(); - Исключение - ИнформацияОбОшибке = ИнформацияОбОшибке(); - КонецПопытки; - Если ИнформацияОбОшибке <> Неопределено Тогда - ЗаписьЖурналаРегистрации( - НСтр("ru = 'Стандартные подсистемы'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), - УровеньЖурналаРегистрации.Ошибка, - , - , - ПодробноеПредставлениеОшибки(ИнформацияОбОшибке)); - КонецЕсли; - КонецЕсли; + ОбъектXDTO.Проверить(); Если Фабрика = Неопределено Тогда Фабрика = ФабрикаXDTO; @@ -1940,26 +1870,22 @@ // подтверждение при завершении работы программы не // будет запрашиваться, если явно не разрешить в // персональных настройках программы. -// * ОтключитьСправочникИдентификаторыОбъектовМетаданных - Булево - отключает заполнение справочника. -// ИдентификаторыОбъектовМетаданных, процедуры выгрузки и загрузки элементов справочника в узлах РИБ. -// Для частичного встраивании отдельных функций библиотеки в конфигурации без постановки на поддержку. +// * ОтключитьИдентификаторыОбъектовМетаданных - Булево - отключает заполнение справочников ИдентификаторыОбъектовМетаданных +// и ИдентификаторыОбъектовРасширений, процедуру выгрузки и загрузки в узлах РИБ. +// Для частичного встраивания отдельных функций библиотеки в конфигурации без постановки на поддержку. // Функция ОбщиеПараметрыБазовойФункциональности() Экспорт ОбщиеПараметры = Новый Структура; ОбщиеПараметры.Вставить("ИмяФормыПерсональныхНастроек", ""); - ОбщиеПараметры.Вставить("МинимальноНеобходимаяВерсияПлатформы", "8.3.4.365"); + ОбщиеПараметры.Вставить("МинимальноНеобходимаяВерсияПлатформы", "8.3.6.2041"); ОбщиеПараметры.Вставить("РаботаВПрограммеЗапрещена", Ложь); // Блокировать запуск, если версия ниже минимальной. ОбщиеПараметры.Вставить("ЗапрашиватьПодтверждениеПриЗавершенииПрограммы", Истина); - ОбщиеПараметры.Вставить("ОтключитьСправочникИдентификаторыОбъектовМетаданных", Ложь); + ОбщиеПараметры.Вставить("ОтключитьИдентификаторыОбъектовМетаданных", Ложь); ОбщиеПараметры.Вставить("РекомендуемыйОбъемОперативнойПамяти", 2); ОбщегоНазначенияПереопределяемый.ПриОпределенииОбщихПараметровБазовойФункциональности(ОбщиеПараметры); - // Для обратной совместимости. - ОбщегоНазначенияПереопределяемый.ИмяФормыПерсональныхНастроек(ОбщиеПараметры.ИмяФормыПерсональныхНастроек); - ОбщегоНазначенияПереопределяемый.ПолучитьМинимальноНеобходимуюВерсиюПлатформы(ОбщиеПараметры); - Возврат ОбщиеПараметры; КонецФункции @@ -2052,8 +1978,17 @@ // Например, проверяет возможность выполнения обработчика регламентного задания. // Если администратор не заблокировал выполнение регламентных заданий до // окончания обновления ИБ, тогда требуется прекратить выполнение обработчика. -// -Процедура ПриНачалеВыполненияРегламентногоЗадания() Экспорт +// +// Параметры: +// РегламентноеЗадание - ОбъектМетаданных: РегламентноеЗадание - регламентное задание, +// из которого был вызван данный метод. Необходимо передавать для проверки доступности +// по функциональным опциям. +// +Процедура ПриНачалеВыполненияРегламентногоЗадания(РегламентноеЗадание = Неопределено) Экспорт + + УстановитьПривилегированныйРежим(Истина); + Справочники.ВерсииРасширений.ЗарегистрироватьИспользованиеВерсииРасширений(); + УстановитьПривилегированныйРежим(Ложь); Если СтандартныеПодсистемыСервер.НеобходимоОбновлениеПараметровРаботыПрограммы() Тогда ВызватьИсключение @@ -2072,6 +2007,18 @@ |Рекомендуется запрещать выполнение регламентных заданий на время восстановления.'"); КонецЕсли; + Если РегламентноеЗадание <> Неопределено + И ПодсистемаСуществует("СтандартныеПодсистемы.РегламентныеЗадания") Тогда + МодульРегламентныеЗаданияСлужебный = ОбщийМодуль("РегламентныеЗаданияСлужебный"); + Доступно = МодульРегламентныеЗаданияСлужебный.РегламентноеЗаданиеДоступноПоФункциональнымОпциям(РегламентноеЗадание); + Если Не Доступно Тогда + ВызватьИсключение + НСтр("ru = 'Регламентное задание недоступно по функциональным опциям + |или не поддерживает работу в текущем режиме работы программы. + |Выполнение прервано.'"); + КонецЕсли; + КонецЕсли; + КонецПроцедуры // Возвращает редакцию конфигурации. @@ -2086,11 +2033,11 @@ Результат = ""; ВерсияКонфигурации = Метаданные.Версия; - Позиция = Найти(ВерсияКонфигурации, "."); + Позиция = СтрНайти(ВерсияКонфигурации, "."); Если Позиция > 0 Тогда Результат = Лев(ВерсияКонфигурации, Позиция); ВерсияКонфигурации = Сред(ВерсияКонфигурации, Позиция + 1); - Позиция = Найти(ВерсияКонфигурации, "."); + Позиция = СтрНайти(ВерсияКонфигурации, "."); Если Позиция > 0 Тогда Результат = Результат + Лев(ВерсияКонфигурации, Позиция - 1); Иначе @@ -2129,19 +2076,9 @@ ИначеЕсли ВеличинаИнтервалаВДнях > 31 Тогда ОписаниеИнтервала = НСтр("ru = 'более месяца'"); ИначеЕсли ВеличинаИнтервалаВДнях >= 1 Тогда - ПрописьЧисла = ЧислоПрописью( - ВеличинаИнтервалаВДнях, - "Л = ru_RU", - НСтр("ru = ',,,,,,,,0'")); - ПрописьЧислаИПредмета = ЧислоПрописью( - ВеличинаИнтервалаВДнях, - "Л = ru_RU", - НСтр("ru = 'день,дня,дней,,,,,,0'")); - - ОписаниеИнтервала = СтрЗаменить( - ПрописьЧислаИПредмета, - ПрописьЧисла, - Формат(ВеличинаИнтервалаВДнях, "ЧДЦ=0") + " "); + ОписаниеИнтервала = Формат(ВеличинаИнтервалаВДнях, "ЧДЦ=0") + " " + + ПользователиСлужебныйКлиентСервер.ПредметЦелогоЧисла(ВеличинаИнтервалаВДнях, + "Л = ru_RU", НСтр("ru = 'день,дня,дней,,,,,,0'")); Иначе ОписаниеИнтервала = НСтр("ru = 'менее одного дня'"); КонецЕсли; @@ -2177,7 +2114,7 @@ Результат = ""; - МассивСтрок = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(ФИО, " "); + МассивСтрок = СтрРазделить(ФИО, " ", Ложь); // Выделим первые 3 слова, так как компонента не умеет склонять фразу большую 3х символов. НомерНесклоняемогоСимвола = 4; @@ -2248,6 +2185,8 @@ КонецПроцедуры +// Устарела. Следует использовать ОбщегоНазначенияКлиентСервер.КартинкаКомментария. +// // Получает картинку для вывода на странице с комментарием в зависимости // от наличия текста в комментарии. // @@ -2258,15 +2197,7 @@ // Картинка - Картинка, которая должна отображаться на странице с комментарием. // Функция ПолучитьКартинкуКомментария(Комментарий) Экспорт - - Если НЕ ПустаяСтрока(Комментарий) Тогда - Картинка = БиблиотекаКартинок.Комментарий; - Иначе - Картинка = Новый Картинка; - КонецЕсли; - - Возврат Картинка; - + Возврат ОбщегоНазначенияКлиентСервер.КартинкаКомментария(Комментарий); КонецФункции //////////////////////////////////////////////////////////////////////////////// @@ -2292,7 +2223,7 @@ // Возвращаемое значение: // ДеревоЗначений - дерево описания метаданных конфигурации. // -Функция ПолучитьДеревоМетаданныхКонфигурации(Отбор = Неопределено) Экспорт +Функция ДеревоМетаданныхКонфигурации(Отбор = Неопределено) Экспорт ИспользоватьОтбор = (Отбор <> Неопределено); @@ -2307,7 +2238,7 @@ НоваяСтрокаКоллекцииОбъектовМетаданных("Документы", НСтр("ru = 'Документы'"), БиблиотекаКартинок.Документ, БиблиотекаКартинок.ДокументОбъект, КоллекцииОбъектовМетаданных); НоваяСтрокаКоллекцииОбъектовМетаданных("ПланыВидовХарактеристик", НСтр("ru = 'Планы видов характеристик'"), БиблиотекаКартинок.ПланВидовХарактеристик, БиблиотекаКартинок.ПланВидовХарактеристикОбъект, КоллекцииОбъектовМетаданных); НоваяСтрокаКоллекцииОбъектовМетаданных("ПланыСчетов", НСтр("ru = 'Планы счетов'"), БиблиотекаКартинок.ПланСчетов, БиблиотекаКартинок.ПланСчетовОбъект, КоллекцииОбъектовМетаданных); - НоваяСтрокаКоллекцииОбъектовМетаданных("ПланыВидовРасчета", НСтр("ru = 'Планы видов характеристик'"), БиблиотекаКартинок.ПланВидовХарактеристик, БиблиотекаКартинок.ПланВидовХарактеристикОбъект, КоллекцииОбъектовМетаданных); + НоваяСтрокаКоллекцииОбъектовМетаданных("ПланыВидовРасчета", НСтр("ru = 'Планы видов расчета'"), БиблиотекаКартинок.ПланВидовРасчета, БиблиотекаКартинок.ПланВидовРасчетаОбъект, КоллекцииОбъектовМетаданных); НоваяСтрокаКоллекцииОбъектовМетаданных("РегистрыСведений", НСтр("ru = 'Регистры сведений'"), БиблиотекаКартинок.РегистрСведений, БиблиотекаКартинок.РегистрСведений, КоллекцииОбъектовМетаданных); НоваяСтрокаКоллекцииОбъектовМетаданных("РегистрыНакопления", НСтр("ru = 'Регистры накопления'"), БиблиотекаКартинок.РегистрНакопления, БиблиотекаКартинок.РегистрНакопления, КоллекцииОбъектовМетаданных); НоваяСтрокаКоллекцииОбъектовМетаданных("РегистрыБухгалтерии", НСтр("ru = 'Регистры бухгалтерии'"), БиблиотекаКартинок.РегистрБухгалтерии, БиблиотекаКартинок.РегистрБухгалтерии, КоллекцииОбъектовМетаданных); @@ -2397,12 +2328,12 @@ КонецЕсли; // Прибавить к имени сервера имя пути информационной базы. - ПозицияПоиска = Найти(Врег(СтрокаСоединенияСБД), "SRVR="); + ПозицияПоиска = СтрНайти(Врег(СтрокаСоединенияСБД), "SRVR="); Если ПозицияПоиска <> 1 Тогда Возврат Неопределено; КонецЕсли; - ПозицияТочкиСЗапятой = Найти(СтрокаСоединенияСБД, ";"); + ПозицияТочкиСЗапятой = СтрНайти(СтрокаСоединенияСБД, ";"); НачальнаяПозицияКопирования = 6 + 1; КонечнаяПозицияКопирования = ПозицияТочкиСЗапятой - 2; @@ -2411,13 +2342,13 @@ СтрокаСоединенияСБД = Сред(СтрокаСоединенияСБД, ПозицияТочкиСЗапятой + 1); // Позиция имени сервера - ПозицияПоиска = Найти(Врег(СтрокаСоединенияСБД), "REF="); + ПозицияПоиска = СтрНайти(Врег(СтрокаСоединенияСБД), "REF="); Если ПозицияПоиска <> 1 Тогда Возврат Неопределено; КонецЕсли; НачальнаяПозицияКопирования = 6; - ПозицияТочкиСЗапятой = Найти(СтрокаСоединенияСБД, ";"); + ПозицияТочкиСЗапятой = СтрНайти(СтрокаСоединенияСБД, ";"); КонечнаяПозицияКопирования = ПозицияТочкиСЗапятой - 2; ИмяИБНаСервере = Сред(СтрокаСоединенияСБД, НачальнаяПозицияКопирования, КонечнаяПозицияКопирования - НачальнаяПозицияКопирования + 1); @@ -2534,7 +2465,7 @@ Функция МенеджерОбъектаПоПолномуИмени(ПолноеИмя) Экспорт Перем КлассОМ, ИмяОМ, Менеджер; - ЧастиИмени = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(ПолноеИмя, "."); + ЧастиИмени = СтрРазделить(ПолноеИмя, "."); Если ЧастиИмени.Количество() >= 2 Тогда КлассОМ = ЧастиИмени[0]; @@ -2619,8 +2550,7 @@ КонецПопытки; КонецЕсли; - ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Неизвестный тип объекта метаданных ""%1""'"), ПолноеИмя); + ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Неизвестный тип объекта метаданных ""%1""'"), ПолноеИмя); КонецФункции @@ -2680,7 +2610,7 @@ // ОтчетОбъект, ОбработкаОбъект. // Функция ОбъектПоПолномуИмени(ПолноеИмя) Экспорт - МассивСтрок = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(ПолноеИмя, "."); + МассивСтрок = СтрРазделить(ПолноеИмя, "."); Если МассивСтрок.Количество() >= 2 Тогда Вид = ВРег(МассивСтрок[0]); @@ -2787,8 +2717,7 @@ Возврат "Перечисление"; Иначе - ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru='Неверный тип значения параметра (%1)'"), Строка(Тип)); + ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru='Неверный тип значения параметра (%1)'"), Строка(Тип)); КонецЕсли; @@ -2925,125 +2854,48 @@ // - Строка - полное имя объекта метаданных, которое можно успешно использовать // в функции Метаданные.НайтиПоПолномуИмени(). // Возвращаемое значение: -// СправочникСсылка.ИдентификаторыОбъектовМетаданных. +// СправочникСсылка.ИдентификаторыОбъектовМетаданных, СправочникСсылка.ИдентификаторыОбъектовРасширений. // Функция ИдентификаторОбъектаМетаданных(ОписаниеОбъектаМетаданных) Экспорт - ТипОписанияОбъектаМетаданных = ТипЗнч(ОписаниеОбъектаМетаданных); - Если ТипОписанияОбъектаМетаданных = Тип("Тип") Тогда - - ОбъектМетаданных = Метаданные.НайтиПоТипу(ОписаниеОбъектаМетаданных); - Если ОбъектМетаданных = Неопределено Тогда - ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Ошибка при выполнении функции ОбщегоНазначения.ИдентификаторОбъектаМетаданных(). - | - |Объект метаданных не найден по типу: - |""%1"".'"), - ОписаниеОбъектаМетаданных); - Иначе - ПолноеИмяОбъектаМетаданных = ОбъектМетаданных.ПолноеИмя(); - КонецЕсли; - - ИначеЕсли ТипОписанияОбъектаМетаданных = Тип("Строка") Тогда - ПолноеИмяОбъектаМетаданных = ОписаниеОбъектаМетаданных; - Иначе - ПолноеИмяОбъектаМетаданных = ОписаниеОбъектаМетаданных.ПолноеИмя(); - КонецЕсли; - - Возврат СтандартныеПодсистемыПовтИсп.ИдентификаторОбъектаМетаданных(ПолноеИмяОбъектаМетаданных); + Возврат Справочники.ИдентификаторыОбъектовМетаданных.ИдентификаторОбъектаМетаданных(ОписаниеОбъектаМетаданных); КонецФункции // Возвращает объект метаданных по переданному идентификатору. // // Параметры: -// Идентификатор - СправочникСсылка.ИдентификаторыОбъектовМетаданных - идентификатор объекта метаданных. +// Идентификатор - СправочникСсылка.ИдентификаторыОбъектовМетаданных, +// СправочникСсылка.ИдентификаторыОбъектовРасширений - идентификатор +// объекта метаданных конфигурации или расширения. // // Возвращаемое значение: -// ОбъектМетаданных. +// ОбъектМетаданных - для типа СправочникСсылка.ИдентификаторыОбъектовМетаданных. +// ОбъектМетаданных, Неопределено - для типа СправочникСсылка.ИдентификаторыОбъектовРасширений. +// Если расширение не подключено, тогда объект метаданных невозможно вернуть и возвращается Неопределено. +// Неопределено означает, что в справочнике ИдентификаторыОбъектовРасширений найден действующий +// идентификатор, но объекта метаданных, который ему соответствует, найти не удалось. // Функция ОбъектМетаданныхПоИдентификатору(Идентификатор) Экспорт - СтандартныеПодсистемыПовтИсп.СправочникИдентификаторыОбъектовМетаданныхПроверкаИспользования(Истина); + Возврат Справочники.ИдентификаторыОбъектовМетаданных.ОбъектМетаданныхПоИдентификатору(Идентификатор); - УстановитьПривилегированныйРежим(Истина); +КонецФункции + +// Возвращает Истина, если объект метаданных, которому соответствует +// идентификатор объектов расширений существует в справочнике и +// не помечен на удаление, но отсутствует в кэше метаданных расширений. +// +// Параметры: +// Идентификатор - СправочникСсылка.ИдентификаторыОбъектовРасширений - идентификатор +// объекта метаданных расширения. +// +// Возвращаемое значение: +// Булево. +// +Функция ОбъектРасширенияОтключен(Идентификатор) Экспорт - Запрос = Новый Запрос; - Запрос.УстановитьПараметр("Ссылка", Идентификатор); - Запрос.Текст = - "ВЫБРАТЬ - | Идентификаторы.Ссылка КАК Ссылка, - | Идентификаторы.КлючОбъектаМетаданных, - | Идентификаторы.ПолноеИмя, - | Идентификаторы.ПометкаУдаления - |ИЗ - | Справочник.ИдентификаторыОбъектовМетаданных КАК Идентификаторы - |ГДЕ - | Идентификаторы.Ссылка = &Ссылка"; - - Выгрузка = Запрос.Выполнить().Выгрузить(); - - Если Выгрузка.Количество() = 0 Тогда - ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Ошибка при выполнении функции ОбщегоНазначения.ОбъектМетаданныхПоИдентификатору(). - | - |Идентификатор ""%1"" - |не найден в справочнике ""Идентификаторы объектов метаданных"".'") - + СтандартныеПодсистемыСервер.УточнениеОшибкиПараметровРаботыПрограммыДляРазработчика(), - Строка(Идентификатор)); - КонецЕсли; - - // Проверка соответствия ключа объекта метаданных полному имени объекта метаданных. - РезультатПроверки = Справочники.ИдентификаторыОбъектовМетаданных.КлючОбъектаМетаданныхСоответствуетПолномуИмени(Выгрузка[0]); - Если РезультатПроверки.НеСоответствует Тогда - Если РезультатПроверки.ОбъектМетаданных = Неопределено Тогда - Если РезультатПроверки.КлючОбъектаМетаданных = Неопределено Тогда - ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Ошибка при выполнении функции ОбщегоНазначения.ОбъектМетаданныхПоИдентификатору(). - | - |Идентификатору ""%1"" - |найденому в справочнике ""Идентификаторы объектов метаданных"", - |соответствует несуществующий объект метаданных - |""%2"".'") - + СтандартныеПодсистемыСервер.УточнениеОшибкиПараметровРаботыПрограммыДляРазработчика(), - Строка(Идентификатор), - Выгрузка[0].ПолноеИмя); - Иначе - ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Ошибка при выполнении функции ОбщегоНазначения.ОбъектМетаданныхПоИдентификатору(). - | - |Идентификатору ""%1"" - |найденому в справочнике ""Идентификаторы объектов метаданных"", - |соответствует удаленный объект метаданных.'") - + СтандартныеПодсистемыСервер.УточнениеОшибкиПараметровРаботыПрограммыДляРазработчика(), - Строка(Идентификатор)); - КонецЕсли; - Иначе - ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Ошибка при выполнении функции ОбщегоНазначения.ИдентификаторОбъектаМетаданных(). - | - |Идентификатору ""%1"" - |найденому в справочнике ""Идентификаторы объектов метаданных"", - |соответствует объект метаданных ""%2"", - |полное имя которого отличается от заданного в идентификаторе.'") - + СтандартныеПодсистемыСервер.УточнениеОшибкиПараметровРаботыПрограммыДляРазработчика(), - Строка(Идентификатор), - РезультатПроверки.ОбъектМетаданных.ПолноеИмя()); - КонецЕсли; - КонецЕсли; - - Если Выгрузка[0].ПометкаУдаления Тогда - ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Ошибка при выполнении функции ОбщегоНазначения.ОбъектМетаданныхПоИдентификатору(). - | - |Идентификатор ""%1"" - |найден в справочнике ""Идентификаторы объектов метаданных"", - |но значение реквизита ""Пометка удаления"" установлено Истина.'") - + СтандартныеПодсистемыСервер.УточнениеОшибкиПараметровРаботыПрограммыДляРазработчика(), - Строка(Идентификатор)); - КонецЕсли; - - Возврат РезультатПроверки.ОбъектМетаданных; + Возврат Справочники.ИдентификаторыОбъектовРасширений.ОбъектРасширенияОтключен(Идентификатор); КонецФункции @@ -3060,84 +2912,8 @@ // Процедура ДобавитьПереименование(Итог, ВерсияИБ, СтароеПолноеИмя, НовоеПолноеИмя, ИдентификаторБиблиотеки = "") Экспорт - СтандартныеПодсистемыПовтИсп.СправочникИдентификаторыОбъектовМетаданныхПроверкаИспользования(); - - СтароеИмяКоллекции = ВРег(ИмяКоллекции(СтароеПолноеИмя)); - НовоеИмяКоллекции = ВРег(ИмяКоллекции(НовоеПолноеИмя)); - - ЗаголовокОшибки = - НСтр("ru = 'Ошибка в процедуре ПриДобавленииПереименованийОбъектовМетаданных общего модуля ОбщегоНазначенияПереопределяемый.'"); - - Если СтароеИмяКоллекции <> НовоеИмяКоллекции Тогда - ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - ЗаголовокОшибки + Символы.ПС + Символы.ПС - + НСтр("ru = 'Не совпадают имена типов переименованного объекта метаданных. - |Прежний тип: ""%1"", - |новый тип: ""%2"".'"), - СтароеПолноеИмя, - НовоеПолноеИмя); - КонецЕсли; - - Если Итог.КоллекцииБезКлюча[СтароеИмяКоллекции] = Неопределено Тогда - - СписокДопустимыхТипов = ""; - Для каждого КлючИЗначение Из Итог.КоллекцииБезКлюча Цикл - СписокДопустимыхТипов = СписокДопустимыхТипов + КлючИЗначение.Значение + "," + Символы.ПС; - КонецЦикла; - СписокДопустимыхТипов = СокрП(СписокДопустимыхТипов); - СписокДопустимыхТипов = ?(ЗначениеЗаполнено(СписокДопустимыхТипов), - Лев(СписокДопустимыхТипов, СтрДлина(СписокДопустимыхТипов) - 1), ""); - - ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - ЗаголовокОшибки + Символы.ПС + Символы.ПС - + НСтр("ru = 'Для типа объекта метаданных ""%1"" не требуется описывать переименование, - |так как сведения об объектах метаданных этого типа обновляются автоматически. - | - |Описывать переименования требуется только для следующих типов: - |%2.'"), - СтароеПолноеИмя, - НовоеПолноеИмя, - СписокДопустимыхТипов); - КонецЕсли; - - Если ЗначениеЗаполнено(ИдентификаторБиблиотеки) Тогда - Библиотека = ВРег(ИдентификаторБиблиотеки) <> ВРег(Метаданные.Имя); - Иначе - ИдентификаторБиблиотеки = Метаданные.Имя; - Библиотека = Ложь; - КонецЕсли; - - ПорядокБиблиотеки = Итог.ПорядокБиблиотек[ИдентификаторБиблиотеки]; - Если ПорядокБиблиотеки = Неопределено Тогда - ПорядокБиблиотеки = Итог.ПорядокБиблиотек.Количество(); - Итог.ПорядокБиблиотек.Вставить(ИдентификаторБиблиотеки, ПорядокБиблиотеки); - КонецЕсли; - - ВерсияБиблиотеки = Итог.ВерсииБиблиотек[ИдентификаторБиблиотеки]; - Если ВерсияБиблиотеки = Неопределено Тогда - ВерсияБиблиотеки = ОбновлениеИнформационнойБазыСлужебный.ВерсияИБ(ИдентификаторБиблиотеки); - Итог.ВерсииБиблиотек.Вставить(ИдентификаторБиблиотеки, ВерсияБиблиотеки); - КонецЕсли; - - Если ВерсияБиблиотеки = "0.0.0.0" Тогда - // При начальном заполнении переименования не требуются. - Возврат; - КонецЕсли; - - Результат = ОбщегоНазначенияКлиентСервер.СравнитьВерсии(ВерсияИБ, ВерсияБиблиотеки); - Если Результат > 0 Тогда - ЧастиВерсии = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(ВерсияИБ, "."); - - ОписаниеПереименования = Итог.Таблица.Добавить(); - ОписаниеПереименования.ПорядокБиблиотеки = ПорядокБиблиотеки; - ОписаниеПереименования.ВерсияЧасть1 = Число(ЧастиВерсии[0]); - ОписаниеПереименования.ВерсияЧасть2 = Число(ЧастиВерсии[1]); - ОписаниеПереименования.ВерсияЧасть3 = Число(ЧастиВерсии[2]); - ОписаниеПереименования.ВерсияЧасть4 = Число(ЧастиВерсии[3]); - ОписаниеПереименования.СтароеПолноеИмя = СтароеПолноеИмя; - ОписаниеПереименования.НовоеПолноеИмя = НовоеПолноеИмя; - ОписаниеПереименования.ПорядокДобавления = Итог.Таблица.Индекс(ОписаниеПереименования); - КонецЕсли; + Справочники.ИдентификаторыОбъектовМетаданных.ДобавитьПереименование(Итог, + ВерсияИБ, СтароеПолноеИмя, НовоеПолноеИмя, ИдентификаторБиблиотеки); КонецПроцедуры @@ -3155,7 +2931,7 @@ Если ЭтоСсылка(Тип) Тогда ПолноеИмя = Метаданные.НайтиПоТипу(Тип).ПолноеИмя(); - ИмяОбъекта = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(ПолноеИмя, ".")[1]; + ИмяОбъекта = СтрРазделить(ПолноеИмя, ".")[1]; Если Справочники.ТипВсеСсылки().СодержитТип(Тип) Тогда Представление = "СправочникСсылка"; @@ -3275,7 +3051,7 @@ // Функция ПолучитьТаблицуОписанияСвойствОбъекта(ОбъектМетаданных, Свойства) Экспорт - МассивСвойств = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(Свойства); + МассивСвойств = СтрРазделить(Свойства, ","); // Возвращаемое значение функции. ТаблицаОписанияСвойствОбъекта = Новый ТаблицаЗначений; @@ -3717,7 +3493,7 @@ Функция ЭтоОбъектСсылочногоТипа(ОбъектМетаданных) Экспорт ИмяОбъектаМетаданных = ОбъектМетаданных.ПолноеИмя(); - Позиция = Найти(ИмяОбъектаМетаданных, "."); + Позиция = СтрНайти(ИмяОбъектаМетаданных, "."); Если Позиция > 0 Тогда ИмяБазовогоТипа = Лев(ИмяОбъектаМетаданных, Позиция - 1); Возврат ИмяБазовогоТипа = "Справочник" @@ -3952,9 +3728,9 @@ // Строка. // Функция ИмяТипаПерерасчеты() Экспорт - - Возврат "Перерасчеты"; - + + Возврат "Перерасчеты"; + КонецФункции //////////////////////////////////////////////////////////////////////////////// @@ -3974,7 +3750,7 @@ // См. также: // "СтандартноеХранилищеНастроекМенеджер.Сохранить" в синтакс-помощнике. // -Процедура ХранилищеОбщихНастроекСохранить(КлючОбъекта, КлючНастроек = "", Значение, +Процедура ХранилищеОбщихНастроекСохранить(КлючОбъекта, КлючНастроек, Значение, ОписаниеНастроек = Неопределено, ИмяПользователя = Неопределено, НужноОбновитьПовторноИспользуемыеЗначения = Ложь) Экспорт @@ -3993,7 +3769,7 @@ // // Параметры: // КлючОбъекта - Строка - Ключ объекта настройки. -// КлючНастроек - Строка - Необязательный. Ключ сохраняемых настроек. +// КлючНастроек - Строка - Ключ сохраняемых настроек. // ЗначениеПоУмолчанию - Произвольный - Необязательный. // Значение, которое необходимо подставить если настройки не были загружены. // ОписаниеНастроек - ОписаниеНастроек - Необязательный. При чтении значения настройки в данный параметр @@ -4008,7 +3784,7 @@ // См. также: // "СтандартноеХранилищеНастроекМенеджер.Загрузить" в синтакс-помощнике. // -Функция ХранилищеОбщихНастроекЗагрузить(КлючОбъекта, КлючНастроек = "", ЗначениеПоУмолчанию = Неопределено, +Функция ХранилищеОбщихНастроекЗагрузить(КлючОбъекта, КлючНастроек, ЗначениеПоУмолчанию = Неопределено, ОписаниеНастроек = Неопределено, ИмяПользователя = Неопределено) Экспорт Возврат ХранилищеЗагрузить( @@ -4107,7 +3883,7 @@ // См. также: // "СтандартноеХранилищеНастроекМенеджер.Сохранить" в синтакс-помощнике. // -Процедура ХранилищеСистемныхНастроекСохранить(КлючОбъекта, КлючНастроек = "", Значение, +Процедура ХранилищеСистемныхНастроекСохранить(КлючОбъекта, КлючНастроек, Значение, ОписаниеНастроек = Неопределено, ИмяПользователя = Неопределено, НужноОбновитьПовторноИспользуемыеЗначения = Ложь) Экспорт @@ -4126,7 +3902,7 @@ // // Параметры: // КлючОбъекта - Строка - Ключ объекта настройки. -// КлючНастроек - Строка - Необязательный. Ключ сохраняемых настроек. +// КлючНастроек - Строка - Ключ сохраняемых настроек. // ЗначениеПоУмолчанию - Произвольный - Необязательный. // Значение, которое необходимо подставить если настройки не были загружены. // ОписаниеНастроек - ОписаниеНастроек - Необязательный. При чтении значения настройки в данный параметр @@ -4141,7 +3917,7 @@ // См. также: // "СтандартноеХранилищеНастроекМенеджер.Загрузить" в синтакс-помощнике. // -Функция ХранилищеСистемныхНастроекЗагрузить(КлючОбъекта, КлючНастроек = "", ЗначениеПоУмолчанию = Неопределено, +Функция ХранилищеСистемныхНастроекЗагрузить(КлючОбъекта, КлючНастроек, ЗначениеПоУмолчанию = Неопределено, ОписаниеНастроек = Неопределено, ИмяПользователя = Неопределено) Экспорт Возврат ХранилищеЗагрузить( @@ -4191,7 +3967,7 @@ // См. также: // "СтандартноеХранилищеНастроекМенеджер.Сохранить" в синтакс-помощнике. // -Процедура ХранилищеНастроекДанныхФормСохранить(КлючОбъекта, КлючНастроек = "", Значение, +Процедура ХранилищеНастроекДанныхФормСохранить(КлючОбъекта, КлючНастроек, Значение, ОписаниеНастроек = Неопределено, ИмяПользователя = Неопределено, НужноОбновитьПовторноИспользуемыеЗначения = Ложь) Экспорт @@ -4210,7 +3986,7 @@ // // Параметры: // КлючОбъекта - Строка - Ключ объекта настройки. -// КлючНастроек - Строка - Необязательный. Ключ сохраняемых настроек. +// КлючНастроек - Строка - Ключ сохраняемых настроек. // ЗначениеПоУмолчанию - Произвольный - Необязательный. // Значение, которое необходимо подставить если настройки не были загружены. // ОписаниеНастроек - ОписаниеНастроек - Необязательный. При чтении значения настройки в данный параметр @@ -4225,7 +4001,7 @@ // См. также: // "СтандартноеХранилищеНастроекМенеджер.Загрузить" в синтакс-помощнике. // -Функция ХранилищеНастроекДанныхФормЗагрузить(КлючОбъекта, КлючНастроек = "", ЗначениеПоУмолчанию = Неопределено, +Функция ХранилищеНастроекДанныхФормЗагрузить(КлючОбъекта, КлючНастроек, ЗначениеПоУмолчанию = Неопределено, ОписаниеНастроек = Неопределено, ИмяПользователя = Неопределено) Экспорт Возврат ХранилищеЗагрузить( @@ -4297,7 +4073,7 @@ // Параметры: // МенеджерХранилища - СтандартноеХранилищеНастроекМенеджер - Хранилище, из которого загружается настройка. // КлючОбъекта - Строка - Ключ объекта настройки. -// КлючНастроек - Строка - Необязательный. Ключ сохраняемых настроек. +// КлючНастроек - Строка - Ключ сохраняемых настроек. // ЗначениеПоУмолчанию - Произвольный - Необязательный. // Значение, которое необходимо подставить если настройки не были загружены. // ОписаниеНастроек - ОписаниеНастроек - Необязательный. При чтении значения настройки в данный параметр @@ -4446,7 +4222,7 @@ КлючОбъекта = ВРег("РабочаяДата"); - ХранилищеОбщихНастроекСохранить(КлючОбъекта, , НоваяРабочаяДата, , ИмяПользователя); + ХранилищеОбщихНастроекСохранить(КлючОбъекта, "", НоваяРабочаяДата, , ИмяПользователя); КонецПроцедуры @@ -4463,7 +4239,7 @@ КлючОбъекта = ВРег("РабочаяДата"); - Результат = ХранилищеОбщихНастроекЗагрузить(КлючОбъекта, , '0001-01-01', , ИмяПользователя); + Результат = ХранилищеОбщихНастроекЗагрузить(КлючОбъекта, "", '0001-01-01', , ИмяПользователя); Если ТипЗнч(Результат) <> Тип("Дата") Тогда Результат = '0001-01-01'; @@ -4815,7 +4591,145 @@ КонецПроцедуры //////////////////////////////////////////////////////////////////////////////// -// Процедуры и функции для обработки событий и вызова необязательных подсистем. +// Процедуры и функции для работы с хранилищем паролей. + +// Записывает конфиденциальные данные в безопасное хранилище. +// Вызывающий код должен самостоятельно устанавливать привилегированный режим. +// +// Параметры: +// Владелец - ПланОбменаСсылка, СправочникСсылка - ссылка на объект информационной базы, +// представляющий объект-владелец сохраняемого пароля. +// Для объектов других типов в качестве Владельца рекомендуется использовать ссылку на +// элемент метаданных этого типа в справочнике ИдентификаторыОбъектовМетаданных. +// Например, Владелец = ОбщегоНазначения.ИдентификаторОбъектаМетаданных("РегистрСведений.АдресныеОбъекты"); +// Данные - Произвольный - Данные помещаемые в безопасное хранилище. Неопределенно - удаляет данные. +// Ключ - Строка - Ключ сохраняемых настроек, по умолчанию "Пароль". +// +Процедура ЗаписатьДанныеВБезопасноеХранилище(Владелец, Данные, Ключ = "Пароль") Экспорт + + ОбщегоНазначенияКлиентСервер.Проверить(ЗначениеЗаполнено(Владелец), + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Недопустимое значение параметра %1 в %2. + |параметр должен содержать ссылку; передано значение: %3 (тип %4).'"), + "Владелец", "ОбщегоНазначения.ЗаписатьДанныеВБезопасноеХранилище", Владелец, ТипЗнч(Владелец))); + + ЭтоОбластьДанных = ОбщегоНазначенияПовтИсп.РазделениеВключено() И ОбщегоНазначенияПовтИсп.ДоступноИспользованиеРазделенныхДанных(); + Если ЭтоОбластьДанных Тогда + БезопасноеХранилищеДанных = РегистрыСведений.БезопасноеХранилищеДанныхОбластейДанных.СоздатьМенеджерЗаписи(); + Иначе + БезопасноеХранилищеДанных = РегистрыСведений.БезопасноеХранилищеДанных.СоздатьМенеджерЗаписи(); + КонецЕсли; + + Отбор = Новый Структура("Владелец", Владелец); + БезопасноеХранилищеДанных.Владелец = Владелец; + БезопасноеХранилищеДанных.Прочитать(); + Если Данные <> Неопределено Тогда + Если БезопасноеХранилищеДанных.Выбран() Тогда + ДанныеДляСохранения = БезопасноеХранилищеДанных.Данные.Получить(); + ДанныеДляСохранения.Вставить(Ключ, Данные); + ДанныеДляХранилищеЗначения = Новый ХранилищеЗначения(ДанныеДляСохранения, Новый СжатиеДанных(6)); + БезопасноеХранилищеДанных.Данные = ДанныеДляХранилищеЗначения; + БезопасноеХранилищеДанных.Записать(); + Иначе + ДанныеДляСохранения = Новый Структура(Ключ, Данные); + ДанныеДляХранилищеЗначения = Новый ХранилищеЗначения(ДанныеДляСохранения, Новый СжатиеДанных(6)); + БезопасноеХранилищеДанных.Данные = ДанныеДляХранилищеЗначения; + БезопасноеХранилищеДанных.Владелец = Владелец; + БезопасноеХранилищеДанных.Записать(); + КонецЕсли; + Иначе + БезопасноеХранилищеДанных.Удалить(); + КонецЕсли; + +КонецПроцедуры + +// Возвращает данные из безопасного хранилища. +// Вызывающий код должен самостоятельно устанавливать привилегированный режим. +// +// Параметры: +// Владелец - ПланОбменаСсылка, СправочникСсылка - ссылка на объект информационной базы, +// представляющий объект-владелец сохраняемого пароля. +// Ключи - Строка - Содержит список имен сохраненных данных, указанных через запятую. +// ОбщиеДанные - Булево - Истина, если требуется в модели сервиса получить данные из общих данных в разделенном режиме. +// +// Возвращаемое значение: +// Произвольный, Структура - Данные из безопасного хранилища. Если указан один ключ, +// то возвращается его значение, иначе структура. +// Если данные отсутствуют - Неопределенно. +// +Функция ПрочитатьДанныеИзБезопасногоХранилища(Владелец, Ключи = "Пароль", ОбщиеДанные = Неопределено) Экспорт + + ОбщегоНазначенияКлиентСервер.Проверить(ЗначениеЗаполнено(Владелец), + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Недопустимое значение параметра %1 в %2. + |параметр должен содержать ссылку; передано значение: %3 (тип %4).'"), + "Владелец", "ОбщегоНазначения.ПрочитатьДанныеИзБезопасногоХранилища", Владелец, ТипЗнч(Владелец))); + + Если ОбщегоНазначенияПовтИсп.РазделениеВключено() + И ОбщегоНазначенияПовтИсп.ДоступноИспользованиеРазделенныхДанных() Тогда + Если ОбщиеДанные = Истина Тогда + ИмяБезопасноеХранилищеДанных = "БезопасноеХранилищеДанных"; + Иначе + ИмяБезопасноеХранилищеДанных = "БезопасноеХранилищеДанныхОбластейДанных"; + КонецЕсли; + Иначе + ИмяБезопасноеХранилищеДанных = "БезопасноеХранилищеДанных"; + + КонецЕсли; + Результат = ДанныеИзБезопасногоХранилища(Владелец, ИмяБезопасноеХранилищеДанных, Ключи); + + Если Результат <> Неопределено И Результат.Количество() = 1 Тогда + Возврат ?(Результат.Свойство(Ключи), Результат[Ключи], Неопределено); + КонецЕсли; + + Возврат Результат; + +КонецФункции + +// Удаляет конфиденциальные данные в безопасное хранилище. +// Вызывающий код должен самостоятельно устанавливать привилегированный режим. +// +// Параметры: +// Владелец - ПланОбменаСсылка, СправочникСсылка - ссылка на объект информационной базы, +// представляющий объект-владелец сохраняемого пароля. +// Ключи - Строка - Содержит список имен удаляемых данных, указанных через запятую. +// Неопределенно - удаляет все данные. +// +Процедура УдалитьДанныеИзБезопасногоХранилища(Владелец, Ключи = Неопределено) Экспорт + + ОбщегоНазначенияКлиентСервер.Проверить(ЗначениеЗаполнено(Владелец), + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Недопустимое значение параметра %1 в %2. + |параметр должен содержать ссылку; передано значение: %3 (тип %4).'"), + "Владелец", "ОбщегоНазначения.УдалитьДанныеИзБезопасногоХранилища", Владелец, ТипЗнч(Владелец))); + + Если ОбщегоНазначенияПовтИсп.РазделениеВключено() И ОбщегоНазначенияПовтИсп.ДоступноИспользованиеРазделенныхДанных() Тогда + БезопасноеХранилищеДанных = РегистрыСведений.БезопасноеХранилищеДанныхОбластейДанных.СоздатьМенеджерЗаписи(); + Иначе + БезопасноеХранилищеДанных = РегистрыСведений.БезопасноеХранилищеДанных.СоздатьМенеджерЗаписи(); + КонецЕсли; + + Отбор = Новый Структура("Владелец", Владелец); + БезопасноеХранилищеДанных.Владелец = Владелец; + БезопасноеХранилищеДанных.Прочитать(); + Если Ключи <> Неопределено Тогда + СписокКлючей = СтрРазделить(Ключи, ",", Ложь); + Если БезопасноеХранилищеДанных.Выбран() И СписокКлючей.Количество() > 0 Тогда + ДанныеДляСохранения = БезопасноеХранилищеДанных.Данные.Получить(); + Для каждого КлючДляУдаления Из СписокКлючей Цикл + Если ДанныеДляСохранения.Свойство(КлючДляУдаления) Тогда + ДанныеДляСохранения.Удалить(Ключи); + КонецЕсли; + КонецЦикла; + ДанныеДляХранилищеЗначения = Новый ХранилищеЗначения(ДанныеДляСохранения, Новый СжатиеДанных(6)); + БезопасноеХранилищеДанных.Данные = ДанныеДляХранилищеЗначения; + БезопасноеХранилищеДанных.Записать(); + КонецЕсли; + Иначе + БезопасноеХранилищеДанных.Удалить(); + КонецЕсли; + +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// Процедуры и функции для вызова необязательных подсистем. // Возвращает Истина, если "функциональная" подсистема существует в конфигурации. // Предназначена для реализации вызова необязательной подсистемы (условного вызова). @@ -4865,8 +4779,7 @@ КонецЕсли; Если ТипЗнч(Модуль) <> Тип("ОбщийМодуль") Тогда - ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Общий модуль ""%1"" не найден.'"), Имя); + ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Общий модуль ""%1"" не найден.'"), Имя); КонецЕсли; Возврат Модуль; @@ -4875,42 +4788,10 @@ #КонецОбласти -#Область СлужебныеПроцедурыИФункции +#Область СлужебныйПрограммныйИнтерфейс //////////////////////////////////////////////////////////////////////////////// -// Получение обработчиков серверных событий. - -// Возвращает структуру для добавления обязательного события. -// -// Возвращаемое значение: -// Структура - -// * ИмяСобытия - Строка - представление события. -// Пример: "СтандартныеПодсистемы.ОбновлениеВерсииИБ\ПриДобавленииОбработчиковОбновления". -// -// * Обязательное - Булево, если Истина, то для данного события обязательно объявление обработчиков. -// -Функция НовоеСобытие() Экспорт - - Возврат Новый Структура("Имя, Обязательное", "", Ложь); - -КонецФункции - -// Возвращает обработчики указанного серверного события. -// -// Параметры: -// Событие - Строка, например, -// "СтандартныеПодсистемы.ОбновлениеВерсииИБ\ПриДобавленииОбработчиковОбновления". -// -// Возвращаемое значение: -// ФиксированныйМассив - со значениями типа ФиксированнаяСтруктура со свойствами: -// * Версия - Строка - версия обработчика, например, "2.1.3.4". Пустая строка, если не указана. -// * Модуль - ОбщийМодуль - серверный общий модуль. -// -Функция ОбработчикиСобытия(Событие) Экспорт - - Возврат СтандартныеПодсистемыПовтИсп.ОбработчикиСерверногоСобытия(Событие, Ложь); - -КонецФункции +// Процедуры и функции для обработки служебных событий. // Возвращает обработчики указанного серверного служебного события. // @@ -4929,6 +4810,10 @@ КонецФункции +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + // Обновляет данные в кэше версий. // // Параметры: @@ -4961,7 +4846,6 @@ |ГДЕ | ТаблицаКэша.Идентификатор = &Идентификатор | И ТаблицаКэша.ТипДанных = &ТипДанных"; - Идентификатор = Идентификатор; Запрос.УстановитьПараметр("Идентификатор", Идентификатор); Запрос.УстановитьПараметр("ТипДанных", ТипДанных); @@ -4980,6 +4864,15 @@ // Не удерживаем транзакцию для того, чтобы другие сеансы могли выполнять чтение данных. ЗафиксироватьТранзакцию(); + Исключение + + ОтменитьТранзакцию(); + РазблокироватьДанныеДляРедактирования(Ключ); + ВызватьИсключение; + + КонецПопытки; + + Попытка // Убедимся, что данные требуют обновления. Если Не Результат.Пустой() Тогда @@ -5010,12 +4903,7 @@ Исключение - Если ТранзакцияАктивна() Тогда - ОтменитьТранзакцию(); - КонецЕсли; - РазблокироватьДанныеДляРедактирования(Ключ); - ВызватьИсключение; КонецПопытки; @@ -5162,7 +5050,18 @@ ИнтернетПрокси = МодульПолучениеФайловИзИнтернетаКлиентСервер.ПолучитьПрокси(АдресWSDL); КонецЕсли; - Прокси = Новый WSПрокси(WSОпределения, URIПространстваИмен, ИмяСервиса, ИмяТочкиПодключения, ИнтернетПрокси, Таймаут); + Протокол = ""; + Позиция = СтрНайти(АдресWSDL, "://"); + Если Позиция > 0 Тогда + Протокол = НРег(Лев(АдресWSDL, Позиция - 1)); + КонецЕсли; + + ЗащищенноеСоединение = Неопределено; + Если (Протокол = "https" Или Протокол = "ftps") Тогда + ЗащищенноеСоединение = Новый ЗащищенноеСоединениеOpenSSL; + КонецЕсли; + + Прокси = Новый WSПрокси(WSОпределения, URIПространстваИмен, ИмяСервиса, ИмяТочкиПодключения, ИнтернетПрокси, Таймаут, ЗащищенноеСоединение); Прокси.Пользователь = ИмяПользователя; Прокси.Пароль = Пароль; @@ -5170,98 +5069,32 @@ КонецФункции //////////////////////////////////////////////////////////////////////////////// -// Устаревшие процедуры и функции. +// ВСПОМОГАТЕЛЬНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ -// Устарела. Следует использовать ПриСозданииНаСервере. -Функция ПриСозданииФормыНаСервере(Форма, СтандартнаяОбработка, Отказ) Экспорт +Функция ДанныеИзБезопасногоХранилища(Владелец, ИмяБезопасноеХранилищеДанных, Ключ) - Возврат Не ПриСозданииНаСервере(Форма, Отказ, СтандартнаяОбработка); + Результат = Новый Структура(Ключ); -КонецФункции - -// Устарела. Следует использовать ЗначенияРеквизитовОбъекта. -Функция ПолучитьЗначенияРеквизитов(Ссылка, ИменаРеквизитов) Экспорт - - Возврат ЗначенияРеквизитовОбъекта(Ссылка, ИменаРеквизитов); + Запрос = Новый Запрос; + Запрос.Текст = + "ВЫБРАТЬ + | БезопасноеХранилищеДанных.Данные КАК Данные + |ИЗ + | РегистрСведений." + ИмяБезопасноеХранилищеДанных + " КАК БезопасноеХранилищеДанных + |ГДЕ + | БезопасноеХранилищеДанных.Владелец = &Владелец"; -КонецФункции - -// Устарела. Следует использовать ЗначениеРеквизитаОбъекта. -Функция ПолучитьЗначениеРеквизита(Ссылка, ИмяРеквизита) Экспорт + Запрос.УстановитьПараметр("Владелец", Владелец); + РезультатЗапроса = Запрос.Выполнить().Выбрать(); - Возврат ЗначениеРеквизитаОбъекта(Ссылка, ИмяРеквизита); - -КонецФункции - -// Устарела. Следует использовать ЕстьСсылкиНаОбъект. -Функция ОбъектИспользуютсяВБазеДанных(Знач СсылкаИлиМассивСсылок, Знач ИскатьСредиСлужебныхОбъектов = Ложь) Экспорт - Возврат ЕстьСсылкиНаОбъект(СсылкаИлиМассивСсылок, ИскатьСредиСлужебныхОбъектов); -КонецФункции - -// Устарела. Следует использовать ОбщегоНазначенияКлиентСервер.КлючиСтруктурыВСтроку. -Функция КлючиСтруктурыВСтроку(Структура, Разделитель = ",") Экспорт - - Возврат ОбщегоНазначенияКлиентСервер.КлючиСтруктурыВСтроку(Структура, Разделитель); - -КонецФункции - -// Устарела. Следует использовать РаботаВБезопасномРежиме.ВыполнитьМетодКонфигурации(). -Процедура ВыполнитьБезопасно(ИмяЭкспортнойПроцедуры, Параметры = Неопределено, ОбластьДанных = Неопределено) Экспорт - - ВыполненаУстановкаРазделенияСеанса = Ложь; - Если ОбщегоНазначенияПовтИсп.РазделениеВключено() Тогда - Если Не ОбщегоНазначенияПовтИсп.СеансЗапущенБезРазделителей() Тогда - Если ОбластьДанных = Неопределено Тогда - ОбластьДанных = ЗначениеРазделителяСеанса(); - Иначе - Если ОбластьДанных <> ЗначениеРазделителяСеанса() Тогда - ВызватьИсключение(НСтр("ru = 'В данном сеансе недопустимо обращение к данным из другой области данных!'")); - КонецЕсли; - КонецЕсли; - КонецЕсли; - Если ОбластьДанных <> Неопределено - И (НЕ ИспользованиеРазделителяСеанса() ИЛИ ОбластьДанных <> ЗначениеРазделителяСеанса()) Тогда - УстановитьРазделениеСеанса(Истина, ОбластьДанных); - ВыполненаУстановкаРазделенияСеанса = Истина; - КонецЕсли; + Если РезультатЗапроса.Следующий() Тогда + СохраненныеДанные = РезультатЗапроса.Данные.Получить(); + ЗаполнитьЗначенияСвойств(Результат, СохраненныеДанные); КонецЕсли; - Попытка - - РаботаВБезопасномРежиме.ВыполнитьМетодКонфигурации(ИмяЭкспортнойПроцедуры, Параметры); - - Если ВыполненаУстановкаРазделенияСеанса Тогда - УстановитьРазделениеСеанса(Ложь); - КонецЕсли; - - Исключение - - Если ВыполненаУстановкаРазделенияСеанса Тогда - УстановитьРазделениеСеанса(Ложь); - КонецЕсли; - - ВызватьИсключение; - - КонецПопытки; - -КонецПроцедуры - -// Устарела. Следует использовать РаботаВБезопасномРежиме.ПроверитьИмяМетодаКонфигурации(). -Функция ПроверитьИмяЭкспортнойПроцедуры(Знач ИмяЭкспортнойПроцедуры, ТекстСообщения) Экспорт - - Попытка - РаботаВБезопасномРежиме.ПроверитьИмяМетодаКонфигурации(ИмяЭкспортнойПроцедуры); - Возврат Истина; - Исключение - ТекстСообщения = КраткоеПредставлениеОшибки(ИнформацияОбОшибке()); - Возврат Ложь; - КонецПопытки; - + Возврат Результат; КонецФункции -//////////////////////////////////////////////////////////////////////////////// -// ВСПОМОГАТЕЛЬНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ - Процедура НоваяСтрокаКоллекцииОбъектовМетаданных(Имя, Синоним, Картинка, КартинкаОбъекта, Таб) НоваяСтрока = Таб.Добавить(); @@ -5359,18 +5192,6 @@ КонецФункции -Функция ИмяКоллекции(ПолноеИмя) - - ПозицияТочки = Найти(ПолноеИмя, "."); - - Если ПозицияТочки > 0 Тогда - Возврат Лев(ПолноеИмя, ПозицияТочки - 1); - КонецЕсли; - - Возврат ""; - -КонецФункции - Процедура ПроверкаФиксированностиДанных(Данные, ДанныеВЗначенииФиксированныхТипов = Ложь) ТипДанных = ТипЗнч(Данные); @@ -5411,7 +5232,7 @@ КонецПроцедуры -Процедура ДобавитьИсключенияПоискаСсылок(ИсключенияПоискаСсылок, МассивИсключений) +Процедура ДобавитьИсключенияПоискаСсылок(Результат, МассивИсключений) Для Каждого ЭлементМассива Из МассивИсключений Цикл Если ТипЗнч(ЭлементМассива) = Тип("Строка") Тогда ЭлементМетаданные = Метаданные.НайтиПоПолномуИмени(ЭлементМассива); @@ -5423,7 +5244,7 @@ // Регистрация исключаемого объекта метаданных целиком (всех ссылок, которые он может содержать). Если ТипЗнч(РодительМетаданные) = Тип("ОбъектМетаданныхКонфигурация") Тогда - ИсключенияПоискаСсылок.Вставить(ЭлементМетаданные, "*"); + Результат.Вставить(ЭлементМетаданные, "*"); Продолжить; КонецЕсли; @@ -5436,15 +5257,15 @@ РодительРодителя = РодительМетаданные.Родитель(); КонецЦикла; - ПутиКРеквизитам = ИсключенияПоискаСсылок.Получить(РодительМетаданные); - Если ПутиКРеквизитам = Неопределено Тогда - ПутиКРеквизитам = Новый Массив; - ИначеЕсли ПутиКРеквизитам = "*" Тогда + ПутиКРеквизитам = Результат.Получить(РодительМетаданные); + Если ПутиКРеквизитам = "*" Тогда Продолжить; // - Пропуск, если весь объект метаданных уже исключен. + ИначеЕсли ПутиКРеквизитам = Неопределено Тогда + ПутиКРеквизитам = Новый Массив; КонецЕсли; ПутиКРеквизитам.Добавить(ОтносительныйПутьКРеквизиту); - ИсключенияПоискаСсылок.Вставить(РодительМетаданные, ПутиКРеквизитам); + Результат.Вставить(РодительМетаданные, ПутиКРеквизитам); КонецЦикла; КонецПроцедуры @@ -5471,7 +5292,7 @@ Функция СерверныйМодульМенеджера(Имя) ОбъектНайден = Ложь; - ЧастиИмени = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(Имя, "."); + ЧастиИмени = СтрРазделить(Имя, "."); Если ЧастиИмени.Количество() = 2 Тогда ИмяВида = ВРег(ЧастиИмени[0]); @@ -5661,63 +5482,57 @@ Возврат Новый ОписаниеТипов(ДобавляемыеТипы); КонецФункции -Процедура РазметитьМестаИспользования(Знач Конфигурация, Знач Ссылка, Знач ЦелеваяСсылка, Знач ТаблицаПоиска, РезультатРазметки = Неопределено) +Функция РазметитьМестаИспользования(Знач ПараметрыВыполнения, Знач Ссылка, Знач ЦелеваяСсылка, Знач ТаблицаПоиска) УстановитьПривилегированныйРежим(Истина); - - ТипКлючЗаписи = Конфигурация.ТипКлючЗаписи; - МетаКонстанты = Конфигурация.МетаКонстанты; - МетаПоследовательности = Конфигурация.МетаПоследовательности; - ТипВсеСсылки = Конфигурация.ТипВсеСсылки; - ТипКлючЗаписей = Конфигурация.ТипКлючЗаписи; // Устанавливаем порядок известных и проверяем наличие неопознанных объектов. - ФильтрСсылки = Новый Структура("Ссылка, КлючЗамены", Ссылка, ""); + Результат = Новый Структура; + Результат.Вставить("МестаИспользования", ТаблицаПоиска.НайтиСтроки(Новый Структура("Ссылка", Ссылка))); + Результат.Вставить("ОшибкиРазметки", Новый Массив); + Результат.Вставить("Успех", Истина); - РезультатРазметки = Новый Структура; - РезультатРазметки.Вставить("МестаИспользования", ТаблицаПоиска.НайтиСтроки(ФильтрСсылки) ); - РезультатРазметки.Вставить("ОшибкиРазметки", Новый Массив); - - Для Каждого МестоИспользования Из РезультатРазметки.МестаИспользования Цикл - МетаданныеМеста = МестоИспользования.Метаданные; - + Для Каждого МестоИспользования Из Результат.МестаИспользования Цикл Если МестоИспользования.ВспомогательныеДанные Тогда - // Зависимые данные не обрабатываем совсем. - Продолжить; - - ИначеЕсли МетаКонстанты.Содержит(МетаданныеМеста) Тогда + Продолжить; // Зависимые данные не обрабатываются. + КонецЕсли; + + Информация = ИнформацияОТипе(МестоИспользования.Метаданные, ПараметрыВыполнения); + Если Информация.Вид = "КОНСТАНТА" Тогда МестоИспользования.КлючЗамены = "Константа"; МестоИспользования.ЦелеваяСсылка = ЦелеваяСсылка; - ИначеЕсли МетаПоследовательности.Содержит(МетаданныеМеста) Тогда + ИначеЕсли Информация.Вид = "ПОСЛЕДОВАТЕЛЬНОСТЬ" Тогда МестоИспользования.КлючЗамены = "Последовательность"; МестоИспользования.ЦелеваяСсылка = ЦелеваяСсылка; + ИначеЕсли Информация.Вид = "РЕГИСТРСВЕДЕНИЙ" Тогда + МестоИспользования.КлючЗамены = "РегистрСведений"; + МестоИспользования.ЦелеваяСсылка = ЦелеваяСсылка; + + ИначеЕсли Информация.Вид = "РЕГИСТРБУХГАЛТЕРИИ" + Или Информация.Вид = "РЕГИСТРНАКОПЛЕНИЯ" + Или Информация.Вид = "РЕГИСТРРАСЧЕТА" Тогда + МестоИспользования.КлючЗамены = "КлючЗаписи"; + МестоИспользования.ЦелеваяСсылка = ЦелеваяСсылка; + + ИначеЕсли Информация.Ссылочный Тогда + МестоИспользования.КлючЗамены = "Объект"; + МестоИспользования.ЦелеваяСсылка = ЦелеваяСсылка; + Иначе - ТипДанных = ТипЗнч(МестоИспользования.Данные); - Если ТипВсеСсылки.СодержитТип(ТипДанных) Тогда - МестоИспользования.КлючЗамены = "Объект"; - МестоИспользования.ЦелеваяСсылка = ЦелеваяСсылка; - - ИначеЕсли ТипКлючЗаписей.СодержитТип(ТипДанных) Тогда - МестоИспользования.КлючЗамены = "КлючЗаписи"; - МестоИспользования.ЦелеваяСсылка = ЦелеваяСсылка; - - Иначе - // Неизвестный объект для замены ссылок. - Текст = НСтр("ru = 'Неизвестный тип данных %1 для проведения замены %2'"); - Текст = СтрЗаменить(Текст, "%1", Строка(МестоИспользования.Данные)); - Текст = СтрЗаменить(Текст, "%2", Строка(Ссылка)); - РезультатРазметки.ОшибкиРазметки.Добавить( - Новый Структура("Объект, Текст", МестоИспользования.Данные, Текст)); - - Прервать; - КонецЕсли; + // Неизвестный объект для замены ссылок. + Результат.Успех = Ложь; + Текст = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Замена ссылок в ""%1"" не поддерживается.'"), Информация.ПолноеИмя); + ОписаниеОшибки = Новый Структура("Объект, Текст", МестоИспользования.Данные, Текст); + Результат.ОшибкиРазметки.Добавить(ОписаниеОшибки); КонецЕсли; + КонецЦикла; -КонецПроцедуры + Возврат Результат; +КонецФункции -Процедура ПроизвестиЗаменуВКонстанте(Результаты, Знач МестоИспользования, Знач ПараметрыЗаписи, Знач ВнутренняяТранзакция = Истина) +Процедура ПроизвестиЗаменуВКонстанте(Результат, Знач МестоИспользования, Знач ПараметрыЗаписи, Знач ВнутренняяТранзакция = Истина) УстановитьПривилегированныйРежим(Истина); @@ -5787,7 +5602,7 @@ Ошибка = СтрЗаменить(Ошибка, "%2", ОписаниеОшибки); Для Каждого Строка Из ОбрабатываемыеСтроки Цикл - ДобавитьРезультатЗамены(Результаты, Строка.Ссылка, + ЗарегистрироватьОшибкуЗамены(Результат, Строка.Ссылка, ОписаниеОшибкиЗамены("ОшибкаЗаписи", Данные, ПредставлениеДанных, Ошибка)); КонецЦикла; @@ -5816,117 +5631,83 @@ КонецПроцедуры -Процедура ПроизвестиЗаменуВОбъекте(Результаты, Знач МестоИспользования, Знач ПараметрыЗаписи, Знач ВнутренняяТранзакция = Истина) +Процедура ПроизвестиЗаменуВОбъекте(Результат, Знач МестоИспользования, Знач ПараметрыВыполнения, Знач ВнутренняяТранзакция = Истина) УстановитьПривилегированныйРежим(Истина); Данные = МестоИспользования.Данные; - Мета = МестоИспользования.Метаданные; - - ПредставлениеДанных = ПредметСтрокой(Данные); // Будем производить сразу все замены для этих данных. Фильтр = Новый Структура("Данные, КлючЗамены", Данные, "Объект"); ОбрабатываемыеСтроки = МестоИспользования.Владелец().НайтиСтроки(Фильтр); - ОписаниеПоследовательностей = ОписаниеПоследовательностей(Мета); - ОписаниеДвижений = ОписаниеДвижений(Мета); - + ПредставлениеДанных = ПредметСтрокой(Данные); + СостояниеОперации = ""; Если ВнутренняяТранзакция Тогда - // Обрабатываем все связные данные одновременно. НачатьТранзакцию(); Блокировка = Новый БлокировкаДанных; + ЗаблокироватьМестоИспользования(ПараметрыВыполнения, Блокировка, МестоИспользования); - // Сам элемент - Блокировка.Добавить(Мета.ПолноеИмя()).УстановитьЗначение("Ссылка", Данные); - - // Движения - Для Каждого Элемент Из ОписаниеДвижений Цикл - // Все по регистратору - Блокировка.Добавить(Элемент.ПространствоБлокировки + ".НаборЗаписей").УстановитьЗначение("Регистратор", Данные); - - // Все кандидаты - измерения для сохранения итогов. - Для Каждого КлючЗначение Из Элемент.СписокИзмерений Цикл - ТипИзмерения = КлючЗначение.Значение; - Для Каждого МестоИспользования Из ОбрабатываемыеСтроки Цикл - ТекущаяСсылка = МестоИспользования.Ссылка; - Если ТипИзмерения.СодержитТип(ТипЗнч(ТекущаяСсылка)) Тогда - Блокировка.Добавить(Элемент.ПространствоБлокировки).УстановитьЗначение(КлючЗначение.Ключ, МестоИспользования.Ссылка); - КонецЕсли; - КонецЦикла; - КонецЦикла; - КонецЦикла; - - // Последовательности - Для Каждого Элемент Из ОписаниеПоследовательностей Цикл - Блокировка.Добавить(Элемент.ПространствоБлокировки).УстановитьЗначение("Регистратор", Данные); - - Для Каждого КлючЗначение Из Элемент.СписокИзмерений Цикл - ТипИзмерения = КлючЗначение.Значение; - Для Каждого МестоИспользования Из ОбрабатываемыеСтроки Цикл - ТекущаяСсылка = МестоИспользования.Ссылка; - Если ТипИзмерения.СодержитТип(ТипЗнч(ТекущаяСсылка)) Тогда - Блокировка.Добавить(Элемент.ПространствоБлокировки).УстановитьЗначение(КлючЗначение.Ключ, ТекущаяСсылка); - КонецЕсли; - КонецЦикла; - КонецЦикла; - КонецЦикла; - + ИнформацияОбОшибке = Неопределено; Попытка Блокировка.Заблокировать(); Исключение - // Добавляем запись в результат о неудачной попытке блокировке. - Ошибка = НСтр("ru = 'Не удалось заблокировать один или несколько объектов из списка - |%1'"); - Ошибка = СтрЗаменить(Ошибка, "%1", ОписаниеСпискаБлокировки(Блокировка)); - Для Каждого Строка Из ОбрабатываемыеСтроки Цикл - ДобавитьРезультатЗамены(Результаты, Строка.Ссылка, - ОписаниеОшибкиЗамены("ОшибкаБлокировки", Данные, ПредставлениеДанных, Ошибка)); - КонецЦикла; - - СостояниеОперации = "ОшибкаБлокировки"; + ИнформацияОбОшибке = ИнформацияОбОшибке(); КонецПопытки; - - КонецЕсли; // Необходимость блокировки + Если ИнформацияОбОшибке <> Неопределено Тогда + СостояниеОперации = "ОшибкаБлокировки"; + ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Не удалось заблокировать объект ""%1"": + |%2'"), + ПредставлениеДанных, + СтандартныеПодсистемыКлиентСервер.ИсходнаяПричинаОшибки(ИнформацияОбОшибке)); + ОписаниеОшибки = ОписаниеОшибкиЗамены("ОшибкаБлокировки", Данные, ПредставлениеДанных, ТекстОшибки); + ЗарегистрироватьОшибкуЗамены(Результат, МестоИспользования.Ссылка, ОписаниеОшибки); + Для Каждого Строка Из ОбрабатываемыеСтроки Цикл + ЗарегистрироватьОшибкуЗамены(Результат, Строка.Ссылка, ОписаниеОшибки); + КонецЦикла; + КонецЕсли; + КонецЕсли; Если СостояниеОперации = "" Тогда - ОбъектыЗаписи = ИзмененныеОбъектыПриЗаменеВОбъекте(Данные, ОбрабатываемыеСтроки, ОписаниеДвижений, ОписаниеПоследовательностей); + ОбъектыЗаписи = ИзмененныеОбъектыПриЗаменеВОбъекте(ПараметрыВыполнения, МестоИспользования, ОбрабатываемыеСтроки); // Пытаемся сохранить, сам объект идет последним. - Если Не ПараметрыЗаписи.ПривилегированнаяЗапись Тогда + Если Не ПараметрыВыполнения.ПривилегированнаяЗапись Тогда УстановитьПривилегированныйРежим(Ложь); КонецЕсли; Попытка - Если ПараметрыЗаписи.НеПроверять Тогда + Если ПараметрыВыполнения.ВключатьБизнесЛогику Тогда + // Первая запись без контроля, чтобы устранить циклические ссылки. + НовыеПараметрыВыполнения = ОбщегоНазначенияКлиентСервер.СкопироватьСтруктуру(ПараметрыВыполнения); + НовыеПараметрыВыполнения.ВключатьБизнесЛогику = Ложь; + Для Каждого КлючЗначение Из ОбъектыЗаписи Цикл + ЗаписатьОбъект(КлючЗначение.Ключ, НовыеПараметрыВыполнения); + КонецЦикла; + // Вторая запись c контролем. + НовыеПараметрыВыполнения.ВключатьБизнесЛогику = Истина; + Для Каждого КлючЗначение Из ОбъектыЗаписи Цикл + ЗаписатьОбъект(КлючЗначение.Ключ, НовыеПараметрыВыполнения); + КонецЦикла; + Иначе // Запись без контроля бизнес-логики. Для Каждого КлючЗначение Из ОбъектыЗаписи Цикл - ЗаписатьОбъект(КлючЗначение.Ключ, ПараметрыЗаписи); - КонецЦикла; - - Иначе - // Первая запись без контроля- чтобы устранить циклические ссылки. - ПараметрыЗаписи.НеПроверять = Истина; - Для Каждого КлючЗначение Из ОбъектыЗаписи Цикл - ЗаписатьОбъект(КлючЗначение.Ключ, ПараметрыЗаписи); - КонецЦикла; - - // Вторая запись c контролем - ПараметрыЗаписи.НеПроверять = Ложь; - Для Каждого КлючЗначение Из ОбъектыЗаписи Цикл - ЗаписатьОбъект(КлючЗначение.Ключ, ПараметрыЗаписи); + ЗаписатьОбъект(КлючЗначение.Ключ, ПараметрыВыполнения); КонецЦикла; КонецЕсли; - Исключение // Сохраняем причину Информация = ИнформацияОбОшибке(); - ЗаписьЖурналаРегистрации(СобытиеЖурналаРегистрацииЗаменыСсылок(), - УровеньЖурналаРегистрации.Ошибка, Мета, ПодробноеПредставлениеОшибки(Информация)); - + ЗаписьЖурналаРегистрации( + СобытиеЖурналаРегистрацииЗаменыСсылок(), + УровеньЖурналаРегистрации.Ошибка, + МестоИспользования.Метаданные, + ПодробноеПредставлениеОшибки(Информация)); + ОписаниеОшибки = КраткоеПредставлениеОшибки(Информация); Если ПустаяСтрока(ОписаниеОшибки) Тогда ОписаниеОшибки = Информация.Описание; @@ -5938,15 +5719,14 @@ Ошибка = СтрЗаменить(Ошибка, "%2", ОписаниеОшибки); Для Каждого Строка Из ОбрабатываемыеСтроки Цикл - ДобавитьРезультатЗамены(Результаты, Строка.Ссылка, - ОписаниеОшибкиЗамены("ОшибкаЗаписи", Данные, ПредставлениеДанных, Ошибка) - ); + ЗарегистрироватьОшибкуЗамены(Результат, Строка.Ссылка, + ОписаниеОшибкиЗамены("ОшибкаЗаписи", Данные, ПредставлениеДанных, Ошибка)); КонецЦикла; СостояниеОперации = "ОшибкаЗаписи"; КонецПопытки; - Если Не ПараметрыЗаписи.ПривилегированнаяЗапись Тогда + Если Не ПараметрыВыполнения.ПривилегированнаяЗапись Тогда УстановитьПривилегированныйРежим(Истина); КонецЕсли; @@ -5968,7 +5748,7 @@ КонецПроцедуры -Процедура ПроизвестиЗаменуВНаборе(Результаты, Знач МестоИспользования, Знач ПараметрыЗаписи, Знач ВнутренняяТранзакция = Истина) +Процедура ПроизвестиЗаменуВНаборе(Результат, Знач МестоИспользования, Знач ПараметрыВыполнения, Знач ВнутренняяТранзакция = Истина) УстановитьПривилегированныйРежим(Истина); Данные = МестоИспользования.Данные; @@ -6029,12 +5809,12 @@ Если НаборЗаписей.Модифицированность() Тогда // Пытаемся сохранить - Если Не ПараметрыЗаписи.ПривилегированнаяЗапись Тогда + Если Не ПараметрыВыполнения.ПривилегированнаяЗапись Тогда УстановитьПривилегированныйРежим(Ложь); КонецЕсли; Попытка - ЗаписатьОбъект(НаборЗаписей, ПараметрыЗаписи); + ЗаписатьОбъект(НаборЗаписей, ПараметрыВыполнения); Исключение // Сохраняем причину Информация = ИнформацияОбОшибке(); @@ -6052,15 +5832,14 @@ Ошибка = СтрЗаменить(Ошибка, "%2", ОписаниеОшибки); Для Каждого Строка Из ОбрабатываемыеСтроки Цикл - ДобавитьРезультатЗамены(Результаты, Строка.Ссылка, - ОписаниеОшибкиЗамены("ОшибкаЗаписи", Данные, ПредставлениеДанных, Ошибка) - ); + ЗарегистрироватьОшибкуЗамены(Результат, Строка.Ссылка, + ОписаниеОшибкиЗамены("ОшибкаЗаписи", Данные, ПредставлениеДанных, Ошибка)); КонецЦикла; СостояниеОперации = "ОшибкаЗаписи"; КонецПопытки; - Если Не ПараметрыЗаписи.ПривилегированнаяЗапись Тогда + Если Не ПараметрыВыполнения.ПривилегированнаяЗапись Тогда УстановитьПривилегированныйРежим(Истина); КонецЕсли; @@ -6082,7 +5861,207 @@ КонецПроцедуры -Функция ИзмененныеОбъектыПриЗаменеВОбъекте(Знач Данные, Знач ОбрабатываемыеСтроки, Знач ОписаниеДвижений, Знач ОписаниеПоследовательностей) +Процедура ПроизвестиЗаменуВРегистреСведений(Результат, Знач МестоИспользования, Знач ПараметрыВыполнения, Знач ВнутренняяТранзакция = Истина) + Если МестоИспользования.Обработано Тогда + Возврат; + КонецЕсли; + МестоИспользования.Обработано = Истина; + + // В случае, если дубль указан в измерениях набора, тогда используется 2 набора записей: + // НаборЗаписейДубля - чтение старых значений (по старым измерениям) и удаление старых значений. + // НаборЗаписейОригинала - чтение актуальных значений (по новым измерениям) и запись новых значений. + // Данные дублей и оригиналов объединяются по правилам: + // Приоритет у данных оригинала. + // Если в оригинале нет данных, то берутся данные из дубля. + // Набор оригинала записывается, а набор дубля удаляется. + // + // В случае, если дубль не указан в измерениях набора, тогда используется 1 набор записей: + // НаборЗаписейДубля - чтение старых значений и запись новых значений. + // + // Замена ссылок в ресурсах и реквизитах производится в обоих случаях. + + УстановитьПривилегированныйРежим(Истина); + + Дубль = МестоИспользования.Ссылка; + Оригинал = МестоИспользования.ЦелеваяСсылка; + + МетаданныеРегистра = МестоИспользования.Метаданные; + КлючЗаписиРегистра = МестоИспользования.Данные; + + Информация = ИнформацияОТипе(МетаданныеРегистра, ПараметрыВыполнения); + + ТребуетсяДваНабора = Ложь; + Для Каждого КлючЗначение Из Информация.Измерения Цикл + ЗначениеИзмеренияДубля = КлючЗаписиРегистра[КлючЗначение.Ключ]; + Если ЗначениеИзмеренияДубля = Дубль + Или ПараметрыВыполнения.УспешныеЗамены[ЗначениеИзмеренияДубля] = Дубль Тогда + ТребуетсяДваНабора = Истина; // Дубль указан в измерениях. + Прервать; + КонецЕсли; + КонецЦикла; + + Менеджер = МенеджерОбъектаПоПолномуИмени(Информация.ПолноеИмя); + НаборЗаписейДубля = Менеджер.СоздатьНаборЗаписей(); + + Если ТребуетсяДваНабора Тогда + ЗначенияИзмеренийОригинала = Новый Структура; + НаборЗаписейОригинала = Менеджер.СоздатьНаборЗаписей(); + КонецЕсли; + + Если ВнутренняяТранзакция Тогда + НачатьТранзакцию(); + Блокировка = Новый БлокировкаДанных; + БлокировкаДубля = Блокировка.Добавить(Информация.ПолноеИмя); + Если ТребуетсяДваНабора Тогда + БлокировкаОригинала = Блокировка.Добавить(Информация.ПолноеИмя); + КонецЕсли; + КонецЕсли; + + Для Каждого КлючЗначение Из Информация.Измерения Цикл + ЗначениеИзмеренияДубля = КлючЗаписиРегистра[КлючЗначение.Ключ]; + + // Для решения проблемы уникальности + // выполняется замена старых значений измерений ключа записи на актуальные. + // Соответствие старых и актуальных обеспечивает соответствием УспешныеЗамены. + // Данные соответствия актуальны на текущий момент времени, + // т.к. пополняются только после успешной обработки очередной пары и фиксации транзакции. + НовоеЗначениеИзмеренияДубля = ПараметрыВыполнения.УспешныеЗамены[ЗначениеИзмеренияДубля]; + Если НовоеЗначениеИзмеренияДубля <> Неопределено Тогда + ЗначениеИзмеренияДубля = НовоеЗначениеИзмеренияДубля; + КонецЕсли; + + НаборЗаписейДубля.Отбор[КлючЗначение.Ключ].Установить(ЗначениеИзмеренияДубля); + + Если ВнутренняяТранзакция Тогда // Замена в конкретной паре и блокировка на конкретную замену + БлокировкаДубля.УстановитьЗначение(КлючЗначение.Ключ, ЗначениеИзмеренияДубля); + КонецЕсли; + + Если ТребуетсяДваНабора Тогда + Если ЗначениеИзмеренияДубля = Дубль Тогда + ЗначениеИзмеренияОригинала = Оригинал; + Иначе + ЗначениеИзмеренияОригинала = ЗначениеИзмеренияДубля; + КонецЕсли; + + НаборЗаписейОригинала.Отбор[КлючЗначение.Ключ].Установить(ЗначениеИзмеренияОригинала); + ЗначенияИзмеренийОригинала.Вставить(КлючЗначение.Ключ, ЗначениеИзмеренияОригинала); + + Если ВнутренняяТранзакция Тогда // Замена в конкретной паре и блокировка на конкретную замену + БлокировкаОригинала.УстановитьЗначение(КлючЗначение.Ключ, ЗначениеИзмеренияОригинала); + КонецЕсли; + КонецЕсли; + КонецЦикла; + + // Установка блокировки. + Если ВнутренняяТранзакция Тогда + ИнформацияОбОшибке = Неопределено; + Попытка + Блокировка.Заблокировать(); + Исключение + ИнформацияОбОшибке = ИнформацияОбОшибке(); + КонецПопытки; + Если ИнформацияОбОшибке <> Неопределено Тогда + ЗарегистрироватьОшибкуВТаблицу(Результат, Дубль, Оригинал, КлючЗаписиРегистра, Информация, "БлокировкаДляРегистра", ИнформацияОбОшибке); + ОтменитьТранзакцию(); + Возврат; + КонецЕсли; + КонецЕсли; + + // Откуда читаем? + НаборЗаписейДубля.Прочитать(); + Если НаборЗаписейДубля.Количество() = 0 Тогда // Нечего писать. + Если ВнутренняяТранзакция Тогда + ОтменитьТранзакцию(); // Замена не требуется. + КонецЕсли; + Возврат; + КонецЕсли; + ЗаписьДубля = НаборЗаписейДубля[0]; + + // Куда пишем? + ЗаписьОригиналаЭтоНовый = Ложь; + Если ТребуетсяДваНабора Тогда + // Пишем в набор с другими измерениями. + НаборЗаписейОригинала.Прочитать(); + Если НаборЗаписейОригинала.Количество() = 0 Тогда + ЗаписьОригиналаЭтоНовый = Истина; + ЗаписьОригинала = НаборЗаписейОригинала.Добавить(); + ЗаполнитьЗначенияСвойств(ЗаписьОригинала, ЗаписьДубля); + ЗаполнитьЗначенияСвойств(ЗаписьОригинала, ЗначенияИзмеренийОригинала); + Иначе + ЗаписьОригинала = НаборЗаписейОригинала[0]; + КонецЕсли; + Иначе + // Пишем туда-же, откуда и читаем. + НаборЗаписейОригинала = НаборЗаписейДубля; + ЗаписьОригинала = ЗаписьДубля; // Ситуация с нулевым количеством записей в наборе обработана выше. + КонецЕсли; + + // Замена дубля на оригинал в ресурсах и реквизитах. + Для Каждого КлючЗначение Из Информация.Ресурсы Цикл + ЗначениеРеквизитаВОригинале = ЗаписьОригинала[КлючЗначение.Ключ]; + Если ЗначениеРеквизитаВОригинале = Дубль Тогда + ЗаписьОригинала[КлючЗначение.Ключ] = Оригинал; + Модифицированность = Истина; + КонецЕсли; + КонецЦикла; + Для Каждого КлючЗначение Из Информация.Реквизиты Цикл + ЗначениеРеквизитаВОригинале = ЗаписьОригинала[КлючЗначение.Ключ]; + Если ЗначениеРеквизитаВОригинале = Дубль Тогда + ЗаписьОригинала[КлючЗначение.Ключ] = Оригинал; + Модифицированность = Истина; + КонецЕсли; + КонецЦикла; + + Если Не ПараметрыВыполнения.ПривилегированнаяЗапись Тогда + УстановитьПривилегированныйРежим(Ложь); + КонецЕсли; + + ЕстьЧтоФиксировать = Ложь; + + // Удаление данных дубля. + Если ТребуетсяДваНабора Тогда + НаборЗаписейДубля.Очистить(); + ИнформацияОбОшибке = Неопределено; + Попытка + ЗаписатьОбъект(НаборЗаписейДубля, ПараметрыВыполнения); + ЕстьЧтоФиксировать = Истина; + Исключение + ИнформацияОбОшибке = ИнформацияОбОшибке(); + КонецПопытки; + Если ИнформацияОбОшибке <> Неопределено Тогда + ЗарегистрироватьОшибкуВТаблицу(Результат, Дубль, Оригинал, КлючЗаписиРегистра, Информация, "УдалитьНаборДубля", ИнформацияОбОшибке); + КонецЕсли; + КонецЕсли; + + // Запись данных оригинала. + Если НаборЗаписейОригинала.Модифицированность() Тогда + ИнформацияОбОшибке = Неопределено; + Попытка + ЗаписатьОбъект(НаборЗаписейОригинала, ПараметрыВыполнения); + ЕстьЧтоФиксировать = Истина; + Исключение + ИнформацияОбОшибке = ИнформацияОбОшибке(); + КонецПопытки; + Если ИнформацияОбОшибке <> Неопределено Тогда + ЗарегистрироватьОшибкуВТаблицу(Результат, Дубль, Оригинал, КлючЗаписиРегистра, Информация, "ЗаписатьНаборОригинала", ИнформацияОбОшибке); + КонецЕсли; + КонецЕсли; + + Если ВнутренняяТранзакция Тогда + Если ЕстьЧтоФиксировать Тогда + ЗафиксироватьТранзакцию(); + Иначе + ОтменитьТранзакцию(); + КонецЕсли; + КонецЕсли; + +КонецПроцедуры + +Функция ИзмененныеОбъектыПриЗаменеВОбъекте(ПараметрыВыполнения, МестоИспользования, ОбрабатываемыеСтроки) + Данные = МестоИспользования.Данные; + ОписаниеПоследовательностей = ОписаниеПоследовательностей(МестоИспользования.Метаданные); + ОписаниеДвижений = ОписаниеДвижений(МестоИспользования.Метаданные); + УстановитьПривилегированныйРежим(Истина); // Возвращаем измененные обработанные объекты. @@ -6132,7 +6111,7 @@ Имя = КлючЗначение.Ключ; ЦелеваяСсылка = ПарыЗамен[ Объект[Имя] ]; Если ЦелеваяСсылка <> Неопределено Тогда - ЗарегистрироватьФактЗамены(Объект, Объект[Имя], ЦелеваяСсылка, "Реквизиты", Имя); + ЗарегистрироватьФактЗамены(Объект, Объект[Имя], ЦелеваяСсылка, "СтандартныеРеквизиты", Имя); Объект[Имя] = ЦелеваяСсылка; КонецЕсли; КонецЦикла; @@ -6224,46 +6203,45 @@ ВыполненныеЗамены.Добавить(ОписаниеЗамены); КонецПроцедуры - -Процедура УдалитьСсылкиПометкой(РезультатУдаления, Знач СписокСсылок, Знач ПараметрыЗаписи, Знач ВнутренняяТранзакция = Истина) +Процедура УдалитьСсылкиПометкой(Результат, Знач СписокСсылок, Знач ПараметрыВыполнения, Знач ВнутренняяТранзакция = Истина) - УдалитьСсылкиНемонопольно(РезультатУдаления, СписокСсылок, ПараметрыЗаписи, ВнутренняяТранзакция, Ложь); + УдалитьСсылкиНемонопольно(Результат, СписокСсылок, ПараметрыВыполнения, ВнутренняяТранзакция, Ложь); КонецПроцедуры -Процедура УдалитьСсылкиНепосредственно(РезультатУдаления, Знач СписокСсылок, Знач ПараметрыЗаписи, Знач ВнутренняяТранзакция = Истина) +Процедура УдалитьСсылкиНепосредственно(Результат, Знач СписокСсылок, Знач ПараметрыВыполнения, Знач ВнутренняяТранзакция = Истина) - УдалитьСсылкиНемонопольно(РезультатУдаления, СписокСсылок, ПараметрыЗаписи, ВнутренняяТранзакция, Истина); + УдалитьСсылкиНемонопольно(Результат, СписокСсылок, ПараметрыВыполнения, ВнутренняяТранзакция, Истина); КонецПроцедуры -Процедура УдалитьСсылкиНемонопольно(РезультатУдаления, Знач СписокСсылок, Знач ПараметрыЗаписи, Знач ВнутренняяТранзакция, Знач УдалятьНепосредственно) +Процедура УдалитьСсылкиНемонопольно(Результат, Знач СписокСсылок, Знач ПараметрыВыполнения, Знач ВнутренняяТранзакция, Знач УдалятьНепосредственно) УстановитьПривилегированныйРежим(Истина); Удаляемые = Новый Массив; - Если ВнутренняяТранзакция Тогда + ЛокальнаяТранзакция = Не ТранзакцияАктивна(); + Если ЛокальнаяТранзакция Тогда НачатьТранзакцию(); КонецЕсли; - + Для Каждого Ссылка Из СписокСсылок Цикл + Информация = ИнформацияОТипе(ТипЗнч(Ссылка), ПараметрыВыполнения); Блокировка = Новый БлокировкаДанных; - Блокировка.Добавить(Ссылка.Метаданные().ПолноеИмя()).УстановитьЗначение("Ссылка", Ссылка); - КонецЦикла; - - Для Каждого Ссылка Из СписокСсылок Цикл - ПредставлениеСсылки = ПредметСтрокой(Ссылка); - - Попытка + Блокировка.Добавить(Информация.ПолноеИмя).УстановитьЗначение("Ссылка", Ссылка); + ИнформацияОбОшибке = Неопределено; + Попытка Блокировка.Заблокировать(); Удаляемые.Добавить(Ссылка); Исключение - ДобавитьРезультатЗамены(РезультатУдаления, Ссылка, - ОписаниеОшибкиЗамены("ОшибкаБлокировки", Ссылка, ПредставлениеСсылки, НСтр("ru = 'Ошибка блокирования ссылки для удаления'"))); - КонецПопытки + ИнформацияОбОшибке = ИнформацияОбОшибке(); + КонецПопытки; + Если ИнформацияОбОшибке <> Неопределено Тогда + ЗарегистрироватьОшибкуВТаблицу(Результат, Ссылка, Неопределено, Ссылка, Информация, "БлокировкаДляУдаленияДубля", ИнформацияОбОшибке); + КонецЕсли; КонецЦикла; - + ТаблицаПоиска = МестаИспользования(Удаляемые); Фильтр = Новый Структура("Ссылка"); @@ -6282,8 +6260,8 @@ КонецЦикла; Если МестаИспользования.Количество() > 0 Тогда - // Был изменен, нельзя удалять. - ДобавитьРезультатыЗаменыИзмененныхОбъектов(РезультатУдаления, МестаИспользования); + // Остались места использования, нельзя удалять. + ДобавитьРезультатыЗаменыИзмененныхОбъектов(Результат, МестаИспользования); Продолжить; КонецЕсли; @@ -6293,34 +6271,34 @@ Продолжить; КонецЕсли; - Если Не ПараметрыЗаписи.ПривилегированнаяЗапись Тогда + Если Не ПараметрыВыполнения.ПривилегированнаяЗапись Тогда УстановитьПривилегированныйРежим(Ложь); КонецЕсли; Попытка Если УдалятьНепосредственно Тогда - ОбработатьОбъектСПерехватомСообщений(Объект, "НепосредственноеУдаление", Неопределено, ПараметрыЗаписи); + ОбработатьОбъектСПерехватомСообщений(Объект, "НепосредственноеУдаление", Неопределено, ПараметрыВыполнения); Иначе - ОбработатьОбъектСПерехватомСообщений(Объект, "ПометкаУдаления", Неопределено, ПараметрыЗаписи); + ОбработатьОбъектСПерехватомСообщений(Объект, "ПометкаУдаления", Неопределено, ПараметрыВыполнения); КонецЕсли; Исключение ИнформацияОбОшибке = ИнформацияОбОшибке(); - ДобавитьРезультатЗамены(РезультатУдаления, Ссылка, + ЗарегистрироватьОшибкуЗамены(Результат, Ссылка, ОписаниеОшибкиЗамены("ОшибкаУдаления", Ссылка, ПредставлениеСсылки, НСтр("ru = 'Ошибка удаления'") + Символы.ПС + СокрЛП( КраткоеПредставлениеОшибки(ИнформацияОбОшибке)))); КонецПопытки; - Если Не ПараметрыЗаписи.ПривилегированнаяЗапись Тогда + Если Не ПараметрыВыполнения.ПривилегированнаяЗапись Тогда УстановитьПривилегированныйРежим(Истина); КонецЕсли; КонецЦикла; - Если ВнутренняяТранзакция Тогда + Если ЛокальнаяТранзакция Тогда ЗафиксироватьТранзакцию(); КонецЕсли; КонецПроцедуры -Процедура ДобавитьРезультатыЗаменыИзмененныхОбъектов(ИтоговаяТаблица, ТаблицаПовторногоПоиска) +Процедура ДобавитьРезультатыЗаменыИзмененныхОбъектов(Результат, ТаблицаПовторногоПоиска) ТипКлючЗаписи = ОписаниеТипаКлючиЗаписей(); @@ -6339,11 +6317,12 @@ Фильтр.ОбъектОшибки = Данные; Фильтр.Ссылка = Ссылка; - Если ИтоговаяТаблица.НайтиСтроки(Фильтр).Количество() = 0 Тогда - ДобавитьРезультатЗамены(ИтоговаяТаблица, Ссылка, - ОписаниеОшибкиЗамены("ДанныеИзменены", Данные, ПредставлениеДанных, - НСтр("ru = 'Данные были добавлены или изменены другим пользователем'"))); + Если Результат.Ошибки.НайтиСтроки(Фильтр).Количество() > 0 Тогда + Продолжить; // По данной проблеме уже записана ошибка. КонецЕсли; + ЗарегистрироватьОшибкуЗамены(Результат, Ссылка, + ОписаниеОшибкиЗамены("ДанныеИзменены", Данные, ПредставлениеДанных, + НСтр("ru = 'Заменены не все места использования. Возможно места использования были добавлены или изменены другим пользователем.'"))); КонецЦикла; КонецПроцедуры @@ -6578,50 +6557,33 @@ // Поля ссылочного типа - кандидаты и набор измерений. ОписаниеКлюча = СпискиПолейПоТипу(ИмяТаблицы, Мета.Измерения, "Период, Регистратор"); - + Если Метаданные.РегистрыСведений.Содержит(Мета) Тогда НаборЗаписей = РегистрыСведений[Мета.Имя].СоздатьНаборЗаписей(); - + ИначеЕсли Метаданные.РегистрыНакопления.Содержит(Мета) Тогда НаборЗаписей = РегистрыНакопления[Мета.Имя].СоздатьНаборЗаписей(); - + ИначеЕсли Метаданные.РегистрыБухгалтерии.Содержит(Мета) Тогда НаборЗаписей = РегистрыБухгалтерии[Мета.Имя].СоздатьНаборЗаписей(); - + ИначеЕсли Метаданные.РегистрыРасчета.Содержит(Мета) Тогда НаборЗаписей = РегистрыРасчета[Мета.Имя].СоздатьНаборЗаписей(); - + ИначеЕсли Метаданные.Последовательности.Содержит(Мета) Тогда НаборЗаписей = Последовательности[Мета.Имя].СоздатьНаборЗаписей(); - + Иначе НаборЗаписей = Неопределено; + КонецЕсли; - + ОписаниеКлюча.Вставить("НаборЗаписей", НаборЗаписей); ОписаниеКлюча.Вставить("ПространствоБлокировки", ИмяТаблицы); - + Возврат ОписаниеКлюча; КонецФункции -Функция ОписаниеСпискаБлокировки(Знач Блокировка) - // Только уникальные значения - Обработанные = Новый Соответствие; - - СтрокаОписания = ""; - Для Каждого Элемент Из Блокировка Цикл - Для Каждого Поле Из Элемент.Поля Цикл - Значение = Поле.Значение; - Если Обработанные[Значение] = Неопределено Тогда - СтрокаОписания = СтрокаОписания + Символы.ПС + Поле.Значение; - Обработанные[Значение] = Истина; - КонецЕсли - КонецЦикла; - КонецЦикла; - - Возврат СокрЛ(СтрокаОписания); -КонецФункции - Функция ОписанияТиповПересекаются(Знач Описание1, Знач Описание2) Для Каждого Тип Из Описание1.Типы() Цикл @@ -6634,12 +6596,12 @@ КонецФункции // Возвращает описание по имени таблицы или по набору записей. -Функция СпискиПолейПоТипу(Знач ИсточникДанных , Знач МетаИзмерения, Знач ИсключатьПоля) +Функция СпискиПолейПоТипу(Знач ИсточникДанных, Знач МетаИзмерения, Знач ИсключатьПоля) // можно закэшировать Описание = Новый Структура; Описание.Вставить("СписокПолей", Новый Структура); - Описание.Вставить("СписокИзмерений", Новый Структура); + Описание.Вставить("СтруктураИзмерений", Новый Структура); Описание.Вставить("СписокВедущих", Новый Структура); ТипКонтроля = ОписаниеТипаВсеСсылки(); @@ -6664,7 +6626,7 @@ // И проверка на ведущее измерение. Мета = МетаИзмерения.Найти(Имя); Если Мета <> Неопределено Тогда - Описание.СписокИзмерений.Вставить(Имя, Мета.Тип); + Описание.СтруктураИзмерений.Вставить(Имя, Мета.Тип); Тест = Новый Структура("Ведущее", Ложь); ЗаполнитьЗначенияСвойств(Тест, Мета); Если Тест.Ведущее Тогда @@ -6679,28 +6641,6 @@ Возврат Описание; КонецФункции -Процедура ДобавитьРезультатЗамены(Таблица, Знач Ссылка, Знач ОписаниеОшибки) - - Строка = Таблица.Добавить(); - Строка.Ссылка = Ссылка; - Строка.ПредставлениеОбъектаОшибки = ОписаниеОшибки.ПредставлениеОбъектаОшибки; - Строка.ОбъектОшибки = ОписаниеОшибки.ОбъектОшибки; - Строка.ТекстОшибки = ОписаниеОшибки.ТекстОшибки; - Строка.ТипОшибки = ОписаниеОшибки.ТипОшибки; - -КонецПроцедуры - -Функция ОписаниеОшибкиЗамены(Знач ТипОшибки, Знач ОбъектОшибки, Знач ПредставлениеОбъектаОшибки, Знач ТекстОшибки) - Результат = Новый Структура; - - Результат.Вставить("ТипОшибки", ТипОшибки); - Результат.Вставить("ОбъектОшибки", ОбъектОшибки); - Результат.Вставить("ПредставлениеОбъектаОшибки", ПредставлениеОбъектаОшибки); - Результат.Вставить("ТекстОшибки", ТекстОшибки); - - Возврат Результат; -КонецФункции - Процедура ЗаменитьВКоллекцииСтрок(ВидКоллекции, ИмяКоллекции, Объект, Коллекция, Знач СписокПолей, Знач ПарыЗамен) РабочаяКоллекция = Коллекция.Выгрузить(); Модифицировано = Ложь; @@ -6740,8 +6680,9 @@ Попытка + Объект.ОбменДанными.Загрузка = Не ПараметрыЗаписи.ВключатьБизнесЛогику; + Если Действие = "Запись" Тогда - УстановитьПараметрыЗаписи(Объект, ПараметрыЗаписи); Если РежимЗаписи = Неопределено Тогда Объект.Записать(); Иначе @@ -6749,11 +6690,9 @@ КонецЕсли; ИначеЕсли Действие = "ПометкаУдаления" Тогда - УстановитьПараметрыЗаписи(Объект, ПараметрыЗаписи); Объект.УстановитьПометкуУдаления(Истина, Ложь); ИначеЕсли Действие = "НепосредственноеУдаление" Тогда - УстановитьПараметрыЗаписи(Объект, ПараметрыЗаписи); Объект.Удалить(); КонецЕсли; @@ -6828,314 +6767,482 @@ ОбработатьОбъектСПерехватомСообщений(Объект, "Запись", Неопределено, ПараметрыЗаписи); КонецПроцедуры -Процедура УстановитьПараметрыЗаписи(Объект, Знач ПараметрыЗаписи) - - ТестРеквизита = Новый Структура("ОбменДанными"); - ЗаполнитьЗначенияСвойств(ТестРеквизита, Объект); - Если ТипЗнч(ТестРеквизита.ОбменДанными) = Тип("ПараметрыОбменаДанными") Тогда - Объект.ОбменДанными.Загрузка = ПараметрыЗаписи.НеПроверять; - Объект.ОбменДанными.Получатели.АвтоЗаполнение = Не ПараметрыЗаписи.НеПроверять; - КонецЕсли; - -КонецПроцедуры - Функция СобытиеЖурналаРегистрацииЗаменыСсылок() - Возврат НСтр("ru='Поиск и удаление ссылок'", - Метаданные.ОсновнойЯзык.КодЯзыка); + Возврат НСтр("ru='Поиск и удаление ссылок'", Метаданные.ОсновнойЯзык.КодЯзыка); КонецФункции -Процедура ЗаменитьСсылкиКороткимиТранзакциями(РезультатЗамены, Знач ПараметрыЗамены, Знач ПроизводимыеЗамены, Знач ТаблицаПоиска) +Процедура ЗаменитьСсылкиКороткимиТранзакциями(Результат, Знач ПараметрыВыполнения, Знач Дубли, Знач ТаблицаПоиска) // Основной цикл обработки - ПараметрыЗаписи = Новый Структура; - ПараметрыЗаписи.Вставить("НеПроверять", Не ПараметрыЗамены.КонтрольПриЗаписи); - ПараметрыЗаписи.Вставить("ПривилегированнаяЗапись", ПараметрыЗамены.ПривилегированнаяЗапись); - ФильтрСсылок = Новый Структура("Ссылка, КлючЗамены"); - Для Каждого Ссылка Из ПроизводимыеЗамены Цикл - ФильтрСсылок.Ссылка = Ссылка; + Для Каждого Дубль Из Дубли Цикл + БылиОшибки = Результат.ЕстьОшибки; + Результат.ЕстьОшибки = Ложь; + + ФильтрСсылок.Ссылка = Дубль; ФильтрСсылок.КлючЗамены = "Константа"; МестаИспользования = ТаблицаПоиска.НайтиСтроки(ФильтрСсылок); Для Каждого МестоИспользования Из МестаИспользования Цикл - ПроизвестиЗаменуВКонстанте(РезультатЗамены, МестоИспользования, ПараметрыЗаписи); + ПроизвестиЗаменуВКонстанте(Результат, МестоИспользования, ПараметрыВыполнения, Истина); КонецЦикла; ФильтрСсылок.КлючЗамены = "Объект"; МестаИспользования = ТаблицаПоиска.НайтиСтроки(ФильтрСсылок); Для Каждого МестоИспользования Из МестаИспользования Цикл - ПроизвестиЗаменуВОбъекте(РезультатЗамены, МестоИспользования, ПараметрыЗаписи); + ПроизвестиЗаменуВОбъекте(Результат, МестоИспользования, ПараметрыВыполнения, Истина); КонецЦикла; ФильтрСсылок.КлючЗамены = "КлючЗаписи"; МестаИспользования = ТаблицаПоиска.НайтиСтроки(ФильтрСсылок); Для Каждого МестоИспользования Из МестаИспользования Цикл - ПроизвестиЗаменуВНаборе(РезультатЗамены, МестоИспользования, ПараметрыЗаписи); + ПроизвестиЗаменуВНаборе(Результат, МестоИспользования, ПараметрыВыполнения, Истина); КонецЦикла; ФильтрСсылок.КлючЗамены = "Последовательность"; МестаИспользования = ТаблицаПоиска.НайтиСтроки(ФильтрСсылок); Для Каждого МестоИспользования Из МестаИспользования Цикл - ПроизвестиЗаменуВНаборе(РезультатЗамены, МестоИспользования, ПараметрыЗаписи); + ПроизвестиЗаменуВНаборе(Результат, МестоИспользования, ПараметрыВыполнения, Истина); КонецЦикла; + + ФильтрСсылок.КлючЗамены = "РегистрСведений"; + МестаИспользования = ТаблицаПоиска.НайтиСтроки(ФильтрСсылок); + Для Каждого МестоИспользования Из МестаИспользования Цикл + ПроизвестиЗаменуВРегистреСведений(Результат, МестоИспользования, ПараметрыВыполнения, Истина); + КонецЦикла; + + Если Не Результат.ЕстьОшибки Тогда + ПараметрыВыполнения.УспешныеЗамены.Вставить(Дубль, ПараметрыВыполнения.ПарыЗамен[Дубль]); + КонецЕсли; + Результат.ЕстьОшибки = Результат.ЕстьОшибки Или БылиОшибки; + КонецЦикла; // Окончательные действия - Если ПараметрыЗамены.УдалятьНепосредственно Тогда - УдалитьСсылкиНепосредственно(РезультатЗамены, ПроизводимыеЗамены, ПараметрыЗаписи, Истина); + Если ПараметрыВыполнения.УдалятьНепосредственно Тогда + УдалитьСсылкиНепосредственно(Результат, Дубли, ПараметрыВыполнения, Истина); - ИначеЕсли ПараметрыЗамены.ПомечатьНаУдаление Тогда - УдалитьСсылкиПометкой(РезультатЗамены, ПроизводимыеЗамены, ПараметрыЗаписи); + ИначеЕсли ПараметрыВыполнения.ПомечатьНаУдаление Тогда + УдалитьСсылкиПометкой(Результат, Дубли, ПараметрыВыполнения); - Иначе + Иначе // Поиск новых - ТаблицаПовторногоПоиска = МестаИспользования(ПроизводимыеЗамены); - ДобавитьРезультатыЗаменыИзмененныхОбъектов(РезультатЗамены, ТаблицаПовторногоПоиска); + ТаблицаПовторногоПоиска = МестаИспользования(Дубли); + ДобавитьРезультатыЗаменыИзмененныхОбъектов(Результат, ТаблицаПовторногоПоиска); КонецЕсли; - + КонецПроцедуры -Процедура ЗаменитьСсылкуДлиннойТранзакцией(РезультатЗамены, Знач Ссылка, Знач ПараметрыЗамены, Знач ТаблицаПоиска) +Процедура ЗаменитьСсылкуДлиннойТранзакцией(Результат, Знач Дубль, Знач ПараметрыВыполнения, Знач ТаблицаПоиска) УстановитьПривилегированныйРежим(Истина); - ПараметрыЗаписи = Новый Структура; - ПараметрыЗаписи.Вставить("НеПроверять", Не ПараметрыЗамены.КонтрольПриЗаписи); - ПараметрыЗаписи.Вставить("ПривилегированнаяЗапись", ПараметрыЗамены.ПривилегированнаяЗапись); - СостояниеОперации = ""; // 1. Блокирование всех мест использования. Блокировка = Новый БлокировкаДанных; - МестаИспользованияКонстанты = ТаблицаПоиска.НайтиСтроки(Новый Структура("Ссылка, КлючЗамены", Ссылка, "Константа")); - ДобавитьОбъектыБлокировкиКонстанты(Блокировка, МестаИспользованияКонстанты); + МестаИспользования = ТаблицаПоиска.НайтиСтроки(Новый Структура("Ссылка", Дубль)); + ЗаблокироватьМестаИспользования(ПараметрыВыполнения, Блокировка, МестаИспользования); - МестаИспользованияОбъекты = ТаблицаПоиска.НайтиСтроки(Новый Структура("Ссылка, КлючЗамены", Ссылка, "Объект")); - ДобавитьОбъектыБлокировкиОбъекты(Блокировка, МестаИспользованияОбъекты); - - МестаИспользованияНаборы = ТаблицаПоиска.НайтиСтроки(Новый Структура("Ссылка, КлючЗамены", Ссылка, "КлючЗаписи")); - ДобавитьОбъектыБлокировкиНаборы(Блокировка, МестаИспользованияНаборы); - - МестаИспользованияПоследовательности = ТаблицаПоиска.НайтиСтроки(Новый Структура("Ссылка, КлючЗамены", Ссылка, "Последовательность")); - ДобавитьОбъектыБлокировкиПоследовательности(Блокировка, МестаИспользованияПоследовательности); - НачатьТранзакцию(); Попытка Блокировка.Заблокировать(); Исключение // Добавляем запись в результат о неудачной попытке блокировке. - Ошибка = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Не удалось заблокировать все места использования %1'"), - Ссылка - ); - ДобавитьРезультатЗамены(РезультатЗамены, Ссылка, - ОписаниеОшибкиЗамены("ОшибкаБлокировки", Неопределено, Неопределено, Ошибка) - ); - + ПредставлениеОшибки = ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); + Ошибка = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Не удалось заблокировать все места использования %1:'") + Символы.ПС + ПредставлениеОшибки, Дубль); + ЗарегистрироватьОшибкуЗамены(Результат, Дубль, + ОписаниеОшибкиЗамены("ОшибкаБлокировки", Неопределено, Неопределено, Ошибка)); СостояниеОперации = "ОшибкаБлокировки"; КонецПопытки; УстановитьПривилегированныйРежим(Ложь); + БылиОшибки = Результат.ЕстьОшибки; + // 2. Замена везде до первой ошибки. Если СостояниеОперации = "" Тогда - КоличествоОшибок = РезультатЗамены.Количество(); + Результат.ЕстьОшибки = Ложь; - Для Каждого МестоИспользования Из МестаИспользованияКонстанты Цикл - ПроизвестиЗаменуВКонстанте(РезультатЗамены, МестоИспользования, ПараметрыЗаписи, Ложь); - Если КоличествоОшибок <> РезультатЗамены.Количество() Тогда + Для Каждого МестоИспользования Из МестаИспользования Цикл + + Если МестоИспользования.КлючЗамены = "Константа" Тогда + + ПроизвестиЗаменуВКонстанте(Результат, МестоИспользования, ПараметрыВыполнения, Ложь); + + ИначеЕсли МестоИспользования.КлючЗамены = "Объект" Тогда + + ПроизвестиЗаменуВОбъекте(Результат, МестоИспользования, ПараметрыВыполнения, Ложь); + + ИначеЕсли МестоИспользования.КлючЗамены = "Последовательность" Тогда + + ПроизвестиЗаменуВНаборе(Результат, МестоИспользования, ПараметрыВыполнения, Ложь); + + ИначеЕсли МестоИспользования.КлючЗамены = "КлючЗаписи" Тогда + + ПроизвестиЗаменуВНаборе(Результат, МестоИспользования, ПараметрыВыполнения, Ложь); + + ИначеЕсли МестоИспользования.КлючЗамены = "РегистрСведений" Тогда + + ПроизвестиЗаменуВРегистреСведений(Результат, МестоИспользования, ПараметрыВыполнения, Ложь); + + КонецЕсли; + + Если Результат.ЕстьОшибки Тогда + СостояниеОперации = "ОшибкаЗаписи"; Прервать; КонецЕсли; + КонецЦикла; - Если КоличествоОшибок = РезультатЗамены.Количество() Тогда - Для Каждого МестоИспользования Из МестаИспользованияОбъекты Цикл - ПроизвестиЗаменуВОбъекте(РезультатЗамены, МестоИспользования, ПараметрыЗаписи, Ложь); - Если КоличествоОшибок <> РезультатЗамены.Количество() Тогда - Прервать; - КонецЕсли; - КонецЦикла; - КонецЕсли; - - Если КоличествоОшибок = РезультатЗамены.Количество() Тогда - Для Каждого МестоИспользования Из МестаИспользованияНаборы Цикл - ПроизвестиЗаменуВНаборе(РезультатЗамены, МестоИспользования, ПараметрыЗаписи, Ложь); - Если КоличествоОшибок <> РезультатЗамены.Количество() Тогда - Прервать; - КонецЕсли; - КонецЦикла; - Иначе - СостояниеОперации = "ОшибкаЗаписи"; - КонецЕсли; - - Если КоличествоОшибок = РезультатЗамены.Количество() Тогда - Для Каждого МестоИспользования Из МестаИспользованияПоследовательности Цикл - ПроизвестиЗаменуВНаборе(РезультатЗамены, МестоИспользования, ПараметрыЗаписи, Ложь); - Если КоличествоОшибок <> РезультатЗамены.Количество() Тогда - Прервать; - КонецЕсли; - КонецЦикла; - Иначе - СостояниеОперации = "ОшибкаЗаписи"; - КонецЕсли; - КонецЕсли; // 3. Удаление ПроизводимыеЗамены = Новый Массив; - ПроизводимыеЗамены.Добавить(Ссылка); + ПроизводимыеЗамены.Добавить(Дубль); Если СостояниеОперации = "" Тогда - КоличествоОшибок = РезультатЗамены.Количество(); + Результат.ЕстьОшибки = Ложь; - Если ПараметрыЗамены.УдалятьНепосредственно Тогда - УдалитьСсылкиНепосредственно(РезультатЗамены, ПроизводимыеЗамены, ПараметрыЗаписи, Ложь); + Если ПараметрыВыполнения.УдалятьНепосредственно Тогда + УдалитьСсылкиНепосредственно(Результат, ПроизводимыеЗамены, ПараметрыВыполнения, Ложь); - ИначеЕсли ПараметрыЗамены.ПомечатьНаУдаление Тогда - УдалитьСсылкиПометкой(РезультатЗамены, ПроизводимыеЗамены, ПараметрыЗаписи, Ложь); + ИначеЕсли ПараметрыВыполнения.ПомечатьНаУдаление Тогда + УдалитьСсылкиПометкой(Результат, ПроизводимыеЗамены, ПараметрыВыполнения, Ложь); Иначе // Поиск новых ТаблицаПовторногоПоиска = МестаИспользования(ПроизводимыеЗамены); - ДобавитьРезультатыЗаменыИзмененныхОбъектов(РезультатЗамены, ТаблицаПовторногоПоиска); + ДобавитьРезультатыЗаменыИзмененныхОбъектов(Результат, ТаблицаПовторногоПоиска); КонецЕсли; - Если КоличествоОшибок <> РезультатЗамены.Количество() Тогда + Если Результат.ЕстьОшибки Тогда СостояниеОперации = "ДанныеИзменены"; КонецЕсли; КонецЕсли; + Результат.ЕстьОшибки = Результат.ЕстьОшибки Или БылиОшибки; + Если СостояниеОперации = "" Тогда ЗафиксироватьТранзакцию(); + ПараметрыВыполнения.УспешныеЗамены.Вставить(Дубль, ПараметрыВыполнения.ПарыЗамен[Дубль]); Иначе ОтменитьТранзакцию(); КонецЕсли; КонецПроцедуры + +Процедура ЗаблокироватьМестаИспользования(ПараметрыВыполнения, Блокировка, МестаИспользования) -Процедура ДобавитьОбъектыБлокировкиКонстанты(Блокировка, Знач СтрокиИспользования) - - Для Каждого Строка Из СтрокиИспользования Цикл - Блокировка.Добавить(Строка.Метаданные.ПолноеИмя()); + Для Каждого МестоИспользования Из МестаИспользования Цикл + + ЗаблокироватьМестоИспользования(ПараметрыВыполнения, Блокировка, МестоИспользования); + КонецЦикла; КонецПроцедуры -Процедура ДобавитьОбъектыБлокировкиОбъекты(Блокировка, Знач СтрокиИспользования) +Процедура ЗаблокироватьМестоИспользования(ПараметрыВыполнения, Блокировка, МестоИспользования) - Для Каждого МестоИспользования Из СтрокиИспользования Цикл - Данные = МестоИспользования.Данные; - Мета = МестоИспользования.Метаданные; + Если МестоИспользования.КлючЗамены = "Константа" Тогда - // Сам элемент - Блокировка.Добавить(Мета.ПолноеИмя()).УстановитьЗначение("Ссылка", Данные); + Блокировка.Добавить(МестоИспользования.Метаданные.ПолноеИмя()); - // Движения - ОписаниеДвижений = ОписаниеДвижений(Мета); + ИначеЕсли МестоИспользования.КлючЗамены = "Объект" Тогда + + СсылкаОбъекта = МестоИспользования.Данные; + МетаданныеОбъекта = МестоИспользования.Метаданные; + + // Сам объект. + Блокировка.Добавить(МетаданныеОбъекта.ПолноеИмя()).УстановитьЗначение("Ссылка", СсылкаОбъекта); + + // Движения по регистратору. + ОписаниеДвижений = ОписаниеДвижений(МетаданныеОбъекта); Для Каждого Элемент Из ОписаниеДвижений Цикл - // Все по регистратору - Блокировка.Добавить(Элемент.ПространствоБлокировки + ".НаборЗаписей").УстановитьЗначение("Регистратор", Данные); + Блокировка.Добавить(Элемент.ПространствоБлокировки + ".НаборЗаписей").УстановитьЗначение("Регистратор", СсылкаОбъекта); КонецЦикла; - // Последовательности - ОписаниеПоследовательностей = ОписаниеПоследовательностей(Мета); + // Последовательности. + ОписаниеПоследовательностей = ОписаниеПоследовательностей(МетаданныеОбъекта); Для Каждого Элемент Из ОписаниеПоследовательностей Цикл - Блокировка.Добавить(Элемент.ПространствоБлокировки).УстановитьЗначение("Регистратор", Данные); + Блокировка.Добавить(Элемент.ПространствоБлокировки).УстановитьЗначение("Регистратор", СсылкаОбъекта); КонецЦикла; + + ИначеЕсли МестоИспользования.КлючЗамены = "Последовательность" Тогда + + СсылкаОбъекта = МестоИспользования.Данные; + МетаданныеОбъекта = МестоИспользования.Метаданные; + + ОписаниеПоследовательностей = ОписаниеПоследовательностей(МетаданныеОбъекта); + Для Каждого Элемент Из ОписаниеПоследовательностей Цикл + Блокировка.Добавить(Элемент.ПространствоБлокировки).УстановитьЗначение("Регистратор", СсылкаОбъекта); + КонецЦикла; + + ИначеЕсли МестоИспользования.КлючЗамены = "КлючЗаписи" + Или МестоИспользования.КлючЗамены = "РегистрСведений" Тогда + + Информация = ИнформацияОТипе(МестоИспользования.Метаданные, ПараметрыВыполнения); + ТипДубля = МестоИспользования.ТипСсылки; + ТипОригинала = ТипЗнч(МестоИспользования.ЦелеваяСсылка); + + Для Каждого КлючЗначение Из Информация.Измерения Цикл + ТипИзмерения = КлючЗначение.Значение.Тип; + Если ТипИзмерения.СодержитТип(ТипДубля) Тогда + БлокировкаПоИзмерению = Блокировка.Добавить(Информация.ПолноеИмя); + БлокировкаПоИзмерению.УстановитьЗначение(КлючЗначение.Ключ, МестоИспользования.Ссылка); + КонецЕсли; + Если ТипИзмерения.СодержитТип(ТипОригинала) Тогда + БлокировкаПоИзмерению = Блокировка.Добавить(Информация.ПолноеИмя); + БлокировкаПоИзмерению.УстановитьЗначение(КлючЗначение.Ключ, МестоИспользования.ЦелеваяСсылка); + КонецЕсли; + КонецЦикла; + + КонецЕсли; - КонецЦикла; - КонецПроцедуры -Процедура ДобавитьОбъектыБлокировкиНаборы(Блокировка, Знач СтрокиИспользования) +Процедура ЗарегистрироватьОшибкуЗамены(Результат, Знач Ссылка, Знач ОписаниеОшибки) - Для Каждого МестоИспользования Из СтрокиИспользования Цикл - Данные = МестоИспользования.Данные; - Мета = МестоИспользования.Метаданные; - - ОписаниеНабора = ОписаниеКлючаЗаписи(Мета); - НаборЗаписей = ОписаниеНабора.НаборЗаписей; - - Для Каждого КлючЗначение Из ОписаниеНабора.СписокИзмерений Цикл - ТипИзмерения = КлючЗначение.Значение; - Имя = КлючЗначение.Ключ; - Значение = Данные[Имя]; - - Для Каждого Строка Из СтрокиИспользования Цикл - ТекущаяСсылка = Строка.Ссылка; - Если ТипИзмерения.СодержитТип(ТипЗнч(ТекущаяСсылка)) Тогда - Блокировка.Добавить(ОписаниеНабора.ПространствоБлокировки).УстановитьЗначение(Имя, ТекущаяСсылка); + Результат.ЕстьОшибки = Истина; + + Строка = Результат.Ошибки.Добавить(); + Строка.Ссылка = Ссылка; + Строка.ПредставлениеОбъектаОшибки = ОписаниеОшибки.ПредставлениеОбъектаОшибки; + Строка.ОбъектОшибки = ОписаниеОшибки.ОбъектОшибки; + Строка.ТекстОшибки = ОписаниеОшибки.ТекстОшибки; + Строка.ТипОшибки = ОписаниеОшибки.ТипОшибки; + +КонецПроцедуры + +Функция ОписаниеОшибкиЗамены(Знач ТипОшибки, Знач ОбъектОшибки, Знач ПредставлениеОбъектаОшибки, Знач ТекстОшибки) + Результат = Новый Структура; + + Результат.Вставить("ТипОшибки", ТипОшибки); + Результат.Вставить("ОбъектОшибки", ОбъектОшибки); + Результат.Вставить("ПредставлениеОбъектаОшибки", ПредставлениеОбъектаОшибки); + Результат.Вставить("ТекстОшибки", ТекстОшибки); + + Возврат Результат; +КонецФункции + +Процедура ЗарегистрироватьОшибкуВТаблицу(Результат, Дубль, Оригинал, Данные, Информация, ТипОшибки, ИнформацияОбОшибке) + Результат.ЕстьОшибки = Истина; + + ОшибкаВНовомФормате = Результат.ТаблицаОшибок.Добавить(); + ОшибкаВНовомФормате.Дубль = Дубль; + ОшибкаВНовомФормате.Оригинал = Оригинал; + ОшибкаВНовомФормате.Данные = Данные; + ОшибкаВНовомФормате.Информация = Информация; + ОшибкаВНовомФормате.ТипОшибки = ТипОшибки; + ОшибкаВНовомФормате.ИнформацияОбОшибке = ИнформацияОбОшибке; + + ЗаписьЖурналаРегистрации( + СобытиеЖурналаРегистрацииЗаменыСсылок(), + УровеньЖурналаРегистрации.Ошибка, + , + ПодробноеПредставлениеОшибки(ИнформацияОбОшибке)); + + ПолноеПредставлениеДанных = Строка(Данные) + " (" + Информация.ПредставлениеЭлемента + ")"; + + ОшибкаВСтаромФормате = Результат.Ошибки.Добавить(); + ОшибкаВСтаромФормате.Ссылка = Дубль; + ОшибкаВСтаромФормате.ОбъектОшибки = Данные; + ОшибкаВСтаромФормате.ПредставлениеОбъектаОшибки = ПолноеПредставлениеДанных; + + Если ТипОшибки = "БлокировкаДляРегистра" Тогда + НовыйШаблон = НСтр("ru = 'Не удалось начать редактирование %1: %2'"); + ОшибкаВСтаромФормате.ТипОшибки = "ОшибкаБлокировки"; + ИначеЕсли ТипОшибки = "БлокировкаДляУдаленияДубля" Тогда + НовыйШаблон = НСтр("ru = 'Не удалось начать удаление: %2'"); + ОшибкаВСтаромФормате.ТипОшибки = "ОшибкаБлокировки"; + ИначеЕсли ТипОшибки = "УдалитьНаборДубля" Тогда + НовыйШаблон = НСтр("ru = 'Не удалось очистить сведения о дубле в %1: %2'"); + ОшибкаВСтаромФормате.ТипОшибки = "ОшибкаЗаписи"; + ИначеЕсли ТипОшибки = "ЗаписатьНаборОригинала" Тогда + НовыйШаблон = НСтр("ru = 'Не удалось обновить сведения в %1: %2'"); + ОшибкаВСтаромФормате.ТипОшибки = "ОшибкаЗаписи"; + Иначе + НовыйШаблон = ТипОшибки + " (%1): %2"; + ОшибкаВСтаромФормате.ТипОшибки = ТипОшибки; + КонецЕсли; + + НовыйШаблон = НовыйШаблон + Символы.ПС + Символы.ПС + НСтр("ru = 'Подробности в журнале регистрации.'"); + + КраткоеПредставление = СтандартныеПодсистемыКлиентСервер.ИсходнаяПричинаОшибки(ИнформацияОбОшибке); + ОшибкаВСтаромФормате.ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НовыйШаблон, ПолноеПредставлениеДанных, КраткоеПредставление); + +КонецПроцедуры + +// Формирует информацию о типе объекта метаданных, как то: полное имя, представления, вид и т.п. +Функция ИнформацияОТипе(ПолноеИмяИлиМетаданныеИлиТип, ПараметрыВыполнения) Экспорт + ТипПервогоПараметра = ТипЗнч(ПолноеИмяИлиМетаданныеИлиТип); + Если ТипПервогоПараметра = Тип("Строка") Тогда + ОбъектМетаданных = Метаданные.НайтиПоПолномуИмени(ПолноеИмяИлиМетаданныеИлиТип); + Иначе + Если ТипПервогоПараметра = Тип("Тип") Тогда // Поиск объекта метаданных. + ОбъектМетаданных = Метаданные.НайтиПоТипу(ПолноеИмяИлиМетаданныеИлиТип); + Иначе + ОбъектМетаданных = ПолноеИмяИлиМетаданныеИлиТип; + КонецЕсли; + КонецЕсли; + ПолноеИмя = ВРег(ОбъектМетаданных.ПолноеИмя()); + + Если Не ПараметрыВыполнения.Свойство("ИнформацияОТипах") Тогда + ПараметрыВыполнения.Вставить("ИнформацияОТипах", Новый Соответствие); + КонецЕсли; + Информация = ПараметрыВыполнения.ИнформацияОТипах.Получить(ПолноеИмя); // Кэш. + Если Информация <> Неопределено Тогда + Возврат Информация; + КонецЕсли; + + Информация = Новый Структура("ПолноеИмя, ПредставлениеЭлемента, ПредставлениеСписка, + |Вид, Ссылочный, Технический, Разделенный, + |Иерархический, + |ЕстьПодчиненные, ИменаПодчиненных, + |Измерения, Реквизиты, Ресурсы"); + ПараметрыВыполнения.ИнформацияОТипах.Вставить(ПолноеИмя, Информация); + + // Заполнение базовой информации. + Информация.ПолноеИмя = ПолноеИмя; + + // Представления: элемента и списка. + СтандартныеСвойства = Новый Структура("ПредставлениеОбъекта, РасширенноеПредставлениеОбъекта, ПредставлениеСписка, РасширенноеПредставлениеСписка"); + ЗаполнитьЗначенияСвойств(СтандартныеСвойства, ОбъектМетаданных); + Если ЗначениеЗаполнено(СтандартныеСвойства.ПредставлениеОбъекта) Тогда + Информация.ПредставлениеЭлемента = СтандартныеСвойства.ПредставлениеОбъекта; + ИначеЕсли ЗначениеЗаполнено(СтандартныеСвойства.РасширенноеПредставлениеОбъекта) Тогда + Информация.ПредставлениеЭлемента = СтандартныеСвойства.РасширенноеПредставлениеОбъекта; + Иначе + Информация.ПредставлениеЭлемента = ОбъектМетаданных.Представление(); + КонецЕсли; + Если ЗначениеЗаполнено(СтандартныеСвойства.ПредставлениеСписка) Тогда + Информация.ПредставлениеСписка = СтандартныеСвойства.ПредставлениеСписка; + ИначеЕсли ЗначениеЗаполнено(СтандартныеСвойства.РасширенноеПредставлениеСписка) Тогда + Информация.ПредставлениеСписка = СтандартныеСвойства.РасширенноеПредставлениеСписка; + Иначе + Информация.ПредставлениеСписка = ОбъектМетаданных.Представление(); + КонецЕсли; + + // Вид и его свойства. + Информация.Вид = Лев(Информация.ПолноеИмя, СтрНайти(Информация.ПолноеИмя, ".")-1); + Если Информация.Вид = "СПРАВОЧНИК" + Или Информация.Вид = "ДОКУМЕНТ" + Или Информация.Вид = "ПЕРЕЧИСЛЕНИЕ" + Или Информация.Вид = "ПЛАНВИДОВХАРАКТЕРИСТИК" + Или Информация.Вид = "ПЛАНСЧЕТОВ" + Или Информация.Вид = "ПЛАНВИДОВРАСЧЕТА" + Или Информация.Вид = "БИЗНЕСПРОЦЕСС" + Или Информация.Вид = "ЗАДАЧА" + Или Информация.Вид = "ПЛАНОБМЕНА" Тогда + Информация.Ссылочный = Истина; + Иначе + Информация.Ссылочный = Ложь; + КонецЕсли; + + Если Информация.Вид = "СПРАВОЧНИК" + Или Информация.Вид = "ПЛАНВИДОВХАРАКТЕРИСТИК" Тогда + Информация.Иерархический = ОбъектМетаданных.Иерархический; + ИначеЕсли Информация.Вид = "ПЛАНСЧЕТОВ" Тогда + Информация.Иерархический = Истина; + Иначе + Информация.Иерархический = Ложь; + КонецЕсли; + + Информация.ЕстьПодчиненные = Ложь; + Если Информация.Вид = "СПРАВОЧНИК" + Или Информация.Вид = "ПЛАНВИДОВХАРАКТЕРИСТИК" + Или Информация.Вид = "ПЛАНОБМЕНА" + Или Информация.Вид = "ПЛАНСЧЕТОВ" + Или Информация.Вид = "ПЛАНВИДОВРАСЧЕТА" Тогда + Для Каждого Справочник Из Метаданные.Справочники Цикл + Если Справочник.Владельцы.Содержит(ОбъектМетаданных) Тогда + Если Информация.ЕстьПодчиненные = Ложь Тогда + Информация.ЕстьПодчиненные = Истина; + Информация.ИменаПодчиненных = Новый Массив; КонецЕсли; - КонецЦикла; - - НаборЗаписей.Отбор[Имя].Установить(Значение); + Информация.ИменаПодчиненных.Добавить(Справочник.ПолноеИмя()); + КонецЕсли; КонецЦикла; - + КонецЕсли; + + Если Информация.ПолноеИмя = "СПРАВОЧНИК.ИДЕНТИФИКАТОРЫОБЪЕКТОВМЕТАДАННЫХ" + Или Информация.ПолноеИмя = "СПРАВОЧНИК.ПРЕДОПРЕДЕЛЕННЫЕВАРИАНТЫОТЧЕТОВ" Тогда + Информация.Технический = Истина; + Информация.Разделенный = Ложь; + Иначе + Информация.Технический = Ложь; + Если Не ПараметрыВыполнения.Свойство("МодельСервиса") Тогда + ПараметрыВыполнения.Вставить("МодельСервиса", ОбщегоНазначенияПовтИсп.РазделениеВключено()); + Если ПараметрыВыполнения.МодельСервиса Тогда + ПараметрыВыполнения.Вставить("ВОбластиДанных", ИспользованиеРазделителяСеанса()); + ПараметрыВыполнения.Вставить("РазделительОсновныхДанных", ОбщегоНазначенияПовтИсп.РазделительОсновныхДанных()); + ПараметрыВыполнения.Вставить("РазделительВспомогательныхДанных", ОбщегоНазначенияПовтИсп.РазделительВспомогательныхДанных()); + КонецЕсли; + КонецЕсли; + Если ПараметрыВыполнения.МодельСервиса Тогда + Информация.Разделенный = ЭтоРазделенныйОбъектМетаданных(ОбъектМетаданных, ПараметрыВыполнения.РазделительОсновныхДанных) + Или ЭтоРазделенныйОбъектМетаданных(ОбъектМетаданных, ПараметрыВыполнения.РазделительВспомогательныхДанных); + КонецЕсли; + КонецЕсли; + + Информация.Измерения = Новый Структура; + Информация.Реквизиты = Новый Структура; + Информация.Ресурсы = Новый Структура; + + ВидыРеквизитов = Новый Структура("СтандартныеРеквизиты, Реквизиты, Измерения, Ресурсы"); + ЗаполнитьЗначенияСвойств(ВидыРеквизитов, ОбъектМетаданных); + Для Каждого КлючИЗначение Из ВидыРеквизитов Цикл + Коллекция = КлючИЗначение.Значение; + Если ТипЗнч(Коллекция) = Тип("КоллекцияОбъектовМетаданных") Тогда + КудаПишем = ?(Информация.Свойство(КлючИЗначение.Ключ), Информация[КлючИЗначение.Ключ], Информация.Реквизиты); + Для Каждого Реквизит Из Коллекция Цикл + КудаПишем.Вставить(Реквизит.Имя, ИнформацияПоРеквизиту(Реквизит)); + КонецЦикла; + КонецЕсли; КонецЦикла; -КонецПроцедуры + Возврат Информация; +КонецФункции -Процедура ДобавитьОбъектыБлокировкиПоследовательности(Блокировка, Знач СтрокиИспользования) - - Для Каждого МестоИспользования Из СтрокиИспользования Цикл - Данные = МестоИспользования.Данные; - Мета = МестоИспользования.Метаданные; - - ОписаниеПоследовательностей = ОписаниеПоследовательностей(Мета); - Для Каждого Элемент Из ОписаниеПоследовательностей Цикл - Блокировка.Добавить(Элемент.ПространствоБлокировки).УстановитьЗначение("Регистратор", Данные); - - Для Каждого КлючЗначение Из Элемент.СписокИзмерений Цикл - ТипИзмерения = КлючЗначение.Значение; - Для Каждого МестоИспользования Из СтрокиИспользования Цикл - ТекущаяСсылка = МестоИспользования.Ссылка; - Если ТипИзмерения.СодержитТип(ТипЗнч(ТекущаяСсылка)) Тогда - Блокировка.Добавить(Элемент.ПространствоБлокировки).УстановитьЗначение(КлючЗначение.Ключ, ТекущаяСсылка); - КонецЕсли; - КонецЦикла; - КонецЦикла; - КонецЦикла; - - КонецЦикла; - -КонецПроцедуры +Функция ИнформацияПоРеквизиту(МетаданныеРеквизита) + // ОписаниеСтандартногоРеквизита + // ОбъектМетаданных: Измерение + // ОбъектМетаданных: Ресурс + // ОбъектМетаданных: Реквизит + Информация = Новый Структура("Ведущее, Представление, Формат, Тип, ЗначениеПоУмолчанию, ЗаполнятьИзДанныхЗаполнения"); + ЗаполнитьЗначенияСвойств(Информация, МетаданныеРеквизита); + Информация.Представление = МетаданныеРеквизита.Представление(); + Если Информация.ЗаполнятьИзДанныхЗаполнения = Истина Тогда + Информация.ЗначениеПоУмолчанию = МетаданныеРеквизита.ЗначениеЗаполнения; + Иначе + Информация.ЗначениеПоУмолчанию = МетаданныеРеквизита.Тип.ПривестиЗначение(); + КонецЕсли; + Возврат Информация; +КонецФункции Функция ВычислитьЗначениеДанныхПоПути(Знач Данные, Знач ПутьДанных) - ЧастиПути = СтрЗаменить(ПутьДанных, ".", Символы.ПС); - КоличествоЧастейПути = СтрЧислоСтрок(ЧастиПути); + Результат = Данные; - ПромежуточныйРезультат = Данные; - - Для Индекс = 1 По КоличествоЧастейПути Цикл - ИмяРеквизита = СтрПолучитьСтроку(ЧастиПути, Индекс); - + Имена = СтрРазделить(ПутьДанных, ".", Ложь); + Для Каждого ИмяРеквизита Из Имена Цикл Тест = Новый Структура(ИмяРеквизита, Неопределено); - ЗаполнитьЗначенияСвойств(Тест, ПромежуточныйРезультат); + ЗаполнитьЗначенияСвойств(Тест, Результат); Если Тест[ИмяРеквизита] = Неопределено Тогда Тест[ИмяРеквизита] = -1; - ЗаполнитьЗначенияСвойств(Тест, ПромежуточныйРезультат); + ЗаполнитьЗначенияСвойств(Тест, Результат); Если Тест[ИмяРеквизита] = Неопределено Тогда - ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru='Ошибка вычисления %1 для объекта %2. Реквизит %3 не найден'"), - ПутьДанных, Данные, ИмяРеквизита - ); + ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru='Ошибка вычисления %1 для объекта %2. Реквизит %3 не найден'"), + ПутьДанных, Данные, ИмяРеквизита); КонецЕсли; КонецЕсли; Результат = Тест[ИмяРеквизита]; - Если Индекс = КоличествоЧастейПути Тогда - Возврат Результат; - - ИначеЕсли Результат = Неопределено Тогда - // Не можем дальше считать + Если Результат = Неопределено Тогда // Не можем дальше читать. Возврат Неопределено; - КонецЕсли; - - ПромежуточныйРезультат = Результат; КонецЦикла; - Возврат Неопределено; + Возврат Результат; КонецФункции #КонецОбласти diff --git a/SSL/src/CommonModules/ОбщегоНазначенияВызовСервера/Module.bsl b/SSL/src/CommonModules/ОбщегоНазначенияВызовСервера/Module.bsl index 8ae447043..71f8f3091 100644 --- a/SSL/src/CommonModules/ОбщегоНазначенияВызовСервера/Module.bsl +++ b/SSL/src/CommonModules/ОбщегоНазначенияВызовСервера/Module.bsl @@ -80,7 +80,7 @@ // Соответствуют методу ХранилищеОбщихНастроекСохранить.Сохранить, // подробнее - см. параметры процедуры ХранилищеСохранить(). // -Процедура ХранилищеОбщихНастроекСохранить(КлючОбъекта, КлючНастроек = "", Значение, ОписаниеНастроек = Неопределено, +Процедура ХранилищеОбщихНастроекСохранить(КлючОбъекта, КлючНастроек, Значение, ОписаниеНастроек = Неопределено, ИмяПользователя = Неопределено, НужноОбновитьПовторноИспользуемыеЗначения = Ложь) Экспорт ОбщегоНазначения.ХранилищеОбщихНастроекСохранить( @@ -99,7 +99,7 @@ // Соответствуют методу ХранилищеОбщихНастроек.Загрузить, // подробнее - см. параметры функции ХранилищеЗагрузить(). // -Функция ХранилищеОбщихНастроекЗагрузить(КлючОбъекта, КлючНастроек = "", ЗначениеПоУмолчанию = Неопределено, +Функция ХранилищеОбщихНастроекЗагрузить(КлючОбъекта, КлючНастроек, ЗначениеПоУмолчанию = Неопределено, ОписаниеНастроек = Неопределено, ИмяПользователя = Неопределено) Экспорт Возврат ОбщегоНазначения.ХранилищеОбщихНастроекЗагрузить( @@ -167,7 +167,7 @@ // Соответствуют методу ХранилищеСистемныхНастроек.Сохранить, // подробнее - см. параметры процедуры ХранилищеСохранить(). // -Процедура ХранилищеСистемныхНастроекСохранить(КлючОбъекта, КлючНастроек = "", Значение, ОписаниеНастроек = Неопределено, +Процедура ХранилищеСистемныхНастроекСохранить(КлючОбъекта, КлючНастроек, Значение, ОписаниеНастроек = Неопределено, ИмяПользователя = Неопределено, НужноОбновитьПовторноИспользуемыеЗначения = Ложь) Экспорт ОбщегоНазначения.ХранилищеСистемныхНастроекСохранить( @@ -186,7 +186,7 @@ // Соответствуют методу ХранилищеСистемныхНастроек.Загрузить, // подробнее - см. параметры функции ХранилищеЗагрузить(). // -Функция ХранилищеСистемныхНастроекЗагрузить(КлючОбъекта, КлючНастроек = "", ЗначениеПоУмолчанию = Неопределено, +Функция ХранилищеСистемныхНастроекЗагрузить(КлючОбъекта, КлючНастроек, ЗначениеПоУмолчанию = Неопределено, ОписаниеНастроек = Неопределено, ИмяПользователя = Неопределено) Экспорт Возврат ОбщегоНазначения.ХранилищеСистемныхНастроекЗагрузить( @@ -216,7 +216,7 @@ // Соответствуют методу ХранилищеСистемныхНастроек.Сохранить, // подробнее - см. параметры процедуры ХранилищеСохранить(). // -Процедура ХранилищеНастроекДанныхФормСохранить(КлючОбъекта, КлючНастроек = "", Значение, ОписаниеНастроек = Неопределено, +Процедура ХранилищеНастроекДанныхФормСохранить(КлючОбъекта, КлючНастроек, Значение, ОписаниеНастроек = Неопределено, ИмяПользователя = Неопределено, НужноОбновитьПовторноИспользуемыеЗначения = Ложь) Экспорт ОбщегоНазначения.ХранилищеНастроекДанныхФормСохранить( @@ -235,7 +235,7 @@ // Соответствуют методу ХранилищеСистемныхНастроек.Загрузить, // подробнее - см. параметры функции ХранилищеЗагрузить(). // -Функция ХранилищеНастроекДанныхФормЗагрузить(КлючОбъекта, КлючНастроек = "", ЗначениеПоУмолчанию = Неопределено, +Функция ХранилищеНастроекДанныхФормЗагрузить(КлючОбъекта, КлючНастроек, ЗначениеПоУмолчанию = Неопределено, ОписаниеНастроек = Неопределено, ИмяПользователя = Неопределено) Экспорт Возврат ОбщегоНазначения.ХранилищеНастроекДанныхФормЗагрузить( diff --git a/SSL/src/CommonModules/ОбщегоНазначенияКлиент/Module.bsl b/SSL/src/CommonModules/ОбщегоНазначенияКлиент/Module.bsl index 94ac9782a..098968589 100644 --- a/SSL/src/CommonModules/ОбщегоНазначенияКлиент/Module.bsl +++ b/SSL/src/CommonModules/ОбщегоНазначенияКлиент/Module.bsl @@ -204,10 +204,10 @@ Возврат; КонецЕсли; - ПараметрыРаботыКлиента = СтандартныеПодсистемыКлиентПовтИсп.ПараметрыРаботыКлиента(); + ПараметрыРаботыКлиентаПриЗапуске = СтандартныеПодсистемыКлиентПовтИсп.ПараметрыРаботыКлиентаПриЗапуске(); - Если ПараметрыРаботыКлиента.ЭтоБазоваяВерсияКонфигурации - Или ПараметрыРаботыКлиента.ЭтоУчебнаяПлатформа Тогда + Если ПараметрыРаботыКлиентаПриЗапуске.ЭтоБазоваяВерсияКонфигурации + Или ПараметрыРаботыКлиентаПриЗапуске.ЭтоУчебнаяПлатформа Тогда Возврат; КонецЕсли; @@ -244,7 +244,7 @@ // Функция КлиентПодключенЧерезВебСервер() Экспорт - Возврат Найти(Врег(СтрокаСоединенияИнформационнойБазы()), "WS=") = 1; + Возврат СтрНайти(Врег(СтрокаСоединенияИнформационнойБазы()), "WS=") = 1; КонецФункции @@ -374,6 +374,18 @@ КонецПроцедуры +// Обновляет интерфейс программы сохраняя текущее активное окно. +// +Процедура ОбновитьИнтерфейсПрограммы() Экспорт + + ТекущееАктивноеОкно = АктивноеОкно(); + ОбновитьИнтерфейс(); + Если ТекущееАктивноеОкно <> Неопределено Тогда + ТекущееАктивноеОкно.Активизировать(); + КонецЕсли; + +КонецПроцедуры + //////////////////////////////////////////////////////////////////////////////// // Процедуры и функции для обработки событий и вызова необязательных подсистем. @@ -528,252 +540,6 @@ КонецПроцедуры - -// ИспользованиеМодальности - -//////////////////////////////////////////////////////////////////////////////// -// Устаревшие процедуры и функции, использующие модальные окна. - -// Устарела. Следует использовать ПоказатьВопросОбУстановкеРасширенияРаботыСФайлами. -// Предлагает пользователю установить расширение работы с файлами в веб-клиенте. -// При этом инициализирует параметр сеанса ПредлагатьУстановкуРасширенияРаботыСФайлами. -// -// Предназначена для использования в начале участков кода, в которых ведется работа с файлами. -// Например: -// -// ПредложитьУстановкуРасширенияРаботыСФайлами("Для печати документа необходимо установить расширение работы с файлами."); -// // далее располагается код печати документа -// //... -// -// Параметры -// Сообщение - Строка - текст сообщения. Если не указан, то выводится текст по умолчанию. -// -// Возвращаемое значение: -// Строка - возможные значения: -// Подключено - расширение подключено -// НеПодключено - пользователь отказался от подключения -// НеподдерживаемыйВебКлиент - расширение не может быть подключено, так как не поддерживается в Веб-клиенте -// -Функция ПредложитьУстановкуРасширенияРаботыСФайлами(ТекстПредложения = Неопределено) Экспорт - -#Если ВебКлиент Тогда - РасширениеПодключено = ПодключитьРасширениеРаботыСФайлами(); - Если РасширениеПодключено Тогда - Возврат "Подключено"; // если расширение и так уже есть, незачем про него спрашивать - КонецЕсли; - - СистемнаяИнформация = Новый СистемнаяИнформация(); - ИдентификаторКлиента = СистемнаяИнформация.ИдентификаторКлиента; - - ПервоеОбращениеЗаСеанс = ПараметрыПриложения["СтандартныеПодсистемы.ПредлагатьУстановкуРасширенияРаботыСФайлами"] = Неопределено; - - ИмяПараметра = "СтандартныеПодсистемы.ПредлагатьУстановкуРасширенияРаботыСФайлами"; - Если ПараметрыПриложения[ИмяПараметра] = Неопределено Тогда - ПараметрыПриложения.Вставить(ИмяПараметра, ПредлагатьУстановкуРасширенияРаботыСФайлами()); - КонецЕсли; - - Если Не ПараметрыПриложения["СтандартныеПодсистемы.ПредлагатьУстановкуРасширенияРаботыСФайлами"] Тогда - Возврат ?(РасширениеПодключено, "Подключено", "НеПодключено"); - КонецЕсли; - - Если ПервоеОбращениеЗаСеанс Тогда - ПараметрыФормы = Новый Структура("Сообщение,ВозможноПродолжениеБезУстановки", ТекстПредложения, Истина); - КодВозврата = ОткрытьФормуМодально("ОбщаяФорма.ВопросОбУстановкеРасширенияРаботыСФайлами", ПараметрыФормы); - Если КодВозврата = Неопределено Тогда - КодВозврата = Истина; - КонецЕсли; - - ПараметрыПриложения["СтандартныеПодсистемы.ПредлагатьУстановкуРасширенияРаботыСФайлами"] = КодВозврата; - ОбщегоНазначенияВызовСервера.ХранилищеОбщихНастроекСохранить( - "НастройкиПрограммы/ПредлагатьУстановкуРасширенияРаботыСФайлами", ИдентификаторКлиента, - ПараметрыПриложения["СтандартныеПодсистемы.ПредлагатьУстановкуРасширенияРаботыСФайлами"]); - КонецЕсли; - Возврат ?(ПодключитьРасширениеРаботыСФайлами(), "Подключено", "НеПодключено"); - -#Иначе - Возврат "Подключено"; -#КонецЕсли - -КонецФункции - -// Устарела. Следует использовать ПроверитьРасширениеРаботыСФайламиПодключено. -// Предлагает пользователю подключить расширение работы с файлами в веб-клиенте, -// и в случае отказа выдает предупреждение о невозможности продолжения операции. -// -// Предназначена для использования в начале участков кода, в которых ведется работа с файлами -// только при подключенном расширении. -// Например: -// -// Если Не РасширениеРаботыСФайламиПодключено("Для печати документа необходимо установить расширение работы с файлами.") Тогда -// Возврат; -// КонецЕсли; -// // далее располагается код печати документа -// //... -// -// Параметры -// ТекстПредложения - Строка - текст с предложением подключить расширение работы с файлами. -// Если не указан, то выводится текст по умолчанию. -// ТекстПредупреждения - Строка - текст предупреждения о невозможности продолжения операции. -// Если не указан, то выводится текст по умолчанию. -// -// Возвращаемое значение: -// Булево - Истина, если расширение подключено. -// -Функция РасширениеРаботыСФайламиПодключено(ТекстПредложения = Неопределено, ТекстПредупреждения = Неопределено) Экспорт - - Результат = ПредложитьУстановкуРасширенияРаботыСФайлами(ТекстПредложения); - ТекстСообщения = ""; - Если Результат = "НеПодключено" Тогда - Если ТекстПредупреждения <> Неопределено Тогда - ТекстСообщения = ТекстПредупреждения; - Иначе - ТекстСообщения = НСтр("ru = 'Действие недоступно, так как не подключено расширение работы с файлами в Веб-клиенте.'") - КонецЕсли; - КонецЕсли; - Если Не ПустаяСтрока(ТекстСообщения) Тогда - ПоказатьПредупреждение(,ТекстСообщения); - КонецЕсли; - Возврат Результат = "Подключено"; - -КонецФункции - -// Устарела. Следует использовать ПоказатьПодтверждениеЗакрытияФормы или ПоказатьПодтверждениеЗакрытияПроизвольнойФормы. -// Задает вопрос о продолжении действия, влекущего к потере изменений. -// -// Параметры: -// Отказ - Булево - возвращаемый параметр, признак отказа от выполняемого действия; -// Модифицированность - Булево - признак модифицированности формы, из которой вызывается данная процедура; -// ДействиеВыбрано - Булево - признак выбора пользователем действия, приводящего к закрытию формы; -// ТекстПредупреждения - Строка - текст диалога с пользователем. -// -Процедура ЗапроситьПодтверждениеЗакрытияФормы(Отказ, Модифицированность = Истина, ДействиеВыбрано = Ложь, ТекстПредупреждения = "") Экспорт - - Если ДействиеВыбрано = Истина Или Не Модифицированность Тогда - Возврат; - КонецЕсли; - - ТекстВопроса = ?(ПустаяСтрока(ТекстПредупреждения), - НСтр("ru = 'Данные были изменены, внесенные изменения будут отменены. - |Отменить и закрыть?'"), - ТекстПредупреждения); - Результат = Вопрос(ТекстВопроса, РежимДиалогаВопрос.ДаНет, , КодВозвратаДиалога.Нет, - НСтр("ru = 'Отмена изменений'")); - - Если Результат = КодВозвратаДиалога.Нет Тогда - Отказ = Истина; - КонецЕсли; - -КонецПроцедуры - -// Устарела. -// Позволяет выбрать время из выпадающего списка. -// -// Параметры: -// Форма - управляемая форма / форма - форма, на которой располагается элемент, -// для которого будет выбираться время -// ПолеВводаФормы - ПолеФормы - элемент-владелец списка, у которого будет -// показан выпадающий список значений времен -// ТекущееЗначение - Дата - значение, на которое будет спозиционирован выпадающий список -// Интервал - число - интервал времени (в секундах), с которым необходимо заполнить список, по умолчанию час -// -// Возвращаемое значение: -// Число - значение времени в секундах. Либо Неопределено, если пользователь отказался от выбора. -// -Функция ВыбратьВремя(Форма, ПолеВводаФормы, Знач ТекущееЗначение, Интервал = 3600) Экспорт - - НачалоРабочегоДня = '00010101000000'; - ОкончаниеРабочегоДня = '00010101235959'; - - СписокВремен = Новый СписокЗначений; - НачалоРабочегоДня = НачалоЧаса(НачалоДня(ТекущееЗначение) + - Час(НачалоРабочегоДня) * 3600 + - Минута(НачалоРабочегоДня)*60); - ОкончаниеРабочегоДня = КонецЧаса(НачалоДня(ТекущееЗначение) + - Час(ОкончаниеРабочегоДня) * 3600 + - Минута(ОкончаниеРабочегоДня)*60); - - ВремяСписка = НачалоРабочегоДня; - - Пока НачалоЧаса(ВремяСписка) <= НачалоЧаса(ОкончаниеРабочегоДня) Цикл - - Если НЕ ЗначениеЗаполнено(ВремяСписка) Тогда - ПредставлениеВремени = "00:00"; - Иначе - ПредставлениеВремени = Формат(ВремяСписка,"ДФ=ЧЧ:мм"); - КонецЕсли; - - СписокВремен.Добавить(ВремяСписка, ПредставлениеВремени); - - ВремяСписка = ВремяСписка + Интервал; - - КонецЦикла; - - НачальноеЗначение = СписокВремен.НайтиПоЗначению(ТекущееЗначение); - - Если НачальноеЗначение = Неопределено Тогда - ВыбранноеВремя = Форма.ВыбратьИзСписка(СписокВремен, ПолеВводаФормы); - Иначе - ВыбранноеВремя = Форма.ВыбратьИзСписка(СписокВремен, ПолеВводаФормы, НачальноеЗначение); - КонецЕсли; - - Если ВыбранноеВремя = Неопределено Тогда - Возврат Неопределено; - КонецЕсли; - - Возврат ВыбранноеВремя.Значение; - -КонецФункции - -// Устарела. Следует использовать ПоказатьФормуРедактированияМногострочногоТекста. -// Открывает форму редактирования произвольного многострочного текста модально. -// -// Параметры: -// МногострочныйТекст - Строка - произвольный текст, который необходимо отредактировать; -// РезультатРедактирования - Строка - в этот параметр будет помещен результат редактирования; -// Модифицированность - Строка - флаг модифицированности формы; -// Заголовок - Строка - текст, который необходимо отобразить в заголовке формы. -// -Процедура ОткрытьФормуРедактированияМногострочногоТекста(Знач МногострочныйТекст, РезультатРедактирования, Модифицированность = Ложь, - Знач Заголовок = Неопределено) Экспорт - - Если Заголовок = Неопределено Тогда - ТекстВведен = ВвестиСтроку(МногострочныйТекст,,, Истина); - Иначе - ТекстВведен = ВвестиСтроку(МногострочныйТекст, Заголовок,, Истина); - КонецЕсли; - - Если Не ТекстВведен Тогда - Возврат; - КонецЕсли; - - РезультатРедактирования = МногострочныйТекст; - Если Не Модифицированность Тогда - Модифицированность = Истина; - КонецЕсли; - -КонецПроцедуры - -// Устарела. Следует использовать ПоказатьФормуРедактированияКомментария. -// Открывает форму редактирования многострочного комментария модально. -// -// Параметры: -// МногострочныйТекст - Строка - произвольный текст, который необходимо отредактировать -// РезультатРедактирования - Строка - переменная, в которую будет помещен результат редактирования -// Модифицированность - Строка - флаг модифицированности формы -// -// Пример использования: -// ОткрытьФормуРедактированияКомментария(Элемент.ТекстРедактирования, Объект.Комментарий, Модифицированность); -// -Процедура ОткрытьФормуРедактированияКомментария(Знач МногострочныйТекст, РезультатРедактирования, - Модифицированность = Ложь) Экспорт - - ОткрытьФормуРедактированияМногострочногоТекста(МногострочныйТекст, РезультатРедактирования, Модифицированность, - НСтр("ru='Комментарий'")); - -КонецПроцедуры - -// Конец ИспользованиеМодальности - #КонецОбласти #Область СлужебныйПрограммныйИнтерфейс @@ -817,17 +583,6 @@ КонецФункции -// Обновляет интерфейс программы сохраняя текущее активное окно. -Процедура ОбновитьИнтерфейсПрограммы() Экспорт - - ТекущееАктивноеОкно = АктивноеОкно(); - ОбновитьИнтерфейс(); - Если ТекущееАктивноеОкно <> Неопределено Тогда - ТекущееАктивноеОкно.Активизировать(); - КонецЕсли; - -КонецПроцедуры - #КонецОбласти #Область СлужебныеПроцедурыИФункции @@ -909,7 +664,7 @@ РеквизитФормы = ДополнительныеПараметры.ФормаВладелец; - ПутьКРеквизитуФормы = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(ДополнительныеПараметры.ИмяРеквизита, "."); + ПутьКРеквизитуФормы = СтрРазделить(ДополнительныеПараметры.ИмяРеквизита, "."); // Если реквизит вида "Объект.Комментарий" и т.п. Если ПутьКРеквизитуФормы.Количество() > 1 Тогда Для Индекс = 0 По ПутьКРеквизитуФормы.Количество() - 2 Цикл diff --git a/SSL/src/CommonModules/ОбщегоНазначенияКлиентПереопределяемый/Module.bsl b/SSL/src/CommonModules/ОбщегоНазначенияКлиентПереопределяемый/Module.bsl index 054c6b17d..5d295abda 100644 --- a/SSL/src/CommonModules/ОбщегоНазначенияКлиентПереопределяемый/Module.bsl +++ b/SSL/src/CommonModules/ОбщегоНазначенияКлиентПереопределяемый/Module.bsl @@ -89,6 +89,7 @@ // с помощью ключа командной строки /C. // Отказ - Булево - Возвращаемое значение. Если установить Истина, // то выполнение процедуры ПриНачалеРаботыСистемы будет прервано. +// Процедура ПриОбработкеПараметровЗапуска(ЗначениеПараметраЗапуска, ПараметрыЗапуска, Отказ) Экспорт КонецПроцедуры @@ -98,7 +99,11 @@ // Используется для подключения обработчиков ожидания, которые не должны вызываться // в случае интерактивных действий перед и при начале работы системы. // -// Интерактивные взаимодействия с пользователем запрещены. +// Начальная страница (рабочий стол) в этот момент еще не открыта, поэтому запрещено открывать +// формы напрямую, а следует использовать для этих целей обработчик ожидания. +// Запрещено использовать это событие для интерактивного взаимодействия с пользователем +// (ПоказатьВопрос и аналогичные действия). Для этих целей следует использовать +// событие ПриНачалеРаботыСистемы, который поддерживает продолжение своего выполнения. // Процедура ПослеНачалаРаботыСистемы() Экспорт @@ -134,23 +139,4 @@ КонецПроцедуры -// Устарела. Следует использовать ПриОбработкеПараметровЗапуска. -// Обработать параметры запуска программы. -// Реализация функции может быть расширена для обработки новых параметров. -// -// Параметры: -// ЗначениеПараметраЗапуска - Строка - первое значение параметра запуска, -// до первого символа ";". -// ПараметрыЗапуска - Строка - параметр запуска, переданный в конфигурацию -// с помощью ключа командной строки /C. -// -// Возвращаемое значение: -// Булево - Истина, если необходимо прервать выполнение процедуры ПриНачалеРаботыСистемы. -// -Функция ОбработатьПараметрыЗапуска(ЗначениеПараметраЗапуска, ПараметрыЗапуска) Экспорт - - Возврат Ложь; - -КонецФункции - #КонецОбласти diff --git a/SSL/src/CommonModules/ОбщегоНазначенияКлиентПовтИсп/Module.bsl b/SSL/src/CommonModules/ОбщегоНазначенияКлиентПовтИсп/Module.bsl index c08d7938b..a0242e49e 100644 --- a/SSL/src/CommonModules/ОбщегоНазначенияКлиентПовтИсп/Module.bsl +++ b/SSL/src/CommonModules/ОбщегоНазначенияКлиентПовтИсп/Module.bsl @@ -14,7 +14,7 @@ #КонецЕсли СистемнаяИнфо = Новый СистемнаяИнформация; - Если Найти(СистемнаяИнфо.ИнформацияПрограммыПросмотра, "Macintosh") <> 0 Тогда + Если СтрНайти(СистемнаяИнфо.ИнформацияПрограммыПросмотра, "Macintosh") <> 0 Тогда Возврат Истина; КонецЕсли; diff --git a/SSL/src/CommonModules/ОбщегоНазначенияКлиентСервер/Module.bsl b/SSL/src/CommonModules/ОбщегоНазначенияКлиентСервер/Module.bsl index ffe1931b7..750a18e2b 100644 --- a/SSL/src/CommonModules/ОбщегоНазначенияКлиентСервер/Module.bsl +++ b/SSL/src/CommonModules/ОбщегоНазначенияКлиентСервер/Module.bsl @@ -73,7 +73,7 @@ Если КлючДанных <> Неопределено И XMLТипЗнч(КлючДанных) <> Неопределено Тогда ТипЗначенияСтрокой = XMLТипЗнч(КлючДанных).ИмяТипа; - ЭтоОбъект = Найти(ТипЗначенияСтрокой, "Object.") > 0; + ЭтоОбъект = СтрНайти(ТипЗначенияСтрокой, "Object.") > 0; КонецЕсли; #КонецЕсли @@ -102,7 +102,7 @@ // - значение, установленное при первом вызове этой процедуры со значением Неопределено. // // ПолеОшибки - Строка - значение, которое задается в свойстве Поле объекта СообщениеПользователю. -// Для автоподстаноски номера строки должна содержать "%1". +// Для автоподстановки номера строки должна содержать "%1". // Например, "Объект.ИНН" или "Объект.Пользователи[%1].Пользователь". // // ТекстДляОднойОшибки - Строка - текст ошибки для случая, когда ГруппаОшибок в коллекции только одна, @@ -216,7 +216,6 @@ Шаблон = НСтр("ru = 'Поле ""%1"" не заполнено'"); ИначеЕсли ВРег(ВидСообщения) = "КОРРЕКТНОСТЬ" Тогда Шаблон = НСтр("ru = 'Поле ""%1"" заполнено некорректно. - | |%4'"); КонецЕсли; ИначеЕсли ВРег(ВидПоля) = "КОЛОНКА" Тогда @@ -224,7 +223,6 @@ Шаблон = НСтр("ru = 'Не заполнена колонка ""%1"" в строке %2 списка ""%3""'"); ИначеЕсли ВРег(ВидСообщения) = "КОРРЕКТНОСТЬ" Тогда Шаблон = НСтр("ru = 'Некорректно заполнена колонка ""%1"" в строке %2 списка ""%3"". - | |%4'"); КонецЕсли; ИначеЕсли ВРег(ВидПоля) = "СПИСОК" Тогда @@ -232,7 +230,6 @@ Шаблон = НСтр("ru = 'Не введено ни одной строки в список ""%3""'"); ИначеЕсли ВРег(ВидСообщения) = "КОРРЕКТНОСТЬ" Тогда Шаблон = НСтр("ru = 'Некорректно заполнен список ""%3"". - | |%4'"); КонецЕсли; КонецЕсли; @@ -312,34 +309,75 @@ КонецПроцедуры -// Дополняет коллекцию СтруктураПриемник значениями из коллекции СтруктураИсточник. +// Дополняет структуру значениями из другой структуры. // // Параметры: -// СтруктураПриемник - Структура - Коллекция, в которую будут добавляться новые значения. -// СтруктураИсточник - Структура - Коллекция, из которой будут считываться пары Ключ и Значение для заполнения. -// СЗаменой - Булево, Неопределено - Что делать в местах пересечения ключей источника и приемника. -// - Истина - Заменять значения приемника (самый быстрый способ). -// - Ложь - Не заменять значения приемника (пропускать). -// - Неопределено - Значение по умолчанию. Бросать исключение. +// Приемник - Структура - коллекция, в которую будут добавляться новые значения. +// Источник - Структура - коллекция, из которой будут считываться пары Ключ и Значение для заполнения. +// Заменять - Булево, Неопределено - Что делать в местах пересечения ключей источника и приемника: +// Истина - Заменять значения приемника (самый быстрый способ), +// Ложь - Не заменять значения приемника (пропускать), +// Неопределено - Значение по умолчанию. Бросать исключение. // -Процедура ДополнитьСтруктуру(СтруктураПриемник, СтруктураИсточник, СЗаменой = Неопределено) Экспорт +Процедура ДополнитьСтруктуру(Приемник, Источник, Заменять = Неопределено) Экспорт - ИскатьКлюч = (СЗаменой = Ложь Или СЗаменой = Неопределено); - Для Каждого КлючИЗначение Из СтруктураИсточник Цикл - Если ИскатьКлюч И СтруктураПриемник.Свойство(КлючИЗначение.Ключ) Тогда - Если СЗаменой = Ложь Тогда + Для Каждого Элемент Из Источник Цикл + Если Заменять <> Истина И Приемник.Свойство(Элемент.Ключ) Тогда + Если Заменять = Ложь Тогда Продолжить; Иначе - ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Пересечение структур источника и приемника по ключу ""%1"".'"), - КлючИЗначение.Ключ); + ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Пересечение ключей источника и приемника: ""%1"".'"), Элемент.Ключ); КонецЕсли КонецЕсли; - СтруктураПриемник.Вставить(КлючИЗначение.Ключ, КлючИЗначение.Значение); + Приемник.Вставить(Элемент.Ключ, Элемент.Значение); КонецЦикла; КонецПроцедуры +// Дополняет соответствие значениями из другой структуры. +// +// Параметры: +// Приемник - Соответствие - коллекция, в которую будут добавляться новые значения. +// Источник - Соответствие - коллекция, из которой будут считываться пары Ключ и Значение для заполнения. +// Заменять - Булево, Неопределено - Что делать в местах пересечения ключей источника и приемника: +// Истина - Заменять значения приемника (самый быстрый способ), +// Ложь - Не заменять значения приемника (пропускать), +// Неопределено - Значение по умолчанию. Бросать исключение. +// +Процедура ДополнитьСоответствие(Приемник, Источник, Заменять = Неопределено) Экспорт + + Для Каждого Элемент Из Источник Цикл + Если Заменять <> Истина И Приемник[Элемент.Ключ] <> Неопределено Тогда + Если Заменять = Ложь Тогда + Продолжить; + Иначе + ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Пересечение ключей источника и приемника: ""%1"".'"), Элемент.Ключ); + КонецЕсли + КонецЕсли; + Приемник.Вставить(Элемент.Ключ, Элемент.Значение); + КонецЦикла; + +КонецПроцедуры + +// Проверяет наличие реквизита или свойства у произвольного объекта без обращения к метаданным. +// +// Параметры: +// Объект - Произвольный - объект, у которого нужно проверить наличие реквизита или свойства; +// ИмяРеквизита - Строка - имя реквизита или свойства. +// +// Возвращаемое значение: +// Булево. +// +Функция ЕстьРеквизитИлиСвойствоОбъекта(Объект, ИмяРеквизита) Экспорт + + КлючУникальности = Новый УникальныйИдентификатор; + СтруктураРеквизита = Новый Структура(ИмяРеквизита, КлючУникальности); + ЗаполнитьЗначенияСвойств(СтруктураРеквизита, Объект); + + Возврат СтруктураРеквизита[ИмяРеквизита] <> КлючУникальности; + +КонецФункции + // Снимает один элемент условного оформления, если это список значений. // // Параметры: @@ -536,8 +574,8 @@ Если ЗначениеРасписания = Неопределено Тогда ЗначениеРасписания = Новый РасписаниеРегламентногоЗадания(); КонецЕсли; - СписокПолей = "ВремяЗавершения,ВремяКонца,ВремяНачала,ДатаКонца,ДатаНачала,ДеньВМесяце,ДеньНеделиВМесяце," + - "ДниНедели,ИнтервалЗавершения,Месяцы,ПаузаПовтора,ПериодНедель,ПериодПовтораВТечениеДня,ПериодПовтораДней"; + СписокПолей = "ВремяЗавершения,ВремяКонца,ВремяНачала,ДатаКонца,ДатаНачала,ДеньВМесяце,ДеньНеделиВМесяце," + + "ДниНедели,ИнтервалЗавершения,Месяцы,ПаузаПовтора,ПериодНедель,ПериодПовтораВТечениеДня,ПериодПовтораДней"; Результат = Новый Структура(СписокПолей); ЗаполнитьЗначенияСвойств(Результат, ЗначениеРасписания, СписокПолей); ДетальныеРасписанияДня = Новый Массив; @@ -547,7 +585,7 @@ Результат.Вставить("ДетальныеРасписанияДня", ДетальныеРасписанияДня); Возврат Результат; -КонецФункции +КонецФункции // Преобразует структуру в РасписаниеРегламентногоЗадания. // @@ -562,18 +600,18 @@ Если СтруктураРасписания = Неопределено Тогда Возврат Новый РасписаниеРегламентногоЗадания(); КонецЕсли; - СписокПолей = "ВремяЗавершения,ВремяКонца,ВремяНачала,ДатаКонца,ДатаНачала,ДеньВМесяце,ДеньНеделиВМесяце," + - "ДниНедели,ИнтервалЗавершения,Месяцы,ПаузаПовтора,ПериодНедель,ПериодПовтораВТечениеДня,ПериодПовтораДней"; + СписокПолей = "ВремяЗавершения,ВремяКонца,ВремяНачала,ДатаКонца,ДатаНачала,ДеньВМесяце,ДеньНеделиВМесяце," + + "ДниНедели,ИнтервалЗавершения,Месяцы,ПаузаПовтора,ПериодНедель,ПериодПовтораВТечениеДня,ПериодПовтораДней"; Результат = Новый РасписаниеРегламентногоЗадания; ЗаполнитьЗначенияСвойств(Результат, СтруктураРасписания, СписокПолей); ДетальныеРасписанияДня = Новый Массив; Для каждого Расписание Из СтруктураРасписания.ДетальныеРасписанияДня Цикл - ДетальныеРасписанияДня.Добавить(СтруктураВРасписание(Расписание)); + ДетальныеРасписанияДня.Добавить(СтруктураВРасписание(Расписание)); КонецЦикла; Результат.ДетальныеРасписанияДня = ДетальныеРасписанияДня; Возврат Результат; -КонецФункции +КонецФункции // Создает копию экземпляра указанного объекта. // @@ -776,7 +814,7 @@ // Функция ВерсияКонфигурацииБезНомераСборки(Знач Версия) Экспорт - Массив = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(Версия, "."); + Массив = СтрРазделить(Версия, "."); Если Массив.Количество() < 3 Тогда Возврат Версия; @@ -803,12 +841,12 @@ Строка1 = ?(ПустаяСтрока(СтрокаВерсии1), "0.0.0.0", СтрокаВерсии1); Строка2 = ?(ПустаяСтрока(СтрокаВерсии2), "0.0.0.0", СтрокаВерсии2); - Версия1 = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(Строка1, "."); + Версия1 = СтрРазделить(Строка1, "."); Если Версия1.Количество() <> 4 Тогда ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Неправильный формат параметра СтрокаВерсии1: %1'"), СтрокаВерсии1); КонецЕсли; - Версия2 = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(Строка2, "."); + Версия2 = СтрРазделить(Строка2, "."); Если Версия2.Количество() <> 4 Тогда ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Неправильный формат параметра СтрокаВерсии2: %1'"), СтрокаВерсии2); @@ -838,12 +876,12 @@ Строка1 = ?(ПустаяСтрока(СтрокаВерсии1), "0.0.0", СтрокаВерсии1); Строка2 = ?(ПустаяСтрока(СтрокаВерсии2), "0.0.0", СтрокаВерсии2); - Версия1 = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(Строка1, "."); + Версия1 = СтрРазделить(Строка1, "."); Если Версия1.Количество() <> 3 Тогда ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Неправильный формат параметра СтрокаВерсии1: %1'"), СтрокаВерсии1); КонецЕсли; - Версия2 = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(Строка2, "."); + Версия2 = СтрРазделить(Строка2, "."); Если Версия2.Количество() <> 3 Тогда ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Неправильный формат параметра СтрокаВерсии2: %1'"), СтрокаВерсии2); @@ -900,6 +938,9 @@ // Произвольный - Значение свойства структуры. ЗначениеПоУмолчанию если в структуре нет указанного свойства. // Функция СвойствоСтруктуры(Структура, Ключ, ЗначениеПоУмолчанию = Неопределено) Экспорт + Если Структура = Неопределено Тогда + Возврат Неопределено; + КонецЕсли; Если Структура.Свойство(Ключ) Тогда Возврат Структура[Ключ]; Иначе @@ -910,12 +951,9 @@ // Возвращает имя COM-класса для работы с 1С:Предприятием 8 через COM-соединение. // Функция ИмяCOMСоединителя() Экспорт - СистемнаяИнфо = Новый СистемнаяИнформация; - ПодстрокиВерсии = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок( - СистемнаяИнфо.ВерсияПриложения, "."); + ПодстрокиВерсии = СтрРазделить(СистемнаяИнфо.ВерсияПриложения, "."); Возврат "v" + ПодстрокиВерсии[0] + ПодстрокиВерсии[1] + ".COMConnector"; - КонецФункции // Устанавливает внешнее соединение с информационной базой по переданным параметрам подключения и возвращает указатель @@ -980,8 +1018,11 @@ // Функция УстановитьВнешнееСоединениеСБазой(Параметры) Экспорт - Результат = Новый Структура("Соединение, КраткоеОписаниеОшибки, ПодробноеОписаниеОшибки, ОшибкаПодключенияКомпоненты", - Неопределено, "", "", Ложь); + Результат = Новый Структура; + Результат.Вставить("Соединение"); + Результат.Вставить("КраткоеОписаниеОшибки", ""); + Результат.Вставить("ПодробноеОписаниеОшибки", ""); + Результат.Вставить("ОшибкаПодключенияКомпоненты", Ложь); #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда ЭтоLinux = ОбщегоНазначения.ЭтоLinuxСервер(); @@ -1005,8 +1046,8 @@ СтрокаСообщенияОбОшибке = НСтр("ru = 'Не удалось подключится к другой программе: %1'"); Результат.ОшибкаПодключенияКомпоненты = Истина; - Результат.ПодробноеОписаниеОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(СтрокаСообщенияОбОшибке, ПодробноеПредставлениеОшибки(Информация)); - Результат.КраткоеОписаниеОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(СтрокаСообщенияОбОшибке, КраткоеПредставлениеОшибки(Информация)); + Результат.ПодробноеОписаниеОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(СтрокаСообщенияОбОшибке, ПодробноеПредставлениеОшибки(Информация)); + Результат.КраткоеОписаниеОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(СтрокаСообщенияОбОшибке, КраткоеПредставлениеОшибки(Информация)); Возврат Результат; КонецПопытки; @@ -1055,11 +1096,11 @@ СтрокаАутентификации = ""; Иначе - Если Найти(Параметры.ИмяПользователя, """") Тогда + Если СтрНайти(Параметры.ИмяПользователя, """") Тогда Параметры.ИмяПользователя = СтрЗаменить(Параметры.ИмяПользователя, """", """"""); КонецЕсли; - Если Найти(Параметры.ПарольПользователя, """") Тогда + Если СтрНайти(Параметры.ПарольПользователя, """") Тогда Параметры.ПарольПользователя = СтрЗаменить(Параметры.ПарольПользователя, """", """"""); КонецЕсли; @@ -1080,63 +1121,30 @@ Результат.ОшибкаПодключенияКомпоненты = Истина; Результат.ПодробноеОписаниеОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(СтрокаСообщенияОбОшибке, ПодробноеПредставлениеОшибки(Информация)); Результат.КраткоеОписаниеОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(СтрокаСообщенияОбОшибке, КраткоеПредставлениеОшибки(Информация)); - КонецПопытки; Возврат Результат; КонецФункции -//////////////////////////////////////////////////////////////////////////////// -// Процедуры и функции для обработки событий и вызова необязательных подсистем. - -// Устарела. Следует использовать ОбщегоНазначения.ПодсистемаСуществует или ОбщегоНазначенияКлиент.ПодсистемаСуществует. -// Возвращает Истина, если подсистема существует. +// Получает картинку для вывода на странице с комментарием в зависимости +// от наличия текста в комментарии. // // Параметры: -// ПолноеИмяПодсистемы - Строка. Полное имя объекта метаданных подсистема без слов "Подсистема.". -// Например: "СтандартныеПодсистемы.БазоваяФункциональность". -// -// Пример вызова необязательной подсистемы: -// -// Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.УправлениеДоступом") Тогда -// МодульУправлениеДоступом = ОбщегоНазначения.ОбщийМодуль("УправлениеДоступом"); -// МодульУправлениеДоступом.<Имя метода>(); -// КонецЕсли; +// Комментарий - Строка - текст комментария. // // Возвращаемое значение: -// Булево. +// Картинка - Картинка, которая должна отображаться на странице с комментарием. // -Функция ПодсистемаСуществует(ПолноеИмяПодсистемы) Экспорт - -#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда - Возврат ОбщегоНазначения.ПодсистемаСуществует(ПолноеИмяПодсистемы); -#Иначе - Возврат ОбщегоНазначенияКлиент.ПодсистемаСуществует(ПолноеИмяПодсистемы); -#КонецЕсли +Функция КартинкаКомментария(Комментарий) Экспорт -КонецФункции - -// Устарела. Следует использовать ОбщегоНазначения.ОбщийМодуль или ОбщегоНазначенияКлиент.ОбщийМодуль. -// Возвращает ссылку на общий модуль по имени. -// -// Параметры: -// Имя - Строка - имя общего модуля, например: -// "ОбщегоНазначения", -// "ОбщегоНазначенияКлиент". -// -// Возвращаемое значение: -// ОбщийМодуль. -// -Функция ОбщийМодуль(Имя) Экспорт + Если НЕ ПустаяСтрока(Комментарий) Тогда + Картинка = БиблиотекаКартинок.Комментарий; + Иначе + Картинка = Новый Картинка; + КонецЕсли; -#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда - Модуль = ОбщегоНазначения.ОбщийМодуль(Имя); -#Иначе - Модуль = ОбщегоНазначенияКлиент.ОбщийМодуль(Имя); -#КонецЕсли - - Возврат Модуль; + Возврат Картинка; КонецФункции @@ -1164,7 +1172,7 @@ ДобавляемыйСимвол = ПолучитьРазделительПути(); - Если Прав(ПутьКаталога, 1) = ДобавляемыйСимвол Тогда + Если СтрЗаканчиваетсяНа(ПутьКаталога, ДобавляемыйСимвол) Тогда Возврат ПутьКаталога; Иначе Возврат ПутьКаталога + ДобавляемыйСимвол; @@ -1249,10 +1257,10 @@ КонецЕсли; // Выделяем путь к файлу и имя файла. - Если Найти(ПолноеИмяФайла, "/") > 0 Тогда - ПозицияРазделителя = СтроковыеФункцииКлиентСервер.НайтиСимволСКонца(ПолноеИмяФайла, "/"); - ИначеЕсли Найти(ПолноеИмяФайла, "\") > 0 Тогда - ПозицияРазделителя = СтроковыеФункцииКлиентСервер.НайтиСимволСКонца(ПолноеИмяФайла, "\"); + Если СтрНайти(ПолноеИмяФайла, "/") > 0 Тогда + ПозицияРазделителя = СтрНайти(ПолноеИмяФайла, "/", НаправлениеПоиска.СКонца); + ИначеЕсли СтрНайти(ПолноеИмяФайла, "\") > 0 Тогда + ПозицияРазделителя = СтрНайти(ПолноеИмяФайла, "\", НаправлениеПоиска.СКонца); Иначе ПозицияРазделителя = 0; КонецЕсли; @@ -1264,7 +1272,7 @@ СтруктураИмениФайла.Вставить("Расширение", ""); СтруктураИмениФайла.Вставить("ИмяБезРасширения", СтруктураИмениФайла.Имя); Иначе - ПозицияТочки = СтроковыеФункцииКлиентСервер.НайтиСимволСКонца(СтруктураИмениФайла.Имя, "."); + ПозицияТочки = СтрНайти(СтруктураИмениФайла.Имя, ".", НаправлениеПоиска.СКонца); Если ПозицияТочки = 0 Тогда СтруктураИмениФайла.Вставить("Расширение", ""); СтруктураИмениФайла.Вставить("ИмяБезРасширения", СтруктураИмениФайла.Имя); @@ -1301,7 +1309,7 @@ // схема Схема = ""; - Позиция = Найти(СтрокаURI, "://"); + Позиция = СтрНайти(СтрокаURI, "://"); Если Позиция > 0 Тогда Схема = НРег(Лев(СтрокаURI, Позиция - 1)); СтрокаURI = Сред(СтрокаURI, Позиция + 3); @@ -1310,7 +1318,7 @@ // Строка соединения и путь на сервере. СтрокаСоединения = СтрокаURI; ПутьНаСервере = ""; - Позиция = Найти(СтрокаСоединения, "/"); + Позиция = СтрНайти(СтрокаСоединения, "/"); Если Позиция > 0 Тогда ПутьНаСервере = Сред(СтрокаСоединения, Позиция + 1); СтрокаСоединения = Лев(СтрокаСоединения, Позиция - 1); @@ -1319,7 +1327,7 @@ // Информация пользователя и имя сервера. СтрокаАвторизации = ""; ИмяСервера = СтрокаСоединения; - Позиция = Найти(СтрокаСоединения, "@"); + Позиция = СтрНайти(СтрокаСоединения, "@"); Если Позиция > 0 Тогда СтрокаАвторизации = Лев(СтрокаСоединения, Позиция - 1); ИмяСервера = Сред(СтрокаСоединения, Позиция + 1); @@ -1328,7 +1336,7 @@ // логин и пароль Логин = СтрокаАвторизации; Пароль = ""; - Позиция = Найти(СтрокаАвторизации, ":"); + Позиция = СтрНайти(СтрокаАвторизации, ":"); Если Позиция > 0 Тогда Логин = Лев(СтрокаАвторизации, Позиция - 1); Пароль = Сред(СтрокаАвторизации, Позиция + 1); @@ -1337,10 +1345,13 @@ // хост и порт Хост = ИмяСервера; Порт = ""; - Позиция = Найти(ИмяСервера, ":"); + Позиция = СтрНайти(ИмяСервера, ":"); Если Позиция > 0 Тогда Хост = Лев(ИмяСервера, Позиция - 1); Порт = Сред(ИмяСервера, Позиция + 1); + Если Не СтроковыеФункцииКлиентСервер.ТолькоЦифрыВСтроке(Порт) Тогда + Порт = ""; + КонецЕсли; КонецЕсли; Результат = Новый Структура; @@ -1431,41 +1442,6 @@ КонецФункции -// Возвращает разделитель пути файловой системы. -// -// Параметры: -// Платформа - Неопределено - -// На клиенте - разделитель пути клиентской файловой системы. -// На сервере - разделитель пути серверной файловой системы. -// -// - ТипПлатформы - разделитель пути файловой системы для -// указанного типа платформы. -// -Функция РазделительПути(Платформа = Неопределено) Экспорт - - Если Платформа = Неопределено Тогда - - #Если ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда - СистемнаяИнфо = Новый СистемнаяИнформация; - Платформа = СистемнаяИнфо.ТипПлатформы; - #ИначеЕсли Клиент Тогда - Платформа = ОбщегоНазначенияКлиентПовтИсп.ТипПлатформыКлиента(); - #Иначе - Платформа = ОбщегоНазначенияПовтИсп.ТипПлатформыСервера(); - #КонецЕсли - - КонецЕсли; - - Если Платформа = ТипПлатформы.Windows_x86 - ИЛИ Платформа = ТипПлатформы.Windows_x86_64 Тогда - - Возврат "\"; - Иначе - Возврат "/"; - КонецЕсли; - -КонецФункции - // Возвращает имя файла с расширением. // Если расширение пустое, тогда точка не добавляется. // @@ -1515,7 +1491,7 @@ Для ПозицияСимвола = 1 По СтрДлина(НедопустимыеСимволы) Цикл ПроверяемыйСимвол = Сред(НедопустимыеСимволы,ПозицияСимвола,1); - Если Найти(ИмяФайла,ПроверяемыйСимвол) <> 0 Тогда + Если СтрНайти(ИмяФайла,ПроверяемыйСимвол) <> 0 Тогда МассивНайденныхНедопустимыхСимволов.Добавить(ПроверяемыйСимвол); КонецЕсли; КонецЦикла; @@ -1579,7 +1555,7 @@ Строка = СтрЗаменить(Строка, ",", ";"); // Раскладываем mailbox-list на mailbox'ы. - МассивАдресов = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(Строка, ";", Истина); + МассивАдресов = СтрРазделить(Строка, ";", Ложь); // Допустимые символы для псевдонима (display-name). Буквы = "abcdefghijklmnopqrstuvwxyzабвгдеёжзийклмнопрстуфхцчшщъыьэюя"; @@ -1597,7 +1573,7 @@ Псевдоним = СтрокаАдреса; Иначе // Все, что не подходит в качестве адреса, складываем в псевдоним. - Для Каждого Подстрока Из СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(СтрокаАдреса, " ") Цикл + Для Каждого Подстрока Из СтрРазделить(СтрокаАдреса, " ", Ложь) Цикл Если ПустаяСтрока(Адрес) И АдресЭлектроннойПочтыСоответствуетТребованиям(Подстрока) Тогда Адрес = Подстрока; Иначе @@ -1611,7 +1587,7 @@ // проверки ЕстьНедопустимыеСимволыВПсевдониме = Не СтрокаСодержитТолькоДопустимыеСимволы(НРег(Псевдоним), Буквы + Цифры + ДополнительныеСимволы); АдресОпределен = Не ПустаяСтрока(Адрес); - ЕстьПризнакНаличияАдресаВСтроке = Найти(СтрокаАдреса, "@") > 0; + ЕстьПризнакНаличияАдресаВСтроке = СтрНайти(СтрокаАдреса, "@") > 0; Если АдресОпределен Тогда Если ЕстьНедопустимыеСимволыВПсевдониме Тогда @@ -1658,7 +1634,7 @@ Символ2 = Сред(СпецСимволы, Позиция2, 1); Комбинация1 = Символ1 + Символ2; Комбинация2 = Символ2 + Символ1; - Если Найти(Адрес, Комбинация1) > 0 Или Найти(Адрес, Комбинация2) > 0 Тогда + Если СтрНайти(Адрес, Комбинация1) > 0 Или СтрНайти(Адрес, Комбинация2) > 0 Тогда Возврат Ложь; КонецЕсли; КонецЦикла; @@ -1671,7 +1647,7 @@ КонецЕсли; // проверяем две точки подряд - Если Найти(Адрес, "..") > 0 Тогда + Если СтрНайти(Адрес, "..") > 0 Тогда Возврат Ложь; КонецЕсли; @@ -1684,7 +1660,7 @@ КонецЕсли; // Разбираем адрес на local-part и domain. - Позиция = Найти(Адрес,"@"); + Позиция = СтрНайти(Адрес,"@"); ЛокальноеИмя = Лев(Адрес, Позиция - 1); Домен = Сред(Адрес, Позиция + 1); @@ -1703,21 +1679,21 @@ КонецЕсли; // В домене должна быть минимум одна точка. - Если Не РазрешитьЛокальныеАдреса И Найти(Домен,".") = 0 Тогда + Если Не РазрешитьЛокальныеАдреса И СтрНайти(Домен,".") = 0 Тогда Возврат Ложь; КонецЕсли; // В домене не должно быть символа подчеркивания. - Если Найти(Домен,"_") > 0 Тогда + Если СтрНайти(Домен,"_") > 0 Тогда Возврат Ложь; КонецЕсли; // Выделяем зону (TLD) из имени домена. Зона = Домен; - Позиция = Найти(Зона,"."); + Позиция = СтрНайти(Зона,"."); Пока Позиция > 0 Цикл Зона = Сред(Зона, Позиция + 1); - Позиция = Найти(Зона,"."); + Позиция = СтрНайти(Зона,"."); КонецЦикла; // Проверяем зону домена (минимум 2 символа, только буквы). @@ -1759,19 +1735,8 @@ СообщениеНедопустимыеСимволы = НСтр("ru = 'Недопустимый символ ""%1"" в адресе электронной почты ""%2""'"); СообщениеНеверныйФорматПочтовогоАдреса = НСтр("ru = 'Некорректный адрес электронной почты ""%1""'"); - МассивПодстрок = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(СтрокаПереданныхАдресов,";",Истина); - МассивПодстрокКОбработке = Новый Массив; - - Для каждого ЭлементМассива Из МассивПодстрок Цикл - Если Найти(ЭлементМассива,",") > 0 Тогда - ДопМассивПодстрок = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(СтрокаПереданныхАдресов); - Для каждого ЭлементДопМассива Из ДопМассивПодстрок Цикл - МассивПодстрокКОбработке.Добавить(ЭлементДопМассива); - КонецЦикла; - Иначе - МассивПодстрокКОбработке.Добавить(ЭлементМассива); - КонецЕсли; - КонецЦикла; + СтрокаПереданныхАдресов = СтрЗаменить(СтрокаПереданныхАдресов, ",", ";"); + МассивПодстрокКОбработке = СтрРазделить(СокрЛП(СтрокаПереданныхАдресов), ";", Ложь); Для Каждого СтрокаАдреса Из МассивПодстрокКОбработке Цикл @@ -1805,25 +1770,22 @@ СтадияРазбора = 2; Для ИндексПоискаНС = 1 По СтрДлина(Накопитель) Цикл - Если Найти(НедопустимыеСимволы, Сред(Накопитель, ИндексПоискаНС, 1)) > 0 И ВызыватьИсключение Тогда - ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - СообщениеНедопустимыеСимволы,Сред(Накопитель, ИндексПоискаНС, 1),СтрокаАдреса); + Если СтрНайти(НедопустимыеСимволы, Сред(Накопитель, ИндексПоискаНС, 1)) > 0 И ВызыватьИсключение Тогда + ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(СообщениеНедопустимыеСимволы, + Сред(Накопитель, ИндексПоискаНС, 1),СтрокаАдреса); КонецЕсли; КонецЦикла; Накопитель = Накопитель + Символ; ИначеЕсли СтадияРазбора = 2 И ВызыватьИсключение Тогда - ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - СообщениеНеверныйФорматПочтовогоАдреса,СтрокаАдреса); + ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(СообщениеНеверныйФорматПочтовогоАдреса,СтрокаАдреса); ИначеЕсли СтадияРазбора = 3 И ВызыватьИсключение Тогда - ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - СообщениеНеверныйФорматПочтовогоАдреса,СтрокаАдреса); + ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(СообщениеНеверныйФорматПочтовогоАдреса,СтрокаАдреса); КонецЕсли; Иначе Если СтадияРазбора = 2 ИЛИ СтадияРазбора = 3 Тогда - Если Найти(НедопустимыеСимволы, Символ) > 0 И ВызыватьИсключение Тогда - ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - СообщениеНедопустимыеСимволы,Символ,СтрокаАдреса); + Если СтрНайти(НедопустимыеСимволы, Символ) > 0 И ВызыватьИсключение Тогда + ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(СообщениеНедопустимыеСимволы,Символ,СтрокаАдреса); КонецЕсли; КонецЕсли; @@ -1840,11 +1802,9 @@ КонецЕсли; Если ПустаяСтрока(ПочтовыйАдрес) И (Не ПустаяСтрока(ПолноеИмяАдресата)) И ВызыватьИсключение Тогда - ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - СообщениеНеверныйФорматПочтовогоАдреса, ПолноеИмяАдресата); + ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(СообщениеНеверныйФорматПочтовогоАдреса, ПолноеИмяАдресата); ИначеЕсли СтрЧислоВхождений(ПочтовыйАдрес, "@") <> 1 И ВызыватьИсключение Тогда - ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - СообщениеНеверныйФорматПочтовогоАдреса,ПочтовыйАдрес); + ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(СообщениеНеверныйФорматПочтовогоАдреса,ПочтовыйАдрес); КонецЕсли; Если НЕ (ПустаяСтрока(ПолноеИмяАдресата) И ПустаяСтрока(ПочтовыйАдрес)) Тогда @@ -2223,7 +2183,7 @@ // ПутьРеквизита - строка, путь к данным, например: "Объект.МесяцНачисления". Функция ПолучитьРеквизитФормыПоПути(Форма, ПутьРеквизита) Экспорт - МассивИмен = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(ПутьРеквизита, "."); + МассивИмен = СтрРазделить(ПутьРеквизита, "."); Объект = Форма; ПоследнееПоле = МассивИмен[МассивИмен.Количество()-1]; @@ -2243,7 +2203,7 @@ // Значение Процедура УстановитьРеквизитФормыПоПути(Форма, ПутьРеквизита, Значение, ТолькоЕслиНеЗаполнен = Ложь) Экспорт - МассивИмен = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(ПутьРеквизита, "."); + МассивИмен = СтрРазделить(ПутьРеквизита, "."); Объект = Форма; ПоследнееПоле = МассивИмен[МассивИмен.Количество()-1]; @@ -2317,39 +2277,6 @@ КонецФункции -// Устарела. -// -// Возвращаемое значение: -// ОтображениеОбычнойГруппы - ОтображениеОбычнойГруппы.СлабоеВыделение. -// -Функция ОтображениеОбычнойГруппыЛиния() Экспорт - - Возврат ОтображениеОбычнойГруппы.СлабоеВыделение; - -КонецФункции - -// Устарела. -// -// Возвращаемое значение: -// ОтображениеОбычнойГруппы - ОтображениеОбычнойГруппы.ОбычноеВыделение. -// -Функция ОтображениеОбычнойГруппыОтступ() Экспорт - - Возврат ОтображениеОбычнойГруппы.ОбычноеВыделение; - -КонецФункции - -// Устарела. -// -// Возвращаемое значение: -// ОтображениеОбычнойГруппы - ОтображениеОбычнойГруппы.СильноеВыделение. -// -Функция ОтображениеОбычнойГруппыРамкаГруппы() Экспорт - - Возврат ОтображениеОбычнойГруппы.СильноеВыделение; - -КонецФункции - //////////////////////////////////////////////////////////////////////////////// // Работа с предопределенными данными. // @@ -2576,15 +2503,14 @@ #Иначе УстановитьПривилегированныйРежим(Истина); - СтрокаСоединенияИнформационнойБазы = СтандартныеПодсистемыСервер.ПараметрыКлиентаНаСервере( - ).Получить("СтрокаСоединенияИнформационнойБазы"); + СтрокаСоединенияИнформационнойБазы = СтандартныеПодсистемыСервер.ПараметрыКлиентаНаСервере().Получить("СтрокаСоединенияИнформационнойБазы"); Если СтрокаСоединенияИнформационнойБазы = Неопределено Тогда Возврат Ложь; // Нет клиентского приложения. КонецЕсли; #КонецЕсли - Возврат Найти(ВРег(СтрокаСоединенияИнформационнойБазы), "WS=") = 1; + Возврат СтрНайти(ВРег(СтрокаСоединенияИнформационнойБазы), "WS=") = 1; КонецФункции @@ -2649,8 +2575,7 @@ #Иначе УстановитьПривилегированныйРежим(Истина); - ЭтоВебКлиентПодMacOS = СтандартныеПодсистемыСервер.ПараметрыКлиентаНаСервере( - ).Получить("ЭтоВебКлиентПодMacOS"); + ЭтоВебКлиентПодMacOS = СтандартныеПодсистемыСервер.ПараметрыКлиентаНаСервере().Получить("ЭтоВебКлиентПодMacOS"); Если ЭтоВебКлиентПодMacOS = Неопределено Тогда Возврат Ложь; // Нет клиентского приложения. @@ -2670,7 +2595,7 @@ ПараметрЗапускаПриложения = ПараметрЗапуска; #КонецЕсли - Возврат Найти(ПараметрЗапускаПриложения, "РежимОтладки") > 0; + Возврат СтрНайти(ПараметрЗапускаПриложения, "РежимОтладки") > 0; КонецФункции // Вызывает исключение с текстом Сообщение, если Условие не равно Истина. @@ -2691,8 +2616,7 @@ ТекстИсключения = Сообщение; КонецЕсли; Если Не ПустаяСтрока(КонтекстПроверки) Тогда - ТекстИсключения = ТекстИсключения + " " + - СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'в %1'"), КонтекстПроверки); + ТекстИсключения = ТекстИсключения + " " + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'в %1'"), КонтекстПроверки); КонецЕсли; ВызватьИсключение ТекстИсключения; КонецЕсли; @@ -2728,13 +2652,16 @@ Проверить(ЭтоОписаниеТипов Или ТипЗнч(ОжидаемыеТипы) = Тип("Тип"), НСтр("ru = 'Недопустимо значение параметра ОжидаемыеТипы'"), Контекст); + ЭтоКорректныйТип = (ЭтоОписаниеТипов И ОжидаемыеТипы.СодержитТип(ТипЗнч(ЗначениеПараметра))) + Или (Не ЭтоОписаниеТипов И ОжидаемыеТипы = ТипЗнч(ЗначениеПараметра)); НедопустимыйПараметр = НСтр("ru = 'Недопустимое значение параметра %1 в %2. |Ожидалось: %3; передано значение: %4 (тип %5).'"); - Проверить((ЭтоОписаниеТипов И ОжидаемыеТипы.СодержитТип(ТипЗнч(ЗначениеПараметра))) - Или (Не ЭтоОписаниеТипов И ОжидаемыеТипы = ТипЗнч(ЗначениеПараметра)), - СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НедопустимыйПараметр, - ИмяПараметра, ИмяПроцедурыИлиФункции, ОжидаемыеТипы, - ?(ЗначениеПараметра <> Неопределено, ЗначениеПараметра, НСтр("ru = 'Неопределено'")), ТипЗнч(ЗначениеПараметра))); + Проверить(ЭтоКорректныйТип, СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НедопустимыйПараметр, + ИмяПараметра, + ИмяПроцедурыИлиФункции, + ОжидаемыеТипы, + ?(ЗначениеПараметра <> Неопределено, ЗначениеПараметра, НСтр("ru = 'Неопределено'")), + ТипЗнч(ЗначениеПараметра))); Если ТипЗнч(ЗначениеПараметра) = Тип("Структура") И ОжидаемыеТипыСвойств <> Неопределено Тогда @@ -2752,17 +2679,19 @@ ЗначениеСвойства = Неопределено; Проверить(ЗначениеПараметра.Свойство(ОжидаемоеИмяСвойства, ЗначениеСвойства), - СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НетСвойства, - ИмяПараметра, ИмяПроцедурыИлиФункции, ОжидаемоеИмяСвойства, ОжидаемыйТипСвойства)); + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НетСвойства, ИмяПараметра, ИмяПроцедурыИлиФункции, ОжидаемоеИмяСвойства, ОжидаемыйТипСвойства)); ЭтоОписаниеТипов = ТипЗнч(ОжидаемыйТипСвойства) = Тип("ОписаниеТипов"); - Проверить((ЭтоОписаниеТипов И ОжидаемыйТипСвойства.СодержитТип(ТипЗнч(ЗначениеСвойства))) - Или (Не ЭтоОписаниеТипов И ОжидаемыйТипСвойства = ТипЗнч(ЗначениеСвойства)), - СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НедопустимоеСвойство, - ОжидаемоеИмяСвойства, ИмяПараметра, ИмяПроцедурыИлиФункции, ОжидаемыйТипСвойства, - ?(ЗначениеСвойства <> Неопределено, ЗначениеСвойства, НСтр("ru = 'Неопределено'")), ТипЗнч(ЗначениеСвойства))); - - КонецЦикла; + ЭтоКорректныйТип = (ЭтоОписаниеТипов И ОжидаемыйТипСвойства.СодержитТип(ТипЗнч(ЗначениеСвойства))) + Или (Не ЭтоОписаниеТипов И ОжидаемыйТипСвойства = ТипЗнч(ЗначениеСвойства)); + Проверить(ЭтоКорректныйТип, СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НедопустимоеСвойство, + ОжидаемоеИмяСвойства, + ИмяПараметра, + ИмяПроцедурыИлиФункции, + ОжидаемыйТипСвойства, + ?(ЗначениеСвойства <> Неопределено, ЗначениеСвойства, НСтр("ru = 'Неопределено'")), + ТипЗнч(ЗначениеСвойства))); + КонецЦикла; КонецЕсли; КонецПроцедуры @@ -2827,28 +2756,6 @@ КонецФункции -//////////////////////////////////////////////////////////////////////////////// -// Устаревшие процедуры и функции. - -// Устарела. Следует использовать РазделительПути. -Функция ПолучитьСлеш(Платформа = Неопределено) Экспорт - - Возврат РазделительПути(Платформа); - -КонецФункции - -// Устарела. Следует удалить все использования этой функции и ветки кода при значении Ложь. -// -Функция ЭтоПлатформа83БезРежимаСовместимости() Экспорт - Возврат Истина; -КонецФункции - -// Устарела. Следует удалить все использования этой функции и ветки кода при значении Ложь. -// -Функция ЭтоПлатформа83() Экспорт - Возврат Истина; -КонецФункции - //////////////////////////////////////////////////////////////////////////////// // ВСПОМОГАТЕЛЬНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ @@ -2885,28 +2792,28 @@ ПочтовыйАдрес = СокрЛП(ПочтовыйАдрес); ПолноеИмяАдресата = СокрЛП(ПолноеИмяАдресата); - Если Лев(ПолноеИмяАдресата, 1) = "<" Тогда - Если Прав(ПолноеИмяАдресата, 1) = ">" Тогда + Если СтрНачинаетсяС(ПолноеИмяАдресата, "<") Тогда + Если СтрЗаканчиваетсяНа(ПолноеИмяАдресата, ">") Тогда ПолноеИмяАдресата = Сред(ПолноеИмяАдресата, 2, СтрДлина(ПолноеИмяАдресата)-2); Иначе ВызватьИсключение НедопустимыйСимволВИмениАдресата; КонецЕсли; - ИначеЕсли Лев(ПолноеИмяАдресата, 1) = "[" Тогда - Если Прав(ПолноеИмяАдресата, 1) = "]" Тогда + ИначеЕсли СтрНачинаетсяС(ПолноеИмяАдресата, "[") Тогда + Если СтрЗаканчиваетсяНа(ПолноеИмяАдресата, "]") Тогда ПолноеИмяАдресата = Сред(ПолноеИмяАдресата, 2, СтрДлина(ПолноеИмяАдресата)-2); Иначе ВызватьИсключение НедопустимыйСимволВИмениАдресата; КонецЕсли; КонецЕсли; - Если Лев(ПочтовыйАдрес, 1) = "<" Тогда - Если Прав(ПочтовыйАдрес, 1) = ">" Тогда + Если СтрНачинаетсяС(ПочтовыйАдрес, "<") Тогда + Если СтрЗаканчиваетсяНа(ПочтовыйАдрес, ">") Тогда ПочтовыйАдрес = Сред(ПочтовыйАдрес, 2, СтрДлина(ПочтовыйАдрес)-2); Иначе ВызватьИсключение НедопустимыйСимволВПочтовомАдресе; КонецЕсли; - ИначеЕсли Лев(ПочтовыйАдрес, 1) = "[" Тогда - Если Прав(ПочтовыйАдрес, 1) = "]" Тогда + ИначеЕсли СтрНачинаетсяС(ПочтовыйАдрес, "[") Тогда + Если СтрЗаканчиваетсяНа(ПочтовыйАдрес, "]") Тогда ПочтовыйАдрес = Сред(ПочтовыйАдрес, 2, СтрДлина(ПочтовыйАдрес)-2); Иначе ВызватьИсключение НедопустимыйСимволВПочтовомАдресе; @@ -2914,8 +2821,8 @@ КонецЕсли; Для Индекс = 1 По СтрДлина(СимволыОбрамления) Цикл - Если Найти(ПолноеИмяАдресата, Сред(СимволыОбрамления, Индекс, 1)) <> 0 - ИЛИ Найти(ПочтовыйАдрес, Сред(СимволыОбрамления, Индекс, 1)) <> 0 Тогда + Если СтрНайти(ПолноеИмяАдресата, Сред(СимволыОбрамления, Индекс, 1)) <> 0 + ИЛИ СтрНайти(ПочтовыйАдрес, Сред(СимволыОбрамления, Индекс, 1)) <> 0 Тогда ВызватьИсключение НедопустимыйСимволВПочтовомАдресе; КонецЕсли; КонецЦикла; diff --git a/SSL/src/CommonModules/ОбщегоНазначенияПереопределяемый/Module.bsl b/SSL/src/CommonModules/ОбщегоНазначенияПереопределяемый/Module.bsl index 8e9bfa130..2091f8c44 100644 --- a/SSL/src/CommonModules/ОбщегоНазначенияПереопределяемый/Module.bsl +++ b/SSL/src/CommonModules/ОбщегоНазначенияПереопределяемый/Module.bsl @@ -52,14 +52,7 @@ // Процедура ПриДобавленииИсключенийПоискаСсылок(ИсключенияПоискаСсылок) Экспорт -КонецПроцедуры - -// Устанавливает текстовое описание предмета. -// -// Параметры: -// СсылкаНаПредмет - ЛюбаяСсылка - объект ссылочного типа. -// Представление - Строка - сюда необходимо поместить текстовое описание. -Процедура УстановитьПредставлениеПредмета(СсылкаНаПредмет, Представление) Экспорт + КонецПроцедуры @@ -153,9 +146,9 @@ // подтверждение при завершении работы программы не // будет запрашиваться, если явно не разрешить в // персональных настройках программы. -// * ОтключитьСправочникИдентификаторыОбъектовМетаданных - Булево - отключает заполнение справочника. -// ИдентификаторыОбъектовМетаданных, процедуры выгрузки и загрузки элементов справочника в узлах РИБ. -// Для частичного встраивании отдельных функций библиотеки в конфигурации без постановки на поддержку. +// * ОтключитьИдентификаторыОбъектовМетаданных - Булево - отключает заполнение справочников ИдентификаторыОбъектовМетаданных +// и ИдентификаторыОбъектовРасширений, процедуру выгрузки и загрузки в узлах РИБ. +// Для частичного встраивания отдельных функций библиотеки в конфигурации без постановки на поддержку. // * РекомендуемыйОбъемОперативнойПамяти - Число - объем памяти в гигабайтах, рекомендуемый для комфортной работы в программе. // Процедура ПриОпределенииОбщихПараметровБазовойФункциональности(ОбщиеПараметры) Экспорт @@ -164,16 +157,20 @@ КонецПроцедуры -// Обработчик события "Перед загрузкой идентификаторов объектов метаданных в подчиненном РИБ узле". +// Обработчик события "Перед загрузкой приоритетных данных в подчиненном РИБ узле". // Выполняет заполнение настроек размещения сообщения обмена данными или -// нестандартную загрузку идентификаторов объектов метаданных из главного узла. +// нестандартную загрузку приоритетных данных из главного узла. +// +// К приоритетным данным относятся предопределенные элементы, а также +// элементы справочника Идентификаторы объектов метаданных. // // Параметры: -// СтандартнаяОбработка - Булево, начальное значение Истина, если установить Ложь, тогда стандартная загрузка -// идентификаторов объектов метаданных с помощью подсистемы ОбменДанными будет пропущена (тоже -// будет и в случае, если подсистемы ОбменДанными нет). +// СтандартнаяОбработка - Булево, начальное значение Истина, если установить Ложь, +// тогда стандартная загрузка приоритетных данных с помощью подсистемы +// ОбменДанными будет пропущена (тоже будет и в случае, +// если подсистемы ОбменДанными нет). // -Процедура ПередЗагрузкойИдентификаторовОбъектовМетаданныхВПодчиненномРИБУзле(СтандартнаяОбработка) Экспорт +Процедура ПередЗагрузкойПриоритетныхДанныхВПодчиненномРИБУзле(СтандартнаяОбработка) Экспорт @@ -219,82 +216,4 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// Устаревший программный интерфейс. - -// Устарела. Будет удалена в следующей редакции. См. ПриОпределенииОбщихПараметровБазовойФункциональности. -Процедура ИмяФормыПерсональныхНастроек(ИмяФормы) Экспорт - -КонецПроцедуры - -// Устарела. Будет удалена в следующей редакции. См. ПриОпределенииОбщихПараметровБазовойФункциональности. -Процедура ПолучитьМинимальноНеобходимуюВерсиюПлатформы(ПараметрыПроверки) Экспорт - -КонецПроцедуры - -// Устарела. Будет удалена в следующей редакции. См. ПриДобавленииПереименованийОбъектовМетаданных. -Процедура ЗаполнитьТаблицуПереименованияОбъектовМетаданных(Итог) Экспорт - -КонецПроцедуры - -// Устарела. Следует использовать ПриДобавленииОбработчиковУстановкиПараметровСеанса. -// Возвращает соответствие имен параметров сеанса и обработчиков для их инициализации. -// -Функция ОбработчикиИнициализацииПараметровСеанса() Экспорт - - // Для задания обработчиков параметров сеанса следует использовать шаблон: - // Обработчики.Вставить("<ИмяПараметраСеанса>|<НачалоИмениПараметраСеанса*>", "Обработчик"); - // - // Примечание. Символ '*'используется в конце имени параметра сеанса и обозначает, - // что один обработчик будет вызван для инициализации всех параметров сеанса - // с именем, начинающимся на слово НачалоИмениПараметраСеанса. - // - - Обработчики = Новый Соответствие; - - Возврат Обработчики; - -КонецФункции - -// Устарела. Следует использовать ПриДобавленииИсключенийПоискаСсылок. -// -// Объекты метаданных, содержимое которых не должно учитывается в бизнес-логике приложения. -// -// Описание: -// Для документа "Реализация товаров и услуг" настроены подсистемы "Версионирование объектов" и "Свойства". -// При этом документ может быть указан в других объектах метаданных - документах или регистрах. -// Часть ссылок имеют значение для бизнес-логики (например движения по регистрам) и должны выводиться пользователю. -// Другая часть ссылок - "техногенные" ссылки на документ из данных подсистем "Версионирование объектов" и "Свойства", -// должны скрываться от пользователя при поиске ссылок на объект. -// Например, при анализе мест использования или в подсистеме запрета редактирования ключевых реквизитов. -// Список таких "техногенных" объектов нужно перечислить в этой функции. -// -// Важно: -// Для избежания появления пустых "битых" ссылок рекомендуется предусмотреть процедуру очистки указанных объектов -// метаданных. -// Для измерений регистров сведений - с помощью установки флажка "Ведущее", -// тогда запись регистра сведений будет удалена вместе с удалением ссылки, указанной в измерении. -// Для других реквизитов указанных объектов - с помощью подписки на событие ПередУдалением всех типов объектов -// метаданных, которые могут быть записаны в реквизиты указанных объектов метаданных. -// В обработчике необходимо найти "техногенные" объекты, в реквизитах которых указана ссылка удаляемого объекта, -// и выбрать как именно очищать ссылку: очищать значение реквизита, удалять строку таблицы или удалять весь объект. -// -// Например: -// Массив.Добавить(Метаданные.РегистрыСведений.ВерсииОбъектов); -// Массив.Добавить(Метаданные.РегистрыСведений.ВерсииОбъектов.Реквизиты.АвторВерсии); -// Массив.Добавить("РегистрСведений.ВерсииОбъектов"); -// -// Возвращаемое значение: -// Массив - Объекты метаданных или их реквизиты, содержимое которых не должно учитывается в бизнес-логике приложения. -// * ОбъектМетаданных - Объект метаданных или его реквизит. -// * Строка - Полное имя объекта метаданных или его реквизита. -// -Функция ПолучитьИсключенияПоискаСсылок() Экспорт - - Массив = Новый Массив; - - Возврат Массив; - -КонецФункции - #КонецОбласти diff --git a/SSL/src/CommonModules/ОбщегоНазначенияПовтИсп/Module.bsl b/SSL/src/CommonModules/ОбщегоНазначенияПовтИсп/Module.bsl index 83fa78abb..3cdfdd68a 100644 --- a/SSL/src/CommonModules/ОбщегоНазначенияПовтИсп/Module.bsl +++ b/SSL/src/CommonModules/ОбщегоНазначенияПовтИсп/Module.bsl @@ -292,8 +292,7 @@ МетаданныеОбщегоРеквизита = Метаданные.ОбщиеРеквизиты.Найти(Разделитель); Если МетаданныеОбщегоРеквизита = Неопределено Тогда - ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Общий реквизит %1 не обнаружен в конфигурации!'"), Разделитель); + ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Общий реквизит %1 не обнаружен в конфигурации!'"), Разделитель); КонецЕсли; Если МетаданныеОбщегоРеквизита.РазделениеДанных = Метаданные.СвойстваОбъектов.РазделениеДанныхОбщегоРеквизита.Разделять Тогда @@ -336,8 +335,7 @@ Иначе - ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Для общего реквизита %1 не используется разделение данных!'"), Разделитель); + ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Для общего реквизита %1 не используется разделение данных!'"), Разделитель); КонецЕсли; @@ -415,11 +413,24 @@ КонецФункции +// Возвращает Истина, если программа работает в режиме автономного рабочего места. +Функция ЭтоАвтономноеРабочееМесто() Экспорт + + Если Не ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ОбменДанными") Тогда + Возврат Ложь; + КонецЕсли; + + МодульОбменДаннымиПовтИсп = ОбщегоНазначения.ОбщийМодуль("ОбменДаннымиПовтИсп"); + + Возврат МодульОбменДаннымиПовтИсп.ЭтоАвтономноеРабочееМесто(); + +КонецФункции + #КонецОбласти #Область СлужебныеПроцедурыИФункции -// Возвращает данные кеша версий из ресурса типа ХранилищеЗначения регистра КэшПрограммныхИнтерфейсов. +// Возвращает данные кэша версий из ресурса типа ХранилищеЗначения регистра КэшПрограммныхИнтерфейсов. // // Параметры: // Идентификатор - Строка - идентификатор записи кэша. @@ -483,16 +494,18 @@ Если ТребуетсяВыполнитьОбновление Тогда - ОбновлениеВТекущемСеансе = ОбщегоНазначения.ИнформационнаяБазаФайловая() Или МонопольныйРежим() - Или ОбщегоНазначенияКлиентСервер.РежимОтладки(); + ОбновлениеВТекущемСеансе = ТребуетсяПеречитатьДанные + Или ОбщегоНазначения.ИнформационнаяБазаФайловая() + Или МонопольныйРежим() + Или ОбщегоНазначенияКлиентСервер.РежимОтладки() + Или ТекущийРежимЗапуска() = Неопределено; Если ОбновлениеВТекущемСеансе Тогда ОбщегоНазначения.ОбновитьДанныеКэшаВерсий(Идентификатор, ТипДанных, ПараметрыПолучения); ТребуетсяПеречитатьДанные = Истина; Иначе ИмяМетодаЗадания = "ОбщегоНазначения.ОбновитьДанныеКэшаВерсий"; - НаименованиеЗадание = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Обновление кэша версий. Идентификатор записи %1. Тип данных %2.'"), + НаименованиеЗадания = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Обновление кэша версий. Идентификатор записи %1. Тип данных %2.'"), Идентификатор, ТипДанных); ПараметрыЗадания = Новый Массив; @@ -502,50 +515,18 @@ ОтборЗаданий = Новый Структура; ОтборЗаданий.Вставить("ИмяМетода", ИмяМетодаЗадания); - ОтборЗаданий.Вставить("Наименование", НаименованиеЗадание); + ОтборЗаданий.Вставить("Наименование", НаименованиеЗадания); ОтборЗаданий.Вставить("Состояние", СостояниеФоновогоЗадания.Активно); Задания = ФоновыеЗадания.ПолучитьФоновыеЗадания(ОтборЗаданий); Если Задания.Количество() = 0 Тогда - // Запустим новое - ФоновыеЗадания.Выполнить(ИмяМетодаЗадания, ПараметрыЗадания, , НаименованиеЗадание); - // Задание могло сразу завершиться из-за обновления данных другим заданием. - Задания = ФоновыеЗадания.ПолучитьФоновыеЗадания(ОтборЗаданий); + // Запустим новое. + СтандартныеПодсистемыСервер.ЗапуститьФоновоеЗаданиеСКонтекстомКлиента(ИмяМетодаЗадания, + ПараметрыЗадания,, НаименованиеЗадания); КонецЕсли; КонецЕсли; Если ТребуетсяПеречитатьДанные Тогда - Если НЕ ОбновлениеВТекущемСеансе Тогда - Попытка - // Дождемся завершения - ФоновыеЗадания.ОжидатьЗавершения(Задания); - Исключение - Для каждого ИсходноеЗадание Из Задания Цикл - Задание = ФоновыеЗадания.НайтиПоУникальномуИдентификатору(ИсходноеЗадание.УникальныйИдентификатор); - Если Задание.Состояние <> СостояниеФоновогоЗадания.ЗавершеноАварийно Тогда - Продолжить; - КонецЕсли; - - Если Задание.ИнформацияОбОшибке <> Неопределено Тогда - ЗаписьЖурналаРегистрации(НСтр("ru = 'Обновление кэша версий'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), - УровеньЖурналаРегистрации.Ошибка, - , - , - ПодробноеПредставлениеОшибки(Задание.ИнформацияОбОшибке)); - ВызватьИсключение(КраткоеПредставлениеОшибки(Задание.ИнформацияОбОшибке)); - Иначе - ЗаписьЖурналаРегистрации(НСтр("ru = 'Обновление кэша версий'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), - УровеньЖурналаРегистрации.Ошибка, - , - , - ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); - ВызватьИсключение(НСтр("ru = 'Неизвестная ошибка при выполнения задания обновления кэша версий'")); - КонецЕсли; - КонецЦикла; - - ВызватьИсключение(НСтр("ru = 'Неизвестная ошибка при обновлении кэша версий'")); - КонецПопытки; - КонецЕсли; НачатьТранзакцию(); Попытка @@ -561,8 +542,7 @@ ШаблонСообщения = НСтр("ru = 'Ошибка при обновлении кэша версий. Данные не получены. |Идентификатор записи: %1 |Тип данных: %2'"); - ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - ШаблонСообщения, Идентификатор, ТипДанных); + ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонСообщения, Идентификатор, ТипДанных); ВызватьИсключение(ТекстСообщения); КонецЕсли; @@ -616,8 +596,7 @@ Исключение ИнформацияОбОшибке = ИнформацияОбОшибке(); ИмяСобытия = НСтр("ru = 'Настройка интерфейса'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()); - ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'При получении опций интерфейса произошла ошибка: + ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'При получении опций интерфейса произошла ошибка: |%1'"), ПодробноеПредставлениеОшибки(ИнформацияОбОшибке)); ЗаписьЖурналаРегистрации(ИмяСобытия, УровеньЖурналаРегистрации.Ошибка,,, ТекстОшибки); diff --git a/SSL/src/CommonModules/ОрганизацииСлужебный/Module.bsl b/SSL/src/CommonModules/ОрганизацииСлужебный/Module.bsl index 43317c471..a8deb385d 100644 --- a/SSL/src/CommonModules/ОрганизацииСлужебный/Module.bsl +++ b/SSL/src/CommonModules/ОрганизацииСлужебный/Module.bsl @@ -25,6 +25,25 @@ КонецФункции +//////////////////////////////////////////////////////////////////////////////// +// Условные вызовы подсистем БСП. + +// Определить объекты метаданных, в модулях менеджеров которых ограничивается возможность +// редактирования реквизитов при групповом изменении. +// +// Параметры: +// Объекты - Соответствие - в качестве ключа указать полное имя объекта метаданных, +// подключенного к подсистеме "Групповое изменение объектов". +// Дополнительно в значении могут быть перечислены имена экспортных функций: +// "РеквизитыНеРедактируемыеВГрупповойОбработке", +// "РеквизитыРедактируемыеВГрупповойОбработке". +// Каждое имя должно начинаться с новой строки. +// Если указана пустая строка, значит в модуле менеджера определены обе функции. +// +Процедура ПриОпределенииОбъектовСРедактируемымиРеквизитами(Объекты) Экспорт + Объекты.Вставить(Метаданные.Справочники.Организации.ПолноеИмя(), "РеквизитыНеРедактируемыеВГрупповойОбработке"); +КонецПроцедуры + #КонецОбласти #Область СлужебныеПроцедурыИФункции @@ -116,15 +135,16 @@ // Их можно удалить, если они не требуются для ограничения прав доступа. // // Параметры: -// ВидыДоступа - ТаблицаЗначений с полями: -// - Имя - Строка - имя используемое в описании поставляемых -// профилей групп доступа и текстах ОДД. -// - Представление - Строка - представляет вид доступа в профилях и группах доступа. -// - ТипЗначений - Тип - тип ссылки значений доступа. Например, Тип("СправочникСсылка.Номенклатура"). -// - ТипГруппЗначений - Тип - тип ссылки групп значений доступа. Например, -// Тип("СправочникСсылка.ГруппыДоступаНоменклатуры"). -// - НесколькоГруппЗначений - Булево - Истина указывает, что для значения доступа (Номенклатуры), -// можно выбрать несколько групп значений (Групп доступа номенклатуры). +// ВидыДоступа - ТаблицаЗначений - с колонками: +// * Имя - Строка - имя используемое в описании поставляемых +// профилей групп доступа и текстах ОДД. +// * Представление - Строка - представляет вид доступа в профилях и группах доступа. +// * ТипЗначений - Тип - тип ссылки значений доступа. +// Например, Тип("СправочникСсылка.Номенклатура"). +// * ТипГруппЗначений - Тип - тип ссылки групп значений доступа. +// Например, Тип("СправочникСсылка.ГруппыДоступаНоменклатуры"). +// * НесколькоГруппЗначений - Булево - Истина указывает, что для значения доступа (Номенклатуры), можно +// выбрать несколько групп значений (Групп доступа номенклатуры). // Процедура ПриЗаполненииВидовДоступа(ВидыДоступа) Экспорт @@ -152,23 +172,4 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// Условные вызовы подсистем БСП. - -// Определить объекты метаданных, в модулях менеджеров которых ограничивается возможность -// редактирования реквизитов при групповом изменении. -// -// Параметры: -// Объекты - Соответствие - в качестве ключа указать полное имя объекта метаданных, -// подключенного к подсистеме "Групповое изменение объектов". -// Дополнительно в значении могут быть перечислены имена экспортных функций: -// "РеквизитыНеРедактируемыеВГрупповойОбработке", -// "РеквизитыРедактируемыеВГрупповойОбработке". -// Каждое имя должно начинаться с новой строки. -// Если указана пустая строка, значит в модуле менеджера определены обе функции. -// -Процедура ПриОпределенииОбъектовСРедактируемымиРеквизитами(Объекты) Экспорт - Объекты.Вставить(Метаданные.Справочники.Организации.ПолноеИмя(), "РеквизитыНеРедактируемыеВГрупповойОбработке"); -КонецПроцедуры - #КонецОбласти diff --git a/SSL/src/CommonModules/ОтправкаSMS/Module.bsl b/SSL/src/CommonModules/ОтправкаSMS/Module.bsl index 1495ea32b..4115006a9 100644 --- a/SSL/src/CommonModules/ОтправкаSMS/Module.bsl +++ b/SSL/src/CommonModules/ОтправкаSMS/Module.bsl @@ -22,6 +22,8 @@ // то ошибки нет. Функция ОтправитьSMS(НомераПолучателей, Знач Текст, ИмяОтправителя = "", ПеревестиВТранслит = Ложь) Экспорт + ПроверитьПрава(); + Результат = Новый Структура("ОтправленныеСообщения,ОписаниеОшибки", Новый Массив, ""); Если ПеревестиВТранслит Тогда @@ -75,6 +77,8 @@ // Функция СтатусДоставки(ИдентификаторСообщения) Экспорт + ПроверитьПрава(); + Если ПустаяСтрока(ИдентификаторСообщения) Тогда Возврат "НеОтправлялось"; КонецЕсли; @@ -104,6 +108,8 @@ // Проверяет правильность сохраненных настроек отправки SMS. Функция НастройкаОтправкиSMSВыполнена() Экспорт + УстановитьПривилегированныйРежим(Истина); + Результат = Истина; НастройкиОтправкиSMS = НастройкиОтправкиSMS(); @@ -122,6 +128,11 @@ КонецФункции +// Проверяет возможность отправки SMS для текущего пользователя. +Функция ДоступнаОтправкаSMS() Экспорт + Возврат Пользователи.РолиДоступны("ОтправкаSMS") И НастройкаОтправкиSMSВыполнена(); +КонецФункции + #КонецОбласти #Область СлужебныйПрограммныйИнтерфейс @@ -130,10 +141,28 @@ Процедура ПриДобавленииОбработчиковСлужебныхСобытий(КлиентскиеОбработчики, СерверныеОбработчики) Экспорт // СЕРВЕРНЫЕ ОБРАБОТЧИКИ. + СерверныеОбработчики["СтандартныеПодсистемы.БазоваяФункциональность\ПриДобавленииПараметровРаботыКлиента"].Добавить( + "ОтправкаSMS"); СерверныеОбработчики["СтандартныеПодсистемы.БазоваяФункциональность\ПриЗаполненииРазрешенийНаДоступКВнешнимРесурсам"].Добавить( "ОтправкаSMS"); - + + +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// Обновление ИБ. + +// Предназначена для перевода паролей в безопасное хранилище. +// Используется в обработчике обновления ИБ. +Процедура ПеренестиПаролиВБезопасноеХранилище() Экспорт + ЛогинДляОтправкиSMS = Константы.УдалитьЛогинДляОтправкиSMS.Получить(); + ПарольДляОтправкиSMS = Константы.УдалитьПарольДляОтправкиSMS.Получить(); + Владелец = ОбщегоНазначения.ИдентификаторОбъектаМетаданных("Константа.ПровайдерSMS"); + УстановитьПривилегированныйРежим(Истина); + ОбщегоНазначения.ЗаписатьДанныеВБезопасноеХранилище(Владелец, ПарольДляОтправкиSMS); + ОбщегоНазначения.ЗаписатьДанныеВБезопасноеХранилище(Владелец, ЛогинДляОтправкиSMS, "Логин"); + УстановитьПривилегированныйРежим(Ложь); КонецПроцедуры #КонецОбласти @@ -168,12 +197,33 @@ КонецФункции Функция НастройкиОтправкиSMS() - Результат = Новый Структура; - Результат.Вставить("Логин", Константы.ЛогинДляОтправкиSMS.Получить()); - Результат.Вставить("Пароль", Константы.ПарольДляОтправкиSMS.Получить()); - Результат.Вставить("Провайдер", Константы.ПровайдерSMS.Получить()); - + Результат = Новый Структура("Логин, Пароль, Провайдер"); + Если ОбщегоНазначенияПовтИсп.ДоступноИспользованиеРазделенныхДанных() Тогда + Владелец = ОбщегоНазначения.ИдентификаторОбъектаМетаданных("Константа.ПровайдерSMS"); + УстановитьПривилегированныйРежим(Истина); + ПарольИЛогин = ОбщегоНазначения.ПрочитатьДанныеИзБезопасногоХранилища(Владелец, "Пароль,Логин"); + УстановитьПривилегированныйРежим(Ложь); + Результат.Логин = ПарольИЛогин.Логин; + Результат.Пароль = ПарольИЛогин.Пароль; + Результат.Провайдер =Константы.ПровайдерSMS.Получить(); + КонецЕсли; Возврат Результат; КонецФункции +// Заполняет структуру параметров, необходимых для работы клиентского кода +// конфигурации. +// +// Параметры: +// Параметры - Структура - структура параметров. +// +Процедура ПриДобавленииПараметровРаботыКлиента(Параметры) Экспорт + Параметры.Вставить("ДоступнаОтправкаSMS", ДоступнаОтправкаSMS()); +КонецПроцедуры + +Процедура ПроверитьПрава() + Если Не Пользователи.РолиДоступны("ОтправкаSMS") Тогда + ВызватьИсключение НСтр("ru = 'Недостаточно прав для выполнения операции.'"); + КонецЕсли; +КонецПроцедуры + #КонецОбласти diff --git a/SSL/src/CommonModules/ОтправкаSMSКлиент/Module.bsl b/SSL/src/CommonModules/ОтправкаSMSКлиент/Module.bsl new file mode 100644 index 000000000..0d2a7c24a --- /dev/null +++ b/SSL/src/CommonModules/ОтправкаSMSКлиент/Module.bsl @@ -0,0 +1,82 @@ +#Область ПрограммныйИнтерфейс + +// Открывает форму для отправки нового SMS. +// +// Параметры: +// НомераПолучателей - Массив - номера получателей в формате +<КодСтраны><КодDEF><номер>(строкой); +// Текст - Строка - текст сообщения, длиной не более 1000 символов; +// ДополнительныеПараметры- Структура - дополнительные параметры отправки SMS +// * ИмяОтправителя - Строка - имя отправителя, которое будет отображаться вместо номера у получателей. +// * ПеревестиВТранслит - Булево - Истина, если требуется переводить текст сообщения в транслит перед отправкой. +Процедура ОтправитьSMS(НомераПолучателей, Текст, ДополнительныеПараметры) Экспорт + + СтандартнаяОбработка = Истина; + ОтправкаSMSКлиентПереопределяемый.ПриОтправкеSMS(НомераПолучателей, Текст, ДополнительныеПараметры, СтандартнаяОбработка); + Если СтандартнаяОбработка Тогда + ПараметрыОтправки = Новый Структура("НомераПолучателей, Текст, ДополнительныеПараметры, ПараметрыРаботыКлиента"); + ПараметрыОтправки.НомераПолучателей = НомераПолучателей; + ПараметрыОтправки.Текст = Текст; + ПараметрыОтправки.ДополнительныеПараметры = ДополнительныеПараметры; + ОписаниеОповещения = Новый ОписаниеОповещения("СоздатьНовоеSMSПроверкаНастроекВыполнена", ЭтотОбъект, ПараметрыОтправки); + ПроверитьНаличиеНастроекДляОтправкиSMS(ОписаниеОповещения); + КонецЕсли; + +КонецПроцедуры + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +// Если у пользователя нет настроек для отправки SMS, то в зависимости от прав либо показывает +// форму настройки SMS, либо выводит сообщение о невозможности отправки. +// +// Параметры: +// ОбработчикРезультата - ОписаниеОповещение - процедура, в которую необходимо передать выполнение кода после проверки. +// +Процедура ПроверитьНаличиеНастроекДляОтправкиSMS(ОбработчикРезультата) Экспорт + + ПараметрыРаботыКлиента = СтандартныеПодсистемыКлиентПовтИсп.ПараметрыРаботыКлиента(); + Если ПараметрыРаботыКлиента.ДоступнаОтправкаSMS Тогда + ВыполнитьОбработкуОповещения(ОбработчикРезультата, Истина); + Иначе + Если ПараметрыРаботыКлиента.ЭтоПолноправныйПользователь Тогда + ОписаниеОповещения = Новый ОписаниеОповещения("ПослеНастройкиSMS", ЭтотОбъект, ОбработчикРезультата); + ОткрытьФорму("ОбщаяФорма.НастройкаОтправкиSMS",,,,,, ОписаниеОповещения); + Иначе + ТекстСообщения = НСтр("ru = 'Для отправки SMS требуется произвести настройку параметров подключения + |Обратитесь к администратору.'"); + ПоказатьПредупреждение(, ТекстСообщения); + КонецЕсли; + КонецЕсли; + +КонецПроцедуры + +Процедура ПослеНастройкиSMS(Результат, ОбработчикРезультата) Экспорт + ПараметрыРаботыКлиента = СтандартныеПодсистемыКлиентПовтИсп.ПараметрыРаботыКлиента(); + Если ПараметрыРаботыКлиента.ДоступнаОтправкаSMS Тогда + ВыполнитьОбработкуОповещения(ОбработчикРезультата, Истина); + КонецЕсли; +КонецПроцедуры + +// Продолжение процедуры ОтправитьSMS. +Процедура СоздатьНовоеSMSПроверкаНастроекВыполнена(ОтправкаSMSНастроена, ПараметрыОтправки) Экспорт + Если ОтправкаSMSНастроена Тогда + ПараметрыРаботыКлиента = СтандартныеПодсистемыКлиентПовтИсп.ПараметрыРаботыКлиента(); + Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.Взаимодействия") + И ПараметрыРаботыКлиента.ИспользоватьПрочиеВзаимодействия Тогда + Адресаты = Новый Массив; + Для каждого ЭлементМассива Из ПараметрыОтправки.НомераПолучателей Цикл + Телефон = Новый Структура("Телефон, Представление, ИсточникКонтактнойИнформации", ЭлементМассива, ЭлементМассива, ""); + Адресаты.Добавить(Телефон); + КонецЦикла; + МодульВзаимодействияКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("ВзаимодействияКлиент"); + МодульВзаимодействияКлиент.ОткрытьФормуОтправкиSMS(Адресаты, ПараметрыОтправки.Текст,, ПараметрыОтправки.ДополнительныеПараметры.ПеревестиВТранслит); + Иначе + ОткрытьФорму("ОбщаяФорма.ОтправкаSMS", ПараметрыОтправки); + КонецЕсли; + КонецЕсли; + + +КонецПроцедуры + +#КонецОбласти \ No newline at end of file diff --git a/SSL/src/CommonModules/ОтправкаSMSКлиент/ОтправкаSMSКлиент.mdo b/SSL/src/CommonModules/ОтправкаSMSКлиент/ОтправкаSMSКлиент.mdo new file mode 100644 index 000000000..5b9796cb4 --- /dev/null +++ b/SSL/src/CommonModules/ОтправкаSMSКлиент/ОтправкаSMSКлиент.mdo @@ -0,0 +1,9 @@ +<?xml version="1.0" encoding="UTF-8"?> +<mdclass:CommonModule xmlns:mdclass="http://g5.1c.ru/v8/dt/metadata/mdclass" uuid="4fc5c023-91e2-4b3e-8f61-4dfe3be78f3a"> + <name>ОтправкаSMSКлиент</name> + <synonym> + <key>ru</key> + <value>Отправка SMSКлиент</value> + </synonym> + <clientManagedApplication>true</clientManagedApplication> +</mdclass:CommonModule> diff --git a/SSL/src/CommonModules/ОтправкаSMSКлиентПереопределяемый/Module.bsl b/SSL/src/CommonModules/ОтправкаSMSКлиентПереопределяемый/Module.bsl new file mode 100644 index 000000000..9623a4900 --- /dev/null +++ b/SSL/src/CommonModules/ОтправкаSMSКлиентПереопределяемый/Module.bsl @@ -0,0 +1,15 @@ +#Область ПрограммныйИнтерфейс + +// Открывает форму для отправки нового SMS. +// +// Параметры: +// НомераПолучателей - Массив - номера получателей в формате +<КодСтраны><КодDEF><номер>(строкой); +// Текст - Строка - текст сообщения, длиной не более 1000 символов; +// ДополнительныеПараметры - Структура - Дополнительные параметры отправки СМС +// * ИмяОтправителя - Строка - Имя отправителя, которое будет отображаться вместо номера у получателей. +// * ПеревестиВТранслит - Булево - Истина, если требуется переводить текст сообщения в транслит перед отправкой. +// СтандартнаяОбработка - Булево - Флаг необходимости выполнения стандартной обработки отправки SMS. +Процедура ПриОтправкеSMS(НомераПолучателей, Текст, ДополнительныеПараметры, СтандартнаяОбработка) Экспорт +КонецПроцедуры + +#КонецОбласти diff --git a/SSL/src/CommonModules/ОтправкаSMSКлиентПереопределяемый/ОтправкаSMSКлиентПереопределяемый.mdo b/SSL/src/CommonModules/ОтправкаSMSКлиентПереопределяемый/ОтправкаSMSКлиентПереопределяемый.mdo new file mode 100644 index 000000000..6f202104c --- /dev/null +++ b/SSL/src/CommonModules/ОтправкаSMSКлиентПереопределяемый/ОтправкаSMSКлиентПереопределяемый.mdo @@ -0,0 +1,9 @@ +<?xml version="1.0" encoding="UTF-8"?> +<mdclass:CommonModule xmlns:mdclass="http://g5.1c.ru/v8/dt/metadata/mdclass" uuid="646def82-bc88-4187-8be0-93938656a20f"> + <name>ОтправкаSMSКлиентПереопределяемый</name> + <synonym> + <key>ru</key> + <value>Отправка SMSКлиент переопределяемый</value> + </synonym> + <clientManagedApplication>true</clientManagedApplication> +</mdclass:CommonModule> diff --git a/SSL/src/CommonModules/ОтправкаSMSЧерезБилайн/Module.bsl b/SSL/src/CommonModules/ОтправкаSMSЧерезБилайн/Module.bsl index 3e4e30243..e31fc330a 100644 --- a/SSL/src/CommonModules/ОтправкаSMSЧерезБилайн/Module.bsl +++ b/SSL/src/CommonModules/ОтправкаSMSЧерезБилайн/Module.bsl @@ -223,7 +223,7 @@ ДопустимыеСимволы = "+1234567890"; Для Позиция = 1 По СтрДлина(Номер) Цикл Символ = Сред(Номер,Позиция,1); - Если Найти(ДопустимыеСимволы, Символ) > 0 Тогда + Если СтрНайти(ДопустимыеСимволы, Символ) > 0 Тогда Результат = Результат + Символ; КонецЕсли; КонецЦикла; diff --git a/SSL/src/CommonModules/ОтправкаSMSЧерезМТС/Module.bsl b/SSL/src/CommonModules/ОтправкаSMSЧерезМТС/Module.bsl index 651759574..a1f94db8c 100644 --- a/SSL/src/CommonModules/ОтправкаSMSЧерезМТС/Module.bsl +++ b/SSL/src/CommonModules/ОтправкаSMSЧерезМТС/Module.bsl @@ -77,7 +77,7 @@ ДопустимыеСимволы = "1234567890"; Для Позиция = 1 По СтрДлина(Номер) Цикл Символ = Сред(Номер,Позиция,1); - Если Найти(ДопустимыеСимволы, Символ) > 0 Тогда + Если СтрНайти(ДопустимыеСимволы, Символ) > 0 Тогда Результат = Результат + Символ; КонецЕсли; КонецЦикла; @@ -128,8 +128,7 @@ Разрешения = Новый Массив; Разрешения.Добавить( - РаботаВБезопасномРежиме.РазрешениеНаИспользованиеИнтернетРесурса(Протокол, Адрес, Порт, Описание) - ); + РаботаВБезопасномРежиме.РазрешениеНаИспользованиеИнтернетРесурса(Протокол, Адрес, Порт, Описание)); Возврат Разрешения; КонецФункции diff --git a/SSL/src/CommonModules/ОтчетыКлиент/Module.bsl b/SSL/src/CommonModules/ОтчетыКлиент/Module.bsl index e1ead6e02..451c7c2eb 100644 --- a/SSL/src/CommonModules/ОтчетыКлиент/Module.bsl +++ b/SSL/src/CommonModules/ОтчетыКлиент/Module.bsl @@ -5,81 +5,141 @@ #Область СлужебныеПроцедурыИФункции +Функция ПараметрыВыбораОтбора(Форма, Элемент) + ИдентификаторЭлемента = Прав(Элемент.Имя, 32); + + ЭлементКД = Форма.НайтиПользовательскуюНастройкуЭлемента(ИдентификаторЭлемента); + Если ЭлементКД = Неопределено Тогда + Возврат Неопределено; + КонецЕсли; + ДополнительныеНастройки = Форма.НайтиДополнительныеНастройкиЭлемента(ИдентификаторЭлемента); + Если ДополнительныеНастройки = Неопределено Тогда + Возврат Неопределено; + КонецЕсли; + + Результат = Новый Структура("Представление, ЗначенияДляВыбора, ОграничиватьВыборУказаннымиЗначениями, ОписаниеТипов, ВводСписком"); + ЗаполнитьЗначенияСвойств(Результат, ДополнительныеНастройки); + + Если ТипЗнч(ЭлементКД) = Тип("ЭлементОтбораКомпоновкиДанных") Тогда + Значение = ЭлементКД.ПравоеЗначение; + Условие = ЭлементКД.ВидСравнения; + Иначе + Значение = ЭлементКД.Значение; + Условие = ?(Результат.ВводСписком, ВидСравненияКомпоновкиДанных.ВСписке, ВидСравненияКомпоновкиДанных.Равно); + КонецЕсли; + + ВыборГруппИЭлементов = ОтчетыКлиентСервер.ПривестиЗначениеКТипуГруппыИЭлементы(Условие, ДополнительныеНастройки.ВыборГруппИЭлементов); + + // Стандартные параметры формы. + Результат.Вставить("ЗакрыватьПриВыборе", Истина); + Результат.Вставить("ЗакрыватьПриЗакрытииВладельца", Истина); + Результат.Вставить("Отбор", Новый Структура); + // Стандартные параметры формы выбора (см. Расширение управляемой формы для динамического списка). + Результат.Вставить("ВыборГруппИЭлементов", ВыборГруппИЭлементов); + Результат.Вставить("МножественныйВыбор", Ложь); + Результат.Вставить("РежимВыбора", Истина); + // Предполагаемые реквизиты. + Результат.Вставить("РежимОткрытияОкна", РежимОткрытияОкнаФормы.БлокироватьОкноВладельца); + Результат.Вставить("РазрешитьНачалоПеретаскивания", Ложь); + + Результат.Вставить("ПутьКФорме", ДополнительныеНастройки.ФормаВыбора); + + Результат.Вставить("Значение", Значение); + Результат.Вставить("Отмеченные", ОтчетыКлиентСервер.ЗначенияСписком(Значение)); + Результат.Вставить("ПараметрыВыбора", Новый Массив); + Результат.Вставить("КлючУникальности", ИдентификаторЭлемента); + + // Фиксированные параметры выбора и связи от скрытых ведущих (предопределенные в текущем контексте). + Для Каждого ПараметрВыбора Из ДополнительныеНастройки.ПараметрыВыбора Цикл + Если ПустаяСтрока(ПараметрВыбора.Имя) Тогда + Продолжить; + КонецЕсли; + Если Результат.ВводСписком Тогда + Результат.ПараметрыВыбора.Добавить(ПараметрВыбора); + Иначе + Если ВРег(Лев(ПараметрВыбора.Имя, 6)) = ВРег("Отбор.") Тогда + Результат.Отбор.Вставить(Сред(ПараметрВыбора.Имя, 7), ПараметрВыбора.Значение); + Иначе + Результат.Вставить(ПараметрВыбора.Имя, ПараметрВыбора.Значение); + КонецЕсли; + КонецЕсли; + КонецЦикла; + + // Динамические связи от ведущих. + Связи = Форма.ОтключаемыеСвязи.НайтиСтроки(Новый Структура("ПодчиненныйИдентификаторВФорме", ИдентификаторЭлемента)); + Для Каждого Связь Из Связи Цикл + Если Не ЗначениеЗаполнено(Связь.ВедущийИдентификаторВФорме) + Или Не ЗначениеЗаполнено(Связь.ПодчиненныйИмяПараметра) Тогда + Продолжить; + КонецЕсли; + ВедущийНастройкаКД = Форма.НайтиПользовательскуюНастройкуЭлемента(Связь.ВедущийИдентификаторВФорме); + Если Не ВедущийНастройкаКД.Использование Тогда + Продолжить; + КонецЕсли; + Если ТипЗнч(ВедущийНастройкаКД) = Тип("ЭлементОтбораКомпоновкиДанных") Тогда + ЗначениеВедущего = ВедущийНастройкаКД.ПравоеЗначение; + УсловиеВедущего = ВедущийНастройкаКД.ВидСравнения; + Иначе + ЗначениеВедущего = ВедущийНастройкаКД.Значение; + ДополнительноВедущего = Форма.НайтиДополнительныеНастройкиЭлемента(Связь.ВедущийИдентификаторВФорме); + Если ДополнительноВедущего.ВводСписком Тогда + УсловиеВедущего = ВидСравненияКомпоновкиДанных.ВСписке; + Иначе + УсловиеВедущего = ВидСравненияКомпоновкиДанных.Равно; + КонецЕсли; + КонецЕсли; + Попытка + ЗначениеЗаполнено = ЗначениеЗаполнено(ЗначениеВедущего); + Исключение + ЗначениеЗаполнено = Истина; + КонецПопытки; + Если Не ЗначениеЗаполнено Тогда + Продолжить; + КонецЕсли; + ТипЗначенияВедущего = ТипЗнч(ЗначениеВедущего); + + Если Связь.ТипСвязи = "ПоТипу" Тогда + Если УсловиеВедущего <> ВидСравненияКомпоновкиДанных.Равно Тогда + Продолжить; + КонецЕсли; + Результат.Вставить("ОграничениеТипа", ТипЗначенияВедущего); + Если Результат.ОписаниеТипов.СодержитТип(ТипЗначенияВедущего) Тогда + Вычитаемые = Результат.ОписаниеТипов.Типы(); + Вычитаемые.Удалить(Вычитаемые.Найти(ТипЗначенияВедущего)); + Результат.ОписаниеТипов = Новый ОписаниеТипов(Результат.ОписаниеТипов, , Вычитаемые); + КонецЕсли; + ИначеЕсли Связь.ТипСвязи = "ПоМетаданным" Или Связь.ТипСвязи = "ПараметровВыбора" Тогда + Если Связь.ТипСвязи = "ПоМетаданным" И Не Связь.ВедущийТип.СодержитТип(ТипЗначенияВедущего) Тогда + Продолжить; + КонецЕсли; + Если Результат.ВводСписком Тогда + Результат.ПараметрыВыбора.Добавить(Новый ПараметрВыбора(Связь.ПодчиненныйИмяПараметра, ЗначениеВедущего)); + Иначе + Если ВРег(Лев(Связь.ПодчиненныйИмяПараметра, 6)) = ВРег("Отбор.") Тогда + Результат.Отбор.Вставить(Сред(Связь.ПодчиненныйИмяПараметра, 7), ЗначениеВедущего); + Иначе + Результат.Вставить(Связь.ПодчиненныйИмяПараметра, ЗначениеВедущего); + КонецЕсли; + КонецЕсли; + КонецЕсли; + КонецЦикла; + + Возврат Результат; +КонецФункции + Процедура СписокКомпоновщикаНачалоВыбора(Форма, Элемент, ДанныеВыбора, СтандартнаяОбработка) Экспорт СтандартнаяОбработка = Ложь; - ИдентификаторЭлемента = Прав(Элемент.Имя, 32); - ПользовательскаяНастройкаКД = НайтиПользовательскуюНастройкуЭлемента(Форма, ИдентификаторЭлемента); - ДополнительныеНастройки = НайтиДополнительныеНастройкиЭлемента(Форма, ИдентификаторЭлемента); - Если ДополнительныеНастройки = Неопределено Тогда + ПараметрыФормы = ПараметрыВыбораОтбора(Форма, Элемент); + Если ПараметрыФормы = Неопределено Тогда Возврат; КонецЕсли; ПараметрыОбработчика = Новый Структура; ПараметрыОбработчика.Вставить("Форма", Форма); - ПараметрыОбработчика.Вставить("ИдентификаторЭлемента", ИдентификаторЭлемента); + ПараметрыОбработчика.Вставить("ИдентификаторЭлемента", Прав(Элемент.Имя, 32)); Обработчик = Новый ОписаниеОповещения("СписокКомпоновщикаЗавершениеВыбора", ЭтотОбъект, ПараметрыОбработчика); - Если ТипЗнч(ПользовательскаяНастройкаКД) = Тип("ЭлементОтбораКомпоновкиДанных") Тогда - Значение = ПользовательскаяНастройкаКД.ПравоеЗначение; - Иначе - Значение = ПользовательскаяНастройкаКД.Значение; - КонецЕсли; - - ПараметрыФормы = Новый Структура; - ПараметрыФормы.Вставить("КлючУникальности", ИдентификаторЭлемента); - ПараметрыФормы.Вставить("Отмеченные", ОтчетыКлиентСервер.ЗначенияСписком(Значение)); - ОбщегоНазначенияКлиентСервер.ДополнитьСтруктуру(ПараметрыФормы, ДополнительныеНастройки, Истина); - - ПараметрыФормы.Вставить("ПараметрыВыбора", Новый Массив); - - // Добавление фиксированных параметров выбора. - Для Каждого ПараметрВыбора Из Элемент.ПараметрыВыбора Цикл - Если ПустаяСтрока(ПараметрВыбора.Имя) Тогда - Продолжить; - КонецЕсли; - Если ЗначениеЗаполнено(ПараметрВыбора.Имя) Тогда - ПараметрыФормы.ПараметрыВыбора.Добавить(ПараметрВыбора); - КонецЕсли; - КонецЦикла; - - // Добавление динамических параметров выбора (от ведущих). Для обратной совместимости. - Для Каждого СвязьПараметраВыбора Из Элемент.СвязиПараметровВыбора Цикл - Если ПустаяСтрока(СвязьПараметраВыбора.Имя) Тогда - Продолжить; - КонецЕсли; - ВедущийЗначение = Форма[СвязьПараметраВыбора.ПутьКДанным]; - ПараметрыФормы.ПараметрыВыбора.Добавить(Новый ПараметрВыбора(СвязьПараметраВыбора.Имя, ВедущийЗначение)); - КонецЦикла; - - // Добавление динамических параметров выбора (от ведущих). - Найденные = Форма.ОтключаемыеСвязи.НайтиСтроки(Новый Структура("ПодчиненныйИдентификаторВФорме", ИдентификаторЭлемента)); - Для Каждого Связь Из Найденные Цикл - Если Не ЗначениеЗаполнено(Связь.ВедущийИдентификаторВФорме) - Или Не ЗначениеЗаполнено(Связь.ПодчиненныйИмяПараметра) Тогда - Продолжить; - КонецЕсли; - ВедущийНастройкаКД = НайтиПользовательскуюНастройкуЭлемента(Форма, Связь.ВедущийИдентификаторВФорме); - Если Не ВедущийНастройкаКД.Использование Тогда - Продолжить; - КонецЕсли; - Если ТипЗнч(ВедущийНастройкаКД) = Тип("ЭлементОтбораКомпоновкиДанных") Тогда - ВедущийЗначение = ВедущийНастройкаКД.ПравоеЗначение; - Иначе - ВедущийЗначение = ВедущийНастройкаКД.Значение; - КонецЕсли; - Если Связь.ТипСвязи = "ПараметровВыбора" Тогда - ПараметрыФормы.ПараметрыВыбора.Добавить(Новый ПараметрВыбора(Связь.ПодчиненныйИмяПараметра, ВедущийЗначение)); - ИначеЕсли Связь.ТипСвязи = "ПоТипу" Тогда - ВедущийТип = ТипЗнч(ВедущийЗначение); - Если ПараметрыФормы.ОписаниеТипов.СодержитТип(ВедущийТип) И ПараметрыФормы.ОписаниеТипов.Типы().Количество() > 1 Тогда - МассивТипов = Новый Массив; - МассивТипов.Добавить(ВедущийТип); - ПараметрыФормы.ОписаниеТипов = Новый ОписаниеТипов(МассивТипов); - КонецЕсли; - КонецЕсли; - КонецЦикла; - Блокировать = РежимОткрытияОкнаФормы.БлокироватьОкноВладельца; ОткрытьФорму("ОбщаяФорма.ВводЗначенийСпискомСФлажками", ПараметрыФормы, ЭтотОбъект, , , , Обработчик, Блокировать); @@ -93,8 +153,8 @@ ИдентификаторЭлемента = ПараметрыОбработчика.ИдентификаторЭлемента; - ПользовательскаяНастройкаКД = НайтиПользовательскуюНастройкуЭлемента(Форма, ИдентификаторЭлемента); - ДополнительныеНастройки = НайтиДополнительныеНастройкиЭлемента(Форма, ИдентификаторЭлемента); + ПользовательскаяНастройкаКД = Форма.НайтиПользовательскуюНастройкуЭлемента(ИдентификаторЭлемента); + ДополнительныеНастройки = Форма.НайтиДополнительныеНастройкиЭлемента(ИдентификаторЭлемента); // Загрузка выбранных значений в 2 списка. СписокЗначенийВСКД = Новый СписокЗначений; @@ -110,12 +170,7 @@ ЗаполнитьЗначенияСвойств(ДополнительныеНастройки.ЗначенияДляВыбора.Добавить(), ЭлементСпискаВФорме, "Значение, Представление"); КонецЕсли; Если ЭлементСпискаВФорме.Пометка Тогда - Если ТипЗнч(ЗначениеВФорме) = Тип("ОписаниеТипов") Тогда - ЗначениеВСКД = ЗначениеВФорме.Типы()[0]; - Иначе - ЗначениеВСКД = ЗначениеВФорме; - КонецЕсли; - ОтчетыКлиентСервер.ДобавитьУникальноеЗначениеВСписок(СписокЗначенийВСКД, ЗначениеВСКД, ЭлементСпискаВФорме.Представление, Истина); + ОтчетыКлиентСервер.ДобавитьУникальноеЗначениеВСписок(СписокЗначенийВСКД, ЗначениеВФорме, ЭлементСпискаВФорме.Представление, Истина); КонецЕсли; КонецЦикла; Если ТипЗнч(ПользовательскаяНастройкаКД) = Тип("ЭлементОтбораКомпоновкиДанных") Тогда @@ -129,32 +184,193 @@ Форма.ПользовательскиеНастройкиМодифицированы = Истина; #Если ВебКлиент Тогда - Форма.ОбновитьОтображениеДанных(); + Форма.ОбновитьОтображениеДанных(); // Для платформы. #КонецЕсли КонецПроцедуры -Функция НайтиПользовательскуюНастройкуЭлемента(Форма, ИдентификаторЭлемента) Экспорт - // Для пользовательских настроек хранятся идентификаторы компоновки данных, - // поскольку они не могут храниться по ссылке (происходит копирование значения). - КомпоновщикНастроек = ОтчетыКлиентСервер.КомпоновщикНастроек(Форма); - ИдентификаторКД = Форма.БыстрыйПоискПользовательскихНастроек.Получить(ИдентификаторЭлемента); - Если ИдентификаторКД = Неопределено Тогда - Возврат Неопределено; - Иначе - Возврат КомпоновщикНастроек.ПользовательскиеНастройки.ПолучитьОбъектПоИдентификатору(ИдентификаторКД); +Процедура ИзменитьВидСравнения(Форма, ИдентификаторЭлемента, ОбработчикРезультата) Экспорт + ПользовательскаяНастройкаКД = Форма.НайтиПользовательскуюНастройкуЭлемента(ИдентификаторЭлемента); + Если ПользовательскаяНастройкаКД = Неопределено Тогда + Возврат; КонецЕсли; -КонецФункции + ДополнительныеНастройки = Форма.НайтиДополнительныеНастройкиЭлемента(ИдентификаторЭлемента); + Если ДополнительныеНастройки = Неопределено Тогда + Возврат; + КонецЕсли; + + ИнформацияОТипах = ОтчетыКлиентСервер.АнализТипов(ДополнительныеНастройки.ОписаниеТипов, Ложь); + + Список = Новый СписокЗначений; + + Если ИнформацияОТипах.ОграниченнойДлины Тогда + + Список.Добавить(ВидСравненияКомпоновкиДанных.Равно); + Список.Добавить(ВидСравненияКомпоновкиДанных.НеРавно); + + Список.Добавить(ВидСравненияКомпоновкиДанных.ВСписке); + Список.Добавить(ВидСравненияКомпоновкиДанных.НеВСписке); + + Если ИнформацияОТипах.СодержитОбъектныеТипы Тогда + + Список.Добавить(ВидСравненияКомпоновкиДанных.ВСпискеПоИерархии); // НСтр("ru = 'В списке включая подчиненные'") + Список.Добавить(ВидСравненияКомпоновкиДанных.НеВСпискеПоИерархии); // НСтр("ru = 'Не в списке включая подчиненные'"). + + Список.Добавить(ВидСравненияКомпоновкиДанных.ВИерархии); // НСтр("ru = 'В группе'") + Список.Добавить(ВидСравненияКомпоновкиДанных.НеВИерархии); // НСтр("ru = 'Не в группе'") + + КонецЕсли; + + Если ИнформацияОТипах.КоличествоПримитивныхТипов > 0 Тогда + + Список.Добавить(ВидСравненияКомпоновкиДанных.Меньше); + Список.Добавить(ВидСравненияКомпоновкиДанных.МеньшеИлиРавно); + + Список.Добавить(ВидСравненияКомпоновкиДанных.Больше); + Список.Добавить(ВидСравненияКомпоновкиДанных.БольшеИлиРавно); + + КонецЕсли; + + КонецЕсли; + + Если ИнформацияОТипах.СодержитТипСтрока Тогда + + Список.Добавить(ВидСравненияКомпоновкиДанных.Содержит); + Список.Добавить(ВидСравненияКомпоновкиДанных.НеСодержит); + + Список.Добавить(ВидСравненияКомпоновкиДанных.Подобно); + Список.Добавить(ВидСравненияКомпоновкиДанных.НеПодобно); + + Список.Добавить(ВидСравненияКомпоновкиДанных.НачинаетсяС); + Список.Добавить(ВидСравненияКомпоновкиДанных.НеНачинаетсяС); + + КонецЕсли; + + Если ИнформацияОТипах.ОграниченнойДлины Тогда + + Список.Добавить(ВидСравненияКомпоновкиДанных.Заполнено); + Список.Добавить(ВидСравненияКомпоновкиДанных.НеЗаполнено); + + КонецЕсли; + + ТекущийЭлемент = Список.НайтиПоЗначению(ПользовательскаяНастройкаКД.ВидСравнения); + + Контекст = Новый Структура; + Контекст.Вставить("Форма", Форма); + Контекст.Вставить("ИдентификаторЭлемента", ИдентификаторЭлемента); + Контекст.Вставить("ОбработчикРезультата", ОбработчикРезультата); + + Обработчик = Новый ОписаниеОповещения("ИзменитьВидСравненияЗавершение", ЭтотОбъект, Контекст); + ФормаЗаголовок = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Выберите условие отбора ""%1""'"), ДополнительныеНастройки.Представление); + + Список.ПоказатьВыборЭлемента(Обработчик, ФормаЗаголовок, ТекущийЭлемент); +КонецПроцедуры -Функция НайтиДополнительныеНастройкиЭлемента(Форма, ИдентификаторЭлемента) Экспорт - // Для пользовательских настроек хранятся идентификаторы компоновки данных, - // поскольку они не могут храниться по ссылке (происходит копирование значения). - КомпоновщикНастроек = ОтчетыКлиентСервер.КомпоновщикНастроек(Форма); - ВсеДополнительныеНастройки = ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(КомпоновщикНастроек.ПользовательскиеНастройки.ДополнительныеСвойства, "ЭлементыФормы"); - Если ВсеДополнительныеНастройки = Неопределено Тогда - Возврат Неопределено; +Процедура ИзменитьВидСравненияЗавершение(ЭлементСписка, Контекст) Экспорт + Если ЭлементСписка = Неопределено Тогда + Результат = Неопределено; Иначе - Возврат ВсеДополнительныеНастройки[ИдентификаторЭлемента]; + Результат = ЭлементСписка.Значение; + ПользовательскаяНастройкаКД = Контекст.Форма.НайтиПользовательскуюНастройкуЭлемента(Контекст.ИдентификаторЭлемента); + ПользовательскаяНастройкаКД.ВидСравнения = Результат; КонецЕсли; -КонецФункции + + Если Контекст.ОбработчикРезультата <> Неопределено Тогда + ВыполнитьОбработкуОповещения(Контекст.ОбработчикРезультата, Результат); + КонецЕсли; +КонецПроцедуры + +Процедура ЗначениеКомпоновщикаНачалоВыбора(Форма, Элемент, ДанныеВыбора, СтандартнаяОбработка) Экспорт + СтандартнаяОбработка = Ложь; + + ПараметрыФормы = ПараметрыВыбораОтбора(Форма, Элемент); + Если ПараметрыФормы = Неопределено Тогда + Возврат; + КонецЕсли; + + Анализ = ОтчетыКлиентСервер.АнализТипов(ПараметрыФормы.ОписаниеТипов, Ложь); + Если Не Анализ.СодержитОбъектныеТипы Тогда + СтандартнаяОбработка = Истина; + Возврат; + КонецЕсли; + + ПараметрыФормы.Вставить("МножественныйВыбор", Ложь); + + Контекст = Новый Структура; + Контекст.Вставить("Форма", Форма); + Контекст.Вставить("Идентификатор", Прав(Элемент.Имя, 32)); + Контекст.Вставить("ПараметрыФормы", ПараметрыФормы); + + Обработчик = Новый ОписаниеОповещения("ЗначениеКомпоновщикаПоказатьВыборСсылкиПослеВыбораТипа", ЭтотОбъект, Контекст); + + Блокировать = РежимОткрытияОкнаФормы.БлокироватьОкноВладельца; + + // Полное имя формы выбора. + // Свойство "ФормаВыбора" недоступно на клиенте даже для чтения, + // поэтому для хранения предустановленных имен форм выбора используется коллекция БыстрыйПоискИменОбъектовМетаданных. + Если ЗначениеЗаполнено(ПараметрыФормы.ПутьКФорме) Тогда + ВыполнитьОбработкуОповещения(Обработчик, ПараметрыФормы.ПутьКФорме); + Иначе + // Выбор типа из списка. + СписокВыбора = Новый СписокЗначений; + СписокВыбора.ЗагрузитьЗначения(Анализ.ОбъектныеТипы); + + Если СписокВыбора.Количество() = 1 Тогда // Один тип - выбор не требуется. + ВыполнитьОбработкуОповещения(Обработчик, СписокВыбора[0]); + Иначе + Форма.ПоказатьВыборИзСписка(Обработчик, СписокВыбора); + КонецЕсли; + КонецЕсли; +КонецПроцедуры + +Процедура ЗначениеКомпоновщикаПоказатьВыборСсылкиПослеВыбораТипа(ПутьКФормеИлиЭлементСписка, Контекст) Экспорт + Если ТипЗнч(ПутьКФормеИлиЭлементСписка) = Тип("Строка") Тогда + ПутьКФорме = ПутьКФормеИлиЭлементСписка; + ИначеЕсли ТипЗнч(ПутьКФормеИлиЭлементСписка) = Тип("ЭлементСпискаЗначений") Тогда + Тип = ПутьКФормеИлиЭлементСписка.Значение; + ИмяОбъектаМетаданных = Контекст.Форма.БыстрыйПоискИменОбъектовМетаданных.Получить(Тип); + Если Контекст.ПараметрыФормы.ВыборГруппИЭлементов = ГруппыИЭлементы.Группы Тогда + ВидОбъектаМетаданных = ВРег(СтрРазделить(ИмяОбъектаМетаданных, ".")[0]); + Если ВидОбъектаМетаданных = "СПРАВОЧНИК" Или ВидОбъектаМетаданных = "ПЛАНВИДОВХАРАКТЕРИСТИК" Тогда + ПутьКФорме = ИмяОбъектаМетаданных + ".ФормаВыбораГруппы"; + Иначе + ПутьКФорме = ИмяОбъектаМетаданных + ".ФормаВыбора"; + КонецЕсли; + Иначе + ПутьКФорме = ИмяОбъектаМетаданных + ".ФормаВыбора"; + КонецЕсли; + Иначе + Возврат; + КонецЕсли; + + Обработчик = Новый ОписаниеОповещения("ЗначениеКомпоновщикаЗавершениеВыбора", ЭтотОбъект, Контекст); + + Блокировать = РежимОткрытияОкнаФормы.БлокироватьОкноВладельца; + + ОткрытьФорму(ПутьКФорме, Контекст.ПараметрыФормы, ЭтотОбъект, , , , Обработчик, Блокировать); +КонецПроцедуры + +Процедура ЗначениеКомпоновщикаЗавершениеВыбора(Ссылка, Контекст) Экспорт + Если Не Контекст.ПараметрыФормы.ОписаниеТипов.СодержитТип(ТипЗнч(Ссылка)) Или Не ЗначениеЗаполнено(Ссылка) Тогда + Возврат; + КонецЕсли; + + Форма = Контекст.Форма; + + ЭлементКД = Форма.НайтиПользовательскуюНастройкуЭлемента(Контекст.Идентификатор); + ДополнительныеНастройки = Форма.НайтиДополнительныеНастройкиЭлемента(Контекст.Идентификатор); + + Если ТипЗнч(ЭлементКД) = Тип("ЭлементОтбораКомпоновкиДанных") Тогда + ЭлементКД.ПравоеЗначение = Ссылка; + Иначе + ЭлементКД.Значение = Ссылка; + КонецЕсли; + + ЭлементКД.Использование = Истина; // Включение флажка. + + Форма.ПользовательскиеНастройкиМодифицированы = Истина; + #Если ВебКлиент Тогда + Форма.ОбновитьОтображениеДанных(); // Для платформы. + #КонецЕсли +КонецПроцедуры #КонецОбласти \ No newline at end of file diff --git a/SSL/src/CommonModules/ОтчетыКлиентПереопределяемый/Module.bsl b/SSL/src/CommonModules/ОтчетыКлиентПереопределяемый/Module.bsl index a32027aa6..c7169f327 100644 --- a/SSL/src/CommonModules/ОтчетыКлиентПереопределяемый/Module.bsl +++ b/SSL/src/CommonModules/ОтчетыКлиентПереопределяемый/Module.bsl @@ -43,7 +43,10 @@ // Результат - Булево - Истина, если вызов команды обработан. // // Вспомогательные методы: -// ОбщаяФорма.ФормаОтчета.ВыполнитьКонтекстныйВызовСервера() -> ОтчетыПереопределяемый.КонтекстныйВызовСервера(). +// ФормаОтчета.ВыполнитьКонтекстныйВызовСервера() <-> ОтчетыПереопределяемый.КонтекстныйВызовСервера(). +// +// См. также: +// Пример добавления команды в комментарии к обработчику ПриСозданииНаСервере(). // Процедура ОбработчикКоманды(ФормаОтчета, Команда, Результат) Экспорт diff --git a/SSL/src/CommonModules/ОтчетыКлиентСервер/Module.bsl b/SSL/src/CommonModules/ОтчетыКлиентСервер/Module.bsl index 5e9652729..f3e2ebf3c 100644 --- a/SSL/src/CommonModules/ОтчетыКлиентСервер/Module.bsl +++ b/SSL/src/CommonModules/ОтчетыКлиентСервер/Module.bsl @@ -46,6 +46,16 @@ // // См. также: // // "УправляемаяФорма.ПриСозданииНаСервере" в синтакс-помощнике. // // +// // Пример 1 - Добавление команды с обработчиком в ОтчетыКлиентПереопределяемый.ОбработчикКоманды: +// // Команда = Форма.Команды.Добавить("МояОсобеннаяКоманда"); +// // Команда.Действие = "Подключаемый_Команда"; +// // Команда.Заголовок = НСтр("ru = 'Моя команда...'"); +// // +// // Кнопка = Форма.Элементы.Добавить(Команда.Имя, Тип("КнопкаФормы"), Форма.Элементы.<ИмяПодменю>); +// // Кнопка.ИмяКоманды = Команда.Имя; +// // +// // Форма.ПостоянныеКоманды.Добавить(КомандаСоздать.Имя); +// // // Процедура ПриСозданииНаСервере(Форма, Отказ, СтандартнаяОбработка) Экспорт // // Обработка события. // КонецПроцедуры @@ -203,31 +213,6 @@ #КонецОбласти -#Область СлужебныйПрограммныйИнтерфейс - -// Формирует краткое представление ошибки. -// -// Параметры: -// ИнформацияОбОшибке - ИнформацияОбОшибке - Информация об ошибке. -// -// Возвращаемое значение: -// Строка - Краткое представление ошибки. -// -Функция КраткоеПредставлениеОшибкиФормированияОтчета(ИнформацияОбОшибке) Экспорт - - ОписаниеОшибки = ИнформацияОбОшибке.Описание; - ПричинаОшибки = ИнформацияОбОшибке.Причина; - Пока ПричинаОшибки <> Неопределено Цикл - ОписаниеОшибки = ПричинаОшибки.Описание; - ПричинаОшибки = ПричинаОшибки.Причина; - КонецЦикла; - - Возврат ОписаниеОшибки; - -КонецФункции - -#КонецОбласти - #Область СлужебныеПроцедурыИФункции // Находит доступную настройку для отбора или параметра. @@ -627,7 +612,7 @@ ЗначениеОтбора = ЭлементНастройки.Значение; КонецЕсли; Если ЗначениеОтбора <> НеОпределено Тогда - ПараметрВыбораИмена = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(СтрокаСвязи.РеквизитПоля, "."); + ПараметрВыбораИмена = СтрРазделить(СтрокаСвязи.РеквизитПоля, "."); Если ПараметрВыбораИмена.Количество() = 1 Тогда СтруктураПараметров.Вставить(ПараметрВыбораИмена[0], ЗначениеОтбора); ИначеЕсли ПараметрВыбораИмена[0] = "Отбор" Тогда @@ -816,18 +801,30 @@ // Приводит значение типа ИспользованиеГруппИЭлементов к типу ГруппыИЭлементы. // Для других типов возвращает значение Авто. // -Функция ПривестиЗначениеКТипуГруппыИЭлементы(ИсходноеЗначение) Экспорт - Если ИсходноеЗначение = ИспользованиеГруппИЭлементов.Элементы Тогда - Возврат ГруппыИЭлементы.Элементы; - ИначеЕсли ИсходноеЗначение = ИспользованиеГруппИЭлементов.ГруппыИЭлементы Тогда - Возврат ГруппыИЭлементы.ГруппыИЭлементы; - ИначеЕсли ИсходноеЗначение = ИспользованиеГруппИЭлементов.Группы Тогда - Возврат ГруппыИЭлементы.Группы; - ИначеЕсли ТипЗнч(ИсходноеЗначение) = Тип("ГруппыИЭлементы") Тогда +Функция ПривестиЗначениеКТипуГруппыИЭлементы(ИсходноеЗначение, ЗначениеПоУмолчанию = Неопределено) Экспорт + Тип = ТипЗнч(ИсходноеЗначение); + Если Тип = Тип("ГруппыИЭлементы") Тогда Возврат ИсходноеЗначение; - Иначе - Возврат ГруппыИЭлементы.Авто; + ИначеЕсли Тип = Тип("ИспользованиеГруппИЭлементов") Тогда + Если ИсходноеЗначение = ИспользованиеГруппИЭлементов.Элементы Тогда + Возврат ГруппыИЭлементы.Элементы; + ИначеЕсли ИсходноеЗначение = ИспользованиеГруппИЭлементов.ГруппыИЭлементы Тогда + Возврат ГруппыИЭлементы.ГруппыИЭлементы; + ИначеЕсли ИсходноеЗначение = ИспользованиеГруппИЭлементов.Группы Тогда + Возврат ГруппыИЭлементы.Группы; + КонецЕсли; + ИначеЕсли Тип = Тип("ВидСравненияКомпоновкиДанных") Тогда + Если ИсходноеЗначение = ВидСравненияКомпоновкиДанных.ВСписке + Или ИсходноеЗначение = ВидСравненияКомпоновкиДанных.ВСпискеПоИерархии + Или ИсходноеЗначение = ВидСравненияКомпоновкиДанных.НеВСписке + Или ИсходноеЗначение = ВидСравненияКомпоновкиДанных.НеВСпискеПоИерархии Тогда + Возврат ГруппыИЭлементы.ГруппыИЭлементы; + ИначеЕсли ИсходноеЗначение = ВидСравненияКомпоновкиДанных.ВИерархии + Или ИсходноеЗначение = ВидСравненияКомпоновкиДанных.НеВИерархии Тогда + Возврат ГруппыИЭлементы.Группы; + КонецЕсли; КонецЕсли; + Возврат ?(ЗначениеПоУмолчанию = Неопределено, ГруппыИЭлементы.Авто, ЗначениеПоУмолчанию); КонецФункции // Приводит значение типа ГруппыИЭлементы к типу ИспользованиеГруппИЭлементов. @@ -951,6 +948,89 @@ Возврат Неопределено; КонецФункции +// Определяет полный путь к элементу компоновки данных. +// +// Параметры: +// НастройкиКД - НастройкиКомпоновкиДанных - Корневой узел настроек, от которого строится полный путь. +// ЭлементКД - Произвольный - Узел настроек, к которому строится полный путь. +// +// Возвращаемое значение: +// Строка - полный путь к элементу. Может использоваться в функции НайтиЭлементПоПолномуПути(). +// Неопределено - если не удалось построить полный путь. +// +Функция ПолныйПутьКЭлементу(Знач НастройкиКД, Знач ЭлементКД) Экспорт + Результат = Новый Массив; + РодительКД = ЭлементКД; + Пока РодительКД <> Неопределено И РодительКД <> НастройкиКД Цикл + ЭлементКД = РодительКД; + РодительКД = РодительКД.Родитель; + ТипРодителя = ТипЗнч(РодительКД); + Если ТипРодителя = Тип("ТаблицаКомпоновкиДанных") Тогда + Индекс = РодительКД.Строки.Индекс(ЭлементКД); + Если Индекс = -1 Тогда + Индекс = РодительКД.Колонки.Индекс(ЭлементКД); + ИмяКоллекции = "Колонки"; + Иначе + ИмяКоллекции = "Строки"; + КонецЕсли; + ИначеЕсли ТипРодителя = Тип("ДиаграммаКомпоновкиДанных") Тогда + Индекс = РодительКД.Серии.Индекс(ЭлементКД); + Если Индекс = -1 Тогда + Индекс = РодительКД.Точки.Индекс(ЭлементКД); + ИмяКоллекции = "Точки"; + Иначе + ИмяКоллекции = "Серии"; + КонецЕсли; + ИначеЕсли ТипРодителя = Тип("НастройкиВложенногоОбъектаКомпоновкиДанных") Тогда + ИмяКоллекции = "Настройки"; + Индекс = Неопределено; + Иначе + ИмяКоллекции = "Структура"; + Индекс = РодительКД.Структура.Индекс(ЭлементКД); + КонецЕсли; + Если Индекс = -1 Тогда + Возврат Неопределено; + КонецЕсли; + Если Индекс <> Неопределено Тогда + Результат.Вставить(0, Индекс); + КонецЕсли; + Результат.Вставить(0, ИмяКоллекции); + КонецЦикла; + Возврат СтрСоединить(Результат, "/"); +КонецФункции + +// Находит элемент компоновки данных по полному пути. +// +// Параметры: +// НастройкиКД - НастройкиКомпоновкиДанных - Корневой узел настроек, в который вложен искомый элемент. +// ПолныйПутьКЭлементу - Строка - полный путь к элементу. Может быть получена в функции ПолныйПутьКЭлементу(). +// +// Возвращаемое значение: +// ЭлементКД - Произвольный - Найденный узел настроек. +// +Функция НайтиЭлементПоПолномуПути(Знач НастройкиКД, Знач ПолныйПутьКЭлементу) Экспорт + МассивИндексов = СтрРазделить(ПолныйПутьКЭлементу, "/", Ложь); + ЭлементКД = НастройкиКД; + Для Каждого Индекс Из МассивИндексов Цикл + Если Индекс = "Строки" Тогда + ЭлементКД = ЭлементКД.Строки; + ИначеЕсли Индекс = "Колонки" Тогда + ЭлементКД = ЭлементКД.Колонки; + ИначеЕсли Индекс = "Серии" Тогда + ЭлементКД = ЭлементКД.Серии; + ИначеЕсли Индекс = "Точки" Тогда + ЭлементКД = ЭлементКД.Точки; + ИначеЕсли Индекс = "Структура" Тогда + ЭлементКД = ЭлементКД.Структура; + ИначеЕсли Индекс = "Настройки" Тогда + ЭлементКД = ЭлементКД.Настройки; + Иначе + ЭлементКД = ЭлементКД[Число(Индекс)]; + КонецЕсли; + КонецЦикла; + Возврат ЭлементКД; +КонецФункции + //////////////////////////////////////////////////////////////////////////////// // Для работы с механизмом периодичности. @@ -1052,7 +1132,7 @@ ТекущийДеньНедели = ДеньНедели(Сегодня); ВыбранныйДеньНедели = ДеньНедели(НачалоПериода); - // Вычисление начального и конечного периода по формуле. + // Вычисление начального и конечного периода по формуле. В 1 дне 86400 секунд. НачальныйДеньНедели = ТекущийДеньНедели - 5; КонечныйДеньНедели = ТекущийДеньНедели + 1; Если ВыбранныйДеньНедели > КонечныйДеньНедели Тогда @@ -1077,7 +1157,7 @@ ТекущееНачалоНедели = НачалоНедели(Сегодня); ВыбранноеНачалоНедели = НачалоНедели(НачалоПериода); - // Вычисление начального и конечного периода по формуле. + // Вычисление начального и конечного периода по формуле. В 7 днях 604800 секунд. РазностьНедель = (ВыбранноеНачалоНедели - ТекущееНачалоНедели) / 604800; Коэффициент = (РазностьНедель - 2)/7; Коэффициент = Цел(Коэффициент - ?(Коэффициент < 0, 0.9, 0)); // Отрицательные числа округляются в большую часть. @@ -1563,20 +1643,349 @@ //////////////////////////////////////////////////////////////////////////////// // Унификация формы отчета и формы настроек отчета. -Функция КомпоновщикНастроек(Форма) Экспорт - Если Форма.ИмяФормы = "ХранилищеНастроек.ХранилищеВариантовОтчетов.Форма.НастройкиОтчета" Тогда - Возврат Форма.КомпоновщикНастроек; - Иначе - Возврат Форма.Отчет.КомпоновщикНастроек; +Функция ПредставлениеЭлементаУсловногоОформления(ЭлементКД) Экспорт + ПредставлениеОформления = ПредставлениеОформления(ЭлементКД.Оформление); + Если ПредставлениеОформления = "" Тогда + ПредставлениеОформления = НСтр("ru = 'Не оформлять'"); КонецЕсли; + + ПредставлениеПолей = Строка(ЭлементКД.Поля); + Если ПредставлениеПолей = "" Тогда + ПредставлениеПолей = НСтр("ru = 'Все поля'"); + Иначе + ПредставлениеПолей = НСтр("ru = 'Поля:'") + " " + ПредставлениеПолей; + КонецЕсли; + + ПредставлениеОтбора = ПредставлениеОтбора(ЭлементКД.Отбор); + Если ПредставлениеОтбора = "" Тогда + Разделитель = ""; + Иначе + Разделитель = "; "; + ПредставлениеОтбора = НСтр("ru = 'Условие:'") + " " + ПредставлениеОтбора; + КонецЕсли; + + Возврат ПредставлениеОформления + " (" + ПредставлениеПолей + Разделитель + ПредставлениеОтбора + ")"; КонецФункции -Функция ПутьККомпоновщикуНастроек(Форма) Экспорт - Если Форма.ИмяФормы = "ХранилищеНастроек.ХранилищеВариантовОтчетов.Форма.НастройкиОтчета" Тогда - Возврат "КомпоновщикНастроек"; +Функция ПредставлениеОформления(ОформлениеКД) + Представление = ""; + Для Каждого ЭлементКД Из ОформлениеКД.Элементы Цикл + Если ЭлементКД.Использование Тогда + ДоступныйПараметрКД = ОформлениеКД.ДоступныеПараметры.НайтиПараметр(ЭлементКД.Параметр); + Если ДоступныйПараметрКД <> Неопределено И ЗначениеЗаполнено(ДоступныйПараметрКД.Заголовок) Тогда + ПредставлениеКлюча = ДоступныйПараметрКД.Заголовок; + Иначе + ПредставлениеКлюча = Строка(ЭлементКД.Параметр); + КонецЕсли; + + Если ТипЗнч(ЭлементКД.Значение) = Тип("Цвет") Тогда + ПредставлениеЗначения = ПредставлениеЦвета(ЭлементКД.Значение); + Иначе + ПредставлениеЗначения = Строка(ЭлементКД.Значение); + КонецЕсли; + + Представление = Представление + + ?(Представление = "", "", ", ") + + ПредставлениеКлюча + + ?(ПредставлениеЗначения = "", "", ": " + ПредставлениеЗначения); + КонецЕсли; + КонецЦикла; + Возврат Представление; +КонецФункции + +Функция ПредставлениеЦвета(Цвет) + Если Цвет.Вид = ВидЦвета.ЭлементСтиля Тогда + Представление = Строка(Цвет); + Представление = Сред(Представление, СтрНайти(Представление, ":")+1); + Представление = ИмяВПредставление(Представление); + ИначеЕсли Цвет.Вид = ВидЦвета.WebЦвет + Или Цвет.Вид = ВидЦвета.WindowsЦвет Тогда + Представление = СтрЛевДоСимвола(Строка(Цвет), " ("); + ИначеЕсли Цвет.Вид = ВидЦвета.Абсолютный Тогда + Представление = Строка(Цвет); + Если Представление = "0, 0, 0" Тогда + Представление = НСтр("ru = 'Черный'"); + ИначеЕсли Представление = "255, 255, 255" Тогда + Представление = НСтр("ru = 'Белый'"); + КонецЕсли; + ИначеЕсли Цвет.Вид = ВидЦвета.АвтоЦвет Тогда + Представление = НСтр("ru = 'Авто'"); Иначе - Возврат "Отчет.КомпоновщикНастроек"; + Представление = ""; КонецЕсли; + Возврат Представление; +КонецФункции + +Функция ИмяВПредставление(Знач ИсходнаяСтрока) Экспорт + Результат = ""; + ЭтоПервыйСимвол = Истина; + Для НомерСимвола = 1 По СтрДлина(ИсходнаяСтрока) Цикл + КодСимвола = КодСимвола(ИсходнаяСтрока, НомерСимвола); + Символ = Символ(КодСимвола); + Если ЭтоПервыйСимвол Тогда + Если Не ПустаяСтрока(Символ) Тогда + Результат = Результат + Символ; + ЭтоПервыйСимвол = Ложь; + КонецЕсли; + Иначе + Если (КодСимвола >= 65 И КодСимвола <= 90) + Или (КодСимвола >= 1040 И КодСимвола <= 1071) Тогда + Символ = " " + НРег(Символ); + ИначеЕсли Символ = "_" Тогда + Символ = " "; + КонецЕсли; + Результат = Результат + Символ; + КонецЕсли; + КонецЦикла; + Возврат Результат; +КонецФункции + +Функция ПредставлениеОтбора(УзелКД, НаборСтрокКД = Неопределено) + Если НаборСтрокКД = Неопределено Тогда + НаборСтрокКД = УзелКД.Элементы; + КонецЕсли; + + Представление = ""; + + Для Каждого ЭлементКД Из НаборСтрокКД Цикл + + Если ТипЗнч(ЭлементКД) = Тип("ГруппаЭлементовОтбораКомпоновкиДанных") Тогда + + ПредставлениеГруппы = Строка(ЭлементКД.ТипГруппы); + ПредставлениеВложенных = ПредставлениеОтбора(УзелКД, ЭлементКД.Элементы); + Если ПредставлениеВложенных = "" Тогда + Продолжить; + КонецЕсли; + ПредставлениеЭлемента = ПредставлениеГруппы + "(" + ПредставлениеВложенных + ")"; + + ИначеЕсли ТипЗнч(ЭлементКД) = Тип("ЭлементОтбораКомпоновкиДанных") Тогда + + ДоступноеПолеОтбораКД = УзелКД.ДоступныеПоляОтбора.НайтиПоле(ЭлементКД.ЛевоеЗначение); + Если ДоступноеПолеОтбораКД = Неопределено Тогда + Продолжить; + КонецЕсли; + + Если ЗначениеЗаполнено(ДоступноеПолеОтбораКД.Заголовок) Тогда + ПредставлениеПоля = ДоступноеПолеОтбораКД.Заголовок; + Иначе + ПредставлениеПоля = Строка(ЭлементКД.ЛевоеЗначение); + КонецЕсли; + + ПредставлениеЗначения = Строка(ЭлементКД.ПравоеЗначение); + + Если ЭлементКД.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно Тогда + ПредставлениеУсловия = "="; + ИначеЕсли ЭлементКД.ВидСравнения = ВидСравненияКомпоновкиДанных.НеРавно Тогда + ПредставлениеУсловия = "<>"; + ИначеЕсли ЭлементКД.ВидСравнения = ВидСравненияКомпоновкиДанных.Больше Тогда + ПредставлениеУсловия = ">"; + ИначеЕсли ЭлементКД.ВидСравнения = ВидСравненияКомпоновкиДанных.БольшеИлиРавно Тогда + ПредставлениеУсловия = ">="; + ИначеЕсли ЭлементКД.ВидСравнения = ВидСравненияКомпоновкиДанных.Меньше Тогда + ПредставлениеУсловия = "<"; + ИначеЕсли ЭлементКД.ВидСравнения = ВидСравненияКомпоновкиДанных.МеньшеИлиРавно Тогда + ПредставлениеУсловия = "<="; + + ИначеЕсли ЭлементКД.ВидСравнения = ВидСравненияКомпоновкиДанных.ВИерархии Тогда + ПредставлениеУсловия = НСтр("ru = 'В группе'"); + ИначеЕсли ЭлементКД.ВидСравнения = ВидСравненияКомпоновкиДанных.НеВИерархии Тогда + ПредставлениеУсловия = НСтр("ru = 'Не в группе'"); + ИначеЕсли ЭлементКД.ВидСравнения = ВидСравненияКомпоновкиДанных.ВСписке Тогда + ПредставлениеУсловия = НСтр("ru = 'В списке'"); + ИначеЕсли ЭлементКД.ВидСравнения = ВидСравненияКомпоновкиДанных.НеВСписке Тогда + ПредставлениеУсловия = НСтр("ru = 'Не в списке'"); + ИначеЕсли ЭлементКД.ВидСравнения = ВидСравненияКомпоновкиДанных.ВСпискеПоИерархии Тогда + ПредставлениеУсловия = НСтр("ru = 'В списке включая подчиненные'"); + ИначеЕсли ЭлементКД.ВидСравнения = ВидСравненияКомпоновкиДанных.НеВСпискеПоИерархии Тогда + ПредставлениеУсловия = НСтр("ru = 'Не в списке включая подчиненные'"); + + ИначеЕсли ЭлементКД.ВидСравнения = ВидСравненияКомпоновкиДанных.Содержит Тогда + ПредставлениеУсловия = НСтр("ru = 'Содержит'"); + ИначеЕсли ЭлементКД.ВидСравнения = ВидСравненияКомпоновкиДанных.НеСодержит Тогда + ПредставлениеУсловия = НСтр("ru = 'Не содержит'"); + ИначеЕсли ЭлементКД.ВидСравнения = ВидСравненияКомпоновкиДанных.Подобно Тогда + ПредставлениеУсловия = НСтр("ru = 'Соответствует шаблону'"); + ИначеЕсли ЭлементКД.ВидСравнения = ВидСравненияКомпоновкиДанных.НеПодобно Тогда + ПредставлениеУсловия = НСтр("ru = 'Не соответствует шаблону'"); + ИначеЕсли ЭлементКД.ВидСравнения = ВидСравненияКомпоновкиДанных.НачинаетсяС Тогда + ПредставлениеУсловия = НСтр("ru = 'Начинается с'"); + ИначеЕсли ЭлементКД.ВидСравнения = ВидСравненияКомпоновкиДанных.НеНачинаетсяС Тогда + ПредставлениеУсловия = НСтр("ru = 'Не начинается с'"); + ИначеЕсли ЭлементКД.ВидСравнения = ВидСравненияКомпоновкиДанных.Заполнено Тогда + ПредставлениеУсловия = НСтр("ru = 'Заполнено'"); + ПредставлениеЗначения = ""; + ИначеЕсли ЭлементКД.ВидСравнения = ВидСравненияКомпоновкиДанных.НеЗаполнено Тогда + ПредставлениеУсловия = НСтр("ru = 'Не заполнено'"); + ПредставлениеЗначения = ""; + КонецЕсли; + + ПредставлениеЭлемента = СокрЛП(ПредставлениеПоля + " " + ПредставлениеУсловия + " " + ПредставлениеЗначения); + + Иначе + Продолжить; + КонецЕсли; + + Представление = Представление + ?(Представление = "", "", ", ") + ПредставлениеЭлемента; + + КонецЦикла; + + Возврат Представление; +КонецФункции + +Функция ПредставленияОбъектаКД(УзелКД, ЭлементКД, СвойстваНастройки = Неопределено) Экспорт + Результат = Новый Структура("Тип, Подтип, ПользовательскаяНастройкаКД, ДоступнаяНастройкаКД, + |Представление, ПредставлениеПоУмолчанию, ВыводитьТолькоФлажок"); + Если СвойстваНастройки <> Неопределено Тогда + ЗаполнитьЗначенияСвойств(Результат, СвойстваНастройки); + КонецЕсли; + Если Результат.Тип = Неопределено Тогда + Результат.Тип = ТипНастройкиСтрокой(ТипЗнч(ЭлементКД)); + КонецЕсли; + Если Результат.ДоступнаяНастройкаКД = Неопределено Тогда + Если Результат.Тип = "ЗначениеПараметраНастроек" И УзелКД.ДоступныеПараметры <> Неопределено Тогда + Результат.ДоступнаяНастройкаКД = УзелКД.ДоступныеПараметры.НайтиПараметр(ЭлементКД.Параметр); + ИначеЕсли Результат.Тип = "ЭлементОтбора" И УзелКД.ДоступныеПоляОтбора <> Неопределено Тогда + Результат.ДоступнаяНастройкаКД = УзелКД.ДоступныеПоляОтбора.НайтиПоле(ЭлементКД.ЛевоеЗначение); + КонецЕсли; + КонецЕсли; + + // Представление "По умолчанию". + Результат.ПредставлениеПоУмолчанию = ПредставлениеПоУмолчанию(УзелКД, ЭлементКД, Результат); + + // Чтение представления, заданного вручную. + СтруктураПредставлений = Новый Структура("Представление, ПредставлениеПользовательскойНастройки", "", ""); + ЗаполнитьЗначенияСвойств(СтруктураПредставлений, ЭлементКД); + + Результат.ВыводитьТолькоФлажок = ЗначениеЗаполнено(СтруктураПредставлений.Представление); + Если ЗначениеЗаполнено(СтруктураПредставлений.ПредставлениеПользовательскойНастройки) Тогда + Результат.Представление = СтруктураПредставлений.ПредставлениеПользовательскойНастройки; + ИначеЕсли ЗначениеЗаполнено(СтруктураПредставлений.Представление) И СтруктураПредставлений.Представление <> "1" Тогда + Результат.Представление = СтруктураПредставлений.Представление; + КонецЕсли; + + // Если ничего не задано, то "По умолчанию". + Если Не ЗначениеЗаполнено(Результат.Представление) Тогда + Результат.Представление = Результат.ПредставлениеПоУмолчанию; + КонецЕсли; + + Возврат Результат; +КонецФункции + +Функция ПредставлениеПоУмолчанию(УзелКД, ЭлементКД, СвойстваНастройки) Экспорт + Тип = СвойстваНастройки.Тип; + Если Тип = Неопределено Тогда + Тип = ТипНастройкиСтрокой(ТипЗнч(ЭлементКД)); + КонецЕсли; + Подтип = СвойстваНастройки.Подтип; + ПользовательскаяНастройкаКД = СвойстваНастройки.ЭлементКД; + Если ПользовательскаяНастройкаКД = Неопределено Тогда + ПользовательскаяНастройкаКД = ЭлементКД; + КонецЕсли; + ДоступнаяНастройкаКД = СвойстваНастройки.ДоступнаяНастройкаКД; + + Представление = ""; + + Если ЗначениеЗаполнено(СвойстваНастройки.Подтип) Тогда + + Если СвойстваНастройки.Подтип = "ДиаграммаСерии" Тогда + + Представление = НСтр("ru = 'Серии'"); + + ИначеЕсли СвойстваНастройки.Подтип = "ДиаграммаТочки" Тогда + + Представление = НСтр("ru = 'Точки'"); + + ИначеЕсли СвойстваНастройки.Подтип = "ТаблицаСтроки" Тогда + + Представление = НСтр("ru = 'Строки'"); + + ИначеЕсли СвойстваНастройки.Подтип = "ТаблицаКолонки" Тогда + + Представление = НСтр("ru = 'Колонки'"); + + Иначе + + Представление = Строка(Подтип); + + КонецЕсли; + + ИначеЕсли Тип = "Отбор" Тогда + + Представление = НСтр("ru = 'Отбор'"); + + ИначеЕсли Тип = "ГруппаЭлементовОтбора" Тогда + + Представление = Строка(ПользовательскаяНастройкаКД.ТипГруппы); + + ИначеЕсли Тип = "ЭлементОтбора" Тогда + + Если ДоступнаяНастройкаКД <> Неопределено Тогда + Представление = ДоступнаяНастройкаКД.Заголовок; + КонецЕсли; + Если ПустаяСтрока(Представление) Тогда + Представление = ИмяВПредставление(Строка(ЭлементКД.ЛевоеЗначение)); + КонецЕсли; + + ИначеЕсли Тип = "ЗначениеПараметраНастроек" Тогда + + Если ДоступнаяНастройкаКД <> Неопределено Тогда + Представление = ДоступнаяНастройкаКД.Заголовок; + КонецЕсли; + Если ПустаяСтрока(Представление) Тогда + Представление = ИмяВПредставление(Строка(ЭлементКД.Параметр)); + КонецЕсли; + + ИначеЕсли Тип = "Порядок" Тогда + + Представление = НСтр("ru = 'Сортировка'"); + + ИначеЕсли Тип = "ВыбранныеПоля" Тогда + + Представление = НСтр("ru = 'Поля'"); + + ИначеЕсли Тип = "УсловноеОформление" Тогда + + Представление = НСтр("ru = 'Оформление'"); + + ИначеЕсли Тип = "ЭлементУсловногоОформления" Тогда + + Представление = ПредставлениеЭлементаУсловногоОформления(ПользовательскаяНастройкаКД); + + ИначеЕсли Тип = "Группировка" + Или Тип = "ГруппировкаТаблицы" + Или Тип = "ГруппировкаДиаграммы" Тогда + + Представление = СокрЛП(Строка(ЭлементКД.ПоляГруппировки)); + Если ПустаяСтрока(Представление) Тогда + Представление = НСтр("ru = '<Детальные записи>'"); + КонецЕсли; + + ИначеЕсли Тип = "Таблица" Тогда + + Представление = НСтр("ru = 'Таблица'"); + + ИначеЕсли Тип = "Диаграмма" Тогда + + Представление = НСтр("ru = 'Диаграмма'"); + + ИначеЕсли Тип = "НастройкиВложенногоОбъекта" Тогда + + Представление = Строка(ПользовательскаяНастройкаКД); + Если ПустаяСтрока(Представление) Тогда + Представление = НСтр("ru = 'Вложенная группировка'"); + КонецЕсли; + + ИначеЕсли Тип = "СтруктураНастроек" Тогда + + Представление = НСтр("ru = 'Структура'"); + + Иначе + + Представление = Строка(Тип); + + КонецЕсли; + + Возврат Представление; КонецФункции //////////////////////////////////////////////////////////////////////////////// @@ -1600,10 +2009,30 @@ ИначеЕсли Тип = Тип("ГруппировкаКомпоновкиДанных") Тогда Возврат "Группировка"; - ИначеЕсли Тип = Тип("ПорядокКомпоновкиДанных") Тогда - Возврат "Порядок"; + ИначеЕсли Тип = Тип("ПоляГруппировкиКомпоновкиДанных") Тогда + Возврат "ПоляГруппировки"; + ИначеЕсли Тип = Тип("КоллекцияПолейГруппировкиКомпоновкиДанных") Тогда + Возврат "КоллекцияПолейГруппировки"; + ИначеЕсли Тип = Тип("ПолеГруппировкиКомпоновкиДанных") Тогда + Возврат "ПолеГруппировки"; + ИначеЕсли Тип = Тип("АвтоПолеГруппировкиКомпоновкиДанных") Тогда + Возврат "АвтоПолеГруппировки"; + ИначеЕсли Тип = Тип("ВыбранныеПоляКомпоновкиДанных") Тогда Возврат "ВыбранныеПоля"; + ИначеЕсли Тип = Тип("ВыбранноеПолеКомпоновкиДанных") Тогда + Возврат "ВыбранноеПоле"; + ИначеЕсли Тип = Тип("ГруппаВыбранныхПолейКомпоновкиДанных") Тогда + Возврат "ГруппаВыбранныхПолей"; + ИначеЕсли Тип = Тип("АвтоВыбранноеПолеКомпоновкиДанных") Тогда + Возврат "АвтоВыбранноеПоле"; + + ИначеЕсли Тип = Тип("ПорядокКомпоновкиДанных") Тогда + Возврат "Порядок"; + ИначеЕсли Тип = Тип("ЭлементПорядкаКомпоновкиДанных") Тогда + Возврат "ЭлементПорядка"; + ИначеЕсли Тип = Тип("АвтоЭлементПорядкаКомпоновкиДанных") Тогда + Возврат "АвтоЭлементПорядка"; ИначеЕсли Тип = Тип("УсловноеОформлениеКомпоновкиДанных") Тогда Возврат "УсловноеОформление"; @@ -1629,12 +2058,8 @@ ИначеЕсли Тип = Тип("КоллекцияЭлементовСтруктурыДиаграммыКомпоновкиДанных") Тогда Возврат "КоллекцияЭлементовСтруктурыДиаграммы"; - ИначеЕсли Тип = Тип("ПолеГруппировкиКомпоновкиДанных") Тогда - Возврат "ПолеГруппировки"; - ИначеЕсли Тип = Тип("ПоляГруппировкиКомпоновкиДанных") Тогда - Возврат "ПоляГруппировки"; - ИначеЕсли Тип = Тип("КоллекцияПолейГруппировкиКомпоновкиДанных") Тогда - Возврат "КоллекцияПолейГруппировки"; + ИначеЕсли Тип = Тип("ЗначенияПараметровДанныхКомпоновкиДанных") Тогда + Возврат "ЗначенияПараметровДанных"; Иначе Возврат ""; @@ -1661,229 +2086,7 @@ КонецЕсли; КонецЕсли; - Если ПараметрыКопирования.ИсключаяСвойства <> "*" Тогда - ЗаполнитьЗначенияСвойств(НоваяСтрока, ЧтоКопировать, , ПараметрыКопирования.ИсключаяСвойства); - КонецЕсли; - - Если ПараметрыКопирования.КопируетсяДеревоФормы Тогда - - Соответствие.Вставить(ЧтоКопировать, НоваяСтрока); - - КоллекцияВложенных = ЧтоКопировать.ПолучитьЭлементы(); - Если КоллекцияВложенных.Количество() > 0 Тогда - НоваяКоллекцияВложенных = НоваяСтрока.ПолучитьЭлементы(); - Для Каждого ПодчиненнаяСтрока Из КоллекцияВложенных Цикл - СкопироватьРекурсивно(Узел, ПодчиненнаяСтрока, НоваяКоллекцияВложенных, Неопределено, Соответствие); - КонецЦикла; - КонецЕсли; - - Иначе - - СтарыйИдентификатор = Узел.ПолучитьИдентификаторПоОбъекту(ЧтоКопировать); - НовыйИдентификатор = Узел.ПолучитьИдентификаторПоОбъекту(НоваяСтрока); - Соответствие.Вставить(СтарыйИдентификатор, НовыйИдентификатор); - - Если ПараметрыКопирования.ЕстьНастройки Тогда - НоваяСтрока = НоваяСтрока.Настройки; - ПодчиненнаяСтрока = ПодчиненнаяСтрока.Настройки; - КонецЕсли; - - Если ПараметрыКопирования.ЕстьЭлементы Тогда - // Элементы (КоллекцияВыбранныхПолейКомпоновкиДанных, - // КоллекцияЭлементовОтбораКомпоновкиДанных) - КоллекцияВложенных = ЧтоКопировать.Элементы; - Если КоллекцияВложенных.Количество() > 0 Тогда - НоваяКоллекцияВложенных = НоваяСтрока.Элементы; - Для Каждого ПодчиненнаяСтрока Из КоллекцияВложенных Цикл - СкопироватьРекурсивно(Узел, ПодчиненнаяСтрока, НоваяКоллекцияВложенных, Неопределено, Соответствие); - КонецЦикла; - КонецЕсли; - КонецЕсли; - - Если ПараметрыКопирования.ЕстьВыбор Тогда - // Выбор (ВыбранныеПоляКомпоновкиДанных) - // Выбор.Элементы (КоллекцияВыбранныхПолейКомпоновкиДанных) - ЗаполнитьЗначенияСвойств(НоваяСтрока.Выбор, ЧтоКопировать.Выбор, , "ДоступныеПоляВыбора, Элементы"); - КоллекцияВложенных = ЧтоКопировать.Выбор.Элементы; - Если КоллекцияВложенных.Количество() > 0 Тогда - НоваяКоллекцияВложенных = НоваяСтрока.Выбор.Элементы; - Для Каждого ПодчиненнаяСтрока Из КоллекцияВложенных Цикл - СкопироватьРекурсивно(Узел, ПодчиненнаяСтрока, НоваяКоллекцияВложенных, Неопределено, Соответствие); - КонецЦикла; - КонецЕсли; - КонецЕсли; - - Если ПараметрыКопирования.ЕстьОтбор Тогда - // Отбор (ОтборКомпоновкиДанных) - // Отбор.Элементы (КоллекцияЭлементовОтбораКомпоновкиДанных) - ЗаполнитьЗначенияСвойств(НоваяСтрока.Отбор, ЧтоКопировать.Отбор, , "ДоступныеПоляОтбора, Элементы"); - КоллекцияВложенных = ЧтоКопировать.Отбор.Элементы; - Если КоллекцияВложенных.Количество() > 0 Тогда - НоваяКоллекцияВложенных = НоваяСтрока.Отбор.Элементы; - Для Каждого ПодчиненнаяСтрока Из КоллекцияВложенных Цикл - СкопироватьРекурсивно(Узел, ПодчиненнаяСтрока, НоваяКоллекцияВложенных, Неопределено, Новый Соответствие); - КонецЦикла; - КонецЕсли; - КонецЕсли; - - Если ПараметрыКопирования.ЕстьПараметрыВывода Тогда - // ПараметрыВывода (ЗначенияПараметровВыводаКомпоновкиДанных, - // ЗначенияПараметровВыводаГруппировкиКомпоновкиДанных, - // ЗначенияПараметровВыводаГруппировкиТаблицыКомпоновкиДанных, - // ЗначенияПараметровВыводаГруппировкиДиаграммыКомпоновкиДанных, - // ЗначенияПараметровВыводаТаблицыКомпоновкиДанных, - // ЗначенияПараметровВыводаДиаграммыКомпоновкиДанных) - // ПараметрыВывода.Элементы (КоллекцияЗначенийПараметровКомпоновкиДанных) - КоллекцияВложенных = ЧтоКопировать.ПараметрыВывода.Элементы; - Если КоллекцияВложенных.Количество() > 0 Тогда - УзелВложенных = НоваяСтрока.ПараметрыВывода; - Для Каждого ПодчиненнаяСтрока Из КоллекцияВложенных Цикл - ЗначениеПараметраКД = УзелВложенных.НайтиЗначениеПараметра(ПодчиненнаяСтрока.Параметр); - Если ЗначениеПараметраКД <> Неопределено Тогда - ЗаполнитьЗначенияСвойств(ЗначениеПараметраКД, ПодчиненнаяСтрока); - КонецЕсли; - КонецЦикла; - КонецЕсли; - КонецЕсли; - - Если ПараметрыКопирования.ЕстьПараметрыДанных Тогда - // ПараметрыДанных (ЗначенияПараметровДанныхКомпоновкиДанных) - // ПараметрыДанных.Элементы (КоллекцияЗначенийПараметровКомпоновкиДанных) - КоллекцияВложенных = ЧтоКопировать.ПараметрыДанных.Элементы; - Если КоллекцияВложенных.Количество() > 0 Тогда - НоваяКоллекцияВложенных = НоваяСтрока.ПараметрыДанных.Элементы; - Для Каждого ПодчиненнаяСтрока Из КоллекцияВложенных Цикл - СкопироватьРекурсивно(Узел, ПодчиненнаяСтрока, НоваяКоллекцияВложенных, Неопределено, Соответствие); - КонецЦикла; - КонецЕсли; - КонецЕсли; - - Если ПараметрыКопирования.ЕстьПользовательскиеПоля Тогда - // ПользовательскиеПоля (ПользовательскиеПоляКомпоновкиДанных) - // ПользовательскиеПоля.Элементы (КоллекцияПользовательскихПолейКомпоновкиДанных) - КоллекцияВложенных = ЧтоКопировать.ПользовательскиеПоля.Элементы; - Если КоллекцияВложенных.Количество() > 0 Тогда - НоваяКоллекцияВложенных = НоваяСтрока.ПользовательскиеПоля.Элементы; - Для Каждого ПодчиненнаяСтрока Из КоллекцияВложенных Цикл - СкопироватьРекурсивно(Узел, ПодчиненнаяСтрока, НоваяКоллекцияВложенных, Неопределено, Соответствие); - КонецЦикла; - КонецЕсли; - КонецЕсли; - - Если ПараметрыКопирования.ЕстьПоляГруппировки Тогда - // ПоляГруппировки (ПоляГруппировкиКомпоновкиДанных) - // ПоляГруппировки.Элементы (КоллекцияПолейГруппировкиКомпоновкиДанных) - КоллекцияВложенных = ЧтоКопировать.ПоляГруппировки.Элементы; - Если КоллекцияВложенных.Количество() > 0 Тогда - НоваяКоллекцияВложенных = НоваяСтрока.ПоляГруппировки.Элементы; - Для Каждого ПодчиненнаяСтрока Из КоллекцияВложенных Цикл - СкопироватьРекурсивно(Узел, ПодчиненнаяСтрока, НоваяКоллекцияВложенных, Неопределено, Новый Соответствие); - КонецЦикла; - КонецЕсли; - КонецЕсли; - - Если ПараметрыКопирования.ЕстьПорядок Тогда - // Порядок (ПорядокКомпоновкиДанных) - // Порядок.Элементы (КоллекцияЭлементовПорядкаКомпоновкиДанных) - ЗаполнитьЗначенияСвойств(НоваяСтрока.Порядок, ЧтоКопировать.Порядок, , "ДоступныеПоляПорядка, Элементы"); - КоллекцияВложенных = ЧтоКопировать.Порядок.Элементы; - Если КоллекцияВложенных.Количество() > 0 Тогда - НоваяКоллекцияВложенных = НоваяСтрока.Порядок.Элементы; - Для Каждого ПодчиненнаяСтрока Из КоллекцияВложенных Цикл - СкопироватьРекурсивно(Узел, ПодчиненнаяСтрока, НоваяКоллекцияВложенных, Неопределено, Соответствие); - КонецЦикла; - КонецЕсли; - КонецЕсли; - - Если ПараметрыКопирования.ЕстьСтруктура Тогда - // Структура (КоллекцияЭлементовСтруктурыНастроекКомпоновкиДанных, - // КоллекцияЭлементовСтруктурыДиаграммыКомпоновкиДанных, - // КоллекцияЭлементовСтруктурыТаблицыКомпоновкиДанных). - ЗаполнитьЗначенияСвойств(НоваяСтрока.Структура, ЧтоКопировать.Структура); - КоллекцияВложенных = ЧтоКопировать.Структура; - Если КоллекцияВложенных.Количество() > 0 Тогда - НоваяКоллекцияВложенных = НоваяСтрока.Структура; - Для Каждого ПодчиненнаяСтрока Из КоллекцияВложенных Цикл - СкопироватьРекурсивно(Узел, ПодчиненнаяСтрока, НоваяКоллекцияВложенных, Неопределено, Соответствие); - КонецЦикла; - КонецЕсли; - КонецЕсли; - - Если ПараметрыКопирования.ЕстьУсловноеОформление Тогда - // УсловноеОформление (УсловноеОформлениеКомпоновкиДанных) - // УсловноеОформление.Элементы (КоллекцияЭлементовУсловногоОформленияКомпоновкиДанных) - ЗаполнитьЗначенияСвойств(НоваяСтрока.УсловноеОформление, ЧтоКопировать.УсловноеОформление, , "ДоступныеПоляОтбора, ДоступныеПоляПолей, Элементы"); - КоллекцияВложенных = ЧтоКопировать.УсловноеОформление.Элементы; - Если КоллекцияВложенных.Количество() > 0 Тогда - НоваяКоллекцияВложенных = НоваяСтрока.УсловноеОформление.Элементы; - Для Каждого ПодчиненнаяСтрока Из КоллекцияВложенных Цикл - СкопироватьРекурсивно(Узел, ПодчиненнаяСтрока, НоваяКоллекцияВложенных, Неопределено, Соответствие); - КонецЦикла; - КонецЕсли; - КонецЕсли; - - Если ПараметрыКопирования.ЕстьКолонкиИСтроки Тогда - // Колонки (КоллекцияЭлементовСтруктурыТаблицыКомпоновкиДанных). - КоллекцияВложенных = ЧтоКопировать.Колонки; - НоваяКоллекцияВложенных = НоваяСтрока.Колонки; - СтарыйИдентификатор = Узел.ПолучитьИдентификаторПоОбъекту(КоллекцияВложенных); - НовыйИдентификатор = Узел.ПолучитьИдентификаторПоОбъекту(НоваяКоллекцияВложенных); - Соответствие.Вставить(СтарыйИдентификатор, НовыйИдентификатор); - Для Каждого ПодчиненнаяСтрока Из КоллекцияВложенных Цикл - СкопироватьРекурсивно(Узел, ПодчиненнаяСтрока, НоваяКоллекцияВложенных, Неопределено, Соответствие); - КонецЦикла; - // Строки (КоллекцияЭлементовСтруктурыТаблицыКомпоновкиДанных). - КоллекцияВложенных = ЧтоКопировать.Строки; - НоваяКоллекцияВложенных = НоваяСтрока.Строки; - СтарыйИдентификатор = Узел.ПолучитьИдентификаторПоОбъекту(КоллекцияВложенных); - НовыйИдентификатор = Узел.ПолучитьИдентификаторПоОбъекту(НоваяКоллекцияВложенных); - Соответствие.Вставить(СтарыйИдентификатор, НовыйИдентификатор); - Для Каждого ПодчиненнаяСтрока Из КоллекцияВложенных Цикл - СкопироватьРекурсивно(Узел, ПодчиненнаяСтрока, НоваяКоллекцияВложенных, Неопределено, Соответствие); - КонецЦикла; - КонецЕсли; - - Если ПараметрыКопирования.ЕстьСерииИТочки Тогда - // Серии (КоллекцияЭлементовСтруктурыДиаграммыКомпоновкиДанных). - КоллекцияВложенных = ЧтоКопировать.Серии; - НоваяКоллекцияВложенных = НоваяСтрока.Серии; - СтарыйИдентификатор = Узел.ПолучитьИдентификаторПоОбъекту(КоллекцияВложенных); - НовыйИдентификатор = Узел.ПолучитьИдентификаторПоОбъекту(НоваяКоллекцияВложенных); - Соответствие.Вставить(СтарыйИдентификатор, НовыйИдентификатор); - Для Каждого ПодчиненнаяСтрока Из КоллекцияВложенных Цикл - СкопироватьРекурсивно(Узел, ПодчиненнаяСтрока, НоваяКоллекцияВложенных, Неопределено, Соответствие); - КонецЦикла; - // Точки (КоллекцияЭлементовСтруктурыДиаграммыКомпоновкиДанных). - КоллекцияВложенных = ЧтоКопировать.Точки; - НоваяКоллекцияВложенных = НоваяСтрока.Точки; - СтарыйИдентификатор = Узел.ПолучитьИдентификаторПоОбъекту(КоллекцияВложенных); - НовыйИдентификатор = Узел.ПолучитьИдентификаторПоОбъекту(НоваяКоллекцияВложенных); - Соответствие.Вставить(СтарыйИдентификатор, НовыйИдентификатор); - Для Каждого ПодчиненнаяСтрока Из КоллекцияВложенных Цикл - СкопироватьРекурсивно(Узел, ПодчиненнаяСтрока, НоваяКоллекцияВложенных, Неопределено, Соответствие); - КонецЦикла; - КонецЕсли; - - Если ПараметрыКопирования.ЕстьЗначенияВложенныхПараметров Тогда - // ЗначенияВложенныхПараметров (КоллекцияЗначенийПараметровКомпоновкиДанных). - Для Каждого ПодчиненнаяСтрока Из ЧтоКопировать.ЗначенияВложенныхПараметров Цикл - СкопироватьРекурсивно(Узел, ПодчиненнаяСтрока, НоваяСтрока.ЗначенияВложенныхПараметров, Неопределено, Соответствие); - КонецЦикла; - КонецЕсли; - - Если ПараметрыКопирования.ЕстьПоляИОформление Тогда - Для Каждого ОформляемоеПоле Из ЧтоКопировать.Поля.Элементы Цикл - ЗаполнитьЗначенияСвойств(НоваяСтрока.Поля.Элементы.Добавить(), ОформляемоеПоле); - КонецЦикла; - Для Каждого Источник Из ЧтоКопировать.Оформление.Элементы Цикл - Приемник = НоваяСтрока.Оформление.НайтиЗначениеПараметра(Источник.Параметр); - Если Приемник <> Неопределено Тогда - ЗаполнитьЗначенияСвойств(Приемник, Источник, , "Родитель"); - КонецЕсли; - КонецЦикла; - КонецЕсли; - - КонецЕсли; + ЗаполнитьСвойстваРекурсивно(Узел, НоваяСтрока, ЧтоКопировать, Соответствие, ПараметрыКопирования); Возврат НоваяСтрока; КонецФункции @@ -2004,6 +2207,250 @@ КонецФункции +Функция ЗаполнитьСвойстваРекурсивно(Узел, ЧтоЗаполнить, ЧемЗаполнить, Соответствие = Неопределено, ПараметрыКопирования = Неопределено) Экспорт + Если Соответствие = Неопределено Тогда + Соответствие = Новый Соответствие; + КонецЕсли; + Если ПараметрыКопирования = Неопределено Тогда + ПараметрыКопирования = ПараметрыКопирования(ТипЗнч(ЧемЗаполнить), Неопределено); + КонецЕсли; + + Если ПараметрыКопирования.ИсключаяСвойства <> "*" Тогда + ЗаполнитьЗначенияСвойств(ЧтоЗаполнить, ЧемЗаполнить, , ПараметрыКопирования.ИсключаяСвойства); + КонецЕсли; + + Если ПараметрыКопирования.КопируетсяДеревоФормы Тогда + + Соответствие.Вставить(ЧемЗаполнить, ЧтоЗаполнить); + + КоллекцияВложенных = ЧемЗаполнить.ПолучитьЭлементы(); + Если КоллекцияВложенных.Количество() > 0 Тогда + НоваяКоллекцияВложенных = ЧтоЗаполнить.ПолучитьЭлементы(); + Для Каждого ПодчиненнаяСтрока Из КоллекцияВложенных Цикл + СкопироватьРекурсивно(Узел, ПодчиненнаяСтрока, НоваяКоллекцияВложенных, Неопределено, Соответствие); + КонецЦикла; + КонецЕсли; + + Иначе + + СтарыйИдентификатор = Узел.ПолучитьИдентификаторПоОбъекту(ЧемЗаполнить); + НовыйИдентификатор = Узел.ПолучитьИдентификаторПоОбъекту(ЧтоЗаполнить); + Соответствие.Вставить(СтарыйИдентификатор, НовыйИдентификатор); + + Если ПараметрыКопирования.ЕстьНастройки Тогда + ЧтоЗаполнить = ЧтоЗаполнить.Настройки; + ПодчиненнаяСтрока = ПодчиненнаяСтрока.Настройки; + КонецЕсли; + + Если ПараметрыКопирования.ЕстьЭлементы Тогда + // Элементы (КоллекцияВыбранныхПолейКомпоновкиДанных, + // КоллекцияЭлементовОтбораКомпоновкиДанных) + КоллекцияВложенных = ЧемЗаполнить.Элементы; + Если КоллекцияВложенных.Количество() > 0 Тогда + НоваяКоллекцияВложенных = ЧтоЗаполнить.Элементы; + Для Каждого ПодчиненнаяСтрока Из КоллекцияВложенных Цикл + СкопироватьРекурсивно(Узел, ПодчиненнаяСтрока, НоваяКоллекцияВложенных, Неопределено, Соответствие); + КонецЦикла; + КонецЕсли; + КонецЕсли; + + Если ПараметрыКопирования.ЕстьВыбор Тогда + // Выбор (ВыбранныеПоляКомпоновкиДанных) + // Выбор.Элементы (КоллекцияВыбранныхПолейКомпоновкиДанных) + ЗаполнитьЗначенияСвойств(ЧтоЗаполнить.Выбор, ЧемЗаполнить.Выбор, , "ДоступныеПоляВыбора, Элементы"); + КоллекцияВложенных = ЧемЗаполнить.Выбор.Элементы; + Если КоллекцияВложенных.Количество() > 0 Тогда + НоваяКоллекцияВложенных = ЧтоЗаполнить.Выбор.Элементы; + Для Каждого ПодчиненнаяСтрока Из КоллекцияВложенных Цикл + СкопироватьРекурсивно(Узел, ПодчиненнаяСтрока, НоваяКоллекцияВложенных, Неопределено, Соответствие); + КонецЦикла; + КонецЕсли; + КонецЕсли; + + Если ПараметрыКопирования.ЕстьОтбор Тогда + // Отбор (ОтборКомпоновкиДанных) + // Отбор.Элементы (КоллекцияЭлементовОтбораКомпоновкиДанных) + ЗаполнитьЗначенияСвойств(ЧтоЗаполнить.Отбор, ЧемЗаполнить.Отбор, , "ДоступныеПоляОтбора, Элементы"); + КоллекцияВложенных = ЧемЗаполнить.Отбор.Элементы; + Если КоллекцияВложенных.Количество() > 0 Тогда + НоваяКоллекцияВложенных = ЧтоЗаполнить.Отбор.Элементы; + Для Каждого ПодчиненнаяСтрока Из КоллекцияВложенных Цикл + СкопироватьРекурсивно(Узел, ПодчиненнаяСтрока, НоваяКоллекцияВложенных, Неопределено, Новый Соответствие); + КонецЦикла; + КонецЕсли; + КонецЕсли; + + Если ПараметрыКопирования.ЕстьПараметрыВывода Тогда + // ПараметрыВывода (ЗначенияПараметровВыводаКомпоновкиДанных, + // ЗначенияПараметровВыводаГруппировкиКомпоновкиДанных, + // ЗначенияПараметровВыводаГруппировкиТаблицыКомпоновкиДанных, + // ЗначенияПараметровВыводаГруппировкиДиаграммыКомпоновкиДанных, + // ЗначенияПараметровВыводаТаблицыКомпоновкиДанных, + // ЗначенияПараметровВыводаДиаграммыКомпоновкиДанных) + // ПараметрыВывода.Элементы (КоллекцияЗначенийПараметровКомпоновкиДанных) + КоллекцияВложенных = ЧемЗаполнить.ПараметрыВывода.Элементы; + Если КоллекцияВложенных.Количество() > 0 Тогда + УзелВложенных = ЧтоЗаполнить.ПараметрыВывода; + Для Каждого ПодчиненнаяСтрока Из КоллекцияВложенных Цикл + ЗначениеПараметраКД = УзелВложенных.НайтиЗначениеПараметра(ПодчиненнаяСтрока.Параметр); + Если ЗначениеПараметраКД <> Неопределено Тогда + ЗаполнитьЗначенияСвойств(ЗначениеПараметраКД, ПодчиненнаяСтрока); + КонецЕсли; + КонецЦикла; + КонецЕсли; + КонецЕсли; + + Если ПараметрыКопирования.ЕстьПараметрыДанных Тогда + // ПараметрыДанных (ЗначенияПараметровДанныхКомпоновкиДанных) + // ПараметрыДанных.Элементы (КоллекцияЗначенийПараметровКомпоновкиДанных) + КоллекцияВложенных = ЧемЗаполнить.ПараметрыДанных.Элементы; + Если КоллекцияВложенных.Количество() > 0 Тогда + НоваяКоллекцияВложенных = ЧтоЗаполнить.ПараметрыДанных.Элементы; + Для Каждого ПодчиненнаяСтрока Из КоллекцияВложенных Цикл + СкопироватьРекурсивно(Узел, ПодчиненнаяСтрока, НоваяКоллекцияВложенных, Неопределено, Соответствие); + КонецЦикла; + КонецЕсли; + КонецЕсли; + + Если ПараметрыКопирования.ЕстьПользовательскиеПоля Тогда + // ПользовательскиеПоля (ПользовательскиеПоляКомпоновкиДанных) + // ПользовательскиеПоля.Элементы (КоллекцияПользовательскихПолейКомпоновкиДанных) + КоллекцияВложенных = ЧемЗаполнить.ПользовательскиеПоля.Элементы; + Если КоллекцияВложенных.Количество() > 0 Тогда + НоваяКоллекцияВложенных = ЧтоЗаполнить.ПользовательскиеПоля.Элементы; + Для Каждого ПодчиненнаяСтрока Из КоллекцияВложенных Цикл + СкопироватьРекурсивно(Узел, ПодчиненнаяСтрока, НоваяКоллекцияВложенных, Неопределено, Соответствие); + КонецЦикла; + КонецЕсли; + КонецЕсли; + + Если ПараметрыКопирования.ЕстьПоляГруппировки Тогда + // ПоляГруппировки (ПоляГруппировкиКомпоновкиДанных) + // ПоляГруппировки.Элементы (КоллекцияПолейГруппировкиКомпоновкиДанных) + КоллекцияВложенных = ЧемЗаполнить.ПоляГруппировки.Элементы; + Если КоллекцияВложенных.Количество() > 0 Тогда + НоваяКоллекцияВложенных = ЧтоЗаполнить.ПоляГруппировки.Элементы; + Для Каждого ПодчиненнаяСтрока Из КоллекцияВложенных Цикл + СкопироватьРекурсивно(Узел, ПодчиненнаяСтрока, НоваяКоллекцияВложенных, Неопределено, Новый Соответствие); + КонецЦикла; + КонецЕсли; + КонецЕсли; + + Если ПараметрыКопирования.ЕстьПорядок Тогда + // Порядок (ПорядокКомпоновкиДанных) + // Порядок.Элементы (КоллекцияЭлементовПорядкаКомпоновкиДанных) + ЗаполнитьЗначенияСвойств(ЧтоЗаполнить.Порядок, ЧемЗаполнить.Порядок, , "ДоступныеПоляПорядка, Элементы"); + КоллекцияВложенных = ЧемЗаполнить.Порядок.Элементы; + Если КоллекцияВложенных.Количество() > 0 Тогда + НоваяКоллекцияВложенных = ЧтоЗаполнить.Порядок.Элементы; + Для Каждого ПодчиненнаяСтрока Из КоллекцияВложенных Цикл + СкопироватьРекурсивно(Узел, ПодчиненнаяСтрока, НоваяКоллекцияВложенных, Неопределено, Соответствие); + КонецЦикла; + КонецЕсли; + КонецЕсли; + + Если ПараметрыКопирования.ЕстьСтруктура Тогда + // Структура (КоллекцияЭлементовСтруктурыНастроекКомпоновкиДанных, + // КоллекцияЭлементовСтруктурыДиаграммыКомпоновкиДанных, + // КоллекцияЭлементовСтруктурыТаблицыКомпоновкиДанных). + ЗаполнитьЗначенияСвойств(ЧтоЗаполнить.Структура, ЧемЗаполнить.Структура); + КоллекцияВложенных = ЧемЗаполнить.Структура; + Если КоллекцияВложенных.Количество() > 0 Тогда + НоваяКоллекцияВложенных = ЧтоЗаполнить.Структура; + Для Каждого ПодчиненнаяСтрока Из КоллекцияВложенных Цикл + СкопироватьРекурсивно(Узел, ПодчиненнаяСтрока, НоваяКоллекцияВложенных, Неопределено, Соответствие); + КонецЦикла; + КонецЕсли; + КонецЕсли; + + Если ПараметрыКопирования.ЕстьУсловноеОформление Тогда + // УсловноеОформление (УсловноеОформлениеКомпоновкиДанных) + // УсловноеОформление.Элементы (КоллекцияЭлементовУсловногоОформленияКомпоновкиДанных) + ЗаполнитьЗначенияСвойств(ЧтоЗаполнить.УсловноеОформление, ЧемЗаполнить.УсловноеОформление, , "ДоступныеПоляОтбора, ДоступныеПоляПолей, Элементы"); + КоллекцияВложенных = ЧемЗаполнить.УсловноеОформление.Элементы; + Если КоллекцияВложенных.Количество() > 0 Тогда + НоваяКоллекцияВложенных = ЧтоЗаполнить.УсловноеОформление.Элементы; + Для Каждого ПодчиненнаяСтрока Из КоллекцияВложенных Цикл + СкопироватьРекурсивно(Узел, ПодчиненнаяСтрока, НоваяКоллекцияВложенных, Неопределено, Соответствие); + КонецЦикла; + КонецЕсли; + КонецЕсли; + + Если ПараметрыКопирования.ЕстьКолонкиИСтроки Тогда + // Колонки (КоллекцияЭлементовСтруктурыТаблицыКомпоновкиДанных). + КоллекцияВложенных = ЧемЗаполнить.Колонки; + НоваяКоллекцияВложенных = ЧтоЗаполнить.Колонки; + СтарыйИдентификатор = Узел.ПолучитьИдентификаторПоОбъекту(КоллекцияВложенных); + НовыйИдентификатор = Узел.ПолучитьИдентификаторПоОбъекту(НоваяКоллекцияВложенных); + Соответствие.Вставить(СтарыйИдентификатор, НовыйИдентификатор); + Для Каждого ПодчиненнаяСтрока Из КоллекцияВложенных Цикл + СкопироватьРекурсивно(Узел, ПодчиненнаяСтрока, НоваяКоллекцияВложенных, Неопределено, Соответствие); + КонецЦикла; + // Строки (КоллекцияЭлементовСтруктурыТаблицыКомпоновкиДанных). + КоллекцияВложенных = ЧемЗаполнить.Строки; + НоваяКоллекцияВложенных = ЧтоЗаполнить.Строки; + СтарыйИдентификатор = Узел.ПолучитьИдентификаторПоОбъекту(КоллекцияВложенных); + НовыйИдентификатор = Узел.ПолучитьИдентификаторПоОбъекту(НоваяКоллекцияВложенных); + Соответствие.Вставить(СтарыйИдентификатор, НовыйИдентификатор); + Для Каждого ПодчиненнаяСтрока Из КоллекцияВложенных Цикл + СкопироватьРекурсивно(Узел, ПодчиненнаяСтрока, НоваяКоллекцияВложенных, Неопределено, Соответствие); + КонецЦикла; + КонецЕсли; + + Если ПараметрыКопирования.ЕстьСерииИТочки Тогда + // Серии (КоллекцияЭлементовСтруктурыДиаграммыКомпоновкиДанных). + КоллекцияВложенных = ЧемЗаполнить.Серии; + НоваяКоллекцияВложенных = ЧтоЗаполнить.Серии; + СтарыйИдентификатор = Узел.ПолучитьИдентификаторПоОбъекту(КоллекцияВложенных); + НовыйИдентификатор = Узел.ПолучитьИдентификаторПоОбъекту(НоваяКоллекцияВложенных); + Соответствие.Вставить(СтарыйИдентификатор, НовыйИдентификатор); + Для Каждого ПодчиненнаяСтрока Из КоллекцияВложенных Цикл + СкопироватьРекурсивно(Узел, ПодчиненнаяСтрока, НоваяКоллекцияВложенных, Неопределено, Соответствие); + КонецЦикла; + // Точки (КоллекцияЭлементовСтруктурыДиаграммыКомпоновкиДанных). + КоллекцияВложенных = ЧемЗаполнить.Точки; + НоваяКоллекцияВложенных = ЧтоЗаполнить.Точки; + СтарыйИдентификатор = Узел.ПолучитьИдентификаторПоОбъекту(КоллекцияВложенных); + НовыйИдентификатор = Узел.ПолучитьИдентификаторПоОбъекту(НоваяКоллекцияВложенных); + Соответствие.Вставить(СтарыйИдентификатор, НовыйИдентификатор); + Для Каждого ПодчиненнаяСтрока Из КоллекцияВложенных Цикл + СкопироватьРекурсивно(Узел, ПодчиненнаяСтрока, НоваяКоллекцияВложенных, Неопределено, Соответствие); + КонецЦикла; + КонецЕсли; + + Если ПараметрыКопирования.ЕстьЗначенияВложенныхПараметров Тогда + // ЗначенияВложенныхПараметров (КоллекцияЗначенийПараметровКомпоновкиДанных). + Для Каждого ПодчиненнаяСтрока Из ЧемЗаполнить.ЗначенияВложенныхПараметров Цикл + СкопироватьРекурсивно(Узел, ПодчиненнаяСтрока, ЧтоЗаполнить.ЗначенияВложенныхПараметров, Неопределено, Соответствие); + КонецЦикла; + КонецЕсли; + + Если ПараметрыКопирования.ЕстьПоляИОформление Тогда + Для Каждого ОформляемоеПоле Из ЧемЗаполнить.Поля.Элементы Цикл + ЗаполнитьЗначенияСвойств(ЧтоЗаполнить.Поля.Элементы.Добавить(), ОформляемоеПоле); + КонецЦикла; + Для Каждого Источник Из ЧемЗаполнить.Оформление.Элементы Цикл + Приемник = ЧтоЗаполнить.Оформление.НайтиЗначениеПараметра(Источник.Параметр); + Если Приемник <> Неопределено Тогда + ЗаполнитьЗначенияСвойств(Приемник, Источник, , "Родитель"); + Если Источник.ЗначенияВложенныхПараметров = Неопределено Тогда + Продолжить; + КонецЕсли; + Для Каждого ВложенныйИсточник Из Источник.ЗначенияВложенныхПараметров Цикл + ВложенныйПриемник = ЧтоЗаполнить.Оформление.НайтиЗначениеПараметра(Источник.Параметр); + Если ВложенныйПриемник <> Неопределено Тогда + ЗаполнитьЗначенияСвойств(ВложенныйПриемник, ВложенныйИсточник, , "Родитель"); + КонецЕсли; + КонецЦикла; + КонецЕсли; + КонецЦикла; + КонецЕсли; + + КонецЕсли; + + Возврат ЧтоЗаполнить; +КонецФункции + Функция ПриДобавленииЭлементаНужноУказыватьТип(ТипЭлемента) Экспорт Если ТипЭлемента = Тип("ГруппаВыбранныхПолейКомпоновкиДанных") Или ТипЭлемента = Тип("ГруппаЭлементовОтбораКомпоновкиДанных") @@ -2026,7 +2473,8 @@ Функция ПриДобавленииВКоллекциюНужноУказыватьТипЭлемента(ТипКоллекции) Экспорт Если ТипКоллекции = Тип("КоллекцияЭлементовСтруктурыТаблицыКомпоновкиДанных") - Или ТипКоллекции = Тип("КоллекцияЭлементовСтруктурыДиаграммыКомпоновкиДанных") Тогда + Или ТипКоллекции = Тип("КоллекцияЭлементовСтруктурыДиаграммыКомпоновкиДанных") + Или ТипКоллекции = Тип("КоллекцияЭлементовУсловногоОформленияКомпоновкиДанных") Тогда Возврат Ложь; Иначе Возврат Истина; @@ -2060,40 +2508,71 @@ СписокЗначений = Новый СписокЗначений; Если ТипЗнч(Значения) = Тип("Массив") Тогда СписокЗначений.ЗагрузитьЗначения(Значения); - Иначе - ДобавитьУникальноеЗначениеВСписок(СписокЗначений, Значения, Неопределено, Ложь); + ИначеЕсли Значения <> Неопределено Тогда + СписокЗначений.Добавить(Значения); КонецЕсли; Возврат СписокЗначений; КонецЕсли; КонецФункции -Процедура ДополнитьСписок(СписокПриемник, Значения, КонтролироватьТип) Экспорт - Если Значения = Неопределено Тогда - Возврат; +Функция ОписанияТиповСовпадают(ОписаниеТипов1, ОписаниеТипов2) Экспорт + Если ОписаниеТипов1 = Неопределено Или ОписаниеТипов2 = Неопределено Тогда + Возврат Ложь; + КонецЕсли; + Если ОписаниеТипов1 = ОписаниеТипов2 Или Строка(ОписаниеТипов1) = Строка(ОписаниеТипов2) Тогда + Возврат Истина; + КонецЕсли; + + #Если Сервер Тогда + Если ОбщегоНазначения.ЗначениеВСтрокуXML(ОписаниеТипов1) = ОбщегоНазначения.ЗначениеВСтрокуXML(ОписаниеТипов2) Тогда + Возврат Истина; + КонецЕсли; + #КонецЕсли + + Возврат Ложь; +КонецФункции + +Функция ДополнитьСписок(СписокПриемник, СписокИсточник, КонтролироватьТип = Неопределено, Заменять = Истина) Экспорт + Если СписокПриемник = Неопределено Или СписокИсточник = Неопределено Тогда + Возврат Неопределено; + КонецЕсли; + + Результат = Новый Структура; + Результат.Вставить("Всего", 0); + Результат.Вставить("Добавлено", 0); + Результат.Вставить("Обновлено", 0); + Результат.Вставить("Пропущено", 0); + + Если КонтролироватьТип = Неопределено Тогда + КонтролироватьТип = Не ОписанияТиповСовпадают(СписокПриемник.ТипЗначения, СписокИсточник.ТипЗначения); КонецЕсли; - СписокИсточник = ЗначенияСписком(Значения); Если КонтролироватьТип Тогда - ОписаниеТипов = СписокПриемник.ТипЗначения; + ОписаниеТиповПриемника = СписокПриемник.ТипЗначения; КонецЕсли; - Для Каждого ЭлементСписка Из СписокИсточник Цикл - Значение = ЭлементСписка.Значение; - Тип = ТипЗнч(Значение); - Если КонтролироватьТип И Не ОписаниеТипов.СодержитТип(Тип) Тогда + Для Каждого ЭлементИсточник Из СписокИсточник Цикл + Результат.Всего = Результат.Всего + 1; + Значение = ЭлементИсточник.Значение; + Если КонтролироватьТип И Не ОписаниеТиповПриемника.СодержитТип(ТипЗнч(Значение)) Тогда + Результат.Пропущено = Результат.Пропущено + 1; Продолжить; КонецЕсли; - Если Тип = Тип("Число") Или Тип = Тип("Строка") Тогда - Представление = ЭлементСписка.Представление; - ИначеЕсли Тип = Тип("Тип") Тогда - МассивТипов = Новый Массив; - МассивТипов.Добавить(Значение); - Значение = Новый ОписаниеТипов(МассивТипов); - Представление = Неопределено; + ЭлементПриемник = СписокПриемник.НайтиПоЗначению(Значение); + Если ЭлементПриемник = Неопределено Тогда + Результат.Добавлено = Результат.Добавлено + 1; + ЭлементПриемник = СписокПриемник.Добавить(); + ЭлементПриемник.Значение = Значение; Иначе - Представление = Неопределено; + Если Не Заменять Тогда + Результат.Пропущено = Результат.Пропущено + 1; + Продолжить; + Иначе + Результат.Обновлено = Результат.Обновлено + 1; + КонецЕсли; КонецЕсли; - ДобавитьУникальноеЗначениеВСписок(СписокПриемник, Значение, Представление, ЭлементСписка.Пометка); + ЗаполнитьЗначенияСвойств(ЭлементПриемник, ЭлементИсточник); КонецЦикла; -КонецПроцедуры + Возврат Результат; +КонецФункции Функция ЗначениеВМассив(Значение) Экспорт Если ТипЗнч(Значение) = Тип("Массив") Тогда @@ -2113,6 +2592,8 @@ Результат.Вставить("СодержитТипСтрока", Ложь); Результат.Вставить("СодержитТипЧисло", Ложь); Результат.Вставить("СодержитТипПериод", Ложь); + Результат.Вставить("СодержитТипУИД", Ложь); + Результат.Вставить("СодержитТипХранилище", Ложь); Результат.Вставить("СодержитОбъектныеТипы", Ложь); Результат.Вставить("ОграниченнойДлины", Истина); @@ -2135,14 +2616,20 @@ КонецЕсли; Продолжить; КонецЕсли; + #Если Сервер Тогда + Если Тип = Тип("СправочникСсылка.ВнешниеПользователи") + И Не ПолучитьФункциональнуюОпцию("ИспользоватьВнешнихПользователей") Тогда + Если ПривестиКФорме Тогда + ВычитаемыеТипы.Добавить(Тип); + КонецЕсли; + Продолжить; + КонецЕсли; + #КонецЕсли + Результат.КоличествоТипов = Результат.КоличествоТипов + 1; Если Тип = Тип("Тип") Тогда Результат.СодержитТипТип = Истина; - Если ПривестиКФорме Тогда - ДобавляемыеТипы.Добавить(Тип("ОписаниеТипов")); - ВычитаемыеТипы.Добавить(Тип("Тип")); - КонецЕсли; ИначеЕсли Тип = Тип("Дата") Тогда Результат.СодержитТипДата = Истина; Результат.КоличествоПримитивныхТипов = Результат.КоличествоПримитивныхТипов + 1; @@ -2161,6 +2648,10 @@ И ИсходноеОписаниеТипов.КвалификаторыСтроки.ДопустимаяДлина = ДопустимаяДлина.Переменная Тогда Результат.ОграниченнойДлины = Ложь; КонецЕсли; + ИначеЕсли Тип = Тип("УникальныйИдентификатор") Тогда + Результат.СодержитТипУИД = Истина; + ИначеЕсли Тип = Тип("ХранилищеЗначения") Тогда + Результат.СодержитТипХранилище = Истина; Иначе Результат.СодержитОбъектныеТипы = Истина; Результат.ОбъектныеТипы.Добавить(Тип); @@ -2169,7 +2660,11 @@ КонецЦикла; Если ПривестиКФорме Тогда - ОписаниеТиповДляФормы = Новый ОписаниеТипов(ИсходноеОписаниеТипов, ДобавляемыеТипы, ВычитаемыеТипы); + Если ДобавляемыеТипы.Количество() = 0 И ВычитаемыеТипы.Количество() = 0 Тогда + ОписаниеТиповДляФормы = ИсходноеОписаниеТипов; + Иначе + ОписаниеТиповДляФормы = Новый ОписаниеТипов(ИсходноеОписаниеТипов, ДобавляемыеТипы, ВычитаемыеТипы); + КонецЕсли; Результат.Вставить("ОписаниеТиповИсходное", ИсходноеОписаниеТипов); Результат.Вставить("ОписаниеТиповДляФормы", ОписаниеТиповДляФормы); @@ -2182,4 +2677,119 @@ Возврат СтрЗаменить(СтрЗаменить(Строка(Идентификатор), "-", ""), ".", "_"); КонецФункции +Функция СтрЛевДоСимвола(Строка, Разделитель, Остаток = Неопределено) + Позиция = СтрНайти(Строка, Разделитель); + Если Позиция = 0 Тогда + СтрокаДоТочки = Строка; + Остаток = ""; + Иначе + СтрокаДоТочки = Лев(Строка, Позиция - 1); + Остаток = Сред(Строка, Позиция + 1); + КонецЕсли; + Возврат СтрокаДоТочки; +КонецФункции + +Функция СписокВыбораВидовСравнения(ОписаниеТипов) Экспорт + ИнформацияОТипах = АнализТипов(ОписаниеТипов, Ложь); + + Список = Новый СписокЗначений; + + Если ИнформацияОТипах.ОграниченнойДлины Тогда + + Список.Добавить(ВидСравненияКомпоновкиДанных.Равно); + Список.Добавить(ВидСравненияКомпоновкиДанных.НеРавно); + + Список.Добавить(ВидСравненияКомпоновкиДанных.ВСписке); + Список.Добавить(ВидСравненияКомпоновкиДанных.НеВСписке); + + Если ИнформацияОТипах.СодержитОбъектныеТипы Тогда + + Список.Добавить(ВидСравненияКомпоновкиДанных.ВСпискеПоИерархии); // НСтр("ru = 'В списке включая подчиненные'") + Список.Добавить(ВидСравненияКомпоновкиДанных.НеВСпискеПоИерархии); // НСтр("ru = 'Не в списке включая подчиненные'"). + + Список.Добавить(ВидСравненияКомпоновкиДанных.ВИерархии); // НСтр("ru = 'В группе'") + Список.Добавить(ВидСравненияКомпоновкиДанных.НеВИерархии); // НСтр("ru = 'Не в группе'") + + КонецЕсли; + + Если ИнформацияОТипах.КоличествоПримитивныхТипов > 0 Тогда + + Список.Добавить(ВидСравненияКомпоновкиДанных.Меньше); + Список.Добавить(ВидСравненияКомпоновкиДанных.МеньшеИлиРавно); + + Список.Добавить(ВидСравненияКомпоновкиДанных.Больше); + Список.Добавить(ВидСравненияКомпоновкиДанных.БольшеИлиРавно); + + КонецЕсли; + + КонецЕсли; + + Если ИнформацияОТипах.СодержитТипСтрока Тогда + + Список.Добавить(ВидСравненияКомпоновкиДанных.Содержит); + Список.Добавить(ВидСравненияКомпоновкиДанных.НеСодержит); + + Список.Добавить(ВидСравненияКомпоновкиДанных.Подобно); + Список.Добавить(ВидСравненияКомпоновкиДанных.НеПодобно); + + Список.Добавить(ВидСравненияКомпоновкиДанных.НачинаетсяС); + Список.Добавить(ВидСравненияКомпоновкиДанных.НеНачинаетсяС); + + КонецЕсли; + + Если ИнформацияОТипах.ОграниченнойДлины Тогда + + Список.Добавить(ВидСравненияКомпоновкиДанных.Заполнено); + Список.Добавить(ВидСравненияКомпоновкиДанных.НеЗаполнено); + + КонецЕсли; + + Возврат Список; +КонецФункции + +Процедура УдалитьКлючиСтруктуры(Структура, Ключи) Экспорт + Если ТипЗнч("Ключи") = Тип("Строка") Тогда + Ключи = СтрРазделить(Ключи, ",", Ложь); + КонецЕсли; + Для Каждого ИмяКлюча Из Ключи Цикл + Структура.Удалить(СокрЛП(ИмяКлюча)); + КонецЦикла; +КонецПроцедуры + +Функция НайтиСтрокиТаблицы(ТаблицаРеквизит, ДанныеСтроки) Экспорт + Если ТипЗнч(ТаблицаРеквизит) = Тип("ДанныеФормыКоллекция") Тогда // Таблица значений. + Возврат ТаблицаРеквизит.НайтиСтроки(ДанныеСтроки); + ИначеЕсли ТипЗнч(ТаблицаРеквизит) = Тип("ДанныеФормыДерево") Тогда // Дерево значений. + Возврат НайтиРекурсивно(ТаблицаРеквизит.ПолучитьЭлементы(), ДанныеСтроки); + Иначе + Возврат Неопределено; + КонецЕсли; +КонецФункции + +Функция НайтиРекурсивно(НаборСтрок, ДанныеСтроки, Найденные = Неопределено) + Если Найденные = Неопределено Тогда + Найденные = Новый Массив; + КонецЕсли; + Для Каждого СтрокаТаблицы Из НаборСтрок Цикл + ЗначенияСовпадают = Истина; + Для Каждого КлючИЗначение Из ДанныеСтроки Цикл + Если СтрокаТаблицы[КлючИЗначение.Ключ] <> КлючИЗначение.Значение Тогда + ЗначенияСовпадают = Ложь; + Прервать; + КонецЕсли; + КонецЦикла; + Если ЗначенияСовпадают Тогда + Найденные.Добавить(СтрокаТаблицы); + КонецЕсли; + НайтиРекурсивно(СтрокаТаблицы.ПолучитьЭлементы(), ДанныеСтроки, Найденные); + КонецЦикла; + Возврат Найденные; +КонецФункции + +Процедура ПривестиЗначениеКТипу(Значение, ОписаниеТипов) Экспорт + Если Не ОписаниеТипов.СодержитТип(ТипЗнч(Значение)) Тогда + Значение = ОписаниеТипов.ПривестиЗначение(); + КонецЕсли; +КонецПроцедуры + #КонецОбласти diff --git a/SSL/src/CommonModules/ОтчетыПереопределяемый/Module.bsl b/SSL/src/CommonModules/ОтчетыПереопределяемый/Module.bsl index 683cbfe7c..5a902e48a 100644 --- a/SSL/src/CommonModules/ОтчетыПереопределяемый/Module.bsl +++ b/SSL/src/CommonModules/ОтчетыПереопределяемый/Module.bsl @@ -53,6 +53,17 @@ // // См. также: // "УправляемаяФорма.ПриСозданииНаСервере" в синтакс-помощнике. +// ОтчетыКлиентПереопределяемый.ОбработчикКоманды(). +// +// Пример 1 - Добавление команды с обработчиком в ОтчетыКлиентПереопределяемый.ОбработчикКоманды: +// Команда = ФормаОтчета.Команды.Добавить("МояОсобеннаяКоманда"); +// Команда.Действие = "Подключаемый_Команда"; +// Команда.Заголовок = НСтр("ru = 'Моя команда...'"); +// +// Кнопка = ФормаОтчета.Элементы.Добавить(Команда.Имя, Тип("КнопкаФормы"), ФормаОтчета.Элементы.<ИмяПодменю>); +// Кнопка.ИмяКоманды = Команда.Имя; +// +// ФормаОтчета.ПостоянныеКоманды.Добавить(КомандаСоздать.Имя); // Процедура ПриСозданииНаСервере(Форма, Отказ, СтандартнаяОбработка) Экспорт @@ -71,32 +82,4 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// Устаревшие процедуры и функции. - -// Устарела: следует использовать аналогичную процедуру в модуле объекта отчета. -Процедура ПриЗагрузкеВариантаНаСервере(Форма, НовыеНастройкиКД) Экспорт - -КонецПроцедуры - -// Устарела: следует использовать аналогичную процедуру в модуле объекта отчета. -Процедура ПриЗагрузкеПользовательскихНастроекНаСервере(Форма, НовыеПользовательскиеНастройкиКД) Экспорт - -КонецПроцедуры - -// Устарела: следует использовать аналогичную процедуру в модуле объекта отчета. -Процедура ПередЗаполнениемПанелиБыстрыхНастроек(Форма, ПараметрыЗаполнения) Экспорт - -КонецПроцедуры - -// Устарела: следует использовать аналогичную процедуру в модуле объекта отчета. -Процедура ПослеЗаполненияПанелиБыстрыхНастроек(Форма, ПараметрыЗаполнения) Экспорт - -КонецПроцедуры - -// Устарела: следует использовать аналогичную процедуру в модуле объекта отчета. -Процедура КонтекстныйВызовСервера(Форма, Ключ, Параметры, Результат) Экспорт - -КонецПроцедуры - #КонецОбласти diff --git a/SSL/src/CommonModules/ОтчетыСервер/Module.bsl b/SSL/src/CommonModules/ОтчетыСервер/Module.bsl index 40f3e9f2e..4decd44af 100644 --- a/SSL/src/CommonModules/ОтчетыСервер/Module.bsl +++ b/SSL/src/CommonModules/ОтчетыСервер/Module.bsl @@ -3,18 +3,36 @@ // //////////////////////////////////////////////////////////////////////////////// +#Область СлужебныйПрограммныйИнтерфейс + +// Формирует описание периода для целей сбора статистики. +// Получаемая информация не содержит конкретных дат, поэтому может считаться анонимной. +// +// Параметры: +// СтандартныйПериод - СтандартныйПериод - Анализируемый период. +// +// Возвращаемое значение: +// Структура - Описание периода. +// * ВидПериода - Строка - Классификация периода. Например: "Год", "СНачалаГода" или "ДоКонцаГода". +// * СдвигПериода - Число - Количество шагов, необходимых для получения периода относительно текущей даты. +// Размер шага определяется видом периода. +// +Функция АнализПериода(СтандартныйПериод) Экспорт + Если СтандартныйПериод.Вариант = ВариантСтандартногоПериода.ПроизвольныйПериод Тогда + Возврат АнализПроизвольногоПериода(СтандартныйПериод.ДатаНачала, СтандартныйПериод.ДатаОкончания); + Иначе + Возврат АнализСтандартногоПериода(СтандартныйПериод.Вариант); + КонецЕсли; +КонецФункции + +#КонецОбласти + #Область СлужебныеПроцедурыИФункции //////////////////////////////////////////////////////////////////////////////// // Анализ -Функция РасширеннаяИнформацияОНастройках(КомпоновщикНастроекКД, Форма, УсловияВывода = Неопределено) Экспорт - Если Форма = Неопределено Тогда - НастройкиОтчета = ОтчетыКлиентСервер.ПолучитьНастройкиОтчетаПоУмолчанию(); - Иначе - НастройкиОтчета = Форма.НастройкиОтчета; - КонецЕсли; - +Функция РасширеннаяИнформацияОНастройках(КомпоновщикНастроекКД, НастройкиОтчета, ОтчетОбъектИлиПолноеИмя, УсловияВывода = Неопределено) Экспорт НастройкиКД = КомпоновщикНастроекКД.Настройки; ПользовательскиеНастройкиКД = КомпоновщикНастроекКД.ПользовательскиеНастройки; @@ -34,6 +52,7 @@ Информация.Вставить("НастройкиКД", НастройкиКД); Информация.Вставить("НастройкиОтчета", НастройкиОтчета); + Информация.Вставить("ОтчетОбъектИлиПолноеИмя", ОтчетОбъектИлиПолноеИмя); Информация.Вставить("ДеревоВарианта", ДеревоВарианта()); Информация.Вставить("НастройкиВарианта", ТаблицаНастроекВарианта()); Информация.Вставить("ПользовательскиеНастройки", ТаблицаПользовательскихНастроек()); @@ -42,7 +61,7 @@ Информация.Вставить("Связи", Новый Структура); Информация.Связи.Вставить("ПоТипу", ТаблицаСвязейПоТипу()); Информация.Связи.Вставить("ПараметровВыбора", ТаблицаСвязейПараметровВыбора()); - Информация.Связи.Вставить("ОбъектовМетаданных", ТаблицаСвязейОбъектовМетаданных(НастройкиОтчета)); + Информация.Связи.Вставить("ОбъектовМетаданных", ТаблицаСвязейОбъектовМетаданных(НастройкиОтчета, Информация.ОтчетОбъектИлиПолноеИмя)); Информация.Вставить("ДополнительныеНастройкиЭлементов", ДополнительныеНастройкиЭлементов); Информация.Вставить("СоответствиеИменОбъектовМетаданных", Новый Соответствие); @@ -52,6 +71,12 @@ Информация.Вставить("ЕстьБыстрыеНастройки", Ложь); Информация.Вставить("ЕстьОбычныеНастройки", Ложь); + Информация.Вставить("ЕстьВложенныеОтчеты", Ложь); + Информация.Вставить("ЕстьВложенныеОтборы", Ложь); + Информация.Вставить("ЕстьВложенноеОформление", Ложь); + Информация.Вставить("ЕстьВложенныеПоля", Ложь); + Информация.Вставить("ЕстьВложенныеСортировки", Ложь); + Для Каждого ПользовательскаяНастройкаКД Из ПользовательскиеНастройкиКД.Элементы Цикл СвойстваНастройки = Информация.ПользовательскиеНастройки.Добавить(); СвойстваНастройки.ПользовательскаяНастройкаКД = ПользовательскаяНастройкаКД; @@ -62,7 +87,7 @@ Информация.Поиск.ПользовательскиеНастройки.Вставить(СвойстваНастройки.Идентификатор, СвойстваНастройки); КонецЦикла; - СтрокаДерева = ДеревоВариантаЗарегистрироватьУзел(Информация, НастройкиКД, НастройкиКД, Информация.ДеревоВарианта.Строки); + СтрокаДерева = ДеревоВариантаЗарегистрироватьУзел(Информация, НастройкиКД, НастройкиКД, Информация.ДеревоВарианта.Строки, "Отчет"); СтрокаДерева.Глобальная = Истина; Информация.Вставить("ДеревоВариантаКорневаяСтрока", СтрокаДерева); Если Информация.ИдентификаторТекущегоУзлаКД = Неопределено Тогда @@ -98,7 +123,7 @@ // Связь с узлами СКД. Результат.Колонки.Добавить("Идентификатор", Новый ОписаниеТипов("Строка")); - // Описание настройки. + // Тип настройки. Результат.Колонки.Добавить("Тип", Новый ОписаниеТипов("Строка")); Результат.Колонки.Добавить("Подтип", Новый ОписаниеТипов("Строка")); @@ -106,6 +131,12 @@ Результат.Колонки.Добавить("ЕстьПоляИОформление", Новый ОписаниеТипов("Булево")); Результат.Колонки.Добавить("Глобальная", Новый ОписаниеТипов("Булево")); + // Содержимое настройки. + Результат.Колонки.Добавить("СодержитОтборы", Новый ОписаниеТипов("Булево")); + Результат.Колонки.Добавить("СодержитПоля", Новый ОписаниеТипов("Булево")); + Результат.Колонки.Добавить("СодержитСортировки", Новый ОписаниеТипов("Булево")); + Результат.Колонки.Добавить("СодержитУсловноеОформление", Новый ОписаниеТипов("Булево")); + // Вывод. Результат.Колонки.Добавить("Представление", Новый ОписаниеТипов("Строка")); Результат.Колонки.Добавить("Заголовок", Новый ОписаниеТипов("Строка")); @@ -125,6 +156,7 @@ КонецЕсли; СтрокаДерева.ИдентификаторКД = НастройкиКД.ПолучитьИдентификаторПоОбъекту(УзелКД); + СтрокаДерева.Глобальная = (Подтип = "Отчет"); Если СтрокаДерева.Тип = "Настройки" Тогда СтрокаДерева.ЕстьСтруктура = Истина; @@ -146,10 +178,16 @@ Возврат СтрокаДерева; КонецЕсли; - ЗаполнитьПредставлениеНастройки(СтрокаДерева, Ложь); + ЗаполнитьПредставлениеНастройки( + СтрокаДерева, + СтрокаДерева.УзелКД, + Неопределено, + Неопределено); Если СтрокаДерева.ЕстьПоляИОформление Тогда СтрокаДерева.Заголовок = ЗаголовокИзПараметровВывода(УзелКД.ПараметрыВывода); + СтрокаДерева.СодержитПоля = НастройкиКД.НаличиеВыбораУЭлемента(УзелКД); + СтрокаДерева.СодержитУсловноеОформление = НастройкиКД.НаличиеУсловногоОформленияУЭлемента(УзелКД); КонецЕсли; Если Не Информация.ТолькоПользовательские Тогда @@ -162,6 +200,9 @@ СтрокаДерева.ПользовательскаяНастройка = СвойстваНастройки; СтрокаДерева.ПользовательскаяНастройкаКД = СвойстваНастройки.ПользовательскаяНастройкаКД; ЗарегистрироватьПользовательскуюНастройку(Информация, СвойстваНастройки, СтрокаДерева, Неопределено); + Если ЗначениеЗаполнено(СтрокаДерева.Заголовок) Тогда + СвойстваНастройки.Представление = СтрокаДерева.Заголовок; + КонецЕсли; Если Информация.ТолькоПользовательские Тогда СтрокаДерева.ВыводРазрешен = СвойстваНастройки.ВыводРазрешен; КонецЕсли; @@ -172,6 +213,8 @@ Для Каждого ВложенныйЭлемент Из УзелКД.Структура Цикл ДеревоВариантаЗарегистрироватьУзел(Информация, НастройкиКД, ВложенныйЭлемент, СтрокаДерева.Строки); КонецЦикла; + СтрокаДерева.СодержитОтборы = НастройкиКД.НаличиеОтбораУЭлемента(УзелКД); + СтрокаДерева.СодержитСортировки = НастройкиКД.НаличиеПорядкаУЭлемента(УзелКД); КонецЕсли; Если СтрокаДерева.Тип = "Таблица" Тогда @@ -186,9 +229,25 @@ ДеревоВариантаЗарегистрироватьУзел(Информация, НастройкиКД, ВложенныйЭлемент, СтрокаДерева.Строки); КонецЦикла; ИначеЕсли СтрокаДерева.Тип = "НастройкиВложенногоОбъекта" Тогда + Информация.ЕстьВложенныеОтчеты = Истина; ДеревоВариантаЗарегистрироватьУзел(Информация, НастройкиКД, УзелКД.Настройки, СтрокаДерева.Строки); КонецЕсли; + Если Не СтрокаДерева.Глобальная Тогда + Если СтрокаДерева.СодержитПоля Тогда + Информация.ЕстьВложенныеПоля = Истина; + КонецЕсли; + Если СтрокаДерева.СодержитУсловноеОформление Тогда + Информация.ЕстьВложенноеОформление = Истина; + КонецЕсли; + Если СтрокаДерева.СодержитОтборы Тогда + Информация.ЕстьВложенныеОтборы = Истина; + КонецЕсли; + Если СтрокаДерева.СодержитСортировки Тогда + Информация.ЕстьВложенныеСортировки = Истина; + КонецЕсли; + КонецЕсли; + Возврат СтрокаДерева; КонецФункции @@ -244,6 +303,7 @@ Результат.Колонки.Добавить("ВидСравнения"); Результат.Колонки.Добавить("ВводСписком", Новый ОписаниеТипов("Булево")); Результат.Колонки.Добавить("ИнформацияОТипах"); + Результат.Колонки.Добавить("ФормаВыбора", Новый ОписаниеТипов("Строка")); Результат.Колонки.Добавить("ОтмеченныеЗначения"); Результат.Колонки.Добавить("ПараметрыВыбора"); @@ -257,13 +317,16 @@ Результат.Колонки.Добавить("ОписаниеТипов"); Результат.Колонки.Добавить("ЗначенияДляВыбора"); Результат.Колонки.Добавить("ЗапросЗначенийВыбора"); + Результат.Колонки.Добавить("СписокЗначенийПереопределен", Новый ОписаниеТипов("Булево")); Результат.Колонки.Добавить("ОграничиватьВыборУказаннымиЗначениями", Новый ОписаниеТипов("Булево")); // Вывод. + Результат.Колонки.Добавить("ПредставлениеПоУмолчанию", Новый ОписаниеТипов("Строка")); Результат.Колонки.Добавить("Представление", Новый ОписаниеТипов("Строка")); Результат.Колонки.Добавить("ВыводРазрешен", Новый ОписаниеТипов("Булево")); Результат.Колонки.Добавить("ВыводитьФлажок", Новый ОписаниеТипов("Булево")); Результат.Колонки.Добавить("ВыборГруппИЭлементов"); + Результат.Колонки.Добавить("ВыводитьТолькоФлажок", Новый ОписаниеТипов("Булево")); Возврат Результат; КонецФункции @@ -309,6 +372,7 @@ Результат.Колонки.Добавить("ОграничиватьВыборУказаннымиЗначениями", Новый ОписаниеТипов("Булево")); // Вывод. + Результат.Колонки.Добавить("ПредставлениеПоУмолчанию", Новый ОписаниеТипов("Строка")); Результат.Колонки.Добавить("Представление", Новый ОписаниеТипов("Строка")); Результат.Колонки.Добавить("Быстрая", Новый ОписаниеТипов("Булево")); Результат.Колонки.Добавить("Обычная", Новый ОписаниеТипов("Булево")); @@ -347,7 +411,7 @@ Возврат ТаблицаСвязейПараметровВыбора; КонецФункции -Функция ТаблицаСвязейОбъектовМетаданных(НастройкиОтчета) +Функция ТаблицаСвязейОбъектовМетаданных(НастройкиОтчета, ОтчетОбъектИлиПолноеИмя) // Связи из метаданных. Результат = Новый ТаблицаЗначений; Результат.Колонки.Добавить("ВедущийТип", Новый ОписаниеТипов("Тип")); @@ -357,8 +421,7 @@ // Механизмы расширения. ОтчетыПереопределяемый.ДополнитьСвязиОбъектовМетаданных(Результат); // Глобальные связи... Если НастройкиОтчета.События.ДополнитьСвязиОбъектовМетаданных Тогда // ... можно переопределить локально для отчета. - ОтчетОбъект = ОтчетОбъект(НастройкиОтчета); - ОтчетОбъект.ДополнитьСвязиОбъектовМетаданных(Результат); + ОтчетОбъект(ОтчетОбъектИлиПолноеИмя).ДополнитьСвязиОбъектовМетаданных(Результат); КонецЕсли; Результат.Колонки.Добавить("ЕстьВедущие", Новый ОписаниеТипов("Булево")); @@ -434,6 +497,15 @@ ЗарегистрироватьУзелНастроек(НастройкиКД, Информация, СтрокаДерева, "УсловноеОформление"); + // Настройки, свойство ПараметрыВывода + // Таблица, свойство ПараметрыВывода + // Диаграмма, свойство ПараметрыВывода + // Группировка, свойство ПараметрыВывода + // ГруппировкаДиаграммы, свойство ПараметрыВывода + // ГруппировкаТаблицы, свойство ПараметрыВывода + + ЗарегистрироватьУзелНастроек(НастройкиКД, Информация, СтрокаДерева, "ПараметрыВывода"); + КонецЦикла; Найденные = ДеревоВарианта.Строки.НайтиСтроки(Новый Структура("Тип", "Настройки"), Истина); @@ -452,7 +524,7 @@ Владелец = Информация.НастройкиВарианта.Строки.Добавить(); Владелец.СтрокаДерева = СтрокаДерева; - Если ИмяКоллекции <> "ПараметрыДанных" Тогда + Если ИмяКоллекции <> "ПараметрыДанных" И ИмяКоллекции <> "ПараметрыВывода" Тогда Владелец.Идентификатор = УзелКД.ИдентификаторПользовательскойНастройки; КонецЕсли; Владелец.Тип = ОтчетыКлиентСервер.ТипНастройкиСтрокой(ТипЗнч(УзелКД)); @@ -466,20 +538,38 @@ Если СвойстваНастройки <> Неопределено Тогда Владелец.ПользовательскаяНастройка = СвойстваНастройки; ЗарегистрироватьПользовательскуюНастройку(Информация, СвойстваНастройки, Неопределено, Владелец); + СвойстваНастройки.ПараметрыВыбора = Новый Массив; + Владелец.ПараметрыВыбора = Новый Массив; + Владелец.СвязиПараметровВыбора = Новый Массив; + Владелец.СвязиПоМетаданным = Новый Массив; Если Информация.ТолькоПользовательские Тогда Владелец.ВыводРазрешен = СвойстваНастройки.ВыводРазрешен; КонецЕсли; КонецЕсли; КонецЕсли; + Если Владелец.ВыводРазрешен Тогда + Если Владелец.ПользовательскаяНастройка = Неопределено Тогда + ЗаполнитьПредставлениеНастройки( + Владелец, + Владелец.ЭлементКД, + Неопределено, + Неопределено); + Иначе + ЗаполнитьЗначенияСвойств(Владелец, Владелец.ПользовательскаяНастройка, "Представление, ВыводитьТолькоФлажок"); + КонецЕсли; + КонецЕсли; + Если ИмяКоллекции = "Отбор" Или ИмяКоллекции = "ПараметрыДанных" + Или ИмяКоллекции = "ПараметрыВывода" Или ИмяКоллекции = "УсловноеОформление" Тогда - ЗарегистрироватьПодчиненныеЭлементыНастроек(Информация, УзелКД, УзелКД.Элементы, Владелец, Владелец); + ЗарегистрироватьЭлементыНастроек(Информация, УзелКД, УзелКД.Элементы, Владелец, Владелец); КонецЕсли; + КонецПроцедуры -Процедура ЗарегистрироватьПодчиненныеЭлементыНастроек(Информация, УзелКД, НаборЭлементов, Владелец, Родитель) +Процедура ЗарегистрироватьЭлементыНастроек(Информация, УзелКД, НаборЭлементов, Владелец, Родитель) Для Каждого ЭлементКД Из НаборЭлементов Цикл НастройкаВарианта = Родитель.Строки.Добавить(); ЗаполнитьЗначенияСвойств(НастройкаВарианта, Владелец, "СтрокаДерева, ИмяКоллекции, Глобальная"); @@ -489,6 +579,17 @@ НастройкаВарианта.Владелец = Владелец; НастройкаВарианта.ЭлементКД = ЭлементКД; НастройкаВарианта.ВыводРазрешен = Не Информация.ТолькоПользовательские И Владелец.ВыводРазрешен; + НастройкаВарианта.ВыводитьФлажок = Истина; + + Если НастройкаВарианта.Тип = "ВыбранныеПоля" + Или НастройкаВарианта.Тип = "Порядок" + Или НастройкаВарианта.Тип = "КоллекцияЭлементовСтруктурыТаблицы" + Или НастройкаВарианта.Тип = "КоллекцияЭлементовСтруктурыДиаграммы" + Или НастройкаВарианта.Тип = "Отбор" + Или НастройкаВарианта.Тип = "УсловноеОформление" + Или НастройкаВарианта.Тип = "СтруктураНастроек" Тогда + НастройкаВарианта.ВыводитьФлажок = Ложь; + КонецЕсли; Если НастройкаВарианта.Тип = "ЭлементОтбора" Или НастройкаВарианта.Тип = "ЗначениеПараметраНастроек" Тогда @@ -513,14 +614,22 @@ КонецЕсли; КонецЕсли; + Если НастройкаВарианта.ВыводРазрешен Тогда + ЗаполнитьПредставлениеНастройки( + НастройкаВарианта, + НастройкаВарианта.ЭлементКД, + Неопределено, + НастройкаВарианта.ДоступнаяНастройкаКД); + КонецЕсли; + Если НастройкаВарианта.Тип = "ЭлементОтбора" Тогда ЗарегистрироватьТипыИСвязи(Информация, УзелКД, ЭлементКД, НастройкаВарианта); ИначеЕсли НастройкаВарианта.Тип = "ГруппаЭлементовОтбора" Тогда НастройкаВарианта.Значение = ЭлементКД.ТипГруппы; - ЗарегистрироватьПодчиненныеЭлементыНастроек(Информация, УзелКД, ЭлементКД.Элементы, Владелец, НастройкаВарианта); + ЗарегистрироватьЭлементыНастроек(Информация, УзелКД, ЭлементКД.Элементы, Владелец, НастройкаВарианта); ИначеЕсли НастройкаВарианта.Тип = "ЗначениеПараметраНастроек" Тогда ЗарегистрироватьТипыИСвязи(Информация, УзелКД, ЭлементКД, НастройкаВарианта); - ЗарегистрироватьПодчиненныеЭлементыНастроек(Информация, УзелКД, ЭлементКД.ЗначенияВложенныхПараметров, Владелец, НастройкаВарианта); + ЗарегистрироватьЭлементыНастроек(Информация, УзелКД, ЭлементКД.ЗначенияВложенныхПараметров, Владелец, НастройкаВарианта); КонецЕсли; Если СвойстваНастройки <> Неопределено Тогда @@ -552,8 +661,14 @@ Если ДоступнаяНастройкаКД = Неопределено Тогда Возврат; КонецЕсли; - // БыстрыйВыбор, ВыборГруппИЭлементов, ДоступенСписокЗначений, ДоступныеЗначения, ЗапрещатьНезаполненныеЗначения, - // Использование, Маска, СвязьПоТипу, ФормаВыбора ФорматРедактирования. + // ДоступнаяНастройкаКД имеет тип ДоступныйПараметрКомпоновкиДанных: + // Видимость - Булево - Видимость параметра при редактировании значений. + // Параметр - ПараметрКомпоновкиДанных - Имя параметра. + // Значение - Произвольный - Начальное значение. + // ДоступенСписокЗначений - Булево - Можно ли указывать несколько значений. + // ДоступныеЗначения - СписокЗначений, Неопределено - Значения, доступные для выбора. + // БыстрыйВыбор, ВыборГруппИЭлементов, ЗапрещатьНезаполненныеЗначения, + // Использование, Маска, СвязьПоТипу, ФормаВыбора, ФорматРедактирования. Если Не ДоступнаяНастройкаКД.Видимость Тогда НастройкаВарианта.ВыводРазрешен = Ложь; КонецЕсли; @@ -565,6 +680,9 @@ Иначе НастройкаВарианта.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно; КонецЕсли; + Если ДоступнаяНастройкаКД.Использование = ИспользованиеПараметраКомпоновкиДанных.Всегда Тогда + НастройкаВарианта.ВыводитьФлажок = Ложь; + КонецЕсли; Иначе ДоступныеПоляОтбора = УзелКД.ДоступныеПоляОтбора; Если ДоступныеПоляОтбора = Неопределено Тогда @@ -574,6 +692,7 @@ Если ДоступнаяНастройкаКД = Неопределено Тогда Возврат; КонецЕсли; + // ДоступнаяНастройкаКД имеет тип ДоступноеПолеОтбораКомпоновкиДанных. НастройкаВарианта.ДоступнаяНастройкаКД = ДоступнаяНастройкаКД; НастройкаВарианта.ПолеКД = ЭлементКД.ЛевоеЗначение; НастройкаВарианта.Значение = ЭлементКД.ПравоеЗначение; @@ -594,22 +713,10 @@ КонецЕсли; НастройкаВарианта.ОписаниеТипов = ДоступнаяНастройкаКД.ТипЗначения; + НастройкаВарианта.ФормаВыбора = ДоступнаяНастройкаКД.ФормаВыбора; Информация.Поиск.НастройкиВариантаПоПолюКД.Вставить(НастройкаВарианта.ПолеКД, НастройкаВарианта); - НастройкаВарианта.ВыводитьФлажок = Истина; - Если (НастройкаВарианта.Тип = "ЗначениеПараметраНастроек" - И ДоступнаяНастройкаКД.Использование = ИспользованиеПараметраКомпоновкиДанных.Всегда) - Или НастройкаВарианта.Тип = "ВыбранныеПоля" - Или НастройкаВарианта.Тип = "Порядок" - Или НастройкаВарианта.Тип = "КоллекцияЭлементовСтруктурыТаблицы" - Или НастройкаВарианта.Тип = "КоллекцияЭлементовСтруктурыДиаграммы" - Или НастройкаВарианта.Тип = "Отбор" - Или НастройкаВарианта.Тип = "УсловноеОформление" - Или НастройкаВарианта.Тип = "СтруктураНастроек" Тогда - НастройкаВарианта.ВыводитьФлажок = Ложь; - КонецЕсли; - КонецПроцедуры Процедура ЗарегистрироватьТипыИСвязи(Информация, УзелКД, ЭлементКД, НастройкаВарианта) @@ -624,7 +731,6 @@ Если НастройкаВарианта.ВводСписком Тогда НастройкаВарианта.ОтмеченныеЗначения = ОтчетыКлиентСервер.ЗначенияСписком(НастройкаВарианта.Значение); КонецЕсли; - НастройкаВарианта.ЗначенияДляВыбора = Новый СписокЗначений; НастройкаВарианта.ЗапросЗначенийВыбора = Новый Запрос; ШаблонЗапросаПеречислений = "ВЫБРАТЬ Ссылка ИЗ &ИмяПеречисления"; @@ -685,6 +791,7 @@ КонецЦикла; НастройкаВарианта.ИнформацияОТипах = ИнформацияОТипах; + НастройкаВарианта.ОписаниеТипов = ИнформацияОТипах.ОписаниеТиповДляФормы; /////////////////////////////////////////////////////////////////// // Информация о связях и параметрах выбора. @@ -716,54 +823,37 @@ /////////////////////////////////////////////////////////////////// // Список значений. - Если ТипЗнч(ДоступнаяНастройкаКД.ДоступныеЗначения) = Тип("СписокЗначений") - И ДоступнаяНастройкаКД.ДоступныеЗначения.Количество() > 0 Тогда - // Разработчик ограничил выбор списком доступных значений. - НастройкаВарианта.ОграничиватьВыборУказаннымиЗначениями = Истина; - Для Каждого ЭлементСписка Из ДоступнаяНастройкаКД.ДоступныеЗначения Цикл - ЗначениеВСКД = ЭлементСписка.Значение; - Если Не ЗначениеЗаполнено(ЭлементСписка.Представление) - И (ЗначениеВСКД = Неопределено - Или ЗначениеВСКД = Тип("Неопределено") - Или ЗначениеВСКД = Новый ОписаниеТипов("Неопределено") - Или Не ЗначениеЗаполнено(ЗначениеВСКД)) Тогда - Продолжить; // Запрет пустых значений. - КонецЕсли; - Если ТипЗнч(ЗначениеВСКД) = Тип("Тип") Тогда - МассивТипов = Новый Массив; - МассивТипов.Добавить(ЗначениеВСКД); - ЗначениеВФорме = Новый ОписаниеТипов(МассивТипов); - Иначе - ЗначениеВФорме = ЗначениеВСКД; - КонецЕсли; - ОтчетыКлиентСервер.ДобавитьУникальноеЗначениеВСписок(НастройкаВарианта.ЗначенияДляВыбора, ЗначениеВФорме, ЭлементСписка.Представление, Ложь); - КонецЦикла; + Если ТипЗнч(ДоступнаяНастройкаКД.ДоступныеЗначения) = Тип("СписокЗначений") Тогда + НастройкаВарианта.ЗначенияДляВыбора = ДоступнаяНастройкаКД.ДоступныеЗначения; + НастройкаВарианта.ОграничиватьВыборУказаннымиЗначениями = НастройкаВарианта.ЗначенияДляВыбора.Количество() > 0; Иначе + Если ИнформацияОТипах.КоличествоПеречислений = ИнформацияОТипах.КоличествоТипов Тогда + НастройкаВарианта.ЗапросЗначенийВыбора.Текст = ТекстЗапросаЗначений; + НастройкаВарианта.ОграничиватьВыборУказаннымиЗначениями = Истина; // Только перечисления. + КонецЕсли; + + НастройкаВарианта.ЗначенияДляВыбора = Новый СписокЗначений; НастройкиСохраненныеРанее = Информация.ДополнительныеНастройкиЭлементов[НастройкаВарианта.ИдентификаторЭлемента]; Если НастройкиСохраненныеРанее <> Неопределено И ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(НастройкиСохраненныеРанее, "ОграничиватьВыборУказаннымиЗначениями") = Ложь Тогда СтарыеЗначенияДляВыбора = ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(НастройкиСохраненныеРанее, "ЗначенияДляВыбора"); СтароеОписаниеТипов = ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(НастройкиСохраненныеРанее, "ОписаниеТипов"); Если ТипЗнч(СтарыеЗначенияДляВыбора) = Тип("СписокЗначений") И ТипЗнч(СтароеОписаниеТипов) = Тип("ОписаниеТипов") Тогда - КонтролироватьТип = Не ОписанияТиповСовпадают(НастройкаВарианта.ОписаниеТипов, СтароеОписаниеТипов); НастройкаВарианта.ЗначенияДляВыбора.ТипЗначения = НастройкаВарианта.ОписаниеТипов; - ОтчетыКлиентСервер.ДополнитьСписок(НастройкаВарианта.ЗначенияДляВыбора, СтарыеЗначенияДляВыбора, КонтролироватьТип); + ОтчетыКлиентСервер.ДополнитьСписок(НастройкаВарианта.ЗначенияДляВыбора, СтарыеЗначенияДляВыбора, Неопределено, Истина); КонецЕсли; КонецЕсли; - - НастройкаВарианта.ЗапросЗначенийВыбора.Текст = ТекстЗапросаЗначений; - Если ИнформацияОТипах.КоличествоПеречислений = ИнформацияОТипах.КоличествоТипов Тогда - НастройкаВарианта.ОграничиватьВыборУказаннымиЗначениями = Истина; // Только перечисления. - КонецЕсли; КонецЕсли; + ПредставлениеДо = Строка(НастройкаВарианта.ЗначенияДляВыбора); + КоличествоДо = НастройкаВарианта.ЗначенияДляВыбора.Количество(); + // Механизмы расширения. // Глобальные настройки вывода типов. ОтчетыПереопределяемый.ПриОпределенииПараметровВыбора(Неопределено, НастройкаВарианта); // Локальное переопределение для отчета. Если Информация.НастройкиОтчета.События.ПриОпределенииПараметровВыбора Тогда - ОтчетОбъект = ОтчетОбъект(Информация.НастройкиОтчета); - ОтчетОбъект.ПриОпределенииПараметровВыбора(Неопределено, НастройкаВарианта); + ОтчетОбъект(Информация.ОтчетОбъектИлиПолноеИмя).ПриОпределенииПараметровВыбора(Неопределено, НастройкаВарианта); КонецЕсли; // Автоматическое заполнение. @@ -775,6 +865,11 @@ НастройкаВарианта.ЗначенияДляВыбора.СортироватьПоПредставлению(НаправлениеСортировки.Возр); КонецЕсли; + Если КоличествоДо <> НастройкаВарианта.ЗначенияДляВыбора.Количество() + Или ПредставлениеДо <> Строка(НастройкаВарианта.ЗначенияДляВыбора) Тогда + НастройкаВарианта.СписокЗначенийПереопределен = Истина; + КонецЕсли; + КонецПроцедуры Процедура ЗарегистрироватьСвязиОтВедущих(Информация) @@ -887,6 +982,14 @@ Если ТипЗнч(Ведущий.Значение) = Тип("ПолеКомпоновкиДанных") Тогда Продолжить; // Расширенная работа с отборами по полю компоновки данных не поддерживается. КонецЕсли; + Попытка + ЗначениеЗаполнено = ЗначениеЗаполнено(Ведущий.Значение); + Исключение + ЗначениеЗаполнено = Истина; + КонецПопытки; + Если Не ЗначениеЗаполнено Тогда + Продолжить; + КонецЕсли; Подчиненный.ПараметрыВыбора.Добавить(Новый ПараметрВыбора(СвязьПараметровВыбора.ПодчиненныйИмяПараметра, Ведущий.Значение)); КонецЕсли; КонецЦикла; @@ -963,7 +1066,13 @@ СвойстваНастройки.ВыводитьФлажок = Истина; СвойстваНастройки.ВыводитьТолькоФлажок = Ложь; - ЗаполнитьПредставлениеНастройки(СвойстваНастройки, Истина); + ЗаполнитьПредставлениеНастройки( + СвойстваНастройки, + СвойстваНастройки.НастройкаВариантаКД, + СвойстваНастройки.ПользовательскаяНастройкаКД, + СвойстваНастройки.ДоступнаяНастройкаКД); + + СвойстваНастройки.ПредставлениеПоУмолчанию = СвойстваНастройки.Представление; Если СвойстваНастройки.Тип = "ГруппаЭлементовОтбора" Или СвойстваНастройки.Тип = "НастройкиВложенногоОбъекта" @@ -1018,8 +1127,7 @@ ИначеЕсли СвойстваНастройки.ВидСравнения = ВидСравненияКомпоновкиДанных.Заполнено Или СвойстваНастройки.ВидСравнения = ВидСравненияКомпоновкиДанных.НеЗаполнено Тогда - СвойстваНастройки.ВыводитьТолькоФлажок = Истина; - СвойстваНастройки.Представление = СвойстваНастройки.Представление + ": " + НРег(Строка(СвойстваНастройки.ВидСравнения)); + СвойстваНастройки.ТипЭлементов = "УсловиеВРежимеПросмотра"; ИначеЕсли СвойстваНастройки.ВидСравнения = ВидСравненияКомпоновкиДанных.ВСписке Или СвойстваНастройки.ВидСравнения = ВидСравненияКомпоновкиДанных.ВСпискеПоИерархии @@ -1033,11 +1141,6 @@ Иначе СвойстваНастройки.ТипЭлементов = "СвязьСКомпоновщиком"; - Если СвойстваНастройки.ВидСравнения <> ВидСравненияКомпоновкиДанных.Равно - И СвойстваНастройки.ВидСравнения <> ВидСравненияКомпоновкиДанных.Содержит - И Не СвойстваНастройки.ВыводитьТолькоФлажок Тогда - СвойстваНастройки.Представление = СвойстваНастройки.Представление + " (" + НРег(Строка(СвойстваНастройки.ВидСравнения)) + ")"; - КонецЕсли; Если СвойстваНастройки.ВидСравнения = ВидСравненияКомпоновкиДанных.ВИерархии Или СвойстваНастройки.ВидСравнения = ВидСравненияКомпоновкиДанных.НеВИерархии Тогда СвойстваНастройки.ВыборГруппИЭлементов = ГруппыИЭлементы.Группы; @@ -1075,16 +1178,10 @@ Возврат СвойстваНастройки; КонецФункции -Процедура ЗаполнитьПредставлениеНастройки(СвойстваНастройки, ЭтоПользовательскаяНастройка) +Процедура ЗаполнитьПредставлениеНастройки(СвойстваНастройки, НастройкаВариантаКД, ПользовательскаяНастройкаКД, ДоступнаяНастройкаКД) ЭлементЗаголовок = ""; - Если ЭтоПользовательскаяНастройка Тогда - НастройкаВариантаКД = СвойстваНастройки.НастройкаВариантаКД; - ПользовательскаяНастройкаКД = СвойстваНастройки.ПользовательскаяНастройкаКД; - ДоступнаяНастройкаКД = СвойстваНастройки.ДоступнаяНастройкаКД; - Иначе - НастройкаВариантаКД = СвойстваНастройки.УзелКД; + Если ПользовательскаяНастройкаКД = Неопределено Тогда ПользовательскаяНастройкаКД = НастройкаВариантаКД; - ДоступнаяНастройкаКД = Неопределено; КонецЕсли; СтруктураПредставлений = Новый Структура("Представление, ПредставлениеПользовательскойНастройки", "", ""); @@ -1139,7 +1236,7 @@ ИначеЕсли СвойстваНастройки.Тип = "ГруппаЭлементовОтбора" Тогда - ЭлементЗаголовок = Строка(ПользовательскаяНастройкаКД.ТипГруппы); + ЭлементЗаголовок = Строка(НастройкаВариантаКД.ТипГруппы); ИначеЕсли СвойстваНастройки.Тип = "ЭлементОтбора" Тогда @@ -1159,24 +1256,7 @@ ИначеЕсли СвойстваНастройки.Тип = "ЭлементУсловногоОформления" Тогда - ПредставлениеОформления = Строка(ПользовательскаяНастройкаКД.Оформление); - Если ПредставлениеОформления = "" Тогда - ЭлементЗаголовок = НСтр("ru = 'Не оформлять'"); - Иначе - ЭлементЗаголовок = ПредставлениеОформления; - КонецЕсли; - - ПредставлениеПолей = Строка(ПользовательскаяНастройкаКД.Поля); - Если ПредставлениеПолей = "" Тогда - ЭлементЗаголовок = ЭлементЗаголовок + " / " + НСтр("ru = 'Все поля'"); - Иначе - ЭлементЗаголовок = ЭлементЗаголовок + " / " + НСтр("ru = 'Поля:'") + " " + ПредставлениеПолей; - КонецЕсли; - - ПредставлениеОтбора = ПредставлениеОтбора(ПользовательскаяНастройкаКД.Отбор); - Если ПредставлениеОтбора <> "" Тогда - ЭлементЗаголовок = ЭлементЗаголовок + " / " + НСтр("ru = 'Условие:'") + " " + ПредставлениеОтбора; - КонецЕсли; + ЭлементЗаголовок = ОтчетыКлиентСервер.ПредставлениеЭлементаУсловногоОформления(ПользовательскаяНастройкаКД); ИначеЕсли СвойстваНастройки.Тип = "ЗначениеПараметраНастроек" Тогда @@ -1224,98 +1304,6 @@ //////////////////////////////////////////////////////////////////////////////// // Вспомогательные -Функция ПредставлениеОтбора(УзелКД, НаборСтрокКД = Неопределено) - Если НаборСтрокКД = Неопределено Тогда - НаборСтрокКД = УзелКД.Элементы; - КонецЕсли; - - Представление = ""; - - Для Каждого ЭлементКД Из НаборСтрокКД Цикл - - Если ТипЗнч(ЭлементКД) = Тип("ГруппаЭлементовОтбораКомпоновкиДанных") Тогда - - ПредставлениеГруппы = Строка(ЭлементКД.ТипГруппы); - ПредставлениеВложенных = ПредставлениеОтбора(УзелКД, ЭлементКД.Элементы); - Если ПредставлениеВложенных = "" Тогда - Продолжить; - КонецЕсли; - ПредставлениеЭлемента = ПредставлениеГруппы + "(" + ПредставлениеВложенных + ")"; - - ИначеЕсли ТипЗнч(ЭлементКД) = Тип("ЭлементОтбораКомпоновкиДанных") Тогда - - ДоступноеПолеОтбораКД = УзелКД.ДоступныеПоляОтбора.НайтиПоле(ЭлементКД.ЛевоеЗначение); - Если ДоступноеПолеОтбораКД = Неопределено Тогда - Продолжить; - КонецЕсли; - - Если ЗначениеЗаполнено(ДоступноеПолеОтбораКД.Заголовок) Тогда - ПредставлениеПоля = ДоступноеПолеОтбораКД.Заголовок; - Иначе - ПредставлениеПоля = Строка(ЭлементКД.ЛевоеЗначение); - КонецЕсли; - - ПредставлениеЗначения = Строка(ЭлементКД.ПравоеЗначение); - - Если ЭлементКД.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно Тогда - ПредставлениеУсловия = "="; - ИначеЕсли ЭлементКД.ВидСравнения = ВидСравненияКомпоновкиДанных.НеРавно Тогда - ПредставлениеУсловия = "<>"; - ИначеЕсли ЭлементКД.ВидСравнения = ВидСравненияКомпоновкиДанных.Больше Тогда - ПредставлениеУсловия = ">"; - ИначеЕсли ЭлементКД.ВидСравнения = ВидСравненияКомпоновкиДанных.БольшеИлиРавно Тогда - ПредставлениеУсловия = ">="; - ИначеЕсли ЭлементКД.ВидСравнения = ВидСравненияКомпоновкиДанных.Меньше Тогда - ПредставлениеУсловия = "<"; - ИначеЕсли ЭлементКД.ВидСравнения = ВидСравненияКомпоновкиДанных.МеньшеИлиРавно Тогда - ПредставлениеУсловия = "<="; - - ИначеЕсли ЭлементКД.ВидСравнения = ВидСравненияКомпоновкиДанных.ВИерархии Тогда - ПредставлениеУсловия = НСтр("ru = 'В группе'"); - ИначеЕсли ЭлементКД.ВидСравнения = ВидСравненияКомпоновкиДанных.НеВИерархии Тогда - ПредставлениеУсловия = НСтр("ru = 'Не в группе'"); - ИначеЕсли ЭлементКД.ВидСравнения = ВидСравненияКомпоновкиДанных.ВСписке Тогда - ПредставлениеУсловия = НСтр("ru = 'В списке'"); - ИначеЕсли ЭлементКД.ВидСравнения = ВидСравненияКомпоновкиДанных.НеВСписке Тогда - ПредставлениеУсловия = НСтр("ru = 'Не в списке'"); - ИначеЕсли ЭлементКД.ВидСравнения = ВидСравненияКомпоновкиДанных.ВСпискеПоИерархии Тогда - ПредставлениеУсловия = НСтр("ru = 'В списке включая подчиненные'"); - ИначеЕсли ЭлементКД.ВидСравнения = ВидСравненияКомпоновкиДанных.НеВСпискеПоИерархии Тогда - ПредставлениеУсловия = НСтр("ru = 'Не в списке включая подчиненные'"); - - ИначеЕсли ЭлементКД.ВидСравнения = ВидСравненияКомпоновкиДанных.Содержит Тогда - ПредставлениеУсловия = НСтр("ru = 'Содержит'"); - ИначеЕсли ЭлементКД.ВидСравнения = ВидСравненияКомпоновкиДанных.НеСодержит Тогда - ПредставлениеУсловия = НСтр("ru = 'Не содержит'"); - ИначеЕсли ЭлементКД.ВидСравнения = ВидСравненияКомпоновкиДанных.Подобно Тогда - ПредставлениеУсловия = НСтр("ru = 'Подобно'"); - ИначеЕсли ЭлементКД.ВидСравнения = ВидСравненияКомпоновкиДанных.НеПодобно Тогда - ПредставлениеУсловия = НСтр("ru = 'Не подобно'"); - ИначеЕсли ЭлементКД.ВидСравнения = ВидСравненияКомпоновкиДанных.НачинаетсяС Тогда - ПредставлениеУсловия = НСтр("ru = 'Начинается с'"); - ИначеЕсли ЭлементКД.ВидСравнения = ВидСравненияКомпоновкиДанных.НеНачинаетсяС Тогда - ПредставлениеУсловия = НСтр("ru = 'Не начинается с'"); - ИначеЕсли ЭлементКД.ВидСравнения = ВидСравненияКомпоновкиДанных.Заполнено Тогда - ПредставлениеУсловия = НСтр("ru = 'Заполнено'"); - ПредставлениеЗначения = ""; - ИначеЕсли ЭлементКД.ВидСравнения = ВидСравненияКомпоновкиДанных.НеЗаполнено Тогда - ПредставлениеУсловия = НСтр("ru = 'Не заполнено'"); - ПредставлениеЗначения = ""; - КонецЕсли; - - ПредставлениеЭлемента = СокрЛП(ПредставлениеПоля + " " + ПредставлениеУсловия + " " + ПредставлениеЗначения); - - Иначе - Продолжить; - КонецЕсли; - - Представление = Представление + ?(Представление = "", "", ", ") + ПредставлениеЭлемента; - - КонецЦикла; - - Возврат Представление; -КонецФункции - Функция ОписанияТиповСовпадают(ОписаниеТипов1, ОписаниеТипов2) Экспорт Если ОписаниеТипов1 = Неопределено Или ОписаниеТипов2 = Неопределено Тогда Возврат Ложь; @@ -1325,13 +1313,11 @@ Или ОбщегоНазначения.ЗначениеВСтрокуXML(ОписаниеТипов1) = ОбщегоНазначения.ЗначениеВСтрокуXML(ОписаниеТипов2); КонецФункции -Функция ОтчетОбъект(НастройкиОтчета) Экспорт - Если НастройкиОтчета.Свойство("ОтчетОбъект") Тогда - Возврат НастройкиОтчета.ОтчетОбъект; +Функция ОтчетОбъект(ОтчетОбъектИлиПолноеИмя) Экспорт + Если ТипЗнч(ОтчетОбъектИлиПолноеИмя) = Тип("Строка") Тогда + ОтчетОбъектИлиПолноеИмя = ОбщегоНазначения.ОбъектПоПолномуИмени(ОтчетОбъектИлиПолноеИмя); КонецЕсли; - ОтчетОбъект = ОбщегоНазначения.ОбъектПоПолномуИмени(НастройкиОтчета.ПолноеИмя); - НастройкиОтчета.Вставить("ОтчетОбъект", ОтчетОбъект); - Возврат ОтчетОбъект; + Возврат ОтчетОбъектИлиПолноеИмя; КонецФункции //////////////////////////////////////////////////////////////////////////////// @@ -1346,7 +1332,7 @@ // Группа требуется для вывода некоторых типов полей. Если СвойстваНастройки.ТипЭлементов = "СтандартныйПериод" Или СвойстваНастройки.ТипЭлементов = "СписокСПодбором" Тогда - ГруппаИмя = СтрЗаменить(ШаблонИмениЭлемента, "%1", "Группа"); + ГруппаИмя = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонИмениЭлемента, "Группа"); Группа = Элементы.Добавить(ГруппаИмя, Тип("ГруппаФормы"), Элементы.НеОтсортированное); Группа.Вид = ВидГруппыФормы.ОбычнаяГруппа; @@ -1355,9 +1341,26 @@ Группа.ОтображатьЗаголовок = Ложь; КонецЕсли; + // Условие. + ВыводитьУсловие = (СвойстваНастройки.Тип = "ЭлементОтбора" + И СвойстваНастройки.ТипЭлементов <> "СтандартныйПериод" + И СвойстваНастройки.ТипЭлементов <> "ТолькоФлажокЗначения"); + + Если ВыводитьУсловие Тогда + Прочее.ЕстьОтборыСУсловиями = Истина; + + КомандаВидСравненияИмя = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонИмениЭлемента, "ВидСравнения"); + КомандаВидСравнения = Форма.Команды.Добавить(КомандаВидСравненияИмя); + КомандаВидСравнения.Действие = "Подключаемый_ИзменитьВидСравнения"; + КомандаВидСравнения.Заголовок = НСтр("ru = 'Изменить условие отбора...'"); + КомандаВидСравнения.Подсказка = КомандаВидСравнения.Заголовок; // Для платформы. + КомандаВидСравнения.Отображение = ОтображениеКнопки.Текст; + КомандаВидСравнения.Картинка = БиблиотекаКартинок.ВидСравнения; + КонецЕсли; + // Флажок использования. Если СвойстваНастройки.ВыводитьФлажок Тогда - ФлажокИмя = СтрЗаменить(ШаблонИмениЭлемента, "%1", "Использование"); + ФлажокИмя = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонИмениЭлемента, "Использование"); Если СвойстваНастройки.ТипЭлементов = "СписокСПодбором" Тогда ГруппаДляФлажка = Группа; @@ -1367,12 +1370,47 @@ ЭлементВывода.ИмяЭлемента1 = ФлажокИмя; КонецЕсли; + ЗаголовокФлажка = СвойстваНастройки.Представление; + Если ВыводитьУсловие + И СвойстваНастройки.ВидСравнения <> ВидСравненияКомпоновкиДанных.Равно + И СвойстваНастройки.ВидСравнения <> ВидСравненияКомпоновкиДанных.ВСписке + И СвойстваНастройки.ВидСравнения <> ВидСравненияКомпоновкиДанных.ВСпискеПоИерархии + И СвойстваНастройки.ВидСравнения <> ВидСравненияКомпоновкиДанных.Содержит + И СвойстваНастройки.ТипЭлементов <> "УсловиеВРежимеПросмотра" Тогда + ЗаголовокФлажка = ЗаголовокФлажка + " (" + НРег(Строка(СвойстваНастройки.ВидСравнения)) + ")"; + КонецЕсли; + Если Не СвойстваНастройки.ВыводитьТолькоФлажок Тогда + ЗаголовокФлажка = ЗаголовокФлажка + ":"; + КонецЕсли; + Флажок = Элементы.Добавить(ФлажокИмя, Тип("ПолеФормы"), ГруппаДляФлажка); Флажок.Вид = ВидПоляФормы.ПолеФлажка; - Флажок.Заголовок = СвойстваНастройки.Представление + ?(СвойстваНастройки.ВыводитьТолькоФлажок, "", ":"); + Флажок.Заголовок = ЗаголовокФлажка; Флажок.ПутьКДанным = Прочее.ПутьККомпоновщику + ".ПользовательскиеНастройки[" + СвойстваНастройки.ИндексВКоллекции + "].Использование"; Флажок.ПоложениеЗаголовка = ПоложениеЗаголовкаЭлементаФормы.Право; Флажок.УстановитьДействие("ПриИзменении", "Подключаемый_ФлажокИспользование_ПриИзменении"); + + Если ВыводитьУсловие Тогда + КнопкаИмя = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонИмениЭлемента, "ВидСравнения_Использование"); + КнопкаВидСравнения = Элементы.Добавить(КнопкаИмя, Тип("КнопкаФормы"), Флажок.КонтекстноеМеню); + КнопкаВидСравнения.ИмяКоманды = КомандаВидСравненияИмя; + КонецЕсли; + КонецЕсли; + + Если СвойстваНастройки.Тип = "ЗначениеПараметраНастроек" + Или СвойстваНастройки.Тип = "ЭлементОтбора" Тогда + + Если СвойстваНастройки.ВводСписком Тогда + СвойстваНастройки.ОтмеченныеЗначения = ОтчетыКлиентСервер.ЗначенияСписком(СвойстваНастройки.Значение); + КонецЕсли; + + // Сохранение параметров выбора настройки в дополнительных свойствах пользовательских настроек. + НастройкиЭлемента = Новый Структура("Представление, ВыводитьФлажок, + |ВводСписком, ОписаниеТипов, ПараметрыВыбора, ЗначенияДляВыбора, + |ОграничиватьВыборУказаннымиЗначениями, ВыборГруппИЭлементов, ФормаВыбора"); + НастройкиЭлемента.ФормаВыбора = СвойстваНастройки.ДоступнаяНастройкаКД.ФормаВыбора; + ЗаполнитьЗначенияСвойств(НастройкиЭлемента, СвойстваНастройки); + Прочее.ДополнительныеНастройкиЭлементов.Вставить(СвойстваНастройки.ИдентификаторЭлемента, НастройкиЭлемента); КонецЕсли; // Поля для значений. @@ -1380,28 +1418,10 @@ ИнформацияОТипах = СвойстваНастройки.ИнформацияОТипах; - Если СвойстваНастройки.Тип = "ЗначениеПараметраНастроек" - Или СвойстваНастройки.Тип = "ЭлементОтбора" Тогда - - Если СвойстваНастройки.ВводСписком Тогда - СвойстваНастройки.ОтмеченныеЗначения = ОтчетыКлиентСервер.ЗначенияСписком(СвойстваНастройки.Значение); - КонецЕсли; - - // Сохранение параметров выбора настройки в дополнительных свойствах пользовательских настроек. - НастройкиЭлемента = Новый Структура; - НастройкиЭлемента.Вставить("Представление", СвойстваНастройки.Представление); - НастройкиЭлемента.Вставить("ВыводитьФлажок", СвойстваНастройки.ВыводитьФлажок); - НастройкиЭлемента.Вставить("ОписаниеТипов", СвойстваНастройки.ОписаниеТипов); - НастройкиЭлемента.Вставить("ПараметрыВыбора", СвойстваНастройки.ПараметрыВыбора); - НастройкиЭлемента.Вставить("ЗначенияДляВыбора", СвойстваНастройки.ЗначенияДляВыбора); - НастройкиЭлемента.Вставить("ОграничиватьВыборУказаннымиЗначениями", СвойстваНастройки.ОграничиватьВыборУказаннымиЗначениями); - Прочее.ДополнительныеНастройкиЭлементов.Вставить(СвойстваНастройки.ИдентификаторЭлемента, НастройкиЭлемента); - КонецЕсли; - //////////////////////////////////////////////////////////////////////////////// // ВЫВОД. - ЗначениеИмя = СтрЗаменить(ШаблонИмениЭлемента, "%1", "Значение"); + ЗначениеИмя = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонИмениЭлемента, "Значение"); Если СвойстваНастройки.ТипЭлементов = "ТолькоФлажокЗначения" Тогда @@ -1409,14 +1429,36 @@ ЭлементВывода.ИмяЭлемента1 = ЗначениеИмя; - ПолеВвода = Элементы.Добавить(ЗначениеИмя, Тип("ПолеФормы"), Группа); - ПолеВвода.Вид = ВидПоляФормы.ПолеФлажка; - ПолеВвода.Заголовок = СвойстваНастройки.Представление; - ПолеВвода.ПоложениеЗаголовка = ПоложениеЗаголовкаЭлементаФормы.Право; - ПолеВвода.УстановитьДействие("ПриИзменении", "Подключаемый_ФлажокЗначения_ПриИзменении"); + ПолеФлажка = Элементы.Добавить(ЗначениеИмя, Тип("ПолеФормы"), Группа); + ПолеФлажка.Вид = ВидПоляФормы.ПолеФлажка; + ПолеФлажка.Заголовок = СвойстваНастройки.Представление; + ПолеФлажка.ПоложениеЗаголовка = ПоложениеЗаголовкаЭлементаФормы.Право; + ПолеФлажка.УстановитьДействие("ПриИзменении", "Подключаемый_ФлажокЗначения_ПриИзменении"); + + Если ВыводитьУсловие Тогда + КнопкаВидСравнения = Элементы.Добавить(КомандаВидСравненияИмя, Тип("КнопкаФормы"), ПолеФлажка.КонтекстноеМеню); + КнопкаВидСравнения.ИмяКоманды = КомандаВидСравненияИмя; + КонецЕсли; Прочее.ДобавленныеПоляВвода.Вставить(ЗначениеИмя, СвойстваНастройки.Значение); + ИначеЕсли СвойстваНастройки.ТипЭлементов = "УсловиеВРежимеПросмотра" Тогда + + ЭлементВывода.ИмяЭлемента2 = ЗначениеИмя; + + ПолеВвода = Элементы.Добавить(ЗначениеИмя, Тип("ПолеФормы"), Группа); + ПолеВвода.Вид = ВидПоляФормы.ПолеВвода; + ПолеВвода.Заголовок = СвойстваНастройки.Представление; + ПолеВвода.ПоложениеЗаголовка = ПоложениеЗаголовкаЭлементаФормы.Нет; + ПолеВвода.ТолькоПросмотр = Истина; + ПолеВвода.ПутьКДанным = Прочее.ПутьККомпоновщику + ".ПользовательскиеНастройки[" + СвойстваНастройки.ИндексВКоллекции + "].ВидСравнения"; + ПолеВвода.УстановитьДействие("НачалоВыбора", "Подключаемый_ВидСравнения_НачалоВыбора"); + + Если ВыводитьУсловие Тогда + КнопкаВидСравнения = Элементы.Добавить(КомандаВидСравненияИмя, Тип("КнопкаФормы"), ПолеВвода.КонтекстноеМеню); + КнопкаВидСравнения.ИмяКоманды = КомандаВидСравненияИмя; + КонецЕсли; + ИначеЕсли СвойстваНастройки.ТипЭлементов = "СвязьСКомпоновщиком" Тогда Прочее.ИменаОсновныхРеквизитовФормы.Вставить(СвойстваНастройки.ИдентификаторЭлемента, ЗначениеИмя); @@ -1425,75 +1467,77 @@ ЭлементВывода.ИмяЭлемента2 = ЗначениеИмя; ПолеВвода = Элементы.Добавить(ЗначениеИмя, Тип("ПолеФормы"), Группа); - ПолеВвода.Вид = ВидПоляФормы.ПолеВвода; - ПолеВвода.Заголовок = СвойстваНастройки.Представление; - ПолеВвода.ПутьКДанным = Прочее.ПутьККомпоновщику + ".ПользовательскиеНастройки[" + СвойстваНастройки.ИндексВКоллекции + "].Значение"; + ПолеВвода.Вид = ВидПоляФормы.ПолеВвода; + ПолеВвода.Заголовок = СвойстваНастройки.Представление; ПолеВвода.ПоложениеЗаголовка = ПоложениеЗаголовкаЭлементаФормы.Нет; ПолеВвода.УстановитьДействие("ПриИзменении", "Подключаемый_ПолеВвода_ПриИзменении"); + // Связь с СКД. + ПолеВвода.ПутьКДанным = Прочее.ПутьККомпоновщику + ".ПользовательскиеНастройки[" + СвойстваНастройки.ИндексВКоллекции + "].Значение"; + Если СвойстваНастройки.ВводСписком Тогда - ПолеВвода.УстановитьДействие("НачалоВыбора", "Подключаемый_СписокКомпоновщика_Значение_НачалоВыбора"); + ПолеВвода.УстановитьДействие("НачалоВыбора", "Подключаемый_СписокКомпоновщика_НачалоВыбора"); + ИначеЕсли СвойстваНастройки.ДоступнаяНастройкаКД <> Неопределено + И СвойстваНастройки.ДоступнаяНастройкаКД.БыстрыйВыбор <> Истина Тогда + // Когда есть отключаемые связи "ПоМетаданным" или "ПараметровВыбора" от подчиненного, + // тогда для выбора используется прикладная логика. + Если СвойстваНастройки.НастройкаВарианта.СвязиПараметровВыбора.Количество() > 0 + Или СвойстваНастройки.НастройкаВарианта.СвязиПоМетаданным.Количество() > 0 Тогда + ПолеВвода.УстановитьДействие("НачалоВыбора", "Подключаемый_ЗначениеКомпоновщика_НачалоВыбора"); + КонецЕсли; КонецЕсли; - Если СвойстваНастройки.Тип = "ЗначениеПараметраНастроек" Тогда - ПолеВвода.АвтоОтметкаНезаполненного = СвойстваНастройки.ДоступнаяНастройкаКД.ЗапрещатьНезаполненныеЗначения; + Если СвойстваНастройки.Тип = "ЗначениеПараметраНастроек" + Или СвойстваНастройки.Тип = "ЭлементОтбора" Тогда + + ЗаполнитьЗначенияСвойств(ПолеВвода, СвойстваНастройки.ДоступнаяНастройкаКД, "БыстрыйВыбор, Маска, ФормаВыбора, ФорматРедактирования"); + + Если СвойстваНастройки.Тип = "ЗначениеПараметраНастроек" Тогда + ПолеВвода.АвтоОтметкаНезаполненного = СвойстваНастройки.ДоступнаяНастройкаКД.ЗапрещатьНезаполненныеЗначения; + КонецЕсли; + + ПолеВвода.ВыборГруппИЭлементов = СвойстваНастройки.ВыборГруппИЭлементов; + + // Поля ввода следующих типов не растягиваются по горизонтали и не имеют кнопки очистки: + // Дата, Булево, Число, Тип. + ПолеВвода.КнопкаОткрытия = Ложь; + ПолеВвода.КнопкаРегулирования = Ложь; + ПолеВвода.КнопкаОчистки = ИнформацияОТипах.СодержитОбъектныеТипы; + ПолеВвода.РастягиватьПоГоризонтали = ИнформацияОТипах.СодержитОбъектныеТипы; + + Если Не СвойстваНастройки.ВводСписком Тогда + Для Каждого ЭлементСпискаВФорме Из СвойстваНастройки.ЗначенияДляВыбора Цикл + ЗаполнитьЗначенияСвойств(ПолеВвода.СписокВыбора.Добавить(), ЭлементСпискаВФорме); + КонецЦикла; + Если СвойстваНастройки.ОграничиватьВыборУказаннымиЗначениями Тогда + ПолеВвода.РежимВыбораИзСписка = Истина; + ПолеВвода.КнопкаСоздания = Ложь; + ПолеВвода.КнопкаВыбора = Ложь; + ПолеВвода.КнопкаВыпадающегоСписка = Истина; + ПолеВвода.РастягиватьПоГоризонтали = Истина; + КонецЕсли; + // Для платформы (переопределение доступных значений на клиенте). + Если СвойстваНастройки.НастройкаВарианта.СписокЗначенийПереопределен Тогда + РезультатКлиента = Прочее.ПараметрыЗаполнения.Результат; + СвоиСпискиВыбора = ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(РезультатКлиента, "СвоиСпискиВыбора"); + Если СвоиСпискиВыбора = Неопределено Тогда + СвоиСпискиВыбора = Новый Массив; + РезультатКлиента.Вставить("СвоиСпискиВыбора", СвоиСпискиВыбора); + КонецЕсли; + Если СвоиСпискиВыбора.Найти(СвойстваНастройки.ИдентификаторЭлемента) = Неопределено Тогда + СвоиСпискиВыбора.Добавить(СвойстваНастройки.ИдентификаторЭлемента); + КонецЕсли; + КонецЕсли; + КонецЕсли; + + // Условие. + Если ВыводитьУсловие Тогда + КнопкаВидСравнения = Элементы.Добавить(КомандаВидСравненияИмя, Тип("КнопкаФормы"), ПолеВвода.КонтекстноеМеню); + КнопкаВидСравнения.ИмяКоманды = КомандаВидСравненияИмя; + КонецЕсли; + КонецЕсли; - ИначеЕсли СвойстваНастройки.ТипЭлементов = "ПолеВвода" Тогда - - ЭлементВывода.ИмяЭлемента2 = ЗначениеИмя; - - Прочее.ИменаОсновныхРеквизитовФормы.Вставить(СвойстваНастройки.ИдентификаторЭлемента, ЗначениеИмя); - Прочее.ИменаЭлементовДляУстановкиСвязей.Вставить(СвойстваНастройки.ИдентификаторЭлемента, ЗначениеИмя); - - // Реквизит - БыстрыеНастройкиДобавитьРеквизит(Прочее.ПараметрыЗаполнения, ЗначениеИмя, СвойстваНастройки.ОписаниеТипов); - - ПолеВвода = Элементы.Добавить(ЗначениеИмя, Тип("ПолеФормы"), Группа); - ПолеВвода.Вид = ВидПоляФормы.ПолеВвода; - ПолеВвода.Заголовок = СвойстваНастройки.Представление; - ПолеВвода.КнопкаОткрытия = Ложь; - ПолеВвода.КнопкаРегулирования = Ложь; - ПолеВвода.ПоложениеЗаголовка = ПоложениеЗаголовкаЭлементаФормы.Нет; - ПолеВвода.УстановитьДействие("ПриИзменении", "Подключаемый_ПолеВвода_ПриИзменении"); - - ЗаполнитьЗначенияСвойств(ПолеВвода, СвойстваНастройки.ДоступнаяНастройкаКД, "БыстрыйВыбор, Маска, ФормаВыбора, ФорматРедактирования"); - - ПолеВвода.ВыборГруппИЭлементов = СвойстваНастройки.ВыборГруппИЭлементов; - - Если СвойстваНастройки.Тип = "ЗначениеПараметраНастроек" Тогда - ПолеВвода.АвтоОтметкаНезаполненного = СвойстваНастройки.ДоступнаяНастройкаКД.ЗапрещатьНезаполненныеЗначения; - КонецЕсли; - - // Поля ввода следующих типов не растягиваются по горизонтали и не имеют кнопки очистки: - // Дата, Булево, Число, Тип. - ПолеВвода.КнопкаОчистки = ИнформацияОТипах.СодержитОбъектныеТипы; - ПолеВвода.РастягиватьПоГоризонтали = ИнформацияОТипах.СодержитОбъектныеТипы; - Для Каждого ЭлементСпискаВФорме Из СвойстваНастройки.ЗначенияДляВыбора Цикл - ЗаполнитьЗначенияСвойств(ПолеВвода.СписокВыбора.Добавить(), ЭлементСпискаВФорме); - КонецЦикла; - Если СвойстваНастройки.ОграничиватьВыборУказаннымиЗначениями Тогда - ПолеВвода.РежимВыбораИзСписка = Истина; - ПолеВвода.КнопкаСоздания = Ложь; - ПолеВвода.РастягиватьПоГоризонтали = Истина; - КонецЕсли; - - // Фиксированные параметры выбора. - Если СвойстваНастройки.ПараметрыВыбора.Количество() > 0 Тогда - ПолеВвода.ПараметрыВыбора = Новый ФиксированныйМассив(СвойстваНастройки.ПараметрыВыбора); - КонецЕсли; - - // Значение реквизита. - Значение = СвойстваНастройки.Значение; - Если ТипЗнч(Значение) = Тип("СтандартнаяДатаНачала") Тогда - Значение = Дата(Значение); - ИначеЕсли ТипЗнч(Значение) = Тип("Тип") Тогда - МассивТипов = Новый Массив; - МассивТипов.Добавить(Значение); - Значение = Новый ОписаниеТипов(МассивТипов); - КонецЕсли; - Прочее.ДобавленныеПоляВвода.Вставить(ЗначениеИмя, Значение); - ИначеЕсли СвойстваНастройки.ТипЭлементов = "СтандартныйПериод" Тогда Группа.Группировка = ГруппировкаПодчиненныхЭлементовФормы.Горизонтальная; @@ -1501,14 +1545,14 @@ ЭлементВывода.Размер = 1; ЭлементВывода.ИмяЭлемента2 = ГруппаИмя; - ВидПериодаИмя = СтрЗаменить(ШаблонИмениЭлемента, "%1", "Вид"); - ПредставлениеИмя = СтрЗаменить(ШаблонИмениЭлемента, "%1", "Представление"); - ПериодНачалоИмя = СтрЗаменить(ШаблонИмениЭлемента, "%1", "Начало"); - ПериодОкончаниеИмя = СтрЗаменить(ШаблонИмениЭлемента, "%1", "Окончание"); - ДекорацияИмя = СтрЗаменить(ШаблонИмениЭлемента, "%1", "Декорация"); - СтраницыИмя = СтрЗаменить(ШаблонИмениЭлемента, "%1", "Страницы"); - СтраницаСтандартныйИмя = СтрЗаменить(ШаблонИмениЭлемента, "%1", "СтраницаСтандартный"); - СтраницаПроизвольныйИмя = СтрЗаменить(ШаблонИмениЭлемента, "%1", "СтраницаПроизвольный"); + ВидПериодаИмя = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонИмениЭлемента, "Вид"); + ПредставлениеИмя = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонИмениЭлемента, "Представление"); + ПериодНачалоИмя = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонИмениЭлемента, "Начало"); + ПериодОкончаниеИмя = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонИмениЭлемента, "Окончание"); + ДекорацияИмя = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонИмениЭлемента, "Декорация"); + СтраницыИмя = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонИмениЭлемента, "Страницы"); + СтраницаСтандартныйИмя = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонИмениЭлемента, "СтраницаСтандартный"); + СтраницаПроизвольныйИмя = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонИмениЭлемента, "СтраницаПроизвольный"); // Реквизиты. БыстрыеНастройкиДобавитьРеквизит(Прочее.ПараметрыЗаполнения, ЗначениеИмя, "СтандартныйПериод"); @@ -1540,8 +1584,6 @@ ГруппаСтраниц = Элементы.Добавить(СтраницыИмя, Тип("ГруппаФормы"), Группа); ГруппаСтраниц.Вид = ВидГруппыФормы.Страницы; ГруппаСтраниц.ОтображениеСтраниц = ОтображениеСтраницФормы.Нет; - ГруппаСтраниц.Ширина = 24; - ГруппаСтраниц.РастягиватьПоГоризонтали = Ложь; // Страница СтандартныйПериод. СтраницаСтандартныйПериод = Элементы.Добавить(СтраницаСтандартныйИмя, Тип("ГруппаФормы"), ГруппаСтраниц); @@ -1559,7 +1601,8 @@ Период = Элементы.Добавить(ПредставлениеИмя, Тип("ПолеФормы"), СтраницаСтандартныйПериод); Период.Вид = ВидПоляФормы.ПолеВвода; Период.Заголовок = НСтр("ru = 'Период'"); - Период.РастягиватьПоГоризонтали = Истина; + Период.Ширина = 22; + Период.РастягиватьПоГоризонтали = Ложь; Период.КнопкаВыбора = Истина; Период.КнопкаОткрытия = Ложь; Период.КнопкаОчистки = Ложь; @@ -1572,7 +1615,8 @@ // Начало произвольного периода. ПериодНачало = Элементы.Добавить(ПериодНачалоИмя, Тип("ПолеФормы"), СтраницаПроизвольныйПериод); ПериодНачало.Вид = ВидПоляФормы.ПолеВвода; - ПериодНачало.РастягиватьПоГоризонтали = Истина; + ПериодНачало.Ширина = 9; + ПериодНачало.РастягиватьПоГоризонтали = Ложь; ПериодНачало.КнопкаВыбора = Истина; ПериодНачало.КнопкаОткрытия = Ложь; ПериодНачало.КнопкаОчистки = Ложь; @@ -1627,15 +1671,15 @@ ЭлементВывода.Размер = 5; ЭлементВывода.ИмяЭлемента1 = ГруппаИмя; - ГруппаЗаголовокИмя = СтрЗаменить(ШаблонИмениЭлемента, "%1", "ГруппаЗаголовка"); - ДекорацияИмя = СтрЗаменить(ШаблонИмениЭлемента, "%1", "Декорация"); - ТаблицаИмя = СтрЗаменить(ШаблонИмениЭлемента, "%1", "СписокЗначений"); - ГруппаКолонокИмя = СтрЗаменить(ШаблонИмениЭлемента, "%1", "ГруппаКолонок"); - КолонкаИспользованиеИмя = СтрЗаменить(ШаблонИмениЭлемента, "%1", "Колонка_Использование"); - КолонкаЗначениеИмя = СтрЗаменить(ШаблонИмениЭлемента, "%1", "Колонка_Значение"); - КоманднаяПанельИмя = СтрЗаменить(ШаблонИмениЭлемента, "%1", "КоманднаяПанель"); - КнопкаПодборИмя = СтрЗаменить(ШаблонИмениЭлемента, "%1", "Подбор"); - КнопкаВставитьИмя = СтрЗаменить(ШаблонИмениЭлемента, "%1", "ВставитьИзБуфера"); + ГруппаЗаголовокИмя = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонИмениЭлемента, "ГруппаЗаголовка"); + ДекорацияИмя = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонИмениЭлемента, "Декорация"); + ТаблицаИмя = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонИмениЭлемента, "СписокЗначений"); + ГруппаКолонокИмя = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонИмениЭлемента, "ГруппаКолонок"); + КолонкаИспользованиеИмя = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонИмениЭлемента, "Колонка_Использование"); + КолонкаЗначениеИмя = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонИмениЭлемента, "Колонка_Значение"); + КоманднаяПанельИмя = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонИмениЭлемента, "КоманднаяПанель"); + КнопкаПодборИмя = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонИмениЭлемента, "Подбор"); + КнопкаВставитьИмя = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонИмениЭлемента, "ВставитьИзБуфера"); Прочее.ИменаОсновныхРеквизитовФормы.Вставить(СвойстваНастройки.ИдентификаторЭлемента, ТаблицаИмя); Прочее.ИменаЭлементовДляУстановкиСвязей.Вставить(СвойстваНастройки.ИдентификаторЭлемента, КолонкаЗначениеИмя); @@ -1664,31 +1708,31 @@ Если Не СвойстваНастройки.ОграничиватьВыборУказаннымиЗначениями Тогда Если ИнформацияОТипах.СодержитСсылочныеТипы Тогда КомандаПодбор = Форма.Команды.Добавить(КнопкаПодборИмя); - КомандаПодбор.Действие = "Подключаемый_СписокСПодбором_Подбор"; - КомандаПодбор.Заголовок = НСтр("ru = 'Подбор'"); - КомандаПодбор.Отображение = ОтображениеКнопки.Текст; + КомандаПодбор.Действие = "Подключаемый_СписокСПодбором_Подбор"; + КомандаПодбор.Заголовок = НСтр("ru = 'Подбор'"); Иначе КомандаПодбор = Форма.Команды.Добавить(КнопкаПодборИмя); - КомандаПодбор.Действие = "Подключаемый_СписокСПодбором_Добавить"; - КомандаПодбор.Заголовок = НСтр("ru = 'Добавить'"); - КомандаПодбор.Отображение = ОтображениеКнопки.Текст; - КомандаПодбор.Картинка = БиблиотекаКартинок.СоздатьЭлементСписка; + КомандаПодбор.Действие = "Подключаемый_СписокСПодбором_Добавить"; + КомандаПодбор.Заголовок = НСтр("ru = 'Добавить'"); + КомандаПодбор.Картинка = БиблиотекаКартинок.СоздатьЭлементСписка; КонецЕсли; КнопкаПодбор = Элементы.Добавить(КнопкаПодборИмя, Тип("КнопкаФормы"), ГруппаЗаголовокТаблицы); - КнопкаПодбор.ИмяКоманды = КнопкаПодборИмя; - КнопкаПодбор.Вид = ВидКнопкиФормы.Гиперссылка; + КнопкаПодбор.ИмяКоманды = КнопкаПодборИмя; + КнопкаПодбор.Вид = ВидКнопкиФормы.Гиперссылка; + КнопкаПодбор.Отображение = ОтображениеКнопки.Текст; - Если Прочее.ЕстьЗагрузкаДанныхИзФайла Тогда + Если СвойстваНастройки.ИнформацияОТипах.СодержитСсылочныеТипы И Прочее.ЕстьЗагрузкаДанныхИзФайла Тогда КомандаВставить = Форма.Команды.Добавить(КнопкаВставитьИмя); - КомандаВставить.Действие = "Подключаемый_СписокСПодбором_ВставитьИзБуфера"; - КомандаВставить.Заголовок = НСтр("ru = 'Вставить из буфера обмена...'"); - КомандаВставить.Картинка = БиблиотекаКартинок.ЗаполнитьФорму; - КомандаВставить.Отображение = ОтображениеКнопки.Картинка; + КомандаВставить.Действие = "Подключаемый_СписокСПодбором_ВставитьИзБуфера"; + КомандаВставить.Заголовок = НСтр("ru = 'Вставить из буфера обмена...'"); + КомандаВставить.Подсказка = КомандаВставить.Заголовок; // Для платформы. + КомандаВставить.Картинка = БиблиотекаКартинок.ЗаполнитьФорму; КнопкаВставить = Элементы.Добавить(КнопкаВставитьИмя, Тип("КнопкаФормы"), ГруппаЗаголовокТаблицы); - КнопкаВставить.ИмяКоманды = КнопкаВставитьИмя; - КнопкаВставить.Вид = ВидКнопкиФормы.Гиперссылка; + КнопкаВставить.ИмяКоманды = КнопкаВставитьИмя; + КнопкаВставить.Вид = ВидКнопкиФормы.Гиперссылка; + КнопкаВставить.Отображение = ОтображениеКнопки.Картинка; КонецЕсли; КонецЕсли; @@ -1727,13 +1771,6 @@ ТаблицаФормы.Высота = 3; Если СвойстваНастройки.ВыводитьФлажок Тогда - // Для платформы 8.3.5 и ниже. - Инструкция = ВариантыОтчетов.ИнструкцияУсловногоОформления(); - Инструкция.Поля = ТаблицаИмя + "," + КолонкаИспользованиеИмя + "," + КолонкаЗначениеИмя; - Инструкция.Отборы.Вставить(Флажок.ПутьКДанным, Ложь); - Инструкция.Оформление.Вставить("ЦветТекста", ЦветаСтиля.НедоступныеДанныеЦвет); - ВариантыОтчетов.ДобавитьЭлементУсловногоОформления(Форма, Инструкция); - Если Не СвойстваНастройки.ПользовательскаяНастройкаКД.Использование Тогда ТаблицаФормы.ЦветТекста = Форма.ЦветНеактивныхЗначенийТаблицы; КонецЕсли; @@ -1771,6 +1808,11 @@ КолонкаЗначениеЭлемент.ПараметрыВыбора = Новый ФиксированныйМассив(СвойстваНастройки.ПараметрыВыбора); КонецЕсли; + Если ВыводитьУсловие Тогда + КнопкаВидСравнения = Элементы.Добавить(КомандаВидСравненияИмя, Тип("КнопкаФормы"), ТаблицаФормы.КонтекстноеМеню); + КнопкаВидСравнения.ИмяКоманды = КомандаВидСравненияИмя; + КонецЕсли; + Дополнительно = Новый Структура; Дополнительно.Вставить("ТаблицаИмя", ТаблицаИмя); Дополнительно.Вставить("ИмяКолонкиЗначение", КолонкаЗначениеИмя); @@ -1782,7 +1824,7 @@ КонецЕсли; Если ЭлементВывода.ИмяЭлемента1 = Неопределено Тогда - ЗаголовокИмя = СтрЗаменить(ШаблонИмениЭлемента, "%1", "Заголовок"); + ЗаголовокИмя = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонИмениЭлемента, "Заголовок"); ПолеНадписи = Элементы.Добавить(ЗаголовокИмя, Тип("ДекорацияФормы"), Элементы.НеОтсортированное); ПолеНадписи.Вид = ВидДекорацииФормы.Надпись; ПолеНадписи.Заголовок = СвойстваНастройки.Представление + ":"; @@ -1817,7 +1859,7 @@ Если ОписанияТиповСовпадают(ТипыСуществующего, ТипыДобавляемого) Тогда ПараметрыЗаполнения.Реквизиты.Существующие.Удалить(РеквизитПолноеИмя); Иначе - ПозицияТочки = Найти(РеквизитПолноеИмя, "."); + ПозицияТочки = СтрНайти(РеквизитПолноеИмя, "."); Если ПозицияТочки = 0 Тогда ПутьКРеквизиту = ""; КраткоеИмяРеквизита = РеквизитПолноеИмя; @@ -1949,7 +1991,7 @@ ТаблицаЭлемент.ВыделенныеСтроки.Очистить(); Если СтрокиТаблицы.Текущая <> Неопределено Тогда - Найденные = НайтиСтрокиТаблицы(ТаблицаРеквизит, СтрокиТаблицы.Текущая); + Найденные = ОтчетыКлиентСервер.НайтиСтрокиТаблицы(ТаблицаРеквизит, СтрокиТаблицы.Текущая); Если Найденные <> Неопределено И Найденные.Количество() > 0 Тогда Для Каждого СтрокаТаблицы Из Найденные Цикл Если СтрокаТаблицы <> Неопределено Тогда @@ -1962,7 +2004,7 @@ КонецЕсли; Для Каждого ДанныеСтроки Из СтрокиТаблицы.Выделенные Цикл - Найденные = НайтиСтрокиТаблицы(ТаблицаРеквизит, ДанныеСтроки); + Найденные = ОтчетыКлиентСервер.НайтиСтрокиТаблицы(ТаблицаРеквизит, ДанныеСтроки); Если Найденные <> Неопределено И Найденные.Количество() > 0 Тогда Для Каждого СтрокаТаблицы Из Найденные Цикл Если СтрокаТаблицы <> Неопределено Тогда @@ -1973,34 +2015,441 @@ КонецЦикла; КонецПроцедуры -Функция НайтиСтрокиТаблицы(ТаблицаРеквизит, ДанныеСтроки) - Если ТипЗнч(ТаблицаРеквизит) = Тип("ДанныеФормыКоллекция") Тогда // Таблица значений. - Возврат ТаблицаРеквизит.НайтиСтроки(ДанныеСтроки); - ИначеЕсли ТипЗнч(ТаблицаРеквизит) = Тип("ДанныеФормыДерево") Тогда // Дерево значений. - Возврат НайтиРекурсивно(ТаблицаРеквизит.ПолучитьЭлементы(), ДанныеСтроки); - Иначе - Возврат Неопределено; +//////////////////////////////////////////////////////////////////////////////// +// Период + +Функция АнализСтандартногоПериода(Знач Вариант) + Результат = Новый Структура("ВидПериода, СдвигПериода"); + + Если Вариант = ВариантСтандартногоПериода.ЭтотГод Тогда + Результат.ВидПериода = "Год"; + Результат.СдвигПериода = 0; + + ИначеЕсли Вариант = ВариантСтандартногоПериода.ПрошлыйГод Тогда + Результат.ВидПериода = "Год"; + Результат.СдвигПериода = -1; + + ИначеЕсли Вариант = ВариантСтандартногоПериода.СледующийГод Тогда + Результат.ВидПериода = "Год"; + Результат.СдвигПериода = 1; + + ИначеЕсли Вариант = ВариантСтандартногоПериода.СНачалаЭтогоГода Тогда + Результат.ВидПериода = "СНачалаГода"; + Результат.СдвигПериода = 0; + + ИначеЕсли Вариант = ВариантСтандартногоПериода.ПрошлыйГодДоТакойЖеДаты Тогда + Результат.ВидПериода = "СНачалаГода"; + Результат.СдвигПериода = -1 + + ИначеЕсли Вариант = ВариантСтандартногоПериода.СледующийГодДоТакойЖеДаты Тогда + Результат.ВидПериода = "СНачалаГода"; + Результат.СдвигПериода = 1; + + ИначеЕсли Вариант = ВариантСтандартногоПериода.ДоКонцаЭтогоГода Тогда + Результат.ВидПериода = "ДоКонцаГода"; + Результат.СдвигПериода = 0; + + ИначеЕсли Вариант = ВариантСтандартногоПериода.ЭтоПолугодие Тогда + Результат.ВидПериода = "Полугодие"; + Результат.СдвигПериода = 0; + + ИначеЕсли Вариант = ВариантСтандартногоПериода.ПрошлоеПолугодие Тогда + Результат.ВидПериода = "Полугодие"; + Результат.СдвигПериода = -1; + + ИначеЕсли Вариант = ВариантСтандартногоПериода.СледующееПолугодие Тогда + Результат.ВидПериода = "Полугодие"; + Результат.СдвигПериода = 1; + + ИначеЕсли Вариант = ВариантСтандартногоПериода.СНачалаЭтогоПолугодия Тогда + Результат.ВидПериода = "СНачалаПолугодия"; + Результат.СдвигПериода = 0; + + ИначеЕсли Вариант = ВариантСтандартногоПериода.ПрошлоеПолугодиеДоТакойЖеДаты Тогда + Результат.ВидПериода = "СНачалаПолугодия"; + Результат.СдвигПериода = -1; + + ИначеЕсли Вариант = ВариантСтандартногоПериода.СледующееПолугодиеДоТакойЖеДаты Тогда + Результат.ВидПериода = "СНачалаПолугодия"; + Результат.СдвигПериода = 1; + + ИначеЕсли Вариант = ВариантСтандартногоПериода.ДоКонцаЭтогоПолугодия Тогда + Результат.ВидПериода = "ДоКонцаПолугодия"; + Результат.СдвигПериода = 0; + + ИначеЕсли Вариант = ВариантСтандартногоПериода.ЭтотКвартал Тогда + Результат.ВидПериода = "Квартал"; + Результат.СдвигПериода = 0; + + ИначеЕсли Вариант = ВариантСтандартногоПериода.ПрошлыйКвартал Тогда + Результат.ВидПериода = "Квартал"; + Результат.СдвигПериода = -1; + + ИначеЕсли Вариант = ВариантСтандартногоПериода.СледующийКвартал Тогда + Результат.ВидПериода = "Квартал"; + Результат.СдвигПериода = 1; + + ИначеЕсли Вариант = ВариантСтандартногоПериода.СНачалаЭтогоКвартала Тогда + Результат.ВидПериода = "СНачалаКвартала"; + Результат.СдвигПериода = 0; + + ИначеЕсли Вариант = ВариантСтандартногоПериода.ПрошлыйКварталДоТакойЖеДаты Тогда + Результат.ВидПериода = "СНачалаКвартала"; + Результат.СдвигПериода = -1; + + ИначеЕсли Вариант = ВариантСтандартногоПериода.СледующийКварталДоТакойЖеДаты Тогда + Результат.ВидПериода = "СНачалаКвартала"; + Результат.СдвигПериода = 1; + + ИначеЕсли Вариант = ВариантСтандартногоПериода.ДоКонцаЭтогоКвартала Тогда + Результат.ВидПериода = "ДоКонцаКвартала"; + Результат.СдвигПериода = 0; + + ИначеЕсли Вариант = ВариантСтандартногоПериода.ЭтотМесяц Тогда + Результат.ВидПериода = "Месяц"; + Результат.СдвигПериода = 0; + + ИначеЕсли Вариант = ВариантСтандартногоПериода.ПрошлыйМесяц Тогда + Результат.ВидПериода = "Месяц"; + Результат.СдвигПериода = -1; + + ИначеЕсли Вариант = ВариантСтандартногоПериода.СледующийМесяц Тогда + Результат.ВидПериода = "Месяц"; + Результат.СдвигПериода = 1; + + ИначеЕсли Вариант = ВариантСтандартногоПериода.Месяц Тогда + Результат.ВидПериода = "ПоследнийМесяц"; + Результат.СдвигПериода = 0; + + ИначеЕсли Вариант = ВариантСтандартногоПериода.СНачалаЭтогоМесяца Тогда + Результат.ВидПериода = "СНачалаМесяца"; + Результат.СдвигПериода = 0; + + ИначеЕсли Вариант = ВариантСтандартногоПериода.ПрошлыйМесяцДоТакойЖеДаты Тогда + Результат.ВидПериода = "СНачалаМесяца"; + Результат.СдвигПериода = -1; + + ИначеЕсли Вариант = ВариантСтандартногоПериода.СледующийМесяцДоТакойЖеДаты Тогда + Результат.ВидПериода = "СНачалаМесяца"; + Результат.СдвигПериода = 1; + + ИначеЕсли Вариант = ВариантСтандартногоПериода.ДоКонцаЭтогоМесяца Тогда + Результат.ВидПериода = "ДоКонцаМесяца"; + Результат.СдвигПериода = 0; + + ИначеЕсли Вариант = ВариантСтандартногоПериода.ЭтаДекада Тогда + Результат.ВидПериода = "Декада"; + Результат.СдвигПериода = 0; + + ИначеЕсли Вариант = ВариантСтандартногоПериода.ПрошлаяДекада Тогда + Результат.ВидПериода = "Декада"; + Результат.СдвигПериода = -1; + + ИначеЕсли Вариант = ВариантСтандартногоПериода.СледующаяДекада Тогда + Результат.ВидПериода = "Декада"; + Результат.СдвигПериода = 1; + + ИначеЕсли Вариант = ВариантСтандартногоПериода.СНачалаЭтойДекады Тогда + Результат.ВидПериода = "СНачалаДекады"; + Результат.СдвигПериода = 0; + + ИначеЕсли Вариант = ВариантСтандартногоПериода.ПрошлаяДекадаДоТакогоЖеНомераДня Тогда + Результат.ВидПериода = "СНачалаДекады"; + Результат.СдвигПериода = -1; + + ИначеЕсли Вариант = ВариантСтандартногоПериода.СледующаяДекадаДоТакогоЖеНомераДня Тогда + Результат.ВидПериода = "СНачалаДекады"; + Результат.СдвигПериода = 1; + + ИначеЕсли Вариант = ВариантСтандартногоПериода.ДоКонцаЭтойДекады Тогда + Результат.ВидПериода = "ДоКонцаДекады"; + Результат.СдвигПериода = 0; + + ИначеЕсли Вариант = ВариантСтандартногоПериода.ЭтаНеделя Тогда + Результат.ВидПериода = "Неделя"; + Результат.СдвигПериода = 0; + + ИначеЕсли Вариант = ВариантСтандартногоПериода.ПрошлаяНеделя Тогда + Результат.ВидПериода = "Неделя"; + Результат.СдвигПериода = -1; + + ИначеЕсли Вариант = ВариантСтандартногоПериода.СледующаяНеделя Тогда + Результат.ВидПериода = "Неделя"; + Результат.СдвигПериода = 1; + + ИначеЕсли Вариант = ВариантСтандартногоПериода.Последние7Дней Тогда + Результат.ВидПериода = "Последние7Дней"; + Результат.СдвигПериода = 0; + + ИначеЕсли Вариант = ВариантСтандартногоПериода.Следующие7Дней Тогда + Результат.ВидПериода = "Следующие7Дней"; + Результат.СдвигПериода = 0; + + ИначеЕсли Вариант = ВариантСтандартногоПериода.СНачалаЭтойНедели Тогда + Результат.ВидПериода = "СНачалаНедели"; + Результат.СдвигПериода = 0; + + ИначеЕсли Вариант = ВариантСтандартногоПериода.ПрошлаяНеделяДоТакогоЖеДняНедели Тогда + Результат.ВидПериода = "СНачалаНедели"; + Результат.СдвигПериода = -1 + + ИначеЕсли Вариант = ВариантСтандартногоПериода.СледующаяНеделяДоТакогоЖеДняНедели Тогда + Результат.ВидПериода = "СНачалаНедели"; + Результат.СдвигПериода = 1 + + ИначеЕсли Вариант = ВариантСтандартногоПериода.ДоКонцаЭтойНедели Тогда + Результат.ВидПериода = "ДоКонцаНедели"; + Результат.СдвигПериода = 0; + + ИначеЕсли Вариант = ВариантСтандартногоПериода.Сегодня Тогда + Результат.ВидПериода = "День"; + Результат.СдвигПериода = 0; + + ИначеЕсли Вариант = ВариантСтандартногоПериода.Вчера Тогда + Результат.ВидПериода = "День"; + Результат.СдвигПериода = -1; + + ИначеЕсли Вариант = ВариантСтандартногоПериода.Завтра Тогда + Результат.ВидПериода = "День"; + Результат.СдвигПериода = 1; + КонецЕсли; + + Возврат Результат; КонецФункции -Функция НайтиРекурсивно(НаборСтрок, ДанныеСтроки, Найденные = Неопределено) - Если Найденные = Неопределено Тогда - Найденные = Новый Массив; +Функция АнализПроизвольногоПериода(Знач НачалоПериода, Знач КонецПериода) + Результат = Новый Структура("ВидПериода, СдвигПериода"); + + НачалоПериода = НачалоДня(НачалоПериода); + КонецПериода = НачалоДня(КонецПериода); + Сегодня = НачалоДня(ТекущаяДатаСеанса()); + ДнейВПериоде = (КонецПериода - НачалоПериода) / 86400 + 1; + КонецСдвигВДнях = (КонецПериода - Сегодня) / 86400; + + Если ДнейВПериоде = 1 Тогда + Результат.ВидПериода = "День"; + Результат.СдвигПериода = КонецСдвигВДнях; + Возврат Результат; КонецЕсли; - Для Каждого СтрокаТаблицы Из НаборСтрок Цикл - ЗначенияСовпадают = Истина; - Для Каждого КлючИЗначение Из ДанныеСтроки Цикл - Если СтрокаТаблицы[КлючИЗначение.Ключ] <> КлючИЗначение.Значение Тогда - ЗначенияСовпадают = Ложь; - Прервать; - КонецЕсли; - КонецЦикла; - Если ЗначенияСовпадают Тогда - Найденные.Добавить(СтрокаТаблицы); + + Если ДнейВПериоде <= 7 Тогда + НачалоДеньНедели = ДеньНедели(НачалоПериода); + КонецДеньНедели = ДеньНедели(КонецПериода); + ТекущийДеньНедели = ДеньНедели(Сегодня); + Если НачалоДеньНедели = 1 И КонецДеньНедели = 7 Тогда + Результат.ВидПериода = "Неделя"; + Результат.СдвигПериода = (НачалоНедели(КонецПериода) - НачалоНедели(Сегодня)) / 604800; + ИначеЕсли НачалоДеньНедели = 1 И КонецДеньНедели = ТекущийДеньНедели Тогда + Результат.ВидПериода = "СНачалаНедели"; + Результат.СдвигПериода = (НачалоНедели(КонецПериода) - НачалоНедели(Сегодня)) / 604800; + ИначеЕсли НачалоДеньНедели = ТекущийДеньНедели И КонецДеньНедели = 7 Тогда + Результат.ВидПериода = "ДоКонцаНедели"; + Результат.СдвигПериода = (НачалоНедели(КонецПериода) - НачалоНедели(Сегодня)) / 604800; + ИначеЕсли КонецДеньНедели = ТекущийДеньНедели И ДнейВПериоде = 7 Тогда + Результат.ВидПериода = "Последние7Дней"; + Результат.СдвигПериода = (НачалоНедели(КонецПериода) - НачалоНедели(Сегодня)) / 604800; + ИначеЕсли НачалоДеньНедели = ТекущийДеньНедели И ДнейВПериоде = 7 Тогда + Результат.ВидПериода = "Следующие7Дней"; + Результат.СдвигПериода = (НачалоНедели(НачалоПериода) - НачалоНедели(Сегодня)) / 604800; КонецЕсли; - НайтиРекурсивно(СтрокаТаблицы.ПолучитьЭлементы(), ДанныеСтроки, Найденные); - КонецЦикла; - Возврат Найденные; + Если Результат.ВидПериода <> Неопределено Тогда + Возврат Результат; + КонецЕсли; + КонецЕсли; + + НачалоНомерГода = Год(НачалоПериода); + КонецНомерГода = Год(КонецПериода); + ТекущийНомерГода = Год(Сегодня); + + НачалоНомерМесяца = Месяц(НачалоПериода); + КонецНомерМесяца = Месяц(КонецПериода); + ТекущийНомерМесяца = Месяц(Сегодня); + + КонецСдвигВГодах = КонецНомерГода - ТекущийНомерГода; + КонецСдвигВМесяцах = КонецСдвигВГодах*12 + КонецНомерМесяца - ТекущийНомерМесяца; + + НачалоДеньМесяца = День(НачалоПериода); + КонецДеньМесяца = День(КонецПериода); + ТекущийДеньМесяца = День(Сегодня); + + КонецЭтоПоследнийДеньМесяца = КонецДеньМесяца >= 27 И КонецДеньМесяца = День(КонецМесяца(КонецПериода)); + + Если ДнейВПериоде <= 31 Тогда + Если НачалоДеньМесяца = 1 И КонецЭтоПоследнийДеньМесяца Тогда + Результат.ВидПериода = "Месяц"; + Результат.СдвигПериода = КонецСдвигВМесяцах; + Возврат Результат; + ИначеЕсли НачалоДеньМесяца = 1 И КонецДеньМесяца = ТекущийДеньМесяца Тогда + Результат.ВидПериода = "СНачалаМесяца"; + Результат.СдвигПериода = КонецСдвигВМесяцах; + Возврат Результат; + ИначеЕсли НачалоДеньМесяца = ТекущийДеньМесяца И КонецЭтоПоследнийДеньМесяца Тогда + Результат.ВидПериода = "ДоКонцаМесяца"; + Результат.СдвигПериода = КонецСдвигВМесяцах; + Возврат Результат; + ИначеЕсли КонецДеньМесяца = ТекущийДеньМесяца И НачалоПериода = ДобавитьМесяц(КонецПериода + 86400, -1) Тогда + Результат.ВидПериода = "ПоследнийМесяц"; + Результат.СдвигПериода = КонецСдвигВМесяцах; + Возврат Результат; + КонецЕсли; + КонецЕсли; + + Если ДнейВПериоде <= 93 Тогда // Легкая оптимизация вычислений. + НачалоНомерМесяцаВКвартале = (НачалоНомерМесяца-1)%3 + 1; + КонецНомерМесяцаВКвартале = (КонецНомерМесяца-1)%3 + 1; + + НачалоЭтоНачалоКвартала = (НачалоНомерМесяцаВКвартале = 1 И НачалоДеньМесяца = 1); + КонецЭтоКонецКвартала = (КонецНомерМесяцаВКвартале = 3 И КонецЭтоПоследнийДеньМесяца); + + Если НачалоЭтоНачалоКвартала Или КонецЭтоКонецКвартала Тогда // Легкая оптимизация вычислений. + + ТекущийНомерМесяцаВКвартале = (ТекущийНомерМесяца-1)%3 + 1; + + Если НачалоЭтоНачалоКвартала И КонецЭтоКонецКвартала Тогда + Результат.ВидПериода = "Квартал"; + ИначеЕсли НачалоЭтоНачалоКвартала + И КонецНомерМесяцаВКвартале = ТекущийНомерМесяцаВКвартале + И КонецДеньМесяца = ТекущийДеньМесяца Тогда + Результат.ВидПериода = "СНачалаКвартала"; + ИначеЕсли КонецЭтоКонецКвартала + И НачалоНомерМесяцаВКвартале = ТекущийНомерМесяцаВКвартале + И НачалоДеньМесяца = ТекущийДеньМесяца Тогда + Результат.ВидПериода = "ДоКонцаКвартала"; + КонецЕсли; + + Если Результат.ВидПериода <> Неопределено Тогда // Легкая оптимизация вычислений. + КонецНомерКварталаВГоду = Цел((КонецНомерМесяца-1)/3)+1; + ТекущийНомерКварталаВГоду = Цел((ТекущийНомерМесяца-1)/3)+1; + Результат.СдвигПериода = КонецСдвигВГодах*4 + КонецНомерКварталаВГоду - ТекущийНомерКварталаВГоду; + Возврат Результат; + КонецЕсли; + + КонецЕсли; + КонецЕсли; + + Если ДнейВПериоде <= 186 Тогда // Легкая оптимизация вычислений. + НачалоНомерМесяцаВПолугодии = (НачалоНомерМесяца-1)%6 + 1; + КонецНомерМесяцаВПолугодии = (КонецНомерМесяца-1)%6 + 1; + + НачалоЭтоНачалоПолугодия = (НачалоНомерМесяцаВПолугодии = 1 И НачалоДеньМесяца = 1); + КонецЭтоКонецПолугодия = (КонецНомерМесяцаВПолугодии = 6 И КонецЭтоПоследнийДеньМесяца); + + Если НачалоЭтоНачалоПолугодия Или КонецЭтоКонецПолугодия Тогда // Легкая оптимизация вычислений. + + ТекущийНомерМесяцаВПолугодии = (ТекущийНомерМесяца-1)%6 + 1; + + Если НачалоЭтоНачалоПолугодия И КонецЭтоКонецПолугодия Тогда + Результат.ВидПериода = "Полугодие"; + ИначеЕсли НачалоЭтоНачалоПолугодия + И КонецНомерМесяцаВПолугодии = ТекущийНомерМесяцаВПолугодии + И КонецДеньМесяца = ТекущийДеньМесяца Тогда + Результат.ВидПериода = "СНачалаПолугодия"; + ИначеЕсли КонецЭтоКонецПолугодия + И НачалоНомерМесяцаВПолугодии = ТекущийНомерМесяцаВПолугодии + И НачалоДеньМесяца = ТекущийДеньМесяца Тогда + Результат.ВидПериода = "ДоКонцаПолугодия"; + КонецЕсли; + + Если Результат.ВидПериода <> Неопределено Тогда // Легкая оптимизация вычислений. + КонецНомерПолугодияВГоду = ?(КонецНомерМесяца <= 6, 1, 2); + ТекущийНомерПолугодияВГоду = ?(ТекущийНомерМесяца <= 6, 1, 2); + Результат.СдвигПериода = КонецСдвигВГодах*2 + КонецНомерПолугодияВГоду - ТекущийНомерПолугодияВГоду; + Возврат Результат; + КонецЕсли; + + КонецЕсли; + КонецЕсли; + + Если ДнейВПериоде <= 366 Тогда // Легкая оптимизация вычислений. + + НачалоЭтоНачалоГода = (НачалоНомерМесяца = 1 И НачалоДеньМесяца = 1); + КонецЭтоКонецГода = (КонецНомерМесяца = 12 И КонецЭтоПоследнийДеньМесяца); + + Если НачалоЭтоНачалоГода Или КонецЭтоКонецГода Тогда // Легкая оптимизация вычислений. + + Если НачалоЭтоНачалоГода И КонецЭтоКонецГода Тогда + Результат.ВидПериода = "Год"; + Результат.СдвигПериода = КонецСдвигВГодах; + Возврат Результат; + ИначеЕсли НачалоЭтоНачалоГода + И КонецНомерМесяца = ТекущийНомерМесяца + И КонецДеньМесяца = ТекущийДеньМесяца Тогда + Результат.ВидПериода = "СНачалаГода"; + Результат.СдвигПериода = КонецСдвигВГодах; + Возврат Результат; + ИначеЕсли КонецЭтоКонецГода + И НачалоНомерМесяца = ТекущийНомерМесяца + И НачалоДеньМесяца = ТекущийДеньМесяца Тогда + Результат.ВидПериода = "ДоКонцаГода"; + Результат.СдвигПериода = КонецСдвигВГодах; + Возврат Результат; + КонецЕсли; + КонецЕсли; + КонецЕсли; + + Если ДнейВПериоде <= 11 Тогда + НачалоЭтоНачалоДекады = (НачалоДеньМесяца = 1 Или НачалоДеньМесяца = 11 Или НачалоДеньМесяца = 21); + КонецЭтоКонецДекады = (КонецДеньМесяца = 10 Или КонецДеньМесяца = 20 Или КонецЭтоПоследнийДеньМесяца); + Если НачалоЭтоНачалоДекады И КонецЭтоКонецДекады Тогда + Результат.ВидПериода = "Декада"; + Иначе + НачалоДеньДекады = (НачалоДеньМесяца-1)%10 + 1; // % это остаток от деления. + КонецДеньДекады = (КонецДеньМесяца-1)%10 + 1; + ТекущийДеньДекады = (ТекущийДеньМесяца-1)%10 + 1; + Если НачалоЭтоНачалоДекады И КонецДеньДекады = ТекущийДеньДекады Тогда + Результат.ВидПериода = "СНачалаДекады"; + ИначеЕсли НачалоДеньДекады = ТекущийДеньДекады И КонецЭтоКонецДекады Тогда + Результат.ВидПериода = "ДоКонцаДекады"; + КонецЕсли; + КонецЕсли; + Если Результат.ВидПериода <> Неопределено Тогда + КонецНомерДекадыВМесяце = ?(КонецДеньМесяца <= 10, 1, ?(КонецДеньМесяца <= 20, 2, 3)); + ТекущийНомерДекадыВМесяце = ?(ТекущийДеньМесяца <= 10, 1, ?(ТекущийДеньМесяца <= 20, 2, 3)); + Результат.СдвигПериода = КонецСдвигВМесяцах*3 + КонецНомерДекадыВМесяце - ТекущийНомерДекадыВМесяце; + Возврат Результат; + КонецЕсли; + КонецЕсли; + + Возврат Результат; КонецФункции +Процедура УстановитьФиксированныеОтборы(СтруктураОтборов, КомпоновщикНастроек, НастройкиОтчета) Экспорт + ПараметрыКД = КомпоновщикНастроек.Настройки.ПараметрыДанных; + ОтборыКД = КомпоновщикНастроек.Настройки.Отбор; + Недоступный = РежимОтображенияЭлементаНастройкиКомпоновкиДанных.Недоступный; + Для Каждого КлючИЗначение Из СтруктураОтборов Цикл + Имя = КлючИЗначение.Ключ; + Значение = КлючИЗначение.Значение; + Если ТипЗнч(Значение) = Тип("ФиксированныйМассив") Тогда + Значение = Новый Массив(Значение); + КонецЕсли; + Если ТипЗнч(Значение) = Тип("Массив") Тогда + Список = Новый СписокЗначений; + Список.ЗагрузитьЗначения(Значение); + Значение = Список; + КонецЕсли; + ПараметрКД = ПараметрыКД.НайтиЗначениеПараметра(Новый ПараметрКомпоновкиДанных(Имя)); + Если ТипЗнч(ПараметрКД) = Тип("ЗначениеПараметраНастроекКомпоновкиДанных") Тогда + ПараметрКД.ИдентификаторПользовательскойНастройки = ""; + ПараметрКД.Использование = Истина; + ПараметрКД.РежимОтображения = Недоступный; + ПараметрКД.Значение = Значение; + Продолжить; + КонецЕсли; + ДоступноеПолеКД = ОтборыКД.ДоступныеПоляОтбора.НайтиПоле(Новый ПолеКомпоновкиДанных(Имя)); + Если ТипЗнч(ДоступноеПолеКД) = Тип("ДоступноеПолеОтбораКомпоновкиДанных") Тогда + Если ТипЗнч(Значение) = Тип("СписокЗначений") Тогда + ВидСравненияКД = ВидСравненияКомпоновкиДанных.ВСписке; + Иначе + ВидСравненияКД = ВидСравненияКомпоновкиДанных.Равно; + КонецЕсли; + ОбщегоНазначенияКлиентСервер.УстановитьЭлементОтбора(ОтборыКД, Имя, Значение, ВидСравненияКД, , Истина, Недоступный, ""); + Продолжить; + КонецЕсли; + ТекстОшибки = НСтр("ru = 'Не удалось установить фиксированный отбор ""%1"".'"); + ВариантыОтчетов.ОшибкаПоВарианту(НастройкиОтчета.ВариантСсылка, ТекстОшибки, Имя); + КонецЦикла; +КонецПроцедуры + #КонецОбласти diff --git a/SSL/src/CommonModules/ОценкаПроизводительностиВызовСервераПовтИсп/Module.bsl b/SSL/src/CommonModules/ОценкаПроизводительностиВызовСервераПовтИсп/Module.bsl index 278125979..2bd48efbc 100644 --- a/SSL/src/CommonModules/ОценкаПроизводительностиВызовСервераПовтИсп/Module.bsl +++ b/SSL/src/CommonModules/ОценкаПроизводительностиВызовСервераПовтИсп/Module.bsl @@ -22,7 +22,7 @@ // то создает новый элемент. // // Параметры: -// ИмяКлючевойОперации - Строка - название ключевой операции. +// ИмяКлючевойОперации - Строка - название ключевой операции // // Возвращаемое значение: // СправочникСсылка.КлючевыеОперации @@ -33,16 +33,21 @@ Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ ПЕРВЫЕ 1 - | КлючевыеОперации.Ссылка КАК Ссылка - |ИЗ - | Справочник.КлючевыеОперации КАК КлючевыеОперации - |ГДЕ - | КлючевыеОперации.Имя = &Имя - | - |УПОРЯДОЧИТЬ ПО - | Ссылка"; + | КлючевыеОперации.Ссылка КАК Ссылка + |ИЗ + | Справочник.КлючевыеОперации КАК КлючевыеОперации + |ГДЕ + | КлючевыеОперации.ИмяХеш = &ИмяХеш + | + |УПОРЯДОЧИТЬ ПО + | Ссылка"; - Запрос.УстановитьПараметр("Имя", ИмяКлючевойОперации); + ХешMD5 = Новый ХешированиеДанных(ХешФункция.MD5); + ХешMD5.Добавить(ИмяКлючевойОперации); + ИмяХеш = ХешMD5.ХешСумма; + ИмяХеш = СтрЗаменить(Строка(ИмяХеш), " ", ""); + + Запрос.УстановитьПараметр("ИмяХеш", ИмяХеш); РезультатЗапроса = Запрос.Выполнить(); Если РезультатЗапроса.Пустой() Тогда КлючеваяОперацияСсылка = ОценкаПроизводительностиВызовСервераПолныеПрава.СоздатьКлючевуюОперацию(ИмяКлючевойОперации); diff --git a/SSL/src/CommonModules/ОценкаПроизводительностиВызовСервераПолныеПрава/Module.bsl b/SSL/src/CommonModules/ОценкаПроизводительностиВызовСервераПолныеПрава/Module.bsl index b3a4c1046..bbbfd4b52 100644 --- a/SSL/src/CommonModules/ОценкаПроизводительностиВызовСервераПолныеПрава/Module.bsl +++ b/SSL/src/CommonModules/ОценкаПроизводительностиВызовСервераПолныеПрава/Module.bsl @@ -3,38 +3,72 @@ // ключевых операций и их дальнейшем экспортом. //////////////////////////////////////////////////////////////////////////////// -#Область ПрограммныйИнтерфейс +#Область СлужебныйПрограммныйИнтерфейс +// Функция определяет необходимость выполнения замеров. +// +// Возвращаемое значение: +// Булево - Истина выполнять, Ложь не выполнять. +// +Функция ВыполнятьЗамерыПроизводительности() Экспорт + + УстановитьПривилегированныйРежим(Истина); + Возврат Константы.ВыполнятьЗамерыПроизводительности.Получить(); + +КонецФункции + +// Процедура включает/выключает замеры производительности +// +Процедура ВключитьЗамерыПроизводительности(Параметр) Экспорт + + УстановитьПривилегированныйРежим(Истина); + Константы.ВыполнятьЗамерыПроизводительности.Установить(Параметр); + +КонецПроцедуры + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции // Процедура записи массива замеров. // // Параметры: // Замеры - Массив элементов типа Структура. // // Возвращаемое значение: -// Число - текущее значение периода записи замеров на сервере в секундах. +// Число - текущее значение периода записи замеров на сервере в секундах в случае записи замеров. +// Неопределено - в случае невозможности записи замеров в монопольном режиме. +// Функция ЗафиксироватьДлительностьКлючевыхОпераций(Замеры) Экспорт + Если МонопольныйРежим() Тогда + Возврат Неопределено; + КонецЕсли; + Для Каждого КлючеваяОперацияЗамер Из Замеры Цикл - КлючеваяОперацияСсылка = КлючеваяОперацияЗамер.Ключ; - Буфер = КлючеваяОперацияЗамер.Значение; - Для Каждого ДатаДанные Из Буфер Цикл - Данные = ДатаДанные.Значение; - Длительность = Данные.Получить("Длительность"); - Если Длительность = Неопределено Тогда - // Неоконченный замер, писать его пока рано. - Продолжить; - КонецЕсли; - ЗафиксироватьДлительностьКлючевойОперации( + КлючеваяОперацияСсылка = КлючеваяОперацияЗамер.Ключ; + Буфер = КлючеваяОперацияЗамер.Значение; + Для Каждого ДатаДанные Из Буфер Цикл + Данные = ДатаДанные.Значение; + Длительность = Данные.Получить("Длительность"); + Если Длительность = Неопределено Тогда + // Неоконченный замер, писать его пока рано + Продолжить; + КонецЕсли; + ЗафиксироватьДлительностьКлючевойОперации( КлючеваяОперацияСсылка, Длительность, - ДатаДанные.Ключ, - Данные["ДатаОкончания"]); + Данные["ДатаНачала"], + Данные["ДатаОкончания"], + Данные["Комментарий"], + Данные["Технологический"]); + КонецЦикла; КонецЦикла; - КонецЦикла; + Возврат ПериодЗаписи(); + КонецФункции -// Текущее значение периода записи результатов замеров на сервере. +// Текущее значение периода записи результатов замеров на сервере // // Возвращаемое значение: // Число - значение в секундах. @@ -43,14 +77,14 @@ Возврат ?(ТекущийПериод >= 1, ТекущийПериод, 60); КонецФункции -// Процедура обработки регламентного задания по выгрузке данных. +// Процедура обработки регламентного задания по выгрузке данных // // Параметры: // КаталогиЭкспорта - Структура со значением типа Массив. // Процедура ЭкспортОценкиПроизводительности(КаталогиЭкспорта) Экспорт - ОбщегоНазначения.ПриНачалеВыполненияРегламентногоЗадания(); + ОбщегоНазначения.ПриНачалеВыполненияРегламентногоЗадания(Метаданные.РегламентныеЗадания.ЭкспортОценкиПроизводительности); // Если система отключена, то выгрузку данных делать не будем. Если Не ОценкаПроизводительностиВызовСервераПовтИсп.ВыполнятьЗамерыПроизводительности() Тогда @@ -69,34 +103,29 @@ Иначе Возврат; КонецЕсли; - - Запрос = Новый Запрос; - Запрос.УстановитьПараметр("ДатаЗамера", ВерхняяГраньДатыЗамеров); - СформироватьЗапросРасчетаAPDEX(Запрос); - ВыборкаАпдекс = Запрос.Выполнить().Выбрать(); - + МассивыЗамеров = ЗамерыСРазделениемПоКлючевымОперациям(ВерхняяГраньДатыЗамеров); - ВыгрузитьРезультаты(КаталогиЭкспорта, ВыборкаАпдекс, МассивыЗамеров); + ВыгрузитьРезультаты(КаталогиЭкспорта, МассивыЗамеров); КонецПроцедуры // Текущая дата на сервере // // Возвращаемое значение: -// Дата - Дата и время на сервере. +// Дата - Дата и время на сервере в формате UTC. Функция ДатаИВремяНаСервере() Экспорт - Возврат ТекущаяДата(); + Возврат Дата(1,1,1) + ТекущаяУниверсальнаяДатаВМиллисекундах()/1000; КонецФункции // Функция создает новый элемент справочника "Ключевые операции". // // Параметры: -// ИмяКлючевойОперации - Строка - название ключевой операции. +// ИмяКлючевойОперации - Строка - название ключевой операции // // Возвращаемое значение: // СправочникСсылка.КлючевыеОперации // -Функция СоздатьКлючевуюОперацию(ИмяКлючевойОперации) Экспорт +Функция СоздатьКлючевуюОперацию(ИмяКлючевойОперации, ЦелевоеВремя = 1) Экспорт НачатьТранзакцию(); @@ -113,12 +142,17 @@ |ИЗ | Справочник.КлючевыеОперации КАК КлючевыеОперации |ГДЕ - | КлючевыеОперации.Имя = &Имя + | КлючевыеОперации.ИмяХеш = &ИмяХеш | |УПОРЯДОЧИТЬ ПО | Ссылка"; - Запрос.УстановитьПараметр("Имя", ИмяКлючевойОперации); + ХешMD5 = Новый ХешированиеДанных(ХешФункция.MD5); + ХешMD5.Добавить(ИмяКлючевойОперации); + ИмяХеш = ХешMD5.ХешСумма; + ИмяХеш = СтрЗаменить(Строка(ИмяХеш), " ", ""); + + Запрос.УстановитьПараметр("ИмяХеш", ИмяХеш); РезультатЗапроса = Запрос.Выполнить(); Если РезультатЗапроса.Пустой() Тогда Наименование = РазложитьСтрокуПоСловам(ИмяКлючевойОперации); @@ -126,6 +160,7 @@ НовыйЭлемент = Справочники.КлючевыеОперации.СоздатьЭлемент(); НовыйЭлемент.Имя = ИмяКлючевойОперации; НовыйЭлемент.Наименование = Наименование; + НовыйЭлемент.ЦелевоеВремя = ЦелевоеВремя; НовыйЭлемент.Записать(); КлючеваяОперацияСсылка = НовыйЭлемент.Ссылка; Иначе @@ -137,306 +172,179 @@ ЗафиксироватьТранзакцию(); Исключение ОтменитьТранзакцию(); - ВызватьИсключение + ВызватьИсключение; КонецПопытки; Возврат КлючеваяОперацияСсылка; КонецФункции -#КонецОбласти - -#Область СлужебныеПроцедурыИФункции - -/////////////////////////////////////////////////////////////////////////////// -// Запись результатов замеров времени выполнения ключевых операций. - -// Процедура записи единичного замера. +// Процедура записи единичного замера // // Параметры: // КлючеваяОперация - СправочникСсылка.КлючевыеОперации - ключевая операция -// либо Строка - название ключевой операции. +// либо Строка - название ключевой операции // Длительность - Число // ДатаНачалаКлючевойОперации - Дата Процедура ЗафиксироватьДлительностьКлючевойОперации( КлючеваяОперация, Длительность, ДатаНачалаКлючевойОперации, - ДатаОкончанияКлючевойОперации = Неопределено -) Экспорт + ДатаОкончанияКлючевойОперации = Неопределено, + Комментарий = Неопределено, + Технологический = Ложь) Экспорт + Если БезопасныйРежим() <> Ложь Тогда + ЗаписьЖурналаРегистрации(НСтр("ru = 'Работа подсистемы оценка производительности в безопасном режиме не поддерживается'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), + УровеньЖурналаРегистрации.Информация,,,Строка(КлючеваяОперация)); + + Возврат; + КонецЕсли; + Если ТипЗнч(КлючеваяОперация) = Тип("Строка") Тогда КлючеваяОперацияСсылка = ОценкаПроизводительностиВызовСервераПовтИсп.ПолучитьКлючевуюОперациюПоИмени(КлючеваяОперация); Иначе КлючеваяОперацияСсылка = КлючеваяОперация; КонецЕсли; - Запись = РегистрыСведений.ЗамерыВремени.СоздатьМенеджерЗаписи(); + Если Комментарий = Неопределено Тогда + Комментарий = ПараметрыСеанса.КомментарийЗамераВремени; + КонецЕсли; + + Если НЕ Технологический Тогда + Запись = РегистрыСведений.ЗамерыВремени.СоздатьМенеджерЗаписи(); + Иначе + Запись = РегистрыСведений.ЗамерыВремениТехнологические.СоздатьМенеджерЗаписи(); + КонецЕсли; + Запись.КлючеваяОперация = КлючеваяОперацияСсылка; - Запись.ДатаНачалаЗамера = УниверсальноеВремя(ДатаНачалаКлючевойОперации); + + // Получаем дату в UTC + Запись.ДатаНачалаЗамера = Дата(1,1,1) + ДатаНачалаКлючевойОперации; Запись.НомерСеанса = НомерСеансаИнформационнойБазы(); - Запись.ВремяВыполнения = ?(Длительность = 0, 0.001, Длительность); // Длительность меньше разрешения таймера. + Запись.ВремяВыполнения = ?(Длительность = 0, 0.001, Длительность); // Длительность меньше разрешения таймера - Запись.ДатаЗаписи = УниверсальноеВремя(ТекущаяДата()); + Запись.ДатаЗаписи = Дата(1,1,1) + ТекущаяУниверсальнаяДатаВМиллисекундах()/1000; Если ДатаОкончанияКлючевойОперации <> Неопределено Тогда - Запись.ДатаОкончания = УниверсальноеВремя(ДатаОкончанияКлючевойОперации); + // Получаем дату в UTC + Запись.ДатаОкончания = Дата(1,1,1) + ДатаОкончанияКлючевойОперации; КонецЕсли; Запись.Пользователь = ПользователиИнформационнойБазы.ТекущийПользователь(); Запись.ДатаЗаписиЛокальная = ТекущаяДатаСеанса(); + Запись.Комментарий = Комментарий; Запись.Записать(); КонецПроцедуры -/////////////////////////////////////////////////////////////////////////////// -// Регламентное задание экспорта. +// Функция преобразования ДатыЗамеры +// +// Параметры: +// ДатаЗамера - Дата +// либо Число - результат ТекущаяУниверсальнаяДатаВМиллисекундах() +Функция ДатаПоТипуЗамера(ДатаЗамера) + Если ТипЗнч(ДатаЗамера) = Тип("Число") Тогда + ДатаЗамера = Дата("00010101") + ДатаЗамера / 1000; + КонецЕсли; + + Возврат ДатаЗамера; +КонецФункции +// Регламентное задание экспорта Функция ЗамерыСРазделениемПоКлючевымОперациям(ВерхняяГраньДатыЗамеров) Запрос = Новый Запрос; + УровниПроизводительностиЧисло = Новый Соответствие; + УровниПроизводительностиЧисло.Вставить(Перечисления.УровниПроизводительности.Идеально, 1); + УровниПроизводительностиЧисло.Вставить(Перечисления.УровниПроизводительности.Отлично, 0.94); + УровниПроизводительностиЧисло.Вставить(Перечисления.УровниПроизводительности.Хорошо, 0.85); + УровниПроизводительностиЧисло.Вставить(Перечисления.УровниПроизводительности.Удовлетворительно, 0.70); + УровниПроизводительностиЧисло.Вставить(Перечисления.УровниПроизводительности.Плохо, 0.50); + ДатаПоследнейВыгрузки = Константы.ДатаПоследнейВыгрузкиЗамеровПроизводительностиUTC.Получить(); Константы.ДатаПоследнейВыгрузкиЗамеровПроизводительностиUTC.Установить(ВерхняяГраньДатыЗамеров); + УсловиеВсе = Константы.ОценкаПроизводительностиЭкспортВсехКлючевыхОпераций.Получить(); Запрос.УстановитьПараметр("ДатаПоследнейВыгрузки", ДатаПоследнейВыгрузки); Запрос.УстановитьПараметр("ВерхняяГраньДатыЗамеров", ВерхняяГраньДатыЗамеров); - Запрос.Текст = "ВЫБРАТЬ - | Замеры.КлючеваяОперация, - | Замеры.ДатаНачалаЗамера, - | Замеры.ВремяВыполнения, - | Замеры.Пользователь, - | Замеры.ДатаЗаписи, - | Замеры.НомерСеанса - | ИЗ - | РегистрСведений.ЗамерыВремени КАК Замеры - | ГДЕ - | Замеры.ДатаЗаписи >= &ДатаПоследнейВыгрузки И - | Замеры.ДатаЗаписи <= &ВерхняяГраньДатыЗамеров - | УПОРЯДОЧИТЬ ПО - | Замеры.ДатаНачалаЗамера"; - ВыборкаРезультатов = Запрос.Выполнить().Выгрузить(); // Выбрать(); - Колонки = ВыборкаРезультатов.Колонки; + ТекстЗапроса = " + |ВЫБРАТЬ + | Замеры.КлючеваяОперация КАК КлючеваяОперация, + | Замеры.ДатаНачалаЗамера КАК ДатаНачалаЗамера, + | Замеры.ВремяВыполнения КАК ВремяВыполнения, + | Замеры.Пользователь КАК Пользователь, + | Замеры.ДатаЗаписи КАК ДатаЗаписи, + | Замеры.НомерСеанса КАК НомерСеанса, + | Замеры.Комментарий КАК Комментарий, + | КлючевыеОперации.Наименование КАК КлючеваяОперацияСтрока, + | КлючевыеОперации.Приоритет КАК КлючеваяОперацияПриоритет, + | КлючевыеОперации.ЦелевоеВремя КАК КлючеваяОперацияЦелевоеВремя, + | КлючевыеОперации.МинимальноДопустимыйУровень КАК МинимальноДопустимыйУровень + |ИЗ + | РегистрСведений.ЗамерыВремени КАК Замеры + |ВНУТРЕННЕЕ СОЕДИНЕНИЕ + | Справочник.КлючевыеОперации КАК КлючевыеОперации + |ПО + | КлючевыеОперации.Ссылка = Замеры.КлючеваяОперация + | %УсловиеВсе + |ГДЕ + | Замеры.ДатаЗаписи > &ДатаПоследнейВыгрузки + | И Замеры.ДатаЗаписи <= &ВерхняяГраньДатыЗамеров + |УПОРЯДОЧИТЬ ПО + | Замеры.КлючеваяОперация + |"; + + Если УсловиеВсе Тогда + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "%УсловиеВсе", ""); + Иначе + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "%УсловиеВсе", "И (КлючевыеОперации.Приоритет <> 0 И КлючевыеОперации.ЦелевоеВремя <> 0)"); + КонецЕсли; + + + Запрос.Текст = ТекстЗапроса; + Результат = Запрос.Выполнить(); + ЗамерыСРазделением = Новый Соответствие; - КлючеваяОперацияИмяКолонки = "КлючеваяОперация"; - Для Каждого СтрокаРезультатов Из ВыборкаРезультатов Цикл - - КлючеваяОперацияСтрока = Строка(СтрокаРезультатов[КлючеваяОперацияИмяКолонки]); - МассивЗамеровПоКлючевойОперации = ЗамерыСРазделением.Получить(КлючеваяОперацияСтрока); - Если МассивЗамеровПоКлючевойОперации = Неопределено Тогда - МассивЗамеровПоКлючевойОперации = Новый Массив; - ЗамерыСРазделением.Вставить(КлючеваяОперацияСтрока, МассивЗамеровПоКлючевойОперации); + Выборка = Результат.Выбрать(); + Пока Выборка.Следующий() Цикл + КлючеваяОперация = ЗамерыСРазделением.Получить(Выборка.КлючеваяОперация); + Если КлючеваяОперация = Неопределено Тогда + КлючеваяОперация = Новый Соответствие; + КлючеваяОперация.Вставить("uid", Строка(Выборка.КлючеваяОперация.УникальныйИдентификатор())); + КлючеваяОперация.Вставить("name", Выборка.КлючеваяОперацияСтрока); + КлючеваяОперация.Вставить("priority", Выборка.КлючеваяОперацияПриоритет); + КлючеваяОперация.Вставить("targetValue", Выборка.КлючеваяОперация.ЦелевоеВремя); + КлючеваяОперация.Вставить("minimalApdexValue", УровниПроизводительностиЧисло[Выборка.КлючеваяОперация.МинимальноДопустимыйУровень]); + КлючеваяОперация.Вставить("Замеры", Новый Массив); + + ЗамерыСРазделением.Вставить(Выборка.КлючеваяОперация, КлючеваяОперация); КонецЕсли; - Замер = Новый Структура; - Для Каждого Колонка Из Колонки Цикл - Замер.Вставить(Колонка.Имя, СтрокаРезультатов[Колонка.Имя]); - КонецЦикла; - МассивЗамеровПоКлючевойОперации.Добавить(Замер); + КлючеваяОперацияЗамеры = КлючеваяОперация.Получить("Замеры"); + + ЗамерСтруктура = Новый Структура; + ЗамерСтруктура.Вставить("value", Выборка.ВремяВыполнения); + ЗамерСтруктура.Вставить("tUTC", ДатаПоТипуЗамера(Выборка.ДатаНачалаЗамера)); + ЗамерСтруктура.Вставить("userName", Выборка.Пользователь); + ЗамерСтруктура.Вставить("tSaveUTC", Выборка.ДатаЗаписи); + ЗамерСтруктура.Вставить("sessionNumber", Выборка.НомерСеанса); + ЗамерСтруктура.Вставить("comment", Выборка.Комментарий); + + КлючеваяОперацияЗамеры.Добавить(ЗамерСтруктура); КонецЦикла; + Возврат ЗамерыСРазделением; КонецФункции -// Формирует запрос для расчета индекса APDEX и устанавливает значения необходимых параметров. -// -// Параметры: -// Запрос - Запрос, процедура заполняет текст и параметры переданного запроса. -// -Процедура СформироватьЗапросРасчетаAPDEX(Запрос) - - ОбщаяПроизводительностьСистемы = ОценкаПроизводительностиСлужебный.ПолучитьЭлементОбщаяПроизводительностьСистемы(); - - ПолучениеЗамеров = - "ВЫБРАТЬ - | &КлючеваяОперация%НомерКлючевойОперации% КАК КлючеваяОперация, - | Замеры.ВремяВыполнения КАК ВремяВыполнения - |%ИмяВременнойТаблицы% - |ИЗ - | (ВЫБРАТЬ ПЕРВЫЕ 100 - | Замеры.КлючеваяОперация КАК КлючеваяОперация, - | Замеры.ВремяВыполнения КАК ВремяВыполнения - | ИЗ - | РегистрСведений.ЗамерыВремени КАК Замеры - | ГДЕ - | Замеры.ДатаНачалаЗамера < &ДатаЗамера - | И Замеры.КлючеваяОперация = &КлючеваяОперация%НомерКлючевойОперации% - | И Замеры.ВремяВыполнения > 0 - | И Замеры.ВремяВыполнения < &КлючеваяОперация%НомерКлючевойОперации%_МаксВремя - | - | УПОРЯДОЧИТЬ ПО - | Замеры.ДатаНачалаЗамера УБЫВ) КАК Замеры"; - - ОбъединитьВсе = - " - | - |ОБЪЕДИНИТЬ ВСЕ - | - |"; - - ИндексироватьПо = - " - | - |ИНДЕКСИРОВАТЬ ПО - | КлючеваяОперация"; - - РазделительВременныхТаблиц = - " - |; - | - |//////////////////////////////////////////////////////////////////////////////// - |"; - - ПустаяВыборка = - "ВЫБРАТЬ - | ЗНАЧЕНИЕ(Справочник.КлючевыеОперации.ПустаяСсылка), - | 0"; - - ТекстЗапроса = - "ВЫБРАТЬ - | КлючевыеОперации.Ссылка КАК КлючеваяОперация, - | КлючевыеОперации.ЦелевоеВремя КАК ЦелевоеВремя, - | КлючевыеОперации.МинимальноДопустимыйУровень КАК ДопустимыйУровень - |ПОМЕСТИТЬ ВТ_КлючевыеОперации - |ИЗ - | Справочник.КлючевыеОперации КАК КлючевыеОперации - |ГДЕ - | КлючевыеОперации.ПометкаУдаления = ЛОЖЬ - | И КлючевыеОперации.Ссылка <> &ОбщаяПроизводительностьСистемы"; - - ТекстЗапроса = ТекстЗапроса + ИндексироватьПо + РазделительВременныхТаблиц; - - ЗапросНаКлючевыеОперации = Новый Запрос; - ЗапросНаКлючевыеОперации.Текст = "ВЫБРАТЬ - | КлючевыеОперации.Ссылка, - | КлючевыеОперации.ЦелевоеВремя - |ИЗ - | Справочник.КлючевыеОперации КАК КлючевыеОперации - |ГДЕ - | КлючевыеОперации.ПометкаУдаления = ЛОЖЬ - | И КлючевыеОперации.Ссылка <> &ОбщаяПроизводительностьСистемы"; - - ЗапросНаКлючевыеОперации.УстановитьПараметр("ОбщаяПроизводительностьСистемы", ОбщаяПроизводительностьСистемы); - Выборка = ЗапросНаКлючевыеОперации.Выполнить().Выбрать(); - - НетКлючевыхОпераций = Истина; - НомерКлючевойОперации = 1; - Пока Выборка.Следующий() Цикл - - Запрос.УстановитьПараметр("КлючеваяОперация" + НомерКлючевойОперации, Выборка.Ссылка); - Запрос.УстановитьПараметр("КлючеваяОперация" + НомерКлючевойОперации + "_МаксВремя", 1000 * Выборка.ЦелевоеВремя); - Врем = СтрЗаменить(ПолучениеЗамеров, "%НомерКлючевойОперации%", Строка(НомерКлючевойОперации)); - Врем = СтрЗаменить(Врем, "%ИмяВременнойТаблицы%", ?(НомерКлючевойОперации = 1, "ПОМЕСТИТЬ ВТ_Замеры", "")); - ТекстЗапроса = ТекстЗапроса + Врем + ОбъединитьВсе; - - НомерКлючевойОперации = НомерКлючевойОперации + 1; - НетКлючевыхОпераций = Ложь; - КонецЦикла; - - // Если нет ключевых операций, то возвращаем пустую выборку. - Если НетКлючевыхОпераций Тогда - Запрос.Текст = "ВЫБРАТЬ 1 ГДЕ 1 < 0;"; - Возврат; - КонецЕсли; - - ТекстЗапроса = ТекстЗапроса + ПустаяВыборка + ИндексироватьПо + РазделительВременныхТаблиц; - - ТекстЗапроса = ТекстЗапроса + - "ВЫБРАТЬ - | ВТ_КлючевыеОперации.КлючеваяОперация КАК КлючеваяОперация, - | ВЫБОР - | КОГДА - | // Время выполнения по этой ключевой операции равно нулю (нет операций с временем выполнения больше нуля) - | НЕ 1 В ( - | ВЫБРАТЬ ПЕРВЫЕ 1 - | 1 - | ИЗ - | ВТ_Замеры КАК ЗамерыВнутр - | ГДЕ - | ЗамерыВнутр.КлючеваяОперация = ВТ_КлючевыеОперации.КлючеваяОперация - | И ЗамерыВнутр.ВремяВыполнения > 0 - | ) - | ТОГДА -1 - | ИНАЧЕ ВЫРАЗИТЬ((СУММА(ВЫБОР - | КОГДА ВТ_Замеры.ВремяВыполнения <= ВТ_КлючевыеОперации.ЦелевоеВремя - | ТОГДА 1 - | ИНАЧЕ 0 - | КОНЕЦ) + СУММА(ВЫБОР - | КОГДА ВТ_Замеры.ВремяВыполнения > ВТ_КлючевыеОперации.ЦелевоеВремя - | И ВТ_Замеры.ВремяВыполнения <= ВТ_КлючевыеОперации.ЦелевоеВремя * 4 - | ТОГДА 1 - | ИНАЧЕ 0 - | КОНЕЦ) / 2) / СУММА(1) КАК ЧИСЛО(6, 3)) - | КОНЕЦ КАК ТекущийAPDEX, - | ВЫБОР - | КОГДА ВТ_КлючевыеОперации.ДопустимыйУровень = ЗНАЧЕНИЕ(Перечисление.УровниПроизводительности.Идеально) - | ТОГДА 1 - | КОГДА ВТ_КлючевыеОперации.ДопустимыйУровень = ЗНАЧЕНИЕ(Перечисление.УровниПроизводительности.Отлично) - | ТОГДА 0.94 - | КОГДА ВТ_КлючевыеОперации.ДопустимыйУровень = ЗНАЧЕНИЕ(Перечисление.УровниПроизводительности.Хорошо) - | ТОГДА 0.85 - | КОГДА ВТ_КлючевыеОперации.ДопустимыйУровень = ЗНАЧЕНИЕ(Перечисление.УровниПроизводительности.Удовлетворительно) - | ТОГДА 0.7 - | КОГДА ВТ_КлючевыеОперации.ДопустимыйУровень = ЗНАЧЕНИЕ(Перечисление.УровниПроизводительности.Плохо) - | ТОГДА 0.5 - | КОНЕЦ КАК МинимальныйAPDEX - |ИЗ - | ВТ_КлючевыеОперации КАК ВТ_КлючевыеОперации - | ЛЕВОЕ СОЕДИНЕНИЕ ВТ_Замеры КАК ВТ_Замеры - | ПО ВТ_КлючевыеОперации.КлючеваяОперация = ВТ_Замеры.КлючеваяОперация - | - |СГРУППИРОВАТЬ ПО - | ВТ_КлючевыеОперации.КлючеваяОперация, - | ВЫБОР - | КОГДА ВТ_КлючевыеОперации.ДопустимыйУровень = ЗНАЧЕНИЕ(Перечисление.УровниПроизводительности.Идеально) - | ТОГДА 1 - | КОГДА ВТ_КлючевыеОперации.ДопустимыйУровень = ЗНАЧЕНИЕ(Перечисление.УровниПроизводительности.Отлично) - | ТОГДА 0.94 - | КОГДА ВТ_КлючевыеОперации.ДопустимыйУровень = ЗНАЧЕНИЕ(Перечисление.УровниПроизводительности.Хорошо) - | ТОГДА 0.85 - | КОГДА ВТ_КлючевыеОперации.ДопустимыйУровень = ЗНАЧЕНИЕ(Перечисление.УровниПроизводительности.Удовлетворительно) - | ТОГДА 0.7 - | КОГДА ВТ_КлючевыеОперации.ДопустимыйУровень = ЗНАЧЕНИЕ(Перечисление.УровниПроизводительности.Плохо) - | ТОГДА 0.5 - | КОНЕЦ - | - |ИМЕЮЩИЕ - | ВЫБОР - | КОГДА - | // Время выполнения по этой ключевой операции равно нулю (нет операций с временем выполнения больше нуля) - | НЕ 1 В ( - | ВЫБРАТЬ ПЕРВЫЕ 1 - | 1 - | ИЗ - | ВТ_Замеры КАК ЗамерыВнутр - | ГДЕ - | ЗамерыВнутр.КлючеваяОперация = ВТ_КлючевыеОперации.КлючеваяОперация - | И ЗамерыВнутр.ВремяВыполнения > 0 - | ) - | ТОГДА -1 - | ИНАЧЕ ВЫРАЗИТЬ((СУММА(ВЫБОР - | КОГДА ВТ_Замеры.ВремяВыполнения <= ВТ_КлючевыеОперации.ЦелевоеВремя - | ТОГДА 1 - | ИНАЧЕ 0 - | КОНЕЦ) + СУММА(ВЫБОР - | КОГДА ВТ_Замеры.ВремяВыполнения > ВТ_КлючевыеОперации.ЦелевоеВремя - | И ВТ_Замеры.ВремяВыполнения <= ВТ_КлючевыеОперации.ЦелевоеВремя * 4 - | ТОГДА 1 - | ИНАЧЕ 0 - | КОНЕЦ) / 2) / СУММА(1) КАК ЧИСЛО(6, 3)) - | КОНЕЦ >= 0"; - - Запрос.УстановитьПараметр("ОбщаяПроизводительностьСистемы", ОбщаяПроизводительностьСистемы); - Запрос.Текст = ТекстЗапроса; - -КонецПроцедуры - -// Сохраняет результаты вычисления APDEX в файл. +// Сохраняет результаты вычисления APDEX в файл // // Параметры: // КаталогиЭкспорта - Структура со значением типа Массив. -// ВыборкаАпдекс - Результат запроса. +// ВыборкаАпдекс - Результат запроса // МассивыЗамеров - Структура со значением типа Массив. -Процедура ВыгрузитьРезультаты(КаталогиЭкспорта, ВыборкаАпдекс, МассивыЗамеров) +Процедура ВыгрузитьРезультаты(КаталогиЭкспорта, МассивыЗамеров) ДатаФормированияФайла = УниверсальноеВремя(ТекущаяДатаСеанса()); ПространствоИмен = "www.v8.1c.ru/ssl/performace-assessment/apdexExport"; @@ -450,43 +358,43 @@ ЗаписьXML.ЗаписатьСоответствиеПространстваИмен("xs", "http://www.w3.org/2001/XMLSchema"); ЗаписьXML.ЗаписатьСоответствиеПространстваИмен("xsi", "http://www.w3.org/2001/XMLSchema-instance"); - ЗаписьXML.ЗаписатьАтрибут("version", ПространствоИмен, "1.0.0.0"); + ЗаписьXML.ЗаписатьАтрибут("version", ПространствоИмен, "1.0.0.1"); ЗаписьXML.ЗаписатьАтрибут("period", ПространствоИмен, Строка(ДатаФормированияФайла)); ТипКлючеваяОперация = ФабрикаXDTO.Тип(ПространствоИмен, "KeyOperation"); ТипИзмерение = ФабрикаXDTO.Тип(ПространствоИмен, "Measurement"); - - Пока ВыборкаАпдекс.Следующий() Цикл + + Для Каждого ТекЗамер Из МассивыЗамеров Цикл + КлючеваяОперацияЗамеры = ТекЗамер.Значение; + КлючеваяОперация = ФабрикаXDTO.Создать(ТипКлючеваяОперация); - КлючеваяОперацияСтрока = Строка(ВыборкаАпдекс.КлючеваяОперация); + КлючеваяОперация.name = КлючеваяОперацияЗамеры["name"]; + КлючеваяОперация.currentApdexValue = 0; - КлючеваяОперация.name = КлючеваяОперацияСтрока; - КлючеваяОперация.currentApdexValue = ВыборкаАпдекс.ТекущийAPDEX; - КлючеваяОперация.minimalApdexValue = ?(ВыборкаАпдекс.МинимальныйAPDEX = NULL, 0, ВыборкаАпдекс.МинимальныйAPDEX); - - КлючеваяОперация.priority = ВыборкаАпдекс.КлючеваяОперация.Приоритет; - КлючеваяОперация.targetValue = ВыборкаАпдекс.КлючеваяОперация.ЦелевоеВремя; - КлючеваяОперация.uid = Строка(ВыборкаАпдекс.КлючеваяОперация.Ссылка.УникальныйИдентификатор()); - - Замеры = МассивыЗамеров.Получить(КлючеваяОперацияСтрока); - Если Замеры <> Неопределено Тогда - Для Каждого Замер Из Замеры Цикл - ЗамерXML = ФабрикаXDTO.Создать(ТипИзмерение); - ЗамерXML.value = Замер.ВремяВыполнения; - Если ТипЗнч(Замер.ДатаНачалаЗамера) = Тип("Число") Тогда - ДатаЗамера = Дата("00010101") + Замер.ДатаНачалаЗамера / 1000; - Иначе - ДатаЗамера = Замер.ДатаНачалаЗамера; - КонецЕсли; - ЗамерXML.tUTC = ДатаЗамера; - ЗамерXML.userName = Замер.Пользователь; - ЗамерXML.tSaveUTC = Замер.ДатаЗаписи; - ЗамерXML.sessionNumber = Замер.НомерСеанса; - КлючеваяОперация.measurement.Добавить(ЗамерXML); - КонецЦикла; + minimalApdexValue = КлючеваяОперацияЗамеры["minimalApdexValue"]; + Если minimalApdexValue = Неопределено Тогда + minimalApdexValue = 0; КонецЕсли; - ФабрикаXDTO.ЗаписатьXML(ЗаписьXML, КлючеваяОперация); + КлючеваяОперация.minimalApdexValue = minimalApdexValue; + КлючеваяОперация.priority = КлючеваяОперацияЗамеры["priority"]; + КлючеваяОперация.targetValue = КлючеваяОперацияЗамеры["targetValue"]; + КлючеваяОперация.uid = КлючеваяОперацияЗамеры["uid"]; + + Замеры = КлючеваяОперацияЗамеры["Замеры"]; + Для Каждого Замер Из Замеры Цикл + ЗамерXML = ФабрикаXDTO.Создать(ТипИзмерение); + ЗамерXML.value = Замер.value; + ЗамерXML.tUTC = Замер.tUTC; + ЗамерXML.userName = Замер.userName; + ЗамерXML.tSaveUTC = Замер.tSaveUTC; + ЗамерXML.sessionNumber = Замер.sessionNumber; + ЗамерXML.comment = Замер.comment; + + КлючеваяОперация.measurement.Добавить(ЗамерXML); + КонецЦикла; + + ФабрикаXDTO.ЗаписатьXML(ЗаписьXML, КлючеваяОперация); КонецЦикла; ЗаписьXML.ЗаписатьКонецЭлемента(); ЗаписьXML.Закрыть(); @@ -509,23 +417,23 @@ УдалитьФайлы(ИмяВременногоФайла); КонецПроцедуры -// Генерирует имя файла для экспорта. +// Генерирует имя файла для экспорта // // Параметры: // Каталог - Строка, -// ДатаФормированияФайла - Дата, дата и время выполнения замера. +// ДатаФормированияФайла - Дата, дата и время выполнения замера // РасширениеСТочкой - Строка, задающая расширение файла, в виде ".xxx". // Возвращаемое значение: -// Строка - полный путь к файлу экспорта. +// Строка - полный путь к файлу экспорта // Функция ПолноеИмяФайлаЭкспорта(Каталог, ДатаФормированияФайла, РасширениеСТочкой) - Разделитель = ?(ВРег(Лев(Каталог, 3)) = "FTP", "/", ОбщегоНазначенияКлиентСервер.РазделительПути()); + Разделитель = ?(ВРег(Лев(Каталог, 3)) = "FTP", "/", ПолучитьРазделительПути()); Возврат УбратьРазделителиНаКонцеИмениФайла(Каталог, Разделитель) + Разделитель + Формат(ДатаФормированияФайла, "ДФ=""гггг-ММ-дд ЧЧ-мм-сс""") + РасширениеСТочкой; КонецФункции -// Проверить путь на наличие завершающего слэша и если он есть, удалить его. +// Проверить путь на наличие завершающего слеша и если он есть, удалить его // // Параметры: // ИмяФайла - Строка @@ -537,7 +445,7 @@ Возврат ИмяФайла; КонецЕсли; - Пока ДлинаПути > 0 И Прав(ИмяФайла, 1) = Разделитель Цикл + Пока ДлинаПути > 0 И СтрЗаканчиваетсяНа(ИмяФайла, Разделитель) Цикл ИмяФайла = Лев(ИмяФайла, ДлинаПути - 1); ДлинаПути = СтрДлина(ИмяФайла); КонецЦикла; @@ -594,7 +502,7 @@ МассивСлов[Индекс] = НРег(МассивСлов[Индекс]); КонецЦикла; - Результат = СтроковыеФункцииКлиентСервер.СтрокаИзМассиваПодстрок(МассивСлов, " "); + Результат = СтрСоединить(МассивСлов, " "); Возврат Результат; diff --git a/SSL/src/CommonModules/ОценкаПроизводительностиКлиент/Module.bsl b/SSL/src/CommonModules/ОценкаПроизводительностиКлиент/Module.bsl index f9d06c042..3ed50bdff 100644 --- a/SSL/src/CommonModules/ОценкаПроизводительностиКлиент/Module.bsl +++ b/SSL/src/CommonModules/ОценкаПроизводительностиКлиент/Module.bsl @@ -3,9 +3,9 @@ // //////////////////////////////////////////////////////////////////////////////// -#Область ПрограммныйИнтерфейс +#Область СлужебныеПроцедурыИФункции -// Метод завершающий замер времени на клиенте. +// Метод завершающий замер времени на клиенте // Процедура ЗакончитьЗамерВремениАвтоНеГлобальный() Экспорт @@ -13,10 +13,18 @@ КонецПроцедуры -// Произвести запись накопленных замеров времени выполнения ключевых операций на сервере. +// Метод завершающий замер времени на клиенте +// +Процедура ЗакончитьРучнойЗамерВремениНеГлобальный(УИДЗамера) Экспорт + Если ОценкаПроизводительностиВызовСервераПовтИсп.ВыполнятьЗамерыПроизводительности() Тогда + ЗакончитьЗамерВремени(УИДЗамера); + КонецЕсли; +КонецПроцедуры + +// Произвести запись накопленных замеров времени выполнения ключевых операций на сервере // // Параметры: -// ПередЗавершением - Булево - Истина, если метод вызывается перед закрытием приложения. +// ПередЗавершением - Булево - Истина, если метод вызывается перед закрытием приложения // Процедура ЗаписатьРезультатыАвтоНеГлобальный(ПередЗавершением = Ложь) Экспорт @@ -28,71 +36,73 @@ Иначе Замеры = ОценкаПроизводительностиЗамерВремени["Замеры"]; НовыйПериодЗаписи = ОценкаПроизводительностиВызовСервераПолныеПрава.ЗафиксироватьДлительностьКлючевыхОпераций(Замеры); - ОценкаПроизводительностиЗамерВремени["ПериодЗаписи"] = НовыйПериодЗаписи; - Если ПередЗавершением Тогда - Возврат; - КонецЕсли; - Для Каждого КлючеваяОперацияДатаДанные Из Замеры Цикл - Буфер = КлючеваяОперацияДатаДанные.Значение; - НаУдаление = Новый Массив; - Для Каждого ДатаДанные Из Буфер Цикл - Дата = ДатаДанные.Ключ; - Данные = ДатаДанные.Значение; - Длительность = Данные.Получить("Длительность"); - // Это означает, что операция уже закончилась, удалять ее из буфера нужно. - Если Длительность <> Неопределено Тогда - НаУдаление.Добавить(Дата); - КонецЕсли; + Если НовыйПериодЗаписи = Неопределено Тогда + НовыйПериодЗаписи = ОценкаПроизводительностиЗамерВремени["ПериодЗаписи"]; + Иначе + Если ПередЗавершением Тогда + Возврат; + КонецЕсли; + + ОценкаПроизводительностиЗамерВремени["ПериодЗаписи"] = НовыйПериодЗаписи; + + Для Каждого КлючеваяОперацияДатаДанные Из Замеры Цикл + Буфер = КлючеваяОперацияДатаДанные.Значение; + НаУдаление = Новый Массив; + Для Каждого ДатаДанные Из Буфер Цикл + КлючЗаписи = ДатаДанные.Ключ; + Данные = ДатаДанные.Значение; + Длительность = Данные.Получить("Длительность"); + // Это означает, что операция уже закончилась, удалять ее из буфера нужно. + Если Длительность <> Неопределено Тогда + НаУдаление.Добавить(КлючЗаписи); + КонецЕсли; + КонецЦикла; + Для Каждого КлючЗаписи Из НаУдаление Цикл + ОценкаПроизводительностиЗамерВремени["Замеры"][КлючеваяОперацияДатаДанные.Ключ].Удалить(КлючЗаписи); + КонецЦикла; КонецЦикла; - Для Каждого Дата Из НаУдаление Цикл - ОценкаПроизводительностиЗамерВремени["Замеры"][КлючеваяОперацияДатаДанные.Ключ].Удалить(Дата); - КонецЦикла; - КонецЦикла; + КонецЕсли; КонецЕсли; ПодключитьОбработчикОжидания("ЗаписатьРезультатыАвто", НовыйПериодЗаписи, Истина); КонецЕсли; - КонецПроцедуры -#КонецОбласти - -#Область СлужебныеПроцедурыИФункции - -// Процедура завершает замер времени на клиенте. +// Процедура завершает замер времени на клиенте // Параметры: // АвтоЗамер - Булево, закончен ли замер по обработчику // ожидания или же нет. -Процедура ЗакончитьЗамерВремени(АвтоЗамер = Истина) - - ДатаОкончания = ОценкаПроизводительностиКлиентСервер.ЗначениеТаймера(Ложь); - ВремяОкончания = ОценкаПроизводительностиКлиентСервер.ЗначениеТаймера(); - - Если АвтоЗамер И ТипЗнч(ВремяОкончания) = Тип("Число") Тогда - ВремяОкончания = ВремяОкончания - 0.100; +Процедура ЗакончитьЗамерВремени(УИДЗамера = Неопределено) + Если УИДЗамера = Неопределено Тогда + УИДЗамера = Новый УникальныйИдентификатор("00000000-0000-0000-0000-000000000000"); КонецЕсли; - СмещениеДатыКлиента = ПараметрыПриложения["СтандартныеПодсистемы.ОценкаПроизводительностиЗамерВремени"]["СмещениеДатыКлиента"]; - ДатаОкончания = ДатаОкончания + СмещениеДатыКлиента; - - Замеры = ПараметрыПриложения["СтандартныеПодсистемы.ОценкаПроизводительностиЗамерВремени"]["Замеры"]; - Для Каждого КлючеваяОперацияБуферы Из Замеры Цикл - Для Каждого ДатаДанные Из КлючеваяОперацияБуферы.Значение Цикл - Буфер = ДатаДанные.Значение; - ВремяНачала = Буфер["ВремяНачала"]; - Длительность = Буфер.Получить("Длительность"); - Если Длительность = Неопределено Тогда - Буфер.Вставить("Длительность", ВремяОкончания - ВремяНачала); - Буфер.Вставить("ВремяОкончания", ВремяОкончания); - Буфер.Вставить("ДатаОкончания", ДатаОкончания); - КонецЕсли; + ОценкаПроизводительностиЗамерВремени = ПараметрыПриложения["СтандартныеПодсистемы.ОценкаПроизводительностиЗамерВремени"]; + Если ОценкаПроизводительностиЗамерВремени <> Неопределено Тогда + ДатаОкончания = ОценкаПроизводительностиКлиентСервер.ЗначениеТаймера(Ложь); + ВремяОкончания = ОценкаПроизводительностиКлиентСервер.ЗначениеТаймера(); + + СмещениеДатыКлиента = ПараметрыПриложения["СтандартныеПодсистемы.ОценкаПроизводительностиЗамерВремени"]["СмещениеДатыКлиента"]; + ДатаОкончания = ДатаОкончания + СмещениеДатыКлиента; + + Замеры = ПараметрыПриложения["СтандартныеПодсистемы.ОценкаПроизводительностиЗамерВремени"]["Замеры"]; + Для Каждого КлючеваяОперацияБуферы Из Замеры Цикл + Для Каждого ДатаДанные Из КлючеваяОперацияБуферы.Значение Цикл + Буфер = ДатаДанные.Значение; + ВремяНачала = Буфер["ВремяНачала"]; + Длительность = Буфер.Получить("Длительность"); + Если Длительность = Неопределено И Буфер["УИДЗамера"] = УИДЗамера Тогда + Буфер.Вставить("Длительность", ВремяОкончания - ВремяНачала); + Буфер.Вставить("ВремяОкончания", ВремяОкончания); + Буфер.Вставить("ДатаОкончания", ДатаОкончания); + КонецЕсли; + КонецЦикла; КонецЦикла; - КонецЦикла; - + КонецЕсли; КонецПроцедуры //////////////////////////////////////////////////////////////////////////////// -// Обработчики событий подсистем БСП. +// Обработчики событий подсистем БСП // Вызывается перед интерактивным завершением работы пользователя с областью данных. // Соответствует событию ПередЗавершениемРаботыСистемы модулей приложения. diff --git a/SSL/src/CommonModules/ОценкаПроизводительностиКлиентГлобальный/Module.bsl b/SSL/src/CommonModules/ОценкаПроизводительностиКлиентГлобальный/Module.bsl index 70137e344..f62f75f44 100644 --- a/SSL/src/CommonModules/ОценкаПроизводительностиКлиентГлобальный/Module.bsl +++ b/SSL/src/CommonModules/ОценкаПроизводительностиКлиентГлобальный/Module.bsl @@ -1,20 +1,20 @@ //////////////////////////////////////////////////////////////////////////////// -// Обработчики ожидания для подсистемы оценки производительности. +// Обработчики ожидания для подсистемы оценки производительности // //////////////////////////////////////////////////////////////////////////////// #Область СлужебныеПроцедурыИФункции -// Процедура заканчивает замер времени выполнения ключевой операции. -// Вызывается из обработчика ожидания. +// Процедура заканчивает замер времени выполнения ключевой операции +// Вызывается из обработчика ожидания Процедура ЗакончитьЗамерВремениАвто() Экспорт ОценкаПроизводительностиКлиент.ЗакончитьЗамерВремениАвтоНеГлобальный(); КонецПроцедуры -// Процедура вызывает функцию записи результатов замеров на сервере. -// Вызывается из обработчика ожидания. +// Процедура вызывает функцию записи результатов замеров на сервере +// Вызывается из обработчика ожидания Процедура ЗаписатьРезультатыАвто() Экспорт ОценкаПроизводительностиКлиент.ЗаписатьРезультатыАвтоНеГлобальный(); diff --git a/SSL/src/CommonModules/ОценкаПроизводительностиКлиентСервер/Module.bsl b/SSL/src/CommonModules/ОценкаПроизводительностиКлиентСервер/Module.bsl index 7d49e292b..36ad83a2d 100644 --- a/SSL/src/CommonModules/ОценкаПроизводительностиКлиентСервер/Module.bsl +++ b/SSL/src/CommonModules/ОценкаПроизводительностиКлиентСервер/Module.bsl @@ -1,83 +1,117 @@ //////////////////////////////////////////////////////////////////////////////// -// Методы, позволяющие начать и закончить замер времени выполнения ключевой операции. +// Методы, позволяющие начать и закончить замер времени выполнения ключевой операции // //////////////////////////////////////////////////////////////////////////////// - #Область ПрограммныйИнтерфейс +#Область ПрограммныйИнтерфейсОценкаПроизводительности + +// Создает ключевые операции в случае их отсутствия. +// +// Параметры: +// КлючевыеОперации - Массив ключевых операций +// КлючеваяОперация - Структура("ИмяКлючевойОперации, ЦелевоеВремя) +// +#Если Сервер Тогда +Процедура СоздатьКлючевыеОперации(КлючевыеОперации) Экспорт + Запрос = Новый Запрос; + Запрос.Текст = "ВЫБРАТЬ ПЕРВЫЕ 1 + | КлючевыеОперации.Ссылка КАК Ссылка + |ИЗ + | Справочник.КлючевыеОперации КАК КлючевыеОперации + |ГДЕ + | КлючевыеОперации.Имя = &Имя + |УПОРЯДОЧИТЬ ПО + | Ссылка"; + + Для Каждого КлючеваяОперация Из КлючевыеОперации Цикл + Запрос.УстановитьПараметр("Имя", КлючеваяОперация.ИмяКлючевойОперации); + РезультатЗапроса = Запрос.Выполнить(); + Если РезультатЗапроса.Пустой() Тогда + ОценкаПроизводительностиВызовСервераПолныеПрава.СоздатьКлючевуюОперацию(КлючеваяОперация.ИмяКлючевойОперации, КлючеваяОперация.ЦелевоеВремя); + КонецЕсли; + КонецЦикла; +КонецПроцедуры +#КонецЕсли + + // Активизирует замер времени выполнения ключевой операции. +// Может вызываться как с клиента, так и с сервера. +// Результат замера будет записан в <РегистрСведений.ЗамерыВремени> +// +// В случае вызова с клиента, заканчивать замер не нужно, время завершения замера зафиксируется +// через глобальный обработчик ожидания <ЗакончитьЗамерВремениАвто>. +// Возвращает время начала замера +// +// В случае вызова с сервера функция только возвращает время начала +// Закончить замер нужно явно вызовом процедуры +// <ОценкаПроизводительностиКлиентСервер.ЗакончитьЗамерВремени(КлючеваяОперация, ВремяНачала, Комментарий = Неопределено)> // // Параметры: // КлючеваяОперация - СправочникСсылка.КлючевыеОперации - ключевая операция -// либо Строка - название ключевой операции. +// либо Строка - название ключевой операции // При вызове с сервера аргумент игнорируется. // // Возвращаемое значение: -// Дата или число - время начала с точностью до миллисекунд или секунд в зависимости от версии платформы. +// Число - время начала с точностью до миллисекунд. // Функция НачатьЗамерВремени(КлючеваяОперация = Неопределено) Экспорт + Параметры = Новый Структура; + Параметры.Вставить("КлючеваяОперация", КлючеваяОперация); - ВремяНачала = 0; - Если ОценкаПроизводительностиВызовСервераПовтИсп.ВыполнятьЗамерыПроизводительности() Тогда - ДатаНачала = ЗначениеТаймера(Ложь); - ВремяНачала = ЗначениеТаймера(); - #Если Клиент Тогда - Если Не ЗначениеЗаполнено(КлючеваяОперация) Тогда - ВызватьИсключение НСтр("ru = 'Не указана ключевая операция.'"); - КонецЕсли; - - ИмяПараметра = "СтандартныеПодсистемы.ОценкаПроизводительностиЗамерВремени"; - - Если ПараметрыПриложения = Неопределено Тогда - ПараметрыПриложения = Новый Соответствие; - КонецЕсли; - - Если ПараметрыПриложения[ИмяПараметра] = Неопределено Тогда - ТекущийПериодЗаписи = ОценкаПроизводительностиВызовСервераПолныеПрава.ПериодЗаписи(); - ДатаИВремяНаСервере = ОценкаПроизводительностиВызовСервераПолныеПрава.ДатаИВремяНаСервере(); - ДатаИВремяНаКлиенте = ТекущаяДата(); - - ПараметрыПриложения.Вставить(ИмяПараметра, Новый Структура); - ПараметрыПриложения[ИмяПараметра].Вставить("Замеры", Новый Соответствие); - ПараметрыПриложения[ИмяПараметра].Вставить("ПериодЗаписи", ТекущийПериодЗаписи); - ПараметрыПриложения[ИмяПараметра].Вставить("СмещениеДатыКлиента", ДатаИВремяНаСервере - ДатаИВремяНаКлиенте); - - ПодключитьОбработчикОжидания("ЗаписатьРезультатыАвто", ТекущийПериодЗаписи, Истина); - КонецЕсли; - Замеры = ПараметрыПриложения[ИмяПараметра]["Замеры"]; - СмещениеДатыКлиента = ПараметрыПриложения[ИмяПараметра]["СмещениеДатыКлиента"]; - - БуферКлючевойОперации = Замеры.Получить(КлючеваяОперация); - Если БуферКлючевойОперации = Неопределено Тогда - БуферКлючевойОперации = Новый Соответствие; - Замеры.Вставить(КлючеваяОперация, БуферКлючевойОперации); - КонецЕсли; - - ДатаНачала = ДатаНачала + СмещениеДатыКлиента; - НачатыйЗамер = БуферКлючевойОперации.Получить(ДатаНачала); - Если НачатыйЗамер = Неопределено Тогда - БуферЗамера = Новый Соответствие; - БуферЗамера.Вставить("ВремяНачала", ВремяНачала); - БуферКлючевойОперации.Вставить(ДатаНачала, БуферЗамера); - КонецЕсли; - - ПодключитьОбработчикОжидания("ЗакончитьЗамерВремениАвто", 0.1, Истина); - #КонецЕсли - КонецЕсли; - + ВремяНачала = НачатьЗамерВремениСлужебный(Параметры); + Возврат ВремяНачала; - КонецФункции -// Процедура завершает замер времени на сервере и записывает результат на сервере. +// Активизирует замер времени выполнения ключевой операции с произвольным комментарием +// Может вызываться как с клиента, так и с сервера. +// Результат замера будет записан в <РегистрСведений.ЗамерыВремени> +// +// В случае вызова с клиента, заканчивать замер не нужно, время завершения замера зафиксируется +// через глобальный обработчик ожидания <ЗакончитьЗамерВремениАвто>. +// Возвращает время начала замера +// +// В случае вызова с сервера функция только возвращает время начала +// Закончить замер нужно явно вызовом процедуры +// <ОценкаПроизводительностиКлиентСервер.ЗакончитьЗамерВремени(КлючеваяОперация, ВремяНачала, Комментарий = Неопределено)> +// // Параметры: -// КлючеваяОперация - СправочникСсылка.КлючевыеОперации - ключевая операция -// либо Строка - название ключевой операции. -// ВремяНачала - Число или Дата. -Процедура ЗакончитьЗамерВремени(КлючеваяОперация, ВремяНачала) Экспорт - Если ОценкаПроизводительностиВызовСервераПовтИсп.ВыполнятьЗамерыПроизводительности() Тогда +// КлючеваяОперация - СправочникСсылка.КлючевыеОперации - ключевая операция +// либо Строка - название ключевой операции +// При вызове с сервера аргумент игнорируется +// Комментарий - Строка(256) для записи произвольной информации +// при выполнении замера +// При вызове с сервера аргумент игнорируется +// +// Возвращаемое значение: +// Число - время начала с точностью до миллисекунд. +// +Функция НачатьЗамерВремениСКомментарием(КлючеваяОперация, Комментарий) Экспорт + Параметры = Новый Структура; + Параметры.Вставить("КлючеваяОперация", КлючеваяОперация); + Параметры.Вставить("Комментарий", Комментарий); + + ВремяНачала = НачатьЗамерВремениСлужебный(Параметры); + + Возврат ВремяНачала; +КонецФункции + +#Если Сервер Тогда +// Процедура завершает замер времени ключевой операции на сервере +// и записывает результат на сервере в <РегистрСведений.ЗамерыВремени> +// Вызывается только с сервера +// +// Параметры: +// КлючеваяОперация - СправочникСсылка.КлючевыеОперации - ключевая операция +// либо Строка - название ключевой операции +// ВремяНачала - Число (Формат ТекущаяУниверсальнаяДатаВМиллисекундах()/1000) или Дата начала замера +// Комментарий - Строка(256) для записи произвольной информации +// при выполнении замера +Процедура ЗакончитьЗамерВремени(КлючеваяОперация, ВремяНачала, Комментарий = Неопределено) Экспорт + Если ОценкаПроизводительностиВызовСервераПовтИсп.ВыполнятьЗамерыПроизводительности() Тогда ДатаОкончания = ЗначениеТаймера(Ложь); - ВремяОкончания = ЗначениеТаймера(); + ВремяОкончания = ЗначениеТаймера(Истина); Если ТипЗнч(ВремяНачала) = Тип("Число") Тогда Длительность = (ВремяОкончания - ВремяНачала); ДатаНачала = ДатаОкончания - Длительность; @@ -86,56 +120,294 @@ ДатаНачала = ВремяНачала; КонецЕсли; ОценкаПроизводительностиВызовСервераПолныеПрава.ЗафиксироватьДлительностьКлючевойОперации( - КлючеваяОперация, - Длительность, - ДатаНачала, - ДатаОкончания); - КонецЕсли; + КлючеваяОперация, + Длительность, + ДатаНачала, + ДатаОкончания, + Комментарий); + КонецЕсли; КонецПроцедуры +#КонецЕсли -// Функция вызывается при старте замера времени и его завершении. -// ТекущаяДата вместо ТекущаяДатаСеанса используется осмысленно. -// Но нужно помнить, что если время начала замера получено на клиенте, -// то и время конца замера нужно вычислять на клиенте. Для сервера то же самое. +#Если Клиент Тогда +// Активизирует замер времени выполнения ключевой операции. Для завершения замера необходимо +// явно вызвать в общем модуле <ОценкаПроизводительностиКлиентГлобальный> +// процедуру <Процедура ЗакончитьРучнойЗамерВремени(УИДЗамера)>, необходимо передать точно такой же +// УИДЗамера, как и в данной функции. +// Результат замера будет записан в <РегистрСведений.ЗамерыВремени>. +// +// Параметры: +// КлючеваяОперация - СправочникСсылка.КлючевыеОперации - ключевая операция +// либо Строка - название ключевой операции. +// УИДЗамера - Тип("УникальныйИдентификатор") - уникальный идентификатор замера +// должен обеспечивать уникальность замера, например использовать +// уникальный идентификатор формы. +// Комментарий - Строка(256) для записи произвольной информации +// при выполнении замера. +// +Функция НачатьРучнойЗамерВремени(КлючеваяОперация, УИДЗамера = Неопределено, Комментарий = Неопределено) Экспорт + Если УИДЗамера = Неопределено Тогда + УИДЗамера = Новый УникальныйИдентификатор(); + КонецЕсли; + + Параметры = Новый Структура; + Параметры.Вставить("КлючеваяОперация", КлючеваяОперация); + Параметры.Вставить("УИДЗамера", УИДЗамера); + Параметры.Вставить("Комментарий", Комментарий); + Параметры.Вставить("АвтоЗавершения", Ложь); + + НачатьЗамерВремениСлужебный(Параметры); + + Возврат УИДЗамера; +КонецФункции +#КонецЕсли + +#Если Клиент Тогда +// Процедура завершает ручной замер времени ключевой операции +// Вызывается только на клиенте +// +// Параметры: +// УИДЗамера - УникальныйИдентификатор +// +Процедура ЗакончитьРучнойЗамерВремени(УИДЗамера) Экспорт + ОценкаПроизводительностиКлиент.ЗакончитьРучнойЗамерВремениНеГлобальный(УИДЗамера); +КонецПроцедуры +#КонецЕсли + +#КонецОбласти + +#Область ПрограммныйИнтерфейсОценкаПроизводительностиТехнологическая + +// Активизирует замер времени выполнения технологической ключевой операции. +// Может вызываться как с клиента, так и с сервера. +// Результат замера будет записан в <РегистрСведений.ЗамерыВремениТехнологические> +// +// В случае вызова с клиента, заканчивать замер не нужно, время завершения замера зафиксируется +// через глобальный обработчик ожидания <ЗакончитьЗамерВремениАвто>. +// Возвращает время начала +// +// В случае вызова с сервера функция только возвращает время начала +// Закончить замер нужно явно вызовом процедуры <ЗакончитьЗамерВремени(КлючеваяОперация, ВремяНачала, Комментарий = Неопределено)> +// +// Параметры: +// КлючеваяОперация - СправочникСсылка.КлючевыеОперации - ключевая операция +// либо Строка - название ключевой операции +// При вызове с сервера аргумент игнорируется. +// Комментарий - Строка(256) для записи произвольной информации +// при выполнении замера // // Возвращаемое значение: -// Дата - время начала замера. -Функция ЗначениеТаймера(ВысокаяТочность = Истина) Экспорт +// Дата или число - время начала с точностью до миллисекунд или секунд в зависимости от версии платформы. +// +Функция НачатьЗамерВремениТехнологический(КлючеваяОперация, Комментарий = Неопределено) Экспорт + Параметры = Новый Структура; + Параметры.Вставить("КлючеваяОперация", КлючеваяОперация); + Параметры.Вставить("Комментарий", Комментарий); + Параметры.Вставить("Технологический", Истина); - Перем ЗначениеТаймера; - Если ВысокаяТочность Тогда + ВремяНачала = НачатьЗамерВремениСлужебный(Параметры); - ЗначениеТаймера = ТекущаяУниверсальнаяДатаВМиллисекундах() / 1000.0; - Возврат ЗначениеТаймера; - - Иначе - -#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда - Возврат ТекущаяДатаСеанса(); -#Иначе - Возврат ТекущаяДата(); + Возврат ВремяНачала; +КонецФункции + +#Если Сервер Тогда +// Процедура завершает замер времени технологической ключевой операции на сервере +// и записывает результат на сервере в <РегистрСведений.ЗамерыВремениТехнологические> +// Вызывается только с сервера +// +// Параметры: +// КлючеваяОперация - СправочникСсылка.КлючевыеОперации - ключевая операция +// либо Строка - название ключевой операции +// ВремяНачала - Число (Формат ТекущаяУниверсальнаяДатаВМиллисекундах()/1000) или Дата начала замера +// Комментарий - Строка(256) для записи произвольной информации +// при выполнении замера +Процедура ЗакончитьЗамерВремениТехнологический(КлючеваяОперация, ВремяНачала, Комментарий = Неопределено) Экспорт + Если ОценкаПроизводительностиВызовСервераПовтИсп.ВыполнятьЗамерыПроизводительности() Тогда + ДатаОкончания = ЗначениеТаймера(Ложь); + ВремяОкончания = ЗначениеТаймера(Истина); + Если ТипЗнч(ВремяНачала) = Тип("Число") Тогда + Длительность = (ВремяОкончания - ВремяНачала); + ДатаНачала = ДатаОкончания - Длительность; + Иначе + Длительность = (ДатаОкончания - ВремяНачала); + ДатаНачала = ВремяНачала; + КонецЕсли; + ОценкаПроизводительностиВызовСервераПолныеПрава.ЗафиксироватьДлительностьКлючевойОперации( + КлючеваяОперация, + Длительность, + ДатаНачала, + ДатаОкончания, + Комментарий, + Истина); + КонецЕсли; +КонецПроцедуры #КонецЕсли + +// Активизирует замер времени выполнения технологической ключевой операции с явным завершением времени +// длительности ключевой операции. Вызывается только с клиента. +// Для завершения замера необходимо вызвать в общем модуле <ОценкаПроизводительностиКлиентГлобальный> +// процедуру <Процедура ЗакончитьРучнойЗамерВремени(УИДЗамера)>, необходимо передать точно такой же +// УИДЗамера, как и в данную процедуру. +// Результат замера будет записан в <РегистрСведений.ЗамерыВремениТехнологические>. +// +// Параметры: +// КлючеваяОперация - СправочникСсылка.КлючевыеОперации - ключевая операция +// либо Строка - название ключевой операции. +// УИДЗамера - Тип("УникальныйИдентификатор") - уникальный идентификатор замера +// должен обеспечивать уникальность замера, например использовать +// уникальный идентификатор формы. +// Комментарий - Строка(256) для записи произвольной информации +// при выполнении замера. +// +#Если Клиент Тогда +Функция НачатьРучнойЗамерВремениТехнологический(КлючеваяОперация, УИДЗамера = Неопределено, Комментарий = Неопределено) Экспорт + Если УИДЗамера = Неопределено Тогда + УИДЗамера = Новый УникальныйИдентификатор(); + КонецЕсли; + Параметры = Новый Структура; + Параметры.Вставить("КлючеваяОперация", КлючеваяОперация); + Параметры.Вставить("УИДЗамера", УИДЗамера); + Параметры.Вставить("Комментарий", Комментарий); + Параметры.Вставить("АвтоЗавершения", Ложь); + Параметры.Вставить("Технологический", Истина); + + НачатьЗамерВремениСлужебный(Параметры); +КонецФункции +#КонецЕсли + +#Если Клиент Тогда +Процедура ЗакончитьРучнойЗамерВремениТехнологический(УИДЗамера) Экспорт + ОценкаПроизводительностиКлиент.ЗакончитьРучнойЗамерВремениНеГлобальный(УИДЗамера); +КонецПроцедуры +#КонецЕсли + +#КонецОбласти + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +Функция НачатьЗамерВремениСлужебный(Параметры) + Если Параметры.Свойство("КлючеваяОперация") Тогда + КлючеваяОперация = Параметры.КлючеваяОперация; + Иначе + КлючеваяОперация = Неопределено; КонецЕсли; -КонецФункции - -// Ключ параметра регламентного задания, соответствующий локальному каталогу экспорта. -Функция ЛокальныйКаталогЭкспортаКлючЗадания() Экспорт + Если Параметры.Свойство("УИДЗамера") И Параметры.УИДЗамера <> Неопределено Тогда + УИДЗамера = Параметры.УИДЗамера; + Иначе + УИДЗамера = Новый УникальныйИдентификатор("00000000-0000-0000-0000-000000000000"); + КонецЕсли; - Возврат "ЛокальныйКаталогЭкспорта"; + Если Параметры.Свойство("Комментарий") Тогда + Комментарий = Параметры.Комментарий; + Иначе + Комментарий = Неопределено; + КонецЕсли; + + Если Параметры.Свойство("АвтоЗавершение") И Параметры.АвтоЗавершение <> Неопределено Тогда + АвтоЗавершение = Параметры.АвтоЗавершение; + Иначе + АвтоЗавершение = Истина; + КонецЕсли; + + Если Параметры.Свойство("Технологический") Тогда + Технологический = Параметры.Технологический; + Иначе + Технологический = Ложь; + КонецЕсли; + + Если ТипЗнч(УИДЗамера) <> Тип("УникальныйИдентификатор") Тогда + ВызватьИсключение НСтр("ru = 'Не верный тип УИДа замера.'"); + КонецЕсли; + + ВремяНачала = 0; + Если ОценкаПроизводительностиВызовСервераПовтИсп.ВыполнятьЗамерыПроизводительности() Тогда + ДатаНачала = ЗначениеТаймера(Ложь); + ВремяНачала = ЗначениеТаймера(); + + #Если Клиент И ТолстыйКлиентУправляемоеПриложение И Сервер Тогда + Если Не ЗначениеЗаполнено(КлючеваяОперация) Тогда + // Считаем, что вызов пришел с сервера. Возвращаем начало замера + Возврат ВремяНачала; + КонецЕсли; + #КонецЕсли + + #Если Клиент Тогда + Если Не ЗначениеЗаполнено(КлючеваяОперация) Тогда + ВызватьИсключение НСтр("ru = 'Не указана ключевая операция.'"); + КонецЕсли; + + ИмяПараметра = "СтандартныеПодсистемы.ОценкаПроизводительностиЗамерВремени"; + Если ПараметрыПриложения[ИмяПараметра] = Неопределено Тогда + ПараметрыПриложения.Вставить(ИмяПараметра, Новый Структура); + ПараметрыПриложения[ИмяПараметра].Вставить("Замеры", Новый Соответствие); + + ТекущийПериодЗаписи = ОценкаПроизводительностиВызовСервераПолныеПрава.ПериодЗаписи(); + ПараметрыПриложения[ИмяПараметра].Вставить("ПериодЗаписи", ТекущийПериодЗаписи); + + ДатаИВремяНаСервере = ОценкаПроизводительностиВызовСервераПолныеПрава.ДатаИВремяНаСервере(); + // Получаем дату в UTC + ДатаИВремяНаКлиенте = Дата(1,1,1) + ТекущаяУниверсальнаяДатаВМиллисекундах()/1000; + ПараметрыПриложения[ИмяПараметра].Вставить( + "СмещениеДатыКлиента", + ДатаИВремяНаСервере - ДатаИВремяНаКлиенте); + + ПодключитьОбработчикОжидания("ЗаписатьРезультатыАвто", ТекущийПериодЗаписи, Истина); + КонецЕсли; + Замеры = ПараметрыПриложения[ИмяПараметра]["Замеры"]; + + БуферКлючевойОперации = Замеры.Получить(КлючеваяОперация); + Если БуферКлючевойОперации = Неопределено Тогда + БуферКлючевойОперации = Новый Соответствие; + Замеры.Вставить(КлючеваяОперация, БуферКлючевойОперации); + КонецЕсли; + + СмещениеДатыКлиента = ПараметрыПриложения[ИмяПараметра]["СмещениеДатыКлиента"]; + ДатаНачала = ДатаНачала + СмещениеДатыКлиента; + НачатыйЗамер = БуферКлючевойОперации.Получить(ДатаНачала); + Если НачатыйЗамер = Неопределено Тогда + БуферЗамера = Новый Соответствие; + БуферЗамера.Вставить("УИДЗамера", УИДЗамера); + БуферЗамера.Вставить("ДатаНачала", ДатаНачала); + БуферЗамера.Вставить("ВремяНачала", ВремяНачала); + БуферЗамера.Вставить("Комментарий", Комментарий); + БуферЗамера.Вставить("Технологический", Технологический); + БуферКлючевойОперации.Вставить(Новый УникальныйИдентификатор(), БуферЗамера); + КонецЕсли; + + Если АвтоЗавершение Тогда + ПодключитьОбработчикОжидания("ЗакончитьЗамерВремениАвто", 0.1, Истина); + КонецЕсли; + #КонецЕсли + КонецЕсли; + + Возврат ВремяНачала; КонецФункции -// Ключ параметра регламентного задания, соответствующий ftp каталогу экспорта. -Функция FTPКаталогЭкспортаКлючЗадания() Экспорт +// Возвращаемое значение: +// Дата - время начала замера +// +Функция ЗначениеТаймера(ВысокаяТочность = Истина) Экспорт + Возврат ТекущаяУниверсальнаяДатаВМиллисекундах() / 1000.0; +КонецФункции + +// Получает имя дополнительного свойства не проверять приоритеты при записи ключевой операции +// +// Возвращаемое значение: +// Строка - имя дополнительного свойства +// +Функция НеПроверятьПриоритет() Экспорт - Возврат "FTPКаталогЭкспорта"; + Возврат "НеПроверятьПриоритет"; КонецФункции #Если Сервер Тогда -// Процедура записывает данные в журнал регистрации. +// Процедура записывает данные в журнал регистрации // // Параметры: // ИмяСобытия - Строка @@ -153,15 +425,20 @@ КонецПроцедуры #КонецЕсли -// Получает имя дополнительного свойства не проверять приоритеты при записи ключевой операции. +// Ключ параметра регламентного задания, соответствующий локальному каталогу экспорта // -// Возвращаемое значение: -// Строка - имя дополнительного свойства. -// -Функция НеПроверятьПриоритет() Экспорт +Функция ЛокальныйКаталогЭкспортаКлючЗадания() Экспорт - Возврат "НеПроверятьПриоритет"; + Возврат "ЛокальныйКаталогЭкспорта"; КонецФункции -#КонецОбласти +// Ключ параметра регламентного задания, соответствующий ftp каталогу экспорта +// +Функция FTPКаталогЭкспортаКлючЗадания() Экспорт + + Возврат "FTPКаталогЭкспорта"; + +КонецФункции + +#КонецОбласти \ No newline at end of file diff --git a/SSL/src/CommonModules/ОценкаПроизводительностиСлужебный/Module.bsl b/SSL/src/CommonModules/ОценкаПроизводительностиСлужебный/Module.bsl index 5856db0c9..3c23482f9 100644 --- a/SSL/src/CommonModules/ОценкаПроизводительностиСлужебный/Module.bsl +++ b/SSL/src/CommonModules/ОценкаПроизводительностиСлужебный/Module.bsl @@ -14,36 +14,93 @@ "ОценкаПроизводительностиКлиент"); // СЕРВЕРНЫЕ ОБРАБОТЧИКИ. - - СерверныеОбработчики["СтандартныеПодсистемы.БазоваяФункциональность\ПриДобавленииОбработчиковУстановкиПараметровСеанса"].Добавить( - "ОценкаПроизводительностиСлужебный"); СерверныеОбработчики[ "СтандартныеПодсистемы.БазоваяФункциональность\ПриЗаполненииРазрешенийНаДоступКВнешнимРесурсам"].Добавить( "ОценкаПроизводительностиСлужебный"); + + СерверныеОбработчики[ + "СтандартныеПодсистемы.ОбновлениеВерсииИБ\ПриДобавленииОбработчиковОбновления"].Добавить( + "ОценкаПроизводительностиСлужебный"); КонецПроцедуры +// Добавляет процедуры-обработчики обновления, необходимые данной подсистеме. +// +// Параметры: +// Обработчики - ТаблицаЗначений - см. описание функции НоваяТаблицаОбработчиковОбновления +// общего модуля ОбновлениеИнформационнойБазы. +// +Процедура ПриДобавленииОбработчиковОбновления(Обработчики) Экспорт + + Обработчик = Обработчики.Добавить(); + Обработчик.Версия = "2.3.1.38"; + Обработчик.Процедура = "ОценкаПроизводительностиСлужебный.ЗаполнитьИмяХеш"; + + Обработчик = Обработчики.Добавить(); + Обработчик.МонопольныйРежим = Истина; + Обработчик.Версия = "2.3.1.74"; + Обработчик.Процедура = "ОценкаПроизводительностиСлужебный.ЗаполнитьИмяХеш"; + +КонецПроцедуры + +// Возвращает соответствие имен параметров сеанса и обработчиков для их инициализации. +// +Процедура ПриДобавленииОбработчиковУстановкиПараметровСеанса(Обработчики) Экспорт + + Обработчики.Вставить("КомментарийЗамераВремени", "ОценкаПроизводительностиСлужебный.УстановкаПараметровСеанса"); + +КонецПроцедуры + +// Получает N худших замеров производительности за период +// Параметры: +// ДатаНачала - ДатаВремя - Начало периода выборки +// ДатаОкончания - ДатаВремя - Окончание периода выборка +// ТопApdexКоличество - Число - Количество худших замеров, если но, то возвращаются все замеры +// +Функция ПолучитьТопAPDEX(ДатаНачала, ДатаОкончания, ПериодАгрегации, ТопApdexКоличество) Экспорт + Возврат РегистрыСведений.ЗамерыВремени.ПолучитьТопAPDEX(ДатаНачала, ДатаОкончания, ПериодАгрегации, ТопApdexКоличество); +КонецФункции + +// Получает N худших замеров производительности технологической за период +// Параметры: +// ДатаНачала - ДатаВремя - Начало периода выборки +// ДатаОкончания - ДатаВремя - Окончание периода выборка +// ТопApdexКоличество - Число - Количество худших замеров, если но, то возвращаются все замеры +// +Функция ПолучитьТопAPDEXТехнологический(ДатаНачала, ДатаОкончания, ПериодАгрегации, ТопApdexКоличество) Экспорт + Возврат РегистрыСведений.ЗамерыВремениТехнологические.ПолучитьТопAPDEX(ДатаНачала, ДатаОкончания, ПериодАгрегации, ТопApdexКоличество); +КонецФункции + #КонецОбласти #Область СлужебныеПроцедурыИФункции //////////////////////////////////////////////////////////////////////////////// -// Обработчики событий подсистем БСП. +// Обработчики событий подсистем БСП -// Возвращает соответствие имен параметров сеанса и обработчиков для их инициализации. +// Устанавливает параметры сеанса подсистемы оценки производительности. // -Процедура ПриДобавленииОбработчиковУстановкиПараметровСеанса(Обработчики) Экспорт +// Параметры: +// ИмяПараметра - Строка - имя параметра сеанса, значение которого необходимо установить. +// УстановленныеПараметры - массив - в данный параметр помещается информация об установленных параметрах сеанса. +// +Процедура УстановкаПараметровСеанса(ИмяПараметра, УстановленныеПараметры) Экспорт - Обработчики.Вставить("ТекущийЗамерВремени", "ОценкаПроизводительностиВызовСервера.УстановкаПараметровСеанса"); + // Инициализация параметров сеанса должна выполняться без обращения к параметрам работы программы. + Если ИмяПараметра = "КомментарийЗамераВремени" Тогда + ПараметрыСеанса.КомментарийЗамераВремени = ПолучитьКомментарийЗамераВремени(); + УстановленныеПараметры.Добавить("КомментарийЗамераВремени"); + Возврат; + КонецЕсли; КонецПроцедуры // Заполняет перечень запросов внешних разрешений, которые обязательно должны быть предоставлены // при создании информационной базы или обновлении программы. // // Параметры: -// ЗапросыРазрешений - Массив - список значений, возвращенных функцией. +// ЗапросыРазрешений - Массив - список значений, возвращенных функцией // РаботаВБезопасномРежиме.ЗапросНаИспользованиеВнешнихРесурсов(). // Процедура ПриЗаполненииРазрешенийНаДоступКВнешнимРесурсам(ЗапросыРазрешений) Экспорт @@ -70,6 +127,34 @@ КонецПроцедуры +// Заполняет параметр сеанса "КомментарийЗамераВремени" +// при запуске программы +// +Функция ПолучитьКомментарийЗамераВремени() Экспорт + СистемнаяИнформация = Новый СистемнаяИнформация(); + ВерсияПриложения = СистемнаяИнформация.ВерсияПриложения; + ВерсияКонфигурации = Метаданные.Синоним + ", версия " + Метаданные.Версия; + Разделители = ""; + + РазделениеДанных = ПользователиИнформационнойБазы.ТекущийПользователь().РазделениеДанных; + Если РазделениеДанных.Количество() <> 0 Тогда + Для Каждого ТекРазделитель Из РазделениеДанных Цикл + Разделители = Разделители + ТекРазделитель.Значение + ","; + КонецЦикла; + Иначе + Разделители = "0,"; + КонецЕсли; + Разделители = Лев(Разделители, СтрДлина(Разделители) - 1); + + КомментарийЗамераВремени = ВерсияПриложения + + ";" + + ВерсияКонфигурации + + ";" + + Разделители; + + Возврат КомментарийЗамераВремени; +КонецФункции + // Только для внутреннего использования. Функция ЗапросНаИспользованиеВнешнихРесурсов(Каталоги) Экспорт @@ -80,12 +165,12 @@ КонецФункции //////////////////////////////////////////////////////////////////////////////// -// Экспортные служебные процедуры и функции. +// Экспортные служебные процедуры и функции -// Находит и возвращает регламентное задание экспорта замеров времени. +// Находит и возвращает регламентное задание экспорта замеров времени // // Возвращаемое значение: -// РегламентноеЗадание - РегламентноеЗадание.ЭкспортОценкиПроизводительности, найденное задание. +// РегламентноеЗадание - РегламентноеЗадание.ЭкспортОценкиПроизводительности, найденное задание // Функция РегламентноеЗаданиеЭкспортаОценкиПроизводительности() Экспорт @@ -103,7 +188,7 @@ КонецФункции -// Возвращает каталоги экспорта файлов с результатами замеров. +// Возвращает каталоги экспорта файлов с результатами замеров // // Параметры: // Нет @@ -113,7 +198,7 @@ // "ВыполнятьЭкспортНаFTP" - Булево - Признак выполнения экспорта на FTP // "FTPКаталогЭкспорта" - Строка - FTP-каталог экспорта // "ВыполнятьЭкспортВЛокальныйКаталог" - Булево - Признак выполнения экспорта в локальный каталог -// "ЛокальныйКаталогЭкспорта" - Строка - Локальный каталог экспорта. +// "ЛокальныйКаталогЭкспорта" - Строка - Локальный каталог экспорта // Функция КаталогиЭкспортаОценкиПроизводительности() Экспорт @@ -164,8 +249,8 @@ КонецФункции // Возвращает ссылку на элемент "Общая производительность", -// Если существует предопределенный элемент "ОбщаяПроизводительностьСистемы", то возвращается этот элемент. -// В противном случае возвращается пустая ссылка. +// Если существует предопределенный элемент "ОбщаяПроизводительностьСистемы", то возвращается этот элемент +// В противном случае возвращается пустая ссылка // // Параметры: // Нет @@ -223,9 +308,9 @@ КонецФункции //////////////////////////////////////////////////////////////////////////////// -// Локальные служебные процедуры и функции. +// Локальные служебные процедуры и функции -// Формирует массив разрешений для экспорта данных замеров. +// Формирует массив разрешений для экспорта данных замеров // // Параметры - КаталогиЭкспорта - Структура // @@ -262,4 +347,98 @@ Возврат Разрешения; КонецФункции +Функция СформироватьПрограммноНаСервере(СхемаКомпоновкиДанных, Настройки, УникальныйИдентификатор, АдресХранилища) Экспорт + КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных; + ДанныеРасшифровкиОбъект = Новый ДанныеРасшифровкиКомпоновкиДанных; + + ДанныеРасшифровки = Новый ДанныеРасшифровкиКомпоновкиДанных; + МакетКомпоновки = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных, Настройки, ДанныеРасшифровки); + + ПКД = Новый ПроцессорКомпоновкиДанных; + ПКД.Инициализировать(МакетКомпоновки,,ДанныеРасшифровки); + ПВ = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент; + + Результат = Новый ТабличныйДокумент; + + ПВ.УстановитьДокумент(Результат); + ПВ.Вывести(ПКД); + + Если Результат.Рисунки.Количество() = 1 Тогда + Результат.Рисунки[0].Объект.Обновление = Ложь; + Результат.Рисунки[0].Объект.Анимация = АнимацияДиаграммы.НеИспользовать; + Результат.Рисунки[0].Объект.ОбластьПостроения.Лево = 0; + Результат.Рисунки[0].Высота = 60; + Результат.Рисунки[0].Ширина = 250; + Результат.Рисунки[0].Объект.Обновление = Истина; + + Результат.Рисунки[0].Объект.ОбластьПостроения.ОриентацияМеток = ОриентацияМетокДиаграммы.Горизонтально; + Для Каждого ТекСерия Из Результат.Рисунки[0].Объект.Серии Цикл + ТекСерия.Маркер = ТипМаркераДиаграммы.Нет; + КонецЦикла; + Результат.УдалитьОбласть(Результат.Область("R20:R35"), ТипСмещенияТабличногоДокумента.ПоВертикали); + КонецЕсли; + + Результат.ПоказатьУровеньГруппировокСтрок(1); + Результат.ПоказатьУровеньГруппировокСтрок(0); + + ДанныеФЗ = Новый Структура; + ДанныеФЗ.Вставить("ТабличныйДокумент", Результат); + ДанныеФЗ.Вставить("ДанныеРасшифровки", ДанныеРасшифровки); + + ПоместитьВоВременноеХранилище(ДанныеФЗ, АдресХранилища); +КонецФункции + +Функция РезультатЗапросаВМассив(Результат) Экспорт + РезультатМассив = Новый Массив; + + Выборка = Результат.Выбрать(); + Пока Выборка.Следующий() Цикл + ДанныеСтроки = Новый Структура; + + Для Каждого ТекКолонка Из Результат.Колонки Цикл + ДанныеСтроки.Вставить(ТекКолонка.Имя, Выборка[ТекКолонка.Имя]); + КонецЦикла; + + РезультатМассив.Добавить(ДанныеСтроки); + КонецЦикла; + + Возврат РезультатМассив; +КонецФункции + +Процедура ЗаполнитьИмяХеш() Экспорт + НачатьТранзакцию(); + + Блокировка = Новый БлокировкаДанных; + ЭлементБлокировки = Блокировка.Добавить("Справочник.КлючевыеОперации"); + ЭлементБлокировки.Режим = РежимБлокировкиДанных.Исключительный; + Блокировка.Заблокировать(); + + Запрос = Новый Запрос; + Запрос.Текст = " + |ВЫБРАТЬ + | Ссылка + |ИЗ + | Справочник.КлючевыеОперации + |ГДЕ + | ИмяХеш = """" + |"; + + Результат = Запрос.Выполнить(); + Выборка = Результат.Выбрать(); + Пока Выборка.Следующий() Цикл + СпрОбъект = Выборка.Ссылка.ПолучитьОбъект(); + СпрОбъект.ОбменДанными.Загрузка = Истина; + + ХешMD5 = Новый ХешированиеДанных(ХешФункция.MD5); + ХешMD5.Добавить(СпрОбъект.Имя); + ИмяХешТемп = ХешMD5.ХешСумма; + СпрОбъект.ИмяХеш = СтрЗаменить(Строка(ИмяХешТемп), " ", ""); + + СпрОбъект.Записать(); + КонецЦикла; + + ЗафиксироватьТранзакцию(); +КонецПроцедуры + #КонецОбласти + diff --git a/SSL/src/CommonModules/ОчередьЗаданий/Module.bsl b/SSL/src/CommonModules/ОчередьЗаданий/Module.bsl index d59ab70d1..da486b600 100644 --- a/SSL/src/CommonModules/ОчередьЗаданий/Module.bsl +++ b/SSL/src/CommonModules/ОчередьЗаданий/Module.bsl @@ -14,7 +14,7 @@ // // Описание параметров: // ОбластьДанных - Число - значение разделителя области данных задания. -// Д1 для неразделенных заданий. При установленном разделении сеанса всегда +// -1 для неразделенных заданий. При установленном разделении сеанса всегда // используется значение сеанса. // Идентификатор - СправочникСсылка.ОчередьЗаданий, // СправочникСсылка.ОчередьЗаданийОбластейДанных - идентификатор задания. @@ -189,8 +189,8 @@ СтрокаУсловий = СтрокаУсловий + Символы.ПС + Символы.Таб + "И "; КонецЕсли; - СтрокаУсловий = СтрокаУсловий + "Очередь." + Условие.Поле + " " + - ВидыСравнения.Получить(Условие.ВидСравнения) + " (&" + Условие.Параметр + ")"; + СтрокаУсловий = СтрокаУсловий + "Очередь." + Условие.Поле + " " + + ВидыСравнения.Получить(Условие.ВидСравнения) + " (&" + Условие.Параметр + ")"; Запрос.УстановитьПараметр(Условие.Параметр, Условие.Значение); КонецЦикла; @@ -458,8 +458,7 @@ // Проверка попытки изменения параметров заданий с заданным шаблоном. Если ОбщегоНазначенияПовтИсп.ЭтоРазделеннаяКонфигурация() И ОбщегоНазначенияПовтИсп.ЭтоРазделенныйОбъектМетаданных( Идентификатор.Метаданные().ПолноеИмя(), - ОбщегоНазначенияПовтИсп.РазделительВспомогательныхДанных() - ) Тогда + ОбщегоНазначенияПовтИсп.РазделительВспомогательныхДанных()) Тогда Если ЗначениеЗаполнено(Задание.Шаблон) Тогда ОписанияПараметров = ОчередьЗаданийСлужебныйПовтИсп.ПараметрыЗаданийОчереди(); Для каждого КлючИЗначение Из ПараметрыЗадания Цикл @@ -467,8 +466,7 @@ Если Не ОписаниеПараметра.Шаблон Тогда ШаблонСообщения = НСтр("ru = 'Задание очереди с идентификатором %1 создано на основе шаблона. |Изменение параметра %2 заданий с установленным шаблоном запрещено.'"); - ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонСообщения, - Идентификатор, ОписаниеПараметра.Имя); + ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонСообщения, Идентификатор, ОписаниеПараметра.Имя); ВызватьИсключение(ТекстСообщения); КонецЕсли; КонецЦикла; @@ -604,8 +602,7 @@ Если ОбщегоНазначенияПовтИсп.ЭтоРазделеннаяКонфигурация() И ОбщегоНазначенияПовтИсп.ЭтоРазделенныйОбъектМетаданных( Задание.Метаданные().ПолноеИмя(), - ОбщегоНазначенияПовтИсп.РазделительВспомогательныхДанных() - ) Тогда + ОбщегоНазначенияПовтИсп.РазделительВспомогательныхДанных()) Тогда Если ЗначениеЗаполнено(Задание.Шаблон) Тогда ШаблонСообщения = НСтр("ru = 'Задание очереди с идентификатором %1 создано на основе шаблона. |Удаление заданий с установленным шаблоном запрещено.'"); @@ -702,8 +699,7 @@ ИЛИ НЕ ОписаниеПараметра[Режим] Тогда ШаблонСообщения = НСтр("ru = 'Передан недопустимый параметр задания - %1'"); - ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонСообщения, - КлючИЗначение.Ключ); + ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонСообщения, КлючИЗначение.Ключ); ВызватьИсключение(ТекстСообщения); КонецЕсли; @@ -712,8 +708,7 @@ Для каждого ОписаниеОтбора Из КлючИЗначение.Значение Цикл Если ТипЗнч(ОписаниеОтбора) <> Тип("Структура") Тогда ШаблонСообщения = НСтр("ru = 'Передан недопустимый тип %1 в коллекции описания отбора %2'"); - ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонСообщения, - ТипЗнч(ОписаниеОтбора), КлючИЗначение.Ключ); + ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонСообщения, ТипЗнч(ОписаниеОтбора), КлючИЗначение.Ключ); ВызватьИсключение(ТекстСообщения); КонецЕсли; @@ -722,8 +717,7 @@ Если НЕ ОписаниеОтбора.Свойство(ИмяКлюча) Тогда ШаблонСообщения = НСтр("ru = 'Передано недопустимое описание отбора в коллекции описания отбора %1. |Отсутствует свойство %2.'"); - ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонСообщения, - КлючИЗначение.Ключ, ИмяКлюча); + ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонСообщения, КлючИЗначение.Ключ, ИмяКлюча); ВызватьИсключение(ТекстСообщения); КонецЕсли; КонецЦикла; @@ -731,8 +725,7 @@ // Проверка вида сравнения Если ВидыСравнения.Получить(ОписаниеОтбора.ВидСравнения) = Неопределено Тогда ШаблонСообщения = НСтр("ru = 'Передан недопустимый вид сравнения в описании отбора в коллекции описания отбора %1'"); - ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонСообщения, - КлючИЗначение.Ключ); + ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонСообщения, КлючИЗначение.Ключ); ВызватьИсключение(ТекстСообщения); КонецЕсли; @@ -743,8 +736,7 @@ Если ТипЗнч(ОписаниеОтбора.Значение) <> Тип("Массив") Тогда ШаблонСообщения = НСтр("ru = 'Передан недопустимый тип %1 в описании отбора в коллекции описания отбора %2. |Для вида сравнения %3 ожидается тип Массив.'"); - ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонСообщения, - ТипЗнч(ОписаниеОтбора.Значение), КлючИЗначение.Ключ, ОписаниеОтбора.ВидСравнения); + ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонСообщения, ТипЗнч(ОписаниеОтбора.Значение), КлючИЗначение.Ключ, ОписаниеОтбора.ВидСравнения); ВызватьИсключение(ТекстСообщения); КонецЕсли; @@ -794,8 +786,7 @@ Если НЕ ОписаниеПараметра.Тип.СодержитТип(ТипЗнч(Значение)) Тогда ШаблонСообщения = НСтр("ru = 'Передан недопустимый тип %1 параметра задания %2'"); - ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонСообщения, - ТипЗнч(Значение), ОписаниеПараметра.Имя); + ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонСообщения, ТипЗнч(Значение), ОписаниеПараметра.Имя); ВызватьИсключение(ТекстСообщения); КонецЕсли; diff --git a/SSL/src/CommonModules/ОчередьЗаданийПереопределяемый/Module.bsl b/SSL/src/CommonModules/ОчередьЗаданийПереопределяемый/Module.bsl index 5318b1f84..c3d9a4900 100644 --- a/SSL/src/CommonModules/ОчередьЗаданийПереопределяемый/Module.bsl +++ b/SSL/src/CommonModules/ОчередьЗаданийПереопределяемый/Module.bsl @@ -3,7 +3,7 @@ // /////////////////////////////////////////////////////////////////////////////////// -#Область СлужебныеПроцедурыИФункции +#Область ПрограммныйИнтерфейс // Формирует список шаблонов заданий очереди. // diff --git a/SSL/src/CommonModules/ОчередьЗаданийСлужебный/Module.bsl b/SSL/src/CommonModules/ОчередьЗаданийСлужебный/Module.bsl index a82481c3e..4e40f0c1e 100644 --- a/SSL/src/CommonModules/ОчередьЗаданийСлужебный/Module.bsl +++ b/SSL/src/CommonModules/ОчередьЗаданийСлужебный/Module.bsl @@ -194,6 +194,15 @@ КонецПроцедуры +//////////////////////////////////////////////////////////////////////////////// +// Обработчики условных вызовов в эту подсистему. + +// Возвращает менеджер справочника ОчередьЗаданий. +Функция СправочникОчередьЗаданий() Экспорт + + Возврат ОбщегоНазначения.МенеджерОбъектаПоПолномуИмени("Справочник.ОчередьЗаданий"); + +КонецФункции #КонецОбласти @@ -587,10 +596,9 @@ Попытка - ПараметрыОбработчикаОшибок = ПолучитьПараметрыОбработчикаОшибок(Задание, ИнформацияОбОшибкеВыполненияЗадания); - ЗаблокироватьДанныеДляРедактирования(Задание); + ПараметрыОбработчикаОшибок = ПолучитьПараметрыОбработчикаОшибок(Задание, ИнформацияОбОшибкеВыполненияЗадания); Если ПараметрыОбработчикаОшибок.ОбработчикСуществует Тогда ВыполнитьМетодКонфигурации(ПараметрыОбработчикаОшибок.ИмяМетода, ПараметрыОбработчикаОшибок.ПараметрыВызоваОбработчика); КонецЕсли; @@ -602,8 +610,7 @@ |Метод обработчика ошибок: %2 |По причине: |%3'"); - ТекстКомментария = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - ШаблонКомментария, + ТекстКомментария = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонКомментария, ПараметрыОбработчикаОшибок.ИмяМетодаЗадания, ПараметрыОбработчикаОшибок.ИмяМетода, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); @@ -672,8 +679,7 @@ ШаблонКомментария = НСтр("ru = 'Был выполнен обработчик снятие заданий. |Псевдоним метода: %1 |Уровень рекурсии: %2'"); - ТекстКомментария = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - ШаблонКомментария, + ТекстКомментария = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонКомментария, ПараметрыОбработчикаОшибок.ИмяМетодаЗадания, СчетчикРекурсии); @@ -720,8 +726,7 @@ Если ТранзакцияАктивна() Тогда - ТекстСообщенияОбОшибке = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Перед стартом выполнения обработчика %1 есть активные транзакции!'"), + ТекстСообщенияОбОшибке = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Перед стартом выполнения обработчика %1 есть активные транзакции!'"), ИмяМетода); ЗаписьЖурналаРегистрации(НСтр("ru = 'Очередь регламентных заданий.Выполнение'", @@ -758,8 +763,7 @@ Если Не(РазделительУстановлен) И ОбщегоНазначения.ИспользованиеРазделителяСеанса() Тогда - ТекстСообщенияОбОшибке = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'По завершении выполнения обработчика %1 не было выключено разделение сеанса!'"), + ТекстСообщенияОбОшибке = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'По завершении выполнения обработчика %1 не было выключено разделение сеанса!'"), ИмяМетода); ЗаписьЖурналаРегистрации(НСтр("ru = 'Очередь регламентных заданий.Выполнение'", @@ -773,8 +777,7 @@ ИначеЕсли РазделительУстановлен И ЗначениеРазделителя <> РаботаВМоделиСервиса.ЗначениеРазделителяСеанса() Тогда - ТекстСообщенияОбОшибке = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'По завершении выполнения обработчика %1 было изменено значение разделителя сеанса!'"), + ТекстСообщенияОбОшибке = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'По завершении выполнения обработчика %1 было изменено значение разделителя сеанса!'"), ИмяМетода); ЗаписьЖурналаРегистрации(НСтр("ru = 'Очередь регламентных заданий.Выполнение'", @@ -979,13 +982,35 @@ Процедура ЗаписьКонтроляВыполнения(Знач ИмяСобытия, Знач ЗаписьЗадания, Знач Комментарий = "") - Если Не ПустаяСтрока(Комментарий) Тогда + Если НЕ ПустаяСтрока(Комментарий) Тогда + Комментарий = Комментарий + Символы.ПС; + + КонецЕсли; + + Если ТипЗнч(ЗаписьЗадания) = Тип("СправочникСсылка.ОчередьЗаданий") Тогда + + ИмяМетода = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(ЗаписьЗадания, "ИмяМетода"); + + Иначе + + ОписаниеМетода = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(ЗаписьЗадания, "ИмяМетода, Шаблон"); + + Если ЗначениеЗаполнено(ОписаниеМетода.Шаблон) Тогда + + ИмяМетода = НСтр("ru = 'Шаблон:'") + ОписаниеМетода.Шаблон; + + Иначе + + ИмяМетода = ОписаниеМетода.ИмяМетода; + + КонецЕсли; + КонецЕсли; ЗаписьЖурналаРегистрации(ИмяСобытия, УровеньЖурналаРегистрации.Информация, , - Строка(ЗаписьЗадания.УникальныйИдентификатор()), Комментарий + ЗаписьЗадания.ИмяМетода + ";" + - ?(ОбщегоНазначенияПовтИсп.ЭтоРазделеннаяКонфигурация() И ОбщегоНазначения.ЭтоРазделенныйОбъектМетаданных(ЗаписьЗадания.Метаданные().ПолноеИмя(), + Строка(ЗаписьЗадания.УникальныйИдентификатор()), Комментарий + ИмяМетода + ";" + + ?(ОбщегоНазначенияПовтИсп.ЭтоРазделеннаяКонфигурация() И ОбщегоНазначения.ЭтоРазделенныйОбъектМетаданных(ЗаписьЗадания.Метаданные().ПолноеИмя(), ОбщегоНазначенияПовтИсп.РазделительВспомогательныхДанных()), Формат(ЗаписьЗадания.ОбластьДанныхВспомогательныеДанные, "ЧН=0; ЧГ="), "-1")); @@ -1488,8 +1513,7 @@ Если ОбщегоНазначенияПовтИсп.ЭтоРазделеннаяКонфигурация() И ОбщегоНазначенияПовтИсп.ЭтоРазделенныйОбъектМетаданных( Задание.Метаданные().ПолноеИмя(), - ОбщегоНазначенияПовтИсп.РазделительВспомогательныхДанных() - ) Тогда + ОбщегоНазначенияПовтИсп.РазделительВспомогательныхДанных()) Тогда Если ЗначениеЗаполнено(Задание.Шаблон) Тогда // Задание по шаблону без расписания. ШаблонСообщения = НСтр("ru = 'Для шаблон заданий очереди %1 не найдено расписание'"); diff --git a/SSL/src/CommonModules/ПерепрефиксацияОбъектов/Module.bsl b/SSL/src/CommonModules/ПерепрефиксацияОбъектов/Module.bsl index 78a4fa7e6..a5a92d2aa 100644 --- a/SSL/src/CommonModules/ПерепрефиксацияОбъектов/Module.bsl +++ b/SSL/src/CommonModules/ПерепрефиксацияОбъектов/Module.bsl @@ -27,8 +27,7 @@ Знач НовыйПрефиксИБ, Знач НачалоПериодаПерепрефиксации = Неопределено, Знач ПредыдущийПрефиксИБ = Неопределено, - ОбъектовОбработано = 0 - ) Экспорт + ОбъектовОбработано = 0) Экспорт СлужебнаяУстановитьПрефиксИБИПерепрефиксоватьОбъектыСозданныеВЭтойИБ(НовыйПрефиксИБ, НачалоПериодаПерепрефиксации, ПредыдущийПрефиксИБ, ОбъектовОбработано); @@ -56,8 +55,7 @@ Знач НовыйПрефиксИБ, Знач НачалоПериодаПерепрефиксации = Неопределено, Знач ПредыдущийПрефиксИБ = Неопределено, - ОбъектовОбработано = 0 - ) Экспорт + ОбъектовОбработано = 0) Экспорт СлужебнаяУстановитьПрефиксИБИПерепрефиксоватьВсеОбъекты(НовыйПрефиксИБ, НачалоПериодаПерепрефиксации, ПредыдущийПрефиксИБ, ОбъектовОбработано); @@ -83,8 +81,7 @@ Знач НовыйПрефиксИБ, Знач НачалоПериодаПерепрефиксации = Неопределено, Знач ПредыдущийПрефиксИБ = Неопределено, - ОбъектовОбработано = 0 - ) Экспорт + ОбъектовОбработано = 0) Экспорт СлужебнаяУстановитьПрефиксИБИСоздатьОбъекты(НовыйПрефиксИБ, НачалоПериодаПерепрефиксации, ПредыдущийПрефиксИБ, ОбъектовОбработано); @@ -110,8 +107,7 @@ Знач НовыйПрефиксИБ, Знач НачалоПериодаПерепрефиксации = Неопределено, Знач ПредыдущийПрефиксИБ = Неопределено, - ОбъектовОбработано = 0 - ) Экспорт + ОбъектовОбработано = 0) Экспорт СлужебнаяУстановитьПрефиксИБИПерепрефиксоватьПоследниеОбъекты(НовыйПрефиксИБ, НачалоПериодаПерепрефиксации, ПредыдущийПрефиксИБ, ОбъектовОбработано); @@ -228,8 +224,7 @@ Знач НовыйПрефикс, Знач СДаты, Знач ПредыдущийПрефиксИнформационнойБазы = Неопределено, - Знач ОбрабатыватьВсеДанные = Ложь - ) + Знач ОбрабатыватьВсеДанные = Ложь) ПроверитьВозможностьУстановкиПрефикса(); @@ -276,7 +271,7 @@ ПолныйПрефиксОбъекта = ПолныйПрефикс(Выборка.Код); Если Не ПустаяСтрока(ПолныйПрефиксОбъекта) - И Найти(ПолныйПрефиксОбъекта, ПредыдущийПрефиксИнформационнойБазы) = 0 Тогда + И СтрНайти(ПолныйПрефиксОбъекта, ПредыдущийПрефиксИнформационнойБазы) = 0 Тогда Продолжить; // Обрабатываем объекты, созданные только в текущей информационной базе. КонецЕсли; @@ -364,8 +359,7 @@ Знач НовыйПрефикс, Знач СДаты, Знач ПредыдущийПрефиксИнформационнойБазы = Неопределено, - Знач ОбрабатыватьВсеДанные = Ложь - ) + Знач ОбрабатыватьВсеДанные = Ложь) ПроверитьВозможностьУстановкиПрефикса(); @@ -444,9 +438,7 @@ Знач НовыйПрефикс, Знач СДаты, Знач ПредыдущийПрефиксИнформационнойБазы = Неопределено, - Знач ОбрабатыватьПоследниеОбъекты = Ложь - - ) + Знач ОбрабатыватьПоследниеОбъекты = Ложь) ПроверитьВозможностьУстановкиПрефикса(); @@ -519,7 +511,7 @@ ПолныйПрефиксОбъекта = ПолныйПрефикс(Выборка.Код); Если Не ПустаяСтрока(ПолныйПрефиксОбъекта) - И Найти(ПолныйПрефиксОбъекта, ПредыдущийПрефиксИнформационнойБазы) = 0 Тогда + И СтрНайти(ПолныйПрефиксОбъекта, ПредыдущийПрефиксИнформационнойБазы) = 0 Тогда Продолжить; // Обрабатываем объекты, созданные только в текущей информационной базе. КонецЕсли; @@ -683,7 +675,7 @@ ПолныйПрефиксОбъекта = ПолныйПрефикс(Выборка.Код); Если Не ПустаяСтрока(ПолныйПрефиксОбъекта) - И Найти(ПолныйПрефиксОбъекта, ПредыдущийПрефиксИнформационнойБазы) = 0 Тогда + И СтрНайти(ПолныйПрефиксОбъекта, ПредыдущийПрефиксИнформационнойБазы) = 0 Тогда Продолжить; // Обрабатываем объекты, созданные только в текущей информационной базе. КонецЕсли; @@ -1041,12 +1033,11 @@ Если КоличествоЛидирующихНулей < 0 Тогда СтрокаСообщения = НСтр("ru = 'Преобразование %1 объекта %2 не может быть выполнено. - |Недостаточная длина %1. Минимальная длина %1 объекта должна составлять %3 символов.'"); - СтрокаСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(СтрокаСообщения, - ?(ЭтоДокумент, НСтр("ru = 'номера'"), НСтр("ru = 'кода'")), - Строка(Объект), - Строка(СтрДлина(НовыйПолныйПрефикс) + СтрДлина(КодСтрокой))); + |Недостаточная длина %1. Минимальная длина %1 объекта должна составлять %3 символов.'"); + СтрокаСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(СтрокаСообщения, ?(ЭтоДокумент, НСтр("ru = 'номера'"), НСтр("ru = 'кода'")), + Строка(Объект), Строка(СтрДлина(НовыйПолныйПрефикс) + СтрДлина(КодСтрокой))); ВызватьИсключение СтрокаСообщения; + КонецЕсли; ДлинаКодаСЛидирующимиНулями = ДлинаКода - СтрДлина(НовыйПолныйПрефикс); @@ -1079,12 +1070,11 @@ Если КоличествоЛидирующихНулей < 0 Тогда СтрокаСообщения = НСтр("ru = 'Преобразование %1 объекта %2 не может быть выполнено. - |Недостаточная длина %1. Минимальная длина %1 объекта должна составлять %3 символов.'"); - СтрокаСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(СтрокаСообщения, - ?(ЭтоДокумент, НСтр("ru = 'номера'"), НСтр("ru = 'кода'")), - Строка(Объект), - Строка(СтрДлина(НовыйПолныйПрефикс) + СтрДлина(БазовыйКод))); + |Недостаточная длина %1. Минимальная длина %1 объекта должна составлять %3 символов.'"); + СтрокаСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(СтрокаСообщения, ?(ЭтоДокумент, НСтр("ru = 'номера'"), НСтр("ru = 'кода'")), + Строка(Объект), Строка(СтрДлина(НовыйПолныйПрефикс) + СтрДлина(БазовыйКод))); ВызватьИсключение СтрокаСообщения; + КонецЕсли; СтрокаНулей = Лев("00000000000000000000000000000000000000000000000000", КоличествоЛидирующихНулей); @@ -1100,7 +1090,7 @@ Символ = Прав(Код, 1); - Если Найти("0123456789", Символ) > 0 Тогда + Если СтрНайти("0123456789", Символ) > 0 Тогда Результат = Символ + Результат; Иначе Прервать; @@ -1119,7 +1109,7 @@ Символ = Прав(Код, 1); - Если Найти("0123456789", Символ) = 0 Тогда + Если СтрНайти("0123456789", Символ) = 0 Тогда Прервать; КонецЕсли; @@ -1153,7 +1143,7 @@ Пока СтрДлина(Код) > 0 Цикл - Если Лев(Код, 1) <> "0" Тогда + Если Не СтрНачинаетсяС(Код, "0") Тогда Прервать; КонецЕсли; diff --git a/SSL/src/CommonModules/ПоискИУдалениеДублей/Module.bsl b/SSL/src/CommonModules/ПоискИУдалениеДублей/Module.bsl index fb98323b4..f714baad3 100644 --- a/SSL/src/CommonModules/ПоискИУдалениеДублей/Module.bsl +++ b/SSL/src/CommonModules/ПоискИУдалениеДублей/Module.bsl @@ -124,7 +124,7 @@ ПоискИУдалениеДублейПереопределяемый.ПриОпределенииОбъектовСПоискомДублей(СписокОбъектов); СведенияОбОбъекте = СписокОбъектов[ПервыйЭлемент.Метаданные().ПолноеИмя()]; - Если СведенияОбОбъекте <> Неопределено И (СведенияОбОбъекте = "" Или Найти(СведенияОбОбъекте, "ВозможностьЗаменыЭлементов") > 0) Тогда + Если СведенияОбОбъекте <> Неопределено И (СведенияОбОбъекте = "" Или СтрНайти(СведенияОбОбъекте, "ВозможностьЗаменыЭлементов") > 0) Тогда Возврат МодульМенеджера.ВозможностьЗаменыЭлементов(ПарыЗамен, ПараметрыЗамены); КонецЕсли; @@ -212,56 +212,4 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// Условное оформление. - -// Описание инструкции для добавления элемента условного оформления. -Функция ИнструкцияУсловногоОформления() Экспорт - Возврат Новый Структура("Отборы, Оформление, Поля", Новый Соответствие, Новый Соответствие, ""); -КонецФункции - -// Добавляет элемент условного оформления согласно описанию из инструкции. -Функция ДобавитьЭлементУсловногоОформления(Форма, ИнструкцияУсловногоОформления) Экспорт - ЭлементУсловногоОформленияКД = Форма.УсловноеОформление.Элементы.Добавить(); - ЭлементУсловногоОформленияКД.Использование = Истина; - - Для Каждого КлючИЗначение Из ИнструкцияУсловногоОформления.Отборы Цикл - ЭлементОтбораКД = ЭлементУсловногоОформленияКД.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); - ЭлементОтбораКД.ЛевоеЗначение = Новый ПолеКомпоновкиДанных(КлючИЗначение.Ключ); - Настройка = КлючИЗначение.Значение; - Тип = ТипЗнч(Настройка); - Если Тип = Тип("Структура") Тогда - ЭлементОтбораКД.ВидСравнения = ВидСравненияКомпоновкиДанных[Настройка.Вид]; - ЭлементОтбораКД.ПравоеЗначение = Настройка.Значение; - ИначеЕсли Тип = Тип("Массив") Тогда - ЭлементОтбораКД.ВидСравнения = ВидСравненияКомпоновкиДанных.ВСписке; - ЭлементОтбораКД.ПравоеЗначение = Настройка; - ИначеЕсли Тип = Тип("ВидСравненияКомпоновкиДанных") Тогда - ЭлементОтбораКД.ВидСравнения = Настройка; - Иначе - ЭлементОтбораКД.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно; - ЭлементОтбораКД.ПравоеЗначение = Настройка; - КонецЕсли; - ЭлементОтбораКД.Применение = ТипПримененияОтбораКомпоновкиДанных.Элементы; - КонецЦикла; - - Для Каждого КлючИЗначение Из ИнструкцияУсловногоОформления.Оформление Цикл - ЭлементУсловногоОформленияКД.Оформление.УстановитьЗначениеПараметра( - Новый ПараметрКомпоновкиДанных(КлючИЗначение.Ключ), - КлючИЗначение.Значение); - КонецЦикла; - - Поля = ИнструкцияУсловногоОформления.Поля; - Если ТипЗнч(Поля) = Тип("Строка") Тогда - Поля = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(Поля, ",", Истина, Истина); - КонецЕсли; - Для Каждого Поле Из Поля Цикл - ПолеКД = ЭлементУсловногоОформленияКД.Поля.Элементы.Добавить(); - ПолеКД.Использование = Истина; - ПолеКД.Поле = Новый ПолеКомпоновкиДанных(Поле); - КонецЦикла; - - Возврат ЭлементУсловногоОформленияКД; -КонецФункции - #КонецОбласти \ No newline at end of file diff --git a/SSL/src/CommonModules/ПоискИУдалениеДублейКлиент/Module.bsl b/SSL/src/CommonModules/ПоискИУдалениеДублейКлиент/Module.bsl index b6056dc87..b5c35b8f4 100644 --- a/SSL/src/CommonModules/ПоискИУдалениеДублейКлиент/Module.bsl +++ b/SSL/src/CommonModules/ПоискИУдалениеДублейКлиент/Module.bsl @@ -53,17 +53,32 @@ Если ПараметрыОткрытия <> Неопределено Тогда ЗаполнитьЗначенияСвойств(ПараметрыОткрытияФормы, ПараметрыОткрытия); КонецЕсли; - - ОткрытьФорму("Отчет.МестаИспользованияСсылок.Форма", ПараметрыФормы, - ПараметрыОткрытияФормы.Владелец, ПараметрыОткрытияФормы.Уникальность, ПараметрыОткрытияФормы.Окно, - ПараметрыОткрытияФормы.НавигационнаяСсылка, ПараметрыОткрытияФормы.ОписаниеОповещенияОЗакрытии, - ПараметрыОткрытияФормы.РежимОткрытияОкна - ); + + ОткрытьФорму( + "Отчет.МестаИспользованияСсылок.Форма", + ПараметрыФормы, + ПараметрыОткрытияФормы.Владелец, + ПараметрыОткрытияФормы.Уникальность, + ПараметрыОткрытияФормы.Окно, + ПараметрыОткрытияФормы.НавигационнаяСсылка, + ПараметрыОткрытияФормы.ОписаниеОповещенияОЗакрытии, + ПараметрыОткрытияФормы.РежимОткрытияОкна); КонецПроцедуры #КонецОбласти +#Область СлужебныйПрограммныйИнтерфейс + +//////////////////////////////////////////////////////////////////////////////// +// Обработчики условных вызовов в эту подсистему. + +Функция ИмяФормыОбработкиПоискИУдалениеДублей() Экспорт + Возврат "Обработка.ПоискИУдалениеДублей.Форма.ПоискДублей"; +КонецФункции + +#КонецОбласти + #Область СлужебныеПроцедурыИФункции Функция МассивСсылок(Знач Элементы) diff --git a/SSL/src/CommonModules/ПолнотекстовыйПоискСервер/Module.bsl b/SSL/src/CommonModules/ПолнотекстовыйПоискСервер/Module.bsl index 2fe16bc04..fe58736f4 100644 --- a/SSL/src/CommonModules/ПолнотекстовыйПоискСервер/Module.bsl +++ b/SSL/src/CommonModules/ПолнотекстовыйПоискСервер/Module.bsl @@ -76,11 +76,11 @@ // * Подсказка - Строка - текст подсказки. // Процедура ПриЗаполненииСпискаТекущихДел(ТекущиеДела) Экспорт - МодульТекущиеДелаСлужебный = ОбщегоНазначения.ОбщийМодуль("ТекущиеДелаСлужебный"); + МодульТекущиеДелаСервер = ОбщегоНазначения.ОбщийМодуль("ТекущиеДелаСервер"); Если Не ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.НастройкиПрограммы") Или Не Пользователи.ЭтоПолноправныйПользователь() Или Не ПолучитьФункциональнуюОпцию("ИспользоватьПолнотекстовыйПоиск") - Или МодульТекущиеДелаСлужебный.ДелоОтключено("ПолнотекстовыйПоискВДанных") Тогда + Или МодульТекущиеДелаСервер.ДелоОтключено("ПолнотекстовыйПоискВДанных") Тогда Возврат; КонецЕсли; @@ -131,6 +131,27 @@ КонецПроцедуры +//////////////////////////////////////////////////////////////////////////////// +// Обработчики условных вызовов. + +// См. описание одноименной процедуры в общем модуле РегламентныеЗаданияПереопределяемый. +// +Процедура ПриОпределенииЗависимостейРегламентныхЗаданий(Зависимости) Экспорт + Зависимость = Зависимости.Добавить(); + Зависимость.РегламентноеЗадание = Метаданные.РегламентныеЗадания.ОбновлениеИндексаППД; + Зависимость.ФункциональнаяОпция = Метаданные.ФункциональныеОпции.ИспользоватьПолнотекстовыйПоиск; + + Зависимость = Зависимости.Добавить(); + Зависимость.РегламентноеЗадание = Метаданные.РегламентныеЗадания.СлияниеИндексаППД; + Зависимость.ФункциональнаяОпция = Метаданные.ФункциональныеОпции.ИспользоватьПолнотекстовыйПоиск; +КонецПроцедуры + +Функция ИспользоватьПолнотекстовыйПоиск() Экспорт + + Возврат Метаданные.ФункциональныеОпции.ИспользоватьПолнотекстовыйПоиск; + +КонецФункции + #КонецОбласти #Область СлужебныеПроцедурыИФункции @@ -138,7 +159,7 @@ // Обработчик регламентного задания. Процедура ОбновлениеИндексаППДПоРасписанию() Экспорт - ОбщегоНазначения.ПриНачалеВыполненияРегламентногоЗадания(); + ОбщегоНазначения.ПриНачалеВыполненияРегламентногоЗадания(Метаданные.РегламентныеЗадания.ОбновлениеИндексаППД); ОбновлениеИндексаППД(); @@ -147,7 +168,7 @@ // Обработчик регламентного задания. Процедура СлияниеИндексаППДПоРасписанию() Экспорт - ОбщегоНазначения.ПриНачалеВыполненияРегламентногоЗадания(); + ОбщегоНазначения.ПриНачалеВыполненияРегламентногоЗадания(Метаданные.РегламентныеЗадания.СлияниеИндексаППД); СлияниеИндексаППД(); @@ -181,24 +202,14 @@ КонецФункции // Создает запись в журнале регистрации и сообщениях пользователю; -// Поддерживает до 3х параметров в комментарии при помощи функции. -// СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку. -// Поддерживает передачу информации об ошибке, подробное представление -// ошибки добавляется в комментарий записи в журнал регистрации. // // Параметры: // УровеньЖурнала - УровеньЖурналаРегистрации - Важность сообщения для администратора. -// КомментарийСПараметрами - Строка - Комментарий, который может содержать параметры %1, %2 и %3. +// КомментарийСПараметрами - Строка - Комментарий, который может содержать параметры %1. // ИнформацияОбОшибке - ИнформацияОбОшибке, Строка - Информация об ошибке, которая будет размещена после комментария. -// Параметр1 - Строка - Для подстановки в КомментарийСПараметрами вместо %1. -// Параметр2 - Строка - Для подстановки в КомментарийСПараметрами вместо %2. -// Параметр3 - Строка - Для подстановки в КомментарийСПараметрами вместо %3. +// Параметр - Строка - Для подстановки в КомментарийСПараметрами вместо %1. // -Процедура ЗаписьЖурнала(УровеньЖурнала = Неопределено, КомментарийСПараметрами = "", - ИнформацияОбОшибке = Неопределено, - Параметр1 = Неопределено, - Параметр2 = Неопределено, - Параметр3 = Неопределено) +Процедура ЗаписьЖурнала(УровеньЖурнала, КомментарийСПараметрами, ИнформацияОбОшибке = Неопределено, Параметр = Неопределено) // Определение уровня журнала регистрации на основе типа переданного сообщения об ошибке. Если ТипЗнч(УровеньЖурнала) <> Тип("УровеньЖурналаРегистрации") Тогда @@ -213,9 +224,8 @@ // Комментарий для журнала регистрации. ТекстДляЖурнала = КомментарийСПараметрами; - Если Параметр1 <> Неопределено Тогда - ТекстДляЖурнала = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - ТекстДляЖурнала, Параметр1, Параметр2, Параметр3); + Если Параметр <> Неопределено Тогда + ТекстДляЖурнала = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ТекстДляЖурнала, Параметр); КонецЕсли; Если ТипЗнч(ИнформацияОбОшибке) = Тип("ИнформацияОбОшибке") Тогда ТекстДляЖурнала = ТекстДляЖурнала + Символы.ПС + ПодробноеПредставлениеОшибки(ИнформацияОбОшибке); diff --git a/SSL/src/CommonModules/ПолнотекстовыйПоискСерверПереопределяемый/Module.bsl b/SSL/src/CommonModules/ПолнотекстовыйПоискСерверПереопределяемый/Module.bsl new file mode 100644 index 000000000..9d76bfe05 --- /dev/null +++ b/SSL/src/CommonModules/ПолнотекстовыйПоискСерверПереопределяемый/Module.bsl @@ -0,0 +1,35 @@ +//////////////////////////////////////////////////////////////////////////////// +// Подсистема "Полнотекстовый поиск". +// +//////////////////////////////////////////////////////////////////////////////// + +#Область ПрограммныйИнтерфейс + +// Изменяет дерево с разделами полнотекстового поиска. +// +// Параметры: +// ДеревоРазделов - ДеревоЗначений, содержащие области поиска. Колонки: +// Раздел - Строка - Представление раздела: подсистемы или объекта метаданных. +// Пометка - Булево, флаг выбора объекта пользователем. Если установить флаг в значение +// Истина, то раздел по умолчанию будет отмечен в настройках. +// ЭтоОбъектМетаданных - Булево. Устанавливается в значение Истина, если это дочерний узел дерева, +// который не является подсистемой. +// ПутьКДанным - Строка - Предназначена для определения точного адреса строки в дереве. +// ОбъектМД - СправочникСсылка.ИдентификаторыОбъектовМетаданных. Задается только для объектов метаданных, +// для подсистем остается пустым. +// Пример: +// НоваяОбластьПоиска = ДеревоРазделов.Строки.Добавить(); +// НоваяОбластьПоиска.Раздел = "МояОбластьПоиска"; +// +// МетаданныеПодраздела = НоваяОбластьПоиска.Строки.Добавить(); +// МетаданныеПодраздела.Раздел = "Валюты"; +// МетаданныеПодраздела.ЭтоОбъектМетаданных = Истина; +// МетаданныеПодраздела.ПутьКДанным = НоваяОбластьПоиска.Раздел + "," + МетаданныеПодраздела.Раздел; +// МетаданныеПодраздела.ОбъектМД = ОбщегоНазначения.ИдентификаторОбъектаМетаданных(Метаданные.Справочники.Валюты); +// +Процедура ПриПолученииРазделовПолнотекстовогоПоиска(ДеревоРазделов) Экспорт + +КонецПроцедуры + +#КонецОбласти + diff --git a/SSL/src/CommonModules/ПолнотекстовыйПоискСерверПереопределяемый/ПолнотекстовыйПоискСерверПереопределяемый.mdo b/SSL/src/CommonModules/ПолнотекстовыйПоискСерверПереопределяемый/ПолнотекстовыйПоискСерверПереопределяемый.mdo new file mode 100644 index 000000000..cc07a6d6a --- /dev/null +++ b/SSL/src/CommonModules/ПолнотекстовыйПоискСерверПереопределяемый/ПолнотекстовыйПоискСерверПереопределяемый.mdo @@ -0,0 +1,11 @@ +<?xml version="1.0" encoding="UTF-8"?> +<mdclass:CommonModule xmlns:mdclass="http://g5.1c.ru/v8/dt/metadata/mdclass" uuid="b7736108-89bd-44eb-89c1-8a5a774058f1"> + <name>ПолнотекстовыйПоискСерверПереопределяемый</name> + <synonym> + <key>ru</key> + <value>Полнотекстовый поиск сервер переопределяемый</value> + </synonym> + <server>true</server> + <externalConnection>true</externalConnection> + <clientOrdinaryApplication>true</clientOrdinaryApplication> +</mdclass:CommonModule> diff --git a/SSL/src/CommonModules/ПолучениеФайловИзИнтернета/Module.bsl b/SSL/src/CommonModules/ПолучениеФайловИзИнтернета/Module.bsl index df8cbe44e..f89659137 100644 --- a/SSL/src/CommonModules/ПолучениеФайловИзИнтернета/Module.bsl +++ b/SSL/src/CommonModules/ПолучениеФайловИзИнтернета/Module.bsl @@ -109,7 +109,7 @@ // Функция НастройкиПроксиНаКлиенте() Экспорт - Возврат ОбщегоНазначения.ХранилищеОбщихНастроекЗагрузить("НастройкаПроксиСервера"); + Возврат ОбщегоНазначения.ХранилищеОбщихНастроекЗагрузить("НастройкаПроксиСервера", ""); КонецФункции @@ -139,20 +139,4 @@ КонецФункции -// Устарела. Следует использовать НастройкиПроксиНаСервере. -// -Функция ПолучитьНастройкиПроксиНаСервере1СПредприятие() Экспорт - - Возврат НастройкиПроксиНаСервере(); - -КонецФункции - -// Устарела. Следует использовать НастройкиПроксиНаКлиенте. -// -Функция ПолучитьНастройкуПроксиСервера() Экспорт - - Возврат НастройкиПроксиНаКлиенте(); - -КонецФункции - #КонецОбласти diff --git a/SSL/src/CommonModules/ПолучениеФайловИзИнтернетаКлиентСервер/Module.bsl b/SSL/src/CommonModules/ПолучениеФайловИзИнтернетаКлиентСервер/Module.bsl index 4cd297ba5..f4ff2ffbf 100644 --- a/SSL/src/CommonModules/ПолучениеФайловИзИнтернетаКлиентСервер/Module.bsl +++ b/SSL/src/CommonModules/ПолучениеФайловИзИнтернетаКлиентСервер/Module.bsl @@ -21,7 +21,7 @@ #Иначе НастройкаПроксиСервера = ПолучениеФайловИзИнтернета.НастройкиПроксиНаСервере(); #КонецЕсли - Если Найти(URLИлиПротокол, "://") > 0 Тогда + Если СтрНайти(URLИлиПротокол, "://") > 0 Тогда Протокол = РазделитьURL(URLИлиПротокол).Протокол; Иначе Протокол = НРег(URLИлиПротокол); @@ -241,10 +241,9 @@ ИнформацияОбОшибке = ИнформацияОбОшибке(); СообщениеОбОшибке = НСтр("ru = 'Не удалось установить FTP-соединение с сервером %1:'") + Символы.ПС + "%2"; - ЗаписатьОшибкуВЖурналРегистрации(СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - СообщениеОбОшибке, ИмяСервера, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке))); - СообщениеОбОшибке = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(СообщениеОбОшибке, ИмяСервера, - КраткоеПредставлениеОшибки(ИнформацияОбОшибке)); + ЗаписатьОшибкуВЖурналРегистрации(СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(СообщениеОбОшибке, ИмяСервера, + ПодробноеПредставлениеОшибки(ИнформацияОбОшибке))); + СообщениеОбОшибке = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(СообщениеОбОшибке, ИмяСервера, КраткоеПредставлениеОшибки(ИнформацияОбОшибке)); Возврат СформироватьРезультат(Ложь, СообщениеОбОшибке); КонецПопытки; @@ -254,12 +253,10 @@ Соединение = Новый HTTPСоединение(ИмяСервера, Порт, ИмяПользователя, ПарольПользователя, Прокси, Таймаут, ЗащищенноеСоединение); Исключение ИнформацияОбОшибке = ИнформацияОбОшибке(); - СообщениеОбОшибке = НСтр("ru = 'Не удалось установить HTTP-соединение с сервером %1:'") + Символы.ПС + "%2"; - ЗаписатьОшибкуВЖурналРегистрации( - СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(СообщениеОбОшибке, ИмяСервера, - ПодробноеПредставлениеОшибки(ИнформацияОбОшибке))); - СообщениеОбОшибке = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(СообщениеОбОшибке, ИмяСервера, - КраткоеПредставлениеОшибки(ИнформацияОбОшибке)); + СообщениеОбОшибке = НСтр("ru = 'Не удалось установить HTTP-соединение с сервером %1: + |%2'"); + ЗаписатьОшибкуВЖурналРегистрации(СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(СообщениеОбОшибке, ИмяСервера, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке))); + СообщениеОбОшибке = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(СообщениеОбОшибке, ИмяСервера, КраткоеПредставлениеОшибки(ИнформацияОбОшибке)); Возврат СформироватьРезультат(Ложь, СообщениеОбОшибке); КонецПопытки; КонецЕсли; @@ -279,7 +276,14 @@ ЗаголовкиОтвета = Неопределено; Иначе - HTTPОтвет = ПолучитьHTTPОтвет(ПутьКФайлуНаСервере, ПутьДляСохранения, Соединение, Заголовки); + HTTPЗапрос = Новый HTTPЗапрос(ПутьКФайлуНаСервере, Заголовки); + HTTPЗапрос.Заголовки.Вставить("Accept-Charset", "utf-8"); + HTTPОтвет = Соединение.Получить(HTTPЗапрос, ПутьДляСохранения); + + Если HTTPОтвет.КодСостояния = 301 Тогда + НовыйURL = HTTPОтвет.Заголовки["Location"]; + Возврат ПолучитьФайлИзИнтернет(НовыйURL, НастройкаСохранения, НастройкаСоединения, НастройкиПрокси, ЗаписыватьОшибку); + КонецЕсли; Если HTTPОтвет.КодСостояния < 200 Или HTTPОтвет.КодСостояния >= 300 Тогда ФайлОтвета = Новый ЧтениеТекста(ПутьДляСохранения, КодировкаТекста.UTF8); @@ -295,8 +299,7 @@ СообщениеОбОшибке = НСтр("ru = 'Не удалось получить файл с сервера %1:'") + Символы.ПС + "%2"; Если ЗаписыватьОшибку Тогда ЗаписатьОшибкуВЖурналРегистрации( - СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(СообщениеОбОшибке, ИмяСервера, - ПодробноеПредставлениеОшибки(ИнформацияОбОшибке))); + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(СообщениеОбОшибке, ИмяСервера, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке))); КонецЕсли; Возврат СформироватьРезультат(Ложь, КраткоеПредставлениеОшибки(ИнформацияОбОшибке)); КонецПопытки; @@ -315,22 +318,6 @@ КонецФункции -Функция ПолучитьHTTPОтвет(ПутьКФайлуНаСервере, ПутьДляСохранения, Соединение, Заголовки) - - HTTPЗапрос = Новый HTTPЗапрос(ПутьКФайлуНаСервере, Заголовки); - HTTPЗапрос.Заголовки.Вставить("Accept-Charset", "utf-8"); - HTTPОтвет = Соединение.Получить(HTTPЗапрос, ПутьДляСохранения); - - Если HTTPОтвет.КодСостояния = 301 Тогда - ПутьКФайлуНаСервере = HTTPОтвет.Заголовки["Location"]; - HTTPОтвет = ПолучитьHTTPОтвет(ПутьКФайлуНаСервере, ПутьДляСохранения, Соединение, Заголовки); - КонецЕсли; - - Возврат HTTPОтвет; - -КонецФункции - - // Возвращает прокси по настройкам НастройкаПроксиСервера для заданного протокола Протокол. // // Параметры: @@ -378,14 +365,14 @@ КонецЕсли; Если ТипЗнч(ПроксиПоПротоколу) = Тип("Структура") Тогда - Прокси.Установить(Протокол, ПроксиПоПротоколу.Адрес, ПроксиПоПротоколу.Порт); + Прокси.Установить(Протокол, ПроксиПоПротоколу.Адрес, ПроксиПоПротоколу.Порт, + НастройкаПроксиСервера["Пользователь"], НастройкаПроксиСервера["Пароль"]); Иначе - Прокси.Установить(Протокол, НастройкаПроксиСервера["Сервер"], НастройкаПроксиСервера["Порт"]); + Прокси.Установить(Протокол, НастройкаПроксиСервера["Сервер"], НастройкаПроксиСервера["Порт"], + НастройкаПроксиСервера["Пользователь"], НастройкаПроксиСервера["Пароль"]); КонецЕсли; Прокси.НеИспользоватьПроксиДляЛокальныхАдресов = НастройкаПроксиСервера["НеИспользоватьПроксиДляЛокальныхАдресов"]; - Прокси.Пользователь = НастройкаПроксиСервера["Пользователь"]; - Прокси.Пароль = НастройкаПроксиСервера["Пароль"]; АдресаИсключений = НастройкаПроксиСервера.Получить("НеИспользоватьПроксиДляАдресов"); Если ТипЗнч(АдресаИсключений) = Тип("Массив") Тогда @@ -433,7 +420,7 @@ // Параметры: // СообщениеОбОшибке - строка сообщение об ошибке. // -Процедура ЗаписатьОшибкуВЖурналРегистрации(Знач СообщениеОбОшибке) Экспорт +Процедура ЗаписатьОшибкуВЖурналРегистрации(Знач СообщениеОбОшибке) #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда ЗаписьЖурналаРегистрации( diff --git a/SSL/src/CommonModules/ПолучениеФайловИзИнтернетаСлужебный/Module.bsl b/SSL/src/CommonModules/ПолучениеФайловИзИнтернетаСлужебный/Module.bsl index 31093c7f4..971523571 100644 --- a/SSL/src/CommonModules/ПолучениеФайловИзИнтернетаСлужебный/Module.bsl +++ b/SSL/src/CommonModules/ПолучениеФайловИзИнтернетаСлужебный/Module.bsl @@ -16,7 +16,7 @@ СерверныеОбработчики["СтандартныеПодсистемы.ОбновлениеВерсииИБ\ПриДобавленииОбработчиковОбновления"].Добавить( "ПолучениеФайловИзИнтернетаСлужебный"); - СерверныеОбработчики["СтандартныеПодсистемы.БазоваяФункциональность\ПриДобавленииПараметровРаботыКлиентскойЛогикиСтандартныхПодсистем"].Добавить( + СерверныеОбработчики["СтандартныеПодсистемы.БазоваяФункциональность\ПриДобавленииПараметровРаботыКлиента"].Добавить( "ПолучениеФайловИзИнтернетаСлужебный"); СерверныеОбработчики["СтандартныеПодсистемы.БазоваяФункциональность\ПриВключенииИспользованияПрофилейБезопасности"].Добавить( @@ -47,9 +47,9 @@ // Параметры: // Параметры - Структура - структура параметров. // -Процедура ПриДобавленииПараметровРаботыКлиентскойЛогикиСтандартныхПодсистем(Параметры) Экспорт +Процедура ПриДобавленииПараметровРаботыКлиента(Параметры) Экспорт - Параметры.Вставить("НастройкиПроксиСервера", ПолучениеФайловИзИнтернета.ПолучитьНастройкуПроксиСервера()); + Параметры.Вставить("НастройкиПроксиСервера", ПолучениеФайловИзИнтернета.НастройкиПроксиНаКлиенте()); КонецПроцедуры @@ -96,7 +96,7 @@ Для Каждого ПользовательИБ Из МассивПользователейИБ Цикл НастройкаПроксиСервера = ОбщегоНазначения.ХранилищеОбщихНастроекЗагрузить( - "НастройкаПроксиСервера", , , , ПользовательИБ.Имя); + "НастройкаПроксиСервера", "", , , ПользовательИБ.Имя); Если ТипЗнч(НастройкаПроксиСервера) = Тип("Соответствие") Тогда @@ -111,7 +111,7 @@ КонецЕсли; Если СохранитьНастройкиПользователя Тогда ОбщегоНазначения.ХранилищеОбщихНастроекСохранить( - "НастройкаПроксиСервера", , НастройкаПроксиСервера, , ПользовательИБ.Имя); + "НастройкаПроксиСервера", "", НастройкаПроксиСервера, , ПользовательИБ.Имя); КонецЕсли; КонецЕсли; diff --git a/SSL/src/CommonModules/Пользователи/Module.bsl b/SSL/src/CommonModules/Пользователи/Module.bsl index d26c1703c..7dc17091c 100644 --- a/SSL/src/CommonModules/Пользователи/Module.bsl +++ b/SSL/src/CommonModules/Пользователи/Module.bsl @@ -148,7 +148,7 @@ Возврат Ложь; КонецЕсли; - МассивИменРолей = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(ИменаРолей); + МассивИменРолей = СтрРазделить(ИменаРолей, ",", Ложь); Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.УправлениеДоступом") Тогда МодульУправлениеДоступомСлужебный = ОбщегоНазначения.ОбщийМодуль("УправлениеДоступомСлужебный"); @@ -227,7 +227,7 @@ // Процедуры и функции, используемые в работе элементов управляемых форм. // Возвращает список пользователей, групп пользователей, внешних пользователей и -// групп внешних пользователей не помеченных на удаление. +// групп внешних пользователей. // Используется в обработчиках событий ОкончаниеВводаТекста и АвтоПодбор. // // Параметры: @@ -261,7 +261,7 @@ | ЛОЖЬ"; Если НЕ БезПользователей Тогда - Запрос.Текст = Запрос.Текст + " ОБЪЕДИНИТЬ ВСЕ " + + ТекстЗапроса = "ВЫБРАТЬ | Пользователи.Ссылка, | Пользователи.Наименование, @@ -269,8 +269,7 @@ |ИЗ | Справочник.Пользователи КАК Пользователи |ГДЕ - | НЕ Пользователи.ПометкаУдаления - | И Пользователи.Наименование ПОДОБНО &Текст + | Пользователи.Наименование ПОДОБНО &Текст | И Пользователи.Недействителен = ЛОЖЬ | И Пользователи.Служебный = ЛОЖЬ | @@ -284,8 +283,9 @@ | Справочник.ГруппыПользователей КАК ГруппыПользователей |ГДЕ | &ВключаяГруппы - | И НЕ ГруппыПользователей.ПометкаУдаления | И ГруппыПользователей.Наименование ПОДОБНО &Текст"; + + Запрос.Текст = Запрос.Текст + " ОБЪЕДИНИТЬ ВСЕ " + ТекстЗапроса; КонецЕсли; Если ТипЗнч(ВключаяВнешнихПользователей) <> Тип("Булево") Тогда @@ -295,7 +295,7 @@ И ПравоДоступа("Чтение", Метаданные.Справочники.ВнешниеПользователи); Если ВключаяВнешнихПользователей Тогда - Запрос.Текст = Запрос.Текст + " ОБЪЕДИНИТЬ ВСЕ " + + ТекстЗапроса = "ВЫБРАТЬ | ВнешниеПользователи.Ссылка, | ВнешниеПользователи.Наименование, @@ -303,8 +303,7 @@ |ИЗ | Справочник.ВнешниеПользователи КАК ВнешниеПользователи |ГДЕ - | (НЕ ВнешниеПользователи.ПометкаУдаления) - | И ВнешниеПользователи.Наименование ПОДОБНО &Текст + | ВнешниеПользователи.Наименование ПОДОБНО &Текст | И ВнешниеПользователи.Недействителен = ЛОЖЬ | |ОБЪЕДИНИТЬ ВСЕ @@ -317,8 +316,9 @@ | Справочник.ГруппыВнешнихПользователей КАК ГруппыВнешнихПользователей |ГДЕ | &ВключаяГруппы - | И (НЕ ГруппыВнешнихПользователей.ПометкаУдаления) | И ГруппыВнешнихПользователей.Наименование ПОДОБНО &Текст"; + + Запрос.Текст = Запрос.Текст + " ОБЪЕДИНИТЬ ВСЕ " + ТекстЗапроса; КонецЕсли; Выборка = Запрос.Выполнить().Выбрать(); @@ -470,62 +470,99 @@ // существующим пользователем в справочнике Пользователи. // // Параметры: -// ПользовательИБ - ПользовательИнформационнойБазы - используется, когда нужно сопоставить +// ПользовательИБ - Неопределено - создать первого администратора, если не существует. +// - ПользовательИнформационнойБазы - используется, когда нужно сопоставить // существующего администратора с новым или существующим пользователем // в справочнике Пользователи. // // Возвращаемое значение: -// Неопределено - пользователь в справочнике, с которым сопоставлен пользователь ИБ -// с административными правами, уже существует. -// СправочникСсылка.Пользователи - пользователь в справочнике, с которым был сопоставлен первый администратор или -// администратор, указанный в параметре ПользовательИБ. +// Неопределено - первый администратор уже существует. +// СправочникСсылка.Пользователи - пользователь в справочнике, с которым сопоставлен созданный +// первый администратор или указанный существующий. // Функция СоздатьАдминистратора(ПользовательИБ = Неопределено) Экспорт + Если Не ОбщегоНазначенияПовтИсп.ДоступноИспользованиеРазделенныхДанных() Тогда + ВызватьИсключение НСтр("ru = 'Справочник Пользователи недоступен в неразделенном режиме.'"); + КонецЕсли; + РазделениеВключено = ОбщегоНазначенияПовтИсп.РазделениеВключено(); + УстановитьПривилегированныйРежим(Истина); - // Добавление администратора (администратор системы - полные права). + // Добавление администратора. Если ПользовательИБ = Неопределено Тогда - - Если ОбщегоНазначенияПовтИсп.РазделениеВключено() Тогда - Возврат Неопределено; - КонецЕсли; - - // Если существует пользователь с правом администрирование, - // тогда первый администратор уже создан и его не требуется создавать. - ПользовательИБ = Неопределено; - ПользователиИБ = ПользователиИнформационнойБазы.ПолучитьПользователей(); - Для каждого ТекущийПользовательИБ Из ПользователиИБ Цикл - Если ЭтоПолноправныйПользователь(ТекущийПользовательИБ,, Ложь) Тогда - Возврат Неопределено; - КонецЕсли; - КонецЦикла; - Если ПользовательИБ = Неопределено Тогда + Если ПользователиИБ.Количество() = 0 Тогда + Если РазделениеВключено Тогда + ВызватьИсключение + НСтр("ru = 'Невозможно автоматически создать первого администратора области данных.'"); + КонецЕсли; ПользовательИБ = ПользователиИнформационнойБазы.СоздатьПользователя(); ПользовательИБ.Имя = "Администратор"; ПользовательИБ.ПолноеИмя = ПользовательИБ.Имя; ПользовательИБ.Роли.Очистить(); ПользовательИБ.Роли.Добавить(Метаданные.Роли.ПолныеПрава); - - Если НЕ ОбщегоНазначенияПовтИсп.РазделениеВключено() Тогда - РольАдминистратораСистемы = РольАдминистратораСистемы(); - - Если НЕ ПользовательИБ.Роли.Содержит(РольАдминистратораСистемы) Тогда - ПользовательИБ.Роли.Добавить(РольАдминистратораСистемы); - КонецЕсли; + РольАдминистратораСистемы = РольАдминистратораСистемы(); + Если НЕ ПользовательИБ.Роли.Содержит(РольАдминистратораСистемы) Тогда + ПользовательИБ.Роли.Добавить(РольАдминистратораСистемы); КонецЕсли; ПользовательИБ.Записать(); + Иначе + // Если существует пользователь с правами администратора, + // тогда первый администратор уже создан и его не требуется создавать. + Для Каждого ТекущийПользовательИБ Из ПользователиИБ Цикл + Если ТекущийПользовательИБ.Роли.Содержит(Метаданные.Роли.ПолныеПрава) + И (ТекущийПользовательИБ.Роли.Содержит(РольАдминистратораСистемы(Истина)) + ИЛИ РазделениеВключено) Тогда + Возврат Неопределено; // Первый администратор уже создан. + КонецЕсли; + КонецЦикла; + // Первый администратор создан некорректно. + Если Метаданные.Роли.ПолныеПрава = РольАдминистратораСистемы(Истина) Тогда + ТекстОшибки = + НСтр("ru = 'Список пользователей информационной базы не пустой, однако + |не удалось найти ни одного пользователя с ролью Полные права. + | + |Вероятно, пользователи создавались в конфигураторе. + |Требуется назначить роль Полные права хотя бы одному пользователю.'"); + Иначе + ТекстОшибки = + НСтр("ru = 'Список пользователей информационной базы не пустой, однако не удалось + |найти ни одного пользователя с ролями Полные права и Администратор системы. + | + |Вероятно, пользователи создавались в конфигураторе. + |Требуется назначить роли Полные права и Администратор системы хотя бы одному пользователю.'"); + КонецЕсли; + ВызватьИсключение ТекстОшибки; КонецЕсли; Иначе - Если НЕ ПользовательИБ.Роли.Содержит(Метаданные.Роли.ПолныеПрава) - ИЛИ НЕ ПользовательИБ.Роли.Содержит(Пользователи.РольАдминистратораСистемы()) Тогда - - Возврат Неопределено; + Если НЕ (ПользовательИБ.Роли.Содержит(Метаданные.Роли.ПолныеПрава) + И (ПользовательИБ.Роли.Содержит(РольАдминистратораСистемы(Истина)) + ИЛИ РазделениеВключено)) Тогда + + Если Метаданные.Роли.ПолныеПрава = РольАдминистратораСистемы(Истина) Тогда + ТекстОшибки = + НСтр("ru = 'Невозможно создать пользователя в справочнике для пользователя + |информационной базы ""%1"", + |так как у него нет роли Полные права. + | + |Вероятно, пользователь был создан в конфигураторе. Для автоматического + |создания пользователя в справочнике требуется назначить ему роль Полные права.'"); + Иначе + ТекстОшибки = + НСтр("ru = 'Невозможно создать пользователя в справочнике для пользователя + |информационной базы ""%1"", + |так как у него нет ролей Полные права и Администратор системы. + | + |Вероятно, пользователь был создан в конфигураторе. + |Для автоматического создания пользователя в справочнике требуется + |назначить ему роли Полные права и Администратор системы.'"); + КонецЕсли; + ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ТекстОшибки, Строка(ПользовательИБ)); КонецЕсли; - НайтиНеоднозначныхПользователейИБ(, ПользовательИБ.УникальныйИдентификатор); + НайтиНеоднозначныхПользователейИБ(Неопределено, ПользовательИБ.УникальныйИдентификатор); КонецЕсли; Если ПользователиСлужебный.ПользовательПоИдентификаторуСуществует( @@ -781,7 +818,8 @@ Если ПользовательИБ = Неопределено Тогда ОписаниеОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Пользователь информационной базы ""%1"" не найден.'"), Идентификатор); + НСтр("ru = 'Пользователь информационной базы ""%1"" не найден.'"), + Идентификатор); Возврат Ложь; КонецЕсли; @@ -814,6 +852,11 @@ // // ОписаниеОшибки - Строка - содержит описание ошибки, если чтение не удалось. // +// Пользователь - СправочникСсылка.Пользователи, СправочникОбъект.Пользователи +// СправочникСсылка.ВнешниеПользователи, СправочникОбъект.ВнешниеПользователи +// Неопределено - ссылка или объект пользователя в справочнике, если существует. +// - ПользовательИнформационнойБазы - (Возвращаемое значение), если запись удалась. +// // Возвращаемое значение: // Булево - если Истина, тогда пользователь записан, иначе см. ОписаниеОшибки. // @@ -821,7 +864,7 @@ Знач ОбновляемыеСвойства, Знач СоздатьНового = Ложь, ОписаниеОшибки = "", - ПользовательИБ = Неопределено) Экспорт + Пользователь = Неопределено) Экспорт ПользовательИБ = Неопределено; СтарыеСвойства = Неопределено; @@ -889,6 +932,7 @@ Попытка ПользователиСлужебный.ЗаписатьПользователяИнформационнойБазы(ПользовательИБ); Исключение + ИнформацияОбОшибке = ИнформацияОбОшибке(); ОписаниеОшибки = ОписаниеОшибкиПриЗаписиПользователяИБ( НСтр("ru = 'При записи пользователя информационной базы |%1 произошла ошибка: @@ -896,7 +940,7 @@ |""%2"".'"), ПользовательИБ.Имя, ?(ПредварительноеЧтение, СтарыеСвойства.УникальныйИдентификатор, Неопределено), - ИнформацияОбОшибке()); + ИнформацияОбОшибке); Возврат Ложь; КонецПопытки; @@ -910,10 +954,11 @@ ПользователиПереопределяемый.ПриЗаписиПользователяИнформационнойБазы(СтарыеСвойства, НовыеСвойства); Если СоздатьНового = Неопределено ИЛИ СоздатьНового = Истина Тогда - ПользователиСлужебный.УстановитьНачальныеНастройки(НовыеСвойства.Имя); + ПользователиСлужебный.УстановитьНачальныеНастройки(НовыеСвойства.Имя, Пользователь); КонецЕсли; ОбновляемыеСвойства.Вставить("УникальныйИдентификатор", ПользовательИБ.УникальныйИдентификатор); + Пользователь = ПользовательИБ; Возврат Истина; КонецФункции @@ -1047,7 +1092,7 @@ ИначеЕсли Свойство = "РежимЗапуска" Тогда ПолноеИмяЗначения = ПолучитьПолноеИмяПредопределенногоЗначения(Источник.РежимЗапуска); - ЗначениеСвойства = Сред(ПолноеИмяЗначения, Найти(ПолноеИмяЗначения, ".") + 1); + ЗначениеСвойства = Сред(ПолноеИмяЗначения, СтрНайти(ПолноеИмяЗначения, ".") + 1); ИначеЕсли Свойство = "Язык" Тогда ЗначениеСвойства = ?(Источник.Язык = Неопределено, @@ -1169,7 +1214,7 @@ |превышает длину 64 символа.'"), ЗначениеСвойства); - ИначеЕсли Найти(ЗначениеСвойства, ":") > 0 Тогда + ИначеЕсли СтрНайти(ЗначениеСвойства, ":") > 0 Тогда ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Ошибка записи пользователя информационной базы |Имя (для входа): ""%1"" @@ -1232,7 +1277,7 @@ Если ПользовательИБ = Неопределено Тогда Возврат Неопределено; Иначе - НайтиНеоднозначныхПользователейИБ(, ПользовательИБ.УникальныйИдентификатор); + НайтиНеоднозначныхПользователейИБ(Неопределено, ПользовательИБ.УникальныйИдентификатор); Возврат Справочники.Пользователи.НайтиПоРеквизиту( "ИдентификаторПользователяИБ", @@ -1402,15 +1447,18 @@ ИмяДляВхода = ТекущийПользовательИБ.Имя; КонецЕсли; - ОписаниеОшибки = ОписаниеОшибки - + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - ?(ИдентификаторПользователяСервиса, - НСтр("ru = 'Пользователю сервиса с идентификатором ""%2"" + Если ИдентификаторПользователяСервиса Тогда + ОписаниеОшибки = ОписаниеОшибки + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Пользователю сервиса с идентификатором ""%1"" |соответствует более одного элемента в справочнике Пользователи:'"), + ТекущийНеоднозначныйИдентификатор); + Иначе + ОписаниеОшибки = ОписаниеОшибки + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Пользователю ИБ ""%1"" с идентификатором ""%2"" - |соответствует более одного элемента в справочнике Пользователи:'") ), + |соответствует более одного элемента в справочнике Пользователи:'"), ИмяДляВхода, ТекущийНеоднозначныйИдентификатор); + КонецЕсли; КонецЕсли; КонецЕсли; @@ -1420,18 +1468,16 @@ Если НЕ НовыйУникальныйИдентификатор Тогда ОписаниеОшибки = ОписаниеОшибки + ","; КонецЕсли; - ОписаниеОшибки = ОписаниеОшибки + ОписаниеОшибки = ОписаниеОшибки + Символы.ПС + " " + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = ' - | ""%1"" с идентификатором ссылки %2'"), + НСтр("ru = '""%1"" с идентификатором ссылки %2'"), Строка.Пользователь, Строка.Пользователь.УникальныйИдентификатор()); КонецЕсли; КонецЦикла; Если ТипЗнч(НайденныеИдентификаторы) <> Тип("Соответствие") Тогда - ОписаниеОшибки = ОписаниеОшибки + "." + Символы.ПС; - ВызватьИсключение ОписаниеОшибки; + ВызватьИсключение ОписаниеОшибки + "." + Символы.ПС; КонецЕсли; КонецПроцедуры @@ -1450,6 +1496,22 @@ КонецФункции +//////////////////////////////////////////////////////////////////////////////// +// Прочие процедуры и функции. + +// Возвращает Истина, если для конфигурации возможно использование настроек входа, +// общих для пользователей (сложность пароля, смена пароля, ограничения +// срока работы в программе и другие). +// +// Возвращаемое значение: +// Булево. +// +Функция ОбщиеНастройкиВходаИспользуются() Экспорт + + Возврат ПользователиСлужебныйПовтИсп.Настройки().ОбщиеНастройкиВхода; + +КонецФункции + #КонецОбласти #Область СлужебныеПроцедурыИФункции @@ -1489,24 +1551,16 @@ УровеньЖурналаРегистрации.Ошибка, , , - СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - ШаблонОшибки, - """" + ИмяДляВхода + """ (" - + ?(ЗначениеЗаполнено(ИдентификаторПользователяИБ), - НСтр("ru = 'Новый'"), - Строка(ИдентификаторПользователяИБ)) - + ")", - ?(ИнформацияОбОшибке = Неопределено, - "", - ПодробноеПредставлениеОшибки(ИнформацияОбОшибке)))); + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонОшибки, + """" + ИмяДляВхода + """ (" + ?(ЗначениеЗаполнено(ИдентификаторПользователяИБ), + НСтр("ru = 'Новый'"), Строка(ИдентификаторПользователяИБ)) + ")", + ?(ТипЗнч(ИнформацияОбОшибке) = Тип("ИнформацияОбОшибке"), + ПодробноеПредставлениеОшибки(ИнформацияОбОшибке), Строка(ИнформацияОбОшибке)))); КонецЕсли; - Возврат СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - ШаблонОшибки, - """" + ИмяДляВхода + """", - ?(ИнформацияОбОшибке = Неопределено, - "", - КраткоеПредставлениеОшибки(ИнформацияОбОшибке))); + Возврат СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонОшибки, """" + ИмяДляВхода + """", + ?(ТипЗнч(ИнформацияОбОшибке) = Тип("ИнформацияОбОшибке"), + КраткоеПредставлениеОшибки(ИнформацияОбОшибке), Строка(ИнформацияОбОшибке))); КонецФункции diff --git a/SSL/src/CommonModules/ПользователиПереопределяемый/Module.bsl b/SSL/src/CommonModules/ПользователиПереопределяемый/Module.bsl index 4050e448f..81bb59e9b 100644 --- a/SSL/src/CommonModules/ПользователиПереопределяемый/Module.bsl +++ b/SSL/src/CommonModules/ПользователиПереопределяемый/Module.bsl @@ -5,13 +5,20 @@ #Область ПрограммныйИнтерфейс -// Переопределяет стандартный способ установки ролей пользователям ИБ. +// Переопределяет стандартное поведение подсистемы Пользователи. // // Параметры: -// Запрет - Булево - если установить Истина, изменение ролей -// блокируется (в том числе для администратора). +// Настройки - Структура - со свойствами: +// * ОбщиеНастройкиВхода - Булево - начальное значение Истина, если установить Ложь, +// тогда в панели администрирования "Настройки прав и пользователей" возможность +// открытия формы настроек входа будет скрыта, как и настройка ограничения срока действия +// в карточках пользователя и внешнего пользователя. Для базовых версий конфигурации всегда Ложь. // -Процедура ИзменитьЗапретРедактированияРолей(Запрет) Экспорт +// * РедактированиеРолей - Булево - начальное значение Истина, если установить Ложь, тогда +// интерфейс изменения ролей в карточках пользователя, внешнего пользователя и +// группы внешних пользователей будет скрыт (в том числе для администратора). +// +Процедура ПриОпределенииНастроек(Настройки) Экспорт КонецПроцедуры @@ -67,6 +74,8 @@ // * НастройкиТакси - НастройкиИнтерфейсаКлиентскогоПриложения - настройки интерфейса клиентского приложения // (состав и размещение панелей). // +// * ЭтоВнешнийПользователь - Булево - если Истина, то это внешний пользователь. +// Процедура ПриУстановкеНачальныхНастроек(НачальныеНастройки) Экспорт @@ -98,7 +107,9 @@ // Сохраняет настройки переданному пользователю. // // Параметры: -// Настройки - СписокЗначений - список значений сохраняемых настроек. +// Настройки - Структура - структура с полями: +// * ИдентификаторНастройки - Строка - строковый идентификатор копируемой настройки. +// * ЗначениеНастройки - СписокЗначений - список значений копируемых настроек. // СведенияОПользователе - Структура - строковое и ссылочное представление пользователя. // * ПользовательСсылка - СправочникСсылка.Пользователи - пользователь, // которому нужно скопировать настройку. @@ -114,7 +125,9 @@ // Очищает настройки переданному пользователю. // // Параметры: -// Настройки - СписокЗначений - список значений очищаемых настроек. +// Настройки - Структура - структура с полями: +// * ИдентификаторНастройки - Строка - строковый идентификатор очищаемой настройки. +// * ЗначениеНастройки - СписокЗначений - список значений очищаемых настроек. // СведенияОПользователе - Структура - строковое и ссылочное представление пользователя. // * ПользовательСсылка - СправочникСсылка.Пользователи - пользователь, // которому нужно очистить настройку. diff --git a/SSL/src/CommonModules/ПользователиСлужебный/Module.bsl b/SSL/src/CommonModules/ПользователиСлужебный/Module.bsl index 75e266799..c1b2fc495 100644 --- a/SSL/src/CommonModules/ПользователиСлужебный/Module.bsl +++ b/SSL/src/CommonModules/ПользователиСлужебный/Module.bsl @@ -11,72 +11,16 @@ // Объявляет служебные события подсистемы Пользователи: // // Серверные события: -// ПриОпределенииТекстаВопросаПередЗаписьюПервогоАдминистратора, -// ПриЗаписиАдминистратора. +// ПриСозданииПользователяВМоментВхода, +// ПриАвторизацииНовогоПользователяИБ, +// ПриНачалеОбработкиПользователяИБ, +// ПередЗаписьюПользователяИБ. // // См. описание этой же процедуры в модуле СтандартныеПодсистемыСервер. Процедура ПриДобавленииСлужебныхСобытий(КлиентскиеСобытия, СерверныеСобытия) Экспорт // СЕРВЕРНЫЕ СОБЫТИЯ. - // Переопределяет стандартный способ установки ролей пользователям ИБ. - // - // Параметры: - // Запрет - Булево. Если установить Истина, изменение ролей - // блокируется (в том числе для администратора). - // - // Синтаксис: - // Процедура ПриОпределенииЗапретаРедактированияРолей(Запрет) Экспорт - // - // (То же, что ПользователиПереопределяемый.ИзменитьЗапретРедактированияРолей). - СерверныеСобытия.Добавить("СтандартныеПодсистемы.Пользователи\ПриОпределенииЗапретаРедактированияРолей"); - - // Переопределяет поведение формы пользователя, формы внешнего пользователя и - // формы группы внешних пользователей. - // - // Параметры: - // Ссылка - СправочникСсылка.Пользователи, - // СправочникСсылка.ВнешниеПользователи, - // СправочникСсылка.ГруппыВнешнихПользователей - // ссылка на пользователя, внешнего пользователя или группу внешних пользователей - // при создании формы. - // - // ДействияВФорме - Структура (со свойствами типа Строка): - // Роли = "", "Просмотр", "Редактирование" - // КонтактнаяИнформация = "", "Просмотр", "Редактирование" - // СвойстваПользователяИБ = "", "ПросмотрВсех", "РедактированиеВсех", РедактированиеСвоих" - // СвойстваЭлемента = "", "Просмотр", "Редактирование" - // - // Для групп внешних пользователей КонтактнаяИнформация и СвойстваПользователяИБ не существуют. - // - // Синтаксис: - // Процедура ПриОпределенииДействийВФорме(Ссылка, ДействияВФорме) Экспорт - // - // (То же, что ПользователиПереопределяемый.ИзменитьДействияВФорме). - СерверныеСобытия.Добавить("СтандартныеПодсистемы.Пользователи\ПриОпределенииДействийВФорме"); - - // Переопределяет текст вопроса перед записью первого администратора. - // Вызывается из обработчика ПередЗаписью формы пользователя. - // Вызов выполняется если установлен ЗапретРедактированияРолей() и - // количество пользователей информационной базы равно нулю. - // - // Синтаксис: - // Процедура ПриОпределенииТекстаВопросаПередЗаписьюПервогоАдминистратора(ТекстВопроса) Экспорт - // - СерверныеСобытия.Добавить( - "СтандартныеПодсистемы.Пользователи\ПриОпределенииТекстаВопросаПередЗаписьюПервогоАдминистратора"); - - // Доопределяет действия при записи пользователя, когда он записывается - // совместно с пользователем ИБ, у которого есть роль ПолныеПрава. - // - // Параметры: - // Пользователь - СправочникСсылка.Пользователи (изменение объекта запрещено). - // - // Синтаксис: - // Процедура ПриЗаписиАдминистратора(Пользователь) Экспорт - // - СерверныеСобытия.Добавить("СтандартныеПодсистемы.Пользователи\ПриЗаписиАдминистратора"); - // Вызывается при создании элемента справочника "Пользователи" в момент интерактивного входа пользователя. // // Параметры: @@ -126,9 +70,6 @@ СерверныеОбработчики["СтандартныеПодсистемы.ОбновлениеВерсииИБ\ПриДобавленииОбработчиковОбновления"].Добавить( "ПользователиСлужебный"); - СерверныеОбработчики["СтандартныеПодсистемы.БазоваяФункциональность\ПриДобавленииОбработчиковУстановкиПараметровСеанса"].Добавить( - "ПользователиСлужебный"); - СерверныеОбработчики["СтандартныеПодсистемы.БазоваяФункциональность\ПриДобавленииПараметровРаботыКлиента"].Добавить( "ПользователиСлужебный"); @@ -167,6 +108,11 @@ "ПользователиСлужебный"); КонецЕсли; + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ОбменДанными") Тогда + СерверныеОбработчики["СтандартныеПодсистемы.ОбменДанными\ПриНастройкеПодчиненногоУзлаРИБ"].Добавить( + "ПользователиСлужебный"); + КонецЕсли; + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ВариантыОтчетов") Тогда СерверныеОбработчики["СтандартныеПодсистемы.ВариантыОтчетов\ПриНастройкеВариантовОтчетов"].Добавить( "ПользователиСлужебный"); @@ -177,6 +123,11 @@ "ПользователиСлужебный"); КонецЕсли; + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаВМоделиСервиса.ОчередьЗаданий") Тогда + СерверныеОбработчики["СтандартныеПодсистемы.РаботаВМоделиСервиса.ОчередьЗаданий\ПриПолученииСпискаШаблонов"].Добавить( + "ПользователиСлужебный"); + КонецЕсли; + КонецПроцедуры /////////////////////////////////////////////////////////////////////////////// @@ -239,7 +190,7 @@ ИмяПользователя = ТекущийПользовательИБ.Имя; ИдентификаторПользователяИБ = ТекущийПользовательИБ.УникальныйИдентификатор; - Пользователи.НайтиНеоднозначныхПользователейИБ(, ИдентификаторПользователяИБ); + Пользователи.НайтиНеоднозначныхПользователейИБ(Неопределено, ИдентификаторПользователяИБ); Запрос = Новый Запрос; Запрос.Параметры.Вставить("ИдентификаторПользователяИБ", ИдентификаторПользователяИБ); @@ -271,15 +222,15 @@ Если НЕ ВнешниеПользователи.ИспользоватьВнешнихПользователей() Тогда - ТекстСообщенияОбОшибке = НСтр("ru = 'Внешние пользователи отключены.'"); - ВызватьИсключение ТекстСообщенияОбОшибке; + ВызватьИсключение НСтр("ru = 'Внешние пользователи отключены.'"); КонецЕсли; Иначе ТекущийВнешнийПользователь = Справочники.ВнешниеПользователи.ПустаяСсылка(); Если РезультатПользователи.Пустой() Тогда - Если Пользователи.ЭтоПолноправныйПользователь( , ОбщегоНазначенияПовтИсп.РежимРаботыПрограммы().Локальный, Ложь) Тогда - + РазделениеВключено = ОбщегоНазначенияПовтИсп.РазделениеВключено(); + + Если Пользователи.ЭтоПолноправныйПользователь( , Не РазделениеВключено, Ложь) Тогда ИдентификаторПользователяИБ = ТекущийПользовательИБ.УникальныйИдентификатор; ПолноеИмяПользователя = ТекущийПользовательИБ.ПолноеИмя; @@ -313,6 +264,10 @@ ТекущийПользователь = СсылкаНового; + ПараметрыСеанса.ТекущийПользователь = ТекущийПользователь; + ПараметрыСеанса.ТекущийВнешнийПользователь = ТекущийВнешнийПользователь; + ПараметрыСеанса.АвторизованныйПользователь = ТекущийПользователь; + НовыйПользователь = Справочники.Пользователи.СоздатьЭлемент(); НовыйПользователь.Служебный = Служебный; НовыйПользователь.Наименование = ПолноеИмяПользователя; @@ -338,8 +293,12 @@ ЗафиксироватьТранзакцию(); Исключение ОтменитьТранзакцию(); - - ТекстСообщенияОбОшибке = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + ОчищаемыеПараметры = Новый Массив; + ОчищаемыеПараметры.Добавить("ТекущийПользователь"); + ОчищаемыеПараметры.Добавить("ТекущийВнешнийПользователь"); + ОчищаемыеПараметры.Добавить("АвторизованныйПользователь"); + ПараметрыСеанса.Очистить(ОчищаемыеПараметры); + ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Авторизация не выполнена. Работа системы будет завершена. |Пользователь: %1 не найден в справочнике ""Пользователи"". | @@ -348,9 +307,7 @@ | |Обратитесь к администратору.'"), ИмяПользователя, - КраткоеПредставлениеОшибки(ИнформацияОбОшибке()) ); - - ВызватьИсключение ТекстСообщенияОбОшибке; + КраткоеПредставлениеОшибки(ИнформацияОбОшибке())); КонецПопытки; ИначеЕсли ПользовательНеНайден Тогда @@ -366,10 +323,8 @@ Если ТекущийПользователь = Неопределено ИЛИ ТекущийВнешнийПользователь = Неопределено Тогда - ТекстСообщенияОбОшибке = ТекстСообщенияПользовательНеНайденВСправочнике(ИмяПользователя) + - НСтр("ru = ' - |Возникла внутренняя ошибка при поиске пользователя.'"); - ВызватьИсключение ТекстСообщенияОбОшибке; + ВызватьИсключение ТекстСообщенияПользовательНеНайденВСправочнике(ИмяПользователя) + Символы.ПС + + НСтр("ru = 'Возникла внутренняя ошибка при поиске пользователя.'"); КонецЕсли; ПараметрыСеанса.ТекущийПользователь = ТекущийПользователь; @@ -407,6 +362,7 @@ Если ПустаяСтрока(ТекущийПользовательИБ.Имя) Тогда // Авторизуется пользователь по умолчанию. + Пользователи.АвторизованныйПользователь(); Возврат ""; КонецЕсли; @@ -423,12 +379,14 @@ НайденныйПользователь = Неопределено; Если ПользовательПоИдентификаторуСуществует( ТекущийПользовательИБ.УникальныйИдентификатор, , НайденныйПользователь) Тогда + // ПользовательИБ найден в справочнике. + РазделениеВключено = ОбщегоНазначенияПовтИсп.РазделениеВключено(); Если ПриНачалеРаботыСистемы - И Пользователи.ЭтоПолноправныйПользователь(ТекущийПользовательИБ, ОбщегоНазначенияПовтИсп.РежимРаботыПрограммы().Локальный, Ложь) Тогда + И Пользователи.ЭтоПолноправныйПользователь(ТекущийПользовательИБ, Не РазделениеВключено, Ложь) Тогда - ПриАвторизацииАдминистратораПриНачалеРаботыСистемы(НайденныйПользователь); + ИнтеграцияСтандартныхПодсистем.ПриАвторизацииАдминистратораПриНачалеРаботыСистемы(НайденныйПользователь); КонецЕсли; Возврат ""; @@ -464,7 +422,7 @@ |Для ведения списка и настройки прав пользователей предназначен список Пользователи, |режим конфигурирования 1С:Предприятия для этого использовать не следует.'"); - ПослеЗаписиАдминистратораПриАвторизации(Комментарий); + ИнтеграцияСтандартныхПодсистем.ПослеЗаписиАдминистратораПриАвторизации(Комментарий); ЗаписьЖурналаРегистрации( НСтр("ru = 'Пользователи.Администратор зарегистрирован в справочнике Пользователи'", @@ -490,27 +448,19 @@ // Определяет, что используется нестандартный способ установки ролей пользователям ИБ. Функция ЗапретРедактированияРолей() Экспорт - Запрет = Ложь; - - ОбработчикиСобытия = ОбщегоНазначения.ОбработчикиСлужебногоСобытия( - "СтандартныеПодсистемы.Пользователи\ПриОпределенииЗапретаРедактированияРолей"); - - Для каждого Обработчик Из ОбработчикиСобытия Цикл - Обработчик.Модуль.ПриОпределенииЗапретаРедактированияРолей(Запрет); - КонецЦикла; - - ПользователиПереопределяемый.ИзменитьЗапретРедактированияРолей(Запрет); - - Возврат Запрет = Истина; + Возврат ПользователиСлужебныйПовтИсп.Настройки().РедактированиеРолей <> Истина; КонецФункции // Устанавливает начальные настройки для пользователя информационной базы. // // Параметры: -// ИмяПользователя - строка, имя пользователя информационной базы, для которого сохраняются настройки. +// ИмяПользователя - Строка - имя пользователя информационной базы, для которого сохраняются настройки. +// Пользователь - СправочникСсылка.Пользователи, СправочникОбъект.Пользователи +// СправочникСсылка.ВнешниеПользователи, СправочникОбъект.ВнешниеПользователи +// Неопределено - ссылка или объект пользователя в справочнике, если существует. // -Процедура УстановитьНачальныеНастройки(Знач ИмяПользователя) Экспорт +Процедура УстановитьНачальныеНастройки(Знач ИмяПользователя, Пользователь = Неопределено) Экспорт СистемнаяИнформация = Новый СистемнаяИнформация; @@ -542,8 +492,14 @@ НастройкиИнтерфейса.ОтображениеПанелиРазделов = ОтображениеПанелиРазделов.Текст; КонецЕсли; - НачальныеНастройки = Новый Структура("НастройкиКлиента,НастройкиИнтерфейса,НастройкиТакси", - НастройкиКлиента, НастройкиИнтерфейса, НастройкиТакси); + НачальныеНастройки = Новый Структура; + НачальныеНастройки.Вставить("НастройкиКлиента", НастройкиКлиента); + НачальныеНастройки.Вставить("НастройкиИнтерфейса", НастройкиИнтерфейса); + НачальныеНастройки.Вставить("НастройкиТакси", НастройкиТакси); + НачальныеНастройки.Вставить("ЭтоВнешнийПользователь", + ТипЗнч(Пользователь) = Тип("СправочникСсылка.ВнешниеПользователи") + Или ТипЗнч(Пользователь) = Тип("СправочникОбъект.ВнешниеПользователи")); + ПользователиПереопределяемый.ПриУстановкеНачальныхНастроек(НачальныеНастройки); Если НачальныеНастройки.НастройкиКлиента <> Неопределено Тогда @@ -643,55 +599,423 @@ КонецФункции -// При первом запуске подчиненного узла очищает идентификаторы -// пользователей ИБ, скопированные при создании начального образа. -// -Процедура ОчиститьИдентификаторыНесуществующихПользователейИБ() Экспорт +// Возвращает свойства пользователя для пользователя ИБ с пустым именем. +Функция СвойстваНеуказанногоПользователя() Экспорт - Если ОбщегоНазначенияПовтИсп.РазделениеВключено() Тогда - Возврат; - КонецЕсли; + УстановитьПривилегированныйРежим(Истина); - ПустойУникальныйИдентификатор = Новый УникальныйИдентификатор("00000000-0000-0000-0000-000000000000"); + Свойства = Новый Структура; + // Ссылка на найденный элемент справочника + // соответствующий неуказанному пользователю. + Свойства.Вставить("Ссылка", Неопределено); + + // Ссылка, используемая для поиска и создания + // неуказанного пользователя в справочнике Пользователи. + Свойства.Вставить("СтандартнаяСсылка", Справочники.Пользователи.ПолучитьСсылку( + Новый УникальныйИдентификатор("aa00559e-ad84-4494-88fd-f0826edc46f0"))); + + // Полное имя, которое устанавливается в элемент справочника Пользователи + // при создании несуществующего неуказанного пользователя. + Свойства.Вставить("ПолноеИмя", Пользователи.ПолноеИмяНеуказанногоПользователя()); + + // Полное имя, которое используется для поиска неуказанного пользователя + // старым способом, необходимым для поддержки старых версий + // неуказанного пользователя. Это имя не требуется изменять. + Свойства.Вставить("ПолноеИмяДляПоиска", НСтр("ru = '<Не указан>'")); + + // Поиск по уникальному идентификатору. Запрос = Новый Запрос; - Запрос.УстановитьПараметр("ПустойУникальныйИдентификатор", ПустойУникальныйИдентификатор); - + Запрос.УстановитьПараметр("Ссылка", Свойства.СтандартнаяСсылка); Запрос.Текст = - "ВЫБРАТЬ - | Пользователи.Ссылка КАК Ссылка, - | Пользователи.ИдентификаторПользователяИБ + "ВЫБРАТЬ ПЕРВЫЕ 1 + | ИСТИНА КАК ЗначениеИстина |ИЗ | Справочник.Пользователи КАК Пользователи |ГДЕ - | Пользователи.ИдентификаторПользователяИБ <> &ПустойУникальныйИдентификатор + | Пользователи.Ссылка = &Ссылка"; + + НачатьТранзакцию(); + Попытка + Если Запрос.Выполнить().Пустой() Тогда + Запрос.УстановитьПараметр("ПолноеИмя", Свойства.ПолноеИмяДляПоиска); + Запрос.Текст = + "ВЫБРАТЬ ПЕРВЫЕ 1 + | Пользователи.Ссылка + |ИЗ + | Справочник.Пользователи КАК Пользователи + |ГДЕ + | Пользователи.Наименование = &ПолноеИмя"; + Результат = Запрос.Выполнить(); + + Если НЕ Результат.Пустой() Тогда + Выборка = Результат.Выбрать(); + Выборка.Следующий(); + Свойства.Ссылка = Выборка.Ссылка; + КонецЕсли; + Иначе + Свойства.Ссылка = Свойства.СтандартнаяСсылка; + КонецЕсли; + ЗафиксироватьТранзакцию(); + Исключение + ОтменитьТранзакцию(); + ВызватьИсключение; + КонецПопытки; + + Возврат Свойства; + +КонецФункции + +// Определяет наличие элемента в справочнике Пользователи +// или справочнике ВнешниеПользователи по уникальному идентификатору +// пользователя информационной. +// Функция используется для проверки наличия сопоставления пользователяИБ только +// с одним элементом справочников Пользователи и ВнешниеПользователи. +// +// Параметры: +// УникальныйИдентификатор - идентификатор пользователя ИБ. +// +// СсылкаНаТекущего - СправочникСсылка.Пользователи, +// СправочникСсылка.ВнешниеПользователи - исключить +// указанную ссылку из поиска. +// Неопределено - искать среди всех элементов справочников. +// +// НайденныйПользователь (Возвращаемое значение): +// Неопределено - пользователь не существует. +// СправочникСсылка.Пользователи, +// СправочникСсылка.ВнешниеПользователи, если найден. +// +// ИдентификаторПользователяСервиса - Булево. +// Ложь - проверять ИдентификаторПользователяИБ. +// Истина - проверять ИдентификаторПользователяСервиса. +// +// Возвращаемое значение: +// Булево. +// +Функция ПользовательПоИдентификаторуСуществует(УникальныйИдентификатор, + СсылкаНаТекущего = Неопределено, + НайденныйПользователь = Неопределено, + ИдентификаторПользователяСервиса = Ложь) Экспорт + + УстановитьПривилегированныйРежим(Истина); + + Запрос = Новый Запрос; + Запрос.УстановитьПараметр("СсылкаНаТекущего", СсылкаНаТекущего); + Запрос.УстановитьПараметр("УникальныйИдентификатор", УникальныйИдентификатор); + Запрос.Текст = + "ВЫБРАТЬ + | Пользователи.Ссылка КАК Пользователь + |ИЗ + | Справочник.Пользователи КАК Пользователи + |ГДЕ + | Пользователи.ИдентификаторПользователяИБ = &УникальныйИдентификатор + | И Пользователи.Ссылка <> &СсылкаНаТекущего | |ОБЪЕДИНИТЬ ВСЕ | |ВЫБРАТЬ - | ВнешниеПользователи.Ссылка, - | ВнешниеПользователи.ИдентификаторПользователяИБ + | ВнешниеПользователи.Ссылка |ИЗ - | Справочник.Пользователи КАК ВнешниеПользователи + | Справочник.ВнешниеПользователи КАК ВнешниеПользователи |ГДЕ - | ВнешниеПользователи.ИдентификаторПользователяИБ <> &ПустойУникальныйИдентификатор"; + | ВнешниеПользователи.ИдентификаторПользователяИБ = &УникальныйИдентификатор + | И ВнешниеПользователи.Ссылка <> &СсылкаНаТекущего"; - Выборка = Запрос.Выполнить().Выбрать(); + Результат = Ложь; + НайденныйПользователь = Неопределено; - Пока Выборка.Следующий() Цикл + НачатьТранзакцию(); + Попытка + РезультатЗапроса = Запрос.Выполнить(); - ПользовательИБ = ПользователиИнформационнойБазы.НайтиПоУникальномуИдентификатору( - Выборка.ИдентификаторПользователяИБ); - - Если ПользовательИБ <> Неопределено Тогда - Продолжить; + Если НЕ РезультатЗапроса.Пустой() Тогда + Выборка = РезультатЗапроса.Выбрать(); + Выборка.Следующий(); + НайденныйПользователь = Выборка.Пользователь; + Результат = Истина; + Пользователи.НайтиНеоднозначныхПользователейИБ(Неопределено, УникальныйИдентификатор); КонецЕсли; - ТекущийОбъект = Выборка.Ссылка.ПолучитьОбъект(); - ТекущийОбъект.ИдентификаторПользователяИБ = ПустойУникальныйИдентификатор; - ОбновлениеИнформационнойБазы.ЗаписатьДанные(ТекущийОбъект); + ЗафиксироватьТранзакцию(); + Исключение + ОтменитьТранзакцию(); + ВызватьИсключение; + КонецПопытки; + + Возврат Результат; + +КонецФункции + +// Только для внутреннего использования. +// +Процедура ОбновитьНазначениеПриСозданииНаСервере(Форма, ДобавлятьПользователей = Истина, ТолькоВнешниеПользователи = Ложь) Экспорт + + Назначение = Форма.Объект.Назначение; + + Если Не ВнешниеПользователи.ИспользоватьВнешнихПользователей() Тогда + Назначение.Очистить(); + НоваяСтрока = Назначение.Добавить(); + Форма.Элементы.ВыбратьНазначение.Родитель.Видимость = Ложь; + НоваяСтрока.ТипПользователей = Справочники.Пользователи.ПустаяСсылка(); + КонецЕсли; + + Если ДобавлятьПользователей И Назначение.Количество() = 0 Тогда + Если ТолькоВнешниеПользователи Тогда + Для Каждого Тип Из Метаданные.ОпределяемыеТипы.ВнешнийПользователь.Тип.Типы() Цикл + ОписаниеТипаСсылки = Новый ОписаниеТипов(ОбщегоНазначенияКлиентСервер.ЗначениеВМассиве(Тип)); + Значение = ОписаниеТипаСсылки.ПривестиЗначение(Неопределено); + + НоваяСтрока = Назначение.Добавить(); + НоваяСтрока.ТипПользователей = Значение; + КонецЦикла; + + Иначе + НоваяСтрока = Назначение.Добавить(); + НоваяСтрока.ТипПользователей = Справочники.Пользователи.ПустаяСсылка(); + КонецЕсли; + КонецЕсли; + + Если Назначение.Количество() <> 0 Тогда + МассивПредставлений = Новый Массив; + Индекс = Назначение.Количество() - 1; + Пока Индекс >= 0 Цикл + ТипПользователей = Назначение.Получить(Индекс).ТипПользователей; + Если ТипПользователей =Неопределено Тогда + Назначение.Удалить(Индекс); + Иначе + МассивПредставлений.Добавить(ТипПользователей.Метаданные().Синоним); + КонецЕсли; + Индекс = Индекс - 1; + КонецЦикла; + Форма.Элементы.ВыбратьНазначение.Заголовок = СтрСоединить(МассивПредставлений, ", "); + КонецЕсли; + +КонецПроцедуры + +// Записывает указанного Пользователя ИБ с учетом режима разделения данных. +// Если режим разделения данных включен, тогда перед записью проверяются +// права записываемого пользователя. +// +// Параметры: +// ПользовательИБ - ПользовательИнформационнойБазы - объект, который требуется записать. +// +Процедура ЗаписатьПользователяИнформационнойБазы(ПользовательИБ) Экспорт + + Обработчики = ОбщегоНазначения.ОбработчикиСлужебногоСобытия("СтандартныеПодсистемы.Пользователи\ПередЗаписьюПользователяИБ"); + Для Каждого Обработчик Из Обработчики Цикл + Обработчик.Модуль.ПередЗаписьюПользователяИБ(ПользовательИБ.УникальныйИдентификатор); КонецЦикла; + ПроверитьПраваПользователя(ПользовательИБ, "ПередЗаписью"); + + ОбновлениеИнформационнойБазыСлужебный.УстановитьФлагОтображенияОписанийДляНовогоПользователя(ПользовательИБ.Имя); + + ПользовательИБ.Записать(); + +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// Обработчики условных вызовов из других подсистем. + +// Заполняет параметры, которые используется клиентским кодом на запуске конфигурации. +// +// Параметры: +// Параметры - Структура - параметры запуска. +// Отказ - Булево - если указать Истина, значит не удалось добавить параметры и +// требуются действия на стороне клиента для успешного продолжения. +// +Процедура ПриДобавленииПараметровРаботыКлиентаПриЗапуске(Параметры, Отказ) Экспорт + + ОшибкаАвторизации = АвторизоватьТекущегоПользователя(Истина); + Если ОшибкаАвторизации <> "" Тогда + Параметры.Вставить("ОшибкаАвторизации", ОшибкаАвторизации); + Отказ = Истина; + Возврат; + КонецЕсли; + + Если ТребуетсяСменитьПароль(ОшибкаАвторизации, Истина) Тогда + Параметры.Вставить("ТребуетсяСменитьПароль"); + СтандартныеПодсистемыВызовСервера.СкрытьРабочийСтолПриНачалеРаботыСистемы(); + + ИначеЕсли ОшибкаАвторизации <> "" Тогда + Параметры.Вставить("ОшибкаАвторизации", ОшибкаАвторизации); + Отказ = Истина; + Возврат; + КонецЕсли; + +КонецПроцедуры + +// Определить объекты метаданных, в модулях менеджеров которых ограничивается возможность +// редактирования реквизитов при групповом изменении. +// +// Параметры: +// Объекты - Соответствие - в качестве ключа указать полное имя объекта метаданных, +// подключенного к подсистеме "Групповое изменение объектов". +// Дополнительно в значении могут быть перечислены имена экспортных функций: +// "РеквизитыНеРедактируемыеВГрупповойОбработке", +// "РеквизитыРедактируемыеВГрупповойОбработке". +// Каждое имя должно начинаться с новой строки. +// Если указана пустая строка, значит в модуле менеджера определены обе функции. +// +Процедура ПриОпределенииОбъектовСРедактируемымиРеквизитами(Объекты) Экспорт + Объекты.Вставить(Метаданные.Справочники.ВнешниеПользователи.ПолноеИмя(), "РеквизитыНеРедактируемыеВГрупповойОбработке"); + Объекты.Вставить(Метаданные.Справочники.ГруппыВнешнихПользователей.ПолноеИмя(), "РеквизитыНеРедактируемыеВГрупповойОбработке"); + Объекты.Вставить(Метаданные.Справочники.Пользователи.ПолноеИмя(), "РеквизитыНеРедактируемыеВГрупповойОбработке"); +КонецПроцедуры + +// Возвращает соответствие имен параметров сеанса и обработчиков для их инициализации. +// +Процедура ПриДобавленииОбработчиковУстановкиПараметровСеанса(Обработчики) Экспорт + + Обработчики.Вставить("ТекущийПользователь", "ПользователиСлужебный.УстановкаПараметровСеанса"); + Обработчики.Вставить("ТекущийВнешнийПользователь", "ПользователиСлужебный.УстановкаПараметровСеанса"); + Обработчики.Вставить("АвторизованныйПользователь", "ПользователиСлужебный.УстановкаПараметровСеанса"); + +КонецПроцедуры + +// Заполняет виды доступа, используемые в ограничениях прав доступа. +// Виды доступа Пользователи и ВнешниеПользователи уже заполнены. +// Их можно удалить, если они не требуются для ограничения прав доступа. +// +// Параметры: +// ВидыДоступа - ТаблицаЗначений - с колонками: +// * Имя - Строка - имя используемое в описании поставляемых +// профилей групп доступа и текстах ОДД. +// * Представление - Строка - представляет вид доступа в профилях и группах доступа. +// * ТипЗначений - Тип - тип ссылки значений доступа. +// Например, Тип("СправочникСсылка.Номенклатура"). +// * ТипГруппЗначений - Тип - тип ссылки групп значений доступа. +// Например, Тип("СправочникСсылка.ГруппыДоступаНоменклатуры"). +// * НесколькоГруппЗначений - Булево - Истина указывает, что для значения доступа (Номенклатуры), можно +// выбрать несколько групп значений (Групп доступа номенклатуры). +// +Процедура ПриЗаполненииВидовДоступа(ВидыДоступа) Экспорт + + ВидДоступа = ВидыДоступа.Добавить(); + ВидДоступа.Имя = "Пользователи"; + ВидДоступа.Представление = НСтр("ru = 'Пользователи'"); + ВидДоступа.ТипЗначений = Тип("СправочникСсылка.Пользователи"); + ВидДоступа.ТипГруппЗначений = Тип("СправочникСсылка.ГруппыПользователей"); + ВидДоступа.НесколькоГруппЗначений = Истина; // Должно быть Истина, особый случай. + + ВидДоступа = ВидыДоступа.Добавить(); + ВидДоступа.Имя = "ВнешниеПользователи"; + ВидДоступа.Представление = НСтр("ru = 'Внешние пользователи'"); + ВидДоступа.ТипЗначений = Тип("СправочникСсылка.ВнешниеПользователи"); + ВидДоступа.ТипГруппЗначений = Тип("СправочникСсылка.ГруппыВнешнихПользователей"); + ВидДоступа.НесколькоГруппЗначений = Истина; // Должно быть Истина, особый случай. + +КонецПроцедуры + +// Обработчик ожидания проверяет, что срок действия учетной записи истек и нужно завершить работу. +Процедура ПриВыполненииСтандартныхПериодическихПроверокНаСервере(Параметры) Экспорт + + УстановитьПривилегированныйРежим(Истина); + + ТребуетсяСменитьПароль(); // Обновление даты последней активности. + + ПользовательИБ = ПользователиИнформационнойБазы.НайтиПоУникальномуИдентификатору( + ПользователиИнформационнойБазы.ТекущийПользователь().УникальныйИдентификатор); + + Параметры.Вставить("ВходВПрограммуЗапрещен", Ложь); + + Если ПользовательИБ = Неопределено Тогда + + Если Не ОбщегоНазначенияПовтИсп.РазделениеВключено() + Или Не ОбщегоНазначенияПовтИсп.СеансЗапущенБезРазделителей() Тогда + + Параметры.ВходВПрограммуЗапрещен = Истина; + КонецЕсли; + + ИначеЕсли ПользовательИБ.АутентификацияСтандартная = Ложь + И ПользовательИБ.АутентификацияОС = Ложь + И ПользовательИБ.АутентификацияOpenID = Ложь Тогда + + Параметры.ВходВПрограммуЗапрещен = Истина; + КонецЕсли; + +КонецПроцедуры + +// См. описание процедуры СтандартныеПодсистемыСервер.СобратьСтатистикуКонфигурации. +Процедура СобратьСтатистикуКонфигурации() Экспорт + + Если Не ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ЦентрМониторинга") Тогда + Возврат; + КонецЕсли; + + МодульЦентрМониторинга = ОбщегоНазначения.ОбщийМодуль("ЦентрМониторинга"); + + АутентификацияСтандартная = 0; + АутентификацияОС = 0; + АутентификацияOpenID = 0; + ВходВПрограммуРазрешен = 0; + Для Каждого ОписаниеПользователя Из ПользователиИнформационнойБазы.ПолучитьПользователей() Цикл + АутентификацияСтандартная = АутентификацияСтандартная + ОписаниеПользователя.АутентификацияСтандартная; + АутентификацияОС = АутентификацияОС + ОписаниеПользователя.АутентификацияОС; + АутентификацияOpenID = АутентификацияOpenID + ОписаниеПользователя.АутентификацияOpenID; + ВходВПрограммуРазрешен = ВходВПрограммуРазрешен + (ОписаниеПользователя.АутентификацияСтандартная + Или ОписаниеПользователя.АутентификацияОС Или ОписаниеПользователя.АутентификацияOpenID); + КонецЦикла; + + МодульЦентрМониторинга.ЗаписатьСтатистикуОбъектаКонфигурации("Справочник.Пользователи.АутентификацияСтандартная", АутентификацияСтандартная); + МодульЦентрМониторинга.ЗаписатьСтатистикуОбъектаКонфигурации("Справочник.Пользователи.АутентификацияОС", АутентификацияОС); + МодульЦентрМониторинга.ЗаписатьСтатистикуОбъектаКонфигурации("Справочник.Пользователи.АутентификацияOpenID", АутентификацияOpenID); + МодульЦентрМониторинга.ЗаписатьСтатистикуОбъектаКонфигурации("Справочник.Пользователи.ВходВПрограммуРазрешен", ВходВПрограммуРазрешен); + + ТекстЗапроса = + "ВЫБРАТЬ + | КОЛИЧЕСТВО(1) КАК Количество + |ИЗ + | Справочник.Пользователи КАК Пользователи + |ГДЕ + | Пользователи.Недействителен"; + + Запрос = Новый Запрос(ТекстЗапроса); + Выборка = Запрос.Выполнить().Выбрать(); + Выборка.Следующий(); + + МодульЦентрМониторинга.ЗаписатьСтатистикуОбъектаКонфигурации("Справочник.Пользователи.Недействителен", Выборка.Количество); + + Настройки = ПользователиСлужебныйПовтИсп.Настройки().Пользователи; + ИспользованиеРасширенныхНастроекВхода = Настройки.ПарольДолженОтвечатьТребованиямСложности + Или ЗначениеЗаполнено(Настройки.МинимальнаяДлинаПароля) + Или ЗначениеЗаполнено(Настройки.МаксимальныйСрокДействияПароля) + Или ЗначениеЗаполнено(Настройки.МинимальныйСрокДействияПароля) + Или ЗначениеЗаполнено(Настройки.ЗапретитьПовторениеПароляСредиПоследних) + Или ЗначениеЗаполнено(Настройки.ПросрочкаРаботыВПрограммеДоЗапрещенияВхода) + Или ЗначениеЗаполнено(Настройки.ПросрочкаРаботыВПрограммеДатаВключения); + + МодульЦентрМониторинга.ЗаписатьСтатистикуОбъектаКонфигурации("Справочник.Пользователи.ИспользованиеРасширенныхНастроекВхода", ИспользованиеРасширенныхНастроекВхода); + + ТекстЗапроса = + "ВЫБРАТЬ + | КОЛИЧЕСТВО(1) КАК Количество + |ИЗ + | РегистрСведений.СведенияОПользователях КАК СведенияОПользователях + |ГДЕ + | СведенияОПользователях.ДатаПоследнейАктивности >= &ДатаСреза"; + + Запрос = Новый Запрос(ТекстЗапроса); + Запрос.УстановитьПараметр("ДатаСреза", НачалоДня(ТекущаяДатаСеанса() - 30 *60*60*24)); // 30 дней. + Выборка = Запрос.Выполнить().Выбрать(); + Выборка.Следующий(); + + МодульЦентрМониторинга.ЗаписатьСтатистикуОбъектаКонфигурации("Справочник.Пользователи.Активный", Выборка.Количество); + + ТекстЗапроса = + "ВЫБРАТЬ + | СведенияОПользователях.ПоследнийИспользуемыйКлиент КАК ИспользуемыйКлиент, + | КОЛИЧЕСТВО(1) КАК Количество + |ИЗ + | РегистрСведений.СведенияОПользователях КАК СведенияОПользователях + | + |СГРУППИРОВАТЬ ПО + | СведенияОПользователях.ПоследнийИспользуемыйКлиент"; + + СоответствиеИменМетаданных = Новый Соответствие; + СоответствиеИменМетаданных.Вставить("Справочник.Пользователи", ТекстЗапроса); + МодульЦентрМониторинга.ЗаписатьСтатистикуКонфигурации(СоответствиеИменМетаданных); + КонецПроцедуры #КонецОбласти @@ -755,15 +1079,16 @@ Обработчик.ОбщиеДанные = Истина; Обработчик.Процедура = "ПользователиСлужебный.УдалитьКэшНеразделенныеДанныеДоступныеДляИзменения"; -КонецПроцедуры - -// Возвращает соответствие имен параметров сеанса и обработчиков для их инициализации. -// -Процедура ПриДобавленииОбработчиковУстановкиПараметровСеанса(Обработчики) Экспорт + Обработчик = Обработчики.Добавить(); + Обработчик.Версия = "2.3.1.16"; + Обработчик.РежимВыполнения = "Оперативно"; + Обработчик.Процедура = "ПользователиСлужебный.ОчиститьРеквизитПоказыватьВСпискеВыбораУВсехПользователейИБ"; - Обработчики.Вставить("ТекущийПользователь", "ПользователиСлужебный.УстановкаПараметровСеанса"); - Обработчики.Вставить("ТекущийВнешнийПользователь", "ПользователиСлужебный.УстановкаПараметровСеанса"); - Обработчики.Вставить("АвторизованныйПользователь", "ПользователиСлужебный.УстановкаПараметровСеанса"); + Обработчик = Обработчики.Добавить(); + Обработчик.Версия = "2.3.1.37"; + Обработчик.НачальноеЗаполнение = Истина; + Обработчик.РежимВыполнения = "Оперативно"; + Обработчик.Процедура = "ПользователиСлужебный.ЗаполнитьНазначениеГруппВнешнихПользователей"; КонецПроцедуры @@ -781,7 +1106,6 @@ Процедура ПриДобавленииПараметровРаботыКлиента(Параметры) Экспорт Параметры.Вставить("ЭтоПолноправныйПользователь", Пользователи.ЭтоПолноправныйПользователь()); - Параметры.Вставить("ЭтоУчебнаяПлатформа", СтандартныеПодсистемыСервер.ЭтоУчебнаяПлатформа()); КонецПроцедуры @@ -911,6 +1235,9 @@ // Процедура ПриПолученииОбъектовИсключенийПланаОбмена(Объекты, Знач РаспределеннаяИнформационнаяБаза) Экспорт + Объекты.Добавить(Метаданные.Константы.НастройкиВходаПользователей); + Объекты.Добавить(Метаданные.РегистрыСведений.СведенияОПользователях); + КонецПроцедуры // Используется для получения объектов метаданных, которые должны входить в состав плана обмена @@ -951,12 +1278,11 @@ Возврат; // В модели сервиса дело не выводится. КонецЕсли; - МодульТекущиеДелаСлужебный = ОбщегоНазначения.ОбщийМодуль("ТекущиеДелаСлужебный"); + МодульТекущиеДелаСервер = ОбщегоНазначения.ОбщийМодуль("ТекущиеДелаСервер"); Если Не Пользователи.ЭтоПолноправныйПользователь(, Истина) - Или МодульТекущиеДелаСлужебный.ДелоОтключено("НекорректныеСведенияОПользователях") Тогда + Или МодульТекущиеДелаСервер.ДелоОтключено("НекорректныеСведенияОПользователях") Тогда Возврат; КонецЕсли; - МодульТекущиеДелаСервер = ОбщегоНазначения.ОбщийМодуль("ТекущиеДелаСервер"); НекорректныхПользователей = ПользователиДобавленныеСПомощьюКонфигуратора(); @@ -964,10 +1290,6 @@ // не делается проверка существования подсистемы. Разделы = МодульТекущиеДелаСервер.РазделыДляОбъекта(Метаданные.Справочники.Пользователи.ПолноеИмя()); - Если Разделы = Неопределено Тогда - Возврат; - КонецЕсли; - Для Каждого Раздел Из Разделы Цикл ИдентификаторПользователи = "НекорректныеСведенияОПользователях" + СтрЗаменить(Раздел.ПолноеИмя(), ".", ""); @@ -976,7 +1298,7 @@ Дело.ЕстьДела = НекорректныхПользователей > 0; Дело.Количество = НекорректныхПользователей; Дело.Представление = НСтр("ru = 'Некорректные сведения о пользователях'"); - Дело.Форма = "Справочник.Пользователи.Форма.ПользователиИБ"; + Дело.Форма = "Справочник.Пользователи.Форма.ПользователиИнформационнойБазы"; Дело.Владелец = Раздел; КонецЦикла; @@ -1047,7 +1369,7 @@ // Процедура ПриЗаполненииВидовОграниченийПравОбъектовМетаданных(Описание) Экспорт - Описание = Описание + + ДополнениеОписания = " |Справочник.ВнешниеПользователи.Чтение.ВнешниеПользователи |Справочник.ВнешниеПользователи.Изменение.ВнешниеПользователи @@ -1059,6 +1381,19 @@ |РегистрСведений.СоставыГруппПользователей.Чтение.Пользователи |"; + Описание = Описание + ДополнениеОписания; + +КонецПроцедуры + +// Обработчики событий подсистемы Обмен данными. + +// Обработчик начальной настройки ИБ после создания узла РИБ. +// Вызывается в момент первого запуска подчиненного узла РИБ (в том числе АРМ). +// +Процедура ПриНастройкеПодчиненногоУзлаРИБ() Экспорт + + ОчиститьИдентификаторыНесуществующихПользователейИБ(); + КонецПроцедуры // Обработчики событий подсистемы ВариантыОтчетов. @@ -1159,6 +1494,33 @@ МодульВариантыОтчетов.НастроитьОтчетВМодулеМенеджера(Настройки, Метаданные.Отчеты.СведенияОПользователях); КонецПроцедуры +// Обработчики событий подсистемы РаботаВМоделиСервиса.ОчередьЗаданий. + +// Обработчик события ПриПолученииСпискаШаблонов. +// +// Формирует список шаблонов заданий очереди. +// +// Параметры: +// Шаблоны - Массив строк. В параметр следует добавить имена предопределенных +// неразделенных регламентных заданий, которые должны использоваться в качестве +// шаблонов для заданий очереди. +// +Процедура ПриПолученииСпискаШаблонов(Шаблоны) Экспорт + + Шаблоны.Добавить(Метаданные.РегламентныеЗадания.КонтрольАктивностиПользователей.Имя); + +КонецПроцедуры + +// Обработчики событий подсистемы Пользователи. + +// См. процедуру ИзменитьДействияВФорме в общем модуле ПользователиПереопределяемый. +Процедура ПриОпределенииДействийВФорме(Ссылка, ДействияВФорме) Экспорт + + ИнтеграцияСтандартныхПодсистем.ПриОпределенииДействийВФорме(Ссылка, ДействияВФорме); + ПользователиПереопределяемый.ИзменитьДействияВФорме(Ссылка, ДействияВФорме); + +КонецПроцедуры + //////////////////////////////////////////////////////////////////////////////// // Обработчики подписок на события. @@ -1183,6 +1545,605 @@ КонецПроцедуры +//////////////////////////////////////////////////////////////////////////////// +// Использование регламентных заданий. + +// Обработчик регламентного задания КонтрольАктивностиПользователей. +Процедура КонтрольАктивностиПользователей() Экспорт + + ОбщегоНазначения.ПриНачалеВыполненияРегламентногоЗадания( + Метаданные.РегламентныеЗадания.КонтрольАктивностиПользователей); + + ОтключитьНеактивныхИПросроченныхПользователей(); + +КонецПроцедуры + +// Изменяет использование регламентного задания КонтрольАктивностиПользователей. +// +// Параметры: +// Использование - Булево - Истина, если задание нужно включить, иначе Ложь. +// +Процедура ИзменитьЗаданиеКонтрольАктивностиПользователей(Использование) Экспорт + + СтандартныеПодсистемыСервер.УстановитьИспользованиеПредопределенногоРегламентногоЗадания( + Метаданные.РегламентныеЗадания.КонтрольАктивностиПользователей, Использование); + +КонецПроцедуры + +// Вызывается при записи пользователя или внешнего пользователя, проверят срок действия. +Процедура ВключитьЗаданиеКонтрольАктивностиПользователейПриНеобходимости(Пользователь) Экспорт + + УстановитьПривилегированныйРежим(Истина); + + Если Не ПользователиСлужебныйПовтИсп.Настройки().ОбщиеНастройкиВхода Тогда + Возврат; + КонецЕсли; + + Запрос = Новый Запрос; + Запрос.УстановитьПараметр("Пользователь", Пользователь); + Запрос.УстановитьПараметр("ПустаяДата", '00010101'); + Запрос.Текст = + "ВЫБРАТЬ ПЕРВЫЕ 1 + | ИСТИНА КАК ЗначениеИстина + |ИЗ + | РегистрСведений.СведенияОПользователях КАК СведенияОПользователях + |ГДЕ + | СведенияОПользователях.Пользователь В(&Пользователь) + | И СведенияОПользователях.СрокДействия <> &ПустаяДата + | И СведенияОПользователях.ДатаАвтоматическогоЗапрещенияВхода = &ПустаяДата"; + + Если Не Запрос.Выполнить().Пустой() Тогда + ИзменитьЗаданиеКонтрольАктивностиПользователей(Истина); + КонецЕсли; + +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// Процедуры и функции работы с настройками входа пользователей. + +// См. функцию Настройки в общем модуле ПользователиСлужебныйПовтИсп. +Функция НастройкиВхода() Экспорт + + Настройки = Новый Структура; + // Требования сложности. + Настройки.Вставить("ПарольДолженОтвечатьТребованиямСложности", Ложь); + Настройки.Вставить("МинимальнаяДлинаПароля", 0); + // Требования срока действия. + Настройки.Вставить("МаксимальныйСрокДействияПароля", 0); + Настройки.Вставить("МинимальныйСрокДействияПароля", 0); + Настройки.Вставить("ЗапретитьПовторениеПароляСредиПоследних", 0); + // Требование периодической работы в программе. + Настройки.Вставить("ПросрочкаРаботыВПрограммеДоЗапрещенияВхода", 0); + Настройки.Вставить("ПросрочкаРаботыВПрограммеДатаВключения", '00010101'); + + КопияНастроек = Новый ФиксированнаяСтруктура(Настройки); + + ПодготовленныеНастройки = Новый Структура; + ПодготовленныеНастройки.Вставить("Пользователи", Новый Структура(КопияНастроек)); + ПодготовленныеНастройки.Вставить("ВнешниеПользователи", Настройки); + + СохраненныеНастройки = Константы.НастройкиВходаПользователей.Получить().Получить(); + Если ТипЗнч(СохраненныеНастройки) <> Тип("Структура") Тогда + Возврат ПодготовленныеНастройки; + КонецЕсли; + + Для Каждого ПодготовленнаяНастройка Из ПодготовленныеНастройки Цикл + Если Не СохраненныеНастройки.Свойство(ПодготовленнаяНастройка.Ключ) + Или ТипЗнч(СохраненныеНастройки[ПодготовленнаяНастройка.Ключ]) <> Тип("Структура") Тогда + Продолжить; + КонецЕсли; + НачальныеНастройки = ПодготовленнаяНастройка.Значение; + ТекущиеНастройки = СохраненныеНастройки[ПодготовленнаяНастройка.Ключ]; + + Если ТипЗнч(ТекущиеНастройки) = Тип("Структура") Тогда + Для Каждого НачальнаяНастройка Из НачальныеНастройки Цикл + + Если Не ТекущиеНастройки.Свойство(НачальнаяНастройка.Ключ) + Или ТипЗнч(ТекущиеНастройки[НачальнаяНастройка.Ключ]) <> ТипЗнч(НачальнаяНастройка.Значение) Тогда + + Продолжить; + КонецЕсли; + + НачальныеНастройки[НачальнаяНастройка.Ключ] = ТекущиеНастройки[НачальнаяНастройка.Ключ]; + КонецЦикла; + КонецЕсли; + КонецЦикла; + + Возврат ПодготовленныеНастройки; + +КонецФункции + +//////////////////////////////////////////////////////////////////////////////// +// Процедуры и функции работы с паролем. + +// Создает новый пароль, соответствующий заданным правилам проверки сложности. +// Для облегчения запоминания, пароль формируется из слогов (согласная-гласная) +// +// Параметры: +// ПараметрыПароля - Структура - возвращается функций ПараметрыПароля. +// ГСЧ - ГенераторСлучайныхЧисел - если уже используется. +// - Неопределено - создать новый. +// +// Возвращаемое значение: +// Строка - новый пароль. +// +Функция СоздатьПароль(ПараметрыПароля, ГСЧ = Неопределено) Экспорт + + НовыйПароль = ""; + + СогласныеСтрочные = ПараметрыПароля.СогласныеБуквыСтрочные; + СогласныеЗаглавные = ПараметрыПароля.СогласныеБуквыЗаглавные; + КоличествоСогласныхСтрочных = СтрДлина(СогласныеСтрочные); + КоличествоСогласныхЗаглавных = СтрДлина(СогласныеЗаглавные); + ИспользоватьСогласные = (КоличествоСогласныхСтрочных > 0) + ИЛИ (КоличествоСогласныхЗаглавных > 0); + + ГласныеСтрочные = ПараметрыПароля.ГласныеБуквыСтрочные; + ГласныеЗаглавные = ПараметрыПароля.ГласныеБуквыЗаглавные; + КоличествоГласныхСтрочных = СтрДлина(ГласныеСтрочные); + КоличествоГласныхЗаглавных = СтрДлина(ГласныеЗаглавные); + ИспользоватьГласные = (КоличествоГласныхСтрочных > 0) + ИЛИ (КоличествоГласныхЗаглавных > 0); + + Цифры = ПараметрыПароля.Цифры; + КоличествоЦифр = СтрДлина(Цифры); + ИспользоватьЦифры = (КоличествоЦифр > 0); + + СпецСимволы = ПараметрыПароля.СпецСимволы; + КоличествоСпецСимволов = СтрДлина(СпецСимволы); + ИспользоватьСпецСимволы = (КоличествоСпецСимволов > 0); + + // Создание генератора случайных чисел. + Если ГСЧ = Неопределено Тогда + ГСЧ = Новый ГенераторСлучайныхЧисел(); + КонецЕсли; + + Счетчик = 0; + + МаксимальнаяДлина = ПараметрыПароля.МаксимальнаяДлина; + МинимальнаяДлина = ПараметрыПароля.МинимальнаяДлина; + + // Определение позиции спец. символов и цифр. + Если ПараметрыПароля.ПроверятьУсловияСложности Тогда + УстановитьСтрочную = ПараметрыПароля.СтрочныеБуквыПроверятьНаличие; + УстановитьЗаглавную = ПараметрыПароля.ЗаглавныеБуквыПроверятьНаличие; + УстановитьЦифру = ПараметрыПароля.ЦифрыПроверятьНаличие; + УстановитьСпецСимвол = ПараметрыПароля.СпецСимволыПроверятьНаличие; + Иначе + УстановитьСтрочную = (КоличествоГласныхСтрочных > 0) + ИЛИ (КоличествоСогласныхСтрочных > 0); + УстановитьЗаглавную = (КоличествоГласныхЗаглавных > 0) + ИЛИ (КоличествоСогласныхЗаглавных > 0); + УстановитьЦифру = ИспользоватьЦифры; + УстановитьСпецСимвол = ИспользоватьСпецСимволы; + КонецЕсли; + + Пока Счетчик < МаксимальнаяДлина Цикл + + // Начало с согласной буквы. + Если ИспользоватьСогласные Тогда + Если УстановитьЗаглавную И УстановитьСтрочную Тогда + СтрокаПоиска = СогласныеСтрочные + СогласныеЗаглавные; + ВерхняяГраница = КоличествоСогласныхСтрочных + КоличествоСогласныхЗаглавных; + ИначеЕсли УстановитьЗаглавную Тогда + СтрокаПоиска = СогласныеЗаглавные; + ВерхняяГраница = КоличествоСогласныхЗаглавных; + Иначе + СтрокаПоиска = СогласныеСтрочные; + ВерхняяГраница = КоличествоСогласныхСтрочных; + КонецЕсли; + Если ПустаяСтрока(СтрокаПоиска) Тогда + СтрокаПоиска = СогласныеСтрочные + СогласныеЗаглавные; + ВерхняяГраница = КоличествоСогласныхСтрочных + КоличествоСогласныхЗаглавных; + КонецЕсли; + Символ = Сред(СтрокаПоиска, ГСЧ.СлучайноеЧисло(1, ВерхняяГраница), 1); + Если Символ = ВРЕГ(Символ) Тогда + Если УстановитьЗаглавную Тогда + УстановитьЗаглавную = (ГСЧ.СлучайноеЧисло(0, 1) = 1); + КонецЕсли; + Иначе + УстановитьСтрочную = Ложь; + КонецЕсли; + НовыйПароль = НовыйПароль + Символ; + Счетчик = Счетчик + 1; + Если Счетчик >= МинимальнаяДлина Тогда + Прервать; + КонецЕсли; + КонецЕсли; + + // Добавление гласных. + Если ИспользоватьГласные Тогда + Если УстановитьЗаглавную И УстановитьСтрочную Тогда + СтрокаПоиска = ГласныеСтрочные + ГласныеЗаглавные; + ВерхняяГраница = КоличествоГласныхСтрочных + КоличествоГласныхЗаглавных; + ИначеЕсли УстановитьЗаглавную Тогда + СтрокаПоиска = ГласныеЗаглавные; + ВерхняяГраница = КоличествоГласныхЗаглавных; + Иначе + СтрокаПоиска = ГласныеСтрочные; + ВерхняяГраница = КоличествоГласныхСтрочных; + КонецЕсли; + Если ПустаяСтрока(СтрокаПоиска) Тогда + СтрокаПоиска = ГласныеСтрочные + ГласныеЗаглавные; + ВерхняяГраница = КоличествоГласныхСтрочных + КоличествоГласныхЗаглавных; + КонецЕсли; + Символ = Сред(СтрокаПоиска, ГСЧ.СлучайноеЧисло(1, ВерхняяГраница), 1); + Если Символ = ВРЕГ(Символ) Тогда + УстановитьЗаглавную = Ложь; + Иначе + УстановитьСтрочную = Ложь; + КонецЕсли; + НовыйПароль = НовыйПароль + Символ; + Счетчик = Счетчик + 1; + Если Счетчик >= МинимальнаяДлина Тогда + Прервать; + КонецЕсли; + КонецЕсли; + + // Добавление цифр. + Если ИспользоватьЦифры И УстановитьЦифру Тогда + УстановитьЦифру = (ГСЧ.СлучайноеЧисло(0, 1) = 1); + Символ = Сред(Цифры, ГСЧ.СлучайноеЧисло(1, КоличествоЦифр), 1); + НовыйПароль = НовыйПароль + Символ; + Счетчик = Счетчик + 1; + Если Счетчик >= МинимальнаяДлина Тогда + Прервать; + КонецЕсли; + КонецЕсли; + + // Добавление спец. символов. + Если ИспользоватьСпецСимволы И УстановитьСпецСимвол Тогда + УстановитьСпецСимвол = (ГСЧ.СлучайноеЧисло(0, 1) = 1); + Символ = Сред(СпецСимволы, ГСЧ.СлучайноеЧисло(1, КоличествоСпецСимволов), 1); + НовыйПароль = НовыйПароль + Символ; + Счетчик = Счетчик + 1; + Если Счетчик >= МинимальнаяДлина Тогда + Прервать; + КонецЕсли; + КонецЕсли; + КонецЦикла; + + Возврат НовыйПароль; + +КонецФункции + +// Возвращает стандартные параметры с учетом длины и сложности. +// +// Параметры: +// НаименьшаяДлина - Число - наименьшая длина пароля (по умолчанию - 7). +// Сложный - Булево - учитывать требования проверки сложности пароля. +// +// Возвращаемое значение: +// Структура - параметры создания пароля. +// +Функция ПараметрыПароля(НаименьшаяДлина = 7, Сложный = Ложь) Экспорт + + ПараметрыПароля = Новый Структура(); + ПараметрыПароля.Вставить("МинимальнаяДлина", НаименьшаяДлина); + ПараметрыПароля.Вставить("МаксимальнаяДлина", 99); + ПараметрыПароля.Вставить("ГласныеБуквыСтрочные", "aeiouy"); + ПараметрыПароля.Вставить("ГласныеБуквыЗаглавные", "AEIOUY"); + ПараметрыПароля.Вставить("СогласныеБуквыСтрочные", "bcdfghjklmnpqrstvwxz"); + ПараметрыПароля.Вставить("СогласныеБуквыЗаглавные", "BCDFGHJKLMNPQRSTVWXZ"); + ПараметрыПароля.Вставить("Цифры", "0123456789"); + ПараметрыПароля.Вставить("СпецСимволы", " _.,!?"); + ПараметрыПароля.Вставить("ПроверятьУсловияСложности", Сложный); + ПараметрыПароля.Вставить("ЗаглавныеБуквыПроверятьНаличие", Истина); + ПараметрыПароля.Вставить("СтрочныеБуквыПроверятьНаличие", Истина); + ПараметрыПароля.Вставить("ЦифрыПроверятьНаличие", Истина); + ПараметрыПароля.Вставить("СпецСимволыПроверятьНаличие", Ложь); + + Возврат ПараметрыПароля; + +КонецФункции + +// Проверяет пароль на требования сложности, реализованными в 1С:Предприятии. +// +// Параметры: +// Пароль - Строка - проверяемый пароль. +// +// Возвращаемое значение: +// Булево - Истина, если соответствует. +// +Функция ПарольОтвечаетТребованиямСложности(Пароль) Экспорт + + УстановитьПривилегированныйРежим(Истина); + + ТекущаяПроверкаСложности = ПолучитьПроверкуСложностиПаролейПользователей(); + ТекущаяМинимальнаяДлина = ПолучитьМинимальнуюДлинуПаролейПользователей(); + + НачатьТранзакцию(); + Попытка + Если ТекущаяМинимальнаяДлина > 0 Тогда + УстановитьМинимальнуюДлинуПаролейПользователей(0); + КонецЕсли; + Если ТекущаяПроверкаСложности Тогда + УстановитьПроверкуСложностиПаролейПользователей(Ложь); + КонецЕсли; + + ВременныйПользовательИБ = ПользователиИнформационнойБазы.СоздатьПользователя(); + ВременныйПользовательИБ.АутентификацияСтандартная = Истина; + ВременныйПользовательИБ.Пароль = Пароль; + + ВременныйПользовательИБ.Имя = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Временный пользователь (%1)'"), + Новый УникальныйИдентификатор); + + ВременныйПользовательИБ.Записать(); + + ВременныйПользовательИБ = ПользователиИнформационнойБазы.НайтиПоУникальномуИдентификатору( + ВременныйПользовательИБ.УникальныйИдентификатор); + + УстановитьПроверкуСложностиПаролейПользователей(Истина); + Отвечает = Истина; + Попытка + ВременныйПользовательИБ.Пароль = Пароль; + ВременныйПользовательИБ.Записать(); + Исключение + Отвечает = Ложь; + КонецПопытки; + + ВременныйПользовательИБ.Удалить(); + + Если ТекущаяМинимальнаяДлина > 0 Тогда + УстановитьМинимальнуюДлинуПаролейПользователей(ТекущаяМинимальнаяДлина); + КонецЕсли; + Если Не ТекущаяПроверкаСложности Тогда + УстановитьПроверкуСложностиПаролейПользователей(Ложь); + КонецЕсли; + + ЗафиксироватьТранзакцию(); + Исключение + ИнформацияОбОшибке = ИнформацияОбОшибке(); + + Если ТекущаяМинимальнаяДлина <> ПолучитьМинимальнуюДлинуПаролейПользователей() Тогда + УстановитьМинимальнуюДлинуПаролейПользователей(ТекущаяМинимальнаяДлина); + КонецЕсли; + Если ТекущаяПроверкаСложности <> ПолучитьПроверкуСложностиПаролейПользователей() Тогда + УстановитьПроверкуСложностиПаролейПользователей(ТекущаяПроверкаСложности); + КонецЕсли; + + ОтменитьТранзакцию(); + ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Не удалось проверить отвечает ли пароль требованиям сложности по причине: + |%1'"), + КраткоеПредставлениеОшибки(ИнформацияОбОшибке)); + КонецПопытки; + + Возврат Отвечает; + +КонецФункции + +// Проверяет наличие учетной записи и прав, необходимых для изменения пароля. +// +// Параметры: +// Пользователь - СправочникСсылка.Пользователи, +// СправочникСсылка.ВнешниеПользователи - пользователь для смены пароля. +// +// ДополнительныеПараметры - Структура - (возвращаемое значение) со свойствами: +// * ТекстОшибки - Строка - описание ошибки, если нет возможности изменить пароль. +// * ИдентификаторПользователяИБ - УникальныйИдентификатор - идентификатор пользователя ИБ. +// * ЭтоТекущийПользовательИБ - Булево - Истина, если пользователь является текущим. +// +// Возвращаемое значение: +// Булево - Ложь, если нет возможности изменить пароль. +// +Функция ВозможноИзменитьПароль(Пользователь, ДополнительныеПараметры = Неопределено) Экспорт + + Если ТипЗнч(ДополнительныеПараметры) <> Тип("Структура") Тогда + ДополнительныеПараметры = Новый Структура; + КонецЕсли; + + Если ОбщегоНазначенияПовтИсп.РазделениеВключено() + И ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаВМоделиСервиса.ПользователиВМоделиСервиса") Тогда + + МодульПользователиСлужебныйВМоделиСервиса = ОбщегоНазначения.ОбщийМодуль("ПользователиСлужебныйВМоделиСервиса"); + ДействияСПользователемСервиса = МодульПользователиСлужебныйВМоделиСервиса.ПолучитьДействияСПользователемСервиса( + Пользователь); + + Если Не ДействияСПользователемСервиса.ИзменениеПароля Тогда + ДополнительныеПараметры.Вставить("ТекстОшибки", СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Сервис: Недостаточно прав для изменения пароля пользователя ""%1"".'"), Пользователь)); + Возврат Ложь; + КонецЕсли; + КонецЕсли; + + УстановитьПривилегированныйРежим(Истина); + + РеквизитыПользователя = ОбщегоНазначения.ЗначенияРеквизитовОбъекта( + Пользователь, "Ссылка, Недействителен, ИдентификаторПользователяИБ, Подготовлен"); + + Если РеквизитыПользователя.Недействителен <> Ложь Тогда + ДополнительныеПараметры.Вставить("ТекстОшибки", СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Пользователь ""%1"" недействителен.'"), Пользователь)); + Возврат Ложь; + КонецЕсли; + + ИдентификаторПользователяИБ = РеквизитыПользователя.ИдентификаторПользователяИБ; + + Если ТипЗнч(ИдентификаторПользователяИБ) <> Тип("УникальныйИдентификатор") Тогда + ПользовательИБ = Неопределено; + Иначе + ПользовательИБ = ПользователиИнформационнойБазы.НайтиПоУникальномуИдентификатору(ИдентификаторПользователяИБ); + КонецЕсли; + + УстановитьПривилегированныйРежим(Ложь); + + Если ПользовательИБ = Неопределено Тогда + ДополнительныеПараметры.Вставить("ТекстОшибки", СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Не найдена учетная запись пользователя ""%1"".'"), Пользователь)); + Возврат Ложь; + КонецЕсли; + + ДополнительныеПараметры.Вставить("ИдентификаторПользователяИБ", ИдентификаторПользователяИБ); + + ИдентификаторТекущегоПользователяИБ = ПользователиИнформационнойБазы.ТекущийПользователь().УникальныйИдентификатор; + ДополнительныеПараметры.Вставить("ЭтоТекущийПользовательИБ", ИдентификаторПользователяИБ = ИдентификаторТекущегоПользователяИБ); + + УровеньДоступа = УровеньДоступаКСвойствамПользователя(РеквизитыПользователя); + + Если Не ДополнительныеПараметры.ЭтоТекущийПользовательИБ + И Не УровеньДоступа.НастройкиДляВхода Тогда + + ДополнительныеПараметры.Вставить("ТекстОшибки", СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Недостаточно прав для изменения пароля пользователя ""%1"".'"), Пользователь)); + Возврат Ложь; + КонецЕсли; + + ДополнительныеПараметры.Вставить("ПарольУстановлен", ПользовательИБ.ПарольУстановлен); + + Если ПользовательИБ.ЗапрещеноИзменятьПароль Тогда + Если УровеньДоступа.НастройкиДляВхода Тогда + Если ДополнительныеПараметры.Свойство("УчитыватьСвойствоЗапрещеноИзменятьПароль") Тогда + ДополнительныеПараметры.Вставить("ТекстОшибки", СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Установлен запрет изменения пароля пользователя ""%1"".'"), Пользователь)); + Возврат Ложь; + КонецЕсли; + Иначе + ДополнительныеПараметры.Вставить("ТекстОшибки", СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Установлен запрет изменения пароля пользователя ""%1"". + |Обратитесь к администратору.'"), Пользователь)); + Возврат Ложь; + КонецЕсли; + КонецЕсли; + + // Проверка минимального срока действия пароля. + Если УровеньДоступа.НастройкиДляВхода Тогда + Возврат Истина; + КонецЕсли; + + Если ТипЗнч(Пользователь) = Тип("СправочникСсылка.ВнешниеПользователи") Тогда + НастройкиВхода = ПользователиСлужебныйПовтИсп.Настройки().ВнешниеПользователи; + Иначе + НастройкиВхода = ПользователиСлужебныйПовтИсп.Настройки().Пользователи; + КонецЕсли; + + Если Не ЗначениеЗаполнено(НастройкиВхода.МинимальныйСрокДействияПароля) Тогда + Возврат Истина; + КонецЕсли; + + НаборЗаписей = РегистрыСведений.СведенияОПользователях.СоздатьНаборЗаписей(); + НаборЗаписей.Отбор.Пользователь.Установить(Пользователь); + НаборЗаписей.Прочитать(); + + Если НаборЗаписей.Количество() = 0 Тогда + Возврат Истина; + КонецЕсли; + СведенияОПользователе = НаборЗаписей[0]; + + Если Не ЗначениеЗаполнено(СведенияОПользователе.ДатаНачалаИспользованияПароля) Тогда + Возврат Истина; + КонецЕсли; + + НачалоДняТекущейДатыСеанса = НачалоДня(ТекущаяДатаСеанса()); + ОстатокМинимальногоСрокаДействияПароля = НастройкиВхода.МинимальныйСрокДействияПароля + - (НачалоДняТекущейДатыСеанса - СведенияОПользователе.ДатаНачалаИспользованияПароля) / (24*60*60); + + Если ОстатокМинимальногоСрокаДействияПароля <= 0 Тогда + Возврат Истина; + КонецЕсли; + + КоличествоДней = ОстатокМинимальногоСрокаДействияПароля; + + ЧислоИПредмет = Формат(КоличествоДней, "ЧГ=") + " " + + ПользователиСлужебныйКлиентСервер.ПредметЦелогоЧисла(КоличествоДней, + "Л = ru_RU", НСтр("ru = 'день,дня,дней,,,,,,0'")); + + ДополнительныеПараметры.Вставить("ТекстОшибки", СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Пароль можно будет сменить только через %1.'"), ЧислоИПредмет)); + + Возврат Ложь; + +КонецФункции + +// Для форм элементов справочников Пользователи и ВнешниеПользователи. +Процедура ПрочитатьСведенияОПользователе(Форма) Экспорт + + Если ОбщегоНазначенияПовтИсп.РазделениеВключено() Тогда + Возврат; + КонецЕсли; + + Пользователь = Форма.Объект.Ссылка; + + Если Не ЗначениеЗаполнено(Пользователь) Тогда + Возврат; + КонецЕсли; + + УровеньДоступа = УровеньДоступаКСвойствамПользователя(Форма.Объект); + + НаборЗаписей = РегистрыСведений.СведенияОПользователях.СоздатьНаборЗаписей(); + НаборЗаписей.Отбор.Пользователь.Установить(Пользователь); + НаборЗаписей.Прочитать(); + + Форма.ПотребоватьСменуПароляПриВходе = Ложь; + Форма.СрокДействияНеОграничен = Ложь; + Форма.СрокДействия = Неопределено; + Форма.ПросрочкаРаботыВПрограммеДоЗапрещенияВхода = 0; + + Если НаборЗаписей.Количество() > 0 Тогда + + Если УровеньДоступа.УправлениеСписком + Или УровеньДоступа.ИзменениеТекущего Тогда + + ЗаполнитьЗначенияСвойств(Форма, НаборЗаписей[0], + "ПотребоватьСменуПароляПриВходе, + |СрокДействияНеОграничен, + |СрокДействия, + |ПросрочкаРаботыВПрограммеДоЗапрещенияВхода"); + Иначе + Форма.ПотребоватьСменуПароляПриВходе = НаборЗаписей[0].ПотребоватьСменуПароляПриВходе; + КонецЕсли; + КонецЕсли; + +КонецПроцедуры + +// Для форм элементов справочников Пользователи и ВнешниеПользователи. +Процедура ЗаписатьСведенияОПользователе(Форма, ТекущийОбъект) Экспорт + + Если ОбщегоНазначенияПовтИсп.РазделениеВключено() Тогда + Возврат; + КонецЕсли; + + УровеньДоступа = УровеньДоступаКСвойствамПользователя(ТекущийОбъект); + + Пользователь = ТекущийОбъект.Ссылка; + + Блокировка = Новый БлокировкаДанных; + ЭлементБлокировки = Блокировка.Добавить("РегистрСведений.СведенияОПользователях"); + ЭлементБлокировки.Режим = РежимБлокировкиДанных.Исключительный; + ЭлементБлокировки.УстановитьЗначение("Пользователь", Пользователь); + НачатьТранзакцию(); + Попытка + Блокировка.Заблокировать(); + НаборЗаписей = РегистрыСведений.СведенияОПользователях.СоздатьНаборЗаписей(); + НаборЗаписей.Отбор.Пользователь.Установить(Пользователь); + НаборЗаписей.Прочитать(); + Если НаборЗаписей.Количество() = 0 Тогда + СведенияОПользователе = НаборЗаписей.Добавить(); + СведенияОПользователе.Пользователь = Пользователь; + Иначе + СведенияОПользователе = НаборЗаписей[0]; + КонецЕсли; + + Если УровеньДоступа.НастройкиДляВхода Тогда + ЗаполнитьЗначенияСвойств(СведенияОПользователе, Форма, + "ПотребоватьСменуПароляПриВходе, + |СрокДействияНеОграничен, + |СрокДействия, + |ПросрочкаРаботыВПрограммеДоЗапрещенияВхода"); + Иначе + СведенияОПользователе.ПотребоватьСменуПароляПриВходе = Форма.ПотребоватьСменуПароляПриВходе; + КонецЕсли; + + НаборЗаписей.Записать(); + ЗафиксироватьТранзакцию(); + Исключение + ОтменитьТранзакцию(); + ВызватьИсключение; + КонецПопытки; + +КонецПроцедуры + //////////////////////////////////////////////////////////////////////////////// // Процедуры и функции работы с пользователями. @@ -1204,32 +2165,68 @@ Знач ИдентификаторПользователяИБ = Неопределено, Совпадает = Ложь) Экспорт - УстановитьПривилегированныйРежим(Истина); - - НачатьТранзакцию(); - Попытка - ВременныйПользовательИБ = ПользователиИнформационнойБазы.СоздатьПользователя(); - ВременныйПользовательИБ.АутентификацияСтандартная = Истина; - ВременныйПользовательИБ.Пароль = Пароль; + Если ОбщегоНазначенияПовтИсп.РазделениеВключено() Тогда + ХешированиеДанных = Новый ХешированиеДанных(ХешФункция.SHA1); + ХешированиеДанных.Добавить(Пароль); - ВременныйПользовательИБ.Имя = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Временный пользователь (%1)'"), - Новый УникальныйИдентификатор); + СохраняемоеЗначениеПароля = Base64Строка(ХешированиеДанных.ХешСумма); - ВременныйПользовательИБ.Записать(); + ХешированиеДанных = Новый ХешированиеДанных(ХешФункция.SHA1); + ХешированиеДанных.Добавить(ВРег(Пароль)); - ВременныйПользовательИБ = ПользователиИнформационнойБазы.НайтиПоУникальномуИдентификатору( - ВременныйПользовательИБ.УникальныйИдентификатор); + СохраняемоеЗначениеПароля = СохраняемоеЗначениеПароля + "," + + Base64Строка(ХешированиеДанных.ХешСумма); + Иначе + ТекущаяПроверкаСложности = ПолучитьПроверкуСложностиПаролейПользователей(); + ТекущаяМинимальнаяДлина = ПолучитьМинимальнуюДлинуПаролейПользователей(); - СохраняемоеЗначениеПароля = ВременныйПользовательИБ.СохраняемоеЗначениеПароля; - ОтменитьТранзакцию(); - Исключение - ОтменитьТранзакцию(); - ВызватьИсключение; - КонецПопытки; + НачатьТранзакцию(); + Попытка + Если ТекущаяМинимальнаяДлина > 0 Тогда + УстановитьМинимальнуюДлинуПаролейПользователей(0); + КонецЕсли; + Если ТекущаяПроверкаСложности Тогда + УстановитьПроверкуСложностиПаролейПользователей(Ложь); + КонецЕсли; + + ВременныйПользовательИБ = ПользователиИнформационнойБазы.СоздатьПользователя(); + ВременныйПользовательИБ.АутентификацияСтандартная = Ложь; + ВременныйПользовательИБ.Пароль = Пароль; + + ВременныйПользовательИБ.Имя = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Временный пользователь (%1)'"), + Новый УникальныйИдентификатор); + + ВременныйПользовательИБ.Записать(); + + ВременныйПользовательИБ = ПользователиИнформационнойБазы.НайтиПоУникальномуИдентификатору( + ВременныйПользовательИБ.УникальныйИдентификатор); + + СохраняемоеЗначениеПароля = ВременныйПользовательИБ.СохраняемоеЗначениеПароля; + + ВременныйПользовательИБ.Удалить(); + + Если ТекущаяМинимальнаяДлина > 0 Тогда + УстановитьМинимальнуюДлинуПаролейПользователей(ТекущаяМинимальнаяДлина); + КонецЕсли; + Если ТекущаяПроверкаСложности Тогда + УстановитьПроверкуСложностиПаролейПользователей(Истина); + КонецЕсли; + + ЗафиксироватьТранзакцию(); + Исключение + Если ТекущаяМинимальнаяДлина <> ПолучитьМинимальнуюДлинуПаролейПользователей() Тогда + УстановитьМинимальнуюДлинуПаролейПользователей(ТекущаяМинимальнаяДлина); + КонецЕсли; + Если ТекущаяПроверкаСложности <> ПолучитьПроверкуСложностиПаролейПользователей() Тогда + УстановитьПроверкуСложностиПаролейПользователей(ТекущаяПроверкаСложности); + КонецЕсли; + + ОтменитьТранзакцию(); + ВызватьИсключение; + КонецПопытки; + КонецЕсли; Если ТипЗнч(ИдентификаторПользователяИБ) = Тип("УникальныйИдентификатор") Тогда - ПользовательИБ = ПользователиИнформационнойБазы.НайтиПоУникальномуИдентификатору( ИдентификаторПользователяИБ); @@ -1245,28 +2242,30 @@ // Возвращает текущий уровень доступа на изменение свойств пользователя ИБ. // // Параметры: -// ОписаниеОбъекта - СправочникОбъект.Пользователи -// - СправочникОбъект.ВнешниеПользователи +// ОписаниеОбъекта - СправочникОбъект.Пользователи - +// - СправочникОбъект.ВнешниеПользователи - // - ДанныеФормыСтруктура - созданная из объектов указанных выше. // // ПараметрыОбработки - Неопределено - получить данные из описания объекта, // иначе взять уже готовые данные из параметров обработки. // // Возвращаемое значение: -// Структура - содержит свойства: -// - АдминистраторСистемы - Булево - любые действия с любым пользователем и его пользователем ИБ. -// - ПолныеПрава - Булево - то же, АдминистраторСистемы, исключая администраторов системы. -// - УправлениеСписком - добавление новых пользователей и изменение существующих: -// - для пользователей, которым еще не разрешался вход в программу (новых), -// можно настроить любые свойства, кроме включения входа в программу, -// - для пользователей, которым уже разрешался вход в программу, -// можно настроить любые свойства, кроме включения входа в программу -// и настройки аутентификации (см. ниже). -// - НастройкиДляВхода - Булево - изменение свойств пользователя ИБ: Имя, ПользовательОС и -// свойств элемента справочника АутентификацияOpenID, АутентификацияСтандартная, -// АутентификацияОС и Роли (если нет запрета редактирования при внедрении). -// - ИзменениеТекущего - изменение свойств текущего пользователя Пароль и Язык. -// - НетДоступа - нет ни одного из указанных выше уровней доступа. +// Структура - со свойствами: +// * АдминистраторСистемы - Булево - любые действия с любым пользователем и его пользователем ИБ. +// * ПолныеПрава - Булево - то же, АдминистраторСистемы, исключая администраторов системы. +// * УправлениеСписком - Булево - добавление новых пользователей и изменение существующих: +// - для пользователей, которым еще не разрешался вход в программу (новых), +// можно настроить любые свойства, кроме включения входа в программу, +// - для пользователей, которым уже разрешался вход в программу, +// можно настроить любые свойства, кроме включения входа в программу +// и настройки аутентификации (см. ниже). +// * ИзменениеРазрешенияНаВход - Булево - изменение флажка "Вход в программу разрешен". +// * ОтключениеРазрешенияНаВход - Булево - снятие флажка "Вход в программу разрешен". +// * НастройкиДляВхода - Булево - изменение свойств пользователя ИБ: Имя, ПользовательОС и +// свойств элемента справочника АутентификацияOpenID, АутентификацияСтандартная, +// АутентификацияОС и Роли (если нет запрета редактирования при внедрении). +// * ИзменениеТекущего - Булево - изменение свойств текущего пользователя Пароль и Язык. +// * НетДоступа - Булево - нет ни одного из указанных выше уровней доступа. // Функция УровеньДоступаКСвойствамПользователя(ОписаниеОбъекта, ПараметрыОбработки = Неопределено) Экспорт @@ -1323,10 +2322,21 @@ И Не Пользователи.ВходВПрограммуРазрешен(ПараметрыОбработки.ОписаниеСтарогоПользователяИБ); КонецЕсли; - // Полноправный пользователь (основных данные). + УровеньДоступа.Вставить("ИзменениеРазрешенияНаВход", + УровеньДоступа.АдминистраторСистемы + Или УровеньДоступа.ПолныеПрава + И Не Пользователи.ЭтоПолноправныйПользователь(ОписаниеОбъекта.Ссылка, Истина)); + + УровеньДоступа.Вставить("ОтключениеРазрешенияНаВход", + УровеньДоступа.АдминистраторСистемы + Или УровеньДоступа.ПолныеПрава + И Не Пользователи.ЭтоПолноправныйПользователь(ОписаниеОбъекта.Ссылка, Истина) + Или УровеньДоступа.УправлениеСписком); + УровеньДоступа.Вставить("НастройкиДляВхода", УровеньДоступа.АдминистраторСистемы Или УровеньДоступа.ПолныеПрава + И Не Пользователи.ЭтоПолноправныйПользователь(ОписаниеОбъекта.Ссылка, Истина) Или УровеньДоступа.УправлениеСписком И ПользовательБезНастроекДляВходаИлиПодготовлен); @@ -1341,6 +2351,25 @@ КонецФункции +// Проверяет, что указанный пользователь имеем более высокий уровень доступа, чем текущий пользователь. +Функция УровеньДоступаПользователяВыше(ОписаниеПользователя, ТекущийУровеньДоступа) Экспорт + + Если ТипЗнч(ОписаниеПользователя) = Тип("СправочникСсылка.Пользователи") + Или ТипЗнч(ОписаниеПользователя) = Тип("СправочникСсылка.ВнешниеПользователи") Тогда + + Возврат Пользователи.ЭтоПолноправныйПользователь(ОписаниеПользователя, Истина, Ложь) + И Не ТекущийУровеньДоступа.АдминистраторСистемы + Или Пользователи.ЭтоПолноправныйПользователь(ОписаниеПользователя, Ложь, Ложь) + И Не ТекущийУровеньДоступа.ПолныеПрава; + Иначе + Возврат ОписаниеПользователя.Роли.Найти("АдминистраторСистемы") <> Неопределено + И Не ТекущийУровеньДоступа.АдминистраторСистемы + Или ОписаниеПользователя.Роли.Найти("ПолныеПрава") <> Неопределено + И Не ТекущийУровеньДоступа.ПолныеПрава; + КонецЕсли; + +КонецФункции + // Вызывается ПередЗаписью Пользователя или Внешнего пользователя. Процедура НачатьОбработкуПользователяИБ(ПользовательОбъект, ПараметрыОбработки, @@ -1386,7 +2415,7 @@ КонецЕсли; Если ПараметрыОбработки.СтарыйПользователь.Подготовлен <> ПользовательОбъект.Подготовлен - И Не УровеньДоступа.ПолныеПрава Тогда + И Не УровеньДоступа.ИзменениеРазрешенияНаВход Тогда ВызватьИсключение ПараметрыОбработки.ТекстСообщенияНедостаточноПрав; КонецЕсли; @@ -1405,6 +2434,16 @@ ДополнительныеСвойства.ОписаниеПользователяИБ.Вставить("ВходВПрограммуРазрешен", Ложь); КонецЕсли; + // Поддержка обновления полного имени пользователя ИБ при изменении наименования. + Если ПараметрыОбработки.СтарыйПользовательИБСуществует + И Не ДополнительныеСвойства.Свойство("ОписаниеПользователяИБ") + И ПараметрыОбработки.ОписаниеСтарогоПользователяИБ.ПолноеИмя + <> ПользовательОбъект.Наименование Тогда + + ДополнительныеСвойства.Вставить("ОписаниеПользователяИБ", Новый Структура); + ДополнительныеСвойства.ОписаниеПользователяИБ.Вставить("Действие", "Записать"); + КонецЕсли; + Если НЕ ДополнительныеСвойства.Свойство("ОписаниеПользователяИБ") Тогда Если УровеньДоступа.УправлениеСписком И Не ПараметрыОбработки.СтарыйПользовательИБСуществует @@ -1452,9 +2491,7 @@ Если ОписаниеПользователяИБ.Действие = "Удалить" Тогда - Если ПараметрыОбработки.СтарыйПользовательИБСуществует И Не УровеньДоступа.АдминистраторСистемы - Или Не ПараметрыОбработки.СтарыйПользовательИБСуществует И Не УровеньДоступа.ПолныеПрава Тогда - + Если Не УровеньДоступа.ИзменениеРазрешенияНаВход Тогда ВызватьИсключение ПараметрыОбработки.ТекстСообщенияНедостаточноПрав; КонецЕсли; @@ -1509,48 +2546,43 @@ Если ОписаниеПользователяИБ.Действие = "Записать" Тогда // Проверка прав на изменение пользователей с широким доступом. - Если ПараметрыОбработки.СтарыйПользовательИБСуществует Тогда + Если ПараметрыОбработки.СтарыйПользовательИБСуществует + И УровеньДоступаПользователяВыше(ПараметрыОбработки.ОписаниеСтарогоПользователяИБ, УровеньДоступа) Тогда - Если Не ПараметрыОбработки.ОписаниеСтарогоПользователяИБ.Роли.Найти("АдминистраторСистемы") = Неопределено - И Не УровеньДоступа.АдминистраторСистемы - ИЛИ Не ПараметрыОбработки.ОписаниеСтарогоПользователяИБ.Роли.Найти("ПолныеПрава") = Неопределено - И Не УровеньДоступа.ПолныеПрава Тогда - - ВызватьИсключение ПараметрыОбработки.ТекстСообщенияНедостаточноПрав; - КонецЕсли; + ВызватьИсключение ПараметрыОбработки.ТекстСообщенияНедостаточноПрав; КонецЕсли; // Проверка попытки изменения недоступных свойств. - ДопустимыеСвойства = Новый Структура; - ДопустимыеСвойства.Вставить("УникальныйИдентификатор"); // Проверено выше. - - Если УровеньДоступа.ИзменениеТекущего Тогда - ДопустимыеСвойства.Вставить("Пароль"); - ДопустимыеСвойства.Вставить("Язык"); - КонецЕсли; - - Если УровеньДоступа.УправлениеСписком Тогда - ДопустимыеСвойства.Вставить("ПолноеИмя"); - ДопустимыеСвойства.Вставить("ПоказыватьВСпискеВыбора"); - ДопустимыеСвойства.Вставить("ЗапрещеноИзменятьПароль"); - ДопустимыеСвойства.Вставить("Язык"); - ДопустимыеСвойства.Вставить("РежимЗапуска"); - КонецЕсли; - - Если УровеньДоступа.НастройкиДляВхода Тогда - ДопустимыеСвойства.Вставить("Имя"); - ДопустимыеСвойства.Вставить("АутентификацияСтандартная"); - ДопустимыеСвойства.Вставить("Пароль"); - ДопустимыеСвойства.Вставить("АутентификацияОС"); - ДопустимыеСвойства.Вставить("ПользовательОС"); - ДопустимыеСвойства.Вставить("АутентификацияOpenID"); - ДопустимыеСвойства.Вставить("Роли"); - КонецЕсли; - Если Не УровеньДоступа.ПолныеПрава Тогда + ДопустимыеСвойства = Новый Структура; + ДопустимыеСвойства.Вставить("УникальныйИдентификатор"); // Проверено выше. + + Если УровеньДоступа.ИзменениеТекущего Тогда + ДопустимыеСвойства.Вставить("Пароль"); + ДопустимыеСвойства.Вставить("Язык"); + КонецЕсли; + + Если УровеньДоступа.УправлениеСписком Тогда + ДопустимыеСвойства.Вставить("ПолноеИмя"); + ДопустимыеСвойства.Вставить("ПоказыватьВСпискеВыбора"); + ДопустимыеСвойства.Вставить("ЗапрещеноИзменятьПароль"); + ДопустимыеСвойства.Вставить("Язык"); + ДопустимыеСвойства.Вставить("РежимЗапуска"); + КонецЕсли; + + Если УровеньДоступа.НастройкиДляВхода Тогда + ДопустимыеСвойства.Вставить("Имя"); + ДопустимыеСвойства.Вставить("АутентификацияСтандартная"); + ДопустимыеСвойства.Вставить("Пароль"); + ДопустимыеСвойства.Вставить("АутентификацияОС"); + ДопустимыеСвойства.Вставить("ПользовательОС"); + ДопустимыеСвойства.Вставить("АутентификацияOpenID"); + ДопустимыеСвойства.Вставить("Роли"); + КонецЕсли; + ВсеСвойства = Пользователи.НовоеОписаниеПользователяИБ(); - Для каждого КлючИЗначение Из ОписаниеПользователяИБ Цикл + Для Каждого КлючИЗначение Из ОписаниеПользователяИБ Цикл Если ВсеСвойства.Свойство(КлючИЗначение.Ключ) И Не ДопустимыеСвойства.Свойство(КлючИЗначение.Ключ) Тогда @@ -1578,15 +2610,10 @@ ПараметрыОбработки.Вставить("ОписаниеНовогоПользователяИБ", ОписаниеНовогоПользователяИБ); // Проверка прав на изменение пользователей с широким доступом. - Если ПараметрыОбработки.СтарыйПользовательИБСуществует Тогда + Если ПараметрыОбработки.СтарыйПользовательИБСуществует + И УровеньДоступаПользователяВыше(ПараметрыОбработки.ОписаниеНовогоПользователяИБ, УровеньДоступа) Тогда - Если Не ПараметрыОбработки.ОписаниеНовогоПользователяИБ.Роли.Найти("АдминистраторСистемы") = Неопределено - И Не УровеньДоступа.АдминистраторСистемы - ИЛИ Не ПараметрыОбработки.ОписаниеНовогоПользователяИБ.Роли.Найти("ПолныеПрава") = Неопределено - И Не УровеньДоступа.ПолныеПрава Тогда - - ВызватьИсключение ПараметрыОбработки.ТекстСообщенияНедостаточноПрав; - КонецЕсли; + ВызватьИсключение ПараметрыОбработки.ТекстСообщенияНедостаточноПрав; КонецЕсли; Иначе ПараметрыОбработки.Вставить("НовыйПользовательИБСуществует", Ложь); @@ -1616,13 +2643,8 @@ КонецЕсли; Если ПараметрыОбработки.Свойство("ЗаписьАдминистратора") Тогда - ОбработчикиСобытия = ОбщегоНазначения.ОбработчикиСлужебногоСобытия( - "СтандартныеПодсистемы.Пользователи\ПриЗаписиАдминистратора"); - УстановитьПривилегированныйРежим(Истина); - Для каждого Обработчик Из ОбработчикиСобытия Цикл - Обработчик.Модуль.ПриЗаписиАдминистратора(ПользовательОбъект.Ссылка); - КонецЦикла; + ИнтеграцияСтандартныхПодсистем.ПриЗаписиАдминистратора(ПользовательОбъект.Ссылка); УстановитьПривилегированныйРежим(Ложь); КонецЕсли; @@ -1641,7 +2663,16 @@ ПарольПользователяСервиса = ПользовательОбъект.ДополнительныеСвойства.ПарольПользователяСервиса; КонецЕсли; - ПослеУстановкиПользователяИБ(ПользовательОбъект.Ссылка, ПарольПользователяСервиса); + ИнтеграцияСтандартныхПодсистем.ПослеУстановкиПользователяИБ(ПользовательОбъект.Ссылка, + ПарольПользователяСервиса); + КонецЕсли; + + Если ПараметрыОбработки.Действие = "Записать" + И Пользователи.ВходВПрограммуРазрешен(ПараметрыОбработки.ОписаниеНовогоПользователяИБ) Тогда + + УстановитьПривилегированныйРежим(Истина); + СброситьРесурсДатаАвтоматическогоЗапрещенияВхода(ПользовательОбъект.Ссылка); + УстановитьПривилегированныйРежим(Ложь); КонецЕсли; СкопироватьНастройкиПользователяИБ(ПользовательОбъект, ПараметрыОбработки); @@ -1750,12 +2781,7 @@ Возврат Истина; КонецЕсли; - ОбработчикиСобытия = ОбщегоНазначения.ОбработчикиСлужебногоСобытия( - "СтандартныеПодсистемы.Пользователи\ПриОпределенииТекстаВопросаПередЗаписьюПервогоАдминистратора"); - - Для каждого Обработчик Из ОбработчикиСобытия Цикл - Обработчик.Модуль.ПриОпределенииТекстаВопросаПередЗаписьюПервогоАдминистратора(Текст); - КонецЦикла; + ИнтеграцияСтандартныхПодсистем.ПриОпределенииТекстаВопросаПередЗаписьюПервогоАдминистратора(Текст); Возврат Истина; КонецЕсли; @@ -1772,73 +2798,6 @@ КонецФункции -// Возвращает свойства пользователя для пользователя ИБ с пустым именем. -Функция СвойстваНеуказанногоПользователя() Экспорт - - УстановитьПривилегированныйРежим(Истина); - - Свойства = Новый Структура; - - // Ссылка на найденный элемент справочника - // соответствующий неуказанному пользователю. - Свойства.Вставить("Ссылка", Неопределено); - - // Ссылка, используемая для поиска и создания - // неуказанного пользователя в справочнике Пользователи. - Свойства.Вставить("СтандартнаяСсылка", Справочники.Пользователи.ПолучитьСсылку( - Новый УникальныйИдентификатор("aa00559e-ad84-4494-88fd-f0826edc46f0"))); - - // Полное имя, которое устанавливается в элемент справочника Пользователи - // при создании несуществующего неуказанного пользователя. - Свойства.Вставить("ПолноеИмя", Пользователи.ПолноеИмяНеуказанногоПользователя()); - - // Полное имя, которое используется для поиска неуказанного пользователя - // старым способом, необходимым для поддержки старых версий - // неуказанного пользователя. Это имя не требуется изменять. - Свойства.Вставить("ПолноеИмяДляПоиска", НСтр("ru = '<Не указан>'")); - - // Поиск по уникальному идентификатору. - Запрос = Новый Запрос; - Запрос.УстановитьПараметр("Ссылка", Свойства.СтандартнаяСсылка); - Запрос.Текст = - "ВЫБРАТЬ ПЕРВЫЕ 1 - | ИСТИНА КАК ЗначениеИстина - |ИЗ - | Справочник.Пользователи КАК Пользователи - |ГДЕ - | Пользователи.Ссылка = &Ссылка"; - - НачатьТранзакцию(); - Попытка - Если Запрос.Выполнить().Пустой() Тогда - Запрос.УстановитьПараметр("ПолноеИмя", Свойства.ПолноеИмяДляПоиска); - Запрос.Текст = - "ВЫБРАТЬ ПЕРВЫЕ 1 - | Пользователи.Ссылка - |ИЗ - | Справочник.Пользователи КАК Пользователи - |ГДЕ - | Пользователи.Наименование = &ПолноеИмя"; - Результат = Запрос.Выполнить(); - - Если НЕ Результат.Пустой() Тогда - Выборка = Результат.Выбрать(); - Выборка.Следующий(); - Свойства.Ссылка = Выборка.Ссылка; - КонецЕсли; - Иначе - Свойства.Ссылка = Свойства.СтандартнаяСсылка; - КонецЕсли; - ЗафиксироватьТранзакцию(); - Исключение - ОтменитьТранзакцию(); - ВызватьИсключение; - КонецПопытки; - - Возврат Свойства; - -КонецФункции - // Создает пользователя <Не указан>. // // Возвращаемое значение: @@ -1985,135 +2944,6 @@ КонецФункции -// Записывает указанного Пользователя ИБ с учетом режима разделения данных. -// Если режим разделения данных включен, тогда перед записью проверяются -// права записываемого пользователя. -// -// Параметры: -// ПользовательИБ - ПользовательИнформационнойБазы - объект, который требуется записать. -// -Процедура ЗаписатьПользователяИнформационнойБазы(ПользовательИБ) Экспорт - - Обработчики = ОбщегоНазначения.ОбработчикиСлужебногоСобытия("СтандартныеПодсистемы.Пользователи\ПередЗаписьюПользователяИБ"); - Для Каждого Обработчик Из Обработчики Цикл - Обработчик.Модуль.ПередЗаписьюПользователяИБ(ПользовательИБ.УникальныйИдентификатор); - КонецЦикла; - - ПроверитьПраваПользователя(ПользовательИБ, "ПередЗаписью"); - - ОбновлениеИнформационнойБазыСлужебный.УстановитьФлагОтображенияОписанийДляНовогоПользователя(ПользовательИБ.Имя); - - ПользовательИБ.Записать(); - -КонецПроцедуры - -// Проверяет существование пользователя информационной базы. -// -// Параметры: -// Идентификатор - Строка - имя пользователя ИБ, -// УникальныйИдентификатор - идентификатор пользователя ИБ. -// -// Возвращаемое значение: -// Булево. -// -Функция ПользовательИБСуществует(Знач Идентификатор) Экспорт - - УстановитьПривилегированныйРежим(Истина); - - Если ТипЗнч(Идентификатор) = Тип("УникальныйИдентификатор") Тогда - ПользовательИБ = ПользователиИнформационнойБазы.НайтиПоУникальномуИдентификатору(Идентификатор); - Иначе - ПользовательИБ = ПользователиИнформационнойБазы.НайтиПоИмени(Идентификатор); - КонецЕсли; - - Если ПользовательИБ = Неопределено Тогда - Возврат Ложь; - Иначе - Возврат Истина; - КонецЕсли; - -КонецФункции - -// Определяет наличие элемента в справочнике Пользователи -// или справочнике ВнешниеПользователи по уникальному идентификатору -// пользователя информационной. -// Функция используется для проверки наличия сопоставления пользователяИБ только -// с одним элементом справочников Пользователи и ВнешниеПользователи. -// -// Параметры: -// УникальныйИдентификатор - идентификатор пользователя ИБ. -// -// СсылкаНаТекущего - СправочникСсылка.Пользователи, -// СправочникСсылка.ВнешниеПользователи - исключить -// указанную ссылку из поиска. -// Неопределено - искать среди всех элементов справочников. -// -// НайденныйПользователь (Возвращаемое значение): -// Неопределено - пользователь не существует. -// СправочникСсылка.Пользователи, -// СправочникСсылка.ВнешниеПользователи, если найден. -// -// ИдентификаторПользователяСервиса - Булево. -// Ложь - проверять ИдентификаторПользователяИБ. -// Истина - проверять ИдентификаторПользователяСервиса. -// -// Возвращаемое значение: -// Булево. -// -Функция ПользовательПоИдентификаторуСуществует(УникальныйИдентификатор, - СсылкаНаТекущего = Неопределено, - НайденныйПользователь = Неопределено, - ИдентификаторПользователяСервиса = Ложь) Экспорт - - УстановитьПривилегированныйРежим(Истина); - - Запрос = Новый Запрос; - Запрос.УстановитьПараметр("СсылкаНаТекущего", СсылкаНаТекущего); - Запрос.УстановитьПараметр("УникальныйИдентификатор", УникальныйИдентификатор); - Запрос.Текст = - "ВЫБРАТЬ - | Пользователи.Ссылка КАК Пользователь - |ИЗ - | Справочник.Пользователи КАК Пользователи - |ГДЕ - | Пользователи.ИдентификаторПользователяИБ = &УникальныйИдентификатор - | И Пользователи.Ссылка <> &СсылкаНаТекущего - | - |ОБЪЕДИНИТЬ ВСЕ - | - |ВЫБРАТЬ - | ВнешниеПользователи.Ссылка - |ИЗ - | Справочник.ВнешниеПользователи КАК ВнешниеПользователи - |ГДЕ - | ВнешниеПользователи.ИдентификаторПользователяИБ = &УникальныйИдентификатор - | И ВнешниеПользователи.Ссылка <> &СсылкаНаТекущего"; - - Результат = Ложь; - НайденныйПользователь = Неопределено; - - НачатьТранзакцию(); - Попытка - РезультатЗапроса = Запрос.Выполнить(); - - Если НЕ РезультатЗапроса.Пустой() Тогда - Выборка = РезультатЗапроса.Выбрать(); - Выборка.Следующий(); - НайденныйПользователь = Выборка.Пользователь; - Результат = Истина; - Пользователи.НайтиНеоднозначныхПользователейИБ(, УникальныйИдентификатор); - КонецЕсли; - - ЗафиксироватьТранзакцию(); - Исключение - ОтменитьТранзакцию(); - ВызватьИсключение; - КонецПопытки; - - Возврат Результат; - -КонецФункции - // Обновляет составы пользователей у групп пользователей с учетом иерархии // в регистре сведений "Составы групп пользователей". // Данные регистра используются в форме списка и формы выбора пользователей. @@ -2297,7 +3127,8 @@ ИзмененныеГруппыМассив.Добавить(КлючИЗначение.Ключ); КонецЦикла; - ПослеОбновленияСоставовГруппПользователейПереопределяемый(УчастникиИзмененийМассив, ИзмененныеГруппыМассив); + ИнтеграцияСтандартныхПодсистем.ПослеОбновленияСоставовГруппПользователей(УчастникиИзмененийМассив, + ИзмененныеГруппыМассив); КонецПроцедуры @@ -2415,7 +3246,8 @@ ИзмененныеГруппыМассив.Добавить(КлючИЗначение.Ключ); КонецЦикла; - ПослеОбновленияСоставовГруппПользователейПереопределяемый(УчастникиИзмененийМассив, ИзмененныеГруппыМассив); + ИнтеграцияСтандартныхПодсистем.ПослеОбновленияСоставовГруппПользователей(УчастникиИзмененийМассив, + ИзмененныеГруппыМассив); КонецПроцедуры @@ -2469,7 +3301,7 @@ МассивВнешнихПользователей = Запрос.Выполнить().Выгрузить().ВыгрузитьКолонку("Пользователь"); КонецЕсли; - Пользователи.НайтиНеоднозначныхПользователейИБ(,); + Пользователи.НайтиНеоднозначныхПользователейИБ(Неопределено); ИдентификаторыПользователейИБ = Новый Соответствие; @@ -2752,43 +3584,6 @@ КонецФункции -// Обновляет представление внешнего пользователя при изменении представления его объекта авторизации. -Процедура ОбновитьПредставлениеВнешнегоПользователя(СсылкаНаОбъектАвторизации) Экспорт - - УстановитьПривилегированныйРежим(Истина); - - Запрос = Новый Запрос( - "ВЫБРАТЬ ПЕРВЫЕ 1 - | ВнешниеПользователи.Ссылка - |ИЗ - | Справочник.ВнешниеПользователи КАК ВнешниеПользователи - |ГДЕ - | ВнешниеПользователи.ОбъектАвторизации = &СсылкаНаОбъектАвторизации - | И ВнешниеПользователи.Наименование <> &НовоеПредставлениеОбъектаАвторизации"); - Запрос.УстановитьПараметр("СсылкаНаОбъектАвторизации", СсылкаНаОбъектАвторизации); - Запрос.УстановитьПараметр("НовоеПредставлениеОбъектаАвторизации", Строка(СсылкаНаОбъектАвторизации)); - - НачатьТранзакцию(); - Попытка - РезультатЗапроса = Запрос.Выполнить(); - - Если НЕ РезультатЗапроса.Пустой() Тогда - Выборка = РезультатЗапроса.Выбрать(); - Выборка.Следующий(); - - ВнешнийПользовательОбъект = Выборка.Ссылка.ПолучитьОбъект(); - ВнешнийПользовательОбъект.Наименование = Строка(СсылкаНаОбъектАвторизации); - ВнешнийПользовательОбъект.Записать(); - КонецЕсли; - - ЗафиксироватьТранзакцию(); - Исключение - ОтменитьТранзакцию(); - ВызватьИсключение; - КонецПопытки; - -КонецПроцедуры - //////////////////////////////////////////////////////////////////////////////// // Работа с настройками пользователя информационной базы. @@ -2899,8 +3694,8 @@ ИмяПеремещаемогоПользователя = ""; КонецЕсли; НаименованиеГруппы = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(ГруппаПриемник, "Наименование"); - СообщениеПользователю.Сообщение = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - ТекстСообщения, ИмяПеремещаемогоПользователя, НаименованиеГруппы); + СообщениеПользователю.Сообщение = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ТекстСообщения, + ИмяПеремещаемогоПользователя, НаименованиеГруппы); СообщениеПользователю.ЕстьОшибки = Истина; Возврат СообщениеПользователю; КонецЕсли; @@ -2924,9 +3719,22 @@ Если ТипЗнч(ПользовательСсылка) = Тип("СправочникСсылка.ВнешниеПользователи") Тогда - Если ТипЗнч(ГруппаПриемник.ТипОбъектовАвторизации) <> Тип("Неопределено") - И ТипЗнч(ПользовательСсылка.ОбъектАвторизации) <> ТипЗнч(ГруппаПриемник.ТипОбъектовАвторизации) - Или ГруппаПриемник.ВсеОбъектыАвторизации Тогда + СвойстваГруппыПриемника = ОбщегоНазначения.ЗначенияРеквизитовОбъекта( + ГруппаПриемник, "Назначение, ВсеОбъектыАвторизации"); + + Если СвойстваГруппыПриемника.ВсеОбъектыАвторизации Тогда + Возврат Ложь; + КонецЕсли; + + НазначениеГруппыПриемника = СвойстваГруппыПриемника.Назначение.Выгрузить(); + + ТипВнешнегоПользователя = ТипЗнч(ОбщегоНазначения.ЗначениеРеквизитаОбъекта( + ПользовательСсылка, "ОбъектАвторизации")); + ОписаниеТипаСсылки = Новый ОписаниеТипов(ОбщегоНазначенияКлиентСервер.ЗначениеВМассиве(ТипВнешнегоПользователя)); + Значение = ОписаниеТипаСсылки.ПривестиЗначение(Неопределено); + + Отбор = Новый Структура("ТипПользователей", Значение); + Если НазначениеГруппыПриемника.НайтиСтроки(Отбор).Количество() <> 1 Тогда Возврат Ложь; КонецЕсли; @@ -2996,34 +3804,6 @@ КонецПроцедуры -// Формирует окончание предмета исчисления. -// -// Параметры: -// ПреобразуемоеЧисло - Число - число, для которого нужно получить окончание -// предмета исчисления. -// -Функция ФормированиеОкончанияСлова(ПреобразуемоеЧисло, ПараметрыПредметаИсчисления = Неопределено) Экспорт - - Если ПараметрыПредметаИсчисления = Неопределено Тогда - ПараметрыПредметаИсчисления = НСтр("ru = 'пользователь,пользователя,пользователей,,,,,,0'"); - КонецЕсли; - - ПрописьЧисла = ЧислоПрописью( - ПреобразуемоеЧисло, - "Л = ru_RU", - НСтр("ru = ',,,,,,,,0'")); - ПрописьЧислаИПредмета = ЧислоПрописью( - ПреобразуемоеЧисло, - "Л = ru_RU", - ПараметрыПредметаИсчисления); - ПрописьПредмета = СтрЗаменить( - ПрописьЧислаИПредмета, - ПрописьЧисла, - Формат(ПреобразуемоеЧисло, "ЧДЦ=0") + " "); - - Возврат ПрописьПредмета; -КонецФункции - // Формирует сообщение о результатах переноса пользователя. // // Параметры: @@ -3053,42 +3833,76 @@ Если КоличествоНеПеремещенныхПользователей > 0 Тогда + СвойстваГруппыПриемника = ОбщегоНазначения.ЗначенияРеквизитовОбъекта( + ГруппаПриемник, "Назначение, Наименование"); + + НаименованиеГруппы = СвойстваГруппыПриемника.Наименование; + НазначениеГруппыВнешнихПользователей = СвойстваГруппыПриемника.Назначение.Выгрузить(); + + МассивПредставлений = Новый Массив; + Для Каждого СтрокаНазначения Из НазначениеГруппыВнешнихПользователей Цикл + + МассивПредставлений.Добавить(НРег(Метаданные.НайтиПоТипу( + ТипЗнч(СтрокаНазначения.ТипПользователей)).Синоним)); + + КонецЦикла; + + ПредставлениеТипаОбъектаАвторизации = СтрСоединить(МассивПредставлений, ", "); + Если КоличествоНеПеремещенныхПользователей = 1 Тогда - Предмет = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(МассивНеПеремещенныхПользователей[0], "Наименование"); - ТипПользователяСовпадаетСГруппой = (ТипЗнч(МассивНеПеремещенныхПользователей[0].ОбъектАвторизации) = - ТипЗнч(ГруппаПриемник.ТипОбъектовАвторизации)); + + СвойстваНеПеремещенногоПользователя = ОбщегоНазначения.ЗначенияРеквизитовОбъекта( + МассивНеПеремещенныхПользователей[0], "Наименование, ОбъектАвторизации"); + + Предмет = СвойстваНеПеремещенногоПользователя.Наименование; + + ТипВнешнегоПользователя = ТипЗнч(СвойстваНеПеремещенногоПользователя.ОбъектАвторизации); + ОписаниеТипаСсылки = Новый ОписаниеТипов(ОбщегоНазначенияКлиентСервер.ЗначениеВМассиве(ТипВнешнегоПользователя)); + Значение = ОписаниеТипаСсылки.ПривестиЗначение(Неопределено); + + Отбор = Новый Структура("ТипПользователей", Значение); + ТипПользователяСовпадаетСГруппой = (НазначениеГруппыВнешнихПользователей.НайтиСтроки(Отбор).Количество() = 1); + УведомлениеПользователя.Пользователи = Неопределено; - СообщениеПользователю = НСтр("ru = 'Пользователь ""%1"" не может быть включен в группу ""%2"",'"); - СообщениеПользователю = СообщениеПользователю + Символы.ПС + - ?(Не ТипПользователяСовпадаетСГруппой, - НСтр("ru = 'т.к. в состав ее участников входят только %3.'"), - НСтр("ru = 'т.к. у группы стоит признак ""Все пользователи заданного типа"".'")); + + Если ТипПользователяСовпадаетСГруппой Тогда + СообщениеПользователю = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Пользователь ""%1"" не может быть включен в группу ""%2"", + |т.к. у группы стоит признак ""Все пользователи заданного типа"".'"), + Предмет, НаименованиеГруппы) + Символы.ПС; + Иначе + СообщениеПользователю = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Пользователь ""%1"" не может быть включен в группу ""%2"", + |т.к. в состав ее участников входят только %3.'"), + Предмет, НаименованиеГруппы, ПредставлениеТипаОбъектаАвторизации) + Символы.ПС; + КонецЕсли; Иначе - Предмет = ""; - УведомлениеПользователя.Пользователи = СтроковыеФункцииКлиентСервер.СтрокаИзМассиваПодстрок(МассивНеПеремещенныхПользователей, Символы.ПС); - СообщениеПользователю = НСтр("ru = 'Не все пользователи могут быть включены в группу ""%2"", - |т.к. в состав ее участников входят только %3 - |или у группы стоит признак ""Все пользователи заданного типа"".'"); + УведомлениеПользователя.Пользователи = СтрСоединить(МассивНеПеремещенныхПользователей, Символы.ПС); + + СообщениеПользователю = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Не все пользователи могут быть включены в группу ""%1"", + |т.к. в состав ее участников входят только %2 + |или у группы стоит признак ""Все пользователи заданного типа"".'"), + НаименованиеГруппы, + ПредставлениеТипаОбъектаАвторизации); КонецЕсли; - ЭлементПредставленияТипаОбъектаАвторизации = Метаданные.НайтиПоТипу(ТипЗнч(ГруппаПриемник.ТипОбъектовАвторизации)).Синоним; - - НаименованиеГруппы = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(ГруппаПриемник, "Наименование"); - СообщениеПользователю = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - СообщениеПользователю, Предмет, НаименованиеГруппы, НРег(ЭлементПредставленияТипаОбъектаАвторизации)); - УведомлениеПользователя.Сообщение = СообщениеПользователю; УведомлениеПользователя.ЕстьОшибки = Истина; Возврат УведомлениеПользователя; - - ИначеЕсли КоличествоПользователей = 1 Тогда + КонецЕсли; + + Если КоличествоПользователей = 1 Тогда СтрокаОбъект = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(МассивПользователей[0], "Наименование"); + Если ГруппаПриемник = Справочники.ГруппыПользователей.ВсеПользователи - Или ГруппаПриемник = Справочники.ГруппыВнешнихПользователей.ВсеВнешниеПользователи Тогда + Или ГруппаПриемник = Справочники.ГруппыВнешнихПользователей.ВсеВнешниеПользователи Тогда + СтрокаДействие = НСтр("ru = 'исключен из группы'"); НаименованиеГруппы = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(ГруппаИсточник, "Наименование"); + ИначеЕсли Перемещение Тогда СтрокаДействие = НСтр("ru = 'перемещен в группу'"); Иначе @@ -3096,12 +3910,17 @@ КонецЕсли; СообщениеПользователю = НСтр("ru = '""%1"" %2 ""%3""'"); + ИначеЕсли КоличествоПользователей > 1 Тогда - СтрокаОбъект = ФормированиеОкончанияСлова(КоличествоПользователей); + СтрокаОбъект = Формат(КоличествоПользователей, "ЧДЦ=0") + " " + + ПользователиСлужебныйКлиентСервер.ПредметЦелогоЧисла(КоличествоПользователей, + "Л = ru_RU", НСтр("ru = 'пользователь,пользователя,пользователей,,,,,,0'")); + Если ГруппаПриемник = Справочники.ГруппыПользователей.ВсеПользователи Тогда СтрокаДействие = НСтр("ru = 'исключены из группы'"); НаименованиеГруппы = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(ГруппаИсточник, "Наименование"); + ИначеЕсли Перемещение Тогда СтрокаДействие = НСтр("ru = 'перемещены в группу'"); Иначе @@ -3111,14 +3930,15 @@ КонецЕсли; Если СообщениеПользователю <> Неопределено Тогда - СообщениеПользователю = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - СообщениеПользователю, СтрокаОбъект, СтрокаДействие, НаименованиеГруппы); + СообщениеПользователю = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(СообщениеПользователю, + СтрокаОбъект, СтрокаДействие, НаименованиеГруппы); КонецЕсли; УведомлениеПользователя.Сообщение = СообщениеПользователю; УведомлениеПользователя.ЕстьОшибки = Ложь; Возврат УведомлениеПользователя; + КонецФункции //////////////////////////////////////////////////////////////////////////////// @@ -3227,7 +4047,7 @@ УстановитьПривилегированныйРежим(Истина); - Пользователи.НайтиНеоднозначныхПользователейИБ(,); + Пользователи.НайтиНеоднозначныхПользователейИБ(Неопределено); ПользователиИБ = ПользователиИнформационнойБазы.ПолучитьПользователей(); @@ -3487,318 +4307,91 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// Обработчики условных вызовов в другие подсистемы. - -// Переопределяет текст комментария при авторизации пользователя ИБ, -// созданного в конфигураторе с административными правами. -// Вызывается из Пользователи.АвторизоватьТекущегоПользователя(). -// Комментарий записывается в журнал регистрации. -// -// Параметры: -// Комментарий - Строка - начальное значение задано. -// -Процедура ПослеЗаписиАдминистратораПриАвторизации(Комментарий) Экспорт +// Вызывается при переходе на новую версию конфигурации 2.3.1.16. +Процедура ОчиститьРеквизитПоказыватьВСпискеВыбораУВсехПользователейИБ() Экспорт - Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.УправлениеДоступом") Тогда - МодульУправлениеДоступомСлужебный = ОбщегоНазначения.ОбщийМодуль("УправлениеДоступомСлужебный"); - МодульУправлениеДоступомСлужебный.ПослеЗаписиАдминистратораПриАвторизации(Комментарий); + МенеджерЗначения = Константы.ИспользоватьВнешнихПользователей.СоздатьМенеджерЗначения(); + МенеджерЗначения.Прочитать(); + + Если МенеджерЗначения.Значение = Ложь Тогда + Возврат; КонецЕсли; -КонецПроцедуры - -// Переопределяет действие при авторизации администратора локальной ИБ -// или администратора области данных. -// -Процедура ПриАвторизацииАдминистратораПриНачалеРаботыСистемы(Администратор) Экспорт - - Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.УправлениеДоступом") Тогда - МодульУправлениеДоступомСлужебный = ОбщегоНазначения.ОбщийМодуль("УправлениеДоступомСлужебный"); - МодульУправлениеДоступомСлужебный.ПриАвторизацииАдминистратораПриНачалеРаботыСистемы(Администратор); - КонецЕсли; + МенеджерЗначения.ОчиститьРеквизитПоказыватьВСпискеВыбораУВсехПользователейИБ(); КонецПроцедуры -// Формирует запрос на изменение адреса электронной почты пользователя сервиса. -// -// Параметры: -// НоваяПочта - Строка - новый адрес электронной почты пользователя. -// Пользователь - СправочникСсылка.Пользователи - пользователь, которому требуется изменить -// адрес электронной почты. -// ПарольПользователяСервиса - Строка - пароль текущего пользователя для доступа к менеджеру сервиса. -// -Процедура ПриСозданииЗапросаНаСменуПочты(Знач НоваяПочта, Знач Пользователь, Знач ПарольПользователяСервиса) Экспорт +// Вызывается при переходе на новую версию конфигурации 2.3.1.37. +Процедура ЗаполнитьНазначениеГруппВнешнихПользователей() Экспорт - Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаВМоделиСервиса.ПользователиВМоделиСервиса") Тогда - МодульПользователиСлужебныйВМоделиСервиса = ОбщегоНазначения.ОбщийМодуль("ПользователиСлужебныйВМоделиСервиса"); - МодульПользователиСлужебныйВМоделиСервиса.СоздатьЗапросНаСменуПочты(НоваяПочта, Пользователь, ПарольПользователяСервиса); - КонецЕсли; + Запрос = Новый Запрос; + Запрос.Текст = "ВЫБРАТЬ + | ГруппыВнешнихПользователей.Ссылка КАК Ссылка + |ИЗ + | Справочник.ГруппыВнешнихПользователей КАК ГруппыВнешнихПользователей + |ГДЕ + | (ГруппыВнешнихПользователей.Предопределенный + | ИЛИ НЕ ГруппыВнешнихПользователей.Ссылка В + | (ВЫБРАТЬ РАЗЛИЧНЫЕ + | ГруппыВнешнихПользователей.Ссылка + | ИЗ + | Справочник.ГруппыВнешнихПользователей.Назначение КАК ГруппыВнешнихПользователейНазначение))"; -КонецПроцедуры - -// Возвращает доступные текущему пользователю действия с указанным пользователем сервиса. -// -// Параметры: -// Пользователь - СправочникСсылка.Пользователи - пользователь, доступные -// действия с которым требуется получить. Если параметр не указан, проверяются -// доступные действия с текущим пользователем. -// ПарольПользователяСервиса - Строка - пароль текущего пользователя для -// доступа в сервис. -// -Процедура ПриПолученииДействийСПользователемСервиса(ДоступныеДействия, Знач Пользователь = Неопределено) Экспорт + Результат = Запрос.Выполнить(); + Выборка = Результат.Выбрать(); - Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаВМоделиСервиса.ПользователиВМоделиСервиса") Тогда - МодульПользователиСлужебныйВМоделиСервиса = ОбщегоНазначения.ОбщийМодуль("ПользователиСлужебныйВМоделиСервиса"); - ДоступныеДействия = МодульПользователиСлужебныйВМоделиСервиса.ПолучитьДействияСПользователемСервиса(Пользователь); - КонецЕсли; - -КонецПроцедуры - -//////////////////////////////////////////////////////////////////////////////// -// Обработчики условных вызовов из других подсистемы. - -// Определить объекты метаданных, в модулях менеджеров которых ограничивается возможность -// редактирования реквизитов при групповом изменении. -// -// Параметры: -// Объекты - Соответствие - в качестве ключа указать полное имя объекта метаданных, -// подключенного к подсистеме "Групповое изменение объектов". -// Дополнительно в значении могут быть перечислены имена экспортных функций: -// "РеквизитыНеРедактируемыеВГрупповойОбработке", -// "РеквизитыРедактируемыеВГрупповойОбработке". -// Каждое имя должно начинаться с новой строки. -// Если указана пустая строка, значит в модуле менеджера определены обе функции. -// -Процедура ПриОпределенииОбъектовСРедактируемымиРеквизитами(Объекты) Экспорт - Объекты.Вставить(Метаданные.Справочники.ВнешниеПользователи.ПолноеИмя(), "РеквизитыНеРедактируемыеВГрупповойОбработке"); - Объекты.Вставить(Метаданные.Справочники.ГруппыВнешнихПользователей.ПолноеИмя(), "РеквизитыНеРедактируемыеВГрупповойОбработке"); - Объекты.Вставить(Метаданные.Справочники.Пользователи.ПолноеИмя(), "РеквизитыНеРедактируемыеВГрупповойОбработке"); -КонецПроцедуры - -// Обработчики записи пользователей и групп пользователей. - -// Доопределяет действия, необходимые после завершения обновления -// связей в регистре СоставыГруппПользователей. -// -// Параметры: -// УчастникиИзменений - Массив значений типов: -// - СправочникСсылка.Пользователи. -// - СправочникСсылка.ВнешниеПользователи. -// Пользователи которые участвовали в изменении состава групп. -// -// ИзмененныеГруппы - Массив значений типов: -// - СправочникСсылка.ГруппыПользователей. -// - СправочникСсылка.ГруппыВнешнихПользователей. -// Группы, состав которых был изменен. -// -Процедура ПослеОбновленияСоставовГруппПользователейПереопределяемый(УчастникиИзменений, ИзмененныеГруппы) Экспорт - - Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.УправлениеДоступом") Тогда - МодульУправлениеДоступомСлужебный = ОбщегоНазначения.ОбщийМодуль("УправлениеДоступомСлужебный"); - МодульУправлениеДоступомСлужебный.ПослеОбновленияСоставовГруппПользователей(УчастникиИзменений, ИзмененныеГруппы); + Пока Выборка.Следующий() Цикл - МодульУправлениеДоступом = ОбщегоНазначения.ОбщийМодуль("УправлениеДоступом"); - МодульУправлениеДоступом.ОбновитьРолиПользователей(УчастникиИзменений); - КонецЕсли; - -КонецПроцедуры - -// Доопределяет действия, необходимые после изменении объекта авторизации внешнего пользователя. -// -// Параметры: -// ВнешнийПользователь - СправочникСсылка.ВнешниеПользователи. -// СтарыйОбъектАвторизации - NULL - при добавлении внешнего пользователя. -// Например, СправочникСсылка.ФизическиеЛица. -// НовыйОбъектАвторизации - Например, СправочникСсылка.ФизическиеЛица. -// -Процедура ПослеИзмененияОбъектаАвторизацииВнешнегоПользователя(ВнешнийПользователь, - СтарыйОбъектАвторизации, - НовыйОбъектАвторизации) Экспорт - - Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.УправлениеДоступом") Тогда - МодульУправлениеДоступомСлужебный = ОбщегоНазначения.ОбщийМодуль("УправлениеДоступомСлужебный"); - МодульУправлениеДоступомСлужебный.ПослеИзмененияОбъектаАвторизацииВнешнегоПользователя( - ВнешнийПользователь, СтарыйОбъектАвторизации, НовыйОбъектАвторизации); - КонецЕсли; - -КонецПроцедуры - -// Доопределяет действия, необходимые после добавления или изменения пользователя, -// группы пользователей, внешнего пользователя, группы внешних пользователей. -// -// Параметры: -// Ссылка - СправочникСсылка.Пользователи. -// - СправочникСсылка.ГруппыПользователей. -// - СправочникСсылка.ВнешниеПользователи. -// - СправочникСсылка.ГруппыВнешнихПользователей. -// -// ЭтоНовый - Булево, если Истина, объект был добавлен, иначе изменен. -// -Процедура ПослеДобавленияИзмененияПользователяИлиГруппы(Ссылка, ЭтоНовый) Экспорт - - Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.УправлениеДоступом") Тогда - МодульУправлениеДоступомСлужебный = ОбщегоНазначения.ОбщийМодуль("УправлениеДоступомСлужебный"); - МодульУправлениеДоступомСлужебный.ПослеДобавленияИзмененияПользователяИлиГруппы(Ссылка, ЭтоНовый); - КонецЕсли; - -КонецПроцедуры - -// Доопределяет действия, необходимые после установки пользователя -// информационной базы у пользователя или внешнего пользователя, -// т.е. при изменении реквизита ИдентификаторПользователяИБ на не пустой. -// -// Например, можно обновить роли. -// -// Параметры: -// Ссылка - СправочникСсылка.Пользователи. -// - СправочникСсылка.ВнешниеПользователи. -// -Процедура ПослеУстановкиПользователяИБ(Ссылка, ПарольПользователяСервиса) Экспорт - - Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.УправлениеДоступом") Тогда - МодульУправлениеДоступом = ОбщегоНазначения.ОбщийМодуль("УправлениеДоступом"); - МодульУправлениеДоступом.ОбновитьРолиПользователей(Ссылка, ПарольПользователяСервиса); - КонецЕсли; - -КонецПроцедуры - -// Для поддержки работы в модели сервиса. - -// Возвращает флаг доступности действий изменения пользователей. -// -// Возвращаемое значение: -// Булево - Истина, если изменение пользователей доступно, иначе Ложь. -// -Процедура ПриОпределенииДоступностиИзмененияПользователей(ДоступноИзменениеПользователей) Экспорт - - Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаВМоделиСервиса.ПользователиВМоделиСервиса") Тогда - МодульПользователиСлужебныйВМоделиСервиса = ОбщегоНазначения.ОбщийМодуль("ПользователиСлужебныйВМоделиСервиса"); - ДоступноИзменениеПользователей = МодульПользователиСлужебныйВМоделиСервиса.ДоступноИзменениеПользователей(); - Иначе - ДоступноИзменениеПользователей = Истина; - КонецЕсли; - -КонецПроцедуры - -// Пользовательские настройки вариантов отчетов. - -// Получает варианты переданного отчета и их представления. -// -// Параметры: -// ОтчетМетаданные - Объект метаданных - отчет, для которого получаются варианты отчета. -// ПользовательИнформационнойБазы - Строка - имя пользователя информационной базы. -// СведенияОВариантахОтчетов - ТаблицаЗначений - таблица, в которую сохраняется информация о варианте отчета. -// * КлючОбъекта - Строка - ключ отчета вида "Отчет.НазваниеОтчета". -// * КлючВарианта - Строка - ключ варианта отчета. -// * Представление - Строка - представление варианта отчета. -// * СтандартнаяОбработка - Булево - если Истина - вариант отчета сохранен в стандартном хранилище. -// СтандартнаяОбработка - Булево - если Истина - вариант отчета сохранен в стандартном хранилище. -// -Процедура ПриПолученииПользовательскихВариантовОтчетов(ОтчетМетаданные, ПользовательИнформационнойБазы, СведенияОВариантахОтчетов, СтандартнаяОбработка) Экспорт - - Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ВариантыОтчетов") Тогда - МодульВариантыОтчетов = ОбщегоНазначения.ОбщийМодуль("ВариантыОтчетов"); - МодульВариантыОтчетов.ПользовательскиеВариантыОтчетов(ОтчетМетаданные, ПользовательИнформационнойБазы, - СведенияОВариантахОтчетов, СтандартнаяОбработка); - КонецЕсли; - -КонецПроцедуры - -// Удаляет переданный вариант отчета из хранилища вариантов отчетов. -// -// Параметры: -// СведенияОВариантахОтчетов - ТаблицаЗначений - таблица, в которой сохранена информация о варианте отчета. -// * КлючОбъекта - Строка - ключ отчета вида "Отчет.НазваниеОтчета". -// * КлючВарианта - Строка - ключ варианта отчета. -// * Представление - Строка - представление варианта отчета. -// * СтандартнаяОбработка - Булево - если Истина - вариант отчета сохранен в стандартном хранилище. -// ПользовательИнформационнойБазы - Строка - имя пользователя информационной базы у которого очищается вариант отчета. -// СтандартнаяОбработка - Булево - если Истина - вариант отчета сохранен в стандартном хранилище. -// -Процедура ПриУдаленииПользовательскихВариантовОтчета(СведенияОВариантеОтчета, ПользовательИнформационнойБазы, СтандартнаяОбработка) Экспорт - - Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ВариантыОтчетов") Тогда - МодульВариантыОтчетов = ОбщегоНазначения.ОбщийМодуль("ВариантыОтчетов"); - МодульВариантыОтчетов.УдалитьПользовательскийВариантОтчета(СведенияОВариантеОтчета, - ПользовательИнформационнойБазы, СтандартнаяОбработка); - КонецЕсли; + ГруппаОбъект = Выборка.Ссылка.ПолучитьОбъект(); + + Если ГруппаОбъект.Предопределенный Или ГруппаОбъект.УдалитьТипОбъектовАвторизации = Неопределено Тогда // любые пользователи + + Для Каждого Тип Из Метаданные.ОпределяемыеТипы.ВнешнийПользователь.Тип.Типы() Цикл + + ОписаниеТипаСсылки = Новый ОписаниеТипов(ОбщегоНазначенияКлиентСервер.ЗначениеВМассиве(Тип)); + Значение = ОписаниеТипаСсылки.ПривестиЗначение(Неопределено); + + НоваяСтрока = ГруппаОбъект.Назначение.Добавить(); + НоваяСтрока.ТипПользователей = Значение; + + КонецЦикла; + + Иначе + + НоваяСтрока = ГруппаОбъект.Назначение.Добавить(); + НоваяСтрока.ТипПользователей = ГруппаОбъект.УдалитьТипОбъектовАвторизации; + + КонецЕсли; + + ОбновлениеИнформационнойБазы.ЗаписатьДанные(ГруппаОбъект); + + КонецЦикла; КонецПроцедуры +//////////////////////////////////////////////////////////////////////////////// // Прочие пользовательские настройки. -// Дополняет список настроек переданного пользователя на вкладке "Прочее" обработки НастройкиПользователей. -// -// Параметры: -// СведенияОПользователе - Структура - Строковое и ссылочное представление пользователя. -// * ПользовательСсылка - СправочникСсылка.Пользователи - пользователь, у которого нужно получить настройки. -// * ИмяПользователяИнформационнойБазы - Строка - пользователь информационной базы, -// у которого нужно получить настройки. -// Настройки - Структура - прочие пользовательские настройки. -// * Ключ - Строка - строковый идентификатор настройки, используемый в дальнейшем -// для копирования и очистки этой настройки. -// * Значение - Структура - информация о настройке. -// ** НазваниеНастройки - Строка - название, которое будет отображаться в дереве настроек. -// ** КартинкаНастройки - Картинка - картинка, которая будет отображаться в дереве настроек. -// ** СписокНастроек - СписокЗначений - список полученных настроек. -// -Процедура ПриПолученииПрочихНастроек(СведенияОПользователе, ПрочиеНастройки) Экспорт +// См. одноименную процедуру в общем модуле ПользователиПереопределяемый. +Процедура ПриПолученииПрочихНастроек(СведенияОПользователе, Настройки) Экспорт - // Добавление настроек дополнительных отчетов и обработок. - Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ДополнительныеОтчетыИОбработки") Тогда - Настройки = Неопределено; - МодульДополнительныеОтчетыИОбработки = ОбщегоНазначения.ОбщийМодуль("ДополнительныеОтчетыИОбработки"); - МодульДополнительныеОтчетыИОбработки.ПолучитьНастройкиДополнительныхОтчетовИОбработок(СведенияОПользователе.ПользовательСсылка, Настройки); - - Если Настройки <> Неопределено Тогда - ПрочиеНастройки.Вставить("НастройкаБыстрогоДоступа", Настройки); - КонецЕсли; - КонецЕсли; - - ПользователиПереопределяемый.ПриПолученииПрочихНастроек(СведенияОПользователе, ПрочиеНастройки); + ИнтеграцияСтандартныхПодсистем.ПриПолученииПрочихНастроек(СведенияОПользователе, Настройки); + ПользователиПереопределяемый.ПриПолученииПрочихНастроек(СведенияОПользователе, Настройки); КонецПроцедуры -// Сохраняет настройки переданному пользователю. -// -// Параметры: -// Настройки - СписокЗначений - список значений сохраняемых настроек. -// СведенияОПользователе - Структура - Строковое и ссылочное представление пользователя. -// * ПользовательСсылка - СправочникСсылка.Пользователи - пользователь, которому нужно скопировать настройку. -// * ИмяПользователяИнформационнойБазы - Строка - пользователь информационной базы, -// которому нужно скопировать настройку. -// +// См. одноименную процедуру в общем модуле ПользователиПереопределяемый. Процедура ПриСохраненииПрочихНастроек(СведенияОПользователе, Настройки) Экспорт - Если Настройки.ИдентификаторНастройки = "НастройкаБыстрогоДоступа" Тогда - Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ДополнительныеОтчетыИОбработки") Тогда - МодульДополнительныеОтчетыИОбработки = ОбщегоНазначения.ОбщийМодуль("ДополнительныеОтчетыИОбработки"); - МодульДополнительныеОтчетыИОбработки.ДобавитьКомандыВСписокБыстрогоДоступа(Настройки.ЗначениеНастройки, СведенияОПользователе.ПользовательСсылка); - КонецЕсли; - КонецЕсли; - + ИнтеграцияСтандартныхПодсистем.ПриСохраненииПрочихНастроек(СведенияОПользователе, Настройки); ПользователиПереопределяемый.ПриСохраненииПрочихНастроек(СведенияОПользователе, Настройки); КонецПроцедуры -// Очищает настройки переданному пользователю. -// -// Параметры: -// Настройки - СписокЗначений - список значений очищаемых настроек. -// СведенияОПользователе - Структура - Строковое и ссылочное представление пользователя. -// * ПользовательСсылка - СправочникСсылка.Пользователи - пользователь, которому нужно очистить настройку. -// * ИмяПользователяИнформационнойБазы - Строка - пользователь информационной базы, -// которому нужно очистить настройку. -// +// См. одноименную процедуру в общем модуле ПользователиПереопределяемый. Процедура ПриУдаленииПрочихНастроек(СведенияОПользователе, Настройки) Экспорт - Если Настройки.ИдентификаторНастройки = "НастройкаБыстрогоДоступа" Тогда - Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ДополнительныеОтчетыИОбработки") Тогда - МодульДополнительныеОтчетыИОбработки = ОбщегоНазначения.ОбщийМодуль("ДополнительныеОтчетыИОбработки"); - МодульДополнительныеОтчетыИОбработки.УдалитьКомандыИзСпискаБыстрогоДоступа(Настройки.ЗначениеНастройки, СведенияОПользователе.ПользовательСсылка); - КонецЕсли; - КонецЕсли; - + ИнтеграцияСтандартныхПодсистем.ПриУдаленииПрочихНастроек(СведенияОПользователе, Настройки); ПользователиПереопределяемый.ПриУдаленииПрочихНастроек(СведенияОПользователе, Настройки); КонецПроцедуры @@ -3806,26 +4399,114 @@ //////////////////////////////////////////////////////////////////////////////// // ВСПОМОГАТЕЛЬНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +// При первом запуске подчиненного узла очищает идентификаторы +// пользователей ИБ, скопированные при создании начального образа. +// +Процедура ОчиститьИдентификаторыНесуществующихПользователейИБ() + + Если ОбщегоНазначенияПовтИсп.РазделениеВключено() Тогда + Возврат; + КонецЕсли; + + ПустойУникальныйИдентификатор = Новый УникальныйИдентификатор("00000000-0000-0000-0000-000000000000"); + + Запрос = Новый Запрос; + Запрос.УстановитьПараметр("ПустойУникальныйИдентификатор", ПустойУникальныйИдентификатор); + + Запрос.Текст = + "ВЫБРАТЬ + | Пользователи.Ссылка КАК Ссылка, + | Пользователи.ИдентификаторПользователяИБ + |ИЗ + | Справочник.Пользователи КАК Пользователи + |ГДЕ + | Пользователи.ИдентификаторПользователяИБ <> &ПустойУникальныйИдентификатор + | + |ОБЪЕДИНИТЬ ВСЕ + | + |ВЫБРАТЬ + | ВнешниеПользователи.Ссылка, + | ВнешниеПользователи.ИдентификаторПользователяИБ + |ИЗ + | Справочник.Пользователи КАК ВнешниеПользователи + |ГДЕ + | ВнешниеПользователи.ИдентификаторПользователяИБ <> &ПустойУникальныйИдентификатор"; + + Выборка = Запрос.Выполнить().Выбрать(); + + Пока Выборка.Следующий() Цикл + + ПользовательИБ = ПользователиИнформационнойБазы.НайтиПоУникальномуИдентификатору( + Выборка.ИдентификаторПользователяИБ); + + Если ПользовательИБ <> Неопределено Тогда + Продолжить; + КонецЕсли; + + ТекущийОбъект = Выборка.Ссылка.ПолучитьОбъект(); + ТекущийОбъект.ИдентификаторПользователяИБ = ПустойУникальныйИдентификатор; + ОбновлениеИнформационнойБазы.ЗаписатьДанные(ТекущийОбъект); + КонецЦикла; + +КонецПроцедуры + +// Обновляет представление внешнего пользователя при изменении представления его объекта авторизации. +Процедура ОбновитьПредставлениеВнешнегоПользователя(СсылкаНаОбъектАвторизации) + + УстановитьПривилегированныйРежим(Истина); + + Запрос = Новый Запрос( + "ВЫБРАТЬ ПЕРВЫЕ 1 + | ВнешниеПользователи.Ссылка + |ИЗ + | Справочник.ВнешниеПользователи КАК ВнешниеПользователи + |ГДЕ + | ВнешниеПользователи.ОбъектАвторизации = &СсылкаНаОбъектАвторизации + | И ВнешниеПользователи.Наименование <> &НовоеПредставлениеОбъектаАвторизации"); + Запрос.УстановитьПараметр("СсылкаНаОбъектАвторизации", СсылкаНаОбъектАвторизации); + Запрос.УстановитьПараметр("НовоеПредставлениеОбъектаАвторизации", Строка(СсылкаНаОбъектАвторизации)); + + НачатьТранзакцию(); + Попытка + РезультатЗапроса = Запрос.Выполнить(); + + Если НЕ РезультатЗапроса.Пустой() Тогда + Выборка = РезультатЗапроса.Выбрать(); + Выборка.Следующий(); + + ВнешнийПользовательОбъект = Выборка.Ссылка.ПолучитьОбъект(); + ВнешнийПользовательОбъект.Наименование = Строка(СсылкаНаОбъектАвторизации); + ВнешнийПользовательОбъект.Записать(); + КонецЕсли; + + ЗафиксироватьТранзакцию(); + Исключение + ОтменитьТранзакцию(); + ВызватьИсключение; + КонецПопытки; + +КонецПроцедуры + Функция ТекстСообщенияПользовательНеНайденВСправочнике(ИмяПользователя) Если ВнешниеПользователи.ИспользоватьВнешнихПользователей() Тогда - ТекстСообщенияОбОшибке = НСтр("ru = 'Авторизация не выполнена. Работа системы будет завершена. - | - |Пользователь ""%1"" не найден в справочниках - |""Пользователи"" и ""Внешние пользователи"". - | - |Обратитесь к администратору.'"); + ШаблонСообщенияОбОшибке = + НСтр("ru = 'Авторизация не выполнена. Работа системы будет завершена. + | + |Пользователь ""%1"" не найден в справочниках + |""Пользователи"" и ""Внешние пользователи"". + | + |Обратитесь к администратору.'"); Иначе - ТекстСообщенияОбОшибке = НСтр("ru = 'Авторизация не выполнена. Работа системы будет завершена. - | - |Пользователь ""%1"" не найден в справочнике ""Пользователи"". - | - |Обратитесь к администратору.'"); + ШаблонСообщенияОбОшибке + = НСтр("ru = 'Авторизация не выполнена. Работа системы будет завершена. + | + |Пользователь ""%1"" не найден в справочнике ""Пользователи"". + | + |Обратитесь к администратору.'"); КонецЕсли; - ТекстСообщенияОбОшибке = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ТекстСообщенияОбОшибке, ИмяПользователя); - - Возврат ТекстСообщенияОбОшибке; + Возврат СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонСообщенияОбОшибке, ИмяПользователя); КонецФункции @@ -4045,7 +4726,14 @@ | ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.ГруппыВнешнихПользователей КАК ГруппыВнешнихПользователей | ПО (ГруппыВнешнихПользователей.ВсеОбъектыАвторизации = ИСТИНА) | И (&ОтборГруппыВнешнихПользователей1) - | И (ТИПЗНАЧЕНИЯ(ВнешниеПользователи.ОбъектАвторизации) = ТИПЗНАЧЕНИЯ(ГруппыВнешнихПользователей.ТипОбъектовАвторизации)) + | И (ИСТИНА В + | (ВЫБРАТЬ ПЕРВЫЕ 1 + | ИСТИНА + | ИЗ + | Справочник.ГруппыВнешнихПользователей.Назначение КАК ТипыПользователей + | ГДЕ + | ТипыПользователей.Ссылка = ГруппыВнешнихПользователей.Ссылка + | И ТИПЗНАЧЕНИЯ(ТипыПользователей.ТипПользователей) = ТИПЗНАЧЕНИЯ(ВнешниеПользователи.ОбъектАвторизации))) | И (&ОтборВнешнегоПользователя1) |; | @@ -4207,17 +4895,17 @@ |; | |//////////////////////////////////////////////////////////////////////////////// - |ВЫБРАТЬ РАЗЛИЧНЫЕ + |ВЫБРАТЬ | ГруппыПользователейСостав.Пользователь КАК Пользователь, - | ВЫБОР - | КОГДА ГруппыПользователейСостав.Ссылка.ПометкаУдаления - | ТОГДА ЛОЖЬ - | КОГДА ГруппыПользователейСостав.Пользователь.ПометкаУдаления - | ТОГДА ЛОЖЬ - | КОГДА ГруппыПользователейСостав.Пользователь.Недействителен - | ТОГДА ЛОЖЬ - | ИНАЧЕ ИСТИНА - | КОНЕЦ КАК Используется + | МАКСИМУМ(ВЫБОР + | КОГДА ГруппыПользователейСостав.Ссылка.ПометкаУдаления + | ТОГДА ЛОЖЬ + | КОГДА ГруппыПользователейСостав.Пользователь.ПометкаУдаления + | ТОГДА ЛОЖЬ + | КОГДА ГруппыПользователейСостав.Пользователь.Недействителен + | ТОГДА ЛОЖЬ + | ИНАЧЕ ИСТИНА + | КОНЕЦ) КАК Используется |ПОМЕСТИТЬ НовыеСоставыГруппПользователей |ИЗ | Справочник.ГруппыПользователей.Состав КАК ГруппыПользователейСостав @@ -4226,9 +4914,11 @@ | И (СсылкиВИерархииРодителей.Родитель = &ГруппаПользователей) | И (&ОтборПользователяВСправочнике) | + |СГРУППИРОВАТЬ ПО + | ГруппыПользователейСостав.Пользователь + | |ИНДЕКСИРОВАТЬ ПО - | Пользователь, - | Используется + | Пользователь |; | |//////////////////////////////////////////////////////////////////////////////// @@ -4512,19 +5202,17 @@ |" + ОписаниеРоли.Роль.Представление(); КонецЦикла; ТекстСообщенияДобавления = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Пользователю ""%1"" не могут быть добавлены роли:%2.'"), + НСтр("ru = 'Пользователю ""%1"" не могут быть добавлены роли:%2.'"), ПользовательИБ.ПолноеИмя, Роли); КонецЕсли; Если ЗначениеЗаполнено(ТекстСообщенияУдаления) Тогда - ТекстСообщения = ТекстСообщенияУдаления + Символы.ПС + ТекстСообщенияДобавления; + ВызватьИсключение ТекстСообщенияУдаления + Символы.ПС + ТекстСообщенияДобавления; Иначе - ТекстСообщения = ТекстСообщенияДобавления; + ВызватьИсключение ТекстСообщенияДобавления; КонецЕсли; - ВызватьИсключение ТекстСообщения; - КонецПроцедуры Функция СписокНастроек(ИмяПользователяИБ, МенеджерНастроек) @@ -4744,6 +5432,147 @@ КонецПроцедуры +//////////////////////////////////////////////////////////////////////////////// +// Для процедур: +// - ПриДобавленииПараметровРаботыКлиентаПриЗапуске, +// - ПриВыполненииСтандартныхПериодическихПроверокНаСервере. + +// Обновляет дату последней активности и проверяет необходимость смены пароля. +Функция ТребуетсяСменитьПароль(ОписаниеОшибки = "", ПриЗапуске = Ложь) + + Если ОбщегоНазначенияПовтИсп.РазделениеВключено() Тогда + Возврат Ложь; + КонецЕсли; + + ПользовательИБ = ПользователиИнформационнойБазы.ТекущийПользователь(); + Если Не ЗначениеЗаполнено(ПользовательИБ.Имя) Тогда + Возврат Ложь; + КонецЕсли; + + // Обновление даты последнего входа пользователя. + УстановитьПривилегированныйРежим(Истина); + ТекущийПользователь = Пользователи.АвторизованныйПользователь(); + НачалоДняТекущейДатыСеанса = НачалоДня(ТекущаяДатаСеанса()); + + Блокировка = Новый БлокировкаДанных; + ЭлементБлокировки = Блокировка.Добавить("РегистрСведений.СведенияОПользователях"); + ЭлементБлокировки.Режим = РежимБлокировкиДанных.Исключительный; + ЭлементБлокировки.УстановитьЗначение("Пользователь", ТекущийПользователь); + НачатьТранзакцию(); + Попытка + Блокировка.Заблокировать(); + НаборЗаписей = РегистрыСведений.СведенияОПользователях.СоздатьНаборЗаписей(); + НаборЗаписей.Отбор.Пользователь.Установить(ТекущийПользователь); + НаборЗаписей.Прочитать(); + Если НаборЗаписей.Количество() = 0 Тогда + СведенияОПользователе = НаборЗаписей.Добавить(); + СведенияОПользователе.Пользователь = ТекущийПользователь; + Иначе + СведенияОПользователе = НаборЗаписей[0]; + КонецЕсли; + Записать = Ложь; + Если СведенияОПользователе.ДатаПоследнейАктивности <> НачалоДняТекущейДатыСеанса Тогда + СведенияОПользователе.ДатаПоследнейАктивности = НачалоДняТекущейДатыСеанса; + Записать = Истина; + КонецЕсли; + ИспользуемыйКлиент = СтандартныеПодсистемыСервер.ПараметрыКлиентаНаСервере().Получить("ИспользуемыйКлиент"); + Если СведенияОПользователе.ПоследнийИспользуемыйКлиент <> ИспользуемыйКлиент Тогда + СведенияОПользователе.ПоследнийИспользуемыйКлиент = ИспользуемыйКлиент; + Записать = Истина; + КонецЕсли; + Если Не ЗначениеЗаполнено(СведенияОПользователе.ДатаНачалаИспользованияПароля) + Или СведенияОПользователе.ДатаНачалаИспользованияПароля > НачалоДняТекущейДатыСеанса Тогда + СведенияОПользователе.ДатаНачалаИспользованияПароля = НачалоДняТекущейДатыСеанса; + Записать = Истина; + КонецЕсли; + Если ЗначениеЗаполнено(СведенияОПользователе.ДатаАвтоматическогоЗапрещенияВхода) Тогда + СведенияОПользователе.ДатаАвтоматическогоЗапрещенияВхода = Неопределено; + Записать = Истина; + КонецЕсли; + Если Записать Тогда + НаборЗаписей.Записать(); + КонецЕсли; + ЗафиксироватьТранзакцию(); + Исключение + ИнформацияОбОшибке = ИнформацияОбОшибке(); + ОтменитьТранзакцию(); + Если ПриЗапуске Тогда + ОписаниеОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Авторизация не выполнена. Работа системы будет завершена. + |Не удалось записать сведения о текущем пользователе по причине: + |%1 + | + |Обратитесь к администратору.'"), + КраткоеПредставлениеОшибки(ИнформацияОбОшибке)); + + ЗаписьЖурналаРегистрации( + НСтр("ru = 'Пользователи.Ошибка входа в программу'", + ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), + УровеньЖурналаРегистрации.Ошибка, + Метаданные.НайтиПоТипу(ТипЗнч(ТекущийПользователь)), + ТекущийПользователь, + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Не удалось записать сведения о пользователе ""%1"" по причине: + |%2'"), + ТекущийПользователь, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке))); + Иначе + ОписаниеОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Не удалось записать сведения о текущем пользователе по причине: + |%1 + | + |Обратитесь к администратору.'"), + КраткоеПредставлениеОшибки(ИнформацияОбОшибке)); + + ЗаписьЖурналаРегистрации( + НСтр("ru = 'Пользователи.Ошибка обновления даты последней активности'", + ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), + УровеньЖурналаРегистрации.Ошибка, + Метаданные.НайтиПоТипу(ТипЗнч(ТекущийПользователь)), + ТекущийПользователь, + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Не удалось записать сведения о пользователе ""%1"" по причине: + |%2'"), + ТекущийПользователь, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке))); + КонецЕсли; + Возврат Ложь; + КонецПопытки; + УстановитьПривилегированныйРежим(Ложь); + + ДополнительныеПараметры = Новый Структура; + ДополнительныеПараметры.Вставить("УчитыватьСвойствоЗапрещеноИзменятьПароль"); + Если Не ВозможноИзменитьПароль(ТекущийПользователь, ДополнительныеПараметры) Тогда + Возврат Ложь; + КонецЕсли; + + Если СведенияОПользователе.ПотребоватьСменуПароляПриВходе Тогда + Возврат Истина; + КонецЕсли; + + Если Не ПользователиСлужебныйПовтИсп.Настройки().ОбщиеНастройкиВхода Тогда + Возврат Ложь; + КонецЕсли; + + Если ТипЗнч(ТекущийПользователь) = Тип("СправочникСсылка.ВнешниеПользователи") Тогда + НастройкиВхода = ПользователиСлужебныйПовтИсп.Настройки().ВнешниеПользователи; + Иначе + НастройкиВхода = ПользователиСлужебныйПовтИсп.Настройки().Пользователи; + КонецЕсли; + + Если Не ЗначениеЗаполнено(НастройкиВхода.МаксимальныйСрокДействияПароля) Тогда + Возврат Ложь; + КонецЕсли; + + Если Не ЗначениеЗаполнено(СведенияОПользователе.ДатаНачалаИспользованияПароля) Тогда + Возврат Ложь; + КонецЕсли; + + ОстатокМаксимальногоСрокаДействияПароля = НастройкиВхода.МаксимальныйСрокДействияПароля + - (НачалоДняТекущейДатыСеанса - СведенияОПользователе.ДатаНачалаИспользованияПароля) / (24*60*60); + + Возврат ОстатокМаксимальногоСрокаДействияПароля <= 0; + +КонецФункции + //////////////////////////////////////////////////////////////////////////////// // Для процедуры НачатьОбработкуПользователяИБ. @@ -4916,33 +5745,64 @@ КонецЕсли; // Проверка прав на изменение разрешения входа в программу. - Если Не ПараметрыОбработки.УровеньДоступа.ПолныеПрава - И (Пользователи.ВходВПрограммуРазрешен(СтараяАутентификация) - <> Пользователи.ВходВПрограммуРазрешен(НоваяАутентификация) - ИЛИ Пользователи.ВходВПрограммуРазрешен(СтараяАутентификация) - И СтараяАутентификация.АутентификацияСтандартная <> НоваяАутентификация.АутентификацияСтандартная - И СтараяАутентификация.АутентификацияОС <> НоваяАутентификация.АутентификацияОС - И СтараяАутентификация.АутентификацияOpenID <> НоваяАутентификация.АутентификацияOpenID) - И НЕ (ПараметрыОбработки.УровеньДоступа.УправлениеСписком - И Пользователи.ВходВПрограммуРазрешен(НоваяАутентификация) = Ложь) Тогда + Если Пользователи.ВходВПрограммуРазрешен(НоваяАутентификация) + <> Пользователи.ВходВПрограммуРазрешен(СтараяАутентификация) Тогда + + Если Пользователи.ВходВПрограммуРазрешен(НоваяАутентификация) + И Не ПараметрыОбработки.УровеньДоступа.ИзменениеРазрешенияНаВход + Или Не Пользователи.ВходВПрограммуРазрешен(НоваяАутентификация) + И Не ПараметрыОбработки.УровеньДоступа.ОтключениеРазрешенияНаВход Тогда + + ВызватьИсключение ПараметрыОбработки.ТекстСообщенияНедостаточноПрав; + КонецЕсли; + КонецЕсли; + + Если Не ПараметрыОбработки.СтарыйПользовательИБСуществует + И ОписаниеПользователяИБ.Свойство("Пароль") + И ОписаниеПользователяИБ.Свойство("ЗаполнитьПароль") + И ОписаниеПользователяИБ.Пароль = Неопределено + И ОписаниеПользователяИБ.ЗаполнитьПароль Тогда - ВызватьИсключение ПараметрыОбработки.ТекстСообщенияНедостаточноПрав; + СложныйПароль = ПолучитьПроверкуСложностиПаролейПользователей(); + ДлинаПароля = ПолучитьМинимальнуюДлинуПаролейПользователей(); + + Настройки = ПользователиСлужебныйПовтИсп.Настройки(); + Если Настройки.ОбщиеНастройкиВхода Тогда + Если ТипЗнч(ПользовательОбъект) = Тип("СправочникОбъект.ВнешниеПользователи") Тогда + НастройкиВхода = Настройки.ВнешниеПользователи; + Иначе + НастройкиВхода = Настройки.Пользователи; + КонецЕсли; + СложныйПароль = СложныйПароль Или НастройкиВхода.ПарольДолженОтвечатьТребованиямСложности; + Если ДлинаПароля < НастройкиВхода.МинимальнаяДлинаПароля Тогда + ДлинаПароля = НастройкиВхода.МинимальнаяДлинаПароля; + КонецЕсли; + КонецЕсли; + + Если СложныйПароль Или ДлинаПароля > 0 Тогда + ДлинаПароля = ?(ДлинаПароля < 7, 7, ДлинаПароля); + + ОписаниеПользователяИБ.Пароль = СоздатьПароль(ПараметрыПароля(ДлинаПароля, СложныйПароль)); + КонецЕсли; КонецЕсли; // Попытка записи пользователя ИБ. - ОписаниеОшибки = ""; - ПользовательИБ = Неопределено; + ТекстОшибки = ""; + ПользовательИБ = ПользовательОбъект; Если НЕ Пользователи.ЗаписатьПользователяИБ( ИдентификаторПользователяИБ, ОписаниеПользователяИБ, СоздатьНовогоПользователяИБ, - ОписаниеОшибки, + ТекстОшибки, ПользовательИБ) Тогда - ВызватьИсключение ОписаниеОшибки; + ВызватьИсключение ТекстОшибки; КонецЕсли; - Если ПользовательИБ.Роли.Содержит(Метаданные.Роли.ПолныеПрава) Тогда + Если ПользовательИБ.Роли.Содержит(Метаданные.Роли.ПолныеПрава) + И (ПользовательИБ.Роли.Содержит(Метаданные.Роли.АдминистраторСистемы) + Или ОбщегоНазначенияПовтИсп.РазделениеВключено()) Тогда + ПараметрыОбработки.Вставить("ЗаписьАдминистратора"); КонецЕсли; @@ -4951,7 +5811,8 @@ ИдентификаторПользователяИБ = ОписаниеПользователяИБ.УникальныйИдентификатор; ПараметрыОбработки.Вставить("УстановкаПользователяИБ"); - Если ПараметрыОбработки.УровеньДоступа.УправлениеСписком + Если Не ПараметрыОбработки.УровеньДоступа.ИзменениеРазрешенияНаВход + И ПараметрыОбработки.УровеньДоступа.УправлениеСписком И Не Пользователи.ВходВПрограммуРазрешен(ПользовательИБ) Тогда ПользовательОбъект.Подготовлен = Истина; @@ -4984,11 +5845,11 @@ УстановитьПривилегированныйРежим(Истина); - ОписаниеОшибки = ""; + ТекстОшибки = ""; ПользовательИБ = Неопределено; Если Пользователи.УдалитьПользователяИБ( СтарыйПользователь.ИдентификаторПользователяИБ, - ОписаниеОшибки, + ТекстОшибки, ПользовательИБ) Тогда // Установка идентификатора удаляемого пользователя ИБ, как результата действия Удалить. @@ -4997,7 +5858,7 @@ ОписаниеПользователяИБ.Вставить("РезультатДействия", "УдаленПользовательИБ"); Иначе - ВызватьИсключение ОписаниеОшибки; + ВызватьИсключение ТекстОшибки; КонецЕсли; ИначеЕсли ЗначениеЗаполнено(СтарыйПользователь.ИдентификаторПользователяИБ) Тогда @@ -5088,6 +5949,229 @@ КонецПроцедуры +Процедура СброситьРесурсДатаАвтоматическогоЗапрещенияВхода(Пользователь) + + Блокировка = Новый БлокировкаДанных; + ЭлементБлокировки = Блокировка.Добавить("РегистрСведений.СведенияОПользователях"); + ЭлементБлокировки.Режим = РежимБлокировкиДанных.Исключительный; + ЭлементБлокировки.УстановитьЗначение("Пользователь", Пользователь); + НачатьТранзакцию(); + Попытка + Блокировка.Заблокировать(); + НаборЗаписей = РегистрыСведений.СведенияОПользователях.СоздатьНаборЗаписей(); + НаборЗаписей.Отбор.Пользователь.Установить(Пользователь); + НаборЗаписей.Прочитать(); + Если НаборЗаписей.Количество() > 0 Тогда + НаборЗаписей[0].ДатаАвтоматическогоЗапрещенияВхода = Неопределено; + НаборЗаписей.Записать(); + КонецЕсли; + ЗафиксироватьТранзакцию(); + Исключение + ОтменитьТранзакцию(); + ВызватьИсключение; + КонецПопытки; + +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// Для процедуры КонтрольАктивностиПользователей. + +Процедура ОтключитьНеактивныхИПросроченныхПользователей() + + УстановитьПривилегированныйРежим(Истина); + + Настройки = ПользователиСлужебныйПовтИсп.Настройки(); + Если Не Настройки.ОбщиеНастройкиВхода Тогда + ИзменитьЗаданиеКонтрольАктивностиПользователей(Ложь); + Возврат; + КонецЕсли; + + Запрос = Новый Запрос; + Запрос.УстановитьПараметр("ПустаяДата", '00010101'); + Запрос.УстановитьПараметр("НачалоДняТекущейДатыСеанса", НачалоДня(ТекущаяДатаСеанса())); + Запрос.УстановитьПараметр("ДатаВключенияПросрочкиПользователей", Настройки.Пользователи.ПросрочкаРаботыВПрограммеДатаВключения); + Запрос.УстановитьПараметр("ПросрочкаРаботыПользователей", Настройки.Пользователи.ПросрочкаРаботыВПрограммеДоЗапрещенияВхода); + Запрос.УстановитьПараметр("ДатаВключенияПросрочкиВнешнихПользователей", Настройки.ВнешниеПользователи.ПросрочкаРаботыВПрограммеДатаВключения); + Запрос.УстановитьПараметр("ПросрочкаРаботыВнешнихПользователей", Настройки.ВнешниеПользователи.ПросрочкаРаботыВПрограммеДоЗапрещенияВхода); + + Запрос.Текст = + "ВЫБРАТЬ + | Пользователи.Ссылка КАК Пользователь, + | ВЫБОР + | КОГДА ЕСТЬNULL(СведенияОПользователях.СрокДействия, &ПустаяДата) <> &ПустаяДата + | ТОГДА ЕСТЬNULL(СведенияОПользователях.СрокДействия, &ПустаяДата) <= &НачалоДняТекущейДатыСеанса + | ИНАЧЕ ЛОЖЬ + | КОНЕЦ КАК СрокДействияИстек + |ИЗ + | Справочник.Пользователи КАК Пользователи + | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.СведенияОПользователях КАК СведенияОПользователях + | ПО (СведенияОПользователях.Пользователь = Пользователи.Ссылка) + |ГДЕ + | ЕСТЬNULL(СведенияОПользователях.СрокДействияНеОграничен, ЛОЖЬ) = ЛОЖЬ + | И ЕСТЬNULL(СведенияОПользователях.ДатаАвтоматическогоЗапрещенияВхода, &ПустаяДата) = &ПустаяДата + | И ВЫБОР + | КОГДА ЕСТЬNULL(СведенияОПользователях.СрокДействия, &ПустаяДата) <> &ПустаяДата + | ТОГДА ЕСТЬNULL(СведенияОПользователях.СрокДействия, &ПустаяДата) <= &НачалоДняТекущейДатыСеанса + | КОГДА ЕСТЬNULL(СведенияОПользователях.ПросрочкаРаботыВПрограммеДоЗапрещенияВхода, 0) <> 0 + | ТОГДА ВЫБОР + | КОГДА ЕСТЬNULL(СведенияОПользователях.ДатаПоследнейАктивности, &ПустаяДата) = &ПустаяДата + | ТОГДА &НачалоДняТекущейДатыСеанса > ДОБАВИТЬКДАТЕ(&ДатаВключенияПросрочкиПользователей, ДЕНЬ, СведенияОПользователях.ПросрочкаРаботыВПрограммеДоЗапрещенияВхода) + | КОГДА &НачалоДняТекущейДатыСеанса > ДОБАВИТЬКДАТЕ(ЕСТЬNULL(СведенияОПользователях.ДатаПоследнейАктивности, &ПустаяДата), ДЕНЬ, СведенияОПользователях.ПросрочкаРаботыВПрограммеДоЗапрещенияВхода) + | ТОГДА ИСТИНА + | ИНАЧЕ ЛОЖЬ + | КОНЕЦ + | ИНАЧЕ ВЫБОР + | КОГДА &ПросрочкаРаботыПользователей = 0 + | ТОГДА ЛОЖЬ + | КОГДА ЕСТЬNULL(СведенияОПользователях.ДатаПоследнейАктивности, &ПустаяДата) = &ПустаяДата + | ТОГДА &НачалоДняТекущейДатыСеанса > ДОБАВИТЬКДАТЕ(&ДатаВключенияПросрочкиПользователей, ДЕНЬ, &ПросрочкаРаботыПользователей) + | КОГДА &НачалоДняТекущейДатыСеанса > ДОБАВИТЬКДАТЕ(ЕСТЬNULL(СведенияОПользователях.ДатаПоследнейАктивности, &ПустаяДата), ДЕНЬ, &ПросрочкаРаботыПользователей) + | ТОГДА ИСТИНА + | ИНАЧЕ ЛОЖЬ + | КОНЕЦ + | КОНЕЦ + | + |ОБЪЕДИНИТЬ ВСЕ + | + |ВЫБРАТЬ + | ВнешниеПользователи.Ссылка, + | ВЫБОР + | КОГДА ЕСТЬNULL(СведенияОПользователях.СрокДействия, &ПустаяДата) <> &ПустаяДата + | ТОГДА ЕСТЬNULL(СведенияОПользователях.СрокДействия, &ПустаяДата) <= &НачалоДняТекущейДатыСеанса + | ИНАЧЕ ЛОЖЬ + | КОНЕЦ + |ИЗ + | Справочник.ВнешниеПользователи КАК ВнешниеПользователи + | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.СведенияОПользователях КАК СведенияОПользователях + | ПО (СведенияОПользователях.Пользователь = ВнешниеПользователи.Ссылка) + |ГДЕ + | ЕСТЬNULL(СведенияОПользователях.СрокДействияНеОграничен, ЛОЖЬ) = ЛОЖЬ + | И ЕСТЬNULL(СведенияОПользователях.ДатаАвтоматическогоЗапрещенияВхода, &ПустаяДата) = &ПустаяДата + | И ВЫБОР + | КОГДА ЕСТЬNULL(СведенияОПользователях.СрокДействия, &ПустаяДата) <> &ПустаяДата + | ТОГДА ЕСТЬNULL(СведенияОПользователях.СрокДействия, &ПустаяДата) <= &НачалоДняТекущейДатыСеанса + | КОГДА ЕСТЬNULL(СведенияОПользователях.ПросрочкаРаботыВПрограммеДоЗапрещенияВхода, 0) <> 0 + | ТОГДА ВЫБОР + | КОГДА ЕСТЬNULL(СведенияОПользователях.ДатаПоследнейАктивности, &ПустаяДата) = &ПустаяДата + | ТОГДА &НачалоДняТекущейДатыСеанса > ДОБАВИТЬКДАТЕ(&ДатаВключенияПросрочкиПользователей, ДЕНЬ, СведенияОПользователях.ПросрочкаРаботыВПрограммеДоЗапрещенияВхода) + | КОГДА &НачалоДняТекущейДатыСеанса > ДОБАВИТЬКДАТЕ(ЕСТЬNULL(СведенияОПользователях.ДатаПоследнейАктивности, &ПустаяДата), ДЕНЬ, СведенияОПользователях.ПросрочкаРаботыВПрограммеДоЗапрещенияВхода) + | ТОГДА ИСТИНА + | ИНАЧЕ ЛОЖЬ + | КОНЕЦ + | ИНАЧЕ ВЫБОР + | КОГДА &ПросрочкаРаботыВнешнихПользователей = 0 + | ТОГДА ЛОЖЬ + | КОГДА ЕСТЬNULL(СведенияОПользователях.ДатаПоследнейАктивности, &ПустаяДата) = &ПустаяДата + | ТОГДА &НачалоДняТекущейДатыСеанса > ДОБАВИТЬКДАТЕ(&ДатаВключенияПросрочкиВнешнихПользователей, ДЕНЬ, &ПросрочкаРаботыВнешнихПользователей) + | КОГДА &НачалоДняТекущейДатыСеанса > ДОБАВИТЬКДАТЕ(ЕСТЬNULL(СведенияОПользователях.ДатаПоследнейАктивности, &ПустаяДата), ДЕНЬ, &ПросрочкаРаботыВнешнихПользователей) + | ТОГДА ИСТИНА + | ИНАЧЕ ЛОЖЬ + | КОНЕЦ + | КОНЕЦ"; + Выборка = Запрос.Выполнить().Выбрать(); + + ИнформацияОбОшибке = Неопределено; + Пока Выборка.Следующий() Цикл + Пользователь = Выборка.Пользователь; + Если НЕ Выборка.СрокДействияИстек + И Пользователи.ЭтоПолноправныйПользователь(Пользователь,, Ложь) Тогда + Продолжить; + КонецЕсли; + Блокировка = Новый БлокировкаДанных; + ЭлементБлокировки = Блокировка.Добавить(Метаданные.НайтиПоТипу(ТипЗнч(Пользователь)).ПолноеИмя()); + ЭлементБлокировки.Режим = РежимБлокировкиДанных.Разделяемый; + ЭлементБлокировки.УстановитьЗначение("Ссылка", Пользователь); + ЭлементБлокировки = Блокировка.Добавить("РегистрСведений.СведенияОПользователях"); + ЭлементБлокировки.Режим = РежимБлокировкиДанных.Исключительный; + ЭлементБлокировки.УстановитьЗначение("Пользователь", Пользователь); + НачатьТранзакцию(); + Попытка + Блокировка.Заблокировать(); + ИдентификаторПользователяИБ = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(Пользователь, + "ИдентификаторПользователяИБ"); + ПользовательИБ = Неопределено; + Если ТипЗнч(ИдентификаторПользователяИБ) = Тип("УникальныйИдентификатор") Тогда + ПользовательИБ = ПользователиИнформационнойБазы.НайтиПоУникальномуИдентификатору( + ИдентификаторПользователяИБ); + КонецЕсли; + Если ПользовательИБ <> Неопределено + И ( ПользовательИБ.АутентификацияСтандартная + Или ПользовательИБ.АутентификацияОС + Или ПользовательИБ.АутентификацияOpenID) Тогда + + ОбновляемыеСвойства = Новый Структура; + ОбновляемыеСвойства.Вставить("АутентификацияСтандартная", Ложь); + ОбновляемыеСвойства.Вставить("АутентификацияОС", Ложь); + ОбновляемыеСвойства.Вставить("АутентификацияOpenID", Ложь); + ТекстОшибки = ""; + ТекущийПользователь = Пользователь; // В ТекущийПользователь возвращается ПользовательИБ. + Если Не Пользователи.ЗаписатьПользователяИБ(ПользовательИБ.УникальныйИдентификатор, + ОбновляемыеСвойства, Ложь, ТекстОшибки, ТекущийПользователь) Тогда + ВызватьИсключение ТекстОшибки; + КонецЕсли; + КонецЕсли; + НаборЗаписей = РегистрыСведений.СведенияОПользователях.СоздатьНаборЗаписей(); + НаборЗаписей.Отбор.Пользователь.Установить(Пользователь); + НаборЗаписей.Прочитать(); + Если НаборЗаписей.Количество() = 0 Тогда + СведенияОПользователе = НаборЗаписей.Добавить(); + СведенияОПользователе.Пользователь = Пользователь; + Иначе + СведенияОПользователе = НаборЗаписей[0]; + КонецЕсли; + СведенияОПользователе.ДатаАвтоматическогоЗапрещенияВхода = НачалоДня(ТекущаяДатаСеанса()); + НаборЗаписей.Записать(); + ЗафиксироватьТранзакцию(); + Исключение + ИнформацияОбОшибке = ИнформацияОбОшибке(); + ОтменитьТранзакцию(); + Если Выборка.СрокДействияИстек Тогда + ШаблонКомментария = + НСтр("ru = 'Не удалось снять пользователю ""%1"" признак + |""Вход в программу разрешен"" в связи с окончанием срока действия по причине: + |%2'"); + Иначе + ШаблонКомментария = + НСтр("ru = 'Не удалось снять пользователю ""%1"" признак + |""Вход в программу разрешен"" в связи с отсутствием работы + |в программе более установленного срока по причине: + |%2'"); + КонецЕсли; + ЗаписьЖурналаРегистрации( + НСтр("ru = 'Пользователи.Ошибка автоматического запрещения входа в программу'", + ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), + УровеньЖурналаРегистрации.Ошибка, + Метаданные.НайтиПоТипу(ТипЗнч(Пользователь)), + Пользователь, + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонКомментария, + Пользователь, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке))); + КонецПопытки; + КонецЦикла; + + Если ИнформацияОбОшибке <> Неопределено + Или ЗначениеЗаполнено(Настройки.Пользователи.ПросрочкаРаботыВПрограммеДоЗапрещенияВхода) + Или ЗначениеЗаполнено(Настройки.ВнешниеПользователи.ПросрочкаРаботыВПрограммеДоЗапрещенияВхода) Тогда + // Для проверки просрочки работы в программе, задание выключить нельзя. + Возврат; + КонецЕсли; + + Запрос = Новый Запрос; + Запрос.УстановитьПараметр("ПустаяДата", '00010101'); + Запрос.Текст = + "ВЫБРАТЬ ПЕРВЫЕ 1 + | ИСТИНА КАК ЗначениеИстина + |ИЗ + | РегистрСведений.СведенияОПользователях КАК СведенияОПользователях + |ГДЕ + | СведенияОПользователях.СрокДействия <> &ПустаяДата + | И СведенияОПользователях.ДатаАвтоматическогоЗапрещенияВхода = &ПустаяДата"; + + Если Запрос.Выполнить().Пустой() Тогда + ИзменитьЗаданиеКонтрольАктивностиПользователей(Ложь); + КонецЕсли; + +КонецПроцедуры + //////////////////////////////////////////////////////////////////////////////// // Для процедуры ОбработатьИнтерфейсРолей. diff --git a/SSL/src/CommonModules/ПользователиСлужебныйВМоделиСервиса/Module.bsl b/SSL/src/CommonModules/ПользователиСлужебныйВМоделиСервиса/Module.bsl index e0fdb1e59..06cc0f6e6 100644 --- a/SSL/src/CommonModules/ПользователиСлужебныйВМоделиСервиса/Module.bsl +++ b/SSL/src/CommonModules/ПользователиСлужебныйВМоделиСервиса/Module.bsl @@ -37,7 +37,15 @@ Если ПользователиИнформационнойБазы.ТекущийПользователь().РазделениеДанных.Количество() = 0 Тогда - Возврат ДействияСПользователемСервисаПриНедоступностиНастройкиПользователей(); + Если Пользователи.ЭтоПолноправныйПользователь(, Истина) Тогда + + Возврат ДействияСНовымПользователемСервиса(); + + Иначе + + Возврат ДействияСПользователемСервисаПриНедоступностиНастройкиПользователей(); + + КонецЕсли; ИначеЕсли ЭтоСуществующийПользовательТекущейОбластиДанных(Пользователь) Тогда @@ -109,7 +117,7 @@ Если ЗначениеЗаполнено(ПользовательОбъект.ИдентификаторПользователяИБ) Тогда ПользовательИБ = ПользователиИнформационнойБазы.НайтиПоУникальномуИдентификатору(ПользовательОбъект.ИдентификаторПользователяИБ); - ДоступРазрешен = ПользовательИБ <> Неопределено; + ДоступРазрешен = ПользовательИБ <> Неопределено И Пользователи.ВходВПрограммуРазрешен(ПользовательИБ); Иначе ДоступРазрешен = Ложь; КонецЕсли; @@ -119,20 +127,12 @@ ПользовательСервиса.Zone = РаботаВМоделиСервиса.ЗначениеРазделителяСеанса(); ПользовательСервиса.UserServiceID = ПользовательОбъект.ИдентификаторПользователяСервиса; ПользовательСервиса.FullName = ПользовательОбъект.Наименование; - - Если ДоступРазрешен Тогда - ПользовательСервиса.Name = ПользовательИБ.Имя; - ПользовательСервиса.StoredPasswordValue = ПользовательИБ.СохраняемоеЗначениеПароля; - ПользовательСервиса.Language = ПолучитьКодЯзыка(ПользовательИБ.Язык); - ПользовательСервиса.Access = Истина; - ПользовательСервиса.AdmininstrativeAccess = ПользовательИБ.Роли.Содержит(Метаданные.Роли.ПолныеПрава); - Иначе - ПользовательСервиса.Name = ""; - ПользовательСервиса.StoredPasswordValue = ""; - ПользовательСервиса.Language = ""; - ПользовательСервиса.Access = Ложь; - ПользовательСервиса.AdmininstrativeAccess = Ложь; - КонецЕсли; + ПользовательСервиса.FullName = ПользовательОбъект.Наименование; + ПользовательСервиса.Name = ПользовательИБ.Имя; + ПользовательСервиса.StoredPasswordValue = ПользовательИБ.СохраняемоеЗначениеПароля; + ПользовательСервиса.Language = ПолучитьКодЯзыка(ПользовательИБ.Язык); + ПользовательСервиса.Access = ДоступРазрешен; + ПользовательСервиса.AdmininstrativeAccess = ДоступРазрешен И ПользовательИБ.Роли.Содержит(Метаданные.Роли.ПолныеПрава); КонтактнаяИнформация = Прокси.ФабрикаXDTO.Создать( Прокси.ФабрикаXDTO.Тип("http://www.1c.ru/SaaS/ApplicationUsers", "ContactsList")); @@ -632,8 +632,7 @@ ПраваДоступаОбъектаXDTO.Object.ContactType); Если ВидКИ = Неопределено Тогда ШаблонСообщения = НСтр("ru = 'Получен неизвестный вид контактной информации: %1'"); - ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - ШаблонСообщения, ПраваДоступаОбъектаXDTO.Object.ContactType); + ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонСообщения, ПраваДоступаОбъектаXDTO.Object.ContactType); ВызватьИсключение(ТекстСообщения); КонецЕсли; @@ -646,8 +645,7 @@ КонецЦикла; Иначе ШаблонСообщения = НСтр("ru = 'Получен неизвестный тип объектов доступа: %1'"); - ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - ШаблонСообщения, ОбщегоНазначения.ПредставлениеТипаXDTO(ПраваДоступаОбъектаXDTO.Object.Тип())); + ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонСообщения, ОбщегоНазначения.ПредставлениеТипаXDTO(ПраваДоступаОбъектаXDTO.Object.Тип())); ВызватьИсключение(ТекстСообщения); КонецЕсли; diff --git a/SSL/src/CommonModules/ПользователиСлужебныйКлиент/Module.bsl b/SSL/src/CommonModules/ПользователиСлужебныйКлиент/Module.bsl index cd0bebd1c..19be000ff 100644 --- a/SSL/src/CommonModules/ПользователиСлужебныйКлиент/Module.bsl +++ b/SSL/src/CommonModules/ПользователиСлужебныйКлиент/Module.bsl @@ -5,6 +5,16 @@ #Область СлужебныйПрограммныйИнтерфейс +// Открывает форму, в которой пользователь может сменить пароль. +Процедура ОткрытьФормуСменыПароля(Пользователь = Неопределено, ОбработкаПродолжения = Неопределено) Экспорт + + ПараметрыФормы = Новый Структура; + ПараметрыФормы.Вставить("Пользователь", Пользователь); + + ОткрытьФорму("ОбщаяФорма.СменаПароля", ПараметрыФормы,,,,, ОбработкаПродолжения); + +КонецПроцедуры + //////////////////////////////////////////////////////////////////////////////// // Для работы интерфейса ролей в управляемой форме. @@ -27,35 +37,156 @@ КонецПроцедуры +// Только для внутреннего использования. +// +Функция ВыбратьНазначение(ДанныеФормы, Заголовок, ВыбиратьПользователей = Истина, ЭтоОтбор = Ложь, ОписаниеОповещения = Неопределено) Экспорт + + ДополнительныеПараметры = Новый Структура; + ДополнительныеПараметры.Вставить("ДанныеФормы", ДанныеФормы); + ДополнительныеПараметры.Вставить("ЭтоОтбор", ЭтоОтбор); + ДополнительныеПараметры.Вставить("ОписаниеОповещения", ОписаниеОповещения); + + ОписаниеОповещенияОЗакрытии = Новый ОписаниеОповещения("ПослеВыбораНазначения", ЭтотОбъект, ДополнительныеПараметры); + + Назначение = ?(ЭтоОтбор, ДанныеФормы.ВидПользователей, ДанныеФормы.Объект.Назначение); + + ПараметрыФормы = Новый Структура; + ПараметрыФормы.Вставить("Заголовок", Заголовок); + ПараметрыФормы.Вставить("Назначение", Назначение); + ПараметрыФормы.Вставить("ВыбиратьПользователей", ВыбиратьПользователей); + ПараметрыФормы.Вставить("ЭтоОтбор", ЭтоОтбор); + ОткрытьФорму("ОбщаяФорма.ВыборТиповПользователей", ПараметрыФормы,,,,, ОписаниеОповещенияОЗакрытии); + +КонецФункции + +//////////////////////////////////////////////////////////////////////////////// +// Обработчики условных вызовов из других подсистем. + +// Проверяет авторизацию пользователя и уведомляет об ошибке. +Процедура ПередНачаломРаботыСистемыДоАвторизации(Параметры) Экспорт + + ПараметрыКлиента = СтандартныеПодсистемыКлиентПовтИсп.ПараметрыРаботыКлиентаПриЗапуске(); + + Если ПараметрыКлиента.Свойство("ОшибкаАвторизации") Тогда + Параметры.Отказ = Истина; + Параметры.ИнтерактивнаяОбработка = Новый ОписаниеОповещения( + "ИнтерактивнаяОбработкаПриОшибкеАвторизации", ЭтотОбъект); + Возврат; + КонецЕсли; + +КонецПроцедуры + +// Требует сменить пароль при необходимости. +Процедура ПередНачаломРаботыСистемыПослеОбновленияИнформационнойБазы(Параметры) Экспорт + + ПараметрыКлиента = СтандартныеПодсистемыКлиентПовтИсп.ПараметрыРаботыКлиентаПриЗапуске(); + + Если ПараметрыКлиента.Свойство("ТребуетсяСменитьПароль") Тогда + Параметры.ИнтерактивнаяОбработка = Новый ОписаниеОповещения( + "ИнтерактивнаяОбработкаПриСменеПароляПриЗапуске", ЭтотОбъект); + Возврат; + КонецЕсли; + +КонецПроцедуры + +// Обработчик ожидания проверяет, что срок действия учетной записи истек и нужно завершить работу. +Процедура ПриВыполненииСтандартныхПериодическихПроверок(Параметры, ОбработкаПродолжения) Экспорт + + Если Не Параметры.ВходВПрограммуЗапрещен Тогда + ВыполнитьОбработкуОповещения(ОбработкаПродолжения); + Возврат; + КонецЕсли; + + ОткрытьФорму("ОбщаяФорма.ВходВПрограммуЗапрещен"); + +КонецПроцедуры + #КонецОбласти #Область СлужебныеПроцедурыИФункции -// Проверяет авторизацию пользователя и уведомляет об ошибке. -Процедура ПередНачаломРаботыСистемы(Параметры) Экспорт - - ПараметрыКлиента = СтандартныеПодсистемыКлиентПовтИсп.ПараметрыРаботыКлиентаПриЗапуске(); - - Если НЕ ПараметрыКлиента.Свойство("ОшибкаАвторизации") Тогда - Возврат; - КонецЕсли; - - Параметры.Отказ = Истина; - Параметры.ИнтерактивнаяОбработка = Новый ОписаниеОповещения( - "ИнтерактивнаяОбработкаПриПроверкеАвторизацииПользователя", ЭтотОбъект); - -КонецПроцедуры - /////////////////////////////////////////////////////////////////////////////// // Обработчики оповещений. -// Предупреждает об ошибке авторизации пользователя. -Процедура ИнтерактивнаяОбработкаПриПроверкеАвторизацииПользователя(Параметры, Неопределен) Экспорт +// Предупреждает пользователя об ошибке авторизации. +Процедура ИнтерактивнаяОбработкаПриОшибкеАвторизации(Параметры, Неопределен) Экспорт ПараметрыКлиента = СтандартныеПодсистемыКлиентПовтИсп.ПараметрыРаботыКлиентаПриЗапуске(); - СтандартныеПодсистемыКлиент.ПоказатьПредупреждениеИПродолжить( - Параметры, ПараметрыКлиента.ОшибкаАвторизации); + ПоказатьПредупреждение(Новый ОписаниеОповещения( + "ИнтерактивнаяОбработкаПриОшибкеАвторизацииПослеПредупреждения", ЭтотОбъект, Параметры), + ПараметрыКлиента.ОшибкаАвторизации); + +КонецПроцедуры + +// Завершает работу после предупреждения пользователя об ошибке авторизации. +Процедура ИнтерактивнаяОбработкаПриОшибкеАвторизацииПослеПредупреждения(Параметры) Экспорт + + ВыполнитьОбработкуОповещения(Параметры.ОбработкаПродолжения); + +КонецПроцедуры + +// Предлагает пользователю сменить пароль или завершить работу. +Процедура ИнтерактивнаяОбработкаПриСменеПароляПриЗапуске(Параметры, Неопределен) Экспорт + + ПараметрыФормы = Новый Структура; + ПараметрыФормы.Вставить("ПриВходеВПрограмму", Истина); + + ОткрытьФорму("ОбщаяФорма.СменаПароля", ПараметрыФормы,,,,, Новый ОписаниеОповещения( + "ИнтерактивнаяОбработкаПриСменеПароляПриЗапускеЗавершение", ЭтотОбъект, Параметры)); + +КонецПроцедуры + +// Продолжение процедуры ИнтерактивнаяОбработкаПриСменеПароляПриЗапуске. +Процедура ИнтерактивнаяОбработкаПриСменеПароляПриЗапускеЗавершение(Результат, Параметры) Экспорт + + Если Не ЗначениеЗаполнено(Результат) Тогда + Параметры.Отказ = Истина; + КонецЕсли; + + ВыполнитьОбработкуОповещения(Параметры.ОбработкаПродолжения); + +КонецПроцедуры + +// Записывает в форму результат выбора назначения +Процедура ПослеВыбораНазначения(РезультатЗакрытия, ДополнительныеПараметры) Экспорт + + Если РезультатЗакрытия = Неопределено Тогда + Возврат; + КонецЕсли; + + Если Не ДополнительныеПараметры.ЭтоОтбор Тогда + Назначение =ДополнительныеПараметры.ДанныеФормы.Объект.Назначение; + Назначение.Очистить(); + КонецЕсли; + + МассивСинонимов = Новый Массив; + МассивТипов = Новый Массив; + + Для Каждого Элемент Из РезультатЗакрытия Цикл + + Если Элемент.Пометка Тогда + МассивСинонимов.Добавить(Элемент.Представление); + МассивТипов.Добавить(Элемент.Значение); + Если Не ДополнительныеПараметры.ЭтоОтбор Тогда + НоваяСтрока = Назначение.Добавить(); + НоваяСтрока.ТипПользователей = Элемент.Значение; + КонецЕсли; + КонецЕсли; + + КонецЦикла; + + ЗаголовокЭлемента = СтрСоединить(МассивСинонимов, ", "); + + Если ДополнительныеПараметры.ЭтоОтбор Тогда + ДополнительныеПараметры.ДанныеФормы.ВидПользователей = ЗаголовокЭлемента; + Иначе + ДополнительныеПараметры.ДанныеФормы.Элементы.ВыбратьНазначение.Заголовок = ЗаголовокЭлемента; + КонецЕсли; + + Если ДополнительныеПараметры.ОписаниеОповещения <> Неопределено Тогда + ВыполнитьОбработкуОповещения(ДополнительныеПараметры.ОписаниеОповещения, МассивТипов); + КонецЕсли; КонецПроцедуры @@ -79,8 +210,9 @@ КонецЕсли; Если Пользователь <> ТекущийПользователь Тогда - ТекстПредупреждения = НСтр("ru = 'Для просмотра настроек другого пользователя необходимо запустить программу от его имени - |и открыть нужный отчет или форму.'"); + ТекстПредупреждения = + НСтр("ru = 'Для просмотра настроек другого пользователя необходимо + |запустить программу от его имени и открыть нужный отчет или форму.'"); ПоказатьПредупреждение(,ТекстПредупреждения); Возврат; КонецЕсли; @@ -88,7 +220,7 @@ Если ЭлементДереваЗначений.Имя = "НастройкиОтчетовДерево" Тогда КлючОбъекта = ЭлементДереваЗначений.ТекущиеДанные.Ключи[0].Значение; - КлючОбъектаМассивСтрок = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(КлючОбъекта, "/"); + КлючОбъектаМассивСтрок = СтрРазделить(КлючОбъекта, "/", Ложь); КлючВарианта = КлючОбъектаМассивСтрок[1]; ПараметрыОтчета = Новый Структура("КлючВарианта, КлючПользовательскихНастроек", КлючВарианта, ""); @@ -106,26 +238,30 @@ Если КлючОбъекта.Пометка = Истина Тогда - ОткрытьФорму(КлючОбъекта.Значение); + ИмяФормы = СтрРазделить(КлючОбъекта.Значение, "/")[0]; + ОткрытьФорму(ИмяФормы); Возврат; Иначе РодительЭлемента = ЭлементДереваЗначений.ТекущиеДанные.ПолучитьРодителя(); Если ЭлементДереваЗначений.ТекущиеДанные.ТипСтроки = "НастройкиРабочегоСтола" Тогда - ПоказатьПредупреждение(,НСтр("ru = 'Для просмотра настроек рабочего стола перейдите к разделу ""Рабочий стол"" - |в командном интерфейсе программы.'")); + ПоказатьПредупреждение(, + НСтр("ru = 'Для просмотра настроек рабочего стола перейдите к разделу + |""Рабочий стол"" в командном интерфейсе программы.'")); Возврат; КонецЕсли; Если ЭлементДереваЗначений.ТекущиеДанные.ТипСтроки = "НастройкиКомандногоИнтерфейса" Тогда - ПоказатьПредупреждение(,НСтр("ru = 'Для просмотра настроек командного интерфейса выберите нужный раздел - |командного интерфейса программы.'")); + ПоказатьПредупреждение(, + НСтр("ru = 'Для просмотра настроек командного интерфейса + |выберите нужный раздел командного интерфейса программы.'")); Возврат; КонецЕсли; Если РодительЭлемента <> Неопределено Тогда - ТекстПредупреждения = НСтр("ru = 'Для просмотра данной настройки необходимо открыть ""%1"" - |и затем перейти к форме ""%2"".'"); + ТекстПредупреждения = + НСтр("ru = 'Для просмотра данной настройки необходимо открыть ""%1"" + |и затем перейти к форме ""%2"".'"); ТекстПредупреждения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ТекстПредупреждения, РодительЭлемента.Настройка, ЭлементДереваЗначений.ТекущиеДанные.Настройка); ПоказатьПредупреждение(,ТекстПредупреждения); @@ -156,32 +292,6 @@ КонецПроцедуры -// Предназначена для формирования окончания у слова "настройка". -// -// Параметры: -// КоличествоНастроек - Число - количество настроек. -// -// Возвращаемое значение: -// Строка - вида "хх настроек" с правильным окончанием. -// -Функция ФормированиеСтрокиКоличестваНастроек(КоличествоНастроек) Экспорт - - ПрописьЧисла = ЧислоПрописью( - КоличествоНастроек, - "Л = ru_RU", - НСтр("ru = ',,,,,,,,0'")); - ПрописьЧислаИПредмета = ЧислоПрописью( - КоличествоНастроек, - "Л = ru_RU", - НСтр("ru = 'настройка,настройки,настроек,,,,,,0'")); - ПрописьПредмета = СтрЗаменить( - ПрописьЧислаИПредмета, - ПрописьЧисла, - Формат(КоличествоНастроек, "ЧДЦ=0") + " "); - - Возврат ПрописьПредмета; -КонецФункции - // Предназначена для формирования строки пояснения при копировании настроек. // // Параметры: @@ -200,17 +310,19 @@ ПредставлениеНастройки = Лев(ПредставлениеНастройки, 24) + "..."; КонецЕсли; - ТекстПояснения = НСтр("ru = '""%1"" скопирована %2'"); - ТекстПояснения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - ТекстПояснения, ПредставлениеНастройки, ПояснениеКомуСкопированыНастройки); + ТекстПояснения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = '""%1"" скопирована %2'"), + ПредставлениеНастройки, ПояснениеКомуСкопированыНастройки); Иначе - ПрописьПредмета = ФормированиеСтрокиКоличестваНастроек(КоличествоНастроек); - ТекстПояснения = НСтр("ru = 'Скопировано %1 %2'"); - ТекстПояснения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - ТекстПояснения, ПрописьПредмета, ПояснениеКомуСкопированыНастройки); + ПрописьПредмета = Формат(КоличествоНастроек, "ЧДЦ=0") + " " + + ПользователиСлужебныйКлиентСервер.ПредметЦелогоЧисла(КоличествоНастроек, + "Л = ru_RU", НСтр("ru = 'настройка,настройки,настроек,,,,,,0'")); + + ТекстПояснения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Скопировано %1 %2'"), + ПрописьПредмета, ПояснениеКомуСкопированыНастройки); КонецЕсли; Возврат ТекстПояснения; + КонецФункции // Формирует строку получателя настройки. @@ -226,16 +338,13 @@ Функция ПояснениеПользователи(КоличествоПользователей, Пользователь) Экспорт Если КоличествоПользователей = 1 Тогда - ПояснениеКомуСкопированыНастройки = НСтр("ru = 'пользователю ""%1""'"); - ПояснениеКомуСкопированыНастройки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - ПояснениеКомуСкопированыНастройки, Пользователь); + ПояснениеКомуСкопированыНастройки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'пользователю ""%1""'"), Пользователь); Иначе - ПояснениеКомуСкопированыНастройки = НСтр("ru = '%1 пользователям'"); - ПояснениеКомуСкопированыНастройки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - ПояснениеКомуСкопированыНастройки, КоличествоПользователей); + ПояснениеКомуСкопированыНастройки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = '%1 пользователям'"), КоличествоПользователей); КонецЕсли; Возврат ПояснениеКомуСкопированыНастройки; + КонецФункции #КонецОбласти diff --git a/SSL/src/CommonModules/ПользователиСлужебныйКлиентСервер/Module.bsl b/SSL/src/CommonModules/ПользователиСлужебныйКлиентСервер/Module.bsl index 486e162fd..d1bffbe0a 100644 --- a/SSL/src/CommonModules/ПользователиСлужебныйКлиентСервер/Module.bsl +++ b/SSL/src/CommonModules/ПользователиСлужебныйКлиентСервер/Module.bsl @@ -3,6 +3,34 @@ // //////////////////////////////////////////////////////////////////////////////// +#Область СлужебныйПрограммныйИнтерфейс + +// Возвращает строки вида "день", "дня", "дней". +// +// Параметры: +// Число - Число - целое число, к которому нужно добавить предмет исчисления. +// ФорматнаяСтрока - Строка - см. одноименный параметр метода ЧислоПрописью, +// например: "Л = ru_RU". +// ПараметрыПредметаИсчисления - Строка - см. одноименный параметр метода ЧислоПрописью, +// например: НСтр("ru = 'день,дня,дней,,,,,,0'"). +// +// Возвращаемое значение: +// Строка. +// +Функция ПредметЦелогоЧисла(Число, ФорматнаяСтрока, ПараметрыПредметаИсчисления) Экспорт + + ЦелоеЧисло = Цел(Число); + + ПрописьЧисла = ЧислоПрописью(ЦелоеЧисло, ФорматнаяСтрока, НСтр("ru = ',,,,,,,,0'")); + + ПрописьЧислаИПредмета = ЧислоПрописью(ЦелоеЧисло, ФорматнаяСтрока, ПараметрыПредметаИсчисления); + + Возврат СтрЗаменить(ПрописьЧислаИПредмета, ПрописьЧисла, ""); + +КонецФункции + +#КонецОбласти + #Область СлужебныеПроцедурыИФункции // Вычисляет начальное имя для входа по полному имени пользователя. @@ -21,7 +49,7 @@ ПозицияРазделителя = 0; Для каждого Разделитель Из Разделители Цикл - ПозицияТекущегоРазделителя = Найти(ПолноеИмя, Разделитель); + ПозицияТекущегоРазделителя = СтрНайти(ПолноеИмя, Разделитель); Если ПозицияТекущегоРазделителя > 0 И ( ПозицияРазделителя = 0 ИЛИ ПозицияРазделителя > ПозицияТекущегоРазделителя ) Тогда @@ -50,4 +78,71 @@ КонецФункции +// Для форма элементов справочников Пользователи и ВнешниеПользователи. +Процедура ОбновитьОграничениеСрокаДействия(Форма) Экспорт + + Элементы = Форма.Элементы; + + Элементы.ИзменитьОграничениеНаВходВПрограмму.Видимость = + Элементы.СвойстваПользователяИБ.Видимость И Форма.УровеньДоступа.УправлениеСписком; + + Если Не Элементы.СвойстваПользователяИБ.Видимость Тогда + Элементы.ВходВПрограммуРазрешен.Заголовок = ""; + Возврат; + КонецЕсли; + + Элементы.ИзменитьОграничениеНаВходВПрограмму.Доступность = Форма.УровеньДоступа.НастройкиДляВхода; + + ЗаголовокСОграничением = ""; + + Если Форма.СрокДействияНеОграничен Тогда + ЗаголовокСОграничением = НСтр("ru = 'Вход в программу разрешен (без ограничения срока)'"); + + ИначеЕсли ЗначениеЗаполнено(Форма.СрокДействия) Тогда + ЗаголовокСОграничением = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Вход в программу разрешен (до %1)'"), + Формат(Форма.СрокДействия, "ДФ=dd.MM.yyyy")); + + ИначеЕсли ЗначениеЗаполнено(Форма.ПросрочкаРаботыВПрограммеДоЗапрещенияВхода) Тогда + ЗаголовокСОграничением = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Вход в программу разрешен (запретить, если не работает более %1)'"), + Формат(Форма.ПросрочкаРаботыВПрограммеДоЗапрещенияВхода, "ЧГ=") + " " + + ПредметЦелогоЧисла(Форма.ПросрочкаРаботыВПрограммеДоЗапрещенияВхода, + "Л = ru_RU", НСтр("ru = 'день,дня,дней,,,,,,0'"))); + КонецЕсли; + + Если ЗначениеЗаполнено(ЗаголовокСОграничением) Тогда + Элементы.ВходВПрограммуРазрешен.Заголовок = ЗаголовокСОграничением; + Элементы.ИзменитьОграничениеНаВходВПрограмму.Заголовок = НСтр("ru = 'Изменить ограничение'"); + Иначе + Элементы.ВходВПрограммуРазрешен.Заголовок = ""; + Элементы.ИзменитьОграничениеНаВходВПрограмму.Заголовок = НСтр("ru = 'Установить ограничение'"); + КонецЕсли; + +КонецПроцедуры + +// Для форма элементов справочников Пользователи и ВнешниеПользователи. +Процедура УстановитьНаличиеПароля(Форма, ПарольУстановлен) Экспорт + + Элементы = Форма.Элементы; + + Если ПарольУстановлен Тогда + Элементы.НадписьНаличиеПароля.Заголовок = НСтр("ru = 'Пароль установлен'"); + Элементы.ПотребоватьСменуПароляПриВходе.Заголовок = + НСтр("ru = 'Потребовать смену пароля при входе'"); + Иначе + Элементы.НадписьНаличиеПароля.Заголовок = НСтр("ru = 'Пустой пароль'"); + Элементы.ПотребоватьСменуПароляПриВходе.Заголовок = + НСтр("ru = 'Потребовать установку пароля при входе'"); + КонецЕсли; + + Если ПарольУстановлен + И Форма.Объект.Ссылка = ПользователиКлиентСервер.АвторизованныйПользователь() Тогда + + Элементы.СменитьПароль.Заголовок = НСтр("ru = 'Сменить пароль...'"); + Иначе + Элементы.СменитьПароль.Заголовок = НСтр("ru = 'Установить пароль...'"); + КонецЕсли; + +КонецПроцедуры + #КонецОбласти diff --git a/SSL/src/CommonModules/ПользователиСлужебныйПовтИсп/Module.bsl b/SSL/src/CommonModules/ПользователиСлужебныйПовтИсп/Module.bsl index 7c53c2fcc..8fa4933a7 100644 --- a/SSL/src/CommonModules/ПользователиСлужебныйПовтИсп/Module.bsl +++ b/SSL/src/CommonModules/ПользователиСлужебныйПовтИсп/Module.bsl @@ -25,11 +25,9 @@ ИначеЕсли НЕ СохраненныеПараметры.Свойство("ВсеРоли") Тогда ПредставлениеПараметра = НСтр("ru = 'Все роли'"); - КонецЕсли; Если ЗначениеЗаполнено(ПредставлениеПараметра) Тогда - ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Ошибка обновления информационной базы. |Не заполнен параметр работы пользователей: @@ -46,6 +44,61 @@ #Область СлужебныеПроцедурыИФункции +// Настройки работы подсистемы Пользователи. +// См. также описание процедуры ПриОпределенииНастроек в общем модуле ПользователиПереопределяемый. +// +// Возвращаемое значение: +// Структура - со свойствами: +// * ОбщиеНастройкиВхода - Булево - если Ложь, +// тогда в панели администрирования "Настройки прав и пользователей" возможность +// открытия формы настроек входа будет скрыта, как и поле СрокДействия в карточках +// пользователя и внешнего пользователя. +// +// * РедактированиеРолей - Булево - если Ложь, тогда +// интерфейс изменения ролей в карточках пользователя, внешнего пользователя и +// группы внешних пользователей будет скрыт (в том числе для администратора). +// +// * ВнешниеПользователи - Структура - со свойствами, как у свойства Пользователи (см. далее). +// * Пользователи - Структура - со свойствами: +// +// * ПарольДолженОтвечатьТребованиямСложности - Булево - проверять сложность нового пароля. +// * МинимальнаяДлинаПароля - Число - проверять длину нового пароля. +// +// * МаксимальныйСрокДействияПароля - Число - дней после первого входа с новым паролем, после +// которого пользователю потребуется сменить пароль. +// * МинимальныйСрокДействияПароля - Число - дней после первого входа с новым паролем, в течение +// которого пользователь не сможет сменить пароль. +// * ЗапретитьПовторениеПароляСредиПоследних - Число - паролей, хеши которых будут храниться для проверки. +// +// * ПросрочкаРаботыВПрограммеДоЗапрещенияВхода - Число - дней относительно последней активности пользователя, +// после которых вход в программу будет запрещен. +// * ПросрочкаРаботыВПрограммеДатаВключения - Дата - момент записи ненулевого количества дней +// просрочки вместо нулевого. +// +Функция Настройки() Экспорт + + Настройки = Новый Структура; + Настройки.Вставить("ОбщиеНастройкиВхода", Истина); + Настройки.Вставить("РедактированиеРолей", Истина); + + ИнтеграцияСтандартныхПодсистем.ПриОпределенииНастроек(Настройки); + ПользователиПереопределяемый.ПриОпределенииНастроек(Настройки); + + Если ОбщегоНазначенияПовтИсп.РазделениеВключено() + Или СтандартныеПодсистемыСервер.ЭтоБазоваяВерсияКонфигурации() + Или ОбщегоНазначенияПовтИсп.ЭтоАвтономноеРабочееМесто() Тогда + + Настройки.Вставить("ОбщиеНастройкиВхода", Ложь); + КонецЕсли; + + ВсеНастройки = ПользователиСлужебный.НастройкиВхода(); + ВсеНастройки.Вставить("ОбщиеНастройкиВхода", Настройки.ОбщиеНастройкиВхода); + ВсеНастройки.Вставить("РедактированиеРолей", Настройки.РедактированиеРолей); + + Возврат ВсеНастройки; + +КонецФункции + // Возвращает дерево ролей с подсистемами или без них. // Если роль не принадлежит ни одной подсистеме она добавляется "в корень". // @@ -104,7 +157,7 @@ //////////////////////////////////////////////////////////////////////////////// // Вспомогательные процедуры и функции. -Процедура ЗаполнитьПодсистемыИРоли(КоллекцияСтрокДерева, Подсистемы, ТипПользователей) +Процедура ЗаполнитьПодсистемыИРоли(КоллекцияСтрокДерева, Подсистемы, ТипПользователей, ВсеРоли = Неопределено) НедоступныеРоли = ПользователиСлужебный.НедоступныеРолиПоТипуПользователей(ТипПользователей); @@ -112,27 +165,36 @@ Подсистемы = Метаданные.Подсистемы; КонецЕсли; + Если ВсеРоли = Неопределено Тогда + ВсеРоли = Новый Соответствие; + Для Каждого Роль Из Метаданные.Роли Цикл + + Если НедоступныеРоли.Получить(Роль.Имя) <> Неопределено + Или ВРег(Лев(Роль.Имя, СтрДлина("Удалить"))) = ВРег("Удалить") Тогда + + Продолжить; + КонецЕсли; + ВсеРоли.Вставить(Роль, Истина); + КонецЦикла; + КонецЕсли; + Для каждого Подсистема Из Подсистемы Цикл ОписаниеПодсистемы = КоллекцияСтрокДерева.Добавить(); ОписаниеПодсистемы.Имя = Подсистема.Имя; ОписаниеПодсистемы.Синоним = ?(ЗначениеЗаполнено(Подсистема.Синоним), Подсистема.Синоним, Подсистема.Имя); - ЗаполнитьПодсистемыИРоли(ОписаниеПодсистемы.Строки, Подсистема.Подсистемы, ТипПользователей); + ЗаполнитьПодсистемыИРоли(ОписаниеПодсистемы.Строки, Подсистема.Подсистемы, ТипПользователей, ВсеРоли); - Для каждого Роль Из Метаданные.Роли Цикл - Если НедоступныеРоли.Получить(Роль) <> Неопределено - ИЛИ ВРег(Лев(Роль.Имя, СтрДлина("Удалить"))) = ВРег("Удалить") Тогда - + Для Каждого ОбъектМетаданных Из Подсистема.Состав Цикл + Если ВсеРоли[ОбъектМетаданных] = Неопределено Тогда Продолжить; КонецЕсли; - - Если Подсистема.Состав.Содержит(Роль) Тогда - ОписаниеРоли = ОписаниеПодсистемы.Строки.Добавить(); - ОписаниеРоли.ЭтоРоль = Истина; - ОписаниеРоли.Имя = Роль.Имя; - ОписаниеРоли.Синоним = ?(ЗначениеЗаполнено(Роль.Синоним), Роль.Синоним, Роль.Имя); - КонецЕсли; + Роль = ОбъектМетаданных; + ОписаниеРоли = ОписаниеПодсистемы.Строки.Добавить(); + ОписаниеРоли.ЭтоРоль = Истина; + ОписаниеРоли.Имя = Роль.Имя; + ОписаниеРоли.Синоним = ?(ЗначениеЗаполнено(Роль.Синоним), Роль.Синоним, Роль.Имя); КонецЦикла; Если ОписаниеПодсистемы.Строки.НайтиСтроки(Новый Структура("ЭтоРоль", Истина), Истина).Количество() = 0 Тогда diff --git a/SSL/src/CommonModules/ПоставляемыеДанные/Module.bsl b/SSL/src/CommonModules/ПоставляемыеДанные/Module.bsl index 4467a56b9..4945f44bd 100644 --- a/SSL/src/CommonModules/ПоставляемыеДанные/Module.bsl +++ b/SSL/src/CommonModules/ПоставляемыеДанные/Module.bsl @@ -199,7 +199,7 @@ КонецПроцедуры -// Удаляет файл из кеша. +// Удаляет файл из кэша. // // Параметры: // СсылкаИлиИдентификатор - СправочникСсылка.ПоставляемыеДанные или УникальныйИдентификатор. @@ -328,7 +328,7 @@ КонецФункции -// Проверяет наличие данных с указанными ключевыми характеристиками в кеше. +// Проверяет наличие данных с указанными ключевыми характеристиками в кэше. // // Параметры: // Дескриптор - ОбъектXDTO Descriptor. @@ -442,10 +442,10 @@ + ", " + Характеристика.Code + ": " + Характеристика.Value; КонецЦикла; - Описание = Описание + - СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + Описание = Описание + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = ', добавлен: %1 (%2), рекомендовано загрузить: %3 (%2)'"), - МестноеВремя(Дескриптор.CreationDate, ЧасовойПоясСеанса()), ПредставлениеЧасовогоПояса(ЧасовойПоясСеанса()), + МестноеВремя(Дескриптор.CreationDate, ЧасовойПоясСеанса()), + ПредставлениеЧасовогоПояса(ЧасовойПоясСеанса()), МестноеВремя(Дескриптор.RecommendedUpdateDate)); Иначе Описание = Дескриптор.ВидДанных; @@ -454,10 +454,10 @@ + ", " + Характеристика.Код + ": " + Характеристика.Значение; КонецЦикла; - Описание = Описание + - СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + Описание = Описание + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = ', добавлен: %1 (%2)'"), - МестноеВремя(Дескриптор.ДатаДобавления, ЧасовойПоясСеанса()), ПредставлениеЧасовогоПояса(ЧасовойПоясСеанса())); + МестноеВремя(Дескриптор.ДатаДобавления, ЧасовойПоясСеанса()), + ПредставлениеЧасовогоПояса(ЧасовойПоясСеанса())); КонецЕсли; Возврат Описание; @@ -605,9 +605,9 @@ Функция НовыйПроксиНаМенеджереСервиса() - URL = Константы.ВнутреннийАдресМенеджераСервиса.Получить(); - ИмяПользователя = Константы.ИмяСлужебногоПользователяМенеджераСервиса.Получить(); - ПарольПользователя = Константы.ПарольСлужебногоПользователяМенеджераСервиса.Получить(); + URL = РаботаВМоделиСервиса.ВнутреннийАдресМенеджераСервиса(); + ИмяПользователя = РаботаВМоделиСервиса.ИмяСлужебногоПользователяМенеджераСервиса(); + ПарольПользователя = РаботаВМоделиСервиса.ПарольСлужебногоПользователяМенеджераСервиса(); АдресСервиса = URL + "/ws/SuppliedData?wsdl"; @@ -749,7 +749,7 @@ | |Ссылка на файл: ""%2"".'"), СообщениеОбОшибке, - ПолучитьНавигационнуюСсылку(Файл) ); + ПолучитьНавигационнуюСсылку(Файл)); КонецЕсли; Возврат СообщениеОбОшибке; diff --git a/SSL/src/CommonModules/ПрефиксацияОбъектовКлиентСервер/Module.bsl b/SSL/src/CommonModules/ПрефиксацияОбъектовКлиентСервер/Module.bsl index 3ca9a16ed..4ec8d5215 100644 --- a/SSL/src/CommonModules/ПрефиксацияОбъектовКлиентСервер/Module.bsl +++ b/SSL/src/CommonModules/ПрефиксацияОбъектовКлиентСервер/Module.bsl @@ -145,7 +145,7 @@ Символ = Сред(НомерПолный, Индекс, 1); - Если Найти(СтрокаЦифровыхСимволов, Символ) > 0 Тогда + Если СтрНайти(СтрокаЦифровыхСимволов, Символ) > 0 Тогда Номер = Сред(НомерПолный, Индекс); Прервать; КонецЕсли; @@ -187,7 +187,7 @@ Символ = Сред(НомерОбъекта, Индекс, 1); - Если Найти(СтрокаЦифровыхСимволов, Символ) > 0 Тогда + Если СтрНайти(СтрокаЦифровыхСимволов, Символ) > 0 Тогда Прервать; КонецЕсли; @@ -239,16 +239,15 @@ Функция НомерСодержитСтандартныйПрефикс(Знач НомерОбъекта) - ПозицияРазделителя = Найти(НомерОбъекта, "-"); + ПозицияРазделителя = СтрНайти(НомерОбъекта, "-"); + + Возврат (ПозицияРазделителя = 3 Или ПозицияРазделителя = 5); - Возврат ПозицияРазделителя = 3 - ИЛИ ПозицияРазделителя = 5 - ; КонецФункции Функция НомерСодержитПятизначныйПрефикс(Знач НомерОбъекта) - Возврат Найти(НомерОбъекта, "-") = 5; + Возврат СтрНайти(НомерОбъекта, "-") = 5; КонецФункции diff --git a/SSL/src/CommonModules/ПрефиксацияОбъектовСлужебный/Module.bsl b/SSL/src/CommonModules/ПрефиксацияОбъектовСлужебный/Module.bsl index a552f74b1..cde8989c1 100644 --- a/SSL/src/CommonModules/ПрефиксацияОбъектовСлужебный/Module.bsl +++ b/SSL/src/CommonModules/ПрефиксацияОбъектовСлужебный/Module.bsl @@ -20,8 +20,9 @@ // задана в другом интервале периодичности по сравнению с предыдущим значением даты. // Ложь - организация и дата документа не были изменены. // -Функция ДатаИлиОрганизацияОбъектаИзменена(Ссылка, Знач ДатаПослеИзменения, Знач ОрганизацияПослеИзменения, ПолноеИмяТаблицы) Экспорт +Функция ДатаИлиОрганизацияОбъектаИзменена(Ссылка, Знач ДатаПослеИзменения, Знач ОрганизацияПослеИзменения) Экспорт + ПолноеИмяТаблицы = Ссылка.Метаданные().ПолноеИмя(); ТекстЗапроса = " |ВЫБРАТЬ | ШапкаОбъекта.Дата КАК Дата, @@ -62,8 +63,9 @@ // Возвращаемое значение: // Истина - организация объекта была изменена. Ложь - организация не была изменена. // -Функция ОрганизацияОбъектаИзменена(Ссылка, Знач ОрганизацияПослеИзменения, ПолноеИмяТаблицы) Экспорт +Функция ОрганизацияОбъектаИзменена(Ссылка, Знач ОрганизацияПослеИзменения) Экспорт + ПолноеИмяТаблицы = Ссылка.Метаданные().ПолноеИмя(); ТекстЗапроса = " |ВЫБРАТЬ | ЕСТЬNULL(ШапкаОбъекта.[ИмяРеквизитаОрганизация].Префикс, """") КАК ПрефиксОрганизацииДоИзменения diff --git a/SSL/src/CommonModules/ПрефиксацияОбъектовСобытия/Module.bsl b/SSL/src/CommonModules/ПрефиксацияОбъектовСобытия/Module.bsl index f803ab472..f575ab5da 100644 --- a/SSL/src/CommonModules/ПрефиксацияОбъектовСобытия/Module.bsl +++ b/SSL/src/CommonModules/ПрефиксацияОбъектовСобытия/Module.bsl @@ -220,7 +220,7 @@ КонецЕсли; Если ПрефиксацияОбъектовСлужебный.ДатаИлиОрганизацияОбъектаИзменена(Объект.Ссылка, Объект.Дата, - Объект[ИмяРеквизитаОрганизация(Объект.Метаданные())], Объект.Метаданные().ПолноеИмя()) Тогда + Объект[ИмяРеквизитаОрганизация(Объект.Метаданные())]) Тогда Объект.Номер = ""; @@ -239,7 +239,7 @@ КонецЕсли; Если ПрефиксацияОбъектовСлужебный.ОрганизацияОбъектаИзменена(Объект.Ссылка, - Объект[ИмяРеквизитаОрганизация(Объект.Метаданные())], Объект.Метаданные().ПолноеИмя()) Тогда + Объект[ИмяРеквизитаОрганизация(Объект.Метаданные())]) Тогда Объект.Код = ""; diff --git a/SSL/src/CommonModules/ПрисоединенныеФайлы/Module.bsl b/SSL/src/CommonModules/ПрисоединенныеФайлы/Module.bsl index eb222a5ce..20f525e12 100644 --- a/SSL/src/CommonModules/ПрисоединенныеФайлы/Module.bsl +++ b/SSL/src/CommonModules/ПрисоединенныеФайлы/Module.bsl @@ -54,8 +54,15 @@ ПрисоединенныйФайл, СообщениеОбОшибке); + ПредставлениеВладельцаФайла = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Присоединен к %1 : %2'"), + Строка(ТипЗнч(ФайлОбъект.ВладелецФайла)), + ФайлОбъект.ВладелецФайла); + ВызватьИсключение ФайловыеФункцииСлужебныйКлиентСервер.ОшибкаФайлНеНайденВХранилищеФайлов( - ФайлОбъект.Наименование + "." + ФайлОбъект.Расширение, Ложь); + ФайлОбъект.Наименование + "." + ФайлОбъект.Расширение, + Ложь, + ПредставлениеВладельцаФайла); КонецЕсли; Иначе ПолныйПуть = ФайловыеФункцииСлужебный.ПолныйПутьТома(ФайлОбъект.Том) + ФайлОбъект.ПутьКФайлу; @@ -71,8 +78,16 @@ ПрисоединенныйФайл, СообщениеОбОшибке); + ПредставлениеВладельцаФайла = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Присоединен к %1 : %2'"), + Строка(ТипЗнч(ФайлОбъект.ВладелецФайла)), + ФайлОбъект.ВладелецФайла); + ВызватьИсключение ФайловыеФункцииСлужебныйКлиентСервер.ОшибкаФайлНеНайденВХранилищеФайлов( - ФайлОбъект.Наименование + "." + ФайлОбъект.Расширение); + ФайлОбъект.Наименование + "." + ФайлОбъект.Расширение, + , + ПредставлениеВладельцаФайла); + КонецПопытки; КонецЕсли; @@ -176,6 +191,10 @@ // Процедура ПолучитьПрикрепленныеФайлыКОбъекту(Знач Объект, Знач МассивФайлов) Экспорт + Если ТипЗнч(Объект) = Тип("СправочникСсылка.ИдентификаторыОбъектовМетаданных") Тогда + Возврат; + КонецЕсли; + ТипыВладельцев = Метаданные.РегистрыСведений.НаличиеПрисоединенныхФайлов.Измерения.ОбъектСФайлами.Тип.Типы(); Если ТипыВладельцев.Найти(ТипЗнч(Объект)) <> Неопределено Тогда @@ -225,7 +244,7 @@ // Если расширение не задано явно, выделяем его из имени файла. Если РасширениеБезТочки = Неопределено Тогда - ЧастиИмениФайла = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(ИмяБезРасширения, ".", Ложь); + ЧастиИмениФайла = СтрРазделить(ИмяБезРасширения, ".", Ложь); Если ЧастиИмениФайла.Количество() > 1 Тогда РасширениеБезТочки = ЧастиИмениФайла[ЧастиИмениФайла.Количество()-1]; ИмяБезРасширения = Лев(ИмяБезРасширения, СтрДлина(ИмяБезРасширения) - (СтрДлина(РасширениеБезТочки)+1)); @@ -728,44 +747,58 @@ КонецПроцедуры -// Устарела. Следует использовать процедуру ДобавитьПодписьКФайлу. -Процедура ЗанестиИнформациюОднойПодписи(Знач ПрисоединенныйФайл, Знач ДанныеПодписи) Экспорт +//////////////////////////////////////////////////////////////////////////////// +// Обработчики подписок на события. + +// Обработчик подписки на событие ОбработкаПолученияФормы для переопределения формы присоединенного файла. +// +// Параметры: +// Источник - СправочникМенеджер - менеджер справочника с именем "*ПрисоединенныеФайлы". +// ВидФормы - Строка - имя стандартной формы. +// Параметры - Структура - параметры формы. +// ВыбраннаяФорма - Строка - имя или объект метаданных открываемой формы. +// ДополнительнаяИнформация - Структура - дополнительная информация открытия формы. +// СтандартнаяОбработка - Булево - признак выполнения стандартной (системной) обработки события. +// +Процедура ПереопределитьПолучаемуюФормуПрисоединенногоФайла(Источник, ВидФормы, Параметры, + ВыбраннаяФорма, ДополнительнаяИнформация, СтандартнаяОбработка) Экспорт - СвойстваПодписи = Новый Структура; - СвойстваПодписи.Вставить("Подпись", ДанныеПодписи.НоваяПодписьДвоичныеДанные); - СвойстваПодписи.Вставить("Отпечаток", ДанныеПодписи.Отпечаток); - СвойстваПодписи.Вставить("ДатаПодписи", ДанныеПодписи.ДатаПодписи); - СвойстваПодписи.Вставить("Комментарий", ДанныеПодписи.Комментарий); - СвойстваПодписи.Вставить("ИмяФайлаПодписи", ДанныеПодписи.ИмяФайлаПодписи); - СвойстваПодписи.Вставить("КомуВыданСертификат", ДанныеПодписи.КомуВыданСертификат); - СвойстваПодписи.Вставить("Сертификат", ДанныеПодписи.ДвоичныеДанныеСертификата); - - ДобавитьПодписьКФайлу(ПрисоединенныйФайл, СвойстваПодписи); + Если ВидФормы = "ФормаОбъекта" Тогда + ВыбраннаяФорма = "ОбщаяФорма.ПрисоединенныйФайл"; + СтандартнаяОбработка = Ложь; + + ИначеЕсли ВидФормы = "ФормаСписка" Тогда + ВыбраннаяФорма = "ОбщаяФорма.ПрисоединенныеФайлы"; + СтандартнаяОбработка = Ложь; + КонецЕсли; КонецПроцедуры -// Устарела. Следует использовать процедуру ДобавитьПодписьКФайлу. -Процедура ЗанестиИнформациюОПодписях(Знач ПрисоединенныйФайл, Знач МассивПодписей) Экспорт +// Обработчик подписки на событие ПередЗаписью владельца присоединенного файла. +// Помечает на удаление связанные файлы. +// +// Параметры: +// Источник - Объект - владелец присоединенного файла, кроме ДокументОбъект. +// Отказ - Булево - признак отказа от записи. +// +Процедура УстановитьПометкуУдаленияПрисоединенныхФайлов(Источник, Отказ) Экспорт - СвойстваПодписей = Новый Массив; - Для каждого ДанныеПодписи Из МассивПодписей Цикл - - СвойстваПодписи = Новый Структура; - СвойстваПодписи.Вставить("Подпись", ДанныеПодписи.НоваяПодписьДвоичныеДанные); - СвойстваПодписи.Вставить("Отпечаток", ДанныеПодписи.Отпечаток); - СвойстваПодписи.Вставить("ДатаПодписи", ДанныеПодписи.ДатаПодписи); - СвойстваПодписи.Вставить("Комментарий", ДанныеПодписи.Комментарий); - СвойстваПодписи.Вставить("ИмяФайлаПодписи", ДанныеПодписи.ИмяФайлаПодписи); - СвойстваПодписи.Вставить("КомуВыданСертификат", ДанныеПодписи.КомуВыданСертификат); - СвойстваПодписи.Вставить("Сертификат", ДанныеПодписи.ДвоичныеДанныеСертификата); - - СвойстваПодписей.Добавить(СвойстваПодписи); - КонецЦикла; + Если Источник.ОбменДанными.Загрузка Тогда + Возврат; + КонецЕсли; - ДобавитьПодписьКФайлу(ПрисоединенныйФайл, СвойстваПодписей); + Если СтандартныеПодсистемыСервер.ЭтоИдентификаторОбъектаМетаданных(Источник) Тогда + Возврат; + КонецЕсли; + + ПометитьНаУдалениеПрисоединенныеФайлы(Источник); КонецПроцедуры +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + //////////////////////////////////////////////////////////////////////////////// // Обработчики подписок на события. @@ -781,6 +814,10 @@ Возврат; КонецЕсли; + Если СтандартныеПодсистемыСервер.ЭтоИдентификаторОбъектаМетаданных(Источник) Тогда + Возврат; + КонецЕсли; + Если Не ЗначениеЗаполнено(Источник.ВладелецФайла) Тогда ОписаниеОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( @@ -823,6 +860,10 @@ Возврат; КонецЕсли; + Если СтандартныеПодсистемыСервер.ЭтоИдентификаторОбъектаМетаданных(Источник) Тогда + Возврат; + КонецЕсли; + ПрисоединенныеФайлыСлужебный.ПередУдалениемПрисоединенногоФайлаСервер( Источник.Ссылка, Источник.ВладелецФайла, @@ -830,7 +871,7 @@ Источник.ТипХраненияФайла, Источник.ПутьКФайлу); -КонецПроцедуры + КонецПроцедуры // Обработчик подписки на событие ПриЗаписи для обновления данных, связанных с присоединенным файлом. // @@ -845,54 +886,17 @@ Возврат; КонецЕсли; + Если СтандартныеПодсистемыСервер.ЭтоИдентификаторОбъектаМетаданных(Источник) Тогда + Возврат; + КонецЕсли; + ПрисоединенныеФайлыСлужебный.ПриЗаписиПрисоединенногоФайлаСервер( Источник.ВладелецФайла); ПрисоединенныеФайлыСлужебный.ПриОбновленииСостоянияОчередиИзвлеченияТекста( Источник.Ссылка, Источник.СтатусИзвлеченияТекста); -КонецПроцедуры - -// Обработчик подписки на событие ОбработкаПолученияФормы для переопределения формы присоединенного файла. -// -// Параметры: -// Источник - СправочникМенеджер - менеджер справочника с именем "*ПрисоединенныеФайлы". -// ВидФормы - Строка - имя стандартной формы. -// Параметры - Структура - параметры формы. -// ВыбраннаяФорма - Строка - имя или объект метаданных открываемой формы. -// ДополнительнаяИнформация - Структура - дополнительная информация открытия формы. -// СтандартнаяОбработка - Булево - признак выполнения стандартной (системной) обработки события. -// -Процедура ПереопределитьПолучаемуюФормуПрисоединенногоФайла(Источник, ВидФормы, Параметры, - ВыбраннаяФорма, ДополнительнаяИнформация, СтандартнаяОбработка) Экспорт - - Если ВидФормы = "ФормаОбъекта" Тогда - ВыбраннаяФорма = "ОбщаяФорма.ПрисоединенныйФайл"; - СтандартнаяОбработка = Ложь; - - ИначеЕсли ВидФормы = "ФормаСписка" Тогда - ВыбраннаяФорма = "ОбщаяФорма.ПрисоединенныеФайлы"; - СтандартнаяОбработка = Ложь; - КонецЕсли; - -КонецПроцедуры - -// Обработчик подписки на событие ПередЗаписью владельца присоединенного файла. -// Помечает на удаление связанные файлы. -// -// Параметры: -// Источник - Объект - владелец присоединенного файла, кроме ДокументОбъект. -// Отказ - Булево - признак отказа от записи. -// -Процедура УстановитьПометкуУдаленияПрисоединенныхФайлов(Источник, Отказ) Экспорт - - Если Источник.ОбменДанными.Загрузка Тогда - Возврат; - КонецЕсли; - - ПометитьНаУдалениеПрисоединенныеФайлы(Источник); - -КонецПроцедуры + КонецПроцедуры // Обработчик подписки на событие ПередЗаписью владельца присоединенного файла. // Помечает на удаление связанные файлы. @@ -913,89 +917,6 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// УСТАРЕВШИЕ ПРОЦЕДУРЫ И ФУНКЦИИ - -// Устарела. Следует использовать ВыполнитьДействияПередЗаписьюПрисоединенногоФайла. -Процедура ПередЗаписьюПрисоединенногоФайла(Источник, Отказ) Экспорт - - ВыполнитьДействияПередЗаписьюПрисоединенногоФайла(Источник, Отказ); - -КонецПроцедуры - -// Устарела. Следует использовать ВыполнитьДействияПередУдалениемПрисоединенногоФайла. -Процедура ПередУдалениемПрисоединенногоФайла(Источник, Отказ) Экспорт - - ВыполнитьДействияПередУдалениемПрисоединенногоФайла(Источник, Отказ); - -КонецПроцедуры - -// Устарела. Следует использовать ВыполнитьДействияПриЗаписиПрисоединенногоФайла. -Процедура ПриЗаписиПрисоединенногоФайла(Источник, Отказ) Экспорт - - ВыполнитьДействияПриЗаписиПрисоединенногоФайла(Источник, Отказ); - -КонецПроцедуры - -// Устарела. Следует использовать ПереопределитьПолучаемуюФормуПрисоединенногоФайла. -Процедура ОбработкаПолученияФормыПрисоединенногоФайла(Источник, - ВидФормы, - Параметры, - ВыбраннаяФорма, - ДополнительнаяИнформация, - СтандартнаяОбработка) Экспорт - - ПрисоединенныеФайлыКлиентСервер.ПереопределитьПолучаемуюФормуПрисоединенногоФайла(Источник, ВидФормы, Параметры, - ВыбраннаяФорма, ДополнительнаяИнформация, СтандартнаяОбработка); - -КонецПроцедуры - -// Устарела. Следует использовать подписку на событие ОбработкаПолученияФормы. -// См. ПрисоединенныеФайлыКлиентСервер.ПереопределитьПолучаемуюФормуПрисоединенногоФайла. -// -// Настраивает форму присоединенного файла ПриСозданииНаСервере. -Процедура ПриСозданииНаСервереПрисоединенныйФайл(Знач Форма) Экспорт - - Если Форма.Параметры.Свойство("АвтоТест") Тогда // Возврат при получении формы для анализа. - Возврат; - КонецЕсли; - - Если НЕ Форма.Параметры.Свойство("Ключ", Форма.Ключ) Тогда - Форма.Ключ = Форма.Параметры.Key; - КонецЕсли; - - Форма.АвтоЗаголовок = Ложь; - Форма.Заголовок = НСтр("ru = 'Присоединенный файл'"); - - Команда = Форма.Команды.Добавить("ПерейтиКФормеФайла"); - Команда.Действие = "Подключаемый_ПерейтиКФормеФайла"; - - Декорация = Форма.Элементы.Добавить("ПоясняющийТекст", Тип("ДекорацияФормы")); - Декорация.Заголовок = НСтр("ru = 'Для того, чтобы перейти к карточке файла, нажмите на гиперссылку'"); - - Кнопка = Форма.Элементы.Добавить("ПерейтиКФормеФайла1", Тип("КнопкаФормы")); - Кнопка.Вид = ВидКнопкиФормы.Гиперссылка; - Кнопка.Заголовок = НСтр("ru = 'Перейти к форме файла'"); - Кнопка.ИмяКоманды = "ПерейтиКФормеФайла"; - -КонецПроцедуры - -// Устарела. Использовать не следует. -// Вызывает исключение в стандартной форме списка справочника присоединенных файлов. -Процедура ВызватьИсключениеОткрытияФормы(Форма) Экспорт - - Если Форма.Параметры.Свойство("АвтоТест") Тогда // Возврат при получении формы для анализа. - Возврат; - КонецЕсли; - - ВызватьИсключение НСтр("ru = 'Самостоятельное использование формы не предусмотрено.'"); - -КонецПроцедуры - -#КонецОбласти - -#Область СлужебныеПроцедурыИФункции - //////////////////////////////////////////////////////////////////////////////// // Вспомогательные процедуры и функции. diff --git a/SSL/src/CommonModules/ПрисоединенныеФайлыКлиент/Module.bsl b/SSL/src/CommonModules/ПрисоединенныеФайлыКлиент/Module.bsl index a83139b68..d32f5c6b1 100644 --- a/SSL/src/CommonModules/ПрисоединенныеФайлыКлиент/Module.bsl +++ b/SSL/src/CommonModules/ПрисоединенныеФайлыКлиент/Module.bsl @@ -293,69 +293,124 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// Устаревшие процедуры и функции. +Процедура НапечататьФайлы(ДанныеФайлов, ИдентификаторФормы) Экспорт + + ПараметрыВыполнения = Новый Структура; + ПараметрыВыполнения.Вставить("НомерФайла", 0); + ПараметрыВыполнения.Вставить("ДанныеФайлов", ДанныеФайлов); + ПараметрыВыполнения.Вставить("ДанныеФайла", Неопределено); + ПараметрыВыполнения.Вставить("ДляРедактирования", Ложь); + ПараметрыВыполнения.Вставить("ИдентификаторФормы", ИдентификаторФормы); + Обработчик = Новый ОписаниеОповещения("НапечататьФайлыВыполнение", ЭтотОбъект, ПараметрыВыполнения); + ВыполнитьОбработкуОповещения(Обработчик); -// Устарела. Следует использовать ПолучитьПрисоединенныйФайл. -// Требуется наличие подключенного расширения для работы с файлами. -// -// Параметры: -// АдресДвоичныхДанныхФайла - Строка - адрес во временном хранилище с двоичными данными, -// либо навигационная ссылка на данные файла в ИБ. -// ОтносительныйПуть - Строка - путь к файлу относительно рабочего каталога. -// ДатаМодификацииУниверсальная - Дата - универсальная дата модификации файла. -// ИмяФайла - Строка - имя файла (с расширением). -// РабочийКаталогПользователя - Строка - путь к рабочему каталогу. -// ПолноеИмяФайлаНаКлиенте - Строка - (возвращаемое значение) устанавливается при успешном выполнении. -// -// Возвращаемое значение: -// Булево - если Истина, тогда файл получен и сохранен успешно, иначе Ложь. -// -Функция ПолучитьФайлВРабочийКаталог(Знач АдресДвоичныхДанныхФайла, - Знач ОтносительныйПуть, - Знач ДатаМодификацииУниверсальная, - Знач ИмяФайла, - Знач РабочийКаталогПользователя = "", - ПолноеИмяФайлаНаКлиенте) Экспорт - - Возврат ПрисоединенныеФайлыСлужебныйКлиент.ПолучитьФайлВРабочийКаталог( - АдресДвоичныхДанныхФайла, ОтносительныйПуть, ДатаМодификацииУниверсальная, - ИмяФайла, РабочийКаталогПользователя, ПолноеИмяФайлаНаКлиенте); - -КонецФункции +КонецПроцедуры -// Устарела. Следует использовать ПоместитьПрисоединенныйФайл. -// Требуется наличие подключенного расширения для работы с файлами. -// -// Параметры: -// ПутьКФайлу - Строка - полный путь к файлу. -// ИдентификаторФормы - УникальныйИдентификатор - идентификатор управляемой формы. -// -// Возвращаемое значение: -// Структура - данные файла, помещенного во временное хранилище. -// -Функция ПоместитьФайлВХранилище(Знач ПутьКФайлу, Знач ИдентификаторФормы) Экспорт +Процедура НапечататьФайлыВыполнение(ОбработчикРезультата, ПараметрыВыполнения) Экспорт - Возврат ПрисоединенныеФайлыСлужебныйКлиент.ПоместитьФайлВХранилище(ПутьКФайлу, ИдентификаторФормы); + Если ПараметрыВыполнения.НомерФайла >= ПараметрыВыполнения.ДанныеФайлов.Количество() Тогда + Возврат; + КонецЕсли; -КонецФункции + ДанныеФайла = ПараметрыВыполнения.ДанныеФайлов[ПараметрыВыполнения.НомерФайла]; + + ПараметрыВыполнения.ДанныеФайла = ПрисоединенныеФайлыСлужебныйВызовСервера.ПолучитьДанныеФайла(ДанныеФайла, ПараметрыВыполнения.ИдентификаторФормы); + + Обработчик = Новый ОписаниеОповещения("НапечататьФайлПослеПолученияВерсииВРабочийКаталог", ЭтотОбъект, ПараметрыВыполнения); + + ПолучитьПрисоединенныйФайл( + Обработчик, + ДанныеФайла, + ПараметрыВыполнения.ИдентификаторФормы, + ПараметрыВыполнения) + +КонецПроцедуры -// Устарела. Следует использовать НачатьПолучениеПрисоединенногоФайла. -// -// Помещает файл с диска клиента во временное хранилище. -// -// Параметры: -// ДанныеФайла - (не используется). -// ИнформацияОФайле - Структура - (возвращаемое значение). -// ПолноеИмяФайлаНаКлиенте - Строка - имя файла на диске клиента. -// ИдентификаторФормы - УникальныйИдентификатор формы. -// -// Возвращаемое значение: -// Булево - Истина - файл успешно помещен в хранилище, иначе Ложь. -// -Функция ПоместитьФайлНаДискеВХранилище(Знач ДанныеФайла, ИнформацияОФайле, Знач ПолноеИмяФайлаНаКлиенте, Знач ИдентификаторФормы) Экспорт - ИнформацияОФайле = ПоместитьФайлВХранилище(ПолноеИмяФайлаНаКлиенте, ИдентификаторФормы); - Возврат ИнформацияОФайле.ФайлПомещенВХранилище; -КонецФункции +Процедура НапечататьФайлПослеПолученияВерсииВРабочийКаталог(Результат, ПараметрыВыполнения) Экспорт + + Если ЗначениеЗаполнено(Результат.ОписаниеОшибки) Тогда + Возврат; + КонецЕсли; + + Если ПараметрыВыполнения.НомерФайла >= ПараметрыВыполнения.ДанныеФайлов.Количество() Тогда + Возврат; + КонецЕсли; + + НапечататьФайлПриложением(ПараметрыВыполнения.ДанныеФайла, Результат.ПолноеИмяФайла); + + // переходим к печати следующего файла + ПараметрыВыполнения.НомерФайла = ПараметрыВыполнения.НомерФайла + 1; + Обработчик = Новый ОписаниеОповещения("НапечататьФайлыВыполнение", ЭтотОбъект, ПараметрыВыполнения); + ВыполнитьОбработкуОповещения(Обработчик); + +КонецПроцедуры + +Процедура НапечататьФайлПриложением(ДанныеФайла, ИмяОткрываемогоФайла) + + РасширенияИсключения = + " m3u, m4a, mid, midi, mp2, mp3, mpa, rmi, wav, wma, + | 3g2, 3gp, 3gp2, 3gpp, asf, asx, avi, m1v, m2t, m2ts, m2v, m4v, mkv, mov, mp2v, mp4, mp4v, mpe, mpeg, mts, vob, wm, wmv, wmx, wvx, + | 7z, zip, rar, arc, arh, arj, ark, p7m, pak, package, + | app, com, exe, jar, dll, res, iso, isz, mdf, mds, + | cf, dt, epf, erf"; + + Расширение = НРег(ДанныеФайла.Расширение); + Если СтрНайти(РасширенияИсключения, " "+Расширение+",") > 0 Тогда + + Возврат; + + ИначеЕсли Расширение = "grs" Тогда + + Схема = Новый ГрафическаяСхема; + Схема.Прочитать(ИмяОткрываемогоФайла); + Схема.Напечатать();; + + ИначеЕсли Расширение = "mxl" Тогда + + ТабличныйДокумент = Новый ТабличныйДокумент; + ТабличныйДокумент.Прочитать(ИмяОткрываемогоФайла); + ТабличныйДокумент.Напечатать(); + + Иначе + + Попытка + + СистемнаяИнфо = Новый СистемнаяИнформация; + Если СистемнаяИнфо.ТипПлатформы = ТипПлатформы.Windows_x86 + Или СистемнаяИнфо.ТипПлатформы = ТипПлатформы.Windows_x86_64 Тогда + ИмяОткрываемогоФайла = СтрЗаменить(ИмяОткрываемогоФайла, "/", "\"); + КонецЕсли; + + НапечататьИзПриложенияПоИмениФайла(ИмяОткрываемогоФайла); + + Исключение + + Инфо = ИнформацияОбОшибке(); + ПоказатьПредупреждение(,СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Описание=""%1""'"), + КраткоеПредставлениеОшибки(Инфо))); + + КонецПопытки; + + КонецЕсли; + +КонецПроцедуры + +Процедура НапечататьИзПриложенияПоИмениФайла(ИмяОткрываемогоФайла) Экспорт + + Если Не ЗначениеЗаполнено(ИмяОткрываемогоФайла) Тогда + Возврат; + КонецЕсли; + + СистемнаяИнфо = Новый СистемнаяИнформация; + Если СистемнаяИнфо.ТипПлатформы = ТипПлатформы.Windows_x86 + Или СистемнаяИнфо.ТипПлатформы = ТипПлатформы.Windows_x86_64 Тогда + + Shell = Новый COMОбъект("Shell.Application"); + Shell.ShellExecute(ИмяОткрываемогоФайла, "", "", "print", 1); + + КонецЕсли; + +КонецПроцедуры #КонецОбласти diff --git a/SSL/src/CommonModules/ПрисоединенныеФайлыПереопределяемый/Module.bsl b/SSL/src/CommonModules/ПрисоединенныеФайлыПереопределяемый/Module.bsl index 2268f6ec8..dd463832d 100644 --- a/SSL/src/CommonModules/ПрисоединенныеФайлыПереопределяемый/Module.bsl +++ b/SSL/src/CommonModules/ПрисоединенныеФайлыПереопределяемый/Module.bsl @@ -22,4 +22,18 @@ КонецПроцедуры +// Формирует массив метаданных, которые не должны выводиться в настройках очистки файлов. +// +// Возвращаемое значение: +// Массив - массив, содержащий метаданные, которые не должны выводиться в настройках очистки файлов. +// +Функция ОбъектыИсключенияПриОчисткеФайлов() Экспорт + + Массив = Новый Массив; + + Возврат Массив; + +КонецФункции + #КонецОбласти + diff --git a/SSL/src/CommonModules/ПрисоединенныеФайлыСлужебный/Module.bsl b/SSL/src/CommonModules/ПрисоединенныеФайлыСлужебный/Module.bsl index aa5677b8c..16e49bd51 100644 --- a/SSL/src/CommonModules/ПрисоединенныеФайлыСлужебный/Module.bsl +++ b/SSL/src/CommonModules/ПрисоединенныеФайлыСлужебный/Module.bsl @@ -109,7 +109,7 @@ Для Каждого ЭлементСоответствия Из СоответствиеПутейФайлов Цикл - Позиция = Найти(ЭлементСоответствия.Ключ, "CatalogRef"); + Позиция = СтрНайти(ЭлементСоответствия.Ключ, "CatalogRef"); Если Позиция = 0 Тогда Продолжить; @@ -236,6 +236,10 @@ Для Каждого Тип Из ТипыВладельцев Цикл + Если Тип = Тип("СправочникСсылка.ИдентификаторыОбъектовМетаданных") Тогда + Продолжить; + КонецЕсли; + ИменаСправочников = ИменаСправочниковХраненияФайлов(Тип); Для каждого КлючИЗначение Из ИменаСправочников Цикл @@ -321,6 +325,10 @@ Для Каждого Тип Из ТипыВладельцев Цикл + Если Тип = Тип("СправочникСсылка.ИдентификаторыОбъектовМетаданных") Тогда + Продолжить; + КонецЕсли; + ИменаСправочников = ИменаСправочниковХраненияФайлов(Тип); Для каждого КлючИЗначение Из ИменаСправочников Цикл @@ -362,6 +370,10 @@ Для Каждого Тип Из ТипыВладельцев Цикл + Если Тип = Тип("СправочникСсылка.ИдентификаторыОбъектовМетаданных") Тогда + Продолжить; + КонецЕсли; + ИменаСправочников = ИменаСправочниковХраненияФайлов(Тип); Для каждого КлючИЗначение Из ИменаСправочников Цикл @@ -407,6 +419,10 @@ Возврат; КонецЕсли; + Если ТипЗнч(ВнешнийОбъект) = Тип("СправочникСсылка.ИдентификаторыОбъектовМетаданных") Тогда + Возврат; + КонецЕсли; + ТипыВладельцев = Метаданные.РегистрыСведений.НаличиеПрисоединенныхФайлов.Измерения.ОбъектСФайлами.Тип.Типы(); Если ТипыВладельцев.Найти(ТипЗнч(ВнешнийОбъект)) <> Неопределено Тогда ЕстьХранимыеФайлы = ОбъектИмеетФайлы(ВнешнийОбъект); @@ -417,6 +433,10 @@ // Заполняет массив ХранимыеФайлы данными хранимых файлов объекта ВнешнийОбъект. Процедура ПолучитьХранимыеФайлы(Знач ВнешнийОбъект, Знач ХранимыеФайлы) Экспорт + Если ТипЗнч(ВнешнийОбъект) = Тип("СправочникСсылка.ИдентификаторыОбъектовМетаданных") Тогда + Возврат; + КонецЕсли; + ТипыВладельцев = Метаданные.РегистрыСведений.НаличиеПрисоединенныхФайлов.Измерения.ОбъектСФайлами.Тип.Типы(); Если ТипыВладельцев.Найти(ТипЗнч(ВнешнийОбъект)) = Неопределено Тогда Возврат; @@ -746,6 +766,264 @@ КонецПроцедуры +//////////////////////////////////////////////////////////////////////////////// +// Очистка ненужных файлов + +Функция ТекстЗапросаДляОчисткиФайлов(ВладелецФайла, Настройка, МассивИсключений, ЭлементИсключение, ДанныеДляОтчета = Ложь) Экспорт + + Если Настройка.ПериодОчистки <> Перечисления.ПериодОчисткиФайлов.ПоПравилу Тогда + Если ДанныеДляОтчета Тогда + ТекстЗапроса = + "ВЫБРАТЬ + | ТИПЗНАЧЕНИЯ(СправочникПрисоединенныеФайлы.ВладелецФайла) КАК ВладелецФайла, + | СправочникПрисоединенныеФайлы.Размер /1024 /1024 КАК ОбъемНенужныхФайлов"; + Иначе + ТекстЗапроса = + "ВЫБРАТЬ + | СправочникПрисоединенныеФайлы.Ссылка КАК ФайлСсылка"; + КонецЕсли; + ТекстЗапроса = ТекстЗапроса + " + |ИЗ + | Справочник." + Настройка.ТипВладельцаФайла.Имя + " КАК СправочникПрисоединенныеФайлы + | ВНУТРЕННЕЕ СОЕДИНЕНИЕ " + ВладелецФайла.ПолноеИмя + " КАК СправочникФайлы + | ПО СправочникПрисоединенныеФайлы.ВладелецФайла = СправочникФайлы.Ссылка + |ГДЕ + | НЕ СправочникПрисоединенныеФайлы.ПометкаУдаления + | И ВЫБОР + | КОГДА СправочникПрисоединенныеФайлы.ТипХраненияФайла = ЗНАЧЕНИЕ(Перечисление.ТипыХраненияФайлов.ВТомахНаДиске) + | ТОГДА (ВЫРАЗИТЬ(СправочникПрисоединенныеФайлы.ПутьКФайлу КАК СТРОКА(100))) <> """" + | ИЛИ НЕ СправочникПрисоединенныеФайлы.Том = ЗНАЧЕНИЕ(Справочник.ТомаХраненияФайлов.ПустаяСсылка) + | ИНАЧЕ ИСТИНА + | КОНЕЦ + | И ТИПЗНАЧЕНИЯ(СправочникПрисоединенныеФайлы.ВладелецФайла) = &ТипВладельца + | И СправочникПрисоединенныеФайлы.ДатаСоздания <= &ПериодОчистки"; + Иначе + МассивРеквизитовСТипомДата = Новый Массив; + + ТипОбъекта = ВладелецФайла; + ВсеСправочники = Справочники.ТипВсеСсылки(); + ВсеДокументы = Документы.ТипВсеСсылки(); + ЕстьТипДата = Ложь; + ТекстЗапроса = + "ВЫБРАТЬ + | СправочникФайлы.Ссылка, + | ТИПЗНАЧЕНИЯ(СправочникПрисоединенныеФайлы.ВладелецФайла) КАК ВладелецФайла, + | СправочникПрисоединенныеФайлы.Размер /1024 /1024 КАК ОбъемНенужныхФайлов,"; + Если ВсеСправочники.СодержитТип(ТипЗнч(ТипОбъекта.ЗначениеПустойСсылки)) Тогда + Справочник = Метаданные.Справочники[ТипОбъекта.Имя]; + Для Каждого Реквизит Из Справочник.Реквизиты Цикл + ТекстЗапроса = ТекстЗапроса + Символы.ПС + "СправочникФайлы." + Реквизит.Имя + ","; + КонецЦикла; + ИначеЕсли ВсеДокументы.СодержитТип(ТипЗнч(ТипОбъекта.ЗначениеПустойСсылки)) Тогда + Документ = Метаданные.Документы[ТипОбъекта.Имя]; + Для Каждого Реквизит Из Документ.Реквизиты Цикл + Если Реквизит.Тип = Новый ОписаниеТипов("Дата") Тогда + ТекстЗапроса = ТекстЗапроса + Символы.ПС + "РАЗНОСТЬДАТ(" + Реквизит.Имя + ", &ТекущаяДата, ДЕНЬ) Как ДнейДоУдаленияОт" + Реквизит.Имя + ","; + КонецЕсли; + ТекстЗапроса = ТекстЗапроса + Символы.ПС + "СправочникФайлы." + Реквизит.Имя + ","; + КонецЦикла; + КонецЕсли; + ТекстЗапроса = ТекстЗапроса + " + | СправочникПрисоединенныеФайлы.Ссылка КАК ФайлСсылка + |ИЗ + | Справочник." + Настройка.ТипВладельцаФайла.Имя + " КАК СправочникПрисоединенныеФайлы + | ЛЕВОЕ СОЕДИНЕНИЕ " + ВладелецФайла.ПолноеИмя + " КАК СправочникФайлы + | ПО СправочникПрисоединенныеФайлы.ВладелецФайла = СправочникФайлы.Ссылка + |ГДЕ + | НЕ СправочникПрисоединенныеФайлы.ПометкаУдаления + | И ВЫБОР + | КОГДА СправочникПрисоединенныеФайлы.ТипХраненияФайла = ЗНАЧЕНИЕ(Перечисление.ТипыХраненияФайлов.ВТомахНаДиске) + | ТОГДА (ВЫРАЗИТЬ(СправочникПрисоединенныеФайлы.ПутьКФайлу КАК СТРОКА(100))) <> """" + | ИЛИ НЕ СправочникПрисоединенныеФайлы.Том = ЗНАЧЕНИЕ(Справочник.ТомаХраненияФайлов.ПустаяСсылка) + | ИНАЧЕ ИСТИНА + | КОНЕЦ + | И ТИПЗНАЧЕНИЯ(СправочникПрисоединенныеФайлы.ВладелецФайла) = &ТипВладельца"; + КонецЕсли; + Если МассивИсключений.Количество() > 0 Тогда + ТекстЗапроса = ТекстЗапроса + " + | И НЕ СправочникПрисоединенныеФайлы.ВладелецФайла В ИЕРАРХИИ (&МассивИсключений)"; + КонецЕсли; + Если ЭлементИсключение <> Неопределено Тогда + ТекстЗапроса = ТекстЗапроса + " + | И СправочникПрисоединенныеФайлы.ВладелецФайла В ИЕРАРХИИ (&ЭлементИсключение)"; + КонецЕсли; + + Возврат ТекстЗапроса; + +КонецФункции + +Процедура СформироватьТекстЗапросаПолногоОбъемаФайлов(ТекстЗапроса, ДобавитьПсевдонимПоля) Экспорт + + МетаданныеСправочники = Метаданные.Справочники; + + Для Каждого Справочник Из МетаданныеСправочники Цикл + Если Справочник.Реквизиты.Найти("ВладелецФайла") <> Неопределено Тогда + + Если Не СтрЗаканчиваетсяНа(Справочник.Имя, "ПрисоединенныеФайлы") Тогда + Продолжить; + КонецЕсли; + + ТипыВладельцевФайлов = Справочник.Реквизиты.ВладелецФайла.Тип.Типы(); + + Для Каждого ТипВладельца Из ТипыВладельцевФайлов Цикл + + ТекстЗапроса = ТекстЗапроса + ?(ПустаяСтрока(ТекстЗапроса),"", " ОБЪЕДИНИТЬ ВСЕ") + " + | + |ВЫБРАТЬ + | ТИПЗНАЧЕНИЯ(СправочникПрисоединенныеФайлы.ВладелецФайла) " + ?(ДобавитьПсевдонимПоля, "КАК ВладелецФайла,",",") + " + | СправочникПрисоединенныеФайлы.Размер / 1024 / 1024 " + ?(ДобавитьПсевдонимПоля, "КАК ОбъемВсего","") + " + |ИЗ + | Справочник." + Справочник.Имя + " КАК СправочникПрисоединенныеФайлы + |ГДЕ + | НЕ СправочникПрисоединенныеФайлы.ПометкаУдаления"; + + Если ДобавитьПсевдонимПоля Тогда + ДобавитьПсевдонимПоля = Ложь; + КонецЕсли; + + КонецЦикла; + КонецЕсли; + КонецЦикла; + +КонецПроцедуры + +Функция ПроверитьЦелостностьФайлов(ТаблицаФайловНаДиске, Том) Экспорт + + МетаданныеСправочники = Метаданные.Справочники; + Запрос = Новый Запрос; + + ДобавитьПсевдонимПоля = Истина; + + Для Каждого Справочник Из МетаданныеСправочники Цикл + Если Справочник.Реквизиты.Найти("ВладелецФайла") <> Неопределено Тогда + ТипыВладельцевФайлов = Справочник.Реквизиты.ВладелецФайла.Тип.Типы(); + + Если Не СтрЗаканчиваетсяНа(Справочник.Имя, "ПрисоединенныеФайлы") Тогда + Продолжить; + КонецЕсли; + + Для Каждого ТипВладельца Из ТипыВладельцевФайлов Цикл + + Запрос.Текст = Запрос.Текст + ?(ПустаяСтрока(Запрос.Текст),"", " ОБЪЕДИНИТЬ ВСЕ") + " + | + |ВЫБРАТЬ + | СправочникПрисоединенныеФайлы.Ссылка " + ?(ДобавитьПсевдонимПоля, "КАК Ссылка,",",") + " + | СправочникПрисоединенныеФайлы.Расширение " + ?(ДобавитьПсевдонимПоля, "КАК Расширение,",",") + " + | СправочникПрисоединенныеФайлы.Наименование " + ?(ДобавитьПсевдонимПоля, "КАК Наименование,",",") + " + | СправочникПрисоединенныеФайлы.Том " + ?(ДобавитьПсевдонимПоля, "КАК Том,",",") + " + | СправочникПрисоединенныеФайлы.Изменил " + ?(ДобавитьПсевдонимПоля, "КАК Отредактировал,",",") + " + | СправочникПрисоединенныеФайлы.ДатаМодификацииУниверсальная " + ?(ДобавитьПсевдонимПоля, "КАК ДатаМодификацииФайла,",",") + " + | СправочникПрисоединенныеФайлы.ПутьКФайлу " + ?(ДобавитьПсевдонимПоля, "КАК ПутьКФайлу","") + " + |ИЗ + | Справочник." + Справочник.Имя + " КАК СправочникПрисоединенныеФайлы + |ГДЕ + | СправочникПрисоединенныеФайлы.Том = &Том + | И СправочникПрисоединенныеФайлы.ТипХраненияФайла = ЗНАЧЕНИЕ(Перечисление.ТипыХраненияФайлов.ВТомахНаДиске) + | И НЕ СправочникПрисоединенныеФайлы.ПометкаУдаления"; + + Если ДобавитьПсевдонимПоля Тогда + ДобавитьПсевдонимПоля = Ложь; + КонецЕсли; + + КонецЦикла; + КонецЕсли; + КонецЦикла; + Запрос.УстановитьПараметр("Том", Том); + РезультатЗапроса = Запрос.Выполнить(); + + Выборка = РезультатЗапроса.Выбрать(); + + Пока Выборка.Следующий() Цикл + + ВерсияСсылка = Выборка.Ссылка; + + Если ЗначениеЗаполнено(Выборка.ПутьКФайлу) И ЗначениеЗаполнено(Выборка.Том) Тогда + + ПолныйПутьФайла = ФайловыеФункцииСлужебный.ПолныйПутьТома(Выборка.Том) + Выборка.ПутьКФайлу; + + Файл = Новый Файл(ПолныйПутьФайла); + Если Не Файл.Существует() Тогда + НесуществующийФайл = ТаблицаФайловНаДиске.Добавить(); + НесуществующийФайл.СтатусПроверки = НСтр("ru = 'Отсутствуют данные в томе на диске'"); + НесуществующийФайл.Файл = ВерсияСсылка; + НесуществующийФайл.ПолноеИмя = ПолныйПутьФайла; + НесуществующийФайл.Расширение = ВерсияСсылка.Расширение; + НесуществующийФайл.Отредактировал = Выборка.Отредактировал; + НесуществующийФайл.Том = Том; + НесуществующийФайл.ДатаРедактирования = Выборка.ДатаМодификацииФайла; + НесуществующийФайл.Имя = ВерсияСсылка.ПутьКФайлу; + НесуществующийФайл.Количество = 1; + Иначе + + СуществующийФайл = ТаблицаФайловНаДиске.НайтиСтроки(Новый Структура("ПолноеИмя",ПолныйПутьФайла)); + СуществующийФайл[0].Файл = ВерсияСсылка; + СуществующийФайл[0].СтатусПроверки = НСтр("ru = 'Целостные данные'"); + + КонецЕсли; + + КонецЕсли; + + КонецЦикла; + +КонецФункции + +Процедура ВыполнитьОчисткуДанныхОФайле(ФайлСсылка) Экспорт + + ФайлОбъект = ФайлСсылка.ПолучитьОбъект(); + Если ЗначениеЗаполнено(ФайлОбъект.Редактирует) Тогда + Возврат; + КонецЕсли; + ИмяФайлаСПутем = ""; + ИмяФайлаСПутемДляУдаления = ""; + + Попытка + + НачатьТранзакцию(); + + Если ФайлОбъект.ТипХраненияФайла = Перечисления.ТипыХраненияФайлов.ВТомахНаДиске Тогда + ИмяФайлаСПутем = ФайловыеФункцииСлужебный.ПолныйПутьТома(ФайлОбъект.Том) + ФайлОбъект.ПутьКФайлу; + ИмяФайлаСПутемДляУдаления = ИмяФайлаСПутем + ".del"; + ФайлНаДиске = Новый Файл(ИмяФайлаСПутем); + Если ФайлНаДиске.Существует() Тогда + ФайлНаДиске.УстановитьТолькоЧтение(Ложь); + // Переместим файл во временный + ПереместитьФайл(ИмяФайлаСПутем, ИмяФайлаСПутемДляУдаления); + ФайлОбъект.Том = Справочники.ТомаХраненияФайлов.ПустаяСсылка(); + ФайлОбъект.ПутьКФайлу = ""; + ТекстОписания = НСтр("ru = 'Файл удален при очистке ненужных файлов.'") + + " " + Формат(ТекущаяДатаСеанса(),"ДФ=dd.MM.yyyy") + Символы.ПС; + ФайлОбъект.Описание = ТекстОписания + ФайлОбъект.Описание; + ФайлОбъект.Записать(); + ФайлОбъект.УстановитьПометкуУдаления(Истина); + // Удалим временный файл, т.к. успешно обновили данные о файле + УдалитьФайлы(ИмяФайлаСПутемДляУдаления); + КонецЕсли; + Иначе + УдалитьЗаписьИзРегистраПрисоединенныеФайлы(ФайлСсылка); + ФайлОбъект.УстановитьПометкуУдаления(Истина); + КонецЕсли; + + ЗафиксироватьТранзакцию(); + + Исключение + + ОтменитьТранзакцию(); + + Если Не ПустаяСтрока(ИмяФайлаСПутем) Тогда + + // Записать ошибку в журнал регистрации + ЗаписьЖурналаРегистрации(НСтр("ru = 'Очистка ненужных файлов'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), + УровеньЖурналаРегистрации.Ошибка,, ФайлСсылка, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); + + // Вернем файл на прежнее место в случае ошибки + ПереместитьФайл(ИмяФайлаСПутемДляУдаления, ИмяФайлаСПутем); + + КонецЕсли; + + КонецПопытки; + +КонецПроцедуры + #КонецОбласти #Область СлужебныеПроцедурыИФункции @@ -1026,9 +1304,8 @@ | ПрисоединенныеФайлы.ВладелецФайла = &ВладелецФайлов"; Если ФайлИсключение <> Неопределено Тогда - ТекстЗапроса = ТекстЗапроса + - " - | И ПрисоединенныеФайлы.Ссылка <> &Ссылка"; + ТекстЗапроса = ТекстЗапроса + " + | И ПрисоединенныеФайлы.Ссылка <> &Ссылка"; Запрос.Параметры.Вставить("Ссылка", ФайлИсключение); КонецЕсли; @@ -1065,11 +1342,10 @@ Для каждого КлючИЗначение Из ИменаСправочников Цикл Если ЗначениеЗаполнено(ТекстЗапросов) Тогда - ТекстЗапросов = ТекстЗапросов + - " - |ОБЪЕДИНИТЬ ВСЕ - | - |"; + ТекстЗапросов = ТекстЗапросов + " + |ОБЪЕДИНИТЬ ВСЕ + | + |"; КонецЕсли; ТекстЗапроса = "ВЫБРАТЬ @@ -1326,7 +1602,7 @@ Строка(ТипВладельцаФайлов), Строка(КлючИЗначение.Ключ)); - ИначеЕсли Прав(КлючИЗначение.Ключ, СтрДлина("ПрисоединенныеФайлы"))<> "ПрисоединенныеФайлы" Тогда + ИначеЕсли Не СтрЗаканчиваетсяНа(КлючИЗначение.Ключ, "ПрисоединенныеФайлы") Тогда ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Ошибка при определении имен справочников для хранения файлов. @@ -1394,9 +1670,9 @@ КонецЕсли; ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - ЗаголовокОшибки + Символы.ПС + - НСтр("ru = 'У владельца файлов ""%1"" типа ""%2"" - |нет справочников для хранения файлов.'"), + ЗаголовокОшибки + Символы.ПС + + НСтр("ru = 'У владельца файлов ""%1"" типа ""%2"" + |нет справочников для хранения файлов.'"), Строка(ВладелецФайлов), Строка(ТипЗнч(ВладелецФайлов))); КонецЕсли; @@ -1411,9 +1687,9 @@ КонецЕсли; ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - ЗаголовокОшибки + Символы.ПС + - НСтр("ru = 'У владельца файлов ""%1"" типа ""%2"" - |нет справочника ""%3"" для хранения файлов.'"), + ЗаголовокОшибки + Символы.ПС + + НСтр("ru = 'У владельца файлов ""%1"" типа ""%2"" + |нет справочника ""%3"" для хранения файлов.'"), Строка(ВладелецФайлов), Строка(ТипЗнч(ВладелецФайлов)), Строка(ИмяСправочника)); @@ -1555,6 +1831,11 @@ ВсеИменаСправочников = Новый Соответствие; Для каждого Тип Из ТипыВладельцев Цикл + + Если Тип = Тип("СправочникСсылка.ИдентификаторыОбъектовМетаданных") Тогда + Продолжить; + КонецЕсли; + ИменаСправочников = ИменаСправочниковХраненияФайлов(Тип); Для каждого КлючИЗначение Из ИменаСправочников Цикл @@ -1571,12 +1852,11 @@ Для каждого КлючИЗначение Из ВсеИменаСправочников Цикл Если НЕ ПустаяСтрока(ТекстЗапроса) Тогда - ТекстЗапроса = ТекстЗапроса + - " - | - |ОБЪЕДИНИТЬ ВСЕ - | - |"; + ТекстЗапроса = ТекстЗапроса + " + | + |ОБЪЕДИНИТЬ ВСЕ + | + |"; КонецЕсли; ТекстЗапроса = ТекстЗапроса + ТекстЗапросаДляФайловСНеизвлеченнымТекстом( @@ -1821,8 +2101,12 @@ | &ИмяСправочника КАК ПрисоединенныеФайлы |ГДЕ | (ПрисоединенныеФайлы.СтатусИзвлеченияТекста = ЗНАЧЕНИЕ(Перечисление.СтатусыИзвлеченияТекстаФайлов.НеИзвлечен) - | ИЛИ ПрисоединенныеФайлы.СтатусИзвлеченияТекста = ЗНАЧЕНИЕ(Перечисление.СтатусыИзвлеченияТекстаФайлов.ПустаяСсылка)) - | И НЕ ПрисоединенныеФайлы.Зашифрован"; + | ИЛИ ПрисоединенныеФайлы.СтатусИзвлеченияТекста = ЗНАЧЕНИЕ(Перечисление.СтатусыИзвлеченияТекстаФайлов.ПустаяСсылка))"; + + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ЭлектроннаяПодпись") Тогда + ТекстЗапроса = ТекстЗапроса + " + | И НЕ ПрисоединенныеФайлы.Зашифрован"; + КонецЕсли; ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "ПЕРВЫЕ 1", ?( ПолучитьВсеФайлы, @@ -1844,8 +2128,12 @@ | &ИмяСправочника КАК ПрисоединенныеФайлы |ГДЕ | (ПрисоединенныеФайлы.СтатусИзвлеченияТекста = ЗНАЧЕНИЕ(Перечисление.СтатусыИзвлеченияТекстаФайлов.НеИзвлечен) - | ИЛИ ПрисоединенныеФайлы.СтатусИзвлеченияТекста = ЗНАЧЕНИЕ(Перечисление.СтатусыИзвлеченияТекстаФайлов.ПустаяСсылка)) - | И НЕ ПрисоединенныеФайлы.Зашифрован"; + | ИЛИ ПрисоединенныеФайлы.СтатусИзвлеченияТекста = ЗНАЧЕНИЕ(Перечисление.СтатусыИзвлеченияТекстаФайлов.ПустаяСсылка))"; + + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ЭлектроннаяПодпись") Тогда + ТекстЗапроса = ТекстЗапроса + " + | И НЕ ПрисоединенныеФайлы.Зашифрован"; + КонецЕсли; ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&ИмяСправочника", "Справочник." + ИмяСправочника); @@ -1882,4 +2170,22 @@ КонецФункции +//////////////////////////////////////////////////////////////////////////////// +// Очистка ненужных файлов + +// Удаляет запись в регистре ПрисоединенныеФайлы. +// +// Параметры: +// ФайлСсылка - ссылка на файл. +// +Процедура УдалитьЗаписьИзРегистраПрисоединенныеФайлы(ФайлСсылка) + + УстановитьПривилегированныйРежим(Истина); + + НаборЗаписей = РегистрыСведений.ПрисоединенныеФайлы.СоздатьНаборЗаписей(); + НаборЗаписей.Отбор.ПрисоединенныйФайл.Установить(ФайлСсылка); + НаборЗаписей.Записать(); + +КонецПроцедуры + #КонецОбласти diff --git a/SSL/src/CommonModules/ПрисоединенныеФайлыСлужебныйВызовСервера/Module.bsl b/SSL/src/CommonModules/ПрисоединенныеФайлыСлужебныйВызовСервера/Module.bsl index f5c16c0f6..d111ef2f6 100644 --- a/SSL/src/CommonModules/ПрисоединенныеФайлыСлужебныйВызовСервера/Module.bsl +++ b/SSL/src/CommonModules/ПрисоединенныеФайлыСлужебныйВызовСервера/Module.bsl @@ -3,6 +3,21 @@ // //////////////////////////////////////////////////////////////////////////////// +#Область СлужебныйПрограммныйИнтерфейс + +// См. эту функцию в модуле ПрисоединенныеФайлы. +Функция ПолучитьДанныеФайла(Знач ПрисоединенныйФайл, + Знач ИдентификаторФормы = Неопределено, + Знач ПолучатьСсылкуНаДвоичныеДанные = Истина, + Знач ДляРедактирования = Ложь) Экспорт + + Возврат ПрисоединенныеФайлы.ПолучитьДанныеФайла( + ПрисоединенныйФайл, ИдентификаторФормы, ПолучатьСсылкуНаДвоичныеДанные, ДляРедактирования); + +КонецФункции + +#КонецОбласти + #Область СлужебныеПроцедурыИФункции // См. эту процедуру в модуле ПрисоединенныеФайлы. @@ -34,17 +49,6 @@ КонецФункции -// См. эту функцию в модуле ПрисоединенныеФайлы. -Функция ПолучитьДанныеФайла(Знач ПрисоединенныйФайл, - Знач ИдентификаторФормы = Неопределено, - Знач ПолучатьСсылкуНаДвоичныеДанные = Истина, - Знач ДляРедактирования = Ложь) Экспорт - - Возврат ПрисоединенныеФайлы.ПолучитьДанныеФайла( - ПрисоединенныйФайл, ИдентификаторФормы, ПолучатьСсылкуНаДвоичныеДанные, ДляРедактирования); - -КонецФункции - // См. эту процедуру в модуле ПрисоединенныеФайлыСлужебный. Процедура Зашифровать(Знач ПрисоединенныйФайл, Знач ЗашифрованныеДанные, Знач МассивОтпечатков) Экспорт diff --git a/SSL/src/CommonModules/ПрисоединенныеФайлыСлужебныйКлиент/Module.bsl b/SSL/src/CommonModules/ПрисоединенныеФайлыСлужебныйКлиент/Module.bsl index b5301b863..bce156406 100644 --- a/SSL/src/CommonModules/ПрисоединенныеФайлыСлужебныйКлиент/Module.bsl +++ b/SSL/src/CommonModules/ПрисоединенныеФайлыСлужебныйКлиент/Module.bsl @@ -3,6 +3,83 @@ // //////////////////////////////////////////////////////////////////////////////// +#Область СлужебныйПрограммныйИнтерфейс + +// Продолжение процедуры ПрисоединенныеФайлыКлиент.ДобавитьФайлы. +Процедура ДобавитьФайлыРасширениеПредложено(РасширениеРаботыСФайламиПодключено, ДополнительныеПараметры) Экспорт + + ВладелецФайла = ДополнительныеПараметры.ВладелецФайла; + ИдентификаторФормы = ДополнительныеПараметры.ИдентификаторФормы; + + Если Не ДополнительныеПараметры.Свойство("Фильтр") Тогда + ДополнительныеПараметры.Вставить("Фильтр",""); + КонецЕсли; + ОткрыватьКарточкуПослеСозданияИзФайла = Ложь; + Если ДополнительныеПараметры.Свойство("НеОткрыватьКарточкуПослеСозданияИзФайла") Тогда + ОткрыватьКарточкуПослеСозданияИзФайла = Не ДополнительныеПараметры.НеОткрыватьКарточкуПослеСозданияИзФайла; + КонецЕсли; + Фильтр = ДополнительныеПараметры.Фильтр; + + Если РасширениеРаботыСФайламиПодключено Тогда + + ВыбранныеФайлы = Новый Массив; + + Если Не ДополнительныеПараметры.Свойство("ПолноеИмяФайла") Тогда + ВыборФайла = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Открытие); + ВыборФайла.МножественныйВыбор = Истина; + ВыборФайла.Заголовок = НСтр("ru = 'Выбор файла'"); + ВыборФайла.Фильтр = ?(ЗначениеЗаполнено(Фильтр), Фильтр, НСтр("ru = 'Все файлы'") + " (*.*)|*.*"); + Если ВыборФайла.Выбрать() Тогда + ВыбранныеФайлы = ВыборФайла.ВыбранныеФайлы; + КонецЕсли; + Иначе + ВыбранныеФайлы.Добавить(ДополнительныеПараметры.ПолноеИмяФайла); + КонецЕсли; + + ИмяСоздаваемогоФайла = ""; + Если ДополнительныеПараметры.Свойство("ИмяСоздаваемогоФайла") Тогда + ИмяСоздаваемогоФайла = ДополнительныеПараметры.ИмяСоздаваемогоФайла; + КонецЕсли; + + Если ВыбранныеФайлы.Количество() > 0 Тогда + ПрисоединенныеФайлыМассив = Новый Массив; + ПоместитьВыбранныеФайлыВХранилище( + ВыбранныеФайлы, + ВладелецФайла, + ПрисоединенныеФайлыМассив, + ИдентификаторФормы, + ИмяСоздаваемогоФайла); + + Если ПрисоединенныеФайлыМассив.Количество() = 1 И ОткрыватьКарточкуПослеСозданияИзФайла Тогда + ПрисоединенныйФайл = ПрисоединенныеФайлыМассив[0]; + + ПоказатьОповещениеПользователя( + НСтр("ru = 'Создание:'"), + ПолучитьНавигационнуюСсылку(ПрисоединенныйФайл), + ПрисоединенныйФайл, + БиблиотекаКартинок.Информация32); + + ПараметрыФормы = Новый Структура("ПрисоединенныйФайл, ЭтоНовый", ПрисоединенныйФайл, Истина); + ОткрытьФорму("ОбщаяФорма.ПрисоединенныйФайл", ПараметрыФормы, , ПрисоединенныйФайл); + КонецЕсли; + + Если ПрисоединенныеФайлыМассив.Количество() > 0 Тогда + ОповеститьОбИзменении(ПрисоединенныеФайлыМассив[0]); + Оповестить("Запись_ПрисоединенныйФайл", + Новый Структура("ЭтоНовый, ВладелецФайла", Истина, ВладелецФайла), ПрисоединенныеФайлыМассив); + КонецЕсли; + + КонецЕсли; + + Иначе // Если веб-клиент без подключенного расширения. + ОписаниеОповещения = Новый ОписаниеОповещения("ДобавитьФайлыЗавершение", ЭтотОбъект, ДополнительныеПараметры); + ПоместитьВыбранныеФайлыВХранилищеВеб(ОписаниеОповещения, ВладелецФайла, ИдентификаторФормы); + КонецЕсли; + +КонецПроцедуры + +#КонецОбласти + #Область СлужебныеПроцедурыИФункции // См. одноименную функцию в общем модуле ПрисоединенныеФайлыКлиент. @@ -122,7 +199,8 @@ Если ПрисоединенныеФайлыМассив.Количество() > 0 Тогда ОповеститьОбИзменении(ПрисоединенныеФайлыМассив[0]); - Оповестить("Запись_ПрисоединенныйФайл", Новый Структура("ЭтоНовый", Истина), ПрисоединенныеФайлыМассив); + Оповестить("Запись_ПрисоединенныйФайл", + Новый Структура("ЭтоНовый, ВладелецФайла", Истина, ВладелецФайла), ПрисоединенныеФайлыМассив); КонецЕсли; КонецПроцедуры @@ -504,8 +582,8 @@ Если Не РасширениеПодключено Тогда Результат = Новый Структура; - Результат.Вставить("ОписаниеОшибки", Контекст.ЗаголовокОшибки + - НСтр("ru = 'В обозреватель интернет не установлено расширение для работы с файлами.'")); + Результат.Вставить("ОписаниеОшибки", Контекст.ЗаголовокОшибки + + НСтр("ru = 'В обозреватель интернет не установлено расширение для работы с файлами.'")); ВыполнитьОбработкуОповещения(Контекст.Оповещение, Результат); Возврат; КонецЕсли; @@ -533,51 +611,46 @@ Контекст.ПолноеИмяПомещаемогоФайла = Контекст.ПолноеИмяФайла; КонецЕсли; + ОписаниеФайла = Новый ОписаниеПередаваемогоФайла(Контекст.ПолноеИмяФайла); + ПомещаемыеФайлы = Новый Массив; + ПомещаемыеФайлы.Добавить(ОписаниеФайла); + ДействияСФайлом = Новый Массив; + Вызовы = Новый Массив; + Если Контекст.ПолноеИмяФайла <> Контекст.ПолноеИмяПомещаемогоФайла Тогда Действие = Новый Структура; Действие.Вставить("Действие", "СоздатьКаталог"); Действие.Вставить("Файл", Контекст.КаталогФайла); - Действие.Вставить("ЗаголовокОшибки", Контекст.ЗаголовокОшибки + - СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Создание каталога не выполнено по причине:'"), Контекст.КаталогФайла)); + Действие.Вставить("ЗаголовокОшибки", Контекст.ЗаголовокОшибки + + НСтр("ru = 'Создание каталога не выполнено по причине:'")); ДействияСФайлом.Добавить(Действие); Действие = Новый Структура; Действие.Вставить("Действие", "УстановитьСвойства"); Действие.Вставить("Файл", Контекст.ПолноеИмяФайла); Действие.Вставить("Свойства", Новый Структура("ТолькоЧтение", Ложь)); - Действие.Вставить("ЗаголовокОшибки", Контекст.ЗаголовокОшибки + - СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Изменение свойства файла ""Только просмотр"" не выполнено по причине:'"), Контекст.ПолноеИмяФайла)); - ДействияСФайлом.Добавить(Действие); - - Действие = Новый Структура; - Действие.Вставить("Действие", "Удалить"); - Действие.Вставить("Файл", Контекст.ПолноеИмяФайла); - Действие.Вставить("ЗаголовокОшибки", Контекст.ЗаголовокОшибки + - СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Удаление файла не выполнено по причине:'"), Контекст.ПолноеИмяФайла)); + Действие.Вставить("ЗаголовокОшибки", Контекст.ЗаголовокОшибки + + НСтр("ru = 'Изменение свойства файла ""Только просмотр"" не выполнено по причине:'")); ДействияСФайлом.Добавить(Действие); Действие = Новый Структура; Действие.Вставить("Действие", "СкопироватьИзИсточника"); Действие.Вставить("Файл", Контекст.ПолноеИмяФайла); Действие.Вставить("Источник", Контекст.ПолноеИмяПомещаемогоФайла); - Действие.Вставить("ЗаголовокОшибки", Контекст.ЗаголовокОшибки + - СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Копирование файла не выполнено по причине:'"), Контекст.ПолноеИмяФайла)); + Действие.Вставить("ЗаголовокОшибки", Контекст.ЗаголовокОшибки + + НСтр("ru = 'Копирование файла не выполнено по причине:'")); ДействияСФайлом.Добавить(Действие); + ДобавитьВызов(Вызовы, "НачатьКопированиеФайла", Контекст.ПолноеИмяПомещаемогоФайла, Контекст.ПолноеИмяФайла,,); КонецЕсли; Действие = Новый Структура; Действие.Вставить("Действие", "УстановитьСвойства"); Действие.Вставить("Файл", Контекст.ПолноеИмяФайла); Действие.Вставить("Свойства", Новый Структура("ТолькоЧтение", Истина)); - Действие.Вставить("ЗаголовокОшибки", Контекст.ЗаголовокОшибки + - СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Изменение свойства файла ""Только просмотр"" не выполнено по причине:'"), Контекст.ПолноеИмяФайла)); + Действие.Вставить("ЗаголовокОшибки", Контекст.ЗаголовокОшибки + + НСтр("ru = 'Изменение свойства файла ""Только просмотр"" не выполнено по причине:'")); ДействияСФайлом.Добавить(Действие); Контекст.Вставить("СвойстваФайла", Новый Структура); @@ -589,9 +662,8 @@ Действие.Вставить("Действие", "ПолучитьСвойства"); Действие.Вставить("Файл", Контекст.ПолноеИмяФайла); Действие.Вставить("Свойства", Контекст.СвойстваФайла); - Действие.Вставить("ЗаголовокОшибки", Контекст.ЗаголовокОшибки + - СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Получение свойств файла не выполнено по причине:'"), Контекст.ПолноеИмяФайла)); + Действие.Вставить("ЗаголовокОшибки", Контекст.ЗаголовокОшибки + + НСтр("ru = 'Получение свойств файла не выполнено по причине:'")); ДействияСФайлом.Добавить(Действие); Контекст.Вставить("ДействиеПомещения", Новый Структура); @@ -599,11 +671,37 @@ Контекст.ДействиеПомещения.Вставить("Файл", Контекст.ПолноеИмяФайла); Контекст.ДействиеПомещения.Вставить("ЗаголовокОшибки", Контекст.ЗаголовокОшибки); ДействияСФайлом.Добавить(Контекст.ДействиеПомещения); + ДобавитьВызов(Вызовы, "НачатьПомещениеФайлов", ПомещаемыеФайлы, , Ложь, Контекст.ИдентификаторФормы); - ФайловыеФункцииСлужебныйКлиент.ОбработатьФайл(Новый ОписаниеОповещения( - "ПоместитьПрисоединенныйФайлПослеОбработкиФайла", ЭтотОбъект, Контекст), - ДействияСФайлом, Контекст.ИдентификаторФормы); + Контекст.Вставить("ДействияСФайлом", ДействияСФайлом); + НачатьЗапросРазрешенияПользователя(Новый ОписаниеОповещения( + "ПоместитьПрисоединенныйФайлПослеПолученияРазрешений", ЭтотОбъект, Контекст), Вызовы); + +КонецПроцедуры + +Процедура ДобавитьВызов(Вызовы, Метод, П1, П2, П3, П4) + + Вызов = Новый Массив; + Вызов.Добавить(Метод); + Вызов.Добавить(П1); + Вызов.Добавить(П2); + Вызов.Добавить(П3); + Вызов.Добавить(П4); + + Вызовы.Добавить(Вызов); + +КонецПроцедуры + +// Продолжение процедуры ПоместитьПрисоединенныйФайл. +Процедура ПоместитьПрисоединенныйФайлПослеПолученияРазрешений(РазрешенияПолучены, Контекст) Экспорт + + Если РазрешенияПолучены Тогда + ФайловыеФункцииСлужебныйКлиент.ОбработатьФайл(Новый ОписаниеОповещения( + "ПоместитьПрисоединенныйФайлПослеОбработкиФайла", ЭтотОбъект, Контекст), + Контекст.ДействияСФайлом, Контекст.ИдентификаторФормы); + КонецЕсли; + КонецПроцедуры // Продолжение процедуры ПоместитьПрисоединенныйФайл. @@ -693,8 +791,8 @@ Если Не РасширениеПодключено Тогда Результат = Новый Структура; Результат.Вставить("ПолноеИмяФайла", ""); - Результат.Вставить("ОписаниеОшибки", Контекст.ЗаголовокОшибки + - НСтр("ru = 'В обозреватель интернет не установлено расширение для работы с файлами.'")); + Результат.Вставить("ОписаниеОшибки", Контекст.ЗаголовокОшибки + + НСтр("ru = 'В обозреватель интернет не установлено расширение для работы с файлами.'")); ВыполнитьОбработкуОповещения(Контекст.Оповещение, Результат); Возврат; КонецЕсли; @@ -724,26 +822,16 @@ Действие = Новый Структура; Действие.Вставить("Действие", "СоздатьКаталог"); Действие.Вставить("Файл", Контекст.КаталогФайла); - Действие.Вставить("ЗаголовокОшибки", Контекст.ЗаголовокОшибки + - СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Создание каталога не выполнено по причине:'"), Контекст.КаталогФайла)); + Действие.Вставить("ЗаголовокОшибки", Контекст.ЗаголовокОшибки + + НСтр("ru = 'Создание каталога не выполнено по причине:'")); ДействияСФайлом.Добавить(Действие); Действие = Новый Структура; Действие.Вставить("Действие", "УстановитьСвойства"); Действие.Вставить("Файл", Контекст.ПолноеИмяФайла); Действие.Вставить("Свойства", Новый Структура("ТолькоЧтение", Ложь)); - Действие.Вставить("ЗаголовокОшибки", Контекст.ЗаголовокОшибки + - СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Изменение свойства файла ""Только просмотр"" не выполнено по причине:'"), Контекст.ПолноеИмяФайла)); - ДействияСФайлом.Добавить(Действие); - - Действие = Новый Структура; - Действие.Вставить("Действие", "Удалить"); - Действие.Вставить("Файл", Контекст.ПолноеИмяФайла); - Действие.Вставить("ЗаголовокОшибки", Контекст.ЗаголовокОшибки + - СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Удаление файла не выполнено по причине:'"), Контекст.ПолноеИмяФайла)); + Действие.Вставить("ЗаголовокОшибки", Контекст.ЗаголовокОшибки + + НСтр("ru = 'Изменение свойства файла ""Только просмотр"" не выполнено по причине:'")); ДействияСФайлом.Добавить(Действие); Действие = Новый Структура; @@ -761,9 +849,8 @@ Действие.Вставить("Действие", "УстановитьСвойства"); Действие.Вставить("Файл", Контекст.ПолноеИмяФайла); Действие.Вставить("Свойства", СвойстваФайла); - Действие.Вставить("ЗаголовокОшибки", Контекст.ЗаголовокОшибки + - СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Установка свойств файла не выполнено по причине:'"), Контекст.ПолноеИмяФайла)); + Действие.Вставить("ЗаголовокОшибки", Контекст.ЗаголовокОшибки + + НСтр("ru = 'Установка свойств файла не выполнено по причине:'")); ДействияСФайлом.Добавить(Действие); ФайловыеФункцииСлужебныйКлиент.ОбработатьФайл(Новый ОписаниеОповещения( @@ -1193,7 +1280,8 @@ Процедура ПоместитьВыбранныеФайлыВХранилище(Знач ВыбранныеФайлы, Знач ВладелецФайла, ПрисоединенныеФайлыМассив, - Знач ИдентификаторФормы) Экспорт + Знач ИдентификаторФормы, + Знач ИмяСоздаваемогоФайла = "") Экспорт ОбщиеНастройки = ФайловыеФункцииСлужебныйКлиентСервер.ОбщиеНастройкиРаботыСФайлами(); @@ -1219,7 +1307,7 @@ ВремяИзмененияУниверсальное = Файл.ПолучитьУниверсальноеВремяИзменения(); - ОбновитьСостояниеОСохраненииФайлов(ВыбранныеФайлы, Файл, ТекущаяПозиция); + ОбновитьСостояниеОСохраненииФайлов(ВыбранныеФайлы, Файл, ТекущаяПозиция, ИмяСоздаваемогоФайла); ПоследнийСохраненныйФайл = Файл; ПомещаемыеФайлы = Новый Массив; @@ -1240,10 +1328,11 @@ АдресВременногоХранилищаФайла = ПомещенныеФайлы[0].Хранение; + ИмяБезРасширения = ?(ПустаяСтрока(ИмяСоздаваемогоФайла), Файл.ИмяБезРасширения, ИмяСоздаваемогоФайла); // Создание карточки Файла в базе данных. ПрисоединенныйФайл = ПрисоединенныеФайлыСлужебныйВызовСервера.ДобавитьФайл( ВладелецФайла, - Файл.ИмяБезРасширения, + ИмяБезРасширения, ОбщегоНазначенияКлиентСервер.РасширениеБезТочки(Файл.Расширение), , ВремяИзмененияУниверсальное, @@ -1258,19 +1347,24 @@ КонецЦикла; - ОбновитьСостояниеОСохраненииФайлов(ВыбранныеФайлы, ПоследнийСохраненныйФайл); + ОбновитьСостояниеОСохраненииФайлов(ВыбранныеФайлы, ПоследнийСохраненныйФайл, , ИмяБезРасширения); КонецПроцедуры //////////////////////////////////////////////////////////////////////////////// // Вспомогательные процедуры и функции. -Процедура ОбновитьСостояниеОСохраненииФайлов(Знач ВыбранныеФайлы, Знач Файл, Знач ТекущаяПозиция = Неопределено); +Процедура ОбновитьСостояниеОСохраненииФайлов(Знач ВыбранныеФайлы, + Знач Файл, + Знач ТекущаяПозиция = Неопределено, + ИмяСоздаваемогоФайла = ""); Если Файл = Неопределено Тогда Возврат; КонецЕсли; + СохраняемоеИмяФайла = ?(ПустаяСтрока(ИмяСоздаваемогоФайла), Файл.Имя, ИмяСоздаваемогоФайла); + РазмерВМб = ФайловыеФункцииСлужебныйКлиентСервер.ПолучитьСтрокуСРазмеромФайла(Файл.Размер() / (1024 * 1024)); Если ВыбранныеФайлы.Количество() > 1 Тогда @@ -1281,7 +1375,7 @@ ИндикаторПроцент = ТекущаяПозиция * 100 / ВыбранныеФайлы.Количество(); НадписьПодробнее = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Сохраняется файл ""%1"" (%2 Мб) ...'"), Файл.Имя, РазмерВМб); + НСтр("ru = 'Сохраняется файл ""%1"" (%2 Мб) ...'"), СохраняемоеИмяФайла, РазмерВМб); ТекстСостояния = НСтр("ru = 'Сохранение нескольких файлов.'"); @@ -1291,13 +1385,13 @@ Если ТекущаяПозиция = Неопределено Тогда ТекстПояснения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Сохранение файла ""%1"" (%2 Мб) - |завершено.'"), Файл.Имя, РазмерВМб); + |завершено.'"), СохраняемоеИмяФайла, РазмерВМб); Иначе ТекстПояснения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Сохраняется файл ""%1"" (%2 Мб). - |Пожалуйста, подождите...'"), Файл.Имя, РазмерВМб); + |Пожалуйста, подождите...'"), СохраняемоеИмяФайла, РазмерВМб); КонецЕсли; - Состояние(ТекстПояснения); + ПоказатьОповещениеПользователя(ТекстПояснения); КонецЕсли; КонецПроцедуры @@ -1378,60 +1472,15 @@ // Продолжение процедуры ПрисоединенныеФайлыКлиент.ОткрытьФайл. Процедура ОткрытьФайлНапоминаниеПоказано(РезультатНапоминания, ДополнительныеПараметры) Экспорт + Если РезультатНапоминания = КодВозвратаДиалога.Отмена Или РезультатНапоминания = Неопределено Тогда + Возврат; + КонецЕсли; + ДанныеФайла = ДополнительныеПараметры.ДанныеФайла; ПолучитьФайл(ДанныеФайла.СсылкаНаДвоичныеДанныеФайла, ДанныеФайла.ИмяФайла, Истина); КонецПроцедуры -// Продолжение процедуры ПрисоединенныеФайлыКлиент.ДобавитьФайлы. -Процедура ДобавитьФайлыРасширениеПредложено(РасширениеРаботыСФайламиПодключено, ДополнительныеПараметры) Экспорт - - ВладелецФайла = ДополнительныеПараметры.ВладелецФайла; - ИдентификаторФормы = ДополнительныеПараметры.ИдентификаторФормы; - Фильтр = ДополнительныеПараметры.Фильтр; - - Если РасширениеРаботыСФайламиПодключено Тогда - - ВыборФайла = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Открытие); - ВыборФайла.МножественныйВыбор = Истина; - ВыборФайла.Заголовок = НСтр("ru = 'Выбор файла'"); - ВыборФайла.Фильтр = ?(ЗначениеЗаполнено(Фильтр), Фильтр, НСтр("ru = 'Все файлы'") + " (*.*)|*.*"); - - Если ВыборФайла.Выбрать() Тогда - ПрисоединенныеФайлыМассив = Новый Массив; - ПоместитьВыбранныеФайлыВХранилище( - ВыборФайла.ВыбранныеФайлы, - ВладелецФайла, - ПрисоединенныеФайлыМассив, - ИдентификаторФормы); - - Если ПрисоединенныеФайлыМассив.Количество() = 1 Тогда - ПрисоединенныйФайл = ПрисоединенныеФайлыМассив[0]; - - ПоказатьОповещениеПользователя( - НСтр("ru = 'Создание:'"), - ПолучитьНавигационнуюСсылку(ПрисоединенныйФайл), - ПрисоединенныйФайл, - БиблиотекаКартинок.Информация32); - - ПараметрыФормы = Новый Структура("ПрисоединенныйФайл, ЭтоНовый", ПрисоединенныйФайл, Истина); - ОткрытьФорму("ОбщаяФорма.ПрисоединенныйФайл", ПараметрыФормы, , ПрисоединенныйФайл); - КонецЕсли; - - Если ПрисоединенныеФайлыМассив.Количество() > 0 Тогда - ОповеститьОбИзменении(ПрисоединенныеФайлыМассив[0]); - Оповестить("Запись_ПрисоединенныйФайл", Новый Структура("ЭтоНовый", Истина), ПрисоединенныеФайлыМассив); - КонецЕсли; - - КонецЕсли; - - Иначе // Если веб-клиент без подключенного расширения. - ОписаниеОповещения = Новый ОписаниеОповещения("ДобавитьФайлыЗавершение", ЭтотОбъект); - ПоместитьВыбранныеФайлыВХранилищеВеб(ОписаниеОповещения, ВладелецФайла, ИдентификаторФормы); - КонецЕсли; - -КонецПроцедуры - // Продолжение процедуры ПрисоединенныеФайлыКлиент.ДобавитьФайлы. Процедура ДобавитьФайлыЗавершение(ПрисоединенныйФайл, ДополнительныеПараметры) Экспорт @@ -1439,6 +1488,8 @@ Возврат; КонецЕсли; + ВладелецФайла = ДополнительныеПараметры.ВладелецФайла; + ПоказатьОповещениеПользователя( НСтр("ru = 'Создание'"), ПолучитьНавигационнуюСсылку(ПрисоединенныйФайл), @@ -1446,9 +1497,8 @@ БиблиотекаКартинок.Информация32); ОповеститьОбИзменении(ПрисоединенныйФайл); - - ПараметрыФормы = Новый Структура("ПрисоединенныйФайл", ПрисоединенныйФайл); - ОткрытьФорму("ОбщаяФорма.ПрисоединенныйФайл", ПараметрыФормы, , ПрисоединенныйФайл); + Оповестить("Запись_ПрисоединенныйФайл", + Новый Структура("ЭтоНовый, ВладелецФайла", Истина, ВладелецФайла), ПрисоединенныйФайл); КонецПроцедуры diff --git a/SSL/src/CommonModules/ПроверкаКонтрагентов/Module.bsl b/SSL/src/CommonModules/ПроверкаКонтрагентов/Module.bsl index 72ec87156..74e324a67 100644 --- a/SSL/src/CommonModules/ПроверкаКонтрагентов/Module.bsl +++ b/SSL/src/CommonModules/ПроверкаКонтрагентов/Module.bsl @@ -9,75 +9,6 @@ #Область ПроверкаОдногоКонтрагента -// Подписка на событие. Добавление в регистр набора ИНН и КПП для последующей проверки регламентным заданием. -// -// Параметры: -// КонтрагентОбъект - СправочникОбъект.<Контрагенты> - записываемый контрагент. -// Отказ - Булево - Параметр обработчика подписки на событие. -Процедура СохранитьРезультатПроверкиКонтрагентаПриЗаписи(КонтрагентОбъект, Отказ) Экспорт - - Если КонтрагентОбъект.ОбменДанными.Загрузка Тогда - Возврат; - КонецЕсли; - - Если НЕ ПроверкаКонтрагентовВызовСервера.ИспользованиеПроверкиВозможно() - ИЛИ СправочникКонтрагентовИерархический() И КонтрагентОбъект.ЭтоГруппа Тогда - Возврат; - КонецЕсли; - - СостояниеКонтрагента = Перечисления.СостоянияСуществованияКонтрагента.ПустаяСсылка(); - КонтрагентОбъект.ДополнительныеСвойства.Свойство("ПроверкаКонтрагентовСостояниеКонтрагента", СостояниеКонтрагента); - - СвойстваСправочникаКонтрагенты = ПроверкаКонтрагентовКлиентСервер.СвойстваСправочникаКонтрагенты(); - - ДанныеКонтрагента = Новый Структура; - - ДанныеКонтрагента.Вставить("Контрагент", КонтрагентОбъект.Ссылка); - ДанныеКонтрагента.Вставить("ИНН", КонтрагентОбъект[СвойстваСправочникаКонтрагенты.ИНН]); - ДанныеКонтрагента.Вставить("КПП", КонтрагентОбъект[СвойстваСправочникаКонтрагенты.КПП]); - ДанныеКонтрагента.Вставить("Дата", НачалоДня(ТекущаяДатаСеанса())); - ДанныеКонтрагента.Вставить("Состояние", СостояниеКонтрагента); - - Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаВМоделиСервиса") Тогда - ДанныеКонтрагента.Вставить("ОбластьДанныхВспомогательныеДанные", ОбщегоНазначения.ЗначениеРазделителяСеанса()); - КонецЕсли; - - УстановитьПривилегированныйРежим(Истина); - СохранитьРезультатыПроверкиКонтрагентаВРегистр(ДанныеКонтрагента); - -КонецПроцедуры - -// Процедура - Метод фонового задания по проверке контрагента из формы контрагента. -// -// Параметры: -// Параметры - Структура - Параметры запуска фонового задания. Ключи структуры: -// "Контрагент" - СправочникСсылка.<Контрагенты> - Проверяемый контрагент. -// "ИНН" - Строка - ИНН Контрагента -// "КПП" - Строка - КПП Контрагента -// "Дата" - Дата - Дата, на которую выполняется проверка контрагента. Может быть не указана, тогда берется текущая -// дата "СохранятьРезультатСразуПослеПроверки" - Булево - Признак, указывающий нужно ли результат -// проверки контрагента сразу сохранять в регистр -// "АдресХранилища" - Строка - Адрес, в который будет помещен результат проверки контрагента. -Процедура ПроверитьКонтрагентаФоновоеЗадание(Параметры) Экспорт - - // Присвоение даты находится здесь, так как ТекущаяДатаСеанса работает только на сервере. - Если НЕ Параметры.Свойство("Дата") Тогда - Параметры.Вставить("Дата", НачалоДня(ТекущаяДатаСеанса())); - КонецЕсли; - - Попытка - ПроверитьКонтрагента(Параметры, Параметры.АдресХранилища); - Исключение - - КодОсновногоЯзыка = ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка(); // Для записи события в журнал регистрации. - ИнформацияОбОшибке = ИнформацияОбОшибке(); - ЗаписьЖурналаРегистрации(НСтр("ru = 'Проверка контрагентов.Проверка контрагента из карточки контрагента'", КодОсновногоЯзыка), - УровеньЖурналаРегистрации.Ошибка,,,ПодробноеПредставлениеОшибки(ИнформацияОбОшибке)); - - КонецПопытки; - -КонецПроцедуры - // Процедура - Проверка одного контрагента по ИНН, КПП и Дате. // // Параметры: @@ -106,6 +37,35 @@ КонецПроцедуры +// Функция - Состояние контрагента +// +// Параметры: +// "ИНН" - Строка - ИНН Контрагента. +// "КПП" - Строка - КПП Контрагента. +// "Дата" - Дата - Дата, на которую выполняется проверка контрагента. Может быть не указана, +// тогда берется текущая дата. +// +// Возвращаемое значение: +// Перечисление.СостоянияСуществованияКонтрагента - Состояния контрагента согласно данным ФНС +// +Функция СостояниеКонтрагента(ИНН, КПП, Дата = Неопределено) Экспорт + + ДополнительныеПараметры = Новый Структура(); + ДополнительныеПараметры.Вставить("ИНН", ИНН); + ДополнительныеПараметры.Вставить("КПП", КПП); + ДополнительныеПараметры.Вставить("Дата", Дата); + ДополнительныеПараметры.Вставить("Контрагент", Неопределено); + ДополнительныеПараметры.Вставить("СохранятьРезультатСразуПослеПроверки", Ложь); + + АдресХранилища = ПоместитьВоВременноеХранилище(Неопределено, Новый УникальныйИдентификатор); + ПроверитьКонтрагента(ДополнительныеПараметры, АдресХранилища); + + Состояние = ПолучитьИзВременногоХранилища(АдресХранилища); + + Возврат Состояние; + +КонецФункции + #КонецОбласти #Область ПроверкаНесколькихКонтрагентов @@ -127,9 +87,17 @@ Возврат; КонецЕсли; + ИспользоватьКэш = Истина; + Если ДанныеКонтрагентов.Количество() = 1 И ДанныеКонтрагентов.Колонки.Найти("ДополнительныеПараметры") <> Неопределено Тогда + Если ТипЗнч(ДанныеКонтрагентов) = Тип("Структура") И ДанныеКонтрагентов[0].ДополнительныеПараметры.Свойство("НеИспользоватьКэш") Тогда + ИспользоватьКэш = НЕ ДанныеКонтрагентов[0].ДополнительныеПараметры.Свойство("НеИспользоватьКэш"); + КонецЕсли; + КонецЕсли; + + // // Если по некоторым контрагентам можно определить, что они не существуют, не обращаясь к сервису, то к сервису по ним // обращаться не будем. - Если ЭтоПроверкаСправочника Тогда + Если ЭтоПроверкаСправочника И ИспользоватьКэш Тогда ПолучитьСостоянияКонтрагентовИзКэша(ДанныеКонтрагентов); КонецЕсли; @@ -190,7 +158,7 @@ // В локальном режима записывает недостающих контрагентов в регистр и обновляет состояния по каждой записи регистра. Процедура ПроверитьКонтрагентовРегламентноеЗадание() Экспорт - ОбщегоНазначения.ПриНачалеВыполненияРегламентногоЗадания(); + ОбщегоНазначения.ПриНачалеВыполненияРегламентногоЗадания(Метаданные.РегламентныеЗадания.ПроверкаКонтрагентов); // Проверяем, включен ли механизм. Если НЕ ПроверкаКонтрагентовВключена() Тогда @@ -208,8 +176,8 @@ |ИЗ | РегистрСведений.СостоянияКонтрагентов КАК СостоянияКонтрагентов |ГДЕ - | СостоянияКонтрагентов.Состояние <> ЗНАЧЕНИЕ(Перечисление.СостоянияСуществованияКонтрагента.НеПодлежитПроверке)"; - + | СостоянияКонтрагентов.Состояние <> ЗНАЧЕНИЕ(Перечисление.СостоянияСуществованияКонтрагента.КонтрагентНеПодлежитПроверке)"; + Если НЕ ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаВМоделиСервиса") Тогда Запрос.Текст = СтрЗаменить( @@ -223,6 +191,8 @@ Запрос.УстановитьПараметр("Дата", НачалоДня(ТекущаяДатаСеанса())); ДанныеКонтрагентов = Запрос.Выполнить().Выгрузить(); + ДанныеКонтрагентов.Колонки.Добавить("ДополнительныеПараметры", Новый ОписаниеТипов("Структура")); + // Выполняется проверка только тех ИНН и КПП, которые записаны в регистр. ПроверитьКонтрагентов(ДанныеКонтрагентов); @@ -282,7 +252,7 @@ КодОсновногоЯзыка = ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка(); // Для записи события в журнал регистрации. ИнформацияОбОшибке = ИнформацияОбОшибке(); - ЗаписьЖурналаРегистрации(НСтр("ru = 'Проверка контрагентов.Проверка контрагентов в фоновом задании'", КодОсновногоЯзыка), + ЗаписьЖурналаРегистрации(НСтр("ru = 'Проверка контрагентов.Фоновое задание по обработке непроверенных контрагентов после включения'", КодОсновногоЯзыка), УровеньЖурналаРегистрации.Ошибка,,,ПодробноеПредставлениеОшибки(ИнформацияОбОшибке)); КонецПопытки; @@ -508,7 +478,7 @@ // Специальной обработки не требуется. КодОсновногоЯзыка = ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка(); // Для записи события в журнал регистрации. ИнформацияОбОшибке = ИнформацияОбОшибке(); - ЗаписьЖурналаРегистрации(НСтр("ru = 'Проверка контрагентов.Проверка контрагентов фоновым заданием в документе'", КодОсновногоЯзыка), + ЗаписьЖурналаРегистрации(НСтр("ru = 'Проверка контрагентов.Фоновое задание в документе'", КодОсновногоЯзыка), УровеньЖурналаРегистрации.Ошибка,,,ПодробноеПредставлениеОшибки(ИнформацияОбОшибке)); КонецПопытки; @@ -552,7 +522,7 @@ Если Форма.РеквизитыПроверкиКонтрагентов.ПроверкаИспользуется Тогда СтандартнаяОбработка = Истина; - ПроверкаКонтрагентовПереопределяемый.ОтобразитьРезультатПроверкиКонтрагентаВДокументе(Форма, СтандартнаяОбработка); + РаботаСКонтрагентамиПереопределяемый.ОтобразитьРезультатПроверкиКонтрагентаВДокументе(Форма, СтандартнаяОбработка); // Если действия по отображению результата проверки переопределили, то стандартную обработку не выполняем. Если НЕ СтандартнаяОбработка Тогда @@ -563,9 +533,8 @@ СостояниеПроверки = Перечисления.СостоянияПроверкиКонтрагентов.ПроверкаВыполнена; - Если ЗначениеЗаполнено(Форма.РеквизитыПроверкиКонтрагентов.АдресХранилища) И - ЭтоАдресВременногоХранилища(Форма.РеквизитыПроверкиКонтрагентов.АдресХранилища) Тогда - + Если ЗначениеЗаполнено(Форма.РеквизитыПроверкиКонтрагентов.АдресХранилища) + И ЭтоАдресВременногоХранилища(Форма.РеквизитыПроверкиКонтрагентов.АдресХранилища) Тогда РезультатРаботыФоновогоЗадания = ПолучитьИзВременногоХранилища(Форма.РеквизитыПроверкиКонтрагентов.АдресХранилища); Если РезультатРаботыФоновогоЗадания <> Неопределено Тогда @@ -770,10 +739,212 @@ КонецЕсли; + РаботаСКонтрагентамиПереопределяемый.ДополнитьРеквизитыФормыДокумент(Форма, НовыеРеквизиты); + Форма.РеквизитыПроверкиКонтрагентов = НовыеРеквизиты; КонецПроцедуры +// Функция - Формирует описание документа, согласно которому осуществляется проверка контрагентов и вывод +// информации о результатах проверки в форму документа. +// +// Параметры: +// Форма - УправляемаяФорма - Форма документа, в котором выполняется проверка контрагентов. +Функция ОписаниеДокументов(Форма) Экспорт + + ОбщееОписание = ШаблонТаблицыОписания(); + + Если ПроверкаКонтрагентовКлиентСервер.ЭтоДокументСКонтрагентомВШапке(Форма) Тогда + + Описание = ШаблонТаблицыОписания(); + РаботаСКонтрагентамиПереопределяемый.СформироватьОписаниеДокументовСКонтрагентомВШапке(Форма, Описание); + + // Дополняем описание состоянием. + Для Каждого СтрокаОписания Из Описание Цикл + СтрокаОписания.СостояниеКонтрагента = Форма.РеквизитыПроверкиКонтрагентов.СостояниеКонтрагента; + КонецЦикла; + + ПрисоединитьОписание(ОбщееОписание, Описание); + + КонецЕсли; + + Если ПроверкаКонтрагентовКлиентСервер.ЭтоДокументСоСчетомФактуройВПодвале(Форма) Тогда + + Описание = ШаблонТаблицыОписания(); + РаботаСКонтрагентамиПереопределяемый.СформироватьОписаниеДокументовСоСчетомФактуройВПодвале(Форма, Описание); + + // Дополняем описание состоянием. + Для Каждого СтрокаОписания Из Описание Цикл + СтрокаОписания.СостояниеКонтрагента = Форма.РеквизитыПроверкиКонтрагентов.СостояниеКонтрагентовВСчетеФактуре; + КонецЦикла; + + ПрисоединитьОписание(ОбщееОписание, Описание); + + КонецЕсли; + + Если ПроверкаКонтрагентовКлиентСервер.ЭтоСчетФактура(Форма) Тогда + + Описание = ШаблонТаблицыОписания(); + РаботаСКонтрагентамиПереопределяемый.СформироватьОписаниеСчетовФактур(Форма, Описание); + + // Дополняем описание состоянием. + Если Форма.РеквизитыПроверкиКонтрагентов <> Неопределено Тогда + Для Каждого СтрокаОписания Из Описание Цикл + + ИмяРеквизитаСчетаФактуры = ИмяРеквизита(Форма, СтрокаОписания.Элемент.Имя); + СтрокаОписания.СостояниеКонтрагента = Форма.РеквизитыПроверкиКонтрагентов[ИмяРеквизитаСостоянияКонтрагентаВСчетеФактуре(ИмяРеквизитаСчетаФактуры)]; + + КонецЦикла; + КонецЕсли; + + ПрисоединитьОписание(ОбщееОписание, Описание); + + КонецЕсли; + + Возврат ОбщееОписание; + +КонецФункции + +// Процедура - Заполнение данных контрагента в документе. +// +// Параметры: +// Ссылка - ДокументСсылка - Документ, в котором выполняется проверка контрагентов. +// ДанныеКонтрагентов - ТаблицаЗначений - Содержит данные проверяемых контрагентов. +// Структуру колонок таблицы см в функции ШаблонТаблицыДанныеКонтрагента. +// Контрагент - СправочникСсылка.<Контрагенты> - Контрагент, данными которого дополняются данные таблицы +// ДанныеКонтрагентов. +// Дата - Дата - Дата, на которую выполняется проверка контрагента. +// Состояние - Перечисления.СостоянияСуществованияКонтрагента - Результат проверки контрагента. +Процедура ДополнитьДанныеКонтрагентовВДокументе( + Ссылка, + ДанныеКонтрагентов, + Контрагент, + Дата, + Состояние = Неопределено) Экспорт + + // Добавляем новую строку в таблицу, только если такой строки еще нет. + Отбор = Новый Структура("Ссылка, Контрагент, Дата", Ссылка, Контрагент, Дата); + НайденныеСтроки = ДанныеКонтрагентов.НайтиСтроки(Отбор); + + Если НайденныеСтроки.Количество() = 0 Тогда + + ДобавитьСтрокуВДанныеКонтрагентовВДокументе(Ссылка, ДанныеКонтрагентов, Контрагент, Дата, Состояние); + + КонецЕсли; + +КонецПроцедуры + +// Процедура - Определяет итоговое состояние контрагентов в документе. +// +// Параметры: +// ДанныеКонтрагентов - ТаблицаЗначений - Содержит данные проверяемых контрагентов. +// Структуру колонок таблицы см в функции ШаблонТаблицыДанныеКонтрагента. +// Отбор - Структура - отбор, накладываемый на таблицу данные контрагента. +// +// +// Возвращаемое значение: +// Структура +// +Функция ИтоговоеСостояниеКонтрагентаВДокументе(ДанныеКонтрагентов, Отбор = Неопределено) Экспорт + + // Инициализируем + СостояниеКонтрагента = ПредопределенноеЗначение("Перечисление.СостоянияСуществованияКонтрагента.ПустаяСсылка"); + + ЕстьНепустойКонтрагент = Ложь; + КонтрагентовНесколько = Ложь; + + Если Отбор = Неопределено Тогда + ДанныеПоКонтрагентам = ДанныеКонтрагентов.Скопировать(); + Иначе + ДанныеПоКонтрагентам = ДанныеКонтрагентов.Скопировать(Отбор); + КонецЕсли; + + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаВМоделиСервиса") Тогда + ДанныеПоКонтрагентам.Свернуть("Ссылка, Контрагент, ИНН, КПП, Дата, ОбластьДанныхВспомогательныеДанные, Состояние"); + Иначе + ДанныеПоКонтрагентам.Свернуть("Ссылка, Контрагент, ИНН, КПП, Дата, Состояние"); + КонецЕсли; + + Если ДанныеПоКонтрагентам.Количество() = 1 Тогда + + ДанныеПоКонтрагенту = ДанныеПоКонтрагентам[0]; + ЕстьНепустойКонтрагент = ЗначениеЗаполнено(ДанныеПоКонтрагенту.Контрагент); + СостояниеКонтрагента = ДанныеПоКонтрагенту.Состояние; + КонтрагентовНесколько = Ложь; + + Иначе + + // Прорисовываем результат проверки в счет-фактуре. + ЕстьНедействующиеКонтрагенты = Ложь; + ЕстьДействующиеКонтрагенты = Ложь; + ЕстьКонтрагентыСОшибками = Ложь; + ЕстьКонтрагентыНеПодлежащиеПроверке = Ложь; + ЕстьКонтрагентыСПустымИННКПП = Ложь; + + Для каждого ДанныеПоКонтрагенту Из ДанныеПоКонтрагентам Цикл + + // Заполненность контрагента + Если ЗначениеЗаполнено(ДанныеПоКонтрагенту.Контрагент) Тогда + ЕстьНепустойКонтрагент = Истина; + КонецЕсли; + + // Состояние существования + Если ПроверкаКонтрагентовКлиентСерверПовтИсп.ЭтоСостояниеНедействующегоКонтрагента(ДанныеПоКонтрагенту.Состояние) Тогда + ЕстьНедействующиеКонтрагенты = Истина; + КонецЕсли; + + Если ПроверкаКонтрагентовКлиентСерверПовтИсп.ЭтоСостояниеДействующегоКонтрагента(ДанныеПоКонтрагенту.Состояние) + И ДанныеПоКонтрагенту.Состояние <> ПредопределенноеЗначение("Перечисление.СостоянияСуществованияКонтрагента.КонтрагентСодержитОшибкиВДанных") + И ДанныеПоКонтрагенту.Состояние <> ПредопределенноеЗначение("Перечисление.СостоянияСуществованияКонтрагента.ПустаяСсылка") + И ДанныеПоКонтрагенту.Состояние <> ПредопределенноеЗначение("Перечисление.СостоянияСуществованияКонтрагента.КонтрагентНеПодлежитПроверке") Тогда + ЕстьДействующиеКонтрагенты = Истина; + КонецЕсли; + + Если ДанныеПоКонтрагенту.Состояние = ПредопределенноеЗначение("Перечисление.СостоянияСуществованияКонтрагента.КонтрагентСодержитОшибкиВДанных") Тогда + ЕстьКонтрагентыСОшибками = Истина; + КонецЕсли; + + Если ДанныеПоКонтрагенту.Состояние = ПредопределенноеЗначение("Перечисление.СостоянияСуществованияКонтрагента.КонтрагентНеПодлежитПроверке") Тогда + ЕстьКонтрагентыНеПодлежащиеПроверке = Истина; + КонецЕсли; + + Если ДанныеПоКонтрагенту.Состояние = ПредопределенноеЗначение("Перечисление.СостоянияСуществованияКонтрагента.ПустойИННИлиКПП") Тогда + ЕстьКонтрагентыСПустымИННКПП = Истина; + КонецЕсли; + + КонецЦикла; + + Если ЕстьНепустойКонтрагент Тогда + КонтрагентовНесколько = Истина; + КонецЕсли; + + Если НЕ ЕстьНедействующиеКонтрагенты И НЕ ЕстьДействующиеКонтрагенты И НЕ ЕстьКонтрагентыСОшибками Тогда + // Контрагент не проверен + СостояниеКонтрагента = ПредопределенноеЗначение("Перечисление.СостоянияСуществованияКонтрагента.ПустаяСсылка"); + ИначеЕсли ЕстьНедействующиеКонтрагенты Тогда + СостояниеКонтрагента = ПредопределенноеЗначение("Перечисление.СостоянияСуществованияКонтрагента.КонтрагентОтсутствуетВБазеФНС"); + ИначеЕсли ЕстьКонтрагентыСОшибками Тогда + СостояниеКонтрагента = ПредопределенноеЗначение("Перечисление.СостоянияСуществованияКонтрагента.КонтрагентСодержитОшибкиВДанных"); + ИначеЕсли ЕстьКонтрагентыНеПодлежащиеПроверке Тогда + СостояниеКонтрагента = ПредопределенноеЗначение("Перечисление.СостоянияСуществованияКонтрагента.КонтрагентНеПодлежитПроверке"); + ИначеЕсли ЕстьКонтрагентыСПустымИННКПП Тогда + СостояниеКонтрагента = ПредопределенноеЗначение("Перечисление.СостоянияСуществованияКонтрагента.ПустойИННИлиКПП"); + Иначе + СостояниеКонтрагента = ПредопределенноеЗначение("Перечисление.СостоянияСуществованияКонтрагента.КонтрагентЕстьВБазеФНС"); + КонецЕсли; + + КонецЕсли; + + Результат = Новый Структура; + Результат.Вставить("КонтрагентЗаполнен", ЕстьНепустойКонтрагент); + Результат.Вставить("СостояниеКонтрагента", СостояниеКонтрагента); + Результат.Вставить("КонтрагентовНесколько", КонтрагентовНесколько); + + Возврат Результат; + +КонецФункции + + #КонецОбласти #Область ПроверкаКонтрагентовВОтчетах @@ -856,7 +1027,7 @@ ВыводитьСтроку = Истина; СтандартнаяОбработка = Истина; - ПроверкаКонтрагентовПереопределяемый.ОпределитьНужноЛиВыводитьСтрокуОтчета( + РаботаСКонтрагентамиПереопределяемый.ОпределитьНужноЛиВыводитьСтрокуОтчета( СтруктураПараметров, Контрагент, ИНН, КПП, Дата, ВыводитьСтроку, СтандартнаяОбработка); // Если действия переопределили, то стандартную обработку не выполняем. @@ -867,8 +1038,13 @@ ДанныеДляПроверкиКонтрагентов = СтруктураПараметров.ДанныеДляПроверкиКонтрагентов; НедействующиеКонтрагенты = ДанныеДляПроверкиКонтрагентов.НедействующиеКонтрагенты; - ВыводитьСтроку = НедействующиеКонтрагенты.НайтиСтроки( - Новый Структура("Контрагент, ИНН, КПП, Дата", Контрагент, ИНН, КПП, НачалоДня(Дата))).Количество() > 0; + СтруктураОтбора = Новый Структура; + СтруктураОтбора.Вставить("Контрагент", Контрагент); + СтруктураОтбора.Вставить("ИНН", ИНН); + СтруктураОтбора.Вставить("КПП", КПП); + СтруктураОтбора.Вставить("Дата", НачалоДня(Дата)); + + ВыводитьСтроку = НедействующиеКонтрагенты.НайтиСтроки(СтруктураОтбора).Количество() > 0; Возврат ВыводитьСтроку; @@ -1003,7 +1179,7 @@ ПроверяемыеКонтрагенты = ДанныеДляПроверкиКонтрагентов.НедействующиеКонтрагенты; Если НедействующиеКонтрагентыОпределены(ПроверяемыеКонтрагенты) Тогда - + Если ПроверяемыеКонтрагенты.Количество() > 0 Тогда ВыделитьКонтрагентовСОшибкамиВОтчете(ПроверяемыеКонтрагенты, ПолныйОтчет); @@ -1012,7 +1188,7 @@ // Формируем отчет, в котором оставляем только некорректных контрагентов. ПроверкаКонтрагентовОтчетПоНекорректнымКонтрагентам = Новый ТабличныйДокумент; - ПроверкаКонтрагентовПереопределяемый.СформироватьОтчет(СтруктураПараметров, ПроверкаКонтрагентовОтчетПоНекорректнымКонтрагентам); + РаботаСКонтрагентамиПереопределяемый.СформироватьОтчет(СтруктураПараметров, ПроверкаКонтрагентовОтчетПоНекорректнымКонтрагентам); Результат = Новый Структура; Результат.Вставить("НедействующиеКонтрагенты", ПроверяемыеКонтрагенты); @@ -1102,7 +1278,7 @@ Форма.РеквизитыПроверкиКонтрагентов.ПроверкаВыполнялась = Истина; СтандартнаяОбработка = Истина; - ПроверкаКонтрагентовПереопределяемый.ОтобразитьРезультатПроверкиКонтрагентаВОтчете(Форма, СтандартнаяОбработка); + РаботаСКонтрагентамиПереопределяемый.ОтобразитьРезультатПроверкиКонтрагентаВОтчете(Форма, СтандартнаяОбработка); // Если действия по отображению результата проверки переопределили, то стандартную обработку не выполняем. Если НЕ СтандартнаяОбработка Тогда @@ -1124,7 +1300,7 @@ СтандартнаяОбработка = Истина; - ПроверкаКонтрагентовПереопределяемый.ВывестиОтчет(Форма, ПолеТабличногоДокумента, РезультатФормированияОтчета, СтандартнаяОбработка); + РаботаСКонтрагентамиПереопределяемый.ВывестиОтчет(Форма, ПолеТабличногоДокумента, РезультатФормированияОтчета, СтандартнаяОбработка); // Если действия переопределили, то стандартную обработку не выполняем. Если НЕ СтандартнаяОбработка Тогда @@ -1248,8 +1424,7 @@ ПроверкаКонтрагентовКлиентСервер.ОтобразитьРезультатПроверкиКонтрагентаВСправочнике(Форма); Иначе - Если (ЗначениеЗаполнено(КонтрагентСсылка) ИЛИ ЗначениеЗаполнено(Параметры.ЗначениеКопирования)) - И (ЗначениеЗаполнено(ИНН) ИЛИ ЗначениеЗаполнено(КПП)) Тогда + Если ЗначениеЗаполнено(КонтрагентСсылка) ИЛИ ЗначениеЗаполнено(Параметры.ЗначениеКопирования) Тогда ПроверкаКонтрагентовКлиентСервер.ПроверитьКонтрагентаИзКарточки(Форма, Истина); @@ -1271,9 +1446,9 @@ УстановитьУсловноеОформлениеСпискаКонтрагентов(Список); Состояния = Новый Массив; - Состояния.Добавить(Перечисления.СостоянияСуществованияКонтрагента.КППНеСоответствуетИНН); - Состояния.Добавить(Перечисления.СостоянияСуществованияКонтрагента.ОтсутствуетВРеестре); - Состояния.Добавить(Перечисления.СостоянияСуществованияКонтрагента.ПрекратилДеятельность); + Состояния.Добавить(Перечисления.СостоянияСуществованияКонтрагента.КППНеСоответствуетДаннымБазыФНС); + Состояния.Добавить(Перечисления.СостоянияСуществованияКонтрагента.КонтрагентОтсутствуетВБазеФНС); + Состояния.Добавить(Перечисления.СостоянияСуществованияКонтрагента.НеДействуетИлиИзмененКПП); Список.Параметры.УстановитьЗначениеПараметра("Состояния", Состояния); @@ -1318,6 +1493,8 @@ // Служебный реквизит НовыеРеквизиты.Вставить("НужноПоказатьПредложениеВключитьПроверкуКонтрагентов"); + РаботаСКонтрагентамиПереопределяемый.ДополнитьРеквизитыФормыКонтрагент(Форма, НовыеРеквизиты); + Форма.РеквизитыПроверкиКонтрагентов = НовыеРеквизиты; КонецПроцедуры @@ -1382,7 +1559,7 @@ КодОсновногоЯзыка = ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка(); // Для записи события в журнал регистрации. ЗаписьЖурналаРегистрации( - НСтр("ru = 'Проверка контрагентов.Очистка предыдущих результатов проверок'", КодОсновногоЯзыка), + НСтр("ru = 'Проверка контрагентов.Очистка состояний контрагентов'", КодОсновногоЯзыка), УровеньЖурналаРегистрации.Ошибка,,, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); @@ -1433,7 +1610,7 @@ КодОсновногоЯзыка = ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка(); // Для записи события в журнал регистрации. ЗаписьЖурналаРегистрации( - НСтр("ru = 'Проверка контрагентов.Очистка предыдущих результатов проверок контрагентов в документах'", КодОсновногоЯзыка), + НСтр("ru = 'Проверка контрагентов.Очистка состояний документов'", КодОсновногоЯзыка), УровеньЖурналаРегистрации.Ошибка,,, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); @@ -1486,6 +1663,7 @@ Обработчик.Процедура = "ПроверкаКонтрагентов.ПроверитьКонтрагентовПослеВключенияПроверки"; Обработчик.НачальноеЗаполнение = Истина; Обработчик.РежимВыполнения = "Отложенно"; + Обработчик.Идентификатор = Новый УникальныйИдентификатор("c4bcb537-61e2-4fbf-af66-a5854048948f"); Обработчик.Комментарий = НСтр("ru = 'Проверяет существование контрагентов по базе ФНС. |До завершения выполнения существование контрагента может быть определено не для всех контрагентов'"); @@ -1612,7 +1790,7 @@ Функция ЕстьДоступКВебСервисуФНС() Экспорт Прокси = ПроксиСервиса(); - + Если Прокси = Неопределено Тогда Возврат Ложь; КонецЕсли; @@ -1658,6 +1836,54 @@ #КонецОбласти +#Область СлужебныйПрограммныйИнтерфейс + +// См. описание процедуры СтандартныеПодсистемыСервер.СобратьСтатистикуКонфигурации. +Процедура СобратьСтатистикуКонфигурации() Экспорт + + Если Не ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ЦентрМониторинга") Тогда + Возврат; + КонецЕсли; + + МодульЦентрМониторинга = ОбщегоНазначения.ОбщийМодуль("ЦентрМониторинга"); + МодульЦентрМониторинга.ЗаписатьСтатистикуОбъектаКонфигурации("ИспользуетсяПроверкаКонтрагентов", + Константы.ИспользоватьПроверкуКонтрагентов.Получить()); + +КонецПроцедуры + +// Процедура - Метод фонового задания по проверке контрагента из формы контрагента. +// +// Параметры: +// Параметры - Структура - Параметры запуска фонового задания. Ключи структуры: +// "Контрагент" - СправочникСсылка.<Контрагенты> - Проверяемый контрагент. +// "ИНН" - Строка - ИНН Контрагента +// "КПП" - Строка - КПП Контрагента +// "Дата" - Дата - Дата, на которую выполняется проверка контрагента. Может быть не указана, тогда берется текущая +// дата "СохранятьРезультатСразуПослеПроверки" - Булево - Признак, указывающий нужно ли результат +// проверки контрагента сразу сохранять в регистр +// "АдресХранилища" - Строка - Адрес, в который будет помещен результат проверки контрагента. +Процедура ПроверитьКонтрагентаФоновоеЗадание(Параметры) Экспорт + + // Присвоение даты находится здесь, так как ТекущаяДатаСеанса работает только на сервере. + Если НЕ Параметры.Свойство("Дата") Тогда + Параметры.Вставить("Дата", НачалоДня(ТекущаяДатаСеанса())); + КонецЕсли; + + Попытка + ПроверитьКонтрагента(Параметры, Параметры.АдресХранилища); + Исключение + + КодОсновногоЯзыка = ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка(); // Для записи события в журнал регистрации. + ИнформацияОбОшибке = ИнформацияОбОшибке(); + ЗаписьЖурналаРегистрации(НСтр("ru = 'Проверка контрагентов.Ошибка при проверке из карточки контрагента'", КодОсновногоЯзыка), + УровеньЖурналаРегистрации.Ошибка,,,ПодробноеПредставлениеОшибки(ИнформацияОбОшибке)); + + КонецПопытки; + +КонецПроцедуры + +#КонецОбласти + #Область СлужебныеПроцедурыИФункции #Область РаботаСВебСервисом @@ -1691,7 +1917,7 @@ КодОсновногоЯзыка = ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка(); // Для записи события в журнал регистрации. ИнформацияОбОшибке = ИнформацияОбОшибке(); - ЗаписьЖурналаРегистрации(НСтр("ru = 'Проверка контрагентов.Ошибка доступа к веб-сервису проверки контрагентов'", КодОсновногоЯзыка), + ЗаписьЖурналаРегистрации(НСтр("ru = 'Проверка контрагентов.Ошибка доступа к веб-сервису'", КодОсновногоЯзыка), УровеньЖурналаРегистрации.Ошибка,,,ПодробноеПредставлениеОшибки(ИнформацияОбОшибке)); КонецПопытки; @@ -1744,9 +1970,8 @@ Продолжить; КонецЕсли; - // Получаем результат проверки от сервиса. NdsResponse = ОтветСервисаФНС(Прокси, WSЗапрос); - + Если NdsResponse <> Неопределено Тогда ОбработатьОтветСервиса(NdsResponse, ДанныеКонтрагентовДляПроверкиСервисом, МинимальныйНомерКонтрагента, МаксимальныйНомерКонтрагента); КонецЕсли; @@ -1796,7 +2021,7 @@ ИнформацияОбОшибке = ИнформацияОбОшибке(); - ДанныеКонтрагента.Состояние = Перечисления.СостоянияСуществованияКонтрагента.СодержитОшибкиВДанных; + ДанныеКонтрагента.Состояние = Перечисления.СостоянияСуществованияКонтрагента.КонтрагентСодержитОшибкиВДанных; КодОсновногоЯзыка = ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка(); // Для записи события в журнал регистрации. ЗаписьЖурналаРегистрации(НСтр("ru = 'Проверка контрагентов.Формирование данных для обращения к сервису ФНС'", КодОсновногоЯзыка), @@ -1810,7 +2035,7 @@ ИндексТекущегоОтвета = 0; Для ИндексТекущегоКонтрагента = МинимальныйНомерКонтрагента По МаксимальныйНомерКонтрагента Цикл ДанныеКонтрагента = ДанныеКонтрагентовДляПроверкиСервисом[ИндексТекущегоКонтрагента]; - Если ДанныеКонтрагента.Состояние <> Перечисления.СостоянияСуществованияКонтрагента.СодержитОшибкиВДанных Тогда + Если ДанныеКонтрагента.Состояние <> Перечисления.СостоянияСуществованияКонтрагента.КонтрагентСодержитОшибкиВДанных Тогда Попытка @@ -1838,14 +2063,14 @@ КонецПроцедуры +#Область НастройкиВебСервиса + Функция ПространствоИменОтвета() Возврат "http://ws.unisoft/FNSNDSCAWS2/Request"; КонецФункции -#Область НастройкиВебСервиса - Функция ПолучитьWSПрокси(АдресСервиса) WSПрокси = ОбщегоНазначения.WSПрокси( @@ -1864,7 +2089,7 @@ Функция АдресWSDL(URI) Адрес = СокрЛП(URI); - Если Найти(НРег(Адрес), "?wsdl") = СтрДлина(Адрес) - 4 Тогда + Если СтрНайти(НРег(Адрес), "?wsdl") = СтрДлина(Адрес) - 4 Тогда Возврат Адрес; Иначе Возврат Адрес + "?wsdl"; @@ -1880,10 +2105,6 @@ Процедура СохранитьРезультатыПроверкиКонтрагентаВРегистр(ДанныеКонтрагента) - Если НЕ ЗначениеЗаполнено(ДанныеКонтрагента["ИНН"]) Тогда - Возврат; - КонецЕсли; - Попытка Контрагент = ДанныеКонтрагента.Контрагент; @@ -2010,7 +2231,7 @@ КодОсновногоЯзыка = ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка(); // Для записи события в журнал регистрации. ЗаписьЖурналаРегистрации( - НСтр("ru = 'Проверка контрагентов.Запись результатов проверки контрагентов в документе в регистр'", КодОсновногоЯзыка), + НСтр("ru = 'Проверка контрагентов.Запись результатов проверки документов в регистр'", КодОсновногоЯзыка), УровеньЖурналаРегистрации.Ошибка,,, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке)); @@ -2021,34 +2242,55 @@ // Проверка ошибок, удаление дублей. Процедура ПодготовитьДанныеКПроверке(ДанныеКонтрагентовДляПроверки) - // Создаем таблицу - ДанныеКонтрагентов = ШаблонТаблицыДанныеКонтрагента(); - - // Копируем таблицу, сохраняя типы колонок. - Для каждого ДанныеКонтрагентаДляПроверки Из ДанныеКонтрагентовДляПроверки Цикл - // Копируем данные из таблицы с "сырыми данными" в таблицу с "типизированными" колонками. - ДанныеКонтрагента = ДанныеКонтрагентов.Добавить(); - - // В зависимости от наличия колонки ОбластьДанныхВспомогательныеДанные, копируем разный набор данных. - Если ДанныеКонтрагентовДляПроверки.Колонки.Найти("ОбластьДанныхВспомогательныеДанные") = Неопределено - ИЛИ НЕ ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаВМоделиСервиса") Тогда - ЗаполнитьЗначенияСвойств(ДанныеКонтрагента, ДанныеКонтрагентаДляПроверки, "Контрагент, ИНН, КПП, Состояние, Дата"); - Иначе - ЗаполнитьЗначенияСвойств(ДанныеКонтрагента, ДанныеКонтрагентаДляПроверки, "Контрагент, ИНН, КПП, Состояние, Дата, ОбластьДанныхВспомогательныеДанные"); - КонецЕсли; - - Если ДанныеКонтрагента.Состояние <> Перечисления.СостоянияСуществованияКонтрагента.СодержитОшибкиВДанных Тогда - // Проверяем ошибки, приводим данные к нужному формату. - ПодготовитьДанныеКПроверкеПоКаждомуКонтрагенту(ДанныеКонтрагента); - КонецЕсли; - КонецЦикла; - - СвернутьДанныеКонтрагентов(ДанныеКонтрагентов); + ДанныеКонтрагентов = ДанныеКонтрагентовТипизированные(ДанныеКонтрагентовДляПроверки); + ОставитьРазрешенныхКонтрагентов(ДанныеКонтрагентов); + ПодготовитьДанныеКПроверкеПоВсемКонтрагентам(ДанныеКонтрагентов); ДанныеКонтрагентовДляПроверки = ДанныеКонтрагентов; КонецПроцедуры +Процедура ПодготовитьДанныеКПроверкеПоВсемКонтрагентам(ДанныеКонтрагентов) + + Для каждого ДанныеКонтрагента Из ДанныеКонтрагентов Цикл + + Если ДанныеКонтрагента.Состояние <> Перечисления.СостоянияСуществованияКонтрагента.КонтрагентСодержитОшибкиВДанных Тогда + // Проверяем ошибки, приводим данные к нужному формату. + ПодготовитьДанныеКПроверкеПоКаждомуКонтрагенту(ДанныеКонтрагента); + КонецЕсли; + + КонецЦикла; + + СвернутьДанныеКонтрагентов(ДанныеКонтрагентов); + +КонецПроцедуры + +Функция ДанныеКонтрагентовТипизированные(ДанныеКонтрагентовДляПроверки) + + // Создаем таблицу + ДанныеКонтрагентов = ШаблонТаблицыДанныеКонтрагента(); + ЕстьОбластьДанных = ДанныеКонтрагентовДляПроверки.Колонки.Найти("ОбластьДанныхВспомогательныеДанные") <> Неопределено И ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаВМоделиСервиса"); + + // Копируем таблицу, сохраняя типы колонок. + Для каждого ДанныеКонтрагентаДляПроверки Из ДанныеКонтрагентовДляПроверки Цикл + + // Копируем данные из таблицы с "сырыми данными" в таблицу с "типизированными" колонками. + ДанныеКонтрагента = ДанныеКонтрагентов.Добавить(); + + // В зависимости от наличия колонки ОбластьДанныхВспомогательныеДанные, копируем разный набор данных. + СписокСвойств = "Контрагент, ИНН, КПП, Состояние, Дата, ДополнительныеПараметры"; + Если ЕстьОбластьДанных Тогда + СписокСвойств = СписокСвойств + ", ОбластьДанныхВспомогательныеДанные"; + КонецЕсли; + + ЗаполнитьЗначенияСвойств(ДанныеКонтрагента, ДанныеКонтрагентаДляПроверки, СписокСвойств); + + КонецЦикла; + + Возврат ДанныеКонтрагентов; + +КонецФункции + Процедура СвернутьДанныеКонтрагентов(ДанныеКонтрагентов) // Удаляем из таблицы дубли @@ -2059,7 +2301,106 @@ КонецЕсли; КонецПроцедуры + +// Процедура - В таблице ДанныеКонтрагентов оставляет только записи по контрагентам, +// к которым есть доступ. В модели сервиса из неразделенной области проверку делать +// не нужно, поскольку регламентное задание выполняется под администратором +// и нет доступа к разделенному справочнику контрагентов. +// +Процедура ОставитьРазрешенныхКонтрагентов(ДанныеКонтрагентов) + Если ОбщегоНазначенияПовтИсп.РазделениеВключено() + И ОбщегоНазначенияПовтИсп.ДоступноИспользованиеРазделенныхДанных() + ИЛИ НЕ ОбщегоНазначенияПовтИсп.РазделениеВключено() Тогда + + СоответствиеДляДополнительныхПараметров = Новый Соответствие; + Для Каждого ДанныеКонтрагента Из ДанныеКонтрагентов Цикл + СоответствиеДляДополнительныхПараметров.Вставить(ДанныеКонтрагента.Контрагент, ДанныеКонтрагента.ДополнительныеПараметры); + КонецЦикла; + + Запрос = Новый Запрос; + Запрос.Текст = + "ВЫБРАТЬ РАЗРЕШЕННЫЕ + | ДанныеКонтрагентов.Контрагент, + | ДанныеКонтрагентов.ИНН, + | ДанныеКонтрагентов.КПП, + | ДанныеКонтрагентов.Дата, + | ДанныеКонтрагентов.ОбластьДанныхВспомогательныеДанные, + | ДанныеКонтрагентов.Состояние + |ПОМЕСТИТЬ ВсеДанныеКонтрагентов + |ИЗ + | &ДанныеКонтрагентов КАК ДанныеКонтрагентов + |; + | + |//////////////////////////////////////////////////////////////////////////////// + |ВЫБРАТЬ РАЗРЕШЕННЫЕ РАЗЛИЧНЫЕ + | ВсеДанныеКонтрагентов.Контрагент КАК Контрагент + |ПОМЕСТИТЬ ВсеКонтрагенты + |ИЗ + | Справочник.%1 КАК СправочникКонтрагентов + | ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВсеДанныеКонтрагентов КАК ВсеДанныеКонтрагентов + | ПО СправочникКонтрагентов.Ссылка = ВсеДанныеКонтрагентов.Контрагент + |; + | + |//////////////////////////////////////////////////////////////////////////////// + |ВЫБРАТЬ РАЗРЕШЕННЫЕ + | ВсеДанныеКонтрагентов.Контрагент, + | ВсеДанныеКонтрагентов.ИНН, + | ВсеДанныеКонтрагентов.КПП, + | ВсеДанныеКонтрагентов.Дата, + | ВсеДанныеКонтрагентов.ОбластьДанныхВспомогательныеДанные, + | ВсеДанныеКонтрагентов.Состояние + |ИЗ + | ВсеДанныеКонтрагентов КАК ВсеДанныеКонтрагентов + | ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВсеКонтрагенты КАК ВсеКонтрагенты + | ПО (ВсеКонтрагенты.Контрагент = ВсеДанныеКонтрагентов.Контрагент) + | + |ОБЪЕДИНИТЬ ВСЕ + | + |ВЫБРАТЬ + | ВсеДанныеКонтрагентов.Контрагент, + | ВсеДанныеКонтрагентов.ИНН, + | ВсеДанныеКонтрагентов.КПП, + | ВсеДанныеКонтрагентов.Дата, + | ВсеДанныеКонтрагентов.ОбластьДанныхВспомогательныеДанные, + | ВсеДанныеКонтрагентов.Состояние + |ИЗ + | ВсеДанныеКонтрагентов КАК ВсеДанныеКонтрагентов + |ГДЕ + | ВсеДанныеКонтрагентов.Контрагент = ЗНАЧЕНИЕ(Справочник.%1.ПустаяСсылка)"; + + Если НЕ ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаВМоделиСервиса") Тогда + + Запрос.Текст = СтрЗаменить( + Запрос.Текст, + "ВсеДанныеКонтрагентов.ОбластьДанныхВспомогательныеДанные,", + ""); + + Запрос.Текст = СтрЗаменить( + Запрос.Текст, + "ДанныеКонтрагентов.ОбластьДанныхВспомогательныеДанные,", + ""); + + КонецЕсли; + + СвойстваСправочника = ПроверкаКонтрагентовКлиентСервер.СвойстваСправочникаКонтрагенты(); + Запрос.Текст = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(Запрос.Текст, СвойстваСправочника.Имя); + + Запрос.УстановитьПараметр("ДанныеКонтрагентов", ДанныеКонтрагентов); + ДанныеКонтрагентов = Запрос.Выполнить().Выгрузить(); + + ДанныеКонтрагентов.Колонки.Добавить("ДополнительныеПараметры", Новый ОписаниеТипов("Структура")); + Для Каждого ДанныеКонтрагента Из ДанныеКонтрагентов Цикл + ДополнительныеПараметры = СоответствиеДляДополнительныхПараметров.Получить(ДанныеКонтрагента.Контрагент); + Если ДополнительныеПараметры <> Неопределено Тогда + ДанныеКонтрагента.ДополнительныеПараметры = ДополнительныеПараметры; + КонецЕсли; + КонецЦикла; + + КонецЕсли; + +КонецПроцедуры + // Проверка ошибок по одному контрагенту. Процедура ПодготовитьДанныеКПроверкеПоКаждомуКонтрагенту(ДанныеКонтрагента) @@ -2072,8 +2413,8 @@ ИЛИ НЕ ОбщегоНазначенияПовтИсп.РазделениеВключено() Тогда // Проверяем только российских контрагентов. - Если ЭтоИностранныйКонтрагент(ДанныеКонтрагента.Контрагент)Тогда - ДанныеКонтрагента.Состояние = Перечисления.СостоянияСуществованияКонтрагента.НеПодлежитПроверке; + Если ЭтоИностранныйКонтрагент(ДанныеКонтрагента)Тогда + ДанныеКонтрагента.Состояние = Перечисления.СостоянияСуществованияКонтрагента.КонтрагентНеПодлежитПроверке; Возврат; КонецЕсли; @@ -2084,16 +2425,29 @@ ДлинаКПП = СтрДлина(СокрЛП(ДанныеКонтрагента.КПП)); ЭтоЮридическоеЛицо = Ложь; - Если ДлинаИНН = 10 И ДлинаКПП = 9 Тогда - ЭтоЮридическоеЛицо = Истина; - ИначеЕсли ДлинаИНН = 12 И ДлинаКПП = 0 Тогда - ЭтоЮридическоеЛицо = Ложь; - ИначеЕсли ДлинаИНН = 0 ИЛИ ДлинаКПП = 0 Тогда - ДанныеКонтрагента.Состояние = Перечисления.СостоянияСуществованияКонтрагента.ПустойИННКПП; - Возврат; + СтандартнаяОбработка = Истина; + РаботаСКонтрагентамиПереопределяемый.ОпределитьЮрИлиФизЛицоКонтрагент(СтандартнаяОбработка, ЭтоЮридическоеЛицо, ДанныеКонтрагента); + + Если СтандартнаяОбработка Тогда + Если ДлинаИНН = 10 И ДлинаКПП = 9 Тогда + ЭтоЮридическоеЛицо = Истина; + ИначеЕсли ДлинаИНН = 12 И ДлинаКПП = 0 Тогда + ЭтоЮридическоеЛицо = Ложь; + ИначеЕсли ДлинаИНН = 0 ИЛИ ДлинаКПП = 0 Тогда + ДанныеКонтрагента.Состояние = Перечисления.СостоянияСуществованияКонтрагента.ПустойИННИлиКПП; + Возврат; + Иначе + ДанныеКонтрагента.Состояние = Перечисления.СостоянияСуществованияКонтрагента.КонтрагентСодержитОшибкиВДанных; + Возврат; + КонецЕсли; Иначе - ДанныеКонтрагента.Состояние = Перечисления.СостоянияСуществованияКонтрагента.СодержитОшибкиВДанных; - Возврат; + Если ДлинаИНН = 0 Тогда + ДанныеКонтрагента.Состояние = Перечисления.СостоянияСуществованияКонтрагента.ПустойИННИлиКПП; + Возврат; + ИначеЕсли ЭтоЮридическоеЛицо И ДлинаКПП = 0 Тогда + ДанныеКонтрагента.Состояние = Перечисления.СостоянияСуществованияКонтрагента.ПустойИННИлиКПП; + Возврат; + КонецЕсли; КонецЕсли; // Дата @@ -2101,7 +2455,7 @@ ДанныеКонтрагента.Дата = НачалоДня(ТекущаяДатаСеанса()); ИначеЕсли ТипЗнч(ДанныеКонтрагента.Дата) = Тип("Дата") И (ДанныеКонтрагента.Дата < Дата(1991, 1, 1) ИЛИ ДанныеКонтрагента.Дата > КонецДня(ТекущаяДатаСеанса())) Тогда - ДанныеКонтрагента.Состояние = Перечисления.СостоянияСуществованияКонтрагента.СодержитОшибкиВДанных; + ДанныеКонтрагента.Состояние = Перечисления.СостоянияСуществованияКонтрагента.КонтрагентСодержитОшибкиВДанных; Возврат; КонецЕсли; @@ -2109,8 +2463,8 @@ ДанныеКонтрагента.ИНН = СокрЛП(ДанныеКонтрагента.ИНН); ИНН = ДанныеКонтрагента.ИНН; ИННСоответствуетТребованиям = РегламентированныеДанныеКлиентСервер.ИННСоответствуетТребованиям(ИНН, ЭтоЮридическоеЛицо, Ошибка); - Если Лев(ИНН, 2) = "00" ИЛИ НЕ ИННСоответствуетТребованиям Тогда - ДанныеКонтрагента.Состояние = Перечисления.СостоянияСуществованияКонтрагента.СодержитОшибкиВДанных; + Если СтрНачинаетсяС(ИНН, "00") ИЛИ НЕ ИННСоответствуетТребованиям Тогда + ДанныеКонтрагента.Состояние = Перечисления.СостоянияСуществованияКонтрагента.КонтрагентСодержитОшибкиВДанных; Возврат; КонецЕсли; @@ -2120,17 +2474,17 @@ КПП = ДанныеКонтрагента.КПП; КППСоответствуетТребованиям = РегламентированныеДанныеКлиентСервер.КППСоответствуетТребованиям(КПП, Ошибка); Если НЕ КППСоответствуетТребованиям Тогда - ДанныеКонтрагента.Состояние = Перечисления.СостоянияСуществованияКонтрагента.СодержитОшибкиВДанных; + ДанныеКонтрагента.Состояние = Перечисления.СостоянияСуществованияКонтрагента.КонтрагентСодержитОшибкиВДанных; Возврат; КонецЕсли; КонецЕсли; КонецПроцедуры -Функция ЭтоИностранныйКонтрагент(КонтрагентСсылка) +Функция ЭтоИностранныйКонтрагент(ДанныеКонтрагента) ЯвляетсяИностранным = Ложь; - ПроверкаКонтрагентовПереопределяемый.ОпределитьЯвляетсяЛиКонтрагентИностранным(КонтрагентСсылка, ЯвляетсяИностранным); + РаботаСКонтрагентамиПереопределяемый.ОпределитьЯвляетсяЛиКонтрагентИностранным(ДанныеКонтрагента, ЯвляетсяИностранным); Возврат ЯвляетсяИностранным; КонецФункции @@ -2160,8 +2514,8 @@ | КОГДА &ПолучатьВсеСостоянияИзРегистра | ТОГДА СостоянияКонтрагентов.Состояние | ИНАЧЕ ВЫБОР - | КОГДА СостоянияКонтрагентов.Состояние = ЗНАЧЕНИЕ(Перечисление.СостоянияСуществованияКонтрагента.СодержитОшибкиВДанных) - | ТОГДА ЗНАЧЕНИЕ(Перечисление.СостоянияСуществованияКонтрагента.СодержитОшибкиВДанных) + | КОГДА СостоянияКонтрагентов.Состояние = ЗНАЧЕНИЕ(Перечисление.СостоянияСуществованияКонтрагента.КонтрагентСодержитОшибкиВДанных) + | ТОГДА ЗНАЧЕНИЕ(Перечисление.СостоянияСуществованияКонтрагента.КонтрагентСодержитОшибкиВДанных) | ИНАЧЕ ЗНАЧЕНИЕ(Перечисление.СостоянияСуществованияКонтрагента.ПустаяСсылка) | КОНЕЦ | КОНЕЦ КАК Состояние @@ -2192,6 +2546,8 @@ Запрос.УстановитьПараметр("ДанныеКонтрагентов", ДанныеКонтрагентов); ДанныеКонтрагентов = Запрос.Выполнить().Выгрузить(); + ДанныеКонтрагентов.Колонки.Добавить("ДополнительныеПараметры", Новый ОписаниеТипов("Структура")); + КонецПроцедуры Функция ДатаСтрокой(Дата) @@ -2211,15 +2567,15 @@ Функция СостояниеНаОсновеОтветаСервиса(ДанныеКонтрагента, Ответ) Если Ответ = "0" Тогда - Состояние = Перечисления.СостоянияСуществованияКонтрагента.Действует; + Состояние = Перечисления.СостоянияСуществованияКонтрагента.КонтрагентЕстьВБазеФНС; ИначеЕсли Ответ = "1" Тогда - Состояние = Перечисления.СостоянияСуществованияКонтрагента.ПрекратилДеятельность; + Состояние = Перечисления.СостоянияСуществованияКонтрагента.НеДействуетИлиИзмененКПП; ИначеЕсли Ответ = "3" Тогда - Состояние = Перечисления.СостоянияСуществованияКонтрагента.КППНеСоответствуетИНН; + Состояние = Перечисления.СостоянияСуществованияКонтрагента.КППНеСоответствуетДаннымБазыФНС; ИначеЕсли Ответ = "4" Тогда - Состояние = Перечисления.СостоянияСуществованияКонтрагента.ОтсутствуетВРеестре; + Состояние = Перечисления.СостоянияСуществованияКонтрагента.КонтрагентОтсутствуетВБазеФНС; Иначе - Состояние = Перечисления.СостоянияСуществованияКонтрагента.СодержитОшибкиВДанных; + Состояние = Перечисления.СостоянияСуществованияКонтрагента.КонтрагентСодержитОшибкиВДанных; КонецЕсли; Возврат Состояние; @@ -2228,23 +2584,23 @@ Процедура ПроверитьНепроверенныхКонтрагентов(ЭтоОбновлениеИБВМоделиСервиса, Параметры = Неопределено) - // Выбираем контрагентов, которых нет в регистре сведений и у которых заполнен ИНН. + // Выбираем контрагентов, которых нет в регистре сведений. + Запрос = Новый Запрос; Текст = - "ВЫБРАТЬ РАЗРЕШЕННЫЕ + "ВЫБРАТЬ %5 | Контрагенты.Ссылка КАК Контрагент, - | Контрагенты.%ИНН КАК ИНН, - | Контрагенты.%КПП КАК КПП, + | Контрагенты.%1 КАК ИНН, + | Контрагенты.%2 КАК КПП, | &ОбластьДанныхВспомогательныеДанные КАК ОбластьДанныхВспомогательныеДанные, | &Дата КАК Дата |ИЗ - | Справочник.%Имя КАК Контрагенты + | Справочник.%3 КАК Контрагенты | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.СостоянияКонтрагентов КАК СостоянияКонтрагентов | ПО Контрагенты.Ссылка = СостоянияКонтрагентов.Контрагент |ГДЕ | (СостоянияКонтрагентов.Состояние ЕСТЬ NULL | ИЛИ СостоянияКонтрагентов.Состояние = ЗНАЧЕНИЕ(Перечисление.СостоянияСуществованияКонтрагента.ПустаяСсылка)) - | И Контрагенты.ИНН <> """" - | %Условие"; + | %4"; Если НЕ ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаВМоделиСервиса") Тогда @@ -2254,26 +2610,29 @@ ""); КонецЕсли; - + СвойстваСправочника = ПроверкаКонтрагентовКлиентСервер.СвойстваСправочникаКонтрагенты(); - Текст = СтрЗаменить(Текст, "%ИНН", СвойстваСправочника.ИНН); - Текст = СтрЗаменить(Текст, "%КПП", СвойстваСправочника.КПП); - Текст = СтрЗаменить(Текст, "%Имя", СвойстваСправочника.Имя); + УсловиеНаГруппу = ""; Если СправочникКонтрагентовИерархический() Тогда - Текст = СтрЗаменить(Текст, "%Условие", "И Контрагенты.ЭтоГруппа = ЛОЖЬ"); - Иначе - Текст = СтрЗаменить(Текст, "%Условие", ""); + УсловиеНаГруппу = "И Контрагенты.ЭтоГруппа = ЛОЖЬ"; КонецЕсли; - Запрос = Новый Запрос; - Запрос.Текст = Текст; - + ОграничениеНаПрава = ""; Если ЭтоОбновлениеИБВМоделиСервиса Тогда РазмерПорции = 1000; - Запрос.Текст = СтрЗаменить(Запрос.Текст, "РАЗЛИЧНЫЕ", "РАЗЛИЧНЫЕ ПЕРВЫЕ "+ Формат(РазмерПорции, "ЧГ=0")); + ОграничениеНаПрава = "РАЗЛИЧНЫЕ ПЕРВЫЕ " + Формат(РазмерПорции, "ЧГ=0"); + Иначе + ОграничениеНаПрава = "РАЗЛИЧНЫЕ"; КонецЕсли; - + + Запрос.Текст = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(Текст, + СвойстваСправочника.ИНН, + СвойстваСправочника.КПП, + СвойстваСправочника.Имя, + УсловиеНаГруппу, + ОграничениеНаПрава); + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаВМоделиСервиса") Тогда Запрос.УстановитьПараметр("ОбластьДанныхВспомогательныеДанные", ОбщегоНазначения.ЗначениеРазделителяСеанса()); КонецЕсли; @@ -2301,14 +2660,14 @@ ПроверяемыеКонтрагенты.Колонки.Удалить("Состояние"); КонецЕсли; - ПоместитьТаблицуЗначенийВоВременнуюТаблицу(ПроверяемыеКонтрагенты, Запрос, "ПроверяемыеКонтрагенты"); - ПоместитьТаблицуЗначенийВоВременнуюТаблицу(ДанныеКонтрагентов, Запрос, "ДанныеКонтрагентов"); + ПоместитьТаблицуЗначенийВоВременнуюТаблицу(ПроверяемыеКонтрагенты, Запрос, "ПроверяемыеКонтрагенты", ,"ДополнительныеПараметры"); + ПоместитьТаблицуЗначенийВоВременнуюТаблицу(ДанныеКонтрагентов, Запрос, "ДанныеКонтрагентов", ,"ДополнительныеПараметры"); // По всем контрагентам определяем состояние. // В таблице оставляем только контрагентов с ошибками. Запрос.Текст = Запрос.Текст + " |ВЫБРАТЬ РАЗЛИЧНЫЕ - | " + ПредставлениеКолонок(ПроверяемыеКонтрагенты, "ПроверяемыеКонтрагенты.") + ", + | " + ПредставлениеКолонок(ПроверяемыеКонтрагенты, "ПроверяемыеКонтрагенты.",, "ДополнительныеПараметры") + ", | ДанныеКонтрагентов.Состояние КАК Состояние |ИЗ | ПроверяемыеКонтрагенты КАК ПроверяемыеКонтрагенты @@ -2329,12 +2688,13 @@ КонецЕсли; ПроверяемыеКонтрагенты = Запрос.Выполнить().Выгрузить(); + ПроверяемыеКонтрагенты.Колонки.Добавить("ДополнительныеПараметры", Новый ОписаниеТипов("Структура")); КонецПроцедуры -Процедура ПоместитьТаблицуЗначенийВоВременнуюТаблицу(Таблица, Запрос, ИмяВременнойТаблицы, ПостфиксСинонима = "") +Процедура ПоместитьТаблицуЗначенийВоВременнуюТаблицу(Таблица, Запрос, ИмяВременнойТаблицы, ПостфиксСинонима = "", ИсключаяКолонки = "") - ПредставлениеКолонок = ПредставлениеКолонок(Таблица); + ПредставлениеКолонок = ПредставлениеКолонок(Таблица, , , ИсключаяКолонки); Запрос.Текст = Запрос.Текст + " |ВЫБРАТЬ @@ -2347,19 +2707,25 @@ КонецПроцедуры -Функция ПредставлениеКолонок(Таблица, СинонимТаблицы = "", ПостфиксСинонима = "") +Функция ПредставлениеКолонок(Таблица, СинонимТаблицы = "", ПостфиксСинонима = "", ИсключаяКолонки = "") + + МассивКолонокКИсключению = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(ИсключаяКолонки, ",", Истина, Истина); КолонкиИсходнойТаблицы = Новый Массив; Для Каждого Колонка Из Таблица.Колонки Цикл - ИмяПоля = СинонимТаблицы + Колонка.Имя; + Если МассивКолонокКИсключению.Найти(Колонка.Имя) <> Неопределено Тогда + Продолжить; + КонецЕсли; + + ИмяПоля = СинонимТаблицы + Колонка.Имя; СинонимПоля = Колонка.Имя + ПостфиксСинонима; КолонкиИсходнойТаблицы.Добавить(ИмяПоля + " КАК " + СинонимПоля); КонецЦикла; - ПредставлениеКолонок = СтроковыеФункцииКлиентСервер.СтрокаИзМассиваПодстрок(КолонкиИсходнойТаблицы, "," + Символы.ПС); + ПредставлениеКолонок = СтрСоединить(КолонкиИсходнойТаблицы, "," + Символы.ПС); Возврат ПредставлениеКолонок; КонецФункции @@ -2377,7 +2743,8 @@ ПутьКДанным = Элемент.ПутьКДанным; // Из пути к данным получаем имя реквизита. - МассивПодстрок = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(ПутьКДанным, "."); + МассивПодстрок = СтрРазделить(ПутьКДанным, ".", Ложь); + КоличествоПодстрок = МассивПодстрок.Количество(); ИмяРеквизита = МассивПодстрок[КоличествоПодстрок - 1]; @@ -2460,8 +2827,8 @@ // Предложение включить сервис не показывалось вообще, // либо с момента последнего отображения предупреждения уже прошло 4 часа. - ПредложениеПоказывалосьДавно = ДатаПоследнегоОтображенияПредложенияНаВключениеСервиса = Неопределено ИЛИ - ДатаПоследнегоОтображенияПредложенияНаВключениеСервиса + ЧетыреЧаса < ТекущаяДатаСеанса(); + ПредложениеПоказывалосьДавно = ДатаПоследнегоОтображенияПредложенияНаВключениеСервиса = Неопределено + ИЛИ ДатаПоследнегоОтображенияПредложенияНаВключениеСервиса + ЧетыреЧаса < ТекущаяДатаСеанса(); Возврат ПредложениеПоказывалосьДавно; @@ -2477,14 +2844,14 @@ Возврат КоличествоКонтрагентовСПустымСостоянием <> 0; КонецФункции - + #КонецОбласти #Область ШаблоныИЗаполнениеТаблиц // Функция - Шаблон таблицы, используемой для передачи данных в веб-сервис ФНС. // Возвращаемое значение: -// ТаблицаЗначений - пустая таблица с колонками "Контрагент", "ИНН", "КПП", "Дата", "Состояние", +// ТаблицаЗначений - пустая таблица с колонками "Контрагент", "ИНН", "КПП", "Дата", "Состояние", "ДополнительныеПараметры" // "ОбластьДанныхВспомогательныеДанные"(если есть подсистема РаботаВМоделиСервиса). Функция ШаблонТаблицыДанныеКонтрагента() @@ -2504,6 +2871,8 @@ ДанныеКонтрагентов.Колонки.Добавить("Дата", Новый ОписаниеТипов("Дата",,,Новый КвалификаторыДаты(ЧастиДаты.Дата))); // Результат проверки контрагента. ДанныеКонтрагентов.Колонки.Добавить("Состояние", Новый ОписаниеТипов("ПеречислениеСсылка.СостоянияСуществованияКонтрагента")); + // Результат проверки контрагента. + ДанныеКонтрагентов.Колонки.Добавить("ДополнительныеПараметры", Новый ОписаниеТипов("Структура")); // Область данных ДобавитьКолонкуОбластьДанных(ДанныеКонтрагентов); @@ -2522,41 +2891,47 @@ КонецФункции -// Процедура - Заполнение данных контрагента в документе. -// -// Параметры: -// Ссылка - ДокументСсылка - Документ, в котором выполняется проверка контрагентов. -// ДанныеКонтрагентов - ТаблицаЗначений - Содержит данные проверяемых контрагентов. -// Структуру колонок таблицы см в функции ШаблонТаблицыДанныеКонтрагента. -// Контрагент - СправочникСсылка.<Контрагенты> - Контрагент, данными которого дополняются данные таблицы -// ДанныеКонтрагентов. -// Дата - Дата - Дата, на которую выполняется проверка контрагента. -// Состояние - Перечисления.СостоянияСуществованияКонтрагента - Результат проверки контрагента. -Процедура ДополнитьДанныеКонтрагентовВДокументе( - Ссылка, - ДанныеКонтрагентов, - Контрагент, - Дата, - Состояние = Неопределено) - - // Добавляем новую строку в таблицу, только если такой строки еще нет. - Отбор = Новый Структура("Ссылка, Контрагент, Дата", Ссылка, Контрагент, Дата); - НайденныеСтроки = ДанныеКонтрагентов.НайтиСтроки(Отбор); +Процедура ДобавитьСтрокуВДанныеКонтрагентовВДокументе( + Ссылка, + ДанныеКонтрагентов, + Контрагент, + Дата, + Состояние = Неопределено) - Если НайденныеСтроки.Количество() = 0 Тогда + // Добавляем в таблицу только разрешенных контрагентов + Запрос = Новый Запрос; + Запрос.Текст = + "ВЫБРАТЬ РАЗРЕШЕННЫЕ + | Контрагенты.Ссылка КАК Контрагент, + | Контрагенты.%1 КАК ИНН, + | Контрагенты.%2 КАК КПП + |ИЗ + | Справочник.%3 КАК Контрагенты + |ГДЕ Контрагенты.Ссылка = &Контрагент"; + СвойстваСправочника = ПроверкаКонтрагентовКлиентСервер.СвойстваСправочникаКонтрагенты(); + Запрос.Текст = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + Запрос.Текст, + СвойстваСправочника.ИНН, + СвойстваСправочника.КПП, + СвойстваСправочника.Имя); + + Запрос.УстановитьПараметр("Контрагент", Контрагент); + + ДанныеКонтрагента = Запрос.Выполнить().Выбрать(); + + Пока ДанныеКонтрагента.Следующий() Цикл + СтрокаОписания = ДанныеКонтрагентов.Добавить(); СтрокаОписания.Ссылка = Ссылка; СтрокаОписания.Контрагент = Контрагент; СтрокаОписания.Дата = Дата; СтрокаОписания.Состояние = Состояние; - // Заполнение ИНН и КПП - СвойстваСправочника = ПроверкаКонтрагентовКлиентСервер.СвойстваСправочникаКонтрагенты(); - РеквизитыКонтрагента = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(Контрагент, СвойстваСправочника.ИНН + "," + СвойстваСправочника.КПП); - ЗаполнитьЗначенияСвойств(СтрокаОписания, РеквизитыКонтрагента); + СтрокаОписания.ИНН = ДанныеКонтрагента.ИНН; + СтрокаОписания.КПП = ДанныеКонтрагента.КПП; - КонецЕсли; + КонецЦикла; КонецПроцедуры @@ -2583,61 +2958,6 @@ КонецФункции -Функция ОписаниеДокументов(Форма) - - ОбщееОписание = ШаблонТаблицыОписания(); - - Если ПроверкаКонтрагентовКлиентСервер.ЭтоДокументСКонтрагентомВШапке(Форма) Тогда - - Описание = ШаблонТаблицыОписания(); - ПроверкаКонтрагентовПереопределяемый.СформироватьОписаниеДокументовСКонтрагентомВШапке(Форма, Описание); - - // Дополняем описание состоянием. - Для Каждого СтрокаОписания Из Описание Цикл - СтрокаОписания.СостояниеКонтрагента = Форма.РеквизитыПроверкиКонтрагентов.СостояниеКонтрагента; - КонецЦикла; - - ПрисоединитьОписание(ОбщееОписание, Описание); - - КонецЕсли; - - Если ПроверкаКонтрагентовКлиентСервер.ЭтоДокументСоСчетомФактуройВПодвале(Форма) Тогда - - Описание = ШаблонТаблицыОписания(); - ПроверкаКонтрагентовПереопределяемый.СформироватьОписаниеДокументовСоСчетомФактуройВПодвале(Форма, Описание); - - // Дополняем описание состоянием. - Для Каждого СтрокаОписания Из Описание Цикл - СтрокаОписания.СостояниеКонтрагента = Форма.РеквизитыПроверкиКонтрагентов.СостояниеКонтрагентовВСчетеФактуре; - КонецЦикла; - - ПрисоединитьОписание(ОбщееОписание, Описание); - - КонецЕсли; - - Если ПроверкаКонтрагентовКлиентСервер.ЭтоСчетФактура(Форма) Тогда - - Описание = ШаблонТаблицыОписания(); - ПроверкаКонтрагентовПереопределяемый.СформироватьОписаниеСчетовФактур(Форма, Описание); - - // Дополняем описание состоянием. - Если Форма.РеквизитыПроверкиКонтрагентов <> Неопределено Тогда - Для Каждого СтрокаОписания Из Описание Цикл - - ИмяРеквизитаСчетаФактуры = ИмяРеквизита(Форма, СтрокаОписания.Элемент.Имя); - СтрокаОписания.СостояниеКонтрагента = Форма.РеквизитыПроверкиКонтрагентов[ИмяРеквизитаСостоянияКонтрагентаВСчетеФактуре(ИмяРеквизитаСчетаФактуры)]; - - КонецЦикла; - КонецЕсли; - - ПрисоединитьОписание(ОбщееОписание, Описание); - - КонецЕсли; - - Возврат ОбщееОписание; - -КонецФункции - Функция ШаблонТаблицыОписанияТабличныхЧастей() Описание = Новый ТаблицаЗначений(); @@ -2690,7 +3010,7 @@ Функция ОписаниеКонтрагентовВСчетеФактуре(Тип) ИменаРеквизитовКонтрагентов = Новый Массив; - ПроверкаКонтрагентовПереопределяемый.ПолучитьИменаРеквизитовКонтрагентовВСчетеФактуре(Тип, ИменаРеквизитовКонтрагентов); + РаботаСКонтрагентамиПереопределяемый.ПолучитьИменаРеквизитовКонтрагентовВСчетеФактуре(Тип, ИменаРеквизитовКонтрагентов); Описание = ШаблонТаблицыОписанияКонтрагентовВСчетеФактуре(); @@ -2715,7 +3035,7 @@ Функция ОписаниеТабличныхЧастей(Форма) Экспорт ОписаниеТабличныхЧастей = ШаблонТаблицыОписанияТабличныхЧастей(); - ПроверкаКонтрагентовПереопределяемый.СформироватьОписаниеДокументовСТабличнымиЧастями(Форма, ОписаниеТабличныхЧастей); + РаботаСКонтрагентамиПереопределяемый.СформироватьОписаниеДокументовСТабличнымиЧастями(Форма, ОписаниеТабличныхЧастей); Возврат ОписаниеТабличныхЧастей; @@ -2736,7 +3056,7 @@ Процедура УстановитьУсловноеОформлениеСпискаДокументов(Список) СтандартнаяОбработка = Истина; - ПроверкаКонтрагентовПереопределяемый.УстановитьУсловноеОформлениеСпискаДокументов(Список, СтандартнаяОбработка); + РаботаСКонтрагентамиПереопределяемый.УстановитьУсловноеОформлениеСпискаДокументов(Список, СтандартнаяОбработка); // Если действия переопределили, то стандартную обработку не выполняем. Если НЕ СтандартнаяОбработка Тогда @@ -2792,8 +3112,8 @@ Если ПроверкаКонтрагентовКлиентСервер.ЭтоСчетФактура(Форма) Тогда // Определение объекта и ссылки. - ОбъектИСсылкаПоФорме = ПроверкаКонтрагентовКлиентСервер.ОбъектИСсылкаПоФорме(Форма); - ДокументОбъект = ОбъектИСсылкаПоФорме.Объект; + ОбъектИСсылкаПоФорме = ПроверкаКонтрагентовКлиентСервер.ОбъектИСсылкаПоФорме(Форма); + ДокументОбъект = ОбъектИСсылкаПоФорме.Объект; ЗаполнитьДанныеКонтрагентовВСчетеФактуре(ДокументОбъект, ДанныеКонтрагентов); Иначе @@ -2813,11 +3133,11 @@ КонецЕсли; - // Заполняем данные по контрагентам из табличных частей. - Если ПроверкаКонтрагентовКлиентСервер.ЭтоДокументСКонтрагентомВТабличнойЧасти(Форма) Тогда - ЗаполнитьДанныеКонтрагентовВТабличнойЧасти(Форма, ДанныеКонтрагентов); - КонецЕсли; - + КонецЕсли; + + // Заполняем данные по контрагентам из табличных частей. + Если ПроверкаКонтрагентовКлиентСервер.ЭтоДокументСКонтрагентомВТабличнойЧасти(Форма) Тогда + ЗаполнитьДанныеКонтрагентовВТабличнойЧасти(Форма, ДанныеКонтрагентов); КонецЕсли; КонецЕсли; @@ -2854,11 +3174,16 @@ // Если есть счет-фактура на форме. Если ПроверкаКонтрагентовКлиентСервер.ЭтоДокументСоСчетомФактуройВПодвале(Форма) Тогда - СчетФактура = ПроверкаКонтрагентовКлиентСервер.СчетФактура(Форма); + СтандартнаяОбработка = Истина; + РаботаСКонтрагентамиПереопределяемый.ЗапомнитьРезультатПроверкиКонтрагентовСчетФактурыВДокументе(СтандартнаяОбработка, ДанныеКонтрагентов, Форма); - Отбор = Новый Структура("Ссылка", СчетФактура); - ИтоговоеСостояние = ИтоговоеСостояниеКонтрагентаВДокументе(ДанныеКонтрагентов, Отбор); - Форма.РеквизитыПроверкиКонтрагентов.СостояниеКонтрагентовВСчетеФактуре = ИтоговоеСостояние.СостояниеКонтрагента; + Если СтандартнаяОбработка Тогда + СчетФактура = ПроверкаКонтрагентовКлиентСервер.СчетФактура(Форма); + + Отбор = Новый Структура("Ссылка", СчетФактура); + ИтоговоеСостояние = ИтоговоеСостояниеКонтрагентаВДокументе(ДанныеКонтрагентов, Отбор); + Форма.РеквизитыПроверкиКонтрагентов.СостояниеКонтрагентовВСчетеФактуре = ИтоговоеСостояние.СостояниеКонтрагента; + КонецЕсли; КонецЕсли; @@ -2899,7 +3224,7 @@ // В результате проверки контрагента ищем нужного контрагента с нужной датой. СтрокиДанныхКонтрагентов = ДанныеКонтрагентов.НайтиСтроки( - Новый Структура("Ссылка, Контрагент, Дата", ДокументСсылка, Контрагент, Дата)); + Новый Структура("Контрагент, Дата", Контрагент, Дата)); Для каждого СтрокиДанныхКонтрагента Из СтрокиДанныхКонтрагентов Цикл СтрокаТабличнойЧасти.Состояние = СтрокиДанныхКонтрагента.Состояние; @@ -2942,9 +3267,18 @@ КонецЕсли; Если ЭтоСчетФактура Тогда - Если ЗначениеЗаполнено(Форма.РеквизитыПроверкиКонтрагентов.СостояниеКонтрагентов) Тогда - СохраняемоеЗначение.Вставить(ДокументСсылка, Форма.РеквизитыПроверкиКонтрагентов.ЭтоСчетФактураСОшибкой); + + СтандартнаяОбработка = Истина; + + РаботаСКонтрагентамиПереопределяемый.СохраняемыеРезультатыПроверкиСчетФактурыВДокументе(СтандартнаяОбработка, СохраняемоеЗначение, Форма); + + Если СтандартнаяОбработка Тогда + СчетФактура = ПроверкаКонтрагентовКлиентСервер.СчетФактура(Форма); + Если ЗначениеЗаполнено(СчетФактура) И ЗначениеЗаполнено(Форма.РеквизитыПроверкиКонтрагентов.СостояниеКонтрагентовВСчетеФактуре) Тогда + СохраняемоеЗначение.Вставить(СчетФактура, Форма.РеквизитыПроверкиКонтрагентов.ЭтоСчетФактураСОшибкой); + КонецЕсли; КонецЕсли; + КонецЕсли; Возврат СохраняемоеЗначение; @@ -3153,7 +3487,7 @@ Функция ДатаВДокументе(ДокументОбъект) Дата = Дата(1,1,1); - ПроверкаКонтрагентовПереопределяемый.ОпределитьДатуВДокументе(ДокументОбъект, Дата); + РаботаСКонтрагентамиПереопределяемый.ОпределитьДатуВДокументе(ДокументОбъект, Дата); Возврат НачалоДня(Дата); @@ -3312,7 +3646,7 @@ Процедура ПрорисоватьСостоянияКонтрагентовВДокументе(Форма, СостояниеПроверки, ДополнительныеПараметры = Неопределено) СтандартнаяОбработка = Истина; - ПроверкаКонтрагентовПереопределяемый.ПрорисоватьСостоянияКонтрагентовВДокументе(Форма, СостояниеПроверки, + РаботаСКонтрагентамиПереопределяемый.ПрорисоватьСостоянияКонтрагентовВДокументе(Форма, СостояниеПроверки, ДополнительныеПараметры, СтандартнаяОбработка); // Если действия по отображению результата проверки переопределили, то стандартную обработку не выполняем. @@ -3366,11 +3700,34 @@ ПараметрыПрорисовки.Вставить("КонтрагентЗаполнен", КонтрагентЗаполнен); ПараметрыПрорисовки.Вставить("КонтрагентовНесколько", КонтрагентовНесколько); - ПроверкаКонтрагентовКлиентСервер.УстановитьТекстПодсказкиВДокументе(ПараметрыПрорисовки, СостояниеПроверки); КонецЕсли; КонецЦикла; + + КонецЕсли; + + Если ЭтоДокументСКонтрагентомВТабличнойЧасти Тогда + + // Скрываем колонку с картинкой в табличной части, если проверка не используется. + Если НЕ Форма.РеквизитыПроверкиКонтрагентов.ПроверкаИспользуется Тогда + + ОписаниеТабличныхЧастей = ОписаниеТабличныхЧастей(Форма); + Для каждого ОписаниеТабличнойЧасти Из ОписаниеТабличныхЧастей Цикл + + Элементы = Форма.Элементы; + ТаблицаФормы = Элементы[ОписаниеТабличнойЧасти.ИмяТаблицыФормы]; + + ПолеКартинки = Элементы.Найти(ПроверкаКонтрагентовКлиентСервер.ИмяПоляКартинки(ТаблицаФормы)); + Если ПолеКартинки <> Неопределено Тогда + + ПолеКартинки.Видимость = Ложь; + + КонецЕсли; + + КонецЦикла; + + КонецЕсли; КонецЕсли; @@ -3445,14 +3802,14 @@ Запрос = Новый Запрос; - ПоместитьТаблицуЗначенийВоВременнуюТаблицу(ДанныеКонтрагентовИзКэша, Запрос, "ДанныеКонтрагентовИзКэша", "ИзКэша"); - ПоместитьТаблицуЗначенийВоВременнуюТаблицу(ДанныеКонтрагентов, Запрос, "ДанныеКонтрагентов"); + ПоместитьТаблицуЗначенийВоВременнуюТаблицу(ДанныеКонтрагентовИзКэша, Запрос, "ДанныеКонтрагентовИзКэша", "ИзКэша", "ДополнительныеПараметры"); + ПоместитьТаблицуЗначенийВоВременнуюТаблицу(ДанныеКонтрагентов, Запрос, "ДанныеКонтрагентов", , "ДополнительныеПараметры"); // В таблице оставляем строки с различающимся состоянием Запрос.Текст = Запрос.Текст + " |ВЫБРАТЬ - | " + ПредставлениеКолонок(ДанныеКонтрагентовИзКэша, "ДанныеКонтрагентовИзКэша.", "ИзКэша") + ", - | " + ПредставлениеКолонок(ДанныеКонтрагентов, "ДанныеКонтрагентов.") + " + | " + ПредставлениеКолонок(ДанныеКонтрагентовИзКэша, "ДанныеКонтрагентовИзКэша.", "ИзКэша", "ДополнительныеПараметры") + ", + | " + ПредставлениеКолонок(ДанныеКонтрагентов, "ДанныеКонтрагентов.",, "ДополнительныеПараметры") + " |ИЗ | ДанныеКонтрагентовИзКэша КАК ДанныеКонтрагентовИзКэша | ПОЛНОЕ СОЕДИНЕНИЕ ДанныеКонтрагентов КАК ДанныеКонтрагентов @@ -3461,8 +3818,8 @@ | И ДанныеКонтрагентовИзКэша.КПП = ДанныеКонтрагентов.КПП | И ДанныеКонтрагентовИзКэша.Ссылка = ДанныеКонтрагентов.Ссылка | И (НАЧАЛОПЕРИОДА(ДанныеКонтрагентовИзКэша.Дата, ДЕНЬ) = НАЧАЛОПЕРИОДА(ДанныеКонтрагентов.Дата, ДЕНЬ)) - |ГДЕ - | ЕСТЬNULL(ДанныеКонтрагентов.Состояние,Неопределено) <> ЕСТЬNULL(ДанныеКонтрагентовИзКэша.Состояние,Неопределено)"; + |ГДЕ + | ЕСТЬNULL(ДанныеКонтрагентов.Состояние,Неопределено) <> ЕСТЬNULL(ДанныеКонтрагентовИзКэша.Состояние,Неопределено)"; Возврат Запрос.Выполнить(); @@ -3485,7 +3842,7 @@ Процедура УстановитьУсловноеОформлениеТабличнойЧастиДокумента(Форма) СтандартнаяОбработка = Истина; - ПроверкаКонтрагентовПереопределяемый.УстановитьУсловноеОформлениеТабличнойЧастиДокумента(Форма, СтандартнаяОбработка); + РаботаСКонтрагентамиПереопределяемый.УстановитьУсловноеОформлениеТабличнойЧастиДокумента(Форма, СтандартнаяОбработка); // Если действия переопределили, то стандартную обработку не выполняем. Если НЕ СтандартнаяОбработка Тогда @@ -3509,24 +3866,25 @@ КонецЕсли; // Условное оформление - Оформление = Форма.УсловноеОформление.Элементы.Добавить(); - Отбор = Оформление.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); - Отбор.ВидСравнения = ВидСравненияКомпоновкиДанных.ВСписке; + Оформление = Форма.УсловноеОформление.Элементы.Добавить(); + Отбор = Оформление.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); + Отбор.ВидСравнения = ВидСравненияКомпоновкиДанных.ВСписке; Отбор.Использование = Истина; ПутьКСостоянию = "Объект.%1.Состояние"; - ПутьКСостоянию = СтрЗаменить(ПутьКСостоянию, "%1", ИмяТабличнойЧасти); + ПутьКСостоянию = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ПутьКСостоянию, ИмяТабличнойЧасти); - Отбор.ЛевоеЗначение = Новый ПолеКомпоновкиДанных(ПутьКСостоянию); - Отбор.ПравоеЗначение = СписокСостоянийНедействующегоКонтрагента; + Отбор.ЛевоеЗначение = Новый ПолеКомпоновкиДанных(ПутьКСостоянию); + Отбор.ПравоеЗначение = СписокСостоянийНедействующегоКонтрагента; - ЦветФона = Оформление.Оформление.Элементы.Найти("ЦветТекста"); - Цвета = ПроверкаКонтрагентовВызовСервераПовтИсп.ЦветаРезультатовПроверки(); - ЦветФона.Значение = Цвета.ЦветТекстаНекорректногоКонтрагента; - ЦветФона.Использование = Истина; + ЦветФона = Оформление.Оформление.Элементы.Найти("ЦветТекста"); + Цвета = ПроверкаКонтрагентовВызовСервераПовтИсп.ЦветаРезультатовПроверки(); + + ЦветФона.Значение = Цвета.ЦветТекстаНекорректногоКонтрагента; + ЦветФона.Использование = Истина; - ОформляемоеПоле = Оформление.Поля.Элементы.Добавить(); - ОформляемоеПоле.Поле = Новый ПолеКомпоновкиДанных(ИмяПоляСКонтрагентом); + ОформляемоеПоле = Оформление.Поля.Элементы.Добавить(); + ОформляемоеПоле.Поле = Новый ПолеКомпоновкиДанных(ИмяПоляСКонтрагентом); КонецЦикла; @@ -3552,7 +3910,7 @@ ТабличнаяЧасть = ДокументОбъект[ОписаниеТабличнойЧасти.ИмяТабличнойЧасти]; // Колонка с признаком корректности контрагента. - ЕстьЭтоНекорректныйКонтрагент = ЕстьРеквизитФормы(ТабличнаяЧасть, "ЭтоНекорректныйКонтрагент"); + ЕстьЭтоНекорректныйКонтрагент = РеквизитТабличнойЧастиУжеЕсть(Форма, ОписаниеТабличнойЧасти, "ЭтоНекорректныйКонтрагент"); Если НЕ ЕстьЭтоНекорректныйКонтрагент Тогда ДобавитьРеквизитЭтоНекорректныйКонтрагент(Форма, ОписаниеТабличнойЧасти, ТаблицаФормы.ПутьКДанным); КонецЕсли; @@ -3570,7 +3928,7 @@ Процедура ДобавитьКолонкиТаблицыФормыСРезультатамиПроверкиВТабличныеЧасти(Форма) СтандартнаяОбработка = Истина; - ПроверкаКонтрагентовПереопределяемый.ДобавитьКолонкиТаблицыФормыСРезультатамиПроверкиВТабличныеЧасти(Форма, СтандартнаяОбработка); + РаботаСКонтрагентамиПереопределяемый.ДобавитьКолонкиТаблицыФормыСРезультатамиПроверкиВТабличныеЧасти(Форма, СтандартнаяОбработка); // Если действия переопределили, то стандартную обработку не выполняем. Если НЕ СтандартнаяОбработка Тогда @@ -3597,9 +3955,9 @@ Элементы = Форма.Элементы; ТаблицаФормы = Элементы[ОписаниеТабличнойЧасти.ИмяТаблицыФормы]; - ПолеСКонтрагентом = Форма.Элементы[ОписаниеТабличнойЧасти.ИмяПоляСКонтрагентом]; - НовоеПолеКартинки = Форма.Элементы.Найти(ПроверкаКонтрагентовКлиентСервер.ИмяПоляКартинки(ТаблицаФормы)); - НоваяГруппаКолонок = Форма.Элементы.Найти(ПолеСКонтрагентом.Имя + "Группа"); + ПолеСКонтрагентом = Элементы[ОписаниеТабличнойЧасти.ИмяПоляСКонтрагентом]; + НовоеПолеКартинки = Элементы.Найти(ПроверкаКонтрагентовКлиентСервер.ИмяПоляКартинки(ТаблицаФормы)); + НоваяГруппаКолонок = Элементы.Найти(ПолеСКонтрагентом.Имя + "Группа"); // Если колонки с результатом проверки контрагента нет в табличной части, то добавляем ее. Если НовоеПолеКартинки = Неопределено Тогда @@ -3853,6 +4211,13 @@ КонецЕсли; + // Если контрагент в ТЧ + Если ПроверкаКонтрагентовКлиентСервер.ЭтоДокументСКонтрагентомВТабличнойЧасти(Форма) Тогда + + ЗапомнитьРезультатПроверкиКонтрагентовВТабличнойЧасти(Форма, ДанныеКонтрагентов); + + КонецЕсли; + КонецПроцедуры Процедура ЗаполнитьДанныеКонтрагентовВСчетеФактуре(ДокументОбъект, ДанныеКонтрагентов, Форма = Неопределено) @@ -3861,6 +4226,13 @@ Возврат; КонецЕсли; + СтандартнаяОбработка = Истина; + РаботаСКонтрагентамиПереопределяемый.ЗаполнитьДанныеКонтрагентовВСчетеФактуре(СтандартнаяОбработка, ДокументОбъект, ДанныеКонтрагентов, Форма); + + Если СтандартнаяОбработка = Ложь Тогда + Возврат; + КонецЕсли; + ДокументСсылка = ДокументОбъект.Ссылка; Дата = ДатаВСчетеФактуре(ДокументОбъект); @@ -3884,109 +4256,10 @@ КонецПроцедуры -Функция ИтоговоеСостояниеКонтрагентаВДокументе(ДанныеКонтрагентов, Отбор = Неопределено) - - // Инициализируем - СостояниеКонтрагента = ПредопределенноеЗначение("Перечисление.СостоянияСуществованияКонтрагента.ПустаяСсылка"); - - ЕстьНепустойКонтрагент = Ложь; - КонтрагентовНесколько = Ложь; - - Если Отбор = Неопределено Тогда - ДанныеПоКонтрагентам = ДанныеКонтрагентов.Скопировать(); - Иначе - ДанныеПоКонтрагентам = ДанныеКонтрагентов.Скопировать(Отбор); - КонецЕсли; - - Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаВМоделиСервиса") Тогда - ДанныеПоКонтрагентам.Свернуть("Ссылка, Контрагент, ИНН, КПП, Дата, ОбластьДанныхВспомогательныеДанные, Состояние"); - Иначе - ДанныеПоКонтрагентам.Свернуть("Ссылка, Контрагент, ИНН, КПП, Дата, Состояние"); - КонецЕсли; - - Если ДанныеПоКонтрагентам.Количество() = 1 Тогда - - ДанныеПоКонтрагенту = ДанныеПоКонтрагентам[0]; - ЕстьНепустойКонтрагент = ЗначениеЗаполнено(ДанныеПоКонтрагенту.Контрагент); - СостояниеКонтрагента = ДанныеПоКонтрагенту.Состояние; - КонтрагентовНесколько = Ложь; - - Иначе - - // Прорисовываем результат проверки в счет-фактуре. - ЕстьНедействующиеКонтрагенты = Ложь; - ЕстьДействующиеКонтрагенты = Ложь; - ЕстьКонтрагентыСОшибками = Ложь; - ЕстьКонтрагентыНеПодлежащиеПроверке = Ложь; - ЕстьКонтрагентыСПустымИННКПП = Ложь; - - Для каждого ДанныеПоКонтрагенту Из ДанныеПоКонтрагентам Цикл - - // Заполненность контрагента - Если ЗначениеЗаполнено(ДанныеПоКонтрагенту.Контрагент) Тогда - ЕстьНепустойКонтрагент = Истина; - КонецЕсли; - - // Состояние существования - Если ПроверкаКонтрагентовКлиентСерверПовтИсп.ЭтоСостояниеНедействующегоКонтрагента(ДанныеПоКонтрагенту.Состояние) Тогда - ЕстьНедействующиеКонтрагенты = Истина; - КонецЕсли; - - Если ПроверкаКонтрагентовКлиентСерверПовтИсп.ЭтоСостояниеДействующегоКонтрагента(ДанныеПоКонтрагенту.Состояние) - И ДанныеПоКонтрагенту.Состояние <> ПредопределенноеЗначение("Перечисление.СостоянияСуществованияКонтрагента.СодержитОшибкиВДанных") - И ДанныеПоКонтрагенту.Состояние <> ПредопределенноеЗначение("Перечисление.СостоянияСуществованияКонтрагента.ПустаяСсылка") - И ДанныеПоКонтрагенту.Состояние <> ПредопределенноеЗначение("Перечисление.СостоянияСуществованияКонтрагента.НеПодлежитПроверке") Тогда - ЕстьДействующиеКонтрагенты = Истина; - КонецЕсли; - - Если ДанныеПоКонтрагенту.Состояние = ПредопределенноеЗначение("Перечисление.СостоянияСуществованияКонтрагента.СодержитОшибкиВДанных") Тогда - ЕстьКонтрагентыСОшибками = Истина; - КонецЕсли; - - Если ДанныеПоКонтрагенту.Состояние = ПредопределенноеЗначение("Перечисление.СостоянияСуществованияКонтрагента.НеПодлежитПроверке") Тогда - ЕстьКонтрагентыНеПодлежащиеПроверке = Истина; - КонецЕсли; - - Если ДанныеПоКонтрагенту.Состояние = ПредопределенноеЗначение("Перечисление.СостоянияСуществованияКонтрагента.ПустойИННКПП") Тогда - ЕстьКонтрагентыСПустымИННКПП = Истина; - КонецЕсли; - - КонецЦикла; - - Если ЕстьНепустойКонтрагент Тогда - КонтрагентовНесколько = Истина; - КонецЕсли; - - Если НЕ ЕстьНедействующиеКонтрагенты И НЕ ЕстьДействующиеКонтрагенты И НЕ ЕстьКонтрагентыСОшибками Тогда - // Контрагент не проверен - СостояниеКонтрагента = ПредопределенноеЗначение("Перечисление.СостоянияСуществованияКонтрагента.ПустаяСсылка"); - ИначеЕсли ЕстьНедействующиеКонтрагенты Тогда - СостояниеКонтрагента = ПредопределенноеЗначение("Перечисление.СостоянияСуществованияКонтрагента.ОтсутствуетВРеестре"); - ИначеЕсли ЕстьКонтрагентыСОшибками Тогда - СостояниеКонтрагента = ПредопределенноеЗначение("Перечисление.СостоянияСуществованияКонтрагента.СодержитОшибкиВДанных"); - ИначеЕсли ЕстьКонтрагентыНеПодлежащиеПроверке Тогда - СостояниеКонтрагента = ПредопределенноеЗначение("Перечисление.СостоянияСуществованияКонтрагента.НеПодлежитПроверке"); - ИначеЕсли ЕстьКонтрагентыСПустымИННКПП Тогда - СостояниеКонтрагента = ПредопределенноеЗначение("Перечисление.СостоянияСуществованияКонтрагента.ПустойИННКПП"); - Иначе - СостояниеКонтрагента = ПредопределенноеЗначение("Перечисление.СостоянияСуществованияКонтрагента.Действует"); - КонецЕсли; - - КонецЕсли; - - Результат = Новый Структура; - Результат.Вставить("КонтрагентЗаполнен", ЕстьНепустойКонтрагент); - Результат.Вставить("СостояниеКонтрагента", СостояниеКонтрагента); - Результат.Вставить("КонтрагентовНесколько", КонтрагентовНесколько); - - Возврат Результат; - -КонецФункции - Функция ДатаВСчетеФактуре(СчетФактураОбъект) Дата = Дата(1,1,1); - ПроверкаКонтрагентовПереопределяемый.ОпределитьДатуВСчетеФактуре(СчетФактураОбъект, Дата); + РаботаСКонтрагентамиПереопределяемый.ОпределитьДатуВСчетеФактуре(СчетФактураОбъект, Дата); Возврат Дата; @@ -4001,26 +4274,25 @@ // Функция - Определяет, заполнен ли хотя бы один контрагент в счете-фактуре. // // Параметры: -// СчетФактураОбъект - ДанныеФормыСтруктура - счет-фактура, для которой необходимо определить заполненность +// СчетФактураСсылка - ДокументСсылка - счет-фактура, для которой необходимо определить заполненность // контрагентов. // Возвращаемое значение: // Булево - Истина, если заполнен хотя бы один контрагент. -Функция ВСчетеФактуреЗаполненХотяБыОдинКонтрагент(СчетФактураОбъект) +Функция ВСчетеФактуреЗаполненХотяБыОдинКонтрагент(СчетФактураСсылка) - Если СчетФактураОбъект = Неопределено Тогда + Если СчетФактураСсылка = Неопределено Тогда ЗаполненХотяБыОдинКонтрагент = Истина; Иначе - СчетФактураСсылка = СчетФактураОбъект.Ссылка; - + Описание = ОписаниеКонтрагентовВСчетеФактуре(ТипЗнч(СчетФактураСсылка)); + ИменаРеквизитовКонтрагентов = Описание.ВыгрузитьКолонку("ИмяРеквизита"); + КонтрагентыСчетаФактуры = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(СчетФактураСсылка, ИменаРеквизитовКонтрагентов); + ЗаполненХотяБыОдинКонтрагент = Ложь; - Для каждого СтрокаОписания Из Описание Цикл + Для каждого Контрагент Из КонтрагентыСчетаФактуры Цикл - ИмяРеквизитаКонтрагента = СтрокаОписания.ИмяРеквизита; - Контрагент = СчетФактураОбъект[ИмяРеквизитаКонтрагента]; - - Если ЗначениеЗаполнено(Контрагент) Тогда + Если ЗначениеЗаполнено(Контрагент.Значение) Тогда ЗаполненХотяБыОдинКонтрагент = Истина; Прервать; КонецЕсли; @@ -4038,10 +4310,56 @@ #Область ПроверкаКонтрагентовВСправочнике +// Подписка на событие. Добавление в регистр набора ИНН и КПП для последующей проверки регламентным заданием. +// +// Параметры: +// КонтрагентОбъект - СправочникОбъект.<Контрагенты> - записываемый контрагент. +// Отказ - Булево - Параметр обработчика подписки на событие. +Процедура СохранитьРезультатПроверкиКонтрагентаПриЗаписи(КонтрагентОбъект, Отказ) Экспорт + + Если КонтрагентОбъект.ОбменДанными.Загрузка Тогда + Возврат; + КонецЕсли; + + Если НЕ ПроверкаКонтрагентовВызовСервера.ИспользованиеПроверкиВозможно() + ИЛИ СправочникКонтрагентовИерархический() И КонтрагентОбъект.ЭтоГруппа Тогда + Возврат; + КонецЕсли; + + Если СтандартныеПодсистемыСервер.ЭтоИдентификаторОбъектаМетаданных(КонтрагентОбъект) Тогда + Возврат; + КонецЕсли; + + СостояниеКонтрагента = Перечисления.СостоянияСуществованияКонтрагента.ПустаяСсылка(); + КонтрагентОбъект.ДополнительныеСвойства.Свойство("ПроверкаКонтрагентовСостояниеКонтрагента", СостояниеКонтрагента); + + Если НЕ ЗначениеЗаполнено(СостояниеКонтрагента) Тогда + Возврат; + КонецЕсли; + + СвойстваСправочникаКонтрагенты = ПроверкаКонтрагентовКлиентСервер.СвойстваСправочникаКонтрагенты(); + + ДанныеКонтрагента = Новый Структура; + + ДанныеКонтрагента.Вставить("Контрагент", КонтрагентОбъект.Ссылка); + ДанныеКонтрагента.Вставить("ИНН", КонтрагентОбъект[СвойстваСправочникаКонтрагенты.ИНН]); + ДанныеКонтрагента.Вставить("КПП", КонтрагентОбъект[СвойстваСправочникаКонтрагенты.КПП]); + ДанныеКонтрагента.Вставить("Дата", НачалоДня(ТекущаяДатаСеанса())); + ДанныеКонтрагента.Вставить("Состояние", СостояниеКонтрагента); + + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаВМоделиСервиса") Тогда + ДанныеКонтрагента.Вставить("ОбластьДанныхВспомогательныеДанные", ОбщегоНазначения.ЗначениеРазделителяСеанса()); + КонецЕсли; + + УстановитьПривилегированныйРежим(Истина); + СохранитьРезультатыПроверкиКонтрагентаВРегистр(ДанныеКонтрагента); + +КонецПроцедуры + Процедура УстановитьУсловноеОформлениеСпискаКонтрагентов(Список) СтандартнаяОбработка = Истина; - ПроверкаКонтрагентовПереопределяемый.УстановитьУсловноеОформлениеСпискаКонтрагентов(Список, СтандартнаяОбработка); + РаботаСКонтрагентамиПереопределяемый.УстановитьУсловноеОформлениеСпискаКонтрагентов(Список, СтандартнаяОбработка); // Если действия переопределили, то стандартную обработку не выполняем. Если НЕ СтандартнаяОбработка Тогда @@ -4060,12 +4378,12 @@ Отбор.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("ПроверкаКонтрагентовКонтрагентНеСуществует"); Отбор.ПравоеЗначение = Истина; - // ПроверкаКонтрагентовСостояние Не равно "Перечисление.СостоянияСуществованияКонтрагента.ПрекратилДеятельность". + // ПроверкаКонтрагентовСостояние Не равно "Перечисление.СостоянияСуществованияКонтрагента.НеДействуетИлиИзмененКПП". Отбор = НовоеУсловноеОформление.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); Отбор.ВидСравнения = ВидСравненияКомпоновкиДанных.НеРавно; Отбор.Использование = Истина; Отбор.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("ПроверкаКонтрагентовСостояние"); - Отбор.ПравоеЗначение = Перечисления.СостоянияСуществованияКонтрагента.ПрекратилДеятельность; + Отбор.ПравоеЗначение = Перечисления.СостоянияСуществованияКонтрагента.НеДействуетИлиИзмененКПП; // Красные ИНН и КПП Оформление = НовоеУсловноеОформление.Оформление.Элементы.Найти("ЦветТекста"); @@ -4092,12 +4410,12 @@ Отбор.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("ПроверкаКонтрагентовКонтрагентНеСуществует"); Отбор.ПравоеЗначение = Истина; - // ПроверкаКонтрагентовСостояние Равно "Перечисление.СостоянияСуществованияКонтрагента.ПрекратилДеятельность" + // ПроверкаКонтрагентовСостояние Равно "Перечисление.СостоянияСуществованияКонтрагента.НеДействуетИлиИзмененКПП" Отбор = НовоеУсловноеОформление.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); Отбор.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно; Отбор.Использование = Истина; Отбор.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("ПроверкаКонтрагентовСостояние"); - Отбор.ПравоеЗначение = Перечисления.СостоянияСуществованияКонтрагента.ПрекратилДеятельность; + Отбор.ПравоеЗначение = Перечисления.СостоянияСуществованияКонтрагента.НеДействуетИлиИзмененКПП; // Серым вся строка Оформление = НовоеУсловноеОформление.Оформление.Элементы.Найти("ЦветТекста"); @@ -4170,7 +4488,7 @@ // Подкрашиваем контрагентов с ошибками. Для каждого СтрокаСНедействующимКонтрагентом Из НедействующиеКонтрагенты Цикл - ПроверкаКонтрагентовПереопределяемый.ВыделитьКонтрагентаСОшибкойВСтрокеОтчета(ТабличныйДокумент, + РаботаСКонтрагентамиПереопределяемый.ВыделитьКонтрагентаСОшибкойВСтрокеОтчета(ТабличныйДокумент, СтрокаСНедействующимКонтрагентом.СтрокаТабличногоДокумента); КонецЦикла; @@ -4180,4 +4498,3 @@ #КонецОбласти #КонецОбласти - diff --git a/SSL/src/CommonModules/ПроверкаКонтрагентовВызовСервера/Module.bsl b/SSL/src/CommonModules/ПроверкаКонтрагентовВызовСервера/Module.bsl index 08737231d..b00ccb868 100644 --- a/SSL/src/CommonModules/ПроверкаКонтрагентовВызовСервера/Module.bsl +++ b/SSL/src/CommonModules/ПроверкаКонтрагентовВызовСервера/Module.bsl @@ -32,7 +32,7 @@ КодОсновногоЯзыка = ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка(); // Для записи события в журнал регистрации. ИнформацияОбОшибке = ИнформацияОбОшибке(); - ЗаписьЖурналаРегистрации(НСтр("ru = 'Проверка контрагентов.Проверка контрагента в фоновом задании'", КодОсновногоЯзыка), + ЗаписьЖурналаРегистрации(НСтр("ru = 'Проверка контрагентов.Запуск проверки при изменении реквизитов контрагентов'", КодОсновногоЯзыка), УровеньЖурналаРегистрации.Ошибка,,,ПодробноеПредставлениеОшибки(ИнформацияОбОшибке)); КонецПопытки; diff --git a/SSL/src/CommonModules/ПроверкаКонтрагентовВызовСервераПовтИсп/Module.bsl b/SSL/src/CommonModules/ПроверкаКонтрагентовВызовСервераПовтИсп/Module.bsl index ead6162ff..590af91b0 100644 --- a/SSL/src/CommonModules/ПроверкаКонтрагентовВызовСервераПовтИсп/Module.bsl +++ b/SSL/src/CommonModules/ПроверкаКонтрагентовВызовСервераПовтИсп/Module.bsl @@ -26,7 +26,7 @@ Цвета.Вставить("ЦветФонаНекорректногоКонтрагентаВДокументе", ЦветаСтиля.ЦветФонаНекорректногоКонтрагентаВДокументе); // красный - ПроверкаКонтрагентовПереопределяемый.ОпределитьЦветаРезультатовПроверки(Цвета); + РаботаСКонтрагентамиПереопределяемый.ОпределитьЦветаРезультатовПроверки(Цвета); Возврат Цвета; diff --git a/SSL/src/CommonModules/ПроверкаКонтрагентовКлиент/Module.bsl b/SSL/src/CommonModules/ПроверкаКонтрагентовКлиент/Module.bsl index d725b7a04..58c04ae92 100644 --- a/SSL/src/CommonModules/ПроверкаКонтрагентовКлиент/Module.bsl +++ b/SSL/src/CommonModules/ПроверкаКонтрагентовКлиент/Module.bsl @@ -145,7 +145,7 @@ ТребуетсяПроверкаКонтрагентов = Ложь; - ПроверкаКонтрагентовКлиентПереопределяемый.ОпределитьНеобходимостьПроверкиКонтрагентовВОбработкеОповещения( + РаботаСКонтрагентамиКлиентПереопределяемый.ОпределитьНеобходимостьПроверкиКонтрагентовВОбработкеОповещения( Форма, ИмяСобытия, Параметр, Источник, ТребуетсяПроверкаКонтрагентов); Возврат ТребуетсяПроверкаКонтрагентов; @@ -159,7 +159,7 @@ // ДополнительныеПараметры - Дата - Дата документа, в случае если произошло изменение даты. // - ТаблицаФормы - Если изменения произошли в табличной части. // - ПолеФормы - Если изменился контрагент в определенном поле произошли в табличной части. -Процедура ЗапуститьПроверкуКонтрагентовВДокументе(Форма, ДополнительныеПараметры = Неопределено) Экспорт +Процедура ЗапуститьПроверкуКонтрагентовВДокументе(Форма, ДополнительныеПараметры) Экспорт Если Форма.РеквизитыПроверкиКонтрагентов.ПроверкаИспользуется Тогда @@ -197,14 +197,14 @@ // Контекстный серверный вызов Форма.ОтобразитьРезультатПроверкиКонтрагента(); - // Определение объекта и ссылки. - ОбъектИСсылкаПоФорме = ПроверкаКонтрагентовКлиентСервер.ОбъектИСсылкаПоФорме(Форма); - ДокументСсылка = ОбъектИСсылкаПоФорме.Ссылка; - - ОповеститьОбИзменении(ДокументСсылка); - КонецЕсли; + // Определение объекта и ссылки. + ОбъектИСсылкаПоФорме = ПроверкаКонтрагентовКлиентСервер.ОбъектИСсылкаПоФорме(Форма); + ДокументСсылка = ОбъектИСсылкаПоФорме.Ссылка; + + ОповеститьОбИзменении(ДокументСсылка); + Иначе Если Форма.ПроверкаКонтрагентовПараметрыОбработчикаОжидания <> Неопределено Тогда @@ -233,9 +233,8 @@ Если Форма.РеквизитыПроверкиКонтрагентов.ПроверкаИспользуется Тогда Если СобытиеТребуетПроверкиКонтрагента(Форма, ИмяСобытия, Параметр, Источник) Тогда - ДополнительныеПараметры = Новый Структура(); // Добавляем в параметры источник события. - ДополнительныеПараметры = ПроверкаКонтрагентовКлиентСервер.ПараметрыФоновогоЗадания(Источник, ДополнительныеПараметры); + ДополнительныеПараметры = ПроверкаКонтрагентовКлиентСервер.ПараметрыФоновогоЗадания(Источник); // Добавляем в параметры признак, что после проверки нужно записать результат в регистр. ДополнительныеПараметры = ПроверкаКонтрагентовКлиентСервер.ПараметрыФоновогоЗадания(Истина, ДополнительныеПараметры); @@ -384,8 +383,6 @@ Если Форма.РеквизитыПроверкиКонтрагентов.ФоновоеЗаданиеЗапущено Тогда Форма.РеквизитыПроверкиКонтрагентов.ИнтервалПроверкиРезультата = 1; Форма.ПодключитьОбработчикОжидания("Подключаемый_ОбработатьРезультатПроверкиКонтрагентов", Форма.РеквизитыПроверкиКонтрагентов.ИнтервалПроверкиРезультата, Истина); - Иначе - ПроверкаКонтрагентовКлиентСервер.ОтобразитьРезультатПроверкиКонтрагентаВСправочнике(Форма); КонецЕсли; КонецЕсли diff --git a/SSL/src/CommonModules/ПроверкаКонтрагентовКлиентСервер/Module.bsl b/SSL/src/CommonModules/ПроверкаКонтрагентовКлиентСервер/Module.bsl index 7621a9c27..129aaf702 100644 --- a/SSL/src/CommonModules/ПроверкаКонтрагентовКлиентСервер/Module.bsl +++ b/SSL/src/CommonModules/ПроверкаКонтрагентовКлиентСервер/Module.bsl @@ -54,7 +54,7 @@ СтандартнаяОбработка = Истина; Форма.Элементы.ПроверкаКонтрагента.Видимость = Ложь; - ПроверкаКонтрагентовКлиентСерверПереопределяемый.УстановитьВидПанелиПроверкиКонтрагентовВОтчете(Форма, СтандартнаяОбработка, ВидПанелиПроверки); + РаботаСКонтрагентамиКлиентСерверПереопределяемый.УстановитьВидПанелиПроверкиКонтрагентовВОтчете(Форма, СтандартнаяОбработка, ВидПанелиПроверки); // Если действия по отображению результата проверки переопределили, то стандартную обработку не выполняем. Если НЕ СтандартнаяОбработка Тогда @@ -96,7 +96,7 @@ Функция ЭтоДокументСКонтрагентомВШапке(Форма) Экспорт Результат = РезультатОпределенияВидаДокумента(); - ПроверкаКонтрагентовКлиентСерверПереопределяемый.ОпределитьВидДокумента(Форма, Результат); + РаботаСКонтрагентамиКлиентСерверПереопределяемый.ОпределитьВидДокумента(Форма, Результат); Возврат Результат.КонтрагентНаходитсяВШапке; @@ -113,23 +113,10 @@ ЯвляетсяСчетомФактурой = Ложь; - ТипИсточника = ТипЗнч(ТипИсточника); - - Если ТипИсточника = Тип("Строка") - ИЛИ ТипИсточника = Тип("Дата") - ИЛИ ТипИсточника = Тип("Структура") - ИЛИ ТипИсточника = Тип("Булево") Тогда + Результат = РезультатОпределенияВидаДокумента(); + РаботаСКонтрагентамиКлиентСерверПереопределяемый.ОпределитьВидДокумента(Источник, Результат); + ЯвляетсяСчетомФактурой = Результат.ЯвляетсяСчетомФактурой; - ЯвляетсяСчетомФактурой = Ложь; - - Иначе - - Результат = РезультатОпределенияВидаДокумента(); - ПроверкаКонтрагентовКлиентСерверПереопределяемый.ОпределитьВидДокумента(Источник, Результат); - ЯвляетсяСчетомФактурой = Результат.ЯвляетсяСчетомФактурой; - - КонецЕсли; - Возврат ЯвляетсяСчетомФактурой; КонецФункции @@ -144,7 +131,7 @@ Функция ЭтоДокументСоСчетомФактуройВПодвале(Форма) Экспорт Результат = РезультатОпределенияВидаДокумента(); - ПроверкаКонтрагентовКлиентСерверПереопределяемый.ОпределитьВидДокумента(Форма, Результат); + РаботаСКонтрагентамиКлиентСерверПереопределяемый.ОпределитьВидДокумента(Форма, Результат); Возврат Результат.СчетФактураНаходитсяВПодвале; @@ -160,7 +147,7 @@ Функция ЭтоДокументСКонтрагентомВТабличнойЧасти(Форма) Экспорт Результат = РезультатОпределенияВидаДокумента(); - ПроверкаКонтрагентовКлиентСерверПереопределяемый.ОпределитьВидДокумента(Форма, Результат); + РаботаСКонтрагентамиКлиентСерверПереопределяемый.ОпределитьВидДокумента(Форма, Результат); Возврат Результат.КонтрагентНаходитсяВТабличнойЧасти; @@ -239,10 +226,10 @@ Подстроки.Добавить(НСтр("ru = 'Проверка контрагента по базе ФНС не выполнена: не заполнен контрагент'")); ИначеЕсли НЕ ЗначениеЗаполнено(СостояниеКонтрагента) Тогда Подстроки.Добавить(РекламаСервиса); - ИначеЕсли СостояниеКонтрагента = ПредопределенноеЗначение("Перечисление.СостоянияСуществованияКонтрагента.НеПодлежитПроверке") Тогда + ИначеЕсли СостояниеКонтрагента = ПредопределенноеЗначение("Перечисление.СостоянияСуществованияКонтрагента.КонтрагентНеПодлежитПроверке") Тогда // Иностранный контрагент Подстроки.Добавить(НСтр("ru = 'Проверка контрагента по базе ФНС не выполнена: проверке подлежат только российские контрагенты'")); - ИначеЕсли СостояниеКонтрагента = ПредопределенноеЗначение("Перечисление.СостоянияСуществованияКонтрагента.ПустойИННКПП") Тогда + ИначеЕсли СостояниеКонтрагента = ПредопределенноеЗначение("Перечисление.СостоянияСуществованияКонтрагента.ПустойИННИлиКПП") Тогда // Контрагенты с пустым ИНН и КПП не проверяются. Подстроки.Добавить(НСтр("ru = 'Проверка контрагента по базе ФНС не выполнена: не заполнен ИНН/КПП'")); ИначеЕсли ПроверкаКонтрагентовКлиентСерверПовтИсп.ЭтоСостояниеНедействующегоКонтрагента(СостояниеКонтрагента) Тогда @@ -255,11 +242,11 @@ Подстроки.Добавить(Строка(СостояниеКонтрагента)); КонецЕсли; ЦветФона = ЦветНекорректногоКонтрагента; - ИначеЕсли СостояниеКонтрагента = ПредопределенноеЗначение("Перечисление.СостоянияСуществованияКонтрагента.СодержитОшибкиВДанных") Тогда + ИначеЕсли СостояниеКонтрагента = ПредопределенноеЗначение("Перечисление.СостоянияСуществованияКонтрагента.КонтрагентСодержитОшибкиВДанных") Тогда // Контрагент с ошибками в ИНН/КПП или дате. Подстроки.Добавить(НСтр("ru = 'Проверка контрагента по базе ФНС не выполнена: обнаружены ошибки в заполнении ИНН/КПП/даты документа'")); ЦветФона = ЦветНекорректногоКонтрагента; - ИначеЕсли СостояниеКонтрагента = ПредопределенноеЗначение("Перечисление.СостоянияСуществованияКонтрагента.Действует") Тогда + ИначеЕсли СостояниеКонтрагента = ПредопределенноеЗначение("Перечисление.СостоянияСуществованияКонтрагента.КонтрагентЕстьВБазеФНС") Тогда // Действующий корректный контрагент. Если КонтрагентовНесколько Тогда // Выводим обобщенно @@ -280,6 +267,8 @@ Результат.Вставить("Текст", Новый ФорматированнаяСтрока(Подстроки)); Результат.Вставить("ЦветФона", ЦветФона); + РаботаСКонтрагентамиКлиентСерверПереопределяемый.ПослеФормированияПодсказкиВДокументе(Результат, СостояниеКонтрагента, Цвета); + Возврат Результат; КонецФункции @@ -296,7 +285,7 @@ СчетФактура = Неопределено; Если ЭтоДокументСоСчетомФактуройВПодвале(Форма) Тогда - ПроверкаКонтрагентовКлиентСерверПереопределяемый.ПолучитьСчетФактуру(Форма, СчетФактура); + РаботаСКонтрагентамиКлиентСерверПереопределяемый.ПолучитьСчетФактуру(Форма, СчетФактура); КонецЕсли; Возврат СчетФактура; @@ -316,7 +305,7 @@ СвойстваСправочника.Вставить("ИНН"); СвойстваСправочника.Вставить("КПП"); - ПроверкаКонтрагентовКлиентСерверПереопределяемый.ОпределитьСвойстваСправочникаКонтрагенты(СвойстваСправочника); + РаботаСКонтрагентамиКлиентСерверПереопределяемый.ОпределитьСвойстваСправочникаКонтрагенты(СвойстваСправочника); Возврат СвойстваСправочника; @@ -421,6 +410,10 @@ Результат.Вставить("СохранятьРезультатСразуПослеПроверки", Параметр); + ИначеЕсли ТипЗнч(Параметр) = Тип("Строка") Тогда + + // Ничего не делаем + ИначеЕсли ЭтоСчетФактура(Параметр) Тогда Результат.Вставить("ИзменившийсяСчетФактура", Параметр); @@ -442,7 +435,7 @@ Функция ОбъектИСсылкаПоФорме(Форма) Экспорт Результат = Новый Структура("Объект, Ссылка"); - ПроверкаКонтрагентовКлиентСерверПереопределяемый.ПолучитьОбъектИСсылкуПоФорме(Форма, Результат); + РаботаСКонтрагентамиКлиентСерверПереопределяемый.ПолучитьОбъектИСсылкуПоФорме(Форма, Результат); Возврат Результат; @@ -460,7 +453,7 @@ ПредставлениеРезультатаПроверки = ""; КонецЕсли; - ПроверкаКонтрагентовКлиентСерверПереопределяемый.ОтобразитьРезультатПроверкиКонтрагентаВСправочнике(Форма, ПредставлениеРезультатаПроверки); + РаботаСКонтрагентамиКлиентСерверПереопределяемый.ОтобразитьРезультатПроверкиКонтрагентаВСправочнике(Форма, ПредставлениеРезультатаПроверки); КонецПроцедуры @@ -491,6 +484,9 @@ ПараметрыЗапуска.Вставить("КПП", КПП); ПараметрыЗапуска.Вставить("СохранятьРезультатСразуПослеПроверки", ТипЗнч(ДополнительныеПараметры) = Тип("Булево") И ДополнительныеПараметры); ПараметрыЗапуска.Вставить("АдресХранилища", Форма.РеквизитыПроверкиКонтрагентов.АдресХранилища); + ПараметрыЗапуска.Вставить("ДополнительныеПараметры", Новый Структура); + + РаботаСКонтрагентамиКлиентСерверПереопределяемый.ДополнитьПараметрыЗапускаФоновогоЗадания(ПараметрыЗапуска.ДополнительныеПараметры, Форма); ПроверкаКонтрагентовВызовСервера.ПроверитьКонтрагентаПриИзменении(ПараметрыЗапуска); @@ -551,7 +547,7 @@ СостояниеКонтрагента = Форма.РеквизитыПроверкиКонтрагентов.СостояниеКонтрагента; Если ЭтоФизическоеЛицо - И СостояниеКонтрагента = ПредопределенноеЗначение("Перечисление.СостоянияСуществованияКонтрагента.ПрекратилДеятельность") Тогда + И СостояниеКонтрагента = ПредопределенноеЗначение("Перечисление.СостоянияСуществованияКонтрагента.НеДействуетИлиИзмененКПП") Тогда СтрокаСРезультатом = НСтр("ru = 'Не действует'"); Иначе СтрокаСРезультатом = Строка(СостояниеКонтрагента); @@ -565,12 +561,12 @@ Цвета = ПроверкаКонтрагентовВызовСервераПовтИсп.ЦветаРезультатовПроверки(); - Если СостояниеКонтрагента = ПредопределенноеЗначение("Перечисление.СостоянияСуществованияКонтрагента.ПрекратилДеятельность") Тогда + Если СостояниеКонтрагента = ПредопределенноеЗначение("Перечисление.СостоянияСуществованияКонтрагента.НеДействуетИлиИзмененКПП") Тогда ЦветТекста = Цвета.ЦветТекстаКонтрагентаПрекратившегоДеятельность; - ИначеЕсли СостояниеКонтрагента = ПредопределенноеЗначение("Перечисление.СостоянияСуществованияКонтрагента.ОтсутствуетВРеестре") - ИЛИ СостояниеКонтрагента = ПредопределенноеЗначение("Перечисление.СостоянияСуществованияКонтрагента.КППНеСоответствуетИНН") Тогда + ИначеЕсли СостояниеКонтрагента = ПредопределенноеЗначение("Перечисление.СостоянияСуществованияКонтрагента.КонтрагентОтсутствуетВБазеФНС") + ИЛИ СостояниеКонтрагента = ПредопределенноеЗначение("Перечисление.СостоянияСуществованияКонтрагента.КППНеСоответствуетДаннымБазыФНС") Тогда ЦветТекста = Цвета.ЦветТекстаНекорректногоКонтрагента; - ИначеЕсли СостояниеКонтрагента = ПредопределенноеЗначение("Перечисление.СостоянияСуществованияКонтрагента.Действует") Тогда + ИначеЕсли СостояниеКонтрагента = ПредопределенноеЗначение("Перечисление.СостоянияСуществованияКонтрагента.КонтрагентЕстьВБазеФНС") Тогда ЦветТекста = Цвета.ЦветТекстаКонтрагентаДействующего; КонецЕсли; diff --git a/SSL/src/CommonModules/ПроверкаКонтрагентовКлиентСерверПовтИсп/Module.bsl b/SSL/src/CommonModules/ПроверкаКонтрагентовКлиентСерверПовтИсп/Module.bsl index 390b81730..122caeee5 100644 --- a/SSL/src/CommonModules/ПроверкаКонтрагентовКлиентСерверПовтИсп/Module.bsl +++ b/SSL/src/CommonModules/ПроверкаКонтрагентовКлиентСерверПовтИсп/Module.bsl @@ -33,8 +33,8 @@ Функция СостоянияДействующегоКонтрагента(ДополнятьСостояниемСОшибкой = Истина, ДополнятьПустымСостоянием = Истина) Экспорт МассивСостояний = Новый Массив; - МассивСостояний.Добавить(ПредопределенноеЗначение("Перечисление.СостоянияСуществованияКонтрагента.Действует")); - МассивСостояний.Добавить(ПредопределенноеЗначение("Перечисление.СостоянияСуществованияКонтрагента.НеПодлежитПроверке")); + МассивСостояний.Добавить(ПредопределенноеЗначение("Перечисление.СостоянияСуществованияКонтрагента.КонтрагентЕстьВБазеФНС")); + МассивСостояний.Добавить(ПредопределенноеЗначение("Перечисление.СостоянияСуществованияКонтрагента.КонтрагентНеПодлежитПроверке")); ДобавитьДополнительныеСостояния(МассивСостояний, ДополнятьСостояниемСОшибкой, ДополнятьПустымСостоянием); Возврат МассивСостояний; @@ -69,9 +69,9 @@ Функция СостоянияНедействующегоКонтрагента(ДополнятьСостояниемСОшибкой = Ложь, ДополнятьПустымСостоянием = Ложь) Экспорт МассивСостояний = Новый Массив; - МассивСостояний.Добавить(ПредопределенноеЗначение("Перечисление.СостоянияСуществованияКонтрагента.КППНеСоответствуетИНН")); - МассивСостояний.Добавить(ПредопределенноеЗначение("Перечисление.СостоянияСуществованияКонтрагента.ОтсутствуетВРеестре")); - МассивСостояний.Добавить(ПредопределенноеЗначение("Перечисление.СостоянияСуществованияКонтрагента.ПрекратилДеятельность")); + МассивСостояний.Добавить(ПредопределенноеЗначение("Перечисление.СостоянияСуществованияКонтрагента.КППНеСоответствуетДаннымБазыФНС")); + МассивСостояний.Добавить(ПредопределенноеЗначение("Перечисление.СостоянияСуществованияКонтрагента.КонтрагентОтсутствуетВБазеФНС")); + МассивСостояний.Добавить(ПредопределенноеЗначение("Перечисление.СостоянияСуществованияКонтрагента.НеДействуетИлиИзмененКПП")); ДобавитьДополнительныеСостояния(МассивСостояний, ДополнятьСостояниемСОшибкой, ДополнятьПустымСостоянием); Возврат МассивСостояний; @@ -101,7 +101,7 @@ Процедура ДобавитьДополнительныеСостояния(МассивСостояний, ДополнятьСостояниемСОшибкой, ДополнятьПустымСостоянием) Если ДополнятьСостояниемСОшибкой Тогда - МассивСостояний.Добавить(ПредопределенноеЗначение("Перечисление.СостоянияСуществованияКонтрагента.СодержитОшибкиВДанных")); + МассивСостояний.Добавить(ПредопределенноеЗначение("Перечисление.СостоянияСуществованияКонтрагента.КонтрагентСодержитОшибкиВДанных")); КонецЕсли; Если ДополнятьПустымСостоянием Тогда МассивСостояний.Добавить(ПредопределенноеЗначение("Перечисление.СостоянияСуществованияКонтрагента.ПустаяСсылка")); diff --git a/SSL/src/CommonModules/ПроверкаЛегальностиПолученияОбновленияКлиент/Module.bsl b/SSL/src/CommonModules/ПроверкаЛегальностиПолученияОбновленияКлиент/Module.bsl index 9d1471d73..2185becce 100644 --- a/SSL/src/CommonModules/ПроверкаЛегальностиПолученияОбновленияКлиент/Module.bsl +++ b/SSL/src/CommonModules/ПроверкаЛегальностиПолученияОбновленияКлиент/Module.bsl @@ -5,36 +5,6 @@ #Область ПрограммныйИнтерфейс -// ИспользованиеМодальности - -// Запрашивает у пользователя диалог с подтверждением легальности полученного -// обновления и завершает работу системы, если обновление получено не легально -// (см. параметр ЗавершатьРаботуСистемы). -// -// Параметры: -// ЗавершатьРаботуСистемы - Булево - завершать работу системы, если пользователь -// указал что обновление получено не легально. -// -// Возвращаемое значение: -// Булево - Истина, если проверка завершилась успешно (пользователь -// подтвердил, что обновление получено легально). -// -Функция ПроверитьЛегальностьПолученияОбновления(ЗавершатьРаботуСистемы = Ложь) Экспорт - - Если СтандартныеПодсистемыКлиентПовтИсп.ПараметрыРаботыКлиента().ЭтоБазоваяВерсияКонфигурации Тогда - Возврат Истина; - КонецЕсли; - - ПараметрыФормы = Новый Структура; - ПараметрыФормы.Вставить("ПоказыватьПредупреждениеОПерезапуске", ЗавершатьРаботуСистемы); - ПараметрыФормы.Вставить("ПрограммноеОткрытие", Истина); - - Возврат ОткрытьФормуМодально("Обработка.ЛегальностьПолученияОбновлений.Форма", ПараметрыФормы); - -КонецФункции - -// Конец ИспользованиеМодальности - // Запрашивает у пользователя диалог с подтверждением легальности полученного // обновления и завершает работу системы, если обновление получено не легально // (см. параметр ЗавершатьРаботуСистемы). diff --git a/SSL/src/CommonModules/РаботаВБезопасномРежиме/Module.bsl b/SSL/src/CommonModules/РаботаВБезопасномРежиме/Module.bsl index d77ebf5ff..0f8bfeea8 100644 --- a/SSL/src/CommonModules/РаботаВБезопасномРежиме/Module.bsl +++ b/SSL/src/CommonModules/РаботаВБезопасномРежиме/Module.bsl @@ -34,7 +34,7 @@ Результат = ФабрикаXDTO.Создать(ФабрикаXDTO.Тип(Пакет, "FileSystemAccess")); Результат.Description = Описание; - Если Прав(Адрес, 1) = "\" Или Прав(Адрес, 1) = "/" Тогда + Если СтрЗаканчиваетсяНа(Адрес, "\") Или СтрЗаканчиваетсяНа(Адрес, "/") Тогда Адрес = Лев(Адрес, СтрДлина(Адрес) - 1); КонецЕсли; @@ -149,6 +149,31 @@ КонецФункции +// Возвращает внутреннее описание разрешения на использование расширения конфигурации. +// +// Параметры: +// Имя - Строка - имя расширения конфигурации, +// КонтрольнаяСумма - Строка - контрольная сумма расширения конфигурации +// +// Возвращаемое значение: +// ОбъектXDTO - внутреннее описание запрашиваемого разрешения. +// Предназначен только для передачи в качестве параметра в функции. +// РаботаВБезопасномРежиме.ЗапросНаИспользованиеВнешнихРесурсов(), +// РаботаВБезопасномРежиме.ЗапросНаОтменуРазрешенийИспользованияВнешнихРесурсов() и +// РаботаВБезопасномРежиме.ЗапросНаОчисткуРазрешенийИспользованияВнешнихРесурсов(). +Функция РазрешениеНаИспользованиеВнешнегоМодуля(Знач Имя, Знач КонтрольнаяСумма, Знач Описание = "") Экспорт + + Пакет = РаботаВБезопасномРежимеСлужебный.Пакет(); + Результат = ФабрикаXDTO.Создать(ФабрикаXDTO.Тип(Пакет, "ExternalModule")); + Результат.Description = Описание; + + Результат.Name = Имя; + Результат.Hash = КонтрольнаяСумма; + + Возврат Результат; + +КонецФункции + // Возвращает внутреннее описание разрешения на использование приложения операционной системы. // // Параметры: @@ -506,9 +531,7 @@ Попытка Тест = Новый Структура(ИмяМетода, ИмяМетода); Исключение - ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru='Некорректное значение параметра ИмяМетода (%1)'"), - ИмяМетода); + ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru='Некорректное значение параметра ИмяМетода (%1)'"), ИмяМетода); КонецПопытки; Если ПолучитьФункциональнуюОпцию("ИспользуютсяПрофилиБезопасности") И Не УстановленБезопасныйРежим() Тогда @@ -548,18 +571,16 @@ Процедура ПроверитьИмяМетодаКонфигурации(Знач ИмяМетода) Экспорт // Проверка предусловий на формат ИмяЭкспортнойПроцедуры. - ЧастиИмени = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(ИмяМетода, "."); + ЧастиИмени = СтрРазделить(ИмяМетода, "."); Если ЧастиИмени.Количество() <> 2 И ЧастиИмени.Количество() <> 3 Тогда - ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Неправильный формат параметра ИмяМетода (%1)'"), - ИмяМетода); + ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Неправильный формат параметра ИмяМетода (%1)'"), ИмяМетода); КонецЕсли; ИмяОбъекта = ЧастиИмени[0]; Если ЧастиИмени.Количество() = 2 И Метаданные.ОбщиеМодули.Найти(ИмяОбъекта) = Неопределено Тогда ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Неправильный формат параметра ИмяМетода (%1): - |Не найден общий модуль ""%2"".'"), + |Не найден общий модуль ""%2"".'"), ИмяМетода, ИмяОбъекта); КонецЕсли; @@ -633,8 +654,8 @@ ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Невозможно выполнение обработчиков установки параметров сеанса по причине: профиль безопасности %1 отсутствует в кластере серверов 1С:Предприятия, или для него запрещено использование в качестве профиля безопасности безопасного режима. - | - |Для восстановления работоспособности программы требуется отключить использование профиля безопасности через консоль кластера и заново настроить профили безопасности с помощью интерфейса конфигурации (соответствующие команды находятся в разделе настроек программы).'"), + | + |Для восстановления работоспособности программы требуется отключить использование профиля безопасности через консоль кластера и заново настроить профили безопасности с помощью интерфейса конфигурации (соответствующие команды находятся в разделе настроек программы).'"), ПрофильИнформационнойБазы); КонецЕсли; @@ -651,8 +672,8 @@ ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Невозможно выполнение обработчиков установки параметров сеанса по причине: профиль безопасности %1 не содержит разрешения на установку привилегированного режима. Возможно, он был отредактирован через консоль кластера. - | - |Для восстановления работоспособности программы требуется отключить использование профиля безопасности через консоль кластера и заново настроить профили безопасности с помощью интерфейса конфигурации (соответствующие команды находятся в разделе настроек программы).'"), + | + |Для восстановления работоспособности программы требуется отключить использование профиля безопасности через консоль кластера и заново настроить профили безопасности с помощью интерфейса конфигурации (соответствующие команды находятся в разделе настроек программы).'"), ПрофильИнформационнойБазы); КонецЕсли; @@ -670,10 +691,9 @@ ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Невозможно выполнение обработчиков установки параметров сеанса по причине: %1. - | - |Возможно, для информационной базы через консоль кластера был установлен профиль безопасности, не допускающий выполнения внешних модулей без установки безопасного режима. В этом случае для восстановления работоспособности программы требуется отключить использование профиля безопасности через консоль кластера и заново настроить профили безопасности с помощью интерфейса конфигурации (соответствующие команды находятся в разделе настроек программы).При этом программа будет автоматически корректно настроена на использование совместно с включенными профилями безопасности.'"), - КраткоеПредставлениеОшибки(ИнформацияОбОшибке()) - ); + | + |Возможно, для информационной базы через консоль кластера был установлен профиль безопасности, не допускающий выполнения внешних модулей без установки безопасного режима. В этом случае для восстановления работоспособности программы требуется отключить использование профиля безопасности через консоль кластера и заново настроить профили безопасности с помощью интерфейса конфигурации (соответствующие команды находятся в разделе настроек программы).При этом программа будет автоматически корректно настроена на использование совместно с включенными профилями безопасности.'"), + КраткоеПредставлениеОшибки(ИнформацияОбОшибке())); КонецПопытки; @@ -731,7 +751,7 @@ Функция МенеджерОбъектаПоИмени(Имя) Перем КлассОМ, ИмяОМ, Менеджер; - ЧастиИмени = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(Имя, "."); + ЧастиИмени = СтрРазделить(Имя, "."); Если ЧастиИмени.Количество() > 0 Тогда КлассОМ = ВРег(ЧастиИмени[0]); @@ -845,8 +865,7 @@ КонецЕсли; КонецЕсли; - ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Не удалось получить менеджер для объекта ""%1""'"), Имя); + ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Не удалось получить менеджер для объекта ""%1""'"), Имя); КонецФункции @@ -864,15 +883,14 @@ Исключение ШаблонЗаписиЖР = НСтр("ru = 'При установке параметров сеанса произошла ошибка: - | - |-------------------------------------------------------------------------------------------- - |%1 - |-------------------------------------------------------------------------------------------- - | - |Запуск программы будет невозможен.'"); + | + |-------------------------------------------------------------------------------------------- + |%1 + |-------------------------------------------------------------------------------------------- + | + |Запуск программы будет невозможен.'"); - ТекстЗаписиЖР = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - ШаблонЗаписиЖР, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); + ТекстЗаписиЖР = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонЗаписиЖР, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); ЗаписьЖурналаРегистрации( НСтр("ru = 'Установка параметров сеанса'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), diff --git a/SSL/src/CommonModules/РаботаВБезопасномРежимеКлиент/Module.bsl b/SSL/src/CommonModules/РаботаВБезопасномРежимеКлиент/Module.bsl index 766e63446..0adf56405 100644 --- a/SSL/src/CommonModules/РаботаВБезопасномРежимеКлиент/Module.bsl +++ b/SSL/src/CommonModules/РаботаВБезопасномРежимеКлиент/Module.bsl @@ -31,19 +31,14 @@ КонецЦикла; - Если СтандартнаяОбработка Тогда - - РаботаВБезопасномРежимеКлиентПереопределяемый.ПриПодтвержденииЗапросовНаИспользованиеВнешнихРесурсов( - Идентификаторы, ФормаВладелец, ОповещениеОЗакрытии, СтандартнаяОбработка); - + Если Не СтандартнаяОбработка Тогда + Возврат; КонецЕсли; - - Если СтандартнаяОбработка Тогда - НастройкаРазрешенийНаИспользованиеВнешнихРесурсовКлиент.НачатьИнициализациюЗапросаРазрешенийНаИспользованиеВнешнихРесурсов( - Идентификаторы, ФормаВладелец, ОповещениеОЗакрытии); - - КонецЕсли; + РаботаВБезопасномРежимеКлиентПереопределяемый.ПриПодтвержденииЗапросовНаИспользованиеВнешнихРесурсов( + Идентификаторы, ФормаВладелец, ОповещениеОЗакрытии, СтандартнаяОбработка); + НастройкаРазрешенийНаИспользованиеВнешнихРесурсовКлиент.НачатьИнициализациюЗапросаРазрешенийНаИспользованиеВнешнихРесурсов( + Идентификаторы, ФормаВладелец, ОповещениеОЗакрытии); КонецПроцедуры diff --git a/SSL/src/CommonModules/РаботаВБезопасномРежимеПереопределяемый/Module.bsl b/SSL/src/CommonModules/РаботаВБезопасномРежимеПереопределяемый/Module.bsl index ff4847f6f..0866ddbec 100644 --- a/SSL/src/CommonModules/РаботаВБезопасномРежимеПереопределяемый/Module.bsl +++ b/SSL/src/CommonModules/РаботаВБезопасномРежимеПереопределяемый/Module.bsl @@ -68,7 +68,8 @@ // Результат - УникальныйИдентификатор - идентификатор запроса (в том случае, если внутри обработчика // значение параметра СтандартнаяОбработка установлено в значение Ложь). // -Процедура ПриЗапросеРазрешенийНаИспользованиеВнешнихРесурсов(Знач ПрограммныйМодуль, Знач Владелец, Знач РежимЗамещения, Знач ДобавляемыеРазрешения, Знач УдаляемыеРазрешения, СтандартнаяОбработка, Результат) Экспорт +Процедура ПриЗапросеРазрешенийНаИспользованиеВнешнихРесурсов(Знач ПрограммныйМодуль, Знач Владелец, Знач РежимЗамещения, + Знач ДобавляемыеРазрешения, Знач УдаляемыеРазрешения, СтандартнаяОбработка, Результат) Экспорт diff --git a/SSL/src/CommonModules/РаботаВБезопасномРежимеСлужебный/Module.bsl b/SSL/src/CommonModules/РаботаВБезопасномРежимеСлужебный/Module.bsl index f6da09394..018ffc6ab 100644 --- a/SSL/src/CommonModules/РаботаВБезопасномРежимеСлужебный/Module.bsl +++ b/SSL/src/CommonModules/РаботаВБезопасномРежимеСлужебный/Module.bsl @@ -18,7 +18,7 @@ // Функция Пакет() Экспорт - Возврат Метаданные.ПакетыXDTO.ApplicationPermissions_1_0_0_1.ПространствоИмен; + Возврат Метаданные.ПакетыXDTO.ApplicationPermissions_1_0_0_2.ПространствоИмен; КонецФункции @@ -111,7 +111,7 @@ Результат = Новый Соответствие(); - СтруктураИмени = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(ИмяМакета, "."); + СтруктураИмени = СтрРазделить(ИмяМакета, "."); Если СтруктураИмени.Количество() = 2 Тогда @@ -359,9 +359,7 @@ Результат.Добавить( ЗапросИзмененияРазрешений( - ПрограммныйМодуль, Истина, НовыеРазрешения, Неопределено, ПрограммныйМодуль - ) - ); + ПрограммныйМодуль, Истина, НовыеРазрешения, Неопределено, ПрограммныйМодуль)); Иначе @@ -522,9 +520,6 @@ НачатьТранзакцию(); - ПрограммныйМодуль = СсылкаИзРегистраРазрешений(ТипПрограммногоМодуля, ИдентификаторПрограммногоМодуля); - Обработки.НастройкаРазрешенийНаИспользованиеВнешнихРесурсов.ОчиститьПредоставленныеРазрешения(ПрограммныйМодуль, Ложь); - Менеджер = Обработки.НастройкаРазрешенийНаИспользованиеВнешнихРесурсов.Создать(); Менеджер.ДобавитьЗапросРазрешенийНаИспользованиеВнешнихРесурсов( @@ -607,8 +602,7 @@ ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Запись объекта %1 недоступна: установлен безопасный режим: %2!'"), Объект.Метаданные().ПолноеИмя(), - БезопасныйРежим() - ); + БезопасныйРежим()); КонецЕсли; @@ -660,32 +654,33 @@ // // Параметры: // Параметры - Структура - структура параметров. +// ДоОбновленияПараметровРаботыПрограммы - Булево - Истина, если параметр запрашивается для работы клиентского кода +// до обновления всех параметров работы программы. Например, в подчиненном узле РИБ из формы повторной загрузки сообщения обмена. // -Процедура ДобавитьПараметрыРаботыКлиентаПриЗапуске(Параметры) Экспорт +Процедура ПриДобавленииПараметровРаботыКлиентаПриЗапуске(Параметры, ДоОбновленияПараметровРаботыПрограммы = Ложь) Экспорт + + Если ДоОбновленияПараметровРаботыПрограммы Тогда + Параметры.Вставить("ОтображатьПомощникНастройкиРазрешений", Ложь); + Возврат; + КонецЕсли; УстановитьПривилегированныйРежим(Истина); Параметры.Вставить("ОтображатьПомощникНастройкиРазрешений", ИспользуетсяИнтерактивныйРежимЗапросаРазрешений()); + Если Не Параметры.ОтображатьПомощникНастройкиРазрешений Тогда + Возврат; + КонецЕсли; - Если Параметры.ОтображатьПомощникНастройкиРазрешений Тогда - - Если Пользователи.ЭтоПолноправныйПользователь() Тогда + Если Не Пользователи.ЭтоПолноправныйПользователь() Тогда + Возврат; + КонецЕсли; - Проверка = НастройкаРазрешенийНаИспользованиеВнешнихРесурсовВызовСервера.ПроверитьПрименениеРазрешенийНаИспользованиеВнешнихРесурсов(); - - Если Проверка.РезультатПроверки Тогда - - Параметры.Вставить("ПроверитьПримененияРазрешенийНаИспользованиеВнешнихРесурсов", Ложь); - - Иначе - - Параметры.Вставить("ПроверитьПримененияРазрешенийНаИспользованиеВнешнихРесурсов", Истина); - Параметры.Вставить("ПроверкаПримененияРазрешенийНаИспользованиеВнешнихРесурсов", Проверка); - - КонецЕсли; - - КонецЕсли; - + Проверка = НастройкаРазрешенийНаИспользованиеВнешнихРесурсовВызовСервера.ПроверитьПрименениеРазрешенийНаИспользованиеВнешнихРесурсов(); + Если Проверка.РезультатПроверки Тогда + Параметры.Вставить("ПроверитьПримененияРазрешенийНаИспользованиеВнешнихРесурсов", Ложь); + Иначе + Параметры.Вставить("ПроверитьПримененияРазрешенийНаИспользованиеВнешнихРесурсов", Истина); + Параметры.Вставить("ПроверкаПримененияРазрешенийНаИспользованиеВнешнихРесурсов", Проверка); КонецЕсли; КонецПроцедуры @@ -745,10 +740,13 @@ СерверныеСобытия.Добавить( "СтандартныеПодсистемы.БазоваяФункциональность\ПриЗаполненииРазрешенийНаДоступКВнешнимРесурсам"); - // Вызывается при создании запроса на использование внешних ресурсов. + // Вызывается при создании запроса разрешений на использование внешних ресурсов. // // Параметры: - // Владелец - ЛюбаяСсылка - владелец запрашиваемых разрешений на использование внешних ресурсов, + // ПрограммныйМодуль - ЛюбаяСсылка - ссылка на объект информационной базы, представляющий программный + // модуль, для которого выполняется запрос разрешений, + // Владелец - ЛюбаяСсылка - ссылка на объект информационной базы, представляющий объект-владелец запрашиваемых + // разрешений на использование внешних ресурсов, // РежимЗамещения - Булево - флаг замещения ранее предоставленных разрешений по владельцу, // ДобавляемыеРазрешения - Массив(ОбъектXDTO) - массив добавляемых разрешений, // УдаляемыеРазрешения - Массив(ОбъектXDTO) - массив удаляемых разрешений, @@ -758,7 +756,7 @@ // значение параметра СтандартнаяОбработка установлено в значение Ложь). // // Синтаксис: - // Процедура ПриЗапросеРазрешенийНаИспользованиеВнешнихРесурсов(Знач Владелец, Знач РежимЗамещения, Знач ДобавляемыеРазрешения = Неопределено, Знач УдаляемыеРазрешения = Неопределено, СтандартнаяОбработка, Результат) Экспорт + // Процедура ПриЗапросеРазрешенийНаИспользованиеВнешнихРесурсов(Знач ПрограммныйМодуль, Знач Владелец, Знач РежимЗамещения, Знач ДобавляемыеРазрешения, Знач УдаляемыеРазрешения, СтандартнаяОбработка, Результат) Экспорт // СерверныеСобытия.Добавить( "СтандартныеПодсистемы.БазоваяФункциональность\ПриЗапросеРазрешенийНаИспользованиеВнешнихРесурсов"); diff --git a/SSL/src/CommonModules/РаботаВМоделиСервиса/Module.bsl b/SSL/src/CommonModules/РаботаВМоделиСервиса/Module.bsl index 6d06a423d..77137536a 100644 --- a/SSL/src/CommonModules/РаботаВМоделиСервиса/Module.bsl +++ b/SSL/src/CommonModules/РаботаВМоделиСервиса/Module.bsl @@ -65,10 +65,8 @@ Если ТекущаяПопытка = КоличествоПопыток Тогда ШаблонКомментария = НСтр("ru = 'Не удалось установить блокировку области данных по причине: |%1'"); - ТекстКомментария = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонКомментария, - ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); - ЗаписьЖурналаРегистрации( - НСтр("ru = 'Блокировка области данных'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), + ТекстКомментария = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонКомментария, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); + ЗаписьЖурналаРегистрации(СобытиеЖурналаРегистрацииБлокировкаОбластиДанных(), УровеньЖурналаРегистрации.Ошибка, , , @@ -76,8 +74,7 @@ ШаблонТекста = НСтр("ru = 'Не удалось установить блокировку области данных по причине: |%1'"); - Текст = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонТекста, - КраткоеПредставлениеОшибки(ИнформацияОбОшибке())); + Текст = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонТекста, КраткоеПредставлениеОшибки(ИнформацияОбОшибке())); ВызватьИсключение(Текст); КонецЕсли; @@ -174,10 +171,10 @@ ПространствоБлокировки = ПространствоБлокировки + ".Записи"; - ИначеЕсли ЭтоПолноеИмяЖурналаДокументов(ПолноеИмяОбъектаМетаданных) ИЛИ - ЭтоПолноеИмяПеречисления(ПолноеИмяОбъектаМетаданных) ИЛИ - ЭтоПолноеИмяПоследовательности(ПолноеИмяОбъектаМетаданных) ИЛИ - ЭтоПолноеИмяРегламентногоЗадания(ПолноеИмяОбъектаМетаданных) Тогда + ИначеЕсли ЭтоПолноеИмяЖурналаДокументов(ПолноеИмяОбъектаМетаданных) + ИЛИ ЭтоПолноеИмяПеречисления(ПолноеИмяОбъектаМетаданных) + ИЛИ ЭтоПолноеИмяПоследовательности(ПолноеИмяОбъектаМетаданных) + ИЛИ ЭтоПолноеИмяРегламентногоЗадания(ПолноеИмяОбъектаМетаданных) Тогда Продолжить; @@ -258,7 +255,11 @@ Попытка МенеджерЗаписи = ПолучитьМенеджерЗаписиОбластиДанных(ОбластьДанных, Перечисления.СтатусыОбластейДанных.Новая); - ПользователиСлужебный.АвторизоватьТекущегоПользователя(); + Если ТекущийРежимЗапуска() <> Неопределено Тогда + + ПользователиСлужебный.АвторизоватьТекущегоПользователя(); + + КонецЕсли; СообщениеОбОшибке = ""; Если Не ЗначениеЗаполнено(Вариант) Тогда @@ -317,13 +318,13 @@ Попытка ИмяФайлаВыгрузки = МодульВыгрузкаЗагрузкаОбластейДанных.ВыгрузитьТекущуюОбластьДанныхВАрхив(); Исключение - ЗаписьЖурналаРегистрации(НСтр("ru = 'Копирование области данных'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), + ЗаписьЖурналаРегистрации(СобытиеЖурналаРегистрацииКопированиеОбластиДанных(), УровеньЖурналаРегистрации.Ошибка, , , ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); Если ИмяФайлаВыгрузки <> Неопределено Тогда Попытка УдалитьФайлы(ИмяФайлаВыгрузки); Исключение - ЗаписьЖурналаРегистрации(НСтр("ru = 'Копирование области данных'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), + ЗаписьЖурналаРегистрации(СобытиеЖурналаРегистрацииКопированиеОбластиДанных(), УровеньЖурналаРегистрации.Ошибка, , , ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); КонецПопытки; КонецЕсли; @@ -335,12 +336,12 @@ Попытка МодульВыгрузкаЗагрузкаОбластейДанных.ЗагрузитьТекущуюОбластьДанныхИзАрхива(ИмяФайлаВыгрузки); Исключение - ЗаписьЖурналаРегистрации(НСтр("ru = 'Копирование области данных'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), + ЗаписьЖурналаРегистрации(СобытиеЖурналаРегистрацииКопированиеОбластиДанных(), УровеньЖурналаРегистрации.Ошибка, , , ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); Попытка УдалитьФайлы(ИмяФайлаВыгрузки); Исключение - ЗаписьЖурналаРегистрации(НСтр("ru = 'Копирование области данных'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), + ЗаписьЖурналаРегистрации(СобытиеЖурналаРегистрацииКопированиеОбластиДанных(), УровеньЖурналаРегистрации.Ошибка, , , ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); КонецПопытки; ВызватьИсключение; @@ -349,7 +350,7 @@ Попытка УдалитьФайлы(ИмяФайлаВыгрузки); Исключение - ЗаписьЖурналаРегистрации(НСтр("ru = 'Копирование области данных'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), + ЗаписьЖурналаРегистрации(СобытиеЖурналаРегистрацииКопированиеОбластиДанных(), УровеньЖурналаРегистрации.Ошибка, , , ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); КонецПопытки; @@ -621,7 +622,7 @@ Возврат; КонецЕсли; - ОбщегоНазначения.ПриНачалеВыполненияРегламентногоЗадания(); + ОбщегоНазначения.ПриНачалеВыполненияРегламентногоЗадания(Метаданные.РегламентныеЗадания.ОбслуживаниеОбластейДанных); МаксимальноеКоличествоПовторов = 3; @@ -734,7 +735,7 @@ // Функция ПолучитьПроксиМенеджераСервиса(Знач ПарольПользователя = Неопределено) Экспорт - АдресМенеджераСервиса = Константы.ВнутреннийАдресМенеджераСервиса.Получить(); + АдресМенеджераСервиса = ВнутреннийАдресМенеджераСервиса(); Если Не ЗначениеЗаполнено(АдресМенеджераСервиса) Тогда ВызватьИсключение(НСтр("ru = 'Не установлены параметры связи с менеджером сервиса.'")); КонецЕсли; @@ -742,8 +743,8 @@ АдресСервиса = АдресМенеджераСервиса + "/ws/ManageApplication_1_0_3_1?wsdl"; Если ПарольПользователя = Неопределено Тогда - ИмяПользователя = Константы.ИмяСлужебногоПользователяМенеджераСервиса.Получить(); - ПарольПользователя = Константы.ПарольСлужебногоПользователяМенеджераСервиса.Получить(); + ИмяПользователя = ИмяСлужебногоПользователяМенеджераСервиса(); + ПарольПользователя = ПарольСлужебногоПользователяМенеджераСервиса(); Иначе ИмяПользователя = ИмяПользователя(); КонецЕсли; @@ -814,45 +815,6 @@ КонецФункции -// Добавляет дополнительные параметры в структуру параметров работы клиента -// при работе в модели сервиса. -// -// Параметры: -// Параметры - Структура - структура параметров работы клиента. -// -Процедура ДобавитьПараметрыРаботыКлиентаВМоделиСервиса(Знач Параметры) Экспорт - - Если НЕ ОбщегоНазначенияПовтИсп.РазделениеВключено() - ИЛИ НЕ ОбщегоНазначенияПовтИсп.ДоступноИспользованиеРазделенныхДанных() Тогда - Возврат; - КонецЕсли; - - Запрос = Новый Запрос; - Запрос.Текст = - "ВЫБРАТЬ - | ПредставлениеОбластиДанных.Значение КАК Представление - |ИЗ - | Константа.ПредставлениеОбластиДанных КАК ПредставлениеОбластиДанных - |ГДЕ - | ПредставлениеОбластиДанных.ОбластьДанныхВспомогательныеДанные = &ОбластьДанныхВспомогательныеДанные"; - УстановитьПривилегированныйРежим(Истина); - Запрос.УстановитьПараметр("ОбластьДанныхВспомогательныеДанные", ОбщегоНазначения.ЗначениеРазделителяСеанса()); - // Считаем данные условно неизменяемыми. - Результат = Запрос.Выполнить(); - УстановитьПривилегированныйРежим(Ложь); - Если НЕ Результат.Пустой() Тогда - Выборка = Результат.Выбрать(); - Выборка.Следующий(); - Если ОбщегоНазначенияПовтИсп.СеансЗапущенБезРазделителей() Тогда - Параметры.Вставить("ПредставлениеОбластиДанных", - Формат(ОбщегоНазначения.ЗначениеРазделителяСеанса(), "ЧН=0; ЧГ=") + " - " + Выборка.Представление); - ИначеЕсли НЕ ПустаяСтрока(Выборка.Представление) Тогда - Параметры.Вставить("ПредставлениеОбластиДанных", Выборка.Представление); - КонецЕсли; - КонецЕсли; - -КонецПроцедуры - // Добавляет описание параметра по имени константы в таблицу параметров. // Возвращает добавленный параметр. // @@ -1023,7 +985,12 @@ // Функция ИмяСлужебногоПользователяМенеджераСервиса() Экспорт - Возврат Константы.ИмяСлужебногоПользователяМенеджераСервиса.Получить(); + УстановитьПривилегированныйРежим(Истина); + Владелец = ОбщегоНазначения.ИдентификаторОбъектаМетаданных("Константа.ВнутреннийАдресМенеджераСервиса"); + ИмяСлужебногоПользователя = ОбщегоНазначения.ПрочитатьДанныеИзБезопасногоХранилища(Владелец, "ИмяСлужебногоПользователяМенеджераСервиса", Истина); + УстановитьПривилегированныйРежим(Ложь); + + Возврат ИмяСлужебногоПользователя; КонецФункции @@ -1034,7 +1001,12 @@ // Функция ПарольСлужебногоПользователяМенеджераСервиса() Экспорт - Возврат Константы.ПарольСлужебногоПользователяМенеджераСервиса.Получить(); + УстановитьПривилегированныйРежим(Истина); + Владелец = ОбщегоНазначения.ИдентификаторОбъектаМетаданных("Константа.ВнутреннийАдресМенеджераСервиса"); + ПарольСлужебногоПользователя = ОбщегоНазначения.ПрочитатьДанныеИзБезопасногоХранилища(Владелец, "ПарольСлужебногоПользователяМенеджераСервиса", Истина); + УстановитьПривилегированныйРежим(Ложь); + + Возврат ПарольСлужебногоПользователя; КонецФункции @@ -1110,15 +1082,15 @@ // Функция ПолучитьФайлИзХранилищаМенеджераСервиса(Знач ИДФайла) Экспорт - АдресМенеджераСервиса = Константы.ВнутреннийАдресМенеджераСервиса.Получить(); + АдресМенеджераСервиса = ВнутреннийАдресМенеджераСервиса(); Если Не ЗначениеЗаполнено(АдресМенеджераСервиса) Тогда ВызватьИсключение(НСтр("ru = 'Не установлены параметры связи с менеджером сервиса.'")); КонецЕсли; ПараметрыДоступаКХранилищу = Новый Структура; ПараметрыДоступаКХранилищу.Вставить("URL", АдресМенеджераСервиса); - ПараметрыДоступаКХранилищу.Вставить("UserName", Константы.ИмяСлужебногоПользователяМенеджераСервиса.Получить()); - ПараметрыДоступаКХранилищу.Вставить("Password", Константы.ПарольСлужебногоПользователяМенеджераСервиса.Получить()); + ПараметрыДоступаКХранилищу.Вставить("UserName", ИмяСлужебногоПользователяМенеджераСервиса()); + ПараметрыДоступаКХранилищу.Вставить("Password", ПарольСлужебногоПользователяМенеджераСервиса()); ОписаниеФайла = ПолучитьФайлИзХранилища(ИДФайла, ПараметрыДоступаКХранилищу, Истина, Истина); Если ОписаниеФайла = Неопределено Тогда @@ -1132,7 +1104,7 @@ // Менеджер сервиса устанавливает исходному файлу атрибут "Только чтение". // Унаследованный атрибут снимается, чтобы файл можно было удалить. - СвойстваФайла.УстановитьТолькоЧтение(Ложь); + СвойстваФайла.УстановитьТолькоЧтение(Ложь); Возврат СвойстваФайла.ПолноеИмя; @@ -1150,9 +1122,9 @@ Функция ПоместитьФайлВХранилищеМенеджераСервиса(Знач АдресДанныеФайл, Знач ИмяФайла = "") Экспорт ПараметрыДоступаКХранилищу = Новый Структура; - ПараметрыДоступаКХранилищу.Вставить("URL", Константы.ВнутреннийАдресМенеджераСервиса.Получить()); - ПараметрыДоступаКХранилищу.Вставить("UserName", Константы.ИмяСлужебногоПользователяМенеджераСервиса.Получить()); - ПараметрыДоступаКХранилищу.Вставить("Password", Константы.ПарольСлужебногоПользователяМенеджераСервиса.Получить()); + ПараметрыДоступаКХранилищу.Вставить("URL", ВнутреннийАдресМенеджераСервиса()); + ПараметрыДоступаКХранилищу.Вставить("UserName", ИмяСлужебногоПользователяМенеджераСервиса()); + ПараметрыДоступаКХранилищу.Вставить("Password", ПарольСлужебногоПользователяМенеджераСервиса()); Возврат ПоместитьФайлВХранилище(АдресДанныеФайл, ПараметрыДоступаКХранилищу, ИмяФайла); @@ -1162,6 +1134,23 @@ #Область СлужебныйПрограммныйИнтерфейс +// Параметры: +// ЗаданиеМетаданные - ОбъектМетаданных - метаданные предопределенного регламентного задания. +// Использование - Булево - Истина, если задание нужно включить, иначе Ложь. +// +Процедура УстановитьИспользованиеПредопределенногоРегламентногоЗадания(ЗаданиеМетаданные, Использование) Экспорт + + Шаблон = ОчередьЗаданий.ШаблонПоИмени(ЗаданиеМетаданные.Имя); + + ОтборЗадания = Новый Структура; + ОтборЗадания.Вставить("Шаблон", Шаблон); + Задания = ОчередьЗаданий.ПолучитьЗадания(ОтборЗадания); + + ПараметрыЗадания = Новый Структура("Использование", Использование); + ОчередьЗаданий.ИзменитьЗадание(Задания[0].Идентификатор, ПараметрыЗадания); + +КонецПроцедуры + // Проверяет возможность использования конфигурации в модели сервиса. // При невозможности использования - генерируется исключение с указанием причины, // из-за которой использование конфигурации в модели сервиса невозможно. @@ -1211,8 +1200,7 @@ НСтр("ru = 'Невозможно выполнить операцию по причине - в конфигурации не внедрена подсистема ""%1"". |Данная подсистема поставляется в состав библиотеки технологии сервиса, которая должна отдельно внедряться в состав конфигурации. |Проверьте наличие и корректность внедрения подсистемы ""%1"".'"), - ИмяПодсистемы - ); + ИмяПодсистемы); КонецПроцедуры @@ -1353,19 +1341,26 @@ "РаботаВМоделиСервиса"); СерверныеОбработчики[ - "СтандартныеПодсистемы.БазоваяФункциональность\ПриДобавленииПараметровРаботыКлиентскойЛогикиСтандартныхПодсистемПриЗапуске"].Добавить( + "СтандартныеПодсистемы.БазоваяФункциональность\ПриДобавленииПараметровРаботыКлиентаПриЗапуске"].Добавить( "РаботаВМоделиСервиса"); СерверныеОбработчики[ - "СтандартныеПодсистемы.БазоваяФункциональность\ПриДобавленииПараметровРаботыКлиентскойЛогикиСтандартныхПодсистем"].Добавить( + "СтандартныеПодсистемы.БазоваяФункциональность\ПриДобавленииПараметровРаботыКлиента"].Добавить( "РаботаВМоделиСервиса"); Если ОбщегоНазначения.ПодсистемаСуществует("ТехнологияСервиса.ВыгрузкаЗагрузкаДанных") Тогда СерверныеОбработчики[ "ТехнологияСервиса.ВыгрузкаЗагрузкаДанных\ПриЗаполненииТиповИсключаемыхИзВыгрузкиЗагрузки"].Добавить( "РаботаВМоделиСервиса"); + СерверныеОбработчики[ + "ТехнологияСервиса.ВыгрузкаЗагрузкаДанных\ПослеЗагрузкиДанных"].Добавить( + "РаботаВМоделиСервиса"); КонецЕсли; + СерверныеОбработчики[ + "СтандартныеПодсистемы.РаботаВМоделиСервиса\ПриУстановкеЗначенийПараметровИБ"].Добавить( + "РаботаВМоделиСервиса"); + КонецПроцедуры //////////////////////////////////////////////////////////////////////////////// @@ -1433,25 +1428,18 @@ И ОбщегоНазначенияПовтИсп.ДоступноИспользованиеРазделенныхДанных() И НЕ ОбщегоНазначенияПовтИсп.СеансЗапущенБезРазделителей() Тогда - РазделениеПереключено = Неопределено; - Попытка - ПараметрыСеанса.ОбластьДанныхИспользование = Ложь; // Особый случай, стандартную функцию использовать нельзя. - РазделениеПереключено = Истина; - Исключение - // На правильно опубликованной ИБ ожидается ошибка нарушения прав доступа. - РазделениеПереключено = Ложь; - КонецПопытки; - - Если РазделениеПереключено Тогда - // Не установлен режим безопасного разделения данных. - ЗаписьЖурналаРегистрации(НСтр("ru = 'Ошибка публикации'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), - УровеньЖурналаРегистрации.Ошибка, - , - , - НСтр("ru = 'При публикации не включен режим безопасного разделения данных'")); - ВызватьИсключение(НСтр("ru = 'Информационная база опубликована некорректно. Работа сеанса будет прекращена.'")); + Если НЕ БезопасныйРежимРазделенияДанных(РазделительВспомогательныхДанных()) Тогда + + УстановитьБезопасныйРежимРазделенияДанных(РазделительВспомогательныхДанных(), Истина); + КонецЕсли; + Если НЕ БезопасныйРежимРазделенияДанных(РазделительОсновныхДанных()) Тогда + + УстановитьБезопасныйРежимРазделенияДанных(РазделительОсновныхДанных(), Истина); + + КонецЕсли; + КонецЕсли; КонецПроцедуры @@ -1886,8 +1874,7 @@ Возврат ЭтоПолноеИмяРегистраСведений(ПолноеИмя) ИЛИ ЭтоПолноеИмяРегистраНакопления(ПолноеИмя) ИЛИ ЭтоПолноеИмяРегистраБухгалтерии(ПолноеИмя) - ИЛИ ЭтоПолноеИмяРегистраРасчета(ПолноеИмя) - ; + ИЛИ ЭтоПолноеИмяРегистраРасчета(ПолноеИмя); КонецФункции @@ -1909,8 +1896,7 @@ ИЛИ ЭтоПолноеИмяПланаСчетов(ПолноеИмя) ИЛИ ЭтоПолноеИмяПланаОбмена(ПолноеИмя) ИЛИ ЭтоПолноеИмяПланаВидовХарактеристик(ПолноеИмя) - ИЛИ ЭтоПолноеИмяПланаВидовРасчета(ПолноеИмя) - ; + ИЛИ ЭтоПолноеИмяПланаВидовРасчета(ПолноеИмя); КонецФункции @@ -1928,7 +1914,7 @@ ИначеЕсли ЭтоПолноеИмяПерерасчета(ПолноеИмяОбъектаМетаданных) Тогда - Подстроки = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(ПолноеИмяОбъектаМетаданных, "."); + Подстроки = СтрРазделить(ПолноеИмяОбъектаМетаданных, "."); Результат.Таблица = Подстроки[0] + "." + Подстроки[1] + "." + Подстроки[3]; Результат.ИмяПоляРегистратор = "ОбъектПерерасчета"; @@ -1944,6 +1930,87 @@ КонецФункции +// Для внутреннего использования. +// +Функция ОбластьДанныхОсновныеДанныеСостав() Экспорт + Возврат Метаданные.ОбщиеРеквизиты.ОбластьДанныхОсновныеДанные.Состав; +КонецФункции + +// Для внутреннего использования. +// +Функция ПолучитьОбластиДанныхРезультатЗапроса() Экспорт + Запрос = Новый Запрос(); + Запрос.Текст = + "ВЫБРАТЬ + | ОбластиДанных.ОбластьДанныхВспомогательныеДанные КАК ОбластьДанных + |ИЗ + | РегистрСведений.ОбластиДанных КАК ОбластиДанных + |ГДЕ + | ОбластиДанных.Статус = ЗНАЧЕНИЕ(Перечисление.СтатусыОбластейДанных.Используется) + |УПОРЯДОЧИТЬ ПО + | ОбластьДанных"; + + Результат = Запрос.Выполнить(); + + Возврат Результат; +КонецФункции + +// Для внутреннего использования. +// +Функция СобытиеЖурналаРегистрацииКопированиеОбластиДанных() Экспорт + + Возврат НСтр("ru = 'Работа в модели сервиса.Копирование области данных'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()); + +КонецФункции + +// Для внутреннего использования. +// +Функция СобытиеЖурналаРегистрацииБлокировкаОбластиДанных() Экспорт + + Возврат НСтр("ru = 'Работа в модели сервиса.Блокировка области данных'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()); + +КонецФункции + +// Для внутреннего использования. +// +Функция СобытиеЖурналаРегистрацииПодготовкаОбластиДанных() Экспорт + + Возврат НСтр("ru = 'Работа в модели сервиса.Подготовка области данных'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()); + +КонецФункции + +// Для внутреннего использования. +// +Функция СобытиеЖурналаРегистрацииПолучениеФайлаИзХранилища() Экспорт + + Возврат НСтр("ru = 'Работа в модели сервиса.Получение файла из хранилища'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()); + +КонецФункции + +// Для внутреннего использования. +// +Функция СобытиеЖурналаРегистрацииДобавлениеФайлаОбменЧерезФС() Экспорт + + Возврат НСтр("ru = 'Работа в модели сервиса.Добавление файла.Обмен через ФС'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()); + +КонецФункции + +// Для внутреннего использования. +// +Функция СобытиеЖурналаРегистрацииДобавлениеФайлаОбменНеЧерезФС() Экспорт + + Возврат НСтр("ru = 'Работа в модели сервиса.Добавление файла.Обмен не через ФС'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()); + +КонецФункции + +// Для внутреннего использования. +// +Функция СобытиеЖурналаРегистрацииУдалениеВременногоФайла() Экспорт + + Возврат НСтр("ru = 'Работа в модели сервиса.Удаление временного файла'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()); + +КонецФункции + #КонецОбласти #Область СлужебныеПроцедурыИФункции @@ -1975,7 +2042,7 @@ ОбщийВременныйКаталог = СокрЛП(ОбщийВременныйКаталог); КонецЕсли; - Если Прав(ОбщийВременныйКаталог, 1) <> РазделительПути Тогда + Если Не СтрЗаканчиваетсяНа(ОбщийВременныйКаталог, РазделительПути) Тогда ОбщийВременныйКаталог = ОбщийВременныйКаталог + РазделительПути; КонецЕсли; @@ -2022,7 +2089,7 @@ ЗафиксироватьТранзакцию(); Исключение ОтменитьТранзакцию(); - ЗаписьЖурналаРегистрации(НСтр("ru = 'Подготовка области данных'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), + ЗаписьЖурналаРегистрации(СобытиеЖурналаРегистрацииПодготовкаОбластиДанных(), УровеньЖурналаРегистрации.Ошибка, , , ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); ВызватьИсключение; КонецПопытки; @@ -2056,7 +2123,7 @@ МенеджерЗаписи.Статус = Перечисления.СтатусыОбластейДанных.Удалена; ТипСообщения = СообщенияКонтрольУдаленногоАдминистрированияИнтерфейс.СообщениеОбластьДанныхУдалена(); ИначеЕсли РезультатПодготовки = "ФатальнаяОшибка" Тогда - ЗаписьЖурналаРегистрации(НСтр("ru = 'Подготовка области данных'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), + ЗаписьЖурналаРегистрации(СобытиеЖурналаРегистрацииПодготовкаОбластиДанных(), УровеньЖурналаРегистрации.Ошибка, , , СообщениеОбОшибке); МенеджерЗаписи.ОшибкаОбработки = Истина; ТипСообщения = СообщенияКонтрольУдаленногоАдминистрированияИнтерфейс.СообщениеОшибкаПодготовкиОбластиДанных(); @@ -2166,7 +2233,7 @@ Попытка УдалитьФайлы(ИмяФайлаВыгрузки); Исключение - ЗаписьЖурналаРегистрации(НСтр("ru = 'Подготовка области данных'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), + ЗаписьЖурналаРегистрации(СобытиеЖурналаРегистрацииПодготовкаОбластиДанных(), УровеньЖурналаРегистрации.Ошибка, , , ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); КонецПопытки; Возврат Результат; @@ -2179,7 +2246,7 @@ Функция ПроверкаТипаОбъектаМетаданныхПоПолномуИмени(Знач ПолноеИмя, Знач РусскаяЛокализация, Знач АнглийскаяЛокализация, Знач ПозицияПодстроки = 0) - Подстроки = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(ПолноеИмя, "."); + Подстроки = СтрРазделить(ПолноеИмя, "."); Если Подстроки.Количество() > ПозицияПодстроки Тогда ИмяТипа = Подстроки.Получить(ПозицияПодстроки); Возврат ИмяТипа = РусскаяЛокализация ИЛИ ИмяТипа = АнглийскаяЛокализация; @@ -2298,9 +2365,9 @@ // Параметры: // Параметры - Структура - структура параметров. // -Процедура ПриДобавленииПараметровРаботыКлиентскойЛогикиСтандартныхПодсистемПриЗапуске(Параметры) Экспорт +Процедура ПриДобавленииПараметровРаботыКлиентаПриЗапуске(Параметры) Экспорт - ДобавитьПараметрыРаботыКлиентаВМоделиСервиса(Параметры); + ПриДобавленииПараметровРаботыКлиента(Параметры); КонецПроцедуры @@ -2310,9 +2377,36 @@ // Параметры: // Параметры - Структура - структура параметров. // -Процедура ПриДобавленииПараметровРаботыКлиентскойЛогикиСтандартныхПодсистем(Параметры) Экспорт +Процедура ПриДобавленииПараметровРаботыКлиента(Параметры) Экспорт - ДобавитьПараметрыРаботыКлиентаВМоделиСервиса(Параметры); + Если НЕ ОбщегоНазначенияПовтИсп.РазделениеВключено() + ИЛИ НЕ ОбщегоНазначенияПовтИсп.ДоступноИспользованиеРазделенныхДанных() Тогда + Возврат; + КонецЕсли; + + Запрос = Новый Запрос; + Запрос.Текст = + "ВЫБРАТЬ + | ПредставлениеОбластиДанных.Значение КАК Представление + |ИЗ + | Константа.ПредставлениеОбластиДанных КАК ПредставлениеОбластиДанных + |ГДЕ + | ПредставлениеОбластиДанных.ОбластьДанныхВспомогательныеДанные = &ОбластьДанныхВспомогательныеДанные"; + УстановитьПривилегированныйРежим(Истина); + Запрос.УстановитьПараметр("ОбластьДанныхВспомогательныеДанные", ОбщегоНазначения.ЗначениеРазделителяСеанса()); + // Считаем данные условно неизменяемыми. + Результат = Запрос.Выполнить(); + УстановитьПривилегированныйРежим(Ложь); + Если НЕ Результат.Пустой() Тогда + Выборка = Результат.Выбрать(); + Выборка.Следующий(); + Если ОбщегоНазначенияПовтИсп.СеансЗапущенБезРазделителей() Тогда + Параметры.Вставить("ПредставлениеОбластиДанных", + Формат(ОбщегоНазначения.ЗначениеРазделителяСеанса(), "ЧН=0; ЧГ=") + " - " + Выборка.Представление); + ИначеЕсли НЕ ПустаяСтрока(Выборка.Представление) Тогда + Параметры.Вставить("ПредставлениеОбластиДанных", Выборка.Представление); + КонецЕсли; + КонецЕсли; КонецПроцедуры @@ -2347,6 +2441,51 @@ КонецПроцедуры +// Вызывается перед попыткой записи значений параметров ИБ в одноименные +// константы. +// +// Параметры: +// ЗначенияПараметров - Структура - значения параметров которые требуется установить. +// В случае если значение параметра устанавливается в данной процедуре из структуры +// необходимо удалить соответствующую пару КлючИЗначение. +// +Процедура ПриУстановкеЗначенийПараметровИБ(Знач ЗначенияПараметров) Экспорт + + // Для служебного пользователя Менеджера сервиса + Владелец = ОбщегоНазначения.ИдентификаторОбъектаМетаданных("Константа.ВнутреннийАдресМенеджераСервиса"); + Если ЗначенияПараметров.Свойство("ИмяСлужебногоПользователяМенеджераСервиса") Тогда + УстановитьПривилегированныйРежим(Истина); + ОбщегоНазначения.ЗаписатьДанныеВБезопасноеХранилище(Владелец, ЗначенияПараметров.ИмяСлужебногоПользователяМенеджераСервиса, "ИмяСлужебногоПользователяМенеджераСервиса"); + УстановитьПривилегированныйРежим(Ложь); + ЗначенияПараметров.Удалить("ИмяСлужебногоПользователяМенеджераСервиса"); + КонецЕсли; + + Если ЗначенияПараметров.Свойство("ПарольСлужебногоПользователяМенеджераСервиса") Тогда + УстановитьПривилегированныйРежим(Истина); + ОбщегоНазначения.ЗаписатьДанныеВБезопасноеХранилище(Владелец, ЗначенияПараметров.ПарольСлужебногоПользователяМенеджераСервиса, "ПарольСлужебногоПользователяМенеджераСервиса"); + УстановитьПривилегированныйРежим(Ложь); + ЗначенияПараметров.Удалить("ПарольСлужебногоПользователяМенеджераСервиса"); + КонецЕсли; + +КонецПроцедуры + +// Вызывается после загрузки данных. +// +// Параметры: +// Контейнер - ОбработкаОбъект.ВыгрузкаЗагрузкаДанныхМенеджерКонтейнера - менеджер +// контейнера, используемый в процессе загрузки данных. Подробнее см. комментарий +// к программному интерфейсу обработки ВыгрузкаЗагрузкаДанныхМенеджерКонтейнера. +Процедура ПослеЗагрузкиДанных(Контейнер) Экспорт + + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.УправлениеИтогамиИАгрегатами") Тогда + + МодульУправлениеИтогамиИАгрегатамиСлужебный = ОбщегоНазначения.ОбщийМодуль("УправлениеИтогамиИАгрегатамиСлужебный"); + МодульУправлениеИтогамиИАгрегатамиСлужебный.УстановитьПериодРассчитанныхИтогов(); + + КонецЕсли; + +КонецПроцедуры + //////////////////////////////////////////////////////////////////////////////// // Вызовы в другие подсистемы @@ -2368,20 +2507,30 @@ ДобавитьКонстантуВТаблицуПараметровИБ(ТаблицаПараметров, "ВнутреннийАдресМенеджераСервиса"); - ДобавитьКонстантуВТаблицуПараметровИБ(ТаблицаПараметров, "ИмяСлужебногоПользователяМенеджераСервиса"); + СтрокаПараметра = ТаблицаПараметров.Добавить(); + СтрокаПараметра.Имя = "ИмяСлужебногоПользователяМенеджераСервиса"; + СтрокаПараметра.Описание = "ИмяСлужебногоПользователяМенеджераСервиса"; + СтрокаПараметра.Тип = Новый ОписаниеТипов("Строка"); - СтрокаПараметра = ДобавитьКонстантуВТаблицуПараметровИБ(ТаблицаПараметров, "ПарольСлужебногоПользователяМенеджераСервиса"); + СтрокаПараметра = ТаблицаПараметров.Добавить(); + СтрокаПараметра.Имя = "ПарольСлужебногоПользователяМенеджераСервиса"; + СтрокаПараметра.Описание = "ПарольСлужебногоПользователяМенеджераСервиса"; + СтрокаПараметра.Тип = Новый ОписаниеТипов("Строка"); СтрокаПараметра.ЗапретЧтения = Истина; // Для совместимости с предыдущими версиями. СтрокаПараметра = ДобавитьКонстантуВТаблицуПараметровИБ(ТаблицаПараметров, "ВнутреннийАдресМенеджераСервиса"); СтрокаПараметра.Имя = "URLСервиса"; - СтрокаПараметра = ДобавитьКонстантуВТаблицуПараметровИБ(ТаблицаПараметров, "ИмяСлужебногоПользователяМенеджераСервиса"); + СтрокаПараметра = ТаблицаПараметров.Добавить(); СтрокаПараметра.Имя = "ИмяСлужебногоПользователяСервиса"; + СтрокаПараметра.Описание = "ИмяСлужебногоПользователяСервиса"; + СтрокаПараметра.Тип = Новый ОписаниеТипов("Строка"); - СтрокаПараметра = ДобавитьКонстантуВТаблицуПараметровИБ(ТаблицаПараметров, "ПарольСлужебногоПользователяМенеджераСервиса"); + СтрокаПараметра = ТаблицаПараметров.Добавить(); СтрокаПараметра.Имя = "ПарольСлужебногоПользователяСервиса"; + СтрокаПараметра.Описание = "ПарольСлужебногоПользователяСервиса"; + СтрокаПараметра.Тип = Новый ОписаниеТипов("Строка"); СтрокаПараметра.ЗапретЧтения = Истина; // Конец Для совместимости с предыдущими версиями. @@ -2480,7 +2629,7 @@ Попытка УдалитьФайлы(СвойстваФайла.ПолноеИмя); Исключение - ЗаписьЖурналаРегистрации(НСтр("ru = 'Получение файла из хранилища'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), + ЗаписьЖурналаРегистрации(СобытиеЖурналаРегистрацииПолучениеФайлаИзХранилища(), УровеньЖурналаРегистрации.Ошибка,,, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); КонецПопытки; КонецЕсли; @@ -2497,7 +2646,7 @@ ОбменЧерезФС = Ложь; КонецЕсли; Исключение - ЗаписьЖурналаРегистрации(НСтр("ru = 'Получение файла из хранилища'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), + ЗаписьЖурналаРегистрации(СобытиеЖурналаРегистрацииПолучениеФайлаИзХранилища(), УровеньЖурналаРегистрации.Ошибка,,, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); ОбменЧерезФС = Ложь; КонецПопытки; @@ -2548,45 +2697,120 @@ ИмяАрхива = ПолучитьИмяВременногоФайла("zip"); - ОбъединитьФайлы(ИменаФайлов, ИмяАрхива); + Попытка - Разархиватор = Новый ЧтениеZipФайла(ИмяАрхива); - Если Разархиватор.Элементы.Количество() > 1 Тогда - ВызватьИсключение(НСтр("ru = 'В полученном архиве содержится более одного файла'")); + ОбъединитьФайлы(ИменаФайлов, ИмяАрхива); + ФайлОбъединен = Истина; + + Исключение + + ФайлОбъединен = Ложь; + ЗаписьЖурналаРегистрации(НСтр("ru = 'Выполнение операции объединения файлов'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), + УровеньЖурналаРегистрации.Ошибка,,, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); + + КонецПопытки; + + Если ФайлОбъединен Тогда + + Попытка + + ЧтениеZipФайла = Новый ЧтениеZipФайла(ИмяАрхива); + ПрочитанZipФайл = Истина; + + Исключение + + ПрочитанZipФайл = Ложь; + ЗаписьЖурналаРегистрации(НСтр("ru = 'Выполнение операции чтения zip файла'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), + УровеньЖурналаРегистрации.Ошибка,,, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); + + КонецПопытки; + + Если ПрочитанZipФайл Тогда + + ВПолученномАрхивеБолееОдногоФайла = ЧтениеZipФайла.Элементы.Количество() > 1; + + Если НЕ ВПолученномАрхивеБолееОдногоФайла Тогда + + ИмяФайла = КаталогСборки + ЧтениеZipФайла.Элементы[0].Имя; + ЧтениеZipФайла.Извлечь(ЧтениеZipФайла.Элементы[0], КаталогСборки); + ЧтениеZipФайла.Закрыть(); + + ФайлРезультата = Новый Файл(ПолучитьИмяВременногоФайла()); + ПереместитьФайл(ИмяФайла, ФайлРезультата.ПолноеИмя); + РазмерПолученногоФайла = ФайлРезультата.Размер(); + + ОписаниеФайла = СоздатьОписаниеФайла(); + ОписаниеФайла.Имя = ФайлРезультата.Имя; + + Если ПутьВместоДанных Тогда + + ОписаниеФайла.Данные = Неопределено; + ОписаниеФайла.ПолноеИмя = ФайлРезультата.ПолноеИмя; + + Иначе + + ОписаниеФайла.Данные = Новый ДвоичныеДанные(ФайлРезультата.ПолноеИмя); + ОписаниеФайла.ПолноеИмя = Неопределено; + + Попытка + + УдалитьФайлы(ФайлРезультата.ПолноеИмя); + + Исключение + + ЗаписьЖурналаРегистрации(СобытиеЖурналаРегистрацииПолучениеФайлаИзХранилища(), + УровеньЖурналаРегистрации.Ошибка,,, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); + + КонецПопытки; + + КонецЕсли; + + КонецЕсли; + + КонецЕсли; + КонецЕсли; - ИмяФайла = КаталогСборки + Разархиватор.Элементы[0].Имя; - Разархиватор.Извлечь(Разархиватор.Элементы[0], КаталогСборки); - Разархиватор.Закрыть(); + ФайлВременный = Новый Файл(ИмяАрхива); - ФайлРезультата = Новый Файл(ПолучитьИмяВременногоФайла()); - ПереместитьФайл(ИмяФайла, ФайлРезультата.ПолноеИмя); - РазмерПолученногоФайла = ФайлРезультата.Размер(); - - ОписаниеФайла = СоздатьОписаниеФайла(); - ОписаниеФайла.Имя = ФайлРезультата.Имя; - - Если ПутьВместоДанных Тогда - ОписаниеФайла.Данные = Неопределено; - ОписаниеФайла.ПолноеИмя = ФайлРезультата.ПолноеИмя; - Иначе - ОписаниеФайла.Данные = Новый ДвоичныеДанные(ФайлРезультата.ПолноеИмя); - ОписаниеФайла.ПолноеИмя = Неопределено; + Если ФайлВременный.Существует() Тогда + Попытка - УдалитьФайлы(ФайлРезультата.ПолноеИмя); + + ФайлВременный.УстановитьТолькоЧтение(Ложь); + УдалитьФайлы(ИмяАрхива); + Исключение - ЗаписьЖурналаРегистрации(НСтр("ru = 'Получение файла из хранилища'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), + + ЗаписьЖурналаРегистрации(НСтр("ru = 'Выполнение операции удаления временного файла'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), УровеньЖурналаРегистрации.Ошибка,,, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); + КонецПопытки; + КонецЕсли; Попытка - УдалитьФайлы(ИмяАрхива); + УдалитьФайлы(КаталогСборки); + Исключение - ЗаписьЖурналаРегистрации(НСтр("ru = 'Получение файла из хранилища'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), + + ЗаписьЖурналаРегистрации(СобытиеЖурналаРегистрацииПолучениеФайлаИзХранилища(), УровеньЖурналаРегистрации.Ошибка,,, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); + КонецПопытки; + + Если НЕ ПрочитанZipФайл Тогда + + ВызватьИсключение(НСтр("ru = 'При чтении zip файла произошла ошибка.'")); + + КонецЕсли; + + Если ВПолученномАрхивеБолееОдногоФайла Тогда + + ВызватьИсключение(НСтр("ru = 'В полученном архиве содержится более одного файла.'")); + + КонецЕсли; ЗаписатьВЖурналСобытиеФайловогоХранилища( НСтр("ru = 'Извлечение'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), @@ -2661,7 +2885,7 @@ ТекущаяУниверсальнаяДата() - НачалоВыполнения, ОбменЧерезФС); Исключение - ЗаписьЖурналаРегистрации(НСтр("ru = 'Добавление файла.Обмен через ФС'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), + ЗаписьЖурналаРегистрации(СобытиеЖурналаРегистрацииДобавлениеФайлаОбменЧерезФС(), УровеньЖурналаРегистрации.Ошибка,,, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); ОбменЧерезФС = Ложь; КонецПопытки; @@ -2684,7 +2908,8 @@ КопироватьФайл(СвойстваФайла.ПолноеИмя, ПолноеИмяФайла); Иначе ВызватьИсключение(СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Добавление файла в хранилище. Не найден файл %1.'"), СвойстваФайла.ПолноеИмя)); + НСтр("ru = 'Добавление файла в хранилище. Не найден файл %1.'"), + СвойстваФайла.ПолноеИмя)); КонецЕсли; Иначе Описание.Данные.Записать(ПолноеИмяФайла); @@ -2706,7 +2931,7 @@ Попытка УдалитьФайлы(ИмяНеразделенногоФайла); Исключение - ЗаписьЖурналаРегистрации(НСтр("ru = 'Добавление файла.Обмен не через ФС'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), + ЗаписьЖурналаРегистрации(СобытиеЖурналаРегистрацииДобавлениеФайлаОбменНеЧерезФС(), УровеньЖурналаРегистрации.Ошибка,,, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); КонецПопытки; @@ -2719,7 +2944,7 @@ Попытка УдалитьФайлы(ИмяФайлаЧасти); Исключение - ЗаписьЖурналаРегистрации(НСтр("ru = 'Добавление файла.Обмен не через ФС'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), + ЗаписьЖурналаРегистрации(СобытиеЖурналаРегистрацииДобавлениеФайлаОбменНеЧерезФС(), УровеньЖурналаРегистрации.Ошибка,,, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); КонецПопытки; ОписаниеПрокси.Прокси.PutFilePart(ИдентификаторПередачи, НомерЧасти, ДанныеФайла, КоличествоЧастей); @@ -2731,7 +2956,7 @@ Попытка УдалитьФайлы(ИмяФайлаЧасти); Исключение - ЗаписьЖурналаРегистрации(НСтр("ru = 'Добавление файла.Обмен не через ФС'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), + ЗаписьЖурналаРегистрации(СобытиеЖурналаРегистрацииДобавлениеФайлаОбменНеЧерезФС(), УровеньЖурналаРегистрации.Ошибка,,, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); КонецПопытки; ОписаниеПрокси.Прокси.PutFilePart(ИдентификаторПередачи, НомерЧасти, ДанныеФайла); @@ -2741,7 +2966,7 @@ Попытка УдалитьФайлы(КаталогСборки); Исключение - ЗаписьЖурналаРегистрации(НСтр("ru = 'Добавление файла.Обмен не через ФС'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), + ЗаписьЖурналаРегистрации(СобытиеЖурналаРегистрацииДобавлениеФайлаОбменНеЧерезФС(), УровеньЖурналаРегистрации.Ошибка,,, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); КонецПопытки; @@ -2870,7 +3095,7 @@ КаталогСборки = ПолучитьИмяВременногоФайла(); СоздатьКаталог(КаталогСборки); - Возврат КаталогСборки + ОбщегоНазначенияКлиентСервер.РазделительПути(); + Возврат КаталогСборки + ПолучитьРазделительПути(); КонецФункции @@ -3020,9 +3245,8 @@ Процедура УдалитьВременныеФайлы(Знач ИмяФайла) Попытка - Если Прав(ИмяФайла, 1) = "*" Тогда // Маска. - Индекс = СтроковыеФункцииКлиентСервер.НайтиСимволСКонца( - ИмяФайла, ОбщегоНазначенияКлиентСервер.РазделительПути()); + Если СтрЗаканчиваетсяНа(ИмяФайла, "*") Тогда // Маска. + Индекс = СтрНайти(ИмяФайла, ПолучитьРазделительПути(), НаправлениеПоиска.СКонца); Если Индекс > 0 Тогда ПутьКФайлу = Лев(ИмяФайла, Индекс - 1); МаскаФайла = Сред(ИмяФайла, Индекс + 1); @@ -3038,8 +3262,7 @@ КонецЕсли; КонецЕсли; Исключение - ЗаписьЖурналаРегистрации(НСтр("ru = 'Выполнение операции удаления временного файла'", - ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), + ЗаписьЖурналаРегистрации(СобытиеЖурналаРегистрацииУдалениеВременногоФайла(), УровеньЖурналаРегистрации.Ошибка,,, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); Возврат; КонецПопытки; @@ -3424,9 +3647,9 @@ ФайлДанныхНайден = Истина; Иначе СообщениеОФатальнойОшибке = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Указанный файл начальных данных не подходит для данной конфигурации. - |Дескриптор файла: %1'"), - ПоставляемыеДанные.ПолучитьОписаниеДанных(Дескриптор)); + НСтр("ru = 'Указанный файл начальных данных не подходит для данной конфигурации. + |Дескриптор файла: %1'"), + ПоставляемыеДанные.ПолучитьОписаниеДанных(Дескриптор)); Возврат "ФатальнаяОшибка"; КонецЕсли; КонецЕсли; @@ -3477,12 +3700,12 @@ Исключение - ЗаписьЖурналаРегистрации(НСтр("ru = 'Копирование области данных'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), + ЗаписьЖурналаРегистрации(СобытиеЖурналаРегистрацииКопированиеОбластиДанных(), УровеньЖурналаРегистрации.Ошибка, , , ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); Попытка УдалитьФайлы(ИмяФайлаВыгрузки); Исключение - ЗаписьЖурналаРегистрации(НСтр("ru = 'Копирование области данных'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), + ЗаписьЖурналаРегистрации(СобытиеЖурналаРегистрацииКопированиеОбластиДанных(), УровеньЖурналаРегистрации.Ошибка, , , ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); КонецПопытки; @@ -3492,7 +3715,7 @@ Попытка УдалитьФайлы(ИмяФайлаВыгрузки); Исключение - ЗаписьЖурналаРегистрации(НСтр("ru = 'Копирование области данных'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), + ЗаписьЖурналаРегистрации(СобытиеЖурналаРегистрацииКопированиеОбластиДанных(), УровеньЖурналаРегистрации.Ошибка, , , ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); КонецПопытки; @@ -3614,8 +3837,28 @@ ОчиститьВсеПараметрыСеансаКромеРазделителей(); - Если ОбщегоНазначенияПовтИсп.ДоступноИспользованиеРазделенныхДанных() Тогда - ПользователиСлужебный.АвторизоватьТекущегоПользователя(); + Если ОбщегоНазначенияПовтИсп.ДоступноИспользованиеРазделенныхДанных() + И ТекущийРежимЗапуска() <> Неопределено Тогда + + МенеджерЗаписи = РегистрыСведений.ОбластиДанных.СоздатьМенеджерЗаписи(); + МенеджерЗаписи.Прочитать(); + + Если МенеджерЗаписи.Выбран() Тогда + + Если НЕ (МенеджерЗаписи.ОшибкаОбработки + ИЛИ МенеджерЗаписи.Статус = Перечисления.СтатусыОбластейДанных.КУдалению + ИЛИ МенеджерЗаписи.Статус = Перечисления.СтатусыОбластейДанных.Удалена) Тогда + + ПользователиСлужебный.АвторизоватьТекущегоПользователя(); + + КонецЕсли; + + Иначе + + ПользователиСлужебный.АвторизоватьТекущегоПользователя(); + + КонецЕсли; + КонецЕсли; КонецПроцедуры @@ -3825,7 +4068,6 @@ ПравилаКонтроляМетаданных.Вставить(Метаданные.РегистрыНакопления, "РегистрНакопленияНаборЗаписей.%1"); ПравилаКонтроляМетаданных.Вставить(Метаданные.РегистрыРасчета, "РегистрРасчетаНаборЗаписей.%1"); ПравилаКонтроляМетаданных.Вставить(Метаданные.РегистрыСведений, "РегистрСведенийНаборЗаписей.%1"); - ПравилаКонтроляМетаданных.Вставить(Метаданные.РегламентныеЗадания); Исключения = Новый Массив(); @@ -3833,6 +4075,7 @@ Исключения.Добавить(Метаданные.Константы.БлокировкаОтправкиБыстрыхСообщений); // СтандартныеПодсистемы.ОбменДанными + Исключения.Добавить(Метаданные.РегистрыСведений.БезопасноеХранилищеДанных); Исключения.Добавить(Метаданные.РегистрыСведений.НастройкиТранспортаОбмена); Исключения.Добавить(Метаданные.РегистрыСведений.СостоянияОбменовДанными); Исключения.Добавить(Метаданные.РегистрыСведений.СостоянияУспешныхОбменовДанными); @@ -3841,6 +4084,21 @@ Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ОценкаПроизводительности") Тогда Исключения.Добавить(Метаданные.Справочники.Найти("КлючевыеОперации")); Исключения.Добавить(Метаданные.РегистрыСведений.Найти("ЗамерыВремени")); + Исключения.Добавить(Метаданные.РегистрыСведений.Найти("ЗамерыВремениТехнологические")); + КонецЕсли; + + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ЦентрМониторинга") Тогда + Исключения.Добавить(Метаданные.РегистрыСведений.Найти("ДампыПлатформы")); + Исключения.Добавить(Метаданные.РегистрыСведений.Найти("ОперацииСтатистики")); + Исключения.Добавить(Метаданные.РегистрыСведений.Найти("КомментарииСтатистики")); + Исключения.Добавить(Метаданные.РегистрыСведений.Найти("ОбластиСтатистики")); + Исключения.Добавить(Метаданные.РегистрыСведений.Найти("КомментарииОперацииСтатистики")); + Исключения.Добавить(Метаданные.РегистрыСведений.Найти("БуферОперацийСтатистики")); + Исключения.Добавить(Метаданные.РегистрыСведений.Найти("ЗамерыОперацииСтатистики")); + Исключения.Добавить(Метаданные.РегистрыСведений.Найти("ЗамерыКомментарииСтатистики")); + Исключения.Добавить(Метаданные.РегистрыСведений.Найти("ЗамерыОбластиСтатистики")); + Исключения.Добавить(Метаданные.РегистрыСведений.Найти("СтатистикаКонфигурации")); + Исключения.Добавить(Метаданные.РегистрыСведений.Найти("ПакетыДляОтправки")); КонецЕсли; СтандартныеРазделители = Новый Массив; @@ -3890,8 +4148,7 @@ Продолжить; КонецЕсли; - ТипОбъектаМетаданных = Тип(СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - КонструкторТипаОбъектовМетаданных, КонтролируемыйОбъектМетаданных.Имя)); + ТипОбъектаМетаданных = Тип(СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(КонструкторТипаОбъектовМетаданных, КонтролируемыйОбъектМетаданных.Имя)); ТребуетсяКонтроль = Истина; Для Каждого СтандартныйРазделитель Из СтандартныеРазделители Цикл diff --git a/SSL/src/CommonModules/РаботаСБанками/Module.bsl b/SSL/src/CommonModules/РаботаСБанками/Module.bsl index f88069b48..e3de10152 100644 --- a/SSL/src/CommonModules/РаботаСБанками/Module.bsl +++ b/SSL/src/CommonModules/РаботаСБанками/Module.bsl @@ -44,11 +44,6 @@ СерверныеОбработчики["СтандартныеПодсистемы.БазоваяФункциональность\ПриДобавленииПараметровРаботыКлиентаПриЗапуске"].Добавить( "РаботаСБанками"); - Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаВМоделиСервиса.ОчередьЗаданий") Тогда - СерверныеОбработчики["СтандартныеПодсистемы.РаботаВМоделиСервиса.ОчередьЗаданий\ПриОпределенииИспользованияРегламентныхЗаданий"].Добавить( - "РаботаСБанками"); - КонецЕсли; - Если ОбщегоНазначения.ПодсистемаСуществует("ТехнологияСервиса.ВыгрузкаЗагрузкаДанных") Тогда СерверныеОбработчики["ТехнологияСервиса.ВыгрузкаЗагрузкаДанных\ПриЗаполненииТиповОбщихДанныхПоддерживающихСопоставлениеСсылокПриЗагрузке"].Добавить( "РаботаСБанками"); @@ -99,6 +94,18 @@ Объекты.Вставить(Метаданные.Справочники.КлассификаторБанковРФ.ПолноеИмя(), "РеквизитыНеРедактируемыеВГрупповойОбработке"); КонецПроцедуры +//////////////////////////////////////////////////////////////////////////////// +// Обработчики условных вызовов в эту подсистему. + +// См. описание одноименной процедуры в общем модуле РегламентныеЗаданияПереопределяемый. +// +Процедура ПриОпределенииЗависимостейРегламентныхЗаданий(Зависимости) Экспорт + Зависимость = Зависимости.Добавить(); + Зависимость.РегламентноеЗадание = Метаданные.РегламентныеЗадания.ЗагрузкаКлассификатораБанковРФССайтаРБК; + Зависимость.ДоступноВМоделиСервиса = Ложь; + Зависимость.ДоступноВПодчиненномУзлеРИБ = Ложь; +КонецПроцедуры + #КонецОбласти #Область СлужебныеПроцедурыИФункции @@ -141,14 +148,13 @@ // Процедура ПриЗаполненииСпискаТекущихДел(ТекущиеДела) Экспорт - МодульТекущиеДелаСлужебный = ОбщегоНазначения.ОбщийМодуль("ТекущиеДелаСлужебный"); + МодульТекущиеДелаСервер = ОбщегоНазначения.ОбщийМодуль("ТекущиеДелаСервер"); Если ОбщегоНазначенияПовтИсп.РазделениеВключено() // В модели сервиса обновляется автоматически. Или ОбщегоНазначения.ЭтоПодчиненныйУзелРИБ() // В узле РИБ обновляется автоматически. Или Не ПравоДоступа("Изменение", Метаданные.Справочники.КлассификаторБанковРФ) - Или МодульТекущиеДелаСлужебный.ДелоОтключено("КлассификаторБанков") Тогда + Или МодульТекущиеДелаСервер.ДелоОтключено("КлассификаторБанков") Тогда Возврат; КонецЕсли; - МодульТекущиеДелаСервер = ОбщегоНазначения.ОбщийМодуль("ТекущиеДелаСервер"); Результат = АктуальностьКлассификатораБанков(); @@ -156,10 +162,6 @@ // не делается проверка существования подсистемы. Разделы = МодульТекущиеДелаСервер.РазделыДляОбъекта(Метаданные.Справочники.КлассификаторБанковРФ.ПолноеИмя()); - Если Разделы = Неопределено Тогда - Возврат; // Интерфейс по работе с банками не вынесен в командный интерфейс пользователя. - КонецЕсли; - Для Каждого Раздел Из Разделы Цикл ИдентификаторБанки = "КлассификаторБанков" + СтрЗаменить(Раздел.ПолноеИмя(), ".", ""); @@ -168,8 +170,7 @@ Дело.ЕстьДела = Результат.КлассификаторУстарел; Дело.Важное = Результат.КлассификаторПросрочен; Дело.Представление = НСтр("ru = 'Классификатор банков устарел'"); - Дело.Подсказка = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Последнее обновление %1 назад'"), Результат.ВеличинаПросрочкиСтрокой); + Дело.Подсказка = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Последнее обновление %1 назад'"), Результат.ВеличинаПросрочкиСтрокой); Дело.Форма = "Справочник.КлассификаторБанковРФ.Форма.ЗагрузкаКлассификатора"; Дело.ПараметрыФормы = Новый Структура("ОткрытиеИзСписка", Истина); Дело.Владелец = Раздел; @@ -178,22 +179,6 @@ КонецПроцедуры -// Добавляет в таблицу информацию о регламентных заданиях подсистемы для модели сервиса. -// -// Параметры: -// ТаблицаИспользования - ТаблицаЗначений - Таблица регламентных заданий. -// * РегламентноеЗадание - Строка - Имя предопределенного регламентного задания. -// * Использование - Булево - Истина, если регламентное задание должно -// выполняться в модели сервиса. -// -Процедура ПриОпределенииИспользованияРегламентныхЗаданий(ТаблицаИспользования) Экспорт - - НоваяСтрока = ТаблицаИспользования.Добавить(); - НоваяСтрока.РегламентноеЗадание = "ЗагрузкаКлассификатораБанковРФССайтаРБК"; - НоваяСтрока.Использование = Ложь; - -КонецПроцедуры - // Заполняет массив типов неразделенных данных, для которых поддерживается сопоставление ссылок // при загрузке данных в другую информационную базу. // @@ -238,8 +223,7 @@ Разрешения = Новый Массив; Разрешения.Добавить( - РаботаВБезопасномРежиме.РазрешениеНаИспользованиеИнтернетРесурса(Протокол, Адрес, Порт, Описание) - ); + РаботаВБезопасномРежиме.РазрешениеНаИспользованиеИнтернетРесурса(Протокол, Адрес, Порт, Описание)); Возврат Разрешения; @@ -267,17 +251,15 @@ Если ПараметрыЗагрузкиКлассификатора["Загружено"] > 0 Тогда - ТекстСообщения = ТекстСообщения + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru =' - |Загружено новых: %1.'"), ПараметрыЗагрузкиКлассификатора["Загружено"]); + ТекстСообщения = ТекстСообщения + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(Символы.ПС + + НСтр("ru ='Загружено новых: %1.'"), ПараметрыЗагрузкиКлассификатора["Загружено"]); КонецЕсли; Если ПараметрыЗагрузкиКлассификатора["Обновлено"] > 0 Тогда - ТекстСообщения = ТекстСообщения + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru =' - |Обновлено записей: %1.'"), ПараметрыЗагрузкиКлассификатора["Обновлено"]); + ТекстСообщения = ТекстСообщения + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(Символы.ПС + + НСтр("ru ='Обновлено записей: %1.'"), ПараметрыЗагрузкиКлассификатора["Обновлено"]); КонецЕсли; @@ -295,6 +277,7 @@ // ЗагрузкаВыполнена - Булево - флаг успешного завершения загрузки данных классификатора. // АдресХранилища - Строка - адрес внутреннего хранилища. Процедура ПолучитьДанныеРБК(ПараметрыЗагрузкиКлассификатора, АдресХранилища = "") Экспорт + ВременныйКаталог = ПолучитьИмяВременногоФайла(); СоздатьКаталог(ВременныйКаталог); @@ -417,7 +400,7 @@ // Процедура ЗагрузитьКлассификаторБанков() Экспорт - ОбщегоНазначения.ПриНачалеВыполненияРегламентногоЗадания(); + ОбщегоНазначения.ПриНачалеВыполненияРегламентногоЗадания(Метаданные.РегламентныеЗадания.ЗагрузкаКлассификатораБанковРФССайтаРБК); УровеньСобытия = УровеньЖурналаРегистрации.Информация; @@ -527,13 +510,11 @@ Иначе Если ОбщегоНазначения.ИнформационнаяБазаФайловая() Тогда - ДополнительноеСообщение = - НСтр("ru =' - |Возможно неточные или неправильные настройки подключения к Интернету.'"); + ДополнительноеСообщение = Символы.ПС + + НСтр("ru ='Возможно неточные или неправильные настройки подключения к Интернету.'"); Иначе - ДополнительноеСообщение = - НСтр("ru =' - |Возможно неточные или неправильные настройки подключения к Интернету на сервере 1С:Предприятие.'"); + ДополнительноеСообщение = Символы.ПС + + НСтр("ru ='Возможно неточные или неправильные настройки подключения к Интернету на сервере 1С:Предприятие.'"); КонецЕсли; СообщениеОбОшибке = РезультатИзИнтернета.СообщениеОбОшибке + ДополнительноеСообщение; @@ -593,7 +574,7 @@ Продолжить; КонецЕсли; - МассивПодстрок = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(Строка, Разделитель); + МассивПодстрок = СтрРазделить(Строка, Разделитель); Если МассивПодстрок.Количество() < 2 Тогда Продолжить; @@ -633,7 +614,7 @@ БИК = ""; КорСчет = ""; - МассивПодстрок = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(Строка, Разделитель); + МассивПодстрок = СтрРазделить(Строка, Разделитель); Если МассивПодстрок.Количество() < 7 Тогда Возврат ""; @@ -703,10 +684,7 @@ Для Каждого ИмяФайла Из ИменаФайловДляПроверки Цикл Файл = Новый Файл(ИмяФайла); Если Не Файл.Существует() Тогда - ЗаписатьОшибкуВЖурналРегистрации( - СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Не найден файл %1'"), - ИмяФайла)); + ЗаписатьОшибкуВЖурналРегистрации(СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Не найден файл %1'"), ИмяФайла)); Результат = Ложь; КонецЕсли; КонецЦикла; @@ -773,7 +751,7 @@ Строка = ЧтениеТекста.ПрочитатьСтроку(); Пока Строка <> Неопределено Цикл - СведенияОБанке = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(Строка, Символы.Таб); + СведенияОБанке = СтрРазделить(Строка, Символы.Таб); Если СведенияОБанке.Количество() <> 8 Тогда Продолжить; КонецЕсли; @@ -799,7 +777,7 @@ Строка = ЧтениеТекста.ПрочитатьСтроку(); Пока Строка <> Неопределено Цикл - СведенияОБанке = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(Строка, Символы.Таб); + СведенияОБанке = СтрРазделить(Строка, Символы.Таб); Если СведенияОБанке.Количество() <> 7 Тогда Продолжить; КонецЕсли; diff --git a/SSL/src/CommonModules/ПроверкаКонтрагентовКлиентПереопределяемый/Module.bsl b/SSL/src/CommonModules/РаботаСКонтрагентамиКлиентПереопределяемый/Module.bsl similarity index 92% rename from SSL/src/CommonModules/ПроверкаКонтрагентовКлиентПереопределяемый/Module.bsl rename to SSL/src/CommonModules/РаботаСКонтрагентамиКлиентПереопределяемый/Module.bsl index cb14a712a..78f55e6ec 100644 --- a/SSL/src/CommonModules/ПроверкаКонтрагентовКлиентПереопределяемый/Module.bsl +++ b/SSL/src/CommonModules/РаботаСКонтрагентамиКлиентПереопределяемый/Module.bsl @@ -1,11 +1,12 @@ //////////////////////////////////////////////////////////////////////////////// -// Проверка одного или нескольких контрагентов при помощи веб-сервиса ФНС. +// Работа с контрагентами. // //////////////////////////////////////////////////////////////////////////////// - #Область ПрограммныйИнтерфейс +#Область ПроверкаКонтрагентов + // Процедура - Определение по имени события обработки оповещения необходимости выполнить запуск проверки контрагентов. // // Параметры: @@ -23,3 +24,5 @@ КонецПроцедуры #КонецОбласти + +#КонецОбласти diff --git a/SSL/src/CommonModules/ПроверкаКонтрагентовКлиентПереопределяемый/ПроверкаКонтрагентовКлиентПереопределяемый.mdo b/SSL/src/CommonModules/РаботаСКонтрагентамиКлиентПереопределяемый/РаботаСКонтрагентамиКлиентПереопределяемый.mdo similarity index 68% rename from SSL/src/CommonModules/ПроверкаКонтрагентовКлиентПереопределяемый/ПроверкаКонтрагентовКлиентПереопределяемый.mdo rename to SSL/src/CommonModules/РаботаСКонтрагентамиКлиентПереопределяемый/РаботаСКонтрагентамиКлиентПереопределяемый.mdo index 136c70cec..f2ed2b4cf 100644 --- a/SSL/src/CommonModules/ПроверкаКонтрагентовКлиентПереопределяемый/ПроверкаКонтрагентовКлиентПереопределяемый.mdo +++ b/SSL/src/CommonModules/РаботаСКонтрагентамиКлиентПереопределяемый/РаботаСКонтрагентамиКлиентПереопределяемый.mdo @@ -1,9 +1,9 @@ <?xml version="1.0" encoding="UTF-8"?> <mdclass:CommonModule xmlns:mdclass="http://g5.1c.ru/v8/dt/metadata/mdclass" uuid="d4e53d41-9335-4a1e-a06e-410c46de1d1c"> - <name>ПроверкаКонтрагентовКлиентПереопределяемый</name> + <name>РаботаСКонтрагентамиКлиентПереопределяемый</name> <synonym> <key>ru</key> - <value>Проверка контрагентов (клиент, переопределяемый)</value> + <value>Работа с контрагентами (клиент, переопределяемый)</value> </synonym> <clientManagedApplication>true</clientManagedApplication> <clientOrdinaryApplication>true</clientOrdinaryApplication> diff --git a/SSL/src/CommonModules/ПроверкаКонтрагентовКлиентСерверПереопределяемый/Module.bsl b/SSL/src/CommonModules/РаботаСКонтрагентамиКлиентСерверПереопределяемый/Module.bsl similarity index 80% rename from SSL/src/CommonModules/ПроверкаКонтрагентовКлиентСерверПереопределяемый/Module.bsl rename to SSL/src/CommonModules/РаботаСКонтрагентамиКлиентСерверПереопределяемый/Module.bsl index 5f9a6bccc..1f994510f 100644 --- a/SSL/src/CommonModules/ПроверкаКонтрагентовКлиентСерверПереопределяемый/Module.bsl +++ b/SSL/src/CommonModules/РаботаСКонтрагентамиКлиентСерверПереопределяемый/Module.bsl @@ -1,5 +1,5 @@ //////////////////////////////////////////////////////////////////////////////// -// Проверка контрагентов +// Работа с контрагентами // //////////////////////////////////////////////////////////////////////////////// @@ -21,7 +21,7 @@ КонецПроцедуры - + // Процедура - Получение счета-фактуры, находящегося в подвале документа-основания, чья форма передана в качестве // параметра. // @@ -34,6 +34,19 @@ КонецПроцедуры +// Процедура - Возможность доопределить сформированную подсказку для формы документа. +// +// Параметры: +// Результат - Структура - содержит текст подсказки и цвет фона подсказки. +// СостояниеКонтрагента - ПеречислениеСсылка.СостоянияПроверкиКонтрагентов - текущее состояние контрагента. +// Цвета - Структура - содержит цвета, используемые при выводе информации о состоянии контрагента. +// +Процедура ПослеФормированияПодсказкиВДокументе(Результат, СостояниеКонтрагента, Цвета) Экспорт + + + +КонецПроцедуры + #КонецОбласти #Область ПроверкаКонтрагентовВОтчетах @@ -81,8 +94,7 @@ // контрагента. Процедура ОтобразитьРезультатПроверкиКонтрагентаВСправочнике(Форма, ПредставлениеРезультатаПроверки) Экспорт - // Устанавливаем текст заголовка. - Форма.РезультатПроверкиКонтрагента = ПредставлениеРезультатаПроверки; + КонецПроцедуры @@ -99,11 +111,19 @@ // Ключи: "Объект" (Тип ДанныеФормыСтруктура) и "Ссылка" (Тип ДокументСсылка, СправочникСсылка). Процедура ПолучитьОбъектИСсылкуПоФорме(Форма, Результат) Экспорт - ИсточникОбъект = Форма.Объект; - ИсточникСсылка = ИсточникОбъект.Ссылка; - Результат.Вставить("Объект", ИсточникОбъект); - Результат.Вставить("Ссылка", ИсточникСсылка); + +КонецПроцедуры + +// Возможность дополнить параметры запуска фонового задания при проверке справочника. +// +// Параметры: +// ДополнительныеПараметрыЗапуска - Структура - содержит параметры запуска. +// Форма - УправляемаяФорма - форма, из которой запускается фоновое задание +// +Процедура ДополнитьПараметрыЗапускаФоновогоЗадания(ДополнительныеПараметрыЗапуска, Форма) Экспорт + + КонецПроцедуры diff --git a/SSL/src/CommonModules/ПроверкаКонтрагентовКлиентСерверПереопределяемый/ПроверкаКонтрагентовКлиентСерверПереопределяемый.mdo b/SSL/src/CommonModules/РаботаСКонтрагентамиКлиентСерверПереопределяемый/РаботаСКонтрагентамиКлиентСерверПереопределяемый.mdo similarity index 71% rename from SSL/src/CommonModules/ПроверкаКонтрагентовКлиентСерверПереопределяемый/ПроверкаКонтрагентовКлиентСерверПереопределяемый.mdo rename to SSL/src/CommonModules/РаботаСКонтрагентамиКлиентСерверПереопределяемый/РаботаСКонтрагентамиКлиентСерверПереопределяемый.mdo index 3251b4828..3e42a7ac8 100644 --- a/SSL/src/CommonModules/ПроверкаКонтрагентовКлиентСерверПереопределяемый/ПроверкаКонтрагентовКлиентСерверПереопределяемый.mdo +++ b/SSL/src/CommonModules/РаботаСКонтрагентамиКлиентСерверПереопределяемый/РаботаСКонтрагентамиКлиентСерверПереопределяемый.mdo @@ -1,9 +1,9 @@ <?xml version="1.0" encoding="UTF-8"?> <mdclass:CommonModule xmlns:mdclass="http://g5.1c.ru/v8/dt/metadata/mdclass" uuid="4405bfaa-699a-497b-a15c-0302b86c834c"> - <name>ПроверкаКонтрагентовКлиентСерверПереопределяемый</name> + <name>РаботаСКонтрагентамиКлиентСерверПереопределяемый</name> <synonym> <key>ru</key> - <value>Проверка контрагентов (клиент-сервер, переопределяемый)</value> + <value>Работа с контрагентами (клиент-сервер, переопределяемый)</value> </synonym> <clientManagedApplication>true</clientManagedApplication> <server>true</server> diff --git a/SSL/src/CommonModules/ПроверкаКонтрагентовПереопределяемый/Module.bsl b/SSL/src/CommonModules/РаботаСКонтрагентамиПереопределяемый/Module.bsl similarity index 62% rename from SSL/src/CommonModules/ПроверкаКонтрагентовПереопределяемый/Module.bsl rename to SSL/src/CommonModules/РаботаСКонтрагентамиПереопределяемый/Module.bsl index 897e8580d..7ff513a4c 100644 --- a/SSL/src/CommonModules/ПроверкаКонтрагентовПереопределяемый/Module.bsl +++ b/SSL/src/CommonModules/РаботаСКонтрагентамиПереопределяемый/Module.bsl @@ -1,5 +1,5 @@ //////////////////////////////////////////////////////////////////////////////// -// Проверка контрагентов +// Работа с контрагентами. // //////////////////////////////////////////////////////////////////////////////// @@ -87,6 +87,58 @@ +КонецПроцедуры + +// Процедура - Возможность переопределить стандартное заполнение данных о контрагентах в счет-фактурах, созданных на основании документа +// +// Параметры: +// СтандартнаяОбработка - Булево - необходимо установить в Ложь, если стандартная обработка переопределяется. +// ДокументОбъект - Произвольный - данные содержащие информацию о счет-фактурах. +// ДанныеКонтрагентов - ТаблицаЗначений - подготавливаемая таблица с данными о контрагентах +// Форма - УправляемаяФорма, Неопределено - Форма из которой выполняется вызов. +// +Процедура ЗаполнитьДанныеКонтрагентовВСчетеФактуре(СтандартнаяОбработка, ДокументОбъект, ДанныеКонтрагентов, Форма) Экспорт + + + +КонецПроцедуры + +// Процедура - Возможность переопределить стандартное сохранение результатов проверки контрагентов счет-фактур, выписанных на основании +// документа основания в форме документа основания +// +// Параметры: +// СтандартнаяОбработка - Булево - необходимо установить в Ложь, если стандартная обработка переопределяется. +// ДанныеКонтрагентов - ТаблицаЗначений - подготавливаемая таблица с данными о контрагентах +// Форма - УправляемаяФорма, Неопределено - Форма из которой выполняется вызов. +// +Процедура ЗапомнитьРезультатПроверкиКонтрагентовСчетФактурыВДокументе(СтандартнаяОбработка, ДанныеКонтрагентов, Форма) Экспорт + + + +КонецПроцедуры + +// Процедура - Возможность дополнить структуру РеквизитыПроверкиКонтрагентов при создании в форме документа +// +// Параметры: +// Форма - УправляемаяФорма, Неопределено - Форма из которой выполняется вызов. +// НовыеРеквизиты - Структура - сформированная структура дополнительных реквизитов документа, которая может быть дополнена. +// +Процедура ДополнитьРеквизитыФормыДокумент(Форма, НовыеРеквизиты) Экспорт + + +КонецПроцедуры + +// Процедура - Возможность переопределить сохраняемые результаты проверки контрагентов в документе. +// +// Параметры: +// СтандартнаяОбработка - Булево - необходимо установить в Ложь, если стандартная обработка переопределяется. +// СохраняемоеЗначение - Соответствие - сохраняемые данные +// Форма - УправляемаяФорма, Неопределено - Форма из которой выполняется вызов. +// +Процедура СохраняемыеРезультатыПроверкиСчетФактурыВДокументе(СтандартнаяОбработка, СохраняемоеЗначение, Форма) Экспорт + + + КонецПроцедуры // Процедура - Отображения результата проверки контрагента в документе. @@ -236,19 +288,113 @@ // Процедура - Определяется, является ли контрагент иностранным. // // Параметры: -// КонтрагентСсылка - СправочникСсылка.<Справочник контрагентов>, СправочникОбъект.<Справочник контрагентов> - -// Контрагент, для которого определяется, является ли он иностранным. -// Для иностранного контрагента проверка не выполняется. -// -// ЯвляетсяИностранным - Булево - Результат проверки. -Процедура ОпределитьЯвляетсяЛиКонтрагентИностранным(КонтрагентСсылка, ЯвляетсяИностранным) Экспорт +// ДанныеКонтрагента - СтрокаТаблицыЗначений - Содержит информацию о контрагенте. +// Подробнее о колонках таблицы можно узнать в описании к процедуре ПроверкаКонтрагентов.ШаблонТаблицыДанныеКонтрагента() +// ЯвляетсяИностранным - Булево - Результат проверки. +Процедура ОпределитьЯвляетсяЛиКонтрагентИностранным(ДанныеКонтрагента, ЯвляетсяИностранным) Экспорт +КонецПроцедуры + +// Возможность дополнить структуру РеквизитыПроверкиКонтрагентов для формы справочника +// +// Параметры: +// Форма - УправляемаяФорма - форма, для которой дополняется структура РеквизитыПроверкиКонтрагентов +// НовыеРеквизиты - Структура - структура, которая транслируется в реквизит формы РеквизитыПроверкиКонтрагентов +// +Процедура ДополнитьРеквизитыФормыКонтрагент(Форма, НовыеРеквизиты) Экспорт + + + +КонецПроцедуры + +// Определяет, является ли контрагент физическим или юридическим лицом +// +// Параметры: +// СтандартнаяОбработка - Булево - если стандартный механим переопределяется, то должно быть установлено значение "Ложь". +// ЭтоЮрЛицо - Булево - Истина, если юридическое лицо, и Ложь, если физическое. +// ДанныеКонтрагента - Структура - структура, которая содержит данные обрабатываемого контрагента. +// +Процедура ОпределитьЮрИлиФизЛицоКонтрагент(СтандартнаяОбработка, ЭтоЮрЛицо, ДанныеКонтрагента) Экспорт + + + КонецПроцедуры #КонецОбласти +#Область ЗаполнениеИнформацииДляДосьеКонтрагента + +// Заполнение ссылки на контрагента по данным информации о нем для отчета "Досье контрагента". +// +// Параметры: +// Контрагент - ОпределяемыеТипы.Контрагент - ссылка на контрагента, которая должна быть заполнена. +// ИнформацияОСвязях - Структура - описание см. ДанныеЕдиныхГосРеестров.НоваяИнформацияОСвязяхЮридическогоЛица +// и ДанныеЕдиныхГосРеестров.НоваяИнформацияОСвязяхПредпринимателя. +// +Процедура ЗаполнитьКонтрагентаПоИнформацииОСвязях(Контрагент, ИнформацияОСвязях) Экспорт + + + +КонецПроцедуры + +// Заполнение таблицы расчетных счетов контрагента для вывода в отчет "Досье контрагента". +// +// Параметры: +// РасчетныеСчета - ТаблицаЗначений - заполняемая таблица. +// Структуру таблицы см. Отчеты.ДосьеКонтрагентов.НоваяТаблицаРасчетныеСчета. +// Контрагент - ОпределяемыеТипы.Контрагент - ссылка на контрагента из информационной базы. +// ИнформацияОСвязях - Структура - описание см. ДанныеЕдиныхГосРеестров.НоваяИнформацияОСвязяхЮридическогоЛица и +// ДанныеЕдиныхГосРеестров.НоваяИнформацияОСвязяхПредпринимателя. +// +Процедура ЗаполнитьРасчетныеСчетаИнформацииОСвязяхКонтрагента(РасчетныеСчета, Контрагент, ИнформацияОСвязях) Экспорт + + + +КонецПроцедуры + +// Заполнение таблицы контактных лиц контрагента для вывода в отчет "Досье контрагента". +// +// Параметры: +// КонтактныеЛица - ТаблицаЗначений - заполняемая таблица. +// Структуру таблицы см. Отчеты.ДосьеКонтрагентов.НоваяТаблицаКонтактныеЛица. +// Контрагент - ОпределяемыеТипы.Контрагент - ссылка на контрагента из информационной базы. +// ИнформацияОСвязях - Структура - описание см. ДанныеЕдиныхГосРеестров.НоваяИнформацияОСвязяхЮридическогоЛица и +// ДанныеЕдиныхГосРеестров.НоваяИнформацияОСвязяхПредпринимателя. +// +Процедура ЗаполнитьКонтактныеЛицаИнформацииОСвязяхКонтрагента(КонтактныеЛица, Контрагент, ИнформацияОСвязях) Экспорт + + + +КонецПроцедуры + +// Заполнение почтового адреса контрагента по данным информации о нем для вывода в отчет "Досье контрагента". +// +// Параметры: +// ПочтовыйАдрес - Строка - заполняемый адрес. +// Контрагент - ОпределяемыеТипы.Контрагент - ссылка на контрагента из информационной базы. +// ИнформацияОСвязях - Структура - описание см. ДанныеЕдиныхГосРеестров.НоваяИнформацияОСвязяхЮридическогоЛица и +// ДанныеЕдиныхГосРеестров.НоваяИнформацияОСвязяхПредпринимателя. +// +Процедура ЗаполнитьПочтовыйАдресИнформацииОСвязяхКонтрагента(ПочтовыйАдрес, Контрагент, ИнформацияОСвязях) Экспорт + + + +КонецПроцедуры + +// Заполнение наименований видов деятельности по ОКВЭД для вывода в отчет "Досье контрагента". +// +// Параметры: +// ВидыДеятельности - ТаблицаЗначений - см. ДанныеЕдиныхГосРеестров.НоваяТаблицаВидыДеятельности. +// В процедуре необходимо заполнить поле НаименованиеОКВЭД строк таблицы по заполненному полю КодОКВЭД. +// +Процедура ЗаполнитьНаименованияВидовДеятельностиКонтрагента(ВидыДеятельности) Экспорт + +КонецПроцедуры + +#КонецОбласти + #Область ПрочиеПроцедуры // Процедура - Определение цветов выделения результатов проверки контрагентов. diff --git a/SSL/src/CommonModules/ПроверкаКонтрагентовПереопределяемый/ПроверкаКонтрагентовПереопределяемый.mdo b/SSL/src/CommonModules/РаботаСКонтрагентамиПереопределяемый/РаботаСКонтрагентамиПереопределяемый.mdo similarity index 68% rename from SSL/src/CommonModules/ПроверкаКонтрагентовПереопределяемый/ПроверкаКонтрагентовПереопределяемый.mdo rename to SSL/src/CommonModules/РаботаСКонтрагентамиПереопределяемый/РаботаСКонтрагентамиПереопределяемый.mdo index 103eb3c8a..f64306f1a 100644 --- a/SSL/src/CommonModules/ПроверкаКонтрагентовПереопределяемый/ПроверкаКонтрагентовПереопределяемый.mdo +++ b/SSL/src/CommonModules/РаботаСКонтрагентамиПереопределяемый/РаботаСКонтрагентамиПереопределяемый.mdo @@ -1,9 +1,9 @@ <?xml version="1.0" encoding="UTF-8"?> <mdclass:CommonModule xmlns:mdclass="http://g5.1c.ru/v8/dt/metadata/mdclass" uuid="3b3e7b9d-67f8-4cf2-ad1a-29d124169691"> - <name>ПроверкаКонтрагентовПереопределяемый</name> + <name>РаботаСКонтрагентамиПереопределяемый</name> <synonym> <key>ru</key> - <value>Проверка контрагентов (сервер, переопределяемый)</value> + <value>Проверка контрагентов (переопределяемый)</value> </synonym> <server>true</server> <externalConnection>true</externalConnection> diff --git a/SSL/src/CommonModules/РаботаСКурсамиВалют/Module.bsl b/SSL/src/CommonModules/РаботаСКурсамиВалют/Module.bsl index fdf7cfa1d..e48397356 100644 --- a/SSL/src/CommonModules/РаботаСКурсамиВалют/Module.bsl +++ b/SSL/src/CommonModules/РаботаСКурсамиВалют/Module.bsl @@ -92,7 +92,7 @@ Результат = ЧислоПрописью(Сумма, "Л=ru_RU;ДП=Ложь", ПараметрыПредмета.ПараметрыПрописиНаРусском); Если ВыводитьСуммуБезКопеек И Цел(Сумма) = Сумма Тогда - Результат = Лев(Результат, Найти(Результат, "0") - 1); + Результат = Лев(Результат, СтрНайти(Результат, "0") - 1); КонецЕсли; Возврат Результат; @@ -131,11 +131,7 @@ // Процедура ЗагрузитьАктуальныйКурс(ПараметрыЗагрузки = Неопределено, АдресРезультата = Неопределено) Экспорт - Если ОбщегоНазначенияПовтИсп.РазделениеВключено() Тогда - ВызватьИсключение НСтр("ru = 'Недопустимый вызов процедуры ""ЗагрузитьАктуальныйКурс"".'"); - КонецЕсли; - - ОбщегоНазначения.ПриНачалеВыполненияРегламентногоЗадания(); + ОбщегоНазначения.ПриНачалеВыполненияРегламентногоЗадания(Метаданные.РегламентныеЗадания.ЗагрузкаКурсовВалют); ИмяСобытия = НСтр("ru = 'Валюты.Загрузка курсов валют'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()); @@ -224,11 +220,6 @@ СерверныеОбработчики["СтандартныеПодсистемы.БазоваяФункциональность\ПриДобавленииПараметровРаботыКлиентаПриЗапуске"].Добавить( "РаботаСКурсамиВалют"); - Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаВМоделиСервиса.ОчередьЗаданий") Тогда - СерверныеОбработчики["СтандартныеПодсистемы.РаботаВМоделиСервиса.ОчередьЗаданий\ПриОпределенииИспользованияРегламентныхЗаданий"].Добавить( - "РаботаСКурсамиВалют"); - КонецЕсли; - Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ТекущиеДела") Тогда СерверныеОбработчики["СтандартныеПодсистемы.ТекущиеДела\ПриЗаполненииСпискаТекущихДел"].Добавить( "РаботаСКурсамиВалют"); @@ -257,13 +248,12 @@ // Процедура ПриЗаполненииСпискаТекущихДел(ТекущиеДела) Экспорт - МодульТекущиеДелаСлужебный = ОбщегоНазначения.ОбщийМодуль("ТекущиеДелаСлужебный"); + МодульТекущиеДелаСервер = ОбщегоНазначения.ОбщийМодуль("ТекущиеДелаСервер"); Если ОбщегоНазначенияПовтИсп.РазделениеВключено() // В модели сервиса обновляется автоматически. Или Не ПравоДоступа("Изменение", Метаданные.РегистрыСведений.КурсыВалют) - Или МодульТекущиеДелаСлужебный.ДелоОтключено("КлассификаторВалют") Тогда + Или МодульТекущиеДелаСервер.ДелоОтключено("КлассификаторВалют") Тогда Возврат; КонецЕсли; - МодульТекущиеДелаСервер = ОбщегоНазначения.ОбщийМодуль("ТекущиеДелаСервер"); КурсыАктуальны = КурсыАктуальны(); @@ -271,10 +261,6 @@ // не делается проверка существования подсистемы. Разделы = МодульТекущиеДелаСервер.РазделыДляОбъекта(Метаданные.Справочники.Валюты.ПолноеИмя()); - Если Разделы = Неопределено Тогда - Возврат; // Интерфейс по работе с валютами не вынесен в командный интерфейс пользователя. - КонецЕсли; - Для Каждого Раздел Из Разделы Цикл ИдентификаторВалюты = "КлассификаторВалют" + СтрЗаменить(Раздел.ПолноеИмя(), ".", ""); @@ -326,6 +312,18 @@ Объекты.Вставить(Метаданные.Справочники.Валюты.ПолноеИмя(), "РеквизитыРедактируемыеВГрупповойОбработке"); КонецПроцедуры +//////////////////////////////////////////////////////////////////////////////// +// Обработчики условных вызовов в эту подсистему. + +// См. описание одноименной процедуры в общем модуле РегламентныеЗаданияПереопределяемый. +// +Процедура ПриОпределенииЗависимостейРегламентныхЗаданий(Зависимости) Экспорт + Зависимость = Зависимости.Добавить(); + Зависимость.РегламентноеЗадание = Метаданные.РегламентныеЗадания.ЗагрузкаКурсовВалют; + Зависимость.ДоступноВМоделиСервиса = Ложь; + Зависимость.ДоступноВАвтономномРабочемМесте = Ложь; +КонецПроцедуры + #КонецОбласти #Область СлужебныеПроцедурыИФункции @@ -367,22 +365,6 @@ КонецПроцедуры -// Добавляет в таблицу информацию о регламентных заданиях подсистемы для модели сервиса. -// -// Параметры: -// ТаблицаИспользования - ТаблицаЗначений - Таблица регламентных заданий. -// * РегламентноеЗадание - Строка - Имя предопределенного регламентного задания. -// * Использование - Булево - Истина, если регламентное задание должно -// выполняться в модели сервиса. -// -Процедура ПриОпределенииИспользованияРегламентныхЗаданий(ТаблицаИспользования) Экспорт - - НоваяСтрока = ТаблицаИспользования.Добавить(); - НоваяСтрока.РегламентноеЗадание = "ЗагрузкаКурсовВалют"; - НоваяСтрока.Использование = Ложь; - -КонецПроцедуры - // Заполняет перечень запросов внешних разрешений, которые обязательно должны быть предоставлены // при создании информационной базы или обновлении программы. // @@ -517,18 +499,18 @@ УдалитьИзВременногоХранилища(ПутьКФайлу); КонецЕсли; - Если ЧислоЗагружаемыхДнейВсего = ЧислоЗагруженныхДней Тогда - ПояснениеОЗагрузке = ""; - ИначеЕсли ЧислоЗагруженныхДней = 0 Тогда - ПояснениеОЗагрузке = НСтр("ru = 'Курсы валюты %1 - %2 не загружены. Нет данных.'"); - Иначе - ПояснениеОЗагрузке = НСтр("ru = 'Загружены не все курсы по валюте %1 - %2.'"); + ПояснениеОЗагрузке = ""; + Если ЧислоЗагружаемыхДнейВсего <> ЧислоЗагруженныхДней Тогда + Если ЧислоЗагруженныхДней = 0 Тогда + ПояснениеОЗагрузке = НСтр("ru = 'Курсы валюты %1 - %2 не загружены. Нет данных.'"); + Иначе + ПояснениеОЗагрузке = НСтр("ru = 'Загружены не все курсы по валюте %1 - %2.'"); + КонецЕсли; КонецЕсли; - ПояснениеОЗагрузке = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - ПояснениеОЗагрузке, - Валюта.Код, - Валюта.Наименование); + Если Не ПустаяСтрока(ПояснениеОЗагрузке) Тогда + ПояснениеОЗагрузке = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ПояснениеОЗагрузке, Валюта.Код, Валюта.Наименование); + КонецЕсли; СообщенияПользователю = ПолучитьСообщенияПользователю(Истина); СписокОшибок = Новый Массив; @@ -536,7 +518,7 @@ СписокОшибок.Добавить(СообщениеПользователю.Текст); КонецЦикла; СписокОшибок = ОбщегоНазначенияКлиентСервер.СвернутьМассив(СписокОшибок); - ПояснениеОЗагрузке = ?(ПустаяСтрока(ПояснениеОЗагрузке), "", Символы.ПС) + СтроковыеФункцииКлиентСервер.СтрокаИзМассиваПодстрок(СписокОшибок, Символы.ПС); + ПояснениеОЗагрузке = ?(ПустаяСтрока(ПояснениеОЗагрузке), "", Символы.ПС) + СтрСоединить(СписокОшибок, Символы.ПС); Возврат ПояснениеОЗагрузке; @@ -688,8 +670,8 @@ Иначе ПоясняющееСообщение = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Невозможно получить файл данных с курсами валюты (%1 - %2): - |%3 - |Возможно, нет доступа к веб сайту с курсами валют, либо указана несуществующая валюта.'"), + |%3 + |Возможно, нет доступа к веб сайту с курсами валют, либо указана несуществующая валюта.'"), Валюта.КодВалюты, Валюта.Валюта, Результат.СообщениеОбОшибке); @@ -853,7 +835,7 @@ Перем ПодСтрока; - Поз = Найти(ИсходнаяСтрока,Символы.Таб); + Поз = СтрНайти(ИсходнаяСтрока,Символы.Таб); Если Поз > 0 Тогда ПодСтрока = Лев(ИсходнаяСтрока,Поз-1); ИсходнаяСтрока = Сред(ИсходнаяСтрока,Поз + 1); diff --git a/SSL/src/CommonModules/РаботаСКурсамиВалютКлиентСервер/Module.bsl b/SSL/src/CommonModules/РаботаСКурсамиВалютКлиентСервер/Module.bsl index 56a62b295..a4a6acfe3 100644 --- a/SSL/src/CommonModules/РаботаСКурсамиВалютКлиентСервер/Module.bsl +++ b/SSL/src/CommonModules/РаботаСКурсамиВалютКлиентСервер/Module.bsl @@ -25,22 +25,18 @@ // Функция ПересчитатьПоКурсу(Сумма, ПараметрыТекущегоКурса, ПараметрыНовогоКурса) Экспорт Если ПараметрыТекущегоКурса.Валюта = ПараметрыНовогоКурса.Валюта - ИЛИ ( - ПараметрыТекущегоКурса.Курс = ПараметрыНовогоКурса.Курс - И ПараметрыТекущегоКурса.Кратность = ПараметрыНовогоКурса.Кратность - ) Тогда + Или (ПараметрыТекущегоКурса.Курс = ПараметрыНовогоКурса.Курс + И ПараметрыТекущегоКурса.Кратность = ПараметрыНовогоКурса.Кратность) Тогда Возврат Сумма; - КонецЕсли; Если ПараметрыТекущегоКурса.Курс = 0 - ИЛИ ПараметрыТекущегоКурса.Кратность = 0 - ИЛИ ПараметрыНовогоКурса.Курс = 0 - ИЛИ ПараметрыНовогоКурса.Кратность = 0 Тогда + Или ПараметрыТекущегоКурса.Кратность = 0 + Или ПараметрыНовогоКурса.Курс = 0 + Или ПараметрыНовогоКурса.Кратность = 0 Тогда - ОбщегоНазначенияКлиентСервер.СообщитьПользователю( - СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + ОбщегоНазначенияКлиентСервер.СообщитьПользователю(СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'При пересчете в валюту %1 сумма %2 установлена в нулевое значение, т.к. курс валюты не задан.'"), ПараметрыНовогоКурса.Валюта, Формат(Сумма, "ЧДЦ=2; ЧН=0"))); diff --git a/SSL/src/CommonModules/РаботаСПочтовымиСообщениями/Module.bsl b/SSL/src/CommonModules/РаботаСПочтовымиСообщениями/Module.bsl index a86f787ce..e742644e1 100644 --- a/SSL/src/CommonModules/РаботаСПочтовымиСообщениями/Module.bsl +++ b/SSL/src/CommonModules/РаботаСПочтовымиСообщениями/Module.bsl @@ -6,14 +6,59 @@ #Область ПрограммныйИнтерфейс -// Функция для отправки сообщений. Проверяет корректность заполнения учетной -// записи и вызывает функцию, реализующую механику отправки. +// Выполняет отправку почтовых сообщений. // -// См. параметры функции ОтправитьСообщение. +// Параметры: +// УчетнаяЗапись - СправочникСсылка.УчетныеЗаписиЭлектроннойПочты - ссылка на +// учетную запись электронной почты. +// ПараметрыПисьма - Структура - содержит всю необходимую информацию о письме: +// +// * Кому - Массив структур, строка - (обязательный) Интернет адрес получателя письма. +// Адрес - строка - почтовый адрес. +// Представление - строка - имя адресата. +// +// * Копии - Массив - коллекция структур адресов: +// * Адрес - строка - почтовый адрес (должно быть обязательно заполнено). +// * Представление - строка - имя адресата. +// +// - Строка - интернет адреса получателей письма, разделитель - ";". +// +// * СлепыеКопии - Массив, Строка - см. описание поля Копии. +// +// * Тема - Строка - (обязательный) тема почтового сообщения. +// * Тело - Строка - (обязательный) текст почтового сообщения (простой текст в кодировке win-1251). +// * Важность - ВажностьИнтернетПочтовогоСообщения. +// * Вложения - Соответствие - список вложений, где: +// * ключ - Строка - наименование вложения +// * значение - ДвоичныеДанные, АдресВоВременномХранилище - данные вложения; +// - Структура - содержащая следующие свойства: +// * ДвоичныеДанные - ДвоичныеДанные - двоичные данные вложения +// * Идентификатор - Строка - идентификатор вложения, используется для хранения картинок, +// отображаемых в теле письма. +// +// * АдресОтвета - Соответствие - см. описание поля Кому. +// * Пароль - Строка - пароль для доступа к учетной записи. +// * ИдентификаторыОснований - Строка - идентификаторы оснований данного письма. +// * ОбрабатыватьТексты - Булево - необходимость обрабатывать тексты письма при отправке. +// * УведомитьОДоставке - Булево - необходимость запроса уведомления о доставке. +// * УведомитьОПрочтении - Булево - необходимость запроса уведомления о прочтении. +// * ТипТекста - Строка, Перечисление.ТипыТекстовЭлектронныхПисем, ТипТекстаПочтовогоСообщения - определяет тип +// переданного теста допустимые значения: +// HTML/ТипыТекстовЭлектронныхПисем.HTML - текст почтового сообщения в формате HTML. +// ПростойТекст/ТипыТекстовЭлектронныхПисем.ПростойТекст - простой текст почтового сообщения. +// Отображается "как есть" (значение по +// умолчанию). +// РазмеченныйТекст/ТипыТекстовЭлектронныхПисем.РазмеченныйТекст - текст почтового сообщения в формате +// Rich Text. +// +// Соединение - ИнтернетПочта - существующее соединение с почтовым сервером. Если не указано, то соединение +// устанавливается в теле функции. +// +// Возвращаемое значение: +// Строка - идентификатор отправленного почтового сообщения на SMTP сервере. +// +// ПРИМЕЧАНИЕ: функция может вызвать исключение, которое требуется обработать. // -// Примечание: параметр ПараметрыПисьма.Вложения может содержать вместо двоичных данных адреса во -// временном хранилище, по которым хранятся эти данные. -// Функция ОтправитьПочтовоеСообщение(Знач УчетнаяЗапись, Знач ПараметрыПисьма, Знач Соединение = Неопределено) Экспорт @@ -96,16 +141,19 @@ КонецФункции // Получить доступные учетные записи электронной почты. -// Параметры: -// ДляОтправки - Булево - Если установлено Истина, то будут выбирать только записи, с которых можно отправлять почту. -// ДляПолучения - Булево - Если установлено Истина, то будут выбирать только записи, по которым можно получать почту. -// ВключатьСистемнуюУчетнуюЗапись - Булево - включать системную учетную запись, если доступна. +// +// Параметры: +// ДляОтправки - Булево - Если установлено Истина, то будут выбирать только записи, с которых +// можно отправлять почту. +// ДляПолучения - Булево - Если установлено Истина, то будут выбирать только записи, по которым +// можно получать почту. +// ВключатьСистемнуюУчетнуюЗапись - Булево - включать системную учетную запись, если настроена для отправки/получения. // // Возвращаемое значение: -// ДоступныеУчетныеЗаписи - ТаблицаЗначений - С колонками: -// Ссылка - СправочникСсылка.УчетныеЗаписиЭлектроннойПочты - Ссылка на учетную запись. -// Наименование - Строка - Наименование учетной записи. -// Адрес - Строка - Адрес электронной почты. +// ДоступныеУчетныеЗаписи - ТаблицаЗначений - описание учетных записей: +// Ссылка - СправочникСсылка.УчетныеЗаписиЭлектроннойПочты - учетная запись; +// Наименование - Строка - наименование учетной записи; +// Адрес - Строка - адрес электронной почты. // Функция ДоступныеУчетныеЗаписи(Знач ДляОтправки = Неопределено, Знач ДляПолучения = Неопределено, @@ -138,6 +186,17 @@ | КОГДА &ВключатьСистемнуюУчетнуюЗапись | ТОГДА ИСТИНА | ИНАЧЕ УчетныеЗаписиЭлектроннойПочты.Ссылка <> ЗНАЧЕНИЕ(Справочник.УчетныеЗаписиЭлектроннойПочты.СистемнаяУчетнаяЗаписьЭлектроннойПочты) + | КОНЕЦ + | И УчетныеЗаписиЭлектроннойПочты.АдресЭлектроннойПочты <> """" + | И ВЫБОР + | КОГДА УчетныеЗаписиЭлектроннойПочты.ИспользоватьДляПолучения + | ТОГДА УчетныеЗаписиЭлектроннойПочты.СерверВходящейПочты <> """" + | ИНАЧЕ ИСТИНА + | КОНЕЦ + | И ВЫБОР + | КОГДА УчетныеЗаписиЭлектроннойПочты.ИспользоватьДляОтправки + | ТОГДА УчетныеЗаписиЭлектроннойПочты.СерверИсходящейПочты <> """" + | ИНАЧЕ ИСТИНА | КОНЕЦ"; Запрос = Новый Запрос; @@ -164,6 +223,8 @@ // Проверяет, что системная учетная запись доступна (может быть использована). // +// Возвращаемое значение: +// Булево. Функция ПроверитьСистемнаяУчетнаяЗаписьДоступна() Экспорт Возврат РаботаСПочтовымиСообщениямиСлужебный.ПроверитьСистемнаяУчетнаяЗаписьДоступна(); @@ -176,68 +237,4 @@ Или ПравоДоступа("Изменение", Метаданные.Справочники.УчетныеЗаписиЭлектроннойПочты); КонецФункции -//////////////////////////////////////////////////////////////////////////////// -// Устаревшие процедуры и функции. - -// Устарела. Следует использовать ОтправитьПочтовоеСообщение. -// -// Производит отправку сообщения электронной почты. -// -// Параметры: -// УчетнаяЗапись - СправочникСсылка.УчетныеЗаписиЭлектроннойПочты - ссылка на -// учетную запись электронной почты. -// ПараметрыПисьма - структура - содержит всю необходимую информацию о письме: -// содержит следующие ключи: -// Кому* - Массив структур, строка - Интернет адрес получателя письма. -// Адрес - строка - почтовый адрес. -// Представление - строка - имя адресата. -// -// Тема* - строка - тема почтового сообщения. -// Тело* - тело почтового сообщения (простой текст в кодировке win-1251). -// Вложения - соответствие -// ключ - наименованиеВложения - строка - наименование вложения -// значение - ДвоичныеДанные - данные вложения. -// -// Дополнительные ключи структуры, которые могут использоваться: -// АдресОтвета - соответствие - см. такие же поля как и кому. -// Пароль - строка - пароль для доступа учетной записи. -// ТипТекста - Строка / Перечисление.ТипыТекстовЭлектронныхПисем определяет тип переданного теста -// допустимые значения: -// HTML/ТипыТекстовЭлектронныхПисем.HTML - текст почтового сообщения в формате HTML. -// ПростойТекст/ТипыТекстовЭлектронныхПисем.ПростойТекст - простой текст почтового сообщения. -// Отображается "как есть" (значение по -// умолчанию). -// РазмеченныйТекст/ТипыТекстовЭлектронныхПисем.РазмеченныйТекст - текст почтового сообщения в формате -// Rich Text. -// -// Прим.: параметры письма помеченные знаком '*' являются обязательными -// т.е. к началу работы функции считается что они уже заполнены. -// -// Возвращаемое значение: -// Строка - идентификатор отправленного почтового сообщения на smtp сервере. -// -// ПРИМЕЧАНИЕ: функция может вызвать исключение, которое требуется обработать. -// -Функция ОтправитьСообщение(Знач УчетнаяЗапись, Знач ПараметрыПисьма) Экспорт - - Возврат ОтправитьПочтовоеСообщение(УчетнаяЗапись, ПараметрыПисьма); - -КонецФункции - -// Устарела. Следует использовать ДоступныеУчетныеЗаписи. -Функция ПолучитьДоступныеУчетныеЗаписи(Знач ДляОтправки = Неопределено, - Знач ДляПолучения = Неопределено, - Знач ВключатьСистемнуюУчетнуюЗапись = Истина) Экспорт - - Возврат ДоступныеУчетныеЗаписи(ДляОтправки, ДляПолучения, ВключатьСистемнуюУчетнуюЗапись); - -КонецФункции - -// Устарела. Следует использовать СистемнаяУчетнаяЗапись. -Функция ПолучитьСистемнуюУчетнуюЗапись() Экспорт - - Возврат СистемнаяУчетнаяЗапись(); - -КонецФункции - #КонецОбласти diff --git a/SSL/src/CommonModules/РаботаСПочтовымиСообщениямиВызовСервера/Module.bsl b/SSL/src/CommonModules/РаботаСПочтовымиСообщениямиВызовСервера/Module.bsl index f6933f346..b7c4f655e 100644 --- a/SSL/src/CommonModules/РаботаСПочтовымиСообщениямиВызовСервера/Module.bsl +++ b/SSL/src/CommonModules/РаботаСПочтовымиСообщениямиВызовСервера/Module.bsl @@ -19,9 +19,9 @@ // // См. описание процедуры РаботаСПочтовымиСообщениямиСлужебный.ПроверитьВозможностьОтправкиИПолученияЭлектроннойПочты. // -Процедура ПроверитьВозможностьОтправкиИПолученияЭлектроннойПочты(УчетнаяЗапись, ПарольПараметр, СообщениеОбОшибке, ДополнительноеСообщение) Экспорт +Процедура ПроверитьВозможностьОтправкиИПолученияЭлектроннойПочты(УчетнаяЗапись, СообщениеОбОшибке, ДополнительноеСообщение) Экспорт - РаботаСПочтовымиСообщениямиСлужебный.ПроверитьВозможностьОтправкиИПолученияЭлектроннойПочты(УчетнаяЗапись, ПарольПараметр, СообщениеОбОшибке, ДополнительноеСообщение); + РаботаСПочтовымиСообщениямиСлужебный.ПроверитьВозможностьОтправкиИПолученияЭлектроннойПочты(УчетнаяЗапись, СообщениеОбОшибке, ДополнительноеСообщение); КонецПроцедуры diff --git a/SSL/src/CommonModules/РаботаСПочтовымиСообщениямиКлиент/Module.bsl b/SSL/src/CommonModules/РаботаСПочтовымиСообщениямиКлиент/Module.bsl index dee5ccae7..b656411f6 100644 --- a/SSL/src/CommonModules/РаботаСПочтовымиСообщениямиКлиент/Module.bsl +++ b/SSL/src/CommonModules/РаботаСПочтовымиСообщениямиКлиент/Module.bsl @@ -56,7 +56,8 @@ // // Параметры: // ОбработчикРезультата - ОписаниеОповещение - процедура, в которую необходимо передать выполнение кода после проверки. -// +// В качестве результата возвращается Истина, если есть доступная учетная +// запись для отправки почты. Иначе возвращается Ложь. Процедура ПроверитьНаличиеУчетнойЗаписиДляОтправкиПочты(ОбработчикРезультата) Экспорт Если РаботаСПочтовымиСообщениямиВызовСервера.ЕстьДоступныеУчетныеЗаписиДляОтправки() Тогда ВыполнитьОбработкуОповещения(ОбработчикРезультата, Истина); @@ -73,53 +74,36 @@ КонецЕсли; КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// УСТАРЕВШИЕ ПРОЦЕДУРЫ И ФУНКЦИИ +#КонецОбласти -// Устарела. Следует использовать СоздатьНовоеПисьмо. +#Область СлужебныйПрограммныйИнтерфейс + +// Отправляет табличные документы по электронной почте. // -// Интерфейсная клиентская функция, поддерживающая упрощенный вызов формы редактирования -// нового письма. // Параметры: -// Отправитель* - СписокЗначений, СправочникСсылка.УчетныеЗаписиЭлектроннойПочты - -// учетная запись ,с которой может быть отправлено -// почтовое сообщение. Если тип список значений, тогда -// представление - наименование учетной записи, -// значение - ссылка на учетную запись. +// ТабличныеДокументы - СписокЗначений - Табличные документы для отправки. +// * Значение - ТабличныйДокумент - Отправляемый документ. +// * Представление - Строка - Наименование документа. +// Используется при сохранении в файл и для вложений. +// Заголовок - Строка - Необязательный. Заголовок диалога сохранения табличных документов в файл. +// ПараметрыОтправки - Структура - Необязательный. Параметры письма. +// * Тема - Строка - Тема письма. +// * Текст - Строка - Текст письма. // -// Получатель - СписокЗначений, Строка: -// если список значений, то представление - имя получателя -// значение - почтовый адрес -// если строка то список почтовых адресов, -// в формате правильного e-mail адреса* +// Порядок работы: +// 1. Проверяется наличие учетной записи, настроенной для отправки. +// Если учетной записи нет, то открывается помощник настройки. +// 2. Открывается диалог сохранения табличных документов в файлы. +// Табличные документы сохраняются в файлы. +// 3. Открывается диалог отправки письма. // -// Тема - Строка - тема письма. -// Текст - Строка - тело письма. -// -// Вложения - СписокЗначений, где -// представление - строка - наименование вложения -// значение - ДвоичныеДанные - двоичные данные вложения. -// - Строка - адрес файла во временном хранилище. -// - Строка - путь к файлу на клиенте. -// -// УдалятьФайлыПослеОтправки - булево - удалять временные файлы после отправки сообщения. -// ПисьмоДолжноСохраняться - булево - должно ли письмо сохраняться (используется только -// если встроена подсистема Взаимодействия). -// -Процедура ОткрытьФормуОтправкиПочтовогоСообщения(Знач Отправитель = Неопределено, Знач Получатель = Неопределено, Знач Тема = "", - Знач Текст = "", Знач Вложения = Неопределено, Знач УдалятьФайлыПослеОтправки = Ложь, Знач ПисьмоДолжноСохраняться = Истина) Экспорт - - ПараметрыОтправки = Новый Структура; - ПараметрыОтправки.Вставить("Отправитель", Отправитель); - ПараметрыОтправки.Вставить("Получатель", Получатель); - ПараметрыОтправки.Вставить("Тема", Тема); - ПараметрыОтправки.Вставить("Текст", Текст); - ПараметрыОтправки.Вставить("Вложения", Вложения); - ПараметрыОтправки.Вставить("УдалятьФайлыПослеОтправки", УдалятьФайлыПослеОтправки); - ПараметрыОтправки.Вставить("ПисьмоДолжноСохраняться", ПисьмоДолжноСохраняться); - - СоздатьНовоеПисьмо(ПараметрыОтправки); - +Процедура ОтправитьТабличныеДокументы(ТабличныеДокументы, ЗаголовокСохранения = Неопределено, ПараметрыОтправки = Неопределено) Экспорт + Контекст = Новый Структура; + Контекст.Вставить("ТабличныеДокументы", ТабличныеДокументы); + Контекст.Вставить("Заголовок", ЗаголовокСохранения); + Контекст.Вставить("ПараметрыОтправки", ПараметрыОтправки); + Обработчик = Новый ОписаниеОповещения("ОтправитьТабличныеДокументыПроверкаУчетнойЗаписиВыполнена", ЭтотОбъект, Контекст); + ПроверитьНаличиеУчетнойЗаписиДляОтправкиПочты(Обработчик); КонецПроцедуры #КонецОбласти @@ -144,7 +128,7 @@ ОповещениеОЗакрытииФормы = ПараметрыОтправки.ОповещениеОЗакрытииФормы; Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.Взаимодействия") - И СтандартныеПодсистемыКлиентПовтИсп.ПараметрыРаботыКлиента().ИспользоватьПочтовыйКлиент Тогда + И СтандартныеПодсистемыКлиентПовтИсп.ПараметрыРаботыКлиента().СозданиеИсходящихПисемДоступно Тогда МодульВзаимодействияКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("ВзаимодействияКлиент"); МодульВзаимодействияКлиент.ОткрытьФормуОтправкиПочтовогоСообщения(Отправитель, Получатель, Тема, Текст, Вложения, ОповещениеОЗакрытииФормы); @@ -185,18 +169,18 @@ Процедура ПроверитьУчетнуюЗапись(Знач УчетнаяЗапись) Экспорт ОчиститьСообщения(); Состояние(НСтр("ru = 'Проверка учетной записи'"),,НСтр("ru = 'Выполняется проверка учетной записи. Подождите...'")); - ПроверитьВозможностьОтправкиИПолученияЭлектроннойПочты(Неопределено, УчетнаяЗапись, Неопределено); + ПроверитьВозможностьОтправкиИПолученияЭлектроннойПочты(Неопределено, УчетнаяЗапись); КонецПроцедуры // Проверка учетной записи электронной почты. // // См. описание процедуры РаботаСПочтовымиСообщениямиСлужебный.ПроверитьВозможностьОтправкиИПолученияЭлектроннойПочты. // -Процедура ПроверитьВозможностьОтправкиИПолученияЭлектроннойПочты(ОбработчикРезультата, УчетнаяЗапись, ПарольПараметр) Экспорт +Процедура ПроверитьВозможностьОтправкиИПолученияЭлектроннойПочты(ОбработчикРезультата, УчетнаяЗапись) Экспорт СообщениеОбОшибке = ""; ДополнительноеСообщение = ""; - РаботаСПочтовымиСообщениямиВызовСервера.ПроверитьВозможностьОтправкиИПолученияЭлектроннойПочты(УчетнаяЗапись, ПарольПараметр, СообщениеОбОшибке, ДополнительноеСообщение); + РаботаСПочтовымиСообщениямиВызовСервера.ПроверитьВозможностьОтправкиИПолученияЭлектроннойПочты(УчетнаяЗапись, СообщениеОбОшибке, ДополнительноеСообщение); Если ЗначениеЗаполнено(СообщениеОбОшибке) Тогда ПоказатьПредупреждение(ОбработчикРезультата, СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( @@ -216,4 +200,46 @@ ВыполнитьОбработкуОповещения(ОбработчикРезультата, Ложь); КонецПроцедуры +// Продолжение процедуры ОтправитьТабличныеДокументы. +Процедура ОтправитьТабличныеДокументыПроверкаУчетнойЗаписиВыполнена(УчетнаяЗаписьНастроена, Контекст) Экспорт + Если УчетнаяЗаписьНастроена <> Истина Тогда + Возврат; + КонецЕсли; + + ПараметрыФормы = Новый Структура("ТабличныеДокументы, Заголовок"); + ЗаполнитьЗначенияСвойств(ПараметрыФормы, Контекст); + + Обработчик = Новый ОписаниеОповещения("ОтправитьТабличныеДокументыСохранениеВыполнено", ЭтотОбъект, Контекст); + + ОткрытьФорму("ОбщаяФорма.ОтправкаТабличныхДокументовПоПочте", ПараметрыФормы, , , , , Обработчик); +КонецПроцедуры + +// Продолжение процедуры ОтправитьТабличныеДокументыПроверкаУчетнойЗаписиВыполнена. +Процедура ОтправитьТабличныеДокументыСохранениеВыполнено(СохраненныеДокументы, Контекст) Экспорт + Если СохраненныеДокументы = Неопределено Или СохраненныеДокументы.Количество() = 0 Тогда + Возврат; + КонецЕсли; + + ПараметрыОтправки = Контекст.ПараметрыОтправки; + Если ТипЗнч(ПараметрыОтправки) <> Тип("Структура") Тогда + ПараметрыОтправки = Новый Структура; + КонецЕсли; + + Вложения = ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(ПараметрыОтправки, "Вложения"); + Если ТипЗнч(Вложения) = Тип("СписокЗначений") И Вложения.Количество() > 0 Тогда + Для Каждого ДокументВложение Из СохраненныеДокументы Цикл + ЗаполнитьЗначенияСвойств(Вложения.Добавить(), ДокументВложение); + КонецЦикла; + Иначе + ПараметрыОтправки.Вставить("Вложения", СохраненныеДокументы); + КонецЕсли; + + УдалятьФайлыПослеОтправки = ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(ПараметрыОтправки, "УдалятьФайлыПослеОтправки"); + Если ТипЗнч(УдалятьФайлыПослеОтправки) <> Тип("Булево") Тогда + ПараметрыОтправки.Вставить("УдалятьФайлыПослеОтправки", Истина); + КонецЕсли; + + СоздатьНовоеПисьмо(ПараметрыОтправки); +КонецПроцедуры + #КонецОбласти diff --git a/SSL/src/CommonModules/РаботаСПочтовымиСообщениямиСлужебный/Module.bsl b/SSL/src/CommonModules/РаботаСПочтовымиСообщениямиСлужебный/Module.bsl index 73e5afb8c..90aee0270 100644 --- a/SSL/src/CommonModules/РаботаСПочтовымиСообщениямиСлужебный/Module.bsl +++ b/SSL/src/CommonModules/РаботаСПочтовымиСообщениямиСлужебный/Module.bsl @@ -3,34 +3,7 @@ // //////////////////////////////////////////////////////////////////////////////// -#Область СлужебныеПроцедурыИФункции - -// См. описание этой же процедуры в модуле СтандартныеПодсистемыСервер. -Процедура ПриДобавленииОбработчиковСлужебныхСобытий(КлиентскиеОбработчики, СерверныеОбработчики) Экспорт - - // СЕРВЕРНЫЕ ОБРАБОТЧИКИ. - - СерверныеОбработчики["СтандартныеПодсистемы.ОбновлениеВерсииИБ\ПриДобавленииОбработчиковОбновления"].Добавить( - "РаботаСПочтовымиСообщениямиСлужебный"); - - Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.УправлениеДоступом") Тогда - СерверныеОбработчики["СтандартныеПодсистемы.УправлениеДоступом\ПриЗаполненииВидовОграниченийПравОбъектовМетаданных"].Добавить( - "РаботаСПочтовымиСообщениямиСлужебный"); - - СерверныеОбработчики["СтандартныеПодсистемы.УправлениеДоступом\ПриЗаполненииВидовДоступа"].Добавить( - "РаботаСПочтовымиСообщениямиСлужебный"); - КонецЕсли; - - СерверныеОбработчики["СтандартныеПодсистемы.БазоваяФункциональность\ПриПолученииДанныхОтПодчиненного"].Добавить( - "РаботаСПочтовымиСообщениямиСлужебный"); - - СерверныеОбработчики["СтандартныеПодсистемы.БазоваяФункциональность\ПриПолученииДанныхОтГлавного"].Добавить( - "РаботаСПочтовымиСообщениямиСлужебный"); - - СерверныеОбработчики["СтандартныеПодсистемы.БазоваяФункциональность\ПриЗаполненииРазрешенийНаДоступКВнешнимРесурсам"].Добавить( - "РаботаСПочтовымиСообщениямиСлужебный"); - -КонецПроцедуры +#Область СлужебныйПрограммныйИнтерфейс // Определить объекты метаданных, в модулях менеджеров которых ограничивается возможность // редактирования реквизитов при групповом изменении. @@ -48,6 +21,155 @@ Объекты.Вставить(Метаданные.Справочники.УчетныеЗаписиЭлектроннойПочты.ПолноеИмя(), "РеквизитыРедактируемыеВГрупповойОбработке"); КонецПроцедуры +// Предназначена для перевода паролей в безопасное хранилище. +// Используется в обработчике обновления ИБ. +Процедура ПеренестиПаролиВБезопасноеХранилище() Экспорт + + Запрос = Новый Запрос; + Запрос.Текст = + "ВЫБРАТЬ + | УчетныеЗаписиЭлектроннойПочты.Ссылка, УчетныеЗаписиЭлектроннойПочты.УдалитьПароль, + | УчетныеЗаписиЭлектроннойПочты.УдалитьПарольSMTP + |ИЗ + | Справочник.УчетныеЗаписиЭлектроннойПочты КАК УчетныеЗаписиЭлектроннойПочты"; + + РезультатЗапроса = Запрос.Выполнить().Выбрать(); + + Пока РезультатЗапроса.Следующий() Цикл + Если НЕ ПустаяСтрока(РезультатЗапроса.УдалитьПароль) + ИЛИ НЕ ПустаяСтрока(РезультатЗапроса.УдалитьПарольSMTP) Тогда + НачатьТранзакцию(); + Попытка + УстановитьПривилегированныйРежим(Истина); + ОбщегоНазначения.ЗаписатьДанныеВБезопасноеХранилище(РезультатЗапроса.Ссылка, РезультатЗапроса.УдалитьПароль); + ОбщегоНазначения.ЗаписатьДанныеВБезопасноеХранилище(РезультатЗапроса.Ссылка, РезультатЗапроса.УдалитьПарольSMTP, "ПарольSMTP"); + УстановитьПривилегированныйРежим(Ложь); + УчетнаяЗаписьЭлектроннойПочты = РезультатЗапроса.Ссылка.ПолучитьОбъект(); + УчетнаяЗаписьЭлектроннойПочты.УдалитьПароль = ""; + УчетнаяЗаписьЭлектроннойПочты.УдалитьПарольSMTP = ""; + УчетнаяЗаписьЭлектроннойПочты.Записать(); + ЗафиксироватьТранзакцию(); + Исключение + ОтменитьТранзакцию(); + КонецПопытки; + КонецЕсли; + КонецЦикла; + +КонецПроцедуры + +// Создает профиль переданной учетной записи для подключения к почтовому серверу. +// +// Параметры: +// УчетнаяЗапись - СправочникСсылка.УчетныеЗаписиЭлектроннойПочты - учетная запись. +// +// Возвращаемое значение: +// ИнтернетПочтовыйПрофиль - профиль учетной записи; +// Неопределено - не удалось получить учетную запись по ссылке. +// +Функция ИнтернетПочтовыйПрофиль(УчетнаяЗапись, ДляПолучения = Ложь) Экспорт + + ТекстЗапроса = + "ВЫБРАТЬ РАЗРЕШЕННЫЕ + | УчетныеЗаписиЭлектроннойПочты.СерверВходящейПочты КАК АдресСервераIMAP, + | УчетныеЗаписиЭлектроннойПочты.ПортСервераВходящейПочты КАК ПортIMAP, + | УчетныеЗаписиЭлектроннойПочты.ИспользоватьЗащищенноеСоединениеДляВходящейПочты КАК ИспользоватьSSLIMAP, + | УчетныеЗаписиЭлектроннойПочты.Пользователь КАК ПользовательIMAP, + | УчетныеЗаписиЭлектроннойПочты.ИспользоватьБезопасныйВходНаСерверВходящейПочты КАК ТолькоЗащищеннаяАутентификацияIMAP, + | УчетныеЗаписиЭлектроннойПочты.СерверВходящейПочты КАК АдресСервераPOP3, + | УчетныеЗаписиЭлектроннойПочты.ПортСервераВходящейПочты КАК ПортPOP3, + | УчетныеЗаписиЭлектроннойПочты.ИспользоватьЗащищенноеСоединениеДляВходящейПочты КАК ИспользоватьSSLPOP3, + | УчетныеЗаписиЭлектроннойПочты.Пользователь КАК Пользователь, + | УчетныеЗаписиЭлектроннойПочты.ИспользоватьБезопасныйВходНаСерверВходящейПочты КАК ТолькоЗащищеннаяАутентификацияPOP3, + | УчетныеЗаписиЭлектроннойПочты.СерверИсходящейПочты КАК АдресСервераSMTP, + | УчетныеЗаписиЭлектроннойПочты.ПортСервераИсходящейПочты КАК ПортSMTP, + | УчетныеЗаписиЭлектроннойПочты.ИспользоватьЗащищенноеСоединениеДляИсходящейПочты КАК ИспользоватьSSLSMTP, + | УчетныеЗаписиЭлектроннойПочты.ТребуетсяВходНаСерверПередОтправкой КАК POP3ПередSMTP, + | УчетныеЗаписиЭлектроннойПочты.ПользовательSMTP КАК ПользовательSMTP, + | УчетныеЗаписиЭлектроннойПочты.ИспользоватьБезопасныйВходНаСерверИсходящейПочты КАК ТолькоЗащищеннаяАутентификацияSMTP, + | УчетныеЗаписиЭлектроннойПочты.ВремяОжидания КАК Таймаут, + | УчетныеЗаписиЭлектроннойПочты.ПротоколВходящейПочты КАК Протокол + |ИЗ + | Справочник.УчетныеЗаписиЭлектроннойПочты КАК УчетныеЗаписиЭлектроннойПочты + |ГДЕ + | УчетныеЗаписиЭлектроннойПочты.Ссылка = &Ссылка"; + + Запрос = Новый Запрос(ТекстЗапроса); + Запрос.УстановитьПараметр("Ссылка", УчетнаяЗапись); + Выборка = Запрос.Выполнить().Выбрать(); + + Результат = Неопределено; + Если Выборка.Следующий() Тогда + СписокСвойствIMAP = "АдресСервераIMAP,ПортIMAP,ИспользоватьSSLIMAP,ПользовательIMAP,ТолькоЗащищеннаяАутентификацияIMAP"; + СписокСвойствPOP3 = "АдресСервераPOP3,ПортPOP3,ИспользоватьSSLPOP3,Пользователь,ТолькоЗащищеннаяАутентификацияPOP3"; + СписокСвойствSMTP = "АдресСервераSMTP,ПортSMTP,ИспользоватьSSLSMTP,ПользовательSMTP,ТолькоЗащищеннаяАутентификацияSMTP"; + + Результат = Новый ИнтернетПочтовыйПрофиль; + Если ДляПолучения Тогда + Если Выборка.Протокол = "IMAP" Тогда + ТребуемыеСвойства = СписокСвойствIMAP; + УстановитьПривилегированныйРежим(Истина); + Результат.ПарольIMAP = ОбщегоНазначения.ПрочитатьДанныеИзБезопасногоХранилища(УчетнаяЗапись); + УстановитьПривилегированныйРежим(Ложь); + Иначе + ТребуемыеСвойства = СписокСвойствPOP3; + УстановитьПривилегированныйРежим(Истина); + Результат.Пароль = ОбщегоНазначения.ПрочитатьДанныеИзБезопасногоХранилища(УчетнаяЗапись); + УстановитьПривилегированныйРежим(Ложь); + КонецЕсли; + Иначе + ТребуемыеСвойства = СписокСвойствSMTP; + Если Выборка.Протокол <> "IMAP" И Выборка.POP3ПередSMTP Тогда + ТребуемыеСвойства = ТребуемыеСвойства + ",POP3ПередSMTP," + СписокСвойствPOP3; + КонецЕсли; + УстановитьПривилегированныйРежим(Истина); + Результат.ПарольSMTP = ОбщегоНазначения.ПрочитатьДанныеИзБезопасногоХранилища(УчетнаяЗапись, "ПарольSMTP"); + УстановитьПривилегированныйРежим(Ложь); + КонецЕсли; + ТребуемыеСвойства = ТребуемыеСвойства + ",Таймаут"; + ЗаполнитьЗначенияСвойств(Результат, Выборка, ТребуемыеСвойства); + КонецЕсли; + + Возврат Результат; + + +КонецФункции + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +// См. описание этой же процедуры в модуле СтандартныеПодсистемыСервер. +Процедура ПриДобавленииОбработчиковСлужебныхСобытий(КлиентскиеОбработчики, СерверныеОбработчики) Экспорт + + // СЕРВЕРНЫЕ ОБРАБОТЧИКИ. + + СерверныеОбработчики["СтандартныеПодсистемы.ОбновлениеВерсииИБ\ПриДобавленииОбработчиковОбновления"].Добавить( + "РаботаСПочтовымиСообщениямиСлужебный"); + + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ОбменДанными") Тогда + СерверныеОбработчики["СтандартныеПодсистемы.ОбменДанными\ПриНастройкеПодчиненногоУзлаРИБ"].Добавить( + "РаботаСПочтовымиСообщениямиСлужебный"); + КонецЕсли; + + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.УправлениеДоступом") Тогда + СерверныеОбработчики["СтандартныеПодсистемы.УправлениеДоступом\ПриЗаполненииВидовДоступа"].Добавить( + "РаботаСПочтовымиСообщениямиСлужебный"); + + СерверныеОбработчики["СтандартныеПодсистемы.УправлениеДоступом\ПриЗаполненииВидовОграниченийПравОбъектовМетаданных"].Добавить( + "РаботаСПочтовымиСообщениямиСлужебный"); + КонецЕсли; + + СерверныеОбработчики["СтандартныеПодсистемы.БазоваяФункциональность\ПриПолученииДанныхОтПодчиненного"].Добавить( + "РаботаСПочтовымиСообщениямиСлужебный"); + + СерверныеОбработчики["СтандартныеПодсистемы.БазоваяФункциональность\ПриПолученииДанныхОтГлавного"].Добавить( + "РаботаСПочтовымиСообщениямиСлужебный"); + + СерверныеОбработчики["СтандартныеПодсистемы.БазоваяФункциональность\ПриЗаполненииРазрешенийНаДоступКВнешнимРесурсам"].Добавить( + "РаботаСПочтовымиСообщениямиСлужебный"); + +КонецПроцедуры + // Заполняет перечень запросов внешних разрешений, которые обязательно должны быть предоставлены // при создании информационной базы или обновлении программы. // @@ -152,7 +274,6 @@ // // Дополнительные ключи структуры, которые могут использоваться: // АдресОтвета - Соответствие - см. такие же поля как и кому. -// Пароль - Строка - пароль для доступа учетной записи. // ИдентификаторыОснований - строка - идентификаторы оснований данного письма. // ОбрабатыватьТексты - Булево - необходимость обрабатывать тексты письма при отправке. // УведомитьОДоставке - Булево - необходимость запроса уведомления о доставке. @@ -183,7 +304,7 @@ // Объявление переменных перед первым использованием в качестве // параметра метода Свойство структуры ПараметрыПисьма. // Переменные содержат значения переданных в функцию параметров. - Перем Кому, Тема, Тело, Вложения, АдресОтвета, ТипТекста, Копии, СлепыеКопии, Пароль; + Перем Кому, Тема, Тело, Вложения, АдресОтвета, ТипТекста, Копии, СлепыеКопии; Если Не ПараметрыПисьма.Свойство("Тема", Тема) Тогда Тема = ""; @@ -325,8 +446,7 @@ КонецЕсли; Если ТипЗнч(Соединение) <> Тип("ИнтернетПочта") Тогда - ПараметрыПисьма.Свойство("Пароль", Пароль); - Профиль = ИнтернетПочтовыйПрофиль(УчетнаяЗапись, , Пароль); + Профиль = ИнтернетПочтовыйПрофиль(УчетнаяЗапись); Соединение = Новый ИнтернетПочта; Соединение.Подключиться(Профиль); КонецЕсли; @@ -345,36 +465,31 @@ // для указанной учетной записи электронной почты. // // Параметры: -// УчетнаяЗапись - СправочникСсылка.УчетныеЗаписиЭлектроннойПочты - ссылка на -// учетную запись электронной почты. +// УчетнаяЗапись - СправочникСсылка.УчетныеЗаписиЭлектроннойПочты - учетная запись электронной почты. // -// ПараметрыЗагрузки - структура -// ключ "Колонки" - массив - массив строк названий колонок -// названия колонок должны соответствовать полям объекта. -// ИнтернетПочтовоеСообщение -// ключ "РежимТестирования" - булево - если Истина то вызов сделан в режиме тестирования +// ПараметрыЗагрузки - Структура - со свойствами: +// * Колонки - Массив - массив строк названий колонок +// названия колонок должны соответствовать полям объекта +// ИнтернетПочтовоеСообщение +// * РежимТестирования - Булево - если Истина то вызов сделан в режиме тестирования // учетной записи - при этом выборка писем происходит, // но в возвращаемом значении они не попадают; по умолчанию -// режим тестирования отключен -// ключ "ПолучениеЗаголовков" - булево - если Истина то в возвращаемом наборе есть только +// режим тестирования отключен. +// * ПолучениеЗаголовков - Булево - если Истина, то в возвращаемом наборе есть только // заголовки писем. -// ЗаголовкиИдентификаторы - массив - заголовки или идентификаторы сообщений, полные +// * ЗаголовкиИдентификаторы - Массив - заголовки или идентификаторы сообщений, полные // сообщения по которым требуется получить. -// ПриводитьСообщенияКТипу - Булево - возвращать набор полученных почтовых сообщений -// в виде таблицы значений, с простыми типами -// по умолчанию Истина. -// -// Ключ "Пароль" - строка - пароль для доступа к POP3. +// * ПриводитьСообщенияКТипу - Булево - возвращать набор полученных почтовых сообщений +// в виде таблицы значений, с простыми типами. По умолчанию Истина. // // Возвращаемое значение: -// НаборСообщений*- таблица значений, содержит адаптированный вариант списка сообщений на сервере. -// Колонки таблицы значений (по умолчанию): +// НаборСообщений - ТаблицаЗначений, Булево - список почтовых сообщений с колонками: // Важность, Вложения**, ДатаОтправления, ДатаПолучения, Заголовок, ИмяОтправителя, // Идентификатор, Копии, Обратный адрес, Отправитель, Получатели, Размер, Тексты, // Кодировка, СпособКодированияНеASCIIСимволов, Частичное // заполняется если статус Истина. // -// Прим. * - в режиме тестирования не участвует в формировании возвращаемого значения. +// В режиме тестирования возвращается Истина. // Прим. ** - в случае, если вложениями являются другие почтовые сообщения, // они сами не возвращаются но возвращаются их вложения - двоичные // данные и их тексты в виде двоичных данных, рекурсивно. @@ -394,8 +509,6 @@ // Заголовки или идентификаторы писем, полные сообщения по которым требуется получить. Перем ЗаголовкиИдентификаторы; - Перем Пароль; - Если ПараметрыЗагрузки.Свойство("РежимТестирования") Тогда РежимТестирования = ПараметрыЗагрузки.РежимТестирования; Иначе @@ -408,8 +521,7 @@ ПолучениеЗаголовков = Ложь; КонецЕсли; - ПараметрыЗагрузки.Свойство("Пароль", Пароль); - Профиль = ИнтернетПочтовыйПрофиль(УчетнаяЗапись, Истина, Пароль); + Профиль = ИнтернетПочтовыйПрофиль(УчетнаяЗапись, Истина); Если ПараметрыЗагрузки.Свойство("ЗаголовкиИдентификаторы") Тогда ЗаголовкиИдентификаторы = ПараметрыЗагрузки.ЗаголовкиИдентификаторы; @@ -428,11 +540,9 @@ Соединение.Подключиться(Профиль, Протокол); - Если РежимТестирования ИЛИ ПолучениеЗаголовков Тогда - + Если ПолучениеЗаголовков Тогда НаборПисем = Соединение.ПолучитьЗаголовки(); - - Иначе + ИначеЕсли Не РежимТестирования Тогда НастройкиТранспорта = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(УчетнаяЗапись, "ПротоколВходящейПочты,ОставлятьКопииСообщенийНаСервере,ПериодХраненияСообщенийНаСервере"); Если НастройкиТранспорта.ПротоколВходящейПочты = "IMAP" Тогда НастройкиТранспорта.ОставлятьКопииСообщенийНаСервере = Истина; @@ -461,7 +571,6 @@ Если НаборСообщенийДляУдаления.Количество() > 0 Тогда Соединение.УдалитьСообщения(НаборСообщенийДляУдаления); КонецЕсли; - КонецЕсли; Соединение.Отключиться(); @@ -505,91 +614,6 @@ КонецФункции -// Создает профиль переданной учетной записи для подключения к почтовому серверу. -// -// Параметры: -// УчетнаяЗапись - СправочникСсылка.УчетныеЗаписиЭлектроннойПочты - учетная запись. -// -// Возвращаемое значение: -// ИнтернетПочтовыйПрофиль - профиль учетной записи; -// Неопределено - не удалось получить учетную запись по ссылке. -// -Функция ИнтернетПочтовыйПрофиль(УчетнаяЗапись, ДляПолучения = Ложь, Знач Пароль = Неопределено) Экспорт - - ТекстЗапроса = - "ВЫБРАТЬ РАЗРЕШЕННЫЕ - | УчетныеЗаписиЭлектроннойПочты.СерверВходящейПочты КАК АдресСервераIMAP, - | УчетныеЗаписиЭлектроннойПочты.ПортСервераВходящейПочты КАК ПортIMAP, - | УчетныеЗаписиЭлектроннойПочты.ИспользоватьЗащищенноеСоединениеДляВходящейПочты КАК ИспользоватьSSLIMAP, - | УчетныеЗаписиЭлектроннойПочты.Пользователь КАК ПользовательIMAP, - | УчетныеЗаписиЭлектроннойПочты.Пароль КАК ПарольIMAP, - | УчетныеЗаписиЭлектроннойПочты.ИспользоватьБезопасныйВходНаСерверВходящейПочты КАК ТолькоЗащищеннаяАутентификацияIMAP, - | УчетныеЗаписиЭлектроннойПочты.СерверВходящейПочты КАК АдресСервераPOP3, - | УчетныеЗаписиЭлектроннойПочты.ПортСервераВходящейПочты КАК ПортPOP3, - | УчетныеЗаписиЭлектроннойПочты.ИспользоватьЗащищенноеСоединениеДляВходящейПочты КАК ИспользоватьSSLPOP3, - | УчетныеЗаписиЭлектроннойПочты.Пользователь КАК Пользователь, - | УчетныеЗаписиЭлектроннойПочты.Пароль КАК Пароль, - | УчетныеЗаписиЭлектроннойПочты.ИспользоватьБезопасныйВходНаСерверВходящейПочты КАК ТолькоЗащищеннаяАутентификацияPOP3, - | УчетныеЗаписиЭлектроннойПочты.СерверИсходящейПочты КАК АдресСервераSMTP, - | УчетныеЗаписиЭлектроннойПочты.ПортСервераИсходящейПочты КАК ПортSMTP, - | УчетныеЗаписиЭлектроннойПочты.ИспользоватьЗащищенноеСоединениеДляИсходящейПочты КАК ИспользоватьSSLSMTP, - | УчетныеЗаписиЭлектроннойПочты.ТребуетсяВходНаСерверПередОтправкой КАК POP3ПередSMTP, - | УчетныеЗаписиЭлектроннойПочты.ПользовательSMTP КАК ПользовательSMTP, - | УчетныеЗаписиЭлектроннойПочты.ПарольSMTP КАК ПарольSMTP, - | УчетныеЗаписиЭлектроннойПочты.ИспользоватьБезопасныйВходНаСерверИсходящейПочты КАК ТолькоЗащищеннаяАутентификацияSMTP, - | УчетныеЗаписиЭлектроннойПочты.ВремяОжидания КАК Таймаут, - | УчетныеЗаписиЭлектроннойПочты.ПротоколВходящейПочты КАК Протокол - |ИЗ - | Справочник.УчетныеЗаписиЭлектроннойПочты КАК УчетныеЗаписиЭлектроннойПочты - |ГДЕ - | УчетныеЗаписиЭлектроннойПочты.Ссылка = &Ссылка"; - - Запрос = Новый Запрос(ТекстЗапроса); - Запрос.УстановитьПараметр("Ссылка", УчетнаяЗапись); - Выборка = Запрос.Выполнить().Выбрать(); - - Результат = Неопределено; - Если Выборка.Следующий() Тогда - СписокСвойствIMAP = "АдресСервераIMAP,ПортIMAP,ИспользоватьSSLIMAP,ПользовательIMAP,ПарольIMAP,ТолькоЗащищеннаяАутентификацияIMAP"; - СписокСвойствPOP3 = "АдресСервераPOP3,ПортPOP3,ИспользоватьSSLPOP3,Пользователь,Пароль,ТолькоЗащищеннаяАутентификацияPOP3"; - СписокСвойствSMTP = "АдресСервераSMTP,ПортSMTP,ИспользоватьSSLSMTP,ПользовательSMTP,ПарольSMTP,ТолькоЗащищеннаяАутентификацияSMTP"; - - ТребуемыеСвойства = ""; - - Если ДляПолучения Тогда - Если Выборка.Протокол = "IMAP" Тогда - ТребуемыеСвойства = СписокСвойствIMAP; - Иначе - ТребуемыеСвойства = СписокСвойствPOP3; - КонецЕсли; - Иначе - ТребуемыеСвойства = СписокСвойствSMTP; - Если Выборка.Протокол <> "IMAP" И Выборка.POP3ПередSMTP Тогда - ТребуемыеСвойства = ТребуемыеСвойства + ",POP3ПередSMTP," + СписокСвойствPOP3; - КонецЕсли; - КонецЕсли; - ТребуемыеСвойства = ТребуемыеСвойства + ",Таймаут"; - - Результат = Новый ИнтернетПочтовыйПрофиль; - ЗаполнитьЗначенияСвойств(Результат, Выборка, ТребуемыеСвойства); - - Если Пароль <> Неопределено Тогда - Если ПустаяСтрока(Результат.Пароль) Тогда - Результат.Пароль = Пароль; - КонецЕсли; - Если ПустаяСтрока(Результат.ПарольIMAP) Тогда - Результат.ПарольIMAP = Пароль; - КонецЕсли; - Если ПустаяСтрока(Результат.ПарольSMTP) Тогда - Результат.ПарольSMTP = Пароль; - КонецЕсли; - КонецЕсли; - КонецЕсли; - - Возврат Результат; - -КонецФункции - // Функция записывает адаптированный набор писем по переданным колонкам. // Значения колонок, типы которых не поддерживаются для оперирования на клиенте // преобразуются к строковому виду. @@ -705,7 +729,7 @@ Если Колонки <> Неопределено И ТипЗнч(Колонки) = Тип("Строка") Тогда - Колонки = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(Колонки, ","); + Колонки = СтрРазделить(Колонки, ","); Для Индекс = 0 По Колонки.Количество()-1 Цикл Колонки[Индекс] = СокрЛП(Колонки[Индекс]); КонецЦикла; @@ -823,13 +847,16 @@ // Функция ПарольЗадан(УчетнаяЗапись) Экспорт - Возврат ЗначениеЗаполнено(ОбщегоНазначения.ЗначениеРеквизитаОбъекта(УчетнаяЗапись, "Пароль")); + УстановитьПривилегированныйРежим(Истина); + Пароль = ОбщегоНазначения.ПрочитатьДанныеИзБезопасногоХранилища(УчетнаяЗапись, "Пароль"); + УстановитьПривилегированныйРежим(Ложь); + Возврат ЗначениеЗаполнено(Пароль); КонецФункции // Служебная функция используется для проверки учетной записи электронной почты. // -Процедура ПроверитьВозможностьОтправкиИПолученияЭлектроннойПочты(УчетнаяЗапись, ПарольПараметр, СообщениеОбОшибке, ДополнительноеСообщение) Экспорт +Процедура ПроверитьВозможностьОтправкиИПолученияЭлектроннойПочты(УчетнаяЗапись, СообщениеОбОшибке, ДополнительноеСообщение) Экспорт НастройкиУчетнойЗаписи = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(УчетнаяЗапись, "ИспользоватьДляОтправки,ИспользоватьДляПолучения"); @@ -838,11 +865,9 @@ Если НастройкиУчетнойЗаписи.ИспользоватьДляОтправки Тогда Попытка - ПроверитьВозможностьОтправкиТестовогоСообщения(УчетнаяЗапись, ПарольПараметр); + ПроверитьВозможностьПодключенияКПочтовомуСерверу(УчетнаяЗапись, Ложь); Исключение - СообщениеОбОшибке = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Ошибка при отправке сообщения: %1'"), - КраткоеПредставлениеОшибки(ИнформацияОбОшибке()) ); + СообщениеОбОшибке = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Ошибка в настройках исходящей почты: %1'"), КраткоеПредставлениеОшибки(ИнформацияОбОшибке())); КонецПопытки; Если Не НастройкиУчетнойЗаписи.ИспользоватьДляПолучения Тогда ДополнительноеСообщение = Символы.ПС + НСтр("ru = '(Выполнена проверка отправки электронных сообщений.)'"); @@ -851,16 +876,14 @@ Если НастройкиУчетнойЗаписи.ИспользоватьДляПолучения Тогда Попытка - ПроверитьВходНаСерверВходящейЭлектроннойПочты(УчетнаяЗапись, ПарольПараметр); + ПроверитьВозможностьПодключенияКПочтовомуСерверу(УчетнаяЗапись, Истина); Исключение Если ЗначениеЗаполнено(СообщениеОбОшибке) Тогда СообщениеОбОшибке = СообщениеОбОшибке + Символы.ПС; КонецЕсли; - СообщениеОбОшибке = СообщениеОбОшибке - + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Ошибка доступа к серверу входящих сообщений: %1'"), - КраткоеПредставлениеОшибки(ИнформацияОбОшибке()) ); + СообщениеОбОшибке = СообщениеОбОшибке + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Ошибка в настройках входящей почты: %1'"), + КраткоеПредставлениеОшибки(ИнформацияОбОшибке()) ); КонецПопытки; Если Не НастройкиУчетнойЗаписи.ИспользоватьДляОтправки Тогда ДополнительноеСообщение = Символы.ПС + НСтр("ru = '(Выполнена проверка получения электронных сообщений.)'"); @@ -869,70 +892,26 @@ КонецПроцедуры -// Процедура проверяющая возможность отправления почтового сообщения через -// учетную запись. -// -// Параметры: -// УчетнаяЗапись - СправочникСсылка.УчетныеЗаписиЭлектроннойПочты - учетная запись, -// которую необходимо проверить. -// -// Возвращаемое значение -// структура -// ключ "статус" - булево, если Истина - успешно вошли на сервер pop3 -// если Ложь - ошибка при входе на сервер pop3 -// ключ "СообщениеОбОшибке" - строка - если статус Ложь - содержит сообщение об ошибке. -// -Процедура ПроверитьВозможностьОтправкиТестовогоСообщения(Знач УчетнаяЗапись, Знач Пароль = Неопределено) +Процедура ПроверитьВозможностьПодключенияКПочтовомуСерверу(Знач УчетнаяЗапись, ВходящаяПочта) - ПараметрыПисьма = Новый Структура; + Профиль = ИнтернетПочтовыйПрофиль(УчетнаяЗапись, ВходящаяПочта); + Соединение = Новый ИнтернетПочта; - ПараметрыПисьма.Вставить("Тема", НСтр("ru = 'Тестовое сообщение 1С:Предприятие'")); - ПараметрыПисьма.Вставить("Тело", НСтр("ru = 'Это сообщение отправлено подсистемой электронной почты 1С:Предприятие'")); - ПараметрыПисьма.Вставить("Кому", ОбщегоНазначения.ЗначениеРеквизитаОбъекта(УчетнаяЗапись, "АдресЭлектроннойПочты")); - Если Пароль <> Неопределено Тогда - ПараметрыПисьма.Вставить("Пароль", Пароль); + Если ВходящаяПочта Тогда + Протокол = ПротоколИнтернетПочты.POP3; + Если ОбщегоНазначения.ЗначениеРеквизитаОбъекта(УчетнаяЗапись, "ПротоколВходящейПочты") = "IMAP" Тогда + Протокол = ПротоколИнтернетПочты.IMAP; + КонецЕсли; + Соединение.Подключиться(Профиль, Протокол); + Иначе + Соединение.Подключиться(Профиль); КонецЕсли; - РаботаСПочтовымиСообщениями.ОтправитьПочтовоеСообщение(УчетнаяЗапись, ПараметрыПисьма); + Соединение.Отключиться(); КонецПроцедуры -// Процедура проверяющая возможность получения почтового сообщения через -// учетную запись. -// -// Параметры: -// УчетнаяЗапись - СправочникСсылка.УчетныеЗаписиЭлектроннойПочты - учетная запись, -// которую необходимо проверить. -// -// Возвращаемое значение -// структура -// ключ "статус" - булево, если Истина - успешно вошли на сервер pop3 -// если Ложь - ошибка при входе на сервер pop3 -// ключ "СообщениеОбОшибке" - строка - если статус Ложь - содержит сообщение об ошибке. -// -Процедура ПроверитьВходНаСерверВходящейЭлектроннойПочты(Знач УчетнаяЗапись, Знач Пароль = Неопределено) - - ПараметрыЗагрузки = Новый Структура("РежимТестирования", Истина); - - Если Пароль <> Неопределено Тогда - ПараметрыЗагрузки.Вставить("Пароль", Пароль); - КонецЕсли; - - Попытка - РаботаСПочтовымиСообщениями.ЗагрузитьПочтовыеСообщения(УчетнаяЗапись, ПараметрыЗагрузки); - Исключение - ЗаписьЖурналаРегистрации(СобытиеЖурналаРегистрации(), УровеньЖурналаРегистрации.Ошибка,, - УчетнаяЗапись, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); - ВызватьИсключение; - КонецПопытки; - -КонецПроцедуры - -Функция СобытиеЖурналаРегистрации() - Возврат НСтр("ru = 'Проверка учетной записи электронной почты'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()); -КонецФункции - -// РИБ +// РИБ // Процедура является обработчиком одноименного события, возникающего при обмене данными в распределенной // информационной базе. @@ -999,8 +978,44 @@ КонецЦикла; КонецПроцедуры +// Обработчики событий подсистемы Обмен данными. + +// Обработчик начальной настройки ИБ после создания узла РИБ. +// Вызывается в момент первого запуска подчиненного узла РИБ (в том числе АРМ). +// +Процедура ПриНастройкеПодчиненногоУзлаРИБ() Экспорт + + ОтключитьИспользованиеУчетныхЗаписей(); + +КонецПроцедуры + // Управление доступом +// Заполняет виды доступа, используемые в ограничениях прав доступа. +// Виды доступа Пользователи и ВнешниеПользователи уже заполнены. +// Их можно удалить, если они не требуются для ограничения прав доступа. +// +// Параметры: +// ВидыДоступа - ТаблицаЗначений - с колонками: +// * Имя - Строка - имя используемое в описании поставляемых +// профилей групп доступа и текстах ОДД. +// * Представление - Строка - представляет вид доступа в профилях и группах доступа. +// * ТипЗначений - Тип - тип ссылки значений доступа. +// Например, Тип("СправочникСсылка.Номенклатура"). +// * ТипГруппЗначений - Тип - тип ссылки групп значений доступа. +// Например, Тип("СправочникСсылка.ГруппыДоступаНоменклатуры"). +// * НесколькоГруппЗначений - Булево - Истина указывает, что для значения доступа (Номенклатуры), можно +// выбрать несколько групп значений (Групп доступа номенклатуры). +// +Процедура ПриЗаполненииВидовДоступа(ВидыДоступа) Экспорт + + ВидДоступа = ВидыДоступа.Добавить(); + ВидДоступа.Имя = "УчетныеЗаписиЭлектроннойПочты"; + ВидДоступа.Представление = НСтр("ru = 'Учетные записи электронной почты'"); + ВидДоступа.ТипЗначений = Тип("СправочникСсылка.УчетныеЗаписиЭлектроннойПочты"); + +КонецПроцедуры + // Заполняет состав видов доступа, используемых при ограничении прав объектов метаданных. // Если состав видов доступа не заполнен, отчет "Права доступа" покажет некорректные сведения. // @@ -1044,8 +1059,7 @@ Если МодульУправлениеДоступомСлужебный.ВидДоступаСуществует("УчетныеЗаписиЭлектроннойПочты") Тогда - Описание = Описание + - " + Описание = Описание + " |Справочник.УчетныеЗаписиЭлектроннойПочты.Чтение.УчетныеЗаписиЭлектроннойПочты |"; @@ -1053,28 +1067,4 @@ КонецПроцедуры -// Заполняет виды доступа, используемые в ограничениях прав доступа. -// Виды доступа Пользователи и ВнешниеПользователи уже заполнены. -// Их можно удалить, если они не требуются для ограничения прав доступа. -// -// Параметры: -// ВидыДоступа - ТаблицаЗначений с полями: -// - Имя - Строка - имя используемое в описании поставляемых -// профилей групп доступа и текстах ОДД. -// - Представление - Строка - представляет вид доступа в профилях и группах доступа. -// - ТипЗначений - Тип - тип ссылки значений доступа. Например, Тип("СправочникСсылка.Номенклатура"). -// - ТипГруппЗначений - Тип - тип ссылки групп значений доступа. Например, -// Тип("СправочникСсылка.ГруппыДоступаНоменклатуры"). -// - НесколькоГруппЗначений - Булево - Истина указывает, что для значения доступа (Номенклатуры), -// можно выбрать несколько групп значений (Групп доступа номенклатуры). -// -Процедура ПриЗаполненииВидовДоступа(ВидыДоступа) Экспорт - - ВидДоступа = ВидыДоступа.Добавить(); - ВидДоступа.Имя = "УчетныеЗаписиЭлектроннойПочты"; - ВидДоступа.Представление = НСтр("ru = 'Учетные записи электронной почты'"); - ВидДоступа.ТипЗначений = Тип("СправочникСсылка.УчетныеЗаписиЭлектроннойПочты"); - -КонецПроцедуры - #КонецОбласти diff --git a/SSL/src/CommonModules/РаботаСФайлами/Module.bsl b/SSL/src/CommonModules/РаботаСФайлами/Module.bsl index 61e655dda..eca97aa15 100644 --- a/SSL/src/CommonModules/РаботаСФайлами/Module.bsl +++ b/SSL/src/CommonModules/РаботаСФайлами/Module.bsl @@ -43,26 +43,6 @@ КонецФункции -// Обработчик события ПередЗаписью объектов-владельцев файлов. -// Определен для объектов, кроме Документ. -// -// Параметры: -// Источник - Объект - стандартный параметр события ПередЗаписью, например, СправочникОбъект. -// Исключение - ДокументОбъект. -// Отказ - Булево - стандартный параметр события ПередЗаписью. -// -Процедура УстановитьПометкуУдаленияФайловПередЗаписью(Источник, Отказ) Экспорт - - Если Источник.ОбменДанными.Загрузка Тогда - Возврат; - КонецЕсли; - - Если Источник.ПометкаУдаления <> ОбщегоНазначения.ЗначениеРеквизитаОбъекта(Источник.Ссылка, "ПометкаУдаления") Тогда - ПометитьНаУдалениеПриложенныеФайлы(Источник.Ссылка, Источник.ПометкаУдаления); - КонецЕсли; - -КонецПроцедуры - // Обработчик события ПередЗаписью объектов-владельцев файлов. // Определен только для объектов Документ. // @@ -88,6 +68,30 @@ #Область СлужебныеПроцедурыИФункции +// Обработчик события ПередЗаписью объектов-владельцев файлов. +// Определен для объектов, кроме Документ. +// +// Параметры: +// Источник - Объект - стандартный параметр события ПередЗаписью, например, СправочникОбъект. +// Исключение - ДокументОбъект. +// Отказ - Булево - стандартный параметр события ПередЗаписью. +// +Процедура УстановитьПометкуУдаленияФайловПередЗаписью(Источник, Отказ) Экспорт + + Если Источник.ОбменДанными.Загрузка Тогда + Возврат; + КонецЕсли; + + Если СтандартныеПодсистемыСервер.ЭтоИдентификаторОбъектаМетаданных(Источник) Тогда + Возврат; + КонецЕсли; + + Если Источник.ПометкаУдаления <> ОбщегоНазначения.ЗначениеРеквизитаОбъекта(Источник.Ссылка, "ПометкаУдаления") Тогда + ПометитьНаУдалениеПриложенныеФайлы(Источник.Ссылка, Источник.ПометкаУдаления); + КонецЕсли; + +КонецПроцедуры + //////////////////////////////////////////////////////////////////////////////// // Вспомогательные процедуры и функции. diff --git a/SSL/src/CommonModules/РаботаСФайламиКлиент/Module.bsl b/SSL/src/CommonModules/РаботаСФайламиКлиент/Module.bsl index 6554bbc75..dc262d60c 100644 --- a/SSL/src/CommonModules/РаботаСФайламиКлиент/Module.bsl +++ b/SSL/src/CommonModules/РаботаСФайламиКлиент/Module.bsl @@ -5,31 +5,6 @@ #Область ПрограммныйИнтерфейс -//////////////////////////////////////////////////////////////////////////////// -// Процедуры и функция для работы со сканером. - -// Открывает форму настройки сканирования. -Процедура ОткрытьФормуНастройкиСканирования() Экспорт - - Если ОбщегоНазначенияКлиентСервер.ЭтоLinuxКлиент() Тогда - ТекстСообщения = НСтр("ru = 'Сканирование не поддерживается в клиенте под управлением ОС Linux.'"); - ПоказатьПредупреждение(, ТекстСообщения); - Возврат; - КонецЕсли; - - КомпонентаУстановлена = РаботаСФайламиСлужебныйКлиент.ПроинициализироватьКомпоненту(); - - СистемнаяИнформация = Новый СистемнаяИнформация(); - ИдентификаторКлиента = СистемнаяИнформация.ИдентификаторКлиента; - - ПараметрыФормы = Новый Структура; - ПараметрыФормы.Вставить("КомпонентаУстановлена", КомпонентаУстановлена); - ПараметрыФормы.Вставить("ИдентификаторКлиента", ИдентификаторКлиента); - - ОткрытьФорму("Справочник.Файлы.Форма.НастройкаСканирования", ПараметрыФормы); - -КонецПроцедуры - //////////////////////////////////////////////////////////////////////////////// // Команды работы с файлами @@ -58,11 +33,10 @@ // Создает новый файл интерактивно. // // Параметры: -// ОбработчикРезультата - ОписаниеОповещения - Необязательный. Описание процедуры, принимающей +// ОбработчикРезультата - ОписаниеОповещения - Описание процедуры, принимающей // результат работы метода. // // ВладелецФайла - ЛюбаяСсылка - определяет группу, в которой создается Элемент. -// Если группа неизвестна в момент вызова этого метода - там будет Неопределено. // // ФормаВладелец - УправляемаяФорма - форма, из которой вызвано создание файла. // @@ -77,8 +51,11 @@ // * Ложь - Значение по умолчанию. Открывать карточку файла после создания. // * Истина - Не открывать карточку файла после создания. // -Процедура ДобавитьФайл(ОбработчикРезультата = Неопределено, ВладелецФайла = Неопределено, - ФормаВладелец = Неопределено, РежимСоздания = Неопределено, НеОткрыватьКарточку = Ложь) Экспорт +Процедура ДобавитьФайл(ОбработчикРезультата, + ВладелецФайла, + ФормаВладелец, + РежимСоздания = Неопределено, + НеОткрыватьКарточку = Ложь) Экспорт Если РежимСоздания = Неопределено Тогда РаботаСФайламиСлужебныйКлиент.ДобавитьФайл(ОбработчикРезультата, ВладелецФайла, ФормаВладелец, , НеОткрыватьКарточку); @@ -165,4 +142,121 @@ КонецПроцедуры +Процедура НапечататьФайлы(ДанныеФайлов, УникальныйИдентификатор = Неопределено) Экспорт + + ПараметрыВыполнения = Новый Структура; + ПараметрыВыполнения.Вставить("НомерФайла", 0); + ПараметрыВыполнения.Вставить("ДанныеФайлов", ДанныеФайлов); + ПараметрыВыполнения.Вставить("УникальныйИдентификатор", УникальныйИдентификатор); + Обработчик = Новый ОписаниеОповещения("НапечататьФайлыВыполнение", ЭтотОбъект, ПараметрыВыполнения); + ВыполнитьОбработкуОповещения(Обработчик); + +КонецПроцедуры + +Процедура НапечататьФайлыВыполнение(ОбработчикРезультата, ПараметрыВыполнения) Экспорт + + ОбработкаПрерыванияПользователя(); + + Если ПараметрыВыполнения.НомерФайла >= ПараметрыВыполнения.ДанныеФайлов.Количество() Тогда + Возврат; + КонецЕсли; + ДанныеФайла = ПараметрыВыполнения.ДанныеФайлов[ПараметрыВыполнения.НомерФайла]; + + Обработчик = Новый ОписаниеОповещения("НапечататьФайлПослеПолученияВерсииВРабочийКаталог", ЭтотОбъект, ПараметрыВыполнения); + РаботаСФайламиСлужебныйКлиент.ПолучитьФайлВерсииВРабочийКаталог( + Обработчик, + ДанныеФайла, + "", + ПараметрыВыполнения.УникальныйИдентификатор); + +КонецПроцедуры + +Процедура НапечататьФайлПослеПолученияВерсииВРабочийКаталог(Результат, ПараметрыВыполнения) Экспорт + + Если Результат.ФайлПолучен Тогда + + Если ПараметрыВыполнения.НомерФайла >= ПараметрыВыполнения.ДанныеФайлов.Количество() Тогда + Возврат; + КонецЕсли; + ДанныеФайла = ПараметрыВыполнения.ДанныеФайлов[ПараметрыВыполнения.НомерФайла]; + + НапечататьФайлПриложением(ДанныеФайла, Результат.ПолноеИмяФайла); + + КонецЕсли; + + // переходим к печати следующего файла + ПараметрыВыполнения.НомерФайла = ПараметрыВыполнения.НомерФайла + 1; + Обработчик = Новый ОписаниеОповещения("НапечататьФайлыВыполнение", ЭтотОбъект, ПараметрыВыполнения); + ВыполнитьОбработкуОповещения(Обработчик); + +КонецПроцедуры + +Процедура НапечататьФайлПриложением(ДанныеФайла, ИмяОткрываемогоФайла) + + РасширенияИсключения = + " m3u, m4a, mid, midi, mp2, mp3, mpa, rmi, wav, wma, + | 3g2, 3gp, 3gp2, 3gpp, asf, asx, avi, m1v, m2t, m2ts, m2v, m4v, mkv, mov, mp2v, mp4, mp4v, mpe, mpeg, mts, vob, wm, wmv, wmx, wvx, + | 7z, zip, rar, arc, arh, arj, ark, p7m, pak, package, + | app, com, exe, jar, dll, res, iso, isz, mdf, mds, + | cf, dt, epf, erf"; + + Расширение = НРег(ДанныеФайла.Расширение); + Если СтрНайти(РасширенияИсключения, " "+Расширение+",") > 0 Тогда + + Возврат; + + ИначеЕсли Расширение = "grs" Тогда + + Схема = Новый ГрафическаяСхема; + Схема.Прочитать(ИмяОткрываемогоФайла); + Схема.Напечатать();; + + ИначеЕсли Расширение = "mxl" Тогда + + ТабличныйДокумент = Новый ТабличныйДокумент; + ТабличныйДокумент.Прочитать(ИмяОткрываемогоФайла); + ТабличныйДокумент.Напечатать(); + + Иначе + + Попытка + + СистемнаяИнфо = Новый СистемнаяИнформация; + Если СистемнаяИнфо.ТипПлатформы = ТипПлатформы.Windows_x86 + Или СистемнаяИнфо.ТипПлатформы = ТипПлатформы.Windows_x86_64 Тогда + ИмяОткрываемогоФайла = СтрЗаменить(ИмяОткрываемогоФайла, "/", "\"); + КонецЕсли; + + НапечататьИзПриложенияПоИмениФайла(ИмяОткрываемогоФайла); + + Исключение + + Инфо = ИнформацияОбОшибке(); + ПоказатьПредупреждение(,СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Описание=""%1""'"), + КраткоеПредставлениеОшибки(Инфо))); + + КонецПопытки; + + КонецЕсли; + +КонецПроцедуры + +Процедура НапечататьИзПриложенияПоИмениФайла(ИмяОткрываемогоФайла) Экспорт + + Если Не ЗначениеЗаполнено(ИмяОткрываемогоФайла) Тогда + Возврат; + КонецЕсли; + + СистемнаяИнфо = Новый СистемнаяИнформация; + Если СистемнаяИнфо.ТипПлатформы = ТипПлатформы.Windows_x86 + Или СистемнаяИнфо.ТипПлатформы = ТипПлатформы.Windows_x86_64 Тогда + + Shell = Новый COMОбъект("Shell.Application"); + Shell.ShellExecute(ИмяОткрываемогоФайла, "", "", "print", 1); + + КонецЕсли; + +КонецПроцедуры + #КонецОбласти diff --git a/SSL/src/CommonModules/РаботаСФайламиКлиентСервер/Module.bsl b/SSL/src/CommonModules/РаботаСФайламиКлиентСервер/Module.bsl index 3260fc807..c2c284a05 100644 --- a/SSL/src/CommonModules/РаботаСФайламиКлиентСервер/Module.bsl +++ b/SSL/src/CommonModules/РаботаСФайламиКлиентСервер/Module.bsl @@ -41,27 +41,6 @@ КонецФункции -// Получить имя сканированного файла, вида ДМ-00000012, где ДМ - префикс базы. -// -// Параметры: -// НомерФайла - Число - целое число, например, 12. -// ПрефиксБазы - Строка - префикс базы, например, "ДМ". -// -// Возвращаемое значение: -// Строка - имя сканированного файла, например, "ДМ-00000012". -// -Функция ИмяСканированногоФайла(НомерФайла, ПрефиксБазы) Экспорт - - ИмяФайла = ""; - Если НЕ ПустаяСтрока(ПрефиксБазы) Тогда - ИмяФайла = ПрефиксБазы + "-"; - КонецЕсли; - - ИмяФайла = ИмяФайла + Формат(НомерФайла, "ЧЦ=9; ЧВН=; ЧГ=0"); - Возврат ИмяФайла; - -КонецФункции - // Возвращает строковую константу для формирования сообщений журнала регистрации. // // Возвращаемое значение: diff --git a/SSL/src/CommonModules/РаботаСФайламиПереопределяемый/Module.bsl b/SSL/src/CommonModules/РаботаСФайламиПереопределяемый/Module.bsl index bf1dc1ce1..e77b7f7bb 100644 --- a/SSL/src/CommonModules/РаботаСФайламиПереопределяемый/Module.bsl +++ b/SSL/src/CommonModules/РаботаСФайламиПереопределяемый/Module.bsl @@ -62,16 +62,18 @@ КонецПроцедуры -#КонецОбласти - -#Область СлужебныеПроцедурыИФункции - -// Устарела. Будет удалена в следующей редакции БСП. -// Следует использовать процедуру ПриПопыткеЗанятьФайл. -Функция ВозможноЗанятьФайл(ДанныеФайла, СтрокаОшибки = "") Экспорт +// Формирует массив метаданных, которые не должны выводиться в настройках очистки файлов. +// +// Возвращаемое значение: +// Массив - массив, содержащий метаданные, которые не должны выводиться в настройках очистки файлов. +// +Функция ОбъектыИсключенияПриОчисткеФайлов() Экспорт - Возврат Истина; + Массив = Новый Массив; + + Возврат Массив; КонецФункции #КонецОбласти + diff --git a/SSL/src/CommonModules/РаботаСФайламиСлужебный/Module.bsl b/SSL/src/CommonModules/РаботаСФайламиСлужебный/Module.bsl index a95be6998..c0943472c 100644 --- a/SSL/src/CommonModules/РаботаСФайламиСлужебный/Module.bsl +++ b/SSL/src/CommonModules/РаботаСФайламиСлужебный/Module.bsl @@ -16,7 +16,7 @@ // СЕРВЕРНЫЕ ОБРАБОТЧИКИ. - СерверныеОбработчики["СтандартныеПодсистемы.БазоваяФункциональность\ПриДобавленииПараметровРаботыКлиентскойЛогикиСтандартныхПодсистемПриЗавершении"].Добавить( + СерверныеОбработчики["СтандартныеПодсистемы.БазоваяФункциональность\ПриДобавленииПараметровРаботыКлиентаПриЗавершении"].Добавить( "РаботаСФайламиСлужебный"); СерверныеОбработчики["СтандартныеПодсистемы.БазоваяФункциональность\ПриОтправкеДанныхПодчиненному"].Добавить( @@ -103,18 +103,6 @@ КонецФункции -// Заполняет структуру параметров, необходимых для работы клиентского кода -// конфигурации при завершении работы. -// -// Параметры: -// Параметры - Структура - структура параметров. -// -Процедура ДобавитьПараметрыРаботыКлиентаПриЗавершении(Параметры) Экспорт - - Параметры.Вставить("РаботаСФайлами", ПолучитьПараметрыПриЗавершенииРаботы()); - -КонецПроцедуры - //////////////////////////////////////////////////////////////////////////////// // Процедуры используемые при обмене данными. @@ -513,6 +501,248 @@ Объекты.Вставить(Метаданные.Справочники.ВерсииФайлов.ПолноеИмя(), "РеквизитыРедактируемыеВГрупповойОбработке"); КонецПроцедуры +//////////////////////////////////////////////////////////////////////////////// +// Очистка ненужных файлов + +Функция ТекстЗапросаДляОчисткиФайлов(ВладелецФайла, Настройка, МассивИсключений, ЭлементИсключение, ДанныеДляОтчета = Ложь) Экспорт + + Если Настройка.ПериодОчистки <> Перечисления.ПериодОчисткиФайлов.ПоПравилу Тогда + Если ДанныеДляОтчета Тогда + ТекстЗапроса = + "ВЫБРАТЬ + | ТИПЗНАЧЕНИЯ(Файлы.ВладелецФайла) КАК ВладелецФайла, + | ВерсииФайлов.Размер /1024 /1024 КАК ОбъемНенужныхФайлов"; + Иначе + ТекстЗапроса = + "ВЫБРАТЬ + | Файлы.Ссылка КАК ФайлСсылка, + | ВерсииФайлов.Ссылка КАК ВерсияСсылка"; + КонецЕсли; + ТекстЗапроса = ТекстЗапроса + " + |ИЗ + | Справочник.Файлы КАК Файлы + | ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ВерсииФайлов КАК ВерсииФайлов + | ПО Файлы.Ссылка = ВерсииФайлов.Владелец + |ГДЕ + | НЕ Файлы.ПометкаУдаления + | И НЕ ВерсииФайлов.ПометкаУдаления + | И ТИПЗНАЧЕНИЯ(Файлы.ВладелецФайла) = &ТипВладельца + | И ВЫБОР + | КОГДА ВерсииФайлов.ТипХраненияФайла = ЗНАЧЕНИЕ(Перечисление.ТипыХраненияФайлов.ВТомахНаДиске) + | ТОГДА ВерсииФайлов.Том <> ЗНАЧЕНИЕ(Справочник.ТомаХраненияФайлов.ПустаяСсылка) + | ИЛИ (ВЫРАЗИТЬ(ВерсииФайлов.ПутьКФайлу КАК СТРОКА(100))) <> """" + | ИНАЧЕ ИСТИНА + | КОНЕЦ + | И ВерсииФайлов.ДатаСоздания <= &ПериодОчистки"; + Иначе + МассивРеквизитовСТипомДата = Новый Массив; + + ТипОбъекта = ВладелецФайла; + ВсеСправочники = Справочники.ТипВсеСсылки(); + ВсеДокументы = Документы.ТипВсеСсылки(); + ЕстьТипДата = Ложь; + + ТекстЗапроса = + "ВЫБРАТЬ + | " + ТипОбъекта.Имя + ".Ссылка,"; + Если ВсеСправочники.СодержитТип(ТипЗнч(ТипОбъекта.ЗначениеПустойСсылки)) Тогда + Справочник = Метаданные.Справочники[ТипОбъекта.Имя]; + Для Каждого Реквизит Из Справочник.Реквизиты Цикл + ТекстЗапроса = ТекстЗапроса + Символы.ПС + ТипОбъекта.Имя + "." + Реквизит.Имя + ","; + КонецЦикла; + ИначеЕсли + ВсеДокументы.СодержитТип(ТипЗнч(ТипОбъекта.ЗначениеПустойСсылки)) Тогда + Документ = Метаданные.Документы[ТипОбъекта.Имя]; + Для Каждого Реквизит Из Документ.Реквизиты Цикл + Если Реквизит.Тип = Новый ОписаниеТипов("Дата") Тогда + ТекстЗапроса = ТекстЗапроса + Символы.ПС + "РАЗНОСТЬДАТ(" + Реквизит.Имя + ", &ТекущаяДата, ДЕНЬ) Как ДнейДоУдаленияОт" + Реквизит.Имя + ","; + КонецЕсли; + ТекстЗапроса = ТекстЗапроса + Символы.ПС + ТипОбъекта.Имя + "." + Реквизит.Имя + ","; + КонецЦикла; + КонецЕсли; + Если ДанныеДляОтчета Тогда + ТекстЗапроса = ТекстЗапроса + " + | ТИПЗНАЧЕНИЯ(Файлы.ВладелецФайла) КАК ВладелецФайла, + | ВерсииФайлов.Размер /1024 /1024 КАК ОбъемНенужныхФайлов"; + Иначе + ТекстЗапроса = ТекстЗапроса + " + | Файлы.Ссылка КАК ФайлСсылка, + | ВерсииФайлов.Ссылка КАК ВерсияСсылка"; + КонецЕсли; + ТекстЗапроса = ТекстЗапроса + " + |ИЗ + | " + ТипОбъекта.ПолноеИмя+ " КАК " + ТипОбъекта.Имя + " + | ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.Файлы КАК Файлы + | ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ВерсииФайлов КАК ВерсииФайлов + | ПО Файлы.Ссылка = ВерсииФайлов.Владелец + | ПО " + ТипОбъекта.Имя + ".Ссылка = Файлы.ВладелецФайла + |ГДЕ + | НЕ Файлы.ПометкаУдаления + | И НЕ ВерсииФайлов.ПометкаУдаления + | И ВЫБОР + | КОГДА ВерсииФайлов.ТипХраненияФайла = ЗНАЧЕНИЕ(Перечисление.ТипыХраненияФайлов.ВТомахНаДиске) + | ТОГДА ВерсииФайлов.Том <> ЗНАЧЕНИЕ(Справочник.ТомаХраненияФайлов.ПустаяСсылка) + | ИЛИ (ВЫРАЗИТЬ(ВерсииФайлов.ПутьКФайлу КАК СТРОКА(100))) <> """" + | ИНАЧЕ ИСТИНА + | КОНЕЦ + | И ТИПЗНАЧЕНИЯ(Файлы.ВладелецФайла) = &ТипВладельца"; + КонецЕсли; + + Если МассивИсключений.Количество() > 0 Тогда + ТекстЗапроса = ТекстЗапроса + " + | И НЕ Файлы.ВладелецФайла В ИЕРАРХИИ (&МассивИсключений)"; + КонецЕсли; + Если ЭлементИсключение <> Неопределено Тогда + ТекстЗапроса = ТекстЗапроса + " + | И Файлы.ВладелецФайла В ИЕРАРХИИ (&ЭлементИсключение)"; + КонецЕсли; + Если Настройка.Действие = Перечисления.ВариантыОчисткиФайлов.ОчиститьВерсии Тогда + ТекстЗапроса = ТекстЗапроса + " + | И ВерсииФайлов.Ссылка <> Файлы.ТекущаяВерсия + | И ВерсииФайлов.РодительскаяВерсия <> ЗНАЧЕНИЕ(Справочник.ВерсииФайлов.ПустаяСсылка)"; + КонецЕсли; + + Возврат ТекстЗапроса; + +КонецФункции + +Процедура СформироватьТекстЗапросаПолногоОбъемаФайлов(ТекстЗапроса) Экспорт + + ТекстЗапроса = + "ВЫБРАТЬ + | ТИПЗНАЧЕНИЯ(Файлы.ВладелецФайла) КАК ВладелецФайла, + | СУММА(ВерсииФайлов.Размер / 1024 / 1024) КАК ОбъемВсего + |ИЗ + | Справочник.Файлы КАК Файлы + | ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ВерсииФайлов КАК ВерсииФайлов + | ПО Файлы.Ссылка = ВерсииФайлов.Владелец + |ГДЕ + | НЕ Файлы.ПометкаУдаления + | И НЕ ВерсииФайлов.ПометкаУдаления + | + |СГРУППИРОВАТЬ ПО + | ТИПЗНАЧЕНИЯ(Файлы.ВладелецФайла)"; + +КонецПроцедуры + +Функция ПроверитьЦелостностьФайлов(ТаблицаФайловНаДиске, Том) Экспорт + + Запрос = Новый Запрос; + Запрос.Текст = + "ВЫБРАТЬ + | ВерсииФайлов.ПутьКФайлу, + | ВерсииФайлов.Расширение, + | ВерсииФайлов.Наименование, + | ВерсииФайлов.ПолноеНаименование КАК Наименование, + | ВерсииФайлов.Представление, + | ВерсииФайлов.Том, + | ВерсииФайлов.Ссылка, + | ВерсииФайлов.ДатаМодификацииФайла, + | ВерсииФайлов.Автор КАК Отредактировал + |ИЗ + | Справочник.ВерсииФайлов КАК ВерсииФайлов + |ГДЕ + | ВерсииФайлов.ТипХраненияФайла = ЗНАЧЕНИЕ(Перечисление.ТипыХраненияФайлов.ВТомахНаДиске) + | И ВерсииФайлов.Том = &Том"; + + Запрос.УстановитьПараметр("Том", Том); + + РезультатЗапроса = Запрос.Выполнить(); + + Выборка = РезультатЗапроса.Выбрать(); + + Пока Выборка.Следующий() Цикл + + ВерсияСсылка = Выборка.Ссылка; + + Если ЗначениеЗаполнено(Выборка.ПутьКФайлу) И ЗначениеЗаполнено(Выборка.Том) Тогда + + ПолныйПутьФайла = ФайловыеФункцииСлужебный.ПолныйПутьТома(Выборка.Том) + Выборка.ПутьКФайлу; + + Файл = Новый Файл(ПолныйПутьФайла); + Если Не Файл.Существует() Тогда + + НесуществующийФайл = ТаблицаФайловНаДиске.Добавить(); + НесуществующийФайл.СтатусПроверки = НСтр("ru = 'Отсутствуют данные в томе на диске'"); + НесуществующийФайл.Файл = ВерсияСсылка; + НесуществующийФайл.ПолноеИмя = ПолныйПутьФайла; + НесуществующийФайл.Расширение = ВерсияСсылка.Расширение; + НесуществующийФайл.Имя = ВерсияСсылка.Наименование; + НесуществующийФайл.Том = Том; + НесуществующийФайл.Отредактировал = Выборка.Отредактировал; + НесуществующийФайл.ДатаРедактирования = Выборка.ДатаМодификацииФайла; + НесуществующийФайл.Количество = 1; + Иначе + + СуществующийФайл = ТаблицаФайловНаДиске.НайтиСтроки(Новый Структура("ПолноеИмя",ПолныйПутьФайла)); + СуществующийФайл[0].Файл = ВерсияСсылка; + СуществующийФайл[0].СтатусПроверки = НСтр("ru = 'Целостные данные'"); + + КонецЕсли; + + КонецЕсли; + + КонецЦикла; + +КонецФункции + +Процедура ВыполнитьОчисткуДанныхОФайле(ФайлСсылка) Экспорт + + ФайлОбъект = ФайлСсылка.ПолучитьОбъект(); + ИмяФайлаСПутем = ""; + ИмяФайлаСПутемДляУдаления = ""; + + Попытка + + НачатьТранзакцию(); + + Если ФайлОбъект.ТипХраненияФайла = Перечисления.ТипыХраненияФайлов.ВТомахНаДиске Тогда + ИмяФайлаСПутем = ФайловыеФункцииСлужебный.ПолныйПутьТома(ФайлОбъект.Том) + ФайлОбъект.ПутьКФайлу; + ИмяФайлаСПутемДляУдаления = ИмяФайлаСПутем + ".del"; + ФайлНаДиске = Новый Файл(ИмяФайлаСПутем); + Если ФайлНаДиске.Существует() Тогда + ФайлНаДиске.УстановитьТолькоЧтение(Ложь); + // Переместим файл во временный + ПереместитьФайл(ИмяФайлаСПутем, ИмяФайлаСПутемДляУдаления); + ФайлОбъект.Том = Справочники.ТомаХраненияФайлов.ПустаяСсылка(); + ФайлОбъект.ПутьКФайлу = ""; + ТекстКомментария = НСтр("ru = 'Файл удален при очистке ненужных файлов.'") + + " " + Формат(ТекущаяДатаСеанса(),"ДФ=dd.MM.yyyy") + Символы.ПС; + ФайлОбъект.Комментарий = ТекстКомментария + ФайлОбъект.Комментарий; + ФайлОбъект.Записать(); + ФайлОбъект.УстановитьПометкуУдаления(Истина); + // Удалим временный файл, т.к. успешно обновили данные о файле + УдалитьФайлы(ИмяФайлаСПутемДляУдаления); + КонецЕсли; + Иначе + РаботаСФайламиСлужебныйВызовСервера.УдалитьЗаписьИзРегистраХранимыеФайлыВерсий(ФайлСсылка); + ФайлОбъект.Комментарий = ТекстКомментария + ФайлОбъект.Комментарий; + ФайлОбъект.Записать(); + ФайлОбъект.УстановитьПометкуУдаления(Истина); + + КонецЕсли; + + ЗафиксироватьТранзакцию(); + + Исключение + + ОтменитьТранзакцию(); + + Если Не ПустаяСтрока(ИмяФайлаСПутем) Тогда + + // Записать ошибку в журнал регистрации + ЗаписьЖурналаРегистрации(НСтр("ru = 'Очистка ненужных файлов'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), + УровеньЖурналаРегистрации.Ошибка,, ФайлСсылка, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); + + // Вернем файл на прежнее место в случае ошибки + ПереместитьФайл(ИмяФайлаСПутемДляУдаления, ИмяФайлаСПутем); + + КонецЕсли; + + КонецПопытки; + +КонецПроцедуры + #КонецОбласти #Область СлужебныеПроцедурыИФункции @@ -528,9 +758,9 @@ // Параметры: // Параметры - Структура - структура параметров. // -Процедура ПриДобавленииПараметровРаботыКлиентскойЛогикиСтандартныхПодсистемПриЗавершении(Параметры) Экспорт +Процедура ПриДобавленииПараметровРаботыКлиентаПриЗавершении(Параметры) Экспорт - ДобавитьПараметрыРаботыКлиентаПриЗавершении(Параметры); + Параметры.Вставить("РаботаСФайлами", ПолучитьПараметрыПриЗавершенииРаботы()); КонецПроцедуры @@ -687,7 +917,7 @@ // Право "Чтение папок и файлов". Право = ВозможныеПрава.Добавить(); - Право.ВладелецПрав = "Справочник.ПапкиФайлов"; + Право.ВладелецПрав = Метаданные.Справочники.ПапкиФайлов.ПолноеИмя(); Право.Имя = "Чтение"; Право.Заголовок = НСтр("ru = 'Чтение'"); Право.Подсказка = НСтр("ru = 'Чтение папок и файлов'"); @@ -697,7 +927,7 @@ // Право "Изменение папок" Право = ВозможныеПрава.Добавить(); - Право.ВладелецПрав = "Справочник.ПапкиФайлов"; + Право.ВладелецПрав = Метаданные.Справочники.ПапкиФайлов.ПолноеИмя(); Право.Имя = "ИзменениеПапок"; Право.Заголовок = НСтр("ru = 'Изменение |папок'"); @@ -706,11 +936,11 @@ // Права, требуемые для этого права. Право.ТребуемыеПрава.Добавить("Чтение"); // Права для стандартных шаблонов ограничений доступа. - Право.ИзменениеВТаблицах.Добавить("Справочник.ПапкиФайлов"); + Право.ИзменениеВТаблицах.Добавить(Метаданные.Справочники.ПапкиФайлов.ПолноеИмя()); // Право "Изменение файлов" Право = ВозможныеПрава.Добавить(); - Право.ВладелецПрав = "Справочник.ПапкиФайлов"; + Право.ВладелецПрав = Метаданные.Справочники.ПапкиФайлов.ПолноеИмя(); Право.Имя = "ИзменениеФайлов"; Право.Заголовок = НСтр("ru = 'Изменение |файлов'"); @@ -722,7 +952,7 @@ // Право "Добавление файлов" Право = ВозможныеПрава.Добавить(); - Право.ВладелецПрав = "Справочник.ПапкиФайлов"; + Право.ВладелецПрав = Метаданные.Справочники.ПапкиФайлов.ПолноеИмя(); Право.Имя = "ДобавлениеФайлов"; Право.Заголовок = НСтр("ru = 'Добавление |файлов'"); @@ -732,7 +962,7 @@ // Право "Пометка удаления файлов". Право = ВозможныеПрава.Добавить(); - Право.ВладелецПрав = "Справочник.ПапкиФайлов"; + Право.ВладелецПрав = Метаданные.Справочники.ПапкиФайлов.ПолноеИмя(); Право.Имя = "ПометкаУдаленияФайлов"; Право.Заголовок = НСтр("ru = 'Пометка |удаления'"); @@ -741,7 +971,7 @@ Право.ТребуемыеПрава.Добавить("ИзменениеФайлов"); Право = ВозможныеПрава.Добавить(); - Право.ВладелецПрав = "Справочник.ПапкиФайлов"; + Право.ВладелецПрав = Метаданные.Справочники.ПапкиФайлов.ПолноеИмя(); Право.Имя = "УправлениеПравами"; Право.Заголовок = НСтр("ru = 'Управление |правами'"); @@ -787,25 +1017,24 @@ // Процедура ПриЗаполненииВидовОграниченийПравОбъектовМетаданных(Описание) Экспорт - Описание = Описание + - " - |Справочник.ПапкиФайлов.Чтение.НастройкиПрав.Справочник.ПапкиФайлов - |Справочник.ПапкиФайлов.Изменение.НастройкиПрав.Справочник.ПапкиФайлов - |Справочник.ВерсииФайлов.Чтение.Объект.Справочник.ПапкиФайлов - |Справочник.ВерсииФайлов.Изменение.Объект.Справочник.ПапкиФайлов - |Справочник.Файлы.Чтение.Объект.Справочник.ПапкиФайлов - |Справочник.Файлы.Изменение.Объект.Справочник.ПапкиФайлов - |РегистрСведений.ХранимыеФайлыВерсий.Чтение.Объект.Справочник.ПапкиФайлов - |"; + Описание = Описание + " + |Справочник.ПапкиФайлов.Чтение.НастройкиПрав.Справочник.ПапкиФайлов + |Справочник.ПапкиФайлов.Изменение.НастройкиПрав.Справочник.ПапкиФайлов + |Справочник.ВерсииФайлов.Чтение.Объект.Справочник.ПапкиФайлов + |Справочник.ВерсииФайлов.Изменение.Объект.Справочник.ПапкиФайлов + |Справочник.Файлы.Чтение.Объект.Справочник.ПапкиФайлов + |Справочник.Файлы.Изменение.Объект.Справочник.ПапкиФайлов + |РегистрСведений.ХранимыеФайлыВерсий.Чтение.Объект.Справочник.ПапкиФайлов + |"; Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.БизнесПроцессыИЗадачи") Тогда - Описание = Описание + - " - |Справочник.ВерсииФайлов.Чтение.Объект.БизнесПроцесс.Задание - |Справочник.Файлы.Чтение.Объект.БизнесПроцесс.Задание - |Справочник.Файлы.Изменение.Объект.БизнесПроцесс.Задание - |РегистрСведений.ХранимыеФайлыВерсий.Чтение.Объект.БизнесПроцесс.Задание - |"; + Описание = Описание + " + |Справочник.ВерсииФайлов.Чтение.Объект.БизнесПроцесс.Задание + |Справочник.ВерсииФайлов.Изменение.Объект.БизнесПроцесс.Задание + |Справочник.Файлы.Чтение.Объект.БизнесПроцесс.Задание + |Справочник.Файлы.Изменение.Объект.БизнесПроцесс.Задание + |РегистрСведений.ХранимыеФайлыВерсий.Чтение.Объект.БизнесПроцесс.Задание + |"; КонецЕсли; КонецПроцедуры @@ -856,23 +1085,18 @@ // Процедура ПриЗаполненииСпискаТекущихДел(ТекущиеДела) Экспорт - МодульТекущиеДелаСлужебный = ОбщегоНазначения.ОбщийМодуль("ТекущиеДелаСлужебный"); + МодульТекущиеДелаСервер = ОбщегоНазначения.ОбщийМодуль("ТекущиеДелаСервер"); Если Не ПравоДоступа("Чтение", Метаданные.Справочники.Файлы) - Или МодульТекущиеДелаСлужебный.ДелоОтключено("РедактируемыеФайлы") Тогда + Или МодульТекущиеДелаСервер.ДелоОтключено("РедактируемыеФайлы") Тогда Возврат; КонецЕсли; - МодульТекущиеДелаСервер = ОбщегоНазначения.ОбщийМодуль("ТекущиеДелаСервер"); - КоличествоЗанятыхФайлов = КоличествоЗанятыхФайлов(Пользователи.ТекущийПользователь()); + КоличествоЗанятыхФайлов = КоличествоЗанятыхФайлов(ПользователиКлиентСервер.АвторизованныйПользователь()); // Процедура вызывается только при наличии подсистемы "Текущие дела", поэтому здесь // не делается проверка существования подсистемы. Разделы = МодульТекущиеДелаСервер.РазделыДляОбъекта(Метаданные.Справочники.Файлы.ПолноеИмя()); - Если Разделы = Неопределено Тогда - Возврат; // Интерфейс по работе с файлами не вынесен в командный интерфейс пользователя. - КонецЕсли; - Для Каждого Раздел Из Разделы Цикл ИдентификаторРедактируемыеФайлы = "РедактируемыеФайлы" + СтрЗаменить(Раздел.ПолноеИмя(), ".", ""); @@ -964,8 +1188,7 @@ ИЛИ РеквизитыФайла.ТекущаяВерсияПутьКФайлу <> ТекущаяВерсия.ПутьКФайлу ИЛИ РеквизитыФайла.ТекущаяВерсияКод <> ТекущаяВерсия.Код ИЛИ РеквизитыФайла.ИндексКартинки <> ТекущаяВерсия.ИндексКартинки - ИЛИ РеквизитыФайла.ТекущаяВерсияДатаМодификацииФайла <> ТекущаяВерсия.ДатаМодификацииФайла - Тогда + ИЛИ РеквизитыФайла.ТекущаяВерсияДатаМодификацииФайла <> ТекущаяВерсия.ДатаМодификацииФайла Тогда ФайлОбъект = ФайлСсылка.ПолучитьОбъект(); // Сменим индекс картинки, возможно, появилась версия или сменился индекс картинки у версии. @@ -1073,76 +1296,6 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// Сканирование - -Функция ПараметрыСканераВПеречисления(РазрешениеЧисло, ЦветностьЧисло, ПоворотЧисло, РазмерБумагиЧисло) Экспорт - - Если РазрешениеЧисло = 200 Тогда - Разрешение = Перечисления.РазрешенияСканированногоИзображения.dpi200; - ИначеЕсли РазрешениеЧисло = 300 Тогда - Разрешение = Перечисления.РазрешенияСканированногоИзображения.dpi300; - ИначеЕсли РазрешениеЧисло = 600 Тогда - Разрешение = Перечисления.РазрешенияСканированногоИзображения.dpi600; - ИначеЕсли РазрешениеЧисло = 1200 Тогда - Разрешение = Перечисления.РазрешенияСканированногоИзображения.dpi1200; - КонецЕсли; - - Если ЦветностьЧисло = 0 Тогда - Цветность = Перечисления.ЦветностиИзображения.Монохромное; - ИначеЕсли ЦветностьЧисло = 1 Тогда - Цветность = Перечисления.ЦветностиИзображения.ГрадацииСерого; - ИначеЕсли ЦветностьЧисло = 2 Тогда - Цветность = Перечисления.ЦветностиИзображения.Цветное; - КонецЕсли; - - Если ПоворотЧисло = 0 Тогда - Поворот = Перечисления.СпособыПоворотаИзображения.НетПоворота; - ИначеЕсли ПоворотЧисло = 90 Тогда - Поворот = Перечисления.СпособыПоворотаИзображения.ВправоНа90; - ИначеЕсли ПоворотЧисло = 180 Тогда - Поворот = Перечисления.СпособыПоворотаИзображения.ВправоНа180; - ИначеЕсли ПоворотЧисло = 270 Тогда - Поворот = Перечисления.СпособыПоворотаИзображения.ВлевоНа90; - КонецЕсли; - - Если РазмерБумагиЧисло = 0 Тогда - РазмерБумаги = Перечисления.РазмерыБумаги.НеЗадано; - ИначеЕсли РазмерБумагиЧисло = 11 Тогда - РазмерБумаги = Перечисления.РазмерыБумаги.A3; - ИначеЕсли РазмерБумагиЧисло = 1 Тогда - РазмерБумаги = Перечисления.РазмерыБумаги.A4; - ИначеЕсли РазмерБумагиЧисло = 5 Тогда - РазмерБумаги = Перечисления.РазмерыБумаги.A5; - ИначеЕсли РазмерБумагиЧисло = 6 Тогда - РазмерБумаги = Перечисления.РазмерыБумаги.B4; - ИначеЕсли РазмерБумагиЧисло = 2 Тогда - РазмерБумаги = Перечисления.РазмерыБумаги.B5; - ИначеЕсли РазмерБумагиЧисло = 7 Тогда - РазмерБумаги = Перечисления.РазмерыБумаги.B6; - ИначеЕсли РазмерБумагиЧисло = 14 Тогда - РазмерБумаги = Перечисления.РазмерыБумаги.C4; - ИначеЕсли РазмерБумагиЧисло = 15 Тогда - РазмерБумаги = Перечисления.РазмерыБумаги.C5; - ИначеЕсли РазмерБумагиЧисло = 16 Тогда - РазмерБумаги = Перечисления.РазмерыБумаги.C6; - ИначеЕсли РазмерБумагиЧисло = 3 Тогда - РазмерБумаги = Перечисления.РазмерыБумаги.USLetter; - ИначеЕсли РазмерБумагиЧисло = 4 Тогда - РазмерБумаги = Перечисления.РазмерыБумаги.USLegal; - ИначеЕсли РазмерБумагиЧисло = 10 Тогда - РазмерБумаги = Перечисления.РазмерыБумаги.USExecutive; - КонецЕсли; - - Результат = Новый Структура; - Результат.Вставить("Разрешение", Разрешение); - Результат.Вставить("Цветность", Цветность); - Результат.Вставить("Поворот", Поворот); - Результат.Вставить("РазмерБумаги", РазмерБумаги); - Возврат Результат; - -КонецФункции - //////////////////////////////////////////////////////////////////////////////// // Вспомогательные процедуры и функции. diff --git a/SSL/src/CommonModules/РаботаСФайламиСлужебныйВызовСервера/Module.bsl b/SSL/src/CommonModules/РаботаСФайламиСлужебныйВызовСервера/Module.bsl index 034caf7a5..aab5c9342 100644 --- a/SSL/src/CommonModules/РаботаСФайламиСлужебныйВызовСервера/Module.bsl +++ b/SSL/src/CommonModules/РаботаСФайламиСлужебныйВызовСервера/Module.bsl @@ -87,6 +87,191 @@ КонецФункции +// Процедура добавляет настройки специфичные для подсистемы Работа с файлами. +// +// Параметры: +// ОбщиеНастройки - Структура - настройки общие для всех пользователей. +// ПерсональныеНастройки - Структура - настройки различные для разных пользователей. +// +Процедура ДобавитьНастройкиРаботыСФайлами(ОбщиеНастройки, ПерсональныеНастройки) Экспорт + + УстановитьПривилегированныйРежим(Истина); + + ПерсональныеНастройки.Вставить("ДействиеПоДвойномуЩелчкуМыши", ДействиеПоДвойномуЩелчкуМыши()); + ПерсональныеНастройки.Вставить("СпособСравненияВерсийФайлов", СпособСравненияВерсийФайлов()); + + ПерсональныеНастройки.Вставить("СпрашиватьРежимРедактированияПриОткрытииФайла", + СпрашиватьРежимРедактированияПриОткрытииФайла()); + + ПерсональныеНастройки.Вставить("ЭтоПолноправныйПользователь", + Пользователи.ЭтоПолноправныйПользователь(,, Ложь)); + + ПоказыватьЗанятыеФайлыПриЗавершенииРаботы = ОбщегоНазначения.ХранилищеОбщихНастроекЗагрузить( + "НастройкиПрограммы", "ПоказыватьЗанятыеФайлыПриЗавершенииРаботы"); + + Если ПоказыватьЗанятыеФайлыПриЗавершенииРаботы = Неопределено Тогда + ПоказыватьЗанятыеФайлыПриЗавершенииРаботы = Истина; + + ОбщегоНазначения.ХранилищеОбщихНастроекСохранить( + "НастройкиПрограммы", + "ПоказыватьЗанятыеФайлыПриЗавершенииРаботы", + ПоказыватьЗанятыеФайлыПриЗавершенииРаботы); + КонецЕсли; + + ПерсональныеНастройки.Вставить("ПоказыватьЗанятыеФайлыПриЗавершенииРаботы", + ПоказыватьЗанятыеФайлыПриЗавершенииРаботы); + + КонецПроцедуры + +// Вернет размер файлов на томе - в байтах. +Функция ПодсчитатьРазмерФайловНаТоме(СсылкаТома) Экспорт + + Запрос = Новый Запрос; + Запрос.Текст = + "ВЫБРАТЬ + | ЕСТЬNULL(СУММА(Версии.Размер), 0) КАК РазмерФайлов + |ИЗ + | Справочник.ВерсииФайлов КАК Версии + |ГДЕ + | Версии.Том = &Том"; + + Запрос.Параметры.Вставить("Том", СсылкаТома); + + Выборка = Запрос.Выполнить().Выбрать(); + + Если Выборка.Следующий() Тогда + Возврат Число(Выборка.РазмерФайлов); + КонецЕсли; + + Возврат 0; + +КонецФункции + +// Читает кодировку версии файла. +// +// Параметры: +// ВерсияСсылка - ссылка на версию файла. +// +// Возвращаемое значение: +// Строка кодировки +Функция ПолучитьКодировкуВерсииФайла(ВерсияСсылка) Экспорт + + УстановитьПривилегированныйРежим(Истина); + + МенеджерЗаписи = РегистрыСведений.КодировкиВерсийФайлов.СоздатьМенеджерЗаписи(); + МенеджерЗаписи.ВерсияФайла = ВерсияСсылка; + МенеджерЗаписи.Прочитать(); + + Возврат МенеджерЗаписи.Кодировка; + +КонецФункции + +// Получает данные файла и его двоичные данные. +// +// Параметры: +// ФайлИлиВерсияСсылка - СправочникСсылка.Файлы, СправочникСсылка.ВерсииФайлов - файл или версия файла. +// АдресПодписи - Строка - навигационная ссылка, содержащая адрес файла подписи во временном хранилище. +// ИдентификаторФормы - УникальныйИдентификатор - уникальный идентификатор формы. +// +// Возвращаемое значение: +// Структура - ДанныеФайла и сам файл как ДвоичныеДанные и подпись файла как ДвоичныеДанные. +// +Функция ДанныеФайлаИДвоичныеДанные(ФайлИлиВерсияСсылка, АдресПодписи = Неопределено, ИдентификаторФормы = Неопределено) Экспорт + + ДанныеФайла = ДанныеФайла(ФайлИлиВерсияСсылка); + Если ТипЗнч(ФайлИлиВерсияСсылка) = Тип("СправочникСсылка.Файлы") Тогда + ВерсияСсылка = ФайлИлиВерсияСсылка.ТекущаяВерсия; + Иначе + ВерсияСсылка = ФайлИлиВерсияСсылка; + КонецЕсли; + + ДвоичныеДанные = Неопределено; + + ТипХраненияФайла = ВерсияСсылка.ТипХраненияФайла; + Если ТипХраненияФайла = Перечисления.ТипыХраненияФайлов.ВТомахНаДиске Тогда + Если НЕ ВерсияСсылка.Том.Пустая() Тогда + ПолныйПуть = ФайловыеФункцииСлужебный.ПолныйПутьТома(ВерсияСсылка.Том) + ВерсияСсылка.ПутьКФайлу; + Попытка + ДвоичныеДанные = Новый ДвоичныеДанные(ПолныйПуть); + Исключение + // Запись в журнал регистрации. + СообщениеОбОшибке = СформироватьТекстОшибкиПолученияФайлСТомаДляАдминистратора( + ИнформацияОбОшибке(), ВерсияСсылка.Владелец); + + ЗаписьЖурналаРегистрации( + НСтр("ru = 'Файлы.Открытие файла'", + ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), + УровеньЖурналаРегистрации.Ошибка, + Метаданные.Справочники.Файлы, + ВерсияСсылка.Владелец, + СообщениеОбОшибке); + + ВызватьИсключение ФайловыеФункцииСлужебныйКлиентСервер.ОшибкаФайлНеНайденВХранилищеФайлов( + ВерсияСсылка.ПолноеНаименование + "." + ВерсияСсылка.Расширение); + КонецПопытки; + КонецЕсли; + Иначе + ХранилищеФайла = ПолучитьХранилищеФайлаИзИнформационнойБазы(ВерсияСсылка); + ДвоичныеДанные = ХранилищеФайла.Получить(); + КонецЕсли; + + ДвоичныеДанныеПодписи = Неопределено; + Если АдресПодписи <> Неопределено Тогда + ДвоичныеДанныеПодписи = ПолучитьИзВременногоХранилища(АдресПодписи); + КонецЕсли; + + Если ИдентификаторФормы <> Неопределено Тогда + ДвоичныеДанные = ПоместитьВоВременноеХранилище(ДвоичныеДанные, ИдентификаторФормы); + КонецЕсли; + + СтруктураВозврата = Новый Структура("ДанныеФайла, ДвоичныеДанные, ДвоичныеДанныеПодписи", + ДанныеФайла, ДвоичныеДанные, ДвоичныеДанныеПодписи); + + Возврат СтруктураВозврата; +КонецФункции + +// Получает все подчиненные файлы. +// Параметры: +// ВладелецФайла - ЛюбаяСсылка - владелец файла. +// +// Возвращаемое значение: +// Массив - массив файлов +Функция ПолучитьВсеПодчиненныеФайлы(ВладелецФайла) Экспорт + + Запрос = Новый Запрос; + Запрос.Текст = + "ВЫБРАТЬ РАЗРЕШЕННЫЕ + | Файлы.Ссылка КАК Ссылка + |ИЗ + | Справочник.Файлы КАК Файлы + |ГДЕ + | Файлы.ВладелецФайла = &ВладелецФайла"; + + Запрос.УстановитьПараметр("ВладелецФайла", ВладелецФайла); + + Возврат Запрос.Выполнить().Выгрузить().ВыгрузитьКолонку("Ссылка"); + +КонецФункции + +// Читает ХранилищеФайла из информационной базы. +// +// Параметры: +// ВерсияСсылка - ссылка на версию файла. +// +// Возвращаемое значение: +// ХранилищеЗначения, с двоичными данными файла. +Функция ПолучитьХранилищеФайлаИзИнформационнойБазы(ВерсияСсылка) Экспорт + + УстановитьПривилегированныйРежим(Истина); + + МенеджерЗаписи = РегистрыСведений.ХранимыеФайлыВерсий.СоздатьМенеджерЗаписи(); + МенеджерЗаписи.ВерсияФайла = ВерсияСсылка; + МенеджерЗаписи.Прочитать(); + + Возврат МенеджерЗаписи.ХранимыйФайл; + +КонецФункции + #КонецОбласти #Область СлужебныеПроцедурыИФункции @@ -124,10 +309,6 @@ // Функция ЗанятьФайл(ДанныеФайла, СтрокаОшибки = "", УникальныйИдентификатор = Неопределено) Экспорт - Если Не РаботаСФайламиПереопределяемый.ВозможноЗанятьФайл(ДанныеФайла, СтрокаОшибки) Тогда - Возврат Ложь; - КонецЕсли; - СтрокаОшибки = ""; РаботаСФайламиПереопределяемый.ПриПопыткеЗанятьФайл(ДанныеФайла, СтрокаОшибки); Если Не ПустаяСтрока(СтрокаОшибки) Тогда @@ -1402,8 +1583,21 @@ ФайлСсылка, СообщениеОбОшибке); + ТипВладельцаФайла = ТипЗнч(ДанныеФайла.Владелец); + Если ТипВладельцаФайла = Тип("СправочникСсылка.ПапкиФайлов") Тогда + ПредставлениеВладельца = ПолныйПутьПапки(ДанныеФайла.Владелец); + Иначе + ПредставлениеВладельца = ДанныеФайла.Владелец; + КонецЕсли; + ПредставлениеВладельцаФайла = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Присоединен к %1 : %2'"), + Строка(ТипВладельцаФайла), + ПредставлениеВладельца); + ВызватьИсключение ФайловыеФункцииСлужебныйКлиентСервер.ОшибкаФайлНеНайденВХранилищеФайлов( - ДанныеФайла.ПолноеНаименованиеВерсии + "." + ДанныеФайла.Расширение); + ДанныеФайла.ПолноеНаименованиеВерсии + "." + ДанныеФайла.Расширение, + , + ПредставлениеВладельцаФайла); КонецПопытки; КонецЕсли; КонецЕсли; @@ -1414,6 +1608,59 @@ КонецФункции +Функция ПолныйПутьПапки(Папка) + + ПолныйПуть = ""; + + ПапкаРодитель = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(Папка.Ссылка, "Родитель"); + + Если ЗначениеЗаполнено(ПапкаРодитель) Тогда + + ПолныйПуть = ""; + Пока ЗначениеЗаполнено(ПапкаРодитель) Цикл + + ПолныйПуть = Строка(ПапкаРодитель) + "\" + ПолныйПуть; + ПапкаРодитель = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(ПапкаРодитель, "Родитель"); + Если Не ЗначениеЗаполнено(ПапкаРодитель) Тогда + Прервать; + КонецЕсли; + + КонецЦикла; + + ПолныйПуть = ПолныйПуть + Строка(Папка.Ссылка); + + Если Не ПустаяСтрока(ПолныйПуть) Тогда + ПолныйПуть = """" + ПолныйПуть + """"; + КонецЕсли; + + КонецЕсли; + + Возврат ПолныйПуть; + +КонецФункции + +// Функция возвращает структуру, содержащую различные сведения о Файлах и версиях. +// +// Параметры: +// МассивФайлов - массив файлов или версий файлов. +// ИдентификаторФормы - УникальныйИдентификатор - уникальный идентификатор формы. +// +// Возвращаемое значение: +// ДанныеФайлов - массив с данными файлов. См. ПолучитьДанныеФайла. +// +Функция ДанныеФайловДляОткрытия(МассивФайлов, ИдентификаторФормы = Неопределено, + РабочийКаталогВладельца = Неопределено, ПредыдущийАдресФайла = Неопределено) Экспорт + + ДанныеФайлов = Новый Массив; + Для Каждого Файл Из МассивФайлов Цикл + ДанныеФайла = ДанныеФайлаДляОткрытия(Файл, ИдентификаторФормы); + ДанныеФайлов.Добавить(ДанныеФайла); + КонецЦикла; + + Возврат ДанныеФайлов; + +КонецФункции + // Освобождение Файла с получением данных. // Параметры: // ФайлСсылка - СправочникСсылка.Файлы - файл. @@ -1947,7 +2194,7 @@ ПолноеИмяФайла = ПолныйПуть; Если ВРабочемКаталогеВладельца = Ложь Тогда - Если Найти(ПолныйПуть, ИмяКаталога) = 1 Тогда + Если СтрНайти(ПолныйПуть, ИмяКаталога) = 1 Тогда ПолноеИмяФайла = Сред(ПолныйПуть, СтрДлина(ИмяКаталога) + 1); КонецЕсли; КонецЕсли; @@ -2148,7 +2395,7 @@ // Функция КоличествоФайловЗанятыхТекущимПользователем(ВладелецФайла) Экспорт - КоличествоЗанятыхФайлов = ПолучитьКоличествоЗанятыхФайлов(ВладелецФайла, Пользователи.ТекущийПользователь()); + КоличествоЗанятыхФайлов = ПолучитьКоличествоЗанятыхФайлов(ВладелецФайла, Пользователи.АвторизованныйПользователь()); Возврат КоличествоЗанятыхФайлов; КонецФункции @@ -2225,7 +2472,7 @@ Возврат Ложь; КонецЕсли; - Если ЕстьЗацикливание(МассивСсылокНаФайлы, Родитель) = Истина Тогда + Если ЕстьЗацикливание(МассивСсылокНаФайлы, Родитель) Тогда Возврат Истина; // нашли зацикливание КонецЕсли; @@ -2677,7 +2924,7 @@ Элемент = УсловноеОформлениеКД.Элементы.Добавить(); Элемент.Использование = Истина; - Элемент.Оформление.УстановитьЗначениеПараметра("ЦветТекста", ЦветаСтиля.НедоступныеДанныеЦвет); + Элемент.Оформление.УстановитьЗначениеПараметра("ЦветТекста", ЦветаСтиля.ТекстЗапрещеннойЯчейкиЦвет); Отбор = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); Отбор.Использование = Истина; @@ -2725,106 +2972,6 @@ КонецФункции -// Возвращает номер по нарастанию. Предыдущее значение берется из регистра сведений НомераОтсканированныхФайлов. -// Параметры: -// Владелец - ЛюбаяСсылка - владелец файла. -// -// Возвращаемое значение: -// Число - новый номер для сканирования. -// -Функция ПолучитьНовыйНомерДляСканирования(Владелец) Экспорт - - // Подготовить структуру отбора по измерениям. - СтруктураОтбора = Новый Структура; - СтруктураОтбора.Вставить("Владелец", Владелец); - - НачатьТранзакцию(); - Попытка - Блокировка = Новый БлокировкаДанных; - ЭлементБлокировки = Блокировка.Добавить("РегистрСведений.НомераОтсканированныхФайлов"); - ЭлементБлокировки.Режим = РежимБлокировкиДанных.Исключительный; - ЭлементБлокировки.УстановитьЗначение("Владелец", Владелец); - Блокировка.Заблокировать(); - - // Получить структуру с данными ресурсов записи. - СтруктураРесурсов = РегистрыСведений.НомераОтсканированныхФайлов.Получить(СтруктураОтбора); - - // Получить максимальный номер из регистра. - Номер = СтруктураРесурсов.Номер; - Номер = Номер + 1; // увеличим на 1 - - // Запишем новый номер в регистр. - НаборЗаписей = РегистрыСведений.НомераОтсканированныхФайлов.СоздатьНаборЗаписей(); - - НаборЗаписей.Отбор.Владелец.Установить(Владелец); - - НоваяЗапись = НаборЗаписей.Добавить(); - НоваяЗапись.Владелец = Владелец; - НоваяЗапись.Номер = Номер; - - НаборЗаписей.Записать(); - - ЗафиксироватьТранзакцию(); - Исключение - ОтменитьТранзакцию(); - ВызватьИсключение; - КонецПопытки; - - Возврат Номер; - -КонецФункции - -// Заносит номер в регистр сведений НомераОтсканированныхФайлов. -// -// Параметры: -// Владелец - ЛюбаяСсылка - владелец файла. -// НовыйНомер - Число - максимальный номер для сканирования. -// -Процедура ЗанестиМаксимальныйНомерДляСканирования(Владелец, НовыйНомер) Экспорт - - // Подготовить структуру отбора по измерениям. - СтруктураОтбора = Новый Структура; - СтруктураОтбора.Вставить("Владелец", Владелец); - - НачатьТранзакцию(); - Попытка - Блокировка = Новый БлокировкаДанных; - ЭлементБлокировки = Блокировка.Добавить("РегистрСведений.НомераОтсканированныхФайлов"); - ЭлементБлокировки.Режим = РежимБлокировкиДанных.Исключительный; - ЭлементБлокировки.УстановитьЗначение("Владелец", Владелец); - Блокировка.Заблокировать(); - - // Получить структуру с данными ресурсов записи. - СтруктураРесурсов = РегистрыСведений.НомераОтсканированныхФайлов.Получить(СтруктураОтбора); - - // Получить максимальный номер из регистра. - Номер = СтруктураРесурсов.Номер; - Если НовыйНомер <= Номер Тогда // Кто-то другой уже записал бОльший номер. - ОтменитьТранзакцию(); - Возврат; - КонецЕсли; - - Номер = НовыйНомер; - - // Запишем новый номер в регистр. - НаборЗаписей = РегистрыСведений.НомераОтсканированныхФайлов.СоздатьНаборЗаписей(); - - НаборЗаписей.Отбор.Владелец.Установить(Владелец); - - НоваяЗапись = НаборЗаписей.Добавить(); - НоваяЗапись.Владелец = Владелец; - НоваяЗапись.Номер = Номер; - - НаборЗаписей.Записать(); - - ЗафиксироватьТранзакцию(); - Исключение - ОтменитьТранзакцию(); - ВызватьИсключение; - КонецПопытки; - -КонецПроцедуры - // Очищает настройки форм ФормаНового. Процедура ОчиститьНастройкиФормНовогоФайла() Экспорт @@ -2960,29 +3107,6 @@ Возврат ДанныеФайла; КонецФункции -// Получает все подчиненные файлы. -// Параметры: -// ВладелецФайла - ЛюбаяСсылка - владелец файла. -// -// Возвращаемое значение: -// Массив - массив файлов -Функция ПолучитьВсеПодчиненныеФайлы(ВладелецФайла) Экспорт - - Запрос = Новый Запрос; - Запрос.Текст = - "ВЫБРАТЬ РАЗРЕШЕННЫЕ - | Файлы.Ссылка КАК Ссылка - |ИЗ - | Справочник.Файлы КАК Файлы - |ГДЕ - | Файлы.ВладелецФайла = &ВладелецФайла"; - - Запрос.УстановитьПараметр("ВладелецФайла", ВладелецФайла); - - Возврат Запрос.Выполнить().Выгрузить().ВыгрузитьКолонку("Ссылка"); - -КонецФункции - // Получает количество версий файла. // Параметры: // ФайлСсылка - СправочникСсылка.Файлы - файл. @@ -3247,70 +3371,6 @@ КонецФункции -// Получает данные файла и его двоичные данные. -// -// Параметры: -// ФайлИлиВерсияСсылка - СправочникСсылка.Файлы, СправочникСсылка.ВерсииФайлов - файл или версия файла. -// АдресПодписи - Строка - навигационная ссылка, содержащая адрес файла подписи во временном хранилище. -// ИдентификаторФормы - УникальныйИдентификатор - уникальный идентификатор формы. -// -// Возвращаемое значение: -// Структура - ДанныеФайла и сам файл как ДвоичныеДанные и подпись файла как ДвоичныеДанные. -// -Функция ДанныеФайлаИДвоичныеДанные(ФайлИлиВерсияСсылка, АдресПодписи = Неопределено, ИдентификаторФормы = Неопределено) Экспорт - - ДанныеФайла = ДанныеФайла(ФайлИлиВерсияСсылка); - Если ТипЗнч(ФайлИлиВерсияСсылка) = Тип("СправочникСсылка.Файлы") Тогда - ВерсияСсылка = ФайлИлиВерсияСсылка.ТекущаяВерсия; - Иначе - ВерсияСсылка = ФайлИлиВерсияСсылка; - КонецЕсли; - - ДвоичныеДанные = Неопределено; - - ТипХраненияФайла = ВерсияСсылка.ТипХраненияФайла; - Если ТипХраненияФайла = Перечисления.ТипыХраненияФайлов.ВТомахНаДиске Тогда - Если НЕ ВерсияСсылка.Том.Пустая() Тогда - ПолныйПуть = ФайловыеФункцииСлужебный.ПолныйПутьТома(ВерсияСсылка.Том) + ВерсияСсылка.ПутьКФайлу; - Попытка - ДвоичныеДанные = Новый ДвоичныеДанные(ПолныйПуть); - Исключение - // Запись в журнал регистрации. - СообщениеОбОшибке = СформироватьТекстОшибкиПолученияФайлСТомаДляАдминистратора( - ИнформацияОбОшибке(), ВерсияСсылка.Владелец); - - ЗаписьЖурналаРегистрации( - НСтр("ru = 'Файлы.Открытие файла'", - ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), - УровеньЖурналаРегистрации.Ошибка, - Метаданные.Справочники.Файлы, - ВерсияСсылка.Владелец, - СообщениеОбОшибке); - - ВызватьИсключение ФайловыеФункцииСлужебныйКлиентСервер.ОшибкаФайлНеНайденВХранилищеФайлов( - ВерсияСсылка.ПолноеНаименование + "." + ВерсияСсылка.Расширение); - КонецПопытки; - КонецЕсли; - Иначе - ХранилищеФайла = ПолучитьХранилищеФайлаИзИнформационнойБазы(ВерсияСсылка); - ДвоичныеДанные = ХранилищеФайла.Получить(); - КонецЕсли; - - ДвоичныеДанныеПодписи = Неопределено; - Если АдресПодписи <> Неопределено Тогда - ДвоичныеДанныеПодписи = ПолучитьИзВременногоХранилища(АдресПодписи); - КонецЕсли; - - Если ИдентификаторФормы <> Неопределено Тогда - ДвоичныеДанные = ПоместитьВоВременноеХранилище(ДвоичныеДанные, ИдентификаторФормы); - КонецЕсли; - - СтруктураВозврата = Новый Структура("ДанныеФайла, ДвоичныеДанные, ДвоичныеДанныеПодписи", - ДанныеФайла, ДвоичныеДанные, ДвоичныеДанныеПодписи); - - Возврат СтруктураВозврата; -КонецФункции - // Добавляет подпись к версии файла и отмечает файл, как подписанный. Процедура ДобавитьПодписьКФайлу(ФайлСсылка, СвойстваПодписи, ИдентификаторФормы) Экспорт @@ -3399,41 +3459,6 @@ КонецПроцедуры -// Процедура добавляет настройки специфичные для подсистемы Работа с файлами. -// -// Параметры: -// ОбщиеНастройки - Структура - настройки общие для всех пользователей. -// ПерсональныеНастройки - Структура - настройки различные для разных пользователей. -// -Процедура ДобавитьНастройкиРаботыСФайлами(ОбщиеНастройки, ПерсональныеНастройки) Экспорт - - УстановитьПривилегированныйРежим(Истина); - - ПерсональныеНастройки.Вставить("ДействиеПоДвойномуЩелчкуМыши", ДействиеПоДвойномуЩелчкуМыши()); - ПерсональныеНастройки.Вставить("СпособСравненияВерсийФайлов", СпособСравненияВерсийФайлов()); - - ПерсональныеНастройки.Вставить("СпрашиватьРежимРедактированияПриОткрытииФайла", - СпрашиватьРежимРедактированияПриОткрытииФайла()); - - ПерсональныеНастройки.Вставить("ЭтоПолноправныйПользователь", - Пользователи.ЭтоПолноправныйПользователь(,, Ложь)); - - ПоказыватьЗанятыеФайлыПриЗавершенииРаботы = ОбщегоНазначения.ХранилищеОбщихНастроекЗагрузить( - "НастройкиПрограммы", "ПоказыватьЗанятыеФайлыПриЗавершенииРаботы"); - - Если ПоказыватьЗанятыеФайлыПриЗавершенииРаботы = Неопределено Тогда - ПоказыватьЗанятыеФайлыПриЗавершенииРаботы = Истина; - - ОбщегоНазначения.ХранилищеОбщихНастроекСохранить( - "НастройкиПрограммы", - "ПоказыватьЗанятыеФайлыПриЗавершенииРаботы", - ПоказыватьЗанятыеФайлыПриЗавершенииРаботы); - КонецЕсли; - - ПерсональныеНастройки.Вставить("ПоказыватьЗанятыеФайлыПриЗавершенииРаботы", - ПоказыватьЗанятыеФайлыПриЗавершенииРаботы); - -КонецПроцедуры // Добавляет файл в тома при выполнении команды "разместить файлы начального образа". // Параметры: @@ -3538,8 +3563,12 @@ | Справочник.ВерсииФайлов КАК ВерсииФайлов |ГДЕ | (ВерсииФайлов.СтатусИзвлеченияТекста = ЗНАЧЕНИЕ(Перечисление.СтатусыИзвлеченияТекстаФайлов.НеИзвлечен) - | ИЛИ ВерсииФайлов.СтатусИзвлеченияТекста = ЗНАЧЕНИЕ(Перечисление.СтатусыИзвлеченияТекстаФайлов.ПустаяСсылка)) - | И НЕ ВерсииФайлов.Зашифрован"; + | ИЛИ ВерсииФайлов.СтатусИзвлеченияТекста = ЗНАЧЕНИЕ(Перечисление.СтатусыИзвлеченияТекстаФайлов.ПустаяСсылка))"; + + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ЭлектроннаяПодпись") Тогда + ТекстЗапроса = ТекстЗапроса + " + | И НЕ ВерсииФайлов.Зашифрован"; + КонецЕсли; Если ПолучитьВсеФайлы Тогда ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "ПЕРВЫЕ 100", ""); @@ -3939,7 +3968,7 @@ КонецЦикла; КонецПроцедуры - + // Возвращает массив ссылок на файлы. // Параметры: // Объект - ЛюбаяСсылка - владелец файла. @@ -4002,25 +4031,6 @@ КонецПроцедуры -// Читает ХранилищеФайла из информационной базы. -// -// Параметры: -// ВерсияСсылка - ссылка на версию файла. -// -// Возвращаемое значение: -// ХранилищеЗначения, с двоичными данными файла. -Функция ПолучитьХранилищеФайлаИзИнформационнойБазы(ВерсияСсылка) Экспорт - - УстановитьПривилегированныйРежим(Истина); - - МенеджерЗаписи = РегистрыСведений.ХранимыеФайлыВерсий.СоздатьМенеджерЗаписи(); - МенеджерЗаписи.ВерсияФайла = ВерсияСсылка; - МенеджерЗаписи.Прочитать(); - - Возврат МенеджерЗаписи.ХранимыйФайл; - -КонецФункции - // Переносит бинарный файл из ФайлХранилище справочника ВерсииФайлов в регистр сведений ХранимыеФайлыВерсий. Процедура ПереместитьФайлыИзИнформационнойБазыВРегистрСведений() Экспорт @@ -4204,8 +4214,12 @@ | Справочник.ВерсииФайлов КАК ВерсииФайлов |ГДЕ | (ВерсииФайлов.СтатусИзвлеченияТекста = ЗНАЧЕНИЕ(Перечисление.СтатусыИзвлеченияТекстаФайлов.НеИзвлечен) - | ИЛИ ВерсииФайлов.СтатусИзвлеченияТекста = ЗНАЧЕНИЕ(Перечисление.СтатусыИзвлеченияТекстаФайлов.ПустаяСсылка)) - | И НЕ ВерсииФайлов.Зашифрован"; + | ИЛИ ВерсииФайлов.СтатусИзвлеченияТекста = ЗНАЧЕНИЕ(Перечисление.СтатусыИзвлеченияТекстаФайлов.ПустаяСсылка))"; + + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ЭлектроннаяПодпись") Тогда + Запрос.Текст = Запрос.Текст + " + | И НЕ ВерсииФайлов.Зашифрован"; + КонецЕсли; Выборка = Запрос.Выполнить().Выбрать(); Выборка.Следующий(); @@ -4216,49 +4230,6 @@ КонецФункции -// Вернет размер файлов на томе - в байтах. -Функция ПодсчитатьРазмерФайловНаТоме(СсылкаТома) Экспорт - - Запрос = Новый Запрос; - Запрос.Текст = - "ВЫБРАТЬ - | ЕСТЬNULL(СУММА(Версии.Размер), 0) КАК РазмерФайлов - |ИЗ - | Справочник.ВерсииФайлов КАК Версии - |ГДЕ - | Версии.Том = &Том"; - - Запрос.Параметры.Вставить("Том", СсылкаТома); - - Выборка = Запрос.Выполнить().Выбрать(); - - Если Выборка.Следующий() Тогда - Возврат Число(Выборка.РазмерФайлов); - КонецЕсли; - - Возврат 0; - -КонецФункции - -// Читает кодировку версии файла. -// -// Параметры: -// ВерсияСсылка - ссылка на версию файла. -// -// Возвращаемое значение: -// Строка кодировки -Функция ПолучитьКодировкуВерсииФайла(ВерсияСсылка) Экспорт - - УстановитьПривилегированныйРежим(Истина); - - МенеджерЗаписи = РегистрыСведений.КодировкиВерсийФайлов.СоздатьМенеджерЗаписи(); - МенеджерЗаписи.ВерсияФайла = ВерсияСсылка; - МенеджерЗаписи.Прочитать(); - - Возврат МенеджерЗаписи.Кодировка; - -КонецФункции - // Записывает кодировку версии файла. // // Параметры: diff --git a/SSL/src/CommonModules/РаботаСФайламиСлужебныйКлиент/Module.bsl b/SSL/src/CommonModules/РаботаСФайламиСлужебныйКлиент/Module.bsl index 37fa9fc14..3d126a283 100644 --- a/SSL/src/CommonModules/РаботаСФайламиСлужебныйКлиент/Module.bsl +++ b/SSL/src/CommonModules/РаботаСФайламиСлужебныйКлиент/Module.bsl @@ -74,6 +74,164 @@ КонецПроцедуры +// На основе переданного пути к файлу на диске создает Файл его и открывает карточку. +// +// ПараметрыДобавления - Структура: +// * ОбработчикРезультата - ОписаниеОповещения, Неопределено. +// - Описание процедуры, принимающей результат работы метода. +// * ПолноеИмяФайла - Строка - Необязательный. Полный путь и имя файла на клиенте. +// Если не указан, то будет открыт диалог для выбора файла. +// * ВладелецФайла - ЛюбаяСсылка - владелец файла. +// * ФормаВладелец - УправляемаяФорма из которой вызвано создание файла. +// * НеОткрыватьКарточкуПослеСозданияИзФайла - Булево. +// - Истина когда карточка файла не открывается после создания. +// * ИмяСоздаваемогоФайла - Строка - Необязательный. Новое имя файла. +// +Процедура ДобавитьИзФайловойСистемыСРасширением(ПараметрыВыполнения) Экспорт + + Результат = ДобавитьИзФайловойСистемыСРасширениемСинхронно(ПараметрыВыполнения); + Если Не Результат.ФайлДобавлен Тогда + Если ЗначениеЗаполнено(Результат.ТекстОшибки) Тогда + ВернутьРезультатПослеПоказаПредупреждения(ПараметрыВыполнения.ОбработчикРезультата, Результат.ТекстОшибки, Неопределено); + Иначе + ВернутьРезультат(ПараметрыВыполнения.ОбработчикРезультата, Неопределено); + КонецЕсли; + Возврат; + КонецЕсли; + + Если ПараметрыВыполнения.НеОткрыватьКарточкуПослеСозданияИзФайла <> Истина Тогда + ПараметрыФормы = Новый Структура; + ПараметрыФормы.Вставить("Ключ", Результат.ФайлСсылка); + ПараметрыФормы.Вставить("КарточкаОткрытаПослеСозданияФайла", Истина); + + ОбработчикДиалога = ПодготовитьОбработчикДляДиалога(ПараметрыВыполнения.ОбработчикРезультата); + ОткрытьФорму("Справочник.Файлы.ФормаОбъекта", ПараметрыФормы, ПараметрыВыполнения.ФормаВладелец, , , , ОбработчикДиалога); + Иначе + ВернутьРезультат(ПараметрыВыполнения.ОбработчикРезультата, Результат); + КонецЕсли; + +КонецПроцедуры + +// На основе переданного пути к файлу на диске создает Файл его и открывает карточку. +// +// ПараметрыДобавления - Структура: +// * ПолноеИмяФайла - Строка - Необязательный. Полный путь и имя файла на клиенте. +// Если не указан, то будет открыт синхронный диалог для выбора файла. +// * ВладелецФайла - ЛюбаяСсылка - владелец файла. +// * УникальныйИдентификатор - УникальныйИдентификатор - Идентификатор формы для хранения файла. +// * ИмяСоздаваемогоФайла - Строка - Необязательный. Новое имя файла. +// +// Возвращаемое значение: +// Структура - Результат. +// * ФайлДобавлен - Булево - успешно ли выполнена операция. +// * ФайлСсылка - СправочникСсылка.Файлы +// * ТекстОшибки - Строка. +// +Функция ДобавитьИзФайловойСистемыСРасширениемСинхронно(ПараметрыВыполнения) Экспорт + + Результат = Новый Структура; + Результат.Вставить("ФайлДобавлен", Ложь); + Результат.Вставить("ФайлСсылка", Неопределено); + Результат.Вставить("ТекстОшибки", ""); + + Если Не ПараметрыВыполнения.Свойство("ПолноеИмяФайла") Тогда + // Загрузить из файловой системы с расширением работы с файлами. + ДиалогВыбораФайла = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Открытие); + ДиалогВыбораФайла.МножественныйВыбор = Ложь; + ДиалогВыбораФайла.Заголовок = НСтр("ru = 'Выбор файла'"); + ДиалогВыбораФайла.Фильтр = НСтр("ru = 'Все файлы (*.*)|*.*'"); + ДиалогВыбораФайла.Каталог = РаботаСФайламиСлужебныйВызовСервера.РабочийКаталогПапки(ПараметрыВыполнения.ВладелецФайла); + Если НЕ ДиалогВыбораФайла.Выбрать() Тогда + Возврат Результат; + КонецЕсли; + ПараметрыВыполнения.Вставить("ПолноеИмяФайла", ДиалогВыбораФайла.ПолноеИмяФайла); + КонецЕсли; + + Если Не ПараметрыВыполнения.Свойство("ИмяСоздаваемогоФайла") Тогда + ПараметрыВыполнения.Вставить("ИмяСоздаваемогоФайла", Неопределено); + КонецЕсли; + + ФайлКлиента = Новый Файл(ПараметрыВыполнения.ПолноеИмяФайла); + + ФайловыеФункцииСлужебныйКлиентСервер.ПроверитьВозможностьЗагрузкиФайла(ФайлКлиента); + + ОбщиеНастройки = ФайловыеФункцииСлужебныйКлиентСервер.ОбщиеНастройкиРаботыСФайлами(); + ИзвлекатьТекстыФайловНаКлиенте = НЕ ОбщиеНастройки.ИзвлекатьТекстыФайловНаСервере; + Если ИзвлекатьТекстыФайловНаКлиенте Тогда + АдресВременногоХранилищаТекста = ФайловыеФункцииСлужебныйКлиентСервер.ИзвлечьТекстВоВременноеХранилище( + ФайлКлиента.ПолноеИмя, + ПараметрыВыполнения.ФормаВладелец.УникальныйИдентификатор); + Иначе + АдресВременногоХранилищаТекста = ""; + КонецЕсли; + + Если ПараметрыВыполнения.ИмяСоздаваемогоФайла <> Неопределено Тогда + ИмяСоздания = ПараметрыВыполнения.ИмяСоздаваемогоФайла; + Иначе + ИмяСоздания = ФайлКлиента.ИмяБезРасширения; + КонецЕсли; + + ИмяФайла = ИмяСоздания + ФайлКлиента.Расширение; + РазмерВМб = ФайлКлиента.Размер() / (1024 * 1024); + + ТекстСостояния = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Идет сохранение файла ""%1"" (%2 Мб). + |Пожалуйста, подождите...'"), + ИмяФайла, + ФайловыеФункцииСлужебныйКлиентСервер.ПолучитьСтрокуСРазмеромФайла(РазмерВМб)); + Состояние(ТекстСостояния); + + // Помещение файла во временное хранилище. + АдресВременногоХранилищаФайла = ""; + + ПомещаемыеФайлы = Новый Массив; + Описание = Новый ОписаниеПередаваемогоФайла(ФайлКлиента.ПолноеИмя, ""); + ПомещаемыеФайлы.Добавить(Описание); + + ПомещенныеФайлы = Новый Массив; + ФайлыПомещены = ПоместитьФайлы(ПомещаемыеФайлы, ПомещенныеФайлы, , Ложь, ПараметрыВыполнения.ФормаВладелец.УникальныйИдентификатор); + Если НЕ ФайлыПомещены Тогда + Возврат Результат; + КонецЕсли; + + Если ПомещенныеФайлы.Количество() = 1 Тогда + АдресВременногоХранилищаФайла = ПомещенныеФайлы[0].Хранение; + КонецЕсли; + + // Создание карточки Файла в БД. + Попытка + СведенияОФайле = РаботаСФайламиКлиентСервер.СведенияОФайле("ФайлСВерсией", ФайлКлиента); + СведенияОФайле.АдресВременногоХранилищаФайла = АдресВременногоХранилищаФайла; + СведенияОФайле.АдресВременногоХранилищаТекста = АдресВременногоХранилищаТекста; + СведенияОФайле.ЗаписатьВИсторию = Истина; + СведенияОФайле.ИмяБезРасширения = ИмяСоздания; + Результат.ФайлСсылка = РаботаСФайламиСлужебныйВызовСервера.СоздатьФайлСВерсией(ПараметрыВыполнения.ВладелецФайла, СведенияОФайле); + Результат.ФайлДобавлен = Истина; + Исключение + Результат.ТекстОшибки = ФайловыеФункцииСлужебныйКлиентСервер.ОшибкаСозданияНовогоФайла(ИнформацияОбОшибке()); + КонецПопытки; + Состояние(); + + Если Результат.ТекстОшибки <> "" Тогда + Возврат Результат; + КонецЕсли; + + ПараметрыОповещения = Новый Структура; + ПараметрыОповещения.Вставить("Владелец", ПараметрыВыполнения.ВладелецФайла); + ПараметрыОповещения.Вставить("Файл", Результат.ФайлСсылка); + ПараметрыОповещения.Вставить("Событие", "СозданФайл"); + Оповестить("Запись_Файл", ПараметрыОповещения); + + ПоказатьОповещениеПользователя( + НСтр("ru = 'Создание:'"), + ПолучитьНавигационнуюСсылку(Результат.ФайлСсылка), + Результат.ФайлСсылка, + БиблиотекаКартинок.Информация32); + + Возврат Результат; + +КонецФункции + #КонецОбласти #Область СлужебныеПроцедурыИФункции @@ -108,9 +266,7 @@ Строка(ОбъектСсылка)); Возврат Ложь; Иначе - Если ФайловыеФункцииСлужебныйКлиентСервер.ПерсональныеНастройкиРаботыСФайлами( - ).ЭтоПолноправныйПользователь Тогда - + Если ФайловыеФункцииСлужебныйКлиентСервер.ПерсональныеНастройкиРаботыСФайлами().ЭтоПолноправныйПользователь Тогда Возврат Истина; КонецЕсли; @@ -562,7 +718,7 @@ Процедура ЗакончитьРедактированиеБезРасширения(ПараметрыВыполнения) // Веб-клиент без расширения для работы с файлами. - Если ПараметрыВыполнения.ХранитьВерсии = Неопределено Тогда + Если ПараметрыВыполнения.ДанныеФайла = Неопределено Тогда ПараметрыВыполнения.ДанныеФайла = РаботаСФайламиСлужебныйВызовСервера.ДанныеФайла(ПараметрыВыполнения.ОбъектСсылка); ПараметрыВыполнения.ХранитьВерсии = ПараметрыВыполнения.ДанныеФайла.ХранитьВерсии; ПараметрыВыполнения.РедактируетТекущийПользователь = ПараметрыВыполнения.ДанныеФайла.РедактируетТекущийПользователь; @@ -670,6 +826,10 @@ // Продолжение процедуры (см. выше). Процедура ЗакончитьРедактированиеБезРасширенияПослеНапоминания(Результат, ПараметрыВыполнения) Экспорт + Если Результат = КодВозвратаДиалога.Отмена Или Результат = Неопределено Тогда + Возврат; + КонецЕсли; + Обработчик = Новый ОписаниеОповещения("ЗакончитьРедактированиеБезРасширенияПослеЗагрузкиФайла", ЭтотОбъект, ПараметрыВыполнения); НачатьПомещениеФайла(Обработчик, , ПараметрыВыполнения.ПолныйПутьКФайлу, , ПараметрыВыполнения.ИдентификаторФормы); @@ -883,20 +1043,18 @@ Если МодульЭлектроннаяПодписьКлиентСервер.ОбщиеНастройки().ИспользоватьШифрование Тогда РасширениеДляЗашифрованныхФайлов = - МодульЭлектроннаяПодписьКлиентСервер.ПерсональныеНастройки( - ).РасширениеДляЗашифрованныхФайлов; + МодульЭлектроннаяПодписьКлиентСервер.ПерсональныеНастройки().РасширениеДляЗашифрованныхФайлов; КонецЕсли; КонецЕсли; Если ЗначениеЗаполнено(РасширениеДляЗашифрованныхФайлов) Тогда Фильтр = НСтр("ru = 'Файл (*.%1)|*.%1|Зашифрованный файл (*.%2)|*.%2|Все файлы (*.*)|*.*'"); + Диалог.Фильтр = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(Фильтр, ДанныеФайла.Расширение, РасширениеДляЗашифрованныхФайлов); Иначе Фильтр = НСтр("ru = 'Файл (*.%1)|*.%1|Все файлы (*.*)|*.*'"); + Диалог.Фильтр = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(Фильтр, ДанныеФайла.Расширение); КонецЕсли; - Диалог.Фильтр = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(Фильтр, - ДанныеФайла.Расширение, РасширениеДляЗашифрованныхФайлов); - Если Не Диалог.Выбрать() Тогда ВернутьРезультат(ОбработчикРезультата, Ложь); Возврат; @@ -941,12 +1099,12 @@ КонецЕсли; // отрезаем .p7m в конце - Позиция = Найти(ПараметрыВыполнения.ИмяИРасширениеФайлаНаДиске, ПараметрыВыполнения.РасширениеФайлаНаДиске); + Позиция = СтрНайти(ПараметрыВыполнения.ИмяИРасширениеФайлаНаДиске, ПараметрыВыполнения.РасширениеФайлаНаДиске); ПараметрыВыполнения.ИмяИРасширениеФайлаНаДиске = Лев(ПараметрыВыполнения.ИмяИРасширениеФайлаНаДиске, Позиция - 2); // отрезаем .p7m в конце ПараметрыВыполнения.Вставить("ДиалогПолноеИмяФайлаПрежнее", ПараметрыВыполнения.ДиалогПолноеИмяФайла); - Позиция = Найти(ПараметрыВыполнения.ДиалогПолноеИмяФайла, ПараметрыВыполнения.РасширениеФайлаНаДиске); + Позиция = СтрНайти(ПараметрыВыполнения.ДиалогПолноеИмяФайла, ПараметрыВыполнения.РасширениеФайлаНаДиске); ПараметрыВыполнения.ДиалогПолноеИмяФайла = Лев(ПараметрыВыполнения.ДиалогПолноеИмяФайла, Позиция - 2); ВременныйФайлНешифрованный = Новый Файл(ПараметрыВыполнения.ДиалогПолноеИмяФайла); @@ -1732,7 +1890,7 @@ Возврат ПараметрыОбработчика; КонецФункции - + // Освобождает файл без обновления. // // Параметры: @@ -2080,7 +2238,7 @@ Если ПараметрыВыполнения.ДанныеФайла.РабочийКаталогВладельца <> "" Тогда // Есть рабочий каталог. ОтносительныйПутьКФайлу = ПараметрыВыполнения.ПолныйПутьКФайлу; Иначе - Позиция = Найти(ПараметрыВыполнения.ПолныйПутьКФайлу, ИмяКаталога); + Позиция = СтрНайти(ПараметрыВыполнения.ПолныйПутьКФайлу, ИмяКаталога); Если Позиция <> 0 Тогда ОтносительныйПутьКФайлу = Сред(ПараметрыВыполнения.ПолныйПутьКФайлу, СтрДлина(ИмяКаталога) + 1); КонецЕсли; @@ -2872,7 +3030,7 @@ #КонецЕсли ПолноеИмяФайла = ПолучитьПутьФайлаВРабочемКаталоге(ДанныеФайла); - Если ФайловыеФункцииСлужебныйКлиент.ОткрытьПроводникСФайлом(ПолноеИмяФайла) = Истина Тогда + Если ФайловыеФункцииСлужебныйКлиент.ОткрытьПроводникСФайлом(ПолноеИмяФайла) Тогда Возврат; КонецЕсли; @@ -2987,7 +3145,7 @@ Процедура УдалитьФайлИзРабочегоКаталогаПослеУдаленияФайла(Результат, ПараметрыВыполнения) Экспорт ПутьСПодкаталогом = ПараметрыВыполнения.ИмяКаталога; - Позиция = Найти(ПараметрыВыполнения.ПолноеИмяФайлаИзРегистра, ОбщегоНазначенияКлиентСервер.РазделительПути()); + Позиция = СтрНайти(ПараметрыВыполнения.ПолноеИмяФайлаИзРегистра, ПолучитьРазделительПути()); Если Позиция <> 0 Тогда ПутьСПодкаталогом = ПутьСПодкаталогом + Лев(ПараметрыВыполнения.ПолноеИмяФайлаИзРегистра, Позиция); КонецЕсли; @@ -3040,8 +3198,8 @@ Возврат; #КонецЕсли - МаксРазмер = ФайловыеФункцииСлужебныйКлиентСервер.ПерсональныеНастройкиРаботыСФайлами( - ).МаксимальныйРазмерЛокальногоКэшаФайлов; + МаксРазмер = + ФайловыеФункцииСлужебныйКлиентСервер.ПерсональныеНастройкиРаботыСФайлами().МаксимальныйРазмерЛокальногоКэшаФайлов; // Если размер РабочийКаталог установлен равным 0, // то считается, что никакого ограничения нет и умолчание в 10 Мб не используется. @@ -3229,7 +3387,7 @@ Если ПараметрыВыполнения.НомерШага = 3 Тогда ПутьСПодкаталогом = ПараметрыВыполнения.ИмяКаталога; - Позиция = Найти(ПараметрыВыполнения.Элемент.Путь, ОбщегоНазначенияКлиентСервер.РазделительПути()); + Позиция = СтрНайти(ПараметрыВыполнения.Элемент.Путь, ПолучитьРазделительПути()); Если Позиция <> 0 Тогда ПутьСПодкаталогом = ПараметрыВыполнения.ИмяКаталога + Лев(ПараметрыВыполнения.Элемент.Путь, Позиция); КонецЕсли; @@ -3484,7 +3642,7 @@ ФайлНаДискеПоИмени = Новый Файл(ПараметрыВыполнения.ПолноеИмяФайла); ИмяИРасширениеВПути = ФайлНаДискеПоИмени.Имя; - Позиция = Найти(ПараметрыВыполнения.ПолноеИмяФайла, ИмяИРасширениеВПути); + Позиция = СтрНайти(ПараметрыВыполнения.ПолноеИмяФайла, ИмяИРасширениеВПути); ПутьКФайлу = ""; Если Позиция <> 0 Тогда ПутьКФайлу = Лев(ПараметрыВыполнения.ПолноеИмяФайла, Позиция - 1); // -1 - вычет слэша @@ -4293,7 +4451,7 @@ Процедура ПеренестиСодержимоеРабочегоКаталога(ОбработчикРезультата, КаталогИсточника, КаталогПриемника) Экспорт // Новый путь является подмножеством старого. Это запрещено, т.к. может привести к зацикливанию. - Если Найти(НРег(КаталогПриемника), НРег(КаталогИсточника)) <> 0 Тогда + Если СтрНайти(НРег(КаталогПриемника), НРег(КаталогИсточника)) <> 0 Тогда ТекстПредупреждения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Выбранный рабочий каталог |""%1"" @@ -4881,7 +5039,7 @@ ВыборФайла.ПолноеИмяФайла = ИмяСРасширением; ВыборФайла.Расширение = Расширение; Фильтр = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Все файлы (*.%1)|*.%1'"), Расширение, Расширение); + НСтр("ru = 'Все файлы (*.%1)|*.%1'"), Расширение); ВыборФайла.Фильтр = Фильтр; ВыборФайла.Каталог = ПараметрыВыполнения.ПутьВыбора; @@ -5043,7 +5201,7 @@ Возврат; КонецЕсли; КонецЕсли; - ВернутьРезультат(ОбработчикРезультата, Неопределено); + ВернутьРезультат(ОбработчикРезультата, Истина); КонецПроцедуры @@ -5505,7 +5663,7 @@ ФайловыеФункцииСлужебныйКлиент.ВывестиНапоминаниеПриРедактировании(Новый ОписаниеОповещения( "ОткрытьФайлБезРасширенияПередачаФайла", ЭтотОбъект, Контекст)); Иначе - ОткрытьФайлБезРасширенияПередачаФайла(, Контекст); + ОткрытьФайлБезРасширенияПередачаФайла(Истина, Контекст); КонецЕсли; КонецПроцедуры @@ -5513,6 +5671,10 @@ // Продолжение процедуры (см. выше). Процедура ОткрытьФайлБезРасширенияПередачаФайла(Результат, Контекст) Экспорт + Если Результат = КодВозвратаДиалога.Отмена Или Результат = Неопределено Тогда + Возврат; + КонецЕсли; + Если Не Контекст.СохранятьСРасшифровкой И Контекст.ДанныеФайла.Зашифрован И ЗначениеЗаполнено(Контекст.РасширениеДляЗашифрованныхФайлов) Тогда @@ -5925,6 +6087,7 @@ ПараметрыВыполнения.Вставить("ВладелецФайла", ВладелецФайла); ПараметрыВыполнения.Вставить("ФормаВладелец", ФормаВладелец); ПараметрыВыполнения.Вставить("НеОткрыватьКарточкуПослеСозданияИзФайла", НеОткрыватьКарточкуПослеСозданияИзФайла); + ПараметрыВыполнения.Вставить("ЭтоФайл", Истина); ФормаВозврата = РаботаСФайламиСлужебныйКлиентПовтИсп.ФормаВыбораВариантаСозданияНовогоФайла(); ФормаВозврата.УстановитьПараметрыИспользования(РежимСоздания); @@ -5960,7 +6123,7 @@ ДобавитьИзФайловойСистемыБезРасширения(ПараметрыВыполнения); КонецЕсли; ИначеЕсли РежимСоздания = 3 Тогда // Считать со сканера. - ДобавитьСоСканера(ПараметрыВыполнения); + ФайловыеФункцииСлужебныйКлиент.ДобавитьСоСканера(ПараметрыВыполнения); Иначе ВернутьРезультат(ПараметрыВыполнения.ОбработчикРезультата, Неопределено); КонецЕсли; @@ -5997,164 +6160,6 @@ КонецПроцедуры -// На основе переданного пути к файлу на диске создает Файл его и открывает карточку. -// -// ПараметрыДобавления - Структура: -// * ОбработчикРезультата - ОписаниеОповещения, Неопределено. -// - Описание процедуры, принимающей результат работы метода. -// * ПолноеИмяФайла - Строка - Необязательный. Полный путь и имя файла на клиенте. -// Если не указан, то будет открыт диалог для выбора файла. -// * ВладелецФайла - ЛюбаяСсылка - владелец файла. -// * ФормаВладелец - УправляемаяФорма из которой вызвано создание файла. -// * НеОткрыватьКарточкуПослеСозданияИзФайла - Булево. -// - Истина когда карточка файла не открывается после создания. -// * ИмяСоздаваемогоФайла - Строка - Необязательный. Новое имя файла. -// -Процедура ДобавитьИзФайловойСистемыСРасширением(ПараметрыВыполнения) Экспорт - - Результат = ДобавитьИзФайловойСистемыСРасширениемСинхронно(ПараметрыВыполнения); - Если Не Результат.ФайлДобавлен Тогда - Если ЗначениеЗаполнено(Результат.ТекстОшибки) Тогда - ВернутьРезультатПослеПоказаПредупреждения(ПараметрыВыполнения.ОбработчикРезультата, Результат.ТекстОшибки, Неопределено); - Иначе - ВернутьРезультат(ПараметрыВыполнения.ОбработчикРезультата, Неопределено); - КонецЕсли; - Возврат; - КонецЕсли; - - Если ПараметрыВыполнения.НеОткрыватьКарточкуПослеСозданияИзФайла <> Истина Тогда - ПараметрыФормы = Новый Структура; - ПараметрыФормы.Вставить("Ключ", Результат.ФайлСсылка); - ПараметрыФормы.Вставить("КарточкаОткрытаПослеСозданияФайла", Истина); - - ОбработчикДиалога = ПодготовитьОбработчикДляДиалога(ПараметрыВыполнения.ОбработчикРезультата); - ОткрытьФорму("Справочник.Файлы.ФормаОбъекта", ПараметрыФормы, ПараметрыВыполнения.ФормаВладелец, , , , ОбработчикДиалога); - Иначе - ВернутьРезультат(ПараметрыВыполнения.ОбработчикРезультата, Неопределено); - КонецЕсли; - -КонецПроцедуры - -// На основе переданного пути к файлу на диске создает Файл его и открывает карточку. -// -// ПараметрыДобавления - Структура: -// * ПолноеИмяФайла - Строка - Необязательный. Полный путь и имя файла на клиенте. -// Если не указан, то будет открыт синхронный диалог для выбора файла. -// * ВладелецФайла - ЛюбаяСсылка - владелец файла. -// * УникальныйИдентификатор - УникальныйИдентификатор - Идентификатор формы для хранения файла. -// * ИмяСоздаваемогоФайла - Строка - Необязательный. Новое имя файла. -// -// Возвращаемое значение: -// Структура - Результат. -// * ФайлДобавлен - Булево - успешно ли выполнена операция. -// * ФайлСсылка - СправочникСсылка.Файлы -// * ТекстОшибки - Строка. -// -Функция ДобавитьИзФайловойСистемыСРасширениемСинхронно(ПараметрыВыполнения) Экспорт - - Результат = Новый Структура; - Результат.Вставить("ФайлДобавлен", Ложь); - Результат.Вставить("ФайлСсылка", Неопределено); - Результат.Вставить("ТекстОшибки", ""); - - Если Не ПараметрыВыполнения.Свойство("ПолноеИмяФайла") Тогда - // Загрузить из файловой системы с расширением работы с файлами. - ДиалогВыбораФайла = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Открытие); - ДиалогВыбораФайла.МножественныйВыбор = Ложь; - ДиалогВыбораФайла.Заголовок = НСтр("ru = 'Выбор файла'"); - ДиалогВыбораФайла.Фильтр = НСтр("ru = 'Все файлы (*.*)|*.*'"); - ДиалогВыбораФайла.Каталог = РаботаСФайламиСлужебныйВызовСервера.РабочийКаталогПапки(ПараметрыВыполнения.ВладелецФайла); - Если НЕ ДиалогВыбораФайла.Выбрать() Тогда - Возврат Результат; - КонецЕсли; - ПараметрыВыполнения.Вставить("ПолноеИмяФайла", ДиалогВыбораФайла.ПолноеИмяФайла); - КонецЕсли; - - Если Не ПараметрыВыполнения.Свойство("ИмяСоздаваемогоФайла") Тогда - ПараметрыВыполнения.Вставить("ИмяСоздаваемогоФайла", Неопределено); - КонецЕсли; - - ФайлКлиента = Новый Файл(ПараметрыВыполнения.ПолноеИмяФайла); - - ФайловыеФункцииСлужебныйКлиентСервер.ПроверитьВозможностьЗагрузкиФайла(ФайлКлиента); - - ОбщиеНастройки = ФайловыеФункцииСлужебныйКлиентСервер.ОбщиеНастройкиРаботыСФайлами(); - ИзвлекатьТекстыФайловНаКлиенте = НЕ ОбщиеНастройки.ИзвлекатьТекстыФайловНаСервере; - Если ИзвлекатьТекстыФайловНаКлиенте Тогда - АдресВременногоХранилищаТекста = ФайловыеФункцииСлужебныйКлиентСервер.ИзвлечьТекстВоВременноеХранилище( - ФайлКлиента.ПолноеИмя, - ПараметрыВыполнения.ФормаВладелец.УникальныйИдентификатор); - Иначе - АдресВременногоХранилищаТекста = ""; - КонецЕсли; - - Если ПараметрыВыполнения.ИмяСоздаваемогоФайла <> Неопределено Тогда - ИмяСоздания = ПараметрыВыполнения.ИмяСоздаваемогоФайла; - Иначе - ИмяСоздания = ФайлКлиента.ИмяБезРасширения; - КонецЕсли; - - ИмяФайла = ИмяСоздания + ФайлКлиента.Расширение; - РазмерВМб = ФайлКлиента.Размер() / (1024 * 1024); - - ТекстСостояния = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Идет сохранение файла ""%1"" (%2 Мб). - |Пожалуйста, подождите...'"), - ИмяФайла, - ФайловыеФункцииСлужебныйКлиентСервер.ПолучитьСтрокуСРазмеромФайла(РазмерВМб)); - Состояние(ТекстСостояния); - - // Помещение файла во временное хранилище. - АдресВременногоХранилищаФайла = ""; - - ПомещаемыеФайлы = Новый Массив; - Описание = Новый ОписаниеПередаваемогоФайла(ФайлКлиента.ПолноеИмя, ""); - ПомещаемыеФайлы.Добавить(Описание); - - ПомещенныеФайлы = Новый Массив; - ФайлыПомещены = ПоместитьФайлы(ПомещаемыеФайлы, ПомещенныеФайлы, , Ложь, ПараметрыВыполнения.ФормаВладелец.УникальныйИдентификатор); - Если НЕ ФайлыПомещены Тогда - Возврат Результат; - КонецЕсли; - - Если ПомещенныеФайлы.Количество() = 1 Тогда - АдресВременногоХранилищаФайла = ПомещенныеФайлы[0].Хранение; - КонецЕсли; - - // Создание карточки Файла в БД. - Попытка - СведенияОФайле = РаботаСФайламиКлиентСервер.СведенияОФайле("ФайлСВерсией", ФайлКлиента); - СведенияОФайле.АдресВременногоХранилищаФайла = АдресВременногоХранилищаФайла; - СведенияОФайле.АдресВременногоХранилищаТекста = АдресВременногоХранилищаТекста; - СведенияОФайле.ЗаписатьВИсторию = Истина; - СведенияОФайле.ИмяБезРасширения = ИмяСоздания; - Результат.ФайлСсылка = РаботаСФайламиСлужебныйВызовСервера.СоздатьФайлСВерсией(ПараметрыВыполнения.ВладелецФайла, СведенияОФайле); - Результат.ФайлДобавлен = Истина; - Исключение - Результат.ТекстОшибки = ФайловыеФункцииСлужебныйКлиентСервер.ОшибкаСозданияНовогоФайла(ИнформацияОбОшибке()); - КонецПопытки; - Состояние(); - - Если Результат.ТекстОшибки <> "" Тогда - Возврат Результат; - КонецЕсли; - - ПараметрыОповещения = Новый Структура; - ПараметрыОповещения.Вставить("Владелец", ПараметрыВыполнения.ВладелецФайла); - ПараметрыОповещения.Вставить("Файл", Результат.ФайлСсылка); - ПараметрыОповещения.Вставить("Событие", "СозданФайл"); - Оповестить("Запись_Файл", ПараметрыОповещения); - - ПоказатьОповещениеПользователя( - НСтр("ru = 'Создание:'"), - ПолучитьНавигационнуюСсылку(Результат.ФайлСсылка), - Результат.ФайлСсылка, - БиблиотекаКартинок.Информация32); - - Возврат Результат; - -КонецФункции - // Продолжение процедуры (см. выше). Процедура ДобавитьИзФайловойСистемыБезРасширения(ПараметрыВыполнения) Экспорт @@ -6172,6 +6177,11 @@ Возврат; КонецЕсли; + Результат = Новый Структура; + Результат.Вставить("ФайлДобавлен", Ложь); + Результат.Вставить("ФайлСсылка", Неопределено); + Результат.Вставить("ТекстОшибки", ""); + СтруктураПути = ОбщегоНазначенияКлиентСервер.РазложитьПолноеИмяФайла(ВыбранноеИмяФайла); Если ПустаяСтрока(СтруктураПути.Расширение) Тогда ТекстВопроса = НСтр("ru = 'Необходимо указать файл с расширением.'"); @@ -6184,42 +6194,42 @@ КонецЕсли; // Создание карточки файла в БД. - ТекстОшибки = ""; Попытка СведенияОФайле = РаботаСФайламиКлиентСервер.СведенияОФайле("ФайлСВерсией"); СведенияОФайле.АдресВременногоХранилищаФайла = Адрес; СведенияОФайле.ИмяБезРасширения = СтруктураПути.ИмяБезРасширения; СведенияОФайле.РасширениеБезТочки = ОбщегоНазначенияКлиентСервер.РасширениеБезТочки(СтруктураПути.Расширение); - ФайлСсылка = РаботаСФайламиСлужебныйВызовСервера.СоздатьФайлСВерсией(ПараметрыВыполнения.ВладелецФайла, СведенияОФайле); + Результат.ФайлСсылка = РаботаСФайламиСлужебныйВызовСервера.СоздатьФайлСВерсией(ПараметрыВыполнения.ВладелецФайла, СведенияОФайле); + Результат.ФайлДобавлен = Истина; Исключение - ТекстОшибки = ФайловыеФункцииСлужебныйКлиентСервер.ОшибкаСозданияНовогоФайла(ИнформацияОбОшибке()); + Результат.ТекстОшибки = ФайловыеФункцииСлужебныйКлиентСервер.ОшибкаСозданияНовогоФайла(ИнформацияОбОшибке()); КонецПопытки; - Если ТекстОшибки <> "" Тогда - ВернутьРезультатПослеПоказаПредупреждения(ПараметрыВыполнения.ОбработчикРезультата, ТекстОшибки, Неопределено); + Если Результат.ТекстОшибки <> "" Тогда + ВернутьРезультатПослеПоказаПредупреждения(ПараметрыВыполнения.ОбработчикРезультата, Результат.ТекстОшибки, Неопределено); Возврат; КонецЕсли; ПараметрыОповещения = Новый Структура; ПараметрыОповещения.Вставить("Владелец", ПараметрыВыполнения.ВладелецФайла); - ПараметрыОповещения.Вставить("Файл", ФайлСсылка); + ПараметрыОповещения.Вставить("Файл", Результат.ФайлСсылка); ПараметрыОповещения.Вставить("Событие", "СозданФайл"); Оповестить("Запись_Файл", ПараметрыОповещения); ПоказатьОповещениеПользователя( НСтр("ru = 'Создание:'"), - ПолучитьНавигационнуюСсылку(ФайлСсылка), - ФайлСсылка, + ПолучитьНавигационнуюСсылку(Результат.ФайлСсылка), + Результат.ФайлСсылка, БиблиотекаКартинок.Информация32); Если ПараметрыВыполнения.НеОткрыватьКарточкуПослеСозданияИзФайла <> Истина Тогда ПараметрыФормы = Новый Структура; - ПараметрыФормы.Вставить("Ключ", ФайлСсылка); + ПараметрыФормы.Вставить("Ключ", Результат.ФайлСсылка); ПараметрыФормы.Вставить("КарточкаОткрытаПослеСозданияФайла", Истина); ОбработчикРезультата = ПодготовитьОбработчикДляДиалога(ПараметрыВыполнения.ОбработчикРезультата); ОткрытьФорму("Справочник.Файлы.ФормаОбъекта", ПараметрыФормы, ПараметрыВыполнения.ФормаВладелец, , , , ОбработчикРезультата); Иначе - ВернутьРезультат(ПараметрыВыполнения.ОбработчикРезультата, Неопределено); + ВернутьРезультат(ПараметрыВыполнения.ОбработчикРезультата, Результат); КонецЕсли; КонецПроцедуры @@ -6235,27 +6245,6 @@ КонецПроцедуры -// Открывает диалог сканирования и просмотра картинки. -Процедура ДобавитьСоСканера(ПараметрыВыполнения) Экспорт - - Если ОбщегоНазначенияКлиентСервер.ЭтоLinuxКлиент() Тогда - ВернутьРезультат(ПараметрыВыполнения.ОбработчикРезультата, Неопределено); - Возврат; - КонецЕсли; - - СистемнаяИнформация = Новый СистемнаяИнформация(); - ИдентификаторКлиента = СистемнаяИнформация.ИдентификаторКлиента; - - ПараметрыФормы = Новый Структура; - ПараметрыФормы.Вставить("ВладелецФайла", ПараметрыВыполнения.ВладелецФайла); - ПараметрыФормы.Вставить("ИдентификаторКлиента", ИдентификаторКлиента); - ПараметрыФормы.Вставить("НеОткрыватьКарточкуПослеСозданияИзФайла", ПараметрыВыполнения.НеОткрыватьКарточкуПослеСозданияИзФайла); - - ОбработчикРезультата = ПодготовитьОбработчикДляДиалога(ПараметрыВыполнения.ОбработчикРезультата); - ОткрытьФорму("Справочник.Файлы.Форма.РезультатСканирования", ПараметрыФормы, ПараметрыВыполнения.ФормаВладелец, , , , ОбработчикРезультата); - -КонецПроцедуры - //////////////////////////////////////////////////////////////////////////////// // Рассылает оповещение о завершении шифрования или расшифровки файла. @@ -7084,8 +7073,7 @@ КонецЕсли; ПоказыватьЗанятыеФайлыПриЗавершенииРаботы = - ФайловыеФункцииСлужебныйКлиентСервер.ПерсональныеНастройкиРаботыСФайлами( - ).ПоказыватьЗанятыеФайлыПриЗавершенииРаботы; + ФайловыеФункцииСлужебныйКлиентСервер.ПерсональныеНастройкиРаботыСФайлами().ПоказыватьЗанятыеФайлыПриЗавершенииРаботы; Если Не ПоказыватьЗанятыеФайлыПриЗавершенииРаботы Тогда Возврат Неопределено; @@ -7135,7 +7123,7 @@ Если ВыбранныйФайл.ЭтоКаталог() Тогда НовыйПуть = Строка(Путь); - НовыйПуть = НовыйПуть + ОбщегоНазначенияКлиентСервер.РазделительПути(); + НовыйПуть = НовыйПуть + ПолучитьРазделительПути(); НовыйПуть = НовыйПуть + Строка(ВыбранныйФайл.Имя); МассивФайловВКаталоге = НайтиФайлы(НовыйПуть, "*.*"); @@ -7147,7 +7135,7 @@ КонецЕсли; // Временные файлы Word не удаляем из рабочего каталога. - Если Лев(ВыбранныйФайл.Имя, 1) = "~" И ВыбранныйФайл.ПолучитьНевидимость() = Истина Тогда + Если СтрНачинаетсяС(ВыбранныйФайл.Имя, "~") И ВыбранныйФайл.ПолучитьНевидимость() Тогда Продолжить; КонецЕсли; @@ -7269,143 +7257,6 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// Процедуры и функция для работы со сканером. - -// Инициализация компоненты сканирования. -Функция ПроинициализироватьКомпоненту() Экспорт - - Если ОбщегоНазначенияКлиентСервер.ЭтоLinuxКлиент() Тогда - Возврат Ложь; - КонецЕсли; - - ИмяПараметра = "СтандартныеПодсистемы.КомпонентаTwain"; - Если ПараметрыПриложения[ИмяПараметра] = Неопределено Тогда - КодВозврата = ПодключитьВнешнююКомпоненту("ОбщийМакет.КомпонентаTWAIN", "twain", ТипВнешнейКомпоненты.Native); - Если Не КодВозврата Тогда - Возврат Ложь; - КонецЕсли; - - ПараметрыПриложения.Вставить(ИмяПараметра, Новый("AddIn.twain.AddInNativeExtension")); - КонецЕсли; - - Возврат Истина; - -КонецФункции - -// Установка компоненты сканирования. -// -// Параметры: -// ОбработчикРезультата - ОписаниеОповещения, Неопределено - Описание процедуры, принимающей результат работы метода. -// -// Возвращаемое значение: -// Булево - Успешно ли выполнена операция. -// -// См. также: -// Переменную глобального контекста КомпонентаTwain. -// -Процедура УстановитьКомпоненту(ОбработчикРезультата) Экспорт - - Если ОбщегоНазначенияКлиентСервер.ЭтоLinuxКлиент() Тогда - ВернутьРезультат(ОбработчикРезультата, Ложь); - Возврат; - КонецЕсли; - - Если ПроинициализироватьКомпоненту() Тогда - Состояние(НСтр("ru = 'Компонента сканирования уже установлена.'")); - ВернутьРезультат(ОбработчикРезультата, Истина); - Возврат; - КонецЕсли; - - ПараметрыВыполнения = Новый Структура; - ПараметрыВыполнения.Вставить("ОбработчикРезультата", ОбработчикРезультата); - Обработчик = Новый ОписаниеОповещения("УстановитьКомпонентуЗавершение", ЭтотОбъект, ПараметрыВыполнения); - НачатьУстановкуВнешнейКомпоненты(Обработчик, "ОбщийМакет.КомпонентаTWAIN"); - -КонецПроцедуры - -// Продолжение процедуры (см. выше). -Процедура УстановитьКомпонентуЗавершение(ПараметрыВыполнения) Экспорт - - КомпонентаПодключена = ПроинициализироватьКомпоненту(); - ВернутьРезультат(ПараметрыВыполнения.ОбработчикРезультата, КомпонентаПодключена); - -КонецПроцедуры - -// Возвращает версию компоненты сканирования. -Функция ВерсияКомпонентыСканирования() Экспорт - - Если Не ПроинициализироватьКомпоненту() Тогда - Возврат НСтр("ru= 'Компонента сканирования не установлена'"); - КонецЕсли; - - Возврат ПараметрыПриложения["СтандартныеПодсистемы.КомпонентаTwain"].Версия(); - -КонецФункции - -// Возвращает устройства TWAIN (массив строк). -Функция ПолучитьУстройства() Экспорт - - Массив = Новый Массив; - - Если Не ПроинициализироватьКомпоненту() Тогда - Возврат Массив; - КонецЕсли; - - СтрокаУстройств = ПараметрыПриложения["СтандартныеПодсистемы.КомпонентаTwain"].ПолучитьУстройства(); - - Для Индекс = 1 По СтрЧислоСтрок(СтрокаУстройств) Цикл - Строка = СтрПолучитьСтроку(СтрокаУстройств, Индекс); - Массив.Добавить(Строка); - КонецЦикла; - - Возврат Массив; - -КонецФункции - -// Проверяет установлена ли компонента сканирования и есть ли хоть один сканер. -Функция ДоступнаКомандаСканировать() Экспорт - - Если ОбщегоНазначенияКлиентСервер.ЭтоLinuxКлиент() Тогда - Возврат Ложь; - КонецЕсли; - - Если Не ПроинициализироватьКомпоненту() Тогда - Возврат Ложь; - КонецЕсли; - - Если ПараметрыПриложения["СтандартныеПодсистемы.КомпонентаTwain"].ЕстьУстройства() Тогда - Возврат Истина; - КонецЕсли; - - Возврат Ложь; - -КонецФункции - -// Возвращает настройку сканера по имени. -// -// Параметры: -// ИмяУстройства - Строка - Имя сканера. -// ИмяНастройки - Строка - Имя настройки, -// например "XRESOLUTION", или "PIXELTYPE", или "ROTATION", или "SUPPORTEDSIZES". -// -// Возвращаемое значение: -// Число - Значение настройки сканера. -// -Функция ПолучитьНастройку(ИмяУстройства, ИмяНастройки) Экспорт - - Если ОбщегоНазначенияКлиентСервер.ЭтоLinuxКлиент() Тогда - Возврат -1; - КонецЕсли; - - Попытка - Возврат ПараметрыПриложения["СтандартныеПодсистемы.КомпонентаTwain"].ПолучитьНастройку(ИмяУстройства, ИмяНастройки); - Исключение - Возврат -1; - КонецПопытки; - -КонецФункции - //////////////////////////////////////////////////////////////////////////////// // ВСПОМОГАТЕЛЬНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ diff --git a/SSL/src/CommonModules/РаботаСФайламиСлужебныйКлиентПовтИсп/Module.bsl b/SSL/src/CommonModules/РаботаСФайламиСлужебныйКлиентПовтИсп/Module.bsl index c620ca6ca..3098323ed 100644 --- a/SSL/src/CommonModules/РаботаСФайламиСлужебныйКлиентПовтИсп/Module.bsl +++ b/SSL/src/CommonModules/РаботаСФайламиСлужебныйКлиентПовтИсп/Module.bsl @@ -9,7 +9,7 @@ // для выбора варианта создания. Функция ФормаВыбораВариантаСозданияНовогоФайла() Экспорт - ДоступнаКомандаСканировать = РаботаСФайламиСлужебныйКлиент.ДоступнаКомандаСканировать(); + ДоступнаКомандаСканировать = ФайловыеФункцииСлужебныйКлиент.ДоступнаКомандаСканировать(); ПараметрыФормы = Новый Структура("ДоступнаКомандаСканировать", ДоступнаКомандаСканировать); Возврат ПолучитьФорму("Справочник.Файлы.Форма.ФормаНового", ПараметрыФормы); diff --git a/SSL/src/CommonModules/РаботаСоСканеромКлиент/Module.bsl b/SSL/src/CommonModules/РаботаСоСканеромКлиент/Module.bsl deleted file mode 100644 index 58b4448e5..000000000 --- a/SSL/src/CommonModules/РаботаСоСканеромКлиент/Module.bsl +++ /dev/null @@ -1,19 +0,0 @@ -//////////////////////////////////////////////////////////////////////////////// -// Подсистема "Работа с файлами". -// Устаревший модуль. Будет удален в следующей редакции БСП. -//////////////////////////////////////////////////////////////////////////////// - -#Область ПрограммныйИнтерфейс -// Устаревший программный интерфейс. Будет удален в следующей редакции БСП. - -// Устарела. Будет удалена в следующей редакции БСП. -// Для редактирования настроек сканирования следует использовать -// процедуру РаботаСФайламКлиент.ОткрытьФормуНастройкиСканирования. -// -Функция ПроинициализироватьКомпоненту() Экспорт - - Возврат РаботаСФайламиСлужебныйКлиент.ПроинициализироватьКомпоненту(); - -КонецФункции - -#КонецОбласти diff --git a/SSL/src/CommonModules/РассылкаОтчетов/Module.bsl b/SSL/src/CommonModules/РассылкаОтчетов/Module.bsl index 0d2266016..283ce8293 100644 --- a/SSL/src/CommonModules/РассылкаОтчетов/Module.bsl +++ b/SSL/src/CommonModules/РассылкаОтчетов/Module.bsl @@ -137,11 +137,10 @@ ПараметрыДоставки.Вставить("ИспользоватьЭлектроннуюПочту", Рассылка.ИспользоватьЭлектроннуюПочту); // Проверки отмеченных способов доставки. - Если НЕ ПараметрыДоставки.ИспользоватьПапку - И НЕ ПараметрыДоставки.ИспользоватьСетевойКаталог - И НЕ ПараметрыДоставки.ИспользоватьFTPРесурс - И НЕ ПараметрыДоставки.ИспользоватьЭлектроннуюПочту - Тогда + Если Не ПараметрыДоставки.ИспользоватьПапку + И Не ПараметрыДоставки.ИспользоватьСетевойКаталог + И Не ПараметрыДоставки.ИспользоватьFTPРесурс + И Не ПараметрыДоставки.ИспользоватьЭлектроннуюПочту Тогда ЗаписьЖурнала(ПараметрыЖурнала, УровеньЖурналаРегистрации.Предупреждение, НСтр("ru = 'Не выбран способ доставки.'")); Возврат Ложь; @@ -150,7 +149,9 @@ ПараметрыДоставки.Вставить("Персонализирована", Рассылка.Персонализирована); ПараметрыДоставки.Вставить("Архивировать", Рассылка.Архивировать); ПараметрыДоставки.Вставить("ИмяАрхива", Рассылка.ИмяАрхива); - ПараметрыДоставки.Вставить("ПарольАрхива", Рассылка.ПарольАрхива); + УстановитьПривилегированныйРежим(Истина); + ПараметрыДоставки.Вставить("ПарольАрхива", ОбщегоНазначения.ПрочитатьДанныеИзБезопасногоХранилища(Рассылка, "ПарольАрхива")); + УстановитьПривилегированныйРежим(Ложь); // Подготовка параметров доставки в папку. Если ПараметрыДоставки.ИспользоватьПапку Тогда @@ -168,7 +169,9 @@ ПараметрыДоставки.Вставить("Сервер", Рассылка.FTPСервер); ПараметрыДоставки.Вставить("Порт", Рассылка.FTPПорт); ПараметрыДоставки.Вставить("Логин", Рассылка.FTPЛогин); - ПараметрыДоставки.Вставить("Пароль", Рассылка.FTPПароль); + УстановитьПривилегированныйРежим(Истина); + ПараметрыДоставки.Вставить("Пароль", ОбщегоНазначения.ПрочитатьДанныеИзБезопасногоХранилища(Рассылка, "FTPПароль")); + УстановитьПривилегированныйРежим(Ложь); ПараметрыДоставки.Вставить("Каталог", Рассылка.FTPКаталог); ПараметрыДоставки.Вставить("ПассивноеСоединение", Рассылка.FTPПассивноеСоединение); КонецЕсли; @@ -230,8 +233,8 @@ ПараметрыДоставки.ПараметрыПисьма.Вложения.Вставить(КлючИЗначение.Ключ, КлючИЗначение.Значение); КонецЦикла; КонецЕсли; - КонецЕсли; // Рассылка.ПисьмоВФорматеHTML - КонецЕсли; // ПараметрыДоставки.ИспользоватьЭлектроннуюПочту. + КонецЕсли; + КонецЕсли; Возврат ВыполнитьРассылку(ТаблицаОтчетов, ПараметрыДоставки, Рассылка, ПараметрыЖурнала); @@ -385,20 +388,20 @@ // В разрезе получателей Для Каждого КлючИЗначение Из ПараметрыДоставки.Получатели Цикл СформироватьИСохранитьОтчет( - ПараметрыЖурнала, - ПараметрыОтчета, - ДеревоОтчетов, - ПараметрыДоставки, - КлючИЗначение.Ключ); // Получатель. + ПараметрыЖурнала, + ПараметрыОтчета, + ДеревоОтчетов, + ПараметрыДоставки, + КлючИЗначение.Ключ); КонецЦикла; Иначе // Без персонализации СформироватьИСохранитьОтчет( - ПараметрыЖурнала, - ПараметрыОтчета, - ДеревоОтчетов, - ПараметрыДоставки, - Неопределено); // Получатель + ПараметрыЖурнала, + ПараметрыОтчета, + ДеревоОтчетов, + ПараметрыДоставки, + Неопределено); КонецЕсли; ЗаписьЖурнала(ПараметрыЖурнала, УровеньЖурналаРегистрации.Примечание, НСтр("ru = 'Отчет %1 успешно сформирован'"), , @@ -655,12 +658,11 @@ МассивСообщений = Новый Массив; Для Каждого СтрокаТаблицы Из Подготовленные Цикл - ПараметрыЖурнала = Новый Структура("МассивОшибок", Новый Массив); СтрокаТаблицы.Выполнена = ПодготовитьПараметрыИВыполнитьРассылку( - СтрокаТаблицы.Рассылка, - ПараметрыЖурнала, + СтрокаТаблицы.Рассылка, + ПараметрыЖурнала, ПредварительныеНастройки); СтрокаТаблицы.СОшибками = (ПараметрыЖурнала.МассивОшибок.Количество() > 0); @@ -697,7 +699,7 @@ Иначе ШаблонСообщения = НСтр("ru = 'Рассылка ""%1"" выполнена.'"); КонецЕсли; - ШаблонСообщения = СтрЗаменить(ШаблонСообщения, "%1", СтрокаТаблицы.Представление); + ШаблонСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонСообщения, СтрокаТаблицы.Представление); Если ТекстСообщения = "" Тогда ТекстСообщения = ШаблонСообщения; @@ -717,15 +719,13 @@ Формат(НеВыполнено, "ЧН=0; ЧГ=0")); КонецЕсли; - Результат = СтандартныеПодсистемыКлиентСервер.НовыйРезультатВыполнения(); - Результат.ВыводПредупреждения.Использование = Истина; - Результат.ВыводПредупреждения.Текст = ТекстСообщения; - Результат.ВыводПредупреждения.ТекстОшибок = РассылкаОтчетовКлиентСервер.СтрокаСообщенийПользователю(МассивСообщений); + Результат = Новый Структура; + ТекстОшибок = РассылкаОтчетовКлиентСервер.СтрокаСообщенийПользователю(МассивСообщений); + СтандартныеПодсистемыКлиентСервер.ВывестиПредупреждение(Результат, ТекстСообщения, ТекстОшибок); Если Всего > 0 Тогда ТипДляОбновления = ?(Всего = 1, ТаблицаРассылок[0].Рассылка, Тип("СправочникСсылка.РассылкиОтчетов")); - Результат.ОповещениеДинамическихСписков.Использование = Истина; - Результат.ОповещениеДинамическихСписков.СсылкаИлиТип = ТипДляОбновления; + СтандартныеПодсистемыКлиентСервер.ОповеститьДинамическиеСписки(Результат, ТипДляОбновления); КонецЕсли; ПоместитьВоВременноеХранилище(Результат, АдресРезультата); @@ -741,10 +741,14 @@ // См. описание этой же процедуры в модуле СтандартныеПодсистемыСервер. Процедура ПриДобавленииОбработчиковСлужебныхСобытий(КлиентскиеОбработчики, СерверныеОбработчики) Экспорт // СЕРВЕРНЫЕ ОБРАБОТЧИКИ. - СерверныйМодуль = "РассылкаОтчетов"; + СерверныеОбработчики["СтандартныеПодсистемы.БазоваяФункциональность\ПриЗаполненииРазрешенийНаДоступКВнешнимРесурсам"].Добавить( + "РассылкаОтчетов"); + + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ТекущиеДела") Тогда + СерверныеОбработчики["СтандартныеПодсистемы.ТекущиеДела\ПриЗаполненииСпискаТекущихДел"].Добавить( + "РассылкаОтчетов"); + КонецЕсли; - Событие = "СтандартныеПодсистемы.БазоваяФункциональность\ПриЗаполненииРазрешенийНаДоступКВнешнимРесурсам"; - СерверныеОбработчики[Событие].Добавить(СерверныйМодуль); КонецПроцедуры //////////////////////////////////////////////////////////////////////////////// @@ -794,6 +798,50 @@ КонецПроцедуры +// Заполняет список текущих дел пользователя. +// +// Параметры: +// ТекущиеДела - ТаблицаЗначений - таблица значений с колонками: +// * Идентификатор - Строка - внутренний идентификатор дела, используемый механизмом "Текущие дела". +// * ЕстьДела - Булево - если Истина, дело выводится в списке текущих дел пользователя. +// * Важное - Булево - если Истина, дело будет выделено красным цветом. +// * Представление - Строка - представление дела, выводимое пользователю. +// * Количество - Число - количественный показатель дела, выводится в строке заголовка дела. +// * Форма - Строка - полный путь к форме, которую необходимо открыть при нажатии на гиперссылку +// дела на панели "Текущие дела". +// * ПараметрыФормы- Структура - параметры, с которыми нужно открывать форму показателя. +// * Владелец - Строка, объект метаданных - строковый идентификатор дела, которое будет владельцем для текущего +// или объект метаданных подсистема. +// * Подсказка - Строка - текст подсказки. +// +Процедура ПриЗаполненииСпискаТекущихДел(ТекущиеДела) Экспорт + + МодульТекущиеДелаСервер = ОбщегоНазначения.ОбщийМодуль("ТекущиеДелаСервер"); + Если Не ПравоДоступа("Просмотр", Метаданные.Справочники.РассылкиОтчетов) + Или МодульТекущиеДелаСервер.ДелоОтключено("ПроблемыСРассылкамиОтчетов") Тогда + Возврат; + КонецЕсли; + + КоличествоПроблем = КоличествоПроблемСРассылкамиОтчетов(); + + Разделы = МодульТекущиеДелаСервер.РазделыДляОбъекта(Метаданные.Справочники.РассылкиОтчетов.ПолноеИмя()); + Для Каждого Раздел Из Разделы Цикл + + ИдентификаторМоихЗадач = "ПроблемыСРассылкамиОтчетов" + СтрЗаменить(Раздел.ПолноеИмя(), ".", ""); + + Дело = ТекущиеДела.Добавить(); + Дело.Идентификатор = ИдентификаторМоихЗадач; + Дело.ЕстьДела = КоличествоПроблем > 0; + Дело.Представление = НСтр("ru = 'Проблемы с рассылками отчетов'"); + Дело.Количество = КоличествоПроблем; + Дело.Форма = "Справочник.РассылкиОтчетов.ФормаСписка"; + Дело.Важное = Истина; + Дело.Владелец = Раздел; + + КонецЦикла; + +КонецПроцедуры + //////////////////////////////////////////////////////////////////////////////// // Обработчики условных вызовов. @@ -808,13 +856,12 @@ Если Форма.НастройкиОтчета.Внешний Тогда Возврат; КонецЕсли; - Если Не ПравоДоступа("Изменение", Метаданные.Справочники.РассылкиОтчетов) Тогда + Если Не ПравоДобавления() Тогда Возврат; КонецЕсли; // Добавление команд и кнопок ПодменюИмя = "ОтправитьРассылку"; - СуффиксЛевых = "_Левая"; КомандаСоздать = Форма.Команды.Добавить("РассылкаОтчетовСоздатьНовую"); КомандаСоздать.Действие = "Подключаемый_Команда"; @@ -828,8 +875,8 @@ КомандаПрисоединить.Заголовок = НСтр("ru = 'Включить в существующую рассылку отчетов...'"); КомандаПрисоединить.Подсказка = НСтр("ru = 'Присоединить отчет с текущими настройками к существующей рассылке отчетов.'"); - Форма.ПостоянныеКоманды.Добавить(КомандаСоздать.Имя); - Форма.ПостоянныеКоманды.Добавить(КомандаПрисоединить.Имя); + Форма.ПостоянныеКоманды.Добавить(КомандаСоздать.Имя, "РассылкаОтчетовКлиент"); + Форма.ПостоянныеКоманды.Добавить(КомандаПрисоединить.Имя, "РассылкаОтчетовКлиент"); Подменю = Форма.Элементы.Добавить(ПодменюИмя, Тип("ГруппаФормы"), Форма.Элементы.ГруппаОтправить); Подменю.Вид = ВидГруппыФормы.ГруппаКнопок; @@ -837,25 +884,78 @@ ЭлементСоздать = Форма.Элементы.Добавить(КомандаСоздать.Имя, Тип("КнопкаФормы"), Подменю); ЭлементСоздать.ИмяКоманды = КомандаСоздать.Имя; - ЭлементСоздать.ТолькоВоВсехДействиях = Истина; - - ЭлементПрисоединить = Форма.Элементы.Добавить(КомандаПрисоединить.Имя, Тип("КнопкаФормы"), Подменю); - ЭлементПрисоединить.ИмяКоманды = КомандаПрисоединить.Имя; - ЭлементПрисоединить.ТолькоВоВсехДействиях = Истина; - - Подменю_Левая = Форма.Элементы.Добавить(ПодменюИмя + СуффиксЛевых, Тип("ГруппаФормы"), Форма.Элементы.ГруппаОтправить_Левая); - ЗаполнитьЗначенияСвойств(Подменю_Левая, Подменю, "Вид, Заголовок"); - - ЭлементСоздать = Форма.Элементы.Добавить(КомандаСоздать.Имя + СуффиксЛевых, Тип("КнопкаФормы"), Подменю_Левая); - ЭлементСоздать.ИмяКоманды = КомандаСоздать.Имя; ЭлементСоздать.ТолькоВоВсехДействиях = Ложь; - ЭлементПрисоединить = Форма.Элементы.Добавить(КомандаПрисоединить.Имя + СуффиксЛевых, Тип("КнопкаФормы"), Подменю_Левая); + ЭлементПрисоединить = Форма.Элементы.Добавить(КомандаПрисоединить.Имя, Тип("КнопкаФормы"), Подменю); ЭлементПрисоединить.ИмяКоманды = КомандаПрисоединить.Имя; ЭлементПрисоединить.ТолькоВоВсехДействиях = Ложь; КонецПроцедуры +//////////////////////////////////////////////////////////////////////////////// +// Обработчики условных вызовов из других подсистемы. + +// Определить объекты метаданных, в модулях менеджеров которых ограничивается возможность +// редактирования реквизитов при групповом изменении. +// +// Параметры: +// Объекты - Соответствие - в качестве ключа указать полное имя объекта метаданных, +// подключенного к подсистеме "Групповое изменение объектов". +// Дополнительно в значении могут быть перечислены имена экспортных функций: +// "РеквизитыНеРедактируемыеВГрупповойОбработке", +// "РеквизитыРедактируемыеВГрупповойОбработке". +// Каждое имя должно начинаться с новой строки. +// Если указана пустая строка, значит в модуле менеджера определены обе функции. +// +Процедура ПриОпределенииОбъектовСРедактируемымиРеквизитами(Объекты) Экспорт + Объекты.Вставить(Метаданные.Справочники.РассылкиОтчетов.ПолноеИмя(), "РеквизитыНеРедактируемыеВГрупповойОбработке"); +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// Обновление ИБ. + +// Предназначена для перевода паролей в безопасное хранилище. +// Используется в обработчике обновления ИБ. +Процедура ПеренестиПаролиВБезопасноеХранилище() Экспорт + + Запрос = Новый Запрос; + Запрос.Текст = + "ВЫБРАТЬ + | РассылкиОтчетов.Ссылка, РассылкиОтчетов.УдалитьFTPПароль, РассылкиОтчетов.УдалитьПарольАрхива + |ИЗ + | Справочник.РассылкиОтчетов КАК РассылкиОтчетов"; + + РезультатЗапроса = Запрос.Выполнить().Выбрать(); + Пока РезультатЗапроса.Следующий() Цикл + Если НЕ ПустаяСтрока(РезультатЗапроса.УдалитьFTPПароль) + ИЛИ НЕ ПустаяСтрока(РезультатЗапроса.УдалитьПарольАрхива) Тогда + НачатьТранзакцию(); + Попытка + УстановитьПривилегированныйРежим(Истина); + ОбщегоНазначения.ЗаписатьДанныеВБезопасноеХранилище(РезультатЗапроса.Ссылка, РезультатЗапроса.УдалитьFTPПароль, "FTPПароль"); + ОбщегоНазначения.ЗаписатьДанныеВБезопасноеХранилище(РезультатЗапроса.Ссылка, РезультатЗапроса.УдалитьПарольАрхива, "ПарольАрхива"); + УстановитьПривилегированныйРежим(Ложь); + Рассылка = РезультатЗапроса.Ссылка.ПолучитьОбъект(); + Рассылка.УдалитьFTPПароль = ""; + Рассылка.УдалитьПарольАрхива = ""; + Рассылка.Записать(); + ЗафиксироватьТранзакцию(); + Исключение + ОтменитьТранзакцию(); + КонецПопытки; + КонецЕсли; + КонецЦикла; + +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// Панели администрирования. + +// Возвращает Истина если у пользователя есть право на сохранение рассылок отчетов. +Функция ПравоДобавления() Экспорт + Возврат РассылкаОтчетовПовтИсп.ТекстОшибкиПроверкиПраваДобавления() = ""; +КонецФункции + #КонецОбласти #Область СлужебныеПроцедурыИФункции @@ -870,7 +970,7 @@ // Процедура ВыполнитьРассылкуПоРасписанию(Рассылка) Экспорт - ОбщегоНазначения.ПриНачалеВыполненияРегламентногоЗадания(); + ОбщегоНазначения.ПриНачалеВыполненияРегламентногоЗадания(Метаданные.РегламентныеЗадания.РассылкаОтчетов); // Проверки Если НЕ Рассылка.ВыполнятьПоРасписанию Тогда @@ -1071,10 +1171,12 @@ ТекущийАдрес = СписокПолучателей.Получить(СтрИтог.Получатель); Если ТекущийАдрес = Неопределено Тогда - СписокПолучателей.Вставить(СтрИтог.Получатель, СтрИтог.EMail); + ТекущийАдрес = ""; Иначе - СписокПолучателей.Вставить(СтрИтог.Получатель, ТекущийАдрес +"; "+ СтрИтог.EMail); + ТекущийАдрес = ТекущийАдрес +"; "; КонецЕсли; + ТекущийАдрес = ТекущийАдрес + СтрИтог.EMail; + СписокПолучателей.Вставить(СтрИтог.Получатель, ТекущийАдрес); КонецЦикла; Если СписокПолучателей.Количество() = 0 Тогда @@ -1143,31 +1245,44 @@ ПараметрыОтчета.Вставить("Ошибки", ""); ПараметрыОтчета.Вставить("Персонализирован", Ложь); ПараметрыОтчета.Вставить("ПерсональныеОтборы", Новый Соответствие); + ПараметрыОтчета.Вставить("ЭтоВариант", ТипЗнч(ПараметрыОтчета.Отчет) = Тип("СправочникСсылка.ВариантыОтчетов")); - // Определение структуры настроек. - МассивРеквизитов = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок( - "Имя, ПолноеИмя, КлючВарианта, ЭтоВариант, СКД, Метаданные, Объект, " + // общие параметры - "СхемаКД, КомпоновщикНастроекКД, АдресСхемыКД, НастройкиКД, " + // параметры СКД отчетов - "ДоступныеРеквизиты",); // Параметры произвольных отчетов. - Для Каждого ИмяРеквизита Из МассивРеквизитов Цикл - ИмяРеквизита = СокрЛП(ИмяРеквизита); - Если НЕ ПараметрыОтчета.Свойство(ИмяРеквизита) Тогда - ПараметрыОтчета.Вставить(ИмяРеквизита); - КонецЕсли; - КонецЦикла; + // Определение структуры настроек. Общие параметры. + ВариантыОтчетовКлиентСервер.ДополнитьСтруктуруКлючом(ПараметрыОтчета, "Имя"); + ВариантыОтчетовКлиентСервер.ДополнитьСтруктуруКлючом(ПараметрыОтчета, "ПолноеИмя"); + ВариантыОтчетовКлиентСервер.ДополнитьСтруктуруКлючом(ПараметрыОтчета, "КлючВарианта"); + ВариантыОтчетовКлиентСервер.ДополнитьСтруктуруКлючом(ПараметрыОтчета, "СКД"); + ВариантыОтчетовКлиентСервер.ДополнитьСтруктуруКлючом(ПараметрыОтчета, "Метаданные"); + ВариантыОтчетовКлиентСервер.ДополнитьСтруктуруКлючом(ПараметрыОтчета, "Объект"); + // Определение структуры настроек. Параметры СКД отчетов. + ВариантыОтчетовКлиентСервер.ДополнитьСтруктуруКлючом(ПараметрыОтчета, "СхемаКД"); + ВариантыОтчетовКлиентСервер.ДополнитьСтруктуруКлючом(ПараметрыОтчета, "КомпоновщикНастроекКД"); + ВариантыОтчетовКлиентСервер.ДополнитьСтруктуруКлючом(ПараметрыОтчета, "АдресСхемыКД"); + ВариантыОтчетовКлиентСервер.ДополнитьСтруктуруКлючом(ПараметрыОтчета, "НастройкиКД"); + // Определение структуры настроек. Параметры произвольных отчетов. + ВариантыОтчетовКлиентСервер.ДополнитьСтруктуруКлючом(ПараметрыОтчета, "ДоступныеРеквизиты"); // Базовые проверки и настройки отчета. - ПараметрыОтчета.ЭтоВариант = (ТипЗнч(ПараметрыОтчета.Отчет) = Тип("СправочникСсылка.ВариантыОтчетов")); Если ПараметрыОтчета.ЭтоВариант Тогда ЗначенияРеквизитов = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(ПараметрыОтчета.Отчет, "Отчет, КлючВарианта"); ЗаполнитьЗначенияСвойств(ПараметрыОтчета, ЗначенияРеквизитов, "КлючВарианта"); - РезультатПодключения = ВариантыОтчетов.ПодключитьОтчетОбъект(ЗначенияРеквизитов.Отчет); - Если Не РезультатПодключения.Подключен Тогда - ЗаписьЖурнала(ПараметрыЖурнала, УровеньЖурналаРегистрации.Ошибка, РезультатПодключения.Ошибки); - Возврат ПараметрыОтчета.Инициализирован; + // В существующих рассылках формируем только отчеты, готовые к рассылке. + Если РассылкаОтчетовПовтИсп.ИсключаемыеОтчеты().Найти(ЗначенияРеквизитов.Отчет) <> Неопределено Тогда + ПараметрыОтчета.Ошибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Отчет ""%1"" не поддерживает рассылку. + |Подробнее см. в процедуре ОпределитьИсключаемыеОтчеты модуля РассылкаОтчетовПереопределяемый.'"), + Строка(ЗначенияРеквизитов.Отчет)); + ЗаписьЖурнала(ПараметрыЖурнала, УровеньЖурналаРегистрации.Ошибка, ПараметрыОтчета.Ошибки); + Возврат Ложь; КонецЕсли; - ЗаполнитьЗначенияСвойств(ПараметрыОтчета, РезультатПодключения, "Имя, ПолноеИмя, Метаданные, Объект"); + + Подключение = ВариантыОтчетов.ПодключитьОтчетОбъект(ЗначенияРеквизитов.Отчет, Истина); + Если Не Подключение.Успех Тогда + ЗаписьЖурнала(ПараметрыЖурнала, УровеньЖурналаРегистрации.Ошибка, Подключение.ТекстОшибки); + Возврат Ложь; + КонецЕсли; + ЗаполнитьЗначенияСвойств(ПараметрыОтчета, Подключение, "Имя, ПолноеИмя, Метаданные, Объект"); Иначе @@ -1193,7 +1308,7 @@ ЗаголовокСообщенияОбОшибке, НСтр("ru = 'Подсистема ''Дополнительные отчеты и обработки'' недоступна.'"), "'"+ Строка(ПараметрыОтчета.Отчет) +"'"); КонецЕсли; - Возврат ПараметрыОтчета.Инициализирован; + Возврат Ложь; КонецЕсли; // Проверки на соответствия требованиям подсистемы. @@ -1201,7 +1316,7 @@ ЗаписьЖурнала(ПараметрыЖурнала, УровеньЖурналаРегистрации.Ошибка, ЗаголовокСообщенияОбОшибке, НСтр("ru = 'Неверно заполнены сведения о внешней обработке.'"), "'"+ Строка(ПараметрыОтчета.Отчет) +"'"); - Возврат ПараметрыОтчета.Инициализирован; + Возврат Ложь; КонецЕсли; КонецЕсли; @@ -1303,9 +1418,9 @@ ПараметрыОтчета.ПерсональныеОтборы.Вставить(ПользовательскиеНастройкиКД.ПолучитьИдентификаторПоОбъекту(Настройка)); КонецЕсли; КонецЦикла; - КонецЕсли; // ПерсонализацияВозможна + КонецЕсли; - Иначе // ПараметрыОтчета.СКД + Иначе // ПараметрыОтчета.СКД: // Доступные реквизиты отчета ПараметрыОтчета.ДоступныеРеквизиты = Новый Структура; @@ -1341,12 +1456,12 @@ КонецЕсли; - КонецЕсли; // ПараметрыОтчета.СКД + КонецЕсли; ПараметрыОтчета.Персонализирован = (ПараметрыОтчета.ПерсональныеОтборы.Количество() > 0); ПараметрыОтчета.Инициализирован = Истина; - Возврат ПараметрыОтчета.Инициализирован; + Возврат Истина; КонецФункции // Формирует отчет, проверяя что результат пустой. @@ -1364,7 +1479,7 @@ Функция СформироватьОтчет(ПараметрыЖурнала, ПараметрыОтчета, Получатель = Неопределено) Экспорт Результат = Новый Структура("ТабДок, СФормирован, Пустой", Новый ТабличныйДокумент, Ложь, Истина); - Если НЕ ПараметрыОтчета.Свойство("Инициализирован") Тогда + Если Не ПараметрыОтчета.Свойство("Инициализирован") Тогда ЗаписьЖурнала(ПараметрыЖурнала, , НСтр("ru = 'Отчет ''%1'' не инициализирован'"), , Строка(ПараметрыОтчета.Отчет)); @@ -1373,15 +1488,16 @@ ОтчетОбъект = ПараметрыОтчета.Объект; + ПараметрыФормирования = Новый Структура; + ПараметрыФормирования.Вставить("ВариантСсылка", ПараметрыОтчета.Отчет); + ПараметрыФормирования.Вставить("ОтчетОбъект", ОтчетОбъект); + Если ПараметрыОтчета.СКД Тогда - - КомпоновщикНастроекКД = ПараметрыОтчета.КомпоновщикНастроекКД; - СхемаКД = ПараметрыОтчета.СхемаКД; + ПараметрыФормирования.Вставить("НастройкиКД", Неопределено); // Заполнение персонализированных данных получателей. Если Получатель <> Неопределено И ПараметрыОтчета.Свойство("ПерсональныеОтборы") Тогда - ПользовательскиеНастройкиКД = КомпоновщикНастроекКД.ПользовательскиеНастройки; - БылиОшибки = Ложь; + ПользовательскиеНастройкиКД = ПараметрыОтчета.КомпоновщикНастроекКД.ПользовательскиеНастройки; Для Каждого КлючИЗначение Из ПараметрыОтчета.ПерсональныеОтборы Цикл Настройка = ПользовательскиеНастройкиКД.ПолучитьОбъектПоИдентификатору(КлючИЗначение.Ключ); Если ТипЗнч(Настройка) = Тип("ЭлементОтбораКомпоновкиДанных") Тогда @@ -1390,126 +1506,36 @@ Настройка.Значение = Получатель; КонецЕсли; КонецЦикла; - Если БылиОшибки Тогда - Возврат Результат; - КонецЕсли; + ПараметрыФормирования.Вставить("ПользовательскиеНастройкиКД", ПользовательскиеНастройкиКД); КонецЕсли; - ИсходныеСообщенияПользователю = ПолучитьСообщенияПользователю(Истина); - Если НЕ ОтчетОбъект.ПроверитьЗаполнение() Тогда - ТекстИсключения = ""; - СообщенияПользователю = ПолучитьСообщенияПользователю(Истина); - Для Каждого Сообщение Из СообщенияПользователю Цикл - ТекстИсключения = ТекстИсключения + Символы.ПС + Сообщение.Текст; - КонецЦикла; - ЗаписьЖурнала(ПараметрыЖурнала, УровеньЖурналаРегистрации.Ошибка, - НСтр("ru = 'Отчет ''%1'' не прошел проверку заполнения:'"), СокрЛ(ТекстИсключения), - Строка(ПараметрыОтчета.Отчет)); - Результат.ТабДок = Неопределено; - Возврат Результат; - КонецЕсли; - Для Каждого Сообщение Из ИсходныеСообщенияПользователю Цикл - Сообщение.Сообщить(); - КонецЦикла; - - // Формирование табличного документа. - ОтчетОбъект.СкомпоноватьРезультат(Результат.ТабДок); - Результат.Сформирован = Истина; - - // Пропуск проверки на то, что отчет пустой. - Если ПараметрыОтчета.ОтправлятьЕслиПустой Тогда - Результат.Пустой = Ложь; - Возврат Результат; - КонецЕсли; - - // Передача флажка "ОтчетПустой" из отчета. - Если ОтчетОбъект.КомпоновщикНастроек.Настройки.ДополнительныеСвойства.Свойство("ОтчетПустой") Тогда - Результат.Пустой = ОтчетОбъект.КомпоновщикНастроек.Настройки.ДополнительныеСвойства.ОтчетПустой; - Возврат Результат; - ИначеЕсли ОтчетОбъект.КомпоновщикНастроек.ПользовательскиеНастройки.ДополнительныеСвойства.Свойство("ОтчетПустой") Тогда - Результат.Пустой = ОтчетОбъект.КомпоновщикНастроек.ПользовательскиеНастройки.ДополнительныеСвойства.ОтчетПустой; - Возврат Результат; - КонецЕсли; - - // Объект для создания макета компоновки данных. - КомпоновщикМакетаКД = Новый КомпоновщикМакетаКомпоновкиДанных; - - // Выполняет компоновку макета. - МакетКД = КомпоновщикМакетаКД.Выполнить(СхемаКД, КомпоновщикНастроекКД.ПолучитьНастройки()); - - // Пропуск проверки на то, что отчет пустой. - Если ЕстьВнешнийНаборДанных(МакетКД.НаборыДанных) Тогда - Результат.Пустой = Ложь; - Возврат Результат; - КонецЕсли; - - // Объект, выполняющий компоновку данных. - ПроцессорКД = Новый ПроцессорКомпоновкиДанных; - - // Инициализировать объект. - ПроцессорКД.Инициализировать(МакетКД, , , Истина); - - // Объект для вывода результата компоновки в табличный документ. - ПроцессорВыводаРезультатаКД = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент; - - // Устанавливает табличный документ, в который нужно выводить результат. - ПроцессорВыводаРезультатаКД.УстановитьДокумент(Новый ТабличныйДокумент); - - // Последовательный вывод - ПроцессорВыводаРезультатаКД.НачатьВывод(); - - // Получает следующий элемент результата компоновки. - ЭлементРезультатаКД = ПроцессорКД.Следующий(); - Пока ЭлементРезультатаКД <> Неопределено Цикл - - // Вывести элемент результата компоновки отчета в документ. - ПроцессорВыводаРезультатаКД.ВывестиЭлемент(ЭлементРезультатаКД); - - // Определить не пустой результат. - Если Результат.Пустой Тогда - Для Каждого ЗначениеПараметраМакетаКД Из ЭлементРезультатаКД.ЗначенияПараметров Цикл - Попытка - ЗначениеЗаполнено = ЗначениеЗаполнено(ЗначениеПараметраМакетаКД.Значение); - Исключение - ЗначениеЗаполнено = Ложь; // Линия, Рамка, Цвет и другие объекты КД, которые могут фигурировать при выводе. - КонецПопытки; - Если ЗначениеЗаполнено Тогда - ПроцессорВыводаРезультатаКД.ЗакончитьВывод(); - Результат.Пустой = Ложь; - Возврат Результат; - КонецЕсли; - КонецЦикла; - КонецЕсли; - - // Получает следующий элемент результата компоновки. - ЭлементРезультатаКД = ПроцессорКД.Следующий(); - КонецЦикла; - - // Указание объекту о том, что вывод результата завершен. - ПроцессорВыводаРезультатаКД.ЗакончитьВывод(); - Иначе // Заполнение значения персонализированных отборов произвольных отчетов. Если Получатель <> Неопределено И ПараметрыОтчета.Свойство("ПерсональныеОтборы") Тогда - БылиОшибки = Ложь; Для Каждого КлючИЗначение Из ПараметрыОтчета.ПерсональныеОтборы Цикл ОтчетОбъект[КлючИЗначение.Ключ] = Получатель; КонецЦикла; - Если БылиОшибки Тогда - Возврат Результат; - КонецЕсли; КонецЕсли; - // Формирование произвольного отчета. - Результат.ТабДок = ОтчетОбъект.Сформировать(); - Результат.Сформирован = Истина; - - Если ТипЗнч(Результат.ТабДок) = Тип("ТабличныйДокумент") Тогда - Результат.Пустой = Ложь; - Иначе - Результат.ТабДок = Новый ТабличныйДокумент; - КонецЕсли; + КонецЕсли; + + Формирование = ВариантыОтчетов.СформироватьОтчет(ПараметрыФормирования, Истина, Не ПараметрыОтчета.ОтправлятьЕслиПустой); + + Если Не Формирование.Успех Тогда + ЗаписьЖурнала(ПараметрыЖурнала, УровеньЖурналаРегистрации.Ошибка, + НСтр("ru = 'Отчет ""%1"":'"), Формирование.ТекстОшибки, + Строка(ПараметрыОтчета.Отчет)); + Результат.ТабДок = Неопределено; + Возврат Результат; + КонецЕсли; + + Результат.Сформирован = Истина; + Результат.ТабДок = Формирование.ТабличныйДокумент; + Если ПараметрыОтчета.ОтправлятьЕслиПустой Тогда + Результат.Пустой = Ложь; + Иначе + Результат.Пустой = Формирование.Пустой; КонецЕсли; Возврат Результат; @@ -1577,11 +1603,19 @@ Иначе Прокси = Неопределено; КонецЕсли; + Если ПараметрыДоставки.Свойство("Пароль") Тогда + Пароль = ПараметрыДоставки.Пароль; + Иначе + УстановитьПривилегированныйРежим(Истина); + ДанныеИзХранилища = ОбщегоНазначения.ПрочитатьДанныеИзБезопасногоХранилища(ПараметрыДоставки.Владелец, "FTPПароль"); + УстановитьПривилегированныйРежим(Ложь); + Пароль = ?(ЗначениеЗаполнено(ДанныеИзХранилища), ДанныеИзХранилища, ""); + КонецЕсли; Соединение = Новый FTPСоединение( ПараметрыДоставки.Сервер, ПараметрыДоставки.Порт, ПараметрыДоставки.Логин, - ПараметрыДоставки.Пароль, + Пароль, Прокси, ПараметрыДоставки.ПассивноеСоединение, 15); @@ -1680,36 +1714,39 @@ КонецФункции // Создает запись в журнале регистрации и сообщениях пользователю; -// Поддерживает до 4х параметров в комментарии при помощи функции. -// СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку. -// Поддерживает передачу информации об ошибке, подробное представление -// ошибки добавляется в комментарий записи в журнал регистрации. -// +// Поддерживает передачу информации об ошибке. +// // Параметры: // ПараметрыЖурнала - Структура - Параметры записи в журнал регистрации. -// * ИмяСобытия - Строка - Имя события (или группы событий). -// * Метаданные - ОбъектМетаданных - Метаданные для привязки события журнала регистрации. -// * Данные - Произвольный - Данные для привязки события журнала регистрации. +// * ИмяСобытия - Строка - Имя события (или группы событий). +// * Метаданные - ОбъектМетаданных - Метаданные для привязки события журнала регистрации. +// * Данные - Произвольный - Данные для привязки события журнала регистрации. +// * МассивОшибок - Массив - Сообщения пользователю. // УровеньЖурнала - УровеньЖурналаРегистрации - Важность сообщения для администратора. -// КомментарийСПараметрами - Строка - Комментарий, который может содержать параметры %1, %2, %3 и %4. -// ИнформацияОбОшибке - ИнформацияОбОшибке, Строка - Информация об ошибке, которая будет размещена после комментария. -// Параметр1 - Строка - Для подстановки в КомментарийСПараметрами вместо %1. -// Параметр2 - Строка - Для подстановки в КомментарийСПараметрами вместо %2. -// Параметр3 - Строка - Для подстановки в КомментарийСПараметрами вместо %3. -// Параметр4 - Строка - Для подстановки в КомментарийСПараметрами вместо %4. +// Определяется автоматически на основании типа параметра "ОписаниеПроблемы": +// Когда тип = ИнформацияОбОшибке то Ошибка, +// когда тип = Строка то Предупреждение, +// в противном случае Информация. +// Текст - Строка - Комментарий, который может содержать параметры %1, %2, %3 и %4. +// ОписаниеПроблемы - ИнформацияОбОшибке, Строка - Описание возникшей проблемы, которое добавляется после комментария. +// Пользователю выводится краткое представление ошибки, а в журнал записывается подробное представление ошибки. +// Параметр1 - Строка - Для подстановки в Текст вместо %1. +// Параметр2 - Строка - Для подстановки в Текст вместо %2. +// Параметр3 - Строка - Для подстановки в Текст вместо %3. +// Параметр4 - Строка - Для подстановки в Текст вместо %4. // -Процедура ЗаписьЖурнала(ПараметрыЖурнала, УровеньЖурнала = Неопределено, КомментарийСПараметрами = "", - ИнформацияОбОшибке = Неопределено, - Параметр1 = Неопределено, - Параметр2 = Неопределено, - Параметр3 = Неопределено, - Параметр4 = Неопределено) Экспорт +Процедура ЗаписьЖурнала(ПараметрыЖурнала, Знач УровеньЖурнала = Неопределено, Знач Текст = "", + Знач ОписаниеПроблемы = Неопределено, + Знач Параметр1 = Неопределено, + Знач Параметр2 = Неопределено, + Знач Параметр3 = Неопределено, + Знач Параметр4 = Неопределено) Экспорт // Определение уровня журнала регистрации на основе типа переданного сообщения об ошибке. Если ТипЗнч(УровеньЖурнала) <> Тип("УровеньЖурналаРегистрации") Тогда - Если ТипЗнч(ИнформацияОбОшибке) = Тип("ИнформацияОбОшибке") Тогда + Если ТипЗнч(ОписаниеПроблемы) = Тип("ИнформацияОбОшибке") Тогда УровеньЖурнала = УровеньЖурналаРегистрации.Ошибка; - ИначеЕсли ТипЗнч(ИнформацияОбОшибке) = Тип("Строка") Тогда + ИначеЕсли ТипЗнч(ОписаниеПроблемы) = Тип("Строка") Тогда УровеньЖурнала = УровеньЖурналаРегистрации.Предупреждение; Иначе УровеньЖурнала = УровеньЖурналаРегистрации.Информация; @@ -1717,29 +1754,28 @@ КонецЕсли; ЗаписатьВЖурнал = ЗначениеЗаполнено(ПараметрыЖурнала.Данные); - СообщитьПользователю = ПараметрыЖурнала.Свойство("МассивОшибок") И ( - УровеньЖурнала = УровеньЖурналаРегистрации.Ошибка - ИЛИ УровеньЖурнала = УровеньЖурналаРегистрации.Предупреждение); // Комментарий для журнала регистрации и пользователя. Если Параметр1 <> Неопределено Тогда - КомментарийСПараметрами = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - КомментарийСПараметрами, Параметр1, Параметр2, Параметр3, Параметр4); + Текст = СтрЗаменить(Текст, "%1", Параметр1); // Переход на СтрШаблон невозможен. + Текст = СтрЗаменить(Текст, "%2", Параметр2); + Текст = СтрЗаменить(Текст, "%3", Параметр3); + Текст = СтрЗаменить(Текст, "%4", Параметр4); КонецЕсли; - ТекстДляЖурнала = КомментарийСПараметрами; - ТекстДляПользователя = КомментарийСПараметрами; - Если ТипЗнч(ИнформацияОбОшибке) = Тип("ИнформацияОбОшибке") Тогда - ТекстДляЖурнала = ТекстДляЖурнала + Символы.ПС + ПодробноеПредставлениеОшибки(ИнформацияОбОшибке); - ТекстДляПользователя = ТекстДляПользователя + Символы.ПС + ОтчетыКлиентСервер.КраткоеПредставлениеОшибкиФормированияОтчета(ИнформацияОбОшибке); - ИначеЕсли ТипЗнч(ИнформацияОбОшибке) = Тип("Строка") Тогда - ТекстДляЖурнала = ТекстДляЖурнала + Символы.ПС + ИнформацияОбОшибке; - ТекстДляПользователя = ТекстДляПользователя + Символы.ПС + ИнформацияОбОшибке; + ТекстДляЖурнала = Текст; + ТекстДляПользователя = Текст; + Если ТипЗнч(ОписаниеПроблемы) = Тип("ИнформацияОбОшибке") Тогда + ТекстДляЖурнала = ТекстДляЖурнала + Символы.ПС + ПодробноеПредставлениеОшибки(ОписаниеПроблемы); + ТекстДляПользователя = ТекстДляПользователя + Символы.ПС + СтандартныеПодсистемыКлиентСервер.ИсходнаяПричинаОшибки(ОписаниеПроблемы); + ИначеЕсли ТипЗнч(ОписаниеПроблемы) = Тип("Строка") Тогда + ТекстДляЖурнала = ТекстДляЖурнала + Символы.ПС + ОписаниеПроблемы; + ТекстДляПользователя = ТекстДляПользователя + Символы.ПС + ОписаниеПроблемы; КонецЕсли; ТекстДляЖурнала = СокрЛП(ТекстДляЖурнала); ТекстДляПользователя = СокрЛП(ТекстДляПользователя); - // Журнал регистрации + // Журнал регистрации. Если ЗаписатьВЖурнал Тогда УстановитьПривилегированныйРежим(Истина); ЗаписьЖурналаРегистрации( @@ -1751,8 +1787,11 @@ УстановитьПривилегированныйРежим(Ложь); КонецЕсли; - Если СообщитьПользователю Тогда - Если УровеньЖурнала = УровеньЖурналаРегистрации.Ошибка Тогда + // Сообщение пользователю. + УровеньОшибка = УровеньЖурнала = УровеньЖурналаРегистрации.Ошибка; + УровеньПредупреждение = Не УровеньОшибка И УровеньЖурнала = УровеньЖурналаРегистрации.Предупреждение; + Если УровеньОшибка Или УровеньПредупреждение Тогда + Если УровеньОшибка Тогда ПараметрыЖурнала.Вставить("БылиОшибки", Истина); Иначе ПараметрыЖурнала.Вставить("БылиПредупреждения", Истина); @@ -1803,26 +1842,6 @@ Возврат Разрешения; КонецФункции -//////////////////////////////////////////////////////////////////////////////// -// Обработчики условных вызовов из других подсистемы. - -// Определить объекты метаданных, в модулях менеджеров которых ограничивается возможность -// редактирования реквизитов при групповом изменении. -// -// Параметры: -// Объекты - Соответствие - в качестве ключа указать полное имя объекта метаданных, -// подключенного к подсистеме "Групповое изменение объектов". -// Дополнительно в значении могут быть перечислены имена экспортных функций: -// "РеквизитыНеРедактируемыеВГрупповойОбработке", -// "РеквизитыРедактируемыеВГрупповойОбработке". -// Каждое имя должно начинаться с новой строки. -// Если указана пустая строка, значит в модуле менеджера определены обе функции. -// -Процедура ПриОпределенииОбъектовСРедактируемымиРеквизитами(Объекты) Экспорт - Объекты.Вставить(Метаданные.Справочники.РассылкиОтчетов.ПолноеИмя(), "РеквизитыНеРедактируемыеВГрупповойОбработке"); -КонецПроцедуры - - //////////////////////////////////////////////////////////////////////////////// // Локальные служебные процедуры и функции. @@ -1922,7 +1941,7 @@ "'"+ ПараметрыФормата.Имя +"'"); Продолжить; КонецПопытки; - КонецЕсли; // СтандартнаяОбработка + КонецЕсли; // Проверки и регистрация результата. ВременныйФайл = Новый Файл(ПолноеИмяФайла); @@ -1994,7 +2013,7 @@ ПредставлениеОтчета = ПредставлениеОтчета + Символы.ПС + "<" + СтрокаФайл.Значение + ">"; КонецЕсли; - КонецЦикла; // Для Каждого Формат Из ПараметрыОтчета.Форматы Цикл + КонецЦикла; // Представление конкретного отчета. ПредставлениеОтчета = СтрЗаменить(ПредставлениеОтчета, "[ПредставлениеФорматов]", ПредставлениеФорматов); @@ -2137,11 +2156,10 @@ ПараметрыДоставки.Вставить("ТолькоУведомить", Ложь); КонецЕсли; - Если ПараметрыДоставки.ТолькоУведомить - И НЕ (ПараметрыДоставки.ИспользоватьПапку - ИЛИ ПараметрыДоставки.ИспользоватьСетевойКаталог - ИЛИ ПараметрыДоставки.ИспользоватьFTPРесурс) - Тогда + Если ПараметрыДоставки.ТолькоУведомить + И Не ПараметрыДоставки.ИспользоватьПапку + И Не ПараметрыДоставки.ИспользоватьСетевойКаталог + И Не ПараметрыДоставки.ИспользоватьFTPРесурс Тогда ЗаписьЖурнала(ПараметрыЖурнала, УровеньЖурналаРегистрации.Предупреждение, НСтр("ru = 'Использование уведомлений по электронной почте возможно только совместно с другими способами доставки'")); Возврат Ложь; @@ -2175,7 +2193,7 @@ // Приведение кода HTML документа к "правильным" ссылкам на вложенные картинки. Если ПараметрыДоставки.ПисьмоВФорматеHTML Тогда Для Каждого КлючИЗначение Из ПараметрыПисьма.ПредустановленныеВложения Цикл - Если ТипЗнч(КлючИЗначение.Значение) = Тип("Картинка") И Найти(КлючИЗначение.Ключ, ".") = 0 Тогда + Если ТипЗнч(КлючИЗначение.Значение) = Тип("Картинка") И СтрНайти(КлючИЗначение.Ключ, ".") = 0 Тогда ФорматЭтойКартинки = КлючИЗначение.Значение.Формат(); Если ФорматЭтойКартинки <> ФорматКартинки.НеизвестныйФормат Тогда НовыйКлюч = КлючИЗначение.Ключ +"."+ НРег(Строка(ФорматЭтойКартинки)); @@ -2184,10 +2202,10 @@ "<img src='"+ КлючИЗначение.Ключ +"' width='", "<img src='"+ НовыйКлюч +"' width='"); КонецЕсли; - КонецЕсли; // - КонецЦикла; // КлючИЗначение Из ПараметрыПисьма.ПредустановленныеВложения - КонецЕсли; // ПараметрыДоставки.ПисьмоВФорматеHTML - КонецЕсли; // ПараметрыПисьма.Свойство("Вложения") + КонецЕсли; + КонецЦикла; + КонецЕсли; + КонецЕсли; // Шаблон темы Если НЕ ПараметрыДоставки.Свойство("ШаблонТемы") ИЛИ НЕ ЗначениеЗаполнено(ПараметрыДоставки.ШаблонТемы) Тогда @@ -2206,8 +2224,8 @@ // Удаление лишних элементов стиля. Если ПараметрыДоставки.ПисьмоВФорматеHTML Тогда - СтильЛев = Найти(ПараметрыДоставки.ШаблонТекста, "<style"); - СтильПрав = Найти(ПараметрыДоставки.ШаблонТекста, "</style>"); + СтильЛев = СтрНайти(ПараметрыДоставки.ШаблонТекста, "<style"); + СтильПрав = СтрНайти(ПараметрыДоставки.ШаблонТекста, "</style>"); Если СтильЛев > 0 И СтильПрав > СтильЛев Тогда ПараметрыДоставки.ШаблонТекста = Лев(ПараметрыДоставки.ШаблонТекста, СтильЛев - 1) + Сред(ПараметрыДоставки.ШаблонТекста, СтильПрав + 8); КонецЕсли; @@ -2236,20 +2254,20 @@ // Признаки необходимости заполнения шаблонов (кэш проверок). ПараметрыДоставки.Вставить( "ЗаполнитьПолучателяВШаблонеТемы", - Найти(ПараметрыДоставки.ШаблонТемы, "[Получатель]") <> 0); + СтрНайти(ПараметрыДоставки.ШаблонТемы, "[Получатель]") <> 0); ПараметрыДоставки.Вставить( "ЗаполнитьПолучателяВШаблонеСообщения", - Найти(ПараметрыДоставки.ШаблонТекста, "[Получатель]") <> 0); + СтрНайти(ПараметрыДоставки.ШаблонТекста, "[Получатель]") <> 0); ПараметрыДоставки.Вставить( "ЗаполнитьСформированныеОтчетыВШаблонеСообщения", - Найти(ПараметрыДоставки.ШаблонТекста, "[СформированныеОтчеты]") <> 0); + СтрНайти(ПараметрыДоставки.ШаблонТекста, "[СформированныеОтчеты]") <> 0); ПараметрыДоставки.Вставить( "ЗаполнитьСпособДоставкиВШаблонеСообщения", - Найти(ПараметрыДоставки.ШаблонТекста, "[СпособДоставки]") <> 0); + СтрНайти(ПараметрыДоставки.ШаблонТекста, "[СпособДоставки]") <> 0); - // + // Представление отчетов. ПараметрыДоставки.Вставить("ПредставлениеОтчетовПолучателя", ""); - КонецЕсли; // ПараметрыДоставки.ИспользоватьЭлектроннуюПочту + КонецЕсли; // Каталог временных файлов. RP = report publishing, RD = report distribution. ПараметрыДоставки.Вставить("КаталогВременныхФайлов", СтандартныеПодсистемыСервер.СоздатьКаталогВременныхФайлов("RP")); @@ -2536,6 +2554,10 @@ Результат.Расширение = ".pdf"; Результат.ТипФайла = ТипФайлаТабличногоДокумента.PDF; + ИначеЕсли Формат = Перечисления.ФорматыСохраненияОтчетов.HTML Тогда + Результат.Расширение = ".html"; + Результат.ТипФайла = ТипФайлаТабличногоДокумента.HTML; + ИначеЕсли Формат = Перечисления.ФорматыСохраненияОтчетов.HTML4 Тогда Результат.Расширение = ".html"; Результат.ТипФайла = ТипФайлаТабличногоДокумента.HTML4; @@ -2553,7 +2575,7 @@ Результат.ТипФайла = ТипФайлаТабличногоДокумента.ANSITXT; Иначе - // СРыба" для всех форматов, добавленных при внедрении, обработчик сохранения + // "Рыба" для всех форматов, добавленных при внедрении, обработчик сохранения // которых должен находиться в переопределяемом модуле. Результат.Расширение = Неопределено; Результат.ТипФайла = Неопределено; @@ -2664,8 +2686,8 @@ + " " + НСтр("ru = 'отправлен по почте (см. вложения)'"); - КонецЕсли; // ПараметрыДоставки.ТолькоУведомить - + КонецЕсли; + Если ПараметрыДоставки.ВыполненаВПапку Тогда ТекстПредставления = ТекстПредставления @@ -2691,8 +2713,8 @@ Суффикс = Суффикс + ":" + Символы.ПС + "<" + Ссылка + ">"; КонецЕсли; - КонецЕсли; // ПараметрыДоставки.ВыполненаВПапку - + КонецЕсли; + Если ПараметрыДоставки.ВыполненаВСетевойКаталог Тогда ТекстПредставления = ТекстПредставления @@ -2715,8 +2737,8 @@ + ">"; КонецЕсли; - КонецЕсли; // ПараметрыДоставки.ВыполненаВСетевойКаталог - + КонецЕсли; + Если ПараметрыДоставки.ВыполненаНаFTP Тогда ТекстПредставления = ТекстПредставления @@ -2745,8 +2767,8 @@ + ">"; КонецЕсли; - КонецЕсли; // ПараметрыДоставки.ВыполненаНаFTP - + КонецЕсли; + ТекстПредставления = ТекстПредставления + ?(Суффикс = "", ".", Суффикс); Возврат ТекстПредставления; @@ -2849,7 +2871,7 @@ + Формат(Индекс, "ЧГ=") + ". " + СтрокаОтчет.Настройки.ПредставлениеВПисьме; - КонецЦикла; + КонецЦикла; Если СтрокаПолучатель <> Неопределено И СтрокаПолучатель <> ПараметрыДоставки.СтрокаОбщихОтчетов Тогда Для Каждого СтрокаОтчет Из СтрокаПолучатель.Строки Цикл @@ -2859,7 +2881,7 @@ + Формат(Индекс, "ЧГ=") + ". " + СтрокаОтчет.Настройки.ПредставлениеВПисьме; - КонецЦикла; + КонецЦикла; КонецЕсли; КонецЕсли; @@ -2900,4 +2922,26 @@ КонецФункции +// Формирует количество проблем с рассылками отчетов. +Функция КоличествоПроблемСРассылкамиОтчетов() + Запрос = Новый Запрос; + Запрос.Текст = + "ВЫБРАТЬ РАЗРЕШЕННЫЕ + | КОЛИЧЕСТВО(РассылкиОтчетов.Ссылка) КАК Количество + |ИЗ + | РегистрСведений.СостоянияРассылокОтчетов КАК СостоянияРассылокОтчетов + | ЛЕВОЕ СОЕДИНЕНИЕ Справочник.РассылкиОтчетов КАК РассылкиОтчетов + | ПО СостоянияРассылокОтчетов.Рассылка = РассылкиОтчетов.Ссылка + |ГДЕ + | РассылкиОтчетов.Подготовлена = ИСТИНА + | И СостоянияРассылокОтчетов.СОшибками = ИСТИНА + | И РассылкиОтчетов.Автор = &Автор"; + Если Пользователи.ЭтоПолноправныйПользователь() Тогда + Запрос.Текст = СтрЗаменить(Запрос.Текст, "И РассылкиОтчетов.Автор = &Автор", ""); + Иначе + Запрос.УстановитьПараметр("Автор", Пользователи.ТекущийПользователь()); + КонецЕсли; + Возврат Запрос.Выполнить().Выгрузить()[0].Количество; +КонецФункции + #КонецОбласти diff --git a/SSL/src/CommonModules/РассылкаОтчетовВызовСервера/Module.bsl b/SSL/src/CommonModules/РассылкаОтчетовВызовСервера/Module.bsl index 5e85acf6e..1625eaeb3 100644 --- a/SSL/src/CommonModules/РассылкаОтчетовВызовСервера/Module.bsl +++ b/SSL/src/CommonModules/РассылкаОтчетовВызовСервера/Module.bsl @@ -20,12 +20,9 @@ РезультатВыполнения.БылиКритичныеОшибки = РезультатВыполнения.Получатели.Количество() = 0; Если РезультатВыполнения.БылиКритичныеОшибки Тогда + Текст = НСтр("ru = 'Не удалось сформировать список получателей'"); ТекстОшибок = РассылкаОтчетовКлиентСервер.СтрокаСообщенийПользователю(ПараметрыЖурнала.МассивОшибок, Ложь); - - СтандартныеПодсистемыКлиентСервер.НовыйРезультатВыполнения(РезультатВыполнения); - РезультатВыполнения.ВыводПредупреждения.Использование = Истина; - РезультатВыполнения.ВыводПредупреждения.Текст = НСтр("ru = 'Не удалось сформировать список получателей'"); - РезультатВыполнения.ВыводПредупреждения.ТекстОшибок = ТекстОшибок; + СтандартныеПодсистемыКлиентСервер.ВывестиПредупреждение(РезультатВыполнения, Текст, ТекстОшибок); КонецЕсли; Возврат РезультатВыполнения; diff --git a/SSL/src/CommonModules/РассылкаОтчетовКлиентСервер/Module.bsl b/SSL/src/CommonModules/РассылкаОтчетовКлиентСервер/Module.bsl index 416ac94f9..e0ac04a0a 100644 --- a/SSL/src/CommonModules/РассылкаОтчетовКлиентСервер/Module.bsl +++ b/SSL/src/CommonModules/РассылкаОтчетовКлиентСервер/Module.bsl @@ -22,29 +22,36 @@ // * Каталог - Строка - Путь к каталогу на сервере. Первый символ всегда "/". // Функция РазобратьFTPАдрес(ПолныйFTPАдрес) Экспорт - Результат = Новый Структура("Логин, Пароль, Сервер, Порт, Каталог", "", "", "", 21, "/"); + + Результат = Новый Структура; + Результат.Вставить("Логин", ""); + Результат.Вставить("Пароль", ""); + Результат.Вставить("Сервер", ""); + Результат.Вставить("Порт", 21); + Результат.Вставить("Каталог", "/"); + FTPАдрес = ПолныйFTPАдрес; // Вырезать 'ftp://' - Поз = Найти(FTPАдрес, "://"); + Поз = СтрНайти(FTPАдрес, "://"); Если Поз > 0 Тогда FTPАдрес = Сред(FTPАдрес, Поз + 3); КонецЕсли; // Каталог - Поз = Найти(FTPАдрес, "/"); + Поз = СтрНайти(FTPАдрес, "/"); Если Поз > 0 Тогда Результат.Каталог = Сред(FTPАдрес, Поз); FTPАдрес = Лев(FTPАдрес, Поз - 1); КонецЕсли; // Логин и пароль - Поз = Найти(FTPАдрес, "@"); + Поз = СтрНайти(FTPАдрес, "@"); Если Поз > 0 Тогда ЛогинПароль = Лев(FTPАдрес, Поз - 1); FTPАдрес = Сред(FTPАдрес, Поз + 1); - Поз = Найти(ЛогинПароль, ":"); + Поз = СтрНайти(ЛогинПароль, ":"); Если Поз > 0 Тогда Результат.Логин = Лев(ЛогинПароль, Поз - 1); Результат.Пароль = Сред(ЛогинПароль, Поз + 1); @@ -54,7 +61,7 @@ КонецЕсли; // Сервер и порт - Поз = Найти(FTPАдрес, ":"); + Поз = СтрНайти(FTPАдрес, ":"); Если Поз > 0 Тогда Результат.Сервер = Лев(FTPАдрес, Поз - 1); Результат.Порт = СтрокуВЧисло(Сред(FTPАдрес, Поз + 1), Результат.Порт); @@ -63,6 +70,7 @@ КонецЕсли; Возврат Результат; + КонецФункции // Заполняет шаблон из структуры параметров, поддерживает форматирование, может оставлять обрамление шаблона. @@ -98,9 +106,9 @@ ?(ВырезатьОбрамление, "", Левый) + КлючИЗначение.Значение + ?(ВырезатьОбрамление, "", Правый)); ДлинаФорматЛевый = СтрДлина(Левый + КлючИЗначение.Ключ + ФорматЛевый); // Замена [ключ(формат)] на [значение] в формате. - Поз1 = Найти(Результат, Левый + КлючИЗначение.Ключ + ФорматЛевый); + Поз1 = СтрНайти(Результат, Левый + КлючИЗначение.Ключ + ФорматЛевый); Пока Поз1 > 0 Цикл - Поз2 = Найти(Результат, ФорматПравый + Правый); + Поз2 = СтрНайти(Результат, ФорматПравый + Правый); Если Поз2 = 0 Тогда Прервать; КонецЕсли; @@ -114,7 +122,7 @@ Результат, Левый + КлючИЗначение.Ключ + ФорматЛевый + ФорматнаяСтрока + ФорматПравый + Правый, НаЧтоЗаменить); - Поз1 = Найти(Результат, Левый + КлючИЗначение.Ключ + ФорматЛевый); + Поз1 = СтрНайти(Результат, Левый + КлючИЗначение.Ключ + ФорматЛевый); КонецЦикла; КонецЦикла; Возврат Результат; diff --git a/SSL/src/CommonModules/РассылкаОтчетовПереопределяемый/Module.bsl b/SSL/src/CommonModules/РассылкаОтчетовПереопределяемый/Module.bsl index 52c9e8592..13b07162f 100644 --- a/SSL/src/CommonModules/РассылкаОтчетовПереопределяемый/Module.bsl +++ b/SSL/src/CommonModules/РассылкаОтчетовПереопределяемый/Module.bsl @@ -101,6 +101,19 @@ // Процедура ПередФормированиемСпискаПолучателейРассылки(ПараметрыПолучателей, Запрос, СтандартнаяОбработка, Результат) Экспорт +КонецПроцедуры + +// Позволяет исключить отчеты, которые не готовы к интеграции с рассылкой. +// Указанные отчеты используются в качестве исключающего фильтра при выборе отчетов. +// +// Параметры: +// ИсключаемыеОтчеты - Массив из ОбъектМетаданных: Отчет - Отчеты, подключенные к хранилищу "ВариантыОтчетов", +// но не поддерживающие интеграцию с рассылками. +// +Процедура ОпределитьИсключаемыеОтчеты(ИсключаемыеОтчеты) Экспорт + + + КонецПроцедуры #КонецОбласти diff --git a/SSL/src/CommonModules/РассылкаОтчетовПовтИсп/Module.bsl b/SSL/src/CommonModules/РассылкаОтчетовПовтИсп/Module.bsl index 361a446e7..c551501cc 100644 --- a/SSL/src/CommonModules/РассылкаОтчетовПовтИсп/Module.bsl +++ b/SSL/src/CommonModules/РассылкаОтчетовПовтИсп/Module.bsl @@ -115,4 +115,30 @@ Возврат Результат; КонецФункции +// Исключаемые отчеты используются в качестве исключающего фильтра при выборе отчетов. +Функция ИсключаемыеОтчеты() Экспорт + МассивМетаданных = Новый Массив; + РассылкаОтчетовПереопределяемый.ОпределитьИсключаемыеОтчеты(МассивМетаданных); + + Результат = Новый Массив; + Для Каждого ОтчетМетаданные Из МассивМетаданных Цикл + Результат.Добавить(ОбщегоНазначения.ИдентификаторОбъектаМетаданных(ОтчетМетаданные)); + КонецЦикла; + Возврат Результат; +КонецФункции + +// Проверяет права и формирует текст ошибки. +Функция ТекстОшибкиПроверкиПраваДобавления() Экспорт + Если Не ПравоДоступа("Вывод", Метаданные) Тогда + Возврат НСтр("ru = 'Нет прав на вывод информации.'"); + КонецЕсли; + Если Не ПравоДоступа("Изменение", Метаданные.Справочники.РассылкиОтчетов) Тогда + Возврат НСтр("ru = 'Нет прав на рассылки отчетов.'"); + КонецЕсли; + Если Не РаботаСПочтовымиСообщениями.ДоступнаОтправкаПисем() Тогда + Возврат НСтр("ru = 'Нет прав на отправку писем или нет доступных учетных записей.'"); + КонецЕсли; + Возврат ""; +КонецФункции + #КонецОбласти diff --git a/SSL/src/CommonModules/РегламентированныеДанныеКлиентСервер/Module.bsl b/SSL/src/CommonModules/РегламентированныеДанныеКлиентСервер/Module.bsl index ffd417192..4710e9c89 100644 --- a/SSL/src/CommonModules/РегламентированныеДанныеКлиентСервер/Module.bsl +++ b/SSL/src/CommonModules/РегламентированныеДанныеКлиентСервер/Module.bsl @@ -177,8 +177,8 @@ Если ДлинаКПП <> 9 Тогда СоответствуетТребованиям = Ложь; - ТекстСообщения = ТекстСообщения + ?(ЗначениеЗаполнено(ТекстСообщения), Символы.ПС, "") + - НСтр("ru = 'КПП должен состоять из 9 цифр.'"); + ТекстСообщения = ТекстСообщения + ?(ЗначениеЗаполнено(ТекстСообщения), Символы.ПС, "") + + НСтр("ru = 'КПП должен состоять из 9 цифр.'"); КонецЕсли; Возврат СоответствуетТребованиям; @@ -354,7 +354,7 @@ // Параметры: // НомерСчета - строка - номер банковского счета. // БИК - строка, БИК банка в котором открыт счет. -// ЭтоБанк - Булево, Истина - Банк, Ложь - РКЦ. +// ЭтоБанк - Булево, Истина - Банк, Ложь - РКЦ (у РКЦ корреспондентский счет не заполняется). // // Возвращаемое значение: // Булево @@ -371,7 +371,7 @@ Разряд6 = Сред(НомерСчетаСтрока, 6, 1); Если НЕ СтроковыеФункцииКлиентСервер.ТолькоЦифрыВСтроке(Разряд6) Тогда - АлфавитныеЗначения6гоРазряда = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок("А,В,С,Е,Н,К,М,Р,Т,Х"); + АлфавитныеЗначения6гоРазряда = СтрРазделить("А,В,С,Е,Н,К,М,Р,Т,Х", ",", Ложь); Цифра = АлфавитныеЗначения6гоРазряда.Найти(Разряд6); Если Цифра = Неопределено Тогда Возврат Ложь; diff --git a/SSL/src/CommonModules/РегламентныеЗаданияПереопределяемый/Module.bsl b/SSL/src/CommonModules/РегламентныеЗаданияПереопределяемый/Module.bsl new file mode 100644 index 000000000..7a77f90ed --- /dev/null +++ b/SSL/src/CommonModules/РегламентныеЗаданияПереопределяемый/Module.bsl @@ -0,0 +1,46 @@ +//////////////////////////////////////////////////////////////////////////////// +// Подсистема "Регламентные задания". +// +//////////////////////////////////////////////////////////////////////////////// + +#Область ПрограммныйИнтерфейс + +// Определяет зависимость между регламентными заданиями и функциональными опциями. +// +// Параметры: +// Зависимости - ТаблицаЗначений - таблица значений с колонками: +// * РегламентноеЗадание - ОбъектМетаданных:РегламентноеЗадание - регламентное задание. +// * ФункциональнаяОпция - ОбъектМетаданных:ФункциональнаяОпция - функциональная опция, +// от которой зависит регламентное задание. +// * ЗависимостьПоИ - Булево - если регламентное задание зависит более, чем +// от одной функциональной опции и его необходимо включать только тогда, +// когда все функциональные опции включены, то следует указывать Истина +// для каждой зависимости. +// По умолчанию Ложь - если хотя бы одна функциональная опция включена, +// то регламентное задание тоже включено. +// * ВключатьПриВключенииФункциональнойОпции - Булево, Неопределено - если Ложь, то при +// включении функциональной опции регламентное задание не будет включаться. Значение +// Неопределено соответствует значению Истина. +// По умолчанию - неопределено. +// * ДоступноВПодчиненномУзлеРИБ - Булево, Неопределено - Истина или Неопределено, если регламентное +// задание доступно в РИБ. +// По умолчанию - неопределено. +// * ДоступноВАвтономномРабочемМесте - Булево, Неопределено - Истина или Неопределено, если регламентное +// задание доступно в автономном рабочем месте. +// По умолчанию - неопределено. +// * ДоступноВМоделиСервиса - Булево, Неопределено - Истина или Неопределено, если регламентное +// задание доступно в модели сервиса. +// По умолчанию - неопределено. +// +// Например: +// Зависимость = Зависимости.Добавить(); +// Зависимость.РегламентноеЗадание = Метаданные.РегламентныеЗадания.ОбновлениеСтатусовДоставкиSMS; +// Зависимость.ФункциональнаяОпция = Метаданные.ФункциональныеОпции.ИспользоватьПочтовыйКлиент; +// Зависимость.ДоступноВМоделиСервиса = Ложь; +// +Процедура ПриОпределенииЗависимостейРегламентныхЗаданий(Зависимости) Экспорт + + +КонецПроцедуры + +#КонецОбласти \ No newline at end of file diff --git a/SSL/src/CommonModules/РегламентныеЗаданияПереопределяемый/РегламентныеЗаданияПереопределяемый.mdo b/SSL/src/CommonModules/РегламентныеЗаданияПереопределяемый/РегламентныеЗаданияПереопределяемый.mdo new file mode 100644 index 000000000..94e7da0fb --- /dev/null +++ b/SSL/src/CommonModules/РегламентныеЗаданияПереопределяемый/РегламентныеЗаданияПереопределяемый.mdo @@ -0,0 +1,11 @@ +<?xml version="1.0" encoding="UTF-8"?> +<mdclass:CommonModule xmlns:mdclass="http://g5.1c.ru/v8/dt/metadata/mdclass" uuid="e871dea7-1953-4511-90b0-e0957afac4c0"> + <name>РегламентныеЗаданияПереопределяемый</name> + <synonym> + <key>ru</key> + <value>Регламентные задания переопределяемый</value> + </synonym> + <server>true</server> + <externalConnection>true</externalConnection> + <clientOrdinaryApplication>true</clientOrdinaryApplication> +</mdclass:CommonModule> diff --git a/SSL/src/CommonModules/РегламентныеЗаданияСервер/Module.bsl b/SSL/src/CommonModules/РегламентныеЗаданияСервер/Module.bsl index fa26ed97e..87b1f7262 100644 --- a/SSL/src/CommonModules/РегламентныеЗаданияСервер/Module.bsl +++ b/SSL/src/CommonModules/РегламентныеЗаданияСервер/Module.bsl @@ -5,6 +5,614 @@ #Область ПрограммныйИнтерфейс +// Получает задания очереди по заданному отбору. +// Возможно получение неконсистентных данных. +// Параметры: +// Отбор - Структура, Массив - значения по которым, требуется отбирать задания. +// Возможные ключи структуры для ИБ в обычном режиме: +// УникальныйИдентификатор +// Ключ +// Метаданные +// Предопределенное +// Использование +// Наименование +// Возможные ключи структуры для ИБ в режиме сервиса: +// ОбластьДанных +// ИмяМетода +// Идентификатор +// СостояниеЗадания +// Ключ +// Шаблон +// Использование +// Так же может быть передан массив структур - описаний отбора со следующими ключами: +// ВидСравнения - ВидСравнения - допустимыми значениями являются только. +// ВидСравнения.Равно +// ВидСравнения.НеРавно +// ВидСравнения.ВСписке +// ВидСравнения.НеВСписке +// Значение - Значение отбора, для видов сравнения ВСписке и НеВСписке - массив значений. +// Для видов сравнения Равно / НеРавно - сами значения. +// Все условия отбора объединяются по И. +// Возвращаемое значение: +// ТаблицаЗначений - таблица найденных заданий. Колонки соответствуют параметрам заданий. +// +Функция НайтиЗадания(Знач Отбор) Экспорт + + РегламентныеЗаданияСлужебный.ВызватьИсключениеЕслиНетПраваАдминистрирования(); + УстановитьПривилегированныйРежим(Истина); + + Если ОбщегоНазначенияПовтИсп.РазделениеВключено() Тогда + + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаВМоделиСервиса.ОчередьЗаданий") Тогда + + ОбластьДанных = ОбщегоНазначения.ЗначениеРазделителяСеанса(); + + Если Отбор.Свойство("УникальныйИдентификатор") И НЕ Отбор.Свойство("Идентификатор") Тогда + Отбор.Вставить("Идентификатор", Отбор.УникальныйИдентификатор); + КонецЕсли; + + Отбор.Вставить("ОбластьДанных", ОбластьДанных); + + МодульОчередьЗаданий = ОбщегоНазначения.ОбщийМодуль("ОчередьЗаданий"); + + Если Отбор.Свойство("Метаданные") Тогда + Если ТипЗнч(Отбор.Метаданные) = Тип("ОбъектМетаданных") Тогда + Если Отбор.Метаданные.Предопределенное Тогда + Отбор.Вставить("Шаблон", МодульОчередьЗаданий.ШаблонПоИмени(Отбор.Метаданные.Имя)); + Иначе + Отбор.Вставить("ИмяМетода", Отбор.Метаданные.ИмяМетода); + КонецЕсли; + Иначе + МетаданныеРегламентноеЗадание = Метаданные.РегламентныеЗадания.Найти(Отбор.Метаданные); + Если МетаданныеРегламентноеЗадание <> Неопределено Тогда + Если МетаданныеРегламентноеЗадание.Предопределенное Тогда + Отбор.Вставить("Шаблон", МодульОчередьЗаданий.ШаблонПоИмени(МетаданныеРегламентноеЗадание.Имя)); + Иначе + Отбор.Вставить("ИмяМетода", МетаданныеРегламентноеЗадание.ИмяМетода); + КонецЕсли; + КонецЕсли; + КонецЕсли; + ИначеЕсли Отбор.Свойство("Идентификатор") + И (ТипЗнч(Отбор.Идентификатор) = Тип("УникальныйИдентификатор") + ИЛИ ТипЗнч(Отбор.Идентификатор) = Тип("Строка")) Тогда + + Если ТипЗнч(Отбор.Идентификатор) = Тип("Строка") Тогда + Отбор.Идентификатор = Новый УникальныйИдентификатор(Отбор.Идентификатор); + КонецЕсли; + + МодульОчередьЗаданийСлужебный = ОбщегоНазначения.ОбщийМодуль("ОчередьЗаданийСлужебный"); + СправочникДляЗадания = МодульОчередьЗаданийСлужебный.СправочникОчередьЗаданий(); + + Если ОбщегоНазначенияПовтИсп.ЭтоРазделеннаяКонфигурация() Тогда + МодульОчередьЗаданийСлужебныйРазделениеДанных = ОбщегоНазначения.ОбщийМодуль("ОчередьЗаданийСлужебныйРазделениеДанных"); + ПереопределенныйСправочник = МодульОчередьЗаданийСлужебныйРазделениеДанных.ПриВыбореСправочникаДляЗадания(Отбор); + Если ПереопределенныйСправочник <> Неопределено Тогда + СправочникДляЗадания = ПереопределенныйСправочник; + КонецЕсли; + КонецЕсли; + Отбор.Вставить("Идентификатор", СправочникДляЗадания.ПолучитьСсылку(Отбор.Идентификатор)); + КонецЕсли; + + Отбор.Удалить("Метаданные"); + СписокЗаданий = МодульОчередьЗаданий.ПолучитьЗадания(Отбор); + + Возврат СписокЗаданий; + + КонецЕсли; + Иначе + + СписокЗаданий = РегламентныеЗадания.ПолучитьРегламентныеЗадания(Отбор); + + Возврат СписокЗаданий; + + КонецЕсли; + +КонецФункции + +// Возвращает РегламентноеЗадание из информационной базы. +// +// Параметры: +// Идентификатор - ОбъектМетаданных - объект метаданных регламентного задания для поиска +// предопределенного регламентного задания. +// - УникальныйИдентификатор - идентификатор регламентного задания. +// - Строка - строка уникального идентификатора регламентного задания +// или имя метаданных предопределенного регламентного задания. +// - РегламентноеЗадание - регламентное задание из которого нужно получить +// уникальный идентификатор для получения свежей копии регламентного задания. +// +// Возвращаемое значение: +// РегламентноеЗадание - прочитано из базы данных. +// +Функция Задание(Знач Идентификатор) Экспорт + + РегламентныеЗаданияСлужебный.ВызватьИсключениеЕслиНетПраваАдминистрирования(); + УстановитьПривилегированныйРежим(Истина); + + Если ТипЗнч(Идентификатор) = Тип("РегламентноеЗадание") Тогда + Идентификатор = Идентификатор.УникальныйИдентификатор; + КонецЕсли; + + Если ТипЗнч(Идентификатор) = Тип("Строка") Тогда + Идентификатор = Новый УникальныйИдентификатор(Идентификатор); + КонецЕсли; + + Если ОбщегоНазначенияПовтИсп.РазделениеВключено() Тогда + + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаВМоделиСервиса.ОчередьЗаданий") Тогда + ОбластьДанных = ОбщегоНазначения.ЗначениеРазделителяСеанса(); + + ПараметрыЗадания = Новый Структура; + ПараметрыЗадания.Вставить("ОбластьДанных", ОбластьДанных); + + МодульОчередьЗаданий = ОбщегоНазначения.ОбщийМодуль("ОчередьЗаданий"); + + Если ТипЗнч(Идентификатор) = Тип("ОбъектМетаданных") Тогда + Если Идентификатор.Предопределенное Тогда + ПараметрыЗадания.Вставить("Шаблон", МодульОчередьЗаданий.ШаблонПоИмени(Идентификатор.Имя)); + Иначе + ПараметрыЗадания.Вставить("ИмяМетода", Идентификатор.ИмяМетода); + КонецЕсли; + ИначеЕсли ТипЗнч(Идентификатор) = Тип("УникальныйИдентификатор") Тогда + МодульОчередьЗаданийСлужебный = ОбщегоНазначения.ОбщийМодуль("ОчередьЗаданийСлужебный"); + СправочникДляЗадания = МодульОчередьЗаданийСлужебный.СправочникОчередьЗаданий(); + + Если ОбщегоНазначенияПовтИсп.ЭтоРазделеннаяКонфигурация() Тогда + МодульОчередьЗаданийСлужебныйРазделениеДанных = ОбщегоНазначения.ОбщийМодуль("ОчередьЗаданийСлужебныйРазделениеДанных"); + ПереопределенныйСправочник = МодульОчередьЗаданийСлужебныйРазделениеДанных.ПриВыбореСправочникаДляЗадания(ПараметрыЗадания); + Если ПереопределенныйСправочник <> Неопределено Тогда + СправочникДляЗадания = ПереопределенныйСправочник; + КонецЕсли; + КонецЕсли; + ПараметрыЗадания.Вставить("Идентификатор", СправочникДляЗадания.ПолучитьСсылку(Идентификатор)); + + ИначеЕсли ТипЗнч(Идентификатор) = Тип("СтрокаТаблицыЗначений") Тогда + Возврат Идентификатор; + Иначе + ПараметрыЗадания.Вставить("Идентификатор", Идентификатор); + КонецЕсли; + + СписокЗаданий = МодульОчередьЗаданий.ПолучитьЗадания(ПараметрыЗадания); + Для Каждого Задание Из СписокЗаданий Цикл + РегламентноеЗадание = Задание; + Прервать; + КонецЦикла; + КонецЕсли; + Иначе + + Если ТипЗнч(Идентификатор) = Тип("ОбъектМетаданных") Тогда + Если Идентификатор.Предопределенное Тогда + РегламентноеЗадание = РегламентныеЗадания.НайтиПредопределенное(Идентификатор); + Иначе + СписокЗаданий = РегламентныеЗадания.ПолучитьРегламентныеЗадания(Новый Структура("Метаданные", Идентификатор)); + Если СписокЗаданий.Количество() > 0 Тогда + РегламентноеЗадание = СписокЗаданий[0]; + КонецЕсли; + КонецЕсли; + Иначе + РегламентноеЗадание = РегламентныеЗадания.НайтиПоУникальномуИдентификатору(Идентификатор); + КонецЕсли; + КонецЕсли; + + Возврат РегламентноеЗадание; + +КонецФункции + +// Добавляет новое задание в очередь или как регламентное. +// +// Параметры: +// ПараметрыЗадания - Структура - Параметры добавляемого задания, возможные ключи: +// Использование +// Метаданные - обязательно для указания. +// Параметры +// Ключ +// ИнтервалПовтораПриАварийномЗавершении. +// Расписание +// КоличествоПовторовПриАварийномЗавершении +// +// Возвращаемое значение: +// РегламентноеЗадание, СправочникСсылка.ОчередьЗаданий, СправочникСсылка.ОчередьЗаданийОбластейДанных - Идентификатор добавленного задания. +// +Функция ДобавитьЗадание(ПараметрыЗадания) Экспорт + + РегламентныеЗаданияСлужебный.ВызватьИсключениеЕслиНетПраваАдминистрирования(); + УстановитьПривилегированныйРежим(Истина); + + Если ОбщегоНазначенияПовтИсп.РазделениеВключено() Тогда + + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаВМоделиСервиса.ОчередьЗаданий") Тогда + ОбластьДанных = ОбщегоНазначения.ЗначениеРазделителяСеанса(); + + ПараметрыЗадания.Вставить("ОбластьДанных", ОбластьДанных); + МетаданныеЗадания = ПараметрыЗадания.Метаданные; + ИмяМетода = МетаданныеЗадания.ИмяМетода; + ПараметрыЗадания.Вставить("ИмяМетода", ИмяМетода); + + ПараметрыЗадания.Удалить("Метаданные"); + ПараметрыЗадания.Удалить("Наименование"); + + МодульОчередьЗаданий = ОбщегоНазначения.ОбщийМодуль("ОчередьЗаданий"); + Задание = МодульОчередьЗаданий.ДобавитьЗадание(ПараметрыЗадания); + СписокЗаданий = МодульОчередьЗаданий.ПолучитьЗадания(Новый Структура("Идентификатор", Задание)); + Для Каждого Задание Из СписокЗаданий Цикл + Возврат Задание; + КонецЦикла; + + КонецЕсли; + + Иначе + + МетаданныеЗадания = ПараметрыЗадания.Метаданные; + Задание = РегламентныеЗадания.СоздатьРегламентноеЗадание(МетаданныеЗадания); + + Если ПараметрыЗадания.Свойство("Наименование") Тогда + Задание.Наименование = ПараметрыЗадания.Наименование; + Иначе + Задание.Наименование = МетаданныеЗадания.Наименование; + КонецЕсли; + + Если ПараметрыЗадания.Свойство("Использование") Тогда + Задание.Использование = ПараметрыЗадания.Использование; + Иначе + Задание.Использование = МетаданныеЗадания.Использование; + КонецЕсли; + + Если ПараметрыЗадания.Свойство("Ключ") Тогда + Задание.Ключ = ПараметрыЗадания.Ключ; + Иначе + Задание.Ключ = МетаданныеЗадания.Ключ; + КонецЕсли; + + Если ПараметрыЗадания.Свойство("ИмяПользователя") Тогда + Задание.ИмяПользователя = ПараметрыЗадания.ИмяПользователя; + КонецЕсли; + + Если ПараметрыЗадания.Свойство("ИнтервалПовтораПриАварийномЗавершении") Тогда + Задание.ИнтервалПовтораПриАварийномЗавершении = ПараметрыЗадания.ИнтервалПовтораПриАварийномЗавершении; + Иначе + Задание.ИнтервалПовтораПриАварийномЗавершении = МетаданныеЗадания.ИнтервалПовтораПриАварийномЗавершении; + КонецЕсли; + + Если ПараметрыЗадания.Свойство("КоличествоПовторовПриАварийномЗавершении") Тогда + Задание.КоличествоПовторовПриАварийномЗавершении = ПараметрыЗадания.КоличествоПовторовПриАварийномЗавершении; + Иначе + Задание.КоличествоПовторовПриАварийномЗавершении = МетаданныеЗадания.КоличествоПовторовПриАварийномЗавершении; + КонецЕсли; + + Если ПараметрыЗадания.Свойство("Параметры") Тогда + Задание.Параметры = ПараметрыЗадания.Параметры; + КонецЕсли; + + Если ПараметрыЗадания.Свойство("Расписание") Тогда + Задание.Расписание = ПараметрыЗадания.Расписание; + КонецЕсли; + + Задание.Записать(); + + КонецЕсли; + + Возврат Задание; + +КонецФункции + +// Удаляет РегламентноеЗадание из информационной базы. +// +// Параметры: +// Идентификатор - ОбъектМетаданных - объект метаданных регламентного задания для поиска +// не предопределенного регламентного задания. +// - УникальныйИдентификатор - идентификатор регламентного задания. +// - Строка - строка уникального идентификатора регламентного задания. +// - РегламентноеЗадание - регламентное задание, которое нужно получить +// уникальный идентификатор для получения свежей копии регламентного задания. +// +Процедура УдалитьЗадание(Знач Идентификатор) Экспорт + + РегламентныеЗаданияСлужебный.ВызватьИсключениеЕслиНетПраваАдминистрирования(); + УстановитьПривилегированныйРежим(Истина); + + Если ТипЗнч(Идентификатор) = Тип("РегламентноеЗадание") Тогда + Идентификатор = Идентификатор.УникальныйИдентификатор; + КонецЕсли; + + Если ТипЗнч(Идентификатор) = Тип("Строка") Тогда + Идентификатор = Новый УникальныйИдентификатор(Идентификатор); + КонецЕсли; + + Если ОбщегоНазначенияПовтИсп.РазделениеВключено() Тогда + + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаВМоделиСервиса.ОчередьЗаданий") Тогда + ОбластьДанных = ОбщегоНазначения.ЗначениеРазделителяСеанса(); + + ПараметрыЗадания = Новый Структура; + ПараметрыЗадания.Вставить("ОбластьДанных", ОбластьДанных); + + Если ТипЗнч(Идентификатор) = Тип("ОбъектМетаданных") Тогда + ИмяМетода = Идентификатор.ИмяМетода; + ПараметрыЗадания.Вставить("ИмяМетода", ИмяМетода); + ИначеЕсли ТипЗнч(Идентификатор) = Тип("УникальныйИдентификатор") Тогда + МодульОчередьЗаданийСлужебный = ОбщегоНазначения.ОбщийМодуль("ОчередьЗаданийСлужебный"); + СправочникДляЗадания = МодульОчередьЗаданийСлужебный.СправочникОчередьЗаданий(); + + Если ОбщегоНазначенияПовтИсп.ЭтоРазделеннаяКонфигурация() Тогда + МодульОчередьЗаданийСлужебныйРазделениеДанных = ОбщегоНазначения.ОбщийМодуль("ОчередьЗаданийСлужебныйРазделениеДанных"); + ПереопределенныйСправочник = МодульОчередьЗаданийСлужебныйРазделениеДанных.ПриВыбореСправочникаДляЗадания(ПараметрыЗадания); + Если ПереопределенныйСправочник <> Неопределено Тогда + СправочникДляЗадания = ПереопределенныйСправочник; + КонецЕсли; + КонецЕсли; + + ПараметрыЗадания.Вставить("Идентификатор", СправочникДляЗадания.ПолучитьСсылку(Идентификатор)); + + ИначеЕсли ТипЗнч(Идентификатор) = Тип("СтрокаТаблицыЗначений") Тогда + + МодульОчередьЗаданий = ОбщегоНазначения.ОбщийМодуль("ОчередьЗаданий"); + МодульОчередьЗаданий.УдалитьЗадание(Идентификатор.Идентификатор); + Возврат; + + Иначе + ПараметрыЗадания.Вставить("Идентификатор", Идентификатор); + КонецЕсли; + + МодульОчередьЗаданий = ОбщегоНазначения.ОбщийМодуль("ОчередьЗаданий"); + СписокЗаданий = МодульОчередьЗаданий.ПолучитьЗадания(ПараметрыЗадания); + Для Каждого Задание Из СписокЗаданий Цикл + МодульОчередьЗаданий.УдалитьЗадание(Задание.Идентификатор); + КонецЦикла; + КонецЕсли; + Иначе + Если ТипЗнч(Идентификатор) = Тип("ОбъектМетаданных") И Идентификатор.Предопределенное Тогда + ВызватьИсключение( НСтр("ru = 'Предопределенное регламентное задание удалить невозможно.'") ); + ИначеЕсли ТипЗнч(Идентификатор) = Тип("ОбъектМетаданных") И НЕ Идентификатор.Предопределенное Тогда + СписокЗаданий = РегламентныеЗадания.ПолучитьРегламентныеЗадания(Новый Структура("Метаданные", Идентификатор)); + Для каждого РегламентноеЗадание Из СписокЗаданий Цикл + РегламентноеЗадание.Удалить(); + КонецЦикла; + Иначе + РегламентноеЗадание = РегламентныеЗадания.НайтиПоУникальномуИдентификатору(Идентификатор); + Если РегламентноеЗадание <> Неопределено Тогда + РегламентноеЗадание.Удалить(); + КонецЕсли; + КонецЕсли; + КонецЕсли; + +КонецПроцедуры + +// Изменяет задание с указанным идентификатором. +// В случае вызова в транзакции на задание устанавливается объектная блокировка. +// +// Параметры: +// Идентификатор - СправочникСсылка.ОчередьЗаданий, СправочникСсылка.ОчередьЗаданийОбластейДанных - Идентификатор задания +// ПараметрыЗадания - Структура - Параметры, которые следует установить заданию, +// возможные ключи: +// Использование +// Параметры +// Ключ +// ИнтервалПовтораПриАварийномЗавершении. +// Расписание +// КоличествоПовторовПриАварийномЗавершении +// +// В случае если задание создано на основе шаблона или предопределенное, могут быть указаны +// только следующие ключи: Использование. +// +Процедура ИзменитьЗадание(Знач Идентификатор, Знач ПараметрыЗадания) Экспорт + + РегламентныеЗаданияСлужебный.ВызватьИсключениеЕслиНетПраваАдминистрирования(); + УстановитьПривилегированныйРежим(Истина); + + Если ТипЗнч(Идентификатор) = Тип("РегламентноеЗадание") Тогда + Идентификатор = Идентификатор.УникальныйИдентификатор; + КонецЕсли; + + Если ТипЗнч(Идентификатор) = Тип("Строка") Тогда + Идентификатор = Новый УникальныйИдентификатор(Идентификатор); + КонецЕсли; + + Если ОбщегоНазначенияПовтИсп.РазделениеВключено() Тогда + + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаВМоделиСервиса.ОчередьЗаданий") Тогда + + ПараметрыПоиска = Новый Структура; + + ПараметрыЗадания.Удалить("Наименование"); + Если ПараметрыЗадания.Количество() = 0 Тогда + Возврат; + КонецЕсли; + + ОбластьДанных = ОбщегоНазначения.ЗначениеРазделителяСеанса(); + ПараметрыПоиска.Вставить("ОбластьДанных", ОбластьДанных); + + Если ТипЗнч(Идентификатор) = Тип("ОбъектМетаданных") Тогда + ИмяМетода = Идентификатор.ИмяМетода; + ПараметрыПоиска.Вставить("ИмяМетода", ИмяМетода); + + // Если рег.задание предопределенное и есть шаблон очереди - можно изменять только "Использование" + Если Идентификатор.Предопределенное Тогда + + Шаблоны = Новый Массив; + МодульОчередьЗаданийПереопределяемый = ОбщегоНазначения.ОбщийМодуль("ОчередьЗаданийПереопределяемый"); + МодульОчередьЗаданийПереопределяемый.ПриПолученииСпискаШаблонов(Шаблоны); + + Если Шаблоны.Найти(Идентификатор.Имя) <> Неопределено + И (ПараметрыЗадания.Количество() > 1 + ИЛИ НЕ ПараметрыЗадания.Свойство("Использование")) Тогда + + Для каждого ПараметрЗадания Из ОбщегоНазначенияКлиентСервер.СкопироватьСтруктуру(ПараметрыЗадания) Цикл + + Если ПараметрЗадания.Ключ = "Использование" Тогда + Продолжить; + КонецЕсли; + + ПараметрыЗадания.Удалить(ПараметрЗадания.Ключ); + КонецЦикла; + КонецЕсли; + КонецЕсли; + + ИначеЕсли ТипЗнч(Идентификатор) = Тип("УникальныйИдентификатор") Тогда + МодульОчередьЗаданийСлужебный = ОбщегоНазначения.ОбщийМодуль("ОчередьЗаданийСлужебный"); + СправочникДляЗадания = МодульОчередьЗаданийСлужебный.СправочникОчередьЗаданий(); + + Если ОбщегоНазначенияПовтИсп.ЭтоРазделеннаяКонфигурация() Тогда + МодульОчередьЗаданийСлужебныйРазделениеДанных = ОбщегоНазначения.ОбщийМодуль("ОчередьЗаданийСлужебныйРазделениеДанных"); + ПереопределенныйСправочник = МодульОчередьЗаданийСлужебныйРазделениеДанных.ПриВыбореСправочникаДляЗадания(ПараметрыЗадания); + Если ПереопределенныйСправочник <> Неопределено Тогда + СправочникДляЗадания = ПереопределенныйСправочник; + КонецЕсли; + КонецЕсли; + + ПараметрыПоиска.Вставить("Идентификатор", СправочникДляЗадания.ПолучитьСсылку(Идентификатор)); + + ИначеЕсли ТипЗнч(Идентификатор) = Тип("СтрокаТаблицыЗначений") Тогда + + Если ЗначениеЗаполнено(Идентификатор.Шаблон) + И (ПараметрыЗадания.Количество() > 1 + ИЛИ НЕ ПараметрыЗадания.Свойство("Использование")) Тогда + + Для каждого ПараметрЗадания Из ОбщегоНазначенияКлиентСервер.СкопироватьСтруктуру(ПараметрыЗадания) Цикл + + Если ПараметрЗадания.Ключ = "Использование" Тогда + Продолжить; + КонецЕсли; + + ПараметрыЗадания.Удалить(ПараметрЗадания.Ключ); + КонецЦикла; + КонецЕсли; + + Если ПараметрыЗадания.Количество() = 0 Тогда + Возврат; + КонецЕсли; + + МодульОчередьЗаданий = ОбщегоНазначения.ОбщийМодуль("ОчередьЗаданий"); + МодульОчередьЗаданий.ИзменитьЗадание(Идентификатор.Идентификатор, ПараметрыЗадания); + Возврат; + + Иначе + ПараметрыПоиска.Вставить("Идентификатор", Идентификатор); + КонецЕсли; + + Если ПараметрыЗадания.Количество() = 0 Тогда + Возврат; + КонецЕсли; + + МодульОчередьЗаданий = ОбщегоНазначения.ОбщийМодуль("ОчередьЗаданий"); + СписокЗаданий = МодульОчередьЗаданий.ПолучитьЗадания(ПараметрыПоиска); + Для Каждого Задание Из СписокЗаданий Цикл + МодульОчередьЗаданий.ИзменитьЗадание(Задание.Идентификатор, ПараметрыЗадания); + КонецЦикла; + КонецЕсли; + + Иначе + + Задание = РегламентныеЗадания.НайтиПоУникальномуИдентификатору(Идентификатор); + Если Задание <> Неопределено Тогда + + Если ПараметрыЗадания.Свойство("Наименование") Тогда + Задание.Наименование = ПараметрыЗадания.Наименование; + КонецЕсли; + + Если ПараметрыЗадания.Свойство("Использование") Тогда + Задание.Использование = ПараметрыЗадания.Использование; + КонецЕсли; + + Если ПараметрыЗадания.Свойство("Ключ") Тогда + Задание.Ключ = ПараметрыЗадания.Ключ; + КонецЕсли; + + Если ПараметрыЗадания.Свойство("ИмяПользователя") Тогда + Задание.ИмяПользователя = ПараметрыЗадания.ИмяПользователя; + КонецЕсли; + + Если ПараметрыЗадания.Свойство("ИнтервалПовтораПриАварийномЗавершении") Тогда + Задание.ИнтервалПовтораПриАварийномЗавершении = ПараметрыЗадания.ИнтервалПовтораПриАварийномЗавершении; + КонецЕсли; + + Если ПараметрыЗадания.Свойство("КоличествоПовторовПриАварийномЗавершении") Тогда + Задание.КоличествоПовторовПриАварийномЗавершении = ПараметрыЗадания.КоличествоПовторовПриАварийномЗавершении; + КонецЕсли; + + Если ПараметрыЗадания.Свойство("Параметры") Тогда + Задание.Параметры = ПараметрыЗадания.Параметры; + КонецЕсли; + + Если ПараметрыЗадания.Свойство("Расписание") Тогда + Задание.Расписание = ПараметрыЗадания.Расписание; + КонецЕсли; + + Задание.Записать(); + + КонецЕсли; + + КонецЕсли; + +КонецПроцедуры + +// Возвращает уникальный идентификатор регламентного задания. +// Перед вызовом требуется иметь право Администрирования или УстановитьПривилегированныйРежим. +// +// Параметры: +// Идентификатор - ОбъектМетаданных - объект метаданных регламентного задания для поиска +// регламентного задания. +// - УникальныйИдентификатор - идентификатор регламентного задания. +// - Строка - строка уникального идентификатора регламентного задания. +// - РегламентноеЗадание - регламентное задание. +// +// Возвращаемое значение: +// УникальныйИдентификатор - УИ объекта регламентного задания +// +Функция УникальныйИдентификатор(Знач Идентификатор) Экспорт + + Если ТипЗнч(Идентификатор) = Тип("УникальныйИдентификатор") Тогда + Возврат Идентификатор; + КонецЕсли; + + Если ТипЗнч(Идентификатор) = Тип("РегламентноеЗадание") Тогда + Возврат Идентификатор.УникальныйИдентификатор; + КонецЕсли; + + Если ТипЗнч(Идентификатор) = Тип("Строка") Тогда + Возврат Новый УникальныйИдентификатор(Идентификатор); + КонецЕсли; + + Если ОбщегоНазначенияПовтИсп.РазделениеВключено() Тогда + + ПараметрыЗадания = Новый Структура; + + ИдентификаторТипЗнч = ТипЗнч(Идентификатор); + + Если ИдентификаторТипЗнч = Тип("ОбъектМетаданных") Тогда + ИмяМетода = Идентификатор.ИмяМетода; + ПараметрыЗадания.Вставить("ИмяМетода", ИмяМетода); + ИначеЕсли ИдентификаторТипЗнч = Тип("СтрокаТаблицыЗначений") Тогда + Возврат Идентификатор.Идентификатор.УникальныйИдентификатор(); + ИначеЕсли ОбщегоНазначения.ЭтоСсылка(ИдентификаторТипЗнч) Тогда + Возврат Идентификатор.УникальныйИдентификатор(); + Иначе + Возврат Неопределено; + КонецЕсли; + + ОбластьДанных = ОбщегоНазначения.ЗначениеРазделителяСеанса(); + ПараметрыЗадания.Вставить("ОбластьДанных", ОбластьДанных); + + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаВМоделиСервиса.ОчередьЗаданий") Тогда + МодульОчередьЗаданий = ОбщегоНазначения.ОбщийМодуль("ОчередьЗаданий"); + СписокЗаданий = МодульОчередьЗаданий.ПолучитьЗадания(ПараметрыЗадания); + Для Каждого Задание Из СписокЗаданий Цикл + Возврат Задание.Идентификатор.УникальныйИдентификатор(); + КонецЦикла; + КонецЕсли; + Иначе + Если ТипЗнч(Идентификатор) = Тип("ОбъектМетаданных") И Идентификатор.Предопределенное Тогда + Возврат РегламентныеЗадания.НайтиПредопределенное(Идентификатор).УникальныйИдентификатор; + ИначеЕсли ТипЗнч(Идентификатор) = Тип("ОбъектМетаданных") И НЕ Идентификатор.Предопределенное Тогда + СписокЗаданий = РегламентныеЗадания.ПолучитьРегламентныеЗадания(Новый Структура("Метаданные", Идентификатор)); + Для каждого РегламентноеЗадание Из СписокЗаданий Цикл + Возврат РегламентноеЗадание.УникальныйИдентификатор; + КонецЦикла; + КонецЕсли; + КонецЕсли; + + Возврат Неопределено; + +КонецФункции + // Возвращает использование регламентного задания. // Перед вызовом требуется иметь право Администрирования или УстановитьПривилегированныйРежим. // @@ -18,7 +626,7 @@ // Возвращаемое значение: // Булево - если Истина, регламентное задание используется. // -Функция ПолучитьИспользованиеРегламентногоЗадания(Знач Идентификатор) Экспорт +Функция РегламентноеЗаданиеИспользуется(Знач Идентификатор) Экспорт РегламентныеЗаданияСлужебный.ВызватьИсключениеЕслиНетПраваАдминистрирования(); УстановитьПривилегированныйРежим(Истина); @@ -29,6 +637,37 @@ КонецФункции +// Возвращает расписание регламентного задания. +// Перед вызовом требуется иметь право Администрирования или УстановитьПривилегированныйРежим. +// +// Параметры: +// Идентификатор - ОбъектМетаданных - объект метаданных регламентного задания для поиска +// предопределенного регламентного задания. +// - УникальныйИдентификатор - идентификатор регламентного задания. +// - Строка - строка уникального идентификатора регламентного задания. +// - РегламентноеЗадание - регламентное задание. +// +// ВСтруктуре - Булево - если Истина, тогда расписание будет преобразовано +// в структуру, которую можно передать на клиент. +// +// Возвращаемое значение: +// РасписаниеРегламентногоЗадания, Структура - структура содержит те же свойства, что и расписание. +// +Функция РасписаниеРегламентногоЗадания(Знач Идентификатор, Знач ВСтруктуре = Ложь) Экспорт + + РегламентныеЗаданияСлужебный.ВызватьИсключениеЕслиНетПраваАдминистрирования(); + УстановитьПривилегированныйРежим(Истина); + + Задание = ПолучитьРегламентноеЗадание(Идентификатор); + + Если ВСтруктуре Тогда + Возврат ОбщегоНазначенияКлиентСервер.РасписаниеВСтруктуру(Задание.Расписание); + КонецЕсли; + + Возврат Задание.Расписание; + +КонецФункции + // Устанавливает использование регламентного задания. // Перед вызовом требуется иметь право Администрирования или УстановитьПривилегированныйРежим. // @@ -56,37 +695,6 @@ КонецПроцедуры -// Возвращает расписание регламентного задания. -// Перед вызовом требуется иметь право Администрирования или УстановитьПривилегированныйРежим. -// -// Параметры: -// Идентификатор - ОбъектМетаданных - объект метаданных регламентного задания для поиска -// предопределенного регламентного задания. -// - УникальныйИдентификатор - идентификатор регламентного задания. -// - Строка - строка уникального идентификатора регламентного задания. -// - РегламентноеЗадание - регламентное задание. -// -// ВСтруктуре - Булево - если Истина, тогда расписание будет преобразовано -// в структуру, которую можно передать на клиент. -// -// Возвращаемое значение: -// РасписаниеРегламентногоЗадания, Структура - структура содержит те же свойства, что и расписание. -// -Функция ПолучитьРасписаниеРегламентногоЗадания(Знач Идентификатор, Знач ВСтруктуре = Ложь) Экспорт - - РегламентныеЗаданияСлужебный.ВызватьИсключениеЕслиНетПраваАдминистрирования(); - УстановитьПривилегированныйРежим(Истина); - - Задание = ПолучитьРегламентноеЗадание(Идентификатор); - - Если ВСтруктуре Тогда - Возврат ОбщегоНазначенияКлиентСервер.РасписаниеВСтруктуру(Задание.Расписание); - КонецЕсли; - - Возврат Задание.Расписание; - -КонецФункции - // Устанавливает расписание регламентного задания. // Перед вызовом требуется иметь право Администрирования или УстановитьПривилегированныйРежим. // diff --git a/SSL/src/CommonModules/РегламентныеЗаданияСлужебный/Module.bsl b/SSL/src/CommonModules/РегламентныеЗаданияСлужебный/Module.bsl index 6931a26ba..97e265edc 100644 --- a/SSL/src/CommonModules/РегламентныеЗаданияСлужебный/Module.bsl +++ b/SSL/src/CommonModules/РегламентныеЗаданияСлужебный/Module.bsl @@ -10,11 +10,150 @@ // СЕРВЕРНЫЕ ОБРАБОТЧИКИ. + СерверныеОбработчики["СтандартныеПодсистемы.ОбновлениеВерсииИБ\ПриДобавленииОбработчиковОбновления"].Добавить( + "РегламентныеЗаданияСлужебный"); + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаВМоделиСервиса") Тогда СерверныеОбработчики["СтандартныеПодсистемы.РаботаВМоделиСервиса\ПриЗаполненииТаблицыПараметровИБ"].Добавить( "РегламентныеЗаданияСлужебный"); КонецЕсли; + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаВМоделиСервиса.ОчередьЗаданий") Тогда + СерверныеОбработчики[ + "СтандартныеПодсистемы.РаботаВМоделиСервиса.ОчередьЗаданий\ПриОпределенииИспользованияРегламентныхЗаданий"].Добавить( + "РегламентныеЗаданияСлужебный"); + КонецЕсли; + + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ОбменДанными") Тогда + СерверныеОбработчики["СтандартныеПодсистемы.ОбменДанными\ПриНастройкеПодчиненногоУзлаРИБ"].Добавить( + "РегламентныеЗаданияСлужебный"); + КонецЕсли; + +КонецПроцедуры + +// Проверяет, включено ли регламентное задание по функциональным опциям. +// +// Параметры: +// Задание - ОбъектМетаданных: РегламентноеЗадание - регламентное задание. +// ЗависимостиЗаданий - ТаблицаЗначений - таблица зависимостей регламентных +// заданий, полученная методом РегламентныеЗаданияСлужебный.РегламентныеЗаданияЗависимыеОтФункциональныхОпций. +// Если не указано, получается автоматически. +// +// Возвращаемое значение: +// Использование - Булево - Истина, если регламентное задание используется. +// +Функция РегламентноеЗаданиеДоступноПоФункциональнымОпциям(Задание, ЗависимостиЗаданий = Неопределено) Экспорт + + Если ЗависимостиЗаданий = Неопределено Тогда + ЗависимостиЗаданий = РегламентныеЗаданияЗависимыеОтФункциональныхОпций(); + КонецЕсли; + + ОтключитьВПодчиненномУзлеРИБ = Ложь; + ОтключитьВАвтономномРабочемМесте = Ложь; + Использование = Неопределено; + ЭтоПодчиненныйУзелРИБ = ОбщегоНазначения.ЭтоПодчиненныйУзелРИБ(); + ЭтоРазделенныйРежим = ОбщегоНазначенияПовтИсп.РазделениеВключено(); + ЭтоАвтономноеРабочееМесто = ОбщегоНазначенияПовтИсп.ЭтоАвтономноеРабочееМесто(); + + НайденныеСтроки = ЗависимостиЗаданий.НайтиСтроки(Новый Структура("РегламентноеЗадание", Задание)); + + Для Каждого СтрокаЗависимости Из НайденныеСтроки Цикл + Если ЭтоРазделенныйРежим И СтрокаЗависимости.ДоступноВМоделиСервиса = Ложь Тогда + Возврат Ложь; + КонецЕсли; + + ОтключитьВПодчиненномУзлеРИБ = (СтрокаЗависимости.ДоступноВПодчиненномУзлеРИБ = Ложь) И ЭтоПодчиненныйУзелРИБ; + ОтключитьВАвтономномРабочемМесте = (СтрокаЗависимости.ДоступноВАвтономномРабочемМесте = Ложь) И ЭтоАвтономноеРабочееМесто; + + Если ОтключитьВПодчиненномУзлеРИБ Или ОтключитьВАвтономномРабочемМесте Тогда + Возврат Ложь; + КонецЕсли; + + Если СтрокаЗависимости.ФункциональнаяОпция = Неопределено Тогда + Продолжить; + КонецЕсли; + + ЗначениеФО = ПолучитьФункциональнуюОпцию(СтрокаЗависимости.ФункциональнаяОпция.Имя); + + Если Использование = Неопределено Тогда + Использование = ЗначениеФО; + ИначеЕсли СтрокаЗависимости.ЗависимостьПоИ Тогда + Использование = Использование И ЗначениеФО; + Иначе + Использование = Использование Или ЗначениеФО; + КонецЕсли; + КонецЦикла; + + Если Использование = Неопределено Тогда + Возврат Истина; + Иначе + Возврат Использование; + КонецЕсли; + +КонецФункции + +// Формирует таблицу зависимостей регламентных заданий от функциональных опций. +// +// Возвращаемое значение: +// Зависимости - ТаблицаЗначений - таблица значений с колонками: +// * РегламентноеЗадание - ОбъектМетаданных:РегламентноеЗадание - регламентное задание. +// * ФункциональнаяОпция - ОбъектМетаданных:ФункциональнаяОпция - функциональная опция, +// от которой зависит регламентное задание. +// * ЗависимостьПоИ - Булево - если регламентное задание зависит более, чем +// от одной функциональной опции и его необходимо включать только тогда, +// когда все функциональные опции включены, то следует указывать Истина +// для каждой зависимости. +// По умолчанию Ложь - если хотя бы одна функциональная опция включена, +// то регламентное задание тоже включено. +// * ВключатьПриВключенииФункциональнойОпции - Булево, Неопределено - если Ложь, то при +// включении функциональной опции регламентное задание не будет включаться. Значение +// Неопределено соответствует значению Истина. +// По умолчанию - неопределено. +// * ДоступноВПодчиненномУзлеРИБ - Булево, Неопределено - Истина или Неопределено, если регламентное +// задание доступно в РИБ. +// По умолчанию - неопределено. +// * ДоступноВМоделиСервиса - Булево, Неопределено - Истина или Неопределено, если регламентное +// задание доступно в модели сервиса. +// По умолчанию - неопределено. +// +Функция РегламентныеЗаданияЗависимыеОтФункциональныхОпций() Экспорт + + Зависимости = Новый ТаблицаЗначений; + Зависимости.Колонки.Добавить("РегламентноеЗадание"); + Зависимости.Колонки.Добавить("ФункциональнаяОпция"); + Зависимости.Колонки.Добавить("ЗависимостьПоИ", Новый ОписаниеТипов("Булево")); + Зависимости.Колонки.Добавить("ДоступноВМоделиСервиса"); + Зависимости.Колонки.Добавить("ДоступноВПодчиненномУзлеРИБ"); + Зависимости.Колонки.Добавить("ВключатьПриВключенииФункциональнойОпции"); + Зависимости.Колонки.Добавить("ДоступноВАвтономномРабочемМесте"); + + ИнтеграцияСтандартныхПодсистем.ПриОпределенииЗависимостейРегламентныхЗаданий(Зависимости); + РегламентныеЗаданияПереопределяемый.ПриОпределенииЗависимостейРегламентныхЗаданий(Зависимости); + + Зависимости.Сортировать("РегламентноеЗадание"); + + Возврат Зависимости; + +КонецФункции + +//////////////////////////////////////////////////////////////////////////////// +// Обработчики подписок на события. + +// Процедура включает/отключает созданные в ИБ регламентные задания +// при изменении функциональной опции. +// +// Параметры: +// Источник - КонстантаМенеджерЗначения - константа хранения значения ФО +// Отказ - Булево - Отказ при записи константы +// +Процедура ВключитьРегламентноеЗаданиеПриИзмененииФункциональнойОпции(Источник, Отказ) Экспорт + + Если Источник.ОбменДанными.Загрузка Тогда + Возврат; + КонецЕсли; + + УстановитьПривилегированныйРежим(Истина); + ИзменитьИспользованиеРегламентныхЗаданийПоФункциональнымОпциям(Источник, Источник.Значение); КонецПроцедуры #КонецОбласти @@ -24,8 +163,15 @@ // Вызывает исключение, если у пользователя нет права администрирования. Процедура ВызватьИсключениеЕслиНетПраваАдминистрирования() Экспорт - Если НЕ ПривилегированныйРежим() Тогда - ВыполнитьПроверкуПравДоступа("Администрирование", Метаданные); + Если ОбщегоНазначенияПовтИсп.РазделениеВключено() + И ОбщегоНазначенияПовтИсп.ДоступноИспользованиеРазделенныхДанных() Тогда + Если НЕ Пользователи.ЭтоПолноправныйПользователь() Тогда + ВызватьИсключение НСтр("ru = 'Нарушение прав доступа.'"); + КонецЕсли; + Иначе + Если НЕ ПривилегированныйРежим() Тогда + ВыполнитьПроверкуПравДоступа("Администрирование", Метаданные); + КонецЕсли; КонецЕсли; КонецПроцедуры @@ -49,6 +195,71 @@ КонецПроцедуры +// Добавляет процедуры-обработчики обновления, необходимые данной подсистеме. +// +// Параметры: +// Обработчики - ТаблицаЗначений - см. описание функции НоваяТаблицаОбработчиковОбновления +// общего модуля ОбновлениеИнформационнойБазы. +// +Процедура ПриДобавленииОбработчиковОбновления(Обработчики) Экспорт + + Обработчик = Обработчики.Добавить(); + Обработчик.Версия = "2.3.1.24"; + Обработчик.Процедура = "РегламентныеЗаданияСлужебный.УстановитьИспользованиеРегламентныхЗаданийПоФункциональнымОпциям"; + Обработчик.РежимВыполнения = "Монопольно"; + +КонецПроцедуры + +// Формирует таблицу регламентных заданий +// с признаком использования в модели сервиса. +// +// Параметры: +// ТаблицаИспользования - ТаблицаЗначений - таблица, которую необходимо +// заполнить регламентными заданиями и признаком использования, колонки: +// РегламентноеЗадание - Строка - имя предопределенного регламентного задания. +// Использование - Булево - Истина, если регламентное задание должно +// выполняться в модели сервиса. Ложь - если не должно. +// +Процедура ПриОпределенииИспользованияРегламентныхЗаданий(ТаблицаИспользования) Экспорт + + ЗависимыеРегламентныеЗадания = РегламентныеЗаданияЗависимыеОтФункциональныхОпций(); + + ПараметрыОтбора = Новый Структура; + ПараметрыОтбора.Вставить("ДоступноВМоделиСервиса", Ложь); + ЗаданияОтключаемыеМоделиСервиса = ЗависимыеРегламентныеЗадания.Скопировать(ПараметрыОтбора ,"РегламентноеЗадание"); + Для Каждого ОтключаемоеЗадание Из ЗаданияОтключаемыеМоделиСервиса Цикл + Если ТаблицаИспользования.Найти(ОтключаемоеЗадание.РегламентноеЗадание.Имя, "РегламентноеЗадание") <> Неопределено Тогда + Продолжить; + КонецЕсли; + + НоваяСтрока = ТаблицаИспользования.Добавить(); + НоваяСтрока.РегламентноеЗадание = ОтключаемоеЗадание.РегламентноеЗадание.Имя; + НоваяСтрока.Использование = Ложь; + КонецЦикла; + + ПараметрыОтбора.Вставить("ДоступноВМоделиСервиса", Истина); + ЗаданияВключаемыеВМоделиСервиса = ЗависимыеРегламентныеЗадания.Скопировать(ПараметрыОтбора ,"РегламентноеЗадание"); + Для Каждого ВключаемоеЗадание Из ЗаданияВключаемыеВМоделиСервиса Цикл + Если ТаблицаИспользования.Найти(ВключаемоеЗадание.РегламентноеЗадание.Имя, "РегламентноеЗадание") <> Неопределено Тогда + Продолжить; + КонецЕсли; + + НоваяСтрока = ТаблицаИспользования.Добавить(); + НоваяСтрока.РегламентноеЗадание = ВключаемоеЗадание.РегламентноеЗадание.Имя; + НоваяСтрока.Использование = Истина; + КонецЦикла; + +КонецПроцедуры + +// Обработчик начальной настройки ИБ после создания узла РИБ. +// Вызывается в момент первого запуска подчиненного узла РИБ (в том числе АРМ). +// +Процедура ПриНастройкеПодчиненногоУзлаРИБ() Экспорт + + УстановитьИспользованиеРегламентныхЗаданийПоФункциональнымОпциям(); + +КонецПроцедуры + //////////////////////////////////////////////////////////////////////////////// // Процедуры и функции для работы с регламентными заданиями. @@ -199,7 +410,9 @@ ВызватьИсключениеЕслиНетПраваАдминистрирования(); УстановитьПривилегированныйРежим(Истина); - Отбор = Новый Структура("УникальныйИдентификатор", Новый УникальныйИдентификатор(Идентификатор)); + НовыйУникальныйИдентификатор = Новый УникальныйИдентификатор(Идентификатор); + Отбор = Новый Структура; + Отбор.Вставить("УникальныйИдентификатор", НовыйУникальныйИдентификатор); МассивФоновыхЗаданий = ФоновыеЗадания.ПолучитьФоновыеЗадания(Отбор); Если МассивФоновыхЗаданий.Количество() = 1 Тогда ФоновоеЗадание = МассивФоновыхЗаданий[0]; @@ -215,6 +428,19 @@ КонецПроцедуры +// Только для внутреннего использования. +// +Функция ТаблицаСвойствФоновыхЗаданийВФоне(Параметры, АдресХранилища) Экспорт + + ТаблицаСвойств = ПолучитьТаблицуСвойствФоновыхЗаданий(Параметры.Отбор); + + Результат = Новый Структура; + Результат.Вставить("ТаблицаСвойств", ТаблицаСвойств); + + ПоместитьВоВременноеХранилище(Результат, АдресХранилища); + +КонецФункции + // Возвращает таблицу свойств фоновых заданий. // Структуру таблицы смотри в функции ПустаяТаблицаСвойствФоновыхЗаданий(). // @@ -352,9 +578,9 @@ // Выполнение дополнительного отбора по периоду и состоянию (если отбор определен). НомерЭлемента = Строки.Количество() - 1; Пока НомерЭлемента >= 0 Цикл - Если Начало <> Неопределено И Начало > Строки[НомерЭлемента].Начало ИЛИ - Конец <> Неопределено И Конец < ?(ЗначениеЗаполнено(Строки[НомерЭлемента].Конец), Строки[НомерЭлемента].Конец, ТекущаяДатаСеанса()) ИЛИ - Состояние <> Неопределено И Состояние.Найти(Строки[НомерЭлемента].Состояние) = Неопределено Тогда + Если Начало <> Неопределено И Начало > Строки[НомерЭлемента].Начало + Или Конец <> Неопределено И Конец < ?(ЗначениеЗаполнено(Строки[НомерЭлемента].Конец), Строки[НомерЭлемента].Конец, ТекущаяДатаСеанса()) + Или Состояние <> Неопределено И Состояние.Найти(Строки[НомерЭлемента].Состояние) = Неопределено Тогда Строки.Удалить(НомерЭлемента); КонецЕсли; НомерЭлемента = НомерЭлемента - 1; @@ -480,9 +706,227 @@ КонецФункции +//////////////////////////////////////////////////////////////////////////////// +// Обработчики обновления информационной базы. + +Процедура УстановитьИспользованиеРегламентныхЗаданийПоФункциональнымОпциям() Экспорт + + ЭтоПодчиненныйУзелРИБ = ОбщегоНазначения.ЭтоПодчиненныйУзелРИБ(); + ЭтоАвтономноеРабочееМесто = ОбщегоНазначенияПовтИсп.ЭтоАвтономноеРабочееМесто(); + + ЗависимыеРегламентныеЗадания = РегламентныеЗаданияЗависимыеОтФункциональныхОпций(); + Задания = ЗависимыеРегламентныеЗадания.Скопировать(,"РегламентноеЗадание"); + Задания.Свернуть("РегламентноеЗадание"); + + Для Каждого СтрокаЗадание Из Задания Цикл + + Использование = Неопределено; + ОтключитьЗадание = Истина; + ОтключитьВПодчиненномУзлеРИБ = Ложь; + ОтключитьВАвтономномРабочемМесте = Ложь; + + НайденныеСтроки = ЗависимыеРегламентныеЗадания.НайтиСтроки(Новый Структура("РегламентноеЗадание", СтрокаЗадание.РегламентноеЗадание)); + + Для Каждого СтрокаЗависимости Из НайденныеСтроки Цикл + ОтключитьВПодчиненномУзлеРИБ = (СтрокаЗависимости.ДоступноВПодчиненномУзлеРИБ = Ложь) И ЭтоПодчиненныйУзелРИБ; + ОтключитьВАвтономномРабочемМесте = (СтрокаЗависимости.ДоступноВАвтономномРабочемМесте = Ложь) И ЭтоАвтономноеРабочееМесто; + Если ОтключитьВПодчиненномУзлеРИБ Или ОтключитьВАвтономномРабочемМесте Тогда + Использование = Ложь; + Прервать; + КонецЕсли; + + Если СтрокаЗависимости.ФункциональнаяОпция = Неопределено Тогда + Продолжить; + КонецЕсли; + + ЗначениеФО = ПолучитьФункциональнуюОпцию(СтрокаЗависимости.ФункциональнаяОпция.Имя); + + Если СтрокаЗависимости.ВключатьПриВключенииФункциональнойОпции = Ложь Тогда + Если ОтключитьЗадание Тогда + ОтключитьЗадание = Не ЗначениеФО; + КонецЕсли; + ЗначениеФО = Ложь; + КонецЕсли; + + Если Использование = Неопределено Тогда + Использование = ЗначениеФО; + ИначеЕсли СтрокаЗависимости.ЗависимостьПоИ Тогда + Использование = Использование И ЗначениеФО; + Иначе + Использование = Использование Или ЗначениеФО; + КонецЕсли; + КонецЦикла; + + Если Использование = Неопределено + Или Использование // Автоматически при обновлении только отключаем регламентные задания. + Или (Не Использование И Не ОтключитьЗадание) Тогда + Продолжить; + КонецЕсли; + + Если ОбщегоНазначенияПовтИсп.РазделениеВключено() Тогда + + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаВМоделиСервиса.ОчередьЗаданий") Тогда + ОбластьДанных = ОбщегоНазначения.ЗначениеРазделителяСеанса(); + ИмяМетода = СтрокаЗадание.РегламентноеЗадание.ИмяМетода; + + ПараметрыЗадания = Новый Структура; + ПараметрыЗадания.Вставить("ОбластьДанных", ОбластьДанных); + ПараметрыЗадания.Вставить("ИмяМетода", ИмяМетода); + + МодульОчередьЗаданий = ОбщегоНазначения.ОбщийМодуль("ОчередьЗаданий"); + СписокЗаданий = МодульОчередьЗаданий.ПолучитьЗадания(ПараметрыЗадания); + ПараметрыЗадания = Новый Структура("Использование", Использование); + Для Каждого Задание Из СписокЗаданий Цикл + МодульОчередьЗаданий.ИзменитьЗадание(Задание.Идентификатор, ПараметрыЗадания); + КонецЦикла; + КонецЕсли; + + Иначе + + МассивЗаданий = РегламентныеЗадания.ПолучитьРегламентныеЗадания(Новый Структура("Метаданные", СтрокаЗадание.РегламентноеЗадание)); + + Для каждого Задание Из МассивЗаданий Цикл + + Если Задание.Использование <> Использование Тогда + + Задание.Использование = Использование; + Задание.Записать(); + + КонецЕсли; + КонецЦикла; + + КонецЕсли; + КонецЦикла; + +КонецПроцедуры + //////////////////////////////////////////////////////////////////////////////// // Вспомогательные процедуры и функции. +Процедура ИзменитьИспользованиеРегламентныхЗаданийПоФункциональнымОпциям(Источник, Знач Использование) + + ТипИсточника = ТипЗнч(Источник); + ХранениеФО = Метаданные.НайтиПоТипу(ТипИсточника); + ФункциональнаяОпция = Неопределено; + ЭтоПодчиненныйУзелРИБ = ОбщегоНазначения.ЭтоПодчиненныйУзелРИБ(); + ЭтоАвтономноеРабочееМесто = ОбщегоНазначенияПовтИсп.ЭтоАвтономноеРабочееМесто(); + + ЗависимыеРегламентныеЗадания = РегламентныеЗаданияЗависимыеОтФункциональныхОпций(); + + СписокФО = ЗависимыеРегламентныеЗадания.Скопировать(,"ФункциональнаяОпция"); + СписокФО.Свернуть("ФункциональнаяОпция"); + + Для Каждого СтрокаФО Из СписокФО Цикл + + Если СтрокаФО.ФункциональнаяОпция = Неопределено Тогда + Продолжить; + КонецЕсли; + + Если СтрокаФО.ФункциональнаяОпция.Хранение = ХранениеФО Тогда + ФункциональнаяОпция = СтрокаФО.ФункциональнаяОпция; + Прервать; + КонецЕсли; + + КонецЦикла; + + Если ФункциональнаяОпция = Неопределено Тогда + Возврат; + КонецЕсли; + + Задания = ЗависимыеРегламентныеЗадания.Скопировать(Новый Структура("ФункциональнаяОпция", ФункциональнаяОпция) ,"РегламентноеЗадание"); + Задания.Свернуть("РегламентноеЗадание"); + + Для Каждого СтрокаЗадание Из Задания Цикл + + ИспользованиеПоФО = Неопределено; + ОтключитьЗадание = Истина; + ОтключитьВПодчиненномУзлеРИБ = Ложь; + ОтключитьВАвтономномРабочемМесте = Ложь; + + НайденныеСтроки = ЗависимыеРегламентныеЗадания.НайтиСтроки(Новый Структура("РегламентноеЗадание", СтрокаЗадание.РегламентноеЗадание)); + + Для Каждого СтрокаЗависимости Из НайденныеСтроки Цикл + ОтключитьВПодчиненномУзлеРИБ = (СтрокаЗависимости.ДоступноВПодчиненномУзлеРИБ = Ложь) И ЭтоПодчиненныйУзелРИБ; + ОтключитьВАвтономномРабочемМесте = (СтрокаЗависимости.ДоступноВАвтономномРабочемМесте = Ложь) И ЭтоАвтономноеРабочееМесто; + Если ОтключитьВПодчиненномУзлеРИБ Или ОтключитьВАвтономномРабочемМесте Тогда + Прервать; + КонецЕсли; + + Если СтрокаЗависимости.ФункциональнаяОпция = ФункциональнаяОпция Тогда + ЗначениеФО = Использование; + Иначе + ЗначениеФО = ПолучитьФункциональнуюОпцию(СтрокаЗависимости.ФункциональнаяОпция.Имя); + КонецЕсли; + + Если СтрокаЗависимости.ВключатьПриВключенииФункциональнойОпции = Ложь Тогда + Если ОтключитьЗадание Тогда + ОтключитьЗадание = Не ЗначениеФО; + КонецЕсли; + ЗначениеФО = Ложь; + КонецЕсли; + + Если ИспользованиеПоФО = Неопределено Тогда + ИспользованиеПоФО = ЗначениеФО; + ИначеЕсли СтрокаЗависимости.ЗависимостьПоИ Тогда + ИспользованиеПоФО = ИспользованиеПоФО И ЗначениеФО; + Иначе + ИспользованиеПоФО = ИспользованиеПоФО Или ЗначениеФО; + КонецЕсли; + КонецЦикла; + + Если ОтключитьВПодчиненномУзлеРИБ Или ОтключитьВАвтономномРабочемМесте Тогда + Использование = Ложь; + Иначе + Если Использование <> ИспользованиеПоФО Тогда + Продолжить; + КонецЕсли; + + Если Не Использование И Не ОтключитьЗадание Тогда + Продолжить; + КонецЕсли; + КонецЕсли; + + Если ОбщегоНазначенияПовтИсп.РазделениеВключено() Тогда + + Если Не ОбщегоНазначенияПовтИсп.ДоступноИспользованиеРазделенныхДанных() Тогда + Продолжить; + КонецЕсли; + + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаВМоделиСервиса.ОчередьЗаданий") Тогда + ОбластьДанных = ОбщегоНазначения.ЗначениеРазделителяСеанса(); + ИмяМетода = СтрокаЗадание.РегламентноеЗадание.ИмяМетода; + + ПараметрыЗадания = Новый Структура; + ПараметрыЗадания.Вставить("ОбластьДанных", ОбластьДанных); + ПараметрыЗадания.Вставить("ИмяМетода", ИмяМетода); + + МодульОчередьЗаданий = ОбщегоНазначения.ОбщийМодуль("ОчередьЗаданий"); + СписокЗаданий = МодульОчередьЗаданий.ПолучитьЗадания(ПараметрыЗадания); + ПараметрыЗадания = Новый Структура("Использование", Использование); + Для Каждого Задание Из СписокЗаданий Цикл + МодульОчередьЗаданий.ИзменитьЗадание(Задание.Идентификатор, ПараметрыЗадания); + КонецЦикла; + КонецЕсли; + + Иначе + + МассивЗаданий = РегламентныеЗадания.ПолучитьРегламентныеЗадания(Новый Структура("Метаданные", СтрокаЗадание.РегламентноеЗадание)); + + Для каждого Задание Из МассивЗаданий Цикл + + Если Задание.Использование <> Использование Тогда + + Задание.Использование = Использование; + Задание.Записать(); + + КонецЕсли; + КонецЦикла; + + КонецЕсли; + КонецЦикла; + +КонецПроцедуры + // Возвращает новую таблицу свойств фоновых заданий. // // Возвращаемое значение: diff --git a/SSL/src/CommonModules/РезервноеКопированиеИБВызовСервера/Module.bsl b/SSL/src/CommonModules/РезервноеКопированиеИБВызовСервера/Module.bsl index a0d5f5bd8..826ae5695 100644 --- a/SSL/src/CommonModules/РезервноеКопированиеИБВызовСервера/Module.bsl +++ b/SSL/src/CommonModules/РезервноеКопированиеИБВызовСервера/Module.bsl @@ -22,9 +22,33 @@ // Параметры: // НачальнаяНастройка - Булево - признак начальной настройки. // -Функция СформироватьДатыСледующегоАвтоматическогоКопирования(НачальнаяНастройка = Ложь) Экспорт +Функция СформироватьДатыСледующегоАвтоматическогоКопирования() Экспорт - Возврат РезервноеКопированиеИБСервер.СформироватьДатыСледующегоАвтоматическогоКопирования(НачальнаяНастройка); + Результат = Новый Структура; + НастройкиРезервногоКопирования = РезервноеКопированиеИБСервер.НастройкиРезервногоКопирования(); + + ТекущаяДата = ТекущаяДатаСеанса(); + + РасписаниеКопирования = НастройкиРезервногоКопирования.РасписаниеКопирования; + ПериодПовтораВТечениеДня = РасписаниеКопирования.ПериодПовтораВТечениеДня; + ПериодПовтораДней = РасписаниеКопирования.ПериодПовтораДней; + + Если ПериодПовтораВТечениеДня <> 0 Тогда + Значение = ТекущаяДата + ПериодПовтораВТечениеДня; + ИначеЕсли ПериодПовтораДней <> 0 Тогда + Значение = ТекущаяДата + ПериодПовтораДней * 3600 * 24; + Иначе + Значение = НачалоДня(КонецДня(ТекущаяДата) + 1); + КонецЕсли; + Результат.Вставить("МинимальнаяДатаСледующегоАвтоматическогоРезервногоКопирования", Значение); + + ЗаполнитьЗначенияСвойств(НастройкиРезервногоКопирования, Результат); + РезервноеКопированиеИБСервер.УстановитьПараметрыРезервногоКопирования(НастройкиРезервногоКопирования); + + ЕстьАктивныеПользователи = СоединенияИБ.КоличествоСеансовИнформационнойБазы(Ложь, Ложь) > 1; + Результат.Вставить("ЕстьАктивныеПользователи", ЕстьАктивныеПользователи); + + Возврат Результат; КонецФункции @@ -40,25 +64,4 @@ КонецПроцедуры -// Возвращает признак наличия у пользователя полных прав. -// -// Возвращаемое значение - Булево - Истина, если это полноправный пользователь. -// -Функция ЕстьПраваНаОповещениеОНастройкеРезервногоКопирования() Экспорт - - Возврат РезервноеКопированиеИБСервер.ЕстьПраваНаОповещениеОНастройкеРезервногоКопирования(); - -КонецФункции - -// Сохраняет параметры резервного копирования. -// -// Параметры: -// СтруктураПараметров - Структура - параметры резервного копирования. -// -Процедура УстановитьПараметрыРезервногоКопирования(СтруктураПараметров) Экспорт - - РезервноеКопированиеИБСервер.УстановитьПараметрыРезервногоКопирования(СтруктураПараметров); - -КонецПроцедуры - #КонецОбласти diff --git a/SSL/src/CommonModules/РезервноеКопированиеИБКлиент/Module.bsl b/SSL/src/CommonModules/РезервноеКопированиеИБКлиент/Module.bsl index ae05d02a8..8e44123e9 100644 --- a/SSL/src/CommonModules/РезервноеКопированиеИБКлиент/Module.bsl +++ b/SSL/src/CommonModules/РезервноеКопированиеИБКлиент/Module.bsl @@ -3,6 +3,16 @@ // //////////////////////////////////////////////////////////////////////////////// +#Область ПрограммныйИнтерфейс + +Процедура ОткрытьФормуРезервногоКопирования(Параметры = Неопределено) Экспорт + + ОткрытьФорму("Обработка.РезервноеКопированиеИБ.Форма.РезервноеКопированиеДанных", Параметры); + +КонецПроцедуры + +#КонецОбласти + #Область СлужебныйПрограммныйИнтерфейс // Процедура проверяет необходимость проведения резервного копирования @@ -100,11 +110,7 @@ // Процедура ПриПредложенииПользователюСоздатьРезервнуюКопию() Экспорт - Если СтандартныеПодсистемыКлиентПовтИсп.ПараметрыРаботыКлиента().ИнформационнаяБазаФайловая Тогда - - ОткрытьФормуРезервногоКопирования(); - - КонецЕсли; + ОткрытьФормуРезервногоКопирования(); КонецПроцедуры @@ -153,37 +159,16 @@ Если СтандартныеПодсистемыКлиентПовтИсп.ПараметрыРаботыКлиента().ИнформационнаяБазаФайловая Тогда - Возврат "Обработка.НастройкаРезервногоКопированияИБ.Форма.Форма"; + Возврат "Обработка.НастройкаРезервногоКопированияИБ.Форма.НастройкаРезервногоКопирования"; Иначе - Возврат "Обработка.НастройкаРезервногоКопированияИБ.Форма.НапоминаниеКлиентСервер"; + Возврат "Обработка.НастройкаРезервногоКопированияИБ.Форма.НастройкаРезервногоКопированияКлиентСервер"; КонецЕсли; КонецФункции -// Открывает форму для запуска процесса резервного копирования. -// Параметры: -// Владелец - Произвольный - Владелец для открываемой формы. -// ПараметрыОткрытияФормы - Структура - Параметры окна, см ОткрытьФорму(). -// -Функция ОткрытьФормуРезервногоКопирования(Знач Владелец = Неопределено, Знач ПараметрыОткрытияФормы = Неопределено) Экспорт - - Параметры = Новый Структура("Параметры, Владелец, Уникальность, Окно, НавигационнаяСсылка, ОписаниеОповещенияОЗакрытии, РежимОткрытияОкна"); - Если ПараметрыОткрытияФормы <> Неопределено Тогда - ЗаполнитьЗначенияСвойств(Параметры, ПараметрыОткрытияФормы); - КонецЕсли; - - ВладелецФормы = ?(Владелец = Неопределено, Параметры.Владелец, Владелец); - - ОткрытьФорму("Обработка.РезервноеКопированиеИБ.Форма.РезервноеКопированиеДанных", - Параметры.Параметры, ВладелецФормы, - Параметры.Уникальность, Параметры.Окно, Параметры.НавигационнаяСсылка, Параметры.ОписаниеОповещенияОЗакрытии, - Параметры.РежимОткрытияОкна); - -КонецФункции - // Проверяет необходимость запуска автоматического резервного копирования // в процессе работы пользователя, а также повторного оповещения после игнорировании первоначального. // @@ -217,7 +202,7 @@ // // Возвращаемое значение - Булево - Истина, если необходима, Ложь - иначе. // -Функция НеобходимостьАвтоматическогоРезервногоКопирования() Экспорт +Функция НеобходимостьАвтоматическогоРезервногоКопирования() Перем РасписаниеЗначение; ПараметрыРезервногоКопированияИБ = ПараметрыПриложения["СтандартныеПодсистемы.ПараметрыРезервногоКопированияИБ"]; @@ -361,7 +346,7 @@ // Параметры: // ВариантОповещения - Строка - результат проверки на посылку оповещения. // -Процедура ОповеститьПользователяОРезервномКопировании(ВариантОповещения) Экспорт +Процедура ОповеститьПользователяОРезервномКопировании(ВариантОповещения) ТекстПояснения = ""; Если ВариантОповещения = "Просрочено" Тогда @@ -373,9 +358,8 @@ ИначеЕсли ВариантОповещения = "ЕщеНеНастроено" Тогда ИмяФормыНастроек = "e1cib/app/%1"; - ИмяФормыНастроек = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - ИмяФормыНастроек, ИмяФормыНастроекРезервногоКопирования()); - + ИмяФормыНастроек = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ИмяФормыНастроек, ИмяФормыНастроекРезервногоКопирования()); + ТекстПояснения = НСтр("ru = 'Рекомендуется настроить резервное копирование информационной базы.'"); ПоказатьОповещениеПользователя(НСтр("ru = 'Резервное копирование'"), ИмяФормыНастроек, ТекстПояснения, БиблиотекаКартинок.Предупреждение32); @@ -387,28 +371,14 @@ КонецПроцедуры -// Получает каталог файла по его имени. -// -// Параметры: ПутьКФайлу - Строка, путь к указанному файлу. -// -// Возвращаемое значение: Строка, путь к каталогу с указанным файлом. -// -Функция ПолучитьКаталогФайла(Знач ПутьКФайлу) Экспорт - ПозицияСимвола = ПолучитьНомерПоследнегоСимвола(ПутьКФайлу, "\"); - Если ПозицияСимвола > 1 Тогда - Возврат Сред(ПутьКФайлу, 1, ПозицияСимвола - 1); - Иначе - Возврат ""; - КонецЕсли; -КонецФункции - // Возвращает тип события журнала регистрации для данной подсистемы. // // Возвращаемое значение - Строка - тип события журнала регистрации. // Функция СобытиеЖурналаРегистрации() Экспорт - Возврат НСтр("ru = 'Резервное копирование информационной базы'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()); + Возврат НСтр("ru = 'Резервное копирование информационной базы'", + СтандартныеПодсистемыКлиентПовтИсп.ПараметрыРаботыКлиентаПриЗапуске().КодОсновногоЯзыка); КонецФункции @@ -424,39 +394,53 @@ СтруктураПараметров.Вставить("ИмяФайлаПрограммы", СтандартныеПодсистемыКлиент.ИмяИсполняемогоФайлаПриложения()); СтруктураПараметров.Вставить("СобытиеЖурналаРегистрации", НСтр("ru = 'Резервное копирование ИБ'")); - // Определение каталога временных файлов. - ТекущаяДата = ОбщегоНазначенияКлиент.ДатаСеанса(); - СтруктураПараметров.Вставить("КаталогВременныхФайловОбновления" , КаталогВременныхФайлов() + "1Cv8Backup." + Формат(ТекущаяДата, "ДФ=ггММддЧЧммсс") + "\"); + // Определение каталога временных файлов. Использование метода ТекущаяДата оправдано, + // т.к. резервное копирование не работает в клиент-серверном режиме. + КаталогВременныхФайловОбновления = КаталогВременныхФайлов() + "1Cv8Backup." + Формат(ОбщегоНазначенияКлиент.ДатаСеанса(), "ДФ=ггММддЧЧммсс") + "\"; + СтруктураПараметров.Вставить("КаталогВременныхФайловОбновления", КаталогВременныхФайловОбновления); Возврат СтруктураПараметров; #КонецЕсли КонецФункции -// Возвращает инофрмацию о параметрах аутентификации. +// Получение параметров аутентификации пользователя для обновления. +// Создает виртуального пользователя, если в этом есть необходимость. +// +// Возвращаемое значение +// Структура - параметры виртуального пользователя. // Функция ПараметрыАутентификацииАдминистратораОбновления(ПарольАдминистратора) Экспорт - Результат = Новый Структура("ИмяПользователя, - |ПарольПользователя, - |СтрокаПодключения, - |ПараметрыАутентификации, - |СтрокаСоединенияИнформационнойБазы", - Неопределено, "", "", "", "", ""); + Результат = Новый Структура("ИмяПользователя, ПарольПользователя, СтрокаПодключения, СтрокаСоединенияИнформационнойБазы"); - ТекущиеСоединения = СоединенияИБВызовСервера.ИнформацияОСоединениях(Истина, ПараметрыПриложения["СтандартныеПодсистемы.СообщенияДляЖурналаРегистрации"]); + ТекущиеСоединения = СоединенияИБВызовСервера.ИнформацияОСоединениях(Истина, + ПараметрыПриложения["СтандартныеПодсистемы.СообщенияДляЖурналаРегистрации"]); Результат.СтрокаСоединенияИнформационнойБазы = ТекущиеСоединения.СтрокаСоединенияИнформационнойБазы; // Диагностика случая, когда ролевой безопасности в системе не предусмотрено. // Т.е. ситуация, когда любой пользователь «может» в системе все. - Если НЕ ТекущиеСоединения.ЕстьАктивныеПользователи Тогда + Если Не ТекущиеСоединения.ЕстьАктивныеПользователи Тогда Возврат Результат; КонецЕсли; - Пользователь = СтандартныеПодсистемыКлиентПовтИсп.ПараметрыРаботыКлиента().ИнформацияОПользователе.Имя; + Результат.ИмяПользователя = СтандартныеПодсистемыКлиентПовтИсп.ПараметрыРаботыКлиентаПриЗапуске().ИмяТекущегоПользователя; + Результат.ПарольПользователя = СтрокаUnicode(ПарольАдминистратора); + Результат.СтрокаПодключения = "Usr=""{0}"";Pwd=""{1}"""; + Возврат Результат; + +КонецФункции + +Функция СтрокаUnicode(Строка) Экспорт + + Результат = ""; + + Для НомерСимвола = 1 По СтрДлина(Строка) Цикл + + Символ = Формат(КодСимвола(Сред(Строка, НомерСимвола, 1)), "ЧГ=0"); + Символ = СтроковыеФункцииКлиентСервер.ДополнитьСтроку(Символ, 4); + Результат = Результат + Символ; + + КонецЦикла; - Результат.ИмяПользователя = Пользователь; - Результат.ПарольПользователя = ПарольАдминистратора; - Результат.СтрокаПодключения = "Usr=""" + Пользователь + """;Pwd=""" + ПарольАдминистратора + """;"; - Результат.ПараметрыАутентификации = "/N""" + Пользователь + """ /P""" + ПарольАдминистратора + """ /WA-"; Возврат Результат; КонецФункции @@ -467,15 +451,17 @@ // В базовых версиях проверку подключения не осуществляем; // при некорректном вводе имени и пароля обновление завершится неуспешно. - Если СтандартныеПодсистемыКлиентПовтИсп.ПараметрыРаботыКлиента().ЭтоБазоваяВерсияКонфигурации Тогда - Возврат Истина; + РезультатПодключения = Новый Структура("ОшибкаПодключенияКомпоненты, КраткоеОписаниеОшибки", Ложь, ""); + ПараметрыРаботыКлиентаПриЗапуске = СтандартныеПодсистемыКлиентПовтИсп.ПараметрыРаботыКлиентаПриЗапуске(); + Если ПараметрыРаботыКлиентаПриЗапуске.ЭтоБазоваяВерсияКонфигурации Тогда + Возврат РезультатПодключения; КонецЕсли; ОбщегоНазначенияКлиент.ЗарегистрироватьCOMСоединитель(Ложь); ПараметрыПодключения = ОбщегоНазначенияКлиентСервер.СтруктураПараметровДляУстановкиВнешнегоСоединения(); - ПараметрыПодключения.КаталогИнформационнойБазы = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(СтрокаСоединенияИнформационнойБазы(), """")[1]; - ПараметрыПодключения.ИмяПользователя = СтандартныеПодсистемыКлиентПовтИсп.ПараметрыРаботыКлиента().ИнформацияОПользователе.Имя; + ПараметрыПодключения.КаталогИнформационнойБазы = СтрРазделить(СтрокаСоединенияИнформационнойБазы(), """")[1]; + ПараметрыПодключения.ИмяПользователя = ПараметрыРаботыКлиентаПриЗапуске.ИмяТекущегоПользователя; ПараметрыПодключения.ПарольПользователя = ПарольАдминистратора; Результат = ОбщегоНазначенияКлиентСервер.УстановитьВнешнееСоединениеСБазой(ПараметрыПодключения); @@ -487,7 +473,9 @@ КонецЕсли; - Возврат Не Результат.ОшибкаПодключенияКомпоненты; + ЗаполнитьЗначенияСвойств(РезультатПодключения, Результат); + + Возврат РезультатПодключения; КонецФункции @@ -531,27 +519,6 @@ КонецФункции -// Возвращает позицию последнего передаваемого символа. -// -// Параметры: -// ИсходнаяСтрока - Строка - строка, в которой осуществляется поиск. -// СимволПоиска - Строка - символ поиска. -// -// Возвращаемое значение - Число - позиция символа. -// -Функция ПолучитьНомерПоследнегоСимвола(Знач ИсходнаяСтрока, Знач СимволПоиска) - ПозицияСимвола = СтрДлина(ИсходнаяСтрока); - Пока ПозицияСимвола >= 1 Цикл - - Если Сред(ИсходнаяСтрока, ПозицияСимвола, 1) = СимволПоиска Тогда - Возврат ПозицияСимвола; - КонецЕсли; - - ПозицияСимвола = ПозицияСимвола - 1; - КонецЦикла; - Возврат 0; -КонецФункции - Функция КоличествоСекундВПериоде(Период, ТипПериода) Если ТипПериода = "День" Тогда diff --git a/SSL/src/CommonModules/РезервноеКопированиеИБСервер/Module.bsl b/SSL/src/CommonModules/РезервноеКопированиеИБСервер/Module.bsl index 514f0bd7f..3f40b5595 100644 --- a/SSL/src/CommonModules/РезервноеКопированиеИБСервер/Module.bsl +++ b/SSL/src/CommonModules/РезервноеКопированиеИБСервер/Module.bsl @@ -28,15 +28,15 @@ // СЕРВЕРНЫЕ ОБРАБОТЧИКИ. - СерверныеОбработчики["СтандартныеПодсистемы.БазоваяФункциональность\ПриДобавленииПараметровРаботыКлиентскойЛогикиСтандартныхПодсистемПриЗавершении"].Добавить( + СерверныеОбработчики["СтандартныеПодсистемы.БазоваяФункциональность\ПриДобавленииПараметровРаботыКлиентаПриЗавершении"].Добавить( "РезервноеКопированиеИБСервер"); СерверныеОбработчики[ - "СтандартныеПодсистемы.БазоваяФункциональность\ПриДобавленииПараметровРаботыКлиентскойЛогикиСтандартныхПодсистемПриЗапуске"].Добавить( + "СтандартныеПодсистемы.БазоваяФункциональность\ПриДобавленииПараметровРаботыКлиентаПриЗапуске"].Добавить( "РезервноеКопированиеИБСервер"); СерверныеОбработчики[ - "СтандартныеПодсистемы.БазоваяФункциональность\ПриДобавленииПараметровРаботыКлиентскойЛогикиСтандартныхПодсистем"].Добавить( + "СтандартныеПодсистемы.БазоваяФункциональность\ПриДобавленииПараметровРаботыКлиента"].Добавить( "РезервноеКопированиеИБСервер"); СерверныеОбработчики["СтандартныеПодсистемы.ОбновлениеВерсииИБ\ПриДобавленииОбработчиковОбновления"].Добавить( @@ -52,6 +52,46 @@ КонецПроцедуры +// Возвращает начальное заполнение настроек автоматического резервного копирования. +// +// Параметры: +// СохранятьПараметры - сохранять или нет параметры в хранилище настроек. +// +// Возвращаемое значение - Структура - начальное заполнение параметров резервного копирования. +// +Функция НачальноеЗаполнениеНастроекРезервногоКопирования(СохранятьПараметры = Истина) Экспорт + + Параметры = Новый Структура; + + Параметры.Вставить("ВыполнятьАвтоматическоеРезервноеКопирование", Ложь); + Параметры.Вставить("РезервноеКопированиеНастроено", Ложь); + + Параметры.Вставить("ДатаПоследнегоОповещения", '00010101'); + Параметры.Вставить("ДатаПоследнегоРезервногоКопирования", '00010101'); + Параметры.Вставить("МинимальнаяДатаСледующегоАвтоматическогоРезервногоКопирования", '29990101'); + + Параметры.Вставить("РасписаниеКопирования", ОбщегоНазначенияКлиентСервер.РасписаниеВСтруктуру(Новый РасписаниеРегламентногоЗадания)); + Параметры.Вставить("КаталогХраненияРезервныхКопий", ""); + Параметры.Вставить("КаталогХраненияРезервныхКопийПриРучномЗапуске", ""); // При ручном выполнении + Параметры.Вставить("ПроведеноКопирование", Ложь); + Параметры.Вставить("ПроведеноВосстановление", Ложь); + Параметры.Вставить("РезультатКопирования", Неопределено); + Параметры.Вставить("ИмяФайлаРезервнойКопии", ""); + Параметры.Вставить("ВариантВыполнения", "ПоРасписанию"); + Параметры.Вставить("ПроцессВыполняется", Ложь); + Параметры.Вставить("АдминистраторИБ", ""); + Параметры.Вставить("ПарольАдминистратораИБ", ""); + Параметры.Вставить("ПараметрыУдаления", ПараметрыУдаленияРезервныхКопийПоУмолчанию()); + Параметры.Вставить("РучнойЗапускПоследнегоРезервногоКопирования", Истина); + + Если СохранятьПараметры Тогда + УстановитьПараметрыРезервногоКопирования(Параметры); + КонецЕсли; + + Возврат Параметры; + +КонецФункции + #КонецОбласти #Область СлужебныеПроцедурыИФункции @@ -70,7 +110,7 @@ И НастройкиРезервногоКопирования.ВариантВыполнения = "ПриЗавершенииРаботы"); ПараметрыПриЗавершении = Новый Структура; - ПараметрыПриЗавершении.Вставить("ДоступностьРолейОповещения", ЕстьПраваНаОповещениеОНастройкеРезервногоКопирования()); + ПараметрыПриЗавершении.Вставить("ДоступностьРолейОповещения", Пользователи.ЭтоПолноправныйПользователь(,Истина)); ПараметрыПриЗавершении.Вставить("ВыполнятьПриЗавершенииРаботы", ВыполнятьПриЗавершенииРаботы); Возврат ПараметрыПриЗавершении; @@ -128,7 +168,7 @@ // Функция ПараметрыРезервногоКопирования() Экспорт - Параметры = ОбщегоНазначения.ХранилищеОбщихНастроекЗагрузить("ПараметрыРезервногоКопирования"); + Параметры = ОбщегоНазначения.ХранилищеОбщихНастроекЗагрузить("ПараметрыРезервногоКопирования", ""); Если Параметры = Неопределено Тогда Параметры = НачальноеЗаполнениеНастроекРезервногоКопирования(); Иначе @@ -179,7 +219,7 @@ // СтруктураПараметров - Структура - параметры резервного копирования. // Процедура УстановитьПараметрыРезервногоКопирования(СтруктураПараметров, ТекущийПользователь = Неопределено) Экспорт - ОбщегоНазначения.ХранилищеОбщихНастроекСохранить("ПараметрыРезервногоКопирования", , СтруктураПараметров); + ОбщегоНазначения.ХранилищеОбщихНастроекСохранить("ПараметрыРезервногоКопирования", "", СтруктураПараметров); Если ТекущийПользователь <> Неопределено Тогда ПараметрыКопирования = Новый Структура("Пользователь", ТекущийПользователь); Константы.ПараметрыРезервногоКопирования.Установить(Новый ХранилищеЗначения(ПараметрыКопирования)); @@ -191,7 +231,7 @@ // Возвращаемое значение: // Булево - Истина, если настал момент проведения резервного копирования. // -Функция НеобходимостьАвтоматическогоРезервногоКопирования() Экспорт +Функция НеобходимостьАвтоматическогоРезервногоКопирования() Если Не ОбщегоНазначения.ИнформационнаяБазаФайловая() Тогда Возврат Ложь; @@ -223,42 +263,6 @@ КонецФункции -// Формирует даты ближайшего следующего автоматического резервного копирования в соответствии с расписанием. -// -// Параметры: -// НачальнаяНастройка - Булево - признак начальной настройки. -// -Функция СформироватьДатыСледующегоАвтоматическогоКопирования(НачальнаяНастройка = Ложь) Экспорт - - Результат = Новый Структура; - НастройкиРезервногоКопирования = НастройкиРезервногоКопирования(); - - ТекущаяДата = ТекущаяДатаСеанса(); - Если НачальнаяНастройка Тогда - Результат.Вставить("МинимальнаяДатаСледующегоАвтоматическогоРезервногоКопирования", ТекущаяДата); - Результат.Вставить("ДатаПоследнегоРезервногоКопирования", ТекущаяДата); - Иначе - РасписаниеКопирования = НастройкиРезервногоКопирования.РасписаниеКопирования; - ПериодПовтораВТечениеДня = РасписаниеКопирования.ПериодПовтораВТечениеДня; - ПериодПовтораДней = РасписаниеКопирования.ПериодПовтораДней; - - Если ПериодПовтораВТечениеДня <> 0 Тогда - Значение = ТекущаяДата + ПериодПовтораВТечениеДня; - ИначеЕсли ПериодПовтораДней <> 0 Тогда - Значение = ТекущаяДата + ПериодПовтораДней * 3600 * 24; - Иначе - Значение = НачалоДня(КонецДня(ТекущаяДата) + 1); - КонецЕсли; - Результат.Вставить("МинимальнаяДатаСледующегоАвтоматическогоРезервногоКопирования", Значение); - КонецЕсли; - - ЗаполнитьЗначенияСвойств(НастройкиРезервногоКопирования, Результат); - УстановитьПараметрыРезервногоКопирования(НастройкиРезервногоКопирования); - - Возврат Результат; - -КонецФункции - // Возвращает значение настройки "Статус резервного копирования" в части результата. // Используется при начале работы системы для показа формы с результатами резервного копирования. // @@ -270,19 +274,6 @@ КонецПроцедуры -// Устанавливает значение настройки "ДатаПоследнегоРезервногоКопирования". -// -// Параметры: -// ДатаКопирования - дата и время последнего резервного копирования. -// -Процедура УстановитьДатуПоследнегоКопирования(ДатаКопирования) Экспорт - - СтруктураПараметров = ПараметрыРезервногоКопирования(); - СтруктураПараметров.ДатаПоследнегоРезервногоКопирования = ДатаКопирования; - УстановитьПараметрыРезервногоКопирования(СтруктураПараметров); - -КонецПроцедуры - // Устанавливает дату последнего оповещения пользователя. // // Параметры: @@ -325,7 +316,7 @@ Возврат Неопределено; // Не выполнен вход в область данных. КонецЕсли; - Если Не ЕстьПраваНаОповещениеОНастройкеРезервногоКопирования() Тогда + Если Не Пользователи.ЭтоПолноправныйПользователь(,Истина) Тогда Возврат Неопределено; // Текущий пользователь не обладает необходимыми правами. КонецЕсли; @@ -338,7 +329,9 @@ ТекущаяДатаСеанса = ТекущаяДатаСеанса(); Результат.ДатаПоследнегоРезервногоКопирования = ТекущаяДатаСеанса; // Сохранение даты последнего резервного копирования в хранилище общих настроек. - УстановитьДатуПоследнегоКопирования(ТекущаяДатаСеанса); + СтруктураПараметров = ПараметрыРезервногоКопирования(); + СтруктураПараметров.ДатаПоследнегоРезервногоКопирования = ТекущаяДатаСеанса; + УстановитьПараметрыРезервногоКопирования(СтруктураПараметров); КонецЕсли; Если Результат.ПроведеноВосстановление Тогда @@ -378,7 +371,7 @@ Функция ВариантОповещения() Результат = "НеОповещать"; - Если Не ЕстьПраваНаОповещениеОНастройкеРезервногоКопирования() Тогда + Если Не Пользователи.ЭтоПолноправныйПользователь(,Истина) Тогда Возврат Результат; КонецЕсли; @@ -413,52 +406,25 @@ КонецФункции -// Возвращает начальное заполнение настроек автоматического резервного копирования. +// Возвращает информацию о текущем пользователе // -// Параметры: -// СохранятьПараметры - сохранять или нет параметры в хранилище настроек. -// -// Возвращаемое значение - Структура - начальное заполнение параметров резервного копирования. -// -Функция НачальноеЗаполнениеНастроекРезервногоКопирования(СохранятьПараметры = Истина) Экспорт +Функция ИнформацияОПользователе() Экспорт - Параметры = Новый Структура; + ИнформацияОПользователе = Новый Структура("Имя, ТребуетсяВводПароля", "", Ложь); + ИспользуютсяПользователи = ПользователиИнформационнойБазы.ПолучитьПользователей().Количество() > 0; - Параметры.Вставить("ВыполнятьАвтоматическоеРезервноеКопирование", Ложь); - Параметры.Вставить("РезервноеКопированиеНастроено", Ложь); - - Параметры.Вставить("ДатаПоследнегоОповещения", '00010101'); - Параметры.Вставить("ДатаПоследнегоРезервногоКопирования", '00010101'); - Параметры.Вставить("МинимальнаяДатаСледующегоАвтоматическогоРезервногоКопирования", '29990101'); - - Параметры.Вставить("РасписаниеКопирования", ОбщегоНазначенияКлиентСервер.РасписаниеВСтруктуру(Новый РасписаниеРегламентногоЗадания)); - Параметры.Вставить("КаталогХраненияРезервныхКопий", ""); - Параметры.Вставить("КаталогХраненияРезервныхКопийПриРучномЗапуске", ""); // При ручном выполнении - Параметры.Вставить("ПроведеноКопирование", Ложь); - Параметры.Вставить("ПроведеноВосстановление", Ложь); - Параметры.Вставить("РезультатКопирования", Неопределено); - Параметры.Вставить("ИмяФайлаРезервнойКопии", ""); - Параметры.Вставить("ВариантВыполнения", "ПоРасписанию"); - Параметры.Вставить("ПроцессВыполняется", Ложь); - Параметры.Вставить("АдминистраторИБ", ""); - Параметры.Вставить("ПарольАдминистратораИБ", ""); - Параметры.Вставить("ПараметрыУдаления", ПараметрыУдаленияРезервныхКопийПоУмолчанию()); - Параметры.Вставить("РучнойЗапускПоследнегоРезервногоКопирования", Истина); - - Если СохранятьПараметры Тогда - УстановитьПараметрыРезервногоКопирования(Параметры); + Если Не ИспользуютсяПользователи Тогда + Возврат ИнформацияОПользователе; КонецЕсли; - Возврат Параметры; + ТекущийПользователь = СтандартныеПодсистемыСервер.ТекущийПользователь(); + ТребуетсяВводПароля = ТекущийПользователь.ПарольУстановлен И ТекущийПользователь.АутентификацияСтандартная; + + ИнформацияОПользователе.Имя = ТекущийПользователь.Имя; + ИнформацияОПользователе.ТребуетсяВводПароля = ТребуетсяВводПароля; + + Возврат ИнформацияОПользователе; -КонецФункции - -// Возвращает признак наличия у пользователя полных прав. -// -// Возвращаемое значение - Булево - Истина, если это полноправный пользователь. -// -Функция ЕстьПраваНаОповещениеОНастройкеРезервногоКопирования() Экспорт - Возврат Пользователи.ЭтоПолноправныйПользователь(,Истина); КонецФункции // Процедура, вызываемая из скрипта через com-соединение. @@ -733,7 +699,7 @@ СохраненныйПользователь = Неопределено; Для Каждого Пользователь Из ПользователиИнформационнойБазы.ПолучитьПользователей() Цикл - Настройки = ОбщегоНазначения.ХранилищеОбщихНастроекЗагрузить("ПараметрыРезервногоКопирования",,,, Пользователь.Имя); + Настройки = ОбщегоНазначения.ХранилищеОбщихНастроекЗагрузить("ПараметрыРезервногоКопирования", "",,, Пользователь.Имя); Если ТипЗнч(Настройки) <> Тип("Структура") Тогда Продолжить; @@ -762,6 +728,7 @@ КонецЕсли; КонецПроцедуры + //////////////////////////////////////////////////////////////////////////////// // Обработчики событий подсистем БСП. @@ -773,7 +740,7 @@ // Параметры: // Параметры - Структура - структура параметров. // -Процедура ПриДобавленииПараметровРаботыКлиентскойЛогикиСтандартныхПодсистемПриЗавершении(Параметры) Экспорт +Процедура ПриДобавленииПараметровРаботыКлиентаПриЗавершении(Параметры) Экспорт Параметры.Вставить("РезервноеКопированиеИБ", ПараметрыПриЗавершенииРаботы()); @@ -785,7 +752,7 @@ // Параметры: // Параметры - Структура - структура параметров. // -Процедура ПриДобавленииПараметровРаботыКлиентскойЛогикиСтандартныхПодсистемПриЗапуске(Параметры) Экспорт +Процедура ПриДобавленииПараметровРаботыКлиентаПриЗапуске(Параметры) Экспорт Параметры.Вставить("РезервноеКопированиеИБ", НастройкиРезервногоКопирования(Истина)); @@ -797,7 +764,7 @@ // Параметры: // Параметры - Структура - структура параметров. // -Процедура ПриДобавленииПараметровРаботыКлиентскойЛогикиСтандартныхПодсистем(Параметры) Экспорт +Процедура ПриДобавленииПараметровРаботыКлиента(Параметры) Экспорт Параметры.Вставить("РезервноеКопированиеИБ", НастройкиРезервногоКопирования()); @@ -870,22 +837,19 @@ // Процедура ПриЗаполненииСпискаТекущихДел(ТекущиеДела) Экспорт - ЭтоВебКлиент = ОбщегоНазначенияКлиентСервер.ЭтоВебКлиент(); - Если Не ОбщегоНазначения.ИнформационнаяБазаФайловая() // В клиент-сервере выполняется сторонними средствами. - Или ЭтоВебКлиент Тогда // В веб-клиенте не поддерживается. + Если ОбщегоНазначенияКлиентСервер.ЭтоВебКлиент() Тогда // В веб-клиенте не поддерживается. Возврат; КонецЕсли; - МодульТекущиеДелаСлужебный = ОбщегоНазначения.ОбщийМодуль("ТекущиеДелаСлужебный"); - ОтключеноУведомлениеОНастройкеРезервногоКопирования = МодульТекущиеДелаСлужебный.ДелоОтключено("НастроитьРезервноеКопирование"); - ОтключеноУведомлениеОВыполненииРезервногоКопирования = МодульТекущиеДелаСлужебный.ДелоОтключено("ВыполнитьРезервноеКопирование"); + МодульТекущиеДелаСервер = ОбщегоНазначения.ОбщийМодуль("ТекущиеДелаСервер"); + ОтключеноУведомлениеОНастройкеРезервногоКопирования = МодульТекущиеДелаСервер.ДелоОтключено("НастроитьРезервноеКопирование"); + ОтключеноУведомлениеОВыполненииРезервногоКопирования = МодульТекущиеДелаСервер.ДелоОтключено("ВыполнитьРезервноеКопирование"); Если Не ПравоДоступа("Просмотр", Метаданные.Обработки.НастройкаРезервногоКопированияИБ) Или (ОтключеноУведомлениеОНастройкеРезервногоКопирования И ОтключеноУведомлениеОВыполненииРезервногоКопирования) Тогда Возврат; КонецЕсли; - МодульТекущиеДелаСервер = ОбщегоНазначения.ОбщийМодуль("ТекущиеДелаСервер"); НастройкиРезервногоКопирования = НастройкиРезервногоКопирования(); ВариантОповещения = НастройкиРезервногоКопирования.ПараметрОповещения; @@ -894,20 +858,21 @@ // не делается проверка существования подсистемы. Разделы = МодульТекущиеДелаСервер.РазделыДляОбъекта(Метаданные.Обработки.НастройкаРезервногоКопированияИБ.ПолноеИмя()); - Если Разделы = Неопределено Тогда - Возврат; - КонецЕсли; - НеобходимоВыполнитьРезервноеКопирование = НеобходимостьАвтоматическогоРезервногоКопирования(); Для Каждого Раздел Из Разделы Цикл Если Не ОтключеноУведомлениеОНастройкеРезервногоКопирования Тогда + + ИмяФормыНастройкиРезервногоКопирования = ?(ОбщегоНазначения.ИнформационнаяБазаФайловая(), + "Обработка.НастройкаРезервногоКопированияИБ.Форма.НастройкаРезервногоКопирования", + "Обработка.НастройкаРезервногоКопированияИБ.Форма.НастройкаРезервногоКопированияКлиентСервер"); + Дело = ТекущиеДела.Добавить(); Дело.Идентификатор = "НастроитьРезервноеКопирование" + СтрЗаменить(Раздел.ПолноеИмя(), ".", ""); Дело.ЕстьДела = ВариантОповещения = "ЕщеНеНастроено"; Дело.Представление = НСтр("ru = 'Настроить резервное копирование'"); Дело.Важное = Истина; - Дело.Форма = "Обработка.НастройкаРезервногоКопированияИБ.Форма.Форма"; + Дело.Форма = ИмяФормыНастройкиРезервногоКопирования; Дело.Владелец = Раздел; КонецЕсли; diff --git a/SSL/src/CommonModules/РезервноеКопированиеОбластейДанных/Module.bsl b/SSL/src/CommonModules/РезервноеКопированиеОбластейДанных/Module.bsl index 5a30ca553..fdc207342 100644 --- a/SSL/src/CommonModules/РезервноеКопированиеОбластейДанных/Module.bsl +++ b/SSL/src/CommonModules/РезервноеКопированиеОбластейДанных/Module.bsl @@ -38,7 +38,7 @@ // СЕРВЕРНЫЕ ОБРАБОТЧИКИ. - СерверныеОбработчики["СтандартныеПодсистемы.БазоваяФункциональность\ПриДобавленииПараметровРаботыКлиентскойЛогикиСтандартныхПодсистем"].Добавить( + СерверныеОбработчики["СтандартныеПодсистемы.БазоваяФункциональность\ПриДобавленииПараметровРаботыКлиента"].Добавить( "РезервноеКопированиеОбластейДанных"); Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаВМоделиСервиса.ОчередьЗаданий") Тогда @@ -88,7 +88,7 @@ // Параметры: // Параметры - Структура - структура параметров. // -Процедура ПриДобавленииПараметровРаботыКлиентскойЛогикиСтандартныхПодсистем(Параметры) Экспорт +Процедура ПриДобавленииПараметровРаботыКлиента(Параметры) Экспорт Параметры.Вставить("РезервноеКопированиеОбластейДанных", ПолучитьФункциональнуюОпцию("ПоддержкаРезервногоКопирования")); @@ -434,78 +434,97 @@ МодульВыгрузкаЗагрузкаОбластейДанных = ОбщегоНазначения.ОбщийМодуль("ВыгрузкаЗагрузкаОбластейДанных"); - ИмяАрхива = Неопределено; - ИмяАрхива = МодульВыгрузкаЗагрузкаОбластейДанных.ВыгрузитьТекущуюОбластьДанныхВАрхив(); - - ДатаСозданияКопии = ТекущаяУниверсальнаяДата(); - - ОписаниеАрхива = Новый Файл(ИмяАрхива); - РазмерФайла = ОписаниеАрхива.Размер(); - - ИДФайла = РаботаВМоделиСервиса.ПоместитьФайлВХранилищеМенеджераСервиса(ОписаниеАрхива); + ИмяАрхива = Неопределено; Попытка - УдалитьФайлы(ИмяАрхива); - Исключение - // При невозможности удаления файла выполнение не должно прерываться. - ЗаписьЖурналаРегистрации(НСтр("ru = 'Создание резервной копии области данных.Не удалось удалить временный файл'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), - УровеньЖурналаРегистрации.Ошибка, , , ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); - КонецПопытки; - ИдКопии = Новый УникальныйИдентификатор; - - ПараметрыСообщения = Новый Структура; - ПараметрыСообщения.Вставить("ОбластьДанных", ОбщегоНазначения.ЗначениеРазделителяСеанса()); - ПараметрыСообщения.Вставить("ИДКопии", ИдКопии); - ПараметрыСообщения.Вставить("ИДФайла", ИДФайла); - ПараметрыСообщения.Вставить("ДатаСоздания", ДатаСозданияКопии); - Для каждого КлючИЗначение Из ФлагиПериодичности Цикл - ПараметрыСообщения.Вставить(КлючИЗначение.Ключ, КлючИЗначение.Значение); - КонецЦикла; - - ОтправитьСообщениеРезервнаяКопияОбластиСоздана(ПараметрыСообщения); - - // Обновление состояния в параметрах. - ОтборЗаданий = Новый Структура; - ОтборЗаданий.Вставить("ИмяМетода", "РезервноеКопированиеОбластейДанных.СозданиеКопий"); - ОтборЗаданий.Вставить("Ключ", "1"); - Задания = ОчередьЗаданий.ПолучитьЗадания(ОтборЗаданий); - Если Задания.Количество() > 0 Тогда - Задание = Задания[0].Идентификатор; + ИмяАрхива = МодульВыгрузкаЗагрузкаОбластейДанных.ВыгрузитьТекущуюОбластьДанныхВАрхив(); - ПараметрыМетода = Новый Массив; - ПараметрыМетода.Добавить(ПараметрыСоздания); + ДатаСозданияКопии = ТекущаяУниверсальнаяДата(); - ОбновленноеСостояние = Новый Структура; - Для каждого ПараметрыПериодичности Из УсловияСозданияКопий Цикл - Если ФлагиПериодичности[ПараметрыПериодичности.Тип] Тогда - ДатаСостояния = ДатаСозданияКопии; - Иначе - ДатаСостояния = СостояниеСоздания[ПараметрыПериодичности.ДатаСоздания]; - КонецЕсли; - - ОбновленноеСостояние.Вставить(ПараметрыПериодичности.ДатаСоздания, ДатаСостояния); + ОписаниеАрхива = Новый Файл(ИмяАрхива); + РазмерФайла = ОписаниеАрхива.Размер(); + + ИДФайла = РаботаВМоделиСервиса.ПоместитьФайлВХранилищеМенеджераСервиса(ОписаниеАрхива); + + Попытка + УдалитьФайлы(ИмяАрхива); + Исключение + // При невозможности удаления файла выполнение не должно прерываться. + ЗаписьЖурналаРегистрации(НСтр("ru = 'Создание резервной копии области данных.Не удалось удалить временный файл'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), + УровеньЖурналаРегистрации.Ошибка, , , ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); + КонецПопытки; + + ИдКопии = Новый УникальныйИдентификатор; + + ПараметрыСообщения = Новый Структура; + ПараметрыСообщения.Вставить("ОбластьДанных", ОбщегоНазначения.ЗначениеРазделителяСеанса()); + ПараметрыСообщения.Вставить("ИДКопии", ИдКопии); + ПараметрыСообщения.Вставить("ИДФайла", ИДФайла); + ПараметрыСообщения.Вставить("ДатаСоздания", ДатаСозданияКопии); + Для каждого КлючИЗначение Из ФлагиПериодичности Цикл + ПараметрыСообщения.Вставить(КлючИЗначение.Ключ, КлючИЗначение.Значение); КонецЦикла; - ПараметрыМетода.Добавить(Новый ФиксированнаяСтруктура(ОбновленноеСостояние)); + ОтправитьСообщениеРезервнаяКопияОбластиСоздана(ПараметрыСообщения); - ПараметрыЗадания = Новый Структура; - ПараметрыЗадания.Вставить("Параметры", ПараметрыМетода); - ОчередьЗаданий.ИзменитьЗадание(Задание, ПараметрыЗадания); - КонецЕсли; - - ПараметрыСобытия = Новый Структура; - Для каждого КлючИЗначение Из ФлагиПериодичности Цикл - ПараметрыСобытия.Вставить(КлючИЗначение.Ключ, КлючИЗначение.Значение); - КонецЦикла; - ПараметрыСобытия.Вставить("ИдКопии", ИдКопии); - ПараметрыСобытия.Вставить("ИдФайла", ИдФайла); - ПараметрыСобытия.Вставить("Размер", РазмерФайла); - ПараметрыСобытия.Вставить("Длительность", ТекущаяУниверсальнаяДата() - НачалоВыполнения); - - ЗаписатьСобытиеВЖурнал( - НСтр("ru = 'Создание'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), - ПараметрыСобытия); + // Обновление состояния в параметрах. + ОтборЗаданий = Новый Структура; + ОтборЗаданий.Вставить("ИмяМетода", "РезервноеКопированиеОбластейДанных.СозданиеКопий"); + ОтборЗаданий.Вставить("Ключ", "1"); + Задания = ОчередьЗаданий.ПолучитьЗадания(ОтборЗаданий); + Если Задания.Количество() > 0 Тогда + Задание = Задания[0].Идентификатор; + + ПараметрыМетода = Новый Массив; + ПараметрыМетода.Добавить(ПараметрыСоздания); + + ОбновленноеСостояние = Новый Структура; + Для каждого ПараметрыПериодичности Из УсловияСозданияКопий Цикл + Если ФлагиПериодичности[ПараметрыПериодичности.Тип] Тогда + ДатаСостояния = ДатаСозданияКопии; + Иначе + ДатаСостояния = СостояниеСоздания[ПараметрыПериодичности.ДатаСоздания]; + КонецЕсли; + + ОбновленноеСостояние.Вставить(ПараметрыПериодичности.ДатаСоздания, ДатаСостояния); + КонецЦикла; + + ПараметрыМетода.Добавить(Новый ФиксированнаяСтруктура(ОбновленноеСостояние)); + + ПараметрыЗадания = Новый Структура; + ПараметрыЗадания.Вставить("Параметры", ПараметрыМетода); + ОчередьЗаданий.ИзменитьЗадание(Задание, ПараметрыЗадания); + КонецЕсли; + + ПараметрыСобытия = Новый Структура; + Для каждого КлючИЗначение Из ФлагиПериодичности Цикл + ПараметрыСобытия.Вставить(КлючИЗначение.Ключ, КлючИЗначение.Значение); + КонецЦикла; + ПараметрыСобытия.Вставить("ИдКопии", ИдКопии); + ПараметрыСобытия.Вставить("ИдФайла", ИдФайла); + ПараметрыСобытия.Вставить("Размер", РазмерФайла); + ПараметрыСобытия.Вставить("Длительность", ТекущаяУниверсальнаяДата() - НачалоВыполнения); + + ЗаписатьСобытиеВЖурнал( + НСтр("ru = 'Создание'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), + ПараметрыСобытия); + + Исключение + + ЗаписьЖурналаРегистрации(НСтр("ru = 'Создание резервной копии области данных'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), + УровеньЖурналаРегистрации.Ошибка, , , ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); + Попытка + Если ИмяАрхива <> Неопределено Тогда + УдалитьФайлы(ИмяАрхива); + КонецЕсли; + Исключение + // При невозможности удаления файла выполнение не должно прерываться. + ЗаписьЖурналаРегистрации(НСтр("ru = 'Создание резервной копии области данных.Не удалось удалить временный файл'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), + УровеньЖурналаРегистрации.Ошибка, , , ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); + КонецПопытки; + + КонецПопытки; КонецПроцедуры @@ -684,7 +703,11 @@ Иначе Если ПараметрыВыгрузки.НомерПопытки > 3 Тогда ОтправитьСообщениеОшибкаАрхивацииОбласти(ПараметрыВыгрузки); + ВызватьИсключение; Иначе + // Отмена задания. + ОтменитьСозданиеРезервнойКопииОбласти(ПараметрыВыгрузки); + // Перепланировать: текущее время области + 10 минут. ПараметрыВыгрузки.НомерПопытки = ПараметрыВыгрузки.НомерПопытки + 1; МоментПовторногоЗапуска = ТекущаяДатаОбласти(ПараметрыВыгрузки.ОбластьДанных); // Сейчас в области. diff --git a/SSL/src/CommonModules/РезервноеКопированиеОбластейДанныхДанныеФормРеализацияWebСервис/Module.bsl b/SSL/src/CommonModules/РезервноеКопированиеОбластейДанныхДанныеФормРеализацияWebСервис/Module.bsl index 730db2aa3..38e8955a3 100644 --- a/SSL/src/CommonModules/РезервноеКопированиеОбластейДанныхДанныеФормРеализацияWebСервис/Module.bsl +++ b/SSL/src/CommonModules/РезервноеКопированиеОбластейДанныхДанныеФормРеализацияWebСервис/Module.bsl @@ -69,14 +69,14 @@ Функция Прокси() УстановитьПривилегированныйРежим(Истина); - АдресМенеджераСервиса = Константы.ВнутреннийАдресМенеджераСервиса.Получить(); + АдресМенеджераСервиса = РаботаВМоделиСервиса.ВнутреннийАдресМенеджераСервиса(); Если Не ЗначениеЗаполнено(АдресМенеджераСервиса) Тогда ВызватьИсключение(НСтр("ru = 'Не установлены параметры связи с менеджером сервиса.'")); КонецЕсли; АдресСервиса = АдресМенеджераСервиса + "/ws/ZoneBackupControl_1_0_2_1?wsdl"; - ИмяПользователя = Константы.ИмяСлужебногоПользователяМенеджераСервиса.Получить(); - ПарольПользователя = Константы.ПарольСлужебногоПользователяМенеджераСервиса.Получить(); + ИмяПользователя = РаботаВМоделиСервиса.ИмяСлужебногоПользователяМенеджераСервиса(); + ПарольПользователя = РаботаВМоделиСервиса.ПарольСлужебногоПользователяМенеджераСервиса(); Прокси = ОбщегоНазначения.WSПрокси(АдресСервиса, "http://www.1c.ru/1cFresh/ZoneBackupControl/1.0.2.1", "ZoneBackupControl_1_0_2_1", , ИмяПользователя, ПарольПользователя, 10); diff --git a/SSL/src/CommonModules/РезервноеКопированиеОбластейДанныхПовтИсп/Module.bsl b/SSL/src/CommonModules/РезервноеКопированиеОбластейДанныхПовтИсп/Module.bsl index fa361dbd4..87d1b8495 100644 --- a/SSL/src/CommonModules/РезервноеКопированиеОбластейДанныхПовтИсп/Module.bsl +++ b/SSL/src/CommonModules/РезервноеКопированиеОбластейДанныхПовтИсп/Module.bsl @@ -43,9 +43,9 @@ УстановитьПривилегированныйРежим(Истина); ПоддерживаемыеВерсии = ОбщегоНазначения.ПолучитьВерсииИнтерфейса( - Константы.ВнутреннийАдресМенеджераСервиса.Получить(), - Константы.ИмяСлужебногоПользователяМенеджераСервиса.Получить(), - Константы.ПарольСлужебногоПользователяМенеджераСервиса.Получить(), + РаботаВМоделиСервиса.ВнутреннийАдресМенеджераСервиса(), + РаботаВМоделиСервиса.ИмяСлужебногоПользователяМенеджераСервиса(), + РаботаВМоделиСервиса.ПарольСлужебногоПользователяМенеджераСервиса(), "РезервноеКопированиеОбластейДанных"); Возврат ПоддерживаемыеВерсии.Найти("1.0.1.1") <> Неопределено; @@ -66,8 +66,8 @@ КонецЕсли; АдресСервиса = АдресМенеджераСервиса + "/ws/ZoneBackupControl?wsdl"; - ИмяПользователя = Константы.ИмяСлужебногоПользователяМенеджераСервиса.Получить(); - ПарольПользователя = Константы.ПарольСлужебногоПользователяМенеджераСервиса.Получить(); + ИмяПользователя = РаботаВМоделиСервиса.ИмяСлужебногоПользователяМенеджераСервиса(); + ПарольПользователя = РаботаВМоделиСервиса.ПарольСлужебногоПользователяМенеджераСервиса(); Прокси = ОбщегоНазначения.WSПрокси(АдресСервиса, "http://www.1c.ru/SaaS/1.0/WS", "ZoneBackupControl", , ИмяПользователя, ПарольПользователя, 10); diff --git a/SSL/src/CommonModules/СоединенияИБ/Module.bsl b/SSL/src/CommonModules/СоединенияИБ/Module.bsl index 6cf161291..280551bbe 100644 --- a/SSL/src/CommonModules/СоединенияИБ/Module.bsl +++ b/SSL/src/CommonModules/СоединенияИБ/Module.bsl @@ -114,17 +114,18 @@ КонецЕсли; УстановитьПривилегированныйРежим(Истина); - Возврат Новый Структура( - "Установлена,Начало,Конец,Сообщение,ИнтервалОжиданияЗавершенияРаботыПользователей,КоличествоСеансов,ТекущаяДатаСеанса", - ТекущийРежим.Установлена, - ТекущийРежим.Начало, - ТекущийРежим.Конец, - ТекущийРежим.Сообщение, - 15 * 60, // М5 минут; интервал ожидания завершения пользователей до момента установки - // блокировки информационной базы (в секундах). - ?(ПолучитьКоличествоСеансов, КоличествоСеансовИнформационнойБазы(), 0), - ПараметрыБлокировки.ТекущаяДата); - + + Результат = Новый Структура; + Результат.Вставить("Установлена", ТекущийРежим.Установлена); + Результат.Вставить("Начало", ТекущийРежим.Начало); + Результат.Вставить("Конец", ТекущийРежим.Конец); + Результат.Вставить("Сообщение", ТекущийРежим.Сообщение); + Результат.Вставить("ИнтервалОжиданияЗавершенияРаботыПользователей", 15 * 60); + Результат.Вставить("КоличествоСеансов", ?(ПолучитьКоличествоСеансов, КоличествоСеансовИнформационнойБазы(), 0)); + Результат.Вставить("ТекущаяДатаСеанса", ПараметрыБлокировки.ТекущаяДата); + + Возврат Результат; + КонецФункции // Снять блокировку информационной базы. @@ -180,9 +181,15 @@ // Функция НовыеПараметрыБлокировкиСоединений() Экспорт - Возврат Новый Структура("Конец,Начало,Сообщение,Установлена,Эксклюзивная", - Дата(1,1,1), Дата(1,1,1), "", Ложь, Ложь); - + Результат = Новый Структура; + Результат.Вставить("Конец", Дата(1,1,1)); + Результат.Вставить("Начало", Дата(1,1,1)); + Результат.Вставить("Сообщение", ""); + Результат.Вставить("Установлена", Ложь); + Результат.Вставить("Эксклюзивная", Ложь); + + Возврат Результат; + КонецФункции // Установить блокировку сеансов области данных. @@ -300,15 +307,149 @@ #Область СлужебныйПрограммныйИнтерфейс -// Заполняет структуру параметров, необходимых для работы клиентского кода -// конфигурации. +// Возвращает текстовую строку со списком активных соединений ИБ. +// Названия соединений разделены символом переноса строки. // // Параметры: -// Параметры - Структура - структура параметров. +// Сообщение - Строка - передаваемая строка. // -Процедура ДобавитьПараметрыРаботыКлиента(Параметры) Экспорт - Параметры.Вставить("ПараметрыБлокировкиСеансов", Новый ФиксированнаяСтруктура(ПараметрыБлокировкиСеансов())); -КонецПроцедуры +// Возвращаемое значение: +// Строка - названия соединений. +// +Функция СообщениеОНеотключенныхСеансах() Экспорт + + Сообщение = НСтр("ru = 'Не удалось отключить сеансы:'"); + НомерТекущегоСеанса = НомерСеансаИнформационнойБазы(); + Для Каждого Сеанс Из ПолучитьСеансыИнформационнойБазы() Цикл + Если Сеанс.НомерСеанса <> НомерТекущегоСеанса Тогда + Сообщение = Сообщение + Символы.ПС + "• " + Сеанс; + КонецЕсли; + КонецЦикла; + + Возврат Сообщение; + +КонецФункции + +// Получить число активных сеансов ИБ. +// +// Параметры: +// УчитыватьКонсоль - Булево - если Ложь, то исключить сеансы консоли кластера серверов. +// Сеансы консоли кластера серверов не препятствуют выполнению +// административных операций (установке монопольного режима и т.п.). +// +// Возвращаемое значение: +// Число - количество активных сеансов ИБ. +// +Функция КоличествоСеансовИнформационнойБазы(УчитыватьКонсоль = Истина, УчитыватьФоновыеЗадания = Истина) Экспорт + + СеансыИБ = ПолучитьСеансыИнформационнойБазы(); + Если УчитыватьКонсоль И УчитыватьФоновыеЗадания Тогда + Возврат СеансыИБ.Количество(); + КонецЕсли; + + Результат = 0; + + Для Каждого СеансИБ Из СеансыИБ Цикл + + Если Не УчитыватьКонсоль И СеансИБ.ИмяПриложения = "SrvrConsole" + Или Не УчитыватьФоновыеЗадания И СеансИБ.ИмяПриложения = "BackgroundJob" Тогда + Продолжить; + КонецЕсли; + + Результат = Результат + 1; + + КонецЦикла; + + Возврат Результат; + +КонецФункции + +// Определяет количество сеансов информационной базы и наличие сеансов, +// которые не могут быть отключены принудительно. Формирует текст сообщения +// об ошибке. +// +Функция ИнформацияОБлокирующихСеансах(ТекстСообщения = "") Экспорт + + ИнформацияОБлокирующихСеансах = Новый Структура; + + НомерТекущегоСеанса = НомерСеансаИнформационнойБазы(); + СеансыИнформационнойБазы = ПолучитьСеансыИнформационнойБазы(); + + ИмеютсяБлокирующиеСеансы = Ложь; + Если ОбщегоНазначения.ИнформационнаяБазаФайловая() Тогда + ИменаАктивныхСеансов = ""; + Для Каждого Сеанс Из СеансыИнформационнойБазы Цикл + Если Сеанс.НомерСеанса <> НомерТекущегоСеанса + И Сеанс.ИмяПриложения <> "1CV8" + И Сеанс.ИмяПриложения <> "1CV8C" + И Сеанс.ИмяПриложения <> "WebClient" Тогда + ИменаАктивныхСеансов = ИменаАктивныхСеансов + Символы.ПС + "• " + Сеанс; + ИмеютсяБлокирующиеСеансы = Истина; + КонецЕсли; + КонецЦикла; + КонецЕсли; + + ИнформацияОБлокирующихСеансах.Вставить("ИмеютсяБлокирующиеСеансы", ИмеютсяБлокирующиеСеансы); + ИнформацияОБлокирующихСеансах.Вставить("КоличествоСеансов", СеансыИнформационнойБазы.Количество()); + + Если ИмеютсяБлокирующиеСеансы Тогда + Сообщение = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Имеются активные сеансы работы с программой, + |которые не могут быть завершены принудительно: + |%1 + |%2'"), + ИменаАктивныхСеансов, ТекстСообщения); + ИнформацияОБлокирующихСеансах.Вставить("ТекстСообщения", Сообщение); + + КонецЕсли; + + Возврат ИнформацияОБлокирующихСеансах; + +КонецФункции + +// Возвращает информацию о текущих соединениях с информационной базой. +// При необходимости записывает сообщение в журнал регистрации. +// +Функция ИнформацияОСоединениях(ПолучатьСтрокуСоединения = Ложь, + СообщенияДляЖурналаРегистрации = Неопределено, ПортКластера = 0) Экспорт + + УстановитьПривилегированныйРежим(Истина); + + Результат = Новый Структура(); + Результат.Вставить("НаличиеАктивныхСоединений", Ложь); + Результат.Вставить("НаличиеCOMСоединений", Ложь); + Результат.Вставить("НаличиеСоединенияКонфигуратором", Ложь); + Результат.Вставить("ЕстьАктивныеПользователи", Ложь); + + Если ПользователиИнформационнойБазы.ПолучитьПользователей().Количество() > 0 Тогда + Результат.ЕстьАктивныеПользователи = Истина; + КонецЕсли; + + Если ПолучатьСтрокуСоединения Тогда + Результат.Вставить("СтрокаСоединенияИнформационнойБазы", + СоединенияИБКлиентСервер.ПолучитьСтрокуСоединенияИнформационнойБазы()); + КонецЕсли; + + ЖурналРегистрации.ЗаписатьСобытияВЖурналРегистрации(СообщенияДляЖурналаРегистрации); + + МассивСеансов = ПолучитьСеансыИнформационнойБазы(); + Если МассивСеансов.Количество() = 1 Тогда + Возврат Результат; + КонецЕсли; + + Результат.НаличиеАктивныхСоединений = Истина; + + Для Каждого Сеанс Из МассивСеансов Цикл + Если ВРег(Сеанс.ИмяПриложения) = ВРег("COMConnection") Тогда // COM соединение + Результат.НаличиеCOMСоединений = Истина; + ИначеЕсли ВРег(Сеанс.ИмяПриложения) = ВРег("Designer") Тогда // Конфигуратор + Результат.НаличиеСоединенияКонфигуратором = Истина; + КонецЕсли; + КонецЦикла; + + Возврат Результат; + +КонецФункции //////////////////////////////////////////////////////////////////////////////// // Объявление служебных событий, к которым можно добавлять обработчики. @@ -368,11 +509,11 @@ // СЕРВЕРНЫЕ ОБРАБОТЧИКИ. СерверныеОбработчики[ - "СтандартныеПодсистемы.БазоваяФункциональность\ПриДобавленииПараметровРаботыКлиентскойЛогикиСтандартныхПодсистемПриЗапуске"].Добавить( + "СтандартныеПодсистемы.БазоваяФункциональность\ПриДобавленииПараметровРаботыКлиентаПриЗапуске"].Добавить( "СоединенияИБ"); СерверныеОбработчики[ - "СтандартныеПодсистемы.БазоваяФункциональность\ПриДобавленииПараметровРаботыКлиентскойЛогикиСтандартныхПодсистем"].Добавить( + "СтандартныеПодсистемы.БазоваяФункциональность\ПриДобавленииПараметровРаботыКлиента"].Добавить( "СоединенияИБ"); Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаВМоделиСервиса") Тогда @@ -426,7 +567,7 @@ // Параметры: // Параметры - Структура - структура параметров запуска. // -Процедура ПриДобавленииПараметровРаботыКлиентскойЛогикиСтандартныхПодсистемПриЗапуске(Параметры) Экспорт +Процедура ПриДобавленииПараметровРаботыКлиентаПриЗапуске(Параметры) Экспорт ПараметрыБлокировки = СтруктураПараметровБлокировкиСеансов(); Параметры.Вставить("ПараметрыБлокировкиСеансов", Новый ФиксированнаяСтруктура(ПараметрыБлокировкиСеансов(, ПараметрыБлокировки))); @@ -448,12 +589,9 @@ ТекущийРежим = ПараметрыБлокировки.ТекущийРежимОбластиДанных; Если ЗначениеЗаполнено(ТекущийРежим.Конец) Тогда - ПериодБлокировки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'на период с %1 по %2'"), - ТекущийРежим.Начало, ТекущийРежим.Конец); + ПериодБлокировки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'на период с %1 по %2'"), ТекущийРежим.Начало, ТекущийРежим.Конец); Иначе - ПериодБлокировки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'с %1'"), ТекущийРежим.Начало); + ПериодБлокировки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'с %1'"), ТекущийРежим.Начало); КонецЕсли; Если ЗначениеЗаполнено(ТекущийРежим.Сообщение) Тогда ПричинаБлокировки = НСтр("ru = 'по причине:'") + Символы.ПС + ТекущийРежим.Сообщение; @@ -463,14 +601,13 @@ ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Администратором приложения установлена блокировка работы пользователей %1 %2. | - |Приложение временно недоступно.'"), - ПериодБлокировки, ПричинаБлокировки); + |Приложение временно недоступно.'"), ПериодБлокировки, ПричинаБлокировки); Параметры.Вставить("СеансыОбластиДанныхЗаблокированы", ТекстСообщения); ТекстСообщения = ""; Если Пользователи.ЭтоПолноправныйПользователь() Тогда ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Администратором приложения установлена блокировка работы пользователей %1 %2. - | + | |Войти в заблокированное приложение?'"), ПериодБлокировки, ПричинаБлокировки); КонецЕсли; @@ -491,9 +628,9 @@ // Параметры: // Параметры - Структура - структура параметров. // -Процедура ПриДобавленииПараметровРаботыКлиентскойЛогикиСтандартныхПодсистем(Параметры) Экспорт +Процедура ПриДобавленииПараметровРаботыКлиента(Параметры) Экспорт - ДобавитьПараметрыРаботыКлиента(Параметры); + Параметры.Вставить("ПараметрыБлокировкиСеансов", Новый ФиксированнаяСтруктура(ПараметрыБлокировкиСеансов())); КонецПроцедуры @@ -541,41 +678,34 @@ // Процедура ПриЗаполненииСпискаТекущихДел(ТекущиеДела) Экспорт - МодульТекущиеДелаСлужебный = ОбщегоНазначения.ОбщийМодуль("ТекущиеДелаСлужебный"); + МодульТекущиеДелаСервер = ОбщегоНазначения.ОбщийМодуль("ТекущиеДелаСервер"); Если Не ПравоДоступа("АдминистрированиеДанных", Метаданные) - Или МодульТекущиеДелаСлужебный.ДелоОтключено("БлокировкаСеансов") Тогда + Или МодульТекущиеДелаСервер.ДелоОтключено("БлокировкаСеансов") Тогда Возврат; КонецЕсли; - МодульТекущиеДелаСервер = ОбщегоНазначения.ОбщийМодуль("ТекущиеДелаСервер"); // Процедура вызывается только при наличии подсистемы "Текущие дела", поэтому здесь // не делается проверка существования подсистемы. Разделы = МодульТекущиеДелаСервер.РазделыДляОбъекта(Метаданные.Обработки.БлокировкаРаботыПользователей.ПолноеИмя()); - Если Разделы = Неопределено Тогда - Возврат; - КонецЕсли; - ПараметрыБлокировки = ПараметрыБлокировкиСеансов(Ложь); ТекущаяДатаСеанса = ТекущаяДатаСеанса(); Если ПараметрыБлокировки.Установлена Тогда Если ТекущаяДатаСеанса < ПараметрыБлокировки.Начало Тогда Если ПараметрыБлокировки.Конец <> Дата(1, 1, 1) Тогда - Сообщение = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Запланирована с %1 по %2'"), + Сообщение = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Запланирована с %1 по %2'"), Формат(ПараметрыБлокировки.Начало, "ДЛФ=DT"), Формат(ПараметрыБлокировки.Конец, "ДЛФ=DT")); Иначе - Сообщение = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Запланирована с %1'"), - Формат(ПараметрыБлокировки.Начало, "ДЛФ=DT")); + Сообщение = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Запланирована с %1'"), Формат(ПараметрыБлокировки.Начало, "ДЛФ=DT")); КонецЕсли; Важность = Ложь; ИначеЕсли ПараметрыБлокировки.Конец <> Дата(1, 1, 1) И ТекущаяДатаСеанса > ПараметрыБлокировки.Конец И ПараметрыБлокировки.Начало <> Дата(1, 1, 1) Тогда Важность = Ложь; - Сообщение = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Не действует (истек срок %1)'"), - Формат(ПараметрыБлокировки.Конец, "ДЛФ=DT")); + Сообщение = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Не действует (истек срок %1)'"), Формат(ПараметрыБлокировки.Конец, "ДЛФ=DT")); Иначе Если ПараметрыБлокировки.Конец <> Дата(1, 1, 1) Тогда - Сообщение = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'с %1 по %2'"), + Сообщение = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'с %1 по %2'"), Формат(ПараметрыБлокировки.Начало, "ДЛФ=DT"), Формат(ПараметрыБлокировки.Конец, "ДЛФ=DT")); Иначе Сообщение = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'с %1'"), @@ -587,7 +717,7 @@ Сообщение = НСтр("ru = 'Не действует'"); Важность = Ложь; КонецЕсли; - + Для Каждого Раздел Из Разделы Цикл @@ -683,81 +813,22 @@ КонецЕсли; Если ОбщегоНазначенияПовтИсп.РазделениеВключено() И ОбщегоНазначенияПовтИсп.ДоступноИспользованиеРазделенныхДанных() Тогда - ТекстСообщения = ТекстСообщения + - НСтр("ru = '%1 - |Для разрешения работы пользователей можно открыть приложение с параметром РазрешитьРаботуПользователей. Например: - |http://<веб-адрес сервера>/?C=РазрешитьРаботуПользователей'"); + ТекстСообщения = ТекстСообщения + НСтр("ru = '%1 + |Для разрешения работы пользователей можно открыть приложение с параметром РазрешитьРаботуПользователей. Например: + |http://<веб-адрес сервера>/?C=РазрешитьРаботуПользователей'"); + ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ТекстСообщения, СоединенияИБКлиентСервер.ТекстДляАдминистратора()); Иначе - ТекстСообщения = ТекстСообщения + - НСтр("ru = '%1 - |Для того чтобы разрешить работу пользователей, воспользуйтесь консолью кластера серверов или запустите ""1С:Предприятие"" с параметрами: - |ENTERPRISE %2 /CРазрешитьРаботуПользователей /UC%3'"); + ТекстСообщения = ТекстСообщения + НСтр("ru = '%1 + |Для того чтобы разрешить работу пользователей, воспользуйтесь консолью кластера серверов или запустите ""1С:Предприятие"" с параметрами: + |ENTERPRISE %2 /CРазрешитьРаботуПользователей /UC%3'"); + ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ТекстСообщения, СоединенияИБКлиентСервер.ТекстДляАдминистратора(), + СтрокаПутиКИнформационнойБазе, НСтр("ru = '<код разрешения>'")); КонецЕсли; - ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ТекстСообщения, - СоединенияИБКлиентСервер.ТекстДляАдминистратора(), СтрокаПутиКИнформационнойБазе, - НСтр("ru = '<код разрешения>'")); Возврат ТекстСообщения; КонецФункции -// Возвращает текстовую строку со списком активных соединений ИБ. -// Названия соединений разделены символом переноса строки. -// -// Параметры: -// Сообщение - Строка - передаваемая строка. -// -// Возвращаемое значение: -// Строка - названия соединений. -// -Функция СообщениеОНеотключенныхСеансах() Экспорт - - Сообщение = НСтр("ru = 'Не удалось отключить сеансы:'"); - НомерТекущегоСеанса = НомерСеансаИнформационнойБазы(); - Для Каждого Сеанс Из ПолучитьСеансыИнформационнойБазы() Цикл - Если Сеанс.НомерСеанса <> НомерТекущегоСеанса Тогда - Сообщение = Сообщение + Символы.ПС + "• " + Сеанс; - КонецЕсли; - КонецЦикла; - - Возврат Сообщение; - -КонецФункции - -// Получить число активных сеансов ИБ. -// -// Параметры: -// УчитыватьКонсоль - Булево - если Ложь, то исключить сеансы консоли кластера серверов. -// Сеансы консоли кластера серверов не препятствуют выполнению -// административных операций (установке монопольного режима и т.п.). -// -// Возвращаемое значение: -// Число - количество активных сеансов ИБ. -// -Функция КоличествоСеансовИнформационнойБазы(УчитыватьКонсоль = Истина, УчитыватьФоновыеЗадания = Истина) Экспорт - - СеансыИБ = ПолучитьСеансыИнформационнойБазы(); - Если УчитыватьКонсоль И УчитыватьФоновыеЗадания Тогда - Возврат СеансыИБ.Количество(); - КонецЕсли; - - Результат = 0; - - Для Каждого СеансИБ Из СеансыИБ Цикл - - Если Не УчитыватьКонсоль И СеансИБ.ИмяПриложения = "SrvrConsole" - Или Не УчитыватьФоновыеЗадания И СеансИБ.ИмяПриложения = "BackgroundJob" Тогда - Продолжить; - КонецЕсли; - - Результат = Результат + 1; - - КонецЦикла; - - Возврат Результат; - -КонецФункции - // Возвращает установлена ли блокировка соединений на конкретную дату. // // Параметры: @@ -796,91 +867,4 @@ КонецФункции -// Возвращает информацию о текущих соединениях с информационной базой. -// При необходимости записывает сообщение в журнал регистрации. -// -Функция ИнформацияОСоединениях(ПолучатьСтрокуСоединения = Ложь, - СообщенияДляЖурналаРегистрации = Неопределено, ПортКластера = 0) Экспорт - - УстановитьПривилегированныйРежим(Истина); - - Результат = Новый Структура(); - Результат.Вставить("НаличиеАктивныхСоединений", Ложь); - Результат.Вставить("НаличиеCOMСоединений", Ложь); - Результат.Вставить("НаличиеСоединенияКонфигуратором", Ложь); - Результат.Вставить("ЕстьАктивныеПользователи", Ложь); - - Если ПользователиИнформационнойБазы.ПолучитьПользователей().Количество() > 0 Тогда - Результат.ЕстьАктивныеПользователи = Истина; - КонецЕсли; - - Если ПолучатьСтрокуСоединения Тогда - Результат.Вставить("СтрокаСоединенияИнформационнойБазы", - СоединенияИБКлиентСервер.ПолучитьСтрокуСоединенияИнформационнойБазы()); - КонецЕсли; - - ЖурналРегистрации.ЗаписатьСобытияВЖурналРегистрации(СообщенияДляЖурналаРегистрации); - - МассивСеансов = ПолучитьСеансыИнформационнойБазы(); - Если МассивСеансов.Количество() = 1 Тогда - Возврат Результат; - КонецЕсли; - - Результат.НаличиеАктивныхСоединений = Истина; - - Для Каждого Сеанс Из МассивСеансов Цикл - Если ВРег(Сеанс.ИмяПриложения) = ВРег("COMConnection") Тогда // COM соединение - Результат.НаличиеCOMСоединений = Истина; - ИначеЕсли ВРег(Сеанс.ИмяПриложения) = ВРег("Designer") Тогда // Конфигуратор - Результат.НаличиеСоединенияКонфигуратором = Истина; - КонецЕсли; - КонецЦикла; - - Возврат Результат; - -КонецФункции - -// Определяет количество сеансов информационной базы и наличие сеансов, -// которые не могут быть отключены принудительно. Формирует текст сообщения -// об ошибке. -// -Функция ИнформацияОБлокирующихСеансах(ТекстСообщения = "") Экспорт - - ИнформацияОБлокирующихСеансах = Новый Структура; - - НомерТекущегоСеанса = НомерСеансаИнформационнойБазы(); - СеансыИнформационнойБазы = ПолучитьСеансыИнформационнойБазы(); - - ИмеютсяБлокирующиеСеансы = Ложь; - Если ОбщегоНазначения.ИнформационнаяБазаФайловая() Тогда - ИменаАктивныхСеансов = ""; - Для Каждого Сеанс Из СеансыИнформационнойБазы Цикл - Если Сеанс.НомерСеанса <> НомерТекущегоСеанса - И Сеанс.ИмяПриложения <> "1CV8" - И Сеанс.ИмяПриложения <> "1CV8C" - И Сеанс.ИмяПриложения <> "WebClient" Тогда - ИменаАктивныхСеансов = ИменаАктивныхСеансов + Символы.ПС + "• " + Сеанс; - ИмеютсяБлокирующиеСеансы = Истина; - КонецЕсли; - КонецЦикла; - КонецЕсли; - - ИнформацияОБлокирующихСеансах.Вставить("ИмеютсяБлокирующиеСеансы", ИмеютсяБлокирующиеСеансы); - ИнформацияОБлокирующихСеансах.Вставить("КоличествоСеансов", СеансыИнформационнойБазы.Количество()); - - Если ИмеютсяБлокирующиеСеансы Тогда - Сообщение = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Имеются активные сеансы работы с программой, - |которые не могут быть завершены принудительно: - |%1 - |%2'"), - ИменаАктивныхСеансов, ТекстСообщения); - ИнформацияОБлокирующихСеансах.Вставить("ТекстСообщения", Сообщение); - - КонецЕсли; - - Возврат ИнформацияОБлокирующихСеансах; - -КонецФункции - #КонецОбласти diff --git a/SSL/src/CommonModules/СоединенияИБВызовСервера/Module.bsl b/SSL/src/CommonModules/СоединенияИБВызовСервера/Module.bsl index 9caaba666..797038174 100644 --- a/SSL/src/CommonModules/СоединенияИБВызовСервера/Module.bsl +++ b/SSL/src/CommonModules/СоединенияИБВызовСервера/Module.bsl @@ -3,27 +3,13 @@ // //////////////////////////////////////////////////////////////////////////////// -#Область СлужебныеПроцедурыИФункции +#Область СлужебныйПрограммныйИнтерфейс -// Получить параметры блокировки соединений ИБ для использования на стороне клиента. +// См. описание процедуры в модуле СоединенияИБ. // -// Параметры: -// ПолучитьКоличествоСеансов - Булево - если Истина, то в возвращаемой структуре -// заполняется поле КоличествоСеансов. -// -// Возвращаемое значение: -// Структура - с полями: -// Установлена - Булево - Истина, если установлена блокировка, Ложь - Иначе. -// Начало - Дата - дата начала блокировки. -// Конец - Дата - дата окончания блокировки. -// Сообщение - Строка - сообщение пользователю. -// ИнтервалОжиданияЗавершенияРаботыПользователей - Число - интервал в секундах. -// КоличествоСеансов - 0, если параметр ПолучитьКоличествоСеансов = Ложь. -// ТекущаяДатаСеанса - Дата - текущая дата сеанса. -// -Функция ПараметрыБлокировкиСеансов(ПолучитьКоличествоСеансов = Ложь) Экспорт +Функция ИнформацияОСоединениях(ПолучатьСтрокуСоединения = Ложь, СообщенияДляЖурналаРегистрации = Неопределено, ПортКластера = 0) Экспорт - Возврат СоединенияИБ.ПараметрыБлокировкиСеансов(ПолучитьКоличествоСеансов); + Возврат СоединенияИБ.ИнформацияОСоединениях(ПолучатьСтрокуСоединения, СообщенияДляЖурналаРегистрации, ПортКластера); КонецФункции @@ -53,6 +39,44 @@ КонецФункции +// Снять блокировку информационной базы. +// +// Возвращаемое значение: +// Булево - Истина, если операция выполнена успешно. +// Ложь, если для выполнения операции недостаточно прав. +// +Функция РазрешитьРаботуПользователей() Экспорт + + Возврат СоединенияИБ.РазрешитьРаботуПользователей(); + +КонецФункции + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +// Получить параметры блокировки соединений ИБ для использования на стороне клиента. +// +// Параметры: +// ПолучитьКоличествоСеансов - Булево - если Истина, то в возвращаемой структуре +// заполняется поле КоличествоСеансов. +// +// Возвращаемое значение: +// Структура - с полями: +// Установлена - Булево - Истина, если установлена блокировка, Ложь - Иначе. +// Начало - Дата - дата начала блокировки. +// Конец - Дата - дата окончания блокировки. +// Сообщение - Строка - сообщение пользователю. +// ИнтервалОжиданияЗавершенияРаботыПользователей - Число - интервал в секундах. +// КоличествоСеансов - 0, если параметр ПолучитьКоличествоСеансов = Ложь. +// ТекущаяДатаСеанса - Дата - текущая дата сеанса. +// +Функция ПараметрыБлокировкиСеансов(ПолучитьКоличествоСеансов = Ложь) Экспорт + + Возврат СоединенияИБ.ПараметрыБлокировкиСеансов(ПолучитьКоличествоСеансов); + +КонецФункции + // Установить блокировку сеансов области данных. // // Параметры: @@ -66,18 +90,6 @@ КонецПроцедуры -// Снять блокировку информационной базы. -// -// Возвращаемое значение: -// Булево - Истина, если операция выполнена успешно. -// Ложь, если для выполнения операции недостаточно прав. -// -Функция РазрешитьРаботуПользователей() Экспорт - - Возврат СоединенияИБ.РазрешитьРаботуПользователей(); - -КонецФункции - // Получить информацию о блокировке сеансов области данных. // // Параметры: @@ -94,11 +106,11 @@ КонецФункции -// См. описание процедуры в модуле СоединенияИБ. +// Возвращает номер текущего сеанса информационной базы // -Функция ИнформацияОСоединениях(ПолучатьСтрокуСоединения = Ложь, СообщенияДляЖурналаРегистрации = Неопределено, ПортКластера = 0) Экспорт +Функция НомерТекущегоСеанса() Экспорт - Возврат СоединенияИБ.ИнформацияОСоединениях(ПолучатьСтрокуСоединения, СообщенияДляЖурналаРегистрации, ПортКластера); + Возврат НомерСеансаИнформационнойБазы(); КонецФункции diff --git a/SSL/src/CommonModules/СоединенияИБВызовСервераПовтИсп/Module.bsl b/SSL/src/CommonModules/СоединенияИБВызовСервераПовтИсп/Module.bsl deleted file mode 100644 index 771f15769..000000000 --- a/SSL/src/CommonModules/СоединенияИБВызовСервераПовтИсп/Module.bsl +++ /dev/null @@ -1,21 +0,0 @@ -//////////////////////////////////////////////////////////////////////////////// -// Подсистема "Завершение работы пользователей". -// -//////////////////////////////////////////////////////////////////////////////// - -#Область СлужебныеПроцедурыИФункции - -// Возвращает структуру с параметрами для принудительного отключения сеансов. -// -Функция ПараметрыОтключенияСеансов() Экспорт - - ТипПлатформыСервера = ОбщегоНазначенияПовтИсп.ТипПлатформыСервера(); - - Возврат Новый Структура("НомерСеансаИнформационнойБазы,WindowsПлатформаНаСервере", - НомерСеансаИнформационнойБазы(), - ТипПлатформыСервера = ТипПлатформы.Windows_x86 - Или ТипПлатформыСервера = ТипПлатформы.Windows_x86_64); - -КонецФункции - -#КонецОбласти diff --git a/SSL/src/CommonModules/СоединенияИБВызовСервераПовтИсп/СоединенияИБВызовСервераПовтИсп.mdo b/SSL/src/CommonModules/СоединенияИБВызовСервераПовтИсп/СоединенияИБВызовСервераПовтИсп.mdo deleted file mode 100644 index a83e8c302..000000000 --- a/SSL/src/CommonModules/СоединенияИБВызовСервераПовтИсп/СоединенияИБВызовСервераПовтИсп.mdo +++ /dev/null @@ -1,11 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<mdclass:CommonModule xmlns:mdclass="http://g5.1c.ru/v8/dt/metadata/mdclass" uuid="c05f15b0-a659-4473-b6d0-acebc4a2da57"> - <name>СоединенияИБВызовСервераПовтИсп</name> - <synonym> - <key>ru</key> - <value>Соединения ИБ вызов сервера повт исп</value> - </synonym> - <server>true</server> - <serverCall>true</serverCall> - <returnValuesReuse>DuringSession</returnValuesReuse> -</mdclass:CommonModule> diff --git a/SSL/src/CommonModules/СоединенияИБГлобальный/Module.bsl b/SSL/src/CommonModules/СоединенияИБГлобальный/Module.bsl index 705c7e6b0..f1c296b99 100644 --- a/SSL/src/CommonModules/СоединенияИБГлобальный/Module.bsl +++ b/SSL/src/CommonModules/СоединенияИБГлобальный/Module.bsl @@ -39,10 +39,9 @@ ВремяВремениНачалаБлокировки = Формат(ВремяНачалаБлокировки, "ДЛФ=T"); ТекстСообщения = СоединенияИБКлиентСервер.ИзвлечьСообщениеБлокировки(ТекущийРежим.Сообщение); - ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Рекомендуется завершить текущую работу и сохранить все свои данные. Работа программы будет завершена %1 в %2. - |%3'"), - ДатаВремениНачалаБлокировки, ВремяВремениНачалаБлокировки, ТекстСообщения); + Шаблон = НСтр("ru = 'Рекомендуется завершить текущую работу и сохранить все свои данные. Работа программы будет завершена %1 в %2. + |%3'"); + ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(Шаблон, ДатаВремениНачалаБлокировки, ВремяВремениНачалаБлокировки, ТекстСообщения); Если Не ПараметрыРаботы.РазделениеВключено И (Не ЗначениеЗаполнено(ВремяНачалаБлокировки) Или ВремяНачалаБлокировки - ТекущийМомент < ИнтервалПрекратить) Тогда @@ -82,8 +81,7 @@ Если ТекущийМомент < ВремяНачалаБлокировки Тогда ТекстСообщения = НСтр("ru = 'Блокировка работы пользователей запланирована на %1.'"); - ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - ТекстСообщения, ВремяНачалаБлокировки); + ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ТекстСообщения, ВремяНачалаБлокировки); ПоказатьОповещениеПользователя(НСтр("ru = 'Завершение работы пользователей'"), "e1cib/app/Обработка.БлокировкаРаботыПользователей", ТекстСообщения, БиблиотекаКартинок.Информация32); @@ -114,8 +112,7 @@ ТекстСообщения = НСтр("ru = 'Активных сеансов: %1. |Следующая проверка сеансов будет выполнена через минуту.'"); - ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - ТекстСообщения, КоличествоСеансов); + ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ТекстСообщения, КоличествоСеансов); ПоказатьОповещениеПользователя(НСтр("ru = 'Завершение работы пользователей'"), "e1cib/app/Обработка.БлокировкаРаботыПользователей", ТекстСообщения, БиблиотекаКартинок.Информация32); diff --git a/SSL/src/CommonModules/СоединенияИБКлиент/Module.bsl b/SSL/src/CommonModules/СоединенияИБКлиент/Module.bsl index 36beb38ed..a57bfeec0 100644 --- a/SSL/src/CommonModules/СоединенияИБКлиент/Module.bsl +++ b/SSL/src/CommonModules/СоединенияИБКлиент/Module.bsl @@ -87,7 +87,7 @@ // Возвращаемое значение: // Булево - Истина, если требуется прекратить выполнение запуска системы. // -Функция ОбработатьПараметрыЗапуска(Знач ЗначениеПараметраЗапуска, Знач ПараметрыЗапуска) Экспорт +Функция ОбработатьПараметрыЗапуска(Знач ЗначениеПараметраЗапуска, Знач ПараметрыЗапуска) ПараметрыРаботы = СтандартныеПодсистемыКлиентПовтИсп.ПараметрыРаботыКлиентаПриЗапуске(); Если НЕ ПараметрыРаботы.ДоступноИспользованиеРазделенныхДанных Тогда @@ -184,6 +184,38 @@ КонецПроцедуры +// Устанавливает значение переменной ЗавершитьВсеСеансыКромеТекущего в значение Значение. +// +// Параметры: +// Значение - Булево - устанавливаемое значение. +// +Процедура УстановитьПризнакЗавершитьВсеСеансыКромеТекущего(Значение) Экспорт + + ИмяПараметра = "СтандартныеПодсистемы.ПараметрыЗавершенияРаботыПользователей"; + Если ПараметрыПриложения[ИмяПараметра] = Неопределено Тогда + ПараметрыПриложения.Вставить(ИмяПараметра, Новый Структура); + КонецЕсли; + + ПараметрыПриложения["СтандартныеПодсистемы.ПараметрыЗавершенияРаботыПользователей"].Вставить("ЗавершитьВсеСеансыКромеТекущего", Значение); + +КонецПроцедуры + +// Устанавливает значение переменной РаботаПользователейЗавершается в значение Значение. +// +// Параметры: +// Значение - Булево - устанавливаемое значение. +// +Процедура УстановитьПризнакРаботаПользователейЗавершается(Значение) Экспорт + + ИмяПараметра = "СтандартныеПодсистемы.ПараметрыЗавершенияРаботыПользователей"; + Если ПараметрыПриложения[ИмяПараметра] = Неопределено Тогда + ПараметрыПриложения.Вставить(ИмяПараметра, Новый Структура); + КонецЕсли; + + ПараметрыПриложения["СтандартныеПодсистемы.ПараметрыЗавершенияРаботыПользователей"].Вставить("РаботаПользователейЗавершается", Значение); + +КонецПроцедуры + //////////////////////////////////////////////////////////////////////////////// // Обработчики условных вызовов в эту подсистему. @@ -192,16 +224,21 @@ // Параметры: // Оповещение - ОписаниеОповещения - описывает, куда надо передать управление после закрытия формы. // -Процедура ПриОткрытииФормыОшибкиУстановкиМонопольногоРежима(Оповещение, ПараметрыФормы = Неопределено) Экспорт - - Если ПараметрыФормы = Неопределено Тогда - ПараметрыФормы = Новый Структура; - КонецЕсли; +Процедура ПриОткрытииФормыОшибкиУстановкиМонопольногоРежима(Оповещение = Неопределено, ПараметрыФормы = Неопределено) Экспорт ОткрытьФорму("Обработка.БлокировкаРаботыПользователей.Форма.ОшибкаУстановкиМонопольногоРежима", ПараметрыФормы, , , , , Оповещение); КонецПроцедуры + +// Открывает форму блокировки работы пользователей +// +Процедура ПриОткрытииФормыБлокировкиРаботыПользователей(Оповещение = Неопределено, ПараметрыФормы = Неопределено) Экспорт + + ОткрытьФорму("Обработка.БлокировкаРаботыПользователей.Форма.БлокировкаСоединенийСИнформационнойБазой", ПараметрыФормы, + , , , , Оповещение); + +КонецПроцедуры #КонецОбласти @@ -233,29 +270,13 @@ // Процедура ПриОпределенииФормыАктивныхПользователей(ИмяФормы) Экспорт - ИмяФормы = "Обработка.АктивныеПользователи.Форма.ФормаСпискаАктивныхПользователей"; + ИмяФормы = "Обработка.АктивныеПользователи.Форма.АктивныеПользователи"; КонецПроцедуры /////////////////////////////////////////////////////////////////////////////// // Обработчики событий подсистемы БазоваяФункциональность. -// Устанавливает значение переменной РаботаПользователейЗавершается в значение Значение. -// -// Параметры: -// Значение - Булево - устанавливаемое значение. -// -Процедура УстановитьПризнакРаботаПользователейЗавершается(Значение) Экспорт - - ИмяПараметра = "СтандартныеПодсистемы.ПараметрыЗавершенияРаботыПользователей"; - Если ПараметрыПриложения[ИмяПараметра] = Неопределено Тогда - ПараметрыПриложения.Вставить(ИмяПараметра, Новый Структура); - КонецЕсли; - - ПараметрыПриложения["СтандартныеПодсистемы.ПараметрыЗавершенияРаботыПользователей"].Вставить("РаботаПользователейЗавершается", Значение); - -КонецПроцедуры - Функция РаботаПользователейЗавершается() Экспорт ПараметрыЗавершенияРаботыПользователей = ПараметрыПриложения["СтандартныеПодсистемы.ПараметрыЗавершенияРаботыПользователей"]; @@ -266,22 +287,6 @@ КонецФункции -// Устанавливает значение переменной ЗавершитьВсеСеансыКромеТекущего в значение Значение. -// -// Параметры: -// Значение - Булево - устанавливаемое значение. -// -Процедура УстановитьПризнакЗавершитьВсеСеансыКромеТекущего(Значение) Экспорт - - ИмяПараметра = "СтандартныеПодсистемы.ПараметрыЗавершенияРаботыПользователей"; - Если ПараметрыПриложения[ИмяПараметра] = Неопределено Тогда - ПараметрыПриложения.Вставить(ИмяПараметра, Новый Структура); - КонецЕсли; - - ПараметрыПриложения["СтандартныеПодсистемы.ПараметрыЗавершенияРаботыПользователей"].Вставить("ЗавершитьВсеСеансыКромеТекущего", Значение); - -КонецПроцедуры - Функция ЗавершитьВсеСеансыКромеТекущего() Экспорт ПараметрыЗавершенияРаботыПользователей = ПараметрыПриложения["СтандартныеПодсистемы.ПараметрыЗавершенияРаботыПользователей"]; diff --git a/SSL/src/CommonModules/СоединенияИБКлиентСервер/Module.bsl b/SSL/src/CommonModules/СоединенияИБКлиентСервер/Module.bsl index a7ccb7158..f0c6c0b31 100644 --- a/SSL/src/CommonModules/СоединенияИБКлиентСервер/Module.bsl +++ b/SSL/src/CommonModules/СоединенияИБКлиентСервер/Module.bsl @@ -3,56 +3,7 @@ // //////////////////////////////////////////////////////////////////////////////// -#Область СлужебныеПроцедурыИФункции - -// Удаляет все сеансы информационной базы кроме текущего. -// -Процедура УдалитьВсеСеансыКромеТекущего(ПараметрыАдминистрирования) Экспорт - - НомерТекущегоСеанса = СоединенияИБВызовСервераПовтИсп.ПараметрыОтключенияСеансов().НомерСеансаИнформационнойБазы; - - ВсеКромеТекущего = Новый Структура; - ВсеКромеТекущего.Вставить("Свойство", "Номер"); - ВсеКромеТекущего.Вставить("ВидСравнения", ВидСравнения.НеРавно); - ВсеКромеТекущего.Вставить("Значение", НомерТекущегоСеанса); - - Фильтр = Новый Массив; - Фильтр.Добавить(ВсеКромеТекущего); - - АдминистрированиеКластераКлиентСервер.УдалитьСеансыИнформационнойБазы(ПараметрыАдминистрирования,, Фильтр); - -КонецПроцедуры - -// Получить строку соединения ИБ, если задан нестандартный порт кластера серверов. -// -// Параметры: -// ПортКластераСерверов - Число - нестандартный порт кластера серверов. -// -// Возвращаемое значение: -// Строка - строка соединения ИБ. -// -Функция ПолучитьСтрокуСоединенияИнформационнойБазы(Знач ПортКластераСерверов = 0) Экспорт - - Результат = СтрокаСоединенияИнформационнойБазы(); - Если ИнформационнаяБазаФайловая() Или (ПортКластераСерверов = 0) Тогда - Возврат Результат; - КонецЕсли; - -#Если НаКлиенте Тогда - Если ОбщегоНазначенияКлиент.КлиентПодключенЧерезВебСервер() Тогда - Возврат Результат; - КонецЕсли; -#КонецЕсли - - ПодстрокиСтрокиСоединения = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(Результат, ";"); - ИмяСервера = СтроковыеФункцииКлиентСервер.СократитьДвойныеКавычки(Сред(ПодстрокиСтрокиСоединения[0], 7)); - ИмяИБ = СтроковыеФункцииКлиентСервер.СократитьДвойныеКавычки(Сред(ПодстрокиСтрокиСоединения[1], 6)); - Результат = "Srvr=" + """" + ИмяСервера + - ?(Найти(ИмяСервера, ":") > 0, "", ":" + Формат(ПортКластераСерверов, "ЧГ=0")) + """;" + - "Ref=" + """" + ИмяИБ + """;"; - Возврат Результат; - -КонецФункции +#Область СлужебныйПрограммныйИнтерфейс // Возвращает полный путь к информационной базе (строку соединения). // @@ -72,7 +23,7 @@ СтрокаСоединения = ПолучитьСтрокуСоединенияИнформационнойБазы(ПортКластераСерверов); - ПозицияПоиска = Найти(Врег(СтрокаСоединения), "FILE="); + ПозицияПоиска = СтрНайти(Врег(СтрокаСоединения), "FILE="); Если ПозицияПоиска = 1 Тогда // файловая ИБ @@ -82,13 +33,13 @@ Иначе ПризнакФайловогоРежима = Ложь; - ПозицияПоиска = Найти(Врег(СтрокаСоединения), "SRVR="); + ПозицияПоиска = СтрНайти(Врег(СтрокаСоединения), "SRVR="); Если НЕ (ПозицияПоиска = 1) Тогда Возврат Неопределено; КонецЕсли; - ПозицияТочкиСЗапятой = Найти(СтрокаСоединения, ";"); + ПозицияТочкиСЗапятой = СтрНайти(СтрокаСоединения, ";"); НачальнаяПозицияКопирования = 6 + 1; КонечнаяПозицияКопирования = ПозицияТочкиСЗапятой - 2; @@ -97,14 +48,14 @@ СтрокаСоединения = Сред(СтрокаСоединения, ПозицияТочкиСЗапятой + 1); // позиция имени сервера - ПозицияПоиска = Найти(Врег(СтрокаСоединения), "REF="); + ПозицияПоиска = СтрНайти(Врег(СтрокаСоединения), "REF="); Если НЕ (ПозицияПоиска = 1) Тогда Возврат Неопределено; КонецЕсли; НачальнаяПозицияКопирования = 6; - ПозицияТочкиСЗапятой = Найти(СтрокаСоединения, ";"); + ПозицияТочкиСЗапятой = СтрНайти(СтрокаСоединения, ";"); КонечнаяПозицияКопирования = ПозицияТочкиСЗапятой - 2; ИмяИБНаСервере = Сред(СтрокаСоединения, НачальнаяПозицияКопирования, КонечнаяПозицияКопирования - НачальнаяПозицияКопирования + 1); @@ -116,6 +67,59 @@ КонецФункции +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +// Удаляет все сеансы информационной базы кроме текущего. +// +Процедура УдалитьВсеСеансыКромеТекущего(ПараметрыАдминистрирования) Экспорт + + ВсеКромеТекущего = Новый Структура; + ВсеКромеТекущего.Вставить("Свойство", "Номер"); + ВсеКромеТекущего.Вставить("ВидСравнения", ВидСравнения.НеРавно); + ВсеКромеТекущего.Вставить("Значение", СоединенияИБВызовСервера.НомерТекущегоСеанса()); + + Фильтр = Новый Массив; + Фильтр.Добавить(ВсеКромеТекущего); + + АдминистрированиеКластераКлиентСервер.УдалитьСеансыИнформационнойБазы(ПараметрыАдминистрирования,, Фильтр); + +КонецПроцедуры + +// Получить строку соединения ИБ, если задан нестандартный порт кластера серверов. +// +// Параметры: +// ПортКластераСерверов - Число - нестандартный порт кластера серверов. +// +// Возвращаемое значение: +// Строка - строка соединения ИБ. +// +Функция ПолучитьСтрокуСоединенияИнформационнойБазы(Знач ПортКластераСерверов = 0) Экспорт + + Результат = СтрокаСоединенияИнформационнойБазы(); + Если ИнформационнаяБазаФайловая() Или (ПортКластераСерверов = 0) Тогда + Возврат Результат; + КонецЕсли; + +#Если НаКлиенте Тогда + Если ОбщегоНазначенияКлиент.КлиентПодключенЧерезВебСервер() Тогда + Возврат Результат; + КонецЕсли; +#КонецЕсли + + ПодстрокиСтрокиСоединения = СтрРазделить(Результат, ";"); + ИмяСервера = СтроковыеФункцииКлиентСервер.СократитьДвойныеКавычки(Сред(ПодстрокиСтрокиСоединения[0], 7)); + ИмяИБ = СтроковыеФункцииКлиентСервер.СократитьДвойныеКавычки(Сред(ПодстрокиСтрокиСоединения[1], 6)); + ПортКластера = ?(Найти(ИмяСервера, ":") > 0, "", ":" + Формат(ПортКластераСерверов, "ЧГ=0")); + + Результат = "Srvr=""%1%2"";Ref=""%3"";"; + Результат = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(Результат, ИмяСервера, ПортКластера, ИмяИБ); + + Возврат Результат; + +КонецФункции + // Возвращает текстовую константу для формирования сообщений. // Используется в целях локализации. // @@ -138,7 +142,7 @@ // Функция ИзвлечьСообщениеБлокировки(Знач Сообщение) Экспорт - ИндексМаркера = Найти(Сообщение, ТекстДляАдминистратора()); + ИндексМаркера = СтрНайти(Сообщение, ТекстДляАдминистратора()); Если ИндексМаркера = 0 Тогда Возврат Сообщение; ИначеЕсли ИндексМаркера >= 3 Тогда diff --git a/SSL/src/CommonModules/СообщенияВМоделиСервиса/Module.bsl b/SSL/src/CommonModules/СообщенияВМоделиСервиса/Module.bsl index 876aa035b..c8a4fde87 100644 --- a/SSL/src/CommonModules/СообщенияВМоделиСервиса/Module.bsl +++ b/SSL/src/CommonModules/СообщенияВМоделиСервиса/Module.bsl @@ -115,9 +115,7 @@ // Процедура ОшибкаНеизвестноеИмяКанала(Знач КаналСообщений) Экспорт - ШаблонСообщения = НСтр("ru = 'Неизвестное имя канала сообщений %1'"); - ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонСообщения, КаналСообщений); - ВызватьИсключение(ТекстСообщения); + ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Неизвестное имя канала сообщений %1'"), КаналСообщений); КонецПроцедуры @@ -269,8 +267,7 @@ ПредставлениеСообщенияДляЖурнала(Сообщение)); ШаблонОшибки = НСтр("ru = 'Ошибка при отправке сообщения. Область данных %1 не совпадает с текущей (%2).'"); - ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонОшибки, - Сообщение.Body.Zone, ОбщегоНазначения.ЗначениеРазделителяСеанса()); + ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонОшибки, Сообщение.Body.Zone, ОбщегоНазначения.ЗначениеРазделителяСеанса()); ВызватьИсключение(ТекстОшибки); КонецЕсли; @@ -376,7 +373,7 @@ Возврат Ложь; КонецЕсли; - Если Лев(НетипизированноеТело, 1) <> "<" ИЛИ Прав(НетипизированноеТело, 1) <> ">" Тогда + Если Не СтрНачинаетсяС(НетипизированноеТело, "<") ИЛИ Не СтрЗаканчиваетсяНа(НетипизированноеТело, ">") Тогда Возврат Ложь; КонецЕсли; @@ -399,22 +396,19 @@ Функция ПредставлениеСообщенияДляЖурнала(Знач Сообщение) Шаблон = НСтр("ru = 'Канал: %1'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()); - Представление = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(Шаблон, - ИмяКаналаПоТипуСообщения(Сообщение.Body.Тип())); - + Представление = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(Шаблон, ИмяКаналаПоТипуСообщения(Сообщение.Body.Тип())); + Запись = Новый ЗаписьXML; Запись.УстановитьСтроку(); ФабрикаXDTO.ЗаписатьXML(Запись, Сообщение.Header, , , , НазначениеТипаXML.Явное); - + Шаблон = НСтр("ru = 'Заголовок: |%1'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()); - Представление = Представление + Символы.ПС + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(Шаблон, - Запись.Закрыть()); + Представление = Представление + Символы.ПС + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(Шаблон, Запись.Закрыть()); Если СообщенияВМоделиСервисаПовтИсп.ТипТелоОбласти().ЭтоПотомок(Сообщение.Body.Тип()) Тогда Шаблон = НСтр("ru = 'Область данных: %1'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()); - Представление = Представление + Символы.ПС + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(Шаблон, - Формат(Сообщение.Body.Zone, "ЧН=0; ЧГ=")); + Представление = Представление + Символы.ПС + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(Шаблон, Формат(Сообщение.Body.Zone, "ЧН=0; ЧГ=")); КонецЕсли; Возврат Представление; @@ -440,8 +434,7 @@ Если Не ИнформацияПодключения.Свойство("URL") Или Не ЗначениеЗаполнено(ИнформацияПодключения.URL) Тогда - ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Не задан URL сервиса обмена сообщениями с информационной базой %1'"), ПредставлениеПолучателя); + ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Не задан URL сервиса обмена сообщениями с информационной базой %1'"), ПредставлениеПолучателя); КонецЕсли; ВерсияКорреспондента = ИнтерфейсыСообщенийВМоделиСервиса.ВерсияИнтерфейсаКорреспондента( diff --git a/SSL/src/CommonModules/СообщенияВМоделиСервисаРазделениеДанных/Module.bsl b/SSL/src/CommonModules/СообщенияВМоделиСервисаРазделениеДанных/Module.bsl index 6acd13564..5ed1894ba 100644 --- a/SSL/src/CommonModules/СообщенияВМоделиСервисаРазделениеДанных/Module.bsl +++ b/SSL/src/CommonModules/СообщенияВМоделиСервисаРазделениеДанных/Module.bsl @@ -87,8 +87,7 @@ Если ОбщегоНазначения.ЗначениеРазделителяСеанса() <> Сообщение.Body.Zone Тогда ШаблонСообщения = НСтр("ru = 'Попытка отправить сообщение от имени области %1 из области %2'"); - ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонСообщения, - Сообщение.Body.Zone, + ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонСообщения, Сообщение.Body.Zone, ОбщегоНазначения.ЗначениеРазделителяСеанса()); ВызватьИсключение(ТекстСообщения); КонецЕсли; diff --git a/SSL/src/CommonModules/СообщенияПоставляемыхДанныхОбработчикСообщения/Module.bsl b/SSL/src/CommonModules/СообщенияПоставляемыхДанныхОбработчикСообщения/Module.bsl index a27a9e567..c2f54bb0e 100644 --- a/SSL/src/CommonModules/СообщенияПоставляемыхДанныхОбработчикСообщения/Module.bsl +++ b/SSL/src/CommonModules/СообщенияПоставляемыхДанныхОбработчикСообщения/Module.bsl @@ -105,7 +105,7 @@ ПараметрыЗадания.Вставить("ИмяМетода" , "СообщенияПоставляемыхДанныхОбработчикСообщения.ЗагрузитьДанные"); ПараметрыЗадания.Вставить("Параметры" , ПараметрыМетода); ПараметрыЗадания.Вставить("ОбластьДанных", -1); - ПараметрыЗадания.Вставить("ЗапланированныйМоментЗапуска", МестноеВремя(Дескриптор.RecommendedUpdateDate)); + ПараметрыЗадания.Вставить("ЗапланированныйМоментЗапуска", Дескриптор.RecommendedUpdateDate); ПараметрыЗадания.Вставить("КоличествоПовторовПриАварийномЗавершении", 3); УстановитьПривилегированныйРежим(Истина); @@ -192,8 +192,7 @@ УровеньЖурналаРегистрации.Ошибка, , , ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()) + Символы.ПС + ПоставляемыеДанные.ПолучитьОписаниеДанных(Дескриптор) - + Символы.ПС + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Код обработчика: %1'"), Обработчик.КодОбработчика)); + + Символы.ПС + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Код обработчика: %1'"), Обработчик.КодОбработчика)); ЗаписьНеобработанныхДанных.КоличествоПопыток = ЗаписьНеобработанныхДанных.КоличествоПопыток + 1; Если ЗаписьНеобработанныхДанных.КоличествоПопыток > 3 Тогда @@ -207,12 +206,27 @@ КонецПопытки; КонецЦикла; - Попытка - УдалитьФайлы(ИмяФайлаВыгрузки); - Исключение - ЗаписьЖурналаРегистрации(НСтр("ru = 'Поставляемые данные.Загрузка данных'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), - УровеньЖурналаРегистрации.Ошибка, , , ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); - КонецПопытки; + Если ИмяФайлаВыгрузки <> Неопределено Тогда + + ФайлВременный = Новый Файл(ИмяФайлаВыгрузки); + + Если ФайлВременный.Существует() Тогда + + Попытка + + ФайлВременный.УстановитьТолькоЧтение(Ложь); + УдалитьФайлы(ИмяФайлаВыгрузки); + + Исключение + + ЗаписьЖурналаРегистрации(НСтр("ru = 'Поставляемые данные.Загрузка данных'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), + УровеньЖурналаРегистрации.Ошибка, , , ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); + + КонецПопытки; + + КонецЕсли; + + КонецЕсли; Если ТранзакцияАктивна() Тогда @@ -290,8 +304,7 @@ ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), УровеньЖурналаРегистрации.Информация, , , ПоставляемыеДанные.ПолучитьОписаниеДанных(Дескриптор) - + Символы.ПС + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Код обработчика: %1'"), Обработчик.КодОбработчика)); + + Символы.ПС + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Код обработчика: %1'"), Обработчик.КодОбработчика)); Исключение ЗаписьЖурналаРегистрации(НСтр("ru = 'Поставляемые данные.Отмена обработки'", @@ -299,8 +312,7 @@ УровеньЖурналаРегистрации.Ошибка, , , ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()) + Символы.ПС + ПоставляемыеДанные.ПолучитьОписаниеДанных(Дескриптор) - + Символы.ПС + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Код обработчика: %1'"), Обработчик.КодОбработчика)); + + Символы.ПС + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Код обработчика: %1'"), Обработчик.КодОбработчика)); КонецПопытки; КонецПроцедуры diff --git a/SSL/src/CommonModules/СообщенияУдаленногоАдминистрированияРеализация/Module.bsl b/SSL/src/CommonModules/СообщенияУдаленногоАдминистрированияРеализация/Module.bsl index 5f267173c..ec45c1c61 100644 --- a/SSL/src/CommonModules/СообщенияУдаленногоАдминистрированияРеализация/Module.bsl +++ b/SSL/src/CommonModules/СообщенияУдаленногоАдминистрированияРеализация/Module.bsl @@ -691,8 +691,7 @@ Исключение ШаблонСообщения = НСтр("ru = 'Указан некорректный адрес электронной почты: %1 |Ошибка: %2'"); - ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонСообщения, - АдресЭлектроннойПочты, ИнформацияОбОшибке().Описание); + ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонСообщения, АдресЭлектроннойПочты, ИнформацияОбОшибке().Описание); ВызватьИсключение(ТекстСообщения); КонецПопытки; @@ -723,7 +722,7 @@ Если СтруктураАдресаЭП.Количество() > 0 Тогда СтрокаТабличнойЧасти.АдресЭП = СтруктураАдресаЭП[0].Адрес; - Поз = Найти(СтрокаТабличнойЧасти.АдресЭП, "@"); + Поз = СтрНайти(СтрокаТабличнойЧасти.АдресЭП, "@"); Если Поз <> 0 Тогда СтрокаТабличнойЧасти.ДоменноеИмяСервера = Сред(СтрокаТабличнойЧасти.АдресЭП, Поз + 1); КонецЕсли; diff --git a/SSL/src/CommonModules/СтандартныеПодсистемыВызовСервера/Module.bsl b/SSL/src/CommonModules/СтандартныеПодсистемыВызовСервера/Module.bsl index c4f83f7f7..4e06b60d3 100644 --- a/SSL/src/CommonModules/СтандартныеПодсистемыВызовСервера/Module.bsl +++ b/SSL/src/CommonModules/СтандартныеПодсистемыВызовСервера/Module.bsl @@ -41,13 +41,18 @@ ПараметрыКлиента.Вставить("ПараметрЗапуска", Параметры.ПараметрЗапуска); ПараметрыКлиента.Вставить("СтрокаСоединенияИнформационнойБазы", Параметры.СтрокаСоединенияИнформационнойБазы); ПараметрыКлиента.Вставить("ПривилегированныйРежимУстановленПриЗапуске", ПривилегированныйРежимУстановленПриЗапуске); - ПараметрыКлиента.Вставить("ЭтоВебКлиент", Параметры.ЭтоВебКлиент); + ПараметрыКлиента.Вставить("ЭтоВебКлиент", Параметры.ЭтоВебКлиент); ПараметрыКлиента.Вставить("ЭтоВебКлиентПодMacOS", Параметры.ЭтоВебКлиентПодMacOS); - ПараметрыКлиента.Вставить("ЭтоLinuxКлиент", Параметры.ЭтоLinuxКлиент); + ПараметрыКлиента.Вставить("ЭтоLinuxКлиент", Параметры.ЭтоLinuxКлиент); + ПараметрыКлиента.Вставить("ИспользуемыйКлиент", Параметры.ИспользуемыйКлиент); ПараметрыКлиента.Вставить("ОперативнаяПамять", Параметры.ОперативнаяПамять); - ПараметрыСеанса.ПараметрыКлиентаНаСервере = Новый ФиксированноеСоответствие(ПараметрыКлиента); + Если СтрНайти(НРег(Параметры.ПараметрЗапуска), НРег("ЗапуститьОбновлениеИнформационнойБазы")) > 0 Тогда + ОбновлениеИнформационнойБазыСлужебный.УстановитьЗапускОбновленияИнформационнойБазы(Истина); + КонецЕсли; + Справочники.ВерсииРасширений.ПеререгистрироватьВерсиюРасширенийВРежимеОтладки(); + Если Не ОбщегоНазначенияПовтИсп.РазделениеВключено() Тогда Если ПланыОбмена.ГлавныйУзел() <> Неопределено Или ЗначениеЗаполнено(Константы.ГлавныйУзел.Получить()) Тогда @@ -75,12 +80,6 @@ Возврат ФиксированныеПараметры; КонецЕсли; - ОбработчикиСобытия = ОбщегоНазначения.ОбработчикиСлужебногоСобытия( - "СтандартныеПодсистемы.БазоваяФункциональность\ПриДобавленииПараметровРаботыКлиентскойЛогикиСтандартныхПодсистемПриЗапуске"); - Для каждого Обработчик Из ОбработчикиСобытия Цикл - Обработчик.Модуль.ПриДобавленииПараметровРаботыКлиентскойЛогикиСтандартныхПодсистемПриЗапуске(Параметры); - КонецЦикла; - ОбработчикиСобытия = ОбщегоНазначения.ОбработчикиСлужебногоСобытия( "СтандартныеПодсистемы.БазоваяФункциональность\ПриДобавленииПараметровРаботыКлиентаПриЗапуске"); @@ -107,13 +106,6 @@ Параметры = Новый Структура; - ОбработчикиСобытия = ОбщегоНазначения.ОбработчикиСлужебногоСобытия( - "СтандартныеПодсистемы.БазоваяФункциональность\ПриДобавленииПараметровРаботыКлиентскойЛогикиСтандартныхПодсистем"); - - Для каждого Обработчик Из ОбработчикиСобытия Цикл - Обработчик.Модуль.ПриДобавленииПараметровРаботыКлиентскойЛогикиСтандартныхПодсистем(Параметры); - КонецЦикла; - ОбработчикиСобытия = ОбщегоНазначения.ОбработчикиСлужебногоСобытия( "СтандартныеПодсистемы.БазоваяФункциональность\ПриДобавленииПараметровРаботыКлиента"); @@ -132,55 +124,6 @@ КонецФункции -// Возвращает тип платформы строкой. -Функция ТипПлатформыСервераСтрокой() Экспорт - - СистемнаяИнфо = Новый СистемнаяИнформация; - - Если СистемнаяИнфо.ТипПлатформы = ТипПлатформы.Linux_x86 Тогда - Возврат "Linux_x86"; - - ИначеЕсли СистемнаяИнфо.ТипПлатформы = ТипПлатформы.Linux_x86_64 Тогда - Возврат "Linux_x86_64"; - - ИначеЕсли СистемнаяИнфо.ТипПлатформы = ТипПлатформы.Windows_x86 Тогда - Возврат "Windows_x86"; - - ИначеЕсли СистемнаяИнфо.ТипПлатформы = ТипПлатформы.Windows_x86_64 Тогда - Возврат "Windows_x86_64"; - - ИначеЕсли СистемнаяИнфо.ТипПлатформы = Неопределено Тогда - Возврат Неопределено; - КонецЕсли; - - ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Неизвестный тип платформы ""%1""'"), - Строка(СистемнаяИнфо.ТипПлатформы)); - -КонецФункции - -// Возвращает массив имен клиентских модулей. -Функция МассивИменКлиентскихМодулей() Экспорт - - КлиентскиеМодули = Новый Массив; - - Для каждого ОбщийМодуль Из Метаданные.ОбщиеМодули Цикл - Если ОбщийМодуль.Глобальный Тогда - Продолжить; - КонецЕсли; - Если ОбщийМодуль.КлиентУправляемоеПриложение Тогда - КлиентскиеМодули.Добавить(ОбщийМодуль.Имя); - КонецЕсли; - КонецЦикла; - - Возврат КлиентскиеМодули; - -КонецФункции - -#КонецОбласти - -#Область СлужебныеПроцедурыИФункции - // Устанавливает состояние отмены при создании форм рабочего стола. // Требуется, если при запуске программы возникает необходимость // взаимодействия с пользователем (интерактивная обработка). @@ -218,6 +161,53 @@ КонецПроцедуры +// Возвращает тип платформы строкой. +Функция ТипПлатформыСервераСтрокой() Экспорт + + СистемнаяИнфо = Новый СистемнаяИнформация; + + Если СистемнаяИнфо.ТипПлатформы = ТипПлатформы.Linux_x86 Тогда + Возврат "Linux_x86"; + + ИначеЕсли СистемнаяИнфо.ТипПлатформы = ТипПлатформы.Linux_x86_64 Тогда + Возврат "Linux_x86_64"; + + ИначеЕсли СистемнаяИнфо.ТипПлатформы = ТипПлатформы.Windows_x86 Тогда + Возврат "Windows_x86"; + + ИначеЕсли СистемнаяИнфо.ТипПлатформы = ТипПлатформы.Windows_x86_64 Тогда + Возврат "Windows_x86_64"; + + ИначеЕсли СистемнаяИнфо.ТипПлатформы = Неопределено Тогда + Возврат Неопределено; + КонецЕсли; + + ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Неизвестный тип платформы ""%1""'"), Строка(СистемнаяИнфо.ТипПлатформы)); + +КонецФункции + +// Возвращает массив имен клиентских модулей. +Функция МассивИменКлиентскихМодулей() Экспорт + + КлиентскиеМодули = Новый Массив; + + Для каждого ОбщийМодуль Из Метаданные.ОбщиеМодули Цикл + Если ОбщийМодуль.Глобальный Тогда + Продолжить; + КонецЕсли; + Если ОбщийМодуль.КлиентУправляемоеПриложение Тогда + КлиентскиеМодули.Добавить(ОбщийМодуль.Имя); + КонецЕсли; + КонецЦикла; + + Возврат КлиентскиеМодули; + +КонецФункции + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + // Возвращает структуру параметров, необходимых для работы клиентского кода // конфигурации при завершении работы. // @@ -225,13 +215,6 @@ Параметры = Новый Структура(); - ОбработчикиСобытия = ОбщегоНазначения.ОбработчикиСлужебногоСобытия( - "СтандартныеПодсистемы.БазоваяФункциональность\ПриДобавленииПараметровРаботыКлиентскойЛогикиСтандартныхПодсистемПриЗавершении"); - - Для каждого Обработчик Из ОбработчикиСобытия Цикл - Обработчик.Модуль.ПриДобавленииПараметровРаботыКлиентскойЛогикиСтандартныхПодсистемПриЗавершении(Параметры); - КонецЦикла; - ОбработчикиСобытия = ОбщегоНазначения.ОбработчикиСлужебногоСобытия( "СтандартныеПодсистемы.БазоваяФункциональность\ПриДобавленииПараметровРаботыКлиентаПриЗавершении"); @@ -322,6 +305,33 @@ КонецФункции +// Вызывается из обработчика ожидания каждые 20 минут, например, для контроля +// динамического обновления и окончания срока действия учетной записи пользователя. +// +// Параметры: +// Параметры - Структура - в структуру следует вставить свойства для дальнейшего анализа на клиенте. +// +Процедура ПриВыполненииСтандартныхПериодическихПроверокНаСервере(Параметры) Экспорт + + // СтандартныеПодсистемы.БазоваяФункциональность + КонтрольДинамическогоОбновленияКонфигурацииСлужебный.ПриВыполненииСтандартныхПериодическихПроверокНаСервере(Параметры); + // Конец СтандартныеПодсистемы.БазоваяФункциональность + + // СтандартныеПодсистемы.Пользователи + ПользователиСлужебный.ПриВыполненииСтандартныхПериодическихПроверокНаСервере(Параметры); + // Конец СтандартныеПодсистемы.Пользователи + +КонецПроцедуры + +// Возвращает полное имя объекта метаданных по его типу. +Функция ПолноеИмяОбъектаМетаданных(Тип) Экспорт + ОбъектМетаданных = Метаданные.НайтиПоТипу(Тип); + Если ОбъектМетаданных = Неопределено Тогда + Возврат Неопределено; + КонецЕсли; + Возврат ОбъектМетаданных.ПолноеИмя(); +КонецФункции + //////////////////////////////////////////////////////////////////////////////// // Работа с предопределенными данными. diff --git a/SSL/src/CommonModules/СтандартныеПодсистемыГлобальный/Module.bsl b/SSL/src/CommonModules/СтандартныеПодсистемыГлобальный/Module.bsl index 4f05ee082..48c42ac91 100644 --- a/SSL/src/CommonModules/СтандартныеПодсистемыГлобальный/Module.bsl +++ b/SSL/src/CommonModules/СтандартныеПодсистемыГлобальный/Module.bsl @@ -5,6 +5,15 @@ #Область СлужебныеПроцедурыИФункции +// Вызывается каждые 20 минут, например, для контроля динамического обновления и +// окончания срока действия учетной записи пользователя. +// +Процедура ОбработчикОжиданияСтандартныхПериодическихПроверок() Экспорт + + СтандартныеПодсистемыКлиент.ПриВыполненииСтандартныхПериодическихПроверок(); + +КонецПроцедуры + // Продолжает завершение в режиме интерактивного взаимодействия с пользователем // после установки Отказ = Истина. // diff --git a/SSL/src/CommonModules/СтандартныеПодсистемыКлиент/Module.bsl b/SSL/src/CommonModules/СтандартныеПодсистемыКлиент/Module.bsl index dc6adfd4d..a7ba72dd6 100644 --- a/SSL/src/CommonModules/СтандартныеПодсистемыКлиент/Module.bsl +++ b/SSL/src/CommonModules/СтандартныеПодсистемыКлиент/Module.bsl @@ -27,23 +27,20 @@ Если ПустаяСтрока(СокрЛП(ПредставлениеЗаголовка)) Тогда Если ПараметрыКлиента.Свойство("ПредставлениеОбластиДанных") Тогда ШаблонЗаголовка = "%1 / %2 / %3"; - ЗаголовокПриложения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонЗаголовка, - ПараметрыКлиента.ПредставлениеОбластиДанных, ПредставлениеКонфигурации, - ПредставлениеПользователя); + ЗаголовокПриложения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонЗаголовка, ПараметрыКлиента.ПредставлениеОбластиДанных, + ПредставлениеКонфигурации, ПредставлениеПользователя); Иначе ШаблонЗаголовка = "%1 / %2"; - ЗаголовокПриложения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонЗаголовка, - ПредставлениеКонфигурации, ПредставлениеПользователя); + ЗаголовокПриложения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонЗаголовка, ПредставлениеКонфигурации, ПредставлениеПользователя); КонецЕсли; Иначе ШаблонЗаголовка = "%1 / %2 / %3"; - ЗаголовокПриложения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонЗаголовка, - СокрЛП(ПредставлениеЗаголовка), ПредставлениеПользователя, ПредставлениеКонфигурации); + ЗаголовокПриложения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонЗаголовка, СокрЛП(ПредставлениеЗаголовка), + ПредставлениеПользователя, ПредставлениеКонфигурации); КонецЕсли; Иначе ШаблонЗаголовка = "%1 / %2"; - ЗаголовокПриложения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонЗаголовка, - НСтр("ru = 'Не установлены разделители'"), ПараметрыКлиента.ПодробнаяИнформация); + ЗаголовокПриложения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонЗаголовка, НСтр("ru = 'Не установлены разделители'"), ПараметрыКлиента.ПодробнаяИнформация); КонецЕсли; ОбщегоНазначенияКлиентПереопределяемый.ПриУстановкеЗаголовкаКлиентскогоПриложения(ЗаголовокПриложения, ПриЗапуске); @@ -87,10 +84,12 @@ Если ДополнительныеПараметры <> Неопределено Тогда Параметры = ДополнительныеПараметры; - Иначе - Параметры = ПараметрыВопросаПользователю(); + Иначе + Параметры = Новый Структура; КонецЕсли; + ОбщегоНазначенияКлиентСервер.ДополнитьСтруктуру(Параметры, ПараметрыВопросаПользователю(), Ложь); + Если ТипЗнч(Кнопки) = Тип("РежимДиалогаВопрос") Тогда Если Кнопки = РежимДиалогаВопрос.ДаНет Тогда КнопкиПараметр = "РежимДиалогаВопрос.ДаНет"; @@ -110,25 +109,15 @@ КонецЕсли; Если ТипЗнч(Параметры.КнопкаПоУмолчанию) = Тип("КодВозвратаДиалога") Тогда - КнопкаПоУмолчаниюПараметр = КодВозвратаДиалогаВСтроку(Параметры.КнопкаПоУмолчанию); - Иначе - КнопкаПоУмолчаниюПараметр = Параметры.КнопкаПоУмолчанию; + Параметры.КнопкаПоУмолчанию = КодВозвратаДиалогаВСтроку(Параметры.КнопкаПоУмолчанию); КонецЕсли; Если ТипЗнч(Параметры.КнопкаТаймаута) = Тип("КодВозвратаДиалога") Тогда - КнопкаТаймаутаПараметр = КодВозвратаДиалогаВСтроку(Параметры.КнопкаТаймаута); - Иначе - КнопкаТаймаутаПараметр = Параметры.КнопкаТаймаута; + Параметры.КнопкаТаймаута = КодВозвратаДиалогаВСтроку(Параметры.КнопкаТаймаута); КонецЕсли; - Параметры.Вставить("Кнопки", КнопкиПараметр); - Параметры.Вставить("Таймаут", Параметры.Таймаут); - Параметры.Вставить("КнопкаПоУмолчанию", КнопкаПоУмолчаниюПараметр); - Параметры.Вставить("Заголовок", Параметры.Заголовок); - Параметры.Вставить("КнопкаТаймаута", КнопкаТаймаутаПараметр); - Параметры.Вставить("ТекстСообщения", ТекстВопроса); - Параметры.Вставить("Картинка", Параметры.Картинка); - Параметры.Вставить("ПредлагатьБольшеНеЗадаватьЭтотВопрос", Параметры.ПредлагатьБольшеНеЗадаватьЭтотВопрос); + Параметры.Вставить("Кнопки", КнопкиПараметр); + Параметры.Вставить("ТекстСообщения", ТекстВопроса); ОткрытьФорму("ОбщаяФорма.Вопрос", Параметры,,,,,ОписаниеОповещенияОЗавершении); @@ -163,7 +152,7 @@ Параметры.Вставить("ПредлагатьБольшеНеЗадаватьЭтотВопрос", Истина); Параметры.Вставить("БольшеНеЗадаватьЭтотВопрос", Ложь); Параметры.Вставить("БлокироватьВесьИнтерфейс", Ложь); - Параметры.Вставить("Картинка", Неопределено); + Параметры.Вставить("Картинка", БиблиотекаКартинок.Вопрос32); Возврат Параметры; КонецФункции @@ -225,13 +214,12 @@ "ДействияПередНачаломРаботыСистемыОбработкаЗавершения", ЭтотОбъект, Параметры)); ОбновитьПараметрыРаботыКлиента(Параметры, Истина, ОповещениеЗавершения <> Неопределено); - ПараметрыКлиента = СтандартныеПодсистемыКлиентПовтИсп.ПараметрыРаботыКлиентаПриЗапуске(); Параметры.Вставить("ОбработкаПродолжения", Новый ОписаниеОповещения( "ДействияПередНачаломРаботыСистемыПослеПроверкиВерсииПлатформы", ЭтотОбъект, Параметры)); - + Попытка - ПроверитьВерсиюПлатформыПриЗапуске(Параметры); + ОбновлениеИнформационнойБазыКлиент.ПередНачаломРаботыСистемы(Параметры); Исключение ОбработатьОшибкуПриЗапускеИлиЗавершении(Параметры, ИнформацияОбОшибке(), "Запуск", Истина); КонецПопытки; @@ -239,8 +227,18 @@ Возврат; КонецЕсли; + ПроверитьВерсиюПлатформыПриЗапуске(Параметры); + Если ИнтерактивнаяОбработкаПередНачаломРаботыСистемы(Параметры) Тогда + Возврат; + КонецЕсли; + ВыполнитьОбработкуОповещения(Параметры.ОбработкаПродолжения); + Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.ОценкаПроизводительности") Тогда + МодульОценкаПроизводительностиКлиентСервер = ОбщегоНазначенияКлиент.ОбщийМодуль("ОценкаПроизводительностиКлиентСервер"); + МодульОценкаПроизводительностиКлиентСервер.НачатьЗамерВремени("ОбщееВремяЗапускаПриложения"); + КонецЕсли; + КонецПроцедуры // Выполнить стандартные действия при начале работы пользователя @@ -424,113 +422,37 @@ КонецФункции //////////////////////////////////////////////////////////////////////////////// -// Поиск и удаление дублей. +// Вывод результата выполнения. -// Устарела. Следует использовать ПоискИУдалениеДублейКлиент.ОбъединитьВыделенные. -// -Процедура ОбъединитьВыделенные(Знач ОбъединяемыеЭлементы) Экспорт - Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.ПоискИУдалениеДублей") Тогда - МодульПоискИУдалениеДублейКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("ПоискИУдалениеДублейКлиент"); - МодульПоискИУдалениеДублейКлиент.ОбъединитьВыделенные(ОбъединяемыеЭлементы); - КонецЕсли; -КонецПроцедуры - -// Устарела. Следует использовать ПоискИУдалениеДублейКлиент.ЗаменитьВыделенные. -// -Процедура ЗаменитьВыделенные(Знач ОбъединяемыеЭлементы) Экспорт - Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.ПоискИУдалениеДублей") Тогда - МодульПоискИУдалениеДублейКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("ПоискИУдалениеДублейКлиент"); - МодульПоискИУдалениеДублейКлиент.ЗаменитьВыделенные(ОбъединяемыеЭлементы); - КонецЕсли; -КонецПроцедуры - -// Устарела. Следует использовать ПоискИУдалениеДублейКлиент.ПоказатьМестаИспользования. -// -Процедура ПоказатьМестаИспользования(Знач Элементы, Знач ПараметрыОткрытия = Неопределено) Экспорт - Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.ПоискИУдалениеДублей") Тогда - МодульПоискИУдалениеДублейКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("ПоискИУдалениеДублейКлиент"); - МодульПоискИУдалениеДублейКлиент.ПоказатьМестаИспользования(Элементы, ПараметрыОткрытия); - КонецЕсли; -КонецПроцедуры - -// ИспользованиеМодальности - -// Устарела. Следует использовать ПоказатьВопросПользователю. -// Вызывает форму вопроса. -// Параметры и возвращаемое значение совместимы с функцией глобального контекста Вопрос со следующими дополнениями: +// Выводит результат работы прикладного кода. // // Параметры: -// Кнопки - СписокЗначений - в котором: -// Значение - содержит значение, связанное с -// кнопкой и возвращаемое при выборе кнопки. В качестве значения может использоваться значение -// перечисления КодВозвратаДиалога, а также другие значения, поддерживающее XDTO сериализацию. -// Представление - задает текст кнопки. +// Форма - УправляемаяФорма - Форма, для которой требуется вывод. +// Результат - Структура - Результат выполнения операции, который необходимо вывести. +// * Шаги - СписокЗначений - Информация, которую необходимо вывести на клиенте. +// Шаги добавляются только при помощи процедур: +// ** СтандартныеПодсистемыКлиентСервер.ОповеститьДинамическиеСписки() +// ** СтандартныеПодсистемыКлиентСервер.ОповеститьОткрытыеФормы() +// ** СтандартныеПодсистемыКлиентСервер.РазвернутьУзлыДерева() +// ** СтандартныеПодсистемыКлиентСервер.ВывестиПредупреждение() +// ** СтандартныеПодсистемыКлиентСервер.ВывестиСообщение() +// ** СтандартныеПодсистемыКлиентСервер.ВывестиОповещение() +// ** СтандартныеПодсистемыКлиентСервер.ВывестиФорму() +// Ручное редактирование коллекции Шаги не рекомендуется. +// ОбработчикЗавершения - ОписаниеОповещения - Описание процедуры, +// которая будет вызвана после завершения показа (со значением Неопределено). // -// БольшеНеЗадаватьЭтотВопрос - Булево - принимает значение, выбранное пользователем в соответствующим -// флажке диалога. -// -// ПредлагатьБольшеНеЗадаватьЭтотВопрос - Булево - флаг того, что пользователю надо предлагать вариант. -// -// Возвращаемое значение: -// КодВозвратаДиалога - ответ пользователя. Либо одно из значений из списка значений Кнопки. -// -Функция ВопросПользователю(ТекстСообщения, Кнопки, Таймаут = 0, КнопкаПоУмолчанию = Неопределено, Заголовок = "", КнопкаТаймаута = Неопределено, - БольшеНеЗадаватьЭтотВопрос = Ложь, ПредлагатьБольшеНеЗадаватьЭтотВопрос=Истина) Экспорт - - БольшеНеЗадаватьЭтотВопрос = Ложь; - - Параметры = Новый Структура; - - Если ТипЗнч(Кнопки) = Тип("РежимДиалогаВопрос") Тогда - Если Кнопки = РежимДиалогаВопрос.ДаНет Тогда - КнопкиПараметр = "РежимДиалогаВопрос.ДаНет"; - ИначеЕсли Кнопки = РежимДиалогаВопрос.ДаНетОтмена Тогда - КнопкиПараметр = "РежимДиалогаВопрос.ДаНетОтмена"; - ИначеЕсли Кнопки = РежимДиалогаВопрос.ОК Тогда - КнопкиПараметр = "РежимДиалогаВопрос.ОК"; - ИначеЕсли Кнопки = РежимДиалогаВопрос.ОКОтмена Тогда - КнопкиПараметр = "РежимДиалогаВопрос.ОКОтмена"; - ИначеЕсли Кнопки = РежимДиалогаВопрос.ПовторитьОтмена Тогда - КнопкиПараметр = "РежимДиалогаВопрос.ПовторитьОтмена"; - ИначеЕсли Кнопки = РежимДиалогаВопрос.ПрерватьПовторитьПропустить Тогда - КнопкиПараметр = "РежимДиалогаВопрос.ПрерватьПовторитьПропустить"; - КонецЕсли; +Процедура ПоказатьРезультатВыполнения(Форма, Результат, ОбработчикЗавершения = Неопределено) Экспорт + Сценарий = Новый Структура; + Сценарий.Вставить("Форма", Форма); + Сценарий.Вставить("ОбработчикЗавершения", ОбработчикЗавершения); + Сценарий.Вставить("Шаги", ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(Результат, "Шаги")); + Если ТипЗнч(Сценарий.Шаги) = Тип("СписокЗначений") Тогда + ЗапуститьСценарий(Сценарий); Иначе - КнопкиПараметр = Кнопки; + ВернутьРезультат(Сценарий); КонецЕсли; - - Если ТипЗнч(КнопкаПоУмолчанию) = Тип("КодВозвратаДиалога") Тогда - КнопкаПоУмолчаниюПараметр = КодВозвратаДиалогаВСтроку(КнопкаПоУмолчанию); - Иначе - КнопкаПоУмолчаниюПараметр = КнопкаПоУмолчанию; - КонецЕсли; - - Если ТипЗнч(КнопкаТаймаута) = Тип("КодВозвратаДиалога") Тогда - КнопкаТаймаутаПараметр = КодВозвратаДиалогаВСтроку(КнопкаТаймаута); - Иначе - КнопкаТаймаутаПараметр = КнопкаТаймаута; - КонецЕсли; - - Параметры.Вставить("Кнопки", КнопкиПараметр); - Параметры.Вставить("Таймаут", Таймаут); - Параметры.Вставить("КнопкаПоУмолчанию", КнопкаПоУмолчаниюПараметр); - Параметры.Вставить("Заголовок", Заголовок); - Параметры.Вставить("КнопкаТаймаута", КнопкаТаймаутаПараметр); - Параметры.Вставить("ТекстСообщения", ТекстСообщения); - - Параметры.Вставить("ПредлагатьБольшеНеЗадаватьЭтотВопрос", ПредлагатьБольшеНеЗадаватьЭтотВопрос); - - Результат = ОткрытьФормуМодально("ОбщаяФорма.Вопрос", Параметры); - Если ТипЗнч(Результат) = Тип("Структура") Тогда - БольшеНеЗадаватьЭтотВопрос = Результат.БольшеНеЗадаватьЭтотВопрос; - Возврат Результат.Значение; - Иначе - Возврат КодВозвратаДиалога.Отмена; - КонецЕсли; - -КонецФункции - -// Конец ИспользованиеМодальности +КонецПроцедуры #КонецОбласти @@ -607,13 +529,11 @@ Если Параметры.Отказ Тогда Кнопки = Новый СписокЗначений(); - Кнопки.Добавить("Перезапустить", НСтр("ru = 'Перезапустить'")); Кнопки.Добавить("Завершить", НСтр("ru = 'Завершить работу'")); + Кнопки.Добавить("Перезапустить", НСтр("ru = 'Перезапустить'")); ПараметрыВопроса = ПараметрыВопросаПользователю(); - ПараметрыВопроса.КнопкаПоУмолчанию = "Перезапустить"; - ПараметрыВопроса.КнопкаТаймаута = "Перезапустить"; - ПараметрыВопроса.Таймаут = 60; + ПараметрыВопроса.КнопкаПоУмолчанию = "Завершить"; ПараметрыВопроса.ПредлагатьБольшеНеЗадаватьЭтотВопрос = Ложь; ПараметрыВопроса.БлокироватьВесьИнтерфейс = Истина; ПараметрыВопроса.Картинка = БиблиотекаКартинок.Предупреждение32; @@ -695,7 +615,7 @@ ШаблонИмениФайла = "1cv8[ТонкийКлиент][УчебнаяПлатформа].exe"; - ЭтоУчебнаяПлатформа = СтандартныеПодсистемыКлиентПовтИсп.ПараметрыРаботыКлиента().ЭтоУчебнаяПлатформа; + ЭтоУчебнаяПлатформа = СтандартныеПодсистемыКлиентПовтИсп.ПараметрыРаботыКлиентаПриЗапуске().ЭтоУчебнаяПлатформа; #Если ТонкийКлиент Тогда ЭтоТонкийКлиент = Не ПолучитьФайлаКонфигуратора; @@ -732,198 +652,56 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// Обработка результата выполнения. - -// Выводит результат выполнения какой-либо операции. +// Вызывается при необходимости открыть форму списка активных пользователей, +// которые в данный момент времени работают с системой. // -// Предназначена только для отображения результата работы сервера на клиенте, -// не предназначена для отображения промежуточных стадий - диалогов и т.п. -// -// См. также: -// СтандартныеПодсистемыКлиентСервер.НовыйРезультатВыполнения() -// СтандартныеПодсистемыКлиентСервер.ОповеститьДинамическиеСписки() -// СтандартныеПодсистемыКлиентСервер.ВывестиПредупреждение() -// СтандартныеПодсистемыКлиентСервер.ВывестиСообщение() -// СтандартныеПодсистемыКлиентСервер.ВывестиОповещение() -// СтандартныеПодсистемыКлиентСервер.РазвернутьУзлыДерева() -// -// Параметры: -// Форма - УправляемаяФорма - Форма, для которой требуется вывод. -// Результат - Структура - Результат выполнения операции, который необходимо вывести. -// * ВыводОповещения - Структура - Всплывающее оповещение. -// ** Использование - Булево - Выводить оповещение. -// ** Заголовок - Строка - Заголовок оповещения. -// ** Текст - Строка - Текст оповещения. -// ** Ссылка - Строка - Навигационная гиперссылка текста. -// ** Картинка - Картинка - Картинка оповещения. -// * ВыводСообщения - Структура - Сообщение формы, привязанное к реквизиту. -// ** Использование - Булево - Выводить сообщение. -// ** Текст - Строка - Текст сообщения. -// ** ПутьКРеквизитуФормы - Строка - Путь к реквизиту формы, к которому относится сообщение. -// * ВыводПредупреждения - Структура - Окно предупреждения, блокирующее весь интерфейс. -// ** Использование - Булево - Выводить предупреждение. -// ** Заголовок - Строка - Заголовок окна. -// ** Текст - Строка - Текст предупреждения. -// ** ТекстОшибок - Строка - Необязательный. Тексты ошибок, которые при желании может просмотреть -// пользователь. -// ** ПутьКРеквизитуФормы - Строка - Необязательный. Путь к реквизиту формы, значение которого вызывало -// ошибку. -// * ОповещениеФорм - Структура, Массив из Структура - см. справку к методу глобального контекста Оповестить(). -// ** Использование - Булево - Оповещать открытые формы. -// ** ИмяСобытия - Строка - Имя события, которое используется для первичной идентификации сообщений -// принимающими формами. -// ** Параметр - Произвольный - Набор данных, которые используются принимающей формой для обновления -// состава. -// ** Источник - Произвольный - Источник оповещения, например форма-источником. -// * ОповещениеДинамическихСписков - Структура - см. справку к методу глобального контекста -// ОповеститьОбИзменении(). -// ** Использование - Булево - Оповещать динамические списки. -// ** СсылкаИлиТип - Произвольный - Ссылка, тип, или массив типов, которые необходимо обновить. -// ОбработчикЗавершения - ОписаниеОповещения - Описание процедуры, которая будет вызвана после завершения показа (со -// значением Неопределено). -// -Процедура ПоказатьРезультатВыполнения(Форма, Результат, ОбработчикЗавершения = Неопределено) Экспорт +Процедура ОткрытьСписокАктивныхПользователей(ПараметрыФормы = Неопределено, ВладелецФормы = Неопределено) Экспорт - Если ТипЗнч(Результат) <> Тип("Структура") И ТипЗнч(Результат) <> Тип("ФиксированнаяСтруктура") Тогда - Возврат; + Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.ЗавершениеРаботыПользователей") Тогда + + ИмяФормы = ""; + МодульСоединенияИБКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("СоединенияИБКлиент"); + МодульСоединенияИБКлиент.ПриОпределенииФормыАктивныхПользователей(ИмяФормы); + ОткрытьФорму(ИмяФормы, ПараметрыФормы, ВладелецФормы); + + Иначе + + ПоказатьПредупреждение(, + НСтр("ru = 'Для того чтобы открыть список активных пользователей, перейдите в меню + |Все функции - Стандартные - Активные пользователи.'")); + КонецЕсли; - ОбработчикЗавершенияБудетВыполнен = Ложь; - - Если Результат.Свойство("ВыводОповещения") И Результат.ВыводОповещения.Использование Тогда - Оповещение = Результат.ВыводОповещения; - ПоказатьОповещениеПользователя(Оповещение.Заголовок, Оповещение.Ссылка, Оповещение.Текст, Оповещение.Картинка); - КонецЕсли; - - Если Результат.Свойство("ВыводСообщения") И Результат.ВыводСообщения.Использование Тогда - Сообщение = Новый СообщениеПользователю; - Если ТипЗнч(Форма) = Тип("УправляемаяФорма") Тогда - Сообщение.ИдентификаторНазначения = Форма.УникальныйИдентификатор; - КонецЕсли; - Сообщение.Текст = Результат.ВыводСообщения.Текст; - Сообщение.Поле = Результат.ВыводСообщения.ПутьКРеквизитуФормы; - Сообщение.Сообщить(); - КонецЕсли; - - Если Результат.Свойство("ВыводПредупреждения") И Результат.ВыводПредупреждения.Использование Тогда - ВыводПредупреждения = Результат.ВыводПредупреждения; - Если ЗначениеЗаполнено(ВыводПредупреждения.ТекстОшибок) Тогда - Кнопки = Новый СписокЗначений; - Кнопки.Добавить(1, НСтр("ru = 'Подробнее...'")); - Если ТипЗнч(Форма) = Тип("УправляемаяФорма") И ЗначениеЗаполнено(ВыводПредупреждения.ПутьКРеквизитуФормы) Тогда - Кнопки.Добавить(2, НСтр("ru = 'Перейти к реквизиту'")); - КонецЕсли; - Кнопки.Добавить(0, НСтр("ru = 'Продолжить'")); - - ДополнительныеПараметры = Новый Структура; - ДополнительныеПараметры.Вставить("ВыводПредупреждения", ВыводПредупреждения); - ДополнительныеПараметры.Вставить("Форма", Форма); - ДополнительныеПараметры.Вставить("ОбработчикЗавершения", ОбработчикЗавершения); - Обработчик = Новый ОписаниеОповещения("ПоказатьРезультатВыполненияЗавершение", ЭтотОбъект, ДополнительныеПараметры); - - ПоказатьВопрос(Обработчик, ВыводПредупреждения.Текст, Кнопки, , 1, ВыводПредупреждения.Заголовок); - ОбработчикЗавершенияБудетВыполнен = Истина; - Иначе - ВернутьРезультатПослеПоказаПредупреждения(ВыводПредупреждения.Текст, ОбработчикЗавершения, Неопределено, ВыводПредупреждения.Заголовок); - ОбработчикЗавершенияБудетВыполнен = Истина; - КонецЕсли; - КонецЕсли; - - Если Результат.Свойство("ОповещениеФорм") Тогда - Если ТипЗнч(Результат.ОповещениеФорм) = Тип("Структура") Или ТипЗнч(Результат.ОповещениеФорм) = Тип("ФиксированнаяСтруктура") Тогда - ОповещениеФорм = Результат.ОповещениеФорм; - Если ОповещениеФорм.Использование Тогда - Оповестить(ОповещениеФорм.ИмяСобытия, ОповещениеФорм.Параметр, ОповещениеФорм.Источник); - КонецЕсли; - Иначе - Для Каждого ОповещениеФорм Из Результат.ОповещениеФорм Цикл - Если ОповещениеФорм.Использование Тогда - Оповестить(ОповещениеФорм.ИмяСобытия, ОповещениеФорм.Параметр, ОповещениеФорм.Источник); - КонецЕсли; - КонецЦикла; - КонецЕсли; - КонецЕсли; - - Если Результат.Свойство("ОповещениеДинамическихСписков") И Результат.ОповещениеДинамическихСписков.Использование Тогда - Если ТипЗнч(Результат.ОповещениеДинамическихСписков.СсылкаИлиТип) = Тип("Массив") Тогда - Для Каждого СсылкаИлиТип Из Результат.ОповещениеДинамическихСписков.СсылкаИлиТип Цикл - ОповеститьОбИзменении(СсылкаИлиТип); - КонецЦикла; - Иначе - ОповеститьОбИзменении(Результат.ОповещениеДинамическихСписков.СсылкаИлиТип); - КонецЕсли; - КонецЕсли; - - Если Результат.Свойство("РазворачиваемыеУзлы") Тогда - Для Каждого РазворачиваемыйУзел Из Результат.РазворачиваемыеУзлы Цикл - ТаблицаЭлемент = Форма.Элементы[РазворачиваемыйУзел.ИмяТаблицы]; - Если РазворачиваемыйУзел.Идентификатор = "*" Тогда - Узлы = Форма[РазворачиваемыйУзел.ИмяТаблицы].ПолучитьЭлементы(); - Для Каждого Узел Из Узлы Цикл - ТаблицаЭлемент.Развернуть(Узел.ПолучитьИдентификатор(), РазворачиваемыйУзел.СПодчиненными); - КонецЦикла; - Иначе - ТаблицаЭлемент.Развернуть(РазворачиваемыйУзел.Идентификатор, РазворачиваемыйУзел.СПодчиненными); - КонецЕсли; - КонецЦикла; - КонецЕсли; - - Если Не ОбработчикЗавершенияБудетВыполнен И ОбработчикЗавершения <> Неопределено Тогда - ВыполнитьОбработкуОповещения(ОбработчикЗавершения, Неопределено); - КонецЕсли; - -КонецПроцедуры - -// Обработчик ответа на вопрос при выводе результата выполнения. -// -Процедура ПоказатьРезультатВыполненияЗавершение(Ответ, Результат) Экспорт - - ОбработчикЗавершенияБудетВыполнен = Ложь; - Если ТипЗнч(Ответ) = Тип("Число") Тогда - Если Ответ = 1 Тогда - ПолныйТекст = Строка(Результат.ВыводПредупреждения.Текст) + Символы.ПС + Символы.ПС + Результат.ВыводПредупреждения.ТекстОшибок; - Заголовок = Результат.ВыводПредупреждения.Заголовок; - Если ПустаяСтрока(Заголовок) Тогда - Заголовок = НСтр("ru = 'Подробнее'"); - КонецЕсли; - Обработчик = Новый ОписаниеОповещения("ПоказатьРезультатВыполненияЗавершение", ЭтотОбъект, Результат); - ПоказатьВводСтроки(Обработчик, ПолныйТекст, Заголовок, , Истина); - ОбработчикЗавершенияБудетВыполнен = Истина; - ИначеЕсли Ответ = 2 Тогда - Сообщение = Новый СообщениеПользователю; - Сообщение.ИдентификаторНазначения = Результат.Форма.УникальныйИдентификатор; - Сообщение.Текст = Результат.ВыводПредупреждения.Текст; - Сообщение.Поле = Результат.ВыводПредупреждения.ПутьКРеквизитуФормы; - Сообщение.Сообщить(); - КонецЕсли; - КонецЕсли; - - Если Не ОбработчикЗавершенияБудетВыполнен И Результат.ОбработчикЗавершения <> Неопределено Тогда - ВыполнитьОбработкуОповещения(Результат.ОбработчикЗавершения, Неопределено); - КонецЕсли; - -КонецПроцедуры - -// Показывает окно предупреждение, а после его закрытия вызывает обработчик с заданным результатом. -Процедура ВернутьРезультатПослеПоказаПредупреждения(ТекстПредупреждения, Обработчик, Результат, Заголовок = Неопределено, Таймаут = 0) Экспорт - ПараметрыОбработчика = Новый Структура; - ПараметрыОбработчика.Вставить("Обработчик", Обработчик); - ПараметрыОбработчика.Вставить("Результат", Результат); - Обработчик = Новый ОписаниеОповещения("ВернутьРезультатПослеЗакрытияПростогоДиалога", ЭтотОбъект, ПараметрыОбработчика); - ПоказатьПредупреждение(Обработчик, ТекстПредупреждения, Таймаут, Заголовок); -КонецПроцедуры - -// Продолжение процедуры (см. выше). -Процедура ВернутьРезультатПослеЗакрытияПростогоДиалога(ПараметрыОбработчика) Экспорт - Если ТипЗнч(ПараметрыОбработчика.Обработчик) = Тип("ОписаниеОповещения") Тогда - ВыполнитьОбработкуОповещения(ПараметрыОбработчика.Обработчик, ПараметрыОбработчика.Результат); - КонецЕсли; КонецПроцедуры //////////////////////////////////////////////////////////////////////////////// // Табличный документ +// На сервере рассчитывает сумму, среднее и прочие показатели по числовым ячейкам табличного документа +// и показывает результаты расчетов. +// +// Параметры: +// Форма - УправляемаяФорма, Неопределено - Форма-владелец, из которой осуществляется открытие формы. +// ТабличныйДокумент - ТабличныйДокумент - Таблица, для которой выполняются расчеты. +// ВыделенныеОбласти - Неопределено, Массив - Необязательный. Области документа, которые требуется рассчитать. +// - Неопределено - Значение по умолчанию. Расчет будет произведен по областям, выделенным интерактивно. +// - Массив - Массив областей, для которых требуется расчет. +// Состав аналогичен возвращаемому значению функции СтандартныеПодсистемыКлиент.ВыделенныеОбласти(). +// +// См. также: +// СтандартныеПодсистемыКлиентСервер.РасчетЯчеек(). +// +Процедура ПоказатьРасчетЯчеек(Форма, ТабличныйДокумент, ВыделенныеОбласти = Неопределено) Экспорт + Если ВыделенныеОбласти = Неопределено Тогда + ВыделенныеОбласти = ВыделенныеОбласти(ТабличныйДокумент); + КонецЕсли; + ПараметрыФормы = Новый Структура; + ПараметрыФормы.Вставить("ТабличныйДокумент", ТабличныйДокумент); + ПараметрыФормы.Вставить("ВыделенныеОбласти", ВыделенныеОбласти); + РежимОкна = РежимОткрытияОкнаФормы.БлокироватьОкноВладельца; + ОткрытьФорму("ОбщаяФорма.ПоказателиВыделенныхЯчеек", ПараметрыФормы, Форма, Истина, , , , РежимОкна); +КонецПроцедуры + // Формирует описание выделенных областей табличного документа, которое можно передавать на сервер. // Служит заменой типа ВыделенныеОбластиТабличногоДокумента // когда нужно вычислить сумму ячеек на сервере без контекста. @@ -940,8 +718,7 @@ // * ТипОбласти - ТипОбластиЯчеекТабличногоДокумента - Колонки, Прямоугольник, Строки, Таблица. // // См. также: -// СтандартныеПодсистемыКлиентСервер.СуммаЯчеек(). -// СтандартныеПодсистемыВызовСервера.СуммаЯчеек(). +// СтандартныеПодсистемыВызовСервера.РасчетЯчеек(). // Функция ВыделенныеОбласти(ТабличныйДокумент) Экспорт Результат = Новый Массив; @@ -986,6 +763,69 @@ КонецФункции +//////////////////////////////////////////////////////////////////////////////// +// Вывод результата выполнения. + +// Выводит текст, который пользователь может скопировать. +// +// Параметры: +// Обработчик - ОписаниеОповещения - Описание процедуры, которая будет вызвана после завершения показа. +// Возвращаемое значение аналогично ПоказатьВопросПользователю(). +// Текст - Строка - Текст информации. +// Заголовок - Строка - Необязательный. Заголовок окна. По умолчанию "Подробнее". +// +Процедура ПоказатьПодробнуюИнформацию(Обработчик, Текст, Заголовок = Неопределено) Экспорт + НастройкиДиалога = Новый Структура; + НастройкиДиалога.Вставить("ПредлагатьБольшеНеЗадаватьЭтотВопрос", Ложь); + НастройкиДиалога.Вставить("Картинка", Неопределено); + НастройкиДиалога.Вставить("ПоказыватьКартинку", Ложь); + НастройкиДиалога.Вставить("МожноКопировать", Истина); + НастройкиДиалога.Вставить("КнопкаПоУмолчанию", 0); + НастройкиДиалога.Вставить("ВыделятьКнопкуПоУмолчанию", Ложь); + НастройкиДиалога.Вставить("Заголовок", Заголовок); + + Если Не ЗначениеЗаполнено(НастройкиДиалога.Заголовок) Тогда + НастройкиДиалога.Заголовок = НСтр("ru = 'Подробнее'"); + КонецЕсли; + + Кнопки = Новый СписокЗначений; + Кнопки.Добавить(0, НСтр("ru = 'Закрыть'")); + + ПоказатьВопросПользователю(Обработчик, Текст, Кнопки, НастройкиДиалога); +КонецПроцедуры + +// Открывает форму списка объекта с позиционированием на объекте. +// +// Параметры: +// Ссылка - ЛюбаяСсылка - Объект, который необходимо показать в списке. +// ИмяФормыСписка - Строка - Имя формы списка. +// Если передать Неопределено то будет определена автоматически (потребуется вызов сервера). +// ПараметрыФормы - Структура - Необязательный. Дополнительные параметры открытия формы списка. +// +Процедура ПоказатьВСписке(Ссылка, ИмяФормыСписка, ПараметрыФормы = Неопределено) Экспорт + Если Ссылка = Неопределено Тогда + Возврат; + КонецЕсли; + + Если ИмяФормыСписка = Неопределено Тогда + ПолноеИмя = СтандартныеПодсистемыВызовСервера.ПолноеИмяОбъектаМетаданных(ТипЗнч(Ссылка)); + Если ПолноеИмя = Неопределено Тогда + Возврат; + КонецЕсли; + ИмяФормыСписка = ПолноеИмя + ".ФормаСписка"; + КонецЕсли; + + Если ПараметрыФормы = Неопределено Тогда + ПараметрыФормы = Новый Структура; + КонецЕсли; + + ПараметрыФормы.Вставить("ТекущаяСтрока", Ссылка); + + Форма = ПолучитьФорму(ИмяФормыСписка, ПараметрыФормы, , Истина); + Форма.Открыть(); + Форма.ВыполнитьПереход(Ссылка); +КонецПроцедуры + #КонецОбласти #Область СлужебныеПроцедурыИФункции @@ -1094,6 +934,29 @@ Возврат; КонецЕсли; + Параметры.Вставить("ОбработкаПродолжения", Новый ОписаниеОповещения( + "ДействияПередНачаломРаботыСистемыПослеПроверкиСтатусаОтложенногоОбновления", ЭтотОбъект, Параметры)); + + Попытка + ОбновлениеИнформационнойБазыКлиент.ПроверитьСтатусОбработчиковОтложенногоОбновления(Параметры); + Исключение + ОбработатьОшибкуПриЗапускеИлиЗавершении(Параметры, ИнформацияОбОшибке(), "Запуск", Истина); + КонецПопытки; + Если ИнтерактивнаяОбработкаПередНачаломРаботыСистемы(Параметры) Тогда + Возврат; + КонецЕсли; + + ВыполнитьОбработкуОповещения(Параметры.ОбработкаПродолжения); + +КонецПроцедуры + +// Только для внутреннего использования. Продолжение процедуры ПередНачаломРаботыСистемы. +Процедура ДействияПередНачаломРаботыСистемыПослеПроверкиСтатусаОтложенногоОбновления(Неопределен, Параметры) Экспорт + + Если НЕ ПродолжитьДействияПередНачаломРаботыСистемы(Параметры) Тогда + Возврат; + КонецЕсли; + ПараметрыКлиента = СтандартныеПодсистемыКлиентПовтИсп.ПараметрыРаботыКлиентаПриЗапуске(); Если ПараметрыКлиента.ДоступноИспользованиеРазделенныхДанных Тогда @@ -1105,10 +968,7 @@ КонецЕсли; Попытка - // - Остановка при блокировке информационной базы для обновления. - // - Подготовка параметров работы программы. - // - Обновление неразделенных данных. - ОбновлениеИнформационнойБазыКлиент.ПередНачаломРаботыСистемы(Параметры); + ПодготовитьПараметрыРаботыПрограммы(Параметры); Исключение ОбработатьОшибкуПриЗапускеИлиЗавершении(Параметры, ИнформацияОбОшибке(), "Запуск", Истина); КонецПопытки; @@ -1144,7 +1004,7 @@ КонецЕсли; Попытка - ПользователиСлужебныйКлиент.ПередНачаломРаботыСистемы(Параметры); + ПользователиСлужебныйКлиент.ПередНачаломРаботыСистемыДоАвторизации(Параметры); Исключение ОбработатьОшибкуПриЗапускеИлиЗавершении(Параметры, ИнформацияОбОшибке(), "Запуск", Истина); КонецПопытки; @@ -1188,12 +1048,35 @@ Возврат; КонецЕсли; + Параметры.Вставить("ОбработкаПродолжения", Новый ОписаниеОповещения( + "ДействияПередНачаломРаботыСистемыПослеОбновленияИнформационнойБазы", ЭтотОбъект, Параметры)); + + Попытка + ОбновлениеИнформационнойБазыКлиент.ОбновитьИнформационнуюБазу(Параметры); + Исключение + ОбработатьОшибкуПриЗапускеИлиЗавершении(Параметры, ИнформацияОбОшибке(), "Запуск", Истина); + КонецПопытки; + Если ИнтерактивнаяОбработкаПередНачаломРаботыСистемы(Параметры) Тогда + Возврат; + КонецЕсли; + + ВыполнитьОбработкуОповещения(Параметры.ОбработкаПродолжения); + +КонецПроцедуры + +// Только для внутреннего использования. Продолжение процедуры ПередНачаломРаботыСистемы. +Процедура ДействияПередНачаломРаботыСистемыПослеОбновленияИнформационнойБазы(Неопределен, Параметры) Экспорт + + Если НЕ ПродолжитьДействияПередНачаломРаботыСистемы(Параметры) Тогда + Возврат; + КонецЕсли; + Параметры.Вставить("НомерСледующегоОбработчика", 1); Параметры.Вставить("ОбработкаПродолжения", Новый ОписаниеОповещения( "ДействияПередНачаломРаботыСистемыВОбработчикахСлужебногоСобытия", ЭтотОбъект, Параметры)); Попытка - ОбновлениеИнформационнойБазыКлиент.ОбновитьИнформационнуюБазу(Параметры); + ПользователиСлужебныйКлиент.ПередНачаломРаботыСистемыПослеОбновленияИнформационнойБазы(Параметры); Исключение ОбработатьОшибкуПриЗапускеИлиЗавершении(Параметры, ИнформацияОбОшибке(), "Запуск", Истина); КонецПопытки; @@ -1446,25 +1329,20 @@ // Параметр может состоять из частей, разделенных символом ";". // Первая часть - главное значение параметра запуска. // Наличие дополнительных частей определяется логикой обработки главного параметра. - ПараметрыЗапуска = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(ПараметрЗапуска, ";"); + ПараметрыЗапуска = СтрРазделить(ПараметрЗапуска, ";", Ложь); ПервыйПараметр = ВРег(ПараметрыЗапуска[0]); Отказ = Ложь; ОбработчикиСобытия = ОбщегоНазначенияКлиент.ОбработчикиСлужебногоСобытия( "СтандартныеПодсистемы.БазоваяФункциональность\ПриОбработкеПараметровЗапуска"); - Для каждого Обработчик Из ОбработчикиСобытия Цикл + Для Каждого Обработчик Из ОбработчикиСобытия Цикл Обработчик.Модуль.ПриОбработкеПараметровЗапуска(ПервыйПараметр, ПараметрыЗапуска, Отказ); КонецЦикла; - Отказ = ОбщегоНазначенияКлиентПереопределяемый.ОбработатьПараметрыЗапуска( - ПервыйПараметр, ПараметрыЗапуска) Или Отказ; + ОбщегоНазначенияКлиентПереопределяемый.ПриОбработкеПараметровЗапуска(ПервыйПараметр, ПараметрыЗапуска, Отказ); - Если Не Отказ Тогда - ОбщегоНазначенияКлиентПереопределяемый.ПриОбработкеПараметровЗапуска(ПервыйПараметр, ПараметрыЗапуска, Отказ); - КонецЕсли; - - Возврат НЕ Отказ; + Возврат Не Отказ; КонецФункции @@ -1594,7 +1472,6 @@ Процедура ПроверитьВерсиюПлатформыПриЗапуске(Параметры) ПараметрыКлиента = СтандартныеПодсистемыКлиентПовтИсп.ПараметрыРаботыКлиентаПриЗапуске(); - Если НЕ ПараметрыКлиента.Свойство("ПоказатьНерекомендуемуюВерсиюПлатформы") Тогда Возврат; КонецЕсли; @@ -1607,6 +1484,16 @@ // Только для внутреннего использования. Продолжение процедуры ПроверитьВерсиюПлатформыПриЗапуске. Процедура ИнтерактивнаяОбработкаПроверкиВерсииПлатформыПриЗапуске(Параметры, Неопределен) Экспорт + ОповещениеОЗакрытии = Новый ОписаниеОповещения("ПослеЗакрытияФормыНерекомендуемойВерсииПлатформы", ЭтотОбъект, Параметры); + Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("ИнтернетПоддержкаПользователей.ПолучениеОбновленийПрограммы") Тогда + СтандартнаяОбработка = Истина; + МодульПолучениеОбновленийПрограммыКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("ПолучениеОбновленийПрограммыКлиент"); + МодульПолучениеОбновленийПрограммыКлиент.ПриПроверкеВерсииПлатформыПриЗапуске(ОповещениеОЗакрытии, СтандартнаяОбработка); + Если Не СтандартнаяОбработка Тогда + Возврат; + КонецЕсли; + КонецЕсли; + ПараметрыКлиента = СтандартныеПодсистемыКлиентПовтИсп.ПараметрыРаботыКлиентаПриЗапуске(); Если ПараметрыКлиента.РаботаВПрограммеЗапрещена Тогда @@ -1637,7 +1524,7 @@ ПараметрыФормы.Вставить("ПропуститьЗавершениеРаботы", Истина); Форма = ОткрытьФорму("Обработка.НерекомендуемаяВерсияПлатформы.Форма.НерекомендуемаяВерсияПлатформы", ПараметрыФормы, - , , , , Новый ОписаниеОповещения("ПослеЗакрытияФормыНерекомендуемойВерсииПлатформы", ЭтотОбъект, Параметры)); + , , , , ОповещениеОЗакрытии); Если Форма = Неопределено Тогда ПослеЗакрытияФормыНерекомендуемойВерсииПлатформы("Продолжить", Параметры); @@ -1712,24 +1599,13 @@ КонецПроцедуры -// Вызывается при необходимости открыть форму списка активных пользователей, -// которые в данный момент времени работают с системой. -// -Процедура ОткрытьСписокАктивныхПользователей(ПараметрыФормы = Неопределено) Экспорт +// Только для внутреннего использования. +Процедура ПодготовитьПараметрыРаботыПрограммы(Параметры) - Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.ЗавершениеРаботыПользователей") Тогда - - ИмяФормы = ""; - МодульСоединенияИБКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("СоединенияИБКлиент"); - МодульСоединенияИБКлиент.ПриОпределенииФормыАктивныхПользователей(ИмяФормы); - ОткрытьФорму(ИмяФормы, ПараметрыФормы); - - Иначе - - ПоказатьПредупреждение(, - НСтр("ru = 'Для того чтобы открыть список активных пользователей, перейдите в меню - |Все функции - Стандартные - Активные пользователи.'")); - + ПараметрыКлиента = СтандартныеПодсистемыКлиентПовтИсп.ПараметрыРаботыКлиентаПриЗапуске(); + Если ПараметрыКлиента.Свойство("НеобходимоОбновлениеПараметровРаботыПрограммы") Тогда + Параметры.ИнтерактивнаяОбработка = Новый ОписаниеОповещения( + "ЗагрузитьОбновитьПараметрыРаботыПрограммы", ОбновлениеИнформационнойБазыКлиент, Параметры); КонецЕсли; КонецПроцедуры @@ -1831,17 +1707,113 @@ КонецПроцедуры +// Только для внутреннего использования. Процедура ПослеНачалаРаботыСистемы() Экспорт Если ТребуетсяПоказРекомендацииПоОбъемуОперативнойПамяти() Тогда ПодключитьОбработчикОжидания("ПоказатьРекомендациюПоОбъемуОперативнойПамяти", 10, Истина); КонецЕсли; + ПодключитьОбработчикОжиданияСтандартныхПериодическихПроверок(); + +КонецПроцедуры + +// Вызывается из обработчика ожидания каждые 20 минут, например, для контроля +// динамического обновления и окончания срока действия учетной записи пользователя. +// +Процедура ПриВыполненииСтандартныхПериодическихПроверок() Экспорт + + Параметры = Новый Структура; + СтандартныеПодсистемыВызовСервера.ПриВыполненииСтандартныхПериодическихПроверокНаСервере(Параметры); + + Модули = Новый Массив; + + // СтандартныеПодсистемы.БазоваяФункциональность + Модули.Добавить(КонтрольДинамическогоОбновленияКонфигурацииСлужебныйКлиент); + // Конец СтандартныеПодсистемы.БазоваяФункциональность + + // СтандартныеПодсистемы.Пользователи + Модули.Добавить(ПользователиСлужебныйКлиент); + // Конец СтандартныеПодсистемы.Пользователи + + Контекст = Новый Структура; + Контекст.Вставить("Параметры", Параметры); + Контекст.Вставить("Модули", Модули); + Контекст.Вставить("Индекс", -1); + + ПриВыполненииСтандартныхПериодическихПроверокЦиклНачало(Контекст); + +КонецПроцедуры + +// Продолжение процедуры ПриВыполненииСтандартныхПериодическихПроверок. +Процедура ПриВыполненииСтандартныхПериодическихПроверокЦиклНачало(Контекст) + + Если Контекст.Модули.Количество() <= Контекст.Индекс + 1 Тогда + ПодключитьОбработчикОжиданияСтандартныхПериодическихПроверок(); + Возврат; + КонецЕсли; + Контекст.Индекс = Контекст.Индекс + 1; + Контекст.Вставить("Модуль", Контекст.Модули[Контекст.Индекс]); + + Контекст.Модуль.ПриВыполненииСтандартныхПериодическихПроверок(Контекст.Параметры, Новый ОписаниеОповещения( + "ПриВыполненииСтандартныхПериодическихПроверокЦиклПродолжение", ЭтотОбъект, Контекст)); + +КонецПроцедуры + +// Продолжение процедуры ПриВыполненииСтандартныхПериодическихПроверок. +Процедура ПриВыполненииСтандартныхПериодическихПроверокЦиклПродолжение(Результат, Контекст) Экспорт + + ПриВыполненииСтандартныхПериодическихПроверокЦиклНачало(Контекст); + +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// Для справочника ИдентификаторыОбъектовМетаданных. + +// Только для внутреннего использования. +Процедура ИдентификаторыОбъектовМетаданныхФормаСпискаСписокВыборЗначения(Форма, Элемент, Значение, СтандартнаяОбработка) Экспорт + + Если НЕ Форма.ВыбиратьГруппыОбъектовМетаданных + И Элемент.ТекущиеДанные <> Неопределено + И НЕ ЗначениеЗаполнено(Элемент.ТекущиеДанные.Родитель) Тогда + + СтандартнаяОбработка = Ложь; + + Если Элемент.Отображение = ОтображениеТаблицы.Дерево Тогда + Если Элемент.Развернут(Элемент.ТекущаяСтрока) Тогда + Элемент.Свернуть(Элемент.ТекущаяСтрока); + Иначе + Элемент.Развернуть(Элемент.ТекущаяСтрока); + КонецЕсли; + + ИначеЕсли Элемент.Отображение = ОтображениеТаблицы.ИерархическийСписок Тогда + + Если Элемент.ТекущийРодитель <> Элемент.ТекущаяСтрока Тогда + Элемент.ТекущийРодитель = Элемент.ТекущаяСтрока; + Иначе + ТекущаяСтрока = Элемент.ТекущаяСтрока; + Элемент.ТекущийРодитель = Неопределено; + Элемент.ТекущаяСтрока = ТекущаяСтрока; + КонецЕсли; + Иначе + ПоказатьПредупреждение(, + НСтр("ru = 'Невозможно выбрать группу объектов метаданных. + |Выберите объект метаданных.'")); + КонецЕсли; + КонецЕсли; + КонецПроцедуры //////////////////////////////////////////////////////////////////////////////// // Вспомогательные процедуры и функции. +Процедура ПодключитьОбработчикОжиданияСтандартныхПериодическихПроверок() + + // Вызов стандартных периодических проверок 1 раз в 20 минут. + ПодключитьОбработчикОжидания("ОбработчикОжиданияСтандартныхПериодическихПроверок", 20 * 60, Истина); + +КонецПроцедуры + // Возвращает строковое представление значения типа КодВозвратаДиалога. Функция КодВозвратаДиалогаВСтроку(Значение) @@ -1874,7 +1846,7 @@ Возврат; КонецЕсли; - ПараметрыЗапуска = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(ПараметрЗапуска, ";"); + ПараметрыЗапуска = СтрРазделить(ПараметрЗапуска, ";", Ложь); ЗначениеПараметраЗапуска = ВРег(ПараметрыЗапуска[0]); Если ЗначениеПараметраЗапуска <> ВРег("ВойтиВОбластьДанных") Тогда @@ -1896,7 +1868,7 @@ ОбщегоНазначенияВызовСервера.УстановитьРазделениеСеанса(Истина, ЗначениеРазделителя); -КонецПроцедуры +КонецПроцедуры // В случае отказа вызывает обработку завершения, // если добавлен новый полученный параметр клиента, @@ -2096,8 +2068,7 @@ Если Предупреждения.Количество() = 0 Тогда БольшеНеЗадаватьЭтотВопрос = - Не СтандартныеПодсистемыКлиентПовтИсп.ПараметрыРаботыКлиента( - ).ЗапрашиватьПодтверждениеПриЗавершенииПрограммы; + Не СтандартныеПодсистемыКлиентПовтИсп.ПараметрыРаботыКлиента().ЗапрашиватьПодтверждениеПриЗавершенииПрограммы; Если БольшеНеЗадаватьЭтотВопрос Тогда Возврат; @@ -2152,7 +2123,7 @@ Если Результат <> Неопределено Тогда Если Результат.Значение = "Завершить" Тогда Параметры.Отказ = Истина; - ИначеЕсли Результат.Значение = "Перезапустить" Тогда + ИначеЕсли Результат.Значение = "Перезапустить" Или Результат.Значение = КодВозвратаДиалога.Таймаут Тогда Параметры.Отказ = Истина; Параметры.Перезапустить = Истина; КонецЕсли; @@ -2252,6 +2223,8 @@ КонецПроцедуры +// Если указан ПрекратитьРаботу = Истина, то прервать дальнейшее выполнение клиентского кода и прекратить работу. +// Процедура ОбработатьОшибкуПриЗапускеИлиЗавершении(Параметры, ИнформацияОбОшибке, Событие, ПрекратитьРаботу = Ложь) Если Событие = "Запуск" Тогда @@ -2381,5 +2354,227 @@ Текст, БиблиотекаКартинок.Предупреждение32); КонецПроцедуры -#КонецОбласти +//////////////////////////////////////////////////////////////////////////////// +// Движок сценария по выводу результата выполнения. +// Только для внутреннего использования из процедуры ПоказатьРезультатВыполнения. +Процедура ЗапуститьСценарий(Сценарий) + Сценарий.Вставить("КоличествоШагов", Сценарий.Шаги.Количество()); + Сценарий.Вставить("НомерШага", 0); + + Сценарий.Вставить("ТекущийШаг", Неопределено); + Сценарий.Вставить("Параметры", Неопределено); + Сценарий.Вставить("МестоОстановки", Неопределено); + + Сценарий.Вставить("Результат", Неопределено); + + ВыполнитьСценарий(Сценарий); +КонецПроцедуры + +// Только для внутреннего использования. +Процедура ВыполнитьСценарий(Сценарий) + Пока НайтиСледующийШаг(Сценарий) Цикл + Если Не ВыполнитьШаг(Сценарий) Тогда + Возврат; // Сценарий остановлен. + КонецЕсли; + КонецЦикла; + ВернутьРезультат(Сценарий); +КонецПроцедуры + +// Только для внутреннего использования. +Функция НайтиСледующийШаг(Сценарий) + Если Сценарий.НомерШага = Сценарий.КоличествоШагов Тогда + Возврат Ложь; + КонецЕсли; + ЭлементСписка = Сценарий.Шаги[Сценарий.НомерШага]; // Индекс следующего шага это номер текущего. + Сценарий.НомерШага = Сценарий.НомерШага + 1; + Сценарий.ТекущийШаг = ЭлементСписка.Представление; + Сценарий.Параметры = ЭлементСписка.Значение; + Сценарий.МестоОстановки = Неопределено; + Возврат Истина; +КонецФункции + +// Только для внутреннего использования. +Функция Обработчик(Сценарий, КоличествоПараметров = 2) + Если КоличествоПараметров = 1 Тогда + Возврат Новый ОписаниеОповещения("ВозобновитьСценарийПослеЗакрытияПростогоДиалога", ЭтотОбъект, Сценарий); + ИначеЕсли КоличествоПараметров = 2 Тогда + Возврат Новый ОписаниеОповещения("ВозобновитьСценарий", ЭтотОбъект, Сценарий); + Иначе + ВызватьИсключение НСтр("ru = 'Обработчик оповещения для более чем 2 параметров не поддерживается'"); + КонецЕсли; +КонецФункции + +// Только для внутреннего использования. +Процедура ВозобновитьСценарий(ВыборПользователя, Сценарий) Экспорт + Сценарий.Результат = ВыборПользователя; + Если Не ВыполнитьШаг(Сценарий) Тогда // Продолжить шаг сценария. + Возврат; // Сценарий остановлен. + КонецЕсли; + ВыполнитьСценарий(Сценарий); +КонецПроцедуры + +// Только для внутреннего использования. +Процедура ВозобновитьСценарийПослеЗакрытияПростогоДиалога(Сценарий) Экспорт + Сценарий.Результат = Неопределено; + Если Не ВыполнитьШаг(Сценарий) Тогда // Продолжить шаг сценария. + Возврат; // Сценарий остановлен. + КонецЕсли; + ВыполнитьСценарий(Сценарий); +КонецПроцедуры + +// Только для внутреннего использования. +Процедура ВернутьРезультат(Сценарий) + ОбработчикЗавершения = ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(Сценарий, "ОбработчикЗавершения"); + Если ТипЗнч(ОбработчикЗавершения) = Тип("ОписаниеОповещения") Тогда + ВыполнитьОбработкуОповещения(ОбработчикЗавершения, Сценарий.Результат); + КонецЕсли; +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// Шаги сценария по выводу результата выполнения. + +// Только для внутреннего использования. +Функция ВыполнитьШаг(Сценарий) + + Если Сценарий.ТекущийШаг = "ВывестиОповещение" Тогда + Возврат ВывестиОповещение(Сценарий); + + ИначеЕсли Сценарий.ТекущийШаг = "ВывестиСообщение" Тогда + Возврат ВывестиСообщение(Сценарий); + + ИначеЕсли Сценарий.ТекущийШаг = "ВывестиПредупреждение" Тогда + Возврат ВывестиПредупреждение(Сценарий); + + ИначеЕсли Сценарий.ТекущийШаг = "ОповеститьОткрытыеФормы" Тогда + Возврат ОповеститьОткрытыеФормы(Сценарий); + + ИначеЕсли Сценарий.ТекущийШаг = "ОповеститьДинамическиеСписки" Тогда + Возврат ОповеститьДинамическиеСписки(Сценарий); + + ИначеЕсли Сценарий.ТекущийШаг = "РазвернутьУзлыДерева" Тогда + Возврат РазвернутьУзлыДерева(Сценарий); + + ИначеЕсли Сценарий.ТекущийШаг = "ВывестиФорму" Тогда + Возврат ВывестиФорму(Сценарий); + + КонецЕсли; + +КонецФункции + +// Только для внутреннего использования. +Функция ВывестиОповещение(Сценарий) + ВыводОповещения = Сценарий.Параметры; + ПоказатьОповещениеПользователя( + ВыводОповещения.Заголовок, + ВыводОповещения.Ссылка, + ВыводОповещения.Текст, + ВыводОповещения.Картинка); + Возврат Истина; // Продолжить сценарий. +КонецФункции + +// Только для внутреннего использования. +Функция ВывестиСообщение(Сценарий) + ВыводСообщения = Сценарий.Параметры; + Сообщение = Новый СообщениеПользователю; + Если ТипЗнч(Сценарий.Форма) = Тип("УправляемаяФорма") Тогда + Сообщение.ИдентификаторНазначения = Сценарий.Форма.УникальныйИдентификатор; + КонецЕсли; + Сообщение.Текст = ВыводСообщения.Текст; + Сообщение.Поле = ВыводСообщения.ПутьКРеквизитуФормы; + Сообщение.Сообщить(); + Возврат Истина; // Продолжить сценарий. +КонецФункции + +// Только для внутреннего использования. +Функция ВывестиПредупреждение(Сценарий) + ВыводПредупреждения = Сценарий.Параметры; + Если Сценарий.МестоОстановки = Неопределено Тогда + + КнопкаПоУмолчанию = КодВозвратаДиалога.ОК; + + Кнопки = Новый СписокЗначений; + Если ЗначениеЗаполнено(ВыводПредупреждения.Подробно) Тогда + КнопкаПоУмолчанию = 1; + Кнопки.Добавить(1, НСтр("ru = 'Подробнее...'")); + КонецЕсли; + Если ТипЗнч(Сценарий.Форма) = Тип("УправляемаяФорма") И ЗначениеЗаполнено(ВыводПредупреждения.ПутьКРеквизитуФормы) Тогда + Кнопки.Добавить(2, НСтр("ru = 'Перейти к реквизиту'")); + КонецЕсли; + Кнопки.Добавить(КодВозвратаДиалога.ОК, НСтр("ru = 'Закрыть'")); + + ПоказатьВопрос(Обработчик(Сценарий), ВыводПредупреждения.Текст, Кнопки, , КнопкаПоУмолчанию, ВыводПредупреждения.Заголовок); + Сценарий.МестоОстановки = "ЗаданВопрос"; + Возврат Ложь; // Приостановить сценарий. + + ИначеЕсли Сценарий.МестоОстановки = "ЗаданВопрос" Тогда + + Ответ = Сценарий.Результат; + Если ТипЗнч(Ответ) = Тип("Число") Тогда + Если Ответ = 1 Тогда + + ПолныйТекст = Строка(ВыводПредупреждения.Текст) + Символы.ПС + Символы.ПС + ВыводПредупреждения.Подробно; + ПоказатьПодробнуюИнформацию(Обработчик(Сценарий), ПолныйТекст, ВыводПредупреждения.Заголовок); + + Сценарий.МестоОстановки = "КонецШага"; + Возврат Ложь; // Приостановить сценарий. + + ИначеЕсли Ответ = 2 Тогда + + Сообщение = Новый СообщениеПользователю; + Сообщение.ИдентификаторНазначения = Сценарий.Форма.УникальныйИдентификатор; + Сообщение.Текст = ВыводПредупреждения.Текст; + Сообщение.Поле = ВыводПредупреждения.ПутьКРеквизитуФормы; + Сообщение.Сообщить(); + + КонецЕсли; + КонецЕсли; + + КонецЕсли; + + Возврат Истина; // Продолжить сценарий. +КонецФункции + +// Только для внутреннего использования. +Функция ОповеститьОткрытыеФормы(Сценарий) + ОповещениеФорм = Сценарий.Параметры; + Оповестить(ОповещениеФорм.ИмяСобытия, ОповещениеФорм.Параметр, ОповещениеФорм.Источник); + Возврат Истина; // Продолжить сценарий. +КонецФункции + +// Только для внутреннего использования. +Функция ОповеститьДинамическиеСписки(Сценарий) + ОповещениеСписков = Сценарий.Параметры; + Для Каждого СсылкаИлиТип Из ОповещениеСписков.МассивТипов Цикл + ОповеститьОбИзменении(СсылкаИлиТип); + КонецЦикла; + Возврат Истина; // Продолжить сценарий. +КонецФункции + +// Только для внутреннего использования. +Функция РазвернутьУзлыДерева(Сценарий) + РазворачиваемыйУзел = Сценарий.Параметры; + ТаблицаЭлемент = Сценарий.Форма.Элементы[РазворачиваемыйУзел.ИмяТаблицы]; + Если РазворачиваемыйУзел.Идентификатор = "*" Тогда + Узлы = Сценарий.Форма[РазворачиваемыйУзел.ИмяТаблицы].ПолучитьЭлементы(); + Для Каждого Узел Из Узлы Цикл + ТаблицаЭлемент.Развернуть(Узел.ПолучитьИдентификатор(), РазворачиваемыйУзел.СПодчиненными); + КонецЦикла; + Иначе + ТаблицаЭлемент.Развернуть(РазворачиваемыйУзел.Идентификатор, РазворачиваемыйУзел.СПодчиненными); + КонецЕсли; + Возврат Истина; // Продолжить сценарий. +КонецФункции + +// Только для внутреннего использования. +Функция ВывестиФорму(Сценарий) + ВыводФормы = Сценарий.Параметры; + Если Сценарий.МестоОстановки = Неопределено Тогда + ОткрытьФорму(ВыводФормы.ПолноеИмя, ВыводФормы.Параметры, Сценарий.Форма, , , , Обработчик(Сценарий), ВыводФормы.РежимОкна); + Сценарий.МестоОстановки = "КонецШага"; + Возврат Ложь; // Приостановить сценарий. + КонецЕсли; + Возврат Истина; // Продолжить сценарий. +КонецФункции + +#КонецОбласти \ No newline at end of file diff --git a/SSL/src/CommonModules/СтандартныеПодсистемыКлиентПовтИсп/Module.bsl b/SSL/src/CommonModules/СтандартныеПодсистемыКлиентПовтИсп/Module.bsl index 254ced7c4..1c065a61e 100644 --- a/SSL/src/CommonModules/СтандартныеПодсистемыКлиентПовтИсп/Module.bsl +++ b/SSL/src/CommonModules/СтандартныеПодсистемыКлиентПовтИсп/Module.bsl @@ -39,11 +39,27 @@ Параметры.Вставить("ПропуститьОчисткуСкрытияРабочегоСтола"); КонецЕсли; -#Если ВебКлиент Тогда - ЭтоВебКлиент = Истина; -#Иначе - ЭтоВебКлиент = Ложь; -#КонецЕсли + #Если ВебКлиент Тогда + ЭтоВебКлиент = Истина; + #Иначе + ЭтоВебКлиент = Ложь; + #КонецЕсли + + ИспользуемыйКлиент = ""; + #Если ТонкийКлиент Тогда + ИспользуемыйКлиент = "ТонкийКлиент"; + #ИначеЕсли ТолстыйКлиентУправляемоеПриложение Тогда + ИспользуемыйКлиент = "ТолстыйКлиентУправляемоеПриложение"; + #ИначеЕсли ТолстыйКлиентОбычноеПриложение Тогда + ИспользуемыйКлиент = "ТолстыйКлиентОбычноеПриложение"; + #ИначеЕсли ВебКлиент Тогда + ОписаниеБраузера = ТекущийБраузер(); + Если ПустаяСтрока(ОписаниеБраузера.Версия) Тогда + ИспользуемыйКлиент = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку("ВебКлиент.%1", ОписаниеБраузера.Название); + Иначе + ИспользуемыйКлиент = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку("ВебКлиент.%1.%2", ОписаниеБраузера.Название, СтрРазделить(ОписаниеБраузера.Версия, ".")[0]); + КонецЕсли; + #КонецЕсли СистемнаяИнформация = Новый СистемнаяИнформация; ЭтоLinuxКлиент = СистемнаяИнформация.ТипПлатформы = ТипПлатформы.Linux_x86 @@ -54,6 +70,7 @@ Параметры.Вставить("ЭтоВебКлиент", ЭтоВебКлиент); Параметры.Вставить("ЭтоВебКлиентПодMacOS", ОбщегоНазначенияКлиентПовтИсп.ЭтоВебКлиентПодMacOS()); Параметры.Вставить("ЭтоLinuxКлиент", ЭтоLinuxКлиент); + Параметры.Вставить("ИспользуемыйКлиент", ИспользуемыйКлиент); Параметры.Вставить("СкрытьРабочийСтолПриНачалеРаботыСистемы", Ложь); СистемнаяИнформация = Новый СистемнаяИнформация; @@ -127,6 +144,114 @@ КонецФункции +Функция ТекущийБраузер() + + Результат = Новый Структура("Название,Версия", "Другой", ""); + + СистемнаяИнформация = Новый СистемнаяИнформация; + Строка = СистемнаяИнформация.ИнформацияПрограммыПросмотра; + Строка = СтрЗаменить(Строка, ",", ";"); + + // Opera + Идентификатор = "Opera"; + Позиция = СтрНайти(Строка, Идентификатор, НаправлениеПоиска.СКонца); + Если Позиция > 0 Тогда + Строка = Сред(Строка, Позиция + СтрДлина(Идентификатор)); + Результат.Название = "Opera"; + Идентификатор = "Version/"; + Позиция = СтрНайти(Строка, Идентификатор); + Если Позиция > 0 Тогда + Строка = Сред(Строка, Позиция + СтрДлина(Идентификатор)); + Результат.Версия = СокрЛП(Строка); + Иначе + Строка = СокрЛП(Строка); + Если СтрНачинаетсяС(Строка, "/") Тогда + Строка = Сред(Строка, 2); + КонецЕсли; + Результат.Версия = СокрЛ(Строка); + КонецЕсли; + Возврат Результат; + КонецЕсли; + + // IE + Идентификатор = "MSIE"; // v11- + Позиция = СтрНайти(Строка, Идентификатор); + Если Позиция > 0 Тогда + Результат.Название = "IE"; + Строка = Сред(Строка, Позиция + СтрДлина(Идентификатор)); + Позиция = СтрНайти(Строка, ";"); + Если Позиция > 0 Тогда + Строка = СокрЛ(Лев(Строка, Позиция - 1)); + Результат.Версия = Строка; + КонецЕсли; + Возврат Результат; + КонецЕсли; + + Идентификатор = "Trident"; // v11+ + Позиция = СтрНайти(Строка, Идентификатор); + Если Позиция > 0 Тогда + Результат.Название = "IE"; + Строка = Сред(Строка, Позиция + СтрДлина(Идентификатор)); + + Идентификатор = "rv:"; + Позиция = СтрНайти(Строка, Идентификатор); + Если Позиция > 0 Тогда + Строка = Сред(Строка, Позиция + СтрДлина(Идентификатор)); + Позиция = СтрНайти(Строка, ")"); + Если Позиция > 0 Тогда + Строка = СокрЛ(Лев(Строка, Позиция - 1)); + Результат.Версия = Строка; + КонецЕсли; + КонецЕсли; + Возврат Результат; + КонецЕсли; + + // Chrome + Идентификатор = "Chrome/"; + Позиция = СтрНайти(Строка, Идентификатор); + Если Позиция > 0 Тогда + Результат.Название = "Chrome"; + Строка = Сред(Строка, Позиция + СтрДлина(Идентификатор)); + Позиция = СтрНайти(Строка, " "); + Если Позиция > 0 Тогда + Строка = СокрЛ(Лев(Строка, Позиция - 1)); + Результат.Версия = Строка; + КонецЕсли; + Возврат Результат; + КонецЕсли; + + // Safari + Идентификатор = "Safari/"; + Если СтрНайти(Строка, Идентификатор) > 0 Тогда + Результат.Название = "Safari"; + Идентификатор = "Version/"; + Позиция = СтрНайти(Строка, Идентификатор); + Если Позиция > 0 Тогда + Строка = Сред(Строка, Позиция + СтрДлина(Идентификатор)); + Позиция = СтрНайти(Строка, " "); + Если Позиция > 0 Тогда + Результат.Версия = СокрЛП(Лев(Строка, Позиция - 1)); + КонецЕсли; + КонецЕсли; + Возврат Результат; + КонецЕсли; + + // Firefox + Идентификатор = "Firefox/"; + Позиция = СтрНайти(Строка, Идентификатор); + Если Позиция > 0 Тогда + Результат.Название = "Firefox"; + Строка = Сред(Строка, Позиция + СтрДлина(Идентификатор)); + Если Не ПустаяСтрока(Строка) Тогда + Результат.Версия = СокрЛП(Строка); + КонецЕсли; + Возврат Результат; + КонецЕсли; + + Возврат Результат; + +КонецФункции + //////////////////////////////////////////////////////////////////////////////// // Работа с предопределенными данными. @@ -144,8 +269,7 @@ Функция ПодготовленныеОбработчикиКлиентскогоСобытия(Событие, Служебное = Ложь, ПерваяПопытка = Истина) - Параметры = СтандартныеПодсистемыКлиентПовтИсп.ПараметрыРаботыКлиентаПриЗапуске( - ).ОбработчикиКлиентскихСобытий; + Параметры = СтандартныеПодсистемыКлиентПовтИсп.ПараметрыРаботыКлиентаПриЗапуске().ОбработчикиКлиентскихСобытий; Если Служебное Тогда Обработчики = Параметры.ОбработчикиСлужебныхСобытий.Получить(Событие); @@ -159,11 +283,9 @@ Если Обработчики = Неопределено Тогда Если Служебное Тогда - ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Не найдено клиентское служебное событие ""%1"".'"), Событие); + ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Не найдено клиентское служебное событие ""%1"".'"), Событие); Иначе - ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Не найдено клиентское событие ""%1"".'"), Событие); + ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Не найдено клиентское событие ""%1"".'"), Событие); КонецЕсли; КонецЕсли; diff --git a/SSL/src/CommonModules/СтандартныеПодсистемыКлиентСервер/Module.bsl b/SSL/src/CommonModules/СтандартныеПодсистемыКлиентСервер/Module.bsl index 939b1278e..e6d523d36 100644 --- a/SSL/src/CommonModules/СтандартныеПодсистемыКлиентСервер/Module.bsl +++ b/SSL/src/CommonModules/СтандартныеПодсистемыКлиентСервер/Module.bsl @@ -3,27 +3,29 @@ // //////////////////////////////////////////////////////////////////////////////// -#Область СлужебныйПрограммныйИнтерфейс +#Область ПрограммныйИнтерфейс //////////////////////////////////////////////////////////////////////////////// -// Обработка результата выполнения. +// Регистрация результата работы для вывода на клиенте. -// Формирует шаблон результата выполнения. +// Формирует структуру для регистрации результата выполнения и последующего вывода. // -// Возвращаемое значение: -// Результат - Структура - См. СтандартныеПодсистемыКлиент.ПоказатьРезультатВыполнения(). +// Возвращаемое значение: +// Результат - Структура - Результат выполнения операции, который необходимо вывести. +// * Шаги - СписокЗначений - Шаги сценария. +// * Представление - Имя шага. +// * Значение - Параметры шага. // -Функция НовыйРезультатВыполнения(Результат = Неопределено) Экспорт +// См. также: +// СтандартныеПодсистемыКлиент.ПоказатьРезультатВыполнения(). +// +Функция ОписаниеРезультатаВыполнения(Результат = Неопределено) Экспорт Если Результат = Неопределено Тогда Результат = Новый Структура; КонецЕсли; - - Результат.Вставить("ВыводОповещения", Новый Структура("Использование, Заголовок, Ссылка, Текст, Картинка", Ложь)); - Результат.Вставить("ВыводСообщения", Новый Структура("Использование, Текст, ПутьКРеквизитуФормы", Ложь)); - Результат.Вставить("ВыводПредупреждения", Новый Структура("Использование, Заголовок, Текст, ПутьКРеквизитуФормы, ТекстОшибок", Ложь)); - Результат.Вставить("ОповещениеФорм", Новый Структура("Использование, ИмяСобытия, Параметр, Источник", Ложь)); - Результат.Вставить("ОповещениеДинамическихСписков", Новый Структура("Использование, СсылкаИлиТип", Ложь)); - + Если Не Результат.Свойство("Шаги") Тогда + Результат.Вставить("Шаги", Новый СписокЗначений); + КонецЕсли; Возврат Результат; КонецФункции @@ -32,42 +34,34 @@ // // Параметры: // Результат - Структура - См. СтандартныеПодсистемыКлиент.ПоказатьРезультатВыполнения(). -// ИзмененныеОбъекты - Массив - Ссылки измененных объектов. +// СсылкаИлиТипИлиМассив - Массив - Тип или ссылки измененных объектов. // -Процедура ОповеститьДинамическиеСписки(Результат, ИзмененныеОбъекты) Экспорт - Если ТипЗнч(ИзмененныеОбъекты) <> Тип("Массив") Или ИзмененныеОбъекты.Количество() = 0 Тогда +// См. также: +// СтандартныеПодсистемыКлиент.ПоказатьРезультатВыполнения(). +// +Процедура ОповеститьДинамическиеСписки(Результат, СсылкаИлиТипИлиМассив) Экспорт + Если СсылкаИлиТипИлиМассив = Неопределено Тогда Возврат; КонецЕсли; - Если Не Результат.Свойство("ОповещениеДинамическихСписков") Тогда - Результат.Вставить("ОповещениеДинамическихСписков", Новый Структура("Использование, СсылкаИлиТип", Ложь)); - КонецЕсли; - Оповещение = Результат.ОповещениеДинамическихСписков; - Оповещение.Использование = Истина; - - Значение = Оповещение.СсылкаИлиТип; - ЗначениеЗаполнено = ЗначениеЗаполнено(Значение); - - Если ИзмененныеОбъекты.Количество() = 1 И НЕ ЗначениеЗаполнено Тогда - Оповещение.СсылкаИлиТип = ИзмененныеОбъекты[0]; - Иначе - // Преобразование оповещения в массив. - ТипЗначения = ТипЗнч(Значение); - Если ТипЗначения <> Тип("Массив") Тогда - Оповещение.СсылкаИлиТип = Новый Массив; - Если ЗначениеЗаполнено Тогда - Оповещение.СсылкаИлиТип.Добавить(?(ТипЗначения = Тип("Тип"), Значение, ТипЗначения)); + // Преобразование оповещения в массив. + МассивТипов = Новый Массив; + ТипЗначения = ТипЗнч(СсылкаИлиТипИлиМассив); + Если ТипЗначения = Тип("Массив") Тогда + Для Каждого Элемент Из СсылкаИлиТипИлиМассив Цикл + ТипЭлемента = ТипЗнч(Элемент); + Если ТипЭлемента = Тип("Тип") Тогда + ТипЭлемента = Элемент; КонецЕсли; - КонецЕсли; - - // Добавление типов измененных объектов. - Для Каждого ИзмененныйОбъект Из ИзмененныеОбъекты Цикл - ТипИзмененногоОбъекта = ТипЗнч(ИзмененныйОбъект); - Если Оповещение.СсылкаИлиТип.Найти(ТипИзмененногоОбъекта) = Неопределено Тогда - Оповещение.СсылкаИлиТип.Добавить(ТипИзмененногоОбъекта); + Если МассивТипов.Найти(ТипЭлемента) = Неопределено Тогда + МассивТипов.Добавить(ТипЭлемента); КонецЕсли; КонецЦикла; + Иначе + МассивТипов.Добавить(СсылкаИлиТипИлиМассив); КонецЕсли; + + ДобавитьШаг(Результат, "ОповеститьДинамическиеСписки", Новый Структура("МассивТипов", МассивТипов)); КонецПроцедуры // Добавляет в структуру информацию о событии, о котором надо оповестить все открытые формы. @@ -75,20 +69,24 @@ // // Параметры: // Результат - Структура - См. СтандартныеПодсистемыКлиент.ПоказатьРезультатВыполнения(). -// ИмяСобытия - Строка - Имя события, которое используется для первичной идентификации сообщений принимающими формами. -// Параметр - Произвольный - Набор данных, которые используются принимающей формой для обновления состава. -// Источник - Произвольный - Источник оповещения, например форма-источником. +// ИмяСобытия - Строка - Имя события, которое используется для первичной идентификации сообщения принимающими формами. +// Параметр - Произвольный - Набор данных, который может использоваться принимающей формой для обновления. +// Источник - Произвольный - Источник оповещения. // -Процедура РезультатВыполненияДобавитьОповещениеОткрытыхФорм(Результат, ИмяСобытия, Параметр = Неопределено, Источник = Неопределено) Экспорт - Если Не Результат.Свойство("ОповещениеФорм") Тогда - Результат.Вставить("ОповещениеФорм", Новый Массив); - ИначеЕсли ТипЗнч(Результат.ОповещениеФорм) = Тип("Структура") Тогда // Структуру в массив структур. - ОповещениеФорм = Результат.ОповещениеФорм; - Результат.ОповещениеФорм = Новый Массив; - Результат.ОповещениеФорм.Добавить(ОповещениеФорм); +// См. также: +// СтандартныеПодсистемыКлиент.ПоказатьРезультатВыполнения(). +// +Процедура ОповеститьОткрытыеФормы(Результат, ИмяСобытия, Параметр = Неопределено, Источник = Неопределено) Экспорт + Если ИмяСобытия = Неопределено Тогда + Возврат; КонецЕсли; - ОповещениеФорм = Новый Структура("Использование, ИмяСобытия, Параметр, Источник", Истина, ИмяСобытия, Параметр, Источник); - Результат.ОповещениеФорм.Добавить(ОповещениеФорм); + + ОповещениеФорм = Новый Структура("ИмяСобытия, Параметр, Источник"); + ОповещениеФорм.ИмяСобытия = ИмяСобытия; + ОповещениеФорм.Параметр = Параметр; + ОповещениеФорм.Источник = Источник; + + ДобавитьШаг(Результат, "ОповеститьОткрытыеФормы", ОповещениеФорм); КонецПроцедуры // Добавляет в структуру информацию об узлах дерева, которые необходимо "развернуть". @@ -104,21 +102,20 @@ // СПодчиненными - Булево - Необязательный. Раскрывать ли подчиненные узлы. // Значение по умолчанию: Ложь (не раскрывать подчиненные узлы). // +// См. также: +// СтандартныеПодсистемыКлиент.ПоказатьРезультатВыполнения(). +// Процедура РазвернутьУзлыДерева(Результат, ИмяТаблицы, Идентификатор = "*", СПодчиненными = Ложь) Экспорт - Если Идентификатор = Неопределено Тогда + Если ИмяТаблицы = Неопределено Тогда Возврат; КонецЕсли; - Если Не Результат.Свойство("РазворачиваемыеУзлы") Тогда - Результат.Вставить("РазворачиваемыеУзлы", Новый Массив); - КонецЕсли; - РазворачиваемыйУзел = Новый Структура("ИмяТаблицы, Идентификатор, СПодчиненными"); РазворачиваемыйУзел.ИмяТаблицы = ИмяТаблицы; РазворачиваемыйУзел.Идентификатор = Идентификатор; РазворачиваемыйУзел.СПодчиненными = СПодчиненными; - Результат.РазворачиваемыеУзлы.Добавить(РазворачиваемыйУзел); + ДобавитьШаг(Результат, "РазвернутьУзлыДерева", РазворачиваемыйУзел); КонецПроцедуры // Добавляет в структуру информацию, необходимую для вывода предупреждения или текста ошибки. @@ -127,21 +124,25 @@ // Параметры: // Результат - Структура - См. СтандартныеПодсистемыКлиент.ПоказатьРезультатВыполнения(). // Текст - Строка - Текст предупреждения. -// ТекстОшибок - Строка - Необязательный. Тексты ошибок, которые при желании может просмотреть пользователь. +// Подробно - Строка - Необязательный. Тексты ошибок, которые при желании может просмотреть пользователь. // Заголовок - Строка - Необязательный. Заголовок окна. // ПутьКРеквизитуФормы - Строка - Необязательный. Путь к реквизиту формы, значение которого вызывало ошибку. // -Процедура ВывестиПредупреждение(Результат, Текст, ТекстОшибок = "", Заголовок = "", ПутьКРеквизитуФормы = "") Экспорт - ВыводПредупреждения = ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(Результат, "ВыводПредупреждения"); - Если ВыводПредупреждения = Неопределено Тогда - ВыводПредупреждения = Новый Структура("Использование, Заголовок, Текст, ПутьКРеквизитуФормы, ТекстОшибок", Ложь); - Результат.Вставить("ВыводПредупреждения", ВыводПредупреждения); +// См. также: +// СтандартныеПодсистемыКлиент.ПоказатьРезультатВыполнения(). +// +Процедура ВывестиПредупреждение(Результат, Текст, Подробно = "", Заголовок = "", ПутьКРеквизитуФормы = "") Экспорт + Если ПустаяСтрока(Текст) Тогда + Возврат; КонецЕсли; - ВыводПредупреждения.Использование = Истина; + + ВыводПредупреждения = Новый Структура("Заголовок, Текст, ПутьКРеквизитуФормы, Подробно"); ВыводПредупреждения.Заголовок = Заголовок; ВыводПредупреждения.Текст = Текст; - ВыводПредупреждения.ТекстОшибок = ТекстОшибок; + ВыводПредупреждения.Подробно = Подробно; ВыводПредупреждения.ПутьКРеквизитуФормы = ПутьКРеквизитуФормы; + + ДобавитьШаг(Результат, "ВывестиПредупреждение", ВыводПредупреждения); КонецПроцедуры // Добавляет в структуру информацию, необходимую для вывода сообщения о неверно заполненных полях формы. @@ -152,15 +153,19 @@ // Текст - Строка - Текст сообщения. // ПутьКРеквизитуФормы - Строка - Необязательный. Путь к реквизиту формы, значение которого вызывало ошибку. // +// См. также: +// СтандартныеПодсистемыКлиент.ПоказатьРезультатВыполнения(). +// Процедура ВывестиСообщение(Результат, Текст, ПутьКРеквизитуФормы = "") Экспорт - ВыводСообщения = ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(Результат, "ВыводСообщения"); - Если ВыводСообщения = Неопределено Тогда - ВыводСообщения = Новый Структура("Использование, Текст, ПутьКРеквизитуФормы", Ложь); - Результат.Вставить("ВыводСообщения", ВыводСообщения); + Если ПустаяСтрока(Текст) Тогда + Возврат; КонецЕсли; - ВыводСообщения.Использование = Истина; + + ВыводСообщения = Новый Структура("Текст, ПутьКРеквизитуФормы"); ВыводСообщения.Текст = Текст; ВыводСообщения.ПутьКРеквизитуФормы = ПутьКРеквизитуФормы; + + ДобавитьШаг(Результат, "ВывестиСообщение", ВыводСообщения); КонецПроцедуры // Добавляет в структуру информацию, необходимую для вывода всплывающего оповещения. @@ -168,76 +173,112 @@ // // Параметры: // Результат - Структура - См. СтандартныеПодсистемыКлиент.ПоказатьРезультатВыполнения(). -// Заголовок - Строка - Заголовок оповещения. -// Текст - Строка - Текст оповещения. +// Заголовок - Строка - Заголовок оповещения. Чтобы выводилась вся строка рекомендуется длина 40 или меньше. +// Текст - Строка - Текст оповещения. Чтобы выводилась вся строка рекомендуется длина 40 или меньше. // Ссылка - Строка - Навигационная ссылка для перехода к объекту конфигурации. // Картинка - Картинка - Картинка оповещения. // +// См. также: +// СтандартныеПодсистемыКлиент.ПоказатьРезультатВыполнения(). +// Процедура ВывестиОповещение(Результат, Заголовок, Текст = "", Картинка = Неопределено, Ссылка = "") Экспорт - ВыводОповещения = ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(Результат, "ВыводОповещения"); - Если ВыводОповещения = Неопределено Тогда - ВыводОповещения = Новый Структура("Использование, Заголовок, Ссылка, Текст, Картинка", Ложь); - Результат.Вставить("ВыводОповещения", ВыводОповещения); + Если ПустаяСтрока(Заголовок) И ПустаяСтрока(Текст) Тогда + Возврат; КонецЕсли; - ВыводОповещения.Использование = Истина; - ВыводОповещения.Заголовок = Заголовок; - ВыводОповещения.Ссылка = Ссылка; - ВыводОповещения.Текст = Текст; - ВыводОповещения.Картинка = Картинка; + + ВыводОповещения = Новый Структура("Заголовок, Ссылка, Текст, Картинка"); + ВыводОповещения.Заголовок = Заголовок; + ВыводОповещения.Ссылка = Ссылка; + ВыводОповещения.Текст = Текст; + ВыводОповещения.Картинка = Картинка; + + ДобавитьШаг(Результат, "ВывестиОповещение", ВыводОповещения); КонецПроцедуры +// Добавляет в структуру информацию, необходимую для открытия формы. +// Действие выполняется на клиенте после вызова СтандартныеПодсистемыКлиент.ПоказатьРезультатВыполнения(Результат). +// +// Параметры: +// Результат - Структура - См. СтандартныеПодсистемыКлиент.ПоказатьРезультатВыполнения(). +// ПолноеИмя - Строка - Полный путь к открываемой форме. +// Параметры - Структура - Необязательный. Параметры открываемой формы. +// РежимОкна - РежимОткрытияОкнаФормы - Необязательный. Блокировать ли окно владельца. +// +// См. также: +// СтандартныеПодсистемыКлиент.ПоказатьРезультатВыполнения(). +// +Процедура ВывестиФорму(Результат, ПолноеИмя, Параметры = Неопределено, РежимОкна = Неопределено) Экспорт + Если ПустаяСтрока(ПолноеИмя) Тогда + Возврат; + КонецЕсли; + + ВыводФормы = Новый Структура("ПолноеИмя, Параметры, РежимОкна"); + ВыводФормы.ПолноеИмя = ПолноеИмя; + ВыводФормы.Параметры = Параметры; + ВыводФормы.РежимОкна = РежимОкна; + + ДобавитьШаг(Результат, "ВывестиФорму", ВыводФормы); +КонецПроцедуры + +#КонецОбласти + +#Область СлужебныйПрограммныйИнтерфейс + //////////////////////////////////////////////////////////////////////////////// // Табличный документ -// Вычисляет сумму выделенных ячеек и возвращает ее представление. +// Рассчитывает показатели числовых ячеек в табличном документе. // // Параметры: -// ТабличныйДокумент - ТабличныйДокумент - Таблица, для которой вычисляет сумма ячеек. +// ТабличныйДокумент - ТабличныйДокумент - Таблица, для которой требуется расчет. // ВыделенныеОбласти // - Неопределено - При вызове с клиента этот параметр будет определен автоматически. // - Массив - При вызове с сервера в этот параметр следует передавать области, // предварительно вычисленные на клиенте // при помощи функции ОтчетыКлиент.ВыделенныеОбласти(ТабличныйДокумент). // -// Возвращаемое значение: -// Строка - Представление суммы выделенных ячеек. +// Возвращаемое значение: +// Структура - Результаты расчета выделенных ячеек. +// * Количество - Число - Количество выделенных ячеек. +// * КоличествоЧисловых - Число - Количество числовых ячеек. +// * Сумма - Число - Сумма выделенных ячеек с числами. +// * Среднее - Число - Сумма выделенных ячеек с числами. +// * Минимум - Число - Сумма выделенных ячеек с числами. +// * Максимум - Число - Максимум выделенных ячеек с числами. +// * НуженВызовСервера - Булево - Ложь когда вычисление на клиенте нецелесообразно и нужен вызов сервера. // // См. также: // ОтчетыКлиент.ВыделенныеОбласти(). // -Функция СуммаЯчеек(ТабличныйДокумент, ВыделенныеОбласти) Экспорт +Функция РасчетЯчеек(ТабличныйДокумент, ВыделенныеОбласти) Экспорт + Результат = Новый Структура; + Результат.Вставить("Количество", 0); + Результат.Вставить("КоличествоНеПустых", 0); + Результат.Вставить("КоличествоЧисловых", 0); + Результат.Вставить("Сумма", 0); + Результат.Вставить("Минимум", Неопределено); + Результат.Вставить("Максимум", Неопределено); + Результат.Вставить("НуженВызовСервера", Ложь); Если ВыделенныеОбласти = Неопределено Тогда #Если Клиент Тогда ВыделенныеОбласти = ТабличныйДокумент.ВыделенныеОбласти; #Иначе - Возврат НСтр("ru = 'Не указано значение параметра ""ВыделенныеОбласти"".'"); + ВызватьИсключение НСтр("ru = 'Не указано значение параметра ""ВыделенныеОбласти"".'"); #КонецЕсли КонецЕсли; - #Если Клиент И Не ТолстыйКлиентОбычноеПриложение Тогда - КоличествоВыделенныхОбластей = ВыделенныеОбласти.Количество(); - Если КоличествоВыделенныхОбластей = 0 Тогда - Возврат ""; // Нет ни одного числа. - ИначеЕсли КоличествоВыделенныхОбластей >= 100 Тогда - Возврат "<"; // Нужен вызов сервера. - КонецЕсли; - КоличествоВыделенныхЯчеек = 0; - #КонецЕсли - - Сумма = Неопределено; ПроверенныеЯчейки = Новый Соответствие; Для Каждого ВыделеннаяОбласть Из ВыделенныеОбласти Цикл - #Если Клиент Тогда - Если ТипЗнч(ВыделеннаяОбласть) <> Тип("ОбластьЯчеекТабличногоДокумента") Тогда - Продолжить; - КонецЕсли; - #КонецЕсли + Если ТипЗнч(ВыделеннаяОбласть) <> Тип("ОбластьЯчеекТабличногоДокумента") + И ТипЗнч(ВыделеннаяОбласть) <> Тип("Структура") Тогда + Продолжить; + КонецЕсли; - ВыделеннаяОбластьВерх = ВыделеннаяОбласть.Верх; - ВыделеннаяОбластьНиз = ВыделеннаяОбласть.Низ; - ВыделеннаяОбластьЛево = ВыделеннаяОбласть.Лево; + ВыделеннаяОбластьВерх = ВыделеннаяОбласть.Верх; + ВыделеннаяОбластьНиз = ВыделеннаяОбласть.Низ; + ВыделеннаяОбластьЛево = ВыделеннаяОбласть.Лево; ВыделеннаяОбластьПраво = ВыделеннаяОбласть.Право; Если ВыделеннаяОбластьВерх = 0 Тогда @@ -261,13 +302,14 @@ ВыделеннаяОбластьНиз = ТабличныйДокумент.ВысотаТаблицы; КонецЕсли; - ВыделеннаяОбластьВысота = ВыделеннаяОбластьНиз - ВыделеннаяОбластьВерх; - ВыделеннаяОбластьШирина = ВыделеннаяОбластьПраво - ВыделеннаяОбластьЛево; + ВыделеннаяОбластьВысота = ВыделеннаяОбластьНиз - ВыделеннаяОбластьВерх + 1; + ВыделеннаяОбластьШирина = ВыделеннаяОбластьПраво - ВыделеннаяОбластьЛево + 1; + Результат.Количество = Результат.Количество + ВыделеннаяОбластьШирина * ВыделеннаяОбластьВысота; #Если Клиент И Не ТолстыйКлиентОбычноеПриложение Тогда - КоличествоВыделенныхЯчеек = КоличествоВыделенныхЯчеек + ВыделеннаяОбластьШирина * ВыделеннаяОбластьВысота; - Если КоличествоВыделенныхЯчеек >= 1000 Тогда - Возврат "<"; // Нужен вызов сервера. + Если Результат.Количество >= 1000 Тогда + Результат.НуженВызовСервера = Истина; + Возврат Результат; КонецЕсли; #КонецЕсли @@ -289,11 +331,16 @@ Иначе Продолжить; КонецЕсли; + Результат.КоличествоНеПустых = Результат.КоличествоНеПустых + 1; Если ТипЗнч(Число) = Тип("Число") Тогда - Если Сумма = Неопределено Тогда - Сумма = Число; + Результат.КоличествоЧисловых = Результат.КоличествоЧисловых + 1; + Результат.Сумма = Результат.Сумма + Число; + Если Результат.КоличествоЧисловых = 1 Тогда + Результат.Минимум = Число; + Результат.Максимум = Число; Иначе - Сумма = Сумма + Число; + Результат.Минимум = Мин(Число, Результат.Минимум); + Результат.Максимум = Макс(Число, Результат.Максимум); КонецЕсли; КонецЕсли; КонецЕсли; @@ -301,12 +348,88 @@ КонецЦикла; КонецЦикла; - Если Сумма = Неопределено Тогда - Возврат ""; // Нет ни одного числа. - КонецЕсли; - - Возврат Формат(Сумма, "ЧН=0"); + Возврат Результат; КонецФункции +//////////////////////////////////////////////////////////////////////////////// +// Регистрация результата работы для вывода на клиенте. + +// Добавляет в структуру информацию, необходимую для вывода предупреждения и текста ошибки. +// Действие выполняется на клиенте после вызова СтандартныеПодсистемыКлиент.ПоказатьРезультатВыполнения(Результат). +// +// Параметры: +// Результат - Структура - См. СтандартныеПодсистемыКлиент.ПоказатьРезультатВыполнения(). +// ВводныйТекст - Строка - Текст предупреждения. +// ИнформацияОбОшибке - ИнформацияОбОшибке - Необязательный. Тексты ошибок, которые при желании может просмотреть пользователь. +// +// См. также: +// СтандартныеПодсистемыКлиент.ПоказатьРезультатВыполнения(). +// +Процедура ВывестиИнформациюОбОшибке(Результат, ВводныйТекст, ИнформацияОбОшибке) Экспорт + Кратко = ВводныйТекст + Символы.ПС + ИсходнаяПричинаОшибки(ИнформацияОбОшибке); + Подробно = ПодробноеПредставлениеОшибки(ИнформацияОбОшибке); + ВывестиПредупреждение(Результат, Кратко, Подробно); +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// Работа с ошибками. + +// Формирует краткое представление исходной проблемы из информации об ошибке. +// +// Параметры: +// ИнформацияОбОшибке - ИнформацияОбОшибке - Информация об ошибке. +// +// Возвращаемое значение: +// Строка - Краткое представление ошибки. +// +Функция ИсходнаяПричинаОшибки(ИнформацияОбОшибке) Экспорт + ОписаниеОшибки = ИнформацияОбОшибке.Описание; + ПричинаОшибки = ИнформацияОбОшибке.Причина; + Пока ПричинаОшибки <> Неопределено Цикл + ОписаниеОшибки = ПричинаОшибки.Описание; + ПричинаОшибки = ПричинаОшибки.Причина; + КонецЦикла; + Возврат ОписаниеОшибки; +КонецФункции + #КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +//////////////////////////////////////////////////////////////////////////////// +// Регистрация результата работы для последующего вывода на клиенте. + +// Регистрирует сведения для вывода информации. +Процедура ДобавитьШаг(Результат, ИмяПроцедуры, ПараметрыПроцедуры) + Если Не Результат.Свойство("Шаги") Тогда + Результат.Вставить("Шаги", Новый СписокЗначений); + КонецЕсли; + Результат.Шаги.Добавить(ПараметрыПроцедуры, ИмяПроцедуры); +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// Работа со строками (кандидат для строковых функций). + +// Определяет примерное число строк с учетом переносов. +Функция ЧислоСтрок(Текст, ОтсечкаПоШирине, ПриводитьКРазмерамЭлементовФормы = Истина) Экспорт + ЧислоСтрок = СтрЧислоСтрок(Текст); + ЧислоПереносов = 0; + Для НомерСтроки = 1 По ЧислоСтрок Цикл + Строка = СтрПолучитьСтроку(Текст, НомерСтроки); + ЧислоПереносов = ЧислоПереносов + Цел(СтрДлина(Строка)/ОтсечкаПоШирине); + КонецЦикла; + ПримерноеЧислоСтрок = ЧислоСтрок + ЧислоПереносов; + Если ПриводитьКРазмерамЭлементовФормы Тогда + Если ТекущийВариантИнтерфейсаКлиентскогоПриложения() = ВариантИнтерфейсаКлиентскогоПриложения.Версия8_2 Тогда + Коэффициент = 4/5; // В 8.2 в высоту 4 вмещается примерно 5 строк текста. + Иначе + Коэффициент = 2/3; // В такси в высоту 2 вмещается примерно 3 строки текста. + КонецЕсли; + ПримерноеЧислоСтрок = Цел((ПримерноеЧислоСтрок+1)*Коэффициент); + КонецЕсли; + Возврат ПримерноеЧислоСтрок; +КонецФункции + +#КонецОбласти + diff --git a/SSL/src/CommonModules/СтандартныеПодсистемыПовтИсп/Module.bsl b/SSL/src/CommonModules/СтандартныеПодсистемыПовтИсп/Module.bsl index fc02d12c3..b95fa604e 100644 --- a/SSL/src/CommonModules/СтандартныеПодсистемыПовтИсп/Module.bsl +++ b/SSL/src/CommonModules/СтандартныеПодсистемыПовтИсп/Module.bsl @@ -3,48 +3,7 @@ // //////////////////////////////////////////////////////////////////////////////// -#Область СлужебныеПроцедурыИФункции - -// Содержит сохраненные параметры, используемые подсистемой. -Функция ПараметрыПрограммныхСобытий() Экспорт - - УстановитьПривилегированныйРежим(Истина); - СохраненныеПараметры = СтандартныеПодсистемыСервер.ПараметрыРаботыПрограммы( - "ПараметрыСлужебныхСобытий"); - УстановитьПривилегированныйРежим(Ложь); - - СтандартныеПодсистемыСервер.ПроверитьОбновлениеПараметровРаботыПрограммы( - "ПараметрыСлужебныхСобытий", - "ОбработчикиСобытий"); - - Если НЕ СохраненныеПараметры.Свойство("ОбработчикиСобытий") Тогда - СтандартныеПодсистемыВызовСервера.ПриОшибкеПолученияОбработчиковСобытия(); - КонецЕсли; - - УстановитьПривилегированныйРежим(Истина); - СохраненныеПараметры = СтандартныеПодсистемыСервер.ПараметрыРаботыПрограммы( - "ПараметрыСлужебныхСобытий"); - УстановитьПривилегированныйРежим(Ложь); - - ПредставлениеПараметра = ""; - - Если НЕ СохраненныеПараметры.Свойство("ОбработчикиСобытий") Тогда - ПредставлениеПараметра = НСтр("ru = 'Обработчики событий'"); - КонецЕсли; - - Если ЗначениеЗаполнено(ПредставлениеПараметра) Тогда - - ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Ошибка обновления информационной базы. - |Не заполнен параметр служебных событий: - |""%1"".'") - + СтандартныеПодсистемыСервер.УточнениеОшибкиПараметровРаботыПрограммыДляРазработчика(), - ПредставлениеПараметра); - КонецЕсли; - - Возврат СохраненныеПараметры; - -КонецФункции +#Область СлужебныйПрограммныйИнтерфейс // Возвращает описания всех библиотек конфигурации, включая // описание самой конфигурации. @@ -185,6 +144,92 @@ КонецФункции +//////////////////////////////////////////////////////////////////////////////// +// Использование идентификаторов объектов метаданных конфигурации и расширений. + +// Только для внутреннего использования. +Функция ОтключитьИдентификаторыОбъектовМетаданных() Экспорт + + ОбщиеПараметры = ОбщегоНазначения.ОбщиеПараметрыБазовойФункциональности(); + + Если НЕ ОбщиеПараметры.ОтключитьИдентификаторыОбъектовМетаданных Тогда + Возврат Ложь; + КонецЕсли; + + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ВариантыОтчетов") + ИЛИ ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ДополнительныеОтчетыИОбработки") + ИЛИ ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.РассылкаОтчетов") + ИЛИ ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.УправлениеДоступом") Тогда + + ВызватьИсключение + НСтр("ru = 'Невозможно отключить справочник Идентификаторы объектов метаданных, + |если используется любая из следующих подсистем: + |- ВариантыОтчетов, + |- ДополнительныеОтчетыИОбработки, + |- РассылкаОтчетов, + |- УправлениеДоступом.'"); + КонецЕсли; + + Возврат Истина; + +КонецФункции + +// Только для внутреннего использования. +Функция ИдентификаторыОбъектовМетаданныхПроверкаИспользования(ПроверитьОбновление = Ложь, ОбъектыРасширений = Ложь) Экспорт + + Справочники.ИдентификаторыОбъектовМетаданных.ПроверкаИспользования(ОбъектыРасширений); + + Если ПроверитьОбновление Тогда + Справочники.ИдентификаторыОбъектовМетаданных.ДанныеОбновлены(Истина, ОбъектыРасширений); + КонецЕсли; + +КонецФункции + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +// Содержит сохраненные параметры, используемые подсистемой. +Функция ПараметрыПрограммныхСобытий() Экспорт + + УстановитьПривилегированныйРежим(Истина); + СохраненныеПараметры = СтандартныеПодсистемыСервер.ПараметрыРаботыПрограммы( + "ПараметрыСлужебныхСобытий"); + УстановитьПривилегированныйРежим(Ложь); + + СтандартныеПодсистемыСервер.ПроверитьОбновлениеПараметровРаботыПрограммы( + "ПараметрыСлужебныхСобытий", + "ОбработчикиСобытий"); + + Если НЕ СохраненныеПараметры.Свойство("ОбработчикиСобытий") Тогда + СтандартныеПодсистемыВызовСервера.ПриОшибкеПолученияОбработчиковСобытия(); + КонецЕсли; + + УстановитьПривилегированныйРежим(Истина); + СохраненныеПараметры = СтандартныеПодсистемыСервер.ПараметрыРаботыПрограммы( + "ПараметрыСлужебныхСобытий"); + УстановитьПривилегированныйРежим(Ложь); + + ПредставлениеПараметра = ""; + + Если НЕ СохраненныеПараметры.Свойство("ОбработчикиСобытий") Тогда + ПредставлениеПараметра = НСтр("ru = 'Обработчики событий'"); + КонецЕсли; + + Если ЗначениеЗаполнено(ПредставлениеПараметра) Тогда + + ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Ошибка обновления информационной базы. + |Не заполнен параметр служебных событий: + |""%1"".'") + + СтандартныеПодсистемыСервер.УточнениеОшибкиПараметровРаботыПрограммыДляРазработчика(), + ПредставлениеПараметра); + КонецЕсли; + + Возврат СохраненныеПараметры; + +КонецФункции + // Возвращает массив описаний обработчиков серверного события. Функция ОбработчикиСерверногоСобытия(Событие, Служебное = Ложь) Экспорт @@ -261,8 +306,7 @@ Если ПланОбмена.РаспределеннаяИнформационнаяБаза И ОбщегоНазначенияПовтИсп.ЭтоРазделенныйОбъектМетаданных(ПланОбмена.ПолноеИмя(), - ОбщегоНазначенияПовтИсп.РазделительОсновныхДанных()) - Тогда + ОбщегоНазначенияПовтИсп.РазделительОсновныхДанных()) Тогда Результат.Добавить(ПланОбмена.Имя); @@ -360,132 +404,16 @@ КонецФункции //////////////////////////////////////////////////////////////////////////////// -// Получение идентификатора по объекту метаданных и наоборот. +// Для справочника ИдентификаторыОбъектовМетаданных. // Только для внутреннего использования. -Функция ИдентификаторОбъектаМетаданных(ПолноеИмяОбъектаМетаданных) Экспорт +Функция ИдентификаторОбъектаМетаданныхПоПолномуИмени(ПолноеИмяОбъектаМетаданных) Экспорт - СтандартныеПодсистемыПовтИсп.СправочникИдентификаторыОбъектовМетаданныхПроверкаИспользования(Истина); - - УстановитьПривилегированныйРежим(Истина); - - Запрос = Новый Запрос; - Запрос.УстановитьПараметр("ПолноеИмя", ПолноеИмяОбъектаМетаданных); - Запрос.Текст = - "ВЫБРАТЬ - | Идентификаторы.Ссылка КАК Ссылка, - | Идентификаторы.КлючОбъектаМетаданных, - | Идентификаторы.ПолноеИмя - |ИЗ - | Справочник.ИдентификаторыОбъектовМетаданных КАК Идентификаторы - |ГДЕ - | Идентификаторы.ПолноеИмя = &ПолноеИмя - | И НЕ Идентификаторы.ПометкаУдаления"; - - Выгрузка = Запрос.Выполнить().Выгрузить(); - Если Выгрузка.Количество() = 0 Тогда - // Если идентификатор не найден по полному имени, возможно что полное имя задано с ошибкой. - Если Метаданные.НайтиПоПолномуИмени(ПолноеИмяОбъектаМетаданных) = Неопределено Тогда - ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Ошибка при выполнении функции ОбщегоНазначения.ИдентификаторОбъектаМетаданных(). - | - |Объект метаданных не найден по полному имени: - |""%1"".'"), - ПолноеИмяОбъектаМетаданных); - КонецЕсли; - ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Ошибка при выполнении функции ОбщегоНазначения.ИдентификаторОбъектаМетаданных(). - | - |Для объекта метаданных ""%1"" - |не найден идентификатор - |в справочнике ""Идентификаторы объектов метаданных"".'") - + СтандартныеПодсистемыСервер.УточнениеОшибкиПараметровРаботыПрограммыДляРазработчика(), - ПолноеИмяОбъектаМетаданных); - ИначеЕсли Выгрузка.Количество() > 1 Тогда - ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Ошибка при выполнении функции ОбщегоНазначения.ИдентификаторОбъектаМетаданных(). - | - |Для объекта метаданных ""%1"" - |найдено несколько идентификаторов - |в справочнике ""Идентификаторы объектов метаданных"".'") - + СтандартныеПодсистемыСервер.УточнениеОшибкиПараметровРаботыПрограммыДляРазработчика(), - ПолноеИмяОбъектаМетаданных); - КонецЕсли; - - // Проверка соответствия ключа объекта метаданных полному имени объекта метаданных. - РезультатПроверки = Справочники.ИдентификаторыОбъектовМетаданных.КлючОбъектаМетаданныхСоответствуетПолномуИмени(Выгрузка[0]); - Если РезультатПроверки.НеСоответствует Тогда - Если РезультатПроверки.ОбъектМетаданных = Неопределено Тогда - ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Ошибка при выполнении функции ОбщегоНазначения.ИдентификаторОбъектаМетаданных(). - | - |Для объекта метаданных ""%1"" - |найден идентификатор в справочнике ""Идентификаторы объектов метаданных"", - |которому соответствует удаленный объект метаданных.'") - + СтандартныеПодсистемыСервер.УточнениеОшибкиПараметровРаботыПрограммыДляРазработчика(), - ПолноеИмяОбъектаМетаданных); - Иначе - ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Ошибка при выполнении функции ОбщегоНазначения.ИдентификаторОбъектаМетаданных(). - | - |Для объекта метаданных ""%1"" - |найден идентификатор в справочнике ""Идентификаторы объектов метаданных"", - |который соответствует другому объекту метаданных ""%2"".'") - + СтандартныеПодсистемыСервер.УточнениеОшибкиПараметровРаботыПрограммыДляРазработчика(), - ПолноеИмяОбъектаМетаданных, - РезультатПроверки.ОбъектМетаданных); - КонецЕсли; - КонецЕсли; - - Возврат Выгрузка[0].Ссылка; + Возврат Справочники.ИдентификаторыОбъектовМетаданных.ИдентификаторОбъектаМетаданныхПоПолномуИмени( + ПолноеИмяОбъектаМетаданных); КонецФункции -//////////////////////////////////////////////////////////////////////////////// -// Использование справочника ИдентификаторыОбъектовМетаданных. - -// Только для внутреннего использования. -Функция ОтключитьСправочникИдентификаторыОбъектовМетаданных() Экспорт - - Использовать = НЕ ОбщегоНазначения.ОбщиеПараметрыБазовойФункциональности( - ).ОтключитьСправочникИдентификаторыОбъектовМетаданных; - - Если Использовать Тогда - Возврат Ложь; - КонецЕсли; - - Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ВариантыОтчетов") - ИЛИ ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ДополнительныеОтчетыИОбработки") - ИЛИ ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.РассылкаОтчетов") - ИЛИ ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.УправлениеДоступом") Тогда - - ВызватьИсключение - НСтр("ru = 'Невозможно отключить справочник Идентификаторы объектов метаданных, - |если используется любая из следующих подсистем: - |- ВариантыОтчетов, - |- ДополнительныеОтчетыИОбработки, - |- РассылкаОтчетов, - |- УправлениеДоступом.'"); - КонецЕсли; - - Возврат Истина; - -КонецФункции - -// Только для внутреннего использования. -Функция СправочникИдентификаторыОбъектовМетаданныхПроверкаИспользования(ПроверитьОбновление = Ложь) Экспорт - - Справочники.ИдентификаторыОбъектовМетаданных.ПроверкаИспользования(); - - Если ПроверитьОбновление Тогда - Справочники.ИдентификаторыОбъектовМетаданных.ДанныеОбновлены(Истина); - КонецЕсли; - -КонецФункции - -//////////////////////////////////////////////////////////////////////////////// -// Для обновления справочника ИдентификаторыОбъектовМетаданных. - // Только для внутреннего использования. Функция ТаблицаПереименованияДляТекущейВерсии() Экспорт @@ -494,9 +422,9 @@ КонецФункции // Только для внутреннего использования. -Функция СвойстваКоллекцийОбъектовМетаданных() Экспорт +Функция СвойстваКоллекцийОбъектовМетаданных(ОбъектыРасширений = Ложь) Экспорт - Возврат Справочники.ИдентификаторыОбъектовМетаданных.СвойстваКоллекцийОбъектовМетаданных(); + Возврат Справочники.ИдентификаторыОбъектовМетаданных.СвойстваКоллекцийОбъектовМетаданных(ОбъектыРасширений); КонецФункции @@ -510,11 +438,11 @@ ИмяПредопределенного = ВРег(ПолноеИмяПредопределенного); - Точка = Найти(ИмяПредопределенного, "."); + Точка = СтрНайти(ИмяПредопределенного, "."); ИмяКоллекции = Лев(ИмяПредопределенного, Точка - 1); ИмяПредопределенного = Сред(ИмяПредопределенного, Точка + 1); - Точка = Найти(ИмяПредопределенного, "."); + Точка = СтрНайти(ИмяПредопределенного, "."); ИмяТаблицы = Лев(ИмяПредопределенного, Точка - 1); ИмяПредопределенного = Сред(ИмяПредопределенного, Точка + 1); @@ -592,8 +520,7 @@ Функция ПодготовленныеОбработчикиСерверногоСобытия(Событие, Служебное = Ложь, ПерваяПопытка = Истина) - Параметры = СтандартныеПодсистемыПовтИсп.ПараметрыПрограммныхСобытий( - ).ОбработчикиСобытий.НаСервере; + Параметры = СтандартныеПодсистемыПовтИсп.ПараметрыПрограммныхСобытий().ОбработчикиСобытий.НаСервере; Если Служебное Тогда Обработчики = Параметры.ОбработчикиСлужебныхСобытий.Получить(Событие); @@ -607,11 +534,9 @@ Если Обработчики = Неопределено Тогда Если Служебное Тогда - ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Не найдено серверное служебное событие ""%1"".'"), Событие); + ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Не найдено серверное служебное событие ""%1"".'"), Событие); Иначе - ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Не найдено серверное событие ""%1"".'"), Событие); + ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Не найдено серверное событие ""%1"".'"), Событие); КонецЕсли; КонецЕсли; diff --git a/SSL/src/CommonModules/СтандартныеПодсистемыСервер/Module.bsl b/SSL/src/CommonModules/СтандартныеПодсистемыСервер/Module.bsl index 54b5d1824..1969cb9fb 100644 --- a/SSL/src/CommonModules/СтандартныеПодсистемыСервер/Module.bsl +++ b/SSL/src/CommonModules/СтандартныеПодсистемыСервер/Module.bsl @@ -24,44 +24,63 @@ Если ИменаПараметровСеанса = Неопределено Тогда ПараметрыСеанса.ПараметрыКлиентаНаСервере = Новый ФиксированноеСоответствие(Новый Соответствие); + ПараметрыСеанса.УстановленныеРасширения = КонтрольныеСуммыРасширений(); + Если ТекущийРежимЗапуска() <> Неопределено Тогда + Справочники.ВерсииРасширений.ЗарегистрироватьИспользованиеВерсииРасширений(); + КонецЕсли; // При установке соединения с информационной базой до вызова всех остальных обработчиков. ПередЗапускомПрограммы(); Возврат УстановленныеПараметры; КонецЕсли; - // Инициализация параметров сеанса, необходимых для работы до момента обновления параметров работы программы. Если ИменаПараметровСеанса.Найти("ПараметрыКлиентаНаСервере") <> Неопределено Тогда ПараметрыСеанса.ПараметрыКлиентаНаСервере = Новый ФиксированноеСоответствие(Новый Соответствие); УстановленныеПараметры.Добавить("ПараметрыКлиентаНаСервере"); КонецЕсли; + Если ИменаПараметровСеанса.Найти("УстановленныеРасширения") <> Неопределено Тогда + ПараметрыСеанса.УстановленныеРасширения = КонтрольныеСуммыРасширений(); + УстановленныеПараметры.Добавить("УстановленныеРасширения"); + КонецЕсли; + + Если ИменаПараметровСеанса.Найти("ВерсияРасширений") <> Неопределено Тогда + ПараметрыСеанса.ВерсияРасширений = Справочники.ВерсииРасширений.ВерсияРасширений(); + УстановленныеПараметры.Добавить("ВерсияРасширений"); + КонецЕсли; + + Если ИменаПараметровСеанса.Найти("АдресСвойствРасширений") <> Неопределено Тогда + Справочники.ИдентификаторыОбъектовМетаданных.УстановитьПараметрСеансаАдресСвойствРасширений(); + УстановленныеПараметры.Добавить("АдресСвойствРасширений"); + КонецЕсли; + + Обработчики = Новый Соответствие; + ОбновлениеИнформационнойБазыСлужебный.ПриДобавленииОбработчиковУстановкиПараметровСеанса(Обработчики); + + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ДатыЗапретаИзменения") Тогда + МодульДатыЗапретаИзмененияСлужебный = ОбщегоНазначения.ОбщийМодуль("ДатыЗапретаИзмененияСлужебный"); + МодульДатыЗапретаИзмененияСлужебный.ПриДобавленииОбработчиковУстановкиПараметровСеанса(Обработчики); + КонецЕсли; + + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ОценкаПроизводительности") Тогда + МодульОценкаПроизводительностиСлужебный = ОбщегоНазначения.ОбщийМодуль("ОценкаПроизводительностиСлужебный"); + МодульОценкаПроизводительностиСлужебный.ПриДобавленииОбработчиковУстановкиПараметровСеанса(Обработчики); + КонецЕсли; + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ОбменДанными") Тогда МодульОбменДаннымиСервер = ОбщегоНазначения.ОбщийМодуль("ОбменДаннымиСервер"); - Обработчики = Новый Соответствие; МодульОбменДаннымиСервер.ПриДобавленииОбработчиковУстановкиПараметровСеанса(Обработчики); - ВыполнитьОбработчикиУстановкиПараметровСеанса(ИменаПараметровСеанса, Обработчики, УстановленныеПараметры); КонецЕсли; - НеустановленныеПараметры = ОбщегоНазначенияКлиентСервер.СократитьМассив(ИменаПараметровСеанса, УстановленныеПараметры); - Если НеустановленныеПараметры.Количество() = 0 Тогда - Возврат УстановленныеПараметры; + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.Пользователи") Тогда + МодульПользователиСлужебный = ОбщегоНазначения.ОбщийМодуль("ПользователиСлужебный"); + МодульПользователиСлужебный.ПриДобавленииОбработчиковУстановкиПараметровСеанса(Обработчики); КонецЕсли; - // Инициализация всех остальных параметров сеанса (к моменту вызова служебных событий параметры работы программы уже - // обновлены). - Обработчики = Новый Соответствие; - ОбработчикиСобытия = ОбщегоНазначения.ОбработчикиСлужебногоСобытия( - "СтандартныеПодсистемы.БазоваяФункциональность\ПриДобавленииОбработчиковУстановкиПараметровСеанса"); - - Для каждого Обработчик Из ОбработчикиСобытия Цикл - Обработчик.Модуль.ПриДобавленииОбработчиковУстановкиПараметровСеанса(Обработчики); - КонецЦикла; - - ОбработчикиСобственные = ОбщегоНазначенияПереопределяемый.ОбработчикиИнициализацииПараметровСеанса(); - Для Каждого Запись Из ОбработчикиСобственные Цикл - Обработчики.Вставить(Запись.Ключ, Запись.Значение); - КонецЦикла; + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.УправлениеДоступом") Тогда + МодульУправлениеДоступомСлужебный = ОбщегоНазначения.ОбщийМодуль("УправлениеДоступомСлужебный"); + МодульУправлениеДоступомСлужебный.ПриДобавленииОбработчиковУстановкиПараметровСеанса(Обработчики); + КонецЕсли; ОбработчикиСобственные = Новый Соответствие; ОбщегоНазначенияПереопределяемый.ПриДобавленииОбработчиковУстановкиПараметровСеанса(ОбработчикиСобственные); @@ -84,26 +103,7 @@ // Функция ЭтоБазоваяВерсияКонфигурации() Экспорт - Возврат Найти(ВРег(Метаданные.Имя), "БАЗОВАЯ") > 0; - -КонецФункции - -// Проверят, что выполнение происходит на учебной платформе, -// на которой, например, недоступно получение свойства ПользовательОС. -// -Функция ЭтоУчебнаяПлатформа() Экспорт - - УстановитьПривилегированныйРежим(Истина); - - ТекущийПользователь = ПользователиИнформационнойБазы.ТекущийПользователь(); - - Попытка - ПользовательОС = ТекущийПользователь.ПользовательОС; - Исключение - ТекущийПользователь = Неопределено; - КонецПопытки; - - Возврат ТекущийПользователь = Неопределено; + Возврат СтрНайти(ВРег(Метаданные.Имя), "БАЗОВАЯ") > 0; КонецФункции @@ -115,7 +115,7 @@ // Процедура ОбновитьВсеПараметрыРаботыПрограммы() Экспорт - ОбновитьПараметрыРаботыПрограммы(); + ОбновитьПараметрыРаботыПрограммы(Ложь); КонецПроцедуры @@ -170,6 +170,60 @@ КонецПроцедуры +//////////////////////////////////////////////////////////////////////////////// +// Аутентификации пользователя на сайте ИТС + +// Возвращает логин и пароль пользователя Интернет-поддержки, +// сохраненные в информационной базе. +// +// Возвращаемое значение: +// Структура - текущие значения: +// * Логин - Строка - логин пользователя Интернет-поддержки; +// * Пароль - Строка - пароль пользователя Интернет-поддержки. +// Неопределено - если параметры еще не были введены. +// +Функция ПараметрыАутентификацииНаСайте() Экспорт + + Если ОбщегоНазначения.ПодсистемаСуществует("ИнтернетПоддержкаПользователей") Тогда + МодульИнтернетПоддержкаПользователей = ОбщегоНазначения.ОбщийМодуль("ИнтернетПоддержкаПользователей"); + Возврат МодульИнтернетПоддержкаПользователей.ДанныеАутентификацииПользователяИнтернетПоддержки(); + Иначе + Владелец = ОбщегоНазначения.ИдентификаторОбъектаМетаданных("Справочник.ИдентификаторыОбъектовМетаданных"); + УстановитьПривилегированныйРежим(Истина); + Результат = ОбщегоНазначения.ПрочитатьДанныеИзБезопасногоХранилища(Владелец, "Логин, Пароль"); + УстановитьПривилегированныйРежим(Ложь); + Возврат ?(ЗначениеЗаполнено(Результат.Логин), Результат, Неопределено); + КонецЕсли; + +КонецФункции + +// Сохраняет параметры аутентификации пользователя (логин и пароль) на пользовательском сайте 1С. +// +// Параметры: +// СохраняемыеПараметры - Структура - сохраняемые значения: +// * Логин - Строка - логин пользователя Интернет-поддержки; +// * Пароль - Строка - пароль пользователя Интернет-поддержки. +// +Процедура СохранитьПараметрыАутентификацииНаСайте(СохраняемыеПараметры) Экспорт + + ОбщегоНазначенияКлиентСервер.Проверить(Не ОбщегоНазначения.ПодсистемаСуществует("ИнтернетПоддержкаПользователей"), + НСтр("ru = 'Недопустимый вызов процедуры.'"), "СтандартныеПодсистемыСервер.СохранитьПараметрыАутентификацииНаСайте"); + + Владелец = ОбщегоНазначения.ИдентификаторОбъектаМетаданных("Справочник.ИдентификаторыОбъектовМетаданных"); + Если СохраняемыеПараметры <> Неопределено Тогда + УстановитьПривилегированныйРежим(Истина); + ОбщегоНазначения.ЗаписатьДанныеВБезопасноеХранилище(Владелец, СохраняемыеПараметры.Пароль); + ОбщегоНазначения.ЗаписатьДанныеВБезопасноеХранилище(Владелец, СохраняемыеПараметры.Логин, "Логин"); + УстановитьПривилегированныйРежим(Ложь); + Иначе + УстановитьПривилегированныйРежим(Истина); + ОбщегоНазначения.ЗаписатьДанныеВБезопасноеХранилище(Владелец, Неопределено); + ОбщегоНазначения.ЗаписатьДанныеВБезопасноеХранилище(Владелец, Неопределено, "Логин"); + УстановитьПривилегированныйРежим(Ложь); + КонецЕсли; + +КонецПроцедуры + #КонецОбласти #Область СлужебныйПрограммныйИнтерфейс @@ -254,6 +308,11 @@ ПользователиСлужебный.ПриДобавленииСлужебныхСобытий(КлиентскиеСобытия, СерверныеСобытия); + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.Печать") Тогда + МодульУправлениеПечатью = ОбщегоНазначения.ОбщийМодуль("УправлениеПечатью"); + МодульУправлениеПечатью.ПриДобавленииСлужебныхСобытий(КлиентскиеСобытия, СерверныеСобытия); + КонецЕсли; + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ПрисоединенныеФайлы") Тогда МодульПрисоединенныеФайлыСлужебный = ОбщегоНазначения.ОбщийМодуль("ПрисоединенныеФайлыСлужебный"); МодульПрисоединенныеФайлыСлужебный.ПриДобавленииСлужебныхСобытий(КлиентскиеСобытия, СерверныеСобытия); @@ -403,6 +462,11 @@ МодульЗаметкиПользователяСлужебный.ПриДобавленииОбработчиковСлужебныхСобытий(КлиентскиеОбработчики, СерверныеОбработчики); КонецЕсли; + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ЗащитаПерсональныхДанных") Тогда + МодульЗащитаПерсональныхДанных = ОбщегоНазначения.ОбщийМодуль("ЗащитаПерсональныхДанных"); + МодульЗащитаПерсональныхДанных.ПриДобавленииОбработчиковСлужебныхСобытий(КлиентскиеОбработчики, СерверныеОбработчики); + КонецЕсли; + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.Интеграция1СБухфон") Тогда МодульИнтеграция1СБухфон = ОбщегоНазначения.ОбщийМодуль("Интеграция1СБухфон"); МодульИнтеграция1СБухфон.ПриДобавленииОбработчиковСлужебныхСобытий(КлиентскиеОбработчики, СерверныеОбработчики); @@ -449,8 +513,8 @@ КонецЕсли; Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ОтправкаSMS") Тогда - МодульОрганизацииСлужебный = ОбщегоНазначения.ОбщийМодуль("ОтправкаSMS"); - МодульОрганизацииСлужебный.ПриДобавленииОбработчиковСлужебныхСобытий(КлиентскиеОбработчики, СерверныеОбработчики); + МодульОтправкаSMS = ОбщегоНазначения.ОбщийМодуль("ОтправкаSMS"); + МодульОтправкаSMS.ПриДобавленииОбработчиковСлужебныхСобытий(КлиентскиеОбработчики, СерверныеОбработчики); КонецЕсли; Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ОценкаПроизводительности") Тогда @@ -636,6 +700,12 @@ ЗагружаемыеСправочники.Удалить(СтрокаТаблицы); КонецЕсли; + // Загрузка в справочник ИдентификаторыОбъектовРасширений запрещена. + СтрокаТаблицы = ЗагружаемыеСправочники.Найти(Метаданные.Справочники.ИдентификаторыОбъектовРасширений.ПолноеИмя(), "ПолноеИмя"); + Если СтрокаТаблицы <> Неопределено Тогда + ЗагружаемыеСправочники.Удалить(СтрокаТаблицы); + КонецЕсли; + КонецПроцедуры // Определить объекты метаданных, в модулях менеджеров которых ограничивается возможность @@ -651,7 +721,10 @@ // Если указана пустая строка, значит в модуле менеджера определены обе функции. // Процедура ПриОпределенииОбъектовСРедактируемымиРеквизитами(Объекты) Экспорт + Объекты.Вставить(Метаданные.Справочники.ИдентификаторыОбъектовМетаданных.ПолноеИмя(), "РеквизитыРедактируемыеВГрупповойОбработке"); + Объекты.Вставить(Метаданные.Справочники.ИдентификаторыОбъектовРасширений.ПолноеИмя(), "РеквизитыРедактируемыеВГрупповойОбработке"); + КонецПроцедуры // Получает идентификатор информационной базы. @@ -674,51 +747,6 @@ КонецФункции -// Возвращает логин и пароль пользователя Интернет-поддержки, -// сохраненные в информационной базе. -// -// Возвращаемое значение: -// Структура - текущие значения: -// * Логин - Строка - логин пользователя Интернет-поддержки; -// * Пароль - Строка - пароль пользователя Интернет-поддержки. -// Неопределено - если параметры еще не были введены. -// -Функция ПараметрыАутентификацииНаСайте() Экспорт - - Если ОбщегоНазначения.ПодсистемаСуществует("ИнтернетПоддержкаПользователей") Тогда - МодульИнтернетПоддержкаПользователей = ОбщегоНазначения.ОбщийМодуль("ИнтернетПоддержкаПользователей"); - Возврат МодульИнтернетПоддержкаПользователей.ДанныеАутентификацииПользователяИнтернетПоддержки(); - Иначе - Результат = Новый Структура("Логин,Пароль"); - Результат.Логин = ОбщегоНазначения.ХранилищеОбщихНастроекЗагрузить("АутентификацияНаПользовательскомСайте", "КодПользователя", ""); - Результат.Пароль = ОбщегоНазначения.ХранилищеОбщихНастроекЗагрузить("АутентификацияНаПользовательскомСайте", "Пароль", ""); - Возврат ?(Результат.Логин <> "" И Результат.Пароль <> "", Результат, Неопределено); - КонецЕсли; - -КонецФункции - -// Сохраняет параметры аутентификации пользователя (логин и пароль) на пользовательском сайте 1С. -// -// Параметры: -// СохраняемыеПараметры - Структура - сохраняемые значения: -// * Логин - Строка - логин пользователя Интернет-поддержки; -// * Пароль - Строка - пароль пользователя Интернет-поддержки. -// -Процедура СохранитьПараметрыАутентификацииНаСайте(СохраняемыеПараметры) Экспорт - - ОбщегоНазначенияКлиентСервер.Проверить(Не ОбщегоНазначения.ПодсистемаСуществует("ИнтернетПоддержкаПользователей"), - НСтр("ru = 'Недопустимый вызов процедуры.'"), "АдресныйКлассификаторСлужебный.СохранитьПараметрыАутентификацииНаСайте"); - - Если СохраняемыеПараметры <> Неопределено Тогда - ОбщегоНазначения.ХранилищеОбщихНастроекСохранить("АутентификацияНаПользовательскомСайте", "КодПользователя", СохраняемыеПараметры.Логин); - ОбщегоНазначения.ХранилищеОбщихНастроекСохранить("АутентификацияНаПользовательскомСайте", "Пароль", СохраняемыеПараметры.Пароль); - Иначе - ОбщегоНазначения.ХранилищеОбщихНастроекУдалить("АутентификацияНаПользовательскомСайте", "КодПользователя", ИмяПользователя()); - ОбщегоНазначения.ХранилищеОбщихНастроекУдалить("АутентификацияНаПользовательскомСайте", "Пароль", ИмяПользователя()); - КонецЕсли; - -КонецПроцедуры - //////////////////////////////////////////////////////////////////////////////// // Дополнительная базовая функциональность для анализа параметров клиента на сервере. @@ -775,79 +803,6 @@ КонецФункции -//////////////////////////////////////////////////////////////////////////////// -// Дополнительная базовая функциональность обновления информационной базы. - -// Только для внутреннего использования. -// Для внешних вызовов следует использовать процедуру ОбновитьВсеПараметрыРаботыПрограммы. -// -Процедура ОбновитьПараметрыРаботыПрограммы(НайтиИзменения = Ложь, - ОшибкаУстановкиМонопольногоРежима = Неопределено, - ВФоне = Ложь) Экспорт - - ЕстьИзменения = Ложь; - ТолькоПроверка = Ложь; - СнятьМонопольныйРежим = Ложь; - - Если НайтиИзменения Тогда - ТолькоПроверка = Истина; - - ИначеЕсли НЕ МонопольныйРежим() Тогда - Попытка - УстановитьМонопольныйРежим(Истина); - СнятьМонопольныйРежим = Истина; - Исключение - СнятьМонопольныйРежим = Ложь; - ТолькоПроверка = Истина; - КонецПопытки; - КонецЕсли; - - БезИзменений = Новый Структура; - Попытка - ПроверитьОбновитьПараметрыРаботыПрограммы(ЕстьИзменения, ТолькоПроверка, БезИзменений, ВФоне); - Исключение - Если СнятьМонопольныйРежим Тогда - УстановитьМонопольныйРежим(Ложь); - КонецЕсли; - ВызватьИсключение; - КонецПопытки; - - Если СнятьМонопольныйРежим Тогда - УстановитьМонопольныйРежим(Ложь); - КонецЕсли; - - Если Не НайтиИзменения И ТолькоПроверка Тогда - Если ЕстьИзменения Тогда - Попытка - УстановитьМонопольныйРежим(Истина); - Исключение - ТекстОшибки = - НСтр("ru = 'Невозможно выполнить обновление информационной базы: - |- Невозможно установить монопольный режим - |- Версия конфигурации не предусматривает обновление без установки монопольного режима.'"); - - Если ОшибкаУстановкиМонопольногоРежима = Неопределено Тогда - ВызватьИсключение ТекстОшибки; - Иначе - ОшибкаУстановкиМонопольногоРежима = ТекстОшибки; - Возврат; - КонецЕсли; - КонецПопытки; - Попытка - ОбновитьПараметрыРаботыПрограммы(ЕстьИзменения); - Исключение - УстановитьМонопольныйРежим(Ложь); - ВызватьИсключение; - КонецПопытки; - УстановитьМонопольныйРежим(Ложь); - Иначе - // Монопольный режим не требуется. - ПроверитьОбновитьПараметрыРаботыПрограммы(ЕстьИзменения, Ложь, БезИзменений, ВФоне); - КонецЕсли; - КонецЕсли; - -КонецПроцедуры - //////////////////////////////////////////////////////////////////////////////// // Процедуры для установки/обновления/получения параметров работы программы (кэшей). @@ -1060,6 +1015,13 @@ // Получение версии ИБ или неразделенных данных. ВерсияИБ = ОбновлениеИнформационнойБазыСлужебный.ВерсияИБ(Метаданные.Имя); + // При переходе на другую программу используется текущая версия конфигурации. + Если Не ОбщегоНазначенияПовтИсп.РазделениеВключено() + И ОбновлениеИнформационнойБазыСлужебный.РежимОбновленияДанных() = "ПереходСДругойПрограммы" Тогда + + ВерсияИБ = Метаданные.Версия; + КонецЕсли; + // При начальном заполнении добавление изменений параметров пропускается. Если ОбщегоНазначенияКлиентСервер.СравнитьВерсии(ВерсияИБ, "0.0.0.0") = 0 Тогда ИзмененияПараметра = Неопределено; @@ -1156,8 +1118,6 @@ // Процедура ПодтвердитьОбновлениеПараметраРаботыПрограммы(ИмяКонстанты, ИмяПараметра) Экспорт - УстановитьПривилегированныйРежим(Истина); - УстановитьПривилегированныйРежим(Истина); ПараметрыКлиентаНаСервере = Новый Соответствие(ПараметрыСеанса.ПараметрыКлиентаНаСервере); @@ -1240,6 +1200,448 @@ КонецПроцедуры +// Только для внутреннего использования. +Процедура ЗагрузитьОбновитьПараметрыРаботыПрограммы(ОшибкаУстановкиМонопольногоРежима = Неопределено, ВФоне = Ложь) Экспорт + + МодульОценкаПроизводительностиКлиентСервер = Неопределено; + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ОценкаПроизводительности") Тогда + МодульОценкаПроизводительностиКлиентСервер = ОбщегоНазначения.ОбщийМодуль("ОценкаПроизводительностиКлиентСервер"); + ВремяНачала = МодульОценкаПроизводительностиКлиентСервер.НачатьЗамерВремени(); + КонецЕсли; + + Если ОбщегоНазначенияПовтИсп.ДоступноИспользованиеРазделенныхДанных() Тогда + УстановитьПривилегированныйРежим(Истина); + ПараметрЗапускаКлиента = ПараметрыСеанса.ПараметрыКлиентаНаСервере.Получить("ПараметрЗапуска"); + УстановитьПривилегированныйРежим(Ложь); + Если СтрНайти(НРег(ПараметрЗапускаКлиента), НРег("ЗапуститьОбновлениеИнформационнойБазы")) > 0 Тогда + ОчиститьВсеПараметрыРаботыРасширений(); + КонецЕсли; + КонецЕсли; + + Если ОбщегоНазначенияПовтИсп.РазделениеВключено() + И ОбщегоНазначенияПовтИсп.ДоступноИспользованиеРазделенныхДанных() Тогда + + ЗаполнитьВсеПараметрыРаботыРасширений(); + Возврат; + КонецЕсли; + + ВыполнитьЗагрузку = Истина; + Если НЕ НеобходимоОбновлениеПараметровРаботыПрограммы(ВыполнитьЗагрузку) Тогда + Возврат; + КонецЕсли; + + УстановитьПривилегированныйРежим(Истина); + СнятьМонопольныйРежим = Ложь; + Попытка + Если ОбщегоНазначения.ЭтоПодчиненныйУзелРИБ() Тогда + // Есть РИБ-обмен данными и обновление в подчиненном узле ИБ. + + // Предварительное обновление кэша служебных событий. + Константы.ПараметрыСлужебныхСобытий.СоздатьМенеджерЗначения().Обновить(); + + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ОбменДанными") Тогда + МодульОбменДаннымиСервер = ОбщегоНазначения.ОбщийМодуль("ОбменДаннымиСервер"); + КонецЕсли; + + Если ВыполнитьЗагрузку Тогда + + СтандартнаяОбработка = Истина; + ОбщегоНазначенияПереопределяемый.ПередЗагрузкойПриоритетныхДанныхВПодчиненномРИБУзле( + СтандартнаяОбработка); + + Если СтандартнаяОбработка = Истина + И ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ОбменДанными") Тогда + + Если НЕ МонопольныйРежим() Тогда + Попытка + УстановитьМонопольныйРежим(Истина); + СнятьМонопольныйРежим = Истина; + Исключение + Если ОшибкаУстановкиМонопольногоРежима <> Неопределено Тогда + ОшибкаУстановкиМонопольногоРежима = + НСтр("ru = 'Невозможно выполнить обновление информационной базы: + |- Невозможно установить монопольный режим + |- Версия конфигурации не предусматривает обновление без установки монопольного режима.'"); + КонецЕсли; + ВызватьИсключение ОшибкаУстановкиМонопольногоРежима; + КонецПопытки; + КонецЕсли; + + // Загрузка предопределенных элементов и идентификаторов объектов метаданных из главного узла. + МодульОбменДаннымиСервер.ЗагрузитьПриоритетныеДанныеВПодчиненныйУзелРИБ(); + КонецЕсли; + + Если ВФоне Тогда + ОбщегоНазначенияКлиентСервер.СообщитьПользователю("ПрибавкаНаШагеПрогресса=5"); + КонецЕсли; + КонецЕсли; + + // Проверка загрузки идентификаторов объектов метаданных из главного узла. + СписокКритичныхИзменений = ""; + Попытка + Справочники.ИдентификаторыОбъектовМетаданных.ВыполнитьОбновлениеДанных(Ложь, Ложь, Истина, , СписокКритичныхИзменений); + Исключение + Если ВыполнитьЗагрузку И ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ОбменДанными") Тогда + // Сброс кэша сообщения обмена. + МодульОбменДаннымиСервер.ВключитьПовторениеЗагрузкиСообщенияОбменаДаннымиПередЗапуском(); + КонецЕсли; + ВызватьИсключение; + КонецПопытки; + + Если ЗначениеЗаполнено(СписокКритичныхИзменений) Тогда + + ИмяСобытия = НСтр("ru = 'Идентификаторы объектов метаданных.Требуется загрузить критичные изменения'", + ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()); + + ЗаписьЖурналаРегистрации(ИмяСобытия, УровеньЖурналаРегистрации.Ошибка, , , СписокКритичныхИзменений); + + Если ВыполнитьЗагрузку И ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ОбменДанными") Тогда + // Сброс кэша сообщения обмена. + МодульОбменДаннымиСервер.ВключитьПовторениеЗагрузкиСообщенияОбменаДаннымиПередЗапуском(); + КонецЕсли; + + ТекстОшибки = + НСтр("ru = 'Информационная база не может быть обновлена из-за проблемы в главном узле: + |- главный узел был некорректно обновлен (возможно не был увеличен номер версии конфигурации, + | из-за чего не заполнился справочник Идентификаторы объектов метаданных); + |- либо были отменены к выгрузке приоритетные данные (элементы + | справочника Идентификаторы объектов метаданных). + | + |Необходимо заново выполнить обновление главного узла, зарегистрировать к выгрузке + |приоритетные данные и повторить синхронизацию данных: + |- в главном узле запустите программу с параметром /C ЗапуститьОбновлениеИнформационнойБазы; + |%1'"); + + Если ВыполнитьЗагрузку Тогда + // Обновление подчиненного узла РИБ. + ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ТекстОшибки, + НСтр("ru = '- затем повторите синхронизацию данных с этой информационной базой + | (сначала в главном узле, затем в этой информационной базе после перезапуска).'")); + Иначе + // Настройка подчиненного узла РИБ при первом запуске. + ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ТекстОшибки, + НСтр("ru = '- затем повторите создание подчиненного узла.'")); + КонецЕсли; + + ВызватьИсключение ТекстОшибки; + КонецЕсли; + Если ВФоне Тогда + ОбщегоНазначенияКлиентСервер.СообщитьПользователю("ПрибавкаНаШагеПрогресса=10"); + КонецЕсли; + КонецЕсли; + + // Нет РИБ-обмена данными + // или обновление в главном узле ИБ + // или обновление при первом запуске подчиненного узла + // или обновление после загрузки справочника "Идентификаторы объектов метаданных" из главного узла. + ОбновитьПараметрыРаботыПрограммы(Ложь, ОшибкаУстановкиМонопольногоРежима, ВФоне); + + // Заполнение параметров работы расширений + ЗаполнитьВсеПараметрыРаботыРасширений(); + Исключение + Если СнятьМонопольныйРежим Тогда + УстановитьМонопольныйРежим(Ложь); + КонецЕсли; + ВызватьИсключение; + КонецПопытки; + + Если МодульОценкаПроизводительностиКлиентСервер <> Неопределено Тогда + МодульОценкаПроизводительностиКлиентСервер.ЗакончитьЗамерВремени("ВремяОбновленияКэшейМетаданных", ВремяНачала); + КонецЕсли; + +КонецПроцедуры + +// Только для внутреннего использования. +Процедура ЗагрузитьОбновитьПараметрыРаботыПрограммыВФоне(ПараметрыВыполнения, АдресХранилища) Экспорт + + Если ПараметрыВыполнения.Свойство("ПараметрыКлиентаНаСервере") Тогда + ПараметрыСеанса.ПараметрыКлиентаНаСервере = ПараметрыВыполнения.ПараметрыКлиентаНаСервере; + Если ПараметрыВыполнения.Свойство("ХранилищеСвойствРасширений") Тогда + Справочники.ИдентификаторыОбъектовМетаданных.УстановитьПараметрСеансаАдресСвойствРасширений( + ПараметрыВыполнения.УстановленныеРасширения, ПараметрыВыполнения.ХранилищеСвойствРасширений); + КонецЕсли; + ВФоне = Истина; + Иначе + ВФоне = Ложь; + КонецЕсли; + + РезультатВыполнения = Новый Структура; + РезультатВыполнения.Вставить("КраткоеСообщениеОбОшибке", Неопределено); + РезультатВыполнения.Вставить("ПодробноеСообщениеОбОшибке", Неопределено); + + ОшибкаУстановкиМонопольногоРежима = ""; + Попытка + ЗагрузитьОбновитьПараметрыРаботыПрограммы(ОшибкаУстановкиМонопольногоРежима, ВФоне); + Исключение + ИнформацияОбОшибке = ИнформацияОбОшибке(); + РезультатВыполнения.КраткоеСообщениеОбОшибке = КраткоеПредставлениеОшибки(ИнформацияОбОшибке); + РезультатВыполнения.ПодробноеСообщениеОбОшибке = ПодробноеПредставлениеОшибки(ИнформацияОбОшибке); + КонецПопытки; + + Если ИнформацияОбОшибке = Неопределено + И ЗначениеЗаполнено(ОшибкаУстановкиМонопольногоРежима) + И ОбщегоНазначения.ИнформационнаяБазаФайловая() Тогда + + ПараметрЗапускаКлиента = ПараметрыСеанса.ПараметрыКлиентаНаСервере.Получить("ПараметрЗапуска"); + Если СтрНайти(ПараметрЗапускаКлиента, "РегламентныеЗаданияОтключены") = 0 Тогда + ОшибкаУстановкиМонопольногоРежима = "ЗаблокироватьВыполнениеРегламентныхЗаданий"; + КонецЕсли; + КонецЕсли; + + РезультатВыполнения.Вставить("ОшибкаУстановкиМонопольногоРежима", ОшибкаУстановкиМонопольногоРежима); + + Если Не ЗначениеЗаполнено(РезультатВыполнения.КраткоеСообщениеОбОшибке) + И ЗначениеЗаполнено(ОшибкаУстановкиМонопольногоРежима) + И ОшибкаУстановкиМонопольногоРежима <> "ЗаблокироватьВыполнениеРегламентныхЗаданий" Тогда + + РезультатВыполнения.КраткоеСообщениеОбОшибке = ОшибкаУстановкиМонопольногоРежима; + РезультатВыполнения.ПодробноеСообщениеОбОшибке = ОшибкаУстановкиМонопольногоРежима; + КонецЕсли; + + Если ПараметрыВыполнения.Свойство("ПараметрыКлиентаНаСервере") Тогда + РезультатВыполнения.Вставить("ПараметрыКлиентаНаСервере", ПараметрыСеанса.ПараметрыКлиентаНаСервере); + КонецЕсли; + + ПоместитьВоВременноеХранилище(РезультатВыполнения, АдресХранилища); + +КонецПроцедуры + +// Только для внутреннего использования. +Процедура ЗарегистрироватьИзменениеПриоритетныхДанныхДляПодчиненныхУзловРИБ() Экспорт + + Если ОбщегоНазначения.ЭтоПодчиненныйУзелРИБ() + Или Не ОбщегоНазначенияПовтИсп.ДоступноИспользованиеРазделенныхДанных() Тогда + Возврат; + КонецЕсли; + + Если Не СтандартныеПодсистемыПовтИсп.ОтключитьИдентификаторыОбъектовМетаданных() Тогда + Справочники.ИдентификаторыОбъектовМетаданных.ЗарегистрироватьПолноеИзменениеДляПодчиненныхУзловРИБ(); + КонецЕсли; + + УзлыПлановОбменаРИБ = Новый Соответствие; + Для Каждого ПланОбмена Из Метаданные.ПланыОбмена Цикл + Если Не ПланОбмена.РаспределеннаяИнформационнаяБаза Тогда + Продолжить; + КонецЕсли; + УзлыРИБ = Новый Массив; + УзлыПлановОбменаРИБ.Вставить(ПланОбмена.Состав, УзлыРИБ); + ПланОбменаМенеджер = ОбщегоНазначения.МенеджерОбъектаПоПолномуИмени(ПланОбмена.ПолноеИмя()); + Выборка = ПланОбменаМенеджер.Выбрать(); + Пока Выборка.Следующий() Цикл + Если Выборка.Ссылка <> ПланОбменаМенеджер.ЭтотУзел() Тогда + УзлыРИБ.Добавить(Выборка.Ссылка); + КонецЕсли; + КонецЦикла; + КонецЦикла; + + Если УзлыПлановОбменаРИБ.Количество() > 0 Тогда + ЗарегистрироватьИзменениеПредопределенных(УзлыПлановОбменаРИБ, Метаданные.Справочники); + ЗарегистрироватьИзменениеПредопределенных(УзлыПлановОбменаРИБ, Метаданные.ПланыВидовХарактеристик); + ЗарегистрироватьИзменениеПредопределенных(УзлыПлановОбменаРИБ, Метаданные.ПланыСчетов); + ЗарегистрироватьИзменениеПредопределенных(УзлыПлановОбменаРИБ, Метаданные.ПланыВидовРасчета); + КонецЕсли; + +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// Процедуры для установки/получения параметров работы расширений (кэшей). + +// Возвращает хранилище значения параметра для текущей версии расширений. +// Если не заполнен, возвращает Неопределено. +// +// Параметры: +// ИмяПараметра - Строка - не более 128 символов. Например, +// "СтандартныеПодсистемы.ВариантыОтчетов.ОтчетыСНастройками". +// +// Возвращаемое значение: +// ХранилищеЗначения - если параметр заполнен для текущей версии расширений. +// Неопределено - если параметр не заполнен для текущей версии расширений. +// +Функция ПараметрРаботыРасширения(ИмяПараметра) Экспорт + + Запрос = Новый Запрос; + Запрос.УстановитьПараметр("ВерсияРасширений", ПараметрыСеанса.ВерсияРасширений); + Запрос.УстановитьПараметр("ИмяПараметра", ИмяПараметра); + Запрос.Текст = + "ВЫБРАТЬ + | ПараметрыРаботыВерсийРасширений.ХранилищеПараметра + |ИЗ + | РегистрСведений.ПараметрыРаботыВерсийРасширений КАК ПараметрыРаботыВерсийРасширений + |ГДЕ + | ПараметрыРаботыВерсийРасширений.ВерсияРасширений = &ВерсияРасширений + | И ПараметрыРаботыВерсийРасширений.ИмяПараметра = &ИмяПараметра"; + + Выборка = Запрос.Выполнить().Выбрать(); + Если Выборка.Следующий() Тогда + Возврат Выборка.ХранилищеПараметра; + КонецЕсли; + + Возврат Неопределено; + +КонецФункции + +// Устанавливает хранилище значения параметра для текущей версии расширений. +// Используется для заполнения значений параметров. +// Перед вызовом требуется установить привилегированный режим. +// +// Параметры: +// ИмяПараметра - Строка - не более 128 символов. Например, +// "СтандартныеПодсистемы.ВариантыОтчетов.ОтчетыСНастройками". +// +// Хранилище - ХранилищеЗначения - хранилище, содержащее значение параметра. +// +Процедура УстановитьПараметрРаботыРасширения(ИмяПараметра, Хранилище) Экспорт + + ВерсияРасширений = ПараметрыСеанса.ВерсияРасширений; + + НаборЗаписей = РегистрыСведений.ПараметрыРаботыВерсийРасширений.СоздатьНаборЗаписей(); + НаборЗаписей.Отбор.ВерсияРасширений.Установить(ВерсияРасширений); + НаборЗаписей.Отбор.ИмяПараметра.Установить(ИмяПараметра); + + НоваяЗапись = НаборЗаписей.Добавить(); + НоваяЗапись.ВерсияРасширений = ВерсияРасширений; + НоваяЗапись.ИмяПараметра = ИмяПараметра; + НоваяЗапись.ХранилищеПараметра = Хранилище; + + НаборЗаписей.Записать(); + +КонецПроцедуры + +// Обработчик регламентного задания УдалениеУстаревшихПараметровРаботыВерсийРасширений. +Процедура УдалениеУстаревшихПараметровРаботыВерсийРасширенийОбработчикЗадания() Экспорт + + ОбщегоНазначения.ПриНачалеВыполненияРегламентногоЗадания( + Метаданные.РегламентныеЗадания.УдалениеУстаревшихПараметровРаботыВерсийРасширений); + + Справочники.ВерсииРасширений.УдалитьУстаревшиеВерсииПараметров(); + +КонецПроцедуры + +// Вызывает принудительное заполнение всех параметров работы для текущей версии расширений. +Процедура ЗаполнитьВсеПараметрыРаботыРасширений() Экспорт + + Если УстановленныеРасширенияНедоступны() Тогда + Возврат; + КонецЕсли; + + // Заполнить идентификаторы объектов метаданных расширений. + Если ЗначениеЗаполнено(ПараметрыСеанса.УстановленныеРасширения) Тогда + СтандартныеПодсистемыПовтИсп.ИдентификаторыОбъектовМетаданныхПроверкаИспользования(Истина, Истина); + Иначе + Справочники.ИдентификаторыОбъектовРасширений.ОбновитьДанныеСправочника(); + КонецЕсли; + + ИнтеграцияСтандартныхПодсистем.ПриЗаполненииВсехПараметровРаботыРасширений(); + +КонецПроцедуры + +// Вызывает принудительную очистку всех параметров работы для текущей версии расширений. +// Очищаются только регистры, справочники не изменяются. Вызывается, чтобы вызвать +// перезаполнение параметров работы расширений, например, при использовании параметра +// запуска ЗапуститьОбновлениеИнформационнойБазы. +// +// Общий регистр ПараметрыРаботыВерсийРасширений очищается, встраиваться в +// событие ПриОчисткеВсехПараметровРаботыРасширений общего модуля ИнтеграцияСтандартныхПодсистем +// требуется только, если используются собственные регистры сведений, которых хранят версии +// кэшей объектов метаданных расширений. +// +Процедура ОчиститьВсеПараметрыРаботыРасширений() Экспорт + + Если Не ОбщегоНазначенияПовтИсп.ДоступноИспользованиеРазделенныхДанных() Тогда + Возврат; + КонецЕсли; + + УстановитьПривилегированныйРежим(Истина); + + НачатьТранзакцию(); + Попытка + НаборЗаписей = РегистрыСведений.ИдентификаторыОбъектовВерсийРасширений.СоздатьНаборЗаписей(); + НаборЗаписей.Отбор.ВерсияРасширений.Установить(ПараметрыСеанса.ВерсияРасширений); + НаборЗаписей.Записать(); + + НаборЗаписей = РегистрыСведений.ПараметрыРаботыВерсийРасширений.СоздатьНаборЗаписей(); + НаборЗаписей.Отбор.ВерсияРасширений.Установить(ПараметрыСеанса.ВерсияРасширений); + НаборЗаписей.Записать(); + + ИнтеграцияСтандартныхПодсистем.ПриОчисткеВсехПараметровРаботыРасширений(); + + ЗафиксироватьТранзакцию(); + Исключение + ОтменитьТранзакцию(); + ВызватьИсключение; + КонецПопытки + +КонецПроцедуры + +// Только для внутреннего использования. +Процедура ЗаполнитьВсеПараметрыРаботыРасширенийФоновоеЗадание(Параметры) Экспорт + + Справочники.ИдентификаторыОбъектовМетаданных.УстановитьПараметрСеансаАдресСвойствРасширений( + Параметры.УстановленныеРасширения, Параметры.ХранилищеСвойствРасширений); + + ЗаполнитьВсеПараметрыРаботыРасширений(); + +КонецПроцедуры + +// Возвращает контрольные суммы всех установленных расширений. +// +// Вызывается при запуске для установки параметра сеанса УстановленныеРасширения, +// который требуется для анализа наличия расширений и контроля динамического обновления, +// а также из формы установки расширений конфигурации в режиме 1С:Предприятия. +// +// Параметры: +// Расширения - Неопределено - получить контрольные суммы установленных расширений. +// - ДанныеФормыКоллекция - получить контрольные суммы из указанного списка. +// +// Возвращаемое значение: +// Строка - строки вида "<Имя расширения> (<Версия расширения>) <Контрольная сумма>" +// +Функция КонтрольныеСуммыРасширений(Расширения = Неопределено) Экспорт + + Если Расширения = Неопределено Тогда + Расширения = РасширенияКонфигурации.Получить(); + КонецЕсли; + + КонтрольныеСуммы = ""; + + Для Каждого Расширение Из Расширения Цикл + Если ТипЗнч(Расширение) = Тип("РасширениеКонфигурации") Тогда + КонтрольнаяСумма = Base64Строка(Расширение.ХешСумма); + Иначе + КонтрольнаяСумма = Расширение.КонтрольнаяСумма; + КонецЕсли; + КонтрольныеСуммы = КонтрольныеСуммы + Символы.ПС + + Расширение.Имя + " (" + Расширение.Версия + ") " + КонтрольнаяСумма; + КонецЦикла; + + Возврат СокрЛ(КонтрольныеСуммы); + +КонецФункции + +// Только для внутреннего использования. +Функция РасширенияИзмененыДинамически() Экспорт + + Если УстановленныеРасширенияНедоступны() Тогда + Возврат Ложь; + КонецЕсли; + + УстановитьПривилегированныйРежим(Истина); + + Возврат ПараметрыСеанса.УстановленныеРасширения <> КонтрольныеСуммыРасширений(); + +КонецФункции + +// Расширения подключаются только в разделенном режиме, когда +// вход в область данных выполнен под разделенным пользователем, +// поэтому обновление кэшей недопустимо выполнять только в этом случае. +// +Функция УстановленныеРасширенияНедоступны() Экспорт + + Возврат ОбщегоНазначенияПовтИсп.РазделениеВключено() + И ОбщегоНазначенияПовтИсп.СеансЗапущенБезРазделителей(); + +КонецФункции + //////////////////////////////////////////////////////////////////////////////// // Дополнительная базовая функциональность для обмена данными. @@ -1352,7 +1754,7 @@ ОписаниеИсключения1 = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'В состав плана обмена %1 должны входить следующие объекты метаданных: %2'"), ИмяПланаОбмена, - СтроковыеФункцииКлиентСервер.СтрокаИзМассиваПодстрок(ПредставлениеОбъектовМетаданных(ВключитьВСостав), ", ")); + СтрСоединить(ПредставлениеОбъектовМетаданных(ВключитьВСостав), ", ")); КонецЕсли; @@ -1361,7 +1763,7 @@ ОписаниеИсключения2 = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'В состав плана обмена %1 НЕ должны входить следующие объекты метаданных: %2'"), ИмяПланаОбмена, - СтроковыеФункцииКлиентСервер.СтрокаИзМассиваПодстрок(ПредставлениеОбъектовМетаданных(ИсключитьИзСостава), ", ")); + СтрСоединить(ПредставлениеОбъектовМетаданных(ИсключитьИзСостава), ", ")); КонецЕсли; @@ -1369,9 +1771,9 @@ ОписаниеИсключения3 = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'В составе плана обмена %1 не должно быть объектов с установленным признаком авторегистрации. - |Требуется запретить авторегистрацию для следующих объектов метаданных: %2'"), + |Требуется запретить авторегистрацию для следующих объектов метаданных: %2'"), ИмяПланаОбмена, - СтроковыеФункцииКлиентСервер.СтрокаИзМассиваПодстрок(ПредставлениеОбъектовМетаданных(ОтключитьАвторегистрацию), ", ")); + СтрСоединить(ПредставлениеОбъектовМетаданных(ОтключитьАвторегистрацию), ", ")); КонецЕсли; @@ -1402,8 +1804,7 @@ // Функция ЭтоОбъектНачальногоОбразаУзлаРИБ(Знач Объект) Экспорт - Возврат СтандартныеПодсистемыПовтИсп.ОбъектыНачальногоОбраза( - ).Получить(Объект.ПолноеИмя()) <> Неопределено; + Возврат СтандартныеПодсистемыПовтИсп.ОбъектыНачальногоОбраза().Получить(Объект.ПолноеИмя()) <> Неопределено; КонецФункции @@ -1432,15 +1833,13 @@ КонецЕсли; Если Не ОбщегоНазначенияПовтИсп.ЭтоРазделенныйОбъектМетаданных("ПланОбмена." + ИмяПланаОбмена, - ОбщегоНазначенияПовтИсп.РазделительОсновныхДанных()) - Тогда - ВызватьИсключение НСтр("ru = 'Регистрация изменений для неразделенных планов обмена не поддерживается.'"); + ОбщегоНазначенияПовтИсп.РазделительОсновныхДанных()) Тогда + ВызватьИсключение НСтр("ru = 'Регистрация изменений для неразделенных планов обмена не поддерживается.'"); КонецЕсли; Если ОбщегоНазначенияПовтИсп.ЭтоРазделенныйОбъектМетаданных(Объект.Метаданные().ПолноеИмя(), - ОбщегоНазначенияПовтИсп.РазделительОсновныхДанных()) - Тогда - ВызватьИсключение НСтр("ru = 'Регистрация изменений для разделенных объектов не поддерживается.'"); + ОбщегоНазначенияПовтИсп.РазделительОсновныхДанных()) Тогда + ВызватьИсключение НСтр("ru = 'Регистрация изменений для разделенных объектов не поддерживается.'"); КонецЕсли; ТекстЗапроса = @@ -1503,6 +1902,25 @@ КонецПроцедуры +// Проверят, что выполнение происходит на учебной платформе, +// на которой, например, недоступно получение свойства ПользовательОС. +// +Функция ЭтоУчебнаяПлатформа() Экспорт + + УстановитьПривилегированныйРежим(Истина); + + ТекущийПользователь = ПользователиИнформационнойБазы.ТекущийПользователь(); + + Попытка + ПользовательОС = ТекущийПользователь.ПользовательОС; + Исключение + ТекущийПользователь = Неопределено; + КонецПопытки; + + Возврат ТекущийПользователь = Неопределено; + +КонецФункции + //////////////////////////////////////////////////////////////////////////////// // Обработчики отправки и получения данных для обмена в распределенной ИБ. @@ -1514,6 +1932,12 @@ // Процедура ПриОтправкеДанныхПодчиненному(ЭлементДанных, ОтправкаЭлемента, Знач СозданиеНачальногоОбраза, Знач Получатель = Неопределено) Экспорт + ПодсистемаОбменДаннымиСуществует = ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ОбменДанными"); + Если ПодсистемаОбменДаннымиСуществует Тогда + МодульОбменДаннымиСервер = ОбщегоНазначения.ОбщийМодуль("ОбменДаннымиСервер"); + МодульОбменДаннымиСервер.РассчитатьПроцентВыгрузкиРИБ(Получатель, СозданиеНачальногоОбраза); + КонецЕсли; + ИгнорироватьОтправкуОбъектовНачальногоОбраза(ЭлементДанных, ОтправкаЭлемента, СозданиеНачальногоОбраза); Если ОтправкаЭлемента = ОтправкаЭлементаДанных.Игнорировать Тогда @@ -1528,7 +1952,7 @@ КонецЕсли; // Вставка кода от подсистемы обмена данными должна быть первой. - Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ОбменДанными") Тогда + Если ПодсистемаОбменДаннымиСуществует Тогда МодульОбменДаннымиСобытия = ОбщегоНазначения.ОбщийМодуль("ОбменДаннымиСобытия"); МодульОбменДаннымиСобытия.ПриОтправкеДанныхКорреспонденту(ЭлементДанных, ОтправкаЭлемента, СозданиеНачальногоОбраза, Получатель, Ложь); @@ -1568,6 +1992,11 @@ // Процедура ПриОтправкеДанныхГлавному(ЭлементДанных, ОтправкаЭлемента, Знач Получатель = Неопределено) Экспорт + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ОбменДанными") Тогда + МодульОбменДаннымиСервер = ОбщегоНазначения.ОбщийМодуль("ОбменДаннымиСервер"); + МодульОбменДаннымиСервер.РассчитатьПроцентВыгрузкиРИБ(Получатель, Ложь); + КонецЕсли; + ИгнорироватьОтправкуОбъектовНачальногоОбраза(ЭлементДанных, ОтправкаЭлемента); Если ОтправкаЭлемента = ОтправкаЭлементаДанных.Игнорировать Тогда @@ -1605,6 +2034,12 @@ // Процедура ПриПолученииДанныхОтПодчиненного(ЭлементДанных, ПолучениеЭлемента, ОтправкаНазад, Знач Отправитель = Неопределено) Экспорт + ПодсистемаОбменДаннымиСуществует = ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ОбменДанными"); + Если ПодсистемаОбменДаннымиСуществует Тогда + МодульОбменДаннымиСервер = ОбщегоНазначения.ОбщийМодуль("ОбменДаннымиСервер"); + МодульОбменДаннымиСервер.РассчитатьПроцентЗагрузкиРИБ(Отправитель); + КонецЕсли; + ПроверитьПолучениеОбъектовНачальногоОбраза(ЭлементДанных, ПолучениеЭлемента, Отправитель); Если ПолучениеЭлемента = ПолучениеЭлементаДанных.Игнорировать Тогда @@ -1623,7 +2058,7 @@ КонецЦикла; // Вставка кода от подсистемы обмена данными должна быть последней. - Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ОбменДанными") Тогда + Если ПодсистемаОбменДаннымиСуществует Тогда МодульОбменДаннымиСобытия = ОбщегоНазначения.ОбщийМодуль("ОбменДаннымиСобытия"); МодульОбменДаннымиСобытия.ПриПолученииДанныхОтПодчиненногоВКонце(ЭлементДанных, ПолучениеЭлемента, Отправитель); КонецЕсли; @@ -1638,6 +2073,12 @@ // Процедура ПриПолученииДанныхОтГлавного(ЭлементДанных, ПолучениеЭлемента, ОтправкаНазад, Знач Отправитель = Неопределено) Экспорт + ПодсистемаОбменДаннымиСуществует = ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ОбменДанными"); + Если ПодсистемаОбменДаннымиСуществует Тогда + МодульОбменДаннымиСервер = ОбщегоНазначения.ОбщийМодуль("ОбменДаннымиСервер"); + МодульОбменДаннымиСервер.РассчитатьПроцентЗагрузкиРИБ(Отправитель); + КонецЕсли; + ПроверитьПолучениеОбъектовНачальногоОбраза(ЭлементДанных, ПолучениеЭлемента, Отправитель); Если ПолучениеЭлемента = ПолучениеЭлементаДанных.Игнорировать Тогда @@ -1645,7 +2086,7 @@ КонецЕсли; // Вставка кода от подсистемы обмена данными должна быть первой. - Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ОбменДанными") Тогда + Если ПодсистемаОбменДаннымиСуществует Тогда МодульОбменДаннымиСобытия = ОбщегоНазначения.ОбщийМодуль("ОбменДаннымиСобытия"); МодульОбменДаннымиСобытия.ПриПолученииДанныхОтГлавногоВНачале(ЭлементДанных, ПолучениеЭлемента, ОтправкаНазад, Отправитель); @@ -1667,7 +2108,7 @@ КонецЦикла; // Вставка кода от подсистемы обмена данными должна быть последней. - Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ОбменДанными") + Если ПодсистемаОбменДаннымиСуществует И Не СозданиеНачальногоОбраза(ЭлементДанных) Тогда МодульОбменДаннымиСобытия = ОбщегоНазначения.ОбщийМодуль("ОбменДаннымиСобытия"); @@ -1701,7 +2142,7 @@ // Параметры: // Параметры - Структура - структура параметров. // -Процедура ПриДобавленииПараметровРаботыКлиентскойЛогикиСтандартныхПодсистем(Параметры) Экспорт +Процедура ПриДобавленииПараметровРаботыКлиента(Параметры) Экспорт ДобавитьПараметрыРаботыКлиента(Параметры); @@ -1732,9 +2173,7 @@ Процедура ПриПолученииОбязательныхОбъектовПланаОбмена(Объекты, Знач РаспределеннаяИнформационнаяБаза) Экспорт Если РаспределеннаяИнформационнаяБаза Тогда - Объекты.Добавить(Метаданные.Справочники.ИдентификаторыОбъектовМетаданных); - КонецЕсли; КонецПроцедуры @@ -1751,16 +2190,18 @@ // Процедура ПриПолученииОбъектовИсключенийПланаОбмена(Объекты, Знач РаспределеннаяИнформационнаяБаза) Экспорт - Если РаспределеннаяИнформационнаяБаза Тогда - - Объекты.Добавить(Метаданные.Константы.ЗаголовокСистемы); - Объекты.Добавить(Метаданные.Константы.ИспользоватьРазделениеПоОбластямДанных); - Объекты.Добавить(Метаданные.Константы.НеИспользоватьРазделениеПоОбластямДанных); - Объекты.Добавить(Метаданные.Константы.ЭтоАвтономноеРабочееМесто); - - Объекты.Добавить(Метаданные.РегистрыСведений.КэшПрограммныхИнтерфейсов); - - КонецЕсли; + Объекты.Добавить(Метаданные.Константы.ЗаголовокСистемы); + Объекты.Добавить(Метаданные.Константы.ИспользоватьРазделениеПоОбластямДанных); + Объекты.Добавить(Метаданные.Константы.НеИспользоватьРазделениеПоОбластямДанных); + Объекты.Добавить(Метаданные.Константы.ЭтоАвтономноеРабочееМесто); + + Объекты.Добавить(Метаданные.Справочники.ВерсииРасширений); + Объекты.Добавить(Метаданные.Справочники.ИдентификаторыОбъектовРасширений); + + Объекты.Добавить(Метаданные.РегистрыСведений.ИдентификаторыОбъектовВерсийРасширений); + Объекты.Добавить(Метаданные.РегистрыСведений.КэшПрограммныхИнтерфейсов); + Объекты.Добавить(Метаданные.РегистрыСведений.ПараметрыРаботыВерсийРасширений); + Объекты.Добавить(Метаданные.РегистрыСведений.СеансыВерсийРасширений); КонецПроцедуры @@ -1800,6 +2241,42 @@ ЗапросыРазрешений.Добавить( РаботаВБезопасномРежиме.ЗапросНаИспользованиеВнешнихРесурсов(Разрешения)); + ДобавитьЗапросРазрешенийНаИспользованиеРасширений(ЗапросыРазрешений); + +КонецПроцедуры + +// Заполняет список текущих дел пользователя. +// +// Параметры: +// ТекущиеДела - ТаблицаЗначений - таблица значений с колонками: +// * Идентификатор - Строка - внутренний идентификатор дела, используемый механизмом "Текущие дела". +// * ЕстьДела - Булево - если Истина, дело выводится в списке текущих дел пользователя. +// * Важное - Булево - если Истина, дело будет выделено красным цветом. +// * Представление - Строка - представление дела, выводимое пользователю. +// * Количество - Число - количественный показатель дела, выводится в строке заголовка дела. +// * Форма - Строка - полный путь к форме, которую необходимо открыть при нажатии на гиперссылку +// дела на панели "Текущие дела". +// * ПараметрыФормы- Структура - параметры, с которыми нужно открывать форму показателя. +// * Владелец - Строка, объект метаданных - строковый идентификатор дела, которое будет владельцем для текущего +// или объект метаданных подсистема. +// * Подсказка - Строка - текст подсказки. +// +Процедура ПриЗаполненииСпискаТекущихДел(ТекущиеДела) Экспорт + + МодульТекущиеДелаСервер = ОбщегоНазначения.ОбщийМодуль("ТекущиеДелаСервер"); + Если МодульТекущиеДелаСервер.ДелоОтключено("РекомендацияПоПовышениюСкоростиРаботы") Тогда + Возврат; + КонецЕсли; + + Идентификатор = "РекомендацияПоПовышениюСкоростиРаботы"; + Дело = ТекущиеДела.Добавить(); + Дело.Идентификатор = Идентификатор; + Дело.ЕстьДела = ТребуетсяПоказРекомендацииПоОбъемуОперативнойПамяти(); + Дело.Важное = Истина; + Дело.Представление = НСтр("ru = 'Скорость работы снижена'"); + Дело.Форма = "Обработка.РекомендацияПоПовышениюСкоростиРаботы.Форма.Форма"; + Дело.Владелец = НСтр("ru = 'Скорость работы программы'"); + КонецПроцедуры //////////////////////////////////////////////////////////////////////////////// @@ -1874,6 +2351,14 @@ КонецФункции +// Выполняет проверку, что переданный объект имеет тип СправочникОбъект.ИдентификаторыОбъектовМетаданных +// +Функция ЭтоИдентификаторОбъектаМетаданных(Объект) Экспорт + + Возврат ТипЗнч(Объект) = Тип("СправочникОбъект.ИдентификаторыОбъектовМетаданных"); + +КонецФункции + //////////////////////////////////////////////////////////////////////////////// // Процедуры и функции работы с формами. @@ -1889,11 +2374,11 @@ ЖирныйШрифт = Новый Шрифт(,, Истина); Если НЕ ЗначениеЗаполнено(ИменаГрупп) Тогда Для Каждого Элемент Из Форма.Элементы Цикл - Если Тип(Элемент) = Тип("ГруппаФормы") И - Элемент.Вид = ВидГруппыФормы.ОбычнаяГруппа И - Элемент.ОтображатьЗаголовок = Истина И ( - Элемент.Отображение = ОтображениеОбычнойГруппы.ОбычноеВыделение ИЛИ - Элемент.Отображение = ОтображениеОбычнойГруппы.Нет ) Тогда + Если Тип(Элемент) = Тип("ГруппаФормы") + И Элемент.Вид = ВидГруппыФормы.ОбычнаяГруппа + И Элемент.ОтображатьЗаголовок = Истина + И (Элемент.Отображение = ОтображениеОбычнойГруппы.ОбычноеВыделение + Или Элемент.Отображение = ОтображениеОбычнойГруппы.Нет) Тогда Элемент.ШрифтЗаголовка = ЖирныйШрифт; КонецЕсли; КонецЦикла; @@ -1917,11 +2402,12 @@ // Параметры: // Форма - УправляемаяФорма - форма ПриСозданииНаСервере, которой устанавливается ключ. // Ключ - Строка - новый ключ назначения формы. +// УстановитьНастройки - Булево - установить новому ключу настройки, сохраненные для текущего ключа. // -Процедура УстановитьКлючНазначенияФормы(Форма, Ключ, КлючПоложения = "") Экспорт +Процедура УстановитьКлючНазначенияФормы(Форма, Ключ, КлючПоложения = "", УстановитьНастройки = Истина) Экспорт - УстановитьКлючНазначенияИспользованияФормы(Форма, Ключ); - УстановитьКлючСохраненияПоложенияОкнаФормы(Форма, ?(КлючПоложения = "", Ключ, КлючПоложения)); + УстановитьКлючНазначенияИспользованияФормы(Форма, Ключ, УстановитьНастройки); + УстановитьКлючСохраненияПоложенияОкнаФормы(Форма, ?(КлючПоложения = "", Ключ, КлючПоложения), УстановитьНастройки); КонецПроцедуры @@ -1955,7 +2441,7 @@ Попытка УдалитьФайлы(ПутьККаталогу); Исключение - ЗаписьЖурналаРегистрации( + ЗаписьЖурналаРегистрации( НСтр("ru = 'Стандартные подсистемы'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), УровеньЖурналаРегистрации.Ошибка, , @@ -1970,25 +2456,45 @@ //////////////////////////////////////////////////////////////////////////////// // Прочие процедуры и функции. +// Устанавливает использование предопределенного регламентного задания. +// +// Параметры: +// ЗаданиеМетаданные - ОбъектМетаданных - метаданные предопределенного регламентного задания. +// Использование - Булево - Истина, если задание нужно включить, иначе Ложь. +// +Процедура УстановитьИспользованиеПредопределенногоРегламентногоЗадания(ЗаданиеМетаданные, Использование) Экспорт + + Если ОбщегоНазначенияПовтИсп.РазделениеВключено() Тогда + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаВМоделиСервиса.БазоваяФункциональность") Тогда + МодульРаботаВМоделиСервиса = ОбщегоНазначения.ОбщийМодуль("УправлениеДоступомСлужебныйВМоделиСервиса"); + МодульРаботаВМоделиСервиса.УстановитьИспользованиеПредопределенногоРегламентногоЗадания(ЗаданиеМетаданные, Использование); + КонецЕсли; + Иначе + Задание = РегламентныеЗадания.НайтиПредопределенное(ЗаданиеМетаданные); + + Если Задание.Использование <> Использование Тогда + Задание.Использование = Использование; + Задание.Записать(); + КонецЕсли; + КонецЕсли; + +КонецПроцедуры + // Возвращает уточнения при возникновении проблем с параметрами работы программы. Функция УточнениеОшибкиПараметровРаботыПрограммыДляРазработчика() Экспорт - Возврат Символы.ПС + Символы.ПС + - НСтр("ru = 'Для разработчика: возможно требуется обновить вспомогательные данные, - |которые влияют на работу программы. Для выполнения обновления можно: - |- воспользоваться внешней обработкой - | ""Инструменты разработчика: Обновление вспомогательных данных"", - |- либо запустить программу с параметром командной строки 1С:Предприятия 8 - | ""/С ЗапуститьОбновлениеИнформационнойБазы"", - |- либо увеличить номер версии конфигурации, чтобы при очередном запуске - | выполнились процедуры обновления данных информационной базы.'"); + Возврат Символы.ПС + Символы.ПС + + НСтр("ru = 'Для разработчика: возможно требуется обновить вспомогательные данные, + |которые влияют на работу программы. Для выполнения обновления можно: + |- воспользоваться внешней обработкой + | ""Инструменты разработчика: Обновление вспомогательных данных"", + |- либо запустить программу с параметром командной строки 1С:Предприятия 8 + | ""/С ЗапуститьОбновлениеИнформационнойБазы"", + |- либо увеличить номер версии конфигурации, чтобы при очередном запуске + | выполнились процедуры обновления данных информационной базы.'"); КонецФункции -#КонецОбласти - -#Область СлужебныеПроцедурыИФункции - // Возвращает номер версии Библиотеки стандартных подсистем. // Функция ВерсияБиблиотеки() Экспорт @@ -1997,6 +2503,211 @@ КонецФункции +// Возвращает текущего пользователя информационной базы +// +Функция ТекущийПользователь() Экспорт + + // Вычисляем актуальное имя пользователя, даже если оно было ранее изменено в текущем сеансе; + // Например, для подключения к текущей ИБ через внешнее соединение из этого сеанса; + // Во всех остальных случаях достаточно получить ПользователиИнформационнойБазы.ТекущийПользователь(). + ТекущийПользователь = ПользователиИнформационнойБазы.НайтиПоУникальномуИдентификатору( + ПользователиИнформационнойБазы.ТекущийПользователь().УникальныйИдентификатор); + + Если ТекущийПользователь = Неопределено Тогда + ТекущийПользователь = ПользователиИнформационнойБазы.ТекущийПользователь(); + КонецЕсли; + + Возврат ТекущийПользователь; + +КонецФункции + +//////////////////////////////////////////////////////////////////////////////// +// Условное оформление управляемой формы. + +// Формирует структуру, описывающую элемент условного оформления. +// Используется перед вызовом ДобавитьЭлементУсловногоОформления(). +// +// Возвращаемое значение: +// Структура - Шаблон, описывающий элемент условного оформления. +// Подробнее см. значение 2го параметра функции ДобавитьЭлементУсловногоОформления(). +// +Функция ИнструкцияУсловногоОформления() Экспорт + Возврат Новый Структура("Отборы, Оформление, Поля", Новый Соответствие, Новый Соответствие, ""); +КонецФункции + +// Добавляет элемент условного оформления в форму согласно его описанию в параметре Инструкция. +// +// Параметры: +// Форма - УправляемаяФорма - Форма, в которую необходимо добавить условное оформление. +// Инструкция - Структура - Описание элемента условного оформления. +// * Поля - Строка - Имена элементов формы, разделенные запятыми, для которых применяется оформление. +// Например: "Поле1, Поле2". +// * Отборы - Соответствие - Фильтр для применения этого оформления. +// ** Ключ - Строка - Полное имя реквизита формы, по которому выполняется отбор условного оформления. +// ** Значение - Произвольный - Значение условного оформления. +// - Произвольный, кроме указанных ниже - +// Используется для условия "Равно". +// В ПравоеЗначение записывается значение Значение, +// а в ВидСравнения устанавливается ВидСравненияКомпоновкиДанных.Равно. +// - Массив - +// Используется для условия "В списке". +// В ПравоеЗначение записывается Значение (массив), +// а в ВидСравнения записывается ВидСравненияКомпоновкиДанных.ВСписке. +// - ВидСравненияКомпоновкиДанных - +// Используется для установки условия без значения (например, ВидСравненияКомпоновкиДанных.Заполнено). +// В ПравоеЗначение ничего не записывается, +// а в ВидСравнения записывается Значение. +// - Структура - Используется во всех остальных случаях. +// *** Вид - Имя ключа системного перечисления "ВидСравненияКомпоновкиДанных". +// *** Значение - Значение, которое будет записано в правое значение. +// В ПравоеЗначение записывается Структура.Значение, +// а в ВидСравнения записывается ВидСравненияКомпоновкиДанных[Структура.Вид]. +// * Оформление - Соответствие - Как оформлять указанные поля. +// ** Ключ - Строка - Имя параметра оформления компоновки данных. +// ** Значение - Произвольный - Значение параметра. +// Имена параметров и их значения см. в синтакс-помощнике: "ОформлениеКомпоновкиДанных", блок "Описание". +// +// Например: +// +// Пример № 1 - подсветка строк серым цветом (таблица называется "ВариантыОтчета"). +// Инструкция = СтандартныеПодсистемыСервер.ИнструкцияУсловногоОформления(); +// Инструкция.Поля = "ВариантыОтчета, ВариантыОтчетаНаименование"; +// Инструкция.Отборы.Вставить("ВариантыОтчета.Пользовательский", Ложь); +// Инструкция.Оформление.Вставить("ЦветТекста", ЦветаСтиля.ТекстЗапрещеннойЯчейкиЦвет); +// СтандартныеПодсистемыСервер.ДобавитьЭлементУсловногоОформления(ЭтотОбъект, Инструкция); +// +// Пример № 2 - скрытие строк дерева (таблица называется "ДеревоВариантовОтчета"). +// Инструкция = СтандартныеПодсистемыСервер.ИнструкцияУсловногоОформления(); +// Инструкция.Поля = "ДеревоВариантовОтчета, ДеревоВариантовОтчетаПредставление, ДеревоВариантовОтчетаАвтор"; +// Инструкция.Отборы.Вставить("ДеревоВариантовОтчета.СкрытОтбором", Истина); +// Инструкция.Оформление.Вставить("Видимость", Ложь); +// Инструкция.Оформление.Вставить("Отображать", Ложь); +// СтандартныеПодсистемыСервер.ДобавитьЭлементУсловногоОформления(ЭтотОбъект, Инструкция); +// +// Пример № 3 - недоступность полей. +// Инструкция = СтандартныеПодсистемыСервер.ИнструкцияУсловногоОформления(); +// Инструкция.Отборы.Вставить("Отборы.ЭтоРаздел", Истина); +// Инструкция.Поля = "ОтборыУсловие, ОтборыЗначение, ОтборыПредставлениеЗначения, ОтборыИндексКартинкиДоступа, ОтборыЗаголовок"; +// Инструкция.Оформление.Вставить("ТолькоПросмотр", Истина); +// СтандартныеПодсистемыСервер.ДобавитьЭлементУсловногоОформления(ЭтотОбъект, Инструкция); +// +// Возвращаемое значение: +// ЭлементУсловногоОформленияКомпоновкиДанных - Добавленный элемент. +// +Функция ДобавитьЭлементУсловногоОформления(Форма, Инструкция) Экспорт + ЭлементУсловногоОформленияКД = Форма.УсловноеОформление.Элементы.Добавить(); + ЭлементУсловногоОформленияКД.Использование = Истина; + + ДополнитьОтборыИзСтруктуры(ЭлементУсловногоОформленияКД.Отбор, Инструкция.Отборы); + + Для Каждого КлючИЗначение Из Инструкция.Оформление Цикл + ЭлементУсловногоОформленияКД.Оформление.УстановитьЗначениеПараметра( + Новый ПараметрКомпоновкиДанных(КлючИЗначение.Ключ), + КлючИЗначение.Значение); + КонецЦикла; + + РежимОтладки = ОбщегоНазначенияКлиентСервер.РежимОтладки(); + + Поля = Инструкция.Поля; + Если ТипЗнч(Поля) = Тип("Строка") Тогда + Поля = СтрРазделить(Поля, ",", Ложь); + КонецЕсли; + Для Каждого Поле Из Поля Цикл + ИмяЭлемента = СокрЛП(Поле); + ПолеКД = ЭлементУсловногоОформленияКД.Поля.Элементы.Добавить(); + ПолеКД.Использование = Истина; + ПолеКД.Поле = Новый ПолеКомпоновкиДанных(ИмяЭлемента); + Если РежимОтладки И Форма.Элементы.Найти(ИмяЭлемента) = Неопределено Тогда + Шаблон = НСтр("ru = 'Ошибка добавления условного оформления: Не найден элемент ""%1"".'"); + Сообщение = Новый СообщениеПользователю; + Сообщение.Текст = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(Шаблон, ИмяЭлемента); + Сообщение.ИдентификаторНазначения = Форма.УникальныйИдентификатор; + Сообщение.Сообщить(); + КонецЕсли; + КонецЦикла; + + Возврат ЭлементУсловногоОформленияКД; +КонецФункции + +//////////////////////////////////////////////////////////////////////////////// +// Процедуры и функции работы со статистикой использования конфигурации + +// Собирает статистику использования конфигурации +// +Процедура СобратьСтатистикуКонфигурации() Экспорт + + Если Не ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ЦентрМониторинга") Тогда + Возврат; + КонецЕсли; + + ОбновлениеИнформационнойБазыСлужебный.СобратьСтатистикуКонфигурации(); + ПользователиСлужебный.СобратьСтатистикуКонфигурации(); + + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ВерсионированиеОбъектов") Тогда + МодульВерсионированиеОбъектов = ОбщегоНазначения.ОбщийМодуль("ВерсионированиеОбъектов"); + МодульВерсионированиеОбъектов.СобратьСтатистикуКонфигурации(); + КонецЕсли; + + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ВариантыОтчетов") Тогда + МодульВариантыОтчетов = ОбщегоНазначения.ОбщийМодуль("ВариантыОтчетов"); + МодульВариантыОтчетов.СобратьСтатистикуКонфигурации(); + КонецЕсли; + + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ДатыЗапретаИзменения") Тогда + МодульДатыЗапретаИзмененияСлужебный = ОбщегоНазначения.ОбщийМодуль("ДатыЗапретаИзмененияСлужебный"); + МодульДатыЗапретаИзмененияСлужебный.СобратьСтатистикуКонфигурации(); + КонецЕсли; + + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаСКонтрагентами") Тогда + МодульПроверкаКонтрагентов = ОбщегоНазначения.ОбщийМодуль("ПроверкаКонтрагентов"); + МодульПроверкаКонтрагентов.СобратьСтатистикуКонфигурации(); + КонецЕсли; + +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// Отборы. + +// Устанавливает отборы по расширенной информации из структуры. +Процедура ДополнитьОтборыИзСтруктуры(Отбор, Структура, РежимОтображения = Неопределено) Экспорт + Если РежимОтображения = Неопределено Тогда + РежимОтображения = РежимОтображенияЭлементаНастройкиКомпоновкиДанных.Недоступный; + КонецЕсли; + Для Каждого КлючИЗначение Из Структура Цикл + ИмяПоля = КлючИЗначение.Ключ; + ОтборПоля = КлючИЗначение.Значение; + Тип = ТипЗнч(ОтборПоля); + Если Тип = Тип("Структура") Тогда + Условие = ВидСравненияКомпоновкиДанных[ОтборПоля.Вид]; + Значение = ОтборПоля.Значение; + ИначеЕсли Тип = Тип("Массив") Тогда + Условие = ВидСравненияКомпоновкиДанных.ВСписке; + Значение = ОтборПоля; + ИначеЕсли Тип = Тип("СписокЗначений") Тогда + Условие = ВидСравненияКомпоновкиДанных.ВСписке; + Значение = ОтборПоля.ВыгрузитьЗначения(); + ИначеЕсли Тип = Тип("ВидСравненияКомпоновкиДанных") Тогда + Условие = ОтборПоля; + Значение = Неопределено; + Иначе + Условие = ВидСравненияКомпоновкиДанных.Равно; + Значение = ОтборПоля; + КонецЕсли; + ОбщегоНазначенияКлиентСервер.УстановитьЭлементОтбора( + Отбор, + ИмяПоля, + Значение, + Условие, + , + Истина, + РежимОтображения); + КонецЦикла; +КонецПроцедуры + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + // Заполняет структуру параметров, необходимых для работы клиентского кода // данной подсистемы при запуске конфигурации, т.е. в обработчиках событий. // - ПередНачаломРаботыСистемы, @@ -2024,6 +2735,11 @@ Параметры.Вставить("ЕстьДоступДляОбновленияВерсииПлатформы", Пользователи.ЭтоПолноправныйПользователь(,Истина)); Параметры.Вставить("ИменаПодсистем", СтандартныеПодсистемыПовтИсп.ИменаПодсистем()); + Параметры.Вставить("ЭтоБазоваяВерсияКонфигурации", ЭтоБазоваяВерсияКонфигурации()); + Параметры.Вставить("ЭтоУчебнаяПлатформа", ЭтоУчебнаяПлатформа()); + Параметры.Вставить("ИмяТекущегоПользователя", ТекущийПользователь().Имя); + Параметры.Вставить("ИмяCOMСоединителя", ОбщегоНазначенияКлиентСервер.ИмяCOMСоединителя()); + Параметры.Вставить("КодОсновногоЯзыка", Метаданные.ОсновнойЯзык.КодЯзыка); ОбщиеПараметры = ОбщегоНазначения.ОбщиеПараметрыБазовойФункциональности(); Параметры.Вставить("МинимальноНеобходимаяВерсияПлатформы", ОбщиеПараметры.МинимальноНеобходимаяВерсияПлатформы); @@ -2032,22 +2748,15 @@ Параметры.Вставить("РекомендуемыйОбъемОперативнойПамяти", ОбщиеПараметры.РекомендуемыйОбъемОперативнойПамяти); Параметры.Вставить("ТребуетсяПоказРекомендацииПоОбъемуОперативнойПамяти", ТребуетсяПоказРекомендацииПоОбъемуОперативнойПамяти() И Не ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ТекущиеДела")); - - Если Параметры.ПолученныеПараметрыКлиента <> Неопределено - И Параметры.ПолученныеПараметрыКлиента.Количество() = 0 Тогда - - УстановитьПривилегированныйРежим(Истина); - ПараметрЗапускаКлиента = ПараметрыСеанса.ПараметрыКлиентаНаСервере.Получить("ПараметрЗапуска"); - Если Найти(НРег(ПараметрЗапускаКлиента), НРег("ЗапуститьОбновлениеИнформационнойБазы")) > 0 Тогда - УстановитьЗапускОбновленияИнформационнойБазы(Истина); - КонецЕсли; - УстановитьПривилегированныйРежим(Ложь); - КонецЕсли; Если Параметры.ПолученныеПараметрыКлиента <> Неопределено Тогда Параметры.Вставить("ОпцииИнтерфейса", ОбщегоНазначенияПовтИсп.ОпцииИнтерфейса()); КонецЕсли; + Если Не ОбновлениеИнформационнойБазыСлужебный.ДобавитьПараметрыРаботыКлиентаПриЗапуске(Параметры) Тогда + Возврат Ложь; + КонецЕсли; + Если Параметры.ПолученныеПараметрыКлиента <> Неопределено И Не Параметры.ПолученныеПараметрыКлиента.Свойство("ПоказатьНерекомендуемуюВерсиюПлатформы") И ПоказатьНерекомендуемуюВерсиюПлатформы(Параметры) Тогда @@ -2057,14 +2766,6 @@ Возврат Ложь; КонецЕсли; - // Проверка продолжения работы. - ОписаниеОшибки = ОбновлениеИнформационнойБазыСлужебный.ИнформационнаяБазаЗаблокированаДляОбновления(); - Если ЗначениеЗаполнено(ОписаниеОшибки) Тогда - Параметры.Вставить("ИнформационнаяБазаЗаблокированаДляОбновления", ОписаниеОшибки); - // Работа будет завершена. - Возврат Ложь; - КонецЕсли; - УстановитьПривилегированныйРежим(Истина); Если Параметры.ПолученныеПараметрыКлиента <> Неопределено И Не Параметры.ПолученныеПараметрыКлиента.Свойство("ВосстановитьСвязьСГлавнымУзлом") @@ -2073,7 +2774,7 @@ И ЗначениеЗаполнено(Константы.ГлавныйУзел.Получить()) Тогда УстановитьПривилегированныйРежим(Ложь); - Параметры.Вставить("ВосстановитьСвязьСГлавнымУзлом", Пользователи.ЭтоПолноправныйПользователь()); + Параметры.Вставить("ВосстановитьСвязьСГлавнымУзлом", Пользователи.ЭтоПолноправныйПользователь(, Истина, Ложь)); СтандартныеПодсистемыВызовСервера.СкрытьРабочийСтолПриНачалеРаботыСистемы(); Возврат Ложь; КонецЕсли; @@ -2093,10 +2794,14 @@ КонецЕсли; КонецЕсли; - Если ОбновлениеИнформационнойБазыСлужебный.ТребуетсяПроверитьЛегальностьПолученияОбновления() Тогда - Параметры.Вставить("ПроверитьЛегальностьПолученияОбновления"); + Если Не Параметры.РазделениеВключено + И ОбновлениеИнформационнойБазы.НеобходимоОбновлениеИнформационнойБазы() + И ОбновлениеИнформационнойБазыСлужебный.СтатусНевыполненныхОбработчиков(Истина) = "СтатусНеВыполнено" Тогда + Параметры.Вставить("НеобходимоВыполнитьОбработчикиОтложенногоОбновления"); КонецЕсли; + РаботаВБезопасномРежимеСлужебный.ПриДобавленииПараметровРаботыКлиентаПриЗапуске(Параметры, Истина); + Если Параметры.ПолученныеПараметрыКлиента <> Неопределено И НЕ Параметры.ПолученныеПараметрыКлиента.Свойство("ПовторитьЗагрузкуСообщенияОбменаДаннымиПередЗапуском") И ОбщегоНазначения.ЭтоПодчиненныйУзелРИБ() @@ -2136,8 +2841,7 @@ КонецЕсли; // Обязательные параметры для всех режимов работы. - Параметры.Вставить("ОбработчикиКлиентскихСобытий", СтандартныеПодсистемыПовтИсп.ПараметрыПрограммныхСобытий( - ).ОбработчикиСобытий.НаКлиенте); + Параметры.Вставить("ОбработчикиКлиентскихСобытий", СтандартныеПодсистемыПовтИсп.ПараметрыПрограммныхСобытий().ОбработчикиСобытий.НаКлиенте); Параметры.Вставить("ПодробнаяИнформация", Метаданные.ПодробнаяИнформация); @@ -2147,7 +2851,7 @@ Параметры.Вставить("ОпцииИнтерфейса", ОбщегоНазначенияПовтИсп.ОпцииИнтерфейса()); - РаботаВБезопасномРежимеСлужебный.ДобавитьПараметрыРаботыКлиентаПриЗапуске(Параметры); + РаботаВБезопасномРежимеСлужебный.ПриДобавленииПараметровРаботыКлиентаПриЗапуске(Параметры); Если Параметры.РазделениеВключено И Не Параметры.ДоступноИспользованиеРазделенныхДанных Тогда Возврат Ложь; @@ -2177,9 +2881,11 @@ КонецЕсли; КонецЕсли; - ОшибкаАвторизации = ПользователиСлужебный.АвторизоватьТекущегоПользователя(Истина); - Если ОшибкаАвторизации <> "" Тогда - Параметры.Вставить("ОшибкаАвторизации", ОшибкаАвторизации); + Отказ = Ложь; + Если Параметры.ПолученныеПараметрыКлиента <> Неопределено Тогда + ПользователиСлужебный.ПриДобавленииПараметровРаботыКлиентаПриЗапуске(Параметры, Отказ); + КонецЕсли; + Если Отказ Тогда Возврат Ложь; КонецЕсли; @@ -2189,28 +2895,6 @@ КонецФункции -// Устанавливает состояние запуска обновления информационной. -// Требуется привилегированный режим. -// -// Параметры: -// Запуск - Булево - Если установить Истина, состояние будет установлено, -// если установить Ложь, состояние будет снято. -// -Процедура УстановитьЗапускОбновленияИнформационнойБазы(Запуск) Экспорт - - ТекущиеПараметры = Новый Соответствие(ПараметрыСеанса.ПараметрыКлиентаНаСервере); - - Если Запуск = Истина Тогда - ТекущиеПараметры.Вставить("ЗапуститьОбновлениеИнформационнойБазы", Истина); - - ИначеЕсли ТекущиеПараметры.Получить("ЗапуститьОбновлениеИнформационнойБазы") <> Неопределено Тогда - ТекущиеПараметры.Удалить("ЗапуститьОбновлениеИнформационнойБазы"); - КонецЕсли; - - ПараметрыСеанса.ПараметрыКлиентаНаСервере = Новый ФиксированноеСоответствие(ТекущиеПараметры); - -КонецПроцедуры - // Заполняет структуру параметров, необходимых для работы клиентского кода // данной подсистемы. // @@ -2225,6 +2909,9 @@ Параметры.Вставить("РазделениеВключено", ОбщегоНазначенияПовтИсп.РазделениеВключено()); Параметры.Вставить("ОпцииИнтерфейса", ОбщегоНазначенияПовтИсп.ОпцииИнтерфейса()); + Параметры.Вставить("ЭтоБазоваяВерсияКонфигурации", ЭтоБазоваяВерсияКонфигурации()); + Параметры.Вставить("ЭтоУчебнаяПлатформа", ЭтоУчебнаяПлатформа()); + Параметры.Вставить("ИмяCOMСоединителя", ОбщегоНазначенияКлиентСервер.ИмяCOMСоединителя()); ДобавитьОбщиеПараметрыРаботыКлиента(Параметры); @@ -2237,10 +2924,6 @@ Параметры.Вставить("ЗапрашиватьПодтверждениеПриЗавершенииПрограммы", ЗапрашиватьПодтверждениеПриЗавершенииПрограммы()); - // Параметры для внешних подключений пользователей. - Параметры.Вставить("ИнформацияОПользователе", ПолучитьИнформациюОПользователе()); - Параметры.Вставить("ИмяCOMСоединителя", ОбщегоНазначенияКлиентСервер.ИмяCOMСоединителя()); - ДатаСеанса = ТекущаяДатаСеанса(); ДатаСеансаУниверсальная = УниверсальноеВремя(ДатаСеанса, ЧасовойПоясСеанса()); // Записываем серверное время для последующей замены его на разницу с клиентом. @@ -2255,7 +2938,7 @@ // Параметры: // Параметры - Структура - структура параметров. // -Процедура ДобавитьОбщиеПараметрыРаботыКлиента(Параметры) +Процедура ДобавитьОбщиеПараметрыРаботыКлиента(Параметры) Если Не Параметры.РазделениеВключено Или Параметры.ДоступноИспользованиеРазделенныхДанных Тогда @@ -2273,8 +2956,6 @@ Параметры.Вставить("ТребуетсяОбновлениеКонфигурацииУзлаРИБ", ОбщегоНазначения.ТребуетсяОбновлениеКонфигурацииПодчиненногоУзлаРИБ()); - Параметры.Вставить("ЭтоБазоваяВерсияКонфигурации", ЭтоБазоваяВерсияКонфигурации()); - КонецПроцедуры // Возвращает массив поддерживаемых подсистемой ИмяПодсистемы названий номеров версий. @@ -2438,7 +3119,7 @@ ИмяСобытия = НСтр("ru = 'Обработчики событий'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()); Комментарий = НСтр("ru = 'Для следующих обязательных событий не определены обработчики:'") - + Символы.ПС + СтроковыеФункцииКлиентСервер.СтрокаИзМассиваПодстрок(ОбязательныеСобытияБезОбработчиков, Символы.ПС); + + Символы.ПС + СтрСоединить(ОбязательныеСобытияБезОбработчиков, Символы.ПС); ЗаписьЖурналаРегистрации(ИмяСобытия, УровеньЖурналаРегистрации.Ошибка,,, Комментарий); ВызватьИсключение НСтр("ru = 'Для обязательных событий не определены обработчики. @@ -2471,9 +3152,14 @@ Если ОбщегоНазначенияПовтИсп.РазделениеВключено() Тогда // Обновление в модели сервиса. - Если НЕ ОбщегоНазначенияПовтИсп.ДоступноИспользованиеРазделенныхДанных() - И ОбновлениеИнформационнойБазыСлужебный.НеобходимоОбновлениеНеразделенныхДанныхИнформационнойБазы() Тогда + Если ОбщегоНазначенияПовтИсп.ДоступноИспользованиеРазделенныхДанных() Тогда + Если ОбновлениеИнформационнойБазы.НеобходимоОбновлениеИнформационнойБазы() Тогда + // Заполнение разделенных параметров работы расширений. + Возврат Истина; + КонецЕсли; + ИначеЕсли ОбновлениеИнформационнойБазыСлужебный.НеобходимоОбновлениеНеразделенныхДанныхИнформационнойБазы() Тогда + // Обновление неразделенных параметров работы программы. Возврат Истина; КонецЕсли; Иначе @@ -2507,202 +3193,23 @@ КонецФункции -// Только для внутреннего использования. -Процедура ЗагрузитьОбновитьПараметрыРаботыПрограммы(ОшибкаУстановкиМонопольногоРежима = Неопределено, ВФоне = Ложь) Экспорт - - ВыполнитьЗагрузку = Истина; - - Если НЕ НеобходимоОбновлениеПараметровРаботыПрограммы(ВыполнитьЗагрузку) Тогда - Возврат; - КонецЕсли; - - Если ОбщегоНазначенияПовтИсп.РазделениеВключено() - И ОбщегоНазначенияПовтИсп.ДоступноИспользованиеРазделенныхДанных() Тогда - ВызватьИсключение - НСтр("ru = 'Обновление параметров работы программы не может - |быть выполнено в разделенном режиме модели сервиса.'"); - КонецЕсли; - - Если СтандартныеПодсистемыПовтИсп.ОтключитьСправочникИдентификаторыОбъектовМетаданных() Тогда - ВыполнитьЗагрузку = Ложь; - КонецЕсли; - - УстановитьПривилегированныйРежим(Истина); - СнятьМонопольныйРежим = Ложь; - Попытка - Если ОбщегоНазначения.ЭтоПодчиненныйУзелРИБ() Тогда - // Есть РИБ-обмен данными и обновление в подчиненном узле ИБ. - - // Предварительное обновление кэша служебных событий. - Константы.ПараметрыСлужебныхСобытий.СоздатьМенеджерЗначения().Обновить(); - - Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ОбменДанными") Тогда - МодульОбменДаннымиСервер = ОбщегоНазначения.ОбщийМодуль("ОбменДаннымиСервер"); - КонецЕсли; - - Если ВыполнитьЗагрузку Тогда - - СтандартнаяОбработка = Истина; - ОбщегоНазначенияПереопределяемый.ПередЗагрузкойИдентификаторовОбъектовМетаданныхВПодчиненномРИБУзле( - СтандартнаяОбработка); - - Если СтандартнаяОбработка = Истина - И ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ОбменДанными") Тогда - - Если НЕ МонопольныйРежим() Тогда - Попытка - УстановитьМонопольныйРежим(Истина); - СнятьМонопольныйРежим = Истина; - Исключение - Если ОшибкаУстановкиМонопольногоРежима <> Неопределено Тогда - ОшибкаУстановкиМонопольногоРежима = - НСтр("ru = 'Невозможно выполнить обновление информационной базы: - |- Невозможно установить монопольный режим - |- Версия конфигурации не предусматривает обновление без установки монопольного режима.'"); - КонецЕсли; - ВызватьИсключение ОшибкаУстановкиМонопольногоРежима; - КонецПопытки; - КонецЕсли; - - // Загрузка идентификаторов объектов метаданных из главного узла. - МодульОбменДаннымиСервер.ПередПроверкойИдентификаторовОбъектовМетаданныхВПодчиненномУзлеРИБ(); - КонецЕсли; - - Если ВФоне Тогда - ОбщегоНазначенияКлиентСервер.СообщитьПользователю("ПрибавкаНаШагеПрогресса=5"); - КонецЕсли; - КонецЕсли; - - // Проверка загрузки идентификаторов объектов метаданных из главного узла. - СписокКритичныхИзменений = ""; - Попытка - Справочники.ИдентификаторыОбъектовМетаданных.ВыполнитьОбновлениеДанных(Ложь, Ложь, Истина, , СписокКритичныхИзменений); - Исключение - Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ОбменДанными") Тогда - // Сброс кэша сообщения обмена. - МодульОбменДаннымиСервер.ПриОшибкеПроверкиИдентификаторовОбъектовМетаданныхВПодчиненномУзлеРИБ(ВыполнитьЗагрузку); - КонецЕсли; - ВызватьИсключение; - КонецПопытки; - - Если ЗначениеЗаполнено(СписокКритичныхИзменений) Тогда - - Если ВыполнитьЗагрузку Тогда - ИмяСобытия = НСтр("ru = 'Идентификаторы объектов метаданных.Требуется загрузить критичные изменения'", - ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()); - Иначе - // Настройка в подчиненном узле ИБ при первом запуске. - ИмяСобытия = НСтр("ru = 'Идентификаторы объектов метаданных.Требуется выполнить критичные изменения'", - ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()); - КонецЕсли; - ЗаписьЖурналаРегистрации(ИмяСобытия, УровеньЖурналаРегистрации.Ошибка, , , СписокКритичныхИзменений); - - Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ОбменДанными") Тогда - // Сброс кэша сообщения обмена, вызов исключения с пояснением дальнейших действий. - МодульОбменДаннымиСервер.ПриОшибкеПроверкиИдентификаторовОбъектовМетаданныхВПодчиненномУзлеРИБ(ВыполнитьЗагрузку, Истина); - КонецЕсли; - - Если ВыполнитьЗагрузку Тогда - ТекстОшибки = - НСтр("ru = 'Из главного узла не загружены изменения справочника ""Идентификаторы объектов метаданных"": - |при проверке обнаружено, что требуется загрузить критичные изменения (см. подробности в журнале - |регистрации в событии ""Идентификаторы объектов метаданных.Требуется загрузить критичные изменения"").'"); - Иначе - // Настройка в подчиненном узле ИБ при первом запуске. - ТекстОшибки = - НСтр("ru = 'В главном узле не обновлен справочник ""Идентификаторы объектов метаданных"": - |при проверке обнаружено, что требуется выполнить критичные изменения (см. подробности в журнале - |регистрации в событии ""Идентификаторы объектов метаданных.Требуется выполнить критичные изменения"").'"); - КонецЕсли; - - ВызватьИсключение ТекстОшибки; - КонецЕсли; - Если ВФоне Тогда - ОбщегоНазначенияКлиентСервер.СообщитьПользователю("ПрибавкаНаШагеПрогресса=10"); - КонецЕсли; - КонецЕсли; - - // Нет РИБ-обмена данными - // или обновление в главном узле ИБ - // или обновление при первом запуске подчиненного узла - // или обновление после загрузки справочника "Идентификаторы объектов метаданных" из главного узла. - ОбновитьПараметрыРаботыПрограммы(Ложь, ОшибкаУстановкиМонопольногоРежима, ВФоне); - Исключение - Если СнятьМонопольныйРежим Тогда - УстановитьМонопольныйРежим(Ложь); - КонецЕсли; - ВызватьИсключение; - КонецПопытки; - -КонецПроцедуры - -// Только для внутреннего использования. -Процедура ЗагрузитьОбновитьПараметрыРаботыПрограммыВФоне(ПараметрыВыполнения, АдресХранилища) Экспорт - - Если ПараметрыВыполнения.Свойство("ПараметрыКлиентаНаСервере") Тогда - ПараметрыСеанса.ПараметрыКлиентаНаСервере = ПараметрыВыполнения.ПараметрыКлиентаНаСервере; - ВФоне = Истина; - Иначе - ВФоне = Ложь; - КонецЕсли; - - РезультатВыполнения = Новый Структура; - РезультатВыполнения.Вставить("КраткоеСообщениеОбОшибке", Неопределено); - РезультатВыполнения.Вставить("ПодробноеСообщениеОбОшибке", Неопределено); - - ОшибкаУстановкиМонопольногоРежима = ""; - Попытка - ЗагрузитьОбновитьПараметрыРаботыПрограммы(ОшибкаУстановкиМонопольногоРежима, ВФоне); - Исключение - ИнформацияОбОшибке = ИнформацияОбОшибке(); - РезультатВыполнения.КраткоеСообщениеОбОшибке = КраткоеПредставлениеОшибки(ИнформацияОбОшибке); - РезультатВыполнения.ПодробноеСообщениеОбОшибке = ПодробноеПредставлениеОшибки(ИнформацияОбОшибке); - КонецПопытки; - - Если ИнформацияОбОшибке = Неопределено - И ЗначениеЗаполнено(ОшибкаУстановкиМонопольногоРежима) - И ОбщегоНазначения.ИнформационнаяБазаФайловая() Тогда - - ПараметрЗапускаКлиента = ПараметрыСеанса.ПараметрыКлиентаНаСервере.Получить("ПараметрЗапуска"); - Если Найти(ПараметрЗапускаКлиента, "РегламентныеЗаданияОтключены") = 0 Тогда - ОшибкаУстановкиМонопольногоРежима = "ЗаблокироватьВыполнениеРегламентныхЗаданий"; - КонецЕсли; - КонецЕсли; - - РезультатВыполнения.Вставить("ОшибкаУстановкиМонопольногоРежима", ОшибкаУстановкиМонопольногоРежима); - - Если Не ЗначениеЗаполнено(РезультатВыполнения.КраткоеСообщениеОбОшибке) - И ЗначениеЗаполнено(ОшибкаУстановкиМонопольногоРежима) - И ОшибкаУстановкиМонопольногоРежима <> "ЗаблокироватьВыполнениеРегламентныхЗаданий" Тогда - - РезультатВыполнения.КраткоеСообщениеОбОшибке = ОшибкаУстановкиМонопольногоРежима; - РезультатВыполнения.ПодробноеСообщениеОбОшибке = ОшибкаУстановкиМонопольногоРежима; - КонецЕсли; - - Если ПараметрыВыполнения.Свойство("ПараметрыКлиентаНаСервере") Тогда - РезультатВыполнения.Вставить("ПараметрыКлиентаНаСервере", ПараметрыСеанса.ПараметрыКлиентаНаСервере); - КонецЕсли; - - ПоместитьВоВременноеХранилище(РезультатВыполнения, АдресХранилища); - -КонецПроцедуры - // Возвращает соответствие имен и серверных модулей. Функция ИменаСерверныхМодулей() Экспорт СерверныеМодули = Новый Соответствие; ИнформационнаяБазаФайловая = ОбщегоНазначения.ИнформационнаяБазаФайловая(); - Для каждого ОбщийМодуль Из Метаданные.ОбщиеМодули Цикл + Для Каждого ОбщийМодуль Из Метаданные.ОбщиеМодули Цикл Если ОбщийМодуль.Глобальный Тогда Продолжить; КонецЕсли; - Если ОбщийМодуль.Сервер - #Если ТолстыйКлиентУправляемоеПриложение Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда - Или ИнформационнаяБазаФайловая - #КонецЕсли - Тогда + ЭтоСерверныйМодуль = ОбщийМодуль.Сервер; + #Если ТолстыйКлиентУправляемоеПриложение Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда + ЭтоСерверныйМодуль = ЭтоСерверныйМодуль Или ИнформационнаяБазаФайловая; + #КонецЕсли + + Если ЭтоСерверныйМодуль Тогда СерверныеМодули.Вставить(Вычислить(ОбщийМодуль.Имя), ОбщийМодуль.Имя); КонецЕсли; КонецЦикла; @@ -2718,6 +3225,7 @@ Если ПравоДоступа("Установка", Метаданные.ПараметрыСеанса.ПараметрыКлиентаНаСервере) Тогда ПараметрыСеанса.ПараметрыКлиентаНаСервере = ВсеПараметры.ПараметрыКлиентаНаСервере; КонецЕсли; + Справочники.ВерсииРасширений.ЗарегистрироватьИспользованиеВерсииРасширений(); УстановитьПривилегированныйРежим(Ложь); РаботаВБезопасномРежиме.ВыполнитьМетодКонфигурации(ВсеПараметры.ИмяМетода, ВсеПараметры.Параметры); @@ -2725,14 +3233,15 @@ КонецПроцедуры //////////////////////////////////////////////////////////////////////////////// -// Для обновления справочника ИдентификаторыОбъектовМетаданных. +// Для справочника ИдентификаторыОбъектовМетаданных. // Только для внутреннего использования. -Функция ПланыОбменаМенеджер() Экспорт +Процедура ЗаполнитьИменаОбъектовМетаданныхФоновоеЗадание(АдресВременногоХранилища) Экспорт - Возврат ПланыОбмена; + Справочники.ИдентификаторыОбъектовМетаданных.ЗаполнитьИменаОбъектовМетаданныхФоновоеЗадание( + АдресВременногоХранилища); -КонецФункции +КонецПроцедуры //////////////////////////////////////////////////////////////////////////////// // Обновление информационной базы. @@ -2769,6 +3278,16 @@ Обработчик.ОбщиеДанные = Истина; Обработчик.Процедура = "СтандартныеПодсистемыСервер.УстановитьЗначениеКонстантыГлавныйУзел"; + Обработчик = Обработчики.Добавить(); + Обработчик.Версия = "2.3.1.18"; + Обработчик.ОбщиеДанные = Истина; + Обработчик.Процедура = "СтандартныеПодсистемыСервер.ПеренестиПаролиВБезопасноеХранилищеОбщиеДанные"; + + Обработчик = Обработчики.Добавить(); + Обработчик.Версия = "2.3.1.18"; + Обработчик.ОбщиеДанные = Ложь; + Обработчик.Процедура = "СтандартныеПодсистемыСервер.ПеренестиПаролиВБезопасноеХранилище"; + КонецПроцедуры // Устанавливает корректное значение константе НеИспользоватьРазделениеПоОбластямДанных. @@ -2879,18 +3398,59 @@ // Процедура УстановитьЗначениеКонстантыГлавныйУзел() Экспорт - Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ОбменДанными") Тогда - - МодульОбменДаннымиПовтИсп = ОбщегоНазначения.ОбщийМодуль("ОбменДаннымиПовтИсп"); - - Если МодульОбменДаннымиПовтИсп.ЭтоАвтономноеРабочееМесто() Тогда - СохранитьГлавныйУзел(); - КонецЕсли; - + Если ОбщегоНазначенияПовтИсп.ЭтоАвтономноеРабочееМесто() Тогда + СохранитьГлавныйУзел(); КонецЕсли; - + КонецПроцедуры +// Предназначена для перевода паролей в безопасное хранилище. +// Используется в обработчике обновления ИБ. +Процедура ПеренестиПаролиВБезопасноеХранилищеОбщиеДанные() Экспорт + + // Обмен данными + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ОбменДанными") Тогда + МодульОбменДаннымиСервер = ОбщегоНазначения.ОбщийМодуль("ОбменДаннымиСервер"); + МодульОбменДаннымиСервер.ПеренестиПаролиВБезопасноеХранилище(); + КонецЕсли; + +КонецПроцедуры + +// Предназначена для перевода паролей в безопасное хранилище. +// Используется в обработчике обновления ИБ. +Процедура ПеренестиПаролиВБезопасноеХранилище() Экспорт + + // Аутентификация на пользовательском сайте + Результат = Новый Структура("Логин,Пароль"); + Результат.Логин = ОбщегоНазначения.ХранилищеОбщихНастроекЗагрузить("АутентификацияНаПользовательскомСайте", "КодПользователя", ""); + Результат.Пароль = ОбщегоНазначения.ХранилищеОбщихНастроекЗагрузить("АутентификацияНаПользовательскомСайте", "Пароль", ""); + Если НЕ ПустаяСтрока(Результат.Логин) Тогда + Владелец = ОбщегоНазначения.ИдентификаторОбъектаМетаданных("Справочник.ИдентификаторыОбъектовМетаданных"); + УстановитьПривилегированныйРежим(Истина); + ОбщегоНазначения.ЗаписатьДанныеВБезопасноеХранилище(Владелец, Результат.Логин, "Логин"); + ОбщегоНазначения.ЗаписатьДанныеВБезопасноеХранилище(Владелец, Результат.Пароль); + УстановитьПривилегированныйРежим(Ложь); + КонецЕсли; + + // Подсистема Отправка SMS + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ОтправкаSMS") Тогда + МодульОтправкаSMS = ОбщегоНазначения.ОбщийМодуль("ОтправкаSMS"); + МодульОтправкаSMS.ПеренестиПаролиВБезопасноеХранилище(); + КонецЕсли; + + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаСПочтовымиСообщениями") Тогда + МодульРаботаСПочтовымиСообщениямиСлужебный = ОбщегоНазначения.ОбщийМодуль("РаботаСПочтовымиСообщениямиСлужебный"); + МодульРаботаСПочтовымиСообщениямиСлужебный.ПеренестиПаролиВБезопасноеХранилище(); + КонецЕсли; + + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.РассылкаОтчетов") Тогда + МодульРассылкаОтчетов = ОбщегоНазначения.ОбщийМодуль("РассылкаОтчетов"); + МодульРассылкаОтчетов.ПеренестиПаролиВБезопасноеХранилище(); + КонецЕсли; + +КонецПроцедуры + + //////////////////////////////////////////////////////////////////////////////// // Подтверждение завершения работы программы. @@ -2904,10 +3464,7 @@ Результат = ОбщегоНазначения.ХранилищеОбщихНастроекЗагрузить("ОбщиеНастройкиПользователя", "ЗапрашиватьПодтверждениеПриЗавершенииПрограммы"); Если Результат = Неопределено Тогда - - Результат = ОбщегоНазначения.ОбщиеПараметрыБазовойФункциональности( - ).ЗапрашиватьПодтверждениеПриЗавершенииПрограммы; - + Результат = ОбщегоНазначения.ОбщиеПараметрыБазовойФункциональности().ЗапрашиватьПодтверждениеПриЗавершенииПрограммы; СтандартныеПодсистемыВызовСервера.СохранитьНастройкуПодтвержденияПриЗавершенииПрограммы(Результат); КонецЕсли; @@ -3114,7 +3671,7 @@ // Проверка настройки совместимости конфигурации с версией платформы. СистемнаяИнформация = Новый СистемнаяИнформация; - МинимальнаяВерсияПлатформы = "8.3.5.1336"; + МинимальнаяВерсияПлатформы = "8.3.6.2041"; Если ОбщегоНазначенияКлиентСервер.СравнитьВерсии(СистемнаяИнформация.ВерсияПриложения, МинимальнаяВерсияПлатформы) < 0 Тогда ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Для запуска необходима версия платформы 1С:Предприятие %1 или выше.'"), МинимальнаяВерсияПлатформы); @@ -3139,6 +3696,8 @@ НедоступныйРежим = "8.3.3"; ИначеЕсли ТекущийРежим = Режимы.Версия8_3_4 Тогда НедоступныйРежим = "8.3.4"; + ИначеЕсли ТекущийРежим = Режимы.Версия8_3_5 Тогда + НедоступныйРежим = "8.3.5"; Иначе НедоступныйРежим = ""; КонецЕсли; @@ -3147,7 +3706,7 @@ ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Режим совместимости конфигурации с 1С:Предприятием версии %1 не поддерживается. |Для запуска установите в конфигурации режим совместимости с 1С:Предприятием - |версии не ниже 8.3.5 или ""Не использовать"".'"), + |версии не ниже 8.3.6 или ""Не использовать"".'"), НедоступныйРежим); КонецЕсли; @@ -3212,7 +3771,7 @@ ПараметрыСеансаКлючи = Новый Массив; Для Каждого Запись Из Обработчики Цикл - Если Найти(Запись.Ключ, "*") > 0 Тогда + Если СтрНайти(Запись.Ключ, "*") > 0 Тогда КлючПараметра = СокрЛП(Запись.Ключ); ПараметрыСеансаКлючи.Добавить(Лев(КлючПараметра, СтрДлина(КлючПараметра)-1)); КонецЕсли; @@ -3222,55 +3781,29 @@ Если УстановленныеПараметры.Найти(ИмяПараметра) <> Неопределено Тогда Продолжить; КонецЕсли; + Обработчик = Обработчики.Получить(ИмяПараметра); Если Обработчик <> Неопределено Тогда - ПараметрыОбработчика = Новый Массив(); ПараметрыОбработчика.Добавить(ИмяПараметра); ПараметрыОбработчика.Добавить(УстановленныеПараметры); РаботаВБезопасномРежиме.ВыполнитьМетодКонфигурации(Обработчик, ПараметрыОбработчика); Продолжить; - КонецЕсли; + Для Каждого ИмяКлючаПараметра Из ПараметрыСеансаКлючи Цикл - Если Лев(ИмяПараметра, СтрДлина(ИмяКлючаПараметра)) = ИмяКлючаПараметра Тогда - - Обработчик = Обработчики.Получить(ИмяКлючаПараметра+"*"); + Если СтрНачинаетсяС(ИмяПараметра, ИмяКлючаПараметра) Тогда + Обработчик = Обработчики.Получить(ИмяКлючаПараметра + "*"); ПараметрыОбработчика = Новый Массив(); ПараметрыОбработчика.Добавить(ИмяПараметра); ПараметрыОбработчика.Добавить(УстановленныеПараметры); РаботаВБезопасномРежиме.ВыполнитьМетодКонфигурации(Обработчик, ПараметрыОбработчика); - КонецЕсли; КонецЦикла; КонецЦикла; КонецПроцедуры -Функция ПолучитьИнформациюОПользователе() - - // Вычисляем актуальное имя пользователя, даже если оно было ранее изменено в текущем сеансе; - // Например, для подключения к текущей ИБ через внешнее соединение из этого сеанса; - // Во всех остальных случаях достаточно получить ПользователиИнформационнойБазы.ТекущийПользователь(). - ТекущийПользователь = ПользователиИнформационнойБазы.НайтиПоУникальномуИдентификатору( - ПользователиИнформационнойБазы.ТекущийПользователь().УникальныйИдентификатор); - - Если ТекущийПользователь = Неопределено Тогда - ТекущийПользователь = ПользователиИнформационнойБазы.ТекущийПользователь(); - КонецЕсли; - - Информация = Новый Структура; - Информация.Вставить("Имя", ТекущийПользователь.Имя); - Информация.Вставить("ПолноеИмя", ТекущийПользователь.ПолноеИмя); - Информация.Вставить("ПарольУстановлен", ТекущийПользователь.ПарольУстановлен); - Информация.Вставить("АутентификацияOpenID", ТекущийПользователь.АутентификацияOpenID); - Информация.Вставить("АутентификацияСтандартная", ТекущийПользователь.АутентификацияСтандартная); - Информация.Вставить("АутентификацияОС", ТекущийПользователь.АутентификацияОС); - - Возврат Информация; - -КонецФункции - Функция ПредставлениеОбъектовМетаданных(Объекты) Результат = Новый Массив; @@ -3413,16 +3946,15 @@ Процедура ПрочитатьПараметрыИзСтрокиСоединения(СтруктураПараметровАдминистрирования) - ПодстрокиСтрокиСоединения = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок( - СтрокаСоединенияИнформационнойБазы(), ";"); + ПодстрокиСтрокиСоединения = СтрРазделить(СтрокаСоединенияИнформационнойБазы(), ";"); СтрокаИмениСервера = СтроковыеФункцииКлиентСервер.СократитьДвойныеКавычки(Сред(ПодстрокиСтрокиСоединения[0], 7)); СтруктураПараметровАдминистрирования.ИмяВКластере = СтроковыеФункцииКлиентСервер.СократитьДвойныеКавычки(Сред(ПодстрокиСтрокиСоединения[1], 6)); - СписокСерверовКластера = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(СтрокаИмениСервера, ","); + СписокСерверовКластера = СтрРазделить(СтрокаИмениСервера, ","); ИмяСервера = СписокСерверовКластера[0]; - РазделительПорта = Найти(ИмяСервера, ":"); + РазделительПорта = СтрНайти(ИмяСервера, ":"); Если РазделительПорта > 0 Тогда АдресАгентаСервера = Сред(ИмяСервера, 1, РазделительПорта - 1); ПортКластера = Число(Сред(ИмяСервера, РазделительПорта + 1)); @@ -3437,8 +3969,46 @@ КонецПроцедуры +// Для процедуры ЗарегистрироватьИзменениеПриоритетныхДанныхДляПодчиненныхУзловРИБ. +Процедура ЗарегистрироватьИзменениеПредопределенных(УзлыПлановОбменаРИБ, КоллекцияМетаданных) + + Запрос = Новый Запрос; + + Для Каждого ОбъектМетаданных Из КоллекцияМетаданных Цикл + УзлыРИБ = Новый Массив; + + Для Каждого УзлыПланаОбмена Из УзлыПлановОбменаРИБ Цикл + Если Не УзлыПланаОбмена.Ключ.Содержит(ОбъектМетаданных) Тогда + Продолжить; + КонецЕсли; + Для Каждого УзелРИБ Из УзлыПланаОбмена.Значение Цикл + УзлыРИБ.Добавить(УзелРИБ); + КонецЦикла; + КонецЦикла; + + Если УзлыРИБ.Количество() = 0 Тогда + Продолжить; + КонецЕсли; + + Запрос.Текст = + "ВЫБРАТЬ + | ТекущаяТаблица.Ссылка КАК Ссылка + |ИЗ + | &ТекущаяТаблица КАК ТекущаяТаблица + |ГДЕ + | ТекущаяТаблица.Предопределенный"; + Запрос.Текст = СтрЗаменить(Запрос.Текст, "&ТекущаяТаблица", ОбъектМетаданных.ПолноеИмя()); + Выборка = Запрос.Выполнить().Выбрать(); + + Пока Выборка.Следующий() Цикл + ПланыОбмена.ЗарегистрироватьИзменения(УзлыРИБ, Выборка.Ссылка); + КонецЦикла; + КонецЦикла; + +КонецПроцедуры + // Для процедуры УстановитьКлючНазначенияФормы. -Процедура УстановитьКлючНазначенияИспользованияФормы(Форма, Ключ) +Процедура УстановитьКлючНазначенияИспользованияФормы(Форма, Ключ, УстановитьНастройки) Если Не ЗначениеЗаполнено(Ключ) Или Форма.КлючНазначенияИспользования = Ключ Тогда @@ -3446,6 +4016,11 @@ Возврат; КонецЕсли; + Если Не УстановитьНастройки Тогда + Форма.КлючНазначенияИспользования = Ключ; + Возврат; + КонецЕсли; + ТипыНастроек = Новый Массив; // Русский вариант. ТипыНастроек.Добавить("/КлючТекущегоВарианта"); @@ -3461,15 +4036,18 @@ ТипыНастроек.Добавить("/CurrentDataSettingsKey"); ТипыНастроек.Добавить("/CurrentData"); ТипыНастроек.Добавить("/FormSettings"); - - УстановитьНастройкиДляКлюча(Ключ, ТипыНастроек, Форма.ИмяФормы, Форма.КлючНазначенияИспользования); + Если ХранилищеСистемныхНастроек.Загрузить(Ключ, "КлючНазначенияИспользованияФормы") <> Истина + И ПравоДоступа("СохранениеДанныхПользователя", Метаданные) Тогда + УстановитьНастройкиДляКлюча(Ключ, ТипыНастроек, Форма.ИмяФормы, Форма.КлючНазначенияИспользования); + ХранилищеСистемныхНастроек.Сохранить(Ключ, "КлючНазначенияИспользованияФормы", Истина); + КонецЕсли; Форма.КлючНазначенияИспользования = Ключ; КонецПроцедуры // Для процедуры УстановитьКлючНазначенияФормы. -Процедура УстановитьКлючСохраненияПоложенияОкнаФормы(Форма, Ключ) +Процедура УстановитьКлючСохраненияПоложенияОкнаФормы(Форма, Ключ, УстановитьНастройки) Если Не ЗначениеЗаполнено(Ключ) Или Форма.КлючСохраненияПоложенияОкна = Ключ Тогда @@ -3477,6 +4055,11 @@ Возврат; КонецЕсли; + Если Не УстановитьНастройки Тогда + Форма.КлючСохраненияПоложенияОкна = Ключ; + Возврат; + КонецЕсли; + ТипыНастроек = Новый Массив; // Русский вариант. ТипыНастроек.Добавить("/НастройкиОкна"); @@ -3489,7 +4072,11 @@ ТипыНастроек.Добавить("/WebClientWindowSettings"); ТипыНастроек.Добавить("/Taxi/WebClientWindowSettings"); - УстановитьНастройкиДляКлюча(Ключ, ТипыНастроек, Форма.ИмяФормы, Форма.КлючСохраненияПоложенияОкна); + Если ХранилищеСистемныхНастроек.Загрузить(Ключ, "КлючСохраненияПоложенияОкнаФормы") <> Истина + И ПравоДоступа("СохранениеДанныхПользователя", Метаданные) Тогда + УстановитьНастройкиДляКлюча(Ключ, ТипыНастроек, Форма.ИмяФормы, Форма.КлючСохраненияПоложенияОкна); + ХранилищеСистемныхНастроек.Сохранить(Ключ, "КлючСохраненияПоложенияОкнаФормы", Истина); + КонецЕсли; Форма.КлючСохраненияПоложенияОкна = Ключ; @@ -3546,9 +4133,7 @@ // ПриПолученииСпискаПредупрежденийЗавершенияРаботы. // // Серверные события: -// ПриДобавленииОбработчиковУстановкиПараметровСеанса, // ПриДобавленииИсключенийПоискаСсылок, -// ПриОпределенииПредставленияПредмета, // ПриДобавленииПереименованийОбъектовМетаданных, // ПриДобавленииПараметровРаботыКлиентаПриЗапуске, // ПриДобавленииПараметровРаботыКлиента, @@ -3668,27 +4253,6 @@ // СЕРВЕРНЫЕ СОБЫТИЯ. - // Доопределяет обработчики установки параметров сеанса. - // - // Параметры: - // Обработчики - Соответствие, где. - // Ключ - Строка - <ИмяПараметраСеанса> или <НачалоИмениПараметраСеанса*>. - // Значение - Строка - полное имя обработчика. - // - // Примечание. Символ '*'используется в конце имени параметра сеанса и обозначает, - // что один обработчик будет вызван для инициализации всех параметров сеанса - // с именем, начинающимся на слово НачалоИмениПараметраСеанса. - // - // Для задания обработчиков параметров сеанса следует использовать шаблон: - // Обработчики.Вставить("<ИмяПараметраСеанса>|<НачалоИмениПараметраСеанса*>", "Обработчик"); - // - // Синтаксис: - // Процедура ПриДобавленииОбработчиковУстановкиПараметровСеанса(Обработчики) Экспорт - // - // (То же, что ОбщегоНазначенияПереопределяемый.ПриДобавленииОбработчиковУстановкиПараметровСеанса). - СерверныеСобытия.Добавить( - "СтандартныеПодсистемы.БазоваяФункциональность\ПриДобавленииОбработчиковУстановкиПараметровСеанса"); - // Доопределяет список объектов метаданных, содержимое которых не должно учитывается в бизнес-логике приложения. // // Описание: @@ -3727,19 +4291,6 @@ СерверныеСобытия.Добавить( "СтандартныеПодсистемы.БазоваяФункциональность\ПриДобавленииИсключенийПоискаСсылок"); - // Переопределяет текстовое описание предмета. - // - // Параметры: - // СсылкаНаПредмет - ЛюбаяСсылка - объект ссылочного типа. - // Представление - Строка (возвращаемое значение) - произвольное текстовое описание. - // - // Синтаксис: - // Процедура ПриОпределенииПредставленияПредмета(СсылкаНаПредмет, Представление) Экспорт - // - // (То же, что ОбщегоНазначенияПереопределяемый.УстановитьПредставлениеПредмета). - СерверныеСобытия.Добавить( - "СтандартныеПодсистемы.БазоваяФункциональность\ПриОпределенииПредставленияПредмета"); - // Доопределяет переименования тех объектов метаданных, которые невозможно // автоматически найти по типу, но ссылки на которые требуется сохранять // в базе данных (например: подсистемы, роли). @@ -3816,6 +4367,9 @@ // Вызывается при включении разделения данных по областям данных. // + // Синтаксис: + // Процедура ПриВключенииРазделенияПоОбластямДанных() Экспорт + // СерверныеСобытия.Добавить( "СтандартныеПодсистемы.БазоваяФункциональность\ПриВключенииРазделенияПоОбластямДанных"); @@ -3895,7 +4449,7 @@ // если данные были загружены порциями. // // Синтаксис: - // Процедура ПослеПолученияДанныхОтПодчиненного(Источник = Неопределено, ЭлементДанных, ПолучениеЭлемента, ОтправкаНазад) Экспорт + // Процедура ПослеПолученияДанныхОтПодчиненного(Отправитель, Отказ) Экспорт // СерверныеСобытия.Добавить("СтандартныеПодсистемы.БазоваяФункциональность\ПослеПолученияДанныхОтПодчиненного"); @@ -3967,50 +4521,6 @@ // СерверныеСобытия.Добавить("СтандартныеПодсистемы.БазоваяФункциональность\ПриОпределенииПоддерживаемыхВерсийПрограммныхИнтерфейсов"); - // Заполняет структуру параметров, необходимых для работы клиентского кода - // при завершении работы конфигурации, т.е. в обработчиках: - // - ПередЗавершениемРаботыСистемы, - // - ПриЗавершенииРаботыСистемы - // - // Параметры: - // Параметры - Структура - структура параметров. - // - // Синтаксис: - // Процедура ПриДобавленииПараметровРаботыКлиентскойЛогикиСтандартныхПодсистемПриЗавершении(Параметры) Экспорт - // - СерверныеСобытия.Добавить("СтандартныеПодсистемы.БазоваяФункциональность\ПриДобавленииПараметровРаботыКлиентскойЛогикиСтандартныхПодсистемПриЗавершении"); - - // Заполняет структуру параметров, необходимых для работы клиентского кода - // при запуске конфигурации, т.е. в обработчиках событий. - // - ПередНачаломРаботыСистемы, - // - ПриНачалеРаботыСистемы - // - // Важно: при запуске недопустимо использовать команды сброса кэша - // повторно используемых модулей, иначе запуск может привести - // к непредсказуемым ошибкам и лишним серверным вызовам. - // - // Параметры: - // Параметры - Структура - структура параметров. - // - // Возвращаемое значение: - // Булево - Ложь, если дальнейшее заполнение параметров необходимо прервать. - // - // Синтаксис: - // Процедура ПриДобавленииПараметровРаботыКлиентскойЛогикиСтандартныхПодсистемПриЗапуске(Параметры) Экспорт - // - СерверныеСобытия.Добавить("СтандартныеПодсистемы.БазоваяФункциональность\ПриДобавленииПараметровРаботыКлиентскойЛогикиСтандартныхПодсистемПриЗапуске"); - - // Заполняет структуру параметров, необходимых для работы клиентского кода - // конфигурации. - // - // Параметры: - // Параметры - Структура - структура параметров. - // - // Синтаксис: - // Процедура ПриДобавленииПараметровРаботыКлиентскойЛогикиСтандартныхПодсистем(Параметры) Экспорт - // - СерверныеСобытия.Добавить("СтандартныеПодсистемы.БазоваяФункциональность\ПриДобавленииПараметровРаботыКлиентскойЛогикиСтандартныхПодсистем"); - // Используется для получения объектов метаданных обязательных для плана обмена. // Если подсистема имеет объекты метаданных обязательные для включения в состав плана обмена, // то в параметр <Объект> необходимо добавить эти объекты метаданных. @@ -4021,6 +4531,9 @@ // Истина - требуется получить список объектов плана обмена РИБ; // Ложь - требуется получить список для плана обмена НЕ РИБ. // + // Синтаксис: + // Процедура ПриПолученииОбязательныхОбъектовПланаОбмена(Объекты, Знач РаспределеннаяИнформационнаяБаза) Экспорт + // СерверныеСобытия.Добавить("СтандартныеПодсистемы.БазоваяФункциональность\ПриПолученииОбязательныхОбъектовПланаОбмена"); // Используется для получения объектов метаданных, которые не следует включать в состав плана обмена. @@ -4033,6 +4546,9 @@ // Истина - требуется получить список объектов-исключений плана обмена РИБ; // Ложь - требуется получить список для плана обмена НЕ РИБ. // + // Синтаксис: + // Процедура ПриПолученииОбъектовИсключенийПланаОбмена(Объекты, Знач РаспределеннаяИнформационнаяБаза) Экспорт + // СерверныеСобытия.Добавить("СтандартныеПодсистемы.БазоваяФункциональность\ПриПолученииОбъектовИсключенийПланаОбмена"); // Используется для получения объектов метаданных, которые должны входить в состав плана обмена @@ -4045,6 +4561,9 @@ // Параметры: // Объекты - Массив. Массив объектов метаданных конфигурации. // + // Синтаксис: + // Процедура ПриПолученииОбъектовНачальногоОбразаПланаОбмена(Объекты) Экспорт + // СерверныеСобытия.Добавить("СтандартныеПодсистемы.БазоваяФункциональность\ПриПолученииОбъектовНачальногоОбразаПланаОбмена"); КонецПроцедуры @@ -4058,15 +4577,12 @@ // КЛИЕНТСКИЕ ОБРАБОТЧИКИ. КлиентскиеОбработчики["СтандартныеПодсистемы.БазоваяФункциональность\ПослеНачалаРаботыСистемы"].Добавить( - "КонтрольДинамическогоОбновленияКонфигурацииКлиент"); + "СтандартныеПодсистемыКлиент"); - КлиентскиеОбработчики["СтандартныеПодсистемы.БазоваяФункциональность\ПослеНачалаРаботыСистемы"].Добавить( - "СтандартныеПодсистемыКлиент"); - // СЕРВЕРНЫЕ ОБРАБОТЧИКИ. СерверныеОбработчики[ - "СтандартныеПодсистемы.БазоваяФункциональность\ПриДобавленииПараметровРаботыКлиентскойЛогикиСтандартныхПодсистем"].Добавить( + "СтандартныеПодсистемы.БазоваяФункциональность\ПриДобавленииПараметровРаботыКлиента"].Добавить( "СтандартныеПодсистемыСервер"); СерверныеОбработчики["СтандартныеПодсистемы.ОбновлениеВерсииИБ\ПриДобавленииОбработчиковОбновления"].Добавить( @@ -4095,9 +4611,9 @@ Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ТекущиеДела") Тогда СерверныеОбработчики["СтандартныеПодсистемы.ТекущиеДела\ПриЗаполненииСпискаТекущихДел"].Добавить( - "СтандартныеПодсистемыСервер"); + "СтандартныеПодсистемыСервер"); КонецЕсли; - + КонецПроцедуры //////////////////////////////////////////////////////////////////////////////// @@ -4133,7 +4649,7 @@ Если ТипЗнч(Событие) = Тип("Строка") Тогда // Имя события в виде строки. ОбработчикиСобытий.Вставить(Событие, Новый Массив); - Иначе// Описание события в виде структуры - см. ОбщегоНазначения.НовоеСобытие(). + Иначе // Описание события в виде структуры ОбработчикиСобытий.Вставить(Событие.Имя, Новый Массив); Если Событие.Обязательное Тогда Если ОбязательныеСобытия.Получить(Событие.Имя) = Неопределено Тогда @@ -4231,7 +4747,7 @@ Обработчики.Добавить(Новый ФиксированнаяСтруктура(Обработчик)); // Проверка, что один и тот же обработчик указан для событий только один раз. - ИмяПроцедуры = Сред(Событие, Найти(Событие, "\") + 1); + ИмяПроцедуры = Сред(Событие, СтрНайти(Событие, "\") + 1); ИмяОбработчика = Обработчик.Модуль + "." + ИмяПроцедуры; Если СобытияОбработчиков[ИмяОбработчика] = Неопределено Тогда @@ -4261,8 +4777,77 @@ КонецФункции //////////////////////////////////////////////////////////////////////////////// -// Для функции ОбновитьПараметрыРаботыПрограммы. +// Дополнительная базовая функциональность обновления информационной базы. +// Для процедур ЗагрузитьОбновитьПараметрыРаботыПрограммы, ОбновитьВсеПараметрыРаботыПрограммы. +Процедура ОбновитьПараметрыРаботыПрограммы(НайтиИзменения = Ложь, + ОшибкаУстановкиМонопольногоРежима = Неопределено, + ВФоне = Ложь) + + ЕстьИзменения = Ложь; + ТолькоПроверка = Ложь; + СнятьМонопольныйРежим = Ложь; + + Если НайтиИзменения Тогда + ТолькоПроверка = Истина; + + ИначеЕсли НЕ МонопольныйРежим() Тогда + Попытка + УстановитьМонопольныйРежим(Истина); + СнятьМонопольныйРежим = Истина; + Исключение + СнятьМонопольныйРежим = Ложь; + ТолькоПроверка = Истина; + КонецПопытки; + КонецЕсли; + + БезИзменений = Новый Структура; + Попытка + ПроверитьОбновитьПараметрыРаботыПрограммы(ЕстьИзменения, ТолькоПроверка, БезИзменений, ВФоне); + Исключение + Если СнятьМонопольныйРежим Тогда + УстановитьМонопольныйРежим(Ложь); + КонецЕсли; + ВызватьИсключение; + КонецПопытки; + + Если СнятьМонопольныйРежим Тогда + УстановитьМонопольныйРежим(Ложь); + КонецЕсли; + + Если Не НайтиИзменения И ТолькоПроверка Тогда + Если ЕстьИзменения Тогда + Попытка + УстановитьМонопольныйРежим(Истина); + Исключение + ТекстОшибки = + НСтр("ru = 'Невозможно выполнить обновление информационной базы: + |- Невозможно установить монопольный режим + |- Версия конфигурации не предусматривает обновление без установки монопольного режима.'"); + + Если ОшибкаУстановкиМонопольногоРежима = Неопределено Тогда + ВызватьИсключение ТекстОшибки; + Иначе + ОшибкаУстановкиМонопольногоРежима = ТекстОшибки; + Возврат; + КонецЕсли; + КонецПопытки; + Попытка + ОбновитьПараметрыРаботыПрограммы(ЕстьИзменения); + Исключение + УстановитьМонопольныйРежим(Ложь); + ВызватьИсключение; + КонецПопытки; + УстановитьМонопольныйРежим(Ложь); + Иначе + // Монопольный режим не требуется. + ПроверитьОбновитьПараметрыРаботыПрограммы(ЕстьИзменения, Ложь, БезИзменений, ВФоне); + КонецЕсли; + КонецЕсли; + +КонецПроцедуры + +// Для процедуры ОбновитьПараметрыРаботыПрограммы. Процедура ПроверитьОбновитьПараметрыРаботыПрограммы(ЕстьИзменения, ТолькоПроверка, БезИзменений, ВФоне) Если ТипЗнч(БезИзменений) <> Тип("Структура") Тогда @@ -4287,7 +4872,7 @@ Если НЕ БезИзменений.Свойство("БазоваяФункциональностьИдентификаторыОбъектовМетаданных") Тогда - Если СтандартныеПодсистемыПовтИсп.ОтключитьСправочникИдентификаторыОбъектовМетаданных() Тогда + Если СтандартныеПодсистемыПовтИсп.ОтключитьИдентификаторыОбъектовМетаданных() Тогда БезИзменений.Вставить("БазоваяФункциональностьИдентификаторыОбъектовМетаданных"); Иначе ЕстьТекущиеИзменения = Ложь; @@ -4295,7 +4880,7 @@ // Проверка только критичных изменений: добавление, удаление или переименование объектов метаданных. Справочники.ИдентификаторыОбъектовМетаданных.ВыполнитьОбновлениеДанных(Ложь, ЕстьТекущиеИзменения, ТолькоПроверка, ЕстьТекущиеИзменения); Иначе - Справочники.ИдентификаторыОбъектовМетаданных.ВыполнитьОбновлениеДанных(ЕстьТекущиеИзменения, Ложь); + Справочники.ИдентификаторыОбъектовМетаданных.ВыполнитьОбновлениеДанных(ЕстьТекущиеИзменения, Ложь, Ложь); КонецЕсли; Если ЕстьТекущиеИзменения Тогда ЕстьИзменения = Истина; @@ -4353,51 +4938,39 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// // Для функции ИзмененияПараметраРаботыПрограммы. - Функция СледующаяВерсия(Версия) - Массив = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(Версия, "."); + Массив = СтрРазделить(Версия, "."); Возврат ОбщегоНазначенияКлиентСервер.ВерсияКонфигурацииБезНомераСборки( Версия) + "." + Формат(Число(Массив[3]) + 1, "ЧГ="); КонецФункции +//////////////////////////////////////////////////////////////////////////////// +// Другие процедуры и функции. -// Заполняет список текущих дел пользователя. -// -// Параметры: -// ТекущиеДела - ТаблицаЗначений - таблица значений с колонками: -// * Идентификатор - Строка - внутренний идентификатор дела, используемый механизмом "Текущие дела". -// * ЕстьДела - Булево - если Истина, дело выводится в списке текущих дел пользователя. -// * Важное - Булево - если Истина, дело будет выделено красным цветом. -// * Представление - Строка - представление дела, выводимое пользователю. -// * Количество - Число - количественный показатель дела, выводится в строке заголовка дела. -// * Форма - Строка - полный путь к форме, которую необходимо открыть при нажатии на гиперссылку -// дела на панели "Текущие дела". -// * ПараметрыФормы- Структура - параметры, с которыми нужно открывать форму показателя. -// * Владелец - Строка, объект метаданных - строковый идентификатор дела, которое будет владельцем для текущего -// или объект метаданных подсистема. -// * Подсказка - Строка - текст подсказки. -// -Процедура ПриЗаполненииСпискаТекущихДел(ТекущиеДела) Экспорт +// Для процедуры ПриЗаполненииРазрешенийНаДоступКВнешнимРесурсам. +Процедура ДобавитьЗапросРазрешенийНаИспользованиеРасширений(ЗапросыРазрешений) - МодульТекущиеДелаСлужебный = ОбщегоНазначения.ОбщийМодуль("ТекущиеДелаСлужебный"); - Если МодульТекущиеДелаСлужебный.ДелоОтключено("РекомендацияПоПовышениюСкоростиРаботы") Тогда + Если ОбщегоНазначенияПовтИсп.РазделениеВключено() + И ОбщегоНазначенияПовтИсп.ДоступноИспользованиеРазделенныхДанных() Тогда + Возврат; КонецЕсли; - Идентификатор = "РекомендацияПоПовышениюСкоростиРаботы"; - Дело = ТекущиеДела.Добавить(); - Дело.Идентификатор = Идентификатор; - Дело.ЕстьДела = ТребуетсяПоказРекомендацииПоОбъемуОперативнойПамяти(); - Дело.Важное = Истина; - Дело.Представление = НСтр("ru = 'Скорость работы снижена'"); - Дело.Форма = "Обработка.РекомендацияПоПовышениюСкоростиРаботы.Форма.Форма"; - Дело.Владелец = НСтр("ru = 'Скорость работы программы'"); + Разрешения = Новый Массив; + ВсеРасширения = РасширенияКонфигурации.Получить(); + Для Каждого Расширение Из ВсеРасширения Цикл + Разрешения.Добавить(РаботаВБезопасномРежиме.РазрешениеНаИспользованиеВнешнегоМодуля( + Расширение.Имя, Base64Строка(Расширение.ХешСумма))); + КонецЦикла; + + ЗапросыРазрешений.Добавить(РаботаВБезопасномРежиме.ЗапросНаИспользованиеВнешнихРесурсов(Разрешения, + ОбщегоНазначения.ИдентификаторОбъектаМетаданных("РегистрСведений.ПараметрыРаботыВерсийРасширений"))); + КонецПроцедуры Функция ТребуетсяПоказРекомендацииПоОбъемуОперативнойПамяти() diff --git a/SSL/src/CommonModules/СтроковыеФункцииКлиентСервер/Module.bsl b/SSL/src/CommonModules/СтроковыеФункцииКлиентСервер/Module.bsl index 91052f2da..9a37bf95e 100644 --- a/SSL/src/CommonModules/СтроковыеФункцииКлиентСервер/Module.bsl +++ b/SSL/src/CommonModules/СтроковыеФункцииКлиентСервер/Module.bsl @@ -14,7 +14,7 @@ // Если параметр не задан, то функция работает в режиме совместимости со своей предыдущей версией: // - для разделителя-пробела пустые строки не включаются в результат, для остальных разделителей пустые строки // включаются в результат. -// Е если параметр Строка не содержит значащих символов или не содержит ни одного символа (пустая строка), то в +// - если параметр Строка не содержит значащих символов или не содержит ни одного символа (пустая строка), то в // случае разделителя-пробела результатом функции будет массив, содержащий одно значение "" (пустая строка), а // при других разделителях результатом функции будет пустой массив. // СокращатьНепечатаемыеСимволы - Булево - сокращать непечатаемые символы по краям каждой из найденных подстрок. @@ -31,6 +31,9 @@ // РазложитьСтрокуВМассивПодстрок("",,Ложь) - возвратит массив с одним элементом "" (пустой строкой); // РазложитьСтрокуВМассивПодстрок("", " ") - возвратит массив с одним элементом "" (пустой строкой); // +// Примечание: +// В случаях, когда разделителем является строка из одного символа, и не используется параметр СокращатьНепечатаемыеСимволы, +// рекомендуется использовать функцию платформы СтрРазделить. Функция РазложитьСтрокуВМассивПодстрок(Знач Строка, Знач Разделитель = ",", Знач ПропускатьПустыеСтроки = Неопределено, СокращатьНепечатаемыеСимволы = Ложь) Экспорт Результат = Новый Массив; @@ -47,7 +50,7 @@ КонецЕсли; // - Позиция = Найти(Строка, Разделитель); + Позиция = СтрНайти(Строка, Разделитель); Пока Позиция > 0 Цикл Подстрока = Лев(Строка, Позиция - 1); Если Не ПропускатьПустыеСтроки Или Не ПустаяСтрока(Подстрока) Тогда @@ -58,7 +61,7 @@ КонецЕсли; КонецЕсли; Строка = Сред(Строка, Позиция + СтрДлина(Разделитель)); - Позиция = Найти(Строка, Разделитель); + Позиция = СтрНайти(Строка, Разделитель); КонецЦикла; Если Не ПропускатьПустыеСтроки Или Не ПустаяСтрока(Строка) Тогда @@ -73,41 +76,6 @@ КонецФункции -/// Объединяет строки из массива в строку с разделителями. -// -// Параметры: -// Массив - Массив - массив строк которые необходимо объединить в одну строку; -// Разделитель - Строка - любой набор символов, который будет использован в качестве разделителя. -// -// Возвращаемое значение: -// Строка - строка с разделителями. -// -Функция СтрокаИзМассиваПодстрок(Массив, Разделитель = ",", СокращатьНепечатаемыеСимволы = Ложь) Экспорт - - Результат = ""; - - Для Индекс = 0 По Массив.ВГраница() Цикл - Подстрока = Массив[Индекс]; - - Если СокращатьНепечатаемыеСимволы Тогда - Подстрока = СокрЛП(Подстрока); - КонецЕсли; - - Если ТипЗнч(Подстрока) <> Тип("Строка") Тогда - Подстрока = Строка(Подстрока); - КонецЕсли; - - Если Индекс > 0 Тогда - Результат = Результат + Разделитель; - КонецЕсли; - - Результат = Результат + Подстрока; - КонецЦикла; - - Возврат Результат; - -КонецФункции - // Определяет, является ли символ разделителем. // // Параметры: @@ -120,7 +88,7 @@ Функция ЭтоРазделительСлов(КодСимвола, РазделителиСлов = Неопределено) Экспорт Если РазделителиСлов <> Неопределено Тогда - Возврат Найти(РазделителиСлов, Символ(КодСимвола)) > 0; + Возврат СтрНайти(РазделителиСлов, Символ(КодСимвола)) > 0; КонецЕсли; Диапазоны = Новый Массив; @@ -194,21 +162,24 @@ // Пример: // ПодставитьПараметрыВСтроку(НСтр("ru='%1 пошел в %2'"), "Вася", "Зоопарк") = "Вася пошел в Зоопарк". // +// Примечание: +// В случаях, когда число используемых параметров в строке совпадает с числом переданных для подстановки параметров, +// рекомендуется использовать функцию платформы СтрШаблон. Функция ПодставитьПараметрыВСтроку(Знач СтрокаПодстановки, Знач Параметр1, Знач Параметр2 = Неопределено, Знач Параметр3 = Неопределено, Знач Параметр4 = Неопределено, Знач Параметр5 = Неопределено, Знач Параметр6 = Неопределено, Знач Параметр7 = Неопределено, Знач Параметр8 = Неопределено, Знач Параметр9 = Неопределено) Экспорт ИспользоватьАльтернативныйАлгоритм = - Найти(Параметр1, "%") - Или Найти(Параметр2, "%") - Или Найти(Параметр3, "%") - Или Найти(Параметр4, "%") - Или Найти(Параметр5, "%") - Или Найти(Параметр6, "%") - Или Найти(Параметр7, "%") - Или Найти(Параметр8, "%") - Или Найти(Параметр9, "%"); + СтрНайти(Параметр1, "%") + Или СтрНайти(Параметр2, "%") + Или СтрНайти(Параметр3, "%") + Или СтрНайти(Параметр4, "%") + Или СтрНайти(Параметр5, "%") + Или СтрНайти(Параметр6, "%") + Или СтрНайти(Параметр7, "%") + Или СтрНайти(Параметр8, "%") + Или СтрНайти(Параметр9, "%"); Если ИспользоватьАльтернативныйАлгоритм Тогда СтрокаПодстановки = ПодставитьПараметрыВСтрокуАльтернативныйАлгоритм(СтрокаПодстановки, Параметр1, @@ -308,11 +279,11 @@ СимволДвойныеКавычки = Символ(34); // (") - МассивПодстрок = РазложитьСтрокуВМассивПодстрок(СтрокаПараметров, ";"); + МассивПодстрок = СтрРазделить(СтрокаПараметров, ";", Ложь); Для Каждого СтрокаПараметра Из МассивПодстрок Цикл - ПозицияПервогоЗнакаРавенства = Найти(СтрокаПараметра, "="); + ПозицияПервогоЗнакаРавенства = СтрНайти(СтрокаПараметра, "="); // Получаем имя параметра ИмяПараметра = СокрЛП(Лев(СтрокаПараметра, ПозицияПервогоЗнакаРавенства - 1)); @@ -320,8 +291,8 @@ // Получаем значение параметра. ЗначениеПараметра = СокрЛП(Сред(СтрокаПараметра, ПозицияПервогоЗнакаРавенства + 1)); - Если Лев(ЗначениеПараметра, 1) = СимволДвойныеКавычки - И Прав(ЗначениеПараметра, 1) = СимволДвойныеКавычки Тогда + Если СтрНачинаетсяС(ЗначениеПараметра, СимволДвойныеКавычки) + И СтрЗаканчиваетсяНа(ЗначениеПараметра, СимволДвойныеКавычки) Тогда ЗначениеПараметра = Сред(ЗначениеПараметра, 2, СтрДлина(ЗначениеПараметра) - 2); @@ -376,8 +347,7 @@ Возврат СтрДлина( СтрЗаменить( СтрЗаменить( СтрЗаменить( СтрЗаменить( СтрЗаменить( СтрЗаменить( СтрЗаменить( СтрЗаменить( СтрЗаменить( СтрЗаменить( - СтрокаПроверки, "0", ""), "1", ""), "2", ""), "3", ""), "4", ""), "5", ""), "6", ""), "7", ""), "8", ""), "9", "") - ) = 0; + СтрокаПроверки, "0", ""), "1", ""), "2", ""), "3", ""), "4", ""), "5", ""), "6", ""), "7", ""), "8", ""), "9", "")) = 0; КонецФункции @@ -471,11 +441,11 @@ // Функция СократитьДвойныеКавычки(Знач Строка) Экспорт - Пока Лев(Строка, 1) = """" Цикл + Пока СтрНачинаетсяС(Строка, """") Цикл Строка = Сред(Строка, 2); КонецЦикла; - Пока Прав(Строка, 1) = """" Цикл + Пока СтрЗаканчиваетсяНа(Строка, """") Цикл Строка = Лев(Строка, СтрДлина(Строка) - 1); КонецЦикла; @@ -495,28 +465,6 @@ КонецПроцедуры -// Осуществляет поиск символа, начиная с конца строки. -// -// Параметры: -// Строка - Строка - строка, в которой осуществляется поиск; -// Символ - Строка - искомый символ. Допускается искать строку, содержащую более одного символа. -// -// Возвращаемое значение: -// Число - позиция символа в строке. -// Если строка не содержит указанного символа, то возвращается 0. -// -Функция НайтиСимволСКонца(Знач Строка, Знач Символ) Экспорт - - Для Позиция = -СтрДлина(Строка) По -1 Цикл - Если Сред(Строка, -Позиция, СтрДлина(Символ)) = Символ Тогда - Возврат -Позиция; - КонецЕсли; - КонецЦикла; - - Возврат 0; - -КонецФункции - // Проверяет, является ли строка уникальным идентификатором. // В качестве уникального идентификатора предполагается строка вида // "XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX", где X = [0..9,a..f]. @@ -778,52 +726,35 @@ // // Параметры: // Число - Число - любое целое число. -// ПараметрыПредметаИсчисления - Строка - варианты написания единицы измерения в родительном падеже для одной, -// для двух и для пяти единиц, разделитель - запятая. +// ПараметрыПредметаИсчисления - Строка - варианты написания единицы измерения в родительном падеже для одной, +// для двух и для пяти единиц, разделитель - запятая. // // Возвращаемое значение: // Строка - текстовое представление количества единиц, число записывается цифрами. // // Примеры: // ЧислоЦифрамиПредметИсчисленияПрописью(23, "минуту,минуты,минут") = "23 минуты"; -// ЧислоЦифрамиПредметИсчисленияПрописью(15, "минуту,минуты,минут") = "15 минут". +// ЧислоЦифрамиПредметИсчисленияПрописью(15, "минуту,минуты,минут") = "15 минут". Функция ЧислоЦифрамиПредметИсчисленияПрописью(Знач Число, Знач ПараметрыПредметаИсчисления) Экспорт - Результат = Формат(Число,"ЧН=0"); + Результат = Формат(Число, "ЧН=0"); + ПредставленияПредмета = Новый Массив; - МассивПредставлений = Новый Массив; - - Позиция = Найти(ПараметрыПредметаИсчисления, ","); - Пока Позиция > 0 Цикл - Значение = СокрЛП(Лев(ПараметрыПредметаИсчисления, Позиция-1)); - ПараметрыПредметаИсчисления = Сред(ПараметрыПредметаИсчисления, Позиция + 1); - МассивПредставлений.Добавить(Значение); - Позиция = Найти(ПараметрыПредметаИсчисления, ","); + ПараметрыПредметаИсчисления = СтрРазделить(ПараметрыПредметаИсчисления, ","); + Для Каждого Параметр Из ПараметрыПредметаИсчисления Цикл + ПредставленияПредмета.Добавить(СокрЛП(Параметр)); КонецЦикла; - Если СтрДлина(ПараметрыПредметаИсчисления) > 0 Тогда - Значение = СокрЛП(ПараметрыПредметаИсчисления); - МассивПредставлений.Добавить(Значение); - КонецЕсли; - - Если Число >= 100 Тогда - Число = Число - Цел(Число / 100)*100; - КонецЕсли; - + Число = Число % 100; Если Число > 20 Тогда - Число = Число - Цел(Число/10)*10; + Число = Число % 10; КонецЕсли; - Если Число = 1 Тогда - Результат = Результат + " " + МассивПредставлений[0]; - ИначеЕсли Число > 1 И Число < 5 Тогда - Результат = Результат + " " + МассивПредставлений[1]; - Иначе - Результат = Результат + " " + МассивПредставлений[2]; - КонецЕсли; + Индекс = ?(Число = 1, 0, ?(Число > 1 И Число < 5, 1, 2)); + Результат = Результат + " " + ПредставленияПредмета[Индекс]; + + Возврат Результат; - Возврат Результат; - КонецФункции // Очищает текст в формате HTML от тегов и возвращает неформатированный текст. @@ -840,65 +771,65 @@ Текст = НРег(ИсходныйТекст); // отрезаем все что не body - Позиция = Найти(Текст, "<body"); + Позиция = СтрНайти(Текст, "<body"); Если Позиция > 0 Тогда Текст = Сред(Текст, Позиция + 5); ИсходныйТекст = Сред(ИсходныйТекст, Позиция + 5); - Позиция = Найти(Текст, ">"); + Позиция = СтрНайти(Текст, ">"); Если Позиция > 0 Тогда Текст = Сред(Текст, Позиция + 1); ИсходныйТекст = Сред(ИсходныйТекст, Позиция + 1); КонецЕсли; КонецЕсли; - Позиция = Найти(Текст, "</body>"); + Позиция = СтрНайти(Текст, "</body>"); Если Позиция > 0 Тогда Текст = Лев(Текст, Позиция - 1); ИсходныйТекст = Лев(ИсходныйТекст, Позиция - 1); КонецЕсли; // вырезаем скрипты - Позиция = Найти(Текст, "<script"); + Позиция = СтрНайти(Текст, "<script"); Пока Позиция > 0 Цикл - ПозицияЗакрывающегоТега = Найти(Текст, "</script>"); + ПозицияЗакрывающегоТега = СтрНайти(Текст, "</script>"); Если ПозицияЗакрывающегоТега = 0 Тогда // Не найден закрывающий тег - вырезаем оставшийся текст. ПозицияЗакрывающегоТега = СтрДлина(Текст); КонецЕсли; Текст = Лев(Текст, Позиция - 1) + Сред(Текст, ПозицияЗакрывающегоТега + 9); ИсходныйТекст = Лев(ИсходныйТекст, Позиция - 1) + Сред(ИсходныйТекст, ПозицияЗакрывающегоТега + 9); - Позиция = Найти(Текст, "<script"); + Позиция = СтрНайти(Текст, "<script"); КонецЦикла; // вырезаем стили - Позиция = Найти(Текст, "<style"); + Позиция = СтрНайти(Текст, "<style"); Пока Позиция > 0 Цикл - ПозицияЗакрывающегоТега = Найти(Текст, "</style>"); + ПозицияЗакрывающегоТега = СтрНайти(Текст, "</style>"); Если ПозицияЗакрывающегоТега = 0 Тогда // Не найден закрывающий тег - вырезаем оставшийся текст. ПозицияЗакрывающегоТега = СтрДлина(Текст); КонецЕсли; Текст = Лев(Текст, Позиция - 1) + Сред(Текст, ПозицияЗакрывающегоТега + 8); ИсходныйТекст = Лев(ИсходныйТекст, Позиция - 1) + Сред(ИсходныйТекст, ПозицияЗакрывающегоТега + 8); - Позиция = Найти(Текст, "<style"); + Позиция = СтрНайти(Текст, "<style"); КонецЦикла; // вырезаем все теги - Позиция = Найти(Текст, "<"); + Позиция = СтрНайти(Текст, "<"); Пока Позиция > 0 Цикл Результат = Результат + Лев(ИсходныйТекст, Позиция-1); Текст = Сред(Текст, Позиция + 1); ИсходныйТекст = Сред(ИсходныйТекст, Позиция + 1); - Позиция = Найти(Текст, ">"); + Позиция = СтрНайти(Текст, ">"); Если Позиция > 0 Тогда Текст = Сред(Текст, Позиция + 1); ИсходныйТекст = Сред(ИсходныйТекст, Позиция + 1); КонецЕсли; - Позиция = Найти(Текст, "<"); + Позиция = СтрНайти(Текст, "<"); КонецЦикла; Результат = Результат + ИсходныйТекст; МассивСтрок = РазложитьСтрокуВМассивПодстрок(Результат, Символы.ПС, Истина, Истина); - Возврат СокрЛП(СтрокаИзМассиваПодстрок(МассивСтрок, Символы.ПС)); + Возврат СокрЛП(СтрСоединить(МассивСтрок, Символы.ПС)); КонецФункции // Преобразует исходную строку в транслит. @@ -939,12 +870,12 @@ Функция ФорматированнаяСтрока(Знач Строка) Экспорт СтрокиСВыделением = Новый СписокЗначений; - Пока Найти(Строка, "<b>") <> 0 Цикл - НачалоВыделения = Найти(Строка, "<b>"); + Пока СтрНайти(Строка, "<b>") <> 0 Цикл + НачалоВыделения = СтрНайти(Строка, "<b>"); СтрокаДоОткрывающегоТега = Лев(Строка, НачалоВыделения - 1); СтрокиСВыделением.Добавить(СтрокаДоОткрывающегоТега); СтрокаПослеОткрывающегоТега = Сред(Строка, НачалоВыделения + 3); - КонецВыделения = Найти(СтрокаПослеОткрывающегоТега, "</b>"); + КонецВыделения = СтрНайти(СтрокаПослеОткрывающегоТега, "</b>"); ВыделенныйФрагмент = Лев(СтрокаПослеОткрывающегоТега, КонецВыделения - 1); СтрокиСВыделением.Добавить(ВыделенныйФрагмент,, Истина); СтрокаПослеВыделения = Сред(СтрокаПослеОткрывающегоТега, КонецВыделения + 4); @@ -962,31 +893,31 @@ Продолжить; КонецЕсли; - НачалоВыделения = Найти(Строка, "<a href = "); + НачалоВыделения = СтрНайти(Строка, "<a href = "); Пока НачалоВыделения <> 0 Цикл СтрокаДоОткрывающегоТега = Лев(Строка, НачалоВыделения - 1); СтрокиСоСсылками.Добавить(СтрокаДоОткрывающегоТега, ); СтрокаПослеОткрывающегоТега = Сред(Строка, НачалоВыделения + 9); - ЗакрывающийТег = Найти(СтрокаПослеОткрывающегоТега, ">"); + ЗакрывающийТег = СтрНайти(СтрокаПослеОткрывающегоТега, ">"); Ссылка = СокрЛП(Лев(СтрокаПослеОткрывающегоТега, ЗакрывающийТег - 2)); - Если Лев(Ссылка, 1) = """" Тогда + Если СтрНачинаетсяС(Ссылка, """") Тогда Ссылка = Сред(Ссылка, 2, СтрДлина(Ссылка) - 1); КонецЕсли; - Если Прав(Ссылка, 1) = """" Тогда + Если СтрЗаканчиваетсяНа(Ссылка, """") Тогда Ссылка = Сред(Ссылка, 1, СтрДлина(Ссылка) - 1); КонецЕсли; СтрокаПослеСсылки = Сред(СтрокаПослеОткрывающегоТега, ЗакрывающийТег + 1); - КонецВыделения = Найти(СтрокаПослеСсылки, "</a>"); + КонецВыделения = СтрНайти(СтрокаПослеСсылки, "</a>"); ТекстСсылки = Лев(СтрокаПослеСсылки, КонецВыделения - 1); СтрокиСоСсылками.Добавить(ТекстСсылки, Ссылка); СтрокаПослеВыделения = Сред(СтрокаПослеСсылки, КонецВыделения + 4); Строка = СтрокаПослеВыделения; - НачалоВыделения = Найти(Строка, "<a href = "); + НачалоВыделения = СтрНайти(Строка, "<a href = "); КонецЦикла; СтрокиСоСсылками.Добавить(Строка); @@ -1025,7 +956,8 @@ Результат = 0; ЗнаковПослеЗапятой = -1; ЗнакОтрицательный = Ложь; - Для НомерСимвола = 1 По СтрДлина(ИсходнаяСтрока) Цикл + Длина = СтрДлина(ИсходнаяСтрока); + Для НомерСимвола = 1 По Длина Цикл КодСимвола = КодСимвола(ИсходнаяСтрока, НомерСимвола); Если КодСимвола = 32 Или КодСимвола = 160 Тогда // Пробел или неразрывный пробел. // Пропуск (действие не требуется). @@ -1065,6 +997,99 @@ Возврат Результат; КонецФункции +// Преобразует исходную строку в дату +// +// Параметры: +// ДатаСтрока - Строка - Строка, которую необходимо привести к дате. +// +// Возвращаемое значение: +// Дата - Полученная дата. +// +Функция СтрокаВДату(Знач ДатаСтрока) Экспорт + + ПозицияПробела = СтрНайти(ДатаСтрока, " ", НаправлениеПоиска.СНачала); + Если ПозицияПробела > 0 Тогда + ДатаСтрока = Лев(ДатаСтрока, ПозицияПробела - 1); + КонецЕсли; + ДатаСтрока = СокрЛП(СтрЗаменить(ДатаСтрока, ".", "")); + ДатаСтрока = Сред(ДатаСтрока, 5) + Сред(ДатаСтрока, 3, 2) + Лев(ДатаСтрока, 2); + Если СтрДлина(ДатаСтрока) = 6 Тогда + ДатаСтрока = "20" + ДатаСтрока; + КонецЕсли; + + ОписаниеТипа = Новый ОписаниеТипов("Дата"); + Результат = ОписаниеТипа.ПривестиЗначение(ДатаСтрока); + + Возврат Результат; + +КонецФункции + + +#Область УстаревшиеПроцедурыИФункции + +// Устарела. Следует использовать СтрСоединить. +// +// Объединяет строки из массива в строку с разделителями. +// +// Параметры: +// Массив - Массив - массив строк которые необходимо объединить в одну строку; +// Разделитель - Строка - любой набор символов, который будет использован в качестве разделителя. +// +// Возвращаемое значение: +// Строка - строка с разделителями. +// +Функция СтрокаИзМассиваПодстрок(Массив, Разделитель = ",", СокращатьНепечатаемыеСимволы = Ложь) Экспорт + + Результат = ""; + + Для Индекс = 0 По Массив.ВГраница() Цикл + Подстрока = Массив[Индекс]; + + Если СокращатьНепечатаемыеСимволы Тогда + Подстрока = СокрЛП(Подстрока); + КонецЕсли; + + Если ТипЗнч(Подстрока) <> Тип("Строка") Тогда + Подстрока = Строка(Подстрока); + КонецЕсли; + + Если Индекс > 0 Тогда + Результат = Результат + Разделитель; + КонецЕсли; + + Результат = Результат + Подстрока; + КонецЦикла; + + Возврат Результат; + +КонецФункции + +// Устарела. Следует использовать СтрНайти. +// +// Осуществляет поиск символа, начиная с конца строки. +// +// Параметры: +// Строка - Строка - строка, в которой осуществляется поиск; +// Символ - Строка - искомый символ. Допускается искать строку, содержащую более одного символа. +// +// Возвращаемое значение: +// Число - позиция символа в строке. +// Если строка не содержит указанного символа, то возвращается 0. +// +Функция НайтиСимволСКонца(Знач Строка, Знач Символ) Экспорт + + Для Позиция = -СтрДлина(Строка) По -1 Цикл + Если Сред(Строка, -Позиция, СтрДлина(Символ)) = Символ Тогда + Возврат -Позиция; + КонецЕсли; + КонецЦикла; + + Возврат 0; + +КонецФункции + +#КонецОбласти + #КонецОбласти #Область СлужебныеПроцедурыИФункции @@ -1114,7 +1139,7 @@ Знач Параметр7 = Неопределено, Знач Параметр8 = Неопределено, Знач Параметр9 = Неопределено) Результат = ""; - Позиция = Найти(СтрокаПодстановки, "%"); + Позиция = СтрНайти(СтрокаПодстановки, "%"); Пока Позиция > 0 Цикл Результат = Результат + Лев(СтрокаПодстановки, Позиция - 1); СимволПослеПроцента = Сред(СтрокаПодстановки, Позиция + 1, 1); @@ -1145,7 +1170,7 @@ Результат = Результат + ПодставляемыйПараметр; СтрокаПодстановки = Сред(СтрокаПодстановки, Позиция + 2); КонецЕсли; - Позиция = Найти(СтрокаПодстановки, "%"); + Позиция = СтрНайти(СтрокаПодстановки, "%"); КонецЦикла; Результат = Результат + СтрокаПодстановки; @@ -1192,37 +1217,4 @@ Возврат Соответствие; КонецФункции -//////////////////////////////////////////////////////////////////////////////// -// УСТАРЕВШИЕ ПРОЦЕДУРЫ И ФУНКЦИИ - -// Устарела. Следует использовать СтрокаИзМассиваПодстрок. -// -// Объединяет строки из массива в строку с разделителями. -// -// Параметры: -// Массив - Массив - массив строк которые необходимо объединить в одну строку; -// Разделитель - Строка - любой набор символов, который будет использован в качестве разделителя. -// -// Возвращаемое значение: -// Строка - строка с разделителями. -// -Функция ПолучитьСтрокуИзМассиваПодстрок(Массив, Разделитель = ",") Экспорт - - // Возвращаемое значение функции. - Результат = ""; - - Для Каждого Элемент Из Массив Цикл - - Подстрока = ?(ТипЗнч(Элемент) = Тип("Строка"), Элемент, Строка(Элемент)); - - РазделительПодстрок = ?(ПустаяСтрока(Результат), "", Разделитель); - - Результат = Результат + РазделительПодстрок + Подстрока; - - КонецЦикла; - - Возврат Результат; - -КонецФункции - #КонецОбласти diff --git a/SSL/src/CommonModules/ТекущиеДелаСервер/Module.bsl b/SSL/src/CommonModules/ТекущиеДелаСервер/Module.bsl index d68ea8e7c..1c849b673 100644 --- a/SSL/src/CommonModules/ТекущиеДелаСервер/Module.bsl +++ b/SSL/src/CommonModules/ТекущиеДелаСервер/Module.bsl @@ -16,7 +16,25 @@ // Функция РазделыДляОбъекта(ИмяОбъектаМетаданных) Экспорт ПринадлежностьОбъектов = ТекущиеДелаСлужебныйПовтИсп.ПринадлежностьОбъектовРазделамКомандногоИнтерфейса(); - Возврат ПринадлежностьОбъектов[ИмяОбъектаМетаданных]; + ПодсистемыКомандногоИнтерфейса = ПринадлежностьОбъектов[ИмяОбъектаМетаданных]; + Если ПодсистемыКомандногоИнтерфейса = Неопределено Тогда + ПодсистемыКомандногоИнтерфейса = Новый Массив; + КонецЕсли; + + Возврат ПодсистемыКомандногоИнтерфейса; +КонецФункции + +// Определяет, нужно ли выводить дело в списке дел пользователя. +// +// Параметры: +// ИдентификаторДела - Строка - идентификатор дела, которое надо искать в списке отключенных. +// +Функция ДелоОтключено(ИдентификаторДела) Экспорт + ОтключаемыеДела = Новый Массив; + ТекущиеДелаПереопределяемый.ПриОтключенииТекущихДел(ОтключаемыеДела); + + Возврат (ОтключаемыеДела.Найти(ИдентификаторДела) <> Неопределено) + КонецФункции #КонецОбласти diff --git a/SSL/src/CommonModules/ТекущиеДелаСлужебный/Module.bsl b/SSL/src/CommonModules/ТекущиеДелаСлужебный/Module.bsl index 490c5d7b0..aada72435 100644 --- a/SSL/src/CommonModules/ТекущиеДелаСлужебный/Module.bsl +++ b/SSL/src/CommonModules/ТекущиеДелаСлужебный/Module.bsl @@ -203,6 +203,39 @@ #Область СлужебныеПроцедурыИФункции +// Только для внутреннего использования. +// +Процедура УстановитьНачальныйПорядокРазделов(ТекущиеДела) Экспорт + + ПорядокРазделовКомандногоИнтерфейса = Новый Массив; + ТекущиеДелаПереопределяемый.ПриОпределенииПорядкаРазделовКомандногоИнтерфейса(ПорядокРазделовКомандногоИнтерфейса); + + Индекс = 0; + Для Каждого РазделКомандногоИнтерфейса Из ПорядокРазделовКомандногоИнтерфейса Цикл + Если ТипЗнч(РазделКомандногоИнтерфейса) = Тип("Строка") Тогда + РазделКомандногоИнтерфейса = СтрЗаменить(РазделКомандногоИнтерфейса, " ", ""); + Иначе + РазделКомандногоИнтерфейса = СтрЗаменить(РазделКомандногоИнтерфейса.ПолноеИмя(), ".", ""); + КонецЕсли; + ОтборСтрок = Новый Структура; + ОтборСтрок.Вставить("ИдентификаторВладельца", РазделКомандногоИнтерфейса); + + НайденныеСтроки = ТекущиеДела.НайтиСтроки(ОтборСтрок); + Для Каждого НайденнаяСтрока Из НайденныеСтроки Цикл + ИндексСтрокиВТаблице = ТекущиеДела.Индекс(НайденнаяСтрока); + Если ИндексСтрокиВТаблице = Индекс Тогда + Индекс = Индекс + 1; + Продолжить; + КонецЕсли; + + ТекущиеДела.Сдвинуть(ИндексСтрокиВТаблице, (Индекс - ИндексСтрокиВТаблице)); + Индекс = Индекс + 1; + КонецЦикла; + + КонецЦикла; + +КонецПроцедуры + // Только для внутреннего использования. // Процедура ПреобразоватьТаблицуТекущихДел(ТекущиеДела) @@ -223,7 +256,7 @@ Дело.ИдентификаторВладельца = СтрЗаменить(Дело.Владелец.ПолноеИмя(), ".", ""); Дело.ЭтоРаздел = Истина; - Дело.ПредставлениеРаздела = Дело.Владелец.Синоним; + Дело.ПредставлениеРаздела = ?(ЗначениеЗаполнено(Дело.Владелец.Синоним), Дело.Владелец.Синоним, Дело.Владелец.Имя); Иначе ЭтоИдентификаторДела = (ТекущиеДела.Найти(Дело.Владелец, "Идентификатор") <> Неопределено); Если ЭтоИдентификаторДела Тогда @@ -281,14 +314,4 @@ КонецФункции -// Только для внутреннего использования. -// -Функция ДелоОтключено(ИдентификаторДела) Экспорт - ОтключаемыеДела = Новый Массив; - ТекущиеДелаПереопределяемый.ПриОтключенииТекущихДел(ОтключаемыеДела); - - Возврат (ОтключаемыеДела.Найти(ИдентификаторДела) <> Неопределено) - -КонецФункции - #КонецОбласти diff --git a/SSL/src/CommonModules/ТрансляцияXDTOСлужебный/Module.bsl b/SSL/src/CommonModules/ТрансляцияXDTOСлужебный/Module.bsl index ea2fd2708..608bab552 100644 --- a/SSL/src/CommonModules/ТрансляцияXDTOСлужебный/Module.bsl +++ b/SSL/src/CommonModules/ТрансляцияXDTOСлужебный/Module.bsl @@ -130,7 +130,7 @@ ЭтапТаблицы = ТаблицаТрансляцииИнтерфейса.Добавить(); ЗаполнитьЗначенияСвойств(ЭтапТаблицы, ЭтапТрансляцииИнтерфейса); Версия = ЭтапТрансляцииИнтерфейса.Значение.РезультирующаяВерсия(); - Разряды = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(Версия, "."); + Разряды = СтрРазделить(Версия, "."); Итератор = 0; ВерсияЧислом = 0; Для Каждого Разряд Из Разряды Цикл diff --git a/SSL/src/CommonModules/УдалениеПомеченныхОбъектовСлужебный/Module.bsl b/SSL/src/CommonModules/УдалениеПомеченныхОбъектовСлужебный/Module.bsl index 7ae4e8f29..cad42d99c 100644 --- a/SSL/src/CommonModules/УдалениеПомеченныхОбъектовСлужебный/Module.bsl +++ b/SSL/src/CommonModules/УдалениеПомеченныхОбъектовСлужебный/Module.bsl @@ -32,7 +32,7 @@ // Процедура УдалениеПомеченныхПоРасписанию() Экспорт - ОбщегоНазначения.ПриНачалеВыполненияРегламентногоЗадания(); + ОбщегоНазначения.ПриНачалеВыполненияРегламентногоЗадания(Метаданные.РегламентныеЗадания.УдалениеПомеченных); Обработки.УдалениеПомеченныхОбъектов.УдалитьПомеченныеОбъектыИзРегламентногоЗадания(); diff --git a/SSL/src/CommonModules/УдаленноеАдминистрированиеСлужебный/Module.bsl b/SSL/src/CommonModules/УдаленноеАдминистрированиеСлужебный/Module.bsl index 23259b897..4ae16f745 100644 --- a/SSL/src/CommonModules/УдаленноеАдминистрированиеСлужебный/Module.bsl +++ b/SSL/src/CommonModules/УдаленноеАдминистрированиеСлужебный/Module.bsl @@ -39,18 +39,32 @@ Процедура ПриУстановкеЗначенийПараметровИБ(Знач ЗначенияПараметров) Экспорт Если ЗначенияПараметров.Свойство("URLСервиса") Тогда + Константы.ВнутреннийАдресМенеджераСервиса.Установить(ЗначенияПараметров.URLСервиса); ЗначенияПараметров.Удалить("URLСервиса"); + КонецЕсли; + Владелец = ОбщегоНазначения.ИдентификаторОбъектаМетаданных("Константа.ВнутреннийАдресМенеджераСервиса"); + Если ЗначенияПараметров.Свойство("ИмяСлужебногоПользователяСервиса") Тогда - Константы.ИмяСлужебногоПользователяМенеджераСервиса.Установить(ЗначенияПараметров.ИмяСлужебногоПользователяСервиса); + + УстановитьПривилегированныйРежим(Истина); + ОбщегоНазначения.ЗаписатьДанныеВБезопасноеХранилище(Владелец, ЗначенияПараметров.ИмяСлужебногоПользователяСервиса, "ИмяСлужебногоПользователяМенеджераСервиса"); + УстановитьПривилегированныйРежим(Ложь); + ЗначенияПараметров.Удалить("ИмяСлужебногоПользователяСервиса"); + КонецЕсли; Если ЗначенияПараметров.Свойство("ПарольСлужебногоПользователяСервиса") Тогда - Константы.ПарольСлужебногоПользователяМенеджераСервиса.Установить(ЗначенияПараметров.ПарольСлужебногоПользователяСервиса); + + УстановитьПривилегированныйРежим(Истина); + ОбщегоНазначения.ЗаписатьДанныеВБезопасноеХранилище(Владелец, ЗначенияПараметров.ПарольСлужебногоПользователяСервиса, "ПарольСлужебногоПользователяМенеджераСервиса"); + УстановитьПривилегированныйРежим(Ложь); + ЗначенияПараметров.Удалить("ПарольСлужебногоПользователяСервиса"); + КонецЕсли; КонецПроцедуры diff --git a/SSL/src/CommonModules/УправлениеДоступом/Module.bsl b/SSL/src/CommonModules/УправлениеДоступом/Module.bsl index cc82d1ad7..19063f374 100644 --- a/SSL/src/CommonModules/УправлениеДоступом/Module.bsl +++ b/SSL/src/CommonModules/УправлениеДоступом/Module.bsl @@ -107,11 +107,11 @@ Если ВРег(Строка.ВидДоступа) = ВРег("ПравоИзменения") Тогда ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Ошибка в функции ЕстьРоль модуля УправлениеДоступом. - |В наборе значений доступа указан вид доступа ПравоИзменения - |таблицы с идентификтором ""%1"". - |В ограничении проверки роли (как дополнительного права) - |может быть зависимость только от права Чтения.'"), + НСтр("ru = 'Ошибка в функции ЕстьРоль модуля УправлениеДоступом. + |В наборе значений доступа указан вид доступа ПравоИзменения + |таблицы с идентификтором ""%1"". + |В ограничении проверки роли (как дополнительного права) + |может быть зависимость только от права Чтения.'"), Строка.ЗначениеДоступа); КонецЕсли; ИначеЕсли ИменаВидовДоступа.Получить(Строка.ВидДоступа) <> Неопределено @@ -119,18 +119,16 @@ ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Ошибка в функции ЕстьРоль модуля УправлениеДоступом. - |Набор значений доступа содержит известный вид доступа ""%2"", + |Набор значений доступа содержит известный вид доступа ""%1"", |который не требуется указывать. | |Указывать требуется только специальные виды доступа |""ПравоЧтения"", ""ПравоИзменения"", если они используются.'"), - ТипЗнч(СсылкаНаОбъект), Строка.ВидДоступа); Иначе ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Ошибка в функции ЕстьРоль модуля УправлениеДоступом. - |Набор значений доступа содержит неизвестный вид доступа ""%2"".'"), - ТипЗнч(СсылкаНаОбъект), + |Набор значений доступа содержит неизвестный вид доступа ""%1"".'"), Строка.ВидДоступа); КонецЕсли; @@ -369,8 +367,8 @@ КонецЕсли; УстановитьПривилегированныйРежим(Истина); - ОписаниеПрав = УправлениеДоступомСлужебныйПовтИсп.Параметры( - ).ВозможныеПраваДляНастройкиПравОбъектов.ПоТипам.Получить(ТипЗнч(СсылкаНаОбъект)); + ВозможныеПрава = УправлениеДоступомСлужебныйПовтИсп.Параметры().ВозможныеПраваДляНастройкиПравОбъектов; + ОписаниеПрав = ВозможныеПрава.ПоТипам.Получить(ТипЗнч(СсылкаНаОбъект)); Если ОписаниеПрав = Неопределено Тогда ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( @@ -383,8 +381,7 @@ Если ОписаниеПрава = Неопределено Тогда ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Не найдено описание права ""%1"" для таблицы ""%2""'"), - Право, - СсылкаНаОбъект.Метаданные().ПолноеИмя()); + Право, СсылкаНаОбъект.Метаданные().ПолноеИмя()); КонецЕсли; Если НЕ ЗначениеЗаполнено(СсылкаНаОбъект) Тогда @@ -506,8 +503,7 @@ СозданиеНового = НЕ ЗначениеЗаполнено(Форма.Объект.Ссылка); Исключение ИнформацияОбОшибке = ИнформацияОбОшибке(); - ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - ЗаголовокОшибки + Символы.ПС + Символы.ПС + + ВызватьИсключение ЗаголовокОшибки + Символы.ПС + Символы.ПС + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Параметр СозданиеНового не указан, а автоматическое заполнение |из реквизита формы ""Объект.Ссылка"" недоступно по причине: |%1'"), КраткоеПредставлениеОшибки(ИнформацияОбОшибке)); @@ -519,8 +515,7 @@ ТипЗначенияДоступа = ТипЗнч(Форма.Объект.Ссылка); Исключение ИнформацияОбОшибке = ИнформацияОбОшибке(); - ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - ЗаголовокОшибки + Символы.ПС + Символы.ПС + + ВызватьИсключение ЗаголовокОшибки + Символы.ПС + Символы.ПС + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Параметр ТипЗначения не указан, а автоматическое заполнение |из реквизита формы ""Объект.Ссылка"" недоступно по причине: |%1'"), КраткоеПредставлениеОшибки(ИнформацияОбОшибке)); @@ -545,21 +540,19 @@ ГруппаЗначенийДоступа = Форма.Объект.ГруппаДоступа; Исключение ИнформацияОбОшибке = ИнформацияОбОшибке(); - ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - ЗаголовокОшибки + Символы.ПС + Символы.ПС + + ВызватьИсключение ЗаголовокОшибки + Символы.ПС + Символы.ПС + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Параметр Реквизит не указан, а автоматическое заполнение |из реквизита формы ""Объект.ГруппаДоступа"" недоступно по причине: |%1'"), КраткоеПредставлениеОшибки(ИнформацияОбОшибке)); КонецПопытки; Иначе - ПозицияТочки = Найти(Реквизит, "."); + ПозицияТочки = СтрНайти(Реквизит, "."); Если ПозицияТочки = 0 Тогда Попытка ГруппаЗначенийДоступа = Форма[Реквизит]; Исключение ИнформацияОбОшибке = ИнформацияОбОшибке(); - ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - ЗаголовокОшибки + Символы.ПС + Символы.ПС + + ВызватьИсключение ЗаголовокОшибки + Символы.ПС + Символы.ПС + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Не удалось получить значение реквизита формы ""%1"", указанного параметре Реквизит по причине: |%2'"), Реквизит, КраткоеПредставлениеОшибки(ИнформацияОбОшибке)); КонецПопытки; @@ -568,8 +561,7 @@ ГруппаЗначенийДоступа = Форма[Лев(Реквизит, ПозицияТочки - 1)][Сред(Реквизит, ПозицияТочки + 1)]; Исключение ИнформацияОбОшибке = ИнформацияОбОшибке(); - ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - ЗаголовокОшибки + Символы.ПС + Символы.ПС + + ВызватьИсключение ЗаголовокОшибки + Символы.ПС + Символы.ПС + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Не удалось получить значение реквизита формы ""%1"", указанного параметре Реквизит по причине: |%2'"), Реквизит, КраткоеПредставлениеОшибки(ИнформацияОбОшибке)); КонецПопытки; @@ -577,13 +569,12 @@ КонецЕсли; Если ТипЗнч(ГруппаЗначенийДоступа) <> СвойстваГрупп.Тип Тогда - ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - ЗаголовокОшибки + Символы.ПС + Символы.ПС + + ВызватьИсключение ЗаголовокОшибки + Символы.ПС + Символы.ПС + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Для значений доступа типа ""%1"" - |используются вид доступа ""%2"" с типом значений ""%3"", - |заданным в переопределяемом модуле. - |Но этот тип не совпадает с типом ""%4"" в форме значения - |доступа у реквизита ГруппаДоступа.'"), + |используются вид доступа ""%2"" с типом значений ""%3"", + |заданным в переопределяемом модуле. + |Но этот тип не совпадает с типом ""%4"" в форме значения + |доступа у реквизита ГруппаДоступа.'"), Строка(ТипЗначенияДоступа), Строка(СвойстваГрупп.ВидДоступа), Строка(СвойстваГрупп.Тип), @@ -634,7 +625,7 @@ Если Реквизит = Неопределено Тогда Форма.Объект.ГруппаДоступа = ГруппыЗначенийДляИзменения[0]; Иначе - ПозицияТочки = Найти(Реквизит, "."); + ПозицияТочки = СтрНайти(Реквизит, "."); Если ПозицияТочки = 0 Тогда Форма[Реквизит] = ГруппыЗначенийДляИзменения[0]; Иначе @@ -780,6 +771,305 @@ КонецФункции +// Устанавливает в условие ГДЕ динамического списка постоянные отборы +// на основе разрешенных значений доступа указанных типов в рамках всех групп доступа. +// Это позволяет в отдельных случаях ускорить открытие динамического списка. +// Если количество разрешенных значений в общей сложности получилось более 100, отбор не устанавливается. +// +// Параметры: +// Список - ДинамическийСписок - динамический список, в который нужно установить отборы. +// ОписаниеОтборов - Соответствие - со свойствами: +// * Ключ - Строка - имя поля основной таблицы динамического списка, для которого +// нужно установить условие <Поле> В (&РазрешенныеЗначения). +// * Значение - Тип - тип значений доступа, которые нужно включить в состав +// параметра "&РазрешенныеЗначения". +// - Массив - массив указанных выше типов. +// +Процедура НастроитьОтборыДинамическогоСписка(Список, ОписаниеОтборов) Экспорт + + Если Пользователи.ЭтоПолноправныйПользователь(,, Ложь) Тогда + Возврат; + КонецЕсли; + + Если ТипЗнч(Список) <> Тип("ДинамическийСписок") Тогда + ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Ошибка вызова процедуры НастроитьОтборыДинамическогоСписка общего модуля УправлениеДоступом. + |Значение параметра Список ""%1"" не является динамическим списком.'"), Строка(Список)); + КонецЕсли; + + Если Не ЗначениеЗаполнено(Список.ОсновнаяТаблица) Тогда + ВызватьИсключение + НСтр("ru = 'Ошибка вызова процедуры НастроитьОтборыДинамическогоСписка общего модуля УправлениеДоступом. + |У переданного динамического списка не указана основная таблица.'"); + КонецЕсли; + + Если Не Список.ПроизвольныйЗапрос Тогда + ВызватьИсключение + НСтр("ru = 'Ошибка вызова процедуры НастроитьОтборыДинамическогоСписка общего модуля УправлениеДоступом. + |У переданного динамического списка не установлен флажок ""Произвольный запрос"".'"); + КонецЕсли; + + СхемаЗапроса = Новый СхемаЗапроса; + СхемаЗапроса.УстановитьТекстЗапроса(Список.ТекстЗапроса); + Параметры = Новый Соответствие; + + Для Каждого ОписаниеОтбора Из ОписаниеОтборов Цикл + ИмяПоля = ОписаниеОтбора.Ключ; + Значения = РазрешенныеЗначенияДляДинамическогоСписка(Список.ОсновнаяТаблица, ОписаниеОтбора.Значение); + Если Значения = Неопределено Тогда + Продолжить; + КонецЕсли; + + Источники = СхемаЗапроса.ПакетЗапросов[0].Операторы[0].Источники; + Псевдоним = ""; + Для Каждого Источник Из Источники Цикл + Если Источник.Источник.ИмяТаблицы = Список.ОсновнаяТаблица Тогда + Псевдоним = Источник.Источник.Псевдоним; + Прервать; + КонецЕсли; + КонецЦикла; + Если Не ЗначениеЗаполнено(Псевдоним) Тогда + ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Ошибка вызова процедуры НастроитьОтборыДинамическогоСписка общего модуля УправлениеДоступом. + |У переданного динамического списка не удалось найти псевдоним основной таблицы + |""%1"".'"), Список.ОсновнаяТаблица); + КонецЕсли; + Отбор = СхемаЗапроса.ПакетЗапросов[0].Операторы[0].Отбор; + ИмяПараметра = "РазрешенныеЗначенияПоля" + ИмяПоля; + Параметры.Вставить(ИмяПараметра, Значения); + + Условие = Псевдоним + "." + ИмяПоля + " В (&" + ИмяПараметра + ")"; + Отбор.Добавить(Условие); + КонецЦикла; + + Список.ТекстЗапроса = СхемаЗапроса.ПолучитьТекстЗапроса(); + + Для Каждого КлючИЗначение Из Параметры Цикл + ОбновитьЗначениеПараметраКомпоновкиДанных(Список, КлючИЗначение.Ключ, КлючИЗначение.Значение); + КонецЦикла; + +КонецПроцедуры + +// Возвращает массив разрешенных значений указанных типов в рамках всех групп доступа. +// Используется в процедуре НастроитьОтборыДинамическогоСписка для ускорения открытия динамических списков. +// +// Параметры: +// Таблица - Строка - полное имя объекта метаданных, например, "Документ.РасходнаяНакладная". +// ТипЗначений - Тип - тип значений доступа, разрешенные значения которых нужно вернуть. +// - Массив - массив указанных выше типов. +// +// Возвращаемое значение: +// Неопределено - если количество разрешенных значений превышает 100. +// Массив - ссылки разрешенных значений указанных типов. +// +Функция РазрешенныеЗначенияДляДинамическогоСписка(Таблица, ТипЗначений) Экспорт + + Если ТипЗнч(ТипЗначений) <> Тип("Массив") Тогда + ТипыЗначений = Новый Массив; + ТипыЗначений.Добавить(ТипЗначений); + + ИначеЕсли ТипЗначений.Количество() = 0 Тогда + Возврат Неопределено; + Иначе + ТипыЗначений = ТипЗначений; + КонецЕсли; + + УстановитьПривилегированныйРежим(Истина); + + ТекстЗапросаГруппДоступа = + "ВЫБРАТЬ + | ГруппыДоступа.Ссылка КАК Ссылка + |ПОМЕСТИТЬ ГруппыДоступаПользователя + |ИЗ + | Справочник.ИдентификаторыОбъектовМетаданных КАК СвойстваТекущейТаблицы + | ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.ГруппыДоступа КАК ГруппыДоступа + | ПО (СвойстваТекущейТаблицы.ПолноеИмя = &ИмяОсновнойТаблицыСписка) + | И (ИСТИНА В + | (ВЫБРАТЬ ПЕРВЫЕ 1 + | ИСТИНА + | ИЗ + | РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступа + | ГДЕ + | ТаблицыГруппДоступа.Таблица = СвойстваТекущейТаблицы.Ссылка + | И ТаблицыГруппДоступа.ГруппаДоступа = ГруппыДоступа.Ссылка)) + | И (ГруппыДоступа.Ссылка В + | (ВЫБРАТЬ + | ГруппыДоступаПользователи.Ссылка КАК ГруппаДоступа + | ИЗ + | Справочник.ГруппыДоступа.Пользователи КАК ГруппыДоступаПользователи + | ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + | ПО + | СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь + | И СоставыГруппПользователей.ГруппаПользователей = ГруппыДоступаПользователи.Пользователь))"; + + ТекстЗапросаЗначенийБезГрупп = + "ВЫБРАТЬ ПЕРВЫЕ 100 + | ЗначенияБезГрупп.Ссылка КАК Ссылка + |ИЗ + | (ВЫБРАТЬ + | &ЗначениеПустойСсылки КАК Ссылка + | + | ОБЪЕДИНИТЬ ВСЕ + | + | ВЫБРАТЬ + | ЗначенияБезПустойСсылки.Ссылка + | ИЗ + | &ТаблицаЗначенийДоступа КАК ЗначенияБезПустойСсылки) КАК ЗначенияБезГрупп + |ГДЕ + | ИСТИНА В + | (ВЫБРАТЬ ПЕРВЫЕ 1 + | ИСТИНА + | ИЗ + | ГруппыДоступаПользователя КАК ГруппыДоступа + | ГДЕ + | ВЫБОР + | КОГДА ИСТИНА В + | (ВЫБРАТЬ ПЕРВЫЕ 1 + | ИСТИНА + | ИЗ + | РегистрСведений.ЗначенияГруппДоступа КАК Значения + | ГДЕ + | Значения.ГруппаДоступа = ГруппыДоступа.Ссылка + | И Значения.ЗначениеДоступа = ЗначенияБезГрупп.Ссылка) + | ТОГДА ИСТИНА + | ИНАЧЕ ЛОЖЬ + | КОНЕЦ = ВЫБОР + | КОГДА ИСТИНА В + | (ВЫБРАТЬ ПЕРВЫЕ 1 + | ИСТИНА + | ИЗ + | РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию + | ГДЕ + | ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка + | И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(ЗначенияБезГрупп.Ссылка) + | И ЗначенияПоУмолчанию.ВсеРазрешены = ЛОЖЬ) + | ТОГДА ИСТИНА + | ИНАЧЕ ЛОЖЬ + | КОНЕЦ)"; + + ТекстЗапросаЗначенийСГруппами = + "ВЫБРАТЬ ПЕРВЫЕ 100 + | ЗначенияСГруппами.Ссылка КАК Ссылка + |ИЗ + | (ВЫБРАТЬ + | &ЗначениеПустойСсылки КАК Ссылка + | + | ОБЪЕДИНИТЬ ВСЕ + | + | ВЫБРАТЬ + | ЗначенияБезПустойСсылки.Ссылка + | ИЗ + | &ТаблицаЗначенийДоступа КАК ЗначенияБезПустойСсылки) КАК ЗначенияСГруппами + |ГДЕ + | ИСТИНА В + | (ВЫБРАТЬ ПЕРВЫЕ 1 + | ИСТИНА + | ИЗ + | ГруппыДоступаПользователя КАК ГруппыДоступа + | ГДЕ + | ВЫБОР + | КОГДА ИСТИНА В + | (ВЫБРАТЬ ПЕРВЫЕ 1 + | ИСТИНА + | ИЗ + | РегистрСведений.ЗначенияГруппДоступа КАК Значения + | ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + | ПО + | Значения.ГруппаДоступа = ГруппыДоступа.Ссылка + | И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа + | И ГруппыЗначений.ЗначениеДоступа = ЗначенияСГруппами.Ссылка) + | ТОГДА ИСТИНА + | ИНАЧЕ ЛОЖЬ + | КОНЕЦ = ВЫБОР + | КОГДА ИСТИНА В + | (ВЫБРАТЬ ПЕРВЫЕ 1 + | ИСТИНА + | ИЗ + | РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию + | ГДЕ + | ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка + | И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(ЗначенияСГруппами.Ссылка) + | И ЗначенияПоУмолчанию.ВсеРазрешены = ЛОЖЬ) + | ТОГДА ИСТИНА + | ИНАЧЕ ЛОЖЬ + | КОНЕЦ)"; + + ТекстЗапросаВсеЗначения = + "ВЫБРАТЬ ПЕРВЫЕ 100 + | ВсеЗначения.Ссылка КАК Ссылка + |ИЗ + | (ВЫБРАТЬ + | &ЗначениеПустойСсылки КАК Ссылка + | + | ОБЪЕДИНИТЬ ВСЕ + | + | ВЫБРАТЬ + | ЗначенияБезПустойСсылки.Ссылка + | ИЗ + | &ТаблицаЗначенийДоступа КАК ЗначенияБезПустойСсылки) КАК ВсеЗначения"; + + СвойстваВидовДоступа = УправлениеДоступомСлужебныйПовтИсп.Параметры().СвойстваВидовДоступа; + ТекстЗапроса = ""; + АвторизованныйПользователь = Пользователи.АвторизованныйПользователь(); + ДобавитьТекущегоПользователя = Ложь; + ЕстьИспользуемыеВидыДоступа = Ложь; + + Для Каждого ТекущийТип Из ТипыЗначений Цикл + Свойства = СвойстваВидовДоступа.ПоТипамЗначений.Получить(ТекущийТип); + Если Свойства = Неопределено Тогда + ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Тип ""%1"" не является типом значений доступа'"), Строка(ТекущийТип)); + КонецЕсли; + Если Не УправлениеДоступомСлужебный.ВидДоступаИспользуется(Свойства.Имя) Тогда + ТекущийТекстЗапроса = ТекстЗапросаВсеЗначения; + Иначе + Если СвойстваВидовДоступа.ТипыЗначенийДоступаСГруппами.Получить(ТекущийТип) = Неопределено Тогда + ТекущийТекстЗапроса = ТекстЗапросаЗначенийБезГрупп; + Иначе + ТекущийТекстЗапроса = ТекстЗапросаЗначенийСГруппами; + КонецЕсли; + ЕстьИспользуемыеВидыДоступа = Истина; + КонецЕсли; + ТаблицаЗначенийДоступа = Метаданные.НайтиПоТипу(ТекущийТип).ПолноеИмя(); + ТекущийТекстЗапроса = СтрЗаменить(ТекущийТекстЗапроса, "&ТаблицаЗначенийДоступа", ТаблицаЗначенийДоступа); + ТекущийТекстЗапроса = СтрЗаменить(ТекущийТекстЗапроса, "&ЗначениеПустойСсылки", + "ЗНАЧЕНИЕ(" + ТаблицаЗначенийДоступа + ".ПустаяСсылка)"); + Если ЗначениеЗаполнено(ТекстЗапроса) Тогда + ОбъединитьЗапросСЗапросом(ТекстЗапроса, ТекущийТекстЗапроса); + Иначе + ТекстЗапроса = ТекущийТекстЗапроса; + КонецЕсли; + Если ТекущийТип = ТипЗнч(АвторизованныйПользователь) Тогда + ДобавитьТекущегоПользователя = Истина; + КонецЕсли; + КонецЦикла; + + Если Не ЕстьИспользуемыеВидыДоступа Тогда + Возврат Неопределено; + КонецЕсли; + + Запрос = Новый Запрос; + Запрос.УстановитьПараметр("ИмяОсновнойТаблицыСписка", Таблица); + Запрос.УстановитьПараметр("АвторизованныйПользователь", АвторизованныйПользователь); + Запрос.Текст = ТекстЗапросаГруппДоступа; + + ДобавитьЗапросВПакет(Запрос.Текст, ТекстЗапроса); + + Выгрузка = Запрос.Выполнить().Выгрузить(); + Если Выгрузка.Количество() > 100 Тогда + Возврат Неопределено; + КонецЕсли; + + РазрешенныеЗначения = Выгрузка.ВыгрузитьКолонку("Ссылка"); + + Если ДобавитьТекущегоПользователя Тогда + РазрешенныеЗначения.Добавить(АвторизованныйПользователь); + КонецЕсли; + + Возврат РазрешенныеЗначения; + +КонецФункции + //////////////////////////////////////////////////////////////////////////////// // Процедуры и функции для работы с наборами значений доступа. @@ -877,14 +1167,27 @@ КонецЕсли; Таблица = ?(ТипЗнч(Таблица) = Тип("ТаблицаЗначений"), Таблица, ТаблицаНаборыЗначенийДоступа()); - Объект.ЗаполнитьНаборыЗначенийДоступа(Таблица); + Попытка + Объект.ЗаполнитьНаборыЗначенийДоступа(Таблица); + Исключение + ИнформацияОбОшибке = ИнформацияОбОшибке(); + ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = '%1 ""%2"" + |не сформировал набор значений доступа по причине: + |%3'"), + ТипЗнч(СсылкаНаОбъект), + Объект, + ПодробноеПредставлениеОшибки(ИнформацияОбОшибке)); + КонецПопытки; Если Таблица.Количество() = 0 Тогда // Если это условие отключить, тогда зациклится регламентное задание // заполнения данных для ограничения доступа. ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Объект ""%1"" сформировал пустой набор значений доступа.'"), - ТипЗначенияОбъект); + НСтр("ru = '%1 ""%2"" + |сформировал пустой набор значений доступа.'"), + ТипЗнч(СсылкаНаОбъект), + Объект); КонецЕсли; УточнитьНаборыЗначенийДоступа(СсылкаНаОбъект, Таблица); @@ -1052,16 +1355,19 @@ КонецПроцедуры // Выполняет обновление наборов значений доступа объекта, если они изменились. -// Наборы обновляются в табличной части (если используется) и +// Наборы обновляются в табличной части (если используется) и // в регистре сведений НаборыЗначенийДоступа. // // Параметры: -// СсылкаНаОбъект - СправочникСсылка, ДокументСсылка и другие типы ссылок тех объектов -// метаданных, для которых заполняются наборы значений доступа. +// СсылкаИлиОбъект - СправочникСсылка, ДокументСсылка и другие типы ссылок - ссылка или объект, +// для которого заполняются наборы значений доступа. +// ОбновлениеИБ - Булево - если Истина, то необходимо выполнять запись данных, +// не выполняя лишних, избыточных действий с данными. +// См. ОбновлениеИнформационнойБазы.ЗаписатьДанные. // -Процедура ОбновитьНаборыЗначенийДоступа(СсылкаНаОбъект) Экспорт +Процедура ОбновитьНаборыЗначенийДоступа(СсылкаИлиОбъект, ОбновлениеИБ = Ложь) Экспорт - УправлениеДоступомСлужебный.ОбновитьНаборыЗначенийДоступа(СсылкаНаОбъект); + УправлениеДоступомСлужебный.ОбновитьНаборыЗначенийДоступа(СсылкаИлиОбъект,, ОбновлениеИБ); КонецПроцедуры @@ -1097,6 +1403,10 @@ Возврат; КонецЕсли; + Если СтандартныеПодсистемыСервер.ЭтоИдентификаторОбъектаМетаданных(Источник) Тогда + Возврат; + КонецЕсли; + Если НЕ ( ПривилегированныйРежим() И Источник.ДополнительныеСвойства.Свойство( "НаборыЗначенийДоступаТабличнойЧастиЗаполнены")) Тогда @@ -1113,14 +1423,31 @@ // Возвращает структуру для удобства описания поставляемых профилей. // -// Чтобы указать предустановленный вид доступа, -// нужно в представлении задать строку Предустановленный. +// Возвращаемое значение: +// Структура - со свойствами: +// * Имя - Строка - ИмяПредопределенныхДанных используется для привязки +// поставляемых данных к предопределенному элементу. +// * Идентификатор - Строка - строка уникального идентификатора поставляемого +// профиля, которая используется для поиска в базе данных. +// Чтобы получить идентификатор нужно создать профиль в режиме 1С:Предприятия и +// получить уникальный идентификатор ссылки. Не следует указывать идентификаторы, +// полученные произвольным способом, т.к. это может нарушить уникальность ссылок. +// * Наименование - Строка - наименование поставляемого профиля. +// * Описание - Строка - описание поставляемого профиля. +// * Роли - Массив - имена ролей поставляемого профиля. +// * Назначение - Массив - типы ссылок пользователя и объектов авторизации внешних +// пользователей. Если пустой, значит назначение для пользователей. +// Должны быть в пределах состава определяемого типа Пользователь. +// * ВидыДоступа - СписокЗначений - со свойствами: +// * Значение - Строка - имя вида доступа, указанного в переопределяемом +// модуле УправлениеДоступомПереопределяемый в процедуре ПриЗаполненииВидовДоступа. +// * Представление - Строка - допустимы строки "ВначалеВсеЗапрещены" (или пустая строка), +// "ВначалеВсеРазрешены", "Предустановленный". // -// Чтобы добавить значение доступа нужно указать полное имя предопределенного элемента, -// например, "Справочник.ГруппыПользователей.ВсеПользователи". -// -// Идентификатор извлекается из реального элемента в справочнике. -// Не следует брать идентификаторы, полученные произвольным способом. +// * ЗначенияДоступа - СписокЗначений - со свойствами: +// * Значение - Строка - имя вида доступа, указанного в параметре ВидыДоступа. +// * Представление - Строка - имя предопределенного элемента, например, +// "Справочник.ГруппыПользователей.ВсеПользователи". // // Пример: // @@ -1129,6 +1456,9 @@ // ОписаниеПрофиля.Имя = "Пользователь"; // ОписаниеПрофиля.Идентификатор = "09e56dbf-90a0-11de-862c-001d600d9ad2"; // ОписаниеПрофиля.Наименование = НСтр("ru = 'Пользователь'"); +// // Переопределение назначения. +// ОбщегоНазначенияКлиентСервер.ДополнитьМассив(ОписаниеПрофиля.Назначение, +// Метаданные.ОпределяемыеТипы.ВнешнийПользователь.Тип.Типы()); // ОписаниеПрофиля.Описание = // НСтр("ru = 'Общие разрешенные действия для большинства пользователей. // |Как правило, это права на просмотр данных информационной системы.'"); @@ -1168,12 +1498,12 @@ Функция НовоеОписаниеПрофиляГруппДоступа() Экспорт НовоеОписание = Новый Структура; - НовоеОписание.Вставить("Имя", ""); // ИмяПредопределенныхДанных используется для привязки - // поставляемых данных к предопределенному элементу. - НовоеОписание.Вставить("Идентификатор", ""); // ИдентификаторПоставляемыхДанных + НовоеОписание.Вставить("Имя", ""); + НовоеОписание.Вставить("Идентификатор", ""); НовоеОписание.Вставить("Наименование", ""); НовоеОписание.Вставить("Описание", ""); НовоеОписание.Вставить("Роли", Новый Массив); + НовоеОписание.Вставить("Назначение", Новый Массив); НовоеОписание.Вставить("ВидыДоступа", Новый СписокЗначений); НовоеОписание.Вставить("ЗначенияДоступа", Новый СписокЗначений); @@ -1499,8 +1829,8 @@ ИменаВидовДоступа = УправлениеДоступомСлужебныйПовтИсп.Параметры().СвойстваВидовДоступа.ПоИменам; - ТипыВладельцевНастроекПрав = УправлениеДоступомСлужебныйПовтИсп.Параметры( - ).ВозможныеПраваДляНастройкиПравОбъектов.ПоТипамСсылок; + ВозможныеПрава = УправлениеДоступомСлужебныйПовтИсп.Параметры().ВозможныеПраваДляНастройкиПравОбъектов; + ТипыВладельцевНастроекПрав = ВозможныеПрава.ПоТипамСсылок; Для каждого Строка Из Таблица Цикл @@ -1914,12 +2244,11 @@ СвойстваГрупп = Новый Структура; - СвойстваВидаДоступа = УправлениеДоступомСлужебныйПовтИсп.Параметры( - ).СвойстваВидовДоступа.ЗначенияДоступаСГруппами.ПоТипам.Получить(ТипЗначенияДоступа); + СвойстваВидовДоступа = УправлениеДоступомСлужебныйПовтИсп.Параметры().СвойстваВидовДоступа; + СвойстваВидаДоступа = СвойстваВидовДоступа.ЗначенияДоступаСГруппами.ПоТипам.Получить(ТипЗначенияДоступа); Если СвойстваВидаДоступа = Неопределено Тогда - ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - ЗаголовокОшибки + Символы.ПС + Символы.ПС + + ВызватьИсключение ЗаголовокОшибки + Символы.ПС + Символы.ПС + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Для значений доступа типа ""%1"" |не используются группы значений доступа.'"), Строка(ТипЗначенияДоступа)); @@ -1938,4 +2267,53 @@ КонецФункции +// Для функции РазрешенныеЗначения. +Процедура ДобавитьЗапросВПакет(ТекстПакета, ТекстЗапроса) + + Разделитель = + " + |; + | + |//////////////////////////////////////////////////////////////////////////////// + |"; + + ТекстПакета = ТекстПакета + Разделитель + ТекстЗапроса; + +КонецПроцедуры + +// Для функции РазрешенныеЗначения. +Процедура ОбъединитьЗапросСЗапросом(ТекстЗапроса, ДобавляемыйТекстЗапроса) + + Объединитель = + " + | + |ОБЪЕДИНИТЬ ВСЕ + | + |"; + + ТекстПакета = ТекстЗапроса + Объединитель + ДобавляемыйТекстЗапроса; + +КонецПроцедуры + +// Для функции РазрешенныеЗначения. +Процедура ОбновитьЗначениеПараметраКомпоновкиДанных(Знач ВладелецПараметров, + Знач ИмяПараметра, + Знач ЗначениеПараметра) + + Для каждого Параметр Из ВладелецПараметров.Параметры.Элементы Цикл + Если Строка(Параметр.Параметр) = ИмяПараметра Тогда + + Если Параметр.Использование + И Параметр.Значение = ЗначениеПараметра Тогда + Возврат; + КонецЕсли; + Прервать; + + КонецЕсли; + КонецЦикла; + + ВладелецПараметров.Параметры.УстановитьЗначениеПараметра(ИмяПараметра, ЗначениеПараметра); + +КонецПроцедуры + #КонецОбласти diff --git a/SSL/src/CommonModules/УправлениеДоступомПереопределяемый/Module.bsl b/SSL/src/CommonModules/УправлениеДоступомПереопределяемый/Module.bsl index d8127ba83..dde13c7ae 100644 --- a/SSL/src/CommonModules/УправлениеДоступомПереопределяемый/Module.bsl +++ b/SSL/src/CommonModules/УправлениеДоступомПереопределяемый/Module.bsl @@ -14,12 +14,12 @@ // * Имя - Строка - имя используемое в описании поставляемых // профилей групп доступа и текстах ОДД. // * Представление - Строка - представляет вид доступа в профилях и группах доступа. -// * ТипЗначений - Тип - тип ссылки значений доступа. Например, -// Тип("СправочникСсылка.Номенклатура"). -// * ТипГруппЗначений - Тип - тип ссылки групп значений доступа. Например, -// Тип("СправочникСсылка.ГруппыДоступаНоменклатуры"). -// * НесколькоГруппЗначений - Булево - Истина указывает, что для значения доступа (Номенклатуры), -// можно выбрать несколько групп значений (Групп доступа номенклатуры). +// * ТипЗначений - Тип - тип ссылки значений доступа. +// Например, Тип("СправочникСсылка.Номенклатура"). +// * ТипГруппЗначений - Тип - тип ссылки групп значений доступа. +// Например, Тип("СправочникСсылка.ГруппыДоступаНоменклатуры"). +// * НесколькоГруппЗначений - Булево - Истина указывает, что для значения доступа (Номенклатуры), можно +// выбрать несколько групп значений (Групп доступа номенклатуры). // Процедура ПриЗаполненииВидовДоступа(ВидыДоступа) Экспорт @@ -70,8 +70,8 @@ // // Параметры: // ЗависимостиПрав - ТаблицаЗначений - с колонками: -// * ВедущаяТаблица - Строка - например, "БизнесПроцесс.Задание". -// * ПодчиненнаяТаблица - Строка - например, "Задача.ЗадачаИсполнителя". +// * ВедущаяТаблица - Строка - например, Метаданные.БизнесПроцессы.Задание.ПолноеИмя(). +// * ПодчиненнаяТаблица - Строка - например, Метаданные.Задачи.ЗадачаИсполнителя.ПолноеИмя(). // Процедура ПриЗаполненииЗависимостейПравДоступа(ЗависимостиПрав) Экспорт diff --git a/SSL/src/CommonModules/УправлениеДоступомСлужебный/Module.bsl b/SSL/src/CommonModules/УправлениеДоступомСлужебный/Module.bsl index 376359c23..64609bf41 100644 --- a/SSL/src/CommonModules/УправлениеДоступомСлужебный/Module.bsl +++ b/SSL/src/CommonModules/УправлениеДоступомСлужебный/Module.bsl @@ -111,15 +111,16 @@ // Их можно удалить, если они не требуются для ограничения прав доступа. // // Параметры: - // ВидыДоступа - ТаблицаЗначений с полями: - // - Имя - Строка - имя используемое в описании поставляемых - // профилей групп доступа и текстах ОДД. - // - Представление - Строка - представляет вид доступа в профилях и группах доступа. - // - ТипЗначений - Тип - тип ссылки значений доступа. Например, Тип("СправочникСсылка.Номенклатура"). - // - ТипГруппЗначений - Тип - тип ссылки групп значений доступа. Например, - // Тип("СправочникСсылка.ГруппыДоступаНоменклатуры"). - // - НесколькоГруппЗначений - Булево - Истина указывает, что для значения доступа (Номенклатуры), - // можно выбрать несколько групп значений (Групп доступа номенклатуры). + // ВидыДоступа - ТаблицаЗначений - с колонками: + // * Имя - Строка - имя используемое в описании поставляемых + // профилей групп доступа и текстах ОДД. + // * Представление - Строка - представляет вид доступа в профилях и группах доступа. + // * ТипЗначений - Тип - тип ссылки значений доступа. + // Например, Тип("СправочникСсылка.Номенклатура"). + // * ТипГруппЗначений - Тип - тип ссылки групп значений доступа. + // Например, Тип("СправочникСсылка.ГруппыДоступаНоменклатуры"). + // * НесколькоГруппЗначений - Булево - Истина указывает, что для значения доступа (Номенклатуры), можно + // выбрать несколько групп значений (Групп доступа номенклатуры). // // Синтаксис: // Процедура ПриЗаполненииВидовДоступа(ВидыДоступа) Экспорт @@ -166,8 +167,8 @@ // например, ИспользоватьГруппыДоступаНоменклатуры. // // Параметры: - // ВидДоступа - Строка. Имя вида доступа заданное в процедуре ПриЗаполненииВидовДоступа. - // Использование - Булево (возвращаемое значение). Начальное значение Истина. + // ВидДоступа - Строка - имя вида доступа заданное в процедуре ПриЗаполненииВидовДоступа. + // Использование - Булево - начальное значение Истина. // // Синтаксис: // Процедура ПриЗаполненииИспользованияВидаДоступа(ИмяВидаДоступа, Использование) Экспорт @@ -224,10 +225,7 @@ СерверныеОбработчики["СтандартныеПодсистемы.ОбновлениеВерсииИБ\ПослеОбновленияИнформационнойБазы"].Добавить( "УправлениеДоступомСлужебный"); - СерверныеОбработчики["СтандартныеПодсистемы.БазоваяФункциональность\ПриДобавленииОбработчиковУстановкиПараметровСеанса"].Добавить( - "УправлениеДоступомСлужебный"); - - СерверныеОбработчики["СтандартныеПодсистемы.БазоваяФункциональность\ПриДобавленииПараметровРаботыКлиентскойЛогикиСтандартныхПодсистем"].Добавить( + СерверныеОбработчики["СтандартныеПодсистемы.БазоваяФункциональность\ПриДобавленииПараметровРаботыКлиента"].Добавить( "УправлениеДоступомСлужебный"); СерверныеОбработчики["СтандартныеПодсистемы.БазоваяФункциональность\ПриДобавленииИсключенийПоискаСсылок"].Добавить( @@ -254,18 +252,6 @@ СерверныеОбработчики["СтандартныеПодсистемы.БазоваяФункциональность\ПриПолученииОбъектовНачальногоОбразаПланаОбмена"].Добавить( "УправлениеДоступомСлужебный"); - СерверныеОбработчики["СтандартныеПодсистемы.Пользователи\ПриОпределенииЗапретаРедактированияРолей"].Добавить( - "УправлениеДоступомСлужебный"); - - СерверныеОбработчики["СтандартныеПодсистемы.Пользователи\ПриОпределенииДействийВФорме"].Добавить( - "УправлениеДоступомСлужебный"); - - СерверныеОбработчики["СтандартныеПодсистемы.Пользователи\ПриОпределенииТекстаВопросаПередЗаписьюПервогоАдминистратора"].Добавить( - "УправлениеДоступомСлужебный"); - - СерверныеОбработчики["СтандартныеПодсистемы.Пользователи\ПриЗаписиАдминистратора"].Добавить( - "УправлениеДоступомСлужебный"); - Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ВариантыОтчетов") Тогда СерверныеОбработчики["СтандартныеПодсистемы.ВариантыОтчетов\ПриНастройкеВариантовОтчетов"].Добавить( "УправлениеДоступомСлужебный"); @@ -422,7 +408,7 @@ Запрос.Текст = "ВЫБРАТЬ РАЗЛИЧНЫЕ | ЗначенияПоУмолчанию.ТипЗначенийДоступа КАК ТипЗначений, - | ЗначенияПоУмолчанию.БезНастройки КАК БезНастройки + | ЗначенияПоУмолчанию.ВсеРазрешеныБезИсключений КАК ВсеРазрешеныБезИсключений |ПОМЕСТИТЬ ЗначенияПоУмолчаниюДляПользователя |ИЗ | РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию @@ -449,9 +435,9 @@ | ЗначенияПоУмолчанию.ТипЗначений | |ИМЕЮЩИЕ - | МИНИМУМ(ЗначенияПоУмолчанию.БезНастройки) = ИСТИНА"; + | МИНИМУМ(ЗначенияПоУмолчанию.ВсеРазрешеныБезИсключений) = ИСТИНА"; - ТипыЗначенийБезНастройки = Запрос.Выполнить().Выгрузить().ВыгрузитьКолонку("ТипЗначений"); + ТипыЗначенийВсеРазрешеныБезИсключений = Запрос.Выполнить().Выгрузить().ВыгрузитьКолонку("ТипЗначений"); // Установка параметров ВсеВидыДоступаКромеСпециальных, ВидыДоступаСОтключеннымИспользованием. ВсеВидыДоступаКромеСпециальных = Новый Массив; @@ -463,7 +449,7 @@ ВсеВидыДоступаКромеСпециальных.Добавить(СвойстваВидаДоступа.Имя); Если НЕ ВидДоступаИспользуется(СвойстваВидаДоступа.Ссылка) - ИЛИ ТипыЗначенийБезНастройки.Найти(СвойстваВидаДоступа.Ссылка) <> Неопределено Тогда + ИЛИ ТипыЗначенийВсеРазрешеныБезИсключений.Найти(СвойстваВидаДоступа.Ссылка) <> Неопределено Тогда ВидыДоступаСОтключеннымИспользованием.Добавить(СвойстваВидаДоступа.Имя); КонецЕсли; @@ -526,26 +512,6 @@ КонецПроцедуры -// Переопределяет поведение после получения данных в распределенной ИБ. -Процедура ПослеПолученияДанных(Отправитель, Отказ, ОтПодчиненного) Экспорт - - УправлениеДоступом.ОбновитьРолиПользователей(); - -КонецПроцедуры - -// Заполняет структуру параметров, необходимых для работы клиентского кода -// конфигурации. -// -// Параметры: -// Параметры - Структура - структура параметров. -// -Процедура ДобавитьПараметрыРаботыКлиента(Параметры) Экспорт - - Параметры.Вставить("УпрощенныйИнтерфейсНастройкиПравДоступа", - УпрощенныйИнтерфейсНастройкиПравДоступа()); - -КонецПроцедуры - // Обновляет состав пользователей указанных групп исполнителей. // // Требуется вызывать при изменении состава пользователей у групп исполнителей, @@ -583,24 +549,53 @@ //////////////////////////////////////////////////////////////////////////////// // Обработчики условных вызовов в эту подсистему. -// Переопределяет текст комментария при авторизации пользователя ИБ, -// созданного в конфигураторе с административными правами. -// Вызывается из Пользователи.АвторизоватьТекущегоПользователя(). -// Комментарий записывается в журнал регистрации. -// -// Параметры: -// Комментарий - Строка - начальное значение задано. +// См. описание одноименной процедуры в общем модуле РегламентныеЗаданияПереопределяемый. // -Процедура ПослеЗаписиАдминистратораПриАвторизации(Комментарий) Экспорт +Процедура ПриОпределенииЗависимостейРегламентныхЗаданий(Зависимости) Экспорт + Зависимость = Зависимости.Добавить(); + Зависимость.РегламентноеЗадание = Метаданные.РегламентныеЗадания.ЗаполнениеДанныхДляОграниченияДоступа; + Зависимость.ФункциональнаяОпция = Метаданные.ФункциональныеОпции.ОграничиватьДоступНаУровнеЗаписей; +КонецПроцедуры + +// Возвращает соответствие имен параметров сеанса и обработчиков для их инициализации. +// +Процедура ПриДобавленииОбработчиковУстановкиПараметровСеанса(Обработчики) Экспорт - Комментарий = НСтр("ru = 'Обнаружено, что пользователь информационной базы - |с ролью ""Полные права"" был создан в Конфигураторе: - | - |- пользователь не найден в справочнике Пользователи, - |- пользователь зарегистрирован в справочнике Пользователи, - |- пользователь добавлен в группу доступа Администраторы. - | - |Пользователей информационной базы следует создавать в режиме 1С:Предприятия.'"); + Обработчики.Вставить("ВидыДоступа*", + "УправлениеДоступомСлужебный.УстановкаПараметровСеанса"); + + Обработчики.Вставить("ВсеВидыДоступаКромеСпециальных", + "УправлениеДоступомСлужебный.УстановкаПараметровСеанса"); + + Обработчики.Вставить("ТаблицыСОтдельнымиНастройкамиПрав", + "УправлениеДоступомСлужебный.УстановкаПараметровСеанса"); + + Обработчики.Вставить("ТипыЗначенийДоступаСГруппами", + "УправлениеДоступомСлужебный.УстановкаПараметровСеанса"); + + Обработчики.Вставить("ТипыВладельцевНастроекПрав", + "УправлениеДоступомСлужебный.УстановкаПараметровСеанса"); + + Обработчики.Вставить("ИдентификаторыТаблицСОтдельнымиНастройкамиПрав", + "УправлениеДоступомСлужебный.УстановкаПараметровСеанса"); + +КонецПроцедуры + +// Вызовы из подсистемы Пользователи. + +// См. одноименную процедуру в общем модуле ПользователиПереопределяемый. +Процедура ПриОпределенииНастроек(Настройки) Экспорт + + // Роли устанавливаются автоматически по данным групп доступа + // через связь: ПользователиГруппыДоступа -> Профиль -> РолиПрофиля. + Настройки.РедактированиеРолей = Ложь; + +КонецПроцедуры + +// См. процедуру ИзменитьДействияВФорме в общем модуле ПользователиПереопределяемый. +Процедура ПриОпределенииДействийВФорме(Ссылка, ДействияВФорме) Экспорт + + ДействияВФорме.Роли = ""; КонецПроцедуры @@ -644,6 +639,152 @@ КонецПроцедуры +// Переопределяет текст комментария при авторизации пользователя ИБ, +// созданного в конфигураторе с административными правами. +// Вызывается из Пользователи.АвторизоватьТекущегоПользователя(). +// Комментарий записывается в журнал регистрации. +// +// Параметры: +// Комментарий - Строка - начальное значение задано. +// +Процедура ПослеЗаписиАдминистратораПриАвторизации(Комментарий) Экспорт + + Комментарий = НСтр("ru = 'Обнаружено, что пользователь информационной базы + |с ролью ""Полные права"" был создан в Конфигураторе: + | + |- пользователь не найден в справочнике Пользователи, + |- пользователь зарегистрирован в справочнике Пользователи, + |- пользователь добавлен в группу доступа Администраторы. + | + |Пользователей информационной базы следует создавать в режиме 1С:Предприятия.'"); + +КонецПроцедуры + +// Доопределяет действия, необходимые после установки пользователя +// информационной базы у пользователя или внешнего пользователя, +// т.е. при изменении реквизита ИдентификаторПользователяИБ на не пустой. +// +// Например, можно обновить роли. +// +// Параметры: +// Ссылка - СправочникСсылка.Пользователи, СправочникСсылка.ВнешниеПользователи - пользователь. +// +Процедура ПослеУстановкиПользователяИБ(Ссылка, ПарольПользователяСервиса) Экспорт + + УправлениеДоступом.ОбновитьРолиПользователей(Ссылка, ПарольПользователяСервиса); + +КонецПроцедуры + +// Позволяет переопределить текст вопроса перед записью первого администратора. +// Вызывается из обработчика ПередЗаписью формы пользователя. +// Вызов выполняется если установлен ЗапретРедактированияРолей() и +// количество пользователей информационной базы равно нулю. +// +// Параметры: +// ТекстВопроса - Строка - текст вопроса, который можно переопределить. +// +Процедура ПриОпределенииТекстаВопросаПередЗаписьюПервогоАдминистратора(ТекстВопроса) Экспорт + + ТекстВопроса = НСтр("ru = 'В список пользователей программы добавляется первый пользователь, + |поэтому он будет автоматически включен в группу доступа Администраторы. + |Продолжить?'") + +КонецПроцедуры + +// Доопределяет действия при записи пользователя, когда он записывается +// совместно с пользователем ИБ, у которого есть роль ПолныеПрава. +// +// Параметры: +// Пользователь - СправочникСсылка.Пользователи (изменение объекта запрещено). +// +Процедура ПриЗаписиАдминистратора(Пользователь) Экспорт + + // Администраторы автоматически добавляются в группу доступа Администраторы. + Если ПривилегированныйРежим() Тогда + Объект = Справочники.ГруппыДоступа.Администраторы.ПолучитьОбъект(); + Если Объект.Пользователи.Найти(Пользователь, "Пользователь") = Неопределено Тогда + Объект.Пользователи.Добавить().Пользователь = Пользователь; + ОбновлениеИнформационнойБазы.ЗаписатьДанные(Объект); + КонецЕсли; + КонецЕсли; + +КонецПроцедуры + +// Обновляет связь для новой группы пользователей (группы внешних пользователей). +// +// Параметры: +// Ссылка - СправочникСсылка.Пользователи, +// СправочникСсылка.ГруппыПользователей, +// СправочникСсылка.ВнешниеПользователи, +// СправочникСсылка.ГруппыВнешнихПользователей - измененный объект. +// +// ЭтоНовый - Булево, если Истина, объект был добавлен, иначе изменен. +// +Процедура ПослеДобавленияИзмененияПользователяИлиГруппы(Ссылка, ЭтоНовый) Экспорт + + Если ЭтоНовый Тогда + Если ТипЗнч(Ссылка) = Тип("СправочникСсылка.ГруппыПользователей") + ИЛИ ТипЗнч(Ссылка) = Тип("СправочникСсылка.ГруппыВнешнихПользователей") Тогда + + Параметры = Новый Структура; + Параметры.Вставить("ГруппыПользователей", Ссылка); + РегистрыСведений.ГруппыЗначенийДоступа.ОбновитьГруппировкиПользователей(Параметры); + КонецЕсли; + КонецЕсли; + +КонецПроцедуры + +// Обновляет группировки пользователей после обновления составов групп пользователей +// используемых для выполнения проверок разрешенных пользователей. +// +// Параметры: +// УчастникиИзменений - Массив значений типов: +// - СправочникСсылка.Пользователи. +// - СправочникСсылка.ВнешниеПользователи. +// Пользователи которые участвовали в изменении состава групп. +// +// ИзмененныеГруппы - Массив значений типов: +// - СправочникСсылка.ГруппыПользователей. +// - СправочникСсылка.ГруппыВнешнихПользователей. +// Группы, состав которых был изменен. +// +Процедура ПослеОбновленияСоставовГруппПользователей(УчастникиИзменений, ИзмененныеГруппы) Экспорт + + Параметры = Новый Структура; + Параметры.Вставить("Пользователи", УчастникиИзменений); + Параметры.Вставить("ГруппыПользователей", ИзмененныеГруппы); + + РегистрыСведений.ГруппыЗначенийДоступа.ОбновитьГруппировкиПользователей(Параметры); + + УправлениеДоступом.ОбновитьРолиПользователей(УчастникиИзменений); + +КонецПроцедуры + +// Обновляет группировки внешних пользователей по объекту авторизации. +// +// Параметры: +// ВнешнийПользователь - СправочникСсылка.ВнешниеПользователи - внешний пользователь. +// СтарыйОбъектАвторизации - NULL - при добавлении внешнего пользователя. +// - ОпределяемыйТип.ВнешнийПользователь - тип объекта авторизации. +// НовыйОбъектАвторизации - ОпределяемыйТип.ВнешнийПользователь - тип объекта авторизации. +// +Процедура ПослеИзмененияОбъектаАвторизацииВнешнегоПользователя(ВнешнийПользователь, + СтарыйОбъектАвторизации, + НовыйОбъектАвторизации) Экспорт + + ОбъектыАвторизации = Новый Массив; + Если СтарыйОбъектАвторизации <> NULL Тогда + ОбъектыАвторизации.Добавить(СтарыйОбъектАвторизации); + КонецЕсли; + ОбъектыАвторизации.Добавить(НовыйОбъектАвторизации); + + Параметры = Новый Структура; + Параметры.Вставить("ОбъектыАвторизации", ОбъектыАвторизации); + + РегистрыСведений.ГруппыЗначенийДоступа.ОбновитьГруппировкиПользователей(Параметры); + +КонецПроцедуры + // Дополняет массив проверяемых ролей профильными ролями. Процедура ПередПроверкойДоступностиРолей(МассивИменРолей) Экспорт @@ -670,6 +811,49 @@ КонецПроцедуры +//////////////////////////////////////////////////////////////////////////////// +// Прочие процедуры и функции. + +// Возвращает профили текущего пользователя у которых есть роль БазовыеПрава или +// или это профиль Администратор. +// +// Возвращаемое значение: +// Массив - содержит элементы типа СправочникСсылка.ПрофилиГруппДоступа. +// +Функция ОсновныеПрофилиПользователя() Экспорт + + Запрос = Новый Запрос; + Запрос.Параметры.Вставить("АвторизованныйПользователь", Пользователи.АвторизованныйПользователь()); + Запрос.Параметры.Вставить("РольБазовыеПрава", ОбщегоНазначения.ИдентификаторОбъектаМетаданных( + Метаданные.Роли.БазовыеПрава)); + + Запрос.Текст = + "ВЫБРАТЬ РАЗЛИЧНЫЕ + | ГруппыДоступа.Профиль КАК Профиль + |ИЗ + | Справочник.ГруппыДоступа.Пользователи КАК ГруппыДоступаПользователи + | ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + | ПО (СоставыГруппПользователей.ГруппаПользователей = ГруппыДоступаПользователи.Пользователь) + | И (СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь) + | И (СоставыГруппПользователей.Используется) + | ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.ГруппыДоступа КАК ГруппыДоступа + | ПО (ГруппыДоступа.Ссылка = ГруппыДоступаПользователи.Ссылка) + | И (НЕ ГруппыДоступа.ПометкаУдаления) + | И (НЕ ГруппыДоступа.Профиль.ПометкаУдаления) + | И (НЕ(НЕ ГруппыДоступа.Профиль = ЗНАЧЕНИЕ(Справочник.ПрофилиГруппДоступа.Администратор) + | И НЕ ИСТИНА В + | (ВЫБРАТЬ ПЕРВЫЕ 1 + | ИСТИНА + | ИЗ + | Справочник.ПрофилиГруппДоступа.Роли КАК РолиПрофилей + | ГДЕ + | РолиПрофилей.Ссылка = ГруппыДоступа.Профиль + | И РолиПрофилей.Роль = &РольБазовыеПрава)))"; + + Возврат Запрос.Выполнить().Выгрузить().ВыгрузитьКолонку("Профиль"); + +КонецФункции + #КонецОбласти #Область СлужебныеПроцедурыИФункции @@ -704,14 +888,14 @@ Если Пользователи1 = Неопределено Тогда МассивПользователей = Неопределено; - Пользователи.НайтиНеоднозначныхПользователейИБ(,); + Пользователи.НайтиНеоднозначныхПользователейИБ(Неопределено); ИначеЕсли ТипЗнч(Пользователи1) = Тип("Массив") Тогда МассивПользователей = Пользователи1; Если МассивПользователей.Количество() = 0 Тогда Возврат; КонецЕсли; - Пользователи.НайтиНеоднозначныхПользователейИБ(,); + Пользователи.НайтиНеоднозначныхПользователейИБ(Неопределено); ИначеЕсли ТипЗнч(Пользователи1) = Тип("Тип") Тогда МассивПользователей = Пользователи1; @@ -884,25 +1068,28 @@ // Проверка группы доступа Администраторы перед записью. Процедура ПроверитьНаличиеПользователяИБВГруппеДоступаАдминистраторы(ПользователиГруппы, ОписаниеОшибки) Экспорт - Пользователи.НайтиНеоднозначныхПользователейИБ(,); + Пользователи.НайтиНеоднозначныхПользователейИБ(Неопределено); // Проверка пустого списка пользователей ИБ в группе доступа Администраторы. УстановитьПривилегированныйРежим(Истина); НайденДействующийАдминистратор = Ложь; - Для каждого ОписаниеПользователя Из ПользователиГруппы Цикл + Для Каждого ОписаниеПользователя Из ПользователиГруппы Цикл - Если ЗначениеЗаполнено(ОписаниеПользователя.Пользователь) Тогда + Если Не ЗначениеЗаполнено(ОписаниеПользователя.Пользователь) + Или ТипЗнч(ОписаниеПользователя.Пользователь) <> Тип("СправочникСсылка.Пользователи") + И ТипЗнч(ОписаниеПользователя.Пользователь) <> Тип("СправочникСсылка.Пользователи") Тогда + Продолжить; + КонецЕсли; + + ПользовательИБ = ПользователиИнформационнойБазы.НайтиПоУникальномуИдентификатору( + ОписаниеПользователя.Пользователь.ИдентификаторПользователяИБ); + + Если ПользовательИБ <> Неопределено + И Пользователи.ВходВПрограммуРазрешен(ПользовательИБ) Тогда - ПользовательИБ = ПользователиИнформационнойБазы.НайтиПоУникальномуИдентификатору( - ОписаниеПользователя.Пользователь.ИдентификаторПользователяИБ); - - Если ПользовательИБ <> Неопределено - И Пользователи.ВходВПрограммуРазрешен(ПользовательИБ) Тогда - - НайденДействующийАдминистратор = Истина; - Прервать; - КонецЕсли; + НайденДействующийАдминистратор = Истина; + Прервать; КонецЕсли; КонецЦикла; @@ -1038,6 +1225,21 @@ Обработчик.Процедура = "УправлениеДоступом.ОбновитьРолиПользователей"; Обработчик.РежимВыполнения = "Оперативно"; + Обработчик = Обработчики.Добавить(); + Обработчик.Версия = "2.3.1.61"; + Обработчик.Процедура = "УправлениеДоступомСлужебный.ЗаполнитьНазначениеПрофилейГруппДоступа"; + Обработчик.РежимВыполнения = "Оперативно"; + + Обработчик = Обработчики.Добавить(); + Обработчик.Версия = "2.3.1.55"; + Обработчик.Процедура = "УправлениеДоступомСлужебный.ЗаменитьУдаленныеРолиВПрофиляхГруппДоступа"; + Обработчик.РежимВыполнения = "Оперативно"; + + Обработчик = Обработчики.Добавить(); + Обработчик.Версия = "2.3.1.79"; + Обработчик.Процедура = "РегистрыСведений.ЗначенияГруппДоступа.ОбновитьДанныеРегистра"; + Обработчик.РежимВыполнения = "Оперативно"; + КонецПроцедуры // См. комментарий одноименной процедуры общего модуля ОбновлениеИнформационнойБазыПереопределяемый. @@ -1060,39 +1262,16 @@ КонецПроцедуры -// Возвращает соответствие имен параметров сеанса и обработчиков для их инициализации. -// -Процедура ПриДобавленииОбработчиковУстановкиПараметровСеанса(Обработчики) Экспорт - - Обработчики.Вставить("ВидыДоступа*", - "УправлениеДоступомСлужебный.УстановкаПараметровСеанса"); - - Обработчики.Вставить("ВсеВидыДоступаКромеСпециальных", - "УправлениеДоступомСлужебный.УстановкаПараметровСеанса"); - - Обработчики.Вставить("ТаблицыСОтдельнымиНастройкамиПрав", - "УправлениеДоступомСлужебный.УстановкаПараметровСеанса"); - - Обработчики.Вставить("ТипыЗначенийДоступаСГруппами", - "УправлениеДоступомСлужебный.УстановкаПараметровСеанса"); - - Обработчики.Вставить("ТипыВладельцевНастроекПрав", - "УправлениеДоступомСлужебный.УстановкаПараметровСеанса"); - - Обработчики.Вставить("ИдентификаторыТаблицСОтдельнымиНастройкамиПрав", - "УправлениеДоступомСлужебный.УстановкаПараметровСеанса"); - -КонецПроцедуры - // Заполняет структуру параметров, необходимых для работы клиентского кода // конфигурации. // // Параметры: // Параметры - Структура - структура параметров. // -Процедура ПриДобавленииПараметровРаботыКлиентскойЛогикиСтандартныхПодсистем(Параметры) Экспорт +Процедура ПриДобавленииПараметровРаботыКлиента(Параметры) Экспорт - ДобавитьПараметрыРаботыКлиента(Параметры); + Параметры.Вставить("УпрощенныйИнтерфейсНастройкиПравДоступа", + УпрощенныйИнтерфейсНастройкиПравДоступа()); КонецПроцедуры @@ -1335,78 +1514,6 @@ КонецПроцедуры -// Обработчики событий подсистемы Пользователи. - -// Переопределяет стандартный способ установки ролей пользователям ИБ. -// -// Параметры: -// Запрет - Булево. Если установить Истина, изменение ролей -// блокируется (в том числе для администратора). -// -Процедура ПриОпределенииЗапретаРедактированияРолей(Запрет) Экспорт - - // Роли устанавливаются автоматически по данным групп доступа - // через связь: ПользователиГруппыДоступа -> Профиль -> РолиПрофиля. - Запрет = Истина; - -КонецПроцедуры - -// Переопределяет поведение формы пользователя, формы внешнего пользователя и -// формы группы внешних пользователей. -// -// Параметры: -// Ссылка - СправочникСсылка.Пользователи, -// СправочникСсылка.ВнешниеПользователи, -// СправочникСсылка.ГруппыВнешнихПользователей -// ссылка на пользователя, внешнего пользователя или группу внешних пользователей -// при создании формы. -// -// ДействияВФорме - Структура (со свойствами типа Строка): -// Роли = "", "Просмотр", "Редактирование" -// КонтактнаяИнформация = "", "Просмотр", "Редактирование" -// СвойстваПользователяИБ = "", "ПросмотрВсех", "РедактированиеВсех", РедактированиеСвоих" -// СвойстваЭлемента = "", "Просмотр", "Редактирование" -// -// Для групп внешних пользователей КонтактнаяИнформация и СвойстваПользователяИБ не существуют. -// -Процедура ПриОпределенииДействийВФорме(Ссылка, ДействияВФорме) Экспорт - - ДействияВФорме.Роли = ""; - -КонецПроцедуры - -// Переопределяет текст вопроса перед записью первого администратора. -// Вызывается из обработчика ПередЗаписью формы пользователя. -// Вызов выполняется если установлен ЗапретРедактированияРолей() и -// количество пользователей информационной базы равно нулю. -// -Процедура ПриОпределенииТекстаВопросаПередЗаписьюПервогоАдминистратора(ТекстВопроса) Экспорт - - ТекстВопроса = НСтр("ru = 'В список пользователей программы добавляется первый пользователь, - |поэтому он будет автоматически включен в группу доступа Администраторы. - |Продолжить?'") - -КонецПроцедуры - -// Доопределяет действия при записи пользователя, когда он записывается -// совместно с пользователем ИБ, у которого есть роль ПолныеПрава. -// -// Параметры: -// Пользователь - СправочникСсылка.Пользователи (изменение объекта запрещено). -// -Процедура ПриЗаписиАдминистратора(Пользователь) Экспорт - - // Администраторы автоматически добавляются в группу доступа Администраторы. - Если ПривилегированныйРежим() Тогда - Объект = Справочники.ГруппыДоступа.Администраторы.ПолучитьОбъект(); - Если Объект.Пользователи.Найти(Пользователь, "Пользователь") = Неопределено Тогда - Объект.Пользователи.Добавить().Пользователь = Пользователь; - ОбновлениеИнформационнойБазы.ЗаписатьДанные(Объект); - КонецЕсли; - КонецЕсли; - -КонецПроцедуры - // Обработчики событий подсистемы ВариантыОтчетов. // Содержит настройки размещения вариантов отчетов в панели отчетов. @@ -1539,8 +1646,6 @@ // Обработчик подписки ОбновитьГруппыЗначенийДоступа на событие ПередЗаписью: // - вызывает метод записи групп значений доступа в // РегистрСведений.ГруппыЗначенийДоступа для требуемых объектов метаданных; -// - вызывает метод записи иерархии владельцев настроек прав объектов в -// РегистрСведений.НаследованиеНастроекПравОбъектов для требуемых объектов метаданных. // Процедура ОбновитьГруппыЗначенийДоступа(Знач Объект, Отказ) Экспорт @@ -1548,14 +1653,36 @@ Возврат; КонецЕсли; + Если СтандартныеПодсистемыСервер.ЭтоИдентификаторОбъектаМетаданных(Объект) Тогда + Возврат; + КонецЕсли; + Параметры = УправлениеДоступомСлужебныйПовтИсп.Параметры(); ЗначенияДоступаСГруппами = Параметры.СвойстваВидовДоступа.ЗначенияДоступаСГруппами; - ВозможныеПраваПоТипам = Параметры.ВозможныеПраваДляНастройкиПравОбъектов.ПоТипам; Если ЗначенияДоступаСГруппами.ПоТипам.Получить(ТипЗнч(Объект)) <> Неопределено Тогда РегистрыСведений.ГруппыЗначенийДоступа.ОбновитьГруппыЗначенийДоступа(Объект); КонецЕсли; +КонецПроцедуры + +// Обработчик подписки ОбновитьГруппыВладельцевНастроекПрав на событие ПередЗаписью: +// - вызывает метод записи иерархии владельцев настроек прав объектов в +// РегистрСведений.НаследованиеНастроекПравОбъектов для требуемых объектов метаданных. +// +Процедура ОбновитьГруппыВладельцевНастроекПрав(Знач Объект, Отказ) Экспорт + + Если Объект.ОбменДанными.Загрузка Тогда + Возврат; + КонецЕсли; + + Если СтандартныеПодсистемыСервер.ЭтоИдентификаторОбъектаМетаданных(Объект) Тогда + Возврат; + КонецЕсли; + + Параметры = УправлениеДоступомСлужебныйПовтИсп.Параметры(); + ВозможныеПраваПоТипам = Параметры.ВозможныеПраваДляНастройкиПравОбъектов.ПоТипам; + Если ВозможныеПраваПоТипам.Получить(ТипЗнч(Объект)) <> Неопределено Тогда РегистрыСведений.НаследованиеНастроекПравОбъектов.ОбновитьДанныеРегистра(Объект); КонецЕсли; @@ -1575,7 +1702,12 @@ Возврат; КонецЕсли; - ЗаписатьНаборыЗначенийДоступа(Объект); + Если СтандартныеПодсистемыСервер.ЭтоИдентификаторОбъектаМетаданных(Объект) Тогда + Возврат; + КонецЕсли; + + ЗаписатьНаборыЗначенийДоступа(Объект, , Объект.ДополнительныеСвойства.Свойство( + "ЗаписьНаборовЗначенийДоступаПриОбновленииИБ")); КонецПроцедуры @@ -1593,7 +1725,12 @@ Возврат; КонецЕсли; - ЗаписатьЗависимыеНаборыЗначенийДоступа(Объект); + Если СтандартныеПодсистемыСервер.ЭтоИдентификаторОбъектаМетаданных(Объект) Тогда + Возврат; + КонецЕсли; + + ЗаписатьЗависимыеНаборыЗначенийДоступа(Объект, Объект.ДополнительныеСвойства.Свойство( + "ЗаписьНаборовЗначенийДоступаПриОбновленииИБ")); КонецПроцедуры @@ -1603,7 +1740,8 @@ // Обработчик регламентного задания ЗаполнениеДанныхДляОграниченияДоступа. Процедура ЗаполнениеДанныхДляОграниченияДоступаОбработчикЗадания() Экспорт - ОбщегоНазначения.ПриНачалеВыполненияРегламентногоЗадания(); + ОбщегоНазначения.ПриНачалеВыполненияРегламентногоЗадания( + Метаданные.РегламентныеЗадания.ЗаполнениеДанныхДляОграниченияДоступа); ЗаполнениеДанныхДляОграниченияДоступа(); @@ -1829,105 +1967,19 @@ // Процедура УстановитьЗаполнениеДанныхДляОграниченияДоступа(Знач Использование) Экспорт - Если ОбщегоНазначенияПовтИсп.РазделениеВключено() Тогда - Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаВМоделиСервиса.УправлениеДоступомВМоделиСервиса") Тогда - МодульУправлениеДоступомСлужебныйВМоделиСервиса = ОбщегоНазначения.ОбщийМодуль("УправлениеДоступомСлужебныйВМоделиСервиса"); - МодульУправлениеДоступомСлужебныйВМоделиСервиса.УстановитьЗаполнениеДанныхДляОграниченияДоступа(Использование); - КонецЕсли; - Иначе - Задание = РегламентныеЗадания.НайтиПредопределенное( - Метаданные.РегламентныеЗадания.ЗаполнениеДанныхДляОграниченияДоступа); - - Если Задание.Использование <> Использование Тогда - Задание.Использование = Использование; - Задание.Записать(); - КонецЕсли; - КонецЕсли; - -КонецПроцедуры - -//////////////////////////////////////////////////////////////////////////////// -// Процедуры и функции для работы с пользователями и группами пользователей. - -// Обновляет группировки пользователей после обновления составов групп пользователей -// используемых для выполнения проверок разрешенных пользователей. -// -// Параметры: -// УчастникиИзменений - Массив значений типов: -// - СправочникСсылка.Пользователи. -// - СправочникСсылка.ВнешниеПользователи. -// Пользователи которые участвовали в изменении состава групп. -// -// ИзмененныеГруппы - Массив значений типов: -// - СправочникСсылка.ГруппыПользователей. -// - СправочникСсылка.ГруппыВнешнихПользователей. -// Группы, состав которых был изменен. -// -Процедура ПослеОбновленияСоставовГруппПользователей(УчастникиИзменений, ИзмененныеГруппы) Экспорт - - Параметры = Новый Структура; - Параметры.Вставить("Пользователи", УчастникиИзменений); - Параметры.Вставить("ГруппыПользователей", ИзмененныеГруппы); - - РегистрыСведений.ГруппыЗначенийДоступа.ОбновитьГруппировкиПользователей(Параметры); - -КонецПроцедуры - -// Обновляет связь для новой группы пользователей (группы внешних пользователей). -// -// Параметры: -// Ссылка - СправочникСсылка.Пользователи. -// - СправочникСсылка.ГруппыПользователей. -// - СправочникСсылка.ВнешниеПользователи. -// - СправочникСсылка.ГруппыВнешнихПользователей. -// -// ЭтоНовый - Булево, если Истина, объект был добавлен, иначе изменен. -// -Процедура ПослеДобавленияИзмененияПользователяИлиГруппы(Ссылка, ЭтоНовый) Экспорт - - Если ЭтоНовый Тогда - Если ТипЗнч(Ссылка) = Тип("СправочникСсылка.ГруппыПользователей") - ИЛИ ТипЗнч(Ссылка) = Тип("СправочникСсылка.ГруппыВнешнихПользователей") Тогда - - Параметры = Новый Структура; - Параметры.Вставить("ГруппыПользователей", Ссылка); - РегистрыСведений.ГруппыЗначенийДоступа.ОбновитьГруппировкиПользователей(Параметры); - КонецЕсли; - КонецЕсли; - -КонецПроцедуры - -// Обновляет группировки внешних пользователей по объекту авторизации. -// -// Параметры: -// ВнешнийПользователь - СправочникСсылка.ВнешниеПользователи. -// СтарыйОбъектАвторизации - NULL - при добавлении внешнего пользователя. -// Например, СправочникСсылка.ФизическиеЛица. -// НовыйОбъектАвторизации - Например, СправочникСсылка.ФизическиеЛица. -// -Процедура ПослеИзмененияОбъектаАвторизацииВнешнегоПользователя(ВнешнийПользователь, - СтарыйОбъектАвторизации, - НовыйОбъектАвторизации) Экспорт - - ОбъектыАвторизации = Новый Массив; - Если СтарыйОбъектАвторизации <> NULL Тогда - ОбъектыАвторизации.Добавить(СтарыйОбъектАвторизации); - КонецЕсли; - ОбъектыАвторизации.Добавить(НовыйОбъектАвторизации); - - Параметры = Новый Структура; - Параметры.Вставить("ОбъектыАвторизации", ОбъектыАвторизации); - - РегистрыСведений.ГруппыЗначенийДоступа.ОбновитьГруппировкиПользователей(Параметры); + СтандартныеПодсистемыСервер.УстановитьИспользованиеПредопределенногоРегламентногоЗадания( + Метаданные.РегламентныеЗадания.ЗаполнениеДанныхДляОграниченияДоступа, Использование); КонецПроцедуры //////////////////////////////////////////////////////////////////////////////// // Процедуры и функции для работы с видами доступа. -// Возвращает использование вида доступа. +// Возвращает Истина, если вид доступа включен по функциональным опциям для всех сеансов. +// // Параметры: -// ВидДоступа - Строка, имя вида доступа. +// ВидДоступа - Ссылка - пустая ссылка основного типа. +// - Строка - имя вида доступа. // // Возвращаемое значение: // Булево. @@ -1941,6 +1993,12 @@ Возврат Используется; КонецЕсли; + Если СвойстваВидаДоступа.Имя = "ВнешниеПользователи" + Или СвойстваВидаДоступа.Имя = "Пользователи" Тогда + // Эти виды доступа не могут быть отключены по функциональным опциям. + Возврат Истина; + КонецЕсли; + Используется = Истина; ОбработчикиСобытия = ОбщегоНазначения.ОбработчикиСлужебногоСобытия( @@ -2020,30 +2078,23 @@ КонецФункции -// Перезаписывает наборы значений доступа проверяемого объекта -// в РегистрСведений.НаборыЗначенийДоступа, используя процедуру -// УправлениеДоступом.ЗаполнитьНаборыЗначенийДоступа(). -// -// Процедура вызывается из УправлениеДоступомСлужебный.ЗаписатьНаборыЗначенийДоступа(), -// но может быть вызвана из любого места, например, -// при включении ограничения доступа на уровне записей. -// -// Вызывает процедуру прикладного разработчика -// УправлениеДоступомПереопределяемый.ПриИзмененииНаборовЗначенийДоступа(), -// которая используется для перезаписи зависимых наборов значений доступа. +// Выполняет обновление наборов значений доступа объекта, если они изменились. +// Наборы обновляются в табличной части (если используется) и +// в регистре сведений НаборыЗначенийДоступа. // // Параметры: -// Объект - СправочникОбъект, ДокументОбъект, ..., или СправочникСсылка, ДокументСсылка, ... -// В случае вызова с клиента можно передать только ссылку, а нужен объект. -// Если получена ссылка, то по ней будет получен объект. +// СсылкаИлиОбъект - СправочникСсылка, ДокументСсылка и другие типы ссылок или объектов - ссылка или объект, +// для которого заполняются наборы значений доступа. // -Процедура ЗаписатьНаборыЗначенийДоступа(Знач Объект, ЕстьИзменения = Неопределено) Экспорт +// ОбновлениеИБ - Булево - если Истина, то необходимо выполнять запись данных, +// не выполняя лишних, избыточных действий с данными. +// См. ОбновлениеИнформационнойБазы.ЗаписатьДанные. +// +Процедура ОбновитьНаборыЗначенийДоступа(СсылкаИлиОбъект, ЕстьИзменения = Неопределено, ОбновлениеИБ = Ложь) Экспорт УстановитьПривилегированныйРежим(Истина); - // Если передача параметра Объект производилась с клиента на сервер, - // то передавалась ссылка, и объект требуется получить. - Объект = ?(Объект = Объект.Ссылка, Объект.ПолучитьОбъект(), Объект); + Объект = ?(СсылкаИлиОбъект = СсылкаИлиОбъект.Ссылка, СсылкаИлиОбъект.ПолучитьОбъект(), СсылкаИлиОбъект); СсылкаНаОбъект = Объект.Ссылка; ТипЗначенияОбъект = ТипЗнч(Объект); @@ -2051,177 +2102,20 @@ "ЗаписатьНаборыЗначенийДоступа").Получить(ТипЗначенияОбъект) <> Неопределено; Если НЕ НаборыЗаписываются Тогда - ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Неверные параметры. - |Тип объекта ""%1"" - |не найден в подписках на события - |""Записать наборы значений доступа"".'"), - ТипЗначенияОбъект); - КонецЕсли; - - ВозможныеТипыОбъектов = УправлениеДоступомСлужебныйПовтИсп.ТипыПоляТаблицы( - "РегистрСведений.НаборыЗначенийДоступа.Измерение.Объект"); - - Если ВозможныеТипыОбъектов.Получить(ТипЗнч(СсылкаНаОбъект)) = Неопределено Тогда - ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Ошибка при записи наборов значений доступа: - |в регистре сведений НаборыЗначенийДоступа в измерении Объект - |не задан тип ""%1"".'"), - СсылкаНаОбъект.Метаданные().ПолноеИмя()); - КонецЕсли; - - Если УправлениеДоступом.ОграничиватьДоступНаУровнеЗаписей() Тогда - - Если Метаданные.НайтиПоТипу(ТипЗначенияОбъект).ТабличныеЧасти.Найти("НаборыЗначенийДоступа") = Неопределено Тогда - - Таблица = УправлениеДоступом.ТаблицаНаборыЗначенийДоступа(); - УправлениеДоступом.ЗаполнитьНаборыЗначенийДоступа(Объект, Таблица); - - УправлениеДоступом.ДобавитьНаборыЗначенийДоступа( - Таблица, УправлениеДоступом.ТаблицаНаборыЗначенийДоступа(), Ложь, Истина); - Иначе - ТабличнаяЧастьЗаполняется = УправлениеДоступомСлужебныйПовтИсп.ТипыОбъектовВПодпискахНаСобытия( - "ЗаполнитьНаборыЗначенийДоступаТабличныхЧастей").Получить(ТипЗначенияОбъект) <> Неопределено; - - Если НЕ ТабличнаяЧастьЗаполняется Тогда - ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Неверные параметры. - |Тип объекта ""%1"" - |не найден в подписках на события - |""Заполнить наборы значений доступа табличных частей"".'"), - ТипЗначенияОбъект); - КонецЕсли; - // Записан объект с уже заполненной табличной частью НаборыЗначенийДоступа. - Таблица = Объект.НаборыЗначенийДоступа.Выгрузить(); - КонецЕсли; - - ПодготовитьНаборыЗначенийДоступаКЗаписи(СсылкаНаОбъект, Таблица, Истина); - - Данные = Новый Структура; - Данные.Вставить("МенеджерРегистра", РегистрыСведений.НаборыЗначенийДоступа); - Данные.Вставить("ФиксированныйОтбор", Новый Структура("Объект", СсылкаНаОбъект)); - Данные.Вставить("НовыеЗаписи", Таблица); - - НачатьТранзакцию(); - Попытка - ОбновитьНаборыЗаписей(Данные, ЕстьИзменения); - ЗафиксироватьТранзакцию(); - Исключение - ОтменитьТранзакцию(); - ВызватьИсключение; - КонецПопытки; - - Если ЕстьИзменения = Истина Тогда - ПриИзмененииНаборовЗначенийДоступа(СсылкаНаОбъект); - КонецЕсли; - Иначе - Запрос = Новый Запрос( - "ВЫБРАТЬ ПЕРВЫЕ 1 - | ИСТИНА КАК ЗначениеИстина - |ИЗ - | РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначенийДоступа - |ГДЕ - | НаборыЗначенийДоступа.Объект = &СсылкаНаОбъект"); - - Запрос.УстановитьПараметр("СсылкаНаОбъект", СсылкаНаОбъект); - - Если НЕ Запрос.Выполнить().Пустой() Тогда - // Очистка устаревшего набора. - // Запись нового набора будет выполнена регламентным заданием, - // после включения ограничения на уровне записей. - НаборЗаписей = РегистрыСведений.НаборыЗначенийДоступа.СоздатьНаборЗаписей(); - НаборЗаписей.Отбор.Объект.Установить(СсылкаНаОбъект); - НаборЗаписей.Записать(); - ЕстьИзменения = Истина; - - // Очистка устаревших зависимых наборов. - ПриИзмененииНаборовЗначенийДоступа(СсылкаНаОбъект); - КонецЕсли; - КонецЕсли; - -КонецПроцедуры - -// Перезаписывает наборы значений доступа зависимых объектов. -// -// Процедура вызывается из УправлениеДоступомСлужебный.ЗаписатьЗависимыеНаборыЗначенийДоступа(), -// состав типов подписки дополняет (без пересечения) состав типов подписки ЗаписатьНаборыЗначенийДоступа, -// теми типами, для которых выполнять запись наборов в регистр сведений НаборыЗначенийДоступа -// не требуется, но сами наборы входят в состав других наборов, например, наборы некоторых файлов -// из справочника "Файлы" могут входить в состав некоторых бизнес-процессов "Задание", созданных -// на основании файлов, при этом наборы файлов записывать в регистр не требуется. -// -// Вызывает процедуру прикладного разработчика -// УправлениеДоступомПереопределяемый.ПриИзмененииНаборовЗначенийДоступа(), -// которая используется для перезаписи зависимых наборов значений доступа, -// то есть организуется рекурсия. -// -// Параметры: -// Объект - СправочникОбъект, ДокументОбъект, ..., или СправочникСсылка, ДокументСсылка, ... -// В случае вызова с клиента можно передать только ссылку, а нужен объект. -// Если получена ссылка, то по ней будет получен объект. -// -Процедура ЗаписатьЗависимыеНаборыЗначенийДоступа(Знач Объект) Экспорт - - УстановитьПривилегированныйРежим(Истина); - - // Если передача параметра Объект производилась с клиента на сервер, - // то передавалась ссылка, и объект требуется получить. - Объект = ?(Объект = Объект.Ссылка, Объект.ПолучитьОбъект(), Объект); - СсылкаНаОбъект = Объект.Ссылка; - ТипЗначенияОбъект = ТипЗнч(Объект); - - ЭтоВедущийОбъект = УправлениеДоступомСлужебныйПовтИсп.ТипыОбъектовВПодпискахНаСобытия( - "ЗаписатьЗависимыеНаборыЗначенийДоступа").Получить(ТипЗначенияОбъект) <> Неопределено; - - Если НЕ ЭтоВедущийОбъект Тогда ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Неверные параметры. |Тип объекта ""%1"" |не найден в подписке на события - |""Записать зависимые наборы значений доступа"".'"), + |""Записать наборы значений доступа"".'"), ТипЗначенияОбъект); КонецЕсли; - ПриИзмененииНаборовЗначенийДоступа(СсылкаНаОбъект); - -КонецПроцедуры - -// Выполняет обновление наборов значений доступа объекта, если они изменились. -// Наборы обновляются в табличной части (если используется) и -// в регистре сведений НаборыЗначенийДоступа. -// -// Параметры: -// СсылкаНаОбъект - СправочникСсылка, ДокументСсылка, ... -// -Процедура ОбновитьНаборыЗначенийДоступа(СсылкаНаОбъект, ЕстьИзменения = Неопределено) Экспорт - - УстановитьПривилегированныйРежим(Истина); - - // Если передача параметра Объект производилась с клиента на сервер, - // то передавалась ссылка, и объект требуется получить. - Объект = СсылкаНаОбъект.ПолучитьОбъект(); - ТипЗначенияОбъект = ТипЗнч(Объект); - - НаборыЗаписываются = УправлениеДоступомСлужебныйПовтИсп.ТипыОбъектовВПодпискахНаСобытия( - "ЗаписатьНаборыЗначенийДоступа").Получить(ТипЗначенияОбъект) <> Неопределено; - - Если НЕ НаборыЗаписываются Тогда - ВызватьИсключение( - СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Неверные параметры. - |Тип объекта ""%1"" - |не найден в подписке на события - |""Записать наборы значений доступа"".'"), - ТипЗначенияОбъект)); - КонецЕсли; - Если Метаданные.РегистрыСведений.НаборыЗначенийДоступа.Измерения.Объект.Тип.Типы().Найти(ТипЗнч(СсылкаНаОбъект)) = Неопределено Тогда - ВызватьИсключение( - СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Ошибка при записи наборов значений доступа: - |в регистре сведений НаборыЗначенийДоступа в измерении Объект - |не задан тип %1'"), - СсылкаНаОбъект.Метаданные().ПолноеИмя())); + ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Ошибка при записи наборов значений доступа: + |в регистре сведений НаборыЗначенийДоступа в измерении Объект + |не задан тип %1'"), + СсылкаНаОбъект.Метаданные().ПолноеИмя()); КонецЕсли; Если СсылкаНаОбъект.Метаданные().ТабличныеЧасти.Найти("НаборыЗначенийДоступа") <> Неопределено Тогда @@ -2231,18 +2125,23 @@ Если НаборыЗначенийДоступаТабличнойЧастиИзменены(СсылкаНаОбъект, Таблица) Тогда ПодготовитьНаборыЗначенийДоступаКЗаписи(Неопределено, Таблица, Ложь); - Объект.ОбменДанными.Загрузка = Истина; Объект.ДополнительныеСвойства.Вставить("ЗаписатьНаборыЗначенийДоступа"); Объект.ДополнительныеСвойства.Вставить("ЗаписатьЗависимыеНаборыЗначенийДоступа"); Объект.ДополнительныеСвойства.Вставить("НаборыЗначенийДоступаТабличнойЧастиЗаполнены"); Объект.НаборыЗначенийДоступа.Загрузить(Таблица); - Объект.Записать(); + Если ОбновлениеИБ Тогда + Объект.ДополнительныеСвойства.Вставить("ЗаписьНаборовЗначенийДоступаПриОбновленииИБ"); + ОбновлениеИнформационнойБазы.ЗаписатьДанные(Объект); + Иначе + Объект.ОбменДанными.Загрузка = Истина; + Объект.Записать(); + КонецЕсли; ЕстьИзменения = Истина; КонецЕсли; КонецЕсли; // Обновление объекта не требуется или объект уже обновлен. - ЗаписатьНаборыЗначенийДоступа(Объект, ЕстьИзменения); + ЗаписатьНаборыЗначенийДоступа(Объект, ЕстьИзменения, ОбновлениеИБ); КонецПроцедуры @@ -2343,37 +2242,6 @@ КонецФункции -//////////////////////////////////////////////////////////////////////////////// -// Процедуры и функции для работы интерфейсов пользователей. - -// Возвращает название объекта метаданных с учетом заданных свойств в порядке: -// - РасширенноеПредставлениеОбъекта, -// - ПредставлениеОбъекта, -// - Синоним, -// - Имя. -// -// Параметры: -// МетаданныеОбъекта - ОбъектМетаданных. -// -// Возвращаемое значение: -// Строка. -// -Функция НазваниеОбъектаИзМетаданных(МетаданныеОбъекта) Экспорт - - Если ЗначениеЗаполнено(МетаданныеОбъекта.РасширенноеПредставлениеОбъекта) Тогда - НазваниеОбъекта = МетаданныеОбъекта.РасширенноеПредставлениеОбъекта; - ИначеЕсли ЗначениеЗаполнено(МетаданныеОбъекта.ПредставлениеОбъекта) Тогда - НазваниеОбъекта = МетаданныеОбъекта.ПредставлениеОбъекта; - ИначеЕсли ЗначениеЗаполнено(МетаданныеОбъекта.Синоним) Тогда - НазваниеОбъекта = МетаданныеОбъекта.Синоним; - Иначе - НазваниеОбъекта = МетаданныеОбъекта.Имя; - КонецЕсли; - - Возврат НазваниеОбъекта; - -КонецФункции - //////////////////////////////////////////////////////////////////////////////// // Обслуживание таблиц ВидыДоступа и ЗначенияДоступа в формах редактирования. @@ -2490,6 +2358,11 @@ СтандартныеПодсистемыСервер.УстановитьОтображениеЗаголовковГрупп( Форма, "ЗначенияДоступаПоВидуДоступа"); + // Настройка параметров выбора значения доступа. + ПараметрыВыбора = Новый Массив; + ПараметрыВыбора.Добавить(Новый ПараметрВыбора("ЭтоВыборЗначенияДоступа", Истина)); + Форма.Элементы.ЗначенияДоступаЗначениеДоступа.ПараметрыВыбора = Новый ФиксированныйМассив(ПараметрыВыбора); + КонецПроцедуры // При повторном чтении заполняет или обновляет вспомогательные данные, @@ -2502,7 +2375,7 @@ УправлениеДоступомСлужебныйКлиентСервер.ЗаполнитьСвойстваВидовДоступаВФорме(Форма); - УправлениеДоступомСлужебныйКлиентСервер.ПриИзмененииТекущегоВидаДоступа(Форма); + УправлениеДоступомСлужебныйКлиентСервер.ПриИзмененииТекущегоВидаДоступа(Форма, Ложь); КонецПроцедуры @@ -2671,6 +2544,10 @@ // объекты <Регистр*>НаборЗаписей в свойство // ДополнительныеСвойства будут вставлены все параметры структуры. // +// * ОбновлениеИБ - Булево - если Истина, то необходимо выполнять запись данных, +// не выполняя лишних, избыточных действий с данными. +// См. ОбновлениеИнформационнойБазы.ЗаписатьДанные. +// // ЕстьИзменения - Булево (возвращаемое значение) - если производилась запись, // устанавливается Истина, иначе не изменяется. // @@ -2696,6 +2573,7 @@ ВсеПараметры.Вставить("БезПерезаписи", Ложь); ВсеПараметры.Вставить("ТолькоПроверка", Ложь); ВсеПараметры.Вставить("ДополнительныеСвойства"); + ВсеПараметры.Вставить("ОбновлениеИБ", Ложь); ЗаполнитьПараметры(Данные, ВсеПараметры, "НаборЗаписей, НовыеЗаписи"); ПолноеИмяРегистра = Метаданные.НайтиПоТипу(ТипЗнч(Данные.НаборЗаписей)).ПолноеИмя(); @@ -2817,7 +2695,7 @@ Для каждого Поле Из ПоляОстальныхИзмерений Цикл УстановитьОтбор(НаборЗаписи.Отбор[Поле], Строка[Поле]); КонецЦикла; - НаборЗаписи.Записать(); + ЗаписатьОбъектИлиНаборЗаписей(Данные, НаборЗаписи); КонецЦикла; НаборЗаписи.Добавить(); Для каждого Строка Из Данные.НовыеЗаписи Цикл @@ -2828,12 +2706,12 @@ УстановитьОтбор(НаборЗаписи.Отбор[Поле], Строка[Поле]); КонецЦикла; ЗаполнитьЗначенияСвойств(НаборЗаписи[0], Строка); - НаборЗаписи.Записать(); + ЗаписатьОбъектИлиНаборЗаписей(Данные, НаборЗаписи); КонецЦикла; Иначе УстановитьДополнительныеСвойства(Данные.НаборЗаписей, Данные.ДополнительныеСвойства); Данные.НаборЗаписей.Загрузить(Данные.НовыеЗаписи); - Данные.НаборЗаписей.Записать(); + ЗаписатьОбъектИлиНаборЗаписей(Данные, Данные.НаборЗаписей); КонецЕсли; КонецЕсли; @@ -2878,6 +2756,10 @@ // объекты <Регистр*>НаборЗаписей в свойство // ДополнительныеСвойства будут вставлены все параметры структуры. // +// * ОбновлениеИБ - Булево - если Истина, то необходимо выполнять запись данных, +// не выполняя лишних, избыточных действий с данными. +// См. ОбновлениеИнформационнойБазы.ЗаписатьДанные. +// // ЕстьИзменения - Булево (возвращаемое значение) - если производилась запись, // устанавливается Истина, иначе не изменяется. // @@ -2897,6 +2779,7 @@ ВсеПараметры.Вставить("ФиксированныйОтбор"); ВсеПараметры.Вставить("ТолькоПроверка", Ложь); ВсеПараметры.Вставить("ДополнительныеСвойства"); + ВсеПараметры.Вставить("ОбновлениеИБ", Ложь); ЗаполнитьПараметры(Данные, ВсеПараметры, "МенеджерРегистра, НовыеЗаписи"); // Предварительная обработка параметров. @@ -3102,6 +2985,10 @@ // объекты <Регистр*>НаборЗаписей в свойство // ДополнительныеСвойства будут вставлены все параметры структуры. // +// * ОбновлениеИБ - Булево - если Истина, то необходимо выполнять запись данных, +// не выполняя лишних, избыточных действий с данными. +// См. ОбновлениеИнформационнойБазы.ЗаписатьДанные. +// // ЕстьИзменения - Булево (возвращаемое значение) - если производилась запись, // устанавливается Истина, иначе не изменяется. // @@ -3118,6 +3005,7 @@ ВсеПараметры.Вставить("ИзмеренияОтбора"); ВсеПараметры.Вставить("ТолькоПроверка", Ложь); ВсеПараметры.Вставить("ДополнительныеСвойства"); + ВсеПараметры.Вставить("ОбновлениеИБ", Ложь); ЗаполнитьПараметры(Данные, ВсеПараметры, "МенеджерРегистра, ИзмененияСоставаСтрок"); МетаданныеРегистра = Метаданные.НайтиПоТипу(ТипЗнч(Данные.МенеджерРегистра.ПустойКлюч())); @@ -3357,102 +3245,16 @@ ТекстЗапроса, "ТекстЗапросаВыбораСтарых", ТекстЗапросаВыбораСтарых); Если ЗначениеЗаполнено(ТекстЗапросовВременныхТаблиц) Тогда - ТекстЗапроса = ТекстЗапросовВременныхТаблиц + - " - |; - |" + ТекстЗапроса; + ТекстЗапроса = ТекстЗапросовВременныхТаблиц + + " + |; + |" + ТекстЗапроса; КонецЕсли; Возврат ТекстЗапроса; КонецФункции -//////////////////////////////////////////////////////////////////////////////// -// Обработчики условных вызовов в другие подсистемы. - -// Возвращает менеджер временных таблиц, содержащий временную таблицу пользователей -// некоторых дополнительных групп пользователей, например, пользователей групп -// исполнителей задач, которые соответствуют ключам адресации -// (РольИсполнителя + ОсновнойОбъектАдресации + ДополнительныйОбъектАдресации). -// -// При изменении состава дополнительных групп пользователей, необходимо вызвать -// процедуру ОбновитьПользователейГруппИсполнителей в модуле УправлениеДоступом, -// чтобы применить изменения к внутренним данным подсистемы. -// -// Параметры: -// МенеджерВременныхТаблиц - МенеджерВременныхТаблиц, в который можно поместить таблицу: -// ТаблицаГруппИсполнителей с полями: -// ГруппаИсполнителей - Например, -// СправочникСсылка.ГруппыИсполнителейЗадач. -// Пользователь - СправочникСсылка.Пользователи, -// СправочникСсылка.ВнешниеПользователи. -// -// СодержаниеПараметра - Неопределено - параметр не указан, вернуть все данные. -// Строка, когда -// "ГруппыИсполнителей" требуется вернуть -// только составы указанных групп исполнителей. -// "Исполнители" требуется вернуть -// только составы групп исполнителей, которые -// в которые входят указанные исполнители. -// -// ЗначениеПараметра - Неопределено, когда СодержаниеПараметра = Неопределено, -// - Например, СправочникСсылка.ГруппыИсполнителейЗадач, -// когда СодеражаниеПараметра = "ГруппыИсполнителей". -// - СправочникСсылка.Пользователи, -// СправочникСсылка.ВнешниеПользователи, -// когда СодеражаниеПараметра = "Исполнители". -// Массив указанных выше типов. -// -// НетГруппИсполнителей - Булево, если Ложь, МенеджерВременныхТаблиц содержит временную таблицу, иначе нет. -// -Процедура ПриОпределенииГруппИсполнителей(МенеджерВременныхТаблиц, СодержаниеПараметра, ЗначениеПараметра, НетГруппИсполнителей) Экспорт - - Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.БизнесПроцессыИЗадачи") Тогда - МодульБизнесПроцессыИЗадачиСервер = ОбщегоНазначения.ОбщийМодуль("БизнесПроцессыИЗадачиСервер"); - МодульБизнесПроцессыИЗадачиСервер.ПриОпределенииГруппИсполнителей(МенеджерВременныхТаблиц, СодержаниеПараметра, ЗначениеПараметра); - НетГруппИсполнителей = Ложь; - Иначе - НетГруппИсполнителей = Истина; - КонецЕсли; - -КонецПроцедуры - -// Создает / обновляет запись запись пользователя сервиса. -// -// Параметры: -// Пользователь - СправочникСсылка.Пользователи/СправочникОбъект.Пользователи -// СоздатьПользователяСервиса - Булево - Истина - создать нового пользователя -// сервиса, Ложь - обновить существующего. -// ПарольПользователяСервиса - Строка - пароль текущего пользователя -// для доступа к менеджеру сервиса. -// -Процедура ПриЗаписиПользователяСервиса(Знач Пользователь, Знач СоздатьПользователяСервиса, Знач ПарольПользователяСервиса) Экспорт - - Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаВМоделиСервиса.ПользователиВМоделиСервиса") Тогда - МодульПользователиСлужебныйВМоделиСервиса = ОбщегоНазначения.ОбщийМодуль("ПользователиСлужебныйВМоделиСервиса"); - МодульПользователиСлужебныйВМоделиСервиса.ЗаписатьПользователяСервиса(Пользователь, СоздатьПользователяСервиса, ПарольПользователяСервиса); - КонецЕсли; - -КонецПроцедуры - -// Возвращает доступные текущему пользователю действия с указанным пользователем сервиса. -// -// Параметры: -// Пользователь - СправочникСсылка.Пользователи - пользователь, доступные -// действия с которым требуется получить. Если параметр не указан, проверяются -// доступные действия с текущим пользователем. -// ПарольПользователяСервиса - Строка - пароль текущего пользователя для -// доступа в сервис. -// -Процедура ПриПолученииДействийСПользователемСервиса(ДоступныеДействия, Знач Пользователь = Неопределено) Экспорт - - Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаВМоделиСервиса.ПользователиВМоделиСервиса") Тогда - МодульПользователиСлужебныйВМоделиСервиса = ОбщегоНазначения.ОбщийМодуль("ПользователиСлужебныйВМоделиСервиса"); - ДоступныеДействия = МодульПользователиСлужебныйВМоделиСервиса.ПолучитьДействияСПользователемСервиса(Пользователь); - КонецЕсли; - -КонецПроцедуры - //////////////////////////////////////////////////////////////////////////////// // Обновление информационной базы. @@ -3513,8 +3315,8 @@ КонецЕсли; Если НЕ (ТолькоПроверка И ЕстьИзменения) Тогда - Константы["ПараметрыОграниченияДоступа"].СоздатьМенеджерЗначения( - ).ОбновитьОписаниеСвойствВидовДоступа(ЕстьИзменения, ТолькоПроверка); + Менеджер = Константы["ПараметрыОграниченияДоступа"].СоздатьМенеджерЗначения(); + Менеджер.ОбновитьОписаниеСвойствВидовДоступа(ЕстьИзменения, ТолькоПроверка); КонецЕсли; Если НЕ (ТолькоПроверка И ЕстьИзменения) Тогда @@ -3601,46 +3403,6 @@ КонецПроцедуры -// Проверяет были ли изменения неразделенных данных для какой-нибудь области данных. -Функция ЕстьИзмененияПараметровОграниченияДоступа() Экспорт - - УстановитьПривилегированныйРежим(Истина); - - ПоследниеИзменения = СтандартныеПодсистемыСервер.ИзмененияПараметраРаботыПрограммы( - ПользователиСлужебныйПовтИсп.Параметры(), "НедоступныеРолиПоТипамПользователей"); - - Если ПоследниеИзменения = Неопределено - ИЛИ ПоследниеИзменения.Количество() > 0 Тогда - - Возврат Истина; - КонецЕсли; - - ПроверяемыеПараметры = Новый Массив; - ПроверяемыеПараметры.Добавить("ОбъектыМетаданныхПравРолей"); - ПроверяемыеПараметры.Добавить("ВозможныеПраваДляНастройкиПравОбъектов"); - ПроверяемыеПараметры.Добавить("ПоставляемыеПрофилиГруппДоступа"); - ПроверяемыеПараметры.Добавить("ПредопределенныеПрофилиГруппДоступа"); - ПроверяемыеПараметры.Добавить("ТипыГруппИЗначенийДоступа"); - - Параметры = УправлениеДоступомСлужебныйПовтИсп.Параметры(); - - Для каждого ПроверяемыйПараметр Из ПроверяемыеПараметры Цикл - - ПоследниеИзменения = СтандартныеПодсистемыСервер.ИзмененияПараметраРаботыПрограммы( - Параметры, ПроверяемыйПараметр); - - Если ПоследниеИзменения = Неопределено - ИЛИ ПоследниеИзменения.Количество() > 0 Тогда - - Возврат Истина; - КонецЕсли; - - КонецЦикла; - - Возврат Ложь; - -КонецФункции - // Обновляет вспомогательные данные, которые зависят от конфигурации частично. // // Обновляется при наличии изменений конфигурации, записанных в параметры @@ -3731,13 +3493,10 @@ // Обновляет настройки и включает регламентное задание. Процедура ВключитьЗаполнениеДанныхДляОграниченияДоступа() Экспорт - ЗаданиеМетаданные = Метаданные.РегламентныеЗадания.ЗаполнениеДанныхДляОграниченияДоступа; + Использование = Константы.ОграничиватьДоступНаУровнеЗаписей.Получить(); Если ОбщегоНазначенияПовтИсп.РазделениеВключено() Тогда - Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаВМоделиСервиса.УправлениеДоступомВМоделиСервиса") Тогда - МодульУправлениеДоступомСлужебныйВМоделиСервиса = ОбщегоНазначения.ОбщийМодуль("УправлениеДоступомСлужебныйВМоделиСервиса"); - МодульУправлениеДоступомСлужебныйВМоделиСервиса.УстановитьЗаполнениеДанныхДляОграниченияДоступа(Истина); - КонецЕсли; + УстановитьЗаполнениеДанныхДляОграниченияДоступа(Использование); Иначе Расписание = Новый РасписаниеРегламентногоЗадания; Расписание.ПериодНедель = 1; @@ -3745,8 +3504,10 @@ Расписание.ПериодПовтораВТечениеДня = 300; Расписание.ПаузаПовтора = 90; + ЗаданиеМетаданные = Метаданные.РегламентныеЗадания.ЗаполнениеДанныхДляОграниченияДоступа; Задание = РегламентныеЗадания.НайтиПредопределенное(ЗаданиеМетаданные); - Задание.Использование = Истина; + + Задание.Использование = Использование; Задание.Расписание = Расписание; Задание.ИнтервалПовтораПриАварийномЗавершении @@ -3760,10 +3521,193 @@ КонецПроцедуры +// Заполняет назначение профилей групп доступа. +Процедура ЗаполнитьНазначениеПрофилейГруппДоступа() Экспорт + + Запрос = Новый Запрос; + Запрос.Текст = "ВЫБРАТЬ + | ПрофилиГруппДоступа.Ссылка, + | ПрофилиГруппДоступа.Назначение.( + | Ссылка, + | НомерСтроки, + | ТипПользователей + | ) + |ИЗ + | Справочник.ПрофилиГруппДоступа КАК ПрофилиГруппДоступа + |ГДЕ + | (ПрофилиГруппДоступа.ИдентификаторПоставляемыхДанных = &ПустойУникальныйИдентификатор + | ИЛИ ПрофилиГруппДоступа.ПоставляемыйПрофильИзменен) + | И НЕ ПрофилиГруппДоступа.ЭтоГруппа + | И НЕ ПрофилиГруппДоступа.Ссылка В + | (ВЫБРАТЬ РАЗЛИЧНЫЕ + | ПрофилиГруппДоступаНазначение.Ссылка + | ИЗ + | Справочник.ПрофилиГруппДоступа.Назначение КАК ПрофилиГруппДоступаНазначение)"; + + Запрос.УстановитьПараметр("ПустойУникальныйИдентификатор", + Новый УникальныйИдентификатор("00000000-0000-0000-0000-000000000000")); + + Результат = Запрос.Выполнить(); + Выборка = Результат.Выбрать(); + + Пока Выборка.Следующий() Цикл + + ПрофильОбъект = Выборка.Ссылка.ПолучитьОбъект(); + НоваяСтрока = ПрофильОбъект.Назначение.Добавить(); + НоваяСтрока.ТипПользователей = Справочники.Пользователи.ПустаяСсылка(); + ОбновлениеИнформационнойБазы.ЗаписатьДанные(ПрофильОбъект); + + КонецЦикла; + +КонецПроцедуры + +// Заменят удаленные роли на новые +Процедура ЗаменитьУдаленныеРолиВПрофиляхГруппДоступа() Экспорт + + // Заполнение списка удаленных ролей и соответствующих новых ролей. + МассивУдаленныхРолей = Новый Массив; + СоответствиеРолей = Новый Соответствие; + + // ДобавлениеИзменениеБазовойНСИ + ИмяРоли = "? ДобавлениеИзменениеБазовойНСИ"; + МассивУдаленныхРолей.Добавить(ИмяРоли); + + МассивРолей = Новый Массив; + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.Свойства") Тогда + МассивРолей.Добавить(ОбщегоНазначения.ИдентификаторОбъектаМетаданных("Роль.ДобавлениеИзменениеДополнительныхРеквизитовИСведений")); + КонецЕсли; + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.Валюты") Тогда + МассивРолей.Добавить(ОбщегоНазначения.ИдентификаторОбъектаМетаданных("Роль.ДобавлениеИзменениеКурсовВалют")); + КонецЕсли; + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ГрафикиРаботы") Тогда + МассивРолей.Добавить(ОбщегоНазначения.ИдентификаторОбъектаМетаданных("Роль.ДобавлениеИзменениеГрафиковРаботы")); + КонецЕсли; + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.КонтактнаяИнформация") Тогда + МассивРолей.Добавить(ОбщегоНазначения.ИдентификаторОбъектаМетаданных("Роль.ДобавлениеИзменениеВидовКонтактнойИнформации")); + КонецЕсли; + СоответствиеРолей.Вставить(ИмяРоли, МассивРолей); + + // ДобавлениеИзменениеОбщейБазовойНСИ + ИмяРоли = "? ДобавлениеИзменениеОбщейБазовойНСИ"; + МассивУдаленныхРолей.Добавить(ИмяРоли); + + МассивРолей = Новый Массив; + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.АдресныйКлассификатор") Тогда + МассивРолей.Добавить(ОбщегоНазначения.ИдентификаторОбъектаМетаданных("Роль.ДобавлениеИзменениеАдресныхСведений")); + КонецЕсли; + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.Банки") Тогда + МассивРолей.Добавить(ОбщегоНазначения.ИдентификаторОбъектаМетаданных("Роль.ДобавлениеИзменениеБанков")); + КонецЕсли; + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.КалендарныеГрафики") Тогда + МассивРолей.Добавить(ОбщегоНазначения.ИдентификаторОбъектаМетаданных("Роль.ДобавлениеИзменениеКалендарныхГрафиков")); + КонецЕсли; + СоответствиеРолей.Вставить(ИмяРоли, МассивРолей); + + // ИзменениеТекущегоПользователя + ИмяРоли = "? ИзменениеТекущегоПользователя"; + МассивУдаленныхРолей.Добавить(ИмяРоли); + + МассивРолей = Новый Массив; + СоответствиеРолей.Вставить(ИмяРоли, МассивРолей); + + // ИзменениеТекущегоВнешнегоПользователя + ИмяРоли = "? ИзменениеТекущегоВнешнегоПользователя"; + МассивУдаленныхРолей.Добавить(ИмяРоли); + + МассивРолей = Новый Массив; + СоответствиеРолей.Вставить(ИмяРоли, МассивРолей); + + // ЧтениеБазовойНСИ + ИмяРоли = "? ЧтениеБазовойНСИ"; + МассивУдаленныхРолей.Добавить(ИмяРоли); + + МассивРолей = Новый Массив; + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ГрафикиРаботы") Тогда + МассивРолей.Добавить(ОбщегоНазначения.ИдентификаторОбъектаМетаданных("Роль.ЧтениеГрафиковРаботы")); + КонецЕсли; + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.Валюты") Тогда + МассивРолей.Добавить(ОбщегоНазначения.ИдентификаторОбъектаМетаданных("Роль.ЧтениеКурсовВалют")); + КонецЕсли; + СоответствиеРолей.Вставить(ИмяРоли, МассивРолей); + + // ЧтениеОбщейБазовойНСИ + ИмяРоли = "? ЧтениеОбщейБазовойНСИ"; + МассивУдаленныхРолей.Добавить(ИмяРоли); + + МассивРолей = Новый Массив; + СоответствиеРолей.Вставить(ИмяРоли, МассивРолей); + + // ДобавлениеИзменениеСтранМира + ИмяРоли = "? ДобавлениеИзменениеСтранМира"; + МассивУдаленныхРолей.Добавить(ИмяРоли); + + МассивРолей = Новый Массив; + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.КонтактнаяИнформация") Тогда + МассивРолей.Добавить(ОбщегоНазначения.ИдентификаторОбъектаМетаданных("Роль.ДобавлениеИзменениеВидовКонтактнойИнформации")); + КонецЕсли; + СоответствиеРолей.Вставить(ИмяРоли, МассивРолей); + + // Найти профили, использующие удаленные роли + Запрос = Новый Запрос; + Запрос.Текст = "ВЫБРАТЬ + | РолиПрофилей.Ссылка КАК Профиль, + | ИдентификаторыУдаленныхРолей.Ссылка КАК ИдентификаторРоли, + | ИдентификаторыУдаленныхРолей.Имя + |ИЗ + | Справочник.ПрофилиГруппДоступа.Роли КАК РолиПрофилей + | ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.ИдентификаторыОбъектовМетаданных КАК ИдентификаторыУдаленныхРолей + | ПО РолиПрофилей.Роль = ИдентификаторыУдаленныхРолей.Ссылка + | И ИдентификаторыУдаленныхРолей.Имя В (&МассивУдаленныхРолей) + |ИТОГИ ПО + | Профиль"; + + Запрос.УстановитьПараметр("МассивУдаленныхРолей", МассивУдаленныхРолей); + ДеревоПрофилей = Запрос.Выполнить().Выгрузить(ОбходРезультатаЗапроса.ПоГруппировкам); + + Для Каждого СтрокаПрофиля Из ДеревоПрофилей.Строки Цикл + + ПрофильОбъект = СтрокаПрофиля.Профиль.ПолучитьОбъект(); + РолиПрофиля = ПрофильОбъект.Роли; + + Для Каждого СтрокаРоли Из СтрокаПрофиля.Строки Цикл + + // Удаляем роль из профиля + Отбор = Новый Структура("Роль", СтрокаРоли.ИдентификаторРоли); + СтрокаТабличнойЧасти = РолиПрофиля.НайтиСтроки(Отбор)[0]; + РолиПрофиля.Удалить(СтрокаТабличнойЧасти); + + // Добавляем новые роли + ДобавляемыеРоли = СоответствиеРолей.Получить(СтрокаРоли.Имя); + Для Каждого ДобавляемаяРоль Из ДобавляемыеРоли Цикл + + Отбор = Новый Структура; + Отбор.Вставить("Роль", ДобавляемаяРоль); + Если РолиПрофиля.НайтиСтроки(Отбор).Количество() = 0 Тогда + НоваяСтрока = РолиПрофиля.Добавить(); + НоваяСтрока.Роль = ДобавляемаяРоль; + КонецЕсли; + + КонецЦикла; + + КонецЦикла; + + Отбор = Новый Структура; + Отбор.Вставить("Роль", ОбщегоНазначения.ИдентификаторОбъектаМетаданных("Роль.ДобавлениеИзменениеВидовКонтактнойИнформации")); + НайденныеРоли = РолиПрофиля.НайтиСтроки(Отбор); + Если НайденныеРоли.Количество() > 1 Тогда + РолиПрофиля.Удалить(ОбщегоНазначения.ИдентификаторОбъектаМетаданных("Роль.ДобавлениеИзменениеВидовКонтактнойИнформации")); + КонецЕсли; + + ОбновлениеИнформационнойБазы.ЗаписатьДанные(ПрофильОбъект,, Истина); + + КонецЦикла; + +КонецПроцедуры + //////////////////////////////////////////////////////////////////////////////// // Вспомогательные процедуры и функции. -Процедура ПриИзмененииНаборовЗначенийДоступа(Знач СсылкаНаОбъект) +Процедура ПриИзмененииНаборовЗначенийДоступа(Знач СсылкаНаОбъект, ОбновлениеИБ = Ложь) СсылкиНаЗависимыеОбъекты = Новый Массив; @@ -3780,7 +3724,7 @@ Если СсылкаНаЗависимыйОбъект.Метаданные().ТабличныеЧасти.Найти("НаборыЗначенийДоступа") = Неопределено Тогда // Изменение объекта не требуется. - ЗаписатьНаборыЗначенийДоступа(СсылкаНаЗависимыйОбъект); + ЗаписатьНаборыЗначенийДоступа(СсылкаНаЗависимыйОбъект, , ОбновлениеИБ); Иначе // Изменение объекта требуется. Объект = СсылкаНаЗависимыйОбъект.ПолучитьОбъект(); @@ -3791,28 +3735,34 @@ ПодготовитьНаборыЗначенийДоступаКЗаписи(Неопределено, Таблица, Ложь); Попытка ЗаблокироватьДанныеДляРедактирования(СсылкаНаЗависимыйОбъект, Объект.ВерсияДанных); - Объект.ОбменДанными.Загрузка = Истина; Объект.ДополнительныеСвойства.Вставить("ЗаписатьНаборыЗначенийДоступа"); Объект.ДополнительныеСвойства.Вставить("ЗаписатьЗависимыеНаборыЗначенийДоступа"); Объект.ДополнительныеСвойства.Вставить("НаборыЗначенийДоступаТабличнойЧастиЗаполнены"); Объект.НаборыЗначенийДоступа.Загрузить(Таблица); - Объект.Записать(); + Если ОбновлениеИБ Тогда + Объект.ДополнительныеСвойства.Вставить("ЗаписьНаборовЗначенийДоступаПриОбновленииИБ"); + ОбновлениеИнформационнойБазы.ЗаписатьДанные(Объект); + Иначе + Объект.ОбменДанными.Загрузка = Истина; + Объект.Записать(); + КонецЕсли; РазблокироватьДанныеДляРедактирования(СсылкаНаЗависимыйОбъект); Исключение - КраткоеПредставлениеОшибки = КраткоеПредставлениеОшибки(ИнформацияОбОшибке()); + ИнформацияОбОшибке = ИнформацияОбОшибке(); ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'При обновлении зависимого набора значений доступа объекта |""%1"" возникла ошибка: | |%2'"), Строка(СсылкаНаЗависимыйОбъект), - КраткоеПредставлениеОшибки); + КраткоеПредставлениеОшибки(ИнформацияОбОшибке())); КонецПопытки; КонецЕсли; КонецЦикла; КонецПроцедуры +// Для процедур ОбновитьНаборЗаписей, ОбновитьНаборыЗаписей, ОбновитьРегистрСведений. Процедура ЗаполнитьПараметры(ВходныеПараметры, Знач ВсеПараметры, Знач ОбязательныеПараметры = "") Если ТипЗнч(ВходныеПараметры) = Тип("Структура") Тогда @@ -3829,7 +3779,8 @@ Для каждого КлючИЗначение Из Параметры Цикл Если Не ВсеПараметры.Свойство(КлючИЗначение.Ключ) Тогда ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Указан несуществующий параметр %1'"), КлючИЗначение.Ключ); + НСтр("ru = 'Указан несуществующий параметр %1'"), + КлючИЗначение.Ключ); КонецЕсли; ВсеПараметры[КлючИЗначение.Ключ] = Параметры[КлючИЗначение.Ключ]; КонецЦикла; @@ -3840,7 +3791,8 @@ Для каждого КлючИЗначение Из ОбязательныеПараметры Цикл Если Не Параметры.Свойство(КлючИЗначение.Ключ) Тогда ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Не указан обязательный параметр %1'"), КлючИЗначение.Ключ); + НСтр("ru = 'Не указан обязательный параметр %1'"), + КлючИЗначение.Ключ); КонецЕсли; КонецЦикла; КонецЕсли; @@ -3849,6 +3801,12 @@ КонецПроцедуры +Процедура ПослеПолученияДанных(Отправитель, Отказ, ОтПодчиненного) + + УправлениеДоступом.ОбновитьРолиПользователей(); + +КонецПроцедуры + // Для процедур ВключитьПользователяВГруппуДоступа, ИсключитьПользователяИзГруппыДоступа // и функции НайтиПользователяВГруппеДоступа. @@ -3889,8 +3847,8 @@ Возврат Ложь; КонецЕсли; - СвойстваПрофиля = УправлениеДоступомСлужебныйПовтИсп.Параметры( - ).ПоставляемыеПрофилиГруппДоступа.ОписанияПрофилей.Получить(ИдентификаторПоставляемогоПрофиля); + ПоставляемыеПрофили = УправлениеДоступомСлужебныйПовтИсп.Параметры().ПоставляемыеПрофилиГруппДоступа; + СвойстваПрофиля = ПоставляемыеПрофили.ОписанияПрофилей.Получить(ИдентификаторПоставляемогоПрофиля); Если СвойстваПрофиля = Неопределено ИЛИ СвойстваПрофиля.ВидыДоступа.Количество() <> 0 Тогда @@ -4020,6 +3978,228 @@ КонецФункции +// Для процедуры ЗаписатьНаборыЗначенийДоступаПриЗаписи. + +// Перезаписывает наборы значений доступа проверяемого объекта +// в РегистрСведений.НаборыЗначенийДоступа, используя процедуру +// УправлениеДоступом.ЗаполнитьНаборыЗначенийДоступа(). +// +// Процедура вызывается из УправлениеДоступомСлужебный.ЗаписатьНаборыЗначенийДоступа(), +// но может быть вызвана из любого места, например, +// при включении ограничения доступа на уровне записей. +// +// Вызывает процедуру прикладного разработчика +// УправлениеДоступомПереопределяемый.ПриИзмененииНаборовЗначенийДоступа(), +// которая используется для перезаписи зависимых наборов значений доступа. +// +// Параметры: +// Объект - СправочникОбъект, ДокументОбъект, ..., или СправочникСсылка, ДокументСсылка, ... +// В случае вызова с клиента можно передать только ссылку, а нужен объект. +// Если получена ссылка, то по ней будет получен объект. +// ОбновлениеИБ - Булево - если Истина, то необходимо выполнять запись данных, +// не выполняя лишних, избыточных действий с данными. +// См. ОбновлениеИнформационнойБазы.ЗаписатьДанные. +// +Процедура ЗаписатьНаборыЗначенийДоступа(Знач Объект, ЕстьИзменения = Неопределено, ОбновлениеИБ = Ложь) + + УстановитьПривилегированныйРежим(Истина); + + // Если передача параметра Объект производилась с клиента на сервер, + // то передавалась ссылка, и объект требуется получить. + Объект = ?(Объект = Объект.Ссылка, Объект.ПолучитьОбъект(), Объект); + СсылкаНаОбъект = Объект.Ссылка; + ТипЗначенияОбъект = ТипЗнч(Объект); + + НаборыЗаписываются = УправлениеДоступомСлужебныйПовтИсп.ТипыОбъектовВПодпискахНаСобытия( + "ЗаписатьНаборыЗначенийДоступа").Получить(ТипЗначенияОбъект) <> Неопределено; + + Если НЕ НаборыЗаписываются Тогда + ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Неверные параметры. + |Тип объекта ""%1"" + |не найден в подписках на события + |""Записать наборы значений доступа"".'"), + ТипЗначенияОбъект); + КонецЕсли; + + ВозможныеТипыОбъектов = УправлениеДоступомСлужебныйПовтИсп.ТипыПоляТаблицы( + "РегистрСведений.НаборыЗначенийДоступа.Измерение.Объект"); + + Если ВозможныеТипыОбъектов.Получить(ТипЗнч(СсылкаНаОбъект)) = Неопределено Тогда + ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Ошибка при записи наборов значений доступа: + |в регистре сведений НаборыЗначенийДоступа в измерении Объект + |не задан тип ""%1"".'"), + СсылкаНаОбъект.Метаданные().ПолноеИмя()); + КонецЕсли; + + Если УправлениеДоступом.ОграничиватьДоступНаУровнеЗаписей() Тогда + + Если Метаданные.НайтиПоТипу(ТипЗначенияОбъект).ТабличныеЧасти.Найти("НаборыЗначенийДоступа") = Неопределено Тогда + + Таблица = УправлениеДоступом.ТаблицаНаборыЗначенийДоступа(); + УправлениеДоступом.ЗаполнитьНаборыЗначенийДоступа(Объект, Таблица); + + УправлениеДоступом.ДобавитьНаборыЗначенийДоступа( + Таблица, УправлениеДоступом.ТаблицаНаборыЗначенийДоступа(), Ложь, Истина); + Иначе + ТабличнаяЧастьЗаполняется = УправлениеДоступомСлужебныйПовтИсп.ТипыОбъектовВПодпискахНаСобытия( + "ЗаполнитьНаборыЗначенийДоступаТабличныхЧастей").Получить(ТипЗначенияОбъект) <> Неопределено; + + Если НЕ ТабличнаяЧастьЗаполняется Тогда + ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Неверные параметры. + |Тип объекта ""%1"" + |не найден в подписках на события + |""Заполнить наборы значений доступа табличных частей"".'"), + ТипЗначенияОбъект); + КонецЕсли; + // Записан объект с уже заполненной табличной частью НаборыЗначенийДоступа. + Таблица = Объект.НаборыЗначенийДоступа.Выгрузить(); + КонецЕсли; + + ПодготовитьНаборыЗначенийДоступаКЗаписи(СсылкаНаОбъект, Таблица, Истина); + + Данные = Новый Структура; + Данные.Вставить("МенеджерРегистра", РегистрыСведений.НаборыЗначенийДоступа); + Данные.Вставить("ФиксированныйОтбор", Новый Структура("Объект", СсылкаНаОбъект)); + Данные.Вставить("НовыеЗаписи", Таблица); + Данные.Вставить("ОбновлениеИБ", ОбновлениеИБ); + + НачатьТранзакцию(); + Попытка + ОбновитьНаборыЗаписей(Данные, ЕстьИзменения); + ЗафиксироватьТранзакцию(); + Исключение + ОтменитьТранзакцию(); + ВызватьИсключение; + КонецПопытки; + + Если ЕстьИзменения = Истина Тогда + ПриИзмененииНаборовЗначенийДоступа(СсылкаНаОбъект, ОбновлениеИБ); + КонецЕсли; + Иначе + Запрос = Новый Запрос( + "ВЫБРАТЬ ПЕРВЫЕ 1 + | ИСТИНА КАК ЗначениеИстина + |ИЗ + | РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначенийДоступа + |ГДЕ + | НаборыЗначенийДоступа.Объект = &СсылкаНаОбъект"); + + Запрос.УстановитьПараметр("СсылкаНаОбъект", СсылкаНаОбъект); + + Если НЕ Запрос.Выполнить().Пустой() Тогда + // Очистка устаревшего набора. + // Запись нового набора будет выполнена регламентным заданием, + // после включения ограничения на уровне записей. + НаборЗаписей = РегистрыСведений.НаборыЗначенийДоступа.СоздатьНаборЗаписей(); + НаборЗаписей.Отбор.Объект.Установить(СсылкаНаОбъект); + НаборЗаписей.Записать(); + ЕстьИзменения = Истина; + + // Очистка устаревших зависимых наборов. + ПриИзмененииНаборовЗначенийДоступа(СсылкаНаОбъект, ОбновлениеИБ); + КонецЕсли; + КонецЕсли; + +КонецПроцедуры + +// Для процедуры ЗаписатьЗависимыеНаборыЗначенийДоступаПриЗаписи. + +// Перезаписывает наборы значений доступа зависимых объектов. +// +// Процедура вызывается из УправлениеДоступомСлужебный.ЗаписатьЗависимыеНаборыЗначенийДоступа(), +// состав типов подписки дополняет (без пересечения) состав типов подписки ЗаписатьНаборыЗначенийДоступа, +// теми типами, для которых выполнять запись наборов в регистр сведений НаборыЗначенийДоступа +// не требуется, но сами наборы входят в состав других наборов, например, наборы некоторых файлов +// из справочника "Файлы" могут входить в состав некоторых бизнес-процессов "Задание", созданных +// на основании файлов, при этом наборы файлов записывать в регистр не требуется. +// +// Вызывает процедуру прикладного разработчика +// УправлениеДоступомПереопределяемый.ПриИзмененииНаборовЗначенийДоступа(), +// которая используется для перезаписи зависимых наборов значений доступа, +// то есть организуется рекурсия. +// +// Параметры: +// Объект - СправочникОбъект, ДокументОбъект, ..., или СправочникСсылка, ДокументСсылка, ... +// В случае вызова с клиента можно передать только ссылку, а нужен объект. +// Если получена ссылка, то по ней будет получен объект. +// +// ОбновлениеИБ - Булево - если Истина, то необходимо выполнять запись данных, +// не выполняя лишних, избыточных действий с данными. +// См. ОбновлениеИнформационнойБазы.ЗаписатьДанные. +// +Процедура ЗаписатьЗависимыеНаборыЗначенийДоступа(Знач Объект, ОбновлениеИБ = Ложь) + + УстановитьПривилегированныйРежим(Истина); + + // Если передача параметра Объект производилась с клиента на сервер, + // то передавалась ссылка, и объект требуется получить. + Объект = ?(Объект = Объект.Ссылка, Объект.ПолучитьОбъект(), Объект); + СсылкаНаОбъект = Объект.Ссылка; + ТипЗначенияОбъект = ТипЗнч(Объект); + + ЭтоВедущийОбъект = УправлениеДоступомСлужебныйПовтИсп.ТипыОбъектовВПодпискахНаСобытия( + "ЗаписатьЗависимыеНаборыЗначенийДоступа").Получить(ТипЗначенияОбъект) <> Неопределено; + + Если НЕ ЭтоВедущийОбъект Тогда + ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Неверные параметры. + |Тип объекта ""%1"" + |не найден в подписке на события + |""Записать зависимые наборы значений доступа"".'"), + ТипЗначенияОбъект); + КонецЕсли; + + ПриИзмененииНаборовЗначенийДоступа(СсылкаНаОбъект, ОбновлениеИБ); + +КонецПроцедуры + +// Для процедур ОбновитьВспомогательныеДанныеПоИзменениямКонфигурации и +// ЗаполнитьОбработчикиРазделенныхДанных. + +// Проверяет были ли изменения неразделенных данных для какой-нибудь области данных. +Функция ЕстьИзмененияПараметровОграниченияДоступа() + + УстановитьПривилегированныйРежим(Истина); + + ПоследниеИзменения = СтандартныеПодсистемыСервер.ИзмененияПараметраРаботыПрограммы( + ПользователиСлужебныйПовтИсп.Параметры(), "НедоступныеРолиПоТипамПользователей"); + + Если ПоследниеИзменения = Неопределено + ИЛИ ПоследниеИзменения.Количество() > 0 Тогда + + Возврат Истина; + КонецЕсли; + + ПроверяемыеПараметры = Новый Массив; + ПроверяемыеПараметры.Добавить("ОбъектыМетаданныхПравРолей"); + ПроверяемыеПараметры.Добавить("ВозможныеПраваДляНастройкиПравОбъектов"); + ПроверяемыеПараметры.Добавить("ПоставляемыеПрофилиГруппДоступа"); + ПроверяемыеПараметры.Добавить("ПредопределенныеПрофилиГруппДоступа"); + ПроверяемыеПараметры.Добавить("ТипыГруппИЗначенийДоступа"); + + Параметры = УправлениеДоступомСлужебныйПовтИсп.Параметры(); + + Для каждого ПроверяемыйПараметр Из ПроверяемыеПараметры Цикл + + ПоследниеИзменения = СтандартныеПодсистемыСервер.ИзмененияПараметраРаботыПрограммы( + Параметры, ПроверяемыйПараметр); + + Если ПоследниеИзменения = Неопределено + ИЛИ ПоследниеИзменения.Количество() > 0 Тогда + + Возврат Истина; + КонецЕсли; + + КонецЦикла; + + Возврат Ложь; + +КонецФункции + + // Для процедуры ОбновитьРолиПользователей. Функция ТекущиеСвойстваПользователей(МассивПользователей) @@ -4116,11 +4296,7 @@ | И (ВнешниеПользователи.ИдентификаторПользователяИБ <> &ПустойИдентификатор)"; КонецЕсли; - Запрос.Текст = Запрос.Текст + " - |; - | - |//////////////////////////////////////////////////////////////////////////////// - |" + + ТекстЗапроса = "ВЫБРАТЬ | Пользователи.Ссылка КАК Ссылка, | Пользователи.ИдентификаторПользователяИБ @@ -4199,6 +4375,12 @@ |ГДЕ | НЕ ПрофилиПользователей.ПрофильнаяРоль ЕСТЬ NULL "; + Запрос.Текст = Запрос.Текст + " + |; + | + |//////////////////////////////////////////////////////////////////////////////// + |" + ТекстЗапроса; + ПрофильныеРоли = Новый ТаблицаЗначений; ПрофильныеРоли.Колонки.Добавить("Профиль", Новый ОписаниеТипов("СправочникСсылка.ПрофилиГруппДоступа")); ПрофильныеРоли.Колонки.Добавить("Роль", Новый ОписаниеТипов("Строка",, Новый КвалификаторыСтроки(255))); @@ -4214,7 +4396,7 @@ Запрос.УстановитьПараметр("ПрофильныеРоли", ПрофильныеРоли); - Если ПолучитьФункциональнуюОпцию("ИспользоватьВнешнихПользователей") Тогда + Если Константы.ИспользоватьВнешнихПользователей.Получить() Тогда Запрос.Текст = СтрЗаменить(Запрос.Текст, "&ИсключитьВнешнихПользователей", "Истина"); Иначе Запрос.Текст = СтрЗаменить(Запрос.Текст, "&ИсключитьВнешнихПользователей", @@ -4329,7 +4511,10 @@ |Операция может быть выполнена только интерактивно.'"); КонецЕсли; - ПриЗаписиПользователяСервиса(ПользовательСсылка, Ложь, ПарольПользователяСервиса); + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаВМоделиСервиса.ПользователиВМоделиСервиса") Тогда + МодульПользователиСлужебныйВМоделиСервиса = ОбщегоНазначения.ОбщийМодуль("ПользователиСлужебныйВМоделиСервиса"); + МодульПользователиСлужебныйВМоделиСервиса.ЗаписатьПользователяСервиса(ПользовательСсылка, Ложь, ПарольПользователяСервиса); + КонецЕсли; ЗафиксироватьТранзакцию(); @@ -4350,6 +4535,18 @@ КонецФункции +// Для процедур ОбновитьНаборЗаписей, ОбновитьНовыеЗаписиНабораПоРазличнымНовымЗаписям. + +Процедура ЗаписатьОбъектИлиНаборЗаписей(Данные, ОбъектИлиНаборЗаписей) + + Если Данные.ОбновлениеИБ Тогда + ОбновлениеИнформационнойБазы.ЗаписатьДанные(ОбъектИлиНаборЗаписей); + Иначе + ОбъектИлиНаборЗаписей.Записать(); + КонецЕсли; + +КонецПроцедуры + // Для процедур ОбновитьНаборЗаписей и ОбновитьНаборыЗаписей. Функция ГруппаПараметровИзмеренияОбработана(ИмяИзмерения, ЗначенияИзмерения) @@ -4578,7 +4775,7 @@ Если Данные.ТолькоПроверка Тогда Возврат; КонецЕсли; - Данные.НаборДляОднойЗаписи.Записать(); + ЗаписатьОбъектИлиНаборЗаписей(Данные, Данные.НаборДляОднойЗаписи); КонецЦикла; КонецЕсли; @@ -4954,8 +5151,8 @@ Параметры = ПараметрыФормыРедактированияРазрешенныхЗначений(Форма, ТекущийОбъект); - ПоТипамГруппИЗначений = УправлениеДоступомСлужебныйПовтИсп.Параметры( - ).СвойстваВидовДоступа.ПоТипамГруппИЗначений; + СвойстваВидовДоступа = УправлениеДоступомСлужебныйПовтИсп.Параметры().СвойстваВидовДоступа; + ПоТипамГруппИЗначений = СвойстваВидовДоступа.ПоТипамГруппИЗначений; Отбор = УправлениеДоступомСлужебныйКлиентСервер.ОтборВТаблицахФормыРедактированияРазрешенныхЗначений( Форма, ""); @@ -5017,7 +5214,7 @@ // Для процедуры УстановкаПараметровСеанса. -Функция ВсеКомбинацииВидовДоступа(НеупорядоченныйМассивИмен) Экспорт +Функция ВсеКомбинацииВидовДоступа(НеупорядоченныйМассивИмен) // Ограничение на максимальную длину комбинации, чтобы не допустить // перегрузку параметров сеанса и препроцессора шаблонов ОДД. @@ -5032,17 +5229,18 @@ Список.СортироватьПоЗначению(); МассивИмен = Список.ВыгрузитьЗначения(); - Итог = ""; + ИтогСтроки = Новый Массив; + ИтогСтрока = Новый Массив; // Полный список поддерживается всегда. Для каждого Имя Из МассивИмен Цикл - Итог = Итог + "," + Имя; + ИтогСтрока.Добавить(Имя); КонецЦикла; - Итог = Итог + "," + Символы.ПС; + ИтогСтроки.Добавить(ИтогСтрока); Если МассивИмен.Количество() < 3 Тогда - Возврат Итог; + Возврат ГруппыСтрокВСтроку(ИтогСтроки); КонецЕсли; ПервоеИмя = МассивИмен[0]; @@ -5069,11 +5267,13 @@ Пока ДлинаКомбинации > 0 Цикл Пока Истина Цикл // Добавление комбинации из текущих позиций. - Итог = Итог + "," + ПервоеИмя; + ИтогСтрока = Новый Массив; + ИтогСтрока.Добавить(ПервоеИмя); Для Индекс = 0 По ДлинаКомбинации-1 Цикл - Итог = Итог + "," + МассивИмен[ПозицииИменВКомбинации[Индекс]-1]; + ИтогСтрока.Добавить(МассивИмен[ПозицииИменВКомбинации[Индекс]-1]); КонецЦикла; - Итог = Итог + "," + ПоследнееИмя + "," + Символы.ПС; + ИтогСтрока.Добавить(ПоследнееИмя); + ИтогСтроки.Добавить(ИтогСтрока); // Продвижение позиции в комбинации. Индекс = ДлинаКомбинации-1; Пока Индекс >= 0 Цикл @@ -5100,9 +5300,33 @@ КонецЦикла; КонецЕсли; - Итог = Итог + "," + ПервоеИмя+ "," + ПоследнееИмя + "," + Символы.ПС; + ИтогСтрока = Новый Массив; + ИтогСтрока.Добавить(ПервоеИмя); + ИтогСтрока.Добавить(ПоследнееИмя); + ИтогСтроки.Добавить(ИтогСтрока); - Возврат Итог; + Возврат ГруппыСтрокВСтроку(ИтогСтроки); + +КонецФункции + +Функция ГруппыСтрокВСтроку(ГруппыСтрок) + + ИтогСтроки = Новый Массив; + + Для Каждого ИтогСтрока Из ГруппыСтрок Цикл + ИтогСтроки.Добавить(СтрСоединить(ИтогСтрока, ",")); + КонецЦикла; + + Строки = СтрСоединить( + ИтогСтроки, + ", + |,"); + + Шаблон = + "%2%1%2 + |"; + + Возврат СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(Шаблон, Строки, ","); КонецФункции diff --git a/SSL/src/CommonModules/УправлениеДоступомСлужебныйВМоделиСервиса/Module.bsl b/SSL/src/CommonModules/УправлениеДоступомСлужебныйВМоделиСервиса/Module.bsl index 302ccb3f7..b6a61ddaa 100644 --- a/SSL/src/CommonModules/УправлениеДоступомСлужебныйВМоделиСервиса/Module.bsl +++ b/SSL/src/CommonModules/УправлениеДоступомСлужебныйВМоделиСервиса/Module.bsl @@ -39,26 +39,7 @@ // Процедура ПриПолученииСпискаШаблонов(Шаблоны) Экспорт - Шаблоны.Добавить("ЗаполнениеДанныхДляОграниченияДоступа"); - -КонецПроцедуры - -// Устанавливает в очереди заданий флаг использования того задания, которое -// соответствует регламентному заданию для заполнения данных ограничения доступа. -// -// Параметры: -// Использование - Булево - новое значения флага использования. -// -Процедура УстановитьЗаполнениеДанныхДляОграниченияДоступа(Использование) Экспорт - - Шаблон = ОчередьЗаданий.ШаблонПоИмени("ЗаполнениеДанныхДляОграниченияДоступа"); - - ОтборЗадания = Новый Структура; - ОтборЗадания.Вставить("Шаблон", Шаблон); - Задания = ОчередьЗаданий.ПолучитьЗадания(ОтборЗадания); - - ПараметрыЗадания = Новый Структура("Использование", Использование); - ОчередьЗаданий.ИзменитьЗадание(Задания[0].Идентификатор, ПараметрыЗадания); + Шаблоны.Добавить(Метаданные.РегламентныеЗадания.ЗаполнениеДанныхДляОграниченияДоступа.Имя); КонецПроцедуры diff --git a/SSL/src/CommonModules/УправлениеДоступомСлужебныйВызовСервера/Module.bsl b/SSL/src/CommonModules/УправлениеДоступомСлужебныйВызовСервера/Module.bsl index a24fd33bd..8616b2fc9 100644 --- a/SSL/src/CommonModules/УправлениеДоступомСлужебныйВызовСервера/Module.bsl +++ b/SSL/src/CommonModules/УправлениеДоступомСлужебныйВызовСервера/Module.bsl @@ -22,172 +22,4 @@ КонецФункции -// Возвращает список значений доступа не помеченных на удаление. -// Используется в обработчиках событий ОкончаниеВводаТекста и АвтоПодбор. -// -// Параметры: -// Текст - Строка - символы введенные пользователем. -// ВключаяГруппы - Булево - если Истина, включать группы пользователей и внешних пользователей. -// ВидДоступа - Ссылка - пустая ссылка основного типа значения доступа, -// - Строка - имя вида доступа, значения доступа которого выбираются. -// -Функция СформироватьДанныеВыбораЗначенияДоступа(Знач Текст, Знач ВидДоступа, ВключаяГруппы = Истина) Экспорт - - СвойстваВидаДоступа = УправлениеДоступомСлужебный.СвойстваВидаДоступа(ВидДоступа); - Если СвойстваВидаДоступа = Неопределено Тогда - Возврат Новый СписокЗначений; - КонецЕсли; - - Запрос = Новый Запрос; - Запрос.УстановитьПараметр("Текст", Текст + "%"); - Запрос.УстановитьПараметр("ВключаяГруппы", ВключаяГруппы); - Запрос.Текст = - "ВЫБРАТЬ - | ПредставленияПеречислений.Ссылка КАК Ссылка, - | ПредставленияПеречислений.Наименование КАК Наименование - |ПОМЕСТИТЬ ПредставленияПеречислений - |ИЗ - | &ПредставленияПеречислений КАК ПредставленияПеречислений - |; - | - |//////////////////////////////////////////////////////////////////////////////// - |ВЫБРАТЬ РАЗРЕШЕННЫЕ - | НЕОПРЕДЕЛЕНО КАК Ссылка, - | """" КАК Наименование - |ГДЕ - | ЛОЖЬ"; - - ЗапросПредставленийПеречислений = Новый Запрос; - ЗапросПредставленийПеречислений.Текст = - "ВЫБРАТЬ - | """" КАК Ссылка, - | """" КАК Наименование - |ГДЕ - | ЛОЖЬ"; - - Для каждого Тип Из СвойстваВидаДоступа.ТипыВыбираемыхЗначений Цикл - ОбъектМетаданных = Метаданные.НайтиПоТипу(Тип); - ПолноеИмяТаблицы = ОбъектМетаданных.ПолноеИмя(); - - Если ( Метаданные.Справочники.Содержит(ОбъектМетаданных) - ИЛИ Метаданные.ПланыВидовХарактеристик.Содержит(ОбъектМетаданных) ) - И ОбъектМетаданных.Иерархический - И ОбъектМетаданных.ВидИерархии = Метаданные.СвойстваОбъектов.ВидИерархии.ИерархияГруппИЭлементов - И НЕ ВключаяГруппы Тогда - - УсловиеДляГруппы = "НЕ Таблица.ЭтоГруппа"; - Иначе - УсловиеДляГруппы = "Истина"; - КонецЕсли; - - Если Метаданные.Перечисления.Содержит(ОбъектМетаданных) Тогда - ТекстЗапроса = - "ВЫБРАТЬ - | Таблица.Ссылка КАК Ссылка, - | ПРЕДСТАВЛЕНИЕ(Таблица.Ссылка) КАК Наименование - |ИЗ - | &ПолноеИмяТаблицы КАК Таблица"; - ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&ПолноеИмяТаблицы", ПолноеИмяТаблицы); - - ЗапросПредставленийПеречислений.Текст = ЗапросПредставленийПеречислений.Текст - + Символы.ПС + Символы.ПС + " ОБЪЕДИНИТЬ ВСЕ " + Символы.ПС + Символы.ПС - + ТекстЗапроса; - Иначе - ТекстЗапроса = - "ВЫБРАТЬ - | Таблица.Ссылка КАК Ссылка, - | Таблица.Наименование КАК Наименование - |ИЗ - | &ПолноеИмяТаблицы КАК Таблица - |ГДЕ - | (НЕ Таблица.ПометкаУдаления) - | И Таблица.Наименование ПОДОБНО &Текст - | И &УсловиеДляГруппы"; - ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&ПолноеИмяТаблицы", ПолноеИмяТаблицы); - ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&УсловиеДляГруппы", УсловиеДляГруппы); - ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "Таблица.Наименование", - "Таблица." + ПолеПредставления(ОбъектМетаданных)); - - Запрос.Текст = Запрос.Текст - + Символы.ПС + Символы.ПС + " ОБЪЕДИНИТЬ ВСЕ " + Символы.ПС + Символы.ПС - + ТекстЗапроса; - КонецЕсли; - КонецЦикла; - - Запрос.УстановитьПараметр("ПредставленияПеречислений", - ЗапросПредставленийПеречислений.Выполнить().Выгрузить()); - - Запрос.Текст = Запрос.Текст - + Символы.ПС + Символы.ПС + " ОБЪЕДИНИТЬ ВСЕ " + Символы.ПС + Символы.ПС; - - Запрос.Текст = Запрос.Текст + - "ВЫБРАТЬ - | ПредставленияПеречислений.Ссылка, - | ПредставленияПеречислений.Наименование - |ИЗ - | ПредставленияПеречислений КАК ПредставленияПеречислений - |ГДЕ - | ПредставленияПеречислений.Наименование ПОДОБНО &Текст"; - - ДанныеВыбора = Новый СписокЗначений; - - Выборка = Запрос.Выполнить().Выбрать(); - Пока Выборка.Следующий() Цикл - ДанныеВыбора.Добавить(Выборка.Ссылка, Выборка.Наименование); - КонецЦикла; - - Возврат ДанныеВыбора; - -КонецФункции - -Функция ПолеПредставления(ОбъектМетаданных) - - ПолеПредставления = "Наименование"; - - Если Метаданные.ПланыОбмена.Содержит(ОбъектМетаданных) Тогда - - Если ОбъектМетаданных.ОсновноеПредставление - = Метаданные.СвойстваОбъектов.ОсновноеПредставлениеПланаОбмена.ВВидеКода Тогда - - ПолеПредставления = "Код"; - КонецЕсли; - - ИначеЕсли Метаданные.Справочники.Содержит(ОбъектМетаданных) Тогда - - Если ОбъектМетаданных.ОсновноеПредставление - = Метаданные.СвойстваОбъектов.ОсновноеПредставлениеСправочника.ВВидеКода Тогда - - ПолеПредставления = "Код"; - КонецЕсли; - - ИначеЕсли Метаданные.ПланыВидовХарактеристик.Содержит(ОбъектМетаданных) Тогда - - Если ОбъектМетаданных.ОсновноеПредставление - = Метаданные.СвойстваОбъектов.ОсновноеПредставлениеВидаХарактеристики.ВВидеКода Тогда - - ПолеПредставления = "Код"; - КонецЕсли; - - ИначеЕсли Метаданные.ПланыСчетов.Содержит(ОбъектМетаданных) Тогда - - Если ОбъектМетаданных.ОсновноеПредставление - = Метаданные.СвойстваОбъектов.ОсновноеПредставлениеСчета.ВВидеКода Тогда - - ПолеПредставления = "Код"; - КонецЕсли; - - ИначеЕсли Метаданные.ПланыВидовРасчета.Содержит(ОбъектМетаданных) Тогда - - Если ОбъектМетаданных.ОсновноеПредставление - = Метаданные.СвойстваОбъектов.ОсновноеПредставлениеВидаРасчета.ВВидеКода Тогда - - ПолеПредставления = "Код"; - КонецЕсли; - - КонецЕсли; - - Возврат ПолеПредставления; - -КонецФункции - #КонецОбласти diff --git a/SSL/src/CommonModules/УправлениеДоступомСлужебныйКлиент/Module.bsl b/SSL/src/CommonModules/УправлениеДоступомСлужебныйКлиент/Module.bsl index 9629c9470..8870b228b 100644 --- a/SSL/src/CommonModules/УправлениеДоступомСлужебныйКлиент/Module.bsl +++ b/SSL/src/CommonModules/УправлениеДоступомСлужебныйКлиент/Module.bsl @@ -42,7 +42,16 @@ Элементы = Форма.Элементы; Если Элемент.ТекущиеДанные.ЗначениеДоступа = Неопределено Тогда - Элемент.ТекущиеДанные.ЗначениеДоступа = Форма.ТекущиеТипыВыбираемыхЗначений[0].Значение; + Если Форма.ТекущиеТипыВыбираемыхЗначений.Количество() > 1 + И Форма.ТекущийВидДоступа <> Форма.ВидДоступаВнешниеПользователи + И Форма.ТекущийВидДоступа <> Форма.ВидДоступаПользователи Тогда + + Элементы.ЗначенияДоступаЗначениеДоступа.КнопкаВыбора = Истина; + Иначе + Элементы.ЗначенияДоступаЗначениеДоступа.КнопкаВыбора = Неопределено; + Элементы.ЗначенияДоступа.ТекущиеДанные.ЗначениеДоступа = Форма.ТекущиеТипыВыбираемыхЗначений[0].Значение; + Форма.ТекущийТипВыбираемыхЗначений = Форма.ТекущиеТипыВыбираемыхЗначений[0].Значение + КонецЕсли; КонецЕсли; Элементы.ЗначенияДоступаЗначениеДоступа.КнопкаОчистки @@ -56,12 +65,7 @@ СтандартнаяОбработка = Ложь; - Если Форма.ТекущийТипВыбираемыхЗначений <> Неопределено Тогда - - ЗначениеДоступаНачалоВыбораЗавершение(Форма); - Возврат; - - ИначеЕсли Форма.ТекущиеТипыВыбираемыхЗначений.Количество() = 1 Тогда + Если Форма.ТекущиеТипыВыбираемыхЗначений.Количество() = 1 Тогда Форма.ТекущийТипВыбираемыхЗначений = Форма.ТекущиеТипыВыбираемыхЗначений[0].Значение; @@ -72,12 +76,7 @@ Если Форма.ТекущиеТипыВыбираемыхЗначений.Количество() = 2 Тогда - Если Форма.ТекущиеТипыВыбираемыхЗначений.НайтиПоЗначению(ПредопределенноеЗначение( - "Справочник.Пользователи.ПустаяСсылка")) <> Неопределено - - И Форма.ТекущиеТипыВыбираемыхЗначений.НайтиПоЗначению(ПредопределенноеЗначение( - "Справочник.ГруппыПользователей.ПустаяСсылка")) <> Неопределено Тогда - + Если Форма.ТекущийВидДоступа = Форма.ВидДоступаПользователи Тогда Форма.ТекущийТипВыбираемыхЗначений = ПредопределенноеЗначение( "Справочник.Пользователи.ПустаяСсылка"); @@ -85,12 +84,7 @@ Возврат; КонецЕсли; - Если Форма.ТекущиеТипыВыбираемыхЗначений.НайтиПоЗначению(ПредопределенноеЗначение( - "Справочник.ВнешниеПользователи.ПустаяСсылка")) <> Неопределено - - И Форма.ТекущиеТипыВыбираемыхЗначений.НайтиПоЗначению(ПредопределенноеЗначение( - "Справочник.ГруппыВнешнихПользователей.ПустаяСсылка")) <> Неопределено Тогда - + Если Форма.ТекущийВидДоступа = Форма.ВидДоступаВнешниеПользователи Тогда Форма.ТекущийТипВыбираемыхЗначений = ПредопределенноеЗначение( "Справочник.ВнешниеПользователи.ПустаяСсылка"); @@ -112,8 +106,8 @@ ТекущиеДанные = Форма.Элементы.ЗначенияДоступа.ТекущиеДанные; - Если ВыбранноеЗначение = Тип("СправочникСсылка.Пользователи") ИЛИ - ВыбранноеЗначение = Тип("СправочникСсылка.ГруппыПользователей") Тогда + Если ВыбранноеЗначение = Тип("СправочникСсылка.Пользователи") + Или ВыбранноеЗначение = Тип("СправочникСсылка.ГруппыПользователей") Тогда СтандартнаяОбработка = Ложь; @@ -124,8 +118,8 @@ ОткрытьФорму("Справочник.Пользователи.ФормаВыбора", ПараметрыФормы, Элемент); - ИначеЕсли ВыбранноеЗначение = Тип("СправочникСсылка.ВнешниеПользователи") ИЛИ - ВыбранноеЗначение = Тип("СправочникСсылка.ГруппыВнешнихПользователей") Тогда + ИначеЕсли ВыбранноеЗначение = Тип("СправочникСсылка.ВнешниеПользователи") + Или ВыбранноеЗначение = Тип("СправочникСсылка.ГруппыВнешнихПользователей") Тогда СтандартнаяОбработка = Ложь; @@ -168,11 +162,20 @@ Элементы = Форма.Элементы; СтандартнаяОбработка = Ложь; - ТекущийТипВыбираемыхЗначений = Неопределено; - - Элементы.ЗначенияДоступа.ТекущиеДанные.ЗначениеДоступа = Форма.ТекущиеТипыВыбираемыхЗначений[0].Значение; + Форма.ТекущийТипВыбираемыхЗначений = Неопределено; Элементы.ЗначенияДоступаЗначениеДоступа.КнопкаОчистки = Ложь; + Если Форма.ТекущиеТипыВыбираемыхЗначений.Количество() > 1 + И Форма.ТекущийВидДоступа <> Форма.ВидДоступаВнешниеПользователи + И Форма.ТекущийВидДоступа <> Форма.ВидДоступаПользователи Тогда + + Элементы.ЗначенияДоступаЗначениеДоступа.КнопкаВыбора = Истина; + Элементы.ЗначенияДоступа.ТекущиеДанные.ЗначениеДоступа = Неопределено; + Иначе + Элементы.ЗначенияДоступаЗначениеДоступа.КнопкаВыбора = Неопределено; + Элементы.ЗначенияДоступа.ТекущиеДанные.ЗначениеДоступа = Форма.ТекущиеТипыВыбираемыхЗначений[0].Значение; + КонецЕсли; + КонецПроцедуры // Только для внутреннего использования. @@ -189,76 +192,6 @@ КонецПроцедуры -// Продолжение обработчика события ЗначениеДоступаНачалоВыбора. -Процедура ЗначениеДоступаНачалоВыбораПродолжение(ВыбранныйЭлемент, Форма) Экспорт - - Если ВыбранныйЭлемент <> Неопределено Тогда - Форма.ТекущийТипВыбираемыхЗначений = ВыбранныйЭлемент.Значение; - ЗначениеДоступаНачалоВыбораЗавершение(Форма); - КонецЕсли; - -КонецПроцедуры - -// Завершение обработчика события ЗначениеДоступаНачалоВыбора. -Процедура ЗначениеДоступаНачалоВыбораЗавершение(Форма) Экспорт - - Элементы = Форма.Элементы; - Элемент = Элементы.ЗначенияДоступаЗначениеДоступа; - ТекущиеДанные = Элементы.ЗначенияДоступа.ТекущиеДанные; - - Если НЕ ЗначениеЗаполнено(ТекущиеДанные.ЗначениеДоступа) - И ТекущиеДанные.ЗначениеДоступа <> Форма.ТекущийТипВыбираемыхЗначений Тогда - - ТекущиеДанные.ЗначениеДоступа = Форма.ТекущийТипВыбираемыхЗначений; - КонецЕсли; - - Элементы.ЗначенияДоступаЗначениеДоступа.КнопкаОчистки - = Форма.ТекущийТипВыбираемыхЗначений <> Неопределено - И Форма.ТекущиеТипыВыбираемыхЗначений.Количество() > 1; - - Если Форма.ТекущийТипВыбираемыхЗначений - = ПредопределенноеЗначение("Справочник.Пользователи.ПустаяСсылка") - ИЛИ Форма.ТекущийТипВыбираемыхЗначений - = ПредопределенноеЗначение("Справочник.ГруппыПользователей.ПустаяСсылка") Тогда - - ПараметрыФормы = Новый Структура; - ПараметрыФормы.Вставить("РежимВыбора", Истина); - ПараметрыФормы.Вставить("ТекущаяСтрока", ТекущиеДанные.ЗначениеДоступа); - ПараметрыФормы.Вставить("ВыборГруппПользователей", Истина); - - ОткрытьФорму("Справочник.Пользователи.ФормаВыбора", ПараметрыФормы, Элемент); - Возврат; - - ИначеЕсли Форма.ТекущийТипВыбираемыхЗначений - = ПредопределенноеЗначение("Справочник.ВнешниеПользователи.ПустаяСсылка") - - ИЛИ Форма.ТекущийТипВыбираемыхЗначений - = ПредопределенноеЗначение("Справочник.ГруппыВнешнихПользователей.ПустаяСсылка") Тогда - - ПараметрыФормы = Новый Структура; - ПараметрыФормы.Вставить("РежимВыбора", Истина); - ПараметрыФормы.Вставить("ТекущаяСтрока", ТекущиеДанные.ЗначениеДоступа); - ПараметрыФормы.Вставить("ВыборГруппВнешнихПользователей", Истина); - - ОткрытьФорму("Справочник.ВнешниеПользователи.ФормаВыбора", ПараметрыФормы, Элемент); - Возврат; - КонецЕсли; - - Отбор = Новый Структура("ТипЗначений", Форма.ТекущийТипВыбираемыхЗначений); - НайденныеСтроки = Форма.ВсеТипыВыбираемыхЗначений.НайтиСтроки(Отбор); - - Если НайденныеСтроки.Количество() = 0 Тогда - Возврат; - КонецЕсли; - - ПараметрыФормы = Новый Структура; - ПараметрыФормы.Вставить("РежимВыбора", Истина); - ПараметрыФормы.Вставить("ТекущаяСтрока", ТекущиеДанные.ЗначениеДоступа); - - ОткрытьФорму(НайденныеСтроки[0].ИмяТаблицы + ".ФормаВыбора", ПараметрыФормы, Элемент); - -КонецПроцедуры - //////////////////////////////////////////////////////////////////////////////// // Обработчики событий таблицы формы ВидыДоступа. @@ -417,9 +350,68 @@ КонецПроцедуры +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +// Продолжение обработчика события ЗначениеДоступаНачалоВыбора. +Процедура ЗначениеДоступаНачалоВыбораПродолжение(ВыбранныйЭлемент, Форма) Экспорт + + Если ВыбранныйЭлемент <> Неопределено Тогда + Форма.ТекущийТипВыбираемыхЗначений = ВыбранныйЭлемент.Значение; + ЗначениеДоступаНачалоВыбораЗавершение(Форма); + КонецЕсли; + +КонецПроцедуры + //////////////////////////////////////////////////////////////////////////////// // Вспомогательные процедуры и функции. +// Завершение обработчика события ЗначениеДоступаНачалоВыбора. +Процедура ЗначениеДоступаНачалоВыбораЗавершение(Форма) + + Элементы = Форма.Элементы; + Элемент = Элементы.ЗначенияДоступаЗначениеДоступа; + ТекущиеДанные = Элементы.ЗначенияДоступа.ТекущиеДанные; + + Если НЕ ЗначениеЗаполнено(ТекущиеДанные.ЗначениеДоступа) + И ТекущиеДанные.ЗначениеДоступа <> Форма.ТекущийТипВыбираемыхЗначений Тогда + + ТекущиеДанные.ЗначениеДоступа = Форма.ТекущийТипВыбираемыхЗначений; + КонецЕсли; + + Элементы.ЗначенияДоступаЗначениеДоступа.КнопкаВыбора = Неопределено; + Элементы.ЗначенияДоступаЗначениеДоступа.КнопкаОчистки + = Форма.ТекущийТипВыбираемыхЗначений <> Неопределено + И Форма.ТекущиеТипыВыбираемыхЗначений.Количество() > 1; + + ПараметрыФормы = Новый Структура; + ПараметрыФормы.Вставить("РежимВыбора", Истина); + ПараметрыФормы.Вставить("ТекущаяСтрока", ТекущиеДанные.ЗначениеДоступа); + ПараметрыФормы.Вставить("ЭтоВыборЗначенияДоступа"); + + Если Форма.ТекущийВидДоступа = Форма.ВидДоступаПользователи Тогда + ПараметрыФормы.Вставить("ВыборГруппПользователей", Истина); + ОткрытьФорму("Справочник.Пользователи.ФормаВыбора", ПараметрыФормы, Элемент); + Возврат; + + ИначеЕсли Форма.ТекущийВидДоступа = Форма.ВидДоступаВнешниеПользователи Тогда + ПараметрыФормы.Вставить("ВыборГруппВнешнихПользователей", Истина); + ОткрытьФорму("Справочник.ВнешниеПользователи.ФормаВыбора", ПараметрыФормы, Элемент); + Возврат; + КонецЕсли; + + Отбор = Новый Структура("ТипЗначений", Форма.ТекущийТипВыбираемыхЗначений); + НайденныеСтроки = Форма.ВсеТипыВыбираемыхЗначений.НайтиСтроки(Отбор); + + Если НайденныеСтроки.Количество() = 0 Тогда + Возврат; + КонецЕсли; + + ОткрытьФорму(НайденныеСтроки[0].ИмяТаблицы + ".ФормаВыбора", ПараметрыФормы, Элемент); + +КонецПроцедуры + // Обслуживание таблиц ВидыДоступа и ЗначенияДоступа в формах редактирования. Функция ПараметрыФормыРедактированияРазрешенныхЗначений(Форма, ТекущийОбъект = Неопределено) @@ -431,22 +423,21 @@ Процедура СформироватьДанныеВыбораЗначенияДоступа(Форма, Текст, ДанныеВыбора, СтандартнаяОбработка) - Если ЗначениеЗаполнено(Текст) Тогда - СтандартнаяОбработка = Ложь; - - Если Форма.ТекущийВидДоступа = Форма.ВидДоступаВнешниеПользователи - ИЛИ Форма.ТекущийВидДоступа = Форма.ВидДоступаПользователи Тогда - - ДанныеВыбора = УправлениеДоступомСлужебныйВызовСервера.СформироватьДанныеВыбораПользователя( - Текст, - , - Форма.ТекущийВидДоступа = Форма.ВидДоступаВнешниеПользователи, - Форма.ТекущийВидДоступа <> Форма.ВидДоступаПользователи); - Иначе - ДанныеВыбора = УправлениеДоступомСлужебныйВызовСервера.СформироватьДанныеВыбораЗначенияДоступа( - Текст, Форма.ТекущийВидДоступа, Ложь); - КонецЕсли; + Если Не ЗначениеЗаполнено(Текст) Тогда + Возврат; КонецЕсли; + + Если Форма.ТекущийВидДоступа <> Форма.ВидДоступаВнешниеПользователи + И Форма.ТекущийВидДоступа <> Форма.ВидДоступаПользователи Тогда + Возврат; + КонецЕсли; + + СтандартнаяОбработка = Ложь; + + ДанныеВыбора = УправлениеДоступомСлужебныйВызовСервера.СформироватьДанныеВыбораПользователя(Текст, + Ложь, + Форма.ТекущийВидДоступа = Форма.ВидДоступаВнешниеПользователи, + Форма.ТекущийВидДоступа <> Форма.ВидДоступаПользователи); КонецПроцедуры diff --git a/SSL/src/CommonModules/УправлениеДоступомСлужебныйКлиентСервер/Module.bsl b/SSL/src/CommonModules/УправлениеДоступомСлужебныйКлиентСервер/Module.bsl index d1b56252f..356f23c16 100644 --- a/SSL/src/CommonModules/УправлениеДоступомСлужебныйКлиентСервер/Module.bsl +++ b/SSL/src/CommonModules/УправлениеДоступомСлужебныйКлиентСервер/Module.bsl @@ -46,20 +46,9 @@ Если КоличествоЗначений = 0 Тогда ЧислоИПредмет = НСтр("ru = 'не назначены'"); Иначе - ПрописьЧисла = ЧислоПрописью( - КоличествоЗначений, - "Л = ru_RU", - НСтр("ru = ',,,,,,,,0'")); - - ПрописьЧислаИПредмета = ЧислоПрописью( - КоличествоЗначений, - "Л = ru_RU", - НСтр("ru = 'значение,значения,значений,,,,,,0'")); - - ЧислоИПредмет = СтрЗаменить( - ПрописьЧислаИПредмета, - ПрописьЧисла, - Формат(КоличествоЗначений, "ЧГ=") + " "); + ЧислоИПредмет = Формат(КоличествоЗначений, "ЧГ=") + " " + + ПользователиСлужебныйКлиентСервер.ПредметЦелогоЧисла(КоличествоЗначений, + "Л = ru_RU", НСтр("ru = 'значение,значения,значений,,,,,,0'")); КонецЕсли; ОписаниеВидаДоступа.ВсеРазрешеныПредставление = @@ -73,20 +62,9 @@ НСтр("ru = 'Все разрешены, без исключений'"), НСтр("ru = 'Все запрещены, без исключений'")); Иначе - ПрописьЧисла = ЧислоПрописью( - КоличествоЗначений, - "Л = ru_RU", - НСтр("ru = ',,,,,,,,0'")); - - ПрописьЧислаИПредмета = ЧислоПрописью( - КоличествоЗначений, - "Л = ru_RU", - НСтр("ru = '-го значения,-х значений,-и значений,,,,,,0'")); - - ЧислоИПредмет = СтрЗаменить( - ПрописьЧислаИПредмета, - ПрописьЧисла, - Формат(КоличествоЗначений, "ЧГ=")); + ЧислоИПредмет = Формат(КоличествоЗначений, "ЧГ=") + + ПользователиСлужебныйКлиентСервер.ПредметЦелогоЧисла(КоличествоЗначений, + "Л = ru_RU", НСтр("ru = '-го значения,-х значений,-и значений,,,,,,0'")); Представление = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( ?(ОписаниеВидаДоступа.ВсеРазрешены, @@ -116,21 +94,21 @@ КонецПроцедуры // Только для внутреннего использования. -Процедура ПриИзмененииТекущегоВидаДоступа(Форма) Экспорт +Процедура ПриИзмененииТекущегоВидаДоступа(Форма, НаКлиенте = Истина) Экспорт Элементы = Форма.Элементы; Параметры = ПараметрыФормыРедактированияРазрешенныхЗначений(Форма); ЗначенияРедактируются = Ложь; - #Если Клиент Тогда + Если НаКлиенте Тогда ТекущиеДанные = Элементы.ВидыДоступа.ТекущиеДанные; - #Иначе + Иначе ТекущиеДанные = Параметры.ВидыДоступа.НайтиПоИдентификатору( ?(Элементы.ВидыДоступа.ТекущаяСтрока = Неопределено, -1, Элементы.ВидыДоступа.ТекущаяСтрока)); - #КонецЕсли + КонецЕсли; Если ТекущиеДанные <> Неопределено Тогда @@ -202,8 +180,8 @@ КонецЕсли; // Обновление поля НадписьВидДоступа. - Форма.НадписьВидДоступа = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - ШаблонНадписи, Строка(ТекущиеДанные.ВидДоступаПредставление)); + Форма.НадписьВидДоступа = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонНадписи, + Строка(ТекущиеДанные.ВидДоступаПредставление)); ЗаполнитьВсеРазрешеныПредставление(Форма, ТекущиеДанные); Иначе diff --git a/SSL/src/CommonModules/УправлениеДоступомСлужебныйПовтИсп/Module.bsl b/SSL/src/CommonModules/УправлениеДоступомСлужебныйПовтИсп/Module.bsl index e8aac7c5b..8f060dfce 100644 --- a/SSL/src/CommonModules/УправлениеДоступомСлужебныйПовтИсп/Module.bsl +++ b/SSL/src/CommonModules/УправлениеДоступомСлужебныйПовтИсп/Module.bsl @@ -1,9 +1,9 @@ - +//////////////////////////////////////////////////////////////////////////////// // Подсистема "Управление доступом". // //////////////////////////////////////////////////////////////////////////////// -#Область СлужебныеПроцедурыИФункции +#Область СлужебныйПрограммныйИнтерфейс // Содержит сохраненные параметры, используемые подсистемой. Функция Параметры() Экспорт @@ -36,19 +36,22 @@ КонецЕсли; Если ЗначениеЗаполнено(ПредставлениеПараметра) Тогда - ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Ошибка обновления информационной базы. - |Не заполнен параметр ограничения доступа: - |""%1"".'") - + СтандартныеПодсистемыСервер.УточнениеОшибкиПараметровРаботыПрограммыДляРазработчика(), - ПредставлениеПараметра); + НСтр("ru = 'Ошибка обновления информационной базы. + |Не заполнен параметр ограничения доступа: + |""%1"".'"), + ПредставлениеПараметра) + + СтандартныеПодсистемыСервер.УточнениеОшибкиПараметровРаботыПрограммыДляРазработчика(); КонецЕсли; Возврат СохраненныеПараметры; КонецФункции +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + // Возвращает таблицу значений, содержащую вид ограничений доступа по каждому праву // объектов метаданных. // Если записи по праву нет, значит ограничений по праву нет. @@ -99,29 +102,27 @@ Если СтрЧислоВхождений(ТекущаяСтрока, ".") <> 3 И СтрЧислоВхождений(ТекущаяСтрока, ".") <> 5 Тогда ПояснениеОшибки = НСтр("ru = 'Строка должна быть в формате ""<Полное имя таблицы>.<Имя права>.<Имя вида доступа>[.Таблица объекта]"".'"); Иначе - ПозицияПрава = Найти(ТекущаяСтрока, "."); - ПозицияПрава = Найти(Сред(ТекущаяСтрока, ПозицияПрава + 1), ".") + ПозицияПрава; + ПозицияПрава = СтрНайти(ТекущаяСтрока, "."); + ПозицияПрава = СтрНайти(Сред(ТекущаяСтрока, ПозицияПрава + 1), ".") + ПозицияПрава; Таблица = Лев(ТекущаяСтрока, ПозицияПрава - 1); - ПозицияВидаДоступа = Найти(Сред(ТекущаяСтрока, ПозицияПрава + 1), ".") + ПозицияПрава; + ПозицияВидаДоступа = СтрНайти(Сред(ТекущаяСтрока, ПозицияПрава + 1), ".") + ПозицияПрава; Право = Сред(ТекущаяСтрока, ПозицияПрава + 1, ПозицияВидаДоступа - ПозицияПрава - 1); Если СтрЧислоВхождений(ТекущаяСтрока, ".") = 3 Тогда ВидДоступа = Сред(ТекущаяСтрока, ПозицияВидаДоступа + 1); ТаблицаОбъекта = ""; Иначе - ПозицияТаблицыОбъекта = Найти(Сред(ТекущаяСтрока, ПозицияВидаДоступа + 1), ".") + ПозицияВидаДоступа; + ПозицияТаблицыОбъекта = СтрНайти(Сред(ТекущаяСтрока, ПозицияВидаДоступа + 1), ".") + ПозицияВидаДоступа; ВидДоступа = Сред(ТекущаяСтрока, ПозицияВидаДоступа + 1, ПозицияТаблицыОбъекта - ПозицияВидаДоступа - 1); ТаблицаОбъекта = Сред(ТекущаяСтрока, ПозицияТаблицыОбъекта + 1); КонецЕсли; Если Метаданные.НайтиПоПолномуИмени(Таблица) = Неопределено Тогда ПояснениеОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Не найдена таблица ""%1"".'"), - Таблица); + НСтр("ru = 'Не найдена таблица ""%1"".'"), Таблица); ИначеЕсли Право <> "Чтение" И Право <> "Изменение" Тогда ПояснениеОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Не найдено право ""%1"".'"), - Право); + НСтр("ru = 'Не найдено право ""%1"".'"), Право); ИначеЕсли ВРег(ВидДоступа) = ВРег("Объект") Тогда Если Метаданные.НайтиПоПолномуИмени(ТаблицаОбъекта) = Неопределено Тогда @@ -147,8 +148,7 @@ ИначеЕсли ВидыДоступаПоИменам.Получить(ВидДоступа) = Неопределено Тогда ПояснениеОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Не найден вид доступа ""%1"".'"), - ВидДоступа); + НСтр("ru = 'Не найден вид доступа ""%1"".'"), ВидДоступа); Иначе ВидДоступаСсылка = ВидыДоступаПоИменам.Получить(ВидДоступа).Ссылка; ТаблицаОбъектаСсылка = Неопределено; @@ -156,11 +156,13 @@ КонецЕсли; Если ЗначениеЗаполнено(ПояснениеОшибки) Тогда - ВызватьИсключение(СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Ошибка в строке описания вида ограничений права объекта метаданных: |""%1"". | - |'"), ТекущаяСтрока) + ПояснениеОшибки); + |'"), + ТекущаяСтрока) + + ПояснениеОшибки; Иначе СвойстваВидаДоступа = ВидыДоступаПоИменам.Получить(ВидДоступа); НовоеОписание = ВидыДоступаПрав.Добавить(); @@ -259,6 +261,9 @@ ТипыПоля = Новый Соответствие; Для каждого Тип Из МассивТипов Цикл + Если Тип = Тип("СправочникОбъект.ИдентификаторыОбъектовМетаданных") Тогда + Продолжить; + КонецЕсли; ТипыПоля.Вставить(Тип, Истина); КонецЦикла; @@ -286,6 +291,9 @@ Если ВРег(Лев(ИмяПодписки, СтрДлина(НачалоИмени))) = ВРег(НачалоИмени) Тогда Для каждого Тип Из Подписка.Источник.Типы() Цикл + Если Тип = Тип("СправочникОбъект.ИдентификаторыОбъектовМетаданных") Тогда + Продолжить; + КонецЕсли; ТипыОбъектов.Вставить(Тип, Истина); КонецЦикла; КонецЕсли; @@ -485,8 +493,8 @@ ЗаполнитьЗначенияСвойств(ТипыЗначенийВидовДоступаИВладельцевНастроекПрав.Добавить(), Строка); КонецЦикла; - ВладельцыПрав = УправлениеДоступомСлужебныйПовтИсп.Параметры( - ).ВозможныеПраваДляНастройкиПравОбъектов.ПоТипамСсылок; + ТекущиеПараметры = УправлениеДоступомСлужебныйПовтИсп.Параметры(); + ВладельцыПрав = ТекущиеПараметры.ВозможныеПраваДляНастройкиПравОбъектов.ПоТипамСсылок; Для каждого КлючИЗначение Из ВладельцыПрав Цикл @@ -513,8 +521,8 @@ // Только для внутреннего использования. Функция ОписаниеПрофильныхРолей() Экспорт - ОписанияПрофилей = УправлениеДоступомСлужебныйПовтИсп.Параметры( - ).ПоставляемыеПрофилиГруппДоступа.ОписанияПрофилейМассив; + ТекущиеПараметры = УправлениеДоступомСлужебныйПовтИсп.Параметры(); + ОписанияПрофилей = ТекущиеПараметры.ПоставляемыеПрофилиГруппДоступа.ОписанияПрофилейМассив; ПрофильныеРоли = Новый Соответствие; Идентификаторы = Новый Массив; @@ -567,8 +575,8 @@ // Только для внутреннего использования. Функция ВхожденияРолейВПрофильныеРоли() Экспорт - ОписанияПрофилей = УправлениеДоступомСлужебныйПовтИсп.Параметры( - ).ПоставляемыеПрофилиГруппДоступа.ОписанияПрофилейМассив; + ТекущиеПараметры = УправлениеДоступомСлужебныйПовтИсп.Параметры(); + ОписанияПрофилей = ТекущиеПараметры.ПоставляемыеПрофилиГруппДоступа.ОписанияПрофилейМассив; ВхожденияРолейВПрофильныеРоли = Новый Соответствие; ВсеРоли = ПользователиСлужебный.ВсеРоли().Соответствие; diff --git a/SSL/src/CommonModules/УправлениеИтогамиИАгрегатамиСлужебный/Module.bsl b/SSL/src/CommonModules/УправлениеИтогамиИАгрегатамиСлужебный/Module.bsl index 9752ece0d..39083ce4c 100644 --- a/SSL/src/CommonModules/УправлениеИтогамиИАгрегатамиСлужебный/Module.bsl +++ b/SSL/src/CommonModules/УправлениеИтогамиИАгрегатамиСлужебный/Module.bsl @@ -126,9 +126,6 @@ МодульТекущиеДелаСервер = ОбщегоНазначения.ОбщийМодуль("ТекущиеДелаСервер"); Разделы = МодульТекущиеДелаСервер.РазделыДляОбъекта(ОбработкаПолноеИмя); - Если Разделы = Неопределено Или Разделы.Количество() = 0 Тогда - Возврат; - КонецЕсли; Прототип = Новый Структура("ЕстьДела, Важное, Форма, Представление, Подсказка"); Прототип.ЕстьДела = НадоСдвинутьГраницуИтогов(); @@ -147,41 +144,10 @@ КонецПроцедуры -#КонецОбласти - -#Область СлужебныеПроцедурыИФункции - //////////////////////////////////////////////////////////////////////////////// -// Выполнение регламентных заданий. +// Обработчики условных вызовов. -// Обработчик регламентного задания "УстановкаПериодаРассчитанныхИтогов". -Процедура УстановкаПериодаРассчитанныхИтоговОбработчикЗадания() Экспорт - - ОбщегоНазначения.ПриНачалеВыполненияРегламентногоЗадания(); - - УстановитьПериодРассчитанныхИтогов(); - -КонецПроцедуры - -// Обработчик регламентного задания "ОбновлениеАгрегатов". -Процедура ОбновлениеАгрегатовОбработчикЗадания() Экспорт - - ОбщегоНазначения.ПриНачалеВыполненияРегламентногоЗадания(); - - ОбновитьАгрегаты(); - -КонецПроцедуры - -// Обработчик регламентного задания "ПерестроениеАгрегатов". -Процедура ПерестроениеАгрегатовОбработчикЗадания() Экспорт - - ОбщегоНазначения.ПриНачалеВыполненияРегламентногоЗадания(); - - ПерестроитьАгрегаты(); - -КонецПроцедуры - -// Для внутреннего использования. +// Рассчитывает итоги всех регистров бухгалтерии и накопления, у которых они включены. Процедура УстановитьПериодРассчитанныхИтогов() Экспорт ДатаСеанса = ТекущаяДатаСеанса(); @@ -234,6 +200,40 @@ КонецЕсли; КонецПроцедуры +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +//////////////////////////////////////////////////////////////////////////////// +// Выполнение регламентных заданий. + +// Обработчик регламентного задания "УстановкаПериодаРассчитанныхИтогов". +Процедура УстановкаПериодаРассчитанныхИтоговОбработчикЗадания() Экспорт + + ОбщегоНазначения.ПриНачалеВыполненияРегламентногоЗадания(Метаданные.РегламентныеЗадания.УстановкаПериодаРассчитанныхИтогов); + + УстановитьПериодРассчитанныхИтогов(); + +КонецПроцедуры + +// Обработчик регламентного задания "ОбновлениеАгрегатов". +Процедура ОбновлениеАгрегатовОбработчикЗадания() Экспорт + + ОбщегоНазначения.ПриНачалеВыполненияРегламентногоЗадания(Метаданные.РегламентныеЗадания.ОбновлениеАгрегатов); + + ОбновитьАгрегаты(); + +КонецПроцедуры + +// Обработчик регламентного задания "ПерестроениеАгрегатов". +Процедура ПерестроениеАгрегатовОбработчикЗадания() Экспорт + + ОбщегоНазначения.ПриНачалеВыполненияРегламентногоЗадания(Метаданные.РегламентныеЗадания.ПерестроениеАгрегатов); + + ПерестроитьАгрегаты(); + +КонецПроцедуры + // Для внутреннего использования. Процедура ОбновитьАгрегаты() Экспорт @@ -395,8 +395,7 @@ Расписание.ВремяНачала = Дата(1, 1, 1, 01, 00, 00); Расписание.ДеньВМесяце = 5; Иначе - ШаблонСообщения = НСтр("ru = 'Неизвестное имя задания %1'"); - ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонСообщения, Имя); + ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Неизвестное имя задания %1'"), Имя); ВызватьИсключение(ТекстСообщения); КонецЕсли; @@ -413,9 +412,9 @@ Процедура УстановитьДниНедели(Расписание, ДниНеделиВСтроке) ДниНедели = Новый Массив; - МассивСтрок = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(ДниНеделиВСтроке); + МассивСтрок = СтрРазделить(ДниНеделиВСтроке, ",", Ложь); Для Каждого СтрокаНомерДняНедели Из МассивСтрок Цикл - ДниНедели.Добавить(Число(СтрокаНомерДняНедели)); + ДниНедели.Добавить(Число(СокрЛП(СтрокаНомерДняНедели))); КонецЦикла; Расписание.ДниНедели = ДниНедели; КонецПроцедуры diff --git a/SSL/src/CommonModules/УправлениеКонтактнойИнформацией/Module.bsl b/SSL/src/CommonModules/УправлениеКонтактнойИнформацией/Module.bsl index 5148a522b..65c111c87 100644 --- a/SSL/src/CommonModules/УправлениеКонтактнойИнформацией/Module.bsl +++ b/SSL/src/CommonModules/УправлениеКонтактнойИнформацией/Module.bsl @@ -38,6 +38,18 @@ ГруппаВидовКИ = Справочники.ВидыКонтактнойИнформации[ИмяГруппыВидовКИ]; ИмяОбъекта = МетаданныеОбъекта.Имя; + Если ОбщегоНазначения.ЗначениеРеквизитаОбъекта(ГруппаВидовКИ, "Используется") = Ложь Тогда + // Добавим новые реквизиты + Если МассивДобавляемыхРеквизитов.Количество() > 0 Тогда + Форма.ИзменитьРеквизиты(МассивДобавляемыхРеквизитов); + КонецЕсли; + Форма.ПараметрыКонтактнойИнформации = Новый Структура("ГруппаДляРазмещения", ИмяЭлементаДляРазмещения); + Если Не ПустаяСтрока(ИмяЭлементаДляРазмещения) Тогда + Форма.Элементы[ИмяЭлементаДляРазмещения].Видимость = Ложь; + КонецЕсли; + Возврат; + КонецЕсли; + Если МетаданныеОбъекта.ТабличныеЧасти.КонтактнаяИнформация.Реквизиты.Найти("ИдентификаторСтрокиТабличнойЧасти") = Неопределено Тогда ДанныеИдентификатораСтрокиТабличнойЧасти = "0"; Иначе @@ -72,6 +84,8 @@ | И ВидыКонтактнойИнформации.Ссылка = КонтактнаяИнформация.Вид |ГДЕ | НЕ ВидыКонтактнойИнформации.ПометкаУдаления + | И ВидыКонтактнойИнформации.Используется + | И ЕстьNULL(ВидыКонтактнойИнформации.Родитель.Используется, Истина) | И ( | ВидыКонтактнойИнформации.Родитель = &ГруппаВидовКИ | ИЛИ ВидыКонтактнойИнформации.Родитель.Родитель = &ГруппаВидовКИ) @@ -112,14 +126,16 @@ | ВЫРАЗИТЬ("""" КАК СТРОКА) КАК Комментарий |ИЗ | Справочник.ВидыКонтактнойИнформации КАК ВидыКонтактнойИнформации - |ЛЕВОЕ СОЕДИНЕНИЕ + |ЛЕВОЕ СОЕДИНЕНИЕ | КонтактнаяИнформация КАК КонтактнаяИнформация |ПО | ВидыКонтактнойИнформации.Ссылка = КонтактнаяИнформация.Вид |ГДЕ | НЕ ВидыКонтактнойИнформации.ПометкаУдаления + | И ВидыКонтактнойИнформации.Используется + | И ЕстьNULL(ВидыКонтактнойИнформации.Родитель.Используется, Истина) | И ( - | ВидыКонтактнойИнформации.Родитель = &ГруппаВидовКИ + | ВидыКонтактнойИнформации.Родитель = &ГруппаВидовКИ | ИЛИ ВидыКонтактнойИнформации.Родитель.Родитель = &ГруппаВидовКИ) |УПОРЯДОЧИТЬ ПО | ВидыКонтактнойИнформации.Ссылка ИЕРАРХИЯ @@ -145,7 +161,7 @@ Если ОбъектКонтактнойИнформации.ЭтоРеквизитТабличнойЧасти Тогда ИмяВидаКИ = ОбъектКонтактнойИнформации.ИмяПредопределенныхДанных; - Поз = Найти(ИмяВидаКИ, ИмяОбъекта); + Поз = СтрНайти(ИмяВидаКИ, ИмяОбъекта); ИмяТабличнойЧасти = Сред(ИмяВидаКИ, Поз + СтрДлина(ИмяОбъекта)); @@ -239,13 +255,15 @@ ЗаголовокСлева = ЗаголовокСлева(Форма, ПоложениеЗаголовкаКИ); СозданныеЭлементы = ОбщегоНазначенияКлиентСервер.СкопироватьМассив(ИсключаемыеВиды); + СтатусКонтекстногоМеню = 0; + ПредыдущийЭлемент = Неопределено; Для Каждого СтрокаКИ Из КонтактнаяИнформация Цикл Если СтрокаКИ.ЭтоРеквизитТабличнойЧасти Тогда ИмяВидаКИ = ОбщегоНазначения.ИмяПредопределенного(СтрокаКИ.Вид); - Поз = Найти(ИмяВидаКИ, ИмяОбъекта); + Поз = СтрНайти(ИмяВидаКИ, ИмяОбъекта); ИмяТабличнойЧасти = Сред(ИмяВидаКИ, Поз + СтрДлина(ИмяОбъекта)); @@ -302,8 +320,6 @@ КонецЕсли; - ЕстьКомментарий = ЗначениеЗаполнено(СтрокаКИ.Комментарий); - ИмяРеквизита = СтрокаКИ.ИмяРеквизита; ИндексЭлемента = СозданныеЭлементы.Найти(СтрокаКИ.Вид); СтатическийЭлемент = ИндексЭлемента <> Неопределено; @@ -319,26 +335,35 @@ КонецЕсли; + ДобавитьРеквизитВОписание(Форма, СтрокаКИ, ЭтоНовыйВидКИ); + Если СтатическийЭлемент Тогда СозданныеЭлементы.Удалить(ИндексЭлемента); Иначе - СледующаяСтрока = ?(СозданныеЭлементы.Количество() = 0, - Неопределено, - КонтактнаяИнформация.Получить(КонтактнаяИнформация.Индекс(СтрокаКИ) + 1)); + СледующаяСтрока = Неопределено; + Если СозданныеЭлементы.Количество() <> 0 Тогда + Для Счетчик = КонтактнаяИнформация.Индекс(СтрокаКИ) + 1 По КонтактнаяИнформация.Количество() - 1 Цикл + СтрокаПоиска = КонтактнаяИнформация.Получить(Счетчик); + Если СозданныеЭлементы.Найти(СтрокаПоиска.Вид) <> Неопределено + И Форма.Элементы[СтрокаПоиска.ИмяРеквизита].Родитель = ГруппаПолейВвода Тогда + СледующаяСтрока = СтрокаПоиска; + Прервать; + КонецЕсли; + КонецЦикла; + КонецЕсли; + ДобавитьСтрокуКонтактнойИнформации(Форма, СтрокаКИ, ЭтоНовыйВидКИ, КоличествоАдресов, СледующаяСтрока); КонецЕсли; - ДобавитьРеквизитВОписание(Форма, СтрокаКИ, ЭтоНовыйВидКИ); - ПредыдущийВид = СтрокаКИ.Вид; КонецЦикла; - Если Не ОтложеннаяИнициализация + Если НЕ ОтложеннаяИнициализация И Форма.ПараметрыКонтактнойИнформации.СписокДобавляемыхЭлементов.Количество() > 0 И НЕ Форма.ТолькоПросмотр Тогда @@ -355,7 +380,6 @@ Команда.ИзменяетСохраняемыеДанные = Истина; ДобавитьОписаниеЭлемента(Форма, ИмяКоманды, 9, Истина); - Кнопка = Форма.Элементы.Добавить(ИмяКоманды,Тип("КнопкаФормы"), ГруппаКоманды); Кнопка.Заголовок = НСтр("ru = 'Добавить'"); @@ -408,12 +432,21 @@ ОтложеннаяИнициализация = Параметры.ОтложеннаяИнициализация И Не ВыполненаОтложеннаяИнициализация; + ИменаТабличныхЧастейПоВидамКИ = Неопределено; + Для Каждого РеквизитФормы Из Форма.КонтактнаяИнформацияОписаниеДополнительныхРеквизитов Цикл Если РеквизитФормы.ЭтоРеквизитТабличнойЧасти Тогда - МассивУдаляемыхРеквизитов.Добавить("Объект." + ИмяТабличнойЧастиПоВидуКИ(РеквизитФормы.Вид, ИмяОбъекта) + "." + РеквизитФормы.ИмяРеквизита); - МассивУдаляемыхРеквизитов.Добавить("Объект." + ИмяТабличнойЧастиПоВидуКИ(РеквизитФормы.Вид, ИмяОбъекта) + "." + РеквизитФормы.ИмяРеквизита + "ЗначенияПолей"); + Если ИменаТабличныхЧастейПоВидамКИ = Неопределено Тогда + Отбор = Новый Структура("ЭтоРеквизитТабличнойЧасти", Истина); + ВидыКИТабличнойЧасти = Форма.КонтактнаяИнформацияОписаниеДополнительныхРеквизитов.Выгрузить(Отбор , "Вид"); + ИменаТабличныхЧастейПоВидамКИ = ИменаТабличныхЧастейПоВидамКИ(ВидыКИТабличнойЧасти, ИмяОбъекта); + КонецЕсли; + + ИмяТабличнойЧасти = ИменаТабличныхЧастейПоВидамКИ[РеквизитФормы.Вид]; + МассивУдаляемыхРеквизитов.Добавить("Объект." + ИмяТабличнойЧасти + "." + РеквизитФормы.ИмяРеквизита); + МассивУдаляемыхРеквизитов.Добавить("Объект." + ИмяТабличнойЧасти + "." + РеквизитФормы.ИмяРеквизита + "ЗначенияПолей"); Иначе @@ -449,14 +482,15 @@ ИмяОбъекта = Объект.Ссылка.Метаданные().Имя; - Для Каждого СтрокаТаблицы Из Форма.КонтактнаяИнформацияОписаниеДополнительныхРеквизитов Цикл - - Если СтрокаТаблицы.ЭтоРеквизитТабличнойЧасти Тогда - + // Только для контактной информации в составе табличной части + Отбор = Новый Структура("ЭтоРеквизитТабличнойЧасти", Истина); + СтрокиТабличнойЧасти = Форма.КонтактнаяИнформацияОписаниеДополнительныхРеквизитов.Выгрузить(Отбор); + ИменаТабличныхЧастейПоВидамКИ = ИменаТабличныхЧастейПоВидамКИ(СтрокиТабличнойЧасти, ИмяОбъекта); + + Для Каждого СтрокаТаблицы Из СтрокиТабличнойЧасти Цикл ВидИнформации = СтрокаТаблицы.Вид; ИмяРеквизита = СтрокаТаблицы.ИмяРеквизита; - ИмяТабличнойЧасти = ИмяТабличнойЧастиПоВидуКИ(ВидИнформации, ИмяОбъекта); - ТабличнаяЧастьФормы = Форма.Объект[ИмяТабличнойЧасти]; + ТабличнаяЧастьФормы = Форма.Объект[ИменаТабличныхЧастейПоВидамКИ[ВидИнформации]]; Для Каждого СтрокаТабличнойЧастиФормы Из ТабличнаяЧастьФормы Цикл @@ -472,11 +506,7 @@ СтрокаТабличнойЧастиФормы[ИмяРеквизита + "ЗначенияПолей"] = СтрокаКИ.ЗначенияПолей; КонецЕсли; - КонецЦикла; - - КонецЕсли; - КонецЦикла; КонецПроцедуры @@ -494,18 +524,25 @@ УровеньОшибок = 0; ПредыдущийВид = Неопределено; + ИменаТабличныхЧастейПоВидамКИ = Неопределено; + Для Каждого СтрокаТаблицы Из Форма.КонтактнаяИнформацияОписаниеДополнительныхРеквизитов Цикл ВидИнформации = СтрокаТаблицы.Вид; ТипИнформации = СтрокаТаблицы.Тип; Комментарий = СтрокаТаблицы.Комментарий; ИмяРеквизита = СтрокаТаблицы.ИмяРеквизита; - ОбязательноеЗаполнение = ВидИнформации.ОбязательноеЗаполнение; Если СтрокаТаблицы.ЭтоРеквизитТабличнойЧасти Тогда - ИмяТабличнойЧасти = ИмяТабличнойЧастиПоВидуКИ(ВидИнформации, ИмяОбъекта); + Если ИменаТабличныхЧастейПоВидамКИ = Неопределено Тогда + Отбор = Новый Структура("ЭтоРеквизитТабличнойЧасти", Истина); + ВидыКИТабличнойЧасти = Форма.КонтактнаяИнформацияОписаниеДополнительныхРеквизитов.Выгрузить(Отбор , "Вид"); + ИменаТабличныхЧастейПоВидамКИ = ИменаТабличныхЧастейПоВидамКИ(ВидыКИТабличнойЧасти, ИмяОбъекта); + КонецЕсли; + + ИмяТабличнойЧасти = ИменаТабличныхЧастейПоВидамКИ[ВидИнформации]; // ИмяТабличнойЧастиПоВидуКИ(ВидИнформации, ИмяОбъекта); ТабличнаяЧастьФормы = Форма.Объект[ИмяТабличнойЧасти]; Для Каждого СтрокаТабличнойЧастиФормы Из ТабличнаяЧастьФормы Цикл @@ -515,9 +552,8 @@ Если ОбязательноеЗаполнение И ПустаяСтрока(Представление) Тогда - ТекстСообщения = Нстр("ru = 'Поле ""%1"" не заполнено.'"); - ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ТекстСообщения, ВидИнформации.Наименование); - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстСообщения,,Поле); + ОбщегоНазначенияКлиентСервер.СообщитьПользователю( + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(Нстр("ru = 'Поле ""%1"" не заполнено.'"), ВидИнформации.Наименование),,Поле); ТекущийУровеньОшибок = 2; Иначе @@ -545,20 +581,18 @@ Представление = Форма[ИмяРеквизита]; - Если ВидИнформации <> ПредыдущийВид И ОбязательноеЗаполнение И ПустаяСтрока(Представление) + Если ВидИнформации <> ПредыдущийВид И ОбязательноеЗаполнение И ПустаяСтрока(Представление) + И Не ЕстьДругиеЗаполненныеСтрокКИДанногоВида(Форма, СтрокаТаблицы, ВидИнформации) Тогда // И нет других строк с данными для видов КИ с множественными значениями. - И Не ЕстьДругиеЗаполненныеСтрокКИДанногоВида(Форма, СтрокаТаблицы, ВидИнформации) - Тогда - ТекстСообщения = Нстр("ru = 'Поле ""%1"" не заполнено.'"); - ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ТекстСообщения, ВидИнформации.Наименование); - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстСообщения,,,ИмяРеквизита); + ОбщегоНазначенияКлиентСервер.СообщитьПользователю( + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(Нстр("ru = 'Поле ""%1"" не заполнено.'"), ВидИнформации.Наименование),,, ИмяРеквизита); ТекущийУровеньОшибок = 2; Иначе ТекущийУровеньОшибок = ПроверитьКонтактнуюИнформацию(Представление, СтрокаТаблицы.ЗначенияПолей, - ВидИнформации, ТипИнформации, ИмяРеквизита, Комментарий); + ВидИнформации, ТипИнформации, ИмяРеквизита, Комментарий); КонецЕсли; @@ -589,6 +623,8 @@ ИмяОбъекта = Объект.Ссылка.Метаданные().Имя; ПредыдущийВид = Неопределено; + ИменаТабличныхЧастейПоВидамКИ = Неопределено; + Для Каждого СтрокаТаблицы Из Форма.КонтактнаяИнформацияОписаниеДополнительныхРеквизитов Цикл ВидИнформации = СтрокаТаблицы.Вид; @@ -598,7 +634,13 @@ Если СтрокаТаблицы.ЭтоРеквизитТабличнойЧасти Тогда - ИмяТабличнойЧасти = ИмяТабличнойЧастиПоВидуКИ(ВидИнформации, ИмяОбъекта); + Если ИменаТабличныхЧастейПоВидамКИ = Неопределено Тогда + Отбор = Новый Структура("ЭтоРеквизитТабличнойЧасти", Истина); + ВидыКИТабличнойЧасти = Форма.КонтактнаяИнформацияОписаниеДополнительныхРеквизитов.Выгрузить(Отбор, "Вид"); + ИменаТабличныхЧастейПоВидамКИ = ИменаТабличныхЧастейПоВидамКИ(ВидыКИТабличнойЧасти, ИмяОбъекта); + КонецЕсли; + + ИмяТабличнойЧасти = ИменаТабличныхЧастейПоВидамКИ[ВидИнформации]; ТабличнаяЧастьФормы = Форма.Объект[ИмяТабличнойЧасти]; Для Каждого СтрокаТабличнойЧастиФормы Из ТабличнаяЧастьФормы Цикл @@ -615,9 +657,7 @@ КонецЦикла; Иначе - ЗаписатьКонтактнуюИнформацию(Объект, СтрокаТаблицы.ЗначенияПолей, ВидИнформации, ТипИнформации); - КонецЕсли; ПредыдущийВид = ВидИнформации; @@ -647,7 +687,36 @@ ИначеЕсли Результат.Свойство("ДобавляемыйВид") Тогда ДобавитьСтрокуКонтактнойИнформации(Форма, Результат); + ИначеЕсли Результат.Свойство("ПоменятьМестамиЭлементы") Тогда + ЗначениеПервогоЭлемента = Форма[Результат.ПервыйЭлемент]; + Форма[Результат.ПервыйЭлемент] = Форма[Результат.ВторойЭлемент]; + Форма[Результат.ВторойЭлемент] = ЗначениеПервогоЭлемента ; + // перемещение комментариев если они есть + Отбор = Новый Структура("ИмяРеквизита", Результат.ПервыйЭлемент); + ОписаниеКонтактнойИнформации = Форма.КонтактнаяИнформацияОписаниеДополнительныхРеквизитов; + НайденнаяСтрокаПервыйЭлемент = ОписаниеКонтактнойИнформации.НайтиСтроки(Отбор)[0]; + Отбор = Новый Структура("ИмяРеквизита", Результат.ВторойЭлемент); + НайденнаяСтрокаВторойЭлемент = ОписаниеКонтактнойИнформации.НайтиСтроки(Отбор)[0]; + Если ЗначениеЗаполнено(НайденнаяСтрокаПервыйЭлемент.Комментарий) + И ЗначениеЗаполнено(НайденнаяСтрокаВторойЭлемент.Комментарий) Тогда + КомментарийПервыйЭлемент = НайденнаяСтрокаПервыйЭлемент.Комментарий; + НайденнаяСтрокаПервыйЭлемент.Комментарий = НайденнаяСтрокаВторойЭлемент.Комментарий; + НайденнаяСтрокаВторойЭлемент.Комментарий = КомментарийПервыйЭлемент; + Форма.Элементы["Комментарий" + Результат.ПервыйЭлемент].Заголовок = НайденнаяСтрокаПервыйЭлемент.Комментарий; + Форма.Элементы["Комментарий" + Результат.ВторойЭлемент].Заголовок = НайденнаяСтрокаВторойЭлемент.Комментарий; + + ИначеЕсли ЗначениеЗаполнено(НайденнаяСтрокаПервыйЭлемент.Комментарий) + ИЛИ ЗначениеЗаполнено(НайденнаяСтрокаВторойЭлемент.Комментарий) Тогда + КомментарийПервыйЭлемент = НайденнаяСтрокаПервыйЭлемент.Комментарий; + НайденнаяСтрокаПервыйЭлемент.Комментарий = НайденнаяСтрокаВторойЭлемент.Комментарий; + НайденнаяСтрокаВторойЭлемент.Комментарий = КомментарийПервыйЭлемент; + + ИзменитьКомментарий(Форма, Результат.ПервыйЭлемент, ЗначениеЗаполнено(НайденнаяСтрокаПервыйЭлемент.Комментарий)); + ИзменитьКомментарий(Форма, Результат.ВторойЭлемент, ЗначениеЗаполнено(НайденнаяСтрокаВторойЭлемент.Комментарий)); + КонецЕсли; + + КонецЕсли; Возврат Неопределено; @@ -661,6 +730,18 @@ КонецПроцедуры +// Обработчик подписки события "ПередЗаписью" для обновления контактной информации для списков. +// +Процедура ОбработкаОбновленияКонтактнойИнформации(Объект, Отказ) Экспорт + + Если Объект.ОбменДанными.Загрузка Тогда + Возврат; + КонецЕсли; + + ОбновитьКонтактнуюИнформациюДляСписков(Объект); + +КонецПроцедуры + // Обработчик подписки события "ОбработкаЗаполнения" для документов. // Процедура ОбработкаЗаполненияКонтактнойИнформацииДокумента(Источник, ДанныеЗаполнения, СтандартнаяОбработка) Экспорт @@ -866,7 +947,7 @@ КонецЕсли; // Читаем наименование страны - ПространствоИмен = УправлениеКонтактнойИнформациейКлиентСерверПовтИсп.ПространствоИмен(); + ПространствоИмен = УправлениеКонтактнойИнформациейКлиентСервер.ПространствоИмен(); Чтение = Новый ЧтениеXML; Чтение.УстановитьСтроку(XMLСтрока); XDTOАдрес = ФабрикаXDTO.ПрочитатьXML(Чтение, ФабрикаXDTO.Тип(ПространствоИмен, "КонтактнаяИнформация")); @@ -895,7 +976,7 @@ Возврат ""; КонецЕсли; - ПространствоИмен = УправлениеКонтактнойИнформациейКлиентСерверПовтИсп.ПространствоИмен(); + ПространствоИмен = УправлениеКонтактнойИнформациейКлиентСервер.ПространствоИмен(); Чтение = Новый ЧтениеXML; Чтение.УстановитьСтроку(XMLСтрока); XDTOАдрес = ФабрикаXDTO.ПрочитатьXML(Чтение, ФабрикаXDTO.Тип(ПространствоИмен, "КонтактнаяИнформация")); @@ -924,7 +1005,7 @@ Возврат ""; КонецЕсли; - ПространствоИмен = УправлениеКонтактнойИнформациейКлиентСерверПовтИсп.ПространствоИмен(); + ПространствоИмен = УправлениеКонтактнойИнформациейКлиентСервер.ПространствоИмен(); Чтение = Новый ЧтениеXML; Чтение.УстановитьСтроку(XMLСтрока); XDTOАдрес = ФабрикаXDTO.ПрочитатьXML(Чтение, ФабрикаXDTO.Тип(ПространствоИмен, "КонтактнаяИнформация")); @@ -951,7 +1032,7 @@ Возврат ""; КонецЕсли; - ПространствоИмен = УправлениеКонтактнойИнформациейКлиентСерверПовтИсп.ПространствоИмен(); + ПространствоИмен = УправлениеКонтактнойИнформациейКлиентСервер.ПространствоИмен(); Чтение = Новый ЧтениеXML; Чтение.УстановитьСтроку(XMLСтрока); XDTOАдрес = ФабрикаXDTO.ПрочитатьXML(Чтение, ФабрикаXDTO.Тип(ПространствоИмен, "КонтактнаяИнформация")); @@ -960,16 +1041,16 @@ Тип = Состав.Тип(); Если Тип = ФабрикаXDTO.Тип(ПространствоИмен, "ВебСайт") Тогда ДоменАдреса = СокрЛП(Состав.Значение); - Позиция = Найти(ДоменАдреса, "://"); + Позиция = СтрНайти(ДоменАдреса, "://"); Если Позиция > 0 Тогда ДоменАдреса = Сред(ДоменАдреса, Позиция + 3); КонецЕсли; - Позиция = Найти(ДоменАдреса, "/"); + Позиция = СтрНайти(ДоменАдреса, "/"); Возврат ?(Позиция = 0, ДоменАдреса, Лев(ДоменАдреса, Позиция - 1)); ИначеЕсли Тип = ФабрикаXDTO.Тип(ПространствоИмен, "ЭлектроннаяПочта") Тогда ДоменАдреса = СокрЛП(Состав.Значение); - Позиция = Найти(ДоменАдреса, "@"); + Позиция = СтрНайти(ДоменАдреса, "@"); Возврат ?(Позиция = 0, ДоменАдреса, Сред(ДоменАдреса, Позиция + 1)); КонецЕсли; @@ -991,7 +1072,7 @@ Возврат ""; КонецЕсли; - ПространствоИмен = УправлениеКонтактнойИнформациейКлиентСерверПовтИсп.ПространствоИмен(); + ПространствоИмен = УправлениеКонтактнойИнформациейКлиентСервер.ПространствоИмен(); Чтение = Новый ЧтениеXML; Чтение.УстановитьСтроку(XMLСтрока); XDTOАдрес = ФабрикаXDTO.ПрочитатьXML(Чтение, ФабрикаXDTO.Тип(ПространствоИмен, "КонтактнаяИнформация")); @@ -1182,12 +1263,9 @@ ИмяТабличнойЧасти = ИмяТабличнойЧастиПоВидуКИ(ВидКИ, ИмяОбъектаПриемника); Если ПустаяСтрока(ИмяТабличнойЧасти) Тогда - ЗаполнитьКонтактнуюИнформациюТабличнойЧасти(Приемник, ВидКИ, СтрокаЗаполнения.СтруктураКИ); - Иначе - Если ТипЗнч(СтрокаЗаполнения.КлючСтроки) <> Тип("Структура") Тогда - Продолжить; - КонецЕсли; - + ИмяТабличнойЧасти = "КонтактнаяИнформация"; + КонецЕсли; + Если ТипЗнч(СтрокаЗаполнения.КлючСтроки) = Тип("Структура") Тогда Если СтрокаЗаполнения.КлючСтроки.Свойство("НомерСтроки") Тогда КоличествоСтрокТабличнойЧасти = Приемник[ИмяТабличнойЧасти].Количество(); НомерСтроки = СтрокаЗаполнения.КлючСтроки.НомерСтроки; @@ -1201,6 +1279,8 @@ ЗаполнитьКонтактнуюИнформациюТабличнойЧасти(Приемник, ВидКИ, СтрокаЗаполнения.СтруктураКИ, СтрокаТабличнойЧасти); КонецЦикла; КонецЕсли; + Иначе + ЗаполнитьКонтактнуюИнформациюТабличнойЧасти(Приемник, ВидКИ, СтрокаЗаполнения.СтруктураКИ); КонецЕсли; ПредыдущийПриемник = Приемник; @@ -1240,12 +1320,6 @@ КонецПроцедуры -// Устарела. Следует использовать КонтактнаяИнформацияОбъекта. -// -Функция ПолучитьКонтактнуюИнформацияОбъекта(Ссылка, ВидКонтактнойИнформации) Экспорт - Возврат КонтактнаяИнформацияОбъекта(Ссылка, ВидКонтактнойИнформации); -КонецФункции - //////////////////////////////////////////////////////////////////////////////// // Обратная совместимость. @@ -1264,8 +1338,7 @@ // Функция ТаблицаКонтактнойИнформацииОбъекта(Ссылка, ВидКонтактнойИнформации) Экспорт - Запрос = Новый Запрос(СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(" - |ВЫБРАТЬ + Запрос = Новый Запрос(СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку("ВЫБРАТЬ | Данные.ИдентификаторСтрокиТабличнойЧасти КАК НомерСтроки, | Данные.Представление КАК Представление, | Данные.ЗначенияПолей КАК ЗначенияПолей @@ -1371,6 +1444,72 @@ Возврат УправлениеКонтактнойИнформациейКлиентСервер.СтруктураЗначенийПолей(Данные, ВидКонтактнойИнформации); КонецФункции +// Возвращает сведения об адресах в виде структуру частей адреса и кодов КЛАДР +// +// Параметры: +// Адреса - Массив - XDTO объекты или строки XML контактной информации +// ДополнительныеПараметры - Структура - параметры контактной информации. +// * БезПредставлений - Булево - Если Истина, то поле представления адреса будет отсутствовать. +// * КодыКЛАДР - Булево - Если Истина, то возвращает структуру с кодами КЛАДР по всем частям адреса +// * ПолныеНаименованияСокращений - Булево - Если Истина, то возвращает полное наименование адресных объектов +// * НаименованиеВключаетСокращение - Булево - Если Истина, то поля содержат сокращениям в наименованиях адресных объектов. +// Возвращаемое значение: +// Массив - содержит массив структур, содержимое структуры см. описание функции СведенияОбАдресе +// +Функция СведенияОбАдресах(Адреса, ДополнительныеПараметры = Неопределено) Экспорт + Возврат УправлениеКонтактнойИнформациейСлужебный.СведенияОбАдресахВВидеСтруктуры(Адреса, ДополнительныеПараметры); +КонецФункции + +// Возвращает сведения об адресах в виде структуру частей адреса и кодов КЛАДР +// +// Параметры: +// Адрес - Строка, ОбъектXDTO - XDTO объект или строка XML контактной информации +// ДополнительныеПараметры - Структура - параметры контактной информации. +// * БезПредставлений - Булево - Если Истина, то поле представления адреса будет отсутствовать. +// * КодыКЛАДР - Булево - Если Истина, то возвращает структуру с кодами КЛАДР по всем частям адреса +// * ПолныеНаименованияСокращений - Булево - Если Истина, то возвращает полное наименование адресных объектов +// * НаименованиеВключаетСокращение - Булево - Если Истина, то поля содержат сокращениям в наименованиях адресных объектов. +// Возвращаемое значение: +// Структура - набор пар ключ-значение. Состав свойств для адреса: +// * Страна - Строка - текстовое представление страны. +// * КодСтраны - Строка - код страны по ОКСМ. +// * Индекс - Строка - почтовый индекс. +// * Регион - Строка - текстовое представление региона РФ. +// * КодРегиона - Строка - код региона РФ. +// * РегионСокращение - Строка - сокращение региона. +// * Округ - Строка - текстовое представление округа. +// * ОкругСокращение - Строка - сокращение округа. +// * РегионСокращение - Строка - сокращение региона. +// * Район - Строка - текстовое представление района. +// * РайонСокращение - Строка - сокращение района. +// * Город - Строка - текстовое представление города +// * ГородСокращение - Строка - сокращение города. +// * ВнутригородскойРайон - Строка - текстовое представление внутригородского района +// * ВнутригородскойРайонСокращение - Строка - сокращение внутригородского района. +// * НаселенныйПункт - Строка - текстовое представление населенного пункта. +// * НаселенныйПунктСокращение - Строка - сокращение населенного пункта. +// * Улица - Строка - текстовое представление улицы. +// * УлицаСокращение - Строка - сокращение улицы. +// * ДополнительнаяТерритория - Строка - текстовое представление дополнительной территории. +// * ДополнительнаяТерриторияСокращение - Строка - сокращение дополнительной территории. +// * ЭлементДополнительнойТерритории - Строка - текстовое представление элемента дополнительной территории. +// * ЭлементДополнительнойТерриторииСокращение - Строка - сокращение элемента дополнительной территории. +// * Здание - Структура - структура с информацией о здании адреса +// ** ТипЗдания - Строка - тип объекта адресации адреса РФ согласно приказу ФНС ММВ-7-1/525 от 31.08.2011. +// ** Номер - Строка - текстовое представление номера дома (только для адресов РФ). +// * Корпуса - Массив - содержит структуры(поля структуры: ТипКорпуса, Номер) с перечнем корпусов адреса. +// * Помещения - Массив - содержит структуры(поля структуры: ТипПомещения, Номер) с перечнем помещений адреса. +// * КодыКЛАДР - Структура - Коды КЛАДР, если установлен параметр КодыКЛАДР. +// ** Регион - Строка - код КЛАДР региона. +// ** Район - Строка - код КЛАДР район. +// ** Город - Строка - код КЛАДР города. +// ** НаселенныйПункт - Строка - код КЛАДР населенного пункта. +// ** Улица - Строка - код КЛАДР улица. +// * ДополнительныеКоды - Структура - Коды ОКТМО, ОКТМО, ОКАТО, КодИФНСФЛ, КодИФНСЮЛ, КодУчасткаИФНСФЛ, КодУчасткаИФНСЮЛ. +Функция СведенияОбАдресе(Адрес, ДополнительныеПараметры = Неопределено) Экспорт + Возврат УправлениеКонтактнойИнформациейСлужебный.СведенияОбАдресеВВидеСтруктуры(Адрес, ДополнительныеПараметры); +КонецФункции + //////////////////////////////////////////////////////////////////////////////////////////////////// // Определяет данные страны по справочнику стран или классификатору ОКСМ. @@ -1474,11 +1613,67 @@ КонецФункции - // Устанавливает свойства вида контактной информации. -// +// // Параметры: -// Параметры - Структура - См. описание в функции ПараметрыВидаКонтактнойИнформации +// Параметры - Структура - содержит структуру с полями: +// * Вид - СправочникСсылка.ВидыКонтактнойИнформации, Строка - Ссылка на вид контактной информации или +// идентификатор предопределенного элемента. +// * Тип - ПеречислениеСсылка.ТипыКонтактнойИнформации - Тип контактной информации или его +// идентификатор. +// * Подсказка - Строка - Подсказка к виду контактной информации. +// * Порядок - Число, Неопределено - Порядок вида контактной информации, положение в +// списке относительно других элементов: +// Неопределено - не переназначать; +// 0 - назначить автоматически; +// Число > 0 - назначить указанный порядок. +// * МожноИзменятьСпособРедактирования - Булево - Истина, если есть возможность изменять способ +// редактирования только в диалоге, Ложь - иначе. +// * РедактированиеТолькоВДиалоге - Булево - Истина, если редактировать только в диалоге, +// Ложь - иначе. +// * ОбязательноеЗаполнение - Булево - Истина, если требуется обязательное +// заполнение поля, Ложь - иначе. +// * РазрешитьВводНесколькихЗначений - Булево - Признак возможности использования дополнительных +// полей ввода для данного вида. +// * ЗапретитьРедактированиеПользователем - Булево - Признак недоступности редактирования +// пользователем свойства вида контактной +// информации. +// * Используется - Булево - Признак использования вида контактной информации +// Значение по умолчанию Истина. +// * НастройкиПроверки - Структура, Неопределено - Настройки проверки вида контактной информации. +// Для типа Адрес - Структура, содержащая поля: +// * АдресТолькоРоссийский - Булево - Истина, если возможен ввод только российских адресов. +// * ПроверятьКорректность - Булево - Истина, если требуется запрещать пользователю записывать +// некорректный адрес (только если АдресТолькоРоссийский = Истина). +// * ПроверятьПоФИАС - Булево - Истина, если требуется проверка адреса по ФИАС, иначе +// проверка по КЛАДР (только если АдресТолькоРоссийский = Истина +// и ПроверятьКорректность = Истина). +// * ЗапрещатьВводНекорректного - Булево - Устарел. Все переданные значения игнорируются. +// Для запрета пользователю записывать некорректные адреса, +// следует использовать параметр ПроверятьКорректность. +// * СкрыватьНеактуальныеАдреса - Булево - Истина, если не требуется показывать неактуальные адреса при +// вводе (только если АдресТолькоРоссийский = Истина). +// * ВключатьСтрануВПредставление - Булево - Истина, если требуется включать наименование страны в +// представление адреса. +// Для типа АдресЭлектроннойПочты - Структура, содержащая поля: +// * ПроверятьКорректность - Булево - Истина, если требуется запрещать пользователю записывать +// некорректный адрес электронной почты. +// * ЗапрещатьВводНекорректного - Булево - Устарел. Все переданные значения игнорируются. +// Для запрета пользователю записывать некорректные адреса, +// следует использовать параметр ПроверятьКорректность. +// Для остальных типов или для задания настроек по умолчанию используется Неопределено. +// +// Примечание: +// +// При использовании параметра Порядок следует внимательно следить за уникальностью назначаемого значения. Если +// после выполнения обновления значения порядка окажутся неуникальными в пределах группы, то настройка порядка +// пользователем будет невозможна. +// В общем случае рекомендуется не использовать этот параметр (порядок не изменится), либо заполнять его значением +// 0 (порядок будет назначен автоматически в подсистеме "Настройка порядка элементов" при выполнении процедуры). +// Для размещения видов КИ в определенной последовательности относительно друг друга без явного размещения в начале +// списка достаточно вызывать данную процедуру в нужной последовательности для каждого вида КИ с указанием +// порядка 0. Если добавляется предопределенный вид КИ к уже существующим в ИБ, не рекомендуется назначать порядок +// в явном виде. // Процедура УстановитьСвойстваВидаКонтактнойИнформации(Параметры) Экспорт @@ -1495,49 +1690,25 @@ Объект.ОбязательноеЗаполнение = Параметры.ОбязательноеЗаполнение; Объект.РазрешитьВводНесколькихЗначений = Параметры.РазрешитьВводНесколькихЗначений; Объект.ЗапретитьРедактированиеПользователем = Параметры.ЗапретитьРедактированиеПользователем; + Объект.Используется = Параметры.Используется; НастройкиПроверки = Параметры.НастройкиПроверки; ПроверятьНастройки = ТипЗнч(НастройкиПроверки) = Тип("Структура"); ОшибкаПараметров = НСтр("ru = 'Некорректно заполнены настройки проверки адреса'"); Если ПроверятьНастройки И Параметры.Тип = Перечисления.ТипыКонтактнойИнформации.Адрес Тогда - Если НастройкиПроверки.АдресТолькоРоссийский Тогда - Если Не НастройкиПроверки.ПроверятьКорректность Тогда - Если НастройкиПроверки.ЗапрещатьВводНекорректного Тогда - ВызватьИсключение ОшибкаПараметров; - КонецЕсли; - Иначе - // См. примечание - Если Не НастройкиПроверки.ЗапрещатьВводНекорректного Тогда - ВызватьИсключение ОшибкаПараметров; - КонецЕсли; - КонецЕсли; - - Иначе - Если НастройкиПроверки.ПроверятьКорректность Или НастройкиПроверки.ЗапрещатьВводНекорректного Или НастройкиПроверки.СкрыватьНеактуальныеАдреса Тогда + Если НЕ НастройкиПроверки.АдресТолькоРоссийский + И (НастройкиПроверки.ПроверятьКорректность + ИЛИ НастройкиПроверки.СкрыватьНеактуальныеАдреса) Тогда ВызватьИсключение ОшибкаПараметров; - КонецЕсли; - КонецЕсли; ЗаполнитьЗначенияСвойств(Объект, НастройкиПроверки); ИначеЕсли ПроверятьНастройки И Параметры.Тип = Перечисления.ТипыКонтактнойИнформации.АдресЭлектроннойПочты Тогда - Если Не НастройкиПроверки.ПроверятьКорректность Тогда - Если НастройкиПроверки.ЗапрещатьВводНекорректного Тогда - ВызватьИсключение ОшибкаПараметров; - КонецЕсли; - Иначе - // См. примечание - Если Не НастройкиПроверки.ЗапрещатьВводНекорректного Тогда - ВызватьИсключение ОшибкаПараметров; - КонецЕсли; - КонецЕсли; УстановитьЗначенияРеквизитовПроверки(Объект, НастройкиПроверки); - Иначе УстановитьЗначенияРеквизитовПроверки(Объект); - КонецЕсли; Если Параметры.Порядок <> Неопределено Тогда @@ -1552,7 +1723,7 @@ // // Параметры: // Тип - ПеречислениеСсылка.ТипыКонтактнойИнформации, Строка - тип контактной информации для -// заполнения свойства НастройкиПроверки +// заполнения свойства НастройкиПроверки. // // Возвращаемое значение: // Структура - содержит структуру с полями: @@ -1577,44 +1748,25 @@ // * ЗапретитьРедактированиеПользователем - Булево - Признак недоступности редактирования // пользователем свойства вида контактной // информации. +// * Используется - Булево - Признак использования вида контактной информации +// Значение по умолчанию Истина. // * НастройкиПроверки - Структура, Неопределено - Настройки проверки вида контактной информации. // Для типа Адрес - Структура, содержащая поля: -// * АдресТолькоРоссийский - Булево - Истина, если используются только российские адреса, Ложь - -// иначе. -// * ПроверятьКорректность - Булево - Истина, если используется проверка адреса по разрезам КЛАДР -// (Только если АдресТолькоРоссийский = Истина), Ложь - иначе. -// * ПроверятьПоФИАС - Булево - Истина, если используется проверка адреса по разрезам ФИАС -// (Только если АдресТолькоРоссийский = Истина), Ложь - иначе. -// * ЗапрещатьВводНекорректного - Булево - Истина, если требуется запрещать пользователю записывать -// некорректный адрес (Только если ПроверятьКорректность = -// Истина), Ложь - иначе. +// * АдресТолькоРоссийский - Булево - Истина, если возможен ввод только российских адресов. +// * ПроверятьКорректность - Булево - Истина, если требуется запрещать пользователю записывать +// некорректный адрес (только если АдресТолькоРоссийский = Истина). +// * ПроверятьПоФИАС - Булево - Истина, если требуется проверка адреса по ФИАС, иначе +// проверка по КЛАДР (только если АдресТолькоРоссийский = Истина +// и ПроверятьКорректность = Истина). // * СкрыватьНеактуальныеАдреса - Булево - Истина, если не требуется показывать неактуальные адреса при -// вводе(Только если АдресТолькоРоссийский = Истина), -// Ложь - иначе. +// вводе (только если АдресТолькоРоссийский = Истина). // * ВключатьСтрануВПредставление - Булево - Истина, если требуется включать наименование страны в -// представление адреса, Ложь - иначе. +// представление адреса. // Для типа АдресЭлектроннойПочты - Структура, содержащая поля: -// * ПроверятьКорректность - Булево - Истина, если требуется проверка адреса электронной почты на -// корректность, Ложь - иначе. -// * ЗапрещатьВводНекорректного - Булево - Истина, если требуется запрещать пользователю записывать -// некорректный адрес (Только если -// ПроверятьКорректность = Истина), Ложь - иначе. +// * ПроверятьКорректность - Булево - Истина, если требуется запрещать пользователю записывать +// некорректный адрес электронной почты. // Для остальных типов или для задания настроек по умолчанию используется Неопределено. // -// Примечание: -// Установка параметра ПроверятьКорректность в значение Истина требует так же установить параметр -// ЗапрещатьВводНекорректного в значение Истина. -// -// При использовании параметра Порядок следует внимательно следить за уникальностью назначаемого значения. Если -// после выполнения обновления значения порядка окажутся неуникальными в пределах группы, то настройка порядка -// пользователем будет невозможна. -// В общем случае рекомендуется не использовать этот параметр (порядок не изменится), либо заполнять его значением -// 0 (порядок будет назначен автоматически в подсистеме "Настройка порядка элементов" при выполнении процедуры). -// Для размещения видов КИ в определенной последовательности относительно друг друга без явного размещения в начале -// списка достаточно вызывать данную процедуру в нужной последовательности для каждого вида КИ с указанием -// порядка 0. Если добавляется предопределенный вид КИ к уже существующим в ИБ, не рекомендуется назначать порядок -// в явном виде. -// Функция ПараметрыВидаКонтактнойИнформации(Тип = Неопределено) Экспорт Если ТипЗнч(Тип) = Тип("Строка") Тогда @@ -1633,19 +1785,21 @@ ПараметрыВида.Вставить("ОбязательноеЗаполнение", Ложь); ПараметрыВида.Вставить("РазрешитьВводНесколькихЗначений", Ложь); ПараметрыВида.Вставить("ЗапретитьРедактированиеПользователем", Ложь); + ПараметрыВида.Вставить("Используется", Истина); Если УстанавливаемыйТип = Перечисления.ТипыКонтактнойИнформации.Адрес Тогда НастройкиПроверки = Новый Структура; НастройкиПроверки.Вставить("АдресТолькоРоссийский", Ложь); НастройкиПроверки.Вставить("ПроверятьКорректность", Ложь); НастройкиПроверки.Вставить("ПроверятьПоФИАС", Ложь); - НастройкиПроверки.Вставить("ЗапрещатьВводНекорректного", Ложь); НастройкиПроверки.Вставить("СкрыватьНеактуальныеАдреса", Ложь); НастройкиПроверки.Вставить("ВключатьСтрануВПредставление", Ложь); ИначеЕсли УстанавливаемыйТип = Перечисления.ТипыКонтактнойИнформации.АдресЭлектроннойПочты Тогда НастройкиПроверки = Новый Структура; НастройкиПроверки.Вставить("ПроверятьКорректность", Ложь); - НастройкиПроверки.Вставить("ЗапрещатьВводНекорректного", Ложь); + ИначеЕсли УстанавливаемыйТип = Перечисления.ТипыКонтактнойИнформации.Телефон Тогда + НастройкиПроверки = Новый Структура; + НастройкиПроверки.Вставить("ТелефонCДобавочнымНомером", Истина); Иначе НастройкиПроверки = Неопределено; КонецЕсли; @@ -1702,24 +1856,186 @@ КонецПроцедуры -// Устарела. Следует использовать УстановитьСвойстваВидаКонтактнойИнформации. +// Обновляет представление в поле агрегате ВидДляСписка для вывода в контактной информации +// в динамических списках и отчетах // -Процедура ОбновитьВидКонтактнойИнформации(Вид, Тип, Подсказка, МожноИзменятьСпособРедактирования, РедактированиеТолькоВДиалоге, - ОбязательноеЗаполнение, Порядок = Неопределено, РазрешитьВводНесколькихЗначений = Ложь, НастройкиПроверки = Неопределено) Экспорт +// Параметры: +// Объект - ОбъектСсылка - ссылка на объект конфигурации, содержащий табличную часть контактная информация +// +Процедура ОбновитьКонтактнуюИнформациюДляСписков(Объект = Неопределено) Экспорт - ПараметрыВида = ПараметрыВидаКонтактнойИнформации(); - ПараметрыВида.Вид = Вид; - ПараметрыВида.Тип = Тип; - ПараметрыВида.Подсказка = Подсказка; - ПараметрыВида.МожноИзменятьСпособРедактирования = МожноИзменятьСпособРедактирования; - ПараметрыВида.РедактированиеТолькоВДиалоге = РедактированиеТолькоВДиалоге; - ПараметрыВида.ОбязательноеЗаполнение = ОбязательноеЗаполнение; - ПараметрыВида.Порядок = Порядок; - ПараметрыВида.РазрешитьВводНесколькихЗначений = РазрешитьВводНесколькихЗначений; - ПараметрыВида.НастройкиПроверки = НастройкиПроверки; - ПараметрыВида.ЗапретитьРедактированиеПользователем = Ложь; + Если Объект = Неопределено Тогда + УправлениеКонтактнойИнформациейСлужебный.ОбновитьКонтактнуюИнформациюДляСписков(); + Иначе + Если Объект.Метаданные().ТабличныеЧасти.КонтактнаяИнформация.Реквизиты.Найти("ВидДляСписка") <> Неопределено Тогда + УправлениеКонтактнойИнформациейСлужебный.ОбновитьКонтактнуюИнформациюДляСписковДляОбъекта(Объект); + КонецЕсли; + КонецЕсли; - УстановитьСвойстваВидаКонтактнойИнформации(ПараметрыВида); +КонецПроцедуры + +// Выполняет отложенное обновление контактной информации для списков и отчетов +// +// Параметры: +// Параметры - Структура - Параметры обработчика обновления +// РазмерПорции - Число - Необязательный параметр размер порции обрабатываемых данных за один запуск. +// +Процедура ОбновитьКонтактнуюИнформациюДляСписковОтложенно(Параметры, РазмерПорции = 1000) Экспорт + + ОбъектыСВидомДляСписка = Неопределено; + Параметры.Свойство("ОбъектыСВидомДляСписка", ОбъектыСВидомДляСписка); + + Если Параметры.ПрогрессВыполнения.ВсегоОбъектов = 0 Тогда + // расчет количества + Запрос = Новый Запрос; + Запрос.Текст = + "ВЫБРАТЬ + | ВидыКонтактнойИнформации.Ссылка, + | ВидыКонтактнойИнформации.ИмяПредопределенныхДанных + |ИЗ + | Справочник.ВидыКонтактнойИнформации КАК ВидыКонтактнойИнформации + |ГДЕ + | ВидыКонтактнойИнформации.ЭтоГруппа = ИСТИНА"; + + РезультатЗапроса = Запрос.Выполнить(); + ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать(); + ОбъектыСВидомДляСписка = Новый Массив; + ТекстЗапроса = ""; + Разделитель = ""; + + ШаблонЗапроса = "ВЫБРАТЬ + | КОЛИЧЕСТВО(ТаблицаСКонтактнойИнформацией.Ссылка) КАК Количество, + | ТИПЗНАЧЕНИЯ(ТаблицаСКонтактнойИнформацией.Ссылка) КАК Ссылка + |ИЗ + | %1.%2 КАК ТаблицаСКонтактнойИнформацией + | СГРУППИРОВАТЬ ПО + | ТИПЗНАЧЕНИЯ(ТаблицаСКонтактнойИнформацией.Ссылка)"; + + Пока ВыборкаДетальныеЗаписи.Следующий() Цикл + Если СтрНачинаетсяС(ВыборкаДетальныеЗаписи.ИмяПредопределенныхДанных, "Справочник") Тогда + ИмяОбъекта = Сред(ВыборкаДетальныеЗаписи.ИмяПредопределенныхДанных, 11); + + Если Метаданные.Справочники.Найти(ИмяОбъекта) <> Неопределено Тогда + КонтактнаяИнформация = Метаданные.Справочники[ИмяОбъекта].ТабличныеЧасти.КонтактнаяИнформация; + Если КонтактнаяИнформация.Реквизиты.Найти("ВидДляСписка") <> Неопределено Тогда + ТекстЗапроса = ТекстЗапроса + Разделитель + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонЗапроса, "Справочник", ИмяОбъекта); + Разделитель = " ОБЪЕДИНИТЬ ВСЕ "; + КонецЕсли; + КонецЕсли; + ИначеЕсли СтрНачинаетсяС(ВыборкаДетальныеЗаписи.ИмяПредопределенныхДанных, "Документ") Тогда + ИмяОбъекта = Сред(ВыборкаДетальныеЗаписи.ИмяПредопределенныхДанных, 9); + + Если Метаданные.Документы.Найти(ИмяОбъекта) <> Неопределено Тогда + КонтактнаяИнформация = Метаданные.Документы[ИмяОбъекта].ТабличныеЧасти.КонтактнаяИнформация; + Если КонтактнаяИнформация.Реквизиты.Найти("ВидДляСписка") <> Неопределено Тогда + ТекстЗапроса = ТекстЗапроса + Разделитель + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонЗапроса, "Документ", ИмяОбъекта); + Разделитель = " ОБЪЕДИНИТЬ ВСЕ "; + КонецЕсли; + КонецЕсли; + КонецЕсли; + КонецЦикла; + + Если ПустаяСтрока(ТекстЗапроса) Тогда + Параметры.ОбработкаЗавершена = Ложь; + Возврат; + КонецЕсли; + Запрос = Новый Запрос(ТекстЗапроса); + РезультатЗапроса = Запрос.Выполнить().Выбрать(); + Количество = 0; + ОбъектыСВидомДляСписка = Новый Массив; + Пока РезультатЗапроса.Следующий() Цикл + Количество = Количество + РезультатЗапроса.Количество; + ОбъектыСВидомДляСписка.Добавить(РезультатЗапроса.Ссылка); + КонецЦикла; + Параметры.ПрогрессВыполнения.ВсегоОбъектов = Количество; + Параметры.Вставить("ОбъектыСВидомДляСписка", ОбъектыСВидомДляСписка); + КонецЕсли; + + Если ОбъектыСВидомДляСписка = Неопределено ИЛИ ОбъектыСВидомДляСписка.Количество() = 0 Тогда + Возврат; + КонецЕсли; + + ПолноеИмяОбъектаСВидомДляСписка = Метаданные.НайтиПоТипу(ОбъектыСВидомДляСписка.Получить(0)).ПолноеИмя(); + ТекстЗапроса = " ВЫБРАТЬ ПЕРВЫЕ " + Формат(РазмерПорции, "ЧГ=0") + " + | КонтактнаяИнформация.Ссылка КАК Ссылка + |ИЗ + | " + ПолноеИмяОбъектаСВидомДляСписка + ".КонтактнаяИнформация КАК КонтактнаяИнформация + | + |СГРУППИРОВАТЬ ПО + | КонтактнаяИнформация.Ссылка + | + |ИМЕЮЩИЕ + | СУММА(ВЫБОР + | КОГДА КонтактнаяИнформация.ВидДляСписка = ЗНАЧЕНИЕ(Справочник.ВидыКонтактнойИнформации.ПустаяСсылка) + | ТОГДА 0 + | ИНАЧЕ 1 + | КОНЕЦ) = 0"; + + Запрос = Новый Запрос(ТекстЗапроса); + РезультатЗапроса = Запрос.Выполнить().Выбрать(); + Количество = РезультатЗапроса.Количество(); + Если Количество > 0 Тогда + Пока РезультатЗапроса.Следующий() Цикл + Объект = РезультатЗапроса.Ссылка.ПолучитьОбъект(); + ОбновитьКонтактнуюИнформациюДляСписков(Объект); + ОбновлениеИнформационнойБазы.ЗаписатьДанные(Объект); + КонецЦикла; + Если Количество < 1000 Тогда + ОбъектыСВидомДляСписка.Удалить(0); + КонецЕсли; + Параметры.ПрогрессВыполнения.ОбработаноОбъектов = Параметры.ПрогрессВыполнения.ОбработаноОбъектов + Количество; + Иначе + ОбъектыСВидомДляСписка.Удалить(0); + КонецЕсли; + + Если ОбъектыСВидомДляСписка.Количество() > 0 Тогда + Параметры.ОбработкаЗавершена = Ложь; + КонецЕсли; + + Параметры.Вставить("ОбъектыСВидомДляСписка", ОбъектыСВидомДляСписка); + +КонецПроцедуры + +#КонецОбласти + +#Область СлужебныйПрограммныйИнтерфейс + +// Устанавливает доступность элементов контактной информации на форме +// +// Параметры: +// Форма - УправляемаяФорма - передаваемая форма. +// Элементы - Соответствие - Список видов контактной информации, для которых устанавливается доступ +// ** Ключ - ОбъектМетаданных - Подсистема, в которой размещается отчет или вариант отчета. +// ** Значение - Булево - Если ЛОЖЬ, то элемент доступен только для просмотра. +// +Процедура УстановитьДоступностьЭлементовКонтактнойИнформации(Форма, Элементы) Экспорт + Для каждого Элемент Из Элементы Цикл + + Отбор = Новый Структура("Вид", Элемент.Ключ); + НайденныеСтроки = Форма.КонтактнаяИнформацияОписаниеДополнительныхРеквизитов.НайтиСтроки(Отбор); + Если НайденныеСтроки <> Неопределено Тогда + Для Каждого НайденнаяСтрока Из НайденныеСтроки Цикл + ЭлементКИ = Форма.Элементы[НайденнаяСтрока.ИмяРеквизита]; + ЭлементКИ.ТолькоПросмотр = НЕ Элемент.Значение; + КонецЦикла; + // Если у элемента только просмотр, то удаляем возможность добавления этого элемента на форму. + Если НЕ Элемент.Значение Тогда + Для каждого ЭлементКонтекстногоМеню Из Форма.ПараметрыКонтактнойИнформации.СписокДобавляемыхЭлементов Цикл + Если ЭлементКонтекстногоМеню.Значение.Ссылка = Элемент.Ключ Тогда + Форма.ПараметрыКонтактнойИнформации.СписокДобавляемыхЭлементов.Удалить(ЭлементКонтекстногоМеню); + Продолжить; + КонецЕсли; + КонецЦикла; + КонецЕсли; + КонецЕсли; + + КонецЦикла; + + Если Форма.Элементы.Найти("КонтактнаяИнформацияДобавитьПолеВвода") <> Неопределено + И Форма.ПараметрыКонтактнойИнформации.СписокДобавляемыхЭлементов.Количество() = 0 Тогда + // Делаем кнопку Добавить недоступной, т.к. контекстное меню пустое. + Форма.Элементы.КонтактнаяИнформацияДобавитьПолеВвода.Доступность = Ложь; + КонецЕсли; КонецПроцедуры @@ -1782,14 +2098,9 @@ ОписаниеКонтактнойИнформации = Форма.КонтактнаяИнформацияОписаниеДополнительныхРеквизитов; - Если Форма.ПараметрыКонтактнойИнформации.ДобавленныеЭлементы.НайтиПоЗначению(ИмяРеквизита) = Неопределено Тогда - Возврат; - КонецЕсли; - Отбор = Новый Структура("ИмяРеквизита", ИмяРеквизита); НайденнаяСтрока = ОписаниеКонтактнойИнформации.НайтиСтроки(Отбор)[0]; - // Заголовок и поле ввода ЗаголовокЭлемента = Форма.Элементы.Найти("Заголовок" + ИмяРеквизита); ИмяКомментария = "Комментарий" + ИмяРеквизита; @@ -1902,17 +2213,27 @@ ТаблицаКонтактнойИнформации = Форма.КонтактнаяИнформацияОписаниеДополнительныхРеквизитов; ОтборПоВиду = Новый Структура("Вид", ДобавляемыйВид); + ГруппаПолейВвода = Форма.Элементы.ГруппаПолейВводаКонтактнойИнформации; + Если ДобавлениеНовогоЗначения Тогда НайденныеСтроки = ТаблицаКонтактнойИнформации.НайтиСтроки(ОтборПоВиду); ПоследняяСтрока = НайденныеСтроки.Получить(НайденныеСтроки.Количество() - 1); ИндексДобавляемойСтроки = ТаблицаКонтактнойИнформации.Индекс(ПоследняяСтрока) + 1; - ЭтоПоследняяСтрока = Ложь; - Если ИндексДобавляемойСтроки = ТаблицаКонтактнойИнформации.Количество() Тогда - ЭтоПоследняяСтрока = Истина; - Иначе - ИмяСледующегоРеквизита = ТаблицаКонтактнойИнформации[ИндексДобавляемойСтроки].ИмяРеквизита; + ЭтоПоследняяСтрока = Истина; + Если ИндексДобавляемойСтроки <> ТаблицаКонтактнойИнформации.Количество() Тогда + + Для Счетчик = ИндексДобавляемойСтроки По ТаблицаКонтактнойИнформации.Количество() - 1 Цикл + СтрокаПоиска = ТаблицаКонтактнойИнформации.Получить(Счетчик); + Если Форма.Элементы[СтрокаПоиска.ИмяРеквизита].Родитель = ГруппаПолейВвода Тогда + ИмяСледующегоРеквизита = СтрокаПоиска.ИмяРеквизита; + ЭтоПоследняяСтрока = Ложь; + ИндексДобавляемойСтроки = Счетчик; + Прервать; + КонецЕсли; + КонецЦикла; + КонецЕсли; НоваяСтрока = ТаблицаКонтактнойИнформации.Вставить(ИндексДобавляемойСтроки); @@ -1948,10 +2269,17 @@ Если Не ЭтоПоследняяСтрока Тогда СледующийЗаголовок = Форма.Элементы["Заголовок" + ИмяСледующегоРеквизита]; Форма.Элементы.Переместить(Заголовок, ГруппаЗаголовков, СледующийЗаголовок); + + Если ЕстьКомментарий Тогда + // есть комментарий и поэтому надо сдвинуть еще на одну строку заглушкой + ИмяЗаглушки = "ЗаглушкаЗаголовка" + ИмяРеквизита; + ЭлементЗаглушка = Форма.Элементы[ИмяЗаглушки]; + Форма.Элементы.Переместить(ЭлементЗаглушка, ГруппаЗаголовков, СледующийЗаголовок); + КонецЕсли; КонецЕсли; КонецЕсли; + - ГруппаПолейВвода = Форма.Элементы.ГруппаПолейВводаКонтактнойИнформации; ПолеВвода = ПолеВвода(Форма, ИнформацияОВидеКИ.РедактированиеТолькоВДиалоге, ИнформацияОВидеКИ.Тип, ИмяРеквизита, ИнформацияОВидеКИ.Подсказка, ЭтоНовыйВидКИ, ОбязательноеЗаполнение); Если Не ЭтоПоследняяСтрока Тогда @@ -1996,25 +2324,12 @@ // Выводим комментарий Если ЕстьКомментарий Тогда - ИмяКомментария = "Комментарий" + ИмяРеквизита; - Комментарий = Комментарий(Форма, ИнформацияОВидеКИ.Комментарий, ИмяКомментария, ГруппаПолейВвода); + Комментарий = Комментарий(Форма, Результат.Комментарий, ИмяКомментария, ГруппаПолейВвода); Если Не ЭтоПоследняяСтрока Тогда - - ИмяСледующегоЭлемента = ПоследняяСтрока.ИмяРеквизита; - - Если ЗначениеЗаполнено(ПоследняяСтрока.Комментарий) Тогда - ИмяСледующегоЭлемента = "Комментарий" + ИмяСледующегоЭлемента; - КонецЕсли; - - ИндексСледующегоЭлемента = ГруппаПолейВвода.ПодчиненныеЭлементы.Индекс(Форма.Элементы[ИмяСледующегоЭлемента]) + 1; - СледующийЭлемент = ГруппаПолейВвода.ПодчиненныеЭлементы.Получить(ИндексСледующегоЭлемента); - Форма.Элементы.Переместить(Комментарий, ГруппаПолейВвода, СледующийЭлемент); - КонецЕсли; - КонецЕсли; // Заглушка , если заголовок у поля сверху. @@ -2026,7 +2341,7 @@ КонецЕсли; - Действие = Действие(Форма, ИнформацияОВидеКИ.Тип, ИмяРеквизита, ГруппаДействий, КоличествоАдресов, ЕстьКомментарий); + Действие = Действие(Форма, ИнформацияОВидеКИ, ИмяРеквизита, ГруппаДействий, КоличествоАдресов, ЕстьКомментарий); Если Не ЭтоПоследняяСтрока Тогда СледующееДействие = Форма.Элементы.Найти(ИмяСледующегоДействия); Если СледующееДействие <> Неопределено Тогда @@ -2034,6 +2349,13 @@ КонецЕсли; КонецЕсли; + Если Не ЭтоНовыйВидКИ Тогда + ПунктКонтекстногоМенюПеремещения(ПолеВвода, Форма, 1); + НайденныеСтроки = ТаблицаКонтактнойИнформации.НайтиСтроки(ОтборПоВиду); + ПредыдущаяСтрока = НайденныеСтроки.Получить(НайденныеСтроки.Количество() - 2); + ПунктКонтекстногоМенюПеремещения(Форма.Элементы[ПредыдущаяСтрока.ИмяРеквизита], Форма, - 1); + КонецЕсли; + Если ДобавлениеНовогоЗначения Тогда Форма.ТекущийЭлемент = Форма.Элементы[ИмяРеквизита]; @@ -2104,9 +2426,9 @@ Кнопка = Форма.Элементы.Добавить(ИмяКоманды,Тип("КнопкаФормы"), Элемент.КонтекстноеМеню); Команда.Подсказка = НСтр("ru = 'Ввести комментарий'"); Команда.Действие = "Подключаемый_КонтактнаяИнформацияВыполнитьКоманду"; - Команда.ИзменяетСохраняемыеДанные = Истина; Кнопка.Заголовок = НСтр("ru = 'Ввести комментарий'"); Кнопка.ИмяКоманды = ИмяКоманды; + Команда.ИзменяетСохраняемыеДанные = Истина; ДобавитьОписаниеЭлемента(Форма, ИмяКоманды, 1); ДобавитьОписаниеЭлемента(Форма, ИмяКоманды, 9, Истина); @@ -2134,23 +2456,58 @@ КонецФункции -Функция Действие(Форма, Тип, ИмяРеквизита, ГруппаДействий, КоличествоАдресов, ЕстьКомментарий = Ложь) +Процедура ПунктКонтекстногоМенюПеремещения(ПредыдущийЭлемент, Форма, Направление) + + Если Направление > 0 Тогда + ИмяКоманды = "КонтекстноеМенюВверх" + ПредыдущийЭлемент.Имя; + Иначе + ИмяКоманды = "КонтекстноеМенюВниз" + ПредыдущийЭлемент.Имя; + КонецЕсли; + Команда = Форма.Команды.Добавить(ИмяКоманды); + Кнопка = Форма.Элементы.Добавить(ИмяКоманды, Тип("КнопкаФормы"), ПредыдущийЭлемент.КонтекстноеМеню); + + Команда.Действие = "Подключаемый_КонтактнаяИнформацияВыполнитьКоманду"; + Если Направление > 0 Тогда + ТекстКоманды = НСтр("ru = 'Переместить вверх'"); + Кнопка.Картинка = БиблиотекаКартинок.ПереместитьВверх; + Иначе + ТекстКоманды = НСтр("ru = 'Переместить вниз'"); + Кнопка.Картинка = БиблиотекаКартинок.ПереместитьВниз; + КонецЕсли; + Кнопка.Заголовок = ТекстКоманды; + Команда.Подсказка = ТекстКоманды; + Кнопка.ИмяКоманды = ИмяКоманды; + Команда.ИзменяетСохраняемыеДанные = Истина; + Кнопка.Доступность = Истина; + ДобавитьОписаниеЭлемента(Форма, ИмяКоманды, 9, Истина); + +КонецПроцедуры + +Функция Действие(Форма, ВидКонтактнойИнформации, ИмяРеквизита, ГруппаДействий, КоличествоАдресов, ЕстьКомментарий = Ложь) + + Тип = ВидКонтактнойИнформации.Тип; + СоздаватьДействиеДляТипа = Новый Соответствие(); + СоздаватьДействиеДляТипа.Вставить(Перечисления.ТипыКонтактнойИнформации.ВебСтраница, Истина); + СоздаватьДействиеДляТипа.Вставить(Перечисления.ТипыКонтактнойИнформации.АдресЭлектроннойПочты, Истина); + СоздаватьДействиеДляТипа.Вставить(Перечисления.ТипыКонтактнойИнформации.Телефон, Истина); + СоздаватьДействиеДляТипа.Вставить(Перечисления.ТипыКонтактнойИнформации.Адрес, ?(КоличествоАдресов > 1, Истина, Ложь)); + СоздаватьДействиеДляТипа.Вставить(Перечисления.ТипыКонтактнойИнформации.Skype, Истина); - МожноСоздаватьДействие = Истина; Если Тип = Перечисления.ТипыКонтактнойИнформации.АдресЭлектроннойПочты Тогда Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаСПочтовымиСообщениями") Тогда МодульРаботаСПочтовымиСообщениями = ОбщегоНазначения.ОбщийМодуль("РаботаСПочтовымиСообщениями"); Если НЕ МодульРаботаСПочтовымиСообщениями.ДоступнаОтправкаПисем() Тогда - МожноСоздаватьДействие = Ложь; + СоздаватьДействиеДляТипа[Тип] = Ложь; КонецЕсли; Иначе - МожноСоздаватьДействие = Ложь; + СоздаватьДействиеДляТипа[Тип] = Ложь; КонецЕсли; + + ИначеЕсли Тип = Перечисления.ТипыКонтактнойИнформации.Телефон Тогда + СоздаватьДействиеДляТипа[Тип] = Истина; КонецЕсли; - Если МожноСоздаватьДействие И ((Тип = Перечисления.ТипыКонтактнойИнформации.ВебСтраница - Или Тип = Перечисления.ТипыКонтактнойИнформации.АдресЭлектроннойПочты) - Или (Тип = Перечисления.ТипыКонтактнойИнформации.Адрес И КоличествоАдресов > 1)) Тогда + Если СоздаватьДействиеДляТипа[Тип] = Истина Тогда // Есть действие ИмяКоманды = "Команда" + ИмяРеквизита; @@ -2182,6 +2539,22 @@ Команда.Подсказка = НСтр("ru = 'Написать письмо'"); Команда.Картинка = БиблиотекаКартинок.ОтправитьЭлектронноеПисьмо; + ИначеЕсли Тип = Перечисления.ТипыКонтактнойИнформации.Телефон Тогда + + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ОтправкаSMS") Тогда + Элемент.Заголовок = НСтр("ru = 'Позвонить или отправить SMS'"); + Команда.Подсказка = НСтр("ru = 'Позвонить или отправить SMS'"); + Команда.Картинка = БиблиотекаКартинок.ПозвонитьИлиОтправитьSMS; + Иначе + Элемент.Заголовок = НСтр("ru = 'Позвонить'"); + Команда.Подсказка = НСтр("ru = 'Позвонить по телефону'"); + Команда.Картинка = БиблиотекаКартинок.Позвонить; + КонецЕсли; + + ИначеЕсли Тип = Перечисления.ТипыКонтактнойИнформации.Skype Тогда + Элемент.Заголовок = НСтр("ru = 'Skype'"); + Команда.Подсказка = НСтр("ru = 'Skype'"); + Команда.Картинка = БиблиотекаКартинок.Skype; КонецЕсли; Если ЕстьКомментарий Тогда @@ -2240,7 +2613,7 @@ // Функция УбратьРазделителиВНомерТелефона(Знач НомерТелефона) - Поз = Найти(НомерТелефона, ","); + Поз = СтрНайти(НомерТелефона, ","); Если Поз <> 0 Тогда НомерТелефона = Лев(НомерТелефона, Поз-1); КонецЕсли; @@ -2319,7 +2692,6 @@ Объект.АдресТолькоРоссийский = Ложь; Объект.ВключатьСтрануВПредставление = Ложь; - Объект.ЗапрещатьВводНекорректного =?(НастройкиПроверки = Неопределено, Ложь, НастройкиПроверки.ЗапрещатьВводНекорректного); Объект.СкрыватьНеактуальныеАдреса = Ложь; КонецПроцедуры @@ -2408,21 +2780,81 @@ // Функция ИмяТабличнойЧастиПоВидуКИ(ВидКИ, ИмяОбъекта) Экспорт - ГруппаВидаКИ = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(ВидКИ, "Родитель"); - ИмяВидаКИ = ОбщегоНазначения.ИмяПредопределенного(ГруппаВидаКИ); - Поз = Найти(ИмяВидаКИ, ИмяОбъекта); + Запрос = Новый Запрос; + Запрос.Текст = "ВЫБРАТЬ + | ВидыКонтактнойИнформации.Родитель.ИмяПредопределенныхДанных КАК ИмяВидаКонтактнойИнформации + |ИЗ + | Справочник.ВидыКонтактнойИнформации КАК ВидыКонтактнойИнформации + |ГДЕ + | ВидыКонтактнойИнформации.Ссылка = &Ссылка"; - Возврат Сред(ИмяВидаКИ, Поз + СтрДлина(ИмяОбъекта)); + Запрос.УстановитьПараметр("Ссылка", ВидКИ); + РезультатЗапроса = Запрос.Выполнить().Выбрать(); + + Если РезультатЗапроса.Следующий() Тогда + Возврат Сред(РезультатЗапроса.ИмяВидаКонтактнойИнформации, + СтрНайти(РезультатЗапроса.ИмяВидаКонтактнойИнформации, ИмяОбъекта) + СтрДлина(ИмяОбъекта)); + КонецЕсли; + + Возврат ""; КонецФункции +// Возвращает имена табличных частей документа по виду контактной информации. +// +// Параметры: +// ТаблицаВидовКонтактнойИнформации - ТаблицаЗначений - Список видов контактной информации. +// * Вид - СправочникСсылка.ВидыКонтактнойИнформации - Вид контактной информации. +// ИмяОбъекта - Строка - полное имя объекта метаданного. +// +// Возвращаемое значение: +// Соответствие - имена табличных части или пустая строка, если табличной части нет. +// +Функция ИменаТабличныхЧастейПоВидамКИ(ТаблицаВидовКонтактнойИнформации, ИмяОбъекта) Экспорт + + Запрос = Новый Запрос; + Запрос.Текст = "ВЫБРАТЬ + | ВидыКонтактнойИнформации.Вид КАК ВидКИ + |ПОМЕСТИТЬ ВидыКИ + |ИЗ + | &ТаблицаВидовКонтактнойИнформации КАК ВидыКонтактнойИнформации + |; + | + |//////////////////////////////////////////////////////////////////////////////// + |ВЫБРАТЬ + | ВидыКонтактнойИнформации.Родитель.ИмяПредопределенныхДанных КАК ИмяТабличнойЧасти, + | ВидыКИ.ВидКИ КАК ВидКонтактнойИнформации + |ИЗ + | ВидыКИ КАК ВидыКИ + | ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ВидыКонтактнойИнформации КАК ВидыКонтактнойИнформации + | ПО ВидыКИ.ВидКИ = ВидыКонтактнойИнформации.Ссылка"; + + Запрос.УстановитьПараметр("ТаблицаВидовКонтактнойИнформации", ТаблицаВидовКонтактнойИнформации); + РезультатЗапроса = Запрос.Выполнить().Выбрать(); + + Результат = Новый Соответствие; + Пока РезультатЗапроса.Следующий() Цикл + + Если ЗначениеЗаполнено(РезультатЗапроса.ИмяТабличнойЧасти) Тогда + ИмяТабличнойЧасти = Сред(РезультатЗапроса.ИмяТабличнойЧасти, СтрНайти(РезультатЗапроса.ИмяТабличнойЧасти, ИмяОбъекта) + СтрДлина(ИмяОбъекта)); + Иначе + ИмяТабличнойЧасти = ""; + КонецЕсли; + + Результат.Вставить(РезультатЗапроса.ВидКонтактнойИнформации, ИмяТабличнойЧасти); + КонецЦикла; + + Возврат Результат; + +КонецФункции + + // Проверяет на наличие в форме заполненных строк КИ того же вида (за исключением текущей). // Функция ЕстьДругиеЗаполненныеСтрокКИДанногоВида(Знач Форма, Знач ПроверяемаяСтрока, Знач ВидКонтактнойИнформации) ВсеСтрокиЭтогоВида = Форма.КонтактнаяИнформацияОписаниеДополнительныхРеквизитов.НайтиСтроки( - Новый Структура("Вид", ВидКонтактнойИнформации) - ); + Новый Структура("Вид", ВидКонтактнойИнформации)); Для Каждого СтрокаВида Из ВсеСтрокиЭтогоВида Цикл @@ -2463,7 +2895,7 @@ Адрес = Источник.Состав; - ПространствоИмен = УправлениеКонтактнойИнформациейКлиентСерверПовтИсп.ПространствоИмен(); + ПространствоИмен = УправлениеКонтактнойИнформациейКлиентСервер.ПространствоИмен(); ЭтоАдрес = ТипЗнч(Адрес) = Тип("ОбъектXDTO") И Адрес.Тип() = ФабрикаXDTO.Тип(ПространствоИмен, "Адрес"); Если ЭтоАдрес И Адрес.Состав <> Неопределено Тогда СтрокаТабличнойЧасти.Страна = Адрес.Страна; @@ -2490,7 +2922,7 @@ Если Результат.Количество() > 0 Тогда СтрокаТабличнойЧасти.АдресЭП = Результат[0].Адрес; - Поз = Найти(СтрокаТабличнойЧасти.АдресЭП, "@"); + Поз = СтрНайти(СтрокаТабличнойЧасти.АдресЭП, "@"); Если Поз <> 0 Тогда СтрокаТабличнойЧасти.ДоменноеИмяСервера = Сред(СтрокаТабличнойЧасти.АдресЭП, Поз+1); КонецЕсли; @@ -2511,22 +2943,22 @@ СтрокаТабличнойЧасти.НомерТелефона = ""; Телефон = Источник.Состав; - ПространствоИмен = УправлениеКонтактнойИнформациейКлиентСерверПовтИсп.ПространствоИмен(); + ПространствоИмен = УправлениеКонтактнойИнформациейКлиентСервер.ПространствоИмен(); Если Телефон <> Неопределено И Телефон.Тип() = ФабрикаXDTO.Тип(ПространствоИмен, "НомерТелефона") Тогда КодСтраны = Телефон.КодСтраны; КодГорода = Телефон.КодГорода; НомерТелефона = Телефон.Номер; - Если Лев(КодСтраны, 1) = "+" Тогда + Если СтрНачинаетсяС(КодСтраны, "+") Тогда КодСтраны = Сред(КодСтраны, 2); КонецЕсли; - Поз = Найти(НомерТелефона, ","); + Поз = СтрНайти(НомерТелефона, ","); Если Поз <> 0 Тогда НомерТелефона = Лев(НомерТелефона, Поз-1); КонецЕсли; - Поз = Найти(НомерТелефона, Символы.ПС); + Поз = СтрНайти(НомерТелефона, Символы.ПС); Если Поз <> 0 Тогда НомерТелефона = Лев(НомерТелефона, Поз-1); КонецЕсли; @@ -2549,13 +2981,13 @@ СтрокаТабличнойЧасти.ДоменноеИмяСервера = ""; АдресСтраницы = Источник.Состав; - ПространствоИмен = УправлениеКонтактнойИнформациейКлиентСерверПовтИсп.ПространствоИмен(); + ПространствоИмен = УправлениеКонтактнойИнформациейКлиентСервер.ПространствоИмен(); Если АдресСтраницы <> Неопределено И АдресСтраницы.Тип() = ФабрикаXDTO.Тип(ПространствоИмен, "ВебСайт") Тогда АдресСтрокой = АдресСтраницы.Значение; // Удалим протокол - АдресСервера = Прав(АдресСтрокой, СтрДлина(АдресСтрокой) - Найти(АдресСтрокой, "://") ); - Поз = Найти(АдресСервера, "/"); + АдресСервера = Прав(АдресСтрокой, СтрДлина(АдресСтрокой) - СтрНайти(АдресСтрокой, "://") ); + Поз = СтрНайти(АдресСервера, "/"); // Удалим путь АдресСервера = ?(Поз = 0, АдресСервера, Лев(АдресСервера, Поз-1)); @@ -2580,22 +3012,28 @@ Процедура ЗаполнитьКонтактнуюИнформациюТабличнойЧасти(Приемник, ВидКИ, СтруктураКИ, СтрокаТабличнойЧасти = Неопределено) ПараметрыОтбора = Новый Структура; - Если СтрокаТабличнойЧасти = Неопределено Тогда - ДанныеЗаполнения = Приемник; - Иначе - ДанныеЗаполнения = СтрокаТабличнойЧасти; - ПараметрыОтбора.Вставить("ИдентификаторСтрокиТабличнойЧасти", СтрокаТабличнойЧасти.ИдентификаторСтрокиТабличнойЧасти); + НуженПоискСтрокиВТабличнойЧасти = Истина; + Если СтрокаТабличнойЧасти <> Неопределено Тогда + Если Метаданные.НайтиПоТипу(ТипЗнч(СтрокаТабличнойЧасти)).Реквизиты.Найти("ИдентификаторСтрокиТабличнойЧасти") <> Неопределено Тогда + ПараметрыОтбора.Вставить("ИдентификаторСтрокиТабличнойЧасти", СтрокаТабличнойЧасти.ИдентификаторСтрокиТабличнойЧасти); + Иначе + НуженПоискСтрокиВТабличнойЧасти = Ложь; + КонецЕсли; КонецЕсли; - ПараметрыОтбора.Вставить("Вид", ВидКИ); - НайденныеСтрокиКИ = Приемник.КонтактнаяИнформация.НайтиСтроки(ПараметрыОтбора); - Если НайденныеСтрокиКИ.Количество() = 0 Тогда - СтрокаКИ = Приемник.КонтактнаяИнформация.Добавить(); - Если СтрокаТабличнойЧасти <> Неопределено Тогда - СтрокаКИ.ИдентификаторСтрокиТабличнойЧасти = СтрокаТабличнойЧасти.ИдентификаторСтрокиТабличнойЧасти; + Если НуженПоискСтрокиВТабличнойЧасти = Истина Тогда + ПараметрыОтбора.Вставить("Вид", ВидКИ); + НайденныеСтрокиКИ = Приемник.КонтактнаяИнформация.НайтиСтроки(ПараметрыОтбора); + Если НайденныеСтрокиКИ.Количество() = 0 Тогда + СтрокаКИ = Приемник.КонтактнаяИнформация.Добавить(); + Если СтрокаТабличнойЧасти <> Неопределено Тогда + СтрокаКИ.ИдентификаторСтрокиТабличнойЧасти = СтрокаТабличнойЧасти.ИдентификаторСтрокиТабличнойЧасти; + КонецЕсли; + Иначе + СтрокаКИ = НайденныеСтрокиКИ[0]; КонецЕсли; Иначе - СтрокаКИ = НайденныеСтрокиКИ[0]; + СтрокаКИ = СтрокаТабличнойЧасти; КонецЕсли; // Из любого понимаемого - в XML. @@ -2608,6 +3046,7 @@ СтрокаКИ.ЗначенияПолей = ЗначенияПолей; ЗаполнитьДополнительныеРеквизитыКонтактнойИнформации(СтрокаКИ, Представление, ЗначенияПолей); + КонецПроцедуры // Проверяет контактную информацию электронной почты и сообщает об ошибках. @@ -2629,7 +3068,7 @@ СтрокаОшибки = ""; АдресЭП = Источник.Состав; - ПространствоИмен = УправлениеКонтактнойИнформациейКлиентСерверПовтИсп.ПространствоИмен(); + ПространствоИмен = УправлениеКонтактнойИнформациейКлиентСервер.ПространствоИмен(); Если АдресЭП <> Неопределено И АдресЭП.Тип() = ФабрикаXDTO.Тип(ПространствоИмен, "ЭлектроннаяПочта") Тогда Попытка Результат = ОбщегоНазначенияКлиентСервер.РазобратьСтрокуСПочтовымиАдресами(АдресЭП.Значение); @@ -2645,7 +3084,7 @@ Если Не ПустаяСтрока(СтрокаОшибки) Тогда ВывестиСообщениеПользователю(СтрокаОшибки, ИмяРеквизита, ПолеРеквизита); - УровеньОшибки = ?(ВидИнформации.ЗапрещатьВводНекорректного, 2, 1); + УровеньОшибки = ?(ВидИнформации.ПроверятьКорректность, 2, 1); Иначе УровеньОшибки = 0; КонецЕсли; @@ -2749,7 +3188,7 @@ Если НЕ УправлениеКонтактнойИнформациейСлужебный.ЭтоРоссийскийАдрес(Источник) Тогда Возврат 0; КонецЕсли; - ПространствоИмен = УправлениеКонтактнойИнформациейКлиентСерверПовтИсп.ПространствоИмен(); + ПространствоИмен = УправлениеКонтактнойИнформациейКлиентСервер.ПространствоИмен(); Если Источник <> Неопределено И Источник.Тип() = ФабрикаXDTO.Тип(ПространствоИмен, "Адрес") Тогда Адрес = Источник; @@ -2765,7 +3204,7 @@ КонецЦикла; КонецЕсли; - Если ЕстьОшибки И ВидИнформации.ЗапрещатьВводНекорректного Тогда + Если ЕстьОшибки И ВидИнформации.ПроверятьКорректность Тогда Возврат 2; ИначеЕсли ЕстьОшибки Тогда Возврат 1; @@ -2810,17 +3249,15 @@ // Наименование, если есть в объекте-приемнике. Наименование = Неопределено; - Если ДанныеЗаполнения.Свойство("Наименование", Наименование) - И ЕстьРеквизитОбъекта("Наименование", Объект) - Тогда - Объект.Наименование = Наименование; + Если ДанныеЗаполнения.Свойство("Наименование", Наименование) + И ОбщегоНазначенияКлиентСервер.ЕстьРеквизитИлиСвойствоОбъекта(Объект, "Наименование") Тогда + Объект.Наименование = Наименование; КонецЕсли; // Таблица контактной информации, заполняется только если КИ не находится в другой ТЧ. КонтактнаяИнформация = Неопределено; Если ДанныеЗаполнения.Свойство("КонтактнаяИнформация", КонтактнаяИнформация) - И ЕстьРеквизитОбъекта("КонтактнаяИнформация", Объект) - Тогда + И ОбщегоНазначенияКлиентСервер.ЕстьРеквизитИлиСвойствоОбъекта(Объект, "КонтактнаяИнформация") Тогда Если ТипЗнч(КонтактнаяИнформация) = Тип("ТаблицаЗначений") Тогда КолонкиТаблицы = КонтактнаяИнформация.Колонки; @@ -2842,25 +3279,4 @@ КонецПроцедуры -// Определяет, есть ли у объекта реквизит с заданным именем. -// -// Параметры: -// ИмяРеквизита - Строка - Имя реквизита, наличие которого проверяется. -// Объект - Произвольный - Проверяемый объект. -// -// Возвращаемое значение: -// Булево - результат проверки. -// -Функция ЕстьРеквизитОбъекта(Знач ИмяРеквизита, Знач Объект) - ПроверкаРеквизита = Новый Структура(ИмяРеквизита, Неопределено); - ЗаполнитьЗначенияСвойств(ПроверкаРеквизита, Объект); - Если ПроверкаРеквизита[ИмяРеквизита] <> Неопределено Тогда - Возврат Истина; - КонецЕсли; - - ПроверкаРеквизита[ИмяРеквизита] = ""; - ЗаполнитьЗначенияСвойств(ПроверкаРеквизита, Объект); - Возврат ПроверкаРеквизита.Наименование = Неопределено; -КонецФункции - -#КонецОбласти \ No newline at end of file +#КонецОбласти diff --git a/SSL/src/CommonModules/УправлениеКонтактнойИнформациейКлиент/Module.bsl b/SSL/src/CommonModules/УправлениеКонтактнойИнформациейКлиент/Module.bsl index 3287bb0a4..f5dac98a6 100644 --- a/SSL/src/CommonModules/УправлениеКонтактнойИнформациейКлиент/Module.bsl +++ b/SSL/src/CommonModules/УправлениеКонтактнойИнформациейКлиент/Module.bsl @@ -157,12 +157,20 @@ Форма.ПоказатьВыборИзМеню(Оповещение, Форма.ПараметрыКонтактнойИнформации.СписокДобавляемыхЭлементов, Форма.Элементы.КонтактнаяИнформацияДобавитьПолеВвода); Возврат Неопределено; - ИначеЕсли Лев(ИмяКоманды, 7) = "Команда" Тогда + ИначеЕсли СтрНачинаетсяС(ИмяКоманды, "Команда") Тогда ИмяРеквизита = СтрЗаменить(ИмяКоманды, "Команда", ""); КомандаКонтекстногоМеню = Ложь; Иначе ИмяРеквизита = СтрЗаменить(ИмяКоманды, "КонтекстноеМеню", ""); + НаправлениеПеремещения = 0; + Если СтрНачинаетсяС(ИмяРеквизита, "Вверх") Тогда + ИмяРеквизита = СтрЗаменить(ИмяРеквизита, "Вверх", ""); + НаправлениеПеремещения = -1; + ИначеЕсли СтрНачинаетсяС(ИмяРеквизита, "Вниз") Тогда + ИмяРеквизита = СтрЗаменить(ИмяРеквизита, "Вниз", ""); + НаправлениеПеремещения = 1; + КонецЕсли; КомандаКонтекстногоМеню = Истина; КонецЕсли; @@ -172,7 +180,23 @@ ТипКонтактнойИнформации = НайденнаяСтрока.Тип; Если КомандаКонтекстногоМеню Тогда - ВвестиКомментарий(Форма, ИмяРеквизита, НайденнаяСтрока, Результат); + Если НаправлениеПеремещения = 0 Тогда + ВвестиКомментарий(Форма, ИмяРеквизита, НайденнаяСтрока, Результат); + Иначе + ПервыйЭлемент = НайденнаяСтрока.ИмяРеквизита; + Индекс =Форма.КонтактнаяИнформацияОписаниеДополнительныхРеквизитов.Индекс(НайденнаяСтрока); + Если НаправлениеПеремещения = 1 Тогда + Если Индекс < Форма.КонтактнаяИнформацияОписаниеДополнительныхРеквизитов.Количество() - 1 Тогда + ВторойЭлемент = Форма.КонтактнаяИнформацияОписаниеДополнительныхРеквизитов.Получить(Индекс + 1).ИмяРеквизита; + КонецЕсли; + Иначе + Если Индекс > 0 Тогда + ВторойЭлемент = Форма.КонтактнаяИнформацияОписаниеДополнительныхРеквизитов.Получить(Индекс - 1).ИмяРеквизита; + КонецЕсли; + КонецЕсли; + Результат = Новый Структура("ПоменятьМестамиЭлементы, ПервыйЭлемент, ВторойЭлемент", Истина, ПервыйЭлемент, ВторойЭлемент); + ОбновитьКонтактнуюИнформациюФормы(Форма, Результат); + КонецЕсли; ИначеЕсли ТипКонтактнойИнформации = ПредопределенноеЗначение("Перечисление.ТипыКонтактнойИнформации.Адрес") Тогда ЗаполнитьАдрес(Форма, ИмяРеквизита, НайденнаяСтрока, Результат); @@ -180,16 +204,134 @@ ИначеЕсли ТипКонтактнойИнформации = ПредопределенноеЗначение("Перечисление.ТипыКонтактнойИнформации.АдресЭлектроннойПочты") Тогда АдресПочты = Форма.Элементы[ИмяРеквизита].ТекстРедактирования; СоздатьЭлектронноеПисьмо("", АдресПочты, ТипКонтактнойИнформации); + ИначеЕсли ТипКонтактнойИнформации = ПредопределенноеЗначение("Перечисление.ТипыКонтактнойИнформации.Телефон") Тогда + + Параметры = Новый Структура("НомерТелефона, ТипКонтактнойИнформации"); + Параметры.НомерТелефона = Форма.Элементы[ИмяРеквизита].ТекстРедактирования; + Параметры.ТипКонтактнойИнформации = ТипКонтактнойИнформации; + + Если ПустаяСтрока(Параметры.НомерТелефона) Тогда + ПоказатьПредупреждение(,НСтр("ru = 'Для совершения звонка или отправки SMS требуется ввести номер телефона.'")); + Возврат Неопределено; + КонецЕсли; + + Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.ОтправкаSMS") Тогда + Список = Новый СписокЗначений; + Список.Добавить("Позвонить", НСтр("ru = 'Позвонить'"),, БиблиотекаКартинок.Позвонить); + Список.Добавить("ОтправитьSMS", НСтр("ru = 'Отправить SMS...'"),, БиблиотекаКартинок.ОтправитьSMS); + ОповещениеМеню = Новый ОписаниеОповещения("ПослеВыбораИзМенюТелефон", ЭтотОбъект, Параметры); + Форма.ПоказатьВыборИзМеню(ОповещениеМеню, Список, Форма.Элементы[ИмяКоманды]); + Иначе + ПозвонитьПоТелефону(Параметры.НомерТелефона); + КонецЕсли; + + ИначеЕсли ТипКонтактнойИнформации = ПредопределенноеЗначение("Перечисление.ТипыКонтактнойИнформации.Skype") Тогда + Параметры = Новый Структура("ЛогинSkype"); + Параметры.ЛогинSkype = Форма.Элементы[ИмяРеквизита].ТекстРедактирования; + Список = Новый СписокЗначений; + Список.Добавить("Позвонить", НСтр("ru = 'Позвонить'")); + Список.Добавить("НачатьЧат", НСтр("ru = 'Начать чат'")); + ОповещениеМеню = Новый ОписаниеОповещения("ПослеВыбораИзМенюSkype", ЭтотОбъект, Параметры); + Форма.ПоказатьВыборИзМеню(ОповещениеМеню, Список, Форма.Элементы[ИмяКоманды]); ИначеЕсли ТипКонтактнойИнформации = ПредопределенноеЗначение("Перечисление.ТипыКонтактнойИнформации.ВебСтраница") Тогда АдресСсылки = Форма.Элементы[ИмяРеквизита].ТекстРедактирования; ПерейтиПоВебСсылке("", АдресСсылки, ТипКонтактнойИнформации); - КонецЕсли; Возврат Неопределено; КонецФункции +Процедура ПослеВыбораИзМенюSkype(ВыбранныйЭлемент, Параметры) Экспорт + + Если ВыбранныйЭлемент = Неопределено Тогда + Возврат; + КонецЕсли; + + #Если НЕ ВебКлиент Тогда + Если ПустаяСтрока(ПрограммаТелефонииУстановлена("skype")) Тогда + ПоказатьПредупреждение(Неопределено, НСтр("ru = 'Для совершения звонка по Skype требуется установить программу.'")); + Возврат; + КонецЕсли; + #КонецЕсли + + СтрокаЗапуска = "skype:" + Параметры.ЛогинSkype; + Если ВыбранныйЭлемент.Значение = "Позвонить" Тогда + СтрокаЗапуска = СтрокаЗапуска + "?call"; + ИначеЕсли ВыбранныйЭлемент.Значение = "НачатьЧат" Тогда + СтрокаЗапуска = СтрокаЗапуска + "?chat"; + Иначе + СтрокаЗапуска = СтрокаЗапуска + "?userinfo"; + КонецЕсли; + + Оповещение = Новый ОписаниеОповещения("ЗапускSkype", ЭтотОбъект, СтрокаЗапуска); + ТекстСообщения = НСтр("ru = 'Для запуска Skype необходимо установить расширение работы с файлами.'"); + ОбщегоНазначенияКлиент.ПоказатьВопросОбУстановкеРасширенияРаботыСФайлами(Оповещение, ТекстСообщения); + +КонецПроцедуры + +Процедура ЗапускSkype(РасширениеПодключено, СтрокаЗапуска) Экспорт + + Если РасширениеПодключено Тогда + Оповещение = Новый ОписаниеОповещения("ПослеЗвонка", ЭтотОбъект); + НачатьЗапускПриложения(Оповещение, СтрокаЗапуска); + КонецЕсли; + +КонецПроцедуры + +Процедура ПослеВыбораИзМенюТелефон(ВыбранныйЭлемент, Параметры) Экспорт + + Если ВыбранныйЭлемент <> Неопределено Тогда + Если ВыбранныйЭлемент.Значение = "ОтправитьSMS" Тогда + СоздатьSMS("", Параметры.НомерТелефона, Параметры.ТипКонтактнойИнформации); + Иначе + ПозвонитьПоТелефону(Параметры.НомерТелефона); + КонецЕсли; + КонецЕсли; +КонецПроцедуры + +Процедура ПозвонитьПоТелефону(НомерТелефона) + + НомерТелефона = СтроковыеФункцииКлиентСервер.ЗаменитьОдниСимволыДругими("()_- ", НомерТелефона, ""); + + // по умолчанию используем "tel" + ИмяПротокола = "tel"; + + #Если НЕ ВебКлиент Тогда + ДоступноеИмяПротокола = ПрограммаТелефонииУстановлена(); + Если ДоступноеИмяПротокола = Неопределено Тогда + СтрокаСПредупреждением = Новый ФорматированнаяСтрока( + НСтр("ru = 'Для совершения звонка требуется установить программу телефонии, например'"), + " ", Новый ФорматированнаяСтрока("Skype",,,, "http://www.skype.com"), "."); + ПоказатьПредупреждение(Неопределено, СтрокаСПредупреждением); + Возврат; + ИначеЕсли НЕ ПустаяСтрока(ДоступноеИмяПротокола) Тогда + ИмяПротокола = ДоступноеИмяПротокола; + КонецЕсли; + #КонецЕсли + + СтрокаЗапуска = ИмяПротокола + ":" + НомерТелефона; + + Оповещение = Новый ОписаниеОповещения("СовершитьЗвонок", ЭтотОбъект, СтрокаЗапуска); + ТекстСообщения = НСтр("ru = 'Для совершения звонка необходимо установить расширение работы с файлами.'"); + ОбщегоНазначенияКлиент.ПоказатьВопросОбУстановкеРасширенияРаботыСФайлами(Оповещение, ТекстСообщения); + +КонецПроцедуры + +Процедура СовершитьЗвонок(РасширениеПодключено, СтрокаЗапуска) Экспорт + + Если РасширениеПодключено Тогда + Оповещение = Новый ОписаниеОповещения("ПослеЗвонка", ЭтотОбъект); + НачатьЗапускПриложения(Оповещение, СтрокаЗапуска); + КонецЕсли; + +КонецПроцедуры + + +Процедура ПослеЗвонка(ВыбранныйЭлемент, Параметры) Экспорт + // Процедура заглушка, т.к. НачатьЗапускПриложения требуется наличие обработчика оповещения. +КонецПроцедуры + // Открытие формы адреса формы контактной информации. // Вызывается из подключаемых действий при внедрении подсистемы "Контактная информация". // @@ -267,12 +409,17 @@ // Значение - Строка - сериализованное значение полей контактной информации. // Представление - Строка - необязательное представление. // -Функция ПараметрыФормыКонтактнойИнформации(ВидКонтактнойИнформации, Значение, Представление = Неопределено, - Комментарий = Неопределено) Экспорт +Функция ПараметрыФормыКонтактнойИнформации(ВидКонтактнойИнформации, Значение, + Представление = Неопределено, Комментарий = Неопределено) Экспорт + + ПараметрыФормы = Новый Структура; + ПараметрыФормы.Вставить("ВидКонтактнойИнформации", ВидКонтактнойИнформации); + ПараметрыФормы.Вставить("ЗначенияПолей", Значение); + ПараметрыФормы.Вставить("Представление", Представление); + ПараметрыФормы.Вставить("Комментарий", Комментарий); + + Возврат ПараметрыФормы; - Возврат Новый Структура("ВидКонтактнойИнформации, ЗначенияПолей, Представление, Комментарий", - ВидКонтактнойИнформации, Значение, Представление, Комментарий); - КонецФункции // Открывает подходящую форму контактной информации для редактирования или просмотра. @@ -285,57 +432,10 @@ // Возвращаемое значение: необходимая форма. // Функция ОткрытьФормуКонтактнойИнформации(Параметры, Владелец = Неопределено, Оповещение = Неопределено) Экспорт - - ВидИнформации = Параметры.ВидКонтактнойИнформации; - - ИмяОткрываемойФормы = УправлениеКонтактнойИнформациейКлиентСерверПовтИсп.ИмяФормыВводаКонтактнойИнформации(ВидИнформации); - Если ИмяОткрываемойФормы = Неопределено Тогда - ВызватьИсключение НСтр("ru = 'Не обрабатываемый тип адреса: """ + ВидИнформации + """'"); - КонецЕсли; - - Если Не Параметры.Свойство("Заголовок") Тогда - Параметры.Вставить("Заголовок", Строка(УправлениеКонтактнойИнформациейСлужебныйВызовСервера.ТипВидаКонтактнойИнформации(ВидИнформации))); - КонецЕсли; - Параметры.Вставить("ОткрытаПоСценарию", Истина); - - Возврат ОткрытьФорму(ИмяОткрываемойФормы, Параметры, Владелец,,,, Оповещение); + Возврат ОткрытьФорму("Обработка.ВводКонтактнойИнформации.Форма", Параметры, Владелец,,,, Оповещение); КонецФункции -// ИспользованиеМодальности - -// Устарела. Следует использовать ОткрытьФормуКонтактнойИнформации -// -// Модально открывает подходящую форму контактной информации для редактирования или просмотра -// -// Параметры: -// Параметры - Произвольный - результат функции ПараметрыФормыКонтактнойИнформации -// Владелец - Произвольный - параметр для открываемой формы -// Уникальность - Произвольный - параметр для открываемой формы -// Окно - Произвольный - параметр для открываемой формы -// -// Возвращаемое значение: отредактированный результат или Неопределено при отказе от редактирования -// -Функция ОткрытьФормуКонтактнойИнформацииМодально(Параметры, Владелец = Неопределено, Уникальность = Неопределено, Окно = Неопределено) Экспорт - - ВидИнформации = Параметры.ВидКонтактнойИнформации; - - ИмяОткрываемойФормы = УправлениеКонтактнойИнформациейКлиентСерверПовтИсп.ИмяФормыВводаКонтактнойИнформации(ВидИнформации); - Если ИмяОткрываемойФормы = Неопределено Тогда - ВызватьИсключение НСтр("ru = 'Не обрабатываемый тип адреса: """ + ВидИнформации + """'"); - КонецЕсли; - - Если Не Параметры.Свойство("Заголовок") Тогда - Параметры.Вставить("Заголовок", Строка(УправлениеКонтактнойИнформациейСлужебныйВызовСервера.ТипВидаКонтактнойИнформации(ВидИнформации))); - КонецЕсли; - - Параметры.Вставить("ОткрытаПоСценарию", Истина); - Возврат ОткрытьФормуМодально(ИмяОткрываемойФормы, Параметры, Владелец); - -КонецФункции - -// Конец ИспользованиеМодальности - // Создает письмо по контактной информации. // // Параметры: @@ -352,8 +452,7 @@ ТипИнформации = КонтактнаяИнформация.ТипКонтактнойИнформации; Если ТипИнформации <> ПредопределенноеЗначение("Перечисление.ТипыКонтактнойИнформации.АдресЭлектроннойПочты") Тогда - ВызватьИсключение СтрЗаменить(НСтр("ru = 'Нельзя создать письмо по контактной информацию с типом ""%1""'"), - "%1", ТипИнформации); + ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Нельзя создать письмо по контактной информацию с типом ""%1""'"), ТипИнформации); КонецЕсли; Если ЗначенияПолей = "" И ПустаяСтрока(Представление) Тогда @@ -382,6 +481,52 @@ КонецПроцедуры +// Создает письмо по контактной информации. +// +// Параметры: +// ЗначенияПолей - Строка, Структура, Соответствие, Список значений - контактная информация. +// Представление - Строка - представление. Используется, если невозможно определить представление из параметра. +// ЗначенияПолей (отсутствие поля "Представление"). +// ОжидаемыйВид - СправочникСсылка.ВидыКонтактнойИнформации, ПеречислениеСсылка.ТипыКонтактнойИнформации, Структура +// Используется для определения типа, если его невозможно вычислить по полю ЗначенияПолей. +// +Процедура СоздатьSMS(Знач ЗначенияПолей, Знач Представление = "", ОжидаемыйВид = Неопределено) Экспорт + + Если Не ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.ОтправкаSMS") Тогда + ВызватьИсключение НСтр("ru = 'Отправка SMS недоступна.'"); + КонецЕсли; + + КонтактнаяИнформация = УправлениеКонтактнойИнформациейСлужебныйВызовСервера.ПривестиКонтактнуюИнформациюXML( + Новый Структура("ЗначенияПолей, Представление, ВидКонтактнойИнформации", ЗначенияПолей, Представление, ОжидаемыйВид)); + + ТипИнформации = КонтактнаяИнформация.ТипКонтактнойИнформации; + Если ТипИнформации <> ПредопределенноеЗначение("Перечисление.ТипыКонтактнойИнформации.Телефон") Тогда + ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Нельзя отправитьSMS по контактной информацию с типом ""%1""'"), ТипИнформации); + КонецЕсли; + + Если ЗначенияПолей = "" И ПустаяСтрока(Представление) Тогда + ПоказатьПредупреждение(,НСтр("ru = 'Для отправки SMS необходимо ввести номер телефона.'")); + Возврат; + КонецЕсли; + + XMLДанные = КонтактнаяИнформация.ДанныеXML; + Если ЗначениеЗаполнено(XMLДанные) Тогда + НомерПолучателя = УправлениеКонтактнойИнформациейСлужебныйВызовСервера.СтрокаСоставаКонтактнойИнформации(XMLДанные); + КонецЕсли; + Если НЕ ЗначениеЗаполнено(НомерПолучателя) Тогда + НомерПолучателя = СокрЛП(Представление); + КонецЕсли; + НомераПолучателей = Новый Массив; + НомераПолучателей.Добавить(НомерПолучателя); + + ДополнительныеПараметры = Новый Структура(); + ДополнительныеПараметры.Вставить("ИмяОтправителя", Неопределено); + ДополнительныеПараметры.Вставить("ПеревестиВТранслит", Ложь); + МодульОтправкаSMSКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("ОтправкаSMSКлиент"); + МодульОтправкаSMSКлиент.ОтправитьSMS(НомераПолучателей, "", ДополнительныеПараметры); + +КонецПроцедуры + // Открывает ссылку по контактной информации. // // Параметры: @@ -398,8 +543,7 @@ ТипИнформации = КонтактнаяИнформация.ТипКонтактнойИнформации; Если ТипИнформации <> ПредопределенноеЗначение("Перечисление.ТипыКонтактнойИнформации.ВебСтраница") Тогда - ВызватьИсключение СтрЗаменить(НСтр("ru = 'Нельзя открыть ссылку по контактной информации с типом ""%1""'"), - "%1", ТипИнформации); + ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Нельзя открыть ссылку по контактной информации с типом ""%1""'"), ТипИнформации); КонецЕсли; XMLДанные = КонтактнаяИнформация.ДанныеXML; @@ -409,7 +553,7 @@ ВызватьИсключение НСтр("ru = 'Ошибка получения ссылки, неверный тип контактной информации'"); КонецЕсли; - Если Найти(АдресСсылки, "://") > 0 Тогда + Если СтрНайти(АдресСсылки, "://") > 0 Тогда ПерейтиПоНавигационнойСсылке(АдресСсылки); Иначе ПерейтиПоНавигационнойСсылке("http://" + АдресСсылки); @@ -571,6 +715,20 @@ КонецПроцедуры +// Страны ЕАЭС поддерживающие структурированный ввод +// +// Возвращаемое значение: +// Соответствие - Список стран +// +Функция СтраныПоддерживающиеСтруктурированныйВвод() Экспорт + СписокСтран = Новый Соответствие; + СписокСтран.Вставить("БЕЛАРУСЬ", Истина); + СписокСтран.Вставить("КАЗАХСТАН", Истина); + СписокСтран.Вставить("АРМЕНИЯ", Истина); + СписокСтран.Вставить("КИРГИЗИЯ", Истина); + Возврат СписокСтран; +КонецФункции + //////////////////////////////////////////////////////////////////////////////////////////////////// // Завершение модального диалога создания письма. @@ -706,8 +864,12 @@ ЗначенияПолейДляАнализа = Новый Массив; Для Каждого Адрес Из НайденныеСтроки Цикл - ЗначенияПолейДляАнализа.Добавить(Новый Структура("Идентификатор, Представление, ЗначениеПолей, ВидАдреса", - Адрес.ПолучитьИдентификатор(), Адрес.Представление, Адрес.ЗначенияПолей, Адрес.Вид)); + СтруктураАдреса = Новый Структура; + СтруктураАдреса.Вставить("Идентификатор", Адрес.ПолучитьИдентификатор()); + СтруктураАдреса.Вставить("Представление", Адрес.Представление); + СтруктураАдреса.Вставить("ЗначениеПолей", Адрес.ЗначенияПолей); + СтруктураАдреса.Вставить("ВидАдреса", Адрес.Вид); + ЗначенияПолейДляАнализа.Добавить(СтруктураАдреса); КонецЦикла; АдресаДляЗаполнения = УправлениеКонтактнойИнформациейСлужебныйВызовСервера.ДоступныеДляКопированияАдреса(ЗначенияПолейДляАнализа, НайденнаяСтрока.Вид); @@ -833,4 +995,49 @@ // Действие не требуется КонецПроцедуры +// Проверяет, установлена ли программа телефонии на компьютер. +// Проверка возможна только в тонком клиенте для Windows. +// +// Параметры: +// ИмяПротокола - Строка - Имя проверяемого URI протокола, возможные варианты "skype", "tel", "sip". +// Если параметр не указан, то проверяются все протоколы. +// +// Возвращаемое значение: +// Строка - имя доступного URI протокола зарегистрирована в реестре. Пустая строка - если протокол не доступен. +// Неопределенно если проверка не возможна. +// +Функция ПрограммаТелефонииУстановлена(ИмяПротокола = Неопределено) + + Если НЕ ОбщегоНазначенияКлиентСервер.ЭтоLinuxКлиент() Тогда + Если ЗначениеЗаполнено(ИмяПротокола) Тогда + Возврат ?(ИмяПротоколаЗарегистрированоВРеестре(ИмяПротокола), ИмяПротокола, ""); + Иначе + СписокПротоколов = Новый Массив; + СписокПротоколов.Добавить("tel"); + СписокПротоколов.Добавить("sip"); + СписокПротоколов.Добавить("skype"); + Для каждого ИмяПротокола Из СписокПротоколов Цикл + Если ИмяПротоколаЗарегистрированоВРеестре(ИмяПротокола) Тогда + Возврат ИмяПротокола; + КонецЕсли; + КонецЦикла; + Возврат Неопределено; + КонецЕсли; + КонецЕсли; + + Возврат ""; +КонецФункции + +Функция ИмяПротоколаЗарегистрированоВРеестре(ИмяПротокола) + + Попытка + Оболочка = Новый COMОбъект("Wscript.Shell"); + Результат = Оболочка.RegRead("HKEY_CLASSES_ROOT\" + ИмяПротокола + "\"); + Исключение + Возврат Ложь; + КонецПопытки; + Возврат Истина; +КонецФункции + + #КонецОбласти diff --git a/SSL/src/CommonModules/УправлениеКонтактнойИнформациейКлиентСервер/Module.bsl b/SSL/src/CommonModules/УправлениеКонтактнойИнформациейКлиентСервер/Module.bsl index bedb31c4e..7f3998711 100644 --- a/SSL/src/CommonModules/УправлениеКонтактнойИнформациейКлиентСервер/Module.bsl +++ b/SSL/src/CommonModules/УправлениеКонтактнойИнформациейКлиентСервер/Module.bsl @@ -8,12 +8,13 @@ // Функция формирует представление с видом для формы ввода адреса. // // Параметры: -// СтруктураАдреса - Структура - структура адреса. -// Представление - Строка - представление адреса. -// НаименованиеВида - Строка - наименование вида. +// СтруктураАдреса - Структура - Адрес в виде структуры. Описание структур см. в функциях +// СведенияОбАдресе и ПредыдущаяСтруктураКонтактнойИнформацииXML +// Представление - Строка - Представление адреса. +// НаименованиеВида - Строка - Наименование вида. // // Возвращаемое значение: -// Строка - представление адреса с видом. +// Строка - Представление адреса с видом. // Функция СформироватьПредставлениеАдреса(СтруктураАдреса, Представление, НаименованиеВида = Неопределено) Экспорт @@ -25,15 +26,36 @@ ДополнитьПредставлениеАдреса(СокрЛП(ЗначениеПоКлючуСтруктуры("НаименованиеСтраны", СтруктураАдреса)), ", ", Представление); КонецЕсли; - ДополнитьПредставлениеАдреса(СокрЛП(ЗначениеПоКлючуСтруктуры("Индекс", СтруктураАдреса)), ", ", Представление); - ДополнитьПредставлениеАдреса(СокрЛП(ЗначениеПоКлючуСтруктуры("Регион", СтруктураАдреса)), ", ", Представление); - ДополнитьПредставлениеАдреса(СокрЛП(ЗначениеПоКлючуСтруктуры("Район", СтруктураАдреса)), ", ", Представление); - ДополнитьПредставлениеАдреса(СокрЛП(ЗначениеПоКлючуСтруктуры("Город", СтруктураАдреса)), ", ", Представление); - ДополнитьПредставлениеАдреса(СокрЛП(ЗначениеПоКлючуСтруктуры("НаселенныйПункт", СтруктураАдреса)), ", ", Представление); - ДополнитьПредставлениеАдреса(СокрЛП(ЗначениеПоКлючуСтруктуры("Улица", СтруктураАдреса)), ", ", Представление); - ДополнитьПредставлениеАдреса(СокрЛП(ЗначениеПоКлючуСтруктуры("Дом", СтруктураАдреса)), ", " + ЗначениеПоКлючуСтруктуры("ТипДома", СтруктураАдреса) + " № ", Представление); - ДополнитьПредставлениеАдреса(СокрЛП(ЗначениеПоКлючуСтруктуры("Корпус", СтруктураАдреса)), ", " + ЗначениеПоКлючуСтруктуры("ТипКорпуса", СтруктураАдреса)+ " ", Представление); - ДополнитьПредставлениеАдреса(СокрЛП(ЗначениеПоКлючуСтруктуры("Квартира", СтруктураАдреса)), ", " + ЗначениеПоКлючуСтруктуры("ТипКвартиры", СтруктураАдреса) + " ", Представление); + ДополнитьПредставлениеАдреса(СокрЛП(ЗначениеПоКлючуСтруктуры("Индекс", СтруктураАдреса)), ", ", Представление); + ДополнитьПредставлениеАдреса(СокрЛП(ЗначениеПоКлючуСтруктуры("Регион", СтруктураАдреса)), ", ", Представление); + ДополнитьПредставлениеАдреса(СокрЛП(ЗначениеПоКлючуСтруктуры("Район", СтруктураАдреса)), ", ", Представление); + ДополнитьПредставлениеАдреса(СокрЛП(ЗначениеПоКлючуСтруктуры("Город", СтруктураАдреса)), ", ", Представление); + ДополнитьПредставлениеАдреса(СокрЛП(ЗначениеПоКлючуСтруктуры("НаселенныйПункт", СтруктураАдреса)), ", ", Представление); + ДополнитьПредставлениеАдреса(СокрЛП(ЗначениеПоКлючуСтруктуры("Улица", СтруктураАдреса)), ", ", Представление); + ДополнитьПредставлениеАдреса(СокрЛП(ЗначениеПоКлючуСтруктуры("ДополнительнаяТерритория", СтруктураАдреса)), ", ", Представление); + ДополнитьПредставлениеАдреса(СокрЛП(ЗначениеПоКлючуСтруктуры("ЭлементДополнительнойТерритории", СтруктураАдреса)), ", ", Представление); + + Если СтруктураАдреса.Свойство("Здание") Тогда + ДополнитьПредставлениеАдреса(СокрЛП(ЗначениеПоКлючуСтруктуры("Номер", СтруктураАдреса.Здание)), ", " + ЗначениеПоКлючуСтруктуры("ТипЗдания", СтруктураАдреса) + " № ", Представление); + Иначе + ДополнитьПредставлениеАдреса(СокрЛП(ЗначениеПоКлючуСтруктуры("Дом", СтруктураАдреса)), ", " + ЗначениеПоКлючуСтруктуры("ТипДома", СтруктураАдреса) + " № ", Представление); + КонецЕсли; + + Если СтруктураАдреса.Свойство("Корпуса") Тогда + Для каждого Корпус Из СтруктураАдреса.Корпуса Цикл + ДополнитьПредставлениеАдреса(СокрЛП(ЗначениеПоКлючуСтруктуры("Номер", Корпус )), ", " + ЗначениеПоКлючуСтруктуры("ТипКорпуса", Корпус)+ " ", Представление); + КонецЦикла; + Иначе + ДополнитьПредставлениеАдреса(СокрЛП(ЗначениеПоКлючуСтруктуры("Корпус", СтруктураАдреса)), ", " + ЗначениеПоКлючуСтруктуры("ТипКорпуса", СтруктураАдреса)+ " ", Представление); + КонецЕсли; + + Если СтруктураАдреса.Свойство("Помещения") Тогда + Для каждого Помещение Из СтруктураАдреса.Помещения Цикл + ДополнитьПредставлениеАдреса(СокрЛП(ЗначениеПоКлючуСтруктуры("Номер", Помещение)), ", " + ЗначениеПоКлючуСтруктуры("ТипПомещения", Помещение)+ " ", Представление); + КонецЦикла; + Иначе + ДополнитьПредставлениеАдреса(СокрЛП(ЗначениеПоКлючуСтруктуры("Квартира", СтруктураАдреса)), ", " + ЗначениеПоКлючуСтруктуры("ТипКвартиры", СтруктураАдреса) + " ", Представление); + КонецЕсли; Если СтрДлина(Представление) > 2 Тогда Представление = Сред(Представление, 3); @@ -60,7 +82,7 @@ Функция СформироватьПредставлениеТелефона(КодСтраны, КодГорода, НомерТелефона, Добавочный, Комментарий) Экспорт Представление = СокрЛП(КодСтраны); - Если Не ПустаяСтрока(Представление) И Лев(Представление,1) <> "+" Тогда + Если Не ПустаяСтрока(Представление) И Не СтрНачинаетсяС(Представление, "+") Тогда Представление = "+" + Представление; КонецЕсли; @@ -114,14 +136,264 @@ // Функция ЭтоКонтактнаяИнформацияВXML(Знач Текст) Экспорт - Возврат ТипЗнч(Текст) = Тип("Строка") И Лев(СокрЛ(Текст),1) = "<"; + Возврат ТипЗнч(Текст) = Тип("Строка") И СтрНачинаетсяС(СокрЛ(Текст), "<"); КонецФункции #КонецОбласти +#Область СлужебныйПрограммныйИнтерфейс + +// Функция - Представление адреса +// +// Параметры: +// СтруктураАдреса - Структура - Структура адреса +// +// Возвращаемое значение: +// Строка - представление адреса +// +Функция ПредставлениеАдреса(СтруктураАдреса) Экспорт + + Представление = ""; + Страна = ЗначениеПоКлючуСтруктуры("Страна", СтруктураАдреса); + + Если Страна <> Неопределено Тогда + ДополнитьПредставлениеАдреса(СокрЛП(ЗначениеПоКлючуСтруктуры("НаименованиеСтраны", СтруктураАдреса)), ", ", Представление); + КонецЕсли; + + ДополнитьПредставлениеАдреса(СокрЛП(ЗначениеПоКлючуСтруктуры("Индекс", СтруктураАдреса)), ", ", Представление); + ДополнитьПредставлениеАдреса(СокрЛП(ЗначениеПоКлючуСтруктуры("РегионСокращение", СтруктураАдреса)), ", " + ЗначениеПоКлючуСтруктуры("Регион", СтруктураАдреса) + " ", Представление); + ДополнитьПредставлениеАдреса(СокрЛП(ЗначениеПоКлючуСтруктуры("РайонСокращение", СтруктураАдреса)), ", " + ЗначениеПоКлючуСтруктуры("Район", СтруктураАдреса) + " ", Представление); + ДополнитьПредставлениеАдреса(СокрЛП(ЗначениеПоКлючуСтруктуры("ГородСокращение", СтруктураАдреса)), ", " + ЗначениеПоКлючуСтруктуры("Город", СтруктураАдреса) + " ", Представление); + ДополнитьПредставлениеАдреса(СокрЛП(ЗначениеПоКлючуСтруктуры("НаселенныйПунктСокращение", СтруктураАдреса)), ", " + ЗначениеПоКлючуСтруктуры("НаселенныйПункт", СтруктураАдреса) + " ", Представление); + ДополнитьПредставлениеАдреса(СокрЛП(ЗначениеПоКлючуСтруктуры("УлицаСокращение", СтруктураАдреса)), ", " + ЗначениеПоКлючуСтруктуры("Улица", СтруктураАдреса) + " ", Представление); + ДополнитьПредставлениеАдреса(СокрЛП(ЗначениеПоКлючуСтруктуры("Дом", СтруктураАдреса)), ", " + ЗначениеПоКлючуСтруктуры("ТипДома", СтруктураАдреса) + " № ", Представление); + ДополнитьПредставлениеАдреса(СокрЛП(ЗначениеПоКлючуСтруктуры("Корпус", СтруктураАдреса)), ", " + ЗначениеПоКлючуСтруктуры("ТипКорпуса", СтруктураАдреса)+ " ", Представление); + ДополнитьПредставлениеАдреса(СокрЛП(ЗначениеПоКлючуСтруктуры("Квартира", СтруктураАдреса)), ", " + ЗначениеПоКлючуСтруктуры("ТипКвартиры", СтруктураАдреса) + " ", Представление); + + Если СтрДлина(Представление) > 2 Тогда + Представление = Сред(Представление, 3); + КонецЕсли; + Возврат Представление; + +КонецФункции + +// Возвращает XPath для района. +// +// Возвращаемое значение: +// Строка - XPath +// +Функция XPathРайона() Экспорт + + Возврат "СвРайМО/Район"; + +КонецФункции + +#КонецОбласти + + #Область СлужебныеПроцедурыИФункции +// Возвращает код дополнительной части адреса для сериализации. +// +// Параметры: +// СтрокаЗначения - Строка - значение для поиска, например "Дом", "Корпус", "Литера". +// +// Возвращаемое значение: +// Число - код +// +Функция КодСериализацииОбъектаАдресации(СтрокаЗначения) Экспорт + + Ключ = ВРег(СокрЛП(СтрокаЗначения)); + Для Каждого Элемент Из ТипыОбъектовАдресацииАдресаРФ() Цикл + Если Элемент.Ключ = Ключ Тогда + Возврат Элемент.Код; + КонецЕсли; + КонецЦикла; + + Возврат Неопределено; +КонецФункции + +// Возвращает код дополнительной части адреса для почтового индекса. +// +// Возвращаемое значение: +// Строка - код +// +Функция КодСериализацииПочтовогоИндекса() Экспорт + + Возврат КодСериализацииОбъектаАдресации(НСтр("ru = 'Почтовый индекс'")); + +КонецФункции + +// Возвращает XPath для почтового индекса. +// +// Возвращаемое значение: +// Строка - XPath +// +Функция XPathПочтовогоИндекса() Экспорт + + Возврат "ДопАдрЭл[ТипАдрЭл='" + КодСериализацииПочтовогоИндекса() + "']"; + +КонецФункции + +Функция КодСериализацииДополнительногоОбъектаАдресации(Уровень, ТипаАдресногоЭлемента = "") Экспорт + + Если Уровень = 90 Тогда + Если ВРег(ТипаАдресногоЭлемента) = "ГСК" Тогда + Возврат "10600000"; + ИначеЕсли ВРег(ТипаАдресногоЭлемента) = "СНТ" Тогда + Возврат "10300000"; + ИначеЕсли ВРег(ТипаАдресногоЭлемента) = "ТЕР" Тогда + Возврат "10700000"; + Иначе + Возврат "10200000"; + КонецЕсли; + ИначеЕсли Уровень = 91 Тогда + Возврат "10400000"; + КонецЕсли; + + // Все остальное - считаем ориентиром. + Возврат "Местоположение"; +КонецФункции + +// Возвращает XPath для дополнительного объекта адресации по умолчанию. +// +// Параметры; +// Уровень - Число - уровень объекта. 90 - дополнительный(Варианты: ГСК, СНТ, ТЕР), 91 - подчиненный, -1 - +// Ориентир. +// +// Возвращаемое значение: +// Строка - XPath +// +Функция XPathДополнительногоОбъектаАдресации(Уровень, ТипаАдресногоЭлемента = "") Экспорт + КодСериализации = КодСериализацииДополнительногоОбъектаАдресации(Уровень, ТипаАдресногоЭлемента); + Возврат "ДопАдрЭл[ТипАдрЭл='" + КодСериализации + "']"; +КонецФункции + +// Возвращает XPath для номера дополнительного объекта адресации. +// +// Параметры; +// СтрокаЗначения - Строка - искомый тип, например "Дом", "Корпус". +// +// Возвращаемое значение: +// Строка - XPath +// +Функция XPathНомераДополнительногоОбъектаАдресации(СтрокаЗначения) Экспорт + + Код = КодСериализацииОбъектаАдресации(СтрокаЗначения); + Если Код = Неопределено Тогда + Код = СтрЗаменить(СтрокаЗначения, "'", ""); + КонецЕсли; + + Возврат "ДопАдрЭл/Номер[Тип='" + Код + "']"; +КонецФункции + +// Возвращает строку с описанием типа по коду части адреса. +// Противоположность функции "КодСериализацииОбъектаАдресации". +// +// Параметры: +// Код - Строка - код +// +// Возвращаемое значение: +// Число - Тип +// +Функция ТипОбъектаПоКодуСериализации(Код) Экспорт + Для Каждого Элемент Из ТипыОбъектовАдресацииАдресаРФ() Цикл + Если Элемент.Код = Код Тогда + Возврат Элемент; + КонецЕсли; + КонецЦикла; + + Возврат Неопределено; +КонецФункции + +// Возвращает массив вариантов наименований по типу (по признаку владения, строения, и т.п). +// +// Параметры: +// Тип - Число - запрашиваемый тип. +// ДопускатьПовторыКода - Булево - Истина - будут возвращены все варианты с повторами ("квартира" - "кв." и т.п.). +// +// Возвращаемое значение: +// Массив - содержит структуры - описания. +// +Функция НаименованияОбъектовАдресацииПоТипу(Тип, ДопускатьПовторыКода = Истина) Экспорт + Результат = Новый Массив; + Повторы = Новый Соответствие; + + Для Каждого Элемент Из ТипыОбъектовАдресацииАдресаРФ() Цикл + Если Элемент.Тип = Тип Тогда + Если ДопускатьПовторыКода Тогда + Результат.Добавить(Элемент.Наименование); + Иначе + Если Повторы.Получить(Элемент.Код) = Неопределено Тогда + Результат.Добавить(Элемент.Наименование); + КонецЕсли; + Повторы.Вставить(Элемент.Код, Истина); + КонецЕсли; + КонецЕсли; + КонецЦикла; + + Возврат Результат; +КонецФункции + +// Возвращает массив структур с информацией о частях адреса согласно приказу ФНС ММВ-7-1/525 от 31.08.2011. +// +// Возвращаемое значение: +// Массив - содержит структуры - описания. +// +Функция ТипыОбъектовАдресацииАдресаРФ() Экспорт + + Результат = Новый Массив; + + // Код, Наименование, Тип, Порядок, КодФИАС + // Тип: 1 - владение, 2 - здание, 3 - помещение. + + Результат.Добавить(СтрокаОбъектаАдресации("1010", НСтр("ru = 'Дом'"), 1, 1, 2)); + Результат.Добавить(СтрокаОбъектаАдресации("1020", НСтр("ru = 'Владение'"), 1, 2, 1)); + Результат.Добавить(СтрокаОбъектаАдресации("1030", НСтр("ru = 'Домовладение'"), 1, 3, 3)); + + Результат.Добавить(СтрокаОбъектаАдресации("1050", НСтр("ru = 'Корпус'"), 2, 1)); + Результат.Добавить(СтрокаОбъектаАдресации("1060", НСтр("ru = 'Строение'"), 2, 2, 1)); + Результат.Добавить(СтрокаОбъектаАдресации("1080", НСтр("ru = 'Литера'"), 2, 3, 3)); + Результат.Добавить(СтрокаОбъектаАдресации("1070", НСтр("ru = 'Сооружение'"), 2, 4, 2)); + Результат.Добавить(СтрокаОбъектаАдресации("1040", НСтр("ru = 'Участок'"), 2, 5)); + + Результат.Добавить(СтрокаОбъектаАдресации("2010", НСтр("ru = 'Квартира'"), 3, 1)); + Результат.Добавить(СтрокаОбъектаАдресации("2030", НСтр("ru = 'Офис'"), 3, 2)); + Результат.Добавить(СтрокаОбъектаАдресации("2040", НСтр("ru = 'Бокс'"), 3, 3)); + Результат.Добавить(СтрокаОбъектаАдресации("2020", НСтр("ru = 'Помещение'"), 3, 4)); + Результат.Добавить(СтрокаОбъектаАдресации("2050", НСтр("ru = 'Комната'"), 3, 5)); + // Наши сокращения для поддержки обратной совместимости при парсинге. + Результат.Добавить(СтрокаОбъектаАдресации("2010", НСтр("ru = 'кв.'"), 3, 6)); + Результат.Добавить(СтрокаОбъектаАдресации("2030", НСтр("ru = 'оф.'"), 3, 7)); + + // Уточняющие объекты + Результат.Добавить(СтрокаОбъектаАдресации("10100000", НСтр("ru = 'Почтовый индекс'"))); + Результат.Добавить(СтрокаОбъектаАдресации("10200000", НСтр("ru = 'Адресная точка'"))); + Результат.Добавить(СтрокаОбъектаАдресации("10300000", НСтр("ru = 'Садовое товарищество'"))); + Результат.Добавить(СтрокаОбъектаАдресации("10400000", НСтр("ru = 'Элемент улично-дорожной сети, планировочной структуры дополнительного адресного элемента'"))); + Результат.Добавить(СтрокаОбъектаАдресации("10500000", НСтр("ru = 'Промышленная зона'"))); + Результат.Добавить(СтрокаОбъектаАдресации("10600000", НСтр("ru = 'Гаражно-строительный кооператив'"))); + Результат.Добавить(СтрокаОбъектаАдресации("10700000", НСтр("ru = 'Территория'"))); + + Возврат Результат; +КонецФункции + +Функция СтрокаОбъектаАдресации(Код, Наименование, Тип = 0, Порядок = 0, КодФИАС = 0) + + СтруктураОбъектаАдресации = Новый Структура; + СтруктураОбъектаАдресации.Вставить("Код", Код); + СтруктураОбъектаАдресации.Вставить("Наименование", Наименование); + СтруктураОбъектаАдресации.Вставить("Тип", Тип); + СтруктураОбъектаАдресации.Вставить("Порядок", Порядок); + СтруктураОбъектаАдресации.Вставить("КодФИАС", КодФИАС); + СтруктураОбъектаАдресации.Вставить("Сокращение", НРег(Наименование)); + СтруктураОбъектаАдресации.Вставить("Ключ", ВРег(Наименование)); + Возврат СтруктураОбъектаАдресации; + +КонецФункции + + // Функция формирует полное наименование из массив адреса. // // Параметры: @@ -142,6 +414,14 @@ Возврат ПолноеНаименование; КонецФункции +// Возвращает пространство имен для оперирования с XDTO контактной информации. +// +// Возвращаемое значение: +// Строка - пространство имен. +// +Функция ПространствоИмен() Экспорт + Возврат "http://www.v8.1c.ru/ssl/contactinfo"; +КонецФункции #Область СлужебныеПроцедурыИФункцииПоРаботеСXMLАдресами @@ -201,7 +481,7 @@ Для Позиция = 1 По СтрДлина(Текст) Цикл ТекущийСимвол = Сред(Текст, Позиция, 1); - ЭтоРазделитель = ?(Разделители = Неопределено, ПустаяСтрока(ТекущийСимвол), Найти(Разделители, ТекущийСимвол) > 0); + ЭтоРазделитель = ?(Разделители = Неопределено, ПустаяСтрока(ТекущийСимвол), СтрНайти(Разделители, ТекущийСимвол) > 0); Если Состояние = 0 И (Не ЭтоРазделитель) Тогда НачалоСлова = Позиция; @@ -282,7 +562,7 @@ // Возвращает структуру, описывающую населенный пункт в иерархии младший-старший. // // Параметры: -// ВариантКлассификатора Строка - Требуемый вид классификатора. +// ВариантКлассификатора Строка - Требуемый вид классификатора ФИАС, КЛАДР // // Возвращаемое значение: // Структура - описание населенного пункта. @@ -302,12 +582,15 @@ КонецЕсли; Результат.Вставить("НаселенныйПункт", ЭлементАдреснойСтруктуры(НСтр("ru = 'Нас.пункт'"), НСтр("ru = 'Населенный пункт адреса'"), "НаселПункт", 6, Истина)); - Результат.Вставить("Улица", ЭлементАдреснойСтруктуры(НСтр("ru = 'Улица'"), - НСтр("ru = 'Улица адреса'"), "Улица", 7)); - Результат.Вставить("ДополнительныйЭлемент", ЭлементАдреснойСтруктуры(НСтр("ru = 'ДополнительныйЭлемент'"), - НСтр("ru = 'Дополнительный элемент адреса'"), "ДопАдрЭл[ТипАдрЭл='10200000']", 90)); - Результат.Вставить("ПодчиненныйЭлемент", ЭлементАдреснойСтруктуры(НСтр("ru = 'Подчиненный элемент'"), - НСтр("ru = 'Подчиненный элемент адреса'"), "ДопАдрЭл[ТипАдрЭл='10400000']", 91)); + + Если ВариантКлассификатора <> "БезКлассификатора" Тогда + Результат.Вставить("Улица", ЭлементАдреснойСтруктуры(НСтр("ru = 'Улица'"), + НСтр("ru = 'Улица адреса'"), "Улица", 7)); + Результат.Вставить("ДополнительныйЭлемент", ЭлементАдреснойСтруктуры(НСтр("ru = 'ДополнительныйЭлемент'"), + НСтр("ru = 'Дополнительный элемент адреса'"), "ДопАдрЭл[ТипАдрЭл='10200000']", 90)); + Результат.Вставить("ПодчиненныйЭлемент", ЭлементАдреснойСтруктуры(НСтр("ru = 'Подчиненный элемент'"), + НСтр("ru = 'Подчиненный элемент адреса'"), "ДопАдрЭл[ТипАдрЭл='10400000']", 91)); + КонецЕсли; Возврат Результат; @@ -617,7 +900,7 @@ Функция АдресноеСокращение(Знач ГеографическоеНазвание) Экспорт Сокращение = ""; - МассивСлов = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивСлов(ГеографическоеНазвание, " "); + МассивСлов = СтрРазделить(ГеографическоеНазвание, " ", Ложь); Если МассивСлов.Количество() > 1 Тогда Сокращение = МассивСлов[МассивСлов.Количество() - 1]; КонецЕсли; @@ -637,9 +920,33 @@ // Функция ПреобразоватьСписокПолейВСтроку(СоответствиеПолей, БезПустыхПолей = Истина) Экспорт + КвартираДобавлена = Ложь; + КорпусДобавлен = Ложь; + ПредыдущиеЗначение = Неопределено; + СтруктураЗначенийПолей = Новый Структура; Для Каждого Элемент Из СоответствиеПолей Цикл - СтруктураЗначенийПолей.Вставить(Элемент.Представление, Элемент.Значение); + + Если Элемент.Представление = "Корпус" ИЛИ Элемент.Представление = "ТипКорпуса" Тогда + Если ПредыдущиеЗначение <> Неопределено И ПредыдущиеЗначение.Представление = "ТипКорпуса" + И ПредыдущиеЗначение.Значение = "Корпус" Тогда + СтруктураЗначенийПолей.Вставить(Элемент.Представление, Элемент.Значение); + КорпусДобавлен = Истина; + ИначеЕсли НЕ КорпусДобавлен Тогда + СтруктураЗначенийПолей.Вставить(Элемент.Представление, Элемент.Значение); + КонецЕсли; + ИначеЕсли Элемент.Представление = "Квартира" ИЛИ Элемент.Представление = "ТипКвартиры" Тогда + Если ПредыдущиеЗначение <> Неопределено И ПредыдущиеЗначение.Представление = "ТипКвартиры" + И ПредыдущиеЗначение.Значение = "Квартира" Тогда + СтруктураЗначенийПолей.Вставить(Элемент.Представление, Элемент.Значение); + КвартираДобавлена = Истина; + ИначеЕсли НЕ КвартираДобавлена Тогда + СтруктураЗначенийПолей.Вставить(Элемент.Представление, Элемент.Значение); + КонецЕсли; + Иначе + СтруктураЗначенийПолей.Вставить(Элемент.Представление, Элемент.Значение); + КонецЕсли; + ПредыдущиеЗначение = Элемент; КонецЦикла; Возврат СтрокаПолей(СтруктураЗначенийПолей, БезПустыхПолей); @@ -693,18 +1000,18 @@ Для Итерация = 1 По СтрЧислоСтрок(СтрокаПолей) Цикл ПолученнаяСтрока = СтрПолучитьСтроку(СтрокаПолей, Итерация); - Если Лев(ПолученнаяСтрока, 1) = Символы.Таб Тогда + Если СтрНачинаетсяС(ПолученнаяСтрока, Символы.Таб) Тогда Если Результат.Количество() > 0 Тогда Результат.Вставить(ПоследнийЭлемент, Результат[ПоследнийЭлемент] + Символы.ПС + Сред(ПолученнаяСтрока, 2)); КонецЕсли; Иначе - ПозицияСимвола = Найти(ПолученнаяСтрока, "="); + ПозицияСимвола = СтрНайти(ПолученнаяСтрока, "="); Если ПозицияСимвола <> 0 Тогда НазваниеПоля = Лев(ПолученнаяСтрока, ПозицияСимвола - 1); ЗначениеПоля = Сред(ПолученнаяСтрока, ПозицияСимвола + 1); Если НазваниеПоля = "Регион" Или НазваниеПоля = "Район" Или НазваниеПоля = "Город" Или НазваниеПоля = "НаселенныйПункт" Или НазваниеПоля = "Улица" Тогда - Если Найти(СтрокаПолей, НазваниеПоля + "Сокращение") = 0 Тогда + Если СтрНайти(СтрокаПолей, НазваниеПоля + "Сокращение") = 0 Тогда Результат.Вставить(НазваниеПоля + "Сокращение", АдресноеСокращение(ЗначениеПоля)); КонецЕсли; КонецЕсли; diff --git a/SSL/src/CommonModules/УправлениеКонтактнойИнформациейКлиентСерверПовтИсп/Module.bsl b/SSL/src/CommonModules/УправлениеКонтактнойИнформациейКлиентСерверПовтИсп/Module.bsl deleted file mode 100644 index e7ba29d17..000000000 --- a/SSL/src/CommonModules/УправлениеКонтактнойИнформациейКлиентСерверПовтИсп/Module.bsl +++ /dev/null @@ -1,246 +0,0 @@ -//////////////////////////////////////////////////////////////////////////////////////////////////// -// Подсистема "Контактная информация". -// -//////////////////////////////////////////////////////////////////////////////////////////////////// - -#Область СлужебныеПроцедурыИФункции - -// Возвращает код дополнительной части адреса для сериализации. -// -// Параметры: -// СтрокаЗначения - Строка - значение для поиска, например "Дом", "Корпус", "Литера". -// -// Возвращаемое значение: -// Число - код -// -Функция КодСериализацииОбъектаАдресации(СтрокаЗначения) Экспорт - - Ключ = ВРег(СокрЛП(СтрокаЗначения)); - Для Каждого Элемент Из ТипыОбъектовАдресацииАдресаРФ() Цикл - Если Элемент.Ключ = Ключ Тогда - Возврат Элемент.Код; - КонецЕсли; - КонецЦикла; - - Возврат Неопределено; -КонецФункции - -// Возвращает код дополнительной части адреса для почтового индекса. -// -// Возвращаемое значение: -// Строка - код -// -Функция КодСериализацииПочтовогоИндекса() Экспорт - - Возврат КодСериализацииОбъектаАдресации(НСтр("ru = 'Почтовый индекс'")); - -КонецФункции - -// Возвращает XPath для почтового индекса. -// -// Возвращаемое значение: -// Строка - XPath -// -Функция XPathПочтовогоИндекса() Экспорт - - Возврат "ДопАдрЭл[ТипАдрЭл='" + КодСериализацииПочтовогоИндекса() + "']"; - -КонецФункции - -// Возвращает XPath для района. -// -// Возвращаемое значение: -// Строка - XPath -// -Функция XPathРайона() Экспорт - - Возврат "СвРайМО/Район"; - -КонецФункции - -Функция КодСериализацииДополнительногоОбъектаАдресации(Уровень, ТипаАдресногоЭлемента = "") Экспорт - - Если Уровень = 90 Тогда - Если ВРег(ТипаАдресногоЭлемента) = "ГСК" Тогда - Возврат "10600000"; - ИначеЕсли ВРег(ТипаАдресногоЭлемента) = "СНТ" Тогда - Возврат "10300000"; - ИначеЕсли ВРег(ТипаАдресногоЭлемента) = "ТЕР" Тогда - Возврат "10700000"; - Иначе - Возврат "10200000"; - КонецЕсли; - ИначеЕсли Уровень = 91 Тогда - Возврат "10400000"; - КонецЕсли; - - // Все остальное - считаем ориентиром. - Возврат "Местоположение"; -КонецФункции - -// Возвращает XPath для дополнительного объекта адресации по умолчанию. -// -// Параметры; -// Уровень - Число - уровень объекта. 90 - дополнительный(Варианты: ГСК, СНТ, ТЕР), 91 - подчиненный, -1 - -// Ориентир. -// -// Возвращаемое значение: -// Строка - XPath -// -Функция XPathДополнительногоОбъектаАдресации(Уровень, ТипаАдресногоЭлемента = "") Экспорт - КодСериализации = КодСериализацииДополнительногоОбъектаАдресации(Уровень, ТипаАдресногоЭлемента); - Возврат "ДопАдрЭл[ТипАдрЭл='" + КодСериализации + "']"; -КонецФункции - - -// Возвращает XPath для номера дополнительного объекта адресации. -// -// Параметры; -// СтрокаЗначения - Строка - искомый тип, например "Дом", "Корпус". -// -// Возвращаемое значение: -// Строка - XPath -// -Функция XPathНомераДополнительногоОбъектаАдресации(СтрокаЗначения) Экспорт - - Код = КодСериализацииОбъектаАдресации(СтрокаЗначения); - Если Код = Неопределено Тогда - Код = СтрЗаменить(СтрокаЗначения, "'", ""); - КонецЕсли; - - Возврат "ДопАдрЭл/Номер[Тип='" + Код + "']"; -КонецФункции - -// Возвращает строку с описанием типа по коду части адреса. -// Противоположность функции "КодСериализацииОбъектаАдресации". -// -// Параметры: -// Код - Строка - код -// -// Возвращаемое значение: -// Число - Тип -// -Функция ТипОбъектаПоКодуСериализации(Код) Экспорт - Для Каждого Элемент Из ТипыОбъектовАдресацииАдресаРФ() Цикл - Если Элемент.Код = Код Тогда - Возврат Элемент; - КонецЕсли; - КонецЦикла; - - Возврат Неопределено; -КонецФункции - -// Возвращает пространство имен для оперирования с XDTO контактной информации. -// -// Возвращаемое значение: -// Строка - пространство имен. -// -Функция ПространствоИмен() Экспорт - Возврат "http://www.v8.1c.ru/ssl/contactinfo"; -КонецФункции - -// Возвращает имя формы для редактирования типа контактной информации. -// -// Параметры: -// ВидИнформации - ПеречислениеСсылка.ТипыКонтактнойИнформации, СправочникСсылка.ВидыКонтактнойИнформации - -// запрашиваемый тип. -// -// Возвращаемое значение: -// Строка - полное имя формы. -// -Функция ИмяФормыВводаКонтактнойИнформации(Знач ВидИнформации) Экспорт - ТипИнформации = УправлениеКонтактнойИнформациейСлужебныйВызовСервера.ТипВидаКонтактнойИнформации(ВидИнформации); - - ВсеТипы = "Перечисление.ТипыКонтактнойИнформации."; - Если ТипИнформации = ПредопределенноеЗначение(ВсеТипы + "Адрес") Тогда - Возврат "Обработка.ВводКонтактнойИнформации.Форма.ВводАдреса"; - - ИначеЕсли ТипИнформации = ПредопределенноеЗначение(ВсеТипы + "Телефон") Тогда - Возврат "Обработка.ВводКонтактнойИнформации.Форма.ВводТелефона"; - - ИначеЕсли ТипИнформации = ПредопределенноеЗначение(ВсеТипы + "Факс") Тогда - Возврат "Обработка.ВводКонтактнойИнформации.Форма.ВводТелефона"; - - КонецЕсли; - - Возврат Неопределено; -КонецФункции - -// Возвращает массив вариантов наименований по типу (по признаку владения, строения, и т.п). -// -// Параметры: -// Тип - Число - запрашиваемый тип. -// ДопускатьПовторыКода - Булево - Истина - будут возвращены все варианты с повторами ("квартира" - "кв." и т.п.). -// -// Возвращаемое значение: -// Массив - содержит структуры - описания. -// -Функция НаименованияОбъектовАдресацииПоТипу(Тип, ДопускатьПовторыКода = Истина) Экспорт - Результат = Новый Массив; - Повторы = Новый Соответствие; - - Для Каждого Элемент Из ТипыОбъектовАдресацииАдресаРФ() Цикл - Если Элемент.Тип = Тип Тогда - Если ДопускатьПовторыКода Тогда - Результат.Добавить(Элемент.Наименование); - Иначе - Если Повторы.Получить(Элемент.Код) = Неопределено Тогда - Результат.Добавить(Элемент.Наименование); - КонецЕсли; - Повторы.Вставить(Элемент.Код, Истина); - КонецЕсли; - КонецЕсли; - КонецЦикла; - - Возврат Результат; -КонецФункции - -// Возвращает массив структур с информацией о частях адреса согласно приказу ФНС ММВ-7-1/525 от 31.08.2011. -// -// Возвращаемое значение: -// Массив - содержит структуры - описания. -// -Функция ТипыОбъектовАдресацииАдресаРФ() Экспорт - - Результат = Новый Массив; - - // Код, Наименование, Тип, Порядок, КодФИАС - // Тип: 1 - владение, 2 - здание, 3 - помещение. - - Результат.Добавить(СтрокаОбъектаАдресации("1010", НСтр("ru = 'Дом'"), 1, 1, 2)); - Результат.Добавить(СтрокаОбъектаАдресации("1020", НСтр("ru = 'Владение'"), 1, 2, 1)); - Результат.Добавить(СтрокаОбъектаАдресации("1030", НСтр("ru = 'Домовладение'"), 1, 3, 3)); - - Результат.Добавить(СтрокаОбъектаАдресации("1050", НСтр("ru = 'Корпус'"), 2, 1)); - Результат.Добавить(СтрокаОбъектаАдресации("1060", НСтр("ru = 'Строение'"), 2, 2, 1)); - Результат.Добавить(СтрокаОбъектаАдресации("1080", НСтр("ru = 'Литера'"), 2, 3, 3)); - Результат.Добавить(СтрокаОбъектаАдресации("1070", НСтр("ru = 'Сооружение'"), 2, 4, 2)); - Результат.Добавить(СтрокаОбъектаАдресации("1040", НСтр("ru = 'Участок'"), 2, 5)); - - Результат.Добавить(СтрокаОбъектаАдресации("2010", НСтр("ru = 'Квартира'"), 3, 1)); - Результат.Добавить(СтрокаОбъектаАдресации("2030", НСтр("ru = 'Офис'"), 3, 2)); - Результат.Добавить(СтрокаОбъектаАдресации("2040", НСтр("ru = 'Бокс'"), 3, 3)); - Результат.Добавить(СтрокаОбъектаАдресации("2020", НСтр("ru = 'Помещение'"), 3, 4)); - Результат.Добавить(СтрокаОбъектаАдресации("2050", НСтр("ru = 'Комната'"), 3, 5)); - // Наши сокращения для поддержки обратной совместимости при парсинге. - Результат.Добавить(СтрокаОбъектаАдресации("2010", НСтр("ru = 'кв.'"), 3, 6)); - Результат.Добавить(СтрокаОбъектаАдресации("2030", НСтр("ru = 'оф.'"), 3, 7)); - - // Уточняющие объекты - Результат.Добавить(СтрокаОбъектаАдресации("10100000", НСтр("ru = 'Почтовый индекс'"))); - Результат.Добавить(СтрокаОбъектаАдресации("10200000", НСтр("ru = 'Адресная точка'"))); - Результат.Добавить(СтрокаОбъектаАдресации("10300000", НСтр("ru = 'Садовое товарищество'"))); - Результат.Добавить(СтрокаОбъектаАдресации("10400000", НСтр("ru = 'Элемент улично-дорожной сети, планировочной структуры дополнительного адресного элемента'"))); - Результат.Добавить(СтрокаОбъектаАдресации("10500000", НСтр("ru = 'Промышленная зона'"))); - Результат.Добавить(СтрокаОбъектаАдресации("10600000", НСтр("ru = 'Гаражно-строительный кооператив'"))); - Результат.Добавить(СтрокаОбъектаАдресации("10700000", НСтр("ru = 'Территория'"))); - - Возврат Результат; -КонецФункции - -Функция СтрокаОбъектаАдресации(Код, Наименование, Тип = 0, Порядок = 0, КодФИАС = 0) - Возврат Новый Структура("Код, Наименование, Тип, Порядок, КодФИАС, Сокращение, Ключ", - Код, Наименование, Тип, Порядок, КодФИАС, НРег(Наименование), ВРег(Наименование)); -КонецФункции - -#КонецОбласти diff --git a/SSL/src/CommonModules/УправлениеКонтактнойИнформациейКлиентСерверПовтИсп/УправлениеКонтактнойИнформациейКлиентСерверПовтИсп.mdo b/SSL/src/CommonModules/УправлениеКонтактнойИнформациейКлиентСерверПовтИсп/УправлениеКонтактнойИнформациейКлиентСерверПовтИсп.mdo deleted file mode 100644 index 087e75e94..000000000 --- a/SSL/src/CommonModules/УправлениеКонтактнойИнформациейКлиентСерверПовтИсп/УправлениеКонтактнойИнформациейКлиентСерверПовтИсп.mdo +++ /dev/null @@ -1,13 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<mdclass:CommonModule xmlns:mdclass="http://g5.1c.ru/v8/dt/metadata/mdclass" uuid="36554213-9af4-4fec-8944-35f50b306eda"> - <name>УправлениеКонтактнойИнформациейКлиентСерверПовтИсп</name> - <synonym> - <key>ru</key> - <value>Управление контактной информацией клиент сервер повт исп</value> - </synonym> - <clientManagedApplication>true</clientManagedApplication> - <server>true</server> - <externalConnection>true</externalConnection> - <clientOrdinaryApplication>true</clientOrdinaryApplication> - <returnValuesReuse>DuringSession</returnValuesReuse> -</mdclass:CommonModule> diff --git a/SSL/src/CommonModules/УправлениеКонтактнойИнформациейСлужебный/Module.bsl b/SSL/src/CommonModules/УправлениеКонтактнойИнформациейСлужебный/Module.bsl index 8d4faa8e8..46b300ab9 100644 --- a/SSL/src/CommonModules/УправлениеКонтактнойИнформациейСлужебный/Module.bsl +++ b/SSL/src/CommonModules/УправлениеКонтактнойИнформациейСлужебный/Module.bsl @@ -87,6 +87,367 @@ Объекты.Вставить(Метаданные.Справочники.ВидыКонтактнойИнформации.ПолноеИмя(), "РеквизитыНеРедактируемыеВГрупповойОбработке"); КонецПроцедуры +// Возвращает сведения об адресах в виде структуру частей адреса и кодов КЛАДР +// +Функция СведенияОбАдресахВВидеСтруктуры(Адреса, ДополнительныеПараметры) Экспорт + Результат = Новый Массив; + Для каждого Адрес Из Адреса Цикл + Результат.Добавить(СведенияОбАдресеВВидеСтруктуры(Адрес, ДополнительныеПараметры)); + КонецЦикла; + Возврат Результат; +КонецФункции + +// Возвращает сведения об адресе в виде структуру частей адреса и кодов КЛАДР +// +Функция СведенияОбАдресеВВидеСтруктуры(Адрес, ДополнительныеПараметры) Экспорт + + Если ТипЗнч(ДополнительныеПараметры) = Тип("Структура") Тогда + ПолноеНаименованиеСокращений = ?(ДополнительныеПараметры.Свойство("ПолноеНаименованиеСокращений"), ДополнительныеПараметры.ПолноеНаименованиеСокращений, Ложь); + НаименованиеВключаетСокращение = ?(ДополнительныеПараметры.Свойство("НаименованиеВключаетСокращение"), ДополнительныеПараметры.НаименованиеВключаетСокращение, Ложь); + ЗаполнятьКоды = ?(ДополнительныеПараметры.Свойство("КодыКЛАДР"), ДополнительныеПараметры.КодыКЛАДР, Ложь); + Иначе + НаименованиеВключаетСокращение = Ложь; + ПолноеНаименованиеСокращений = Ложь; + ЗаполнятьКоды = Ложь; + КонецЕсли; + + ЗаполнятьКоды = Истина; + НаименованиеСтраны = ""; + + Результат = Новый Структура; + Формат9Запятых = Ложь; + + ЭлементыАдреса = Новый Соответствие; + + Если ТипЗнч(Адрес) = Тип("Строка") Тогда + Если УправлениеКонтактнойИнформациейКлиентСервер.ЭтоКонтактнаяИнформацияВXML(Адрес) Тогда + XDTOАдрес = КонтактнаяИнформацияИзXML(Адрес); + Иначе + Если СтрЧислоВхождений(Адрес, ",") = 9 Тогда + Формат9Запятых = Истина; + АдресРФ = Адрес; + Иначе + XDTOАдрес = ДесериализацияАдресаОбщая(Адрес, ""); + КонецЕсли; + КонецЕсли; + Иначе + XDTOАдрес = Адрес + КонецЕсли; + + Если НЕ Формат9Запятых Тогда + + ПространствоИмен = УправлениеКонтактнойИнформациейКлиентСервер.ПространствоИмен(); + Состав = XDTOАдрес.Состав; + + Если Состав = Неопределено Тогда + Возврат Неопределено; + КонецЕсли; + + XDTOТип = Состав.Тип(); + ПространствоИмен = УправлениеКонтактнойИнформациейКлиентСервер.ПространствоИмен(); + Если XDTOТип = ФабрикаXDTO.Тип(ПространствоИмен, "Адрес") Тогда + + Результат.Вставить("Страна", Состав.Страна); + Если ПустаяСтрока(Состав.Страна) Тогда + Страна = Справочники.СтраныМира.Россия; + НаименованиеСтраны = Страна.Наименование; + КодСтраны = СокрЛП(Страна.Код); + Иначе + Страна = Справочники.СтраныМира.НайтиПоНаименованию(Состав.Страна, Истина); + НаименованиеСтраны = Страна.Наименование; + КодСтраны = СокрЛП(Страна.Код); + КонецЕсли; + Результат.Вставить("КодСтраны", КодСтраны); + + АдресРФ = Состав.Состав; + + ИначеЕсли XDTOТип = ФабрикаXDTO.Тип(ПространствоИмен, "АдресРФ") Тогда + АдресРФ = Состав; + Иначе + Возврат Результат; + КонецЕсли; + + Если ТипЗнч(АдресРФ) = Тип("Строка") Тогда + Если СтрЧислоВхождений(АдресРФ, ",") = 9 Тогда + ЭлементыАдреса = СтруктураАдресаПоФормату9Запятых(АдресРФ); + Формат9Запятых = Истина; + Иначе + // адрес в свободной форме (РФ или Иностранный) + ЭлементыАдреса.Вставить("Страна", НаименованиеСтраны); + ЭлементыАдреса.Вставить("Индекс", ""); + ЭлементыАдреса.Вставить("Регион", ""); + ЭлементыАдреса.Вставить("Район", ""); + ЭлементыАдреса.Вставить("Город", ""); + ЭлементыАдреса.Вставить("НаселенныйПункт", ""); + ЭлементыАдреса.Вставить("Улица", ""); + ЭлементыАдреса.Вставить("Округ", ""); + ЭлементыАдреса.Вставить("ВнутригРайон", ""); + ЭлементыАдреса.Вставить("Дом",""); + ЭлементыАдреса.Вставить("Корпус", ""); + ЭлементыАдреса.Вставить("Квартира", ""); + ЭлементыАдреса.Вставить("ДополнительнаяТерритория", ""); + ЭлементыАдреса.Вставить("ЭлементДополнительнойТерритории", ""); + КонецЕсли; + Иначе + ЭлементыАдреса.Вставить("Страна", НаименованиеСтраны); + ЭлементыАдреса.Вставить("Индекс", ПочтовыйИндексАдреса(АдресРФ)); + ЭлементыАдреса.Вставить("Регион", АдресРФ.СубъектРФ); + ЭлементыАдреса.Вставить("Район", РайонАдреса(АдресРФ)); + ЭлементыАдреса.Вставить("Город", АдресРФ.Город); + ЭлементыАдреса.Вставить("НаселенныйПункт", АдресРФ.НаселПункт); + ЭлементыАдреса.Вставить("Улица", АдресРФ.Улица); + ЭлементыАдреса.Вставить("Округ", АдресРФ.Округ); + ЭлементыАдреса.Вставить("ВнутригРайон", АдресРФ.ВнутригРайон); + ЭлементыАдреса.Вставить("Дом",""); + ЭлементыАдреса.Вставить("Корпус", ""); + ЭлементыАдреса.Вставить("Квартира", ""); + ЭлементыАдреса.Вставить("ДополнительнаяТерритория", НайтиДополнительныйЭлементАдреса(АдресРФ)); + ЭлементыАдреса.Вставить("ЭлементДополнительнойТерритории", + ДополнительныйЭлементАдреса(АдресРФ, УправлениеКонтактнойИнформациейКлиентСервер.XPathДополнительногоОбъектаАдресации(91))); + КонецЕсли; + КонецЕсли; + + СоответствиеСокращений = Новый Соответствие; + + ЭтоРоссийскийАдрес = ?(СтрСравнить(НаименованиеСтраны, Справочники.СтраныМира.Россия.Наименование) = 0, Истина, Ложь); + Если ЭтоРоссийскийАдрес Тогда + Результат.Вставить("КодРегиона", КодРегиона(ЭлементыАдреса["Регион"])); + КонецЕсли; + + Результат.Вставить("Индекс", ЭлементыАдреса.Получить("Индекс")); + + Регион = УправлениеКонтактнойИнформациейКлиентСервер.НаименованиеСокращение(ЭлементыАдреса["Регион"]); + Результат.Вставить("Регион", ?(НаименованиеВключаетСокращение, ЭлементыАдреса["Регион"], Регион.Наименование)); + СоответствиеСокращений.Вставить(1, Регион.Сокращение); + + Округ = УправлениеКонтактнойИнформациейКлиентСервер.НаименованиеСокращение(ЭлементыАдреса["Округ"]); + Результат.Вставить("Округ", ?(НаименованиеВключаетСокращение, ЭлементыАдреса["Округ"], Округ.Наименование)); + СоответствиеСокращений.Вставить(2, Округ.Сокращение); + + Район = УправлениеКонтактнойИнформациейКлиентСервер.НаименованиеСокращение(ЭлементыАдреса["Район"]); + Результат.Вставить("Район", ?(НаименованиеВключаетСокращение, ЭлементыАдреса["Район"], Район.Наименование)); + СоответствиеСокращений.Вставить(3, Район.Сокращение); + + Город = УправлениеКонтактнойИнформациейКлиентСервер.НаименованиеСокращение(ЭлементыАдреса["Город"]); + Результат.Вставить("Город", ?(НаименованиеВключаетСокращение, ЭлементыАдреса["Город"], Город.Наименование)); + СоответствиеСокращений.Вставить(4, Город.Сокращение); + + ВнутригРайон = УправлениеКонтактнойИнформациейКлиентСервер.НаименованиеСокращение(ЭлементыАдреса["ВнутригРайон"]); + Результат.Вставить("ВнутригородскойРайон", ?(НаименованиеВключаетСокращение, ЭлементыАдреса[" ВнутригРайон"], ВнутригРайон.Наименование)); + СоответствиеСокращений.Вставить(5, ВнутригРайон.Сокращение); + + НаселПункт = УправлениеКонтактнойИнформациейКлиентСервер.НаименованиеСокращение(ЭлементыАдреса["НаселенныйПункт"]); + Результат.Вставить("НаселенныйПункт", ?(НаименованиеВключаетСокращение, ЭлементыАдреса["НаселенныйПункт"], НаселПункт.Наименование)); + СоответствиеСокращений.Вставить(6, НаселПункт.Сокращение); + + Улица = УправлениеКонтактнойИнформациейКлиентСервер.НаименованиеСокращение(ЭлементыАдреса["Улица"]); + Результат.Вставить("Улица", ?(НаименованиеВключаетСокращение, ЭлементыАдреса["Улица"], Улица.Наименование)); + СоответствиеСокращений.Вставить(7, Улица.Сокращение); + + ДополнительнаяТерритория = УправлениеКонтактнойИнформациейКлиентСервер.НаименованиеСокращение(ЭлементыАдреса["ДополнительнаяТерритория"]); + Результат.Вставить("ДополнительнаяТерритория", ?(НаименованиеВключаетСокращение, ЭлементыАдреса["ДополнительнаяТерритория"], ДополнительнаяТерритория.Наименование)); + СоответствиеСокращений.Вставить(90, ДополнительнаяТерритория.Сокращение); + + ЭлементДополнительнойТерритории = УправлениеКонтактнойИнформациейКлиентСервер.НаименованиеСокращение(ЭлементыАдреса["ЭлементДополнительнойТерритории"]); + Результат.Вставить("ЭлементДополнительнойТерритории", ?(НаименованиеВключаетСокращение, ЭлементыАдреса["ЭлементДополнительнойТерритории"], ЭлементДополнительнойТерритории.Наименование)); + СоответствиеСокращений.Вставить(91, ЭлементДополнительнойТерритории.Сокращение); + + Если ПолноеНаименованиеСокращений = Истина Тогда + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.АдресныйКлассификатор") Тогда + МодульАдресныйКлассификаторСлужебный = ОбщегоНазначения.ОбщийМодуль("АдресныйКлассификаторСлужебный"); + МодульАдресныйКлассификаторСлужебный.ПолныеНаименованияСокращений(СоответствиеСокращений); + КонецЕсли; + КонецЕсли; + + Результат.Вставить("РегионСокращение", СоответствиеСокращений[1]); + Результат.Вставить("ОкругСокращение", СоответствиеСокращений[2]); + Результат.Вставить("РайонСокращение", СоответствиеСокращений[3]); + Результат.Вставить("ГородСокращение", СоответствиеСокращений[4]); + Результат.Вставить("ВнутригородскойРайонСокращение", СоответствиеСокращений[5]); + Результат.Вставить("НаселенныйПунктСокращение", СоответствиеСокращений[6]); + Результат.Вставить("УлицаСокращение", СоответствиеСокращений[7]); + Результат.Вставить("ДополнительнаяТерриторияСокращение", СоответствиеСокращений[90]); + Результат.Вставить("ЭлементДополнительнойТерриторииСокращение", СоответствиеСокращений[91]); + Результат.Вставить("Здание", Новый Структура("ТипЗдания, Номер")); + Результат.Вставить("Корпуса", Новый Массив); + Результат.Вставить("Помещения", Новый Массив); + + Если НЕ Формат9Запятых Тогда + + ЗданияИПомещения = ЗданияИПомещенияАдреса(АдресРФ); + Для каждого Здание Из ЗданияИПомещения.Здания Цикл + Если Здание.Вид = 1 Тогда + Результат.Здание.ТипЗдания = Здание.Тип; + Результат.Здание.Номер = Здание.Значение; + Иначе + Результат.Корпуса.Добавить(Новый Структура("ТипКорпуса, Номер", Здание.Тип, Здание.Значение)); + КонецЕсли; + КонецЦикла; + + Для каждого Помещение Из ЗданияИПомещения.Помещения Цикл + Результат.Помещения.Добавить(Новый Структура("ТипПомещения, Номер", Помещение.Тип, Помещение.Значение)); + КонецЦикла; + + Иначе + Здание = УправлениеКонтактнойИнформациейКлиентСервер.НаименованиеСокращение(ЭлементыАдреса["Дом"]); + Результат.Здание.ТипЗдания = Здание.Наименование; + Результат.Здание.Номер = Здание.Сокращение; + + Корпус = УправлениеКонтактнойИнформациейКлиентСервер.НаименованиеСокращение(ЭлементыАдреса["Корпус"]); + Результат.Корпуса.Добавить(Новый Структура("ТипКорпуса, Номер", Корпус.Наименование, Корпус.Сокращение)); + + Квартира = УправлениеКонтактнойИнформациейКлиентСервер.НаименованиеСокращение(ЭлементыАдреса["Квартира"]); + Результат.Помещения.Добавить(Новый Структура("ТипПомещения, Номер", Квартира.Наименование, Квартира.Сокращение)); + КонецЕсли; + + Если ЗаполнятьКоды И ЭтоРоссийскийАдрес Тогда + ЗаполнитьКодыАдреса(Результат); + КонецЕсли; + + Возврат Результат; + +КонецФункции + +Функция СтруктураАдресаПоФормату9Запятых(АдресВФормате9Запятых) + Результат = Новый Соответствие; + АдресМассив = СтрРазделить(АдресВФормате9Запятых, ",", Истина); + Результат.Вставить("Страна", АдресМассив[0]); + Результат.Вставить("Индекс", АдресМассив[1]); + Результат.Вставить("Регион", АдресМассив[2]); + Результат.Вставить("Район", АдресМассив[3]); + Результат.Вставить("Город", АдресМассив[4]); + Результат.Вставить("НаселенныйПункт", АдресМассив[5]); + Результат.Вставить("Улица", АдресМассив[6]); + Результат.Вставить("Дом", АдресМассив[7]); + Результат.Вставить("Корпус", АдресМассив[8]); + Результат.Вставить("Квартира", АдресМассив[9]); + + Результат.Вставить("Округ", Неопределено); + Результат.Вставить("ВнутригРайон", Неопределено); + Возврат Результат; + +КонецФункции + +// Заполняет коды по структуре адреса +// +Процедура ЗаполнитьКодыАдреса(Адрес) + + КодыКЛАДР = Новый Структура("Регион, Округ, Город, ВнутригородскойРайон, НаселенныйПункт, Улица"); + ДополнительныеКоды = Новый Структура("ОКТМО, ОКАТО, КодИФНСФЛ, КодИФНСЮЛ, КодУчасткаИФНСФЛ, КодУчасткаИФНСЮЛ"); + Адрес.Вставить("КодыКЛАДР", КодыКЛАДР); + Адрес.Вставить("ДополнительныеКоды", ДополнительныеКоды); + + Если ПустаяСтрока(Адрес.Регион) Тогда + Возврат; + КонецЕсли; + + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.АдресныйКлассификатор") Тогда + МодульАдресныйКлассификаторСлужебный = ОбщегоНазначения.ОбщийМодуль("АдресныйКлассификаторСлужебный"); + МодульАдресныйКлассификаторСлужебный.ЗаполнитьКодыАдреса(Адрес); + КонецЕсли; + +КонецПроцедуры + +// Возвращает имя формы для редактирования типа контактной информации. +// +// Параметры: +// ВидИнформации - ПеречислениеСсылка.ТипыКонтактнойИнформации, СправочникСсылка.ВидыКонтактнойИнформации - +// запрашиваемый тип. +// +// Возвращаемое значение: +// Строка - полное имя формы. +// +Функция ИмяФормыВводаКонтактнойИнформации(Знач ВидИнформации) Экспорт + + ТипИнформации = ТипВидаКонтактнойИнформации(ВидИнформации); + + ВсеТипы = "Перечисление.ТипыКонтактнойИнформации."; + Если ТипИнформации = ПредопределенноеЗначение(ВсеТипы + "Адрес") Тогда + Возврат "Обработка.ВводКонтактнойИнформации.Форма.ВводАдреса"; + + ИначеЕсли ТипИнформации = ПредопределенноеЗначение(ВсеТипы + "Телефон") Тогда + Возврат "Обработка.ВводКонтактнойИнформации.Форма.ВводТелефона"; + + ИначеЕсли ТипИнформации = ПредопределенноеЗначение(ВсеТипы + "Факс") Тогда + Возврат "Обработка.ВводКонтактнойИнформации.Форма.ВводТелефона"; + + КонецЕсли; + + Возврат Неопределено; +КонецФункции + +// Возвращает XPath для района. +// +// Возвращаемое значение: +// Строка - XPath +// +Функция XPathРайона() Экспорт + + Возврат "СвРайМО/Район"; + +КонецФункции + + +// Получить первое значение определенного вида контактной информации у объекта. +// +// Параметры: +// Ссылка - ЛюбаяСсылка - ссылка на объект-владелец контактной информации (организация, +// контрагент, партнер и т.д.). +// ТипКонтактнойИнформации - Перечисление.ТипыКонтактнойИнформации - параметры обработки. +// +// Возвращаемое значение: +// Строка - строковое представление значения. +// +Функция ПервоеЗначениеКонтактнойИнформацииОбъектаПоТипу(Ссылка, ТипКонтактнойИнформации) Экспорт + + Результат = ""; + ПолноеИмя = Ссылка.Метаданные().ПолноеИмя(); + + Если СтрНачинаетсяС(ПолноеИмя , НСтр("ru = 'Справочник'")) Тогда + ИмяГруппыКонтактнойИнформации = НСтр("ru = 'Справочник'") + Ссылка.Метаданные().Имя; + ИначеЕсли СтрНачинаетсяС(ПолноеИмя , НСтр("ru = 'Документ'")) Тогда + ИмяГруппыКонтактнойИнформации = НСтр("ru = 'Документ'") + Ссылка.Метаданные().Имя; + КонецЕсли; + + Запрос = Новый Запрос; + Запрос.Текст = + "ВЫБРАТЬ + | ВидыКонтактнойИнформации.ИмяПредопределенныхДанных КАК Наименование + |ИЗ + | Справочник.ВидыКонтактнойИнформации КАК ВидыКонтактнойИнформации + |ГДЕ + | ВидыКонтактнойИнформации.ЭтоГруппа = ИСТИНА"; + + РезультатЗапроса = Запрос.Выполнить().Выбрать(); + Пока РезультатЗапроса.Следующий() Цикл + Если РезультатЗапроса.Наименование = ИмяГруппыКонтактнойИнформации Тогда + Запрос = Новый Запрос; + Запрос.Текст = + "ВЫБРАТЬ + | ВидыКонтактнойИнформацииПодчиненный.Ссылка КАК Ссылка + |ИЗ + | Справочник.ВидыКонтактнойИнформации КАК ВидыКонтактнойИнформации + | ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ВидыКонтактнойИнформации КАК ВидыКонтактнойИнформацииПодчиненный + | ПО (ВидыКонтактнойИнформацииПодчиненный.Родитель = ВидыКонтактнойИнформации.Ссылка) + |ГДЕ + | ВидыКонтактнойИнформации.ИмяПредопределенныхДанных = &ИмяПредопределенныхДанных + | И ВидыКонтактнойИнформации.ЭтоГруппа = ИСТИНА + | И ВидыКонтактнойИнформацииПодчиненный.Тип = &Тип"; + + Запрос.УстановитьПараметр("ИмяПредопределенныхДанных", ИмяГруппыКонтактнойИнформации); + Запрос.УстановитьПараметр("Тип", ТипКонтактнойИнформации); + + РезультатЗапроса = Запрос.Выполнить().Выбрать(); + Если РезультатЗапроса.Следующий() Тогда + Результат = УправлениеКонтактнойИнформацией.КонтактнаяИнформацияОбъекта( + Ссылка, РезультатЗапроса.Ссылка); + КонецЕсли; + КонецЕсли; + КонецЦикла; + Возврат Результат; + +КонецФункции + #КонецОбласти #Область СлужебныеПроцедурыИФункции @@ -123,6 +484,20 @@ Обработчик.ОбщиеДанные = Ложь; Обработчик.НачальноеЗаполнение = Истина; + Обработчик = Обработчики.Добавить(); + Обработчик.Версия = "2.3.1.8"; + Обработчик.Процедура = "УправлениеКонтактнойИнформациейСлужебный.ОбновитьНастройкуДобавочногоНомераТелефона"; + Обработчик.РежимВыполнения = "Оперативно"; + Обработчик.ОбщиеДанные = Ложь; + Обработчик.НачальноеЗаполнение = Истина; + + Обработчик = Обработчики.Добавить(); + Обработчик.Версия = "2.3.1.15"; + Обработчик.Процедура = "УправлениеКонтактнойИнформациейСлужебный.УстановитьЗначениеПризнакаИспользуется"; + Обработчик.РежимВыполнения = "Оперативно"; + Обработчик.ОбщиеДанные = Ложь; + Обработчик.НачальноеЗаполнение = Истина; + КонецПроцедуры // Неразделенный монопольный обработчик для копирования стран мира из нулевой области. @@ -248,6 +623,53 @@ КонецПроцедуры +Процедура ОбновитьНастройкуДобавочногоНомераТелефона() Экспорт + + // Устанавливает флаг ТелефонCДобавочнымНомером для обратной совместимости. + Запрос = Новый Запрос; + Запрос.Текст = + "ВЫБРАТЬ + | ВидыКонтактнойИнформации.Ссылка + |ИЗ + | Справочник.ВидыКонтактнойИнформации КАК ВидыКонтактнойИнформации + |ГДЕ + | ВидыКонтактнойИнформации.Тип = Значение(Перечисление.ТипыКонтактнойИнформации.Телефон)"; + + РезультатЗапроса = Запрос.Выполнить().Выбрать(); + + Пока РезультатЗапроса.Следующий() Цикл + ВидКонтактнойИнформации = РезультатЗапроса.Ссылка.ПолучитьОбъект(); + ВидКонтактнойИнформации.ТелефонCДобавочнымНомером = Истина; + ОбновлениеИнформационнойБазы.ЗаписатьДанные(ВидКонтактнойИнформации); + КонецЦикла; + +КонецПроцедуры + +// Инициализирует значение реквизита Используется справочника ВидыКонтактнойИнформации +// +Процедура УстановитьЗначениеПризнакаИспользуется() Экспорт + + Запрос = Новый Запрос; + Запрос.Текст = "ВЫБРАТЬ + | ВидыКонтактнойИнформации.Ссылка + |ИЗ + | Справочник.ВидыКонтактнойИнформации КАК ВидыКонтактнойИнформации + |ГДЕ + | НЕ ВидыКонтактнойИнформации.Используется"; + + Результат = Запрос.Выполнить(); + Выборка = Результат.Выбрать(); + + Пока Выборка.Следующий() Цикл + + ВидКонтактнойИнформацииОбъект = Выборка.Ссылка.ПолучитьОбъект(); + ВидКонтактнойИнформацииОбъект.Используется = Истина; + ОбновлениеИнформационнойБазы.ЗаписатьДанные(ВидКонтактнойИнформацииОбъект); + + КонецЦикла; + +КонецПроцедуры + #КонецОбласти #Область ВзаимодействиеСАдреснымКлассификатором @@ -329,7 +751,7 @@ Если ДанныеАнализа.Количество() = 0 Тогда Возврат Результат; КонецЕсли; - ПространствоИмен = УправлениеКонтактнойИнформациейКлиентСерверПовтИсп.ПространствоИмен(); + ПространствоИмен = УправлениеКонтактнойИнформациейКлиентСервер.ПространствоИмен(); АдресРФ = ФабрикаXDTO.Создать(ФабрикаXDTO.Тип(ПространствоИмен, "АдресРФ")); МодульАдресныйКлассификаторСлужебный = ОбщегоНазначения.ОбщийМодуль("АдресныйКлассификаторСлужебный"); АдресПоУровням = МодульАдресныйКлассификаторСлужебный.УстановитьСоответствиеЧастейАдресаИхУровнюДляНаселенногоПункта(ДанныеАнализа, УровниАдресныхОбъектов("НаселенныйПункт")); @@ -374,15 +796,16 @@ // Функция УлицыПоПредставлению(ИдентификаторНаселенногоПункта, Текст, СкрыватьНеактуальныеАдреса = Ложь, ВыбиратьСтрок = 50) Экспорт - Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.АдресныйКлассификатор") Тогда - ЧастиАдреса = ЧастиАдресаТаблицей(Текст); - Если ЧастиАдреса.Количество() = 0 Тогда - Возврат Неопределено; - КонецЕсли; - - МодульАдресныйКлассификаторСлужебный = ОбщегоНазначения.ОбщийМодуль("АдресныйКлассификаторСлужебный"); - МодульАдресныйКлассификаторСлужебный.УстановитьУровниУлицыПоЧастямАдреса(ИдентификаторНаселенногоПункта, ЧастиАдреса); - Возврат ЧастиАдреса; + Если ЗначениеЗаполнено(ИдентификаторНаселенногоПункта) + И ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.АдресныйКлассификатор") Тогда + ЧастиАдреса = ЧастиАдресаТаблицей(Текст); + Если ЧастиАдреса.Количество() = 0 Тогда + Возврат Неопределено; + КонецЕсли; + + МодульАдресныйКлассификаторСлужебный = ОбщегоНазначения.ОбщийМодуль("АдресныйКлассификаторСлужебный"); + МодульАдресныйКлассификаторСлужебный.УстановитьУровниУлицыПоЧастямАдреса(ИдентификаторНаселенногоПункта, ЧастиАдреса); + Возврат ЧастиАдреса; КонецЕсли; Возврат Неопределено; @@ -582,18 +1005,9 @@ // Устанавливает значения идентификаторов для частей адреса. // // Параметры: -// ИдентификаторАдреса - УникальныйИдентификатор - Источник данных для заполнения. // НаселенныйПунктДетально - Структура - части адреса. +// ИдентификаторАдреса - УникальныйИдентификатор - Источник данных для заполнения. // -Процедура ЗаполнитьИдентификаторыЧастейАдреса(НаселенныйПунктДетально) Экспорт - - Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.АдресныйКлассификатор") Тогда - МодульАдресныйКлассификаторСлужебный = ОбщегоНазначения.ОбщийМодуль("АдресныйКлассификаторСлужебный"); - МодульАдресныйКлассификаторСлужебный.УстановитьИдентификаторыЧастейАдреса(НаселенныйПунктДетально); - КонецЕсли; - -КонецПроцедуры - Процедура ЗаполнитьИдентификаторыНаселенногоПункта(НаселенныйПунктДетально, ИдентификаторНаселенногоПункта = Неопределено) Экспорт Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.АдресныйКлассификатор") Тогда @@ -681,7 +1095,6 @@ КонецЕсли; КонецЕсли; ПараметрыПроверки.ПроверятьКорректность = Истина; - ПараметрыПроверки.ЗапрещатьВводНекорректного = Истина; КонецЕсли; Если ВРег(ФорматАдреса) = "ФИАС" Тогда @@ -693,7 +1106,7 @@ Адрес = Источник.Состав; - ПространствоИмен = УправлениеКонтактнойИнформациейКлиентСерверПовтИсп.ПространствоИмен(); + ПространствоИмен = УправлениеКонтактнойИнформациейКлиентСервер.ПространствоИмен(); Если Адрес <> Неопределено И Адрес.Тип() = ФабрикаXDTO.Тип(ПространствоИмен, "Адрес") Тогда СписокОшибок = ОшибкиЗаполненияАдресаXDTO(Адрес, ПараметрыПроверки); КонецЕсли; @@ -944,10 +1357,114 @@ Возврат Результат; КонецФункции +// Возвращает список значение содержащий номера домов для автоподбора. +// +// Параметры: +// ИдентификаторАдресногоОбъекта - УникальныйИдентификатор - Населенный пункт или улица. +// Текст - Строка - Текст автоподбора. +// Возвращаемое значение: +// СписокЗначений - результат для автоподбора. +// +Функция СписокАвтоподбораНомераДомов(ИдентификаторАдресногоОбъекта, Текст) Экспорт + + ВариантыДомов = Новый СписокЗначений; + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.АдресныйКлассификатор") Тогда + МодульАдресныйКлассификаторСлужебный = ОбщегоНазначения.ОбщийМодуль("АдресныйКлассификаторСлужебный"); + ВариантыДомов = МодульАдресныйКлассификаторСлужебный.ВариантыАвтоподбораНомеровДомов(ИдентификаторАдресногоОбъекта, Текст); + КонецЕсли; + + Возврат ВариантыДомов; +КонецФункции + #КонецОбласти #Область ОбщиеСлужебныеПроцедурыИФункции +// Функция раскладывает строку с данными об адресе (в формате 9 запятых) на элементы структуры. +Функция РазложитьАдресВСтруктуру(Знач СтрокаАдрес) Экспорт + + Страна = ""; + Индекс = ""; + Регион = ""; + Район = ""; + Город = ""; + НаселенныйПункт = ""; + Улица =""; + Дом =""; + Корпус =""; + Квартира =""; + + МассивАдрес = СтрРазделить(СтрокаАдрес, ",", Истина); + ЭлементовВМассиве = МассивАдрес.Количество(); + + Если ЭлементовВМассиве > 0 Тогда + Страна = СокрЛП(МассивАдрес[0]); + КонецЕсли; + Если ЭлементовВМассиве > 1 Тогда + Индекс = СокрЛП(МассивАдрес[1]); + КонецЕсли; + Если ЭлементовВМассиве > 2 Тогда + Регион = СокрЛП(МассивАдрес[2]); + КонецЕсли; + Если ЭлементовВМассиве > 3 Тогда + Район = СокрЛП(МассивАдрес[3]); + КонецЕсли; + Если ЭлементовВМассиве > 4 Тогда + Город = СокрЛП(МассивАдрес[4]); + КонецЕсли; + Если ЭлементовВМассиве > 5 Тогда + НаселенныйПункт = СокрЛП(МассивАдрес[5]); + КонецЕсли; + Если ЭлементовВМассиве > 6 Тогда + Улица = СокрЛП(МассивАдрес[6]); + КонецЕсли; + Если ЭлементовВМассиве > 7 Тогда + Дом = СокрЛП(МассивАдрес[7]); + КонецЕсли; + Если ЭлементовВМассиве > 8 Тогда + Корпус = СокрЛП(МассивАдрес[8]); + КонецЕсли; + Если ЭлементовВМассиве> 9 Тогда + Квартира = СокрЛП(МассивАдрес[9]); + КонецЕсли; + + СтруктураВозврата = Новый Структура; + СтруктураВозврата.Вставить("Страна",Страна); + СтруктураВозврата.Вставить("Индекс",Индекс); + СтруктураВозврата.Вставить("Регион",Регион); + СтруктураВозврата.Вставить("Район",Район); + СтруктураВозврата.Вставить("Город",Город); + СтруктураВозврата.Вставить("НаселенныйПункт",НаселенныйПункт); + СтруктураВозврата.Вставить("Улица",Улица); + СтруктураВозврата.Вставить("Дом",Дом); + СтруктураВозврата.Вставить("Корпус",Корпус); + СтруктураВозврата.Вставить("Квартира",Квартира); + + Возврат СтруктураВозврата; + +КонецФункции + +Функция АдресИзСтрокиФормата9Запятых(Строка9Запятых) Экспорт + СтруктураАдреса = РазложитьАдресВСтруктуру(Строка9Запятых); + ВозвращаемаяСтрока = ""; + Для Каждого КлючИЗначение Из СтруктураАдреса Цикл + Если ПустаяСтрока(КлючИЗначение.Значение) Тогда + Продолжить; + КонецЕсли; + ВозвращаемаяСтрока = ВозвращаемаяСтрока + ?(ПустаяСтрока(ВозвращаемаяСтрока), "", Символы.ПС) + КлючИЗначение.Ключ + "=" + СокрЛП(КлючИЗначение.Значение); + КонецЦикла; + Если Не ПустаяСтрока(СтруктураАдреса.Дом) Тогда + ВозвращаемаяСтрока = ВозвращаемаяСтрока + Символы.ПС + "ТипДома=дом"; + КонецЕсли; + Если Не ПустаяСтрока(СтруктураАдреса.Корпус) Тогда + ВозвращаемаяСтрока = ВозвращаемаяСтрока + Символы.ПС + "ТипКорпуса=корпус"; + КонецЕсли; + Если Не ПустаяСтрока(СтруктураАдреса.Квартира) Тогда + ВозвращаемаяСтрока = ВозвращаемаяСтрока + Символы.ПС + "ТипКвартиры=кв."; + КонецЕсли; + Возврат ВозвращаемаяСтрока; +КонецФункции + // Обновляет поля контактной информации из ТаблицыЗначений (например объекта другого вида справочника). // // Параметры: @@ -991,11 +1508,11 @@ // Функция ПолучитьЗначениеПоляАдреса(СтрокаЗначенийПолей, ИмяПоля) Экспорт - ПозицияПоля = Найти(СтрокаЗначенийПолей, ИмяПоля); + ПозицияПоля = СтрНайти(СтрокаЗначенийПолей, ИмяПоля); Значение = ""; Если ПозицияПоля <> 0 Тогда ЗначенияПолей = Прав(СтрокаЗначенийПолей, СтрДлина(СтрокаЗначенийПолей) - ПозицияПоля - СтрДлина(ИмяПоля)); - ПозицияПС = Найти(ЗначенияПолей, Символы.ПС); + ПозицияПС = СтрНайти(ЗначенияПолей, Символы.ПС); Значение = Сред(ЗначенияПолей, 0 ,ПозицияПС - 1); КонецЕсли; Возврат Значение; @@ -1012,11 +1529,11 @@ // Функция ПолучитьЗначениеКонтактнойИнформации(СтрокаЗначенийПолей, ИмяПоля) Экспорт - ПозицияПоля = Найти(СтрокаЗначенийПолей, ИмяПоля); + ПозицияПоля = СтрНайти(СтрокаЗначенийПолей, ИмяПоля); Значение = ""; Если ПозицияПоля <> 0 Тогда ЗначенияПолей = Прав(СтрокаЗначенийПолей, СтрДлина(СтрокаЗначенийПолей) - ПозицияПоля - СтрДлина(ИмяПоля)); - ПозицияПС = Найти(ЗначенияПолей, Символы.ПС); + ПозицияПС = СтрНайти(ЗначенияПолей, Символы.ПС); Значение = Сред(ЗначенияПолей, 0 , ПозицияПС - 1); КонецЕсли; @@ -1067,7 +1584,7 @@ Функция ВариантыДанныхДом() Экспорт Возврат Новый Структура("ВариантыТипа, МожноПодбиратьЗначения", - УправлениеКонтактнойИнформациейКлиентСерверПовтИсп.НаименованияОбъектовАдресацииПоТипу(1), Ложь); + УправлениеКонтактнойИнформациейКлиентСервер.НаименованияОбъектовАдресацииПоТипу(1), Ложь); КонецФункции @@ -1075,7 +1592,7 @@ Функция ВариантыДанныхСтроение() Экспорт Возврат Новый Структура("ВариантыТипа, МожноПодбиратьЗначения", - УправлениеКонтактнойИнформациейКлиентСерверПовтИсп.НаименованияОбъектовАдресацииПоТипу(2), Ложь); + УправлениеКонтактнойИнформациейКлиентСервер.НаименованияОбъектовАдресацииПоТипу(2), Ложь); КонецФункции @@ -1083,13 +1600,12 @@ Функция ВариантыДанныхПомещение() Экспорт Возврат Новый Структура("ВариантыТипа, МожноПодбиратьЗначения", - УправлениеКонтактнойИнформациейКлиентСерверПовтИсп.НаименованияОбъектовАдресацииПоТипу(3, Ложь), Ложь); + УправлениеКонтактнойИнформациейКлиентСервер.НаименованияОбъектовАдресацииПоТипу(3, Ложь), Ложь); КонецФункции Процедура ЗаполнитьСписокАвтоподбораИзТаблицы(Результат, ТабличныеДанные, ЭтоПодборУлицы) - ПредупреждениеНеактуальности = НСтр("ru = 'Адрес ""%1"" неактуален.'"); КартинкаНеактуальности = БиблиотекаКартинок.КонтактнаяИнформацияНеактуально; КартинкаАктуальности = Неопределено; @@ -1097,7 +1613,7 @@ Представление = Строка.Представление; Если Строка.Неактуален Тогда - Предупреждение = СтрЗаменить(ПредупреждениеНеактуальности, "%1", Представление); + Предупреждение = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Адрес ""%1"" неактуален.'"), Представление); Пометка = Истина; Картинка = КартинкаНеактуальности; Иначе @@ -1120,8 +1636,7 @@ Результат.Добавить( Новый Структура("Предупреждение, Значение", Предупреждение, ЗначениеЭлемента), - Представление, Пометка, Картинка - ); + Представление, Пометка, Картинка); КонецЦикла; КонецПроцедуры @@ -1181,12 +1696,13 @@ ПеречислениеАдрес = Перечисления.ТипыКонтактнойИнформации.Адрес; ПеречислениеАдресЭлектроннойПочты = Перечисления.ТипыКонтактнойИнформации.АдресЭлектроннойПочты; + ПеречислениеSkype = Перечисления.ТипыКонтактнойИнформации.Skype; ПеречислениеВебСтраница = Перечисления.ТипыКонтактнойИнформации.ВебСтраница; ПеречислениеТелефон = Перечисления.ТипыКонтактнойИнформации.Телефон; ПеречислениеФакс = Перечисления.ТипыКонтактнойИнформации.Факс; ПеречислениеДругое = Перечисления.ТипыКонтактнойИнформации.Другое; - ПространствоИмен = УправлениеКонтактнойИнформациейКлиентСерверПовтИсп.ПространствоИмен(); + ПространствоИмен = УправлениеКонтактнойИнформациейКлиентСервер.ПространствоИмен(); Если УправлениеКонтактнойИнформациейКлиентСервер.ЭтоКонтактнаяИнформацияВXML(Текст) Тогда ЧтениеXML = Новый ЧтениеXML; ЧтениеXML.УстановитьСтроку(Текст); @@ -1200,8 +1716,8 @@ УровеньЖурналаРегистрации.Ошибка, , Текст, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); Если ТипЗнч(ОжидаемыйВид) = Тип("СправочникСсылка.ВидыКонтактнойИнформации") Тогда - ТекстОшибки = СтрЗаменить(НСтр("ru = 'Некорректный формат XML контактной информации для ""%1"", значения полей были очищены.'"), - "%1", Строка(ОжидаемыйВид)); + ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Некорректный формат XML контактной информации для ""%1"", значения полей были очищены.'"), + Строка(ОжидаемыйВид)); Иначе ТекстОшибки = НСтр("ru = 'Некорректный формат XML контактной информации, значения полей были очищены.'"); КонецЕсли; @@ -1220,6 +1736,8 @@ ТекстОшибки = НСтр("ru = 'Ошибка десериализации контактной информации, ожидается телефон'"); ИначеЕсли ОжидаемыйТип = ПеречислениеФакс И НайденТип <> ФабрикаXDTO.Тип(ПространствоИмен, "НомерФакса") Тогда ТекстОшибки = НСтр("ru = 'Ошибка десериализации контактной информации, ожидается телефон'"); + ИначеЕсли ОжидаемыйТип = ПеречислениеSkype И НайденТип <> ФабрикаXDTO.Тип(ПространствоИмен, "Skype") Тогда + ТекстОшибки = НСтр("ru = 'Ошибка десериализации контактной информации, ожидается Skype'"); ИначеЕсли ОжидаемыйТип = ПеречислениеДругое И НайденТип <> ФабрикаXDTO.Тип(ПространствоИмен, "Прочее") Тогда ТекстОшибки = НСтр("ru = 'Ошибка десериализации контактной информации, ожидается ""другое""'"); КонецЕсли; @@ -1280,7 +1798,12 @@ Иначе Результат = ДесериализацияПрочейКонтактнойИнформации(Текст, Представление, ОжидаемыйТип) КонецЕсли; - + ИначеЕсли ОжидаемыйТип = ПеречислениеSkype Тогда + Если ЭтоНовый Тогда + Результат.Состав = ФабрикаXDTO.Создать(ФабрикаXDTO.Тип(ПространствоИмен, "Skype")); + Иначе + Результат = ДесериализацияПрочейКонтактнойИнформации(Текст, Представление, ОжидаемыйТип) + КонецЕсли; ИначеЕсли ОжидаемыйТип = ПеречислениеВебСтраница Тогда Если ЭтоНовый Тогда Результат.Состав = ФабрикаXDTO.Создать(ФабрикаXDTO.Тип(ПространствоИмен, "ВебСайт")); @@ -1330,6 +1853,9 @@ ИначеЕсли ОжидаемыйТип = Перечисления.ТипыКонтактнойИнформации.Факс Тогда Возврат ДесериализацияФакса("", Текст, ОжидаемыйТип); + ИначеЕсли ОжидаемыйТип = Перечисления.ТипыКонтактнойИнформации.Skype Тогда + Возврат ДесериализацияПрочейКонтактнойИнформации("", Текст, ОжидаемыйТип); + ИначеЕсли ОжидаемыйТип = Перечисления.ТипыКонтактнойИнформации.Другое Тогда Возврат ДесериализацияПрочейКонтактнойИнформации("", Текст, ОжидаемыйТип); @@ -1365,7 +1891,7 @@ КонецЕсли; // Пустой объект с представлением. - ПространствоИмен = УправлениеКонтактнойИнформациейКлиентСерверПовтИсп.ПространствоИмен(); + ПространствоИмен = УправлениеКонтактнойИнформациейКлиентСервер.ПространствоИмен(); Результат = ФабрикаXDTO.Создать(ФабрикаXDTO.Тип(ПространствоИмен, "КонтактнаяИнформация")); Результат.Состав = ФабрикаXDTO.Создать(ФабрикаXDTO.Тип(ПространствоИмен, "Адрес")); Результат.Представление = Представление; @@ -1373,7 +1899,6 @@ КонецФункции - Функция УровниАдресныхОбъектов(ТипАдресногоОбъекта = "Полный") Уровни = Новый Массив; Если ТипАдресногоОбъекта = "Улица" Тогда @@ -1404,7 +1929,7 @@ Функция СформироватьАдресПоПредставлению(Представление) - ПространствоИмен = УправлениеКонтактнойИнформациейКлиентСерверПовтИсп.ПространствоИмен(); + ПространствоИмен = УправлениеКонтактнойИнформациейКлиентСервер.ПространствоИмен(); Результат = ФабрикаXDTO.Создать(ФабрикаXDTO.Тип(ПространствоИмен, "КонтактнаяИнформация")); Результат.Состав = ФабрикаXDTO.Создать(ФабрикаXDTO.Тип(ПространствоИмен, "Адрес")); @@ -1433,7 +1958,7 @@ Если Адрес.Страна = НаименованиеРоссии Тогда Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.АдресныйКлассификатор") Тогда - ПространствоИмен = УправлениеКонтактнойИнформациейКлиентСерверПовтИсп.ПространствоИмен(); + ПространствоИмен = УправлениеКонтактнойИнформациейКлиентСервер.ПространствоИмен(); АдресРФ = ФабрикаXDTO.Создать(ФабрикаXDTO.Тип(ПространствоИмен, "АдресРФ")); МодульАдресныйКлассификаторСлужебный = ОбщегоНазначения.ОбщийМодуль("АдресныйКлассификаторСлужебный"); АдресПоУровням = МодульАдресныйКлассификаторСлужебный.УстановитьСоответствиеЧастейАдресаИхУровню(ДанныеАнализа, УровниАдресныхОбъектов()); @@ -1452,10 +1977,10 @@ Позиция = СтрокаСтраны.Начало + СтрокаСтраны.Длина; Длина = СтрДлина(Представление); Разделители = "," + Символы.ПС; - Пока Позиция <= Длина И Найти(Разделители, Сред(Представление, Позиция, 1)) <= 0 Цикл + Пока Позиция <= Длина И СтрНайти(Разделители, Сред(Представление, Позиция, 1)) <= 0 Цикл Позиция = Позиция + 1; КонецЦикла; - Пока Позиция <= Длина И Найти(Разделители, Сред(Представление, Позиция, 1)) > 0 Цикл + Пока Позиция <= Длина И СтрНайти(Разделители, Сред(Представление, Позиция, 1)) > 0 Цикл Позиция = Позиция + 1; КонецЦикла; Адрес.Состав = СокрЛП(Лев(Представление, СтрокаСтраны.Начало - 1) + " " + СокрЛП(Сред(Представление, Позиция))); @@ -1518,50 +2043,17 @@ Возврат Результат; КонецФункции -Процедура ОпределитьСтрануИИндекс(ДанныеАнализа) +Процедура ОпределитьСтрануИИндекс(ДанныеАдреса) Классификатор = Справочники.СтраныМира.ТаблицаКлассификатора(); - - Запрос = Новый Запрос; - Запрос.Текст = "ВЫБРАТЬ - | ДанныеАдреса.Наименование КАК Наименование, - | ДанныеАдреса.Значение КАК ПолноеНаименование, - | ДанныеАдреса.Позиция КАК Позиция, - | ДанныеАдреса.Сокращение КАК Сокращение - |ПОМЕСТИТЬ ДанныеАдреса - |ИЗ - | &ДанныеАдреса КАК ДанныеАдреса - | - |ИНДЕКСИРОВАТЬ ПО - | Наименование, - | Позиция, - | Сокращение - |; - | - |//////////////////////////////////////////////////////////////////////////////// - |ВЫБРАТЬ - | ДанныеАдреса.Наименование КАК Наименование, - | ВЫБОР - | КОГДА ДанныеАдреса.Наименование ПОДОБНО ""[0-9][0-9][0-9][0-9][0-9][0-9]"" - | ТОГДА -1 - | ИНАЧЕ ВЫБОР - | КОГДА ДанныеАдреса.ПолноеНаименование В (&СтраныКлассификатора) - | ТОГДА -2 - | ИНАЧЕ 0 - | КОНЕЦ - | КОНЕЦ КАК Уровень, - | ДанныеАдреса.Позиция - |ИЗ - | ДанныеАдреса КАК ДанныеАдреса"; - - Запрос.УстановитьПараметр("ДанныеАдреса", ДанныеАнализа); - Запрос.УстановитьПараметр("СтраныКлассификатора", Классификатор.ВыгрузитьКолонку("Наименование")); - РезультатЗапроса = Запрос.Выполнить().Выбрать(); - - Пока РезультатЗапроса.Следующий() Цикл - Если РезультатЗапроса.Уровень <> 0 Тогда - ЭлементАдреса = ДанныеАнализа.Найти(РезультатЗапроса.Позиция, "Позиция"); - ЭлементАдреса.Уровень = РезультатЗапроса.Уровень; + Для каждого ЭлементАдреса Из ДанныеАдреса Цикл + Индекс = СтроковыеФункцииКлиентСервер.СтрокаВЧисло(ЭлементАдреса.Наименование); + Если Индекс <> Неопределено И Индекс >= 100000 И Индекс < 1000000 Тогда + ЭлементАдреса.Уровень = -1; + Иначе + Если Классификатор.Найти(ВРег(ЭлементАдреса.Наименование), "Наименование") <> Неопределено Тогда + ЭлементАдреса.Уровень = -2; + КонецЕсли; КонецЕсли; КонецЦикла; @@ -1600,7 +2092,7 @@ Иначе // Проверка на квартиру или здание. Тип = СокрЛП(СтрЗаменить(ЭлементАдреса.Наименование, "№", "")); - Если УправлениеКонтактнойИнформациейКлиентСерверПовтИсп.КодСериализацииОбъектаАдресации(Тип) <> Неопределено Тогда + Если УправлениеКонтактнойИнформациейКлиентСервер.КодСериализацииОбъектаАдресации(Тип) <> Неопределено Тогда // Вставляем в начало, так как порядок результата запроса у нас обратный. НоваяСтрока = ТаблицаЗданийПомещений.Вставить(0); НоваяСтрока.Значение = СокрЛП(СтрЗаменить(ЭлементАдреса.Сокращение, "№", "")); @@ -1686,7 +2178,7 @@ Для Позиция = 1 По СтрДлина(Текст) Цикл ТекущийСимвол = Сред(Текст, Позиция, 1); - ЭтоРазделитель = ?(Разделители = Неопределено, ПустаяСтрока(ТекущийСимвол), Найти(Разделители, ТекущийСимвол) > 0); + ЭтоРазделитель = ?(Разделители = Неопределено, ПустаяСтрока(ТекущийСимвол), СтрНайти(Разделители, ТекущийСимвол) > 0); Если Состояние = 0 И (Не ЭтоРазделитель) Тогда НачалоСлова = Позиция; @@ -1755,7 +2247,7 @@ Возврат КонтактнаяИнформацияИзXML(ЗначенияПолей, ОжидаемыйТип); КонецЕсли; - ПространствоИмен = УправлениеКонтактнойИнформациейКлиентСерверПовтИсп.ПространствоИмен(); + ПространствоИмен = УправлениеКонтактнойИнформациейКлиентСервер.ПространствоИмен(); Результат = ФабрикаXDTO.Создать(ФабрикаXDTO.Тип(ПространствоИмен, "КонтактнаяИнформация")); Результат.Представление = Представление; @@ -1765,6 +2257,9 @@ ИначеЕсли ОжидаемыйТип = Перечисления.ТипыКонтактнойИнформации.ВебСтраница Тогда Результат.Состав = ФабрикаXDTO.Создать(ФабрикаXDTO.Тип(ПространствоИмен, "ВебСайт")); + ИначеЕсли ОжидаемыйТип = Перечисления.ТипыКонтактнойИнформации.Skype Тогда + Результат.Состав = ФабрикаXDTO.Создать(ФабрикаXDTO.Тип(ПространствоИмен, "Skype")); + ИначеЕсли ОжидаемыйТип = Перечисления.ТипыКонтактнойИнформации.Другое Тогда Результат.Состав = ФабрикаXDTO.Создать(ФабрикаXDTO.Тип(ПространствоИмен, "Прочее")); @@ -1877,22 +2372,24 @@ Возврат Информация.Представление; КонецЕсли; - ПространствоИмен = УправлениеКонтактнойИнформациейКлиентСерверПовтИсп.ПространствоИмен(); + ПространствоИмен = УправлениеКонтактнойИнформациейКлиентСервер.ПространствоИмен(); ТипИнформации = Информация.Состав.Тип(); Если ТипИнформации = ФабрикаXDTO.Тип(ПространствоИмен, "Адрес") Тогда Возврат ПредставлениеАдреса(Информация.Состав, ВидИнформации); ИначеЕсли ТипИнформации = ФабрикаXDTO.Тип(ПространствоИмен, "НомерТелефона") Тогда - Возврат ПредставлениеТелефона(Информация.Состав); + ПредставлениеТелефона = ПредставлениеТелефона(Информация.Состав); + Возврат ?(ПустаяСтрока(ПредставлениеТелефона), Информация.Представление, ПредставлениеТелефона); ИначеЕсли ТипИнформации = ФабрикаXDTO.Тип(ПространствоИмен, "НомерФакса") Тогда - Возврат ПредставлениеТелефона(Информация.Состав); + ПредставлениеФакса = ПредставлениеТелефона(Информация.Состав); + Возврат ?(ПустаяСтрока(ПредставлениеТелефона), Информация.Представление, ПредставлениеФакса); ИначеЕсли ТипИнформации = ФабрикаXDTO.Тип(ПространствоИмен, "ЭлектроннаяПочта") Тогда Возврат Строка(Информация.Состав.Значение); КонецЕсли; - // Заглушка на другие типы + //// Заглушка на другие типы Возврат Строка(Информация.Состав.Значение); КонецЕсли; @@ -1931,7 +2428,7 @@ ТипXDTO = Тип("ОбъектXDTO"); Если ТипЗнч(ОбъектИнформации) = ТипXDTO Тогда - ПространствоИмен = УправлениеКонтактнойИнформациейКлиентСерверПовтИсп.ПространствоИмен(); + ПространствоИмен = УправлениеКонтактнойИнформациейКлиентСервер.ПространствоИмен(); Если ОбъектИнформации.Тип() = ФабрикаXDTO.Тип(ПространствоИмен, "КонтактнаяИнформация") Тогда Адрес = ОбъектИнформации.Состав; @@ -1966,7 +2463,7 @@ ДополнительныйЭлементАдреса = НайтиДополнительныйЭлементАдреса(АдресРФ); Результат.ДополнительныйЭлемент = ДополнительныйЭлементАдреса; - Результат.ПодчиненныйЭлемент = ДополнительныйЭлементАдреса(АдресРФ, УправлениеКонтактнойИнформациейКлиентСерверПовтИсп.XPathДополнительногоОбъектаАдресации(91)); + Результат.ПодчиненныйЭлемент = ДополнительныйЭлементАдреса(АдресРФ, УправлениеКонтактнойИнформациейКлиентСервер.XPathДополнительногоОбъектаАдресации(91)); Возврат Результат; @@ -1990,7 +2487,7 @@ Если НовоеЗначение = Неопределено Тогда // Чтение - Результат = АдресРФ.Получить( УправлениеКонтактнойИнформациейКлиентСерверПовтИсп.XPathПочтовогоИндекса() ); + Результат = АдресРФ.Получить( УправлениеКонтактнойИнформациейКлиентСервер.XPathПочтовогоИндекса() ); Если Результат <> Неопределено Тогда Результат = Результат.Значение; КонецЕсли; @@ -1998,15 +2495,15 @@ КонецЕсли; // Запись - КодИндекса = УправлениеКонтактнойИнформациейКлиентСерверПовтИсп.КодСериализацииПочтовогоИндекса(); + КодИндекса = УправлениеКонтактнойИнформациейКлиентСервер.КодСериализацииПочтовогоИндекса(); - ЗаписьИндекса = АдресРФ.Получить(УправлениеКонтактнойИнформациейКлиентСерверПовтИсп.XPathПочтовогоИндекса()); + ЗаписьИндекса = АдресРФ.Получить(УправлениеКонтактнойИнформациейКлиентСервер.XPathПочтовогоИндекса()); Если ЗаписьИндекса = Неопределено Тогда - ЗаписьИндекса = АдресРФ.ДопАдрЭл.Добавить( ФабрикаXDTO.Создать(XDTOАдрес.ДопАдрЭл.ВладеющееСвойство.Тип) ); + ЗаписьИндекса = АдресРФ.ДопАдрЭл.Добавить(ФабрикаXDTO.Создать(XDTOАдрес.ДопАдрЭл.ВладеющееСвойство.Тип)); ЗаписьИндекса.ТипАдрЭл = КодИндекса; КонецЕсли; - ЗаписьИндекса.Значение = НовоеЗначение; + ЗаписьИндекса.Значение = СокрЛП(НовоеЗначение); Возврат НовоеЗначение; КонецФункции @@ -2036,24 +2533,20 @@ // Возвращает дополнительный адреса. // Функция НайтиДополнительныйЭлементАдреса(АдресРФ) Экспорт - ДополнительныйЭлементАдреса = Неопределено; - ДополнительныйЭлементАдреса = ДополнительныйЭлементАдреса(АдресРФ, УправлениеКонтактнойИнформациейКлиентСерверПовтИсп.XPathДополнительногоОбъектаАдресации(90, "СНТ")); + ДополнительныйЭлементАдреса = ДополнительныйЭлементАдреса(АдресРФ, УправлениеКонтактнойИнформациейКлиентСервер.XPathДополнительногоОбъектаАдресации(90, "СНТ")); Если ДополнительныйЭлементАдреса = Неопределено Тогда - ДополнительныйЭлементАдреса = ДополнительныйЭлементАдреса(АдресРФ, УправлениеКонтактнойИнформациейКлиентСерверПовтИсп.XPathДополнительногоОбъектаАдресации(90, "ГСК")); + ДополнительныйЭлементАдреса = ДополнительныйЭлементАдреса(АдресРФ, УправлениеКонтактнойИнформациейКлиентСервер.XPathДополнительногоОбъектаАдресации(90, "ГСК")); Если ДополнительныйЭлементАдреса = Неопределено Тогда - ДополнительныйЭлементАдреса = ДополнительныйЭлементАдреса(АдресРФ, УправлениеКонтактнойИнформациейКлиентСерверПовтИсп.XPathДополнительногоОбъектаАдресации(90, "ТЕР")); + ДополнительныйЭлементАдреса = ДополнительныйЭлементАдреса(АдресРФ, УправлениеКонтактнойИнформациейКлиентСервер.XPathДополнительногоОбъектаАдресации(90, "ТЕР")); Если ДополнительныйЭлементАдреса = Неопределено Тогда - ДополнительныйЭлементАдреса = ДополнительныйЭлементАдреса(АдресРФ, УправлениеКонтактнойИнформациейКлиентСерверПовтИсп.XPathДополнительногоОбъектаАдресации(90)); + ДополнительныйЭлементАдреса = ДополнительныйЭлементАдреса(АдресРФ, УправлениеКонтактнойИнформациейКлиентСервер.XPathДополнительногоОбъектаАдресации(90)); КонецЕсли; КонецЕсли; КонецЕсли; - Возврат ДополнительныйЭлементАдреса; - КонецФункции - // Добавляет дополнительные элемент адреса по его пути. // Процедура ДобавитьДополнительныеЭлементыАдреса(XDTOАдрес, НовоеЗначение, Уровень) Экспорт @@ -2066,11 +2559,11 @@ Если Уровень = 90 Тогда НаименованиеИСокращение = УправлениеКонтактнойИнформациейКлиентСервер.НаименованиеСокращение(НовоеЗначение); - КодСериализацииДополнительногоОбъектаАдресации = УправлениеКонтактнойИнформациейКлиентСерверПовтИсп.КодСериализацииДополнительногоОбъектаАдресации(90, НаименованиеИСокращение.Сокращение); + КодСериализацииДополнительногоОбъектаАдресации = УправлениеКонтактнойИнформациейКлиентСервер.КодСериализацииДополнительногоОбъектаАдресации(90, НаименованиеИСокращение.Сокращение); ИначеЕсли Уровень = 91 Тогда - КодСериализацииДополнительногоОбъектаАдресации = УправлениеКонтактнойИнформациейКлиентСерверПовтИсп.КодСериализацииДополнительногоОбъектаАдресации(91); + КодСериализацииДополнительногоОбъектаАдресации = УправлениеКонтактнойИнформациейКлиентСервер.КодСериализацииДополнительногоОбъектаАдресации(91); Иначе - КодСериализацииДополнительногоОбъектаАдресации = УправлениеКонтактнойИнформациейКлиентСерверПовтИсп.КодСериализацииДополнительногоОбъектаАдресации(0); + КодСериализацииДополнительногоОбъектаАдресации = УправлениеКонтактнойИнформациейКлиентСервер.КодСериализацииДополнительногоОбъектаАдресации(0); КонецЕсли; XPathЭлемента = "ДопАдрЭл[ТипАдрЭл='" + КодСериализацииДополнительногоОбъектаАдресации + "']"; @@ -2082,19 +2575,21 @@ ЗначениеПоля.Значение = НовоеЗначение; КонецПроцедуры - -// Возвращает почтовый индекс для адреса по данным классификатора. + +// Возвращает почтовый индекс и ОКТМО для адреса по данным классификатора. // // Параметры: // XDTOАдрес - ОбъектXDTO - Контактная информация или XDTO адреса. // // Возвращаемое значение: -// Строка - почтовый индекс. +// Структура - почтовый индекс и ОКТМО. +// * Индекс - почтовый индекс +// * ОКТМО - ОКТМО // Неопределено - индекс не найден или адрес иностранный. // -Функция ОпределитьПочтовыйИндексАдреса(XDTOАдрес, Идентификатор = Неопределено) Экспорт +Функция ОпределитьПочтовыйИндексИОКТМОАдреса(XDTOАдрес, Идентификатор = Неопределено) Экспорт - ПространствоИмен = УправлениеКонтактнойИнформациейКлиентСерверПовтИсп.ПространствоИмен(); + ПространствоИмен = УправлениеКонтактнойИнформациейКлиентСервер.ПространствоИмен(); Если XDTOАдрес.Тип() = ФабрикаXDTO.Тип(ПространствоИмен, "Адрес") Тогда XDTOАдресРФ = XDTOАдрес.Состав; @@ -2106,14 +2601,14 @@ Возврат Неопределено;// Иностранный или пустой адрес. КонецЕсли; - Индекс = Неопределено; + ИндексИОКМТО = Новый Структура("Индекс, ОКТМО"); Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.АдресныйКлассификатор") Тогда // Вызов анализа и возврат индекса варианта. МодульАдресныйКлассификаторСлужебный = ОбщегоНазначения.ОбщийМодуль("АдресныйКлассификаторСлужебный"); - Индекс = МодульАдресныйКлассификаторСлужебный.ИндексАдресаПоЧастямАдреса(XDTOАдресРФ, Идентификатор); + ИндексИОКМТО = МодульАдресныйКлассификаторСлужебный.ИндексИОКТМОАдресаПоЧастямАдреса(XDTOАдресРФ, Идентификатор); КонецЕсли; - Возврат Индекс; + Возврат ИндексИОКМТО; КонецФункции // Читает и устанавливает район адреса. @@ -2131,7 +2626,7 @@ // Чтение Результат = Неопределено; - ПространствоИмен = УправлениеКонтактнойИнформациейКлиентСерверПовтИсп.ПространствоИмен(); + ПространствоИмен = УправлениеКонтактнойИнформациейКлиентСервер.ПространствоИмен(); XDTOТип = XDTOАдрес.Тип(); Если XDTOТип = ФабрикаXDTO.Тип(ПространствоИмен, "АдресРФ") Тогда @@ -2141,7 +2636,7 @@ КонецЕсли; Если ТипЗнч(АдресРФ) = Тип("ОбъектXDTO") Тогда - Возврат ПолучитьXDTOРеквизитОбъекта(АдресРФ, УправлениеКонтактнойИнформациейКлиентСерверПовтИсп.XPathРайона() ); + Возврат ПолучитьXDTOРеквизитОбъекта(АдресРФ, УправлениеКонтактнойИнформациейКлиентСервер.XPathРайона()); КонецЕсли; Возврат Неопределено; @@ -2204,7 +2699,7 @@ Для Каждого ДопЭлемент Из АдресРФ.ДопАдрЭл Цикл Если ДопЭлемент.Номер <> Неопределено Тогда КодОбъекта = ДопЭлемент.Номер.Тип; - ТипОбъекта = УправлениеКонтактнойИнформациейКлиентСерверПовтИсп.ТипОбъектаПоКодуСериализации(КодОбъекта); + ТипОбъекта = УправлениеКонтактнойИнформациейКлиентСервер.ТипОбъектаПоКодуСериализации(КодОбъекта); Если ТипОбъекта <> Неопределено Тогда Вид = ТипОбъекта.Тип; Если Вид = 1 Или Вид = 2 Тогда @@ -2218,7 +2713,7 @@ НоваяСтрока.Тип = ТипОбъекта.Наименование; НоваяСтрока.Значение = ДопЭлемент.Номер.Значение; НоваяСтрока.Сокращение = ТипОбъекта.Сокращение; - НоваяСтрока.ПутьXPath = УправлениеКонтактнойИнформациейКлиентСерверПовтИсп.XPathНомераДополнительногоОбъектаАдресации(НоваяСтрока.Тип); + НоваяСтрока.ПутьXPath = УправлениеКонтактнойИнформациейКлиентСервер.XPathНомераДополнительногоОбъектаАдресации(НоваяСтрока.Тип); НоваяСтрока.Вид = Вид; КонецЕсли; КонецЕсли; @@ -2287,19 +2782,19 @@ Адрес = Новый Массив; Адрес.Добавить(АдресРФ.Улица); - ДополнительныйЭлементАдреса = ДополнительныйЭлементАдреса(АдресРФ, УправлениеКонтактнойИнформациейКлиентСерверПовтИсп.XPathДополнительногоОбъектаАдресации(90, "СНТ")); + ДополнительныйЭлементАдреса = ДополнительныйЭлементАдреса(АдресРФ, УправлениеКонтактнойИнформациейКлиентСервер.XPathДополнительногоОбъектаАдресации(90, "СНТ")); Если ДополнительныйЭлементАдреса = Неопределено Тогда - ДополнительныйЭлементАдреса = ДополнительныйЭлементАдреса(АдресРФ, УправлениеКонтактнойИнформациейКлиентСерверПовтИсп.XPathДополнительногоОбъектаАдресации(90, "ГСК")); + ДополнительныйЭлементАдреса = ДополнительныйЭлементАдреса(АдресРФ, УправлениеКонтактнойИнформациейКлиентСервер.XPathДополнительногоОбъектаАдресации(90, "ГСК")); Если ДополнительныйЭлементАдреса = Неопределено Тогда - ДополнительныйЭлементАдреса = ДополнительныйЭлементАдреса(АдресРФ, УправлениеКонтактнойИнформациейКлиентСерверПовтИсп.XPathДополнительногоОбъектаАдресации(90, "ТЕР")); + ДополнительныйЭлементАдреса = ДополнительныйЭлементАдреса(АдресРФ, УправлениеКонтактнойИнформациейКлиентСервер.XPathДополнительногоОбъектаАдресации(90, "ТЕР")); Если ДополнительныйЭлементАдреса = Неопределено Тогда - ДополнительныйЭлементАдреса = ДополнительныйЭлементАдреса(АдресРФ, УправлениеКонтактнойИнформациейКлиентСерверПовтИсп.XPathДополнительногоОбъектаАдресации(90)); + ДополнительныйЭлементАдреса = ДополнительныйЭлементАдреса(АдресРФ, УправлениеКонтактнойИнформациейКлиентСервер.XPathДополнительногоОбъектаАдресации(90)); КонецЕсли; КонецЕсли; КонецЕсли; Адрес.Добавить(ДополнительныйЭлементАдреса); - Адрес.Добавить(ДополнительныйЭлементАдреса(АдресРФ, УправлениеКонтактнойИнформациейКлиентСерверПовтИсп.XPathДополнительногоОбъектаАдресации(91))); + Адрес.Добавить(ДополнительныйЭлементАдреса(АдресРФ, УправлениеКонтактнойИнформациейКлиентСервер.XPathДополнительногоОбъектаАдресации(91))); Возврат УправлениеКонтактнойИнформациейКлиентСервер.СформироватьПолноеНаименование(Адрес); @@ -2312,14 +2807,14 @@ // Функция ПредставлениеАдреса(Знач XDTOАдрес, Знач ВидИнформации) Экспорт - ПространствоИмен = УправлениеКонтактнойИнформациейКлиентСерверПовтИсп.ПространствоИмен(); + ПространствоИмен = УправлениеКонтактнойИнформациейКлиентСервер.ПространствоИмен(); АдресРФ = XDTOАдрес.Состав; Страна = СокрЛП(XDTOАдрес.Страна); Если ЭтоРоссийскийАдрес(АдресРФ) Тогда // Значимые части Адрес = Новый Массив; - Адрес.Добавить(ДополнительныйЭлементАдреса(АдресРФ, УправлениеКонтактнойИнформациейКлиентСерверПовтИсп.XPathПочтовогоИндекса())); + Адрес.Добавить(ДополнительныйЭлементАдреса(АдресРФ, УправлениеКонтактнойИнформациейКлиентСервер.XPathПочтовогоИндекса())); Адрес.Добавить(АдресРФ.СубъектРФ); Если ВидИнформации.ФорматАдреса = "ФИАС" Тогда Адрес.Добавить(АдресРФ.Округ); @@ -2332,19 +2827,19 @@ Адрес.Добавить(АдресРФ.НаселПункт); Адрес.Добавить(АдресРФ.Улица); - ДополнительныйЭлементАдреса = ДополнительныйЭлементАдреса(АдресРФ, УправлениеКонтактнойИнформациейКлиентСерверПовтИсп.XPathДополнительногоОбъектаАдресации(90, "СНТ")); + ДополнительныйЭлементАдреса = ДополнительныйЭлементАдреса(АдресРФ, УправлениеКонтактнойИнформациейКлиентСервер.XPathДополнительногоОбъектаАдресации(90, "СНТ")); Если ДополнительныйЭлементАдреса = Неопределено Тогда - ДополнительныйЭлементАдреса = ДополнительныйЭлементАдреса(АдресРФ, УправлениеКонтактнойИнформациейКлиентСерверПовтИсп.XPathДополнительногоОбъектаАдресации(90, "ГСК")); + ДополнительныйЭлементАдреса = ДополнительныйЭлементАдреса(АдресРФ, УправлениеКонтактнойИнформациейКлиентСервер.XPathДополнительногоОбъектаАдресации(90, "ГСК")); Если ДополнительныйЭлементАдреса = Неопределено Тогда - ДополнительныйЭлементАдреса = ДополнительныйЭлементАдреса(АдресРФ, УправлениеКонтактнойИнформациейКлиентСерверПовтИсп.XPathДополнительногоОбъектаАдресации(90, "ТЕР")); + ДополнительныйЭлементАдреса = ДополнительныйЭлементАдреса(АдресРФ, УправлениеКонтактнойИнформациейКлиентСервер.XPathДополнительногоОбъектаАдресации(90, "ТЕР")); Если ДополнительныйЭлементАдреса = Неопределено Тогда - ДополнительныйЭлементАдреса = ДополнительныйЭлементАдреса(АдресРФ, УправлениеКонтактнойИнформациейКлиентСерверПовтИсп.XPathДополнительногоОбъектаАдресации(90)); + ДополнительныйЭлементАдреса = ДополнительныйЭлементАдреса(АдресРФ, УправлениеКонтактнойИнформациейКлиентСервер.XPathДополнительногоОбъектаАдресации(90)); КонецЕсли; КонецЕсли; КонецЕсли; Адрес.Добавить(ДополнительныйЭлементАдреса); - Адрес.Добавить(ДополнительныйЭлементАдреса(АдресРФ, УправлениеКонтактнойИнформациейКлиентСерверПовтИсп.XPathДополнительногоОбъектаАдресации(91))); + Адрес.Добавить(ДополнительныйЭлементАдреса(АдресРФ, УправлениеКонтактнойИнформациейКлиентСервер.XPathДополнительногоОбъектаАдресации(91))); Представление = УправлениеКонтактнойИнформациейКлиентСервер.СформироватьПолноеНаименование(Адрес); @@ -2365,7 +2860,7 @@ Помещения.Добавить(СокрЛП(Строка.Сокращение + " " + Строка.Значение)); Представление = УправлениеКонтактнойИнформациейКлиентСервер.СформироватьПолноеНаименование(Помещения); КонецЦикла; - + // При пустом представлении страну нет смысла выводить. Если ПустаяСтрока(Представление) Тогда Страна = ""; @@ -2373,6 +2868,18 @@ Иначе // Это иностранный адрес Представление = СокрЛП(АдресРФ); + + Если СтрЧислоВхождений(Представление, ",") = 9 Тогда + // Удаляем пустые значения и страну + ПредставлениеМассивом = СтрРазделить(Представление, ",", Ложь); + Если ПредставлениеМассивом.Количество() > 0 Тогда + Для Индекс = 0 По ПредставлениеМассивом.ВГраница() Цикл + ПредставлениеМассивом[Индекс] = СокрЛП(ПредставлениеМассивом[Индекс]); + КонецЦикла; + ПредставлениеМассивом.Удалить(0); // удаляем страну + Представление = СтрСоединить(ПредставлениеМассивом, ", "); + КонецЕсли; + КонецЕсли; КонецЕсли; Если ВидИнформации.ВключатьСтрануВПредставление Тогда @@ -2382,6 +2889,7 @@ Представление = УправлениеКонтактнойИнформациейКлиентСервер.СформироватьПолноеНаименование(ДобавлениеСтраны); КонецЕсли; Возврат Представление; + КонецФункции // Возвращает перечень ошибок для адреса. @@ -2427,7 +2935,7 @@ ФлагиПроверки = ВидИнформации; КонецЕсли; - ПространствоИмен = УправлениеКонтактнойИнформациейКлиентСерверПовтИсп.ПространствоИмен(); + ПространствоИмен = УправлениеКонтактнойИнформациейКлиентСервер.ПространствоИмен(); Если ТипЗнч(АдресРФ) <> Тип("ОбъектXDTO") Или АдресРФ.Тип() <> ФабрикаXDTO.Тип(ПространствоИмен, "АдресРФ") Тогда // Адрес за пределами РФ Результат = ?(РезультатГруппами, Новый Массив, Новый СписокЗначений); @@ -2436,8 +2944,7 @@ ТекстОшибки = НСтр("ru = 'Адрес должен быть только российским.'"); Если РезультатГруппами Тогда Результат.Добавить(Новый Структура("Поля, ТипОшибки, Сообщение", Новый Массив, - "НеЗаполненыОбязательныеПоля", ТекстОшибки - )); + "НеЗаполненыОбязательныеПоля", ТекстОшибки)); Иначе Результат.Добавить("/", ТекстОшибки); КонецЕсли; @@ -2456,8 +2963,7 @@ Если РезультатГруппами Тогда Результат = Новый Массив; Результат.Добавить(Новый Структура("Поля, ТипОшибки, Сообщение", Новый Массив, - "НеЗаполненыОбязательныеПоля", ТекстОшибки - )); + "НеЗаполненыОбязательныеПоля", ТекстОшибки)); Иначе Результат = Новый СписокЗначений; Результат.Добавить("/", ТекстОшибки); @@ -2474,7 +2980,7 @@ ПроверятьКлассификатор = Истина; Для Каждого Группа Из ВсеОшибки Цикл - Если Найти("НеУказаныСокращенияПолей, НедопустимыеСимволыПолей", Группа.ТипОшибки) > 0 Тогда + Если СтрНайти("НеУказаныСокращенияПолей, НедопустимыеСимволыПолей", Группа.ТипОшибки) > 0 Тогда // Некорректные данные в полях, проверять их по классификатору нет смысла. ПроверятьКлассификатор = Ложь; Прервать; @@ -2491,8 +2997,7 @@ КоличествоОшибок = ОшибкиКлассификатора.Количество(); Если КоличествоОшибок = 1 И ОшибкиКлассификатора[0].Значение <> Неопределено - И ОшибкиКлассификатора[0].Значение.ПутьXPath = Неопределено - Тогда + И ОшибкиКлассификатора[0].Значение.ПутьXPath = Неопределено Тогда ВсеОшибки.Добавить(ГруппаОшибокАдреса(НаименованиеГруппыОшибки, ОшибкиКлассификатора[0].Представление)); ИначеЕсли КоличествоОшибок > 0 Тогда @@ -2573,9 +3078,8 @@ Результат.Добавить(ГруппаОшибокАдреса("ПредставлениеНеСоответствуетНаборуПолей", НСтр("ru = 'Адрес не соответствует значениям в наборе полей.'"))); ДобавитьОшибкуЗаполненияАдреса(Результат[0], "", - СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Представление адреса для вида контактной информации ""%1"" отличается от данных в адресе.'"), - Строка(ВидИнформации.Наименование))); + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Представление адреса для вида контактной информации ""%1"" отличается от данных в адресе.'"), + Строка(ВидИнформации.Наименование))); КонецЕсли; КонецЕсли; @@ -2598,7 +3102,7 @@ // 2) Индекс, Регион, Дом должны быть заполнены. Индекс = ПочтовыйИндексАдреса(АдресРФ); Если ПустаяСтрока(Индекс) Тогда - ДобавитьОшибкуЗаполненияАдреса(НеЗаполненыОбязательныеПоля, УправлениеКонтактнойИнформациейКлиентСерверПовтИсп.XPathПочтовогоИндекса(), + ДобавитьОшибкуЗаполненияАдреса(НеЗаполненыОбязательныеПоля, УправлениеКонтактнойИнформациейКлиентСервер.XPathПочтовогоИндекса(), НСтр("ru = 'Не указан почтовый индекс.'"), "Индекс"); КонецЕсли; @@ -2621,10 +3125,9 @@ КонецЦикла; Если ЗданиеНеУказано Тогда ДобавитьОшибкуЗаполненияАдреса(НеЗаполненыОбязательныеПоля, - УправлениеКонтактнойИнформациейКлиентСерверПовтИсп.XPathНомераДополнительногоОбъектаАдресации("Дом"), + УправлениеКонтактнойИнформациейКлиентСервер.XPathНомераДополнительногоОбъектаАдресации("Дом"), НСтр("ru = 'Не указан дом или корпус'"), - НСтр("ru = 'Дом'") - ); + НСтр("ru = 'Дом'")); КонецЕсли; Иначе @@ -2633,15 +3136,13 @@ ДанныеДома = ЗданияПомещения.Здания.Найти(1, "Вид"); // 1 - Вид по признаку владения. Если ДанныеДома = Неопределено Тогда ДобавитьОшибкуЗаполненияАдреса(НеЗаполненыОбязательныеПоля, - УправлениеКонтактнойИнформациейКлиентСерверПовтИсп.XPathНомераДополнительногоОбъектаАдресации("Дом"), + УправлениеКонтактнойИнформациейКлиентСервер.XPathНомераДополнительногоОбъектаАдресации("Дом"), НСтр("ru = 'Не указан дом или владение (домовладение).'"), - НСтр("ru = 'Дом'") - ); + НСтр("ru = 'Дом'")); ИначеЕсли ПустаяСтрока(ДанныеДома.Значение) Тогда ДобавитьОшибкуЗаполненияАдреса(НеЗаполненыОбязательныеПоля, ДанныеДома.ПутьXPath, НСтр("ru = 'Не заполнено значение дома или владения (домовладения).'"), - НСтр("ru = 'Дом'") - ); + НСтр("ru = 'Дом'")); КонецЕсли; КонецЕсли; @@ -2651,52 +3152,40 @@ // - не длинней 50 символов // - только кириллица - ДопустимоКромеКириллицы = "/,-. 0123456789_"; + ДопустимоКромеКириллицы = "/,-. 0123456789_N"; // Регион Если Не ПустаяСтрока(Регион) Тогда Поле = "СубъектРФ"; Если ПустаяСтрока(УправлениеКонтактнойИнформациейКлиентСервер.Сокращение(Регион)) Тогда ДобавитьОшибкуЗаполненияАдреса(НеУказаныСокращенияПолей, "СубъектРФ", - СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Не указано сокращение в названии региона ""%1"".'"), Регион - ), НСтр("ru = 'Регион'")); + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Не указано сокращение в названии региона ""%1"".'"), Регион), НСтр("ru = 'Регион'")); КонецЕсли; Если СтрДлина(Регион) > 50 Тогда ДобавитьОшибкуЗаполненияАдреса(НеСоответствуетДлинаПолей, Поле, - СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Название региона ""%1"" должно быть короче 50 символов.'"), Регион - ), НСтр("ru = 'Регион'")); + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Название региона ""%1"" должно быть короче 50 символов.'"),Регион), НСтр("ru = 'Регион'")); КонецЕсли; Если Не СтроковыеФункцииКлиентСервер.ТолькоКириллицаВСтроке(Регион, Ложь, ДопустимоКромеКириллицы) Тогда ДобавитьОшибкуЗаполненияАдреса(НедопустимыеСимволыПолей, Поле, - СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'В названии региона ""%1"" есть не кириллические символы.'"), Регион - ), НСтр("ru = 'Регион'")); + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'В названии региона ""%1"" есть не кириллические символы.'"), Регион), НСтр("ru = 'Регион'")); КонецЕсли КонецЕсли; // Район Район = РайонАдреса(АдресРФ); Если Не ПустаяСтрока(Район) Тогда - Поле = УправлениеКонтактнойИнформациейКлиентСерверПовтИсп.XPathРайона(); + Поле = УправлениеКонтактнойИнформациейКлиентСервер.XPathРайона(); Если ПустаяСтрока(УправлениеКонтактнойИнформациейКлиентСервер.Сокращение(Район)) Тогда ДобавитьОшибкуЗаполненияАдреса(НеУказаныСокращенияПолей, Поле, - СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Не указано сокращение в названии района ""%1""'."), Район - ), НСтр("ru = 'Район'")); + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Не указано сокращение в названии района ""%1"".'"), Район), НСтр("ru = 'Район'")); КонецЕсли; Если СтрДлина(Район) > 50 Тогда ДобавитьОшибкуЗаполненияАдреса(НеСоответствуетДлинаПолей, Поле, - СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Название района ""%1"" должно быть короче 50 символов.'"), Район - ), НСтр("ru = 'Район'")); + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Название района ""%1"" должно быть короче 50 символов.'"), Район), НСтр("ru = 'Район'")); КонецЕсли; Если Не СтроковыеФункцииКлиентСервер.ТолькоКириллицаВСтроке(Район, Ложь, ДопустимоКромеКириллицы) Тогда ДобавитьОшибкуЗаполненияАдреса(НедопустимыеСимволыПолей, Поле, - СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'В названии района ""%1"" есть не кириллические символы.'"), Район - ), НСтр("ru = 'Район'")); + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'В названии района ""%1"" есть не кириллические символы.'"), Район), НСтр("ru = 'Район'")); КонецЕсли; КонецЕсли; @@ -2706,21 +3195,15 @@ Поле = "Город"; Если ПустаяСтрока(УправлениеКонтактнойИнформациейКлиентСервер.Сокращение(Город)) Тогда ДобавитьОшибкуЗаполненияАдреса(НеУказаныСокращенияПолей, Поле, - СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Не указано сокращение в названии города ""%1"".'"), Город - ), НСтр("ru = 'Город'")); + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Не указано сокращение в названии города ""%1"".'"), Город), НСтр("ru = 'Город'")); КонецЕсли; Если СтрДлина(Город) > 50 Тогда ДобавитьОшибкуЗаполненияАдреса(НеСоответствуетДлинаПолей, Поле, - СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Название города ""%1"" должно быть короче 50 символов.'"), Город - ), НСтр("ru = 'Город'")); + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Название города ""%1"" должно быть короче 50 символов.'"), Город), НСтр("ru = 'Город'")); КонецЕсли; Если Не СтроковыеФункцииКлиентСервер.ТолькоКириллицаВСтроке(Город, Ложь, ДопустимоКромеКириллицы) Тогда ДобавитьОшибкуЗаполненияАдреса(НедопустимыеСимволыПолей, Поле, - СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'В названии города ""%1"" есть не кириллические символы.'"), Город - ), НСтр("ru = 'Город'")); + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'В названии города ""%1"" есть не кириллические символы.'"), Город), НСтр("ru = 'Город'")); КонецЕсли; КонецЕсли; @@ -2730,21 +3213,18 @@ Поле = "НаселПункт"; Если ПустаяСтрока(УправлениеКонтактнойИнформациейКлиентСервер.Сокращение(НаселенныйПункт)) Тогда ДобавитьОшибкуЗаполненияАдреса(НеУказаныСокращенияПолей, Поле, - СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Не указано сокращение в названии населенного пункта ""%1"".'"), НаселенныйПункт - ), НСтр("ru = 'Населенный пункт'")); + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Не указано сокращение в названии населенного пункта ""%1"".'"), НаселенныйПункт), + НСтр("ru = 'Населенный пункт'")); КонецЕсли; Если СтрДлина(НаселенныйПункт) > 50 Тогда ДобавитьОшибкуЗаполненияАдреса(НеСоответствуетДлинаПолей, Поле, - СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Название населенного пункта ""%1"" должно быть короче 50 символов.'"), НаселенныйПункт - ), НСтр("ru = 'Населенный пункт'")); + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Название населенного пункта ""%1"" должно быть короче 50 символов.'"), НаселенныйПункт), + НСтр("ru = 'Населенный пункт'")); КонецЕсли; Если Не СтроковыеФункцииКлиентСервер.ТолькоКириллицаВСтроке(НаселенныйПункт, Ложь, ДопустимоКромеКириллицы) Тогда ДобавитьОшибкуЗаполненияАдреса(НедопустимыеСимволыПолей, Поле, - СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'В названии населенного пункта ""%1"" есть не кириллические символы.'"), НаселенныйПункт - ), НСтр("ru = 'Населенный пункт'")); + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'В названии населенного пункта ""%1"" есть не кириллические символы.'"), НаселенныйПункт), + НСтр("ru = 'Населенный пункт'")); КонецЕсли; КонецЕсли; @@ -2754,21 +3234,15 @@ Поле = "Улица"; Если ПустаяСтрока(УправлениеКонтактнойИнформациейКлиентСервер.Сокращение(Улица)) Тогда ДобавитьОшибкуЗаполненияАдреса(НеУказаныСокращенияПолей, Поле, - СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Не указано сокращение в названии улицы ""%1"".'"), Улица - ), НСтр("ru = 'Улица'")); + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Не указано сокращение в названии улицы ""%1"".'"), Улица), НСтр("ru = 'Улица'")); КонецЕсли; Если СтрДлина(Район) > 50 Тогда ДобавитьОшибкуЗаполненияАдреса(НеСоответствуетДлинаПолей, Поле, - СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Название улицы ""%1"" должно быть короче 50 символов.'"), Улица - ), НСтр("ru = 'Улица'")); + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Название улицы ""%1"" должно быть короче 50 символов.'"), Улица), НСтр("ru = 'Улица'")); КонецЕсли; Если Не СтроковыеФункцииКлиентСервер.ТолькоКириллицаВСтроке(Улица, Ложь, ДопустимоКромеКириллицы) Тогда ДобавитьОшибкуЗаполненияАдреса(НедопустимыеСимволыПолей, Поле, - СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'В названии улицы ""%1"" есть не кириллические символы.'"), Улица - ), НСтр("ru = 'Улица'")); + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'В названии улицы ""%1"" есть не кириллические символы.'"), Улица), НСтр("ru = 'Улица'")); КонецЕсли; КонецЕсли; @@ -2778,32 +3252,28 @@ Поле = "Улица"; Если ПустаяСтрока(УправлениеКонтактнойИнформациейКлиентСервер.Сокращение(ДополнительныйЭлемент)) Тогда ДобавитьОшибкуЗаполненияАдреса(НеУказаныСокращенияПолей, Поле, - СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Не указано сокращение у дополнительного элемента ""%1"".'"), ДополнительныйЭлемент - ), НСтр("ru = 'Улица'")); + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Не указано сокращение у дополнительного элемента ""%1"".'"), ДополнительныйЭлемент), + НСтр("ru = 'Улица'")); КонецЕсли; Если СтрДлина(Район) > 50 Тогда ДобавитьОшибкуЗаполненияАдреса(НеСоответствуетДлинаПолей, Поле, - СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Название дополнительного элемента ""%1"" должно быть короче 50 символов.'"), ДополнительныйЭлемент - ), НСтр("ru = 'ДополнительныйЭлемент'")); + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Название дополнительного элемента ""%1"" должно быть короче 50 символов.'"), ДополнительныйЭлемент), + НСтр("ru = 'ДополнительныйЭлемент'")); КонецЕсли; Если Не СтроковыеФункцииКлиентСервер.ТолькоКириллицаВСтроке(ДополнительныйЭлемент, Ложь, ДопустимоКромеКириллицы) Тогда ДобавитьОшибкуЗаполненияАдреса(НедопустимыеСимволыПолей, Поле, - СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'В названии дополнительного элемента ""%1"" есть не кириллические символы.'"), ДополнительныйЭлемент - ), НСтр("ru = 'ДополнительныйЭлемент'")); + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'В названии дополнительного элемента ""%1"" есть не кириллические символы.'"), ДополнительныйЭлемент), + НСтр("ru = 'ДополнительныйЭлемент'")); КонецЕсли; КонецЕсли; // 4) Индекс - если есть, то 6 цифр. Если Не ПустаяСтрока(Индекс) Тогда - Поле = УправлениеКонтактнойИнформациейКлиентСерверПовтИсп.XPathПочтовогоИндекса(); + Поле = УправлениеКонтактнойИнформациейКлиентСервер.XPathПочтовогоИндекса(); Если СтрДлина(Индекс) <> 6 Или Не СтроковыеФункцииКлиентСервер.ТолькоЦифрыВСтроке(Индекс) Тогда ДобавитьОшибкуЗаполненияАдреса(НеСоответствуетДлинаПолей, Поле, НСтр("ru = 'Почтовый индекс должен состоять из 6 цифр.'"), - НСтр("ru = 'Индекс'") - ); + НСтр("ru = 'Индекс'")); КонецЕсли; КонецЕсли; @@ -2811,17 +3281,13 @@ Для Каждого ДанныеЗдания Из ЗданияПомещения.Здания Цикл Если СтрДлина(ДанныеЗдания.Значение) > 10 Тогда ДобавитьОшибкуЗаполненияАдреса(НеСоответствуетДлинаПолей, ДанныеЗдания.ПутьXPath, - СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Значение поля ""%1"" должно быть короче 10 символов.'"), ДанныеЗдания.Тип - ), ДанныеЗдания.Тип); + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Значение поля ""%1"" должно быть короче 10 символов.'"), ДанныеЗдания.Тип), ДанныеЗдания.Тип); КонецЕсли; КонецЦикла; Для Каждого ДанныеПомещения Из ЗданияПомещения.Помещения Цикл Если СтрДлина(ДанныеПомещения.Значение) > 10 Тогда ДобавитьОшибкуЗаполненияАдреса(НеСоответствуетДлинаПолей, ДанныеПомещения.ПутьXPath, - СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Значение поля ""%1"" должно быть короче 10 символов.'"), ДанныеПомещения.Тип - ), ДанныеПомещения.Тип); + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Значение поля ""%1"" должно быть короче 10 символов.'"), ДанныеПомещения.Тип), ДанныеПомещения.Тип); КонецЕсли; КонецЦикла; @@ -2830,24 +3296,20 @@ Если НазванияГородовФедеральногоЗначения().Найти(ВРег(Регион)) = Неопределено Тогда ДобавитьОшибкуЗаполненияАдреса(НеЗаполненыОбязательныеПоля, "Город", НСтр("ru = 'Город может быть не указан только в регионе - городе федерального значения.'"), - НСтр("ru = 'Город'") - ); + НСтр("ru = 'Город'")); ДобавитьОшибкуЗаполненияАдреса(НеЗаполненыОбязательныеПоля, "НаселПункт", НСтр("ru = 'Населенный пункт может быть не указан только в регионе - городе федерального значения.'"), - НСтр("ru = 'Населенный пункт'") - ); + НСтр("ru = 'Населенный пункт'")); КонецЕсли; КонецЕсли; // 7) Улица не может быть пустой если НаселенныйПункт пустой. Если Не ИсключатьПроверкуУлицыВАдресе(АдресРФ) Тогда - Если ПустаяСтрока(НаселенныйПункт) И ПустаяСтрока(Улица) И НЕ ЗначениеЗаполнено(ДополнительныйЭлемент) Тогда ДобавитьОшибкуЗаполненияАдреса(НеЗаполненыОбязательныеПоля, "Улица", НСтр("ru = 'Город или населенный пункт должен содержать название улицы.'"), - НСтр("ru = 'Улица'") - ); + НСтр("ru = 'Улица'")); КонецЕсли; КонецЕсли; @@ -2997,6 +3459,190 @@ Возврат Результат; КонецФункции +// Обновляет агрегатное поле ВидДляСписка контактной информацию у объекта. +// +// Параметры: +// Объект - СправочникОбъект - Объект с табличной часть КонтактнаяИнформация +// +Процедура ОбновитьКонтактнуюИнформациюДляСписковДляОбъекта(Объект) Экспорт + + КонтактнаяИнформация = Объект.КонтактнаяИнформация; + + Если КонтактнаяИнформация.Количество() = 0 Тогда + Возврат; + КонецЕсли; + + Запрос = Новый Запрос; + Запрос.Текст = + "ВЫБРАТЬ + | КонтактнаяИнформация.Представление КАК Представление, + | КонтактнаяИнформация.Вид КАК Вид + |ПОМЕСТИТЬ КонтактнаяИнформация + |ИЗ + | &КонтактнаяИнформация КАК КонтактнаяИнформация + |; + | + |//////////////////////////////////////////////////////////////////////////////// + |ВЫБРАТЬ + | КонтактнаяИнформация.Представление КАК Представление, + | КонтактнаяИнформация.Вид КАК Вид, + | КОЛИЧЕСТВО(КонтактнаяИнформация.Вид) КАК Количество + |ИЗ + | КонтактнаяИнформация КАК КонтактнаяИнформация + | + |СГРУППИРОВАТЬ ПО + | КонтактнаяИнформация.Вид, + | КонтактнаяИнформация.Представление ИТОГИ ПО Вид"; + + Запрос.УстановитьПараметр("КонтактнаяИнформация", КонтактнаяИнформация); + РезультатЗапроса = Запрос.Выполнить(); + ВыборкаВид = РезультатЗапроса.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам); + + Пока ВыборкаВид.Следующий() Цикл + ВыборкаДетальныеЗаписи = ВыборкаВид.Выбрать(); + Если ВыборкаВид.Количество = 1 Тогда + СтрокаТаблиц = КонтактнаяИнформация.Найти(ВыборкаВид.Вид, "Вид"); + СтрокаТаблиц.ВидДляСписка = ВыборкаВид.Вид; + ИначеЕсли ВыборкаВид.Количество > 1 Тогда + СтрокаТаблиц = КонтактнаяИнформация.Добавить(); + СтрокаТаблиц.ВидДляСписка = ВыборкаВид.Вид; + Разделитель = ""; + Представление = ""; + Пока ВыборкаДетальныеЗаписи.Следующий() Цикл + Представление = Представление +Разделитель + ВыборкаДетальныеЗаписи.Представление; + Разделитель = ", "; + КонецЦикла; + СтрокаТаблиц.Представление = Представление; + КонецЕсли; + КонецЦикла; + +КонецПроцедуры + +// Обновляет агрегатное поле ВидДляСписка в табличных частях КонтактнаяИнформация у всех объекта. +// +Процедура ОбновитьКонтактнуюИнформациюДляСписков() Экспорт + + ОбъектыСКолонкойВидДляСписка = ОбъектыСодержащиеВидДляСписка(); + + Для каждого ОбъектСсылка Из ОбъектыСКолонкойВидДляСписка Цикл + Объект = ОбъектСсылка.ПолучитьОбъект(); + КонтактнаяИнформация = Объект.КонтактнаяИнформация; + + Отбор = Новый Структура("Тип", Перечисления.ТипыКонтактнойИнформации.ПустаяСсылка()); + СтрокиДляУдаления = КонтактнаяИнформация.НайтиСтроки(Отбор); + Для каждого СтрокаДляУдаления Из СтрокиДляУдаления Цикл + КонтактнаяИнформация.Удалить(СтрокаДляУдаления); + КонецЦикла; + + Запрос = Новый Запрос; + Запрос.Текст = + "ВЫБРАТЬ + | КонтактнаяИнформация.Представление КАК Представление, + | КонтактнаяИнформация.Вид КАК Вид + |ПОМЕСТИТЬ КонтактнаяИнформация + |ИЗ + | &КонтактнаяИнформация КАК КонтактнаяИнформация + |; + | + |//////////////////////////////////////////////////////////////////////////////// + |ВЫБРАТЬ + | КонтактнаяИнформация.Представление КАК Представление, + | КонтактнаяИнформация.Вид КАК Вид, + | КОЛИЧЕСТВО(КонтактнаяИнформация.Вид) КАК Количество + |ИЗ + | КонтактнаяИнформация КАК КонтактнаяИнформация + | + |СГРУППИРОВАТЬ ПО + | КонтактнаяИнформация.Вид, + | КонтактнаяИнформация.Представление ИТОГИ ПО Вид"; + + Запрос.УстановитьПараметр("КонтактнаяИнформация", КонтактнаяИнформация); + РезультатЗапроса = Запрос.Выполнить(); + ВыборкаВид = РезультатЗапроса.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам); + + Пока ВыборкаВид.Следующий() Цикл + ВыборкаДетальныеЗаписи = ВыборкаВид.Выбрать(); + Если ВыборкаВид.Количество = 1 Тогда + СтрокаТаблиц = КонтактнаяИнформация.Найти(ВыборкаВид.Вид, "Вид"); + СтрокаТаблиц.ВидДляСписка = ВыборкаВид.Вид; + ИначеЕсли ВыборкаВид.Количество > 1 Тогда + СтрокаТаблиц = КонтактнаяИнформация.Добавить(); + СтрокаТаблиц.ВидДляСписка = ВыборкаВид.Вид; + Разделитель = ""; + Представление = ""; + Пока ВыборкаДетальныеЗаписи.Следующий() Цикл + Представление = Представление +Разделитель + ВыборкаДетальныеЗаписи.Представление; + Разделитель = ", "; + КонецЦикла; + СтрокаТаблиц.Представление = Представление; + КонецЕсли; + КонецЦикла; + ОбновлениеИнформационнойБазы.ЗаписатьДанные(Объект); + КонецЦикла; + +КонецПроцедуры + +Функция ОбъектыСодержащиеВидДляСписка() + + ОбъектыМетаданных = Новый Массив; + Запрос = Новый Запрос; + Запрос.Текст = + "ВЫБРАТЬ + | ВидыКонтактнойИнформации.Ссылка, + | ВидыКонтактнойИнформации.ИмяПредопределенныхДанных + |ИЗ + | Справочник.ВидыКонтактнойИнформации КАК ВидыКонтактнойИнформации + |ГДЕ + | ВидыКонтактнойИнформации.ЭтоГруппа = ИСТИНА"; + + РезультатЗапроса = Запрос.Выполнить(); + ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать(); + Пока ВыборкаДетальныеЗаписи.Следующий() Цикл + Если СтрНачинаетсяС(ВыборкаДетальныеЗаписи.ИмяПредопределенныхДанных, "Справочник") Тогда + ИмяОбъекта = Сред(ВыборкаДетальныеЗаписи.ИмяПредопределенныхДанных, 11); + Если Метаданные.Справочники.Найти(ИмяОбъекта) <> Неопределено Тогда + КонтактнаяИнформация = Метаданные.Справочники[ИмяОбъекта].ТабличныеЧасти.КонтактнаяИнформация; + Если КонтактнаяИнформация.Реквизиты.Найти("ВидДляСписка") <> Неопределено Тогда + ОбъектыМетаданных.Добавить(Справочники[ИмяОбъекта].ПустаяСсылка()); + КонецЕсли; + КонецЕсли; + ИначеЕсли СтрНачинаетсяС(ВыборкаДетальныеЗаписи.ИмяПредопределенныхДанных, "Документ") Тогда + ИмяОбъекта = Сред(ВыборкаДетальныеЗаписи.ИмяПредопределенныхДанных, 9); + Если Метаданные.Документы.Найти(ИмяОбъекта) <> Неопределено Тогда + КонтактнаяИнформация = Метаданные.Документы[ИмяОбъекта].ТабличныеЧасти.КонтактнаяИнформация; + Если КонтактнаяИнформация.Реквизиты.Найти("ВидДляСписка") <> Неопределено Тогда + ОбъектыМетаданных.Добавить(Документы[ИмяОбъекта].ПустаяСсылка()); + КонецЕсли; + КонецЕсли; + КонецЕсли; + КонецЦикла; + + Разделитель = ""; + ТекстЗапроса = ""; + Для каждого Объект Из ОбъектыМетаданных Цикл + ТекстЗапроса = ТекстЗапроса + Разделитель + " ВЫБРАТЬ + | КонтактнаяИнформация.Ссылка КАК Ссылка + |ИЗ + | Справочник." + Объект.Метаданные().Имя + ".КонтактнаяИнформация КАК КонтактнаяИнформация + |ГДЕ + | КонтактнаяИнформация.Вид <> ЗНАЧЕНИЕ(Справочник.ВидыКонтактнойИнформации.ПустаяСсылка) + | + |СГРУППИРОВАТЬ ПО + | КонтактнаяИнформация.Ссылка + | + |ИМЕЮЩИЕ + | КОЛИЧЕСТВО(КонтактнаяИнформация.Вид) > 0 "; + Разделитель = " ОБЪЕДИНИТЬ ВСЕ "; + КонецЦикла; + + Запрос = Новый Запрос(ТекстЗапроса); + РезультатЗапроса = Запрос.Выполнить().Выгрузить().ВыгрузитьКолонку("Ссылка"); + + Возврат РезультатЗапроса; + +КонецФункции + + #КонецОбласти #Область СлужебныеПроцедурыИФункцииДляСовместимости @@ -3046,7 +3692,7 @@ Результат = Новый Структура("Представление, ЗначенияПолей", XDTOКонтактная.Представление, Новый СписокЗначений); - ПространствоИмен = УправлениеКонтактнойИнформациейКлиентСерверПовтИсп.ПространствоИмен(); + ПространствоИмен = УправлениеКонтактнойИнформациейКлиентСервер.ПространствоИмен(); Состав = XDTOКонтактная.Состав; Если Состав = Неопределено Тогда @@ -3080,7 +3726,7 @@ Функция АдресВСтарыйСписокПолей(XDTOАдрес, РасширенныйСоставПолей = Истина) Экспорт Список = Новый СписокЗначений; - ПространствоИмен = УправлениеКонтактнойИнформациейКлиентСерверПовтИсп.ПространствоИмен(); + ПространствоИмен = УправлениеКонтактнойИнформациейКлиентСервер.ПространствоИмен(); XDTOТип = XDTOАдрес.Тип(); Если XDTOТип = ФабрикаXDTO.Тип(ПространствоИмен, "Адрес") Тогда @@ -3167,7 +3813,7 @@ ДобавитьЗначение(Список, "ТипКвартиры", ""); ДобавитьЗначение(Список, "Квартира", ""); Иначе - Для Каждого СтрокаОбъекта Из ПараметрыОбъекта Цикл + Для Каждого СтрокаОбъекта Из ПараметрыОбъекта Цикл ДобавитьЗначение(Список, "ТипКвартиры", СтрокаОбъекта.Тип, РасширенныйСоставПолей); ДобавитьЗначение(Список, "Квартира", СтрокаОбъекта.Значение, РасширенныйСоставПолей); КонецЦикла; @@ -3297,16 +3943,14 @@ КонецЕсли; // Старый формат через разделитель строк и равенство. - ПространствоИмен = УправлениеКонтактнойИнформациейКлиентСерверПовтИсп.ПространствоИмен(); + ПространствоИмен = УправлениеКонтактнойИнформациейКлиентСервер.ПространствоИмен(); Результат = ФабрикаXDTO.Создать(ФабрикаXDTO.Тип(ПространствоИмен, "КонтактнаяИнформация")); Результат.Комментарий = ""; Результат.Состав = ФабрикаXDTO.Создать(ФабрикаXDTO.Тип(ПространствоИмен, "Адрес")); - АдресРоссийский = Истина; НазваниеРоссии = ВРег(Справочники.СтраныМира.Россия.Наименование); - ЭлементКвартира = Неопределено; ЭлементКорпус = Неопределено; ЭлементДом = Неопределено; @@ -3316,6 +3960,8 @@ // Общий состав Адрес = Результат.Состав; + Адрес.Страна = НазваниеРоссии; // Страна по умолчанию Россия + АдресРоссийский = Истина; ТипЗначенийПолей = ТипЗнч(ЗначенияПолей); Если ТипЗначенийПолей = Тип("СписокЗначений") Тогда @@ -3338,7 +3984,7 @@ Если ИмяПоля="ИНДЕКС" Тогда ЭлементИндекс = СоздатьДопАдрЭлемента(АдресРФ); - ЭлементИндекс.ТипАдрЭл = УправлениеКонтактнойИнформациейКлиентСерверПовтИсп.КодСериализацииПочтовогоИндекса(); + ЭлементИндекс.ТипАдрЭл = УправлениеКонтактнойИнформациейКлиентСервер.КодСериализацииПочтовогоИндекса(); ЭлементИндекс.Значение = ЭлементСписка.Значение; ИначеЕсли ИмяПоля = "СТРАНА" Тогда @@ -3348,7 +3994,7 @@ КонецЕсли; ИначеЕсли ИмяПоля = "КОДСТРАНЫ" Тогда - ; + // действия не требуется ИначеЕсли ИмяПоля = "КОДРЕГИОНА" Тогда АдресРФ.СубъектРФ = РегионКода(ЭлементСписка.Значение); @@ -3375,7 +4021,7 @@ Если ЭлементДом = Неопределено Тогда ЭлементДом = СоздатьНомерДопАдрЭлемента(АдресРФ); КонецЕсли; - ЭлементДом.Тип = УправлениеКонтактнойИнформациейКлиентСерверПовтИсп.КодСериализацииОбъектаАдресации(ЭлементСписка.Значение); + ЭлементДом.Тип = УправлениеКонтактнойИнформациейКлиентСервер.КодСериализацииОбъектаАдресации(ЭлементСписка.Значение); ТипДомаНеопределен = Ложь; ИначеЕсли ИмяПоля = "ДОМ" Тогда @@ -3388,7 +4034,7 @@ Если ЭлементКорпус = Неопределено Тогда ЭлементКорпус = СоздатьНомерДопАдрЭлемента(АдресРФ); КонецЕсли; - ЭлементКорпус.Тип = УправлениеКонтактнойИнформациейКлиентСерверПовтИсп.КодСериализацииОбъектаАдресации(ЭлементСписка.Значение); + ЭлементКорпус.Тип = УправлениеКонтактнойИнформациейКлиентСервер.КодСериализацииОбъектаАдресации(ЭлементСписка.Значение); ТипКорпусаНеопределен = Ложь; ИначеЕсли ИмяПоля = "КОРПУС" Тогда @@ -3401,7 +4047,7 @@ Если ЭлементКвартира = Неопределено Тогда ЭлементКвартира = СоздатьНомерДопАдрЭлемента(АдресРФ); КонецЕсли; - ЭлементКвартира.Тип = УправлениеКонтактнойИнформациейКлиентСерверПовтИсп.КодСериализацииОбъектаАдресации(ЭлементСписка.Значение); + ЭлементКвартира.Тип = УправлениеКонтактнойИнформациейКлиентСервер.КодСериализацииОбъектаАдресации(ЭлементСписка.Значение); ТипКвартирыНеопределен = Ложь; ИначеЕсли ИмяПоля = "КВАРТИРА" Тогда @@ -3419,15 +4065,15 @@ // Умолчания Если ТипДомаНеопределен И ЭлементДом <> Неопределено Тогда - ЭлементДом.Тип = УправлениеКонтактнойИнформациейКлиентСерверПовтИсп.КодСериализацииОбъектаАдресации("Дом"); + ЭлементДом.Тип = УправлениеКонтактнойИнформациейКлиентСервер.КодСериализацииОбъектаАдресации("Дом"); КонецЕсли; Если ТипКорпусаНеопределен И ЭлементКорпус <> Неопределено Тогда - ЭлементКорпус.Тип = УправлениеКонтактнойИнформациейКлиентСерверПовтИсп.КодСериализацииОбъектаАдресации("Корпус"); + ЭлементКорпус.Тип = УправлениеКонтактнойИнформациейКлиентСервер.КодСериализацииОбъектаАдресации("Корпус"); КонецЕсли; Если ТипКвартирыНеопределен И ЭлементКвартира <> Неопределено Тогда - ЭлементКвартира.Тип = УправлениеКонтактнойИнформациейКлиентСерверПовтИсп.КодСериализацииОбъектаАдресации("Квартира"); + ЭлементКвартира.Тип = УправлениеКонтактнойИнформациейКлиентСервер.КодСериализацииОбъектаАдресации("Квартира"); КонецЕсли; // Представление с приоритетами. @@ -3467,7 +4113,7 @@ // Список игнорируемых при сравнении свойств текущего владельца - особенности контактной информации. Игнорируемые = Новый Соответствие; - ПространствоИмен = УправлениеКонтактнойИнформациейКлиентСерверПовтИсп.ПространствоИмен(); + ПространствоИмен = УправлениеКонтактнойИнформациейКлиентСервер.ПространствоИмен(); ТипВладельца = Владелец.Тип(); Если ТипВладельца = ФабрикаXDTO.Тип(ПространствоИмен, "Адрес") Тогда @@ -3499,8 +4145,7 @@ Если Список <> Неопределено Тогда Для Каждого ЭлементСписка Из Список Цикл Если Игнорируемые[ЭлементСписка] = Неопределено - И ЕстьЗаполненныеСвойстваXDTOКонтактнойИнформации(ЭлементСписка) - Тогда + И ЕстьЗаполненныеСвойстваXDTOКонтактнойИнформации(ЭлементСписка) Тогда Возврат Истина; КонецЕсли; КонецЦикла; @@ -3530,13 +4175,13 @@ Возврат; КонецЕсли; - Запись = XDTOАдрес.Получить(УправлениеКонтактнойИнформациейКлиентСерверПовтИсп.XPathНомераДополнительногоОбъектаАдресации(Тип) ); + Запись = XDTOАдрес.Получить(УправлениеКонтактнойИнформациейКлиентСервер.XPathНомераДополнительногоОбъектаАдресации(Тип) ); Если Запись = Неопределено Тогда Запись = XDTOАдрес.ДопАдрЭл.Добавить( ФабрикаXDTO.Создать(XDTOАдрес.ДопАдрЭл.ВладеющееСвойство.Тип) ); Запись.Номер = ФабрикаXDTO.Создать(Запись.Свойства().Получить("Номер").Тип); Запись.Номер.Значение = Значение; - КодТипа = УправлениеКонтактнойИнформациейКлиентСерверПовтИсп.КодСериализацииОбъектаАдресации(Тип); + КодТипа = УправлениеКонтактнойИнформациейКлиентСервер.КодСериализацииОбъектаАдресации(Тип); Если КодТипа = Неопределено Тогда КодТипа = Тип; КонецЕсли; @@ -3576,7 +4221,7 @@ Возврат КонтактнаяИнформацияИзXML(ЗначенияПолей, ОжидаемыйТип); КонецЕсли; - ПространствоИмен = УправлениеКонтактнойИнформациейКлиентСерверПовтИсп.ПространствоИмен(); + ПространствоИмен = УправлениеКонтактнойИнформациейКлиентСервер.ПространствоИмен(); Если ОжидаемыйТип = Перечисления.ТипыКонтактнойИнформации.Телефон Тогда Данные = ФабрикаXDTO.Создать(ФабрикаXDTO.Тип(ПространствоИмен, "НомерТелефона")); @@ -3649,7 +4294,7 @@ Данные.Номер = НайтиПодстрокуЦифр(Представление, Позиция, " -"); Добавочный = СокрЛП(Сред(Представление, Позиция)); - Если Лев(Добавочный, 1) = "," Тогда + Если СтрНачинаетсяС(Добавочный, ",") Тогда Добавочный = СокрЛ(Сред(Добавочный, 2)); КонецЕсли; Если ВРег(Лев(Добавочный, 3 ))= "ДОБ" Тогда @@ -3662,7 +4307,7 @@ // Корректируем возможные ошибки. Если ПустаяСтрока(Данные.Номер) Тогда - Если Лев(СокрЛ(Представление),1)="+" Тогда + Если СтрНачинаетсяС(СокрЛ(Представление), "+") Тогда // Была попытка явно указать код страны, оставляем страну в покое. Данные.КодГорода = ""; Данные.Номер = СократитьНеЦифры(Сред(Представление, НачалоГорода)); @@ -3701,7 +4346,7 @@ ПоискНачала = Ложь; КонецЕсли; Иначе - Если ЭтоЦифра Или Найти(ДопустимоКромеЦифр, Символ) > 0 Тогда + Если ЭтоЦифра Или СтрНайти(ДопустимоКромеЦифр, Символ) > 0 Тогда Результат = Результат + Символ; Иначе Прервать; @@ -3733,7 +4378,7 @@ Пока Индекс <> Конец Цикл Символ = Сред(Текст, Индекс, 1); - ЭтоЦифра = (Символ >= "0" И Символ <= "9") Или Найти(ДопустимоКромеЦифр, Символ) = 0; + ЭтоЦифра = (Символ >= "0" И Символ <= "9") Или СтрНайти(ДопустимоКромеЦифр, Символ) = 0; Если ЭтоЦифра Тогда Прервать; КонецЕсли; @@ -3808,8 +4453,8 @@ Если Объект <> Неопределено Тогда - Если Найти(ЧастьПути, "ДопАдрЭл") = 0 Тогда - Объект[ЧастьПути] = Значение; + Если СтрНайти(ЧастьПути, "ДопАдрЭл") = 0 Тогда + Объект[ЧастьПути] = Значение; Иначе КодПутьXPath = Сред(ЧастьПути, 20, 8); ЗначениеПоля = Объект.ДопАдрЭл.Добавить(ФабрикаXDTO.Создать(Объект.ДопАдрЭл.ВладеющееСвойство.Тип)); @@ -3870,13 +4515,12 @@ Чтение = Новый ЧтениеXML; Чтение.УстановитьСтроку(Текст); ОбъектXDTO= ФабрикаXDTO.ПрочитатьXML(Чтение, - ФабрикаXDTO.Тип(УправлениеКонтактнойИнформациейКлиентСерверПовтИсп.ПространствоИмен(), "КонтактнаяИнформация")); + ФабрикаXDTO.Тип(УправлениеКонтактнойИнформациейКлиентСервер.ПространствоИмен(), "КонтактнаяИнформация")); Состав = ОбъектXDTO.Состав; Если Состав <> Неопределено И Состав.Свойства().Получить("Значение") <> Неопределено - И ТипЗнч(Состав.Значение) = Тип("Строка") - Тогда + И ТипЗнч(Состав.Значение) = Тип("Строка") Тогда Возврат Состав.Значение; КонецЕсли; @@ -4069,6 +4713,16 @@ // Соответствие СтрокаXMLСтруктуры = XSLT_СоответствиеВСтруктуру( ЗначениеВСтрокуXML(ЗначенияПолей) ); + ИначеЕсли ТипЗначенийПолей = Тип("ОбъектXDTO") Тогда + // Ожидаем структуру + Если ЗначенияПолей.Состав.Страна = Неопределено Тогда + ЗначенияПолей.Состав.Страна = ""; + КонецЕсли; + Если ЗначенияПолей.Состав.Состав = Неопределено Тогда + ЗначенияПолей.Состав.Состав = ""; + КонецЕсли; + + СтрокаXMLСтруктуры = ЗначениеВСтрокуXML(ЗначенияПолей); Иначе // Ожидаем структуру СтрокаXMLСтруктуры = ЗначениеВСтрокуXML(ЗначенияПолей); diff --git a/SSL/src/CommonModules/УправлениеКонтактнойИнформациейСлужебныйВызовСервера/Module.bsl b/SSL/src/CommonModules/УправлениеКонтактнойИнформациейСлужебныйВызовСервера/Module.bsl index 538afe809..922658560 100644 --- a/SSL/src/CommonModules/УправлениеКонтактнойИнформациейСлужебныйВызовСервера/Module.bsl +++ b/SSL/src/CommonModules/УправлениеКонтактнойИнформациейСлужебныйВызовСервера/Module.bsl @@ -19,20 +19,6 @@ Возврат УправлениеКонтактнойИнформацией.КонтактнаяИнформацияXMLПоПредставлению(Текст, ОжидаемыйВид); КонецФункции -// Возвращает значение перечисления тип вида контактной информации. -// -// Параметры: -// ВидИнформации - СправочникСсылка.ВидыКонтактнойИнформации, Структура - исходные данные. -// -// Возвращаемое значение: -// ПеречислениеСсылка.ТипыКонтактнойИнфомарции - значение поля "Тип". -// -Функция ТипВидаКонтактнойИнформации(Знач ВидИнформации) Экспорт - - Возврат УправлениеКонтактнойИнформациейСлужебный.ТипВидаКонтактнойИнформации(ВидИнформации); - -КонецФункции - // Возвращает строку состава из значения контактной информации. // // Параметры: diff --git a/SSL/src/CommonModules/УправлениеКонтактнойИнформациейСлужебныйПовтИсп/Module.bsl b/SSL/src/CommonModules/УправлениеКонтактнойИнформациейСлужебныйПовтИсп/Module.bsl index 9d15711c1..e5691ed97 100644 --- a/SSL/src/CommonModules/УправлениеКонтактнойИнформациейСлужебныйПовтИсп/Module.bsl +++ b/SSL/src/CommonModules/УправлениеКонтактнойИнформациейСлужебныйПовтИсп/Module.bsl @@ -702,7 +702,7 @@ Функция XSLT_ПреобразованиеXSL() Экспорт КодыДополнительныхАдресныхЭлементов = Новый ТекстовыйДокумент; - Для Каждого ДополнительныйАдресныйЭлемент Из УправлениеКонтактнойИнформациейКлиентСерверПовтИсп.ТипыОбъектовАдресацииАдресаРФ() Цикл + Для Каждого ДополнительныйАдресныйЭлемент Из УправлениеКонтактнойИнформациейКлиентСервер.ТипыОбъектовАдресацииАдресаРФ() Цикл КодыДополнительныхАдресныхЭлементов.ДобавитьСтроку("<data:item data:title=""" + ДополнительныйАдресныйЭлемент.Наименование + """>" + ДополнительныйАдресныйЭлемент.Код + "</data:item>"); КонецЦикла; @@ -850,7 +850,7 @@ | <xsl:variable name=""index"" select=""tns:Structure/tns:Property[@name='Индекс']/tns:Value/text()"" /> | <xsl:if test=""0!=count($index)""> | <xsl:element name=""ДопАдрЭл""> - | <xsl:attribute name=""ТипАдрЭл"">" + УправлениеКонтактнойИнформациейКлиентСерверПовтИсп.КодСериализацииПочтовогоИндекса() + "</xsl:attribute> + | <xsl:attribute name=""ТипАдрЭл"">" + УправлениеКонтактнойИнформациейКлиентСервер.КодСериализацииПочтовогоИндекса() + "</xsl:attribute> | <xsl:attribute name=""Значение""><xsl:value-of select=""$index""/></xsl:attribute> | </xsl:element> | </xsl:if> diff --git a/SSL/src/CommonModules/УправлениеПечатью/Module.bsl b/SSL/src/CommonModules/УправлениеПечатью/Module.bsl index f2a8a4f1f..96e9a5c2d 100644 --- a/SSL/src/CommonModules/УправлениеПечатью/Module.bsl +++ b/SSL/src/CommonModules/УправлениеПечатью/Module.bsl @@ -118,16 +118,13 @@ // объединенное подменю Печать. Процедура ПриСозданииНаСервере(Форма, МестоРазмещенияКомандПоУмолчанию = Неопределено, ОбъектыПечати = Неопределено) Экспорт - Если ТипЗнч(Форма) = Тип("УправляемаяФорма") Тогда - ИмяФормы = Форма.ИмяФормы; - Иначе - ИмяФормы = Форма; - КонецЕсли; + ИмяФормы = Форма.ИмяФормы; Если ОбъектыПечати = Неопределено Тогда КомандыПечати = УправлениеПечатьюПовтИсп.КомандыПечатиФормы(ИмяФормы, ОбъектыПечати).Скопировать(); + ОпределитьВидимостьКомандПечатиПоФункциональнымОпциям(КомандыПечати, Форма); Иначе - КомандыПечати = КомандыПечатиФормы(ИмяФормы, ОбъектыПечати).Скопировать(); + КомандыПечати = КомандыПечатиФормы(Форма, ОбъектыПечати).Скопировать(); КонецЕсли; Если МестоРазмещенияКомандПоУмолчанию <> Неопределено Тогда @@ -145,8 +142,7 @@ МестаРазмещения = ТаблицаКоманд.ВыгрузитьКолонку("МестоРазмещения"); Для Каждого МестоРазмещения Из МестаРазмещения Цикл - НайденныеКоманды = КомандыПечати.НайтиСтроки(Новый Структура("МестоРазмещения,СкрытаФункциональнымиОпциями", МестоРазмещения, Ложь)); - + НайденныеКоманды = КомандыПечати.НайтиСтроки(Новый Структура("МестоРазмещения,СкрытаФункциональнымиОпциями,Отключена", МестоРазмещения, Ложь, Ложь)); ЭлементФормыДляРазмещения = Форма.Элементы.Найти(МестоРазмещения); Если ЭлементФормыДляРазмещения = Неопределено Тогда ЭлементФормыДляРазмещения = МестоРазмещенияКомандПоУмолчанию; @@ -188,7 +184,6 @@ КонецЕсли; КомандыПечати = СоздатьКоллекциюКомандПечати(); - КомандыПечати.Колонки.Добавить("СкрытаФункциональнымиОпциями", Новый ОписаниеТипов("Булево")); СтандартнаяОбработка = Истина; УправлениеПечатьюПереопределяемый.ПередДобавлениемКомандПечати(ИмяФормы, КомандыПечати, СтандартнаяОбработка); @@ -204,20 +199,34 @@ ИначеЕсли ОбъектМетаданных = Неопределено Тогда Возврат КомандыПечати; Иначе - МенеджерПечати = ОбщегоНазначения.МенеджерОбъектаПоПолномуИмени(ОбъектМетаданных.ПолноеИмя()); - КомандыДобавлены = ДобавитьКомандыИзМенеджераПечати(МенеджерПечати, КомандыПечати); - Если КомандыДобавлены Тогда - Для Каждого КомандаПечати Из КомандыПечати Цикл + ЭтоЖурналДокументов = ОбщегоНазначения.ЭтоЖурналДокументов(ОбъектМетаданных); + НастройкиСписка = Новый Структура; + НастройкиСписка.Вставить("МенеджерКомандПечати", ОбщегоНазначения.МенеджерОбъектаПоПолномуИмени(ОбъектМетаданных.ПолноеИмя())); + НастройкиСписка.Вставить("АвтоматическоеЗаполнение", ЭтоЖурналДокументов); + Если ЭтоЖурналДокументов Тогда + УправлениеПечатьюПереопределяемый.ПриПолученииНастроекСпискаКомандПечати(НастройкиСписка); + КонецЕсли; + + Если НастройкиСписка.АвтоматическоеЗаполнение Тогда + Если ЭтоЖурналДокументов Тогда + ЗаполнитьКомандыПечатиДляСпискаОбъектов(ОбъектМетаданных.РегистрируемыеДокументы, КомандыПечати); + КонецЕсли; + Иначе + МенеджерПечати = ОбщегоНазначения.МенеджерОбъектаПоПолномуИмени(ОбъектМетаданных.ПолноеИмя()); + ДобавляемыеКомандыПечати = СоздатьКоллекциюКомандПечати(); + МенеджерПечати.ДобавитьКомандыПечати(ДобавляемыеКомандыПечати); + + Для Каждого КомандаПечати Из ДобавляемыеКомандыПечати Цикл Если ПустаяСтрока(КомандаПечати.МенеджерПечати) Тогда КомандаПечати.МенеджерПечати = ОбъектМетаданных.ПолноеИмя(); КонецЕсли; + ЗаполнитьЗначенияСвойств(КомандыПечати.Добавить(), КомандаПечати); КонецЦикла; + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ДополнительныеОтчетыИОбработки") Тогда МодульДополнительныеОтчетыИОбработки = ОбщегоНазначения.ОбщийМодуль("ДополнительныеОтчетыИОбработки"); - МодульДополнительныеОтчетыИОбработки.ПриПолученииКомандПечати(КомандыПечати, ИмяФормы); + МодульДополнительныеОтчетыИОбработки.ПриПолученииКомандПечати(КомандыПечати, ОбъектМетаданных.ПолноеИмя()); КонецЕсли; - ИначеЕсли ОбщегоНазначения.ЭтоЖурналДокументов(ОбъектМетаданных) Тогда - ЗаполнитьКомандыПечатиДляСпискаОбъектов(ОбъектМетаданных.РегистрируемыеДокументы, КомандыПечати); КонецЕсли; КонецЕсли; КонецЕсли; @@ -229,15 +238,19 @@ КомандаПечати.ДополнительныеПараметры.Вставить("ДополнитьКомплектВнешнимиПечатнымиФормами", КомандаПечати.ДополнитьКомплектВнешнимиПечатнымиФормами); КонецЦикла; + Если ОбъектМетаданных <> Неопределено Тогда + УстановитьНастройкиКомандПечати(КомандыПечати, ОбщегоНазначения.ИдентификаторОбъектаМетаданных(ОбъектМетаданных)); + КонецЕсли; + КомандыПечати.Сортировать("Порядок Возр, Представление Возр"); - ЧастиИмени = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(ИмяФормы, ".", Истина); + ЧастиИмени = СтрРазделить(ИмяФормы, "."); КраткоеИмяФормы = ЧастиИмени[ЧастиИмени.Количество()-1]; // фильтр по именам форм Для НомерСтроки = -КомандыПечати.Количество() + 1 По 0 Цикл КомандаПечати = КомандыПечати[-НомерСтроки]; - СписокФорм = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(КомандаПечати.СписокФорм, ",", Истина); + СписокФорм = СтрРазделить(КомандаПечати.СписокФорм, ",", Ложь); Если СписокФорм.Количество() > 0 И СписокФорм.Найти(КраткоеИмяФормы) = Неопределено Тогда КомандыПечати.Удалить(КомандаПечати); КонецЕсли; @@ -418,6 +431,11 @@ // Для использования макетов офисных документов в веб-клиенте. Результат.Колонки.Добавить("ТребуетсяРасширениеРаботыСФайлами", Новый ОписаниеТипов("Булево")); + // Для служебного использования. + Результат.Колонки.Добавить("СкрытаФункциональнымиОпциями", Новый ОписаниеТипов("Булево")); + Результат.Колонки.Добавить("УникальныйИдентификатор", Новый ОписаниеТипов("Строка")); + Результат.Колонки.Добавить("Отключена", Новый ОписаниеТипов("Булево")); + Возврат Результат; КонецФункции @@ -472,7 +490,7 @@ // Функция МакетыИДанныеОбъектовДляПечати(Знач ИмяМенеджераПечати, Знач ИменаМакетов, Знач СоставДокументов) Экспорт - МассивИменМакетов = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(СтрЗаменить(ИменаМакетов, " ", ""), ","); + МассивИменМакетов = СтрРазделить(ИменаМакетов, ", ", Ложь); МенеджерОбъекта = ОбщегоНазначения.МенеджерОбъектаПоПолномуИмени(ИмяМенеджераПечати); МакетыИДанные = МенеджерОбъекта.ПолучитьДанныеПечати(СоставДокументов, МассивИменМакетов); @@ -568,38 +586,6 @@ КонецФункции -// Устарела. Следует использовать МакетыИДанныеОбъектовДляПечати. -// -Функция ПолучитьМакетыИДанныеОбъектов(Знач ИмяМенеджераПечати, Знач ИменаМакетов, Знач СоставДокументов) Экспорт - - Возврат МакетыИДанныеОбъектовДляПечати(ИмяМенеджераПечати, ИменаМакетов, СоставДокументов); - -КонецФункции - -// Устарела. Следует использовать МакетПечатнойФормы. -// -Функция ПолучитьМакет(ПолныйПутьКМакету) Экспорт - - Возврат МакетПечатнойФормы(ПолныйПутьКМакету); - -КонецФункции - -// Устарела. Следует использовать ТабличныйДокументПоДвоичнымДанным. -// -Функция ПолучитьТабличныйДокументПоДвоичнымДанным(ДвоичныеДанные) Экспорт - - ИмяВременногоФайла = ПолучитьИмяВременногоФайла(); - ДвоичныеДанные.Записать(ИмяВременногоФайла); - ТабличныйДокумент = Новый ТабличныйДокумент; - ТабличныйДокумент.Прочитать(ИмяВременногоФайла); - Если БезопасныйРежим() = Ложь Тогда - УдалитьФайлы(ИмяВременногоФайла); - КонецЕсли; - - Возврат ТабличныйДокумент; - -КонецФункции - // Возвращает двоичные данные для формирования QR кода. // // Параметры: @@ -814,6 +800,31 @@ #Область СлужебныйПрограммныйИнтерфейс +// Объявляет события подсистемы Печать. +// +// Серверные события: +// ПриОпределенииОбъектовСКомандамиПечати. +// +// См. описание этой же процедуры в модуле СтандартныеПодсистемыСервер. +Процедура ПриДобавленииСлужебныхСобытий(КлиентскиеСобытия, СерверныеСобытия) Экспорт + + // СЕРВЕРНЫЕ СОБЫТИЯ. + + // Определяет объекты, в которых есть процедура ДобавитьКомандыПечати(). + // + // Параметры: + // СписокОбъектов - Массив - список менеджеров объектов. + // + // Синтаксис: + // Процедура ПриОпределенииОбъектовСКомандамиПечати(СписокОбъектов) Экспорт + // + // (То же, что + // УправлениеПечатьюПереопределяемый.ПриОпределенииОбъектовСКомандамиПечати). + // + СерверныеСобытия.Добавить("СтандартныеПодсистемы.Печать\ПриОпределенииОбъектовСКомандамиПечати"); + +КонецПроцедуры + // См. описание этой же процедуры в модуле СтандартныеПодсистемыСервер. Процедура ПриДобавленииОбработчиковСлужебныхСобытий(КлиентскиеОбработчики, СерверныеОбработчики) Экспорт @@ -832,6 +843,82 @@ КонецПроцедуры +// Скрывает команды печати из подменю "Печать". +Процедура ОтключитьКомандыПечати(СписокОбъектов, СписокКоманд) Экспорт + НаборЗаписей = РегистрыСведений.НастройкиКомандПечати.СоздатьНаборЗаписей(); + Для Каждого Объект Из СписокОбъектов Цикл + КомандыПечатиОбъекта = СтандартныеКомандыПечатиОбъекта(Объект); + Для Каждого ИдентификаторЗаменяемойКоманды Из СписокКоманд Цикл + Отбор = Новый Структура; + Отбор.Вставить("Идентификатор", ИдентификаторЗаменяемойКоманды); + Отбор.Вставить("ФорматСохранения"); + Отбор.Вставить("СразуНаПринтер", Ложь); + Отбор.Вставить("Отключена", Ложь); + + СписокЗаменяемыхКоманд = КомандыПечатиОбъекта.НайтиСтроки(Отбор); + Для Каждого ЗаменяемаяКоманда Из СписокЗаменяемыхКоманд Цикл + НаборЗаписей.Отбор.Владелец.Установить(Объект); + НаборЗаписей.Отбор.УникальныйИдентификатор.Установить(ЗаменяемаяКоманда.УникальныйИдентификатор); + НаборЗаписей.Прочитать(); + НаборЗаписей.Очистить(); + Если НаборЗаписей.Количество() = 0 Тогда + Запись = НаборЗаписей.Добавить(); + Иначе + Запись = НаборЗаписей[0]; + КонецЕсли; + Запись.Владелец = Объект; + Запись.УникальныйИдентификатор = ЗаменяемаяКоманда.УникальныйИдентификатор; + Запись.Видимость = Ложь; + НаборЗаписей.Записать(); + КонецЦикла; + КонецЦикла; + КонецЦикла; +КонецПроцедуры + +// Возвращает список поставляемых команд печати объекта. +// +// Параметры: +// Объект - СправочникСсылка.ИдентификаторыОбъектовМетаданных; +Функция СтандартныеКомандыПечатиОбъекта(Объект) Экспорт + КомандыПечатиОбъекта = КомандыПечатиОбъекта( + ОбщегоНазначения.ОбъектМетаданныхПоИдентификатору(Объект)); + + ВнешниеКомандыПечати = КомандыПечатиОбъекта.НайтиСтроки(Новый Структура("МенеджерПечати", "СтандартныеПодсистемы.ДополнительныеОтчетыИОбработки")); + Для Каждого КомандаПечати Из ВнешниеКомандыПечати Цикл + КомандыПечатиОбъекта.Удалить(КомандаПечати); + КонецЦикла; + + Возврат КомандыПечатиОбъекта; +КонецФункции + +// Возвращает список объектов метаданных, в которых внедрена подсистема Печать. +// +// Возвращаемое значение: +// Массив - список из элементов типа ОбъектМетаданных. +Функция ИсточникиКомандПечати() Экспорт + ОбъектыСКомандамиПечати = Новый Массив; + + ОбработчикиСобытия = ОбщегоНазначения.ОбработчикиСлужебногоСобытия( + "СтандартныеПодсистемы.Печать\ПриОпределенииОбъектовСКомандамиПечати"); + + Для Каждого Обработчик Из ОбработчикиСобытия Цикл + СписокОбъектов = Новый Массив; + Обработчик.Модуль.ПриОпределенииОбъектовСКомандамиПечати(СписокОбъектов); + ОбщегоНазначенияКлиентСервер.ДополнитьМассив(ОбъектыСКомандамиПечати, СписокОбъектов, Истина); + КонецЦикла; + + СписокОбъектов = Новый Массив; + УправлениеПечатьюПереопределяемый.ПриОпределенииОбъектовСКомандамиПечати(СписокОбъектов); + ОбщегоНазначенияКлиентСервер.ДополнитьМассив(ОбъектыСКомандамиПечати, СписокОбъектов, Истина); + + Результат = Новый Массив; + Для Каждого ОбъектМенеджер Из ОбъектыСКомандамиПечати Цикл + Результат.Добавить(Метаданные.НайтиПоТипу(ТипЗнч(ОбъектМенеджер))); + КонецЦикла; + + Возврат Результат; +КонецФункции + #КонецОбласти #Область СлужебныеПроцедурыИФункции @@ -886,9 +973,9 @@ // Процедура ПриЗаполненииСпискаТекущихДел(ТекущиеДела) Экспорт - МодульТекущиеДелаСлужебный = ОбщегоНазначения.ОбщийМодуль("ТекущиеДелаСлужебный"); + МодульТекущиеДелаСервер = ОбщегоНазначения.ОбщийМодуль("ТекущиеДелаСервер"); Если Не ПравоДоступа("Редактирование", Метаданные.РегистрыСведений.ПользовательскиеМакетыПечати) - Или МодульТекущиеДелаСлужебный.ДелоОтключено("МакетыПечатныхФорм") Тогда + Или МодульТекущиеДелаСервер.ДелоОтключено("МакетыПечатныхФорм") Тогда Возврат; КонецЕсли; @@ -903,7 +990,7 @@ ВывестиДело = Истина; ПровереноНаВерсию = ХранилищеОбщихНастроек.Загрузить("ТекущиеДела", "ПечатныеФормы"); Если ПровереноНаВерсию <> Неопределено Тогда - ВерсияМассив = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(Метаданные.Версия, "."); + ВерсияМассив = СтрРазделить(Метаданные.Версия, "."); ТекущаяВерсия = ВерсияМассив[0] + ВерсияМассив[1] + ВерсияМассив[2]; Если ПровереноНаВерсию = ТекущаяВерсия Тогда ВывестиДело = Ложь; // Печатные формы проверены на текущей версии. @@ -952,9 +1039,8 @@ Функция Разрешения() Разрешения = Новый Массив; - Разрешения.Добавить( - РаботаВБезопасномРежиме.РазрешениеНаИспользованиеВнешнейКомпоненты("ОбщийМакет.КомпонентаПечатиQRКода", НСтр("ru = 'Печать QR кодов.'")) - ); + Разрешения.Добавить(РаботаВБезопасномРежиме.РазрешениеНаИспользованиеВнешнейКомпоненты( + "ОбщийМакет.КомпонентаПечатиQRКода", НСтр("ru = 'Печать QR кодов.'"))); Возврат Разрешения; @@ -981,7 +1067,7 @@ ВыборкаМакетов = Запрос.Выполнить().Выбрать(); Пока ВыборкаМакетов.Следующий() Цикл - Если Лев(ВыборкаМакетов.ИмяМакета, 6) = "ПФ_MXL" Тогда + Если СтрНачинаетсяС(ВыборкаМакетов.ИмяМакета, "ПФ_MXL") Тогда ИмяВременногоФайла = ПолучитьИмяВременногоФайла(); ДвоичныеДанныеМакета = ВыборкаМакетов.Макет.Получить(); @@ -1039,7 +1125,7 @@ ПараметрыВывода = ПодготовитьСтруктуруПараметровВывода(); Если ТипЗнч(ИменаМакетов) = Тип("Строка") Тогда - ИменаМакетов = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(ИменаМакетов); + ИменаМакетов = СтрРазделить(ИменаМакетов, ","); Иначе // Тип("Массив") ИменаМакетов = ОбщегоНазначенияКлиентСервер.СкопироватьМассив(ИменаМакетов); КонецЕсли; @@ -1088,11 +1174,11 @@ ИмяДополнительногоМенеджераПечати = ""; Идентификатор = ИмяМакета; ВнешняяПечатнаяФорма = Неопределено; - Если Найти(Идентификатор, ПрефиксВнешнихПечатныхФорм) > 0 Тогда // это внешняя печатная форма + Если СтрНайти(Идентификатор, ПрефиксВнешнихПечатныхФорм) > 0 Тогда // это внешняя печатная форма Идентификатор = Сред(Идентификатор, СтрДлина(ПрефиксВнешнихПечатныхФорм) + 1); ВнешняяПечатнаяФорма = ВнешниеПечатныеФормы.НайтиПоЗначению(Идентификатор); - ИначеЕсли Найти(Идентификатор, ".") > 0 Тогда // Указан дополнительный менеджер печати. - Позиция = СтроковыеФункцииКлиентСервер.НайтиСимволСКонца(Идентификатор, "."); + ИначеЕсли СтрНайти(Идентификатор, ".") > 0 Тогда // Указан дополнительный менеджер печати. + Позиция = СтрНайти(Идентификатор, ".", НаправлениеПоиска.СКонца); ИмяДополнительногоМенеджераПечати = Лев(Идентификатор, Позиция - 1); Идентификатор = Сред(Идентификатор, Позиция + 1); КонецЕсли; @@ -1157,9 +1243,8 @@ Для Каждого ОписаниеПечатнойФормы Из ВременнаяКоллекцияДляОднойПечатнойФормы Цикл ОбщегоНазначенияКлиентСервер.Проверить( ТипЗнч(ОписаниеПечатнойФормы.Экземпляров) = Тип("Число") И ОписаниеПечатнойФормы.Экземпляров > 0, - СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Не задано количество экземпляров для печатной формы ""%1"".'"), - ?(ПустаяСтрока(ОписаниеПечатнойФормы.СинонимМакета), ОписаниеПечатнойФормы.ИмяМакета, ОписаниеПечатнойФормы.СинонимМакета))); + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Не задано количество экземпляров для печатной формы ""%1"".'"), + ?(ПустаяСтрока(ОписаниеПечатнойФормы.СинонимМакета), ОписаниеПечатнойФормы.ИмяМакета, ОписаниеПечатнойФормы.СинонимМакета))); КонецЦикла; // обновление коллекции @@ -1181,8 +1266,8 @@ // Вызов исключения при возникновении ошибки. Если Отказ Тогда - ТекстСообщенияОбОшибке = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'При формировании печатной формы ""%1"" возникла ошибка. Обратитесь к администратору.'"), ИмяМакета); + ТекстСообщенияОбОшибке = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр( + "ru = 'При формировании печатной формы ""%1"" возникла ошибка. Обратитесь к администратору.'"), ИмяМакета); ВызватьИсключение ТекстСообщенияОбОшибке; КонецЕсли; @@ -1210,8 +1295,11 @@ // Функция СформироватьПечатныеФормыДляБыстройПечати(ИмяМенеджераПечати, ИменаМакетов, МассивОбъектов, ПараметрыПечати) Экспорт - Результат = Новый Структура("ТабличныеДокументы,ОбъектыПечати,ПараметрыВывода,Отказ", - Неопределено, Неопределено, Неопределено, Ложь); + Результат = Новый Структура; + Результат.Вставить("ТабличныеДокументы"); + Результат.Вставить("ОбъектыПечати"); + Результат.Вставить("ПараметрыВывода"); + Результат.Вставить("Отказ", Ложь); Если НЕ ПравоДоступа("Вывод", Метаданные) Тогда Результат.Отказ = Истина; @@ -1239,9 +1327,12 @@ // Функция СформироватьПечатныеФормыДляБыстройПечатиОбычноеПриложение(ИмяМенеджераПечати, ИменаМакетов, МассивОбъектов, ПараметрыПечати) Экспорт - Результат = Новый Структура("Адрес,ОбъектыПечати,ПараметрыВывода,Отказ", - Неопределено, Неопределено, Неопределено, Ложь); - + Результат = Новый Структура; + Результат.Вставить("Адрес"); + Результат.Вставить("ОбъектыПечати"); + Результат.Вставить("ПараметрыВывода"); + Результат.Вставить("Отказ", Ложь); + ПечатныеФормы = СформироватьПечатныеФормыДляБыстройПечати(ИмяМенеджераПечати, ИменаМакетов, МассивОбъектов, ПараметрыПечати); Если ПечатныеФормы.Отказ Тогда @@ -1275,7 +1366,7 @@ Макеты.Колонки.Добавить("ИмяФайлаПечатнойФормы"); Если ТипЗнч(ИменаМакетов) = Тип("Строка") Тогда - ИменаМакетов = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(ИменаМакетов); + ИменаМакетов = СтрРазделить(ИменаМакетов, ","); КонецЕсли; Для Каждого ИмяМакета Из ИменаМакетов Цикл @@ -1312,7 +1403,7 @@ // Функция ПолучитьЛокальныйКаталогФайловПечати() Экспорт - Значение = ОбщегоНазначения.ХранилищеОбщихНастроекЗагрузить("ЛокальныйКаталогФайловПечати"); + Значение = ОбщегоНазначения.ХранилищеОбщихНастроекЗагрузить("ЛокальныйКаталогФайловПечати", ""); Возврат ?(Значение = Неопределено, "", Значение); КонецФункции @@ -1323,7 +1414,7 @@ // Процедура СохранитьЛокальныйКаталогФайловПечати(Каталог) Экспорт - ОбщегоНазначения.ХранилищеОбщихНастроекСохранить("ЛокальныйКаталогФайловПечати", , Каталог); + ОбщегоНазначения.ХранилищеОбщихНастроекСохранить("ЛокальныйКаталогФайловПечати", "", Каталог); КонецПроцедуры @@ -1493,10 +1584,10 @@ КонецФункции // Фильтрует список команд печати в соответствии с установленными функциональными опциями. -Процедура ОпределитьВидимостьКомандПечатиПоФункциональнымОпциям(КомандыПечати, Форма) +Процедура ОпределитьВидимостьКомандПечатиПоФункциональнымОпциям(КомандыПечати, Форма = Неопределено) Для НомерКоманды = -КомандыПечати.Количество() + 1 По 0 Цикл ОписаниеКомандыПечати = КомандыПечати[-НомерКоманды]; - ФункциональныеОпцииКомандыПечати = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(ОписаниеКомандыПечати.ФункциональныеОпции, ",", Истина); + ФункциональныеОпцииКомандыПечати = СтрРазделить(ОписаниеКомандыПечати.ФункциональныеОпции, ", ", Ложь); ВидимостьКоманды = ФункциональныеОпцииКомандыПечати.Количество() = 0; Для Каждого ФункциональнаяОпция Из ФункциональныеОпцииКомандыПечати Цикл Если ТипЗнч(Форма) = Тип("УправляемаяФорма") Тогда @@ -1517,7 +1608,7 @@ Процедура ЗаписатьМакет(ИмяОбъектаМетаданныхМакета, АдресМакетаВоВременномХранилище) Экспорт Макет = ПолучитьИзВременногоХранилища(АдресМакетаВоВременномХранилище); - ЧастиИмени = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(ИмяОбъектаМетаданныхМакета, "."); + ЧастиИмени = СтрРазделить(ИмяОбъектаМетаданныхМакета, "."); ИмяМакета = ЧастиИмени[ЧастиИмени.ВГраница()]; ИмяВладельца = ""; @@ -1565,11 +1656,9 @@ Если СтрДлина(ОбязательныеДанные) > 300 Тогда Шаблон = НСтр("ru = 'Невозможно создать QR-код для документа %1 - |Строка обязательных реквизитов должна быть меньше 300 символов: - |""%2""'"); - ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(Шаблон, - ДанныеДокумента.Ссылка, - ОбязательныеДанные); + |Строка обязательных реквизитов должна быть меньше 300 символов: + |""%2""'"); + ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(Шаблон, ДанныеДокумента.Ссылка, ОбязательныеДанные); ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстСообщения); Возврат ""; КонецЕсли; @@ -1744,9 +1833,7 @@ КонецФункции Процедура СообщитьПечатнаяФормаНедоступна(Объект) - ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Печать %1 не выполнена: выбранная печатная форма недоступна.'"), - Объект); + ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Печать %1 не выполнена: выбранная печатная форма недоступна.'"), Объект); ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстСообщения, Объект); КонецПроцедуры @@ -1784,9 +1871,12 @@ КонецЦикла; КонецЕсли; - ПакетОтображаемыхДокументов.КоличествоЭкземпляров = КоличествоЭкземпляров; + ПакетКомплектов = Новый ПакетОтображаемыхДокументов; + Для Номер = 1 По КоличествоЭкземпляров Цикл + ПакетКомплектов.Состав.Добавить().Данные = ПакетОтображаемыхДокументов; + КонецЦикла; - Возврат ПакетОтображаемыхДокументов; + Возврат ПакетКомплектов; КонецФункции @@ -1802,43 +1892,25 @@ Возврат ПакетСОднимДокументом; КонецФункции -// Добавляет команды печати в список, если у менеджера печати есть соответствующая процедура. -Функция ДобавитьКомандыИзМенеджераПечати(МенеджерПечати, КомандыПечати) - ДобавляемыеКомандыПечати = СоздатьКоллекциюКомандПечати(); - Попытка - МенеджерПечати.ДобавитьКомандыПечати(ДобавляемыеКомандыПечати); - Исключение - Если ДобавляемыеКомандыПечати.Количество() > 0 Тогда - ВызватьИсключение; - Иначе - Возврат Ложь; - КонецЕсли; - КонецПопытки; - - Для Каждого КомандаПечати Из ДобавляемыеКомандыПечати Цикл - ЗаполнитьЗначенияСвойств(КомандыПечати.Добавить(), КомандаПечати); - КонецЦикла; - - Возврат Истина; -КонецФункции - // Собирает список команд печати из нескольких объектов. Процедура ЗаполнитьКомандыПечатиДляСпискаОбъектов(СписокОбъектов, КомандыПечати) Для Каждого ОбъектМетаданных Из СписокОбъектов Цикл - Если ОбъектМетаданных.ОсновнаяФормаСписка = Неопределено Тогда - Продолжить; // Не предусмотрены команды печати в основной форме списка объекта. + ИсточникиКомандПечати = ИсточникиКомандПечати(); + Если ИсточникиКомандПечати.Найти(ОбъектМетаданных) = Неопределено Тогда + Продолжить; КонецЕсли; - ИмяФормыСписка = ОбъектМетаданных.ОсновнаяФормаСписка.ПолноеИмя(); - КомандыПечатиФормы =УправлениеПечатьюПовтИсп.КомандыПечатиФормы(ИмяФормыСписка).Скопировать(); + + КомандыПечатиФормы = КомандыПечатиОбъекта(ОбъектМетаданных); + Для Каждого ДобавляемаяКомандаПечати Из КомандыПечатиФормы Цикл // Поиск аналогичной ранее добавленной команды печати. - СтруктураОтбора = "Идентификатор,Обработчик,СразуНаПринтер,ФорматСохранения"; - Если ПустаяСтрока(ДобавляемаяКомандаПечати.Обработчик) Тогда - СтруктураОтбора = СтруктураОтбора + ",МенеджерПечати"; - КонецЕсли; - Отбор = Новый Структура(СтруктураОтбора); - ЗаполнитьЗначенияСвойств(Отбор, ДобавляемаяКомандаПечати); - НайденныеКоманды = КомандыПечати.НайтиСтроки(Отбор); + НайденныеКоманды = Новый Массив; + Для Каждого ИмеющаясяКомандаПечати Из КомандыПечати Цикл + Если УникальныйИдентификаторКомандыПечати(ИмеющаясяКомандаПечати) = ДобавляемаяКомандаПечати.УникальныйИдентификатор Тогда + НайденныеКоманды.Добавить(ИмеющаясяКомандаПечати); + КонецЕсли; + КонецЦикла; + Если НайденныеКоманды.Количество() > 0 Тогда Для Каждого ИмеющаясяКомандаПечати Из НайденныеКоманды Цикл // Если уже есть такая команда, дополняем список типов объектов, для которых она предназначена. @@ -1857,11 +1929,116 @@ Если ДобавляемаяКомандаПечати.ТипыОбъектовПечати.Количество() = 0 Тогда ДобавляемаяКомандаПечати.ТипыОбъектовПечати.Добавить(Тип(СтрЗаменить(ОбъектМетаданных.ПолноеИмя(), ".", "Ссылка."))); КонецЕсли; - ЗаполнитьЗначенияСвойств(КомандыПечати.Добавить(), ДобавляемаяКомандаПечати); + ЗаполнитьЗначенияСвойств(КомандыПечати.Добавить(), ДобавляемаяКомандаПечати, , "СписокФорм,МестоРазмещения"); КонецЦикла; КонецЦикла; КонецПроцедуры +// Только для внутреннего использования. +// +Функция КоличествоИспользуемыхПользовательскихМакетов() + + Запрос = Новый Запрос; + Запрос.Текст = + "ВЫБРАТЬ + | ПользовательскиеМакетыПечати.ИмяМакета + |ИЗ + | РегистрСведений.ПользовательскиеМакетыПечати КАК ПользовательскиеМакетыПечати + |ГДЕ + | ПользовательскиеМакетыПечати.Использование = ИСТИНА"; + + Результат = Запрос.Выполнить().Выгрузить(); + + Возврат Результат.Количество(); + +КонецФункции + +Процедура УстановитьНастройкиКомандПечати(КомандыПечати, Владелец) + + УстановитьПривилегированныйРежим(Истина); + + ТекстЗапроса = + "ВЫБРАТЬ + | НастройкиКомандПечати.УникальныйИдентификатор + |ИЗ + | РегистрСведений.НастройкиКомандПечати КАК НастройкиКомандПечати + |ГДЕ + | НастройкиКомандПечати.Владелец = &Владелец + | И НастройкиКомандПечати.Видимость = ЛОЖЬ"; + + Запрос = Новый Запрос(ТекстЗапроса); + Запрос.УстановитьПараметр("Владелец", Владелец); + СписокОтключенных = Запрос.Выполнить().Выгрузить().ВыгрузитьКолонку("УникальныйИдентификатор"); + + Для Каждого КомандаПечати Из КомандыПечати Цикл + КомандаПечати.УникальныйИдентификатор = УникальныйИдентификаторКомандыПечати(КомандаПечати); + Если СписокОтключенных.Найти(КомандаПечати.УникальныйИдентификатор) <> Неопределено Тогда + КомандаПечати.Отключена = Истина; + КонецЕсли; + КонецЦикла; + +КонецПроцедуры + +Функция ХешСумма(Ключ) + ХешированиеДанных = Новый ХешированиеДанных(ХешФункция.MD5); + ХешированиеДанных.Добавить(Ключ); + Возврат СтрЗаменить(ХешированиеДанных.ХешСумма, " ", ""); +КонецФункции + +Функция УникальныйИдентификаторКомандыПечати(КомандаПечати) + + Параметры = Новый Массив; + Параметры.Добавить("Идентификатор"); + Параметры.Добавить("МенеджерПечати"); + Параметры.Добавить("Обработчик"); + Параметры.Добавить("СразуНаПринтер"); + Параметры.Добавить("ФорматСохранения"); + Параметры.Добавить("ФиксированныйКомплект"); + Параметры.Добавить("ДополнительныеПараметры"); + + СтруктураПараметров = Новый Структура(СтрСоединить(Параметры, ",")); + ЗаполнитьЗначенияСвойств(СтруктураПараметров, КомандаПечати); + + Возврат ХешСумма(ОбщегоНазначения.ЗначениеВСтрокуXML(СтруктураПараметров)); + +КонецФункции + +Функция КомандыПечатиОбъекта(ОбъектМетаданных) Экспорт + + КомандыПечати = СоздатьКоллекциюКомандПечати(); + ИмяОбъекта = ОбъектМетаданных.ПолноеИмя(); + + МенеджерПечати = ОбщегоНазначения.МенеджерОбъектаПоПолномуИмени(ИмяОбъекта); + ДобавляемыеКомандыПечати = СоздатьКоллекциюКомандПечати(); + МенеджерПечати.ДобавитьКомандыПечати(ДобавляемыеКомандыПечати); + + Для Каждого КомандаПечати Из ДобавляемыеКомандыПечати Цикл + Если ПустаяСтрока(КомандаПечати.МенеджерПечати) Тогда + КомандаПечати.МенеджерПечати = ИмяОбъекта; + КонецЕсли; + Если КомандаПечати.Порядок = 0 Тогда + КомандаПечати.Порядок = 50; + КонецЕсли; + ЗаполнитьЗначенияСвойств(КомандыПечати.Добавить(), КомандаПечати); + КонецЦикла; + + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ДополнительныеОтчетыИОбработки") Тогда + МодульДополнительныеОтчетыИОбработки = ОбщегоНазначения.ОбщийМодуль("ДополнительныеОтчетыИОбработки"); + МодульДополнительныеОтчетыИОбработки.ПриПолученииКомандПечати(КомандыПечати, ИмяОбъекта); + КонецЕсли; + + Для Каждого КомандаПечати Из КомандыПечати Цикл + КомандаПечати.ДополнительныеПараметры.Вставить("ДополнитьКомплектВнешнимиПечатнымиФормами", КомандаПечати.ДополнитьКомплектВнешнимиПечатнымиФормами); + КонецЦикла; + + КомандыПечати.Сортировать("Порядок Возр, Представление Возр"); + УстановитьНастройкиКомандПечати(КомандыПечати, ОбщегоНазначения.ИдентификаторОбъектаМетаданных(ОбъектМетаданных)); + ОпределитьВидимостьКомандПечатиПоФункциональнымОпциям(КомандыПечати); + + Возврат КомандыПечати; + +КонецФункции + //////////////////////////////////////////////////////////////////////////////// // Обработчики условных вызовов в другие подсистемы. @@ -1911,26 +2088,3 @@ КонецПроцедуры #КонецОбласти - -#Область ВспомогательныеПроцедурыИФункции - -// Только для внутреннего использования. -// -Функция КоличествоИспользуемыхПользовательскихМакетов() - - Запрос = Новый Запрос; - Запрос.Текст = - "ВЫБРАТЬ - | ПользовательскиеМакетыПечати.ИмяМакета - |ИЗ - | РегистрСведений.ПользовательскиеМакетыПечати КАК ПользовательскиеМакетыПечати - |ГДЕ - | ПользовательскиеМакетыПечати.Использование = ИСТИНА"; - - Результат = Запрос.Выполнить().Выгрузить(); - - Возврат Результат.Количество(); - -КонецФункции - -#КонецОбласти diff --git a/SSL/src/CommonModules/УправлениеПечатьюOOWriterКлиент/Module.bsl b/SSL/src/CommonModules/УправлениеПечатьюOOWriterКлиент/Module.bsl index 3a6336874..22af37cf8 100644 --- a/SSL/src/CommonModules/УправлениеПечатьюOOWriterКлиент/Module.bsl +++ b/SSL/src/CommonModules/УправлениеПечатьюOOWriterКлиент/Module.bsl @@ -25,7 +25,7 @@ ServiceManager = Новый COMОбъект("com.sun.star.ServiceManager"); Исключение ЖурналРегистрацииКлиент.ДобавитьСообщениеДляЖурналаРегистрации(СобытиеЖурналаРегистрации(), "Ошибка", - НСтр("ru = 'Ошибка при связи с сервис менеджером (com.sun.star.ServiceManager).'") + + НСтр("ru = 'Ошибка при связи с сервис менеджером (com.sun.star.ServiceManager).'") + Символы.ПС + ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()),,Истина); НеУдалосьСформироватьПечатнуюФорму(ИнформацияОбОшибке()); КонецПопытки; @@ -34,7 +34,7 @@ Desktop = ServiceManager.CreateInstance("com.sun.star.frame.Desktop"); Исключение ЖурналРегистрацииКлиент.ДобавитьСообщениеДляЖурналаРегистрации(СобытиеЖурналаРегистрации(), "Ошибка", - НСтр("ru = 'Ошибка при запуске сервиса Desktop (com.sun.star.frame.Desktop).'") + + НСтр("ru = 'Ошибка при запуске сервиса Desktop (com.sun.star.frame.Desktop).'") + Символы.ПС + ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()),,Истина); НеУдалосьСформироватьПечатнуюФорму(ИнформацияОбОшибке()); КонецПопытки; @@ -90,7 +90,7 @@ ServiceManager = Новый COMОбъект("com.sun.star.ServiceManager"); Исключение ЖурналРегистрацииКлиент.ДобавитьСообщениеДляЖурналаРегистрации(СобытиеЖурналаРегистрации(), "Ошибка", - НСтр("ru = 'Ошибка при связи с сервис менеджером (com.sun.star.ServiceManager).'") + + НСтр("ru = 'Ошибка при связи с сервис менеджером (com.sun.star.ServiceManager).'") + Символы.ПС + ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()),,Истина); НеУдалосьСформироватьПечатнуюФорму(ИнформацияОбОшибке()); КонецПопытки; @@ -99,7 +99,7 @@ Desktop = ServiceManager.CreateInstance("com.sun.star.frame.Desktop"); Исключение ЖурналРегистрацииКлиент.ДобавитьСообщениеДляЖурналаРегистрации(СобытиеЖурналаРегистрации(), "Ошибка", - НСтр("ru = 'Ошибка при запуске сервиса Desktop (com.sun.star.frame.Desktop).'") + + НСтр("ru = 'Ошибка при запуске сервиса Desktop (com.sun.star.frame.Desktop).'") + Символы.ПС + ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()),,Истина); НеУдалосьСформироватьПечатнуюФорму(ИнформацияОбОшибке()); КонецПопытки; diff --git a/SSL/src/CommonModules/УправлениеПечатьюВызовСервера/Module.bsl b/SSL/src/CommonModules/УправлениеПечатьюВызовСервера/Module.bsl index 8ae5e6dcc..f4d540cf8 100644 --- a/SSL/src/CommonModules/УправлениеПечатьюВызовСервера/Module.bsl +++ b/SSL/src/CommonModules/УправлениеПечатьюВызовСервера/Module.bsl @@ -23,14 +23,6 @@ КонецФункции -// Устарела. Следует использовать МакетыИДанныеОбъектовДляПечати. -// -Функция ПолучитьМакетыИДанныеОбъектов(Знач ИмяМенеджераПечати, Знач ИменаМакетов, Знач СоставДокументов) Экспорт - - Возврат УправлениеПечатью.МакетыИДанныеОбъектовДляПечати(ИмяМенеджераПечати, ИменаМакетов, СоставДокументов); - -КонецФункции - #КонецОбласти #Область СлужебныеПроцедурыИФункции diff --git a/SSL/src/CommonModules/УправлениеПечатьюКлиент/Module.bsl b/SSL/src/CommonModules/УправлениеПечатьюКлиент/Module.bsl index 7082d4acd..4aecf51cd 100644 --- a/SSL/src/CommonModules/УправлениеПечатьюКлиент/Module.bsl +++ b/SSL/src/CommonModules/УправлениеПечатьюКлиент/Module.bsl @@ -405,9 +405,7 @@ ИначеЕсли ОписаниеОбласти.ТипОбласти = "Список" Тогда Область = УправлениеПечатьюMSWordКлиент.ПолучитьОбластьМакетаMSWord(СсылкаНаМакет, ОписаниеОбласти.ИмяОбласти, 1, 0); Иначе - ВызватьИсключение - СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Тип области не указан или указан не корректно: %1.'"), ОписаниеОбласти.ТипОбласти); + ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Тип области не указан или указан не корректно: %1.'"), ОписаниеОбласти.ТипОбласти); КонецЕсли; Если Область <> Неопределено Тогда @@ -424,9 +422,7 @@ ИЛИ ОписаниеОбласти.ТипОбласти = "Список" Тогда Область = УправлениеПечатьюOOWriterКлиент.ПолучитьОбластьМакета(СсылкаНаМакет, ОписаниеОбласти.ИмяОбласти); Иначе - ВызватьИсключение - СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Тип области не указан или указан не корректно: %1.'"), ОписаниеОбласти.ИмяОбласти); + ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Тип области не указан или указан не корректно: %1.'"), ОписаниеОбласти.ИмяОбласти); КонецЕсли; Если Область <> Неопределено Тогда @@ -508,10 +504,8 @@ Исключение СообщениеОбОшибке = СокрЛП(КраткоеПредставлениеОшибки(ИнформацияОбОшибке())); СообщениеОбОшибке = ?(Прав(СообщениеОбОшибке, 1) = ".", СообщениеОбОшибке, СообщениеОбОшибке + "."); - СообщениеОбОшибке = СообщениеОбОшибке + " " + - СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Ошибка при попытке вывести область ""%1"" из макета.'"), - ОбластьМакета.ОписаниеОбласти.ИмяОбласти); + СообщениеОбОшибке = СообщениеОбОшибке + " " + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Ошибка при попытке вывести область ""%1"" из макета.'"), + ОбластьМакета.ОписаниеОбласти.ИмяОбласти); ВызватьИсключение СообщениеОбОшибке; КонецПопытки; @@ -630,14 +624,6 @@ КонецПроцедуры -// Устарела. Следует использовать ОбластьМакета. -// -Функция ПолучитьОбласть(Знач СсылкаМакет, Знач ОписаниеОбласти) Экспорт - - Возврат ОбластьМакета(СсылкаМакет, ОписаниеОбласти); - -КонецФункции - #КонецОбласти #КонецОбласти @@ -673,227 +659,6 @@ #Область ИспользованиеМодальности -// ИспользованиеМодальности - -#Если ВебКлиент Тогда -// Устарела. Используется устаревшей функцией ИнициализироватьМакет. -// -// Функция получает файл(ы) c сервера в локальный каталог на диск и возвращает -// имя каталога, в который они были сохранены -// Параметры: -// ПутьККаталогу - строка - путь к каталогу, в который должны быть сохранены файлы -// ПолучаемыеФайлы - соответствие - -// ключ - имя файла -// значение - двоичные данные файла -// -Функция ПолучитьФайлыВКаталогФайловПечати(ПутьККаталогу, ПолучаемыеФайлы) Экспорт - - ТребуетсяУстановитьКаталогПечати = Не ЗначениеЗаполнено(ПутьККаталогу); - Если Не ТребуетсяУстановитьКаталогПечати Тогда - Файл = Новый Файл(ПутьККаталогу); - Если НЕ Файл.Существует() Тогда - ТребуетсяУстановитьКаталогПечати = Истина; - КонецЕсли; - КонецЕсли; - - Если ТребуетсяУстановитьКаталогПечати Тогда - ПутьККаталогу = КаталогВременныхФайлов(); - КонецЕсли; - - ФайлыВоВременномХранилище = ПолучитьАдресаФайловВоВременномХранилище(ПолучаемыеФайлы); - - ОписанияФайлов = Новый Массив; - - Для Каждого ФайлВоВременномХранилище Из ФайлыВоВременномХранилище Цикл - ОписанияФайлов.Добавить(Новый ОписаниеПередаваемогоФайла(ФайлВоВременномХранилище.Ключ,ФайлВоВременномХранилище.Значение)); - КонецЦикла; - - Если НЕ ПолучитьФайлы(ОписанияФайлов, , ПутьККаталогу, Ложь) Тогда - Возврат Неопределено; - КонецЕсли; - - Если Прав(ПутьККаталогу, 1) <> "\" Тогда - ПутьККаталогу = ПутьККаталогу + "\"; - КонецЕсли; - - Возврат ПутьККаталогу; - -КонецФункции - -// Устарела. Используется устаревшей функцией ПолучитьФайлыВКаталогФайловПечати. -// Помещает набор двоичных данных во временное хранилище -// Параметры: -// НаборЗначений - соответствие, ключ - ключ, связанный с двоичными данными -// значение - ДвоичныеДанные -// Возвращаемое значение: -// соответствие: ключ - ключ, связанный с адресом во временном хранилище -// значение - адрес во временном хранилище -// -Функция ПолучитьАдресаФайловВоВременномХранилище(НаборЗначений) - - Результат = Новый Соответствие; - - Для Каждого КлючЗначение Из НаборЗначений Цикл - Результат.Вставить(КлючЗначение.Ключ, ПоместитьВоВременноеХранилище(КлючЗначение.Значение)); - КонецЦикла; - - Возврат Результат; - -КонецФункции -#КонецЕсли - -// Устарела. Следует использовать ПроверитьПроведенностьДокументов. -// -// Выполняет интерактивное проведение документов перед печатью. -// Если есть непроведенные документы, предлагает выполнить проведение. Спрашивает -// пользователя о продолжении, если какие-то из документов не провелись и имеются проведенные. -// -// Параметры -// ДокументыМассив - Массив - ссылки на документы, которые требуется провести перед печатью. -// После выполнения функции из массива исключаются непроведенные документы. -// ФормаИсточник - УправляемаяФорма - форма, из которой было вызвана команда. -// -// Возвращаемое значение: -// Булево - есть документы для печати в параметре ДокументыМассив. -// -Функция ПроверитьДокументыПроведены(ДокументыМассив, ФормаИсточник = Неопределено) Экспорт - - ОчиститьСообщения(); - ДокументыТребующиеПроведение = ОбщегоНазначенияВызовСервера.ПроверитьПроведенностьДокументов(ДокументыМассив); - КоличествоНепроведенныхДокументов = ДокументыТребующиеПроведение.Количество(); - - Если КоличествоНепроведенныхДокументов > 0 Тогда - - Если КоличествоНепроведенныхДокументов = 1 Тогда - ТекстВопроса = НСтр("ru = 'Для того чтобы распечатать документ, его необходимо предварительно провести. Выполнить проведение документа и продолжить?'"); - Иначе - ТекстВопроса = НСтр("ru = 'Для того чтобы распечатать документы, их необходимо предварительно провести. Выполнить проведение документов и продолжить?'"); - КонецЕсли; - - КодОтвета = Вопрос(ТекстВопроса, РежимДиалогаВопрос.ДаНет); - Если КодОтвета <> КодВозвратаДиалога.Да Тогда - Возврат Ложь; - КонецЕсли; - - ДанныеОНепроведенныхДокументах = ОбщегоНазначенияВызовСервера.ПровестиДокументы(ДокументыТребующиеПроведение); - - // сообщаем о документах, которые не провелись - ШаблонСообщения = НСтр("ru = 'Документ %1 не проведен: %2 Печать невозможна.'"); - НепроведенныеДокументы = Новый Массив; - Для Каждого ИнформацияОДокументе Из ДанныеОНепроведенныхДокументах Цикл - ОбщегоНазначенияКлиентСервер.СообщитьПользователю( - СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонСообщения, Строка(ИнформацияОДокументе.Ссылка), - ИнформацияОДокументе.ОписаниеОшибки), ИнформацияОДокументе.Ссылка); - НепроведенныеДокументы.Добавить(ИнформацияОДокументе.Ссылка); - КонецЦикла; - - КоличествоНепроведенныхДокументов = НепроведенныеДокументы.Количество(); - - // оповещаем открытые формы о том, что были проведены документы - ПроведенныеДокументы = ОбщегоНазначенияКлиентСервер.СократитьМассив(ДокументыТребующиеПроведение, НепроведенныеДокументы); - ТипыПроведенныхДокументов = Новый Соответствие; - Для Каждого ПроведенныйДокумент Из ПроведенныеДокументы Цикл - ТипыПроведенныхДокументов.Вставить(ТипЗнч(ПроведенныйДокумент)); - КонецЦикла; - Для Каждого Тип Из ТипыПроведенныхДокументов Цикл - ОповеститьОбИзменении(Тип.Ключ); - КонецЦикла; - - // Если команда была вызвана из формы, то зачитываем в форму актуальную (проведенную) копию из базы. - Если ТипЗнч(ФормаИсточник) = Тип("УправляемаяФорма") Тогда - Попытка - ФормаИсточник.Прочитать(); - Исключение - // Если метода Прочитать нет, значит печать выполнена не из формы объекта. - КонецПопытки; - КонецЕсли; - - // обновляем исходный массив документов - ДокументыМассив = ОбщегоНазначенияКлиентСервер.СократитьМассив(ДокументыМассив, НепроведенныеДокументы); - - КонецЕсли; - - ЕстьДокументыКоторыеМожноПечатать = ДокументыМассив.Количество() > 0; - - Отказ = Ложь; - Если КоличествоНепроведенныхДокументов > 0 Тогда - // спрашиваем пользователя о необходимости продолжения печати при наличии непроведенных документов - - ТекстДиалога = НСтр("ru = 'Не удалось провести один или несколько документов.'"); - КнопкиДиалога = Новый СписокЗначений; - - Если ЕстьДокументыКоторыеМожноПечатать Тогда - ТекстДиалога = ТекстДиалога + " " + НСтр("ru = 'Продолжить?'"); - КнопкиДиалога.Добавить(КодВозвратаДиалога.Пропустить, НСтр("ru = 'Продолжить'")); - КнопкиДиалога.Добавить(КодВозвратаДиалога.Отмена); - Иначе - КнопкиДиалога.Добавить(КодВозвратаДиалога.ОК); - КонецЕсли; - - Ответ = Вопрос(ТекстДиалога, КнопкиДиалога); - Если Ответ <> КодВозвратаДиалога.Пропустить Тогда - Отказ = Истина; - КонецЕсли; - КонецЕсли; - - Возврат Не Отказ; - -КонецФункции - -// Устарела. Следует использовать процедуру ИнициализироватьМакетОфисногоДокумента. -// -// Создает соединение с макетом. В дальнейшем это соединение используется -// при получении из него областей (тегов и таблиц). -// -// Параметры: -// ДвоичныеДанныеМакета - ДвоичныеДанные - двоичные данные макета -// ТипМакета - Строка - тип макета печатной формы "DOC" или "ODT"; -// Возвращаемое значение: -// Структура. -// -Функция ИнициализироватьМакет(Знач ДвоичныеДанныеМакета, Знач ТипМакета, Знач ПутьККаталогу = "", Знач ИмяМакета = "") Экспорт - -#Если ВебКлиент Тогда - ТекстСообщения = НСтр("ru = 'Для продолжения печати необходимо установить расширение работы с файлами.'"); - Если Не ОбщегоНазначенияКлиент.РасширениеРаботыСФайламиПодключено(ТекстСообщения) Тогда - Возврат Неопределено; - КонецЕсли; - - Если ПустаяСтрока(ИмяМакета) Тогда - ИмяВременногоФайла = Строка(Новый УникальныйИдентификатор) + "." + НРег(ТипМакета); - Иначе - ИмяВременногоФайла = ИмяМакета + "." + НРег(ТипМакета); - КонецЕсли; - - ПолучаемыеФайлы = Новый Соответствие; - ПолучаемыеФайлы.Вставить(ИмяВременногоФайла, ДвоичныеДанныеМакета); - - Результат = ПолучитьФайлыВКаталогФайловПечати(ПутьККаталогу, ПолучаемыеФайлы); - - Если Результат = Неопределено Тогда - Возврат Неопределено; - КонецЕсли; - - ИмяВременногоФайла = Результат + ИмяВременногоФайла; -#Иначе - ИмяВременногоФайла = ""; -#КонецЕсли - - Если ВРег(ТипМакета) = "DOC" Тогда - Макет = УправлениеПечатьюMSWordКлиент.ПолучитьМакетMSWord(ДвоичныеДанныеМакета, ИмяВременногоФайла); - Макет.Вставить("Тип", "DOC"); - Возврат Макет; - ИначеЕсли ВРег(ТипМакета) = "ODT" Тогда - Макет = УправлениеПечатьюOOWriterКлиент.ПолучитьМакетOOWriter(ДвоичныеДанныеМакета, ИмяВременногоФайла); - Макет.Вставить("Тип", "ODT"); - Макет.Вставить("НастройкиСтраницыМакета", Неопределено); - Возврат Макет; - КонецЕсли; - -КонецФункции - -// Конец ИспользованиеМодальности - #КонецОбласти #КонецОбласти diff --git a/SSL/src/CommonModules/УправлениеПечатьюПереопределяемый/Module.bsl b/SSL/src/CommonModules/УправлениеПечатьюПереопределяемый/Module.bsl index 1c8c5dcdf..762ef5ce4 100644 --- a/SSL/src/CommonModules/УправлениеПечатьюПереопределяемый/Module.bsl +++ b/SSL/src/CommonModules/УправлениеПечатьюПереопределяемый/Module.bsl @@ -31,6 +31,29 @@ // Переопределяет список команд печати, получаемый функцией УправлениеПечатью.КомандыПечатиФормы. Процедура ПередДобавлениемКомандПечати(ИмяФормы, КомандыПечати, СтандартнаяОбработка) Экспорт +КонецПроцедуры + +// Дополнительные настройки списка команд печати. +// +// Параметры: +// НастройкиСписка - Структура - модификаторы списка команд печати. +// * МенеджерКомандПечати - МенеджерОбъекта - менеджер объекта, в котором формируется список команд печати; +// * АвтоматическоеЗаполнение - Булево - заполнять команды печати из объектов, входящих в состав журнала. +// Значение по умолчанию: Истина. +// +Процедура ПриПолученииНастроекСпискаКомандПечати(НастройкиСписка) Экспорт + +КонецПроцедуры + +// Определяет объекты, в которых есть процедура ДобавитьКомандыПечати(). +// +// Параметры: +// СписокОбъектов - Массив - список менеджеров объектов. +// +Процедура ПриОпределенииОбъектовСКомандамиПечати(СписокОбъектов) Экспорт + + + КонецПроцедуры #КонецОбласти diff --git a/SSL/src/CommonModules/УправлениеПечатьюСлужебныйКлиент/Module.bsl b/SSL/src/CommonModules/УправлениеПечатьюСлужебныйКлиент/Module.bsl index c6ffd2442..12d5fa430 100644 --- a/SSL/src/CommonModules/УправлениеПечатьюСлужебныйКлиент/Module.bsl +++ b/SSL/src/CommonModules/УправлениеПечатьюСлужебныйКлиент/Module.bsl @@ -96,6 +96,22 @@ ОписаниеКоманды = ОбщегоНазначенияКлиентСервер.СкопироватьСтруктуру(ОписаниеКоманды); ОписаниеКоманды.Вставить("ОбъектыПечати", ОбъектыПечати); + Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.ОценкаПроизводительности") Тогда + МодульОценкаПроизводительностиКлиентСервер = ОбщегоНазначенияКлиент.ОбщийМодуль("ОценкаПроизводительностиКлиентСервер"); + + // Не локализуется + ИмяПоказателя = "Печать" + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку("/%1/%2/%3/%4/%5/%6/%7", + ОписаниеКоманды.Идентификатор, + ОписаниеКоманды.МенеджерПечати, + ОписаниеКоманды.Обработчик, + Формат(ОписаниеКоманды.ОбъектыПечати.Количество(), "ЧГ=0"), + ?(ОписаниеКоманды.СразуНаПринтер, "Принтер", ""), + ОписаниеКоманды.ФорматСохранения, + ?(ОписаниеКоманды.ФиксированныйКомплект, "Фиксированный", "")); + + МодульОценкаПроизводительностиКлиентСервер.НачатьЗамерВремениТехнологический(НРег(ИмяПоказателя)); + КонецЕсли; + Если ОписаниеКоманды.МенеджерПечати = "СтандартныеПодсистемы.ДополнительныеОтчетыИОбработки" И ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.ДополнительныеОтчетыИОбработки") Тогда МодульДополнительныеОтчетыИОбработкиКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("ДополнительныеОтчетыИОбработкиКлиент"); @@ -157,8 +173,8 @@ НепроведенныеДокументы = Новый Массив; Для Каждого ИнформацияОДокументе Из ДанныеОНепроведенныхДокументах Цикл ОбщегоНазначенияКлиентСервер.СообщитьПользователю( - СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонСообщения, Строка(ИнформацияОДокументе.Ссылка), - ИнформацияОДокументе.ОписаниеОшибки), ИнформацияОДокументе.Ссылка); + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонСообщения, Строка(ИнформацияОДокументе.Ссылка), ИнформацияОДокументе.ОписаниеОшибки), + ИнформацияОДокументе.Ссылка); НепроведенныеДокументы.Добавить(ИнформацияОДокументе.Ссылка); КонецЦикла; ДополнительныеПараметры.Вставить("НепроведенныеДокументы", НепроведенныеДокументы); diff --git a/SSL/src/CommonModules/УправлениеСвойствами/Module.bsl b/SSL/src/CommonModules/УправлениеСвойствами/Module.bsl index 1d0a9fc5c..eecbd4319 100644 --- a/SSL/src/CommonModules/УправлениеСвойствами/Module.bsl +++ b/SSL/src/CommonModules/УправлениеСвойствами/Module.bsl @@ -46,40 +46,22 @@ // При вызове процедуры ПередЗаписьюНаСервере в режиме скрытия удаленных, удаленные значения // очищаются (не переносятся обратно в объект), а режим СкрытьУдаленные устанавливается Ложь. // -// Устарел3 - Строка - имя группы формы, в которой будут размещены свойства. -// -// Устарел4 - Булево - если Истина, тогда в форме создается таблица описания дополнительных реквизитов -// параметр Объект игнорируется, дополнительные реквизиты не создаются и не заполняются. -// -// Это востребовано при последовательном использовании одной формы для просмотра или редактирования -// дополнительных реквизитов разных объектов (в том числе разных типов). -// -// После выполнения ПриСозданииНаСервере следует вызывать ЗаполнитьДополнительныеРеквизитыВФорме() -// для добавления и заполнения дополнительных реквизитов. -// Чтобы сохранить изменения следует вызвать ПеренестиЗначенияИзРеквизитовФормыВОбъект(), -// а для обновления состава реквизитов вызвать ОбновитьЭлементыДополнительныхРеквизитов(). -// -// Устарел5 - Строка - имя группы формы, в которую будет добавлена кнопка. -// РедактироватьСоставДополнительныхРеквизитов. Если имя элемента не указано, -// используется стандартная группа "Форма.КоманднаяПанель". -// -Процедура ПриСозданииНаСервере(Форма, ДополнительныеПараметры = Неопределено, - Устарел3 = "", Устарел4 = Ложь, Устарел5 = "") Экспорт +Процедура ПриСозданииНаСервере(Форма, ДополнительныеПараметры = Неопределено) Экспорт + + Если Не ИспользуютсяСвойства(Форма, ДополнительныеПараметры) Тогда + Возврат; + КонецЕсли; Контекст = Новый Структура; Контекст.Вставить("Объект", Неопределено); Контекст.Вставить("ИмяЭлементаДляРазмещения", ""); + Контекст.Вставить("ОтложеннаяИнициализация", Ложь); Контекст.Вставить("ПроизвольныйОбъект", Ложь); Контекст.Вставить("ИмяЭлементаКоманднойПанели", ""); Контекст.Вставить("СкрытьУдаленные", Неопределено); Если ТипЗнч(ДополнительныеПараметры) = Тип("Структура") Тогда ЗаполнитьЗначенияСвойств(Контекст, ДополнительныеПараметры); - Иначе - Контекст.Объект = ДополнительныеПараметры; - Контекст.ИмяЭлементаДляРазмещения = Устарел3; - Контекст.ПроизвольныйОбъект = Устарел4; - Контекст.ИмяЭлементаКоманднойПанели = Устарел5; КонецЕсли; Если Контекст.ПроизвольныйОбъект Тогда @@ -96,10 +78,39 @@ КонецЕсли; КонецЕсли; - СоздатьОсновныеОбъектыФормы(Форма, Контекст.ИмяЭлементаДляРазмещения, - СоздатьОписаниеДополнительныхРеквизитов, Контекст.ИмяЭлементаКоманднойПанели); + СоздатьОсновныеОбъектыФормы(Форма, Контекст, СоздатьОписаниеДополнительныхРеквизитов); - Если НЕ Контекст.ПроизвольныйОбъект Тогда + Если Контекст.ОтложеннаяИнициализация Тогда + + Если НЕ Форма.Свойства_ИспользоватьСвойства + ИЛИ НЕ Форма.Свойства_ИспользоватьДопРеквизиты Тогда + Возврат; + КонецЕсли; + + КлючНазначения = Неопределено; + НаборыСвойствОбъекта = УправлениеСвойствамиСлужебный.ПолучитьНаборыСвойствОбъекта( + ОписаниеОбъекта, КлючНазначения); + + Для каждого Строка Из НаборыСвойствОбъекта Цикл + Если УправлениеСвойствамиСлужебный.ВидыСвойствНабора(Строка.Набор).ДополнительныеРеквизиты Тогда + + Форма.Свойства_НаборыДополнительныхРеквизитовОбъекта.Добавить( + Строка.Набор, Строка.Заголовок); + КонецЕсли; + КонецЦикла; + + СведенияНеНайдены = УправлениеСвойствамиСлужебный.ДополнительныеРеквизитыИСведенияНеНайдены( + Форма.Свойства_НаборыДополнительныхРеквизитовОбъекта, Ложь, Истина); + + Если Форма.ПараметрыСвойств.Свойство("ДобавленаПустаяДекорация") Тогда + Форма.Элементы.Свойства_ПустаяДекорация.Видимость = Не СведенияНеНайдены; + КонецЕсли; + + ОбновитьКлючНазначенияФормы(Форма, КлючНазначения); + КонецЕсли; + + Если Не Контекст.ПроизвольныйОбъект + И Не Контекст.ОтложеннаяИнициализация Тогда ЗаполнитьДополнительныеРеквизитыВФорме(Форма, ОписаниеОбъекта, , Контекст.СкрытьУдаленные); КонецЕсли; @@ -142,8 +153,10 @@ // Форма - УправляемаяФорма - уже настроена в процедуре ПриСозданииНаСервере. // Отказ - Булево - параметр обработчика ОбработкаПроверкиЗаполненияНаСервере. // ПроверяемыеРеквизиты - Массив - параметр обработчика ОбработкаПроверкиЗаполненияНаСервере. +// Объект - Объект - по типу объекта, если свойство не указано или Неопределено, +// объект берется из реквизита формы "Объект". // -Процедура ОбработкаПроверкиЗаполнения(Форма, Отказ, ПроверяемыеРеквизиты) Экспорт +Процедура ОбработкаПроверкиЗаполнения(Форма, Отказ, ПроверяемыеРеквизиты, Объект = Неопределено) Экспорт Если НЕ Форма.Свойства_ИспользоватьСвойства ИЛИ НЕ Форма.Свойства_ИспользоватьДопРеквизиты Тогда @@ -155,12 +168,31 @@ Для каждого Строка Из Форма.Свойства_ОписаниеДополнительныхРеквизитов Цикл Если Строка.ЗаполнятьОбязательно И НЕ Строка.Удалено Тогда + Результат = Истина; + Если Объект = Неопределено Тогда + ОписаниеОбъекта = Форма.Объект; + Иначе + ОписаниеОбъекта = Объект; + КонецЕсли; + + Для Каждого ЗависимыйРеквизит Из Форма.Свойства_ОписаниеЗависимыхДополнительныхРеквизитов Цикл + Если ЗависимыйРеквизит.ИмяРеквизитаЗначение = Строка.ИмяРеквизитаЗначение + И ЗависимыйРеквизит.УсловиеОбязательностиЗаполнения <> Неопределено Тогда + ЗначенияПараметров = ЗависимыйРеквизит.УсловиеОбязательностиЗаполнения.ЗначенияПараметров; + КодУсловия = ЗависимыйРеквизит.УсловиеОбязательностиЗаполнения.КодУсловия; + Выполнить("Результат = (" + КодУсловия + ")"); + Прервать; + КонецЕсли; + КонецЦикла; + Если Не Результат Тогда + Продолжить; + КонецЕсли; + Если НЕ ЗначениеЗаполнено(Форма[Строка.ИмяРеквизитаЗначение]) Тогда ОбщегоНазначенияКлиентСервер.ДобавитьОшибкуПользователю(Ошибки, Строка.ИмяРеквизитаЗначение, - СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Поле ""%1"" не заполнено.'"), Строка.Наименование), + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Поле ""%1"" не заполнено.'"), Строка.Наименование), ""); КонецЕсли; КонецЕсли; @@ -210,6 +242,7 @@ КонецЕсли; Иначе НаборСвойствОбъект = Справочники.НаборыДополнительныхРеквизитовИСведений.СоздатьЭлемент(); + НаборСвойствОбъект.Используется = Истина; КонецЕсли; НаборСвойствОбъект.Наименование = ВидОбъекта.Наименование; @@ -341,10 +374,10 @@ // Создание реквизитов. ДобавляемыеРеквизиты = Новый Массив(); + Для каждого ОписаниеСвойства Из ОписаниеСвойств Цикл - ТипЗначенияСвойства = Новый ОписаниеТипов(ОписаниеСвойства.ТипЗначения, - ,,, Новый КвалификаторыСтроки(1024)); + ТипЗначенияСвойства = ОписаниеСвойства.ТипЗначения; // Поддержка строк неограниченной длины. ИспользоватьНеограниченнуюСтроку = УправлениеСвойствамиСлужебный.ИспользоватьНеограниченнуюСтроку( @@ -352,6 +385,12 @@ Если ИспользоватьНеограниченнуюСтроку Тогда ТипЗначенияСвойства = Новый ОписаниеТипов("Строка"); + ИначеЕсли ТипЗначенияСвойства.СодержитТип(Тип("Строка")) + И ТипЗначенияСвойства.КвалификаторыСтроки.Длина = 0 Тогда + // Если нельзя использовать строку, а в свойствах реквизита она неограниченная, + // то устанавливаем ограничение в 1024 символа. + ТипЗначенияСвойства = Новый ОписаниеТипов(ОписаниеСвойства.ТипЗначения, + ,,, Новый КвалификаторыСтроки(1024)); КонецЕсли; ОписаниеСвойства.ИмяУникальнаяЧасть = @@ -385,6 +424,56 @@ ФормаОписаниеСвойства = Форма.Свойства_ОписаниеДополнительныхРеквизитов.Добавить(); ЗаполнитьЗначенияСвойств(ФормаОписаниеСвойства, ОписаниеСвойства); + // Заполнение таблицы зависимых дополнительных реквизитов. + Если ОписаниеСвойства.ЗависимостиДополнительныхРеквизитов.Количество() > 0 Тогда + ОписаниеЗависимогоРеквизита = Форма.Свойства_ОписаниеЗависимыхДополнительныхРеквизитов.Добавить(); + ЗаполнитьЗначенияСвойств(ОписаниеЗависимогоРеквизита, ОписаниеСвойства); + КонецЕсли; + + Для Каждого СтрокаТаблицы Из ОписаниеСвойства.ЗависимостиДополнительныхРеквизитов Цикл + Если ТипЗнч(СтрокаТаблицы.Реквизит) = Тип("Строка") Тогда + ПутьКРеквизиту = "ОписаниеОбъекта." + СтрокаТаблицы.Реквизит; + Иначе + ОписаниеДополнительногоРеквизита = ОписаниеСвойств.Найти(СтрокаТаблицы.Реквизит, "Свойство"); + Если ОписаниеДополнительногоРеквизита = Неопределено Тогда + Продолжить; // Дополнительный реквизит не существует, условие игнорируется. + КонецЕсли; + ПутьКРеквизиту = "Форма." + ОписаниеДополнительногоРеквизита.ИмяРеквизитаЗначение; + КонецЕсли; + + ШаблонУсловия = ""; + Если СтрокаТаблицы.Условие = "Равно" Тогда + ШаблонУсловия = "%1 = %2"; + ИначеЕсли СтрокаТаблицы.Условие = "Не равно" Тогда // не ошибка, идентификатор. + ШаблонУсловия = "%1 <> %2"; + КонецЕсли; + + ПравоеЗначение = ""; + Если ЗначениеЗаполнено(ШаблонУсловия) Тогда + ПравоеЗначение = "ЗначенияПараметров[""" + ПутьКРеквизиту + """]"; + КонецЕсли; + + Если СтрокаТаблицы.Условие = "Заполнено" Тогда + ШаблонУсловия = "ЗначениеЗаполнено(%1)"; + ИначеЕсли СтрокаТаблицы.Условие = "Не заполнено" Тогда // не ошибка, идентификатор. + ШаблонУсловия = "Не ЗначениеЗаполнено(%1)"; + КонецЕсли; + + Если ЗначениеЗаполнено(ПравоеЗначение) Тогда + КодУсловия = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонУсловия, ПутьКРеквизиту, ПравоеЗначение); + Иначе + КодУсловия = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонУсловия, ПутьКРеквизиту); + КонецЕсли; + + Если СтрокаТаблицы.ЗависимоеСвойство = "Доступен" Тогда + УстановитьУсловиеЗависимости(ОписаниеЗависимогоРеквизита.УсловиеДоступности, ПутьКРеквизиту, СтрокаТаблицы, КодУсловия); + ИначеЕсли СтрокаТаблицы.ЗависимоеСвойство = "Виден" Тогда + УстановитьУсловиеЗависимости(ОписаниеЗависимогоРеквизита.УсловиеВидимости, ПутьКРеквизиту, СтрокаТаблицы, КодУсловия); + Иначе + УстановитьУсловиеЗависимости(ОписаниеЗависимогоРеквизита.УсловиеОбязательностиЗаполнения, ПутьКРеквизиту, СтрокаТаблицы, КодУсловия); + КонецЕсли; + КонецЦикла; + Форма[ОписаниеСвойства.ИмяРеквизитаЗначение] = ОписаниеСвойства.Значение; Если ОписаниеСвойства.Удалено И Форма.Свойства_СкрытьУдаленные Тогда @@ -455,8 +544,13 @@ КонецЕсли; КонецЕсли; + // Предварительная установка видимости и доступности без учета условий. + Элемент.Видимость = ?(НЕ ОписаниеСвойства.Удалено, ОписаниеСвойства.Виден, Истина); + Элемент.Доступность = ?(НЕ ОписаниеСвойства.Удалено, ОписаниеСвойства.Доступен, Истина); + Элемент.ПутьКДанным = ОписаниеСвойства.ИмяРеквизитаЗначение; Элемент.Подсказка = ОписаниеСвойства.Свойство.Подсказка; + Элемент.УстановитьДействие("ПриИзменении", "Подключаемый_ПриИзмененииДополнительногоРеквизита"); Если Элемент.Вид = ВидПоляФормы.ПолеВвода И Не ИспользоватьНеограниченнуюСтроку @@ -478,36 +572,35 @@ Элемент.Формат = ОписаниеСвойства.ФорматСвойства; Иначе ФорматнаяСтрока = ""; - Массив = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок( - ОписаниеСвойства.ФорматСвойства, ";"); + Массив = СтрРазделить(ОписаниеСвойства.ФорматСвойства, ";", Ложь); Для каждого Подстрока Из Массив Цикл - Если Найти(Подстрока, "ДП=") > 0 ИЛИ Найти(Подстрока, "DE=") > 0 Тогда + Если СтрНайти(Подстрока, "ДП=") > 0 ИЛИ СтрНайти(Подстрока, "DE=") > 0 Тогда Продолжить; КонецЕсли; - Если Найти(Подстрока, "ЧН=") > 0 ИЛИ Найти(Подстрока, "NZ=") > 0 Тогда + Если СтрНайти(Подстрока, "ЧН=") > 0 ИЛИ СтрНайти(Подстрока, "NZ=") > 0 Тогда Продолжить; КонецЕсли; - Если Найти(Подстрока, "ДФ=") > 0 ИЛИ Найти(Подстрока, "DF=") > 0 Тогда - Если Найти(Подстрока, "ддд") > 0 ИЛИ Найти(Подстрока, "ddd") > 0 Тогда + Если СтрНайти(Подстрока, "ДФ=") > 0 ИЛИ СтрНайти(Подстрока, "DF=") > 0 Тогда + Если СтрНайти(Подстрока, "ддд") > 0 ИЛИ СтрНайти(Подстрока, "ddd") > 0 Тогда Подстрока = СтрЗаменить(Подстрока, "ддд", "дд"); Подстрока = СтрЗаменить(Подстрока, "ddd", "dd"); КонецЕсли; - Если Найти(Подстрока, "дддд") > 0 ИЛИ Найти(Подстрока, "dddd") > 0 Тогда + Если СтрНайти(Подстрока, "дддд") > 0 ИЛИ СтрНайти(Подстрока, "dddd") > 0 Тогда Подстрока = СтрЗаменить(Подстрока, "дддд", "дд"); Подстрока = СтрЗаменить(Подстрока, "dddd", "dd"); КонецЕсли; - Если Найти(Подстрока, "МММ") > 0 ИЛИ Найти(Подстрока, "MMM") > 0 Тогда + Если СтрНайти(Подстрока, "МММ") > 0 ИЛИ СтрНайти(Подстрока, "MMM") > 0 Тогда Подстрока = СтрЗаменить(Подстрока, "МММ", "ММ"); Подстрока = СтрЗаменить(Подстрока, "MMM", "MM"); КонецЕсли; - Если Найти(Подстрока, "ММММ") > 0 ИЛИ Найти(Подстрока, "MMMM") > 0 Тогда + Если СтрНайти(Подстрока, "ММММ") > 0 ИЛИ СтрНайти(Подстрока, "MMMM") > 0 Тогда Подстрока = СтрЗаменить(Подстрока, "ММММ", "ММ"); Подстрока = СтрЗаменить(Подстрока, "MMMM", "MM"); КонецЕсли; КонецЕсли; - Если Найти(Подстрока, "ДЛФ=") > 0 ИЛИ Найти(Подстрока, "DLF=") > 0 Тогда - Если Найти(Подстрока, "ДД") > 0 ИЛИ Найти(Подстрока, "DD") > 0 Тогда + Если СтрНайти(Подстрока, "ДЛФ=") > 0 ИЛИ СтрНайти(Подстрока, "DLF=") > 0 Тогда + Если СтрНайти(Подстрока, "ДД") > 0 ИЛИ СтрНайти(Подстрока, "DD") > 0 Тогда Подстрока = СтрЗаменить(Подстрока, "ДД", "Д"); Подстрока = СтрЗаменить(Подстрока, "DD", "D"); КонецЕсли; @@ -521,7 +614,7 @@ КонецЕсли; Если ОписаниеСвойства.Удалено Тогда - Элемент.ЦветТекстаЗаголовка = ЦветаСтиля.НедоступныеДанныеЦвет; + Элемент.ЦветТекстаЗаголовка = ЦветаСтиля.ТекстЗапрещеннойЯчейкиЦвет; Элемент.ШрифтЗаголовка = ШрифтыСтиля.УдаленныйДополнительныйРеквизитШрифт; Если Элемент.Вид = ВидПоляФормы.ПолеВвода Тогда Элемент.КнопкаОчистки = Истина; @@ -559,6 +652,53 @@ КонецЦикла; + // Установка видимости, доступности и обязательности заполнения дополнительных реквизитов. + Для Каждого ОписаниеЗависимогоРеквизита Из Форма.Свойства_ОписаниеЗависимыхДополнительныхРеквизитов Цикл + Если ОписаниеЗависимогоРеквизита.УсловиеДоступности <> Неопределено Тогда + Если Не ОписаниеЗависимогоРеквизита.Доступен Тогда + Продолжить; + КонецЕсли; + Результат = РезультатВычисленияУсловия(Форма, ОписаниеОбъекта, ОписаниеЗависимогоРеквизита.УсловиеДоступности); + Элемент = Форма.Элементы[ОписаниеЗависимогоРеквизита.ИмяРеквизитаЗначение]; + Если Элемент.Доступность <> Результат Тогда + Элемент.Доступность = Результат; + КонецЕсли; + КонецЕсли; + Если ОписаниеЗависимогоРеквизита.УсловиеВидимости <> Неопределено Тогда + Если Не ОписаниеЗависимогоРеквизита.Виден Тогда + Продолжить; + КонецЕсли; + Результат = РезультатВычисленияУсловия(Форма, ОписаниеОбъекта, ОписаниеЗависимогоРеквизита.УсловиеВидимости); + Элемент = Форма.Элементы[ОписаниеЗависимогоРеквизита.ИмяРеквизитаЗначение]; + Если Элемент.Видимость <> Результат Тогда + Элемент.Видимость = Результат; + КонецЕсли; + КонецЕсли; + Если ОписаниеЗависимогоРеквизита.УсловиеОбязательностиЗаполнения <> Неопределено + И Элемент.Вид = ВидПоляФормы.ПолеВвода Тогда + Если Не ОписаниеЗависимогоРеквизита.ЗаполнятьОбязательно Тогда + Продолжить; + КонецЕсли; + Результат = РезультатВычисленияУсловия(Форма, ОписаниеОбъекта, ОписаниеЗависимогоРеквизита.УсловиеОбязательностиЗаполнения); + Элемент = Форма.Элементы[ОписаниеЗависимогоРеквизита.ИмяРеквизитаЗначение]; + Если Элемент.АвтоОтметкаНезаполненного <> Результат Тогда + Элемент.АвтоОтметкаНезаполненного = Результат; + КонецЕсли; + КонецЕсли; + КонецЦикла; + + Структура = Новый Структура("ПараметрыСвойств"); + ЗаполнитьЗначенияСвойств(Структура, Форма); + Если ТипЗнч(Структура.ПараметрыСвойств) = Тип("Структура") + И Структура.ПараметрыСвойств.Свойство("ВыполненаОтложеннаяИнициализация") Тогда + Форма.ПараметрыСвойств.ВыполненаОтложеннаяИнициализация = Истина; + // Удаление временной декорации, если она была добавлена. + Если Форма.ПараметрыСвойств.Свойство("ДобавленаПустаяДекорация") Тогда + Форма.Элементы.Удалить(Форма.Элементы.Свойства_ПустаяДекорация); + Форма.ПараметрыСвойств.Удалить("ДобавленаПустаяДекорация"); + КонецЕсли; + КонецЕсли; + КонецПроцедуры // Переносит значения свойств из реквизитов формы в табличную часть объекта. @@ -599,6 +739,7 @@ Форма.Свойства_ОписаниеДополнительныхРеквизитов.Очистить(); Форма.Свойства_ЭлементыГруппДополнительныхРеквизитов.Очистить(); + Форма.Свойства_ОписаниеЗависимыхДополнительныхРеквизитов.Очистить(); КонецПроцедуры @@ -643,8 +784,9 @@ Запрос = Новый Запрос; Если ПолучатьДопРеквизиты И ПолучатьДопСведения Тогда - Запрос.Текст = ТекстЗапросаДопСведения + - " + + Запрос.Текст = ТекстЗапросаДопСведения + " + | | ОБЪЕДИНИТЬ ВСЕ |" + ТекстЗапросаДопРеквизиты; @@ -721,8 +863,8 @@ Запрос = Новый Запрос; Если ПолучатьДопРеквизиты И ПолучатьДопСведения Тогда - ТекстЗапроса = СтрЗаменить(ТекстЗапросаДопРеквизиты, "[РАЗРЕШЕННЫЕ]", "РАЗРЕШЕННЫЕ") + - " + ТекстЗапроса = СтрЗаменить(ТекстЗапросаДопРеквизиты, "[РАЗРЕШЕННЫЕ]", "РАЗРЕШЕННЫЕ") + " + | | ОБЪЕДИНИТЬ ВСЕ |" + СтрЗаменить(ТекстЗапросаДопСведения, "[РАЗРЕШЕННЫЕ]", ""); @@ -932,9 +1074,7 @@ Функция ИспользоватьДопСведения(ВладелецСвойств) Экспорт Возврат Метаданные.НайтиПоПолномуИмени("ОбщаяКоманда.ДополнительныеСведенияКоманднаяПанель") <> Неопределено - И Метаданные.ОбщиеКоманды.ДополнительныеСведенияКоманднаяПанель.ТипПараметраКоманды.Типы().Найти(ТипЗнч(ВладелецСвойств)) <> Неопределено - ИЛИ Метаданные.НайтиПоПолномуИмени("ОбщаяКоманда.ДополнительныеСведенияПанельНавигации") <> Неопределено - И Метаданные.ОбщиеКоманды.ДополнительныеСведенияПанельНавигации.ТипПараметраКоманды.Типы().Найти(ТипЗнч(ВладелецСвойств)) <> Неопределено; + И Метаданные.ОбщиеКоманды.ДополнительныеСведенияКоманднаяПанель.ТипПараметраКоманды.Типы().Найти(ТипЗнч(ВладелецСвойств)) <> Неопределено; КонецФункции @@ -1007,6 +1147,35 @@ КонецПроцедуры +// Устанавливает параметры набора свойств +// +// Параметры: +// ИмяНабораСвойств - Строка - Имя предопределенного набора свойств +// Параметры - Структура - см. описание функции СтруктураПараметровНабораСвойств +// +Процедура УстановитьПараметрыНабораСвойств(ИмяНабораСвойств, Параметры) Экспорт + + НаборСвойств = Справочники.НаборыДополнительныхРеквизитовИСведений[ИмяНабораСвойств]; + НаборСвойствОбъект = НаборСвойств.ПолучитьОбъект(); + ЗаполнитьЗначенияСвойств(НаборСвойствОбъект, Параметры); + ОбновлениеИнформационнойБазы.ЗаписатьДанные(НаборСвойствОбъект); + +КонецПроцедуры + +// Получает структуру параметров для набора свойств +// +// Возвращаемое значение: Структура с полями +// * Используется - Булево - Признак использования набора свойств. +// Устанавливается в Ложь, например, если объект отключен функциональной опцией. +// +Функция СтруктураПараметровНабораСвойств() Экспорт + + Параметры = Новый Структура; + Параметры.Вставить("Используется", Истина); + Возврат Параметры; + +КонецФункции + #КонецОбласти #Область СлужебныеПроцедурыИФункции @@ -1015,8 +1184,11 @@ // Вспомогательные процедуры и функции. // Создает основные реквизиты, команды, элементы в форме владельца свойств. -Процедура СоздатьОсновныеОбъектыФормы(Форма, ИмяЭлементаДляРазмещения, - СоздатьОписаниеДополнительныхРеквизитов, ИмяЭлементаКоманднойПанели) +Процедура СоздатьОсновныеОбъектыФормы(Форма, Контекст, СоздатьОписаниеДополнительныхРеквизитов) + + ИмяЭлементаДляРазмещения = Контекст.ИмяЭлементаДляРазмещения; + ИмяЭлементаКоманднойПанели = Контекст.ИмяЭлементаКоманднойПанели; + ОтложеннаяИнициализация = Контекст.ОтложеннаяИнициализация; Реквизиты = Новый Массив; @@ -1026,6 +1198,9 @@ Реквизиты.Добавить(РеквизитИспользоватьСвойства); РеквизитСкрытьУдаленные = Новый РеквизитФормы("Свойства_СкрытьУдаленные", Новый ОписаниеТипов("Булево")); Реквизиты.Добавить(РеквизитСкрытьУдаленные); + // Дополнительные параметры подсистемы свойства. + РеквизитПараметрыСвойств = Новый РеквизитФормы("ПараметрыСвойств", Новый ОписаниеТипов()); + Реквизиты.Добавить(РеквизитПараметрыСвойств); Если ОпцияИспользоватьСвойства Тогда @@ -1063,12 +1238,45 @@ Реквизиты.Добавить(Новый РеквизитФормы( "ЗаполнятьОбязательно", Новый ОписаниеТипов("Булево"), ИмяОписания)); + Реквизиты.Добавить(Новый РеквизитФормы( + "Доступен", Новый ОписаниеТипов("Булево"), ИмяОписания)); + + Реквизиты.Добавить(Новый РеквизитФормы( + "Виден", Новый ОписаниеТипов("Булево"), ИмяОписания)); + Реквизиты.Добавить(Новый РеквизитФормы( "Наименование", Новый ОписаниеТипов("Строка"), ИмяОписания)); Реквизиты.Добавить(Новый РеквизитФормы( "ЭлементФормыДобавлен", Новый ОписаниеТипов("Булево"), ИмяОписания)); + // Добавление реквизита описания зависимых реквизитов. + ТаблицаЗависимыхРеквизитов = "Свойства_ОписаниеЗависимыхДополнительныхРеквизитов"; + + Реквизиты.Добавить(Новый РеквизитФормы( + ТаблицаЗависимыхРеквизитов, Новый ОписаниеТипов("ТаблицаЗначений"))); + + Реквизиты.Добавить(Новый РеквизитФормы( + "ИмяРеквизитаЗначение", Новый ОписаниеТипов("Строка"), ТаблицаЗависимыхРеквизитов)); + + Реквизиты.Добавить(Новый РеквизитФормы( + "Доступен", Новый ОписаниеТипов("Булево"), ТаблицаЗависимыхРеквизитов)); + + Реквизиты.Добавить(Новый РеквизитФормы( + "УсловиеДоступности", Новый ОписаниеТипов(), ТаблицаЗависимыхРеквизитов)); + + Реквизиты.Добавить(Новый РеквизитФормы( + "Виден", Новый ОписаниеТипов("Булево"), ТаблицаЗависимыхРеквизитов)); + + Реквизиты.Добавить(Новый РеквизитФормы( + "УсловиеВидимости", Новый ОписаниеТипов(), ТаблицаЗависимыхРеквизитов)); + + Реквизиты.Добавить(Новый РеквизитФормы( + "ЗаполнятьОбязательно", Новый ОписаниеТипов("Булево"), ТаблицаЗависимыхРеквизитов)); + + Реквизиты.Добавить(Новый РеквизитФормы( + "УсловиеОбязательностиЗаполнения", Новый ОписаниеТипов(), ТаблицаЗависимыхРеквизитов)); + // Добавление реквизита содержащего элементы создаваемых групп дополнительных реквизитов. Реквизиты.Добавить(Новый РеквизитФормы( "Свойства_ЭлементыГруппДополнительныхРеквизитов", Новый ОписаниеТипов("СписокЗначений"))); @@ -1077,8 +1285,8 @@ Реквизиты.Добавить(Новый РеквизитФормы( "Свойства_ИмяЭлементаДляРазмещения", Новый ОписаниеТипов("Строка"))); - // Добавление команды формы, если установлена роль "ДобавлениеИзменениеБазовойНСИ" или это полноправный пользователь. - Если Пользователи.РолиДоступны("ДобавлениеИзменениеБазовойНСИ") Тогда + // Добавление команды формы, если установлена роль "ДобавлениеИзменениеДополнительныхРеквизитовИСведений" или это полноправный пользователь. + Если Пользователи.РолиДоступны("ДобавлениеИзменениеДополнительныхРеквизитовИСведений") Тогда // Добавление команды. Команда = Форма.Команды.Добавить("РедактироватьСоставДополнительныхРеквизитов"); Команда.Заголовок = НСтр("ru = 'Изменить состав дополнительных реквизитов'"); @@ -1103,6 +1311,14 @@ Форма.Свойства_ИспользоватьСвойства = ОпцияИспользоватьСвойства; + Форма.ПараметрыСвойств = Новый Структура; + Если ОтложеннаяИнициализация Тогда + // Если свойства не используются, признак выполнения отложенной инициализации + // взводится в истину. + Значение = ?(ОпцияИспользоватьСвойства, Ложь, Истина); + Форма.ПараметрыСвойств.Вставить("ВыполненаОтложеннаяИнициализация", Значение); + КонецЕсли; + Если ОпцияИспользоватьСвойства Тогда Форма.Свойства_ИспользоватьДопРеквизиты = СоздатьОписаниеДополнительныхРеквизитов; КонецЕсли; @@ -1111,6 +1327,52 @@ Форма.Свойства_ИмяЭлементаДляРазмещения = ИмяЭлементаДляРазмещения; КонецЕсли; + // Если дополнительные реквизиты расположены на отдельной странице, включена + // отложенная инициализация и свойства включены, то в страницу размещается пустая декорация. + // Декорация удаляется автоматически при переключении на закладку. + // Также блокируется возможность перемещения дополнительных реквизитов из группы. + Если ОпцияИспользоватьСвойства + И ОтложеннаяИнициализация + И ИмяЭлементаДляРазмещения <> "" Тогда + ГруппаФормы = Форма.Элементы[Контекст.ИмяЭлементаДляРазмещения]; + Если ГруппаФормы.Вид = ВидГруппыФормы.Страница Тогда + Форма.Элементы.Добавить("Свойства_ПустаяДекорация", Тип("ДекорацияФормы"), ГруппаФормы); + Форма.ПараметрыСвойств.Вставить("ДобавленаПустаяДекорация", Истина); + Иначе + ЗапретитьПеретаскиваниеРодительскихГрупп(ГруппаФормы); + КонецЕсли; + ГруппаФормы.РазрешитьИзменениеСостава = Ложь; + КонецЕсли; + +КонецПроцедуры + +Процедура ЗапретитьПеретаскиваниеРодительскихГрупп(ГруппаФормы) + + Родитель = ГруппаФормы.Родитель; + Если ТипЗнч(Родитель) = Тип("ГруппаФормы") Тогда + Родитель.РазрешитьИзменениеСостава = Ложь; + Если Родитель.Вид = ВидГруппыФормы.Страница Тогда + Возврат; + Иначе + ЗапретитьПеретаскиваниеРодительскихГрупп(Родитель); + КонецЕсли; + Иначе + Возврат; + КонецЕсли; + +КонецПроцедуры + +Процедура УстановитьУсловиеЗависимости(СтруктураЗависимостей, ПутьКРеквизиту, СтрокаТаблицы, КодУсловия) + Если СтруктураЗависимостей = Неопределено Тогда + ЗначенияПараметров = Новый Соответствие; + ЗначенияПараметров.Вставить(ПутьКРеквизиту, СтрокаТаблицы.Значение); + СтруктураЗависимостей = Новый Структура; + СтруктураЗависимостей.Вставить("КодУсловия", КодУсловия); + СтруктураЗависимостей.Вставить("ЗначенияПараметров", ЗначенияПараметров); + Иначе + СтруктураЗависимостей.КодУсловия = СтруктураЗависимостей.КодУсловия + " И " + КодУсловия; + СтруктураЗависимостей.ЗначенияПараметров.Вставить(ПутьКРеквизиту, СтрокаТаблицы.Значение); + КонецЕсли; КонецПроцедуры Процедура ОбновитьКлючНазначенияФормы(Форма, КлючНазначения) @@ -1142,16 +1404,24 @@ КонецПроцедуры +Функция РезультатВычисленияУсловия(Форма, ОписаниеОбъекта, Параметры) + Результат = Неопределено; + ЗначенияПараметров = Параметры.ЗначенияПараметров; + Выполнить("Результат = " + Параметры.КодУсловия); + + Возврат Результат; +КонецФункции + Функция НовыйКлючНазначения(ТекущийКлюч, НачалоКлюча, КлючНаборовСвойств) - Позиция = Найти(ТекущийКлюч, НачалоКлюча); + Позиция = СтрНайти(ТекущийКлюч, НачалоКлюча); НовыйКлючНазначения = Неопределено; Если Позиция = 0 Тогда НовыйКлючНазначения = ТекущийКлюч + КлючНаборовСвойств; - ИначеЕсли Найти(ТекущийКлюч, КлючНаборовСвойств) = 0 Тогда + ИначеЕсли СтрНайти(ТекущийКлюч, КлючНаборовСвойств) = 0 Тогда НовыйКлючНазначения = Лев(ТекущийКлюч, Позиция - 1) + КлючНаборовСвойств + Сред(ТекущийКлюч, Позиция + СтрДлина(НачалоКлюча) + 32); КонецЕсли; @@ -1182,4 +1452,61 @@ КонецФункции +Функция ИспользуютсяСвойства(Форма, ДополнительныеПараметры) + + Если Не ПравоДоступа("Чтение", Метаданные.Справочники.НаборыДополнительныхРеквизитовИСведений) Тогда + ОтключитьДополнительныеРеквизитыНаФорме(Форма, ДополнительныеПараметры); + Возврат Ложь; + КонецЕсли; + + Если ДополнительныеПараметры <> Неопределено + И ДополнительныеПараметры.Свойство("Объект") Тогда + ТипОбъекта = ТипЗнч(ДополнительныеПараметры.Объект.Ссылка); + ПолноеИмя = Метаданные.НайтиПоТипу(ТипОбъекта).ПолноеИмя(); + Иначе + ПолноеИмя = Форма.ИмяФормы; + КонецЕсли; + + МассивИмениФормы = СтрРазделить(ПолноеИмя, "."); + + ИмяЭлемента = МассивИмениФормы[0] + "_" + МассивИмениФормы[1]; + НаборСвойств = Справочники.НаборыДополнительныхРеквизитовИСведений[ИмяЭлемента]; + + ИспользуютсяСвойства = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(НаборСвойств, "Используется"); + + Если Не ИспользуютсяСвойства Тогда + ОтключитьДополнительныеРеквизитыНаФорме(Форма, ДополнительныеПараметры); + КонецЕсли; + + Возврат ИспользуютсяСвойства; + +КонецФункции + +Процедура ОтключитьДополнительныеРеквизитыНаФорме(Форма, ДополнительныеПараметры) + + МассивРеквизитов = ОбщегоНазначенияКлиентСервер.ЗначениеВМассиве( + Новый РеквизитФормы("Свойства_ИспользоватьСвойства", Новый ОписаниеТипов("Булево"))); + ПараметрыСвойствДобавлены = Ложь; + + Если ТипЗнч(ДополнительныеПараметры) = Тип("Структура") Тогда + Если ДополнительныеПараметры.Свойство("ИмяЭлементаДляРазмещения") Тогда + Форма.Элементы[ДополнительныеПараметры.ИмяЭлементаДляРазмещения].Видимость = Ложь; + КонецЕсли; + + Если ДополнительныеПараметры.Свойство("ОтложеннаяИнициализация") Тогда + РеквизитПараметрыСвойств = Новый РеквизитФормы("ПараметрыСвойств", Новый ОписаниеТипов()); + МассивРеквизитов.Добавить(РеквизитПараметрыСвойств); + ПараметрыСвойствДобавлены = Истина; + КонецЕсли; + КонецЕсли; + + Форма.ИзменитьРеквизиты(МассивРеквизитов); + Форма.Свойства_ИспользоватьСвойства = Ложь; + Если ПараметрыСвойствДобавлены Тогда + Форма.ПараметрыСвойств = Новый Структура; + Форма.ПараметрыСвойств.Вставить("ВыполненаОтложеннаяИнициализация", Истина); + КонецЕсли; + +КонецПроцедуры + #КонецОбласти diff --git a/SSL/src/CommonModules/УправлениеСвойствамиКлиент/Module.bsl b/SSL/src/CommonModules/УправлениеСвойствамиКлиент/Module.bsl index 6aa8e2bac..acbdd11c2 100644 --- a/SSL/src/CommonModules/УправлениеСвойствамиКлиент/Module.bsl +++ b/SSL/src/CommonModules/УправлениеСвойствамиКлиент/Module.bsl @@ -35,7 +35,8 @@ ПараметрыПерехода.Вставить("ЭтоДополнительноеСведение", Ложь); ДлинаНачала = СтрДлина("ДополнительныйРеквизитЗначение_"); - Если ВРег(Лев(Форма.ТекущийЭлемент.Имя, ДлинаНачала)) = ВРег("ДополнительныйРеквизитЗначение_") Тогда + ЭтоПолеФормы = (ТипЗнч(Форма.ТекущийЭлемент) = Тип("ПолеФормы")); + Если ЭтоПолеФормы И ВРег(Лев(Форма.ТекущийЭлемент.Имя, ДлинаНачала)) = ВРег("ДополнительныйРеквизитЗначение_") Тогда ИдентификаторНабора = СтрЗаменить(Сред(Форма.ТекущийЭлемент.Имя, ДлинаНачала + 1, 36), "x","-"); ИдентификаторСвойства = СтрЗаменить(Сред(Форма.ТекущийЭлемент.Имя, ДлинаНачала + 38, 36), "x","-"); @@ -72,8 +73,13 @@ Возврат Форма.Свойства_НаборыДополнительныхРеквизитовОбъекта.НайтиПоЗначению(Параметр.Ссылка) <> Неопределено; ИначеЕсли ИмяСобытия = "Запись_ДополнительныеРеквизитыИСведения" Тогда - Отбор = Новый Структура("Свойство", Параметр.Ссылка); - Возврат Форма.Свойства_ОписаниеДополнительныхРеквизитов.НайтиСтроки(Отбор).Количество() > 0; + Если Форма.ПараметрыСвойств.Свойство("ВыполненаОтложеннаяИнициализация") + И Не Форма.ПараметрыСвойств.ВыполненаОтложеннаяИнициализация Тогда + Возврат Истина; + Иначе + Отбор = Новый Структура("Свойство", Параметр.Ссылка); + Возврат Форма.Свойства_ОписаниеДополнительныхРеквизитов.НайтиСтроки(Отбор).Количество() > 0; + КонецЕсли; КонецЕсли; @@ -81,4 +87,82 @@ КонецФункции +// Обновляет видимость, доступность и обязательность заполнения +// дополнительных реквизитов. +// +// Параметры: +// УправляемаяФорма - уже настроена в процедуре ПриСозданииНаСервере. +// +Процедура ОбновитьЗависимостиДополнительныхРеквизитов(Форма, Объект = Неопределено) Экспорт + + Если НЕ Форма.Свойства_ИспользоватьСвойства + ИЛИ НЕ Форма.Свойства_ИспользоватьДопРеквизиты Тогда + + Возврат; + КонецЕсли; + + Если Объект = Неопределено Тогда + ОписаниеОбъекта = Форма.Объект; + Иначе + ОписаниеОбъекта = Объект; + КонецЕсли; + + Для Каждого ОписаниеЗависимогоРеквизита Из Форма.Свойства_ОписаниеЗависимыхДополнительныхРеквизитов Цикл + Если ОписаниеЗависимогоРеквизита.УсловиеДоступности <> Неопределено Тогда + Если Не ОписаниеЗависимогоРеквизита.Доступен Тогда + Продолжить; + КонецЕсли; + ЗначенияПараметров = ОписаниеЗависимогоРеквизита.УсловиеДоступности.ЗначенияПараметров; + Результат = Вычислить(ОписаниеЗависимогоРеквизита.УсловиеДоступности.КодУсловия); + Элемент = Форма.Элементы[ОписаниеЗависимогоРеквизита.ИмяРеквизитаЗначение]; + Если Элемент.Доступность <> Результат Тогда + Элемент.Доступность = Результат; + КонецЕсли; + КонецЕсли; + Если ОписаниеЗависимогоРеквизита.УсловиеВидимости <> Неопределено Тогда + Если Не ОписаниеЗависимогоРеквизита.Виден Тогда + Продолжить; + КонецЕсли; + ЗначенияПараметров = ОписаниеЗависимогоРеквизита.УсловиеВидимости.ЗначенияПараметров; + Результат = Вычислить(ОписаниеЗависимогоРеквизита.УсловиеВидимости.КодУсловия); + Элемент = Форма.Элементы[ОписаниеЗависимогоРеквизита.ИмяРеквизитаЗначение]; + Если Элемент.Видимость <> Результат Тогда + Элемент.Видимость = Результат; + КонецЕсли; + КонецЕсли; + Если ОписаниеЗависимогоРеквизита.УсловиеОбязательностиЗаполнения <> Неопределено Тогда + Если Не ОписаниеЗависимогоРеквизита.ЗаполнятьОбязательно Тогда + Продолжить; + КонецЕсли; + ЗначенияПараметров = ОписаниеЗависимогоРеквизита.УсловиеОбязательностиЗаполнения.ЗначенияПараметров; + Результат = Вычислить(ОписаниеЗависимогоРеквизита.УсловиеОбязательностиЗаполнения.КодУсловия); + Элемент = Форма.Элементы[ОписаниеЗависимогоРеквизита.ИмяРеквизитаЗначение]; + Если Элемент.АвтоОтметкаНезаполненного <> Результат Тогда + Элемент.АвтоОтметкаНезаполненного = Результат; + КонецЕсли; + КонецЕсли; + КонецЦикла; + +КонецПроцедуры + +// Проверяет наличие зависимых дополнительных реквизитов на форме +// и, при необходимости, подключает обработчик ожидания проверки зависимостей реквизитов. +// +// Параметры: +// УправляемаяФорма - уже настроена в процедуре ПриСозданииНаСервере. +// +Процедура ПослеЗагрузкиДополнительныхРеквизитов(Форма) Экспорт + + Если НЕ Форма.Свойства_ИспользоватьСвойства + Или НЕ Форма.Свойства_ИспользоватьДопРеквизиты Тогда + + Возврат; + КонецЕсли; + + Если Форма.Свойства_ОписаниеЗависимыхДополнительныхРеквизитов.Количество() > 0 Тогда + Форма.ПодключитьОбработчикОжидания("ОбновитьЗависимостиДополнительныхРеквизитов", 2); + КонецЕсли; + +КонецПроцедуры + #КонецОбласти diff --git a/SSL/src/CommonModules/УправлениеСвойствамиПереопределяемый/Module.bsl b/SSL/src/CommonModules/УправлениеСвойствамиПереопределяемый/Module.bsl index 32bc013a4..4ebada7e1 100644 --- a/SSL/src/CommonModules/УправлениеСвойствамиПереопределяемый/Module.bsl +++ b/SSL/src/CommonModules/УправлениеСвойствамиПереопределяемый/Module.bsl @@ -71,27 +71,6 @@ КонецПроцедуры -// Устарела. Будет удалена в следующей редакции БСП. -// -// Теперь вместо указания имени реквизита, содержащего вид владельца свойств, -// например, ВидНоменклатуры типа СправочникСсылка.ВидыНоменклатуры, -// у которого должен быть реквизит НаборСвойств типа. -// СправочникСсылка.НаборыДополнительныхРеквизитовИСведений -// следует заполнить набор свойств для объекта СправочникСсылка.Номенклатура -// в процедуре ЗаполнитьНаборыСвойствОбъекта, как и в случае нескольких -// наборов свойств. Отличие лишь в том, что набор будет получен из реквизита -// объекта вида владельца самостоятельно, что позволяет использовать несколько -// разных реквизитов с удобными именами для разных типов объектов у которых -// один вид объектов. Например, Справочник.Проекты это вид владельца свойств -// у Справочник.Ошибки и Справочник.Задачи, для которых в справочнике Проекты -// будут реквизиты НаборСвойствОшибок, НаборСвойствЗадач. -// -Функция ПолучитьИмяРеквизитаВидаОбъекта(Ссылка) Экспорт - - Возврат ""; - -КонецФункции - #КонецОбласти diff --git a/SSL/src/CommonModules/УправлениеСвойствамиСлужебный/Module.bsl b/SSL/src/CommonModules/УправлениеСвойствамиСлужебный/Module.bsl index 8bd8a2931..e69958d3c 100644 --- a/SSL/src/CommonModules/УправлениеСвойствамиСлужебный/Module.bsl +++ b/SSL/src/CommonModules/УправлениеСвойствамиСлужебный/Module.bsl @@ -23,10 +23,13 @@ "УправлениеСвойствамиСлужебный"); Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.УправлениеДоступом") Тогда - СерверныеОбработчики["СтандартныеПодсистемы.УправлениеДоступом\ПриЗаполненииВидовОграниченийПравОбъектовМетаданных"].Добавить( + СерверныеОбработчики["СтандартныеПодсистемы.УправлениеДоступом\ПриЗаполненииВидовДоступа"].Добавить( "УправлениеСвойствамиСлужебный"); - СерверныеОбработчики["СтандартныеПодсистемы.УправлениеДоступом\ПриЗаполненииВидовДоступа"].Добавить( + СерверныеОбработчики["СтандартныеПодсистемы.УправлениеДоступом\ПриЗаполненииИспользованияВидаДоступа"].Добавить( + "УправлениеСвойствамиСлужебный"); + + СерверныеОбработчики["СтандартныеПодсистемы.УправлениеДоступом\ПриЗаполненииВидовОграниченийПравОбъектовМетаданных"].Добавить( "УправлениеСвойствамиСлужебный"); КонецЕсли; @@ -65,9 +68,22 @@ Обработчик = Обработчики.Добавить(); Обработчик.Версия = "2.1.5.18"; Обработчик.РежимВыполнения = "Отложенно"; - Обработчик.Комментарий = НСтр("ru = 'Реструктуризация дополнительных реквизитов и сведений'"); + Обработчик.Идентификатор = Новый УникальныйИдентификатор("b3885620-c224-49f1-bda0-4510c7c18584"); + Обработчик.Комментарий = НСтр("ru = 'Реструктуризация дополнительных реквизитов и сведений. + |Возможна некорректная работа отборов по дополнительным реквизитам и сведениям в списках.'"); Обработчик.Процедура = "УправлениеСвойствамиСлужебный.ОбновитьСоставСвойствВсехГруппНаборов"; + Обработчик = Обработчики.Добавить(); + Обработчик.Версия = "2.3.1.14"; + Обработчик.Процедура = "УправлениеСвойствамиСлужебный.ЗаполнитьНовыеСвойстваДополнительныхРеквизитовИСведений"; + Обработчик.РежимВыполнения = "Монопольно"; + + Обработчик = Обработчики.Добавить(); + Обработчик.Версия = "2.3.1.76"; + Обработчик.Процедура = "УправлениеСвойствамиСлужебный.УстановитьЗначениеПризнакаИспользуется"; + Обработчик.РежимВыполнения = "Оперативно"; + Обработчик.НачальноеЗаполнение = Истина; + КонецПроцедуры // Возвращает список всех свойств для объекта метаданных. @@ -169,8 +185,15 @@ // См. одноименную процедуру в общем модуле УправлениеСвойствами. Процедура ПеренестиЗначенияИзРеквизитовФормыВОбъект(Форма, Объект = Неопределено, ПередЗаписью = Ложь) Экспорт + Приемник = Новый Структура; + Приемник.Вставить("ПараметрыСвойств", Неопределено); + ЗаполнитьЗначенияСвойств(Приемник, Форма); + Если НЕ Форма.Свойства_ИспользоватьСвойства - ИЛИ НЕ Форма.Свойства_ИспользоватьДопРеквизиты Тогда + ИЛИ НЕ Форма.Свойства_ИспользоватьДопРеквизиты + ИЛИ (ТипЗнч(Приемник.ПараметрыСвойств) = Тип("Структура") + И Приемник.ПараметрыСвойств.Свойство("ВыполненаОтложеннаяИнициализация") + И Не Приемник.ПараметрыСвойств.ВыполненаОтложеннаяИнициализация) Тогда Возврат; КонецЕсли; @@ -198,6 +221,10 @@ Продолжить; КонецЕсли; + Если Не РеквизитВиденИДоступен(Форма, Строка.ИмяРеквизитаЗначение, ОписаниеОбъекта) Тогда + Продолжить; + КонецЕсли; + Если Строка.Удалено Тогда Если ЗначениеЗаполнено(Значение) И Не (ПередЗаписью И Форма.Свойства_СкрытьУдаленные) Тогда НайденнаяСтрока = СтарыеЗначения.Найти(Строка.Свойство, "Свойство"); @@ -286,27 +313,8 @@ Если ДополнительныеСвойстваОбъекта.Количество() = 0 Тогда // Предварительная быстрая проверка использования дополнительных свойств. - Запрос = Новый Запрос; - Запрос.УстановитьПараметр("НаборыСвойств", Наборы.ВыгрузитьЗначения()); - Запрос.Текст = - "ВЫБРАТЬ ПЕРВЫЕ 1 - | ИСТИНА КАК ЗначениеИстина - |ИЗ - | Справочник.НаборыДополнительныхРеквизитовИСведений.ДополнительныеРеквизиты КАК СвойстваНаборов - |ГДЕ - | СвойстваНаборов.Ссылка В(&НаборыСвойств) - | И НЕ СвойстваНаборов.ПометкаУдаления"; + СвойстваНеНайдены = ДополнительныеРеквизитыИСведенияНеНайдены(Наборы, ЭтоДополнительноеСведение); - Если ЭтоДополнительноеСведение Тогда - Запрос.Текст = СтрЗаменить( - Запрос.Текст, - "Справочник.НаборыДополнительныхРеквизитовИСведений.ДополнительныеРеквизиты", - "Справочник.НаборыДополнительныхРеквизитовИСведений.ДополнительныеСведения"); - КонецЕсли; - - УстановитьПривилегированныйРежим(Истина); - СвойстваНеНайдены = Запрос.Выполнить().Пустой(); - УстановитьПривилегированныйРежим(Ложь); Если СвойстваНеНайдены Тогда ОписаниеСвойств = Новый ТаблицаЗначений; ОписаниеСвойств.Колонки.Добавить("Набор"); @@ -417,7 +425,15 @@ | ДополнительныеРеквизитыИСведения.ТипЗначения, | ДополнительныеРеквизитыИСведения.ФорматСвойства, | ДополнительныеРеквизитыИСведения.МногострочноеПолеВвода, - | ВсеСвойства.Удалено КАК Удалено + | ВсеСвойства.Удалено КАК Удалено, + | ДополнительныеРеквизитыИСведения.Доступен, + | ДополнительныеРеквизитыИСведения.Виден, + | ДополнительныеРеквизитыИСведения.ЗависимостиДополнительныхРеквизитов.( + | ЗависимоеСвойство, + | Реквизит, + | Условие, + | Значение + | ) |ИЗ | ВсеСвойства КАК ВсеСвойства | ВНУТРЕННЕЕ СОЕДИНЕНИЕ ПланВидовХарактеристик.ДополнительныеРеквизитыИСведения КАК ДополнительныеРеквизитыИСведения @@ -476,6 +492,41 @@ КонецФункции +// Только для внутреннего использования. +// +// Только для внутреннего использования. +// +Функция ДополнительныеРеквизитыИСведенияНеНайдены(Наборы, ЭтоДополнительноеСведение, ОтложеннаяИнициализация = Ложь) Экспорт + + Запрос = Новый Запрос; + Запрос.УстановитьПараметр("НаборыСвойств", Наборы.ВыгрузитьЗначения()); + Запрос.Текст = + "ВЫБРАТЬ ПЕРВЫЕ 1 + | СвойстваНаборов.Свойство КАК Свойство + |ИЗ + | Справочник.НаборыДополнительныхРеквизитовИСведений.ДополнительныеРеквизиты КАК СвойстваНаборов + |ГДЕ + | СвойстваНаборов.Ссылка В(&НаборыСвойств) + | И НЕ СвойстваНаборов.ПометкаУдаления"; + + Если ОтложеннаяИнициализация Тогда + Запрос.Текст = Запрос.Текст + Символы.ПС + "И Свойство.Виден"; + КонецЕсли; + + Если ЭтоДополнительноеСведение Тогда + Запрос.Текст = СтрЗаменить( + Запрос.Текст, + "Справочник.НаборыДополнительныхРеквизитовИСведений.ДополнительныеРеквизиты", + "Справочник.НаборыДополнительныхРеквизитовИСведений.ДополнительныеСведения"); + КонецЕсли; + + УстановитьПривилегированныйРежим(Истина); + СвойстваНеНайдены = Запрос.Выполнить().Пустой(); + УстановитьПривилегированныйРежим(Ложь); + + Возврат СвойстваНеНайдены; +КонецФункции + // Возвращает значения дополнительных сведений. Функция ПрочитатьЗначенияСвойствИзРегистраСведений(ВладелецСвойства) Экспорт @@ -518,12 +569,12 @@ СсылкаПредопределенного = Ссылка; Иначе - СсылкаПредопределенного = Ссылка.Родитель; + СсылкаПредопределенного = СвойстваСсылки.Родитель; КонецЕсли; ИмяПредопределенного = ОбщегоНазначения.ИмяПредопределенного(СсылкаПредопределенного); - Позиция = Найти(ИмяПредопределенного, "_"); + Позиция = СтрНайти(ИмяПредопределенного, "_"); ПерваяЧастьИмени = Лев(ИмяПредопределенного, Позиция - 1); ВтораяЧастьИмени = Прав(ИмяПредопределенного, СтрДлина(ИмяПредопределенного) - Позиция); @@ -562,9 +613,7 @@ ВидыСвойствНабора.Вставить( "ДополнительныеСведения", Метаданные.ОбщиеКоманды.Найти("ДополнительныеСведенияКоманднаяПанель") <> Неопределено - И Метаданные.ОбщиеКоманды.ДополнительныеСведенияКоманднаяПанель.ТипПараметраКоманды.СодержитТип(ТипСсылки) - ИЛИ Метаданные.ОбщиеКоманды.Найти("ДополнительныеСведенияПанельНавигации") <> Неопределено - И Метаданные.ОбщиеКоманды.ДополнительныеСведенияПанельНавигации.ТипПараметраКоманды.СодержитТип(ТипСсылки) ); + И Метаданные.ОбщиеКоманды.ДополнительныеСведенияКоманднаяПанель.ТипПараметраКоманды.СодержитТип(ТипСсылки)); Возврат ВидыСвойствНабора; @@ -703,7 +752,7 @@ ИмяПредопределенного = ОбщегоНазначения.ИмяПредопределенного(Набор); КонецЕсли; - Позиция = Найти(ИмяПредопределенного, "_"); + Позиция = СтрНайти(ИмяПредопределенного, "_"); ПерваяЧастьИмени = Лев(ИмяПредопределенного, Позиция - 1); ВтораяЧастьИмени = Прав(ИмяПредопределенного, СтрДлина(ИмяПредопределенного) - Позиция); @@ -822,12 +871,54 @@ // но при этом эти ссылки не должны учитываться в бизнес-логике приложения. // // Параметры: -// Массив - массив строк, например, "РегистрСведений.ВерсииОбъектов". +// Массив - массив строк, например, Метаданные.РегистрыСведений.ВерсииОбъектов.ПолноеИмя(). // Процедура ПриДобавленииИсключенийПоискаСсылок(Массив) Экспорт - Массив.Добавить("РегистрСведений.ДополнительныеСведения"); - Массив.Добавить("Справочник.НаборыДополнительныхРеквизитовИСведений"); + Массив.Добавить(Метаданные.РегистрыСведений.ДополнительныеСведения.ПолноеИмя()); + Массив.Добавить(Метаданные.Справочники.НаборыДополнительныхРеквизитовИСведений.ПолноеИмя()); + +КонецПроцедуры + +// Заполняет виды доступа, используемые в ограничениях прав доступа. +// Виды доступа Пользователи и ВнешниеПользователи уже заполнены. +// Их можно удалить, если они не требуются для ограничения прав доступа. +// +// Параметры: +// ВидыДоступа - ТаблицаЗначений - с колонками: +// * Имя - Строка - имя используемое в описании поставляемых +// профилей групп доступа и текстах ОДД. +// * Представление - Строка - представляет вид доступа в профилях и группах доступа. +// * ТипЗначений - Тип - тип ссылки значений доступа. +// Например, Тип("СправочникСсылка.Номенклатура"). +// * ТипГруппЗначений - Тип - тип ссылки групп значений доступа. +// Например, Тип("СправочникСсылка.ГруппыДоступаНоменклатуры"). +// * НесколькоГруппЗначений - Булево - Истина указывает, что для значения доступа (Номенклатуры), можно +// выбрать несколько групп значений (Групп доступа номенклатуры). +// +Процедура ПриЗаполненииВидовДоступа(ВидыДоступа) Экспорт + + ВидДоступа = ВидыДоступа.Добавить(); + ВидДоступа.Имя = "ДополнительныеСведения"; + ВидДоступа.Представление = НСтр("ru = 'Дополнительные сведения'"); + ВидДоступа.ТипЗначений = Тип("ПланВидовХарактеристикСсылка.ДополнительныеРеквизитыИСведения"); + +КонецПроцедуры + +// Заполняет использование видов доступа в зависимости от функциональных опций конфигурации, +// например, ИспользоватьГруппыДоступаНоменклатуры. +// +// Параметры: +// ВидДоступа - Строка - имя вида доступа заданное в процедуре ПриЗаполненииВидовДоступа. +// Использование - Булево - начальное значение Истина. +// +Процедура ПриЗаполненииИспользованияВидаДоступа(ИмяВидаДоступа, Использование) Экспорт + + УстановитьПривилегированныйРежим(Истина); + + Если ИмяВидаДоступа = "ДополнительныеСведения" Тогда + Использование = Константы.ИспользоватьДополнительныеРеквизитыИСведения.Получить(); + КонецЕсли; КонецПроцедуры @@ -875,8 +966,8 @@ Если МодульУправлениеДоступомСлужебный.ВидДоступаСуществует("ДополнительныеСведения") Тогда - Описание = Описание + - " + Описание = Описание + " + | |Справочник.ЗначенияСвойствОбъектов.Чтение.ДополнительныеСведения |Справочник.ЗначенияСвойствОбъектовИерархия.Чтение.ДополнительныеСведения |ПланВидовХарактеристик.ДополнительныеРеквизитыИСведения.Чтение.ДополнительныеСведения @@ -887,30 +978,6 @@ КонецПроцедуры -// Заполняет виды доступа, используемые в ограничениях прав доступа. -// Виды доступа Пользователи и ВнешниеПользователи уже заполнены. -// Их можно удалить, если они не требуются для ограничения прав доступа. -// -// Параметры: -// ВидыДоступа - ТаблицаЗначений с полями: -// - Имя - Строка - имя используемое в описании поставляемых -// профилей групп доступа и текстах ОДД. -// - Представление - Строка - представляет вид доступа в профилях и группах доступа. -// - ТипЗначений - Тип - тип ссылки значений доступа. Например, Тип("СправочникСсылка.Номенклатура"). -// - ТипГруппЗначений - Тип - тип ссылки групп значений доступа. Например, -// Тип("СправочникСсылка.ГруппыДоступаНоменклатуры"). -// - НесколькоГруппЗначений - Булево - Истина указывает, что для значения доступа (Номенклатуры), -// можно выбрать несколько групп значений (Групп доступа номенклатуры). -// -Процедура ПриЗаполненииВидовДоступа(ВидыДоступа) Экспорт - - ВидДоступа = ВидыДоступа.Добавить(); - ВидДоступа.Имя = "ДополнительныеСведения"; - ВидДоступа.Представление = НСтр("ru = 'Дополнительные сведения'"); - ВидДоступа.ТипЗначений = Тип("ПланВидовХарактеристикСсылка.ДополнительныеРеквизитыИСведения"); - -КонецПроцедуры - // Используется для получения объектов метаданных обязательных для плана обмена. // Если подсистема имеет объекты метаданных обязательные для включения в состав плана обмена, // то в параметр <Объект> необходимо добавить эти объекты метаданных. @@ -948,6 +1015,39 @@ //////////////////////////////////////////////////////////////////////////////// // Вспомогательные процедуры и функции. +// Проверяет видимость и доступность дополнительного реквизита. +// +Функция РеквизитВиденИДоступен(Форма, ИмяРеквизита, ОписаниеОбъекта) + + Доступен = Истина; + Виден = Истина; + Если Форма.Свойства_ОписаниеЗависимыхДополнительныхРеквизитов.Количество() = 0 Тогда + Возврат Истина; + КонецЕсли; + + ПараметрыОтбора = Новый Структура; + ПараметрыОтбора.Вставить("ИмяРеквизитаЗначение", ИмяРеквизита); + РезультатПоиска = Форма.Свойства_ОписаниеЗависимыхДополнительныхРеквизитов.НайтиСтроки(ПараметрыОтбора); + Если РезультатПоиска.Количество() = 0 Тогда + Возврат Истина; + КонецЕсли; + ОписаниеЗависимогоРеквизита = РезультатПоиска[0]; + + Если ОписаниеЗависимогоРеквизита.УсловиеДоступности <> Неопределено + И ОписаниеЗависимогоРеквизита.Доступен Тогда + ЗначенияПараметров = ОписаниеЗависимогоРеквизита.УсловиеДоступности.ЗначенияПараметров; + Доступен = Вычислить(ОписаниеЗависимогоРеквизита.УсловиеДоступности.КодУсловия); + КонецЕсли; + Если ОписаниеЗависимогоРеквизита.УсловиеВидимости <> Неопределено + И ОписаниеЗависимогоРеквизита.Виден Тогда + ЗначенияПараметров = ОписаниеЗависимогоРеквизита.УсловиеВидимости.ЗначенияПараметров; + Виден = Вычислить(ОписаниеЗависимогоРеквизита.УсловиеВидимости.КодУсловия); + КонецЕсли; + + Возврат Доступен И Виден; + +КонецФункции + // Возвращает основной набор свойств владельца. // // Параметры: @@ -980,49 +1080,14 @@ ИмяОбъектаМетаданных = МетаданныеОбъекта.Имя; ВидОбъектаМетаданных = ОбщегоНазначения.ВидОбъектаПоСсылке(Ссылка); - ИмяРеквизитаВидаВладельцевСвойств = УправлениеСвойствамиПереопределяемый.ПолучитьИмяРеквизитаВидаОбъекта(Ссылка); - Если ИмяРеквизитаВидаВладельцевСвойств = "" Тогда - Если ВидОбъектаМетаданных = "Справочник" Или ВидОбъектаМетаданных = "ПланВидовХарактеристик" Тогда - Если ОбщегоНазначения.ОбъектЯвляетсяГруппой(ВладелецСвойств) Тогда - Возврат Неопределено; - КонецЕсли; - КонецЕсли; - ИмяЭлемента = ВидОбъектаМетаданных + "_" + ИмяОбъектаМетаданных; - Возврат Справочники.НаборыДополнительныхРеквизитовИСведений[ИмяЭлемента]; - Иначе - Если ПереданОбъект = Истина Тогда - - Возврат ОбщегоНазначения.ЗначениеРеквизитаОбъекта( - ВладелецСвойств[ИмяРеквизитаВидаВладельцевСвойств], "НаборСвойств"); - Иначе - Запрос = Новый Запрос; - Запрос.Текст = - "ВЫБРАТЬ - | ОбъектВладелецСвойств." + ИмяРеквизитаВидаВладельцевСвойств + ".НаборСвойств КАК Набор - |ИЗ - | " + ВидОбъектаМетаданных + "." + ИмяОбъектаМетаданных + " КАК ОбъектВладелецСвойств - |ГДЕ - | ОбъектВладелецСвойств.Ссылка = &Ссылка"; - - Запрос.УстановитьПараметр("Ссылка", Ссылка); - Результат = Запрос.Выполнить(); - - Если НЕ Результат.Пустой() Тогда - - Выборка = Результат.Выбрать(); - Выборка.Следующий(); - - Если ЗначениеЗаполнено(Выборка.Набор) Тогда - Возврат Выборка.Набор; - Иначе - Возврат Справочники.НаборыДополнительныхРеквизитовИСведений.ПустаяСсылка(); - КонецЕсли; - Иначе - Возврат Справочники.НаборыДополнительныхРеквизитовИСведений.ПустаяСсылка(); - КонецЕсли; + Если ВидОбъектаМетаданных = "Справочник" Или ВидОбъектаМетаданных = "ПланВидовХарактеристик" Тогда + Если ОбщегоНазначения.ОбъектЯвляетсяГруппой(ВладелецСвойств) Тогда + Возврат Неопределено; КонецЕсли; КонецЕсли; + ИмяЭлемента = ВидОбъектаМетаданных + "_" + ИмяОбъектаМетаданных; + Возврат Справочники.НаборыДополнительныхРеквизитовИСведений[ИмяЭлемента]; КонецФункции @@ -1306,10 +1371,10 @@ | И ДополнительныеРеквизитыИСведения.ПометкаУдаления = ЛОЖЬ"; Если НЕ Запрос.Выполнить().Пустой() Тогда - Если Константы.ИспользоватьОбщиеДополнительныеРеквизитыИСведения.Получить() = Ложь Тогда + Если Константы.ИспользоватьОбщиеДополнительныеРеквизитыИСведения.Получить() Тогда Константы.ИспользоватьОбщиеДополнительныеРеквизитыИСведения.Установить(Истина); КонецЕсли; - Если Константы.ИспользоватьОбщиеДополнительныеЗначения.Получить() = Ложь Тогда + Если Константы.ИспользоватьОбщиеДополнительныеЗначения.Получить() Тогда Константы.ИспользоватьОбщиеДополнительныеЗначения.Установить(Истина); КонецЕсли; КонецЕсли; @@ -1336,4 +1401,54 @@ КонецПроцедуры +// Устанавливает значения свойств "Виден", "Доступен" в значение Истина. +// +Процедура ЗаполнитьНовыеСвойстваДополнительныхРеквизитовИСведений() Экспорт + + Запрос = Новый Запрос; + Запрос.Текст = + "ВЫБРАТЬ + | ДополнительныеРеквизитыИСведения.Ссылка + |ИЗ + | ПланВидовХарактеристик.ДополнительныеРеквизитыИСведения КАК ДополнительныеРеквизитыИСведения"; + Результат = Запрос.Выполнить().Выгрузить(); + + Для Каждого СтрокаРезультата Из Результат Цикл + СсылкаРеквизитСведение = СтрокаРезультата.Ссылка; + Объект = СсылкаРеквизитСведение.ПолучитьОбъект(); + + Объект.Виден = Истина; + Объект.Доступен = Истина; + + ОбновлениеИнформационнойБазы.ЗаписатьДанные(Объект); + КонецЦикла; + +КонецПроцедуры + +// Устанавливает значения свойства Используется в значение Истина. +// +Процедура УстановитьЗначениеПризнакаИспользуется() Экспорт + + Запрос = Новый Запрос; + Запрос.Текст = + "ВЫБРАТЬ + | НаборыДополнительныхРеквизитовИСведений.Ссылка + |ИЗ + | Справочник.НаборыДополнительныхРеквизитовИСведений КАК НаборыДополнительныхРеквизитовИСведений + |ГДЕ + | НЕ НаборыДополнительныхРеквизитовИСведений.Используется"; + + Результат = Запрос.Выполнить(); + Выборка = Результат.Выбрать(); + + Пока Выборка.Следующий() Цикл + + НаборОбъект = Выборка.Ссылка.ПолучитьОбъект(); + НаборОбъект.Используется = Истина; + ОбновлениеИнформационнойБазы.ЗаписатьДанные(НаборОбъект); + + КонецЦикла; + +КонецПроцедуры + #КонецОбласти diff --git a/SSL/src/CommonModules/УправлениеЭлектроннойПочтой/Module.bsl b/SSL/src/CommonModules/УправлениеЭлектроннойПочтой/Module.bsl index 3c58de7cb..af2f2e58b 100644 --- a/SSL/src/CommonModules/УправлениеЭлектроннойПочтой/Module.bsl +++ b/SSL/src/CommonModules/УправлениеЭлектроннойПочтой/Module.bsl @@ -39,11 +39,7 @@ // Выполняет процедуру отправки и получения электронных писем. Процедура ПолучениеИОтправкаЭлектронныхПисем() Экспорт - Если ОбщегоНазначенияПовтИсп.РазделениеВключено() Тогда - Возврат; - КонецЕсли; - - ОбщегоНазначения.ПриНачалеВыполненияРегламентногоЗадания(); + ОбщегоНазначения.ПриНачалеВыполненияРегламентногоЗадания(Метаданные.РегламентныеЗадания.ПолучениеИОтправкаЭлектронныхПисем); Если НЕ ПолучитьФункциональнуюОпцию("ИспользоватьПочтовыйКлиент") Тогда Возврат; @@ -63,7 +59,9 @@ "ВЫБРАТЬ | УчетныеЗаписиЭлектроннойПочты.Ссылка, | УчетныеЗаписиЭлектроннойПочты.Наименование, - | ЕСТЬNULL(НастройкиУчетныхЗаписейЭлектроннойПочты.ПомещатьПисьмоВПапкуПисьмаОснования, ЛОЖЬ) КАК ПомещатьПисьмоВПапкуПисьмаОснования + | ЕСТЬNULL(НастройкиУчетныхЗаписейЭлектроннойПочты.ПомещатьПисьмоВПапкуПисьмаОснования, ЛОЖЬ) КАК ПомещатьПисьмоВПапкуПисьмаОснования, + | УчетныеЗаписиЭлектроннойПочты.ОставлятьКопииСообщенийНаСервере КАК ОставлятьКопии, + | УчетныеЗаписиЭлектроннойПочты.ПериодХраненияСообщенийНаСервере КАК ОставлятьДней |ИЗ | Справочник.УчетныеЗаписиЭлектроннойПочты КАК УчетныеЗаписиЭлектроннойПочты | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.НастройкиУчетныхЗаписейЭлектроннойПочты КАК НастройкиУчетныхЗаписейЭлектроннойПочты @@ -77,20 +75,20 @@ Пока Выборка.Следующий() Цикл Получено = 0; - ПолучитьПисьма(Выборка.Ссылка, Ложь, Получено, МассивПисем, Выборка.ПомещатьПисьмоВПапкуПисьмаОснования); + ПолучитьПисьма(Выборка, Ложь, Получено, МассивПисем); КонецЦикла; // Отправка писем Запрос = Новый Запрос; - Запрос = Новый Запрос; Запрос.Текст = " |ВЫБРАТЬ | ЭлектронноеПисьмоИсходящее.Ссылка, | ПРЕДСТАВЛЕНИЕ(ЭлектронноеПисьмоИсходящее.Ссылка) КАК ПредставлениеПисьма, | ЭлектронноеПисьмоИсходящее.УдалятьПослеОтправки, | ЭлектронноеПисьмоИсходящее.УчетнаяЗапись КАК УчетнаяЗапись, - | ЕСТЬNULL(ПапкиЭлектронныхПисем.ПредопределеннаяПапка, ИСТИНА) КАК ТребуетсяОпределениеПапки + | ЕСТЬNULL(ПапкиЭлектронныхПисем.ПредопределеннаяПапка, ИСТИНА) КАК ТребуетсяОпределениеПапки, + | ЕСТЬNULL(НепринятыеКОбработкеПочтовымСерверомИсходящиеПисьма.КоличествоПопыток, 0) КАК КоличествоПопыток |ИЗ | Документ.ЭлектронноеПисьмоИсходящее КАК ЭлектронноеПисьмоИсходящее | ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.УчетныеЗаписиЭлектроннойПочты КАК УчетныеЗаписиЭлектроннойПочты @@ -99,6 +97,8 @@ | ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ПапкиЭлектронныхПисем КАК ПапкиЭлектронныхПисем | ПО ПредметыПапкиВзаимодействий.ПапкаЭлектронногоПисьма = ПапкиЭлектронныхПисем.Ссылка | ПО (ПредметыПапкиВзаимодействий.Взаимодействие = ЭлектронноеПисьмоИсходящее.Ссылка) + | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.НепринятыеКОбработкеПочтовымСерверомИсходящиеПисьма КАК НепринятыеКОбработкеПочтовымСерверомИсходящиеПисьма + | ПО (НепринятыеКОбработкеПочтовымСерверомИсходящиеПисьма.Письмо = ЭлектронноеПисьмоИсходящее.Ссылка) |ГДЕ | НЕ ЭлектронноеПисьмоИсходящее.ПометкаУдаления | И ЭлектронноеПисьмоИсходящее.СтатусПисьма = ЗНАЧЕНИЕ(Перечисление.СтатусыИсходящегоЭлектронногоПисьма.Исходящее) @@ -112,6 +112,7 @@ | ТОГДА ИСТИНА | ИНАЧЕ ЭлектронноеПисьмоИсходящее.ДатаАктуальностиОтправки > &ТекущаяДата | КОНЕЦ + | И ЕСТЬNULL(НепринятыеКОбработкеПочтовымСерверомИсходящиеПисьма.КоличествоПопыток, 0) < 5 |ИТОГИ ПО | УчетнаяЗапись"; @@ -128,8 +129,10 @@ Исключение ТекстСообщенияОбОшибке = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Во время подключения к учетной записи %1 произошла ошибка - |%2'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), ВыборкаУчетныеЗаписи.УчетнаяЗапись, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); + НСтр("ru = 'Во время подключения к учетной записи %1 произошла ошибка + |%2'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), + ВыборкаУчетныеЗаписи.УчетнаяЗапись, + ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); ЗаписьЖурналаРегистрации(СобытиеЖурналаРегистрации(), УровеньЖурналаРегистрации.Ошибка, , , @@ -146,13 +149,22 @@ Попытка ИдентификаторПисьма = Взаимодействия.ВыполнитьОтправкуПисьма(ПисьмоОбъект,Соединение); Исключение + ТекстСообщенияОбОшибке = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Во время отправки электронного письма %1 произошла ошибка - |%2'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), ВыборкаПисьма.ПредставлениеПисьма, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); + НСтр("ru = 'Во время отправки электронного письма %1 произошла ошибка + |%2'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), + ВыборкаПисьма.ПредставлениеПисьма, + ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); ЗаписьЖурналаРегистрации(СобытиеЖурналаРегистрации(), - УровеньЖурналаРегистрации.Ошибка, , , - ТекстСообщенияОбОшибке); + УровеньЖурналаРегистрации.Ошибка, , , + ТекстСообщенияОбОшибке); + + МенеджерЗаписи = РегистрыСведений.НепринятыеКОбработкеПочтовымСерверомИсходящиеПисьма.СоздатьМенеджерЗаписи(); + МенеджерЗаписи.Письмо = ВыборкаПисьма.Ссылка; + МенеджерЗаписи.КоличествоПопыток = ВыборкаПисьма.КоличествоПопыток + 1; + МенеджерЗаписи.ИнформацияООшибке = ТекстСообщенияОбОшибке; + МенеджерЗаписи.Записать(); Продолжить; КонецПопытки; @@ -223,8 +235,10 @@ Исключение ТекстСообщенияОбОшибке = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Во время подключения к учетной записи %1 произошла ошибка - |%2'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), ВыборкаУчетныеЗаписи.УчетнаяЗапись,ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); + НСтр("ru = 'Во время подключения к учетной записи %1 произошла ошибка + |%2'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), + ВыборкаУчетныеЗаписи.УчетнаяЗапись, + ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); ЗаписьЖурналаРегистрации(СобытиеЖурналаРегистрации(), УровеньЖурналаРегистрации.Ошибка, , , @@ -266,7 +280,9 @@ "ВЫБРАТЬ РАЗРЕШЕННЫЕ | УчетныеЗаписиЭлектроннойПочты.Ссылка, | УчетныеЗаписиЭлектроннойПочты.Наименование, - | ЕСТЬNULL(НастройкиУчетныхЗаписейЭлектроннойПочты.ПомещатьПисьмоВПапкуПисьмаОснования, ЛОЖЬ) КАК ПомещатьПисьмоВПапкуПисьмаОснования + | ЕСТЬNULL(НастройкиУчетныхЗаписейЭлектроннойПочты.ПомещатьПисьмоВПапкуПисьмаОснования, ЛОЖЬ) КАК ПомещатьПисьмоВПапкуПисьмаОснования, + | УчетныеЗаписиЭлектроннойПочты.ОставлятьКопииСообщенийНаСервере КАК ОставлятьКопии, + | УчетныеЗаписиЭлектроннойПочты.ПериодХраненияСообщенийНаСервере КАК ОставлятьДней |ИЗ | Справочник.УчетныеЗаписиЭлектроннойПочты КАК УчетныеЗаписиЭлектроннойПочты | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.НастройкиУчетныхЗаписейЭлектроннойПочты КАК НастройкиУчетныхЗаписейЭлектроннойПочты @@ -291,7 +307,7 @@ Получено = 0; МассивПисем = Новый Массив; - ПолучитьПисьма(Выборка.Ссылка, ЕстьОшибки, Получено, МассивПисем, Выборка.ПомещатьПисьмоВПапкуПисьмаОснования); + ПолучитьПисьма(Выборка, ЕстьОшибки, Получено, МассивПисем); ПолученоПисем = ПолученоПисем + Получено; Взаимодействия.ЗаполнитьКонтактыМассиваВзаимодействий(МассивПисем); Взаимодействия.УстановитьПапкиДляМассиваПисем(МассивПисем); @@ -310,12 +326,13 @@ // Отправка писем Запрос = Новый Запрос; Запрос.Текст = " - |ВЫБРАТЬ + |ВЫБРАТЬ РАЗРЕШЕННЫЕ | УчетныеЗаписиЭлектроннойПочты.Ссылка КАК УчетнаяЗапись, | ЭлектронноеПисьмоИсходящее.Ссылка, | ПРЕДСТАВЛЕНИЕ(ЭлектронноеПисьмоИсходящее.Ссылка) КАК ПредставлениеПисьма, | ЭлектронноеПисьмоИсходящее.УдалятьПослеОтправки, - | ЕСТЬNULL(ПапкиЭлектронныхПисем.ПредопределеннаяПапка, ИСТИНА) КАК ТребуетсяОпределениеПапки + | ЕСТЬNULL(ПапкиЭлектронныхПисем.ПредопределеннаяПапка, ИСТИНА) КАК ТребуетсяОпределениеПапки, + | ЕСТЬNULL(НепринятыеКОбработкеПочтовымСерверомИсходящиеПисьма.КоличествоПопыток, 0) КАК КоличествоПопыток |ИЗ | Документ.ЭлектронноеПисьмоИсходящее КАК ЭлектронноеПисьмоИсходящее | ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.УчетныеЗаписиЭлектроннойПочты КАК УчетныеЗаписиЭлектроннойПочты @@ -326,6 +343,8 @@ | ПО (ПредметыПапкиВзаимодействий.Взаимодействие = ЭлектронноеПисьмоИсходящее.Ссылка) | ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НастройкиУчетныхЗаписейЭлектроннойПочты КАК НастройкиУчетныхЗаписейЭлектроннойПочты | ПО ЭлектронноеПисьмоИсходящее.УчетнаяЗапись = НастройкиУчетныхЗаписейЭлектроннойПочты.УчетнаяЗаписьЭлектроннойПочты + | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.НепринятыеКОбработкеПочтовымСерверомИсходящиеПисьма КАК НепринятыеКОбработкеПочтовымСерверомИсходящиеПисьма + | ПО НепринятыеКОбработкеПочтовымСерверомИсходящиеПисьма.Письмо = ЭлектронноеПисьмоИсходящее.Ссылка |ГДЕ | НЕ ЭлектронноеПисьмоИсходящее.ПометкаУдаления | И ЭлектронноеПисьмоИсходящее.СтатусПисьма = ЗНАЧЕНИЕ(Перечисление.СтатусыИсходящегоЭлектронногоПисьма.Исходящее) @@ -342,6 +361,7 @@ | ТОГДА ИСТИНА | ИНАЧЕ ЭлектронноеПисьмоИсходящее.ДатаАктуальностиОтправки > &ТекущаяДата | КОНЕЦ + | И ЕСТЬNULL(НепринятыеКОбработкеПочтовымСерверомИсходящиеПисьма.КоличествоПопыток, 0) < 5 |ИТОГИ ПО | УчетнаяЗапись"; @@ -360,8 +380,10 @@ Исключение ТекстСообщенияОбОшибке = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Во время подключения к учетной записи %1 произошла ошибка - |%2'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), ВыборкаУчетныеЗаписи.УчетнаяЗапись,КраткоеПредставлениеОшибки(ИнформацияОбОшибке())); + НСтр("ru = 'Во время подключения к учетной записи %1 произошла ошибка + |%2'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), + ВыборкаУчетныеЗаписи.УчетнаяЗапись, + КраткоеПредставлениеОшибки(ИнформацияОбОшибке())); ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстСообщенияОбОшибке, ВыборкаУчетныеЗаписи.УчетнаяЗапись); @@ -377,9 +399,19 @@ ИдентификаторПисьма = Взаимодействия.ВыполнитьОтправкуПисьма(ПисьмоОбъект, Соединение); Исключение ТекстСообщенияОбОшибке = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Во время отправки электронного письма %1 произошла ошибка - |%2'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), ВыборкаПисьма.ПредставлениеПисьма,КраткоеПредставлениеОшибки(ИнформацияОбОшибке())); + НСтр("ru = 'Во время отправки электронного письма %1 произошла ошибка + |%2'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), + ВыборкаПисьма.ПредставлениеПисьма, + КраткоеПредставлениеОшибки(ИнформацияОбОшибке())); + ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстСообщенияОбОшибке, ВыборкаПисьма.Ссылка); + + МенеджерЗаписи = РегистрыСведений.НепринятыеКОбработкеПочтовымСерверомИсходящиеПисьма.СоздатьМенеджерЗаписи(); + МенеджерЗаписи.Письмо = ВыборкаПисьма.Ссылка; + МенеджерЗаписи.КоличествоПопыток = ВыборкаПисьма.КоличествоПопыток + 1; + МенеджерЗаписи.ИнформацияООшибке = ТекстСообщенияОбОшибке; + МенеджерЗаписи.Записать(); + Продолжить; КонецПопытки; @@ -449,8 +481,10 @@ Исключение ТекстСообщенияОбОшибке = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Во время подключения к учетной записи %1 произошла ошибка - |%2'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), ВыборкаУчетныеЗаписи.УчетнаяЗапись,КраткоеПредставлениеОшибки(ИнформацияОбОшибке())); + НСтр("ru = 'Во время подключения к учетной записи %1 произошла ошибка + |%2'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), + ВыборкаУчетныеЗаписи.УчетнаяЗапись, + КраткоеПредставлениеОшибки(ИнформацияОбОшибке())); ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстСообщенияОбОшибке,ВыборкаУчетныеЗаписи.УчетнаяЗапись); @@ -471,19 +505,41 @@ КонецПроцедуры -Процедура ПолучитьПисьма( - УчетнаяЗапись, - ЕстьОшибки, - Получено, - МассивСозданныхПисем, - ПомещатьПисьмоВПапкуПисьмаОснования) +Процедура ПолучитьПисьма(ДанныеУчетнойЗаписи, ЕстьОшибки, Получено, МассивСозданныхПисем) + + // Проверим блокировку учетной записи и если она доступна для получения, установим блокировку. + Запрос = Новый Запрос; + Запрос.Текст = " + |ВЫБРАТЬ + | ЗаблокированныеДляПолученияУчетныеЗаписи.ДатаБлокировки + |ИЗ + | РегистрСведений.ЗаблокированныеДляПолученияУчетныеЗаписи КАК ЗаблокированныеДляПолученияУчетныеЗаписи + |ГДЕ + | ЗаблокированныеДляПолученияУчетныеЗаписи.УчетнаяЗапись = &УчетнаяЗапись"; + + Запрос.УстановитьПараметр("УчетнаяЗапись", ДанныеУчетнойЗаписи.Ссылка); + + Выборка = Запрос.Выполнить().Выбрать(); + + Если Выборка.Следующий() Тогда + + Если Выборка.ДатаБлокировки + 60 * 60 > ТекущаяДатаСеанса() Тогда + Возврат; + КонецЕсли; + + КонецЕсли; + + МенеджерЗаписи = РегистрыСведений.ЗаблокированныеДляПолученияУчетныеЗаписи.СоздатьМенеджерЗаписи(); + МенеджерЗаписи.УчетнаяЗапись = ДанныеУчетнойЗаписи.Ссылка; + МенеджерЗаписи.ДатаБлокировки = ТекущаяДатаСеанса(); + МенеджерЗаписи.Записать(); // ----------------------------------------------------------------- // Сформируем почтовый профиль и подключимся к почтовому серверу. - Профиль = РаботаСПочтовымиСообщениямиСлужебный.ИнтернетПочтовыйПрофиль(УчетнаяЗапись, Истина); + Профиль = РаботаСПочтовымиСообщениямиСлужебный.ИнтернетПочтовыйПрофиль(ДанныеУчетнойЗаписи.Ссылка, Истина); Протокол = ПротоколИнтернетПочты.POP3; - Если ОбщегоНазначения.ЗначениеРеквизитаОбъекта(УчетнаяЗапись, "ПротоколВходящейПочты") = "IMAP" Тогда + Если ОбщегоНазначения.ЗначениеРеквизитаОбъекта(ДанныеУчетнойЗаписи.Ссылка, "ПротоколВходящейПочты") = "IMAP" Тогда Протокол = ПротоколИнтернетПочты.IMAP; КонецЕсли; @@ -492,11 +548,15 @@ Почта.Подключиться(Профиль, Протокол); Исключение + СнятьБлокировкуУчетнойЗаписиДляПолучения(ДанныеУчетнойЗаписи.Ссылка); + ЕстьОшибки = Истина; ТекстСообщенияОбОшибке = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Во время подключения к учетной записи %1 произошла ошибка - |%2'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), УчетнаяЗапись,ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); + |%2'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), + ДанныеУчетнойЗаписи.Ссылка, + ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); ЗаписьЖурналаРегистрации(СобытиеЖурналаРегистрации(), УровеньЖурналаРегистрации.Ошибка, , , @@ -506,85 +566,107 @@ КонецПопытки; - // ----------------------------------------------------------------- // Получим идентификаторы сообщений на сервере. Идентификаторы = Почта.ПолучитьИдентификаторы(); - Если Идентификаторы.Количество() = 0 Тогда + Если Идентификаторы.Количество() = 0 И (Не ДанныеУчетнойЗаписи.ОставлятьКопии) Тогда // Если на сервере сообщений нет, то удалим все записи по учетной записи в регистре сведений // ИдентификаторыПолученныхЭлектронныхПисем. - УдалитьИдентификаторыВсехРанееПолученныхПисем(УчетнаяЗапись); + УдалитьИдентификаторыВсехРанееПолученныхПисем(ДанныеУчетнойЗаписи.Ссылка); Почта.Отключиться(); + СнятьБлокировкуУчетнойЗаписиДляПолучения(ДанныеУчетнойЗаписи.Ссылка); Возврат; КонецЕсли; // ----------------------------------------------------------------- // Определим какие сообщения нужно получать. - ИдЗагружать = ПолучитьИдентификаторыПисемДляЗагрузки(Идентификаторы, УчетнаяЗапись); + ИдЗагружать = ПолучитьИдентификаторыПисемДляЗагрузки(Идентификаторы, ДанныеУчетнойЗаписи.Ссылка); Получено = 0; + Если ИдЗагружать.Количество() <> 0 Тогда - ОтветственныйЗаОбработкуПисем = ПолучитьОтветственногоЗаОбработкуПисьмаПоУмолчанию(УчетнаяЗапись); - // Получим нужные сообщения - Сообщения = Почта.Выбрать(Ложь, ИдЗагружать); + ОтветственныйЗаОбработкуПисем = ПолучитьОтветственногоЗаОбработкуПисьмаПоУмолчанию(ДанныеУчетнойЗаписи.Ссылка); КоличествоОшибокПриЗаписи = 0; - // Запишем их - Для Каждого Сообщение Из Сообщения Цикл - ДобавлятьВМассивСозданныхПисем = ЛОЖЬ; - Попытка - СозданноеПисьмо = ЗаписатьВходящееЭлектронноеПисьмо( - УчетнаяЗапись, - Сообщение, - ОтветственныйЗаОбработкуПисем, - ПомещатьПисьмоВПапкуПисьмаОснования, - ДобавлятьВМассивСозданныхПисем); - Исключение + Получено = 0; + + Пока ИдЗагружать.Количество() > (Получено + КоличествоОшибокПриЗаписи) Цикл - ОтменитьТранзакцию(); - ЕстьОшибки = Истина; - ТекстСообщенияОбОшибке = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'При получении письма %1 от %2, отправленное c адреса %3 произошла ошибка - |%4'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), - Сообщение.Тема, - Сообщение.ДатаОтправления, - Сообщение.Отправитель.Адрес, - ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); + КоличествоВПорции = 0; + МассивИдентификаторовПорцииДляЗагрузки = Новый Массив; - ЗаписьЖурналаРегистрации(СобытиеЖурналаРегистрации(), - УровеньЖурналаРегистрации.Ошибка, , , - ТекстСообщенияОбОшибке); - - КоличествоОшибокПриЗаписи = КоличествоОшибокПриЗаписи + 1; - Для Каждого ИдентификаторСообщения Из Сообщение.Идентификатор Цикл - ИндексИдентификатораВМассиве = Идентификаторы.Найти(ИдентификаторСообщения); - Если ИндексИдентификатораВМассиве <> Неопределено Тогда - Идентификаторы.Удалить(ИндексИдентификатораВМассиве); + Для Инд = (Получено + КоличествоОшибокПриЗаписи) По ИдЗагружать.Количество() - 1 Цикл + + МассивИдентификаторовПорцииДляЗагрузки.Добавить(ИдЗагружать.Получить(Инд)); + КоличествоВПорции = КоличествоВПорции + 1; + + Если КоличествоВПорции = 10 Тогда + Прервать; КонецЕсли; - Продолжить; + КонецЦикла; - КонецПопытки; - Если ДобавлятьВМассивСозданныхПисем Тогда - МассивСозданныхПисем.Добавить(СозданноеПисьмо); - КонецЕсли; - КонецЦикла; + + // Получим нужные сообщения + Сообщения = Почта.Выбрать(Ложь, МассивИдентификаторовПорцииДляЗагрузки); + + // Запишем их + Для Каждого Сообщение Из Сообщения Цикл + ДобавлятьВМассивСозданныхПисем = ЛОЖЬ; + Попытка + СозданноеПисьмо = ЗаписатьВходящееЭлектронноеПисьмо( + ДанныеУчетнойЗаписи.Ссылка, + Сообщение, + ОтветственныйЗаОбработкуПисем, + ДанныеУчетнойЗаписи.ПомещатьПисьмоВПапкуПисьмаОснования, + ДобавлятьВМассивСозданныхПисем); + + Получено = Получено + 1; + + Исключение + + ОтменитьТранзакцию(); + ЕстьОшибки = Истина; + ТекстСообщенияОбОшибке = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'При получении письма %1 от %2, отправленное c адреса %3 произошла ошибка + |%4'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), + Сообщение.Тема, + Сообщение.ДатаОтправления, + Сообщение.Отправитель.Адрес, + ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); + + ЗаписьЖурналаРегистрации(СобытиеЖурналаРегистрации(), + УровеньЖурналаРегистрации.Ошибка, , , + ТекстСообщенияОбОшибке); + + КоличествоОшибокПриЗаписи = КоличествоОшибокПриЗаписи + 1; + Для Каждого ИдентификаторСообщения Из Сообщение.Идентификатор Цикл + ИндексИдентификатораВМассиве = Идентификаторы.Найти(ИдентификаторСообщения); + Если ИндексИдентификатораВМассиве <> Неопределено Тогда + Идентификаторы.Удалить(ИндексИдентификатораВМассиве); + КонецЕсли; + Продолжить; + КонецЦикла; + КонецПопытки; + Если ДобавлятьВМассивСозданныхПисем Тогда + МассивСозданныхПисем.Добавить(СозданноеПисьмо); + КонецЕсли; + КонецЦикла; + + КонецЦикла; - Получено = Сообщения.Количество() - КоличествоОшибокПриЗаписи; - - КонецЕсли; + КонецЕсли; // ----------------------------------------------------------------- // Удалим ненужные сообщения на сервере. - ОставлятьКопии = УчетнаяЗапись.ОставлятьКопииСообщенийНаСервере; - ОставлятьДней = УчетнаяЗапись.ПериодХраненияСообщенийНаСервере; - Если Не ОставлятьКопии Тогда + Если Не ДанныеУчетнойЗаписи.ОставлятьКопии Тогда // удалять все МассивКУдалению = Идентификаторы; УдалятьВсе = Истина; Иначе УдалятьВсе = Ложь; - Если ОставлятьДней > 0 Тогда + Если ДанныеУчетнойЗаписи.ОставлятьДней > 0 Тогда МассивКУдалению = ПолучитьИдентификаторыПисемДляУдаленияНаСервере( - Идентификаторы, УчетнаяЗапись, - ТекущаяДатаСеанса() - ОставлятьДней * 24 * 60 * 60); + Идентификаторы, + ДанныеУчетнойЗаписи.Ссылка, + ТекущаяДатаСеанса() - ДанныеУчетнойЗаписи.ОставлятьДней * 24 * 60 * 60); Иначе МассивКУдалению = Новый Массив; КонецЕсли; @@ -597,14 +679,16 @@ // ----------------------------------------------------------------- // Удалим ненужные идентификаторы в регистре сведений. Если УдалятьВсе Тогда - УдалитьИдентификаторыВсехРанееПолученныхПисем(УчетнаяЗапись); + УдалитьИдентификаторыВсехРанееПолученныхПисем(ДанныеУчетнойЗаписи.Ссылка); Иначе - УдалитьИдентификаторыРанееПолученныхПисем(УчетнаяЗапись, Идентификаторы, МассивКУдалению); + УдалитьИдентификаторыРанееПолученныхПисем(ДанныеУчетнойЗаписи.Ссылка, Идентификаторы, МассивКУдалению); КонецЕсли; // ----------------------------------------------------------------- // Отключимся от почтового сервера. Почта.Отключиться(); + + СнятьБлокировкуУчетнойЗаписиДляПолучения(ДанныеУчетнойЗаписи.Ссылка); КонецПроцедуры @@ -638,7 +722,7 @@ ИдентификаторыОставляем = Новый Массив; Для Каждого Элемент Из ИдентификаторыНаСервере Цикл - Если ИдентификаторыКУдалению.Получить(Элемент) <> Истина Тогда + Если ИдентификаторыКУдалению.Получить(Элемент) = Неопределено Тогда ИдентификаторыОставляем.Добавить(Элемент); КонецЕсли; КонецЦикла; @@ -700,7 +784,7 @@ Запрос = Новый Запрос; Запрос.УстановитьПараметр("ТаблицаИдентификаторов", ТаблицаИдентификаторов); - Запрос.УстановитьПараметр("УчетнаяЗапись", УчетнаяЗапись); + Запрос.УстановитьПараметр("УчетнаяЗапись", УчетнаяЗапись); Запрос.Текст = "ВЫБРАТЬ | ТаблицаИдентификаторов.Идентификатор @@ -894,13 +978,13 @@ МассивИдентификаторов = Новый Массив; СтрокаИдентификаторы = Письмо.ИдентификаторыОснований; Пока Не ПустаяСтрока(СтрокаИдентификаторы) Цикл - Позиция = Найти(СтрокаИдентификаторы, "<"); + Позиция = СтрНайти(СтрокаИдентификаторы, "<"); Если Позиция = 0 Тогда Прервать; КонецЕсли; СтрокаИдентификаторы = Сред(СтрокаИдентификаторы, Позиция+1); - Позиция = Найти(СтрокаИдентификаторы, ">"); + Позиция = СтрНайти(СтрокаИдентификаторы, ">"); Если Позиция = 0 Тогда Прервать; КонецЕсли; @@ -913,8 +997,8 @@ КонецЕсли; КонецЦикла; - Если (МассивИдентификаторов.Найти(Письмо.ИдентификаторОснования) = Неопределено) И - (НЕ ПустаяСтрока(Письмо.ИдентификаторОснования)) Тогда + Если (МассивИдентификаторов.Найти(Письмо.ИдентификаторОснования) = Неопределено) + И (НЕ ПустаяСтрока(Письмо.ИдентификаторОснования)) Тогда МассивИдентификаторов.Добавить(Письмо.ИдентификаторОснования); КонецЕсли; @@ -1220,7 +1304,7 @@ ?(ПустаяСтрока(Сообщение.ИмяОтправителя), Письмо.ОтправительАдрес, Сообщение.ИмяОтправителя + " <"+ Письмо.ОтправительАдрес +">"); Письмо.Размер = Сообщение.Размер; - Письмо.Тема = Сообщение.Тема; + Письмо.Тема = ОбщегоНазначенияКлиентСервер.ЗаменитьНедопустимыеСимволыXML(Сообщение.Тема); УстановитьТекстПисьма(Письмо, Сообщение); @@ -1255,12 +1339,12 @@ СтрокаИдентификаторы = СокрЛП(Сообщение.ПолучитьПолеЗаголовка("In-Reply-To", "Строка")); - Позиция = Найти(СтрокаИдентификаторы, "<"); + Позиция = СтрНайти(СтрокаИдентификаторы, "<"); Если Позиция <> 0 Тогда СтрокаИдентификаторы = Сред(СтрокаИдентификаторы, Позиция+1); КонецЕсли; - Позиция = Найти(СтрокаИдентификаторы, ">"); + Позиция = СтрНайти(СтрокаИдентификаторы, ">"); Если Позиция <> 0 Тогда СтрокаИдентификаторы = Лев(СтрокаИдентификаторы, Позиция-1); КонецЕсли; @@ -1277,10 +1361,12 @@ Для Каждого ТекстПочтовогоСообщения Из Сообщение.Тексты Цикл Если ТекстПочтовогоСообщения.ТипТекста = ТипТекстаПочтовогоСообщения.HTML Тогда - ТекстHTML = ОбщегоНазначенияКлиентСервер.ЗаменитьНедопустимыеСимволыXML(ТекстПочтовогоСообщения.Текст); - + + ТекстHTML = ТекстHTML + ОбщегоНазначенияКлиентСервер.ЗаменитьНедопустимыеСимволыXML(ТекстПочтовогоСообщения.Текст); + ИначеЕсли ТекстПочтовогоСообщения.ТипТекста = ТипТекстаПочтовогоСообщения.ПростойТекст Тогда - ТекстПростой = ОбщегоНазначенияКлиентСервер.ЗаменитьНедопустимыеСимволыXML(ТекстПочтовогоСообщения.Текст); + + ТекстПростой = ТекстПростой + ОбщегоНазначенияКлиентСервер.ЗаменитьНедопустимыеСимволыXML(ТекстПочтовогоСообщения.Текст); ИначеЕсли ТекстПочтовогоСообщения.ТипТекста = ТипТекстаПочтовогоСообщения.РазмеченныйТекст Тогда ТекстРазмеченный = ОбщегоНазначенияКлиентСервер.ЗаменитьНедопустимыеСимволыXML(ТекстПочтовогоСообщения.Текст); @@ -1655,8 +1741,11 @@ Если ЭтоРегламентноеЗадание Тогда ТекстСообщенияОбОшибке = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Во время регламентной отправки уведомления о прочтении электронного письма %1 произошла ошибка - |%2'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), Выборка.ПредставлениеПисьма,ОписаниеОшибки()); + НСтр("ru = 'Во время регламентной отправки уведомления о прочтении электронного письма %1 произошла ошибка + |%2'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), + Выборка.ПредставлениеПисьма, + ОписаниеОшибки()); + ЗаписьЖурналаРегистрации(СобытиеЖурналаРегистрации(), УровеньЖурналаРегистрации.Ошибка, , , ТекстСообщенияОбОшибке); @@ -1664,8 +1753,11 @@ Иначе ТекстСообщенияОбОшибке = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Во время отправки уведомления о прочтении электронного письма %1 произошла ошибка - |%2'"), Выборка.ПредставлениеПисьма,КраткоеПредставлениеОшибки(ИнформацияОбОшибке())); + НСтр("ru = 'Во время отправки уведомления о прочтении электронного письма %1 произошла ошибка + |%2'"), + Выборка.ПредставлениеПисьма, + КраткоеПредставлениеОшибки(ИнформацияОбОшибке())); + ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстСообщенияОбОшибке,Выборка.Письмо); КонецЕсли; @@ -1709,13 +1801,13 @@ Функция ПолучитьВажностьЭлектронногоПисьма(Важность) - Если (Важность = ВажностьИнтернетПочтовогоСообщения.Высокая) ИЛИ - (Важность = ВажностьИнтернетПочтовогоСообщения.Наивысшая) Тогда + Если (Важность = ВажностьИнтернетПочтовогоСообщения.Высокая) + ИЛИ (Важность = ВажностьИнтернетПочтовогоСообщения.Наивысшая) Тогда Возврат Перечисления.ВариантыВажностиВзаимодействия.Высокая; - ИначеЕсли (Важность = ВажностьИнтернетПочтовогоСообщения.Наименьшая) ИЛИ - (Важность = ВажностьИнтернетПочтовогоСообщения.Низкая) Тогда + ИначеЕсли (Важность = ВажностьИнтернетПочтовогоСообщения.Наименьшая) + ИЛИ (Важность = ВажностьИнтернетПочтовогоСообщения.Низкая) Тогда Возврат Перечисления.ВариантыВажностиВзаимодействия.Низкая; @@ -1749,8 +1841,7 @@ |Has been read " + Выборка.ДатаПрочтения + " |By Recipient " +Выборка.ИмяПользователя + "<" + Выборка.АдресЭлектроннойПочты + ">"; - ЛокализованноеУведомление = Нстр("ru=' - |Сообщение от %1 < %2 > + ЛокализованноеУведомление = Символы.ПС + Нстр("ru='Сообщение от %1 < %2 > |Тема: %3 |Отправленное %4 |Было прочитано %5 @@ -1947,4 +2038,12 @@ КонецФункции +Процедура СнятьБлокировкуУчетнойЗаписиДляПолучения(УчетнаяЗапись) + + НаборЗаписей = РегистрыСведений.ЗаблокированныеДляПолученияУчетныеЗаписи.СоздатьНаборЗаписей(); + НаборЗаписей.Отбор.УчетнаяЗапись.Установить(УчетнаяЗапись); + НаборЗаписей.Записать(); + +КонецПроцедуры + #КонецОбласти diff --git a/SSL/src/CommonModules/УправлениеЭлектроннойПочтойКлиент/Module.bsl b/SSL/src/CommonModules/УправлениеЭлектроннойПочтойКлиент/Module.bsl index a3a325659..a1d16c2b7 100644 --- a/SSL/src/CommonModules/УправлениеЭлектроннойПочтойКлиент/Module.bsl +++ b/SSL/src/CommonModules/УправлениеЭлектроннойПочтойКлиент/Module.bsl @@ -56,9 +56,7 @@ ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Получено писем: %1'"), ПолученоПисем); Если ДоступноУчетныхЗаписей > 1 Тогда - ТекстСообщения = ТекстСообщения + " " + - СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = '(учетных записей: %1)'"), - ДоступноУчетныхЗаписей); + ТекстСообщения = ТекстСообщения + " " + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = '(учетных записей: %1)'"), ДоступноУчетныхЗаписей); КонецЕсли; Если ЭлементСписок <> Неопределено Тогда diff --git a/SSL/src/CommonModules/ФайловыеФункцииКлиент/Module.bsl b/SSL/src/CommonModules/ФайловыеФункцииКлиент/Module.bsl new file mode 100644 index 000000000..b5c24dd77 --- /dev/null +++ b/SSL/src/CommonModules/ФайловыеФункцииКлиент/Module.bsl @@ -0,0 +1,70 @@ +//////////////////////////////////////////////////////////////////////////////// +// Подсистема "Файловые функции". +// +//////////////////////////////////////////////////////////////////////////////// + +#Область ПрограммныйИнтерфейс + +//////////////////////////////////////////////////////////////////////////////// +// Процедуры и функция для работы со сканером. + +// Открывает форму настройки сканирования. +Процедура ОткрытьФормуНастройкиСканирования() Экспорт + + Если ОбщегоНазначенияКлиентСервер.ЭтоLinuxКлиент() Тогда + ТекстСообщения = НСтр("ru = 'Сканирование не поддерживается в клиенте под управлением ОС Linux.'"); + ПоказатьПредупреждение(, ТекстСообщения); + Возврат; + КонецЕсли; + + Если ОбщегоНазначенияКлиентСервер.ЭтоВебКлиент() Тогда + ТекстСообщения = НСтр("ru = 'Сканирование не поддерживается в веб-клиенте.'"); + ПоказатьПредупреждение(, ТекстСообщения); + Возврат; + КонецЕсли; + + КомпонентаУстановлена = ФайловыеФункцииСлужебныйКлиент.ПроинициализироватьКомпоненту(); + + Если Не КомпонентаУстановлена Тогда + ТекстВопроса = НСтр("ru = 'Для продолжения работы необходимо установить компоненту сканирования. + |Установить компоненту?'"); + Обработчик = Новый ОписаниеОповещения("ПоказатьВопросУстановкиКомпонентыСканирования", ЭтотОбъект, КомпонентаУстановлена); + ПоказатьВопрос(Обработчик, ТекстВопроса, РежимДиалогаВопрос.ДаНет); + Возврат; + КонецЕсли; + + ОткрытьФормуНастройкиСканированияЗавершение(КомпонентаУстановлена, Неопределено); + +КонецПроцедуры + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +Функция ПоказатьВопросУстановкиКомпонентыСканирования(Результат, КомпонентаУстановлена) Экспорт + + Если Результат = КодВозвратаДиалога.Да Тогда + Обработчик = Новый ОписаниеОповещения("ОткрытьФормуНастройкиСканированияЗавершение", ЭтотОбъект); + ФайловыеФункцииСлужебныйКлиент.УстановитьКомпоненту(Обработчик); + КонецЕсли; + +КонецФункции + +Процедура ОткрытьФормуНастройкиСканированияЗавершение(КомпонентаУстановлена, ПараметрыВыполнения) Экспорт + + Если Не КомпонентаУстановлена Тогда + Возврат; + КонецЕсли; + + СистемнаяИнформация = Новый СистемнаяИнформация(); + ИдентификаторКлиента = СистемнаяИнформация.ИдентификаторКлиента; + + ПараметрыФормы = Новый Структура; + ПараметрыФормы.Вставить("КомпонентаУстановлена", КомпонентаУстановлена); + ПараметрыФормы.Вставить("ИдентификаторКлиента", ИдентификаторКлиента); + + ОткрытьФорму("Обработка.Сканирование.Форма.НастройкаСканирования", ПараметрыФормы); + +КонецПроцедуры + +#КонецОбласти diff --git a/SSL/src/CommonModules/РаботаСоСканеромКлиент/РаботаСоСканеромКлиент.mdo b/SSL/src/CommonModules/ФайловыеФункцииКлиент/ФайловыеФункцииКлиент.mdo similarity index 61% rename from SSL/src/CommonModules/РаботаСоСканеромКлиент/РаботаСоСканеромКлиент.mdo rename to SSL/src/CommonModules/ФайловыеФункцииКлиент/ФайловыеФункцииКлиент.mdo index 9871401e8..ea9071662 100644 --- a/SSL/src/CommonModules/РаботаСоСканеромКлиент/РаботаСоСканеромКлиент.mdo +++ b/SSL/src/CommonModules/ФайловыеФункцииКлиент/ФайловыеФункцииКлиент.mdo @@ -1,9 +1,9 @@ <?xml version="1.0" encoding="UTF-8"?> -<mdclass:CommonModule xmlns:mdclass="http://g5.1c.ru/v8/dt/metadata/mdclass" uuid="d4655391-144c-4ba6-aee5-1edafebe862c"> - <name>РаботаСоСканеромКлиент</name> +<mdclass:CommonModule xmlns:mdclass="http://g5.1c.ru/v8/dt/metadata/mdclass" uuid="97edd94a-4bf2-4ed7-b98f-677f869b0715"> + <name>ФайловыеФункцииКлиент</name> <synonym> <key>ru</key> - <value>Работа со сканером клиент</value> + <value>Файловые функции клиент</value> </synonym> <clientManagedApplication>true</clientManagedApplication> <clientOrdinaryApplication>true</clientOrdinaryApplication> diff --git a/SSL/src/CommonModules/ФайловыеФункцииСлужебный/Module.bsl b/SSL/src/CommonModules/ФайловыеФункцииСлужебный/Module.bsl index 2e31f4f69..043471ea1 100644 --- a/SSL/src/CommonModules/ФайловыеФункцииСлужебный/Module.bsl +++ b/SSL/src/CommonModules/ФайловыеФункцииСлужебный/Module.bsl @@ -100,7 +100,7 @@ // Получает полный путь к файлу на диске. // // Синтаксис: - // Процедура ПриОпределенииИмениФайлаСПутемКДвоичнымДанным(ФайлСсылка, ПутьКФайлу) Экспорт + // Процедура ПриОпределенииИмениФайлаСПутемКДвоичнымДанным(ФайлСсылка, ПутьКФайлу, ПустойПутьДляПустыхДанных = Ложь) Экспорт // СерверныеСобытия.Добавить("СтандартныеПодсистемы.ФайловыеФункции\ПриОпределенииИмениФайлаСПутемКДвоичнымДанным"); @@ -115,14 +115,8 @@ "СтандартныеПодсистемы.ОбновлениеВерсииИБ\ПриДобавленииОбработчиковОбновления"].Добавить( "ФайловыеФункцииСлужебный"); - Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаВМоделиСервиса.ОчередьЗаданий") Тогда - СерверныеОбработчики[ - "СтандартныеПодсистемы.РаботаВМоделиСервиса.ОчередьЗаданий\ПриОпределенииИспользованияРегламентныхЗаданий"].Добавить( - "ФайловыеФункцииСлужебный"); - КонецЕсли; - СерверныеОбработчики[ - "СтандартныеПодсистемы.БазоваяФункциональность\ПриДобавленииПараметровРаботыКлиентскойЛогикиСтандартныхПодсистем"].Добавить( + "СтандартныеПодсистемы.БазоваяФункциональность\ПриДобавленииПараметровРаботыКлиента"].Добавить( "ФайловыеФункцииСлужебный"); СерверныеОбработчики[ @@ -139,6 +133,11 @@ "ФайловыеФункцииСлужебный"); КонецЕсли; + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ВариантыОтчетов") Тогда + СерверныеОбработчики["СтандартныеПодсистемы.ВариантыОтчетов\ПриНастройкеВариантовОтчетов"].Добавить( + "ФайловыеФункцииСлужебный"); + КонецЕсли; + КонецПроцедуры // Определить список справочников, доступных для загрузки с помощью подсистемы "Загрузка данных из файла". @@ -176,31 +175,6 @@ Объекты.Вставить(Метаданные.Справочники.ТомаХраненияФайлов.ПолноеИмя(), "РеквизитыРедактируемыеВГрупповойОбработке"); КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// Стандартный программный интерфейс. - -// Заполняет структуру параметров, необходимых для работы клиентского кода -// конфигурации. -// -// Параметры: -// Параметры - Структура - структура параметров. -// -Процедура ДобавитьПараметрыРаботыКлиента(Параметры) Экспорт - - Если Не ОбщегоНазначенияПовтИсп.ДоступноИспользованиеРазделенныхДанных() Тогда - Возврат; - КонецЕсли; - - НастройкиРаботыСФайлами = ФайловыеФункцииСлужебныйПовтИсп.НастройкиРаботыСФайлами(); - - Параметры.Вставить("ПерсональныеНастройкиРаботыСФайлами", Новый ФиксированнаяСтруктура( - НастройкиРаботыСФайлами.ПерсональныеНастройки)); - - Параметры.Вставить("ОбщиеНастройкиРаботыСФайлами", Новый ФиксированнаяСтруктура( - НастройкиРаботыСФайлами.ОбщиеНастройки)); - -КонецПроцедуры - //////////////////////////////////////////////////////////////////////////////// // Поддержка обмена файлами @@ -427,7 +401,7 @@ // Использование абсолютного формата даты "ДФ" в следующей строке // является правильным, так как дата используется не для просмотра пользователем. - ПутьДня = Формат(Дата, "ДФ=ггггММдд") + ОбщегоНазначенияКлиентСервер.РазделительПути(); + ПутьДня = Формат(Дата, "ДФ=ггггММдд") + ПолучитьРазделительПути(); ПутьКТому = ПутьКТому + ПутьДня; @@ -497,7 +471,7 @@ СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонСообщенияОбОшибке, ПодробноеОписаниеВсехОшибок)); Если Пользователи.ЭтоПолноправныйПользователь() Тогда - СтрокаИсключения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонСообщенияОбОшибке, КраткоеОписаниеВсехОшибок); + СтрокаИсключения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонСообщенияОбОшибке, КраткоеОписаниеВсехОшибок); Иначе // Сообщение обычному пользователю. СтрокаИсключения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( @@ -542,7 +516,7 @@ Шифрование = Ложь; Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ЭлектроннаяПодпись") - И Пользователи.РолиДоступны("ИспользованиеЭП") + И Пользователи.РолиДоступны("ИспользованиеЭлектроннойПодписиИШифрования") И Не ОбщегоНазначенияКлиентСервер.ЭтоВебКлиентПодMacOS() Тогда МодульЭлектроннаяПодпись = ОбщегоНазначения.ОбщийМодуль("ЭлектроннаяПодпись"); @@ -781,6 +755,45 @@ КонецФункции +//////////////////////////////////////////////////////////////////////////////// +// Сканирование + +Функция СписокРасширенийДляПредпросмотра() Экспорт + + РасширенияДляПредпросмотра = Новый СписокЗначений; + РасширенияДляПредпросмотра.Добавить("jpg"); + РасширенияДляПредпросмотра.Добавить("jpeg"); + РасширенияДляПредпросмотра.Добавить("tiff"); + РасширенияДляПредпросмотра.Добавить("tif"); + РасширенияДляПредпросмотра.Добавить("gif"); + РасширенияДляПредпросмотра.Добавить("bmp"); + РасширенияДляПредпросмотра.Добавить("png"); + + Возврат РасширенияДляПредпросмотра; + +КонецФункции + +Функция ПодготовитьСтруктуруПараметровОтправки() Экспорт + + Возврат Новый Структура("Получатель,Тема,Текст", Неопределено, "", ""); + +КонецФункции + +//////////////////////////////////////////////////////////////////////////////// +// Обработчики условных вызовов в эту подсистему. + +// См. описание одноименной процедуры в общем модуле РегламентныеЗаданияПереопределяемый. +// +Процедура ПриОпределенииЗависимостейРегламентныхЗаданий(Зависимости) Экспорт + Зависимость = Зависимости.Добавить(); + Зависимость.РегламентноеЗадание = Метаданные.РегламентныеЗадания.ИзвлечениеТекста; + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ПолнотекстовыйПоиск") Тогда + МодульПолнотекстовыйПоискСервер = ОбщегоНазначения.ОбщийМодуль("ПолнотекстовыйПоискСервер"); + Зависимость.ФункциональнаяОпция = МодульПолнотекстовыйПоискСервер.ИспользоватьПолнотекстовыйПоиск(); + КонецЕсли; + Зависимость.ДоступноВМоделиСервиса = Ложь; +КонецПроцедуры + #КонецОбласти #Область СлужебныеПроцедурыИФункции @@ -802,33 +815,25 @@ КонецПроцедуры -// Формирует таблицу регламентных заданий -// с признаком использования в модели сервиса. -// -// Параметры: -// ТаблицаИспользования - ТаблицаЗначений - таблица, которую необходимо -// заполнить регламентными заданиями и признаком использования, колонки: -// РегламентноеЗадание - Строка - имя предопределенного регламентного задания. -// Использование - Булево - Истина, если регламентное задание должно -// выполняться в модели сервиса. Ложь - если не должно. -// -Процедура ПриОпределенииИспользованияРегламентныхЗаданий(ТаблицаИспользования) Экспорт - - НоваяСтрока = ТаблицаИспользования.Добавить(); - НоваяСтрока.РегламентноеЗадание = "ИзвлечениеТекста"; - НоваяСтрока.Использование = Ложь; - -КонецПроцедуры - // Заполняет структуру параметров, необходимых для работы клиентского кода // конфигурации. // // Параметры: // Параметры - Структура - структура параметров. // -Процедура ПриДобавленииПараметровРаботыКлиентскойЛогикиСтандартныхПодсистем(Параметры) Экспорт +Процедура ПриДобавленииПараметровРаботыКлиента(Параметры) Экспорт - ДобавитьПараметрыРаботыКлиента(Параметры); + Если Не ОбщегоНазначенияПовтИсп.ДоступноИспользованиеРазделенныхДанных() Тогда + Возврат; + КонецЕсли; + + НастройкиРаботыСФайлами = ФайловыеФункцииСлужебныйПовтИсп.НастройкиРаботыСФайлами(); + + Параметры.Вставить("ПерсональныеНастройкиРаботыСФайлами", Новый ФиксированнаяСтруктура( + НастройкиРаботыСФайлами.ПерсональныеНастройки)); + + Параметры.Вставить("ОбщиеНастройкиРаботыСФайлами", Новый ФиксированнаяСтруктура( + НастройкиРаботыСФайлами.ОбщиеНастройки)); КонецПроцедуры @@ -883,12 +888,34 @@ КонецПроцедуры +// Содержит настройки размещения вариантов отчетов в панели отчетов. +// +// Параметры: +// Настройки - Коллекция - Используется для описания настроек отчетов и вариантов +// см. описание к ВариантыОтчетов.ДеревоНастроекВариантовОтчетовКонфигурации(). +// +// Описание: +// См. ВариантыОтчетовПереопределяемый.НастроитьВариантыОтчетов(). +// +Процедура ПриНастройкеВариантовОтчетов(Настройки) Экспорт + МодульВариантыОтчетов = ОбщегоНазначения.ОбщийМодуль("ВариантыОтчетов"); + МодульВариантыОтчетов.НастроитьОтчетВМодулеМенеджера(Настройки, Метаданные.Отчеты.ОбъемНенужныхФайлов); + МодульВариантыОтчетов.НастроитьОтчетВМодулеМенеджера(Настройки, Метаданные.Отчеты.ПроверкаЦелостностиТома); +КонецПроцедуры + //////////////////////////////////////////////////////////////////////////////// // Обмен файлами -// Создать файловый начальный образ на сервере. +// Подготовка параметров и предварительные проверки перед созданием файлового начального образа. // -Функция СоздатьФайловыйНачальныйОбразНаСервере(Узел, УникальныйИдентификаторФормы, Язык, ПолноеИмяФайловойБазыWindows, ПолноеИмяФайловойБазыLinux, ПутьКАрхивуСФайламиТомовWindows, ПутьКАрхивуСФайламиТомовLinux) Экспорт +Функция ПодготовитьДанныеДляСозданияФайловогоНачальногоОбраза(СтруктураПараметров) Экспорт + Узел = СтруктураПараметров.Узел; + УникальныйИдентификаторФормы = СтруктураПараметров.УникальныйИдентификаторФормы; + Язык = СтруктураПараметров.Язык; + ПолноеИмяФайловойБазыWindows = СтруктураПараметров.ПолноеИмяФайловойБазыWindows; + ПолноеИмяФайловойБазыLinux = СтруктураПараметров.ПолноеИмяФайловойБазыLinux; + ПутьКАрхивуСФайламиТомовWindows = СтруктураПараметров.ПутьКАрхивуСФайламиТомовWindows; + ПутьКАрхивуСФайламиТомовLinux = СтруктураПараметров.ПутьКАрхивуСФайламиТомовLinux; // Проверяем состав плана обмена. СтандартныеПодсистемыСервер.ПроверитьСоставПланаОбмена(Узел); @@ -915,7 +942,7 @@ Если Не ПустаяСтрока(ПутьКАрхивуСФайламиТомов) И (Лев(ПутьКАрхивуСФайламиТомов, 2) <> "\\" - ИЛИ Найти(ПутьКАрхивуСФайламиТомов, ":") <> 0) Тогда + ИЛИ СтрНайти(ПутьКАрхивуСФайламиТомов, ":") <> 0) Тогда ОбщегоНазначенияКлиентСервер.СообщитьПользователю( НСтр("ru = 'Путь к архиву с файлами томов должен быть @@ -928,7 +955,7 @@ КонецЕсли; Если НЕ ПараметрыРаботыКлиента.ИнформационнаяБазаФайловая Тогда - Если Не ПустаяСтрока(ПолноеИмяФайловойБазы) И (Лев(ПолноеИмяФайловойБазы, 2) <> "\\" ИЛИ Найти(ПолноеИмяФайловойБазы, ":") <> 0) Тогда + Если Не ПустаяСтрока(ПолноеИмяФайловойБазы) И (Лев(ПолноеИмяФайловойБазы, 2) <> "\\" ИЛИ СтрНайти(ПолноеИмяФайловойБазы, ":") <> 0) Тогда ОбщегоНазначенияКлиентСервер.СообщитьПользователю( НСтр("ru = 'Путь к файловой базе должен быть @@ -997,6 +1024,28 @@ // Для передачи пути каталога файлов в обработчик ПриОтправкеДанныхФайла. СохранитьНастройку("ОбменФайлами", "ВременныйКаталог", ИмяКаталогаФайлов); + // Добавляем в параметры переменные, которые потребуются для создания начального образа. + СтруктураПараметров.Вставить("ИмяКаталога", ИмяКаталога); + СтруктураПараметров.Вставить("ИмяКаталогаФайлов", ИмяКаталогаФайлов); + СтруктураПараметров.Вставить("ЕстьФайлыВТомах", ЕстьФайлыВТомах); + СтруктураПараметров.Вставить("ПутьКАрхивуСФайламиТомов", ПутьКАрхивуСФайламиТомов); + СтруктураПараметров.Вставить("ПолноеИмяФайловойБазы", ПолноеИмяФайловойБазы); + Возврат Истина; +КонецФункции + +// Создать файловый начальный образ на сервере. . Запускается регламентным заданием. +// +Процедура СоздатьФайловыйНачальныйОбразНаСервере(СтруктураПараметров, АдресХранилища) Экспорт + + Узел = СтруктураПараметров.Узел; + Язык = СтруктураПараметров.Язык; + ИмяКаталога = СтруктураПараметров.ИмяКаталога; + ИмяКаталогаФайлов = СтруктураПараметров.ИмяКаталогаФайлов; + ЕстьФайлыВТомах = СтруктураПараметров.ЕстьФайлыВТомах; + ПутьКАрхивуСФайламиТомов = СтруктураПараметров.ПутьКАрхивуСФайламиТомов; + ПолноеИмяФайловойБазы = СтруктураПараметров.ПолноеИмяФайловойБазы; + ПоместитьВоВременноеХранилище(СтруктураПараметров, АдресХранилища); + ZIP = Неопределено; Запись = Неопределено; @@ -1038,13 +1087,15 @@ // очистка УдалитьФайлы(ИмяКаталога); - Возврат Истина; - -КонецФункции +КонецПроцедуры -// Создать серверный начальный образ на сервере. +// Подготовка параметров и предварительные проверки перед созданием серверного начального образа. // -Функция СоздатьСерверныйНачальныйОбразНаСервере(Узел, СтрокаСоединения, ПутьКАрхивуСФайламиТомовWindows, ПутьКАрхивуСФайламиТомовLinux) Экспорт +Функция ПодготовитьДанныеДляСозданияСерверногоНачальногоОбраза(СтруктураПараметров) Экспорт + Узел = СтруктураПараметров.Узел; + СтрокаСоединения = СтруктураПараметров.СтрокаСоединения; + ПутьКАрхивуСФайламиТомовWindows = СтруктураПараметров.ПутьКАрхивуСФайламиТомовWindows; + ПутьКАрхивуСФайламиТомовLinux = СтруктураПараметров.ПутьКАрхивуСФайламиТомовLinux; // Проверяем состав плана обмена. СтандартныеПодсистемыСервер.ПроверитьСоставПланаОбмена(Узел); @@ -1067,7 +1118,7 @@ Если ЕстьФайлыВТомах Тогда Если Не ПустаяСтрока(ПутьКАрхивуСФайламиТомов) И (Лев(ПутьКАрхивуСФайламиТомов, 2) <> "\\" - ИЛИ Найти(ПутьКАрхивуСФайламиТомов, ":") <> 0) Тогда + ИЛИ СтрНайти(ПутьКАрхивуСФайламиТомов, ":") <> 0) Тогда ОбщегоНазначенияКлиентСервер.СообщитьПользователю( НСтр("ru = 'Путь к архиву с файлами томов должен быть @@ -1114,6 +1165,26 @@ // Для передачи пути каталога файлов в обработчик ПриОтправкеДанныхФайла. СохранитьНастройку("ОбменФайлами", "ВременныйКаталог", ИмяКаталогаФайлов); + // Добавляем в параметры переменные, которые потребуются для создания начального образа. + СтруктураПараметров.Вставить("ЕстьФайлыВТомах", ЕстьФайлыВТомах); + СтруктураПараметров.Вставить("ПутьФайла", ПутьФайла); + СтруктураПараметров.Вставить("ИмяКаталога", ИмяКаталога); + СтруктураПараметров.Вставить("ИмяКаталогаФайлов", ИмяКаталогаФайлов); + + Возврат Истина; +КонецФункции + +// Создать серверный начальный образ на сервере. Запускается регламентным заданием. +// +Процедура СоздатьСерверныйНачальныйОбразНаСервере(СтруктураПараметров, АдресХранилища) Экспорт + Узел = СтруктураПараметров.Узел; + СтрокаСоединения = СтруктураПараметров.СтрокаСоединения; + ЕстьФайлыВТомах = СтруктураПараметров.ЕстьФайлыВТомах; + ПутьФайла = СтруктураПараметров.ПутьФайла; + ИмяКаталога = СтруктураПараметров.ИмяКаталога; + ИмяКаталогаФайлов = СтруктураПараметров.ИмяКаталогаФайлов; + ПоместитьВоВременноеХранилище(СтруктураПараметров, АдресХранилища); + ZIP = Неопределено; Запись = Неопределено; @@ -1150,9 +1221,7 @@ // очистка УдалитьФайлы(ИмяКаталога); - Возврат Истина; - -КонецФункции +КонецПроцедуры // Размещает файлы в томах, устанавливая ссылки в ВерсииФайла. // @@ -1246,7 +1315,13 @@ // Процедура ИзвлечьТекстИзФайловНаСервере() Экспорт - ОбщегоНазначения.ПриНачалеВыполненияРегламентногоЗадания(); + ОбщегоНазначения.ПриНачалеВыполненияРегламентногоЗадания(Метаданные.РегламентныеЗадания.ИзвлечениеТекста); + + ИзвлечьТекстИзФайлов(); + +КонецПроцедуры + +Процедура ИзвлечьТекстИзФайлов() Экспорт УстановитьПривилегированныйРежим(Истина); @@ -1278,12 +1353,11 @@ Если ПустаяСтрока(ИтоговыйТекстЗапроса) Тогда ИтоговыйТекстЗапроса = ТекущийТекстЗапроса; Иначе - ИтоговыйТекстЗапроса = ИтоговыйТекстЗапроса + - " - | - |ОБЪЕДИНИТЬ ВСЕ - | - |" + ТекущийТекстЗапроса; + ИтоговыйТекстЗапроса = ИтоговыйТекстЗапроса + " + | + |ОБЪЕДИНИТЬ ВСЕ + | + |" + ТекущийТекстЗапроса; КонецЕсли; КонецЕсли; КонецЦикла; @@ -1444,4 +1518,382 @@ КонецПроцедуры +//////////////////////////////////////////////////////////////////////////////// +// Сканирование + +Функция ПараметрыСканераВПеречисления(РазрешениеЧисло, ЦветностьЧисло, ПоворотЧисло, РазмерБумагиЧисло) Экспорт + + Если РазрешениеЧисло = 200 Тогда + Разрешение = Перечисления.РазрешенияСканированногоИзображения.dpi200; + ИначеЕсли РазрешениеЧисло = 300 Тогда + Разрешение = Перечисления.РазрешенияСканированногоИзображения.dpi300; + ИначеЕсли РазрешениеЧисло = 600 Тогда + Разрешение = Перечисления.РазрешенияСканированногоИзображения.dpi600; + ИначеЕсли РазрешениеЧисло = 1200 Тогда + Разрешение = Перечисления.РазрешенияСканированногоИзображения.dpi1200; + КонецЕсли; + + Если ЦветностьЧисло = 0 Тогда + Цветность = Перечисления.ЦветностиИзображения.Монохромное; + ИначеЕсли ЦветностьЧисло = 1 Тогда + Цветность = Перечисления.ЦветностиИзображения.ГрадацииСерого; + ИначеЕсли ЦветностьЧисло = 2 Тогда + Цветность = Перечисления.ЦветностиИзображения.Цветное; + КонецЕсли; + + Если ПоворотЧисло = 0 Тогда + Поворот = Перечисления.СпособыПоворотаИзображения.НетПоворота; + ИначеЕсли ПоворотЧисло = 90 Тогда + Поворот = Перечисления.СпособыПоворотаИзображения.ВправоНа90; + ИначеЕсли ПоворотЧисло = 180 Тогда + Поворот = Перечисления.СпособыПоворотаИзображения.ВправоНа180; + ИначеЕсли ПоворотЧисло = 270 Тогда + Поворот = Перечисления.СпособыПоворотаИзображения.ВлевоНа90; + КонецЕсли; + + Если РазмерБумагиЧисло = 0 Тогда + РазмерБумаги = Перечисления.РазмерыБумаги.НеЗадано; + ИначеЕсли РазмерБумагиЧисло = 11 Тогда + РазмерБумаги = Перечисления.РазмерыБумаги.A3; + ИначеЕсли РазмерБумагиЧисло = 1 Тогда + РазмерБумаги = Перечисления.РазмерыБумаги.A4; + ИначеЕсли РазмерБумагиЧисло = 5 Тогда + РазмерБумаги = Перечисления.РазмерыБумаги.A5; + ИначеЕсли РазмерБумагиЧисло = 6 Тогда + РазмерБумаги = Перечисления.РазмерыБумаги.B4; + ИначеЕсли РазмерБумагиЧисло = 2 Тогда + РазмерБумаги = Перечисления.РазмерыБумаги.B5; + ИначеЕсли РазмерБумагиЧисло = 7 Тогда + РазмерБумаги = Перечисления.РазмерыБумаги.B6; + ИначеЕсли РазмерБумагиЧисло = 14 Тогда + РазмерБумаги = Перечисления.РазмерыБумаги.C4; + ИначеЕсли РазмерБумагиЧисло = 15 Тогда + РазмерБумаги = Перечисления.РазмерыБумаги.C5; + ИначеЕсли РазмерБумагиЧисло = 16 Тогда + РазмерБумаги = Перечисления.РазмерыБумаги.C6; + ИначеЕсли РазмерБумагиЧисло = 3 Тогда + РазмерБумаги = Перечисления.РазмерыБумаги.USLetter; + ИначеЕсли РазмерБумагиЧисло = 4 Тогда + РазмерБумаги = Перечисления.РазмерыБумаги.USLegal; + ИначеЕсли РазмерБумагиЧисло = 10 Тогда + РазмерБумаги = Перечисления.РазмерыБумаги.USExecutive; + КонецЕсли; + + Результат = Новый Структура; + Результат.Вставить("Разрешение", Разрешение); + Результат.Вставить("Цветность", Цветность); + Результат.Вставить("Поворот", Поворот); + Результат.Вставить("РазмерБумаги", РазмерБумаги); + Возврат Результат; + +КонецФункции + +//////////////////////////////////////////////////////////////////////////////// +// Очистка ненужных файлов + +Процедура ОчиститьНенужныеФайлы() Экспорт + + ОбщегоНазначения.ПриНачалеВыполненияРегламентногоЗадания(Метаданные.РегламентныеЗадания.ОчисткаНенужныхФайлов); + + УстановитьПривилегированныйРежим(Истина); + + НастройкиОчистки = РегистрыСведений.НастройкиОчисткиФайлов.ТекущиеНастройкиОчистки(); + + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаСФайлами") Тогда + + НастройкиОчисткиСВерсиями = НастройкиОчистки.НайтиСтроки(Новый Структура("ЭтоФайл, ЭтоНастройкаДляЭлементаСправочника", + Истина, + Ложь)); + + Для Каждого Настройка Из НастройкиОчисткиСВерсиями Цикл + + МассивИсключений = Новый Массив; + ДетализированныеНастройки = НастройкиОчистки.НайтиСтроки(Новый Структура( + "ИдентификаторВладельца, ЭтоФайл, ЭтоНастройкаДляЭлементаСправочника", + Настройка.ВладелецФайла, + Истина, + Истина)); + Если ДетализированныеНастройки.Количество() > 0 Тогда + Для Каждого ЭлементИсключение Из ДетализированныеНастройки Цикл + МассивИсключений.Добавить(ЭлементИсключение.ВладелецФайла); + ОчиститьДанныеНенужныхФайлов(ЭлементИсключение); + КонецЦикла; + КонецЕсли; + + ОчиститьДанныеНенужныхФайлов(Настройка, МассивИсключений); + КонецЦикла; + КонецЕсли; + + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ПрисоединенныеФайлы") Тогда + + НастройкиОчисткиБезВерсий = НастройкиОчистки.НайтиСтроки(Новый Структура("ЭтоФайл, ЭтоНастройкаДляЭлементаСправочника", + Ложь, + Ложь)); + Для Каждого Настройка Из НастройкиОчисткиБезВерсий Цикл + МассивИсключений = Новый Массив; + ДетализированныеНастройки = НастройкиОчистки.НайтиСтроки(Новый Структура( + "ИдентификаторВладельца, ЭтоФайл, ЭтоНастройкаДляЭлементаСправочника", + Настройка.ВладелецФайла, + Ложь, + Истина)); + Если ДетализированныеНастройки.Количество() > 0 Тогда + Для Каждого ЭлементИсключение Из ДетализированныеНастройки Цикл + МассивИсключений.Добавить(ЭлементИсключение.ВладелецФайла); + ОчиститьДанныеНенужныхФайлов(ЭлементИсключение); + КонецЦикла; + КонецЕсли; + + ОчиститьДанныеНенужныхФайлов(Настройка, МассивИсключений); + КонецЦикла; + КонецЕсли; + +КонецПроцедуры + +Процедура ОчиститьДанныеНенужныхФайлов(НастройкаОчистки, МассивИсключений = Неопределено) + + Если НастройкаОчистки.Действие = Перечисления.ВариантыОчисткиФайлов.НеОчищать Тогда + Возврат; + КонецЕсли; + + Если МассивИсключений = Неопределено Тогда + МассивИсключений = Новый Массив; + КонецЕсли; + + ДеревоВладельцев = ВыбратьДанныеПоПравилу(НастройкаОчистки, МассивИсключений); + + Если ДеревоВладельцев.Строки.Количество() = 0 Тогда + Возврат; + КонецЕсли; + + Для Каждого Файл Из ДеревоВладельцев.Строки Цикл + + Если НастройкаОчистки.ЭтоФайл Тогда + + Если НастройкаОчистки.Действие = Перечисления.ВариантыОчисткиФайлов.ОчиститьФайлыИВерсии Тогда + ФайлДляПометки = Файл.ФайлСсылка.ПолучитьОбъект(); + // Пропускаем удаление, если файл занят для редактирования + Если Не ФайлДляПометки.Редактирует.Пустая() Тогда + Продолжить; + КонецЕсли; + ФайлДляПометки.УстановитьПометкуУдаления(Истина); + КонецЕсли; + + Для Каждого Версия Из Файл.Строки Цикл + ВыполнитьОчисткуДанныхОФайле(Версия.ВерсияСсылка, Истина); + КонецЦикла; + + Иначе + ВыполнитьОчисткуДанныхОФайле(Файл.ФайлСсылка, Ложь); + КонецЕсли; + + КонецЦикла; + +КонецПроцедуры + +Функция ВыбратьДанныеПоПравилу(НастройкаОчистки, МассивИсключений) + + КомпоновщикНастроек = Новый КомпоновщикНастроекКомпоновкиДанных; + + ОчищатьПоПравилу = НастройкаОчистки.ПериодОчистки = Перечисления.ПериодОчисткиФайлов.ПоПравилу; + Если ОчищатьПоПравилу Тогда + НастройкиКомпоновщика = НастройкаОчистки.ПравилоОтбора.Получить(); + Если НастройкиКомпоновщика <> Неопределено Тогда + КомпоновщикНастроек.ЗагрузитьНастройки(НастройкаОчистки.ПравилоОтбора.Получить()); + КонецЕсли; + КонецЕсли; + + СхемаКомпоновкиДанных = Новый СхемаКомпоновкиДанных; + ИсточникДанных = СхемаКомпоновкиДанных.ИсточникиДанных.Добавить(); + ИсточникДанных.Имя = "ИсточникДанных1"; + ИсточникДанных.ТипИсточникаДанных = "Local"; + + НаборДанных = СхемаКомпоновкиДанных.НаборыДанных.Добавить(Тип("НаборДанныхЗапросСхемыКомпоновкиДанных")); + НаборДанных.Имя = "НаборДанных1"; + НаборДанных.ИсточникДанных = ИсточникДанных.Имя; + + СхемаКомпоновкиДанных.ПоляИтога.Очистить(); + + Если НастройкаОчистки.ЭтоНастройкаДляЭлементаСправочника Тогда + ВладелецФайла = НастройкаОчистки.ИдентификаторВладельца; + ЭлементИсключение = НастройкаОчистки.ВладелецФайла; + Иначе + ВладелецФайла = НастройкаОчистки.ВладелецФайла; + ЭлементИсключение = Неопределено; + КонецЕсли; + + СхемаКомпоновкиДанных.НаборыДанных[0].Запрос = ТекстЗапросаДляОчисткиФайлов( + ВладелецФайла, + НастройкаОчистки, + МассивИсключений, + ЭлементИсключение); + + Структура = КомпоновщикНастроек.Настройки.Структура.Добавить(Тип("ГруппировкаКомпоновкиДанных")); + + ВыбранноеПоле = Структура.Выбор.Элементы.Добавить(Тип("ВыбранноеПолеКомпоновкиДанных")); + ВыбранноеПоле.Поле = Новый ПолеКомпоновкиДанных("ФайлСсылка"); + + Если НастройкаОчистки.ЭтоФайл Тогда + + СтруктураВерсий = Структура.Структура.Добавить(Тип("ГруппировкаКомпоновкиДанных")); + + ВыбранноеПоле = СтруктураВерсий.Выбор.Элементы.Добавить(Тип("ВыбранноеПолеКомпоновкиДанных")); + ВыбранноеПоле.Поле = Новый ПолеКомпоновкиДанных("ВерсияСсылка"); + + КонецЕсли; + + КомпоновщикНастроек.Инициализировать(Новый ИсточникДоступныхНастроекКомпоновкиДанных(СхемаКомпоновкиДанных)); + + Настройки = КомпоновщикНастроек.ПолучитьНастройки(); + + Параметр = КомпоновщикНастроек.Настройки.ПараметрыДанных.Элементы.Найти("ТипВладельца"); + Параметр.Значение = ТипЗнч(ВладелецФайла.ЗначениеПустойСсылки); + Параметр.Использование = Истина; + + Параметр = КомпоновщикНастроек.Настройки.ПараметрыДанных.Элементы.Найти("ПериодОчистки"); + Если Параметр <> Неопределено Тогда + Если НастройкаОчистки.ПериодОчистки = Перечисления.ПериодОчисткиФайлов.СтаршеМесяца Тогда + ЗначениеПериодаОчистки = ДобавитьМесяц(НачалоДня(ТекущаяДатаСеанса()), -1); + ИначеЕсли НастройкаОчистки.ПериодОчистки = Перечисления.ПериодОчисткиФайлов.СтаршеГода Тогда + ЗначениеПериодаОчистки = ДобавитьМесяц(НачалоДня(ТекущаяДатаСеанса()), -12); + ИначеЕсли НастройкаОчистки.ПериодОчистки = Перечисления.ПериодОчисткиФайлов.СтаршеШестиМесяцев Тогда + ЗначениеПериодаОчистки = ДобавитьМесяц(НачалоДня(ТекущаяДатаСеанса()), -6); + КонецЕсли; + Параметр.Значение = ЗначениеПериодаОчистки; + Параметр.Использование = Истина; + КонецЕсли; + + ПараметрТекущаяДата = КомпоновщикНастроек.Настройки.ПараметрыДанных.Элементы.Найти("ТекущаяДата"); + Если ПараметрТекущаяДата <> Неопределено Тогда + ПараметрТекущаяДата.Значение = ТекущаяДатаСеанса(); + ПараметрТекущаяДата.Использование = Истина; + КонецЕсли; + + Если МассивИсключений.Количество() > 0 Тогда + Параметр = КомпоновщикНастроек.Настройки.ПараметрыДанных.Элементы.Найти("МассивИсключений"); + Параметр.Значение = МассивИсключений; + Параметр.Использование = Истина; + КонецЕсли; + + Если НастройкаОчистки.ЭтоНастройкаДляЭлементаСправочника Тогда + Параметр = КомпоновщикНастроек.Настройки.ПараметрыДанных.Элементы.Найти("ЭлементИсключение"); + Параметр.Значение = ЭлементИсключение; + Параметр.Использование = Истина; + КонецЕсли; + + КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных; + ПроцессорКомпоновкиДанных = Новый ПроцессорКомпоновкиДанных; + ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВКоллекциюЗначений; + ДеревоЗначений = Новый ДеревоЗначений; + + МакетКомпоновкиДанных = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных, КомпоновщикНастроек.Настройки, , , Тип("ГенераторМакетаКомпоновкиДанныхДляКоллекцииЗначений")); + ПроцессорКомпоновкиДанных.Инициализировать(МакетКомпоновкиДанных); + ПроцессорВывода.УстановитьОбъект(ДеревоЗначений); + ПроцессорВывода.Вывести(ПроцессорКомпоновкиДанных); + + Возврат ДеревоЗначений; + +КонецФункции + +Функция ТекстЗапросаДляОчисткиФайлов(ВладелецФайла, Настройка, МассивИсключений, ЭлементИсключение) + + Если Настройка.ЭтоФайл И ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаСФайлами") Тогда + + МодульРаботаСФайламиСлужебный = ОбщегоНазначения.ОбщийМодуль("РаботаСФайламиСлужебный"); + Возврат МодульРаботаСФайламиСлужебный.ТекстЗапросаДляОчисткиФайлов(ВладелецФайла, Настройка, МассивИсключений, ЭлементИсключение); + + КонецЕсли; + + Если Не Настройка.ЭтоФайл И ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ПрисоединенныеФайлы") Тогда + + МодульПрисоединенныеФайлыСлужебный = ОбщегоНазначения.ОбщийМодуль("ПрисоединенныеФайлыСлужебный"); + Возврат МодульПрисоединенныеФайлыСлужебный.ТекстЗапросаДляОчисткиФайлов(ВладелецФайла, Настройка, МассивИсключений, ЭлементИсключение); + + КонецЕсли; + +КонецФункции + +Функция ТекстЗапросаПолногоОбъемаФайлов() Экспорт + + ТекстЗапроса = ""; + + ДобавитьПсевдонимПоля = Истина; + + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаСФайлами") Тогда + + МодульРаботаСФайламиСлужебный = ОбщегоНазначения.ОбщийМодуль("РаботаСФайламиСлужебный"); + МодульРаботаСФайламиСлужебный.СформироватьТекстЗапросаПолногоОбъемаФайлов(ТекстЗапроса); + ДобавитьПсевдонимПоля = Ложь; + + КонецЕсли; + + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ПрисоединенныеФайлы") Тогда + + МодульПрисоединенныеФайлыСлужебный = ОбщегоНазначения.ОбщийМодуль("ПрисоединенныеФайлыСлужебный"); + МодульПрисоединенныеФайлыСлужебный.СформироватьТекстЗапросаПолногоОбъемаФайлов(ТекстЗапроса, ДобавитьПсевдонимПоля); + + КонецЕсли; + + Возврат ТекстЗапроса; + +КонецФункции + +Процедура ВыполнитьОчисткуДанныхОФайле(ФайлСсылка, ЭтоФайл) + + Если ЭтоФайл Тогда + МодульРаботаСФайламиСлужебный = ОбщегоНазначения.ОбщийМодуль("РаботаСФайламиСлужебный"); + МодульРаботаСФайламиСлужебный.ВыполнитьОчисткуДанныхОФайле(ФайлСсылка); + Иначе + МодульПрисоединенныеФайлыСлужебный = ОбщегоНазначения.ОбщийМодуль("ПрисоединенныеФайлыСлужебный"); + МодульПрисоединенныеФайлыСлужебный.ВыполнитьОчисткуДанныхОФайле(ФайлСсылка); + КонецЕсли; + +КонецПроцедуры + +Процедура ПроверитьЦелостностьФайлов(ТаблицаФайлов, Том) Экспорт + + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаСФайлами") Тогда + + МодульРаботаСФайламиСлужебный = ОбщегоНазначения.ОбщийМодуль("РаботаСФайламиСлужебный"); + МодульРаботаСФайламиСлужебный.ПроверитьЦелостностьФайлов(ТаблицаФайлов, Том); + ДобавитьПсевдонимПоля = Ложь; + + КонецЕсли; + + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ПрисоединенныеФайлы") Тогда + + МодульПрисоединенныеФайлыСлужебный = ОбщегоНазначения.ОбщийМодуль("ПрисоединенныеФайлыСлужебный"); + МодульПрисоединенныеФайлыСлужебный.ПроверитьЦелостностьФайлов(ТаблицаФайлов, Том); + + КонецЕсли + +КонецПроцедуры + +Функция ОбъектыИсключенияПриОчисткеФайлов() Экспорт + + Массив = Новый Массив; + + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаСФайлами") Тогда + + МодульРаботаСФайламиПереопределяемый = ОбщегоНазначения.ОбщийМодуль("РаботаСФайламиПереопределяемый"); + МассивОбъектов = МодульРаботаСФайламиПереопределяемый.ОбъектыИсключенияПриОчисткеФайлов(); + Для Каждого ОбъектМетаданных Из МассивОбъектов Цикл + Массив.Добавить(ОбъектМетаданных); + КонецЦикла; + + КонецЕсли; + + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ПрисоединенныеФайлы") Тогда + + МодульПрисоединенныеПереопределяемый = ОбщегоНазначения.ОбщийМодуль("ПрисоединенныеФайлыПереопределяемый"); + МассивОбъектов = МодульПрисоединенныеПереопределяемый.ОбъектыИсключенияПриОчисткеФайлов(); + Для Каждого ОбъектМетаданных Из МассивОбъектов Цикл + Массив.Добавить(ОбъектМетаданных); + КонецЦикла; + + КонецЕсли; + + Возврат Массив; + +КонецФункции + #КонецОбласти diff --git a/SSL/src/CommonModules/ФайловыеФункцииСлужебныйВМоделиСервиса/Module.bsl b/SSL/src/CommonModules/ФайловыеФункцииСлужебныйВМоделиСервиса/Module.bsl index 912b2f464..983ab4494 100644 --- a/SSL/src/CommonModules/ФайловыеФункцииСлужебныйВМоделиСервиса/Module.bsl +++ b/SSL/src/CommonModules/ФайловыеФункцииСлужебныйВМоделиСервиса/Module.bsl @@ -45,7 +45,8 @@ // Процедура ПриОпределенииПсевдонимовОбработчиков(СоответствиеИменПсевдонимам) Экспорт - СоответствиеИменПсевдонимам.Вставить("ФайловыеФункцииСлужебный.ИзвлечьТекстИзФайловНаСервере"); + СоответствиеИменПсевдонимам.Вставить("ФайловыеФункцииСлужебный.ИзвлечьТекстИзФайлов"); + СоответствиеИменПсевдонимам.Вставить("ФайловыеФункцииСлужебный.ОчиститьНенужныеФайлы"); КонецПроцедуры @@ -149,11 +150,11 @@ Возврат; КонецЕсли; - ОбщегоНазначения.ПриНачалеВыполненияРегламентногоЗадания(); + ОбщегоНазначения.ПриНачалеВыполненияРегламентногоЗадания(Метаданные.РегламентныеЗадания.ПланированиеИзвлеченияТекстаВМоделиСервиса); УстановитьПривилегированныйРежим(Истина); - ИмяРазделенногоМетода = "ФайловыеФункцииСлужебный.ИзвлечьТекстИзФайловНаСервере"; + ИмяРазделенногоМетода = "ФайловыеФункцииСлужебный.ИзвлечьТекстИзФайлов"; ТекстЗапроса = "ВЫБРАТЬ РАЗЛИЧНЫЕ diff --git a/SSL/src/CommonModules/ФайловыеФункцииСлужебныйВызовСервера/Module.bsl b/SSL/src/CommonModules/ФайловыеФункцииСлужебныйВызовСервера/Module.bsl index d982f0209..7aaa0a99d 100644 --- a/SSL/src/CommonModules/ФайловыеФункцииСлужебныйВызовСервера/Module.bsl +++ b/SSL/src/CommonModules/ФайловыеФункцииСлужебныйВызовСервера/Module.bsl @@ -31,7 +31,7 @@ ОписаниеОшибки = ""; ПодписьПроверена = МодульЭлектроннаяПодпись.ПроверитьПодпись(МенеджерКриптографии, - ИсходныеДанные, СтрокаПодписи.АдресПодписи, ОписаниеОшибки); + ИсходныеДанные, СтрокаПодписи.АдресПодписи, ОписаниеОшибки, СтрокаПодписи.ДатаПодписи); Если ПодписьПроверена Тогда СтрокаПодписи.Статус = НСтр("ru = 'Верна'"); @@ -44,4 +44,156 @@ КонецПроцедуры +// Возвращает номер по нарастанию. Предыдущее значение берется из регистра сведений НомераОтсканированныхФайлов. +// Параметры: +// Владелец - ЛюбаяСсылка - владелец файла. +// +// Возвращаемое значение: +// Число - новый номер для сканирования. +// +Функция ПолучитьНовыйНомерДляСканирования(Владелец) Экспорт + + // Подготовить структуру отбора по измерениям. + СтруктураОтбора = Новый Структура; + СтруктураОтбора.Вставить("Владелец", Владелец); + + НачатьТранзакцию(); + Попытка + Блокировка = Новый БлокировкаДанных; + ЭлементБлокировки = Блокировка.Добавить("РегистрСведений.НомераОтсканированныхФайлов"); + ЭлементБлокировки.Режим = РежимБлокировкиДанных.Исключительный; + ЭлементБлокировки.УстановитьЗначение("Владелец", Владелец); + Блокировка.Заблокировать(); + + // Получить структуру с данными ресурсов записи. + СтруктураРесурсов = РегистрыСведений.НомераОтсканированныхФайлов.Получить(СтруктураОтбора); + + // Получить максимальный номер из регистра. + Номер = СтруктураРесурсов.Номер; + Номер = Номер + 1; // увеличим на 1 + + // Запишем новый номер в регистр. + НаборЗаписей = РегистрыСведений.НомераОтсканированныхФайлов.СоздатьНаборЗаписей(); + + НаборЗаписей.Отбор.Владелец.Установить(Владелец); + + НоваяЗапись = НаборЗаписей.Добавить(); + НоваяЗапись.Владелец = Владелец; + НоваяЗапись.Номер = Номер; + + НаборЗаписей.Записать(); + + ЗафиксироватьТранзакцию(); + Исключение + ОтменитьТранзакцию(); + ВызватьИсключение; + КонецПопытки; + + Возврат Номер; + +КонецФункции + +// Заносит номер в регистр сведений НомераОтсканированныхФайлов. +// +// Параметры: +// Владелец - ЛюбаяСсылка - владелец файла. +// НовыйНомер - Число - максимальный номер для сканирования. +// +Процедура ЗанестиМаксимальныйНомерДляСканирования(Владелец, НовыйНомер) Экспорт + + // Подготовить структуру отбора по измерениям. + СтруктураОтбора = Новый Структура; + СтруктураОтбора.Вставить("Владелец", Владелец); + + НачатьТранзакцию(); + Попытка + Блокировка = Новый БлокировкаДанных; + ЭлементБлокировки = Блокировка.Добавить("РегистрСведений.НомераОтсканированныхФайлов"); + ЭлементБлокировки.Режим = РежимБлокировкиДанных.Исключительный; + ЭлементБлокировки.УстановитьЗначение("Владелец", Владелец); + Блокировка.Заблокировать(); + + // Получить структуру с данными ресурсов записи. + СтруктураРесурсов = РегистрыСведений.НомераОтсканированныхФайлов.Получить(СтруктураОтбора); + + // Получить максимальный номер из регистра. + Номер = СтруктураРесурсов.Номер; + Если НовыйНомер <= Номер Тогда // Кто-то другой уже записал бОльший номер. + ОтменитьТранзакцию(); + Возврат; + КонецЕсли; + + Номер = НовыйНомер; + + // Запишем новый номер в регистр. + НаборЗаписей = РегистрыСведений.НомераОтсканированныхФайлов.СоздатьНаборЗаписей(); + + НаборЗаписей.Отбор.Владелец.Установить(Владелец); + + НоваяЗапись = НаборЗаписей.Добавить(); + НоваяЗапись.Владелец = Владелец; + НоваяЗапись.Номер = Номер; + + НаборЗаписей.Записать(); + + ЗафиксироватьТранзакцию(); + Исключение + ОтменитьТранзакцию(); + ВызватьИсключение; + КонецПопытки; + +КонецПроцедуры + +Функция ДанныеФайлаИДвоичныеДанные(ФайлВложение, Параметры) Экспорт + + Если Параметры.ЭтоФайл И ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаСФайлами") Тогда + + МодульРаботаСФайламиСлужебныйВызовСервера = ОбщегоНазначения.ОбщийМодуль("РаботаСФайламиСлужебныйВызовСервера"); + ДанныеФайлаИДвоичныеДанные = МодульРаботаСФайламиСлужебныйВызовСервера.ДанныеФайлаИДвоичныеДанные(ФайлВложение); + ДанныеФайла = ДанныеФайлаИДвоичныеДанные.ДанныеФайла; + ДвоичныеДанные = ДанныеФайлаИДвоичныеДанные.ДвоичныеДанные; + ИмяФайла = ОбщегоНазначенияКлиентСервер.ПолучитьИмяСРасширением(ДанныеФайла.ПолноеНаименованиеВерсии, ДанныеФайла.Расширение); + ПутьВоВременномХранилище = ПоместитьВоВременноеХранилище(ДвоичныеДанные, Параметры.ИдентификаторФормы); + ОписаниеФайла = Новый Структура; + ОписаниеФайла.Вставить("Представление", ИмяФайла); + ОписаниеФайла.Вставить("АдресВоВременномХранилище", ПутьВоВременномХранилище); + + Возврат ОписаниеФайла; + + КонецЕсли; + + Если Не Параметры.ЭтоФайл И ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ПрисоединенныеФайлы") Тогда + + МодульПрисоединенныеФайлыСлужебныйВызовСервера = ОбщегоНазначения.ОбщийМодуль("ПрисоединенныеФайлыСлужебныйВызовСервера"); + ДанныеФайлаИДвоичныеДанные = МодульПрисоединенныеФайлыСлужебныйВызовСервера.ПолучитьДанныеФайла(ФайлВложение, Параметры.ИдентификаторФормы); + ИмяФайла = ОбщегоНазначенияКлиентСервер.ПолучитьИмяСРасширением(ДанныеФайлаИДвоичныеДанные.Наименование, ДанныеФайлаИДвоичныеДанные.Расширение); + ОписаниеФайла = Новый Структура; + ОписаниеФайла.Вставить("Представление", ИмяФайла); + ОписаниеФайла.Вставить("АдресВоВременномХранилище", ДанныеФайлаИДвоичныеДанные.СсылкаНаДвоичныеДанныеФайла); + + Возврат ОписаниеФайла; + + КонецЕсли; + +КонецФункции + +Функция ПоместитьФайлыВоВременноеХранилище(Параметры) Экспорт + + Перем ЗаписьZipФайла, ИмяАрхива; + + Результат = Новый Массив; + + ИмяВременнойПапки = ПолучитьИмяВременногоФайла(); + СоздатьКаталог(ИмяВременнойПапки); + ИспользованныеИменаФайлов = Новый Соответствие; + + Для Каждого ФайлВложение Из Параметры.МассивФайлов Цикл + ОписаниеФайла = ДанныеФайлаИДвоичныеДанные(ФайлВложение, Параметры); + Результат.Добавить(ОписаниеФайла); + КонецЦикла; + + Возврат Результат; + +КонецФункции + #КонецОбласти diff --git a/SSL/src/CommonModules/ФайловыеФункцииСлужебныйКлиент/Module.bsl b/SSL/src/CommonModules/ФайловыеФункцииСлужебныйКлиент/Module.bsl index 102dfbfcf..94e241b72 100644 --- a/SSL/src/CommonModules/ФайловыеФункцииСлужебныйКлиент/Module.bsl +++ b/SSL/src/CommonModules/ФайловыеФункцииСлужебныйКлиент/Module.bsl @@ -21,7 +21,7 @@ Возврат; КонецЕсли; КонецЕсли; - ВернутьРезультат(ОбработчикРезультата, Неопределено); + ВернутьРезультат(ОбработчикРезультата, Истина); КонецПроцедуры // Показывает стандартное предупреждение. @@ -164,7 +164,7 @@ // Добавление конечного слэша. Результат = СокрЛП(Результат); - Если Прав(Результат,1) <> "\" Тогда + Если Не СтрЗаканчиваетсяНа(Результат, "\") Тогда Результат = Результат + "\"; КонецЕсли; @@ -222,7 +222,7 @@ Если ВыбранныйФайл.ЭтоКаталог() Тогда НовыйПуть = Строка(Путь); - НовыйПуть = НовыйПуть + ОбщегоНазначенияКлиентСервер.РазделительПути(); + НовыйПуть = НовыйПуть + ПолучитьРазделительПути(); НовыйПуть = НовыйПуть + Строка(ВыбранныйФайл.Имя); МассивФайловВКаталоге = НайтиФайлы(НовыйПуть, "*.*"); @@ -302,7 +302,6 @@ КонецПроцедуры - // Открывает Проводник Windows и выделяет указанный файл. Функция ОткрытьПроводникСФайлом(Знач ПолноеИмяФайла) Экспорт @@ -470,6 +469,47 @@ КонецЕсли; КонецПроцедуры +Процедура ОтправитьФайлыПоПочте(МассивФайлов, ИдентификаторФормы, ПараметрыОтправки, ЭтоФайл = Ложь) Экспорт + + Если МассивФайлов.Количество() = 0 Тогда + Возврат; + КонецЕсли; + + Параметры = Новый Структура; + Параметры.Вставить("МассивФайлов", МассивФайлов); + Параметры.Вставить("ИдентификаторФормы", ИдентификаторФормы); + Параметры.Вставить("ЭтоФайл", ЭтоФайл); + Параметры.Вставить("ПараметрыОтправки", ПараметрыОтправки); + + ОписаниеОповещения = Новый ОписаниеОповещения("ОтправитьФайлыПоПочтеНастройкаУчетнойЗаписиПредложена", ЭтотОбъект, Параметры); + Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаСПочтовымиСообщениями") Тогда + МодульРаботаСПочтовымиСообщениямиКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("РаботаСПочтовымиСообщениямиКлиент"); + МодульРаботаСПочтовымиСообщениямиКлиент.ПроверитьНаличиеУчетнойЗаписиДляОтправкиПочты(ОписаниеОповещения); + КонецЕсли; + +КонецПроцедуры + +Процедура ОтправитьФайлыПоПочтеНастройкаУчетнойЗаписиПредложена(УчетнаяЗаписьНастроена, ДополнительныеПараметры) Экспорт + + Если УчетнаяЗаписьНастроена <> Истина Тогда + Возврат; + КонецЕсли; + + СписокВложений = ФайловыеФункцииСлужебныйВызовСервера.ПоместитьФайлыВоВременноеХранилище(ДополнительныеПараметры); + ПараметрыОтправки = ДополнительныеПараметры.ПараметрыОтправки; + + ПараметрыНовогоПисьма = Новый Структура; + ПараметрыНовогоПисьма.Вставить("Получатель", ПараметрыОтправки.Получатель); + ПараметрыНовогоПисьма.Вставить("Тема", ПараметрыОтправки.Тема); + ПараметрыНовогоПисьма.Вставить("Текст", ПараметрыОтправки.Текст); + ПараметрыНовогоПисьма.Вставить("Вложения", СписокВложений); + ПараметрыНовогоПисьма.Вставить("УдалятьФайлыПослеОтправки", Истина); + + МодульРаботаСПочтовымиСообщениямиКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("РаботаСПочтовымиСообщениямиКлиент"); + МодульРаботаСПочтовымиСообщениямиКлиент.СоздатьНовоеПисьмо(ПараметрыНовогоПисьма); + +КонецПроцедуры + //////////////////////////////////////////////////////////////////////////////// // Процедуры и функции работы с криптографией. @@ -542,8 +582,8 @@ КонецЕсли; МодульЭлектроннаяПодписьКлиентСервер = ОбщегоНазначенияКлиент.ОбщийМодуль("ЭлектроннаяПодписьКлиентСервер"); - ПроверятьЭлектронныеПодписиНаСервере = МодульЭлектроннаяПодписьКлиентСервер.ОбщиеНастройки( - ).ПроверятьЭлектронныеПодписиНаСервере; + ПроверятьЭлектронныеПодписиНаСервере = + МодульЭлектроннаяПодписьКлиентСервер.ОбщиеНастройки().ПроверятьЭлектронныеПодписиНаСервере; Если ДополнительныеПараметры.ВыделенныеСтроки = Неопределено Тогда Коллекция = ДополнительныеПараметры.Форма.ЭлектронныеПодписи; @@ -579,6 +619,7 @@ ДанныеСтроки.Вставить("АдресПодписи", СтрокаПодписи.АдресПодписи); ДанныеСтроки.Вставить("Статус", СтрокаПодписи.Статус); ДанныеСтроки.Вставить("Неверна", СтрокаПодписи.Неверна); + ДанныеСтроки.Вставить("ДатаПодписи", СтрокаПодписи.ДатаПодписи); ДанныеСтрок.Добавить(ДанныеСтроки); КонецЦикла; @@ -629,7 +670,8 @@ Новый ОписаниеОповещения("ПроверитьПодписиПослеПроверкиСтроки", ЭтотОбъект, ДополнительныеПараметры), ДополнительныеПараметры.Данные, ДополнительныеПараметры.СтрокаПодписи.АдресПодписи, - ДополнительныеПараметры.МенеджерКриптографии); + ДополнительныеПараметры.МенеджерКриптографии, + ДополнительныеПараметры.СтрокаПодписи.ДатаПодписи); КонецПроцедуры @@ -674,6 +716,47 @@ КонецПроцедуры +// Проверяет установлена ли компонента сканирования и есть ли хоть один сканер. +Функция ДоступнаКомандаСканировать() Экспорт + + Если ОбщегоНазначенияКлиентСервер.ЭтоLinuxКлиент() Тогда + Возврат Ложь; + КонецЕсли; + + Если Не ПроинициализироватьКомпоненту() Тогда + Возврат Ложь; + КонецЕсли; + + Если ПараметрыПриложения["СтандартныеПодсистемы.КомпонентаTwain"].ЕстьУстройства() Тогда + Возврат Истина; + КонецЕсли; + + Возврат Ложь; + +КонецФункции + +// Открывает диалог сканирования и просмотра картинки. +Процедура ДобавитьСоСканера(ПараметрыВыполнения) Экспорт + + Если ОбщегоНазначенияКлиентСервер.ЭтоLinuxКлиент() Тогда + ВернутьРезультат(ПараметрыВыполнения.ОбработчикРезультата, Неопределено); + Возврат; + КонецЕсли; + + СистемнаяИнформация = Новый СистемнаяИнформация(); + ИдентификаторКлиента = СистемнаяИнформация.ИдентификаторКлиента; + + ПараметрыФормы = Новый Структура; + ПараметрыФормы.Вставить("ВладелецФайла", ПараметрыВыполнения.ВладелецФайла); + ПараметрыФормы.Вставить("ЭтоФайл", ПараметрыВыполнения.ЭтоФайл); + ПараметрыФормы.Вставить("ИдентификаторКлиента", ИдентификаторКлиента); + ПараметрыФормы.Вставить("НеОткрыватьКарточкуПослеСозданияИзФайла", ПараметрыВыполнения.НеОткрыватьКарточкуПослеСозданияИзФайла); + + ОбработчикРезультата = ПодготовитьОбработчикДляДиалога(ПараметрыВыполнения.ОбработчикРезультата); + ОткрытьФорму("Обработка.Сканирование.Форма.РезультатСканирования", ПараметрыФормы, ПараметрыВыполнения.ФормаВладелец, , , , ОбработчикРезультата); + +КонецПроцедуры + //////////////////////////////////////////////////////////////////////////////// // Общие процедуры и функции работы с файлами операционной системы. @@ -1078,7 +1161,6 @@ КонецПроцедуры - #Если НЕ ВебКлиент Тогда // Извлекает текст из файла на диске на клиенте и помещает результат на сервер. Процедура ИзвлечьТекстВерсии(ФайлИлиВерсияФайла, @@ -1156,6 +1238,184 @@ Возврат РезультатЗагрузки[0].Хранение; КонецФункции +// На основе переданного пути к файлу на диске создает Файл его и открывает карточку. +Процедура ДобавитьИзФайловойСистемыСРасширением(ПараметрыВыполнения) Экспорт + + Если ПараметрыВыполнения.ЭтоФайл И ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаСФайлами") Тогда + МодульРаботаСФайламиСлужебныйКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("РаботаСФайламиСлужебныйКлиент"); + МодульРаботаСФайламиСлужебныйКлиент.ДобавитьИзФайловойСистемыСРасширением(ПараметрыВыполнения); + ИначеЕсли Не ПараметрыВыполнения.ЭтоФайл И ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.ПрисоединенныеФайлы") Тогда + МодульПрисоединенныеФайлыСлужебныйКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("ПрисоединенныеФайлыСлужебныйКлиент"); + МодульПрисоединенныеФайлыСлужебныйКлиент.ДобавитьФайлыРасширениеПредложено(Истина, ПараметрыВыполнения); + КонецЕсли; + +КонецПроцедуры + +// На основе переданного пути к файлу на диске создает Файл и открывает карточку. +Функция ДобавитьИзФайловойСистемыСРасширениемСинхронно(ПараметрыВыполнения) Экспорт + + Если ПараметрыВыполнения.ЭтоФайл И ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаСФайлами") Тогда + МодульРаботаСФайламиСлужебныйКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("РаботаСФайламиСлужебныйКлиент"); + Возврат МодульРаботаСФайламиСлужебныйКлиент.ДобавитьИзФайловойСистемыСРасширениемСинхронно(ПараметрыВыполнения); + ИначеЕсли Не ПараметрыВыполнения.ЭтоФайл И ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.ПрисоединенныеФайлы") Тогда + МодульПрисоединенныеФайлыСлужебныйКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("ПрисоединенныеФайлыСлужебныйКлиент"); + МодульПрисоединенныеФайлыСлужебныйКлиент.ДобавитьФайлыРасширениеПредложено(Истина, ПараметрыВыполнения); + + Результат = Новый Структура; + Результат.Вставить("ФайлДобавлен", Истина); + Результат.Вставить("ФайлСсылка", Неопределено); + Результат.Вставить("ТекстОшибки", ""); + + Возврат Результат; + КонецЕсли; + +КонецФункции + +//////////////////////////////////////////////////////////////////////////////// +// Процедуры и функция для работы со сканером. + +// Инициализация компоненты сканирования. +Функция ПроинициализироватьКомпоненту() Экспорт + + Если ОбщегоНазначенияКлиентСервер.ЭтоLinuxКлиент() Тогда + Возврат Ложь; + КонецЕсли; + + ИмяПараметра = "СтандартныеПодсистемы.КомпонентаTwain"; + Если ПараметрыПриложения[ИмяПараметра] = Неопределено Тогда + КодВозврата = ПодключитьВнешнююКомпоненту("ОбщийМакет.КомпонентаTWAIN", "twain", ТипВнешнейКомпоненты.Native); + Если Не КодВозврата Тогда + Возврат Ложь; + КонецЕсли; + + ПараметрыПриложения.Вставить(ИмяПараметра, Новый("AddIn.twain.AddInNativeExtension")); + КонецЕсли; + + Возврат Истина; + +КонецФункции + +// Установка компоненты сканирования. +// +// Параметры: +// ОбработчикРезультата - ОписаниеОповещения, Неопределено - Описание процедуры, принимающей результат работы метода. +// +// Возвращаемое значение: +// Булево - Успешно ли выполнена операция. +// +// См. также: +// Переменную глобального контекста КомпонентаTwain. +// +Процедура УстановитьКомпоненту(ОбработчикРезультата) Экспорт + + Если ОбщегоНазначенияКлиентСервер.ЭтоLinuxКлиент() Тогда + ВернутьРезультат(ОбработчикРезультата, Ложь); + Возврат; + КонецЕсли; + + Если ПроинициализироватьКомпоненту() Тогда + Состояние(НСтр("ru = 'Компонента сканирования уже установлена.'")); + ВернутьРезультат(ОбработчикРезультата, Истина); + Возврат; + КонецЕсли; + + ПараметрыВыполнения = Новый Структура; + ПараметрыВыполнения.Вставить("ОбработчикРезультата", ОбработчикРезультата); + Обработчик = Новый ОписаниеОповещения("УстановитьКомпонентуЗавершение", ЭтотОбъект, ПараметрыВыполнения); + НачатьУстановкуВнешнейКомпоненты(Обработчик, "ОбщийМакет.КомпонентаTWAIN"); + +КонецПроцедуры + +// Продолжение процедуры (см. выше). +Процедура УстановитьКомпонентуЗавершение(ПараметрыВыполнения) Экспорт + + КомпонентаПодключена = ПроинициализироватьКомпоненту(); + ВернутьРезультат(ПараметрыВыполнения.ОбработчикРезультата, КомпонентаПодключена); + +КонецПроцедуры + +// Возвращает версию компоненты сканирования. +Функция ВерсияКомпонентыСканирования() Экспорт + + Если Не ПроинициализироватьКомпоненту() Тогда + Возврат НСтр("ru= 'Компонента сканирования не установлена'"); + КонецЕсли; + + Возврат ПараметрыПриложения["СтандартныеПодсистемы.КомпонентаTwain"].Версия(); + +КонецФункции + +// Возвращает устройства TWAIN (массив строк). +Функция ПолучитьУстройства() Экспорт + + Массив = Новый Массив; + + Если Не ПроинициализироватьКомпоненту() Тогда + Возврат Массив; + КонецЕсли; + + СтрокаУстройств = ПараметрыПриложения["СтандартныеПодсистемы.КомпонентаTwain"].ПолучитьУстройства(); + + Для Индекс = 1 По СтрЧислоСтрок(СтрокаУстройств) Цикл + Строка = СтрПолучитьСтроку(СтрокаУстройств, Индекс); + Массив.Добавить(Строка); + КонецЦикла; + + Возврат Массив; + +КонецФункции + +// Возвращает настройку сканера по имени. +// +// Параметры: +// ИмяУстройства - Строка - Имя сканера. +// ИмяНастройки - Строка - Имя настройки, +// например "XRESOLUTION", или "PIXELTYPE", или "ROTATION", или "SUPPORTEDSIZES". +// +// Возвращаемое значение: +// Число - Значение настройки сканера. +// +Функция ПолучитьНастройку(ИмяУстройства, ИмяНастройки) Экспорт + + Если ОбщегоНазначенияКлиентСервер.ЭтоLinuxКлиент() Тогда + Возврат -1; + КонецЕсли; + + Попытка + Возврат ПараметрыПриложения["СтандартныеПодсистемы.КомпонентаTwain"].ПолучитьНастройку(ИмяУстройства, ИмяНастройки); + Исключение + Возврат -1; + КонецПопытки; + +КонецФункции + +// Подготовка обработчика асинхронного диалога. +Функция ПодготовитьОбработчикДляДиалога(ОбработчикИлиСтруктура) Экспорт + + Если ТипЗнч(ОбработчикИлиСтруктура) = Тип("Структура") Тогда + // Рекурсивная регистрация всех обработчиков вызывающего кода. + Если ОбработчикИлиСтруктура.Свойство("ОбработчикРезультата") Тогда + ОбработчикИлиСтруктура.ОбработчикРезультата = ПодготовитьОбработчикДляДиалога(ОбработчикИлиСтруктура.ОбработчикРезультата); + КонецЕсли; + Если ОбработчикИлиСтруктура.Свойство("АсинхронныйДиалог") Тогда + // Регистрация открытого диалога. + ОбработчикИлиСтруктура.АсинхронныйДиалог.Открыт = Истина; + // Формирование обработчика (при этом фиксируется вся структура параметров). + Обработчик = Новый ОписаниеОповещения( + ОбработчикИлиСтруктура.АсинхронныйДиалог.ИмяПроцедуры, + ОбработчикИлиСтруктура.АсинхронныйДиалог.Модуль, + ОбработчикИлиСтруктура); + Иначе + Обработчик = Неопределено; + КонецЕсли; + Иначе + Обработчик = ОбработчикИлиСтруктура; + КонецЕсли; + + Возврат Обработчик; + +КонецФункции + //////////////////////////////////////////////////////////////////////////////// // Вспомогательные процедуры для поддержки асинхронной модели. // @@ -1202,11 +1462,10 @@ #Если ВебКлиент Тогда // В Chrome расширение не подключается. СистемнаяИнформация = Новый СистемнаяИнформация; - ИнформацияПрограммыМассив = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок( - СистемнаяИнформация.ИнформацияПрограммыПросмотра, " "); + ИнформацияПрограммыМассив = СтрРазделить(СистемнаяИнформация.ИнформацияПрограммыПросмотра, " ", Ложь); Для Каждого ИнформацияПрограммы Из ИнформацияПрограммыМассив Цикл - Если Найти(ИнформацияПрограммы, "Chrome") > 0 Тогда + Если СтрНайти(ИнформацияПрограммы, "Chrome") > 0 Тогда Возврат Ложь; КонецЕсли; КонецЦикла; diff --git a/SSL/src/CommonModules/ФайловыеФункцииСлужебныйКлиентПовтИсп/Module.bsl b/SSL/src/CommonModules/ФайловыеФункцииСлужебныйКлиентПовтИсп/Module.bsl index be5c59460..3be55f442 100644 --- a/SSL/src/CommonModules/ФайловыеФункцииСлужебныйКлиентПовтИсп/Module.bsl +++ b/SSL/src/CommonModules/ФайловыеФункцииСлужебныйКлиентПовтИсп/Module.bsl @@ -18,8 +18,8 @@ // Возвращает структуру, содержащую различные персональные настройки. Функция ПерсональныеНастройкиРаботыСФайлами() Экспорт - ПерсональныеНастройки = СтандартныеПодсистемыКлиентПовтИсп.ПараметрыРаботыКлиента( - ).ПерсональныеНастройкиРаботыСФайлами; + ПерсональныеНастройки = + СтандартныеПодсистемыКлиентПовтИсп.ПараметрыРаботыКлиента().ПерсональныеНастройкиРаботыСФайлами; // Проверка и обновление настроек сохраненных на сервере, // которые вычисляются на клиенте. @@ -31,8 +31,7 @@ // Возвращает структуру, содержащую различные персональные настройки. Функция ОбщиеНастройкиРаботыСФайлами() Экспорт - ОбщиеНастройки = СтандартныеПодсистемыКлиентПовтИсп.ПараметрыРаботыКлиента( - ).ОбщиеНастройкиРаботыСФайлами; + ОбщиеНастройки = СтандартныеПодсистемыКлиентПовтИсп.ПараметрыРаботыКлиента().ОбщиеНастройкиРаботыСФайлами; // Проверка и обновление настроек сохраненных на сервере, // которые вычисляются на клиенте. @@ -49,8 +48,8 @@ ПараметрыПриложения.Вставить(ИмяПараметра, Ложь); КонецЕсли; - ИмяКаталога = СтандартныеПодсистемыКлиентПовтИсп.ПараметрыРаботыКлиента( - ).ПерсональныеНастройкиРаботыСФайлами.ПутьКЛокальномуКэшуФайлов; + ИмяКаталога = + СтандартныеПодсистемыКлиентПовтИсп.ПараметрыРаботыКлиента().ПерсональныеНастройкиРаботыСФайлами.ПутьКЛокальномуКэшуФайлов; // Уже установлен. Если ИмяКаталога <> Неопределено @@ -101,8 +100,8 @@ ПараметрыПриложения.Вставить(ИмяПараметра, Ложь); КонецЕсли; - ИмяКаталога = СтандартныеПодсистемыКлиентПовтИсп.ПараметрыРаботыКлиента( - ).ПерсональныеНастройкиРаботыСФайлами.ПутьКЛокальномуКэшуФайлов; + ИмяКаталога = + СтандартныеПодсистемыКлиентПовтИсп.ПараметрыРаботыКлиента().ПерсональныеНастройкиРаботыСФайлами.ПутьКЛокальномуКэшуФайлов; // Уже установлен. Если ИмяКаталога <> Неопределено diff --git a/SSL/src/CommonModules/ФайловыеФункцииСлужебныйКлиентСервер/Module.bsl b/SSL/src/CommonModules/ФайловыеФункцииСлужебныйКлиентСервер/Module.bsl index b70367f13..38cb563ab 100644 --- a/SSL/src/CommonModules/ФайловыеФункцииСлужебныйКлиентСервер/Module.bsl +++ b/SSL/src/CommonModules/ФайловыеФункцииСлужебныйКлиентСервер/Module.bsl @@ -221,8 +221,8 @@ РасширениеФайлаБезТочки = ОбщегоНазначенияКлиентСервер.РасширениеБезТочки(РасширениеФайла); - МассивРасширений = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок( - НРег(СписокРасширений), " "); + МассивРасширений = СтрРазделить( + НРег(СписокРасширений), " ", Ложь); Если МассивРасширений.Найти(РасширениеФайлаБезТочки) <> Неопределено Тогда Возврат Истина; @@ -285,8 +285,8 @@ КонецЕсли; // Временные файлы Word не импортируются. - Если Лев(Файл.Имя, 1) = "~" - И Файл.ПолучитьНевидимость() = Истина Тогда + Если СтрНачинаетсяС(Файл.Имя, "~") + И Файл.ПолучитьНевидимость() Тогда Возврат Ложь; КонецЕсли; @@ -400,25 +400,27 @@ КонецФункции // Возвращает стандартный текст ошибки. -Функция ОшибкаФайлНеНайденВХранилищеФайлов(ИмяФайла, ПоискВТоме = Истина) Экспорт +Функция ОшибкаФайлНеНайденВХранилищеФайлов(ИмяФайла, ПоискВТоме = Истина, ВладелецФайла = "") Экспорт Если ПоискВТоме Тогда ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Ошибка открытия файла: |""%1"". - | + |%2 |Файл не найден в хранилище файлов. |Возможно файл удален антивирусной программой. |Обратитесь к администратору.'"), - ИмяФайла); + ИмяФайла, + ВладелецФайла); Иначе ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Ошибка открытия файла: |""%1"". - | + |%2 |Файл не найден в хранилище файлов. |Обратитесь к администратору.'"), - ИмяФайла); + ИмяФайла, + ВладелецФайла); КонецЕсли; Возврат ТекстОшибки; @@ -450,112 +452,112 @@ Расширение = "." + НРег(РасширениеФайла) + ";"; - Если Найти(".dt;.1cd;.cf;.cfu;", Расширение) <> 0 Тогда + Если СтрНайти(".dt;.1cd;.cf;.cfu;", Расширение) <> 0 Тогда Возврат 6; // Файлы 1С. ИначеЕсли Расширение = ".mxl;" Тогда Возврат 8; // Табличный Файл. - ИначеЕсли Найти(".txt;.log;.ini;", Расширение) <> 0 Тогда + ИначеЕсли СтрНайти(".txt;.log;.ini;", Расширение) <> 0 Тогда Возврат 10; // Текстовый Файл. ИначеЕсли Расширение = ".epf;" Тогда Возврат 12; // Внешние обработки. - ИначеЕсли Найти(".ico;.wmf;.emf;",Расширение) <> 0 Тогда + ИначеЕсли СтрНайти(".ico;.wmf;.emf;",Расширение) <> 0 Тогда Возврат 14; // Картинки. - ИначеЕсли Найти(".htm;.html;.url;.mht;.mhtml;",Расширение) <> 0 Тогда + ИначеЕсли СтрНайти(".htm;.html;.url;.mht;.mhtml;",Расширение) <> 0 Тогда Возврат 16; // HTML. - ИначеЕсли Найти(".doc;.dot;.rtf;",Расширение) <> 0 Тогда + ИначеЕсли СтрНайти(".doc;.dot;.rtf;",Расширение) <> 0 Тогда Возврат 18; // Файл Microsoft Word. - ИначеЕсли Найти(".xls;.xlw;",Расширение) <> 0 Тогда + ИначеЕсли СтрНайти(".xls;.xlw;",Расширение) <> 0 Тогда Возврат 20; // Файл Microsoft Excel. - ИначеЕсли Найти(".ppt;.pps;",Расширение) <> 0 Тогда + ИначеЕсли СтрНайти(".ppt;.pps;",Расширение) <> 0 Тогда Возврат 22; // Файл Microsoft PowerPoint. - ИначеЕсли Найти(".vsd;",Расширение) <> 0 Тогда + ИначеЕсли СтрНайти(".vsd;",Расширение) <> 0 Тогда Возврат 24; // Файл Microsoft Visio. - ИначеЕсли Найти(".mpp;",Расширение) <> 0 Тогда + ИначеЕсли СтрНайти(".mpp;",Расширение) <> 0 Тогда Возврат 26; // Файл Microsoft Visio. - ИначеЕсли Найти(".mdb;.adp;.mda;.mde;.ade;",Расширение) <> 0 Тогда + ИначеЕсли СтрНайти(".mdb;.adp;.mda;.mde;.ade;",Расширение) <> 0 Тогда Возврат 28; // База данных Microsoft Access. - ИначеЕсли Найти(".xml;",Расширение) <> 0 Тогда + ИначеЕсли СтрНайти(".xml;",Расширение) <> 0 Тогда Возврат 30; // xml. - ИначеЕсли Найти(".msg;",Расширение) <> 0 Тогда + ИначеЕсли СтрНайти(".msg;",Расширение) <> 0 Тогда Возврат 32; // Письмо электронной почты. - ИначеЕсли Найти(".zip;.rar;.arj;.cab;.lzh;.ace;",Расширение) <> 0 Тогда + ИначеЕсли СтрНайти(".zip;.rar;.arj;.cab;.lzh;.ace;",Расширение) <> 0 Тогда Возврат 34; // Архивы. - ИначеЕсли Найти(".exe;.com;.bat;.cmd;",Расширение) <> 0 Тогда + ИначеЕсли СтрНайти(".exe;.com;.bat;.cmd;",Расширение) <> 0 Тогда Возврат 36; // Исполняемые файлы. - ИначеЕсли Найти(".grs;",Расширение) <> 0 Тогда + ИначеЕсли СтрНайти(".grs;",Расширение) <> 0 Тогда Возврат 38; // Графическая схема. - ИначеЕсли Найти(".geo;",Расширение) <> 0 Тогда + ИначеЕсли СтрНайти(".geo;",Расширение) <> 0 Тогда Возврат 40; // Географическая схема. - ИначеЕсли Найти(".jpg;.jpeg;.jp2;.jpe;",Расширение) <> 0 Тогда + ИначеЕсли СтрНайти(".jpg;.jpeg;.jp2;.jpe;",Расширение) <> 0 Тогда Возврат 42; // jpg. - ИначеЕсли Найти(".bmp;.dib;",Расширение) <> 0 Тогда + ИначеЕсли СтрНайти(".bmp;.dib;",Расширение) <> 0 Тогда Возврат 44; // bmp. - ИначеЕсли Найти(".tif;.tiff;",Расширение) <> 0 Тогда + ИначеЕсли СтрНайти(".tif;.tiff;",Расширение) <> 0 Тогда Возврат 46; // tif. - ИначеЕсли Найти(".gif;",Расширение) <> 0 Тогда + ИначеЕсли СтрНайти(".gif;",Расширение) <> 0 Тогда Возврат 48; // gif. - ИначеЕсли Найти(".png;",Расширение) <> 0 Тогда + ИначеЕсли СтрНайти(".png;",Расширение) <> 0 Тогда Возврат 50; // png. - ИначеЕсли Найти(".pdf;",Расширение) <> 0 Тогда + ИначеЕсли СтрНайти(".pdf;",Расширение) <> 0 Тогда Возврат 52; // pdf. - ИначеЕсли Найти(".odt;",Расширение) <> 0 Тогда + ИначеЕсли СтрНайти(".odt;",Расширение) <> 0 Тогда Возврат 54; // Open Office writer. - ИначеЕсли Найти(".odf;",Расширение) <> 0 Тогда + ИначеЕсли СтрНайти(".odf;",Расширение) <> 0 Тогда Возврат 56; // Open Office math. - ИначеЕсли Найти(".odp;",Расширение) <> 0 Тогда + ИначеЕсли СтрНайти(".odp;",Расширение) <> 0 Тогда Возврат 58; // Open Office Impress. - ИначеЕсли Найти(".odg;",Расширение) <> 0 Тогда + ИначеЕсли СтрНайти(".odg;",Расширение) <> 0 Тогда Возврат 60; // Open Office draw. - ИначеЕсли Найти(".ods;",Расширение) <> 0 Тогда + ИначеЕсли СтрНайти(".ods;",Расширение) <> 0 Тогда Возврат 62; // Open Office calc. - ИначеЕсли Найти(".mp3;",Расширение) <> 0 Тогда + ИначеЕсли СтрНайти(".mp3;",Расширение) <> 0 Тогда Возврат 64; - ИначеЕсли Найти(".erf;",Расширение) <> 0 Тогда + ИначеЕсли СтрНайти(".erf;",Расширение) <> 0 Тогда Возврат 66; // Внешние отчеты. - ИначеЕсли Найти(".docx;",Расширение) <> 0 Тогда + ИначеЕсли СтрНайти(".docx;",Расширение) <> 0 Тогда Возврат 68; // Файл Microsoft Word docx. - ИначеЕсли Найти(".xlsx;",Расширение) <> 0 Тогда + ИначеЕсли СтрНайти(".xlsx;",Расширение) <> 0 Тогда Возврат 70; // Файл Microsoft Excel xlsx. - ИначеЕсли Найти(".pptx;",Расширение) <> 0 Тогда + ИначеЕсли СтрНайти(".pptx;",Расширение) <> 0 Тогда Возврат 72; // Файл Microsoft PowerPoint pptx. - ИначеЕсли Найти(".p7s;",Расширение) <> 0 Тогда + ИначеЕсли СтрНайти(".p7s;",Расширение) <> 0 Тогда Возврат 74; // Файл подписи. - ИначеЕсли Найти(".p7m;",Расширение) <> 0 Тогда + ИначеЕсли СтрНайти(".p7m;",Расширение) <> 0 Тогда Возврат 76; // зашифрованное сообщение. Иначе Возврат 4; @@ -739,7 +741,7 @@ Если ЧтениеXML.ТипУзла = ТипУзлаXML.Текст Тогда - Если Найти(ПоследнееИмяТега, "text:") <> 0 Тогда + Если СтрНайти(ПоследнееИмяТега, "text:") <> 0 Тогда ИзвлеченныйТекст = ИзвлеченныйТекст + ЧтениеXML.Значение; КонецЕсли; @@ -754,3 +756,34 @@ КонецФункции #КонецОбласти + +#Область СлужебныеПроцедурыИФункции +// Получить имя сканированного файла, вида ДМ-00000012, где ДМ - префикс базы. +// +// Параметры: +// НомерФайла - Число - целое число, например, 12. +// ПрефиксБазы - Строка - префикс базы, например, "ДМ". +// +// Возвращаемое значение: +// Строка - имя сканированного файла, например, "ДМ-00000012". +// +Функция ИмяСканированногоФайла(НомерФайла, ПрефиксБазы) Экспорт + + ИмяФайла = ""; + Если НЕ ПустаяСтрока(ПрефиксБазы) Тогда + ИмяФайла = ПрефиксБазы + "-"; + КонецЕсли; + + ИмяФайла = ИмяФайла + Формат(НомерФайла, "ЧЦ=9; ЧВН=; ЧГ=0"); + Возврат ИмяФайла; + +КонецФункции + +Процедура УстановитьВидимостьПредпросмотра(Элементы, ИспользоватьПредпросмотр) Экспорт + + Элементы.АдресДанныхФайла.Видимость = ИспользоватьПредпросмотр; + Элементы.Предпросмотр.Пометка = ИспользоватьПредпросмотр; + +КонецПроцедуры + +#КонецОбласти \ No newline at end of file diff --git a/SSL/src/CommonModules/ФизическиеЛицаКлиентСервер/Module.bsl b/SSL/src/CommonModules/ФизическиеЛицаКлиентСервер/Module.bsl index 3385f0797..58f8ed614 100644 --- a/SSL/src/CommonModules/ФизическиеЛицаКлиентСервер/Module.bsl +++ b/SSL/src/CommonModules/ФизическиеЛицаКлиентСервер/Module.bsl @@ -5,6 +5,114 @@ #Область ПрограммныйИнтерфейс +// Раскладывает полное имя в структуру. +// +// Параметры: +// ФамилияИмяОтчество - Строка - полное имя. +// +// Возвращаемое значение: +// Структура - коллекция со свойствами: +// * Фамилия - Строка; +// * Имя - Строка; +// * Отчество - Строка. +// +Функция ЧастиИмени(ФамилияИмяОтчество) Экспорт + + Результат = Новый Структура("Фамилия,Имя,Отчество"); + + ЧастиИмени = СтрРазделить(ФамилияИмяОтчество, " ", Ложь); + + Если ЧастиИмени.Количество() >= 1 Тогда + Результат.Фамилия = ЧастиИмени[0]; + КонецЕсли; + + Если ЧастиИмени.Количество() >= 2 Тогда + Результат.Имя = ЧастиИмени[1]; + КонецЕсли; + + Если ЧастиИмени.Количество() >= 3 Тогда + Результат.Отчество = ЧастиИмени[2]; + КонецЕсли; + + Если ЧастиИмени.Количество() > 3 Тогда + ДополнительныеЧастиОтчества = Новый Массив; + ДополнительныеЧастиОтчества.Добавить(НСтр("ru = 'оглы'")); + ДополнительныеЧастиОтчества.Добавить(НСтр("ru = 'улы'")); + ДополнительныеЧастиОтчества.Добавить(НСтр("ru = 'уулу'")); + ДополнительныеЧастиОтчества.Добавить(НСтр("ru = 'кызы'")); + ДополнительныеЧастиОтчества.Добавить(НСтр("ru = 'гызы'")); + + Если ДополнительныеЧастиОтчества.Найти(НРег(ЧастиИмени[3])) <> Неопределено Тогда + Результат.Отчество = Результат.Отчество + " " + ЧастиИмени[3]; + КонецЕсли; + КонецЕсли; + + Возврат Результат; + +КонецФункции + +// Формирует краткое представление из полного имени. +// +// Параметры: +// ФамилияИмяОтчество - Строка - полное имя; +// - Структура - коллекция со свойствами: +// * Фамилия - Строка; +// * Имя - Строка; +// * Отчество - Строка. +// +// Возвращаемое значение: +// Строка - фамилия и инициалы. +// +// Пример: +// Результат = ФамилияИнициалыФизЛица("Пупкин Василий Иванович"); // Результат = "Пупкин В. И." +// +Функция ФамилияИнициалы(Знач ФамилияИмяОтчество) Экспорт + + Если ТипЗнч(ФамилияИмяОтчество) = Тип("Строка") Тогда + ФамилияИмяОтчество = ЧастиИмени(ФамилияИмяОтчество); + КонецЕсли; + + Фамилия = ФамилияИмяОтчество.Фамилия; + Имя = ФамилияИмяОтчество.Имя; + Отчество = ФамилияИмяОтчество.Отчество; + + Если ПустаяСтрока(Имя) Тогда + Возврат Фамилия; + КонецЕсли; + + Если ПустаяСтрока(Отчество) Тогда + Возврат СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку("%1 %2.", Фамилия, Лев(Имя, 1)); + КонецЕсли; + + Возврат СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку("%1 %2.%3.", Фамилия, Лев(Имя, 1), Лев(Отчество, 1)); + +КонецФункции + +// Проверяет верно ли написано ФИО. +// ФИО может быть написано либо только на кириллице, либо только на латинице. +// Также можно указать, что ФИО может быть верным только в кириллице. +// +// Параметры: +// СтрокаПараметр - строка - ФИО. +// ДопустимаТолькоКириллица - если Истина, то ФИО проверяется на кириллицу, латиница в этом случае считается ошибкой. +// Ложь - ФИО считается верным, если оно написано либо на латинице, либо на кириллице. +// +// Возвращаемое значение: +// Истина - ФИО написано верно, иначе Ложь. +// +Функция ФИОНаписаноВерно(Знач СтрокаПараметр, ТолькоКириллица = Ложь) Экспорт + + ДопустимыеСимволы = "-"; + + Возврат (Не ТолькоКириллица И СтроковыеФункцииКлиентСервер.ТолькоЛатиницаВСтроке(СтрокаПараметр, Ложь, ДопустимыеСимволы)) + Или СтроковыеФункцииКлиентСервер.ТолькоКириллицаВСтроке(СтрокаПараметр, Ложь, ДопустимыеСимволы); + +КонецФункции + +#Область УстаревшиеПроцедурыИФункции + +// Устарела. Следует использовать ЧастиИмени. +// // Функция раскладывает ФИО в структуру. // // Параметры: @@ -20,7 +128,7 @@ СтруктураФИО = Новый Структура("Фамилия, Имя, Отчество"); - МассивПодстрок = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(ФИО, " "); + МассивПодстрок = СтрРазделить(ФИО, " ", Ложь); Если МассивПодстрок.Количество() > 0 Тогда СтруктураФИО.Вставить("Фамилия", МассивПодстрок[0]); @@ -41,6 +149,7 @@ КонецФункции +// Устарела. Следует использовать функции ФамилияИнициалы и ЧастиИмени. // Формирует фамилию и инициалы либо по переданным строкам. // // Параметры: @@ -60,8 +169,7 @@ ТипОбъекта = ТипЗнч(ФИОСтрокой); Если ТипОбъекта = Тип("Строка") Тогда - ФИО = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(СокрЛП(ФИОСтрокой), " "); - + ФИО = СтрРазделить(ФИОСтрокой, " ", Ложь); Иначе // Используем возможно переданные отдельные строки. Возврат ?(Не ПустаяСтрока(Фамилия), @@ -93,36 +201,6 @@ КонецФункции -// Проверяет верно ли написано ФИО. -// ФИО может быть написано либо только на кириллице, либо только на латинице. -// Также можно указать, что ФИО может быть верным только в кириллице. -// -// Параметры: -// СтрокаПараметр - строка - ФИО. -// ДопустимаТолькоКириллица - если Истина, то ФИО проверяется на кириллицу, латиница в этом случае считается ошибкой. -// Ложь - ФИО считается верным, если оно написано либо на латинице, либо на кириллице. -// -// Возвращаемое значение: -// Истина - ФИО написано верно, иначе Ложь. -// -Функция ФИОНаписаноВерно(Знач СтрокаПараметр, ТолькоКириллица = Ложь) Экспорт - - ДопустимыеСимволы = "-"; - - Возврат (НЕ ТолькоКириллица И СтроковыеФункцииКлиентСервер.ТолькоЛатиницаВСтроке(СтрокаПараметр, Ложь, ДопустимыеСимволы)) Или - СтроковыеФункцииКлиентСервер.ТолькоКириллицаВСтроке(СтрокаПараметр, Ложь, ДопустимыеСимволы); - -КонецФункции - -// Устарела. Следует использовать функцию ОбщегоНазначения.Просклонять. -// Функция не работает на клиенте. -Функция Просклонять(Знач ФИО, Падеж, Результат, Пол = Неопределено) Экспорт - #Если Сервер Тогда - Возврат ОбщегоНазначения.Просклонять(ФИО, Падеж, Результат, Пол); - #Иначе - Результат = ФИО; - Возврат Ложь; - #КонецЕсли -КонецФункции +#КонецОбласти #КонецОбласти diff --git a/SSL/src/CommonModules/ЦентрМониторинга/Module.bsl b/SSL/src/CommonModules/ЦентрМониторинга/Module.bsl new file mode 100644 index 000000000..855745190 --- /dev/null +++ b/SSL/src/CommonModules/ЦентрМониторинга/Module.bsl @@ -0,0 +1,76 @@ +//////////////////////////////////////////////////////////////////////////////// +// Подсистема "Центр Мониторинга" +// +//////////////////////////////////////////////////////////////////////////////// + +#Область ПрограммныйИнтерфейс + +// Записывает операцию бизнес статистики. +// +// Параметры: +// ИмяОперации - Строка(1000) - имя операции статистики, в случае отсутствия - создается новое; +// Значение - Число(15,3) - количественное значение операции статистики; +// Комментарий - Строка(1000) - произвольный комментарий +// Разделитель - Строка - разделитель значений в <ИмяОперации>, если разделитель не точка +// +Процедура ЗаписатьОперациюБизнесСтатистики(ИмяОперации, Значение, Комментарий = Неопределено, Разделитель = ".") Экспорт + Если ЦентрМониторингаВызовСервераПовтИсп.ЗаписыватьОперацииБизнесСтатистики() Тогда + РегистрыСведений.БуферОперацийСтатистики.ЗаписатьОперациюБизнесСтатистики(ИмяОперации, Значение, Комментарий, Разделитель); + КонецЕсли; +КонецПроцедуры + +// Записывает статистику по объектам конфигурации. +// +// Параметры: +// СоответствиеИменМетаданных - Структура; +// * Ключ - Строка - Имя объекта метаданных; +// * Значение - Строка - Текст запроса выборки данных, обязательно должно +// присутствовать поле <Количество> +// Ограничения +// можно вызывать только из ЦентрМониторингаПереопределяемый.ПриСбореПоказателейСтатистикиКонфигурации +// +Процедура ЗаписатьСтатистикуКонфигурации(СоответствиеИменМетаданных) Экспорт + Параметры = Новый Соответствие; + Для Каждого ТекМетаданные Из СоответствиеИменМетаданных Цикл + Параметры.Вставить(ТекМетаданные.Ключ, Новый Структура("Запрос, ОперацииСтатистики, ВидСтатистики", ТекМетаданные.Значение,,0)); + КонецЦикла; + + Если ОбщегоНазначенияПовтИсп.ДоступноИспользованиеРазделенныхДанных() Тогда + ОбластьДанныхСтрока = Строка(ОбщегоНазначения.ЗначениеРазделителяСеанса()); + Иначе + ОбластьДанныхСтрока = "0"; + КонецЕсли; + ОбластьДанныхСсылка = РегистрыСведений.ОбластиСтатистики.ПолучитьСсылку(ОбластьДанныхСтрока); + + РегистрыСведений.СтатистикаКонфигурации.Записать(Параметры, ОбластьДанныхСсылка); +КонецПроцедуры + +// Записывает статистику по объекту конфигурации. +// +// Параметры: +// ИмяОбъекта - Строка(1000) - имя операции статистики, в случае отсутствия - создается новое; +// Значение - Число(15,3) - количественное значение операции статистики; +// Ограничения +// можно вызывать только из ЦентрМониторингаПереопределяемый.ПриСбореПоказателейСтатистикиКонфигурации +// +Процедура ЗаписатьСтатистикуОбъектаКонфигурации(ИмяОбъекта, Значение) Экспорт + ОперацияСтатистики = РегистрыСведений.ОперацииСтатистики.ПолучитьСсылку(ИмяОбъекта); + + Если ОбщегоНазначенияПовтИсп.ДоступноИспользованиеРазделенныхДанных() Тогда + ОбластьДанныхСтрока = Строка(ОбщегоНазначения.ЗначениеРазделителяСеанса()); + Иначе + ОбластьДанныхСтрока = "0"; + КонецЕсли; + ОбластьДанныхСсылка = РегистрыСведений.ОбластиСтатистики.ПолучитьСсылку(ОбластьДанныхСтрока); + + НаборЗаписей = РегистрыСведений.СтатистикаКонфигурации.СоздатьНаборЗаписей(); + НаборЗаписей.Отбор.ОперацияСтатистики.Установить(ОперацияСтатистики); + + НовЗапись = НаборЗаписей.Добавить(); + НовЗапись.ИдентификаторОбластиСтатистики = ОбластьДанныхСсылка; + НовЗапись.ОперацияСтатистики = ОперацияСтатистики; + НовЗапись.Значение = Значение; + НаборЗаписей.Записать(Истина); +КонецПроцедуры + +#КонецОбласти \ No newline at end of file diff --git a/SSL/src/CommonModules/ЦентрМониторинга/ЦентрМониторинга.mdo b/SSL/src/CommonModules/ЦентрМониторинга/ЦентрМониторинга.mdo new file mode 100644 index 000000000..ff09732db --- /dev/null +++ b/SSL/src/CommonModules/ЦентрМониторинга/ЦентрМониторинга.mdo @@ -0,0 +1,11 @@ +<?xml version="1.0" encoding="UTF-8"?> +<mdclass:CommonModule xmlns:mdclass="http://g5.1c.ru/v8/dt/metadata/mdclass" uuid="2fad50a6-6a3e-4f87-ab84-907364427a63"> + <name>ЦентрМониторинга</name> + <synonym> + <key>ru</key> + <value>Центр мониторинга</value> + </synonym> + <server>true</server> + <externalConnection>true</externalConnection> + <clientOrdinaryApplication>true</clientOrdinaryApplication> +</mdclass:CommonModule> diff --git a/SSL/src/CommonModules/ЦентрМониторингаВызовСервераПовтИсп/Module.bsl b/SSL/src/CommonModules/ЦентрМониторингаВызовСервераПовтИсп/Module.bsl new file mode 100644 index 000000000..30c3e1f14 --- /dev/null +++ b/SSL/src/CommonModules/ЦентрМониторингаВызовСервераПовтИсп/Module.bsl @@ -0,0 +1,44 @@ +//////////////////////////////////////////////////////////////////////////////// +// Подсистема "Центр мониторинга". +// +//////////////////////////////////////////////////////////////////////////////// + +#Область СлужебныеПроцедурыИФункции + +#Область РаботаСПараметрамиЦентраМониторинга + +Функция ПолучитьПараметрыПоУмолчанию() Экспорт + Возврат ЦентрМониторингаСлужебный.ПолучитьПараметрыПоУмолчанию(); +КонецФункции + +Функция ПолучитьПараметрыЦентраМониторинга(Параметры = Неопределено) Экспорт + Возврат ЦентрМониторингаСлужебный.ПолучитьПараметрыЦентраМониторинга(Параметры); +КонецФункции + +Функция ЗаписыватьОперацииБизнесСтатистики() Экспорт + ПараметрыЦентраМониторинга = Новый Структура("ВключитьЦентрМониторинга, ЦентрОбработкиИнформацииОПрограмме, РегистрироватьБизнесСтатистику"); + + ПолучитьПараметрыЦентраМониторинга(ПараметрыЦентраМониторинга); + + Возврат (ПараметрыЦентраМониторинга.ВключитьЦентрМониторинга ИЛИ ПараметрыЦентраМониторинга.ЦентрОбработкиИнформацииОПрограмме) И ПараметрыЦентраМониторинга.РегистрироватьБизнесСтатистику; +КонецФункции + +Функция ИспользоватьЦентрМониторинга() Экспорт + Возврат ЦентрМониторингаСлужебный.ИспользоватьЦентрМониторинга(); +КонецФункции + +Функция ПолучитьПараметрыСервисаОтправки() Экспорт + Возврат ЦентрМониторингаСлужебный.ПолучитьПараметрыСервисаОтправки(); +КонецФункции + +#КонецОбласти + +#Область РаботаВРежимеРИБ + +Функция ЭтоГлавныйУзел() Экспорт + Возврат ЦентрМониторингаСлужебный.ЭтоГлавныйУзел(); +КонецФункции + +#КонецОбласти + +#КонецОбласти diff --git a/SSL/src/CommonModules/ЦентрМониторингаВызовСервераПовтИсп/ЦентрМониторингаВызовСервераПовтИсп.mdo b/SSL/src/CommonModules/ЦентрМониторингаВызовСервераПовтИсп/ЦентрМониторингаВызовСервераПовтИсп.mdo new file mode 100644 index 000000000..2cca0fb09 --- /dev/null +++ b/SSL/src/CommonModules/ЦентрМониторингаВызовСервераПовтИсп/ЦентрМониторингаВызовСервераПовтИсп.mdo @@ -0,0 +1,12 @@ +<?xml version="1.0" encoding="UTF-8"?> +<mdclass:CommonModule xmlns:mdclass="http://g5.1c.ru/v8/dt/metadata/mdclass" uuid="9567765b-8e02-4262-89a9-5c354109cc4c"> + <name>ЦентрМониторингаВызовСервераПовтИсп</name> + <synonym> + <key>ru</key> + <value>Центр мониторинга вызов сервера повт исп</value> + </synonym> + <server>true</server> + <externalConnection>true</externalConnection> + <clientOrdinaryApplication>true</clientOrdinaryApplication> + <returnValuesReuse>DuringSession</returnValuesReuse> +</mdclass:CommonModule> diff --git a/SSL/src/CommonModules/ЦентрМониторингаПереопределяемый/Module.bsl b/SSL/src/CommonModules/ЦентрМониторингаПереопределяемый/Module.bsl new file mode 100644 index 000000000..d28d94735 --- /dev/null +++ b/SSL/src/CommonModules/ЦентрМониторингаПереопределяемый/Module.bsl @@ -0,0 +1,19 @@ +//////////////////////////////////////////////////////////////////////////////// +// Подсистема "Центр Мониторинга" +// +//////////////////////////////////////////////////////////////////////////////// + +#Область ПрограммныйИнтерфейс + +// Выполняется при запуске регламентного задания. +// +Процедура ПриСбореПоказателейСтатистикиКонфигурации() Экспорт + + + + + + +КонецПроцедуры + +#КонецОбласти diff --git a/SSL/src/CommonModules/ЦентрМониторингаПереопределяемый/ЦентрМониторингаПереопределяемый.mdo b/SSL/src/CommonModules/ЦентрМониторингаПереопределяемый/ЦентрМониторингаПереопределяемый.mdo new file mode 100644 index 000000000..8260c5df2 --- /dev/null +++ b/SSL/src/CommonModules/ЦентрМониторингаПереопределяемый/ЦентрМониторингаПереопределяемый.mdo @@ -0,0 +1,11 @@ +<?xml version="1.0" encoding="UTF-8"?> +<mdclass:CommonModule xmlns:mdclass="http://g5.1c.ru/v8/dt/metadata/mdclass" uuid="3153b2b9-9e3e-4d6b-ab8c-5ccaac78a08a"> + <name>ЦентрМониторингаПереопределяемый</name> + <synonym> + <key>ru</key> + <value>Центр мониторинга переопределяемый</value> + </synonym> + <server>true</server> + <externalConnection>true</externalConnection> + <clientOrdinaryApplication>true</clientOrdinaryApplication> +</mdclass:CommonModule> diff --git a/SSL/src/CommonModules/ЦентрМониторингаСлужебный/Module.bsl b/SSL/src/CommonModules/ЦентрМониторингаСлужебный/Module.bsl new file mode 100644 index 000000000..c37ef168c --- /dev/null +++ b/SSL/src/CommonModules/ЦентрМониторингаСлужебный/Module.bsl @@ -0,0 +1,1803 @@ +//////////////////////////////////////////////////////////////////////////////// +// Подсистема "Центр Мониторинга" +// +//////////////////////////////////////////////////////////////////////////////// + +#Область СлужебныйПрограммныйИнтерфейс + +// См. описание этой же процедуры в модуле СтандартныеПодсистемыСервер. +// +Процедура ПриДобавленииОбработчиковСлужебныхСобытий(КлиентскиеОбработчики, СерверныеОбработчики) Экспорт + + // СЕРВЕРНЫЕ ОБРАБОТЧИКИ. + СерверныеОбработчики["СтандартныеПодсистемы.ОбновлениеВерсииИБ\ПриДобавленииОбработчиковОбновления"].Добавить( + "ЦентрМониторингаСлужебный"); + +КонецПроцедуры + +// Добавляет процедуры-обработчики обновления, необходимые данной подсистеме. +// +// Параметры: +// Обработчики - ТаблицаЗначений - см. описание функции НоваяТаблицаОбработчиковОбновления +// общего модуля ОбновлениеИнформационнойБазы. +// +Процедура ПриДобавленииОбработчиковОбновления(Обработчики) Экспорт + + Обработчик = Обработчики.Добавить(); + Обработчик.НачальноеЗаполнение = Истина; + Обработчик.Процедура = "ЦентрМониторингаСлужебный.ПервоначальноеЗаполнение"; + +КонецПроцедуры + +// Получает регламентное задание по имени +// +// Параметры: +// ИмяРегламентногоЗадания - Строка - имя регламентного задания +// СоздатьНовое - Булево - в случае отсутствия создается новое +// +Функция ПолучитьРегламентноеЗаданиеВнешнийВызов(ИмяРегламентногоЗадания, СоздатьНовое = Истина) Экспорт + Возврат ПолучитьРегламентноеЗадание(ИмяРегламентногоЗадания, СоздатьНовое); +КонецФункции + +// Устанавливает расписание регламентного задания по умолчанию +// +// Параметры: +// ИмяРегламентногоЗадания - РегламентноеЗадание +// +Процедура УстановитьРасписаниеПоУмолчаниюВнешнийВызов(Задание) Экспорт + УстановитьРасписаниеПоУмолчанию(Задание); +КонецПроцедуры + +// Удаляет регламентное задание по имени +// +// Параметры: +// ИмяРегламентногоЗадания - Строка - имя регламентного задания +// +Процедура УдалитьРегламентноеЗаданиеВнешнийВызов(ИмяРегламентногоЗадания) Экспорт + УдалитьРегламентноеЗадание(ИмяРегламентногоЗадания); +КонецПроцедуры + +// Устанавливает значение параметра центра мониторинга +// +// Параметры: +// Параметр - Строка - Ключ параметра центра мониторинга, возможные значения ключа +// см. в процедуре ПолучитьПараметрыПоУмолчанию в модуле ЦентрМониторингаСлужебный +// Значение - Произвольный тип - значение параметра центра мониторинга +// +Функция УстановитьПараметрЦентраМониторингаВнешнийВызов(Параметр, Значение) Экспорт + УстановитьПараметрЦентраМониторинга(Параметр, Значение); +КонецФункции + +// Получает параметры центра мониторинга по умолчанию +// Возвращаемое значение +// Структура +// +Функция ПолучитьПараметрыПоУмолчаниюВнешнийВызов() Экспорт + Возврат ПолучитьПараметрыПоУмолчанию(); +КонецФункции + +// Получает параметры центра мониторинга +// Параметры: +// Параметры - Структура - где ключи необходимые параметры, значения которых необходимо получить +// Возвращаемое значение +// Структура - значение константы ПараметрыЦентраМониторинга +// +Функция ПолучитьПараметрыЦентраМониторингаВнешнийВызов(Параметры = Неопределено) Экспорт + Возврат ПолучитьПараметрыЦентраМониторинга(Параметры); +КонецФункции + +// Устанавливает параметры центра мониторинга +// Параметры: +// Параметры - Структура - необходимые параметры, значения которых необходимо получить +// +Функция УстановитьПараметрыЦентраМониторингаВнешнийВызов(НовыеПараметры) Экспорт + УстановитьПараметрыЦентраМониторинга(НовыеПараметры); +КонецФункции + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +#Область РаботаСРегламентнымиЗаданиями + +Функция ПолучитьРегламентноеЗадание(ИмяРегламентногоЗадания, СоздатьНовое = Истина) Экспорт + Результат = Неопределено; + + УстановитьПривилегированныйРежим(Истина); + Задания = РегламентныеЗадания.ПолучитьРегламентныеЗадания(Новый Структура("Метаданные", ИмяРегламентногоЗадания)); + Если Задания.Количество() = 0 Тогда + Если СоздатьНовое Тогда + Задание = РегламентныеЗадания.СоздатьРегламентноеЗадание(Метаданные["РегламентныеЗадания"][ИмяРегламентногоЗадания]); + Задание.Записать(); + Результат = Задание; + КонецЕсли; + Иначе + Результат = Задания[0]; + КонецЕсли; + + Возврат Результат; +КонецФункции + +Процедура УстановитьРасписаниеПоУмолчанию(Задание) Экспорт + Задание.Расписание.ПериодПовтораДней = 1; + Задание.Расписание.ПериодПовтораВТечениеДня = 600; + Задание.Записать(); +КонецПроцедуры + +Процедура УдалитьРегламентноеЗадание(ИмяРегламентногоЗадания) Экспорт + РегЗадание = ПолучитьРегламентноеЗадание(ИмяРегламентногоЗадания, Ложь); + Если РегЗадание <> Неопределено Тогда + РегЗадание.Удалить(); + КонецЕсли; +КонецПроцедуры + +Процедура ЦентрМониторингаРегламентноеЗадание() Экспорт + ОбщегоНазначения.ПриНачалеВыполненияРегламентногоЗадания(Метаданные.РегламентныеЗадания.СборИОтправкаСтатистики); + + ОценкаПроизводительностиСуществует = ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ОценкаПроизводительности"); + Если ОценкаПроизводительностиСуществует Тогда + МодульОценкаПроизводительностиКлиентСервер = ОбщегоНазначения.ОбщийМодуль("ОценкаПроизводительностиКлиентСервер"); + ВремяНачала = МодульОценкаПроизводительностиКлиентСервер.НачатьЗамерВремени(); + КонецЕсли; + + ДатаЗапуска = ТекущаяУниверсальнаяДата(); + ПараметрыЦентраМониторинга = Новый Структура(); + + ПараметрыЦентраМониторинга.Вставить("ВключитьЦентрМониторинга"); + ПараметрыЦентраМониторинга.Вставить("ЦентрОбработкиИнформацииОПрограмме"); + ПараметрыЦентраМониторинга.Вставить("РегистрироватьДампы"); + ПараметрыЦентраМониторинга.Вставить("РегистрацияДамповСледующееФормирование"); + ПараметрыЦентраМониторинга.Вставить("РегистрацияДамповПериодФормирования"); + + ПараметрыЦентраМониторинга.Вставить("РегистрироватьБизнесСтатистику"); + ПараметрыЦентраМониторинга.Вставить("БизнесСтатистикаСледующееФормирование"); + ПараметрыЦентраМониторинга.Вставить("БизнесСтатистикаПериодФормирования"); + + ПараметрыЦентраМониторинга.Вставить("РегистрироватьСтатистикуКонфигурации"); + ПараметрыЦентраМониторинга.Вставить("РегистрироватьНастройкуКонфигурации"); + ПараметрыЦентраМониторинга.Вставить("СтатистикаКонфигурацииСледующееФормирование"); + ПараметрыЦентраМониторинга.Вставить("СтатистикаКонфигурацииПериодФормирования"); + + ПараметрыЦентраМониторинга.Вставить("ОтправкаДанныхСледующееФормирование"); + ПараметрыЦентраМониторинга.Вставить("ОтправкаДанныхПериодФормирования"); + + ПараметрыЦентраМониторинга = ПолучитьПараметрыЦентраМониторинга(ПараметрыЦентраМониторинга); + + Если (ПараметрыЦентраМониторинга.ВключитьЦентрМониторинга ИЛИ ПараметрыЦентраМониторинга.ЦентрОбработкиИнформацииОПрограмме) И ЭтоГлавныйУзел() Тогда + Если ПараметрыЦентраМониторинга.РегистрироватьДампы И ДатаЗапуска >= ПараметрыЦентраМониторинга.РегистрацияДамповСледующееФормирование Тогда + РегистрацияДампов(); + + ПараметрыЦентраМониторинга.РегистрацияДамповСледующееФормирование = + ТекущаяУниверсальнаяДата() + + ПараметрыЦентраМониторинга.РегистрацияДамповПериодФормирования; + КонецЕсли; + + Если ПараметрыЦентраМониторинга.РегистрироватьБизнесСтатистику И ДатаЗапуска >= ПараметрыЦентраМониторинга.БизнесСтатистикаСледующееФормирование Тогда + РегистрацияОперацийСтатистики(); + + ПараметрыЦентраМониторинга.БизнесСтатистикаСледующееФормирование = + ТекущаяУниверсальнаяДата() + + ПараметрыЦентраМониторинга.БизнесСтатистикаПериодФормирования; + КонецЕсли; + + Если (ПараметрыЦентраМониторинга.РегистрироватьСтатистикуКонфигурации ИЛИ ПараметрыЦентраМониторинга.РегистрироватьНастройкуКонфигурации) И ДатаЗапуска >= ПараметрыЦентраМониторинга.СтатистикаКонфигурацииСледующееФормирование Тогда + СобратьСтатистикуКонфигурации(Новый Структура("РегистрироватьСтатистикуКонфигурации, РегистрироватьНастройкуКонфигурации", ПараметрыЦентраМониторинга.РегистрироватьСтатистикуКонфигурации, ПараметрыЦентраМониторинга.РегистрироватьНастройкуКонфигурации)); + + ПараметрыЦентраМониторинга.СтатистикаКонфигурацииСледующееФормирование = + ТекущаяУниверсальнаяДата() + + ПараметрыЦентраМониторинга.СтатистикаКонфигурацииПериодФормирования; + КонецЕсли; + + Если ДатаЗапуска >= ПараметрыЦентраМониторинга.ОтправкаДанныхСледующееФормирование Тогда + СформироватьПакетДляОтправки(); + HTTPОтвет = ОтправитьДанныеМониторинга(); + + ПараметрыЦентраМониторинга.ОтправкаДанныхСледующееФормирование = ТекущаяУниверсальнаяДата() + + ПолучитьПараметрыЦентраМониторинга("ОтправкаДанныхПериодФормирования"); + + ПараметрыЦентраМониторинга.Удалить("РегистрацияДамповСледующееФормирование"); + ПараметрыЦентраМониторинга.Удалить("РегистрацияДамповПериодФормирования"); + + ПараметрыЦентраМониторинга.Удалить("БизнесСтатистикаСледующееФормирование"); + ПараметрыЦентраМониторинга.Удалить("БизнесСтатистикаПериодФормирования"); + + ПараметрыЦентраМониторинга.Удалить("СтатистикаКонфигурацииСледующееФормирование"); + ПараметрыЦентраМониторинга.Удалить("СтатистикаКонфигурацииПериодФормирования"); + КонецЕсли; + + // Что бы не было записи параметров, которые установились при обработке ответа от сервиса, + // то удалим эти параметры. + ПараметрыЦентраМониторинга.Удалить("РегистрироватьДампы"); + ПараметрыЦентраМониторинга.Удалить("РегистрироватьБизнесСтатистику"); + ПараметрыЦентраМониторинга.Удалить("РегистрироватьСтатистикуКонфигурации"); + ПараметрыЦентраМониторинга.Удалить("РегистрироватьНастройкуКонфигурации"); + ПараметрыЦентраМониторинга.Удалить("ОтправкаДанныхПериодФормирования"); + + УстановитьПараметрыЦентраМониторинга(ПараметрыЦентраМониторинга); + Иначе + УдалитьРегламентноеЗадание("СборИОтправкаСтатистики"); + КонецЕсли; + + Если ОценкаПроизводительностиСуществует Тогда + МодульОценкаПроизводительностиКлиентСервер.ЗакончитьЗамерВремени("ЦентрМониторингаСборИОтправкаСтатистики", ВремяНачала); + КонецЕсли; +КонецПроцедуры + +#КонецОбласти + +#Область РаботаСБизнесСтатистикой + +Процедура РазобратьБуферОперацийСтатистики(ТекущаяДата) Экспорт + ОценкаПроизводительностиСуществует = ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ОценкаПроизводительности"); + Если ОценкаПроизводительностиСуществует Тогда + МодульОценкаПроизводительностиКлиентСервер = ОбщегоНазначения.ОбщийМодуль("ОценкаПроизводительностиКлиентСервер"); + ВремяНачала = МодульОценкаПроизводительностиКлиентСервер.НачатьЗамерВремени(); + КонецЕсли; + + ПериодАгрегации = ЦентрМониторингаВызовСервераПовтИсп.ПолучитьПараметрыЦентраМониторинга("ПериодАгрегацииМалый"); + ПериодУдаления = ЦентрМониторингаВызовСервераПовтИсп.ПолучитьПараметрыЦентраМониторинга("ПериодАгрегации"); + + ОбработатьЗаписиДо = Дата(1, 1, 1) + Цел((ТекущаяДата - Дата(1, 1, 1))/ПериодАгрегации)*ПериодАгрегации; + + РезультатЗапросаОперации = РегистрыСведений.БуферОперацийСтатистики.ПолучитьАгрегированныеЗаписиОпераций(ОбработатьЗаписиДо, ПериодАгрегации, ПериодУдаления); + РезультатЗапросаКомментарий = РегистрыСведений.БуферОперацийСтатистики.ПолучитьАгрегированныеЗаписиКомментарий(ОбработатьЗаписиДо, ПериодАгрегации, ПериодУдаления); + РезультатЗапросаОбласти = РегистрыСведений.БуферОперацийСтатистики.ПолучитьАгрегированныеЗаписиОбластиСтатистики(ОбработатьЗаписиДо, ПериодАгрегации, ПериодУдаления); + НачатьТранзакцию(); + Попытка + РегистрыСведений.ЗамерыОперацииСтатистики.ЗаписатьЗамеры(РезультатЗапросаОперации); + РегистрыСведений.ЗамерыКомментарииСтатистики.ЗаписатьЗамеры(РезультатЗапросаКомментарий); + РегистрыСведений.ЗамерыОбластиСтатистики.ЗаписатьЗамеры(РезультатЗапросаОбласти); + + РегистрыСведений.БуферОперацийСтатистики.УдалитьЗаписи(ОбработатьЗаписиДо); + + ЗафиксироватьТранзакцию(); + Исключение + ОтменитьТранзакцию(); + Ошибка = ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); + ЗаписьЖурналаРегистрации(СобытиеЖурналаРегистрацииЦентрМониторингаРазобратьБуферОперацийСтатистики(), УровеньЖурналаРегистрации.Ошибка, Метаданные.ОбщиеМодули.ЦентрМониторингаСлужебный,,Ошибка); + ВызватьИсключение Ошибка; + КонецПопытки; + + Если ОценкаПроизводительностиСуществует Тогда + МодульОценкаПроизводительностиКлиентСервер.ЗакончитьЗамерВремени("ЦентрМониторингаРазобратьБуферОперацийСтатистики", ВремяНачала); + КонецЕсли; +КонецПроцедуры + +Процедура АгрегироватьЗамерыОперацийСтатистики(ТекущаяДата) Экспорт + ОценкаПроизводительностиСуществует = ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ОценкаПроизводительности"); + Если ОценкаПроизводительностиСуществует Тогда + МодульОценкаПроизводительностиКлиентСервер = ОбщегоНазначения.ОбщийМодуль("ОценкаПроизводительностиКлиентСервер"); + ВремяНачала = МодульОценкаПроизводительностиКлиентСервер.НачатьЗамерВремени(); + КонецЕсли; + + ПериодАгрегации = ЦентрМониторингаВызовСервераПовтИсп.ПолучитьПараметрыЦентраМониторинга("ПериодАгрегации"); + ПериодУдаления = ЦентрМониторингаВызовСервераПовтИсп.ПолучитьПараметрыЦентраМониторинга("ПериодУдаления"); + + ГраницаАгрегирования = ЦентрМониторингаВызовСервераПовтИсп.ПолучитьПараметрыЦентраМониторинга("ГраницаАгрегирования"); + ОбработатьЗаписиДо = Дата(1, 1, 1) + Цел((ТекущаяДата - Дата(1, 1, 1))/ПериодАгрегации)*ПериодАгрегации; + + Если ОбработатьЗаписиДо > ГраницаАгрегирования Тогда + НачатьТранзакцию(); + Попытка + РезультатЗапросаОперацииАгрегированные = РегистрыСведений.ЗамерыОперацииСтатистики.ПолучитьАгрегированныеЗаписи(ГраницаАгрегирования, ОбработатьЗаписиДо, ПериодАгрегации, ПериодУдаления); + РезультатЗапросаКомментарийАгрегированные = РегистрыСведений.ЗамерыКомментарииСтатистики.ПолучитьАгрегированныеЗаписи(ГраницаАгрегирования, ОбработатьЗаписиДо, ПериодАгрегации, ПериодУдаления); + РезультатЗапросаОбластиАгрегированные = РегистрыСведений.ЗамерыОбластиСтатистики.ПолучитьАгрегированныеЗаписи(ГраницаАгрегирования, ОбработатьЗаписиДо, ПериодАгрегации, ПериодУдаления); + + РегистрыСведений.ЗамерыОперацииСтатистики.УдалитьЗаписи(ГраницаАгрегирования, ОбработатьЗаписиДо); + РегистрыСведений.ЗамерыКомментарииСтатистики.УдалитьЗаписи(ГраницаАгрегирования, ОбработатьЗаписиДо); + РегистрыСведений.ЗамерыОбластиСтатистики.УдалитьЗаписи(ГраницаАгрегирования, ОбработатьЗаписиДо); + + РегистрыСведений.ЗамерыОперацииСтатистики.ЗаписатьЗамеры(РезультатЗапросаОперацииАгрегированные); + РегистрыСведений.ЗамерыКомментарииСтатистики.ЗаписатьЗамеры(РезультатЗапросаКомментарийАгрегированные); + РегистрыСведений.ЗамерыОбластиСтатистики.ЗаписатьЗамеры(РезультатЗапросаОбластиАгрегированные); + + УстановитьПараметрЦентраМониторинга("ГраницаАгрегирования", ОбработатьЗаписиДо); + + ЗафиксироватьТранзакцию(); + Исключение + ОтменитьТранзакцию(); + Ошибка = ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); + ЗаписьЖурналаРегистрации(НСтр("ru = 'Центр мониторинга.Агрегировать замеры операций статистики'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), УровеньЖурналаРегистрации.Ошибка, Метаданные.ОбщиеМодули.ЦентрМониторингаСлужебный,,Ошибка); + ВызватьИсключение Ошибка; + КонецПопытки; + КонецЕсли; + + Если ОценкаПроизводительностиСуществует Тогда + МодульОценкаПроизводительностиКлиентСервер.ЗакончитьЗамерВремени("ЦентрМониторингаАгрегироватьЗамерыОперацийСтатистики", ВремяНачала); + КонецЕсли; +КонецПроцедуры + +Процедура РегистрацияОперацийСтатистики() Экспорт + ОценкаПроизводительностиСуществует = ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ОценкаПроизводительности"); + Если ОценкаПроизводительностиСуществует Тогда + МодульОценкаПроизводительностиКлиентСервер = ОбщегоНазначения.ОбщийМодуль("ОценкаПроизводительностиКлиентСервер"); + ВремяНачала = МодульОценкаПроизводительностиКлиентСервер.НачатьЗамерВремени(); + КонецЕсли; + + ТекущаяДата = ТекущаяУниверсальнаяДата(); + + РазобратьБуферОперацийСтатистики(ТекущаяДата); + АгрегироватьЗамерыОперацийСтатистики(ТекущаяДата); + УдалитьУстаревшиеДанныеОперацийСтатистики(); + + Если ОценкаПроизводительностиСуществует Тогда + МодульОценкаПроизводительностиКлиентСервер.ЗакончитьЗамерВремени("ЦентрМониторингаРегистрацияОперацийСтатистики", ВремяНачала); + КонецЕсли; +КонецПроцедуры + +Процедура УдалитьУстаревшиеДанныеОперацийСтатистики() + ОценкаПроизводительностиСуществует = ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ОценкаПроизводительности"); + Если ОценкаПроизводительностиСуществует Тогда + МодульОценкаПроизводительностиКлиентСервер = ОбщегоНазначения.ОбщийМодуль("ОценкаПроизводительностиКлиентСервер"); + ВремяНачала = МодульОценкаПроизводительностиКлиентСервер.НачатьЗамерВремени(); + КонецЕсли; + + ПараметрыЦентраМониторинга = ЦентрМониторингаВызовСервераПовтИсп.ПолучитьПараметрыЦентраМониторинга(); + + ДатаКрайнегоПакета = ПараметрыЦентраМониторинга.ДатаКрайнегоПакета; + ПериодУдаления = ПараметрыЦентраМониторинга.ПериодУдаления; + + ГраницаУдаления = Дата(1,1,1) + Цел((ДатаКрайнегоПакета - Дата(1,1,1))/ПериодУдаления) * ПериодУдаления; + + НачатьТранзакцию(); + Попытка + РегистрыСведений.ЗамерыОперацииСтатистики.УдалитьЗаписи(Дата(1,1,1), ГраницаУдаления); + РегистрыСведений.ЗамерыКомментарииСтатистики.УдалитьЗаписи(Дата(1,1,1), ГраницаУдаления); + РегистрыСведений.ЗамерыОбластиСтатистики.УдалитьЗаписи(Дата(1,1,1), ГраницаУдаления); + + ЗафиксироватьТранзакцию(); + Исключение + ОтменитьТранзакцию(); + Ошибка = ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); + ЗаписьЖурналаРегистрации(НСтр("ru = 'Центр мониторинга.Удалить устаревшие данные операций статистики'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), УровеньЖурналаРегистрации.Ошибка, Метаданные.ОбщиеМодули.ЦентрМониторингаСлужебный,,Ошибка); + ВызватьИсключение Ошибка; + КонецПопытки; + + Если ОценкаПроизводительностиСуществует Тогда + МодульОценкаПроизводительностиКлиентСервер.ЗакончитьЗамерВремени("ЦентрМониторингаУдалитьУстаревшиеДанныеОперацийСтатистики", ВремяНачала); + КонецЕсли; +КонецПроцедуры + +#КонецОбласти + +#Область РаботаСJSON + +Функция СформироватьJSON(ИмяСекции, Данные, ДатаНачала = Неопределено, ДатаОкончания = Неопределено, ДопПараметры = Неопределено, КолонкиИндекса = Неопределено) Экспорт + Если ТипЗнч(Данные) = Тип("РезультатЗапроса") Тогда + JSONСтруктура = СформироватьJSONСтруктуруРезультатЗапроса(ИмяСекции, Данные, ДатаНачала, ДатаОкончания, ДопПараметры, КолонкиИндекса); + ТелоJSON = СтруктураJSONВСтроку(JSONСтруктура); + КонецЕсли; + + Возврат ТелоJSON; +КонецФункции + +Функция СформироватьJSONСтруктуру(ИмяСекции, Данные, ДатаНачала = Неопределено, ДатаОкончания = Неопределено, ДопПараметры = Неопределено, КолонкиИндекса = Неопределено) Экспорт + Если ТипЗнч(Данные) = Тип("РезультатЗапроса") Тогда + JSONСтруктура = СформироватьJSONСтруктуруРезультатЗапроса(ИмяСекции, Данные, ДатаНачала, ДатаОкончания, ДопПараметры, КолонкиИндекса) + КонецЕсли; + + Возврат JSONСтруктура; +КонецФункции + +Функция СформироватьJSONСтруктуруРезультатЗапроса(ИмяСекции, Данные, ДатаНачала, ДатаОкончания, ДопПараметры, КолонкиИндекса) + JSONСтруктура = Новый Соответствие; + + Секция = Новый Структура; + + + Если ДатаНачала <> Неопределено Тогда + Секция.Вставить("date_start", ДатаНачала); + КонецЕсли; + + Если ДатаОкончания <> Неопределено Тогда + Секция.Вставить("date_end", ДатаОкончания); + КонецЕсли; + + Если ДопПараметры <> Неопределено Тогда + Для Каждого Параметр Из ДопПараметры Цикл + Секция.Вставить(Параметр.Ключ, Параметр.Значение); + КонецЦикла; + КонецЕсли; + + Колонки = Новый Массив; + Для Каждого ТекКолонка Из Данные.Колонки Цикл + Колонки.Добавить(ТекКолонка.Имя); + КонецЦикла; + Секция.Вставить("columns", Колонки); + + Строки = Новый Массив; + Выборка = Данные.Выбрать(); + Если КолонкиИндекса <> Неопределено Тогда + ИндексыЗначений = Новый Соответствие; + Для Каждого ТекКолонка Из КолонкиИндекса Цикл + ИндексыЗначений.Вставить(ТекКолонка.Ключ, Новый Соответствие); + КонецЦикла; + КонецЕсли; + + Пока Выборка.Следующий() Цикл + Строка = Новый Массив; + Для Каждого ТекКолонка Из Колонки Цикл + ЗначениеДляДобавления = Выборка[ТекКолонка]; + Если КолонкиИндекса <> Неопределено И КолонкиИндекса[ТекКолонка] <> Неопределено Тогда + Если КолонкиИндекса[ТекКолонка][ЗначениеДляДобавления] = Неопределено Тогда + ИндексЗначения = КолонкиИндекса[ТекКолонка].Количество() + 1; + КолонкиИндекса[ТекКолонка].Вставить(ЗначениеДляДобавления, ИндексЗначения); + ИндексыЗначений[ТекКолонка].Вставить(Формат(ИндексЗначения, "ЧГ=0"), ЗначениеДляДобавления); + КонецЕсли; + + ЗначениеДляДобавления = КолонкиИндекса[ТекКолонка][ЗначениеДляДобавления]; + КонецЕсли; + + Строка.Добавить(ЗначениеДляДобавления); + КонецЦикла; + Строки.Добавить(Строка); + КонецЦикла; + Секция.Вставить("columnsValueIndex", ИндексыЗначений); + Секция.Вставить("rows", Строки); + + JSONСтруктура.Вставить(ИмяСекции, Секция); + + Возврат JSONСтруктура; +КонецФункции + +Функция СформироватьСтруктуруJSONДляОтправки(Параметры) Экспорт + ДатаНачала = Параметры.ДатаНачала; + ДатаОкончания = Параметры.ДатаОкончания; + + ТопДамповКоличество = Параметры.ТопДамповКоличество; + ТопApdex = Параметры.TopApdex; + ТопApdexTech = Параметры.TopApdexTech; + ПериодУдаления = Параметры.ПериодУдаления; + + ПараметрыЦентраМониторинга = Новый Структура(); + ПараметрыЦентраМониторинга.Вставить("ИдентификаторИнформационнойБазы"); + ПараметрыЦентраМониторинга.Вставить("РегистрироватьИнформациюОСистеме"); + ПараметрыЦентраМониторинга.Вставить("РегистрироватьВерсииПодсистем"); + ПараметрыЦентраМониторинга.Вставить("РегистрироватьДампы"); + ПараметрыЦентраМониторинга.Вставить("РегистрироватьБизнесСтатистику"); + ПараметрыЦентраМониторинга.Вставить("РегистрироватьСтатистикуКонфигурации"); + ПараметрыЦентраМониторинга.Вставить("РегистрироватьНастройкуКонфигурации"); + ПараметрыЦентраМониторинга.Вставить("РегистрироватьПроизводительность"); + ПараметрыЦентраМониторинга.Вставить("РегистрироватьПроизводительностьТехнологическую"); + ПараметрыЦентраМониторинга = ЦентрМониторингаВызовСервераПовтИсп.ПолучитьПараметрыЦентраМониторинга(ПараметрыЦентраМониторинга); + + Если ПараметрыЦентраМониторинга.РегистрироватьИнформациюОСистеме Тогда + Инфо = ПолучитьСистемнуюИнформацию(); + КонецЕсли; + + Если ПараметрыЦентраМониторинга.РегистрироватьВерсииПодсистем Тогда + Подсистемы = ВерсииПодсистем(); + КонецЕсли; + + + Если ПараметрыЦентраМониторинга.РегистрироватьДампы Тогда + ТопДампов = РегистрыСведений.ДампыПлатформы.ПолучитьТопВариантов(ДатаНачала, ДатаОкончания, ТопДамповКоличество); + СекцияDUMPS = СформироватьJSONСтруктуру("dumps", ТопДампов, ДатаНачала, ДатаОкончания); + КонецЕсли; + + Если ПараметрыЦентраМониторинга.РегистрироватьБизнесСтатистику Тогда + РезультатЗапроса = РегистрыСведений.ЗамерыОперацииСтатистики.ПолучитьЗамеры(ДатаНачала, ДатаОкончания, ПериодУдаления); + КолонкиИндекса = Новый Соответствие; + КолонкиИндекса.Вставить("ОперацияСтатистики", Новый Соответствие); + КолонкиИндекса.Вставить("Период", Новый Соответствие); + СекцияОперацииСтатистики = СформироватьJSONСтруктуру("OperationStatistics", РезультатЗапроса, ДатаНачала, ДатаОкончания,,КолонкиИндекса); + СекцияОперацииСтатистики["OperationStatistics"].Вставить("AggregationPeriod", ПериодУдаления); + + РезультатЗапроса = РегистрыСведений.ЗамерыКомментарииСтатистики.ПолучитьЗамеры(ДатаНачала, ДатаОкончания, ПериодУдаления); + КолонкиИндекса = Новый Соответствие; + КолонкиИндекса.Вставить("ОперацияСтатистики", Новый Соответствие); + КолонкиИндекса.Вставить("Период", Новый Соответствие); + КолонкиИндекса.Вставить("КомментарийСтатистики", Новый Соответствие); + СекцияКомментарииСтатистики = СформироватьJSONСтруктуру("CommentsStatistics", РезультатЗапроса, ДатаНачала, ДатаОкончания,,КолонкиИндекса); + СекцияКомментарииСтатистики["CommentsStatistics"]["columnsValueIndex"].Удалить("ОперацияСтатистики"); + СекцияКомментарииСтатистики["CommentsStatistics"]["columnsValueIndex"].Удалить("Период"); + СекцияКомментарииСтатистики["CommentsStatistics"].Вставить("AggregationPeriod", ПериодУдаления); + + РезультатЗапроса = РегистрыСведений.ЗамерыОбластиСтатистики.ПолучитьЗамеры(ДатаНачала, ДатаОкончания, ПериодУдаления); + КолонкиИндекса = Новый Соответствие; + КолонкиИндекса.Вставить("ОперацияСтатистики", Новый Соответствие); + КолонкиИндекса.Вставить("Период", Новый Соответствие); + КолонкиИндекса.Вставить("ОбластьСтатистики", Новый Соответствие); + СекцияОбластиСтатистики = СформироватьJSONСтруктуру("StatisticalAreas", РезультатЗапроса, ДатаНачала, ДатаОкончания,,КолонкиИндекса); + СекцияОбластиСтатистики["StatisticalAreas"]["columnsValueIndex"].Удалить("ОперацияСтатистики"); + СекцияОбластиСтатистики["StatisticalAreas"]["columnsValueIndex"].Удалить("Период"); + СекцияОбластиСтатистики["StatisticalAreas"].Вставить("AggregationPeriod", ПериодУдаления); + КонецЕсли; + + РазделениеПоОбластямДанныхВключено = РазделениеПоОбластямДанныхВключено(); + + #Область СекцияStatisticsConfiguration + Если ПараметрыЦентраМониторинга.РегистрироватьСтатистикуКонфигурации Тогда + Если РазделениеПоОбластямДанныхВключено Тогда + РезультатЗапросаИмена = РегистрыСведений.СтатистикаКонфигурации.ПолучитьИменаСтатистики(0); + ТаблицаЗначенийИмена = РезультатЗапросаИмена.Выгрузить(); + + Массив = Новый Массив; + КЧ_10_0 = Новый КвалификаторыЧисла(10, 0, ДопустимыйЗнак.Неотрицательный); + Массив.Добавить(Тип("Число")); + ОписаниеТиповЧисло_10_0 = Новый ОписаниеТипов(Массив, КЧ_10_0,,,); + ТаблицаЗначенийИмена.Колонки.Добавить("ИндексСтроки", ОписаниеТиповЧисло_10_0); + СтруктураИменМетаданных = Новый Соответствие; + Для Каждого ТекСтрока Из ТаблицаЗначенийИмена Цикл + ИндексСтроки = ТаблицаЗначенийИмена.Индекс(ТекСтрока); + ТекСтрока.ИндексСтроки = ИндексСтроки; + СтруктураИменМетаданных.Вставить(ИндексСтроки, ТекСтрока.ОперацияСтатистикиНаименование); + КонецЦикла; + + СекцияСтатистикаКонфигурации = Новый Структура("StatisticsConfiguration", Новый Структура); + СекцияСтатистикаКонфигурации.StatisticsConfiguration.Вставить("MetadataName", Метаданные.Имя); + СекцияСтатистикаКонфигурации.StatisticsConfiguration.Вставить("WorkingMode", ?(ОбщегоНазначения.ИнформационнаяБазаФайловая(), "F", "S")); + СекцияСтатистикаКонфигурации.StatisticsConfiguration.Вставить("DivisionByRegions", РазделениеПоОбластямДанныхВключено); + СекцияСтатистикаКонфигурации.StatisticsConfiguration.Вставить("MetadataIndexName", Новый Соответствие); + Для Каждого ТекСтрока Из ТаблицаЗначенийИмена Цикл + СекцияСтатистикаКонфигурации.StatisticsConfiguration.MetadataIndexName.Вставить(Строка(ТекСтрока.ИндексСтроки), ТекСтрока.ОперацияСтатистикиНаименование); + КонецЦикла; + + СекцияСтатистикаКонфигурации.StatisticsConfiguration.Вставить("StatisticsConfigurationByRegions", Новый Соответствие); + ОбластиДанныхРезультат = РегистрыСведений.СтатистикаКонфигурации.ПолучитьОбластиДанныхРезультатЗапроса(); + Выборка = ОбластиДанныхРезультат.Выбрать(); + Пока Выборка.Следующий() Цикл + ОбластьДанныхСтрока = Строка(Выборка.ОбластьДанных); + ОбластьДанныхСсылка = РегистрыСведений.ОбластиСтатистики.ПолучитьСсылку(ОбластьДанныхСтрока); + + СтатистикаПоОбластям = Новый Массив; + Если РегистрыСведений.ОбластиСтатистики.СобиратьСтатистикуКонфигурации(ОбластьДанныхСтрока) Тогда + РезультатЗапроса = РегистрыСведений.СтатистикаКонфигурации.ПолучитьСтатистику(0, ТаблицаЗначенийИмена, ОбластьДанныхСсылка); + СтатистикаКонфигурацииОбласти = СформироватьJSONСтруктуру(ОбластьДанныхСтрока, РезультатЗапроса); + СекцияСтатистикаКонфигурации.StatisticsConfiguration.StatisticsConfigurationByRegions.Вставить(ОбластьДанныхСтрока, СтатистикаКонфигурацииОбласти[ОбластьДанныхСтрока]); + КонецЕсли; + КонецЦикла; + Иначе + РезультатЗапроса = РегистрыСведений.СтатистикаКонфигурации.ПолучитьСтатистику(0); + ДопПараметры = Новый Структура("MetadataName", Метаданные.Имя); + ДопПараметры.Вставить("WorkingMode", ?(ОбщегоНазначения.ИнформационнаяБазаФайловая(), "F", "S")); + ДопПараметры.Вставить("DivisionByRegions", РазделениеПоОбластямДанныхВключено); + СекцияСтатистикаКонфигурации = СформироватьJSONСтруктуру("StatisticsConfiguration", РезультатЗапроса, ДатаНачала,,ДопПараметры); + КонецЕсли; + КонецЕсли; + #КонецОбласти + + #Область СекцияOptions + Если ПараметрыЦентраМониторинга.РегистрироватьНастройкуКонфигурации Тогда + Если РазделениеПоОбластямДанныхВключено Тогда + РезультатЗапросаИмена = РегистрыСведений.СтатистикаКонфигурации.ПолучитьИменаСтатистики(1); + ТаблицаЗначенийИмена = РезультатЗапросаИмена.Выгрузить(); + + Массив = Новый Массив; + КЧ_10_0 = Новый КвалификаторыЧисла(10, 0, ДопустимыйЗнак.Неотрицательный); + Массив.Добавить(Тип("Число")); + ОписаниеТиповЧисло_10_0 = Новый ОписаниеТипов(Массив, КЧ_10_0,,,); + ТаблицаЗначенийИмена.Колонки.Добавить("ИндексСтроки", ОписаниеТиповЧисло_10_0); + СтруктураИменМетаданных = Новый Соответствие; + Для Каждого ТекСтрока Из ТаблицаЗначенийИмена Цикл + ИндексСтроки = ТаблицаЗначенийИмена.Индекс(ТекСтрока); + ТекСтрока.ИндексСтроки = ИндексСтроки; + СтруктураИменМетаданных.Вставить(ИндексСтроки, ТекСтрока.ОперацияСтатистикиНаименование); + КонецЦикла; + + СекцияНастройкаКонфигурации = Новый Структура("Options", Новый Структура); + СекцияНастройкаКонфигурации.Options.Вставить("MetadataName", Метаданные.Имя); + СекцияНастройкаКонфигурации.Options.Вставить("WorkingMode", ?(ОбщегоНазначения.ИнформационнаяБазаФайловая(), "F", "S")); + СекцияНастройкаКонфигурации.Options.Вставить("DivisionByRegions", РазделениеПоОбластямДанныхВключено); + СекцияНастройкаКонфигурации.Options.Вставить("MetadataIndexName", Новый Соответствие); + Для Каждого ТекСтрока Из ТаблицаЗначенийИмена Цикл + СекцияНастройкаКонфигурации.Options.MetadataIndexName.Вставить(Строка(ТекСтрока.ИндексСтроки), ТекСтрока.ОперацияСтатистикиНаименование); + КонецЦикла; + + СекцияНастройкаКонфигурации.Options.Вставить("OptionsByRegions", Новый Соответствие); + ОбластиДанныхРезультат = РегистрыСведений.СтатистикаКонфигурации.ПолучитьОбластиДанныхРезультатЗапроса(); + Выборка = ОбластиДанныхРезультат.Выбрать(); + Пока Выборка.Следующий() Цикл + ОбластьДанныхСтрока = Строка(Выборка.ОбластьДанных); + ОбластьДанныхСсылка = РегистрыСведений.ОбластиСтатистики.ПолучитьСсылку(ОбластьДанныхСтрока); + + СтатистикаПоОбластям = Новый Массив; + Если РегистрыСведений.ОбластиСтатистики.СобиратьСтатистикуКонфигурации(ОбластьДанныхСтрока) Тогда + РезультатЗапроса = РегистрыСведений.СтатистикаКонфигурации.ПолучитьСтатистику(1, ТаблицаЗначенийИмена, ОбластьДанныхСсылка); + СтатистикаКонфигурацииОбласти = СформироватьJSONСтруктуру(ОбластьДанныхСтрока, РезультатЗапроса); + СекцияНастройкаКонфигурации.Options.OptionsByRegions.Вставить(ОбластьДанныхСтрока, СтатистикаКонфигурацииОбласти[ОбластьДанныхСтрока]); + КонецЕсли; + КонецЦикла; + Иначе + РезультатЗапроса = РегистрыСведений.СтатистикаКонфигурации.ПолучитьСтатистику(1); + ДопПараметры = Новый Структура("MetadataName", Метаданные.Имя); + ДопПараметры.Вставить("WorkingMode", ?(ОбщегоНазначения.ИнформационнаяБазаФайловая(), 0, 1)); + СекцияНастройкаКонфигурации = СформироватьJSONСтруктуру("Options", РезультатЗапроса, ДатаНачала,,ДопПараметры); + КонецЕсли; + КонецЕсли; + #КонецОбласти + + ОценкаПроизводительностиСуществует = ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ОценкаПроизводительности"); + Если ОценкаПроизводительностиСуществует Тогда + МодульОценкаПроизводительностиСлужебный = ОбщегоНазначения.ОбщийМодуль("ОценкаПроизводительностиСлужебный"); + + Если ПараметрыЦентраМониторинга.РегистрироватьПроизводительность Тогда + РезультатЗапроса = МодульОценкаПроизводительностиСлужебный.ПолучитьТопAPDEX(ДатаНачала, ДатаОкончания, ПериодУдаления, ТопApdex); + КолонкиИндекса = Новый Соответствие; + КолонкиИндекса.Вставить("Период", Новый Соответствие); + КолонкиИндекса.Вставить("КлючеваяОперация", Новый Соответствие); + СекцияТопAPDEX = СформироватьJSONСтруктуру("TopApdex", РезультатЗапроса, ДатаНачала, ДатаОкончания,,КолонкиИндекса); + СекцияТопAPDEX["TopApdex"].Вставить("AggregationPeriod", ПериодУдаления); + КонецЕсли; + + Если ПараметрыЦентраМониторинга.РегистрироватьПроизводительностьТехнологическую Тогда + РезультатЗапроса = МодульОценкаПроизводительностиСлужебный.ПолучитьТопAPDEXТехнологический(ДатаНачала, ДатаОкончания, ПериодУдаления, ТопApdexTech); + КолонкиИндекса = Новый Соответствие; + КолонкиИндекса.Вставить("Период", Новый Соответствие); + КолонкиИндекса.Вставить("КлючеваяОперация", Новый Соответствие); + СекцияТопAPDEXСлужебные = СформироватьJSONСтруктуру("TopApdexTechnology", РезультатЗапроса, ДатаНачала, ДатаОкончания,,КолонкиИндекса); + СекцияТопAPDEXСлужебные["TopApdexTechnology"].Вставить("AggregationPeriod", ПериодУдаления); + КонецЕсли; + КонецЕсли; + + ИдентификаторИнформационнойБазы = Строка(ПараметрыЦентраМониторинга.ИдентификаторИнформационнойБазы); + JSONСтруктура = Новый Структура; + JSONСтруктура.Вставить("ib", ИдентификаторИнформационнойБазы); + JSONСтруктура.Вставить("versionPacket", "1.0.0.0"); + JSONСтруктура.Вставить("datePacket", ТекущаяУниверсальнаяДата()); + + Если ПараметрыЦентраМониторинга.РегистрироватьИнформациюОСистеме Тогда + JSONСтруктура.Вставить("info", Инфо); + КонецЕсли; + + Если ПараметрыЦентраМониторинга.РегистрироватьВерсииПодсистем Тогда + JSONСтруктура.Вставить("versions", Подсистемы); + КонецЕсли; + + Если ПараметрыЦентраМониторинга.РегистрироватьДампы Тогда + JSONСтруктура.Вставить("dumps", СекцияDUMPS["dumps"]); + КонецЕсли; + + Если ПараметрыЦентраМониторинга.РегистрироватьБизнесСтатистику Тогда + БизнесСтатистика = Новый Структура; + БизнесСтатистика.Вставить("OperationStatistics", СекцияОперацииСтатистики["OperationStatistics"]); + БизнесСтатистика.Вставить("CommentsStatistics", СекцияКомментарииСтатистики["CommentsStatistics"]); + БизнесСтатистика.Вставить("StatisticalAreas", СекцияОбластиСтатистики["StatisticalAreas"]); + JSONСтруктура.Вставить("business", БизнесСтатистика); + КонецЕсли; + + Если ПараметрыЦентраМониторинга.РегистрироватьСтатистикуКонфигурации Тогда + JSONСтруктура.Вставить("config", СекцияСтатистикаКонфигурации["StatisticsConfiguration"]); + КонецЕсли; + + Если ПараметрыЦентраМониторинга.РегистрироватьНастройкуКонфигурации Тогда + JSONСтруктура.Вставить("options", СекцияНастройкаКонфигурации["Options"]); + КонецЕсли; + + Если ОценкаПроизводительностиСуществует Тогда + Если ПараметрыЦентраМониторинга.РегистрироватьПроизводительность Тогда + JSONСтруктура.Вставить("perf", СекцияТопAPDEX["TopApdex"]); + КонецЕсли; + + Если ПараметрыЦентраМониторинга.РегистрироватьПроизводительностьТехнологическую Тогда + JSONСтруктура.Вставить("internal_perf", СекцияТопAPDEXСлужебные["TopApdexTechnology"]); + КонецЕсли; + КонецЕсли; + + Возврат JSONСтруктура; +КонецФункции + +Функция СтрокаJSONВСтруктуру(СтрокаJSON) Экспорт + ЧтениеJSON = Новый ЧтениеJSON(); + ЧтениеJSON.УстановитьСтроку(СтрокаJSON); + + СтруктураJSON = ПрочитатьJSON(ЧтениеJSON); + + Возврат СтруктураJSON; +КонецФункции + +Функция СтруктураJSONВСтроку(JSONСтруктура) Экспорт + ЗаписьJSON = Новый ЗаписьJSON; + ЗаписьJSON.УстановитьСтроку(Новый ПараметрыЗаписиJSON(ПереносСтрокJSON.Нет)); + ЗаписатьJSON(ЗаписьJSON, JSONСтруктура); + + Возврат ЗаписьJSON.Закрыть(); +КонецФункции + +#КонецОбласти + +#Область РаботаСHTTPСервисом + +Функция HTTPСервисОтправитьКакТекст(Сервер, АдресРесурса, Данные, Порт = 80, ЗащищенноеСоединение = Ложь) Экспорт + Параметры = Новый Структура; + Параметры.Вставить("Сервер", Сервер); + Параметры.Вставить("Порт", Порт); + Параметры.Вставить("АдресРесурса", АдресРесурса); + Параметры.Вставить("ЗащищенноеСоединение", ЗащищенноеСоединение); + Параметры.Вставить("Данные", Данные); + Параметры.Вставить("Метод", "POST"); + Параметры.Вставить("ТипДанных", "Текст"); + + HTTPОтветСтруктура = HTTPСервисОтправитьДанныеСлужебный(Параметры); + + Возврат HTTPОтветСтруктура; +КонецФункции + +Функция HTTPСервисОтправитьКакZIP(Сервер, АдресРесурса, Данные, Порт = 80) Экспорт + Параметры = Новый Структура; + Параметры.Вставить("Сервер", Сервер); + Параметры.Вставить("АдресРесурса", АдресРесурса); + Параметры.Вставить("Данные", Данные); + Параметры.Вставить("Метод", "POST"); + Параметры.Вставить("ТипДанных", "ZIP"); + + HTTPОтветСтруктура = HTTPСервисОтправитьДанныеСлужебный(Параметры); + + Возврат HTTPОтветСтруктура; +КонецФункции + +Функция HTTPСервисОтправитьДанныеСлужебный(Параметры) + Если Параметры.ЗащищенноеСоединение Тогда + HTTPСоединение = Новый HTTPСоединение(Параметры.Сервер, Параметры.Порт,,,,20, Новый ЗащищенноеСоединениеOpenSSL(Неопределено, Неопределено)); + Иначе + HTTPСоединение = Новый HTTPСоединение(Параметры.Сервер, Параметры.Порт,,,,20); + КонецЕсли; + + HTTPЗапрос = Новый HTTPЗапрос(Параметры.АдресРесурса); + + Если Параметры.ТипДанных = "Текст" Тогда + HTTPЗапрос.УстановитьТелоИзСтроки(Параметры.Данные); + ИначеЕсли Параметры.ТипДанных = "ZIP" Тогда + ИмяФайлаАрхива = ЗаписатьДанныеВАрхив(Параметры.Данные); + ДвоичныеДанныеАрхива = Новый ДвоичныеДанные(ИмяФайлаАрхива); + HTTPЗапрос.УстановитьТелоИзДвоичныхДанных(ДвоичныеДанныеАрхива); + КонецЕсли; + + Попытка + Если Параметры.Метод = "POST" Тогда + HTTPОтвет = HTTPСоединение.ОтправитьДляОбработки(HTTPЗапрос); + ИначеЕсли Параметры.Метод = "GET" Тогда + HTTPОтвет = HTTPСоединение.Получить(HTTPЗапрос); + КонецЕсли; + + Если Параметры.ТипДанных = "ZIP" Тогда + УдалитьФайлы(ИмяФайлаАрхива); + КонецЕсли; + + HTTPОтветСтруктура = HTTPОтветВСтруктуру(HTTPОтвет); + Исключение + HTTPОтветСтруктура = Новый Структура("КодСостояния", 105); + КонецПопытки; + + Возврат HTTPОтветСтруктура; +КонецФункции + +Функция ЗаписатьДанныеВАрхив(Данные) + ВременныйКаталог = КаталогВременныхФайлов(); + + ИдентификаторФайла = Строка(Новый УникальныйИдентификатор()); + ИмяФайлаДанных = ВременныйКаталог + ИдентификаторФайла + ".txt"; + ИмяФайлаАрхива = ВременныйКаталог + ИдентификаторФайла + ".zip"; + + ЗаписьТекста = Новый ЗаписьТекста(ИмяФайлаДанных); + ЗаписьТекста.Записать(Данные); + ЗаписьТекста.Закрыть(); + + АрхивZip = Новый ЗаписьZipФайла(ИмяФайлаАрхива,,,МетодСжатияZIP.Сжатие,УровеньСжатияZIP.Максимальный); + АрхивZip.Добавить(ИмяФайлаДанных, РежимСохраненияПутейZIP.НеСохранятьПути); + АрхивZip.Записать(); + + УдалитьФайлы(ИмяФайлаДанных); + + Возврат ИмяФайлаАрхива; +КонецФункции + +Функция HTTPОтветВСтруктуру(Ответ) Экспорт + Результат = Новый Структура; + + Результат.Вставить("КодСостояния", Ответ.КодСостояния); + Результат.Вставить("Заголовки", Новый Соответствие); + Для каждого Параметр Из Ответ.Заголовки Цикл + Результат.Заголовки.Вставить(Параметр.Ключ, Параметр.Значение); + КонецЦикла; + + Если Ответ.Заголовки["Content-Type"] <> Неопределено Тогда + ContentType = Ответ.Заголовки["Content-Type"]; + Если СтрНайти(ContentType, "text/plain") > 0 Тогда + Тело = Ответ.ПолучитьТелоКакСтроку(); + Результат.Вставить("Тело", Тело); + ИначеЕсли СтрНайти(ContentType, "text/html") > 0 Тогда + Тело = Ответ.ПолучитьТелоКакСтроку(); + Результат.Вставить("Тело", Тело); + ИначеЕсли СтрНайти(ContentType, "application/json") Тогда + Тело = Ответ.ПолучитьТелоКакСтроку(); + Результат.Вставить("Тело", Тело); + Иначе + Тело = "Не известный ContentType = " + ContentType + ". См. <Функция HTTPОтветВСтруктуру(Ответ) Экспорт>"; + Результат.Вставить("Тело", Тело); + КонецЕсли; + КонецЕсли; + + Возврат Результат; +КонецФункции + +#КонецОбласти + +#Область РаботаСРегистрациейДампов + +Процедура РегистрацияДампов() Экспорт + ОценкаПроизводительностиСуществует = ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ОценкаПроизводительности"); + Если ОценкаПроизводительностиСуществует Тогда + МодульОценкаПроизводительностиКлиентСервер = ОбщегоНазначения.ОбщийМодуль("ОценкаПроизводительностиКлиентСервер"); + ВремяНачала = МодульОценкаПроизводительностиКлиентСервер.НачатьЗамерВремени(); + КонецЕсли; + + КаталогДампов = ПолучитьКаталогДампов(); + + Если КаталогДампов.УдалятьДампы Тогда + ДампыДляУдаления = РегистрыСведений.ДампыПлатформы.ПолучитьДампыДляУдаления(); + + Для Каждого ДампДляУдаления Из ДампыДляУдаления Цикл + Файл = Новый Файл(ДампДляУдаления.ИмяФайла); + Если Файл.Существует() Тогда + Попытка + УдалитьФайлы(Файл.ПолноеИмя); + ДампДляУдаления.ИмяФайла = ""; + РегистрыСведений.ДампыПлатформы.ИзменитьЗапись(ДампДляУдаления); + Исключение + ЗаписьЖурналаРегистрации(СобытиеЖурналаРегистрацииЦентрМониторингаУдалениеДампа(), УровеньЖурналаРегистрации.Ошибка,,, + ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); + КонецПопытки; + Иначе + ДампДляУдаления.ИмяФайла = ""; + РегистрыСведений.ДампыПлатформы.ИзменитьЗапись(ДампДляУдаления); + КонецЕсли; + КонецЦикла; + КонецЕсли; + + ФайлыДампов = НайтиФайлы(КаталогДампов.Путь, "*.mdmp"); + ИменаФайловДампов = Новый Массив; + Для Каждого ФайлДампа Из ФайлыДампов Цикл + ИменаФайловДампов.Добавить(ФайлДампа.ПолноеИмя); + КонецЦикла; + + ФайлыДамповЗарегистрированные = РегистрыСведений.ДампыПлатформы.ПолучитьЗарегистрированныеДампы(ИменаФайловДампов); + + Для Каждого ФайлДампа Из ФайлыДампов Цикл + Если ФайлыДамповЗарегистрированные[ФайлДампа.ПолноеИмя] = Неопределено Тогда + ДампНовый = Новый Структура; + СтруктураДампа = ПолучитьСтруктуруДампа(ФайлДампа.Имя); + + ДампНовый.Вставить("ДатаРегистрации", ТекущаяУниверсальнаяДатаВМиллисекундах()); + ДампНовый.Вставить("ВариантДампа", СтруктураДампа.Процесс + "_" + СтруктураДампа.ВерсияПлатформы + "_" + СтруктураДампа.Смещение); + ДампНовый.Вставить("ВерсияПлатформы", ВерсияПлатформыВЧисло(СтруктураДампа.ВерсияПлатформы)); + ДампНовый.Вставить("ИмяФайла", ФайлДампа.ПолноеИмя); + + РегистрыСведений.ДампыПлатформы.ИзменитьЗапись(ДампНовый); + КонецЕсли; + КонецЦикла; + + Если ОценкаПроизводительностиСуществует Тогда + МодульОценкаПроизводительностиКлиентСервер.ЗакончитьЗамерВремени("ЦентрМониторингаРегистрацияДампов", ВремяНачала); + КонецЕсли; +КонецПроцедуры + +#КонецОбласти + +#Область РаботаСоСтатистикойКонфигурации + +Процедура СобратьСтатистикуКонфигурации(ПараметрыЦентраМониторинга = Неопределено) + Если ПараметрыЦентраМониторинга = Неопределено Тогда + ПараметрыЦентраМониторинга.Вставить("РегистрироватьСтатистикуКонфигурации"); + ПараметрыЦентраМониторинга.Вставить("РегистрироватьНастройкуКонфигурации"); + ПараметрыЦентраМониторинга = ПолучитьПараметрыЦентраМониторинга(ПараметрыЦентраМониторинга); + КонецЕсли; + + // Собирает базовую статистику по конфигурации + // в случае существования подсистемы оценки производительности + // замеряет длительность выполнения + // + #Область СтатистикаКонфигурацииБазовая + + Если ПараметрыЦентраМониторинга.РегистрироватьСтатистикуКонфигурации ИЛИ ПараметрыЦентраМониторинга.РегистрироватьНастройкуКонфигурации Тогда + РегистрыСведений.СтатистикаКонфигурации.ОчиститьСтатистикуКонфигурации(); + + ОценкаПроизводительностиСуществует = ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ОценкаПроизводительности"); + Если ОценкаПроизводительностиСуществует Тогда + МодульОценкаПроизводительностиКлиентСервер = ОбщегоНазначения.ОбщийМодуль("ОценкаПроизводительностиКлиентСервер"); + ВремяНачала = МодульОценкаПроизводительностиКлиентСервер.НачатьЗамерВремени(); + КонецЕсли; + + СтатистикаКонфигурации = Неопределено; + Если ПараметрыЦентраМониторинга.РегистрироватьСтатистикуКонфигурации Тогда + РегистрыСведений.СтатистикаКонфигурации.ЗаписатьСтатистикуКонфигурации(); + КонецЕсли; + + Если ПараметрыЦентраМониторинга.РегистрироватьНастройкуКонфигурации Тогда + СтатистикаКонфигурации = РегистрыСведений.СтатистикаКонфигурации.ЗаписатьНастройкиКонфигурации(); + КонецЕсли; + + Если ОценкаПроизводительностиСуществует Тогда + МодульОценкаПроизводительностиКлиентСервер.ЗакончитьЗамерВремени("ЦентрМониторингаСобратьСтатистикуКонфигурацииБазовая", ВремяНачала); + КонецЕсли; + КонецЕсли; + + #КонецОбласти + + // Собирает статистику по стандартным подсистемам конфигурации + // в случае существования подсистемы оценки производительности + // замеряет длительность выполнения + // + #Область СтатистикаКонфигурацииСтандартныеПодсистемы + + Если ПараметрыЦентраМониторинга.РегистрироватьСтатистикуКонфигурации Тогда + Если ОценкаПроизводительностиСуществует Тогда + ВремяНачала = МодульОценкаПроизводительностиКлиентСервер.НачатьЗамерВремени(); + КонецЕсли; + + РазделениеПоОбластямДанныхВключено = РазделениеПоОбластямДанныхВключено(); + Если РазделениеПоОбластямДанныхВключено Тогда + ОбластиДанныхРезультатЗапроса = РегистрыСведений.СтатистикаКонфигурации.ПолучитьОбластиДанныхРезультатЗапроса(); + Выборка = ОбластиДанныхРезультатЗапроса.Выбрать(); + Пока Выборка.Следующий() Цикл + ОбластьДанныхСтрока = Строка(Выборка.ОбластьДанных); + ОбластьДанныхСсылка = РегистрыСведений.ОбластиСтатистики.ПолучитьСсылку(ОбластьДанныхСтрока); + Если РегистрыСведений.ОбластиСтатистики.СобиратьСтатистикуКонфигурации(ОбластьДанныхСтрока) Тогда + Попытка + ОбщегоНазначения.УстановитьРазделениеСеанса(Истина, Выборка.ОбластьДанных); + Исключение + Инфо = ИнформацияОбОшибке(); + ЗаписьЖурналаРегистрации(НСтр("ru = 'Центр мониторинга.Статистика конфигурации переопределяемая'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), + УровеньЖурналаРегистрации.Ошибка, + ,, + НСтр("ru = 'Не удалось установить разделение сеанса.Область данных'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()) + " = " + Формат(Выборка.ОбластьДанных, "ЧГ=0") + +Символы.ПС + ПодробноеПредставлениеОшибки(Инфо)); + + ОбщегоНазначения.УстановитьРазделениеСеанса(Ложь); + Продолжить; + КонецПопытки; + СтандартныеПодсистемыСервер.СобратьСтатистикуКонфигурации(); + ОбщегоНазначения.УстановитьРазделениеСеанса(Ложь); + КонецЕсли; + КонецЦикла; + Иначе + СтандартныеПодсистемыСервер.СобратьСтатистикуКонфигурации(); + КонецЕсли; + + Если ОценкаПроизводительностиСуществует Тогда + МодульОценкаПроизводительностиКлиентСервер.ЗакончитьЗамерВремени("ЦентрМониторингаСобратьСтатистикуКонфигурацииСтандартныеПодсистемы", ВремяНачала); + КонецЕсли; + КонецЕсли; + + #КонецОбласти + + // Собирает переопределенную статистику по конфигурации + // в случае существования подсистемы оценки производительности + // замеряет длительность выполнения + // + #Область СтатистикаКонфигурацииПереопределяемая + + Если ПараметрыЦентраМониторинга.РегистрироватьСтатистикуКонфигурации Тогда + Если ОценкаПроизводительностиСуществует Тогда + ВремяНачала = МодульОценкаПроизводительностиКлиентСервер.НачатьЗамерВремени(); + КонецЕсли; + + РазделениеПоОбластямДанныхВключено = РазделениеПоОбластямДанныхВключено(); + Если РазделениеПоОбластямДанныхВключено Тогда + ОбластиДанныхРезультатЗапроса = РегистрыСведений.СтатистикаКонфигурации.ПолучитьОбластиДанныхРезультатЗапроса(); + Выборка = ОбластиДанныхРезультатЗапроса.Выбрать(); + Пока Выборка.Следующий() Цикл + ОбластьДанныхСтрока = Строка(Выборка.ОбластьДанных); + ОбластьДанныхСсылка = РегистрыСведений.ОбластиСтатистики.ПолучитьСсылку(ОбластьДанныхСтрока); + Если РегистрыСведений.ОбластиСтатистики.СобиратьСтатистикуКонфигурации(ОбластьДанныхСтрока) Тогда + Попытка + ОбщегоНазначения.УстановитьРазделениеСеанса(Истина, Выборка.ОбластьДанных); + Исключение + Инфо = ИнформацияОбОшибке(); + ЗаписьЖурналаРегистрации(НСтр("ru = 'Центр мониторинга.Статистика конфигурации переопределяемая'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), + УровеньЖурналаРегистрации.Ошибка, + ,, + НСтр("ru = 'Не удалось установить разделение сеанса.Область данных'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()) + " = " + Формат(Выборка.ОбластьДанных, "ЧГ=0") + +Символы.ПС + ПодробноеПредставлениеОшибки(Инфо)); + + ОбщегоНазначения.УстановитьРазделениеСеанса(Ложь); + Продолжить; + КонецПопытки; + ЦентрМониторингаПереопределяемый.ПриСбореПоказателейСтатистикиКонфигурации(); + ОбщегоНазначения.УстановитьРазделениеСеанса(Ложь); + КонецЕсли; + КонецЦикла; + Иначе + ЦентрМониторингаПереопределяемый.ПриСбореПоказателейСтатистикиКонфигурации(); + КонецЕсли; + + Если ОценкаПроизводительностиСуществует Тогда + МодульОценкаПроизводительностиКлиентСервер.ЗакончитьЗамерВремени("ЦентрМониторингаСобратьСтатистикуКонфигурацииПереопределяемая", ВремяНачала); + КонецЕсли; + КонецЕсли; + + #КонецОбласти +КонецПроцедуры + +#КонецОбласти + +#Область РаботаСПакетыДляОтправки + +Процедура СформироватьПакетДляОтправки() Экспорт + ОценкаПроизводительностиСуществует = ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ОценкаПроизводительности"); + Если ОценкаПроизводительностиСуществует Тогда + МодульОценкаПроизводительностиКлиентСервер = ОбщегоНазначения.ОбщийМодуль("ОценкаПроизводительностиКлиентСервер"); + ВремяНачала = МодульОценкаПроизводительностиКлиентСервер.НачатьЗамерВремени(); + КонецЕсли; + + ТекДата = ТекущаяУниверсальнаяДата(); + + ПараметрыЦентраМониторинга = ПолучитьПараметрыЦентраМониторинга(); + + Параметры = Новый Структура; + Параметры.Вставить("ДатаНачала", ПараметрыЦентраМониторинга.ДатаКрайнегоПакета + 1); + Параметры.Вставить("ДатаОкончания", ТекДата); + Параметры.Вставить("ТопДамповКоличество", 5); + Параметры.Вставить("TopApdex", ПараметрыЦентраМониторинга.TopApdex); + Параметры.Вставить("TopApdexTech", ПараметрыЦентраМониторинга.TopApdexTech); + Параметры.Вставить("ПериодУдаления", ПараметрыЦентраМониторинга.ПериодУдаления); + + НачатьТранзакцию(); + Попытка + JSONСтруктура = СформироватьСтруктуруJSONДляОтправки(Параметры); + РегистрыСведений.ПакетыДляОтправки.ЗаписатьНовыйПакет(ТекДата, JSONСтруктура, ПараметрыЦентраМониторинга.НомерКрайнегоПакета + 1); + + ПараметрыЦентраМониторингаЗапись = Новый Структура("ДатаКрайнегоПакета, НомерКрайнегоПакета"); + ПараметрыЦентраМониторингаЗапись.ДатаКрайнегоПакета = ТекДата; + ПараметрыЦентраМониторингаЗапись.НомерКрайнегоПакета = ПараметрыЦентраМониторинга.НомерКрайнегоПакета + 1; + УстановитьПараметрыЦентраМониторинга(ПараметрыЦентраМониторингаЗапись); + + ЗафиксироватьТранзакцию(); + Исключение + ОтменитьТранзакцию(); + Ошибка = ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); + ЗаписьЖурналаРегистрации(НСтр("ru = 'Центр мониторинга.Формирование пакета для отправки'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), УровеньЖурналаРегистрации.Ошибка, Метаданные.ОбщиеМодули.ЦентрМониторингаСлужебный,,Ошибка); + ВызватьИсключение Ошибка; + КонецПопытки; + + РегистрыСведений.ПакетыДляОтправки.УдалитьСтарыеПакеты(); + + Если ОценкаПроизводительностиСуществует Тогда + МодульОценкаПроизводительностиКлиентСервер.ЗакончитьЗамерВремени("ЦентрМониторингаСформироватьПакетДляОтправки", ВремяНачала); + КонецЕсли; +КонецПроцедуры + +Функция ОтправитьДанныеМониторинга() Экспорт + Параметры = ПолучитьПараметрыСервисаОтправки(); + + ОценкаПроизводительностиСуществует = ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ОценкаПроизводительности"); + Если ОценкаПроизводительностиСуществует Тогда + МодульОценкаПроизводительностиКлиентСервер = ОбщегоНазначения.ОбщийМодуль("ОценкаПроизводительностиКлиентСервер"); + ВремяНачала = МодульОценкаПроизводительностиКлиентСервер.НачатьЗамерВремени(); + КонецЕсли; + + НомераПакетовДляОтправки = РегистрыСведений.ПакетыДляОтправки.ПолучитьНомераПакетов(); + Для Каждого НомерПакета Из НомераПакетовДляОтправки Цикл + Пакет = РегистрыСведений.ПакетыДляОтправки.ПолучитьПакет(НомерПакета); + Если Пакет <> Неопределено Тогда + + HASH = Пакет.ХешПакета; + PACKET_NUMBER = Формат(Пакет.НомерПакета, "ЧН=0; ЧГ=0"); + GUID = Строка(Параметры.ИдентификаторИнформационнойБазы); + + Если Параметры.ЗащищенноеСоединение Тогда + ТипСоединения = "https"; + Иначе + ТипСоединения = "http"; + КонецЕсли; + + АдресРесурса = Параметры.АдресРесурса; + Если Прав(АдресРесурса, 1) <> "/" Тогда + АдресРесурса = АдресРесурса + "/"; + КонецЕсли; + АдресРесурса = АдресРесурса + GUID + "/" + PACKET_NUMBER + "/" + HASH; + + + СтрокаСоединения = ТипСоединения + "://" + Параметры.Сервер + ":" + Параметры.Порт + АдресРесурса; + + HTTPОтвет = HTTPСервисОтправитьКакТекст(Параметры.Сервер, АдресРесурса, Пакет.ТелоПакета, Параметры.Порт, Параметры.ЗащищенноеСоединение); + + Если HTTPОтвет.КодСостояния = 200 Тогда + УстановитьПараметрыОтправки(СтрокаJSONВСтруктуру(HTTPОтвет.Тело)); + РегистрыСведений.ПакетыДляОтправки.УдалитьПакет(НомерПакета); + Иначе + Прервать; + КонецЕсли; + КонецЕсли; + КонецЦикла; + + Если ОценкаПроизводительностиСуществует Тогда + МодульОценкаПроизводительностиКлиентСервер.ЗакончитьЗамерВремени("ЦентрМониторингаОтправитьДанныеМониторинга", ВремяНачала); + КонецЕсли; + + Возврат HTTPОтвет; +КонецФункции + +#КонецОбласти + +#Область РаботаСПараметрамиЦентраМониторинга + +Функция ВыполнятьЗамерыПроизводительности() + ОценкаПроизводительностиСуществует = ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ОценкаПроизводительности"); + Если ОценкаПроизводительностиСуществует Тогда + МодульОценкаПроизводительностиВызовСервераПолныеПрава = ОбщегоНазначения.ОбщийМодуль("ОценкаПроизводительностиВызовСервераПолныеПрава"); + ВыполнятьЗамерыПроизводительности = МодульОценкаПроизводительностиВызовСервераПолныеПрава.ВыполнятьЗамерыПроизводительности(); + Иначе + ВыполнятьЗамерыПроизводительности = Неопределено; + КонецЕсли; + + Возврат ВыполнятьЗамерыПроизводительности; +КонецФункции + +Функция ПолучитьПараметрыПоУмолчанию() Экспорт + ПараметрыКонстанты = Новый Структура; + + // Параметры сбора информации о системе + // + ПараметрыКонстанты.Вставить("ВключитьЦентрМониторинга", Ложь); + + // Признак центра обработки + // Истина - сторонний разработчик + ПараметрыКонстанты.Вставить("ЦентрОбработкиИнформацииОПрограмме", Ложь); + + // Идентификатор информационной базы + // + ПараметрыКонстанты.Вставить("ИдентификаторИнформационнойБазы", Новый УникальныйИдентификатор()); + + // Параметры сбора информации о системе + // + ПараметрыКонстанты.Вставить("РегистрироватьИнформациюОСистеме", Ложь); + + // Параметры сбора информации о версиях подсистем + // + ПараметрыКонстанты.Вставить("РегистрироватьВерсииПодсистем", Ложь); + + // Параметры сбора дампов + // + ПараметрыКонстанты.Вставить("РегистрацияДамповСледующееФормирование", Дата(1,1,1)); + ПараметрыКонстанты.Вставить("РегистрацияДамповПериодФормирования", 600); + ПараметрыКонстанты.Вставить("РегистрироватьДампы", Ложь); + + // Параметры сбора бизнес статистики + // + ПараметрыКонстанты.Вставить("ПериодАгрегацииМалый", 60); + ПараметрыКонстанты.Вставить("ПериодАгрегации", 600); + ПараметрыКонстанты.Вставить("ПериодУдаления", 3600); + ПараметрыКонстанты.Вставить("ГраницаАгрегирования", Дата(1,1,1)); + ПараметрыКонстанты.Вставить("БизнесСтатистикаСледующееФормирование", Дата(1,1,1)); + ПараметрыКонстанты.Вставить("БизнесСтатистикаПериодФормирования", 600); + ПараметрыКонстанты.Вставить("РегистрироватьБизнесСтатистику", Ложь); + + // Параметры сбора статистики конфигурации + // + ПараметрыКонстанты.Вставить("СтатистикаКонфигурацииСледующееФормирование", Дата(1,1,1)); + ПараметрыКонстанты.Вставить("СтатистикаКонфигурацииПериодФормирования", 86400); + ПараметрыКонстанты.Вставить("РегистрироватьСтатистикуКонфигурации", Ложь); + ПараметрыКонстанты.Вставить("РегистрироватьНастройкуКонфигурации", Ложь); + + // Параметры сбора производительности + // ОценкаПроизводительностиВключена = 0 - Выключена + // ОценкаПроизводительностиВключена = 1 - Включена центром мониторинга + // ОценкаПроизводительностиВключена = 2 - Включена оценкой производительности + ПараметрыКонстанты.Вставить("ОценкаПроизводительностиВключена", 0); + ПараметрыКонстанты.Вставить("РегистрироватьПроизводительность", Ложь); + ПараметрыКонстанты.Вставить("TopApdex", 10); + ПараметрыКонстанты.Вставить("РегистрироватьПроизводительностьТехнологическую", Ложь); + ПараметрыКонстанты.Вставить("TopApdexTech", 10); + ПараметрыКонстанты.Вставить("ВыполнятьЗамерыПроизводительности", ВыполнятьЗамерыПроизводительности()); + + // Параметры отправки данных + // + ПараметрыКонстанты.Вставить("ОтправкаДанныхСледующееФормирование", Дата(1,1,1)); + ПараметрыКонстанты.Вставить("ОтправкаДанныхПериодФормирования", 607800); + ПараметрыКонстанты.Вставить("ДатаКрайнегоПакета", Дата(1,1,1)); + ПараметрыКонстанты.Вставить("НомерКрайнегоПакета", 0); + ПараметрыКонстанты.Вставить("ПакетовДляОтправки", 3); + ПараметрыКонстанты.Вставить("Сервер", "pult.1c.ru"); + ПараметрыКонстанты.Вставить("АдресРесурса", "pult/v1/packet/"); + ПараметрыКонстанты.Вставить("Порт", 443); + ПараметрыКонстанты.Вставить("ЗащищенноеСоединение", Истина); + + Возврат ПараметрыКонстанты; +КонецФункции + +Функция ПолучитьПараметрыЦентраМониторинга(Параметры = Неопределено) Экспорт + ПараметрыКонстанты = Константы.ПараметрыЦентраМониторинга.Получить().Получить(); + Если ПараметрыКонстанты = Неопределено Тогда + ПараметрыКонстанты = Новый Структура; + КонецЕсли; + + ПараметрыПоУмолчанию = ПолучитьПараметрыПоУмолчанию(); + + Для Каждого ТекПараметр Из ПараметрыПоУмолчанию Цикл + Если НЕ ПараметрыКонстанты.Свойство(ТекПараметр.Ключ) Тогда + ПараметрыКонстанты.Вставить(ТекПараметр.Ключ, ТекПараметр.Значение); + КонецЕсли; + КонецЦикла; + + Если ПараметрыКонстанты = Неопределено Тогда + ПараметрыКонстанты = ПараметрыПоУмолчанию; + КонецЕсли; + + Если Параметры = Неопределено Тогда + Параметры = ПараметрыКонстанты; + Иначе + Если ТипЗнч(Параметры) = Тип("Структура") Тогда + Для Каждого ТекПараметр Из Параметры Цикл + Параметры[ТекПараметр.Ключ] = ПараметрыКонстанты[ТекПараметр.Ключ]; + КонецЦикла; + ИначеЕсли ТипЗнч(Параметры) = Тип("Строка") Тогда + Параметры = ПараметрыКонстанты[Параметры]; + КонецЕсли; + КонецЕсли; + + ПараметрыКонстанты.Вставить("ВыполнятьЗамерыПроизводительности", ВыполнятьЗамерыПроизводительности()); + + Возврат Параметры; +КонецФункции + +Функция УстановитьПараметрыОтправки(Параметры) Экспорт + ПараметрыОтправки = Новый Структура; + ПараметрыОтправки.Вставить("ОценкаПроизводительностиВключена"); + ПараметрыОтправки.Вставить("ВыполнятьЗамерыПроизводительности"); + ПолучитьПараметрыЦентраМониторинга(ПараметрыОтправки); + + ПараметрыОтправки.Вставить("РегистрироватьИнформациюОСистеме", Ложь); + ПараметрыОтправки.Вставить("РегистрироватьВерсииПодсистем", Ложь); + ПараметрыОтправки.Вставить("РегистрироватьДампы", Ложь); + ПараметрыОтправки.Вставить("РегистрироватьБизнесСтатистику", Ложь); + ПараметрыОтправки.Вставить("РегистрироватьСтатистикуКонфигурации", Ложь); + ПараметрыОтправки.Вставить("РегистрироватьНастройкуКонфигурации", Ложь); + ПараметрыОтправки.Вставить("РегистрироватьПроизводительность", Ложь); + ПараметрыОтправки.Вставить("РегистрироватьПроизводительностьТехнологическую", Ложь); + + СоответствиеПараметров = Новый Структура; + СоответствиеПараметров.Вставить("info", "РегистрироватьИнформациюОСистеме"); + СоответствиеПараметров.Вставить("versions", "РегистрироватьВерсииПодсистем"); + СоответствиеПараметров.Вставить("dumps", "РегистрироватьДампы"); + СоответствиеПараметров.Вставить("business", "РегистрироватьБизнесСтатистику"); + СоответствиеПараметров.Вставить("config", "РегистрироватьСтатистикуКонфигурации"); + СоответствиеПараметров.Вставить("options", "РегистрироватьНастройкуКонфигурации"); + СоответствиеПараметров.Вставить("perf", "РегистрироватьПроизводительность"); + СоответствиеПараметров.Вставить("internal_perf", "РегистрироватьПроизводительностьТехнологическую"); + + Настройки = Параметры.packetProperties; + Для Каждого ТекНастройка Из Настройки Цикл + Если СоответствиеПараметров.Свойство(ТекНастройка) Тогда + Ключ = СоответствиеПараметров[ТекНастройка]; + + Если ПараметрыОтправки.Свойство(Ключ) Тогда + ПараметрыОтправки[Ключ] = Истина; + КонецЕсли; + КонецЕсли; + КонецЦикла; + + Если Параметры.Свойство("settings") Тогда + НастройкиНовые = Параметры.settings; + НастройкиНовые = СтрЗаменить(НастройкиНовые, ";", Символы.ПС); + НастройкиПоУмолчанию = ПолучитьПараметрыПоУмолчанию(); + Для ТекСтрока = 1 По СтрЧислоСтрок(НастройкиНовые) Цикл + ТекНастройка = СтрПолучитьСтроку(НастройкиНовые, ТекСтрока); + ТекНастройка = СтрЗаменить(ТекНастройка, "=", Символы.ПС); + + Ключ = СтрПолучитьСтроку(ТекНастройка, 1); + Значение = СтрПолучитьСтроку(ТекНастройка, 2); + + Если НастройкиПоУмолчанию.Свойство(Ключ) Тогда + Если ТипЗнч(НастройкиПоУмолчанию[Ключ]) = Тип("Число") Тогда + ПараметрыОтправки.Вставить(Ключ, Число(Значение)); + ИначеЕсли ТипЗнч(НастройкиПоУмолчанию[Ключ]) = Тип("Строка") Тогда + ПараметрыОтправки.Вставить(Ключ, Значение); + ИначеЕсли ТипЗнч(НастройкиПоУмолчанию[Ключ]) = Тип("Булево") Тогда + ПараметрыОтправки.Вставить(Ключ, Булево(Значение)); + ИначеЕсли ТипЗнч(НастройкиПоУмолчанию[Ключ]) = Тип("Дата") Тогда + ПараметрыОтправки.Вставить(Ключ, Дата(Значение)); + КонецЕсли; + КонецЕсли; + КонецЦикла; + КонецЕсли; + + Если Параметры.Свойство("deliveryIntervalHours") Тогда + ПараметрыОтправки.Вставить("ОтправкаДанныхПериодФормирования", Параметры.deliveryIntervalHours * 60 * 60); + КонецЕсли; + + Если ПараметрыОтправки["РегистрироватьПроизводительность"] ИЛИ ПараметрыОтправки["РегистрироватьПроизводительностьТехнологическую"] Тогда + // Подсистемы оценки производительности нет. + Если ПараметрыОтправки.ВыполнятьЗамерыПроизводительности = Неопределено Тогда + ПараметрыОтправки.ОценкаПроизводительностиВключена = 0; + // Выключена. + ИначеЕсли ПараметрыОтправки.ОценкаПроизводительностиВключена = 0 И НЕ ПараметрыОтправки.ВыполнятьЗамерыПроизводительности Тогда + ПараметрыОтправки.ОценкаПроизводительностиВключена = 1; + // Включена оценкой производительности. + ИначеЕсли ПараметрыОтправки.ОценкаПроизводительностиВключена = 0 И ПараметрыОтправки.ВыполнятьЗамерыПроизводительности Тогда + ПараметрыОтправки.ОценкаПроизводительностиВключена = 2; + // Включена центром мониторинга. + ИначеЕсли ПараметрыОтправки.ОценкаПроизводительностиВключена = 1 И НЕ ПараметрыОтправки.ВыполнятьЗамерыПроизводительности Тогда + ПараметрыОтправки.ОценкаПроизводительностиВключена = 1; + // Включена центром мониторинга. + ИначеЕсли ПараметрыОтправки.ОценкаПроизводительностиВключена = 1 И ПараметрыОтправки.ВыполнятьЗамерыПроизводительности Тогда + ПараметрыОтправки.ОценкаПроизводительностиВключена = 1; + // Включен был оценкой производительности, но потом выключен. + ИначеЕсли ПараметрыОтправки.ОценкаПроизводительностиВключена = 2 И НЕ ПараметрыОтправки.ВыполнятьЗамерыПроизводительности Тогда + ПараметрыОтправки.ОценкаПроизводительностиВключена = 0; + // Включен оценкой производительности. + ИначеЕсли ПараметрыОтправки.ОценкаПроизводительностиВключена = 2 И ПараметрыОтправки.ВыполнятьЗамерыПроизводительности Тогда + ПараметрыОтправки.ОценкаПроизводительностиВключена = 2; + КонецЕсли; + Иначе + // Подсистемы оценки производительности нет. + Если ПараметрыОтправки.ВыполнятьЗамерыПроизводительности = Неопределено Тогда + ПараметрыОтправки.ОценкаПроизводительностиВключена = 0; + // Выключена. + ИначеЕсли ПараметрыОтправки.ОценкаПроизводительностиВключена = 0 И НЕ ПараметрыОтправки.ВыполнятьЗамерыПроизводительности Тогда + ПараметрыОтправки.ОценкаПроизводительностиВключена = 0; + // Включена оценкой производительности. + ИначеЕсли ПараметрыОтправки.ОценкаПроизводительностиВключена = 0 И ПараметрыОтправки.ВыполнятьЗамерыПроизводительности Тогда + ПараметрыОтправки.ОценкаПроизводительностиВключена = 2; + // Включена центром мониторинга. + ИначеЕсли ПараметрыОтправки.ОценкаПроизводительностиВключена = 1 И НЕ ПараметрыОтправки.ВыполнятьЗамерыПроизводительности Тогда + ПараметрыОтправки.ОценкаПроизводительностиВключена = 0; + // Включена центром мониторинга. + ИначеЕсли ПараметрыОтправки.ОценкаПроизводительностиВключена = 1 И ПараметрыОтправки.ВыполнятьЗамерыПроизводительности Тогда + ПараметрыОтправки.ОценкаПроизводительностиВключена = 0; + // Включен был оценкой производительности, но потом выключен. + ИначеЕсли ПараметрыОтправки.ОценкаПроизводительностиВключена = 2 И НЕ ПараметрыОтправки.ВыполнятьЗамерыПроизводительности Тогда + ПараметрыОтправки.ОценкаПроизводительностиВключена = 0; + // Включен оценкой производительности. + ИначеЕсли ПараметрыОтправки.ОценкаПроизводительностиВключена = 2 И ПараметрыОтправки.ВыполнятьЗамерыПроизводительности Тогда + ПараметрыОтправки.ОценкаПроизводительностиВключена = 2; + КонецЕсли; + КонецЕсли; + + НачатьТранзакцию(); + Попытка + Если ПараметрыОтправки.ОценкаПроизводительностиВключена = 0 И НЕ ПараметрыОтправки.ВыполнятьЗамерыПроизводительности = Неопределено Тогда + МодульОценкаПроизводительностиВызовСервераПолныеПрава = ОбщегоНазначения.ОбщийМодуль("ОценкаПроизводительностиВызовСервераПолныеПрава"); + МодульОценкаПроизводительностиВызовСервераПолныеПрава.ВключитьЗамерыПроизводительности(Ложь); + ИначеЕсли ПараметрыОтправки.ОценкаПроизводительностиВключена = 1 И НЕ ПараметрыОтправки.ВыполнятьЗамерыПроизводительности = Неопределено Тогда + МодульОценкаПроизводительностиВызовСервераПолныеПрава = ОбщегоНазначения.ОбщийМодуль("ОценкаПроизводительностиВызовСервераПолныеПрава"); + МодульОценкаПроизводительностиВызовСервераПолныеПрава.ВключитьЗамерыПроизводительности(Истина); + КонецЕсли; + + УстановитьПараметрыЦентраМониторинга(ПараметрыОтправки); + ЗафиксироватьТранзакцию(); + + Возврат ПараметрыОтправки; + Исключение + ОтменитьТранзакцию(); + Ошибка = ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); + ЗаписьЖурналаРегистрации(НСтр("ru = 'Центр мониторинга.Установка параметров отправки'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), УровеньЖурналаРегистрации.Ошибка, Метаданные.ОбщиеМодули.ЦентрМониторингаСлужебный,,Ошибка); + ВызватьИсключение Ошибка; + КонецПопытки; +КонецФункции + +Функция УстановитьПараметрыЦентраМониторинга(НовыеПараметры) Экспорт + Блокировка = Новый БлокировкаДанных; + ЭлементБлокировки = Блокировка.Добавить("Константа.ПараметрыЦентраМониторинга"); + ЭлементБлокировки.Режим = РежимБлокировкиДанных.Исключительный; + + НачатьТранзакцию(); + + Попытка + Блокировка.Заблокировать(); + Параметры = ПолучитьПараметрыЦентраМониторинга(); + + Если НовыеПараметры.Свойство("ВыполнятьЗамерыПроизводительности") Тогда + НовыеПараметры.Удалить("ВыполнятьЗамерыПроизводительности"); + КонецЕсли; + + Для Каждого ТекПараметр Из НовыеПараметры Цикл + Если НЕ Параметры.Свойство(ТекПараметр.Ключ) Тогда + Параметры.Вставить(ТекПараметр.Ключ); + КонецЕсли; + + Параметры[ТекПараметр.Ключ] = ТекПараметр.Значение; + КонецЦикла; + + Хранилище = Новый ХранилищеЗначения(Параметры); + + Константы.ПараметрыЦентраМониторинга.Установить(Хранилище); + + ЗафиксироватьТранзакцию(); + Исключение + ОтменитьТранзакцию(); + Ошибка = ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); + ЗаписьЖурналаРегистрации(НСтр("ru = 'Центр мониторинга.Установка параметров центра мониторинга'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), УровеньЖурналаРегистрации.Ошибка, Метаданные.ОбщиеМодули.ЦентрМониторингаСлужебный,,Ошибка); + ВызватьИсключение Ошибка; + КонецПопытки; +КонецФункции + +Функция УдалитьПараметрыЦентраМониторинга() Экспорт + Блокировка = Новый БлокировкаДанных; + ЭлементБлокировки = Блокировка.Добавить("Константа.ПараметрыЦентраМониторинга"); + ЭлементБлокировки.Режим = РежимБлокировкиДанных.Исключительный; + + НачатьТранзакцию(); + + Попытка + Блокировка.Заблокировать(); + Параметры = Новый Структура; + + + Хранилище = Новый ХранилищеЗначения(Параметры); + + Константы.ПараметрыЦентраМониторинга.Установить(Хранилище); + + ЗафиксироватьТранзакцию(); + Исключение + ОтменитьТранзакцию(); + Ошибка = ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); + ЗаписьЖурналаРегистрации(НСтр("ru = 'Центр мониторинга.Удалить параметры центра мониторинга'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), УровеньЖурналаРегистрации.Ошибка, Метаданные.ОбщиеМодули.ЦентрМониторингаСлужебный,,Ошибка); + ВызватьИсключение Ошибка; + КонецПопытки; +КонецФункции + +Функция УстановитьПараметрЦентраМониторинга(Параметр, Значение) Экспорт + + Блокировка = Новый БлокировкаДанных; + ЭлементБлокировки = Блокировка.Добавить("Константа.ПараметрыЦентраМониторинга"); + ЭлементБлокировки.Режим = РежимБлокировкиДанных.Исключительный; + + НачатьТранзакцию(); + Попытка + Блокировка.Заблокировать(); + Параметры = ПолучитьПараметрыЦентраМониторинга(); + + Если НЕ Параметры.Свойство(Параметр) Тогда + Параметры.Вставить(Параметр); + КонецЕсли; + + Параметры[Параметр] = Значение; + + Хранилище = Новый ХранилищеЗначения(Параметры); + + Константы.ПараметрыЦентраМониторинга.Установить(Хранилище); + + ЗафиксироватьТранзакцию(); + Исключение + ОтменитьТранзакцию(); + Ошибка = ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); + ЗаписьЖурналаРегистрации(НСтр("ru = 'Центр мониторинга.Установка параметров центра мониторинга'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), УровеньЖурналаРегистрации.Ошибка, Метаданные.ОбщиеМодули.ЦентрМониторингаСлужебный,,Ошибка); + ВызватьИсключение Ошибка; + КонецПопытки; +КонецФункции + +Функция ИспользоватьЦентрМониторинга() Экспорт + ПараметрыЦентраМониторинга = Новый Структура("ВключитьЦентрМониторинга, ЦентрОбработкиИнформацииОПрограмме"); + + ПолучитьПараметрыЦентраМониторинга(ПараметрыЦентраМониторинга); + + Возврат ПараметрыЦентраМониторинга.ВключитьЦентрМониторинга ИЛИ ПараметрыЦентраМониторинга.ЦентрОбработкиИнформацииОПрограмме; +КонецФункции + +Функция ПолучитьПараметрыСервисаОтправки() Экспорт + ПараметрыСервиса = Новый Структура; + + ПараметрыСервиса.Вставить("ВключитьЦентрМониторинга"); + ПараметрыСервиса.Вставить("ЦентрОбработкиИнформацииОПрограмме"); + ПараметрыСервиса.Вставить("ИдентификаторИнформационнойБазы"); + ПараметрыСервиса.Вставить("Сервер"); + ПараметрыСервиса.Вставить("АдресРесурса"); + ПараметрыСервиса.Вставить("Порт"); + ПараметрыСервиса.Вставить("ЗащищенноеСоединение"); + + ПолучитьПараметрыЦентраМониторинга(ПараметрыСервиса); + + Если ПараметрыСервиса.ВключитьЦентрМониторинга И НЕ ПараметрыСервиса.ЦентрОбработкиИнформацииОПрограмме Тогда + ПараметрыСервисаПоУмолчанию = ПолучитьПараметрыПоУмолчанию(); + + ПараметрыСервиса.Вставить("Сервер", ПараметрыСервисаПоУмолчанию.Сервер); + ПараметрыСервиса.Вставить("АдресРесурса", ПараметрыСервисаПоУмолчанию.АдресРесурса); + ПараметрыСервиса.Вставить("Порт", ПараметрыСервисаПоУмолчанию.Порт); + ПараметрыСервиса.Вставить("ЗащищенноеСоединение", ПараметрыСервисаПоУмолчанию.ЗащищенноеСоединение); + КонецЕсли; + + ПараметрыСервиса.Удалить("ВключитьЦентрМониторинга"); + ПараметрыСервиса.Удалить("ЦентрОбработкиИнформацииОПрограмме"); + + Возврат ПараметрыСервиса; +КонецФункции + +#КонецОбласти + +#Область РаботаСФайломНастроек + +Функция ПолучитьКаталогДампов() Экспорт + КаталогНастроек = ПолучитьКаталогНастроекТехнологическогоЖурнала(); + КаталогДампов = НайтиКаталогДампов(КаталогНастроек); + + Возврат КаталогДампов; +КонецФункции + +Функция СформироватьПутьСРазделителем(Путь) + Если ЗначениеЗаполнено(Путь) Тогда + РазделительПути = ПолучитьРазделительПутиСервера(); + Если Прав(Путь, 1) <> РазделительПути Тогда + Путь = Путь + РазделительПути; + КонецЕсли; + КонецЕсли; + + Возврат Путь; +КонецФункции + +Функция НайтиКаталогДампов(КаталогНастроек) + КаталогДампов = Новый Структура("Путь, УдалятьДампы", "", Ложь); + + ИмяФайлаНастроек = "logcfg.xml"; + ПутьКаталога = СформироватьПутьСРазделителем(КаталогНастроек.Путь); + + Файл = Новый Файл(ПутьКаталога + ИмяФайлаНастроек); + Если Файл.Существует() Тогда + ЧтениеXML = Новый ЧтениеXML; + ЧтениеXML.ОткрытьФайл(Файл.ПолноеИмя, Новый ПараметрыЧтенияXML(,,,,,,,Истина, Истина)); + Префикс = ?(ЗначениеЗаполнено(ЧтениеXML.Префикс), ЧтениеXML.Префикс + ":", ЧтениеXML.Префикс); + Пока ЧтениеXML.Прочитать() Цикл + Если ЧтениеXML.ТипУзла = ТипУзлаXML.НачалоЭлемента И ЧтениеXML.ИмеетИмя И ВРЕГ(ЧтениеXML.Имя) = "DUMP" Тогда + ПараметрыДампов = Новый Структура; + Если ЧтениеXML.КоличествоАтрибутов() > 0 Тогда + Пока ЧтениеXML.ПрочитатьАтрибут() Цикл + ПараметрыДампов.Вставить(ЧтениеXML.ЛокальноеИмя, ЧтениеXML.Значение); + КонецЦикла; + КонецЕсли; + КонецЕсли; + КонецЦикла; + + КаталогДампов.Путь = СформироватьПутьСРазделителем(ПараметрыДампов.Location); + Если ПараметрыДампов.type = "0" ИЛИ Найти(КаталогДампов.Путь, "80af5716-b134-4b1c-a38d-4658d1ac4196") > 0 Тогда + КаталогДампов.УдалятьДампы = Истина; + КонецЕсли; + Иначе + КаталогДампов.Путь = СоздатьФайлНастроекСбораДампов(ПутьКаталога); + КаталогДампов.УдалятьДампы = Истина; + КонецЕсли; + + Возврат КаталогДампов; +КонецФункции + +Функция СоздатьФайлНастроекСбораДампов(ПутьКаталога) + ИмяФайлаНастроек = "logcfg.xml"; + + КаталогДампов = СформироватьПутьСРазделителем(СформироватьПутьСРазделителем(КаталогВременныхФайлов() + "Dumps") + "80af5716-b134-4b1c-a38d-4658d1ac4196"); + + ЗаписьXML = Новый ЗаписьXML; + ЗаписьXML.ОткрытьФайл(ПутьКаталога + ИмяФайлаНастроек); + СборДампов = + "<config xmlns=""http://v8.1c.ru/v8/tech-log""> + | <dump location=""" + КаталогДампов + """ create=""1"" type=""0""/> + |</config>"; + ЗаписьXML.ЗаписатьБезОбработки(СборДампов); + ЗаписьXML.Закрыть(); + + Возврат КаталогДампов; +КонецФункции + +Функция ПолучитьКаталогНастроекТехнологическогоЖурнала() + КаталогНастроек = Новый Структура("Путь, Существует, ОписаниеОшибки", "", Ложь, ""); + + // Каталоги в которых осуществляли поиск, необходим как защита от зацикливания. + КаталогиНастроек = Новый Массив; + + ИмяФайлаНастроек = "logcfg.xml"; + ИмяФайлаКонфигурацииНастроек = "conf.cfg"; + + КаталогПрограммы = СформироватьПутьСРазделителем(КаталогПрограммы()); + + ПоискКаталога = Истина; + Счетчик = 0; + ПутьКаталога = СформироватьПутьСРазделителем(КаталогПрограммы + "conf"); + Пока ПоискКаталога = Истина Цикл + // Проверяем, не искали ли в текущем каталоге (защита от зацикливания). + Если КаталогиНастроек.Найти(ПутьКаталога) <> Неопределено Тогда + КаталогНастроек.Путь = ""; + КаталогНастроек.Существует = Ложь; + КаталогНастроек.ОписаниеОшибки = НСтр("ru = 'Обнаружена циклическая ссылка'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()); + + ПоискКаталога = Ложь; + Иначе + ПолноеИмяФайлаНастроек = ПутьКаталога + ИмяФайлаНастроек; + ФайлНастроек = Новый Файл(ПолноеИмяФайлаНастроек); + Если ФайлНастроек.Существует() Тогда + КаталогНастроек.Путь = ПутьКаталога; + КаталогНастроек.Существует = Истина; + КаталогНастроек.ОписаниеОшибки = ""; + + ПоискКаталога = Ложь; + Иначе + КаталогиНастроек.Добавить(ПутьКаталога); + + ПолноеИмяФайлаКонфигурацииНастроек = ПутьКаталога + ИмяФайлаКонфигурацииНастроек; + ФайлКонфигурацииНастроек = Новый Файл(ПолноеИмяФайлаКонфигурацииНастроек); + Если ФайлКонфигурацииНастроек.Существует() Тогда + ПутьКаталога = ПолучитьКаталогИзФайлаКонфигурацииНастроек(ФайлКонфигурацииНастроек); + Если ПутьКаталога.Существует Тогда + ПутьКаталога = СформироватьПутьСРазделителем(ПутьКаталога.Путь); + Иначе + КаталогНастроек.Путь = ПутьКаталога.Путь; + КаталогНастроек.Существует = ПутьКаталога.Существует; + КаталогНастроек.ОписаниеОшибки = ПутьКаталога.ОписаниеОшибки; + + ПоискКаталога = Ложь; + КонецЕсли; + Иначе + КаталогНастроек.Путь = ""; + КаталогНастроек.Существует = Ложь; + КаталогНастроек.ОписаниеОшибки = НСтр("ru = 'Не найден файл конфигурации настроек в каталоге'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()) + " " + ПутьКаталога; + + ПоискКаталога = Ложь; + КонецЕсли; + КонецЕсли; + КонецЕсли; + + + Счетчик = Счетчик + 1; + + Если Счетчик >= 100 Тогда + ПоискКаталога = Ложь; + КонецЕсли; + КонецЦикла; + + Возврат КаталогНастроек; +КонецФункции + +Функция ПолучитьКаталогИзФайлаКонфигурацииНастроек(ФайлКонфигурацииНастроек) + КаталогНастроек = Новый Структура("Путь, Существует, ОписаниеОшибки", "", Ложь, ""); + + СтрокаПоиска = "ConfLocation="; + ДлинаСтрокиПоиска = СтрДлина(СтрокаПоиска); + + Текст = Новый ЧтениеТекста(ФайлКонфигурацииНастроек.ПолноеИмя); + Данные = Текст.Прочитать(); + + ИндексПоиска = Найти(Данные, СтрокаПоиска); + Если ИндексПоиска > 0 Тогда + ДанныеБуфер = Прав(Данные, СтрДлина(Данные) - (ИндексПоиска + ДлинаСтрокиПоиска - 1)); + ИндексПоиска = Найти(ДанныеБуфер, Символы.ПС); + Если ИндексПоиска > 0 Тогда + КаталогНастроек.Путь = СформироватьПутьСРазделителем(Лев(ДанныеБуфер, ИндексПоиска - 1)); + Иначе + КаталогНастроек.Путь = СформироватьПутьСРазделителем(ДанныеБуфер); + КонецЕсли; + КаталогНастроек.Существует = Истина; + КаталогНастроек.ОписаниеОшибки = ""; + Иначе + КаталогНастроек.Путь = СформироватьПутьСРазделителем(ФайлКонфигурацииНастроек.Путь); + КаталогНастроек.Существует = Ложь; + КаталогНастроек.ОписаниеОшибки = НСтр("ru = 'Не найдена секция ConfLocation в файле'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()) + " " + ФайлКонфигурацииНастроек.ПолноеИмя; + КонецЕсли; + + Возврат КаталогНастроек; +КонецФункции + +#КонецОбласти + +#Область РаботаСДампами + +Функция ПолучитьСтруктуруДампа(Знач ИмяФайла) Экспорт + ИмяФайла = СтрЗаменить(ИмяФайла, "_", Символы.ПС); + + СтруктураДампа = Новый Структура; + СтруктураДампа.Вставить("Процесс", СтрПолучитьСтроку(ИмяФайла, 1)); + СтруктураДампа.Вставить("ВерсияПлатформы", СтрПолучитьСтроку(ИмяФайла, 2)); + СтруктураДампа.Вставить("Смещение", СтрПолучитьСтроку(ИмяФайла, 3)); + + Возврат СтруктураДампа; +КонецФункции + +Функция ВерсияПлатформыВЧисло(Версия) Экспорт + ВерсияПлатформы = СтрЗаменить(Версия, ".", Символы.ПС); + ВерсияПлатформыЧисло = Число(Лев(СтрПолучитьСтроку(ВерсияПлатформы, 1) + "000000", 6) + + Лев(СтрПолучитьСтроку(ВерсияПлатформы, 2) + "000000", 6) + + Лев(СтрПолучитьСтроку(ВерсияПлатформы, 3) + "000000", 6) + + Лев(СтрПолучитьСтроку(ВерсияПлатформы, 4) + "000000", 6)); + + Возврат ВерсияПлатформыЧисло; +КонецФункции + +#КонецОбласти + +#Область РаботаССистемнойИнформацией +Функция ПолучитьСистемнуюИнформацию() Экспорт + СисИнфо = Новый СистемнаяИнформация; + + Результат = Новый Структура; + Результат.Вставить("ИмяКомпьютера", ХешMD5(ИмяКомпьютера())); + Результат.Вставить("ВерсияОС", Строка(СисИнфо.ВерсияОС)); + Результат.Вставить("ВерсияПриложения", Строка(СисИнфо.ВерсияПриложения)); + Результат.Вставить("ИдентификаторКлиента", Строка(СисИнфо.ИдентификаторКлиента)); + Результат.Вставить("ОперативнаяПамять", Строка(СисИнфо.ОперативнаяПамять)); + Результат.Вставить("Процессор", Строка(СисИнфо.Процессор)); + Результат.Вставить("ТипПлатформы", Строка(СисИнфо.ТипПлатформы)); + Результат.Вставить("ТекущийЯзык", Строка(ТекущийЯзык())); + Результат.Вставить("ТекущийКодЛокализации", Строка(ТекущийКодЛокализации())); + Результат.Вставить("ТекущийЯзыкСистемы", Строка(ТекущийЯзыкСистемы())); + Результат.Вставить("ТекущийРежимЗапуска", Строка(ТекущийРежимЗапуска())); + Результат.Вставить("ЧасовойПоясСеанса", Строка(ЧасовойПоясСеанса())); + + Возврат Результат; +КонецФункции + +Функция ВерсииПодсистем() Экспорт + + Запрос = Новый Запрос; + Запрос.Текст = + "ВЫБРАТЬ + | ВерсииПодсистем.ИмяПодсистемы КАК ИмяПодсистемы, + | ВерсииПодсистем.Версия КАК Версия + |ИЗ + | РегистрСведений.ВерсииПодсистем КАК ВерсииПодсистем"; + + Результат = Запрос.Выполнить(); + + Подсистемы = Новый Структура; + Выборка = Результат.Выбрать(); + Пока Выборка.Следующий() Цикл + Подсистемы.Вставить(Выборка.ИмяПодсистемы, Выборка.Версия); + КонецЦикла; + + Возврат Подсистемы; +КонецФункции + +#КонецОбласти + +#Область РаботаВРежимеРазделенияПоОбластямДанных + +Функция РазделениеПоОбластямДанныхВключено() Экспорт + РазделениеПоОбластямДанныхВключено = ОбщегоНазначенияПовтИсп.РазделениеВключено(); + + Возврат РазделениеПоОбластямДанныхВключено; +КонецФункции + +#КонецОбласти + +#Область РаботаВРежимеРИБ + +Функция ЭтоГлавныйУзел() Экспорт + УстановитьПривилегированныйРежим(Истина); + + Возврат НЕ ПланыОбмена.ГлавныйУзел() <> Неопределено; +КонецФункции + +#КонецОбласти + +#Область ОбщиеФункции + +Функция ХешMD5(Данные) + Хеш = Новый ХешированиеДанных(ХешФункция.MD5); + Хеш.Добавить(Данные); + ХешСумма = СтрЗаменить(Строка(Хеш.ХешСумма), " ", ""); + + Возврат ХешСумма; +КонецФункции + +Функция СобытиеЖурналаРегистрацииЦентрМониторингаУдалениеДампа() Экспорт + Возврат НСтр("ru = 'Центр мониторинга.Удаление дампа'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()); +КонецФункции + +Функция СобытиеЖурналаРегистрацииЦентрМониторингаРазобратьБуферОперацийСтатистики() Экспорт + Возврат НСтр("ru = 'Центр мониторинга.Разобрать буфер операций статистики'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()); +КонецФункции +#КонецОбласти + +Процедура ПервоначальноеЗаполнение() Экспорт + + ТекДата = ТекущаяУниверсальнаяДата(); + + УдалитьПараметрыЦентраМониторинга(); + ПараметрыЦентраМониторинга = ПолучитьПараметрыПоУмолчанию(); + + Если ОбщегоНазначения.ИнформационнаяБазаФайловая() Тогда + ПараметрыЦентраМониторинга.БизнесСтатистикаПериодФормирования = 3600; + КонецЕсли; + + ПараметрыЦентраМониторинга.РегистрацияДамповСледующееФормирование = ТекДата + ПараметрыЦентраМониторинга.РегистрацияДамповПериодФормирования; + ПараметрыЦентраМониторинга.БизнесСтатистикаСледующееФормирование = ТекДата + ПараметрыЦентраМониторинга.БизнесСтатистикаПериодФормирования; + ПараметрыЦентраМониторинга.СтатистикаКонфигурацииСледующееФормирование = ТекДата + ПараметрыЦентраМониторинга.СтатистикаКонфигурацииПериодФормирования; + + ГСЧ = Новый ГенераторСлучайныхЧисел(ТекущаяУниверсальнаяДатаВМиллисекундах()); + ДельтаОтправки = ГСЧ.СлучайноеЧисло(0, 86400); + ПараметрыЦентраМониторинга.ОтправкаДанныхСледующееФормирование = ТекДата + ДельтаОтправки; + + ПараметрыЦентраМониторинга.ПериодАгрегацииМалый = 600; + ПараметрыЦентраМониторинга.ПериодАгрегации = 3600; + ПараметрыЦентраМониторинга.ПериодУдаления = 86400; + + + УстановитьПараметрыЦентраМониторинга(ПараметрыЦентраМониторинга); +КонецПроцедуры + +#КонецОбласти diff --git a/SSL/src/CommonModules/ЦентрМониторингаСлужебный/ЦентрМониторингаСлужебный.mdo b/SSL/src/CommonModules/ЦентрМониторингаСлужебный/ЦентрМониторингаСлужебный.mdo new file mode 100644 index 000000000..b75da02b7 --- /dev/null +++ b/SSL/src/CommonModules/ЦентрМониторингаСлужебный/ЦентрМониторингаСлужебный.mdo @@ -0,0 +1,11 @@ +<?xml version="1.0" encoding="UTF-8"?> +<mdclass:CommonModule xmlns:mdclass="http://g5.1c.ru/v8/dt/metadata/mdclass" uuid="588bd1b2-ee61-4a05-83cd-efb1b82ccb44"> + <name>ЦентрМониторингаСлужебный</name> + <synonym> + <key>ru</key> + <value>Центр мониторинга служебный</value> + </synonym> + <server>true</server> + <externalConnection>true</externalConnection> + <clientOrdinaryApplication>true</clientOrdinaryApplication> +</mdclass:CommonModule> diff --git a/SSL/src/CommonModules/ЭлектроннаяПодпись/Module.bsl b/SSL/src/CommonModules/ЭлектроннаяПодпись/Module.bsl index 0182a5899..306022956 100644 --- a/SSL/src/CommonModules/ЭлектроннаяПодпись/Module.bsl +++ b/SSL/src/CommonModules/ЭлектроннаяПодпись/Module.bsl @@ -89,12 +89,17 @@ // ОписаниеОшибки - Null - вызвать исключение при ошибке проверки. // - Строка - содержит описание ошибки, если произошла ошибка. // +// НаДату - Дата - проверить сертификат на указанную дату, +// если дату не удалось извлечь из подписи. +// Если параметр не заполнен, тогда проверять на текущую дату сеанса, +// если дату не удалось извлечь из подписи. +// // Возвращаемое значение: // Булево - Истина, если проверка выполнена успешно. // - Ложь, если не удалось получить менеджер криптографии (когда не указан), // или произошла ошибка указанная в параметре ОписаниеОшибки. // -Функция ПроверитьПодпись(МенеджерКриптографии, ИсходныеДанные, Подпись, ОписаниеОшибки = Null) Экспорт +Функция ПроверитьПодпись(МенеджерКриптографии, ИсходныеДанные, Подпись, ОписаниеОшибки = Null, НаДату = Неопределено) Экспорт МенеджерКриптографииДляПроверки = МенеджерКриптографии; Если МенеджерКриптографииДляПроверки = Неопределено Тогда @@ -125,11 +130,12 @@ Возврат Ложь; КонецПопытки; - Если Не ПроверитьСертификат(МенеджерКриптографииДляПроверки, Сертификат, ОписаниеОшибки) Тогда - Возврат Ложь; + ДатаПодписания = ДатаПодписания(ПодписьДляПроверки); + Если Не ЗначениеЗаполнено(ДатаПодписания) Тогда + ДатаПодписания = НаДату; КонецЕсли; - Возврат Истина; + Возврат ПроверитьСертификат(МенеджерКриптографииДляПроверки, Сертификат, ОписаниеОшибки, ДатаПодписания); КонецФункции @@ -146,11 +152,15 @@ // ОписаниеОшибки - Null - вызвать исключение при ошибке проверки. // - Строка - содержит описание ошибки, если произошла ошибка. // +// НаДату - Дата - проверить сертификат на указанную дату. +// Если параметр не указан или указана пустая дата, +// тогда проверять на текущую дату сеанса. +// // Возвращаемое значение: // Булево - Истина, если проверка выполнена успешно, // - Ложь, если не удалось получить менеджер криптографии (когда не указан). // -Функция ПроверитьСертификат(МенеджерКриптографии, Сертификат, ОписаниеОшибки = Null) Экспорт +Функция ПроверитьСертификат(МенеджерКриптографии, Сертификат, ОписаниеОшибки = Null, НаДату = Неопределено) Экспорт МенеджерКриптографииДляПроверки = МенеджерКриптографии; @@ -171,7 +181,8 @@ СертификатДляПроверки = Новый СертификатКриптографии(СертификатДляПроверки); КонецЕсли; - РежимыПроверкиСертификата = ЭлектроннаяПодписьСлужебныйКлиентСервер.РежимыПроверкиСертификата(); + РежимыПроверкиСертификата = ЭлектроннаяПодписьСлужебныйКлиентСервер.РежимыПроверкиСертификата( + ЗначениеЗаполнено(НаДату)); Попытка МенеджерКриптографииДляПроверки.ПроверитьСертификат(СертификатДляПроверки, РежимыПроверкиСертификата); @@ -180,6 +191,12 @@ Возврат Ложь; КонецПопытки; + ОшибкаПросрочки = ЭлектроннаяПодписьСлужебныйКлиентСервер.СертификатПросрочен(СертификатДляПроверки, НаДату); + Если ЗначениеЗаполнено(ОшибкаПросрочки) Тогда + ОписаниеОшибки = ОшибкаПросрочки; + Возврат Ложь; + КонецЕсли; + Возврат Истина; КонецФункции @@ -421,67 +438,23 @@ // Функция ДатаПодписания(Подпись, ПривестиКЧасовомуПоясуСеанса = Истина) Экспорт - ДатаПодписания = Неопределено; + ДатаПодписания = ЭлектроннаяПодписьСлужебныйКлиентСервер.ДатаПодписанияУниверсальная(Подпись); - ИмяВременногоФайла = ПолучитьИмяВременногоФайла(); - Подпись.Записать(ИмяВременногоФайла); + Если ДатаПодписания = Неопределено Тогда + Возврат Неопределено; + КонецЕсли; - ЧтениеТекста = Новый ЧтениеТекста(ИмяВременногоФайла); - Символ = ЧтениеТекста.Прочитать(1); - - Пока Символ <> Неопределено Цикл - Если КодСимвола(Символ) = 15 Тогда - Символ = ЧтениеТекста.Прочитать(2); - Если КодСимвола(Символ, 1) = 23 И КодСимвола(Символ, 2) = 13 Тогда - ДатаСтрокой = ЧтениеТекста.Прочитать(12); - ДатаПодписания = Дата("20" + ДатаСтрокой); - Если ПривестиКЧасовомуПоясуСеанса Тогда - ДатаПодписания = МестноеВремя(ДатаПодписания, ЧасовойПоясСеанса()); - КонецЕсли; - Прервать; - КонецЕсли; - КонецЕсли; - Символ = ЧтениеТекста.Прочитать(1); - КонецЦикла; - - ЧтениеТекста.Закрыть(); - УдалитьФайлы(ИмяВременногоФайла); + Если ПривестиКЧасовомуПоясуСеанса Тогда + ДатаПодписания = МестноеВремя(ДатаПодписания, ЧасовойПоясСеанса()); + КонецЕсли; Возврат ДатаПодписания; КонецФункции -// Устарела. Следует использовать процедуру УдалитьПодпись. -Процедура УдалитьПодписи(ОбъектСсылка, ТаблицаВыделенныеСтроки, РеквизитПодписанИзменен, - КоличествоПодписей, УникальныйИдентификатор = Неопределено) Экспорт - - РеквизитПодписанИзменен = Ложь; - - // Сортировка по убыванию номера строки - вначале будут последние строки. - ТаблицаВыделенныеСтроки.Сортировать("НомерСтроки Убыв"); - - ПодписанныйОбъект = ОбъектСсылка.ПолучитьОбъект(); - ЗаблокироватьДанныеДляРедактирования(ОбъектСсылка, , УникальныйИдентификатор); - - Для Каждого ДанныеПодписи Из ТаблицаВыделенныеСтроки Цикл - УдалитьПодпись2(ПодписанныйОбъект, ДанныеПодписи); - КонецЦикла; - - КоличествоПодписей = ПодписанныйОбъект.ЭлектронныеПодписи.Количество(); - ПодписанныйОбъект.ПодписанЭП = (КоличествоПодписей <> 0); - РеквизитПодписанИзменен = НЕ ПодписанныйОбъект.ПодписанЭП; - - // Чтобы прошла запись ранее подписанного объекта. - ПодписанныйОбъект.ДополнительныеСвойства.Вставить("ЗаписьПодписанногоОбъекта", Истина); - УстановитьПривилегированныйРежим(Истина); - ПодписанныйОбъект.Записать(); - РазблокироватьДанныеДляРедактирования(ОбъектСсылка, УникальныйИдентификатор); - -КонецПроцедуры - #КонецОбласти -#Область СлужебныеПроцедурыИФункции +#Область СлужебныйПрограммныйИнтерфейс // Возвращает общие настройки всех пользователей для работы с электронной подписью. // @@ -505,6 +478,10 @@ КонецФункции +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + // Возвращает настройки текущего пользователя для работы с электронной подписью. // // Возвращаемое значение: @@ -638,25 +615,4 @@ КонецПроцедуры -// Для устаревшей процедуры УдалитьПодписи. -Процедура УдалитьПодпись2(ПодписанныйОбъект, ДанныеПодписи) - - НомерСтроки = ДанныеПодписи.НомерСтроки; - - СтрокаТабличнойЧасти = ПодписанныйОбъект.ЭлектронныеПодписи.Найти(НомерСтроки, "НомерСтроки"); - Если СтрокаТабличнойЧасти <> Неопределено Тогда - - Если НЕ Пользователи.ЭтоПолноправныйПользователь() Тогда - Если СтрокаТабличнойЧасти.УстановившийПодпись <> Пользователи.ТекущийПользователь() Тогда - ВызватьИсключение НСтр("ru = 'Недостаточно прав на удаление подписи.'"); - КонецЕсли; - КонецЕсли; - - ПодписанныйОбъект.ЭлектронныеПодписи.Удалить(СтрокаТабличнойЧасти); - Иначе - ВызватьИсключение НСтр("ru = 'Строка с подписью не найдена.'"); - КонецЕсли; - -КонецПроцедуры - #КонецОбласти diff --git a/SSL/src/CommonModules/ЭлектроннаяПодписьКлиент/Module.bsl b/SSL/src/CommonModules/ЭлектроннаяПодписьКлиент/Module.bsl index e5d56ee9e..d804aee7b 100644 --- a/SSL/src/CommonModules/ЭлектроннаяПодписьКлиент/Module.bsl +++ b/SSL/src/CommonModules/ЭлектроннаяПодписьКлиент/Module.bsl @@ -323,7 +323,8 @@ И Не ЗначениеЗаполнено(ФормаДобавления.МенеджерКриптографииНаСервереОписаниеОшибки) Тогда Контекст.ПроверитьМенеджерКриптографииНаКлиенте = Ложь; - ЭлектроннаяПодписьСлужебныйКлиент.ДобавитьПодписьИзФайлаПослеСозданияМенеджераКриптографии(, Контекст); + ЭлектроннаяПодписьСлужебныйКлиент.ДобавитьПодписьИзФайлаПослеСозданияМенеджераКриптографии( + Неопределено, Контекст); Иначе ЭлектроннаяПодписьСлужебныйКлиент.СоздатьМенеджерКриптографии(Новый ОписаниеОповещения( "ДобавитьПодписьИзФайлаПослеСозданияМенеджераКриптографии", @@ -361,6 +362,15 @@ // Если свойство не будет вставлено или заполнено - это считается отказом // от продолжения и будет вызвана ОбработкаРезультата с результатом Ложь. // +// Для пакетного запроса разрешений у пользователя веб-клиента на сохранение файла данных +// и подписей, нужно вставить параметр ОбработкаЗапросаРазрешений типа ОписаниеОповещения. +// В процедуру будет передана Структура с параметрами: +// * Вызовы - Массив - с описанием вызовов для сохранения подписей. +// * ОбработкаПродолжения - ОписаниеОповещения - оповещение, которое нужно выполнить +// после запроса разрешений, - параметры процедуры как у +// оповещения для метода НачатьЗапросРазрешенияПользователя. +// Если разрешение не получено, значит все отменено. +// // ОбработкаРезультата - ОписаниеОповещения - необязательный параметр. // В результат передается параметр: // * Булево - Истина, если все прошло успешно. @@ -396,9 +406,14 @@ // (менеджер первой программы в списке, как настроил администратор). // - МенеджерКриптографии - использовать указанный менеджер криптографии. // -Процедура ПроверитьПодпись(Оповещение, ИсходныеДанные, Подпись, МенеджерКриптографии = Неопределено) Экспорт +// НаДату - Дата - проверить сертификат на указанную дату, +// если дату не удалось извлечь из подписи. +// Если параметр не заполнен, тогда проверять на текущую дату сеанса, +// если дату не удалось извлечь из подписи. +// +Процедура ПроверитьПодпись(Оповещение, ИсходныеДанные, Подпись, МенеджерКриптографии = Неопределено, НаДату = Неопределено) Экспорт - ЭлектроннаяПодписьСлужебныйКлиент.ПроверитьПодпись(Оповещение, ИсходныеДанные, Подпись, МенеджерКриптографии); + ЭлектроннаяПодписьСлужебныйКлиент.ПроверитьПодпись(Оповещение, ИсходныеДанные, Подпись, МенеджерКриптографии, НаДату); КонецПроцедуры @@ -733,9 +748,13 @@ // - МенеджерКриптографии - использовать указанный менеджер криптографии // (проверка на сервере не будет выполнена). // -Процедура ПроверитьСертификат(Оповещение, Сертификат, МенеджерКриптографии = Неопределено) Экспорт +// НаДату - Дата - проверить сертификат на указанную дату. +// Если параметр не указан или указана пустая дата, +// тогда проверять на текущую дату сеанса. +// +Процедура ПроверитьСертификат(Оповещение, Сертификат, МенеджерКриптографии = Неопределено, НаДату = Неопределено) Экспорт - ЭлектроннаяПодписьСлужебныйКлиент.ПроверитьСертификат(Оповещение, Сертификат, МенеджерКриптографии); + ЭлектроннаяПодписьСлужебныйКлиент.ПроверитьСертификат(Оповещение, Сертификат, МенеджерКриптографии, НаДату); КонецПроцедуры @@ -771,6 +790,8 @@ // * ПроверкиНаКлиенте - Структура - со свойствами: // * НаличиеСертификата - Булево, Неопределено - если Истина, тогда проверка прошла успешно, если // Ложь - проверка прошла не успешно, если Неопределено - не выполнялась. +// Если стандартные проверки скрыты в процедуре ПриСозданииФормыПроверкаСертификата, +// общего модуля ЭлектроннаяПодписьПереопределяемый, тогда свойства нет. // * ДанныеСертификата - Булево, Неопределено - также, как указано выше. // * НаличиеПрограммы - Булево, Неопределено - также, как указано выше. // * Подписание - Булево, Неопределено - также, как указано выше. @@ -943,48 +964,30 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// Устаревшие процедуры и функции. - -// Устарела. Следует использовать ОткрытьНастройкиЭлектроннойПодписиИШифрования. -Процедура ОткрытьФормуНастройкиЭП() Экспорт +// Возвращает дату, извлеченную из двоичных данных подписи или Неопределено. +// +// Параметры: +// Подпись - ДвоичныеДанные - данные подписи из которых нужно извлечь дату. +// ПривестиКЧасовомуПоясуСеанса - Булево - привести универсальное время к времени сеанса. +// +// Возвращаемое значение: +// Дата - успешно извлеченная дата подписи. +// Неопределено - не удалось извлечь дату из данных подписи. +// +Функция ДатаПодписания(Подпись, ПривестиКЧасовомуПоясуСеанса = Истина) Экспорт - ОткрытьНастройкиЭлектроннойПодписиИШифрования(); + ДатаПодписания = ЭлектроннаяПодписьСлужебныйКлиентСервер.ДатаПодписанияУниверсальная(Подпись); -КонецПроцедуры - -// Устарела. Следует использовать процедуру Подписать. -Функция СформироватьДанныеПодписи( - МенеджерКриптографии, - ОбъектДляПодписиСсылка, - ДвоичныеДанные, - СтруктураПараметровПодписи) Экспорт - - МенеджерКриптографии.ПарольДоступаКЗакрытомуКлючу = СтруктураПараметровПодписи.Пароль; - ДатаПодписи = Дата('00010101'); - - НоваяПодписьДвоичныеДанные = МенеджерКриптографии.Подписать(ДвоичныеДанные, СтруктураПараметровПодписи.Сертификат); - ОписаниеОшибки = ""; - Если ЭлектроннаяПодписьСлужебныйКлиентСервер.ПустыеДанныеПодписи(НоваяПодписьДвоичныеДанные, ОписаниеОшибки) Тогда - ВызватьИсключение ОписаниеОшибки; + Если ДатаПодписания = Неопределено Тогда + Возврат Неопределено; КонецЕсли; - Отпечаток = Base64Строка(СтруктураПараметровПодписи.Сертификат.Отпечаток); - КомуВыдан = ЭлектроннаяПодписьКлиентСервер.ПредставлениеСубъекта(СтруктураПараметровПодписи.Сертификат); - ДвоичныеДанныеСертификата = СтруктураПараметровПодписи.Сертификат.Выгрузить(); + Если ПривестиКЧасовомуПоясуСеанса Тогда + ДатаПодписания = ДатаПодписания + (ОбщегоНазначенияКлиент.ДатаСеанса() + - ОбщегоНазначенияКлиент.ДатаУниверсальная()); + КонецЕсли; - ДанныеПодписи = Новый Структура; - ДанныеПодписи.Вставить("ОбъектСсылка", ОбъектДляПодписиСсылка); - ДанныеПодписи.Вставить("НоваяПодписьДвоичныеДанные", НоваяПодписьДвоичныеДанные); - ДанныеПодписи.Вставить("Отпечаток", Отпечаток); - ДанныеПодписи.Вставить("ДатаПодписи", ДатаПодписи); - ДанныеПодписи.Вставить("Комментарий", СтруктураПараметровПодписи.Комментарий); - ДанныеПодписи.Вставить("ИмяФайлаПодписи", ""); - ДанныеПодписи.Вставить("КомуВыданСертификат", КомуВыдан); - ДанныеПодписи.Вставить("АдресФайла", ""); - ДанныеПодписи.Вставить("ДвоичныеДанныеСертификата", ДвоичныеДанныеСертификата); - - Возврат ДанныеПодписи; + Возврат ДатаПодписания; КонецФункции diff --git a/SSL/src/CommonModules/ЭлектроннаяПодписьПереопределяемыйКлиент/Module.bsl b/SSL/src/CommonModules/ЭлектроннаяПодписьКлиентПереопределяемый/Module.bsl similarity index 93% rename from SSL/src/CommonModules/ЭлектроннаяПодписьПереопределяемыйКлиент/Module.bsl rename to SSL/src/CommonModules/ЭлектроннаяПодписьКлиентПереопределяемый/Module.bsl index d267d1b6b..586d3eb96 100644 --- a/SSL/src/CommonModules/ЭлектроннаяПодписьПереопределяемыйКлиент/Module.bsl +++ b/SSL/src/CommonModules/ЭлектроннаяПодписьКлиентПереопределяемый/Module.bsl @@ -40,6 +40,8 @@ // общего модуля ЭлектроннаяПодписьПереопределяемый. // * МенеджерКриптографии - МенеджерКриптографии - подготовленный менеджер криптографии для // выполнения проверки. +// - Неопределено - если стандартные проверки отключены в процедуре +// ПриСозданииФормыПроверкаСертификата общего модуля ЭлектроннаяПодписьПереопределяемый. // * ОписаниеОшибки - Строка - (возвращаемое значение) - описание ошибки, полученной при выполнении проверки. // Это описание сможет увидеть пользователь при нажатии на картинку результата. // * ЭтоПредупреждение - Булево - (возвращаемое значение) - вид картинки Ошибка/Предупреждение diff --git a/SSL/src/CommonModules/ЭлектроннаяПодписьПереопределяемыйКлиент/ЭлектроннаяПодписьПереопределяемыйКлиент.mdo b/SSL/src/CommonModules/ЭлектроннаяПодписьКлиентПереопределяемый/ЭлектроннаяПодписьКлиентПереопределяемый.mdo similarity index 63% rename from SSL/src/CommonModules/ЭлектроннаяПодписьПереопределяемыйКлиент/ЭлектроннаяПодписьПереопределяемыйКлиент.mdo rename to SSL/src/CommonModules/ЭлектроннаяПодписьКлиентПереопределяемый/ЭлектроннаяПодписьКлиентПереопределяемый.mdo index 4965f9ca3..f9afc938a 100644 --- a/SSL/src/CommonModules/ЭлектроннаяПодписьПереопределяемыйКлиент/ЭлектроннаяПодписьПереопределяемыйКлиент.mdo +++ b/SSL/src/CommonModules/ЭлектроннаяПодписьКлиентПереопределяемый/ЭлектроннаяПодписьКлиентПереопределяемый.mdo @@ -1,9 +1,9 @@ <?xml version="1.0" encoding="UTF-8"?> <mdclass:CommonModule xmlns:mdclass="http://g5.1c.ru/v8/dt/metadata/mdclass" uuid="fdb5b235-1978-4c2a-a03f-02341df00c3c"> - <name>ЭлектроннаяПодписьПереопределяемыйКлиент</name> + <name>ЭлектроннаяПодписьКлиентПереопределяемый</name> <synonym> <key>ru</key> - <value>Электронная подпись переопределяемый клиент</value> + <value>Электронная подпись клиент переопределяемый</value> </synonym> <clientManagedApplication>true</clientManagedApplication> <clientOrdinaryApplication>true</clientOrdinaryApplication> diff --git a/SSL/src/CommonModules/ЭлектроннаяПодписьКлиентСервер/Module.bsl b/SSL/src/CommonModules/ЭлектроннаяПодписьКлиентСервер/Module.bsl index a7aa84a01..4be6fb602 100644 --- a/SSL/src/CommonModules/ЭлектроннаяПодписьКлиентСервер/Module.bsl +++ b/SSL/src/CommonModules/ЭлектроннаяПодписьКлиентСервер/Module.bsl @@ -20,8 +20,7 @@ Функция ПредставлениеСертификата(Сертификат, Отчество = Ложь, СрокДействия = Истина) Экспорт Возврат ПредставлениеСубъекта(Сертификат, Отчество) + ", " - + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'до %1'"), Формат(Сертификат.ДатаОкончания, "ДФ=MM.yyyy")); + + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'до %1'"), Формат(Сертификат.ДатаОкончания, "ДФ=MM.yyyy")); КонецФункции @@ -100,7 +99,7 @@ Если ЗначениеЗаполнено(Издатель.ОбщееИмя) И ЗначениеЗаполнено(Издатель.Организация) - И Найти(Издатель.ОбщееИмя, Издатель.Организация) = 0 Тогда + И СтрНайти(Издатель.ОбщееИмя, Издатель.Организация) = 0 Тогда Представление = Издатель.ОбщееИмя + ", " + Издатель.Организация; КонецЕсли; @@ -137,7 +136,7 @@ #КонецОбласти -#Область СлужебныеПроцедурыИФункции +#Область СлужебныйПрограммныйИнтерфейс // Возвращает структуру, содержащую различные общие настройки. // @@ -156,6 +155,10 @@ #КонецЕсли КонецФункции +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + // Возвращает структуру, содержащую различные персональные настройки. // // Возвращаемое значение: @@ -339,7 +342,7 @@ Если Субъект.Свойство("GN") Тогда GivenName = ПодготовитьСтроку(Субъект.GN); - Позиция = Найти(GivenName, " "); + Позиция = СтрНайти(GivenName, " "); Если Позиция = 0 Тогда Свойства.Имя = GivenName; Иначе @@ -360,18 +363,17 @@ И Не (Субъект.Свойство("T") И Свойства.ОбщееИмя = ПодготовитьСтроку(Субъект.T)) Тогда // Извлечение ФИО из поля CN. - Массив = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок( - Свойства.ОбщееИмя, " ", Истина, Истина); + Массив = СтрРазделить(Свойства.ОбщееИмя, " ", Ложь); Если Массив.Количество() < 4 Тогда Если Массив.Количество() > 0 Тогда - Свойства.Фамилия = Массив[0]; + Свойства.Фамилия = СокрЛП(Массив[0]); КонецЕсли; Если Массив.Количество() > 1 Тогда - Свойства.Имя = Массив[1]; + Свойства.Имя = СокрЛП(Массив[1]); КонецЕсли; Если Массив.Количество() > 2 Тогда - Свойства.Отчество = Массив[2]; + Свойства.Отчество = СокрЛП(Массив[2]); КонецЕсли; КонецЕсли; КонецЕсли; @@ -552,12 +554,12 @@ КонецЕсли; Для НомерСимвола = 1 По 12 Цикл - Если Найти("0123456789", Сред(ИНН,НомерСимвола,1)) = 0 Тогда + Если СтрНайти("0123456789", Сред(ИНН,НомерСимвола,1)) = 0 Тогда Возврат Ложь; КонецЕсли; КонецЦикла; - Если Лев(ИНН,2) = "00" Тогда + Если СтрНачинаетсяС(ИНН, "00") Тогда Возврат Ложь; КонецЕсли; diff --git a/SSL/src/CommonModules/ЭлектроннаяПодписьПереопределяемый/Module.bsl b/SSL/src/CommonModules/ЭлектроннаяПодписьПереопределяемый/Module.bsl index c16c79f7b..51091c217 100644 --- a/SSL/src/CommonModules/ЭлектроннаяПодписьПереопределяемый/Module.bsl +++ b/SSL/src/CommonModules/ЭлектроннаяПодписьПереопределяемый/Module.bsl @@ -35,9 +35,12 @@ // * ЮридическийАдрес - Строка - (возвращаемое значение) юридический адрес организации в формате XML, как его // возвращает функция КонтактнаяИнформацияВXML общего модуля УправлениеКонтактнойИнформацией. // -// * ФактическийАдрес - Строка - (возвращаемое значение) фактический адрес организации в формате XML, как его +// * ФактическийАдрес - Строка - (возвращаемое значение) фактический адрес организации в формате XML, как его // возвращает функция КонтактнаяИнформацияВXML общего модуля УправлениеКонтактнойИнформацией. // +// Если реквизит (возвращаемое значение) остается равным начальному значению Неопределено, +// тогда он пропускается, если для значения Неопределено не указано другое поведение. +// Процедура ПриЗаполненииРеквизитовОрганизацииВЗаявленииНаСертификат(Параметры) Экспорт @@ -54,23 +57,17 @@ // * ТипВладельца - ОписаниеТипов - (возвращаемое значение) содержит ссылочные типы из которых можно сделать выбор. // - Неопределено - (возвращаемое значение) выбор владельца не поддерживается. // -// * ВидВладельца - Строка - одна из строк: Директор, ГлавныйБухгалтер, Сотрудник, -// которая показывает кто сейчас выбран пользователем в качестве владельца сертификата. -// Для этого владельца требуется заполнить реквизиты ФИО, ... -// Для индивидуального предпринимателя всегда Сотрудник. Причем в этом случае, -// реквизит Сотрудник не может быть изменен пользователем даже, если не заполнен. +// * Сотрудник - ТипВладельца - (возвращаемое значение) - это владелец сертификата, которого нужно заполнить. +// Если уже заполнен (выбран пользователем), его не следует изменять. +// - Неопределено - если ТипВладельца не определен, тогда реквизит не доступен пользователю. // // * Директор - ТипВладельца - (возвращаемое значение) - это директор, который может быть выбран, // как владелец сертификата. -// - Неопределено - начальное значение - скрыть реквизит директор. +// - Неопределено - начальное значение - скрыть директора из списка выбора. // // * ГлавныйБухгалтер - ТипВладельца - (возвращаемое значение) это главный бухгалтер, который может быть выбран, // как владелец сертификата. -// - Неопределено - начальное значение - скрыть реквизит главный бухгалтер. -// -// * Сотрудник - ТипВладельца - (возвращаемое значение) - это владелец сертификата, которого нужно заполнить. -// Если уже заполнен (выбран пользователем), его не следует изменять. -// - Неопределено - ТипВладельца не определен - реквизит не доступен пользователю. +// - Неопределено - начальное значение - скрыть главного бухгалтера из списка выбора. // // * Пользователь - СправочникСсылка.Пользователи - (возвращаемое значение) пользователь-владелец сертификата. // В общем случае, может быть не заполнено. Рекомендуется заполнить, если есть возможность. @@ -102,6 +99,9 @@ // * ЭлектроннаяПочта - Строка - (возвращаемое значение) адрес электронной почты сотрудника в формате XML, как его // возвращает функция КонтактнаяИнформацияВXML общего модуля УправлениеКонтактнойИнформацией. // +// Если реквизит (возвращаемое значение) остается равным начальному значению Неопределено, +// тогда он пропускается, если для значения Неопределено не указано другое поведение. +// Процедура ПриЗаполненииРеквизитовВладельцаВЗаявленииНаСертификат(Параметры) Экспорт @@ -131,6 +131,9 @@ // * Основание - Строка - (возвращаемое значение) - основание на котором действует должностное лицо (устав, // доверенность, ...). // +// Если реквизит (возвращаемое значение) остается равным начальному значению Неопределено, +// тогда он пропускается, если для значения Неопределено не указано другое поведение. +// Процедура ПриЗаполненииРеквизитовРуководителяВЗаявленииНаСертификат(Параметры) Экспорт @@ -162,6 +165,9 @@ // * ИНН - Строка - (возвращаемое значение) ИНН партнера. // * КПП - Строка - (возвращаемое значение) КПП партнера. // +// Если реквизит (возвращаемое значение) остается равным начальному значению Неопределено, +// тогда он пропускается, если для значения Неопределено не указано другое поведение. +// Процедура ПриЗаполненииРеквизитовПартнераВЗаявленииНаСертификат(Параметры) Экспорт @@ -206,7 +212,7 @@ // // ВыходныеПараметры - Произвольный - произвольные возвращаемые данные, которые // будут помещены в одноименную процедуру в общем модуле. -// ЭлектроннаяПодписьПереопределяемыйКлиент после создания формы +// ЭлектроннаяПодписьКлиентПереопределяемый после создания формы // на сервере, но до ее открытия. // Процедура ПередНачаломОперации(Операция, ВходныеПараметры, ВыходныеПараметры) Экспорт @@ -226,10 +232,15 @@ // * Подсказка - Строка - подсказка, которая будет показана пользователю при нажатии на знак вопроса. // // ПараметрыДополнительныхПроверок - Произвольный - значение одноименного параметра, указанное -// в функции ПроверитьСертификатСправочника общего модуля ЭлектроннаяПодписьКлиент. +// в процедуре ПроверитьСертификатСправочника общего модуля ЭлектроннаяПодписьКлиент. // -Процедура ПриСозданииФормыПроверкаСертификата(Сертификат, ДополнительныеПроверки, ПараметрыДополнительныхПроверок) Экспорт - +// СтандартныеПроверки - Булево - если установить Ложь, тогда все стандартные проверки будут +// пропущены и скрыты. Скрытые проверки не попадают в свойство Результат +// процедуры ПроверитьСертификатСправочника общего модуля ЭлектроннаяПодписьКлиент, кроме того +// параметр МенеджерКриптографии не будет определен в процедурах ПриДополнительнойПроверкеСертификата +// общих модулей ЭлектроннаяПодписьПереопределяемый и ЭлектроннаяПодписьКлиентПереопределяемый. +// +Процедура ПриСозданииФормыПроверкаСертификата(Сертификат, ДополнительныеПроверки, ПараметрыДополнительныхПроверок, СтандартныеПроверки) Экспорт @@ -243,6 +254,8 @@ // общего модуля ЭлектроннаяПодписьПереопределяемый. // МенеджерКриптографии - МенеджерКриптографии - подготовленный менеджер криптографии для // выполнения проверки. +// - Неопределено - если стандартные проверки отключены в процедуре +// ПриСозданииФормыПроверкаСертификата общего модуля ЭлектроннаяПодписьПереопределяемый. // ОписаниеОшибки - Строка - (возвращаемое значение) - описание ошибки, полученной при выполнении проверки. // Это описание сможет увидеть пользователь при нажатии на картинку результата. // ЭтоПредупреждение - Булево - (возвращаемое значение) - вид картинки Ошибка/Предупреждение diff --git a/SSL/src/CommonModules/ЭлектроннаяПодписьСлужебный/Module.bsl b/SSL/src/CommonModules/ЭлектроннаяПодписьСлужебный/Module.bsl index 554f704e0..736298cac 100644 --- a/SSL/src/CommonModules/ЭлектроннаяПодписьСлужебный/Module.bsl +++ b/SSL/src/CommonModules/ЭлектроннаяПодписьСлужебный/Module.bsl @@ -21,7 +21,7 @@ ИмяСобытия = "СтандартныеПодсистемы.БазоваяФункциональность\ПриДобавленииПереименованийОбъектовМетаданных"; СерверныеОбработчики[ИмяСобытия].Добавить(ИмяМодуля); - ИмяСобытия = "СтандартныеПодсистемы.БазоваяФункциональность\ПриДобавленииПараметровРаботыКлиентскойЛогикиСтандартныхПодсистем"; + ИмяСобытия = "СтандартныеПодсистемы.БазоваяФункциональность\ПриДобавленииПараметровРаботыКлиента"; СерверныеОбработчики[ИмяСобытия].Добавить(ИмяМодуля); КонецПроцедуры @@ -67,6 +67,10 @@ НовоеИмя = "Подсистема.СтандартныеПодсистемы.Подсистема.ЭлектроннаяПодпись"; ОбщегоНазначения.ДобавитьПереименование(Итог, "2.2.1.7", СтароеИмя, НовоеИмя, Библиотека); + СтароеИмя = "Роль.ИспользованиеЭП"; + НовоеИмя = "Роль.ИспользованиеЭлектроннойПодписиИШифрования"; + ОбщегоНазначения.ДобавитьПереименование(Итог, "2.3.1.10", СтароеИмя, НовоеИмя, Библиотека); + КонецПроцедуры // Определяет параметры работы клиента. @@ -74,7 +78,7 @@ // Параметры: // Параметры - Структура - Все параметры работы клиента. // -Процедура ПриДобавленииПараметровРаботыКлиентскойЛогикиСтандартныхПодсистем(Параметры) Экспорт +Процедура ПриДобавленииПараметровРаботыКлиента(Параметры) Экспорт Если ОбщегоНазначенияПовтИсп.ДоступноИспользованиеРазделенныхДанных() Тогда НастройкиПодсистемы = Новый Структура; @@ -208,7 +212,7 @@ ЗаголовокОшибки = НСтр("ru = 'Не удалось выполнить операцию на сервере %1 по причине:'"); КонецЕсли; - ЗаголовокОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ЗаголовокОшибки, ИмяКомпьютера); + ЗаголовокОшибки = СтрЗаменить(ЗаголовокОшибки, "%1", ИмяКомпьютера); СвойстваОшибки = Новый Структура; СвойстваОшибки.Вставить("ЗаголовокОшибки", ЗаголовокОшибки); @@ -500,94 +504,6 @@ КонецПроцедуры -// Только для внутреннего использования. -Процедура ЗаполнитьСуществующиеСертификатыПользователя(СписокВыбора, ОтпечаткиСертификатовНаКлиенте, - ОтборСертификатов, ОтборОтпечатков = Неопределено) Экспорт - - СписокВыбора.Очистить(); - - Если ЭлектроннаяПодпись.ОбщиеНастройки().СоздаватьЭлектронныеПодписиНаСервере Тогда - - МенеджерКриптографии = МенеджерКриптографии("ПолучениеСертификатов", Ложь); - - Если МенеджерКриптографии <> Неопределено Тогда - ТипХранилища = ТипХранилищаСертификатовКриптографии.ПерсональныеСертификаты; - МассивСертификатов = МенеджерКриптографии.ПолучитьХранилищеСертификатов(ТипХранилища).ПолучитьВсе(); - - ЭлектроннаяПодписьСлужебныйКлиентСервер.ДобавитьОтпечаткиСертификатов( - ОтпечаткиСертификатовНаКлиенте, МассивСертификатов); - КонецЕсли; - КонецЕсли; - - Если ОтборСертификатов.Количество() > 0 Тогда - Для каждого ЭлементСписка Из ОтборСертификатов Цикл - Свойства = ОбщегоНазначения.ЗначенияРеквизитовОбъекта( - ЭлементСписка.Значение, "Ссылка, Наименование, Отпечаток"); - - Если ОтпечаткиСертификатовНаКлиенте.Найти(Свойства.Отпечаток) <> Неопределено Тогда - СписокВыбора.Добавить(Свойства.Ссылка, Свойства.Наименование); - КонецЕсли; - КонецЦикла; - Возврат; - КонецЕсли; - - Если ОтборОтпечатков <> Неопределено Тогда - Отбор = ПолучитьИзВременногоХранилища(ОтборОтпечатков); - Отпечатки = Новый Массив; - Для каждого Отпечаток Из ОтпечаткиСертификатовНаКлиенте Цикл - Если Отбор[Отпечаток] = Неопределено Тогда - Продолжить; - КонецЕсли; - СписокВыбора.Добавить(Отпечаток, Отбор[Отпечаток]); - КонецЦикла; - Запрос = Новый Запрос; - Запрос.Параметры.Вставить("Отпечатки", СписокВыбора.ВыгрузитьЗначения()); - Запрос.Текст = - "ВЫБРАТЬ - | Сертификаты.Ссылка КАК Ссылка, - | Сертификаты.Наименование КАК Наименование, - | Сертификаты.Отпечаток - |ИЗ - | Справочник.СертификатыКлючейЭлектроннойПодписиИШифрования КАК Сертификаты - |ГДЕ - | Сертификаты.Отпечаток В(&Отпечатки)"; - Выборка = Запрос.Выполнить().Выбрать(); - Пока Выборка.Следующий() Цикл - ЭлементСписка = СписокВыбора.НайтиПоЗначению(Выборка.Отпечаток); - Если ЭлементСписка <> Неопределено Тогда - ЭлементСписка.Значение = Выборка.Ссылка; - ЭлементСписка.Представление = Выборка.Наименование; - КонецЕсли; - КонецЦикла; - СписокВыбора.СортироватьПоПредставлению(); - Возврат; - КонецЕсли; - - Запрос = Новый Запрос; - Запрос.УстановитьПараметр("Пользователь", ПользователиКлиентСервер.ТекущийПользователь()); - Запрос.Параметры.Вставить("Отпечатки", ОтпечаткиСертификатовНаКлиенте); - Запрос.Текст = - "ВЫБРАТЬ - | Сертификаты.Ссылка КАК Ссылка, - | Сертификаты.Наименование КАК Наименование - |ИЗ - | Справочник.СертификатыКлючейЭлектроннойПодписиИШифрования КАК Сертификаты - |ГДЕ - | Сертификаты.Программа <> ЗНАЧЕНИЕ(Справочник.ПрограммыЭлектроннойПодписиИШифрования.ПустаяСсылка) - | И Сертификаты.Пользователь = &Пользователь - | И Сертификаты.Отозван = ЛОЖЬ - | И Сертификаты.Отпечаток В(&Отпечатки) - | - |УПОРЯДОЧИТЬ ПО - | Наименование"; - - Выборка = Запрос.Выполнить().Выбрать(); - Пока Выборка.Следующий() Цикл - СписокВыбора.Добавить(Выборка.Ссылка, Выборка.Наименование); - КонецЦикла; - -КонецПроцедуры - //////////////////////////////////////////////////////////////////////////////// // Общие процедуры и функции управляемых форм. @@ -782,6 +698,7 @@ Если ЗначениеЗаполнено(Форма.Сертификат) Тогда СертификатОбъект = Форма.Сертификат.ПолучитьОбъект(); + ОбновитьЗначение(СертификатОбъект.ПометкаУдаления, Ложь); Иначе СертификатОбъект = Справочники.СертификатыКлючейЭлектроннойПодписиИШифрования.СоздатьЭлемент(); СертификатОбъект.ДанныеСертификата = Новый ХранилищеЗначения(ДвоичныеДанныеСертификата); @@ -853,7 +770,7 @@ ЭлементУсловногоОформления = Список.УсловноеОформление.Элементы.Добавить(); ЭлементЦветаОформления = ЭлементУсловногоОформления.Оформление.Элементы.Найти("TextColor"); - ЭлементЦветаОформления.Значение = Метаданные.ЭлементыСтиля.НедоступныеДанныеЦвет.Значение; + ЭлементЦветаОформления.Значение = Метаданные.ЭлементыСтиля.ТекстЗапрещеннойЯчейкиЦвет.Значение; ЭлементЦветаОформления.Использование = Истина; Если ИсключитьЗаявления Тогда @@ -962,8 +879,8 @@ Программа = ПрограммаОбъект.Ссылка; КонецЕсли; - Если Константы.ИспользоватьЭлектронныеПодписи.Получить() = Истина - И Константы.ИспользоватьШифрование.Получить() = Ложь Тогда + Если Константы.ИспользоватьЭлектронныеПодписи.Получить() + И Не Константы.ИспользоватьШифрование.Получить() Тогда МенеджерЗначения = Константы.ИспользоватьШифрование.СоздатьМенеджерЗначения(); МенеджерЗначения.Значение = Истина; @@ -1250,6 +1167,94 @@ КонецФункции // Для процедур НастроитьФормуПодписанияШифрованияРасшифровки, СертификатПриИзмененииНаСервере. + +Процедура ЗаполнитьСуществующиеСертификатыПользователя(СписокВыбора, ОтпечаткиСертификатовНаКлиенте, + ОтборСертификатов, ОтборОтпечатков = Неопределено) + + СписокВыбора.Очистить(); + + Если ЭлектроннаяПодпись.ОбщиеНастройки().СоздаватьЭлектронныеПодписиНаСервере Тогда + + МенеджерКриптографии = МенеджерКриптографии("ПолучениеСертификатов", Ложь); + + Если МенеджерКриптографии <> Неопределено Тогда + ТипХранилища = ТипХранилищаСертификатовКриптографии.ПерсональныеСертификаты; + МассивСертификатов = МенеджерКриптографии.ПолучитьХранилищеСертификатов(ТипХранилища).ПолучитьВсе(); + + ЭлектроннаяПодписьСлужебныйКлиентСервер.ДобавитьОтпечаткиСертификатов( + ОтпечаткиСертификатовНаКлиенте, МассивСертификатов); + КонецЕсли; + КонецЕсли; + + Если ОтборСертификатов.Количество() > 0 Тогда + Для каждого ЭлементСписка Из ОтборСертификатов Цикл + Свойства = ОбщегоНазначения.ЗначенияРеквизитовОбъекта( + ЭлементСписка.Значение, "Ссылка, Наименование, Отпечаток"); + + Если ОтпечаткиСертификатовНаКлиенте.Найти(Свойства.Отпечаток) <> Неопределено Тогда + СписокВыбора.Добавить(Свойства.Ссылка, Свойства.Наименование); + КонецЕсли; + КонецЦикла; + Возврат; + КонецЕсли; + + Если ОтборОтпечатков <> Неопределено Тогда + Отбор = ПолучитьИзВременногоХранилища(ОтборОтпечатков); + Отпечатки = Новый Массив; + Для каждого Отпечаток Из ОтпечаткиСертификатовНаКлиенте Цикл + Если Отбор[Отпечаток] = Неопределено Тогда + Продолжить; + КонецЕсли; + СписокВыбора.Добавить(Отпечаток, Отбор[Отпечаток]); + КонецЦикла; + Запрос = Новый Запрос; + Запрос.Параметры.Вставить("Отпечатки", СписокВыбора.ВыгрузитьЗначения()); + Запрос.Текст = + "ВЫБРАТЬ + | Сертификаты.Ссылка КАК Ссылка, + | Сертификаты.Наименование КАК Наименование, + | Сертификаты.Отпечаток + |ИЗ + | Справочник.СертификатыКлючейЭлектроннойПодписиИШифрования КАК Сертификаты + |ГДЕ + | Сертификаты.Отпечаток В(&Отпечатки)"; + Выборка = Запрос.Выполнить().Выбрать(); + Пока Выборка.Следующий() Цикл + ЭлементСписка = СписокВыбора.НайтиПоЗначению(Выборка.Отпечаток); + Если ЭлементСписка <> Неопределено Тогда + ЭлементСписка.Значение = Выборка.Ссылка; + ЭлементСписка.Представление = Выборка.Наименование; + КонецЕсли; + КонецЦикла; + СписокВыбора.СортироватьПоПредставлению(); + Возврат; + КонецЕсли; + + Запрос = Новый Запрос; + Запрос.УстановитьПараметр("Пользователь", ПользователиКлиентСервер.ТекущийПользователь()); + Запрос.Параметры.Вставить("Отпечатки", ОтпечаткиСертификатовНаКлиенте); + Запрос.Текст = + "ВЫБРАТЬ + | Сертификаты.Ссылка КАК Ссылка, + | Сертификаты.Наименование КАК Наименование + |ИЗ + | Справочник.СертификатыКлючейЭлектроннойПодписиИШифрования КАК Сертификаты + |ГДЕ + | Сертификаты.Программа <> ЗНАЧЕНИЕ(Справочник.ПрограммыЭлектроннойПодписиИШифрования.ПустаяСсылка) + | И Сертификаты.Пользователь = &Пользователь + | И Сертификаты.Отозван = ЛОЖЬ + | И Сертификаты.Отпечаток В(&Отпечатки) + | + |УПОРЯДОЧИТЬ ПО + | Наименование"; + + Выборка = Запрос.Выполнить().Выбрать(); + Пока Выборка.Следующий() Цикл + СписокВыбора.Добавить(Выборка.Ссылка, Выборка.Наименование); + КонецЦикла; + +КонецПроцедуры + Процедура ЗаполнитьДополнительныеСвойстваСертификата(Форма) Если Не ЗначениеЗаполнено(Форма.Сертификат) Тогда @@ -1400,4 +1405,5 @@ КонецФункции + #КонецОбласти diff --git a/SSL/src/CommonModules/ЭлектроннаяПодписьСлужебныйВызовСервера/Module.bsl b/SSL/src/CommonModules/ЭлектроннаяПодписьСлужебныйВызовСервера/Module.bsl index f8b9c0e87..bd95cf326 100644 --- a/SSL/src/CommonModules/ЭлектроннаяПодписьСлужебныйВызовСервера/Module.bsl +++ b/SSL/src/CommonModules/ЭлектроннаяПодписьСлужебныйВызовСервера/Module.bsl @@ -8,14 +8,14 @@ // Только для внутреннего использования. Функция ПроверитьПодпись(АдресИсходныхДанных, АдресПодписи, ОписаниеОшибки) Экспорт - Возврат ЭлектроннаяПодпись.ПроверитьПодпись(, АдресИсходныхДанных, АдресПодписи, ОписаниеОшибки); + Возврат ЭлектроннаяПодпись.ПроверитьПодпись(Неопределено, АдресИсходныхДанных, АдресПодписи, ОписаниеОшибки); КонецФункции // Только для внутреннего использования. -Функция ПроверитьСертификат(АдресСертификата, ОписаниеОшибки) Экспорт +Функция ПроверитьСертификат(АдресСертификата, ОписаниеОшибки, НаДату) Экспорт - Возврат ЭлектроннаяПодпись.ПроверитьСертификат(, АдресСертификата, ОписаниеОшибки); + Возврат ЭлектроннаяПодпись.ПроверитьСертификат(Неопределено, АдресСертификата, ОписаниеОшибки, НаДату); КонецФункции diff --git a/SSL/src/CommonModules/ЭлектроннаяПодписьСлужебныйКлиент/Module.bsl b/SSL/src/CommonModules/ЭлектроннаяПодписьСлужебныйКлиент/Module.bsl index f0548c6b1..a9ffc8c72 100644 --- a/SSL/src/CommonModules/ЭлектроннаяПодписьСлужебныйКлиент/Module.bsl +++ b/SSL/src/CommonModules/ЭлектроннаяПодписьСлужебныйКлиент/Module.bsl @@ -58,8 +58,9 @@ ИначеЕсли ТипЗнч(Контекст.ДанныеСертификата) <> Тип("Строка") Тогда ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Ошибка при вызове процедуры ОткрытьСертификат общего модуля ЭлектроннаяПодписьКлиент: - |Некорректное значение параметра ДанныеСертификата ""%1"".'"), Строка(Контекст.ДанныеСертификата)); - + |Некорректное значение параметра ДанныеСертификата ""%1"".'"), + Строка(Контекст.ДанныеСертификата)); + ИначеЕсли ЭтоАдресВременногоХранилища(Контекст.ДанныеСертификата) Тогда Контекст.АдресСертификата = Контекст.ДанныеСертификата; Иначе @@ -593,12 +594,18 @@ // (менеджер первой программы в списке, как настроил администратор). // - МенеджерКриптографии - использовать указанный менеджер криптографии. // -Процедура ПроверитьПодпись(Оповещение, ИсходныеДанные, Подпись, МенеджерКриптографии = Неопределено) Экспорт +// НаДату - Дата - проверить сертификат на указанную дату, +// если дату не удалось извлечь из подписи автоматически. +// Если параметр не заполнен, тогда проверять на текущую дату, +// если дату не удалось извлечь из подписи автоматически. +// +Процедура ПроверитьПодпись(Оповещение, ИсходныеДанные, Подпись, МенеджерКриптографии = Неопределено, НаДату = Неопределено) Экспорт Контекст = Новый Структура; - Контекст.Вставить("Оповещение", Оповещение); - Контекст.Вставить("ИсходныеДанные", ИсходныеДанные); - Контекст.Вставить("Подпись", Подпись); + Контекст.Вставить("Оповещение", Оповещение); + Контекст.Вставить("ИсходныеДанные", ИсходныеДанные); + Контекст.Вставить("Подпись", Подпись); + Контекст.Вставить("НаДату", НаДату); Контекст.Вставить("ПроверятьНаСервере", ЭлектроннаяПодписьКлиентСервер.ОбщиеНастройки().ПроверятьЭлектронныеПодписиНаСервере); @@ -693,10 +700,12 @@ Подпись = ПолучитьИзВременногоХранилища(Подпись); КонецЕсли; + Контекст.Вставить("ДанныеПодписи", Подпись); + Контекст.МенеджерКриптографии.НачатьПроверкуПодписи(Новый ОписаниеОповещения( "ПроверитьПодписьНаКлиентеПослеПроверкиПодписи", ЭтотОбъект, Контекст, "ПроверитьПодписьНаКлиентеПослеОшибкиПроверкиПодписи", ЭтотОбъект), - Контекст.ИсходныеДанные, Подпись); + Контекст.ИсходныеДанные, Контекст.ДанныеПодписи); КонецПроцедуры @@ -724,7 +733,12 @@ МенеджерКриптографии = Неопределено; КонецЕсли; - ПроверитьСертификат(Контекст.Оповещение, Сертификат, МенеджерКриптографии); + ДатаПодписания = ЭлектроннаяПодписьКлиент.ДатаПодписания(Контекст.ДанныеПодписи); + Если Не ЗначениеЗаполнено(ДатаПодписания) Тогда + ДатаПодписания = Контекст.НаДату; + КонецЕсли; + + ПроверитьСертификат(Контекст.Оповещение, Сертификат, МенеджерКриптографии, ДатаПодписания); КонецПроцедуры @@ -745,12 +759,16 @@ // - МенеджерКриптографии - использовать указанный менеджер криптографии // (проверка на сервере не будет выполнена). // -Процедура ПроверитьСертификат(Оповещение, Сертификат, МенеджерКриптографии = Неопределено) Экспорт +// НаДату - Дата - проверить сертификат на указанную дату. +// Если параметр не указан или указана пустая дата, тогда проверять на текущую. +// +Процедура ПроверитьСертификат(Оповещение, Сертификат, МенеджерКриптографии = Неопределено, НаДату = Неопределено) Экспорт Контекст = Новый Структура; Контекст.Вставить("Оповещение", Оповещение); Контекст.Вставить("Сертификат", Сертификат); Контекст.Вставить("МенеджерКриптографии", МенеджерКриптографии); + Контекст.Вставить("НаДату", НаДату); Контекст.Вставить("ОписаниеОшибкиНаСервере", Неопределено); Если Контекст.МенеджерКриптографии = Неопределено @@ -782,7 +800,7 @@ КонецЕсли; Если ЭлектроннаяПодписьСлужебныйВызовСервера.ПроверитьСертификат(АдресСертификата, - Контекст.ОписаниеОшибкиНаСервере) Тогда + Контекст.ОписаниеОшибкиНаСервере, Контекст.НаДату) Тогда ВыполнитьОбработкуОповещения(Контекст.Оповещение, Истина); Иначе @@ -834,12 +852,15 @@ // Продолжение процедуры ПроверитьСертификат. Процедура ПроверитьСертификатПослеИнициализацииСертификата(СертификатКриптографии, Контекст) Экспорт - РежимыПроверкиСертификата = ЭлектроннаяПодписьСлужебныйКлиентСервер.РежимыПроверкиСертификата(); + РежимыПроверкиСертификата = ЭлектроннаяПодписьСлужебныйКлиентСервер.РежимыПроверкиСертификата( + ЗначениеЗаполнено(Контекст.НаДату)); + + Контекст.Вставить("СертификатКриптографии", СертификатКриптографии); Контекст.МенеджерКриптографии.НачатьПроверкуСертификата(Новый ОписаниеОповещения( "ПроверитьСертификатНаКлиентеПослеПроверки", ЭтотОбъект, Контекст, "ПроверитьСертификатНаКлиентеПослеОшибкиПроверки", ЭтотОбъект), - СертификатКриптографии, РежимыПроверкиСертификата); + Контекст.СертификатКриптографии, РежимыПроверкиСертификата); КонецПроцедуры @@ -847,7 +868,11 @@ Процедура ПроверитьСертификатНаКлиентеПослеОшибкиПроверки(ИнформацияОбОшибке, СтандартнаяОбработка, Контекст) Экспорт СтандартнаяОбработка = Ложь; - ОписаниеОшибки = КраткоеПредставлениеОшибки(ИнформацияОбОшибке); + Если ТипЗнч(ИнформацияОбОшибке) = Тип("ИнформацияОбОшибке") Тогда + ОписаниеОшибки = КраткоеПредставлениеОшибки(ИнформацияОбОшибке); + Иначе + ОписаниеОшибки = Строка(ИнформацияОбОшибке); + КонецЕсли; Если Контекст.ОписаниеОшибкиНаСервере <> Неопределено Тогда ОписаниеОшибки = Контекст.ОписаниеОшибкиНаСервере + " " + НСтр("ru = '(на сервере)'") + Символы.ПС @@ -861,7 +886,14 @@ // Продолжение процедуры ПроверитьСертификат. Процедура ПроверитьСертификатНаКлиентеПослеПроверки(Контекст) Экспорт - ВыполнитьОбработкуОповещения(Контекст.Оповещение, Истина); + ОшибкаПросрочки = ЭлектроннаяПодписьСлужебныйКлиентСервер.СертификатПросрочен( + Контекст.СертификатКриптографии, Контекст.НаДату); + + Если ЗначениеЗаполнено(ОшибкаПросрочки) Тогда + ПроверитьСертификатНаКлиентеПослеОшибкиПроверки(ОшибкаПросрочки, Ложь, Контекст); + Иначе + ВыполнитьОбработкуОповещения(Контекст.Оповещение, Истина); + КонецЕсли; КонецПроцедуры @@ -1113,7 +1145,7 @@ КонецПроцедуры // Продолжение процедуры СоздатьМенеджерКриптографии. -Процедура СоздатьМенеджерКриптографииПослеЦикла(Контекст) Экспорт +Процедура СоздатьМенеджерКриптографииПослеЦикла(Контекст) Если Контекст.Менеджер <> Неопределено Или Не Контекст.Свойство("ЗаголовокОшибки") Тогда ВыполнитьОбработкуОповещения(Контекст.Оповещение, Контекст.Менеджер); @@ -1135,7 +1167,8 @@ Иначе Если ЗначениеЗаполнено(Контекст.Программа) Тогда ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Программа %1 не доступна или не установлена на компьютере.'"), Контекст.Программа); + НСтр("ru = 'Программа %1 не доступна или не установлена на компьютере.'"), + Контекст.Программа); Иначе ТекстОшибки = НСтр("ru = 'Ни одна из программ не доступна или не установлена на компьютере.'"); КонецЕсли; @@ -1159,56 +1192,6 @@ КонецПроцедуры -// Готовит строку для использования в качестве имени файла. -Функция ПодготовитьСтрокуДляИмениФайла(Строка, ЗаменаПробела = Неопределено) Экспорт - - ЗаменаСимволов = Новый Соответствие; - ЗаменаСимволов.Вставить("\", " "); - ЗаменаСимволов.Вставить("/", " "); - ЗаменаСимволов.Вставить("*", " "); - ЗаменаСимволов.Вставить("<", " "); - ЗаменаСимволов.Вставить(">", " "); - ЗаменаСимволов.Вставить("|", " "); - ЗаменаСимволов.Вставить(":", ""); - ЗаменаСимволов.Вставить("""", ""); - ЗаменаСимволов.Вставить("?", ""); - ЗаменаСимволов.Вставить(Символы.ВК, ""); - ЗаменаСимволов.Вставить(Символы.ПС, " "); - ЗаменаСимволов.Вставить(Символы.Таб, " "); - ЗаменаСимволов.Вставить(Символы.НПП, " "); - // замена символов кавычек - ЗаменаСимволов.Вставить(Символ(171), ""); - ЗаменаСимволов.Вставить(Символ(187), ""); - ЗаменаСимволов.Вставить(Символ(8195), ""); - ЗаменаСимволов.Вставить(Символ(8194), ""); - ЗаменаСимволов.Вставить(Символ(8216), ""); - ЗаменаСимволов.Вставить(Символ(8218), ""); - ЗаменаСимволов.Вставить(Символ(8217), ""); - ЗаменаСимволов.Вставить(Символ(8220), ""); - ЗаменаСимволов.Вставить(Символ(8222), ""); - ЗаменаСимволов.Вставить(Символ(8221), ""); - - СтрокаПодготовленная = ""; - - КоличествоСимволов = СтрДлина(Строка); - - Для НомерСимвола = 1 По КоличествоСимволов Цикл - Символ = Сред(Строка, НомерСимвола, 1); - Если ЗаменаСимволов[Символ] <> Неопределено Тогда - Символ = ЗаменаСимволов[Символ]; - КонецЕсли; - СтрокаПодготовленная = СтрокаПодготовленная + Символ; - КонецЦикла; - - Если ЗаменаПробела <> Неопределено Тогда - СтрокаПодготовленная = СтрЗаменить(ЗаменаПробела, " ", ЗаменаПробела); - КонецЕсли; - - Возврат СокрЛП(СтрокаПодготовленная); - -КонецФункции - - // Только для внутреннего назначения. // // Параметры: @@ -1657,8 +1640,8 @@ Если ТекущийСписокПредставлений.Количество() > 1 Тогда СерверныеПараметры.Вставить("ПредставлениеДанныхОткрывается", Истина); - СерверныеПараметры.Вставить("ПредставлениеДанных", СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - ОписаниеДанных.ПредставлениеНабора, ОписаниеДанных.НаборДанных.Количество())); + СерверныеПараметры.Вставить("ПредставлениеДанных", СтрЗаменить( + ОписаниеДанных.ПредставлениеНабора, "%1", ОписаниеДанных.НаборДанных.Количество())); Иначе СерверныеПараметры.Вставить("ПредставлениеДанныхОткрывается", ТипЗнч(ТекущийСписокПредставлений[0].Значение) = Тип("ОписаниеОповещения") @@ -1782,8 +1765,9 @@ КлиентскиеПараметры.ОписаниеДанных.Вставить("Успех", Успех = Истина); Если КлиентскиеПараметры.ОбработкаРезультата <> Неопределено Тогда - ВыполнитьОбработкуОповещения(КлиентскиеПараметры.ОбработкаРезультата, - КлиентскиеПараметры.ОписаниеДанных); + ОбработкаРезультата = КлиентскиеПараметры.ОбработкаРезультата; + КлиентскиеПараметры.ОбработкаРезультата = Неопределено; + ВыполнитьОбработкуОповещения(ОбработкаРезультата, КлиентскиеПараметры.ОписаниеДанных); КонецЕсли; КонецПроцедуры @@ -1841,6 +1825,15 @@ // Если свойство не будет вставлено или заполнено - это считается отказом // от продолжения и будет вызвана ОбработкаРезультата с результатом Ложь. // +// Для пакетного запроса разрешений у пользователя веб-клиента на сохранение файла данных +// и подписей, нужно вставить параметр ОбработкаЗапросаРазрешений типа ОписаниеОповещения. +// В процедуру будет передана Структура с параметрами: +// * Вызовы - Массив - с описанием вызовов для сохранения подписей. +// * ОбработкаПродолжения - ОписаниеОповещения - оповещение, которое нужно выполнить +// после запроса разрешений, - параметры процедуры как у +// оповещения для метода НачатьЗапросРазрешенияПользователя. +// Если разрешение не получено, значит все отменено. +// // ОбработкаРезультата - ОписаниеОповещения - необязательный параметр. // В результат передается параметр: // * Булево - Истина, если все прошло успешно. @@ -1851,8 +1844,8 @@ Контекст.Вставить("ОписаниеДанных", ОписаниеДанных); Контекст.Вставить("ОбработкаРезультата", ОбработкаРезультата); - СохранятьВсеПодписи = ЭлектроннаяПодписьКлиентСервер.ПерсональныеНастройки( - ).ДействияПриСохраненииСЭП = "СохранятьВсеПодписи"; + ПерсональныеНастройки = ЭлектроннаяПодписьКлиентСервер.ПерсональныеНастройки(); + СохранятьВсеПодписи = ПерсональныеНастройки.ДействияПриСохраненииСЭП = "СохранятьВсеПодписи"; СерверныеПараметры = Новый Структура; СерверныеПараметры.Вставить("ЗаголовокДанных", НСтр("ru = 'Данные'")); @@ -1940,6 +1933,10 @@ Возврат; КонецЕсли; + Если Результат.Свойство("ОбработкаЗапросаРазрешений") Тогда + Контекст.Вставить("ОбработкаЗапросаРазрешений", Результат.ОбработкаЗапросаРазрешений); + КонецЕсли; + Контекст.Вставить("ПолноеИмяФайла", Результат.ПолноеИмяФайла); Контекст.Вставить("СоставИмениФайлаДанных", ОбщегоНазначенияКлиентСервер.РазложитьПолноеИмяФайла(Контекст.ПолноеИмяФайла)); @@ -2080,6 +2077,9 @@ Процедура СохранитьДанныеВместеСПодписьюПослеЦикла(Контекст) Если Не Контекст.Подключено Тогда + Если Контекст.ОбработкаРезультата <> Неопределено Тогда + ВыполнитьОбработкуОповещения(Контекст.ОбработкаРезультата, Истина); + КонецЕсли; Возврат; КонецЕсли; @@ -2095,8 +2095,18 @@ Вызов.Добавить(Контекст.ПутьКФайлам); Вызов.Добавить(Ложь); Вызовы.Добавить(Вызов); - НачатьЗапросРазрешенияПользователя(Новый ОписаниеОповещения( - "СохранитьДанныеВместеСПодписьюПослеПолученияРазрешений", ЭтотОбъект, Контекст), Вызовы); + + ОбработкаПродолжения = Новый ОписаниеОповещения( + "СохранитьДанныеВместеСПодписьюПослеПолученияРазрешений", ЭтотОбъект, Контекст); + + Если Контекст.Свойство("ОбработкаЗапросаРазрешений") Тогда + ПараметрыВыполнения = Новый Структура; + ПараметрыВыполнения.Вставить("Вызовы", Вызовы); + ПараметрыВыполнения.Вставить("ОбработкаПродолжения", ОбработкаПродолжения); + ВыполнитьОбработкуОповещения(Контекст.ОбработкаЗапросаРазрешений, ПараметрыВыполнения); + Иначе + НачатьЗапросРазрешенияПользователя(ОбработкаПродолжения, Вызовы); + КонецЕсли; Иначе СохранитьДанныеВместеСПодписьюПослеПолученияРазрешений(Ложь, Контекст); КонецЕсли; @@ -2106,7 +2116,16 @@ // Продолжение процедуры ЭлектроннаяПодписьКлиент.СохранитьДанныеВместеСПодписью. Процедура СохранитьДанныеВместеСПодписьюПослеПолученияРазрешений(РазрешенияПолучены, Контекст) Экспорт - Если РазрешенияПолучены Тогда + Если Не РазрешенияПолучены + И Контекст.ПолучаемыеФайлы.Количество() > 0 + И Контекст.Свойство("ОбработкаЗапросаРазрешений") Тогда + + // Файл данных не был получен - отчет не требуется. + Если Контекст.ОбработкаРезультата <> Неопределено Тогда + ВыполнитьОбработкуОповещения(Контекст.ОбработкаРезультата, Ложь); + КонецЕсли; + + ИначеЕсли РазрешенияПолучены Тогда НачатьПолучениеФайлов(Новый ОписаниеОповещения( "СохранитьДанныеВместеСПодписьюПослеПолученияФайлов", ЭтотОбъект, Контекст), Контекст.ПолучаемыеФайлы, Контекст.ПутьКФайлам, Ложь); @@ -2143,7 +2162,17 @@ ПараметрыФормы.Вставить("Текст", Текст); ПараметрыФормы.Вставить("ПапкаСФайлами", Контекст.СоставИмениФайлаДанных.Путь); - ОткрытьФорму("ОбщаяФорма.ОтчетОСохраненииФайловЭлектронныхПодписей", ПараметрыФормы); + ОткрытьФорму("ОбщаяФорма.ОтчетОСохраненииФайловЭлектронныхПодписей", ПараметрыФормы,,,,, + Новый ОписаниеОповещения("СохранитьДанныеВместеСПодписьюПослеЗакрытияОтчета", ЭтотОбъект, Контекст)); + +КонецПроцедуры + +// Продолжение процедуры ЭлектроннаяПодписьКлиент.СохранитьДанныеВместеСПодписью. +Процедура СохранитьДанныеВместеСПодписьюПослеЗакрытияОтчета(Результат, Контекст) Экспорт + + Если Контекст.ОбработкаРезультата <> Неопределено Тогда + ВыполнитьОбработкуОповещения(Контекст.ОбработкаРезультата, Истина); + КонецЕсли; КонецПроцедуры @@ -2152,7 +2181,7 @@ Процедура ОткрытьИнструкциюПоРаботеСПрограммами() Экспорт Раздел = "БухгалтерскийИНалоговыйУчет"; - ЭлектроннаяПодписьПереопределяемыйКлиент.ПриОпределенииРазделаСтатьиНаИТС(Раздел); + ЭлектроннаяПодписьКлиентПереопределяемый.ПриОпределенииРазделаСтатьиНаИТС(Раздел); Если Раздел = "УчетВГосударственныхУчреждениях" Тогда ПерейтиПоНавигационнойСсылке("http://its.1c.ru/bmk/bud/digsig"); @@ -2295,7 +2324,7 @@ КлиентскиеПараметры.ОписаниеДанных.Свойство("ПараметрыДополнительныхДействий", ВходныеПараметры); ВыходныеПараметры = Форма.ВыходныеПараметрыДополнительныхДействий; Форма.ВыходныеПараметрыДополнительныхДействий = Неопределено; - ЭлектроннаяПодписьПереопределяемыйКлиент.ПередНачаломОперации( + ЭлектроннаяПодписьКлиентПереопределяемый.ПередНачаломОперации( ?(Расшифровка, "Расшифровка", "Подписание"), ВходныеПараметры, ВыходныеПараметры); КонецЕсли; @@ -2550,7 +2579,7 @@ ДанныеВыбора = Новый СписокЗначений; Для каждого ЭлементСписка Из Форма.СертификатСписокВыбора Цикл - Если Найти(ВРег(ЭлементСписка.Представление), ВРег(Текст)) > 0 Тогда + Если СтрНайти(ВРег(ЭлементСписка.Представление), ВРег(Текст)) > 0 Тогда ДанныеВыбора.Добавить(ЭлементСписка.Значение, ЭлементСписка.Представление); КонецЕсли; КонецЦикла; @@ -2604,7 +2633,7 @@ Процедура ВыполнитьНаСторонеПослеПоискаСертификата(Результат, Контекст) Экспорт Если ТипЗнч(Результат) <> Тип("СертификатКриптографии") И Результат <> Null Тогда - ВыполнитьОбработкуОповещения(Контекст.Оповещение, Результат); + ВыполнитьОбработкуОповещения(Контекст.Оповещение, Новый Структура("Ошибка", Результат)); Возврат; КонецЕсли; Контекст.Вставить("СертификатКриптографии", Результат); @@ -3209,6 +3238,9 @@ КонецЕсли; Если ДополнительныеПараметры.ПриИзмененииРеквизитаПароль Тогда + Если РеквизитПароль = "****************" Тогда + Возврат; + КонецЕсли; СвойстваПароля.Значение = РеквизитПароль; СвойстваПароля.ПарольПроверен = Ложь; РеквизитПароль = ?(СвойстваПароля.Значение <> "", "****************", ""); @@ -3323,4 +3355,55 @@ КонецПроцедуры +// Для процедур СохранитьСертификатПродолжение, СохранитьЗапросНаСертификатПослеУстановкиРасширения. + +// Готовит строку для использования в качестве имени файла. +Функция ПодготовитьСтрокуДляИмениФайла(Строка, ЗаменаПробела = Неопределено) + + ЗаменаСимволов = Новый Соответствие; + ЗаменаСимволов.Вставить("\", " "); + ЗаменаСимволов.Вставить("/", " "); + ЗаменаСимволов.Вставить("*", " "); + ЗаменаСимволов.Вставить("<", " "); + ЗаменаСимволов.Вставить(">", " "); + ЗаменаСимволов.Вставить("|", " "); + ЗаменаСимволов.Вставить(":", ""); + ЗаменаСимволов.Вставить("""", ""); + ЗаменаСимволов.Вставить("?", ""); + ЗаменаСимволов.Вставить(Символы.ВК, ""); + ЗаменаСимволов.Вставить(Символы.ПС, " "); + ЗаменаСимволов.Вставить(Символы.Таб, " "); + ЗаменаСимволов.Вставить(Символы.НПП, " "); + // замена символов кавычек + ЗаменаСимволов.Вставить(Символ(171), ""); + ЗаменаСимволов.Вставить(Символ(187), ""); + ЗаменаСимволов.Вставить(Символ(8195), ""); + ЗаменаСимволов.Вставить(Символ(8194), ""); + ЗаменаСимволов.Вставить(Символ(8216), ""); + ЗаменаСимволов.Вставить(Символ(8218), ""); + ЗаменаСимволов.Вставить(Символ(8217), ""); + ЗаменаСимволов.Вставить(Символ(8220), ""); + ЗаменаСимволов.Вставить(Символ(8222), ""); + ЗаменаСимволов.Вставить(Символ(8221), ""); + + СтрокаПодготовленная = ""; + + КоличествоСимволов = СтрДлина(Строка); + + Для НомерСимвола = 1 По КоличествоСимволов Цикл + Символ = Сред(Строка, НомерСимвола, 1); + Если ЗаменаСимволов[Символ] <> Неопределено Тогда + Символ = ЗаменаСимволов[Символ]; + КонецЕсли; + СтрокаПодготовленная = СтрокаПодготовленная + Символ; + КонецЦикла; + + Если ЗаменаПробела <> Неопределено Тогда + СтрокаПодготовленная = СтрЗаменить(ЗаменаПробела, " ", ЗаменаПробела); + КонецЕсли; + + Возврат СокрЛП(СтрокаПодготовленная); + +КонецФункции + #КонецОбласти diff --git a/SSL/src/CommonModules/ЭлектроннаяПодписьСлужебныйКлиентСервер/Module.bsl b/SSL/src/CommonModules/ЭлектроннаяПодписьСлужебныйКлиентСервер/Module.bsl index ff6c04c38..2bcbcb397 100644 --- a/SSL/src/CommonModules/ЭлектроннаяПодписьСлужебныйКлиентСервер/Module.bsl +++ b/SSL/src/CommonModules/ЭлектроннаяПодписьСлужебныйКлиентСервер/Module.bsl @@ -20,8 +20,8 @@ // Функция ПолучитьСоответствиеФайловИПодписей(ИменаФайлов) Экспорт - РасширениеДляФайловПодписи = ЭлектроннаяПодписьКлиентСервер.ПерсональныеНастройки( - ).РасширениеДляФайловПодписи; + ПерсональныеНастройки = ЭлектроннаяПодписьКлиентСервер.ПерсональныеНастройки(); + РасширениеДляФайловПодписи = ПерсональныеНастройки.РасширениеДляФайловПодписи; Результат = Новый Соответствие; @@ -30,7 +30,7 @@ ИменаФайловПодписей = Новый Массив; Для Каждого ИмяФайла Из ИменаФайлов Цикл - Если Прав(ИмяФайла, 3) = РасширениеДляФайловПодписи Тогда + Если СтрЗаканчиваетсяНа(ИмяФайла, РасширениеДляФайловПодписи) Тогда ИменаФайловПодписей.Добавить(ИмяФайла); Иначе ИменаФайловДанных.Добавить(ИмяФайла); @@ -115,8 +115,9 @@ Если ЭтоLinux Тогда Если ПутиКПрограммамНаСерверахLinux = Неопределено Тогда - ПутьКПрограмме = ЭлектроннаяПодписьКлиентСервер.ПерсональныеНастройки( - ).ПутиКПрограммамЭлектроннойПодписиИШифрования.Получить(ОписаниеПрограммы.Ссылка); + ПерсональныеНастройки = ЭлектроннаяПодписьКлиентСервер.ПерсональныеНастройки(); + ПутьКПрограмме = ПерсональныеНастройки.ПутиКПрограммамЭлектроннойПодписиИШифрования.Получить( + ОписаниеПрограммы.Ссылка); Иначе ПутьКПрограмме = ПутиКПрограммамНаСерверахLinux.Получить(ОписаниеПрограммы.Ссылка); КонецЕсли; @@ -218,16 +219,34 @@ КонецПроцедуры // Только для внутреннего использования. -Функция РежимыПроверкиСертификата() Экспорт +Функция РежимыПроверкиСертификата(ИгнорироватьВремяДействия = Ложь) Экспорт МассивРежимовПроверки = Новый Массив; - МассивРежимовПроверки.Добавить(РежимПроверкиСертификатаКриптографии.ИгнорироватьВремяДействия); МассивРежимовПроверки.Добавить(РежимПроверкиСертификатаКриптографии.РазрешитьТестовыеСертификаты); + Если ИгнорироватьВремяДействия Тогда + МассивРежимовПроверки.Добавить(РежимПроверкиСертификатаКриптографии.ИгнорироватьВремяДействия); + КонецЕсли; + Возврат МассивРежимовПроверки; КонецФункции +// Только для внутреннего использования. +Функция СертификатПросрочен(Сертификат, НаДату) Экспорт + + Если Не ЗначениеЗаполнено(НаДату) Тогда + Возврат ""; + КонецЕсли; + + Если Сертификат.ДатаОкончания > НачалоДня(НаДату) Тогда + Возврат ""; + КонецЕсли; + + Возврат СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'На %1 просрочен сертификат.'"), Формат(НачалоДня(НаДату), "ДЛФ=D")); + +КонецФункции + // Только для внутреннего использования. Функция ТипХранилищаДляПоискаСертификата(ТолькоВЛичномХранилище) Экспорт @@ -395,6 +414,55 @@ КонецФункции +// Только для внутреннего использования. +Функция ДатаПодписанияУниверсальная(Подпись) Экспорт + +#Если ВебКлиент Тогда + + СимволыБайт = СимволыБайтДвоичныхДанных(Подпись); + ЗаголовокДаты = Символ(15) + Символ(23) + Символ(13); + Позиция = СтрНайти(СимволыБайт, ЗаголовокДаты); + + Если Позиция = 0 Тогда + Возврат Неопределено; + КонецЕсли; + + ДатаСтрокой = Сред(СимволыБайт, Позиция + 3, 12); // Дата в формате ASCII. + ДатаПодписания = Дата("20" + ДатаСтрокой); // Универсальное время. + + Возврат ДатаПодписания; + +#Иначе + + ДатаПодписания = Неопределено; + + ИмяВременногоФайла = ПолучитьИмяВременногоФайла(); + Подпись.Записать(ИмяВременногоФайла); + + ЧтениеТекста = Новый ЧтениеТекста(ИмяВременногоФайла); + Символ = ЧтениеТекста.Прочитать(1); + + Пока Символ <> Неопределено Цикл + Если КодСимвола(Символ) = 15 Тогда + Символ = ЧтениеТекста.Прочитать(2); + Если КодСимвола(Символ, 1) = 23 И КодСимвола(Символ, 2) = 13 Тогда + ДатаСтрокой = ЧтениеТекста.Прочитать(12); + ДатаПодписания = Дата("20" + ДатаСтрокой); + Прервать; + КонецЕсли; + КонецЕсли; + Символ = ЧтениеТекста.Прочитать(1); + КонецЦикла; + + ЧтениеТекста.Закрыть(); + УдалитьФайлы(ИмяВременногоФайла); + +#КонецЕсли + + Возврат ДатаПодписания; + +КонецФункции + //////////////////////////////////////////////////////////////////////////////// // Вспомогательные процедуры и функции. @@ -407,7 +475,7 @@ ИмяБезРасширения = СтруктураИмени.ИмяБезРасширения; Для Каждого ИмяФайлаПодписи Из ИменаФайловПодписей Цикл - Если Найти(ИмяФайлаПодписи, ИмяБезРасширения) > 0 Тогда + Если СтрНайти(ИмяФайлаПодписи, ИмяБезРасширения) > 0 Тогда ИменаПодписей.Добавить(ИмяФайлаПодписи); КонецЕсли; КонецЦикла; @@ -420,4 +488,74 @@ КонецФункции +// Для процедуры ДатаПодписания. +Функция СимволыБайтДвоичныхДанных(ДвоичныеДанные) + + Строки = СтрРазделить(Base64Строка(ДвоичныеДанные), Символы.ПС, Ложь); + СимволыБайт = ""; + + ТекущийНомерСимвола = 0; + + Шаблон = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"; + + Для Каждого Строка Из Строки Цикл + Строка = СокрП(Строка); + Пока СтрДлина(Строка) > 0 Цикл + Четверка = Лев(Строка, 4); + Строка = Сред(Строка, 5); + + КоличествоБайт = 1; + + Символ = Сред(Четверка, 1, 1); + Позиция = СтрНайти(Шаблон, Символ); + Если Позиция > 0 Тогда + Старшие6БитБайта1 = (Позиция - 1) * 4; + Иначе + Возврат ""; + КонецЕсли; + + Символ = Сред(Четверка, 2, 1); + Позиция = СтрНайти(Шаблон, Символ); + Если Позиция > 0 Тогда + Число2 = Позиция - 1; + ИначеЕсли Символ <> "=" И Символ <> "" Тогда + Возврат ""; + Иначе + Прервать; + КонецЕсли; + Младшие2БитаБайта1 = Цел(Число2 / 16); + СимволыБайт = СимволыБайт + Символ(Старшие6БитБайта1 + Младшие2БитаБайта1); + + Символ = Сред(Четверка, 3, 1); + Позиция = СтрНайти(Шаблон, Символ); + Если Позиция > 0 Тогда + Число3 = Позиция - 1; + ИначеЕсли Символ <> "=" И Символ <> "" Тогда + Возврат ""; + Иначе + Прервать; + КонецЕсли; + Старшие4БитаБайта2 = (Число2 - Младшие2БитаБайта1 * 16) * 16; + Младшие4БитаБайта2 = Цел(Число3 / 4); + СимволыБайт = СимволыБайт + Символ(Старшие4БитаБайта2 + Младшие4БитаБайта2); + + Символ = Сред(Четверка, 4, 1); + Позиция = СтрНайти(Шаблон, Символ); + Если Позиция > 0 Тогда + Младшие6БитБайта3 = Позиция - 1; + ИначеЕсли Символ <> "=" И Символ <> "" Тогда + Возврат ""; + Иначе + Прервать; + КонецЕсли; + Старшие2БитаБайта3 = (Число3 - Младшие4БитаБайта2 * 4) * 64; + СимволыБайт = СимволыБайт + Символ(Старшие2БитаБайта3 + Младшие6БитБайта3); + + КонецЦикла; + КонецЦикла; + + Возврат СимволыБайт; + +КонецФункции + #КонецОбласти diff --git a/SSL/src/CommonPictures/Skype/Picture.png b/SSL/src/CommonPictures/Skype/Picture.png new file mode 100644 index 000000000..08aaabe3a Binary files /dev/null and b/SSL/src/CommonPictures/Skype/Picture.png differ diff --git a/SSL/src/CommonPictures/Skype/Skype.mdo b/SSL/src/CommonPictures/Skype/Skype.mdo new file mode 100644 index 000000000..5919054e8 --- /dev/null +++ b/SSL/src/CommonPictures/Skype/Skype.mdo @@ -0,0 +1,8 @@ +<?xml version="1.0" encoding="UTF-8"?> +<mdclass:CommonPicture xmlns:mdclass="http://g5.1c.ru/v8/dt/metadata/mdclass" uuid="42e39ef7-268f-4053-b4e5-4bceab17d3e4"> + <name>Skype</name> + <synonym> + <key>ru</key> + <value>Skype</value> + </synonym> +</mdclass:CommonPicture> diff --git a/SSL/src/CommonPictures/ВидСравнения/Picture.png b/SSL/src/CommonPictures/ВидСравнения/Picture.png new file mode 100644 index 000000000..acf5df2f2 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..918bc632b --- /dev/null +++ b/SSL/src/CommonPictures/ВидСравнения/ВидСравнения.mdo @@ -0,0 +1,8 @@ +<?xml version="1.0" encoding="UTF-8"?> +<mdclass:CommonPicture xmlns:mdclass="http://g5.1c.ru/v8/dt/metadata/mdclass" uuid="dcdf2b25-b024-4a89-b2c4-0a2ee43ef623"> + <name>ВидСравнения</name> + <synonym> + <key>ru</key> + <value>Вид сравнения</value> + </synonym> +</mdclass:CommonPicture> diff --git a/SSL/src/CommonPictures/ВидыКонтактнойИнформации/Picture.png b/SSL/src/CommonPictures/ВидыКонтактнойИнформации/Picture.png new file mode 100644 index 000000000..25ad8f4e2 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..1dd447726 --- /dev/null +++ b/SSL/src/CommonPictures/ВидыКонтактнойИнформации/ВидыКонтактнойИнформации.mdo @@ -0,0 +1,8 @@ +<?xml version="1.0" encoding="UTF-8"?> +<mdclass:CommonPicture xmlns:mdclass="http://g5.1c.ru/v8/dt/metadata/mdclass" uuid="9200527c-b6b9-4962-9440-10449583e1e3"> + <name>ВидыКонтактнойИнформации</name> + <synonym> + <key>ru</key> + <value>Виды контактной информации</value> + </synonym> +</mdclass:CommonPicture> diff --git a/SSL/src/CommonPictures/ВнешняяСсылкаНаОбъектИнформационнойБазы/Picture.png b/SSL/src/CommonPictures/ВнешняяСсылкаНаОбъектИнформационнойБазы/Picture.png new file mode 100644 index 000000000..cf09755c0 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..d31a86508 --- /dev/null +++ b/SSL/src/CommonPictures/ВнешняяСсылкаНаОбъектИнформационнойБазы/ВнешняяСсылкаНаОбъектИнформационнойБазы.mdo @@ -0,0 +1,8 @@ +<?xml version="1.0" encoding="UTF-8"?> +<mdclass:CommonPicture xmlns:mdclass="http://g5.1c.ru/v8/dt/metadata/mdclass" uuid="484003f5-a6df-48fb-a395-d0e0ebc8cc0d"> + <name>ВнешняяСсылкаНаОбъектИнформационнойБазы</name> + <synonym> + <key>ru</key> + <value>Внешняя ссылка на объект информационной базы</value> + </synonym> +</mdclass:CommonPicture> diff --git a/SSL/src/CommonPictures/ЗаставкаВнешнейОперации/Picture.png b/SSL/src/CommonPictures/ЗаставкаВнешнейОперации/Picture.png index 5a4892322..f8dcc4156 100644 Binary files a/SSL/src/CommonPictures/ЗаставкаВнешнейОперации/Picture.png and b/SSL/src/CommonPictures/ЗаставкаВнешнейОперации/Picture.png differ diff --git a/SSL/src/CommonPictures/Отборы/Picture.png b/SSL/src/CommonPictures/Отборы/Picture.png new file mode 100644 index 000000000..b657b7394 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..2d2d921d6 --- /dev/null +++ b/SSL/src/CommonPictures/Отборы/Отборы.mdo @@ -0,0 +1,8 @@ +<?xml version="1.0" encoding="UTF-8"?> +<mdclass:CommonPicture xmlns:mdclass="http://g5.1c.ru/v8/dt/metadata/mdclass" uuid="6fe9a455-7fef-4a1b-8109-57eafc17e2b6"> + <name>Отборы</name> + <synonym> + <key>ru</key> + <value>Отборы</value> + </synonym> +</mdclass:CommonPicture> diff --git a/SSL/src/CommonPictures/ОтправитьSMS/Picture.png b/SSL/src/CommonPictures/ОтправитьSMS/Picture.png new file mode 100644 index 000000000..cad505491 Binary files /dev/null and b/SSL/src/CommonPictures/ОтправитьSMS/Picture.png differ diff --git a/SSL/src/CommonPictures/ОтправитьSMS/ОтправитьSMS.mdo b/SSL/src/CommonPictures/ОтправитьSMS/ОтправитьSMS.mdo new file mode 100644 index 000000000..8a4819e8e --- /dev/null +++ b/SSL/src/CommonPictures/ОтправитьSMS/ОтправитьSMS.mdo @@ -0,0 +1,8 @@ +<?xml version="1.0" encoding="UTF-8"?> +<mdclass:CommonPicture xmlns:mdclass="http://g5.1c.ru/v8/dt/metadata/mdclass" uuid="7a0cdc94-9e53-4fcc-ac2f-97ad2ad939f5"> + <name>ОтправитьSMS</name> + <synonym> + <key>ru</key> + <value>Отправить SMS</value> + </synonym> +</mdclass:CommonPicture> diff --git a/SSL/src/CommonPictures/Оформление/Picture.png b/SSL/src/CommonPictures/Оформление/Picture.png new file mode 100644 index 000000000..45a7abd09 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..86510d44d --- /dev/null +++ b/SSL/src/CommonPictures/Оформление/Оформление.mdo @@ -0,0 +1,8 @@ +<?xml version="1.0" encoding="UTF-8"?> +<mdclass:CommonPicture xmlns:mdclass="http://g5.1c.ru/v8/dt/metadata/mdclass" uuid="30f59002-a23d-4eff-b84f-f280f11b220e"> + <name>Оформление</name> + <synonym> + <key>ru</key> + <value>Оформление</value> + </synonym> +</mdclass:CommonPicture> diff --git a/SSL/src/CommonPictures/ПереместитьВлевоВсе/Picture.png b/SSL/src/CommonPictures/ПереместитьВлевоВсе/Picture.png new file mode 100644 index 000000000..4e67cca1f 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..f8c73d73d --- /dev/null +++ b/SSL/src/CommonPictures/ПереместитьВлевоВсе/ПереместитьВлевоВсе.mdo @@ -0,0 +1,8 @@ +<?xml version="1.0" encoding="UTF-8"?> +<mdclass:CommonPicture xmlns:mdclass="http://g5.1c.ru/v8/dt/metadata/mdclass" uuid="b1e837ff-0edd-4525-b2e2-92cc7990e00e"> + <name>ПереместитьВлевоВсе</name> + <synonym> + <key>ru</key> + <value>Переместить влево все</value> + </synonym> +</mdclass:CommonPicture> diff --git a/SSL/src/CommonPictures/ПиктограммыНастроекОтчета/Picture.png b/SSL/src/CommonPictures/ПиктограммыНастроекОтчета/Picture.png index 2878b8e98..f3fd86c82 100644 Binary files a/SSL/src/CommonPictures/ПиктограммыНастроекОтчета/Picture.png and b/SSL/src/CommonPictures/ПиктограммыНастроекОтчета/Picture.png differ diff --git a/SSL/src/CommonPictures/Позвонить/Picture.png b/SSL/src/CommonPictures/Позвонить/Picture.png new file mode 100644 index 000000000..334fe1a24 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..601e42a11 --- /dev/null +++ b/SSL/src/CommonPictures/Позвонить/Позвонить.mdo @@ -0,0 +1,8 @@ +<?xml version="1.0" encoding="UTF-8"?> +<mdclass:CommonPicture xmlns:mdclass="http://g5.1c.ru/v8/dt/metadata/mdclass" uuid="626da0dd-d75b-4779-be1f-9b71d2f2d4e1"> + <name>Позвонить</name> + <synonym> + <key>ru</key> + <value>Позвонить</value> + </synonym> +</mdclass:CommonPicture> diff --git a/SSL/src/CommonPictures/ПозвонитьИлиОтправитьSMS/Picture.png b/SSL/src/CommonPictures/ПозвонитьИлиОтправитьSMS/Picture.png new file mode 100644 index 000000000..8b07bfa2a Binary files /dev/null and b/SSL/src/CommonPictures/ПозвонитьИлиОтправитьSMS/Picture.png differ diff --git a/SSL/src/CommonPictures/ПозвонитьИлиОтправитьSMS/ПозвонитьИлиОтправитьSMS.mdo b/SSL/src/CommonPictures/ПозвонитьИлиОтправитьSMS/ПозвонитьИлиОтправитьSMS.mdo new file mode 100644 index 000000000..9c31057eb --- /dev/null +++ b/SSL/src/CommonPictures/ПозвонитьИлиОтправитьSMS/ПозвонитьИлиОтправитьSMS.mdo @@ -0,0 +1,8 @@ +<?xml version="1.0" encoding="UTF-8"?> +<mdclass:CommonPicture xmlns:mdclass="http://g5.1c.ru/v8/dt/metadata/mdclass" uuid="1d4b7f71-6c72-4f41-a2ed-1f2fe2122c04"> + <name>ПозвонитьИлиОтправитьSMS</name> + <synonym> + <key>ru</key> + <value>Позвонить или отправить SMS</value> + </synonym> +</mdclass:CommonPicture> diff --git a/SSL/src/CommonPictures/ПоляИСортировки/Picture.png b/SSL/src/CommonPictures/ПоляИСортировки/Picture.png new file mode 100644 index 000000000..5a60b98e5 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..701fa9691 --- /dev/null +++ b/SSL/src/CommonPictures/ПоляИСортировки/ПоляИСортировки.mdo @@ -0,0 +1,8 @@ +<?xml version="1.0" encoding="UTF-8"?> +<mdclass:CommonPicture xmlns:mdclass="http://g5.1c.ru/v8/dt/metadata/mdclass" uuid="772e7011-0019-4edc-b673-b7151cf4fa6c"> + <name>ПоляИСортировки</name> + <synonym> + <key>ru</key> + <value>Поля и сортировки</value> + </synonym> +</mdclass:CommonPicture> diff --git a/SSL/src/CommonPictures/Пометка/Picture.png b/SSL/src/CommonPictures/Пометка/Picture.png new file mode 100644 index 000000000..9fec2e705 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..75ee03477 --- /dev/null +++ b/SSL/src/CommonPictures/Пометка/Пометка.mdo @@ -0,0 +1,8 @@ +<?xml version="1.0" encoding="UTF-8"?> +<mdclass:CommonPicture xmlns:mdclass="http://g5.1c.ru/v8/dt/metadata/mdclass" uuid="21ac47fa-12c2-43e2-9b57-afdf521d3485"> + <name>Пометка</name> + <synonym> + <key>ru</key> + <value>Пометка</value> + </synonym> +</mdclass:CommonPicture> diff --git a/SSL/src/CommonPictures/Пустая/Picture.png b/SSL/src/CommonPictures/Пустая/Picture.png new file mode 100644 index 000000000..96729e159 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..5dde8b9e2 --- /dev/null +++ b/SSL/src/CommonPictures/Пустая/Пустая.mdo @@ -0,0 +1,8 @@ +<?xml version="1.0" encoding="UTF-8"?> +<mdclass:CommonPicture xmlns:mdclass="http://g5.1c.ru/v8/dt/metadata/mdclass" uuid="4875a235-bcc8-47eb-83e3-a66f0f690b97"> + <name>Пустая</name> + <synonym> + <key>ru</key> + <value>Пустая</value> + </synonym> +</mdclass:CommonPicture> diff --git a/SSL/src/CommonPictures/Структура/Picture.png b/SSL/src/CommonPictures/Структура/Picture.png new file mode 100644 index 000000000..d5e29f2ae 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..bc5eaf47c --- /dev/null +++ b/SSL/src/CommonPictures/Структура/Структура.mdo @@ -0,0 +1,8 @@ +<?xml version="1.0" encoding="UTF-8"?> +<mdclass:CommonPicture xmlns:mdclass="http://g5.1c.ru/v8/dt/metadata/mdclass" uuid="d97c6536-fd62-4c9a-b83e-490a29a0721b"> + <name>Структура</name> + <synonym> + <key>ru</key> + <value>Структура</value> + </synonym> +</mdclass:CommonPicture> diff --git a/SSL/src/CommonTemplates/ИнструкцияПоПроверкеКонтрагентов/ИнструкцияПоПроверкеКонтрагентов.mdo b/SSL/src/CommonTemplates/ИнструкцияПоПроверкеКонтрагентов/ИнструкцияПоПроверкеКонтрагентов.mdo index 74c1ed9d1..78bd8fb80 100644 --- a/SSL/src/CommonTemplates/ИнструкцияПоПроверкеКонтрагентов/ИнструкцияПоПроверкеКонтрагентов.mdo +++ b/SSL/src/CommonTemplates/ИнструкцияПоПроверкеКонтрагентов/ИнструкцияПоПроверкеКонтрагентов.mdo @@ -3,7 +3,7 @@ <name>ИнструкцияПоПроверкеКонтрагентов</name> <synonym> <key>ru</key> - <value>Инструкция по использованию сервиса</value> + <value>Инструкция по проверке контрагентов</value> </synonym> <templateType>HTMLDocument</templateType> </mdclass:CommonTemplate> diff --git a/SSL/src/CommonTemplates/КомпонентаTWAIN/Template.bin b/SSL/src/CommonTemplates/КомпонентаTWAIN/Template.bin index afca8f8d4..0add052b1 100644 Binary files a/SSL/src/CommonTemplates/КомпонентаTWAIN/Template.bin and b/SSL/src/CommonTemplates/КомпонентаTWAIN/Template.bin differ diff --git a/SSL/src/CommonTemplates/КомпонентаПечатиQRКода/Template.bin b/SSL/src/CommonTemplates/КомпонентаПечатиQRКода/Template.bin index e6acd9f9c..163f485b0 100644 Binary files a/SSL/src/CommonTemplates/КомпонентаПечатиQRКода/Template.bin and b/SSL/src/CommonTemplates/КомпонентаПечатиQRКода/Template.bin differ diff --git a/SSL/src/CommonTemplates/КомпонентаПоискаСтрок/Template.bin b/SSL/src/CommonTemplates/КомпонентаПоискаСтрок/Template.bin new file mode 100644 index 000000000..006f96afd Binary files /dev/null and b/SSL/src/CommonTemplates/КомпонентаПоискаСтрок/Template.bin differ diff --git a/SSL/src/CommonTemplates/КомпонентаПоискаСтрок/КомпонентаПоискаСтрок.mdo b/SSL/src/CommonTemplates/КомпонентаПоискаСтрок/КомпонентаПоискаСтрок.mdo new file mode 100644 index 000000000..9a991d936 --- /dev/null +++ b/SSL/src/CommonTemplates/КомпонентаПоискаСтрок/КомпонентаПоискаСтрок.mdo @@ -0,0 +1,9 @@ +<?xml version="1.0" encoding="UTF-8"?> +<mdclass:CommonTemplate xmlns:mdclass="http://g5.1c.ru/v8/dt/metadata/mdclass" uuid="c6af8b0f-3767-4198-88e2-f5763cb0294a"> + <name>КомпонентаПоискаСтрок</name> + <synonym> + <key>ru</key> + <value>Компонента поиска строк</value> + </synonym> + <templateType>BinaryData</templateType> +</mdclass:CommonTemplate> diff --git a/SSL/src/CommonTemplates/ПолучениеДереваОбработчиковОбновления/Template.dcs b/SSL/src/CommonTemplates/ПолучениеДереваОбработчиковОбновления/Template.dcs index a9108279b..35f4bf3cd 100644 --- a/SSL/src/CommonTemplates/ПолучениеДереваОбработчиковОбновления/Template.dcs +++ b/SSL/src/CommonTemplates/ПолучениеДереваОбработчиковОбновления/Template.dcs @@ -194,6 +194,19 @@ <v8:Type>xs:boolean</v8:Type> </valueType> </field> + <field xsi:type="DataSetFieldField"> + <dataPath>Идентификатор</dataPath> + <field>Идентификатор</field> + <title xsi:type="v8:LocalStringType"> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Идентификатор</v8:content> + </v8:item> + + + v8:UUID + + ИсточникДанных1 Обработчики @@ -441,6 +454,9 @@ РежимВыполнения + + Идентификатор + diff --git a/SSL/src/Configuration/Configuration.mdo b/SSL/src/Configuration/Configuration.mdo index 00512bd1c..c2b5255df 100644 --- a/SSL/src/Configuration/Configuration.mdo +++ b/SSL/src/Configuration/Configuration.mdo @@ -1,24 +1,24 @@ - + БиблиотекаСтандартныхПодсистем ru - Библиотека стандартных подсистем, редакция 2.2 + Библиотека стандартных подсистем, редакция 2.3 - - - - - - - + + + + + + + ManagedApplication PersonalComputer Russian Role.ПолныеПрава Role.АдминистраторСистемы Фирма "1С" - 2.2.5.36 + 2.3.1.88 http://downloads.v8.1c.ru/tmplts/ true @@ -35,11 +35,11 @@ Language.Русский ru - Библиотека стандартных подсистем, редакция 2.2 + Библиотека стандартных подсистем, редакция 2.3 ru - Библиотека стандартных подсистем, редакция 2.2 + Библиотека стандартных подсистем, редакция 2.3 @@ -55,7 +55,7 @@ NotAutoFree UseWithWarnings TaxiEnableVersion8_2 - 8.3.5 + 8.3.6 Русский @@ -87,7 +87,6 @@ StyleItem.ИзмененноеЗначениеРеквизитаЦвет StyleItem.КонтактнаяИнформацияСРедактированиемВДиалогеЦвет StyleItem.МоиВариантыОтчетовЦвет - StyleItem.НедоступныеДанныеЦвет StyleItem.НепринятаяВерсия StyleItem.НеПринятыеКИсполнениюЗадачи StyleItem.НеСтартованныйБизнесПроцесс @@ -112,6 +111,7 @@ StyleItem.ЦветФонаКорректногоКонтрагентаВДокументе StyleItem.ЦветФонаНекорректногоКонтрагентаВДокументе StyleItem.ЦветФонаТестовогоРежимаСервисаФНС + CommonPicture.Skype CommonPicture.АрхивАнкета CommonPicture.БыстрыеНастройкиОтчета CommonPicture.БыстрыйДоступ @@ -121,12 +121,15 @@ CommonPicture.ВариантыОтчетовДоступныеВсемПользователям CommonPicture.ВедущаяКонечнаяТочка CommonPicture.Взаимодействия + CommonPicture.ВидСравнения + CommonPicture.ВидыКонтактнойИнформации CommonPicture.ВидыНавигацииПоВзаимодействиямОтДопРеквизитовСведений CommonPicture.ВидыНавигацииПоВзаимодействиямОтКатегорий CommonPicture.ВидыНавигацииПоВзаимодействиямОтКонтактов CommonPicture.ВидыНавигацииПоВзаимодействиямОтПредметовВзаимодействий CommonPicture.ВидыНавигацииПоВзаимодействиямОтРеквизитаПредмета CommonPicture.ВидыОпераций + CommonPicture.ВнешняяСсылкаНаОбъектИнформационнойБазы CommonPicture.Вопрос32 CommonPicture.ВосклицательныйЗнакСерый CommonPicture.Встреча @@ -234,21 +237,25 @@ CommonPicture.ОпубликоватьФайл CommonPicture.Органайзер CommonPicture.ОсвободитьФайл + CommonPicture.Отборы CommonPicture.ОтветитьНаЭлектронноеПисьмо CommonPicture.ОтветитьНаЭлектронноеПисьмоВсем CommonPicture.ОткрытьВыбранныйФайл CommonPicture.ОткрытьМакет CommonPicture.ОтложитьРассмотрениеВзаимодействия CommonPicture.ОтменитьРедактированиеМакета + CommonPicture.ОтправитьSMS CommonPicture.ОтправитьПолучитьПочту CommonPicture.ОтправитьЭлектронноеПисьмо CommonPicture.Отчеты + CommonPicture.Оформление CommonPicture.Ошибка32 CommonPicture.Папка CommonPicture.Папки CommonPicture.ПапкиЭлектронныхПисем CommonPicture.ПереместитьВЗакладкиВзаимодействия CommonPicture.ПереместитьВлевоВверх + CommonPicture.ПереместитьВлевоВсе CommonPicture.ПереместитьВПапкуПисем CommonPicture.ПереместитьВправоВниз CommonPicture.ПереслатьЭлектронноеПисьмо @@ -264,12 +271,16 @@ CommonPicture.ПодписанЭП CommonPicture.Подсистема CommonPicture.Подчеркивание + CommonPicture.Позвонить + CommonPicture.ПозвонитьИлиОтправитьSMS CommonPicture.ПоказатьОтличия CommonPicture.ПоказатьТолькоВыбранныеРоли CommonPicture.ПолнотекстовыйПоискДалее CommonPicture.ПолнотекстовыйПоискНазад CommonPicture.ПолужирноеНачертание CommonPicture.ПользовательскийМакетУдалить + CommonPicture.ПоляИСортировки + CommonPicture.Пометка CommonPicture.ПревьюТабличногоВопросаОтветыВКолонках CommonPicture.ПревьюТабличногоВопросаОтветыВСтроках CommonPicture.ПревьюТабличногоВопросаОтветыСтрокиИКолонки @@ -281,6 +292,7 @@ CommonPicture.ПрименитьПравилаОбработкиПисем CommonPicture.ПримечаниеЖурналаРегистрации CommonPicture.ПрочиеПользовательскиеНастройки + CommonPicture.Пустая CommonPicture.РабочийКаталогПоУмолчанию CommonPicture.РазделАдминистрирование CommonPicture.РазделАдминистрирование48 @@ -336,6 +348,7 @@ CommonPicture.СтрелкаВнизСправка CommonPicture.СтрелкаВправо CommonPicture.СтрелкаВправоКрасная + CommonPicture.Структура CommonPicture.Сумма CommonPicture.ТелефонныйЗвонок CommonPicture.ТипыМакетов @@ -366,17 +379,23 @@ CommonPicture.ЭлектронноеПисьмоВходящее CommonPicture.ЭлектронноеПисьмоИсходящее SessionParameter.АвторизованныйПользователь + SessionParameter.АдресСвойствРасширений + SessionParameter.ВерсияРасширений SessionParameter.ВидыДоступаБезГруппДляЗначенияДоступа SessionParameter.ВидыДоступаСОднойГруппойДляЗначенияДоступа SessionParameter.ВидыДоступаСОтключеннымИспользованием SessionParameter.ВсеВидыДоступаКромеСпециальных SessionParameter.ВыполняетсяОбновлениеИБ SessionParameter.ДатаОбновленияПовторноИспользуемыхЗначенийМРО + SessionParameter.ДействующиеДатыЗапретаИзменения SessionParameter.ИдентификаторыТаблицСОтдельнымиНастройкамиПрав + SessionParameter.КомментарийЗамераВремени SessionParameter.ОбластьДанныхЗначение SessionParameter.ОбластьДанныхИспользование + SessionParameter.ОбновитьВерсиюДатЗапретаИзмененияПослеЗагрузкиДанных SessionParameter.ОшибкаРасхожденияВерсийПриПолученииДанных SessionParameter.ПараметрыКлиентаНаСервере + SessionParameter.ПараметрыСеансаСинхронизацииДанных SessionParameter.ПаролиСинхронизацииДанных SessionParameter.ПравилаВыборочнойРегистрацииОбъектов SessionParameter.ПравилаРегистрацииОбъектов @@ -388,24 +407,30 @@ SessionParameter.ТекущийПользователь SessionParameter.ТипыВладельцевНастроекПрав SessionParameter.ТипыЗначенийДоступаСГруппами + SessionParameter.УстановленныеРасширения Role.АдминистраторСистемы Role.Администрирование Role.БазовыеПрава + Role.БазовыеПраваВнешнегоПользователя Role.ВыводНаПринтерФайлБуферОбмена Role.ВыполнениеСинхронизацииДанных - Role.ДобавлениеИзменениеБазовойНСИ + Role.ДобавлениеИзменениеАдресныхСведений + Role.ДобавлениеИзменениеБанков Role.ДобавлениеИзменениеВариантовОтчетов Role.ДобавлениеИзменениеВзаимодействий + Role.ДобавлениеИзменениеВидовКонтактнойИнформации Role.ДобавлениеИзменениеВнешнихПользователей + Role.ДобавлениеИзменениеГрафиковРаботы Role.ДобавлениеИзменениеДополнительныхОтчетовИОбработок + Role.ДобавлениеИзменениеДополнительныхРеквизитовИСведений Role.ДобавлениеИзменениеЗаданий - Role.ДобавлениеИзменениеОбщейБазовойНСИ + Role.ДобавлениеИзменениеКалендарныхГрафиков + Role.ДобавлениеИзменениеКурсовВалют Role.ДобавлениеИзменениеОпросов Role.ДобавлениеИзменениеОтветовНаВопросыАнкет Role.ДобавлениеИзменениеПользователей Role.ДобавлениеИзменениеРассылокОтчетов Role.ДобавлениеИзменениеРолейИсполнителей - Role.ДобавлениеИзменениеСтранМира Role.ДобавлениеИзменениеШаблоновАнкет Role.ЗапускAutomation Role.ЗапускВебКлиента @@ -415,23 +440,22 @@ Role.ИзменениеВыполнениеЗадач Role.ИзменениеДополнительныхСведений Role.ИзменениеМакетовПечатныхФорм - Role.ИзменениеТекущегоВнешнегоПользователя - Role.ИзменениеТекущегоПользователя Role.ИзменениеУчастниковГруппДоступа Role.Интеграция1СБухфон Role.ИнтерактивноеОткрытиеВнешнихОтчетовИОбработок Role.ИспользованиеВариантовОтчетов Role.ИспользованиеДополнительныхОтчетовИОбработок + Role.ИспользованиеДосьеКонтрагента Role.ИспользованиеЗаметок Role.ИспользованиеНапоминаний Role.ИспользованиеСтруктурыПодчиненности Role.ИспользованиеТекущихДел Role.ИспользованиеУчетныхЗаписейЭлектроннойПочты - Role.ИспользованиеЭП + Role.ИспользованиеЭлектроннойПодписиИШифрования Role.НастройкаИОценкаПроизводительности Role.НастройкаСинхронизацииДанных Role.ОбновлениеКонфигурацииБазыДанных - Role.ПодготовкаСогласияНаОбработкуПерсональныхДанных + Role.ОтправкаSMS Role.ПолныеПрава Role.ПроверкаДоступныхОбновленийКонфигурации Role.ПросмотрЖурналаРегистрации @@ -442,19 +466,20 @@ Role.СохранениеДанныхПользователя Role.УдаленныйДоступБазоваяФункциональность Role.УдаленныйДоступОбменСообщениями - Role.ЧтениеБазовойНСИ Role.ЧтениеВерсийОбъектов Role.ЧтениеВнешнихПользователей + Role.ЧтениеГрафиковРаботы Role.ЧтениеДополнительныхСведений Role.ЧтениеЗаданий Role.ЧтениеЗадач Role.ЧтениеИнформацииОВерсияхОбъектов - Role.ЧтениеОбщейБазовойНСИ + Role.ЧтениеКурсовВалют Role.ЧтениеОтветовНаВопросыАнкет CommonTemplate.ИнструкцияКакВыполнитьУстановкуОбновленияВручную CommonTemplate.ИнструкцияПоПроверкеКонтрагентов CommonTemplate.КомпонентаTWAIN CommonTemplate.КомпонентаПечатиQRКода + CommonTemplate.КомпонентаПоискаСтрок CommonTemplate.КомпонентаСклоненияФИО CommonTemplate.ПолучениеДереваОбработчиковОбновления CommonTemplate.СтруктураПодчиненности @@ -483,12 +508,14 @@ CommonModule.БизнесПроцессыИЗадачиСервер CommonModule.БизнесПроцессыИЗадачиСобытия CommonModule.ВариантыОтчетов + CommonModule.ВариантыОтчетовВызовСервера CommonModule.ВариантыОтчетовКлиент CommonModule.ВариантыОтчетовКлиентСервер CommonModule.ВариантыОтчетовПереопределяемый CommonModule.ВариантыОтчетовПовтИсп CommonModule.ВерсионированиеОбъектов CommonModule.ВерсионированиеОбъектовКлиент + CommonModule.ВерсионированиеОбъектовПереопределяемый CommonModule.ВерсионированиеОбъектовСобытия CommonModule.Взаимодействия CommonModule.ВзаимодействияВызовСервера @@ -534,6 +561,7 @@ CommonModule.ЗапретРедактированияРеквизитовОбъектов CommonModule.ЗапретРедактированияРеквизитовОбъектовКлиент CommonModule.ЗапретРедактированияРеквизитовОбъектовПереопределяемый + CommonModule.ЗапретРедактированияРеквизитовОбъектовСлужебный CommonModule.ЗапретРедактированияРеквизитовОбъектовСлужебныйКлиент CommonModule.ЗащитаПерсональныхДанных CommonModule.ЗащитаПерсональныхДанныхКлиент @@ -553,8 +581,8 @@ CommonModule.КалендарныеГрафикиПереопределяемый CommonModule.КалендарныеГрафикиСлужебныйВМоделиСервиса CommonModule.КонтрольДинамическогоОбновленияКонфигурацииВызовСервера - CommonModule.КонтрольДинамическогоОбновленияКонфигурацииГлобальный - CommonModule.КонтрольДинамическогоОбновленияКонфигурацииКлиент + CommonModule.КонтрольДинамическогоОбновленияКонфигурацииСлужебный + CommonModule.КонтрольДинамическогоОбновленияКонфигурацииСлужебныйКлиент CommonModule.КурсыВалютСлужебныйВМоделиСервиса CommonModule.НапоминанияПользователяВызовСервера CommonModule.НапоминанияПользователяГлобальный @@ -579,6 +607,7 @@ CommonModule.ОбменДаннымиПереопределяемый CommonModule.ОбменДаннымиПовтИсп CommonModule.ОбменДаннымиСервер + CommonModule.ОбменДаннымиСлужебный CommonModule.ОбменДаннымиСобытия CommonModule.ОбменСообщениями CommonModule.ОбменСообщениямиВнутренний @@ -616,6 +645,8 @@ CommonModule.ОбщегоНазначенияПовтИсп CommonModule.ОрганизацииСлужебный CommonModule.ОтправкаSMS + CommonModule.ОтправкаSMSКлиент + CommonModule.ОтправкаSMSКлиентПереопределяемый CommonModule.ОтправкаSMSПереопределяемый CommonModule.ОтправкаSMSЧерезБилайн CommonModule.ОтправкаSMSЧерезМТС @@ -641,6 +672,7 @@ CommonModule.ПоискИУдалениеДублейКлиент CommonModule.ПоискИУдалениеДублейПереопределяемый CommonModule.ПолнотекстовыйПоискСервер + CommonModule.ПолнотекстовыйПоискСерверПереопределяемый CommonModule.ПолучениеФайловИзИнтернета CommonModule.ПолучениеФайловИзИнтернетаКлиент CommonModule.ПолучениеФайловИзИнтернетаКлиентСервер @@ -675,11 +707,8 @@ CommonModule.ПроверкаКонтрагентовВызовСервера CommonModule.ПроверкаКонтрагентовВызовСервераПовтИсп CommonModule.ПроверкаКонтрагентовКлиент - CommonModule.ПроверкаКонтрагентовКлиентПереопределяемый CommonModule.ПроверкаКонтрагентовКлиентСервер - CommonModule.ПроверкаКонтрагентовКлиентСерверПереопределяемый CommonModule.ПроверкаКонтрагентовКлиентСерверПовтИсп - CommonModule.ПроверкаКонтрагентовПереопределяемый CommonModule.ПроверкаЛегальностиПолученияОбновленияКлиент CommonModule.РаботаВБезопасномРежиме CommonModule.РаботаВБезопасномРежимеКлиент @@ -694,13 +723,15 @@ CommonModule.РаботаСБанкамиГлобальный CommonModule.РаботаСБанкамиКлиент CommonModule.РаботаСБанкамиПереопределяемый + CommonModule.РаботаСКонтрагентамиКлиентПереопределяемый + CommonModule.РаботаСКонтрагентамиКлиентСерверПереопределяемый + CommonModule.РаботаСКонтрагентамиПереопределяемый CommonModule.РаботаСКурсамиВалют CommonModule.РаботаСКурсамиВалютВызовСервера CommonModule.РаботаСКурсамиВалютГлобальный CommonModule.РаботаСКурсамиВалютКлиент CommonModule.РаботаСКурсамиВалютКлиентСервер CommonModule.РаботаСКурсамиВалютПереопределяемый - CommonModule.РаботаСоСканеромКлиент CommonModule.РаботаСПочтовымиСообщениями CommonModule.РаботаСПочтовымиСообщениямиВызовСервера CommonModule.РаботаСПочтовымиСообщениямиКлиент @@ -721,6 +752,7 @@ CommonModule.РассылкаОтчетовПереопределяемый CommonModule.РассылкаОтчетовПовтИсп CommonModule.РегламентированныеДанныеКлиентСервер + CommonModule.РегламентныеЗаданияПереопределяемый CommonModule.РегламентныеЗаданияСервер CommonModule.РегламентныеЗаданияСлужебный CommonModule.РезервноеКопированиеИБВызовСервера @@ -735,7 +767,6 @@ CommonModule.РезервноеКопированиеОбластейДанныхПовтИсп CommonModule.СоединенияИБ CommonModule.СоединенияИБВызовСервера - CommonModule.СоединенияИБВызовСервераПовтИсп CommonModule.СоединенияИБГлобальный CommonModule.СоединенияИБКлиент CommonModule.СоединенияИБКлиентСервер @@ -793,7 +824,6 @@ CommonModule.УправлениеКонтактнойИнформацией CommonModule.УправлениеКонтактнойИнформациейКлиент CommonModule.УправлениеКонтактнойИнформациейКлиентСервер - CommonModule.УправлениеКонтактнойИнформациейКлиентСерверПовтИсп CommonModule.УправлениеКонтактнойИнформациейСлужебный CommonModule.УправлениеКонтактнойИнформациейСлужебныйВызовСервера CommonModule.УправлениеКонтактнойИнформациейСлужебныйПовтИсп @@ -813,6 +843,7 @@ CommonModule.УправлениеЭлектроннойПочтой CommonModule.УправлениеЭлектроннойПочтойКлиент CommonModule.ФайловыеФункции + CommonModule.ФайловыеФункцииКлиент CommonModule.ФайловыеФункцииСлужебный CommonModule.ФайловыеФункцииСлужебныйВМоделиСервиса CommonModule.ФайловыеФункцииСлужебныйВызовСервера @@ -821,11 +852,15 @@ CommonModule.ФайловыеФункцииСлужебныйКлиентСервер CommonModule.ФайловыеФункцииСлужебныйПовтИсп CommonModule.ФизическиеЛицаКлиентСервер + CommonModule.ЦентрМониторинга + CommonModule.ЦентрМониторингаВызовСервераПовтИсп + CommonModule.ЦентрМониторингаПереопределяемый + CommonModule.ЦентрМониторингаСлужебный CommonModule.ЭлектроннаяПодпись CommonModule.ЭлектроннаяПодписьКлиент + CommonModule.ЭлектроннаяПодписьКлиентПереопределяемый CommonModule.ЭлектроннаяПодписьКлиентСервер CommonModule.ЭлектроннаяПодписьПереопределяемый - CommonModule.ЭлектроннаяПодписьПереопределяемыйКлиент CommonModule.ЭлектроннаяПодписьСлужебный CommonModule.ЭлектроннаяПодписьСлужебныйВызовСервера CommonModule.ЭлектроннаяПодписьСлужебныйКлиент @@ -839,9 +874,11 @@ XDTOPackage.ApplicationExtensionsManifest_1_0_0_1 XDTOPackage.ApplicationExtensionsPermissions_1_0_0_1 XDTOPackage.ApplicationPermissions_1_0_0_1 + XDTOPackage.ApplicationPermissions_1_0_0_2 XDTOPackage.CurrencyRates XDTOPackage.EnterpriseData_1_0_1 XDTOPackage.EnterpriseData_1_0_beta + XDTOPackage.EnterpriseDataExchange_1_0_1_1 XDTOPackage.ExchangeMessage XDTOPackage.SuppliedData XDTOPackage.V8AddinBundle @@ -863,47 +900,50 @@ XDTOPackage.УправлениеРезервнымКопированиемОбластейДанных_1_0_2_1 XDTOPackage.УправлениеРезервнымКопированиемОбластейДанных_1_0_3_1 WebService.AddressSystem + WebService.EnterpriseDataExchange_1_0_1_1 + WebService.EnterpriseDataUpload_1_0_1_1 WebService.Exchange WebService.Exchange_2_0_1_6 WebService.InterfaceVersion WebService.MessageExchange WebService.MessageExchange_2_0_1_6 - EventSubscription.ВариантыОтветовАнкетЗаполнитьЗначениеРеквизитаУпорядочивания - EventSubscription.ВариантыОтветовАнкетСброситьЗначениеРеквизитаУпорядочивания EventSubscription.ВариантыОтчетовПередУдалениемИдентификатораОбъектаМетаданных EventSubscription.ВариантыОтчетовПриУдаленииПользователя - EventSubscription.ВзаимодействияЗаполнитьЗначениеРеквизитаУпорядочивания - EventSubscription.ВзаимодействияСброситьЗначениеРеквизитаУпорядочивания - EventSubscription.ВидыКонтактнойИнформацииЗаполнитьЗначениеРеквизитаУпорядочивания - EventSubscription.ВидыКонтактнойИнформацииСброситьЗначениеРеквизитаУпорядочивания EventSubscription.ВключитьИспользованиеПланаОбмена - EventSubscription.ВыполнитьДействияПередЗаписьюПрисоединенногоФайлаВзаимодействия - EventSubscription.ВыполнитьДействияПередУдалениемПрисоединенногоФайлаВзаимодействия + EventSubscription.ВключитьРегламентноеЗаданиеПриИзмененииФункциональнойОпции + EventSubscription.ВыполнитьДействияПередЗаписьюПрисоединенногоФайла + EventSubscription.ВыполнитьДействияПередУдалениемПрисоединенногоФайла EventSubscription.ВыполнитьДействияПослеОтправкиДанныхУзлаВРаспределеннойИнформационнойБазе EventSubscription.ВыполнитьДействияПослеПолученияДанныхУзлаВРаспределеннойИнформационнойБазе - EventSubscription.ВыполнитьДействияПриЗаписиПрисоединенногоФайлаВзаимодействия + EventSubscription.ВыполнитьДействияПриЗаписиПрисоединенногоФайла EventSubscription.ДополнительныеОтчетыИОбработкиПередУдалениемИдентификатораОбъектаМетаданных + EventSubscription.ЗаписатьВерсиюОбъекта EventSubscription.ЗаписатьВерсиюПриОбменеДанными EventSubscription.ЗаписатьВСписокБизнесПроцессов EventSubscription.ЗаписатьЗависимыеНаборыЗначенийДоступа EventSubscription.ЗаписатьНаборыЗначенийДоступа + EventSubscription.ЗаполнитьЗначениеРеквизитаУпорядочивания EventSubscription.ЗаполнитьКонтактнуюИнформацию + EventSubscription.ЗаполнитьНаборыЗначенийДоступаТабличныхЧастей EventSubscription.ЗапретитьПометкуУдаленияПредопределенныхЭлементов EventSubscription.ЗапретитьУдалениеПредопределенныхЭлементов EventSubscription.ЗарегистрироватьИзмененияОбщихДанныхУзлов EventSubscription.ЗарегистрироватьИзмененияФильтровОграниченияМиграцииДанных EventSubscription.КонтрольНеразделенныхНаборовЗаписейПриЗаписи EventSubscription.КонтрольНеразделенныхОбъектовПриЗаписи + EventSubscription.ОбновитьГруппыВладельцевНастроекПрав EventSubscription.ОбновитьГруппыЗначенийДоступа + EventSubscription.ОбновитьКонтактнуюИнформацию EventSubscription.ОбновитьПредставлениеВнешнегоПользователя EventSubscription.ОбновитьСостояниеБизнесПроцесса + EventSubscription.ОбновлениеВерсииДатЗапретаИзмененияПослеЗагрузкиДанных EventSubscription.ОтключитьАвтоматическуюСинхронизациюДанных EventSubscription.ОтключитьИспользованиеПланаОбмена EventSubscription.ОтменитьОтправкуДанныхУзлаВРаспределеннойИнформационнойБазе EventSubscription.ОчиститьИнформациюОбАвтореВерсии EventSubscription.ОчиститьСсылкиНаУзелИнформационнойБазы EventSubscription.ПереопределитьПолучаемуюФормуПрисоединенногоФайлаВзаимодействия - EventSubscription.ПолучениеПолейПредставленияВзамоимодействия + EventSubscription.ПолучениеПолейПредставленияВзаимодействия EventSubscription.ПолучениеПредставленияВзаимодействия EventSubscription.ПолучитьПоляПредставленияБизнесПроцесса EventSubscription.ПолучитьПредставлениеБизнесПроцесса @@ -912,21 +952,28 @@ EventSubscription.ПриПолученииДанныхОтГлавного EventSubscription.ПриПолученииДанныхОтПодчиненного EventSubscription.ПроверитьВозможностьИзмененияНастроекОбменаДанными + EventSubscription.ПроверитьДатуЗапретаИзмененияПередЗаписьюДокумента EventSubscription.ПроверитьЗначениеОпцииИспользоватьНесколькоОрганизаций EventSubscription.ПроверитьИзменениеФильтровОграниченияМиграцииДанных EventSubscription.ПроверитьИзмененияДатВПредмете EventSubscription.ПроверитьУстранениеПроблемыДокумента EventSubscription.ПроверитьУстранениеПроблемыОбъекта + EventSubscription.СброситьЗначениеРеквизитаУпорядочивания EventSubscription.СкопироватьРеквизитыВерсииФайловВФайл EventSubscription.СоздатьПредопределенныеПапкиЭлектронныхПисем + EventSubscription.СохранитьРезультатПроверкиКонтрагента EventSubscription.УстановитьПометкуУдаленияЗадач - EventSubscription.УстановитьПометкуУдаленияЗаметкамПользователя - EventSubscription.УстановитьПометкуУдаленияПрисоединенныхФайловВзаимодействия + EventSubscription.УстановитьПометкуУдаленияПрисоединенныхФайлов + EventSubscription.УстановитьПометкуУдаленияПрисоединенныхФайловДокументовВзаимодействия + EventSubscription.УстановитьПометкуУдаленияФайлов + EventSubscription.УстановитьСнятьПометкуУдаленияЗаметок + EventSubscription.УстановитьСтатусИзмененияПометкиУдаленияПользователя ScheduledJob.ЗагрузкаКлассификатораБанковРФССайтаРБК ScheduledJob.ЗагрузкаКурсовВалют ScheduledJob.ЗаполнениеДанныхДляОграниченияДоступа ScheduledJob.ЗапускДополнительныхОбработок ScheduledJob.ИзвлечениеТекста + ScheduledJob.КонтрольАктивностиПользователей ScheduledJob.МониторингЗадач ScheduledJob.ОбновлениеАгрегатов ScheduledJob.ОбновлениеИндексаППД @@ -936,19 +983,21 @@ ScheduledJob.ОтложенноеОбновлениеИБ ScheduledJob.ОтправкаSMS ScheduledJob.ОтправкаИПолучениеСообщенийСистемы + ScheduledJob.ОчисткаНенужныхФайлов ScheduledJob.ОчисткаУстаревшихВерсийОбъектов ScheduledJob.ПерестроениеАгрегатов - ScheduledJob.ПересчетТекущихЗначенийОтносительныхДатЗапретаИзменения ScheduledJob.ПланированиеИзвлеченияТекстаВМоделиСервиса ScheduledJob.ПланированиеОбработкиЗаданий ScheduledJob.ПолучениеИОтправкаЭлектронныхПисем ScheduledJob.ПроверкаКонтрагентов ScheduledJob.РассылкаОтчетов + ScheduledJob.СборИОтправкаСтатистики ScheduledJob.СинхронизацияДанных ScheduledJob.СлияниеИндексаППД ScheduledJob.УведомлениеИсполнителейОНовыхЗадачах ScheduledJob.УдалениеНеактуальнойИнформацииСинхронизации ScheduledJob.УдалениеПомеченных + ScheduledJob.УдалениеУстаревшихПараметровРаботыВерсийРасширений ScheduledJob.УстановкаПериодаРассчитанныхИтогов ScheduledJob.ЭкспортОценкиПроизводительности SettingsStorage.ХранилищеВариантовОтчетов @@ -967,7 +1016,6 @@ FunctionalOption.ИспользоватьДополнительныеОбработкиСозданияСвязанныхОбъектов FunctionalOption.ИспользоватьДополнительныеОтчеты FunctionalOption.ИспользоватьДополнительныеОтчетыИОбработки - FunctionalOption.ИспользоватьДополнительныеПечатныеФормы FunctionalOption.ИспользоватьДополнительныеРеквизитыИСведения FunctionalOption.ИспользоватьЗаметки FunctionalOption.ИспользоватьИнтеграцию1СБухфон @@ -1006,25 +1054,55 @@ FunctionalOptionsParameter.ДополнительныеОтчетыИОбработкиТипФормы FunctionalOptionsParameter.Организация FunctionalOptionsParameter.ТипВерсионируемогоОбъекта + DefinedType.АдресатЗапретаИзменения DefinedType.БезопасныйРежим + DefinedType.БизнесПроцесс + DefinedType.ВерсионируемыеДанные + DefinedType.ВерсионируемыеДанныеОбъект + DefinedType.ВладелецВнешнихЗначенийВНаборахЗначенийДоступаОбъект + DefinedType.ВладелецДополнительныхСведений + DefinedType.ВладелецКонтактнойИнформации + DefinedType.ВладелецНаборовЗначенийДоступаОбъект DefinedType.ВладелецНастроекПрав + DefinedType.ВладелецНастроекПравОбъект + DefinedType.ВладелецПрисоединенныхФайлов + DefinedType.ВладелецПрисоединенныхФайловОбъект + DefinedType.ВладелецСОграничениемПоНаборамЗначенийДоступаОбъект DefinedType.ВладелецФайлов + DefinedType.ВладелецФайловОбъект DefinedType.ВнешнийПользователь + DefinedType.ВнешнийПользовательОбъект DefinedType.ЗначениеДоступа + DefinedType.ЗначениеДоступаСГруппамиЗначенийДоступаОбъект DefinedType.КонтактВзаимодействия DefinedType.Контрагент + DefinedType.КонтрагентОбъект + DefinedType.МестоХраненияФункциональныхОпций + DefinedType.ОбъектАдресации + DefinedType.ОбъектСДополнительнымиКомандами + DefinedType.ОбъектСНастраиваемымПорядком + DefinedType.Подразделение DefinedType.ПолучательРассылки + DefinedType.Пользователь DefinedType.ПредметВзаимодействия + DefinedType.ПредметЗадачи + DefinedType.ПредметЗаметок + DefinedType.ПредметЗаметокОбъект + DefinedType.ПредметНапоминания + DefinedType.ПредметНапоминанияОбъект + DefinedType.ПрисоединенныйФайл + DefinedType.ПрисоединенныйФайлОбъект DefinedType.Респондент - CommonCommand.ВыполнитьОбменДанными - CommonCommand.ВыполнитьОбменДаннымиИнтерактивно + DefinedType.СубъектПерсональныхДанных + DefinedType.ФизическоеЛицо CommonCommand.ДобавитьПользователейСервиса CommonCommand.ДополнительныеОбработкиАдминистрирование CommonCommand.ДополнительныеОтчетыАдминистрирование - CommonCommand.ДополнительныеПечатныеФормыОбъекта CommonCommand.ДополнительныеСведенияКоманднаяПанель - CommonCommand.ДополнительныеСведенияПанельНавигации + CommonCommand.ЗагрузитьКомплектПравил CommonCommand.ЗагрузитьКурсыВалют + CommonCommand.ЗагрузитьПравилаКонвертацииОбъектов + CommonCommand.ЗагрузитьПравилаРегистрацииОбъектов CommonCommand.ЗадачиПоБизнесПроцессу CommonCommand.ЗадачиПоПредмету CommonCommand.ЗаполнениеОбъекта @@ -1040,44 +1118,45 @@ CommonCommand.НастройкаСистемнойУчетнойЗаписиЭлектроннойПочты CommonCommand.НастройкиПроверкиКонтрагентов CommonCommand.ОбменСообщениями - CommonCommand.ОткрытьОбменыДанными - CommonCommand.ОткрытьПравилаКонвертацииОбъектов - CommonCommand.ОткрытьПравилаРегистрацииОбъектов - CommonCommand.ОткрытьПравилаСинхронизацииДанных - CommonCommand.ОткрытьРезультатыОбменаДанными - CommonCommand.ОткрытьСценарииОбменовДанными CommonCommand.ОтчетыОбъекта CommonCommand.ПанельОтчетовАдминистрирование - CommonCommand.ПерейтиВЖурналРегистрацииСобытийВыгрузкиДанных - CommonCommand.ПерейтиВЖурналРегистрацииСобытийЗагрузкиДанных CommonCommand.ПереходКНастройкамДоступаКВебСервису CommonCommand.ПерсональнаяНастройкаПроксиСервера CommonCommand.ПоказатьРезультатРезервногоКопирования - CommonCommand.ПолучитьНастройкиОбменаДаннымиДляВторойИнформационнойБазы + CommonCommand.ПолучитьНастройкиСинхронизацииДляДругойПрограммы CommonCommand.ПраваДоступа + CommonCommand.ПредупрежденияПриСинхронизацииДанных CommonCommand.ПрисоединенныеФайлы CommonCommand.ПрисоединенныеФайлыКОбъекту CommonCommand.РазместитьФайлыНачальногоОбраза CommonCommand.РолиИИсполнителиЗадач CommonCommand.СведенияОПользователе + CommonCommand.СинхронизацияДанных + CommonCommand.Синхронизировать + CommonCommand.СинхронизироватьСДополнительнымиПараметрами + CommonCommand.СменитьПароль + CommonCommand.СобытияОтправки + CommonCommand.СобытияПолучения CommonCommand.СозданиеНачальногоОбразаСФайлами CommonCommand.СозданиеСвязанныхОбъектов CommonCommand.СоздатьЗаметкуПоПредмету CommonCommand.СоздатьРезервнуюКопию CommonCommand.СоставОтправляемыхДанных CommonCommand.СтруктураПодчиненности + CommonCommand.СценарииСинхронизации CommonCommand.УдалитьНастройкуСинхронизации CommonCommand.УстановитьРасширениеРаботыСФайлами CommonCommand.ФайлыВТоме CommandGroup.Взаимодействия - CommandGroup.ВыполнениеОбменаДанными CommandGroup.Информация CommandGroup.Органайзер - CommandGroup.ПараметрыОбменаДанными + CommandGroup.ПараметрыСинхронизацииДанных CommandGroup.Печать + CommandGroup.СинхронизацияДанных Constant.АвтоматическиНастраиватьРазрешенияВПрофиляхБезопасности Constant.АдресПубликацииИнформационнойБазыВИнтернете Constant.БлокировкаОтправкиБыстрыхСообщений + Constant.ВерсияДатЗапретаИзменения Constant.ВерсияКлассификатораБанковРФ Constant.ВнутреннийАдресМенеджераСервиса Constant.ВыполнитьРезервноеКопированиеОбластиДанных @@ -1094,7 +1173,6 @@ Constant.ИдентификаторИнформационнойБазы Constant.ИзвлекатьТекстыФайловНаСервере Constant.ИзменятьЗаданияЗаднимЧислом - Constant.ИмяСлужебногоПользователяМенеджераСервиса Constant.ИспользоватьАнкетирование Constant.ИспользоватьБизнесПроцессыИЗадачи Constant.ИспользоватьВерсионированиеОбъектов @@ -1102,6 +1180,8 @@ Constant.ИспользоватьГруппыПользователей Constant.ИспользоватьДатуИВремяВСрокахЗадач Constant.ИспользоватьДатуНачалаЗадач + Constant.ИспользоватьДатыЗапретаЗагрузки + Constant.ИспользоватьДатыЗапретаИзменения Constant.ИспользоватьДополнительныеОтчетыИОбработки Constant.ИспользоватьДополнительныеРеквизитыИСведения Constant.ИспользоватьЗаметки @@ -1133,13 +1213,13 @@ Constant.КоличествоЭлементовВТранзакцииЗагрузкиДанных Constant.КонечнаяТочкаМенеджераСервиса Constant.КопироватьОбластиДанныхИзЭталонной - Constant.ЛогинДляОтправкиSMS Constant.МаксимальнаяДлительностьВыполненияИсполняющегоФоновогоЗадания Constant.МаксимальноеКоличествоИсполняющихФоновыхЗаданий Constant.МаксимальныйРазмерФайла Constant.МаксимальныйРазмерФайлаОбластиДанных Constant.НастройкаПодчиненногоУзлаРИБЗавершена Constant.НастройкаПроксиСервера + Constant.НастройкиВходаПользователей Constant.НастройкиВыполненияРегламентныхЗаданий Constant.НастройкиПодчиненногоУзлаРИБ Constant.НеИспользоватьНесколькоОрганизаций @@ -1147,6 +1227,7 @@ Constant.ОграничиватьДоступНаУровнеЗаписей Constant.ОтправлятьПисьмаВФорматеHTML Constant.ОценкаПроизводительностиПериодЗаписи + Constant.ОценкаПроизводительностиЭкспортВсехКлючевыхОпераций Constant.ПараметрыАдминистрированияИБ Constant.ПараметрыВариантовОтчетов Constant.ПараметрыДополнительныхРеквизитовИСведений @@ -1155,8 +1236,7 @@ Constant.ПараметрыРаботыПользователей Constant.ПараметрыРезервногоКопирования Constant.ПараметрыСлужебныхСобытий - Constant.ПарольДляОтправкиSMS - Constant.ПарольСлужебногоПользователяМенеджераСервиса + Constant.ПараметрыЦентраМониторинга Constant.ПовторитьЗагрузкуСообщенияОбменаДаннымиПередЗапуском Constant.ПоддержкаРезервногоКопирования Constant.ПредставлениеОбластиДанных @@ -1181,7 +1261,10 @@ Constant.УдалитьАлгоритмПодписи Constant.УдалитьАлгоритмХеширования Constant.УдалитьАлгоритмШифрования - Constant.УдалитьПоказыватьКомандуДополнительныеПечатныеФормы + Constant.УдалитьИмяСлужебногоПользователяМенеджераСервиса + Constant.УдалитьЛогинДляОтправкиSMS + Constant.УдалитьПарольДляОтправкиSMS + Constant.УдалитьПарольСлужебногоПользователяМенеджераСервиса Constant.УдалитьПровайдерЭП Constant.УдалитьТипПровайдераЭП Constant.ХранитьФайлыВТомахНаДиске @@ -1196,7 +1279,9 @@ CommonForm.ВопросОбУстановкеРасширенияРаботыСКриптографией CommonForm.ВопросОбУстановкеРасширенияРаботыСФайлами CommonForm.ВосстановлениеСвязиСГлавнымУзлом + CommonForm.ВспомогательнаяФормаНастроекОтчета CommonForm.ВходВОбластьДанных + CommonForm.ВходВПрограммуЗапрещен CommonForm.ВыборДаты CommonForm.ВыборДействияПриОбнаруженииОтличийФайла CommonForm.ВыборИсполнителяБизнесПроцесса @@ -1206,6 +1291,7 @@ CommonForm.ВыборПроизвольногоПериода CommonForm.ВыборПутиКАрхивуФайловТомов CommonForm.ВыборРолиИсполнителя + CommonForm.ВыборТиповПользователей CommonForm.ВыборУзловПлановОбмена CommonForm.ВыборФорматаВложений CommonForm.ГруппыПользователей @@ -1215,20 +1301,22 @@ CommonForm.ДополнительноеОписание CommonForm.ДополнительныеОтчетыИОбработки CommonForm.ДополнительныеПараметрыПроксиСервера - CommonForm.ИнформацияНеразделенногоПользователя + CommonForm.ЗаполнениеРеквизитовКонтрагента CommonForm.МастерАнкетыПоРазделам CommonForm.НапоминаниеПриРедактировании CommonForm.Настройка1СБухфон + CommonForm.НастройкаКомандПечати CommonForm.НастройкаМоихОтчетовИОбработок CommonForm.НастройкаОбменаСообщениями CommonForm.НастройкаОсновногоРабочегоКаталога CommonForm.НастройкаОтправкиSMS + CommonForm.НастройкиВходаПользователей CommonForm.НастройкиПравОбъектов CommonForm.НастройкиПроверкиКонтрагентов CommonForm.НастройкиРегистрацииСобытийДоступаКПерсональнымДанным CommonForm.НастройкиЭлектроннойПодписиИШифрования - CommonForm.ОбменыДанными - CommonForm.ОписаниеИзмененийСистемы + CommonForm.ОписаниеИзмененийПрограммы + CommonForm.ОтправкаSMS CommonForm.ОтправкаСообщения CommonForm.ОтправкаТабличныхДокументовПоПочте CommonForm.ОтчетОСохраненииФайловЭлектронныхПодписей @@ -1238,8 +1326,8 @@ CommonForm.ПечатьДокументов CommonForm.ПодготовкаНовогоПисьма CommonForm.ПодключениеКонечнойТочки - CommonForm.ПодтверждениеПароляУчетнойЗаписи CommonForm.ПоискИсполняемогоФайла1СБухфон + CommonForm.ПоказателиВыделенныхЯчеек CommonForm.ПользователиСервиса CommonForm.ПраваДоступа CommonForm.ПраваДоступаУпрощенно @@ -1249,21 +1337,26 @@ CommonForm.РедактированиеДополнительныхСведений CommonForm.РедактированиеТабличногоДокумента CommonForm.Сертификат + CommonForm.СинхронизацияДанных + CommonForm.СменаПароля CommonForm.СозданиеНачальногоОбразаСФайлами CommonForm.СозданиеРезервнойКопии CommonForm.СохранениеВместеСЭлектроннойПодписью CommonForm.СохранениеПечатнойФормы CommonForm.СтруктураПодчиненности CommonForm.УстановкаВедущейКонечнойТочки + CommonForm.УстановленныеРасширения CommonForm.УточнениеКонтактов CommonForm.ФайлыВТоме CommonForm.ФормаВариантаОтчета CommonForm.ФормаНастроекОтчета CommonForm.ФормаОтчета + CommonForm.ФормаПоиска CommonForm.ЭлектроннаяПодпись Catalog.Валюты Catalog.ВариантыОтветовАнкет Catalog.ВариантыОтчетов + Catalog.ВерсииРасширений Catalog.ВерсииФайлов Catalog.ВидыКонтактнойИнформации Catalog.ВнешниеПользователи @@ -1280,6 +1373,7 @@ Catalog.ЗначенияСвойствОбъектов Catalog.ЗначенияСвойствОбъектовИерархия Catalog.ИдентификаторыОбъектовМетаданных + Catalog.ИдентификаторыОбъектовРасширений Catalog.Календари Catalog.КлассификаторБанковРФ Catalog.КлючевыеОперации @@ -1294,6 +1388,7 @@ Catalog.ПоставляемыеДанные Catalog.ПравилаОбработкиЭлектроннойПочты Catalog.ПредопределенныеВариантыОтчетов + Catalog.ПредопределенныеВариантыОтчетовРасширений Catalog.ПрограммыЭлектроннойПодписиИШифрования Catalog.ПроизводственныеКалендари Catalog.ПрофилиГруппДоступа @@ -1318,15 +1413,19 @@ Document.Встреча Document.ЗапланированноеВзаимодействие Document.НазначениеОпросов + Document.ОтзывСогласияНаОбработкуПерсональныхДанных + Document.СогласиеНаОбработкуПерсональныхДанных Document.СообщениеSMS Document.ТелефонныйЗвонок Document.ЭлектронноеПисьмоВходящее Document.ЭлектронноеПисьмоИсходящее DocumentJournal.Взаимодействия + DocumentJournal.СогласияНаОбработкуПерсональныхДанных Enum.ВариантыSMTPАутентификации Enum.ВариантыВажностиВзаимодействия Enum.ВариантыВажностиЗадачи Enum.ВариантыВерсионированияОбъектов + Enum.ВариантыОчисткиФайлов Enum.ВариантыПубликацииДополнительныхОтчетовИОбработок Enum.ВариантыСжатияTIFF Enum.ВидыДнейПроизводственногоКалендаря @@ -1341,6 +1440,7 @@ Enum.ИсточникиПравилДляОбменаДанными Enum.ОперацииАдминистрированияПрофилейБезопасности Enum.ПериодичностиРасписанийРассылокОтчетов + Enum.ПериодОчисткиФайлов Enum.ПорядокОтветовНаЗапросыУведомленийОПрочтении Enum.ПриоритетыОбъектовОбмена Enum.ПровайдерыSMS @@ -1400,13 +1500,18 @@ Report.БизнесПроцессы Report.ДатыЗапретаЗагрузки Report.ДатыЗапретаИзменения + Report.ДействующиеСогласияНаОбработкуПерсональныхДанных + Report.ДосьеКонтрагента Report.ЗависшиеЗадачи Report.Задания Report.Задачи Report.ЗадачиИстекающиеНаДату Report.ИспользуемыеВнешниеРесурсы + Report.ИстекающиеСогласияНаОбработкуПерсональныхДанных Report.МестаИспользованияСсылок + Report.ОбъемНенужныхФайлов Report.ПраваДоступа + Report.ПроверкаЦелостностиТома Report.ПросроченныеЗадачи Report.СведенияОПользователях DataProcessor.АвтоматическоеИзвлечениеТекстов @@ -1434,22 +1539,22 @@ DataProcessor.НастройкаРезервногоКопированияПриложения DataProcessor.НастройкиПользователей DataProcessor.НерекомендуемаяВерсияПлатформы - DataProcessor.ОбновлениеИнформационнойБазы - DataProcessor.ОбновлениеКонфигурации DataProcessor.ОценкаПроизводительности DataProcessor.ПанельАдминистрированияБСП DataProcessor.ПереносФайловВТома DataProcessor.ПоискИУдалениеДублей + DataProcessor.ПоискИУстановкаОбновлений DataProcessor.ПолнотекстовыйПоискВДанных DataProcessor.ПомощникИнтерактивногоОбменаДанными DataProcessor.ПомощникСозданияОбменаДанными DataProcessor.РегистрацияИзмененийДляОбменаДанными DataProcessor.РегламентныеИФоновыеЗадания DataProcessor.РезервноеКопированиеИБ + DataProcessor.РезультатыОбновленияПрограммы DataProcessor.РекомендацияПоПовышениюСкоростиРаботы DataProcessor.СбросНастроекПроверкиКонтрагентов DataProcessor.СдвигГраницыИтогов - DataProcessor.СогласиеНаОбработкуПерсональныхДанных + DataProcessor.Сканирование DataProcessor.СопоставлениеОбъектовИнформационныхБаз DataProcessor.СписокРеспондента DataProcessor.ТекущиеДела @@ -1460,11 +1565,15 @@ DataProcessor.УниверсальныйОбменДаннымиXML DataProcessor.УправлениеИтогамиИАгрегатами InformationRegister.АдресныеОбъекты + InformationRegister.БезопасноеХранилищеДанных + InformationRegister.БезопасноеХранилищеДанныхОбластейДанных InformationRegister.БлокировкиСеансовОбластейДанных + InformationRegister.БуферОперацийСтатистики InformationRegister.ВерсииОбъектов InformationRegister.ВерсииПодсистем InformationRegister.ВерсииПодсистемОбластейДанных InformationRegister.ГруппыЗначенийДоступа + InformationRegister.ДампыПлатформы InformationRegister.ДанныеБизнесПроцессов InformationRegister.ДанныеОбъектовДляРегистрацииВОбменах InformationRegister.ДанныеПроизводственногоКалендаря @@ -1473,18 +1582,26 @@ InformationRegister.ДомаЗданияСтроения InformationRegister.ДополнительныеАдресныеСведения InformationRegister.ДополнительныеСведения + InformationRegister.ЗаблокированныеДляПолученияУчетныеЗаписи InformationRegister.ЗависимостиПравДоступа InformationRegister.ЗагруженныеВерсииАдресныхСведений InformationRegister.ЗамерыВремени + InformationRegister.ЗамерыВремениТехнологические + InformationRegister.ЗамерыКомментарииСтатистики + InformationRegister.ЗамерыОбластиСтатистики + InformationRegister.ЗамерыОперацииСтатистики InformationRegister.ЗапросыРазрешенийНаИспользованиеВнешнихРесурсов InformationRegister.ЗначенияГруппДоступа InformationRegister.ЗначенияГруппДоступаПоУмолчанию + InformationRegister.ИдентификаторыОбъектовВерсийРасширений InformationRegister.ИдентификаторыПолученныхЭлектронныхПисем InformationRegister.ИзмененияОбщихДанныхУзлов InformationRegister.ИсполнителиЗадач InformationRegister.ИсторияАдресныхОбъектов InformationRegister.КалендарныеГрафики InformationRegister.КодировкиВерсийФайлов + InformationRegister.КомментарииОперацииСтатистики + InformationRegister.КомментарииСтатистики InformationRegister.КонтактыВзаимодействий InformationRegister.КурсыВалют InformationRegister.КэшПрограммныхИнтерфейсов @@ -1495,19 +1612,26 @@ InformationRegister.НаследованиеНастроекПравОбъектов InformationRegister.НастройкиВариантовОтчетов InformationRegister.НастройкиВерсионированияОбъектов + InformationRegister.НастройкиКомандПечати InformationRegister.НастройкиОтправителя + InformationRegister.НастройкиОчисткиФайлов InformationRegister.НастройкиПравОбъектов InformationRegister.НастройкиТранспортаОбмена InformationRegister.НастройкиУчетныхЗаписейЭлектроннойПочты + InformationRegister.НепринятыеКОбработкеПочтовымСерверомИсходящиеПисьма InformationRegister.НомераОтсканированныхФайлов InformationRegister.ОбластиДанных InformationRegister.ОбластиПерсональныхДанных + InformationRegister.ОбластиСтатистики InformationRegister.ОбластиТребующиеОбработкиПоставляемыхДанных InformationRegister.ОбщиеНастройкиУзловИнформационныхБаз + InformationRegister.ОперацииСтатистики InformationRegister.ОриентирыАдресныхОбъектов InformationRegister.ОтветыНаВопросыАнкет InformationRegister.ОчередьИзвлеченияТекста + InformationRegister.ПакетыДляОтправки InformationRegister.ПакетыИнформацииПриЗапуске + InformationRegister.ПараметрыРаботыВерсийРасширений InformationRegister.ПодпискиПолучателей InformationRegister.ПользовательскиеМакетыПечати InformationRegister.ПользовательскиеНастройкиДоступаКОбработкам @@ -1515,6 +1639,7 @@ InformationRegister.ПраваРолей InformationRegister.ПравилаДляОбменаДанными InformationRegister.ПредметыПапкиВзаимодействий + InformationRegister.ПредопределенныеВариантыОтчетовВерсийРасширений InformationRegister.ПрисоединенныеФайлы InformationRegister.ПричиныИзмененияАдресныхСведений InformationRegister.ПубличныеИдентификаторыСинхронизируемыхОбъектов @@ -1525,7 +1650,10 @@ InformationRegister.РезультатыОбменаДанными InformationRegister.РейтингАктивностиОбластейДанных InformationRegister.РучныеИзмененияГрафиковРаботы + InformationRegister.СведенияОПользователях + InformationRegister.СеансыВерсийРасширений InformationRegister.СлужебныеАдресныеСведения + InformationRegister.СогласияНаОбработкуПерсональныхДанных InformationRegister.СообщенияОбменаДанными InformationRegister.СоответствияОбъектовИнформационныхБаз InformationRegister.СоставыГруппПользователей @@ -1536,6 +1664,7 @@ InformationRegister.СостоянияПредметовВзаимодействий InformationRegister.СостоянияРассылокОтчетов InformationRegister.СостоянияУспешныхОбменовДанными + InformationRegister.СтатистикаКонфигурации InformationRegister.ТаблицыГруппДоступа InformationRegister.УведомленияОПрочтении InformationRegister.Удалить_АктивныеПредметыВзаимодействий diff --git a/SSL/src/Configuration/ParentConfigurations.bin b/SSL/src/Configuration/ParentConfigurations.bin index 93bdb7ede..7006e1907 100644 --- a/SSL/src/Configuration/ParentConfigurations.bin +++ b/SSL/src/Configuration/ParentConfigurations.bin @@ -1 +1 @@ -{6,1,1,8f52c9af-defa-4d00-b2b6-60a942ffc2a8,1,3ef68373-5092-4178-a59d-8ede03dad83e,"2.2.5.36","Фирма ""1С""","БиблиотекаСтандартныхПодсистем",4664,1,0,12b242a9-1326-4796-94a9-c4a350791caa,12b242a9-1326-4796-94a9-c4a350791caa,0,1,db4a9ccb-9ef5-4b3c-8577-b6fe5db1b62e,db4a9ccb-9ef5-4b3c-8577-b6fe5db1b62e,0,1,9233322b-dfdb-4c66-91fe-1299292d40a5,9233322b-dfdb-4c66-91fe-1299292d40a5,0,1,0421b67e-ed26-491d-ab98-ec59002ed4ce,0421b67e-ed26-491d-ab98-ec59002ed4ce,0,1,bb47ced2-31f9-4870-8633-20b986e53ccc,bb47ced2-31f9-4870-8633-20b986e53ccc,0,1,7d8acec9-f5a9-411e-921c-446ed0dd3332,7d8acec9-f5a9-411e-921c-446ed0dd3332,0,1,739c01a9-1125-45ef-ab4e-8c73af4eeff0,739c01a9-1125-45ef-ab4e-8c73af4eeff0,0,1,cdbd26b1-9583-46e8-adf7-8cc705639892,cdbd26b1-9583-46e8-adf7-8cc705639892,0,1,c0e38c3e-7088-4e35-9d84-2d0ab9655402,c0e38c3e-7088-4e35-9d84-2d0ab9655402,0,1,1098786f-dd24-4cce-b212-be0cb5f01735,1098786f-dd24-4cce-b212-be0cb5f01735,0,1,3c0037f3-4422-4836-b116-8c72e32bdd55,3c0037f3-4422-4836-b116-8c72e32bdd55,0,1,6f7c6c31-206b-4010-bdad-1ad2e304f154,6f7c6c31-206b-4010-bdad-1ad2e304f154,0,1,a8659e53-8c6b-4b0c-9736-fe93a91e4d69,a8659e53-8c6b-4b0c-9736-fe93a91e4d69,0,1,fe9a1d1a-19c0-499f-8e1b-09cadabe882f,fe9a1d1a-19c0-499f-8e1b-09cadabe882f,0,1,b4629308-42de-4ce8-8591-cf0c2399a9a2,b4629308-42de-4ce8-8591-cf0c2399a9a2,0,1,c7e984ae-1dbb-4041-b18a-bfd0d63a002f,c7e984ae-1dbb-4041-b18a-bfd0d63a002f,0,1,bb0424b8-dfd1-4a27-bd66-9dea3ffc77c4,bb0424b8-dfd1-4a27-bd66-9dea3ffc77c4,0,1,a4ac0a50-ee39-4dc1-b84f-eec8fe485f03,a4ac0a50-ee39-4dc1-b84f-eec8fe485f03,0,1,1861ee4f-fd8c-4afa-8441-c074bf51f67e,1861ee4f-fd8c-4afa-8441-c074bf51f67e,0,1,de7ed8f7-3c02-47e0-aea8-4747ac68a5d5,de7ed8f7-3c02-47e0-aea8-4747ac68a5d5,0,1,b93b8760-6200-40ee-8bdc-875ba80a6155,b93b8760-6200-40ee-8bdc-875ba80a6155,0,1,e8b248d9-9049-456a-9c7d-7a0462cc67ab,e8b248d9-9049-456a-9c7d-7a0462cc67ab,0,1,d4562287-440d-4462-9de2-7097ccbf3764,d4562287-440d-4462-9de2-7097ccbf3764,0,1,bf9ca98c-5c95-4cfb-9181-8c1d847f9fbb,bf9ca98c-5c95-4cfb-9181-8c1d847f9fbb,0,1,ec797c75-02c5-4cf5-9dd4-26cd46c99519,ec797c75-02c5-4cf5-9dd4-26cd46c99519,0,1,6fccdf59-fc99-4a2b-a144-fffe438a147c,6fccdf59-fc99-4a2b-a144-fffe438a147c,0,1,af8bd73a-d8e8-487d-8f36-d835ab10ea3a,af8bd73a-d8e8-487d-8f36-d835ab10ea3a,0,1,da9b32e6-5b93-45a6-84b2-238d57541e18,da9b32e6-5b93-45a6-84b2-238d57541e18,0,1,e43d69c8-b284-47da-b236-611bc94a15b6,e43d69c8-b284-47da-b236-611bc94a15b6,0,1,31eeaa05-6c49-41fe-b840-1edbad4ccac7,31eeaa05-6c49-41fe-b840-1edbad4ccac7,0,1,842c8662-8f39-405e-9665-cbdabc116159,842c8662-8f39-405e-9665-cbdabc116159,0,1,fca4b033-02c4-4d61-9e51-87783c3cef1a,fca4b033-02c4-4d61-9e51-87783c3cef1a,0,1,396ef757-d7f6-411f-8c4c-1acb1106a009,396ef757-d7f6-411f-8c4c-1acb1106a009,0,1,cb8da2f3-f8bb-4736-8381-7c153670e3e2,cb8da2f3-f8bb-4736-8381-7c153670e3e2,0,1,9aecf4f5-46ed-4d1c-a584-cd028e467895,9aecf4f5-46ed-4d1c-a584-cd028e467895,0,1,a1c379be-43d3-4e02-83bb-d2e7de2d4ae3,a1c379be-43d3-4e02-83bb-d2e7de2d4ae3,0,1,a1f10624-22e9-4a04-b370-fd085bdd0f67,a1f10624-22e9-4a04-b370-fd085bdd0f67,0,1,3cffb795-2a28-4beb-92f4-5813f5994022,3cffb795-2a28-4beb-92f4-5813f5994022,0,1,3323ca68-1382-4710-a933-23fc56588935,3323ca68-1382-4710-a933-23fc56588935,0,1,d6b12775-3255-42b8-88b2-62684f873e7d,d6b12775-3255-42b8-88b2-62684f873e7d,0,1,cc23d903-ccc5-42f4-862f-5e7278c4e346,cc23d903-ccc5-42f4-862f-5e7278c4e346,0,1,98f033e0-fa40-46e0-b51a-87a066749a35,98f033e0-fa40-46e0-b51a-87a066749a35,0,1,c53df2d1-4564-47a7-b66e-6a23ba28270e,c53df2d1-4564-47a7-b66e-6a23ba28270e,0,1,e8b4cb2d-1180-4101-954a-4cb5464f198c,e8b4cb2d-1180-4101-954a-4cb5464f198c,0,1,f765c4ba-c677-42ac-8d0c-43bb485405b9,f765c4ba-c677-42ac-8d0c-43bb485405b9,0,1,83192b3e-e7a9-4595-8887-24cda84457a9,83192b3e-e7a9-4595-8887-24cda84457a9,0,1,2fd1287d-d96d-4480-baf7-8815ae5ffbfb,2fd1287d-d96d-4480-baf7-8815ae5ffbfb,0,1,c8a4c5da-bc88-4f6e-9787-1c22c2f41be7,c8a4c5da-bc88-4f6e-9787-1c22c2f41be7,0,1,08eeb8f1-944f-4450-83f6-ef20aaab7d86,08eeb8f1-944f-4450-83f6-ef20aaab7d86,0,1,8d77dd4a-e646-4105-8dcf-8ce8fc3da0b4,8d77dd4a-e646-4105-8dcf-8ce8fc3da0b4,0,1,2fd12dba-5311-4f31-949c-f6b15decc0cc,2fd12dba-5311-4f31-949c-f6b15decc0cc,0,1,d7cf3981-cf63-4a21-868b-8175a7704a8f,d7cf3981-cf63-4a21-868b-8175a7704a8f,0,1,35895e12-52b6-49a1-acdf-6d828a948af0,35895e12-52b6-49a1-acdf-6d828a948af0,0,1,0ae93712-74e8-41c7-8f2d-4dfc8983697d,0ae93712-74e8-41c7-8f2d-4dfc8983697d,0,1,060b6f18-538c-4ea1-9748-00efe0b1ab57,060b6f18-538c-4ea1-9748-00efe0b1ab57,0,1,307b6821-fd82-4a1c-9fdb-a26293d4f713,307b6821-fd82-4a1c-9fdb-a26293d4f713,0,1,a952960b-be1b-4ec4-bd76-80915065a60b,a952960b-be1b-4ec4-bd76-80915065a60b,0,1,64f548c8-c1fc-434e-b3ee-5be367ead1db,64f548c8-c1fc-434e-b3ee-5be367ead1db,0,1,9e4dfdfa-ec05-4c9e-89bd-fc24f60f2678,9e4dfdfa-ec05-4c9e-89bd-fc24f60f2678,0,1,ede5b7c8-42cd-4f79-90d2-b518e96d6b26,ede5b7c8-42cd-4f79-90d2-b518e96d6b26,0,1,cd592a5d-b184-4558-8a28-7079ccf28b89,cd592a5d-b184-4558-8a28-7079ccf28b89,0,1,2009c673-c1a5-45fc-8da2-a36c435085a6,2009c673-c1a5-45fc-8da2-a36c435085a6,0,1,ab7e5f9a-1dfe-4165-a540-21f45ae1d94d,ab7e5f9a-1dfe-4165-a540-21f45ae1d94d,0,1,5d16e042-3889-4851-86f1-bc43bf06ee88,5d16e042-3889-4851-86f1-bc43bf06ee88,0,1,e5a0e7c2-6186-43a3-a1c5-1f16990602a4,e5a0e7c2-6186-43a3-a1c5-1f16990602a4,0,1,3d47838b-e1aa-4acb-96bf-6de2f9be8bdb,3d47838b-e1aa-4acb-96bf-6de2f9be8bdb,0,1,e39ecc8a-ce81-483d-85de-b0488c8b7749,e39ecc8a-ce81-483d-85de-b0488c8b7749,0,1,8f3b124f-bf85-4307-8f0c-47be1fb5c8b0,8f3b124f-bf85-4307-8f0c-47be1fb5c8b0,0,1,e15c3525-3453-4b62-834e-7c69f9efea51,e15c3525-3453-4b62-834e-7c69f9efea51,0,1,1514eaff-faea-4d82-9465-d0d5292bb31d,1514eaff-faea-4d82-9465-d0d5292bb31d,0,1,6d39c6df-8cd4-47ad-9125-252b37d94575,6d39c6df-8cd4-47ad-9125-252b37d94575,0,1,739bd762-01fc-41a8-87df-844eb201962f,739bd762-01fc-41a8-87df-844eb201962f,0,1,ad7c6165-2e44-4808-a77a-526882cf5dea,ad7c6165-2e44-4808-a77a-526882cf5dea,0,1,b7e435a9-6107-4d02-a949-cff793462e31,b7e435a9-6107-4d02-a949-cff793462e31,0,1,f0cda8f5-56f5-423b-8c1c-7113433ebf25,f0cda8f5-56f5-423b-8c1c-7113433ebf25,0,1,1a220e88-428b-4d85-926d-e572bf19997c,1a220e88-428b-4d85-926d-e572bf19997c,0,1,ca0d938b-244e-421f-9fa4-320784b9f416,ca0d938b-244e-421f-9fa4-320784b9f416,0,1,a108b11d-a489-4684-84ea-d5377c7394de,a108b11d-a489-4684-84ea-d5377c7394de,0,1,289a2d84-2477-4177-a6ef-507e2cadeea2,289a2d84-2477-4177-a6ef-507e2cadeea2,0,1,757b547b-b79c-459a-a64a-eef19a09a38f,757b547b-b79c-459a-a64a-eef19a09a38f,0,1,61cd6eab-6bab-4382-986e-4c7fc44f369b,61cd6eab-6bab-4382-986e-4c7fc44f369b,0,1,950f8fd5-fefa-4bfb-97a0-38d77ae830dc,950f8fd5-fefa-4bfb-97a0-38d77ae830dc,0,1,cbbe7903-842c-470e-a2d6-7928df8f13e9,cbbe7903-842c-470e-a2d6-7928df8f13e9,0,1,e02597c4-bf45-4bb6-931d-62d2244f6c58,e02597c4-bf45-4bb6-931d-62d2244f6c58,0,1,42544966-445d-41b8-b6a0-a52c64758232,42544966-445d-41b8-b6a0-a52c64758232,0,1,a92d8a5c-b595-4c6c-9f1d-5e85b1c996b4,a92d8a5c-b595-4c6c-9f1d-5e85b1c996b4,0,1,bd68dd13-66bb-40ed-8f4b-0767b7063ffd,bd68dd13-66bb-40ed-8f4b-0767b7063ffd,0,1,9eea8645-1ba7-4faf-9c29-868bf99964dd,9eea8645-1ba7-4faf-9c29-868bf99964dd,0,1,e07ac651-07b9-4664-95e8-f3f5a51ea6c8,e07ac651-07b9-4664-95e8-f3f5a51ea6c8,0,1,0c44fdea-7b81-45be-87f5-d64456a9d379,0c44fdea-7b81-45be-87f5-d64456a9d379,0,1,d09d6f21-cdd0-485e-bd2c-92092a1aefef,d09d6f21-cdd0-485e-bd2c-92092a1aefef,0,1,2fc92784-d7b0-4209-ba06-e54bed2f160f,2fc92784-d7b0-4209-ba06-e54bed2f160f,0,1,e5b8ea5c-1d08-4f0a-a8f6-358b41e2e9f2,e5b8ea5c-1d08-4f0a-a8f6-358b41e2e9f2,0,1,a4e4c91c-fd95-4369-98e3-51ffba79937b,a4e4c91c-fd95-4369-98e3-51ffba79937b,0,1,0d0ada8a-09bb-4634-bf50-199f3779dad5,0d0ada8a-09bb-4634-bf50-199f3779dad5,0,1,d343d4e4-d07f-48c3-9db1-774b0d6c1134,d343d4e4-d07f-48c3-9db1-774b0d6c1134,0,1,14ef2331-6d9b-4cf1-90f3-7d4ac410439d,14ef2331-6d9b-4cf1-90f3-7d4ac410439d,0,1,04ab13b1-ffc2-47f5-aa0d-5850dcbd4a62,04ab13b1-ffc2-47f5-aa0d-5850dcbd4a62,0,1,968588bb-ee60-4399-955a-3ec4228d3c40,968588bb-ee60-4399-955a-3ec4228d3c40,0,1,23dbb528-7ea8-44ae-a1f2-b7608118666e,23dbb528-7ea8-44ae-a1f2-b7608118666e,0,1,b9627855-6773-4a59-b7d3-f9e2e565cd9e,b9627855-6773-4a59-b7d3-f9e2e565cd9e,0,1,ad87bd29-0ad1-4da4-ac62-38e714e0cb9f,ad87bd29-0ad1-4da4-ac62-38e714e0cb9f,0,1,283ce432-3553-4de9-94a2-ca9a590437f5,283ce432-3553-4de9-94a2-ca9a590437f5,0,1,0da019ca-1fc7-4aff-8998-3ddcccf10872,0da019ca-1fc7-4aff-8998-3ddcccf10872,0,1,7102d4fa-92f2-4fba-ad09-a33dbc71bef2,7102d4fa-92f2-4fba-ad09-a33dbc71bef2,0,1,34b0e268-497d-44d4-b822-84909d0685aa,34b0e268-497d-44d4-b822-84909d0685aa,0,1,8961a859-2203-4678-ae1f-63e2474a787a,8961a859-2203-4678-ae1f-63e2474a787a,0,1,fe63db47-3ece-4518-b6a2-0b6499f60a61,fe63db47-3ece-4518-b6a2-0b6499f60a61,0,1,654523be-93d9-4faa-9a35-ce2fede13820,654523be-93d9-4faa-9a35-ce2fede13820,0,1,671afc3e-7589-49d8-95a5-1cf195c3b2f8,671afc3e-7589-49d8-95a5-1cf195c3b2f8,0,1,47accdc7-8fa0-4996-9305-c42b6ca12df9,47accdc7-8fa0-4996-9305-c42b6ca12df9,0,1,5abc496c-5745-4220-9fdc-bac092717871,5abc496c-5745-4220-9fdc-bac092717871,0,1,256981be-18fd-4d92-91f3-6d55bbe2181b,256981be-18fd-4d92-91f3-6d55bbe2181b,0,1,d6bcf961-b863-486e-9a88-c237ae84f7c3,d6bcf961-b863-486e-9a88-c237ae84f7c3,0,1,1d75bfa4-5698-4cbc-98cb-591509fcfde8,1d75bfa4-5698-4cbc-98cb-591509fcfde8,0,1,26eb08f7-6c62-459f-b1f5-363cc40cae46,26eb08f7-6c62-459f-b1f5-363cc40cae46,0,1,cdbc7f5c-dbf9-49cd-a940-95b37bc7b734,cdbc7f5c-dbf9-49cd-a940-95b37bc7b734,0,1,7b802612-3034-4413-9ee8-60e94ebed6d6,7b802612-3034-4413-9ee8-60e94ebed6d6,0,1,59420cb5-d903-4e2c-a9e1-bc5494168daf,59420cb5-d903-4e2c-a9e1-bc5494168daf,0,1,7df36398-7752-4f51-9978-1bcb4bcdd062,7df36398-7752-4f51-9978-1bcb4bcdd062,0,1,9fd55b7f-209b-4b74-99d6-965b8f6f2df9,9fd55b7f-209b-4b74-99d6-965b8f6f2df9,0,1,f818fde9-1b06-4507-a69f-4dcb0ce8cd7a,f818fde9-1b06-4507-a69f-4dcb0ce8cd7a,0,1,a6690ef1-b16a-4d58-bc31-a8089b2c00d8,a6690ef1-b16a-4d58-bc31-a8089b2c00d8,0,1,fce03f58-7f68-4d7c-a999-687667c1f03d,fce03f58-7f68-4d7c-a999-687667c1f03d,0,1,316f94ec-81ed-4b5c-aa9d-98d2cfe1c641,316f94ec-81ed-4b5c-aa9d-98d2cfe1c641,0,1,f4885af5-6ed6-40e8-81a5-0e9537f943d7,f4885af5-6ed6-40e8-81a5-0e9537f943d7,0,1,87472d14-0d8c-4813-8a3e-2721bbb26811,87472d14-0d8c-4813-8a3e-2721bbb26811,0,1,44cf6d0a-0a5b-4ca1-b91e-af61f40fb825,44cf6d0a-0a5b-4ca1-b91e-af61f40fb825,0,1,e8faa1a9-807a-4916-b3c5-76ba2199754c,e8faa1a9-807a-4916-b3c5-76ba2199754c,0,1,99b5c632-61fe-41f5-ac00-ea530633bf28,99b5c632-61fe-41f5-ac00-ea530633bf28,0,1,a3c9c4e7-d36a-4db1-bd95-a50886c4be60,a3c9c4e7-d36a-4db1-bd95-a50886c4be60,0,1,4c53f94e-d7e8-457c-b337-59d3b3c5bf24,4c53f94e-d7e8-457c-b337-59d3b3c5bf24,0,1,bd6d7dcd-421c-402e-b6b8-f6ce6b18c140,bd6d7dcd-421c-402e-b6b8-f6ce6b18c140,0,1,485911f7-a964-450d-82da-cab020836eb2,485911f7-a964-450d-82da-cab020836eb2,0,1,cedd0b47-07cb-4dae-86b5-31d396b693c7,cedd0b47-07cb-4dae-86b5-31d396b693c7,0,1,c08391e1-c4e3-42aa-8738-061031d0cb75,c08391e1-c4e3-42aa-8738-061031d0cb75,0,1,bf4c6723-e586-4643-9f03-9e672afea26f,bf4c6723-e586-4643-9f03-9e672afea26f,0,1,4c3a39e3-40ee-423b-91f0-14b60e045b40,4c3a39e3-40ee-423b-91f0-14b60e045b40,0,1,23204b0b-bf77-4f7c-9945-e73ad924ebb4,23204b0b-bf77-4f7c-9945-e73ad924ebb4,0,1,dd9d3586-775b-4d5b-ab2d-78db0870ecdd,dd9d3586-775b-4d5b-ab2d-78db0870ecdd,0,1,44c610c3-9c0b-4bf0-95d6-f17100d3e98d,44c610c3-9c0b-4bf0-95d6-f17100d3e98d,0,1,a54f2d41-a05e-4878-80c6-81ca2899fa4c,a54f2d41-a05e-4878-80c6-81ca2899fa4c,0,1,23a898d9-5bcb-4744-ab6c-97b17dc98f20,23a898d9-5bcb-4744-ab6c-97b17dc98f20,0,1,50a04251-ac9c-4a21-a37f-ebc9ac3ef233,50a04251-ac9c-4a21-a37f-ebc9ac3ef233,0,1,f8f56806-ed7e-4059-a0c8-940538c14c98,f8f56806-ed7e-4059-a0c8-940538c14c98,0,1,9ff9f92b-c509-48da-82ce-15b524a895d6,9ff9f92b-c509-48da-82ce-15b524a895d6,0,1,c8bf96c8-f359-4940-8e87-3d190371d6d3,c8bf96c8-f359-4940-8e87-3d190371d6d3,0,1,477f0b81-0eb1-4de1-8cb5-38f1e0823947,477f0b81-0eb1-4de1-8cb5-38f1e0823947,0,1,d914eaa9-ce85-4df7-a545-2d411ef915b0,d914eaa9-ce85-4df7-a545-2d411ef915b0,0,1,41881344-82b7-4904-9ab8-0207d9bcd0a9,41881344-82b7-4904-9ab8-0207d9bcd0a9,0,1,21032fa5-9426-40bd-91e4-ace1e4ceb013,21032fa5-9426-40bd-91e4-ace1e4ceb013,0,1,6338aed6-ee7a-48e8-afc3-9d0bf5166399,6338aed6-ee7a-48e8-afc3-9d0bf5166399,0,1,ddfe5401-e136-4f20-aa65-aeb42a61a1f0,ddfe5401-e136-4f20-aa65-aeb42a61a1f0,0,1,27a80757-c0fd-40c7-ad24-4c819c1ba72b,27a80757-c0fd-40c7-ad24-4c819c1ba72b,0,1,c573a29f-4c39-402d-8af4-e0fff80877f8,c573a29f-4c39-402d-8af4-e0fff80877f8,0,1,7fce9e49-e558-4760-9d95-dde6ac6c1e78,7fce9e49-e558-4760-9d95-dde6ac6c1e78,0,1,e5aba4a3-6056-4ef3-827c-d74283175393,e5aba4a3-6056-4ef3-827c-d74283175393,0,1,63039e62-7314-42ff-bdc6-c251f38b3827,63039e62-7314-42ff-bdc6-c251f38b3827,0,1,8a4b7aab-b602-4581-8fa4-fab66791f701,8a4b7aab-b602-4581-8fa4-fab66791f701,0,1,7c92c579-4651-4fe3-90dc-6c9b594b76f0,7c92c579-4651-4fe3-90dc-6c9b594b76f0,0,1,a2be2d7a-cca0-460f-a915-dadfb9cd588b,a2be2d7a-cca0-460f-a915-dadfb9cd588b,0,1,35bac3e3-1329-4aa6-866f-f6fcaed8cd6e,35bac3e3-1329-4aa6-866f-f6fcaed8cd6e,0,1,ed53b24d-5338-4ae1-8659-0ea6450dc7bb,ed53b24d-5338-4ae1-8659-0ea6450dc7bb,0,1,6add2712-48e8-4b22-a7bb-7d8c808ac5fc,6add2712-48e8-4b22-a7bb-7d8c808ac5fc,0,1,1f4408f5-460e-431b-9842-bc6875ccf0ae,1f4408f5-460e-431b-9842-bc6875ccf0ae,0,1,ec09aa2d-758f-4ae8-96b7-0f05b8187dda,ec09aa2d-758f-4ae8-96b7-0f05b8187dda,0,1,7bfc6163-a62f-45e8-9112-40a5d675ba4a,7bfc6163-a62f-45e8-9112-40a5d675ba4a,0,1,542ff510-0245-4a08-80ac-a9941c66ae93,542ff510-0245-4a08-80ac-a9941c66ae93,0,1,03297623-eaa2-4db0-bf1b-ce2076faf20a,03297623-eaa2-4db0-bf1b-ce2076faf20a,0,1,3c6ef64e-c9bd-4cba-98a4-ffcc5b93b6da,3c6ef64e-c9bd-4cba-98a4-ffcc5b93b6da,0,1,700c2edd-c457-47b7-a7d3-5fb3d9078d1f,700c2edd-c457-47b7-a7d3-5fb3d9078d1f,0,1,82a3802c-b6d6-4511-bd8b-eeec003afa33,82a3802c-b6d6-4511-bd8b-eeec003afa33,0,1,8b59dec8-12b8-455f-8dfc-7c3f03b4ffa5,8b59dec8-12b8-455f-8dfc-7c3f03b4ffa5,0,1,b5eb2e12-c39c-44fa-b940-09b4dcd2817c,b5eb2e12-c39c-44fa-b940-09b4dcd2817c,0,1,5d5ffb56-e18b-4831-94f0-d7a76c2eee6f,5d5ffb56-e18b-4831-94f0-d7a76c2eee6f,0,1,590f29f4-2db1-47c6-83a0-f44d4bbe6e3e,590f29f4-2db1-47c6-83a0-f44d4bbe6e3e,0,1,a755cb43-492d-4069-9b6a-29b92ebb5b0e,a755cb43-492d-4069-9b6a-29b92ebb5b0e,0,1,86d09107-f511-4148-b5d9-d97e92addfde,86d09107-f511-4148-b5d9-d97e92addfde,0,1,c14c1f91-f4b9-44d6-b560-8dcdb5faf5f9,c14c1f91-f4b9-44d6-b560-8dcdb5faf5f9,0,1,55b78834-3d90-4858-a6f7-e0368b1d8c41,55b78834-3d90-4858-a6f7-e0368b1d8c41,0,1,059b9a75-f53a-4518-a48a-afc72ab9ee36,059b9a75-f53a-4518-a48a-afc72ab9ee36,0,1,bc0dcb68-bfb8-49f4-8eb4-2ca953d852bd,bc0dcb68-bfb8-49f4-8eb4-2ca953d852bd,0,1,31e95872-97c7-49e3-bd1b-8df4de07014d,31e95872-97c7-49e3-bd1b-8df4de07014d,0,1,9fc7e672-6c80-418a-a973-937a4a172a2b,9fc7e672-6c80-418a-a973-937a4a172a2b,0,1,8b9be02b-cd1f-4231-a895-6c9be26348c2,8b9be02b-cd1f-4231-a895-6c9be26348c2,0,1,c52c4b8c-6be7-460a-9b54-6cdf64e3f8fe,c52c4b8c-6be7-460a-9b54-6cdf64e3f8fe,0,1,64e03321-33a4-424d-a101-90f1e0da4c2e,64e03321-33a4-424d-a101-90f1e0da4c2e,0,1,fa4f0b33-5253-4a5f-8121-feae3e1968a6,fa4f0b33-5253-4a5f-8121-feae3e1968a6,0,1,e0d21be2-91dc-4a04-9078-49420ddddcd5,e0d21be2-91dc-4a04-9078-49420ddddcd5,0,1,56c97764-7dba-42e0-8ba0-82712aca20e9,56c97764-7dba-42e0-8ba0-82712aca20e9,0,1,03ad9b3d-8f3a-4482-a777-f6a3b3d953d6,03ad9b3d-8f3a-4482-a777-f6a3b3d953d6,0,1,3f05dcf9-be52-42e1-b5ff-dea14d97a26f,3f05dcf9-be52-42e1-b5ff-dea14d97a26f,0,1,ea868745-71fc-483c-aa6e-f242c06c673f,ea868745-71fc-483c-aa6e-f242c06c673f,0,1,7f3c6269-ea41-492f-87b7-7eaaf712762e,7f3c6269-ea41-492f-87b7-7eaaf712762e,0,1,a5d037b0-c666-4179-9d6a-5f48c4a126a8,a5d037b0-c666-4179-9d6a-5f48c4a126a8,0,1,f0850411-4dee-4f1d-baec-7d6c96b10637,f0850411-4dee-4f1d-baec-7d6c96b10637,0,1,12f95031-b81f-4802-b2f3-6f70def90db0,12f95031-b81f-4802-b2f3-6f70def90db0,0,1,5732112a-f31d-41cd-9a7f-312a27395502,5732112a-f31d-41cd-9a7f-312a27395502,0,1,bbf8342b-24f0-4d11-bb5a-4c89d5ea7766,bbf8342b-24f0-4d11-bb5a-4c89d5ea7766,0,1,06fc381d-f27a-433c-95c3-e0981e01f22b,06fc381d-f27a-433c-95c3-e0981e01f22b,0,1,f646835e-61eb-4ebd-811e-dac5e70bd1b4,f646835e-61eb-4ebd-811e-dac5e70bd1b4,0,1,61b49c4c-3021-4868-834a-9137476ae169,61b49c4c-3021-4868-834a-9137476ae169,0,1,58911911-5192-45fe-87cf-c4a222a521a1,58911911-5192-45fe-87cf-c4a222a521a1,0,1,70067937-9f27-4442-b87b-6c4576ce1b78,70067937-9f27-4442-b87b-6c4576ce1b78,0,1,115d5d06-a2fc-453e-aab5-c869b6d5850b,115d5d06-a2fc-453e-aab5-c869b6d5850b,0,1,d33ca006-d81d-4ef8-8503-7878e81c599f,d33ca006-d81d-4ef8-8503-7878e81c599f,0,1,123bb339-b95e-44c3-b1e9-482dcaa6f297,123bb339-b95e-44c3-b1e9-482dcaa6f297,0,1,f4119605-beb3-46b6-b372-ecdb74f10a33,f4119605-beb3-46b6-b372-ecdb74f10a33,0,1,d2a2e332-a52c-4277-bd19-5ea8ef198469,d2a2e332-a52c-4277-bd19-5ea8ef198469,0,1,e440c594-14bb-4a6e-af53-a4519c7d5548,e440c594-14bb-4a6e-af53-a4519c7d5548,0,1,4165bdaa-8e27-40de-bcdc-0379c34e8868,4165bdaa-8e27-40de-bcdc-0379c34e8868,0,1,a9a3fde2-99d5-4ebf-88b1-eccd9d74276e,a9a3fde2-99d5-4ebf-88b1-eccd9d74276e,0,1,e606f8eb-952a-4abb-b1ae-4211204bed84,e606f8eb-952a-4abb-b1ae-4211204bed84,0,1,7ddc3d13-fa6f-4fa9-870e-a34d5b2d9582,7ddc3d13-fa6f-4fa9-870e-a34d5b2d9582,0,1,1c2ad932-150a-4b15-b958-62eaa8a1eebc,1c2ad932-150a-4b15-b958-62eaa8a1eebc,0,1,b4deaebf-2c21-47d7-9436-10c94c94667c,b4deaebf-2c21-47d7-9436-10c94c94667c,0,1,2a12ce95-3214-4bd2-a0e6-c2af41875821,2a12ce95-3214-4bd2-a0e6-c2af41875821,0,1,bf05548c-babf-402b-b698-9a62e7c69add,bf05548c-babf-402b-b698-9a62e7c69add,0,1,f8295f29-2533-4013-981b-240f017d9f7c,f8295f29-2533-4013-981b-240f017d9f7c,0,1,538b316b-3876-4da6-8b97-ad8ef59de17d,538b316b-3876-4da6-8b97-ad8ef59de17d,0,1,f70f09fd-59e1-47b6-aaf3-cb4cc4ceaa7e,f70f09fd-59e1-47b6-aaf3-cb4cc4ceaa7e,0,1,ebc5f182-482b-4dec-9961-ce3a448abd0e,ebc5f182-482b-4dec-9961-ce3a448abd0e,0,1,83e618f5-1bf4-474a-9d65-389f1e4b16c3,83e618f5-1bf4-474a-9d65-389f1e4b16c3,0,1,1357512e-3ed3-455d-bc91-81db3b92f9fe,1357512e-3ed3-455d-bc91-81db3b92f9fe,0,1,23d4aa7d-8a2c-4e18-9d5d-43a155de9bf0,23d4aa7d-8a2c-4e18-9d5d-43a155de9bf0,0,1,82223d0f-41d9-45a6-9612-ae4d8408fa1b,82223d0f-41d9-45a6-9612-ae4d8408fa1b,0,1,3ee058a9-aff5-46f0-8928-8a417e7800d4,3ee058a9-aff5-46f0-8928-8a417e7800d4,0,1,c9a03f19-42bb-4e07-8ce8-1b954e431ada,c9a03f19-42bb-4e07-8ce8-1b954e431ada,0,1,ed4edc6f-048a-40d5-8f61-989895c95cf3,ed4edc6f-048a-40d5-8f61-989895c95cf3,0,1,74e1bfac-18ea-48c2-b7e9-fd374a90a35d,74e1bfac-18ea-48c2-b7e9-fd374a90a35d,0,1,dc17d8b6-d277-43eb-8823-71d440ae1e90,dc17d8b6-d277-43eb-8823-71d440ae1e90,0,1,c5b8bf21-5c8f-4e5b-8b85-bfac387ce99a,c5b8bf21-5c8f-4e5b-8b85-bfac387ce99a,0,1,2465986e-7519-4638-9f62-5f692bebeeac,2465986e-7519-4638-9f62-5f692bebeeac,0,1,66e24df5-f443-47c0-b0ad-97d00d6761c7,66e24df5-f443-47c0-b0ad-97d00d6761c7,0,1,d9a6706e-3dcd-4aec-b9d1-542330ba6e2e,d9a6706e-3dcd-4aec-b9d1-542330ba6e2e,0,1,7cbf0398-2bc7-4f40-9a9e-af4135c6a2d2,7cbf0398-2bc7-4f40-9a9e-af4135c6a2d2,0,1,cc770616-f6f6-4054-876c-f319b1f8c6cf,cc770616-f6f6-4054-876c-f319b1f8c6cf,0,1,3baffdec-a2cb-48c9-9c21-4fc469e81e3b,3baffdec-a2cb-48c9-9c21-4fc469e81e3b,0,1,8486e623-1a54-4ad9-ab44-591b6a559bc3,8486e623-1a54-4ad9-ab44-591b6a559bc3,0,1,dce82d28-9a7b-4d4c-af13-90f459cf4af2,dce82d28-9a7b-4d4c-af13-90f459cf4af2,0,1,cb9f2231-49bb-4b14-a124-8996628afead,cb9f2231-49bb-4b14-a124-8996628afead,0,1,dc1b8bce-49c5-4fd2-a597-27f1fbc98648,dc1b8bce-49c5-4fd2-a597-27f1fbc98648,0,1,ac4c6275-3c23-4a1f-b19e-c674fd685e8f,ac4c6275-3c23-4a1f-b19e-c674fd685e8f,0,1,896de79f-3c34-4436-a4e2-4dd4f45c3e20,896de79f-3c34-4436-a4e2-4dd4f45c3e20,0,1,25d118f0-bfb7-4f08-84b1-0511b0fc92e8,25d118f0-bfb7-4f08-84b1-0511b0fc92e8,0,1,e6c42b5d-57fd-42ce-a968-653620e797f6,e6c42b5d-57fd-42ce-a968-653620e797f6,0,1,724fb328-fec6-4afe-bc99-0ff0951b184b,724fb328-fec6-4afe-bc99-0ff0951b184b,0,1,f6259a3b-98f5-4649-8fd0-da0a0285f375,f6259a3b-98f5-4649-8fd0-da0a0285f375,0,1,c565bf25-c55e-4324-851a-cec497f5114a,c565bf25-c55e-4324-851a-cec497f5114a,0,1,2997e4da-d831-48e4-96e2-c29f9d077302,2997e4da-d831-48e4-96e2-c29f9d077302,0,1,b50994d0-23f9-4bf4-93d2-cf9bcffa6fc9,b50994d0-23f9-4bf4-93d2-cf9bcffa6fc9,0,1,5b0e250c-4d2d-4e37-ade1-593854610d3f,5b0e250c-4d2d-4e37-ade1-593854610d3f,0,1,148f63d5-23ad-4824-a24c-14d5a54c62d3,148f63d5-23ad-4824-a24c-14d5a54c62d3,0,1,d6cdd049-b31b-48aa-a2aa-a24b0bdf3337,d6cdd049-b31b-48aa-a2aa-a24b0bdf3337,0,1,eabfa8b7-fb65-43dd-9308-787f7cce88c9,eabfa8b7-fb65-43dd-9308-787f7cce88c9,0,1,4bf12710-aef2-43ec-b16f-9c6c9e8eb18d,4bf12710-aef2-43ec-b16f-9c6c9e8eb18d,0,1,30213cef-b2bc-4e6c-8094-74a61f28b2ed,30213cef-b2bc-4e6c-8094-74a61f28b2ed,0,1,037fd2f3-27f1-4d8f-a621-82fa5754e8c7,037fd2f3-27f1-4d8f-a621-82fa5754e8c7,0,1,8c72f824-b667-4d74-84aa-30eccfbbd2f0,8c72f824-b667-4d74-84aa-30eccfbbd2f0,0,1,ceb286e9-4e7c-49fa-a695-424073e0dffc,ceb286e9-4e7c-49fa-a695-424073e0dffc,0,1,727689c3-c0d8-496f-a47b-4f3243ad8974,727689c3-c0d8-496f-a47b-4f3243ad8974,0,1,057aadbd-f41f-4de4-95f4-9301557e6a0e,057aadbd-f41f-4de4-95f4-9301557e6a0e,0,1,ec7b492d-5d38-4f31-90e0-577ad181514e,ec7b492d-5d38-4f31-90e0-577ad181514e,0,1,f0f9cf2c-bbf9-4511-a1ab-3941c15310eb,f0f9cf2c-bbf9-4511-a1ab-3941c15310eb,0,1,da0686ce-25e2-4d2c-b152-283f5e4cf4b1,da0686ce-25e2-4d2c-b152-283f5e4cf4b1,0,1,4807629d-8421-4bd9-beb4-5b2940197958,4807629d-8421-4bd9-beb4-5b2940197958,0,1,4bad7c64-131a-42cb-9be7-d61f14f456d0,4bad7c64-131a-42cb-9be7-d61f14f456d0,0,1,d46e141b-7a10-4d65-971f-3a35f2114017,d46e141b-7a10-4d65-971f-3a35f2114017,0,1,cd6f96c7-33ee-42b1-bb81-ce7d9652337c,cd6f96c7-33ee-42b1-bb81-ce7d9652337c,0,1,766c7fb5-727e-4975-9ea1-3b0df4739620,766c7fb5-727e-4975-9ea1-3b0df4739620,0,1,ba59393c-c499-4999-91d4-b9e34d94db0e,ba59393c-c499-4999-91d4-b9e34d94db0e,0,1,fcf6a4cd-d0c9-4f83-b9b0-514baed3ccb9,fcf6a4cd-d0c9-4f83-b9b0-514baed3ccb9,0,1,3f92cffe-b4ea-45e3-b2b9-a9e316405a8c,3f92cffe-b4ea-45e3-b2b9-a9e316405a8c,0,1,e70a6eab-791f-4c70-bb92-f069c7486d1b,e70a6eab-791f-4c70-bb92-f069c7486d1b,0,1,f74f97b7-4cbf-4124-b441-d8bb5d9b1634,f74f97b7-4cbf-4124-b441-d8bb5d9b1634,0,1,a3a9a48b-f241-45b2-b93b-d34bba0a8a66,a3a9a48b-f241-45b2-b93b-d34bba0a8a66,0,1,ba5574bd-53ca-413f-a245-272f468a80fb,ba5574bd-53ca-413f-a245-272f468a80fb,0,1,f58bffe7-4a02-4c4e-bfed-7895177a400c,f58bffe7-4a02-4c4e-bfed-7895177a400c,0,1,fe285122-2257-4fb2-ab7e-1683c31db1c6,fe285122-2257-4fb2-ab7e-1683c31db1c6,0,1,0facc6eb-a178-45ee-a6bc-4bf085d80453,0facc6eb-a178-45ee-a6bc-4bf085d80453,0,1,f74eef36-9441-4b6f-b21c-de9643832f9f,f74eef36-9441-4b6f-b21c-de9643832f9f,0,1,8d1c44d7-52f2-4089-9d77-2f03bf051455,8d1c44d7-52f2-4089-9d77-2f03bf051455,0,1,ac2e5217-aaeb-4b6f-b063-538c84f2da06,ac2e5217-aaeb-4b6f-b063-538c84f2da06,0,1,b5e73fbe-499c-4666-a482-0ef399c97c1e,b5e73fbe-499c-4666-a482-0ef399c97c1e,0,1,a0811e0a-91b6-4c4b-a6d2-a57b9185983b,a0811e0a-91b6-4c4b-a6d2-a57b9185983b,0,1,4ac77dea-3c2b-4566-8857-ba99f7b025c9,4ac77dea-3c2b-4566-8857-ba99f7b025c9,0,1,8e87da88-9fa8-4dd8-b904-622b763239f4,8e87da88-9fa8-4dd8-b904-622b763239f4,0,1,09fec67d-6e45-428c-b858-9ae20979676c,09fec67d-6e45-428c-b858-9ae20979676c,0,1,58ffc4d9-d711-4b68-905c-d2ac4f78b547,58ffc4d9-d711-4b68-905c-d2ac4f78b547,0,1,114ab2a1-f7c3-4453-a6cc-4c5a23c00cb5,114ab2a1-f7c3-4453-a6cc-4c5a23c00cb5,0,1,93c347d8-66cb-406c-9ee6-b1962482893f,93c347d8-66cb-406c-9ee6-b1962482893f,0,1,94ab750f-46b4-427c-a7f2-4e94fb9b0678,94ab750f-46b4-427c-a7f2-4e94fb9b0678,0,1,397d9926-31a3-4c03-acb7-74478f9863e1,397d9926-31a3-4c03-acb7-74478f9863e1,0,1,264dd12a-b4c5-44bf-b3c0-ef9225505f76,264dd12a-b4c5-44bf-b3c0-ef9225505f76,0,1,90b8fdf3-3e42-442f-a002-6a28ad0edc99,90b8fdf3-3e42-442f-a002-6a28ad0edc99,0,1,92f35bea-50b8-4a1c-8fb2-a8c7df7a50db,92f35bea-50b8-4a1c-8fb2-a8c7df7a50db,0,1,82ba8c13-6567-4f0c-be0e-0884ce19bbcc,82ba8c13-6567-4f0c-be0e-0884ce19bbcc,0,1,697bd1de-bbef-4362-aa39-71f6008f4bd7,697bd1de-bbef-4362-aa39-71f6008f4bd7,0,1,a3e9afe9-1587-47c7-8e7b-b8df6b3a2664,a3e9afe9-1587-47c7-8e7b-b8df6b3a2664,0,1,0e31d69a-8d2c-4ad0-b3ac-93ba5afcefdf,0e31d69a-8d2c-4ad0-b3ac-93ba5afcefdf,0,1,3de28e34-3c1e-4e7f-a720-3418c8c9c496,3de28e34-3c1e-4e7f-a720-3418c8c9c496,0,1,7f2d69b4-2f87-40f4-a78c-fe4cabc2a502,7f2d69b4-2f87-40f4-a78c-fe4cabc2a502,0,1,dacb236e-42a5-47e5-b239-ff18ae48e21e,dacb236e-42a5-47e5-b239-ff18ae48e21e,0,1,5cdb6e71-fd20-461a-83db-d59ccdb5b366,5cdb6e71-fd20-461a-83db-d59ccdb5b366,0,1,388b8576-9ba4-460f-b71b-3d644663656a,388b8576-9ba4-460f-b71b-3d644663656a,0,1,d4d38827-fce6-4c39-a4b4-51c7d7edc475,d4d38827-fce6-4c39-a4b4-51c7d7edc475,0,1,2d40609d-b56f-4082-9a6f-8216817ebd24,2d40609d-b56f-4082-9a6f-8216817ebd24,0,1,b238b4b2-beaf-4b5d-a728-8aebac3bacb5,b238b4b2-beaf-4b5d-a728-8aebac3bacb5,0,1,732b19c8-4f22-4748-a796-71538e46fc2f,732b19c8-4f22-4748-a796-71538e46fc2f,0,1,9fb2169b-fc77-4a3f-a1d8-b939079d9d9d,9fb2169b-fc77-4a3f-a1d8-b939079d9d9d,0,1,3fe0ef25-ce56-435d-b343-eadfec91a636,3fe0ef25-ce56-435d-b343-eadfec91a636,0,1,74f02619-7fa8-4c6d-81d6-230156ee45f4,74f02619-7fa8-4c6d-81d6-230156ee45f4,0,1,a103cca0-8243-40e9-bcdd-97a1cc8a3943,a103cca0-8243-40e9-bcdd-97a1cc8a3943,0,1,c3572d8d-46ff-40bb-800c-2c07f884c219,c3572d8d-46ff-40bb-800c-2c07f884c219,0,1,80fd89d7-160d-4528-9aa0-05b8dac64b4c,80fd89d7-160d-4528-9aa0-05b8dac64b4c,0,1,4eb24fcd-85f6-4fa6-bc9f-baef3861664e,4eb24fcd-85f6-4fa6-bc9f-baef3861664e,0,1,da551cf6-4f86-4e37-8967-a84c80e1fb13,da551cf6-4f86-4e37-8967-a84c80e1fb13,0,1,5fb2c120-fd14-4e78-a35f-c8e9478b3235,5fb2c120-fd14-4e78-a35f-c8e9478b3235,0,1,9d514ce1-f9bd-4018-8107-545cdd372fbd,9d514ce1-f9bd-4018-8107-545cdd372fbd,0,1,fe6b732f-3a33-460f-9686-cffdd5f7d99b,fe6b732f-3a33-460f-9686-cffdd5f7d99b,0,1,06250212-aeb1-4cb8-8785-ea71b1dad848,06250212-aeb1-4cb8-8785-ea71b1dad848,0,1,0c068a61-e5e6-4475-96fa-b7c1d825da42,0c068a61-e5e6-4475-96fa-b7c1d825da42,0,1,1047e34d-397a-42cc-80e6-1be755bd6462,1047e34d-397a-42cc-80e6-1be755bd6462,0,1,1cd473c3-4e36-47a9-b466-73d86ec244b0,1cd473c3-4e36-47a9-b466-73d86ec244b0,0,1,c3e31dfd-b79b-49b9-9dc0-e2439bfe5ab7,c3e31dfd-b79b-49b9-9dc0-e2439bfe5ab7,0,1,b406b5f9-eeaf-43a0-8930-067554d783c9,b406b5f9-eeaf-43a0-8930-067554d783c9,0,1,47718840-2939-4e30-a72c-a20c88ac4c17,47718840-2939-4e30-a72c-a20c88ac4c17,0,1,58a38994-9fe4-4783-967d-79d1141b90f3,58a38994-9fe4-4783-967d-79d1141b90f3,0,1,6e23a4b2-f53c-41ea-9fef-8f4561b8e0cc,6e23a4b2-f53c-41ea-9fef-8f4561b8e0cc,0,1,7c2e35a8-d05d-4e52-baee-a1e13585c502,7c2e35a8-d05d-4e52-baee-a1e13585c502,0,1,5d8b60e5-d407-4d8a-b4fb-e26a36ab8180,5d8b60e5-d407-4d8a-b4fb-e26a36ab8180,0,1,ab5b0155-a4b1-47a1-ad87-12365dde20c1,ab5b0155-a4b1-47a1-ad87-12365dde20c1,0,1,f551f78a-2f05-4932-ac33-cfa1b077f46f,f551f78a-2f05-4932-ac33-cfa1b077f46f,0,1,a96091a7-d3a5-4893-8440-f360231bf468,a96091a7-d3a5-4893-8440-f360231bf468,0,1,9ce6eef0-5280-4374-9714-474ac571e4e2,9ce6eef0-5280-4374-9714-474ac571e4e2,0,1,aeb54e92-a1d0-46a1-b4cb-87d3c29fa30b,aeb54e92-a1d0-46a1-b4cb-87d3c29fa30b,0,1,8395bfb2-3cf4-4bec-b19b-eb6dd3aa7a39,8395bfb2-3cf4-4bec-b19b-eb6dd3aa7a39,0,1,672c4741-6d7b-4d3e-baa7-389bef0625d7,672c4741-6d7b-4d3e-baa7-389bef0625d7,0,1,04398ec0-1c13-43f8-8f5d-7b7619592a4d,04398ec0-1c13-43f8-8f5d-7b7619592a4d,0,1,ce463861-92df-47f2-bd0f-4a2dbf72aacc,ce463861-92df-47f2-bd0f-4a2dbf72aacc,0,1,eca79a64-3d00-4178-b4eb-cf5468622c96,eca79a64-3d00-4178-b4eb-cf5468622c96,0,1,1487d68c-7a2f-48cf-8c80-4074072ed52c,1487d68c-7a2f-48cf-8c80-4074072ed52c,0,1,6ed8c74c-6b6e-4ed1-95ff-a733f618b213,6ed8c74c-6b6e-4ed1-95ff-a733f618b213,0,1,60cd8bc4-6a5d-4d36-83d0-76a8477eda6a,60cd8bc4-6a5d-4d36-83d0-76a8477eda6a,0,1,6dc4c216-e49f-4833-b45f-6060b67995ef,6dc4c216-e49f-4833-b45f-6060b67995ef,0,1,4655fa12-9169-4d08-bdab-9b3174d0b223,4655fa12-9169-4d08-bdab-9b3174d0b223,0,1,6c07ddfb-8823-4953-9905-9550b847dc3f,6c07ddfb-8823-4953-9905-9550b847dc3f,0,1,2362a8d5-dca2-4527-acc0-63782377f28a,2362a8d5-dca2-4527-acc0-63782377f28a,0,1,dfd6d85c-a734-4458-83b0-87b5949f9c68,dfd6d85c-a734-4458-83b0-87b5949f9c68,0,1,4e3b0b9f-45b7-48a8-86c6-cc14a921aa78,4e3b0b9f-45b7-48a8-86c6-cc14a921aa78,0,1,79b6ecf5-8a6b-44a4-9587-5f8764463228,79b6ecf5-8a6b-44a4-9587-5f8764463228,0,1,cd49148c-e385-4b75-a758-a93196e73dba,cd49148c-e385-4b75-a758-a93196e73dba,0,1,ece15c4e-4a4b-421b-9f00-10f698da476b,ece15c4e-4a4b-421b-9f00-10f698da476b,0,1,6cb136cd-dc5c-4d85-8a0d-70b9f8bf70d5,6cb136cd-dc5c-4d85-8a0d-70b9f8bf70d5,0,1,300ecdd6-144f-48c8-9fd4-6166f1de1047,300ecdd6-144f-48c8-9fd4-6166f1de1047,0,1,b6bbfb59-8249-47af-9394-be262f118811,b6bbfb59-8249-47af-9394-be262f118811,0,1,15dab650-f7ed-42bc-8ca3-c104c3e68ce4,15dab650-f7ed-42bc-8ca3-c104c3e68ce4,0,1,fb63d488-fb91-4d08-8f8c-f4836538216f,fb63d488-fb91-4d08-8f8c-f4836538216f,0,1,b8be6c09-6880-45d3-a2d1-06ad72d069c9,b8be6c09-6880-45d3-a2d1-06ad72d069c9,0,1,3c1b10c7-3667-43f0-ac03-8cdaa84cb177,3c1b10c7-3667-43f0-ac03-8cdaa84cb177,0,1,148dd521-8754-451b-803b-cbee7c3d3965,148dd521-8754-451b-803b-cbee7c3d3965,0,1,38bc48c7-3938-47be-be3f-844f19561301,38bc48c7-3938-47be-be3f-844f19561301,0,1,4bdd09d5-6bc9-421f-99f0-ae905340f0d4,4bdd09d5-6bc9-421f-99f0-ae905340f0d4,0,1,147038fb-6154-41f3-aad6-547db27d1e43,147038fb-6154-41f3-aad6-547db27d1e43,0,1,832fa9d3-deab-4c57-b6e2-dee5d24d6100,832fa9d3-deab-4c57-b6e2-dee5d24d6100,0,1,dd4270ef-6b4c-491e-8871-959dbec14c53,dd4270ef-6b4c-491e-8871-959dbec14c53,0,1,c2b115d3-04f8-43c8-aed9-c61280b8cc3b,c2b115d3-04f8-43c8-aed9-c61280b8cc3b,0,1,8ccd9be8-ef26-49b9-8cee-03ae4e500386,8ccd9be8-ef26-49b9-8cee-03ae4e500386,0,1,ddca925c-fdcd-40ce-a504-4fca1758de3f,ddca925c-fdcd-40ce-a504-4fca1758de3f,0,1,f64de21f-5a7c-4a1a-a929-07fc53049f6c,f64de21f-5a7c-4a1a-a929-07fc53049f6c,0,1,470cdf43-07f4-46d5-aab2-d41f1e5da3cd,470cdf43-07f4-46d5-aab2-d41f1e5da3cd,0,1,ea653eca-f96a-447d-8b09-7a7cb6929ed6,ea653eca-f96a-447d-8b09-7a7cb6929ed6,0,1,5efc4bc4-b711-4620-8d2e-9d947c6cc141,5efc4bc4-b711-4620-8d2e-9d947c6cc141,0,1,ae52e48c-20ec-43cd-a9a5-b1753558e1d2,ae52e48c-20ec-43cd-a9a5-b1753558e1d2,0,1,5e08154e-bd8b-4e61-8a6c-b5b500f12b99,5e08154e-bd8b-4e61-8a6c-b5b500f12b99,0,1,39af0f4c-0f0d-4e9a-aa63-d0eee3985b4e,39af0f4c-0f0d-4e9a-aa63-d0eee3985b4e,0,1,2b72fe1c-afe1-4905-8db2-2bb1baca6295,2b72fe1c-afe1-4905-8db2-2bb1baca6295,0,1,4bc4c6db-0ef8-405f-8875-b4cb1540aeb5,4bc4c6db-0ef8-405f-8875-b4cb1540aeb5,0,1,dbd8391c-a174-43d6-a8db-d9ab76b4edbe,dbd8391c-a174-43d6-a8db-d9ab76b4edbe,0,1,ce5f5470-b704-4f55-8dc8-17cf2c2b367a,ce5f5470-b704-4f55-8dc8-17cf2c2b367a,0,1,fa44433b-1c44-45a0-9487-47aa092442cf,fa44433b-1c44-45a0-9487-47aa092442cf,0,1,041cecfd-cef2-45d9-90e8-afe0d97d2d95,041cecfd-cef2-45d9-90e8-afe0d97d2d95,0,1,7e4222fd-fb98-4ae5-9d98-d41c3d572a0c,7e4222fd-fb98-4ae5-9d98-d41c3d572a0c,0,1,d9d14a24-c023-4b69-ad57-30d1474e1232,d9d14a24-c023-4b69-ad57-30d1474e1232,0,1,0943dd00-1653-4760-a9fe-ebc083ffa660,0943dd00-1653-4760-a9fe-ebc083ffa660,0,1,4fb8564e-2338-4c23-84a4-31f768047ced,4fb8564e-2338-4c23-84a4-31f768047ced,0,1,6179c7bf-08d6-4600-8cdc-ea6d4187bd55,6179c7bf-08d6-4600-8cdc-ea6d4187bd55,0,1,f93c9a7f-0249-421e-b3d0-55f02d130017,f93c9a7f-0249-421e-b3d0-55f02d130017,0,1,062c507a-9d35-4eb5-bb91-d106a535a503,062c507a-9d35-4eb5-bb91-d106a535a503,0,1,fd317d96-380e-4ee7-a25b-401e8521cc7a,fd317d96-380e-4ee7-a25b-401e8521cc7a,0,1,3b380a63-9232-42c2-bfa2-e8fc89448bbd,3b380a63-9232-42c2-bfa2-e8fc89448bbd,0,1,e18b4527-8727-4a10-9e99-a80012debe6c,e18b4527-8727-4a10-9e99-a80012debe6c,0,1,1ed910db-e434-4efd-9b12-c25353a31d5a,1ed910db-e434-4efd-9b12-c25353a31d5a,0,1,10556a26-ea4b-46b4-84d1-175eb13b333f,10556a26-ea4b-46b4-84d1-175eb13b333f,0,1,f1e600b0-55ed-4611-b147-f04d5621796b,f1e600b0-55ed-4611-b147-f04d5621796b,1,0,76702e9e-fa7a-4b98-befa-f9b37db2dae0,76702e9e-fa7a-4b98-befa-f9b37db2dae0,1,0,101a4eb3-cdda-47af-8c69-615a6920347a,101a4eb3-cdda-47af-8c69-615a6920347a,1,0,cf19f220-f6d4-4c9e-b5d5-9d94234f0a2c,cf19f220-f6d4-4c9e-b5d5-9d94234f0a2c,1,0,f410a5db-8698-44ca-9ff6-2c530e1f5c2a,f410a5db-8698-44ca-9ff6-2c530e1f5c2a,1,0,f79bada2-838f-4e4f-a017-935cf671a70c,f79bada2-838f-4e4f-a017-935cf671a70c,1,0,ed394820-a216-4c4b-81ae-5dea33ced43b,ed394820-a216-4c4b-81ae-5dea33ced43b,1,0,3f3a0b1b-04ce-47c1-928d-5e3483e9fd73,3f3a0b1b-04ce-47c1-928d-5e3483e9fd73,1,0,8a310493-c06f-46db-b2b5-14d6ed203312,8a310493-c06f-46db-b2b5-14d6ed203312,1,0,b68ec95b-64f3-4a2b-9683-231d50f01eeb,b68ec95b-64f3-4a2b-9683-231d50f01eeb,1,0,4a008342-f72f-4ca1-bad1-64b59b509911,4a008342-f72f-4ca1-bad1-64b59b509911,1,0,cefa1723-a4d4-44c4-bd57-ffa713f9306c,cefa1723-a4d4-44c4-bd57-ffa713f9306c,1,0,8d8b91c0-c0ab-4b9d-b854-b867063ddb5b,8d8b91c0-c0ab-4b9d-b854-b867063ddb5b,1,0,4920aabf-6f53-4f91-932a-8ace24631a74,4920aabf-6f53-4f91-932a-8ace24631a74,1,0,ce7a7f72-9d7d-4240-b852-e83b4b8d944b,ce7a7f72-9d7d-4240-b852-e83b4b8d944b,1,0,7309e58d-b0d4-4e0f-a74d-68cab03fea8e,7309e58d-b0d4-4e0f-a74d-68cab03fea8e,1,0,bbec9c3d-31dd-484e-ab32-41ef845f1370,bbec9c3d-31dd-484e-ab32-41ef845f1370,1,0,8692ba41-d91d-4af0-8aba-69dd5409d593,8692ba41-d91d-4af0-8aba-69dd5409d593,1,0,5bfd74f4-811a-45db-b33d-8f93ba9c873a,5bfd74f4-811a-45db-b33d-8f93ba9c873a,1,0,a95b564a-c895-40f2-b947-ea08462bb2a0,a95b564a-c895-40f2-b947-ea08462bb2a0,1,0,ca63ca2f-703d-4317-8c5d-0650ea638f3f,ca63ca2f-703d-4317-8c5d-0650ea638f3f,1,0,aa2256c7-9847-40a5-9e49-11c508e0d45b,aa2256c7-9847-40a5-9e49-11c508e0d45b,1,0,a04493f4-508c-4047-b0e3-b7d4bde6427b,a04493f4-508c-4047-b0e3-b7d4bde6427b,1,0,418982cd-d403-47cf-a7ef-993a36104947,418982cd-d403-47cf-a7ef-993a36104947,1,0,485ebc6a-0e3e-4278-8ef1-c6194d6d5015,485ebc6a-0e3e-4278-8ef1-c6194d6d5015,1,0,816c8143-8b02-4f4a-8eb1-44c7fb36afcc,816c8143-8b02-4f4a-8eb1-44c7fb36afcc,1,0,35eea3b8-d017-442a-b5a0-a1571165b9a9,35eea3b8-d017-442a-b5a0-a1571165b9a9,1,0,7e84901c-cb7f-437c-a135-0902cd47acb6,7e84901c-cb7f-437c-a135-0902cd47acb6,1,0,c4d67026-2c97-4126-b8be-49aa6f567e2d,c4d67026-2c97-4126-b8be-49aa6f567e2d,1,0,fda2906d-f499-4016-b13a-99f7f713b898,fda2906d-f499-4016-b13a-99f7f713b898,1,0,da2b47f5-4109-4f72-a4a5-70be24a6881f,da2b47f5-4109-4f72-a4a5-70be24a6881f,1,0,f0152598-ffa3-4eb7-811f-906e569373e6,f0152598-ffa3-4eb7-811f-906e569373e6,1,0,849f034e-85dc-4515-aae6-240c1e0d46d9,849f034e-85dc-4515-aae6-240c1e0d46d9,1,0,de4d37c9-b278-4c0c-bc10-1b63ecd72947,de4d37c9-b278-4c0c-bc10-1b63ecd72947,1,0,1c7e9baa-7728-4afd-829a-806cee13ecdb,1c7e9baa-7728-4afd-829a-806cee13ecdb,1,0,5d75aae8-9d9c-4a47-b8c0-2ce56431fe53,5d75aae8-9d9c-4a47-b8c0-2ce56431fe53,1,0,5a741cf6-8160-4409-9396-2e6d1e67e6fa,5a741cf6-8160-4409-9396-2e6d1e67e6fa,1,0,8242daae-181a-47df-b28e-c1de3fce0359,8242daae-181a-47df-b28e-c1de3fce0359,1,0,5fbea8c7-48e3-4ed0-a8d0-cf942b37a166,5fbea8c7-48e3-4ed0-a8d0-cf942b37a166,1,0,5cc3a29d-aa98-42bf-9800-f584229c8e46,5cc3a29d-aa98-42bf-9800-f584229c8e46,1,0,db82191f-77bd-44da-8b33-86f01018e25a,db82191f-77bd-44da-8b33-86f01018e25a,1,0,acfa1919-07ce-4464-8552-6b104e284dca,acfa1919-07ce-4464-8552-6b104e284dca,1,0,497ce8f3-f6f0-4da8-aeb0-0fa01bb26dc6,497ce8f3-f6f0-4da8-aeb0-0fa01bb26dc6,1,0,f4cff4ff-68e9-4072-971e-1b359d3aa980,f4cff4ff-68e9-4072-971e-1b359d3aa980,1,0,6f9fba85-7c04-4e07-bc93-8ad79cbdca85,6f9fba85-7c04-4e07-bc93-8ad79cbdca85,1,0,fdb012c9-583a-42af-95da-070e75a58078,fdb012c9-583a-42af-95da-070e75a58078,1,0,40a52f83-f0e2-470d-9c17-7fdc8cc646b7,40a52f83-f0e2-470d-9c17-7fdc8cc646b7,1,0,7d069b11-cddd-463d-97be-3cbeaaf0954c,7d069b11-cddd-463d-97be-3cbeaaf0954c,1,0,8c5fae4c-b5b6-4e05-9453-4ac5de07c54c,8c5fae4c-b5b6-4e05-9453-4ac5de07c54c,1,0,7531fb7c-a4ae-42df-b8e5-d8bfcb66be52,7531fb7c-a4ae-42df-b8e5-d8bfcb66be52,1,0,d1b950b0-dd66-49f9-998e-3ae5e820ae7f,d1b950b0-dd66-49f9-998e-3ae5e820ae7f,1,0,57e39881-cbf9-4cac-9ed0-bf4a6ea667ee,57e39881-cbf9-4cac-9ed0-bf4a6ea667ee,1,0,b9004626-915c-44c8-9cb7-25e5b627ee83,b9004626-915c-44c8-9cb7-25e5b627ee83,1,0,63c6cfad-124d-491a-829d-b298463c95e6,63c6cfad-124d-491a-829d-b298463c95e6,1,0,737404de-5b9d-4445-81c5-2c5b50b36846,737404de-5b9d-4445-81c5-2c5b50b36846,1,0,1ae364d3-0bec-4089-af23-c60d2a274c85,1ae364d3-0bec-4089-af23-c60d2a274c85,1,0,1c1a5bf8-bbe6-4a69-973e-11445175dac2,1c1a5bf8-bbe6-4a69-973e-11445175dac2,1,0,f11ffcfd-3588-4785-b222-cebe80455303,f11ffcfd-3588-4785-b222-cebe80455303,1,0,5d216c28-0724-4e7d-86cf-b6f75e7e28b7,5d216c28-0724-4e7d-86cf-b6f75e7e28b7,1,0,bfdc6346-db5b-427f-acca-9b48db8fefd0,bfdc6346-db5b-427f-acca-9b48db8fefd0,1,0,1c3f258c-345e-47f6-9e29-98b1222fb348,1c3f258c-345e-47f6-9e29-98b1222fb348,1,0,dfafcdf3-cdeb-4822-9f41-a730d9d3fb24,dfafcdf3-cdeb-4822-9f41-a730d9d3fb24,1,0,f39b4559-cc42-494f-b856-bd8e575ad75b,f39b4559-cc42-494f-b856-bd8e575ad75b,1,0,35c938f4-065f-47f5-a75b-637ed0080725,35c938f4-065f-47f5-a75b-637ed0080725,0,1,e14c0841-226c-4c79-bec9-cfc8d2c3a160,e14c0841-226c-4c79-bec9-cfc8d2c3a160,0,1,73e4bce2-df4a-4f60-a369-55f588a46bd1,73e4bce2-df4a-4f60-a369-55f588a46bd1,0,1,6f3c5b90-b030-4267-a973-33d12c2c7680,6f3c5b90-b030-4267-a973-33d12c2c7680,0,1,1ff8210b-26c5-4429-b580-7c6ec7c9b63a,1ff8210b-26c5-4429-b580-7c6ec7c9b63a,0,1,b107a4a8-0db8-44f4-93f7-9f231e850398,b107a4a8-0db8-44f4-93f7-9f231e850398,0,1,88b879b7-1bb3-4478-b569-35bdb5c56939,88b879b7-1bb3-4478-b569-35bdb5c56939,0,1,7a62d031-c340-4b1e-90af-fff697a2e979,7a62d031-c340-4b1e-90af-fff697a2e979,0,1,18bf6916-83cc-41e5-a35b-1489450ae632,18bf6916-83cc-41e5-a35b-1489450ae632,0,1,ebab97cf-5335-4648-9845-8ca41f79fb49,ebab97cf-5335-4648-9845-8ca41f79fb49,0,1,bb29fa44-6772-4426-a0b8-422115e14288,bb29fa44-6772-4426-a0b8-422115e14288,0,1,904e1209-91d8-49b1-b291-364ef728cbbf,904e1209-91d8-49b1-b291-364ef728cbbf,0,1,1198f2ee-b8a8-456d-9461-61bc5d42c7a1,1198f2ee-b8a8-456d-9461-61bc5d42c7a1,0,1,b8ecb7f0-ef40-4d31-9ec2-a731439d3200,b8ecb7f0-ef40-4d31-9ec2-a731439d3200,0,1,e4da2959-0fb0-48fb-a5aa-e7a5589d69c3,e4da2959-0fb0-48fb-a5aa-e7a5589d69c3,0,1,b5365cb6-a4e7-479b-82f4-f4ad80fcd7c9,b5365cb6-a4e7-479b-82f4-f4ad80fcd7c9,0,1,e51ae56c-d311-46b7-8d4c-19a432f4cd16,e51ae56c-d311-46b7-8d4c-19a432f4cd16,0,1,e000d04e-37eb-4d95-a833-b0a9b10ee0b9,e000d04e-37eb-4d95-a833-b0a9b10ee0b9,0,1,40d3ed07-3b56-4c9f-8b96-d94455202ef0,40d3ed07-3b56-4c9f-8b96-d94455202ef0,0,1,23314bcd-2dd4-43f1-9fdb-ae182a48c886,23314bcd-2dd4-43f1-9fdb-ae182a48c886,0,1,c5f86fa3-4a36-4e22-8b57-7088dd250cd3,c5f86fa3-4a36-4e22-8b57-7088dd250cd3,0,1,84282afa-21f5-40db-9386-e6f741c9a06c,84282afa-21f5-40db-9386-e6f741c9a06c,0,1,5b3b3da9-8619-4fbd-b140-3528875cd179,5b3b3da9-8619-4fbd-b140-3528875cd179,0,1,99e5e866-7ac6-4916-ab66-3e2909822c56,99e5e866-7ac6-4916-ab66-3e2909822c56,0,1,03363877-2752-4a03-95f2-d73b732e0bfd,03363877-2752-4a03-95f2-d73b732e0bfd,0,1,8d9d2284-e592-44c5-93bb-247037ab6b95,8d9d2284-e592-44c5-93bb-247037ab6b95,0,1,0b0d2b7c-d52e-4163-83cf-a7e86bb47c47,0b0d2b7c-d52e-4163-83cf-a7e86bb47c47,0,1,78051e10-74ab-44be-adca-e4c93824a386,78051e10-74ab-44be-adca-e4c93824a386,0,1,73629419-83d8-4727-88a9-76c851d104c9,73629419-83d8-4727-88a9-76c851d104c9,0,1,cadb54f0-dcff-4f96-983e-a309fd72f330,cadb54f0-dcff-4f96-983e-a309fd72f330,0,1,a9c3065b-db68-4f59-9235-33f9fbfdaafd,a9c3065b-db68-4f59-9235-33f9fbfdaafd,0,1,3715cf3d-0abc-4711-8ac9-d41f0be7878f,3715cf3d-0abc-4711-8ac9-d41f0be7878f,0,1,8e8d8078-8b32-4c24-b26e-89a92bf60160,8e8d8078-8b32-4c24-b26e-89a92bf60160,0,1,f96cbb27-7619-41e0-8577-e623ef02dc58,f96cbb27-7619-41e0-8577-e623ef02dc58,0,1,d74dfd31-2016-435b-8652-15fdbca59490,d74dfd31-2016-435b-8652-15fdbca59490,0,1,ba8111a9-1d33-4615-ad0b-b3e923b2f3bd,ba8111a9-1d33-4615-ad0b-b3e923b2f3bd,0,1,27651e0e-d560-434b-a49c-f473a5b20c4d,27651e0e-d560-434b-a49c-f473a5b20c4d,0,1,dab1491b-0685-442d-b945-2bfde3f37933,dab1491b-0685-442d-b945-2bfde3f37933,0,1,ce85554b-81ba-4149-a951-d09bdc14fa16,ce85554b-81ba-4149-a951-d09bdc14fa16,0,1,23a1ef35-1469-44ea-8535-fa9c7f535cae,23a1ef35-1469-44ea-8535-fa9c7f535cae,0,1,8c7d74bf-2865-47d9-8a16-5b0db1104a3a,8c7d74bf-2865-47d9-8a16-5b0db1104a3a,0,1,2558d812-ac0a-49ba-87db-3f661209a3c4,2558d812-ac0a-49ba-87db-3f661209a3c4,0,1,20d712ef-77c1-4374-92e1-f20a3ebc7eab,20d712ef-77c1-4374-92e1-f20a3ebc7eab,0,1,65d23ce8-e326-45ee-86b0-6dcf35797201,65d23ce8-e326-45ee-86b0-6dcf35797201,0,1,a2683c3f-1b21-47d8-951d-7d30cde51efc,a2683c3f-1b21-47d8-951d-7d30cde51efc,0,1,54c77053-1728-4914-a354-73fe8853a0e1,54c77053-1728-4914-a354-73fe8853a0e1,0,1,21136691-078f-4bf7-bddd-f41416a76d86,21136691-078f-4bf7-bddd-f41416a76d86,0,1,30a121c7-c4f5-45c4-9504-9778ed85d9e3,30a121c7-c4f5-45c4-9504-9778ed85d9e3,0,1,c68e2157-2541-4f80-966a-d68ce603f131,c68e2157-2541-4f80-966a-d68ce603f131,0,1,e5dfee58-f748-48ee-81a3-7c6133f06365,e5dfee58-f748-48ee-81a3-7c6133f06365,0,1,68500931-89e0-491e-aba8-b013c9e6f8c3,68500931-89e0-491e-aba8-b013c9e6f8c3,0,1,70b79e56-bb71-4f38-93cf-94dda79d9b4c,70b79e56-bb71-4f38-93cf-94dda79d9b4c,0,1,5c4c9931-3fb0-47a8-9e4f-d552de12b355,5c4c9931-3fb0-47a8-9e4f-d552de12b355,0,1,dc1d0f97-e2f3-4e1d-b21c-411b46e39848,dc1d0f97-e2f3-4e1d-b21c-411b46e39848,0,1,ef6ccd0d-73c6-4314-9912-efa7ff27c823,ef6ccd0d-73c6-4314-9912-efa7ff27c823,0,1,2a498baf-ec2e-4dda-b568-801bb60db225,2a498baf-ec2e-4dda-b568-801bb60db225,0,1,8a32af97-cdb5-46b4-ab7b-e1509e26ecc3,8a32af97-cdb5-46b4-ab7b-e1509e26ecc3,0,1,9f59f8cd-8d61-4fbc-ae6e-32f28ce0035a,9f59f8cd-8d61-4fbc-ae6e-32f28ce0035a,0,1,35989876-16b1-4b02-9381-444a06a7a21d,35989876-16b1-4b02-9381-444a06a7a21d,0,1,f7608000-1e8a-4ca4-afb7-e04ef547b70a,f7608000-1e8a-4ca4-afb7-e04ef547b70a,0,1,26cea519-19d0-4707-be0a-1a43fde6e563,26cea519-19d0-4707-be0a-1a43fde6e563,0,1,a3d599b9-89d1-4386-8c5b-1c2a9905e6e2,a3d599b9-89d1-4386-8c5b-1c2a9905e6e2,0,1,9fb3e902-3154-4bab-9bfe-9a266dc49fa5,9fb3e902-3154-4bab-9bfe-9a266dc49fa5,0,1,60c04f0a-78a8-4c55-8844-b86906350fd1,60c04f0a-78a8-4c55-8844-b86906350fd1,0,1,851306a7-8847-4b43-8214-898bfc24b0ab,851306a7-8847-4b43-8214-898bfc24b0ab,0,1,af8d4bc9-2f0f-44d3-89ce-2593877055c8,af8d4bc9-2f0f-44d3-89ce-2593877055c8,0,1,344fb829-a1cc-4b17-8f98-2d4f93bfcd6a,344fb829-a1cc-4b17-8f98-2d4f93bfcd6a,0,1,eb35bff2-8467-48fe-bf93-ece2aa40f506,eb35bff2-8467-48fe-bf93-ece2aa40f506,0,1,68cf55da-b29e-4a65-815b-c9cdc8e5888e,68cf55da-b29e-4a65-815b-c9cdc8e5888e,0,1,a9f927ef-22a2-4d77-8648-4bb25eeaccf2,a9f927ef-22a2-4d77-8648-4bb25eeaccf2,0,1,1041ed81-c1f7-43b2-9087-914865a3076e,1041ed81-c1f7-43b2-9087-914865a3076e,0,1,5d7174d2-42b3-4e12-b705-4209dd73b53b,5d7174d2-42b3-4e12-b705-4209dd73b53b,0,1,b1b5bf08-1c57-4875-87bb-ad1fa1a3251f,b1b5bf08-1c57-4875-87bb-ad1fa1a3251f,0,1,e00dcab4-5e92-44e3-bcdf-a31dd32a195f,e00dcab4-5e92-44e3-bcdf-a31dd32a195f,0,1,5a4c6511-f8ed-40e4-a251-e28f62629cf2,5a4c6511-f8ed-40e4-a251-e28f62629cf2,0,1,cfe59dfd-a509-4f83-b926-b3ff94234a43,cfe59dfd-a509-4f83-b926-b3ff94234a43,0,1,17df1591-61b0-4204-8379-8d1f58445968,17df1591-61b0-4204-8379-8d1f58445968,0,1,9020fa9d-e7de-4574-ab65-db6651b5b610,9020fa9d-e7de-4574-ab65-db6651b5b610,0,1,e83ad33d-27df-4181-afd2-b7f416e6e705,e83ad33d-27df-4181-afd2-b7f416e6e705,0,1,f0438b0a-7916-4de4-a3a8-d43407c3295f,f0438b0a-7916-4de4-a3a8-d43407c3295f,0,1,3309648c-aae6-4684-ae8d-7ed636bc3468,3309648c-aae6-4684-ae8d-7ed636bc3468,0,1,f9aa933e-6684-48de-b802-96c8e61b1fe6,f9aa933e-6684-48de-b802-96c8e61b1fe6,0,1,9de4d430-95ec-4435-b3e8-4fc85778d517,9de4d430-95ec-4435-b3e8-4fc85778d517,0,1,205b8908-fa21-42bd-bff0-fb95e6787f15,205b8908-fa21-42bd-bff0-fb95e6787f15,0,1,4e309f26-35e8-49d9-bbd1-c7884e666dca,4e309f26-35e8-49d9-bbd1-c7884e666dca,0,1,8a9ab11b-5bb5-4da9-9053-8f9e8198d019,8a9ab11b-5bb5-4da9-9053-8f9e8198d019,0,1,5320abf1-b09b-4de0-9adf-4cb1da31df6f,5320abf1-b09b-4de0-9adf-4cb1da31df6f,0,1,3916ddbd-9023-42a4-849e-9cda6e591408,3916ddbd-9023-42a4-849e-9cda6e591408,0,1,5e9e42c5-dcbc-422f-acce-4f11a63dbb85,5e9e42c5-dcbc-422f-acce-4f11a63dbb85,0,1,6903ffe4-42c1-4708-a1b0-bb67cd3f9e4c,6903ffe4-42c1-4708-a1b0-bb67cd3f9e4c,0,1,c0e01a15-6937-4331-bdd7-2f5a68d0d3dd,c0e01a15-6937-4331-bdd7-2f5a68d0d3dd,0,1,d065c02e-9991-468a-ae32-b8c29d078d03,d065c02e-9991-468a-ae32-b8c29d078d03,0,1,c509683e-eb13-4e1a-91ed-cd6982ec5001,c509683e-eb13-4e1a-91ed-cd6982ec5001,0,1,88bf6f58-7943-42c4-bc0f-56b991590026,88bf6f58-7943-42c4-bc0f-56b991590026,0,1,f135b60e-6d28-4ba1-acd7-76090f14855d,f135b60e-6d28-4ba1-acd7-76090f14855d,0,1,96d66cdd-d40c-43a3-92ce-40aef2101b64,96d66cdd-d40c-43a3-92ce-40aef2101b64,0,1,9daa8270-4782-4d83-af03-c8d2b11057ff,9daa8270-4782-4d83-af03-c8d2b11057ff,0,1,4b8927df-e124-4bf6-9d70-6e91b4796d90,4b8927df-e124-4bf6-9d70-6e91b4796d90,0,1,871b63a2-c7a6-4343-8d8b-7dda1b0def87,871b63a2-c7a6-4343-8d8b-7dda1b0def87,0,1,52b45b3d-b01b-4aac-8a1e-e256957c39c3,52b45b3d-b01b-4aac-8a1e-e256957c39c3,0,1,fc78d8df-ab27-4544-a65c-73908b9c5425,fc78d8df-ab27-4544-a65c-73908b9c5425,0,1,f8a090d2-b2d1-4ead-a8bf-6325a7552743,f8a090d2-b2d1-4ead-a8bf-6325a7552743,0,1,84f935da-9fe5-44ea-845b-b447b8b0a6f5,84f935da-9fe5-44ea-845b-b447b8b0a6f5,0,1,33343620-673e-4aa3-9e58-c6a25f738001,33343620-673e-4aa3-9e58-c6a25f738001,0,1,8aaf780f-ed74-4f44-9598-c14180053ff9,8aaf780f-ed74-4f44-9598-c14180053ff9,0,1,dbd4d09d-f410-4453-9143-bd72da5464cc,dbd4d09d-f410-4453-9143-bd72da5464cc,0,1,c4fe10b6-d025-4736-be23-3113bd7fe7b4,c4fe10b6-d025-4736-be23-3113bd7fe7b4,0,1,65530aca-7cf2-4a52-b5be-5dcbc15a049e,65530aca-7cf2-4a52-b5be-5dcbc15a049e,0,1,15eb2c2d-305d-42c0-9aec-936b82114bdb,15eb2c2d-305d-42c0-9aec-936b82114bdb,0,1,bb99bc44-f83e-48bb-93fd-7b07ca7da6a7,bb99bc44-f83e-48bb-93fd-7b07ca7da6a7,0,1,cbca7272-2aae-4e21-b3f5-12786f085648,cbca7272-2aae-4e21-b3f5-12786f085648,0,1,7718bd0b-7b8a-4ffc-b228-f05683b5531a,7718bd0b-7b8a-4ffc-b228-f05683b5531a,0,1,38aeb32b-9e3b-4b4a-9a61-97da63cdea48,38aeb32b-9e3b-4b4a-9a61-97da63cdea48,0,1,881f53bc-a52e-4312-b09d-3d3f53ddf84b,881f53bc-a52e-4312-b09d-3d3f53ddf84b,0,1,2e36a7b3-5331-4fab-a0a3-31b42a8387fe,2e36a7b3-5331-4fab-a0a3-31b42a8387fe,0,1,e3476d0e-0ab4-4734-9261-04aef6281086,e3476d0e-0ab4-4734-9261-04aef6281086,0,1,945ae8d2-b74a-41e9-b740-c82acdd40d04,945ae8d2-b74a-41e9-b740-c82acdd40d04,0,1,29c37223-de1c-49fb-8488-77e44dd79edd,29c37223-de1c-49fb-8488-77e44dd79edd,0,1,976533bf-f162-42a1-a47e-6d681ee67b82,976533bf-f162-42a1-a47e-6d681ee67b82,0,1,19bc0dd8-9e6b-4855-bc42-b4e98443163f,19bc0dd8-9e6b-4855-bc42-b4e98443163f,0,1,a61e10af-eaba-4e7a-a641-65d77453a559,a61e10af-eaba-4e7a-a641-65d77453a559,0,1,4c8eb34e-0bb6-487a-a2ae-24083b1f6d2e,4c8eb34e-0bb6-487a-a2ae-24083b1f6d2e,0,1,276c42ca-f5e0-4bb4-9b89-a925def35cb1,276c42ca-f5e0-4bb4-9b89-a925def35cb1,0,1,41a9cabc-5667-4ca0-a798-ba0b22bd1aa0,41a9cabc-5667-4ca0-a798-ba0b22bd1aa0,0,1,1bf44c42-87c0-4f2e-846c-b04d0b7e8d7d,1bf44c42-87c0-4f2e-846c-b04d0b7e8d7d,0,1,8811ea1a-1221-47b7-9574-3f36ff15a3cf,8811ea1a-1221-47b7-9574-3f36ff15a3cf,0,1,a84891cc-e996-489a-abde-5b5af166a057,a84891cc-e996-489a-abde-5b5af166a057,0,1,1d715463-691b-4c01-ae39-57c261f2a6ad,1d715463-691b-4c01-ae39-57c261f2a6ad,0,1,4c3d007f-a62c-4fd9-beda-58dbf08ad188,4c3d007f-a62c-4fd9-beda-58dbf08ad188,0,1,c35373a9-f0b0-4ddb-a985-409ac9c64609,c35373a9-f0b0-4ddb-a985-409ac9c64609,0,1,c1c40916-fee5-46e3-90fc-10e7595866c9,c1c40916-fee5-46e3-90fc-10e7595866c9,0,1,19a307b1-9ef0-4fc6-bf4f-7636e9118399,19a307b1-9ef0-4fc6-bf4f-7636e9118399,0,1,666244a4-5636-4405-89dd-bbd8f4278071,666244a4-5636-4405-89dd-bbd8f4278071,0,1,8b79f0e3-9024-4073-aa6b-a42beed9b0c6,8b79f0e3-9024-4073-aa6b-a42beed9b0c6,0,1,29a627a9-debc-4074-88d0-ec3561e1ef9c,29a627a9-debc-4074-88d0-ec3561e1ef9c,0,1,5a01a002-8833-4c89-b8d6-9b63fc49d3b6,5a01a002-8833-4c89-b8d6-9b63fc49d3b6,0,1,39f5e272-9a10-40b0-8a10-92037828b206,39f5e272-9a10-40b0-8a10-92037828b206,0,1,87dad256-122b-4d7e-b249-a2c313a9cf33,87dad256-122b-4d7e-b249-a2c313a9cf33,0,1,57a030fb-ed57-4ffc-a462-c7bbd2435c3d,57a030fb-ed57-4ffc-a462-c7bbd2435c3d,0,1,958033a6-2a8e-473a-903b-34eee6507f5a,958033a6-2a8e-473a-903b-34eee6507f5a,0,1,b722d6e1-fd6f-4bb4-923d-01764393722d,b722d6e1-fd6f-4bb4-923d-01764393722d,0,1,ac5f945e-2d03-44fb-a8cf-5d786194cefd,ac5f945e-2d03-44fb-a8cf-5d786194cefd,0,1,698ec00f-bf75-420e-81ab-a98808daf3f7,698ec00f-bf75-420e-81ab-a98808daf3f7,0,1,f441907c-d02e-431e-baf4-1854e48a1f50,f441907c-d02e-431e-baf4-1854e48a1f50,0,1,4ad722ca-10fc-4a83-91c9-ef0012685f89,4ad722ca-10fc-4a83-91c9-ef0012685f89,0,1,783dd4ba-a597-45ba-8989-2ed5224d62bc,783dd4ba-a597-45ba-8989-2ed5224d62bc,0,1,3b033d29-0de7-49dd-90bc-f414b28426d7,3b033d29-0de7-49dd-90bc-f414b28426d7,0,1,97aaede5-d32f-4eba-b0e0-5ae5f094a8b7,97aaede5-d32f-4eba-b0e0-5ae5f094a8b7,0,1,d9e08c12-1999-41d8-b530-90187303be0a,d9e08c12-1999-41d8-b530-90187303be0a,0,1,dad9710a-73ca-4e0d-b98b-75f955d0822d,dad9710a-73ca-4e0d-b98b-75f955d0822d,0,1,d01beeab-7c42-4d5e-a2f6-f190b9f703a5,d01beeab-7c42-4d5e-a2f6-f190b9f703a5,0,1,2191939f-6f71-47c9-a3d2-57acbf7f411e,2191939f-6f71-47c9-a3d2-57acbf7f411e,0,1,19b9cbbb-1fcc-4492-9385-687742cb3d0b,19b9cbbb-1fcc-4492-9385-687742cb3d0b,0,1,247c41dd-c8dc-43dd-b348-1ba31ee92065,247c41dd-c8dc-43dd-b348-1ba31ee92065,0,1,dbad3cee-0d5c-41f6-819f-1a2b5251b62c,dbad3cee-0d5c-41f6-819f-1a2b5251b62c,0,1,da673406-078d-44c8-9d27-80ef172c4b5e,da673406-078d-44c8-9d27-80ef172c4b5e,0,1,75e77f99-b9d1-4bc0-93aa-c77a93d760d3,75e77f99-b9d1-4bc0-93aa-c77a93d760d3,0,1,a2c36563-126d-4c3a-9714-5b7a4903073b,a2c36563-126d-4c3a-9714-5b7a4903073b,0,1,2e4da82c-dddb-4462-b34f-6511cd2a8356,2e4da82c-dddb-4462-b34f-6511cd2a8356,0,1,c7da3115-3cee-4282-a2f2-4e0b5558e4fc,c7da3115-3cee-4282-a2f2-4e0b5558e4fc,0,1,2976c29f-f482-463d-8f6e-6a632fb50893,2976c29f-f482-463d-8f6e-6a632fb50893,0,1,701964a1-7762-45ee-a9a4-41dd9ce94783,701964a1-7762-45ee-a9a4-41dd9ce94783,0,1,55d1909e-f552-441f-8e14-47d2e604cf6a,55d1909e-f552-441f-8e14-47d2e604cf6a,0,1,eae627db-c52b-4e41-94d1-58db28cd0063,eae627db-c52b-4e41-94d1-58db28cd0063,0,1,cafc86e1-d7f1-4cd2-ac20-04fa0917556a,cafc86e1-d7f1-4cd2-ac20-04fa0917556a,0,1,0a646724-b49d-42cd-82e6-e800466ed127,0a646724-b49d-42cd-82e6-e800466ed127,0,1,47058e36-a281-43a5-a41d-691b3ef32b5b,47058e36-a281-43a5-a41d-691b3ef32b5b,0,1,e620e93c-4382-478f-a700-ad2faa67362b,e620e93c-4382-478f-a700-ad2faa67362b,0,1,a4a8693b-dc91-4762-92e6-35360c8768db,a4a8693b-dc91-4762-92e6-35360c8768db,0,1,2ae236ec-28a7-44e0-a0ba-be62fe52d817,2ae236ec-28a7-44e0-a0ba-be62fe52d817,0,1,52ae6431-afb3-4dea-b106-00e11b174ec7,52ae6431-afb3-4dea-b106-00e11b174ec7,0,1,b18bdc5f-a2b6-4b15-81c3-37b27a5a3176,b18bdc5f-a2b6-4b15-81c3-37b27a5a3176,0,1,c996916d-7f1c-4fbf-939f-3e1bafe81f7d,c996916d-7f1c-4fbf-939f-3e1bafe81f7d,0,1,528d96cc-8838-49ea-8d76-ea56747882e0,528d96cc-8838-49ea-8d76-ea56747882e0,0,1,b9166ea0-cce8-4f76-a9cb-a3d6eb4dfb95,b9166ea0-cce8-4f76-a9cb-a3d6eb4dfb95,0,1,fcb46a8a-3461-4ec2-9aa0-685aedb9dd50,fcb46a8a-3461-4ec2-9aa0-685aedb9dd50,0,1,12cf9412-baf5-4d32-a563-a11ac3d5e0ed,12cf9412-baf5-4d32-a563-a11ac3d5e0ed,0,1,bdde9030-5718-4f5e-a9e2-f641f4ce69f9,bdde9030-5718-4f5e-a9e2-f641f4ce69f9,0,1,ed137e05-1996-411d-9927-45a3d7e3ee3b,ed137e05-1996-411d-9927-45a3d7e3ee3b,0,1,fbebf341-9842-41e1-8e4d-490fa02065ce,fbebf341-9842-41e1-8e4d-490fa02065ce,0,1,067f88f6-ccd2-491e-a466-94345a1f220f,067f88f6-ccd2-491e-a466-94345a1f220f,0,1,642154b8-97da-4c4f-bf34-c1124215077d,642154b8-97da-4c4f-bf34-c1124215077d,0,1,abc10867-39ae-46bf-8bd7-90f645919235,abc10867-39ae-46bf-8bd7-90f645919235,0,1,b3396504-8ccb-43d6-9a0f-ab259ba0a542,b3396504-8ccb-43d6-9a0f-ab259ba0a542,0,1,f59f91c5-026a-4dc5-996e-0d59814a9604,f59f91c5-026a-4dc5-996e-0d59814a9604,0,1,aac9966f-e9ea-4106-97bb-6b9822939bc7,aac9966f-e9ea-4106-97bb-6b9822939bc7,0,1,a752fba8-5084-4fa2-9d0b-7074a42b1312,a752fba8-5084-4fa2-9d0b-7074a42b1312,0,1,640d7486-8abd-40aa-a244-2ed899b7225a,640d7486-8abd-40aa-a244-2ed899b7225a,0,1,58321939-f25a-456d-8dee-97e64743dc2e,58321939-f25a-456d-8dee-97e64743dc2e,0,1,416fba62-70c4-4f8c-b10b-56d47b27ca35,416fba62-70c4-4f8c-b10b-56d47b27ca35,0,1,ec48a164-bc30-4e36-a40a-a3cca07aea0d,ec48a164-bc30-4e36-a40a-a3cca07aea0d,0,1,c05f87b4-ec5f-4d14-981f-02ca8ba89863,c05f87b4-ec5f-4d14-981f-02ca8ba89863,0,1,560a5f44-e4e6-46d9-a9fe-3609842d0e3e,560a5f44-e4e6-46d9-a9fe-3609842d0e3e,0,1,98f68a75-ebf9-4c59-b6a8-b3634089ca6b,98f68a75-ebf9-4c59-b6a8-b3634089ca6b,0,1,875d1fc1-8172-4e48-8192-035882e1665d,875d1fc1-8172-4e48-8192-035882e1665d,0,1,26132b28-98cc-4690-92ad-139f91839ba2,26132b28-98cc-4690-92ad-139f91839ba2,0,1,0bd85b79-cc32-4c1d-b629-567a1bdfac56,0bd85b79-cc32-4c1d-b629-567a1bdfac56,0,1,b87ce4f9-aaa6-4a4c-af80-0bd9adc83506,b87ce4f9-aaa6-4a4c-af80-0bd9adc83506,0,1,ca81e0ea-c428-47f9-aedb-078214104a2f,ca81e0ea-c428-47f9-aedb-078214104a2f,0,1,9518d09c-6996-4439-9278-3c71d5ae8fce,9518d09c-6996-4439-9278-3c71d5ae8fce,0,1,9dd6e7d6-cd98-4928-b50c-38bdbc61c211,9dd6e7d6-cd98-4928-b50c-38bdbc61c211,0,1,5fbd9a13-012d-4c36-b72c-da3bc4157cff,5fbd9a13-012d-4c36-b72c-da3bc4157cff,0,1,1126157b-64c0-4d64-8551-f31c5ed0fd29,1126157b-64c0-4d64-8551-f31c5ed0fd29,0,1,6ae6e515-5cd4-4eca-8602-c6abe6d66276,6ae6e515-5cd4-4eca-8602-c6abe6d66276,0,1,44b8472b-0f70-49cc-8f71-9c9d3e9cfbcc,44b8472b-0f70-49cc-8f71-9c9d3e9cfbcc,0,1,b071a44e-9a34-4af3-a59a-35aa5f3a74b4,b071a44e-9a34-4af3-a59a-35aa5f3a74b4,0,1,35a28677-0653-47f9-82e1-02c4b9266fee,35a28677-0653-47f9-82e1-02c4b9266fee,0,1,2e17464f-9cef-4812-865f-4eb77ff16b6a,2e17464f-9cef-4812-865f-4eb77ff16b6a,0,1,e5ecbb1f-981d-4928-9335-22216879f7e2,e5ecbb1f-981d-4928-9335-22216879f7e2,0,1,461be12a-9f16-4826-978a-436608ca8733,461be12a-9f16-4826-978a-436608ca8733,0,1,9b143299-d300-4b6c-b667-5552fb3bdcde,9b143299-d300-4b6c-b667-5552fb3bdcde,0,1,0de070f4-d8b7-48bb-bfc9-027dd727a4ad,0de070f4-d8b7-48bb-bfc9-027dd727a4ad,0,1,74973d06-f57d-403e-945c-5cd2f4fc4869,74973d06-f57d-403e-945c-5cd2f4fc4869,0,1,259564b8-172e-4eed-9360-d561ec6dad69,259564b8-172e-4eed-9360-d561ec6dad69,0,1,91c799d7-2b3d-4d1a-87ff-221057a428c6,91c799d7-2b3d-4d1a-87ff-221057a428c6,0,1,a50fcacc-6d2d-496c-bea0-9c73cd153437,a50fcacc-6d2d-496c-bea0-9c73cd153437,0,1,a6846c5a-7cf6-4df2-a159-2fd33d18d18f,a6846c5a-7cf6-4df2-a159-2fd33d18d18f,0,1,0fb72f4b-e6f6-4b70-8ec7-fdb6d4ad928e,0fb72f4b-e6f6-4b70-8ec7-fdb6d4ad928e,0,1,a5633248-8611-4e9b-b223-2f59e7b84a65,a5633248-8611-4e9b-b223-2f59e7b84a65,0,1,6ec3463a-1e94-4de7-a8c0-b0e42f38573e,6ec3463a-1e94-4de7-a8c0-b0e42f38573e,0,1,e40b8882-737a-40c0-83b4-c35dc042f4a5,e40b8882-737a-40c0-83b4-c35dc042f4a5,0,1,d60c1e9d-1395-4293-8462-6ea2c93a0c86,d60c1e9d-1395-4293-8462-6ea2c93a0c86,0,1,a05fdefd-c0c6-4069-bb05-3fcd22819289,a05fdefd-c0c6-4069-bb05-3fcd22819289,0,1,1514f388-3c36-422f-9e23-83054934e4b3,1514f388-3c36-422f-9e23-83054934e4b3,0,1,841f4416-a85a-48f7-bae2-19865cf2979e,841f4416-a85a-48f7-bae2-19865cf2979e,0,1,8df13cd3-1b03-4c84-98e9-c771c1d5254a,8df13cd3-1b03-4c84-98e9-c771c1d5254a,0,1,d4e53d41-9335-4a1e-a06e-410c46de1d1c,d4e53d41-9335-4a1e-a06e-410c46de1d1c,0,1,a79ddc43-74f6-4997-bfc4-bdf7bc71cdd6,a79ddc43-74f6-4997-bfc4-bdf7bc71cdd6,0,1,4405bfaa-699a-497b-a15c-0302b86c834c,4405bfaa-699a-497b-a15c-0302b86c834c,0,1,29477058-cb8d-4fd4-b3a1-41565aeabf97,29477058-cb8d-4fd4-b3a1-41565aeabf97,0,1,3b3e7b9d-67f8-4cf2-ad1a-29d124169691,3b3e7b9d-67f8-4cf2-ad1a-29d124169691,0,1,5a2d5d8a-afd9-4954-9868-7c82bad00426,5a2d5d8a-afd9-4954-9868-7c82bad00426,0,1,26aea96b-20f8-4e35-b55f-4fe3602e6597,26aea96b-20f8-4e35-b55f-4fe3602e6597,0,1,a3a3a211-e361-4e41-a6f8-d731a366c163,a3a3a211-e361-4e41-a6f8-d731a366c163,0,1,c40d6fde-4d9a-4d9e-af86-42b7916e2abe,c40d6fde-4d9a-4d9e-af86-42b7916e2abe,0,1,4d5204ae-711d-4c31-8a18-280dbc9d2bf5,4d5204ae-711d-4c31-8a18-280dbc9d2bf5,0,1,ca01417c-0ffd-4e00-91e8-93cd305be82d,ca01417c-0ffd-4e00-91e8-93cd305be82d,0,1,14fcf5e5-5856-4b5f-8c3f-75eaba0f7268,14fcf5e5-5856-4b5f-8c3f-75eaba0f7268,0,1,0a0af8bf-0caa-40df-9a69-71f98ca9ff89,0a0af8bf-0caa-40df-9a69-71f98ca9ff89,0,1,6ac7db0c-18ed-4d3b-956a-5985214db474,6ac7db0c-18ed-4d3b-956a-5985214db474,0,1,267103e0-6703-4a74-bb4f-af610d7ef332,267103e0-6703-4a74-bb4f-af610d7ef332,0,1,b98ca634-25a5-4366-af04-815ba34c8bb2,b98ca634-25a5-4366-af04-815ba34c8bb2,0,1,14d69108-4d26-401a-b7ae-2c86dadf831c,14d69108-4d26-401a-b7ae-2c86dadf831c,0,1,d6251f65-d366-4bc9-a5db-42063fe03594,d6251f65-d366-4bc9-a5db-42063fe03594,0,1,22c60cbc-429f-40d9-bf8b-681b7786c41d,22c60cbc-429f-40d9-bf8b-681b7786c41d,0,1,31dd320b-06aa-4314-9914-2c2420f572a1,31dd320b-06aa-4314-9914-2c2420f572a1,0,1,56730848-3bef-4b8c-b449-fe9d09c9c374,56730848-3bef-4b8c-b449-fe9d09c9c374,0,1,43c477d2-1234-4c4a-a18a-022c0ddf2fd5,43c477d2-1234-4c4a-a18a-022c0ddf2fd5,0,1,91d8c5e4-eaec-4951-9224-16882fda08f6,91d8c5e4-eaec-4951-9224-16882fda08f6,0,1,4304ffb9-7ede-4c59-bef8-26fe3e8f0103,4304ffb9-7ede-4c59-bef8-26fe3e8f0103,0,1,4654d192-74bf-430f-abee-6f4dc431b182,4654d192-74bf-430f-abee-6f4dc431b182,0,1,d4655391-144c-4ba6-aee5-1edafebe862c,d4655391-144c-4ba6-aee5-1edafebe862c,0,1,1ea750ae-5ec4-43c5-b34f-fd28999d41d7,1ea750ae-5ec4-43c5-b34f-fd28999d41d7,0,1,4678c704-933a-45ef-9d41-89b8f39016bb,4678c704-933a-45ef-9d41-89b8f39016bb,0,1,8ceea1e8-42ce-469f-823a-ceffdbd6b112,8ceea1e8-42ce-469f-823a-ceffdbd6b112,0,1,086d69d6-e2fa-45cb-84b6-f8f3e2919160,086d69d6-e2fa-45cb-84b6-f8f3e2919160,0,1,6995ee71-5901-46d9-a5c1-b35d795bda20,6995ee71-5901-46d9-a5c1-b35d795bda20,0,1,e93a4293-0497-4f11-b8b9-40300104fb96,e93a4293-0497-4f11-b8b9-40300104fb96,0,1,93531e5d-5dfc-42e8-be52-2e83f37262b0,93531e5d-5dfc-42e8-be52-2e83f37262b0,0,1,61bf78c0-7004-4a74-b362-e979c7316e05,61bf78c0-7004-4a74-b362-e979c7316e05,0,1,c4351896-eff1-4e4d-8823-028d63a9d6bf,c4351896-eff1-4e4d-8823-028d63a9d6bf,0,1,475f83a2-ba5a-4072-94f8-1324b1f198a4,475f83a2-ba5a-4072-94f8-1324b1f198a4,0,1,cd7c15c1-c573-46c9-b109-339b8b54c3ee,cd7c15c1-c573-46c9-b109-339b8b54c3ee,0,1,efd89929-4db9-4c58-b3cb-a8d9a41a1df2,efd89929-4db9-4c58-b3cb-a8d9a41a1df2,0,1,deee8bde-381f-4094-8794-7a06248860dd,deee8bde-381f-4094-8794-7a06248860dd,0,1,2757ee75-4b36-4901-bff1-044708754edb,2757ee75-4b36-4901-bff1-044708754edb,0,1,0e6bab27-bf94-4732-8549-dbd9b8a5f4e9,0e6bab27-bf94-4732-8549-dbd9b8a5f4e9,0,1,774c92d6-9b9b-422a-83d7-8d42ae2a9f60,774c92d6-9b9b-422a-83d7-8d42ae2a9f60,0,1,71144539-6472-4727-8887-0139f6221370,71144539-6472-4727-8887-0139f6221370,0,1,bff07da4-ae19-48a9-806b-14b285d42485,bff07da4-ae19-48a9-806b-14b285d42485,0,1,659cd4f6-d18c-4d75-a7e6-7c124a63ab9a,659cd4f6-d18c-4d75-a7e6-7c124a63ab9a,0,1,b0ccc05d-8d39-4f57-8e87-6846014f92ea,b0ccc05d-8d39-4f57-8e87-6846014f92ea,0,1,64fbfed7-9dda-481b-a4f7-fe440f24ba7e,64fbfed7-9dda-481b-a4f7-fe440f24ba7e,0,1,b2835a5b-5c91-448c-9eb1-1bb1c9a5e727,b2835a5b-5c91-448c-9eb1-1bb1c9a5e727,0,1,447fb310-0588-4e0d-8f6d-5fc1f3bb1180,447fb310-0588-4e0d-8f6d-5fc1f3bb1180,0,1,8986c155-54be-4b1b-b31a-5c00b88bc40d,8986c155-54be-4b1b-b31a-5c00b88bc40d,0,1,d91441cf-d793-4dfa-9225-f0c16818edde,d91441cf-d793-4dfa-9225-f0c16818edde,0,1,40ae107d-67a8-404c-adf9-1a760bba94ff,40ae107d-67a8-404c-adf9-1a760bba94ff,0,1,42a39785-144c-4d2d-92c6-fd8b345f687b,42a39785-144c-4d2d-92c6-fd8b345f687b,0,1,f3bd841b-fb36-4462-9627-b51801e563cd,f3bd841b-fb36-4462-9627-b51801e563cd,0,1,0a23f273-5589-4a48-be3a-eee7565749aa,0a23f273-5589-4a48-be3a-eee7565749aa,0,1,494eb9d9-4a10-4e85-b511-375408f21bbe,494eb9d9-4a10-4e85-b511-375408f21bbe,0,1,3fbbca3f-d4fa-4d65-a08f-0a348b9030c6,3fbbca3f-d4fa-4d65-a08f-0a348b9030c6,0,1,a161dd07-4a6e-4d0f-b72c-702d0d3a83a3,a161dd07-4a6e-4d0f-b72c-702d0d3a83a3,0,1,a275802f-937a-49f4-92da-fcdd185a036d,a275802f-937a-49f4-92da-fcdd185a036d,0,1,ec6ed9cb-85a2-4303-9906-cfb4ce6500bf,ec6ed9cb-85a2-4303-9906-cfb4ce6500bf,0,1,c05f15b0-a659-4473-b6d0-acebc4a2da57,c05f15b0-a659-4473-b6d0-acebc4a2da57,0,1,f2dc9319-ba60-421a-8340-be3e3a291393,f2dc9319-ba60-421a-8340-be3e3a291393,0,1,bf4eb62a-bc74-4845-bad2-58a2a8302a65,bf4eb62a-bc74-4845-bad2-58a2a8302a65,0,1,b66eb190-1c16-4f20-a94f-954bcdf313b8,b66eb190-1c16-4f20-a94f-954bcdf313b8,0,1,bbdfeebd-cda0-4911-8f31-553d751340a7,bbdfeebd-cda0-4911-8f31-553d751340a7,0,1,dc7adfb7-41e7-4019-a18d-5d9f5d227b71,dc7adfb7-41e7-4019-a18d-5d9f5d227b71,0,1,20aad006-5b1e-4cc2-94ef-668dd002667b,20aad006-5b1e-4cc2-94ef-668dd002667b,0,1,af6af7ae-d68a-4e12-ba2c-a360ce2920a7,af6af7ae-d68a-4e12-ba2c-a360ce2920a7,0,1,b0f5bce4-2ad3-416e-9b1e-3fb23deaa040,b0f5bce4-2ad3-416e-9b1e-3fb23deaa040,0,1,2befb2e3-7354-4a01-83d6-b24262704a5e,2befb2e3-7354-4a01-83d6-b24262704a5e,0,1,5b93975e-b2a4-4102-a060-2667f5813c94,5b93975e-b2a4-4102-a060-2667f5813c94,0,1,ca75d086-cd01-4f54-b57d-1b35bcb1272a,ca75d086-cd01-4f54-b57d-1b35bcb1272a,0,1,b4a27991-2e18-4ead-80e8-f2956a7539e3,b4a27991-2e18-4ead-80e8-f2956a7539e3,0,1,ac8c40d6-be1e-4733-be2e-ae83bde4ec15,ac8c40d6-be1e-4733-be2e-ae83bde4ec15,0,1,dcdc9c65-c2d5-4531-a325-f64b3861cbab,dcdc9c65-c2d5-4531-a325-f64b3861cbab,0,1,ca542a9e-3040-419f-9a98-2a8de230b734,ca542a9e-3040-419f-9a98-2a8de230b734,0,1,c9fc5155-1df3-4872-a83d-72872baf43c4,c9fc5155-1df3-4872-a83d-72872baf43c4,0,1,9f9adb67-66bd-4c28-8319-44ae097ae1fe,9f9adb67-66bd-4c28-8319-44ae097ae1fe,0,1,0bae3704-b370-48be-b094-f18a2e62ad1b,0bae3704-b370-48be-b094-f18a2e62ad1b,0,1,e097bf94-9235-4a27-b0eb-d6387d22cd62,e097bf94-9235-4a27-b0eb-d6387d22cd62,0,1,eccded1c-f3ca-40d3-a8cd-71947bfed7b8,eccded1c-f3ca-40d3-a8cd-71947bfed7b8,0,1,4d243f2b-14d9-4e96-9707-4ead5d12e0a2,4d243f2b-14d9-4e96-9707-4ead5d12e0a2,0,1,8d2bfd40-f185-4eab-b374-872d49310eb2,8d2bfd40-f185-4eab-b374-872d49310eb2,0,1,523de426-e5a6-49e0-8144-c637f80d8ddd,523de426-e5a6-49e0-8144-c637f80d8ddd,0,1,09256328-6205-4b04-b908-3287ae8ded75,09256328-6205-4b04-b908-3287ae8ded75,0,1,05a6e161-9791-4c5b-8753-bd6370cc4cc9,05a6e161-9791-4c5b-8753-bd6370cc4cc9,0,1,6362facc-bf95-4adf-8ee7-c65f90972a1c,6362facc-bf95-4adf-8ee7-c65f90972a1c,0,1,08dbba81-68fb-49ef-8aac-9631fcfa87c6,08dbba81-68fb-49ef-8aac-9631fcfa87c6,0,1,dd7191b6-cbc0-4b0b-a51a-c27a1e1720fa,dd7191b6-cbc0-4b0b-a51a-c27a1e1720fa,0,1,8170a27d-45e9-48b1-860b-c2d9cc5961cd,8170a27d-45e9-48b1-860b-c2d9cc5961cd,0,1,f1c08fed-f3db-4f72-8a8e-7c626b8cc130,f1c08fed-f3db-4f72-8a8e-7c626b8cc130,0,1,e8c3b796-bfd8-4108-ab5f-d0f21b7bd9a6,e8c3b796-bfd8-4108-ab5f-d0f21b7bd9a6,0,1,f41d01ec-983a-4b39-9c11-a6d25d08df4f,f41d01ec-983a-4b39-9c11-a6d25d08df4f,0,1,3247e64e-b57e-4c33-8086-7ab93c5b6371,3247e64e-b57e-4c33-8086-7ab93c5b6371,0,1,e5dca369-dc9a-4332-a509-f734b8787e13,e5dca369-dc9a-4332-a509-f734b8787e13,0,1,722af623-156c-4e63-8b2a-93da760f1559,722af623-156c-4e63-8b2a-93da760f1559,0,1,5ff23123-450c-40ae-9b79-c540da53e2a0,5ff23123-450c-40ae-9b79-c540da53e2a0,0,1,639339a1-7de5-4b05-adf3-f60e7edd922c,639339a1-7de5-4b05-adf3-f60e7edd922c,0,1,dea9af9d-13c0-40d4-a9b0-1908e0a58795,dea9af9d-13c0-40d4-a9b0-1908e0a58795,0,1,9e9b8c05-787a-43c0-891d-3d9ad7e4976f,9e9b8c05-787a-43c0-891d-3d9ad7e4976f,0,1,1abeb10b-0558-4478-8f51-d0964ba3c274,1abeb10b-0558-4478-8f51-d0964ba3c274,0,1,38325a66-588a-4db0-8e0c-21d239408369,38325a66-588a-4db0-8e0c-21d239408369,0,1,7c27e885-33fd-4da2-a60d-50336c0189b0,7c27e885-33fd-4da2-a60d-50336c0189b0,0,1,0e1a45b0-d95d-415f-b954-5689610aa393,0e1a45b0-d95d-415f-b954-5689610aa393,0,1,4736b3d3-f696-4bdd-b0e3-0884ea88f623,4736b3d3-f696-4bdd-b0e3-0884ea88f623,0,1,4b849c66-6a36-4efd-815e-af4467c6f064,4b849c66-6a36-4efd-815e-af4467c6f064,0,1,f6939587-ff87-4eca-ae52-10e1bd2abfce,f6939587-ff87-4eca-ae52-10e1bd2abfce,0,1,a8e4d97f-e2da-4aa8-a221-3cbcc135f403,a8e4d97f-e2da-4aa8-a221-3cbcc135f403,0,1,f2b0eab2-e34b-42f8-9b24-5596b4c17d7f,f2b0eab2-e34b-42f8-9b24-5596b4c17d7f,0,1,3cb575a9-dc82-45e0-81f0-d651e12246da,3cb575a9-dc82-45e0-81f0-d651e12246da,0,1,01a73950-3e8f-4f56-903f-af0d9574e72e,01a73950-3e8f-4f56-903f-af0d9574e72e,0,1,14bd0844-c829-4325-aa7f-0f417bf955dc,14bd0844-c829-4325-aa7f-0f417bf955dc,0,1,7f1cd658-ca10-49c6-80ef-b8956f3269ea,7f1cd658-ca10-49c6-80ef-b8956f3269ea,0,1,b0d9086f-cef7-47a8-ad62-d85fea28ebda,b0d9086f-cef7-47a8-ad62-d85fea28ebda,0,1,49c010fc-f5cc-45f4-ba46-132e7661c3dd,49c010fc-f5cc-45f4-ba46-132e7661c3dd,0,1,3f3b592d-ca61-40c7-be1f-e5d3224a1eb3,3f3b592d-ca61-40c7-be1f-e5d3224a1eb3,0,1,2c02a558-8d12-44cf-be6b-9c399b9032e5,2c02a558-8d12-44cf-be6b-9c399b9032e5,0,1,d94d4931-7c81-4ee8-93ea-b2c54b152fa5,d94d4931-7c81-4ee8-93ea-b2c54b152fa5,0,1,36554213-9af4-4fec-8944-35f50b306eda,36554213-9af4-4fec-8944-35f50b306eda,0,1,c770bdd5-c7c0-4751-b31d-46c0ea1f49b7,c770bdd5-c7c0-4751-b31d-46c0ea1f49b7,0,1,6afcc089-7f15-42e8-97b5-6aad6cf2e6f9,6afcc089-7f15-42e8-97b5-6aad6cf2e6f9,0,1,cce4c615-dc29-42b3-9d3d-b277dde4a2e4,cce4c615-dc29-42b3-9d3d-b277dde4a2e4,0,1,9c267aa6-5f23-49f6-868a-3324ef2845ff,9c267aa6-5f23-49f6-868a-3324ef2845ff,0,1,495eeeee-d7bf-4063-99e2-86daa066451a,495eeeee-d7bf-4063-99e2-86daa066451a,0,1,b6184698-79e4-4c19-9440-092ccd9dabf8,b6184698-79e4-4c19-9440-092ccd9dabf8,0,1,7d01fc0c-378e-421d-ab70-6a418eed5941,7d01fc0c-378e-421d-ab70-6a418eed5941,0,1,6eeb4867-bf9d-48dc-b96b-934a0c293010,6eeb4867-bf9d-48dc-b96b-934a0c293010,0,1,c7f817ee-9f6a-454c-95a0-b279fd08055e,c7f817ee-9f6a-454c-95a0-b279fd08055e,0,1,e1803e54-ec5e-4a82-8097-5e2331820991,e1803e54-ec5e-4a82-8097-5e2331820991,0,1,259ede1f-05d3-4ece-8994-0ae3b2e89f49,259ede1f-05d3-4ece-8994-0ae3b2e89f49,0,1,f69ec1f9-826e-4eb4-b52c-3f6a3dfc3361,f69ec1f9-826e-4eb4-b52c-3f6a3dfc3361,0,1,4cbb0b91-dbdd-472f-93c5-061076b6a8d3,4cbb0b91-dbdd-472f-93c5-061076b6a8d3,0,1,8506dbe9-7066-444b-83b6-fb2d71a336e7,8506dbe9-7066-444b-83b6-fb2d71a336e7,0,1,240b4df5-0d75-4e5a-9ae8-d0bc7cc51722,240b4df5-0d75-4e5a-9ae8-d0bc7cc51722,0,1,6686d828-3129-4d44-a8a2-a64657d424cb,6686d828-3129-4d44-a8a2-a64657d424cb,0,1,90433152-f389-4d45-8ccc-3eb6c7a7e1f0,90433152-f389-4d45-8ccc-3eb6c7a7e1f0,0,1,ce235ab9-1dec-459a-9fec-498c262ece56,ce235ab9-1dec-459a-9fec-498c262ece56,0,1,9ec53d1a-ed7a-41e8-b5d0-6c2181fd63a5,9ec53d1a-ed7a-41e8-b5d0-6c2181fd63a5,0,1,39355e82-30a6-431e-9697-e2c42e82de83,39355e82-30a6-431e-9697-e2c42e82de83,0,1,a9ae364f-b668-4fb4-b976-f227951ffb6b,a9ae364f-b668-4fb4-b976-f227951ffb6b,0,1,edc01b03-8b01-4551-939a-f7e257892040,edc01b03-8b01-4551-939a-f7e257892040,0,1,15d09274-9508-4f64-9ea3-678c5aa50f0f,15d09274-9508-4f64-9ea3-678c5aa50f0f,0,1,4debe032-12e4-4777-b2fc-70b150f2aad1,4debe032-12e4-4777-b2fc-70b150f2aad1,0,1,37558fa2-0833-46d6-9e4f-63d4a3136870,37558fa2-0833-46d6-9e4f-63d4a3136870,0,1,d92cb614-ed09-47db-b70b-d3e533c44c6a,d92cb614-ed09-47db-b70b-d3e533c44c6a,0,1,e660c8bf-af5f-4525-a56e-68925d2b96fa,e660c8bf-af5f-4525-a56e-68925d2b96fa,0,1,1681dd7a-de80-4b8d-9657-c9702a19d653,1681dd7a-de80-4b8d-9657-c9702a19d653,0,1,10d796e9-a3d4-4ef0-87d5-8315aa12f1c8,10d796e9-a3d4-4ef0-87d5-8315aa12f1c8,0,1,9f593f27-8009-40c0-94d6-53f177ce55f4,9f593f27-8009-40c0-94d6-53f177ce55f4,0,1,38637f61-399a-4966-9e64-4751aecffa31,38637f61-399a-4966-9e64-4751aecffa31,0,1,fdb5b235-1978-4c2a-a03f-02341df00c3c,fdb5b235-1978-4c2a-a03f-02341df00c3c,0,1,0f38a18b-a36c-45fe-86c1-396634aaa5df,0f38a18b-a36c-45fe-86c1-396634aaa5df,0,1,f2b7b8d0-c0f7-46ba-907a-f8dfa76fc2da,f2b7b8d0-c0f7-46ba-907a-f8dfa76fc2da,0,1,a81c783d-2dea-4dde-9ca1-7b23d609eb22,a81c783d-2dea-4dde-9ca1-7b23d609eb22,0,1,137ec4ee-5053-47a7-8f5d-f6e63174608f,137ec4ee-5053-47a7-8f5d-f6e63174608f,0,1,820bb4b4-895b-4ccf-a350-2545bf8a2f7e,820bb4b4-895b-4ccf-a350-2545bf8a2f7e,0,1,530a3164-4ef1-4b3b-8269-13764ef4bf15,530a3164-4ef1-4b3b-8269-13764ef4bf15,0,1,6df2bb92-558c-4453-9de4-e4176e8f93dc,6df2bb92-558c-4453-9de4-e4176e8f93dc,0,1,0ce4c8a4-b20b-4550-bee3-f677e9ec64e9,0ce4c8a4-b20b-4550-bee3-f677e9ec64e9,0,1,30d5c2a6-b3cf-4ed5-ba75-850bcae932d1,30d5c2a6-b3cf-4ed5-ba75-850bcae932d1,0,1,0bf5e9c1-905a-4202-8b96-ed831b41be4b,0bf5e9c1-905a-4202-8b96-ed831b41be4b,0,1,e92ae368-0d7c-4fb7-b6d0-5ab63dc95a6a,e92ae368-0d7c-4fb7-b6d0-5ab63dc95a6a,0,1,f30c9c4b-aa6c-4b15-9ac7-888c0c0cabd9,f30c9c4b-aa6c-4b15-9ac7-888c0c0cabd9,0,1,be15e947-f671-4848-ada1-51239af73615,be15e947-f671-4848-ada1-51239af73615,0,1,d3e0dd8f-886a-4441-8f05-fd629da80f07,d3e0dd8f-886a-4441-8f05-fd629da80f07,0,1,6417d7c8-6436-4907-98eb-44cd7638f3f1,6417d7c8-6436-4907-98eb-44cd7638f3f1,0,1,ba49877b-6e30-4177-a67c-00e65aa498fb,ba49877b-6e30-4177-a67c-00e65aa498fb,0,1,25b39aeb-94c3-4199-9d56-5bd87e325bf2,25b39aeb-94c3-4199-9d56-5bd87e325bf2,0,1,b0b63551-4e83-4201-af9a-b4ab150c43a5,b0b63551-4e83-4201-af9a-b4ab150c43a5,0,1,2bd80198-4739-4e8f-9af1-40addc91a05b,2bd80198-4739-4e8f-9af1-40addc91a05b,0,1,572019eb-ffc4-4cfd-b4ba-c09267900c6c,572019eb-ffc4-4cfd-b4ba-c09267900c6c,0,1,bb7fad68-32d3-4e6a-be62-2c4c34c94737,bb7fad68-32d3-4e6a-be62-2c4c34c94737,0,1,24a7de1c-1c1f-4987-91ff-02f78f15dd9e,24a7de1c-1c1f-4987-91ff-02f78f15dd9e,0,1,33c66a15-e48e-406a-a77c-02af72ae96d5,33c66a15-e48e-406a-a77c-02af72ae96d5,0,1,ebd3dcc2-1176-4ee0-b590-ee39f85fb55b,ebd3dcc2-1176-4ee0-b590-ee39f85fb55b,0,1,3b78a9d0-7382-4115-a7dc-d06c9a1962d1,3b78a9d0-7382-4115-a7dc-d06c9a1962d1,0,1,9935d602-668e-4df9-a338-0f542def878b,9935d602-668e-4df9-a338-0f542def878b,0,1,459ed297-0c0d-4bdb-90a3-da387868f040,459ed297-0c0d-4bdb-90a3-da387868f040,0,1,ccb5b9a7-1a10-4803-b455-0350afe4b584,ccb5b9a7-1a10-4803-b455-0350afe4b584,0,1,ebce49ef-755a-4ace-aeb1-b99db2a8bf6c,ebce49ef-755a-4ace-aeb1-b99db2a8bf6c,0,1,0cd18f4c-aeb9-456b-9dcd-9649d1dd486b,0cd18f4c-aeb9-456b-9dcd-9649d1dd486b,0,1,ba5e7c41-0442-4f74-ba41-631d864eafb4,ba5e7c41-0442-4f74-ba41-631d864eafb4,0,1,c86aa97a-5898-4cb2-ae62-598bddf8e99f,c86aa97a-5898-4cb2-ae62-598bddf8e99f,0,1,d3c9b925-6b74-42db-8b21-ab21d24797d1,d3c9b925-6b74-42db-8b21-ab21d24797d1,0,1,4d348ec3-9de8-4f5b-960c-4b507d0fd7ce,4d348ec3-9de8-4f5b-960c-4b507d0fd7ce,0,1,39261a2d-7c46-40b1-9f8f-02d970aa04bc,39261a2d-7c46-40b1-9f8f-02d970aa04bc,0,1,3a07e5a5-2ab1-43ef-b97f-d45cd7775d67,3a07e5a5-2ab1-43ef-b97f-d45cd7775d67,0,1,124a516f-cdab-49ce-95d1-359921140342,124a516f-cdab-49ce-95d1-359921140342,0,1,e4294611-a770-4e67-9578-a1f370879476,e4294611-a770-4e67-9578-a1f370879476,0,1,c5033dd2-0911-4124-8688-dc9dabf3155f,c5033dd2-0911-4124-8688-dc9dabf3155f,0,1,274357df-cb5c-407d-ae72-58046c310db2,274357df-cb5c-407d-ae72-58046c310db2,0,1,5467001e-d025-4669-b16e-26381ac4403f,5467001e-d025-4669-b16e-26381ac4403f,0,1,21f6544a-9227-4b31-bbf2-293b946cac9d,21f6544a-9227-4b31-bbf2-293b946cac9d,0,1,2cfea4b1-0569-4832-b712-0d8d201580d5,2cfea4b1-0569-4832-b712-0d8d201580d5,0,1,97053b27-9c6e-4e17-a27d-48d7cbb80903,97053b27-9c6e-4e17-a27d-48d7cbb80903,0,1,87442857-4ef7-41c2-9f86-b8ed94bc9d40,87442857-4ef7-41c2-9f86-b8ed94bc9d40,0,1,32068cda-69d0-470b-9e36-b125ec112c27,32068cda-69d0-470b-9e36-b125ec112c27,0,1,9b0bf652-b174-4d27-93c5-15dd656702b6,9b0bf652-b174-4d27-93c5-15dd656702b6,0,1,4012cde7-9fb5-4ade-b5f7-2d791e5bce36,4012cde7-9fb5-4ade-b5f7-2d791e5bce36,0,1,9a5fd73f-894f-4611-9e2e-26d8bf39466d,9a5fd73f-894f-4611-9e2e-26d8bf39466d,0,1,7346a13a-5b14-4c42-be97-2f375c087dae,7346a13a-5b14-4c42-be97-2f375c087dae,0,1,2b7cd37f-f6ec-476e-8f8e-e3d0cb946075,2b7cd37f-f6ec-476e-8f8e-e3d0cb946075,0,1,d3ddb39f-d418-4884-a194-6a5049a2ba26,d3ddb39f-d418-4884-a194-6a5049a2ba26,0,1,7a15a2b5-c5a0-451d-b374-bb6d73bc7d51,7a15a2b5-c5a0-451d-b374-bb6d73bc7d51,0,1,08bae66f-fb39-478b-9369-fe7ceb73931a,08bae66f-fb39-478b-9369-fe7ceb73931a,0,1,3d7d9ed9-c273-44db-86b6-989d84b056fd,3d7d9ed9-c273-44db-86b6-989d84b056fd,0,1,1e5eea45-0f8a-4962-bb6e-f7a7b901e0a4,1e5eea45-0f8a-4962-bb6e-f7a7b901e0a4,0,1,80cc5484-aa21-4eb4-8272-b089d2b013e9,80cc5484-aa21-4eb4-8272-b089d2b013e9,0,1,5a39f0b3-63bb-44e2-a8ad-bd99fe8162e9,5a39f0b3-63bb-44e2-a8ad-bd99fe8162e9,0,1,35e9d241-f7db-40cb-aab9-484fa8fb1818,35e9d241-f7db-40cb-aab9-484fa8fb1818,0,1,7aacd8a6-8564-4114-82b7-00a922756a91,7aacd8a6-8564-4114-82b7-00a922756a91,0,1,d3d426d5-e95b-4afa-8c71-2f593f1276cf,d3d426d5-e95b-4afa-8c71-2f593f1276cf,0,1,67365c7c-c40e-4d2f-bbca-b314c1868ab7,67365c7c-c40e-4d2f-bbca-b314c1868ab7,0,1,93566e25-e199-4300-a692-cf5886139963,93566e25-e199-4300-a692-cf5886139963,0,1,210f85b1-393b-4b5c-b11e-cfd18888204a,210f85b1-393b-4b5c-b11e-cfd18888204a,0,1,17190e81-4d85-4351-97cf-508326aef5de,17190e81-4d85-4351-97cf-508326aef5de,0,1,7c0eda05-7eb2-4f42-b229-3e5a4f2a5131,7c0eda05-7eb2-4f42-b229-3e5a4f2a5131,0,1,f7e6ef78-6e28-4108-b2b8-9797f0a4f5e9,f7e6ef78-6e28-4108-b2b8-9797f0a4f5e9,0,1,2ef3a2b4-e274-45a3-acbf-618498dc5462,2ef3a2b4-e274-45a3-acbf-618498dc5462,0,1,6caf8c52-a859-41fe-b9b3-6d91ec018e0b,6caf8c52-a859-41fe-b9b3-6d91ec018e0b,0,1,1b03c1a9-c510-46e4-80b0-0c157bfa1adf,1b03c1a9-c510-46e4-80b0-0c157bfa1adf,0,1,fb7a5957-63ee-411a-b646-a2fc8c52f446,fb7a5957-63ee-411a-b646-a2fc8c52f446,0,1,b6d02a0a-2836-4b9a-b26a-2ebc19542bcb,b6d02a0a-2836-4b9a-b26a-2ebc19542bcb,0,1,3b34aff0-8d90-4616-a9a4-ea55afcd01a7,3b34aff0-8d90-4616-a9a4-ea55afcd01a7,0,1,1c4a606d-835e-45d9-a176-b7d7031c4c85,1c4a606d-835e-45d9-a176-b7d7031c4c85,0,1,06e31fb0-df76-433f-a5bb-c1186aca5c3e,06e31fb0-df76-433f-a5bb-c1186aca5c3e,0,1,1aa54e85-ecac-4c4f-9b08-5e4ee271ceb5,1aa54e85-ecac-4c4f-9b08-5e4ee271ceb5,0,1,b7d1aa26-1af7-4909-aba4-1b67debae031,b7d1aa26-1af7-4909-aba4-1b67debae031,0,1,da3d8fa8-50b8-4847-bd9f-765a0f1e628b,da3d8fa8-50b8-4847-bd9f-765a0f1e628b,0,1,efb0c9bd-f509-4bdd-8793-f5aa9e0a615b,efb0c9bd-f509-4bdd-8793-f5aa9e0a615b,0,1,66c8b395-0252-4093-8cfc-cf5791f6f45b,66c8b395-0252-4093-8cfc-cf5791f6f45b,0,1,0a3a0f21-9433-4c45-84e0-7309c43c21e7,0a3a0f21-9433-4c45-84e0-7309c43c21e7,0,1,a4e56049-4de9-40a3-8197-a5c84a11f516,a4e56049-4de9-40a3-8197-a5c84a11f516,0,1,339c9220-fd5b-45d3-b300-cdcc8788f87e,339c9220-fd5b-45d3-b300-cdcc8788f87e,0,1,02d7d401-3c0c-4fd0-b096-1f73b6ec14c3,02d7d401-3c0c-4fd0-b096-1f73b6ec14c3,0,1,9042a6de-5048-432d-a448-7e21f2d1d24a,9042a6de-5048-432d-a448-7e21f2d1d24a,0,1,350d46bf-114e-48e7-90c6-6708d949f20d,350d46bf-114e-48e7-90c6-6708d949f20d,0,1,d047caa8-7bcf-41ac-a18e-97877d6e0a2a,d047caa8-7bcf-41ac-a18e-97877d6e0a2a,0,1,aac20ff3-5873-432e-b763-14411e623d41,aac20ff3-5873-432e-b763-14411e623d41,0,1,fbc4df3e-c235-4197-8c1f-a5e39ac63a8c,fbc4df3e-c235-4197-8c1f-a5e39ac63a8c,0,1,6df44466-8750-481a-9baf-c924f0d45353,6df44466-8750-481a-9baf-c924f0d45353,0,1,110121eb-a0eb-4662-8911-3dcc3d341a73,110121eb-a0eb-4662-8911-3dcc3d341a73,0,1,f8980c18-6b9c-4e45-919a-22e976d2a846,f8980c18-6b9c-4e45-919a-22e976d2a846,0,1,c946efb7-c67e-49c1-bf56-d3c2d7220acd,c946efb7-c67e-49c1-bf56-d3c2d7220acd,0,1,7ed6bd83-b61d-4db4-8549-acacbdda6ca2,7ed6bd83-b61d-4db4-8549-acacbdda6ca2,0,1,6b7c9f74-f2b6-463e-acb9-9f82901986cf,6b7c9f74-f2b6-463e-acb9-9f82901986cf,0,1,fc4c1d64-132b-4687-a37d-05000fdb4ba5,fc4c1d64-132b-4687-a37d-05000fdb4ba5,0,1,528777cd-090b-4b70-82f5-56def98c5893,528777cd-090b-4b70-82f5-56def98c5893,0,1,49dbe467-8832-4ede-9a05-494248619aeb,49dbe467-8832-4ede-9a05-494248619aeb,0,1,460ed9ca-10c2-491c-a641-b92ffc2a8e7c,460ed9ca-10c2-491c-a641-b92ffc2a8e7c,0,1,bd5fadd3-9264-4c3b-9bd5-51e91847a6fb,bd5fadd3-9264-4c3b-9bd5-51e91847a6fb,0,1,09c73108-8528-4970-9b7f-fff9eda7816a,09c73108-8528-4970-9b7f-fff9eda7816a,0,1,40aa936e-cb1c-4ae9-85f1-6d930a5815cc,40aa936e-cb1c-4ae9-85f1-6d930a5815cc,0,1,f568245a-d158-45dc-af92-2d411f12db7b,f568245a-d158-45dc-af92-2d411f12db7b,0,1,0f17cdac-aa17-45e6-b3d0-220b13345390,0f17cdac-aa17-45e6-b3d0-220b13345390,0,1,c675db75-d0c3-4026-b97c-6b23ecbb336a,c675db75-d0c3-4026-b97c-6b23ecbb336a,0,1,469f67fa-98b0-44b0-abd4-cae136c02834,469f67fa-98b0-44b0-abd4-cae136c02834,0,1,16a18458-999c-420e-80df-8fc10855746c,16a18458-999c-420e-80df-8fc10855746c,0,1,b794f222-0fde-439f-97a3-0da74075b415,b794f222-0fde-439f-97a3-0da74075b415,0,1,3a716aad-9b2c-48a7-b802-80732066391b,3a716aad-9b2c-48a7-b802-80732066391b,0,1,480d959f-aac8-4241-875f-78e1c1f32621,480d959f-aac8-4241-875f-78e1c1f32621,0,1,496e5de8-d75c-4536-9993-75374f070b40,496e5de8-d75c-4536-9993-75374f070b40,0,1,b4e610ba-c9c8-4b25-903b-e567dcbc2556,b4e610ba-c9c8-4b25-903b-e567dcbc2556,0,1,48febdbd-a085-4113-8511-ed7ff6be7d3c,48febdbd-a085-4113-8511-ed7ff6be7d3c,0,1,49413232-c0c3-4983-9d10-291a0399281b,49413232-c0c3-4983-9d10-291a0399281b,0,1,032bb782-96a7-4c1b-8b8f-eb4e18b555b7,032bb782-96a7-4c1b-8b8f-eb4e18b555b7,0,1,b9b076bb-38ab-4a94-8226-41a4d4d7432c,b9b076bb-38ab-4a94-8226-41a4d4d7432c,0,1,e12da8db-4037-473e-ba2b-d0ceb4534dcb,e12da8db-4037-473e-ba2b-d0ceb4534dcb,0,1,789514e5-8ea3-4a5e-88c5-ed89c4135866,789514e5-8ea3-4a5e-88c5-ed89c4135866,0,1,a16768ff-6137-43d8-8784-4805ed83632a,a16768ff-6137-43d8-8784-4805ed83632a,0,1,61971286-9f94-4a27-aa34-e10848adb70a,61971286-9f94-4a27-aa34-e10848adb70a,0,1,1e75d143-3452-496e-a137-6d7f4c4ed019,1e75d143-3452-496e-a137-6d7f4c4ed019,0,1,e0619d14-c658-4eb5-841a-3a029de28be4,e0619d14-c658-4eb5-841a-3a029de28be4,0,1,99a3b660-7875-47f7-9c6c-c552e5673deb,99a3b660-7875-47f7-9c6c-c552e5673deb,0,1,2bdcf3a5-c8e1-492c-afee-f9db68e2fbb6,2bdcf3a5-c8e1-492c-afee-f9db68e2fbb6,0,1,41cbf934-ea54-41df-abf0-09f319d2e67a,41cbf934-ea54-41df-abf0-09f319d2e67a,0,1,47246084-a5f8-4d0f-b4e2-204c1b97483a,47246084-a5f8-4d0f-b4e2-204c1b97483a,0,1,e58233ec-6cfc-4a8b-9929-689fa69cdb07,e58233ec-6cfc-4a8b-9929-689fa69cdb07,0,1,3291a891-a47c-43ca-b088-aecd3867d38c,3291a891-a47c-43ca-b088-aecd3867d38c,0,1,56cde2b4-00f2-49ba-b407-16e241c17fd2,56cde2b4-00f2-49ba-b407-16e241c17fd2,0,1,bd84fb2b-4c52-4e2f-a8c5-f289b8336145,bd84fb2b-4c52-4e2f-a8c5-f289b8336145,0,1,219ed110-f2a0-41c1-ac5a-02301b248c54,219ed110-f2a0-41c1-ac5a-02301b248c54,0,1,1c722dfd-2b07-4985-9188-17353de24771,1c722dfd-2b07-4985-9188-17353de24771,0,1,1a630496-2cdd-4c89-a1aa-ed20545ad133,1a630496-2cdd-4c89-a1aa-ed20545ad133,0,1,b0dd02ee-ea6a-43f2-baa2-abac0a1ab4bb,b0dd02ee-ea6a-43f2-baa2-abac0a1ab4bb,0,1,b19cea0e-e57a-4969-8daf-f48d3d16705f,b19cea0e-e57a-4969-8daf-f48d3d16705f,0,1,d4059340-3361-4baa-ae48-ecbfb9800a2e,d4059340-3361-4baa-ae48-ecbfb9800a2e,0,1,f78f6c43-dd90-4117-acf7-ed5b951cb964,f78f6c43-dd90-4117-acf7-ed5b951cb964,0,1,8eebd519-4989-4784-82b8-39d77eebfb17,8eebd519-4989-4784-82b8-39d77eebfb17,0,1,0a2cb6e3-d9fa-4881-b136-7b6db9efca07,0a2cb6e3-d9fa-4881-b136-7b6db9efca07,0,1,c1561ed9-2fbf-4c12-a484-07f8adbe8fa3,c1561ed9-2fbf-4c12-a484-07f8adbe8fa3,0,1,4527877b-5723-4aa5-8705-98174ac9c337,4527877b-5723-4aa5-8705-98174ac9c337,0,1,d6b21e7b-df57-4280-8c95-c269b5316018,d6b21e7b-df57-4280-8c95-c269b5316018,0,1,808c468b-6322-428d-ac6a-ccf2228b05b6,808c468b-6322-428d-ac6a-ccf2228b05b6,0,1,13664bb2-738f-4d18-b382-a7bcf8105a5a,13664bb2-738f-4d18-b382-a7bcf8105a5a,0,1,f3f56abe-9248-4555-bf99-29560eb4f9ee,f3f56abe-9248-4555-bf99-29560eb4f9ee,0,1,0dbd5d55-a85f-4c7e-ac31-7ba4ab7cc371,0dbd5d55-a85f-4c7e-ac31-7ba4ab7cc371,0,1,dd9d09ef-3b4b-4bb5-9408-9c4080049bb3,dd9d09ef-3b4b-4bb5-9408-9c4080049bb3,0,1,3eb43a06-b32d-4904-8489-6264d0207623,3eb43a06-b32d-4904-8489-6264d0207623,0,1,a18098cf-5a61-46b5-bd55-cc61d15aa6bc,a18098cf-5a61-46b5-bd55-cc61d15aa6bc,0,1,18615fe1-cfee-4888-9c09-88d1c5db39eb,18615fe1-cfee-4888-9c09-88d1c5db39eb,0,1,63e363fa-8b0c-4d48-ab1b-9c953c5ed4c0,63e363fa-8b0c-4d48-ab1b-9c953c5ed4c0,0,1,087c83c0-75e7-476b-b7c6-5be55498a190,087c83c0-75e7-476b-b7c6-5be55498a190,0,1,ec5e5413-9e77-4929-83b8-6fee70688b28,ec5e5413-9e77-4929-83b8-6fee70688b28,0,1,59cd8e3f-ecf3-4e1d-bd98-41551d5d6f68,59cd8e3f-ecf3-4e1d-bd98-41551d5d6f68,0,1,8390c864-2b84-4c45-8583-cb4a4ab49168,8390c864-2b84-4c45-8583-cb4a4ab49168,0,1,1b2fefca-fef5-4319-90cc-325444cb63a6,1b2fefca-fef5-4319-90cc-325444cb63a6,0,1,34a128be-8fbb-4dd8-ac23-9f35041feb63,34a128be-8fbb-4dd8-ac23-9f35041feb63,0,1,baa31006-e0d6-496e-a60e-27b3dfd19397,baa31006-e0d6-496e-a60e-27b3dfd19397,0,1,3007d8ff-3942-45ed-bac5-8a6c40ca060c,3007d8ff-3942-45ed-bac5-8a6c40ca060c,0,1,8bfe1474-fd12-4744-a9ab-3383bfe766b3,8bfe1474-fd12-4744-a9ab-3383bfe766b3,0,1,3af97375-f776-4129-9521-b8d65d795db6,3af97375-f776-4129-9521-b8d65d795db6,0,1,0e98801b-a45b-44cb-a341-7e43d723f6ed,0e98801b-a45b-44cb-a341-7e43d723f6ed,0,1,5b71cd3b-d5b8-4632-9678-0ab1e1d2ea91,5b71cd3b-d5b8-4632-9678-0ab1e1d2ea91,0,1,103ac72d-c386-40ea-89d4-35798d064f1a,103ac72d-c386-40ea-89d4-35798d064f1a,0,1,645ceb40-1e9f-4a67-aa7f-b9002fa066b3,645ceb40-1e9f-4a67-aa7f-b9002fa066b3,0,1,d1fe15e9-8e5c-4819-85cd-24ab31409437,d1fe15e9-8e5c-4819-85cd-24ab31409437,0,1,c8c5bfe9-ead5-4e79-9fd5-60ad275faa1e,c8c5bfe9-ead5-4e79-9fd5-60ad275faa1e,0,1,8f9826b6-890e-4ba3-a1f2-bc9ebb3238dd,8f9826b6-890e-4ba3-a1f2-bc9ebb3238dd,0,1,74f68bda-17b1-4b3c-aa64-b1014300f9b5,74f68bda-17b1-4b3c-aa64-b1014300f9b5,0,1,90a195b0-7f64-4ccb-986e-8c8c2cf12ccd,90a195b0-7f64-4ccb-986e-8c8c2cf12ccd,0,1,9f9d1f8c-7ff9-420f-a426-48f33493d9f2,9f9d1f8c-7ff9-420f-a426-48f33493d9f2,0,1,ab7bc0bc-b4b8-4a4a-aecc-1cbe14fd4975,ab7bc0bc-b4b8-4a4a-aecc-1cbe14fd4975,0,1,9f8d9594-674f-49ef-9fb8-bb64d5c40a37,9f8d9594-674f-49ef-9fb8-bb64d5c40a37,0,1,47ee7d38-9fa9-458d-abee-e11270f79494,47ee7d38-9fa9-458d-abee-e11270f79494,0,1,bb6b83ff-81f4-4c39-ad8e-8cda9ccd9cb9,bb6b83ff-81f4-4c39-ad8e-8cda9ccd9cb9,0,1,076daecf-8fcb-496b-9f13-c4faa3a8a722,076daecf-8fcb-496b-9f13-c4faa3a8a722,0,1,f1a8357b-7083-42b3-ab5d-36223a3dd2a4,f1a8357b-7083-42b3-ab5d-36223a3dd2a4,0,1,296d7725-bdd3-4210-9db9-31de5711ea9b,296d7725-bdd3-4210-9db9-31de5711ea9b,0,1,6ecc5bc2-20b3-46f3-8019-ae1e1f3de319,6ecc5bc2-20b3-46f3-8019-ae1e1f3de319,0,1,1d05f89a-23dd-4d30-8786-abe8a9a39a40,1d05f89a-23dd-4d30-8786-abe8a9a39a40,0,1,245c2c6c-7b7f-4381-9304-1d7287a215fa,245c2c6c-7b7f-4381-9304-1d7287a215fa,0,1,fd17bbe4-34d9-4832-8eea-8eeb82194e4c,fd17bbe4-34d9-4832-8eea-8eeb82194e4c,0,1,d4c72d7f-7e1f-473c-9a2b-fa675fc78731,d4c72d7f-7e1f-473c-9a2b-fa675fc78731,0,1,8bb5be12-98df-4a38-bffe-432fb13d8101,8bb5be12-98df-4a38-bffe-432fb13d8101,0,1,94209023-ce88-401c-9aff-526fb7e43709,94209023-ce88-401c-9aff-526fb7e43709,0,1,22b99094-b52a-4244-ae91-53848d82560b,22b99094-b52a-4244-ae91-53848d82560b,0,1,22c9e2fa-c1f0-41ec-b6f2-9d7357dd3479,22c9e2fa-c1f0-41ec-b6f2-9d7357dd3479,0,1,b0002134-d5c9-4508-9f0e-97f92461b590,b0002134-d5c9-4508-9f0e-97f92461b590,0,1,1506ec71-cb38-4831-a29d-dac2c4deddda,1506ec71-cb38-4831-a29d-dac2c4deddda,0,1,e05fd82b-b77b-4b7f-b300-43653017f341,e05fd82b-b77b-4b7f-b300-43653017f341,0,1,d3b5e5ee-2317-43b4-b669-3af2ce635cf3,d3b5e5ee-2317-43b4-b669-3af2ce635cf3,0,1,f15a0526-c207-42fe-aed9-438ae0c4a4b8,f15a0526-c207-42fe-aed9-438ae0c4a4b8,0,1,9d444a41-7190-48fb-9a4a-08f8e7bc32a3,9d444a41-7190-48fb-9a4a-08f8e7bc32a3,0,1,8583cab0-0620-4346-96e0-bcac40981b8a,8583cab0-0620-4346-96e0-bcac40981b8a,0,1,e1dfba26-c682-42a2-8e15-fe6f535c9ce1,e1dfba26-c682-42a2-8e15-fe6f535c9ce1,0,1,095990b1-187b-400c-941a-275f272239ca,095990b1-187b-400c-941a-275f272239ca,0,1,ba108470-350d-40c3-bb44-9852c2aa8c97,ba108470-350d-40c3-bb44-9852c2aa8c97,0,1,a37c33fa-64b0-4a1b-846a-0a236bad44f8,a37c33fa-64b0-4a1b-846a-0a236bad44f8,0,1,d8481ce1-7f64-47b0-8fc0-6642ae93aca1,d8481ce1-7f64-47b0-8fc0-6642ae93aca1,0,1,a50f4324-da44-449b-b500-74228b2aa7e0,a50f4324-da44-449b-b500-74228b2aa7e0,0,1,04236716-9c36-4a1d-b4fb-4b8c65644ab4,04236716-9c36-4a1d-b4fb-4b8c65644ab4,0,1,97276702-6686-4ac4-8360-d85369a08b20,97276702-6686-4ac4-8360-d85369a08b20,0,1,e5450ee7-e891-4f58-9a01-d2d81d5ddd6d,e5450ee7-e891-4f58-9a01-d2d81d5ddd6d,0,1,068883fe-d7ae-40e7-ad82-864867916daa,068883fe-d7ae-40e7-ad82-864867916daa,0,1,c1b02568-2095-4f83-8543-2402f67dbe3d,c1b02568-2095-4f83-8543-2402f67dbe3d,0,1,8b749b7a-5e68-4523-adc2-8b3c5ce9701c,8b749b7a-5e68-4523-adc2-8b3c5ce9701c,0,1,bf3c7edc-0791-459e-a7ac-b7e8d7ed97fe,bf3c7edc-0791-459e-a7ac-b7e8d7ed97fe,0,1,7dc6d13e-4edf-4e6a-9ee9-4b32ad889ecf,7dc6d13e-4edf-4e6a-9ee9-4b32ad889ecf,0,1,aecbd726-6952-49e6-b544-4c5cc764c24c,aecbd726-6952-49e6-b544-4c5cc764c24c,0,1,d335cfbf-bc78-4274-a178-10f60372474a,d335cfbf-bc78-4274-a178-10f60372474a,0,1,0f4411b3-addf-4fcf-8da8-c5140dea356c,0f4411b3-addf-4fcf-8da8-c5140dea356c,0,1,c501f9ab-d01b-4137-8cd0-e66103117c84,c501f9ab-d01b-4137-8cd0-e66103117c84,0,1,8d5d4e0f-b7b5-4cdc-aedc-571517fa101f,8d5d4e0f-b7b5-4cdc-aedc-571517fa101f,0,1,66e65355-1424-4c74-801c-faf5357257aa,66e65355-1424-4c74-801c-faf5357257aa,0,1,0a93187b-7ae4-4985-8089-3099dfec2b48,0a93187b-7ae4-4985-8089-3099dfec2b48,0,1,044458f3-ed9b-4afb-ae73-8f9162c032bf,044458f3-ed9b-4afb-ae73-8f9162c032bf,0,1,578f618e-5f4a-4e86-959d-39b59e973936,578f618e-5f4a-4e86-959d-39b59e973936,0,1,f74ede2e-2d28-4224-ba44-773eda7760a4,f74ede2e-2d28-4224-ba44-773eda7760a4,0,1,217df06a-1bdf-4394-b617-ed756ff17bc6,217df06a-1bdf-4394-b617-ed756ff17bc6,0,1,a1572e97-a487-497a-9062-49315e237e0f,a1572e97-a487-497a-9062-49315e237e0f,0,1,969cdcb8-0f2a-427f-93a0-e7ae38f465e8,969cdcb8-0f2a-427f-93a0-e7ae38f465e8,0,1,3c5d87a0-cfce-464a-b946-64c5a589a376,3c5d87a0-cfce-464a-b946-64c5a589a376,0,1,2d22c67d-4795-4a6b-bc81-a3ed1eb28367,2d22c67d-4795-4a6b-bc81-a3ed1eb28367,0,1,763de8d1-7f53-41b6-8d97-7da724e9f763,763de8d1-7f53-41b6-8d97-7da724e9f763,0,1,75592ed4-2aab-4dfc-ae7b-d93e2a98370f,75592ed4-2aab-4dfc-ae7b-d93e2a98370f,0,1,4ad59c75-cca4-4968-82e6-babd72d8b318,4ad59c75-cca4-4968-82e6-babd72d8b318,0,1,c248de15-63a2-48ec-8695-7a5213d4fc9b,c248de15-63a2-48ec-8695-7a5213d4fc9b,0,1,272ff0f9-7266-4c22-be12-fe62682b56a5,272ff0f9-7266-4c22-be12-fe62682b56a5,0,1,9f141dd5-d866-4c25-b58a-a7766a08b4e7,9f141dd5-d866-4c25-b58a-a7766a08b4e7,0,1,0570d846-889d-4cfc-98fb-a1ad0181597f,0570d846-889d-4cfc-98fb-a1ad0181597f,0,1,19e17c58-953f-4917-8b6a-c88808fcca36,19e17c58-953f-4917-8b6a-c88808fcca36,0,1,4804316d-3765-4a83-8438-10e8e82656db,4804316d-3765-4a83-8438-10e8e82656db,0,1,59458556-e343-4215-8e6c-69f924ec4183,59458556-e343-4215-8e6c-69f924ec4183,0,1,dd553dca-7eba-41bf-8939-2c61e170ff65,dd553dca-7eba-41bf-8939-2c61e170ff65,0,1,b4ecf3dc-a2aa-406e-a593-1700ea8746bc,b4ecf3dc-a2aa-406e-a593-1700ea8746bc,0,1,933d7ce7-ea82-4b26-8d1b-dc92cb5ac92d,933d7ce7-ea82-4b26-8d1b-dc92cb5ac92d,0,1,8099e978-28cc-4ade-ac5a-3785f3a45f70,8099e978-28cc-4ade-ac5a-3785f3a45f70,0,1,11eff613-8077-41fa-8cb8-5e8dc27d0e4f,11eff613-8077-41fa-8cb8-5e8dc27d0e4f,0,1,fe023ca5-f11a-4b98-99c1-363508e4ea4a,fe023ca5-f11a-4b98-99c1-363508e4ea4a,0,1,6f8d515e-13d9-45f8-9793-3757f5b85f81,6f8d515e-13d9-45f8-9793-3757f5b85f81,0,1,25ec541c-c437-4318-b2a8-5146df6ae080,25ec541c-c437-4318-b2a8-5146df6ae080,0,1,148754ed-3063-40a7-a3c3-8ad105552370,148754ed-3063-40a7-a3c3-8ad105552370,0,1,ab3f0862-c355-4fd7-a2a7-4eb8278de510,ab3f0862-c355-4fd7-a2a7-4eb8278de510,0,1,85bbfe20-a6a4-49ca-8f20-342f4cbe8258,85bbfe20-a6a4-49ca-8f20-342f4cbe8258,0,1,c12c3f3b-3a96-4e70-b131-8d7bd765095f,c12c3f3b-3a96-4e70-b131-8d7bd765095f,0,1,70ee4b32-80d1-4b79-a322-0433f1b8c7f1,70ee4b32-80d1-4b79-a322-0433f1b8c7f1,0,1,c563588c-346e-499e-ae33-9ff3cb62e658,c563588c-346e-499e-ae33-9ff3cb62e658,0,1,40dbc001-97b6-4188-8de9-3adac670bac4,40dbc001-97b6-4188-8de9-3adac670bac4,0,1,a4ed8b24-bd23-45a7-9f34-61b25b91d0c6,a4ed8b24-bd23-45a7-9f34-61b25b91d0c6,0,1,65efaa10-3239-4f0f-a08e-88c89d9d8d5a,65efaa10-3239-4f0f-a08e-88c89d9d8d5a,0,1,93aa5247-6823-4f70-9d47-e5a0f409828a,93aa5247-6823-4f70-9d47-e5a0f409828a,0,1,030c6a22-a3d5-4cf2-9f7b-dc4fe3732f83,030c6a22-a3d5-4cf2-9f7b-dc4fe3732f83,0,1,b19f1223-5ebe-4446-bacc-bc7d53486f2e,b19f1223-5ebe-4446-bacc-bc7d53486f2e,0,1,6ea7e8e9-0faa-43fd-b9c8-1a7b8f899d6d,6ea7e8e9-0faa-43fd-b9c8-1a7b8f899d6d,0,1,7be1decf-feb1-422b-a3f2-f60d08fdb0e6,7be1decf-feb1-422b-a3f2-f60d08fdb0e6,0,1,bf3167d6-3047-482a-b280-184f446ae7a3,bf3167d6-3047-482a-b280-184f446ae7a3,0,1,50c47c0a-a199-4020-9df4-91b17c159454,50c47c0a-a199-4020-9df4-91b17c159454,0,1,c1d449af-8a6e-4cb0-b2c9-50ea5405c44c,c1d449af-8a6e-4cb0-b2c9-50ea5405c44c,0,1,faecdc33-fed8-4b44-96f4-4215c26959b6,faecdc33-fed8-4b44-96f4-4215c26959b6,0,1,09c29992-47a8-4fca-bd95-e7dbc53e8c4c,09c29992-47a8-4fca-bd95-e7dbc53e8c4c,0,1,f07cf7bd-6f3f-426a-8b71-ba1dcb827654,f07cf7bd-6f3f-426a-8b71-ba1dcb827654,0,1,9df3792e-a4ee-4a2c-9296-c1384925521e,9df3792e-a4ee-4a2c-9296-c1384925521e,0,1,03d423db-f98a-468f-9040-5b76454e5a98,03d423db-f98a-468f-9040-5b76454e5a98,0,1,08f394f9-d254-4fe5-8651-a69c96de7a62,08f394f9-d254-4fe5-8651-a69c96de7a62,0,1,e90ec54b-8b86-43df-8c3c-18c6676bf3f1,e90ec54b-8b86-43df-8c3c-18c6676bf3f1,0,1,6aff6b2f-660b-4d75-9064-fed7a6b0feac,6aff6b2f-660b-4d75-9064-fed7a6b0feac,0,1,53502127-9f47-4e2e-b3ed-eb3c3aae1c50,53502127-9f47-4e2e-b3ed-eb3c3aae1c50,0,1,2fcdd0b5-b738-4e19-8bbf-13a72d7014ec,2fcdd0b5-b738-4e19-8bbf-13a72d7014ec,0,1,59dc7e8d-6f5c-4e1b-816e-5fc15c0e96e0,59dc7e8d-6f5c-4e1b-816e-5fc15c0e96e0,0,1,e60a9221-7676-456f-8a01-b317b03a278b,e60a9221-7676-456f-8a01-b317b03a278b,0,1,4e81ec90-f668-49ca-9193-22337bafb01b,4e81ec90-f668-49ca-9193-22337bafb01b,0,1,104c7c31-5bbd-4242-b29a-2c0d8b69a1b9,104c7c31-5bbd-4242-b29a-2c0d8b69a1b9,0,1,cd60adec-52d6-4fa8-85ca-26551196432c,cd60adec-52d6-4fa8-85ca-26551196432c,0,1,4dfbabd7-d5e5-4b2a-b8d1-752e416629a0,4dfbabd7-d5e5-4b2a-b8d1-752e416629a0,0,1,b71ddbdb-08bb-46be-a79d-319c4a557e76,b71ddbdb-08bb-46be-a79d-319c4a557e76,0,1,d3dfa867-3d52-4872-a69e-f27636abe1bd,d3dfa867-3d52-4872-a69e-f27636abe1bd,0,1,6952d1aa-7132-4e40-8542-f64a4dc1e029,6952d1aa-7132-4e40-8542-f64a4dc1e029,0,1,51a1bc4c-9139-42a4-92c3-f45c837cbdb9,51a1bc4c-9139-42a4-92c3-f45c837cbdb9,0,1,1621811b-dfd3-4c58-8e15-ced16690147a,1621811b-dfd3-4c58-8e15-ced16690147a,0,1,3f266e51-0476-4b7f-8d61-6f9f4456049d,3f266e51-0476-4b7f-8d61-6f9f4456049d,0,1,2b9ce591-ff13-4c2d-85c4-632a2609a211,2b9ce591-ff13-4c2d-85c4-632a2609a211,0,1,689ca0ec-61ce-4590-b73b-ac81e8f1d459,689ca0ec-61ce-4590-b73b-ac81e8f1d459,0,1,3ea1895f-66d0-4bbb-a66b-0c9d411a7c55,3ea1895f-66d0-4bbb-a66b-0c9d411a7c55,0,1,55ad36d7-399e-4b82-8d1c-d45bd890abfe,55ad36d7-399e-4b82-8d1c-d45bd890abfe,0,1,0f3b9012-7bf6-4451-b0c3-139d98d9c2c1,0f3b9012-7bf6-4451-b0c3-139d98d9c2c1,0,1,1b39a65f-5425-4bcb-85bd-1425274af8a8,1b39a65f-5425-4bcb-85bd-1425274af8a8,0,1,392a0618-a41a-4713-a561-f3a80b85abd8,392a0618-a41a-4713-a561-f3a80b85abd8,0,1,a453384d-658d-40f1-ac69-578aa3a24e39,a453384d-658d-40f1-ac69-578aa3a24e39,0,1,2215a441-b9b1-4e5c-8df3-e6cee9226c43,2215a441-b9b1-4e5c-8df3-e6cee9226c43,0,1,2a8d4908-ea0d-4837-be3f-bd78f6b61254,2a8d4908-ea0d-4837-be3f-bd78f6b61254,0,1,ec1deb79-7369-4b26-8e91-f51399e8052a,ec1deb79-7369-4b26-8e91-f51399e8052a,0,1,75dde4fb-3a1a-450c-95c2-c1f95a781db9,75dde4fb-3a1a-450c-95c2-c1f95a781db9,0,1,0ae3ac56-160a-417e-9952-719d02e7f089,0ae3ac56-160a-417e-9952-719d02e7f089,0,1,f5b3983d-d22d-44a8-9069-0a60d8b858bf,f5b3983d-d22d-44a8-9069-0a60d8b858bf,0,1,c66d0377-45bb-4ef0-bf9b-b44a9c510d38,c66d0377-45bb-4ef0-bf9b-b44a9c510d38,0,1,420748d8-4042-4e1e-aca1-ac0190cdf54e,420748d8-4042-4e1e-aca1-ac0190cdf54e,0,1,a64b15fa-fc34-43fe-a366-d27c0f1c3df2,a64b15fa-fc34-43fe-a366-d27c0f1c3df2,0,1,8b13e848-8fd3-4326-bd18-5a5b12ed3dc5,8b13e848-8fd3-4326-bd18-5a5b12ed3dc5,0,1,f8a456fa-a533-444c-a504-0e74306ada44,f8a456fa-a533-444c-a504-0e74306ada44,0,1,4751a91a-f211-4f66-8238-9bb5668cbc67,4751a91a-f211-4f66-8238-9bb5668cbc67,0,1,f1381abc-e09f-407d-b6b5-c59e7c9e2fd7,f1381abc-e09f-407d-b6b5-c59e7c9e2fd7,0,1,e6c871d6-e06f-420b-ae04-dbf735d3233d,e6c871d6-e06f-420b-ae04-dbf735d3233d,0,1,b9a6b053-2b93-4946-9531-040d3131dcc5,b9a6b053-2b93-4946-9531-040d3131dcc5,0,1,6287eded-23d8-4b04-8415-1d9afa17713b,6287eded-23d8-4b04-8415-1d9afa17713b,0,1,8ce3513d-d086-46f4-81c3-1761594a64c5,8ce3513d-d086-46f4-81c3-1761594a64c5,0,1,bb6e6574-4328-4cf5-a043-a7d8f6c81414,bb6e6574-4328-4cf5-a043-a7d8f6c81414,0,1,b46b5090-5eb1-4950-9031-8b43f611fa9c,b46b5090-5eb1-4950-9031-8b43f611fa9c,0,1,79cb147c-8c6b-4f6e-8d5d-dfa29a6e6e53,79cb147c-8c6b-4f6e-8d5d-dfa29a6e6e53,0,1,3d7908b1-bd82-475e-8488-fafcbe3458ee,3d7908b1-bd82-475e-8488-fafcbe3458ee,0,1,2ccbc9aa-52d3-4cf3-8e83-77aaef82a38d,2ccbc9aa-52d3-4cf3-8e83-77aaef82a38d,0,1,e9c632b0-7977-4e44-ac56-882617ad7cdc,e9c632b0-7977-4e44-ac56-882617ad7cdc,0,1,e84acba7-7e0f-43e8-a545-6e53d529d5d4,e84acba7-7e0f-43e8-a545-6e53d529d5d4,0,1,3b089d90-7ece-4b74-a4dc-e436d9d31b3b,3b089d90-7ece-4b74-a4dc-e436d9d31b3b,0,1,6086d53f-f1b2-4126-ab46-64705fe63b87,6086d53f-f1b2-4126-ab46-64705fe63b87,0,1,6d042890-27b2-4efc-935e-8190bb57c037,6d042890-27b2-4efc-935e-8190bb57c037,0,1,23e79add-7f1c-422a-9df1-8f76ebf805df,23e79add-7f1c-422a-9df1-8f76ebf805df,0,1,9295d88f-0865-440c-a98a-4710c50211be,9295d88f-0865-440c-a98a-4710c50211be,0,1,90aa51ae-434d-48f4-bfe3-0e1dd3aeea6f,90aa51ae-434d-48f4-bfe3-0e1dd3aeea6f,0,1,38ac9a13-665a-4201-b5cc-687fe4a01130,38ac9a13-665a-4201-b5cc-687fe4a01130,0,1,97c59096-b2dc-45d0-a580-b3018a04f9af,97c59096-b2dc-45d0-a580-b3018a04f9af,0,1,6fbf63b7-1692-495e-a8ec-bdda182997a3,6fbf63b7-1692-495e-a8ec-bdda182997a3,0,1,8172256e-f51e-4de0-bd07-3668785f4cb9,8172256e-f51e-4de0-bd07-3668785f4cb9,0,1,ccb54dc9-3d12-43d0-af6a-138d3526f5d5,ccb54dc9-3d12-43d0-af6a-138d3526f5d5,0,1,b82bcff8-49c9-44a9-8a9f-4428b0cc54a5,b82bcff8-49c9-44a9-8a9f-4428b0cc54a5,0,1,870b4d6d-0b89-4eda-a2b3-5c6db7dbe864,870b4d6d-0b89-4eda-a2b3-5c6db7dbe864,0,1,c172aeaf-b444-47c0-baee-80ccd91fe934,c172aeaf-b444-47c0-baee-80ccd91fe934,0,1,757ea742-8c14-4e0a-a867-432eee5cfc64,757ea742-8c14-4e0a-a867-432eee5cfc64,0,1,b8c36d5a-7966-4978-9225-67502b9c60a4,b8c36d5a-7966-4978-9225-67502b9c60a4,0,1,37ea0c64-2fec-4c2e-922b-d3a2f01f3e22,37ea0c64-2fec-4c2e-922b-d3a2f01f3e22,0,1,9847676d-f44d-46a0-83e2-4a43a835caf8,9847676d-f44d-46a0-83e2-4a43a835caf8,0,1,43c18cae-21a9-413b-a350-d5cf826980f0,43c18cae-21a9-413b-a350-d5cf826980f0,0,1,16773cdb-b979-42d5-a2a5-d4b79e8737bd,16773cdb-b979-42d5-a2a5-d4b79e8737bd,0,1,c28a190a-f487-4e99-b8f8-6928268086f8,c28a190a-f487-4e99-b8f8-6928268086f8,0,1,94e02f76-8656-4999-9470-dd996118400c,94e02f76-8656-4999-9470-dd996118400c,0,1,9effd265-3783-44e2-8698-80dd82137546,9effd265-3783-44e2-8698-80dd82137546,0,1,bef52020-98f8-465b-8981-e5f8eed62308,bef52020-98f8-465b-8981-e5f8eed62308,0,1,19897ad0-bdb5-439c-b4a2-a773c0ce5cf5,19897ad0-bdb5-439c-b4a2-a773c0ce5cf5,0,1,e731dab7-df9e-48ae-8542-4c0c30666ae9,e731dab7-df9e-48ae-8542-4c0c30666ae9,0,1,6ac484a9-4d96-4521-9b8c-66212a365725,6ac484a9-4d96-4521-9b8c-66212a365725,0,1,0841ebfc-12e6-4b3e-a60f-861b15e1b63c,0841ebfc-12e6-4b3e-a60f-861b15e1b63c,0,1,bde05768-2dd6-4800-985d-27075f610cca,bde05768-2dd6-4800-985d-27075f610cca,0,1,d18956cf-e449-48cc-a127-01b5dc910ea2,d18956cf-e449-48cc-a127-01b5dc910ea2,0,1,8e5487a3-b5e5-40ca-88f3-5b0ea0c4d481,8e5487a3-b5e5-40ca-88f3-5b0ea0c4d481,0,1,e352fc19-96be-4410-a516-bc58cc234422,e352fc19-96be-4410-a516-bc58cc234422,0,1,9b742da4-1696-4c06-9dfa-dd85c9286c74,9b742da4-1696-4c06-9dfa-dd85c9286c74,0,1,db1062bc-4164-4095-9640-9804c0ebcd0b,db1062bc-4164-4095-9640-9804c0ebcd0b,0,1,d5a13430-518a-4917-9de9-d00abbcce500,d5a13430-518a-4917-9de9-d00abbcce500,0,1,ea7c61ff-745c-4908-9a94-bba022d12de4,ea7c61ff-745c-4908-9a94-bba022d12de4,0,1,4d6683a3-1edd-4d04-8e02-0be002e4e5a4,4d6683a3-1edd-4d04-8e02-0be002e4e5a4,0,1,c7ffd8ab-15e9-4cf1-a7fd-d05534dff000,c7ffd8ab-15e9-4cf1-a7fd-d05534dff000,0,1,53caada5-1d53-45dc-9432-90075ddca890,53caada5-1d53-45dc-9432-90075ddca890,0,1,d1472d23-954b-4069-b2d6-df08c6ec0be1,d1472d23-954b-4069-b2d6-df08c6ec0be1,0,1,93fe2ce6-7193-42bc-a966-4653b7989eaa,93fe2ce6-7193-42bc-a966-4653b7989eaa,0,1,a7fe0aa5-722c-4a09-889b-ee422421addc,a7fe0aa5-722c-4a09-889b-ee422421addc,0,1,798bd34c-d0ee-4590-9b1d-8bc47e42ca8c,798bd34c-d0ee-4590-9b1d-8bc47e42ca8c,0,1,0c838a31-2b08-447c-b39a-a613cfba526c,0c838a31-2b08-447c-b39a-a613cfba526c,0,1,b25083c5-9b97-49a4-b6c3-bbf8d7f91cd3,b25083c5-9b97-49a4-b6c3-bbf8d7f91cd3,0,1,86c679c0-3531-4622-9a1f-3d9d6ccdd431,86c679c0-3531-4622-9a1f-3d9d6ccdd431,0,1,3bc2ca38-4a10-4ebd-a5dc-3418db494f0c,3bc2ca38-4a10-4ebd-a5dc-3418db494f0c,0,1,670c62c1-1a33-4dec-9540-5b4c1fe29074,670c62c1-1a33-4dec-9540-5b4c1fe29074,0,1,cc664d81-d0af-4d25-ae29-64f422e51bf2,cc664d81-d0af-4d25-ae29-64f422e51bf2,0,1,e1314cd1-e662-4c29-ad51-492cb0029883,e1314cd1-e662-4c29-ad51-492cb0029883,0,1,4718392b-477c-496b-9d28-ddbdaa7a04f2,4718392b-477c-496b-9d28-ddbdaa7a04f2,0,1,879844f0-30b4-47f5-8d2e-5fea29910368,879844f0-30b4-47f5-8d2e-5fea29910368,0,1,9bc09758-a7ce-44e0-baa3-a3e909869d9b,9bc09758-a7ce-44e0-baa3-a3e909869d9b,0,1,303334ba-2785-47fe-a094-84f9dea33be2,303334ba-2785-47fe-a094-84f9dea33be2,0,1,9690842c-7a2c-4b5d-a238-f730afc49a7b,9690842c-7a2c-4b5d-a238-f730afc49a7b,0,1,04424730-6992-4a5b-838b-7a7c16dedbd0,04424730-6992-4a5b-838b-7a7c16dedbd0,0,1,cd6b749d-55a4-4e10-a933-8d97bfe2f9df,cd6b749d-55a4-4e10-a933-8d97bfe2f9df,0,1,240bec31-cd59-477b-8459-8e3278da22dc,240bec31-cd59-477b-8459-8e3278da22dc,0,1,e0519f0c-9c99-4f5c-a3a9-27adce45737d,e0519f0c-9c99-4f5c-a3a9-27adce45737d,0,1,0874a3c0-0d16-4172-b467-f0666d5fcaee,0874a3c0-0d16-4172-b467-f0666d5fcaee,0,1,cc380a19-ab29-4f20-93ad-9a58cd4de56e,cc380a19-ab29-4f20-93ad-9a58cd4de56e,0,1,6a5f7521-270e-476e-88ec-a8cf79ea61a6,6a5f7521-270e-476e-88ec-a8cf79ea61a6,0,1,9bb841e7-e629-4a1f-8ff6-f8bca0b2b133,9bb841e7-e629-4a1f-8ff6-f8bca0b2b133,0,1,e54a8786-86a4-48e3-a210-aaae4e5fce8c,e54a8786-86a4-48e3-a210-aaae4e5fce8c,0,1,86c86ea2-d14e-4443-b36c-c1c17c4f768a,86c86ea2-d14e-4443-b36c-c1c17c4f768a,0,1,14512818-58b0-44cc-b00d-d37913c57aad,14512818-58b0-44cc-b00d-d37913c57aad,0,1,ddef57d5-1da3-4edd-9275-5f234a34437f,ddef57d5-1da3-4edd-9275-5f234a34437f,0,1,57964dd6-4b0b-4590-bc44-de744cc423af,57964dd6-4b0b-4590-bc44-de744cc423af,0,1,364cbfe2-bc44-4387-aa7e-6b4aa086c9e9,364cbfe2-bc44-4387-aa7e-6b4aa086c9e9,0,1,343b979a-97e3-4eac-a314-3bd3eea9c15c,343b979a-97e3-4eac-a314-3bd3eea9c15c,0,1,b2f17ef1-3f6f-4029-b3e2-28d6b79c5b76,b2f17ef1-3f6f-4029-b3e2-28d6b79c5b76,0,1,f5bb88eb-c239-4ae3-a297-dfbbd679e008,f5bb88eb-c239-4ae3-a297-dfbbd679e008,0,1,bb350b39-1f4d-460a-98c9-8d2308cf22f0,bb350b39-1f4d-460a-98c9-8d2308cf22f0,0,1,f259b6b4-d582-429f-a16f-027a6bcb7438,f259b6b4-d582-429f-a16f-027a6bcb7438,0,1,46e0522b-b88b-43b2-9067-a5359e90994b,46e0522b-b88b-43b2-9067-a5359e90994b,0,1,727c7c01-83e6-4d59-afa4-ee36f1cbacf2,727c7c01-83e6-4d59-afa4-ee36f1cbacf2,0,1,72d41d01-9c9d-4fbe-8a39-932d82d171ef,72d41d01-9c9d-4fbe-8a39-932d82d171ef,0,1,697d5715-dd04-40be-9b28-539734725158,697d5715-dd04-40be-9b28-539734725158,0,1,d831a8ac-88a4-4191-ab0b-7538dfb3e7d7,d831a8ac-88a4-4191-ab0b-7538dfb3e7d7,0,1,d95fcb37-fc65-466d-93e2-489f41683276,d95fcb37-fc65-466d-93e2-489f41683276,0,1,c6b0d31e-7b68-4c7f-a565-0ac8a7c11143,c6b0d31e-7b68-4c7f-a565-0ac8a7c11143,0,1,a27a9296-46bb-49a1-8308-db675baa81d0,a27a9296-46bb-49a1-8308-db675baa81d0,0,1,1456f317-360c-4190-b2d1-1be7484369a5,1456f317-360c-4190-b2d1-1be7484369a5,0,1,5ac74bb3-a4df-47db-ad87-6cb95b85c51f,5ac74bb3-a4df-47db-ad87-6cb95b85c51f,0,1,4867948f-b027-44ae-b78c-a94e00eed52b,4867948f-b027-44ae-b78c-a94e00eed52b,0,1,39ed5463-b1c0-44bb-9d71-4ef08007a7d0,39ed5463-b1c0-44bb-9d71-4ef08007a7d0,0,1,3d4cb11a-7ce7-4c46-a427-99d6f41f08bf,3d4cb11a-7ce7-4c46-a427-99d6f41f08bf,0,1,56cc2ba7-fee3-4dcb-9a2a-93dc94a5ee1f,56cc2ba7-fee3-4dcb-9a2a-93dc94a5ee1f,0,1,ef044879-e731-418a-b917-6a685f27c5f4,ef044879-e731-418a-b917-6a685f27c5f4,0,1,f0ffe529-481f-4eed-8fc8-02a9d8f08f7a,f0ffe529-481f-4eed-8fc8-02a9d8f08f7a,0,1,618d13d5-fd1f-4b70-ad45-dd6a17a50730,618d13d5-fd1f-4b70-ad45-dd6a17a50730,0,1,58037b76-b548-4f07-bd67-67e552a5c6e5,58037b76-b548-4f07-bd67-67e552a5c6e5,0,1,00e48a23-eb5b-4a29-b36c-218ab9760f23,00e48a23-eb5b-4a29-b36c-218ab9760f23,0,1,68f19104-5fa3-4f28-a84b-bf68c3bed49b,68f19104-5fa3-4f28-a84b-bf68c3bed49b,0,1,ab0b6824-99ba-4b8d-857d-ed8ef017d499,ab0b6824-99ba-4b8d-857d-ed8ef017d499,0,1,f88ccd7a-8d15-4b24-addf-da522a0b4a43,f88ccd7a-8d15-4b24-addf-da522a0b4a43,0,1,0f8e87d4-ffb7-4cff-a2d3-6d5c5219ff0b,0f8e87d4-ffb7-4cff-a2d3-6d5c5219ff0b,0,1,1511c2e3-aeb4-422a-b6ae-03412b714c93,1511c2e3-aeb4-422a-b6ae-03412b714c93,0,1,349378d1-abe3-44de-84a4-d525b08e0474,349378d1-abe3-44de-84a4-d525b08e0474,0,1,1526b18d-7fab-414e-a5b2-377b67ac0b55,1526b18d-7fab-414e-a5b2-377b67ac0b55,0,1,c561fe6b-53ea-435b-a230-1850e2dc1ff5,c561fe6b-53ea-435b-a230-1850e2dc1ff5,0,1,aba7605f-6baf-42a8-b5ad-8f71c780b81f,aba7605f-6baf-42a8-b5ad-8f71c780b81f,0,1,8fc19eca-1a15-4758-af4b-79637e51edfb,8fc19eca-1a15-4758-af4b-79637e51edfb,0,1,be9144ce-5560-47bb-8c5e-9beefd15bfc3,be9144ce-5560-47bb-8c5e-9beefd15bfc3,0,1,ad09d1e6-5982-4e1c-864e-452ac5b2915a,ad09d1e6-5982-4e1c-864e-452ac5b2915a,0,1,84a159ed-bc5f-4497-94d1-94b187b0bffe,84a159ed-bc5f-4497-94d1-94b187b0bffe,0,1,0dcc3bbf-afbe-4a4e-bc4a-17534d5fab28,0dcc3bbf-afbe-4a4e-bc4a-17534d5fab28,0,1,bf75c4de-b36a-4a7f-8d84-9fa3d020a6cb,bf75c4de-b36a-4a7f-8d84-9fa3d020a6cb,0,1,f95adb50-fa0b-434c-93dd-b7fd211220b7,f95adb50-fa0b-434c-93dd-b7fd211220b7,0,1,d02fe5f5-412c-4c4f-bfc7-c1d7206cd092,d02fe5f5-412c-4c4f-bfc7-c1d7206cd092,0,1,2233ce53-b8a8-4c83-97a2-683c8575462a,2233ce53-b8a8-4c83-97a2-683c8575462a,0,1,2071f210-dc13-43c0-a58e-b982821d6842,2071f210-dc13-43c0-a58e-b982821d6842,0,1,3cda70d0-3116-4508-82ea-5ea0f0921262,3cda70d0-3116-4508-82ea-5ea0f0921262,0,1,d5588c0d-3e94-485b-a7e9-45f5cf74df9e,d5588c0d-3e94-485b-a7e9-45f5cf74df9e,0,1,c2ef8d6b-de7b-430d-ac30-76cdaf0579c2,c2ef8d6b-de7b-430d-ac30-76cdaf0579c2,0,1,f415296e-fceb-4835-abe9-17bb17a5d5e5,f415296e-fceb-4835-abe9-17bb17a5d5e5,0,1,0e805e1f-3797-4ef9-94d3-0ec58ac1b605,0e805e1f-3797-4ef9-94d3-0ec58ac1b605,0,1,8677bd53-5569-4d44-b7ce-d1b3fe12c78d,8677bd53-5569-4d44-b7ce-d1b3fe12c78d,0,1,19056365-9ff1-4733-876e-a7ebdbbe0557,19056365-9ff1-4733-876e-a7ebdbbe0557,0,1,c8679d82-075c-4556-8231-c004d144fe61,c8679d82-075c-4556-8231-c004d144fe61,0,1,5e09dc5e-bbb7-4c38-b609-940c24f63c84,5e09dc5e-bbb7-4c38-b609-940c24f63c84,0,1,017b28eb-8ba9-465e-a748-20eadbeb4ea2,017b28eb-8ba9-465e-a748-20eadbeb4ea2,0,1,c0bb2d66-94c9-4bc6-afd5-534075e8395b,c0bb2d66-94c9-4bc6-afd5-534075e8395b,0,1,db7cc693-1645-4416-a9d9-5a7584cd3bbc,db7cc693-1645-4416-a9d9-5a7584cd3bbc,0,1,c849fb09-7833-49c8-9461-98426dc6c0af,c849fb09-7833-49c8-9461-98426dc6c0af,0,1,6c58fc3a-37f8-44b7-b076-2c10ce09b554,6c58fc3a-37f8-44b7-b076-2c10ce09b554,0,1,8ca0258c-96d8-4a12-b94f-db968195ee0a,8ca0258c-96d8-4a12-b94f-db968195ee0a,0,1,245c07a9-98b0-452b-b899-dc8751ab7ce0,245c07a9-98b0-452b-b899-dc8751ab7ce0,1,0,ae67dfe5-bb36-4400-81f5-8dab1fd0ca6e,ae67dfe5-bb36-4400-81f5-8dab1fd0ca6e,1,0,9cd9a3e1-b52c-4151-abd3-2744ed03cc1b,9cd9a3e1-b52c-4151-abd3-2744ed03cc1b,1,0,ae698468-f42a-4400-aee6-fd849740e634,ae698468-f42a-4400-aee6-fd849740e634,1,0,ddec19a2-2a76-4eeb-9cbb-6bc2b4a32bc8,ddec19a2-2a76-4eeb-9cbb-6bc2b4a32bc8,1,0,00579e31-e97d-4d79-ba25-b8d500a17e7f,00579e31-e97d-4d79-ba25-b8d500a17e7f,1,0,e815010d-e03d-46e4-b482-c1556902cc26,e815010d-e03d-46e4-b482-c1556902cc26,1,0,98bdfd19-b993-43bd-b2e1-3535d001ff29,98bdfd19-b993-43bd-b2e1-3535d001ff29,1,0,a45fa0c3-c363-4465-861f-13cedfeb79dd,a45fa0c3-c363-4465-861f-13cedfeb79dd,1,0,0233b335-7e26-4661-9850-8ab09d3178e3,0233b335-7e26-4661-9850-8ab09d3178e3,1,0,ea2c4c8e-23cc-4884-812e-1e959da48afc,ea2c4c8e-23cc-4884-812e-1e959da48afc,0,1,47da49ee-b243-4e78-9c8f-bb26c60e6136,47da49ee-b243-4e78-9c8f-bb26c60e6136,0,1,39bee714-cacd-4d48-97a5-c838660e049a,39bee714-cacd-4d48-97a5-c838660e049a,0,1,ea97b67e-1182-49c3-b95a-8fcce4cd3d09,ea97b67e-1182-49c3-b95a-8fcce4cd3d09,0,1,592f55e1-b004-44ef-878a-6c2016ccbeb0,592f55e1-b004-44ef-878a-6c2016ccbeb0,0,1,19add2bd-eede-4a05-901b-cf8ce49a638f,19add2bd-eede-4a05-901b-cf8ce49a638f,0,1,2baf6d7a-12ed-4f22-ad96-92bb31b747ff,2baf6d7a-12ed-4f22-ad96-92bb31b747ff,0,1,becf53b6-3fbc-4c70-822f-4a70b0434353,becf53b6-3fbc-4c70-822f-4a70b0434353,0,1,9376b18c-cffd-488b-8a1e-cca598f018bc,9376b18c-cffd-488b-8a1e-cca598f018bc,0,1,f8dc2485-685b-4e41-834a-a2cbbbe4d53b,f8dc2485-685b-4e41-834a-a2cbbbe4d53b,0,1,652ee894-047b-4a5a-a500-2d61b4c4a473,652ee894-047b-4a5a-a500-2d61b4c4a473,0,1,8a95d199-9bd1-4cbb-9d1a-941e80fa2105,8a95d199-9bd1-4cbb-9d1a-941e80fa2105,0,1,fef727fa-f63b-4467-9367-73a2425b19e3,fef727fa-f63b-4467-9367-73a2425b19e3,0,1,3b9c03bc-8517-498f-8052-e53854fb0753,3b9c03bc-8517-498f-8052-e53854fb0753,0,1,33f8cd94-71e7-4703-92c3-22690fbd871a,33f8cd94-71e7-4703-92c3-22690fbd871a,0,1,b6e5de4d-0156-4342-b646-6e6920a4bd3a,b6e5de4d-0156-4342-b646-6e6920a4bd3a,0,1,c03f9972-5a1f-449b-b170-5a958c2b5846,c03f9972-5a1f-449b-b170-5a958c2b5846,0,1,25896075-2484-4879-8310-7f5680d80b48,25896075-2484-4879-8310-7f5680d80b48,0,1,09858042-6284-4499-8055-c1b5b783ce5f,09858042-6284-4499-8055-c1b5b783ce5f,0,1,1e3c444d-6f73-4eb0-a12d-7106daf36b14,1e3c444d-6f73-4eb0-a12d-7106daf36b14,0,1,e417e2ab-5e25-40a9-8dc2-9552a4fe1a38,e417e2ab-5e25-40a9-8dc2-9552a4fe1a38,0,1,1e63c656-a0e7-4b33-8bac-2a196e028ffa,1e63c656-a0e7-4b33-8bac-2a196e028ffa,0,1,085cbea9-1df1-4ee9-afb7-da2bf313697e,085cbea9-1df1-4ee9-afb7-da2bf313697e,0,1,36b080d5-a870-46fa-bf8d-0a06e3a9719f,36b080d5-a870-46fa-bf8d-0a06e3a9719f,0,1,b3152292-5546-4896-ad24-cb41057698d8,b3152292-5546-4896-ad24-cb41057698d8,0,1,38fc1e6e-7cd3-437b-b429-6655be34cd01,38fc1e6e-7cd3-437b-b429-6655be34cd01,0,1,c38d8135-e11f-4860-b370-84ff279b7fbd,c38d8135-e11f-4860-b370-84ff279b7fbd,0,1,ee0798f5-47a8-4118-a25c-cfd3473007c1,ee0798f5-47a8-4118-a25c-cfd3473007c1,0,1,7dc0429d-146a-4c4f-b122-5d5c053bd4ed,7dc0429d-146a-4c4f-b122-5d5c053bd4ed,0,1,e25b2b10-bf08-42db-9642-861efc5e583b,e25b2b10-bf08-42db-9642-861efc5e583b,0,1,29f2094a-d0d1-425c-8161-45a9ba186e19,29f2094a-d0d1-425c-8161-45a9ba186e19,0,1,bfa90848-930f-433d-8f6f-c11ac2c5eba2,bfa90848-930f-433d-8f6f-c11ac2c5eba2,0,1,a4d767a1-d2e6-4e0a-ab35-9207eef54998,a4d767a1-d2e6-4e0a-ab35-9207eef54998,0,1,69149ce1-d3f8-4e12-be8f-b328ade60882,69149ce1-d3f8-4e12-be8f-b328ade60882,0,1,ff592ecb-eb08-4554-87bf-1d2935b21d3c,ff592ecb-eb08-4554-87bf-1d2935b21d3c,0,1,f38069e7-6d69-4be9-8463-bc7a33158a1a,f38069e7-6d69-4be9-8463-bc7a33158a1a,0,1,e50cb13a-151b-45d2-a7b7-d23440ddfa24,e50cb13a-151b-45d2-a7b7-d23440ddfa24,0,1,cc3a7f15-4db6-445e-b282-f44d0460b7d3,cc3a7f15-4db6-445e-b282-f44d0460b7d3,0,1,0b8bfb71-d430-4bdf-8391-a534b3a15fc3,0b8bfb71-d430-4bdf-8391-a534b3a15fc3,0,1,0d8770aa-fa6e-471c-92c8-b96576927ef0,0d8770aa-fa6e-471c-92c8-b96576927ef0,0,1,b8a32c33-4e15-4c21-baab-64a86d44321b,b8a32c33-4e15-4c21-baab-64a86d44321b,0,1,e7d51ada-f286-4519-bfae-ece95dd4d7b0,e7d51ada-f286-4519-bfae-ece95dd4d7b0,0,1,d7dd9a03-6818-4987-8f39-58e1c906569f,d7dd9a03-6818-4987-8f39-58e1c906569f,0,1,fce028b8-b530-49f0-b6ad-a28d03e19b0f,fce028b8-b530-49f0-b6ad-a28d03e19b0f,0,1,301eea20-0e7f-441e-a531-28b4627dfd93,301eea20-0e7f-441e-a531-28b4627dfd93,0,1,d975aef4-8da8-4486-baeb-a99c48cff0ec,d975aef4-8da8-4486-baeb-a99c48cff0ec,0,1,75666bb9-f6d3-4dd6-8220-427a81f23fc9,75666bb9-f6d3-4dd6-8220-427a81f23fc9,0,1,9da27139-0bed-47b0-aef6-246929968502,9da27139-0bed-47b0-aef6-246929968502,0,1,68e82adf-bc03-4f23-9ec4-749ed42241da,68e82adf-bc03-4f23-9ec4-749ed42241da,0,1,7ae5d177-a3e6-4989-b10c-8e0a605c26d9,7ae5d177-a3e6-4989-b10c-8e0a605c26d9,0,1,41f87891-ddd5-4e0f-a4f2-8039fb71981b,41f87891-ddd5-4e0f-a4f2-8039fb71981b,0,1,a57f6dc1-59d7-4311-8acd-65ce57a9f386,a57f6dc1-59d7-4311-8acd-65ce57a9f386,0,1,893b2dd9-a939-4799-9b78-50d788a5f3ba,893b2dd9-a939-4799-9b78-50d788a5f3ba,0,1,68229ecd-7ecc-4194-a3e5-f8df39b55d6a,68229ecd-7ecc-4194-a3e5-f8df39b55d6a,0,1,e4842271-4fc0-4e15-afef-876f05af78c0,e4842271-4fc0-4e15-afef-876f05af78c0,0,1,135d57fe-d420-4bb0-9120-e43fd9b55c16,135d57fe-d420-4bb0-9120-e43fd9b55c16,0,1,31ee6430-b65d-42fa-859b-c4f1c40686ae,31ee6430-b65d-42fa-859b-c4f1c40686ae,0,1,c59e11f3-6bcb-404a-9d76-1416c12be354,c59e11f3-6bcb-404a-9d76-1416c12be354,0,1,c1a1f12b-3978-4047-956e-a5c7de8371a0,c1a1f12b-3978-4047-956e-a5c7de8371a0,0,1,ac39b903-0c60-417e-a50f-49ed375424f5,ac39b903-0c60-417e-a50f-49ed375424f5,0,1,9893e2d6-f3f8-4d73-bb06-19bf26d216ab,9893e2d6-f3f8-4d73-bb06-19bf26d216ab,0,1,16392cf6-dd83-4df0-a54b-6efc29778a89,16392cf6-dd83-4df0-a54b-6efc29778a89,0,1,a4ec7d3d-2d01-436c-98ec-ec42733ee5c6,a4ec7d3d-2d01-436c-98ec-ec42733ee5c6,0,1,230722e6-942f-4594-be89-eff59c6572bf,230722e6-942f-4594-be89-eff59c6572bf,0,1,b43abcf7-1f1d-4a59-b0d1-0a493c3a4785,b43abcf7-1f1d-4a59-b0d1-0a493c3a4785,0,1,eaf6045f-9ac0-43ef-b165-a45be75a4d44,eaf6045f-9ac0-43ef-b165-a45be75a4d44,0,1,237dab99-ed72-432c-ad01-c6045d74f000,237dab99-ed72-432c-ad01-c6045d74f000,0,1,a1130128-cc48-4555-93a2-99e7f74f77dc,a1130128-cc48-4555-93a2-99e7f74f77dc,0,1,94e08dcf-3885-4a73-82ab-cb291f1cf95f,94e08dcf-3885-4a73-82ab-cb291f1cf95f,0,1,405c52c4-25fe-45ff-abab-bf01041e768d,405c52c4-25fe-45ff-abab-bf01041e768d,0,1,55ce840b-5838-4107-886d-f935b9907bd8,55ce840b-5838-4107-886d-f935b9907bd8,0,1,0b3088c9-7fb9-4979-acce-16d7ae7ba6b7,0b3088c9-7fb9-4979-acce-16d7ae7ba6b7,0,1,f1753bda-16db-4b00-a16a-37ddade8403f,f1753bda-16db-4b00-a16a-37ddade8403f,0,1,a1875d63-4303-46f1-bdea-fc529b5891f3,a1875d63-4303-46f1-bdea-fc529b5891f3,0,1,59123b12-6052-4480-9c86-f4de1b5cdc04,59123b12-6052-4480-9c86-f4de1b5cdc04,0,1,133f181a-fade-4182-826d-904fac780326,133f181a-fade-4182-826d-904fac780326,0,1,f60cb71a-f451-426a-aa3a-aa266b8da149,f60cb71a-f451-426a-aa3a-aa266b8da149,0,1,641ebe22-7135-4adb-bbd6-e0c37d246a2d,641ebe22-7135-4adb-bbd6-e0c37d246a2d,0,1,f71ba01e-9f6b-4241-8048-4368c8888756,f71ba01e-9f6b-4241-8048-4368c8888756,0,1,ab6fdd75-2ea6-4408-8c03-0cfab775a7a0,ab6fdd75-2ea6-4408-8c03-0cfab775a7a0,0,1,6aa814fa-417e-428c-951e-6efd9d0775da,6aa814fa-417e-428c-951e-6efd9d0775da,0,1,a247efe1-8608-4780-9cc8-54e29944475b,a247efe1-8608-4780-9cc8-54e29944475b,0,1,4b8c3c82-6e8f-469e-8a80-144361d1d0b2,4b8c3c82-6e8f-469e-8a80-144361d1d0b2,0,1,a8f162e9-3f59-41a5-b82f-da20928213c7,a8f162e9-3f59-41a5-b82f-da20928213c7,0,1,ade68dfd-5037-4fd7-b043-9514e3fe6342,ade68dfd-5037-4fd7-b043-9514e3fe6342,0,1,7b008aad-9d05-43e1-8295-62ae58cfff42,7b008aad-9d05-43e1-8295-62ae58cfff42,0,1,fdaf9255-d621-4a98-9530-f618ed440795,fdaf9255-d621-4a98-9530-f618ed440795,0,1,0daac965-2026-4acc-8ba1-3c1f01779257,0daac965-2026-4acc-8ba1-3c1f01779257,0,1,65a331c0-7501-49f6-8027-35b703d11834,65a331c0-7501-49f6-8027-35b703d11834,0,1,c67fab0a-704f-43ae-bd03-4b5b1a880b24,c67fab0a-704f-43ae-bd03-4b5b1a880b24,0,1,aae09896-3b22-4d7d-9059-e47660f8b88b,aae09896-3b22-4d7d-9059-e47660f8b88b,0,1,c1703a14-61a0-4461-8ad8-7173e2c431fe,c1703a14-61a0-4461-8ad8-7173e2c431fe,0,1,b1b5841d-0cf9-4de5-8561-b35b8f286d21,b1b5841d-0cf9-4de5-8561-b35b8f286d21,0,1,aecf5653-3005-43f2-ab49-40977e70f02b,aecf5653-3005-43f2-ab49-40977e70f02b,0,1,4093fe34-7557-4f15-831b-d654b94b8010,4093fe34-7557-4f15-831b-d654b94b8010,0,1,ee10023f-5c63-4cb3-8e6c-db566c788c9d,ee10023f-5c63-4cb3-8e6c-db566c788c9d,0,1,475f8577-a141-496b-94e1-53215c0dd017,475f8577-a141-496b-94e1-53215c0dd017,0,1,97638762-c01e-4c8f-88e2-b356e517e18f,97638762-c01e-4c8f-88e2-b356e517e18f,0,1,074e34f2-e9be-4bd3-beca-8b916772e2be,074e34f2-e9be-4bd3-beca-8b916772e2be,0,1,28fecf1b-7cab-4087-b66e-2052edb8ce3a,28fecf1b-7cab-4087-b66e-2052edb8ce3a,0,1,252eb146-0d23-46ae-9feb-ee04531dd7d8,252eb146-0d23-46ae-9feb-ee04531dd7d8,0,1,d85b00b7-b0d8-4b91-8d7f-0c2da524d446,d85b00b7-b0d8-4b91-8d7f-0c2da524d446,0,1,cc906f05-5ea6-43cb-a084-c4ee51ca4bd5,cc906f05-5ea6-43cb-a084-c4ee51ca4bd5,0,1,f5417147-4d2a-4e49-911b-2bb5eccb8441,f5417147-4d2a-4e49-911b-2bb5eccb8441,0,1,20fbed2b-4393-4de0-a71d-017a336bdac0,20fbed2b-4393-4de0-a71d-017a336bdac0,0,1,2ca4fc58-798b-4fc3-8673-27688ce7a1f2,2ca4fc58-798b-4fc3-8673-27688ce7a1f2,0,1,41f6f6d1-b7cf-4477-907b-ce69fc08c799,41f6f6d1-b7cf-4477-907b-ce69fc08c799,0,1,0d124daf-dc52-4391-a2d9-3c43a45c422c,0d124daf-dc52-4391-a2d9-3c43a45c422c,0,1,a300ecc3-8031-4a50-a17d-b08cf3a72139,a300ecc3-8031-4a50-a17d-b08cf3a72139,0,1,e7e78b7e-b103-40d6-8064-f84e2d86ca3d,e7e78b7e-b103-40d6-8064-f84e2d86ca3d,0,1,44b28019-01c0-468d-9b60-e050ff8b71ac,44b28019-01c0-468d-9b60-e050ff8b71ac,0,1,69f6173c-a570-41ff-b07f-5b85f7187515,69f6173c-a570-41ff-b07f-5b85f7187515,0,1,9c443dd3-4acb-4c5a-9c4b-af8b0c87e861,9c443dd3-4acb-4c5a-9c4b-af8b0c87e861,0,1,98153b59-8cc6-4dc7-b945-99c1146d07da,98153b59-8cc6-4dc7-b945-99c1146d07da,0,1,3e2828b4-2b55-471e-ac69-55119c2480f8,3e2828b4-2b55-471e-ac69-55119c2480f8,0,1,df9db8d5-c5c2-4a9d-88fe-77247b2c417e,df9db8d5-c5c2-4a9d-88fe-77247b2c417e,0,1,9da32b56-ff89-4739-bb99-615074b72298,9da32b56-ff89-4739-bb99-615074b72298,0,1,08baf3ee-b8ca-4f29-89fc-c15344064ad3,08baf3ee-b8ca-4f29-89fc-c15344064ad3,0,1,2c8ab5a6-66d5-4b6f-94ae-4292724ded7f,2c8ab5a6-66d5-4b6f-94ae-4292724ded7f,0,1,01b85e3a-9920-425a-9de5-5079fffeef93,01b85e3a-9920-425a-9de5-5079fffeef93,0,1,82e12316-cc64-4d2f-83fa-054b5a738f02,82e12316-cc64-4d2f-83fa-054b5a738f02,0,1,6b70f7e1-8bdb-4fc4-9b95-0e045bfa288c,6b70f7e1-8bdb-4fc4-9b95-0e045bfa288c,0,1,a890be6b-f050-4ea4-a388-570948ffd22b,a890be6b-f050-4ea4-a388-570948ffd22b,0,1,b00c31d6-4fc6-4189-9f72-f91742ec705f,b00c31d6-4fc6-4189-9f72-f91742ec705f,0,1,1333101b-82e8-41a9-a793-5af5dcd6f68a,1333101b-82e8-41a9-a793-5af5dcd6f68a,0,1,3ba630c2-cdc1-40a8-a24e-538ddb1abe38,3ba630c2-cdc1-40a8-a24e-538ddb1abe38,0,1,0f25646a-90f9-4747-a778-7efdaabc284c,0f25646a-90f9-4747-a778-7efdaabc284c,0,1,3a2d9324-8260-478d-ad62-a964d860cb8f,3a2d9324-8260-478d-ad62-a964d860cb8f,0,1,9b9cd161-5bee-4433-a0ec-b67deb099b5e,9b9cd161-5bee-4433-a0ec-b67deb099b5e,0,1,ca179cb5-65e1-4a55-bf12-096b926accb0,ca179cb5-65e1-4a55-bf12-096b926accb0,0,1,472ce1c2-9e83-418b-b1ec-e15e126bc919,472ce1c2-9e83-418b-b1ec-e15e126bc919,0,1,9fe30414-8261-4403-a854-f22b61824f69,9fe30414-8261-4403-a854-f22b61824f69,0,1,07bb26ac-bd97-465f-a192-db7fedbb579b,07bb26ac-bd97-465f-a192-db7fedbb579b,0,1,bb129cf2-5a5a-433a-924a-a1d0d895644a,bb129cf2-5a5a-433a-924a-a1d0d895644a,0,1,faa34cb8-2d48-4851-a839-fc40536a0234,faa34cb8-2d48-4851-a839-fc40536a0234,0,1,0894db61-51f6-4068-9634-e55d95e2a8ac,0894db61-51f6-4068-9634-e55d95e2a8ac,0,1,ad3fb691-68b2-4d65-93ab-ab8fcb77e035,ad3fb691-68b2-4d65-93ab-ab8fcb77e035,0,1,67aed41e-9707-4007-bb3c-7273476664bb,67aed41e-9707-4007-bb3c-7273476664bb,0,1,0d8c215d-1210-47a2-897d-a3257b9f849a,0d8c215d-1210-47a2-897d-a3257b9f849a,0,1,954e7804-e8b1-42aa-9d49-bef73f9d13d1,954e7804-e8b1-42aa-9d49-bef73f9d13d1,0,1,de25a90c-4b46-4340-b649-93e16dde33de,de25a90c-4b46-4340-b649-93e16dde33de,0,1,4f2d0398-49f4-410c-a451-436cbf96a262,4f2d0398-49f4-410c-a451-436cbf96a262,0,1,ed297409-6215-4fd4-b47d-a2247e0343da,ed297409-6215-4fd4-b47d-a2247e0343da,0,1,5ae2a1de-6380-45cc-9c8f-5612cd5ba627,5ae2a1de-6380-45cc-9c8f-5612cd5ba627,0,1,e8aa2ba2-7dfa-47e3-bc18-6156f700ceed,e8aa2ba2-7dfa-47e3-bc18-6156f700ceed,0,1,8c472f51-47ec-43c4-9858-fd19ac3e17f3,8c472f51-47ec-43c4-9858-fd19ac3e17f3,0,1,c54f31ce-114b-46d3-b4c6-12c8f07727ca,c54f31ce-114b-46d3-b4c6-12c8f07727ca,0,1,5a9c82c1-d0cd-48ff-b91c-38b950591e4c,5a9c82c1-d0cd-48ff-b91c-38b950591e4c,0,1,59855d19-29cd-4efd-a453-b19e574113ef,59855d19-29cd-4efd-a453-b19e574113ef,0,1,249b6436-bd44-4950-b118-7f40f7aaf794,249b6436-bd44-4950-b118-7f40f7aaf794,0,1,712c2b73-4697-4581-a095-70555aee8be2,712c2b73-4697-4581-a095-70555aee8be2,0,1,c1508d67-ac6d-41e3-884d-b3bdd54659f8,c1508d67-ac6d-41e3-884d-b3bdd54659f8,0,1,3436b16e-ef5b-4abb-9aad-c70a7c8560ed,3436b16e-ef5b-4abb-9aad-c70a7c8560ed,0,1,ce6d1259-af90-482b-b19a-405512321bd9,ce6d1259-af90-482b-b19a-405512321bd9,0,1,79ff04ac-4625-469b-916e-938f04de4dd2,79ff04ac-4625-469b-916e-938f04de4dd2,0,1,35103a27-230c-45c0-a8c9-24bd46608bbb,35103a27-230c-45c0-a8c9-24bd46608bbb,0,1,c5e9f987-4466-4161-8e36-278b0b3ce056,c5e9f987-4466-4161-8e36-278b0b3ce056,0,1,b6566d54-e821-4a2a-a447-0f533f35de91,b6566d54-e821-4a2a-a447-0f533f35de91,0,1,46568b9a-a765-4037-8a86-b184a570ab37,46568b9a-a765-4037-8a86-b184a570ab37,0,1,4fcc7278-2fec-49ee-b0ef-c7d5f5f698a4,4fcc7278-2fec-49ee-b0ef-c7d5f5f698a4,0,1,547a6dec-6fe8-439d-a8d9-ac2612af20d2,547a6dec-6fe8-439d-a8d9-ac2612af20d2,0,1,2bc2c4b7-dacb-4cb3-b5b2-712b19bebcd7,2bc2c4b7-dacb-4cb3-b5b2-712b19bebcd7,0,1,84395058-d46a-428c-b782-a9fa89fea14a,84395058-d46a-428c-b782-a9fa89fea14a,0,1,64f667e5-6a8f-448f-aed5-a4d461232845,64f667e5-6a8f-448f-aed5-a4d461232845,0,1,a148cdff-0e67-48e6-9cc5-e8a6f5aa1ae8,a148cdff-0e67-48e6-9cc5-e8a6f5aa1ae8,0,1,037842ca-aeaf-4e27-9a0e-e929438b6f40,037842ca-aeaf-4e27-9a0e-e929438b6f40,0,1,5b7eb8bc-ad6b-4191-a6c1-92561bb944f2,5b7eb8bc-ad6b-4191-a6c1-92561bb944f2,0,1,b2c8bd74-21c9-4495-93e2-ca5355698350,b2c8bd74-21c9-4495-93e2-ca5355698350,0,1,39bc2bc6-2a4f-4e26-b1b9-fb8473234f09,39bc2bc6-2a4f-4e26-b1b9-fb8473234f09,0,1,cc9679a5-1ed2-4290-8c9b-8a2f6614d053,cc9679a5-1ed2-4290-8c9b-8a2f6614d053,0,1,93016393-c637-4d81-8675-aa5e51e678e0,93016393-c637-4d81-8675-aa5e51e678e0,0,1,d8621f68-106e-4058-963f-56010491ae2e,d8621f68-106e-4058-963f-56010491ae2e,0,1,670639a7-02a7-4108-81b8-cb93233fd2a5,670639a7-02a7-4108-81b8-cb93233fd2a5,0,1,f2e2df50-52fc-4e95-909b-80fc91a68f62,f2e2df50-52fc-4e95-909b-80fc91a68f62,0,1,1a1d8dd0-1559-426c-ad3c-baa6eb3a53db,1a1d8dd0-1559-426c-ad3c-baa6eb3a53db,0,1,d2762764-b5c0-4aeb-8e89-3371972f22d8,d2762764-b5c0-4aeb-8e89-3371972f22d8,0,1,d67a1377-f69f-48d9-824d-2ede2594e630,d67a1377-f69f-48d9-824d-2ede2594e630,0,1,573f1753-9194-4aaf-9217-5cac70ff108f,573f1753-9194-4aaf-9217-5cac70ff108f,0,1,50d3e00e-1a83-4bd5-91db-0561560caf42,50d3e00e-1a83-4bd5-91db-0561560caf42,0,1,1f7ec25a-05b1-468b-8857-2bb1aed3678a,1f7ec25a-05b1-468b-8857-2bb1aed3678a,0,1,c121b8bc-ecbf-4775-b210-3c1e3502a6ac,c121b8bc-ecbf-4775-b210-3c1e3502a6ac,0,1,4a1e6d25-89e7-468a-aef1-6ded0154dca2,4a1e6d25-89e7-468a-aef1-6ded0154dca2,0,1,905624ea-b253-413f-b651-1eb2c5a7d52a,905624ea-b253-413f-b651-1eb2c5a7d52a,0,1,b639ed30-3e37-4c65-a39f-00fe735950eb,b639ed30-3e37-4c65-a39f-00fe735950eb,0,1,76ef7f67-0ce8-4ee2-9134-e793c41b8de3,76ef7f67-0ce8-4ee2-9134-e793c41b8de3,0,1,f137eb0f-bde7-412d-9229-d7a4f9456e6c,f137eb0f-bde7-412d-9229-d7a4f9456e6c,0,1,90880131-8065-4a7e-a0fa-ecff9e27363c,90880131-8065-4a7e-a0fa-ecff9e27363c,0,1,57e9fcea-342c-4089-bd10-befb3faf0dbd,57e9fcea-342c-4089-bd10-befb3faf0dbd,0,1,6b10167a-f5c3-4d7b-b444-d5ff6e705ea4,6b10167a-f5c3-4d7b-b444-d5ff6e705ea4,0,1,f85ff11a-163e-4d18-98bc-b0ebe83d34e4,f85ff11a-163e-4d18-98bc-b0ebe83d34e4,0,1,51a0444d-13c8-45a8-97f6-f3f976964bf8,51a0444d-13c8-45a8-97f6-f3f976964bf8,0,1,38eb3fd1-57be-4dc2-bed4-d8107086bf2a,38eb3fd1-57be-4dc2-bed4-d8107086bf2a,0,1,6b6d541b-5dc1-4150-b8d1-5844a694ac6a,6b6d541b-5dc1-4150-b8d1-5844a694ac6a,0,1,2b1619a6-c841-4963-8c51-c1d8d6ba3746,2b1619a6-c841-4963-8c51-c1d8d6ba3746,0,1,eab50f82-4612-47fd-a5c2-9678016a1937,eab50f82-4612-47fd-a5c2-9678016a1937,0,1,4212bb94-7c24-4d4f-8bb8-4060bd21a135,4212bb94-7c24-4d4f-8bb8-4060bd21a135,0,1,2609ba3c-e4de-45b3-86e0-93db39a21eee,2609ba3c-e4de-45b3-86e0-93db39a21eee,0,1,00dcfeab-7ba1-4a50-996e-4fd693dd0514,00dcfeab-7ba1-4a50-996e-4fd693dd0514,0,1,d21971c9-9aa6-448a-ab37-49ad0b0547ec,d21971c9-9aa6-448a-ab37-49ad0b0547ec,0,1,627438b8-c738-4e02-a0e7-cfd7fbf8eca1,627438b8-c738-4e02-a0e7-cfd7fbf8eca1,0,1,3e4361e9-2baf-407b-9320-b2a265b44e46,3e4361e9-2baf-407b-9320-b2a265b44e46,0,1,00418e6c-77b2-4753-b9ff-3a8013436f8a,00418e6c-77b2-4753-b9ff-3a8013436f8a,0,1,8deaa3d0-b36b-4f20-a9a8-11d829f5ef9d,8deaa3d0-b36b-4f20-a9a8-11d829f5ef9d,0,1,4d660fec-4a76-470e-bba9-3d031941b289,4d660fec-4a76-470e-bba9-3d031941b289,0,1,d5537afb-df5f-4edf-a3d3-ff6b2a908ad9,d5537afb-df5f-4edf-a3d3-ff6b2a908ad9,0,1,d9f1f56b-75c8-43e9-8043-89076c225f78,d9f1f56b-75c8-43e9-8043-89076c225f78,0,1,a3c9a7eb-2104-4402-954c-3e12de4a7de3,a3c9a7eb-2104-4402-954c-3e12de4a7de3,0,1,38bf6d3b-5435-4bac-b9fc-23b80afeb760,38bf6d3b-5435-4bac-b9fc-23b80afeb760,0,1,556a0e57-5b3b-4303-a013-0bd296c506b8,556a0e57-5b3b-4303-a013-0bd296c506b8,0,1,21c1b2d3-cd96-4cdd-9ccc-ada27b127969,21c1b2d3-cd96-4cdd-9ccc-ada27b127969,0,1,fabbac92-cb98-4087-b3fa-387482ed0d86,fabbac92-cb98-4087-b3fa-387482ed0d86,0,1,304525f8-c697-4835-b0a6-4ed3cbcaf3c6,304525f8-c697-4835-b0a6-4ed3cbcaf3c6,0,1,bbbc2d1f-2f78-4b7e-b5fb-ca7c74051221,bbbc2d1f-2f78-4b7e-b5fb-ca7c74051221,0,1,e09534e3-ac6e-42a6-86e8-564acb20089a,e09534e3-ac6e-42a6-86e8-564acb20089a,0,1,d06e845a-9f54-40dd-b0df-6988def62017,d06e845a-9f54-40dd-b0df-6988def62017,0,1,7badb97b-c359-42af-9066-6bbfc0650cf9,7badb97b-c359-42af-9066-6bbfc0650cf9,0,1,63223883-06cf-4d01-be95-5e410cc58a22,63223883-06cf-4d01-be95-5e410cc58a22,0,1,1929139f-dabb-4c40-9423-158093360889,1929139f-dabb-4c40-9423-158093360889,0,1,dad92df4-685b-4260-b35f-4d031262dfea,dad92df4-685b-4260-b35f-4d031262dfea,0,1,4399c19a-ddba-42e9-88b4-c5c28abad237,4399c19a-ddba-42e9-88b4-c5c28abad237,0,1,982315ba-df74-4a31-8929-71d1e5e6f147,982315ba-df74-4a31-8929-71d1e5e6f147,0,1,8d1c01a9-9806-4e5d-bafb-ce6af11d5650,8d1c01a9-9806-4e5d-bafb-ce6af11d5650,0,1,fd3a6a7e-203d-447a-aebd-7626579387fb,fd3a6a7e-203d-447a-aebd-7626579387fb,0,1,cbc1c36d-7bbf-4892-8220-a33ec91a7b1f,cbc1c36d-7bbf-4892-8220-a33ec91a7b1f,0,1,8014684f-e1f1-4163-9083-459a009c0aac,8014684f-e1f1-4163-9083-459a009c0aac,0,1,ff976027-75e8-475c-abfa-876d36733c13,ff976027-75e8-475c-abfa-876d36733c13,0,1,7452d9c0-cb03-4d1b-afd4-8855950f2ad8,7452d9c0-cb03-4d1b-afd4-8855950f2ad8,0,1,32d4a42d-6e4d-49db-b5bc-1ea6dbe9fe4d,32d4a42d-6e4d-49db-b5bc-1ea6dbe9fe4d,0,1,3f823f5b-e5a8-40af-8fc3-e4c6ffb18fa3,3f823f5b-e5a8-40af-8fc3-e4c6ffb18fa3,0,1,b3554203-b930-496d-a712-353bc13a0946,b3554203-b930-496d-a712-353bc13a0946,0,1,59775ce0-f778-45f6-9453-bbd0a0ec1f27,59775ce0-f778-45f6-9453-bbd0a0ec1f27,0,1,f772abd3-8ea0-41e9-aaca-c5375778941a,f772abd3-8ea0-41e9-aaca-c5375778941a,0,1,a1e494f8-96a4-41bd-9234-b87e8d8742c5,a1e494f8-96a4-41bd-9234-b87e8d8742c5,0,1,b322b047-16eb-4500-826a-6dfebb7d997a,b322b047-16eb-4500-826a-6dfebb7d997a,0,1,c8da922f-e31e-49b0-b90e-1c060424bde5,c8da922f-e31e-49b0-b90e-1c060424bde5,0,1,41462827-fd8b-4ee6-a739-a884d704bba5,41462827-fd8b-4ee6-a739-a884d704bba5,0,1,7b01236c-5ab7-43fa-aa0e-1ae55c8a4efe,7b01236c-5ab7-43fa-aa0e-1ae55c8a4efe,0,1,eca025d2-4fe9-4542-b9f5-46ae2631256e,eca025d2-4fe9-4542-b9f5-46ae2631256e,0,1,35bc58df-8aff-48dd-83a9-b60b0461f94d,35bc58df-8aff-48dd-83a9-b60b0461f94d,0,1,0f46ae6b-9fe8-471a-a59f-af5e66cb9e00,0f46ae6b-9fe8-471a-a59f-af5e66cb9e00,0,1,feb1a5c1-c805-4079-8f05-8a44f51b0b02,feb1a5c1-c805-4079-8f05-8a44f51b0b02,0,1,ff7916bd-cbd1-4d9e-8aab-bad9fffaa0d4,ff7916bd-cbd1-4d9e-8aab-bad9fffaa0d4,0,1,1f55f330-7c0a-4a29-905f-51d664515bc5,1f55f330-7c0a-4a29-905f-51d664515bc5,0,1,6106e958-354c-4211-992c-3c3819e8828e,6106e958-354c-4211-992c-3c3819e8828e,0,1,9d6d77a9-1f55-4162-93a5-14bb3f3febaf,9d6d77a9-1f55-4162-93a5-14bb3f3febaf,0,1,2cd04d4c-2619-40c9-adf4-7bb281f045b6,2cd04d4c-2619-40c9-adf4-7bb281f045b6,0,1,1d6b8425-360c-4ab1-9bab-cc9a3b590bb2,1d6b8425-360c-4ab1-9bab-cc9a3b590bb2,0,1,9f67d228-79aa-44e6-8dc7-fae4fbdfef2a,9f67d228-79aa-44e6-8dc7-fae4fbdfef2a,0,1,231d3950-f363-4e63-83cd-8ddb81507c27,231d3950-f363-4e63-83cd-8ddb81507c27,0,1,87429f11-bf95-4013-bf13-da904570f88d,87429f11-bf95-4013-bf13-da904570f88d,0,1,6173cab2-e0f5-40c1-8e74-4f41fc8bd68f,6173cab2-e0f5-40c1-8e74-4f41fc8bd68f,0,1,feb41347-62db-41cf-ace0-d8b9de361af3,feb41347-62db-41cf-ace0-d8b9de361af3,0,1,5a088468-4065-4e0c-9b84-1162de8d3fdd,5a088468-4065-4e0c-9b84-1162de8d3fdd,0,1,dbdf3ae7-a0af-44b9-8e3d-c402d98cda03,dbdf3ae7-a0af-44b9-8e3d-c402d98cda03,0,1,cdce186a-229d-492d-8811-147fc4d7cdf5,cdce186a-229d-492d-8811-147fc4d7cdf5,0,1,5f91b00f-d8fc-4d63-8486-66339357ab22,5f91b00f-d8fc-4d63-8486-66339357ab22,0,1,16d44ab1-4bce-4df8-a215-6ed5173c75a8,16d44ab1-4bce-4df8-a215-6ed5173c75a8,0,1,543f976e-fea3-4a51-9962-b8e0fcd3f707,543f976e-fea3-4a51-9962-b8e0fcd3f707,0,1,375977c1-5745-4e78-a4df-cef966c0ccf8,375977c1-5745-4e78-a4df-cef966c0ccf8,0,1,2582a714-a6d6-4d37-b9a7-5e89e18b0f27,2582a714-a6d6-4d37-b9a7-5e89e18b0f27,0,1,c3796d85-2a24-43c4-9673-64e56249a1d0,c3796d85-2a24-43c4-9673-64e56249a1d0,0,1,fc1066b5-20d4-4c73-85f8-9889e554d6e1,fc1066b5-20d4-4c73-85f8-9889e554d6e1,0,1,a9b6b5fd-1862-4207-87e8-5c25a8f86c57,a9b6b5fd-1862-4207-87e8-5c25a8f86c57,0,1,731211c2-ef90-4883-9525-83cd91b742ac,731211c2-ef90-4883-9525-83cd91b742ac,0,1,0adf02da-940a-4bfc-afa5-59605494a169,0adf02da-940a-4bfc-afa5-59605494a169,0,1,50a1e3bf-8624-4474-854e-21b89aaf97ed,50a1e3bf-8624-4474-854e-21b89aaf97ed,0,1,6c7b82ca-37b0-4f67-b7fa-ab1b77c0fb61,6c7b82ca-37b0-4f67-b7fa-ab1b77c0fb61,0,1,24f9d1a6-73d0-4cc7-b3ca-d36c5c7a9892,24f9d1a6-73d0-4cc7-b3ca-d36c5c7a9892,0,1,847b97a3-d0bc-45e2-b06c-932bb22d8eca,847b97a3-d0bc-45e2-b06c-932bb22d8eca,0,1,503b3eab-b7f1-4ede-8845-3290a834cec7,503b3eab-b7f1-4ede-8845-3290a834cec7,0,1,8361991a-0f30-4a03-9a4c-90556b744f53,8361991a-0f30-4a03-9a4c-90556b744f53,0,1,3116fa60-bc42-4dea-aa03-387896168690,3116fa60-bc42-4dea-aa03-387896168690,0,1,5a3cc2a8-f519-45ac-af9b-c57a4f1acdc0,5a3cc2a8-f519-45ac-af9b-c57a4f1acdc0,0,1,08427a9a-fb3a-4bc1-b2e2-72e4f89680cd,08427a9a-fb3a-4bc1-b2e2-72e4f89680cd,0,1,f9196766-4ae2-4a73-bed6-4a8838323e02,f9196766-4ae2-4a73-bed6-4a8838323e02,0,1,ca797560-8802-4bdc-b21f-7a7fd795beae,ca797560-8802-4bdc-b21f-7a7fd795beae,0,1,56242b05-d722-4d4a-82d9-517e0e169d0b,56242b05-d722-4d4a-82d9-517e0e169d0b,0,1,5504f5d1-35d8-4a47-a0e1-003fe00395c1,5504f5d1-35d8-4a47-a0e1-003fe00395c1,0,1,4eeda6df-fb48-4c88-853f-9c35e2b3a3cf,4eeda6df-fb48-4c88-853f-9c35e2b3a3cf,0,1,06afe397-1c7e-400e-bb24-f8e611d114e8,06afe397-1c7e-400e-bb24-f8e611d114e8,0,1,f0105e51-9510-426a-8aa0-af827d93ffd9,f0105e51-9510-426a-8aa0-af827d93ffd9,0,1,3df19dbf-efe7-4e31-99ad-fafb59ec1329,3df19dbf-efe7-4e31-99ad-fafb59ec1329,0,1,baf12d47-fbfe-4563-aa23-26d9f7e83169,baf12d47-fbfe-4563-aa23-26d9f7e83169,0,1,e2046f49-6fea-4bf4-92b0-92f3c8357bcf,e2046f49-6fea-4bf4-92b0-92f3c8357bcf,0,1,0ba11486-1972-4434-ab1a-5bb75cc05e9f,0ba11486-1972-4434-ab1a-5bb75cc05e9f,0,1,4ed9c555-7dd0-4577-bf62-152b4c5ec9f2,4ed9c555-7dd0-4577-bf62-152b4c5ec9f2,0,1,11fe3a42-98c4-49ba-b697-86ffb172f16f,11fe3a42-98c4-49ba-b697-86ffb172f16f,0,1,07b53818-7318-4400-8af5-457fac012755,07b53818-7318-4400-8af5-457fac012755,0,1,292b47e7-5cf3-462d-a466-dac6253a7f03,292b47e7-5cf3-462d-a466-dac6253a7f03,0,1,8ecc070f-f6fb-46b1-9636-b77aa80f8804,8ecc070f-f6fb-46b1-9636-b77aa80f8804,0,1,8405be9d-465b-4744-b04f-03933b52f02e,8405be9d-465b-4744-b04f-03933b52f02e,0,1,a8021ff9-f0ae-49ab-b8ac-5e3d8fe90d82,a8021ff9-f0ae-49ab-b8ac-5e3d8fe90d82,0,1,f09b09ce-9e3c-406a-8508-b6e7e6ec966e,f09b09ce-9e3c-406a-8508-b6e7e6ec966e,0,1,9bf55587-1ffe-42bc-b8e8-3f956956f689,9bf55587-1ffe-42bc-b8e8-3f956956f689,0,1,2f67931e-543f-457e-80fd-78ca754e2e9c,2f67931e-543f-457e-80fd-78ca754e2e9c,0,1,595e5752-36a7-4bba-8a40-26920acae01d,595e5752-36a7-4bba-8a40-26920acae01d,0,1,28801fba-c429-4afa-bdcd-b3ec3ec22fda,28801fba-c429-4afa-bdcd-b3ec3ec22fda,0,1,d1a873ae-d45b-4600-9419-e701dce3da02,d1a873ae-d45b-4600-9419-e701dce3da02,0,1,e3a31f0d-a98f-43c6-bc39-087095ae8c39,e3a31f0d-a98f-43c6-bc39-087095ae8c39,0,1,e39d8ff3-52db-4ba4-b4ea-42d5ee787076,e39d8ff3-52db-4ba4-b4ea-42d5ee787076,0,1,b1c1c2eb-f9cd-468a-8398-b0b7f611f832,b1c1c2eb-f9cd-468a-8398-b0b7f611f832,0,1,eb3dfdc7-58b8-4b1f-b079-368c262364c9,eb3dfdc7-58b8-4b1f-b079-368c262364c9,0,1,5030a318-f8f7-4ec7-80d6-6eee0772562f,5030a318-f8f7-4ec7-80d6-6eee0772562f,0,1,242e911d-e49c-4b8a-8543-cc2e079220fd,242e911d-e49c-4b8a-8543-cc2e079220fd,0,1,9ea39d31-3775-4fb8-a3f3-202e54354d49,9ea39d31-3775-4fb8-a3f3-202e54354d49,0,1,73044e20-148c-46e9-b5b5-973c91de0d61,73044e20-148c-46e9-b5b5-973c91de0d61,0,1,f8ab477c-8e78-48c0-9f99-27748b109706,f8ab477c-8e78-48c0-9f99-27748b109706,0,1,24cff6c8-6c20-4383-b97c-6afa52738960,24cff6c8-6c20-4383-b97c-6afa52738960,0,1,462e2694-750d-49ef-93ac-17a7779be68d,462e2694-750d-49ef-93ac-17a7779be68d,0,1,c24ff02e-5afc-45df-81cf-64ea2b261c2d,c24ff02e-5afc-45df-81cf-64ea2b261c2d,0,1,2d51aae9-650d-4719-a94d-2609b69a2d36,2d51aae9-650d-4719-a94d-2609b69a2d36,0,1,6025f5b5-6dc7-46b8-96e6-02823c5b4de7,6025f5b5-6dc7-46b8-96e6-02823c5b4de7,0,1,5d9d88ea-b2e4-425c-bb4d-a005e867d56c,5d9d88ea-b2e4-425c-bb4d-a005e867d56c,0,1,b76d342c-0f9d-4eb0-b49e-a9f472a4dd0d,b76d342c-0f9d-4eb0-b49e-a9f472a4dd0d,0,1,85639a53-b367-49ce-84f2-4e21d81c489b,85639a53-b367-49ce-84f2-4e21d81c489b,0,1,24b59586-178e-4efc-90ae-529553f3bb6c,24b59586-178e-4efc-90ae-529553f3bb6c,0,1,20e75dd5-222a-4100-aa43-3684991e3f21,20e75dd5-222a-4100-aa43-3684991e3f21,0,1,3c611832-4bc2-4229-a27d-d5dc82f3a498,3c611832-4bc2-4229-a27d-d5dc82f3a498,0,1,50e9eb52-02e3-44ff-9c9e-e76dbe38da63,50e9eb52-02e3-44ff-9c9e-e76dbe38da63,0,1,5dadc422-1fbd-4918-9db3-09ec72c3404e,5dadc422-1fbd-4918-9db3-09ec72c3404e,0,1,ffdaf8a0-7a8f-4756-bdfc-a0c6ae6c3869,ffdaf8a0-7a8f-4756-bdfc-a0c6ae6c3869,0,1,ab1bcabf-ffb0-4914-8ad0-b94b5aaeab1d,ab1bcabf-ffb0-4914-8ad0-b94b5aaeab1d,0,1,c5478d09-c8d3-4cc6-878e-27656ecc8409,c5478d09-c8d3-4cc6-878e-27656ecc8409,0,1,01b97d2f-40b9-4f12-8bc5-ab75fd160b7c,01b97d2f-40b9-4f12-8bc5-ab75fd160b7c,0,1,75974146-5b1a-412c-b7d5-1575704bbdab,75974146-5b1a-412c-b7d5-1575704bbdab,0,1,949f87cb-258c-4b6b-95ee-8a7491a4b64e,949f87cb-258c-4b6b-95ee-8a7491a4b64e,0,1,8a348012-99dc-4dc9-8bec-0df3caf4cdc5,8a348012-99dc-4dc9-8bec-0df3caf4cdc5,0,1,5c089988-5381-41ed-9f05-f85db46b8d94,5c089988-5381-41ed-9f05-f85db46b8d94,0,1,85a36352-1569-4ce4-aeba-477db524c36d,85a36352-1569-4ce4-aeba-477db524c36d,0,1,ebfb6f80-88f5-4046-8ae7-e11a7b0c1beb,ebfb6f80-88f5-4046-8ae7-e11a7b0c1beb,0,1,9a4a0b04-3dfb-4551-90f0-16231f64b14f,9a4a0b04-3dfb-4551-90f0-16231f64b14f,0,1,b2e656c1-f4ff-4d95-b066-4ee11ce4dea8,b2e656c1-f4ff-4d95-b066-4ee11ce4dea8,0,1,2d86d1fc-5367-47b8-804e-7f9c5fc8f3b1,2d86d1fc-5367-47b8-804e-7f9c5fc8f3b1,0,1,98edcd6b-1c50-45c6-9a4c-390827a4ba52,98edcd6b-1c50-45c6-9a4c-390827a4ba52,0,1,b99c2068-15ea-43a1-9e9f-db29647e2387,b99c2068-15ea-43a1-9e9f-db29647e2387,0,1,346cb8b7-a20e-4a06-823e-26dfb2e3e741,346cb8b7-a20e-4a06-823e-26dfb2e3e741,0,1,782cb93d-36e6-4923-b2b6-75caa3459cd6,782cb93d-36e6-4923-b2b6-75caa3459cd6,0,1,0eea37cc-47f8-4819-85da-d4991f4e58ed,0eea37cc-47f8-4819-85da-d4991f4e58ed,0,1,b51eaf45-baa1-4d1c-bcb7-a89bb8bcc26a,b51eaf45-baa1-4d1c-bcb7-a89bb8bcc26a,0,1,5f6c6be3-058a-43c8-aa33-3e89af2ea3f1,5f6c6be3-058a-43c8-aa33-3e89af2ea3f1,0,1,ced01234-9417-49ce-adf0-8cdd15e6dd7d,ced01234-9417-49ce-adf0-8cdd15e6dd7d,0,1,c1272bfc-196a-4f99-935f-e2516bc138d2,c1272bfc-196a-4f99-935f-e2516bc138d2,0,1,aa7ceeee-3b3c-49e2-95c2-bfb34e381aa3,aa7ceeee-3b3c-49e2-95c2-bfb34e381aa3,0,1,313e0688-745a-4385-b040-7ef8317a0eb7,313e0688-745a-4385-b040-7ef8317a0eb7,0,1,7fe61c5d-30bc-440d-9e40-12ff3b296616,7fe61c5d-30bc-440d-9e40-12ff3b296616,0,1,37c37f15-f84b-456b-aab6-729562dc0908,37c37f15-f84b-456b-aab6-729562dc0908,0,1,45a2569e-820c-4d7d-ba74-4a781d26bb2b,45a2569e-820c-4d7d-ba74-4a781d26bb2b,0,1,996c7873-1cc9-44f6-915b-5c6ed7ef2370,996c7873-1cc9-44f6-915b-5c6ed7ef2370,0,1,8dc08932-0988-4e82-8a5f-385c0694f9ff,8dc08932-0988-4e82-8a5f-385c0694f9ff,0,1,2767473e-79fb-4c7c-a7d1-a83a8f2df71d,2767473e-79fb-4c7c-a7d1-a83a8f2df71d,0,1,5ea29362-0ab7-4ca3-865e-bf93db5ca24b,5ea29362-0ab7-4ca3-865e-bf93db5ca24b,0,1,f5ef3f75-7d12-4284-844f-54d19d1f7e2f,f5ef3f75-7d12-4284-844f-54d19d1f7e2f,0,1,7974e41d-5af3-4636-b405-c9405d89fb53,7974e41d-5af3-4636-b405-c9405d89fb53,0,1,21fad9b6-44df-417c-ba18-de4b8af98a34,21fad9b6-44df-417c-ba18-de4b8af98a34,0,1,11c086b0-c646-4701-983d-c38758286354,11c086b0-c646-4701-983d-c38758286354,0,1,92876c9e-52ff-480d-9878-5766f4f9d12c,92876c9e-52ff-480d-9878-5766f4f9d12c,0,1,b729d739-5249-4765-85ee-fd792bb22911,b729d739-5249-4765-85ee-fd792bb22911,0,1,d65c4485-7bac-4206-9a6c-7156f4bb876d,d65c4485-7bac-4206-9a6c-7156f4bb876d,0,1,d431d1e2-13dc-495c-9de1-b5ec872eceed,d431d1e2-13dc-495c-9de1-b5ec872eceed,0,1,e8bec681-d269-41ba-9184-556cbcc27d74,e8bec681-d269-41ba-9184-556cbcc27d74,0,1,b8aaef91-f72c-4127-a494-771c13694ca4,b8aaef91-f72c-4127-a494-771c13694ca4,0,1,433a114f-3198-4ef6-bbf8-ce9b54fdb736,433a114f-3198-4ef6-bbf8-ce9b54fdb736,0,1,02ac711c-e38e-422e-ac28-ba1b298df9cc,02ac711c-e38e-422e-ac28-ba1b298df9cc,0,1,3e090261-4aa2-4ece-9f77-62df83c890b3,3e090261-4aa2-4ece-9f77-62df83c890b3,0,1,bbfd9834-12b4-49ca-bdae-5c94efa80482,bbfd9834-12b4-49ca-bdae-5c94efa80482,0,1,9292034c-24e8-49a7-9b77-7974e117847d,9292034c-24e8-49a7-9b77-7974e117847d,0,1,3327b7d4-62fc-44cc-83b4-c449bfa4e706,3327b7d4-62fc-44cc-83b4-c449bfa4e706,0,1,43ecee25-68eb-48cf-bbaa-aee71052438f,43ecee25-68eb-48cf-bbaa-aee71052438f,0,1,93799f8b-0188-4546-8815-35e733bcc2b1,93799f8b-0188-4546-8815-35e733bcc2b1,0,1,9dc3a563-11bb-40a7-8431-c1d4367ccbaf,9dc3a563-11bb-40a7-8431-c1d4367ccbaf,0,1,c9ea4e72-5f01-42ae-88e3-52e49757b26f,c9ea4e72-5f01-42ae-88e3-52e49757b26f,0,1,38d92d75-c8b8-42d6-9e0a-6dc0811a8652,38d92d75-c8b8-42d6-9e0a-6dc0811a8652,0,1,0f564dbe-6a6e-48df-9718-5cea5d608ee6,0f564dbe-6a6e-48df-9718-5cea5d608ee6,0,1,a623fef1-96eb-41ba-93fe-09162698f419,a623fef1-96eb-41ba-93fe-09162698f419,0,1,45a8d7cb-c927-4a4e-a653-13fd9b1eda10,45a8d7cb-c927-4a4e-a653-13fd9b1eda10,0,1,d8e1f92f-9efa-422d-bb21-43bd1a363cec,d8e1f92f-9efa-422d-bb21-43bd1a363cec,0,1,c1416383-bd7e-4dc4-ad88-d98ac87157fd,c1416383-bd7e-4dc4-ad88-d98ac87157fd,0,1,5e8bddc7-7836-4ec8-b6e1-0c15d228f47e,5e8bddc7-7836-4ec8-b6e1-0c15d228f47e,0,1,d5d9976a-4cc0-43f7-afd6-d43cebb07940,d5d9976a-4cc0-43f7-afd6-d43cebb07940,0,1,899f1526-d6bc-42ef-852e-7297a06db9e3,899f1526-d6bc-42ef-852e-7297a06db9e3,0,1,c694c132-1ddb-4273-818a-d3cca88c082a,c694c132-1ddb-4273-818a-d3cca88c082a,0,1,cd4da06e-c06b-4233-befc-1bc4c4db58e3,cd4da06e-c06b-4233-befc-1bc4c4db58e3,0,1,918a01fe-f753-4a4a-9200-55bbd6edaf5f,918a01fe-f753-4a4a-9200-55bbd6edaf5f,0,1,51a8a209-2a9d-419f-9fda-f7aeac68bdbe,51a8a209-2a9d-419f-9fda-f7aeac68bdbe,0,1,ef43961f-8cac-4f3f-bcee-c6bc51c4148c,ef43961f-8cac-4f3f-bcee-c6bc51c4148c,0,1,d6704410-6297-481e-a6cb-6d6aa566b4f8,d6704410-6297-481e-a6cb-6d6aa566b4f8,0,1,398937ca-b035-43bd-b0da-8c5153a87cb8,398937ca-b035-43bd-b0da-8c5153a87cb8,0,1,5b441321-bd1e-4c56-8f09-365b05985eed,5b441321-bd1e-4c56-8f09-365b05985eed,0,1,559f1e66-e8da-437a-aa27-d0e1be6619b6,559f1e66-e8da-437a-aa27-d0e1be6619b6,0,1,704d69cd-d921-4957-a004-43bd7eb4d979,704d69cd-d921-4957-a004-43bd7eb4d979,0,1,f1594682-16ac-408c-8307-a7a8db79b09f,f1594682-16ac-408c-8307-a7a8db79b09f,0,1,863aebd2-ce32-4f1f-bb3d-d6062ab187fd,863aebd2-ce32-4f1f-bb3d-d6062ab187fd,0,1,4cb814d8-cb1b-4366-b500-e820ad526b0c,4cb814d8-cb1b-4366-b500-e820ad526b0c,0,1,7da5f3b4-6330-4112-9d3a-7bb42996aa4a,7da5f3b4-6330-4112-9d3a-7bb42996aa4a,0,1,6c43df9f-ca36-415b-afec-302807820d73,6c43df9f-ca36-415b-afec-302807820d73,0,1,c7fb7551-806a-40b2-8879-14cd897b60d8,c7fb7551-806a-40b2-8879-14cd897b60d8,0,1,68337023-d573-4d04-95b6-44f73258c2a4,68337023-d573-4d04-95b6-44f73258c2a4,0,1,7cf39337-b722-486f-8e37-a62239d0ccd2,7cf39337-b722-486f-8e37-a62239d0ccd2,0,1,2571cfaf-d876-4385-a60a-1488aacf7080,2571cfaf-d876-4385-a60a-1488aacf7080,0,1,4ea1dd0a-6eab-48e4-a6a7-314d0e211d6c,4ea1dd0a-6eab-48e4-a6a7-314d0e211d6c,0,1,44398566-3189-4584-8f8a-9deb1d07ce41,44398566-3189-4584-8f8a-9deb1d07ce41,0,1,6f4e3082-9c8c-4289-8cc2-704c8d2763ce,6f4e3082-9c8c-4289-8cc2-704c8d2763ce,0,1,accfa63a-479d-4996-95bc-cdf5acdf203c,accfa63a-479d-4996-95bc-cdf5acdf203c,0,1,351998e0-8939-4dd4-a833-f4756bcc53b8,351998e0-8939-4dd4-a833-f4756bcc53b8,0,1,cd69bad8-524e-4be4-88cc-7732a88b38b8,cd69bad8-524e-4be4-88cc-7732a88b38b8,0,1,0a32248c-6994-4988-90d1-30882bc9da6b,0a32248c-6994-4988-90d1-30882bc9da6b,0,1,b57b53cb-6972-4bda-ae46-96571be1ebec,b57b53cb-6972-4bda-ae46-96571be1ebec,0,1,1a1a9636-fb72-4e4a-af96-5858442b1e61,1a1a9636-fb72-4e4a-af96-5858442b1e61,0,1,bca9cf34-9e11-4014-976a-28c4330b136e,bca9cf34-9e11-4014-976a-28c4330b136e,0,1,65fffe1a-6f36-4f50-975f-4471ad29d3ec,65fffe1a-6f36-4f50-975f-4471ad29d3ec,0,1,8fe5dad5-686a-4631-ae05-2917c33f7d83,8fe5dad5-686a-4631-ae05-2917c33f7d83,0,1,edef86c6-73bf-4e47-b62d-b2b548a732cd,edef86c6-73bf-4e47-b62d-b2b548a732cd,0,1,a1715044-d76f-4238-ba3e-989d04078d83,a1715044-d76f-4238-ba3e-989d04078d83,0,1,a7ec91a5-2ed4-4ecd-b794-fcd3bb5ea4a2,a7ec91a5-2ed4-4ecd-b794-fcd3bb5ea4a2,0,1,299c47a7-0b30-4f62-8f5c-f087ad6411fb,299c47a7-0b30-4f62-8f5c-f087ad6411fb,0,1,4d4724df-24fb-4c59-9d04-3f984906214a,4d4724df-24fb-4c59-9d04-3f984906214a,0,1,95b10bc8-39ef-43f5-b74e-f36cfa9bc806,95b10bc8-39ef-43f5-b74e-f36cfa9bc806,0,1,cb9b73ee-8531-48d9-9266-9aaa4336a612,cb9b73ee-8531-48d9-9266-9aaa4336a612,0,1,b7b80237-d642-4c21-a9ee-64fc4ed20d2f,b7b80237-d642-4c21-a9ee-64fc4ed20d2f,0,1,aeee2eea-1bb9-4e8a-ac5c-c940eaa86511,aeee2eea-1bb9-4e8a-ac5c-c940eaa86511,0,1,d042687f-0725-4611-a868-f5b4f6a3a3a8,d042687f-0725-4611-a868-f5b4f6a3a3a8,0,1,bb143340-7fff-49ef-b121-355c96613f78,bb143340-7fff-49ef-b121-355c96613f78,0,1,cd5fbbcb-19b8-4c0b-93c7-ebdf642826db,cd5fbbcb-19b8-4c0b-93c7-ebdf642826db,0,1,f2f69644-80dc-4b5e-a208-ed1de131e25e,f2f69644-80dc-4b5e-a208-ed1de131e25e,0,1,73060f72-6d08-47da-aac8-d4d2ed8f871c,73060f72-6d08-47da-aac8-d4d2ed8f871c,0,1,f3a6219e-bff5-4d36-9baa-bb214cebc2ed,f3a6219e-bff5-4d36-9baa-bb214cebc2ed,0,1,9f832f4b-ae60-4d81-9ffd-6e00f7e02560,9f832f4b-ae60-4d81-9ffd-6e00f7e02560,0,1,6f6ef6ac-5bb7-41e4-b6d5-0f068e8cb176,6f6ef6ac-5bb7-41e4-b6d5-0f068e8cb176,0,1,821225ea-1bad-49a6-a422-80d8a09baf13,821225ea-1bad-49a6-a422-80d8a09baf13,0,1,d0106f3a-8490-4277-a278-75c318ec252c,d0106f3a-8490-4277-a278-75c318ec252c,0,1,5035aa55-d557-419a-89e2-10ed0f8d109b,5035aa55-d557-419a-89e2-10ed0f8d109b,0,1,fb79315a-8d27-4c5e-9cfb-c7778dabedef,fb79315a-8d27-4c5e-9cfb-c7778dabedef,0,1,5f93d2af-64ff-41cc-8403-4a0e83160fea,5f93d2af-64ff-41cc-8403-4a0e83160fea,0,1,c12c90e4-7c40-489b-b14b-6b9442016e0f,c12c90e4-7c40-489b-b14b-6b9442016e0f,0,1,6371e288-3502-4d66-9006-b5a36107c0b7,6371e288-3502-4d66-9006-b5a36107c0b7,0,1,245814f7-028c-4c13-98eb-15412e851f81,245814f7-028c-4c13-98eb-15412e851f81,0,1,0132e564-2cd3-4930-8962-1068532f4be4,0132e564-2cd3-4930-8962-1068532f4be4,0,1,57d0f9b0-18d0-48ba-9f3c-d106f66ac602,57d0f9b0-18d0-48ba-9f3c-d106f66ac602,0,1,3a7cfd4c-c943-43c2-a8d5-6d8ab3a10fc9,3a7cfd4c-c943-43c2-a8d5-6d8ab3a10fc9,0,1,36b8b08f-0da3-4dbd-9aa8-73220ca9101d,36b8b08f-0da3-4dbd-9aa8-73220ca9101d,0,1,7021fca5-d612-43e1-927b-7f822153cf75,7021fca5-d612-43e1-927b-7f822153cf75,0,1,9fd16d51-91bb-4973-a7c4-cf4db87da8bf,9fd16d51-91bb-4973-a7c4-cf4db87da8bf,0,1,ee0a8d23-660a-492b-a813-b57394acee05,ee0a8d23-660a-492b-a813-b57394acee05,0,1,d1eda8f4-ffdd-445a-882c-6124d9f7fcf2,d1eda8f4-ffdd-445a-882c-6124d9f7fcf2,0,1,ade21e2e-349f-414b-8f35-6ae3b6a4064d,ade21e2e-349f-414b-8f35-6ae3b6a4064d,0,1,cce823c6-3bd5-4e46-91f6-8715cb72b1d5,cce823c6-3bd5-4e46-91f6-8715cb72b1d5,0,1,f3a8dd22-4469-4a3b-a7dd-78a5624b7bf0,f3a8dd22-4469-4a3b-a7dd-78a5624b7bf0,0,1,83f51efe-e2af-459a-b59f-2c036124ac23,83f51efe-e2af-459a-b59f-2c036124ac23,0,1,6ed466d7-e016-4d9c-9c0e-8deed48cbd70,6ed466d7-e016-4d9c-9c0e-8deed48cbd70,0,1,b03829e9-ba22-4584-85f0-c36d63f48242,b03829e9-ba22-4584-85f0-c36d63f48242,0,1,084a7c95-a59b-4861-b8b3-b5710a57ac60,084a7c95-a59b-4861-b8b3-b5710a57ac60,0,1,efcea6da-6746-4e00-913a-14cab38b5d84,efcea6da-6746-4e00-913a-14cab38b5d84,0,1,aff367fb-7fca-44d0-adf9-3731f14834f6,aff367fb-7fca-44d0-adf9-3731f14834f6,0,1,a2782760-dd4c-44d2-a785-814d6f610455,a2782760-dd4c-44d2-a785-814d6f610455,0,1,245162d8-6ae1-47e5-a0c9-0d5f2e5d8ea8,245162d8-6ae1-47e5-a0c9-0d5f2e5d8ea8,0,1,6581ac1f-11ef-42b8-9f3b-590bb7546e63,6581ac1f-11ef-42b8-9f3b-590bb7546e63,0,1,ce952e88-35b7-4506-81ac-d7081e50a650,ce952e88-35b7-4506-81ac-d7081e50a650,0,1,5d7a53fa-1a89-4e6e-868c-4077bd84c0ce,5d7a53fa-1a89-4e6e-868c-4077bd84c0ce,0,1,3bf1281f-7570-4633-86b9-3e953a7e6647,3bf1281f-7570-4633-86b9-3e953a7e6647,0,1,715dc289-5b14-4ee0-8716-9c15958b9069,715dc289-5b14-4ee0-8716-9c15958b9069,0,1,92707138-5004-4378-8477-f909166d319d,92707138-5004-4378-8477-f909166d319d,0,1,43661775-43bb-4d9e-bfbb-c46e7d194ca3,43661775-43bb-4d9e-bfbb-c46e7d194ca3,0,1,532637ef-be0d-4f42-9747-a88e17eb3def,532637ef-be0d-4f42-9747-a88e17eb3def,0,1,61127152-3e24-40b4-8a23-5eb6cae568ff,61127152-3e24-40b4-8a23-5eb6cae568ff,0,1,ffd987e3-e8af-4d46-881e-1e312e74dbac,ffd987e3-e8af-4d46-881e-1e312e74dbac,0,1,ad1142ed-183d-47a3-800c-997a3770e11e,ad1142ed-183d-47a3-800c-997a3770e11e,0,1,ebef37c6-4808-4683-93be-036ce19cafd5,ebef37c6-4808-4683-93be-036ce19cafd5,0,1,66364cd4-aaa5-421d-96d6-3c283c14650d,66364cd4-aaa5-421d-96d6-3c283c14650d,0,1,fdbbbf8b-dacf-436e-8d8b-1e2b8e854b17,fdbbbf8b-dacf-436e-8d8b-1e2b8e854b17,0,1,3c54d440-e908-43d6-a5cc-bb64620c82d7,3c54d440-e908-43d6-a5cc-bb64620c82d7,0,1,23a240a2-52ee-46ab-89d9-50dcee2cc8d2,23a240a2-52ee-46ab-89d9-50dcee2cc8d2,0,1,bf1dd911-8ee1-407b-acae-10c85b74baf3,bf1dd911-8ee1-407b-acae-10c85b74baf3,0,1,e924058f-25c3-4744-a565-836b824991b7,e924058f-25c3-4744-a565-836b824991b7,0,1,bc6a47a1-a3f3-4d7e-9dad-099bd3dba751,bc6a47a1-a3f3-4d7e-9dad-099bd3dba751,0,1,518dcd70-4ccf-4866-a94f-7ceec7dd2801,518dcd70-4ccf-4866-a94f-7ceec7dd2801,0,1,f9950ab5-1077-4033-bbbf-53899a1bcf33,f9950ab5-1077-4033-bbbf-53899a1bcf33,0,1,8f16763b-86f0-4ad0-b786-cce7dcb3460e,8f16763b-86f0-4ad0-b786-cce7dcb3460e,0,1,0481bc65-6a32-46b9-ae87-993ba52a29a5,0481bc65-6a32-46b9-ae87-993ba52a29a5,0,1,36ebebbb-dff1-4dbd-870b-58bd4a71fa1f,36ebebbb-dff1-4dbd-870b-58bd4a71fa1f,0,1,dbc5f419-63b0-4cbe-90ff-c0101105e46c,dbc5f419-63b0-4cbe-90ff-c0101105e46c,0,1,c708f6e9-b7a0-4046-90f3-83527da7b872,c708f6e9-b7a0-4046-90f3-83527da7b872,0,1,0006b44a-3a0c-4be4-8dd0-bd0db9ddcc4d,0006b44a-3a0c-4be4-8dd0-bd0db9ddcc4d,0,1,14256e0a-a947-42a3-8e36-47bfbb052a0c,14256e0a-a947-42a3-8e36-47bfbb052a0c,0,1,1b1aa77a-d14b-4751-a7da-0b5bac4db461,1b1aa77a-d14b-4751-a7da-0b5bac4db461,0,1,c0dcdb22-6719-4597-a781-bca1370909e5,c0dcdb22-6719-4597-a781-bca1370909e5,0,1,7a34f723-cd14-4949-a40f-7ce579bf0449,7a34f723-cd14-4949-a40f-7ce579bf0449,0,1,5cdc9ac7-bba9-4ed1-845a-607976fc4679,5cdc9ac7-bba9-4ed1-845a-607976fc4679,0,1,295f3692-0721-4c41-a69b-171ef20a5018,295f3692-0721-4c41-a69b-171ef20a5018,0,1,86c22871-6d1c-44e0-8ade-ce4bdeb23321,86c22871-6d1c-44e0-8ade-ce4bdeb23321,0,1,da51de81-4d4f-46b5-a308-7b50db6c45a7,da51de81-4d4f-46b5-a308-7b50db6c45a7,0,1,8d31ce6a-4d44-46c6-a11c-47fb33e88691,8d31ce6a-4d44-46c6-a11c-47fb33e88691,0,1,c2a8c2d3-ff13-4a13-acd4-797118c4e767,c2a8c2d3-ff13-4a13-acd4-797118c4e767,0,1,bc6adf75-8666-49f3-9703-b0014dfee123,bc6adf75-8666-49f3-9703-b0014dfee123,0,1,30632f54-b779-4857-a5cc-c53fe8887ee5,30632f54-b779-4857-a5cc-c53fe8887ee5,0,1,087480bb-8c89-4b00-a29b-b7e29926478d,087480bb-8c89-4b00-a29b-b7e29926478d,0,1,685373b7-638a-439a-8cba-703d56e4e404,685373b7-638a-439a-8cba-703d56e4e404,0,1,eafaec9c-030b-4e5f-8fa8-e17dad2feec9,eafaec9c-030b-4e5f-8fa8-e17dad2feec9,0,1,df22b227-b2c3-4e65-9706-7582f99fe59c,df22b227-b2c3-4e65-9706-7582f99fe59c,0,1,35828c88-f1ec-42e7-b189-78748931ee4a,35828c88-f1ec-42e7-b189-78748931ee4a,0,1,8a41b8f1-93fc-44e6-bf45-0d1fa9d24f4a,8a41b8f1-93fc-44e6-bf45-0d1fa9d24f4a,0,1,1cfba08f-d5e5-4833-b494-a25d0477e9c3,1cfba08f-d5e5-4833-b494-a25d0477e9c3,0,1,ae22743b-6d21-4fbb-bb4c-fee53e2b87cb,ae22743b-6d21-4fbb-bb4c-fee53e2b87cb,0,1,921a0a14-8c06-4894-95ce-423000769364,921a0a14-8c06-4894-95ce-423000769364,0,1,3805ee39-a48a-499a-9ef8-9c2a5985404f,3805ee39-a48a-499a-9ef8-9c2a5985404f,0,1,07ccfe87-e1ab-4da7-92cb-a612e0972b0b,07ccfe87-e1ab-4da7-92cb-a612e0972b0b,0,1,08c2f92c-eb05-49e7-bfc9-4a89607b9864,08c2f92c-eb05-49e7-bfc9-4a89607b9864,0,1,6d751379-89a7-49b5-93e5-578329c63d9c,6d751379-89a7-49b5-93e5-578329c63d9c,0,1,c3f156ef-947e-4ebb-883f-4f099a116063,c3f156ef-947e-4ebb-883f-4f099a116063,0,1,5e3ab0a3-c0a6-4f41-85d3-2eede4abb555,5e3ab0a3-c0a6-4f41-85d3-2eede4abb555,0,1,a065ffc3-f50b-4a78-9b84-bfc4e5515a4b,a065ffc3-f50b-4a78-9b84-bfc4e5515a4b,0,1,4cba5a06-1484-4dd1-8e35-2d702c7d96d0,4cba5a06-1484-4dd1-8e35-2d702c7d96d0,0,1,e98e9e56-2995-430c-bd3b-f1070aec15a5,e98e9e56-2995-430c-bd3b-f1070aec15a5,0,1,d35c51b0-4cb7-4f9c-8aac-6a25a1b49adf,d35c51b0-4cb7-4f9c-8aac-6a25a1b49adf,0,1,8a7546f4-bfc9-4732-bf60-43a41e2c8753,8a7546f4-bfc9-4732-bf60-43a41e2c8753,0,1,16244165-d5a4-4012-8bb5-7f5fee1111af,16244165-d5a4-4012-8bb5-7f5fee1111af,0,1,290b72ad-004f-46ab-be5e-47557543b965,290b72ad-004f-46ab-be5e-47557543b965,0,1,e1b2ccf9-5a8f-4008-86f3-d2c7cf5581d1,e1b2ccf9-5a8f-4008-86f3-d2c7cf5581d1,0,1,fa0e0792-bffb-47ce-866f-9e8dbdab17a4,fa0e0792-bffb-47ce-866f-9e8dbdab17a4,0,1,263bcd20-9878-48d4-aac4-b371ec49d8d6,263bcd20-9878-48d4-aac4-b371ec49d8d6,0,1,da1d8660-2757-4cea-bae0-c2210b9406ae,da1d8660-2757-4cea-bae0-c2210b9406ae,0,1,d60329c6-8f48-481d-82e7-18da355cb09c,d60329c6-8f48-481d-82e7-18da355cb09c,0,1,c4b14162-b25b-4099-9ec3-7251848ef08a,c4b14162-b25b-4099-9ec3-7251848ef08a,0,1,8eb5ba97-eb38-4357-8bfc-e9618280800d,8eb5ba97-eb38-4357-8bfc-e9618280800d,0,1,b72f73d5-e274-472b-871b-16af72dab603,b72f73d5-e274-472b-871b-16af72dab603,0,1,b008d184-0b61-460d-9490-89ecc1cd58ba,b008d184-0b61-460d-9490-89ecc1cd58ba,0,1,c8340e2f-6958-4bcd-8e17-499c4adfe60b,c8340e2f-6958-4bcd-8e17-499c4adfe60b,0,1,c72831cd-d064-4fe8-9603-64e6d7b8ac4d,c72831cd-d064-4fe8-9603-64e6d7b8ac4d,0,1,03f68d82-752c-45d1-bf9a-60ecd21a2c81,03f68d82-752c-45d1-bf9a-60ecd21a2c81,0,1,307e8938-e347-4eff-b2fb-fd0b8f4aa27f,307e8938-e347-4eff-b2fb-fd0b8f4aa27f,0,1,d4fffc79-2841-49a9-a382-e9e4138984df,d4fffc79-2841-49a9-a382-e9e4138984df,0,1,84e4c572-5b32-46e0-82a0-0c76d4ef5d73,84e4c572-5b32-46e0-82a0-0c76d4ef5d73,0,1,9f41f903-d316-4189-8dc0-603ea9036c1c,9f41f903-d316-4189-8dc0-603ea9036c1c,0,1,e19e70d6-8707-4dde-ae69-7bd97035ca03,e19e70d6-8707-4dde-ae69-7bd97035ca03,0,1,425b5272-1130-457d-8a05-aee8fad681d9,425b5272-1130-457d-8a05-aee8fad681d9,0,1,8d583436-f2a6-4a33-8137-1376f5754643,8d583436-f2a6-4a33-8137-1376f5754643,0,1,4a864e74-41ce-4673-a080-bc3c2ba1b8ee,4a864e74-41ce-4673-a080-bc3c2ba1b8ee,0,1,d279958e-6dd4-4bb0-a65f-c8768b4c4d96,d279958e-6dd4-4bb0-a65f-c8768b4c4d96,0,1,2d66502d-77ab-4cc9-9ccf-5433458fae9f,2d66502d-77ab-4cc9-9ccf-5433458fae9f,0,1,cff48da7-3c46-4602-83e8-90c9ea53e107,cff48da7-3c46-4602-83e8-90c9ea53e107,0,1,7155472d-c791-402c-96e1-d25612024c88,7155472d-c791-402c-96e1-d25612024c88,0,1,fb90c261-24a7-4cef-8a2c-85c0e4fdd64a,fb90c261-24a7-4cef-8a2c-85c0e4fdd64a,0,1,9005911d-ea81-48b6-bf50-1a328ff4d7be,9005911d-ea81-48b6-bf50-1a328ff4d7be,0,1,7df12006-c0c0-42a6-b852-bdced72c62e3,7df12006-c0c0-42a6-b852-bdced72c62e3,0,1,9c00987d-3c55-40eb-bae8-f36e71e4ef87,9c00987d-3c55-40eb-bae8-f36e71e4ef87,0,1,29273130-5142-48c9-8399-00e5ab4b6203,29273130-5142-48c9-8399-00e5ab4b6203,0,1,9e14cd7e-1293-4008-baf8-88df6a98abf7,9e14cd7e-1293-4008-baf8-88df6a98abf7,0,1,98e3aace-52a6-4911-8205-92165adca6de,98e3aace-52a6-4911-8205-92165adca6de,0,1,91f4dbf9-d539-4239-a95d-c1d9e14e50f8,91f4dbf9-d539-4239-a95d-c1d9e14e50f8,0,1,577e5fea-b792-4c8b-b3b3-a03a14b64b04,577e5fea-b792-4c8b-b3b3-a03a14b64b04,0,1,ba5ec2d6-1791-42b5-8e6f-04d1d18e9469,ba5ec2d6-1791-42b5-8e6f-04d1d18e9469,0,1,b18d312b-f9c3-4f37-ac77-d499e949f154,b18d312b-f9c3-4f37-ac77-d499e949f154,0,1,ace2beea-d393-412f-8b71-b845b665e2c4,ace2beea-d393-412f-8b71-b845b665e2c4,0,1,3fd4bc77-2a1b-4750-a54a-4171c8d40027,3fd4bc77-2a1b-4750-a54a-4171c8d40027,0,1,5b27fde9-fa80-48b1-aea1-73e132b9a944,5b27fde9-fa80-48b1-aea1-73e132b9a944,0,1,00bf04d6-6a8e-4b13-94cf-36c1c6090cd8,00bf04d6-6a8e-4b13-94cf-36c1c6090cd8,0,1,a747ec6b-f230-49b4-a929-7ed1ba87b078,a747ec6b-f230-49b4-a929-7ed1ba87b078,0,1,796f8fb4-d9cd-40ae-936b-8a70d2eb1121,796f8fb4-d9cd-40ae-936b-8a70d2eb1121,0,1,4802e016-a9e9-47d0-916b-b42194a1f388,4802e016-a9e9-47d0-916b-b42194a1f388,0,1,a1740d1f-1b8f-4db5-be5e-0eac44e934b8,a1740d1f-1b8f-4db5-be5e-0eac44e934b8,0,1,4062674a-4a81-494d-82bc-4984cd7c7903,4062674a-4a81-494d-82bc-4984cd7c7903,0,1,782a8801-06ca-4d63-bf8b-63d2320766d8,782a8801-06ca-4d63-bf8b-63d2320766d8,0,1,93a73123-d98c-4286-9269-7bfcedd115e8,93a73123-d98c-4286-9269-7bfcedd115e8,0,1,c5985c02-1824-4ce9-b415-1621dd2ee864,c5985c02-1824-4ce9-b415-1621dd2ee864,0,1,993ce747-cdc9-445f-ad7d-daf53cd5f7e9,993ce747-cdc9-445f-ad7d-daf53cd5f7e9,0,1,e819aaf6-3dfb-492a-8a4a-50a7c6854790,e819aaf6-3dfb-492a-8a4a-50a7c6854790,0,1,62b95ba1-f213-42fb-90f3-a03e8094bc9e,62b95ba1-f213-42fb-90f3-a03e8094bc9e,0,1,619b534d-5605-40d3-9b8c-4443a21d7795,619b534d-5605-40d3-9b8c-4443a21d7795,0,1,a010bbf4-d547-4576-9797-28e3096ffed3,a010bbf4-d547-4576-9797-28e3096ffed3,0,1,a44c3eb2-1054-41ca-82e8-fc35336e7009,a44c3eb2-1054-41ca-82e8-fc35336e7009,0,1,01f67911-4ca7-4668-b970-62c299b98e56,01f67911-4ca7-4668-b970-62c299b98e56,0,1,20c89c94-f77f-4e14-8c97-2a70c1419ce3,20c89c94-f77f-4e14-8c97-2a70c1419ce3,0,1,1c09bf33-9b54-4bfd-bc92-e7324025fab0,1c09bf33-9b54-4bfd-bc92-e7324025fab0,0,1,8d7750e9-899f-4434-8702-44cd02681779,8d7750e9-899f-4434-8702-44cd02681779,0,1,d85244dc-c417-4e69-9aa7-7ad313ecb940,d85244dc-c417-4e69-9aa7-7ad313ecb940,0,1,3bebf5e9-68bb-48dc-a39d-cbdca2dbecb1,3bebf5e9-68bb-48dc-a39d-cbdca2dbecb1,0,1,cd392ef0-dedb-4f83-9a2c-a24190ee0dc0,cd392ef0-dedb-4f83-9a2c-a24190ee0dc0,0,1,bb2f0c1c-3cfb-4a26-b6de-5bbeb5614587,bb2f0c1c-3cfb-4a26-b6de-5bbeb5614587,0,1,0713de12-87d5-4877-bd8a-2b6466df67df,0713de12-87d5-4877-bd8a-2b6466df67df,0,1,b848aafc-44fb-4dfe-8eec-233dc08fbbb6,b848aafc-44fb-4dfe-8eec-233dc08fbbb6,0,1,c4d7c569-4649-4f98-a048-45f3c5933670,c4d7c569-4649-4f98-a048-45f3c5933670,0,1,6dc05d69-bd54-4e8a-8985-c2ddfa0aaffb,6dc05d69-bd54-4e8a-8985-c2ddfa0aaffb,0,1,426cbebb-880b-49c5-b046-83c5e071273e,426cbebb-880b-49c5-b046-83c5e071273e,0,1,ad08b104-01f8-4900-a06c-baa1d55eba84,ad08b104-01f8-4900-a06c-baa1d55eba84,0,1,9352d10d-188f-4074-8dd1-7be5c11525e3,9352d10d-188f-4074-8dd1-7be5c11525e3,0,1,1933634a-6f10-48e7-99f0-60ac338f7832,1933634a-6f10-48e7-99f0-60ac338f7832,0,1,655deec5-c079-4748-8521-b3f10c243394,655deec5-c079-4748-8521-b3f10c243394,0,1,f6d4d818-d54c-4337-82cf-abd5e6dbe770,f6d4d818-d54c-4337-82cf-abd5e6dbe770,0,1,656c447b-291f-4e62-81ac-1c004841aa72,656c447b-291f-4e62-81ac-1c004841aa72,0,1,c9a06c8d-2f6d-4e03-bc62-a1a19f17faf3,c9a06c8d-2f6d-4e03-bc62-a1a19f17faf3,0,1,5ba93404-58ad-4321-9a62-27db828f75f6,5ba93404-58ad-4321-9a62-27db828f75f6,0,1,3da20e86-1d83-4935-b425-a91392dc8f35,3da20e86-1d83-4935-b425-a91392dc8f35,0,1,b56f25d2-72a9-4d80-8998-77ac3097c873,b56f25d2-72a9-4d80-8998-77ac3097c873,0,1,03bd775a-e0a1-4205-82ce-6068e73ad134,03bd775a-e0a1-4205-82ce-6068e73ad134,0,1,40bed47b-7754-4a70-b51a-47385fd46e83,40bed47b-7754-4a70-b51a-47385fd46e83,0,1,773ef914-5e7e-4ec1-bcdb-b2d111b560e6,773ef914-5e7e-4ec1-bcdb-b2d111b560e6,0,1,1e5a4f93-1ab9-4775-9538-2a1772215d89,1e5a4f93-1ab9-4775-9538-2a1772215d89,0,1,c25db165-0734-4fef-b161-e5164954a616,c25db165-0734-4fef-b161-e5164954a616,0,1,4f97b909-68f9-482a-b958-b4caa9b83763,4f97b909-68f9-482a-b958-b4caa9b83763,0,1,c31e34db-41ff-4db3-a4d0-f780f67070f6,c31e34db-41ff-4db3-a4d0-f780f67070f6,0,1,7a014fcb-a4b8-4c1c-b0de-21907a917c25,7a014fcb-a4b8-4c1c-b0de-21907a917c25,0,1,1688ef5d-72df-4bc4-a879-89033d466ad7,1688ef5d-72df-4bc4-a879-89033d466ad7,0,1,30f18fbf-4240-4708-a71a-189f8fc324f3,30f18fbf-4240-4708-a71a-189f8fc324f3,0,1,344cb0de-315d-4d05-93f8-8a1f53208470,344cb0de-315d-4d05-93f8-8a1f53208470,0,1,cd869887-0b0e-43db-8b51-04fe4a1341d5,cd869887-0b0e-43db-8b51-04fe4a1341d5,0,1,98aa5d5e-6c0e-4b9b-a3fa-335635d15217,98aa5d5e-6c0e-4b9b-a3fa-335635d15217,0,1,a7973409-b18e-4b88-ad50-e2ae89470d8f,a7973409-b18e-4b88-ad50-e2ae89470d8f,0,1,a537875e-492e-4cf2-96e9-e2e97bb206da,a537875e-492e-4cf2-96e9-e2e97bb206da,0,1,085a08f3-9d93-429d-9b1b-9065ab8363f7,085a08f3-9d93-429d-9b1b-9065ab8363f7,0,1,a530c0a1-c1d2-40bb-9d0e-320074dbb684,a530c0a1-c1d2-40bb-9d0e-320074dbb684,0,1,55c63580-16f1-4d6f-a40b-e630f71ebb98,55c63580-16f1-4d6f-a40b-e630f71ebb98,0,1,0a136ad9-22ad-4ba7-a31a-40a193b49d26,0a136ad9-22ad-4ba7-a31a-40a193b49d26,0,1,208c7b8c-3df9-4441-8ebf-34ffa81572a2,208c7b8c-3df9-4441-8ebf-34ffa81572a2,0,1,8c17fd7c-74d7-496a-a843-42022afb0707,8c17fd7c-74d7-496a-a843-42022afb0707,0,1,b456d820-8034-4381-960d-66d9f86b0a4b,b456d820-8034-4381-960d-66d9f86b0a4b,0,1,bd55fd03-cf67-4333-a554-98e03d18f780,bd55fd03-cf67-4333-a554-98e03d18f780,0,1,6eac5f7b-0952-4c94-9028-529b14ffcd4f,6eac5f7b-0952-4c94-9028-529b14ffcd4f,0,1,1a7c774d-5b86-4051-b797-3081e19fa30a,1a7c774d-5b86-4051-b797-3081e19fa30a,0,1,00949768-5833-4fe2-8752-b009d1bceef8,00949768-5833-4fe2-8752-b009d1bceef8,0,1,167455d1-6658-409f-834c-f6ccfe7b25de,167455d1-6658-409f-834c-f6ccfe7b25de,0,1,c5b3ca21-8f7b-4933-853c-7d95b17b5631,c5b3ca21-8f7b-4933-853c-7d95b17b5631,0,1,8b0faa1e-09da-4ba4-894e-e86abc5d39df,8b0faa1e-09da-4ba4-894e-e86abc5d39df,0,1,cb50b309-1b6c-400c-9e9e-67204dcccaae,cb50b309-1b6c-400c-9e9e-67204dcccaae,0,1,e2b482cb-6954-4e6a-abe9-d0a01f64b73a,e2b482cb-6954-4e6a-abe9-d0a01f64b73a,0,1,b8a966ba-3452-44df-91d0-7040ecd3e4c2,b8a966ba-3452-44df-91d0-7040ecd3e4c2,0,1,80d6883d-c608-4fe5-acae-78bc45e40e5f,80d6883d-c608-4fe5-acae-78bc45e40e5f,0,1,213b173a-c3b7-449c-a618-d479c4dc38e8,213b173a-c3b7-449c-a618-d479c4dc38e8,0,1,7a64dffc-5cfe-41e2-bd55-fbf4957559a4,7a64dffc-5cfe-41e2-bd55-fbf4957559a4,0,1,a78249aa-ca9f-4bee-b00d-68ff59ea81a4,a78249aa-ca9f-4bee-b00d-68ff59ea81a4,0,1,7534148d-0124-49a2-a446-c6205d153153,7534148d-0124-49a2-a446-c6205d153153,0,1,32ed8a10-7177-4e45-866e-04a1b6831570,32ed8a10-7177-4e45-866e-04a1b6831570,0,1,e2a90d7a-5480-47cd-b296-8d60d8baf7f9,e2a90d7a-5480-47cd-b296-8d60d8baf7f9,0,1,8190a432-1037-4334-b2c7-bae39f7f9442,8190a432-1037-4334-b2c7-bae39f7f9442,0,1,4733e5c1-8198-408b-8903-866d3b0fdc43,4733e5c1-8198-408b-8903-866d3b0fdc43,0,1,e1fc5146-37c5-4207-af05-7250976bd406,e1fc5146-37c5-4207-af05-7250976bd406,0,1,60038cd9-8d01-44b1-9d3f-f3a31e59e5db,60038cd9-8d01-44b1-9d3f-f3a31e59e5db,0,1,f0bfb98b-cc43-4b6c-8166-9b81b4c22cb0,f0bfb98b-cc43-4b6c-8166-9b81b4c22cb0,0,1,f5e27159-789a-4d34-ac51-fd99d753b83a,f5e27159-789a-4d34-ac51-fd99d753b83a,0,1,f1cb02ff-a2f0-4a34-93fa-e47c6e210ee1,f1cb02ff-a2f0-4a34-93fa-e47c6e210ee1,0,1,981a74f4-cdc2-4016-b462-9b5fd0d6de4d,981a74f4-cdc2-4016-b462-9b5fd0d6de4d,0,1,1d89e2b7-8f66-4210-8ab4-29efde5e5295,1d89e2b7-8f66-4210-8ab4-29efde5e5295,0,1,fafff964-8daa-4921-9d53-fd6be3878d94,fafff964-8daa-4921-9d53-fd6be3878d94,0,1,7183d525-212a-42f3-a7e5-eb9deaeaa4a3,7183d525-212a-42f3-a7e5-eb9deaeaa4a3,0,1,b82b27cc-e81c-4b7c-9833-ea4f2ce21edb,b82b27cc-e81c-4b7c-9833-ea4f2ce21edb,0,1,4347f77e-bad9-4525-90a0-794787f03585,4347f77e-bad9-4525-90a0-794787f03585,0,1,cfde3330-2bed-4273-8d69-c213ebdde247,cfde3330-2bed-4273-8d69-c213ebdde247,0,1,2d6ca049-89a5-437e-971c-b8e42f61b460,2d6ca049-89a5-437e-971c-b8e42f61b460,0,1,c450ebe1-4223-4a7a-b9fa-374d5c13dc8c,c450ebe1-4223-4a7a-b9fa-374d5c13dc8c,0,1,271d58d0-4449-40cc-bae9-cc4c50eebd9b,271d58d0-4449-40cc-bae9-cc4c50eebd9b,0,1,58df9322-c786-4dd1-af49-7cd164b378da,58df9322-c786-4dd1-af49-7cd164b378da,0,1,8d48de7f-61d6-4462-9c14-f728206a482c,8d48de7f-61d6-4462-9c14-f728206a482c,0,1,a87e890a-8924-4f56-9e37-04579b95297a,a87e890a-8924-4f56-9e37-04579b95297a,0,1,c71d4fa4-86b0-41e2-8b6a-cfb91e131eaf,c71d4fa4-86b0-41e2-8b6a-cfb91e131eaf,0,1,4c1f2581-ee42-4df5-9169-20205a18a9be,4c1f2581-ee42-4df5-9169-20205a18a9be,0,1,bb3d9ea3-8895-4950-9ee9-4249ca983d48,bb3d9ea3-8895-4950-9ee9-4249ca983d48,0,1,86ea21fa-5ecc-4d81-b6ad-d71e7ed39009,86ea21fa-5ecc-4d81-b6ad-d71e7ed39009,0,1,b806d2b6-bbd1-4abd-9471-7791603a2fcf,b806d2b6-bbd1-4abd-9471-7791603a2fcf,0,1,d7aa519b-9a2e-4946-bd06-9ac22bb7c1e4,d7aa519b-9a2e-4946-bd06-9ac22bb7c1e4,0,1,ecee1ec8-aa1f-4b90-a1b3-2538a53c0dd7,ecee1ec8-aa1f-4b90-a1b3-2538a53c0dd7,0,1,34f50dd9-de16-4013-a2ef-6595d9c28930,34f50dd9-de16-4013-a2ef-6595d9c28930,0,1,56fcca65-3429-4409-bce7-f434f6530a74,56fcca65-3429-4409-bce7-f434f6530a74,0,1,5236ca8d-a4a6-4df8-a6a3-5cfe02c49aeb,5236ca8d-a4a6-4df8-a6a3-5cfe02c49aeb,0,1,bcfabf25-ae2f-4f73-836c-2cab3617a0b6,bcfabf25-ae2f-4f73-836c-2cab3617a0b6,0,1,b286f047-a4d0-4808-b1b4-27997ead6d49,b286f047-a4d0-4808-b1b4-27997ead6d49,0,1,49da2d3a-657a-4cfd-8e37-422b96d2cda5,49da2d3a-657a-4cfd-8e37-422b96d2cda5,0,1,fced16ae-abee-4fbe-9582-dfd368d5610a,fced16ae-abee-4fbe-9582-dfd368d5610a,0,1,afe60bad-1585-487f-9a39-9b9e031f9576,afe60bad-1585-487f-9a39-9b9e031f9576,0,1,4c4f0475-bd11-40c8-af0d-8affec6f838d,4c4f0475-bd11-40c8-af0d-8affec6f838d,0,1,7aee36ac-bbd1-4b06-8266-b7325fb9ce3c,7aee36ac-bbd1-4b06-8266-b7325fb9ce3c,0,1,855439d7-a621-48f5-b6d9-bc2bbd11ad90,855439d7-a621-48f5-b6d9-bc2bbd11ad90,0,1,4e0ec0f0-eb44-41b0-b950-88fdb6ac0db2,4e0ec0f0-eb44-41b0-b950-88fdb6ac0db2,0,1,2f25e742-555b-4db8-bff2-2d345ce2a93a,2f25e742-555b-4db8-bff2-2d345ce2a93a,0,1,303d8c17-4303-4f1d-8bed-51cd7ea0a4b2,303d8c17-4303-4f1d-8bed-51cd7ea0a4b2,0,1,46affd3a-f31c-4432-bd58-2f2b1ed9bc4e,46affd3a-f31c-4432-bd58-2f2b1ed9bc4e,0,1,a7fee9d3-569d-4b5b-bd47-44790e0095f5,a7fee9d3-569d-4b5b-bd47-44790e0095f5,0,1,a258fe12-7e55-4f89-86fa-962b1d2947ac,a258fe12-7e55-4f89-86fa-962b1d2947ac,0,1,93701593-5ac8-4266-b471-7e9ed35a9c3e,93701593-5ac8-4266-b471-7e9ed35a9c3e,0,1,0fdb864e-ede9-4777-835c-0804968ee544,0fdb864e-ede9-4777-835c-0804968ee544,0,1,04c45a51-4a8e-48fa-a39c-f67ce2079fc4,04c45a51-4a8e-48fa-a39c-f67ce2079fc4,0,1,b46546fe-3d6b-473f-a7cb-ff3b3ae0bafe,b46546fe-3d6b-473f-a7cb-ff3b3ae0bafe,0,1,e7b1810c-8e6c-4759-9e6f-c754b5a1ac77,e7b1810c-8e6c-4759-9e6f-c754b5a1ac77,0,1,5dee9814-fe38-4631-8148-8d6c87ef6f47,5dee9814-fe38-4631-8148-8d6c87ef6f47,0,1,37d17053-5c2b-4972-b6a5-a589f2ddbde6,37d17053-5c2b-4972-b6a5-a589f2ddbde6,0,1,c349968a-3f87-425b-8efb-d847934dee4b,c349968a-3f87-425b-8efb-d847934dee4b,0,1,3bb8dc33-970c-4c58-9036-ce716d963847,3bb8dc33-970c-4c58-9036-ce716d963847,0,1,fae0d2e0-1bcd-4a77-86d6-407ca05c1c95,fae0d2e0-1bcd-4a77-86d6-407ca05c1c95,0,1,b3ff39fa-f665-4d01-9a2a-69722e6b1071,b3ff39fa-f665-4d01-9a2a-69722e6b1071,0,1,0abacb0a-ce00-474e-8aec-35685c51ddef,0abacb0a-ce00-474e-8aec-35685c51ddef,0,1,ae407b17-03aa-4268-8603-58d6714dae89,ae407b17-03aa-4268-8603-58d6714dae89,0,1,5c0ce79b-97a9-4917-9b02-a4548a97d5a1,5c0ce79b-97a9-4917-9b02-a4548a97d5a1,0,1,c552cfac-d3ef-4b63-a0b9-7c79261ff9f3,c552cfac-d3ef-4b63-a0b9-7c79261ff9f3,0,1,5bb6e52c-ac26-4143-8e90-f04f703f823b,5bb6e52c-ac26-4143-8e90-f04f703f823b,0,1,579baaa4-6493-4d99-8744-6399757295c7,579baaa4-6493-4d99-8744-6399757295c7,0,1,ae6d0e12-8857-476c-b4b2-f03295cbed3e,ae6d0e12-8857-476c-b4b2-f03295cbed3e,0,1,7ee1e0d0-9735-45da-bd24-c0dbabfd5b1e,7ee1e0d0-9735-45da-bd24-c0dbabfd5b1e,0,1,bd0e3bd4-1207-41ea-8dfc-afa8f7d08cc2,bd0e3bd4-1207-41ea-8dfc-afa8f7d08cc2,0,1,51d83895-5692-4479-9612-07c790d19dff,51d83895-5692-4479-9612-07c790d19dff,0,1,9c1325af-7492-42be-b3af-51b692534510,9c1325af-7492-42be-b3af-51b692534510,0,1,dface15c-cd65-4fb1-b4dd-b513086d3f8e,dface15c-cd65-4fb1-b4dd-b513086d3f8e,0,1,d854b528-8456-4453-9c2d-4f96caf10481,d854b528-8456-4453-9c2d-4f96caf10481,0,1,245f870e-a53a-4d86-aa0a-c0c7709b8acb,245f870e-a53a-4d86-aa0a-c0c7709b8acb,0,1,476f6bfa-b10c-4e0f-8499-23c652715b3f,476f6bfa-b10c-4e0f-8499-23c652715b3f,0,1,65c9754b-53f6-4616-a9d4-74826f7b0ced,65c9754b-53f6-4616-a9d4-74826f7b0ced,0,1,eca2b076-d218-4d1c-948b-7894edf9fa49,eca2b076-d218-4d1c-948b-7894edf9fa49,0,1,d6969c1e-e13c-4542-abb7-9cf6bb50b8e2,d6969c1e-e13c-4542-abb7-9cf6bb50b8e2,0,1,ccd91f94-d3f1-4aa3-90cf-081d72c4cab1,ccd91f94-d3f1-4aa3-90cf-081d72c4cab1,0,1,aa7d5ca4-3c02-4ca1-a790-2435ee9f9f02,aa7d5ca4-3c02-4ca1-a790-2435ee9f9f02,0,1,b7e85f5c-4312-44c6-895a-3f636a8c78d8,b7e85f5c-4312-44c6-895a-3f636a8c78d8,0,1,3b6e7ee6-0ef5-464a-a01a-6143479c7a61,3b6e7ee6-0ef5-464a-a01a-6143479c7a61,0,1,1969e8d1-0a82-44cb-a0d4-e5badb1d28d4,1969e8d1-0a82-44cb-a0d4-e5badb1d28d4,0,1,a1afacc5-f49a-4df2-a44d-479594d50179,a1afacc5-f49a-4df2-a44d-479594d50179,0,1,fe70eba3-7477-4a38-a511-d69960abb928,fe70eba3-7477-4a38-a511-d69960abb928,0,1,6534ea96-2145-49e6-9739-f59459dc7f6b,6534ea96-2145-49e6-9739-f59459dc7f6b,0,1,f49bffa0-cad6-4801-b82e-21aa580e72e6,f49bffa0-cad6-4801-b82e-21aa580e72e6,0,1,bbbfb817-8db3-4415-86c3-af028276d6e9,bbbfb817-8db3-4415-86c3-af028276d6e9,0,1,6a91112c-f6cc-47a0-9d26-a36c7702af7d,6a91112c-f6cc-47a0-9d26-a36c7702af7d,0,1,cb92dc2e-6053-4233-a408-4464514b1257,cb92dc2e-6053-4233-a408-4464514b1257,0,1,8cd65ad3-a7a3-46f6-9061-e8751fd5073e,8cd65ad3-a7a3-46f6-9061-e8751fd5073e,0,1,85550a7a-8fe0-4296-ace5-63cf053536b4,85550a7a-8fe0-4296-ace5-63cf053536b4,0,1,cf1bd9cd-2ef2-4868-b6c0-5160860690f7,cf1bd9cd-2ef2-4868-b6c0-5160860690f7,0,1,3f8b6411-6606-4d27-891e-7c77be47c5f9,3f8b6411-6606-4d27-891e-7c77be47c5f9,0,1,bed3f0b2-40c6-4323-9bca-cb8864e38ec0,bed3f0b2-40c6-4323-9bca-cb8864e38ec0,0,1,5eb4ca7f-027a-4860-a167-e6b424527e7a,5eb4ca7f-027a-4860-a167-e6b424527e7a,0,1,f9b98ba5-1fa8-42a4-b1a2-dd71874083cb,f9b98ba5-1fa8-42a4-b1a2-dd71874083cb,0,1,6871015f-d959-4a77-a091-a23cb4ebd8f9,6871015f-d959-4a77-a091-a23cb4ebd8f9,0,1,e5e1631b-a494-4e73-b356-b4330b84cc88,e5e1631b-a494-4e73-b356-b4330b84cc88,0,1,f8f0857f-2c75-471a-ae0b-a3a265e1eb25,f8f0857f-2c75-471a-ae0b-a3a265e1eb25,0,1,a23f97fb-7ac9-4941-a2c6-bbff6c36ac12,a23f97fb-7ac9-4941-a2c6-bbff6c36ac12,0,1,80cf54ed-8677-4c89-a378-0abef6c64010,80cf54ed-8677-4c89-a378-0abef6c64010,0,1,f0dec7b3-2d6a-44ce-a1da-9c71ccd37539,f0dec7b3-2d6a-44ce-a1da-9c71ccd37539,0,1,56ee3afd-5ae6-421e-b9f3-26505e40f100,56ee3afd-5ae6-421e-b9f3-26505e40f100,0,1,63c9a839-78b2-4706-b380-5aedf6914930,63c9a839-78b2-4706-b380-5aedf6914930,0,1,40f5c1cb-2654-4738-bb44-6734b0e3490b,40f5c1cb-2654-4738-bb44-6734b0e3490b,0,1,2ec484b1-95eb-43a7-9430-1c1ef49f05af,2ec484b1-95eb-43a7-9430-1c1ef49f05af,0,1,1a314ce2-03bc-4267-89a9-bb5bb866f552,1a314ce2-03bc-4267-89a9-bb5bb866f552,0,1,e3b783a6-5ea2-4cd4-955b-df63d93c1f25,e3b783a6-5ea2-4cd4-955b-df63d93c1f25,0,1,f8ab62ad-7776-49ae-b1bb-51bea9a9992b,f8ab62ad-7776-49ae-b1bb-51bea9a9992b,0,1,e859dd18-8baf-49c0-b7a0-1205b6c125d3,e859dd18-8baf-49c0-b7a0-1205b6c125d3,0,1,da59378e-0a97-4cff-977b-cc51967068ee,da59378e-0a97-4cff-977b-cc51967068ee,0,1,bbaad46d-f60d-49e6-a077-075366bca47e,bbaad46d-f60d-49e6-a077-075366bca47e,0,1,0d9f5703-91e4-4769-bedd-5bd974f2f617,0d9f5703-91e4-4769-bedd-5bd974f2f617,0,1,926cdf17-1929-43d6-8205-858aab558ad9,926cdf17-1929-43d6-8205-858aab558ad9,0,1,5ec6838f-2d70-4f91-b41b-16adfe8ed587,5ec6838f-2d70-4f91-b41b-16adfe8ed587,0,1,6420ad7e-61ca-4af9-9715-f2b0c3e2c58f,6420ad7e-61ca-4af9-9715-f2b0c3e2c58f,0,1,bee8b8a0-f058-44cb-822c-620351567627,bee8b8a0-f058-44cb-822c-620351567627,0,1,26365e29-903b-47fd-ad96-e0d87f5d6e87,26365e29-903b-47fd-ad96-e0d87f5d6e87,0,1,569180cb-ce54-4267-94b9-332e35e3c17d,569180cb-ce54-4267-94b9-332e35e3c17d,0,1,9ec6fc35-e84e-4f82-b616-5c02e945cc8f,9ec6fc35-e84e-4f82-b616-5c02e945cc8f,0,1,a2c42946-1cdb-457a-a45b-97781cfb4a15,a2c42946-1cdb-457a-a45b-97781cfb4a15,0,1,20adf54c-044c-4bea-8028-b6d20917a030,20adf54c-044c-4bea-8028-b6d20917a030,0,1,dea6b05f-d3e1-4ff4-8f71-6a0c18134e94,dea6b05f-d3e1-4ff4-8f71-6a0c18134e94,0,1,fcb97a46-d5fd-4bb5-b899-17723a9fe346,fcb97a46-d5fd-4bb5-b899-17723a9fe346,0,1,a666af62-aa5d-4b2b-b9e5-017d1c93ae6a,a666af62-aa5d-4b2b-b9e5-017d1c93ae6a,0,1,7604b15a-8c5e-4515-84b9-c1d36f9efd0a,7604b15a-8c5e-4515-84b9-c1d36f9efd0a,0,1,a1a44832-6026-47ae-affd-5b6d52e84307,a1a44832-6026-47ae-affd-5b6d52e84307,0,1,d2fd8650-d13a-411d-8206-61b16016bd82,d2fd8650-d13a-411d-8206-61b16016bd82,0,1,f98bcdb8-6eed-4b4f-b3da-d80b5e8bed44,f98bcdb8-6eed-4b4f-b3da-d80b5e8bed44,0,1,4033eb31-8281-402a-afff-431fa36e589e,4033eb31-8281-402a-afff-431fa36e589e,0,1,5a1e1da5-7307-4f48-bb1c-2977fc4d7cef,5a1e1da5-7307-4f48-bb1c-2977fc4d7cef,0,1,f59488c7-4643-4988-8043-5c9724e04279,f59488c7-4643-4988-8043-5c9724e04279,0,1,cfe022b5-7647-4b5c-a2bd-f5d313f4a9db,cfe022b5-7647-4b5c-a2bd-f5d313f4a9db,0,1,aa29e1be-4e99-4136-8dc1-0124908979ad,aa29e1be-4e99-4136-8dc1-0124908979ad,0,1,0d76799d-7fc7-446b-88fb-dca839de00a5,0d76799d-7fc7-446b-88fb-dca839de00a5,0,1,cb5674c3-0d91-4948-bafd-d9ef44a2a69d,cb5674c3-0d91-4948-bafd-d9ef44a2a69d,0,1,ea4a869c-861c-412c-a3be-de1c57d1a251,ea4a869c-861c-412c-a3be-de1c57d1a251,0,1,eeafcc8c-fbe2-4bb4-8b8a-cf663208258d,eeafcc8c-fbe2-4bb4-8b8a-cf663208258d,0,1,6a3bd39a-59cb-4763-b49f-7ab67167a8b7,6a3bd39a-59cb-4763-b49f-7ab67167a8b7,0,1,50ac390d-324f-40bd-b3df-0468a63b94b6,50ac390d-324f-40bd-b3df-0468a63b94b6,0,1,80337710-2c60-45c4-ae1f-bb42731fb611,80337710-2c60-45c4-ae1f-bb42731fb611,0,1,9dcf467e-7701-4c7b-b747-95f4d9b9295c,9dcf467e-7701-4c7b-b747-95f4d9b9295c,0,1,77149f7a-8a76-4569-9487-991c41e132ef,77149f7a-8a76-4569-9487-991c41e132ef,0,1,9e1be65e-986f-4d21-91f0-15c66db0c947,9e1be65e-986f-4d21-91f0-15c66db0c947,0,1,75a0f8f1-6d8d-47d0-81c5-20b5e55b9cd1,75a0f8f1-6d8d-47d0-81c5-20b5e55b9cd1,0,1,d2fe4578-a1f8-4586-b052-fa71d25365c9,d2fe4578-a1f8-4586-b052-fa71d25365c9,0,1,f31f3dab-5796-47ac-a54d-3081f8cad817,f31f3dab-5796-47ac-a54d-3081f8cad817,0,1,cd59707e-b9e4-4038-8203-ae22a8060e8d,cd59707e-b9e4-4038-8203-ae22a8060e8d,0,1,db497857-33d3-49a1-b328-dfc62c973ecb,db497857-33d3-49a1-b328-dfc62c973ecb,0,1,139c001c-7b07-465a-9187-399ad32d294f,139c001c-7b07-465a-9187-399ad32d294f,0,1,5d228ce4-069e-4f98-beed-b8e1de17c3d9,5d228ce4-069e-4f98-beed-b8e1de17c3d9,0,1,9770fc09-87bf-4fce-9b0d-410efd30edae,9770fc09-87bf-4fce-9b0d-410efd30edae,0,1,f3d8590a-dcfa-4d41-8d03-642b99ffa040,f3d8590a-dcfa-4d41-8d03-642b99ffa040,0,1,3d73d5ff-995e-40ed-a401-cec2a3d12c8f,3d73d5ff-995e-40ed-a401-cec2a3d12c8f,0,1,20156709-1481-4007-8e89-9ce79fc589fc,20156709-1481-4007-8e89-9ce79fc589fc,0,1,fbcda361-0ef2-47b4-ba1c-1d1952898bd3,fbcda361-0ef2-47b4-ba1c-1d1952898bd3,0,1,7e7c5abd-b645-4de5-a40e-5805ec4456e2,7e7c5abd-b645-4de5-a40e-5805ec4456e2,0,1,763a16c3-a728-4b65-a485-705990310b4a,763a16c3-a728-4b65-a485-705990310b4a,0,1,65338920-c744-4d1e-b351-848b90a3feda,65338920-c744-4d1e-b351-848b90a3feda,0,1,2aedb1ac-caf1-45c7-913e-82a36637d5d4,2aedb1ac-caf1-45c7-913e-82a36637d5d4,0,1,56177464-5e9f-4598-96bc-eb311993c503,56177464-5e9f-4598-96bc-eb311993c503,0,1,c2308e60-2844-4bd8-bc8a-c9c20e5fc62d,c2308e60-2844-4bd8-bc8a-c9c20e5fc62d,0,1,bdfe65f4-4174-4e66-915c-943137981cf0,bdfe65f4-4174-4e66-915c-943137981cf0,0,1,5271de2d-d3a0-4128-90e0-cd8e1ea2ad30,5271de2d-d3a0-4128-90e0-cd8e1ea2ad30,0,1,c895d58a-5be1-4157-81af-f4f6db9b4b9e,c895d58a-5be1-4157-81af-f4f6db9b4b9e,0,1,8ce6cc1a-8570-4704-b9a3-44e815b2e753,8ce6cc1a-8570-4704-b9a3-44e815b2e753,0,1,71aa2bf7-85c9-40f3-a9b0-f6d666eddd28,71aa2bf7-85c9-40f3-a9b0-f6d666eddd28,0,1,497cbe4d-586d-48a2-8e98-d20e3e09ed42,497cbe4d-586d-48a2-8e98-d20e3e09ed42,0,1,150c9d05-4ccc-4cb7-879d-b1d9c3534343,150c9d05-4ccc-4cb7-879d-b1d9c3534343,0,1,38b7679d-3739-4572-baf2-d8c7b2a94f0a,38b7679d-3739-4572-baf2-d8c7b2a94f0a,0,1,1470f052-f032-46bc-b1ee-54555e725dfd,1470f052-f032-46bc-b1ee-54555e725dfd,0,1,4019a5e9-1f50-44b9-98ba-87c07a0ce4e5,4019a5e9-1f50-44b9-98ba-87c07a0ce4e5,0,1,7d336fdd-5cbf-4c92-a783-f451f7590502,7d336fdd-5cbf-4c92-a783-f451f7590502,0,1,ee8af8ee-e49a-4511-9a91-48814ab99d23,ee8af8ee-e49a-4511-9a91-48814ab99d23,0,1,3a7d9d49-b5e5-4c5c-958e-a4c6afda8b9d,3a7d9d49-b5e5-4c5c-958e-a4c6afda8b9d,0,1,bc10ad8f-383c-469a-8c0e-60805161055b,bc10ad8f-383c-469a-8c0e-60805161055b,0,1,86760ecb-2ddd-40ce-bc4f-94c23027a55e,86760ecb-2ddd-40ce-bc4f-94c23027a55e,0,1,6fbf844e-ee8d-490f-9177-6392d262312f,6fbf844e-ee8d-490f-9177-6392d262312f,0,1,703a3e8a-0204-4e8f-8fa0-a2ed1aeb7662,703a3e8a-0204-4e8f-8fa0-a2ed1aeb7662,0,1,f5d90a5a-1adb-49d6-8640-2e4054bdb99f,f5d90a5a-1adb-49d6-8640-2e4054bdb99f,0,1,37722a34-1148-4cc8-95e6-4645ae9cca98,37722a34-1148-4cc8-95e6-4645ae9cca98,0,1,11f32e0f-7d16-4ebd-9cef-fffd2d64e70a,11f32e0f-7d16-4ebd-9cef-fffd2d64e70a,0,1,cc34bd23-de0a-4b09-8333-e4693576b9f4,cc34bd23-de0a-4b09-8333-e4693576b9f4,0,1,b16d5e79-9d7e-4d3e-9be8-3b2a932abf78,b16d5e79-9d7e-4d3e-9be8-3b2a932abf78,0,1,903af13a-1f73-4145-a3d0-971c3be5fbe6,903af13a-1f73-4145-a3d0-971c3be5fbe6,0,1,65000437-bd07-4841-a458-679d44768c46,65000437-bd07-4841-a458-679d44768c46,0,1,fb42ad06-d5a4-40ea-817c-fa7ff385d8db,fb42ad06-d5a4-40ea-817c-fa7ff385d8db,0,1,bc110a6a-26fa-4aa1-a2ef-bdaeaa0a33af,bc110a6a-26fa-4aa1-a2ef-bdaeaa0a33af,0,1,953dbad6-4f5c-4319-874a-db358a77d001,953dbad6-4f5c-4319-874a-db358a77d001,0,1,05243f56-7e9b-4a61-8efb-1b5e525fff21,05243f56-7e9b-4a61-8efb-1b5e525fff21,0,1,7aa86a2d-2b47-447e-8901-806411011279,7aa86a2d-2b47-447e-8901-806411011279,0,1,fca0dfad-f853-4694-9ce9-53a3a10f59b7,fca0dfad-f853-4694-9ce9-53a3a10f59b7,0,1,934b8380-c6e0-49f8-a6c2-91c0ddb2f95e,934b8380-c6e0-49f8-a6c2-91c0ddb2f95e,0,1,57f4ee70-185e-4f2a-91a6-6c0bf93c1000,57f4ee70-185e-4f2a-91a6-6c0bf93c1000,0,1,b4cb92fb-ad82-44ed-9203-397b412b3453,b4cb92fb-ad82-44ed-9203-397b412b3453,0,1,69ceac29-06d3-45f2-b914-7966465cd0d3,69ceac29-06d3-45f2-b914-7966465cd0d3,0,1,b690721d-960b-4374-8d2c-feed3a2b354b,b690721d-960b-4374-8d2c-feed3a2b354b,0,1,271243d3-1871-4a0a-bf7f-63bacacf0a59,271243d3-1871-4a0a-bf7f-63bacacf0a59,0,1,b1ed134b-f2aa-4b06-b7a2-0e524ead04df,b1ed134b-f2aa-4b06-b7a2-0e524ead04df,0,1,1281fe19-bbca-4a4f-84d8-14187e62000f,1281fe19-bbca-4a4f-84d8-14187e62000f,0,1,9b7051d5-abc4-416c-a0e6-515d120d78e4,9b7051d5-abc4-416c-a0e6-515d120d78e4,0,1,86d1bc4e-f08d-48c7-8b3a-3c5feb0c843c,86d1bc4e-f08d-48c7-8b3a-3c5feb0c843c,0,1,869938e6-6310-4326-bd15-5b91fe2e0911,869938e6-6310-4326-bd15-5b91fe2e0911,0,1,8ed7254b-bbf8-49d9-8a73-9a91316fd02d,8ed7254b-bbf8-49d9-8a73-9a91316fd02d,0,1,a156521a-ece1-49d3-8056-1c3508273c45,a156521a-ece1-49d3-8056-1c3508273c45,0,1,075d39e0-a77a-4d0b-9260-7524fb5b2d0c,075d39e0-a77a-4d0b-9260-7524fb5b2d0c,0,1,10018f80-3138-4089-bf9a-a5f178f1e295,10018f80-3138-4089-bf9a-a5f178f1e295,0,1,43aba109-4b7f-45ef-9c30-8b754e81911b,43aba109-4b7f-45ef-9c30-8b754e81911b,0,1,4ccd72e1-7fd7-4a3b-8428-71b44992937e,4ccd72e1-7fd7-4a3b-8428-71b44992937e,0,1,46077650-2b2c-4319-8279-41f277971669,46077650-2b2c-4319-8279-41f277971669,0,1,4afe733d-64a0-4ea5-9d12-6e2c86eb91e4,4afe733d-64a0-4ea5-9d12-6e2c86eb91e4,0,1,612f3b95-d7db-4b33-92b5-4873205b424b,612f3b95-d7db-4b33-92b5-4873205b424b,0,1,d0b79c3d-b0c5-4eb3-9971-1def1c88698f,d0b79c3d-b0c5-4eb3-9971-1def1c88698f,0,1,e82ebd72-7b5a-4f45-b853-1001bf680a05,e82ebd72-7b5a-4f45-b853-1001bf680a05,0,1,a74879b8-c080-4cc0-b44f-2b7c4dae87fe,a74879b8-c080-4cc0-b44f-2b7c4dae87fe,0,1,e9e9b733-e97a-430d-95ce-45ea27751f64,e9e9b733-e97a-430d-95ce-45ea27751f64,0,1,86ffe9a7-9b3e-49ab-bd88-20269fec56bc,86ffe9a7-9b3e-49ab-bd88-20269fec56bc,0,1,3dd50c66-27f7-4f1e-86e9-c709995c8609,3dd50c66-27f7-4f1e-86e9-c709995c8609,0,1,45c0003f-0ed7-4582-b84e-217fdc4ddeaf,45c0003f-0ed7-4582-b84e-217fdc4ddeaf,0,1,ed1369c5-c274-45bd-ae91-7648565ae09f,ed1369c5-c274-45bd-ae91-7648565ae09f,0,1,8d0fce61-a22f-4033-9e03-3f00c4a21722,8d0fce61-a22f-4033-9e03-3f00c4a21722,0,1,bfb3f026-e940-49c3-ac30-408186f9e11e,bfb3f026-e940-49c3-ac30-408186f9e11e,0,1,e1dc83eb-a8cd-454b-8de8-cff2049be78c,e1dc83eb-a8cd-454b-8de8-cff2049be78c,0,1,9edd9288-1463-4d67-b9f0-40f351d978e9,9edd9288-1463-4d67-b9f0-40f351d978e9,0,1,c9db6c68-965f-4567-b26e-5d497a389de1,c9db6c68-965f-4567-b26e-5d497a389de1,0,1,4da2f65d-56bd-4140-9b31-e5ccac4a800a,4da2f65d-56bd-4140-9b31-e5ccac4a800a,0,1,eb163bba-b94c-4a78-9c2d-7b519325e3d4,eb163bba-b94c-4a78-9c2d-7b519325e3d4,0,1,939bdb9a-294b-4b42-a56f-030f69bc29c4,939bdb9a-294b-4b42-a56f-030f69bc29c4,0,1,ee7a763b-bcbf-4ff3-89af-eb7965b33515,ee7a763b-bcbf-4ff3-89af-eb7965b33515,0,1,e72b3ae6-00e9-45d7-a4f3-bc8a5a2f5ae4,e72b3ae6-00e9-45d7-a4f3-bc8a5a2f5ae4,0,1,81d900be-ddc1-417f-ae2c-1aacf040de9a,81d900be-ddc1-417f-ae2c-1aacf040de9a,0,1,c65f69ce-be78-4e8d-b91d-293c4108ce77,c65f69ce-be78-4e8d-b91d-293c4108ce77,0,1,521a5717-0b38-401d-bd72-30cee219bd14,521a5717-0b38-401d-bd72-30cee219bd14,0,1,977c30dc-6f27-4931-9fd5-d12ed147e3ec,977c30dc-6f27-4931-9fd5-d12ed147e3ec,0,1,eea4f72e-dd1b-46c7-b270-876a482236b3,eea4f72e-dd1b-46c7-b270-876a482236b3,0,1,25e8d286-dfbb-4fdf-974b-fe3f6f76eac0,25e8d286-dfbb-4fdf-974b-fe3f6f76eac0,0,1,2d249dad-8b4f-462b-ab13-892639a6e071,2d249dad-8b4f-462b-ab13-892639a6e071,0,1,f6249bf4-d2e7-48f3-808f-d776915d14cb,f6249bf4-d2e7-48f3-808f-d776915d14cb,0,1,75f11ecd-c87a-4a14-a7ca-c755f63d7cf8,75f11ecd-c87a-4a14-a7ca-c755f63d7cf8,0,1,883cdeb0-e747-4157-bbe7-0ebc423a82af,883cdeb0-e747-4157-bbe7-0ebc423a82af,0,1,ba62ac73-91da-4dad-abc7-3cf8acf7e315,ba62ac73-91da-4dad-abc7-3cf8acf7e315,0,1,6a71416d-dba1-4883-9264-597ecf9d6270,6a71416d-dba1-4883-9264-597ecf9d6270,0,1,ce3fc202-7893-4d1b-9c8f-1b3349a5c147,ce3fc202-7893-4d1b-9c8f-1b3349a5c147,0,1,6593baab-fce0-49ed-867e-be242bfc08d7,6593baab-fce0-49ed-867e-be242bfc08d7,0,1,403390cf-d3f8-4dfa-b83d-e2fca4ee0dff,403390cf-d3f8-4dfa-b83d-e2fca4ee0dff,0,1,57aed64d-da61-4c18-af21-dab3afdc5c03,57aed64d-da61-4c18-af21-dab3afdc5c03,0,1,452822b4-a590-44db-ab77-d8c01f7300e7,452822b4-a590-44db-ab77-d8c01f7300e7,0,1,62a71ba7-3226-4d10-8cc9-ac9908a00ae7,62a71ba7-3226-4d10-8cc9-ac9908a00ae7,0,1,6ce1d71d-7548-4ee7-be78-21ae23d5a08d,6ce1d71d-7548-4ee7-be78-21ae23d5a08d,0,1,f5ad6743-b19b-44c4-b3d1-2e39d74a4abd,f5ad6743-b19b-44c4-b3d1-2e39d74a4abd,0,1,4b89b7fb-31d9-43c7-9f7e-b0c31fa3331d,4b89b7fb-31d9-43c7-9f7e-b0c31fa3331d,0,1,19b29d30-e395-42f2-b700-7474bb2cdcb7,19b29d30-e395-42f2-b700-7474bb2cdcb7,0,1,b0deb957-624b-4bcb-824c-76aedf1affe9,b0deb957-624b-4bcb-824c-76aedf1affe9,0,1,9934e608-593d-45d0-9df3-539f0c8fc385,9934e608-593d-45d0-9df3-539f0c8fc385,0,1,80da4126-4319-425f-8427-7d60652cf754,80da4126-4319-425f-8427-7d60652cf754,0,1,05236ace-bcdd-4eb8-a1fb-5843ee311d10,05236ace-bcdd-4eb8-a1fb-5843ee311d10,0,1,0f1b284c-6c9e-4799-bc47-3326c4b7bec2,0f1b284c-6c9e-4799-bc47-3326c4b7bec2,0,1,449060fd-4711-4b9e-93e0-11b35c314fb3,449060fd-4711-4b9e-93e0-11b35c314fb3,0,1,e7efa9d5-ea93-4070-87bb-a4d95116d1b4,e7efa9d5-ea93-4070-87bb-a4d95116d1b4,0,1,0614d340-6524-4715-978d-87ab21377e72,0614d340-6524-4715-978d-87ab21377e72,0,1,d47daac5-ec3b-4d4e-8b01-045a37f7074d,d47daac5-ec3b-4d4e-8b01-045a37f7074d,0,1,9d6ed3b9-35cd-47c0-9dfc-732e5066a071,9d6ed3b9-35cd-47c0-9dfc-732e5066a071,0,1,912cbd30-1ed5-4888-a4b6-98e9215b28e9,912cbd30-1ed5-4888-a4b6-98e9215b28e9,0,1,abf093ce-be63-487d-8be4-be282aa475be,abf093ce-be63-487d-8be4-be282aa475be,0,1,7a910ad6-b922-4716-8140-1540d76296b2,7a910ad6-b922-4716-8140-1540d76296b2,0,1,a52450c7-af49-4f92-862f-47015826b447,a52450c7-af49-4f92-862f-47015826b447,0,1,2a19f8a7-4f9f-4e47-a8f4-271a6a13ddc0,2a19f8a7-4f9f-4e47-a8f4-271a6a13ddc0,0,1,3efa225a-db76-479a-b2fa-a40fd0ffb720,3efa225a-db76-479a-b2fa-a40fd0ffb720,0,1,807dd284-31cc-4725-8463-26b31a75d6bc,807dd284-31cc-4725-8463-26b31a75d6bc,0,1,00b7d44c-3f8a-4120-91f3-a63f073d8b37,00b7d44c-3f8a-4120-91f3-a63f073d8b37,0,1,d64f073e-4b58-4020-9233-ca8fbdcf85b2,d64f073e-4b58-4020-9233-ca8fbdcf85b2,0,1,b8931f98-c1d7-4e9b-be43-065064e7ba95,b8931f98-c1d7-4e9b-be43-065064e7ba95,0,1,ab2b472d-97d5-4c33-86fd-e2cdaedf3f3d,ab2b472d-97d5-4c33-86fd-e2cdaedf3f3d,0,1,60848308-931c-4da3-aa4b-37f6fb4b194f,60848308-931c-4da3-aa4b-37f6fb4b194f,0,1,08af8da8-d44b-46f0-a8d3-60421e7b5a1a,08af8da8-d44b-46f0-a8d3-60421e7b5a1a,0,1,54b14504-503b-45f6-9b5d-785b49829425,54b14504-503b-45f6-9b5d-785b49829425,0,1,80d3ee33-1cdc-4af6-85c2-787094526592,80d3ee33-1cdc-4af6-85c2-787094526592,0,1,c8b28660-6cb0-4ef5-85c2-a75da863ba96,c8b28660-6cb0-4ef5-85c2-a75da863ba96,0,1,1cd607b4-49fc-460e-a014-6afe50083b47,1cd607b4-49fc-460e-a014-6afe50083b47,0,1,a215e767-36e9-4408-9d18-7b4be757022a,a215e767-36e9-4408-9d18-7b4be757022a,0,1,a3e262bc-9f0d-480d-a1d1-c2326105d22d,a3e262bc-9f0d-480d-a1d1-c2326105d22d,0,1,8eae0c79-288b-4773-90bb-49299ad45628,8eae0c79-288b-4773-90bb-49299ad45628,0,1,2faa5594-f1b4-4312-b674-82fdf9623105,2faa5594-f1b4-4312-b674-82fdf9623105,0,1,185c1ad3-b5db-49b6-9342-d08e1bf64903,185c1ad3-b5db-49b6-9342-d08e1bf64903,0,1,3c69a4ad-001d-4421-88f6-412e15d710d6,3c69a4ad-001d-4421-88f6-412e15d710d6,0,1,d0373603-5abb-4f7b-8d2f-9f7fb52615aa,d0373603-5abb-4f7b-8d2f-9f7fb52615aa,0,1,f20a35fe-6029-4dc8-b6b4-b098dbce12e8,f20a35fe-6029-4dc8-b6b4-b098dbce12e8,0,1,6a68a08a-ea37-4573-ab9f-ec822f6d250b,6a68a08a-ea37-4573-ab9f-ec822f6d250b,0,1,00e87d04-8104-420b-b2c6-7304889a75b2,00e87d04-8104-420b-b2c6-7304889a75b2,0,1,bde86820-f7bb-463b-97d0-bfa5f8323af0,bde86820-f7bb-463b-97d0-bfa5f8323af0,0,1,289a6aac-dc4e-4fae-8815-853e78d450bb,289a6aac-dc4e-4fae-8815-853e78d450bb,0,1,557e7d89-83ed-45d0-86cc-6e355f14025d,557e7d89-83ed-45d0-86cc-6e355f14025d,0,1,d681b26b-dd8d-46d7-986e-10f05c37a1e4,d681b26b-dd8d-46d7-986e-10f05c37a1e4,0,1,4d3c216e-c04f-4884-8681-1c861c50ce7d,4d3c216e-c04f-4884-8681-1c861c50ce7d,0,1,4a41eee0-c973-4824-a07c-9fcf731f055e,4a41eee0-c973-4824-a07c-9fcf731f055e,0,1,ee756c33-f408-4449-a6bb-3186a0421362,ee756c33-f408-4449-a6bb-3186a0421362,0,1,fbfa8f64-52e4-48f6-b0fb-fd06976dd93d,fbfa8f64-52e4-48f6-b0fb-fd06976dd93d,0,1,6ff66622-4d20-4696-9fe9-4b4faeb21d96,6ff66622-4d20-4696-9fe9-4b4faeb21d96,0,1,46237eec-c206-4d21-883c-27599b9ed38c,46237eec-c206-4d21-883c-27599b9ed38c,0,1,8b451909-2c15-48f2-b869-65e7031cc542,8b451909-2c15-48f2-b869-65e7031cc542,0,1,ab6ff81a-56aa-4742-afe4-d7a652e9d2de,ab6ff81a-56aa-4742-afe4-d7a652e9d2de,0,1,7b377fca-4466-476f-9eb2-0b00141103d6,7b377fca-4466-476f-9eb2-0b00141103d6,0,1,9ce5eceb-f366-4035-956e-62721358b154,9ce5eceb-f366-4035-956e-62721358b154,0,1,1685c406-d0cb-4e0a-a3b0-036c8c22942a,1685c406-d0cb-4e0a-a3b0-036c8c22942a,0,1,892dc4c4-a72b-4dbf-af62-9f9ae0e05aa1,892dc4c4-a72b-4dbf-af62-9f9ae0e05aa1,0,1,81db41a6-2580-4a69-b1fd-57cfd48a7efa,81db41a6-2580-4a69-b1fd-57cfd48a7efa,0,1,0db8b3b2-bf24-4006-9897-797084c241ef,0db8b3b2-bf24-4006-9897-797084c241ef,0,1,fd9d34d9-9c9c-4c05-9c08-b93d4b237adf,fd9d34d9-9c9c-4c05-9c08-b93d4b237adf,0,1,381b7dae-6b34-42a7-9fee-2a4af8a1cc18,381b7dae-6b34-42a7-9fee-2a4af8a1cc18,0,1,31e9ca0d-9ae1-4740-a0a6-2739aa29c99f,31e9ca0d-9ae1-4740-a0a6-2739aa29c99f,0,1,20091427-d173-40ca-b2c4-53ee99b0b5ae,20091427-d173-40ca-b2c4-53ee99b0b5ae,0,1,14cbde39-a39a-48e5-9b72-b798a0bcea3f,14cbde39-a39a-48e5-9b72-b798a0bcea3f,0,1,56871c10-e3af-4679-afad-3baa910d73bb,56871c10-e3af-4679-afad-3baa910d73bb,0,1,f81b51c5-57e4-41f8-9ad5-3d2717351b95,f81b51c5-57e4-41f8-9ad5-3d2717351b95,0,1,3c09f0cd-fbec-46ae-95b0-a00cc53c07ef,3c09f0cd-fbec-46ae-95b0-a00cc53c07ef,0,1,de0a39e0-d37d-47c6-a019-e44836edc8d1,de0a39e0-d37d-47c6-a019-e44836edc8d1,0,1,1fdcc1e7-ad53-409e-ba13-84c6429740cd,1fdcc1e7-ad53-409e-ba13-84c6429740cd,0,1,71d544bf-15c1-4581-8baa-ac126308425c,71d544bf-15c1-4581-8baa-ac126308425c,0,1,1bd0b688-d0fb-4ca2-85aa-4bd82b72ccc2,1bd0b688-d0fb-4ca2-85aa-4bd82b72ccc2,0,1,7acfe30e-73cb-465a-88f2-92b7275dc49b,7acfe30e-73cb-465a-88f2-92b7275dc49b,0,1,8e387dac-5029-49da-a013-355df0a51a44,8e387dac-5029-49da-a013-355df0a51a44,0,1,13859664-8307-40e8-855b-557b9cf2f1ec,13859664-8307-40e8-855b-557b9cf2f1ec,0,1,e4397fba-507f-497c-9414-7d08ccd4d799,e4397fba-507f-497c-9414-7d08ccd4d799,0,1,794f5fb5-3b8f-4f45-9250-7a3b9d1db383,794f5fb5-3b8f-4f45-9250-7a3b9d1db383,0,1,f7a89bfc-e3c9-4894-a2df-6c229b4e0fd8,f7a89bfc-e3c9-4894-a2df-6c229b4e0fd8,0,1,1e8b70ce-27fc-418f-b3f3-e6efbce9f7a2,1e8b70ce-27fc-418f-b3f3-e6efbce9f7a2,0,1,d915d338-3e4c-45c3-aef5-a07cf41b05f6,d915d338-3e4c-45c3-aef5-a07cf41b05f6,0,1,978640a2-5c4b-4e21-857e-34f00840fba8,978640a2-5c4b-4e21-857e-34f00840fba8,0,1,da2913e3-a29b-423f-9aae-08fed56a7d90,da2913e3-a29b-423f-9aae-08fed56a7d90,0,1,149e72b8-cc03-4b4f-8ca4-07987600c34d,149e72b8-cc03-4b4f-8ca4-07987600c34d,0,1,7649bd7b-fe8c-4338-80fc-153160a5e538,7649bd7b-fe8c-4338-80fc-153160a5e538,0,1,7779cd6d-8fa1-49cb-9bbc-9dfd0979f3f4,7779cd6d-8fa1-49cb-9bbc-9dfd0979f3f4,0,1,3dec1ae7-90bb-45ab-aa04-48cfbc14742e,3dec1ae7-90bb-45ab-aa04-48cfbc14742e,0,1,6137605e-4850-44ec-b4ee-048bd8e0ec3a,6137605e-4850-44ec-b4ee-048bd8e0ec3a,0,1,ee28aa9b-0f31-4d8b-8444-43b8bc88bd23,ee28aa9b-0f31-4d8b-8444-43b8bc88bd23,0,1,0e6e9372-beb4-478e-9428-71b19a60739b,0e6e9372-beb4-478e-9428-71b19a60739b,0,1,32b11498-542f-46b2-829f-1525936ab7fa,32b11498-542f-46b2-829f-1525936ab7fa,0,1,64afa916-4750-4008-8c6c-2a470fb11283,64afa916-4750-4008-8c6c-2a470fb11283,0,1,f4a85bfb-40c7-4f81-af32-d07b96c53ad0,f4a85bfb-40c7-4f81-af32-d07b96c53ad0,0,1,35354abc-9a76-4ee8-8796-c24b37365ea0,35354abc-9a76-4ee8-8796-c24b37365ea0,0,1,7078977f-31bf-427e-ac37-e309d81fe999,7078977f-31bf-427e-ac37-e309d81fe999,0,1,bb39ae51-be82-4bb5-a30e-2bf2b53be59e,bb39ae51-be82-4bb5-a30e-2bf2b53be59e,0,1,d8854555-9e15-4d82-a1fd-656a848a8e8a,d8854555-9e15-4d82-a1fd-656a848a8e8a,0,1,53191842-ea05-4491-84d7-071cd201992d,53191842-ea05-4491-84d7-071cd201992d,0,1,86c70449-4cf7-4baf-9742-b82b134ed929,86c70449-4cf7-4baf-9742-b82b134ed929,0,1,af3b1881-163a-4c07-a1d9-77ceadf59c77,af3b1881-163a-4c07-a1d9-77ceadf59c77,0,1,b78be6fb-7db8-48c8-ba7b-aab1fea34890,b78be6fb-7db8-48c8-ba7b-aab1fea34890,0,1,bd27276a-e80c-4135-b341-f99a816ffe86,bd27276a-e80c-4135-b341-f99a816ffe86,0,1,35306678-147c-4ad1-a3c6-c80a11afa22f,35306678-147c-4ad1-a3c6-c80a11afa22f,0,1,0da75726-ae71-4d83-a696-a774c787a8a2,0da75726-ae71-4d83-a696-a774c787a8a2,0,1,5b30b0e9-f986-49b8-8668-5bb0e09f0cfe,5b30b0e9-f986-49b8-8668-5bb0e09f0cfe,0,1,896a7267-0198-4cbb-b6e6-7aa157c0cc61,896a7267-0198-4cbb-b6e6-7aa157c0cc61,0,1,2005bf54-219b-4111-bff1-e12e2c6dca3e,2005bf54-219b-4111-bff1-e12e2c6dca3e,0,1,abab8f73-d705-4350-b44d-f912649a2190,abab8f73-d705-4350-b44d-f912649a2190,0,1,20c9c25c-f8c9-429f-84bd-543cb809abef,20c9c25c-f8c9-429f-84bd-543cb809abef,0,1,dc5f451e-3275-43a8-9f48-45b83220d461,dc5f451e-3275-43a8-9f48-45b83220d461,0,1,028f5e81-61df-4d13-876d-781c5fd18ee6,028f5e81-61df-4d13-876d-781c5fd18ee6,0,1,3cbb59ef-7f64-4590-8a54-ba01e78283c3,3cbb59ef-7f64-4590-8a54-ba01e78283c3,0,1,a5b83672-2ead-4d0a-a4e5-ddd991f1addc,a5b83672-2ead-4d0a-a4e5-ddd991f1addc,0,1,388eb513-fadb-40cd-8a7b-33b904dd758e,388eb513-fadb-40cd-8a7b-33b904dd758e,0,1,0613c6aa-e1fe-4632-a396-a17ec773158f,0613c6aa-e1fe-4632-a396-a17ec773158f,0,1,1a330987-4c79-4ab7-b250-db8d32c78751,1a330987-4c79-4ab7-b250-db8d32c78751,0,1,555062ed-9a04-41d8-877f-0a667e9a08cd,555062ed-9a04-41d8-877f-0a667e9a08cd,0,1,5b1db523-b5cb-4ff8-8662-5feeb4282b4a,5b1db523-b5cb-4ff8-8662-5feeb4282b4a,0,1,ac160e1c-fef7-4625-84e0-964b397f6bdb,ac160e1c-fef7-4625-84e0-964b397f6bdb,0,1,b8946d9c-dda8-4b94-8cbf-db62b647c53e,b8946d9c-dda8-4b94-8cbf-db62b647c53e,0,1,24215916-7732-4030-9f88-163f644e94f7,24215916-7732-4030-9f88-163f644e94f7,0,1,69697945-9748-4cea-a20f-e244b46de2e8,69697945-9748-4cea-a20f-e244b46de2e8,0,1,68538fd1-262c-43ea-b09f-8a66643a0062,68538fd1-262c-43ea-b09f-8a66643a0062,0,1,d042a8e1-a7b9-4f26-abc4-d618bc73e9f5,d042a8e1-a7b9-4f26-abc4-d618bc73e9f5,0,1,82ad24cc-d9f8-440b-a720-e204101d85da,82ad24cc-d9f8-440b-a720-e204101d85da,0,1,8010065f-aec8-4768-85ec-9eb7b2b01e7e,8010065f-aec8-4768-85ec-9eb7b2b01e7e,0,1,a44348cb-e20c-4afd-8483-3b9c735b352c,a44348cb-e20c-4afd-8483-3b9c735b352c,0,1,ebfe4c74-6e16-4b64-8a52-cea95c446903,ebfe4c74-6e16-4b64-8a52-cea95c446903,0,1,ea9ed37c-7f58-43a8-990c-f1feb5d2d275,ea9ed37c-7f58-43a8-990c-f1feb5d2d275,0,1,d912e472-9553-4b96-8b16-7aaff6c14239,d912e472-9553-4b96-8b16-7aaff6c14239,0,1,b04018b5-a74d-43c9-8519-6cc8aa23fe09,b04018b5-a74d-43c9-8519-6cc8aa23fe09,0,1,8f5af22e-3e73-4a4f-b91e-eccd0f5084fd,8f5af22e-3e73-4a4f-b91e-eccd0f5084fd,0,1,9283277f-2b75-4c3a-810a-8d4071b3afcc,9283277f-2b75-4c3a-810a-8d4071b3afcc,0,1,d03d5b18-57a2-43c0-99ea-8ad9d5788179,d03d5b18-57a2-43c0-99ea-8ad9d5788179,0,1,c491a7fc-14f9-498a-b7dd-575dfc66878e,c491a7fc-14f9-498a-b7dd-575dfc66878e,0,1,db15f8eb-4736-4b47-9cee-3e6883f0888c,db15f8eb-4736-4b47-9cee-3e6883f0888c,0,1,59064eb2-2770-4f1c-96bd-801926fe68ef,59064eb2-2770-4f1c-96bd-801926fe68ef,0,1,6b2340d7-687f-43a3-8eb8-8ddb86712466,6b2340d7-687f-43a3-8eb8-8ddb86712466,0,1,9846e2f6-d82a-42a6-bf50-2a9cdf750a8f,9846e2f6-d82a-42a6-bf50-2a9cdf750a8f,0,1,ca5d586f-81bb-40ee-b3bd-de854857c984,ca5d586f-81bb-40ee-b3bd-de854857c984,0,1,73f89524-dbe8-426f-8ee6-1277eb1967cc,73f89524-dbe8-426f-8ee6-1277eb1967cc,0,1,ee7d970c-cef7-4740-a357-1fe78f88a6e6,ee7d970c-cef7-4740-a357-1fe78f88a6e6,0,1,b5e81952-e469-4f26-b8d2-90e7d9e7bc1d,b5e81952-e469-4f26-b8d2-90e7d9e7bc1d,0,1,6733f1bd-7878-4a33-8995-c07526e87c1a,6733f1bd-7878-4a33-8995-c07526e87c1a,0,1,ec34befe-3c0b-4a75-b943-840c52e7dda5,ec34befe-3c0b-4a75-b943-840c52e7dda5,0,1,7f18eb86-e9ac-4cb8-a9aa-389f61dff582,7f18eb86-e9ac-4cb8-a9aa-389f61dff582,0,1,0b7c4cb7-5126-4b5e-8941-cd56eaef76a0,0b7c4cb7-5126-4b5e-8941-cd56eaef76a0,0,1,144d5498-bb61-4bec-bef3-85a5a4aec3d5,144d5498-bb61-4bec-bef3-85a5a4aec3d5,0,1,9328da5c-4689-4a60-8136-ae9eac46ab38,9328da5c-4689-4a60-8136-ae9eac46ab38,0,1,42641296-64da-46e0-a407-de2d492f9c90,42641296-64da-46e0-a407-de2d492f9c90,0,1,b834af0b-086c-445d-a271-7e178c324551,b834af0b-086c-445d-a271-7e178c324551,0,1,32c10512-7bb8-423b-9503-ab2fa41386a4,32c10512-7bb8-423b-9503-ab2fa41386a4,0,1,888edfc4-8140-4675-b267-c32bf1d8d29d,888edfc4-8140-4675-b267-c32bf1d8d29d,0,1,f7e73257-fae1-465a-ae74-faaa0273a416,f7e73257-fae1-465a-ae74-faaa0273a416,0,1,2abbd53a-0ead-42af-8df6-fde663aea300,2abbd53a-0ead-42af-8df6-fde663aea300,0,1,24611bf9-5492-443a-935c-a0058e86493f,24611bf9-5492-443a-935c-a0058e86493f,0,1,af22406b-daac-475d-b6a9-577452502b84,af22406b-daac-475d-b6a9-577452502b84,0,1,7a925960-a579-4b06-90e0-5121dc774024,7a925960-a579-4b06-90e0-5121dc774024,0,1,13beb01d-dd08-4a6d-863b-651e70bbf51f,13beb01d-dd08-4a6d-863b-651e70bbf51f,0,1,a53f6e85-fbf7-4fb1-9301-d63e812fe16c,a53f6e85-fbf7-4fb1-9301-d63e812fe16c,0,1,57a0f5f3-6573-4b35-af25-cea3a25641f1,57a0f5f3-6573-4b35-af25-cea3a25641f1,0,1,ff18803b-4c3a-4720-a718-7547f04c6e2f,ff18803b-4c3a-4720-a718-7547f04c6e2f,0,1,0e0670d6-d8f7-4728-bd1b-f016fffa0570,0e0670d6-d8f7-4728-bd1b-f016fffa0570,0,1,40b08a20-51a3-438b-ba54-466917ea809f,40b08a20-51a3-438b-ba54-466917ea809f,0,1,ecaa0af8-549c-4c07-82ff-1c4e02ff15b8,ecaa0af8-549c-4c07-82ff-1c4e02ff15b8,0,1,45a8c780-c067-40d7-bbe9-81f854aacf7a,45a8c780-c067-40d7-bbe9-81f854aacf7a,0,1,57885cac-059a-4a08-aa2c-43b116d2c777,57885cac-059a-4a08-aa2c-43b116d2c777,0,1,c0403df4-b1f2-4d7e-adb5-9ed881c1359b,c0403df4-b1f2-4d7e-adb5-9ed881c1359b,0,1,56b570b1-93b0-468a-9672-9c71113753f3,56b570b1-93b0-468a-9672-9c71113753f3,0,1,e693eac3-f55d-4102-ac6d-b14ef33fb2e7,e693eac3-f55d-4102-ac6d-b14ef33fb2e7,0,1,e7b0ae70-0192-456c-9dc5-e66049fa9df2,e7b0ae70-0192-456c-9dc5-e66049fa9df2,0,1,68944d09-618e-4fa3-a7af-8c84218e0ac7,68944d09-618e-4fa3-a7af-8c84218e0ac7,0,1,91b12ce3-e8ba-4c9d-9daa-1d5532500314,91b12ce3-e8ba-4c9d-9daa-1d5532500314,0,1,733dc291-0bef-4fe8-ac9f-63440f0c2ad0,733dc291-0bef-4fe8-ac9f-63440f0c2ad0,0,1,5b7b7dc3-dbef-4854-9395-30a3ae4d751c,5b7b7dc3-dbef-4854-9395-30a3ae4d751c,0,1,cb57aabc-eeef-42b4-9bc2-873cebd9618c,cb57aabc-eeef-42b4-9bc2-873cebd9618c,0,1,2fcd2c85-6778-42fa-9bdd-a6ba47497ec0,2fcd2c85-6778-42fa-9bdd-a6ba47497ec0,0,1,52f30ed7-aa16-4ce2-9684-e50229ab0015,52f30ed7-aa16-4ce2-9684-e50229ab0015,0,1,79c2e2bd-f923-42ec-8bdc-3e517e08ee7c,79c2e2bd-f923-42ec-8bdc-3e517e08ee7c,0,1,0526492c-be48-4c84-8d68-19fa1c7e9d6e,0526492c-be48-4c84-8d68-19fa1c7e9d6e,0,1,54ecaf7b-9bc5-483c-96e1-270bcd323590,54ecaf7b-9bc5-483c-96e1-270bcd323590,0,1,2a1f77ba-fa2e-4281-8e68-7ec4ca0261b7,2a1f77ba-fa2e-4281-8e68-7ec4ca0261b7,0,1,58f6f8fa-7473-40f5-973a-6279335d8f33,58f6f8fa-7473-40f5-973a-6279335d8f33,0,1,ec0c3187-de61-4bc8-a52a-7617f47ffb6d,ec0c3187-de61-4bc8-a52a-7617f47ffb6d,0,1,1e71ec59-55a4-45e8-a8c9-f70c2cb56589,1e71ec59-55a4-45e8-a8c9-f70c2cb56589,0,1,fa3632fe-185b-49aa-85ae-dfb721835d40,fa3632fe-185b-49aa-85ae-dfb721835d40,0,1,a4f15108-477c-465e-aaea-cb495ef52cf5,a4f15108-477c-465e-aaea-cb495ef52cf5,0,1,9cda5c2c-f401-4f63-b445-cef160296e48,9cda5c2c-f401-4f63-b445-cef160296e48,0,1,e8ae4a26-3127-43ae-af7a-c2e278d2611d,e8ae4a26-3127-43ae-af7a-c2e278d2611d,0,1,b923c78f-d074-41b4-b832-086686258f19,b923c78f-d074-41b4-b832-086686258f19,0,1,8ff96413-6fdd-4b8d-a181-ea0d8633defc,8ff96413-6fdd-4b8d-a181-ea0d8633defc,0,1,54604ed2-766b-4308-b99e-447817d82799,54604ed2-766b-4308-b99e-447817d82799,0,1,7abdb07b-edbc-4c3b-aa53-afaa92dc9071,7abdb07b-edbc-4c3b-aa53-afaa92dc9071,0,1,f48b4475-2cd9-41df-962a-6529f84985ca,f48b4475-2cd9-41df-962a-6529f84985ca,0,1,2fbfe405-48e6-4abf-99c2-7f1f66a62b48,2fbfe405-48e6-4abf-99c2-7f1f66a62b48,0,1,5e6637c7-19b5-4ac2-a8e9-d119e49f444e,5e6637c7-19b5-4ac2-a8e9-d119e49f444e,0,1,bf94feb9-edf7-4df8-b5f5-805613663a0a,bf94feb9-edf7-4df8-b5f5-805613663a0a,0,1,6d852a13-c85e-4e84-8396-f91c1ed0596e,6d852a13-c85e-4e84-8396-f91c1ed0596e,0,1,9c2d5313-a4fd-417e-a340-ad4980d0028b,9c2d5313-a4fd-417e-a340-ad4980d0028b,0,1,4fb4a280-9426-4c41-a9ba-11f9d01a0740,4fb4a280-9426-4c41-a9ba-11f9d01a0740,0,1,1591ee7e-870c-4bf7-9450-be84f1b2506f,1591ee7e-870c-4bf7-9450-be84f1b2506f,0,1,8f088f33-92d7-4e35-915d-6cda1129dd80,8f088f33-92d7-4e35-915d-6cda1129dd80,0,1,9a8578a2-8a92-4ab3-a480-173340f8b34a,9a8578a2-8a92-4ab3-a480-173340f8b34a,0,1,4889d27b-435b-4059-a34d-6afdf3c77fa3,4889d27b-435b-4059-a34d-6afdf3c77fa3,0,1,4ebf0988-ccc3-440c-bd0f-2d01636bd730,4ebf0988-ccc3-440c-bd0f-2d01636bd730,0,1,69f42341-268b-4e74-9d6d-527800d018ab,69f42341-268b-4e74-9d6d-527800d018ab,0,1,c1be2a02-53b8-4c28-92b2-b6e0c83ab452,c1be2a02-53b8-4c28-92b2-b6e0c83ab452,0,1,ca6ecedc-f4c5-4c14-8a02-6255ce45033a,ca6ecedc-f4c5-4c14-8a02-6255ce45033a,0,1,7eb5217f-684d-4a9e-8aef-48cedc809cbb,7eb5217f-684d-4a9e-8aef-48cedc809cbb,0,1,4b54d626-dc59-4e49-a708-0a7f98833b9a,4b54d626-dc59-4e49-a708-0a7f98833b9a,0,1,1c90a423-ef1b-42dc-a43b-1fda89672481,1c90a423-ef1b-42dc-a43b-1fda89672481,0,1,095cf2d6-5a7c-452d-8d60-991afb6e52bd,095cf2d6-5a7c-452d-8d60-991afb6e52bd,0,1,2c155a03-2aff-4632-adb2-be3266e0fac3,2c155a03-2aff-4632-adb2-be3266e0fac3,0,1,f9213a70-bfd6-464f-b28b-ed35bdf351c0,f9213a70-bfd6-464f-b28b-ed35bdf351c0,0,1,ca5957af-69c9-4640-b9a9-b241c4f9eaa7,ca5957af-69c9-4640-b9a9-b241c4f9eaa7,0,1,7e32c295-a769-4cff-a3eb-992f7031475f,7e32c295-a769-4cff-a3eb-992f7031475f,0,1,eb81610a-eb2f-4068-ba74-75e0f5bbace8,eb81610a-eb2f-4068-ba74-75e0f5bbace8,0,1,21826316-0b49-4034-a49e-6d34c15ceb5c,21826316-0b49-4034-a49e-6d34c15ceb5c,0,1,3abffa47-8d47-4173-897b-708e1a06ef39,3abffa47-8d47-4173-897b-708e1a06ef39,0,1,0cf3d615-76a1-428d-9d25-0d7fdf09e4ae,0cf3d615-76a1-428d-9d25-0d7fdf09e4ae,0,1,5a398637-a06c-4442-9093-a864fa7f049f,5a398637-a06c-4442-9093-a864fa7f049f,0,1,38692186-a62a-42d1-87cd-7dbc6d4816ed,38692186-a62a-42d1-87cd-7dbc6d4816ed,0,1,6cfcdb89-ccb2-45fe-a7b1-5a29ccd6c5ae,6cfcdb89-ccb2-45fe-a7b1-5a29ccd6c5ae,0,1,3a28cea9-7fd7-4834-ab89-2a74331a64e3,3a28cea9-7fd7-4834-ab89-2a74331a64e3,0,1,0f881709-4520-4f18-af9d-cf08757693ff,0f881709-4520-4f18-af9d-cf08757693ff,0,1,c5151ca9-5103-42b2-8573-273c15416db8,c5151ca9-5103-42b2-8573-273c15416db8,0,1,fe4aa694-76c4-49c9-96ce-a2476f4ff58b,fe4aa694-76c4-49c9-96ce-a2476f4ff58b,0,1,ba8c43ad-678a-4b18-8bbe-5a1b12d19b74,ba8c43ad-678a-4b18-8bbe-5a1b12d19b74,0,1,115a6019-ef87-4126-8ebf-070c1e882940,115a6019-ef87-4126-8ebf-070c1e882940,0,1,162ce023-b2e1-41dc-bcaf-b8e30caccce0,162ce023-b2e1-41dc-bcaf-b8e30caccce0,0,1,52bdd3cc-7103-4dbf-a3c3-dd46cf03da12,52bdd3cc-7103-4dbf-a3c3-dd46cf03da12,0,1,c13fb1cd-fe72-48a6-b383-55b6323619ce,c13fb1cd-fe72-48a6-b383-55b6323619ce,0,1,956fc8ee-96be-4309-b1e8-209372f151ab,956fc8ee-96be-4309-b1e8-209372f151ab,0,1,526c688e-a4d4-45f7-8bba-b8ceff38fe27,526c688e-a4d4-45f7-8bba-b8ceff38fe27,0,1,67efa786-312f-4c9c-b970-0320e92069af,67efa786-312f-4c9c-b970-0320e92069af,0,1,12f85e09-1190-4483-b531-630ab718db7f,12f85e09-1190-4483-b531-630ab718db7f,0,1,52f4453e-e968-4290-a79a-470f68fbd07f,52f4453e-e968-4290-a79a-470f68fbd07f,0,1,5b952e35-1037-4447-8293-6d8889692c8b,5b952e35-1037-4447-8293-6d8889692c8b,0,1,05bc8b4e-8c90-4502-8b16-7b1e7625d569,05bc8b4e-8c90-4502-8b16-7b1e7625d569,0,1,ce34d88d-3017-4197-a962-ea23a6a96d32,ce34d88d-3017-4197-a962-ea23a6a96d32,0,1,2cbc16da-aa67-4ad6-82f8-fa6922447be6,2cbc16da-aa67-4ad6-82f8-fa6922447be6,0,1,19d7a1ba-c343-4575-95da-53dac6d4b2cb,19d7a1ba-c343-4575-95da-53dac6d4b2cb,0,1,6cc8b3a0-3377-4b39-b6b0-69c862a15465,6cc8b3a0-3377-4b39-b6b0-69c862a15465,0,1,acb193f4-52e5-4572-a79b-b825a2f6525f,acb193f4-52e5-4572-a79b-b825a2f6525f,0,1,5d46f719-e468-48e2-b4ec-acb85c710451,5d46f719-e468-48e2-b4ec-acb85c710451,0,1,9fb13bfe-80c7-43c3-b0da-9185ab197ce2,9fb13bfe-80c7-43c3-b0da-9185ab197ce2,0,1,cd80a520-1d1c-4d80-8a4a-360ac1ca98d8,cd80a520-1d1c-4d80-8a4a-360ac1ca98d8,0,1,e9aef0c8-9dc4-4c4a-8288-8b2d9860624d,e9aef0c8-9dc4-4c4a-8288-8b2d9860624d,0,1,5422610d-b92c-4213-a58c-8db067d93b66,5422610d-b92c-4213-a58c-8db067d93b66,0,1,8f59a635-9e0e-470d-8fda-a47a262a59c2,8f59a635-9e0e-470d-8fda-a47a262a59c2,0,1,ffb50eb9-149a-46ec-9472-d8f20ad09810,ffb50eb9-149a-46ec-9472-d8f20ad09810,0,1,5ae3bba3-dc98-4470-a73d-3bd951c0a3f2,5ae3bba3-dc98-4470-a73d-3bd951c0a3f2,0,1,7a6449e2-e90a-4720-a769-192284ef69c1,7a6449e2-e90a-4720-a769-192284ef69c1,0,1,02118b98-2349-46b1-a328-d6e2b5781f7e,02118b98-2349-46b1-a328-d6e2b5781f7e,0,1,67de9cbb-5c80-4cff-bfbe-269a958e08e6,67de9cbb-5c80-4cff-bfbe-269a958e08e6,0,1,2228a457-6805-41ee-85af-5ebca9568bf4,2228a457-6805-41ee-85af-5ebca9568bf4,0,1,96b71795-e230-4ecb-b98d-4feb3f8b9662,96b71795-e230-4ecb-b98d-4feb3f8b9662,0,1,04055821-03ce-4049-af2c-8670c80517f6,04055821-03ce-4049-af2c-8670c80517f6,0,1,0101305d-62eb-4802-9cd4-d615a518d842,0101305d-62eb-4802-9cd4-d615a518d842,0,1,898d2ba7-631a-4e7a-9bdf-cd2ef411e57a,898d2ba7-631a-4e7a-9bdf-cd2ef411e57a,0,1,bf1fc624-60d7-4a04-bb3a-b6e2882bebfe,bf1fc624-60d7-4a04-bb3a-b6e2882bebfe,0,1,7c424424-9660-462d-9cf2-4c1e6bd284fa,7c424424-9660-462d-9cf2-4c1e6bd284fa,0,1,e118f957-ab2c-473b-ab64-37032f727416,e118f957-ab2c-473b-ab64-37032f727416,0,1,e770e26e-a3a4-487d-b3bb-aeb63d8b7323,e770e26e-a3a4-487d-b3bb-aeb63d8b7323,0,1,21f64e5f-dc94-4ce9-b836-e75646ae3325,21f64e5f-dc94-4ce9-b836-e75646ae3325,0,1,82e8a180-f2e1-406c-9609-89d33504aff2,82e8a180-f2e1-406c-9609-89d33504aff2,0,1,e7437c81-3d5b-466e-880c-8febe4a68e88,e7437c81-3d5b-466e-880c-8febe4a68e88,0,1,99bc26f9-ba56-4c63-9fd1-c2f3d630b93c,99bc26f9-ba56-4c63-9fd1-c2f3d630b93c,0,1,307771e6-bcf7-4016-b369-e1655bbe9e94,307771e6-bcf7-4016-b369-e1655bbe9e94,0,1,bf8c60f7-7dea-4a2c-8ce2-7001a6a37bfa,bf8c60f7-7dea-4a2c-8ce2-7001a6a37bfa,0,1,38fc6a54-846c-40b0-9254-3261f540bf18,38fc6a54-846c-40b0-9254-3261f540bf18,0,1,d9134d0c-56cd-4b8f-ab11-ae37fc306801,d9134d0c-56cd-4b8f-ab11-ae37fc306801,0,1,9408d0ee-bd61-4b95-ac7c-98de139b5f9e,9408d0ee-bd61-4b95-ac7c-98de139b5f9e,0,1,8f2af24b-f5fa-4f6d-831e-28453bdedefc,8f2af24b-f5fa-4f6d-831e-28453bdedefc,0,1,d119e21d-0087-4f22-b3bd-b14707b65330,d119e21d-0087-4f22-b3bd-b14707b65330,0,1,dc9b4072-11de-40fe-bf2a-f7b15af0a250,dc9b4072-11de-40fe-bf2a-f7b15af0a250,0,1,e2cf5ca9-c2a0-4506-89e6-318cad0a48a3,e2cf5ca9-c2a0-4506-89e6-318cad0a48a3,0,1,5aecdfd1-1cd7-4523-be23-7e32fcb01a94,5aecdfd1-1cd7-4523-be23-7e32fcb01a94,0,1,932b1c1a-72eb-49cd-8218-d0ced9c454d8,932b1c1a-72eb-49cd-8218-d0ced9c454d8,0,1,96d70dc4-02bd-47ad-9465-81de6ff5bdc9,96d70dc4-02bd-47ad-9465-81de6ff5bdc9,0,1,38acaf7a-5a77-40bf-ba2a-17b31cccd37d,38acaf7a-5a77-40bf-ba2a-17b31cccd37d,0,1,cb604857-8e49-4f2f-b5c8-2a7d8a3cf8e4,cb604857-8e49-4f2f-b5c8-2a7d8a3cf8e4,0,1,f33e9c76-e523-4f4e-ab4b-3fc1b256d8dd,f33e9c76-e523-4f4e-ab4b-3fc1b256d8dd,0,1,5dd336c4-88c5-4f53-acf0-5f86a658c528,5dd336c4-88c5-4f53-acf0-5f86a658c528,0,1,c723112b-286d-46f1-989d-81252062a025,c723112b-286d-46f1-989d-81252062a025,0,1,67e8b47e-4bad-4b2f-b196-8a9708893051,67e8b47e-4bad-4b2f-b196-8a9708893051,0,1,a583e53a-3f3c-48c7-8928-37ce40b2bafe,a583e53a-3f3c-48c7-8928-37ce40b2bafe,0,1,a844dd4a-274a-4894-9446-031dbe006084,a844dd4a-274a-4894-9446-031dbe006084,0,1,9a740f81-5437-47af-8ed9-ea62edcb2ea1,9a740f81-5437-47af-8ed9-ea62edcb2ea1,0,1,cdf54c86-0a1c-4f74-93ee-6d8d8db0a778,cdf54c86-0a1c-4f74-93ee-6d8d8db0a778,0,1,77bdd30f-4933-4bda-9c7a-b0a097da0910,77bdd30f-4933-4bda-9c7a-b0a097da0910,0,1,a8d52851-4293-4fe4-b2cb-f9c8c166ed97,a8d52851-4293-4fe4-b2cb-f9c8c166ed97,0,1,d4879ecc-8f1a-4183-99a8-d6dfc1eed3f8,d4879ecc-8f1a-4183-99a8-d6dfc1eed3f8,0,1,a682e9e1-284f-4e32-86b2-6736f159f585,a682e9e1-284f-4e32-86b2-6736f159f585,0,1,84f0bd89-9b86-440f-b942-9b685e22233e,84f0bd89-9b86-440f-b942-9b685e22233e,0,1,f2d508b3-9425-4ce6-86d8-5893ca4a8cd6,f2d508b3-9425-4ce6-86d8-5893ca4a8cd6,0,1,ce61612f-bcbb-4a02-bca0-d88e0ee42bd7,ce61612f-bcbb-4a02-bca0-d88e0ee42bd7,0,1,c1c35035-44cc-4aa1-ae8e-db3513ddc5f3,c1c35035-44cc-4aa1-ae8e-db3513ddc5f3,0,1,ac52baa1-02cb-4ce8-8f4f-1f9441b1cda0,ac52baa1-02cb-4ce8-8f4f-1f9441b1cda0,0,1,fabf8a0b-366f-4f23-9377-315534bb854b,fabf8a0b-366f-4f23-9377-315534bb854b,0,1,7aac6439-64c9-4492-b866-bf91dda82d06,7aac6439-64c9-4492-b866-bf91dda82d06,0,1,6ffe3723-c6df-497b-a3ff-d817fbabfd8c,6ffe3723-c6df-497b-a3ff-d817fbabfd8c,0,1,528a82b7-ef06-4d90-bb32-bd6d76ed6c74,528a82b7-ef06-4d90-bb32-bd6d76ed6c74,0,1,08b86f29-64ef-467a-af1a-d27ffdf621ba,08b86f29-64ef-467a-af1a-d27ffdf621ba,0,1,6483d1ab-c53d-4985-ad7e-b799adbcd9da,6483d1ab-c53d-4985-ad7e-b799adbcd9da,0,1,82f66233-ed13-49ae-ab72-7cf91c88c760,82f66233-ed13-49ae-ab72-7cf91c88c760,0,1,75cddbcd-e960-4164-81d8-ac0a2a36e95b,75cddbcd-e960-4164-81d8-ac0a2a36e95b,0,1,e14d57f4-ae4a-4644-9ec1-a6af1b3e4c41,e14d57f4-ae4a-4644-9ec1-a6af1b3e4c41,0,1,314f8451-ba96-46cd-bf9f-3a87df7d2a5b,314f8451-ba96-46cd-bf9f-3a87df7d2a5b,0,1,d9151001-a911-45c1-a8e6-dcf0da623ed3,d9151001-a911-45c1-a8e6-dcf0da623ed3,0,1,30e06f80-b6d0-4fa9-a346-8e17dbe2fb68,30e06f80-b6d0-4fa9-a346-8e17dbe2fb68,0,1,e589a693-ff50-4c36-ae26-a8fcae966d57,e589a693-ff50-4c36-ae26-a8fcae966d57,0,1,8bacb87e-c2e9-41f5-bae1-c3a6b0e8179f,8bacb87e-c2e9-41f5-bae1-c3a6b0e8179f,0,1,90f023f5-5b48-4f98-bfc6-b704277a355d,90f023f5-5b48-4f98-bfc6-b704277a355d,0,1,99485603-706d-4301-be25-82b1c0ee8f4d,99485603-706d-4301-be25-82b1c0ee8f4d,0,1,e7a28021-c75e-41b2-9974-cf4beee34d28,e7a28021-c75e-41b2-9974-cf4beee34d28,0,1,21e3bdf3-7cec-42de-8ef3-5815b9a1b747,21e3bdf3-7cec-42de-8ef3-5815b9a1b747,0,1,2a603c61-4cbf-4c6d-a0b2-40c835d36737,2a603c61-4cbf-4c6d-a0b2-40c835d36737,0,1,a8d7f071-401b-499e-957c-d077d8002e54,a8d7f071-401b-499e-957c-d077d8002e54,0,1,211a539b-4be9-4816-98f6-f756e65eafd8,211a539b-4be9-4816-98f6-f756e65eafd8,0,1,e2d8167d-3ebf-4771-b9e0-e6382d68cc18,e2d8167d-3ebf-4771-b9e0-e6382d68cc18,0,1,e9b9da80-7806-4c9c-a002-01cfa3109169,e9b9da80-7806-4c9c-a002-01cfa3109169,0,1,a271041d-0203-4ecd-bb39-70256c50192e,a271041d-0203-4ecd-bb39-70256c50192e,0,1,73eff626-a363-4a5a-879e-61ef6ce0726f,73eff626-a363-4a5a-879e-61ef6ce0726f,0,1,acf15b79-a6c4-4c46-8013-50d3b223baf6,acf15b79-a6c4-4c46-8013-50d3b223baf6,0,1,f6a29b80-e4c3-4c4f-8e2c-d4dda851d813,f6a29b80-e4c3-4c4f-8e2c-d4dda851d813,0,1,2d8d5d74-2bc0-4282-af66-e4a37694c147,2d8d5d74-2bc0-4282-af66-e4a37694c147,0,1,cfd31341-287b-4684-9ac0-b28b4e066f15,cfd31341-287b-4684-9ac0-b28b4e066f15,0,1,81de1b0b-7f2d-4098-ae99-061c6a90dc29,81de1b0b-7f2d-4098-ae99-061c6a90dc29,0,1,f829e2a9-5bdb-4171-8b32-8d10d5968813,f829e2a9-5bdb-4171-8b32-8d10d5968813,0,1,647ba8f8-57f7-4c19-af59-525517c1e392,647ba8f8-57f7-4c19-af59-525517c1e392,0,1,39062cb3-4ae8-4c0d-889b-038a55179946,39062cb3-4ae8-4c0d-889b-038a55179946,0,1,c62d4212-36ca-4afb-bac9-269b6f64ca51,c62d4212-36ca-4afb-bac9-269b6f64ca51,0,1,5cec5e16-46ad-4f8c-b869-f5b1cc487884,5cec5e16-46ad-4f8c-b869-f5b1cc487884,0,1,ca0363bb-81c2-4fce-b2f0-e8f42d118a74,ca0363bb-81c2-4fce-b2f0-e8f42d118a74,0,1,7aacdf81-49fd-47a3-a36a-c483f1b05872,7aacdf81-49fd-47a3-a36a-c483f1b05872,0,1,857015e2-afb2-403d-bfb7-7acb5080797b,857015e2-afb2-403d-bfb7-7acb5080797b,0,1,5657286b-114b-41de-ab7d-45d0f0d95e2d,5657286b-114b-41de-ab7d-45d0f0d95e2d,0,1,42a0271e-6783-44db-95c1-09805ae01f58,42a0271e-6783-44db-95c1-09805ae01f58,0,1,8628783e-4fad-4dff-8220-9e0ddc8580f8,8628783e-4fad-4dff-8220-9e0ddc8580f8,0,1,356fc245-3034-42d1-84d0-632c6dc7a3d5,356fc245-3034-42d1-84d0-632c6dc7a3d5,0,1,07462664-6b58-4f5a-9b3f-2e5c376f17df,07462664-6b58-4f5a-9b3f-2e5c376f17df,0,1,6f23e946-f700-424b-b9bf-3a9c8846908d,6f23e946-f700-424b-b9bf-3a9c8846908d,0,1,f3ef5989-a848-4a7f-8ac5-0eca882a6aa1,f3ef5989-a848-4a7f-8ac5-0eca882a6aa1,0,1,4f5087ab-cc60-4d1e-ba83-a319536bf8ba,4f5087ab-cc60-4d1e-ba83-a319536bf8ba,0,1,07d0d6e9-e0a7-4543-9668-3850c1e0a15c,07d0d6e9-e0a7-4543-9668-3850c1e0a15c,0,1,c656771c-dcb7-4c78-9a16-e62806d5bb5a,c656771c-dcb7-4c78-9a16-e62806d5bb5a,0,1,ec42c45c-18ca-44b0-9c59-1cb204552a43,ec42c45c-18ca-44b0-9c59-1cb204552a43,0,1,2aafb1a1-4321-47e9-9783-03ab616a2873,2aafb1a1-4321-47e9-9783-03ab616a2873,0,1,71109997-6da0-4eaf-bbf2-f94fa24f37cc,71109997-6da0-4eaf-bbf2-f94fa24f37cc,0,1,a3deeef2-f8a2-462f-a57f-87d89e4ec12a,a3deeef2-f8a2-462f-a57f-87d89e4ec12a,0,1,d601281c-379d-4a9d-843e-478fd6567415,d601281c-379d-4a9d-843e-478fd6567415,0,1,fd9b3f7d-d25d-4ecb-8b87-218d5ccf1f7b,fd9b3f7d-d25d-4ecb-8b87-218d5ccf1f7b,0,1,427e6f15-334e-42be-9554-895d8f7ebfc6,427e6f15-334e-42be-9554-895d8f7ebfc6,0,1,e85a4314-7b63-4294-9bd0-ff77e3ae7c1e,e85a4314-7b63-4294-9bd0-ff77e3ae7c1e,0,1,36bc8523-41a5-48ff-9bd0-758d078c4408,36bc8523-41a5-48ff-9bd0-758d078c4408,0,1,94ca1b45-3cf0-4857-8299-999c93f4fb56,94ca1b45-3cf0-4857-8299-999c93f4fb56,0,1,ee8419c6-79ca-4546-9a66-bacaa08d2a73,ee8419c6-79ca-4546-9a66-bacaa08d2a73,0,1,e36ddb60-2f21-4c5f-b96c-947bcf2af42a,e36ddb60-2f21-4c5f-b96c-947bcf2af42a,0,1,d4a0ca3b-3985-4ba2-9e96-1c5baed28b46,d4a0ca3b-3985-4ba2-9e96-1c5baed28b46,0,1,ada11ea2-94d5-4172-a383-a51774599568,ada11ea2-94d5-4172-a383-a51774599568,0,1,50515bbc-43ee-4b00-bfc5-105b7981bd8f,50515bbc-43ee-4b00-bfc5-105b7981bd8f,0,1,1ea080b0-0a11-4152-b8bb-4918bc142a23,1ea080b0-0a11-4152-b8bb-4918bc142a23,0,1,a21cd1c1-4649-4dc2-9dbd-a913f2d6ca75,a21cd1c1-4649-4dc2-9dbd-a913f2d6ca75,0,1,6930e471-7935-4d68-a980-2acde93ba801,6930e471-7935-4d68-a980-2acde93ba801,0,1,2c425fa5-b10b-4a6f-926a-5cb4c1f2d491,2c425fa5-b10b-4a6f-926a-5cb4c1f2d491,0,1,5135cc48-c749-4acb-a225-d110f386f482,5135cc48-c749-4acb-a225-d110f386f482,0,1,15e6f31b-556a-4f47-9f40-2f69ac7fcb43,15e6f31b-556a-4f47-9f40-2f69ac7fcb43,0,1,53c4c3b2-9257-4d02-8df8-6b55fe9abdae,53c4c3b2-9257-4d02-8df8-6b55fe9abdae,0,1,d2dba2ae-e987-4c9d-a289-3dc19afa87cd,d2dba2ae-e987-4c9d-a289-3dc19afa87cd,0,1,2e9fa546-96fb-4ecb-b933-7921e131e89b,2e9fa546-96fb-4ecb-b933-7921e131e89b,0,1,4645b1ad-eb8f-484c-b29c-2093d9ef9dba,4645b1ad-eb8f-484c-b29c-2093d9ef9dba,0,1,637a132b-1a88-44ba-b45f-ed4ed1ac1001,637a132b-1a88-44ba-b45f-ed4ed1ac1001,0,1,699f734b-43d2-4351-bff8-e0e21e164a42,699f734b-43d2-4351-bff8-e0e21e164a42,0,1,95f0792a-7ac4-450a-b05c-219741e61abd,95f0792a-7ac4-450a-b05c-219741e61abd,0,1,742a2e8c-496e-4e02-931d-d33f7afe07a5,742a2e8c-496e-4e02-931d-d33f7afe07a5,0,1,c3efa853-cd29-4618-929f-e3bec33dfd65,c3efa853-cd29-4618-929f-e3bec33dfd65,0,1,62185c28-3d24-487a-9441-b309dcf11e31,62185c28-3d24-487a-9441-b309dcf11e31,0,1,9f264aeb-664d-4724-8248-11873d63ef3b,9f264aeb-664d-4724-8248-11873d63ef3b,0,1,b926d058-53a9-4eea-b4f9-98e77f798dd9,b926d058-53a9-4eea-b4f9-98e77f798dd9,0,1,495e2c77-4868-4191-ac18-f94e55a5982e,495e2c77-4868-4191-ac18-f94e55a5982e,0,1,20191a65-322c-457d-85f5-ed1258b6fe8e,20191a65-322c-457d-85f5-ed1258b6fe8e,0,1,23b46ecd-14dc-4cc5-8ff0-c676a8337aee,23b46ecd-14dc-4cc5-8ff0-c676a8337aee,0,1,769c60aa-44f4-4c98-a461-d3f5c2b67f61,769c60aa-44f4-4c98-a461-d3f5c2b67f61,0,1,f9809c99-0eaa-4249-967c-a4bef4763277,f9809c99-0eaa-4249-967c-a4bef4763277,0,1,37fa88a0-f2c1-455f-a28d-74165e8b933d,37fa88a0-f2c1-455f-a28d-74165e8b933d,0,1,e4476f09-909b-49f7-8e01-72eea8ceaca6,e4476f09-909b-49f7-8e01-72eea8ceaca6,0,1,2861412c-46f0-454e-b81d-fe081afb5c7a,2861412c-46f0-454e-b81d-fe081afb5c7a,0,1,2b4ece05-b694-42e9-8239-55722fd84294,2b4ece05-b694-42e9-8239-55722fd84294,0,1,6564ce89-134f-4726-8693-fd93aad46180,6564ce89-134f-4726-8693-fd93aad46180,0,1,0d743731-da5d-4c99-b19f-e93c69b77e14,0d743731-da5d-4c99-b19f-e93c69b77e14,0,1,d6f15367-23e2-4766-bc7c-8acd0063aa0c,d6f15367-23e2-4766-bc7c-8acd0063aa0c,0,1,966b1bde-5b0c-446d-b38b-dc037e2ff7ad,966b1bde-5b0c-446d-b38b-dc037e2ff7ad,0,1,fa4c5665-4d73-4db2-a055-8c1c8a302f82,fa4c5665-4d73-4db2-a055-8c1c8a302f82,0,1,e3e0caa1-6d3f-45a6-9043-d58a34f35b8f,e3e0caa1-6d3f-45a6-9043-d58a34f35b8f,0,1,9100b286-8ae9-4de3-b116-5ce0fa95b80c,9100b286-8ae9-4de3-b116-5ce0fa95b80c,0,1,3d315df6-e000-4cbd-810d-0b26c0d1bc54,3d315df6-e000-4cbd-810d-0b26c0d1bc54,0,1,fa429302-ccaf-4c89-8a11-3a1d30817c00,fa429302-ccaf-4c89-8a11-3a1d30817c00,0,1,9b4c49ce-93da-439a-8d67-f3774e92800a,9b4c49ce-93da-439a-8d67-f3774e92800a,0,1,5f8fa827-7017-4b45-b458-3571b8b611f5,5f8fa827-7017-4b45-b458-3571b8b611f5,0,1,79749167-2912-4e06-9deb-7915a1b4390d,79749167-2912-4e06-9deb-7915a1b4390d,0,1,1c93fcd3-53a1-403f-a30b-454fbc941d55,1c93fcd3-53a1-403f-a30b-454fbc941d55,0,1,0fc54be4-2e19-45cf-b62f-7cbc70a70d5f,0fc54be4-2e19-45cf-b62f-7cbc70a70d5f,0,1,adec3963-b22f-4463-a3f4-c9ec27d187a8,adec3963-b22f-4463-a3f4-c9ec27d187a8,0,1,d8dae0c8-8e11-44bf-bf60-d316220f3e82,d8dae0c8-8e11-44bf-bf60-d316220f3e82,0,1,12afec4d-1728-4aa8-86e5-23cd2f1572b3,12afec4d-1728-4aa8-86e5-23cd2f1572b3,0,1,16bc197b-5a2f-43f4-8ba0-ffabd9289f5c,16bc197b-5a2f-43f4-8ba0-ffabd9289f5c,0,1,ee0c3960-d1bf-411f-a51f-e6e27dabea87,ee0c3960-d1bf-411f-a51f-e6e27dabea87,0,1,d7fb9441-1aef-4257-af3f-7f16340ac85e,d7fb9441-1aef-4257-af3f-7f16340ac85e,0,1,d07c094c-2795-4e0c-b030-bdb82be7ba6d,d07c094c-2795-4e0c-b030-bdb82be7ba6d,0,1,62637860-2013-4f9d-9aed-7cbb0dce8983,62637860-2013-4f9d-9aed-7cbb0dce8983,0,1,331217f6-7ec2-425d-93bd-f2979c5f2e05,331217f6-7ec2-425d-93bd-f2979c5f2e05,0,1,67c1269a-79e6-44d9-9254-671c50fb3974,67c1269a-79e6-44d9-9254-671c50fb3974,0,1,5d455d2a-910d-48c7-bc74-ba5ad7855110,5d455d2a-910d-48c7-bc74-ba5ad7855110,0,1,7cf3feea-75e2-42cc-9c89-4a9182034910,7cf3feea-75e2-42cc-9c89-4a9182034910,0,1,930a0156-feb3-4e14-96a5-cd183a4891f4,930a0156-feb3-4e14-96a5-cd183a4891f4,0,1,cfa55ab3-1335-4712-8352-03c2f0277708,cfa55ab3-1335-4712-8352-03c2f0277708,0,1,fb176f8b-edb9-4e4b-926d-dabe9552bfa1,fb176f8b-edb9-4e4b-926d-dabe9552bfa1,0,1,cd5c52d4-f832-4a3b-b4c7-b4f3e0c98222,cd5c52d4-f832-4a3b-b4c7-b4f3e0c98222,0,1,e268a337-f576-4ec2-8a22-0500b79b2441,e268a337-f576-4ec2-8a22-0500b79b2441,0,1,eb33a8fa-75a6-4926-a025-05bc0abe4374,eb33a8fa-75a6-4926-a025-05bc0abe4374,0,1,c352da94-ea64-44b1-b2df-2c4ed9e2efc5,c352da94-ea64-44b1-b2df-2c4ed9e2efc5,0,1,6babd40a-8b8f-454b-b4a4-7cf2854f49a2,6babd40a-8b8f-454b-b4a4-7cf2854f49a2,0,1,bf480259-6e72-4ad1-ac41-0b0d41a75387,bf480259-6e72-4ad1-ac41-0b0d41a75387,0,1,a41f060a-f0f6-4940-960b-5056082b2c45,a41f060a-f0f6-4940-960b-5056082b2c45,0,1,5d45a926-513f-4bbc-a002-54a2db94b297,5d45a926-513f-4bbc-a002-54a2db94b297,0,1,73f5ce9e-d5a7-45c0-965a-8af1d776a98a,73f5ce9e-d5a7-45c0-965a-8af1d776a98a,0,1,073e14d4-5d43-428b-a9a7-985d173e94c7,073e14d4-5d43-428b-a9a7-985d173e94c7,0,1,2394775b-8910-4667-9c74-e1606e0b13bc,2394775b-8910-4667-9c74-e1606e0b13bc,0,1,43c88ffd-a036-4563-890b-bdc60180e841,43c88ffd-a036-4563-890b-bdc60180e841,0,1,af6e5e8e-6482-4820-a810-9e275ae039bf,af6e5e8e-6482-4820-a810-9e275ae039bf,0,1,fe3ccb8b-fee7-4825-a7bc-4b0fd432d382,fe3ccb8b-fee7-4825-a7bc-4b0fd432d382,0,1,7690620b-21d9-463a-8c22-60844927b4a0,7690620b-21d9-463a-8c22-60844927b4a0,0,1,e7f96a15-9f62-4a7f-85f3-06ba5d30b130,e7f96a15-9f62-4a7f-85f3-06ba5d30b130,0,1,b1db3255-38da-4684-b44e-4e2e9ee1dc35,b1db3255-38da-4684-b44e-4e2e9ee1dc35,0,1,4761f89b-7894-4dca-83b0-3be2d0828781,4761f89b-7894-4dca-83b0-3be2d0828781,0,1,573ff1f2-0ef5-4962-a0f6-eb84d430fe03,573ff1f2-0ef5-4962-a0f6-eb84d430fe03,0,1,7236d52f-9068-45ad-8b92-a7319e737e08,7236d52f-9068-45ad-8b92-a7319e737e08,0,1,3b0b708f-1b6c-4eb2-a2ad-86c088d9f1bf,3b0b708f-1b6c-4eb2-a2ad-86c088d9f1bf,0,1,9db23e96-d13a-4847-941a-462f64d0619d,9db23e96-d13a-4847-941a-462f64d0619d,0,1,7575fd54-c91b-4220-a2ef-2cf533f60426,7575fd54-c91b-4220-a2ef-2cf533f60426,0,1,1b751f19-bb0c-40c2-a5d1-068544c36c6b,1b751f19-bb0c-40c2-a5d1-068544c36c6b,0,1,26e2c83b-8873-4ad3-9c50-e94421473a43,26e2c83b-8873-4ad3-9c50-e94421473a43,0,1,f0b2ec05-8e01-4ccf-b927-671329a9013b,f0b2ec05-8e01-4ccf-b927-671329a9013b,0,1,ab442b11-2482-4f80-ac82-01966e0657ec,ab442b11-2482-4f80-ac82-01966e0657ec,0,1,14fe4d39-81a1-470e-9724-6642ce34ad89,14fe4d39-81a1-470e-9724-6642ce34ad89,0,1,457578ab-dfe2-4419-8d8a-64283b341f42,457578ab-dfe2-4419-8d8a-64283b341f42,0,1,67ef6671-f537-46bf-88e6-f5bcf34a17a4,67ef6671-f537-46bf-88e6-f5bcf34a17a4,0,1,de778ca7-feaf-4531-80ae-11a534c56928,de778ca7-feaf-4531-80ae-11a534c56928,0,1,0dfbe7a9-9c2e-4cbd-ac53-3b547fd73e91,0dfbe7a9-9c2e-4cbd-ac53-3b547fd73e91,0,1,0a76a84d-e883-477e-8b87-7bf984cdc1cf,0a76a84d-e883-477e-8b87-7bf984cdc1cf,0,1,2b6c4184-6d7d-48e5-bd4e-ad31e63398d6,2b6c4184-6d7d-48e5-bd4e-ad31e63398d6,0,1,86df8648-e195-4661-99ee-6052788eb276,86df8648-e195-4661-99ee-6052788eb276,0,1,a22cf6e9-1157-4be5-8d30-aa9bbf2b5e6e,a22cf6e9-1157-4be5-8d30-aa9bbf2b5e6e,0,1,35133725-9647-42dc-a76a-2e62b2918ac4,35133725-9647-42dc-a76a-2e62b2918ac4,0,1,fa9572ee-0303-4421-9125-70cf3dd5a8c7,fa9572ee-0303-4421-9125-70cf3dd5a8c7,0,1,4cdd7920-0c49-4950-b92f-fdf6e34578b2,4cdd7920-0c49-4950-b92f-fdf6e34578b2,0,1,0af48650-5fef-4a5b-8ac8-38a9ded23bd4,0af48650-5fef-4a5b-8ac8-38a9ded23bd4,0,1,c7b883dc-6c26-4eb5-bc19-7919ad57da27,c7b883dc-6c26-4eb5-bc19-7919ad57da27,0,1,7fc37008-c378-4a70-a9a9-07543c7248a6,7fc37008-c378-4a70-a9a9-07543c7248a6,0,1,6410853e-a17e-44db-b8cc-bfefd7c4d239,6410853e-a17e-44db-b8cc-bfefd7c4d239,0,1,df042e4e-01a6-4480-a9c5-c0d7a454bb41,df042e4e-01a6-4480-a9c5-c0d7a454bb41,0,1,53cbf2db-405c-426f-8538-112a46463ec8,53cbf2db-405c-426f-8538-112a46463ec8,0,1,6a4972f1-012c-438b-b1d3-81e7f6da3ddd,6a4972f1-012c-438b-b1d3-81e7f6da3ddd,0,1,ff7cfd75-e0ba-49a3-92e1-33ea26df46e2,ff7cfd75-e0ba-49a3-92e1-33ea26df46e2,0,1,bc37fc81-6a86-4e72-b75a-abb75bddc4b3,bc37fc81-6a86-4e72-b75a-abb75bddc4b3,0,1,ff830967-faa9-415f-aa6e-8d27779f91f8,ff830967-faa9-415f-aa6e-8d27779f91f8,0,1,34dd0dd6-880c-4a90-9b9c-0503c8dc4ef3,34dd0dd6-880c-4a90-9b9c-0503c8dc4ef3,0,1,88618d0f-97af-4055-a490-561d4b8065a7,88618d0f-97af-4055-a490-561d4b8065a7,0,1,faffa228-4f4f-43f6-99b9-ed8c93af85c0,faffa228-4f4f-43f6-99b9-ed8c93af85c0,0,1,7b816ca0-ba60-4637-8348-23b26ad23e3f,7b816ca0-ba60-4637-8348-23b26ad23e3f,0,1,814a6db4-a43c-44e6-ac44-11983642c5ad,814a6db4-a43c-44e6-ac44-11983642c5ad,0,1,0bd74786-e018-4a66-b994-cdb439c57657,0bd74786-e018-4a66-b994-cdb439c57657,0,1,f50fcf2b-90bb-4d73-9fda-f4575e7682fa,f50fcf2b-90bb-4d73-9fda-f4575e7682fa,0,1,a01b8078-a6cd-4184-9317-2f1e0bcefb3a,a01b8078-a6cd-4184-9317-2f1e0bcefb3a,0,1,54a279b1-9e6a-49b0-8fda-e2807cf3a2a3,54a279b1-9e6a-49b0-8fda-e2807cf3a2a3,0,1,09502176-c53d-4525-b8ed-32d0a2e21a5d,09502176-c53d-4525-b8ed-32d0a2e21a5d,0,1,75ad984e-d41f-4591-b207-e8a4b05757a7,75ad984e-d41f-4591-b207-e8a4b05757a7,0,1,3f020f90-7aeb-4b21-ad71-4572ac796d4c,3f020f90-7aeb-4b21-ad71-4572ac796d4c,0,1,759e2ba0-2941-4cc1-8409-50b8a3620058,759e2ba0-2941-4cc1-8409-50b8a3620058,0,1,491cf25d-091e-4e09-b145-92d7073326cf,491cf25d-091e-4e09-b145-92d7073326cf,0,1,9b9d4d10-a4f2-4b0d-a63a-15d55f30fb26,9b9d4d10-a4f2-4b0d-a63a-15d55f30fb26,0,1,579f18ce-a7ce-4eb8-a4e3-a134a9a27bc1,579f18ce-a7ce-4eb8-a4e3-a134a9a27bc1,0,1,e7d05eca-2fdd-4cbb-8e2c-537525326ffe,e7d05eca-2fdd-4cbb-8e2c-537525326ffe,0,1,900bc96e-fbcc-473e-970c-96f561420f8e,900bc96e-fbcc-473e-970c-96f561420f8e,0,1,c3bb7b85-1e90-45c4-9bc1-39bbd253d498,c3bb7b85-1e90-45c4-9bc1-39bbd253d498,0,1,21d5a0b0-9a2b-4989-a50a-781645513179,21d5a0b0-9a2b-4989-a50a-781645513179,0,1,22df0fa4-cb1c-45a2-bcce-d32ed44e462a,22df0fa4-cb1c-45a2-bcce-d32ed44e462a,0,1,d97c6204-3656-4591-aea9-6ebedffe1247,d97c6204-3656-4591-aea9-6ebedffe1247,0,1,7caabe33-184f-45db-bef4-59d4e9cd2394,7caabe33-184f-45db-bef4-59d4e9cd2394,0,1,3255033a-e922-412e-a825-a3e8bd284703,3255033a-e922-412e-a825-a3e8bd284703,0,1,1aa65c35-e8a0-4c8a-90a3-48b62314cb19,1aa65c35-e8a0-4c8a-90a3-48b62314cb19,0,1,f250f992-ad5a-4dab-ad38-240604adb0c4,f250f992-ad5a-4dab-ad38-240604adb0c4,0,1,c4a7efca-f27d-4fdd-86ab-cc22a2a96fb2,c4a7efca-f27d-4fdd-86ab-cc22a2a96fb2,0,1,e63671f6-c96d-4ea4-8300-af7dbd0d016f,e63671f6-c96d-4ea4-8300-af7dbd0d016f,0,1,2c511469-0df6-470f-a808-decb275e8b1a,2c511469-0df6-470f-a808-decb275e8b1a,0,1,1bbb289c-a78a-47d0-b082-c2225ae1dc83,1bbb289c-a78a-47d0-b082-c2225ae1dc83,0,1,99b40f9f-f8f1-4779-8afc-59d30612f3d6,99b40f9f-f8f1-4779-8afc-59d30612f3d6,0,1,6131e875-3254-4281-9343-9118564c5451,6131e875-3254-4281-9343-9118564c5451,0,1,69622ff8-8a23-42fc-b63d-5097e3f636ac,69622ff8-8a23-42fc-b63d-5097e3f636ac,0,1,b88450cc-0dd4-4881-b3d9-a9e4e07e08f5,b88450cc-0dd4-4881-b3d9-a9e4e07e08f5,0,1,ef326bd8-1570-455e-ae8c-063b5578ad15,ef326bd8-1570-455e-ae8c-063b5578ad15,0,1,3713c76d-6ff7-4d45-9f15-d061bdf7dee2,3713c76d-6ff7-4d45-9f15-d061bdf7dee2,0,1,cb6d4979-2d70-4ceb-af08-deb2b19daf14,cb6d4979-2d70-4ceb-af08-deb2b19daf14,0,1,bf30b754-84fb-4104-b52b-a4f7df6fba12,bf30b754-84fb-4104-b52b-a4f7df6fba12,0,1,7bbd0835-b3e9-40cb-a424-670828b60bbb,7bbd0835-b3e9-40cb-a424-670828b60bbb,0,1,3e2138ea-48f9-4a60-8f22-53933bea49db,3e2138ea-48f9-4a60-8f22-53933bea49db,0,1,16bda2eb-eab8-4230-b89f-517fb943e009,16bda2eb-eab8-4230-b89f-517fb943e009,0,1,00964512-297f-4b8b-8def-8e4fc0eba991,00964512-297f-4b8b-8def-8e4fc0eba991,0,1,4185fea3-baba-4ba5-8019-9023b3011d4d,4185fea3-baba-4ba5-8019-9023b3011d4d,0,1,ea790035-92d6-445e-9fa3-08e565634d2b,ea790035-92d6-445e-9fa3-08e565634d2b,0,1,cce8900a-51eb-487d-b380-227d1b9d3943,cce8900a-51eb-487d-b380-227d1b9d3943,0,1,c043c36c-90c6-483b-bc20-7c2d85109b90,c043c36c-90c6-483b-bc20-7c2d85109b90,0,1,a1e619a6-3bb2-468d-a225-c88ccc3b71f5,a1e619a6-3bb2-468d-a225-c88ccc3b71f5,0,1,91d2d40a-c271-412c-b344-1fc98b94ba21,91d2d40a-c271-412c-b344-1fc98b94ba21,0,1,7ce47046-aee8-4809-bac9-a98930a844e1,7ce47046-aee8-4809-bac9-a98930a844e1,0,1,f480b8b9-ecec-4207-a0aa-12c5be4c2250,f480b8b9-ecec-4207-a0aa-12c5be4c2250,0,1,32717d25-6644-4903-8950-03e4c9b1a8fe,32717d25-6644-4903-8950-03e4c9b1a8fe,0,1,3644d8f3-db88-4fce-a851-39c115acfe03,3644d8f3-db88-4fce-a851-39c115acfe03,0,1,4653da74-34b2-47b9-ad88-efd761d6f1e9,4653da74-34b2-47b9-ad88-efd761d6f1e9,0,1,abf8a23d-45c3-4feb-8df2-279b709d7722,abf8a23d-45c3-4feb-8df2-279b709d7722,0,1,b0cd056f-c601-4d07-89c4-f7137b88bab6,b0cd056f-c601-4d07-89c4-f7137b88bab6,0,1,5cc3ebef-8f09-443c-b131-e5c3a9f7d260,5cc3ebef-8f09-443c-b131-e5c3a9f7d260,0,1,b9a21b8f-8a95-4c86-9ab2-ee6c90164e18,b9a21b8f-8a95-4c86-9ab2-ee6c90164e18,0,1,96ed4d39-3bdc-480f-af86-218f22000514,96ed4d39-3bdc-480f-af86-218f22000514,0,1,c9f72e74-22ac-4dc0-8462-0aa7819a9342,c9f72e74-22ac-4dc0-8462-0aa7819a9342,0,1,ca650484-293f-403a-b916-5ec7c3a8969e,ca650484-293f-403a-b916-5ec7c3a8969e,0,1,b71e706d-623e-4039-9bf0-24f151d861d8,b71e706d-623e-4039-9bf0-24f151d861d8,0,1,528f4823-33d8-49bd-a8fe-756a08a107c2,528f4823-33d8-49bd-a8fe-756a08a107c2,0,1,4869095b-b76e-45ca-b77d-0e74f59673f0,4869095b-b76e-45ca-b77d-0e74f59673f0,0,1,bcca2442-448b-4760-923b-cc9621ecb441,bcca2442-448b-4760-923b-cc9621ecb441,0,1,ba7657df-429a-4737-b787-19ef09fdebb2,ba7657df-429a-4737-b787-19ef09fdebb2,0,1,867d72be-f406-45a5-a511-b90459683f11,867d72be-f406-45a5-a511-b90459683f11,0,1,88b22e62-c144-401f-9635-3fb4d914772e,88b22e62-c144-401f-9635-3fb4d914772e,0,1,efeb2914-6604-403a-a11e-5cb995ab2bc9,efeb2914-6604-403a-a11e-5cb995ab2bc9,0,1,4c2dd77f-adc7-4f11-8e8f-1f8e41e6c84b,4c2dd77f-adc7-4f11-8e8f-1f8e41e6c84b,0,1,8f2b8a8e-4cd3-45e3-89ae-1cc4bd0ff30a,8f2b8a8e-4cd3-45e3-89ae-1cc4bd0ff30a,0,1,24b3aecc-f92f-475b-862e-83dd6d6aa2b9,24b3aecc-f92f-475b-862e-83dd6d6aa2b9,0,1,de506523-241a-4845-9259-37066afbf16a,de506523-241a-4845-9259-37066afbf16a,0,1,0510206f-eef0-4a5e-aeb7-d53c26d34adb,0510206f-eef0-4a5e-aeb7-d53c26d34adb,0,1,e616e007-43e7-4740-a083-b85f5435718a,e616e007-43e7-4740-a083-b85f5435718a,0,1,727da5b1-e054-4832-8e44-f5d5e56f52e5,727da5b1-e054-4832-8e44-f5d5e56f52e5,0,1,6135ffd5-1510-4aa8-8bf5-d7c0ca624414,6135ffd5-1510-4aa8-8bf5-d7c0ca624414,0,1,6feaad7c-9680-4341-b215-14581e2e2b37,6feaad7c-9680-4341-b215-14581e2e2b37,0,1,d5656a92-adfb-4733-830d-2b1565798b1f,d5656a92-adfb-4733-830d-2b1565798b1f,0,1,2ee0d56b-cd7c-42db-8fb6-c1567fe1967d,2ee0d56b-cd7c-42db-8fb6-c1567fe1967d,0,1,b0f6ea83-2849-4151-930d-692866919db3,b0f6ea83-2849-4151-930d-692866919db3,0,1,05558ce4-8568-4009-b1d7-307d54967515,05558ce4-8568-4009-b1d7-307d54967515,0,1,74380324-9b7b-49f6-9458-88deb9405f98,74380324-9b7b-49f6-9458-88deb9405f98,0,1,5286ceb2-0f16-4d70-ad89-dc15a308bb8d,5286ceb2-0f16-4d70-ad89-dc15a308bb8d,0,1,0abf70e0-0d81-4d85-a288-a2134da5fbf1,0abf70e0-0d81-4d85-a288-a2134da5fbf1,0,1,392fc734-4251-4d28-bfd1-d6f2f33ec0e5,392fc734-4251-4d28-bfd1-d6f2f33ec0e5,0,1,f66cb2da-3b3c-481f-823a-506f8290f619,f66cb2da-3b3c-481f-823a-506f8290f619,0,1,b80ddaf8-c5c3-4bde-98ed-74a1a0446f38,b80ddaf8-c5c3-4bde-98ed-74a1a0446f38,0,1,e4f16dbf-609d-4a34-a0bf-b20e5925c1ba,e4f16dbf-609d-4a34-a0bf-b20e5925c1ba,0,1,0bdcf045-5132-4a68-839c-a30515dc569e,0bdcf045-5132-4a68-839c-a30515dc569e,0,1,683861f9-9a5f-47db-8b03-959f839d5a3a,683861f9-9a5f-47db-8b03-959f839d5a3a,0,1,56fda0b0-c0ae-4ea2-8f77-df22a9ca3e87,56fda0b0-c0ae-4ea2-8f77-df22a9ca3e87,0,1,125be5bf-f410-451d-aa96-22fabc6a4d8a,125be5bf-f410-451d-aa96-22fabc6a4d8a,0,1,e5017fd0-ecea-48ae-99c8-7fc8c4f1d72b,e5017fd0-ecea-48ae-99c8-7fc8c4f1d72b,0,1,0a46166a-4562-4a50-b139-39dbe8a1fc84,0a46166a-4562-4a50-b139-39dbe8a1fc84,0,1,9aa6d1d1-75ad-40e4-b01f-274826c0c9da,9aa6d1d1-75ad-40e4-b01f-274826c0c9da,0,1,6ce64d65-f710-4d3f-a85f-26ce6915451e,6ce64d65-f710-4d3f-a85f-26ce6915451e,0,1,33eb9806-e34f-42a0-9825-3ff2de92c503,33eb9806-e34f-42a0-9825-3ff2de92c503,0,1,4905fcc5-9bd7-4b1b-b51d-882b11ee3d74,4905fcc5-9bd7-4b1b-b51d-882b11ee3d74,0,1,bcb58235-7cd7-4c15-a1eb-194ee38259e6,bcb58235-7cd7-4c15-a1eb-194ee38259e6,0,1,e19aefe7-634d-4218-8d40-75802d1691e0,e19aefe7-634d-4218-8d40-75802d1691e0,0,1,b885dbb2-6e18-46a6-929c-3d6d392343ad,b885dbb2-6e18-46a6-929c-3d6d392343ad,0,1,d31e24cf-7493-45dc-ba81-3a00618e53bc,d31e24cf-7493-45dc-ba81-3a00618e53bc,0,1,ce2a8ff8-94fd-4ce2-9caa-4711e9b79ee9,ce2a8ff8-94fd-4ce2-9caa-4711e9b79ee9,0,1,f942d212-9be0-4d80-84b6-5b63070e33e4,f942d212-9be0-4d80-84b6-5b63070e33e4,0,1,bea6bbc1-c1e4-4306-a0ca-efd47b9a8b23,bea6bbc1-c1e4-4306-a0ca-efd47b9a8b23,0,1,64c91eaa-084f-4801-8dbf-4e075c689c2b,64c91eaa-084f-4801-8dbf-4e075c689c2b,0,1,c01bb4de-06f7-4c3d-8ea3-d861f89948c0,c01bb4de-06f7-4c3d-8ea3-d861f89948c0,0,1,3c8c4f7b-d267-422c-becd-b6e8a9d6fe49,3c8c4f7b-d267-422c-becd-b6e8a9d6fe49,0,1,3aa12805-823a-439b-b039-fb9940aee312,3aa12805-823a-439b-b039-fb9940aee312,0,1,87d53573-f266-4b74-94af-041ae4b6518f,87d53573-f266-4b74-94af-041ae4b6518f,0,1,65a8545a-e73c-4c6a-8f87-7734d7ff5c03,65a8545a-e73c-4c6a-8f87-7734d7ff5c03,0,1,801cf1f7-2c65-4126-a3e9-b66abfdde67a,801cf1f7-2c65-4126-a3e9-b66abfdde67a,0,1,b991eefb-0d97-48a1-89c8-3d83b3b8d97a,b991eefb-0d97-48a1-89c8-3d83b3b8d97a,0,1,29c2bc01-8838-4459-8ac2-79862aa1dbc9,29c2bc01-8838-4459-8ac2-79862aa1dbc9,0,1,ad556c33-6811-48b4-ae90-57700a4d3fd6,ad556c33-6811-48b4-ae90-57700a4d3fd6,0,1,6e0833f4-3b57-4a5f-810f-9e2a492335df,6e0833f4-3b57-4a5f-810f-9e2a492335df,0,1,78ccdf33-9c2b-4931-afa3-5d652f2bcbc5,78ccdf33-9c2b-4931-afa3-5d652f2bcbc5,0,1,977bc9d8-9843-4343-85af-11a3d91f9966,977bc9d8-9843-4343-85af-11a3d91f9966,0,1,02ff9ef0-1057-4bc2-b745-1c2ae41835e3,02ff9ef0-1057-4bc2-b745-1c2ae41835e3,0,1,5a86abe7-db6c-43a3-9bcd-9b3647519c6b,5a86abe7-db6c-43a3-9bcd-9b3647519c6b,0,1,a6582448-734d-4a4c-a32c-c4755ca1bc93,a6582448-734d-4a4c-a32c-c4755ca1bc93,0,1,6a0b9a91-51a0-4ef4-b630-4f1b5a1da2b7,6a0b9a91-51a0-4ef4-b630-4f1b5a1da2b7,0,1,53327cc4-22b0-40f9-bae7-db483f85901c,53327cc4-22b0-40f9-bae7-db483f85901c,0,1,098d904d-95c9-459e-86d0-357ba9a40191,098d904d-95c9-459e-86d0-357ba9a40191,0,1,e9ab9d00-6e42-439b-8efc-fcacf727016d,e9ab9d00-6e42-439b-8efc-fcacf727016d,0,1,2d58033f-e15d-4a91-8165-dd311025c7c4,2d58033f-e15d-4a91-8165-dd311025c7c4,0,1,49cb3a36-90b3-4154-b571-265fc5cee21e,49cb3a36-90b3-4154-b571-265fc5cee21e,0,1,10472d2c-18ca-49b0-bd9d-c750db8498c5,10472d2c-18ca-49b0-bd9d-c750db8498c5,0,1,8efe5daf-272d-4255-b5c4-66dca7463b50,8efe5daf-272d-4255-b5c4-66dca7463b50,0,1,65af25a6-f699-4c40-b13e-3b7dff3f16fe,65af25a6-f699-4c40-b13e-3b7dff3f16fe,0,1,c4d2486d-289c-4812-b223-5ccfcd7f29e3,c4d2486d-289c-4812-b223-5ccfcd7f29e3,0,1,7da57c89-af2c-445a-96f7-39250f70306f,7da57c89-af2c-445a-96f7-39250f70306f,0,1,b5b94d94-25f7-4cfa-b1e9-6009fb848763,b5b94d94-25f7-4cfa-b1e9-6009fb848763,0,1,a2accf54-5966-42e8-ab2e-e56e415963ee,a2accf54-5966-42e8-ab2e-e56e415963ee,0,1,d8eb5329-5900-4b5d-b45e-458513dddfef,d8eb5329-5900-4b5d-b45e-458513dddfef,0,1,6d521e58-24a3-4f19-b4b0-dff84f7ca86b,6d521e58-24a3-4f19-b4b0-dff84f7ca86b,0,1,d5afea8a-1b7a-4b23-8ae0-cefa0b937b17,d5afea8a-1b7a-4b23-8ae0-cefa0b937b17,0,1,6ffd2da8-db97-46fc-9a53-8e665a598e3c,6ffd2da8-db97-46fc-9a53-8e665a598e3c,0,1,8c413fa5-9e24-4b81-aa55-0e78c5e3e20f,8c413fa5-9e24-4b81-aa55-0e78c5e3e20f,0,1,a4322f22-7de0-4018-8e06-9f1aa7cf0c07,a4322f22-7de0-4018-8e06-9f1aa7cf0c07,0,1,eaaed107-69d4-4963-be83-74519e331715,eaaed107-69d4-4963-be83-74519e331715,0,1,38cddf96-8703-4396-8c73-47fb22828a48,38cddf96-8703-4396-8c73-47fb22828a48,0,1,2c2cb793-0177-4983-91ca-9c292c5b10f1,2c2cb793-0177-4983-91ca-9c292c5b10f1,0,1,2a2e7f51-a4e5-48ec-b969-b1fca18ba9b5,2a2e7f51-a4e5-48ec-b969-b1fca18ba9b5,0,1,221fa473-3327-44e6-a033-6fdfd2be713c,221fa473-3327-44e6-a033-6fdfd2be713c,0,1,7a5973f0-7e29-44af-8e7b-70af71f704a4,7a5973f0-7e29-44af-8e7b-70af71f704a4,0,1,2b2bf0f7-0946-4492-bba0-27f007a70e64,2b2bf0f7-0946-4492-bba0-27f007a70e64,0,1,22c9a703-5ed3-4156-8fa6-476b1c1452f1,22c9a703-5ed3-4156-8fa6-476b1c1452f1,0,1,27089e8e-2c75-431c-b808-5d4dcba3cdca,27089e8e-2c75-431c-b808-5d4dcba3cdca,0,1,9ab3980e-a480-4f90-a8cc-bde99d5ace35,9ab3980e-a480-4f90-a8cc-bde99d5ace35,0,1,ec928563-6e35-4b84-b477-90d2481cec1c,ec928563-6e35-4b84-b477-90d2481cec1c,0,1,5d3e9678-20fe-4128-867a-3f7addaa7831,5d3e9678-20fe-4128-867a-3f7addaa7831,0,1,bb878f73-8a0f-459a-9076-ce57fe7957dc,bb878f73-8a0f-459a-9076-ce57fe7957dc,0,1,a2b4110b-4d9c-40fd-ab46-bfa08d2eb993,a2b4110b-4d9c-40fd-ab46-bfa08d2eb993,0,1,4f262b7f-927e-45f2-ad90-9d5e1b3155d1,4f262b7f-927e-45f2-ad90-9d5e1b3155d1,0,1,9f4b8e36-83ff-4694-8540-b5f47b18395f,9f4b8e36-83ff-4694-8540-b5f47b18395f,0,1,b4c026eb-4271-4366-b529-1cdfe2874563,b4c026eb-4271-4366-b529-1cdfe2874563,0,1,314b0da2-24d3-48cc-8532-d36c45eb3bf8,314b0da2-24d3-48cc-8532-d36c45eb3bf8,0,1,2e3ac3fb-9f0e-463f-95c2-9f661ce2e015,2e3ac3fb-9f0e-463f-95c2-9f661ce2e015,0,1,4077e700-ec20-4afa-8155-bf7e516a70cb,4077e700-ec20-4afa-8155-bf7e516a70cb,0,1,5198c6db-2100-4902-82c8-85c8ea555e78,5198c6db-2100-4902-82c8-85c8ea555e78,0,1,b99f2a63-54e8-490b-a0a4-1941fbc38b3f,b99f2a63-54e8-490b-a0a4-1941fbc38b3f,0,1,f0b1e9f4-2e07-44e6-88d2-c11457135781,f0b1e9f4-2e07-44e6-88d2-c11457135781,0,1,e010c0f9-f770-4fdc-8607-50838c0262ef,e010c0f9-f770-4fdc-8607-50838c0262ef,0,1,f935399f-3554-4c08-b0a6-eba13074e1b7,f935399f-3554-4c08-b0a6-eba13074e1b7,0,1,10008125-3aeb-4912-8ad6-d92d283ea09a,10008125-3aeb-4912-8ad6-d92d283ea09a,0,1,765f9584-fefa-4695-b130-dd54c3b0d79d,765f9584-fefa-4695-b130-dd54c3b0d79d,0,1,dd050ca0-8335-4654-ab5c-7babcb4824ef,dd050ca0-8335-4654-ab5c-7babcb4824ef,0,1,706cbf55-626d-4cab-b589-a2464368f6c1,706cbf55-626d-4cab-b589-a2464368f6c1,0,1,d22a0a50-220d-459e-a23a-39730a1e67c4,d22a0a50-220d-459e-a23a-39730a1e67c4,0,1,2c1c9284-ba8b-4282-a89c-429f02ea41f6,2c1c9284-ba8b-4282-a89c-429f02ea41f6,0,1,483dfce4-9c66-4739-94d4-17a005d64f5b,483dfce4-9c66-4739-94d4-17a005d64f5b,0,1,19506116-43ef-433c-822c-ef8717b0da6b,19506116-43ef-433c-822c-ef8717b0da6b,0,1,464b92cc-b577-4350-ae9f-e697390248d7,464b92cc-b577-4350-ae9f-e697390248d7,0,1,5a1242c8-3817-4d2c-9bfd-f62a6b80730c,5a1242c8-3817-4d2c-9bfd-f62a6b80730c,0,1,b9be6caf-e5e0-45a9-8cc8-3c83721632a2,b9be6caf-e5e0-45a9-8cc8-3c83721632a2,0,1,97e853dc-065f-4c6d-84cb-3d3aff367b22,97e853dc-065f-4c6d-84cb-3d3aff367b22,0,1,2f1fdf47-2627-496f-9e1f-77019abb2104,2f1fdf47-2627-496f-9e1f-77019abb2104,0,1,c996532a-8795-4136-8a40-9bb4b263277c,c996532a-8795-4136-8a40-9bb4b263277c,0,1,64c77788-fc49-4979-8163-949a891bd8b7,64c77788-fc49-4979-8163-949a891bd8b7,0,1,c39750ca-e33f-40c2-b830-119423d9a2ae,c39750ca-e33f-40c2-b830-119423d9a2ae,0,1,9372ff6b-27b6-48f3-a2a2-762e7c485766,9372ff6b-27b6-48f3-a2a2-762e7c485766,0,1,f454595a-4a3d-451b-8e8b-b17aa8314591,f454595a-4a3d-451b-8e8b-b17aa8314591,0,1,d3b7f89e-eb04-404e-bcc1-1d3557fb8d1a,d3b7f89e-eb04-404e-bcc1-1d3557fb8d1a,0,1,442f9d7b-ae8f-4074-8ece-d5aa1c66e35c,442f9d7b-ae8f-4074-8ece-d5aa1c66e35c,0,1,bc708da8-7fc6-4da1-8129-9ef6a86667af,bc708da8-7fc6-4da1-8129-9ef6a86667af,0,1,061842fe-4077-4d6e-aefe-de79409da730,061842fe-4077-4d6e-aefe-de79409da730,0,1,86249619-8981-4fc4-85fc-ce30e4b9d542,86249619-8981-4fc4-85fc-ce30e4b9d542,0,1,da6e4bff-9835-4b92-b62b-291a5d6c86fe,da6e4bff-9835-4b92-b62b-291a5d6c86fe,0,1,3fadaeb7-2c41-42a4-bfa8-c585602b1028,3fadaeb7-2c41-42a4-bfa8-c585602b1028,0,1,171a0dfc-032e-4eaf-81a2-e5e0dfde8d56,171a0dfc-032e-4eaf-81a2-e5e0dfde8d56,0,1,083c709b-ed8c-47e4-a190-421e14259e73,083c709b-ed8c-47e4-a190-421e14259e73,0,1,b98dacc7-29e1-426b-a664-0a988f18186c,b98dacc7-29e1-426b-a664-0a988f18186c,0,1,d678856d-6e7c-443f-a6e3-350bbe8af659,d678856d-6e7c-443f-a6e3-350bbe8af659,0,1,d0979762-22ce-41be-b7a4-5e9ac149d94b,d0979762-22ce-41be-b7a4-5e9ac149d94b,0,1,ae23e70c-479e-47ad-9bfa-58560a903410,ae23e70c-479e-47ad-9bfa-58560a903410,0,1,c0d83781-bbda-43f7-bf0e-5defa3d47143,c0d83781-bbda-43f7-bf0e-5defa3d47143,0,1,21fa5fdd-acbc-403b-9acb-bbf95284bd20,21fa5fdd-acbc-403b-9acb-bbf95284bd20,0,1,576a01e3-4d6d-4241-a3c4-7661ba129bcb,576a01e3-4d6d-4241-a3c4-7661ba129bcb,0,1,9f7290dd-19f4-4163-9795-fe562e84f06d,9f7290dd-19f4-4163-9795-fe562e84f06d,0,1,c3b5c81f-b787-4f63-8cba-79def0921477,c3b5c81f-b787-4f63-8cba-79def0921477,0,1,1f0cb3d4-1344-451b-a257-be3cd854acfd,1f0cb3d4-1344-451b-a257-be3cd854acfd,0,1,0131fe59-ce47-48b7-8f7e-1544bf0fa031,0131fe59-ce47-48b7-8f7e-1544bf0fa031,0,1,c8b0a1be-97c6-4a16-b1dd-31901ac61cdc,c8b0a1be-97c6-4a16-b1dd-31901ac61cdc,0,1,372150e2-526e-4424-8c54-e4b16bdd25b5,372150e2-526e-4424-8c54-e4b16bdd25b5,0,1,752dc569-cf84-42d7-911d-49d455f7214e,752dc569-cf84-42d7-911d-49d455f7214e,0,1,fecab2b9-27e1-44d6-9082-79c3569b7477,fecab2b9-27e1-44d6-9082-79c3569b7477,0,1,07ae092f-8517-47b7-b54c-5dbcb6506929,07ae092f-8517-47b7-b54c-5dbcb6506929,0,1,db4c25bb-d199-43ec-833d-82972de04a41,db4c25bb-d199-43ec-833d-82972de04a41,0,1,43d19685-0794-41f2-9171-bf565133718d,43d19685-0794-41f2-9171-bf565133718d,0,1,b68c15c4-4966-4f13-8912-2d479b65089a,b68c15c4-4966-4f13-8912-2d479b65089a,0,1,8f6770c2-654c-4cc7-8ed5-15b5b2e3109a,8f6770c2-654c-4cc7-8ed5-15b5b2e3109a,0,1,f87e3935-dae1-4192-b6a7-05e3c700c590,f87e3935-dae1-4192-b6a7-05e3c700c590,0,1,ee635706-6ee2-4956-8d58-a235f64687f6,ee635706-6ee2-4956-8d58-a235f64687f6,0,1,a5a40ca7-d665-420b-a516-1355019d6901,a5a40ca7-d665-420b-a516-1355019d6901,0,1,adf9304c-ccf8-492e-95b1-0754764586a2,adf9304c-ccf8-492e-95b1-0754764586a2,0,1,fd175112-ec8f-4088-9b21-d8135056f0c5,fd175112-ec8f-4088-9b21-d8135056f0c5,0,1,ddd82a66-1eda-409f-b6c0-e22c4bd2c1b7,ddd82a66-1eda-409f-b6c0-e22c4bd2c1b7,0,1,df76a1b7-312a-4e77-bac1-79befadb4495,df76a1b7-312a-4e77-bac1-79befadb4495,0,1,ab39fad8-1039-491e-982a-c49637770ec0,ab39fad8-1039-491e-982a-c49637770ec0,0,1,7d93a6ba-3ca7-45ab-a540-743c79587535,7d93a6ba-3ca7-45ab-a540-743c79587535,0,1,76b58810-0527-4dfc-8858-bac68e7e65f3,76b58810-0527-4dfc-8858-bac68e7e65f3,0,1,aba97fd9-f05e-45cd-8404-ed702070e17a,aba97fd9-f05e-45cd-8404-ed702070e17a,0,1,f5c415cd-429b-469f-9332-c43ab5d1c8d6,f5c415cd-429b-469f-9332-c43ab5d1c8d6,0,1,458e9c6b-b828-404b-be5a-c6c0aeea34c9,458e9c6b-b828-404b-be5a-c6c0aeea34c9,0,1,7262eb4d-2d2d-454c-beaa-974645813af7,7262eb4d-2d2d-454c-beaa-974645813af7,0,1,45fa9f17-eeb1-43e2-b78c-f81a341f1bff,45fa9f17-eeb1-43e2-b78c-f81a341f1bff,0,1,49221b2f-aae2-4bee-9a1a-18263fc74244,49221b2f-aae2-4bee-9a1a-18263fc74244,0,1,da0cd264-da2f-4044-af28-c91d2efe1d5c,da0cd264-da2f-4044-af28-c91d2efe1d5c,0,1,f1b1db38-2d9f-4409-a6d6-fd7192b1f102,f1b1db38-2d9f-4409-a6d6-fd7192b1f102,0,1,fad26b16-8638-496b-bd12-381fc6f5b71f,fad26b16-8638-496b-bd12-381fc6f5b71f,0,1,ed3cfb74-a37a-4314-a2d7-4ce717a2edd9,ed3cfb74-a37a-4314-a2d7-4ce717a2edd9,0,1,324a56c9-02d9-4177-af84-a817b8c41169,324a56c9-02d9-4177-af84-a817b8c41169,0,1,1e44abfe-c173-4802-b535-96849d384983,1e44abfe-c173-4802-b535-96849d384983,0,1,2751a509-037b-49aa-9ca8-e87057d6d82c,2751a509-037b-49aa-9ca8-e87057d6d82c,0,1,35f62549-eb6a-4284-a6e3-406b0d9df0cf,35f62549-eb6a-4284-a6e3-406b0d9df0cf,0,1,cee94c04-7a46-47a5-bdd5-6f0dbd884e97,cee94c04-7a46-47a5-bdd5-6f0dbd884e97,0,1,fd66995b-ee76-41d3-983f-33d84bdcbbd4,fd66995b-ee76-41d3-983f-33d84bdcbbd4,0,1,73e97918-b34e-4ad2-8591-4c219eb92f2c,73e97918-b34e-4ad2-8591-4c219eb92f2c,0,1,445cf7eb-35d0-48f8-9579-c2ec574ef324,445cf7eb-35d0-48f8-9579-c2ec574ef324,0,1,1025657e-afd2-4c7b-96d5-ccbedaca4619,1025657e-afd2-4c7b-96d5-ccbedaca4619,0,1,64839c78-b2fa-4d80-bee0-b3d3a7e5db35,64839c78-b2fa-4d80-bee0-b3d3a7e5db35,0,1,e754ad5c-cf3c-4198-af81-128475924cb0,e754ad5c-cf3c-4198-af81-128475924cb0,0,1,ed65d504-b210-4014-85ec-275ad633ef04,ed65d504-b210-4014-85ec-275ad633ef04,0,1,dc31edb1-273e-4b1a-8e69-32393479ff36,dc31edb1-273e-4b1a-8e69-32393479ff36,0,1,3ab0649b-239f-4466-b897-73c0ab628927,3ab0649b-239f-4466-b897-73c0ab628927,0,1,4c697110-8941-4d6d-ba03-f2b9e96ff82e,4c697110-8941-4d6d-ba03-f2b9e96ff82e,0,1,7ea4112d-fc41-4f1e-bd22-f04adeac1d8f,7ea4112d-fc41-4f1e-bd22-f04adeac1d8f,0,1,b172631b-da0d-42f4-ae6b-ae122a46cced,b172631b-da0d-42f4-ae6b-ae122a46cced,0,1,1a25e744-37ae-46ca-a328-ff8eced21a82,1a25e744-37ae-46ca-a328-ff8eced21a82,0,1,dddabe54-a93b-4e4b-acbb-cc522e4d7c28,dddabe54-a93b-4e4b-acbb-cc522e4d7c28,0,1,46169f0b-8514-40a1-9d27-8489cab72503,46169f0b-8514-40a1-9d27-8489cab72503,0,1,d9cf39cc-8652-4c4d-bc5b-b4e455c0083f,d9cf39cc-8652-4c4d-bc5b-b4e455c0083f,0,1,4b0d7d39-5f79-4a21-b0bb-d3142a3bc8a9,4b0d7d39-5f79-4a21-b0bb-d3142a3bc8a9,0,1,c90243af-582c-4f5a-88e7-e0cbc0555fcb,c90243af-582c-4f5a-88e7-e0cbc0555fcb,0,1,14bf4066-15cb-4165-b854-45443ee27da1,14bf4066-15cb-4165-b854-45443ee27da1,0,1,4427cab9-4eea-4415-98ef-6021a447c60c,4427cab9-4eea-4415-98ef-6021a447c60c,0,1,fe46b4da-d865-468f-badd-83644bf88faa,fe46b4da-d865-468f-badd-83644bf88faa,0,1,2851c9d4-4366-4488-926d-a7fcd3b1548c,2851c9d4-4366-4488-926d-a7fcd3b1548c,0,1,31116aa2-cfbc-48e8-886b-45c1c17508fd,31116aa2-cfbc-48e8-886b-45c1c17508fd,0,1,6aa819d3-c56d-4561-a2e4-a1188ab1295a,6aa819d3-c56d-4561-a2e4-a1188ab1295a,0,1,2ddf344d-7065-40d5-9306-23870d8fc04a,2ddf344d-7065-40d5-9306-23870d8fc04a,0,1,c630ab2d-0a20-4136-88b6-220b2cad6a71,c630ab2d-0a20-4136-88b6-220b2cad6a71,0,1,00cd1dea-bc54-475c-956d-dc5221104932,00cd1dea-bc54-475c-956d-dc5221104932,0,1,3807f865-dd2c-44f7-9238-3db191f0a186,3807f865-dd2c-44f7-9238-3db191f0a186,0,1,8f184df5-bfe8-4df3-bc7c-18218cef7650,8f184df5-bfe8-4df3-bc7c-18218cef7650,0,1,387e273a-889f-454b-8b43-feaa12025fde,387e273a-889f-454b-8b43-feaa12025fde,0,1,1c38ad75-b294-4c05-89ce-69ce4d9a291f,1c38ad75-b294-4c05-89ce-69ce4d9a291f,0,1,078d1e8f-6d27-4761-9532-b1e7a60e4c13,078d1e8f-6d27-4761-9532-b1e7a60e4c13,0,1,4262193c-58ad-47c6-8088-735d8cd037ea,4262193c-58ad-47c6-8088-735d8cd037ea,0,1,36a2b5f9-ded5-4fc3-a7bd-e12b37cd6bab,36a2b5f9-ded5-4fc3-a7bd-e12b37cd6bab,0,1,de6d1aad-39eb-46ce-87aa-d29812bb37bf,de6d1aad-39eb-46ce-87aa-d29812bb37bf,0,1,4ad859ec-cc75-4bac-9e89-397798450e48,4ad859ec-cc75-4bac-9e89-397798450e48,0,1,d93ab94c-0f55-4b80-b226-41b44c73b3ea,d93ab94c-0f55-4b80-b226-41b44c73b3ea,0,1,94cbed80-5a35-471f-b354-439a11629210,94cbed80-5a35-471f-b354-439a11629210,0,1,1162cc0a-42e5-47cb-9507-68459579f110,1162cc0a-42e5-47cb-9507-68459579f110,0,1,17f9f188-d3fd-4fe1-a00c-b0dde64a0f9e,17f9f188-d3fd-4fe1-a00c-b0dde64a0f9e,0,1,bb49dc80-4934-4f44-8f27-9a363dca8dc4,bb49dc80-4934-4f44-8f27-9a363dca8dc4,0,1,7338e497-03a7-4ed4-85a2-ca802c065a9f,7338e497-03a7-4ed4-85a2-ca802c065a9f,0,1,49fe879c-8972-4c9a-bb08-e3e5b2e5ff84,49fe879c-8972-4c9a-bb08-e3e5b2e5ff84,0,1,5249687b-9ff4-46f5-be15-dbb5d5047fd1,5249687b-9ff4-46f5-be15-dbb5d5047fd1,0,1,d33df51c-3dcd-496c-90f2-7ee05582bdf7,d33df51c-3dcd-496c-90f2-7ee05582bdf7,0,1,24b39ebd-2424-4939-8e3e-d09eb674d409,24b39ebd-2424-4939-8e3e-d09eb674d409,0,1,08c751bb-9e57-4536-901e-bb316c8e96d7,08c751bb-9e57-4536-901e-bb316c8e96d7,0,1,de0afa6f-07c6-441c-a4ca-e7ed709a8da5,de0afa6f-07c6-441c-a4ca-e7ed709a8da5,0,1,034cdcef-08e5-4751-9885-400aa69e0b94,034cdcef-08e5-4751-9885-400aa69e0b94,0,1,efefebea-2032-4006-b9ca-50a23b7da1ef,efefebea-2032-4006-b9ca-50a23b7da1ef,0,1,4c794d37-3352-4acb-a939-5e90fb682db8,4c794d37-3352-4acb-a939-5e90fb682db8,0,1,5f3fea83-6ca8-481b-9e2b-789a6fd01e2e,5f3fea83-6ca8-481b-9e2b-789a6fd01e2e,0,1,008f5068-da9c-4dac-9c0a-a50366d27cbb,008f5068-da9c-4dac-9c0a-a50366d27cbb,0,1,950b3ee3-070f-4946-8b9b-0aa2058de986,950b3ee3-070f-4946-8b9b-0aa2058de986,0,1,bd04a870-0943-4bdb-9e30-50a69daa8a13,bd04a870-0943-4bdb-9e30-50a69daa8a13,0,1,a23e6c77-8c12-4f99-ae2d-68a12274be38,a23e6c77-8c12-4f99-ae2d-68a12274be38,0,1,3c4454cd-31e9-42a5-9127-fb66a628f0e1,3c4454cd-31e9-42a5-9127-fb66a628f0e1,0,1,c02c5cbf-b25a-4956-8aa7-74cfeb66d508,c02c5cbf-b25a-4956-8aa7-74cfeb66d508,0,1,31cac1e9-eb16-489c-9322-30d1e27a80b3,31cac1e9-eb16-489c-9322-30d1e27a80b3,0,1,0d100e33-7941-41c1-962d-7672c874e9c5,0d100e33-7941-41c1-962d-7672c874e9c5,0,1,c5ac53c9-c9b2-4b90-a21e-10f1daa756c5,c5ac53c9-c9b2-4b90-a21e-10f1daa756c5,0,1,6e61d717-de36-4dce-8af9-b6c14ed76acb,6e61d717-de36-4dce-8af9-b6c14ed76acb,0,1,474518fe-9cb5-4a12-9388-bc7a64511617,474518fe-9cb5-4a12-9388-bc7a64511617,0,1,64337614-b1c9-4931-b576-448721fa4602,64337614-b1c9-4931-b576-448721fa4602,0,1,1d73b59c-0594-4ed3-b584-cf1261941e1d,1d73b59c-0594-4ed3-b584-cf1261941e1d,0,1,8ff2547f-d596-4fa1-9e12-079e1cc4c057,8ff2547f-d596-4fa1-9e12-079e1cc4c057,0,1,1ab0c8f8-b908-4618-ae88-af37b8f1224e,1ab0c8f8-b908-4618-ae88-af37b8f1224e,0,1,bd3ec5a9-161d-487e-ab1d-e5e15a6e3a7b,bd3ec5a9-161d-487e-ab1d-e5e15a6e3a7b,0,1,b85b3a58-95e4-4698-b1ae-037901ecc1b1,b85b3a58-95e4-4698-b1ae-037901ecc1b1,0,1,b77d748a-d180-432d-91c3-774e6ccf7efa,b77d748a-d180-432d-91c3-774e6ccf7efa,0,1,e5b9c1b0-4690-442c-b160-e6c587e42e57,e5b9c1b0-4690-442c-b160-e6c587e42e57,0,1,e3adb576-6b33-475b-976b-7a6783de3184,e3adb576-6b33-475b-976b-7a6783de3184,0,1,c6cef8db-0689-42a6-9f43-c86b7c3cf0e9,c6cef8db-0689-42a6-9f43-c86b7c3cf0e9,0,1,78f5a205-dffb-4009-897a-e8f36372f33c,78f5a205-dffb-4009-897a-e8f36372f33c,0,1,f7597041-f182-42fb-803a-2521c70d627d,f7597041-f182-42fb-803a-2521c70d627d,0,1,ce988b8a-d0c1-400a-9466-aa757501bb58,ce988b8a-d0c1-400a-9466-aa757501bb58,0,1,ab98d665-8da8-406e-9e0e-3e130ab393ef,ab98d665-8da8-406e-9e0e-3e130ab393ef,0,1,9e823bb6-b0c0-439e-81e4-ebd46b79b99c,9e823bb6-b0c0-439e-81e4-ebd46b79b99c,0,1,118a0e62-c0bb-435b-9e3e-c64563efa602,118a0e62-c0bb-435b-9e3e-c64563efa602,0,1,b57bc8a9-8a59-4192-a442-2e1982e83179,b57bc8a9-8a59-4192-a442-2e1982e83179,0,1,5b06ccda-2a70-4621-8273-78408cbe72a9,5b06ccda-2a70-4621-8273-78408cbe72a9,0,1,89753385-64fd-4e76-9857-bfd5d7c23f71,89753385-64fd-4e76-9857-bfd5d7c23f71,0,1,1b3113f3-e7d4-4e6f-b6ed-08f5fd78c68e,1b3113f3-e7d4-4e6f-b6ed-08f5fd78c68e,0,1,53e72cf2-e2a5-4b59-b5b1-a1fc28fda5bf,53e72cf2-e2a5-4b59-b5b1-a1fc28fda5bf,0,1,e20bcb57-2f68-4709-8a11-105d561a2dda,e20bcb57-2f68-4709-8a11-105d561a2dda,0,1,3df3f61a-2c17-4278-8d82-91089f793e6a,3df3f61a-2c17-4278-8d82-91089f793e6a,0,1,ea8beea1-7d80-4613-b2f9-79ee612e977a,ea8beea1-7d80-4613-b2f9-79ee612e977a,0,1,afd62a32-fdbb-429a-9a64-89c61a07e018,afd62a32-fdbb-429a-9a64-89c61a07e018,0,1,027cef43-99bd-48d3-a1a3-2102ac003742,027cef43-99bd-48d3-a1a3-2102ac003742,0,1,00197ea9-de76-4e2a-97bc-93e44053e35e,00197ea9-de76-4e2a-97bc-93e44053e35e,0,1,540a47b8-f6d4-4531-ac87-3f7cfbef4c8c,540a47b8-f6d4-4531-ac87-3f7cfbef4c8c,0,1,a51f7c6f-2631-4d23-becc-c0e8b711fddd,a51f7c6f-2631-4d23-becc-c0e8b711fddd,0,1,37806357-d92c-4bea-a5ef-77f138578fda,37806357-d92c-4bea-a5ef-77f138578fda,0,1,91b100e6-fbbe-4bb0-8d51-d12595a2a3e8,91b100e6-fbbe-4bb0-8d51-d12595a2a3e8,0,1,0a880538-f97f-448e-a4a9-82b0194dbe28,0a880538-f97f-448e-a4a9-82b0194dbe28,0,1,179868b7-d342-4df0-9386-c114d75faf3a,179868b7-d342-4df0-9386-c114d75faf3a,0,1,bbc4cc8c-31c2-4fcf-b86c-9ec65b2772b0,bbc4cc8c-31c2-4fcf-b86c-9ec65b2772b0,0,1,b49ea672-5d01-46c2-8ece-2511afeb740d,b49ea672-5d01-46c2-8ece-2511afeb740d,0,1,77bb5aba-1364-4db9-aa93-69f001ce2709,77bb5aba-1364-4db9-aa93-69f001ce2709,0,1,d14528d6-c2dd-4184-98c5-0b444a2bd98b,d14528d6-c2dd-4184-98c5-0b444a2bd98b,0,1,48f81387-a409-4163-85b8-ad563cb6cf2e,48f81387-a409-4163-85b8-ad563cb6cf2e,0,1,739df12e-1b6b-45c6-802b-658641fb9e90,739df12e-1b6b-45c6-802b-658641fb9e90,0,1,878fe826-fa99-44ad-9891-5eada9744017,878fe826-fa99-44ad-9891-5eada9744017,0,1,0d61712a-dfaf-46f1-b728-62993dd94fbe,0d61712a-dfaf-46f1-b728-62993dd94fbe,0,1,3a6cf496-09b9-4947-9df5-06d23b474558,3a6cf496-09b9-4947-9df5-06d23b474558,0,1,625b498a-33d1-4162-9525-fb7790cbb6a8,625b498a-33d1-4162-9525-fb7790cbb6a8,0,1,28223f7b-d15a-4f12-b57c-1f6d08a902f9,28223f7b-d15a-4f12-b57c-1f6d08a902f9,0,1,dd9eb5b7-5aed-4e51-9939-9ff14492d240,dd9eb5b7-5aed-4e51-9939-9ff14492d240,0,1,b2a14899-d589-4990-b85e-7bffb427e8af,b2a14899-d589-4990-b85e-7bffb427e8af,0,1,0981d114-05bd-4ee1-a8fd-398fa6620d0b,0981d114-05bd-4ee1-a8fd-398fa6620d0b,0,1,3210ba40-382e-4917-ad0f-9bd88d23dc25,3210ba40-382e-4917-ad0f-9bd88d23dc25,0,1,835e3ead-d01f-410b-937a-902dd5e66aec,835e3ead-d01f-410b-937a-902dd5e66aec,0,1,40141982-d1d6-416f-844e-19143a407ff9,40141982-d1d6-416f-844e-19143a407ff9,0,1,618b8843-7413-4634-bd65-18d904c2582f,618b8843-7413-4634-bd65-18d904c2582f,0,1,253b97a6-4e04-40d0-a39e-99500d54accb,253b97a6-4e04-40d0-a39e-99500d54accb,0,1,46cf1217-4b49-4c35-9c2b-4739dd1b8bf5,46cf1217-4b49-4c35-9c2b-4739dd1b8bf5,0,1,db367faa-e417-40ff-a082-e93421d464ca,db367faa-e417-40ff-a082-e93421d464ca,0,1,55ad14cb-7647-4d16-ae68-ac45e4a39c01,55ad14cb-7647-4d16-ae68-ac45e4a39c01,0,1,f0363f45-9d63-4f0b-b7fc-95cb0d1660af,f0363f45-9d63-4f0b-b7fc-95cb0d1660af,0,1,d8a16236-89bc-4493-9b8e-fd5d3f9298a7,d8a16236-89bc-4493-9b8e-fd5d3f9298a7,0,1,b12a0998-905e-4956-af8b-6460dc945c10,b12a0998-905e-4956-af8b-6460dc945c10,0,1,66ec2482-c1f3-45d3-9257-e0b9f5ae772a,66ec2482-c1f3-45d3-9257-e0b9f5ae772a,0,1,d3211832-c8ca-437a-8810-82e06cbb48de,d3211832-c8ca-437a-8810-82e06cbb48de,0,1,8131d701-1014-4196-9b67-914e451f8a3a,8131d701-1014-4196-9b67-914e451f8a3a,0,1,2b102933-c660-4e74-ae9a-5061a88ed672,2b102933-c660-4e74-ae9a-5061a88ed672,0,1,56c897b7-d34e-4d7d-9a3b-d0779be5c189,56c897b7-d34e-4d7d-9a3b-d0779be5c189,0,1,3ac81c80-56bd-4750-b135-07ab522e3eab,3ac81c80-56bd-4750-b135-07ab522e3eab,0,1,5657872f-c7d5-446f-bcc3-d0b86ad63a42,5657872f-c7d5-446f-bcc3-d0b86ad63a42,0,1,d5214cb9-67e2-469f-989f-3f2b662ae830,d5214cb9-67e2-469f-989f-3f2b662ae830,0,1,69679e88-4f2b-4dd6-8cb2-b88293d07b55,69679e88-4f2b-4dd6-8cb2-b88293d07b55,0,1,68679208-9972-4854-8649-49bdf6212255,68679208-9972-4854-8649-49bdf6212255,0,1,98393093-7ba6-4b4d-86be-ee5826cd8cd5,98393093-7ba6-4b4d-86be-ee5826cd8cd5,0,1,87de486d-3f35-4432-a7cd-9d3832db63cf,87de486d-3f35-4432-a7cd-9d3832db63cf,0,1,246f17a0-93a7-4e2c-8fa6-f57405f0abeb,246f17a0-93a7-4e2c-8fa6-f57405f0abeb,0,1,ea6c4830-a34d-4026-a0ca-5cf7e44f089d,ea6c4830-a34d-4026-a0ca-5cf7e44f089d,0,1,bb7ce04a-8143-4c0b-a196-1b57f1640142,bb7ce04a-8143-4c0b-a196-1b57f1640142,0,1,4872f12c-705c-4dd3-802f-d27496a0d634,4872f12c-705c-4dd3-802f-d27496a0d634,0,1,3bacfd93-dfc7-4154-9d3f-b61ddc5c6721,3bacfd93-dfc7-4154-9d3f-b61ddc5c6721,0,1,0c0bbfba-c1c4-4bb5-a813-10da4bef7911,0c0bbfba-c1c4-4bb5-a813-10da4bef7911,0,1,f9ada91a-e673-4821-9bce-cb0dd75ca28b,f9ada91a-e673-4821-9bce-cb0dd75ca28b,0,1,9fcf68bb-43e2-4cd1-89ec-8797ad9c0e8b,9fcf68bb-43e2-4cd1-89ec-8797ad9c0e8b,0,1,90ce635a-0277-4056-980d-d1a16d91cb30,90ce635a-0277-4056-980d-d1a16d91cb30,0,1,e61a8360-a0f8-4d86-b91a-2ae9b8552bf0,e61a8360-a0f8-4d86-b91a-2ae9b8552bf0,0,1,1e77e873-632c-482b-8f46-8f8cc3cc8cef,1e77e873-632c-482b-8f46-8f8cc3cc8cef,0,1,766208a3-2780-427b-a7d3-93abe99d236b,766208a3-2780-427b-a7d3-93abe99d236b,0,1,63ce4c3c-5bad-409c-904f-18f34cf1da78,63ce4c3c-5bad-409c-904f-18f34cf1da78,0,1,62bddcee-bef6-42cc-9ba3-e99b8160dcc2,62bddcee-bef6-42cc-9ba3-e99b8160dcc2,0,1,26ac22f9-0bbb-4671-b446-626e345e2461,26ac22f9-0bbb-4671-b446-626e345e2461,0,1,0d63ee6d-e17f-4a86-b384-adf9793f3331,0d63ee6d-e17f-4a86-b384-adf9793f3331,0,1,f152945b-2a7b-449e-a915-176166af7bac,f152945b-2a7b-449e-a915-176166af7bac,0,1,77f5d86a-7fae-4490-9740-0e31102dab5c,77f5d86a-7fae-4490-9740-0e31102dab5c,0,1,5a54bc1a-d178-412c-bf4a-cf92d7f141aa,5a54bc1a-d178-412c-bf4a-cf92d7f141aa,0,1,24be43ec-d39e-46aa-9c11-2536b835e515,24be43ec-d39e-46aa-9c11-2536b835e515,0,1,c9ca80ef-c7b7-4425-b5c0-3d13af82f291,c9ca80ef-c7b7-4425-b5c0-3d13af82f291,0,1,df9af3ee-6a69-4a03-8ff5-0735e9a38013,df9af3ee-6a69-4a03-8ff5-0735e9a38013,0,1,1b27eb77-d535-43a5-8ae1-fa2fec15d92c,1b27eb77-d535-43a5-8ae1-fa2fec15d92c,0,1,7743fe24-b941-4dad-bc76-05fb6b26b1d7,7743fe24-b941-4dad-bc76-05fb6b26b1d7,0,1,5bf2da0d-f318-4036-9234-8a3a6eca88b2,5bf2da0d-f318-4036-9234-8a3a6eca88b2,0,1,288525fc-d3fa-4c8e-a1d7-d2d1ef4cd0ef,288525fc-d3fa-4c8e-a1d7-d2d1ef4cd0ef,0,1,c3634571-6fe5-45ab-9362-161305eef661,c3634571-6fe5-45ab-9362-161305eef661,0,1,ec11342f-594f-416f-a10f-bd1bfa695c08,ec11342f-594f-416f-a10f-bd1bfa695c08,0,1,31c3ac44-204e-43fd-bca3-fd18fa091c58,31c3ac44-204e-43fd-bca3-fd18fa091c58,0,1,74f03c35-5da0-406e-a938-e8e5d49975ef,74f03c35-5da0-406e-a938-e8e5d49975ef,0,1,c9ab3890-6d16-431f-ab2b-b5058e6202a4,c9ab3890-6d16-431f-ab2b-b5058e6202a4,0,1,5ee9eed7-3c6c-4264-ab9a-6f24f9c80598,5ee9eed7-3c6c-4264-ab9a-6f24f9c80598,0,1,3c33adc7-abea-4e0f-9e5d-d8f10abb63df,3c33adc7-abea-4e0f-9e5d-d8f10abb63df,0,1,4090c6f7-1d25-4b17-9baa-18daa0640b0f,4090c6f7-1d25-4b17-9baa-18daa0640b0f,0,1,26125e58-dfc8-4bbb-a3a4-80616471746e,26125e58-dfc8-4bbb-a3a4-80616471746e,0,1,b1c699cd-efdc-461c-ad37-10bfd4bc9674,b1c699cd-efdc-461c-ad37-10bfd4bc9674,0,1,6add1920-5073-4b1e-b7e0-13bf1e65e4c3,6add1920-5073-4b1e-b7e0-13bf1e65e4c3,0,1,f12c946c-98e4-4da6-8a88-c555e9dc3bdd,f12c946c-98e4-4da6-8a88-c555e9dc3bdd,0,1,ec5718b7-1c4d-4bdc-9426-40a339bb29cf,ec5718b7-1c4d-4bdc-9426-40a339bb29cf,0,1,ecd8772d-e33f-426f-a87a-e28bd94d5fdf,ecd8772d-e33f-426f-a87a-e28bd94d5fdf,0,1,96661303-1286-4f84-93b7-0e6da2bd7893,96661303-1286-4f84-93b7-0e6da2bd7893,0,1,68076431-36e6-46dc-92cb-e0d8e605bf66,68076431-36e6-46dc-92cb-e0d8e605bf66,0,1,239fa55a-6572-4e5c-9918-c2e14063c76d,239fa55a-6572-4e5c-9918-c2e14063c76d,0,1,8211a1b6-c3b1-466b-8d11-22603fb50c7a,8211a1b6-c3b1-466b-8d11-22603fb50c7a,0,1,7e7dfcb5-04eb-40f4-8f4c-f29644e81473,7e7dfcb5-04eb-40f4-8f4c-f29644e81473,0,1,daef68a3-c6c3-450d-b8fd-7af2a2f5572e,daef68a3-c6c3-450d-b8fd-7af2a2f5572e,0,1,a83cb338-5707-42c9-9e88-11f6c68fcc32,a83cb338-5707-42c9-9e88-11f6c68fcc32,0,1,985106b7-7476-4b48-90ac-ad86876395b5,985106b7-7476-4b48-90ac-ad86876395b5,0,1,0d8db0c9-adbc-478d-997c-3d7feccac99b,0d8db0c9-adbc-478d-997c-3d7feccac99b,0,1,3fd2ef04-c178-47bf-ab62-7baf83236d99,3fd2ef04-c178-47bf-ab62-7baf83236d99,0,1,b4cd1b51-dbc0-4bb0-879e-5ac0d58e78c1,b4cd1b51-dbc0-4bb0-879e-5ac0d58e78c1,0,1,320bf2e6-a3a8-490b-8aa0-21369ffb121b,320bf2e6-a3a8-490b-8aa0-21369ffb121b,0,1,a3bafc54-8fe4-4841-acc6-74a87baf9caf,a3bafc54-8fe4-4841-acc6-74a87baf9caf,0,1,f93741c9-ab94-464b-b0d4-4af99c9f92d5,f93741c9-ab94-464b-b0d4-4af99c9f92d5,0,1,0fddbd8d-12dd-4af1-9e34-feebf4bc38b1,0fddbd8d-12dd-4af1-9e34-feebf4bc38b1,0,1,2e9548a6-1fd8-4430-8864-91bde0d2a7a1,2e9548a6-1fd8-4430-8864-91bde0d2a7a1,0,1,c59fd3f8-c734-49d3-90ba-e608a22ac981,c59fd3f8-c734-49d3-90ba-e608a22ac981,0,1,b26235ed-374c-44ab-8b3c-01d7c4d82d4c,b26235ed-374c-44ab-8b3c-01d7c4d82d4c,0,1,5056db9f-9ebe-4cca-98f0-5f4817a1cba4,5056db9f-9ebe-4cca-98f0-5f4817a1cba4,0,1,475f76ea-f494-41f1-9b65-f39907e5a427,475f76ea-f494-41f1-9b65-f39907e5a427,0,1,986280d1-41bb-4b15-a5ae-516d6a04c1f4,986280d1-41bb-4b15-a5ae-516d6a04c1f4,0,1,43bfd29a-d254-4c33-8639-200b483578c1,43bfd29a-d254-4c33-8639-200b483578c1,0,1,6a274167-7f80-4613-9890-259ffd8ccfc4,6a274167-7f80-4613-9890-259ffd8ccfc4,0,1,4e90e1ab-b1ec-4795-ad45-1db151a5492c,4e90e1ab-b1ec-4795-ad45-1db151a5492c,0,1,91791e56-ca80-4d90-b8a8-16145f6a9721,91791e56-ca80-4d90-b8a8-16145f6a9721,0,1,b242c6a2-5ac9-4edb-b5dd-24eda8162151,b242c6a2-5ac9-4edb-b5dd-24eda8162151,0,1,8d080f3c-06ed-48bf-9709-eea73d676741,8d080f3c-06ed-48bf-9709-eea73d676741,0,1,57b31a5d-9fdc-43d2-ae81-67157822c4b6,57b31a5d-9fdc-43d2-ae81-67157822c4b6,0,1,d4e2da66-9a70-459f-a873-cb4ad71d17b2,d4e2da66-9a70-459f-a873-cb4ad71d17b2,0,1,a84a91d2-d326-4bf4-82e6-d573ee35d090,a84a91d2-d326-4bf4-82e6-d573ee35d090,0,1,39cbda23-db3f-4ddd-8981-8540247406db,39cbda23-db3f-4ddd-8981-8540247406db,0,1,c8a18d99-62ff-45a4-acb5-48e3310c1b53,c8a18d99-62ff-45a4-acb5-48e3310c1b53,0,1,a6eb0cb1-80f0-4390-80ff-7af53f8e63c3,a6eb0cb1-80f0-4390-80ff-7af53f8e63c3,0,1,3500c6fa-813a-49dd-a4bf-163500db5b7f,3500c6fa-813a-49dd-a4bf-163500db5b7f,0,1,1d02493a-dd89-4a51-b75e-9c49f9818b95,1d02493a-dd89-4a51-b75e-9c49f9818b95,0,1,2845c5d1-e836-4499-bcae-f3c8fdae75ee,2845c5d1-e836-4499-bcae-f3c8fdae75ee,0,1,fe4e8e4e-9471-4583-b9b3-576007db08ee,fe4e8e4e-9471-4583-b9b3-576007db08ee,0,1,49deaaa8-6d50-4b25-8153-6712d88fb0fb,49deaaa8-6d50-4b25-8153-6712d88fb0fb,0,1,1eeb7634-e924-4ad8-92e0-1c54c22b1ba6,1eeb7634-e924-4ad8-92e0-1c54c22b1ba6,0,1,46a06de8-06fd-4b49-835f-4f24b832b3c4,46a06de8-06fd-4b49-835f-4f24b832b3c4,0,1,3845a567-4375-4c3a-af61-5b82674060ab,3845a567-4375-4c3a-af61-5b82674060ab,0,1,ab210fb8-4fc4-47f8-b8ef-3a00eeb0ab8b,ab210fb8-4fc4-47f8-b8ef-3a00eeb0ab8b,0,1,a835a3a7-989b-4247-b836-d23bba2f391a,a835a3a7-989b-4247-b836-d23bba2f391a,0,1,58f5c354-8f1d-4064-ba35-527ea3d2f4a9,58f5c354-8f1d-4064-ba35-527ea3d2f4a9,0,1,9b149c20-9328-4e2d-a34b-95c883ae4dcc,9b149c20-9328-4e2d-a34b-95c883ae4dcc,0,1,f8dbf226-ea56-4b15-baf1-a41fceba2a32,f8dbf226-ea56-4b15-baf1-a41fceba2a32,0,1,fc1476f7-26e6-4374-b99b-e515d86c050a,fc1476f7-26e6-4374-b99b-e515d86c050a,0,1,e0eb7b4a-9a13-4752-9327-e13d2abc4fc5,e0eb7b4a-9a13-4752-9327-e13d2abc4fc5,0,1,59fe985a-f169-495b-bd6d-4b64401f81b0,59fe985a-f169-495b-bd6d-4b64401f81b0,0,1,184d1023-fba9-4e56-b592-519254abe922,184d1023-fba9-4e56-b592-519254abe922,0,1,cb68b275-f191-4632-a8ea-aa8809256804,cb68b275-f191-4632-a8ea-aa8809256804,0,1,174011b9-8fe2-43f5-adea-21f6d73835ff,174011b9-8fe2-43f5-adea-21f6d73835ff,0,1,c4753515-a483-453e-a48b-b12d8ef48fd9,c4753515-a483-453e-a48b-b12d8ef48fd9,0,1,2d9048eb-abdf-4980-96ed-788fbb0f4ea7,2d9048eb-abdf-4980-96ed-788fbb0f4ea7,0,1,98c3bc52-2351-460c-8b8e-0d3f45ca3131,98c3bc52-2351-460c-8b8e-0d3f45ca3131,0,1,b1ff31b9-c9f2-4be4-ac9a-62faa1d1eb81,b1ff31b9-c9f2-4be4-ac9a-62faa1d1eb81,0,1,c14ea7a0-1fb6-4d54-82d6-7f12f11b0c0b,c14ea7a0-1fb6-4d54-82d6-7f12f11b0c0b,0,1,29645810-44aa-402c-9561-7819d6f4a7ab,29645810-44aa-402c-9561-7819d6f4a7ab,0,1,46bf4911-5200-44ac-9b4d-eb0089c12e34,46bf4911-5200-44ac-9b4d-eb0089c12e34,0,1,6e1685bd-7269-401c-b36e-def6a36b41d5,6e1685bd-7269-401c-b36e-def6a36b41d5,0,1,9d77103a-9921-4f6c-98fc-d7f42f0f2d8d,9d77103a-9921-4f6c-98fc-d7f42f0f2d8d,0,1,e03b6592-b597-4795-a78e-775d4f2258db,e03b6592-b597-4795-a78e-775d4f2258db,0,1,6ae9e86a-a42f-4de0-a891-6abe1ed16cdd,6ae9e86a-a42f-4de0-a891-6abe1ed16cdd,0,1,3b207d5f-6584-4cf2-9173-20235484f9f4,3b207d5f-6584-4cf2-9173-20235484f9f4,0,1,878d9efe-b0e7-487f-b8f7-83470c131e09,878d9efe-b0e7-487f-b8f7-83470c131e09,0,1,8270573d-8ed6-449d-853b-462d2dabaaa9,8270573d-8ed6-449d-853b-462d2dabaaa9,0,1,baeec6cd-b220-4240-95f2-3a0c1ee06c2e,baeec6cd-b220-4240-95f2-3a0c1ee06c2e,0,1,f2502463-67e4-4bfe-8ad5-fb80aa73975a,f2502463-67e4-4bfe-8ad5-fb80aa73975a,0,1,59e885e6-d978-40c2-95b6-35fc61074fb4,59e885e6-d978-40c2-95b6-35fc61074fb4,0,1,267dc512-9ee1-4bc1-9034-3effb7fb2949,267dc512-9ee1-4bc1-9034-3effb7fb2949,0,1,0f211e73-5be9-4015-93e7-ccf63e793cb6,0f211e73-5be9-4015-93e7-ccf63e793cb6,0,1,6574d8f4-fb97-4a26-b166-711fad63aa07,6574d8f4-fb97-4a26-b166-711fad63aa07,0,1,fb3eddaf-3241-4d59-8314-97a5ae9258c4,fb3eddaf-3241-4d59-8314-97a5ae9258c4,0,1,6528bd7a-bac1-4c8b-9b00-6be01c0121b1,6528bd7a-bac1-4c8b-9b00-6be01c0121b1,0,1,d8601e95-af94-4805-974a-99c539725d74,d8601e95-af94-4805-974a-99c539725d74,0,1,6d98f877-f3bb-4795-9025-2631468a331f,6d98f877-f3bb-4795-9025-2631468a331f,0,1,89b9379d-ace9-48cc-b979-a66fd45aeb1d,89b9379d-ace9-48cc-b979-a66fd45aeb1d,0,1,c4a5c44d-329d-41b5-9a6c-bddbc15f6249,c4a5c44d-329d-41b5-9a6c-bddbc15f6249,0,1,9767a113-5a42-4749-bf40-0f349e85615d,9767a113-5a42-4749-bf40-0f349e85615d,0,1,a3b0494c-f436-45ea-9577-4c0c86b057c9,a3b0494c-f436-45ea-9577-4c0c86b057c9,0,1,5101c142-b25c-4bef-80e7-7407f2c15c90,5101c142-b25c-4bef-80e7-7407f2c15c90,0,1,6d7872f1-fd54-41c4-8253-5f2b125f31ae,6d7872f1-fd54-41c4-8253-5f2b125f31ae,0,1,0c218200-27a8-4f71-9b09-3632dd453644,0c218200-27a8-4f71-9b09-3632dd453644,0,1,2d8a74e5-eb29-448b-b4c0-1f41fa171b5e,2d8a74e5-eb29-448b-b4c0-1f41fa171b5e,0,1,b5d30250-18ab-4af1-b99a-ff5dba334d1f,b5d30250-18ab-4af1-b99a-ff5dba334d1f,0,1,936f1aa5-7516-444b-b451-1162fa5d705f,936f1aa5-7516-444b-b451-1162fa5d705f,0,1,e8d5533e-2669-44f6-9eed-eaedab666d42,e8d5533e-2669-44f6-9eed-eaedab666d42,0,1,dd8e0f41-51a3-4bf2-a32e-084f9ad09be7,dd8e0f41-51a3-4bf2-a32e-084f9ad09be7,0,1,9e323b0d-4e3b-45d4-9705-aa30e63014f5,9e323b0d-4e3b-45d4-9705-aa30e63014f5,0,1,5afa798a-958e-4e0c-a380-0104f4c037a7,5afa798a-958e-4e0c-a380-0104f4c037a7,0,1,c0295fd9-c749-41b3-8d0d-6af16f484b1f,c0295fd9-c749-41b3-8d0d-6af16f484b1f,0,1,bd32a863-3090-432d-89c4-356ba86a0bdc,bd32a863-3090-432d-89c4-356ba86a0bdc,0,1,4621bf5a-46b5-4b82-8ae4-cc8e11e81ba0,4621bf5a-46b5-4b82-8ae4-cc8e11e81ba0,0,1,ed5465b4-a556-4078-ab18-49fef2afba2e,ed5465b4-a556-4078-ab18-49fef2afba2e,0,1,7368ab8f-59d5-4270-a43b-0f3e422169ed,7368ab8f-59d5-4270-a43b-0f3e422169ed,0,1,eeb0571b-1b74-4889-b8b5-f94186d692d7,eeb0571b-1b74-4889-b8b5-f94186d692d7,0,1,9ef3b72c-caa3-486b-9917-04c00f6689c1,9ef3b72c-caa3-486b-9917-04c00f6689c1,0,1,cb3039d8-4b11-4d03-b0ca-eae5dfc01b0a,cb3039d8-4b11-4d03-b0ca-eae5dfc01b0a,0,1,9245417f-f247-47ba-a1b4-a17ec2e8776c,9245417f-f247-47ba-a1b4-a17ec2e8776c,0,1,a4b721d7-b119-47eb-80e0-7db34c83964f,a4b721d7-b119-47eb-80e0-7db34c83964f,0,1,512629d1-e8b7-4f66-b613-b8c0cb9c250b,512629d1-e8b7-4f66-b613-b8c0cb9c250b,0,1,b7cf4684-4432-4658-9c06-b315d470a3a6,b7cf4684-4432-4658-9c06-b315d470a3a6,0,1,d3bc8211-54d8-47dd-aecf-5da72b65195f,d3bc8211-54d8-47dd-aecf-5da72b65195f,0,1,33f11da8-f670-4ec3-9d40-96fce031c60f,33f11da8-f670-4ec3-9d40-96fce031c60f,0,1,97cbd5b5-5a39-418c-93b5-f9934fa1ba4e,97cbd5b5-5a39-418c-93b5-f9934fa1ba4e,0,1,f74c2d41-2433-4bed-8aef-adfeed198252,f74c2d41-2433-4bed-8aef-adfeed198252,0,1,3c2b8a8a-bfe7-4e37-9d83-55a695a06605,3c2b8a8a-bfe7-4e37-9d83-55a695a06605,0,1,56c9703a-751a-4e6c-81f4-a8756fb040e3,56c9703a-751a-4e6c-81f4-a8756fb040e3,0,1,c3a86eec-1ff5-4392-9904-91a12a2e253a,c3a86eec-1ff5-4392-9904-91a12a2e253a,0,1,f5df72a3-c71c-412b-8c3e-6329f1d3a7da,f5df72a3-c71c-412b-8c3e-6329f1d3a7da,0,1,f02b7246-dae9-4e15-b4cd-b06133664d34,f02b7246-dae9-4e15-b4cd-b06133664d34,0,1,77f20022-17ce-4e00-8a84-015238bce6f3,77f20022-17ce-4e00-8a84-015238bce6f3,0,1,3734619b-7059-4547-8b97-0b3393389d4d,3734619b-7059-4547-8b97-0b3393389d4d,0,1,a30bf95f-aabd-4da0-8287-61e08f9362fb,a30bf95f-aabd-4da0-8287-61e08f9362fb,0,1,f5a7df18-2ddb-4053-9aeb-57fc37ae557e,f5a7df18-2ddb-4053-9aeb-57fc37ae557e,0,1,4078867c-2972-47f9-bebd-935a6f1cc667,4078867c-2972-47f9-bebd-935a6f1cc667,0,1,8502fe39-c241-4be5-a313-fd887bbbdfa1,8502fe39-c241-4be5-a313-fd887bbbdfa1,0,1,67a71201-13e5-42a3-902f-fb3a59710dfb,67a71201-13e5-42a3-902f-fb3a59710dfb,0,1,3a79a951-a997-4596-ab62-ba376d67725d,3a79a951-a997-4596-ab62-ba376d67725d,0,1,dd4fe688-c113-4ac5-8114-b89cf1b0eb55,dd4fe688-c113-4ac5-8114-b89cf1b0eb55,0,1,884c28de-434f-440a-8c63-67e659c097ad,884c28de-434f-440a-8c63-67e659c097ad,0,1,92ead3b5-8c55-4e4d-bd47-009e025b22f8,92ead3b5-8c55-4e4d-bd47-009e025b22f8,0,1,50d8e365-aa58-4b60-8992-01943379d485,50d8e365-aa58-4b60-8992-01943379d485,0,1,9bb58c7c-d87d-435b-adf6-09c8f75d47b2,9bb58c7c-d87d-435b-adf6-09c8f75d47b2,0,1,b3f7f763-bea9-4f59-9450-df95e5c3d89d,b3f7f763-bea9-4f59-9450-df95e5c3d89d,0,1,9111e28e-c1c7-414b-9288-61bd06a04d04,9111e28e-c1c7-414b-9288-61bd06a04d04,0,1,bcd705ba-c9ac-4e73-94b1-7632c0f06c04,bcd705ba-c9ac-4e73-94b1-7632c0f06c04,0,1,094d5482-286d-4e1a-8888-c0452d2e5af0,094d5482-286d-4e1a-8888-c0452d2e5af0,0,1,fec102ea-a3f6-49b5-b4b8-6884b0654129,fec102ea-a3f6-49b5-b4b8-6884b0654129,0,1,184405d0-34a7-4668-9a64-d92a6a7da142,184405d0-34a7-4668-9a64-d92a6a7da142,0,1,bccf8909-6f99-44d8-9c91-688958fc95f4,bccf8909-6f99-44d8-9c91-688958fc95f4,0,1,246571fb-38c7-4da6-929d-d8b44bc3437c,246571fb-38c7-4da6-929d-d8b44bc3437c,0,1,047fd6d7-5e30-4184-a09a-6525de526cc7,047fd6d7-5e30-4184-a09a-6525de526cc7,0,1,beb44b02-5d5e-4127-aee7-e184a43a4210,beb44b02-5d5e-4127-aee7-e184a43a4210,0,1,1dedfbc2-9250-4229-a6ea-5e085f33e7c3,1dedfbc2-9250-4229-a6ea-5e085f33e7c3,0,1,e24641ed-3e92-46d7-852b-9958ab7bc520,e24641ed-3e92-46d7-852b-9958ab7bc520,0,1,bc2aa3f9-ef2c-49a5-8cd9-ddd8a8cbe19d,bc2aa3f9-ef2c-49a5-8cd9-ddd8a8cbe19d,0,1,b6ac4cd6-c68f-4464-88e9-a8d335d581c6,b6ac4cd6-c68f-4464-88e9-a8d335d581c6,0,1,2c61114f-abd7-4415-8cdf-4fe95d9fe354,2c61114f-abd7-4415-8cdf-4fe95d9fe354,0,1,abd7a766-5cc1-48db-8d29-797e9d666a78,abd7a766-5cc1-48db-8d29-797e9d666a78,0,1,1704b5e3-8e77-4df6-9223-e6e5c41a280d,1704b5e3-8e77-4df6-9223-e6e5c41a280d,0,1,62eca88f-025d-44de-b92c-46cd8bc7e4a1,62eca88f-025d-44de-b92c-46cd8bc7e4a1,0,1,b0dde395-8498-4469-9507-d290798117d7,b0dde395-8498-4469-9507-d290798117d7,0,1,999616ea-0faa-4ae2-9841-6a6997ea6694,999616ea-0faa-4ae2-9841-6a6997ea6694,0,1,c5f91669-13d8-4f0a-a054-2701078da38a,c5f91669-13d8-4f0a-a054-2701078da38a,0,1,34f9872b-e02e-4093-ba06-3cb5b8995850,34f9872b-e02e-4093-ba06-3cb5b8995850,0,1,18515c19-c9ef-4c9f-8d12-4f58ffa251e8,18515c19-c9ef-4c9f-8d12-4f58ffa251e8,0,1,e61eef89-b3de-4b73-b7d9-af75318093e5,e61eef89-b3de-4b73-b7d9-af75318093e5,0,1,94e68502-adf1-476e-be2f-8418385959fa,94e68502-adf1-476e-be2f-8418385959fa,0,1,bf80ccc5-f907-4e7f-a007-6030c7ba682e,bf80ccc5-f907-4e7f-a007-6030c7ba682e,0,1,a330acd1-bc97-4ef8-8ecb-5604868ca044,a330acd1-bc97-4ef8-8ecb-5604868ca044,0,1,05f1f184-50cb-47c5-b3a8-62be6a9780c1,05f1f184-50cb-47c5-b3a8-62be6a9780c1,0,1,58c3936c-4db0-45c8-a22e-b5dd49a61497,58c3936c-4db0-45c8-a22e-b5dd49a61497,0,1,9aa607bc-5870-436a-bbe1-296560393e3b,9aa607bc-5870-436a-bbe1-296560393e3b,0,1,1635be16-4861-4a7d-babc-4caff448a7f7,1635be16-4861-4a7d-babc-4caff448a7f7,0,1,9e399087-c957-4a7a-ab9d-2b689736caab,9e399087-c957-4a7a-ab9d-2b689736caab,0,1,e7542e37-a2f0-43b5-852e-4e2b24b1b71f,e7542e37-a2f0-43b5-852e-4e2b24b1b71f,0,1,3e94649c-7d69-4fb4-ada1-ae00eabf02b6,3e94649c-7d69-4fb4-ada1-ae00eabf02b6,0,1,2b7372be-af0d-464e-8d09-8172229790af,2b7372be-af0d-464e-8d09-8172229790af,0,1,d85346db-be25-4dab-a2db-647c3d40dd17,d85346db-be25-4dab-a2db-647c3d40dd17,0,1,c7bafd34-5b15-42ec-b329-0be3002775ad,c7bafd34-5b15-42ec-b329-0be3002775ad,0,1,6feb2278-9149-47f8-a0ec-eb4bd9f44716,6feb2278-9149-47f8-a0ec-eb4bd9f44716,0,1,c960082b-8c16-4d7b-b7fd-b1f2bfe07e0b,c960082b-8c16-4d7b-b7fd-b1f2bfe07e0b,0,1,fb07fd61-2aae-4759-b6ef-c44c2bba4036,fb07fd61-2aae-4759-b6ef-c44c2bba4036,0,1,cd6770d5-cd3c-47af-bc46-c865993adf63,cd6770d5-cd3c-47af-bc46-c865993adf63,0,1,9f9936fc-54a0-4812-b12d-2f8f91551440,9f9936fc-54a0-4812-b12d-2f8f91551440,0,1,a5667633-9264-4dfa-9e26-c45e96e61ae3,a5667633-9264-4dfa-9e26-c45e96e61ae3,0,1,2eeea138-481c-4fde-9e8a-709d751cc469,2eeea138-481c-4fde-9e8a-709d751cc469,0,1,02c5f3b2-d691-4eaf-84fd-763770e4b1cb,02c5f3b2-d691-4eaf-84fd-763770e4b1cb,0,1,845262f8-8208-4c90-98ec-c85dd5734cf0,845262f8-8208-4c90-98ec-c85dd5734cf0,0,1,ad066c0d-4f4c-48af-9cc8-bb835372150a,ad066c0d-4f4c-48af-9cc8-bb835372150a,0,1,a2145e81-239e-4267-8a43-ea3f7babe878,a2145e81-239e-4267-8a43-ea3f7babe878,0,1,3326bbcb-b277-44db-a252-2448119e8146,3326bbcb-b277-44db-a252-2448119e8146,0,1,61cac5f7-320c-4098-9078-44fadcdeb219,61cac5f7-320c-4098-9078-44fadcdeb219,0,1,304304b1-36a4-42bb-8ab9-b23b59795001,304304b1-36a4-42bb-8ab9-b23b59795001,0,1,a22d1a4f-cb7c-4bcc-b258-ecca282fb071,a22d1a4f-cb7c-4bcc-b258-ecca282fb071,0,1,e5beda2c-f4e2-4a6b-a1d0-a877eb0c9f5b,e5beda2c-f4e2-4a6b-a1d0-a877eb0c9f5b,0,1,cd454738-62dd-4f95-af33-b52750678428,cd454738-62dd-4f95-af33-b52750678428,0,1,2a479b8f-7569-43d0-8ca3-9001d6ec57f0,2a479b8f-7569-43d0-8ca3-9001d6ec57f0,0,1,e4abafc6-f859-4d96-9818-5b9bf8d66d69,e4abafc6-f859-4d96-9818-5b9bf8d66d69,0,1,535acd2c-26d2-4f32-9ae6-cc1956317c59,535acd2c-26d2-4f32-9ae6-cc1956317c59,0,1,801adeeb-8a7f-44c1-b649-a7dfffc7b65d,801adeeb-8a7f-44c1-b649-a7dfffc7b65d,0,1,ac4e0868-ba49-46b4-8872-d42483a5591f,ac4e0868-ba49-46b4-8872-d42483a5591f,0,1,45e6c4a6-1d63-4b94-a7d2-fbd3fb68061b,45e6c4a6-1d63-4b94-a7d2-fbd3fb68061b,0,1,0493dcf1-5f94-41f9-a4c7-a52e12a29068,0493dcf1-5f94-41f9-a4c7-a52e12a29068,0,1,ca4c0299-625a-4b03-be0e-36ffb45c6d08,ca4c0299-625a-4b03-be0e-36ffb45c6d08,0,1,7fa1119b-4321-4b8f-a879-1d940084145a,7fa1119b-4321-4b8f-a879-1d940084145a,0,1,5d9c0841-6ea6-48dc-a53b-9f19894750f8,5d9c0841-6ea6-48dc-a53b-9f19894750f8,0,1,86b5303b-d967-4bc6-b2da-066c5a58613f,86b5303b-d967-4bc6-b2da-066c5a58613f,0,1,853b824d-9377-475f-913e-d02bd60f5f64,853b824d-9377-475f-913e-d02bd60f5f64,0,1,0c5e261f-961e-4780-877a-06589400b88a,0c5e261f-961e-4780-877a-06589400b88a,0,1,ee1f8545-ea64-41de-a29a-2d40e15d4f16,ee1f8545-ea64-41de-a29a-2d40e15d4f16,0,1,25ba3c5d-ace1-43cd-987f-68364b9b6970,25ba3c5d-ace1-43cd-987f-68364b9b6970,0,1,b8f5019e-b53f-4508-a042-bbadda2d1fd4,b8f5019e-b53f-4508-a042-bbadda2d1fd4,0,1,b250d233-70a0-4baf-8b7d-6e1d414a11b9,b250d233-70a0-4baf-8b7d-6e1d414a11b9,0,1,4599ef83-5f1e-44af-ae0c-67988656a99e,4599ef83-5f1e-44af-ae0c-67988656a99e,0,1,acb0d7eb-2ed9-4419-b79d-7dc661d70c30,acb0d7eb-2ed9-4419-b79d-7dc661d70c30,0,1,e1b94dcf-ec37-4b2d-a7af-120eeee40944,e1b94dcf-ec37-4b2d-a7af-120eeee40944,0,1,7d2a37b1-a1a0-435a-846a-95e255655044,7d2a37b1-a1a0-435a-846a-95e255655044,0,1,109db64c-00dc-490e-99a5-4430d9344e99,109db64c-00dc-490e-99a5-4430d9344e99,0,1,85837a55-fed5-4b7b-a622-30d728b9a677,85837a55-fed5-4b7b-a622-30d728b9a677,0,1,0fd79cdb-dc7a-40ca-a3bc-2c7a7b4691bb,0fd79cdb-dc7a-40ca-a3bc-2c7a7b4691bb,0,1,6ede8b5c-7df0-44a5-9136-8109bbd8b5a9,6ede8b5c-7df0-44a5-9136-8109bbd8b5a9,0,1,da9821c3-4b16-48b7-9088-d3cf8ac536a6,da9821c3-4b16-48b7-9088-d3cf8ac536a6,0,1,d5142574-a040-4dd0-a482-cdc61c1d86ab,d5142574-a040-4dd0-a482-cdc61c1d86ab,0,1,fb36c775-1124-4ba6-8af8-133bf66fcb54,fb36c775-1124-4ba6-8af8-133bf66fcb54,0,1,51f9aff4-71da-4b1b-b48b-04122a17d855,51f9aff4-71da-4b1b-b48b-04122a17d855,0,1,778e79ee-eb1a-4d52-8a31-58e781c78fe4,778e79ee-eb1a-4d52-8a31-58e781c78fe4,0,1,90385850-d37b-4b2e-ac87-95c17f32197c,90385850-d37b-4b2e-ac87-95c17f32197c,0,1,f480ac52-e2f1-4ed0-a0b1-20a622f77302,f480ac52-e2f1-4ed0-a0b1-20a622f77302,0,1,5c63e7cd-ecdb-45ae-a589-f6c38f5a8e76,5c63e7cd-ecdb-45ae-a589-f6c38f5a8e76,0,1,b9b0fbdc-8fda-46d1-bb3e-561a03604971,b9b0fbdc-8fda-46d1-bb3e-561a03604971,0,1,eadfdbe3-bc85-4084-aef6-4cfd258ee6f1,eadfdbe3-bc85-4084-aef6-4cfd258ee6f1,0,1,672c2936-9771-4e32-a970-7ac7f12a21e8,672c2936-9771-4e32-a970-7ac7f12a21e8,0,1,73afaad8-dfa9-43e3-bdaf-543c3545d788,73afaad8-dfa9-43e3-bdaf-543c3545d788,0,1,c264441d-4805-4968-baa2-37b8970049c7,c264441d-4805-4968-baa2-37b8970049c7,0,1,4f0bda80-2246-43be-95f8-ae8480682cd5,4f0bda80-2246-43be-95f8-ae8480682cd5,0,1,ac4fa2a4-93a1-4aa6-986a-5f576457fc8a,ac4fa2a4-93a1-4aa6-986a-5f576457fc8a,0,1,6f683f46-9eef-4e78-bc2f-7174238bf53c,6f683f46-9eef-4e78-bc2f-7174238bf53c,0,1,7d1ed38b-98cf-4a0e-a605-680bb580d904,7d1ed38b-98cf-4a0e-a605-680bb580d904,0,1,b769eda0-11de-401c-a68b-4fce4555d4fc,b769eda0-11de-401c-a68b-4fce4555d4fc,0,1,fd7a668f-3099-4e15-956a-92c6295dd4d5,fd7a668f-3099-4e15-956a-92c6295dd4d5,0,1,afcbd830-ec5f-4865-a176-ea3014dff908,afcbd830-ec5f-4865-a176-ea3014dff908,0,1,dc5fc801-14e4-42e8-b396-76eb30b69eea,dc5fc801-14e4-42e8-b396-76eb30b69eea,0,1,f36150de-33af-4410-8a4c-8c9f4b545793,f36150de-33af-4410-8a4c-8c9f4b545793,0,1,62f97480-7d4a-48f3-9d1d-612909b242c9,62f97480-7d4a-48f3-9d1d-612909b242c9,0,1,2b4f6e2f-6cc4-4c7c-98a6-786f3793366b,2b4f6e2f-6cc4-4c7c-98a6-786f3793366b,0,1,3068be84-a401-4701-8ac9-411fae130f84,3068be84-a401-4701-8ac9-411fae130f84,0,1,957394a7-e5b8-47fc-8680-1e71efe2be7d,957394a7-e5b8-47fc-8680-1e71efe2be7d,0,1,ba49a9e4-6ec1-43ff-92cd-9dbf221bbf09,ba49a9e4-6ec1-43ff-92cd-9dbf221bbf09,0,1,4f25ef45-c8d9-401d-b0e8-2217ac310f04,4f25ef45-c8d9-401d-b0e8-2217ac310f04,0,1,504ca240-b5ae-433e-ae5f-d818263eea23,504ca240-b5ae-433e-ae5f-d818263eea23,0,1,32461819-9437-417d-8d1e-851c9a2dcee2,32461819-9437-417d-8d1e-851c9a2dcee2,0,1,74228950-8a4b-4dd6-a053-8650de202521,74228950-8a4b-4dd6-a053-8650de202521,0,1,6b9ce91e-08b9-4972-9878-1724c67b68ec,6b9ce91e-08b9-4972-9878-1724c67b68ec,0,1,640814f2-6082-475e-8006-25fd5b24afdb,640814f2-6082-475e-8006-25fd5b24afdb,0,1,6fcd2a3a-4d66-40e3-bde0-5c274b43783f,6fcd2a3a-4d66-40e3-bde0-5c274b43783f,0,1,569047c2-0879-4fba-a814-44812d21043b,569047c2-0879-4fba-a814-44812d21043b,0,1,f1b66ea8-262d-4b38-a039-b83a843f6ee8,f1b66ea8-262d-4b38-a039-b83a843f6ee8,0,1,bcae6e05-f1fd-413e-9eef-2e1cee42a962,bcae6e05-f1fd-413e-9eef-2e1cee42a962,0,1,40da1bca-ebb3-4c64-bf54-1f37b71d47b6,40da1bca-ebb3-4c64-bf54-1f37b71d47b6,0,1,778b4c8f-7a1e-4b4b-9f68-12cbf52bf195,778b4c8f-7a1e-4b4b-9f68-12cbf52bf195,0,1,91562fe8-e630-4bcb-a14e-c0e1e129141a,91562fe8-e630-4bcb-a14e-c0e1e129141a,0,1,c261abfd-3828-47b5-aa32-dfdd3a1636ad,c261abfd-3828-47b5-aa32-dfdd3a1636ad,0,1,e71f8f26-addf-4b12-a244-11610ed03bba,e71f8f26-addf-4b12-a244-11610ed03bba,0,1,e9aa6dab-0d96-42ce-9bd6-b8b10d755f8c,e9aa6dab-0d96-42ce-9bd6-b8b10d755f8c,0,1,84da1ef8-1784-4dfc-b17a-7728aa7ff62a,84da1ef8-1784-4dfc-b17a-7728aa7ff62a,0,1,9155c95b-6afb-41bb-bd0b-d37e503fc163,9155c95b-6afb-41bb-bd0b-d37e503fc163,0,1,d917c19e-be15-41cc-9c8a-a97c8de85309,d917c19e-be15-41cc-9c8a-a97c8de85309,0,1,5e33e655-2847-4237-87ff-74775fd36756,5e33e655-2847-4237-87ff-74775fd36756,0,1,f0907d81-656e-4dfb-81d8-14a8847cb38a,f0907d81-656e-4dfb-81d8-14a8847cb38a,0,1,47907538-9357-4885-8b50-17f2e16c260f,47907538-9357-4885-8b50-17f2e16c260f,0,1,17e1840f-fef3-4f17-8476-273e6af24cb4,17e1840f-fef3-4f17-8476-273e6af24cb4,0,1,a64566fa-b706-49bc-8277-4531145c400e,a64566fa-b706-49bc-8277-4531145c400e,0,1,a8f32b13-249c-4ce6-a521-f06a87f2e670,a8f32b13-249c-4ce6-a521-f06a87f2e670,0,1,815775e4-cfb7-495b-87c4-d134b90d93d4,815775e4-cfb7-495b-87c4-d134b90d93d4,0,1,e867f2f1-0550-4d15-9e40-ba36c9aabfbd,e867f2f1-0550-4d15-9e40-ba36c9aabfbd,0,1,8bdbb9ef-3a91-4374-b3c5-9447005bb1b7,8bdbb9ef-3a91-4374-b3c5-9447005bb1b7,0,1,7a27b378-89ac-4cad-8c69-a0cd14812d7e,7a27b378-89ac-4cad-8c69-a0cd14812d7e,0,1,d2433a11-8e1d-4e4c-966d-37cde6283f72,d2433a11-8e1d-4e4c-966d-37cde6283f72,0,1,59eb5919-3c33-48bf-b322-ec78018e4142,59eb5919-3c33-48bf-b322-ec78018e4142,0,1,63f308a5-b955-48a5-8052-50c5bede65d0,63f308a5-b955-48a5-8052-50c5bede65d0,0,1,1b614b97-5c1d-497a-9574-40114059f836,1b614b97-5c1d-497a-9574-40114059f836,0,1,477dfea4-e401-4cf0-b0a8-2df7c3836c58,477dfea4-e401-4cf0-b0a8-2df7c3836c58,0,1,294c000f-6979-4ed1-bbc7-7402facd9185,294c000f-6979-4ed1-bbc7-7402facd9185,0,1,db607fbc-f785-47d5-9550-577424aa3fe9,db607fbc-f785-47d5-9550-577424aa3fe9,0,1,b7111ddf-a623-4bae-90aa-636148492ca2,b7111ddf-a623-4bae-90aa-636148492ca2,0,1,905d9dcd-5793-4362-8fe8-2edce8c35e32,905d9dcd-5793-4362-8fe8-2edce8c35e32,0,1,a96cb6fd-54e0-4514-9210-7f4636acd336,a96cb6fd-54e0-4514-9210-7f4636acd336,0,1,3580e7a7-95d1-4a8e-bc12-a1449fe03757,3580e7a7-95d1-4a8e-bc12-a1449fe03757,0,1,13759790-6c70-4323-9321-a68b90c51663,13759790-6c70-4323-9321-a68b90c51663,0,1,d9704b20-c29c-4e7f-b777-0ac9080a5631,d9704b20-c29c-4e7f-b777-0ac9080a5631,0,1,c1372891-0f55-4868-ab97-906eff52be0e,c1372891-0f55-4868-ab97-906eff52be0e,0,1,33e96bda-1708-4ee4-8d4d-3b919bda3e38,33e96bda-1708-4ee4-8d4d-3b919bda3e38,0,1,53fb35a7-44ab-42e7-8dba-6fa08bf5ba2c,53fb35a7-44ab-42e7-8dba-6fa08bf5ba2c,0,1,93fcaa62-2a19-468b-9128-c7930583fbfd,93fcaa62-2a19-468b-9128-c7930583fbfd,0,1,2d885109-4c96-41c0-a996-785bfd793c2d,2d885109-4c96-41c0-a996-785bfd793c2d,0,1,e870a1bd-0c08-4d1e-832a-357922983c19,e870a1bd-0c08-4d1e-832a-357922983c19,0,1,9f71aeac-f889-40dc-91bd-d670da4efd2b,9f71aeac-f889-40dc-91bd-d670da4efd2b,0,1,62f8a9b2-9e56-4d5c-a7e2-a85f5b27a5b7,62f8a9b2-9e56-4d5c-a7e2-a85f5b27a5b7,0,1,614ef0bd-3298-408b-bf71-37df8ee60702,614ef0bd-3298-408b-bf71-37df8ee60702,0,1,26ff1be6-f72a-456a-9dce-302029752603,26ff1be6-f72a-456a-9dce-302029752603,0,1,db850a08-0c99-4a57-9b04-38be64bd38fb,db850a08-0c99-4a57-9b04-38be64bd38fb,0,1,abeca127-5ae9-46af-a5e8-d6438fd68367,abeca127-5ae9-46af-a5e8-d6438fd68367,0,1,bce81631-9f6d-42b3-b4b6-2199afb08f2f,bce81631-9f6d-42b3-b4b6-2199afb08f2f,0,1,67d6878f-3e47-4142-8f98-c5a207f0b8a8,67d6878f-3e47-4142-8f98-c5a207f0b8a8,0,1,7f4b872f-0e50-49dd-984d-f5fc3ac3f2f0,7f4b872f-0e50-49dd-984d-f5fc3ac3f2f0,0,1,68636657-4d46-4c2a-9b2f-11521a55dfb4,68636657-4d46-4c2a-9b2f-11521a55dfb4,0,1,18a83f43-dc84-4f8a-9580-681b19f571c4,18a83f43-dc84-4f8a-9580-681b19f571c4,0,1,01c588b0-d0ce-4978-b04d-084e6a00fcc7,01c588b0-d0ce-4978-b04d-084e6a00fcc7,0,1,a23642d9-8c4f-44a5-8865-bfb286e47c55,a23642d9-8c4f-44a5-8865-bfb286e47c55,0,1,7b37e038-dcef-41e1-b6e7-ed73c6958415,7b37e038-dcef-41e1-b6e7-ed73c6958415,0,1,24df2d14-5ebf-4ded-ba14-5daee7a0c536,24df2d14-5ebf-4ded-ba14-5daee7a0c536,0,1,13d6e2e9-b268-4c1b-8b8b-30c5296cfe4c,13d6e2e9-b268-4c1b-8b8b-30c5296cfe4c,0,1,03bb028a-ee8c-411e-8382-653046f803c6,03bb028a-ee8c-411e-8382-653046f803c6,0,1,c4fa80ca-32d6-4a44-9fe2-7ffd67e1cb30,c4fa80ca-32d6-4a44-9fe2-7ffd67e1cb30,0,1,8aa73dfd-41ac-4f79-bf73-cd2da51b1232,8aa73dfd-41ac-4f79-bf73-cd2da51b1232,0,1,38d5ed93-133b-44fe-827a-69a6cfc0461d,38d5ed93-133b-44fe-827a-69a6cfc0461d,0,1,cae8a6f2-bbe9-4b73-b839-9bf8e5e2818d,cae8a6f2-bbe9-4b73-b839-9bf8e5e2818d,0,1,0a79ee40-e6d6-4dbf-8378-98c2ec1e8ef9,0a79ee40-e6d6-4dbf-8378-98c2ec1e8ef9,0,1,5148d263-de26-4c92-b090-ae59f42dfb05,5148d263-de26-4c92-b090-ae59f42dfb05,0,1,dbefe81f-85cf-4d84-9600-b359598c2543,dbefe81f-85cf-4d84-9600-b359598c2543,0,1,1a624a06-93b8-4d1f-8c14-2061e1e7927c,1a624a06-93b8-4d1f-8c14-2061e1e7927c,0,1,4ad54ca8-8e4a-4a35-9537-0395851fcdfb,4ad54ca8-8e4a-4a35-9537-0395851fcdfb,0,1,3e427c09-79ed-45f7-b4c9-d9aa7ccc01b2,3e427c09-79ed-45f7-b4c9-d9aa7ccc01b2,0,1,1a4dd1f5-c2d6-4e06-b428-ab7870810bf3,1a4dd1f5-c2d6-4e06-b428-ab7870810bf3,0,1,d5967e0f-03cd-4190-a702-7e9290eae1eb,d5967e0f-03cd-4190-a702-7e9290eae1eb,0,1,78fdbce8-8479-4edd-89c0-1bbaf8ffd482,78fdbce8-8479-4edd-89c0-1bbaf8ffd482,0,1,8eb18de5-8283-4d0c-bb11-b882e78181d5,8eb18de5-8283-4d0c-bb11-b882e78181d5,0,1,27b27cc5-d1ad-4a2a-bcf4-ec2ebb3eba43,27b27cc5-d1ad-4a2a-bcf4-ec2ebb3eba43,0,1,7059b117-714c-4710-aebe-76f88c4d41d5,7059b117-714c-4710-aebe-76f88c4d41d5,0,1,ea050453-4947-40dc-aa2a-503ddd1a235a,ea050453-4947-40dc-aa2a-503ddd1a235a,0,1,37d0e6d4-702e-46f5-ae87-4d393fa0c701,37d0e6d4-702e-46f5-ae87-4d393fa0c701,0,1,1e963c1e-f914-46e1-81d3-90d126fc6f8d,1e963c1e-f914-46e1-81d3-90d126fc6f8d,0,1,3a62d88e-9298-42c0-bd87-c749ecd01d19,3a62d88e-9298-42c0-bd87-c749ecd01d19,0,1,abbf064e-c6ea-4712-930b-a9fef42e0ee1,abbf064e-c6ea-4712-930b-a9fef42e0ee1,0,1,fc13dd80-ce44-4ed1-a9d7-dae44602b954,fc13dd80-ce44-4ed1-a9d7-dae44602b954,0,1,a3fe224e-c3ef-4e30-90e4-c4ed5eb11824,a3fe224e-c3ef-4e30-90e4-c4ed5eb11824,0,1,433b23a1-a863-4775-b2f2-1384e8f3cbbb,433b23a1-a863-4775-b2f2-1384e8f3cbbb,0,1,a1677c47-b9a4-427a-972d-9bb2293445b6,a1677c47-b9a4-427a-972d-9bb2293445b6,0,1,e4a328c0-e73b-465d-ae36-38e5a71690fa,e4a328c0-e73b-465d-ae36-38e5a71690fa,0,1,bf66612b-aec4-414b-bee6-9bcab145c7cc,bf66612b-aec4-414b-bee6-9bcab145c7cc,0,1,811f356f-554a-4a63-90b6-dedb5fec7c05,811f356f-554a-4a63-90b6-dedb5fec7c05,0,1,85bebd81-a355-4010-889b-cff6f72dafcb,85bebd81-a355-4010-889b-cff6f72dafcb,0,1,49521f36-fd1b-47dd-81cc-48b6fb651e22,49521f36-fd1b-47dd-81cc-48b6fb651e22,0,1,1491cc2a-b3be-4bcc-a181-ce68d4b5d4cb,1491cc2a-b3be-4bcc-a181-ce68d4b5d4cb,0,1,bc946e21-53bb-4332-8c63-7b0aa78826eb,bc946e21-53bb-4332-8c63-7b0aa78826eb,0,1,4be2bdad-9a43-4593-acbc-a02e9144a89f,4be2bdad-9a43-4593-acbc-a02e9144a89f,0,1,64a86d5d-f925-45ee-82da-76df1cc20729,64a86d5d-f925-45ee-82da-76df1cc20729,0,1,eb4455f2-a5a0-44fb-8302-7312bc32df66,eb4455f2-a5a0-44fb-8302-7312bc32df66,0,1,cd6d2ab5-8e5c-4db3-8c8c-0526046a9b68,cd6d2ab5-8e5c-4db3-8c8c-0526046a9b68,0,1,9f20e59e-7db8-466f-b965-7045fc3f1489,9f20e59e-7db8-466f-b965-7045fc3f1489,0,1,cb057756-d3f7-4c50-a9d0-bac9ca2abd46,cb057756-d3f7-4c50-a9d0-bac9ca2abd46,0,1,89ac3d39-1915-4e67-a4e4-5a67a155cb75,89ac3d39-1915-4e67-a4e4-5a67a155cb75,0,1,d27b637d-5a51-49ff-bf73-343891534586,d27b637d-5a51-49ff-bf73-343891534586,0,1,b5a073a2-54e2-47c9-b533-f75fd2c9f343,b5a073a2-54e2-47c9-b533-f75fd2c9f343,0,1,0c8571be-f9b6-4292-add9-980cfe7fa2ec,0c8571be-f9b6-4292-add9-980cfe7fa2ec,0,1,989b8ccd-bc05-48c1-9969-b3733028b65f,989b8ccd-bc05-48c1-9969-b3733028b65f,0,1,6c70b13d-f9d0-459f-8d38-c01c11f356f1,6c70b13d-f9d0-459f-8d38-c01c11f356f1,0,1,bbaed1bd-0eb7-4f2b-b844-ab79c1d0a091,bbaed1bd-0eb7-4f2b-b844-ab79c1d0a091,0,1,2e7fbea4-57ac-4633-bb39-8725e57bc7ba,2e7fbea4-57ac-4633-bb39-8725e57bc7ba,0,1,83ae9b22-20ff-4e94-9282-19daf2274328,83ae9b22-20ff-4e94-9282-19daf2274328,0,1,dcad5d84-6643-4f0b-9e6e-73fe343db4a7,dcad5d84-6643-4f0b-9e6e-73fe343db4a7,0,1,e1ca1374-6dad-46d3-bb72-b67f3e6b1809,e1ca1374-6dad-46d3-bb72-b67f3e6b1809,0,1,a92b2b70-7e69-49d1-b921-c9d1b0718f94,a92b2b70-7e69-49d1-b921-c9d1b0718f94,0,1,d57a3300-0f9f-4fe5-b627-01c96b723053,d57a3300-0f9f-4fe5-b627-01c96b723053,0,1,19f690a3-d27b-43c1-94b7-585fc628da05,19f690a3-d27b-43c1-94b7-585fc628da05,0,1,d375fac5-098c-42b5-a0bd-9a4ae7516ada,d375fac5-098c-42b5-a0bd-9a4ae7516ada,0,1,29034f3e-d2eb-44e0-ac85-f2ffaf14eb90,29034f3e-d2eb-44e0-ac85-f2ffaf14eb90,0,1,ce65563d-03dc-46d8-96d4-c2d4ae2a2960,ce65563d-03dc-46d8-96d4-c2d4ae2a2960,0,1,5079f17e-dfd6-43f4-83fa-6ac408e5bd3b,5079f17e-dfd6-43f4-83fa-6ac408e5bd3b,0,1,7a4346c3-f1aa-4ce0-886e-76cd9abf563c,7a4346c3-f1aa-4ce0-886e-76cd9abf563c,0,1,cf783265-a4cb-436f-963a-1ff8220ae246,cf783265-a4cb-436f-963a-1ff8220ae246,0,1,3560f949-48f9-4fca-9fe2-81efc1ec0eee,3560f949-48f9-4fca-9fe2-81efc1ec0eee,0,1,662078f0-b75d-4c44-896f-7b7f74fd1ed4,662078f0-b75d-4c44-896f-7b7f74fd1ed4,0,1,4fa11304-fbd4-4c90-909d-5024283a6868,4fa11304-fbd4-4c90-909d-5024283a6868,0,1,207290c2-5221-48ad-99aa-bb0f7955df3f,207290c2-5221-48ad-99aa-bb0f7955df3f,0,1,162137ef-dea2-4ace-9e67-897dad0e7c3d,162137ef-dea2-4ace-9e67-897dad0e7c3d,0,1,d91a016e-cca9-4976-9c53-2c96fa95cf1a,d91a016e-cca9-4976-9c53-2c96fa95cf1a,0,1,012fb2f1-1c15-4800-8968-78a90c2a1348,012fb2f1-1c15-4800-8968-78a90c2a1348,0,1,a29a36aa-3c90-4be9-8ffc-20237721d1d0,a29a36aa-3c90-4be9-8ffc-20237721d1d0,0,1,aec8f9e6-d177-45f5-ba55-2d662428c2ae,aec8f9e6-d177-45f5-ba55-2d662428c2ae,0,1,b0bf8af5-d824-459c-bc40-17495406af3c,b0bf8af5-d824-459c-bc40-17495406af3c,0,1,7dfdd08b-7cd9-480c-829d-97f5e7152eec,7dfdd08b-7cd9-480c-829d-97f5e7152eec,0,1,64752b64-80ae-4537-986a-d61423dc546b,64752b64-80ae-4537-986a-d61423dc546b,0,1,2c37e123-ea35-4501-93e1-2fa295444bec,2c37e123-ea35-4501-93e1-2fa295444bec,0,1,c8bd3ac8-3b49-46bb-aadd-7270ad2868fc,c8bd3ac8-3b49-46bb-aadd-7270ad2868fc,0,1,a997a430-3ea8-4fde-9f53-7b507a04c215,a997a430-3ea8-4fde-9f53-7b507a04c215,0,1,f648e19d-026b-4fa7-8e70-1866b27b94f8,f648e19d-026b-4fa7-8e70-1866b27b94f8,0,1,d32081fc-47d3-4e66-837e-705c94ba8ca8,d32081fc-47d3-4e66-837e-705c94ba8ca8,0,1,69c207c2-7699-4467-b127-286ecd6d0f29,69c207c2-7699-4467-b127-286ecd6d0f29,0,1,e33df42d-4c64-4475-8294-6b05ecdb4e02,e33df42d-4c64-4475-8294-6b05ecdb4e02,0,1,6094a0ed-2051-4649-ad75-dfeb389d3cbb,6094a0ed-2051-4649-ad75-dfeb389d3cbb,0,1,6944a7e2-b9a1-492f-a6f2-9bf31d97ec78,6944a7e2-b9a1-492f-a6f2-9bf31d97ec78,0,1,f3750ea4-5f9e-4ab3-9495-3f182ecff407,f3750ea4-5f9e-4ab3-9495-3f182ecff407,0,1,14002d51-87d4-4647-92ef-a9b1935cb666,14002d51-87d4-4647-92ef-a9b1935cb666,0,1,e941a39d-1f3c-4e6e-af17-75f92a15dd40,e941a39d-1f3c-4e6e-af17-75f92a15dd40,0,1,d9bbedcb-4872-4183-83c2-6c2aae9634b0,d9bbedcb-4872-4183-83c2-6c2aae9634b0,0,1,72c695c3-66f6-4aa8-8a39-737ec6967a1d,72c695c3-66f6-4aa8-8a39-737ec6967a1d,0,1,2beef1e0-7a59-407e-b454-ee2ec38ca4b3,2beef1e0-7a59-407e-b454-ee2ec38ca4b3,0,1,b57a1d6f-8375-4d57-a2c1-f53e25318ddb,b57a1d6f-8375-4d57-a2c1-f53e25318ddb,0,1,d5d11480-d5c7-4569-80c1-f872655ff084,d5d11480-d5c7-4569-80c1-f872655ff084,0,1,b1e45d36-08e9-430e-976b-03e6e3320c6a,b1e45d36-08e9-430e-976b-03e6e3320c6a,0,1,b5384eb7-40e4-4437-b96b-eab9b7b5b8f2,b5384eb7-40e4-4437-b96b-eab9b7b5b8f2,0,1,8e21374f-5a65-406c-856d-2040607da4bc,8e21374f-5a65-406c-856d-2040607da4bc,0,1,1b63cbbb-77b1-4e78-a4c7-ddea8ea7294d,1b63cbbb-77b1-4e78-a4c7-ddea8ea7294d,0,1,3e5f5167-8978-4191-b0f6-6a262b848b95,3e5f5167-8978-4191-b0f6-6a262b848b95,0,1,ae3aef9e-df3b-4ebc-912d-2bc581063745,ae3aef9e-df3b-4ebc-912d-2bc581063745,0,1,5c4ecf15-b92d-4610-b2bb-f2331c5c7528,5c4ecf15-b92d-4610-b2bb-f2331c5c7528,0,1,a8c09e65-6e10-4772-b264-6ead83d52fe3,a8c09e65-6e10-4772-b264-6ead83d52fe3,0,1,eb74ebf0-a9c6-4c4c-b279-5a46f40ea0d3,eb74ebf0-a9c6-4c4c-b279-5a46f40ea0d3,0,1,d5e1806b-9827-40ab-9cfa-23c22456d137,d5e1806b-9827-40ab-9cfa-23c22456d137,0,1,b57b186a-ec1e-46a2-87ae-6ba27793ebf6,b57b186a-ec1e-46a2-87ae-6ba27793ebf6,0,1,d24170d7-5477-4ec8-acd2-0de8bd2067d6,d24170d7-5477-4ec8-acd2-0de8bd2067d6,0,1,f047da82-7574-4da4-b54e-480195280a11,f047da82-7574-4da4-b54e-480195280a11,0,1,4a749e8c-cb35-4bc4-9b31-fb5bc0eab474,4a749e8c-cb35-4bc4-9b31-fb5bc0eab474,0,1,da4a0c05-2285-434b-b7f8-83b2a0d7f23d,da4a0c05-2285-434b-b7f8-83b2a0d7f23d,0,1,8afa9a0e-04c1-4cac-82bb-6767cc0594d9,8afa9a0e-04c1-4cac-82bb-6767cc0594d9,0,1,ecbe625a-55eb-437a-8dee-33fb034d4c0d,ecbe625a-55eb-437a-8dee-33fb034d4c0d,0,1,5d4cefac-5dc4-4d73-8b4b-900a8464fbb2,5d4cefac-5dc4-4d73-8b4b-900a8464fbb2,0,1,84796b00-79db-42ba-94d0-5bf543e09cd6,84796b00-79db-42ba-94d0-5bf543e09cd6,0,1,948b10b3-0d7c-4dca-8816-75eb86e7881b,948b10b3-0d7c-4dca-8816-75eb86e7881b,0,1,9de91b5a-98e4-414b-b650-b669b0159b49,9de91b5a-98e4-414b-b650-b669b0159b49,0,1,840dc727-288a-4bf2-8b1a-47629d28229c,840dc727-288a-4bf2-8b1a-47629d28229c,0,1,314ac8ca-8845-40c2-b844-91beb05fb601,314ac8ca-8845-40c2-b844-91beb05fb601,0,1,3de3948d-40ff-4e0d-8445-9bf49c916161,3de3948d-40ff-4e0d-8445-9bf49c916161,0,1,37ae1946-9436-47ef-8b8c-17ed0a24971c,37ae1946-9436-47ef-8b8c-17ed0a24971c,0,1,d844d861-fbe9-4391-89e3-00e505b33b33,d844d861-fbe9-4391-89e3-00e505b33b33,0,1,c0688817-fd73-4ead-b9dd-ec966780a2c2,c0688817-fd73-4ead-b9dd-ec966780a2c2,0,1,b1fbfbfe-766f-4018-9491-507748193808,b1fbfbfe-766f-4018-9491-507748193808,0,1,e55dfadb-8e12-4808-ad90-e891a4644548,e55dfadb-8e12-4808-ad90-e891a4644548,0,1,a792b3dc-ac80-492b-bd94-83eb0438ba9f,a792b3dc-ac80-492b-bd94-83eb0438ba9f,0,1,73a093ea-1927-483b-b6f5-8f0cbd253753,73a093ea-1927-483b-b6f5-8f0cbd253753,0,1,345f04c0-0274-4e79-b523-f1fa3cf0d92a,345f04c0-0274-4e79-b523-f1fa3cf0d92a,0,1,f3a14787-de1b-4b65-8cb1-bc33a785821c,f3a14787-de1b-4b65-8cb1-bc33a785821c,0,1,b9ba3ce3-9059-4135-9d31-725f01907431,b9ba3ce3-9059-4135-9d31-725f01907431,0,1,4d2b3767-7c96-44a6-bb1b-ab74b103b90e,4d2b3767-7c96-44a6-bb1b-ab74b103b90e,0,1,fc9fc58f-c888-41f0-9f57-70748b21706e,fc9fc58f-c888-41f0-9f57-70748b21706e,0,1,fc761833-aa85-4c6d-a36c-d1ed060e3bb1,fc761833-aa85-4c6d-a36c-d1ed060e3bb1,0,1,f0ba2ff2-b353-4f84-8e45-23e47ee6c1b6,f0ba2ff2-b353-4f84-8e45-23e47ee6c1b6,0,1,bb8bade2-5c1b-49a6-b66f-79a3ebff86f7,bb8bade2-5c1b-49a6-b66f-79a3ebff86f7,0,1,33596560-3d45-4d3e-b6ec-1c22162110ad,33596560-3d45-4d3e-b6ec-1c22162110ad,0,1,d3e82a06-daae-4f4d-b3f8-45a406e31664,d3e82a06-daae-4f4d-b3f8-45a406e31664,0,1,af76c3c9-d8dc-4156-9e10-80ee02fcf4fe,af76c3c9-d8dc-4156-9e10-80ee02fcf4fe,0,1,ac6a184d-1247-4b54-a023-f0d16daa5fe9,ac6a184d-1247-4b54-a023-f0d16daa5fe9,0,1,f9af5fe6-0b4f-4d48-92a4-1f2a29972155,f9af5fe6-0b4f-4d48-92a4-1f2a29972155,0,1,3ca1682d-5ff5-4b2b-96c2-54d2dd5297a9,3ca1682d-5ff5-4b2b-96c2-54d2dd5297a9,0,1,a687d346-73cf-4aea-a4d0-f29824f0f6f1,a687d346-73cf-4aea-a4d0-f29824f0f6f1,0,1,f51fda72-56d9-4b45-a775-a0e1dfbf3a27,f51fda72-56d9-4b45-a775-a0e1dfbf3a27,0,1,8bf73614-81a4-4702-88b9-3c6f2594d204,8bf73614-81a4-4702-88b9-3c6f2594d204,0,1,b8d4410b-f626-41b8-87c8-67102256bae2,b8d4410b-f626-41b8-87c8-67102256bae2,0,1,484eeb5f-12af-4139-a081-4dcac067a712,484eeb5f-12af-4139-a081-4dcac067a712,0,1,44d8556f-5abf-4b8a-bbb1-637642e0ab4e,44d8556f-5abf-4b8a-bbb1-637642e0ab4e,0,1,ec61075e-fbcb-494a-b790-81548a212d2b,ec61075e-fbcb-494a-b790-81548a212d2b,0,1,2f3bdc3c-4c5d-4fcb-85bb-932fe1747d98,2f3bdc3c-4c5d-4fcb-85bb-932fe1747d98,0,1,0c444045-302b-4dbd-a9a3-81fd40004948,0c444045-302b-4dbd-a9a3-81fd40004948,0,1,16099d54-e84f-47c5-aaf3-f8ced3cba5e0,16099d54-e84f-47c5-aaf3-f8ced3cba5e0,0,1,1528b799-1c0f-4244-85e8-e738b827934a,1528b799-1c0f-4244-85e8-e738b827934a,0,1,45d79e4d-8c2a-432b-abb8-fb9046abea40,45d79e4d-8c2a-432b-abb8-fb9046abea40,0,1,8f4d2fa9-c6ed-4f85-b3ef-f9214468ffc4,8f4d2fa9-c6ed-4f85-b3ef-f9214468ffc4,0,1,cb73c8c2-3b09-42e9-ac26-1bd51854efb6,cb73c8c2-3b09-42e9-ac26-1bd51854efb6,0,1,256618cc-0956-4cda-9691-e4ced68a791f,256618cc-0956-4cda-9691-e4ced68a791f,0,1,e20593fd-b3e3-41d2-8c8d-97b5d6148fa4,e20593fd-b3e3-41d2-8c8d-97b5d6148fa4,0,1,4b9771a7-b924-4e61-8468-4633e3c54706,4b9771a7-b924-4e61-8468-4633e3c54706,0,1,bc846fc8-3c67-45f8-9c5c-69bf1190baf9,bc846fc8-3c67-45f8-9c5c-69bf1190baf9,0,1,667de710-cee5-4a97-8434-641d199f3b68,667de710-cee5-4a97-8434-641d199f3b68,0,1,e9a2320b-71a1-4974-8b5a-1990062ec7df,e9a2320b-71a1-4974-8b5a-1990062ec7df,0,1,f6e85eeb-d81b-4526-9a33-ab77bd447236,f6e85eeb-d81b-4526-9a33-ab77bd447236,0,1,470e37fe-d149-4007-b397-12fc84f93041,470e37fe-d149-4007-b397-12fc84f93041,0,1,f8d9068d-8a4e-4b23-b5ca-5b9ddce1f60f,f8d9068d-8a4e-4b23-b5ca-5b9ddce1f60f,0,1,7175cfa0-885c-4807-98ec-af255dcd55d9,7175cfa0-885c-4807-98ec-af255dcd55d9,0,1,1773ff66-ebe4-46e1-b505-d07d87c7fe3e,1773ff66-ebe4-46e1-b505-d07d87c7fe3e,0,1,f5b66759-8102-4cba-a3fd-ee96db5bc809,f5b66759-8102-4cba-a3fd-ee96db5bc809,0,1,6c205eae-9113-46c1-a245-25d29173646e,6c205eae-9113-46c1-a245-25d29173646e,0,1,4cc4aa90-49fb-4602-9f9c-d4d47d223988,4cc4aa90-49fb-4602-9f9c-d4d47d223988,0,1,66ef1631-277b-4c22-99d7-1434b4dbbb3f,66ef1631-277b-4c22-99d7-1434b4dbbb3f,0,1,7cfa5a37-b9f8-43e4-ae33-e3a7251dd052,7cfa5a37-b9f8-43e4-ae33-e3a7251dd052,0,1,2f8a5b9d-ab86-492b-85d1-5a28535b2ebc,2f8a5b9d-ab86-492b-85d1-5a28535b2ebc,0,1,898535ff-50cd-464a-aadc-5e4f9de15b04,898535ff-50cd-464a-aadc-5e4f9de15b04,0,1,737f6f1b-9ffc-4916-b378-7321eab1f886,737f6f1b-9ffc-4916-b378-7321eab1f886,0,1,01dedf5b-2cce-4d24-81ea-2e3af82f5794,01dedf5b-2cce-4d24-81ea-2e3af82f5794,0,1,385e209d-65aa-43b1-8591-f92544882740,385e209d-65aa-43b1-8591-f92544882740,0,1,8381bc76-0e0f-4196-9911-ec05730cb1c9,8381bc76-0e0f-4196-9911-ec05730cb1c9,0,1,c224e520-7204-4f4a-aac9-b6221ea9ce44,c224e520-7204-4f4a-aac9-b6221ea9ce44,0,1,771a1900-46be-49fe-a02d-584780de8363,771a1900-46be-49fe-a02d-584780de8363,0,1,f81b1f2d-6fde-4861-8fee-1dbe6acf3985,f81b1f2d-6fde-4861-8fee-1dbe6acf3985,0,1,b62eecf6-6ee3-4a70-a4d6-3f064ae35c43,b62eecf6-6ee3-4a70-a4d6-3f064ae35c43,0,1,9bf2525c-e8fc-44e6-ac14-7df3208dbb0f,9bf2525c-e8fc-44e6-ac14-7df3208dbb0f,0,1,a2faa3f8-5064-4fbf-a90e-26d15c021cd3,a2faa3f8-5064-4fbf-a90e-26d15c021cd3,0,1,527ea8ca-e723-454a-8e9e-f2e7a38e62ee,527ea8ca-e723-454a-8e9e-f2e7a38e62ee,0,1,ef257b20-da10-4cda-8b9d-7de2d68a2f71,ef257b20-da10-4cda-8b9d-7de2d68a2f71,0,1,de0d41b7-acc0-4ebc-8933-d6b5ad351860,de0d41b7-acc0-4ebc-8933-d6b5ad351860,0,1,9ef5dd5e-1f26-4187-90a0-a3ac7aaabc1d,9ef5dd5e-1f26-4187-90a0-a3ac7aaabc1d,0,1,1a354069-07ea-40e0-bbac-e1b6232750c2,1a354069-07ea-40e0-bbac-e1b6232750c2,0,1,df31548b-0b8e-412b-999a-761970ae3c23,df31548b-0b8e-412b-999a-761970ae3c23,0,1,05135747-43e7-4b61-bc30-57b3289ea923,05135747-43e7-4b61-bc30-57b3289ea923,0,1,6d63728d-3384-4131-b890-1b82d14a04b7,6d63728d-3384-4131-b890-1b82d14a04b7,0,1,f4554046-493e-4960-94df-0a8b9d02f474,f4554046-493e-4960-94df-0a8b9d02f474,0,1,06abad33-2d69-4e8b-a16c-8aa0d4422d5a,06abad33-2d69-4e8b-a16c-8aa0d4422d5a,0,1,9222a6c0-b785-4811-bfb6-44ac44a55925,9222a6c0-b785-4811-bfb6-44ac44a55925,0,1,ea84021d-2431-44ad-a446-f1fb979c9e96,ea84021d-2431-44ad-a446-f1fb979c9e96,0,1,d86acdeb-fa70-4d1c-bd0c-1b4ea30c03dd,d86acdeb-fa70-4d1c-bd0c-1b4ea30c03dd,0,1,8fa21575-177f-4b7c-94b5-dfeefe737cb4,8fa21575-177f-4b7c-94b5-dfeefe737cb4,0,1,6da034af-0481-4a3c-aff9-c50ced6f21d4,6da034af-0481-4a3c-aff9-c50ced6f21d4,0,1,6fe57ea6-fe5e-48b1-bb31-5d42e4c2c6c7,6fe57ea6-fe5e-48b1-bb31-5d42e4c2c6c7,0,1,d07016c8-7d97-42cd-865b-85b49075adfb,d07016c8-7d97-42cd-865b-85b49075adfb,0,1,9202335d-50bb-4282-9438-24c7fb9cf637,9202335d-50bb-4282-9438-24c7fb9cf637,0,1,a62906e5-27f8-4e72-8769-9a3eed6997d7,a62906e5-27f8-4e72-8769-9a3eed6997d7,0,1,6c5d0ac3-6086-434c-812b-1c1158ecc574,6c5d0ac3-6086-434c-812b-1c1158ecc574,0,1,783536d7-c0db-44c9-96e8-58b57804d7c8,783536d7-c0db-44c9-96e8-58b57804d7c8,0,1,a8295435-c2c4-4aff-874b-7412556aa76d,a8295435-c2c4-4aff-874b-7412556aa76d,0,1,f6c4e24b-172b-4ba3-8e3e-988306ade660,f6c4e24b-172b-4ba3-8e3e-988306ade660,0,1,9baab24c-a5a3-46f4-ad17-a28d4a49f851,9baab24c-a5a3-46f4-ad17-a28d4a49f851,0,1,d1952319-0e42-4684-a386-fbe7c24526c2,d1952319-0e42-4684-a386-fbe7c24526c2,0,1,01cd59fc-8577-4b3c-9d69-6db75e81e7c4,01cd59fc-8577-4b3c-9d69-6db75e81e7c4,0,1,83b47a9d-d44b-4c40-becd-df74f9cb2e91,83b47a9d-d44b-4c40-becd-df74f9cb2e91,0,1,d03e636e-ff88-4e96-bf3c-d795d10cbcb0,d03e636e-ff88-4e96-bf3c-d795d10cbcb0,0,1,86e2a2eb-160f-4e93-a449-b2f726286d1b,86e2a2eb-160f-4e93-a449-b2f726286d1b,0,1,8e6e1f24-83bf-42c2-9eda-b3874c7910c3,8e6e1f24-83bf-42c2-9eda-b3874c7910c3,0,1,364184c2-ec71-44be-b40c-ba719b4ab0e1,364184c2-ec71-44be-b40c-ba719b4ab0e1,0,1,7ef46c54-ec0c-4211-a750-e5949956b593,7ef46c54-ec0c-4211-a750-e5949956b593,0,1,04823681-875e-459a-b3cf-051c89527f38,04823681-875e-459a-b3cf-051c89527f38,0,1,8e115a0c-a17c-4d7e-bd2c-305fb53d09ca,8e115a0c-a17c-4d7e-bd2c-305fb53d09ca,0,1,38265f08-3301-40d1-b630-a319c983e826,38265f08-3301-40d1-b630-a319c983e826,0,1,5175c496-bac7-4c57-9628-793b727aecd0,5175c496-bac7-4c57-9628-793b727aecd0,0,1,1453309e-77d0-444d-ac3f-fd7c2cb65c0c,1453309e-77d0-444d-ac3f-fd7c2cb65c0c,0,1,fc42df4a-93f0-461f-acfe-fea09158030f,fc42df4a-93f0-461f-acfe-fea09158030f,0,1,9f0a7909-0b97-48a7-964f-a52cb3c19c4e,9f0a7909-0b97-48a7-964f-a52cb3c19c4e,0,1,6d002aef-00c9-4069-80df-153151218831,6d002aef-00c9-4069-80df-153151218831,0,1,4fec3a6c-5a99-4763-aa07-d5de8712559e,4fec3a6c-5a99-4763-aa07-d5de8712559e,0,1,968a1202-d271-43e0-bfd4-d38e49ceadd4,968a1202-d271-43e0-bfd4-d38e49ceadd4,0,1,c80e2ef7-93b6-4cef-806a-2dfcf2fd80e6,c80e2ef7-93b6-4cef-806a-2dfcf2fd80e6,0,1,b3b4fbf1-cbf0-4ee2-a490-4d657693479b,b3b4fbf1-cbf0-4ee2-a490-4d657693479b,0,1,ea61e442-273e-4ce4-a806-8090893729ba,ea61e442-273e-4ce4-a806-8090893729ba,0,1,e7100f2b-d169-4635-ab87-7a2225ff12ee,e7100f2b-d169-4635-ab87-7a2225ff12ee,0,1,1e2d790c-0076-413a-b5fb-f25c01ab6ad5,1e2d790c-0076-413a-b5fb-f25c01ab6ad5,0,1,0dcc537b-76b3-4e73-b060-6cbdcf6345db,0dcc537b-76b3-4e73-b060-6cbdcf6345db,0,1,ae662b53-e11e-4b59-be52-b9d4ab00c4a4,ae662b53-e11e-4b59-be52-b9d4ab00c4a4,0,1,ce55df94-71e4-46ac-9b3b-bdae5d336b0a,ce55df94-71e4-46ac-9b3b-bdae5d336b0a,0,1,7601fa7e-079a-4347-abea-e161b2d00783,7601fa7e-079a-4347-abea-e161b2d00783,0,1,ee84cb40-f82d-4558-91be-229d68ad9f4a,ee84cb40-f82d-4558-91be-229d68ad9f4a,0,1,101a7eff-9556-4165-879a-a7c8a852e236,101a7eff-9556-4165-879a-a7c8a852e236,0,1,01775932-3603-4efc-9235-abdb97490dea,01775932-3603-4efc-9235-abdb97490dea,0,1,7637844b-4059-4f8a-8436-b4f4e8cb4f74,7637844b-4059-4f8a-8436-b4f4e8cb4f74,0,1,b6bb4cbe-b6fa-4d28-b372-0b959951ad4d,b6bb4cbe-b6fa-4d28-b372-0b959951ad4d,0,1,0ee5b788-61dc-464b-86da-f985df7704b6,0ee5b788-61dc-464b-86da-f985df7704b6,0,1,2375c6a8-9799-4b7c-a48d-091a90c67693,2375c6a8-9799-4b7c-a48d-091a90c67693,0,1,3d3c3360-4502-4ad4-bbe9-35d4ba9b54b3,3d3c3360-4502-4ad4-bbe9-35d4ba9b54b3,0,1,9b0671c6-6e92-42e6-9cf4-13d4be11f27d,9b0671c6-6e92-42e6-9cf4-13d4be11f27d,0,1,63c6522f-be04-422a-b4f4-0f55f58b09a8,63c6522f-be04-422a-b4f4-0f55f58b09a8,0,1,be919dc1-a377-43e1-82e6-ce946cabdd55,be919dc1-a377-43e1-82e6-ce946cabdd55,0,1,6b17a0fc-4d6f-4189-9067-c58a95f04dd7,6b17a0fc-4d6f-4189-9067-c58a95f04dd7,0,1,9ded532e-9e60-4895-a4c5-4ea6697aa83c,9ded532e-9e60-4895-a4c5-4ea6697aa83c,0,1,106c5159-ffc7-4059-b3e3-acf74326a44f,106c5159-ffc7-4059-b3e3-acf74326a44f,0,1,d39fd717-1a69-4fd3-889e-4fa9abefea1c,d39fd717-1a69-4fd3-889e-4fa9abefea1c,0,1,5b85e6df-7493-4201-97ad-2aea14de6006,5b85e6df-7493-4201-97ad-2aea14de6006,0,1,061e6c0f-ba52-40ec-96ad-2eba3eee3097,061e6c0f-ba52-40ec-96ad-2eba3eee3097,0,1,d77e3c65-e9fd-4ba7-885f-a8a2f4c827d2,d77e3c65-e9fd-4ba7-885f-a8a2f4c827d2,0,1,4fb86bf3-02ad-4f0e-85a9-98be6c350a06,4fb86bf3-02ad-4f0e-85a9-98be6c350a06,0,1,4840753b-e2e1-4e67-b35f-2f5eab7754f5,4840753b-e2e1-4e67-b35f-2f5eab7754f5,0,1,4095c9e7-83ab-4db9-a2d0-a9f4ef9ee53e,4095c9e7-83ab-4db9-a2d0-a9f4ef9ee53e,0,1,6ffd9c17-d90b-4d19-b337-0fbc2c717557,6ffd9c17-d90b-4d19-b337-0fbc2c717557,0,1,9a11a6bd-0c13-4be2-9e34-b12b7554f3c9,9a11a6bd-0c13-4be2-9e34-b12b7554f3c9,0,1,3bb83275-7a0e-420f-8c6b-028038f11a8c,3bb83275-7a0e-420f-8c6b-028038f11a8c,0,1,e1950a23-f6e7-48af-b78a-77aa61f08ece,e1950a23-f6e7-48af-b78a-77aa61f08ece,0,1,1cc3d7c4-9178-4a40-86ea-2bbc1f5aa69f,1cc3d7c4-9178-4a40-86ea-2bbc1f5aa69f,0,1,790735cf-f6e2-4b0d-bb16-c5b9ea95efae,790735cf-f6e2-4b0d-bb16-c5b9ea95efae,0,1,5d726fa3-bde0-4d97-a577-415857bbb5c1,5d726fa3-bde0-4d97-a577-415857bbb5c1,0,1,f63d0e2d-4685-4ac5-b22c-1b83e3ab955f,f63d0e2d-4685-4ac5-b22c-1b83e3ab955f,0,1,49068231-202c-4ac6-a39a-69207cb597dd,49068231-202c-4ac6-a39a-69207cb597dd,0,1,5a470575-e012-42ad-9ad7-53930a8e843f,5a470575-e012-42ad-9ad7-53930a8e843f,0,1,5872d4ed-6503-422d-bcf9-63a8df3e777d,5872d4ed-6503-422d-bcf9-63a8df3e777d,0,1,e21cda29-2579-485e-a207-20b76f719c80,e21cda29-2579-485e-a207-20b76f719c80,0,1,1b232a57-2833-42c6-b318-38dae2af1ab2,1b232a57-2833-42c6-b318-38dae2af1ab2,0,1,007ade8c-b102-408b-b877-b531e046560b,007ade8c-b102-408b-b877-b531e046560b,0,1,a8dfea6c-0c21-456d-96ab-f4bb5d579b13,a8dfea6c-0c21-456d-96ab-f4bb5d579b13,0,1,305f1ef1-4f9c-40a2-a978-3a4c0ecf75d4,305f1ef1-4f9c-40a2-a978-3a4c0ecf75d4,0,1,eb69c41a-392d-43bb-9b67-a0adcb651b1e,eb69c41a-392d-43bb-9b67-a0adcb651b1e,0,1,93b01c88-48a2-4753-b443-0e9892395a8f,93b01c88-48a2-4753-b443-0e9892395a8f,0,1,0b7f8e05-bb34-47cc-9775-04362e814316,0b7f8e05-bb34-47cc-9775-04362e814316,0,1,e71e0297-3709-4247-933e-18a6350cbf39,e71e0297-3709-4247-933e-18a6350cbf39,0,1,0b32e372-c6ad-4dda-acd1-8b5d58537d37,0b32e372-c6ad-4dda-acd1-8b5d58537d37,0,1,602dac6f-abe6-407a-92d3-7f1613e5dda6,602dac6f-abe6-407a-92d3-7f1613e5dda6,0,1,db03a88b-2804-45c2-9089-7ddb87ef2f18,db03a88b-2804-45c2-9089-7ddb87ef2f18,0,1,df6417d1-c722-4a87-a543-5d2c31795b20,df6417d1-c722-4a87-a543-5d2c31795b20,0,1,526a85c9-3a8d-4044-adb9-fd0689c70601,526a85c9-3a8d-4044-adb9-fd0689c70601,0,1,c4203772-580c-4db1-9bde-8925faa90688,c4203772-580c-4db1-9bde-8925faa90688,0,1,f64a91c4-f5cb-4e8e-8387-9f242ce6de44,f64a91c4-f5cb-4e8e-8387-9f242ce6de44,0,1,9ab0fe18-4dd7-4eed-958d-8537d4896d84,9ab0fe18-4dd7-4eed-958d-8537d4896d84,0,1,2278dc46-46ce-4d00-9289-4de1640782d7,2278dc46-46ce-4d00-9289-4de1640782d7,0,1,1f983a04-c2df-40bb-bee2-b326474d89f8,1f983a04-c2df-40bb-bee2-b326474d89f8,0,1,f03f1b68-e924-4c06-b0aa-8033a9a2f592,f03f1b68-e924-4c06-b0aa-8033a9a2f592,0,1,5e453d10-235d-4e53-86b1-20eed3247992,5e453d10-235d-4e53-86b1-20eed3247992,0,1,0eefb856-0fb4-4c3e-bb08-e88b03a44065,0eefb856-0fb4-4c3e-bb08-e88b03a44065,0,1,21ba8b9f-de97-40a1-8ea1-85a29e8e53ef,21ba8b9f-de97-40a1-8ea1-85a29e8e53ef,0,1,738228ad-c30a-42f4-a6ad-bde0edba6266,738228ad-c30a-42f4-a6ad-bde0edba6266,0,1,c08aea99-ee33-488c-9ba0-f8b24a6d1d04,c08aea99-ee33-488c-9ba0-f8b24a6d1d04,0,1,df8e8344-d7bc-4cf2-b498-88d3abb66c09,df8e8344-d7bc-4cf2-b498-88d3abb66c09,0,1,e6d13536-3021-45b2-a8e1-bdb0e0be850c,e6d13536-3021-45b2-a8e1-bdb0e0be850c,0,1,b49f538c-b2b2-4a1f-a6b4-a911033b1666,b49f538c-b2b2-4a1f-a6b4-a911033b1666,0,1,794e952b-6b03-4a1e-ad3f-453376bccf45,794e952b-6b03-4a1e-ad3f-453376bccf45,0,1,3e2a0713-e6ed-4d38-8036-72f7b62ca64a,3e2a0713-e6ed-4d38-8036-72f7b62ca64a,0,1,5cd997ba-f123-47b3-8cde-fbba45a4a11c,5cd997ba-f123-47b3-8cde-fbba45a4a11c,0,1,0d746247-c4f4-47a5-a373-45ec4023d3ef,0d746247-c4f4-47a5-a373-45ec4023d3ef,0,1,a25bcf4e-1a47-472b-9f93-f6ab45abf461,a25bcf4e-1a47-472b-9f93-f6ab45abf461,0,1,958b7dab-0aba-423f-ab81-b70f2b93a027,958b7dab-0aba-423f-ab81-b70f2b93a027,0,1,a17ec3be-2255-42af-a6ee-d3fb8bb00519,a17ec3be-2255-42af-a6ee-d3fb8bb00519,0,1,add0b22d-ff5a-41f7-88a1-ef34880e50c9,add0b22d-ff5a-41f7-88a1-ef34880e50c9,0,1,4b714d9c-26f4-46e8-ac79-471522b3853b,4b714d9c-26f4-46e8-ac79-471522b3853b,0,1,411489de-f907-4d60-a776-64bb0aa12a0e,411489de-f907-4d60-a776-64bb0aa12a0e,0,1,58d9ba60-a0c7-405d-a76e-0b0a796daaf3,58d9ba60-a0c7-405d-a76e-0b0a796daaf3,0,1,9c47670e-9eb9-49ec-876c-cd545aaa093c,9c47670e-9eb9-49ec-876c-cd545aaa093c,0,1,f57e74e6-75e8-4136-911e-86793036a077,f57e74e6-75e8-4136-911e-86793036a077,0,1,8492ee20-3f15-45d8-b70d-19b5cd6f1ae3,8492ee20-3f15-45d8-b70d-19b5cd6f1ae3,0,1,3ba8c378-ef3d-4646-90b3-6d8078aa623e,3ba8c378-ef3d-4646-90b3-6d8078aa623e,0,1,b96b2e45-8fb3-4d48-ab53-d3bbf6ef0284,b96b2e45-8fb3-4d48-ab53-d3bbf6ef0284,0,1,5ac38b5a-92e5-47eb-b956-24d9f010cb9f,5ac38b5a-92e5-47eb-b956-24d9f010cb9f,0,1,2dd7eb87-8130-425a-be13-85235508cde6,2dd7eb87-8130-425a-be13-85235508cde6,0,1,8a62c997-4fda-4464-90bd-ab719161949f,8a62c997-4fda-4464-90bd-ab719161949f,0,1,28af52dd-3144-428b-956d-b6f27863ec4a,28af52dd-3144-428b-956d-b6f27863ec4a,0,1,c34c330a-991a-4ec9-a0ad-73c04c6a6fc3,c34c330a-991a-4ec9-a0ad-73c04c6a6fc3,0,1,8ac94328-2300-4681-9c35-fd7e2f830310,8ac94328-2300-4681-9c35-fd7e2f830310,0,1,da0ee165-1917-466b-ac5c-16c28e2318bb,da0ee165-1917-466b-ac5c-16c28e2318bb,0,1,4868cb2e-0892-42bc-9de1-73cb8a15a96f,4868cb2e-0892-42bc-9de1-73cb8a15a96f,0,1,e8b80879-33b3-4c45-ad68-1acabcf91faf,e8b80879-33b3-4c45-ad68-1acabcf91faf,0,1,4a87fafc-7ca7-478e-bb31-358c2b85fa92,4a87fafc-7ca7-478e-bb31-358c2b85fa92,0,1,239601eb-e8de-4d58-a32a-01ee52f6e698,239601eb-e8de-4d58-a32a-01ee52f6e698,0,1,11370667-bec5-4a2d-8aa1-97f4d795718f,11370667-bec5-4a2d-8aa1-97f4d795718f,0,1,2032162d-fbb5-4e6a-be72-cda79869b9ff,2032162d-fbb5-4e6a-be72-cda79869b9ff,0,1,95a8e790-25ef-4ef3-a44a-f150bf1ceb1f,95a8e790-25ef-4ef3-a44a-f150bf1ceb1f,0,1,10543f9a-4e3f-427a-b36a-9c66709dd6fb,10543f9a-4e3f-427a-b36a-9c66709dd6fb,0,1,973967e5-1702-4fb8-ba36-70fd5b3b7e7c,973967e5-1702-4fb8-ba36-70fd5b3b7e7c,0,1,96ab5424-7be1-416d-b74d-d0c815726b1f,96ab5424-7be1-416d-b74d-d0c815726b1f,0,1,3714e794-ddef-4ad9-a933-6130bbc84545,3714e794-ddef-4ad9-a933-6130bbc84545,0,1,282b089c-7411-40d6-9a0a-ceaf6abb5586,282b089c-7411-40d6-9a0a-ceaf6abb5586,0,1,678188aa-76e7-49bc-a4be-1c55ccd625b1,678188aa-76e7-49bc-a4be-1c55ccd625b1,0,1,6c27eece-2f8e-48eb-b9c7-f9c414ee15bd,6c27eece-2f8e-48eb-b9c7-f9c414ee15bd,0,1,b3415b4a-d8de-4536-aa4b-82e75fd986ee,b3415b4a-d8de-4536-aa4b-82e75fd986ee,0,1,acc996ab-672a-4602-b7ad-8eee83557e61,acc996ab-672a-4602-b7ad-8eee83557e61,0,1,bf9e9c2f-e5dc-4f82-8e9a-7f35e3ad9a0b,bf9e9c2f-e5dc-4f82-8e9a-7f35e3ad9a0b,0,1,371361b6-15fd-4e62-9f60-cc8ee3fbacf0,371361b6-15fd-4e62-9f60-cc8ee3fbacf0,0,1,97745768-ed35-44f1-beba-abb8b28a29ae,97745768-ed35-44f1-beba-abb8b28a29ae,0,1,69364942-bcd1-4b06-9b57-fa59b4e7c552,69364942-bcd1-4b06-9b57-fa59b4e7c552,0,1,ab201c5f-4134-42cf-a528-c1c4df02f2d7,ab201c5f-4134-42cf-a528-c1c4df02f2d7,0,1,303fb7b5-6a23-40ea-ae12-b54f4ebae026,303fb7b5-6a23-40ea-ae12-b54f4ebae026,0,1,634cd26b-78f1-4446-8aad-b96ed16e5329,634cd26b-78f1-4446-8aad-b96ed16e5329,0,1,d8e62f1a-92ca-4971-9609-e79da798c083,d8e62f1a-92ca-4971-9609-e79da798c083,0,1,61892a62-9381-401d-af31-9073ef2509fb,61892a62-9381-401d-af31-9073ef2509fb,0,1,b0994e56-0abf-41df-980e-d4b36c23db0e,b0994e56-0abf-41df-980e-d4b36c23db0e,0,1,1aa25c99-a6a3-4e8e-aeaa-a191ce9ffb5d,1aa25c99-a6a3-4e8e-aeaa-a191ce9ffb5d,0,1,0e3c6508-caa3-43ef-9647-0e3b96955898,0e3c6508-caa3-43ef-9647-0e3b96955898,0,1,ceb18abf-0390-450c-9e4c-cab9e43eb2e8,ceb18abf-0390-450c-9e4c-cab9e43eb2e8,0,1,1b1fa685-dccb-4d0f-ac01-adc6febf7f15,1b1fa685-dccb-4d0f-ac01-adc6febf7f15,0,1,6b0ddefa-ee70-4b27-989f-e23c734ab943,6b0ddefa-ee70-4b27-989f-e23c734ab943,0,1,ee873280-28ea-41fb-af52-c10c2018cbe4,ee873280-28ea-41fb-af52-c10c2018cbe4,0,1,a388ed70-a68d-4713-a280-881315351f07,a388ed70-a68d-4713-a280-881315351f07,0,1,fd9e84c9-2322-4aa7-b5fe-31d0c8f373c7,fd9e84c9-2322-4aa7-b5fe-31d0c8f373c7,0,1,2c81edc8-02b9-42dd-be4d-e7ad595421a0,2c81edc8-02b9-42dd-be4d-e7ad595421a0,0,1,83cb38ff-1174-449f-b8ce-44d5e064f2df,83cb38ff-1174-449f-b8ce-44d5e064f2df,0,1,d11b51ac-708a-4ee1-b73e-ae62e162101e,d11b51ac-708a-4ee1-b73e-ae62e162101e,0,1,17a50950-6091-4306-9f15-2a621a29c1a0,17a50950-6091-4306-9f15-2a621a29c1a0,0,1,32012b27-1b43-49be-b9af-df0c877e7a4c,32012b27-1b43-49be-b9af-df0c877e7a4c,0,1,e97d5152-9e58-4a91-a691-b4d358f1c89d,e97d5152-9e58-4a91-a691-b4d358f1c89d,0,1,1de4d7ee-7ddd-44db-bf7f-1b99b653652c,1de4d7ee-7ddd-44db-bf7f-1b99b653652c,0,1,dfe624ac-9f49-46dd-b821-1f1f5b5e0d15,dfe624ac-9f49-46dd-b821-1f1f5b5e0d15,0,1,296c478b-4103-46cb-9d14-97f59034ffd4,296c478b-4103-46cb-9d14-97f59034ffd4,0,1,fb918a68-f86d-46c0-9078-61d2b32b5aef,fb918a68-f86d-46c0-9078-61d2b32b5aef,0,1,9ca4d0c4-f5d3-4748-bf73-f3cd1bc4ac46,9ca4d0c4-f5d3-4748-bf73-f3cd1bc4ac46,0,1,1ddfc773-4f3c-4764-978e-585aab4666de,1ddfc773-4f3c-4764-978e-585aab4666de,0,1,e424d122-1dbb-4545-975c-177997129f2e,e424d122-1dbb-4545-975c-177997129f2e,0,1,c83bc626-dfdd-4451-92b0-b53eed40f534,c83bc626-dfdd-4451-92b0-b53eed40f534,0,1,7b9b1d11-4f78-4113-8fca-1a3a30953aef,7b9b1d11-4f78-4113-8fca-1a3a30953aef,0,1,7f84cb85-c3e4-4b53-b829-3b1e216f978a,7f84cb85-c3e4-4b53-b829-3b1e216f978a,0,1,7e621ecc-7d2b-42bf-a502-f8e59de56b63,7e621ecc-7d2b-42bf-a502-f8e59de56b63,0,1,798fd445-d02e-4e97-890a-0283f33317cf,798fd445-d02e-4e97-890a-0283f33317cf,0,1,095583ca-010d-43ad-8c7a-8938fa4cb761,095583ca-010d-43ad-8c7a-8938fa4cb761,0,1,178d210c-e847-4805-a8d4-31acdf4983af,178d210c-e847-4805-a8d4-31acdf4983af,0,1,aa214d9f-23b1-4996-8a43-9010dceeb53d,aa214d9f-23b1-4996-8a43-9010dceeb53d,0,1,26a5527e-dc2b-45a4-a51c-b1dfb31fa8a2,26a5527e-dc2b-45a4-a51c-b1dfb31fa8a2,0,1,aefc3149-90ee-4ccc-8fb6-b1f6096237f6,aefc3149-90ee-4ccc-8fb6-b1f6096237f6,0,1,d9d103bd-1dd6-48a9-8869-6c8485705393,d9d103bd-1dd6-48a9-8869-6c8485705393,0,1,cf2f7e1f-9b0b-4ae9-9c94-99d80bf95eae,cf2f7e1f-9b0b-4ae9-9c94-99d80bf95eae,0,1,ff0e8487-bdbf-4b21-877e-00008c81bc09,ff0e8487-bdbf-4b21-877e-00008c81bc09,0,1,39c9f8ac-56a0-4057-8359-7228bf97184a,39c9f8ac-56a0-4057-8359-7228bf97184a,0,1,763fbb4c-cab2-4c71-ba16-7e2ce8c3dc97,763fbb4c-cab2-4c71-ba16-7e2ce8c3dc97,0,1,2c0dd892-1d3e-4497-850b-080bdb9c59d8,2c0dd892-1d3e-4497-850b-080bdb9c59d8,0,1,3b727d49-c9ed-4d9e-af61-c13b9a170c75,3b727d49-c9ed-4d9e-af61-c13b9a170c75,0,1,1b264744-bdcd-4c5c-932b-0ac4b990dd78,1b264744-bdcd-4c5c-932b-0ac4b990dd78,0,1,a2dbf20e-1fe9-463d-8fd4-76ce2e4854d1,a2dbf20e-1fe9-463d-8fd4-76ce2e4854d1,0,1,37bde288-8e02-4127-bd80-de8ae7590a14,37bde288-8e02-4127-bd80-de8ae7590a14,0,1,a9b8e517-78cd-4428-b2fc-9e16af0069d7,a9b8e517-78cd-4428-b2fc-9e16af0069d7,0,1,5c592024-c009-4674-bbb8-283669e673ef,5c592024-c009-4674-bbb8-283669e673ef,0,1,e76f16b9-77a0-4033-90d0-6e04e4494747,e76f16b9-77a0-4033-90d0-6e04e4494747,0,1,cfb221fc-8639-4e15-9a78-f7837d657a99,cfb221fc-8639-4e15-9a78-f7837d657a99,0,1,4e61c8c3-756e-4937-adf6-6a1e9a89fc6a,4e61c8c3-756e-4937-adf6-6a1e9a89fc6a,0,1,022147c1-1ebe-4c8d-b367-4c47115b101d,022147c1-1ebe-4c8d-b367-4c47115b101d,0,1,2975d4c8-90d8-4791-8bc2-4adaa328ddc0,2975d4c8-90d8-4791-8bc2-4adaa328ddc0,0,1,fca6b230-a38e-4791-9cc5-3d215f79dc6f,fca6b230-a38e-4791-9cc5-3d215f79dc6f,0,1,04e87de4-940a-4533-8c81-8f145b201dc0,04e87de4-940a-4533-8c81-8f145b201dc0,0,1,573ef4f4-e9e6-4b7c-944d-30808a6a00b7,573ef4f4-e9e6-4b7c-944d-30808a6a00b7,0,1,fa488af9-a5ec-47d8-8661-fa5058a60a6b,fa488af9-a5ec-47d8-8661-fa5058a60a6b,0,1,97cc84c6-3565-474c-a028-83acb5390446,97cc84c6-3565-474c-a028-83acb5390446,0,1,9bf07c3e-7fdf-4a4f-ab00-98c7668349bd,9bf07c3e-7fdf-4a4f-ab00-98c7668349bd,0,1,ebbf6957-6ff6-4dc2-9e20-23d1da091f05,ebbf6957-6ff6-4dc2-9e20-23d1da091f05,0,1,9b80acf6-6bf0-42c4-abb3-2fa2fcf4088c,9b80acf6-6bf0-42c4-abb3-2fa2fcf4088c,0,1,1dcec107-9d5f-4b69-ad65-cc4cb1f27a9c,1dcec107-9d5f-4b69-ad65-cc4cb1f27a9c,0,1,b366d7eb-626c-4c0c-b4cc-c392763e6e94,b366d7eb-626c-4c0c-b4cc-c392763e6e94,0,1,4c7e24aa-726a-4595-82ad-ef1e525b14fa,4c7e24aa-726a-4595-82ad-ef1e525b14fa,0,1,b9e5bb39-ed0a-4e12-b7e4-2d9b5015bf9c,b9e5bb39-ed0a-4e12-b7e4-2d9b5015bf9c,0,1,dbced4aa-6432-4f0c-a99a-5a3e7b0f6755,dbced4aa-6432-4f0c-a99a-5a3e7b0f6755,0,1,e849e46c-2ce6-427b-92bc-06d7997f59bf,e849e46c-2ce6-427b-92bc-06d7997f59bf,0,1,5a971dc0-28bf-4426-9426-9f456aea080a,5a971dc0-28bf-4426-9426-9f456aea080a,0,1,aed2ceeb-cc0f-4bdc-bb94-2e15cd68aa96,aed2ceeb-cc0f-4bdc-bb94-2e15cd68aa96,0,1,04b5ae71-7fa4-4a64-b406-59dc603b80c5,04b5ae71-7fa4-4a64-b406-59dc603b80c5,0,1,f23a2023-f776-40db-8689-1fc3f7ebc482,f23a2023-f776-40db-8689-1fc3f7ebc482,0,1,1e7684f0-1b3b-4a32-8602-dd0672c5a800,1e7684f0-1b3b-4a32-8602-dd0672c5a800,0,1,ab178a93-8570-43b6-ae42-f34a7cc4f359,ab178a93-8570-43b6-ae42-f34a7cc4f359,0,1,4c82f31d-7a98-47dd-89dc-1846cb15bf3b,4c82f31d-7a98-47dd-89dc-1846cb15bf3b,0,1,168e3189-2676-4cdb-bc9d-78d85df51faf,168e3189-2676-4cdb-bc9d-78d85df51faf,0,1,ecf1a87f-4ca4-4efb-a84c-b2db1b0e8829,ecf1a87f-4ca4-4efb-a84c-b2db1b0e8829,0,1,470bbff8-20d0-475c-a61a-1a09ac14c2db,470bbff8-20d0-475c-a61a-1a09ac14c2db,0,1,6ea25680-c4db-4717-9498-62420ca16970,6ea25680-c4db-4717-9498-62420ca16970,0,1,14e20d48-635e-4c52-9099-e743323fc190,14e20d48-635e-4c52-9099-e743323fc190,0,1,c37a660e-16c5-495e-9486-e61bcb693fa0,c37a660e-16c5-495e-9486-e61bcb693fa0,0,1,8f44ebad-1160-474e-a566-fb9da55ffcba,8f44ebad-1160-474e-a566-fb9da55ffcba,0,1,11cf336e-7890-4972-bf71-32d7416ff647,11cf336e-7890-4972-bf71-32d7416ff647,0,1,4c4d61a6-6bb6-4a15-9a81-25fdcf96ec4b,4c4d61a6-6bb6-4a15-9a81-25fdcf96ec4b,0,1,14bd3392-36cd-4ed0-8847-44375d6fb861,14bd3392-36cd-4ed0-8847-44375d6fb861,0,1,759ede7a-e832-44e6-9b11-5bfb3c507820,759ede7a-e832-44e6-9b11-5bfb3c507820,0,1,64484611-b32c-4155-a063-7df5a3f924dd,64484611-b32c-4155-a063-7df5a3f924dd,0,1,2f2ac0db-db86-4ed2-a55a-b245b4d00d70,2f2ac0db-db86-4ed2-a55a-b245b4d00d70,0,1,821b93bd-f0dd-4468-972a-d9b2b4de72f1,821b93bd-f0dd-4468-972a-d9b2b4de72f1,0,1,56900066-90e3-40c0-b64a-8f7964a4dfc1,56900066-90e3-40c0-b64a-8f7964a4dfc1,0,1,56f0c4d6-9b13-486a-9586-05e657dca8be,56f0c4d6-9b13-486a-9586-05e657dca8be,0,1,c795c0d3-6a0d-4311-9821-df320663727e,c795c0d3-6a0d-4311-9821-df320663727e,0,1,512b8d89-8798-4549-9e79-b9c3f7d9098f,512b8d89-8798-4549-9e79-b9c3f7d9098f,0,1,e1fe71f8-f37c-4705-aca1-c25e2bdc5db6,e1fe71f8-f37c-4705-aca1-c25e2bdc5db6,0,1,7f356abf-9045-4a76-89f3-8b52d467122a,7f356abf-9045-4a76-89f3-8b52d467122a,0,1,625a61ac-4ad0-4b31-aa67-9f864154b9c4,625a61ac-4ad0-4b31-aa67-9f864154b9c4,0,1,51fa8d01-44a1-4e75-9b04-6a2504972f08,51fa8d01-44a1-4e75-9b04-6a2504972f08,0,1,73dae482-a1ee-4c57-8859-2dd8e8635a49,73dae482-a1ee-4c57-8859-2dd8e8635a49,0,1,e4ea640f-e3a4-44ad-b17d-51f32136372e,e4ea640f-e3a4-44ad-b17d-51f32136372e,0,1,7dca913d-e37a-4740-8e3d-677d379605ee,7dca913d-e37a-4740-8e3d-677d379605ee,0,1,bd1cf7ef-f3e2-4441-836b-16f2cc227aa9,bd1cf7ef-f3e2-4441-836b-16f2cc227aa9,0,1,e62e60ea-9f0c-4a7e-869f-4639f31f826c,e62e60ea-9f0c-4a7e-869f-4639f31f826c,0,1,c9035b0f-cfc4-4761-9ba0-a8aacfaa9c72,c9035b0f-cfc4-4761-9ba0-a8aacfaa9c72,0,1,7efb0bf4-d40c-417b-b9bc-f4a5af66ec09,7efb0bf4-d40c-417b-b9bc-f4a5af66ec09,0,1,4cd4694f-17f8-43ba-8940-07628bd937fe,4cd4694f-17f8-43ba-8940-07628bd937fe,0,1,7df6c94b-3cfe-4764-988e-858d733e35d9,7df6c94b-3cfe-4764-988e-858d733e35d9,0,1,8b251c7d-2d55-4734-a1da-7f1115d95080,8b251c7d-2d55-4734-a1da-7f1115d95080,0,1,87b3153d-bef0-4441-8b1c-a5fc7ba4c36a,87b3153d-bef0-4441-8b1c-a5fc7ba4c36a,0,1,5a8c3621-595a-4168-8bba-a7f8d499e47e,5a8c3621-595a-4168-8bba-a7f8d499e47e,0,1,fc4cfed6-e492-4420-b357-8143a8c2a41a,fc4cfed6-e492-4420-b357-8143a8c2a41a,0,1,4311a250-64af-443e-a711-93b7c41175cf,4311a250-64af-443e-a711-93b7c41175cf,0,1,804b6c57-1d7b-4927-be5b-84b7959fe55e,804b6c57-1d7b-4927-be5b-84b7959fe55e,0,1,f2655d85-79ea-4736-8f41-94a4f9b2b998,f2655d85-79ea-4736-8f41-94a4f9b2b998,0,1,21258174-3a95-4c10-bb8f-4d6db0c5ae0e,21258174-3a95-4c10-bb8f-4d6db0c5ae0e,0,1,a8eb5ed9-df99-405b-afad-eeaa98956eee,a8eb5ed9-df99-405b-afad-eeaa98956eee,0,1,a64d4b1b-fae4-43ae-ae98-bdc4e59a94c1,a64d4b1b-fae4-43ae-ae98-bdc4e59a94c1,0,1,26a1279f-91f0-4632-ad7c-21cf2f524208,26a1279f-91f0-4632-ad7c-21cf2f524208,0,1,bf751ed0-ee47-4eaf-81bd-f0da00bef343,bf751ed0-ee47-4eaf-81bd-f0da00bef343,0,1,14b65111-4c0e-4521-9fcd-2a8d4aaa6b4b,14b65111-4c0e-4521-9fcd-2a8d4aaa6b4b,0,1,1f1def7c-e0ee-4963-afea-1751bf1b812c,1f1def7c-e0ee-4963-afea-1751bf1b812c,0,1,9a4c0898-ab56-425c-8191-5ab90f4e12bf,9a4c0898-ab56-425c-8191-5ab90f4e12bf,0,1,6841ec47-7a84-441a-b975-69d089072ce7,6841ec47-7a84-441a-b975-69d089072ce7,0,1,ead4001a-0d8a-4b95-8212-2a40e5aa6659,ead4001a-0d8a-4b95-8212-2a40e5aa6659,0,1,22165c8a-2179-4cd5-b195-bd2721e9e232,22165c8a-2179-4cd5-b195-bd2721e9e232,0,1,b28c3a8f-8cad-45eb-90d3-6d90a0b3f881,b28c3a8f-8cad-45eb-90d3-6d90a0b3f881,0,1,3c5974ec-f76d-401c-a8e4-d51c7cd4c4fb,3c5974ec-f76d-401c-a8e4-d51c7cd4c4fb,0,1,609a9bc9-4225-4fe1-91fa-90c9c2e5cfba,609a9bc9-4225-4fe1-91fa-90c9c2e5cfba,0,1,d22ed498-c7df-45bb-869f-f16d3aa2d3d3,d22ed498-c7df-45bb-869f-f16d3aa2d3d3,0,1,4a966f6e-87dd-4dae-9cc0-dbabee9424dc,4a966f6e-87dd-4dae-9cc0-dbabee9424dc,0,1,9d9debfd-4a10-4f09-9d09-2aa5e058b525,9d9debfd-4a10-4f09-9d09-2aa5e058b525,0,1,fc19586c-d89c-495c-b473-6f85967ed48e,fc19586c-d89c-495c-b473-6f85967ed48e,0,1,2ac7c701-a281-4e77-a5f8-294526021e2d,2ac7c701-a281-4e77-a5f8-294526021e2d,0,1,979df549-889d-496a-b6ce-c56d54c771b5,979df549-889d-496a-b6ce-c56d54c771b5,0,1,91b320d8-3426-44d3-97d7-c200287d7343,91b320d8-3426-44d3-97d7-c200287d7343,0,1,b9297f72-b40a-4adb-9975-bb693d4834a4,b9297f72-b40a-4adb-9975-bb693d4834a4,0,1,41cf3916-216f-4c4e-a587-82777f4263e0,41cf3916-216f-4c4e-a587-82777f4263e0,0,1,2ce3a350-86f1-4275-8299-3c3693ca11fa,2ce3a350-86f1-4275-8299-3c3693ca11fa,0,1,59f0ed15-c84c-4f41-bdd4-26317e4e914d,59f0ed15-c84c-4f41-bdd4-26317e4e914d,0,1,4b5ff142-47b8-4548-b6f9-56ebcbd40e35,4b5ff142-47b8-4548-b6f9-56ebcbd40e35,0,1,8fef790c-a3f4-460c-9093-5065cbdba196,8fef790c-a3f4-460c-9093-5065cbdba196,0,1,79bd24d0-61a9-4558-90ac-4e726066789c,79bd24d0-61a9-4558-90ac-4e726066789c,0,1,d843cbd7-e2b5-4c50-8ed2-7cb0baac8ecc,d843cbd7-e2b5-4c50-8ed2-7cb0baac8ecc,0,1,ef356548-51a4-4b09-b37d-ede5b8f3edb6,ef356548-51a4-4b09-b37d-ede5b8f3edb6,0,1,53c0d900-5e96-4381-a1ed-4424a5799608,53c0d900-5e96-4381-a1ed-4424a5799608,0,1,64fe317a-7d0e-4758-b5cf-0d871d2bf4ad,64fe317a-7d0e-4758-b5cf-0d871d2bf4ad,0,1,abfb7ac3-ebfa-4275-a039-a6b94bb9a76f,abfb7ac3-ebfa-4275-a039-a6b94bb9a76f,0,1,45ca9e20-1246-4400-a019-ffb521af6ea7,45ca9e20-1246-4400-a019-ffb521af6ea7,0,1,73eed854-5c3a-4a10-9bfa-793fd517f303,73eed854-5c3a-4a10-9bfa-793fd517f303,0,1,c3eb2836-ea4d-48cc-a03f-3a0c30f67e7f,c3eb2836-ea4d-48cc-a03f-3a0c30f67e7f,0,1,9134dc40-a8f1-4c60-9431-27cb98be5ecd,9134dc40-a8f1-4c60-9431-27cb98be5ecd,0,1,16c4622a-33af-4a95-b44e-0861a6df21d2,16c4622a-33af-4a95-b44e-0861a6df21d2,0,1,d8cac67b-cce2-4a00-a8df-c6570c50153f,d8cac67b-cce2-4a00-a8df-c6570c50153f,0,1,37213c65-bf26-4e50-a2fa-58eb45439b58,37213c65-bf26-4e50-a2fa-58eb45439b58,0,1,e43c08a9-6496-4c8e-bfe2-9d728e31d63d,e43c08a9-6496-4c8e-bfe2-9d728e31d63d,0,1,b6b31892-73ee-4c9b-92b0-2735536c4938,b6b31892-73ee-4c9b-92b0-2735536c4938,0,1,deb8b883-142e-47d0-a722-7c734a0cf9b3,deb8b883-142e-47d0-a722-7c734a0cf9b3,0,1,a6794f74-08a4-4b73-add7-e6d0d1b6e7a3,a6794f74-08a4-4b73-add7-e6d0d1b6e7a3,0,1,29233058-ccb1-4110-a9bc-cdb4c531f35a,29233058-ccb1-4110-a9bc-cdb4c531f35a,0,1,cf3729b2-9ee6-437c-81df-83966793be50,cf3729b2-9ee6-437c-81df-83966793be50,0,1,429d08b7-0b98-4f9b-a053-d04dd84a7026,429d08b7-0b98-4f9b-a053-d04dd84a7026,0,1,b64fd964-cee8-4619-872f-82d2fdc14240,b64fd964-cee8-4619-872f-82d2fdc14240,0,1,5ce7846d-9806-40f5-8631-4e14deb8bc95,5ce7846d-9806-40f5-8631-4e14deb8bc95,0,1,79528a0e-1e48-4d14-bd28-756fd5db57b9,79528a0e-1e48-4d14-bd28-756fd5db57b9,0,1,4eeab8c2-d901-4b95-adea-4a08f79d0fa2,4eeab8c2-d901-4b95-adea-4a08f79d0fa2,0,1,d9426219-4b37-4776-8d5d-acab5825e789,d9426219-4b37-4776-8d5d-acab5825e789,0,1,7ce1f9eb-ac51-46fd-adc5-c8b9bfb32e44,7ce1f9eb-ac51-46fd-adc5-c8b9bfb32e44,0,1,4fef5026-1cba-4c33-ae75-5f9570a8e6b6,4fef5026-1cba-4c33-ae75-5f9570a8e6b6,0,1,243ee3d4-4130-41ea-a37c-c7b39a5e73fa,243ee3d4-4130-41ea-a37c-c7b39a5e73fa,0,1,29e7299a-ce80-497a-8102-615d0a001ea8,29e7299a-ce80-497a-8102-615d0a001ea8,0,1,f9e48170-62eb-4d6b-b861-c7af1b4a38c3,f9e48170-62eb-4d6b-b861-c7af1b4a38c3,0,1,9bcc8f9a-ec12-45f2-8a32-6946d556f57a,9bcc8f9a-ec12-45f2-8a32-6946d556f57a,0,1,adc2cc11-b647-453f-a98e-8a73b7c368c7,adc2cc11-b647-453f-a98e-8a73b7c368c7,0,1,4522c564-61da-40da-a749-5312121a331d,4522c564-61da-40da-a749-5312121a331d,0,1,9394c709-6cbe-4ef6-bc8c-cba8af65821e,9394c709-6cbe-4ef6-bc8c-cba8af65821e,0,1,2943b572-7411-4f92-a6cc-7ee552b85223,2943b572-7411-4f92-a6cc-7ee552b85223,0,1,28478e7a-e8aa-40aa-866c-a3624f903141,28478e7a-e8aa-40aa-866c-a3624f903141,0,1,f692ab21-a8de-4feb-914f-4beef350543a,f692ab21-a8de-4feb-914f-4beef350543a,0,1,0ec0b1a0-5f0d-4a14-9a84-49098befa0af,0ec0b1a0-5f0d-4a14-9a84-49098befa0af,0,1,c644ab9b-7bcb-4bfa-b8ba-4c5f7689c91c,c644ab9b-7bcb-4bfa-b8ba-4c5f7689c91c,0,1,dabb3395-6100-4f53-913d-e0230e81b494,dabb3395-6100-4f53-913d-e0230e81b494,0,1,e0a3fae1-1582-4c7a-acd8-870b558acec4,e0a3fae1-1582-4c7a-acd8-870b558acec4,0,1,e9f393e5-04d3-4330-afb0-aa73caf0c5cd,e9f393e5-04d3-4330-afb0-aa73caf0c5cd,0,1,036868c2-e2c4-426b-8402-0d77b4224828,036868c2-e2c4-426b-8402-0d77b4224828,0,1,1bf18e24-8157-4aa4-b790-21c6535f5233,1bf18e24-8157-4aa4-b790-21c6535f5233,0,1,18470536-57df-48f0-9a85-68e4006558eb,18470536-57df-48f0-9a85-68e4006558eb,0,1,893e2f4c-b056-42ae-89fb-ecd90a53bb4c,893e2f4c-b056-42ae-89fb-ecd90a53bb4c,0,1,5eaaa3fd-3a87-4eaa-93a9-49337b19eddd,5eaaa3fd-3a87-4eaa-93a9-49337b19eddd,0,1,77ee9f6c-0be9-450f-978c-297626d6275b,77ee9f6c-0be9-450f-978c-297626d6275b,0,1,a63e6145-0d4b-4da2-9864-485a61e621df,a63e6145-0d4b-4da2-9864-485a61e621df,0,1,f29738d5-ad22-47bf-9053-497763674486,f29738d5-ad22-47bf-9053-497763674486,0,1,9c23d3bd-7a98-4d71-b9b0-78cda4ffb3ce,9c23d3bd-7a98-4d71-b9b0-78cda4ffb3ce,0,1,9aca958a-a938-4421-9e37-6606e02f7b77,9aca958a-a938-4421-9e37-6606e02f7b77,0,1,44109976-b763-4807-a013-9d04c3675bf3,44109976-b763-4807-a013-9d04c3675bf3,0,1,46127175-144d-438e-8fbe-c55ae0233620,46127175-144d-438e-8fbe-c55ae0233620,0,1,20754057-6397-4478-a484-74b8c2f243ee,20754057-6397-4478-a484-74b8c2f243ee,0,1,b8a06e8b-4581-4088-a5b4-a5d3330eab22,b8a06e8b-4581-4088-a5b4-a5d3330eab22,0,1,ea838b79-af81-4767-a8b1-fce68baa866a,ea838b79-af81-4767-a8b1-fce68baa866a,0,1,5e1056d0-6778-4030-8806-3dc90ffed318,5e1056d0-6778-4030-8806-3dc90ffed318,0,1,068e6f32-a2b6-4ade-9b9e-db3eac8b09c1,068e6f32-a2b6-4ade-9b9e-db3eac8b09c1,0,1,3701531a-b408-455f-a49d-652d3fcab4ef,3701531a-b408-455f-a49d-652d3fcab4ef,0,1,63e229aa-2638-45f1-9c5e-f821d9397ac3,63e229aa-2638-45f1-9c5e-f821d9397ac3,0,1,9e425f71-ef7d-4936-9f1b-7dceca99ca95,9e425f71-ef7d-4936-9f1b-7dceca99ca95,0,1,968ecea6-7d21-4e85-9d25-e8c6fe1b76cc,968ecea6-7d21-4e85-9d25-e8c6fe1b76cc,0,1,c6777ffe-1fb2-4807-8624-43f47a4e3947,c6777ffe-1fb2-4807-8624-43f47a4e3947,0,1,be42c5c6-b604-4180-a3d7-24b2348c8d5e,be42c5c6-b604-4180-a3d7-24b2348c8d5e,0,1,6223c072-bff3-4ea8-96a1-ac2a5bbe9f99,6223c072-bff3-4ea8-96a1-ac2a5bbe9f99,0,1,6fd083fe-a132-4f63-b38f-4891004aca8a,6fd083fe-a132-4f63-b38f-4891004aca8a,0,1,99f5d24a-00ad-403f-912a-677299f1219c,99f5d24a-00ad-403f-912a-677299f1219c,0,1,fc959221-6313-45d9-b2c4-85befaede226,fc959221-6313-45d9-b2c4-85befaede226,0,1,6ffa8536-7639-4e9a-9f6d-4eda71f5ca3b,6ffa8536-7639-4e9a-9f6d-4eda71f5ca3b,0,1,5206d407-ac91-477e-80e7-97c312da934c,5206d407-ac91-477e-80e7-97c312da934c,0,1,15b53eaa-cb35-4385-9515-c2ec6e1fdb4b,15b53eaa-cb35-4385-9515-c2ec6e1fdb4b,0,1,ccb8a530-260a-4488-b1d9-c67325c69bf4,ccb8a530-260a-4488-b1d9-c67325c69bf4,0,1,0b13cad5-91ae-4cd1-a620-9a315ae8024c,0b13cad5-91ae-4cd1-a620-9a315ae8024c,0,1,d0634a8e-676f-4f49-9a38-7cb80cfa9fdf,d0634a8e-676f-4f49-9a38-7cb80cfa9fdf,0,1,59bb5271-4cc7-45aa-8e2a-f556a4afa2dc,59bb5271-4cc7-45aa-8e2a-f556a4afa2dc,0,1,81dd61e5-fe02-4272-a525-affda9b606ca,81dd61e5-fe02-4272-a525-affda9b606ca,0,1,8de7b423-b7d1-46fe-b1dc-fb936736b864,8de7b423-b7d1-46fe-b1dc-fb936736b864,0,1,f565876c-0326-4b12-895e-c248b9e64115,f565876c-0326-4b12-895e-c248b9e64115,0,1,62f075c5-1ad0-4a29-9f40-567b9fa70cdf,62f075c5-1ad0-4a29-9f40-567b9fa70cdf,0,1,88cefe4a-a6c5-4753-935e-f956d9de9f77,88cefe4a-a6c5-4753-935e-f956d9de9f77,0,1,882e78b7-90bd-4b95-8852-146bdb51ec15,882e78b7-90bd-4b95-8852-146bdb51ec15,0,1,ae4435c3-62c0-4f08-b526-7f9571eed8ae,ae4435c3-62c0-4f08-b526-7f9571eed8ae,0,1,0f6f8fd9-b3af-4d06-bc47-bdad238d15b7,0f6f8fd9-b3af-4d06-bc47-bdad238d15b7,0,1,460e76d2-4ed6-464e-bf9c-a6bcf920aaf2,460e76d2-4ed6-464e-bf9c-a6bcf920aaf2,0,1,80c23bf0-cef0-4d07-a017-d90635f8041d,80c23bf0-cef0-4d07-a017-d90635f8041d,0,1,47a24216-3299-470b-a18c-d8c1258fff24,47a24216-3299-470b-a18c-d8c1258fff24,0,1,72dcfd46-491e-4f88-a0ea-57919f8fbdea,72dcfd46-491e-4f88-a0ea-57919f8fbdea,0,1,fa7a11cc-7ee0-4550-8d0d-9c7464d57a37,fa7a11cc-7ee0-4550-8d0d-9c7464d57a37,0,1,8317ac49-890d-4921-8c0d-1bfc676f0b40,8317ac49-890d-4921-8c0d-1bfc676f0b40,0,1,f9161bc3-9a1c-4870-8681-8e97d8ce838a,f9161bc3-9a1c-4870-8681-8e97d8ce838a,0,1,5e53ccc6-5ab4-4f9d-b524-0081d345d7a2,5e53ccc6-5ab4-4f9d-b524-0081d345d7a2,0,1,c3b3805b-3501-47a7-b280-46180049b235,c3b3805b-3501-47a7-b280-46180049b235,0,1,29af05c2-37de-495b-b3cf-477d452abe5e,29af05c2-37de-495b-b3cf-477d452abe5e,0,1,0c732569-a50f-4be3-a214-0843c6a3da47,0c732569-a50f-4be3-a214-0843c6a3da47,0,1,5e922083-0ceb-449a-8201-7dd27a46f2fc,5e922083-0ceb-449a-8201-7dd27a46f2fc,0,1,d97e78c7-f2c1-4e0e-9c9b-d2dd6a94da22,d97e78c7-f2c1-4e0e-9c9b-d2dd6a94da22,0,1,e757303e-c61a-4e42-9829-c5a36dba9414,e757303e-c61a-4e42-9829-c5a36dba9414,0,1,091de87c-0801-4bd3-aaaa-ed37bc4cd161,091de87c-0801-4bd3-aaaa-ed37bc4cd161,0,1,9a6bfcbe-6ac7-4839-bfb9-a11b97e64185,9a6bfcbe-6ac7-4839-bfb9-a11b97e64185,0,1,b53c545c-3b1c-4315-a213-4f2b2c7128aa,b53c545c-3b1c-4315-a213-4f2b2c7128aa,0,1,02a84df9-2171-43e6-8135-a74edd384826,02a84df9-2171-43e6-8135-a74edd384826,0,1,ff36356d-cb1d-4316-896a-c6ae83b92437,ff36356d-cb1d-4316-896a-c6ae83b92437,0,1,465cce6a-7064-4b0a-932c-40f842042f33,465cce6a-7064-4b0a-932c-40f842042f33,0,1,f9cd82e7-8252-4bb6-8e08-23ab45ed3976,f9cd82e7-8252-4bb6-8e08-23ab45ed3976,0,1,8f17ec3f-6d62-46b8-baef-b20430e948ce,8f17ec3f-6d62-46b8-baef-b20430e948ce,0,1,ea1298d0-9396-4a50-b83e-24064e8dd99d,ea1298d0-9396-4a50-b83e-24064e8dd99d,0,1,038dbb00-e4c6-4e64-b861-3a0764f54ab3,038dbb00-e4c6-4e64-b861-3a0764f54ab3,0,1,1c291f7d-a493-4297-8aaa-912896800066,1c291f7d-a493-4297-8aaa-912896800066,0,1,69149801-a825-4ed2-b077-c26660dff271,69149801-a825-4ed2-b077-c26660dff271,0,1,12146ed3-c159-4d6b-ae1a-1ecd30e5a87e,12146ed3-c159-4d6b-ae1a-1ecd30e5a87e,0,1,518ab687-b84a-40c8-8547-aee4257c1b71,518ab687-b84a-40c8-8547-aee4257c1b71,0,1,5cec0949-bfe8-4f7e-98c1-0c402be3ea09,5cec0949-bfe8-4f7e-98c1-0c402be3ea09,0,1,7732ef07-16eb-46a0-9645-7de95c5482af,7732ef07-16eb-46a0-9645-7de95c5482af,0,1,75dac536-b316-4b04-a57b-03656c678bec,75dac536-b316-4b04-a57b-03656c678bec,0,1,a07d6c85-159d-4d09-b117-561a1e20329f,a07d6c85-159d-4d09-b117-561a1e20329f,0,1,8a2f9733-4f83-41f2-9d74-dca7161a4b41,8a2f9733-4f83-41f2-9d74-dca7161a4b41,0,1,fbd2d900-1e0d-48f3-9793-0186ee49915c,fbd2d900-1e0d-48f3-9793-0186ee49915c,0,1,8ede4c18-ebf0-4c39-9e82-c59df8d62ca7,8ede4c18-ebf0-4c39-9e82-c59df8d62ca7,0,1,8a50e7f2-97a9-4ed8-a46f-6413f7fcf8cd,8a50e7f2-97a9-4ed8-a46f-6413f7fcf8cd,0,1,b2c200a7-b9cc-4d84-b839-e69f2a14a8f5,b2c200a7-b9cc-4d84-b839-e69f2a14a8f5,0,1,4a69a70d-1b4c-4999-a3dd-ae1deb331fea,4a69a70d-1b4c-4999-a3dd-ae1deb331fea,0,1,3a36e0f5-a645-47f1-99ae-5b0493d604ad,3a36e0f5-a645-47f1-99ae-5b0493d604ad,0,1,57f762f7-b8e4-498b-a3dc-3d40c94855ec,57f762f7-b8e4-498b-a3dc-3d40c94855ec,0,1,ca7d4086-de35-40fd-af65-73369d452135,ca7d4086-de35-40fd-af65-73369d452135,0,1,563c0f5c-e0b4-4229-a3f6-183091060aa4,563c0f5c-e0b4-4229-a3f6-183091060aa4,0,1,bf967588-ea8f-49a3-9331-af2331ffa162,bf967588-ea8f-49a3-9331-af2331ffa162,0,1,5083530c-9a24-4def-99c1-6eb9514e9b33,5083530c-9a24-4def-99c1-6eb9514e9b33,0,1,d59c2725-5d98-495e-9f86-f5d38dbfad90,d59c2725-5d98-495e-9f86-f5d38dbfad90,0,1,176f8835-73d2-4fbe-9d2a-0a4c79d3b871,176f8835-73d2-4fbe-9d2a-0a4c79d3b871,0,1,0ba68198-983d-409b-be27-96f1572b3f12,0ba68198-983d-409b-be27-96f1572b3f12,0,1,9cd1e8dd-e2be-48a9-b32d-43688e1748bc,9cd1e8dd-e2be-48a9-b32d-43688e1748bc,0,1,decb27a8-7dd3-4601-a694-30429e638b39,decb27a8-7dd3-4601-a694-30429e638b39,0,1,922ac6c0-a6a8-444e-9aad-27dc0f49b32e,922ac6c0-a6a8-444e-9aad-27dc0f49b32e,0,1,d7a128e4-f31f-4b09-8424-e816ab59d5c3,d7a128e4-f31f-4b09-8424-e816ab59d5c3,0,1,0ce6e252-8d6e-4bfe-b8cc-daf3434fa51e,0ce6e252-8d6e-4bfe-b8cc-daf3434fa51e,0,1,aa9513b4-f575-4030-a7f9-ac09aa319e98,aa9513b4-f575-4030-a7f9-ac09aa319e98,0,1,f01afc5e-91b8-4cc2-b63a-c245e5e36d01,f01afc5e-91b8-4cc2-b63a-c245e5e36d01,0,1,028cbc0e-023d-40ad-86c3-5e6f8dc96c57,028cbc0e-023d-40ad-86c3-5e6f8dc96c57,0,1,d03f66b1-48a3-434b-bb58-9fd53c183514,d03f66b1-48a3-434b-bb58-9fd53c183514,0,1,a469e55e-d7ca-4c27-b350-fafe7364c18f,a469e55e-d7ca-4c27-b350-fafe7364c18f,0,1,b09fc04b-94d8-4dea-bf6c-24370f231274,b09fc04b-94d8-4dea-bf6c-24370f231274,0,1,e669a5cd-daf3-4a88-a2c0-380db496a4dd,e669a5cd-daf3-4a88-a2c0-380db496a4dd,0,1,177710c8-2441-4436-a096-64c27aa7aec5,177710c8-2441-4436-a096-64c27aa7aec5,0,1,ab143db8-185b-4093-a3b1-c65322cb8fd6,ab143db8-185b-4093-a3b1-c65322cb8fd6,0,1,e3ce5882-541e-4620-9c24-f00deacc33c2,e3ce5882-541e-4620-9c24-f00deacc33c2,0,1,c9694243-390e-4217-8996-b33924c4fe60,c9694243-390e-4217-8996-b33924c4fe60,0,1,8e08ea9b-8c63-475a-9335-c8edc6214555,8e08ea9b-8c63-475a-9335-c8edc6214555,0,1,19bd6152-7e9c-4710-80c3-c6aa399fe4e9,19bd6152-7e9c-4710-80c3-c6aa399fe4e9,0,1,72846fcc-a9ab-4393-9133-38c1805abab1,72846fcc-a9ab-4393-9133-38c1805abab1,0,1,91a81670-9124-4b65-aecd-77f252249030,91a81670-9124-4b65-aecd-77f252249030,0,1,ed2e5344-9261-4473-86a5-f914b8458cfc,ed2e5344-9261-4473-86a5-f914b8458cfc,0,1,4ff32c59-4ca5-4e60-b54c-f46f757758e2,4ff32c59-4ca5-4e60-b54c-f46f757758e2,0,1,acbc674d-d053-43f4-9d62-86fbbb962ee2,acbc674d-d053-43f4-9d62-86fbbb962ee2,0,1,e0608801-124b-4c52-9a17-9072eb5b676c,e0608801-124b-4c52-9a17-9072eb5b676c,0,1,64e3295e-89c6-4b09-8dc4-b552da47db84,64e3295e-89c6-4b09-8dc4-b552da47db84,0,1,2c1846a5-09f2-414b-b95c-67ed7432ce0e,2c1846a5-09f2-414b-b95c-67ed7432ce0e,0,1,ce339ae7-a794-425b-8d5f-b04fd4b21364,ce339ae7-a794-425b-8d5f-b04fd4b21364,0,1,3ad5d8a7-3071-46aa-aebf-306bdb67983b,3ad5d8a7-3071-46aa-aebf-306bdb67983b,0,1,ab7ef662-71c1-4d51-9f0f-ea8c5ea3df8a,ab7ef662-71c1-4d51-9f0f-ea8c5ea3df8a,0,1,cb954476-c551-4a06-9bcd-18d67ba47dc8,cb954476-c551-4a06-9bcd-18d67ba47dc8,0,1,79201015-bfae-463e-81f1-0ae2d3066f3f,79201015-bfae-463e-81f1-0ae2d3066f3f,0,1,1ea3178b-73dd-4063-9140-c61687a4b1b8,1ea3178b-73dd-4063-9140-c61687a4b1b8,0,1,85fd7ef4-2886-4e2c-a6eb-63d0b0b9cd55,85fd7ef4-2886-4e2c-a6eb-63d0b0b9cd55,0,1,696723be-7b4f-4321-956e-eff07ea9f5fa,696723be-7b4f-4321-956e-eff07ea9f5fa,0,1,616c27dc-5c59-4469-97a7-27e0752bd3a7,616c27dc-5c59-4469-97a7-27e0752bd3a7,0,1,f7323121-74bc-441c-a3e9-dd5cb4f0accd,f7323121-74bc-441c-a3e9-dd5cb4f0accd,0,1,fddfb2fd-4d58-4bc6-b196-720425a8c029,fddfb2fd-4d58-4bc6-b196-720425a8c029,0,1,ce075cf1-1778-4671-aa40-166e6c41adc8,ce075cf1-1778-4671-aa40-166e6c41adc8,0,1,eddb111f-7622-44a3-b7d8-97faec67b23c,eddb111f-7622-44a3-b7d8-97faec67b23c,0,1,84872892-842e-4d7d-a3cd-576c42343a7a,84872892-842e-4d7d-a3cd-576c42343a7a,0,1,78ad6047-473d-494b-a2ba-81e062b567e6,78ad6047-473d-494b-a2ba-81e062b567e6,0,1,bb264e83-49f4-4b7a-8be2-094712fc0640,bb264e83-49f4-4b7a-8be2-094712fc0640,0,1,07bf650d-e61e-44f3-9643-6ffc95b913fb,07bf650d-e61e-44f3-9643-6ffc95b913fb,0,1,6b90ed05-813c-4324-8a69-02c2268856b2,6b90ed05-813c-4324-8a69-02c2268856b2,0,1,081ed48d-cb87-459d-97d6-9af121edbabb,081ed48d-cb87-459d-97d6-9af121edbabb,0,1,6c4074b2-f631-451d-b412-1c8c096a71b1,6c4074b2-f631-451d-b412-1c8c096a71b1,0,1,f9931a20-8391-4b13-8c6d-1836f2492e53,f9931a20-8391-4b13-8c6d-1836f2492e53,0,1,c6eec20b-13b9-44a0-968f-1325680c399b,c6eec20b-13b9-44a0-968f-1325680c399b,0,1,02fbf083-1bdd-4900-9dc1-62f415b792a4,02fbf083-1bdd-4900-9dc1-62f415b792a4,0,1,35454c2d-7088-487b-abb3-f95f2dfdcffa,35454c2d-7088-487b-abb3-f95f2dfdcffa,0,1,6d015113-1e32-4f5e-aacd-8134d7307125,6d015113-1e32-4f5e-aacd-8134d7307125,0,1,58230238-d2f2-422e-90cb-de355996eb19,58230238-d2f2-422e-90cb-de355996eb19,0,1,3d907678-628d-4fb2-85c2-149839024c08,3d907678-628d-4fb2-85c2-149839024c08,0,1,71384d10-6acf-4139-b766-cb8b5796f1a7,71384d10-6acf-4139-b766-cb8b5796f1a7,0,1,a8f149d7-e9bc-4695-b4f4-88434e31aafb,a8f149d7-e9bc-4695-b4f4-88434e31aafb,0,1,10dcbcc6-7793-4da7-a9a5-e4f124209d3e,10dcbcc6-7793-4da7-a9a5-e4f124209d3e,0,1,11ba510f-cb57-43d0-9897-c49e10b67ccd,11ba510f-cb57-43d0-9897-c49e10b67ccd,0,1,9d92af67-c88d-4429-9e85-0b5bf04c4b79,9d92af67-c88d-4429-9e85-0b5bf04c4b79,0,1,b009bc99-ea12-46db-a7f8-cb3e285b20d0,b009bc99-ea12-46db-a7f8-cb3e285b20d0,0,1,43523bbb-c923-4a20-bcb5-50d30cc826ee,43523bbb-c923-4a20-bcb5-50d30cc826ee,0,1,c89d9aad-3364-45df-88b5-b23ae76edbba,c89d9aad-3364-45df-88b5-b23ae76edbba,0,1,9a2f2cd1-4c9f-460b-b3b7-64706a0164ab,9a2f2cd1-4c9f-460b-b3b7-64706a0164ab,0,1,7e4b9dce-e332-4d35-8b5f-d3f88918989d,7e4b9dce-e332-4d35-8b5f-d3f88918989d,0,1,96fe619a-b819-4f96-9788-e1f4ef57833a,96fe619a-b819-4f96-9788-e1f4ef57833a,0,1,94dff2da-f721-411a-9fc0-5d013b685dcc,94dff2da-f721-411a-9fc0-5d013b685dcc,0,1,9343fc5f-7b08-4be5-8cd5-dbed635b819d,9343fc5f-7b08-4be5-8cd5-dbed635b819d,0,1,99e87e66-1b07-451b-a476-f5213cbd7150,99e87e66-1b07-451b-a476-f5213cbd7150,0,1,c3317f75-f6ad-41f6-97f1-77074c3ff62a,c3317f75-f6ad-41f6-97f1-77074c3ff62a,0,1,8800dec9-84f8-4643-8742-1d76fe575f58,8800dec9-84f8-4643-8742-1d76fe575f58,0,1,62903794-3b41-4d21-b800-1c26dbeda3ce,62903794-3b41-4d21-b800-1c26dbeda3ce,0,1,9bda4a0b-e8a7-4acf-9f07-4033b3a84ebc,9bda4a0b-e8a7-4acf-9f07-4033b3a84ebc,0,1,93de88de-0069-4aa8-96b2-d5709e4def2f,93de88de-0069-4aa8-96b2-d5709e4def2f,0,1,9f94fadf-ac9d-4e57-9fe4-41ce8cfbec6a,9f94fadf-ac9d-4e57-9fe4-41ce8cfbec6a,0,1,12d4ffc8-592e-42a7-b8c6-20bd58f6da90,12d4ffc8-592e-42a7-b8c6-20bd58f6da90,0,1,3a8d9010-8785-4d8d-b908-b821d7d681c9,3a8d9010-8785-4d8d-b908-b821d7d681c9,0,1,2568a935-ea49-4b99-aa9c-de27de6a0e81,2568a935-ea49-4b99-aa9c-de27de6a0e81,0,1,1c1e01f2-b2b3-480d-ae51-2db27b82dedd,1c1e01f2-b2b3-480d-ae51-2db27b82dedd,0,1,df459525-4e4d-4819-b996-5a6379b22a88,df459525-4e4d-4819-b996-5a6379b22a88,0,1,ed1d69f4-b09f-430a-bb2e-a23fe4dedf6b,ed1d69f4-b09f-430a-bb2e-a23fe4dedf6b,0,1,e67b4a32-4bac-450e-be6d-88c262383f31,e67b4a32-4bac-450e-be6d-88c262383f31,0,1,8b83bb54-4c23-4bd8-bd00-374a7a101cfa,8b83bb54-4c23-4bd8-bd00-374a7a101cfa,0,1,6c4c3eca-8b02-451b-af52-93073c3da146,6c4c3eca-8b02-451b-af52-93073c3da146,0,1,095c281c-3903-465d-baea-af1e6abf8019,095c281c-3903-465d-baea-af1e6abf8019,0,1,440d115d-a769-427e-891a-88d65fba2057,440d115d-a769-427e-891a-88d65fba2057,0,1,f7932210-027e-4fad-b7f7-3530789ce803,f7932210-027e-4fad-b7f7-3530789ce803,0,1,7bbfd95e-39a1-485b-930f-c9210c18dcd0,7bbfd95e-39a1-485b-930f-c9210c18dcd0,0,1,4975d3d6-b5a2-41c6-973b-6817013a388d,4975d3d6-b5a2-41c6-973b-6817013a388d,0,1,18ebc799-9724-4ffb-855e-b09a0723869e,18ebc799-9724-4ffb-855e-b09a0723869e,0,1,a06b8ef5-83e6-4fc6-91e1-256004134d69,a06b8ef5-83e6-4fc6-91e1-256004134d69,0,1,1d6a68ec-917f-4c3b-b970-797a6921cbc9,1d6a68ec-917f-4c3b-b970-797a6921cbc9,0,1,ae29eb40-5c8f-4ab4-8556-f98d45e8effe,ae29eb40-5c8f-4ab4-8556-f98d45e8effe,0,1,5b663988-3599-46dc-8d59-4c82ceac537c,5b663988-3599-46dc-8d59-4c82ceac537c,0,1,0f5f136c-688b-491e-a72b-3d9c2e609f0e,0f5f136c-688b-491e-a72b-3d9c2e609f0e,0,1,5573b405-6ac4-4632-b8d6-5d1cbdb63b97,5573b405-6ac4-4632-b8d6-5d1cbdb63b97,0,1,679cc0df-df5c-4c33-8c64-c0b6cee39116,679cc0df-df5c-4c33-8c64-c0b6cee39116,0,1,b156752b-f25c-4f35-9474-8ac3636597f5,b156752b-f25c-4f35-9474-8ac3636597f5,0,1,b67b872e-236a-4ea7-9838-0827234867b4,b67b872e-236a-4ea7-9838-0827234867b4,0,1,1e5ced23-48a7-4f3c-aa3b-78399a2b9e2b,1e5ced23-48a7-4f3c-aa3b-78399a2b9e2b,0,1,ce422d4f-1221-4ebf-a801-975a3220a226,ce422d4f-1221-4ebf-a801-975a3220a226,0,1,8735949b-f259-48b9-97e9-a81dfc7dcc8d,8735949b-f259-48b9-97e9-a81dfc7dcc8d,0,1,b8810612-dc7a-4a45-a83c-163a8669b578,b8810612-dc7a-4a45-a83c-163a8669b578,0,1,00e4dc17-b984-4f45-8b42-2e6a7a5dbced,00e4dc17-b984-4f45-8b42-2e6a7a5dbced,0,1,349c3dc3-0729-41f3-983f-3b13170c6509,349c3dc3-0729-41f3-983f-3b13170c6509,0,1,8281df26-4bde-47ba-926e-f22a8042bf1f,8281df26-4bde-47ba-926e-f22a8042bf1f,0,1,7278fb66-1d48-4c1d-bd15-425f78ad0c32,7278fb66-1d48-4c1d-bd15-425f78ad0c32,0,1,6893007f-8354-4b3b-b205-7c7d385cbde0,6893007f-8354-4b3b-b205-7c7d385cbde0,0,1,d74365a3-b434-41d0-84a7-543c336b5880,d74365a3-b434-41d0-84a7-543c336b5880,0,1,3d42502a-5705-49d7-b4ed-29edbd6306bc,3d42502a-5705-49d7-b4ed-29edbd6306bc,0,1,221e24e6-b31c-45b6-8835-2ad08d595c5f,221e24e6-b31c-45b6-8835-2ad08d595c5f,0,1,fd0fa6c9-1f42-4907-a266-fe7b6847e58a,fd0fa6c9-1f42-4907-a266-fe7b6847e58a,0,1,2e8cbcd7-f5b5-471e-863a-e09b4bc8e163,2e8cbcd7-f5b5-471e-863a-e09b4bc8e163,0,1,55956063-b227-4c74-8d9c-4a62b4f0dbc7,55956063-b227-4c74-8d9c-4a62b4f0dbc7,0,1,b6871b83-7269-43a9-b9a6-a195ff93365d,b6871b83-7269-43a9-b9a6-a195ff93365d,0,1,7dcd627c-16f6-41f9-b474-590ad1c7d2ed,7dcd627c-16f6-41f9-b474-590ad1c7d2ed,0,1,0cf89f30-e702-4c9e-8af4-888634463b99,0cf89f30-e702-4c9e-8af4-888634463b99,0,1,77f890ac-3c9c-4043-a5b7-12158772bcf5,77f890ac-3c9c-4043-a5b7-12158772bcf5,0,1,2bc734f9-8c0d-473a-b1c3-340395069501,2bc734f9-8c0d-473a-b1c3-340395069501,0,1,316c3933-21dd-4e8a-9450-0900e85ef7e2,316c3933-21dd-4e8a-9450-0900e85ef7e2,0,1,994fe78b-9f61-4aaf-9355-fafcae6b816d,994fe78b-9f61-4aaf-9355-fafcae6b816d,0,1,8448f07b-751b-4670-b44c-3564e81e5cdc,8448f07b-751b-4670-b44c-3564e81e5cdc,0,1,17aadd5f-cda2-4785-a07f-3ab4b04434a6,17aadd5f-cda2-4785-a07f-3ab4b04434a6,0,1,71bc35e6-0fec-4e54-af2d-23d1357d1c3b,71bc35e6-0fec-4e54-af2d-23d1357d1c3b,0,1,1832336e-32f6-42c4-9087-8614ead52bb3,1832336e-32f6-42c4-9087-8614ead52bb3,0,1,ff9f7b5c-70f4-4eed-8216-64448e7da76f,ff9f7b5c-70f4-4eed-8216-64448e7da76f,0,1,44ac2869-990d-4cac-a14b-c1a28854341e,44ac2869-990d-4cac-a14b-c1a28854341e,0,1,d5df31c3-89f9-469c-80a9-fb4706d30bc4,d5df31c3-89f9-469c-80a9-fb4706d30bc4,0,1,e73a6a9d-8ddd-4531-9f17-745117d9da9b,e73a6a9d-8ddd-4531-9f17-745117d9da9b,0,1,9dd4e17c-d10b-435e-8665-08997edc3e7e,9dd4e17c-d10b-435e-8665-08997edc3e7e,0,1,cafd44e1-8509-4550-8329-ff8cab0c31ae,cafd44e1-8509-4550-8329-ff8cab0c31ae,0,1,ee6e5e56-5848-46b6-89bf-b9345a57d94c,ee6e5e56-5848-46b6-89bf-b9345a57d94c,0,1,8817c872-bdee-4577-bcc3-4046edc72803,8817c872-bdee-4577-bcc3-4046edc72803,0,1,5b88c214-4e4e-45c2-b8c5-14eb852e9900,5b88c214-4e4e-45c2-b8c5-14eb852e9900,0,1,105cd740-1f60-45e1-871c-adeecd291b0d,105cd740-1f60-45e1-871c-adeecd291b0d,0,1,95aec7d2-179b-4ea3-a3df-3d737b713564,95aec7d2-179b-4ea3-a3df-3d737b713564,0,1,4bd1cae4-d5b5-444e-9cf5-67a969714293,4bd1cae4-d5b5-444e-9cf5-67a969714293,0,1,b1a330d7-9b88-44e9-aba6-41ce5e5e669c,b1a330d7-9b88-44e9-aba6-41ce5e5e669c,0,1,f279a625-b88f-43b4-bce9-de1186fe7d7e,f279a625-b88f-43b4-bce9-de1186fe7d7e,0,1,99fc224a-2a61-441a-85e9-d69df6aa8b5e,99fc224a-2a61-441a-85e9-d69df6aa8b5e,0,1,a528c26f-3ceb-4ae4-8420-edfbdea6e1ac,a528c26f-3ceb-4ae4-8420-edfbdea6e1ac,0,1,d009782b-d73e-42d1-9979-2cbaf20ee98e,d009782b-d73e-42d1-9979-2cbaf20ee98e,0,1,1ef6282c-ae81-4d76-8e3e-99fec58fc7bd,1ef6282c-ae81-4d76-8e3e-99fec58fc7bd,0,1,88d8edf7-654f-4627-b68d-c7e929726da6,88d8edf7-654f-4627-b68d-c7e929726da6,0,1,483720db-6c9e-4179-b5c7-56159c9b6073,483720db-6c9e-4179-b5c7-56159c9b6073,0,1,1725c619-9c4a-40ac-9044-00fee71945a4,1725c619-9c4a-40ac-9044-00fee71945a4,0,1,45a85e25-7c33-4ff5-87a0-2a0b4cda8130,45a85e25-7c33-4ff5-87a0-2a0b4cda8130,0,1,e95b126d-797d-4071-b7b4-b14aaf595f2d,e95b126d-797d-4071-b7b4-b14aaf595f2d,0,1,9241ea3c-633f-4469-9e70-c5a20e464da8,9241ea3c-633f-4469-9e70-c5a20e464da8,0,1,bbadbe1b-cb33-4cc5-84c8-a4fdfc8a2247,bbadbe1b-cb33-4cc5-84c8-a4fdfc8a2247,0,1,961ae0fb-7f7b-414d-8fbf-32b893b41085,961ae0fb-7f7b-414d-8fbf-32b893b41085,0,1,10adf8c8-6f5f-477f-b244-4452b774b766,10adf8c8-6f5f-477f-b244-4452b774b766,0,1,ac9dcb8c-d4f5-4f0d-affb-e4187eafdf14,ac9dcb8c-d4f5-4f0d-affb-e4187eafdf14,0,1,04ec5e44-8469-4e9c-8021-83d258f2ec54,04ec5e44-8469-4e9c-8021-83d258f2ec54,0,1,cff36ede-0bd1-424b-8c75-b9695133f32e,cff36ede-0bd1-424b-8c75-b9695133f32e,0,1,9d872d99-eac7-43ee-8ce2-c9d31a76bd75,9d872d99-eac7-43ee-8ce2-c9d31a76bd75,0,1,77e5bd01-35f3-4072-bc7a-8730e6dcbab3,77e5bd01-35f3-4072-bc7a-8730e6dcbab3,0,1,58b33683-1916-4aef-9b98-5569ef7782ed,58b33683-1916-4aef-9b98-5569ef7782ed,0,1,d3e1f622-f438-4cad-94ae-0272f51610f7,d3e1f622-f438-4cad-94ae-0272f51610f7,0,1,64ac2c2a-2726-4ab9-9a6a-3d08f3fc0618,64ac2c2a-2726-4ab9-9a6a-3d08f3fc0618,0,1,8569cd73-d40d-4d92-83e0-8ece0c03a86a,8569cd73-d40d-4d92-83e0-8ece0c03a86a,0,1,9ebe2809-be6b-4c91-9443-b237fb7ad43c,9ebe2809-be6b-4c91-9443-b237fb7ad43c,0,1,bf29c091-de15-4cd4-be0e-a9785f97d444,bf29c091-de15-4cd4-be0e-a9785f97d444,0,1,6a675752-fd31-46a5-8a62-2a1ede437c68,6a675752-fd31-46a5-8a62-2a1ede437c68,0,1,97a65f49-845f-4eed-ae81-61266ed3e05b,97a65f49-845f-4eed-ae81-61266ed3e05b,0,1,060b2bb4-ca03-4da9-930f-7f91f6299a35,060b2bb4-ca03-4da9-930f-7f91f6299a35,0,1,394b1a1c-a7ae-41b7-a346-4bac99fa567d,394b1a1c-a7ae-41b7-a346-4bac99fa567d,0,1,9a5fa511-59e8-4a1b-a101-f276f0b7b261,9a5fa511-59e8-4a1b-a101-f276f0b7b261,0,1,ccfe4e36-80b6-419f-8bb3-c1046203d023,ccfe4e36-80b6-419f-8bb3-c1046203d023,0,1,94b2e060-53b7-4b40-af05-30bea3520330,94b2e060-53b7-4b40-af05-30bea3520330,0,1,0f634f7e-7d6b-43e4-8e5e-a31ed05898ea,0f634f7e-7d6b-43e4-8e5e-a31ed05898ea,0,1,41b0dabd-85a3-4819-84dd-371eaf4f996e,41b0dabd-85a3-4819-84dd-371eaf4f996e,0,1,86a5ba4d-0681-4ddc-a505-0f537528e1a3,86a5ba4d-0681-4ddc-a505-0f537528e1a3,0,1,12d936f5-932b-4561-b934-c8444808a450,12d936f5-932b-4561-b934-c8444808a450,0,1,2ccb06ca-9bb7-4b74-9a96-c109bb117984,2ccb06ca-9bb7-4b74-9a96-c109bb117984,0,1,ac1a661d-db18-4576-80a9-a19d4140c05e,ac1a661d-db18-4576-80a9-a19d4140c05e,0,1,acd89f6c-a25f-47b9-ac21-036bfafcc0fc,acd89f6c-a25f-47b9-ac21-036bfafcc0fc,0,1,c3ffeb09-121b-4d77-9c15-def4648b4f3c,c3ffeb09-121b-4d77-9c15-def4648b4f3c,0,1,c2de0724-04c1-4adb-b62a-b7ba727dbe67,c2de0724-04c1-4adb-b62a-b7ba727dbe67,0,1,4ae26777-69ff-4a55-942b-0bad8ab7a70a,4ae26777-69ff-4a55-942b-0bad8ab7a70a,0,1,a0d8fb0a-0e90-4140-8687-e249b153dc66,a0d8fb0a-0e90-4140-8687-e249b153dc66,0,1,917c6f60-2a07-4587-9496-d393aff93953,917c6f60-2a07-4587-9496-d393aff93953,0,1,4bac50a2-762a-44e6-b8c5-3b09ef1a3f5e,4bac50a2-762a-44e6-b8c5-3b09ef1a3f5e,0,1,9fe72d73-4c95-47e0-bf92-dcb714d747c6,9fe72d73-4c95-47e0-bf92-dcb714d747c6,0,1,fe00e64f-2fa9-44a7-9bd7-854ebb6c0185,fe00e64f-2fa9-44a7-9bd7-854ebb6c0185,0,1,4d84bb11-e06e-4ed9-915b-76ee0e385a8b,4d84bb11-e06e-4ed9-915b-76ee0e385a8b,0,1,2b94076d-39ee-45ad-9ba5-435115cf5d4f,2b94076d-39ee-45ad-9ba5-435115cf5d4f,0,1,72ace16c-e90a-4d05-bc23-4351d4c87683,72ace16c-e90a-4d05-bc23-4351d4c87683,0,1,bd86e378-84bb-486a-be7b-319a3fe3b70b,bd86e378-84bb-486a-be7b-319a3fe3b70b,0,1,ef3bc279-6721-4949-8dc0-f96141f7f05c,ef3bc279-6721-4949-8dc0-f96141f7f05c,0,1,f81c7e21-48ad-4b64-975d-e62d34c7235a,f81c7e21-48ad-4b64-975d-e62d34c7235a,0,1,d0523c14-585e-45d3-9735-891235631004,d0523c14-585e-45d3-9735-891235631004,0,1,b6f8bc3e-f0cd-43ef-b060-d701cd446197,b6f8bc3e-f0cd-43ef-b060-d701cd446197,0,1,4f10e5f9-6cfd-4fa9-9c72-d19a484a796c,4f10e5f9-6cfd-4fa9-9c72-d19a484a796c,0,1,b94e805f-e1ab-4870-b855-98aa401864b2,b94e805f-e1ab-4870-b855-98aa401864b2,0,1,ff8eedeb-fc3e-4bee-852b-6da6d59ff38c,ff8eedeb-fc3e-4bee-852b-6da6d59ff38c,0,1,a98bd18f-ccda-41a2-a1b2-8b37cc1f6c36,a98bd18f-ccda-41a2-a1b2-8b37cc1f6c36,0,1,62f9fe19-3d64-4506-a0bc-dbfe47b4df64,62f9fe19-3d64-4506-a0bc-dbfe47b4df64,0,1,45af8f5d-d505-466b-a798-19f2219a180c,45af8f5d-d505-466b-a798-19f2219a180c,0,1,8a8229bc-f70a-4434-bacc-8a81fc58154b,8a8229bc-f70a-4434-bacc-8a81fc58154b,0,1,6324ad14-82ca-467b-b6b7-8d5f6049ca65,6324ad14-82ca-467b-b6b7-8d5f6049ca65,0,1,273446f0-f28b-4ce2-874c-3c6a57299b71,273446f0-f28b-4ce2-874c-3c6a57299b71,0,1,eb2f7449-ee42-43ec-b59c-3e07a6e3c139,eb2f7449-ee42-43ec-b59c-3e07a6e3c139,0,1,f8a7913a-2c64-47e1-8ae9-622fc6e9477e,f8a7913a-2c64-47e1-8ae9-622fc6e9477e,0,1,5e22429f-9ec0-4943-bf80-1becc4b8e5cb,5e22429f-9ec0-4943-bf80-1becc4b8e5cb,0,1,0153e60e-daca-48ac-b1c6-adecc89f579e,0153e60e-daca-48ac-b1c6-adecc89f579e,0,1,1ed4cf25-19f0-49f5-96a0-0ffe13adfe35,1ed4cf25-19f0-49f5-96a0-0ffe13adfe35,0,1,a896bc34-30a6-48b6-acfc-786c24c186bd,a896bc34-30a6-48b6-acfc-786c24c186bd,0,1,3867f4cb-bf54-42fb-8ea6-ca51d7cd6c91,3867f4cb-bf54-42fb-8ea6-ca51d7cd6c91,0,1,da8ae00a-7207-4ceb-b739-9114888c5b27,da8ae00a-7207-4ceb-b739-9114888c5b27,0,1,91af7a52-0825-4af5-94df-cc501e0123cd,91af7a52-0825-4af5-94df-cc501e0123cd,0,1,1c2cc78a-2ae6-4996-a743-7b55aecbe84c,1c2cc78a-2ae6-4996-a743-7b55aecbe84c,0,1,9292bf81-5668-4d52-a4ec-a93bc4b0ad3b,9292bf81-5668-4d52-a4ec-a93bc4b0ad3b,0,1,9693cc78-852e-445b-a7d2-f1689fa9eeec,9693cc78-852e-445b-a7d2-f1689fa9eeec,0,1,eb33e555-db41-462a-a45d-c7e0945cece8,eb33e555-db41-462a-a45d-c7e0945cece8,0,1,9cfd517c-1008-483a-9f65-7d15feb2cefc,9cfd517c-1008-483a-9f65-7d15feb2cefc,0,1,d66adc5e-25a3-472e-b0a4-5f22f88d7a0f,d66adc5e-25a3-472e-b0a4-5f22f88d7a0f,0,1,ae48d48f-cd39-4821-a4b7-9394b2a77ef6,ae48d48f-cd39-4821-a4b7-9394b2a77ef6,0,1,f34d3a69-533e-49df-b91d-f7f7f49c5fb1,f34d3a69-533e-49df-b91d-f7f7f49c5fb1,0,1,1d76f613-f4f6-4772-8c16-d97b3104a553,1d76f613-f4f6-4772-8c16-d97b3104a553,0,1,3e58d607-b906-449f-b044-9c130a487b86,3e58d607-b906-449f-b044-9c130a487b86,0,1,7a911212-7fde-4ea8-a1fa-229116b60895,7a911212-7fde-4ea8-a1fa-229116b60895,0,1,f4580043-5bc2-4295-8523-909302009b44,f4580043-5bc2-4295-8523-909302009b44,0,1,dc8af632-a5a4-4270-ba5f-2d3ba506f7e3,dc8af632-a5a4-4270-ba5f-2d3ba506f7e3,0,1,81936ac2-32fe-4e14-897b-0aba92b90c05,81936ac2-32fe-4e14-897b-0aba92b90c05,0,1,9f88e355-3f8f-4fcd-b45f-39c3d45490f5,9f88e355-3f8f-4fcd-b45f-39c3d45490f5,0,1,ac028c56-b2a8-4a9b-a325-554c636f838e,ac028c56-b2a8-4a9b-a325-554c636f838e,0,1,0ed85f4c-c002-49b6-99b9-0c3c4b7f940e,0ed85f4c-c002-49b6-99b9-0c3c4b7f940e,0,1,f99e98ac-cd94-4989-8c02-ef8b323c6815,f99e98ac-cd94-4989-8c02-ef8b323c6815,0,1,e2562347-4549-4111-862e-86c20a6daade,e2562347-4549-4111-862e-86c20a6daade,0,1,b270fc64-15c6-41ed-ad09-44c833ca7c41,b270fc64-15c6-41ed-ad09-44c833ca7c41,0,1,4c3312fd-5613-4e9b-ae7c-572fa1887ded,4c3312fd-5613-4e9b-ae7c-572fa1887ded,0,1,6c8c9618-287a-41ab-890c-60250925ad52,6c8c9618-287a-41ab-890c-60250925ad52,0,1,168fce48-2413-45fc-ad21-9b465121d81b,168fce48-2413-45fc-ad21-9b465121d81b,0,1,55b9650e-098b-4d44-9fb5-d525b46f014b,55b9650e-098b-4d44-9fb5-d525b46f014b,0,1,5b7b32ec-3d0e-42e9-bd13-5d2b8cc1942d,5b7b32ec-3d0e-42e9-bd13-5d2b8cc1942d,0,1,bc55dc06-a769-40be-9c99-0794bdd2dbea,bc55dc06-a769-40be-9c99-0794bdd2dbea,0,1,7861e179-96d2-422f-a7c2-b38b59074956,7861e179-96d2-422f-a7c2-b38b59074956,0,1,0b2416bc-f322-45b3-8c3f-2c8a206c55a1,0b2416bc-f322-45b3-8c3f-2c8a206c55a1,0,1,3797b4c6-e336-4cbe-8d0b-0902e1247b42,3797b4c6-e336-4cbe-8d0b-0902e1247b42,0,1,67ebc493-d29a-4614-890a-feb8b5bd884b,67ebc493-d29a-4614-890a-feb8b5bd884b,0,1,d65c8992-aabc-4b67-9893-01862231ebe1,d65c8992-aabc-4b67-9893-01862231ebe1,0,1,dc79e5e2-37d1-4f19-9500-15c1d9be10eb,dc79e5e2-37d1-4f19-9500-15c1d9be10eb,0,1,dba6cb38-79c6-4060-87c5-a993548f36c4,dba6cb38-79c6-4060-87c5-a993548f36c4,0,1,6b44227a-e226-4bcb-8638-06b49f830669,6b44227a-e226-4bcb-8638-06b49f830669,0,1,f2406400-87e9-4df2-bcd3-8f1e3ad62088,f2406400-87e9-4df2-bcd3-8f1e3ad62088,0,1,ecaacedb-bf2d-4736-a9e1-fa89cda85ee6,ecaacedb-bf2d-4736-a9e1-fa89cda85ee6,0,1,a5623e87-3102-4521-b4ab-c41bf2403a1a,a5623e87-3102-4521-b4ab-c41bf2403a1a,0,1,599b1692-5f4e-42ef-ae1a-822ff527a415,599b1692-5f4e-42ef-ae1a-822ff527a415,0,1,ee9abe8a-b3a2-48a9-9157-ea537e83b7e7,ee9abe8a-b3a2-48a9-9157-ea537e83b7e7,0,1,23f70675-6a05-4b50-ad68-c55ddc93e857,23f70675-6a05-4b50-ad68-c55ddc93e857,0,1,4bb7372a-87a9-426e-b09f-fc0110455b10,4bb7372a-87a9-426e-b09f-fc0110455b10,0,1,ac853a0f-c185-4cdb-9f09-c921770937b5,ac853a0f-c185-4cdb-9f09-c921770937b5,0,1,920a7940-4d12-476d-a909-2231787839a9,920a7940-4d12-476d-a909-2231787839a9,0,1,b3aeeb3c-622d-4e0c-8c13-199f0e431a7d,b3aeeb3c-622d-4e0c-8c13-199f0e431a7d,0,1,ad14c4d1-bc11-44b6-a32c-c00fb89a9ea5,ad14c4d1-bc11-44b6-a32c-c00fb89a9ea5,0,1,32eb2a75-ff35-4795-bf0c-12b1328441ee,32eb2a75-ff35-4795-bf0c-12b1328441ee,0,1,8e877990-a64c-4c45-91f1-007d47618cc7,8e877990-a64c-4c45-91f1-007d47618cc7,0,1,73c6640e-2fe6-4132-9237-d6f28cbacc1c,73c6640e-2fe6-4132-9237-d6f28cbacc1c,0,1,1731708f-53cb-4b00-b90e-f581b4baa845,1731708f-53cb-4b00-b90e-f581b4baa845,0,1,d4b0feca-c00a-4d48-9f23-d92277ea6483,d4b0feca-c00a-4d48-9f23-d92277ea6483,0,1,00b2a0b3-6af8-4ea4-aa38-d1e078d5cbff,00b2a0b3-6af8-4ea4-aa38-d1e078d5cbff,0,1,20f7fdd2-30f6-4a52-a63b-7d2c326c0e83,20f7fdd2-30f6-4a52-a63b-7d2c326c0e83,0,1,23cb5bc2-9638-4d1c-b4bc-d5297e271570,23cb5bc2-9638-4d1c-b4bc-d5297e271570,0,1,6e547ccb-6d5a-4f7c-aaf0-568c22d2c276,6e547ccb-6d5a-4f7c-aaf0-568c22d2c276,0,1,04b7389d-697d-4b0d-a239-ac8c674cc46f,04b7389d-697d-4b0d-a239-ac8c674cc46f,0,1,a1cf5173-2e86-4ed7-9a0b-1bd5e578326a,a1cf5173-2e86-4ed7-9a0b-1bd5e578326a,0,1,864cad61-8280-415d-8fe1-bcb39d56670a,864cad61-8280-415d-8fe1-bcb39d56670a,0,1,b106bd29-5dc7-44d7-94d0-00f61499392e,b106bd29-5dc7-44d7-94d0-00f61499392e,0,1,a4febff8-0566-4977-bf55-1d574568fe9f,a4febff8-0566-4977-bf55-1d574568fe9f,0,1,5199cc65-bed1-40b9-96fe-cf6d855a8b91,5199cc65-bed1-40b9-96fe-cf6d855a8b91,0,1,f518add9-5c26-4dac-ab2e-b30fe3fbd347,f518add9-5c26-4dac-ab2e-b30fe3fbd347,0,1,23f53317-7aa8-4816-8a69-3d39d5e76da0,23f53317-7aa8-4816-8a69-3d39d5e76da0,0,1,9ade5155-fa6d-4999-b019-a5e7e235a158,9ade5155-fa6d-4999-b019-a5e7e235a158,0,1,8b302c5e-b255-4cb5-94d9-0dfef4250097,8b302c5e-b255-4cb5-94d9-0dfef4250097,0,1,49d713b8-6a61-4bd1-9650-0de1869967d2,49d713b8-6a61-4bd1-9650-0de1869967d2,0,1,4738ffd0-3c3b-4e5f-8773-0c9a80efdfbf,4738ffd0-3c3b-4e5f-8773-0c9a80efdfbf,0,1,3d1bae2a-4dfd-48e5-bfe9-b7e30c8475f6,3d1bae2a-4dfd-48e5-bfe9-b7e30c8475f6,0,1,0ddeed48-b98a-47c3-84a2-2eac065be06c,0ddeed48-b98a-47c3-84a2-2eac065be06c,0,1,7987fe2c-d7cc-4fd2-ac4e-610bfb1ab6d2,7987fe2c-d7cc-4fd2-ac4e-610bfb1ab6d2,0,1,fc18d95e-a51d-45c0-83b0-09aeb2b5b03a,fc18d95e-a51d-45c0-83b0-09aeb2b5b03a,0,1,61b947a5-edca-43ca-82c4-5a7b529d8f82,61b947a5-edca-43ca-82c4-5a7b529d8f82,0,1,59eb6a7a-1d96-4985-8d8e-575162759415,59eb6a7a-1d96-4985-8d8e-575162759415,0,1,68564573-ed49-4519-a8b3-997865fe70a6,68564573-ed49-4519-a8b3-997865fe70a6,0,1,6c789969-d066-489d-ad88-92e2a5a6ec69,6c789969-d066-489d-ad88-92e2a5a6ec69,0,1,2a07d696-75d6-4a12-a310-30d6598b4a4c,2a07d696-75d6-4a12-a310-30d6598b4a4c,0,1,dde88f56-417c-4559-a893-85dc91e7e623,dde88f56-417c-4559-a893-85dc91e7e623,0,1,963eedab-6976-4a98-b9ad-b81f89239661,963eedab-6976-4a98-b9ad-b81f89239661,0,1,3370d43e-8e97-4411-8123-2bb2bcf60a75,3370d43e-8e97-4411-8123-2bb2bcf60a75,0,1,d9d377c9-406f-4bc9-8076-1f049348b816,d9d377c9-406f-4bc9-8076-1f049348b816,0,1,dcfcb108-3761-43d9-ad2a-29633bd1ae47,dcfcb108-3761-43d9-ad2a-29633bd1ae47,0,1,36baa776-83c4-413d-b70c-cbbc45e25662,36baa776-83c4-413d-b70c-cbbc45e25662,0,1,b65f9165-c20d-4053-8a0b-cff3f693b762,b65f9165-c20d-4053-8a0b-cff3f693b762,0,1,51af096b-687f-44f4-a0d8-306f670fc5ce,51af096b-687f-44f4-a0d8-306f670fc5ce,0,1,75972f88-aedd-4338-a3b5-320cd632a2e6,75972f88-aedd-4338-a3b5-320cd632a2e6,0,1,a720abc8-dcf0-4684-8d94-22d394a8e4df,a720abc8-dcf0-4684-8d94-22d394a8e4df,0,1,e40f53de-c27b-4e74-8241-f784d7ca5c84,e40f53de-c27b-4e74-8241-f784d7ca5c84,0,1,ef38b84d-277e-48c2-8826-330132eb6807,ef38b84d-277e-48c2-8826-330132eb6807,0,1,67a50910-059a-4724-84e0-c21bc3ac74c2,67a50910-059a-4724-84e0-c21bc3ac74c2,0,1,fdd83a89-a2fe-40d8-a531-a10bfeb36a1d,fdd83a89-a2fe-40d8-a531-a10bfeb36a1d,0,1,0d190f8b-87c5-4dd1-bcfb-609ec3a44f72,0d190f8b-87c5-4dd1-bcfb-609ec3a44f72,0,1,9e78a2b9-44fc-4971-801d-1ddd4bb09cfd,9e78a2b9-44fc-4971-801d-1ddd4bb09cfd,0,1,2c0d11fc-b927-4b5d-a16c-d60e69580824,2c0d11fc-b927-4b5d-a16c-d60e69580824,0,1,5251e744-666e-48a0-a5b4-9cef313c7631,5251e744-666e-48a0-a5b4-9cef313c7631,0,1,73554821-8ab5-44ab-a593-37ca10a1b777,73554821-8ab5-44ab-a593-37ca10a1b777,0,1,d5a98e02-e199-445e-8d53-11acd07f473f,d5a98e02-e199-445e-8d53-11acd07f473f,0,1,79db55d6-e916-4bde-b417-7d0a53bb85af,79db55d6-e916-4bde-b417-7d0a53bb85af,0,1,3084fb99-59cb-4338-ae37-0b1e8b333f01,3084fb99-59cb-4338-ae37-0b1e8b333f01,0,1,818a1fbf-17c1-44f9-8e20-27d4ceda549c,818a1fbf-17c1-44f9-8e20-27d4ceda549c,0,1,959a5d25-03e5-4911-bbb7-b93714db7eed,959a5d25-03e5-4911-bbb7-b93714db7eed,0,1,1d0b6a8d-9351-4ce2-85dd-6ac508c660c2,1d0b6a8d-9351-4ce2-85dd-6ac508c660c2,0,1,0b09cf2f-1759-4362-b997-29e09ac00445,0b09cf2f-1759-4362-b997-29e09ac00445,0,1,f6a9eb9c-a1c2-4114-b155-3ce94c7b7f20,f6a9eb9c-a1c2-4114-b155-3ce94c7b7f20,0,1,828ddf5d-ca09-4baf-897f-77d569e02a6b,828ddf5d-ca09-4baf-897f-77d569e02a6b,0,1,8856015c-a695-4b1a-99ef-770263f9dc4a,8856015c-a695-4b1a-99ef-770263f9dc4a,0,1,183ec2b5-e173-4885-9e26-1098ffa15020,183ec2b5-e173-4885-9e26-1098ffa15020,0,1,74702fdf-bfc5-4658-ba58-e39bcfbaa647,74702fdf-bfc5-4658-ba58-e39bcfbaa647,0,1,2f436ec3-6a04-4d2c-998a-c60ea875ca86,2f436ec3-6a04-4d2c-998a-c60ea875ca86,0,1,6a947b2d-3e6b-42c8-a9fd-4c5a71d600a9,6a947b2d-3e6b-42c8-a9fd-4c5a71d600a9,0,1,ae641a80-4ada-4592-ace9-29a82e6700e4,ae641a80-4ada-4592-ace9-29a82e6700e4,0,1,6fb76c5f-844f-4cbc-ae7c-4ac834fddfc9,6fb76c5f-844f-4cbc-ae7c-4ac834fddfc9,0,1,275a5772-8428-497a-81ef-c919f15fcccd,275a5772-8428-497a-81ef-c919f15fcccd,0,1,8df6e7e6-2a1e-4cf3-bdc9-60e52ea3f625,8df6e7e6-2a1e-4cf3-bdc9-60e52ea3f625,0,1,190bc52e-0d51-4dfc-9f16-99ed71ebfa75,190bc52e-0d51-4dfc-9f16-99ed71ebfa75,0,1,0c24858a-7e64-426f-9b59-392449aecaf5,0c24858a-7e64-426f-9b59-392449aecaf5,0,1,b1d61e28-f3dc-418b-b5df-f75622a4b980,b1d61e28-f3dc-418b-b5df-f75622a4b980,0,1,bec4c82f-4e76-4d16-bb4d-b6d9fa404c5d,bec4c82f-4e76-4d16-bb4d-b6d9fa404c5d,0,1,4033f86b-d250-475a-8837-071bf31664b0,4033f86b-d250-475a-8837-071bf31664b0,0,1,876e31ff-ab7b-4ea4-b491-161963727dd1,876e31ff-ab7b-4ea4-b491-161963727dd1,0,1,bb43995b-68b4-41a1-8458-e10a2d8925f1,bb43995b-68b4-41a1-8458-e10a2d8925f1,0,1,61730dd9-fed7-43ce-8f38-724cac8f3d08,61730dd9-fed7-43ce-8f38-724cac8f3d08,0,1,e6a494b8-27e7-46a6-9435-7be6e150a69e,e6a494b8-27e7-46a6-9435-7be6e150a69e,0,1,133dc852-59d3-4351-934d-8845f8a38431,133dc852-59d3-4351-934d-8845f8a38431,0,1,55dbaaf1-554d-46e2-b42a-ce6a8bf20dfb,55dbaaf1-554d-46e2-b42a-ce6a8bf20dfb,0,1,b67914a8-d483-4bed-bd4d-a4aadd4998a4,b67914a8-d483-4bed-bd4d-a4aadd4998a4,0,1,707a8a49-fec5-454c-9e80-c3da829d395c,707a8a49-fec5-454c-9e80-c3da829d395c,0,1,b5ea4aff-11be-4232-94a2-cb92801b6c49,b5ea4aff-11be-4232-94a2-cb92801b6c49,0,1,6f630213-c16c-421c-a160-09e3c729ab26,6f630213-c16c-421c-a160-09e3c729ab26,0,1,878c638c-7c84-4914-896a-d4fdf0d759ef,878c638c-7c84-4914-896a-d4fdf0d759ef,0,1,6065653e-b7a9-4033-9617-f64430c57d89,6065653e-b7a9-4033-9617-f64430c57d89,0,1,9ec63da6-1f53-417f-9c7d-6879eaa56a7e,9ec63da6-1f53-417f-9c7d-6879eaa56a7e,0,1,00d1d85b-c258-4f10-9d13-a99375a29fc1,00d1d85b-c258-4f10-9d13-a99375a29fc1,0,1,0544376f-461c-42c3-a102-e0ae65e3c0c6,0544376f-461c-42c3-a102-e0ae65e3c0c6,0,1,6df8d316-6ac3-4626-8951-1ad36d7049ed,6df8d316-6ac3-4626-8951-1ad36d7049ed,0,1,f211b418-899d-4220-a14b-4a7302183e46,f211b418-899d-4220-a14b-4a7302183e46,0,1,e499629a-69ed-46b4-be5d-7b1f2f6a11d4,e499629a-69ed-46b4-be5d-7b1f2f6a11d4,0,1,52ab6aea-e6a0-43f0-9cc8-f7c9126635cc,52ab6aea-e6a0-43f0-9cc8-f7c9126635cc,0,1,876b23bf-2f48-4916-ad0f-4de8306e1864,876b23bf-2f48-4916-ad0f-4de8306e1864,0,1,e983f539-e369-491e-9cee-510518187870,e983f539-e369-491e-9cee-510518187870,0,1,9a402a9c-a31f-4082-91d5-b4fe7576a5c2,9a402a9c-a31f-4082-91d5-b4fe7576a5c2,0,1,e99a1b17-0e37-489a-bc39-3dd2e23b0861,e99a1b17-0e37-489a-bc39-3dd2e23b0861,0,1,e7c63a25-c804-4bc4-a6f1-81009dd889e2,e7c63a25-c804-4bc4-a6f1-81009dd889e2,0,1,7ccd86cd-4294-4f6c-84f4-98e25e479f4d,7ccd86cd-4294-4f6c-84f4-98e25e479f4d,0,1,70e710c5-42df-465f-a9c5-8345c87e1f19,70e710c5-42df-465f-a9c5-8345c87e1f19,0,1,4c1576c4-b327-4ec1-87bc-662c5aba343b,4c1576c4-b327-4ec1-87bc-662c5aba343b,0,1,0f694ef1-4a97-4aed-ab4b-0b2c18ea7e17,0f694ef1-4a97-4aed-ab4b-0b2c18ea7e17,0,1,14facdfb-9835-4bb6-98a8-5a6ca9a5d2f8,14facdfb-9835-4bb6-98a8-5a6ca9a5d2f8,0,1,4492ac73-eb91-41f8-98f1-54c2b3ad212a,4492ac73-eb91-41f8-98f1-54c2b3ad212a,0,1,869b43fb-968f-4fe0-b945-5030c90a38f2,869b43fb-968f-4fe0-b945-5030c90a38f2,0,1,af071a52-212b-4131-98e6-81f6048a70e6,af071a52-212b-4131-98e6-81f6048a70e6,0,1,37210dde-9a2f-475c-8341-578ac99f0e17,37210dde-9a2f-475c-8341-578ac99f0e17,0,1,e5094d4f-ee61-4142-a97b-d96172350f65,e5094d4f-ee61-4142-a97b-d96172350f65,0,1,3a8fffb6-a732-440c-afb9-d1c699ea53b6,3a8fffb6-a732-440c-afb9-d1c699ea53b6,0,1,b0650787-8ff5-4407-b491-bcdc2f61fd58,b0650787-8ff5-4407-b491-bcdc2f61fd58,0,1,33dd6bba-0044-4e2f-ae9e-c8a26079ab2a,33dd6bba-0044-4e2f-ae9e-c8a26079ab2a,0,1,3f289f67-dfc7-4f2d-90e4-b47aff76ecdb,3f289f67-dfc7-4f2d-90e4-b47aff76ecdb,0,1,9aadad98-69f5-41ce-ad1c-0afd8c610d86,9aadad98-69f5-41ce-ad1c-0afd8c610d86,0,1,706a3db0-9d4f-4c08-91cd-3ccaa6d06d3b,706a3db0-9d4f-4c08-91cd-3ccaa6d06d3b,0,1,3d662173-e19d-4077-9a08-8c8899226e24,3d662173-e19d-4077-9a08-8c8899226e24,0,1,69fd1e6e-7302-4ca8-8419-ec567ae66bef,69fd1e6e-7302-4ca8-8419-ec567ae66bef,0,1,0eee931a-57bb-4844-8e6e-eaca342640a0,0eee931a-57bb-4844-8e6e-eaca342640a0,0,1,20c57e30-5856-4801-9e77-8006471d89f8,20c57e30-5856-4801-9e77-8006471d89f8,0,1,64eff9f4-c57b-40a0-bd83-7e371fd010ce,64eff9f4-c57b-40a0-bd83-7e371fd010ce,0,1,4a3fe393-8aea-4394-8c10-a234f1f191ad,4a3fe393-8aea-4394-8c10-a234f1f191ad,0,1,6f9a3d00-d935-4fa6-9fd2-14700226daff,6f9a3d00-d935-4fa6-9fd2-14700226daff,0,1,d792831c-698d-40c6-96c2-dd0ae6f30707,d792831c-698d-40c6-96c2-dd0ae6f30707,0,1,a1d91c5f-1acd-4b46-887e-d06e7260dd20,a1d91c5f-1acd-4b46-887e-d06e7260dd20,0,1,3fd26019-c464-4c73-b18e-0888740b1747,3fd26019-c464-4c73-b18e-0888740b1747,0,1,a21989bd-a57f-4969-be3b-d8b39ead4145,a21989bd-a57f-4969-be3b-d8b39ead4145,0,1,c4aee120-cdbb-4b48-a1c7-99cccbafb120,c4aee120-cdbb-4b48-a1c7-99cccbafb120,0,1,6b3e07d5-9299-4933-b3fa-c3cc5f5aa7c9,6b3e07d5-9299-4933-b3fa-c3cc5f5aa7c9,0,1,a3667b25-7c18-446d-a318-685a4fe4bf89,a3667b25-7c18-446d-a318-685a4fe4bf89,0,1,fd271670-bde6-4351-abec-eb82548c6c98,fd271670-bde6-4351-abec-eb82548c6c98,0,1,498b012b-bb63-490e-8100-1d33dc84b400,498b012b-bb63-490e-8100-1d33dc84b400,0,1,8103f12c-ed50-4052-8117-33b6d11ef620,8103f12c-ed50-4052-8117-33b6d11ef620,0,1,4f8653e4-3f58-4bad-8ded-424fe7b1d18a,4f8653e4-3f58-4bad-8ded-424fe7b1d18a,0,1,799b3dda-fbfc-4dea-a577-30321e64f4d5,799b3dda-fbfc-4dea-a577-30321e64f4d5,0,1,7c7857b6-90e8-4b3f-9902-fd81bf68d133,7c7857b6-90e8-4b3f-9902-fd81bf68d133,0,1,617de19c-bf01-4900-832a-c169e9faeb79,617de19c-bf01-4900-832a-c169e9faeb79,0,1,70b73fd0-f5dc-411e-9bbb-10a538e8281b,70b73fd0-f5dc-411e-9bbb-10a538e8281b,0,1,758f44ad-54da-4f72-accf-0afecc4f4827,758f44ad-54da-4f72-accf-0afecc4f4827,0,1,05ee4a7c-63e6-4587-8be7-e206345e3471,05ee4a7c-63e6-4587-8be7-e206345e3471,0,1,98d5e98b-0382-4b28-a5d9-24392925664a,98d5e98b-0382-4b28-a5d9-24392925664a,0,1,7c424a77-2a83-4a85-8b7d-e8bb6d013c77,7c424a77-2a83-4a85-8b7d-e8bb6d013c77,0,1,ecaba9aa-fca7-42f5-a4fe-d8176cf875b9,ecaba9aa-fca7-42f5-a4fe-d8176cf875b9,0,1,4378ab20-5467-476b-8f04-4b6876efdee6,4378ab20-5467-476b-8f04-4b6876efdee6,0,1,55e47901-c79c-41c5-9d7f-6b6846ed2782,55e47901-c79c-41c5-9d7f-6b6846ed2782,0,1,479d9428-02fd-47d2-a869-a3695b315724,479d9428-02fd-47d2-a869-a3695b315724,0,1,838b4840-86e3-4bf3-8b95-1e58ef60e97a,838b4840-86e3-4bf3-8b95-1e58ef60e97a,0,1,36d258b5-bfda-4b40-88a8-1e0abf351805,36d258b5-bfda-4b40-88a8-1e0abf351805,0,1,cc95b010-ca42-4b54-9c50-0551b2c690ed,cc95b010-ca42-4b54-9c50-0551b2c690ed,0,1,829fb3c0-6d96-4765-adc6-f177344a4a33,829fb3c0-6d96-4765-adc6-f177344a4a33,0,1,9241e7fe-e3e8-4ddd-ac6c-4edb1a1b2f71,9241e7fe-e3e8-4ddd-ac6c-4edb1a1b2f71,0,1,7c47f039-1ca9-4c6f-ac36-f4cb59b48b65,7c47f039-1ca9-4c6f-ac36-f4cb59b48b65,0,1,974d2430-1ff6-4be9-a5aa-aa896e9a66d4,974d2430-1ff6-4be9-a5aa-aa896e9a66d4,0,1,d392a791-af74-40c9-ab20-6ed6aeabe864,d392a791-af74-40c9-ab20-6ed6aeabe864,0,1,0b7cee9b-3870-49f5-a58e-063cf5353467,0b7cee9b-3870-49f5-a58e-063cf5353467,0,1,1612570d-b069-405a-9dd3-80b8175fb468,1612570d-b069-405a-9dd3-80b8175fb468,0,1,3c429fe8-e663-4a58-817f-8f8382697dbb,3c429fe8-e663-4a58-817f-8f8382697dbb,0,1,c37be0c3-d2db-4e63-a8cb-7956a5396650,c37be0c3-d2db-4e63-a8cb-7956a5396650,0,1,83180e0d-fc4b-41ec-9a17-5af555a4776f,83180e0d-fc4b-41ec-9a17-5af555a4776f,0,1,27c52afc-7127-41e1-af8a-1b1bd2c9bfa8,27c52afc-7127-41e1-af8a-1b1bd2c9bfa8,0,1,7f68e4c1-c4f7-4c6c-8f0a-225e544e07ee,7f68e4c1-c4f7-4c6c-8f0a-225e544e07ee,0,1,561ed574-617d-4a46-b32b-f022e07846c8,561ed574-617d-4a46-b32b-f022e07846c8,0,1,cba706bf-a9a7-4dda-9c5a-a26e85119396,cba706bf-a9a7-4dda-9c5a-a26e85119396,0,1,159a4eb5-00cd-426c-86e3-09cd3f569f22,159a4eb5-00cd-426c-86e3-09cd3f569f22,0,1,f03cdb56-ef3f-461f-91b1-cdcaed2786e8,f03cdb56-ef3f-461f-91b1-cdcaed2786e8,0,1,3e8c6546-416c-4437-8c85-2cf591b4fc3f,3e8c6546-416c-4437-8c85-2cf591b4fc3f,0,1,038e5027-3cc5-4ea2-b0b5-28a7544ad53e,038e5027-3cc5-4ea2-b0b5-28a7544ad53e,0,1,9a0b27db-e4ac-496b-b6de-876b90381527,9a0b27db-e4ac-496b-b6de-876b90381527,0,1,2ded5135-b6c3-46dd-b563-7b6fab986d23,2ded5135-b6c3-46dd-b563-7b6fab986d23,0,1,14215720-ccb3-4e5a-8345-cd42c96a3e77,14215720-ccb3-4e5a-8345-cd42c96a3e77,0,1,24fa0604-b6a5-49ad-9d03-b2cf8e81dad8,24fa0604-b6a5-49ad-9d03-b2cf8e81dad8,0,1,0690a5c7-bc25-4101-afa5-69c095d415c2,0690a5c7-bc25-4101-afa5-69c095d415c2,0,1,2ad7b509-4cd1-456a-a6ae-94649fdf8c3e,2ad7b509-4cd1-456a-a6ae-94649fdf8c3e,0,1,79013bba-a0f2-481c-a63e-095a54ee52aa,79013bba-a0f2-481c-a63e-095a54ee52aa,0,1,8523c346-f144-41b8-a702-2d588e7097c2,8523c346-f144-41b8-a702-2d588e7097c2,0,1,93969a30-d9d7-4f2f-85fa-57a4eb7495bf,93969a30-d9d7-4f2f-85fa-57a4eb7495bf,0,1,9fb73c9b-05de-4474-8a28-7e3fd5b2b143,9fb73c9b-05de-4474-8a28-7e3fd5b2b143,0,1,fa2bd6a6-bb46-4e21-8684-248578310164,fa2bd6a6-bb46-4e21-8684-248578310164,0,1,f7cf3b42-39c0-48db-b8ca-fe9ea267a45a,f7cf3b42-39c0-48db-b8ca-fe9ea267a45a,0,1,3a0c06eb-f6d5-46c3-b0b9-c8d98e572093,3a0c06eb-f6d5-46c3-b0b9-c8d98e572093,0,1,88ccac36-169d-48f8-bc68-15e3bb775b79,88ccac36-169d-48f8-bc68-15e3bb775b79,0,1,a1640988-bd60-43b3-86f1-184b9db275c6,a1640988-bd60-43b3-86f1-184b9db275c6,0,1,300a02f7-8062-4843-b11e-0321f8b40f4d,300a02f7-8062-4843-b11e-0321f8b40f4d,0,1,bac41d45-249f-40b4-a013-008e261369c8,bac41d45-249f-40b4-a013-008e261369c8,0,1,84e34b4a-02e8-4676-8b81-771ddf3c2931,84e34b4a-02e8-4676-8b81-771ddf3c2931,0,1,0aa6a024-66ae-4592-87d6-f7cb2a59f906,0aa6a024-66ae-4592-87d6-f7cb2a59f906,0,1,734b4dc5-dc91-4945-a2d7-cefe56a6e0a6,734b4dc5-dc91-4945-a2d7-cefe56a6e0a6,0,1,bb2dcb37-410d-4a6c-9ace-1f04177d6e88,bb2dcb37-410d-4a6c-9ace-1f04177d6e88,0,1,cb6ecc18-a14f-4c3c-a39d-2cd2d1ab4e03,cb6ecc18-a14f-4c3c-a39d-2cd2d1ab4e03,0,1,f71ac535-74a5-4001-a613-455a9e1bf734,f71ac535-74a5-4001-a613-455a9e1bf734,0,1,55a42b83-b6d2-409b-a8ff-7849b08e07ed,55a42b83-b6d2-409b-a8ff-7849b08e07ed,0,1,61889399-ecc2-442c-a790-a8b27a7a540c,61889399-ecc2-442c-a790-a8b27a7a540c,0,1,ecd3a928-3e59-439c-8f58-ba360f2a8b3c,ecd3a928-3e59-439c-8f58-ba360f2a8b3c,0,1,4ee2efbc-bc4a-4b47-bfdb-bb83f108c5bb,4ee2efbc-bc4a-4b47-bfdb-bb83f108c5bb,0,1,2d942a50-b239-4b8c-812a-5a634f5dcaef,2d942a50-b239-4b8c-812a-5a634f5dcaef,0,1,8ab0c61d-85b4-47e3-aca1-1890e4c6ec8d,8ab0c61d-85b4-47e3-aca1-1890e4c6ec8d,0,1,a21cf522-d657-49ba-a198-01ff1de5e3f0,a21cf522-d657-49ba-a198-01ff1de5e3f0,0,1,4dc698da-8471-4b3f-816d-f1467cd2e5f1,4dc698da-8471-4b3f-816d-f1467cd2e5f1,0,1,7ceb2f18-4dae-4b13-a5be-e949be165b4e,7ceb2f18-4dae-4b13-a5be-e949be165b4e,0,1,c4f94f6d-e33f-4226-bf47-c4b544098082,c4f94f6d-e33f-4226-bf47-c4b544098082,0,1,0abca5b8-4974-48aa-bf5d-dbbe2c2ea0e6,0abca5b8-4974-48aa-bf5d-dbbe2c2ea0e6,0,1,0b2356a4-5571-4ba0-9095-265106f2b3b3,0b2356a4-5571-4ba0-9095-265106f2b3b3,0,1,a2581834-dde8-439a-8204-6712c829738e,a2581834-dde8-439a-8204-6712c829738e,0,1,222985c4-fe09-44d1-a1c5-5a3e3cedd9b2,222985c4-fe09-44d1-a1c5-5a3e3cedd9b2,0,1,c746a268-815b-4917-8b06-af745ba9db04,c746a268-815b-4917-8b06-af745ba9db04,0,1,5cc01f13-0faa-4c3c-8e5e-156656f71efd,5cc01f13-0faa-4c3c-8e5e-156656f71efd,0,1,091cb921-c7e3-4a5f-97b7-34e625159b9c,091cb921-c7e3-4a5f-97b7-34e625159b9c,0,1,f6118cdd-1dcd-464e-a49d-e95c69466750,f6118cdd-1dcd-464e-a49d-e95c69466750,0,1,39932897-959b-41a6-94ad-61426abfdbd9,39932897-959b-41a6-94ad-61426abfdbd9,0,1,c56ea6f3-1032-4b7a-a20e-e912196da1cd,c56ea6f3-1032-4b7a-a20e-e912196da1cd,0,1,20d655a7-788c-48bc-83ae-25003106bedb,20d655a7-788c-48bc-83ae-25003106bedb,0,1,7bfb78de-899f-4a4d-a8b2-ebadeccf3921,7bfb78de-899f-4a4d-a8b2-ebadeccf3921,0,1,68a72014-4b2e-4347-aaa7-54d95b8eb919,68a72014-4b2e-4347-aaa7-54d95b8eb919,0,1,a71d9c41-7510-4d38-90df-1034977b8f45,a71d9c41-7510-4d38-90df-1034977b8f45,0,1,25830f5b-27e2-4eff-9728-b21eb498727d,25830f5b-27e2-4eff-9728-b21eb498727d,0,1,379c9295-d0d5-418d-82f3-5ae19985cc53,379c9295-d0d5-418d-82f3-5ae19985cc53,0,1,af02f534-8508-4f9f-bcc1-0c6f3d696971,af02f534-8508-4f9f-bcc1-0c6f3d696971,0,1,dd345cfb-ea0c-4ea8-9b35-22547b000275,dd345cfb-ea0c-4ea8-9b35-22547b000275,0,1,86a871da-3725-43a1-a7c3-98acd187011b,86a871da-3725-43a1-a7c3-98acd187011b,0,1,2447cfeb-d877-4222-8ac2-b0026b85f932,2447cfeb-d877-4222-8ac2-b0026b85f932,0,1,fb94e9cb-1f27-42a6-a701-18bbe5888e70,fb94e9cb-1f27-42a6-a701-18bbe5888e70,0,1,2e26e32e-a0c6-4460-99de-865622202166,2e26e32e-a0c6-4460-99de-865622202166,0,1,c9489a6e-45af-4877-9788-158071571a0a,c9489a6e-45af-4877-9788-158071571a0a,0,1,23959912-f8fc-42bc-9ec2-1d520ebc5dad,23959912-f8fc-42bc-9ec2-1d520ebc5dad,0,1,4770398f-8013-4d43-93ce-ec1165e40c4e,4770398f-8013-4d43-93ce-ec1165e40c4e,0,1,9a706997-90cb-430d-972c-d2bad87c4a79,9a706997-90cb-430d-972c-d2bad87c4a79,0,1,6f661660-b9c4-41d4-99a8-e08006cfe9c8,6f661660-b9c4-41d4-99a8-e08006cfe9c8,0,1,199e79fa-54d6-4748-aaaa-9c55283582a3,199e79fa-54d6-4748-aaaa-9c55283582a3,0,1,77b4ade5-149c-4803-af25-fb24ad8b7116,77b4ade5-149c-4803-af25-fb24ad8b7116,0,1,afedc975-4354-473c-8a4d-5b4b547c6e13,afedc975-4354-473c-8a4d-5b4b547c6e13,0,1,8faced7e-d498-499e-8011-7d8d2de1a25f,8faced7e-d498-499e-8011-7d8d2de1a25f,0,1,a67b69dc-ca89-4813-a78d-4a7be1aff328,a67b69dc-ca89-4813-a78d-4a7be1aff328,0,1,dec2510f-4517-4144-a525-3c344e44abc4,dec2510f-4517-4144-a525-3c344e44abc4,0,1,5ef026c2-2ef4-45d6-9792-5ba0d298714b,5ef026c2-2ef4-45d6-9792-5ba0d298714b,0,1,45d61391-4cf7-4f45-8775-ada582c42400,45d61391-4cf7-4f45-8775-ada582c42400,0,1,78b2a913-2ab9-455d-85a3-504f0f468468,78b2a913-2ab9-455d-85a3-504f0f468468,0,1,8c7e1080-fbb2-4a9c-b740-b3e9eb996565,8c7e1080-fbb2-4a9c-b740-b3e9eb996565,0,1,560b5b12-4dee-4c69-ab6b-7680757a2797,560b5b12-4dee-4c69-ab6b-7680757a2797,0,1,3cfb1ce0-de42-4914-85c0-807d0c10f77e,3cfb1ce0-de42-4914-85c0-807d0c10f77e,0,1,aa89881f-f111-4384-911c-847b04bb56dd,aa89881f-f111-4384-911c-847b04bb56dd,0,1,444d9e3b-c702-4ad6-a929-a220eff0f6e7,444d9e3b-c702-4ad6-a929-a220eff0f6e7,0,1,022c4519-1cdb-45b6-a699-89fd6688999c,022c4519-1cdb-45b6-a699-89fd6688999c,0,1,fb5b79a2-caec-4c6e-a112-27e78a184d5e,fb5b79a2-caec-4c6e-a112-27e78a184d5e,0,1,fa523958-ce1e-42e1-ae00-2dcb401b7eda,fa523958-ce1e-42e1-ae00-2dcb401b7eda,0,1,1518bca2-a004-4566-8991-7c60e6745a49,1518bca2-a004-4566-8991-7c60e6745a49,0,1,ed8618e2-3ce6-4956-856a-9f40279b4da6,ed8618e2-3ce6-4956-856a-9f40279b4da6,0,1,733f6bc2-544d-4fac-bca8-11b981b95a03,733f6bc2-544d-4fac-bca8-11b981b95a03,0,1,0333cd9e-392d-40b2-869d-ad47119e0384,0333cd9e-392d-40b2-869d-ad47119e0384,0,1,82cc8820-0b92-4bb7-b097-7ac79e922f01,82cc8820-0b92-4bb7-b097-7ac79e922f01,0,1,f2267d6c-6972-4621-b677-87798056363b,f2267d6c-6972-4621-b677-87798056363b,0,1,243d201b-3714-4700-b410-c74c9093e6f6,243d201b-3714-4700-b410-c74c9093e6f6,0,1,de3cb50c-ef99-419e-b922-c6a453da6a5b,de3cb50c-ef99-419e-b922-c6a453da6a5b,0,1,d4ca4802-756a-494c-bab3-e77e0777a3fa,d4ca4802-756a-494c-bab3-e77e0777a3fa,0,1,134c1054-8d65-405f-ba3b-5beeca803a72,134c1054-8d65-405f-ba3b-5beeca803a72,0,1,cfa1669b-5310-4171-83fd-4dff3c6ac345,cfa1669b-5310-4171-83fd-4dff3c6ac345,0,1,9ec26d14-b09d-4fd7-9c43-062c0120cf3d,9ec26d14-b09d-4fd7-9c43-062c0120cf3d,0,1,8a0d4f7f-7a80-4e5d-8238-05fc169e0319,8a0d4f7f-7a80-4e5d-8238-05fc169e0319,0,1,8e9f9baf-8d12-46cc-915f-f6f290af5512,8e9f9baf-8d12-46cc-915f-f6f290af5512,0,1,5808331f-9ab4-4a23-a592-1f65087f3214,5808331f-9ab4-4a23-a592-1f65087f3214,0,1,9316738d-3d38-4068-818e-a001355b19fb,9316738d-3d38-4068-818e-a001355b19fb,0,1,d86d766f-021a-4c11-b9e8-403af08918cc,d86d766f-021a-4c11-b9e8-403af08918cc,0,1,2cedfef0-5d93-475a-b2dd-ee36e553e6e1,2cedfef0-5d93-475a-b2dd-ee36e553e6e1,0,1,29200d04-d7da-435a-89e6-858c11a1a98c,29200d04-d7da-435a-89e6-858c11a1a98c,0,1,8e5f6c70-04b3-46a1-94ef-82c9f6019f8f,8e5f6c70-04b3-46a1-94ef-82c9f6019f8f,0,1,6c119ef2-d24b-4c3d-ad07-611bed89cab1,6c119ef2-d24b-4c3d-ad07-611bed89cab1,0,1,13b1cb1f-88df-4ff8-b4cc-0473e4f96005,13b1cb1f-88df-4ff8-b4cc-0473e4f96005,0,1,0e861ad8-6fa3-4b0f-a9b0-6c91df1dfc6b,0e861ad8-6fa3-4b0f-a9b0-6c91df1dfc6b,0,1,27df6c22-85d7-4cb6-be19-82af76c84bf9,27df6c22-85d7-4cb6-be19-82af76c84bf9,0,1,77bd95d6-3cd5-4b67-a0b6-72d24243fbc2,77bd95d6-3cd5-4b67-a0b6-72d24243fbc2,0,1,0be7f905-53b8-4bb1-8e37-dcc142e508c5,0be7f905-53b8-4bb1-8e37-dcc142e508c5,0,1,422155c7-1640-48c4-bb21-36595b405c66,422155c7-1640-48c4-bb21-36595b405c66,0,1,16d37b5a-88db-4787-b2de-fb50da0ca94b,16d37b5a-88db-4787-b2de-fb50da0ca94b,0,1,f653bcbf-5659-4605-9bb9-3737f19e79dd,f653bcbf-5659-4605-9bb9-3737f19e79dd,0,1,8b980868-fe63-49ff-ba3d-4c29732e1b90,8b980868-fe63-49ff-ba3d-4c29732e1b90,0,1,54668731-4963-4ec3-b188-9feacaefa182,54668731-4963-4ec3-b188-9feacaefa182,0,1,3702135e-5380-4ca6-82f5-63eff1b043e9,3702135e-5380-4ca6-82f5-63eff1b043e9,0,1,29b2104b-fd02-4d51-951f-51ea213b8ebd,29b2104b-fd02-4d51-951f-51ea213b8ebd,0,1,ba5c945e-554f-45a2-a2de-3157b2d7e931,ba5c945e-554f-45a2-a2de-3157b2d7e931,0,1,f7085f33-f122-4443-a3f5-4e765300175e,f7085f33-f122-4443-a3f5-4e765300175e,0,1,b7e4c512-b856-4679-a025-5f0f28918593,b7e4c512-b856-4679-a025-5f0f28918593,0,1,bba56b8f-a3f3-4d3f-9804-f9569bb1f6f3,bba56b8f-a3f3-4d3f-9804-f9569bb1f6f3,0,1,cff7ba79-9418-43a4-badc-3e3cc2f6bd5b,cff7ba79-9418-43a4-badc-3e3cc2f6bd5b,0,1,a9362ac4-85ee-4214-80c1-048fab769885,a9362ac4-85ee-4214-80c1-048fab769885,0,1,4ec242e0-75d1-4bf7-be18-783e7aa4f236,4ec242e0-75d1-4bf7-be18-783e7aa4f236,0,1,e02b1366-9d7a-462f-86a1-436bbf4532ff,e02b1366-9d7a-462f-86a1-436bbf4532ff,0,1,40ee729c-c317-4a1c-b985-5f7e4e1e20fb,40ee729c-c317-4a1c-b985-5f7e4e1e20fb,0,1,2feb35c0-b046-4086-a2ce-ccc462fc6e9c,2feb35c0-b046-4086-a2ce-ccc462fc6e9c,0,1,8811cc64-99d9-4f13-8309-c29965783f5a,8811cc64-99d9-4f13-8309-c29965783f5a,0,1,7c737071-e850-4a3f-8942-697ef52a8ecc,7c737071-e850-4a3f-8942-697ef52a8ecc,0,1,62eff222-7b74-4cab-9138-880db1f05147,62eff222-7b74-4cab-9138-880db1f05147,0,1,39c6c277-cfc6-4e8a-8e7f-afcff55f0511,39c6c277-cfc6-4e8a-8e7f-afcff55f0511,0,1,860f8893-22fe-4b13-adb1-24e1ea8c6544,860f8893-22fe-4b13-adb1-24e1ea8c6544,0,1,95266e9f-073f-4de3-83c6-cc0d9ee9334f,95266e9f-073f-4de3-83c6-cc0d9ee9334f,0,1,21b8ac8d-75ca-481c-8e85-01bc2029f0c0,21b8ac8d-75ca-481c-8e85-01bc2029f0c0,0,1,d5012e69-89bc-40af-8e4f-377a042854ee,d5012e69-89bc-40af-8e4f-377a042854ee,0,1,02f79fd8-5315-4c90-b520-db67dcb6e371,02f79fd8-5315-4c90-b520-db67dcb6e371,0,1,9bb52788-4a3a-48b5-a551-5ca753b6c059,9bb52788-4a3a-48b5-a551-5ca753b6c059,0,1,4fb5004f-3cd9-44c4-a44b-d235cccf9e9c,4fb5004f-3cd9-44c4-a44b-d235cccf9e9c,0,1,872a0c47-fab5-4a54-8ab9-23940bbdefbb,872a0c47-fab5-4a54-8ab9-23940bbdefbb,0,1,7428a626-3fbc-4f2c-a3dd-f14e8d90c00b,7428a626-3fbc-4f2c-a3dd-f14e8d90c00b,0,1,2f20bff4-9201-4f36-9e74-eba4d9b3c59a,2f20bff4-9201-4f36-9e74-eba4d9b3c59a,0,1,b6c94efd-5994-4c4c-a641-b062ecc38b65,b6c94efd-5994-4c4c-a641-b062ecc38b65,0,1,98501228-7f0e-45a3-b58f-4c654f393f80,98501228-7f0e-45a3-b58f-4c654f393f80,0,1,502384c9-edb7-451a-b7ea-de006f657a6e,502384c9-edb7-451a-b7ea-de006f657a6e,0,1,4e1a4fe0-dca4-40ba-9369-73be303a4aef,4e1a4fe0-dca4-40ba-9369-73be303a4aef,0,1,329906a0-0b61-4f3f-8cd0-f06a78e8fe5f,329906a0-0b61-4f3f-8cd0-f06a78e8fe5f,0,1,840e0b1b-a599-4c5f-8eaa-7f7e4f2e55a4,840e0b1b-a599-4c5f-8eaa-7f7e4f2e55a4,0,1,1d06a9e4-e637-4219-a81c-64f8ec1b91a4,1d06a9e4-e637-4219-a81c-64f8ec1b91a4,0,1,50968921-76f3-4108-835a-96b153671c8d,50968921-76f3-4108-835a-96b153671c8d,0,1,b773f510-1485-4886-9071-afcbf49ff856,b773f510-1485-4886-9071-afcbf49ff856,0,1,964403f2-0a87-49e1-b183-dbe3624e3805,964403f2-0a87-49e1-b183-dbe3624e3805,0,1,01579044-5659-4a73-a989-c52cfabaae66,01579044-5659-4a73-a989-c52cfabaae66,0,1,9b8509e8-8262-4e6a-b2f3-a0df8f49e2c5,9b8509e8-8262-4e6a-b2f3-a0df8f49e2c5,0,1,911baaa1-a4de-4558-b00e-51644144a762,911baaa1-a4de-4558-b00e-51644144a762,0,1,8a8ad123-c01a-440a-bd01-1c0da72cf2eb,8a8ad123-c01a-440a-bd01-1c0da72cf2eb,0,1,ca4ef957-36c2-43b9-8ff7-e2b7ee58cde5,ca4ef957-36c2-43b9-8ff7-e2b7ee58cde5,0,1,4e036eff-92a8-4010-89b2-ed949c123311,4e036eff-92a8-4010-89b2-ed949c123311,0,1,38160114-dc22-4d0b-86a5-d650f4756932,38160114-dc22-4d0b-86a5-d650f4756932,0,1,60aaa289-1f07-438c-8f10-81058ac671c3,60aaa289-1f07-438c-8f10-81058ac671c3,0,1,7312a4ab-a269-4d85-a2c2-25bd5c5dc59c,7312a4ab-a269-4d85-a2c2-25bd5c5dc59c,0,1,c44b0868-bd7f-4230-973b-544ff4dd2afe,c44b0868-bd7f-4230-973b-544ff4dd2afe,0,1,fc2675c2-1c9b-41f9-88eb-5c8be365fe41,fc2675c2-1c9b-41f9-88eb-5c8be365fe41,0,1,51e6a6f9-ce9d-4cb0-a40c-384ede074e07,51e6a6f9-ce9d-4cb0-a40c-384ede074e07,0,1,d49411b4-5f6d-48c5-b4f8-fdfbd1b73317,d49411b4-5f6d-48c5-b4f8-fdfbd1b73317,0,1,8b3da21b-ea3f-47cf-af48-15b886b21f20,8b3da21b-ea3f-47cf-af48-15b886b21f20,0,1,32c4750b-0096-4bbc-8dcd-c1f717734233,32c4750b-0096-4bbc-8dcd-c1f717734233,0,1,be6740b1-1f57-4c01-a67a-d48152931dc8,be6740b1-1f57-4c01-a67a-d48152931dc8,0,1,40fd038d-a93a-4be7-9221-d8ae83350ca0,40fd038d-a93a-4be7-9221-d8ae83350ca0,0,1,e9fcabef-5067-477b-8cb0-1bf3ab8161c5,e9fcabef-5067-477b-8cb0-1bf3ab8161c5,0,1,29adc9e5-a994-48ab-a5a1-919d01119c3a,29adc9e5-a994-48ab-a5a1-919d01119c3a,0,1,c47ffce7-c905-4e88-8b1f-156f47047ccd,c47ffce7-c905-4e88-8b1f-156f47047ccd,0,1,e1755eed-88cf-42c1-83e4-f9047f2c30bf,e1755eed-88cf-42c1-83e4-f9047f2c30bf,0,1,c6ec9d48-9131-4735-9cf7-b498705a57e4,c6ec9d48-9131-4735-9cf7-b498705a57e4,0,1,865d76f7-db4a-4fa2-8e1c-3ecbc2d8faf4,865d76f7-db4a-4fa2-8e1c-3ecbc2d8faf4,0,1,706c421a-74ce-4985-9443-b4a2032481f6,706c421a-74ce-4985-9443-b4a2032481f6,0,1,64da4c24-4aaf-42c8-8595-7f60ff3bc344,64da4c24-4aaf-42c8-8595-7f60ff3bc344,0,1,fb9577e1-00d9-4d52-8de9-23914929a683,fb9577e1-00d9-4d52-8de9-23914929a683,0,1,ffd62a16-f2b4-4e3a-8849-15b957a3d1a1,ffd62a16-f2b4-4e3a-8849-15b957a3d1a1,0,1,529253ae-9c92-4426-b150-8444ba622f89,529253ae-9c92-4426-b150-8444ba622f89,0,1,06a1955a-2ef0-4607-9dcb-a480a7951af7,06a1955a-2ef0-4607-9dcb-a480a7951af7,0,1,6f8fcc96-bfed-444a-908d-95c5b1c64972,6f8fcc96-bfed-444a-908d-95c5b1c64972,0,1,97ce4bf2-6580-4f27-8b5d-d60b66a09c9e,97ce4bf2-6580-4f27-8b5d-d60b66a09c9e,0,1,a84c89d9-2cfe-405f-9bb0-5392b3171695,a84c89d9-2cfe-405f-9bb0-5392b3171695,0,1,070ecbfe-88d6-4de8-b236-e7eedbc3ebc6,070ecbfe-88d6-4de8-b236-e7eedbc3ebc6,0,1,91e26e73-027f-4a10-9083-e5182e768723,91e26e73-027f-4a10-9083-e5182e768723,0,1,e55680f4-cb1a-4cdb-88f0-5d82f43c1d05,e55680f4-cb1a-4cdb-88f0-5d82f43c1d05,0,1,54433668-4391-4dea-8baf-43e9aa1d624e,54433668-4391-4dea-8baf-43e9aa1d624e,0,1,fc309616-060a-42c3-8401-dfef0f359bc5,fc309616-060a-42c3-8401-dfef0f359bc5,0,1,b968398d-973d-4643-95a5-16633d7e48bc,b968398d-973d-4643-95a5-16633d7e48bc,0,1,b9507495-2536-4895-b68b-62acd74343f6,b9507495-2536-4895-b68b-62acd74343f6,0,1,e05a14cc-9051-4c38-9725-19856e36d260,e05a14cc-9051-4c38-9725-19856e36d260,0,1,8154aa0f-ecd6-4ab0-9498-56ef25486a55,8154aa0f-ecd6-4ab0-9498-56ef25486a55,0,1,9d6429f7-23da-4596-822a-04818deb3088,9d6429f7-23da-4596-822a-04818deb3088,0,1,a1b67bd2-3220-497d-b2b4-bd0ea62d9111,a1b67bd2-3220-497d-b2b4-bd0ea62d9111,0,1,acb533e7-4610-4f92-b548-1a4ff1a423d4,acb533e7-4610-4f92-b548-1a4ff1a423d4,0,1,8697999d-9cdb-43d8-979b-3f283daffdd3,8697999d-9cdb-43d8-979b-3f283daffdd3,0,1,23378687-249c-4ec6-99b8-b13fb04b8643,23378687-249c-4ec6-99b8-b13fb04b8643,0,1,66315b12-7abf-46e0-a994-894b827b1301,66315b12-7abf-46e0-a994-894b827b1301,0,1,dba174fb-8392-4451-8069-ae8145658e34,dba174fb-8392-4451-8069-ae8145658e34,0,1,ff5dd4f8-8a16-4a41-875d-c4f7c37ae67a,ff5dd4f8-8a16-4a41-875d-c4f7c37ae67a,0,1,4435d99d-a1df-43e6-97ab-5e651017c61d,4435d99d-a1df-43e6-97ab-5e651017c61d,0,1,2398d69d-ecdd-4d34-bdae-34ed5507a61e,2398d69d-ecdd-4d34-bdae-34ed5507a61e,0,1,a707035a-0172-4b55-b589-fa4a8be9b596,a707035a-0172-4b55-b589-fa4a8be9b596,0,1,c4456e94-8c76-49b1-b85a-433e0f65bdb0,c4456e94-8c76-49b1-b85a-433e0f65bdb0,0,1,4a347209-3a07-48ea-b407-6ee37f1d69f2,4a347209-3a07-48ea-b407-6ee37f1d69f2,0,1,d6aed0fd-686c-430d-b884-74494177422e,d6aed0fd-686c-430d-b884-74494177422e,0,1,245ec4aa-ed65-41f7-b0f0-f8085cfc5bef,245ec4aa-ed65-41f7-b0f0-f8085cfc5bef,0,1,3ed64288-8bf0-4049-8d44-1b424f31d40f,3ed64288-8bf0-4049-8d44-1b424f31d40f,0,1,e0a3fab1-3fe9-4927-840e-f983f72bdfc1,e0a3fab1-3fe9-4927-840e-f983f72bdfc1,0,1,df31eee8-387d-40d1-98df-1f7d8176b50e,df31eee8-387d-40d1-98df-1f7d8176b50e,0,1,c8364283-5525-4bef-8e96-abced54c6a4a,c8364283-5525-4bef-8e96-abced54c6a4a,0,1,bcc25539-c6ca-40d0-84fd-53c3caf1aec7,bcc25539-c6ca-40d0-84fd-53c3caf1aec7,0,1,577f2671-7d38-4806-b7ff-840d649e6d69,577f2671-7d38-4806-b7ff-840d649e6d69,0,1,4ff9376e-ffa6-48f3-bf26-b55ceb23da09,4ff9376e-ffa6-48f3-bf26-b55ceb23da09,0,1,de4c339a-a3cf-4b30-bcf2-ce86f5c2d3b0,de4c339a-a3cf-4b30-bcf2-ce86f5c2d3b0,0,1,40e2fb30-bb03-4178-a8eb-ddf48337ef23,40e2fb30-bb03-4178-a8eb-ddf48337ef23,0,1,1026fbcb-acd8-40dc-b638-6e02c6378c55,1026fbcb-acd8-40dc-b638-6e02c6378c55,0,1,dc9e2ba6-f4f1-493f-9054-cac633f239dd,dc9e2ba6-f4f1-493f-9054-cac633f239dd,0,1,7b95d0b1-c7b2-43b4-9119-320cb8912032,7b95d0b1-c7b2-43b4-9119-320cb8912032,0,1,004582b7-00aa-405e-8e24-ce76c945edae,004582b7-00aa-405e-8e24-ce76c945edae,0,1,97a9b005-a836-4308-8e63-0e00f6890baa,97a9b005-a836-4308-8e63-0e00f6890baa,0,1,98c34ada-0b78-41db-9183-6d7b9e466bde,98c34ada-0b78-41db-9183-6d7b9e466bde,0,1,fb688339-918e-40a1-8721-a26f3077973e,fb688339-918e-40a1-8721-a26f3077973e,0,1,1f56de63-81eb-4de5-ad20-01cb6f84e5b0,1f56de63-81eb-4de5-ad20-01cb6f84e5b0,0,1,079ba95c-8293-47e2-b8bd-7acf73c2d880,079ba95c-8293-47e2-b8bd-7acf73c2d880,0,1,fbe1dcf7-c11d-4395-ab3a-c2f986c25419,fbe1dcf7-c11d-4395-ab3a-c2f986c25419,0,1,a5f264a8-a547-4653-abb1-eb1666d527dc,a5f264a8-a547-4653-abb1-eb1666d527dc,0,1,dabae379-6356-497a-aab5-cf102f16a72a,dabae379-6356-497a-aab5-cf102f16a72a,0,1,337370e0-1021-4887-9d38-6c3833c90a5b,337370e0-1021-4887-9d38-6c3833c90a5b,0,1,0ff569eb-d5b8-4ab1-ac77-5e5afd6d44d0,0ff569eb-d5b8-4ab1-ac77-5e5afd6d44d0,0,1,d6f01f1c-801b-4776-ae11-48236103f76a,d6f01f1c-801b-4776-ae11-48236103f76a,0,1,b6fe68cf-657b-40e0-af2e-247607a86519,b6fe68cf-657b-40e0-af2e-247607a86519,0,1,9b0b8191-94b7-428f-be86-e9e4cd24a72f,9b0b8191-94b7-428f-be86-e9e4cd24a72f,0,1,a923dbcb-7146-4445-ad17-f4a32c16a837,a923dbcb-7146-4445-ad17-f4a32c16a837,0,1,41dec792-1d1a-4e06-a54b-a86193b98225,41dec792-1d1a-4e06-a54b-a86193b98225,0,1,52257beb-3e0c-4681-b430-9690398cd13a,52257beb-3e0c-4681-b430-9690398cd13a,0,1,135e637c-c28e-4547-8da2-d897dca54cb2,135e637c-c28e-4547-8da2-d897dca54cb2,0,1,245be006-6d0a-4c9e-97c5-f3c2ddd734f7,245be006-6d0a-4c9e-97c5-f3c2ddd734f7,0,1,a0b74de9-06b5-416c-9dd0-2f9dc209fe91,a0b74de9-06b5-416c-9dd0-2f9dc209fe91,0,1,5356543a-db9a-4265-b83f-31d45544c8e6,5356543a-db9a-4265-b83f-31d45544c8e6,0,1,857dd311-9c6d-4dba-82d8-283d7b05b09e,857dd311-9c6d-4dba-82d8-283d7b05b09e,0,1,1055d15b-8cb5-4ff0-a526-7fd20a08a96c,1055d15b-8cb5-4ff0-a526-7fd20a08a96c,0,1,af88ea84-5742-4c9f-9a02-6d0f25186f72,af88ea84-5742-4c9f-9a02-6d0f25186f72,0,1,79ad09ba-875a-46bd-9cd9-9d084bf4f6ea,79ad09ba-875a-46bd-9cd9-9d084bf4f6ea,0,1,1a4ed7cf-3294-4a5c-9650-75b61d6b2531,1a4ed7cf-3294-4a5c-9650-75b61d6b2531,0,1,872521e3-413c-45ac-a6ea-39fe1324bae8,872521e3-413c-45ac-a6ea-39fe1324bae8,0,1,81ef02df-498d-4af0-8254-dc6730cbf140,81ef02df-498d-4af0-8254-dc6730cbf140,0,1,bcbdba9e-0b29-4ea7-a7d5-1de819bf86ec,bcbdba9e-0b29-4ea7-a7d5-1de819bf86ec,0,1,fe926c88-d792-4db3-abcf-3c94dfdcc407,fe926c88-d792-4db3-abcf-3c94dfdcc407,0,1,e0c51555-1614-4aa7-a075-c5e1251579ba,e0c51555-1614-4aa7-a075-c5e1251579ba,0,1,cb65fbad-69a0-47d8-b4a9-da49274c3eb7,cb65fbad-69a0-47d8-b4a9-da49274c3eb7,0,1,51363236-c8eb-4eb7-9692-5c18edc9a5a8,51363236-c8eb-4eb7-9692-5c18edc9a5a8,0,1,402f2fe0-4d08-4701-9c8f-0c2bb75815ef,402f2fe0-4d08-4701-9c8f-0c2bb75815ef,0,1,8cad6cfd-91d0-4563-800a-d60c8a1b6a03,8cad6cfd-91d0-4563-800a-d60c8a1b6a03,0,1,2902460a-ed86-41cf-8e8f-895adab9a72f,2902460a-ed86-41cf-8e8f-895adab9a72f,0,1,c4968b4e-0715-43a5-92ad-c8cd276fbf7b,c4968b4e-0715-43a5-92ad-c8cd276fbf7b,0,1,f82d5bd6-4c74-4c23-978c-565aae3d752a,f82d5bd6-4c74-4c23-978c-565aae3d752a,0,1,7fba41a5-4faa-412b-b367-b30ced0314c0,7fba41a5-4faa-412b-b367-b30ced0314c0,0,1,98422d20-9a71-40e4-966e-6958d44eaefb,98422d20-9a71-40e4-966e-6958d44eaefb,0,1,37333d0b-3589-4b8b-bf6c-e605e0287b66,37333d0b-3589-4b8b-bf6c-e605e0287b66,0,1,1813c469-da20-46a6-8947-6815b66f64c1,1813c469-da20-46a6-8947-6815b66f64c1,0,1,ad083c26-7461-4e94-b524-0174242fbd91,ad083c26-7461-4e94-b524-0174242fbd91,0,1,5ce39370-f918-493f-bb24-53346b6fd836,5ce39370-f918-493f-bb24-53346b6fd836,0,1,84f22fd2-e0d0-42ce-8628-1b13c021a4cb,84f22fd2-e0d0-42ce-8628-1b13c021a4cb,0,1,0e3d2750-bb4c-42b9-9829-60f1480ced9c,0e3d2750-bb4c-42b9-9829-60f1480ced9c,0,1,d1b6c5e8-7625-43aa-bb11-943c9bfa01b7,d1b6c5e8-7625-43aa-bb11-943c9bfa01b7,0,1,dad11c2e-08fc-4a6b-8829-8be6c64c15fc,dad11c2e-08fc-4a6b-8829-8be6c64c15fc,0,1,a76b1fd1-ba00-40e6-8756-f17fee449818,a76b1fd1-ba00-40e6-8756-f17fee449818,0,1,5c913626-48d1-4e0a-a423-64078ce59c7b,5c913626-48d1-4e0a-a423-64078ce59c7b,0,1,0a4e6b7a-b380-4547-bc3c-5d6895a5d19a,0a4e6b7a-b380-4547-bc3c-5d6895a5d19a,0,1,7b0ec304-1904-413e-a9c6-ff62e87107dd,7b0ec304-1904-413e-a9c6-ff62e87107dd,0,1,d4dd8c96-914d-496f-b735-ef85ec473605,d4dd8c96-914d-496f-b735-ef85ec473605,0,1,62517db4-59e6-4945-bcd6-b3f1845572bf,62517db4-59e6-4945-bcd6-b3f1845572bf,0,1,a6a9dd40-24cd-4d40-a12d-44f94f8c05a7,a6a9dd40-24cd-4d40-a12d-44f94f8c05a7,0,1,f0f72149-0e7f-441a-b70d-8f47d4977927,f0f72149-0e7f-441a-b70d-8f47d4977927,0,1,776efc3e-ac27-4550-bafd-6e91aa987af2,776efc3e-ac27-4550-bafd-6e91aa987af2,0,1,9f478c85-b72c-40ae-aa08-7ddf73b5b15c,9f478c85-b72c-40ae-aa08-7ddf73b5b15c,0,1,cc438366-85ea-48be-8b74-d05cddb1fc51,cc438366-85ea-48be-8b74-d05cddb1fc51,0,1,4688fd3b-4a92-4ed8-b111-0cf22a729b1c,4688fd3b-4a92-4ed8-b111-0cf22a729b1c,0,1,92029d1f-0472-4aaa-8fd6-9fb3c3cf414e,92029d1f-0472-4aaa-8fd6-9fb3c3cf414e,0,1,3271b800-1825-422f-97bb-757baf403e90,3271b800-1825-422f-97bb-757baf403e90,0,1,6fd6efc1-facc-4ece-a5b3-3dce6acca81d,6fd6efc1-facc-4ece-a5b3-3dce6acca81d,0,1,4ee82868-7a20-4c3a-91f9-42a6bf53ac37,4ee82868-7a20-4c3a-91f9-42a6bf53ac37,0,1,a040c756-4687-4bfd-a690-b122d3c490e5,a040c756-4687-4bfd-a690-b122d3c490e5,0,1,bd5940d5-13fd-4f59-bb6c-614f93f9c8e4,bd5940d5-13fd-4f59-bb6c-614f93f9c8e4,0,1,961a9801-3956-4ea0-b0d3-908f09bf4929,961a9801-3956-4ea0-b0d3-908f09bf4929,0,1,6fac5c14-e126-4342-9078-edf1d0efcbf2,6fac5c14-e126-4342-9078-edf1d0efcbf2,0,1,0a3325a1-21c4-4997-882f-4ac2edc175f0,0a3325a1-21c4-4997-882f-4ac2edc175f0,0,1,71102d3f-f020-4d6f-9582-9a7eefb4e797,71102d3f-f020-4d6f-9582-9a7eefb4e797,0,1,53ef6849-a3f3-4171-9167-f349f2d6a736,53ef6849-a3f3-4171-9167-f349f2d6a736,0,1,3f588bd3-d461-42b7-8ab1-386af6399d56,3f588bd3-d461-42b7-8ab1-386af6399d56,0,1,c04ff85e-b4af-4a9f-b0e9-c5c65e3d10a1,c04ff85e-b4af-4a9f-b0e9-c5c65e3d10a1,0,1,f0620d5a-e1fe-419f-af37-e0f462f97e8d,f0620d5a-e1fe-419f-af37-e0f462f97e8d,0,1,3e2f2ae1-c809-43fc-8276-b0a16a92858c,3e2f2ae1-c809-43fc-8276-b0a16a92858c,0,1,b58942ca-1367-4e1d-b5b4-7d973d0fecd8,b58942ca-1367-4e1d-b5b4-7d973d0fecd8,0,1,1a7c7427-bead-4655-9dd6-df6e722663c5,1a7c7427-bead-4655-9dd6-df6e722663c5,0,1,3ad08f4a-6202-4099-b6cc-bc116e6731a0,3ad08f4a-6202-4099-b6cc-bc116e6731a0,0,1,fd96c8ab-602a-4735-b168-52b501e80351,fd96c8ab-602a-4735-b168-52b501e80351,0,1,b1dc619d-8d91-4f7a-aa50-1d07ff9aebdc,b1dc619d-8d91-4f7a-aa50-1d07ff9aebdc,0,1,370f0c75-d2c5-4be5-a633-4bcc77998ece,370f0c75-d2c5-4be5-a633-4bcc77998ece,0,1,f80b505f-b4ff-45fb-bd88-74b274ae9d2b,f80b505f-b4ff-45fb-bd88-74b274ae9d2b,0,1,2139532c-f6cb-4393-936e-cc912e5adca9,2139532c-f6cb-4393-936e-cc912e5adca9,0,1,755c3eca-4956-4a44-9b38-c11dae00b87f,755c3eca-4956-4a44-9b38-c11dae00b87f,0,1,f57c558c-2c94-4b9d-8697-448d0548ab1a,f57c558c-2c94-4b9d-8697-448d0548ab1a,0,1,a310c09f-4d3a-4d3a-9ad5-7a5735a33a1d,a310c09f-4d3a-4d3a-9ad5-7a5735a33a1d,0,1,c32db021-eca1-4b67-aa85-3d6e28c51b53,c32db021-eca1-4b67-aa85-3d6e28c51b53,0,1,e9ed0ee4-3fbe-4093-9078-cb265ed6842c,e9ed0ee4-3fbe-4093-9078-cb265ed6842c,0,1,02466dcf-02a1-4853-814f-a913a9baba45,02466dcf-02a1-4853-814f-a913a9baba45,0,1,c4a40dc9-b619-4219-9d9a-e11f49a14fb1,c4a40dc9-b619-4219-9d9a-e11f49a14fb1,0,1,62b75eb2-42e1-4484-a77f-b676dd36f3d4,62b75eb2-42e1-4484-a77f-b676dd36f3d4,0,1,5e28e22a-dd6e-4703-92bd-13f5cb0dc023,5e28e22a-dd6e-4703-92bd-13f5cb0dc023,0,1,856510ee-74f5-44e9-a3c0-1c60cfb7a787,856510ee-74f5-44e9-a3c0-1c60cfb7a787,0,1,28b761c6-c286-4125-a4ed-da602e49950f,28b761c6-c286-4125-a4ed-da602e49950f,0,1,4ac66a22-c736-4e06-a8aa-ef4a71788c65,4ac66a22-c736-4e06-a8aa-ef4a71788c65,0,1,9cfe9281-8840-4077-824d-a2c9cbb0b730,9cfe9281-8840-4077-824d-a2c9cbb0b730,0,1,76389fa9-b9e0-492e-9c93-24b5f3bf094c,76389fa9-b9e0-492e-9c93-24b5f3bf094c,0,1,23e3de37-9315-45e6-bbfd-60aae28c25ae,23e3de37-9315-45e6-bbfd-60aae28c25ae,0,1,a9957f43-8b6f-4d98-a2d8-77b78047494c,a9957f43-8b6f-4d98-a2d8-77b78047494c,0,1,e470e15d-1b06-43cb-a9f9-ba489e2f596f,e470e15d-1b06-43cb-a9f9-ba489e2f596f,0,1,0408002c-9255-43a2-8022-82f02ee0e8f4,0408002c-9255-43a2-8022-82f02ee0e8f4,0,1,88f44c9b-216d-4d7e-bc88-1e6b253ed01e,88f44c9b-216d-4d7e-bc88-1e6b253ed01e,0,1,1851afd4-5324-45c1-b754-54e65943f945,1851afd4-5324-45c1-b754-54e65943f945,0,1,bc5eca9b-32d8-44e0-a127-8ad1f47d7957,bc5eca9b-32d8-44e0-a127-8ad1f47d7957,0,1,6e5307ea-8fbf-4177-bcc8-f163a6ce1b40,6e5307ea-8fbf-4177-bcc8-f163a6ce1b40,0,1,0fa77ef7-a836-4459-9bca-6010d0bdfc7f,0fa77ef7-a836-4459-9bca-6010d0bdfc7f,0,1,c322dc4a-30f3-4d23-9824-4a01c496408d,c322dc4a-30f3-4d23-9824-4a01c496408d,0,1,dcff004c-1b61-4a19-b977-ea21bf688614,dcff004c-1b61-4a19-b977-ea21bf688614,0,0,0,1,0,0,0,1,0,1,0,1,1,1,1} \ No newline at end of file +{6,1,1,315d7dbf-008c-46ac-bc11-c32ef9ea7a44,1,38a1a3b6-a753-48ca-b03b-f99e4453c6f0,"2.3.1.88","Фирма ""1С""","БиблиотекаСтандартныхПодсистем",5079,1,0,1c4b2fec-0149-4c93-94e0-5bada52028a8,1c4b2fec-0149-4c93-94e0-5bada52028a8,0,1,db4a9ccb-9ef5-4b3c-8577-b6fe5db1b62e,db4a9ccb-9ef5-4b3c-8577-b6fe5db1b62e,0,1,9233322b-dfdb-4c66-91fe-1299292d40a5,9233322b-dfdb-4c66-91fe-1299292d40a5,0,1,0421b67e-ed26-491d-ab98-ec59002ed4ce,0421b67e-ed26-491d-ab98-ec59002ed4ce,0,1,bb47ced2-31f9-4870-8633-20b986e53ccc,bb47ced2-31f9-4870-8633-20b986e53ccc,0,1,7d8acec9-f5a9-411e-921c-446ed0dd3332,7d8acec9-f5a9-411e-921c-446ed0dd3332,0,1,739c01a9-1125-45ef-ab4e-8c73af4eeff0,739c01a9-1125-45ef-ab4e-8c73af4eeff0,0,1,cdbd26b1-9583-46e8-adf7-8cc705639892,cdbd26b1-9583-46e8-adf7-8cc705639892,0,1,c0e38c3e-7088-4e35-9d84-2d0ab9655402,c0e38c3e-7088-4e35-9d84-2d0ab9655402,0,1,1098786f-dd24-4cce-b212-be0cb5f01735,1098786f-dd24-4cce-b212-be0cb5f01735,0,1,3c0037f3-4422-4836-b116-8c72e32bdd55,3c0037f3-4422-4836-b116-8c72e32bdd55,0,1,6f7c6c31-206b-4010-bdad-1ad2e304f154,6f7c6c31-206b-4010-bdad-1ad2e304f154,0,1,a8659e53-8c6b-4b0c-9736-fe93a91e4d69,a8659e53-8c6b-4b0c-9736-fe93a91e4d69,0,1,fe9a1d1a-19c0-499f-8e1b-09cadabe882f,fe9a1d1a-19c0-499f-8e1b-09cadabe882f,0,1,b4629308-42de-4ce8-8591-cf0c2399a9a2,b4629308-42de-4ce8-8591-cf0c2399a9a2,0,1,c7e984ae-1dbb-4041-b18a-bfd0d63a002f,c7e984ae-1dbb-4041-b18a-bfd0d63a002f,0,1,bb0424b8-dfd1-4a27-bd66-9dea3ffc77c4,bb0424b8-dfd1-4a27-bd66-9dea3ffc77c4,0,1,a4ac0a50-ee39-4dc1-b84f-eec8fe485f03,a4ac0a50-ee39-4dc1-b84f-eec8fe485f03,0,1,1861ee4f-fd8c-4afa-8441-c074bf51f67e,1861ee4f-fd8c-4afa-8441-c074bf51f67e,0,1,de7ed8f7-3c02-47e0-aea8-4747ac68a5d5,de7ed8f7-3c02-47e0-aea8-4747ac68a5d5,0,1,b93b8760-6200-40ee-8bdc-875ba80a6155,b93b8760-6200-40ee-8bdc-875ba80a6155,0,1,e8b248d9-9049-456a-9c7d-7a0462cc67ab,e8b248d9-9049-456a-9c7d-7a0462cc67ab,0,1,d4562287-440d-4462-9de2-7097ccbf3764,d4562287-440d-4462-9de2-7097ccbf3764,0,1,bf9ca98c-5c95-4cfb-9181-8c1d847f9fbb,bf9ca98c-5c95-4cfb-9181-8c1d847f9fbb,0,1,ec797c75-02c5-4cf5-9dd4-26cd46c99519,ec797c75-02c5-4cf5-9dd4-26cd46c99519,0,1,6fccdf59-fc99-4a2b-a144-fffe438a147c,6fccdf59-fc99-4a2b-a144-fffe438a147c,0,1,af8bd73a-d8e8-487d-8f36-d835ab10ea3a,af8bd73a-d8e8-487d-8f36-d835ab10ea3a,0,1,da9b32e6-5b93-45a6-84b2-238d57541e18,da9b32e6-5b93-45a6-84b2-238d57541e18,0,1,e43d69c8-b284-47da-b236-611bc94a15b6,e43d69c8-b284-47da-b236-611bc94a15b6,0,1,31eeaa05-6c49-41fe-b840-1edbad4ccac7,31eeaa05-6c49-41fe-b840-1edbad4ccac7,0,1,842c8662-8f39-405e-9665-cbdabc116159,842c8662-8f39-405e-9665-cbdabc116159,0,1,fca4b033-02c4-4d61-9e51-87783c3cef1a,fca4b033-02c4-4d61-9e51-87783c3cef1a,0,1,396ef757-d7f6-411f-8c4c-1acb1106a009,396ef757-d7f6-411f-8c4c-1acb1106a009,0,1,cb8da2f3-f8bb-4736-8381-7c153670e3e2,cb8da2f3-f8bb-4736-8381-7c153670e3e2,0,1,9aecf4f5-46ed-4d1c-a584-cd028e467895,9aecf4f5-46ed-4d1c-a584-cd028e467895,0,1,a1c379be-43d3-4e02-83bb-d2e7de2d4ae3,a1c379be-43d3-4e02-83bb-d2e7de2d4ae3,0,1,a1f10624-22e9-4a04-b370-fd085bdd0f67,a1f10624-22e9-4a04-b370-fd085bdd0f67,0,1,3cffb795-2a28-4beb-92f4-5813f5994022,3cffb795-2a28-4beb-92f4-5813f5994022,0,1,3323ca68-1382-4710-a933-23fc56588935,3323ca68-1382-4710-a933-23fc56588935,0,1,d6b12775-3255-42b8-88b2-62684f873e7d,d6b12775-3255-42b8-88b2-62684f873e7d,0,1,cc23d903-ccc5-42f4-862f-5e7278c4e346,cc23d903-ccc5-42f4-862f-5e7278c4e346,0,1,98f033e0-fa40-46e0-b51a-87a066749a35,98f033e0-fa40-46e0-b51a-87a066749a35,0,1,c53df2d1-4564-47a7-b66e-6a23ba28270e,c53df2d1-4564-47a7-b66e-6a23ba28270e,0,1,e8b4cb2d-1180-4101-954a-4cb5464f198c,e8b4cb2d-1180-4101-954a-4cb5464f198c,0,1,f765c4ba-c677-42ac-8d0c-43bb485405b9,f765c4ba-c677-42ac-8d0c-43bb485405b9,0,1,83192b3e-e7a9-4595-8887-24cda84457a9,83192b3e-e7a9-4595-8887-24cda84457a9,0,1,2fd1287d-d96d-4480-baf7-8815ae5ffbfb,2fd1287d-d96d-4480-baf7-8815ae5ffbfb,0,1,c8a4c5da-bc88-4f6e-9787-1c22c2f41be7,c8a4c5da-bc88-4f6e-9787-1c22c2f41be7,0,1,08eeb8f1-944f-4450-83f6-ef20aaab7d86,08eeb8f1-944f-4450-83f6-ef20aaab7d86,0,1,8d77dd4a-e646-4105-8dcf-8ce8fc3da0b4,8d77dd4a-e646-4105-8dcf-8ce8fc3da0b4,0,1,2fd12dba-5311-4f31-949c-f6b15decc0cc,2fd12dba-5311-4f31-949c-f6b15decc0cc,0,1,d7cf3981-cf63-4a21-868b-8175a7704a8f,d7cf3981-cf63-4a21-868b-8175a7704a8f,0,1,35895e12-52b6-49a1-acdf-6d828a948af0,35895e12-52b6-49a1-acdf-6d828a948af0,0,1,0ae93712-74e8-41c7-8f2d-4dfc8983697d,0ae93712-74e8-41c7-8f2d-4dfc8983697d,0,1,060b6f18-538c-4ea1-9748-00efe0b1ab57,060b6f18-538c-4ea1-9748-00efe0b1ab57,0,1,307b6821-fd82-4a1c-9fdb-a26293d4f713,307b6821-fd82-4a1c-9fdb-a26293d4f713,0,1,a952960b-be1b-4ec4-bd76-80915065a60b,a952960b-be1b-4ec4-bd76-80915065a60b,0,1,64f548c8-c1fc-434e-b3ee-5be367ead1db,64f548c8-c1fc-434e-b3ee-5be367ead1db,0,1,9e4dfdfa-ec05-4c9e-89bd-fc24f60f2678,9e4dfdfa-ec05-4c9e-89bd-fc24f60f2678,0,1,ede5b7c8-42cd-4f79-90d2-b518e96d6b26,ede5b7c8-42cd-4f79-90d2-b518e96d6b26,0,1,cd592a5d-b184-4558-8a28-7079ccf28b89,cd592a5d-b184-4558-8a28-7079ccf28b89,0,1,2009c673-c1a5-45fc-8da2-a36c435085a6,2009c673-c1a5-45fc-8da2-a36c435085a6,0,1,ab7e5f9a-1dfe-4165-a540-21f45ae1d94d,ab7e5f9a-1dfe-4165-a540-21f45ae1d94d,0,1,5d16e042-3889-4851-86f1-bc43bf06ee88,5d16e042-3889-4851-86f1-bc43bf06ee88,0,1,e5a0e7c2-6186-43a3-a1c5-1f16990602a4,e5a0e7c2-6186-43a3-a1c5-1f16990602a4,0,1,3d47838b-e1aa-4acb-96bf-6de2f9be8bdb,3d47838b-e1aa-4acb-96bf-6de2f9be8bdb,0,1,e39ecc8a-ce81-483d-85de-b0488c8b7749,e39ecc8a-ce81-483d-85de-b0488c8b7749,0,1,8f3b124f-bf85-4307-8f0c-47be1fb5c8b0,8f3b124f-bf85-4307-8f0c-47be1fb5c8b0,0,1,e15c3525-3453-4b62-834e-7c69f9efea51,e15c3525-3453-4b62-834e-7c69f9efea51,0,1,1514eaff-faea-4d82-9465-d0d5292bb31d,1514eaff-faea-4d82-9465-d0d5292bb31d,0,1,6d39c6df-8cd4-47ad-9125-252b37d94575,6d39c6df-8cd4-47ad-9125-252b37d94575,0,1,739bd762-01fc-41a8-87df-844eb201962f,739bd762-01fc-41a8-87df-844eb201962f,0,1,ad7c6165-2e44-4808-a77a-526882cf5dea,ad7c6165-2e44-4808-a77a-526882cf5dea,0,1,ad73f3a3-1dad-4920-af41-bda2b947a2f7,ad73f3a3-1dad-4920-af41-bda2b947a2f7,0,1,b7e435a9-6107-4d02-a949-cff793462e31,b7e435a9-6107-4d02-a949-cff793462e31,0,1,f0cda8f5-56f5-423b-8c1c-7113433ebf25,f0cda8f5-56f5-423b-8c1c-7113433ebf25,0,1,1a220e88-428b-4d85-926d-e572bf19997c,1a220e88-428b-4d85-926d-e572bf19997c,0,1,ca0d938b-244e-421f-9fa4-320784b9f416,ca0d938b-244e-421f-9fa4-320784b9f416,0,1,a108b11d-a489-4684-84ea-d5377c7394de,a108b11d-a489-4684-84ea-d5377c7394de,0,1,289a2d84-2477-4177-a6ef-507e2cadeea2,289a2d84-2477-4177-a6ef-507e2cadeea2,0,1,757b547b-b79c-459a-a64a-eef19a09a38f,757b547b-b79c-459a-a64a-eef19a09a38f,0,1,61cd6eab-6bab-4382-986e-4c7fc44f369b,61cd6eab-6bab-4382-986e-4c7fc44f369b,0,1,950f8fd5-fefa-4bfb-97a0-38d77ae830dc,950f8fd5-fefa-4bfb-97a0-38d77ae830dc,0,1,cbbe7903-842c-470e-a2d6-7928df8f13e9,cbbe7903-842c-470e-a2d6-7928df8f13e9,0,1,e02597c4-bf45-4bb6-931d-62d2244f6c58,e02597c4-bf45-4bb6-931d-62d2244f6c58,0,1,42544966-445d-41b8-b6a0-a52c64758232,42544966-445d-41b8-b6a0-a52c64758232,0,1,a92d8a5c-b595-4c6c-9f1d-5e85b1c996b4,a92d8a5c-b595-4c6c-9f1d-5e85b1c996b4,0,1,bd68dd13-66bb-40ed-8f4b-0767b7063ffd,bd68dd13-66bb-40ed-8f4b-0767b7063ffd,0,1,9eea8645-1ba7-4faf-9c29-868bf99964dd,9eea8645-1ba7-4faf-9c29-868bf99964dd,0,1,e07ac651-07b9-4664-95e8-f3f5a51ea6c8,e07ac651-07b9-4664-95e8-f3f5a51ea6c8,0,1,0c44fdea-7b81-45be-87f5-d64456a9d379,0c44fdea-7b81-45be-87f5-d64456a9d379,0,1,d09d6f21-cdd0-485e-bd2c-92092a1aefef,d09d6f21-cdd0-485e-bd2c-92092a1aefef,0,1,2fc92784-d7b0-4209-ba06-e54bed2f160f,2fc92784-d7b0-4209-ba06-e54bed2f160f,0,1,e5b8ea5c-1d08-4f0a-a8f6-358b41e2e9f2,e5b8ea5c-1d08-4f0a-a8f6-358b41e2e9f2,0,1,a4e4c91c-fd95-4369-98e3-51ffba79937b,a4e4c91c-fd95-4369-98e3-51ffba79937b,0,1,d343d4e4-d07f-48c3-9db1-774b0d6c1134,d343d4e4-d07f-48c3-9db1-774b0d6c1134,0,1,14ef2331-6d9b-4cf1-90f3-7d4ac410439d,14ef2331-6d9b-4cf1-90f3-7d4ac410439d,0,1,04ab13b1-ffc2-47f5-aa0d-5850dcbd4a62,04ab13b1-ffc2-47f5-aa0d-5850dcbd4a62,0,1,968588bb-ee60-4399-955a-3ec4228d3c40,968588bb-ee60-4399-955a-3ec4228d3c40,0,1,23dbb528-7ea8-44ae-a1f2-b7608118666e,23dbb528-7ea8-44ae-a1f2-b7608118666e,0,1,b9627855-6773-4a59-b7d3-f9e2e565cd9e,b9627855-6773-4a59-b7d3-f9e2e565cd9e,0,1,ad87bd29-0ad1-4da4-ac62-38e714e0cb9f,ad87bd29-0ad1-4da4-ac62-38e714e0cb9f,0,1,283ce432-3553-4de9-94a2-ca9a590437f5,283ce432-3553-4de9-94a2-ca9a590437f5,0,1,0da019ca-1fc7-4aff-8998-3ddcccf10872,0da019ca-1fc7-4aff-8998-3ddcccf10872,0,1,7102d4fa-92f2-4fba-ad09-a33dbc71bef2,7102d4fa-92f2-4fba-ad09-a33dbc71bef2,0,1,34b0e268-497d-44d4-b822-84909d0685aa,34b0e268-497d-44d4-b822-84909d0685aa,0,1,8961a859-2203-4678-ae1f-63e2474a787a,8961a859-2203-4678-ae1f-63e2474a787a,0,1,fe63db47-3ece-4518-b6a2-0b6499f60a61,fe63db47-3ece-4518-b6a2-0b6499f60a61,0,1,654523be-93d9-4faa-9a35-ce2fede13820,654523be-93d9-4faa-9a35-ce2fede13820,0,1,671afc3e-7589-49d8-95a5-1cf195c3b2f8,671afc3e-7589-49d8-95a5-1cf195c3b2f8,0,1,47accdc7-8fa0-4996-9305-c42b6ca12df9,47accdc7-8fa0-4996-9305-c42b6ca12df9,0,1,5abc496c-5745-4220-9fdc-bac092717871,5abc496c-5745-4220-9fdc-bac092717871,0,1,256981be-18fd-4d92-91f3-6d55bbe2181b,256981be-18fd-4d92-91f3-6d55bbe2181b,0,1,d6bcf961-b863-486e-9a88-c237ae84f7c3,d6bcf961-b863-486e-9a88-c237ae84f7c3,0,1,1d75bfa4-5698-4cbc-98cb-591509fcfde8,1d75bfa4-5698-4cbc-98cb-591509fcfde8,0,1,26eb08f7-6c62-459f-b1f5-363cc40cae46,26eb08f7-6c62-459f-b1f5-363cc40cae46,0,1,cdbc7f5c-dbf9-49cd-a940-95b37bc7b734,cdbc7f5c-dbf9-49cd-a940-95b37bc7b734,0,1,7b802612-3034-4413-9ee8-60e94ebed6d6,7b802612-3034-4413-9ee8-60e94ebed6d6,0,1,59420cb5-d903-4e2c-a9e1-bc5494168daf,59420cb5-d903-4e2c-a9e1-bc5494168daf,0,1,42e39ef7-268f-4053-b4e5-4bceab17d3e4,42e39ef7-268f-4053-b4e5-4bceab17d3e4,0,1,7df36398-7752-4f51-9978-1bcb4bcdd062,7df36398-7752-4f51-9978-1bcb4bcdd062,0,1,9fd55b7f-209b-4b74-99d6-965b8f6f2df9,9fd55b7f-209b-4b74-99d6-965b8f6f2df9,0,1,f818fde9-1b06-4507-a69f-4dcb0ce8cd7a,f818fde9-1b06-4507-a69f-4dcb0ce8cd7a,0,1,a6690ef1-b16a-4d58-bc31-a8089b2c00d8,a6690ef1-b16a-4d58-bc31-a8089b2c00d8,0,1,fce03f58-7f68-4d7c-a999-687667c1f03d,fce03f58-7f68-4d7c-a999-687667c1f03d,0,1,316f94ec-81ed-4b5c-aa9d-98d2cfe1c641,316f94ec-81ed-4b5c-aa9d-98d2cfe1c641,0,1,f4885af5-6ed6-40e8-81a5-0e9537f943d7,f4885af5-6ed6-40e8-81a5-0e9537f943d7,0,1,87472d14-0d8c-4813-8a3e-2721bbb26811,87472d14-0d8c-4813-8a3e-2721bbb26811,0,1,44cf6d0a-0a5b-4ca1-b91e-af61f40fb825,44cf6d0a-0a5b-4ca1-b91e-af61f40fb825,0,1,dcdf2b25-b024-4a89-b2c4-0a2ee43ef623,dcdf2b25-b024-4a89-b2c4-0a2ee43ef623,0,1,9200527c-b6b9-4962-9440-10449583e1e3,9200527c-b6b9-4962-9440-10449583e1e3,0,1,e8faa1a9-807a-4916-b3c5-76ba2199754c,e8faa1a9-807a-4916-b3c5-76ba2199754c,0,1,99b5c632-61fe-41f5-ac00-ea530633bf28,99b5c632-61fe-41f5-ac00-ea530633bf28,0,1,a3c9c4e7-d36a-4db1-bd95-a50886c4be60,a3c9c4e7-d36a-4db1-bd95-a50886c4be60,0,1,4c53f94e-d7e8-457c-b337-59d3b3c5bf24,4c53f94e-d7e8-457c-b337-59d3b3c5bf24,0,1,bd6d7dcd-421c-402e-b6b8-f6ce6b18c140,bd6d7dcd-421c-402e-b6b8-f6ce6b18c140,0,1,485911f7-a964-450d-82da-cab020836eb2,485911f7-a964-450d-82da-cab020836eb2,0,1,484003f5-a6df-48fb-a395-d0e0ebc8cc0d,484003f5-a6df-48fb-a395-d0e0ebc8cc0d,0,1,cedd0b47-07cb-4dae-86b5-31d396b693c7,cedd0b47-07cb-4dae-86b5-31d396b693c7,0,1,c08391e1-c4e3-42aa-8738-061031d0cb75,c08391e1-c4e3-42aa-8738-061031d0cb75,0,1,bf4c6723-e586-4643-9f03-9e672afea26f,bf4c6723-e586-4643-9f03-9e672afea26f,0,1,4c3a39e3-40ee-423b-91f0-14b60e045b40,4c3a39e3-40ee-423b-91f0-14b60e045b40,0,1,23204b0b-bf77-4f7c-9945-e73ad924ebb4,23204b0b-bf77-4f7c-9945-e73ad924ebb4,0,1,dd9d3586-775b-4d5b-ab2d-78db0870ecdd,dd9d3586-775b-4d5b-ab2d-78db0870ecdd,0,1,44c610c3-9c0b-4bf0-95d6-f17100d3e98d,44c610c3-9c0b-4bf0-95d6-f17100d3e98d,0,1,a54f2d41-a05e-4878-80c6-81ca2899fa4c,a54f2d41-a05e-4878-80c6-81ca2899fa4c,0,1,23a898d9-5bcb-4744-ab6c-97b17dc98f20,23a898d9-5bcb-4744-ab6c-97b17dc98f20,0,1,50a04251-ac9c-4a21-a37f-ebc9ac3ef233,50a04251-ac9c-4a21-a37f-ebc9ac3ef233,0,1,f8f56806-ed7e-4059-a0c8-940538c14c98,f8f56806-ed7e-4059-a0c8-940538c14c98,0,1,9ff9f92b-c509-48da-82ce-15b524a895d6,9ff9f92b-c509-48da-82ce-15b524a895d6,0,1,c8bf96c8-f359-4940-8e87-3d190371d6d3,c8bf96c8-f359-4940-8e87-3d190371d6d3,0,1,477f0b81-0eb1-4de1-8cb5-38f1e0823947,477f0b81-0eb1-4de1-8cb5-38f1e0823947,0,1,d914eaa9-ce85-4df7-a545-2d411ef915b0,d914eaa9-ce85-4df7-a545-2d411ef915b0,0,1,41881344-82b7-4904-9ab8-0207d9bcd0a9,41881344-82b7-4904-9ab8-0207d9bcd0a9,0,1,21032fa5-9426-40bd-91e4-ace1e4ceb013,21032fa5-9426-40bd-91e4-ace1e4ceb013,0,1,6338aed6-ee7a-48e8-afc3-9d0bf5166399,6338aed6-ee7a-48e8-afc3-9d0bf5166399,0,1,ddfe5401-e136-4f20-aa65-aeb42a61a1f0,ddfe5401-e136-4f20-aa65-aeb42a61a1f0,0,1,27a80757-c0fd-40c7-ad24-4c819c1ba72b,27a80757-c0fd-40c7-ad24-4c819c1ba72b,0,1,c573a29f-4c39-402d-8af4-e0fff80877f8,c573a29f-4c39-402d-8af4-e0fff80877f8,0,1,7fce9e49-e558-4760-9d95-dde6ac6c1e78,7fce9e49-e558-4760-9d95-dde6ac6c1e78,0,1,e5aba4a3-6056-4ef3-827c-d74283175393,e5aba4a3-6056-4ef3-827c-d74283175393,0,1,63039e62-7314-42ff-bdc6-c251f38b3827,63039e62-7314-42ff-bdc6-c251f38b3827,0,1,8a4b7aab-b602-4581-8fa4-fab66791f701,8a4b7aab-b602-4581-8fa4-fab66791f701,0,1,7c92c579-4651-4fe3-90dc-6c9b594b76f0,7c92c579-4651-4fe3-90dc-6c9b594b76f0,0,1,a2be2d7a-cca0-460f-a915-dadfb9cd588b,a2be2d7a-cca0-460f-a915-dadfb9cd588b,0,1,35bac3e3-1329-4aa6-866f-f6fcaed8cd6e,35bac3e3-1329-4aa6-866f-f6fcaed8cd6e,0,1,ed53b24d-5338-4ae1-8659-0ea6450dc7bb,ed53b24d-5338-4ae1-8659-0ea6450dc7bb,0,1,6add2712-48e8-4b22-a7bb-7d8c808ac5fc,6add2712-48e8-4b22-a7bb-7d8c808ac5fc,0,1,1f4408f5-460e-431b-9842-bc6875ccf0ae,1f4408f5-460e-431b-9842-bc6875ccf0ae,0,1,ec09aa2d-758f-4ae8-96b7-0f05b8187dda,ec09aa2d-758f-4ae8-96b7-0f05b8187dda,0,1,7bfc6163-a62f-45e8-9112-40a5d675ba4a,7bfc6163-a62f-45e8-9112-40a5d675ba4a,0,1,542ff510-0245-4a08-80ac-a9941c66ae93,542ff510-0245-4a08-80ac-a9941c66ae93,0,1,03297623-eaa2-4db0-bf1b-ce2076faf20a,03297623-eaa2-4db0-bf1b-ce2076faf20a,0,1,3c6ef64e-c9bd-4cba-98a4-ffcc5b93b6da,3c6ef64e-c9bd-4cba-98a4-ffcc5b93b6da,0,1,700c2edd-c457-47b7-a7d3-5fb3d9078d1f,700c2edd-c457-47b7-a7d3-5fb3d9078d1f,0,1,82a3802c-b6d6-4511-bd8b-eeec003afa33,82a3802c-b6d6-4511-bd8b-eeec003afa33,0,1,8b59dec8-12b8-455f-8dfc-7c3f03b4ffa5,8b59dec8-12b8-455f-8dfc-7c3f03b4ffa5,0,1,b5eb2e12-c39c-44fa-b940-09b4dcd2817c,b5eb2e12-c39c-44fa-b940-09b4dcd2817c,0,1,5d5ffb56-e18b-4831-94f0-d7a76c2eee6f,5d5ffb56-e18b-4831-94f0-d7a76c2eee6f,0,1,590f29f4-2db1-47c6-83a0-f44d4bbe6e3e,590f29f4-2db1-47c6-83a0-f44d4bbe6e3e,0,1,a755cb43-492d-4069-9b6a-29b92ebb5b0e,a755cb43-492d-4069-9b6a-29b92ebb5b0e,0,1,86d09107-f511-4148-b5d9-d97e92addfde,86d09107-f511-4148-b5d9-d97e92addfde,0,1,c14c1f91-f4b9-44d6-b560-8dcdb5faf5f9,c14c1f91-f4b9-44d6-b560-8dcdb5faf5f9,0,1,55b78834-3d90-4858-a6f7-e0368b1d8c41,55b78834-3d90-4858-a6f7-e0368b1d8c41,0,1,059b9a75-f53a-4518-a48a-afc72ab9ee36,059b9a75-f53a-4518-a48a-afc72ab9ee36,0,1,bc0dcb68-bfb8-49f4-8eb4-2ca953d852bd,bc0dcb68-bfb8-49f4-8eb4-2ca953d852bd,0,1,31e95872-97c7-49e3-bd1b-8df4de07014d,31e95872-97c7-49e3-bd1b-8df4de07014d,0,1,9fc7e672-6c80-418a-a973-937a4a172a2b,9fc7e672-6c80-418a-a973-937a4a172a2b,0,1,8b9be02b-cd1f-4231-a895-6c9be26348c2,8b9be02b-cd1f-4231-a895-6c9be26348c2,0,1,c52c4b8c-6be7-460a-9b54-6cdf64e3f8fe,c52c4b8c-6be7-460a-9b54-6cdf64e3f8fe,0,1,64e03321-33a4-424d-a101-90f1e0da4c2e,64e03321-33a4-424d-a101-90f1e0da4c2e,0,1,fa4f0b33-5253-4a5f-8121-feae3e1968a6,fa4f0b33-5253-4a5f-8121-feae3e1968a6,0,1,e0d21be2-91dc-4a04-9078-49420ddddcd5,e0d21be2-91dc-4a04-9078-49420ddddcd5,0,1,56c97764-7dba-42e0-8ba0-82712aca20e9,56c97764-7dba-42e0-8ba0-82712aca20e9,0,1,03ad9b3d-8f3a-4482-a777-f6a3b3d953d6,03ad9b3d-8f3a-4482-a777-f6a3b3d953d6,0,1,3f05dcf9-be52-42e1-b5ff-dea14d97a26f,3f05dcf9-be52-42e1-b5ff-dea14d97a26f,0,1,ea868745-71fc-483c-aa6e-f242c06c673f,ea868745-71fc-483c-aa6e-f242c06c673f,0,1,7f3c6269-ea41-492f-87b7-7eaaf712762e,7f3c6269-ea41-492f-87b7-7eaaf712762e,0,1,a5d037b0-c666-4179-9d6a-5f48c4a126a8,a5d037b0-c666-4179-9d6a-5f48c4a126a8,0,1,f0850411-4dee-4f1d-baec-7d6c96b10637,f0850411-4dee-4f1d-baec-7d6c96b10637,0,1,12f95031-b81f-4802-b2f3-6f70def90db0,12f95031-b81f-4802-b2f3-6f70def90db0,0,1,5732112a-f31d-41cd-9a7f-312a27395502,5732112a-f31d-41cd-9a7f-312a27395502,0,1,bbf8342b-24f0-4d11-bb5a-4c89d5ea7766,bbf8342b-24f0-4d11-bb5a-4c89d5ea7766,0,1,06fc381d-f27a-433c-95c3-e0981e01f22b,06fc381d-f27a-433c-95c3-e0981e01f22b,0,1,f646835e-61eb-4ebd-811e-dac5e70bd1b4,f646835e-61eb-4ebd-811e-dac5e70bd1b4,0,1,61b49c4c-3021-4868-834a-9137476ae169,61b49c4c-3021-4868-834a-9137476ae169,0,1,58911911-5192-45fe-87cf-c4a222a521a1,58911911-5192-45fe-87cf-c4a222a521a1,0,1,70067937-9f27-4442-b87b-6c4576ce1b78,70067937-9f27-4442-b87b-6c4576ce1b78,0,1,115d5d06-a2fc-453e-aab5-c869b6d5850b,115d5d06-a2fc-453e-aab5-c869b6d5850b,0,1,d33ca006-d81d-4ef8-8503-7878e81c599f,d33ca006-d81d-4ef8-8503-7878e81c599f,0,1,123bb339-b95e-44c3-b1e9-482dcaa6f297,123bb339-b95e-44c3-b1e9-482dcaa6f297,0,1,f4119605-beb3-46b6-b372-ecdb74f10a33,f4119605-beb3-46b6-b372-ecdb74f10a33,0,1,d2a2e332-a52c-4277-bd19-5ea8ef198469,d2a2e332-a52c-4277-bd19-5ea8ef198469,0,1,e440c594-14bb-4a6e-af53-a4519c7d5548,e440c594-14bb-4a6e-af53-a4519c7d5548,0,1,4165bdaa-8e27-40de-bcdc-0379c34e8868,4165bdaa-8e27-40de-bcdc-0379c34e8868,0,1,a9a3fde2-99d5-4ebf-88b1-eccd9d74276e,a9a3fde2-99d5-4ebf-88b1-eccd9d74276e,0,1,e606f8eb-952a-4abb-b1ae-4211204bed84,e606f8eb-952a-4abb-b1ae-4211204bed84,0,1,7ddc3d13-fa6f-4fa9-870e-a34d5b2d9582,7ddc3d13-fa6f-4fa9-870e-a34d5b2d9582,0,1,1c2ad932-150a-4b15-b958-62eaa8a1eebc,1c2ad932-150a-4b15-b958-62eaa8a1eebc,0,1,b4deaebf-2c21-47d7-9436-10c94c94667c,b4deaebf-2c21-47d7-9436-10c94c94667c,0,1,2a12ce95-3214-4bd2-a0e6-c2af41875821,2a12ce95-3214-4bd2-a0e6-c2af41875821,0,1,bf05548c-babf-402b-b698-9a62e7c69add,bf05548c-babf-402b-b698-9a62e7c69add,0,1,f8295f29-2533-4013-981b-240f017d9f7c,f8295f29-2533-4013-981b-240f017d9f7c,0,1,538b316b-3876-4da6-8b97-ad8ef59de17d,538b316b-3876-4da6-8b97-ad8ef59de17d,0,1,f70f09fd-59e1-47b6-aaf3-cb4cc4ceaa7e,f70f09fd-59e1-47b6-aaf3-cb4cc4ceaa7e,0,1,ebc5f182-482b-4dec-9961-ce3a448abd0e,ebc5f182-482b-4dec-9961-ce3a448abd0e,0,1,83e618f5-1bf4-474a-9d65-389f1e4b16c3,83e618f5-1bf4-474a-9d65-389f1e4b16c3,0,1,1357512e-3ed3-455d-bc91-81db3b92f9fe,1357512e-3ed3-455d-bc91-81db3b92f9fe,0,1,23d4aa7d-8a2c-4e18-9d5d-43a155de9bf0,23d4aa7d-8a2c-4e18-9d5d-43a155de9bf0,0,1,82223d0f-41d9-45a6-9612-ae4d8408fa1b,82223d0f-41d9-45a6-9612-ae4d8408fa1b,0,1,3ee058a9-aff5-46f0-8928-8a417e7800d4,3ee058a9-aff5-46f0-8928-8a417e7800d4,0,1,c9a03f19-42bb-4e07-8ce8-1b954e431ada,c9a03f19-42bb-4e07-8ce8-1b954e431ada,0,1,ed4edc6f-048a-40d5-8f61-989895c95cf3,ed4edc6f-048a-40d5-8f61-989895c95cf3,0,1,74e1bfac-18ea-48c2-b7e9-fd374a90a35d,74e1bfac-18ea-48c2-b7e9-fd374a90a35d,0,1,dc17d8b6-d277-43eb-8823-71d440ae1e90,dc17d8b6-d277-43eb-8823-71d440ae1e90,0,1,c5b8bf21-5c8f-4e5b-8b85-bfac387ce99a,c5b8bf21-5c8f-4e5b-8b85-bfac387ce99a,0,1,2465986e-7519-4638-9f62-5f692bebeeac,2465986e-7519-4638-9f62-5f692bebeeac,0,1,66e24df5-f443-47c0-b0ad-97d00d6761c7,66e24df5-f443-47c0-b0ad-97d00d6761c7,0,1,d9a6706e-3dcd-4aec-b9d1-542330ba6e2e,d9a6706e-3dcd-4aec-b9d1-542330ba6e2e,0,1,7cbf0398-2bc7-4f40-9a9e-af4135c6a2d2,7cbf0398-2bc7-4f40-9a9e-af4135c6a2d2,0,1,cc770616-f6f6-4054-876c-f319b1f8c6cf,cc770616-f6f6-4054-876c-f319b1f8c6cf,0,1,3baffdec-a2cb-48c9-9c21-4fc469e81e3b,3baffdec-a2cb-48c9-9c21-4fc469e81e3b,0,1,8486e623-1a54-4ad9-ab44-591b6a559bc3,8486e623-1a54-4ad9-ab44-591b6a559bc3,0,1,dce82d28-9a7b-4d4c-af13-90f459cf4af2,dce82d28-9a7b-4d4c-af13-90f459cf4af2,0,1,cb9f2231-49bb-4b14-a124-8996628afead,cb9f2231-49bb-4b14-a124-8996628afead,0,1,6fe9a455-7fef-4a1b-8109-57eafc17e2b6,6fe9a455-7fef-4a1b-8109-57eafc17e2b6,0,1,dc1b8bce-49c5-4fd2-a597-27f1fbc98648,dc1b8bce-49c5-4fd2-a597-27f1fbc98648,0,1,ac4c6275-3c23-4a1f-b19e-c674fd685e8f,ac4c6275-3c23-4a1f-b19e-c674fd685e8f,0,1,896de79f-3c34-4436-a4e2-4dd4f45c3e20,896de79f-3c34-4436-a4e2-4dd4f45c3e20,0,1,25d118f0-bfb7-4f08-84b1-0511b0fc92e8,25d118f0-bfb7-4f08-84b1-0511b0fc92e8,0,1,e6c42b5d-57fd-42ce-a968-653620e797f6,e6c42b5d-57fd-42ce-a968-653620e797f6,0,1,724fb328-fec6-4afe-bc99-0ff0951b184b,724fb328-fec6-4afe-bc99-0ff0951b184b,0,1,7a0cdc94-9e53-4fcc-ac2f-97ad2ad939f5,7a0cdc94-9e53-4fcc-ac2f-97ad2ad939f5,0,1,f6259a3b-98f5-4649-8fd0-da0a0285f375,f6259a3b-98f5-4649-8fd0-da0a0285f375,0,1,c565bf25-c55e-4324-851a-cec497f5114a,c565bf25-c55e-4324-851a-cec497f5114a,0,1,2997e4da-d831-48e4-96e2-c29f9d077302,2997e4da-d831-48e4-96e2-c29f9d077302,0,1,30f59002-a23d-4eff-b84f-f280f11b220e,30f59002-a23d-4eff-b84f-f280f11b220e,0,1,b50994d0-23f9-4bf4-93d2-cf9bcffa6fc9,b50994d0-23f9-4bf4-93d2-cf9bcffa6fc9,0,1,5b0e250c-4d2d-4e37-ade1-593854610d3f,5b0e250c-4d2d-4e37-ade1-593854610d3f,0,1,148f63d5-23ad-4824-a24c-14d5a54c62d3,148f63d5-23ad-4824-a24c-14d5a54c62d3,0,1,d6cdd049-b31b-48aa-a2aa-a24b0bdf3337,d6cdd049-b31b-48aa-a2aa-a24b0bdf3337,0,1,eabfa8b7-fb65-43dd-9308-787f7cce88c9,eabfa8b7-fb65-43dd-9308-787f7cce88c9,0,1,4bf12710-aef2-43ec-b16f-9c6c9e8eb18d,4bf12710-aef2-43ec-b16f-9c6c9e8eb18d,0,1,b1e837ff-0edd-4525-b2e2-92cc7990e00e,b1e837ff-0edd-4525-b2e2-92cc7990e00e,0,1,30213cef-b2bc-4e6c-8094-74a61f28b2ed,30213cef-b2bc-4e6c-8094-74a61f28b2ed,0,1,037fd2f3-27f1-4d8f-a621-82fa5754e8c7,037fd2f3-27f1-4d8f-a621-82fa5754e8c7,0,1,8c72f824-b667-4d74-84aa-30eccfbbd2f0,8c72f824-b667-4d74-84aa-30eccfbbd2f0,0,1,ceb286e9-4e7c-49fa-a695-424073e0dffc,ceb286e9-4e7c-49fa-a695-424073e0dffc,0,1,727689c3-c0d8-496f-a47b-4f3243ad8974,727689c3-c0d8-496f-a47b-4f3243ad8974,0,1,057aadbd-f41f-4de4-95f4-9301557e6a0e,057aadbd-f41f-4de4-95f4-9301557e6a0e,0,1,ec7b492d-5d38-4f31-90e0-577ad181514e,ec7b492d-5d38-4f31-90e0-577ad181514e,0,1,f0f9cf2c-bbf9-4511-a1ab-3941c15310eb,f0f9cf2c-bbf9-4511-a1ab-3941c15310eb,0,1,da0686ce-25e2-4d2c-b152-283f5e4cf4b1,da0686ce-25e2-4d2c-b152-283f5e4cf4b1,0,1,4807629d-8421-4bd9-beb4-5b2940197958,4807629d-8421-4bd9-beb4-5b2940197958,0,1,4bad7c64-131a-42cb-9be7-d61f14f456d0,4bad7c64-131a-42cb-9be7-d61f14f456d0,0,1,d46e141b-7a10-4d65-971f-3a35f2114017,d46e141b-7a10-4d65-971f-3a35f2114017,0,1,cd6f96c7-33ee-42b1-bb81-ce7d9652337c,cd6f96c7-33ee-42b1-bb81-ce7d9652337c,0,1,766c7fb5-727e-4975-9ea1-3b0df4739620,766c7fb5-727e-4975-9ea1-3b0df4739620,0,1,ba59393c-c499-4999-91d4-b9e34d94db0e,ba59393c-c499-4999-91d4-b9e34d94db0e,0,1,626da0dd-d75b-4779-be1f-9b71d2f2d4e1,626da0dd-d75b-4779-be1f-9b71d2f2d4e1,0,1,1d4b7f71-6c72-4f41-a2ed-1f2fe2122c04,1d4b7f71-6c72-4f41-a2ed-1f2fe2122c04,0,1,fcf6a4cd-d0c9-4f83-b9b0-514baed3ccb9,fcf6a4cd-d0c9-4f83-b9b0-514baed3ccb9,0,1,3f92cffe-b4ea-45e3-b2b9-a9e316405a8c,3f92cffe-b4ea-45e3-b2b9-a9e316405a8c,0,1,e70a6eab-791f-4c70-bb92-f069c7486d1b,e70a6eab-791f-4c70-bb92-f069c7486d1b,0,1,f74f97b7-4cbf-4124-b441-d8bb5d9b1634,f74f97b7-4cbf-4124-b441-d8bb5d9b1634,0,1,a3a9a48b-f241-45b2-b93b-d34bba0a8a66,a3a9a48b-f241-45b2-b93b-d34bba0a8a66,0,1,ba5574bd-53ca-413f-a245-272f468a80fb,ba5574bd-53ca-413f-a245-272f468a80fb,0,1,772e7011-0019-4edc-b673-b7151cf4fa6c,772e7011-0019-4edc-b673-b7151cf4fa6c,0,1,21ac47fa-12c2-43e2-9b57-afdf521d3485,21ac47fa-12c2-43e2-9b57-afdf521d3485,0,1,f58bffe7-4a02-4c4e-bfed-7895177a400c,f58bffe7-4a02-4c4e-bfed-7895177a400c,0,1,fe285122-2257-4fb2-ab7e-1683c31db1c6,fe285122-2257-4fb2-ab7e-1683c31db1c6,0,1,0facc6eb-a178-45ee-a6bc-4bf085d80453,0facc6eb-a178-45ee-a6bc-4bf085d80453,0,1,f74eef36-9441-4b6f-b21c-de9643832f9f,f74eef36-9441-4b6f-b21c-de9643832f9f,0,1,8d1c44d7-52f2-4089-9d77-2f03bf051455,8d1c44d7-52f2-4089-9d77-2f03bf051455,0,1,ac2e5217-aaeb-4b6f-b063-538c84f2da06,ac2e5217-aaeb-4b6f-b063-538c84f2da06,0,1,b5e73fbe-499c-4666-a482-0ef399c97c1e,b5e73fbe-499c-4666-a482-0ef399c97c1e,0,1,a0811e0a-91b6-4c4b-a6d2-a57b9185983b,a0811e0a-91b6-4c4b-a6d2-a57b9185983b,0,1,4ac77dea-3c2b-4566-8857-ba99f7b025c9,4ac77dea-3c2b-4566-8857-ba99f7b025c9,0,1,8e87da88-9fa8-4dd8-b904-622b763239f4,8e87da88-9fa8-4dd8-b904-622b763239f4,0,1,09fec67d-6e45-428c-b858-9ae20979676c,09fec67d-6e45-428c-b858-9ae20979676c,0,1,4875a235-bcc8-47eb-83e3-a66f0f690b97,4875a235-bcc8-47eb-83e3-a66f0f690b97,0,1,58ffc4d9-d711-4b68-905c-d2ac4f78b547,58ffc4d9-d711-4b68-905c-d2ac4f78b547,0,1,114ab2a1-f7c3-4453-a6cc-4c5a23c00cb5,114ab2a1-f7c3-4453-a6cc-4c5a23c00cb5,0,1,93c347d8-66cb-406c-9ee6-b1962482893f,93c347d8-66cb-406c-9ee6-b1962482893f,0,1,94ab750f-46b4-427c-a7f2-4e94fb9b0678,94ab750f-46b4-427c-a7f2-4e94fb9b0678,0,1,397d9926-31a3-4c03-acb7-74478f9863e1,397d9926-31a3-4c03-acb7-74478f9863e1,0,1,264dd12a-b4c5-44bf-b3c0-ef9225505f76,264dd12a-b4c5-44bf-b3c0-ef9225505f76,0,1,90b8fdf3-3e42-442f-a002-6a28ad0edc99,90b8fdf3-3e42-442f-a002-6a28ad0edc99,0,1,92f35bea-50b8-4a1c-8fb2-a8c7df7a50db,92f35bea-50b8-4a1c-8fb2-a8c7df7a50db,0,1,82ba8c13-6567-4f0c-be0e-0884ce19bbcc,82ba8c13-6567-4f0c-be0e-0884ce19bbcc,0,1,697bd1de-bbef-4362-aa39-71f6008f4bd7,697bd1de-bbef-4362-aa39-71f6008f4bd7,0,1,a3e9afe9-1587-47c7-8e7b-b8df6b3a2664,a3e9afe9-1587-47c7-8e7b-b8df6b3a2664,0,1,0e31d69a-8d2c-4ad0-b3ac-93ba5afcefdf,0e31d69a-8d2c-4ad0-b3ac-93ba5afcefdf,0,1,3de28e34-3c1e-4e7f-a720-3418c8c9c496,3de28e34-3c1e-4e7f-a720-3418c8c9c496,0,1,7f2d69b4-2f87-40f4-a78c-fe4cabc2a502,7f2d69b4-2f87-40f4-a78c-fe4cabc2a502,0,1,dacb236e-42a5-47e5-b239-ff18ae48e21e,dacb236e-42a5-47e5-b239-ff18ae48e21e,0,1,5cdb6e71-fd20-461a-83db-d59ccdb5b366,5cdb6e71-fd20-461a-83db-d59ccdb5b366,0,1,388b8576-9ba4-460f-b71b-3d644663656a,388b8576-9ba4-460f-b71b-3d644663656a,0,1,d4d38827-fce6-4c39-a4b4-51c7d7edc475,d4d38827-fce6-4c39-a4b4-51c7d7edc475,0,1,2d40609d-b56f-4082-9a6f-8216817ebd24,2d40609d-b56f-4082-9a6f-8216817ebd24,0,1,b238b4b2-beaf-4b5d-a728-8aebac3bacb5,b238b4b2-beaf-4b5d-a728-8aebac3bacb5,0,1,732b19c8-4f22-4748-a796-71538e46fc2f,732b19c8-4f22-4748-a796-71538e46fc2f,0,1,9fb2169b-fc77-4a3f-a1d8-b939079d9d9d,9fb2169b-fc77-4a3f-a1d8-b939079d9d9d,0,1,3fe0ef25-ce56-435d-b343-eadfec91a636,3fe0ef25-ce56-435d-b343-eadfec91a636,0,1,74f02619-7fa8-4c6d-81d6-230156ee45f4,74f02619-7fa8-4c6d-81d6-230156ee45f4,0,1,a103cca0-8243-40e9-bcdd-97a1cc8a3943,a103cca0-8243-40e9-bcdd-97a1cc8a3943,0,1,c3572d8d-46ff-40bb-800c-2c07f884c219,c3572d8d-46ff-40bb-800c-2c07f884c219,0,1,80fd89d7-160d-4528-9aa0-05b8dac64b4c,80fd89d7-160d-4528-9aa0-05b8dac64b4c,0,1,4eb24fcd-85f6-4fa6-bc9f-baef3861664e,4eb24fcd-85f6-4fa6-bc9f-baef3861664e,0,1,da551cf6-4f86-4e37-8967-a84c80e1fb13,da551cf6-4f86-4e37-8967-a84c80e1fb13,0,1,5fb2c120-fd14-4e78-a35f-c8e9478b3235,5fb2c120-fd14-4e78-a35f-c8e9478b3235,0,1,9d514ce1-f9bd-4018-8107-545cdd372fbd,9d514ce1-f9bd-4018-8107-545cdd372fbd,0,1,fe6b732f-3a33-460f-9686-cffdd5f7d99b,fe6b732f-3a33-460f-9686-cffdd5f7d99b,0,1,06250212-aeb1-4cb8-8785-ea71b1dad848,06250212-aeb1-4cb8-8785-ea71b1dad848,0,1,0c068a61-e5e6-4475-96fa-b7c1d825da42,0c068a61-e5e6-4475-96fa-b7c1d825da42,0,1,1047e34d-397a-42cc-80e6-1be755bd6462,1047e34d-397a-42cc-80e6-1be755bd6462,0,1,1cd473c3-4e36-47a9-b466-73d86ec244b0,1cd473c3-4e36-47a9-b466-73d86ec244b0,0,1,c3e31dfd-b79b-49b9-9dc0-e2439bfe5ab7,c3e31dfd-b79b-49b9-9dc0-e2439bfe5ab7,0,1,b406b5f9-eeaf-43a0-8930-067554d783c9,b406b5f9-eeaf-43a0-8930-067554d783c9,0,1,47718840-2939-4e30-a72c-a20c88ac4c17,47718840-2939-4e30-a72c-a20c88ac4c17,0,1,58a38994-9fe4-4783-967d-79d1141b90f3,58a38994-9fe4-4783-967d-79d1141b90f3,0,1,6e23a4b2-f53c-41ea-9fef-8f4561b8e0cc,6e23a4b2-f53c-41ea-9fef-8f4561b8e0cc,0,1,7c2e35a8-d05d-4e52-baee-a1e13585c502,7c2e35a8-d05d-4e52-baee-a1e13585c502,0,1,5d8b60e5-d407-4d8a-b4fb-e26a36ab8180,5d8b60e5-d407-4d8a-b4fb-e26a36ab8180,0,1,ab5b0155-a4b1-47a1-ad87-12365dde20c1,ab5b0155-a4b1-47a1-ad87-12365dde20c1,0,1,f551f78a-2f05-4932-ac33-cfa1b077f46f,f551f78a-2f05-4932-ac33-cfa1b077f46f,0,1,a96091a7-d3a5-4893-8440-f360231bf468,a96091a7-d3a5-4893-8440-f360231bf468,0,1,9ce6eef0-5280-4374-9714-474ac571e4e2,9ce6eef0-5280-4374-9714-474ac571e4e2,0,1,aeb54e92-a1d0-46a1-b4cb-87d3c29fa30b,aeb54e92-a1d0-46a1-b4cb-87d3c29fa30b,0,1,8395bfb2-3cf4-4bec-b19b-eb6dd3aa7a39,8395bfb2-3cf4-4bec-b19b-eb6dd3aa7a39,0,1,672c4741-6d7b-4d3e-baa7-389bef0625d7,672c4741-6d7b-4d3e-baa7-389bef0625d7,0,1,04398ec0-1c13-43f8-8f5d-7b7619592a4d,04398ec0-1c13-43f8-8f5d-7b7619592a4d,0,1,ce463861-92df-47f2-bd0f-4a2dbf72aacc,ce463861-92df-47f2-bd0f-4a2dbf72aacc,0,1,eca79a64-3d00-4178-b4eb-cf5468622c96,eca79a64-3d00-4178-b4eb-cf5468622c96,0,1,1487d68c-7a2f-48cf-8c80-4074072ed52c,1487d68c-7a2f-48cf-8c80-4074072ed52c,0,1,6ed8c74c-6b6e-4ed1-95ff-a733f618b213,6ed8c74c-6b6e-4ed1-95ff-a733f618b213,0,1,d97c6536-fd62-4c9a-b83e-490a29a0721b,d97c6536-fd62-4c9a-b83e-490a29a0721b,0,1,60cd8bc4-6a5d-4d36-83d0-76a8477eda6a,60cd8bc4-6a5d-4d36-83d0-76a8477eda6a,0,1,6dc4c216-e49f-4833-b45f-6060b67995ef,6dc4c216-e49f-4833-b45f-6060b67995ef,0,1,4655fa12-9169-4d08-bdab-9b3174d0b223,4655fa12-9169-4d08-bdab-9b3174d0b223,0,1,6c07ddfb-8823-4953-9905-9550b847dc3f,6c07ddfb-8823-4953-9905-9550b847dc3f,0,1,2362a8d5-dca2-4527-acc0-63782377f28a,2362a8d5-dca2-4527-acc0-63782377f28a,0,1,dfd6d85c-a734-4458-83b0-87b5949f9c68,dfd6d85c-a734-4458-83b0-87b5949f9c68,0,1,4e3b0b9f-45b7-48a8-86c6-cc14a921aa78,4e3b0b9f-45b7-48a8-86c6-cc14a921aa78,0,1,79b6ecf5-8a6b-44a4-9587-5f8764463228,79b6ecf5-8a6b-44a4-9587-5f8764463228,0,1,cd49148c-e385-4b75-a758-a93196e73dba,cd49148c-e385-4b75-a758-a93196e73dba,0,1,ece15c4e-4a4b-421b-9f00-10f698da476b,ece15c4e-4a4b-421b-9f00-10f698da476b,0,1,6cb136cd-dc5c-4d85-8a0d-70b9f8bf70d5,6cb136cd-dc5c-4d85-8a0d-70b9f8bf70d5,0,1,300ecdd6-144f-48c8-9fd4-6166f1de1047,300ecdd6-144f-48c8-9fd4-6166f1de1047,0,1,b6bbfb59-8249-47af-9394-be262f118811,b6bbfb59-8249-47af-9394-be262f118811,0,1,15dab650-f7ed-42bc-8ca3-c104c3e68ce4,15dab650-f7ed-42bc-8ca3-c104c3e68ce4,0,1,fb63d488-fb91-4d08-8f8c-f4836538216f,fb63d488-fb91-4d08-8f8c-f4836538216f,0,1,b8be6c09-6880-45d3-a2d1-06ad72d069c9,b8be6c09-6880-45d3-a2d1-06ad72d069c9,0,1,3c1b10c7-3667-43f0-ac03-8cdaa84cb177,3c1b10c7-3667-43f0-ac03-8cdaa84cb177,0,1,148dd521-8754-451b-803b-cbee7c3d3965,148dd521-8754-451b-803b-cbee7c3d3965,0,1,38bc48c7-3938-47be-be3f-844f19561301,38bc48c7-3938-47be-be3f-844f19561301,0,1,4bdd09d5-6bc9-421f-99f0-ae905340f0d4,4bdd09d5-6bc9-421f-99f0-ae905340f0d4,0,1,147038fb-6154-41f3-aad6-547db27d1e43,147038fb-6154-41f3-aad6-547db27d1e43,0,1,832fa9d3-deab-4c57-b6e2-dee5d24d6100,832fa9d3-deab-4c57-b6e2-dee5d24d6100,0,1,dd4270ef-6b4c-491e-8871-959dbec14c53,dd4270ef-6b4c-491e-8871-959dbec14c53,0,1,c2b115d3-04f8-43c8-aed9-c61280b8cc3b,c2b115d3-04f8-43c8-aed9-c61280b8cc3b,0,1,8ccd9be8-ef26-49b9-8cee-03ae4e500386,8ccd9be8-ef26-49b9-8cee-03ae4e500386,0,1,ddca925c-fdcd-40ce-a504-4fca1758de3f,ddca925c-fdcd-40ce-a504-4fca1758de3f,0,1,f64de21f-5a7c-4a1a-a929-07fc53049f6c,f64de21f-5a7c-4a1a-a929-07fc53049f6c,0,1,470cdf43-07f4-46d5-aab2-d41f1e5da3cd,470cdf43-07f4-46d5-aab2-d41f1e5da3cd,0,1,ea653eca-f96a-447d-8b09-7a7cb6929ed6,ea653eca-f96a-447d-8b09-7a7cb6929ed6,0,1,5efc4bc4-b711-4620-8d2e-9d947c6cc141,5efc4bc4-b711-4620-8d2e-9d947c6cc141,0,1,ede6a379-b0e5-4b8d-a454-779c0fd8b0b3,ede6a379-b0e5-4b8d-a454-779c0fd8b0b3,0,1,6de9dab4-ee34-4584-a2e7-7a29c86794b0,6de9dab4-ee34-4584-a2e7-7a29c86794b0,0,1,ae52e48c-20ec-43cd-a9a5-b1753558e1d2,ae52e48c-20ec-43cd-a9a5-b1753558e1d2,0,1,5e08154e-bd8b-4e61-8a6c-b5b500f12b99,5e08154e-bd8b-4e61-8a6c-b5b500f12b99,0,1,39af0f4c-0f0d-4e9a-aa63-d0eee3985b4e,39af0f4c-0f0d-4e9a-aa63-d0eee3985b4e,0,1,2b72fe1c-afe1-4905-8db2-2bb1baca6295,2b72fe1c-afe1-4905-8db2-2bb1baca6295,0,1,4bc4c6db-0ef8-405f-8875-b4cb1540aeb5,4bc4c6db-0ef8-405f-8875-b4cb1540aeb5,0,1,dbd8391c-a174-43d6-a8db-d9ab76b4edbe,dbd8391c-a174-43d6-a8db-d9ab76b4edbe,0,1,e9a2441e-faf9-4158-acc7-b1a6178ae0f3,e9a2441e-faf9-4158-acc7-b1a6178ae0f3,0,1,ce5f5470-b704-4f55-8dc8-17cf2c2b367a,ce5f5470-b704-4f55-8dc8-17cf2c2b367a,0,1,0072986b-0463-4a39-9851-f9adeda99716,0072986b-0463-4a39-9851-f9adeda99716,0,1,fa44433b-1c44-45a0-9487-47aa092442cf,fa44433b-1c44-45a0-9487-47aa092442cf,0,1,041cecfd-cef2-45d9-90e8-afe0d97d2d95,041cecfd-cef2-45d9-90e8-afe0d97d2d95,0,1,0d4a26fb-7176-43f2-8767-d3e227c7306a,0d4a26fb-7176-43f2-8767-d3e227c7306a,0,1,7e4222fd-fb98-4ae5-9d98-d41c3d572a0c,7e4222fd-fb98-4ae5-9d98-d41c3d572a0c,0,1,d9d14a24-c023-4b69-ad57-30d1474e1232,d9d14a24-c023-4b69-ad57-30d1474e1232,0,1,b292eb46-df87-43c0-9a37-93c5a22af252,b292eb46-df87-43c0-9a37-93c5a22af252,0,1,0943dd00-1653-4760-a9fe-ebc083ffa660,0943dd00-1653-4760-a9fe-ebc083ffa660,0,1,4fb8564e-2338-4c23-84a4-31f768047ced,4fb8564e-2338-4c23-84a4-31f768047ced,0,1,6179c7bf-08d6-4600-8cdc-ea6d4187bd55,6179c7bf-08d6-4600-8cdc-ea6d4187bd55,0,1,f93c9a7f-0249-421e-b3d0-55f02d130017,f93c9a7f-0249-421e-b3d0-55f02d130017,0,1,062c507a-9d35-4eb5-bb91-d106a535a503,062c507a-9d35-4eb5-bb91-d106a535a503,0,1,fd317d96-380e-4ee7-a25b-401e8521cc7a,fd317d96-380e-4ee7-a25b-401e8521cc7a,0,1,3b380a63-9232-42c2-bfa2-e8fc89448bbd,3b380a63-9232-42c2-bfa2-e8fc89448bbd,0,1,e18b4527-8727-4a10-9e99-a80012debe6c,e18b4527-8727-4a10-9e99-a80012debe6c,0,1,1ed910db-e434-4efd-9b12-c25353a31d5a,1ed910db-e434-4efd-9b12-c25353a31d5a,0,1,10556a26-ea4b-46b4-84d1-175eb13b333f,10556a26-ea4b-46b4-84d1-175eb13b333f,0,1,f1e600b0-55ed-4611-b147-f04d5621796b,f1e600b0-55ed-4611-b147-f04d5621796b,0,1,e3b84128-95e1-45df-84db-5e1791779543,e3b84128-95e1-45df-84db-5e1791779543,1,0,76702e9e-fa7a-4b98-befa-f9b37db2dae0,76702e9e-fa7a-4b98-befa-f9b37db2dae0,1,0,101a4eb3-cdda-47af-8c69-615a6920347a,101a4eb3-cdda-47af-8c69-615a6920347a,1,0,cf19f220-f6d4-4c9e-b5d5-9d94234f0a2c,cf19f220-f6d4-4c9e-b5d5-9d94234f0a2c,1,0,e9d95895-8708-4035-89ad-72573b870491,e9d95895-8708-4035-89ad-72573b870491,1,0,f410a5db-8698-44ca-9ff6-2c530e1f5c2a,f410a5db-8698-44ca-9ff6-2c530e1f5c2a,1,0,f79bada2-838f-4e4f-a017-935cf671a70c,f79bada2-838f-4e4f-a017-935cf671a70c,1,0,312118ff-a2a4-479c-964a-5250cca0cd20,312118ff-a2a4-479c-964a-5250cca0cd20,1,0,f8d32d21-ea2f-42bb-a785-9bd3cf754cd9,f8d32d21-ea2f-42bb-a785-9bd3cf754cd9,1,0,3f3a0b1b-04ce-47c1-928d-5e3483e9fd73,3f3a0b1b-04ce-47c1-928d-5e3483e9fd73,1,0,8a310493-c06f-46db-b2b5-14d6ed203312,8a310493-c06f-46db-b2b5-14d6ed203312,1,0,caf8f0e8-7a2c-498b-9b74-ed6b87cce670,caf8f0e8-7a2c-498b-9b74-ed6b87cce670,1,0,b68ec95b-64f3-4a2b-9683-231d50f01eeb,b68ec95b-64f3-4a2b-9683-231d50f01eeb,1,0,89318397-b3a6-4468-985b-ed5cb8ab5cdb,89318397-b3a6-4468-985b-ed5cb8ab5cdb,1,0,4a008342-f72f-4ca1-bad1-64b59b509911,4a008342-f72f-4ca1-bad1-64b59b509911,1,0,4436b2cf-2d71-401f-99fd-012ff0c91fbd,4436b2cf-2d71-401f-99fd-012ff0c91fbd,1,0,cefa1723-a4d4-44c4-bd57-ffa713f9306c,cefa1723-a4d4-44c4-bd57-ffa713f9306c,1,0,5396be45-d7c0-43df-aed4-cad062a02b11,5396be45-d7c0-43df-aed4-cad062a02b11,1,0,017e3da8-e48e-488b-9bbf-4fef1a4f3417,017e3da8-e48e-488b-9bbf-4fef1a4f3417,1,0,4920aabf-6f53-4f91-932a-8ace24631a74,4920aabf-6f53-4f91-932a-8ace24631a74,1,0,ce7a7f72-9d7d-4240-b852-e83b4b8d944b,ce7a7f72-9d7d-4240-b852-e83b4b8d944b,1,0,7309e58d-b0d4-4e0f-a74d-68cab03fea8e,7309e58d-b0d4-4e0f-a74d-68cab03fea8e,1,0,bbec9c3d-31dd-484e-ab32-41ef845f1370,bbec9c3d-31dd-484e-ab32-41ef845f1370,1,0,8692ba41-d91d-4af0-8aba-69dd5409d593,8692ba41-d91d-4af0-8aba-69dd5409d593,1,0,a95b564a-c895-40f2-b947-ea08462bb2a0,a95b564a-c895-40f2-b947-ea08462bb2a0,1,0,ca63ca2f-703d-4317-8c5d-0650ea638f3f,ca63ca2f-703d-4317-8c5d-0650ea638f3f,1,0,aa2256c7-9847-40a5-9e49-11c508e0d45b,aa2256c7-9847-40a5-9e49-11c508e0d45b,1,0,a04493f4-508c-4047-b0e3-b7d4bde6427b,a04493f4-508c-4047-b0e3-b7d4bde6427b,1,0,418982cd-d403-47cf-a7ef-993a36104947,418982cd-d403-47cf-a7ef-993a36104947,1,0,485ebc6a-0e3e-4278-8ef1-c6194d6d5015,485ebc6a-0e3e-4278-8ef1-c6194d6d5015,1,0,816c8143-8b02-4f4a-8eb1-44c7fb36afcc,816c8143-8b02-4f4a-8eb1-44c7fb36afcc,1,0,35eea3b8-d017-442a-b5a0-a1571165b9a9,35eea3b8-d017-442a-b5a0-a1571165b9a9,1,0,7e84901c-cb7f-437c-a135-0902cd47acb6,7e84901c-cb7f-437c-a135-0902cd47acb6,1,0,da2b47f5-4109-4f72-a4a5-70be24a6881f,da2b47f5-4109-4f72-a4a5-70be24a6881f,1,0,f0152598-ffa3-4eb7-811f-906e569373e6,f0152598-ffa3-4eb7-811f-906e569373e6,1,0,849f034e-85dc-4515-aae6-240c1e0d46d9,849f034e-85dc-4515-aae6-240c1e0d46d9,1,0,de4d37c9-b278-4c0c-bc10-1b63ecd72947,de4d37c9-b278-4c0c-bc10-1b63ecd72947,1,0,1c7e9baa-7728-4afd-829a-806cee13ecdb,1c7e9baa-7728-4afd-829a-806cee13ecdb,1,0,38b48750-1411-493b-b18e-42d39312aad8,38b48750-1411-493b-b18e-42d39312aad8,1,0,5d75aae8-9d9c-4a47-b8c0-2ce56431fe53,5d75aae8-9d9c-4a47-b8c0-2ce56431fe53,1,0,5a741cf6-8160-4409-9396-2e6d1e67e6fa,5a741cf6-8160-4409-9396-2e6d1e67e6fa,1,0,8242daae-181a-47df-b28e-c1de3fce0359,8242daae-181a-47df-b28e-c1de3fce0359,1,0,5fbea8c7-48e3-4ed0-a8d0-cf942b37a166,5fbea8c7-48e3-4ed0-a8d0-cf942b37a166,1,0,5cc3a29d-aa98-42bf-9800-f584229c8e46,5cc3a29d-aa98-42bf-9800-f584229c8e46,1,0,db82191f-77bd-44da-8b33-86f01018e25a,db82191f-77bd-44da-8b33-86f01018e25a,1,0,acfa1919-07ce-4464-8552-6b104e284dca,acfa1919-07ce-4464-8552-6b104e284dca,1,0,497ce8f3-f6f0-4da8-aeb0-0fa01bb26dc6,497ce8f3-f6f0-4da8-aeb0-0fa01bb26dc6,1,0,f4cff4ff-68e9-4072-971e-1b359d3aa980,f4cff4ff-68e9-4072-971e-1b359d3aa980,1,0,f9a5bd40-7c56-4ced-bddb-a66c1fc31b81,f9a5bd40-7c56-4ced-bddb-a66c1fc31b81,1,0,fdb012c9-583a-42af-95da-070e75a58078,fdb012c9-583a-42af-95da-070e75a58078,1,0,40a52f83-f0e2-470d-9c17-7fdc8cc646b7,40a52f83-f0e2-470d-9c17-7fdc8cc646b7,1,0,7d069b11-cddd-463d-97be-3cbeaaf0954c,7d069b11-cddd-463d-97be-3cbeaaf0954c,1,0,8c5fae4c-b5b6-4e05-9453-4ac5de07c54c,8c5fae4c-b5b6-4e05-9453-4ac5de07c54c,1,0,7531fb7c-a4ae-42df-b8e5-d8bfcb66be52,7531fb7c-a4ae-42df-b8e5-d8bfcb66be52,1,0,d1b950b0-dd66-49f9-998e-3ae5e820ae7f,d1b950b0-dd66-49f9-998e-3ae5e820ae7f,1,0,57e39881-cbf9-4cac-9ed0-bf4a6ea667ee,57e39881-cbf9-4cac-9ed0-bf4a6ea667ee,1,0,b9004626-915c-44c8-9cb7-25e5b627ee83,b9004626-915c-44c8-9cb7-25e5b627ee83,1,0,63c6cfad-124d-491a-829d-b298463c95e6,63c6cfad-124d-491a-829d-b298463c95e6,1,0,737404de-5b9d-4445-81c5-2c5b50b36846,737404de-5b9d-4445-81c5-2c5b50b36846,1,0,1c1a5bf8-bbe6-4a69-973e-11445175dac2,1c1a5bf8-bbe6-4a69-973e-11445175dac2,1,0,f11ffcfd-3588-4785-b222-cebe80455303,f11ffcfd-3588-4785-b222-cebe80455303,1,0,789a2027-8601-434c-bf47-37696a3966ad,789a2027-8601-434c-bf47-37696a3966ad,1,0,5d216c28-0724-4e7d-86cf-b6f75e7e28b7,5d216c28-0724-4e7d-86cf-b6f75e7e28b7,1,0,bfdc6346-db5b-427f-acca-9b48db8fefd0,bfdc6346-db5b-427f-acca-9b48db8fefd0,1,0,1c3f258c-345e-47f6-9e29-98b1222fb348,1c3f258c-345e-47f6-9e29-98b1222fb348,1,0,dfafcdf3-cdeb-4822-9f41-a730d9d3fb24,dfafcdf3-cdeb-4822-9f41-a730d9d3fb24,1,0,4c3085e1-2f86-4af4-a392-ab45e30a7152,4c3085e1-2f86-4af4-a392-ab45e30a7152,1,0,35c938f4-065f-47f5-a75b-637ed0080725,35c938f4-065f-47f5-a75b-637ed0080725,0,1,e14c0841-226c-4c79-bec9-cfc8d2c3a160,e14c0841-226c-4c79-bec9-cfc8d2c3a160,0,1,73e4bce2-df4a-4f60-a369-55f588a46bd1,73e4bce2-df4a-4f60-a369-55f588a46bd1,0,1,6f3c5b90-b030-4267-a973-33d12c2c7680,6f3c5b90-b030-4267-a973-33d12c2c7680,0,1,1ff8210b-26c5-4429-b580-7c6ec7c9b63a,1ff8210b-26c5-4429-b580-7c6ec7c9b63a,0,1,c6af8b0f-3767-4198-88e2-f5763cb0294a,c6af8b0f-3767-4198-88e2-f5763cb0294a,0,1,b107a4a8-0db8-44f4-93f7-9f231e850398,b107a4a8-0db8-44f4-93f7-9f231e850398,0,1,88b879b7-1bb3-4478-b569-35bdb5c56939,88b879b7-1bb3-4478-b569-35bdb5c56939,0,1,7a62d031-c340-4b1e-90af-fff697a2e979,7a62d031-c340-4b1e-90af-fff697a2e979,0,1,18bf6916-83cc-41e5-a35b-1489450ae632,18bf6916-83cc-41e5-a35b-1489450ae632,0,1,ebab97cf-5335-4648-9845-8ca41f79fb49,ebab97cf-5335-4648-9845-8ca41f79fb49,0,1,bb29fa44-6772-4426-a0b8-422115e14288,bb29fa44-6772-4426-a0b8-422115e14288,0,1,904e1209-91d8-49b1-b291-364ef728cbbf,904e1209-91d8-49b1-b291-364ef728cbbf,0,1,1198f2ee-b8a8-456d-9461-61bc5d42c7a1,1198f2ee-b8a8-456d-9461-61bc5d42c7a1,0,1,b8ecb7f0-ef40-4d31-9ec2-a731439d3200,b8ecb7f0-ef40-4d31-9ec2-a731439d3200,0,1,e4da2959-0fb0-48fb-a5aa-e7a5589d69c3,e4da2959-0fb0-48fb-a5aa-e7a5589d69c3,0,1,b5365cb6-a4e7-479b-82f4-f4ad80fcd7c9,b5365cb6-a4e7-479b-82f4-f4ad80fcd7c9,0,1,e51ae56c-d311-46b7-8d4c-19a432f4cd16,e51ae56c-d311-46b7-8d4c-19a432f4cd16,0,1,e000d04e-37eb-4d95-a833-b0a9b10ee0b9,e000d04e-37eb-4d95-a833-b0a9b10ee0b9,0,1,40d3ed07-3b56-4c9f-8b96-d94455202ef0,40d3ed07-3b56-4c9f-8b96-d94455202ef0,0,1,23314bcd-2dd4-43f1-9fdb-ae182a48c886,23314bcd-2dd4-43f1-9fdb-ae182a48c886,0,1,c5f86fa3-4a36-4e22-8b57-7088dd250cd3,c5f86fa3-4a36-4e22-8b57-7088dd250cd3,0,1,84282afa-21f5-40db-9386-e6f741c9a06c,84282afa-21f5-40db-9386-e6f741c9a06c,0,1,5b3b3da9-8619-4fbd-b140-3528875cd179,5b3b3da9-8619-4fbd-b140-3528875cd179,0,1,99e5e866-7ac6-4916-ab66-3e2909822c56,99e5e866-7ac6-4916-ab66-3e2909822c56,0,1,03363877-2752-4a03-95f2-d73b732e0bfd,03363877-2752-4a03-95f2-d73b732e0bfd,0,1,8d9d2284-e592-44c5-93bb-247037ab6b95,8d9d2284-e592-44c5-93bb-247037ab6b95,0,1,0b0d2b7c-d52e-4163-83cf-a7e86bb47c47,0b0d2b7c-d52e-4163-83cf-a7e86bb47c47,0,1,78051e10-74ab-44be-adca-e4c93824a386,78051e10-74ab-44be-adca-e4c93824a386,0,1,73629419-83d8-4727-88a9-76c851d104c9,73629419-83d8-4727-88a9-76c851d104c9,0,1,cadb54f0-dcff-4f96-983e-a309fd72f330,cadb54f0-dcff-4f96-983e-a309fd72f330,0,1,a9c3065b-db68-4f59-9235-33f9fbfdaafd,a9c3065b-db68-4f59-9235-33f9fbfdaafd,0,1,3715cf3d-0abc-4711-8ac9-d41f0be7878f,3715cf3d-0abc-4711-8ac9-d41f0be7878f,0,1,8e8d8078-8b32-4c24-b26e-89a92bf60160,8e8d8078-8b32-4c24-b26e-89a92bf60160,0,1,f96cbb27-7619-41e0-8577-e623ef02dc58,f96cbb27-7619-41e0-8577-e623ef02dc58,0,1,ed5ff5b0-f980-4b9a-9299-eef68e3b42d5,ed5ff5b0-f980-4b9a-9299-eef68e3b42d5,0,1,d74dfd31-2016-435b-8652-15fdbca59490,d74dfd31-2016-435b-8652-15fdbca59490,0,1,ba8111a9-1d33-4615-ad0b-b3e923b2f3bd,ba8111a9-1d33-4615-ad0b-b3e923b2f3bd,0,1,27651e0e-d560-434b-a49c-f473a5b20c4d,27651e0e-d560-434b-a49c-f473a5b20c4d,0,1,dab1491b-0685-442d-b945-2bfde3f37933,dab1491b-0685-442d-b945-2bfde3f37933,0,1,ce85554b-81ba-4149-a951-d09bdc14fa16,ce85554b-81ba-4149-a951-d09bdc14fa16,0,1,23a1ef35-1469-44ea-8535-fa9c7f535cae,23a1ef35-1469-44ea-8535-fa9c7f535cae,0,1,9ff1c73e-71be-4ea6-97fb-e710d995ee62,9ff1c73e-71be-4ea6-97fb-e710d995ee62,0,1,8c7d74bf-2865-47d9-8a16-5b0db1104a3a,8c7d74bf-2865-47d9-8a16-5b0db1104a3a,0,1,2558d812-ac0a-49ba-87db-3f661209a3c4,2558d812-ac0a-49ba-87db-3f661209a3c4,0,1,20d712ef-77c1-4374-92e1-f20a3ebc7eab,20d712ef-77c1-4374-92e1-f20a3ebc7eab,0,1,65d23ce8-e326-45ee-86b0-6dcf35797201,65d23ce8-e326-45ee-86b0-6dcf35797201,0,1,a2683c3f-1b21-47d8-951d-7d30cde51efc,a2683c3f-1b21-47d8-951d-7d30cde51efc,0,1,54c77053-1728-4914-a354-73fe8853a0e1,54c77053-1728-4914-a354-73fe8853a0e1,0,1,21136691-078f-4bf7-bddd-f41416a76d86,21136691-078f-4bf7-bddd-f41416a76d86,0,1,30a121c7-c4f5-45c4-9504-9778ed85d9e3,30a121c7-c4f5-45c4-9504-9778ed85d9e3,0,1,c68e2157-2541-4f80-966a-d68ce603f131,c68e2157-2541-4f80-966a-d68ce603f131,0,1,e5dfee58-f748-48ee-81a3-7c6133f06365,e5dfee58-f748-48ee-81a3-7c6133f06365,0,1,68500931-89e0-491e-aba8-b013c9e6f8c3,68500931-89e0-491e-aba8-b013c9e6f8c3,0,1,70b79e56-bb71-4f38-93cf-94dda79d9b4c,70b79e56-bb71-4f38-93cf-94dda79d9b4c,0,1,5c4c9931-3fb0-47a8-9e4f-d552de12b355,5c4c9931-3fb0-47a8-9e4f-d552de12b355,0,1,dc1d0f97-e2f3-4e1d-b21c-411b46e39848,dc1d0f97-e2f3-4e1d-b21c-411b46e39848,0,1,ef6ccd0d-73c6-4314-9912-efa7ff27c823,ef6ccd0d-73c6-4314-9912-efa7ff27c823,0,1,2a498baf-ec2e-4dda-b568-801bb60db225,2a498baf-ec2e-4dda-b568-801bb60db225,0,1,8a32af97-cdb5-46b4-ab7b-e1509e26ecc3,8a32af97-cdb5-46b4-ab7b-e1509e26ecc3,0,1,9f59f8cd-8d61-4fbc-ae6e-32f28ce0035a,9f59f8cd-8d61-4fbc-ae6e-32f28ce0035a,0,1,35989876-16b1-4b02-9381-444a06a7a21d,35989876-16b1-4b02-9381-444a06a7a21d,0,1,f7608000-1e8a-4ca4-afb7-e04ef547b70a,f7608000-1e8a-4ca4-afb7-e04ef547b70a,0,1,26cea519-19d0-4707-be0a-1a43fde6e563,26cea519-19d0-4707-be0a-1a43fde6e563,0,1,a3d599b9-89d1-4386-8c5b-1c2a9905e6e2,a3d599b9-89d1-4386-8c5b-1c2a9905e6e2,0,1,9fb3e902-3154-4bab-9bfe-9a266dc49fa5,9fb3e902-3154-4bab-9bfe-9a266dc49fa5,0,1,60c04f0a-78a8-4c55-8844-b86906350fd1,60c04f0a-78a8-4c55-8844-b86906350fd1,0,1,851306a7-8847-4b43-8214-898bfc24b0ab,851306a7-8847-4b43-8214-898bfc24b0ab,0,1,af8d4bc9-2f0f-44d3-89ce-2593877055c8,af8d4bc9-2f0f-44d3-89ce-2593877055c8,0,1,344fb829-a1cc-4b17-8f98-2d4f93bfcd6a,344fb829-a1cc-4b17-8f98-2d4f93bfcd6a,0,1,eb35bff2-8467-48fe-bf93-ece2aa40f506,eb35bff2-8467-48fe-bf93-ece2aa40f506,0,1,68cf55da-b29e-4a65-815b-c9cdc8e5888e,68cf55da-b29e-4a65-815b-c9cdc8e5888e,0,1,a9f927ef-22a2-4d77-8648-4bb25eeaccf2,a9f927ef-22a2-4d77-8648-4bb25eeaccf2,0,1,1041ed81-c1f7-43b2-9087-914865a3076e,1041ed81-c1f7-43b2-9087-914865a3076e,0,1,5d7174d2-42b3-4e12-b705-4209dd73b53b,5d7174d2-42b3-4e12-b705-4209dd73b53b,0,1,b1b5bf08-1c57-4875-87bb-ad1fa1a3251f,b1b5bf08-1c57-4875-87bb-ad1fa1a3251f,0,1,e00dcab4-5e92-44e3-bcdf-a31dd32a195f,e00dcab4-5e92-44e3-bcdf-a31dd32a195f,0,1,5a4c6511-f8ed-40e4-a251-e28f62629cf2,5a4c6511-f8ed-40e4-a251-e28f62629cf2,0,1,cfe59dfd-a509-4f83-b926-b3ff94234a43,cfe59dfd-a509-4f83-b926-b3ff94234a43,0,1,17df1591-61b0-4204-8379-8d1f58445968,17df1591-61b0-4204-8379-8d1f58445968,0,1,9020fa9d-e7de-4574-ab65-db6651b5b610,9020fa9d-e7de-4574-ab65-db6651b5b610,0,1,e83ad33d-27df-4181-afd2-b7f416e6e705,e83ad33d-27df-4181-afd2-b7f416e6e705,0,1,f0438b0a-7916-4de4-a3a8-d43407c3295f,f0438b0a-7916-4de4-a3a8-d43407c3295f,0,1,3309648c-aae6-4684-ae8d-7ed636bc3468,3309648c-aae6-4684-ae8d-7ed636bc3468,0,1,f9aa933e-6684-48de-b802-96c8e61b1fe6,f9aa933e-6684-48de-b802-96c8e61b1fe6,0,1,9de4d430-95ec-4435-b3e8-4fc85778d517,9de4d430-95ec-4435-b3e8-4fc85778d517,0,1,205b8908-fa21-42bd-bff0-fb95e6787f15,205b8908-fa21-42bd-bff0-fb95e6787f15,0,1,4e309f26-35e8-49d9-bbd1-c7884e666dca,4e309f26-35e8-49d9-bbd1-c7884e666dca,0,1,84f05fe4-51d3-49a8-83e7-1cae2028147e,84f05fe4-51d3-49a8-83e7-1cae2028147e,0,1,8a9ab11b-5bb5-4da9-9053-8f9e8198d019,8a9ab11b-5bb5-4da9-9053-8f9e8198d019,0,1,5320abf1-b09b-4de0-9adf-4cb1da31df6f,5320abf1-b09b-4de0-9adf-4cb1da31df6f,0,1,3916ddbd-9023-42a4-849e-9cda6e591408,3916ddbd-9023-42a4-849e-9cda6e591408,0,1,5e9e42c5-dcbc-422f-acce-4f11a63dbb85,5e9e42c5-dcbc-422f-acce-4f11a63dbb85,0,1,6903ffe4-42c1-4708-a1b0-bb67cd3f9e4c,6903ffe4-42c1-4708-a1b0-bb67cd3f9e4c,0,1,c0e01a15-6937-4331-bdd7-2f5a68d0d3dd,c0e01a15-6937-4331-bdd7-2f5a68d0d3dd,0,1,d065c02e-9991-468a-ae32-b8c29d078d03,d065c02e-9991-468a-ae32-b8c29d078d03,0,1,c509683e-eb13-4e1a-91ed-cd6982ec5001,c509683e-eb13-4e1a-91ed-cd6982ec5001,0,1,88bf6f58-7943-42c4-bc0f-56b991590026,88bf6f58-7943-42c4-bc0f-56b991590026,0,1,f135b60e-6d28-4ba1-acd7-76090f14855d,f135b60e-6d28-4ba1-acd7-76090f14855d,0,1,96d66cdd-d40c-43a3-92ce-40aef2101b64,96d66cdd-d40c-43a3-92ce-40aef2101b64,0,1,9daa8270-4782-4d83-af03-c8d2b11057ff,9daa8270-4782-4d83-af03-c8d2b11057ff,0,1,4b8927df-e124-4bf6-9d70-6e91b4796d90,4b8927df-e124-4bf6-9d70-6e91b4796d90,0,1,871b63a2-c7a6-4343-8d8b-7dda1b0def87,871b63a2-c7a6-4343-8d8b-7dda1b0def87,0,1,52b45b3d-b01b-4aac-8a1e-e256957c39c3,52b45b3d-b01b-4aac-8a1e-e256957c39c3,0,1,fc78d8df-ab27-4544-a65c-73908b9c5425,fc78d8df-ab27-4544-a65c-73908b9c5425,0,1,f8a090d2-b2d1-4ead-a8bf-6325a7552743,f8a090d2-b2d1-4ead-a8bf-6325a7552743,0,1,84f935da-9fe5-44ea-845b-b447b8b0a6f5,84f935da-9fe5-44ea-845b-b447b8b0a6f5,0,1,33343620-673e-4aa3-9e58-c6a25f738001,33343620-673e-4aa3-9e58-c6a25f738001,0,1,8aaf780f-ed74-4f44-9598-c14180053ff9,8aaf780f-ed74-4f44-9598-c14180053ff9,0,1,dbd4d09d-f410-4453-9143-bd72da5464cc,dbd4d09d-f410-4453-9143-bd72da5464cc,0,1,c4fe10b6-d025-4736-be23-3113bd7fe7b4,c4fe10b6-d025-4736-be23-3113bd7fe7b4,0,1,65530aca-7cf2-4a52-b5be-5dcbc15a049e,65530aca-7cf2-4a52-b5be-5dcbc15a049e,0,1,15eb2c2d-305d-42c0-9aec-936b82114bdb,15eb2c2d-305d-42c0-9aec-936b82114bdb,0,1,bb99bc44-f83e-48bb-93fd-7b07ca7da6a7,bb99bc44-f83e-48bb-93fd-7b07ca7da6a7,0,1,cbca7272-2aae-4e21-b3f5-12786f085648,cbca7272-2aae-4e21-b3f5-12786f085648,0,1,7718bd0b-7b8a-4ffc-b228-f05683b5531a,7718bd0b-7b8a-4ffc-b228-f05683b5531a,0,1,38aeb32b-9e3b-4b4a-9a61-97da63cdea48,38aeb32b-9e3b-4b4a-9a61-97da63cdea48,0,1,881f53bc-a52e-4312-b09d-3d3f53ddf84b,881f53bc-a52e-4312-b09d-3d3f53ddf84b,0,1,2e36a7b3-5331-4fab-a0a3-31b42a8387fe,2e36a7b3-5331-4fab-a0a3-31b42a8387fe,0,1,e3476d0e-0ab4-4734-9261-04aef6281086,e3476d0e-0ab4-4734-9261-04aef6281086,0,1,945ae8d2-b74a-41e9-b740-c82acdd40d04,945ae8d2-b74a-41e9-b740-c82acdd40d04,0,1,29c37223-de1c-49fb-8488-77e44dd79edd,29c37223-de1c-49fb-8488-77e44dd79edd,0,1,976533bf-f162-42a1-a47e-6d681ee67b82,976533bf-f162-42a1-a47e-6d681ee67b82,0,1,19bc0dd8-9e6b-4855-bc42-b4e98443163f,19bc0dd8-9e6b-4855-bc42-b4e98443163f,0,1,a61e10af-eaba-4e7a-a641-65d77453a559,a61e10af-eaba-4e7a-a641-65d77453a559,0,1,4c8eb34e-0bb6-487a-a2ae-24083b1f6d2e,4c8eb34e-0bb6-487a-a2ae-24083b1f6d2e,0,1,276c42ca-f5e0-4bb4-9b89-a925def35cb1,276c42ca-f5e0-4bb4-9b89-a925def35cb1,0,1,41a9cabc-5667-4ca0-a798-ba0b22bd1aa0,41a9cabc-5667-4ca0-a798-ba0b22bd1aa0,0,1,1bf44c42-87c0-4f2e-846c-b04d0b7e8d7d,1bf44c42-87c0-4f2e-846c-b04d0b7e8d7d,0,1,8811ea1a-1221-47b7-9574-3f36ff15a3cf,8811ea1a-1221-47b7-9574-3f36ff15a3cf,0,1,a84891cc-e996-489a-abde-5b5af166a057,a84891cc-e996-489a-abde-5b5af166a057,0,1,1d715463-691b-4c01-ae39-57c261f2a6ad,1d715463-691b-4c01-ae39-57c261f2a6ad,0,1,4c3d007f-a62c-4fd9-beda-58dbf08ad188,4c3d007f-a62c-4fd9-beda-58dbf08ad188,0,1,c35373a9-f0b0-4ddb-a985-409ac9c64609,c35373a9-f0b0-4ddb-a985-409ac9c64609,0,1,c5b4d6e4-4c99-46cb-98cf-9a0024215a12,c5b4d6e4-4c99-46cb-98cf-9a0024215a12,0,1,c1c40916-fee5-46e3-90fc-10e7595866c9,c1c40916-fee5-46e3-90fc-10e7595866c9,0,1,19a307b1-9ef0-4fc6-bf4f-7636e9118399,19a307b1-9ef0-4fc6-bf4f-7636e9118399,0,1,666244a4-5636-4405-89dd-bbd8f4278071,666244a4-5636-4405-89dd-bbd8f4278071,0,1,8b79f0e3-9024-4073-aa6b-a42beed9b0c6,8b79f0e3-9024-4073-aa6b-a42beed9b0c6,0,1,29a627a9-debc-4074-88d0-ec3561e1ef9c,29a627a9-debc-4074-88d0-ec3561e1ef9c,0,1,5a01a002-8833-4c89-b8d6-9b63fc49d3b6,5a01a002-8833-4c89-b8d6-9b63fc49d3b6,0,1,39f5e272-9a10-40b0-8a10-92037828b206,39f5e272-9a10-40b0-8a10-92037828b206,0,1,87dad256-122b-4d7e-b249-a2c313a9cf33,87dad256-122b-4d7e-b249-a2c313a9cf33,0,1,57a030fb-ed57-4ffc-a462-c7bbd2435c3d,57a030fb-ed57-4ffc-a462-c7bbd2435c3d,0,1,f20a04a7-84fa-48e3-8ac5-28176c1fcada,f20a04a7-84fa-48e3-8ac5-28176c1fcada,0,1,b722d6e1-fd6f-4bb4-923d-01764393722d,b722d6e1-fd6f-4bb4-923d-01764393722d,0,1,ac5f945e-2d03-44fb-a8cf-5d786194cefd,ac5f945e-2d03-44fb-a8cf-5d786194cefd,0,1,698ec00f-bf75-420e-81ab-a98808daf3f7,698ec00f-bf75-420e-81ab-a98808daf3f7,0,1,f441907c-d02e-431e-baf4-1854e48a1f50,f441907c-d02e-431e-baf4-1854e48a1f50,0,1,4ad722ca-10fc-4a83-91c9-ef0012685f89,4ad722ca-10fc-4a83-91c9-ef0012685f89,0,1,783dd4ba-a597-45ba-8989-2ed5224d62bc,783dd4ba-a597-45ba-8989-2ed5224d62bc,0,1,3b033d29-0de7-49dd-90bc-f414b28426d7,3b033d29-0de7-49dd-90bc-f414b28426d7,0,1,97aaede5-d32f-4eba-b0e0-5ae5f094a8b7,97aaede5-d32f-4eba-b0e0-5ae5f094a8b7,0,1,d9e08c12-1999-41d8-b530-90187303be0a,d9e08c12-1999-41d8-b530-90187303be0a,0,1,dad9710a-73ca-4e0d-b98b-75f955d0822d,dad9710a-73ca-4e0d-b98b-75f955d0822d,0,1,d01beeab-7c42-4d5e-a2f6-f190b9f703a5,d01beeab-7c42-4d5e-a2f6-f190b9f703a5,0,1,2191939f-6f71-47c9-a3d2-57acbf7f411e,2191939f-6f71-47c9-a3d2-57acbf7f411e,0,1,19b9cbbb-1fcc-4492-9385-687742cb3d0b,19b9cbbb-1fcc-4492-9385-687742cb3d0b,0,1,247c41dd-c8dc-43dd-b348-1ba31ee92065,247c41dd-c8dc-43dd-b348-1ba31ee92065,0,1,dbad3cee-0d5c-41f6-819f-1a2b5251b62c,dbad3cee-0d5c-41f6-819f-1a2b5251b62c,0,1,da673406-078d-44c8-9d27-80ef172c4b5e,da673406-078d-44c8-9d27-80ef172c4b5e,0,1,75e77f99-b9d1-4bc0-93aa-c77a93d760d3,75e77f99-b9d1-4bc0-93aa-c77a93d760d3,0,1,a2c36563-126d-4c3a-9714-5b7a4903073b,a2c36563-126d-4c3a-9714-5b7a4903073b,0,1,2e4da82c-dddb-4462-b34f-6511cd2a8356,2e4da82c-dddb-4462-b34f-6511cd2a8356,0,1,c7da3115-3cee-4282-a2f2-4e0b5558e4fc,c7da3115-3cee-4282-a2f2-4e0b5558e4fc,0,1,2976c29f-f482-463d-8f6e-6a632fb50893,2976c29f-f482-463d-8f6e-6a632fb50893,0,1,701964a1-7762-45ee-a9a4-41dd9ce94783,701964a1-7762-45ee-a9a4-41dd9ce94783,0,1,55d1909e-f552-441f-8e14-47d2e604cf6a,55d1909e-f552-441f-8e14-47d2e604cf6a,0,1,eae627db-c52b-4e41-94d1-58db28cd0063,eae627db-c52b-4e41-94d1-58db28cd0063,0,1,cafc86e1-d7f1-4cd2-ac20-04fa0917556a,cafc86e1-d7f1-4cd2-ac20-04fa0917556a,0,1,0a646724-b49d-42cd-82e6-e800466ed127,0a646724-b49d-42cd-82e6-e800466ed127,0,1,47058e36-a281-43a5-a41d-691b3ef32b5b,47058e36-a281-43a5-a41d-691b3ef32b5b,0,1,4fc5c023-91e2-4b3e-8f61-4dfe3be78f3a,4fc5c023-91e2-4b3e-8f61-4dfe3be78f3a,0,1,646def82-bc88-4187-8be0-93938656a20f,646def82-bc88-4187-8be0-93938656a20f,0,1,e620e93c-4382-478f-a700-ad2faa67362b,e620e93c-4382-478f-a700-ad2faa67362b,0,1,a4a8693b-dc91-4762-92e6-35360c8768db,a4a8693b-dc91-4762-92e6-35360c8768db,0,1,2ae236ec-28a7-44e0-a0ba-be62fe52d817,2ae236ec-28a7-44e0-a0ba-be62fe52d817,0,1,52ae6431-afb3-4dea-b106-00e11b174ec7,52ae6431-afb3-4dea-b106-00e11b174ec7,0,1,b18bdc5f-a2b6-4b15-81c3-37b27a5a3176,b18bdc5f-a2b6-4b15-81c3-37b27a5a3176,0,1,c996916d-7f1c-4fbf-939f-3e1bafe81f7d,c996916d-7f1c-4fbf-939f-3e1bafe81f7d,0,1,528d96cc-8838-49ea-8d76-ea56747882e0,528d96cc-8838-49ea-8d76-ea56747882e0,0,1,b9166ea0-cce8-4f76-a9cb-a3d6eb4dfb95,b9166ea0-cce8-4f76-a9cb-a3d6eb4dfb95,0,1,fcb46a8a-3461-4ec2-9aa0-685aedb9dd50,fcb46a8a-3461-4ec2-9aa0-685aedb9dd50,0,1,12cf9412-baf5-4d32-a563-a11ac3d5e0ed,12cf9412-baf5-4d32-a563-a11ac3d5e0ed,0,1,bdde9030-5718-4f5e-a9e2-f641f4ce69f9,bdde9030-5718-4f5e-a9e2-f641f4ce69f9,0,1,ed137e05-1996-411d-9927-45a3d7e3ee3b,ed137e05-1996-411d-9927-45a3d7e3ee3b,0,1,fbebf341-9842-41e1-8e4d-490fa02065ce,fbebf341-9842-41e1-8e4d-490fa02065ce,0,1,067f88f6-ccd2-491e-a466-94345a1f220f,067f88f6-ccd2-491e-a466-94345a1f220f,0,1,642154b8-97da-4c4f-bf34-c1124215077d,642154b8-97da-4c4f-bf34-c1124215077d,0,1,abc10867-39ae-46bf-8bd7-90f645919235,abc10867-39ae-46bf-8bd7-90f645919235,0,1,b3396504-8ccb-43d6-9a0f-ab259ba0a542,b3396504-8ccb-43d6-9a0f-ab259ba0a542,0,1,f59f91c5-026a-4dc5-996e-0d59814a9604,f59f91c5-026a-4dc5-996e-0d59814a9604,0,1,aac9966f-e9ea-4106-97bb-6b9822939bc7,aac9966f-e9ea-4106-97bb-6b9822939bc7,0,1,a752fba8-5084-4fa2-9d0b-7074a42b1312,a752fba8-5084-4fa2-9d0b-7074a42b1312,0,1,640d7486-8abd-40aa-a244-2ed899b7225a,640d7486-8abd-40aa-a244-2ed899b7225a,0,1,58321939-f25a-456d-8dee-97e64743dc2e,58321939-f25a-456d-8dee-97e64743dc2e,0,1,416fba62-70c4-4f8c-b10b-56d47b27ca35,416fba62-70c4-4f8c-b10b-56d47b27ca35,0,1,ec48a164-bc30-4e36-a40a-a3cca07aea0d,ec48a164-bc30-4e36-a40a-a3cca07aea0d,0,1,c05f87b4-ec5f-4d14-981f-02ca8ba89863,c05f87b4-ec5f-4d14-981f-02ca8ba89863,0,1,b7736108-89bd-44eb-89c1-8a5a774058f1,b7736108-89bd-44eb-89c1-8a5a774058f1,0,1,560a5f44-e4e6-46d9-a9fe-3609842d0e3e,560a5f44-e4e6-46d9-a9fe-3609842d0e3e,0,1,98f68a75-ebf9-4c59-b6a8-b3634089ca6b,98f68a75-ebf9-4c59-b6a8-b3634089ca6b,0,1,875d1fc1-8172-4e48-8192-035882e1665d,875d1fc1-8172-4e48-8192-035882e1665d,0,1,26132b28-98cc-4690-92ad-139f91839ba2,26132b28-98cc-4690-92ad-139f91839ba2,0,1,0bd85b79-cc32-4c1d-b629-567a1bdfac56,0bd85b79-cc32-4c1d-b629-567a1bdfac56,0,1,b87ce4f9-aaa6-4a4c-af80-0bd9adc83506,b87ce4f9-aaa6-4a4c-af80-0bd9adc83506,0,1,ca81e0ea-c428-47f9-aedb-078214104a2f,ca81e0ea-c428-47f9-aedb-078214104a2f,0,1,9518d09c-6996-4439-9278-3c71d5ae8fce,9518d09c-6996-4439-9278-3c71d5ae8fce,0,1,9dd6e7d6-cd98-4928-b50c-38bdbc61c211,9dd6e7d6-cd98-4928-b50c-38bdbc61c211,0,1,5fbd9a13-012d-4c36-b72c-da3bc4157cff,5fbd9a13-012d-4c36-b72c-da3bc4157cff,0,1,1126157b-64c0-4d64-8551-f31c5ed0fd29,1126157b-64c0-4d64-8551-f31c5ed0fd29,0,1,6ae6e515-5cd4-4eca-8602-c6abe6d66276,6ae6e515-5cd4-4eca-8602-c6abe6d66276,0,1,44b8472b-0f70-49cc-8f71-9c9d3e9cfbcc,44b8472b-0f70-49cc-8f71-9c9d3e9cfbcc,0,1,b071a44e-9a34-4af3-a59a-35aa5f3a74b4,b071a44e-9a34-4af3-a59a-35aa5f3a74b4,0,1,35a28677-0653-47f9-82e1-02c4b9266fee,35a28677-0653-47f9-82e1-02c4b9266fee,0,1,2e17464f-9cef-4812-865f-4eb77ff16b6a,2e17464f-9cef-4812-865f-4eb77ff16b6a,0,1,e5ecbb1f-981d-4928-9335-22216879f7e2,e5ecbb1f-981d-4928-9335-22216879f7e2,0,1,461be12a-9f16-4826-978a-436608ca8733,461be12a-9f16-4826-978a-436608ca8733,0,1,9b143299-d300-4b6c-b667-5552fb3bdcde,9b143299-d300-4b6c-b667-5552fb3bdcde,0,1,0de070f4-d8b7-48bb-bfc9-027dd727a4ad,0de070f4-d8b7-48bb-bfc9-027dd727a4ad,0,1,74973d06-f57d-403e-945c-5cd2f4fc4869,74973d06-f57d-403e-945c-5cd2f4fc4869,0,1,259564b8-172e-4eed-9360-d561ec6dad69,259564b8-172e-4eed-9360-d561ec6dad69,0,1,91c799d7-2b3d-4d1a-87ff-221057a428c6,91c799d7-2b3d-4d1a-87ff-221057a428c6,0,1,a50fcacc-6d2d-496c-bea0-9c73cd153437,a50fcacc-6d2d-496c-bea0-9c73cd153437,0,1,a6846c5a-7cf6-4df2-a159-2fd33d18d18f,a6846c5a-7cf6-4df2-a159-2fd33d18d18f,0,1,0fb72f4b-e6f6-4b70-8ec7-fdb6d4ad928e,0fb72f4b-e6f6-4b70-8ec7-fdb6d4ad928e,0,1,a5633248-8611-4e9b-b223-2f59e7b84a65,a5633248-8611-4e9b-b223-2f59e7b84a65,0,1,6ec3463a-1e94-4de7-a8c0-b0e42f38573e,6ec3463a-1e94-4de7-a8c0-b0e42f38573e,0,1,e40b8882-737a-40c0-83b4-c35dc042f4a5,e40b8882-737a-40c0-83b4-c35dc042f4a5,0,1,d60c1e9d-1395-4293-8462-6ea2c93a0c86,d60c1e9d-1395-4293-8462-6ea2c93a0c86,0,1,a05fdefd-c0c6-4069-bb05-3fcd22819289,a05fdefd-c0c6-4069-bb05-3fcd22819289,0,1,1514f388-3c36-422f-9e23-83054934e4b3,1514f388-3c36-422f-9e23-83054934e4b3,0,1,841f4416-a85a-48f7-bae2-19865cf2979e,841f4416-a85a-48f7-bae2-19865cf2979e,0,1,8df13cd3-1b03-4c84-98e9-c771c1d5254a,8df13cd3-1b03-4c84-98e9-c771c1d5254a,0,1,a79ddc43-74f6-4997-bfc4-bdf7bc71cdd6,a79ddc43-74f6-4997-bfc4-bdf7bc71cdd6,0,1,29477058-cb8d-4fd4-b3a1-41565aeabf97,29477058-cb8d-4fd4-b3a1-41565aeabf97,0,1,5a2d5d8a-afd9-4954-9868-7c82bad00426,5a2d5d8a-afd9-4954-9868-7c82bad00426,0,1,26aea96b-20f8-4e35-b55f-4fe3602e6597,26aea96b-20f8-4e35-b55f-4fe3602e6597,0,1,a3a3a211-e361-4e41-a6f8-d731a366c163,a3a3a211-e361-4e41-a6f8-d731a366c163,0,1,c40d6fde-4d9a-4d9e-af86-42b7916e2abe,c40d6fde-4d9a-4d9e-af86-42b7916e2abe,0,1,4d5204ae-711d-4c31-8a18-280dbc9d2bf5,4d5204ae-711d-4c31-8a18-280dbc9d2bf5,0,1,ca01417c-0ffd-4e00-91e8-93cd305be82d,ca01417c-0ffd-4e00-91e8-93cd305be82d,0,1,14fcf5e5-5856-4b5f-8c3f-75eaba0f7268,14fcf5e5-5856-4b5f-8c3f-75eaba0f7268,0,1,0a0af8bf-0caa-40df-9a69-71f98ca9ff89,0a0af8bf-0caa-40df-9a69-71f98ca9ff89,0,1,6ac7db0c-18ed-4d3b-956a-5985214db474,6ac7db0c-18ed-4d3b-956a-5985214db474,0,1,267103e0-6703-4a74-bb4f-af610d7ef332,267103e0-6703-4a74-bb4f-af610d7ef332,0,1,b98ca634-25a5-4366-af04-815ba34c8bb2,b98ca634-25a5-4366-af04-815ba34c8bb2,0,1,14d69108-4d26-401a-b7ae-2c86dadf831c,14d69108-4d26-401a-b7ae-2c86dadf831c,0,1,d6251f65-d366-4bc9-a5db-42063fe03594,d6251f65-d366-4bc9-a5db-42063fe03594,0,1,22c60cbc-429f-40d9-bf8b-681b7786c41d,22c60cbc-429f-40d9-bf8b-681b7786c41d,0,1,d4e53d41-9335-4a1e-a06e-410c46de1d1c,d4e53d41-9335-4a1e-a06e-410c46de1d1c,0,1,4405bfaa-699a-497b-a15c-0302b86c834c,4405bfaa-699a-497b-a15c-0302b86c834c,0,1,3b3e7b9d-67f8-4cf2-ad1a-29d124169691,3b3e7b9d-67f8-4cf2-ad1a-29d124169691,0,1,31dd320b-06aa-4314-9914-2c2420f572a1,31dd320b-06aa-4314-9914-2c2420f572a1,0,1,56730848-3bef-4b8c-b449-fe9d09c9c374,56730848-3bef-4b8c-b449-fe9d09c9c374,0,1,43c477d2-1234-4c4a-a18a-022c0ddf2fd5,43c477d2-1234-4c4a-a18a-022c0ddf2fd5,0,1,91d8c5e4-eaec-4951-9224-16882fda08f6,91d8c5e4-eaec-4951-9224-16882fda08f6,0,1,4304ffb9-7ede-4c59-bef8-26fe3e8f0103,4304ffb9-7ede-4c59-bef8-26fe3e8f0103,0,1,4654d192-74bf-430f-abee-6f4dc431b182,4654d192-74bf-430f-abee-6f4dc431b182,0,1,1ea750ae-5ec4-43c5-b34f-fd28999d41d7,1ea750ae-5ec4-43c5-b34f-fd28999d41d7,0,1,4678c704-933a-45ef-9d41-89b8f39016bb,4678c704-933a-45ef-9d41-89b8f39016bb,0,1,8ceea1e8-42ce-469f-823a-ceffdbd6b112,8ceea1e8-42ce-469f-823a-ceffdbd6b112,0,1,086d69d6-e2fa-45cb-84b6-f8f3e2919160,086d69d6-e2fa-45cb-84b6-f8f3e2919160,0,1,6995ee71-5901-46d9-a5c1-b35d795bda20,6995ee71-5901-46d9-a5c1-b35d795bda20,0,1,e93a4293-0497-4f11-b8b9-40300104fb96,e93a4293-0497-4f11-b8b9-40300104fb96,0,1,93531e5d-5dfc-42e8-be52-2e83f37262b0,93531e5d-5dfc-42e8-be52-2e83f37262b0,0,1,61bf78c0-7004-4a74-b362-e979c7316e05,61bf78c0-7004-4a74-b362-e979c7316e05,0,1,c4351896-eff1-4e4d-8823-028d63a9d6bf,c4351896-eff1-4e4d-8823-028d63a9d6bf,0,1,475f83a2-ba5a-4072-94f8-1324b1f198a4,475f83a2-ba5a-4072-94f8-1324b1f198a4,0,1,cd7c15c1-c573-46c9-b109-339b8b54c3ee,cd7c15c1-c573-46c9-b109-339b8b54c3ee,0,1,efd89929-4db9-4c58-b3cb-a8d9a41a1df2,efd89929-4db9-4c58-b3cb-a8d9a41a1df2,0,1,deee8bde-381f-4094-8794-7a06248860dd,deee8bde-381f-4094-8794-7a06248860dd,0,1,2757ee75-4b36-4901-bff1-044708754edb,2757ee75-4b36-4901-bff1-044708754edb,0,1,0e6bab27-bf94-4732-8549-dbd9b8a5f4e9,0e6bab27-bf94-4732-8549-dbd9b8a5f4e9,0,1,774c92d6-9b9b-422a-83d7-8d42ae2a9f60,774c92d6-9b9b-422a-83d7-8d42ae2a9f60,0,1,71144539-6472-4727-8887-0139f6221370,71144539-6472-4727-8887-0139f6221370,0,1,bff07da4-ae19-48a9-806b-14b285d42485,bff07da4-ae19-48a9-806b-14b285d42485,0,1,659cd4f6-d18c-4d75-a7e6-7c124a63ab9a,659cd4f6-d18c-4d75-a7e6-7c124a63ab9a,0,1,b0ccc05d-8d39-4f57-8e87-6846014f92ea,b0ccc05d-8d39-4f57-8e87-6846014f92ea,0,1,e871dea7-1953-4511-90b0-e0957afac4c0,e871dea7-1953-4511-90b0-e0957afac4c0,0,1,64fbfed7-9dda-481b-a4f7-fe440f24ba7e,64fbfed7-9dda-481b-a4f7-fe440f24ba7e,0,1,b2835a5b-5c91-448c-9eb1-1bb1c9a5e727,b2835a5b-5c91-448c-9eb1-1bb1c9a5e727,0,1,447fb310-0588-4e0d-8f6d-5fc1f3bb1180,447fb310-0588-4e0d-8f6d-5fc1f3bb1180,0,1,8986c155-54be-4b1b-b31a-5c00b88bc40d,8986c155-54be-4b1b-b31a-5c00b88bc40d,0,1,d91441cf-d793-4dfa-9225-f0c16818edde,d91441cf-d793-4dfa-9225-f0c16818edde,0,1,40ae107d-67a8-404c-adf9-1a760bba94ff,40ae107d-67a8-404c-adf9-1a760bba94ff,0,1,42a39785-144c-4d2d-92c6-fd8b345f687b,42a39785-144c-4d2d-92c6-fd8b345f687b,0,1,f3bd841b-fb36-4462-9627-b51801e563cd,f3bd841b-fb36-4462-9627-b51801e563cd,0,1,0a23f273-5589-4a48-be3a-eee7565749aa,0a23f273-5589-4a48-be3a-eee7565749aa,0,1,494eb9d9-4a10-4e85-b511-375408f21bbe,494eb9d9-4a10-4e85-b511-375408f21bbe,0,1,3fbbca3f-d4fa-4d65-a08f-0a348b9030c6,3fbbca3f-d4fa-4d65-a08f-0a348b9030c6,0,1,a161dd07-4a6e-4d0f-b72c-702d0d3a83a3,a161dd07-4a6e-4d0f-b72c-702d0d3a83a3,0,1,a275802f-937a-49f4-92da-fcdd185a036d,a275802f-937a-49f4-92da-fcdd185a036d,0,1,ec6ed9cb-85a2-4303-9906-cfb4ce6500bf,ec6ed9cb-85a2-4303-9906-cfb4ce6500bf,0,1,f2dc9319-ba60-421a-8340-be3e3a291393,f2dc9319-ba60-421a-8340-be3e3a291393,0,1,bf4eb62a-bc74-4845-bad2-58a2a8302a65,bf4eb62a-bc74-4845-bad2-58a2a8302a65,0,1,b66eb190-1c16-4f20-a94f-954bcdf313b8,b66eb190-1c16-4f20-a94f-954bcdf313b8,0,1,bbdfeebd-cda0-4911-8f31-553d751340a7,bbdfeebd-cda0-4911-8f31-553d751340a7,0,1,dc7adfb7-41e7-4019-a18d-5d9f5d227b71,dc7adfb7-41e7-4019-a18d-5d9f5d227b71,0,1,20aad006-5b1e-4cc2-94ef-668dd002667b,20aad006-5b1e-4cc2-94ef-668dd002667b,0,1,af6af7ae-d68a-4e12-ba2c-a360ce2920a7,af6af7ae-d68a-4e12-ba2c-a360ce2920a7,0,1,b0f5bce4-2ad3-416e-9b1e-3fb23deaa040,b0f5bce4-2ad3-416e-9b1e-3fb23deaa040,0,1,2befb2e3-7354-4a01-83d6-b24262704a5e,2befb2e3-7354-4a01-83d6-b24262704a5e,0,1,5b93975e-b2a4-4102-a060-2667f5813c94,5b93975e-b2a4-4102-a060-2667f5813c94,0,1,ca75d086-cd01-4f54-b57d-1b35bcb1272a,ca75d086-cd01-4f54-b57d-1b35bcb1272a,0,1,b4a27991-2e18-4ead-80e8-f2956a7539e3,b4a27991-2e18-4ead-80e8-f2956a7539e3,0,1,ac8c40d6-be1e-4733-be2e-ae83bde4ec15,ac8c40d6-be1e-4733-be2e-ae83bde4ec15,0,1,dcdc9c65-c2d5-4531-a325-f64b3861cbab,dcdc9c65-c2d5-4531-a325-f64b3861cbab,0,1,ca542a9e-3040-419f-9a98-2a8de230b734,ca542a9e-3040-419f-9a98-2a8de230b734,0,1,c9fc5155-1df3-4872-a83d-72872baf43c4,c9fc5155-1df3-4872-a83d-72872baf43c4,0,1,9f9adb67-66bd-4c28-8319-44ae097ae1fe,9f9adb67-66bd-4c28-8319-44ae097ae1fe,0,1,0bae3704-b370-48be-b094-f18a2e62ad1b,0bae3704-b370-48be-b094-f18a2e62ad1b,0,1,e097bf94-9235-4a27-b0eb-d6387d22cd62,e097bf94-9235-4a27-b0eb-d6387d22cd62,0,1,eccded1c-f3ca-40d3-a8cd-71947bfed7b8,eccded1c-f3ca-40d3-a8cd-71947bfed7b8,0,1,4d243f2b-14d9-4e96-9707-4ead5d12e0a2,4d243f2b-14d9-4e96-9707-4ead5d12e0a2,0,1,8d2bfd40-f185-4eab-b374-872d49310eb2,8d2bfd40-f185-4eab-b374-872d49310eb2,0,1,523de426-e5a6-49e0-8144-c637f80d8ddd,523de426-e5a6-49e0-8144-c637f80d8ddd,0,1,09256328-6205-4b04-b908-3287ae8ded75,09256328-6205-4b04-b908-3287ae8ded75,0,1,05a6e161-9791-4c5b-8753-bd6370cc4cc9,05a6e161-9791-4c5b-8753-bd6370cc4cc9,0,1,6362facc-bf95-4adf-8ee7-c65f90972a1c,6362facc-bf95-4adf-8ee7-c65f90972a1c,0,1,08dbba81-68fb-49ef-8aac-9631fcfa87c6,08dbba81-68fb-49ef-8aac-9631fcfa87c6,0,1,dd7191b6-cbc0-4b0b-a51a-c27a1e1720fa,dd7191b6-cbc0-4b0b-a51a-c27a1e1720fa,0,1,8170a27d-45e9-48b1-860b-c2d9cc5961cd,8170a27d-45e9-48b1-860b-c2d9cc5961cd,0,1,f1c08fed-f3db-4f72-8a8e-7c626b8cc130,f1c08fed-f3db-4f72-8a8e-7c626b8cc130,0,1,e8c3b796-bfd8-4108-ab5f-d0f21b7bd9a6,e8c3b796-bfd8-4108-ab5f-d0f21b7bd9a6,0,1,f41d01ec-983a-4b39-9c11-a6d25d08df4f,f41d01ec-983a-4b39-9c11-a6d25d08df4f,0,1,3247e64e-b57e-4c33-8086-7ab93c5b6371,3247e64e-b57e-4c33-8086-7ab93c5b6371,0,1,e5dca369-dc9a-4332-a509-f734b8787e13,e5dca369-dc9a-4332-a509-f734b8787e13,0,1,722af623-156c-4e63-8b2a-93da760f1559,722af623-156c-4e63-8b2a-93da760f1559,0,1,5ff23123-450c-40ae-9b79-c540da53e2a0,5ff23123-450c-40ae-9b79-c540da53e2a0,0,1,639339a1-7de5-4b05-adf3-f60e7edd922c,639339a1-7de5-4b05-adf3-f60e7edd922c,0,1,dea9af9d-13c0-40d4-a9b0-1908e0a58795,dea9af9d-13c0-40d4-a9b0-1908e0a58795,0,1,9e9b8c05-787a-43c0-891d-3d9ad7e4976f,9e9b8c05-787a-43c0-891d-3d9ad7e4976f,0,1,1abeb10b-0558-4478-8f51-d0964ba3c274,1abeb10b-0558-4478-8f51-d0964ba3c274,0,1,38325a66-588a-4db0-8e0c-21d239408369,38325a66-588a-4db0-8e0c-21d239408369,0,1,7c27e885-33fd-4da2-a60d-50336c0189b0,7c27e885-33fd-4da2-a60d-50336c0189b0,0,1,0e1a45b0-d95d-415f-b954-5689610aa393,0e1a45b0-d95d-415f-b954-5689610aa393,0,1,4736b3d3-f696-4bdd-b0e3-0884ea88f623,4736b3d3-f696-4bdd-b0e3-0884ea88f623,0,1,4b849c66-6a36-4efd-815e-af4467c6f064,4b849c66-6a36-4efd-815e-af4467c6f064,0,1,f6939587-ff87-4eca-ae52-10e1bd2abfce,f6939587-ff87-4eca-ae52-10e1bd2abfce,0,1,a8e4d97f-e2da-4aa8-a221-3cbcc135f403,a8e4d97f-e2da-4aa8-a221-3cbcc135f403,0,1,f2b0eab2-e34b-42f8-9b24-5596b4c17d7f,f2b0eab2-e34b-42f8-9b24-5596b4c17d7f,0,1,3cb575a9-dc82-45e0-81f0-d651e12246da,3cb575a9-dc82-45e0-81f0-d651e12246da,0,1,01a73950-3e8f-4f56-903f-af0d9574e72e,01a73950-3e8f-4f56-903f-af0d9574e72e,0,1,14bd0844-c829-4325-aa7f-0f417bf955dc,14bd0844-c829-4325-aa7f-0f417bf955dc,0,1,7f1cd658-ca10-49c6-80ef-b8956f3269ea,7f1cd658-ca10-49c6-80ef-b8956f3269ea,0,1,b0d9086f-cef7-47a8-ad62-d85fea28ebda,b0d9086f-cef7-47a8-ad62-d85fea28ebda,0,1,49c010fc-f5cc-45f4-ba46-132e7661c3dd,49c010fc-f5cc-45f4-ba46-132e7661c3dd,0,1,3f3b592d-ca61-40c7-be1f-e5d3224a1eb3,3f3b592d-ca61-40c7-be1f-e5d3224a1eb3,0,1,2c02a558-8d12-44cf-be6b-9c399b9032e5,2c02a558-8d12-44cf-be6b-9c399b9032e5,0,1,d94d4931-7c81-4ee8-93ea-b2c54b152fa5,d94d4931-7c81-4ee8-93ea-b2c54b152fa5,0,1,c770bdd5-c7c0-4751-b31d-46c0ea1f49b7,c770bdd5-c7c0-4751-b31d-46c0ea1f49b7,0,1,6afcc089-7f15-42e8-97b5-6aad6cf2e6f9,6afcc089-7f15-42e8-97b5-6aad6cf2e6f9,0,1,cce4c615-dc29-42b3-9d3d-b277dde4a2e4,cce4c615-dc29-42b3-9d3d-b277dde4a2e4,0,1,9c267aa6-5f23-49f6-868a-3324ef2845ff,9c267aa6-5f23-49f6-868a-3324ef2845ff,0,1,495eeeee-d7bf-4063-99e2-86daa066451a,495eeeee-d7bf-4063-99e2-86daa066451a,0,1,b6184698-79e4-4c19-9440-092ccd9dabf8,b6184698-79e4-4c19-9440-092ccd9dabf8,0,1,7d01fc0c-378e-421d-ab70-6a418eed5941,7d01fc0c-378e-421d-ab70-6a418eed5941,0,1,6eeb4867-bf9d-48dc-b96b-934a0c293010,6eeb4867-bf9d-48dc-b96b-934a0c293010,0,1,c7f817ee-9f6a-454c-95a0-b279fd08055e,c7f817ee-9f6a-454c-95a0-b279fd08055e,0,1,e1803e54-ec5e-4a82-8097-5e2331820991,e1803e54-ec5e-4a82-8097-5e2331820991,0,1,259ede1f-05d3-4ece-8994-0ae3b2e89f49,259ede1f-05d3-4ece-8994-0ae3b2e89f49,0,1,f69ec1f9-826e-4eb4-b52c-3f6a3dfc3361,f69ec1f9-826e-4eb4-b52c-3f6a3dfc3361,0,1,4cbb0b91-dbdd-472f-93c5-061076b6a8d3,4cbb0b91-dbdd-472f-93c5-061076b6a8d3,0,1,8506dbe9-7066-444b-83b6-fb2d71a336e7,8506dbe9-7066-444b-83b6-fb2d71a336e7,0,1,240b4df5-0d75-4e5a-9ae8-d0bc7cc51722,240b4df5-0d75-4e5a-9ae8-d0bc7cc51722,0,1,6686d828-3129-4d44-a8a2-a64657d424cb,6686d828-3129-4d44-a8a2-a64657d424cb,0,1,90433152-f389-4d45-8ccc-3eb6c7a7e1f0,90433152-f389-4d45-8ccc-3eb6c7a7e1f0,0,1,ce235ab9-1dec-459a-9fec-498c262ece56,ce235ab9-1dec-459a-9fec-498c262ece56,0,1,9ec53d1a-ed7a-41e8-b5d0-6c2181fd63a5,9ec53d1a-ed7a-41e8-b5d0-6c2181fd63a5,0,1,97edd94a-4bf2-4ed7-b98f-677f869b0715,97edd94a-4bf2-4ed7-b98f-677f869b0715,0,1,39355e82-30a6-431e-9697-e2c42e82de83,39355e82-30a6-431e-9697-e2c42e82de83,0,1,a9ae364f-b668-4fb4-b976-f227951ffb6b,a9ae364f-b668-4fb4-b976-f227951ffb6b,0,1,edc01b03-8b01-4551-939a-f7e257892040,edc01b03-8b01-4551-939a-f7e257892040,0,1,15d09274-9508-4f64-9ea3-678c5aa50f0f,15d09274-9508-4f64-9ea3-678c5aa50f0f,0,1,4debe032-12e4-4777-b2fc-70b150f2aad1,4debe032-12e4-4777-b2fc-70b150f2aad1,0,1,37558fa2-0833-46d6-9e4f-63d4a3136870,37558fa2-0833-46d6-9e4f-63d4a3136870,0,1,d92cb614-ed09-47db-b70b-d3e533c44c6a,d92cb614-ed09-47db-b70b-d3e533c44c6a,0,1,e660c8bf-af5f-4525-a56e-68925d2b96fa,e660c8bf-af5f-4525-a56e-68925d2b96fa,0,1,2fad50a6-6a3e-4f87-ab84-907364427a63,2fad50a6-6a3e-4f87-ab84-907364427a63,0,1,9567765b-8e02-4262-89a9-5c354109cc4c,9567765b-8e02-4262-89a9-5c354109cc4c,0,1,3153b2b9-9e3e-4d6b-ab8c-5ccaac78a08a,3153b2b9-9e3e-4d6b-ab8c-5ccaac78a08a,0,1,588bd1b2-ee61-4a05-83cd-efb1b82ccb44,588bd1b2-ee61-4a05-83cd-efb1b82ccb44,0,1,1681dd7a-de80-4b8d-9657-c9702a19d653,1681dd7a-de80-4b8d-9657-c9702a19d653,0,1,10d796e9-a3d4-4ef0-87d5-8315aa12f1c8,10d796e9-a3d4-4ef0-87d5-8315aa12f1c8,0,1,fdb5b235-1978-4c2a-a03f-02341df00c3c,fdb5b235-1978-4c2a-a03f-02341df00c3c,0,1,9f593f27-8009-40c0-94d6-53f177ce55f4,9f593f27-8009-40c0-94d6-53f177ce55f4,0,1,38637f61-399a-4966-9e64-4751aecffa31,38637f61-399a-4966-9e64-4751aecffa31,0,1,0f38a18b-a36c-45fe-86c1-396634aaa5df,0f38a18b-a36c-45fe-86c1-396634aaa5df,0,1,f2b7b8d0-c0f7-46ba-907a-f8dfa76fc2da,f2b7b8d0-c0f7-46ba-907a-f8dfa76fc2da,0,1,a81c783d-2dea-4dde-9ca1-7b23d609eb22,a81c783d-2dea-4dde-9ca1-7b23d609eb22,0,1,137ec4ee-5053-47a7-8f5d-f6e63174608f,137ec4ee-5053-47a7-8f5d-f6e63174608f,0,1,820bb4b4-895b-4ccf-a350-2545bf8a2f7e,820bb4b4-895b-4ccf-a350-2545bf8a2f7e,0,1,530a3164-4ef1-4b3b-8269-13764ef4bf15,530a3164-4ef1-4b3b-8269-13764ef4bf15,0,1,6df2bb92-558c-4453-9de4-e4176e8f93dc,6df2bb92-558c-4453-9de4-e4176e8f93dc,0,1,0ce4c8a4-b20b-4550-bee3-f677e9ec64e9,0ce4c8a4-b20b-4550-bee3-f677e9ec64e9,0,1,30d5c2a6-b3cf-4ed5-ba75-850bcae932d1,30d5c2a6-b3cf-4ed5-ba75-850bcae932d1,0,1,0bf5e9c1-905a-4202-8b96-ed831b41be4b,0bf5e9c1-905a-4202-8b96-ed831b41be4b,0,1,e92ae368-0d7c-4fb7-b6d0-5ab63dc95a6a,e92ae368-0d7c-4fb7-b6d0-5ab63dc95a6a,0,1,f30c9c4b-aa6c-4b15-9ac7-888c0c0cabd9,f30c9c4b-aa6c-4b15-9ac7-888c0c0cabd9,0,1,be15e947-f671-4848-ada1-51239af73615,be15e947-f671-4848-ada1-51239af73615,0,1,d3e0dd8f-886a-4441-8f05-fd629da80f07,d3e0dd8f-886a-4441-8f05-fd629da80f07,0,1,6417d7c8-6436-4907-98eb-44cd7638f3f1,6417d7c8-6436-4907-98eb-44cd7638f3f1,0,1,ba49877b-6e30-4177-a67c-00e65aa498fb,ba49877b-6e30-4177-a67c-00e65aa498fb,0,1,25b39aeb-94c3-4199-9d56-5bd87e325bf2,25b39aeb-94c3-4199-9d56-5bd87e325bf2,0,1,b0b63551-4e83-4201-af9a-b4ab150c43a5,b0b63551-4e83-4201-af9a-b4ab150c43a5,0,1,ca85912b-87b4-481e-9184-017364b4603d,ca85912b-87b4-481e-9184-017364b4603d,0,1,2bd80198-4739-4e8f-9af1-40addc91a05b,2bd80198-4739-4e8f-9af1-40addc91a05b,0,1,572019eb-ffc4-4cfd-b4ba-c09267900c6c,572019eb-ffc4-4cfd-b4ba-c09267900c6c,0,1,bb7fad68-32d3-4e6a-be62-2c4c34c94737,bb7fad68-32d3-4e6a-be62-2c4c34c94737,0,1,a69525c7-27ff-48df-b26b-325ba580a53e,a69525c7-27ff-48df-b26b-325ba580a53e,0,1,24a7de1c-1c1f-4987-91ff-02f78f15dd9e,24a7de1c-1c1f-4987-91ff-02f78f15dd9e,0,1,33c66a15-e48e-406a-a77c-02af72ae96d5,33c66a15-e48e-406a-a77c-02af72ae96d5,0,1,ebd3dcc2-1176-4ee0-b590-ee39f85fb55b,ebd3dcc2-1176-4ee0-b590-ee39f85fb55b,0,1,3b78a9d0-7382-4115-a7dc-d06c9a1962d1,3b78a9d0-7382-4115-a7dc-d06c9a1962d1,0,1,9935d602-668e-4df9-a338-0f542def878b,9935d602-668e-4df9-a338-0f542def878b,0,1,459ed297-0c0d-4bdb-90a3-da387868f040,459ed297-0c0d-4bdb-90a3-da387868f040,0,1,ccb5b9a7-1a10-4803-b455-0350afe4b584,ccb5b9a7-1a10-4803-b455-0350afe4b584,0,1,ebce49ef-755a-4ace-aeb1-b99db2a8bf6c,ebce49ef-755a-4ace-aeb1-b99db2a8bf6c,0,1,0cd18f4c-aeb9-456b-9dcd-9649d1dd486b,0cd18f4c-aeb9-456b-9dcd-9649d1dd486b,0,1,ba5e7c41-0442-4f74-ba41-631d864eafb4,ba5e7c41-0442-4f74-ba41-631d864eafb4,0,1,c86aa97a-5898-4cb2-ae62-598bddf8e99f,c86aa97a-5898-4cb2-ae62-598bddf8e99f,0,1,d3c9b925-6b74-42db-8b21-ab21d24797d1,d3c9b925-6b74-42db-8b21-ab21d24797d1,0,1,4d348ec3-9de8-4f5b-960c-4b507d0fd7ce,4d348ec3-9de8-4f5b-960c-4b507d0fd7ce,0,1,39261a2d-7c46-40b1-9f8f-02d970aa04bc,39261a2d-7c46-40b1-9f8f-02d970aa04bc,0,1,3a07e5a5-2ab1-43ef-b97f-d45cd7775d67,3a07e5a5-2ab1-43ef-b97f-d45cd7775d67,0,1,124a516f-cdab-49ce-95d1-359921140342,124a516f-cdab-49ce-95d1-359921140342,0,1,e4294611-a770-4e67-9578-a1f370879476,e4294611-a770-4e67-9578-a1f370879476,0,1,c5033dd2-0911-4124-8688-dc9dabf3155f,c5033dd2-0911-4124-8688-dc9dabf3155f,0,1,274357df-cb5c-407d-ae72-58046c310db2,274357df-cb5c-407d-ae72-58046c310db2,0,1,5467001e-d025-4669-b16e-26381ac4403f,5467001e-d025-4669-b16e-26381ac4403f,0,1,21f6544a-9227-4b31-bbf2-293b946cac9d,21f6544a-9227-4b31-bbf2-293b946cac9d,0,1,2cfea4b1-0569-4832-b712-0d8d201580d5,2cfea4b1-0569-4832-b712-0d8d201580d5,0,1,97053b27-9c6e-4e17-a27d-48d7cbb80903,97053b27-9c6e-4e17-a27d-48d7cbb80903,0,1,87442857-4ef7-41c2-9f86-b8ed94bc9d40,87442857-4ef7-41c2-9f86-b8ed94bc9d40,0,1,32068cda-69d0-470b-9e36-b125ec112c27,32068cda-69d0-470b-9e36-b125ec112c27,0,1,9b0bf652-b174-4d27-93c5-15dd656702b6,9b0bf652-b174-4d27-93c5-15dd656702b6,0,1,4012cde7-9fb5-4ade-b5f7-2d791e5bce36,4012cde7-9fb5-4ade-b5f7-2d791e5bce36,0,1,9a5fd73f-894f-4611-9e2e-26d8bf39466d,9a5fd73f-894f-4611-9e2e-26d8bf39466d,0,1,7346a13a-5b14-4c42-be97-2f375c087dae,7346a13a-5b14-4c42-be97-2f375c087dae,0,1,2b7cd37f-f6ec-476e-8f8e-e3d0cb946075,2b7cd37f-f6ec-476e-8f8e-e3d0cb946075,0,1,d3ddb39f-d418-4884-a194-6a5049a2ba26,d3ddb39f-d418-4884-a194-6a5049a2ba26,0,1,7a15a2b5-c5a0-451d-b374-bb6d73bc7d51,7a15a2b5-c5a0-451d-b374-bb6d73bc7d51,0,1,08bae66f-fb39-478b-9369-fe7ceb73931a,08bae66f-fb39-478b-9369-fe7ceb73931a,0,1,3d7d9ed9-c273-44db-86b6-989d84b056fd,3d7d9ed9-c273-44db-86b6-989d84b056fd,0,1,1e5eea45-0f8a-4962-bb6e-f7a7b901e0a4,1e5eea45-0f8a-4962-bb6e-f7a7b901e0a4,0,1,80cc5484-aa21-4eb4-8272-b089d2b013e9,80cc5484-aa21-4eb4-8272-b089d2b013e9,0,1,5a39f0b3-63bb-44e2-a8ad-bd99fe8162e9,5a39f0b3-63bb-44e2-a8ad-bd99fe8162e9,0,1,35e9d241-f7db-40cb-aab9-484fa8fb1818,35e9d241-f7db-40cb-aab9-484fa8fb1818,0,1,7aacd8a6-8564-4114-82b7-00a922756a91,7aacd8a6-8564-4114-82b7-00a922756a91,0,1,d3d426d5-e95b-4afa-8c71-2f593f1276cf,d3d426d5-e95b-4afa-8c71-2f593f1276cf,0,1,67365c7c-c40e-4d2f-bbca-b314c1868ab7,67365c7c-c40e-4d2f-bbca-b314c1868ab7,0,1,93566e25-e199-4300-a692-cf5886139963,93566e25-e199-4300-a692-cf5886139963,0,1,210f85b1-393b-4b5c-b11e-cfd18888204a,210f85b1-393b-4b5c-b11e-cfd18888204a,0,1,17190e81-4d85-4351-97cf-508326aef5de,17190e81-4d85-4351-97cf-508326aef5de,0,1,7c0eda05-7eb2-4f42-b229-3e5a4f2a5131,7c0eda05-7eb2-4f42-b229-3e5a4f2a5131,0,1,f7e6ef78-6e28-4108-b2b8-9797f0a4f5e9,f7e6ef78-6e28-4108-b2b8-9797f0a4f5e9,0,1,2ef3a2b4-e274-45a3-acbf-618498dc5462,2ef3a2b4-e274-45a3-acbf-618498dc5462,0,1,6caf8c52-a859-41fe-b9b3-6d91ec018e0b,6caf8c52-a859-41fe-b9b3-6d91ec018e0b,0,1,1b03c1a9-c510-46e4-80b0-0c157bfa1adf,1b03c1a9-c510-46e4-80b0-0c157bfa1adf,0,1,fb7a5957-63ee-411a-b646-a2fc8c52f446,fb7a5957-63ee-411a-b646-a2fc8c52f446,0,1,b6d02a0a-2836-4b9a-b26a-2ebc19542bcb,b6d02a0a-2836-4b9a-b26a-2ebc19542bcb,0,1,3b34aff0-8d90-4616-a9a4-ea55afcd01a7,3b34aff0-8d90-4616-a9a4-ea55afcd01a7,0,1,1c4a606d-835e-45d9-a176-b7d7031c4c85,1c4a606d-835e-45d9-a176-b7d7031c4c85,0,1,06e31fb0-df76-433f-a5bb-c1186aca5c3e,06e31fb0-df76-433f-a5bb-c1186aca5c3e,0,1,1aa54e85-ecac-4c4f-9b08-5e4ee271ceb5,1aa54e85-ecac-4c4f-9b08-5e4ee271ceb5,0,1,b7d1aa26-1af7-4909-aba4-1b67debae031,b7d1aa26-1af7-4909-aba4-1b67debae031,0,1,da3d8fa8-50b8-4847-bd9f-765a0f1e628b,da3d8fa8-50b8-4847-bd9f-765a0f1e628b,0,1,efb0c9bd-f509-4bdd-8793-f5aa9e0a615b,efb0c9bd-f509-4bdd-8793-f5aa9e0a615b,0,1,66c8b395-0252-4093-8cfc-cf5791f6f45b,66c8b395-0252-4093-8cfc-cf5791f6f45b,0,1,0a3a0f21-9433-4c45-84e0-7309c43c21e7,0a3a0f21-9433-4c45-84e0-7309c43c21e7,0,1,cb3a5c5b-7bdc-4e12-96f1-11b1213b6853,cb3a5c5b-7bdc-4e12-96f1-11b1213b6853,0,1,e6fe7103-4dfa-4302-a58e-ccd7fac19c9d,e6fe7103-4dfa-4302-a58e-ccd7fac19c9d,0,1,bb3a9973-67ce-479e-8668-c2f3bb20301e,bb3a9973-67ce-479e-8668-c2f3bb20301e,0,1,e5250dfe-dda2-4547-9b9e-2470ea1be1ab,e5250dfe-dda2-4547-9b9e-2470ea1be1ab,0,1,2c3fccc6-c4c0-49ec-bfc2-05ce05f27ea9,2c3fccc6-c4c0-49ec-bfc2-05ce05f27ea9,0,1,37169451-1464-4f24-8ca6-802963ffb636,37169451-1464-4f24-8ca6-802963ffb636,0,1,c3a958b1-590f-4418-a74f-5982b478cf52,c3a958b1-590f-4418-a74f-5982b478cf52,0,1,ef0e618d-0942-460a-ac65-9aca2fed976e,ef0e618d-0942-460a-ac65-9aca2fed976e,0,1,fd1ed7ec-d848-41cd-8ce3-2e5a682abcf0,fd1ed7ec-d848-41cd-8ce3-2e5a682abcf0,0,1,2ac8bd69-9fbf-4f15-b58d-397d9e903532,2ac8bd69-9fbf-4f15-b58d-397d9e903532,0,1,2ff35814-7eaa-4ae5-bbac-f46bebb36c9d,2ff35814-7eaa-4ae5-bbac-f46bebb36c9d,0,1,5b460b92-2c74-4f59-88b2-18d9aac42c04,5b460b92-2c74-4f59-88b2-18d9aac42c04,0,1,db05d35b-5f53-4c27-ba80-b477b9a98299,db05d35b-5f53-4c27-ba80-b477b9a98299,0,1,fa872ae1-b699-46fe-9d6a-e42e1388752b,fa872ae1-b699-46fe-9d6a-e42e1388752b,0,1,1acf34e6-c428-4130-82f0-5160dfcc0858,1acf34e6-c428-4130-82f0-5160dfcc0858,0,1,57046262-b9ce-4670-9cf5-6db9e58dd0d5,57046262-b9ce-4670-9cf5-6db9e58dd0d5,0,1,a9824176-36d5-4be5-9984-f4312ff48515,a9824176-36d5-4be5-9984-f4312ff48515,0,1,8e980ca0-1627-45e8-bd27-5dd1ac199459,8e980ca0-1627-45e8-bd27-5dd1ac199459,0,1,8b653beb-af9f-4f39-b691-ae14f80b7cd6,8b653beb-af9f-4f39-b691-ae14f80b7cd6,0,1,77559c11-713f-454d-aff4-56649e1350e9,77559c11-713f-454d-aff4-56649e1350e9,0,1,0c965703-c1d0-48b7-80f9-b8d869ff98f5,0c965703-c1d0-48b7-80f9-b8d869ff98f5,0,1,51f8d5ff-aec5-4c0a-ad02-df8c6cb1b4ad,51f8d5ff-aec5-4c0a-ad02-df8c6cb1b4ad,0,1,7ba42162-557b-4e34-8aca-0cdee8cb2452,7ba42162-557b-4e34-8aca-0cdee8cb2452,0,1,eee99b8e-29b6-4b7a-81f1-3d91d740c0d7,eee99b8e-29b6-4b7a-81f1-3d91d740c0d7,0,1,ad4f2d1f-1e6f-4f6a-8061-202c0e42a8e4,ad4f2d1f-1e6f-4f6a-8061-202c0e42a8e4,0,1,dd577924-c6cb-4aa9-9db5-366d8958d00f,dd577924-c6cb-4aa9-9db5-366d8958d00f,0,1,8ed8f72e-404a-4be4-a44d-ddebbad5f411,8ed8f72e-404a-4be4-a44d-ddebbad5f411,0,1,e919bc4c-86e6-44f6-be27-5a729b63d042,e919bc4c-86e6-44f6-be27-5a729b63d042,0,1,ec580e4f-1518-4923-a10e-bc1da8688b37,ec580e4f-1518-4923-a10e-bc1da8688b37,0,1,91c3902a-314f-4d40-8bcc-8dd131fed2f4,91c3902a-314f-4d40-8bcc-8dd131fed2f4,0,1,ae2b21c5-9349-49e8-9627-26f05c21f43a,ae2b21c5-9349-49e8-9627-26f05c21f43a,0,1,7e4c0b74-e807-4aa9-ad69-3c85b147bb61,7e4c0b74-e807-4aa9-ad69-3c85b147bb61,0,1,917a19d7-73db-4247-b892-397598d67879,917a19d7-73db-4247-b892-397598d67879,0,1,1f866dc3-a4bc-4e8d-96a3-a26ee073926f,1f866dc3-a4bc-4e8d-96a3-a26ee073926f,0,1,d8066600-c669-449d-a187-fdd3af8f7afa,d8066600-c669-449d-a187-fdd3af8f7afa,0,1,dadf86a6-c118-4827-b1b9-6cfee731242f,dadf86a6-c118-4827-b1b9-6cfee731242f,0,1,45bf7b20-f048-491a-a989-e50bea13d028,45bf7b20-f048-491a-a989-e50bea13d028,0,1,9ad3b432-5b49-44ee-9d8d-83c36458d927,9ad3b432-5b49-44ee-9d8d-83c36458d927,0,1,a9967bff-53b9-4295-a253-3647d956d3cb,a9967bff-53b9-4295-a253-3647d956d3cb,0,1,75f0fd5b-c594-4f3a-8ff2-3fdadf1dc96d,75f0fd5b-c594-4f3a-8ff2-3fdadf1dc96d,0,1,b8a31397-8974-44ec-92b0-7cbdc481cf7e,b8a31397-8974-44ec-92b0-7cbdc481cf7e,0,1,b29c7c0d-03eb-422b-a899-ba9a7eba99f6,b29c7c0d-03eb-422b-a899-ba9a7eba99f6,0,1,fb16c4d5-854c-4525-92be-b21fa2df5b0d,fb16c4d5-854c-4525-92be-b21fa2df5b0d,0,1,5771de21-2086-432b-ad91-de14a39bd5bc,5771de21-2086-432b-ad91-de14a39bd5bc,0,1,b15bcf3b-0228-4d02-8f20-cd6ba82f7585,b15bcf3b-0228-4d02-8f20-cd6ba82f7585,0,1,ed96fbfa-bda7-405c-9073-d0b6feffedad,ed96fbfa-bda7-405c-9073-d0b6feffedad,0,1,50c724cb-dde1-4313-9492-b1750bd0afc1,50c724cb-dde1-4313-9492-b1750bd0afc1,0,1,12901981-6106-4471-ab3a-e127c2bb4ebd,12901981-6106-4471-ab3a-e127c2bb4ebd,0,1,17ad1497-fa0e-469f-b2e2-b94a6f848ec5,17ad1497-fa0e-469f-b2e2-b94a6f848ec5,0,1,d5ea5dea-233d-4106-b9ba-f030d4f762ef,d5ea5dea-233d-4106-b9ba-f030d4f762ef,0,1,903af05e-5ac5-46aa-843b-d74f9e417c1d,903af05e-5ac5-46aa-843b-d74f9e417c1d,0,1,4dc4862e-74c3-469d-863b-09fdbe0d6be0,4dc4862e-74c3-469d-863b-09fdbe0d6be0,0,1,a344290a-c9be-47a7-95ad-ced1b52a0995,a344290a-c9be-47a7-95ad-ced1b52a0995,0,1,a4e56049-4de9-40a3-8197-a5c84a11f516,a4e56049-4de9-40a3-8197-a5c84a11f516,0,1,339c9220-fd5b-45d3-b300-cdcc8788f87e,339c9220-fd5b-45d3-b300-cdcc8788f87e,0,1,02d7d401-3c0c-4fd0-b096-1f73b6ec14c3,02d7d401-3c0c-4fd0-b096-1f73b6ec14c3,0,1,9042a6de-5048-432d-a448-7e21f2d1d24a,9042a6de-5048-432d-a448-7e21f2d1d24a,0,1,350d46bf-114e-48e7-90c6-6708d949f20d,350d46bf-114e-48e7-90c6-6708d949f20d,0,1,d047caa8-7bcf-41ac-a18e-97877d6e0a2a,d047caa8-7bcf-41ac-a18e-97877d6e0a2a,0,1,aac20ff3-5873-432e-b763-14411e623d41,aac20ff3-5873-432e-b763-14411e623d41,0,1,fbc4df3e-c235-4197-8c1f-a5e39ac63a8c,fbc4df3e-c235-4197-8c1f-a5e39ac63a8c,0,1,6df44466-8750-481a-9baf-c924f0d45353,6df44466-8750-481a-9baf-c924f0d45353,0,1,110121eb-a0eb-4662-8911-3dcc3d341a73,110121eb-a0eb-4662-8911-3dcc3d341a73,0,1,f8980c18-6b9c-4e45-919a-22e976d2a846,f8980c18-6b9c-4e45-919a-22e976d2a846,0,1,c946efb7-c67e-49c1-bf56-d3c2d7220acd,c946efb7-c67e-49c1-bf56-d3c2d7220acd,0,1,7ed6bd83-b61d-4db4-8549-acacbdda6ca2,7ed6bd83-b61d-4db4-8549-acacbdda6ca2,0,1,6b7c9f74-f2b6-463e-acb9-9f82901986cf,6b7c9f74-f2b6-463e-acb9-9f82901986cf,0,1,fc4c1d64-132b-4687-a37d-05000fdb4ba5,fc4c1d64-132b-4687-a37d-05000fdb4ba5,0,1,528777cd-090b-4b70-82f5-56def98c5893,528777cd-090b-4b70-82f5-56def98c5893,0,1,49dbe467-8832-4ede-9a05-494248619aeb,49dbe467-8832-4ede-9a05-494248619aeb,0,1,460ed9ca-10c2-491c-a641-b92ffc2a8e7c,460ed9ca-10c2-491c-a641-b92ffc2a8e7c,0,1,bd5fadd3-9264-4c3b-9bd5-51e91847a6fb,bd5fadd3-9264-4c3b-9bd5-51e91847a6fb,0,1,09c73108-8528-4970-9b7f-fff9eda7816a,09c73108-8528-4970-9b7f-fff9eda7816a,0,1,40aa936e-cb1c-4ae9-85f1-6d930a5815cc,40aa936e-cb1c-4ae9-85f1-6d930a5815cc,0,1,f568245a-d158-45dc-af92-2d411f12db7b,f568245a-d158-45dc-af92-2d411f12db7b,0,1,0f17cdac-aa17-45e6-b3d0-220b13345390,0f17cdac-aa17-45e6-b3d0-220b13345390,0,1,c675db75-d0c3-4026-b97c-6b23ecbb336a,c675db75-d0c3-4026-b97c-6b23ecbb336a,0,1,469f67fa-98b0-44b0-abd4-cae136c02834,469f67fa-98b0-44b0-abd4-cae136c02834,0,1,16a18458-999c-420e-80df-8fc10855746c,16a18458-999c-420e-80df-8fc10855746c,0,1,b794f222-0fde-439f-97a3-0da74075b415,b794f222-0fde-439f-97a3-0da74075b415,0,1,3a716aad-9b2c-48a7-b802-80732066391b,3a716aad-9b2c-48a7-b802-80732066391b,0,1,480d959f-aac8-4241-875f-78e1c1f32621,480d959f-aac8-4241-875f-78e1c1f32621,0,1,496e5de8-d75c-4536-9993-75374f070b40,496e5de8-d75c-4536-9993-75374f070b40,0,1,b4e610ba-c9c8-4b25-903b-e567dcbc2556,b4e610ba-c9c8-4b25-903b-e567dcbc2556,0,1,48febdbd-a085-4113-8511-ed7ff6be7d3c,48febdbd-a085-4113-8511-ed7ff6be7d3c,0,1,49413232-c0c3-4983-9d10-291a0399281b,49413232-c0c3-4983-9d10-291a0399281b,0,1,032bb782-96a7-4c1b-8b8f-eb4e18b555b7,032bb782-96a7-4c1b-8b8f-eb4e18b555b7,0,1,b9b076bb-38ab-4a94-8226-41a4d4d7432c,b9b076bb-38ab-4a94-8226-41a4d4d7432c,0,1,e12da8db-4037-473e-ba2b-d0ceb4534dcb,e12da8db-4037-473e-ba2b-d0ceb4534dcb,0,1,789514e5-8ea3-4a5e-88c5-ed89c4135866,789514e5-8ea3-4a5e-88c5-ed89c4135866,0,1,a16768ff-6137-43d8-8784-4805ed83632a,a16768ff-6137-43d8-8784-4805ed83632a,0,1,61971286-9f94-4a27-aa34-e10848adb70a,61971286-9f94-4a27-aa34-e10848adb70a,0,1,1e75d143-3452-496e-a137-6d7f4c4ed019,1e75d143-3452-496e-a137-6d7f4c4ed019,0,1,e0619d14-c658-4eb5-841a-3a029de28be4,e0619d14-c658-4eb5-841a-3a029de28be4,0,1,99a3b660-7875-47f7-9c6c-c552e5673deb,99a3b660-7875-47f7-9c6c-c552e5673deb,0,1,2bdcf3a5-c8e1-492c-afee-f9db68e2fbb6,2bdcf3a5-c8e1-492c-afee-f9db68e2fbb6,0,1,41cbf934-ea54-41df-abf0-09f319d2e67a,41cbf934-ea54-41df-abf0-09f319d2e67a,0,1,47246084-a5f8-4d0f-b4e2-204c1b97483a,47246084-a5f8-4d0f-b4e2-204c1b97483a,0,1,e58233ec-6cfc-4a8b-9929-689fa69cdb07,e58233ec-6cfc-4a8b-9929-689fa69cdb07,0,1,3291a891-a47c-43ca-b088-aecd3867d38c,3291a891-a47c-43ca-b088-aecd3867d38c,0,1,56cde2b4-00f2-49ba-b407-16e241c17fd2,56cde2b4-00f2-49ba-b407-16e241c17fd2,0,1,bd84fb2b-4c52-4e2f-a8c5-f289b8336145,bd84fb2b-4c52-4e2f-a8c5-f289b8336145,0,1,219ed110-f2a0-41c1-ac5a-02301b248c54,219ed110-f2a0-41c1-ac5a-02301b248c54,0,1,1c722dfd-2b07-4985-9188-17353de24771,1c722dfd-2b07-4985-9188-17353de24771,0,1,1a630496-2cdd-4c89-a1aa-ed20545ad133,1a630496-2cdd-4c89-a1aa-ed20545ad133,0,1,b0dd02ee-ea6a-43f2-baa2-abac0a1ab4bb,b0dd02ee-ea6a-43f2-baa2-abac0a1ab4bb,0,1,b19cea0e-e57a-4969-8daf-f48d3d16705f,b19cea0e-e57a-4969-8daf-f48d3d16705f,0,1,d4059340-3361-4baa-ae48-ecbfb9800a2e,d4059340-3361-4baa-ae48-ecbfb9800a2e,0,1,f78f6c43-dd90-4117-acf7-ed5b951cb964,f78f6c43-dd90-4117-acf7-ed5b951cb964,0,1,8eebd519-4989-4784-82b8-39d77eebfb17,8eebd519-4989-4784-82b8-39d77eebfb17,0,1,0a2cb6e3-d9fa-4881-b136-7b6db9efca07,0a2cb6e3-d9fa-4881-b136-7b6db9efca07,0,1,c1561ed9-2fbf-4c12-a484-07f8adbe8fa3,c1561ed9-2fbf-4c12-a484-07f8adbe8fa3,0,1,4527877b-5723-4aa5-8705-98174ac9c337,4527877b-5723-4aa5-8705-98174ac9c337,0,1,d6b21e7b-df57-4280-8c95-c269b5316018,d6b21e7b-df57-4280-8c95-c269b5316018,0,1,808c468b-6322-428d-ac6a-ccf2228b05b6,808c468b-6322-428d-ac6a-ccf2228b05b6,0,1,13664bb2-738f-4d18-b382-a7bcf8105a5a,13664bb2-738f-4d18-b382-a7bcf8105a5a,0,1,f3f56abe-9248-4555-bf99-29560eb4f9ee,f3f56abe-9248-4555-bf99-29560eb4f9ee,0,1,0dbd5d55-a85f-4c7e-ac31-7ba4ab7cc371,0dbd5d55-a85f-4c7e-ac31-7ba4ab7cc371,0,1,dd9d09ef-3b4b-4bb5-9408-9c4080049bb3,dd9d09ef-3b4b-4bb5-9408-9c4080049bb3,0,1,3eb43a06-b32d-4904-8489-6264d0207623,3eb43a06-b32d-4904-8489-6264d0207623,0,1,a18098cf-5a61-46b5-bd55-cc61d15aa6bc,a18098cf-5a61-46b5-bd55-cc61d15aa6bc,0,1,18615fe1-cfee-4888-9c09-88d1c5db39eb,18615fe1-cfee-4888-9c09-88d1c5db39eb,0,1,63e363fa-8b0c-4d48-ab1b-9c953c5ed4c0,63e363fa-8b0c-4d48-ab1b-9c953c5ed4c0,0,1,087c83c0-75e7-476b-b7c6-5be55498a190,087c83c0-75e7-476b-b7c6-5be55498a190,0,1,ec5e5413-9e77-4929-83b8-6fee70688b28,ec5e5413-9e77-4929-83b8-6fee70688b28,0,1,59cd8e3f-ecf3-4e1d-bd98-41551d5d6f68,59cd8e3f-ecf3-4e1d-bd98-41551d5d6f68,0,1,8390c864-2b84-4c45-8583-cb4a4ab49168,8390c864-2b84-4c45-8583-cb4a4ab49168,0,1,1b2fefca-fef5-4319-90cc-325444cb63a6,1b2fefca-fef5-4319-90cc-325444cb63a6,0,1,34a128be-8fbb-4dd8-ac23-9f35041feb63,34a128be-8fbb-4dd8-ac23-9f35041feb63,0,1,baa31006-e0d6-496e-a60e-27b3dfd19397,baa31006-e0d6-496e-a60e-27b3dfd19397,0,1,3007d8ff-3942-45ed-bac5-8a6c40ca060c,3007d8ff-3942-45ed-bac5-8a6c40ca060c,0,1,8bfe1474-fd12-4744-a9ab-3383bfe766b3,8bfe1474-fd12-4744-a9ab-3383bfe766b3,0,1,3af97375-f776-4129-9521-b8d65d795db6,3af97375-f776-4129-9521-b8d65d795db6,0,1,0e98801b-a45b-44cb-a341-7e43d723f6ed,0e98801b-a45b-44cb-a341-7e43d723f6ed,0,1,5b71cd3b-d5b8-4632-9678-0ab1e1d2ea91,5b71cd3b-d5b8-4632-9678-0ab1e1d2ea91,0,1,103ac72d-c386-40ea-89d4-35798d064f1a,103ac72d-c386-40ea-89d4-35798d064f1a,0,1,645ceb40-1e9f-4a67-aa7f-b9002fa066b3,645ceb40-1e9f-4a67-aa7f-b9002fa066b3,0,1,d1fe15e9-8e5c-4819-85cd-24ab31409437,d1fe15e9-8e5c-4819-85cd-24ab31409437,0,1,c8c5bfe9-ead5-4e79-9fd5-60ad275faa1e,c8c5bfe9-ead5-4e79-9fd5-60ad275faa1e,0,1,8f9826b6-890e-4ba3-a1f2-bc9ebb3238dd,8f9826b6-890e-4ba3-a1f2-bc9ebb3238dd,0,1,74f68bda-17b1-4b3c-aa64-b1014300f9b5,74f68bda-17b1-4b3c-aa64-b1014300f9b5,0,1,90a195b0-7f64-4ccb-986e-8c8c2cf12ccd,90a195b0-7f64-4ccb-986e-8c8c2cf12ccd,0,1,9f9d1f8c-7ff9-420f-a426-48f33493d9f2,9f9d1f8c-7ff9-420f-a426-48f33493d9f2,0,1,ab7bc0bc-b4b8-4a4a-aecc-1cbe14fd4975,ab7bc0bc-b4b8-4a4a-aecc-1cbe14fd4975,0,1,9f8d9594-674f-49ef-9fb8-bb64d5c40a37,9f8d9594-674f-49ef-9fb8-bb64d5c40a37,0,1,47ee7d38-9fa9-458d-abee-e11270f79494,47ee7d38-9fa9-458d-abee-e11270f79494,0,1,bb6b83ff-81f4-4c39-ad8e-8cda9ccd9cb9,bb6b83ff-81f4-4c39-ad8e-8cda9ccd9cb9,0,1,076daecf-8fcb-496b-9f13-c4faa3a8a722,076daecf-8fcb-496b-9f13-c4faa3a8a722,0,1,f1a8357b-7083-42b3-ab5d-36223a3dd2a4,f1a8357b-7083-42b3-ab5d-36223a3dd2a4,0,1,296d7725-bdd3-4210-9db9-31de5711ea9b,296d7725-bdd3-4210-9db9-31de5711ea9b,0,1,6ecc5bc2-20b3-46f3-8019-ae1e1f3de319,6ecc5bc2-20b3-46f3-8019-ae1e1f3de319,0,1,1d05f89a-23dd-4d30-8786-abe8a9a39a40,1d05f89a-23dd-4d30-8786-abe8a9a39a40,0,1,245c2c6c-7b7f-4381-9304-1d7287a215fa,245c2c6c-7b7f-4381-9304-1d7287a215fa,0,1,fd17bbe4-34d9-4832-8eea-8eeb82194e4c,fd17bbe4-34d9-4832-8eea-8eeb82194e4c,0,1,d4c72d7f-7e1f-473c-9a2b-fa675fc78731,d4c72d7f-7e1f-473c-9a2b-fa675fc78731,0,1,8bb5be12-98df-4a38-bffe-432fb13d8101,8bb5be12-98df-4a38-bffe-432fb13d8101,0,1,94209023-ce88-401c-9aff-526fb7e43709,94209023-ce88-401c-9aff-526fb7e43709,0,1,22b99094-b52a-4244-ae91-53848d82560b,22b99094-b52a-4244-ae91-53848d82560b,0,1,22c9e2fa-c1f0-41ec-b6f2-9d7357dd3479,22c9e2fa-c1f0-41ec-b6f2-9d7357dd3479,0,1,b0002134-d5c9-4508-9f0e-97f92461b590,b0002134-d5c9-4508-9f0e-97f92461b590,0,1,1506ec71-cb38-4831-a29d-dac2c4deddda,1506ec71-cb38-4831-a29d-dac2c4deddda,0,1,e05fd82b-b77b-4b7f-b300-43653017f341,e05fd82b-b77b-4b7f-b300-43653017f341,0,1,d3b5e5ee-2317-43b4-b669-3af2ce635cf3,d3b5e5ee-2317-43b4-b669-3af2ce635cf3,0,1,f15a0526-c207-42fe-aed9-438ae0c4a4b8,f15a0526-c207-42fe-aed9-438ae0c4a4b8,0,1,9d444a41-7190-48fb-9a4a-08f8e7bc32a3,9d444a41-7190-48fb-9a4a-08f8e7bc32a3,0,1,8583cab0-0620-4346-96e0-bcac40981b8a,8583cab0-0620-4346-96e0-bcac40981b8a,0,1,e1dfba26-c682-42a2-8e15-fe6f535c9ce1,e1dfba26-c682-42a2-8e15-fe6f535c9ce1,0,1,095990b1-187b-400c-941a-275f272239ca,095990b1-187b-400c-941a-275f272239ca,0,1,ba108470-350d-40c3-bb44-9852c2aa8c97,ba108470-350d-40c3-bb44-9852c2aa8c97,0,1,a37c33fa-64b0-4a1b-846a-0a236bad44f8,a37c33fa-64b0-4a1b-846a-0a236bad44f8,0,1,d8481ce1-7f64-47b0-8fc0-6642ae93aca1,d8481ce1-7f64-47b0-8fc0-6642ae93aca1,0,1,a50f4324-da44-449b-b500-74228b2aa7e0,a50f4324-da44-449b-b500-74228b2aa7e0,0,1,04236716-9c36-4a1d-b4fb-4b8c65644ab4,04236716-9c36-4a1d-b4fb-4b8c65644ab4,0,1,97276702-6686-4ac4-8360-d85369a08b20,97276702-6686-4ac4-8360-d85369a08b20,0,1,e5450ee7-e891-4f58-9a01-d2d81d5ddd6d,e5450ee7-e891-4f58-9a01-d2d81d5ddd6d,0,1,068883fe-d7ae-40e7-ad82-864867916daa,068883fe-d7ae-40e7-ad82-864867916daa,0,1,c1b02568-2095-4f83-8543-2402f67dbe3d,c1b02568-2095-4f83-8543-2402f67dbe3d,0,1,8b749b7a-5e68-4523-adc2-8b3c5ce9701c,8b749b7a-5e68-4523-adc2-8b3c5ce9701c,0,1,bf3c7edc-0791-459e-a7ac-b7e8d7ed97fe,bf3c7edc-0791-459e-a7ac-b7e8d7ed97fe,0,1,7dc6d13e-4edf-4e6a-9ee9-4b32ad889ecf,7dc6d13e-4edf-4e6a-9ee9-4b32ad889ecf,0,1,aecbd726-6952-49e6-b544-4c5cc764c24c,aecbd726-6952-49e6-b544-4c5cc764c24c,0,1,d335cfbf-bc78-4274-a178-10f60372474a,d335cfbf-bc78-4274-a178-10f60372474a,0,1,0f4411b3-addf-4fcf-8da8-c5140dea356c,0f4411b3-addf-4fcf-8da8-c5140dea356c,0,1,c501f9ab-d01b-4137-8cd0-e66103117c84,c501f9ab-d01b-4137-8cd0-e66103117c84,0,1,8d5d4e0f-b7b5-4cdc-aedc-571517fa101f,8d5d4e0f-b7b5-4cdc-aedc-571517fa101f,0,1,66e65355-1424-4c74-801c-faf5357257aa,66e65355-1424-4c74-801c-faf5357257aa,0,1,0a93187b-7ae4-4985-8089-3099dfec2b48,0a93187b-7ae4-4985-8089-3099dfec2b48,0,1,044458f3-ed9b-4afb-ae73-8f9162c032bf,044458f3-ed9b-4afb-ae73-8f9162c032bf,0,1,578f618e-5f4a-4e86-959d-39b59e973936,578f618e-5f4a-4e86-959d-39b59e973936,0,1,f74ede2e-2d28-4224-ba44-773eda7760a4,f74ede2e-2d28-4224-ba44-773eda7760a4,0,1,217df06a-1bdf-4394-b617-ed756ff17bc6,217df06a-1bdf-4394-b617-ed756ff17bc6,0,1,a1572e97-a487-497a-9062-49315e237e0f,a1572e97-a487-497a-9062-49315e237e0f,0,1,969cdcb8-0f2a-427f-93a0-e7ae38f465e8,969cdcb8-0f2a-427f-93a0-e7ae38f465e8,0,1,3c5d87a0-cfce-464a-b946-64c5a589a376,3c5d87a0-cfce-464a-b946-64c5a589a376,0,1,2d22c67d-4795-4a6b-bc81-a3ed1eb28367,2d22c67d-4795-4a6b-bc81-a3ed1eb28367,0,1,763de8d1-7f53-41b6-8d97-7da724e9f763,763de8d1-7f53-41b6-8d97-7da724e9f763,0,1,75592ed4-2aab-4dfc-ae7b-d93e2a98370f,75592ed4-2aab-4dfc-ae7b-d93e2a98370f,0,1,4ad59c75-cca4-4968-82e6-babd72d8b318,4ad59c75-cca4-4968-82e6-babd72d8b318,0,1,c248de15-63a2-48ec-8695-7a5213d4fc9b,c248de15-63a2-48ec-8695-7a5213d4fc9b,0,1,272ff0f9-7266-4c22-be12-fe62682b56a5,272ff0f9-7266-4c22-be12-fe62682b56a5,0,1,9f141dd5-d866-4c25-b58a-a7766a08b4e7,9f141dd5-d866-4c25-b58a-a7766a08b4e7,0,1,0570d846-889d-4cfc-98fb-a1ad0181597f,0570d846-889d-4cfc-98fb-a1ad0181597f,0,1,19e17c58-953f-4917-8b6a-c88808fcca36,19e17c58-953f-4917-8b6a-c88808fcca36,0,1,4804316d-3765-4a83-8438-10e8e82656db,4804316d-3765-4a83-8438-10e8e82656db,0,1,59458556-e343-4215-8e6c-69f924ec4183,59458556-e343-4215-8e6c-69f924ec4183,0,1,dd553dca-7eba-41bf-8939-2c61e170ff65,dd553dca-7eba-41bf-8939-2c61e170ff65,0,1,b4ecf3dc-a2aa-406e-a593-1700ea8746bc,b4ecf3dc-a2aa-406e-a593-1700ea8746bc,0,1,933d7ce7-ea82-4b26-8d1b-dc92cb5ac92d,933d7ce7-ea82-4b26-8d1b-dc92cb5ac92d,0,1,8099e978-28cc-4ade-ac5a-3785f3a45f70,8099e978-28cc-4ade-ac5a-3785f3a45f70,0,1,11eff613-8077-41fa-8cb8-5e8dc27d0e4f,11eff613-8077-41fa-8cb8-5e8dc27d0e4f,0,1,fe023ca5-f11a-4b98-99c1-363508e4ea4a,fe023ca5-f11a-4b98-99c1-363508e4ea4a,0,1,6f8d515e-13d9-45f8-9793-3757f5b85f81,6f8d515e-13d9-45f8-9793-3757f5b85f81,0,1,25ec541c-c437-4318-b2a8-5146df6ae080,25ec541c-c437-4318-b2a8-5146df6ae080,0,1,148754ed-3063-40a7-a3c3-8ad105552370,148754ed-3063-40a7-a3c3-8ad105552370,0,1,ab3f0862-c355-4fd7-a2a7-4eb8278de510,ab3f0862-c355-4fd7-a2a7-4eb8278de510,0,1,85bbfe20-a6a4-49ca-8f20-342f4cbe8258,85bbfe20-a6a4-49ca-8f20-342f4cbe8258,0,1,c12c3f3b-3a96-4e70-b131-8d7bd765095f,c12c3f3b-3a96-4e70-b131-8d7bd765095f,0,1,70ee4b32-80d1-4b79-a322-0433f1b8c7f1,70ee4b32-80d1-4b79-a322-0433f1b8c7f1,0,1,c563588c-346e-499e-ae33-9ff3cb62e658,c563588c-346e-499e-ae33-9ff3cb62e658,0,1,40dbc001-97b6-4188-8de9-3adac670bac4,40dbc001-97b6-4188-8de9-3adac670bac4,0,1,a4ed8b24-bd23-45a7-9f34-61b25b91d0c6,a4ed8b24-bd23-45a7-9f34-61b25b91d0c6,0,1,65efaa10-3239-4f0f-a08e-88c89d9d8d5a,65efaa10-3239-4f0f-a08e-88c89d9d8d5a,0,1,93aa5247-6823-4f70-9d47-e5a0f409828a,93aa5247-6823-4f70-9d47-e5a0f409828a,0,1,030c6a22-a3d5-4cf2-9f7b-dc4fe3732f83,030c6a22-a3d5-4cf2-9f7b-dc4fe3732f83,0,1,b19f1223-5ebe-4446-bacc-bc7d53486f2e,b19f1223-5ebe-4446-bacc-bc7d53486f2e,0,1,6ea7e8e9-0faa-43fd-b9c8-1a7b8f899d6d,6ea7e8e9-0faa-43fd-b9c8-1a7b8f899d6d,0,1,7be1decf-feb1-422b-a3f2-f60d08fdb0e6,7be1decf-feb1-422b-a3f2-f60d08fdb0e6,0,1,bf3167d6-3047-482a-b280-184f446ae7a3,bf3167d6-3047-482a-b280-184f446ae7a3,0,1,50c47c0a-a199-4020-9df4-91b17c159454,50c47c0a-a199-4020-9df4-91b17c159454,0,1,c1d449af-8a6e-4cb0-b2c9-50ea5405c44c,c1d449af-8a6e-4cb0-b2c9-50ea5405c44c,0,1,faecdc33-fed8-4b44-96f4-4215c26959b6,faecdc33-fed8-4b44-96f4-4215c26959b6,0,1,09c29992-47a8-4fca-bd95-e7dbc53e8c4c,09c29992-47a8-4fca-bd95-e7dbc53e8c4c,0,1,f07cf7bd-6f3f-426a-8b71-ba1dcb827654,f07cf7bd-6f3f-426a-8b71-ba1dcb827654,0,1,9df3792e-a4ee-4a2c-9296-c1384925521e,9df3792e-a4ee-4a2c-9296-c1384925521e,0,1,03d423db-f98a-468f-9040-5b76454e5a98,03d423db-f98a-468f-9040-5b76454e5a98,0,1,08f394f9-d254-4fe5-8651-a69c96de7a62,08f394f9-d254-4fe5-8651-a69c96de7a62,0,1,e90ec54b-8b86-43df-8c3c-18c6676bf3f1,e90ec54b-8b86-43df-8c3c-18c6676bf3f1,0,1,6aff6b2f-660b-4d75-9064-fed7a6b0feac,6aff6b2f-660b-4d75-9064-fed7a6b0feac,0,1,53502127-9f47-4e2e-b3ed-eb3c3aae1c50,53502127-9f47-4e2e-b3ed-eb3c3aae1c50,0,1,2fcdd0b5-b738-4e19-8bbf-13a72d7014ec,2fcdd0b5-b738-4e19-8bbf-13a72d7014ec,0,1,59dc7e8d-6f5c-4e1b-816e-5fc15c0e96e0,59dc7e8d-6f5c-4e1b-816e-5fc15c0e96e0,0,1,e60a9221-7676-456f-8a01-b317b03a278b,e60a9221-7676-456f-8a01-b317b03a278b,0,1,4e81ec90-f668-49ca-9193-22337bafb01b,4e81ec90-f668-49ca-9193-22337bafb01b,0,1,104c7c31-5bbd-4242-b29a-2c0d8b69a1b9,104c7c31-5bbd-4242-b29a-2c0d8b69a1b9,0,1,cd60adec-52d6-4fa8-85ca-26551196432c,cd60adec-52d6-4fa8-85ca-26551196432c,0,1,4dfbabd7-d5e5-4b2a-b8d1-752e416629a0,4dfbabd7-d5e5-4b2a-b8d1-752e416629a0,0,1,b71ddbdb-08bb-46be-a79d-319c4a557e76,b71ddbdb-08bb-46be-a79d-319c4a557e76,0,1,d3dfa867-3d52-4872-a69e-f27636abe1bd,d3dfa867-3d52-4872-a69e-f27636abe1bd,0,1,6952d1aa-7132-4e40-8542-f64a4dc1e029,6952d1aa-7132-4e40-8542-f64a4dc1e029,0,1,51a1bc4c-9139-42a4-92c3-f45c837cbdb9,51a1bc4c-9139-42a4-92c3-f45c837cbdb9,0,1,1621811b-dfd3-4c58-8e15-ced16690147a,1621811b-dfd3-4c58-8e15-ced16690147a,0,1,3f266e51-0476-4b7f-8d61-6f9f4456049d,3f266e51-0476-4b7f-8d61-6f9f4456049d,0,1,2b9ce591-ff13-4c2d-85c4-632a2609a211,2b9ce591-ff13-4c2d-85c4-632a2609a211,0,1,689ca0ec-61ce-4590-b73b-ac81e8f1d459,689ca0ec-61ce-4590-b73b-ac81e8f1d459,0,1,3ea1895f-66d0-4bbb-a66b-0c9d411a7c55,3ea1895f-66d0-4bbb-a66b-0c9d411a7c55,0,1,55ad36d7-399e-4b82-8d1c-d45bd890abfe,55ad36d7-399e-4b82-8d1c-d45bd890abfe,0,1,0f3b9012-7bf6-4451-b0c3-139d98d9c2c1,0f3b9012-7bf6-4451-b0c3-139d98d9c2c1,0,1,1b39a65f-5425-4bcb-85bd-1425274af8a8,1b39a65f-5425-4bcb-85bd-1425274af8a8,0,1,392a0618-a41a-4713-a561-f3a80b85abd8,392a0618-a41a-4713-a561-f3a80b85abd8,0,1,a453384d-658d-40f1-ac69-578aa3a24e39,a453384d-658d-40f1-ac69-578aa3a24e39,0,1,2215a441-b9b1-4e5c-8df3-e6cee9226c43,2215a441-b9b1-4e5c-8df3-e6cee9226c43,0,1,2a8d4908-ea0d-4837-be3f-bd78f6b61254,2a8d4908-ea0d-4837-be3f-bd78f6b61254,0,1,ec1deb79-7369-4b26-8e91-f51399e8052a,ec1deb79-7369-4b26-8e91-f51399e8052a,0,1,75dde4fb-3a1a-450c-95c2-c1f95a781db9,75dde4fb-3a1a-450c-95c2-c1f95a781db9,0,1,0ae3ac56-160a-417e-9952-719d02e7f089,0ae3ac56-160a-417e-9952-719d02e7f089,0,1,f5b3983d-d22d-44a8-9069-0a60d8b858bf,f5b3983d-d22d-44a8-9069-0a60d8b858bf,0,1,a64b15fa-fc34-43fe-a366-d27c0f1c3df2,a64b15fa-fc34-43fe-a366-d27c0f1c3df2,0,1,8b13e848-8fd3-4326-bd18-5a5b12ed3dc5,8b13e848-8fd3-4326-bd18-5a5b12ed3dc5,0,1,b9a6b053-2b93-4946-9531-040d3131dcc5,b9a6b053-2b93-4946-9531-040d3131dcc5,0,1,9f36d26e-aa71-44d5-ac27-9aaa643555c3,9f36d26e-aa71-44d5-ac27-9aaa643555c3,0,1,87b8b5d7-d3d6-450a-adb1-5c875257ec80,87b8b5d7-d3d6-450a-adb1-5c875257ec80,0,1,e3640efe-e46c-4588-b251-dda23bf0641d,e3640efe-e46c-4588-b251-dda23bf0641d,0,1,bb6e6574-4328-4cf5-a043-a7d8f6c81414,bb6e6574-4328-4cf5-a043-a7d8f6c81414,0,1,b46b5090-5eb1-4950-9031-8b43f611fa9c,b46b5090-5eb1-4950-9031-8b43f611fa9c,0,1,522a4bff-34d3-46b2-8c66-0b30d881a86e,522a4bff-34d3-46b2-8c66-0b30d881a86e,0,1,3d7908b1-bd82-475e-8488-fafcbe3458ee,3d7908b1-bd82-475e-8488-fafcbe3458ee,0,1,1bac040b-83e4-402f-a9bf-d6a7b10c91e0,1bac040b-83e4-402f-a9bf-d6a7b10c91e0,0,1,2ccbc9aa-52d3-4cf3-8e83-77aaef82a38d,2ccbc9aa-52d3-4cf3-8e83-77aaef82a38d,0,1,e9c632b0-7977-4e44-ac56-882617ad7cdc,e9c632b0-7977-4e44-ac56-882617ad7cdc,0,1,e84acba7-7e0f-43e8-a545-6e53d529d5d4,e84acba7-7e0f-43e8-a545-6e53d529d5d4,0,1,3b089d90-7ece-4b74-a4dc-e436d9d31b3b,3b089d90-7ece-4b74-a4dc-e436d9d31b3b,0,1,0f9c08c2-e7fa-4ea0-a935-f927feb01131,0f9c08c2-e7fa-4ea0-a935-f927feb01131,0,1,6086d53f-f1b2-4126-ab46-64705fe63b87,6086d53f-f1b2-4126-ab46-64705fe63b87,0,1,62a6b1c9-8288-4fa1-a17d-241b85a5e4b0,62a6b1c9-8288-4fa1-a17d-241b85a5e4b0,0,1,6d042890-27b2-4efc-935e-8190bb57c037,6d042890-27b2-4efc-935e-8190bb57c037,0,1,23e79add-7f1c-422a-9df1-8f76ebf805df,23e79add-7f1c-422a-9df1-8f76ebf805df,0,1,9295d88f-0865-440c-a98a-4710c50211be,9295d88f-0865-440c-a98a-4710c50211be,0,1,90aa51ae-434d-48f4-bfe3-0e1dd3aeea6f,90aa51ae-434d-48f4-bfe3-0e1dd3aeea6f,0,1,38ac9a13-665a-4201-b5cc-687fe4a01130,38ac9a13-665a-4201-b5cc-687fe4a01130,0,1,97c59096-b2dc-45d0-a580-b3018a04f9af,97c59096-b2dc-45d0-a580-b3018a04f9af,0,1,5dcd8e28-b058-405a-bac4-defab7d4b789,5dcd8e28-b058-405a-bac4-defab7d4b789,0,1,6fbf63b7-1692-495e-a8ec-bdda182997a3,6fbf63b7-1692-495e-a8ec-bdda182997a3,0,1,077af11c-fd3c-4e87-b169-5f3137464f77,077af11c-fd3c-4e87-b169-5f3137464f77,0,1,8172256e-f51e-4de0-bd07-3668785f4cb9,8172256e-f51e-4de0-bd07-3668785f4cb9,0,1,ccb54dc9-3d12-43d0-af6a-138d3526f5d5,ccb54dc9-3d12-43d0-af6a-138d3526f5d5,0,1,da8f7f30-eb80-44db-a451-348306c90cd8,da8f7f30-eb80-44db-a451-348306c90cd8,0,1,b82bcff8-49c9-44a9-8a9f-4428b0cc54a5,b82bcff8-49c9-44a9-8a9f-4428b0cc54a5,0,1,870b4d6d-0b89-4eda-a2b3-5c6db7dbe864,870b4d6d-0b89-4eda-a2b3-5c6db7dbe864,0,1,c172aeaf-b444-47c0-baee-80ccd91fe934,c172aeaf-b444-47c0-baee-80ccd91fe934,0,1,757ea742-8c14-4e0a-a867-432eee5cfc64,757ea742-8c14-4e0a-a867-432eee5cfc64,0,1,b8c36d5a-7966-4978-9225-67502b9c60a4,b8c36d5a-7966-4978-9225-67502b9c60a4,0,1,37ea0c64-2fec-4c2e-922b-d3a2f01f3e22,37ea0c64-2fec-4c2e-922b-d3a2f01f3e22,0,1,9847676d-f44d-46a0-83e2-4a43a835caf8,9847676d-f44d-46a0-83e2-4a43a835caf8,0,1,43c18cae-21a9-413b-a350-d5cf826980f0,43c18cae-21a9-413b-a350-d5cf826980f0,0,1,16773cdb-b979-42d5-a2a5-d4b79e8737bd,16773cdb-b979-42d5-a2a5-d4b79e8737bd,0,1,c28a190a-f487-4e99-b8f8-6928268086f8,c28a190a-f487-4e99-b8f8-6928268086f8,0,1,94e02f76-8656-4999-9470-dd996118400c,94e02f76-8656-4999-9470-dd996118400c,0,1,9effd265-3783-44e2-8698-80dd82137546,9effd265-3783-44e2-8698-80dd82137546,0,1,bef52020-98f8-465b-8981-e5f8eed62308,bef52020-98f8-465b-8981-e5f8eed62308,0,1,19897ad0-bdb5-439c-b4a2-a773c0ce5cf5,19897ad0-bdb5-439c-b4a2-a773c0ce5cf5,0,1,e731dab7-df9e-48ae-8542-4c0c30666ae9,e731dab7-df9e-48ae-8542-4c0c30666ae9,0,1,f321e378-6d50-4567-8434-813f367d3a65,f321e378-6d50-4567-8434-813f367d3a65,0,1,6ac484a9-4d96-4521-9b8c-66212a365725,6ac484a9-4d96-4521-9b8c-66212a365725,0,1,0841ebfc-12e6-4b3e-a60f-861b15e1b63c,0841ebfc-12e6-4b3e-a60f-861b15e1b63c,0,1,bde05768-2dd6-4800-985d-27075f610cca,bde05768-2dd6-4800-985d-27075f610cca,0,1,d18956cf-e449-48cc-a127-01b5dc910ea2,d18956cf-e449-48cc-a127-01b5dc910ea2,0,1,8e5487a3-b5e5-40ca-88f3-5b0ea0c4d481,8e5487a3-b5e5-40ca-88f3-5b0ea0c4d481,0,1,5d338e31-a56b-45f0-8a62-0270ca543f6a,5d338e31-a56b-45f0-8a62-0270ca543f6a,0,1,e352fc19-96be-4410-a516-bc58cc234422,e352fc19-96be-4410-a516-bc58cc234422,0,1,9b742da4-1696-4c06-9dfa-dd85c9286c74,9b742da4-1696-4c06-9dfa-dd85c9286c74,0,1,a7098d41-a978-4c77-937c-8deebdfe0bcd,a7098d41-a978-4c77-937c-8deebdfe0bcd,0,1,db1062bc-4164-4095-9640-9804c0ebcd0b,db1062bc-4164-4095-9640-9804c0ebcd0b,0,1,c11d967b-1250-4345-90b0-011a96c5ae5e,c11d967b-1250-4345-90b0-011a96c5ae5e,0,1,ea7c61ff-745c-4908-9a94-bba022d12de4,ea7c61ff-745c-4908-9a94-bba022d12de4,0,1,ef8a82f2-d3e5-4f0d-8a16-024d9cdacce2,ef8a82f2-d3e5-4f0d-8a16-024d9cdacce2,0,1,24eed105-f612-4340-ad79-388a7b39b58c,24eed105-f612-4340-ad79-388a7b39b58c,0,1,8e4bd2ac-d555-490e-87ab-1b0cdd6f72e9,8e4bd2ac-d555-490e-87ab-1b0cdd6f72e9,0,1,4d6683a3-1edd-4d04-8e02-0be002e4e5a4,4d6683a3-1edd-4d04-8e02-0be002e4e5a4,0,1,c7ffd8ab-15e9-4cf1-a7fd-d05534dff000,c7ffd8ab-15e9-4cf1-a7fd-d05534dff000,0,1,53caada5-1d53-45dc-9432-90075ddca890,53caada5-1d53-45dc-9432-90075ddca890,0,1,d1472d23-954b-4069-b2d6-df08c6ec0be1,d1472d23-954b-4069-b2d6-df08c6ec0be1,0,1,93fe2ce6-7193-42bc-a966-4653b7989eaa,93fe2ce6-7193-42bc-a966-4653b7989eaa,0,1,6a2add61-edb7-4561-bae9-06b3741e7726,6a2add61-edb7-4561-bae9-06b3741e7726,0,1,a7fe0aa5-722c-4a09-889b-ee422421addc,a7fe0aa5-722c-4a09-889b-ee422421addc,0,1,798bd34c-d0ee-4590-9b1d-8bc47e42ca8c,798bd34c-d0ee-4590-9b1d-8bc47e42ca8c,0,1,0c838a31-2b08-447c-b39a-a613cfba526c,0c838a31-2b08-447c-b39a-a613cfba526c,0,1,b25083c5-9b97-49a4-b6c3-bbf8d7f91cd3,b25083c5-9b97-49a4-b6c3-bbf8d7f91cd3,0,1,86c679c0-3531-4622-9a1f-3d9d6ccdd431,86c679c0-3531-4622-9a1f-3d9d6ccdd431,0,1,3bc2ca38-4a10-4ebd-a5dc-3418db494f0c,3bc2ca38-4a10-4ebd-a5dc-3418db494f0c,0,1,670c62c1-1a33-4dec-9540-5b4c1fe29074,670c62c1-1a33-4dec-9540-5b4c1fe29074,0,1,cc664d81-d0af-4d25-ae29-64f422e51bf2,cc664d81-d0af-4d25-ae29-64f422e51bf2,0,1,e1314cd1-e662-4c29-ad51-492cb0029883,e1314cd1-e662-4c29-ad51-492cb0029883,0,1,0cf49621-afc5-4c8d-a1b5-f8c30db9f415,0cf49621-afc5-4c8d-a1b5-f8c30db9f415,0,1,4718392b-477c-496b-9d28-ddbdaa7a04f2,4718392b-477c-496b-9d28-ddbdaa7a04f2,0,1,879844f0-30b4-47f5-8d2e-5fea29910368,879844f0-30b4-47f5-8d2e-5fea29910368,0,1,303334ba-2785-47fe-a094-84f9dea33be2,303334ba-2785-47fe-a094-84f9dea33be2,0,1,9690842c-7a2c-4b5d-a238-f730afc49a7b,9690842c-7a2c-4b5d-a238-f730afc49a7b,0,1,04424730-6992-4a5b-838b-7a7c16dedbd0,04424730-6992-4a5b-838b-7a7c16dedbd0,0,1,cd6b749d-55a4-4e10-a933-8d97bfe2f9df,cd6b749d-55a4-4e10-a933-8d97bfe2f9df,0,1,240bec31-cd59-477b-8459-8e3278da22dc,240bec31-cd59-477b-8459-8e3278da22dc,0,1,b76c3bd6-924a-4378-acbe-6f17232b201b,b76c3bd6-924a-4378-acbe-6f17232b201b,0,1,e0519f0c-9c99-4f5c-a3a9-27adce45737d,e0519f0c-9c99-4f5c-a3a9-27adce45737d,0,1,0874a3c0-0d16-4172-b467-f0666d5fcaee,0874a3c0-0d16-4172-b467-f0666d5fcaee,0,1,cc380a19-ab29-4f20-93ad-9a58cd4de56e,cc380a19-ab29-4f20-93ad-9a58cd4de56e,0,1,6a5f7521-270e-476e-88ec-a8cf79ea61a6,6a5f7521-270e-476e-88ec-a8cf79ea61a6,0,1,9bb841e7-e629-4a1f-8ff6-f8bca0b2b133,9bb841e7-e629-4a1f-8ff6-f8bca0b2b133,0,1,74067eee-6cd4-4ae3-becc-457ecb51dc9a,74067eee-6cd4-4ae3-becc-457ecb51dc9a,0,1,e54a8786-86a4-48e3-a210-aaae4e5fce8c,e54a8786-86a4-48e3-a210-aaae4e5fce8c,0,1,86c86ea2-d14e-4443-b36c-c1c17c4f768a,86c86ea2-d14e-4443-b36c-c1c17c4f768a,0,1,14512818-58b0-44cc-b00d-d37913c57aad,14512818-58b0-44cc-b00d-d37913c57aad,0,1,57964dd6-4b0b-4590-bc44-de744cc423af,57964dd6-4b0b-4590-bc44-de744cc423af,0,1,364cbfe2-bc44-4387-aa7e-6b4aa086c9e9,364cbfe2-bc44-4387-aa7e-6b4aa086c9e9,0,1,343b979a-97e3-4eac-a314-3bd3eea9c15c,343b979a-97e3-4eac-a314-3bd3eea9c15c,0,1,b2f17ef1-3f6f-4029-b3e2-28d6b79c5b76,b2f17ef1-3f6f-4029-b3e2-28d6b79c5b76,0,1,f5bb88eb-c239-4ae3-a297-dfbbd679e008,f5bb88eb-c239-4ae3-a297-dfbbd679e008,0,1,bb350b39-1f4d-460a-98c9-8d2308cf22f0,bb350b39-1f4d-460a-98c9-8d2308cf22f0,0,1,f259b6b4-d582-429f-a16f-027a6bcb7438,f259b6b4-d582-429f-a16f-027a6bcb7438,0,1,9f32e85c-2ed6-41db-b0ec-6d8596940e80,9f32e85c-2ed6-41db-b0ec-6d8596940e80,0,1,46e0522b-b88b-43b2-9067-a5359e90994b,46e0522b-b88b-43b2-9067-a5359e90994b,0,1,727c7c01-83e6-4d59-afa4-ee36f1cbacf2,727c7c01-83e6-4d59-afa4-ee36f1cbacf2,0,1,72d41d01-9c9d-4fbe-8a39-932d82d171ef,72d41d01-9c9d-4fbe-8a39-932d82d171ef,0,1,697d5715-dd04-40be-9b28-539734725158,697d5715-dd04-40be-9b28-539734725158,0,1,d831a8ac-88a4-4191-ab0b-7538dfb3e7d7,d831a8ac-88a4-4191-ab0b-7538dfb3e7d7,0,1,d95fcb37-fc65-466d-93e2-489f41683276,d95fcb37-fc65-466d-93e2-489f41683276,0,1,c6b0d31e-7b68-4c7f-a565-0ac8a7c11143,c6b0d31e-7b68-4c7f-a565-0ac8a7c11143,0,1,a27a9296-46bb-49a1-8308-db675baa81d0,a27a9296-46bb-49a1-8308-db675baa81d0,0,1,1456f317-360c-4190-b2d1-1be7484369a5,1456f317-360c-4190-b2d1-1be7484369a5,0,1,5ac74bb3-a4df-47db-ad87-6cb95b85c51f,5ac74bb3-a4df-47db-ad87-6cb95b85c51f,0,1,4867948f-b027-44ae-b78c-a94e00eed52b,4867948f-b027-44ae-b78c-a94e00eed52b,0,1,39ed5463-b1c0-44bb-9d71-4ef08007a7d0,39ed5463-b1c0-44bb-9d71-4ef08007a7d0,0,1,3d4cb11a-7ce7-4c46-a427-99d6f41f08bf,3d4cb11a-7ce7-4c46-a427-99d6f41f08bf,0,1,56cc2ba7-fee3-4dcb-9a2a-93dc94a5ee1f,56cc2ba7-fee3-4dcb-9a2a-93dc94a5ee1f,0,1,ef044879-e731-418a-b917-6a685f27c5f4,ef044879-e731-418a-b917-6a685f27c5f4,0,1,618d13d5-fd1f-4b70-ad45-dd6a17a50730,618d13d5-fd1f-4b70-ad45-dd6a17a50730,0,1,58037b76-b548-4f07-bd67-67e552a5c6e5,58037b76-b548-4f07-bd67-67e552a5c6e5,0,1,00e48a23-eb5b-4a29-b36c-218ab9760f23,00e48a23-eb5b-4a29-b36c-218ab9760f23,0,1,68f19104-5fa3-4f28-a84b-bf68c3bed49b,68f19104-5fa3-4f28-a84b-bf68c3bed49b,0,1,ab0b6824-99ba-4b8d-857d-ed8ef017d499,ab0b6824-99ba-4b8d-857d-ed8ef017d499,0,1,f88ccd7a-8d15-4b24-addf-da522a0b4a43,f88ccd7a-8d15-4b24-addf-da522a0b4a43,0,1,0f8e87d4-ffb7-4cff-a2d3-6d5c5219ff0b,0f8e87d4-ffb7-4cff-a2d3-6d5c5219ff0b,0,1,1511c2e3-aeb4-422a-b6ae-03412b714c93,1511c2e3-aeb4-422a-b6ae-03412b714c93,0,1,349378d1-abe3-44de-84a4-d525b08e0474,349378d1-abe3-44de-84a4-d525b08e0474,0,1,1526b18d-7fab-414e-a5b2-377b67ac0b55,1526b18d-7fab-414e-a5b2-377b67ac0b55,0,1,c561fe6b-53ea-435b-a230-1850e2dc1ff5,c561fe6b-53ea-435b-a230-1850e2dc1ff5,0,1,aba7605f-6baf-42a8-b5ad-8f71c780b81f,aba7605f-6baf-42a8-b5ad-8f71c780b81f,0,1,8fc19eca-1a15-4758-af4b-79637e51edfb,8fc19eca-1a15-4758-af4b-79637e51edfb,0,1,be9144ce-5560-47bb-8c5e-9beefd15bfc3,be9144ce-5560-47bb-8c5e-9beefd15bfc3,0,1,ad09d1e6-5982-4e1c-864e-452ac5b2915a,ad09d1e6-5982-4e1c-864e-452ac5b2915a,0,1,84a159ed-bc5f-4497-94d1-94b187b0bffe,84a159ed-bc5f-4497-94d1-94b187b0bffe,0,1,0dcc3bbf-afbe-4a4e-bc4a-17534d5fab28,0dcc3bbf-afbe-4a4e-bc4a-17534d5fab28,0,1,bf75c4de-b36a-4a7f-8d84-9fa3d020a6cb,bf75c4de-b36a-4a7f-8d84-9fa3d020a6cb,0,1,f95adb50-fa0b-434c-93dd-b7fd211220b7,f95adb50-fa0b-434c-93dd-b7fd211220b7,0,1,d02fe5f5-412c-4c4f-bfc7-c1d7206cd092,d02fe5f5-412c-4c4f-bfc7-c1d7206cd092,0,1,2233ce53-b8a8-4c83-97a2-683c8575462a,2233ce53-b8a8-4c83-97a2-683c8575462a,0,1,2071f210-dc13-43c0-a58e-b982821d6842,2071f210-dc13-43c0-a58e-b982821d6842,0,1,3cda70d0-3116-4508-82ea-5ea0f0921262,3cda70d0-3116-4508-82ea-5ea0f0921262,0,1,d5588c0d-3e94-485b-a7e9-45f5cf74df9e,d5588c0d-3e94-485b-a7e9-45f5cf74df9e,0,1,c2ef8d6b-de7b-430d-ac30-76cdaf0579c2,c2ef8d6b-de7b-430d-ac30-76cdaf0579c2,0,1,f415296e-fceb-4835-abe9-17bb17a5d5e5,f415296e-fceb-4835-abe9-17bb17a5d5e5,0,1,0e805e1f-3797-4ef9-94d3-0ec58ac1b605,0e805e1f-3797-4ef9-94d3-0ec58ac1b605,0,1,8677bd53-5569-4d44-b7ce-d1b3fe12c78d,8677bd53-5569-4d44-b7ce-d1b3fe12c78d,0,1,19056365-9ff1-4733-876e-a7ebdbbe0557,19056365-9ff1-4733-876e-a7ebdbbe0557,0,1,c8679d82-075c-4556-8231-c004d144fe61,c8679d82-075c-4556-8231-c004d144fe61,0,1,5e09dc5e-bbb7-4c38-b609-940c24f63c84,5e09dc5e-bbb7-4c38-b609-940c24f63c84,0,1,017b28eb-8ba9-465e-a748-20eadbeb4ea2,017b28eb-8ba9-465e-a748-20eadbeb4ea2,0,1,c0bb2d66-94c9-4bc6-afd5-534075e8395b,c0bb2d66-94c9-4bc6-afd5-534075e8395b,0,1,db7cc693-1645-4416-a9d9-5a7584cd3bbc,db7cc693-1645-4416-a9d9-5a7584cd3bbc,0,1,c849fb09-7833-49c8-9461-98426dc6c0af,c849fb09-7833-49c8-9461-98426dc6c0af,0,1,6c58fc3a-37f8-44b7-b076-2c10ce09b554,6c58fc3a-37f8-44b7-b076-2c10ce09b554,0,1,8ca0258c-96d8-4a12-b94f-db968195ee0a,8ca0258c-96d8-4a12-b94f-db968195ee0a,0,1,245c07a9-98b0-452b-b899-dc8751ab7ce0,245c07a9-98b0-452b-b899-dc8751ab7ce0,1,0,b0ca1b85-e1de-4b7c-8261-7f9e8a6a72eb,b0ca1b85-e1de-4b7c-8261-7f9e8a6a72eb,1,0,ae67dfe5-bb36-4400-81f5-8dab1fd0ca6e,ae67dfe5-bb36-4400-81f5-8dab1fd0ca6e,1,0,91d7687b-7627-473f-a08d-433f9d385107,91d7687b-7627-473f-a08d-433f9d385107,1,0,83db1b00-e9e3-41da-8a59-47589dcfd618,83db1b00-e9e3-41da-8a59-47589dcfd618,1,0,91d2d798-1498-4c52-aa7b-99db4b992876,91d2d798-1498-4c52-aa7b-99db4b992876,1,0,e85a03d3-e7c7-4058-992a-515a557d9e52,e85a03d3-e7c7-4058-992a-515a557d9e52,1,0,d3a1d247-8f4a-45af-9861-7e313a100209,d3a1d247-8f4a-45af-9861-7e313a100209,1,0,83385f31-2cdf-44a1-85c3-461e4ad5fd45,83385f31-2cdf-44a1-85c3-461e4ad5fd45,1,0,b55b06db-604e-4fb9-9253-638c747bd8f9,b55b06db-604e-4fb9-9253-638c747bd8f9,1,0,9cd9a3e1-b52c-4151-abd3-2744ed03cc1b,9cd9a3e1-b52c-4151-abd3-2744ed03cc1b,1,0,9aa0c1ef-45b4-405b-ad6f-ebcf876e6318,9aa0c1ef-45b4-405b-ad6f-ebcf876e6318,1,0,deb69010-80b0-4e28-acc7-8c50e8e6f873,deb69010-80b0-4e28-acc7-8c50e8e6f873,1,0,1a9177fe-6699-42b3-9588-eed9c6008c2d,1a9177fe-6699-42b3-9588-eed9c6008c2d,1,0,4f49412a-fbbe-4ee1-9c2b-affe5266bba7,4f49412a-fbbe-4ee1-9c2b-affe5266bba7,1,0,ae698468-f42a-4400-aee6-fd849740e634,ae698468-f42a-4400-aee6-fd849740e634,1,0,d62bdb25-f261-4282-aa72-52e2b107642c,d62bdb25-f261-4282-aa72-52e2b107642c,1,0,ddec19a2-2a76-4eeb-9cbb-6bc2b4a32bc8,ddec19a2-2a76-4eeb-9cbb-6bc2b4a32bc8,1,0,6438435e-97cc-4bd2-98dc-e21cee55bb0f,6438435e-97cc-4bd2-98dc-e21cee55bb0f,1,0,00579e31-e97d-4d79-ba25-b8d500a17e7f,00579e31-e97d-4d79-ba25-b8d500a17e7f,1,0,5001bea4-c8f9-4950-9eda-d33125e3bb46,5001bea4-c8f9-4950-9eda-d33125e3bb46,1,0,e815010d-e03d-46e4-b482-c1556902cc26,e815010d-e03d-46e4-b482-c1556902cc26,1,0,98bdfd19-b993-43bd-b2e1-3535d001ff29,98bdfd19-b993-43bd-b2e1-3535d001ff29,1,0,00a1fdb2-d233-4179-b78a-a7e27d9c03c5,00a1fdb2-d233-4179-b78a-a7e27d9c03c5,1,0,dd03e170-4186-495b-ae1c-fc66385d7ccf,dd03e170-4186-495b-ae1c-fc66385d7ccf,1,0,81fbb02e-76b2-4bca-bb3b-871e4e969a3c,81fbb02e-76b2-4bca-bb3b-871e4e969a3c,1,0,cdef5df6-f3a1-4950-b197-4f375914f885,cdef5df6-f3a1-4950-b197-4f375914f885,1,0,a1185a4c-7351-48b0-b662-61f61a1ad715,a1185a4c-7351-48b0-b662-61f61a1ad715,1,0,28a25822-2306-409a-a7c8-6f7e42bf25e8,28a25822-2306-409a-a7c8-6f7e42bf25e8,1,0,a45fa0c3-c363-4465-861f-13cedfeb79dd,a45fa0c3-c363-4465-861f-13cedfeb79dd,1,0,a72517c3-8c91-4e40-81ac-83c762789e87,a72517c3-8c91-4e40-81ac-83c762789e87,1,0,0233b335-7e26-4661-9850-8ab09d3178e3,0233b335-7e26-4661-9850-8ab09d3178e3,1,0,d942d536-5d01-4571-b910-abd973996a38,d942d536-5d01-4571-b910-abd973996a38,1,0,b82a7103-b872-49c3-b632-81d5a0051136,b82a7103-b872-49c3-b632-81d5a0051136,1,0,4b17ac35-78cb-4d01-bb08-659c0a93e8ce,4b17ac35-78cb-4d01-bb08-659c0a93e8ce,1,0,20c2053c-8ebd-4c07-8d95-956b424d047c,20c2053c-8ebd-4c07-8d95-956b424d047c,1,0,7c9dee81-7e85-4d26-84c3-66b0d770ac5a,7c9dee81-7e85-4d26-84c3-66b0d770ac5a,1,0,bef6081e-f377-41d6-83a1-b0e218a3fb46,bef6081e-f377-41d6-83a1-b0e218a3fb46,1,0,9b67bfd5-ef23-4205-b7ba-9466517e9999,9b67bfd5-ef23-4205-b7ba-9466517e9999,1,0,ea2c4c8e-23cc-4884-812e-1e959da48afc,ea2c4c8e-23cc-4884-812e-1e959da48afc,1,0,9474b4f1-b1bb-4fcf-acdb-a149a09b8490,9474b4f1-b1bb-4fcf-acdb-a149a09b8490,1,0,46b0a5b3-1fa7-44ff-a941-c6de47d36e77,46b0a5b3-1fa7-44ff-a941-c6de47d36e77,0,1,ea97b67e-1182-49c3-b95a-8fcce4cd3d09,ea97b67e-1182-49c3-b95a-8fcce4cd3d09,0,1,592f55e1-b004-44ef-878a-6c2016ccbeb0,592f55e1-b004-44ef-878a-6c2016ccbeb0,0,1,19add2bd-eede-4a05-901b-cf8ce49a638f,19add2bd-eede-4a05-901b-cf8ce49a638f,0,1,becf53b6-3fbc-4c70-822f-4a70b0434353,becf53b6-3fbc-4c70-822f-4a70b0434353,0,1,7dc0429d-146a-4c4f-b122-5d5c053bd4ed,7dc0429d-146a-4c4f-b122-5d5c053bd4ed,0,1,f8dc2485-685b-4e41-834a-a2cbbbe4d53b,f8dc2485-685b-4e41-834a-a2cbbbe4d53b,0,1,c38d8135-e11f-4860-b370-84ff279b7fbd,c38d8135-e11f-4860-b370-84ff279b7fbd,0,1,ee0798f5-47a8-4118-a25c-cfd3473007c1,ee0798f5-47a8-4118-a25c-cfd3473007c1,0,1,652ee894-047b-4a5a-a500-2d61b4c4a473,652ee894-047b-4a5a-a500-2d61b4c4a473,0,1,8a95d199-9bd1-4cbb-9d1a-941e80fa2105,8a95d199-9bd1-4cbb-9d1a-941e80fa2105,0,1,fef727fa-f63b-4467-9367-73a2425b19e3,fef727fa-f63b-4467-9367-73a2425b19e3,0,1,3b9c03bc-8517-498f-8052-e53854fb0753,3b9c03bc-8517-498f-8052-e53854fb0753,0,1,33f8cd94-71e7-4703-92c3-22690fbd871a,33f8cd94-71e7-4703-92c3-22690fbd871a,0,1,b6e5de4d-0156-4342-b646-6e6920a4bd3a,b6e5de4d-0156-4342-b646-6e6920a4bd3a,0,1,c03f9972-5a1f-449b-b170-5a958c2b5846,c03f9972-5a1f-449b-b170-5a958c2b5846,0,1,25896075-2484-4879-8310-7f5680d80b48,25896075-2484-4879-8310-7f5680d80b48,0,1,09858042-6284-4499-8055-c1b5b783ce5f,09858042-6284-4499-8055-c1b5b783ce5f,0,1,1e3c444d-6f73-4eb0-a12d-7106daf36b14,1e3c444d-6f73-4eb0-a12d-7106daf36b14,0,1,e417e2ab-5e25-40a9-8dc2-9552a4fe1a38,e417e2ab-5e25-40a9-8dc2-9552a4fe1a38,0,1,1e63c656-a0e7-4b33-8bac-2a196e028ffa,1e63c656-a0e7-4b33-8bac-2a196e028ffa,0,1,085cbea9-1df1-4ee9-afb7-da2bf313697e,085cbea9-1df1-4ee9-afb7-da2bf313697e,0,1,36b080d5-a870-46fa-bf8d-0a06e3a9719f,36b080d5-a870-46fa-bf8d-0a06e3a9719f,0,1,b3152292-5546-4896-ad24-cb41057698d8,b3152292-5546-4896-ad24-cb41057698d8,0,1,bfa90848-930f-433d-8f6f-c11ac2c5eba2,bfa90848-930f-433d-8f6f-c11ac2c5eba2,0,1,a4d767a1-d2e6-4e0a-ab35-9207eef54998,a4d767a1-d2e6-4e0a-ab35-9207eef54998,0,1,f38069e7-6d69-4be9-8463-bc7a33158a1a,f38069e7-6d69-4be9-8463-bc7a33158a1a,0,1,e50cb13a-151b-45d2-a7b7-d23440ddfa24,e50cb13a-151b-45d2-a7b7-d23440ddfa24,0,1,cc3a7f15-4db6-445e-b282-f44d0460b7d3,cc3a7f15-4db6-445e-b282-f44d0460b7d3,0,1,0b8bfb71-d430-4bdf-8391-a534b3a15fc3,0b8bfb71-d430-4bdf-8391-a534b3a15fc3,0,1,0d8770aa-fa6e-471c-92c8-b96576927ef0,0d8770aa-fa6e-471c-92c8-b96576927ef0,0,1,e25b2b10-bf08-42db-9642-861efc5e583b,e25b2b10-bf08-42db-9642-861efc5e583b,0,1,b8a32c33-4e15-4c21-baab-64a86d44321b,b8a32c33-4e15-4c21-baab-64a86d44321b,0,1,e7d51ada-f286-4519-bfae-ece95dd4d7b0,e7d51ada-f286-4519-bfae-ece95dd4d7b0,0,1,d7dd9a03-6818-4987-8f39-58e1c906569f,d7dd9a03-6818-4987-8f39-58e1c906569f,0,1,fce028b8-b530-49f0-b6ad-a28d03e19b0f,fce028b8-b530-49f0-b6ad-a28d03e19b0f,0,1,301eea20-0e7f-441e-a531-28b4627dfd93,301eea20-0e7f-441e-a531-28b4627dfd93,0,1,38fc1e6e-7cd3-437b-b429-6655be34cd01,38fc1e6e-7cd3-437b-b429-6655be34cd01,0,1,47da49ee-b243-4e78-9c8f-bb26c60e6136,47da49ee-b243-4e78-9c8f-bb26c60e6136,0,1,39bee714-cacd-4d48-97a5-c838660e049a,39bee714-cacd-4d48-97a5-c838660e049a,0,1,9ed2c756-80a1-4559-8494-b7a9b82a4519,9ed2c756-80a1-4559-8494-b7a9b82a4519,0,1,69149ce1-d3f8-4e12-be8f-b328ade60882,69149ce1-d3f8-4e12-be8f-b328ade60882,0,1,ff592ecb-eb08-4554-87bf-1d2935b21d3c,ff592ecb-eb08-4554-87bf-1d2935b21d3c,0,1,d975aef4-8da8-4486-baeb-a99c48cff0ec,d975aef4-8da8-4486-baeb-a99c48cff0ec,0,1,75666bb9-f6d3-4dd6-8220-427a81f23fc9,75666bb9-f6d3-4dd6-8220-427a81f23fc9,0,1,9da27139-0bed-47b0-aef6-246929968502,9da27139-0bed-47b0-aef6-246929968502,0,1,68e82adf-bc03-4f23-9ec4-749ed42241da,68e82adf-bc03-4f23-9ec4-749ed42241da,0,1,7ae5d177-a3e6-4989-b10c-8e0a605c26d9,7ae5d177-a3e6-4989-b10c-8e0a605c26d9,0,1,41f87891-ddd5-4e0f-a4f2-8039fb71981b,41f87891-ddd5-4e0f-a4f2-8039fb71981b,0,1,29f2094a-d0d1-425c-8161-45a9ba186e19,29f2094a-d0d1-425c-8161-45a9ba186e19,0,1,a57f6dc1-59d7-4311-8acd-65ce57a9f386,a57f6dc1-59d7-4311-8acd-65ce57a9f386,0,1,893b2dd9-a939-4799-9b78-50d788a5f3ba,893b2dd9-a939-4799-9b78-50d788a5f3ba,0,1,68229ecd-7ecc-4194-a3e5-f8df39b55d6a,68229ecd-7ecc-4194-a3e5-f8df39b55d6a,0,1,e4842271-4fc0-4e15-afef-876f05af78c0,e4842271-4fc0-4e15-afef-876f05af78c0,0,1,31ee6430-b65d-42fa-859b-c4f1c40686ae,31ee6430-b65d-42fa-859b-c4f1c40686ae,0,1,c59e11f3-6bcb-404a-9d76-1416c12be354,c59e11f3-6bcb-404a-9d76-1416c12be354,0,1,c1a1f12b-3978-4047-956e-a5c7de8371a0,c1a1f12b-3978-4047-956e-a5c7de8371a0,0,1,ac39b903-0c60-417e-a50f-49ed375424f5,ac39b903-0c60-417e-a50f-49ed375424f5,0,1,135d57fe-d420-4bb0-9120-e43fd9b55c16,135d57fe-d420-4bb0-9120-e43fd9b55c16,0,1,9893e2d6-f3f8-4d73-bb06-19bf26d216ab,9893e2d6-f3f8-4d73-bb06-19bf26d216ab,0,1,16392cf6-dd83-4df0-a54b-6efc29778a89,16392cf6-dd83-4df0-a54b-6efc29778a89,0,1,a4ec7d3d-2d01-436c-98ec-ec42733ee5c6,a4ec7d3d-2d01-436c-98ec-ec42733ee5c6,0,1,10db9f99-c7d1-4b16-9ea2-9bfc2aa4ddb5,10db9f99-c7d1-4b16-9ea2-9bfc2aa4ddb5,0,1,230722e6-942f-4594-be89-eff59c6572bf,230722e6-942f-4594-be89-eff59c6572bf,0,1,b43abcf7-1f1d-4a59-b0d1-0a493c3a4785,b43abcf7-1f1d-4a59-b0d1-0a493c3a4785,0,1,eaf6045f-9ac0-43ef-b165-a45be75a4d44,eaf6045f-9ac0-43ef-b165-a45be75a4d44,0,1,237dab99-ed72-432c-ad01-c6045d74f000,237dab99-ed72-432c-ad01-c6045d74f000,0,1,a1130128-cc48-4555-93a2-99e7f74f77dc,a1130128-cc48-4555-93a2-99e7f74f77dc,0,1,94e08dcf-3885-4a73-82ab-cb291f1cf95f,94e08dcf-3885-4a73-82ab-cb291f1cf95f,0,1,405c52c4-25fe-45ff-abab-bf01041e768d,405c52c4-25fe-45ff-abab-bf01041e768d,0,1,55ce840b-5838-4107-886d-f935b9907bd8,55ce840b-5838-4107-886d-f935b9907bd8,0,1,0b3088c9-7fb9-4979-acce-16d7ae7ba6b7,0b3088c9-7fb9-4979-acce-16d7ae7ba6b7,0,1,f1753bda-16db-4b00-a16a-37ddade8403f,f1753bda-16db-4b00-a16a-37ddade8403f,0,1,a1875d63-4303-46f1-bdea-fc529b5891f3,a1875d63-4303-46f1-bdea-fc529b5891f3,0,1,59123b12-6052-4480-9c86-f4de1b5cdc04,59123b12-6052-4480-9c86-f4de1b5cdc04,0,1,133f181a-fade-4182-826d-904fac780326,133f181a-fade-4182-826d-904fac780326,0,1,f60cb71a-f451-426a-aa3a-aa266b8da149,f60cb71a-f451-426a-aa3a-aa266b8da149,0,1,641ebe22-7135-4adb-bbd6-e0c37d246a2d,641ebe22-7135-4adb-bbd6-e0c37d246a2d,0,1,f71ba01e-9f6b-4241-8048-4368c8888756,f71ba01e-9f6b-4241-8048-4368c8888756,0,1,6aa814fa-417e-428c-951e-6efd9d0775da,6aa814fa-417e-428c-951e-6efd9d0775da,0,1,a247efe1-8608-4780-9cc8-54e29944475b,a247efe1-8608-4780-9cc8-54e29944475b,0,1,4b8c3c82-6e8f-469e-8a80-144361d1d0b2,4b8c3c82-6e8f-469e-8a80-144361d1d0b2,0,1,a8f162e9-3f59-41a5-b82f-da20928213c7,a8f162e9-3f59-41a5-b82f-da20928213c7,0,1,ade68dfd-5037-4fd7-b043-9514e3fe6342,ade68dfd-5037-4fd7-b043-9514e3fe6342,0,1,7b008aad-9d05-43e1-8295-62ae58cfff42,7b008aad-9d05-43e1-8295-62ae58cfff42,0,1,fdaf9255-d621-4a98-9530-f618ed440795,fdaf9255-d621-4a98-9530-f618ed440795,0,1,48cefa96-46c7-4870-a096-951dcbae479a,48cefa96-46c7-4870-a096-951dcbae479a,0,1,d74e01cc-941b-4974-8771-0bd2e0d86724,d74e01cc-941b-4974-8771-0bd2e0d86724,0,1,0daac965-2026-4acc-8ba1-3c1f01779257,0daac965-2026-4acc-8ba1-3c1f01779257,0,1,65a331c0-7501-49f6-8027-35b703d11834,65a331c0-7501-49f6-8027-35b703d11834,0,1,c67fab0a-704f-43ae-bd03-4b5b1a880b24,c67fab0a-704f-43ae-bd03-4b5b1a880b24,0,1,aae09896-3b22-4d7d-9059-e47660f8b88b,aae09896-3b22-4d7d-9059-e47660f8b88b,0,1,c1703a14-61a0-4461-8ad8-7173e2c431fe,c1703a14-61a0-4461-8ad8-7173e2c431fe,0,1,b1b5841d-0cf9-4de5-8561-b35b8f286d21,b1b5841d-0cf9-4de5-8561-b35b8f286d21,0,1,aecf5653-3005-43f2-ab49-40977e70f02b,aecf5653-3005-43f2-ab49-40977e70f02b,0,1,4093fe34-7557-4f15-831b-d654b94b8010,4093fe34-7557-4f15-831b-d654b94b8010,0,1,ee10023f-5c63-4cb3-8e6c-db566c788c9d,ee10023f-5c63-4cb3-8e6c-db566c788c9d,0,1,475f8577-a141-496b-94e1-53215c0dd017,475f8577-a141-496b-94e1-53215c0dd017,0,1,97638762-c01e-4c8f-88e2-b356e517e18f,97638762-c01e-4c8f-88e2-b356e517e18f,0,1,074e34f2-e9be-4bd3-beca-8b916772e2be,074e34f2-e9be-4bd3-beca-8b916772e2be,0,1,28fecf1b-7cab-4087-b66e-2052edb8ce3a,28fecf1b-7cab-4087-b66e-2052edb8ce3a,0,1,252eb146-0d23-46ae-9feb-ee04531dd7d8,252eb146-0d23-46ae-9feb-ee04531dd7d8,0,1,d85b00b7-b0d8-4b91-8d7f-0c2da524d446,d85b00b7-b0d8-4b91-8d7f-0c2da524d446,0,1,cc906f05-5ea6-43cb-a084-c4ee51ca4bd5,cc906f05-5ea6-43cb-a084-c4ee51ca4bd5,0,1,f5417147-4d2a-4e49-911b-2bb5eccb8441,f5417147-4d2a-4e49-911b-2bb5eccb8441,0,1,20fbed2b-4393-4de0-a71d-017a336bdac0,20fbed2b-4393-4de0-a71d-017a336bdac0,0,1,2ca4fc58-798b-4fc3-8673-27688ce7a1f2,2ca4fc58-798b-4fc3-8673-27688ce7a1f2,0,1,41f6f6d1-b7cf-4477-907b-ce69fc08c799,41f6f6d1-b7cf-4477-907b-ce69fc08c799,0,1,0d124daf-dc52-4391-a2d9-3c43a45c422c,0d124daf-dc52-4391-a2d9-3c43a45c422c,0,1,a300ecc3-8031-4a50-a17d-b08cf3a72139,a300ecc3-8031-4a50-a17d-b08cf3a72139,0,1,e7e78b7e-b103-40d6-8064-f84e2d86ca3d,e7e78b7e-b103-40d6-8064-f84e2d86ca3d,0,1,44b28019-01c0-468d-9b60-e050ff8b71ac,44b28019-01c0-468d-9b60-e050ff8b71ac,0,1,69f6173c-a570-41ff-b07f-5b85f7187515,69f6173c-a570-41ff-b07f-5b85f7187515,0,1,9c443dd3-4acb-4c5a-9c4b-af8b0c87e861,9c443dd3-4acb-4c5a-9c4b-af8b0c87e861,0,1,98153b59-8cc6-4dc7-b945-99c1146d07da,98153b59-8cc6-4dc7-b945-99c1146d07da,0,1,3e2828b4-2b55-471e-ac69-55119c2480f8,3e2828b4-2b55-471e-ac69-55119c2480f8,0,1,df9db8d5-c5c2-4a9d-88fe-77247b2c417e,df9db8d5-c5c2-4a9d-88fe-77247b2c417e,0,1,9da32b56-ff89-4739-bb99-615074b72298,9da32b56-ff89-4739-bb99-615074b72298,0,1,08baf3ee-b8ca-4f29-89fc-c15344064ad3,08baf3ee-b8ca-4f29-89fc-c15344064ad3,0,1,01b85e3a-9920-425a-9de5-5079fffeef93,01b85e3a-9920-425a-9de5-5079fffeef93,0,1,82e12316-cc64-4d2f-83fa-054b5a738f02,82e12316-cc64-4d2f-83fa-054b5a738f02,0,1,6b70f7e1-8bdb-4fc4-9b95-0e045bfa288c,6b70f7e1-8bdb-4fc4-9b95-0e045bfa288c,0,1,a890be6b-f050-4ea4-a388-570948ffd22b,a890be6b-f050-4ea4-a388-570948ffd22b,0,1,b00c31d6-4fc6-4189-9f72-f91742ec705f,b00c31d6-4fc6-4189-9f72-f91742ec705f,0,1,1333101b-82e8-41a9-a793-5af5dcd6f68a,1333101b-82e8-41a9-a793-5af5dcd6f68a,0,1,766c9bee-b0fc-4a7f-b88e-cd8c4aad73b8,766c9bee-b0fc-4a7f-b88e-cd8c4aad73b8,0,1,3ba630c2-cdc1-40a8-a24e-538ddb1abe38,3ba630c2-cdc1-40a8-a24e-538ddb1abe38,0,1,0f25646a-90f9-4747-a778-7efdaabc284c,0f25646a-90f9-4747-a778-7efdaabc284c,0,1,3a2d9324-8260-478d-ad62-a964d860cb8f,3a2d9324-8260-478d-ad62-a964d860cb8f,0,1,9b9cd161-5bee-4433-a0ec-b67deb099b5e,9b9cd161-5bee-4433-a0ec-b67deb099b5e,0,1,ca179cb5-65e1-4a55-bf12-096b926accb0,ca179cb5-65e1-4a55-bf12-096b926accb0,0,1,472ce1c2-9e83-418b-b1ec-e15e126bc919,472ce1c2-9e83-418b-b1ec-e15e126bc919,0,1,9fe30414-8261-4403-a854-f22b61824f69,9fe30414-8261-4403-a854-f22b61824f69,0,1,c587a9f3-7512-4697-8156-c688fbb210d0,c587a9f3-7512-4697-8156-c688fbb210d0,0,1,07bb26ac-bd97-465f-a192-db7fedbb579b,07bb26ac-bd97-465f-a192-db7fedbb579b,0,1,bb129cf2-5a5a-433a-924a-a1d0d895644a,bb129cf2-5a5a-433a-924a-a1d0d895644a,0,1,faa34cb8-2d48-4851-a839-fc40536a0234,faa34cb8-2d48-4851-a839-fc40536a0234,0,1,0894db61-51f6-4068-9634-e55d95e2a8ac,0894db61-51f6-4068-9634-e55d95e2a8ac,0,1,ad3fb691-68b2-4d65-93ab-ab8fcb77e035,ad3fb691-68b2-4d65-93ab-ab8fcb77e035,0,1,67aed41e-9707-4007-bb3c-7273476664bb,67aed41e-9707-4007-bb3c-7273476664bb,0,1,0d8c215d-1210-47a2-897d-a3257b9f849a,0d8c215d-1210-47a2-897d-a3257b9f849a,0,1,954e7804-e8b1-42aa-9d49-bef73f9d13d1,954e7804-e8b1-42aa-9d49-bef73f9d13d1,0,1,c971e0ba-53b8-4454-92f7-40b0d639058a,c971e0ba-53b8-4454-92f7-40b0d639058a,0,1,ed297409-6215-4fd4-b47d-a2247e0343da,ed297409-6215-4fd4-b47d-a2247e0343da,0,1,5ae2a1de-6380-45cc-9c8f-5612cd5ba627,5ae2a1de-6380-45cc-9c8f-5612cd5ba627,0,1,e8aa2ba2-7dfa-47e3-bc18-6156f700ceed,e8aa2ba2-7dfa-47e3-bc18-6156f700ceed,0,1,8c472f51-47ec-43c4-9858-fd19ac3e17f3,8c472f51-47ec-43c4-9858-fd19ac3e17f3,0,1,c54f31ce-114b-46d3-b4c6-12c8f07727ca,c54f31ce-114b-46d3-b4c6-12c8f07727ca,0,1,5a9c82c1-d0cd-48ff-b91c-38b950591e4c,5a9c82c1-d0cd-48ff-b91c-38b950591e4c,0,1,59855d19-29cd-4efd-a453-b19e574113ef,59855d19-29cd-4efd-a453-b19e574113ef,0,1,249b6436-bd44-4950-b118-7f40f7aaf794,249b6436-bd44-4950-b118-7f40f7aaf794,0,1,712c2b73-4697-4581-a095-70555aee8be2,712c2b73-4697-4581-a095-70555aee8be2,0,1,c1508d67-ac6d-41e3-884d-b3bdd54659f8,c1508d67-ac6d-41e3-884d-b3bdd54659f8,0,1,3436b16e-ef5b-4abb-9aad-c70a7c8560ed,3436b16e-ef5b-4abb-9aad-c70a7c8560ed,0,1,ce6d1259-af90-482b-b19a-405512321bd9,ce6d1259-af90-482b-b19a-405512321bd9,0,1,79ff04ac-4625-469b-916e-938f04de4dd2,79ff04ac-4625-469b-916e-938f04de4dd2,0,1,35103a27-230c-45c0-a8c9-24bd46608bbb,35103a27-230c-45c0-a8c9-24bd46608bbb,0,1,c5e9f987-4466-4161-8e36-278b0b3ce056,c5e9f987-4466-4161-8e36-278b0b3ce056,0,1,b6566d54-e821-4a2a-a447-0f533f35de91,b6566d54-e821-4a2a-a447-0f533f35de91,0,1,46568b9a-a765-4037-8a86-b184a570ab37,46568b9a-a765-4037-8a86-b184a570ab37,0,1,4fcc7278-2fec-49ee-b0ef-c7d5f5f698a4,4fcc7278-2fec-49ee-b0ef-c7d5f5f698a4,0,1,547a6dec-6fe8-439d-a8d9-ac2612af20d2,547a6dec-6fe8-439d-a8d9-ac2612af20d2,0,1,2bc2c4b7-dacb-4cb3-b5b2-712b19bebcd7,2bc2c4b7-dacb-4cb3-b5b2-712b19bebcd7,0,1,84395058-d46a-428c-b782-a9fa89fea14a,84395058-d46a-428c-b782-a9fa89fea14a,0,1,64f667e5-6a8f-448f-aed5-a4d461232845,64f667e5-6a8f-448f-aed5-a4d461232845,0,1,a148cdff-0e67-48e6-9cc5-e8a6f5aa1ae8,a148cdff-0e67-48e6-9cc5-e8a6f5aa1ae8,0,1,037842ca-aeaf-4e27-9a0e-e929438b6f40,037842ca-aeaf-4e27-9a0e-e929438b6f40,0,1,ab6fdd75-2ea6-4408-8c03-0cfab775a7a0,ab6fdd75-2ea6-4408-8c03-0cfab775a7a0,0,1,2c8ab5a6-66d5-4b6f-94ae-4292724ded7f,2c8ab5a6-66d5-4b6f-94ae-4292724ded7f,0,1,de25a90c-4b46-4340-b649-93e16dde33de,de25a90c-4b46-4340-b649-93e16dde33de,0,1,4f2d0398-49f4-410c-a451-436cbf96a262,4f2d0398-49f4-410c-a451-436cbf96a262,0,1,b2c8bd74-21c9-4495-93e2-ca5355698350,b2c8bd74-21c9-4495-93e2-ca5355698350,0,1,39bc2bc6-2a4f-4e26-b1b9-fb8473234f09,39bc2bc6-2a4f-4e26-b1b9-fb8473234f09,0,1,cc9679a5-1ed2-4290-8c9b-8a2f6614d053,cc9679a5-1ed2-4290-8c9b-8a2f6614d053,0,1,93016393-c637-4d81-8675-aa5e51e678e0,93016393-c637-4d81-8675-aa5e51e678e0,0,1,d8621f68-106e-4058-963f-56010491ae2e,d8621f68-106e-4058-963f-56010491ae2e,0,1,670639a7-02a7-4108-81b8-cb93233fd2a5,670639a7-02a7-4108-81b8-cb93233fd2a5,0,1,f2e2df50-52fc-4e95-909b-80fc91a68f62,f2e2df50-52fc-4e95-909b-80fc91a68f62,0,1,1a1d8dd0-1559-426c-ad3c-baa6eb3a53db,1a1d8dd0-1559-426c-ad3c-baa6eb3a53db,0,1,d2762764-b5c0-4aeb-8e89-3371972f22d8,d2762764-b5c0-4aeb-8e89-3371972f22d8,0,1,d67a1377-f69f-48d9-824d-2ede2594e630,d67a1377-f69f-48d9-824d-2ede2594e630,0,1,573f1753-9194-4aaf-9217-5cac70ff108f,573f1753-9194-4aaf-9217-5cac70ff108f,0,1,50d3e00e-1a83-4bd5-91db-0561560caf42,50d3e00e-1a83-4bd5-91db-0561560caf42,0,1,1f7ec25a-05b1-468b-8857-2bb1aed3678a,1f7ec25a-05b1-468b-8857-2bb1aed3678a,0,1,c121b8bc-ecbf-4775-b210-3c1e3502a6ac,c121b8bc-ecbf-4775-b210-3c1e3502a6ac,0,1,9f4d5fe5-9bda-4ba9-a313-db1ab0ea14d1,9f4d5fe5-9bda-4ba9-a313-db1ab0ea14d1,0,1,4a1e6d25-89e7-468a-aef1-6ded0154dca2,4a1e6d25-89e7-468a-aef1-6ded0154dca2,0,1,44afff59-0590-4929-93b8-7b49735f21b5,44afff59-0590-4929-93b8-7b49735f21b5,0,1,905624ea-b253-413f-b651-1eb2c5a7d52a,905624ea-b253-413f-b651-1eb2c5a7d52a,0,1,b639ed30-3e37-4c65-a39f-00fe735950eb,b639ed30-3e37-4c65-a39f-00fe735950eb,0,1,76ef7f67-0ce8-4ee2-9134-e793c41b8de3,76ef7f67-0ce8-4ee2-9134-e793c41b8de3,0,1,f137eb0f-bde7-412d-9229-d7a4f9456e6c,f137eb0f-bde7-412d-9229-d7a4f9456e6c,0,1,90880131-8065-4a7e-a0fa-ecff9e27363c,90880131-8065-4a7e-a0fa-ecff9e27363c,0,1,57e9fcea-342c-4089-bd10-befb3faf0dbd,57e9fcea-342c-4089-bd10-befb3faf0dbd,0,1,6b10167a-f5c3-4d7b-b444-d5ff6e705ea4,6b10167a-f5c3-4d7b-b444-d5ff6e705ea4,0,1,f85ff11a-163e-4d18-98bc-b0ebe83d34e4,f85ff11a-163e-4d18-98bc-b0ebe83d34e4,0,1,51a0444d-13c8-45a8-97f6-f3f976964bf8,51a0444d-13c8-45a8-97f6-f3f976964bf8,0,1,9892f922-8745-4164-a200-94b5edc1ea0a,9892f922-8745-4164-a200-94b5edc1ea0a,0,1,38eb3fd1-57be-4dc2-bed4-d8107086bf2a,38eb3fd1-57be-4dc2-bed4-d8107086bf2a,0,1,6b6d541b-5dc1-4150-b8d1-5844a694ac6a,6b6d541b-5dc1-4150-b8d1-5844a694ac6a,0,1,2b1619a6-c841-4963-8c51-c1d8d6ba3746,2b1619a6-c841-4963-8c51-c1d8d6ba3746,0,1,eab50f82-4612-47fd-a5c2-9678016a1937,eab50f82-4612-47fd-a5c2-9678016a1937,0,1,4212bb94-7c24-4d4f-8bb8-4060bd21a135,4212bb94-7c24-4d4f-8bb8-4060bd21a135,0,1,2609ba3c-e4de-45b3-86e0-93db39a21eee,2609ba3c-e4de-45b3-86e0-93db39a21eee,0,1,00dcfeab-7ba1-4a50-996e-4fd693dd0514,00dcfeab-7ba1-4a50-996e-4fd693dd0514,0,1,d21971c9-9aa6-448a-ab37-49ad0b0547ec,d21971c9-9aa6-448a-ab37-49ad0b0547ec,0,1,627438b8-c738-4e02-a0e7-cfd7fbf8eca1,627438b8-c738-4e02-a0e7-cfd7fbf8eca1,0,1,30a87c95-4d55-4b68-877f-1055e1c1afa7,30a87c95-4d55-4b68-877f-1055e1c1afa7,0,1,00418e6c-77b2-4753-b9ff-3a8013436f8a,00418e6c-77b2-4753-b9ff-3a8013436f8a,0,1,8deaa3d0-b36b-4f20-a9a8-11d829f5ef9d,8deaa3d0-b36b-4f20-a9a8-11d829f5ef9d,0,1,4d660fec-4a76-470e-bba9-3d031941b289,4d660fec-4a76-470e-bba9-3d031941b289,0,1,144676de-f369-49f1-bb21-d60e073936df,144676de-f369-49f1-bb21-d60e073936df,0,1,d5537afb-df5f-4edf-a3d3-ff6b2a908ad9,d5537afb-df5f-4edf-a3d3-ff6b2a908ad9,0,1,d9f1f56b-75c8-43e9-8043-89076c225f78,d9f1f56b-75c8-43e9-8043-89076c225f78,0,1,a3c9a7eb-2104-4402-954c-3e12de4a7de3,a3c9a7eb-2104-4402-954c-3e12de4a7de3,0,1,38bf6d3b-5435-4bac-b9fc-23b80afeb760,38bf6d3b-5435-4bac-b9fc-23b80afeb760,0,1,a2a51b70-9570-4f53-9d30-e9a9b099a475,a2a51b70-9570-4f53-9d30-e9a9b099a475,0,1,556a0e57-5b3b-4303-a013-0bd296c506b8,556a0e57-5b3b-4303-a013-0bd296c506b8,0,1,21c1b2d3-cd96-4cdd-9ccc-ada27b127969,21c1b2d3-cd96-4cdd-9ccc-ada27b127969,0,1,fabbac92-cb98-4087-b3fa-387482ed0d86,fabbac92-cb98-4087-b3fa-387482ed0d86,0,1,304525f8-c697-4835-b0a6-4ed3cbcaf3c6,304525f8-c697-4835-b0a6-4ed3cbcaf3c6,0,1,e09534e3-ac6e-42a6-86e8-564acb20089a,e09534e3-ac6e-42a6-86e8-564acb20089a,0,1,6ff5b3cb-efff-430d-bf0a-957405f116ca,6ff5b3cb-efff-430d-bf0a-957405f116ca,0,1,d06e845a-9f54-40dd-b0df-6988def62017,d06e845a-9f54-40dd-b0df-6988def62017,0,1,7badb97b-c359-42af-9066-6bbfc0650cf9,7badb97b-c359-42af-9066-6bbfc0650cf9,0,1,63223883-06cf-4d01-be95-5e410cc58a22,63223883-06cf-4d01-be95-5e410cc58a22,0,1,1929139f-dabb-4c40-9423-158093360889,1929139f-dabb-4c40-9423-158093360889,0,1,dad92df4-685b-4260-b35f-4d031262dfea,dad92df4-685b-4260-b35f-4d031262dfea,0,1,4399c19a-ddba-42e9-88b4-c5c28abad237,4399c19a-ddba-42e9-88b4-c5c28abad237,0,1,982315ba-df74-4a31-8929-71d1e5e6f147,982315ba-df74-4a31-8929-71d1e5e6f147,0,1,8d1c01a9-9806-4e5d-bafb-ce6af11d5650,8d1c01a9-9806-4e5d-bafb-ce6af11d5650,0,1,fd3a6a7e-203d-447a-aebd-7626579387fb,fd3a6a7e-203d-447a-aebd-7626579387fb,0,1,8014684f-e1f1-4163-9083-459a009c0aac,8014684f-e1f1-4163-9083-459a009c0aac,0,1,ad6384d5-278b-44d3-993a-d5a39e7c98ca,ad6384d5-278b-44d3-993a-d5a39e7c98ca,0,1,ff976027-75e8-475c-abfa-876d36733c13,ff976027-75e8-475c-abfa-876d36733c13,0,1,7452d9c0-cb03-4d1b-afd4-8855950f2ad8,7452d9c0-cb03-4d1b-afd4-8855950f2ad8,0,1,32d4a42d-6e4d-49db-b5bc-1ea6dbe9fe4d,32d4a42d-6e4d-49db-b5bc-1ea6dbe9fe4d,0,1,3f823f5b-e5a8-40af-8fc3-e4c6ffb18fa3,3f823f5b-e5a8-40af-8fc3-e4c6ffb18fa3,0,1,b3554203-b930-496d-a712-353bc13a0946,b3554203-b930-496d-a712-353bc13a0946,0,1,59775ce0-f778-45f6-9453-bbd0a0ec1f27,59775ce0-f778-45f6-9453-bbd0a0ec1f27,0,1,f772abd3-8ea0-41e9-aaca-c5375778941a,f772abd3-8ea0-41e9-aaca-c5375778941a,0,1,a1e494f8-96a4-41bd-9234-b87e8d8742c5,a1e494f8-96a4-41bd-9234-b87e8d8742c5,0,1,b322b047-16eb-4500-826a-6dfebb7d997a,b322b047-16eb-4500-826a-6dfebb7d997a,0,1,bbbc2d1f-2f78-4b7e-b5fb-ca7c74051221,bbbc2d1f-2f78-4b7e-b5fb-ca7c74051221,0,1,764c76cc-0473-4633-868d-02f96aa43c10,764c76cc-0473-4633-868d-02f96aa43c10,0,1,c8da922f-e31e-49b0-b90e-1c060424bde5,c8da922f-e31e-49b0-b90e-1c060424bde5,0,1,41462827-fd8b-4ee6-a739-a884d704bba5,41462827-fd8b-4ee6-a739-a884d704bba5,0,1,7b01236c-5ab7-43fa-aa0e-1ae55c8a4efe,7b01236c-5ab7-43fa-aa0e-1ae55c8a4efe,0,1,eca025d2-4fe9-4542-b9f5-46ae2631256e,eca025d2-4fe9-4542-b9f5-46ae2631256e,0,1,35bc58df-8aff-48dd-83a9-b60b0461f94d,35bc58df-8aff-48dd-83a9-b60b0461f94d,0,1,0f46ae6b-9fe8-471a-a59f-af5e66cb9e00,0f46ae6b-9fe8-471a-a59f-af5e66cb9e00,0,1,cf13e2d9-72a0-47c0-bae2-f674024bbdb2,cf13e2d9-72a0-47c0-bae2-f674024bbdb2,0,1,feb1a5c1-c805-4079-8f05-8a44f51b0b02,feb1a5c1-c805-4079-8f05-8a44f51b0b02,0,1,ff7916bd-cbd1-4d9e-8aab-bad9fffaa0d4,ff7916bd-cbd1-4d9e-8aab-bad9fffaa0d4,0,1,1f55f330-7c0a-4a29-905f-51d664515bc5,1f55f330-7c0a-4a29-905f-51d664515bc5,0,1,6106e958-354c-4211-992c-3c3819e8828e,6106e958-354c-4211-992c-3c3819e8828e,0,1,9d6d77a9-1f55-4162-93a5-14bb3f3febaf,9d6d77a9-1f55-4162-93a5-14bb3f3febaf,0,1,61789ea5-aad2-4b3b-a1c7-3ff7409379eb,61789ea5-aad2-4b3b-a1c7-3ff7409379eb,0,1,2cd04d4c-2619-40c9-adf4-7bb281f045b6,2cd04d4c-2619-40c9-adf4-7bb281f045b6,0,1,1d6b8425-360c-4ab1-9bab-cc9a3b590bb2,1d6b8425-360c-4ab1-9bab-cc9a3b590bb2,0,1,9f67d228-79aa-44e6-8dc7-fae4fbdfef2a,9f67d228-79aa-44e6-8dc7-fae4fbdfef2a,0,1,231d3950-f363-4e63-83cd-8ddb81507c27,231d3950-f363-4e63-83cd-8ddb81507c27,0,1,87429f11-bf95-4013-bf13-da904570f88d,87429f11-bf95-4013-bf13-da904570f88d,0,1,6173cab2-e0f5-40c1-8e74-4f41fc8bd68f,6173cab2-e0f5-40c1-8e74-4f41fc8bd68f,0,1,feb41347-62db-41cf-ace0-d8b9de361af3,feb41347-62db-41cf-ace0-d8b9de361af3,0,1,5a088468-4065-4e0c-9b84-1162de8d3fdd,5a088468-4065-4e0c-9b84-1162de8d3fdd,0,1,dbdf3ae7-a0af-44b9-8e3d-c402d98cda03,dbdf3ae7-a0af-44b9-8e3d-c402d98cda03,0,1,cdce186a-229d-492d-8811-147fc4d7cdf5,cdce186a-229d-492d-8811-147fc4d7cdf5,0,1,5f91b00f-d8fc-4d63-8486-66339357ab22,5f91b00f-d8fc-4d63-8486-66339357ab22,0,1,16d44ab1-4bce-4df8-a215-6ed5173c75a8,16d44ab1-4bce-4df8-a215-6ed5173c75a8,0,1,543f976e-fea3-4a51-9962-b8e0fcd3f707,543f976e-fea3-4a51-9962-b8e0fcd3f707,0,1,375977c1-5745-4e78-a4df-cef966c0ccf8,375977c1-5745-4e78-a4df-cef966c0ccf8,0,1,2582a714-a6d6-4d37-b9a7-5e89e18b0f27,2582a714-a6d6-4d37-b9a7-5e89e18b0f27,0,1,c3796d85-2a24-43c4-9673-64e56249a1d0,c3796d85-2a24-43c4-9673-64e56249a1d0,0,1,fc1066b5-20d4-4c73-85f8-9889e554d6e1,fc1066b5-20d4-4c73-85f8-9889e554d6e1,0,1,a9b6b5fd-1862-4207-87e8-5c25a8f86c57,a9b6b5fd-1862-4207-87e8-5c25a8f86c57,0,1,731211c2-ef90-4883-9525-83cd91b742ac,731211c2-ef90-4883-9525-83cd91b742ac,0,1,0adf02da-940a-4bfc-afa5-59605494a169,0adf02da-940a-4bfc-afa5-59605494a169,0,1,50a1e3bf-8624-4474-854e-21b89aaf97ed,50a1e3bf-8624-4474-854e-21b89aaf97ed,0,1,6c7b82ca-37b0-4f67-b7fa-ab1b77c0fb61,6c7b82ca-37b0-4f67-b7fa-ab1b77c0fb61,0,1,24f9d1a6-73d0-4cc7-b3ca-d36c5c7a9892,24f9d1a6-73d0-4cc7-b3ca-d36c5c7a9892,0,1,847b97a3-d0bc-45e2-b06c-932bb22d8eca,847b97a3-d0bc-45e2-b06c-932bb22d8eca,0,1,503b3eab-b7f1-4ede-8845-3290a834cec7,503b3eab-b7f1-4ede-8845-3290a834cec7,0,1,8361991a-0f30-4a03-9a4c-90556b744f53,8361991a-0f30-4a03-9a4c-90556b744f53,0,1,3116fa60-bc42-4dea-aa03-387896168690,3116fa60-bc42-4dea-aa03-387896168690,0,1,5a3cc2a8-f519-45ac-af9b-c57a4f1acdc0,5a3cc2a8-f519-45ac-af9b-c57a4f1acdc0,0,1,08427a9a-fb3a-4bc1-b2e2-72e4f89680cd,08427a9a-fb3a-4bc1-b2e2-72e4f89680cd,0,1,f9196766-4ae2-4a73-bed6-4a8838323e02,f9196766-4ae2-4a73-bed6-4a8838323e02,0,1,ca797560-8802-4bdc-b21f-7a7fd795beae,ca797560-8802-4bdc-b21f-7a7fd795beae,0,1,56242b05-d722-4d4a-82d9-517e0e169d0b,56242b05-d722-4d4a-82d9-517e0e169d0b,0,1,5504f5d1-35d8-4a47-a0e1-003fe00395c1,5504f5d1-35d8-4a47-a0e1-003fe00395c1,0,1,4eeda6df-fb48-4c88-853f-9c35e2b3a3cf,4eeda6df-fb48-4c88-853f-9c35e2b3a3cf,0,1,06afe397-1c7e-400e-bb24-f8e611d114e8,06afe397-1c7e-400e-bb24-f8e611d114e8,0,1,f0105e51-9510-426a-8aa0-af827d93ffd9,f0105e51-9510-426a-8aa0-af827d93ffd9,0,1,3df19dbf-efe7-4e31-99ad-fafb59ec1329,3df19dbf-efe7-4e31-99ad-fafb59ec1329,0,1,baf12d47-fbfe-4563-aa23-26d9f7e83169,baf12d47-fbfe-4563-aa23-26d9f7e83169,0,1,e2046f49-6fea-4bf4-92b0-92f3c8357bcf,e2046f49-6fea-4bf4-92b0-92f3c8357bcf,0,1,0ba11486-1972-4434-ab1a-5bb75cc05e9f,0ba11486-1972-4434-ab1a-5bb75cc05e9f,0,1,4ed9c555-7dd0-4577-bf62-152b4c5ec9f2,4ed9c555-7dd0-4577-bf62-152b4c5ec9f2,0,1,11fe3a42-98c4-49ba-b697-86ffb172f16f,11fe3a42-98c4-49ba-b697-86ffb172f16f,0,1,07b53818-7318-4400-8af5-457fac012755,07b53818-7318-4400-8af5-457fac012755,0,1,292b47e7-5cf3-462d-a466-dac6253a7f03,292b47e7-5cf3-462d-a466-dac6253a7f03,0,1,8ecc070f-f6fb-46b1-9636-b77aa80f8804,8ecc070f-f6fb-46b1-9636-b77aa80f8804,0,1,8405be9d-465b-4744-b04f-03933b52f02e,8405be9d-465b-4744-b04f-03933b52f02e,0,1,a8021ff9-f0ae-49ab-b8ac-5e3d8fe90d82,a8021ff9-f0ae-49ab-b8ac-5e3d8fe90d82,0,1,f09b09ce-9e3c-406a-8508-b6e7e6ec966e,f09b09ce-9e3c-406a-8508-b6e7e6ec966e,0,1,9bf55587-1ffe-42bc-b8e8-3f956956f689,9bf55587-1ffe-42bc-b8e8-3f956956f689,0,1,2f67931e-543f-457e-80fd-78ca754e2e9c,2f67931e-543f-457e-80fd-78ca754e2e9c,0,1,595e5752-36a7-4bba-8a40-26920acae01d,595e5752-36a7-4bba-8a40-26920acae01d,0,1,28801fba-c429-4afa-bdcd-b3ec3ec22fda,28801fba-c429-4afa-bdcd-b3ec3ec22fda,0,1,d1a873ae-d45b-4600-9419-e701dce3da02,d1a873ae-d45b-4600-9419-e701dce3da02,0,1,e3a31f0d-a98f-43c6-bc39-087095ae8c39,e3a31f0d-a98f-43c6-bc39-087095ae8c39,0,1,e39d8ff3-52db-4ba4-b4ea-42d5ee787076,e39d8ff3-52db-4ba4-b4ea-42d5ee787076,0,1,b1c1c2eb-f9cd-468a-8398-b0b7f611f832,b1c1c2eb-f9cd-468a-8398-b0b7f611f832,0,1,4bb0f7c3-62f3-4352-9bc8-e243dd18fe4a,4bb0f7c3-62f3-4352-9bc8-e243dd18fe4a,0,1,bc106ef9-3eeb-40d4-aa59-ae1855ba1744,bc106ef9-3eeb-40d4-aa59-ae1855ba1744,0,1,73d8b319-9bea-4638-a602-23c12f37c227,73d8b319-9bea-4638-a602-23c12f37c227,0,1,cef55e64-d4ad-42dc-aa5a-ea65a3af7cfa,cef55e64-d4ad-42dc-aa5a-ea65a3af7cfa,0,1,a43e9de0-2921-4c58-a5f8-7446258be967,a43e9de0-2921-4c58-a5f8-7446258be967,0,1,307656e3-df7f-46e7-946c-bbd439265c95,307656e3-df7f-46e7-946c-bbd439265c95,0,1,eb3dfdc7-58b8-4b1f-b079-368c262364c9,eb3dfdc7-58b8-4b1f-b079-368c262364c9,0,1,5030a318-f8f7-4ec7-80d6-6eee0772562f,5030a318-f8f7-4ec7-80d6-6eee0772562f,0,1,242e911d-e49c-4b8a-8543-cc2e079220fd,242e911d-e49c-4b8a-8543-cc2e079220fd,0,1,9ea39d31-3775-4fb8-a3f3-202e54354d49,9ea39d31-3775-4fb8-a3f3-202e54354d49,0,1,73044e20-148c-46e9-b5b5-973c91de0d61,73044e20-148c-46e9-b5b5-973c91de0d61,0,1,f8ab477c-8e78-48c0-9f99-27748b109706,f8ab477c-8e78-48c0-9f99-27748b109706,0,1,24cff6c8-6c20-4383-b97c-6afa52738960,24cff6c8-6c20-4383-b97c-6afa52738960,0,1,462e2694-750d-49ef-93ac-17a7779be68d,462e2694-750d-49ef-93ac-17a7779be68d,0,1,c24ff02e-5afc-45df-81cf-64ea2b261c2d,c24ff02e-5afc-45df-81cf-64ea2b261c2d,0,1,2d51aae9-650d-4719-a94d-2609b69a2d36,2d51aae9-650d-4719-a94d-2609b69a2d36,0,1,6025f5b5-6dc7-46b8-96e6-02823c5b4de7,6025f5b5-6dc7-46b8-96e6-02823c5b4de7,0,1,5d9d88ea-b2e4-425c-bb4d-a005e867d56c,5d9d88ea-b2e4-425c-bb4d-a005e867d56c,0,1,b76d342c-0f9d-4eb0-b49e-a9f472a4dd0d,b76d342c-0f9d-4eb0-b49e-a9f472a4dd0d,0,1,85639a53-b367-49ce-84f2-4e21d81c489b,85639a53-b367-49ce-84f2-4e21d81c489b,0,1,24b59586-178e-4efc-90ae-529553f3bb6c,24b59586-178e-4efc-90ae-529553f3bb6c,0,1,20e75dd5-222a-4100-aa43-3684991e3f21,20e75dd5-222a-4100-aa43-3684991e3f21,0,1,3c611832-4bc2-4229-a27d-d5dc82f3a498,3c611832-4bc2-4229-a27d-d5dc82f3a498,0,1,50e9eb52-02e3-44ff-9c9e-e76dbe38da63,50e9eb52-02e3-44ff-9c9e-e76dbe38da63,0,1,5dadc422-1fbd-4918-9db3-09ec72c3404e,5dadc422-1fbd-4918-9db3-09ec72c3404e,0,1,ffdaf8a0-7a8f-4756-bdfc-a0c6ae6c3869,ffdaf8a0-7a8f-4756-bdfc-a0c6ae6c3869,0,1,ab1bcabf-ffb0-4914-8ad0-b94b5aaeab1d,ab1bcabf-ffb0-4914-8ad0-b94b5aaeab1d,0,1,c5478d09-c8d3-4cc6-878e-27656ecc8409,c5478d09-c8d3-4cc6-878e-27656ecc8409,0,1,01b97d2f-40b9-4f12-8bc5-ab75fd160b7c,01b97d2f-40b9-4f12-8bc5-ab75fd160b7c,0,1,75974146-5b1a-412c-b7d5-1575704bbdab,75974146-5b1a-412c-b7d5-1575704bbdab,0,1,949f87cb-258c-4b6b-95ee-8a7491a4b64e,949f87cb-258c-4b6b-95ee-8a7491a4b64e,0,1,8a348012-99dc-4dc9-8bec-0df3caf4cdc5,8a348012-99dc-4dc9-8bec-0df3caf4cdc5,0,1,5c089988-5381-41ed-9f05-f85db46b8d94,5c089988-5381-41ed-9f05-f85db46b8d94,0,1,85a36352-1569-4ce4-aeba-477db524c36d,85a36352-1569-4ce4-aeba-477db524c36d,0,1,ebfb6f80-88f5-4046-8ae7-e11a7b0c1beb,ebfb6f80-88f5-4046-8ae7-e11a7b0c1beb,0,1,9a4a0b04-3dfb-4551-90f0-16231f64b14f,9a4a0b04-3dfb-4551-90f0-16231f64b14f,0,1,b2e656c1-f4ff-4d95-b066-4ee11ce4dea8,b2e656c1-f4ff-4d95-b066-4ee11ce4dea8,0,1,2d86d1fc-5367-47b8-804e-7f9c5fc8f3b1,2d86d1fc-5367-47b8-804e-7f9c5fc8f3b1,0,1,98edcd6b-1c50-45c6-9a4c-390827a4ba52,98edcd6b-1c50-45c6-9a4c-390827a4ba52,0,1,b99c2068-15ea-43a1-9e9f-db29647e2387,b99c2068-15ea-43a1-9e9f-db29647e2387,0,1,346cb8b7-a20e-4a06-823e-26dfb2e3e741,346cb8b7-a20e-4a06-823e-26dfb2e3e741,0,1,782cb93d-36e6-4923-b2b6-75caa3459cd6,782cb93d-36e6-4923-b2b6-75caa3459cd6,0,1,0eea37cc-47f8-4819-85da-d4991f4e58ed,0eea37cc-47f8-4819-85da-d4991f4e58ed,0,1,b51eaf45-baa1-4d1c-bcb7-a89bb8bcc26a,b51eaf45-baa1-4d1c-bcb7-a89bb8bcc26a,0,1,5ea29362-0ab7-4ca3-865e-bf93db5ca24b,5ea29362-0ab7-4ca3-865e-bf93db5ca24b,0,1,64ff6058-c6f3-4682-b9a1-11ec438fa447,64ff6058-c6f3-4682-b9a1-11ec438fa447,0,1,ced01234-9417-49ce-adf0-8cdd15e6dd7d,ced01234-9417-49ce-adf0-8cdd15e6dd7d,0,1,c1272bfc-196a-4f99-935f-e2516bc138d2,c1272bfc-196a-4f99-935f-e2516bc138d2,0,1,aa7ceeee-3b3c-49e2-95c2-bfb34e381aa3,aa7ceeee-3b3c-49e2-95c2-bfb34e381aa3,0,1,313e0688-745a-4385-b040-7ef8317a0eb7,313e0688-745a-4385-b040-7ef8317a0eb7,0,1,7fe61c5d-30bc-440d-9e40-12ff3b296616,7fe61c5d-30bc-440d-9e40-12ff3b296616,0,1,37c37f15-f84b-456b-aab6-729562dc0908,37c37f15-f84b-456b-aab6-729562dc0908,0,1,45a2569e-820c-4d7d-ba74-4a781d26bb2b,45a2569e-820c-4d7d-ba74-4a781d26bb2b,0,1,996c7873-1cc9-44f6-915b-5c6ed7ef2370,996c7873-1cc9-44f6-915b-5c6ed7ef2370,0,1,8dc08932-0988-4e82-8a5f-385c0694f9ff,8dc08932-0988-4e82-8a5f-385c0694f9ff,0,1,13dee5d8-f165-48de-9ccb-3ef0239f4b27,13dee5d8-f165-48de-9ccb-3ef0239f4b27,0,1,2767473e-79fb-4c7c-a7d1-a83a8f2df71d,2767473e-79fb-4c7c-a7d1-a83a8f2df71d,0,1,8a13c899-1659-48cf-9aa2-07ca99547b7b,8a13c899-1659-48cf-9aa2-07ca99547b7b,0,1,f5ef3f75-7d12-4284-844f-54d19d1f7e2f,f5ef3f75-7d12-4284-844f-54d19d1f7e2f,0,1,7974e41d-5af3-4636-b405-c9405d89fb53,7974e41d-5af3-4636-b405-c9405d89fb53,0,1,21fad9b6-44df-417c-ba18-de4b8af98a34,21fad9b6-44df-417c-ba18-de4b8af98a34,0,1,11c086b0-c646-4701-983d-c38758286354,11c086b0-c646-4701-983d-c38758286354,0,1,92876c9e-52ff-480d-9878-5766f4f9d12c,92876c9e-52ff-480d-9878-5766f4f9d12c,0,1,b729d739-5249-4765-85ee-fd792bb22911,b729d739-5249-4765-85ee-fd792bb22911,0,1,d65c4485-7bac-4206-9a6c-7156f4bb876d,d65c4485-7bac-4206-9a6c-7156f4bb876d,0,1,d431d1e2-13dc-495c-9de1-b5ec872eceed,d431d1e2-13dc-495c-9de1-b5ec872eceed,0,1,e8bec681-d269-41ba-9184-556cbcc27d74,e8bec681-d269-41ba-9184-556cbcc27d74,0,1,b8aaef91-f72c-4127-a494-771c13694ca4,b8aaef91-f72c-4127-a494-771c13694ca4,0,1,433a114f-3198-4ef6-bbf8-ce9b54fdb736,433a114f-3198-4ef6-bbf8-ce9b54fdb736,0,1,02ac711c-e38e-422e-ac28-ba1b298df9cc,02ac711c-e38e-422e-ac28-ba1b298df9cc,0,1,3e090261-4aa2-4ece-9f77-62df83c890b3,3e090261-4aa2-4ece-9f77-62df83c890b3,0,1,bbfd9834-12b4-49ca-bdae-5c94efa80482,bbfd9834-12b4-49ca-bdae-5c94efa80482,0,1,9292034c-24e8-49a7-9b77-7974e117847d,9292034c-24e8-49a7-9b77-7974e117847d,0,1,3327b7d4-62fc-44cc-83b4-c449bfa4e706,3327b7d4-62fc-44cc-83b4-c449bfa4e706,0,1,43ecee25-68eb-48cf-bbaa-aee71052438f,43ecee25-68eb-48cf-bbaa-aee71052438f,0,1,93799f8b-0188-4546-8815-35e733bcc2b1,93799f8b-0188-4546-8815-35e733bcc2b1,0,1,9dc3a563-11bb-40a7-8431-c1d4367ccbaf,9dc3a563-11bb-40a7-8431-c1d4367ccbaf,0,1,c9ea4e72-5f01-42ae-88e3-52e49757b26f,c9ea4e72-5f01-42ae-88e3-52e49757b26f,0,1,38d92d75-c8b8-42d6-9e0a-6dc0811a8652,38d92d75-c8b8-42d6-9e0a-6dc0811a8652,0,1,0f564dbe-6a6e-48df-9718-5cea5d608ee6,0f564dbe-6a6e-48df-9718-5cea5d608ee6,0,1,a623fef1-96eb-41ba-93fe-09162698f419,a623fef1-96eb-41ba-93fe-09162698f419,0,1,45a8d7cb-c927-4a4e-a653-13fd9b1eda10,45a8d7cb-c927-4a4e-a653-13fd9b1eda10,0,1,d8e1f92f-9efa-422d-bb21-43bd1a363cec,d8e1f92f-9efa-422d-bb21-43bd1a363cec,0,1,c1416383-bd7e-4dc4-ad88-d98ac87157fd,c1416383-bd7e-4dc4-ad88-d98ac87157fd,0,1,5e8bddc7-7836-4ec8-b6e1-0c15d228f47e,5e8bddc7-7836-4ec8-b6e1-0c15d228f47e,0,1,d5d9976a-4cc0-43f7-afd6-d43cebb07940,d5d9976a-4cc0-43f7-afd6-d43cebb07940,0,1,899f1526-d6bc-42ef-852e-7297a06db9e3,899f1526-d6bc-42ef-852e-7297a06db9e3,0,1,c694c132-1ddb-4273-818a-d3cca88c082a,c694c132-1ddb-4273-818a-d3cca88c082a,0,1,cd4da06e-c06b-4233-befc-1bc4c4db58e3,cd4da06e-c06b-4233-befc-1bc4c4db58e3,0,1,918a01fe-f753-4a4a-9200-55bbd6edaf5f,918a01fe-f753-4a4a-9200-55bbd6edaf5f,0,1,51a8a209-2a9d-419f-9fda-f7aeac68bdbe,51a8a209-2a9d-419f-9fda-f7aeac68bdbe,0,1,ef43961f-8cac-4f3f-bcee-c6bc51c4148c,ef43961f-8cac-4f3f-bcee-c6bc51c4148c,0,1,d6704410-6297-481e-a6cb-6d6aa566b4f8,d6704410-6297-481e-a6cb-6d6aa566b4f8,0,1,398937ca-b035-43bd-b0da-8c5153a87cb8,398937ca-b035-43bd-b0da-8c5153a87cb8,0,1,5b441321-bd1e-4c56-8f09-365b05985eed,5b441321-bd1e-4c56-8f09-365b05985eed,0,1,559f1e66-e8da-437a-aa27-d0e1be6619b6,559f1e66-e8da-437a-aa27-d0e1be6619b6,0,1,704d69cd-d921-4957-a004-43bd7eb4d979,704d69cd-d921-4957-a004-43bd7eb4d979,0,1,f1594682-16ac-408c-8307-a7a8db79b09f,f1594682-16ac-408c-8307-a7a8db79b09f,0,1,863aebd2-ce32-4f1f-bb3d-d6062ab187fd,863aebd2-ce32-4f1f-bb3d-d6062ab187fd,0,1,4cb814d8-cb1b-4366-b500-e820ad526b0c,4cb814d8-cb1b-4366-b500-e820ad526b0c,0,1,7da5f3b4-6330-4112-9d3a-7bb42996aa4a,7da5f3b4-6330-4112-9d3a-7bb42996aa4a,0,1,6c43df9f-ca36-415b-afec-302807820d73,6c43df9f-ca36-415b-afec-302807820d73,0,1,c7fb7551-806a-40b2-8879-14cd897b60d8,c7fb7551-806a-40b2-8879-14cd897b60d8,0,1,68337023-d573-4d04-95b6-44f73258c2a4,68337023-d573-4d04-95b6-44f73258c2a4,0,1,7cf39337-b722-486f-8e37-a62239d0ccd2,7cf39337-b722-486f-8e37-a62239d0ccd2,0,1,2571cfaf-d876-4385-a60a-1488aacf7080,2571cfaf-d876-4385-a60a-1488aacf7080,0,1,4ea1dd0a-6eab-48e4-a6a7-314d0e211d6c,4ea1dd0a-6eab-48e4-a6a7-314d0e211d6c,0,1,44398566-3189-4584-8f8a-9deb1d07ce41,44398566-3189-4584-8f8a-9deb1d07ce41,0,1,6f4e3082-9c8c-4289-8cc2-704c8d2763ce,6f4e3082-9c8c-4289-8cc2-704c8d2763ce,0,1,accfa63a-479d-4996-95bc-cdf5acdf203c,accfa63a-479d-4996-95bc-cdf5acdf203c,0,1,351998e0-8939-4dd4-a833-f4756bcc53b8,351998e0-8939-4dd4-a833-f4756bcc53b8,0,1,cd69bad8-524e-4be4-88cc-7732a88b38b8,cd69bad8-524e-4be4-88cc-7732a88b38b8,0,1,0a32248c-6994-4988-90d1-30882bc9da6b,0a32248c-6994-4988-90d1-30882bc9da6b,0,1,b57b53cb-6972-4bda-ae46-96571be1ebec,b57b53cb-6972-4bda-ae46-96571be1ebec,0,1,1a1a9636-fb72-4e4a-af96-5858442b1e61,1a1a9636-fb72-4e4a-af96-5858442b1e61,0,1,bca9cf34-9e11-4014-976a-28c4330b136e,bca9cf34-9e11-4014-976a-28c4330b136e,0,1,65fffe1a-6f36-4f50-975f-4471ad29d3ec,65fffe1a-6f36-4f50-975f-4471ad29d3ec,0,1,8fe5dad5-686a-4631-ae05-2917c33f7d83,8fe5dad5-686a-4631-ae05-2917c33f7d83,0,1,edef86c6-73bf-4e47-b62d-b2b548a732cd,edef86c6-73bf-4e47-b62d-b2b548a732cd,0,1,a1715044-d76f-4238-ba3e-989d04078d83,a1715044-d76f-4238-ba3e-989d04078d83,0,1,a7ec91a5-2ed4-4ecd-b794-fcd3bb5ea4a2,a7ec91a5-2ed4-4ecd-b794-fcd3bb5ea4a2,0,1,299c47a7-0b30-4f62-8f5c-f087ad6411fb,299c47a7-0b30-4f62-8f5c-f087ad6411fb,0,1,4d4724df-24fb-4c59-9d04-3f984906214a,4d4724df-24fb-4c59-9d04-3f984906214a,0,1,95b10bc8-39ef-43f5-b74e-f36cfa9bc806,95b10bc8-39ef-43f5-b74e-f36cfa9bc806,0,1,cb9b73ee-8531-48d9-9266-9aaa4336a612,cb9b73ee-8531-48d9-9266-9aaa4336a612,0,1,b7b80237-d642-4c21-a9ee-64fc4ed20d2f,b7b80237-d642-4c21-a9ee-64fc4ed20d2f,0,1,aeee2eea-1bb9-4e8a-ac5c-c940eaa86511,aeee2eea-1bb9-4e8a-ac5c-c940eaa86511,0,1,d042687f-0725-4611-a868-f5b4f6a3a3a8,d042687f-0725-4611-a868-f5b4f6a3a3a8,0,1,bb143340-7fff-49ef-b121-355c96613f78,bb143340-7fff-49ef-b121-355c96613f78,0,1,cd5fbbcb-19b8-4c0b-93c7-ebdf642826db,cd5fbbcb-19b8-4c0b-93c7-ebdf642826db,0,1,f2f69644-80dc-4b5e-a208-ed1de131e25e,f2f69644-80dc-4b5e-a208-ed1de131e25e,0,1,73060f72-6d08-47da-aac8-d4d2ed8f871c,73060f72-6d08-47da-aac8-d4d2ed8f871c,0,1,f3a6219e-bff5-4d36-9baa-bb214cebc2ed,f3a6219e-bff5-4d36-9baa-bb214cebc2ed,0,1,82e8ac21-c2aa-47de-89ae-ea6cc10cc862,82e8ac21-c2aa-47de-89ae-ea6cc10cc862,0,1,13b27ec3-2be9-4959-92e5-94ba7bb64f03,13b27ec3-2be9-4959-92e5-94ba7bb64f03,0,1,9f832f4b-ae60-4d81-9ffd-6e00f7e02560,9f832f4b-ae60-4d81-9ffd-6e00f7e02560,0,1,6f6ef6ac-5bb7-41e4-b6d5-0f068e8cb176,6f6ef6ac-5bb7-41e4-b6d5-0f068e8cb176,0,1,821225ea-1bad-49a6-a422-80d8a09baf13,821225ea-1bad-49a6-a422-80d8a09baf13,0,1,d0106f3a-8490-4277-a278-75c318ec252c,d0106f3a-8490-4277-a278-75c318ec252c,0,1,5035aa55-d557-419a-89e2-10ed0f8d109b,5035aa55-d557-419a-89e2-10ed0f8d109b,0,1,5f93d2af-64ff-41cc-8403-4a0e83160fea,5f93d2af-64ff-41cc-8403-4a0e83160fea,0,1,c12c90e4-7c40-489b-b14b-6b9442016e0f,c12c90e4-7c40-489b-b14b-6b9442016e0f,0,1,6371e288-3502-4d66-9006-b5a36107c0b7,6371e288-3502-4d66-9006-b5a36107c0b7,0,1,245814f7-028c-4c13-98eb-15412e851f81,245814f7-028c-4c13-98eb-15412e851f81,0,1,0132e564-2cd3-4930-8962-1068532f4be4,0132e564-2cd3-4930-8962-1068532f4be4,0,1,57d0f9b0-18d0-48ba-9f3c-d106f66ac602,57d0f9b0-18d0-48ba-9f3c-d106f66ac602,0,1,3a7cfd4c-c943-43c2-a8d5-6d8ab3a10fc9,3a7cfd4c-c943-43c2-a8d5-6d8ab3a10fc9,0,1,36b8b08f-0da3-4dbd-9aa8-73220ca9101d,36b8b08f-0da3-4dbd-9aa8-73220ca9101d,0,1,7021fca5-d612-43e1-927b-7f822153cf75,7021fca5-d612-43e1-927b-7f822153cf75,0,1,9fd16d51-91bb-4973-a7c4-cf4db87da8bf,9fd16d51-91bb-4973-a7c4-cf4db87da8bf,0,1,ee0a8d23-660a-492b-a813-b57394acee05,ee0a8d23-660a-492b-a813-b57394acee05,0,1,d1eda8f4-ffdd-445a-882c-6124d9f7fcf2,d1eda8f4-ffdd-445a-882c-6124d9f7fcf2,0,1,ade21e2e-349f-414b-8f35-6ae3b6a4064d,ade21e2e-349f-414b-8f35-6ae3b6a4064d,0,1,cce823c6-3bd5-4e46-91f6-8715cb72b1d5,cce823c6-3bd5-4e46-91f6-8715cb72b1d5,0,1,f3a8dd22-4469-4a3b-a7dd-78a5624b7bf0,f3a8dd22-4469-4a3b-a7dd-78a5624b7bf0,0,1,83f51efe-e2af-459a-b59f-2c036124ac23,83f51efe-e2af-459a-b59f-2c036124ac23,0,1,6ed466d7-e016-4d9c-9c0e-8deed48cbd70,6ed466d7-e016-4d9c-9c0e-8deed48cbd70,0,1,b03829e9-ba22-4584-85f0-c36d63f48242,b03829e9-ba22-4584-85f0-c36d63f48242,0,1,084a7c95-a59b-4861-b8b3-b5710a57ac60,084a7c95-a59b-4861-b8b3-b5710a57ac60,0,1,efcea6da-6746-4e00-913a-14cab38b5d84,efcea6da-6746-4e00-913a-14cab38b5d84,0,1,aff367fb-7fca-44d0-adf9-3731f14834f6,aff367fb-7fca-44d0-adf9-3731f14834f6,0,1,a2782760-dd4c-44d2-a785-814d6f610455,a2782760-dd4c-44d2-a785-814d6f610455,0,1,245162d8-6ae1-47e5-a0c9-0d5f2e5d8ea8,245162d8-6ae1-47e5-a0c9-0d5f2e5d8ea8,0,1,6581ac1f-11ef-42b8-9f3b-590bb7546e63,6581ac1f-11ef-42b8-9f3b-590bb7546e63,0,1,ce952e88-35b7-4506-81ac-d7081e50a650,ce952e88-35b7-4506-81ac-d7081e50a650,0,1,5d7a53fa-1a89-4e6e-868c-4077bd84c0ce,5d7a53fa-1a89-4e6e-868c-4077bd84c0ce,0,1,3bf1281f-7570-4633-86b9-3e953a7e6647,3bf1281f-7570-4633-86b9-3e953a7e6647,0,1,715dc289-5b14-4ee0-8716-9c15958b9069,715dc289-5b14-4ee0-8716-9c15958b9069,0,1,92707138-5004-4378-8477-f909166d319d,92707138-5004-4378-8477-f909166d319d,0,1,43661775-43bb-4d9e-bfbb-c46e7d194ca3,43661775-43bb-4d9e-bfbb-c46e7d194ca3,0,1,532637ef-be0d-4f42-9747-a88e17eb3def,532637ef-be0d-4f42-9747-a88e17eb3def,0,1,61127152-3e24-40b4-8a23-5eb6cae568ff,61127152-3e24-40b4-8a23-5eb6cae568ff,0,1,ffd987e3-e8af-4d46-881e-1e312e74dbac,ffd987e3-e8af-4d46-881e-1e312e74dbac,0,1,ad1142ed-183d-47a3-800c-997a3770e11e,ad1142ed-183d-47a3-800c-997a3770e11e,0,1,ebef37c6-4808-4683-93be-036ce19cafd5,ebef37c6-4808-4683-93be-036ce19cafd5,0,1,66364cd4-aaa5-421d-96d6-3c283c14650d,66364cd4-aaa5-421d-96d6-3c283c14650d,0,1,fdbbbf8b-dacf-436e-8d8b-1e2b8e854b17,fdbbbf8b-dacf-436e-8d8b-1e2b8e854b17,0,1,3c54d440-e908-43d6-a5cc-bb64620c82d7,3c54d440-e908-43d6-a5cc-bb64620c82d7,0,1,23a240a2-52ee-46ab-89d9-50dcee2cc8d2,23a240a2-52ee-46ab-89d9-50dcee2cc8d2,0,1,bf1dd911-8ee1-407b-acae-10c85b74baf3,bf1dd911-8ee1-407b-acae-10c85b74baf3,0,1,e924058f-25c3-4744-a565-836b824991b7,e924058f-25c3-4744-a565-836b824991b7,0,1,bc6a47a1-a3f3-4d7e-9dad-099bd3dba751,bc6a47a1-a3f3-4d7e-9dad-099bd3dba751,0,1,518dcd70-4ccf-4866-a94f-7ceec7dd2801,518dcd70-4ccf-4866-a94f-7ceec7dd2801,0,1,f9950ab5-1077-4033-bbbf-53899a1bcf33,f9950ab5-1077-4033-bbbf-53899a1bcf33,0,1,8f16763b-86f0-4ad0-b786-cce7dcb3460e,8f16763b-86f0-4ad0-b786-cce7dcb3460e,0,1,0481bc65-6a32-46b9-ae87-993ba52a29a5,0481bc65-6a32-46b9-ae87-993ba52a29a5,0,1,36ebebbb-dff1-4dbd-870b-58bd4a71fa1f,36ebebbb-dff1-4dbd-870b-58bd4a71fa1f,0,1,dbc5f419-63b0-4cbe-90ff-c0101105e46c,dbc5f419-63b0-4cbe-90ff-c0101105e46c,0,1,c708f6e9-b7a0-4046-90f3-83527da7b872,c708f6e9-b7a0-4046-90f3-83527da7b872,0,1,0006b44a-3a0c-4be4-8dd0-bd0db9ddcc4d,0006b44a-3a0c-4be4-8dd0-bd0db9ddcc4d,0,1,14256e0a-a947-42a3-8e36-47bfbb052a0c,14256e0a-a947-42a3-8e36-47bfbb052a0c,0,1,1b1aa77a-d14b-4751-a7da-0b5bac4db461,1b1aa77a-d14b-4751-a7da-0b5bac4db461,0,1,c0dcdb22-6719-4597-a781-bca1370909e5,c0dcdb22-6719-4597-a781-bca1370909e5,0,1,7ebf99c3-33d2-4e4c-ac45-ca4ed0c3c100,7ebf99c3-33d2-4e4c-ac45-ca4ed0c3c100,0,1,7a34f723-cd14-4949-a40f-7ce579bf0449,7a34f723-cd14-4949-a40f-7ce579bf0449,0,1,5cdc9ac7-bba9-4ed1-845a-607976fc4679,5cdc9ac7-bba9-4ed1-845a-607976fc4679,0,1,295f3692-0721-4c41-a69b-171ef20a5018,295f3692-0721-4c41-a69b-171ef20a5018,0,1,86c22871-6d1c-44e0-8ade-ce4bdeb23321,86c22871-6d1c-44e0-8ade-ce4bdeb23321,0,1,da51de81-4d4f-46b5-a308-7b50db6c45a7,da51de81-4d4f-46b5-a308-7b50db6c45a7,0,1,8d31ce6a-4d44-46c6-a11c-47fb33e88691,8d31ce6a-4d44-46c6-a11c-47fb33e88691,0,1,c2a8c2d3-ff13-4a13-acd4-797118c4e767,c2a8c2d3-ff13-4a13-acd4-797118c4e767,0,1,bc6adf75-8666-49f3-9703-b0014dfee123,bc6adf75-8666-49f3-9703-b0014dfee123,0,1,30632f54-b779-4857-a5cc-c53fe8887ee5,30632f54-b779-4857-a5cc-c53fe8887ee5,0,1,087480bb-8c89-4b00-a29b-b7e29926478d,087480bb-8c89-4b00-a29b-b7e29926478d,0,1,685373b7-638a-439a-8cba-703d56e4e404,685373b7-638a-439a-8cba-703d56e4e404,0,1,eafaec9c-030b-4e5f-8fa8-e17dad2feec9,eafaec9c-030b-4e5f-8fa8-e17dad2feec9,0,1,df22b227-b2c3-4e65-9706-7582f99fe59c,df22b227-b2c3-4e65-9706-7582f99fe59c,0,1,35828c88-f1ec-42e7-b189-78748931ee4a,35828c88-f1ec-42e7-b189-78748931ee4a,0,1,8a41b8f1-93fc-44e6-bf45-0d1fa9d24f4a,8a41b8f1-93fc-44e6-bf45-0d1fa9d24f4a,0,1,1cfba08f-d5e5-4833-b494-a25d0477e9c3,1cfba08f-d5e5-4833-b494-a25d0477e9c3,0,1,ae22743b-6d21-4fbb-bb4c-fee53e2b87cb,ae22743b-6d21-4fbb-bb4c-fee53e2b87cb,0,1,921a0a14-8c06-4894-95ce-423000769364,921a0a14-8c06-4894-95ce-423000769364,0,1,3805ee39-a48a-499a-9ef8-9c2a5985404f,3805ee39-a48a-499a-9ef8-9c2a5985404f,0,1,07ccfe87-e1ab-4da7-92cb-a612e0972b0b,07ccfe87-e1ab-4da7-92cb-a612e0972b0b,0,1,08c2f92c-eb05-49e7-bfc9-4a89607b9864,08c2f92c-eb05-49e7-bfc9-4a89607b9864,0,1,6d751379-89a7-49b5-93e5-578329c63d9c,6d751379-89a7-49b5-93e5-578329c63d9c,0,1,c3f156ef-947e-4ebb-883f-4f099a116063,c3f156ef-947e-4ebb-883f-4f099a116063,0,1,5e3ab0a3-c0a6-4f41-85d3-2eede4abb555,5e3ab0a3-c0a6-4f41-85d3-2eede4abb555,0,1,a065ffc3-f50b-4a78-9b84-bfc4e5515a4b,a065ffc3-f50b-4a78-9b84-bfc4e5515a4b,0,1,4cba5a06-1484-4dd1-8e35-2d702c7d96d0,4cba5a06-1484-4dd1-8e35-2d702c7d96d0,0,1,e98e9e56-2995-430c-bd3b-f1070aec15a5,e98e9e56-2995-430c-bd3b-f1070aec15a5,0,1,d35c51b0-4cb7-4f9c-8aac-6a25a1b49adf,d35c51b0-4cb7-4f9c-8aac-6a25a1b49adf,0,1,8a7546f4-bfc9-4732-bf60-43a41e2c8753,8a7546f4-bfc9-4732-bf60-43a41e2c8753,0,1,16244165-d5a4-4012-8bb5-7f5fee1111af,16244165-d5a4-4012-8bb5-7f5fee1111af,0,1,290b72ad-004f-46ab-be5e-47557543b965,290b72ad-004f-46ab-be5e-47557543b965,0,1,e1b2ccf9-5a8f-4008-86f3-d2c7cf5581d1,e1b2ccf9-5a8f-4008-86f3-d2c7cf5581d1,0,1,fa0e0792-bffb-47ce-866f-9e8dbdab17a4,fa0e0792-bffb-47ce-866f-9e8dbdab17a4,0,1,263bcd20-9878-48d4-aac4-b371ec49d8d6,263bcd20-9878-48d4-aac4-b371ec49d8d6,0,1,da1d8660-2757-4cea-bae0-c2210b9406ae,da1d8660-2757-4cea-bae0-c2210b9406ae,0,1,d60329c6-8f48-481d-82e7-18da355cb09c,d60329c6-8f48-481d-82e7-18da355cb09c,0,1,c4b14162-b25b-4099-9ec3-7251848ef08a,c4b14162-b25b-4099-9ec3-7251848ef08a,0,1,8eb5ba97-eb38-4357-8bfc-e9618280800d,8eb5ba97-eb38-4357-8bfc-e9618280800d,0,1,b72f73d5-e274-472b-871b-16af72dab603,b72f73d5-e274-472b-871b-16af72dab603,0,1,b008d184-0b61-460d-9490-89ecc1cd58ba,b008d184-0b61-460d-9490-89ecc1cd58ba,0,1,c8340e2f-6958-4bcd-8e17-499c4adfe60b,c8340e2f-6958-4bcd-8e17-499c4adfe60b,0,1,c72831cd-d064-4fe8-9603-64e6d7b8ac4d,c72831cd-d064-4fe8-9603-64e6d7b8ac4d,0,1,03f68d82-752c-45d1-bf9a-60ecd21a2c81,03f68d82-752c-45d1-bf9a-60ecd21a2c81,0,1,307e8938-e347-4eff-b2fb-fd0b8f4aa27f,307e8938-e347-4eff-b2fb-fd0b8f4aa27f,0,1,d4fffc79-2841-49a9-a382-e9e4138984df,d4fffc79-2841-49a9-a382-e9e4138984df,0,1,84e4c572-5b32-46e0-82a0-0c76d4ef5d73,84e4c572-5b32-46e0-82a0-0c76d4ef5d73,0,1,9f41f903-d316-4189-8dc0-603ea9036c1c,9f41f903-d316-4189-8dc0-603ea9036c1c,0,1,e19e70d6-8707-4dde-ae69-7bd97035ca03,e19e70d6-8707-4dde-ae69-7bd97035ca03,0,1,425b5272-1130-457d-8a05-aee8fad681d9,425b5272-1130-457d-8a05-aee8fad681d9,0,1,8d583436-f2a6-4a33-8137-1376f5754643,8d583436-f2a6-4a33-8137-1376f5754643,0,1,4a864e74-41ce-4673-a080-bc3c2ba1b8ee,4a864e74-41ce-4673-a080-bc3c2ba1b8ee,0,1,d279958e-6dd4-4bb0-a65f-c8768b4c4d96,d279958e-6dd4-4bb0-a65f-c8768b4c4d96,0,1,2d66502d-77ab-4cc9-9ccf-5433458fae9f,2d66502d-77ab-4cc9-9ccf-5433458fae9f,0,1,cff48da7-3c46-4602-83e8-90c9ea53e107,cff48da7-3c46-4602-83e8-90c9ea53e107,0,1,7155472d-c791-402c-96e1-d25612024c88,7155472d-c791-402c-96e1-d25612024c88,0,1,fb90c261-24a7-4cef-8a2c-85c0e4fdd64a,fb90c261-24a7-4cef-8a2c-85c0e4fdd64a,0,1,9005911d-ea81-48b6-bf50-1a328ff4d7be,9005911d-ea81-48b6-bf50-1a328ff4d7be,0,1,7df12006-c0c0-42a6-b852-bdced72c62e3,7df12006-c0c0-42a6-b852-bdced72c62e3,0,1,9c00987d-3c55-40eb-bae8-f36e71e4ef87,9c00987d-3c55-40eb-bae8-f36e71e4ef87,0,1,29273130-5142-48c9-8399-00e5ab4b6203,29273130-5142-48c9-8399-00e5ab4b6203,0,1,9e14cd7e-1293-4008-baf8-88df6a98abf7,9e14cd7e-1293-4008-baf8-88df6a98abf7,0,1,98e3aace-52a6-4911-8205-92165adca6de,98e3aace-52a6-4911-8205-92165adca6de,0,1,91f4dbf9-d539-4239-a95d-c1d9e14e50f8,91f4dbf9-d539-4239-a95d-c1d9e14e50f8,0,1,577e5fea-b792-4c8b-b3b3-a03a14b64b04,577e5fea-b792-4c8b-b3b3-a03a14b64b04,0,1,ba5ec2d6-1791-42b5-8e6f-04d1d18e9469,ba5ec2d6-1791-42b5-8e6f-04d1d18e9469,0,1,b18d312b-f9c3-4f37-ac77-d499e949f154,b18d312b-f9c3-4f37-ac77-d499e949f154,0,1,ace2beea-d393-412f-8b71-b845b665e2c4,ace2beea-d393-412f-8b71-b845b665e2c4,0,1,3fd4bc77-2a1b-4750-a54a-4171c8d40027,3fd4bc77-2a1b-4750-a54a-4171c8d40027,0,1,5b27fde9-fa80-48b1-aea1-73e132b9a944,5b27fde9-fa80-48b1-aea1-73e132b9a944,0,1,00bf04d6-6a8e-4b13-94cf-36c1c6090cd8,00bf04d6-6a8e-4b13-94cf-36c1c6090cd8,0,1,a747ec6b-f230-49b4-a929-7ed1ba87b078,a747ec6b-f230-49b4-a929-7ed1ba87b078,0,1,796f8fb4-d9cd-40ae-936b-8a70d2eb1121,796f8fb4-d9cd-40ae-936b-8a70d2eb1121,0,1,4802e016-a9e9-47d0-916b-b42194a1f388,4802e016-a9e9-47d0-916b-b42194a1f388,0,1,a1740d1f-1b8f-4db5-be5e-0eac44e934b8,a1740d1f-1b8f-4db5-be5e-0eac44e934b8,0,1,4062674a-4a81-494d-82bc-4984cd7c7903,4062674a-4a81-494d-82bc-4984cd7c7903,0,1,782a8801-06ca-4d63-bf8b-63d2320766d8,782a8801-06ca-4d63-bf8b-63d2320766d8,0,1,93a73123-d98c-4286-9269-7bfcedd115e8,93a73123-d98c-4286-9269-7bfcedd115e8,0,1,c5985c02-1824-4ce9-b415-1621dd2ee864,c5985c02-1824-4ce9-b415-1621dd2ee864,0,1,993ce747-cdc9-445f-ad7d-daf53cd5f7e9,993ce747-cdc9-445f-ad7d-daf53cd5f7e9,0,1,e819aaf6-3dfb-492a-8a4a-50a7c6854790,e819aaf6-3dfb-492a-8a4a-50a7c6854790,0,1,62b95ba1-f213-42fb-90f3-a03e8094bc9e,62b95ba1-f213-42fb-90f3-a03e8094bc9e,0,1,619b534d-5605-40d3-9b8c-4443a21d7795,619b534d-5605-40d3-9b8c-4443a21d7795,0,1,a010bbf4-d547-4576-9797-28e3096ffed3,a010bbf4-d547-4576-9797-28e3096ffed3,0,1,a44c3eb2-1054-41ca-82e8-fc35336e7009,a44c3eb2-1054-41ca-82e8-fc35336e7009,0,1,01f67911-4ca7-4668-b970-62c299b98e56,01f67911-4ca7-4668-b970-62c299b98e56,0,1,20c89c94-f77f-4e14-8c97-2a70c1419ce3,20c89c94-f77f-4e14-8c97-2a70c1419ce3,0,1,aa509aa3-dd45-41f3-82c7-59662c2e2c47,aa509aa3-dd45-41f3-82c7-59662c2e2c47,0,1,c4552529-e69e-4c5c-bd66-04b2f7dac281,c4552529-e69e-4c5c-bd66-04b2f7dac281,0,1,381b49ba-793a-4418-9fd4-598844fb72a6,381b49ba-793a-4418-9fd4-598844fb72a6,0,1,1aee302d-df31-49ea-b542-436dc1d79ae1,1aee302d-df31-49ea-b542-436dc1d79ae1,0,1,593509da-d33c-49ff-a62c-a28cbc4651c1,593509da-d33c-49ff-a62c-a28cbc4651c1,0,1,5e346a0b-a322-4565-adb9-70131fb05fa3,5e346a0b-a322-4565-adb9-70131fb05fa3,0,1,9a69c559-194b-4f74-9879-82740260f5f6,9a69c559-194b-4f74-9879-82740260f5f6,0,1,93bf1dcf-670d-4c8b-bdbf-e43c2edf8056,93bf1dcf-670d-4c8b-bdbf-e43c2edf8056,0,1,8a06f980-78f3-42f4-9d96-da2e0f0f36a7,8a06f980-78f3-42f4-9d96-da2e0f0f36a7,0,1,fee2aa74-7a81-4ab2-a457-2edf8ac1aa2d,fee2aa74-7a81-4ab2-a457-2edf8ac1aa2d,0,1,2e19fb7b-270f-4181-b4a1-640280bbbc5c,2e19fb7b-270f-4181-b4a1-640280bbbc5c,0,1,aa773eef-0c4a-49be-9f5e-9131bc041415,aa773eef-0c4a-49be-9f5e-9131bc041415,0,1,9b31e474-01d4-4c3b-a633-3a2ff3917d62,9b31e474-01d4-4c3b-a633-3a2ff3917d62,0,1,1c09bf33-9b54-4bfd-bc92-e7324025fab0,1c09bf33-9b54-4bfd-bc92-e7324025fab0,0,1,8d7750e9-899f-4434-8702-44cd02681779,8d7750e9-899f-4434-8702-44cd02681779,0,1,d85244dc-c417-4e69-9aa7-7ad313ecb940,d85244dc-c417-4e69-9aa7-7ad313ecb940,0,1,3bebf5e9-68bb-48dc-a39d-cbdca2dbecb1,3bebf5e9-68bb-48dc-a39d-cbdca2dbecb1,0,1,cd392ef0-dedb-4f83-9a2c-a24190ee0dc0,cd392ef0-dedb-4f83-9a2c-a24190ee0dc0,0,1,bb2f0c1c-3cfb-4a26-b6de-5bbeb5614587,bb2f0c1c-3cfb-4a26-b6de-5bbeb5614587,0,1,0713de12-87d5-4877-bd8a-2b6466df67df,0713de12-87d5-4877-bd8a-2b6466df67df,0,1,b848aafc-44fb-4dfe-8eec-233dc08fbbb6,b848aafc-44fb-4dfe-8eec-233dc08fbbb6,0,1,c4d7c569-4649-4f98-a048-45f3c5933670,c4d7c569-4649-4f98-a048-45f3c5933670,0,1,6dc05d69-bd54-4e8a-8985-c2ddfa0aaffb,6dc05d69-bd54-4e8a-8985-c2ddfa0aaffb,0,1,426cbebb-880b-49c5-b046-83c5e071273e,426cbebb-880b-49c5-b046-83c5e071273e,0,1,ad08b104-01f8-4900-a06c-baa1d55eba84,ad08b104-01f8-4900-a06c-baa1d55eba84,0,1,9352d10d-188f-4074-8dd1-7be5c11525e3,9352d10d-188f-4074-8dd1-7be5c11525e3,0,1,1933634a-6f10-48e7-99f0-60ac338f7832,1933634a-6f10-48e7-99f0-60ac338f7832,0,1,655deec5-c079-4748-8521-b3f10c243394,655deec5-c079-4748-8521-b3f10c243394,0,1,f6d4d818-d54c-4337-82cf-abd5e6dbe770,f6d4d818-d54c-4337-82cf-abd5e6dbe770,0,1,656c447b-291f-4e62-81ac-1c004841aa72,656c447b-291f-4e62-81ac-1c004841aa72,0,1,c9a06c8d-2f6d-4e03-bc62-a1a19f17faf3,c9a06c8d-2f6d-4e03-bc62-a1a19f17faf3,0,1,5ba93404-58ad-4321-9a62-27db828f75f6,5ba93404-58ad-4321-9a62-27db828f75f6,0,1,3da20e86-1d83-4935-b425-a91392dc8f35,3da20e86-1d83-4935-b425-a91392dc8f35,0,1,b56f25d2-72a9-4d80-8998-77ac3097c873,b56f25d2-72a9-4d80-8998-77ac3097c873,0,1,03bd775a-e0a1-4205-82ce-6068e73ad134,03bd775a-e0a1-4205-82ce-6068e73ad134,0,1,40bed47b-7754-4a70-b51a-47385fd46e83,40bed47b-7754-4a70-b51a-47385fd46e83,0,1,773ef914-5e7e-4ec1-bcdb-b2d111b560e6,773ef914-5e7e-4ec1-bcdb-b2d111b560e6,0,1,1e5a4f93-1ab9-4775-9538-2a1772215d89,1e5a4f93-1ab9-4775-9538-2a1772215d89,0,1,c25db165-0734-4fef-b161-e5164954a616,c25db165-0734-4fef-b161-e5164954a616,0,1,4f97b909-68f9-482a-b958-b4caa9b83763,4f97b909-68f9-482a-b958-b4caa9b83763,0,1,c31e34db-41ff-4db3-a4d0-f780f67070f6,c31e34db-41ff-4db3-a4d0-f780f67070f6,0,1,7a014fcb-a4b8-4c1c-b0de-21907a917c25,7a014fcb-a4b8-4c1c-b0de-21907a917c25,0,1,1688ef5d-72df-4bc4-a879-89033d466ad7,1688ef5d-72df-4bc4-a879-89033d466ad7,0,1,30f18fbf-4240-4708-a71a-189f8fc324f3,30f18fbf-4240-4708-a71a-189f8fc324f3,0,1,344cb0de-315d-4d05-93f8-8a1f53208470,344cb0de-315d-4d05-93f8-8a1f53208470,0,1,cd869887-0b0e-43db-8b51-04fe4a1341d5,cd869887-0b0e-43db-8b51-04fe4a1341d5,0,1,98aa5d5e-6c0e-4b9b-a3fa-335635d15217,98aa5d5e-6c0e-4b9b-a3fa-335635d15217,0,1,a7973409-b18e-4b88-ad50-e2ae89470d8f,a7973409-b18e-4b88-ad50-e2ae89470d8f,0,1,a537875e-492e-4cf2-96e9-e2e97bb206da,a537875e-492e-4cf2-96e9-e2e97bb206da,0,1,cd8fd85f-f02e-4f11-b4b4-40670febfaca,cd8fd85f-f02e-4f11-b4b4-40670febfaca,0,1,085a08f3-9d93-429d-9b1b-9065ab8363f7,085a08f3-9d93-429d-9b1b-9065ab8363f7,0,1,a530c0a1-c1d2-40bb-9d0e-320074dbb684,a530c0a1-c1d2-40bb-9d0e-320074dbb684,0,1,55c63580-16f1-4d6f-a40b-e630f71ebb98,55c63580-16f1-4d6f-a40b-e630f71ebb98,0,1,0a136ad9-22ad-4ba7-a31a-40a193b49d26,0a136ad9-22ad-4ba7-a31a-40a193b49d26,0,1,208c7b8c-3df9-4441-8ebf-34ffa81572a2,208c7b8c-3df9-4441-8ebf-34ffa81572a2,0,1,8c17fd7c-74d7-496a-a843-42022afb0707,8c17fd7c-74d7-496a-a843-42022afb0707,0,1,091ccac1-9a63-4a89-bb0c-333b274b0c70,091ccac1-9a63-4a89-bb0c-333b274b0c70,0,1,b456d820-8034-4381-960d-66d9f86b0a4b,b456d820-8034-4381-960d-66d9f86b0a4b,0,1,bd55fd03-cf67-4333-a554-98e03d18f780,bd55fd03-cf67-4333-a554-98e03d18f780,0,1,6eac5f7b-0952-4c94-9028-529b14ffcd4f,6eac5f7b-0952-4c94-9028-529b14ffcd4f,0,1,1a7c774d-5b86-4051-b797-3081e19fa30a,1a7c774d-5b86-4051-b797-3081e19fa30a,0,1,00949768-5833-4fe2-8752-b009d1bceef8,00949768-5833-4fe2-8752-b009d1bceef8,0,1,167455d1-6658-409f-834c-f6ccfe7b25de,167455d1-6658-409f-834c-f6ccfe7b25de,0,1,c5b3ca21-8f7b-4933-853c-7d95b17b5631,c5b3ca21-8f7b-4933-853c-7d95b17b5631,0,1,8b0faa1e-09da-4ba4-894e-e86abc5d39df,8b0faa1e-09da-4ba4-894e-e86abc5d39df,0,1,cb50b309-1b6c-400c-9e9e-67204dcccaae,cb50b309-1b6c-400c-9e9e-67204dcccaae,0,1,e2b482cb-6954-4e6a-abe9-d0a01f64b73a,e2b482cb-6954-4e6a-abe9-d0a01f64b73a,0,1,b8a966ba-3452-44df-91d0-7040ecd3e4c2,b8a966ba-3452-44df-91d0-7040ecd3e4c2,0,1,80d6883d-c608-4fe5-acae-78bc45e40e5f,80d6883d-c608-4fe5-acae-78bc45e40e5f,0,1,213b173a-c3b7-449c-a618-d479c4dc38e8,213b173a-c3b7-449c-a618-d479c4dc38e8,0,1,7a64dffc-5cfe-41e2-bd55-fbf4957559a4,7a64dffc-5cfe-41e2-bd55-fbf4957559a4,0,1,a78249aa-ca9f-4bee-b00d-68ff59ea81a4,a78249aa-ca9f-4bee-b00d-68ff59ea81a4,0,1,7534148d-0124-49a2-a446-c6205d153153,7534148d-0124-49a2-a446-c6205d153153,0,1,32ed8a10-7177-4e45-866e-04a1b6831570,32ed8a10-7177-4e45-866e-04a1b6831570,0,1,e2a90d7a-5480-47cd-b296-8d60d8baf7f9,e2a90d7a-5480-47cd-b296-8d60d8baf7f9,0,1,8190a432-1037-4334-b2c7-bae39f7f9442,8190a432-1037-4334-b2c7-bae39f7f9442,0,1,4733e5c1-8198-408b-8903-866d3b0fdc43,4733e5c1-8198-408b-8903-866d3b0fdc43,0,1,e1fc5146-37c5-4207-af05-7250976bd406,e1fc5146-37c5-4207-af05-7250976bd406,0,1,60038cd9-8d01-44b1-9d3f-f3a31e59e5db,60038cd9-8d01-44b1-9d3f-f3a31e59e5db,0,1,f0bfb98b-cc43-4b6c-8166-9b81b4c22cb0,f0bfb98b-cc43-4b6c-8166-9b81b4c22cb0,0,1,f5e27159-789a-4d34-ac51-fd99d753b83a,f5e27159-789a-4d34-ac51-fd99d753b83a,0,1,0f565466-19e0-4edb-9827-dab5a2bb47d7,0f565466-19e0-4edb-9827-dab5a2bb47d7,0,1,f1cb02ff-a2f0-4a34-93fa-e47c6e210ee1,f1cb02ff-a2f0-4a34-93fa-e47c6e210ee1,0,1,981a74f4-cdc2-4016-b462-9b5fd0d6de4d,981a74f4-cdc2-4016-b462-9b5fd0d6de4d,0,1,1d89e2b7-8f66-4210-8ab4-29efde5e5295,1d89e2b7-8f66-4210-8ab4-29efde5e5295,0,1,fafff964-8daa-4921-9d53-fd6be3878d94,fafff964-8daa-4921-9d53-fd6be3878d94,0,1,7183d525-212a-42f3-a7e5-eb9deaeaa4a3,7183d525-212a-42f3-a7e5-eb9deaeaa4a3,0,1,b82b27cc-e81c-4b7c-9833-ea4f2ce21edb,b82b27cc-e81c-4b7c-9833-ea4f2ce21edb,0,1,4347f77e-bad9-4525-90a0-794787f03585,4347f77e-bad9-4525-90a0-794787f03585,0,1,cfde3330-2bed-4273-8d69-c213ebdde247,cfde3330-2bed-4273-8d69-c213ebdde247,0,1,2d6ca049-89a5-437e-971c-b8e42f61b460,2d6ca049-89a5-437e-971c-b8e42f61b460,0,1,c450ebe1-4223-4a7a-b9fa-374d5c13dc8c,c450ebe1-4223-4a7a-b9fa-374d5c13dc8c,0,1,271d58d0-4449-40cc-bae9-cc4c50eebd9b,271d58d0-4449-40cc-bae9-cc4c50eebd9b,0,1,58df9322-c786-4dd1-af49-7cd164b378da,58df9322-c786-4dd1-af49-7cd164b378da,0,1,8d48de7f-61d6-4462-9c14-f728206a482c,8d48de7f-61d6-4462-9c14-f728206a482c,0,1,a87e890a-8924-4f56-9e37-04579b95297a,a87e890a-8924-4f56-9e37-04579b95297a,0,1,c71d4fa4-86b0-41e2-8b6a-cfb91e131eaf,c71d4fa4-86b0-41e2-8b6a-cfb91e131eaf,0,1,4c1f2581-ee42-4df5-9169-20205a18a9be,4c1f2581-ee42-4df5-9169-20205a18a9be,0,1,bb3d9ea3-8895-4950-9ee9-4249ca983d48,bb3d9ea3-8895-4950-9ee9-4249ca983d48,0,1,86ea21fa-5ecc-4d81-b6ad-d71e7ed39009,86ea21fa-5ecc-4d81-b6ad-d71e7ed39009,0,1,b806d2b6-bbd1-4abd-9471-7791603a2fcf,b806d2b6-bbd1-4abd-9471-7791603a2fcf,0,1,d7aa519b-9a2e-4946-bd06-9ac22bb7c1e4,d7aa519b-9a2e-4946-bd06-9ac22bb7c1e4,0,1,ecee1ec8-aa1f-4b90-a1b3-2538a53c0dd7,ecee1ec8-aa1f-4b90-a1b3-2538a53c0dd7,0,1,34f50dd9-de16-4013-a2ef-6595d9c28930,34f50dd9-de16-4013-a2ef-6595d9c28930,0,1,56fcca65-3429-4409-bce7-f434f6530a74,56fcca65-3429-4409-bce7-f434f6530a74,0,1,5236ca8d-a4a6-4df8-a6a3-5cfe02c49aeb,5236ca8d-a4a6-4df8-a6a3-5cfe02c49aeb,0,1,bcfabf25-ae2f-4f73-836c-2cab3617a0b6,bcfabf25-ae2f-4f73-836c-2cab3617a0b6,0,1,b286f047-a4d0-4808-b1b4-27997ead6d49,b286f047-a4d0-4808-b1b4-27997ead6d49,0,1,49da2d3a-657a-4cfd-8e37-422b96d2cda5,49da2d3a-657a-4cfd-8e37-422b96d2cda5,0,1,fced16ae-abee-4fbe-9582-dfd368d5610a,fced16ae-abee-4fbe-9582-dfd368d5610a,0,1,afe60bad-1585-487f-9a39-9b9e031f9576,afe60bad-1585-487f-9a39-9b9e031f9576,0,1,4c4f0475-bd11-40c8-af0d-8affec6f838d,4c4f0475-bd11-40c8-af0d-8affec6f838d,0,1,7aee36ac-bbd1-4b06-8266-b7325fb9ce3c,7aee36ac-bbd1-4b06-8266-b7325fb9ce3c,0,1,855439d7-a621-48f5-b6d9-bc2bbd11ad90,855439d7-a621-48f5-b6d9-bc2bbd11ad90,0,1,4e0ec0f0-eb44-41b0-b950-88fdb6ac0db2,4e0ec0f0-eb44-41b0-b950-88fdb6ac0db2,0,1,2f25e742-555b-4db8-bff2-2d345ce2a93a,2f25e742-555b-4db8-bff2-2d345ce2a93a,0,1,303d8c17-4303-4f1d-8bed-51cd7ea0a4b2,303d8c17-4303-4f1d-8bed-51cd7ea0a4b2,0,1,46affd3a-f31c-4432-bd58-2f2b1ed9bc4e,46affd3a-f31c-4432-bd58-2f2b1ed9bc4e,0,1,a7fee9d3-569d-4b5b-bd47-44790e0095f5,a7fee9d3-569d-4b5b-bd47-44790e0095f5,0,1,a258fe12-7e55-4f89-86fa-962b1d2947ac,a258fe12-7e55-4f89-86fa-962b1d2947ac,0,1,93701593-5ac8-4266-b471-7e9ed35a9c3e,93701593-5ac8-4266-b471-7e9ed35a9c3e,0,1,0fdb864e-ede9-4777-835c-0804968ee544,0fdb864e-ede9-4777-835c-0804968ee544,0,1,04c45a51-4a8e-48fa-a39c-f67ce2079fc4,04c45a51-4a8e-48fa-a39c-f67ce2079fc4,0,1,b46546fe-3d6b-473f-a7cb-ff3b3ae0bafe,b46546fe-3d6b-473f-a7cb-ff3b3ae0bafe,0,1,e7b1810c-8e6c-4759-9e6f-c754b5a1ac77,e7b1810c-8e6c-4759-9e6f-c754b5a1ac77,0,1,5dee9814-fe38-4631-8148-8d6c87ef6f47,5dee9814-fe38-4631-8148-8d6c87ef6f47,0,1,37d17053-5c2b-4972-b6a5-a589f2ddbde6,37d17053-5c2b-4972-b6a5-a589f2ddbde6,0,1,c349968a-3f87-425b-8efb-d847934dee4b,c349968a-3f87-425b-8efb-d847934dee4b,0,1,3bb8dc33-970c-4c58-9036-ce716d963847,3bb8dc33-970c-4c58-9036-ce716d963847,0,1,fae0d2e0-1bcd-4a77-86d6-407ca05c1c95,fae0d2e0-1bcd-4a77-86d6-407ca05c1c95,0,1,b3ff39fa-f665-4d01-9a2a-69722e6b1071,b3ff39fa-f665-4d01-9a2a-69722e6b1071,0,1,0abacb0a-ce00-474e-8aec-35685c51ddef,0abacb0a-ce00-474e-8aec-35685c51ddef,0,1,ae407b17-03aa-4268-8603-58d6714dae89,ae407b17-03aa-4268-8603-58d6714dae89,0,1,5c0ce79b-97a9-4917-9b02-a4548a97d5a1,5c0ce79b-97a9-4917-9b02-a4548a97d5a1,0,1,c552cfac-d3ef-4b63-a0b9-7c79261ff9f3,c552cfac-d3ef-4b63-a0b9-7c79261ff9f3,0,1,5bb6e52c-ac26-4143-8e90-f04f703f823b,5bb6e52c-ac26-4143-8e90-f04f703f823b,0,1,579baaa4-6493-4d99-8744-6399757295c7,579baaa4-6493-4d99-8744-6399757295c7,0,1,ae6d0e12-8857-476c-b4b2-f03295cbed3e,ae6d0e12-8857-476c-b4b2-f03295cbed3e,0,1,cc8e3172-491d-45d8-a7eb-fc6c400845cb,cc8e3172-491d-45d8-a7eb-fc6c400845cb,0,1,d7cfc87f-ac09-44aa-91d9-6511c408c5cb,d7cfc87f-ac09-44aa-91d9-6511c408c5cb,0,1,7ee1e0d0-9735-45da-bd24-c0dbabfd5b1e,7ee1e0d0-9735-45da-bd24-c0dbabfd5b1e,0,1,bd0e3bd4-1207-41ea-8dfc-afa8f7d08cc2,bd0e3bd4-1207-41ea-8dfc-afa8f7d08cc2,0,1,51d83895-5692-4479-9612-07c790d19dff,51d83895-5692-4479-9612-07c790d19dff,0,1,9c1325af-7492-42be-b3af-51b692534510,9c1325af-7492-42be-b3af-51b692534510,0,1,dface15c-cd65-4fb1-b4dd-b513086d3f8e,dface15c-cd65-4fb1-b4dd-b513086d3f8e,0,1,d854b528-8456-4453-9c2d-4f96caf10481,d854b528-8456-4453-9c2d-4f96caf10481,0,1,245f870e-a53a-4d86-aa0a-c0c7709b8acb,245f870e-a53a-4d86-aa0a-c0c7709b8acb,0,1,476f6bfa-b10c-4e0f-8499-23c652715b3f,476f6bfa-b10c-4e0f-8499-23c652715b3f,0,1,65c9754b-53f6-4616-a9d4-74826f7b0ced,65c9754b-53f6-4616-a9d4-74826f7b0ced,0,1,eca2b076-d218-4d1c-948b-7894edf9fa49,eca2b076-d218-4d1c-948b-7894edf9fa49,0,1,d6969c1e-e13c-4542-abb7-9cf6bb50b8e2,d6969c1e-e13c-4542-abb7-9cf6bb50b8e2,0,1,ccd91f94-d3f1-4aa3-90cf-081d72c4cab1,ccd91f94-d3f1-4aa3-90cf-081d72c4cab1,0,1,aa7d5ca4-3c02-4ca1-a790-2435ee9f9f02,aa7d5ca4-3c02-4ca1-a790-2435ee9f9f02,0,1,b7e85f5c-4312-44c6-895a-3f636a8c78d8,b7e85f5c-4312-44c6-895a-3f636a8c78d8,0,1,3b6e7ee6-0ef5-464a-a01a-6143479c7a61,3b6e7ee6-0ef5-464a-a01a-6143479c7a61,0,1,1969e8d1-0a82-44cb-a0d4-e5badb1d28d4,1969e8d1-0a82-44cb-a0d4-e5badb1d28d4,0,1,a1afacc5-f49a-4df2-a44d-479594d50179,a1afacc5-f49a-4df2-a44d-479594d50179,0,1,fe70eba3-7477-4a38-a511-d69960abb928,fe70eba3-7477-4a38-a511-d69960abb928,0,1,6534ea96-2145-49e6-9739-f59459dc7f6b,6534ea96-2145-49e6-9739-f59459dc7f6b,0,1,f49bffa0-cad6-4801-b82e-21aa580e72e6,f49bffa0-cad6-4801-b82e-21aa580e72e6,0,1,bbbfb817-8db3-4415-86c3-af028276d6e9,bbbfb817-8db3-4415-86c3-af028276d6e9,0,1,6a91112c-f6cc-47a0-9d26-a36c7702af7d,6a91112c-f6cc-47a0-9d26-a36c7702af7d,0,1,40a59681-f31d-4fb9-9301-67c1430590e0,40a59681-f31d-4fb9-9301-67c1430590e0,0,1,cb92dc2e-6053-4233-a408-4464514b1257,cb92dc2e-6053-4233-a408-4464514b1257,0,1,8cd65ad3-a7a3-46f6-9061-e8751fd5073e,8cd65ad3-a7a3-46f6-9061-e8751fd5073e,0,1,85550a7a-8fe0-4296-ace5-63cf053536b4,85550a7a-8fe0-4296-ace5-63cf053536b4,0,1,cf1bd9cd-2ef2-4868-b6c0-5160860690f7,cf1bd9cd-2ef2-4868-b6c0-5160860690f7,0,1,9c3bc502-bcb1-4c90-ae43-53c798958339,9c3bc502-bcb1-4c90-ae43-53c798958339,0,1,3f8b6411-6606-4d27-891e-7c77be47c5f9,3f8b6411-6606-4d27-891e-7c77be47c5f9,0,1,bed3f0b2-40c6-4323-9bca-cb8864e38ec0,bed3f0b2-40c6-4323-9bca-cb8864e38ec0,0,1,5eb4ca7f-027a-4860-a167-e6b424527e7a,5eb4ca7f-027a-4860-a167-e6b424527e7a,0,1,f9b98ba5-1fa8-42a4-b1a2-dd71874083cb,f9b98ba5-1fa8-42a4-b1a2-dd71874083cb,0,1,6871015f-d959-4a77-a091-a23cb4ebd8f9,6871015f-d959-4a77-a091-a23cb4ebd8f9,0,1,e5e1631b-a494-4e73-b356-b4330b84cc88,e5e1631b-a494-4e73-b356-b4330b84cc88,0,1,f8f0857f-2c75-471a-ae0b-a3a265e1eb25,f8f0857f-2c75-471a-ae0b-a3a265e1eb25,0,1,a23f97fb-7ac9-4941-a2c6-bbff6c36ac12,a23f97fb-7ac9-4941-a2c6-bbff6c36ac12,0,1,80cf54ed-8677-4c89-a378-0abef6c64010,80cf54ed-8677-4c89-a378-0abef6c64010,0,1,f0dec7b3-2d6a-44ce-a1da-9c71ccd37539,f0dec7b3-2d6a-44ce-a1da-9c71ccd37539,0,1,56ee3afd-5ae6-421e-b9f3-26505e40f100,56ee3afd-5ae6-421e-b9f3-26505e40f100,0,1,63c9a839-78b2-4706-b380-5aedf6914930,63c9a839-78b2-4706-b380-5aedf6914930,0,1,40f5c1cb-2654-4738-bb44-6734b0e3490b,40f5c1cb-2654-4738-bb44-6734b0e3490b,0,1,2ec484b1-95eb-43a7-9430-1c1ef49f05af,2ec484b1-95eb-43a7-9430-1c1ef49f05af,0,1,1a314ce2-03bc-4267-89a9-bb5bb866f552,1a314ce2-03bc-4267-89a9-bb5bb866f552,0,1,e3b783a6-5ea2-4cd4-955b-df63d93c1f25,e3b783a6-5ea2-4cd4-955b-df63d93c1f25,0,1,f8ab62ad-7776-49ae-b1bb-51bea9a9992b,f8ab62ad-7776-49ae-b1bb-51bea9a9992b,0,1,e859dd18-8baf-49c0-b7a0-1205b6c125d3,e859dd18-8baf-49c0-b7a0-1205b6c125d3,0,1,da59378e-0a97-4cff-977b-cc51967068ee,da59378e-0a97-4cff-977b-cc51967068ee,0,1,bbaad46d-f60d-49e6-a077-075366bca47e,bbaad46d-f60d-49e6-a077-075366bca47e,0,1,0d9f5703-91e4-4769-bedd-5bd974f2f617,0d9f5703-91e4-4769-bedd-5bd974f2f617,0,1,926cdf17-1929-43d6-8205-858aab558ad9,926cdf17-1929-43d6-8205-858aab558ad9,0,1,5ec6838f-2d70-4f91-b41b-16adfe8ed587,5ec6838f-2d70-4f91-b41b-16adfe8ed587,0,1,6420ad7e-61ca-4af9-9715-f2b0c3e2c58f,6420ad7e-61ca-4af9-9715-f2b0c3e2c58f,0,1,bee8b8a0-f058-44cb-822c-620351567627,bee8b8a0-f058-44cb-822c-620351567627,0,1,26365e29-903b-47fd-ad96-e0d87f5d6e87,26365e29-903b-47fd-ad96-e0d87f5d6e87,0,1,569180cb-ce54-4267-94b9-332e35e3c17d,569180cb-ce54-4267-94b9-332e35e3c17d,0,1,9ec6fc35-e84e-4f82-b616-5c02e945cc8f,9ec6fc35-e84e-4f82-b616-5c02e945cc8f,0,1,a2c42946-1cdb-457a-a45b-97781cfb4a15,a2c42946-1cdb-457a-a45b-97781cfb4a15,0,1,20adf54c-044c-4bea-8028-b6d20917a030,20adf54c-044c-4bea-8028-b6d20917a030,0,1,dea6b05f-d3e1-4ff4-8f71-6a0c18134e94,dea6b05f-d3e1-4ff4-8f71-6a0c18134e94,0,1,fcb97a46-d5fd-4bb5-b899-17723a9fe346,fcb97a46-d5fd-4bb5-b899-17723a9fe346,0,1,a666af62-aa5d-4b2b-b9e5-017d1c93ae6a,a666af62-aa5d-4b2b-b9e5-017d1c93ae6a,0,1,7604b15a-8c5e-4515-84b9-c1d36f9efd0a,7604b15a-8c5e-4515-84b9-c1d36f9efd0a,0,1,a1a44832-6026-47ae-affd-5b6d52e84307,a1a44832-6026-47ae-affd-5b6d52e84307,0,1,d2fd8650-d13a-411d-8206-61b16016bd82,d2fd8650-d13a-411d-8206-61b16016bd82,0,1,f98bcdb8-6eed-4b4f-b3da-d80b5e8bed44,f98bcdb8-6eed-4b4f-b3da-d80b5e8bed44,0,1,a92acf0e-9132-4456-9a82-1543d98ca453,a92acf0e-9132-4456-9a82-1543d98ca453,0,1,4033eb31-8281-402a-afff-431fa36e589e,4033eb31-8281-402a-afff-431fa36e589e,0,1,5a1e1da5-7307-4f48-bb1c-2977fc4d7cef,5a1e1da5-7307-4f48-bb1c-2977fc4d7cef,0,1,f59488c7-4643-4988-8043-5c9724e04279,f59488c7-4643-4988-8043-5c9724e04279,0,1,cfe022b5-7647-4b5c-a2bd-f5d313f4a9db,cfe022b5-7647-4b5c-a2bd-f5d313f4a9db,0,1,3c0a9c45-8e57-43fa-8ae3-26b15571f2cd,3c0a9c45-8e57-43fa-8ae3-26b15571f2cd,0,1,85223d37-2503-4783-94dc-fe6265e718d5,85223d37-2503-4783-94dc-fe6265e718d5,0,1,0918cd76-56e5-4314-8a1c-c21d023ba6f8,0918cd76-56e5-4314-8a1c-c21d023ba6f8,0,1,9db21c2e-79fa-44e4-902e-416abfccb54a,9db21c2e-79fa-44e4-902e-416abfccb54a,0,1,fb082db3-197b-4d1e-b9ea-362624d547ee,fb082db3-197b-4d1e-b9ea-362624d547ee,0,1,c09dcf00-a45a-4487-99c5-d3a37956ec88,c09dcf00-a45a-4487-99c5-d3a37956ec88,0,1,531a5a0c-6ac9-4e93-8caa-42d9aad0bc82,531a5a0c-6ac9-4e93-8caa-42d9aad0bc82,0,1,2714e1b6-6b02-43a1-bc94-2934b429ed35,2714e1b6-6b02-43a1-bc94-2934b429ed35,0,1,e33c73b2-ef0b-49b7-a65f-ab2c814ad256,e33c73b2-ef0b-49b7-a65f-ab2c814ad256,0,1,4c7016da-9991-4917-8eaa-e760cc9e29d1,4c7016da-9991-4917-8eaa-e760cc9e29d1,0,1,d7b57669-e538-4e54-ab1b-8428f0586466,d7b57669-e538-4e54-ab1b-8428f0586466,0,1,9c484a15-039e-416d-af97-4c2bd90fd873,9c484a15-039e-416d-af97-4c2bd90fd873,0,1,534855e3-4cf2-471c-b982-7138917050c9,534855e3-4cf2-471c-b982-7138917050c9,0,1,4c72b944-d000-4920-aec8-54029f88ddf4,4c72b944-d000-4920-aec8-54029f88ddf4,0,1,b4033d05-05c2-4617-80d9-abfa389c47f4,b4033d05-05c2-4617-80d9-abfa389c47f4,0,1,aa29e1be-4e99-4136-8dc1-0124908979ad,aa29e1be-4e99-4136-8dc1-0124908979ad,0,1,0d76799d-7fc7-446b-88fb-dca839de00a5,0d76799d-7fc7-446b-88fb-dca839de00a5,0,1,cb5674c3-0d91-4948-bafd-d9ef44a2a69d,cb5674c3-0d91-4948-bafd-d9ef44a2a69d,0,1,ea4a869c-861c-412c-a3be-de1c57d1a251,ea4a869c-861c-412c-a3be-de1c57d1a251,0,1,eeafcc8c-fbe2-4bb4-8b8a-cf663208258d,eeafcc8c-fbe2-4bb4-8b8a-cf663208258d,0,1,6a3bd39a-59cb-4763-b49f-7ab67167a8b7,6a3bd39a-59cb-4763-b49f-7ab67167a8b7,0,1,50ac390d-324f-40bd-b3df-0468a63b94b6,50ac390d-324f-40bd-b3df-0468a63b94b6,0,1,80337710-2c60-45c4-ae1f-bb42731fb611,80337710-2c60-45c4-ae1f-bb42731fb611,0,1,9dcf467e-7701-4c7b-b747-95f4d9b9295c,9dcf467e-7701-4c7b-b747-95f4d9b9295c,0,1,77149f7a-8a76-4569-9487-991c41e132ef,77149f7a-8a76-4569-9487-991c41e132ef,0,1,9e1be65e-986f-4d21-91f0-15c66db0c947,9e1be65e-986f-4d21-91f0-15c66db0c947,0,1,75a0f8f1-6d8d-47d0-81c5-20b5e55b9cd1,75a0f8f1-6d8d-47d0-81c5-20b5e55b9cd1,0,1,d2fe4578-a1f8-4586-b052-fa71d25365c9,d2fe4578-a1f8-4586-b052-fa71d25365c9,0,1,f31f3dab-5796-47ac-a54d-3081f8cad817,f31f3dab-5796-47ac-a54d-3081f8cad817,0,1,cd59707e-b9e4-4038-8203-ae22a8060e8d,cd59707e-b9e4-4038-8203-ae22a8060e8d,0,1,db497857-33d3-49a1-b328-dfc62c973ecb,db497857-33d3-49a1-b328-dfc62c973ecb,0,1,139c001c-7b07-465a-9187-399ad32d294f,139c001c-7b07-465a-9187-399ad32d294f,0,1,5d228ce4-069e-4f98-beed-b8e1de17c3d9,5d228ce4-069e-4f98-beed-b8e1de17c3d9,0,1,9770fc09-87bf-4fce-9b0d-410efd30edae,9770fc09-87bf-4fce-9b0d-410efd30edae,0,1,f3d8590a-dcfa-4d41-8d03-642b99ffa040,f3d8590a-dcfa-4d41-8d03-642b99ffa040,0,1,3d73d5ff-995e-40ed-a401-cec2a3d12c8f,3d73d5ff-995e-40ed-a401-cec2a3d12c8f,0,1,20156709-1481-4007-8e89-9ce79fc589fc,20156709-1481-4007-8e89-9ce79fc589fc,0,1,fbcda361-0ef2-47b4-ba1c-1d1952898bd3,fbcda361-0ef2-47b4-ba1c-1d1952898bd3,0,1,7e7c5abd-b645-4de5-a40e-5805ec4456e2,7e7c5abd-b645-4de5-a40e-5805ec4456e2,0,1,763a16c3-a728-4b65-a485-705990310b4a,763a16c3-a728-4b65-a485-705990310b4a,0,1,65338920-c744-4d1e-b351-848b90a3feda,65338920-c744-4d1e-b351-848b90a3feda,0,1,2aedb1ac-caf1-45c7-913e-82a36637d5d4,2aedb1ac-caf1-45c7-913e-82a36637d5d4,0,1,e177e258-7d0c-4fe1-80e5-3b89de9e23d9,e177e258-7d0c-4fe1-80e5-3b89de9e23d9,0,1,3f25ac9f-c6b4-4ccc-bec4-a90c99403823,3f25ac9f-c6b4-4ccc-bec4-a90c99403823,0,1,56177464-5e9f-4598-96bc-eb311993c503,56177464-5e9f-4598-96bc-eb311993c503,0,1,c2308e60-2844-4bd8-bc8a-c9c20e5fc62d,c2308e60-2844-4bd8-bc8a-c9c20e5fc62d,0,1,bdfe65f4-4174-4e66-915c-943137981cf0,bdfe65f4-4174-4e66-915c-943137981cf0,0,1,5271de2d-d3a0-4128-90e0-cd8e1ea2ad30,5271de2d-d3a0-4128-90e0-cd8e1ea2ad30,0,1,c895d58a-5be1-4157-81af-f4f6db9b4b9e,c895d58a-5be1-4157-81af-f4f6db9b4b9e,0,1,8ce6cc1a-8570-4704-b9a3-44e815b2e753,8ce6cc1a-8570-4704-b9a3-44e815b2e753,0,1,71aa2bf7-85c9-40f3-a9b0-f6d666eddd28,71aa2bf7-85c9-40f3-a9b0-f6d666eddd28,0,1,497cbe4d-586d-48a2-8e98-d20e3e09ed42,497cbe4d-586d-48a2-8e98-d20e3e09ed42,0,1,38b7679d-3739-4572-baf2-d8c7b2a94f0a,38b7679d-3739-4572-baf2-d8c7b2a94f0a,0,1,1470f052-f032-46bc-b1ee-54555e725dfd,1470f052-f032-46bc-b1ee-54555e725dfd,0,1,4019a5e9-1f50-44b9-98ba-87c07a0ce4e5,4019a5e9-1f50-44b9-98ba-87c07a0ce4e5,0,1,7d336fdd-5cbf-4c92-a783-f451f7590502,7d336fdd-5cbf-4c92-a783-f451f7590502,0,1,ee8af8ee-e49a-4511-9a91-48814ab99d23,ee8af8ee-e49a-4511-9a91-48814ab99d23,0,1,3a7d9d49-b5e5-4c5c-958e-a4c6afda8b9d,3a7d9d49-b5e5-4c5c-958e-a4c6afda8b9d,0,1,bc10ad8f-383c-469a-8c0e-60805161055b,bc10ad8f-383c-469a-8c0e-60805161055b,0,1,86760ecb-2ddd-40ce-bc4f-94c23027a55e,86760ecb-2ddd-40ce-bc4f-94c23027a55e,0,1,6fbf844e-ee8d-490f-9177-6392d262312f,6fbf844e-ee8d-490f-9177-6392d262312f,0,1,703a3e8a-0204-4e8f-8fa0-a2ed1aeb7662,703a3e8a-0204-4e8f-8fa0-a2ed1aeb7662,0,1,f5d90a5a-1adb-49d6-8640-2e4054bdb99f,f5d90a5a-1adb-49d6-8640-2e4054bdb99f,0,1,37722a34-1148-4cc8-95e6-4645ae9cca98,37722a34-1148-4cc8-95e6-4645ae9cca98,0,1,11f32e0f-7d16-4ebd-9cef-fffd2d64e70a,11f32e0f-7d16-4ebd-9cef-fffd2d64e70a,0,1,cc34bd23-de0a-4b09-8333-e4693576b9f4,cc34bd23-de0a-4b09-8333-e4693576b9f4,0,1,b16d5e79-9d7e-4d3e-9be8-3b2a932abf78,b16d5e79-9d7e-4d3e-9be8-3b2a932abf78,0,1,903af13a-1f73-4145-a3d0-971c3be5fbe6,903af13a-1f73-4145-a3d0-971c3be5fbe6,0,1,fb42ad06-d5a4-40ea-817c-fa7ff385d8db,fb42ad06-d5a4-40ea-817c-fa7ff385d8db,0,1,bc110a6a-26fa-4aa1-a2ef-bdaeaa0a33af,bc110a6a-26fa-4aa1-a2ef-bdaeaa0a33af,0,1,953dbad6-4f5c-4319-874a-db358a77d001,953dbad6-4f5c-4319-874a-db358a77d001,0,1,05243f56-7e9b-4a61-8efb-1b5e525fff21,05243f56-7e9b-4a61-8efb-1b5e525fff21,0,1,7aa86a2d-2b47-447e-8901-806411011279,7aa86a2d-2b47-447e-8901-806411011279,0,1,fca0dfad-f853-4694-9ce9-53a3a10f59b7,fca0dfad-f853-4694-9ce9-53a3a10f59b7,0,1,934b8380-c6e0-49f8-a6c2-91c0ddb2f95e,934b8380-c6e0-49f8-a6c2-91c0ddb2f95e,0,1,57f4ee70-185e-4f2a-91a6-6c0bf93c1000,57f4ee70-185e-4f2a-91a6-6c0bf93c1000,0,1,b4cb92fb-ad82-44ed-9203-397b412b3453,b4cb92fb-ad82-44ed-9203-397b412b3453,0,1,69ceac29-06d3-45f2-b914-7966465cd0d3,69ceac29-06d3-45f2-b914-7966465cd0d3,0,1,b690721d-960b-4374-8d2c-feed3a2b354b,b690721d-960b-4374-8d2c-feed3a2b354b,0,1,271243d3-1871-4a0a-bf7f-63bacacf0a59,271243d3-1871-4a0a-bf7f-63bacacf0a59,0,1,b1ed134b-f2aa-4b06-b7a2-0e524ead04df,b1ed134b-f2aa-4b06-b7a2-0e524ead04df,0,1,150c9d05-4ccc-4cb7-879d-b1d9c3534343,150c9d05-4ccc-4cb7-879d-b1d9c3534343,0,1,65000437-bd07-4841-a458-679d44768c46,65000437-bd07-4841-a458-679d44768c46,0,1,1281fe19-bbca-4a4f-84d8-14187e62000f,1281fe19-bbca-4a4f-84d8-14187e62000f,0,1,9b7051d5-abc4-416c-a0e6-515d120d78e4,9b7051d5-abc4-416c-a0e6-515d120d78e4,0,1,86d1bc4e-f08d-48c7-8b3a-3c5feb0c843c,86d1bc4e-f08d-48c7-8b3a-3c5feb0c843c,0,1,869938e6-6310-4326-bd15-5b91fe2e0911,869938e6-6310-4326-bd15-5b91fe2e0911,0,1,8ed7254b-bbf8-49d9-8a73-9a91316fd02d,8ed7254b-bbf8-49d9-8a73-9a91316fd02d,0,1,a156521a-ece1-49d3-8056-1c3508273c45,a156521a-ece1-49d3-8056-1c3508273c45,0,1,075d39e0-a77a-4d0b-9260-7524fb5b2d0c,075d39e0-a77a-4d0b-9260-7524fb5b2d0c,0,1,10018f80-3138-4089-bf9a-a5f178f1e295,10018f80-3138-4089-bf9a-a5f178f1e295,0,1,43aba109-4b7f-45ef-9c30-8b754e81911b,43aba109-4b7f-45ef-9c30-8b754e81911b,0,1,4ccd72e1-7fd7-4a3b-8428-71b44992937e,4ccd72e1-7fd7-4a3b-8428-71b44992937e,0,1,46077650-2b2c-4319-8279-41f277971669,46077650-2b2c-4319-8279-41f277971669,0,1,4afe733d-64a0-4ea5-9d12-6e2c86eb91e4,4afe733d-64a0-4ea5-9d12-6e2c86eb91e4,0,1,612f3b95-d7db-4b33-92b5-4873205b424b,612f3b95-d7db-4b33-92b5-4873205b424b,0,1,d0b79c3d-b0c5-4eb3-9971-1def1c88698f,d0b79c3d-b0c5-4eb3-9971-1def1c88698f,0,1,e82ebd72-7b5a-4f45-b853-1001bf680a05,e82ebd72-7b5a-4f45-b853-1001bf680a05,0,1,a74879b8-c080-4cc0-b44f-2b7c4dae87fe,a74879b8-c080-4cc0-b44f-2b7c4dae87fe,0,1,e9e9b733-e97a-430d-95ce-45ea27751f64,e9e9b733-e97a-430d-95ce-45ea27751f64,0,1,86ffe9a7-9b3e-49ab-bd88-20269fec56bc,86ffe9a7-9b3e-49ab-bd88-20269fec56bc,0,1,3dd50c66-27f7-4f1e-86e9-c709995c8609,3dd50c66-27f7-4f1e-86e9-c709995c8609,0,1,45c0003f-0ed7-4582-b84e-217fdc4ddeaf,45c0003f-0ed7-4582-b84e-217fdc4ddeaf,0,1,ed1369c5-c274-45bd-ae91-7648565ae09f,ed1369c5-c274-45bd-ae91-7648565ae09f,0,1,8d0fce61-a22f-4033-9e03-3f00c4a21722,8d0fce61-a22f-4033-9e03-3f00c4a21722,0,1,bfb3f026-e940-49c3-ac30-408186f9e11e,bfb3f026-e940-49c3-ac30-408186f9e11e,0,1,e1dc83eb-a8cd-454b-8de8-cff2049be78c,e1dc83eb-a8cd-454b-8de8-cff2049be78c,0,1,9edd9288-1463-4d67-b9f0-40f351d978e9,9edd9288-1463-4d67-b9f0-40f351d978e9,0,1,c9db6c68-965f-4567-b26e-5d497a389de1,c9db6c68-965f-4567-b26e-5d497a389de1,0,1,4da2f65d-56bd-4140-9b31-e5ccac4a800a,4da2f65d-56bd-4140-9b31-e5ccac4a800a,0,1,eb163bba-b94c-4a78-9c2d-7b519325e3d4,eb163bba-b94c-4a78-9c2d-7b519325e3d4,0,1,58cdbd20-a7f4-4c4c-8a4e-638714cc2699,58cdbd20-a7f4-4c4c-8a4e-638714cc2699,0,1,616cd2cc-eaf4-4586-bca1-c044429b491a,616cd2cc-eaf4-4586-bca1-c044429b491a,0,1,939bdb9a-294b-4b42-a56f-030f69bc29c4,939bdb9a-294b-4b42-a56f-030f69bc29c4,0,1,ee7a763b-bcbf-4ff3-89af-eb7965b33515,ee7a763b-bcbf-4ff3-89af-eb7965b33515,0,1,e72b3ae6-00e9-45d7-a4f3-bc8a5a2f5ae4,e72b3ae6-00e9-45d7-a4f3-bc8a5a2f5ae4,0,1,81d900be-ddc1-417f-ae2c-1aacf040de9a,81d900be-ddc1-417f-ae2c-1aacf040de9a,0,1,c65f69ce-be78-4e8d-b91d-293c4108ce77,c65f69ce-be78-4e8d-b91d-293c4108ce77,0,1,521a5717-0b38-401d-bd72-30cee219bd14,521a5717-0b38-401d-bd72-30cee219bd14,0,1,977c30dc-6f27-4931-9fd5-d12ed147e3ec,977c30dc-6f27-4931-9fd5-d12ed147e3ec,0,1,eea4f72e-dd1b-46c7-b270-876a482236b3,eea4f72e-dd1b-46c7-b270-876a482236b3,0,1,25e8d286-dfbb-4fdf-974b-fe3f6f76eac0,25e8d286-dfbb-4fdf-974b-fe3f6f76eac0,0,1,2d249dad-8b4f-462b-ab13-892639a6e071,2d249dad-8b4f-462b-ab13-892639a6e071,0,1,f6249bf4-d2e7-48f3-808f-d776915d14cb,f6249bf4-d2e7-48f3-808f-d776915d14cb,0,1,75f11ecd-c87a-4a14-a7ca-c755f63d7cf8,75f11ecd-c87a-4a14-a7ca-c755f63d7cf8,0,1,883cdeb0-e747-4157-bbe7-0ebc423a82af,883cdeb0-e747-4157-bbe7-0ebc423a82af,0,1,ba62ac73-91da-4dad-abc7-3cf8acf7e315,ba62ac73-91da-4dad-abc7-3cf8acf7e315,0,1,6a71416d-dba1-4883-9264-597ecf9d6270,6a71416d-dba1-4883-9264-597ecf9d6270,0,1,ce3fc202-7893-4d1b-9c8f-1b3349a5c147,ce3fc202-7893-4d1b-9c8f-1b3349a5c147,0,1,6593baab-fce0-49ed-867e-be242bfc08d7,6593baab-fce0-49ed-867e-be242bfc08d7,0,1,403390cf-d3f8-4dfa-b83d-e2fca4ee0dff,403390cf-d3f8-4dfa-b83d-e2fca4ee0dff,0,1,57aed64d-da61-4c18-af21-dab3afdc5c03,57aed64d-da61-4c18-af21-dab3afdc5c03,0,1,452822b4-a590-44db-ab77-d8c01f7300e7,452822b4-a590-44db-ab77-d8c01f7300e7,0,1,62a71ba7-3226-4d10-8cc9-ac9908a00ae7,62a71ba7-3226-4d10-8cc9-ac9908a00ae7,0,1,6ce1d71d-7548-4ee7-be78-21ae23d5a08d,6ce1d71d-7548-4ee7-be78-21ae23d5a08d,0,1,f5ad6743-b19b-44c4-b3d1-2e39d74a4abd,f5ad6743-b19b-44c4-b3d1-2e39d74a4abd,0,1,4b89b7fb-31d9-43c7-9f7e-b0c31fa3331d,4b89b7fb-31d9-43c7-9f7e-b0c31fa3331d,0,1,19b29d30-e395-42f2-b700-7474bb2cdcb7,19b29d30-e395-42f2-b700-7474bb2cdcb7,0,1,b0deb957-624b-4bcb-824c-76aedf1affe9,b0deb957-624b-4bcb-824c-76aedf1affe9,0,1,9934e608-593d-45d0-9df3-539f0c8fc385,9934e608-593d-45d0-9df3-539f0c8fc385,0,1,80da4126-4319-425f-8427-7d60652cf754,80da4126-4319-425f-8427-7d60652cf754,0,1,05236ace-bcdd-4eb8-a1fb-5843ee311d10,05236ace-bcdd-4eb8-a1fb-5843ee311d10,0,1,0f1b284c-6c9e-4799-bc47-3326c4b7bec2,0f1b284c-6c9e-4799-bc47-3326c4b7bec2,0,1,449060fd-4711-4b9e-93e0-11b35c314fb3,449060fd-4711-4b9e-93e0-11b35c314fb3,0,1,e7efa9d5-ea93-4070-87bb-a4d95116d1b4,e7efa9d5-ea93-4070-87bb-a4d95116d1b4,0,1,0614d340-6524-4715-978d-87ab21377e72,0614d340-6524-4715-978d-87ab21377e72,0,1,d47daac5-ec3b-4d4e-8b01-045a37f7074d,d47daac5-ec3b-4d4e-8b01-045a37f7074d,0,1,9d6ed3b9-35cd-47c0-9dfc-732e5066a071,9d6ed3b9-35cd-47c0-9dfc-732e5066a071,0,1,912cbd30-1ed5-4888-a4b6-98e9215b28e9,912cbd30-1ed5-4888-a4b6-98e9215b28e9,0,1,abf093ce-be63-487d-8be4-be282aa475be,abf093ce-be63-487d-8be4-be282aa475be,0,1,7a910ad6-b922-4716-8140-1540d76296b2,7a910ad6-b922-4716-8140-1540d76296b2,0,1,a52450c7-af49-4f92-862f-47015826b447,a52450c7-af49-4f92-862f-47015826b447,0,1,2a19f8a7-4f9f-4e47-a8f4-271a6a13ddc0,2a19f8a7-4f9f-4e47-a8f4-271a6a13ddc0,0,1,3efa225a-db76-479a-b2fa-a40fd0ffb720,3efa225a-db76-479a-b2fa-a40fd0ffb720,0,1,807dd284-31cc-4725-8463-26b31a75d6bc,807dd284-31cc-4725-8463-26b31a75d6bc,0,1,00b7d44c-3f8a-4120-91f3-a63f073d8b37,00b7d44c-3f8a-4120-91f3-a63f073d8b37,0,1,d64f073e-4b58-4020-9233-ca8fbdcf85b2,d64f073e-4b58-4020-9233-ca8fbdcf85b2,0,1,b8931f98-c1d7-4e9b-be43-065064e7ba95,b8931f98-c1d7-4e9b-be43-065064e7ba95,0,1,ab2b472d-97d5-4c33-86fd-e2cdaedf3f3d,ab2b472d-97d5-4c33-86fd-e2cdaedf3f3d,0,1,60848308-931c-4da3-aa4b-37f6fb4b194f,60848308-931c-4da3-aa4b-37f6fb4b194f,0,1,08af8da8-d44b-46f0-a8d3-60421e7b5a1a,08af8da8-d44b-46f0-a8d3-60421e7b5a1a,0,1,54b14504-503b-45f6-9b5d-785b49829425,54b14504-503b-45f6-9b5d-785b49829425,0,1,80d3ee33-1cdc-4af6-85c2-787094526592,80d3ee33-1cdc-4af6-85c2-787094526592,0,1,c8b28660-6cb0-4ef5-85c2-a75da863ba96,c8b28660-6cb0-4ef5-85c2-a75da863ba96,0,1,1cd607b4-49fc-460e-a014-6afe50083b47,1cd607b4-49fc-460e-a014-6afe50083b47,0,1,a215e767-36e9-4408-9d18-7b4be757022a,a215e767-36e9-4408-9d18-7b4be757022a,0,1,a3e262bc-9f0d-480d-a1d1-c2326105d22d,a3e262bc-9f0d-480d-a1d1-c2326105d22d,0,1,8eae0c79-288b-4773-90bb-49299ad45628,8eae0c79-288b-4773-90bb-49299ad45628,0,1,2faa5594-f1b4-4312-b674-82fdf9623105,2faa5594-f1b4-4312-b674-82fdf9623105,0,1,185c1ad3-b5db-49b6-9342-d08e1bf64903,185c1ad3-b5db-49b6-9342-d08e1bf64903,0,1,3c69a4ad-001d-4421-88f6-412e15d710d6,3c69a4ad-001d-4421-88f6-412e15d710d6,0,1,d0373603-5abb-4f7b-8d2f-9f7fb52615aa,d0373603-5abb-4f7b-8d2f-9f7fb52615aa,0,1,f20a35fe-6029-4dc8-b6b4-b098dbce12e8,f20a35fe-6029-4dc8-b6b4-b098dbce12e8,0,1,6a68a08a-ea37-4573-ab9f-ec822f6d250b,6a68a08a-ea37-4573-ab9f-ec822f6d250b,0,1,00e87d04-8104-420b-b2c6-7304889a75b2,00e87d04-8104-420b-b2c6-7304889a75b2,0,1,bde86820-f7bb-463b-97d0-bfa5f8323af0,bde86820-f7bb-463b-97d0-bfa5f8323af0,0,1,289a6aac-dc4e-4fae-8815-853e78d450bb,289a6aac-dc4e-4fae-8815-853e78d450bb,0,1,557e7d89-83ed-45d0-86cc-6e355f14025d,557e7d89-83ed-45d0-86cc-6e355f14025d,0,1,d681b26b-dd8d-46d7-986e-10f05c37a1e4,d681b26b-dd8d-46d7-986e-10f05c37a1e4,0,1,4d3c216e-c04f-4884-8681-1c861c50ce7d,4d3c216e-c04f-4884-8681-1c861c50ce7d,0,1,4a41eee0-c973-4824-a07c-9fcf731f055e,4a41eee0-c973-4824-a07c-9fcf731f055e,0,1,ee756c33-f408-4449-a6bb-3186a0421362,ee756c33-f408-4449-a6bb-3186a0421362,0,1,fbfa8f64-52e4-48f6-b0fb-fd06976dd93d,fbfa8f64-52e4-48f6-b0fb-fd06976dd93d,0,1,6ff66622-4d20-4696-9fe9-4b4faeb21d96,6ff66622-4d20-4696-9fe9-4b4faeb21d96,0,1,46237eec-c206-4d21-883c-27599b9ed38c,46237eec-c206-4d21-883c-27599b9ed38c,0,1,8b451909-2c15-48f2-b869-65e7031cc542,8b451909-2c15-48f2-b869-65e7031cc542,0,1,ab6ff81a-56aa-4742-afe4-d7a652e9d2de,ab6ff81a-56aa-4742-afe4-d7a652e9d2de,0,1,7b377fca-4466-476f-9eb2-0b00141103d6,7b377fca-4466-476f-9eb2-0b00141103d6,0,1,9ce5eceb-f366-4035-956e-62721358b154,9ce5eceb-f366-4035-956e-62721358b154,0,1,1685c406-d0cb-4e0a-a3b0-036c8c22942a,1685c406-d0cb-4e0a-a3b0-036c8c22942a,0,1,892dc4c4-a72b-4dbf-af62-9f9ae0e05aa1,892dc4c4-a72b-4dbf-af62-9f9ae0e05aa1,0,1,81db41a6-2580-4a69-b1fd-57cfd48a7efa,81db41a6-2580-4a69-b1fd-57cfd48a7efa,0,1,0db8b3b2-bf24-4006-9897-797084c241ef,0db8b3b2-bf24-4006-9897-797084c241ef,0,1,fd9d34d9-9c9c-4c05-9c08-b93d4b237adf,fd9d34d9-9c9c-4c05-9c08-b93d4b237adf,0,1,381b7dae-6b34-42a7-9fee-2a4af8a1cc18,381b7dae-6b34-42a7-9fee-2a4af8a1cc18,0,1,31e9ca0d-9ae1-4740-a0a6-2739aa29c99f,31e9ca0d-9ae1-4740-a0a6-2739aa29c99f,0,1,20091427-d173-40ca-b2c4-53ee99b0b5ae,20091427-d173-40ca-b2c4-53ee99b0b5ae,0,1,14cbde39-a39a-48e5-9b72-b798a0bcea3f,14cbde39-a39a-48e5-9b72-b798a0bcea3f,0,1,56871c10-e3af-4679-afad-3baa910d73bb,56871c10-e3af-4679-afad-3baa910d73bb,0,1,f81b51c5-57e4-41f8-9ad5-3d2717351b95,f81b51c5-57e4-41f8-9ad5-3d2717351b95,0,1,3c09f0cd-fbec-46ae-95b0-a00cc53c07ef,3c09f0cd-fbec-46ae-95b0-a00cc53c07ef,0,1,de0a39e0-d37d-47c6-a019-e44836edc8d1,de0a39e0-d37d-47c6-a019-e44836edc8d1,0,1,1fdcc1e7-ad53-409e-ba13-84c6429740cd,1fdcc1e7-ad53-409e-ba13-84c6429740cd,0,1,71d544bf-15c1-4581-8baa-ac126308425c,71d544bf-15c1-4581-8baa-ac126308425c,0,1,1bd0b688-d0fb-4ca2-85aa-4bd82b72ccc2,1bd0b688-d0fb-4ca2-85aa-4bd82b72ccc2,0,1,7acfe30e-73cb-465a-88f2-92b7275dc49b,7acfe30e-73cb-465a-88f2-92b7275dc49b,0,1,8e387dac-5029-49da-a013-355df0a51a44,8e387dac-5029-49da-a013-355df0a51a44,0,1,13859664-8307-40e8-855b-557b9cf2f1ec,13859664-8307-40e8-855b-557b9cf2f1ec,0,1,e4397fba-507f-497c-9414-7d08ccd4d799,e4397fba-507f-497c-9414-7d08ccd4d799,0,1,794f5fb5-3b8f-4f45-9250-7a3b9d1db383,794f5fb5-3b8f-4f45-9250-7a3b9d1db383,0,1,f7a89bfc-e3c9-4894-a2df-6c229b4e0fd8,f7a89bfc-e3c9-4894-a2df-6c229b4e0fd8,0,1,1e8b70ce-27fc-418f-b3f3-e6efbce9f7a2,1e8b70ce-27fc-418f-b3f3-e6efbce9f7a2,0,1,d915d338-3e4c-45c3-aef5-a07cf41b05f6,d915d338-3e4c-45c3-aef5-a07cf41b05f6,0,1,978640a2-5c4b-4e21-857e-34f00840fba8,978640a2-5c4b-4e21-857e-34f00840fba8,0,1,da2913e3-a29b-423f-9aae-08fed56a7d90,da2913e3-a29b-423f-9aae-08fed56a7d90,0,1,149e72b8-cc03-4b4f-8ca4-07987600c34d,149e72b8-cc03-4b4f-8ca4-07987600c34d,0,1,7649bd7b-fe8c-4338-80fc-153160a5e538,7649bd7b-fe8c-4338-80fc-153160a5e538,0,1,7779cd6d-8fa1-49cb-9bbc-9dfd0979f3f4,7779cd6d-8fa1-49cb-9bbc-9dfd0979f3f4,0,1,3dec1ae7-90bb-45ab-aa04-48cfbc14742e,3dec1ae7-90bb-45ab-aa04-48cfbc14742e,0,1,6137605e-4850-44ec-b4ee-048bd8e0ec3a,6137605e-4850-44ec-b4ee-048bd8e0ec3a,0,1,ee28aa9b-0f31-4d8b-8444-43b8bc88bd23,ee28aa9b-0f31-4d8b-8444-43b8bc88bd23,0,1,0e6e9372-beb4-478e-9428-71b19a60739b,0e6e9372-beb4-478e-9428-71b19a60739b,0,1,32b11498-542f-46b2-829f-1525936ab7fa,32b11498-542f-46b2-829f-1525936ab7fa,0,1,64afa916-4750-4008-8c6c-2a470fb11283,64afa916-4750-4008-8c6c-2a470fb11283,0,1,f4a85bfb-40c7-4f81-af32-d07b96c53ad0,f4a85bfb-40c7-4f81-af32-d07b96c53ad0,0,1,35354abc-9a76-4ee8-8796-c24b37365ea0,35354abc-9a76-4ee8-8796-c24b37365ea0,0,1,7078977f-31bf-427e-ac37-e309d81fe999,7078977f-31bf-427e-ac37-e309d81fe999,0,1,bb39ae51-be82-4bb5-a30e-2bf2b53be59e,bb39ae51-be82-4bb5-a30e-2bf2b53be59e,0,1,d8854555-9e15-4d82-a1fd-656a848a8e8a,d8854555-9e15-4d82-a1fd-656a848a8e8a,0,1,53191842-ea05-4491-84d7-071cd201992d,53191842-ea05-4491-84d7-071cd201992d,0,1,86c70449-4cf7-4baf-9742-b82b134ed929,86c70449-4cf7-4baf-9742-b82b134ed929,0,1,af3b1881-163a-4c07-a1d9-77ceadf59c77,af3b1881-163a-4c07-a1d9-77ceadf59c77,0,1,b78be6fb-7db8-48c8-ba7b-aab1fea34890,b78be6fb-7db8-48c8-ba7b-aab1fea34890,0,1,bd27276a-e80c-4135-b341-f99a816ffe86,bd27276a-e80c-4135-b341-f99a816ffe86,0,1,35306678-147c-4ad1-a3c6-c80a11afa22f,35306678-147c-4ad1-a3c6-c80a11afa22f,0,1,0da75726-ae71-4d83-a696-a774c787a8a2,0da75726-ae71-4d83-a696-a774c787a8a2,0,1,5b30b0e9-f986-49b8-8668-5bb0e09f0cfe,5b30b0e9-f986-49b8-8668-5bb0e09f0cfe,0,1,896a7267-0198-4cbb-b6e6-7aa157c0cc61,896a7267-0198-4cbb-b6e6-7aa157c0cc61,0,1,2005bf54-219b-4111-bff1-e12e2c6dca3e,2005bf54-219b-4111-bff1-e12e2c6dca3e,0,1,abab8f73-d705-4350-b44d-f912649a2190,abab8f73-d705-4350-b44d-f912649a2190,0,1,20c9c25c-f8c9-429f-84bd-543cb809abef,20c9c25c-f8c9-429f-84bd-543cb809abef,0,1,dc5f451e-3275-43a8-9f48-45b83220d461,dc5f451e-3275-43a8-9f48-45b83220d461,0,1,028f5e81-61df-4d13-876d-781c5fd18ee6,028f5e81-61df-4d13-876d-781c5fd18ee6,0,1,3cbb59ef-7f64-4590-8a54-ba01e78283c3,3cbb59ef-7f64-4590-8a54-ba01e78283c3,0,1,a5b83672-2ead-4d0a-a4e5-ddd991f1addc,a5b83672-2ead-4d0a-a4e5-ddd991f1addc,0,1,388eb513-fadb-40cd-8a7b-33b904dd758e,388eb513-fadb-40cd-8a7b-33b904dd758e,0,1,0613c6aa-e1fe-4632-a396-a17ec773158f,0613c6aa-e1fe-4632-a396-a17ec773158f,0,1,1a330987-4c79-4ab7-b250-db8d32c78751,1a330987-4c79-4ab7-b250-db8d32c78751,0,1,555062ed-9a04-41d8-877f-0a667e9a08cd,555062ed-9a04-41d8-877f-0a667e9a08cd,0,1,5b1db523-b5cb-4ff8-8662-5feeb4282b4a,5b1db523-b5cb-4ff8-8662-5feeb4282b4a,0,1,ac160e1c-fef7-4625-84e0-964b397f6bdb,ac160e1c-fef7-4625-84e0-964b397f6bdb,0,1,b8946d9c-dda8-4b94-8cbf-db62b647c53e,b8946d9c-dda8-4b94-8cbf-db62b647c53e,0,1,24215916-7732-4030-9f88-163f644e94f7,24215916-7732-4030-9f88-163f644e94f7,0,1,69697945-9748-4cea-a20f-e244b46de2e8,69697945-9748-4cea-a20f-e244b46de2e8,0,1,68538fd1-262c-43ea-b09f-8a66643a0062,68538fd1-262c-43ea-b09f-8a66643a0062,0,1,d042a8e1-a7b9-4f26-abc4-d618bc73e9f5,d042a8e1-a7b9-4f26-abc4-d618bc73e9f5,0,1,82ad24cc-d9f8-440b-a720-e204101d85da,82ad24cc-d9f8-440b-a720-e204101d85da,0,1,8010065f-aec8-4768-85ec-9eb7b2b01e7e,8010065f-aec8-4768-85ec-9eb7b2b01e7e,0,1,a44348cb-e20c-4afd-8483-3b9c735b352c,a44348cb-e20c-4afd-8483-3b9c735b352c,0,1,ebfe4c74-6e16-4b64-8a52-cea95c446903,ebfe4c74-6e16-4b64-8a52-cea95c446903,0,1,ea9ed37c-7f58-43a8-990c-f1feb5d2d275,ea9ed37c-7f58-43a8-990c-f1feb5d2d275,0,1,d912e472-9553-4b96-8b16-7aaff6c14239,d912e472-9553-4b96-8b16-7aaff6c14239,0,1,b04018b5-a74d-43c9-8519-6cc8aa23fe09,b04018b5-a74d-43c9-8519-6cc8aa23fe09,0,1,8f5af22e-3e73-4a4f-b91e-eccd0f5084fd,8f5af22e-3e73-4a4f-b91e-eccd0f5084fd,0,1,9283277f-2b75-4c3a-810a-8d4071b3afcc,9283277f-2b75-4c3a-810a-8d4071b3afcc,0,1,d03d5b18-57a2-43c0-99ea-8ad9d5788179,d03d5b18-57a2-43c0-99ea-8ad9d5788179,0,1,c491a7fc-14f9-498a-b7dd-575dfc66878e,c491a7fc-14f9-498a-b7dd-575dfc66878e,0,1,db15f8eb-4736-4b47-9cee-3e6883f0888c,db15f8eb-4736-4b47-9cee-3e6883f0888c,0,1,59064eb2-2770-4f1c-96bd-801926fe68ef,59064eb2-2770-4f1c-96bd-801926fe68ef,0,1,df81cc63-26f2-4e66-bf0b-fd083a6a7d7b,df81cc63-26f2-4e66-bf0b-fd083a6a7d7b,0,1,8a8848b8-345a-452d-bf95-28f9c91c7e95,8a8848b8-345a-452d-bf95-28f9c91c7e95,0,1,6b2340d7-687f-43a3-8eb8-8ddb86712466,6b2340d7-687f-43a3-8eb8-8ddb86712466,0,1,40b08a20-51a3-438b-ba54-466917ea809f,40b08a20-51a3-438b-ba54-466917ea809f,0,1,9846e2f6-d82a-42a6-bf50-2a9cdf750a8f,9846e2f6-d82a-42a6-bf50-2a9cdf750a8f,0,1,9328da5c-4689-4a60-8136-ae9eac46ab38,9328da5c-4689-4a60-8136-ae9eac46ab38,0,1,ca5d586f-81bb-40ee-b3bd-de854857c984,ca5d586f-81bb-40ee-b3bd-de854857c984,0,1,af22406b-daac-475d-b6a9-577452502b84,af22406b-daac-475d-b6a9-577452502b84,0,1,7a925960-a579-4b06-90e0-5121dc774024,7a925960-a579-4b06-90e0-5121dc774024,0,1,32c10512-7bb8-423b-9503-ab2fa41386a4,32c10512-7bb8-423b-9503-ab2fa41386a4,0,1,888edfc4-8140-4675-b267-c32bf1d8d29d,888edfc4-8140-4675-b267-c32bf1d8d29d,0,1,2abbd53a-0ead-42af-8df6-fde663aea300,2abbd53a-0ead-42af-8df6-fde663aea300,0,1,24611bf9-5492-443a-935c-a0058e86493f,24611bf9-5492-443a-935c-a0058e86493f,0,1,42641296-64da-46e0-a407-de2d492f9c90,42641296-64da-46e0-a407-de2d492f9c90,0,1,b834af0b-086c-445d-a271-7e178c324551,b834af0b-086c-445d-a271-7e178c324551,0,1,ec34befe-3c0b-4a75-b943-840c52e7dda5,ec34befe-3c0b-4a75-b943-840c52e7dda5,0,1,7f18eb86-e9ac-4cb8-a9aa-389f61dff582,7f18eb86-e9ac-4cb8-a9aa-389f61dff582,0,1,b5e81952-e469-4f26-b8d2-90e7d9e7bc1d,b5e81952-e469-4f26-b8d2-90e7d9e7bc1d,0,1,6733f1bd-7878-4a33-8995-c07526e87c1a,6733f1bd-7878-4a33-8995-c07526e87c1a,0,1,f7e73257-fae1-465a-ae74-faaa0273a416,f7e73257-fae1-465a-ae74-faaa0273a416,0,1,73f89524-dbe8-426f-8ee6-1277eb1967cc,73f89524-dbe8-426f-8ee6-1277eb1967cc,0,1,ee7d970c-cef7-4740-a357-1fe78f88a6e6,ee7d970c-cef7-4740-a357-1fe78f88a6e6,0,1,ff18803b-4c3a-4720-a718-7547f04c6e2f,ff18803b-4c3a-4720-a718-7547f04c6e2f,0,1,0e0670d6-d8f7-4728-bd1b-f016fffa0570,0e0670d6-d8f7-4728-bd1b-f016fffa0570,0,1,13beb01d-dd08-4a6d-863b-651e70bbf51f,13beb01d-dd08-4a6d-863b-651e70bbf51f,0,1,a53f6e85-fbf7-4fb1-9301-d63e812fe16c,a53f6e85-fbf7-4fb1-9301-d63e812fe16c,0,1,57a0f5f3-6573-4b35-af25-cea3a25641f1,57a0f5f3-6573-4b35-af25-cea3a25641f1,0,1,0b7c4cb7-5126-4b5e-8941-cd56eaef76a0,0b7c4cb7-5126-4b5e-8941-cd56eaef76a0,0,1,144d5498-bb61-4bec-bef3-85a5a4aec3d5,144d5498-bb61-4bec-bef3-85a5a4aec3d5,0,1,ecaa0af8-549c-4c07-82ff-1c4e02ff15b8,ecaa0af8-549c-4c07-82ff-1c4e02ff15b8,0,1,45a8c780-c067-40d7-bbe9-81f854aacf7a,45a8c780-c067-40d7-bbe9-81f854aacf7a,0,1,57885cac-059a-4a08-aa2c-43b116d2c777,57885cac-059a-4a08-aa2c-43b116d2c777,0,1,c0403df4-b1f2-4d7e-adb5-9ed881c1359b,c0403df4-b1f2-4d7e-adb5-9ed881c1359b,0,1,56b570b1-93b0-468a-9672-9c71113753f3,56b570b1-93b0-468a-9672-9c71113753f3,0,1,e693eac3-f55d-4102-ac6d-b14ef33fb2e7,e693eac3-f55d-4102-ac6d-b14ef33fb2e7,0,1,e7b0ae70-0192-456c-9dc5-e66049fa9df2,e7b0ae70-0192-456c-9dc5-e66049fa9df2,0,1,68944d09-618e-4fa3-a7af-8c84218e0ac7,68944d09-618e-4fa3-a7af-8c84218e0ac7,0,1,91b12ce3-e8ba-4c9d-9daa-1d5532500314,91b12ce3-e8ba-4c9d-9daa-1d5532500314,0,1,733dc291-0bef-4fe8-ac9f-63440f0c2ad0,733dc291-0bef-4fe8-ac9f-63440f0c2ad0,0,1,5b7b7dc3-dbef-4854-9395-30a3ae4d751c,5b7b7dc3-dbef-4854-9395-30a3ae4d751c,0,1,cb57aabc-eeef-42b4-9bc2-873cebd9618c,cb57aabc-eeef-42b4-9bc2-873cebd9618c,0,1,2fcd2c85-6778-42fa-9bdd-a6ba47497ec0,2fcd2c85-6778-42fa-9bdd-a6ba47497ec0,0,1,52f30ed7-aa16-4ce2-9684-e50229ab0015,52f30ed7-aa16-4ce2-9684-e50229ab0015,0,1,79c2e2bd-f923-42ec-8bdc-3e517e08ee7c,79c2e2bd-f923-42ec-8bdc-3e517e08ee7c,0,1,0526492c-be48-4c84-8d68-19fa1c7e9d6e,0526492c-be48-4c84-8d68-19fa1c7e9d6e,0,1,54ecaf7b-9bc5-483c-96e1-270bcd323590,54ecaf7b-9bc5-483c-96e1-270bcd323590,0,1,2a1f77ba-fa2e-4281-8e68-7ec4ca0261b7,2a1f77ba-fa2e-4281-8e68-7ec4ca0261b7,0,1,58f6f8fa-7473-40f5-973a-6279335d8f33,58f6f8fa-7473-40f5-973a-6279335d8f33,0,1,ec0c3187-de61-4bc8-a52a-7617f47ffb6d,ec0c3187-de61-4bc8-a52a-7617f47ffb6d,0,1,1e71ec59-55a4-45e8-a8c9-f70c2cb56589,1e71ec59-55a4-45e8-a8c9-f70c2cb56589,0,1,fa3632fe-185b-49aa-85ae-dfb721835d40,fa3632fe-185b-49aa-85ae-dfb721835d40,0,1,a4f15108-477c-465e-aaea-cb495ef52cf5,a4f15108-477c-465e-aaea-cb495ef52cf5,0,1,9cda5c2c-f401-4f63-b445-cef160296e48,9cda5c2c-f401-4f63-b445-cef160296e48,0,1,e8ae4a26-3127-43ae-af7a-c2e278d2611d,e8ae4a26-3127-43ae-af7a-c2e278d2611d,0,1,b923c78f-d074-41b4-b832-086686258f19,b923c78f-d074-41b4-b832-086686258f19,0,1,8ff96413-6fdd-4b8d-a181-ea0d8633defc,8ff96413-6fdd-4b8d-a181-ea0d8633defc,0,1,54604ed2-766b-4308-b99e-447817d82799,54604ed2-766b-4308-b99e-447817d82799,0,1,7abdb07b-edbc-4c3b-aa53-afaa92dc9071,7abdb07b-edbc-4c3b-aa53-afaa92dc9071,0,1,f48b4475-2cd9-41df-962a-6529f84985ca,f48b4475-2cd9-41df-962a-6529f84985ca,0,1,2fbfe405-48e6-4abf-99c2-7f1f66a62b48,2fbfe405-48e6-4abf-99c2-7f1f66a62b48,0,1,5e6637c7-19b5-4ac2-a8e9-d119e49f444e,5e6637c7-19b5-4ac2-a8e9-d119e49f444e,0,1,bf94feb9-edf7-4df8-b5f5-805613663a0a,bf94feb9-edf7-4df8-b5f5-805613663a0a,0,1,6d852a13-c85e-4e84-8396-f91c1ed0596e,6d852a13-c85e-4e84-8396-f91c1ed0596e,0,1,9c2d5313-a4fd-417e-a340-ad4980d0028b,9c2d5313-a4fd-417e-a340-ad4980d0028b,0,1,4fb4a280-9426-4c41-a9ba-11f9d01a0740,4fb4a280-9426-4c41-a9ba-11f9d01a0740,0,1,1591ee7e-870c-4bf7-9450-be84f1b2506f,1591ee7e-870c-4bf7-9450-be84f1b2506f,0,1,8f088f33-92d7-4e35-915d-6cda1129dd80,8f088f33-92d7-4e35-915d-6cda1129dd80,0,1,9a8578a2-8a92-4ab3-a480-173340f8b34a,9a8578a2-8a92-4ab3-a480-173340f8b34a,0,1,4889d27b-435b-4059-a34d-6afdf3c77fa3,4889d27b-435b-4059-a34d-6afdf3c77fa3,0,1,4ebf0988-ccc3-440c-bd0f-2d01636bd730,4ebf0988-ccc3-440c-bd0f-2d01636bd730,0,1,c1be2a02-53b8-4c28-92b2-b6e0c83ab452,c1be2a02-53b8-4c28-92b2-b6e0c83ab452,0,1,4b54d626-dc59-4e49-a708-0a7f98833b9a,4b54d626-dc59-4e49-a708-0a7f98833b9a,0,1,1c90a423-ef1b-42dc-a43b-1fda89672481,1c90a423-ef1b-42dc-a43b-1fda89672481,0,1,095cf2d6-5a7c-452d-8d60-991afb6e52bd,095cf2d6-5a7c-452d-8d60-991afb6e52bd,0,1,f9213a70-bfd6-464f-b28b-ed35bdf351c0,f9213a70-bfd6-464f-b28b-ed35bdf351c0,0,1,ca5957af-69c9-4640-b9a9-b241c4f9eaa7,ca5957af-69c9-4640-b9a9-b241c4f9eaa7,0,1,7e32c295-a769-4cff-a3eb-992f7031475f,7e32c295-a769-4cff-a3eb-992f7031475f,0,1,eb81610a-eb2f-4068-ba74-75e0f5bbace8,eb81610a-eb2f-4068-ba74-75e0f5bbace8,0,1,21826316-0b49-4034-a49e-6d34c15ceb5c,21826316-0b49-4034-a49e-6d34c15ceb5c,0,1,3abffa47-8d47-4173-897b-708e1a06ef39,3abffa47-8d47-4173-897b-708e1a06ef39,0,1,0cf3d615-76a1-428d-9d25-0d7fdf09e4ae,0cf3d615-76a1-428d-9d25-0d7fdf09e4ae,0,1,5a398637-a06c-4442-9093-a864fa7f049f,5a398637-a06c-4442-9093-a864fa7f049f,0,1,38692186-a62a-42d1-87cd-7dbc6d4816ed,38692186-a62a-42d1-87cd-7dbc6d4816ed,0,1,6cfcdb89-ccb2-45fe-a7b1-5a29ccd6c5ae,6cfcdb89-ccb2-45fe-a7b1-5a29ccd6c5ae,0,1,3a28cea9-7fd7-4834-ab89-2a74331a64e3,3a28cea9-7fd7-4834-ab89-2a74331a64e3,0,1,0f881709-4520-4f18-af9d-cf08757693ff,0f881709-4520-4f18-af9d-cf08757693ff,0,1,c5151ca9-5103-42b2-8573-273c15416db8,c5151ca9-5103-42b2-8573-273c15416db8,0,1,fe4aa694-76c4-49c9-96ce-a2476f4ff58b,fe4aa694-76c4-49c9-96ce-a2476f4ff58b,0,1,ba8c43ad-678a-4b18-8bbe-5a1b12d19b74,ba8c43ad-678a-4b18-8bbe-5a1b12d19b74,0,1,115a6019-ef87-4126-8ebf-070c1e882940,115a6019-ef87-4126-8ebf-070c1e882940,0,1,162ce023-b2e1-41dc-bcaf-b8e30caccce0,162ce023-b2e1-41dc-bcaf-b8e30caccce0,0,1,52bdd3cc-7103-4dbf-a3c3-dd46cf03da12,52bdd3cc-7103-4dbf-a3c3-dd46cf03da12,0,1,c13fb1cd-fe72-48a6-b383-55b6323619ce,c13fb1cd-fe72-48a6-b383-55b6323619ce,0,1,956fc8ee-96be-4309-b1e8-209372f151ab,956fc8ee-96be-4309-b1e8-209372f151ab,0,1,526c688e-a4d4-45f7-8bba-b8ceff38fe27,526c688e-a4d4-45f7-8bba-b8ceff38fe27,0,1,67efa786-312f-4c9c-b970-0320e92069af,67efa786-312f-4c9c-b970-0320e92069af,0,1,12f85e09-1190-4483-b531-630ab718db7f,12f85e09-1190-4483-b531-630ab718db7f,0,1,52f4453e-e968-4290-a79a-470f68fbd07f,52f4453e-e968-4290-a79a-470f68fbd07f,0,1,5b952e35-1037-4447-8293-6d8889692c8b,5b952e35-1037-4447-8293-6d8889692c8b,0,1,05bc8b4e-8c90-4502-8b16-7b1e7625d569,05bc8b4e-8c90-4502-8b16-7b1e7625d569,0,1,ce34d88d-3017-4197-a962-ea23a6a96d32,ce34d88d-3017-4197-a962-ea23a6a96d32,0,1,2cbc16da-aa67-4ad6-82f8-fa6922447be6,2cbc16da-aa67-4ad6-82f8-fa6922447be6,0,1,19d7a1ba-c343-4575-95da-53dac6d4b2cb,19d7a1ba-c343-4575-95da-53dac6d4b2cb,0,1,6cc8b3a0-3377-4b39-b6b0-69c862a15465,6cc8b3a0-3377-4b39-b6b0-69c862a15465,0,1,acb193f4-52e5-4572-a79b-b825a2f6525f,acb193f4-52e5-4572-a79b-b825a2f6525f,0,1,5d46f719-e468-48e2-b4ec-acb85c710451,5d46f719-e468-48e2-b4ec-acb85c710451,0,1,9fb13bfe-80c7-43c3-b0da-9185ab197ce2,9fb13bfe-80c7-43c3-b0da-9185ab197ce2,0,1,cd80a520-1d1c-4d80-8a4a-360ac1ca98d8,cd80a520-1d1c-4d80-8a4a-360ac1ca98d8,0,1,e9aef0c8-9dc4-4c4a-8288-8b2d9860624d,e9aef0c8-9dc4-4c4a-8288-8b2d9860624d,0,1,5422610d-b92c-4213-a58c-8db067d93b66,5422610d-b92c-4213-a58c-8db067d93b66,0,1,8f59a635-9e0e-470d-8fda-a47a262a59c2,8f59a635-9e0e-470d-8fda-a47a262a59c2,0,1,ffb50eb9-149a-46ec-9472-d8f20ad09810,ffb50eb9-149a-46ec-9472-d8f20ad09810,0,1,5ae3bba3-dc98-4470-a73d-3bd951c0a3f2,5ae3bba3-dc98-4470-a73d-3bd951c0a3f2,0,1,7a6449e2-e90a-4720-a769-192284ef69c1,7a6449e2-e90a-4720-a769-192284ef69c1,0,1,02118b98-2349-46b1-a328-d6e2b5781f7e,02118b98-2349-46b1-a328-d6e2b5781f7e,0,1,67de9cbb-5c80-4cff-bfbe-269a958e08e6,67de9cbb-5c80-4cff-bfbe-269a958e08e6,0,1,2228a457-6805-41ee-85af-5ebca9568bf4,2228a457-6805-41ee-85af-5ebca9568bf4,0,1,96b71795-e230-4ecb-b98d-4feb3f8b9662,96b71795-e230-4ecb-b98d-4feb3f8b9662,0,1,04055821-03ce-4049-af2c-8670c80517f6,04055821-03ce-4049-af2c-8670c80517f6,0,1,0101305d-62eb-4802-9cd4-d615a518d842,0101305d-62eb-4802-9cd4-d615a518d842,0,1,898d2ba7-631a-4e7a-9bdf-cd2ef411e57a,898d2ba7-631a-4e7a-9bdf-cd2ef411e57a,0,1,bf1fc624-60d7-4a04-bb3a-b6e2882bebfe,bf1fc624-60d7-4a04-bb3a-b6e2882bebfe,0,1,7c424424-9660-462d-9cf2-4c1e6bd284fa,7c424424-9660-462d-9cf2-4c1e6bd284fa,0,1,e118f957-ab2c-473b-ab64-37032f727416,e118f957-ab2c-473b-ab64-37032f727416,0,1,e770e26e-a3a4-487d-b3bb-aeb63d8b7323,e770e26e-a3a4-487d-b3bb-aeb63d8b7323,0,1,21f64e5f-dc94-4ce9-b836-e75646ae3325,21f64e5f-dc94-4ce9-b836-e75646ae3325,0,1,82e8a180-f2e1-406c-9609-89d33504aff2,82e8a180-f2e1-406c-9609-89d33504aff2,0,1,e7437c81-3d5b-466e-880c-8febe4a68e88,e7437c81-3d5b-466e-880c-8febe4a68e88,0,1,99bc26f9-ba56-4c63-9fd1-c2f3d630b93c,99bc26f9-ba56-4c63-9fd1-c2f3d630b93c,0,1,307771e6-bcf7-4016-b369-e1655bbe9e94,307771e6-bcf7-4016-b369-e1655bbe9e94,0,1,bf8c60f7-7dea-4a2c-8ce2-7001a6a37bfa,bf8c60f7-7dea-4a2c-8ce2-7001a6a37bfa,0,1,38fc6a54-846c-40b0-9254-3261f540bf18,38fc6a54-846c-40b0-9254-3261f540bf18,0,1,d9134d0c-56cd-4b8f-ab11-ae37fc306801,d9134d0c-56cd-4b8f-ab11-ae37fc306801,0,1,9408d0ee-bd61-4b95-ac7c-98de139b5f9e,9408d0ee-bd61-4b95-ac7c-98de139b5f9e,0,1,8f2af24b-f5fa-4f6d-831e-28453bdedefc,8f2af24b-f5fa-4f6d-831e-28453bdedefc,0,1,d119e21d-0087-4f22-b3bd-b14707b65330,d119e21d-0087-4f22-b3bd-b14707b65330,0,1,dc9b4072-11de-40fe-bf2a-f7b15af0a250,dc9b4072-11de-40fe-bf2a-f7b15af0a250,0,1,e2cf5ca9-c2a0-4506-89e6-318cad0a48a3,e2cf5ca9-c2a0-4506-89e6-318cad0a48a3,0,1,5aecdfd1-1cd7-4523-be23-7e32fcb01a94,5aecdfd1-1cd7-4523-be23-7e32fcb01a94,0,1,932b1c1a-72eb-49cd-8218-d0ced9c454d8,932b1c1a-72eb-49cd-8218-d0ced9c454d8,0,1,96d70dc4-02bd-47ad-9465-81de6ff5bdc9,96d70dc4-02bd-47ad-9465-81de6ff5bdc9,0,1,38acaf7a-5a77-40bf-ba2a-17b31cccd37d,38acaf7a-5a77-40bf-ba2a-17b31cccd37d,0,1,cb604857-8e49-4f2f-b5c8-2a7d8a3cf8e4,cb604857-8e49-4f2f-b5c8-2a7d8a3cf8e4,0,1,f33e9c76-e523-4f4e-ab4b-3fc1b256d8dd,f33e9c76-e523-4f4e-ab4b-3fc1b256d8dd,0,1,5dd336c4-88c5-4f53-acf0-5f86a658c528,5dd336c4-88c5-4f53-acf0-5f86a658c528,0,1,c723112b-286d-46f1-989d-81252062a025,c723112b-286d-46f1-989d-81252062a025,0,1,67e8b47e-4bad-4b2f-b196-8a9708893051,67e8b47e-4bad-4b2f-b196-8a9708893051,0,1,a583e53a-3f3c-48c7-8928-37ce40b2bafe,a583e53a-3f3c-48c7-8928-37ce40b2bafe,0,1,a844dd4a-274a-4894-9446-031dbe006084,a844dd4a-274a-4894-9446-031dbe006084,0,1,9a740f81-5437-47af-8ed9-ea62edcb2ea1,9a740f81-5437-47af-8ed9-ea62edcb2ea1,0,1,cdf54c86-0a1c-4f74-93ee-6d8d8db0a778,cdf54c86-0a1c-4f74-93ee-6d8d8db0a778,0,1,77bdd30f-4933-4bda-9c7a-b0a097da0910,77bdd30f-4933-4bda-9c7a-b0a097da0910,0,1,a8d52851-4293-4fe4-b2cb-f9c8c166ed97,a8d52851-4293-4fe4-b2cb-f9c8c166ed97,0,1,d4879ecc-8f1a-4183-99a8-d6dfc1eed3f8,d4879ecc-8f1a-4183-99a8-d6dfc1eed3f8,0,1,a682e9e1-284f-4e32-86b2-6736f159f585,a682e9e1-284f-4e32-86b2-6736f159f585,0,1,84f0bd89-9b86-440f-b942-9b685e22233e,84f0bd89-9b86-440f-b942-9b685e22233e,0,1,f2d508b3-9425-4ce6-86d8-5893ca4a8cd6,f2d508b3-9425-4ce6-86d8-5893ca4a8cd6,0,1,ce61612f-bcbb-4a02-bca0-d88e0ee42bd7,ce61612f-bcbb-4a02-bca0-d88e0ee42bd7,0,1,c1c35035-44cc-4aa1-ae8e-db3513ddc5f3,c1c35035-44cc-4aa1-ae8e-db3513ddc5f3,0,1,ac52baa1-02cb-4ce8-8f4f-1f9441b1cda0,ac52baa1-02cb-4ce8-8f4f-1f9441b1cda0,0,1,fabf8a0b-366f-4f23-9377-315534bb854b,fabf8a0b-366f-4f23-9377-315534bb854b,0,1,7aac6439-64c9-4492-b866-bf91dda82d06,7aac6439-64c9-4492-b866-bf91dda82d06,0,1,6ffe3723-c6df-497b-a3ff-d817fbabfd8c,6ffe3723-c6df-497b-a3ff-d817fbabfd8c,0,1,528a82b7-ef06-4d90-bb32-bd6d76ed6c74,528a82b7-ef06-4d90-bb32-bd6d76ed6c74,0,1,08b86f29-64ef-467a-af1a-d27ffdf621ba,08b86f29-64ef-467a-af1a-d27ffdf621ba,0,1,6483d1ab-c53d-4985-ad7e-b799adbcd9da,6483d1ab-c53d-4985-ad7e-b799adbcd9da,0,1,82f66233-ed13-49ae-ab72-7cf91c88c760,82f66233-ed13-49ae-ab72-7cf91c88c760,0,1,75cddbcd-e960-4164-81d8-ac0a2a36e95b,75cddbcd-e960-4164-81d8-ac0a2a36e95b,0,1,e14d57f4-ae4a-4644-9ec1-a6af1b3e4c41,e14d57f4-ae4a-4644-9ec1-a6af1b3e4c41,0,1,314f8451-ba96-46cd-bf9f-3a87df7d2a5b,314f8451-ba96-46cd-bf9f-3a87df7d2a5b,0,1,d9151001-a911-45c1-a8e6-dcf0da623ed3,d9151001-a911-45c1-a8e6-dcf0da623ed3,0,1,30e06f80-b6d0-4fa9-a346-8e17dbe2fb68,30e06f80-b6d0-4fa9-a346-8e17dbe2fb68,0,1,e589a693-ff50-4c36-ae26-a8fcae966d57,e589a693-ff50-4c36-ae26-a8fcae966d57,0,1,8bacb87e-c2e9-41f5-bae1-c3a6b0e8179f,8bacb87e-c2e9-41f5-bae1-c3a6b0e8179f,0,1,90f023f5-5b48-4f98-bfc6-b704277a355d,90f023f5-5b48-4f98-bfc6-b704277a355d,0,1,99485603-706d-4301-be25-82b1c0ee8f4d,99485603-706d-4301-be25-82b1c0ee8f4d,0,1,e7a28021-c75e-41b2-9974-cf4beee34d28,e7a28021-c75e-41b2-9974-cf4beee34d28,0,1,21e3bdf3-7cec-42de-8ef3-5815b9a1b747,21e3bdf3-7cec-42de-8ef3-5815b9a1b747,0,1,2a603c61-4cbf-4c6d-a0b2-40c835d36737,2a603c61-4cbf-4c6d-a0b2-40c835d36737,0,1,a8d7f071-401b-499e-957c-d077d8002e54,a8d7f071-401b-499e-957c-d077d8002e54,0,1,211a539b-4be9-4816-98f6-f756e65eafd8,211a539b-4be9-4816-98f6-f756e65eafd8,0,1,e2d8167d-3ebf-4771-b9e0-e6382d68cc18,e2d8167d-3ebf-4771-b9e0-e6382d68cc18,0,1,e9b9da80-7806-4c9c-a002-01cfa3109169,e9b9da80-7806-4c9c-a002-01cfa3109169,0,1,a271041d-0203-4ecd-bb39-70256c50192e,a271041d-0203-4ecd-bb39-70256c50192e,0,1,73eff626-a363-4a5a-879e-61ef6ce0726f,73eff626-a363-4a5a-879e-61ef6ce0726f,0,1,acf15b79-a6c4-4c46-8013-50d3b223baf6,acf15b79-a6c4-4c46-8013-50d3b223baf6,0,1,f6a29b80-e4c3-4c4f-8e2c-d4dda851d813,f6a29b80-e4c3-4c4f-8e2c-d4dda851d813,0,1,2d8d5d74-2bc0-4282-af66-e4a37694c147,2d8d5d74-2bc0-4282-af66-e4a37694c147,0,1,cfd31341-287b-4684-9ac0-b28b4e066f15,cfd31341-287b-4684-9ac0-b28b4e066f15,0,1,81de1b0b-7f2d-4098-ae99-061c6a90dc29,81de1b0b-7f2d-4098-ae99-061c6a90dc29,0,1,f829e2a9-5bdb-4171-8b32-8d10d5968813,f829e2a9-5bdb-4171-8b32-8d10d5968813,0,1,647ba8f8-57f7-4c19-af59-525517c1e392,647ba8f8-57f7-4c19-af59-525517c1e392,0,1,39062cb3-4ae8-4c0d-889b-038a55179946,39062cb3-4ae8-4c0d-889b-038a55179946,0,1,c62d4212-36ca-4afb-bac9-269b6f64ca51,c62d4212-36ca-4afb-bac9-269b6f64ca51,0,1,5cec5e16-46ad-4f8c-b869-f5b1cc487884,5cec5e16-46ad-4f8c-b869-f5b1cc487884,0,1,ca0363bb-81c2-4fce-b2f0-e8f42d118a74,ca0363bb-81c2-4fce-b2f0-e8f42d118a74,0,1,7aacdf81-49fd-47a3-a36a-c483f1b05872,7aacdf81-49fd-47a3-a36a-c483f1b05872,0,1,857015e2-afb2-403d-bfb7-7acb5080797b,857015e2-afb2-403d-bfb7-7acb5080797b,0,1,5657286b-114b-41de-ab7d-45d0f0d95e2d,5657286b-114b-41de-ab7d-45d0f0d95e2d,0,1,42a0271e-6783-44db-95c1-09805ae01f58,42a0271e-6783-44db-95c1-09805ae01f58,0,1,8628783e-4fad-4dff-8220-9e0ddc8580f8,8628783e-4fad-4dff-8220-9e0ddc8580f8,0,1,356fc245-3034-42d1-84d0-632c6dc7a3d5,356fc245-3034-42d1-84d0-632c6dc7a3d5,0,1,07462664-6b58-4f5a-9b3f-2e5c376f17df,07462664-6b58-4f5a-9b3f-2e5c376f17df,0,1,6f23e946-f700-424b-b9bf-3a9c8846908d,6f23e946-f700-424b-b9bf-3a9c8846908d,0,1,f3ef5989-a848-4a7f-8ac5-0eca882a6aa1,f3ef5989-a848-4a7f-8ac5-0eca882a6aa1,0,1,4f5087ab-cc60-4d1e-ba83-a319536bf8ba,4f5087ab-cc60-4d1e-ba83-a319536bf8ba,0,1,07d0d6e9-e0a7-4543-9668-3850c1e0a15c,07d0d6e9-e0a7-4543-9668-3850c1e0a15c,0,1,c656771c-dcb7-4c78-9a16-e62806d5bb5a,c656771c-dcb7-4c78-9a16-e62806d5bb5a,0,1,ec42c45c-18ca-44b0-9c59-1cb204552a43,ec42c45c-18ca-44b0-9c59-1cb204552a43,0,1,2aafb1a1-4321-47e9-9783-03ab616a2873,2aafb1a1-4321-47e9-9783-03ab616a2873,0,1,71109997-6da0-4eaf-bbf2-f94fa24f37cc,71109997-6da0-4eaf-bbf2-f94fa24f37cc,0,1,a3deeef2-f8a2-462f-a57f-87d89e4ec12a,a3deeef2-f8a2-462f-a57f-87d89e4ec12a,0,1,d601281c-379d-4a9d-843e-478fd6567415,d601281c-379d-4a9d-843e-478fd6567415,0,1,fd9b3f7d-d25d-4ecb-8b87-218d5ccf1f7b,fd9b3f7d-d25d-4ecb-8b87-218d5ccf1f7b,0,1,427e6f15-334e-42be-9554-895d8f7ebfc6,427e6f15-334e-42be-9554-895d8f7ebfc6,0,1,e85a4314-7b63-4294-9bd0-ff77e3ae7c1e,e85a4314-7b63-4294-9bd0-ff77e3ae7c1e,0,1,36bc8523-41a5-48ff-9bd0-758d078c4408,36bc8523-41a5-48ff-9bd0-758d078c4408,0,1,94ca1b45-3cf0-4857-8299-999c93f4fb56,94ca1b45-3cf0-4857-8299-999c93f4fb56,0,1,ee8419c6-79ca-4546-9a66-bacaa08d2a73,ee8419c6-79ca-4546-9a66-bacaa08d2a73,0,1,e36ddb60-2f21-4c5f-b96c-947bcf2af42a,e36ddb60-2f21-4c5f-b96c-947bcf2af42a,0,1,d4a0ca3b-3985-4ba2-9e96-1c5baed28b46,d4a0ca3b-3985-4ba2-9e96-1c5baed28b46,0,1,ada11ea2-94d5-4172-a383-a51774599568,ada11ea2-94d5-4172-a383-a51774599568,0,1,50515bbc-43ee-4b00-bfc5-105b7981bd8f,50515bbc-43ee-4b00-bfc5-105b7981bd8f,0,1,1ea080b0-0a11-4152-b8bb-4918bc142a23,1ea080b0-0a11-4152-b8bb-4918bc142a23,0,1,a21cd1c1-4649-4dc2-9dbd-a913f2d6ca75,a21cd1c1-4649-4dc2-9dbd-a913f2d6ca75,0,1,6930e471-7935-4d68-a980-2acde93ba801,6930e471-7935-4d68-a980-2acde93ba801,0,1,2c425fa5-b10b-4a6f-926a-5cb4c1f2d491,2c425fa5-b10b-4a6f-926a-5cb4c1f2d491,0,1,5135cc48-c749-4acb-a225-d110f386f482,5135cc48-c749-4acb-a225-d110f386f482,0,1,15e6f31b-556a-4f47-9f40-2f69ac7fcb43,15e6f31b-556a-4f47-9f40-2f69ac7fcb43,0,1,53c4c3b2-9257-4d02-8df8-6b55fe9abdae,53c4c3b2-9257-4d02-8df8-6b55fe9abdae,0,1,d2dba2ae-e987-4c9d-a289-3dc19afa87cd,d2dba2ae-e987-4c9d-a289-3dc19afa87cd,0,1,2e9fa546-96fb-4ecb-b933-7921e131e89b,2e9fa546-96fb-4ecb-b933-7921e131e89b,0,1,4645b1ad-eb8f-484c-b29c-2093d9ef9dba,4645b1ad-eb8f-484c-b29c-2093d9ef9dba,0,1,637a132b-1a88-44ba-b45f-ed4ed1ac1001,637a132b-1a88-44ba-b45f-ed4ed1ac1001,0,1,699f734b-43d2-4351-bff8-e0e21e164a42,699f734b-43d2-4351-bff8-e0e21e164a42,0,1,95f0792a-7ac4-450a-b05c-219741e61abd,95f0792a-7ac4-450a-b05c-219741e61abd,0,1,742a2e8c-496e-4e02-931d-d33f7afe07a5,742a2e8c-496e-4e02-931d-d33f7afe07a5,0,1,c3efa853-cd29-4618-929f-e3bec33dfd65,c3efa853-cd29-4618-929f-e3bec33dfd65,0,1,62185c28-3d24-487a-9441-b309dcf11e31,62185c28-3d24-487a-9441-b309dcf11e31,0,1,9f264aeb-664d-4724-8248-11873d63ef3b,9f264aeb-664d-4724-8248-11873d63ef3b,0,1,b926d058-53a9-4eea-b4f9-98e77f798dd9,b926d058-53a9-4eea-b4f9-98e77f798dd9,0,1,495e2c77-4868-4191-ac18-f94e55a5982e,495e2c77-4868-4191-ac18-f94e55a5982e,0,1,20191a65-322c-457d-85f5-ed1258b6fe8e,20191a65-322c-457d-85f5-ed1258b6fe8e,0,1,23b46ecd-14dc-4cc5-8ff0-c676a8337aee,23b46ecd-14dc-4cc5-8ff0-c676a8337aee,0,1,769c60aa-44f4-4c98-a461-d3f5c2b67f61,769c60aa-44f4-4c98-a461-d3f5c2b67f61,0,1,f9809c99-0eaa-4249-967c-a4bef4763277,f9809c99-0eaa-4249-967c-a4bef4763277,0,1,37fa88a0-f2c1-455f-a28d-74165e8b933d,37fa88a0-f2c1-455f-a28d-74165e8b933d,0,1,e4476f09-909b-49f7-8e01-72eea8ceaca6,e4476f09-909b-49f7-8e01-72eea8ceaca6,0,1,2861412c-46f0-454e-b81d-fe081afb5c7a,2861412c-46f0-454e-b81d-fe081afb5c7a,0,1,2b4ece05-b694-42e9-8239-55722fd84294,2b4ece05-b694-42e9-8239-55722fd84294,0,1,6564ce89-134f-4726-8693-fd93aad46180,6564ce89-134f-4726-8693-fd93aad46180,0,1,0d743731-da5d-4c99-b19f-e93c69b77e14,0d743731-da5d-4c99-b19f-e93c69b77e14,0,1,d6f15367-23e2-4766-bc7c-8acd0063aa0c,d6f15367-23e2-4766-bc7c-8acd0063aa0c,0,1,966b1bde-5b0c-446d-b38b-dc037e2ff7ad,966b1bde-5b0c-446d-b38b-dc037e2ff7ad,0,1,fa4c5665-4d73-4db2-a055-8c1c8a302f82,fa4c5665-4d73-4db2-a055-8c1c8a302f82,0,1,e3e0caa1-6d3f-45a6-9043-d58a34f35b8f,e3e0caa1-6d3f-45a6-9043-d58a34f35b8f,0,1,9100b286-8ae9-4de3-b116-5ce0fa95b80c,9100b286-8ae9-4de3-b116-5ce0fa95b80c,0,1,3d315df6-e000-4cbd-810d-0b26c0d1bc54,3d315df6-e000-4cbd-810d-0b26c0d1bc54,0,1,fa429302-ccaf-4c89-8a11-3a1d30817c00,fa429302-ccaf-4c89-8a11-3a1d30817c00,0,1,9b4c49ce-93da-439a-8d67-f3774e92800a,9b4c49ce-93da-439a-8d67-f3774e92800a,0,1,5f8fa827-7017-4b45-b458-3571b8b611f5,5f8fa827-7017-4b45-b458-3571b8b611f5,0,1,79749167-2912-4e06-9deb-7915a1b4390d,79749167-2912-4e06-9deb-7915a1b4390d,0,1,1c93fcd3-53a1-403f-a30b-454fbc941d55,1c93fcd3-53a1-403f-a30b-454fbc941d55,0,1,0fc54be4-2e19-45cf-b62f-7cbc70a70d5f,0fc54be4-2e19-45cf-b62f-7cbc70a70d5f,0,1,adec3963-b22f-4463-a3f4-c9ec27d187a8,adec3963-b22f-4463-a3f4-c9ec27d187a8,0,1,d8dae0c8-8e11-44bf-bf60-d316220f3e82,d8dae0c8-8e11-44bf-bf60-d316220f3e82,0,1,12afec4d-1728-4aa8-86e5-23cd2f1572b3,12afec4d-1728-4aa8-86e5-23cd2f1572b3,0,1,16bc197b-5a2f-43f4-8ba0-ffabd9289f5c,16bc197b-5a2f-43f4-8ba0-ffabd9289f5c,0,1,ee0c3960-d1bf-411f-a51f-e6e27dabea87,ee0c3960-d1bf-411f-a51f-e6e27dabea87,0,1,d7fb9441-1aef-4257-af3f-7f16340ac85e,d7fb9441-1aef-4257-af3f-7f16340ac85e,0,1,d07c094c-2795-4e0c-b030-bdb82be7ba6d,d07c094c-2795-4e0c-b030-bdb82be7ba6d,0,1,62637860-2013-4f9d-9aed-7cbb0dce8983,62637860-2013-4f9d-9aed-7cbb0dce8983,0,1,331217f6-7ec2-425d-93bd-f2979c5f2e05,331217f6-7ec2-425d-93bd-f2979c5f2e05,0,1,7d5b2b73-27e6-4a61-9558-eb2410eb9f2f,7d5b2b73-27e6-4a61-9558-eb2410eb9f2f,0,1,d754ed75-2a32-4b86-a153-7b50c39f9836,d754ed75-2a32-4b86-a153-7b50c39f9836,0,1,b81f3ee1-66f7-4626-a35b-ef85388c678e,b81f3ee1-66f7-4626-a35b-ef85388c678e,0,1,2ad04793-c162-4915-a260-ca4da535cdac,2ad04793-c162-4915-a260-ca4da535cdac,0,1,6568d853-dfe5-4064-aa73-c1f546e951b4,6568d853-dfe5-4064-aa73-c1f546e951b4,0,1,7cee27a7-9827-47f8-96f3-d4f1f3dcabe9,7cee27a7-9827-47f8-96f3-d4f1f3dcabe9,0,1,9bfba5cd-551a-4685-99dd-ebfd9f7fd7d1,9bfba5cd-551a-4685-99dd-ebfd9f7fd7d1,0,1,bbe718b2-6b4c-4d78-a408-5369d356a1e6,bbe718b2-6b4c-4d78-a408-5369d356a1e6,0,1,4ecd85c4-5be7-4e6b-8c53-7dd32bd4d707,4ecd85c4-5be7-4e6b-8c53-7dd32bd4d707,0,1,c7e4e97f-fb85-4e95-bfdf-7706e867d89b,c7e4e97f-fb85-4e95-bfdf-7706e867d89b,0,1,b08fd921-c3d6-44eb-9401-fec5acab5d22,b08fd921-c3d6-44eb-9401-fec5acab5d22,0,1,1611855a-abf4-4269-aed3-3f78dce7bea5,1611855a-abf4-4269-aed3-3f78dce7bea5,0,1,c5bd277c-b258-43af-9c80-3e328b1581f5,c5bd277c-b258-43af-9c80-3e328b1581f5,0,1,d6fa2b86-1c3b-4c14-8a66-b6dbd40bca19,d6fa2b86-1c3b-4c14-8a66-b6dbd40bca19,0,1,f9cefef4-2182-42ca-93ef-b6a51d6555cc,f9cefef4-2182-42ca-93ef-b6a51d6555cc,0,1,71e1c7de-7367-424c-ae07-6ec04b408b83,71e1c7de-7367-424c-ae07-6ec04b408b83,0,1,b3956392-199c-4934-80d1-8cdab453d879,b3956392-199c-4934-80d1-8cdab453d879,0,1,5e26aeb7-617c-4983-b40d-5a61c77aa6a4,5e26aeb7-617c-4983-b40d-5a61c77aa6a4,0,1,d1bd7448-aa5f-43fc-9735-224f36960c3e,d1bd7448-aa5f-43fc-9735-224f36960c3e,0,1,94dbfc4c-d530-4fbd-b7cf-a58a56289b97,94dbfc4c-d530-4fbd-b7cf-a58a56289b97,0,1,6fa25c57-411d-4f9c-9c3e-c7ea1b1f7195,6fa25c57-411d-4f9c-9c3e-c7ea1b1f7195,0,1,1bfa15cf-222e-4e5b-beb7-7a50f8131799,1bfa15cf-222e-4e5b-beb7-7a50f8131799,0,1,25864028-1a53-4a8d-b6e4-189fa62c62f5,25864028-1a53-4a8d-b6e4-189fa62c62f5,0,1,e923beae-0bd8-4119-a802-fd6bfb729f10,e923beae-0bd8-4119-a802-fd6bfb729f10,0,1,d40bb9f7-3397-40ad-b658-f8942bdbbaee,d40bb9f7-3397-40ad-b658-f8942bdbbaee,0,1,67c1269a-79e6-44d9-9254-671c50fb3974,67c1269a-79e6-44d9-9254-671c50fb3974,0,1,5d455d2a-910d-48c7-bc74-ba5ad7855110,5d455d2a-910d-48c7-bc74-ba5ad7855110,0,1,7cf3feea-75e2-42cc-9c89-4a9182034910,7cf3feea-75e2-42cc-9c89-4a9182034910,0,1,930a0156-feb3-4e14-96a5-cd183a4891f4,930a0156-feb3-4e14-96a5-cd183a4891f4,0,1,cfa55ab3-1335-4712-8352-03c2f0277708,cfa55ab3-1335-4712-8352-03c2f0277708,0,1,fb176f8b-edb9-4e4b-926d-dabe9552bfa1,fb176f8b-edb9-4e4b-926d-dabe9552bfa1,0,1,cd5c52d4-f832-4a3b-b4c7-b4f3e0c98222,cd5c52d4-f832-4a3b-b4c7-b4f3e0c98222,0,1,e268a337-f576-4ec2-8a22-0500b79b2441,e268a337-f576-4ec2-8a22-0500b79b2441,0,1,eb33a8fa-75a6-4926-a025-05bc0abe4374,eb33a8fa-75a6-4926-a025-05bc0abe4374,0,1,c352da94-ea64-44b1-b2df-2c4ed9e2efc5,c352da94-ea64-44b1-b2df-2c4ed9e2efc5,0,1,6babd40a-8b8f-454b-b4a4-7cf2854f49a2,6babd40a-8b8f-454b-b4a4-7cf2854f49a2,0,1,bf480259-6e72-4ad1-ac41-0b0d41a75387,bf480259-6e72-4ad1-ac41-0b0d41a75387,0,1,a41f060a-f0f6-4940-960b-5056082b2c45,a41f060a-f0f6-4940-960b-5056082b2c45,0,1,5d45a926-513f-4bbc-a002-54a2db94b297,5d45a926-513f-4bbc-a002-54a2db94b297,0,1,73f5ce9e-d5a7-45c0-965a-8af1d776a98a,73f5ce9e-d5a7-45c0-965a-8af1d776a98a,0,1,073e14d4-5d43-428b-a9a7-985d173e94c7,073e14d4-5d43-428b-a9a7-985d173e94c7,0,1,61dc318a-c17d-402e-bf64-a0c0a63a1c93,61dc318a-c17d-402e-bf64-a0c0a63a1c93,0,1,c4b0c101-8cd9-441c-b94c-9dfa1ad58d45,c4b0c101-8cd9-441c-b94c-9dfa1ad58d45,0,1,2394775b-8910-4667-9c74-e1606e0b13bc,2394775b-8910-4667-9c74-e1606e0b13bc,0,1,43c88ffd-a036-4563-890b-bdc60180e841,43c88ffd-a036-4563-890b-bdc60180e841,0,1,af6e5e8e-6482-4820-a810-9e275ae039bf,af6e5e8e-6482-4820-a810-9e275ae039bf,0,1,fe3ccb8b-fee7-4825-a7bc-4b0fd432d382,fe3ccb8b-fee7-4825-a7bc-4b0fd432d382,0,1,7690620b-21d9-463a-8c22-60844927b4a0,7690620b-21d9-463a-8c22-60844927b4a0,0,1,e7f96a15-9f62-4a7f-85f3-06ba5d30b130,e7f96a15-9f62-4a7f-85f3-06ba5d30b130,0,1,b1db3255-38da-4684-b44e-4e2e9ee1dc35,b1db3255-38da-4684-b44e-4e2e9ee1dc35,0,1,4761f89b-7894-4dca-83b0-3be2d0828781,4761f89b-7894-4dca-83b0-3be2d0828781,0,1,573ff1f2-0ef5-4962-a0f6-eb84d430fe03,573ff1f2-0ef5-4962-a0f6-eb84d430fe03,0,1,7236d52f-9068-45ad-8b92-a7319e737e08,7236d52f-9068-45ad-8b92-a7319e737e08,0,1,3b0b708f-1b6c-4eb2-a2ad-86c088d9f1bf,3b0b708f-1b6c-4eb2-a2ad-86c088d9f1bf,0,1,9db23e96-d13a-4847-941a-462f64d0619d,9db23e96-d13a-4847-941a-462f64d0619d,0,1,7575fd54-c91b-4220-a2ef-2cf533f60426,7575fd54-c91b-4220-a2ef-2cf533f60426,0,1,1b751f19-bb0c-40c2-a5d1-068544c36c6b,1b751f19-bb0c-40c2-a5d1-068544c36c6b,0,1,26e2c83b-8873-4ad3-9c50-e94421473a43,26e2c83b-8873-4ad3-9c50-e94421473a43,0,1,f0b2ec05-8e01-4ccf-b927-671329a9013b,f0b2ec05-8e01-4ccf-b927-671329a9013b,0,1,ab442b11-2482-4f80-ac82-01966e0657ec,ab442b11-2482-4f80-ac82-01966e0657ec,0,1,14fe4d39-81a1-470e-9724-6642ce34ad89,14fe4d39-81a1-470e-9724-6642ce34ad89,0,1,457578ab-dfe2-4419-8d8a-64283b341f42,457578ab-dfe2-4419-8d8a-64283b341f42,0,1,67ef6671-f537-46bf-88e6-f5bcf34a17a4,67ef6671-f537-46bf-88e6-f5bcf34a17a4,0,1,de778ca7-feaf-4531-80ae-11a534c56928,de778ca7-feaf-4531-80ae-11a534c56928,0,1,0dfbe7a9-9c2e-4cbd-ac53-3b547fd73e91,0dfbe7a9-9c2e-4cbd-ac53-3b547fd73e91,0,1,0a76a84d-e883-477e-8b87-7bf984cdc1cf,0a76a84d-e883-477e-8b87-7bf984cdc1cf,0,1,2b6c4184-6d7d-48e5-bd4e-ad31e63398d6,2b6c4184-6d7d-48e5-bd4e-ad31e63398d6,0,1,86df8648-e195-4661-99ee-6052788eb276,86df8648-e195-4661-99ee-6052788eb276,0,1,a22cf6e9-1157-4be5-8d30-aa9bbf2b5e6e,a22cf6e9-1157-4be5-8d30-aa9bbf2b5e6e,0,1,35133725-9647-42dc-a76a-2e62b2918ac4,35133725-9647-42dc-a76a-2e62b2918ac4,0,1,fa9572ee-0303-4421-9125-70cf3dd5a8c7,fa9572ee-0303-4421-9125-70cf3dd5a8c7,0,1,4cdd7920-0c49-4950-b92f-fdf6e34578b2,4cdd7920-0c49-4950-b92f-fdf6e34578b2,0,1,0af48650-5fef-4a5b-8ac8-38a9ded23bd4,0af48650-5fef-4a5b-8ac8-38a9ded23bd4,0,1,c7b883dc-6c26-4eb5-bc19-7919ad57da27,c7b883dc-6c26-4eb5-bc19-7919ad57da27,0,1,7fc37008-c378-4a70-a9a9-07543c7248a6,7fc37008-c378-4a70-a9a9-07543c7248a6,0,1,6410853e-a17e-44db-b8cc-bfefd7c4d239,6410853e-a17e-44db-b8cc-bfefd7c4d239,0,1,df042e4e-01a6-4480-a9c5-c0d7a454bb41,df042e4e-01a6-4480-a9c5-c0d7a454bb41,0,1,5a4abb96-8a18-4249-9fbb-7270fe2ba25b,5a4abb96-8a18-4249-9fbb-7270fe2ba25b,0,1,6852c584-d989-418d-8d18-255492891ef0,6852c584-d989-418d-8d18-255492891ef0,0,1,6a4972f1-012c-438b-b1d3-81e7f6da3ddd,6a4972f1-012c-438b-b1d3-81e7f6da3ddd,0,1,ff7cfd75-e0ba-49a3-92e1-33ea26df46e2,ff7cfd75-e0ba-49a3-92e1-33ea26df46e2,0,1,bc37fc81-6a86-4e72-b75a-abb75bddc4b3,bc37fc81-6a86-4e72-b75a-abb75bddc4b3,0,1,ff830967-faa9-415f-aa6e-8d27779f91f8,ff830967-faa9-415f-aa6e-8d27779f91f8,0,1,34dd0dd6-880c-4a90-9b9c-0503c8dc4ef3,34dd0dd6-880c-4a90-9b9c-0503c8dc4ef3,0,1,88618d0f-97af-4055-a490-561d4b8065a7,88618d0f-97af-4055-a490-561d4b8065a7,0,1,faffa228-4f4f-43f6-99b9-ed8c93af85c0,faffa228-4f4f-43f6-99b9-ed8c93af85c0,0,1,7b816ca0-ba60-4637-8348-23b26ad23e3f,7b816ca0-ba60-4637-8348-23b26ad23e3f,0,1,814a6db4-a43c-44e6-ac44-11983642c5ad,814a6db4-a43c-44e6-ac44-11983642c5ad,0,1,0bd74786-e018-4a66-b994-cdb439c57657,0bd74786-e018-4a66-b994-cdb439c57657,0,1,f50fcf2b-90bb-4d73-9fda-f4575e7682fa,f50fcf2b-90bb-4d73-9fda-f4575e7682fa,0,1,a01b8078-a6cd-4184-9317-2f1e0bcefb3a,a01b8078-a6cd-4184-9317-2f1e0bcefb3a,0,1,54a279b1-9e6a-49b0-8fda-e2807cf3a2a3,54a279b1-9e6a-49b0-8fda-e2807cf3a2a3,0,1,09502176-c53d-4525-b8ed-32d0a2e21a5d,09502176-c53d-4525-b8ed-32d0a2e21a5d,0,1,75ad984e-d41f-4591-b207-e8a4b05757a7,75ad984e-d41f-4591-b207-e8a4b05757a7,0,1,3f020f90-7aeb-4b21-ad71-4572ac796d4c,3f020f90-7aeb-4b21-ad71-4572ac796d4c,0,1,759e2ba0-2941-4cc1-8409-50b8a3620058,759e2ba0-2941-4cc1-8409-50b8a3620058,0,1,491cf25d-091e-4e09-b145-92d7073326cf,491cf25d-091e-4e09-b145-92d7073326cf,0,1,9b9d4d10-a4f2-4b0d-a63a-15d55f30fb26,9b9d4d10-a4f2-4b0d-a63a-15d55f30fb26,0,1,579f18ce-a7ce-4eb8-a4e3-a134a9a27bc1,579f18ce-a7ce-4eb8-a4e3-a134a9a27bc1,0,1,e7d05eca-2fdd-4cbb-8e2c-537525326ffe,e7d05eca-2fdd-4cbb-8e2c-537525326ffe,0,1,900bc96e-fbcc-473e-970c-96f561420f8e,900bc96e-fbcc-473e-970c-96f561420f8e,0,1,c3bb7b85-1e90-45c4-9bc1-39bbd253d498,c3bb7b85-1e90-45c4-9bc1-39bbd253d498,0,1,21d5a0b0-9a2b-4989-a50a-781645513179,21d5a0b0-9a2b-4989-a50a-781645513179,0,1,22df0fa4-cb1c-45a2-bcce-d32ed44e462a,22df0fa4-cb1c-45a2-bcce-d32ed44e462a,0,1,d97c6204-3656-4591-aea9-6ebedffe1247,d97c6204-3656-4591-aea9-6ebedffe1247,0,1,7caabe33-184f-45db-bef4-59d4e9cd2394,7caabe33-184f-45db-bef4-59d4e9cd2394,0,1,3255033a-e922-412e-a825-a3e8bd284703,3255033a-e922-412e-a825-a3e8bd284703,0,1,1aa65c35-e8a0-4c8a-90a3-48b62314cb19,1aa65c35-e8a0-4c8a-90a3-48b62314cb19,0,1,f250f992-ad5a-4dab-ad38-240604adb0c4,f250f992-ad5a-4dab-ad38-240604adb0c4,0,1,c4a7efca-f27d-4fdd-86ab-cc22a2a96fb2,c4a7efca-f27d-4fdd-86ab-cc22a2a96fb2,0,1,e63671f6-c96d-4ea4-8300-af7dbd0d016f,e63671f6-c96d-4ea4-8300-af7dbd0d016f,0,1,2c511469-0df6-470f-a808-decb275e8b1a,2c511469-0df6-470f-a808-decb275e8b1a,0,1,1bbb289c-a78a-47d0-b082-c2225ae1dc83,1bbb289c-a78a-47d0-b082-c2225ae1dc83,0,1,99b40f9f-f8f1-4779-8afc-59d30612f3d6,99b40f9f-f8f1-4779-8afc-59d30612f3d6,0,1,6131e875-3254-4281-9343-9118564c5451,6131e875-3254-4281-9343-9118564c5451,0,1,69622ff8-8a23-42fc-b63d-5097e3f636ac,69622ff8-8a23-42fc-b63d-5097e3f636ac,0,1,b88450cc-0dd4-4881-b3d9-a9e4e07e08f5,b88450cc-0dd4-4881-b3d9-a9e4e07e08f5,0,1,ef326bd8-1570-455e-ae8c-063b5578ad15,ef326bd8-1570-455e-ae8c-063b5578ad15,0,1,3713c76d-6ff7-4d45-9f15-d061bdf7dee2,3713c76d-6ff7-4d45-9f15-d061bdf7dee2,0,1,cb6d4979-2d70-4ceb-af08-deb2b19daf14,cb6d4979-2d70-4ceb-af08-deb2b19daf14,0,1,bf30b754-84fb-4104-b52b-a4f7df6fba12,bf30b754-84fb-4104-b52b-a4f7df6fba12,0,1,7bbd0835-b3e9-40cb-a424-670828b60bbb,7bbd0835-b3e9-40cb-a424-670828b60bbb,0,1,3e2138ea-48f9-4a60-8f22-53933bea49db,3e2138ea-48f9-4a60-8f22-53933bea49db,0,1,16bda2eb-eab8-4230-b89f-517fb943e009,16bda2eb-eab8-4230-b89f-517fb943e009,0,1,00964512-297f-4b8b-8def-8e4fc0eba991,00964512-297f-4b8b-8def-8e4fc0eba991,0,1,4185fea3-baba-4ba5-8019-9023b3011d4d,4185fea3-baba-4ba5-8019-9023b3011d4d,0,1,ea790035-92d6-445e-9fa3-08e565634d2b,ea790035-92d6-445e-9fa3-08e565634d2b,0,1,cce8900a-51eb-487d-b380-227d1b9d3943,cce8900a-51eb-487d-b380-227d1b9d3943,0,1,c043c36c-90c6-483b-bc20-7c2d85109b90,c043c36c-90c6-483b-bc20-7c2d85109b90,0,1,a1e619a6-3bb2-468d-a225-c88ccc3b71f5,a1e619a6-3bb2-468d-a225-c88ccc3b71f5,0,1,91d2d40a-c271-412c-b344-1fc98b94ba21,91d2d40a-c271-412c-b344-1fc98b94ba21,0,1,7ce47046-aee8-4809-bac9-a98930a844e1,7ce47046-aee8-4809-bac9-a98930a844e1,0,1,f480b8b9-ecec-4207-a0aa-12c5be4c2250,f480b8b9-ecec-4207-a0aa-12c5be4c2250,0,1,32717d25-6644-4903-8950-03e4c9b1a8fe,32717d25-6644-4903-8950-03e4c9b1a8fe,0,1,3644d8f3-db88-4fce-a851-39c115acfe03,3644d8f3-db88-4fce-a851-39c115acfe03,0,1,4653da74-34b2-47b9-ad88-efd761d6f1e9,4653da74-34b2-47b9-ad88-efd761d6f1e9,0,1,abf8a23d-45c3-4feb-8df2-279b709d7722,abf8a23d-45c3-4feb-8df2-279b709d7722,0,1,b0cd056f-c601-4d07-89c4-f7137b88bab6,b0cd056f-c601-4d07-89c4-f7137b88bab6,0,1,5cc3ebef-8f09-443c-b131-e5c3a9f7d260,5cc3ebef-8f09-443c-b131-e5c3a9f7d260,0,1,b9a21b8f-8a95-4c86-9ab2-ee6c90164e18,b9a21b8f-8a95-4c86-9ab2-ee6c90164e18,0,1,96ed4d39-3bdc-480f-af86-218f22000514,96ed4d39-3bdc-480f-af86-218f22000514,0,1,c9f72e74-22ac-4dc0-8462-0aa7819a9342,c9f72e74-22ac-4dc0-8462-0aa7819a9342,0,1,ca650484-293f-403a-b916-5ec7c3a8969e,ca650484-293f-403a-b916-5ec7c3a8969e,0,1,b71e706d-623e-4039-9bf0-24f151d861d8,b71e706d-623e-4039-9bf0-24f151d861d8,0,1,528f4823-33d8-49bd-a8fe-756a08a107c2,528f4823-33d8-49bd-a8fe-756a08a107c2,0,1,4869095b-b76e-45ca-b77d-0e74f59673f0,4869095b-b76e-45ca-b77d-0e74f59673f0,0,1,bcca2442-448b-4760-923b-cc9621ecb441,bcca2442-448b-4760-923b-cc9621ecb441,0,1,ba7657df-429a-4737-b787-19ef09fdebb2,ba7657df-429a-4737-b787-19ef09fdebb2,0,1,867d72be-f406-45a5-a511-b90459683f11,867d72be-f406-45a5-a511-b90459683f11,0,1,88b22e62-c144-401f-9635-3fb4d914772e,88b22e62-c144-401f-9635-3fb4d914772e,0,1,efeb2914-6604-403a-a11e-5cb995ab2bc9,efeb2914-6604-403a-a11e-5cb995ab2bc9,0,1,4c2dd77f-adc7-4f11-8e8f-1f8e41e6c84b,4c2dd77f-adc7-4f11-8e8f-1f8e41e6c84b,0,1,8f2b8a8e-4cd3-45e3-89ae-1cc4bd0ff30a,8f2b8a8e-4cd3-45e3-89ae-1cc4bd0ff30a,0,1,24b3aecc-f92f-475b-862e-83dd6d6aa2b9,24b3aecc-f92f-475b-862e-83dd6d6aa2b9,0,1,de506523-241a-4845-9259-37066afbf16a,de506523-241a-4845-9259-37066afbf16a,0,1,0510206f-eef0-4a5e-aeb7-d53c26d34adb,0510206f-eef0-4a5e-aeb7-d53c26d34adb,0,1,e616e007-43e7-4740-a083-b85f5435718a,e616e007-43e7-4740-a083-b85f5435718a,0,1,727da5b1-e054-4832-8e44-f5d5e56f52e5,727da5b1-e054-4832-8e44-f5d5e56f52e5,0,1,6135ffd5-1510-4aa8-8bf5-d7c0ca624414,6135ffd5-1510-4aa8-8bf5-d7c0ca624414,0,1,6feaad7c-9680-4341-b215-14581e2e2b37,6feaad7c-9680-4341-b215-14581e2e2b37,0,1,d5656a92-adfb-4733-830d-2b1565798b1f,d5656a92-adfb-4733-830d-2b1565798b1f,0,1,2ee0d56b-cd7c-42db-8fb6-c1567fe1967d,2ee0d56b-cd7c-42db-8fb6-c1567fe1967d,0,1,b0f6ea83-2849-4151-930d-692866919db3,b0f6ea83-2849-4151-930d-692866919db3,0,1,05558ce4-8568-4009-b1d7-307d54967515,05558ce4-8568-4009-b1d7-307d54967515,0,1,74380324-9b7b-49f6-9458-88deb9405f98,74380324-9b7b-49f6-9458-88deb9405f98,0,1,5286ceb2-0f16-4d70-ad89-dc15a308bb8d,5286ceb2-0f16-4d70-ad89-dc15a308bb8d,0,1,0abf70e0-0d81-4d85-a288-a2134da5fbf1,0abf70e0-0d81-4d85-a288-a2134da5fbf1,0,1,392fc734-4251-4d28-bfd1-d6f2f33ec0e5,392fc734-4251-4d28-bfd1-d6f2f33ec0e5,0,1,f66cb2da-3b3c-481f-823a-506f8290f619,f66cb2da-3b3c-481f-823a-506f8290f619,0,1,b80ddaf8-c5c3-4bde-98ed-74a1a0446f38,b80ddaf8-c5c3-4bde-98ed-74a1a0446f38,0,1,e4f16dbf-609d-4a34-a0bf-b20e5925c1ba,e4f16dbf-609d-4a34-a0bf-b20e5925c1ba,0,1,0bdcf045-5132-4a68-839c-a30515dc569e,0bdcf045-5132-4a68-839c-a30515dc569e,0,1,683861f9-9a5f-47db-8b03-959f839d5a3a,683861f9-9a5f-47db-8b03-959f839d5a3a,0,1,56fda0b0-c0ae-4ea2-8f77-df22a9ca3e87,56fda0b0-c0ae-4ea2-8f77-df22a9ca3e87,0,1,125be5bf-f410-451d-aa96-22fabc6a4d8a,125be5bf-f410-451d-aa96-22fabc6a4d8a,0,1,e5017fd0-ecea-48ae-99c8-7fc8c4f1d72b,e5017fd0-ecea-48ae-99c8-7fc8c4f1d72b,0,1,0a46166a-4562-4a50-b139-39dbe8a1fc84,0a46166a-4562-4a50-b139-39dbe8a1fc84,0,1,9aa6d1d1-75ad-40e4-b01f-274826c0c9da,9aa6d1d1-75ad-40e4-b01f-274826c0c9da,0,1,6ce64d65-f710-4d3f-a85f-26ce6915451e,6ce64d65-f710-4d3f-a85f-26ce6915451e,0,1,33eb9806-e34f-42a0-9825-3ff2de92c503,33eb9806-e34f-42a0-9825-3ff2de92c503,0,1,4905fcc5-9bd7-4b1b-b51d-882b11ee3d74,4905fcc5-9bd7-4b1b-b51d-882b11ee3d74,0,1,bcb58235-7cd7-4c15-a1eb-194ee38259e6,bcb58235-7cd7-4c15-a1eb-194ee38259e6,0,1,e19aefe7-634d-4218-8d40-75802d1691e0,e19aefe7-634d-4218-8d40-75802d1691e0,0,1,b885dbb2-6e18-46a6-929c-3d6d392343ad,b885dbb2-6e18-46a6-929c-3d6d392343ad,0,1,d31e24cf-7493-45dc-ba81-3a00618e53bc,d31e24cf-7493-45dc-ba81-3a00618e53bc,0,1,ce2a8ff8-94fd-4ce2-9caa-4711e9b79ee9,ce2a8ff8-94fd-4ce2-9caa-4711e9b79ee9,0,1,f942d212-9be0-4d80-84b6-5b63070e33e4,f942d212-9be0-4d80-84b6-5b63070e33e4,0,1,bea6bbc1-c1e4-4306-a0ca-efd47b9a8b23,bea6bbc1-c1e4-4306-a0ca-efd47b9a8b23,0,1,64c91eaa-084f-4801-8dbf-4e075c689c2b,64c91eaa-084f-4801-8dbf-4e075c689c2b,0,1,c01bb4de-06f7-4c3d-8ea3-d861f89948c0,c01bb4de-06f7-4c3d-8ea3-d861f89948c0,0,1,3c8c4f7b-d267-422c-becd-b6e8a9d6fe49,3c8c4f7b-d267-422c-becd-b6e8a9d6fe49,0,1,3aa12805-823a-439b-b039-fb9940aee312,3aa12805-823a-439b-b039-fb9940aee312,0,1,87d53573-f266-4b74-94af-041ae4b6518f,87d53573-f266-4b74-94af-041ae4b6518f,0,1,65a8545a-e73c-4c6a-8f87-7734d7ff5c03,65a8545a-e73c-4c6a-8f87-7734d7ff5c03,0,1,801cf1f7-2c65-4126-a3e9-b66abfdde67a,801cf1f7-2c65-4126-a3e9-b66abfdde67a,0,1,b991eefb-0d97-48a1-89c8-3d83b3b8d97a,b991eefb-0d97-48a1-89c8-3d83b3b8d97a,0,1,29c2bc01-8838-4459-8ac2-79862aa1dbc9,29c2bc01-8838-4459-8ac2-79862aa1dbc9,0,1,ad556c33-6811-48b4-ae90-57700a4d3fd6,ad556c33-6811-48b4-ae90-57700a4d3fd6,0,1,6e0833f4-3b57-4a5f-810f-9e2a492335df,6e0833f4-3b57-4a5f-810f-9e2a492335df,0,1,78ccdf33-9c2b-4931-afa3-5d652f2bcbc5,78ccdf33-9c2b-4931-afa3-5d652f2bcbc5,0,1,977bc9d8-9843-4343-85af-11a3d91f9966,977bc9d8-9843-4343-85af-11a3d91f9966,0,1,02ff9ef0-1057-4bc2-b745-1c2ae41835e3,02ff9ef0-1057-4bc2-b745-1c2ae41835e3,0,1,5a86abe7-db6c-43a3-9bcd-9b3647519c6b,5a86abe7-db6c-43a3-9bcd-9b3647519c6b,0,1,a6582448-734d-4a4c-a32c-c4755ca1bc93,a6582448-734d-4a4c-a32c-c4755ca1bc93,0,1,6a0b9a91-51a0-4ef4-b630-4f1b5a1da2b7,6a0b9a91-51a0-4ef4-b630-4f1b5a1da2b7,0,1,53327cc4-22b0-40f9-bae7-db483f85901c,53327cc4-22b0-40f9-bae7-db483f85901c,0,1,098d904d-95c9-459e-86d0-357ba9a40191,098d904d-95c9-459e-86d0-357ba9a40191,0,1,e9ab9d00-6e42-439b-8efc-fcacf727016d,e9ab9d00-6e42-439b-8efc-fcacf727016d,0,1,2d58033f-e15d-4a91-8165-dd311025c7c4,2d58033f-e15d-4a91-8165-dd311025c7c4,0,1,49cb3a36-90b3-4154-b571-265fc5cee21e,49cb3a36-90b3-4154-b571-265fc5cee21e,0,1,10472d2c-18ca-49b0-bd9d-c750db8498c5,10472d2c-18ca-49b0-bd9d-c750db8498c5,0,1,8efe5daf-272d-4255-b5c4-66dca7463b50,8efe5daf-272d-4255-b5c4-66dca7463b50,0,1,65af25a6-f699-4c40-b13e-3b7dff3f16fe,65af25a6-f699-4c40-b13e-3b7dff3f16fe,0,1,c4d2486d-289c-4812-b223-5ccfcd7f29e3,c4d2486d-289c-4812-b223-5ccfcd7f29e3,0,1,7da57c89-af2c-445a-96f7-39250f70306f,7da57c89-af2c-445a-96f7-39250f70306f,0,1,b5b94d94-25f7-4cfa-b1e9-6009fb848763,b5b94d94-25f7-4cfa-b1e9-6009fb848763,0,1,a2accf54-5966-42e8-ab2e-e56e415963ee,a2accf54-5966-42e8-ab2e-e56e415963ee,0,1,d8eb5329-5900-4b5d-b45e-458513dddfef,d8eb5329-5900-4b5d-b45e-458513dddfef,0,1,6d521e58-24a3-4f19-b4b0-dff84f7ca86b,6d521e58-24a3-4f19-b4b0-dff84f7ca86b,0,1,d5afea8a-1b7a-4b23-8ae0-cefa0b937b17,d5afea8a-1b7a-4b23-8ae0-cefa0b937b17,0,1,6ffd2da8-db97-46fc-9a53-8e665a598e3c,6ffd2da8-db97-46fc-9a53-8e665a598e3c,0,1,8c413fa5-9e24-4b81-aa55-0e78c5e3e20f,8c413fa5-9e24-4b81-aa55-0e78c5e3e20f,0,1,a4322f22-7de0-4018-8e06-9f1aa7cf0c07,a4322f22-7de0-4018-8e06-9f1aa7cf0c07,0,1,eaaed107-69d4-4963-be83-74519e331715,eaaed107-69d4-4963-be83-74519e331715,0,1,38cddf96-8703-4396-8c73-47fb22828a48,38cddf96-8703-4396-8c73-47fb22828a48,0,1,2c2cb793-0177-4983-91ca-9c292c5b10f1,2c2cb793-0177-4983-91ca-9c292c5b10f1,0,1,2a2e7f51-a4e5-48ec-b969-b1fca18ba9b5,2a2e7f51-a4e5-48ec-b969-b1fca18ba9b5,0,1,221fa473-3327-44e6-a033-6fdfd2be713c,221fa473-3327-44e6-a033-6fdfd2be713c,0,1,7a5973f0-7e29-44af-8e7b-70af71f704a4,7a5973f0-7e29-44af-8e7b-70af71f704a4,0,1,2b2bf0f7-0946-4492-bba0-27f007a70e64,2b2bf0f7-0946-4492-bba0-27f007a70e64,0,1,22c9a703-5ed3-4156-8fa6-476b1c1452f1,22c9a703-5ed3-4156-8fa6-476b1c1452f1,0,1,27089e8e-2c75-431c-b808-5d4dcba3cdca,27089e8e-2c75-431c-b808-5d4dcba3cdca,0,1,9ab3980e-a480-4f90-a8cc-bde99d5ace35,9ab3980e-a480-4f90-a8cc-bde99d5ace35,0,1,ec928563-6e35-4b84-b477-90d2481cec1c,ec928563-6e35-4b84-b477-90d2481cec1c,0,1,5d3e9678-20fe-4128-867a-3f7addaa7831,5d3e9678-20fe-4128-867a-3f7addaa7831,0,1,bb878f73-8a0f-459a-9076-ce57fe7957dc,bb878f73-8a0f-459a-9076-ce57fe7957dc,0,1,a2b4110b-4d9c-40fd-ab46-bfa08d2eb993,a2b4110b-4d9c-40fd-ab46-bfa08d2eb993,0,1,4f262b7f-927e-45f2-ad90-9d5e1b3155d1,4f262b7f-927e-45f2-ad90-9d5e1b3155d1,0,1,9f4b8e36-83ff-4694-8540-b5f47b18395f,9f4b8e36-83ff-4694-8540-b5f47b18395f,0,1,b4c026eb-4271-4366-b529-1cdfe2874563,b4c026eb-4271-4366-b529-1cdfe2874563,0,1,314b0da2-24d3-48cc-8532-d36c45eb3bf8,314b0da2-24d3-48cc-8532-d36c45eb3bf8,0,1,2e3ac3fb-9f0e-463f-95c2-9f661ce2e015,2e3ac3fb-9f0e-463f-95c2-9f661ce2e015,0,1,4077e700-ec20-4afa-8155-bf7e516a70cb,4077e700-ec20-4afa-8155-bf7e516a70cb,0,1,5198c6db-2100-4902-82c8-85c8ea555e78,5198c6db-2100-4902-82c8-85c8ea555e78,0,1,b99f2a63-54e8-490b-a0a4-1941fbc38b3f,b99f2a63-54e8-490b-a0a4-1941fbc38b3f,0,1,f0b1e9f4-2e07-44e6-88d2-c11457135781,f0b1e9f4-2e07-44e6-88d2-c11457135781,0,1,e010c0f9-f770-4fdc-8607-50838c0262ef,e010c0f9-f770-4fdc-8607-50838c0262ef,0,1,f935399f-3554-4c08-b0a6-eba13074e1b7,f935399f-3554-4c08-b0a6-eba13074e1b7,0,1,10008125-3aeb-4912-8ad6-d92d283ea09a,10008125-3aeb-4912-8ad6-d92d283ea09a,0,1,765f9584-fefa-4695-b130-dd54c3b0d79d,765f9584-fefa-4695-b130-dd54c3b0d79d,0,1,dd050ca0-8335-4654-ab5c-7babcb4824ef,dd050ca0-8335-4654-ab5c-7babcb4824ef,0,1,706cbf55-626d-4cab-b589-a2464368f6c1,706cbf55-626d-4cab-b589-a2464368f6c1,0,1,d22a0a50-220d-459e-a23a-39730a1e67c4,d22a0a50-220d-459e-a23a-39730a1e67c4,0,1,2c1c9284-ba8b-4282-a89c-429f02ea41f6,2c1c9284-ba8b-4282-a89c-429f02ea41f6,0,1,1d3b9eff-5d0b-437b-932f-0ec466e092b2,1d3b9eff-5d0b-437b-932f-0ec466e092b2,0,1,fd7e5257-024c-46de-9ff3-edd302fadba5,fd7e5257-024c-46de-9ff3-edd302fadba5,0,1,a4168057-d99f-4b55-b762-214f95ae3a30,a4168057-d99f-4b55-b762-214f95ae3a30,0,1,ab4fe549-1c07-42d9-b412-8b89ed115591,ab4fe549-1c07-42d9-b412-8b89ed115591,0,1,0335804e-efe5-4fb9-9ae9-2ddca73d77f3,0335804e-efe5-4fb9-9ae9-2ddca73d77f3,0,1,b49c589d-b45d-4aff-8899-72cfe433e9a6,b49c589d-b45d-4aff-8899-72cfe433e9a6,0,1,f71a8d47-6a6c-4b7e-90b3-5b7a3be3ccd3,f71a8d47-6a6c-4b7e-90b3-5b7a3be3ccd3,0,1,273ad3f7-c645-434d-93b0-e832134f3043,273ad3f7-c645-434d-93b0-e832134f3043,0,1,d320803b-1de4-4e66-b455-0afe39be5c41,d320803b-1de4-4e66-b455-0afe39be5c41,0,1,483dfce4-9c66-4739-94d4-17a005d64f5b,483dfce4-9c66-4739-94d4-17a005d64f5b,0,1,19506116-43ef-433c-822c-ef8717b0da6b,19506116-43ef-433c-822c-ef8717b0da6b,0,1,464b92cc-b577-4350-ae9f-e697390248d7,464b92cc-b577-4350-ae9f-e697390248d7,0,1,5a1242c8-3817-4d2c-9bfd-f62a6b80730c,5a1242c8-3817-4d2c-9bfd-f62a6b80730c,0,1,b9be6caf-e5e0-45a9-8cc8-3c83721632a2,b9be6caf-e5e0-45a9-8cc8-3c83721632a2,0,1,97e853dc-065f-4c6d-84cb-3d3aff367b22,97e853dc-065f-4c6d-84cb-3d3aff367b22,0,1,2f1fdf47-2627-496f-9e1f-77019abb2104,2f1fdf47-2627-496f-9e1f-77019abb2104,0,1,c996532a-8795-4136-8a40-9bb4b263277c,c996532a-8795-4136-8a40-9bb4b263277c,0,1,64c77788-fc49-4979-8163-949a891bd8b7,64c77788-fc49-4979-8163-949a891bd8b7,0,1,c39750ca-e33f-40c2-b830-119423d9a2ae,c39750ca-e33f-40c2-b830-119423d9a2ae,0,1,9372ff6b-27b6-48f3-a2a2-762e7c485766,9372ff6b-27b6-48f3-a2a2-762e7c485766,0,1,f454595a-4a3d-451b-8e8b-b17aa8314591,f454595a-4a3d-451b-8e8b-b17aa8314591,0,1,d3b7f89e-eb04-404e-bcc1-1d3557fb8d1a,d3b7f89e-eb04-404e-bcc1-1d3557fb8d1a,0,1,442f9d7b-ae8f-4074-8ece-d5aa1c66e35c,442f9d7b-ae8f-4074-8ece-d5aa1c66e35c,0,1,bc708da8-7fc6-4da1-8129-9ef6a86667af,bc708da8-7fc6-4da1-8129-9ef6a86667af,0,1,061842fe-4077-4d6e-aefe-de79409da730,061842fe-4077-4d6e-aefe-de79409da730,0,1,86249619-8981-4fc4-85fc-ce30e4b9d542,86249619-8981-4fc4-85fc-ce30e4b9d542,0,1,da6e4bff-9835-4b92-b62b-291a5d6c86fe,da6e4bff-9835-4b92-b62b-291a5d6c86fe,0,1,8be35c43-32e6-418d-b3d6-e53ef56babb7,8be35c43-32e6-418d-b3d6-e53ef56babb7,0,1,3e4f5fd0-af15-41ae-896e-458ce9fb7e4d,3e4f5fd0-af15-41ae-896e-458ce9fb7e4d,0,1,935d01e1-232b-480e-a6bf-c21c617c6348,935d01e1-232b-480e-a6bf-c21c617c6348,0,1,9bc7cc99-1237-4f9c-8a4e-f3ab459186ef,9bc7cc99-1237-4f9c-8a4e-f3ab459186ef,0,1,05c702a1-2c74-45d5-b2ee-fdd795b0945a,05c702a1-2c74-45d5-b2ee-fdd795b0945a,0,1,3fadaeb7-2c41-42a4-bfa8-c585602b1028,3fadaeb7-2c41-42a4-bfa8-c585602b1028,0,1,171a0dfc-032e-4eaf-81a2-e5e0dfde8d56,171a0dfc-032e-4eaf-81a2-e5e0dfde8d56,0,1,083c709b-ed8c-47e4-a190-421e14259e73,083c709b-ed8c-47e4-a190-421e14259e73,0,1,b98dacc7-29e1-426b-a664-0a988f18186c,b98dacc7-29e1-426b-a664-0a988f18186c,0,1,d678856d-6e7c-443f-a6e3-350bbe8af659,d678856d-6e7c-443f-a6e3-350bbe8af659,0,1,d0979762-22ce-41be-b7a4-5e9ac149d94b,d0979762-22ce-41be-b7a4-5e9ac149d94b,0,1,ae23e70c-479e-47ad-9bfa-58560a903410,ae23e70c-479e-47ad-9bfa-58560a903410,0,1,c0d83781-bbda-43f7-bf0e-5defa3d47143,c0d83781-bbda-43f7-bf0e-5defa3d47143,0,1,21fa5fdd-acbc-403b-9acb-bbf95284bd20,21fa5fdd-acbc-403b-9acb-bbf95284bd20,0,1,576a01e3-4d6d-4241-a3c4-7661ba129bcb,576a01e3-4d6d-4241-a3c4-7661ba129bcb,0,1,9f7290dd-19f4-4163-9795-fe562e84f06d,9f7290dd-19f4-4163-9795-fe562e84f06d,0,1,c3b5c81f-b787-4f63-8cba-79def0921477,c3b5c81f-b787-4f63-8cba-79def0921477,0,1,1f0cb3d4-1344-451b-a257-be3cd854acfd,1f0cb3d4-1344-451b-a257-be3cd854acfd,0,1,0131fe59-ce47-48b7-8f7e-1544bf0fa031,0131fe59-ce47-48b7-8f7e-1544bf0fa031,0,1,c8b0a1be-97c6-4a16-b1dd-31901ac61cdc,c8b0a1be-97c6-4a16-b1dd-31901ac61cdc,0,1,372150e2-526e-4424-8c54-e4b16bdd25b5,372150e2-526e-4424-8c54-e4b16bdd25b5,0,1,752dc569-cf84-42d7-911d-49d455f7214e,752dc569-cf84-42d7-911d-49d455f7214e,0,1,fecab2b9-27e1-44d6-9082-79c3569b7477,fecab2b9-27e1-44d6-9082-79c3569b7477,0,1,07ae092f-8517-47b7-b54c-5dbcb6506929,07ae092f-8517-47b7-b54c-5dbcb6506929,0,1,db4c25bb-d199-43ec-833d-82972de04a41,db4c25bb-d199-43ec-833d-82972de04a41,0,1,43d19685-0794-41f2-9171-bf565133718d,43d19685-0794-41f2-9171-bf565133718d,0,1,b68c15c4-4966-4f13-8912-2d479b65089a,b68c15c4-4966-4f13-8912-2d479b65089a,0,1,8f6770c2-654c-4cc7-8ed5-15b5b2e3109a,8f6770c2-654c-4cc7-8ed5-15b5b2e3109a,0,1,f87e3935-dae1-4192-b6a7-05e3c700c590,f87e3935-dae1-4192-b6a7-05e3c700c590,0,1,ee635706-6ee2-4956-8d58-a235f64687f6,ee635706-6ee2-4956-8d58-a235f64687f6,0,1,a5a40ca7-d665-420b-a516-1355019d6901,a5a40ca7-d665-420b-a516-1355019d6901,0,1,adf9304c-ccf8-492e-95b1-0754764586a2,adf9304c-ccf8-492e-95b1-0754764586a2,0,1,fd175112-ec8f-4088-9b21-d8135056f0c5,fd175112-ec8f-4088-9b21-d8135056f0c5,0,1,ddd82a66-1eda-409f-b6c0-e22c4bd2c1b7,ddd82a66-1eda-409f-b6c0-e22c4bd2c1b7,0,1,df76a1b7-312a-4e77-bac1-79befadb4495,df76a1b7-312a-4e77-bac1-79befadb4495,0,1,ab39fad8-1039-491e-982a-c49637770ec0,ab39fad8-1039-491e-982a-c49637770ec0,0,1,7d93a6ba-3ca7-45ab-a540-743c79587535,7d93a6ba-3ca7-45ab-a540-743c79587535,0,1,76b58810-0527-4dfc-8858-bac68e7e65f3,76b58810-0527-4dfc-8858-bac68e7e65f3,0,1,aba97fd9-f05e-45cd-8404-ed702070e17a,aba97fd9-f05e-45cd-8404-ed702070e17a,0,1,f5c415cd-429b-469f-9332-c43ab5d1c8d6,f5c415cd-429b-469f-9332-c43ab5d1c8d6,0,1,458e9c6b-b828-404b-be5a-c6c0aeea34c9,458e9c6b-b828-404b-be5a-c6c0aeea34c9,0,1,7262eb4d-2d2d-454c-beaa-974645813af7,7262eb4d-2d2d-454c-beaa-974645813af7,0,1,45fa9f17-eeb1-43e2-b78c-f81a341f1bff,45fa9f17-eeb1-43e2-b78c-f81a341f1bff,0,1,49221b2f-aae2-4bee-9a1a-18263fc74244,49221b2f-aae2-4bee-9a1a-18263fc74244,0,1,da0cd264-da2f-4044-af28-c91d2efe1d5c,da0cd264-da2f-4044-af28-c91d2efe1d5c,0,1,f1b1db38-2d9f-4409-a6d6-fd7192b1f102,f1b1db38-2d9f-4409-a6d6-fd7192b1f102,0,1,fad26b16-8638-496b-bd12-381fc6f5b71f,fad26b16-8638-496b-bd12-381fc6f5b71f,0,1,ed3cfb74-a37a-4314-a2d7-4ce717a2edd9,ed3cfb74-a37a-4314-a2d7-4ce717a2edd9,0,1,324a56c9-02d9-4177-af84-a817b8c41169,324a56c9-02d9-4177-af84-a817b8c41169,0,1,1e44abfe-c173-4802-b535-96849d384983,1e44abfe-c173-4802-b535-96849d384983,0,1,2751a509-037b-49aa-9ca8-e87057d6d82c,2751a509-037b-49aa-9ca8-e87057d6d82c,0,1,35f62549-eb6a-4284-a6e3-406b0d9df0cf,35f62549-eb6a-4284-a6e3-406b0d9df0cf,0,1,cee94c04-7a46-47a5-bdd5-6f0dbd884e97,cee94c04-7a46-47a5-bdd5-6f0dbd884e97,0,1,fd66995b-ee76-41d3-983f-33d84bdcbbd4,fd66995b-ee76-41d3-983f-33d84bdcbbd4,0,1,73e97918-b34e-4ad2-8591-4c219eb92f2c,73e97918-b34e-4ad2-8591-4c219eb92f2c,0,1,445cf7eb-35d0-48f8-9579-c2ec574ef324,445cf7eb-35d0-48f8-9579-c2ec574ef324,0,1,1025657e-afd2-4c7b-96d5-ccbedaca4619,1025657e-afd2-4c7b-96d5-ccbedaca4619,0,1,64839c78-b2fa-4d80-bee0-b3d3a7e5db35,64839c78-b2fa-4d80-bee0-b3d3a7e5db35,0,1,e754ad5c-cf3c-4198-af81-128475924cb0,e754ad5c-cf3c-4198-af81-128475924cb0,0,1,ed65d504-b210-4014-85ec-275ad633ef04,ed65d504-b210-4014-85ec-275ad633ef04,0,1,dc31edb1-273e-4b1a-8e69-32393479ff36,dc31edb1-273e-4b1a-8e69-32393479ff36,0,1,3ab0649b-239f-4466-b897-73c0ab628927,3ab0649b-239f-4466-b897-73c0ab628927,0,1,4c697110-8941-4d6d-ba03-f2b9e96ff82e,4c697110-8941-4d6d-ba03-f2b9e96ff82e,0,1,7ea4112d-fc41-4f1e-bd22-f04adeac1d8f,7ea4112d-fc41-4f1e-bd22-f04adeac1d8f,0,1,b172631b-da0d-42f4-ae6b-ae122a46cced,b172631b-da0d-42f4-ae6b-ae122a46cced,0,1,1a25e744-37ae-46ca-a328-ff8eced21a82,1a25e744-37ae-46ca-a328-ff8eced21a82,0,1,dddabe54-a93b-4e4b-acbb-cc522e4d7c28,dddabe54-a93b-4e4b-acbb-cc522e4d7c28,0,1,46169f0b-8514-40a1-9d27-8489cab72503,46169f0b-8514-40a1-9d27-8489cab72503,0,1,d9cf39cc-8652-4c4d-bc5b-b4e455c0083f,d9cf39cc-8652-4c4d-bc5b-b4e455c0083f,0,1,4b0d7d39-5f79-4a21-b0bb-d3142a3bc8a9,4b0d7d39-5f79-4a21-b0bb-d3142a3bc8a9,0,1,c90243af-582c-4f5a-88e7-e0cbc0555fcb,c90243af-582c-4f5a-88e7-e0cbc0555fcb,0,1,14bf4066-15cb-4165-b854-45443ee27da1,14bf4066-15cb-4165-b854-45443ee27da1,0,1,a0861dd3-ced5-485e-8719-0ad0bc3adc0d,a0861dd3-ced5-485e-8719-0ad0bc3adc0d,0,1,5a94a307-3f54-4753-8ef5-ce9f88417827,5a94a307-3f54-4753-8ef5-ce9f88417827,0,1,0f09b6b8-72ac-4461-96c4-683be403e2ff,0f09b6b8-72ac-4461-96c4-683be403e2ff,0,1,b73d0f07-9c6e-41b1-9acc-8e83dacd7528,b73d0f07-9c6e-41b1-9acc-8e83dacd7528,0,1,19d1d74a-de5f-475a-896c-a32b7d28f918,19d1d74a-de5f-475a-896c-a32b7d28f918,0,1,4427cab9-4eea-4415-98ef-6021a447c60c,4427cab9-4eea-4415-98ef-6021a447c60c,0,1,fe46b4da-d865-468f-badd-83644bf88faa,fe46b4da-d865-468f-badd-83644bf88faa,0,1,2851c9d4-4366-4488-926d-a7fcd3b1548c,2851c9d4-4366-4488-926d-a7fcd3b1548c,0,1,31116aa2-cfbc-48e8-886b-45c1c17508fd,31116aa2-cfbc-48e8-886b-45c1c17508fd,0,1,6aa819d3-c56d-4561-a2e4-a1188ab1295a,6aa819d3-c56d-4561-a2e4-a1188ab1295a,0,1,2ddf344d-7065-40d5-9306-23870d8fc04a,2ddf344d-7065-40d5-9306-23870d8fc04a,0,1,c630ab2d-0a20-4136-88b6-220b2cad6a71,c630ab2d-0a20-4136-88b6-220b2cad6a71,0,1,00cd1dea-bc54-475c-956d-dc5221104932,00cd1dea-bc54-475c-956d-dc5221104932,0,1,3807f865-dd2c-44f7-9238-3db191f0a186,3807f865-dd2c-44f7-9238-3db191f0a186,0,1,8f184df5-bfe8-4df3-bc7c-18218cef7650,8f184df5-bfe8-4df3-bc7c-18218cef7650,0,1,387e273a-889f-454b-8b43-feaa12025fde,387e273a-889f-454b-8b43-feaa12025fde,0,1,1c38ad75-b294-4c05-89ce-69ce4d9a291f,1c38ad75-b294-4c05-89ce-69ce4d9a291f,0,1,078d1e8f-6d27-4761-9532-b1e7a60e4c13,078d1e8f-6d27-4761-9532-b1e7a60e4c13,0,1,4262193c-58ad-47c6-8088-735d8cd037ea,4262193c-58ad-47c6-8088-735d8cd037ea,0,1,36a2b5f9-ded5-4fc3-a7bd-e12b37cd6bab,36a2b5f9-ded5-4fc3-a7bd-e12b37cd6bab,0,1,de6d1aad-39eb-46ce-87aa-d29812bb37bf,de6d1aad-39eb-46ce-87aa-d29812bb37bf,0,1,4ad859ec-cc75-4bac-9e89-397798450e48,4ad859ec-cc75-4bac-9e89-397798450e48,0,1,d93ab94c-0f55-4b80-b226-41b44c73b3ea,d93ab94c-0f55-4b80-b226-41b44c73b3ea,0,1,94cbed80-5a35-471f-b354-439a11629210,94cbed80-5a35-471f-b354-439a11629210,0,1,1162cc0a-42e5-47cb-9507-68459579f110,1162cc0a-42e5-47cb-9507-68459579f110,0,1,17f9f188-d3fd-4fe1-a00c-b0dde64a0f9e,17f9f188-d3fd-4fe1-a00c-b0dde64a0f9e,0,1,bb49dc80-4934-4f44-8f27-9a363dca8dc4,bb49dc80-4934-4f44-8f27-9a363dca8dc4,0,1,7338e497-03a7-4ed4-85a2-ca802c065a9f,7338e497-03a7-4ed4-85a2-ca802c065a9f,0,1,49fe879c-8972-4c9a-bb08-e3e5b2e5ff84,49fe879c-8972-4c9a-bb08-e3e5b2e5ff84,0,1,5249687b-9ff4-46f5-be15-dbb5d5047fd1,5249687b-9ff4-46f5-be15-dbb5d5047fd1,0,1,d33df51c-3dcd-496c-90f2-7ee05582bdf7,d33df51c-3dcd-496c-90f2-7ee05582bdf7,0,1,24b39ebd-2424-4939-8e3e-d09eb674d409,24b39ebd-2424-4939-8e3e-d09eb674d409,0,1,08c751bb-9e57-4536-901e-bb316c8e96d7,08c751bb-9e57-4536-901e-bb316c8e96d7,0,1,de0afa6f-07c6-441c-a4ca-e7ed709a8da5,de0afa6f-07c6-441c-a4ca-e7ed709a8da5,0,1,034cdcef-08e5-4751-9885-400aa69e0b94,034cdcef-08e5-4751-9885-400aa69e0b94,0,1,efefebea-2032-4006-b9ca-50a23b7da1ef,efefebea-2032-4006-b9ca-50a23b7da1ef,0,1,4c794d37-3352-4acb-a939-5e90fb682db8,4c794d37-3352-4acb-a939-5e90fb682db8,0,1,5f3fea83-6ca8-481b-9e2b-789a6fd01e2e,5f3fea83-6ca8-481b-9e2b-789a6fd01e2e,0,1,008f5068-da9c-4dac-9c0a-a50366d27cbb,008f5068-da9c-4dac-9c0a-a50366d27cbb,0,1,950b3ee3-070f-4946-8b9b-0aa2058de986,950b3ee3-070f-4946-8b9b-0aa2058de986,0,1,bd04a870-0943-4bdb-9e30-50a69daa8a13,bd04a870-0943-4bdb-9e30-50a69daa8a13,0,1,a23e6c77-8c12-4f99-ae2d-68a12274be38,a23e6c77-8c12-4f99-ae2d-68a12274be38,0,1,3c4454cd-31e9-42a5-9127-fb66a628f0e1,3c4454cd-31e9-42a5-9127-fb66a628f0e1,0,1,c02c5cbf-b25a-4956-8aa7-74cfeb66d508,c02c5cbf-b25a-4956-8aa7-74cfeb66d508,0,1,31cac1e9-eb16-489c-9322-30d1e27a80b3,31cac1e9-eb16-489c-9322-30d1e27a80b3,0,1,0d100e33-7941-41c1-962d-7672c874e9c5,0d100e33-7941-41c1-962d-7672c874e9c5,0,1,c5ac53c9-c9b2-4b90-a21e-10f1daa756c5,c5ac53c9-c9b2-4b90-a21e-10f1daa756c5,0,1,6e61d717-de36-4dce-8af9-b6c14ed76acb,6e61d717-de36-4dce-8af9-b6c14ed76acb,0,1,474518fe-9cb5-4a12-9388-bc7a64511617,474518fe-9cb5-4a12-9388-bc7a64511617,0,1,64337614-b1c9-4931-b576-448721fa4602,64337614-b1c9-4931-b576-448721fa4602,0,1,1d73b59c-0594-4ed3-b584-cf1261941e1d,1d73b59c-0594-4ed3-b584-cf1261941e1d,0,1,8ff2547f-d596-4fa1-9e12-079e1cc4c057,8ff2547f-d596-4fa1-9e12-079e1cc4c057,0,1,1ab0c8f8-b908-4618-ae88-af37b8f1224e,1ab0c8f8-b908-4618-ae88-af37b8f1224e,0,1,bd3ec5a9-161d-487e-ab1d-e5e15a6e3a7b,bd3ec5a9-161d-487e-ab1d-e5e15a6e3a7b,0,1,b85b3a58-95e4-4698-b1ae-037901ecc1b1,b85b3a58-95e4-4698-b1ae-037901ecc1b1,0,1,b77d748a-d180-432d-91c3-774e6ccf7efa,b77d748a-d180-432d-91c3-774e6ccf7efa,0,1,e5b9c1b0-4690-442c-b160-e6c587e42e57,e5b9c1b0-4690-442c-b160-e6c587e42e57,0,1,e3adb576-6b33-475b-976b-7a6783de3184,e3adb576-6b33-475b-976b-7a6783de3184,0,1,c6cef8db-0689-42a6-9f43-c86b7c3cf0e9,c6cef8db-0689-42a6-9f43-c86b7c3cf0e9,0,1,78f5a205-dffb-4009-897a-e8f36372f33c,78f5a205-dffb-4009-897a-e8f36372f33c,0,1,f7597041-f182-42fb-803a-2521c70d627d,f7597041-f182-42fb-803a-2521c70d627d,0,1,ce988b8a-d0c1-400a-9466-aa757501bb58,ce988b8a-d0c1-400a-9466-aa757501bb58,0,1,ab98d665-8da8-406e-9e0e-3e130ab393ef,ab98d665-8da8-406e-9e0e-3e130ab393ef,0,1,9e823bb6-b0c0-439e-81e4-ebd46b79b99c,9e823bb6-b0c0-439e-81e4-ebd46b79b99c,0,1,118a0e62-c0bb-435b-9e3e-c64563efa602,118a0e62-c0bb-435b-9e3e-c64563efa602,0,1,b57bc8a9-8a59-4192-a442-2e1982e83179,b57bc8a9-8a59-4192-a442-2e1982e83179,0,1,5b06ccda-2a70-4621-8273-78408cbe72a9,5b06ccda-2a70-4621-8273-78408cbe72a9,0,1,89753385-64fd-4e76-9857-bfd5d7c23f71,89753385-64fd-4e76-9857-bfd5d7c23f71,0,1,1b3113f3-e7d4-4e6f-b6ed-08f5fd78c68e,1b3113f3-e7d4-4e6f-b6ed-08f5fd78c68e,0,1,53e72cf2-e2a5-4b59-b5b1-a1fc28fda5bf,53e72cf2-e2a5-4b59-b5b1-a1fc28fda5bf,0,1,e20bcb57-2f68-4709-8a11-105d561a2dda,e20bcb57-2f68-4709-8a11-105d561a2dda,0,1,3df3f61a-2c17-4278-8d82-91089f793e6a,3df3f61a-2c17-4278-8d82-91089f793e6a,0,1,ea8beea1-7d80-4613-b2f9-79ee612e977a,ea8beea1-7d80-4613-b2f9-79ee612e977a,0,1,afd62a32-fdbb-429a-9a64-89c61a07e018,afd62a32-fdbb-429a-9a64-89c61a07e018,0,1,027cef43-99bd-48d3-a1a3-2102ac003742,027cef43-99bd-48d3-a1a3-2102ac003742,0,1,00197ea9-de76-4e2a-97bc-93e44053e35e,00197ea9-de76-4e2a-97bc-93e44053e35e,0,1,540a47b8-f6d4-4531-ac87-3f7cfbef4c8c,540a47b8-f6d4-4531-ac87-3f7cfbef4c8c,0,1,a51f7c6f-2631-4d23-becc-c0e8b711fddd,a51f7c6f-2631-4d23-becc-c0e8b711fddd,0,1,37806357-d92c-4bea-a5ef-77f138578fda,37806357-d92c-4bea-a5ef-77f138578fda,0,1,91b100e6-fbbe-4bb0-8d51-d12595a2a3e8,91b100e6-fbbe-4bb0-8d51-d12595a2a3e8,0,1,0a880538-f97f-448e-a4a9-82b0194dbe28,0a880538-f97f-448e-a4a9-82b0194dbe28,0,1,179868b7-d342-4df0-9386-c114d75faf3a,179868b7-d342-4df0-9386-c114d75faf3a,0,1,bbc4cc8c-31c2-4fcf-b86c-9ec65b2772b0,bbc4cc8c-31c2-4fcf-b86c-9ec65b2772b0,0,1,b49ea672-5d01-46c2-8ece-2511afeb740d,b49ea672-5d01-46c2-8ece-2511afeb740d,0,1,77bb5aba-1364-4db9-aa93-69f001ce2709,77bb5aba-1364-4db9-aa93-69f001ce2709,0,1,d14528d6-c2dd-4184-98c5-0b444a2bd98b,d14528d6-c2dd-4184-98c5-0b444a2bd98b,0,1,48f81387-a409-4163-85b8-ad563cb6cf2e,48f81387-a409-4163-85b8-ad563cb6cf2e,0,1,739df12e-1b6b-45c6-802b-658641fb9e90,739df12e-1b6b-45c6-802b-658641fb9e90,0,1,878fe826-fa99-44ad-9891-5eada9744017,878fe826-fa99-44ad-9891-5eada9744017,0,1,0d61712a-dfaf-46f1-b728-62993dd94fbe,0d61712a-dfaf-46f1-b728-62993dd94fbe,0,1,3a6cf496-09b9-4947-9df5-06d23b474558,3a6cf496-09b9-4947-9df5-06d23b474558,0,1,625b498a-33d1-4162-9525-fb7790cbb6a8,625b498a-33d1-4162-9525-fb7790cbb6a8,0,1,28223f7b-d15a-4f12-b57c-1f6d08a902f9,28223f7b-d15a-4f12-b57c-1f6d08a902f9,0,1,dd9eb5b7-5aed-4e51-9939-9ff14492d240,dd9eb5b7-5aed-4e51-9939-9ff14492d240,0,1,b2a14899-d589-4990-b85e-7bffb427e8af,b2a14899-d589-4990-b85e-7bffb427e8af,0,1,0981d114-05bd-4ee1-a8fd-398fa6620d0b,0981d114-05bd-4ee1-a8fd-398fa6620d0b,0,1,3210ba40-382e-4917-ad0f-9bd88d23dc25,3210ba40-382e-4917-ad0f-9bd88d23dc25,0,1,835e3ead-d01f-410b-937a-902dd5e66aec,835e3ead-d01f-410b-937a-902dd5e66aec,0,1,40141982-d1d6-416f-844e-19143a407ff9,40141982-d1d6-416f-844e-19143a407ff9,0,1,618b8843-7413-4634-bd65-18d904c2582f,618b8843-7413-4634-bd65-18d904c2582f,0,1,253b97a6-4e04-40d0-a39e-99500d54accb,253b97a6-4e04-40d0-a39e-99500d54accb,0,1,46cf1217-4b49-4c35-9c2b-4739dd1b8bf5,46cf1217-4b49-4c35-9c2b-4739dd1b8bf5,0,1,db367faa-e417-40ff-a082-e93421d464ca,db367faa-e417-40ff-a082-e93421d464ca,0,1,55ad14cb-7647-4d16-ae68-ac45e4a39c01,55ad14cb-7647-4d16-ae68-ac45e4a39c01,0,1,f0363f45-9d63-4f0b-b7fc-95cb0d1660af,f0363f45-9d63-4f0b-b7fc-95cb0d1660af,0,1,d8a16236-89bc-4493-9b8e-fd5d3f9298a7,d8a16236-89bc-4493-9b8e-fd5d3f9298a7,0,1,b12a0998-905e-4956-af8b-6460dc945c10,b12a0998-905e-4956-af8b-6460dc945c10,0,1,66ec2482-c1f3-45d3-9257-e0b9f5ae772a,66ec2482-c1f3-45d3-9257-e0b9f5ae772a,0,1,d3211832-c8ca-437a-8810-82e06cbb48de,d3211832-c8ca-437a-8810-82e06cbb48de,0,1,8131d701-1014-4196-9b67-914e451f8a3a,8131d701-1014-4196-9b67-914e451f8a3a,0,1,2b102933-c660-4e74-ae9a-5061a88ed672,2b102933-c660-4e74-ae9a-5061a88ed672,0,1,56c897b7-d34e-4d7d-9a3b-d0779be5c189,56c897b7-d34e-4d7d-9a3b-d0779be5c189,0,1,3ac81c80-56bd-4750-b135-07ab522e3eab,3ac81c80-56bd-4750-b135-07ab522e3eab,0,1,5657872f-c7d5-446f-bcc3-d0b86ad63a42,5657872f-c7d5-446f-bcc3-d0b86ad63a42,0,1,d5214cb9-67e2-469f-989f-3f2b662ae830,d5214cb9-67e2-469f-989f-3f2b662ae830,0,1,69679e88-4f2b-4dd6-8cb2-b88293d07b55,69679e88-4f2b-4dd6-8cb2-b88293d07b55,0,1,68679208-9972-4854-8649-49bdf6212255,68679208-9972-4854-8649-49bdf6212255,0,1,98393093-7ba6-4b4d-86be-ee5826cd8cd5,98393093-7ba6-4b4d-86be-ee5826cd8cd5,0,1,87de486d-3f35-4432-a7cd-9d3832db63cf,87de486d-3f35-4432-a7cd-9d3832db63cf,0,1,246f17a0-93a7-4e2c-8fa6-f57405f0abeb,246f17a0-93a7-4e2c-8fa6-f57405f0abeb,0,1,ea6c4830-a34d-4026-a0ca-5cf7e44f089d,ea6c4830-a34d-4026-a0ca-5cf7e44f089d,0,1,bb7ce04a-8143-4c0b-a196-1b57f1640142,bb7ce04a-8143-4c0b-a196-1b57f1640142,0,1,4872f12c-705c-4dd3-802f-d27496a0d634,4872f12c-705c-4dd3-802f-d27496a0d634,0,1,3bacfd93-dfc7-4154-9d3f-b61ddc5c6721,3bacfd93-dfc7-4154-9d3f-b61ddc5c6721,0,1,0c0bbfba-c1c4-4bb5-a813-10da4bef7911,0c0bbfba-c1c4-4bb5-a813-10da4bef7911,0,1,f9ada91a-e673-4821-9bce-cb0dd75ca28b,f9ada91a-e673-4821-9bce-cb0dd75ca28b,0,1,9fcf68bb-43e2-4cd1-89ec-8797ad9c0e8b,9fcf68bb-43e2-4cd1-89ec-8797ad9c0e8b,0,1,90ce635a-0277-4056-980d-d1a16d91cb30,90ce635a-0277-4056-980d-d1a16d91cb30,0,1,e61a8360-a0f8-4d86-b91a-2ae9b8552bf0,e61a8360-a0f8-4d86-b91a-2ae9b8552bf0,0,1,1e77e873-632c-482b-8f46-8f8cc3cc8cef,1e77e873-632c-482b-8f46-8f8cc3cc8cef,0,1,766208a3-2780-427b-a7d3-93abe99d236b,766208a3-2780-427b-a7d3-93abe99d236b,0,1,63ce4c3c-5bad-409c-904f-18f34cf1da78,63ce4c3c-5bad-409c-904f-18f34cf1da78,0,1,62bddcee-bef6-42cc-9ba3-e99b8160dcc2,62bddcee-bef6-42cc-9ba3-e99b8160dcc2,0,1,26ac22f9-0bbb-4671-b446-626e345e2461,26ac22f9-0bbb-4671-b446-626e345e2461,0,1,0d63ee6d-e17f-4a86-b384-adf9793f3331,0d63ee6d-e17f-4a86-b384-adf9793f3331,0,1,f152945b-2a7b-449e-a915-176166af7bac,f152945b-2a7b-449e-a915-176166af7bac,0,1,77f5d86a-7fae-4490-9740-0e31102dab5c,77f5d86a-7fae-4490-9740-0e31102dab5c,0,1,5a54bc1a-d178-412c-bf4a-cf92d7f141aa,5a54bc1a-d178-412c-bf4a-cf92d7f141aa,0,1,24be43ec-d39e-46aa-9c11-2536b835e515,24be43ec-d39e-46aa-9c11-2536b835e515,0,1,c9ca80ef-c7b7-4425-b5c0-3d13af82f291,c9ca80ef-c7b7-4425-b5c0-3d13af82f291,0,1,df9af3ee-6a69-4a03-8ff5-0735e9a38013,df9af3ee-6a69-4a03-8ff5-0735e9a38013,0,1,1b27eb77-d535-43a5-8ae1-fa2fec15d92c,1b27eb77-d535-43a5-8ae1-fa2fec15d92c,0,1,7743fe24-b941-4dad-bc76-05fb6b26b1d7,7743fe24-b941-4dad-bc76-05fb6b26b1d7,0,1,5bf2da0d-f318-4036-9234-8a3a6eca88b2,5bf2da0d-f318-4036-9234-8a3a6eca88b2,0,1,288525fc-d3fa-4c8e-a1d7-d2d1ef4cd0ef,288525fc-d3fa-4c8e-a1d7-d2d1ef4cd0ef,0,1,c3634571-6fe5-45ab-9362-161305eef661,c3634571-6fe5-45ab-9362-161305eef661,0,1,ec11342f-594f-416f-a10f-bd1bfa695c08,ec11342f-594f-416f-a10f-bd1bfa695c08,0,1,31c3ac44-204e-43fd-bca3-fd18fa091c58,31c3ac44-204e-43fd-bca3-fd18fa091c58,0,1,74f03c35-5da0-406e-a938-e8e5d49975ef,74f03c35-5da0-406e-a938-e8e5d49975ef,0,1,c9ab3890-6d16-431f-ab2b-b5058e6202a4,c9ab3890-6d16-431f-ab2b-b5058e6202a4,0,1,5ee9eed7-3c6c-4264-ab9a-6f24f9c80598,5ee9eed7-3c6c-4264-ab9a-6f24f9c80598,0,1,3c33adc7-abea-4e0f-9e5d-d8f10abb63df,3c33adc7-abea-4e0f-9e5d-d8f10abb63df,0,1,4090c6f7-1d25-4b17-9baa-18daa0640b0f,4090c6f7-1d25-4b17-9baa-18daa0640b0f,0,1,26125e58-dfc8-4bbb-a3a4-80616471746e,26125e58-dfc8-4bbb-a3a4-80616471746e,0,1,b1c699cd-efdc-461c-ad37-10bfd4bc9674,b1c699cd-efdc-461c-ad37-10bfd4bc9674,0,1,6add1920-5073-4b1e-b7e0-13bf1e65e4c3,6add1920-5073-4b1e-b7e0-13bf1e65e4c3,0,1,f12c946c-98e4-4da6-8a88-c555e9dc3bdd,f12c946c-98e4-4da6-8a88-c555e9dc3bdd,0,1,ec5718b7-1c4d-4bdc-9426-40a339bb29cf,ec5718b7-1c4d-4bdc-9426-40a339bb29cf,0,1,ecd8772d-e33f-426f-a87a-e28bd94d5fdf,ecd8772d-e33f-426f-a87a-e28bd94d5fdf,0,1,96661303-1286-4f84-93b7-0e6da2bd7893,96661303-1286-4f84-93b7-0e6da2bd7893,0,1,68076431-36e6-46dc-92cb-e0d8e605bf66,68076431-36e6-46dc-92cb-e0d8e605bf66,0,1,239fa55a-6572-4e5c-9918-c2e14063c76d,239fa55a-6572-4e5c-9918-c2e14063c76d,0,1,8211a1b6-c3b1-466b-8d11-22603fb50c7a,8211a1b6-c3b1-466b-8d11-22603fb50c7a,0,1,7e7dfcb5-04eb-40f4-8f4c-f29644e81473,7e7dfcb5-04eb-40f4-8f4c-f29644e81473,0,1,daef68a3-c6c3-450d-b8fd-7af2a2f5572e,daef68a3-c6c3-450d-b8fd-7af2a2f5572e,0,1,a83cb338-5707-42c9-9e88-11f6c68fcc32,a83cb338-5707-42c9-9e88-11f6c68fcc32,0,1,985106b7-7476-4b48-90ac-ad86876395b5,985106b7-7476-4b48-90ac-ad86876395b5,0,1,0d8db0c9-adbc-478d-997c-3d7feccac99b,0d8db0c9-adbc-478d-997c-3d7feccac99b,0,1,3fd2ef04-c178-47bf-ab62-7baf83236d99,3fd2ef04-c178-47bf-ab62-7baf83236d99,0,1,b4cd1b51-dbc0-4bb0-879e-5ac0d58e78c1,b4cd1b51-dbc0-4bb0-879e-5ac0d58e78c1,0,1,320bf2e6-a3a8-490b-8aa0-21369ffb121b,320bf2e6-a3a8-490b-8aa0-21369ffb121b,0,1,a3bafc54-8fe4-4841-acc6-74a87baf9caf,a3bafc54-8fe4-4841-acc6-74a87baf9caf,0,1,f93741c9-ab94-464b-b0d4-4af99c9f92d5,f93741c9-ab94-464b-b0d4-4af99c9f92d5,0,1,0fddbd8d-12dd-4af1-9e34-feebf4bc38b1,0fddbd8d-12dd-4af1-9e34-feebf4bc38b1,0,1,2e9548a6-1fd8-4430-8864-91bde0d2a7a1,2e9548a6-1fd8-4430-8864-91bde0d2a7a1,0,1,c59fd3f8-c734-49d3-90ba-e608a22ac981,c59fd3f8-c734-49d3-90ba-e608a22ac981,0,1,b26235ed-374c-44ab-8b3c-01d7c4d82d4c,b26235ed-374c-44ab-8b3c-01d7c4d82d4c,0,1,5056db9f-9ebe-4cca-98f0-5f4817a1cba4,5056db9f-9ebe-4cca-98f0-5f4817a1cba4,0,1,475f76ea-f494-41f1-9b65-f39907e5a427,475f76ea-f494-41f1-9b65-f39907e5a427,0,1,986280d1-41bb-4b15-a5ae-516d6a04c1f4,986280d1-41bb-4b15-a5ae-516d6a04c1f4,0,1,43bfd29a-d254-4c33-8639-200b483578c1,43bfd29a-d254-4c33-8639-200b483578c1,0,1,6a274167-7f80-4613-9890-259ffd8ccfc4,6a274167-7f80-4613-9890-259ffd8ccfc4,0,1,4e90e1ab-b1ec-4795-ad45-1db151a5492c,4e90e1ab-b1ec-4795-ad45-1db151a5492c,0,1,91791e56-ca80-4d90-b8a8-16145f6a9721,91791e56-ca80-4d90-b8a8-16145f6a9721,0,1,b242c6a2-5ac9-4edb-b5dd-24eda8162151,b242c6a2-5ac9-4edb-b5dd-24eda8162151,0,1,8d080f3c-06ed-48bf-9709-eea73d676741,8d080f3c-06ed-48bf-9709-eea73d676741,0,1,57b31a5d-9fdc-43d2-ae81-67157822c4b6,57b31a5d-9fdc-43d2-ae81-67157822c4b6,0,1,d4e2da66-9a70-459f-a873-cb4ad71d17b2,d4e2da66-9a70-459f-a873-cb4ad71d17b2,0,1,a84a91d2-d326-4bf4-82e6-d573ee35d090,a84a91d2-d326-4bf4-82e6-d573ee35d090,0,1,39cbda23-db3f-4ddd-8981-8540247406db,39cbda23-db3f-4ddd-8981-8540247406db,0,1,c8a18d99-62ff-45a4-acb5-48e3310c1b53,c8a18d99-62ff-45a4-acb5-48e3310c1b53,0,1,a6eb0cb1-80f0-4390-80ff-7af53f8e63c3,a6eb0cb1-80f0-4390-80ff-7af53f8e63c3,0,1,fef27478-ddfd-4ad9-8161-148761f29698,fef27478-ddfd-4ad9-8161-148761f29698,0,1,3500c6fa-813a-49dd-a4bf-163500db5b7f,3500c6fa-813a-49dd-a4bf-163500db5b7f,0,1,1d02493a-dd89-4a51-b75e-9c49f9818b95,1d02493a-dd89-4a51-b75e-9c49f9818b95,0,1,2845c5d1-e836-4499-bcae-f3c8fdae75ee,2845c5d1-e836-4499-bcae-f3c8fdae75ee,0,1,fe4e8e4e-9471-4583-b9b3-576007db08ee,fe4e8e4e-9471-4583-b9b3-576007db08ee,0,1,49deaaa8-6d50-4b25-8153-6712d88fb0fb,49deaaa8-6d50-4b25-8153-6712d88fb0fb,0,1,1eeb7634-e924-4ad8-92e0-1c54c22b1ba6,1eeb7634-e924-4ad8-92e0-1c54c22b1ba6,0,1,46a06de8-06fd-4b49-835f-4f24b832b3c4,46a06de8-06fd-4b49-835f-4f24b832b3c4,0,1,3845a567-4375-4c3a-af61-5b82674060ab,3845a567-4375-4c3a-af61-5b82674060ab,0,1,ab210fb8-4fc4-47f8-b8ef-3a00eeb0ab8b,ab210fb8-4fc4-47f8-b8ef-3a00eeb0ab8b,0,1,a835a3a7-989b-4247-b836-d23bba2f391a,a835a3a7-989b-4247-b836-d23bba2f391a,0,1,58f5c354-8f1d-4064-ba35-527ea3d2f4a9,58f5c354-8f1d-4064-ba35-527ea3d2f4a9,0,1,9b149c20-9328-4e2d-a34b-95c883ae4dcc,9b149c20-9328-4e2d-a34b-95c883ae4dcc,0,1,dd6fdc0d-49bb-4fa1-aa17-bd9dc38a0992,dd6fdc0d-49bb-4fa1-aa17-bd9dc38a0992,0,1,f8dbf226-ea56-4b15-baf1-a41fceba2a32,f8dbf226-ea56-4b15-baf1-a41fceba2a32,0,1,fc1476f7-26e6-4374-b99b-e515d86c050a,fc1476f7-26e6-4374-b99b-e515d86c050a,0,1,e0eb7b4a-9a13-4752-9327-e13d2abc4fc5,e0eb7b4a-9a13-4752-9327-e13d2abc4fc5,0,1,59fe985a-f169-495b-bd6d-4b64401f81b0,59fe985a-f169-495b-bd6d-4b64401f81b0,0,1,184d1023-fba9-4e56-b592-519254abe922,184d1023-fba9-4e56-b592-519254abe922,0,1,cb68b275-f191-4632-a8ea-aa8809256804,cb68b275-f191-4632-a8ea-aa8809256804,0,1,174011b9-8fe2-43f5-adea-21f6d73835ff,174011b9-8fe2-43f5-adea-21f6d73835ff,0,1,c4753515-a483-453e-a48b-b12d8ef48fd9,c4753515-a483-453e-a48b-b12d8ef48fd9,0,1,2d9048eb-abdf-4980-96ed-788fbb0f4ea7,2d9048eb-abdf-4980-96ed-788fbb0f4ea7,0,1,98c3bc52-2351-460c-8b8e-0d3f45ca3131,98c3bc52-2351-460c-8b8e-0d3f45ca3131,0,1,b1ff31b9-c9f2-4be4-ac9a-62faa1d1eb81,b1ff31b9-c9f2-4be4-ac9a-62faa1d1eb81,0,1,c14ea7a0-1fb6-4d54-82d6-7f12f11b0c0b,c14ea7a0-1fb6-4d54-82d6-7f12f11b0c0b,0,1,29645810-44aa-402c-9561-7819d6f4a7ab,29645810-44aa-402c-9561-7819d6f4a7ab,0,1,46bf4911-5200-44ac-9b4d-eb0089c12e34,46bf4911-5200-44ac-9b4d-eb0089c12e34,0,1,6e1685bd-7269-401c-b36e-def6a36b41d5,6e1685bd-7269-401c-b36e-def6a36b41d5,0,1,9d77103a-9921-4f6c-98fc-d7f42f0f2d8d,9d77103a-9921-4f6c-98fc-d7f42f0f2d8d,0,1,e03b6592-b597-4795-a78e-775d4f2258db,e03b6592-b597-4795-a78e-775d4f2258db,0,1,6ae9e86a-a42f-4de0-a891-6abe1ed16cdd,6ae9e86a-a42f-4de0-a891-6abe1ed16cdd,0,1,3b207d5f-6584-4cf2-9173-20235484f9f4,3b207d5f-6584-4cf2-9173-20235484f9f4,0,1,878d9efe-b0e7-487f-b8f7-83470c131e09,878d9efe-b0e7-487f-b8f7-83470c131e09,0,1,8270573d-8ed6-449d-853b-462d2dabaaa9,8270573d-8ed6-449d-853b-462d2dabaaa9,0,1,baeec6cd-b220-4240-95f2-3a0c1ee06c2e,baeec6cd-b220-4240-95f2-3a0c1ee06c2e,0,1,f2502463-67e4-4bfe-8ad5-fb80aa73975a,f2502463-67e4-4bfe-8ad5-fb80aa73975a,0,1,59e885e6-d978-40c2-95b6-35fc61074fb4,59e885e6-d978-40c2-95b6-35fc61074fb4,0,1,267dc512-9ee1-4bc1-9034-3effb7fb2949,267dc512-9ee1-4bc1-9034-3effb7fb2949,0,1,0f211e73-5be9-4015-93e7-ccf63e793cb6,0f211e73-5be9-4015-93e7-ccf63e793cb6,0,1,6574d8f4-fb97-4a26-b166-711fad63aa07,6574d8f4-fb97-4a26-b166-711fad63aa07,0,1,fb3eddaf-3241-4d59-8314-97a5ae9258c4,fb3eddaf-3241-4d59-8314-97a5ae9258c4,0,1,6528bd7a-bac1-4c8b-9b00-6be01c0121b1,6528bd7a-bac1-4c8b-9b00-6be01c0121b1,0,1,d8601e95-af94-4805-974a-99c539725d74,d8601e95-af94-4805-974a-99c539725d74,0,1,6d98f877-f3bb-4795-9025-2631468a331f,6d98f877-f3bb-4795-9025-2631468a331f,0,1,89b9379d-ace9-48cc-b979-a66fd45aeb1d,89b9379d-ace9-48cc-b979-a66fd45aeb1d,0,1,c4a5c44d-329d-41b5-9a6c-bddbc15f6249,c4a5c44d-329d-41b5-9a6c-bddbc15f6249,0,1,9767a113-5a42-4749-bf40-0f349e85615d,9767a113-5a42-4749-bf40-0f349e85615d,0,1,a3b0494c-f436-45ea-9577-4c0c86b057c9,a3b0494c-f436-45ea-9577-4c0c86b057c9,0,1,5101c142-b25c-4bef-80e7-7407f2c15c90,5101c142-b25c-4bef-80e7-7407f2c15c90,0,1,6d7872f1-fd54-41c4-8253-5f2b125f31ae,6d7872f1-fd54-41c4-8253-5f2b125f31ae,0,1,0c218200-27a8-4f71-9b09-3632dd453644,0c218200-27a8-4f71-9b09-3632dd453644,0,1,2d8a74e5-eb29-448b-b4c0-1f41fa171b5e,2d8a74e5-eb29-448b-b4c0-1f41fa171b5e,0,1,b5d30250-18ab-4af1-b99a-ff5dba334d1f,b5d30250-18ab-4af1-b99a-ff5dba334d1f,0,1,936f1aa5-7516-444b-b451-1162fa5d705f,936f1aa5-7516-444b-b451-1162fa5d705f,0,1,e8d5533e-2669-44f6-9eed-eaedab666d42,e8d5533e-2669-44f6-9eed-eaedab666d42,0,1,dd8e0f41-51a3-4bf2-a32e-084f9ad09be7,dd8e0f41-51a3-4bf2-a32e-084f9ad09be7,0,1,9e323b0d-4e3b-45d4-9705-aa30e63014f5,9e323b0d-4e3b-45d4-9705-aa30e63014f5,0,1,5afa798a-958e-4e0c-a380-0104f4c037a7,5afa798a-958e-4e0c-a380-0104f4c037a7,0,1,c0295fd9-c749-41b3-8d0d-6af16f484b1f,c0295fd9-c749-41b3-8d0d-6af16f484b1f,0,1,bd32a863-3090-432d-89c4-356ba86a0bdc,bd32a863-3090-432d-89c4-356ba86a0bdc,0,1,4621bf5a-46b5-4b82-8ae4-cc8e11e81ba0,4621bf5a-46b5-4b82-8ae4-cc8e11e81ba0,0,1,ed5465b4-a556-4078-ab18-49fef2afba2e,ed5465b4-a556-4078-ab18-49fef2afba2e,0,1,7368ab8f-59d5-4270-a43b-0f3e422169ed,7368ab8f-59d5-4270-a43b-0f3e422169ed,0,1,eeb0571b-1b74-4889-b8b5-f94186d692d7,eeb0571b-1b74-4889-b8b5-f94186d692d7,0,1,9ef3b72c-caa3-486b-9917-04c00f6689c1,9ef3b72c-caa3-486b-9917-04c00f6689c1,0,1,cb3039d8-4b11-4d03-b0ca-eae5dfc01b0a,cb3039d8-4b11-4d03-b0ca-eae5dfc01b0a,0,1,9245417f-f247-47ba-a1b4-a17ec2e8776c,9245417f-f247-47ba-a1b4-a17ec2e8776c,0,1,a4b721d7-b119-47eb-80e0-7db34c83964f,a4b721d7-b119-47eb-80e0-7db34c83964f,0,1,512629d1-e8b7-4f66-b613-b8c0cb9c250b,512629d1-e8b7-4f66-b613-b8c0cb9c250b,0,1,b7cf4684-4432-4658-9c06-b315d470a3a6,b7cf4684-4432-4658-9c06-b315d470a3a6,0,1,d3bc8211-54d8-47dd-aecf-5da72b65195f,d3bc8211-54d8-47dd-aecf-5da72b65195f,0,1,33f11da8-f670-4ec3-9d40-96fce031c60f,33f11da8-f670-4ec3-9d40-96fce031c60f,0,1,97cbd5b5-5a39-418c-93b5-f9934fa1ba4e,97cbd5b5-5a39-418c-93b5-f9934fa1ba4e,0,1,f74c2d41-2433-4bed-8aef-adfeed198252,f74c2d41-2433-4bed-8aef-adfeed198252,0,1,3c2b8a8a-bfe7-4e37-9d83-55a695a06605,3c2b8a8a-bfe7-4e37-9d83-55a695a06605,0,1,56c9703a-751a-4e6c-81f4-a8756fb040e3,56c9703a-751a-4e6c-81f4-a8756fb040e3,0,1,c3a86eec-1ff5-4392-9904-91a12a2e253a,c3a86eec-1ff5-4392-9904-91a12a2e253a,0,1,f5df72a3-c71c-412b-8c3e-6329f1d3a7da,f5df72a3-c71c-412b-8c3e-6329f1d3a7da,0,1,f02b7246-dae9-4e15-b4cd-b06133664d34,f02b7246-dae9-4e15-b4cd-b06133664d34,0,1,77f20022-17ce-4e00-8a84-015238bce6f3,77f20022-17ce-4e00-8a84-015238bce6f3,0,1,3734619b-7059-4547-8b97-0b3393389d4d,3734619b-7059-4547-8b97-0b3393389d4d,0,1,a30bf95f-aabd-4da0-8287-61e08f9362fb,a30bf95f-aabd-4da0-8287-61e08f9362fb,0,1,f5a7df18-2ddb-4053-9aeb-57fc37ae557e,f5a7df18-2ddb-4053-9aeb-57fc37ae557e,0,1,4078867c-2972-47f9-bebd-935a6f1cc667,4078867c-2972-47f9-bebd-935a6f1cc667,0,1,8502fe39-c241-4be5-a313-fd887bbbdfa1,8502fe39-c241-4be5-a313-fd887bbbdfa1,0,1,67a71201-13e5-42a3-902f-fb3a59710dfb,67a71201-13e5-42a3-902f-fb3a59710dfb,0,1,3a79a951-a997-4596-ab62-ba376d67725d,3a79a951-a997-4596-ab62-ba376d67725d,0,1,dd4fe688-c113-4ac5-8114-b89cf1b0eb55,dd4fe688-c113-4ac5-8114-b89cf1b0eb55,0,1,884c28de-434f-440a-8c63-67e659c097ad,884c28de-434f-440a-8c63-67e659c097ad,0,1,92ead3b5-8c55-4e4d-bd47-009e025b22f8,92ead3b5-8c55-4e4d-bd47-009e025b22f8,0,1,50d8e365-aa58-4b60-8992-01943379d485,50d8e365-aa58-4b60-8992-01943379d485,0,1,9bb58c7c-d87d-435b-adf6-09c8f75d47b2,9bb58c7c-d87d-435b-adf6-09c8f75d47b2,0,1,b3f7f763-bea9-4f59-9450-df95e5c3d89d,b3f7f763-bea9-4f59-9450-df95e5c3d89d,0,1,9111e28e-c1c7-414b-9288-61bd06a04d04,9111e28e-c1c7-414b-9288-61bd06a04d04,0,1,bcd705ba-c9ac-4e73-94b1-7632c0f06c04,bcd705ba-c9ac-4e73-94b1-7632c0f06c04,0,1,094d5482-286d-4e1a-8888-c0452d2e5af0,094d5482-286d-4e1a-8888-c0452d2e5af0,0,1,fec102ea-a3f6-49b5-b4b8-6884b0654129,fec102ea-a3f6-49b5-b4b8-6884b0654129,0,1,184405d0-34a7-4668-9a64-d92a6a7da142,184405d0-34a7-4668-9a64-d92a6a7da142,0,1,bccf8909-6f99-44d8-9c91-688958fc95f4,bccf8909-6f99-44d8-9c91-688958fc95f4,0,1,246571fb-38c7-4da6-929d-d8b44bc3437c,246571fb-38c7-4da6-929d-d8b44bc3437c,0,1,047fd6d7-5e30-4184-a09a-6525de526cc7,047fd6d7-5e30-4184-a09a-6525de526cc7,0,1,beb44b02-5d5e-4127-aee7-e184a43a4210,beb44b02-5d5e-4127-aee7-e184a43a4210,0,1,1dedfbc2-9250-4229-a6ea-5e085f33e7c3,1dedfbc2-9250-4229-a6ea-5e085f33e7c3,0,1,e24641ed-3e92-46d7-852b-9958ab7bc520,e24641ed-3e92-46d7-852b-9958ab7bc520,0,1,bc2aa3f9-ef2c-49a5-8cd9-ddd8a8cbe19d,bc2aa3f9-ef2c-49a5-8cd9-ddd8a8cbe19d,0,1,b6ac4cd6-c68f-4464-88e9-a8d335d581c6,b6ac4cd6-c68f-4464-88e9-a8d335d581c6,0,1,2c61114f-abd7-4415-8cdf-4fe95d9fe354,2c61114f-abd7-4415-8cdf-4fe95d9fe354,0,1,abd7a766-5cc1-48db-8d29-797e9d666a78,abd7a766-5cc1-48db-8d29-797e9d666a78,0,1,1704b5e3-8e77-4df6-9223-e6e5c41a280d,1704b5e3-8e77-4df6-9223-e6e5c41a280d,0,1,62eca88f-025d-44de-b92c-46cd8bc7e4a1,62eca88f-025d-44de-b92c-46cd8bc7e4a1,0,1,b0dde395-8498-4469-9507-d290798117d7,b0dde395-8498-4469-9507-d290798117d7,0,1,999616ea-0faa-4ae2-9841-6a6997ea6694,999616ea-0faa-4ae2-9841-6a6997ea6694,0,1,c5f91669-13d8-4f0a-a054-2701078da38a,c5f91669-13d8-4f0a-a054-2701078da38a,0,1,34f9872b-e02e-4093-ba06-3cb5b8995850,34f9872b-e02e-4093-ba06-3cb5b8995850,0,1,18515c19-c9ef-4c9f-8d12-4f58ffa251e8,18515c19-c9ef-4c9f-8d12-4f58ffa251e8,0,1,3afe11f6-7424-4b41-a42f-91db33756fa3,3afe11f6-7424-4b41-a42f-91db33756fa3,0,1,94e68502-adf1-476e-be2f-8418385959fa,94e68502-adf1-476e-be2f-8418385959fa,0,1,bf80ccc5-f907-4e7f-a007-6030c7ba682e,bf80ccc5-f907-4e7f-a007-6030c7ba682e,0,1,134bbd7c-cadd-4395-b7a4-0249dfe7d0b1,134bbd7c-cadd-4395-b7a4-0249dfe7d0b1,0,1,05f1f184-50cb-47c5-b3a8-62be6a9780c1,05f1f184-50cb-47c5-b3a8-62be6a9780c1,0,1,39598414-9c1d-46ec-a534-8bd43e622e45,39598414-9c1d-46ec-a534-8bd43e622e45,0,1,b552c510-4fd4-4c16-9022-dc5babcafc52,b552c510-4fd4-4c16-9022-dc5babcafc52,0,1,58e92a42-b650-4282-a2b2-2fe2cc0cf50d,58e92a42-b650-4282-a2b2-2fe2cc0cf50d,0,1,8c1a0b0c-3618-4e66-98b8-8b9e7ca63ca2,8c1a0b0c-3618-4e66-98b8-8b9e7ca63ca2,0,1,5c874c9a-fe67-45a3-a1d3-7ec1d1c55090,5c874c9a-fe67-45a3-a1d3-7ec1d1c55090,0,1,58c3936c-4db0-45c8-a22e-b5dd49a61497,58c3936c-4db0-45c8-a22e-b5dd49a61497,0,1,9aa607bc-5870-436a-bbe1-296560393e3b,9aa607bc-5870-436a-bbe1-296560393e3b,0,1,1635be16-4861-4a7d-babc-4caff448a7f7,1635be16-4861-4a7d-babc-4caff448a7f7,0,1,9e399087-c957-4a7a-ab9d-2b689736caab,9e399087-c957-4a7a-ab9d-2b689736caab,0,1,e7542e37-a2f0-43b5-852e-4e2b24b1b71f,e7542e37-a2f0-43b5-852e-4e2b24b1b71f,0,1,3e94649c-7d69-4fb4-ada1-ae00eabf02b6,3e94649c-7d69-4fb4-ada1-ae00eabf02b6,0,1,2b7372be-af0d-464e-8d09-8172229790af,2b7372be-af0d-464e-8d09-8172229790af,0,1,d85346db-be25-4dab-a2db-647c3d40dd17,d85346db-be25-4dab-a2db-647c3d40dd17,0,1,c7bafd34-5b15-42ec-b329-0be3002775ad,c7bafd34-5b15-42ec-b329-0be3002775ad,0,1,6feb2278-9149-47f8-a0ec-eb4bd9f44716,6feb2278-9149-47f8-a0ec-eb4bd9f44716,0,1,3892c06d-28f1-4238-a929-201316cac1ed,3892c06d-28f1-4238-a929-201316cac1ed,0,1,c13dea2e-17fa-4a5f-a70f-96e623db8a6b,c13dea2e-17fa-4a5f-a70f-96e623db8a6b,0,1,c960082b-8c16-4d7b-b7fd-b1f2bfe07e0b,c960082b-8c16-4d7b-b7fd-b1f2bfe07e0b,0,1,cd6770d5-cd3c-47af-bc46-c865993adf63,cd6770d5-cd3c-47af-bc46-c865993adf63,0,1,97ec899d-a2a0-4691-83ff-25b78dd49ef6,97ec899d-a2a0-4691-83ff-25b78dd49ef6,0,1,411db885-f761-44e5-bdd1-9fdf9e741ac1,411db885-f761-44e5-bdd1-9fdf9e741ac1,0,1,9f9936fc-54a0-4812-b12d-2f8f91551440,9f9936fc-54a0-4812-b12d-2f8f91551440,0,1,a5667633-9264-4dfa-9e26-c45e96e61ae3,a5667633-9264-4dfa-9e26-c45e96e61ae3,0,1,2eeea138-481c-4fde-9e8a-709d751cc469,2eeea138-481c-4fde-9e8a-709d751cc469,0,1,43e37533-ed38-4000-a387-5749f8d9aaf3,43e37533-ed38-4000-a387-5749f8d9aaf3,0,1,e93bdb44-64b3-43d8-b15a-c561dbb91974,e93bdb44-64b3-43d8-b15a-c561dbb91974,0,1,02c5f3b2-d691-4eaf-84fd-763770e4b1cb,02c5f3b2-d691-4eaf-84fd-763770e4b1cb,0,1,845262f8-8208-4c90-98ec-c85dd5734cf0,845262f8-8208-4c90-98ec-c85dd5734cf0,0,1,ad066c0d-4f4c-48af-9cc8-bb835372150a,ad066c0d-4f4c-48af-9cc8-bb835372150a,0,1,a2145e81-239e-4267-8a43-ea3f7babe878,a2145e81-239e-4267-8a43-ea3f7babe878,0,1,3326bbcb-b277-44db-a252-2448119e8146,3326bbcb-b277-44db-a252-2448119e8146,0,1,61cac5f7-320c-4098-9078-44fadcdeb219,61cac5f7-320c-4098-9078-44fadcdeb219,0,1,304304b1-36a4-42bb-8ab9-b23b59795001,304304b1-36a4-42bb-8ab9-b23b59795001,0,1,a22d1a4f-cb7c-4bcc-b258-ecca282fb071,a22d1a4f-cb7c-4bcc-b258-ecca282fb071,0,1,e5beda2c-f4e2-4a6b-a1d0-a877eb0c9f5b,e5beda2c-f4e2-4a6b-a1d0-a877eb0c9f5b,0,1,cd454738-62dd-4f95-af33-b52750678428,cd454738-62dd-4f95-af33-b52750678428,0,1,2a479b8f-7569-43d0-8ca3-9001d6ec57f0,2a479b8f-7569-43d0-8ca3-9001d6ec57f0,0,1,e4abafc6-f859-4d96-9818-5b9bf8d66d69,e4abafc6-f859-4d96-9818-5b9bf8d66d69,0,1,535acd2c-26d2-4f32-9ae6-cc1956317c59,535acd2c-26d2-4f32-9ae6-cc1956317c59,0,1,801adeeb-8a7f-44c1-b649-a7dfffc7b65d,801adeeb-8a7f-44c1-b649-a7dfffc7b65d,0,1,ac4e0868-ba49-46b4-8872-d42483a5591f,ac4e0868-ba49-46b4-8872-d42483a5591f,0,1,45e6c4a6-1d63-4b94-a7d2-fbd3fb68061b,45e6c4a6-1d63-4b94-a7d2-fbd3fb68061b,0,1,0493dcf1-5f94-41f9-a4c7-a52e12a29068,0493dcf1-5f94-41f9-a4c7-a52e12a29068,0,1,ca4c0299-625a-4b03-be0e-36ffb45c6d08,ca4c0299-625a-4b03-be0e-36ffb45c6d08,0,1,7fa1119b-4321-4b8f-a879-1d940084145a,7fa1119b-4321-4b8f-a879-1d940084145a,0,1,5d9c0841-6ea6-48dc-a53b-9f19894750f8,5d9c0841-6ea6-48dc-a53b-9f19894750f8,0,1,86b5303b-d967-4bc6-b2da-066c5a58613f,86b5303b-d967-4bc6-b2da-066c5a58613f,0,1,853b824d-9377-475f-913e-d02bd60f5f64,853b824d-9377-475f-913e-d02bd60f5f64,0,1,0c5e261f-961e-4780-877a-06589400b88a,0c5e261f-961e-4780-877a-06589400b88a,0,1,ee1f8545-ea64-41de-a29a-2d40e15d4f16,ee1f8545-ea64-41de-a29a-2d40e15d4f16,0,1,25ba3c5d-ace1-43cd-987f-68364b9b6970,25ba3c5d-ace1-43cd-987f-68364b9b6970,0,1,b8f5019e-b53f-4508-a042-bbadda2d1fd4,b8f5019e-b53f-4508-a042-bbadda2d1fd4,0,1,b250d233-70a0-4baf-8b7d-6e1d414a11b9,b250d233-70a0-4baf-8b7d-6e1d414a11b9,0,1,4599ef83-5f1e-44af-ae0c-67988656a99e,4599ef83-5f1e-44af-ae0c-67988656a99e,0,1,acb0d7eb-2ed9-4419-b79d-7dc661d70c30,acb0d7eb-2ed9-4419-b79d-7dc661d70c30,0,1,e1b94dcf-ec37-4b2d-a7af-120eeee40944,e1b94dcf-ec37-4b2d-a7af-120eeee40944,0,1,7d2a37b1-a1a0-435a-846a-95e255655044,7d2a37b1-a1a0-435a-846a-95e255655044,0,1,109db64c-00dc-490e-99a5-4430d9344e99,109db64c-00dc-490e-99a5-4430d9344e99,0,1,85837a55-fed5-4b7b-a622-30d728b9a677,85837a55-fed5-4b7b-a622-30d728b9a677,0,1,0fd79cdb-dc7a-40ca-a3bc-2c7a7b4691bb,0fd79cdb-dc7a-40ca-a3bc-2c7a7b4691bb,0,1,6ede8b5c-7df0-44a5-9136-8109bbd8b5a9,6ede8b5c-7df0-44a5-9136-8109bbd8b5a9,0,1,325bacdd-793f-47d8-b987-57e9d5f2782b,325bacdd-793f-47d8-b987-57e9d5f2782b,0,1,da9821c3-4b16-48b7-9088-d3cf8ac536a6,da9821c3-4b16-48b7-9088-d3cf8ac536a6,0,1,fb36c775-1124-4ba6-8af8-133bf66fcb54,fb36c775-1124-4ba6-8af8-133bf66fcb54,0,1,51f9aff4-71da-4b1b-b48b-04122a17d855,51f9aff4-71da-4b1b-b48b-04122a17d855,0,1,d5142574-a040-4dd0-a482-cdc61c1d86ab,d5142574-a040-4dd0-a482-cdc61c1d86ab,0,1,62957889-503f-4923-a372-29776dc3b5e5,62957889-503f-4923-a372-29776dc3b5e5,0,1,778e79ee-eb1a-4d52-8a31-58e781c78fe4,778e79ee-eb1a-4d52-8a31-58e781c78fe4,0,1,90385850-d37b-4b2e-ac87-95c17f32197c,90385850-d37b-4b2e-ac87-95c17f32197c,0,1,f480ac52-e2f1-4ed0-a0b1-20a622f77302,f480ac52-e2f1-4ed0-a0b1-20a622f77302,0,1,5c63e7cd-ecdb-45ae-a589-f6c38f5a8e76,5c63e7cd-ecdb-45ae-a589-f6c38f5a8e76,0,1,b9b0fbdc-8fda-46d1-bb3e-561a03604971,b9b0fbdc-8fda-46d1-bb3e-561a03604971,0,1,eadfdbe3-bc85-4084-aef6-4cfd258ee6f1,eadfdbe3-bc85-4084-aef6-4cfd258ee6f1,0,1,672c2936-9771-4e32-a970-7ac7f12a21e8,672c2936-9771-4e32-a970-7ac7f12a21e8,0,1,73afaad8-dfa9-43e3-bdaf-543c3545d788,73afaad8-dfa9-43e3-bdaf-543c3545d788,0,1,c264441d-4805-4968-baa2-37b8970049c7,c264441d-4805-4968-baa2-37b8970049c7,0,1,4f0bda80-2246-43be-95f8-ae8480682cd5,4f0bda80-2246-43be-95f8-ae8480682cd5,0,1,ac4fa2a4-93a1-4aa6-986a-5f576457fc8a,ac4fa2a4-93a1-4aa6-986a-5f576457fc8a,0,1,6f683f46-9eef-4e78-bc2f-7174238bf53c,6f683f46-9eef-4e78-bc2f-7174238bf53c,0,1,7d1ed38b-98cf-4a0e-a605-680bb580d904,7d1ed38b-98cf-4a0e-a605-680bb580d904,0,1,b769eda0-11de-401c-a68b-4fce4555d4fc,b769eda0-11de-401c-a68b-4fce4555d4fc,0,1,fd7a668f-3099-4e15-956a-92c6295dd4d5,fd7a668f-3099-4e15-956a-92c6295dd4d5,0,1,afcbd830-ec5f-4865-a176-ea3014dff908,afcbd830-ec5f-4865-a176-ea3014dff908,0,1,dc5fc801-14e4-42e8-b396-76eb30b69eea,dc5fc801-14e4-42e8-b396-76eb30b69eea,0,1,f36150de-33af-4410-8a4c-8c9f4b545793,f36150de-33af-4410-8a4c-8c9f4b545793,0,1,62f97480-7d4a-48f3-9d1d-612909b242c9,62f97480-7d4a-48f3-9d1d-612909b242c9,0,1,2b4f6e2f-6cc4-4c7c-98a6-786f3793366b,2b4f6e2f-6cc4-4c7c-98a6-786f3793366b,0,1,3068be84-a401-4701-8ac9-411fae130f84,3068be84-a401-4701-8ac9-411fae130f84,0,1,957394a7-e5b8-47fc-8680-1e71efe2be7d,957394a7-e5b8-47fc-8680-1e71efe2be7d,0,1,ba49a9e4-6ec1-43ff-92cd-9dbf221bbf09,ba49a9e4-6ec1-43ff-92cd-9dbf221bbf09,0,1,4f25ef45-c8d9-401d-b0e8-2217ac310f04,4f25ef45-c8d9-401d-b0e8-2217ac310f04,0,1,504ca240-b5ae-433e-ae5f-d818263eea23,504ca240-b5ae-433e-ae5f-d818263eea23,0,1,32461819-9437-417d-8d1e-851c9a2dcee2,32461819-9437-417d-8d1e-851c9a2dcee2,0,1,74228950-8a4b-4dd6-a053-8650de202521,74228950-8a4b-4dd6-a053-8650de202521,0,1,6b9ce91e-08b9-4972-9878-1724c67b68ec,6b9ce91e-08b9-4972-9878-1724c67b68ec,0,1,640814f2-6082-475e-8006-25fd5b24afdb,640814f2-6082-475e-8006-25fd5b24afdb,0,1,6fcd2a3a-4d66-40e3-bde0-5c274b43783f,6fcd2a3a-4d66-40e3-bde0-5c274b43783f,0,1,569047c2-0879-4fba-a814-44812d21043b,569047c2-0879-4fba-a814-44812d21043b,0,1,f1b66ea8-262d-4b38-a039-b83a843f6ee8,f1b66ea8-262d-4b38-a039-b83a843f6ee8,0,1,bcae6e05-f1fd-413e-9eef-2e1cee42a962,bcae6e05-f1fd-413e-9eef-2e1cee42a962,0,1,40da1bca-ebb3-4c64-bf54-1f37b71d47b6,40da1bca-ebb3-4c64-bf54-1f37b71d47b6,0,1,778b4c8f-7a1e-4b4b-9f68-12cbf52bf195,778b4c8f-7a1e-4b4b-9f68-12cbf52bf195,0,1,91562fe8-e630-4bcb-a14e-c0e1e129141a,91562fe8-e630-4bcb-a14e-c0e1e129141a,0,1,c261abfd-3828-47b5-aa32-dfdd3a1636ad,c261abfd-3828-47b5-aa32-dfdd3a1636ad,0,1,e71f8f26-addf-4b12-a244-11610ed03bba,e71f8f26-addf-4b12-a244-11610ed03bba,0,1,e9aa6dab-0d96-42ce-9bd6-b8b10d755f8c,e9aa6dab-0d96-42ce-9bd6-b8b10d755f8c,0,1,84da1ef8-1784-4dfc-b17a-7728aa7ff62a,84da1ef8-1784-4dfc-b17a-7728aa7ff62a,0,1,9155c95b-6afb-41bb-bd0b-d37e503fc163,9155c95b-6afb-41bb-bd0b-d37e503fc163,0,1,d917c19e-be15-41cc-9c8a-a97c8de85309,d917c19e-be15-41cc-9c8a-a97c8de85309,0,1,5e33e655-2847-4237-87ff-74775fd36756,5e33e655-2847-4237-87ff-74775fd36756,0,1,f0907d81-656e-4dfb-81d8-14a8847cb38a,f0907d81-656e-4dfb-81d8-14a8847cb38a,0,1,47907538-9357-4885-8b50-17f2e16c260f,47907538-9357-4885-8b50-17f2e16c260f,0,1,17e1840f-fef3-4f17-8476-273e6af24cb4,17e1840f-fef3-4f17-8476-273e6af24cb4,0,1,a64566fa-b706-49bc-8277-4531145c400e,a64566fa-b706-49bc-8277-4531145c400e,0,1,a8f32b13-249c-4ce6-a521-f06a87f2e670,a8f32b13-249c-4ce6-a521-f06a87f2e670,0,1,815775e4-cfb7-495b-87c4-d134b90d93d4,815775e4-cfb7-495b-87c4-d134b90d93d4,0,1,e867f2f1-0550-4d15-9e40-ba36c9aabfbd,e867f2f1-0550-4d15-9e40-ba36c9aabfbd,0,1,8bdbb9ef-3a91-4374-b3c5-9447005bb1b7,8bdbb9ef-3a91-4374-b3c5-9447005bb1b7,0,1,7a27b378-89ac-4cad-8c69-a0cd14812d7e,7a27b378-89ac-4cad-8c69-a0cd14812d7e,0,1,d2433a11-8e1d-4e4c-966d-37cde6283f72,d2433a11-8e1d-4e4c-966d-37cde6283f72,0,1,59eb5919-3c33-48bf-b322-ec78018e4142,59eb5919-3c33-48bf-b322-ec78018e4142,0,1,63f308a5-b955-48a5-8052-50c5bede65d0,63f308a5-b955-48a5-8052-50c5bede65d0,0,1,1b614b97-5c1d-497a-9574-40114059f836,1b614b97-5c1d-497a-9574-40114059f836,0,1,477dfea4-e401-4cf0-b0a8-2df7c3836c58,477dfea4-e401-4cf0-b0a8-2df7c3836c58,0,1,294c000f-6979-4ed1-bbc7-7402facd9185,294c000f-6979-4ed1-bbc7-7402facd9185,0,1,db607fbc-f785-47d5-9550-577424aa3fe9,db607fbc-f785-47d5-9550-577424aa3fe9,0,1,b7111ddf-a623-4bae-90aa-636148492ca2,b7111ddf-a623-4bae-90aa-636148492ca2,0,1,905d9dcd-5793-4362-8fe8-2edce8c35e32,905d9dcd-5793-4362-8fe8-2edce8c35e32,0,1,a96cb6fd-54e0-4514-9210-7f4636acd336,a96cb6fd-54e0-4514-9210-7f4636acd336,0,1,3580e7a7-95d1-4a8e-bc12-a1449fe03757,3580e7a7-95d1-4a8e-bc12-a1449fe03757,0,1,13759790-6c70-4323-9321-a68b90c51663,13759790-6c70-4323-9321-a68b90c51663,0,1,d9704b20-c29c-4e7f-b777-0ac9080a5631,d9704b20-c29c-4e7f-b777-0ac9080a5631,0,1,c1372891-0f55-4868-ab97-906eff52be0e,c1372891-0f55-4868-ab97-906eff52be0e,0,1,33e96bda-1708-4ee4-8d4d-3b919bda3e38,33e96bda-1708-4ee4-8d4d-3b919bda3e38,0,1,53fb35a7-44ab-42e7-8dba-6fa08bf5ba2c,53fb35a7-44ab-42e7-8dba-6fa08bf5ba2c,0,1,93fcaa62-2a19-468b-9128-c7930583fbfd,93fcaa62-2a19-468b-9128-c7930583fbfd,0,1,2d885109-4c96-41c0-a996-785bfd793c2d,2d885109-4c96-41c0-a996-785bfd793c2d,0,1,e870a1bd-0c08-4d1e-832a-357922983c19,e870a1bd-0c08-4d1e-832a-357922983c19,0,1,9f71aeac-f889-40dc-91bd-d670da4efd2b,9f71aeac-f889-40dc-91bd-d670da4efd2b,0,1,62f8a9b2-9e56-4d5c-a7e2-a85f5b27a5b7,62f8a9b2-9e56-4d5c-a7e2-a85f5b27a5b7,0,1,614ef0bd-3298-408b-bf71-37df8ee60702,614ef0bd-3298-408b-bf71-37df8ee60702,0,1,26ff1be6-f72a-456a-9dce-302029752603,26ff1be6-f72a-456a-9dce-302029752603,0,1,db850a08-0c99-4a57-9b04-38be64bd38fb,db850a08-0c99-4a57-9b04-38be64bd38fb,0,1,abeca127-5ae9-46af-a5e8-d6438fd68367,abeca127-5ae9-46af-a5e8-d6438fd68367,0,1,bce81631-9f6d-42b3-b4b6-2199afb08f2f,bce81631-9f6d-42b3-b4b6-2199afb08f2f,0,1,67d6878f-3e47-4142-8f98-c5a207f0b8a8,67d6878f-3e47-4142-8f98-c5a207f0b8a8,0,1,7f4b872f-0e50-49dd-984d-f5fc3ac3f2f0,7f4b872f-0e50-49dd-984d-f5fc3ac3f2f0,0,1,68636657-4d46-4c2a-9b2f-11521a55dfb4,68636657-4d46-4c2a-9b2f-11521a55dfb4,0,1,18a83f43-dc84-4f8a-9580-681b19f571c4,18a83f43-dc84-4f8a-9580-681b19f571c4,0,1,01c588b0-d0ce-4978-b04d-084e6a00fcc7,01c588b0-d0ce-4978-b04d-084e6a00fcc7,0,1,a23642d9-8c4f-44a5-8865-bfb286e47c55,a23642d9-8c4f-44a5-8865-bfb286e47c55,0,1,7b37e038-dcef-41e1-b6e7-ed73c6958415,7b37e038-dcef-41e1-b6e7-ed73c6958415,0,1,24df2d14-5ebf-4ded-ba14-5daee7a0c536,24df2d14-5ebf-4ded-ba14-5daee7a0c536,0,1,13d6e2e9-b268-4c1b-8b8b-30c5296cfe4c,13d6e2e9-b268-4c1b-8b8b-30c5296cfe4c,0,1,03bb028a-ee8c-411e-8382-653046f803c6,03bb028a-ee8c-411e-8382-653046f803c6,0,1,c4fa80ca-32d6-4a44-9fe2-7ffd67e1cb30,c4fa80ca-32d6-4a44-9fe2-7ffd67e1cb30,0,1,8aa73dfd-41ac-4f79-bf73-cd2da51b1232,8aa73dfd-41ac-4f79-bf73-cd2da51b1232,0,1,38d5ed93-133b-44fe-827a-69a6cfc0461d,38d5ed93-133b-44fe-827a-69a6cfc0461d,0,1,cae8a6f2-bbe9-4b73-b839-9bf8e5e2818d,cae8a6f2-bbe9-4b73-b839-9bf8e5e2818d,0,1,0a79ee40-e6d6-4dbf-8378-98c2ec1e8ef9,0a79ee40-e6d6-4dbf-8378-98c2ec1e8ef9,0,1,5148d263-de26-4c92-b090-ae59f42dfb05,5148d263-de26-4c92-b090-ae59f42dfb05,0,1,dbefe81f-85cf-4d84-9600-b359598c2543,dbefe81f-85cf-4d84-9600-b359598c2543,0,1,1a624a06-93b8-4d1f-8c14-2061e1e7927c,1a624a06-93b8-4d1f-8c14-2061e1e7927c,0,1,4ad54ca8-8e4a-4a35-9537-0395851fcdfb,4ad54ca8-8e4a-4a35-9537-0395851fcdfb,0,1,3e427c09-79ed-45f7-b4c9-d9aa7ccc01b2,3e427c09-79ed-45f7-b4c9-d9aa7ccc01b2,0,1,1a4dd1f5-c2d6-4e06-b428-ab7870810bf3,1a4dd1f5-c2d6-4e06-b428-ab7870810bf3,0,1,d5967e0f-03cd-4190-a702-7e9290eae1eb,d5967e0f-03cd-4190-a702-7e9290eae1eb,0,1,78fdbce8-8479-4edd-89c0-1bbaf8ffd482,78fdbce8-8479-4edd-89c0-1bbaf8ffd482,0,1,8eb18de5-8283-4d0c-bb11-b882e78181d5,8eb18de5-8283-4d0c-bb11-b882e78181d5,0,1,27b27cc5-d1ad-4a2a-bcf4-ec2ebb3eba43,27b27cc5-d1ad-4a2a-bcf4-ec2ebb3eba43,0,1,7059b117-714c-4710-aebe-76f88c4d41d5,7059b117-714c-4710-aebe-76f88c4d41d5,0,1,ea050453-4947-40dc-aa2a-503ddd1a235a,ea050453-4947-40dc-aa2a-503ddd1a235a,0,1,37d0e6d4-702e-46f5-ae87-4d393fa0c701,37d0e6d4-702e-46f5-ae87-4d393fa0c701,0,1,1e963c1e-f914-46e1-81d3-90d126fc6f8d,1e963c1e-f914-46e1-81d3-90d126fc6f8d,0,1,3a62d88e-9298-42c0-bd87-c749ecd01d19,3a62d88e-9298-42c0-bd87-c749ecd01d19,0,1,abbf064e-c6ea-4712-930b-a9fef42e0ee1,abbf064e-c6ea-4712-930b-a9fef42e0ee1,0,1,fc13dd80-ce44-4ed1-a9d7-dae44602b954,fc13dd80-ce44-4ed1-a9d7-dae44602b954,0,1,a3fe224e-c3ef-4e30-90e4-c4ed5eb11824,a3fe224e-c3ef-4e30-90e4-c4ed5eb11824,0,1,433b23a1-a863-4775-b2f2-1384e8f3cbbb,433b23a1-a863-4775-b2f2-1384e8f3cbbb,0,1,a1677c47-b9a4-427a-972d-9bb2293445b6,a1677c47-b9a4-427a-972d-9bb2293445b6,0,1,e4a328c0-e73b-465d-ae36-38e5a71690fa,e4a328c0-e73b-465d-ae36-38e5a71690fa,0,1,bf66612b-aec4-414b-bee6-9bcab145c7cc,bf66612b-aec4-414b-bee6-9bcab145c7cc,0,1,811f356f-554a-4a63-90b6-dedb5fec7c05,811f356f-554a-4a63-90b6-dedb5fec7c05,0,1,85bebd81-a355-4010-889b-cff6f72dafcb,85bebd81-a355-4010-889b-cff6f72dafcb,0,1,49521f36-fd1b-47dd-81cc-48b6fb651e22,49521f36-fd1b-47dd-81cc-48b6fb651e22,0,1,1491cc2a-b3be-4bcc-a181-ce68d4b5d4cb,1491cc2a-b3be-4bcc-a181-ce68d4b5d4cb,0,1,bc946e21-53bb-4332-8c63-7b0aa78826eb,bc946e21-53bb-4332-8c63-7b0aa78826eb,0,1,4be2bdad-9a43-4593-acbc-a02e9144a89f,4be2bdad-9a43-4593-acbc-a02e9144a89f,0,1,64a86d5d-f925-45ee-82da-76df1cc20729,64a86d5d-f925-45ee-82da-76df1cc20729,0,1,eb4455f2-a5a0-44fb-8302-7312bc32df66,eb4455f2-a5a0-44fb-8302-7312bc32df66,0,1,cd6d2ab5-8e5c-4db3-8c8c-0526046a9b68,cd6d2ab5-8e5c-4db3-8c8c-0526046a9b68,0,1,9f20e59e-7db8-466f-b965-7045fc3f1489,9f20e59e-7db8-466f-b965-7045fc3f1489,0,1,cb057756-d3f7-4c50-a9d0-bac9ca2abd46,cb057756-d3f7-4c50-a9d0-bac9ca2abd46,0,1,89ac3d39-1915-4e67-a4e4-5a67a155cb75,89ac3d39-1915-4e67-a4e4-5a67a155cb75,0,1,d27b637d-5a51-49ff-bf73-343891534586,d27b637d-5a51-49ff-bf73-343891534586,0,1,b5a073a2-54e2-47c9-b533-f75fd2c9f343,b5a073a2-54e2-47c9-b533-f75fd2c9f343,0,1,0c8571be-f9b6-4292-add9-980cfe7fa2ec,0c8571be-f9b6-4292-add9-980cfe7fa2ec,0,1,989b8ccd-bc05-48c1-9969-b3733028b65f,989b8ccd-bc05-48c1-9969-b3733028b65f,0,1,6c70b13d-f9d0-459f-8d38-c01c11f356f1,6c70b13d-f9d0-459f-8d38-c01c11f356f1,0,1,45ca19df-90f3-4143-a659-bc0cb97efee9,45ca19df-90f3-4143-a659-bc0cb97efee9,0,1,bbaed1bd-0eb7-4f2b-b844-ab79c1d0a091,bbaed1bd-0eb7-4f2b-b844-ab79c1d0a091,0,1,2e7fbea4-57ac-4633-bb39-8725e57bc7ba,2e7fbea4-57ac-4633-bb39-8725e57bc7ba,0,1,83ae9b22-20ff-4e94-9282-19daf2274328,83ae9b22-20ff-4e94-9282-19daf2274328,0,1,dcad5d84-6643-4f0b-9e6e-73fe343db4a7,dcad5d84-6643-4f0b-9e6e-73fe343db4a7,0,1,e1ca1374-6dad-46d3-bb72-b67f3e6b1809,e1ca1374-6dad-46d3-bb72-b67f3e6b1809,0,1,a92b2b70-7e69-49d1-b921-c9d1b0718f94,a92b2b70-7e69-49d1-b921-c9d1b0718f94,0,1,d57a3300-0f9f-4fe5-b627-01c96b723053,d57a3300-0f9f-4fe5-b627-01c96b723053,0,1,19f690a3-d27b-43c1-94b7-585fc628da05,19f690a3-d27b-43c1-94b7-585fc628da05,0,1,d375fac5-098c-42b5-a0bd-9a4ae7516ada,d375fac5-098c-42b5-a0bd-9a4ae7516ada,0,1,29034f3e-d2eb-44e0-ac85-f2ffaf14eb90,29034f3e-d2eb-44e0-ac85-f2ffaf14eb90,0,1,ce65563d-03dc-46d8-96d4-c2d4ae2a2960,ce65563d-03dc-46d8-96d4-c2d4ae2a2960,0,1,5079f17e-dfd6-43f4-83fa-6ac408e5bd3b,5079f17e-dfd6-43f4-83fa-6ac408e5bd3b,0,1,7a4346c3-f1aa-4ce0-886e-76cd9abf563c,7a4346c3-f1aa-4ce0-886e-76cd9abf563c,0,1,cf783265-a4cb-436f-963a-1ff8220ae246,cf783265-a4cb-436f-963a-1ff8220ae246,0,1,3560f949-48f9-4fca-9fe2-81efc1ec0eee,3560f949-48f9-4fca-9fe2-81efc1ec0eee,0,1,662078f0-b75d-4c44-896f-7b7f74fd1ed4,662078f0-b75d-4c44-896f-7b7f74fd1ed4,0,1,4fa11304-fbd4-4c90-909d-5024283a6868,4fa11304-fbd4-4c90-909d-5024283a6868,0,1,207290c2-5221-48ad-99aa-bb0f7955df3f,207290c2-5221-48ad-99aa-bb0f7955df3f,0,1,162137ef-dea2-4ace-9e67-897dad0e7c3d,162137ef-dea2-4ace-9e67-897dad0e7c3d,0,1,d91a016e-cca9-4976-9c53-2c96fa95cf1a,d91a016e-cca9-4976-9c53-2c96fa95cf1a,0,1,012fb2f1-1c15-4800-8968-78a90c2a1348,012fb2f1-1c15-4800-8968-78a90c2a1348,0,1,a29a36aa-3c90-4be9-8ffc-20237721d1d0,a29a36aa-3c90-4be9-8ffc-20237721d1d0,0,1,aec8f9e6-d177-45f5-ba55-2d662428c2ae,aec8f9e6-d177-45f5-ba55-2d662428c2ae,0,1,b0bf8af5-d824-459c-bc40-17495406af3c,b0bf8af5-d824-459c-bc40-17495406af3c,0,1,7dfdd08b-7cd9-480c-829d-97f5e7152eec,7dfdd08b-7cd9-480c-829d-97f5e7152eec,0,1,64752b64-80ae-4537-986a-d61423dc546b,64752b64-80ae-4537-986a-d61423dc546b,0,1,2c37e123-ea35-4501-93e1-2fa295444bec,2c37e123-ea35-4501-93e1-2fa295444bec,0,1,c8bd3ac8-3b49-46bb-aadd-7270ad2868fc,c8bd3ac8-3b49-46bb-aadd-7270ad2868fc,0,1,a997a430-3ea8-4fde-9f53-7b507a04c215,a997a430-3ea8-4fde-9f53-7b507a04c215,0,1,f648e19d-026b-4fa7-8e70-1866b27b94f8,f648e19d-026b-4fa7-8e70-1866b27b94f8,0,1,d32081fc-47d3-4e66-837e-705c94ba8ca8,d32081fc-47d3-4e66-837e-705c94ba8ca8,0,1,69c207c2-7699-4467-b127-286ecd6d0f29,69c207c2-7699-4467-b127-286ecd6d0f29,0,1,e33df42d-4c64-4475-8294-6b05ecdb4e02,e33df42d-4c64-4475-8294-6b05ecdb4e02,0,1,6094a0ed-2051-4649-ad75-dfeb389d3cbb,6094a0ed-2051-4649-ad75-dfeb389d3cbb,0,1,6944a7e2-b9a1-492f-a6f2-9bf31d97ec78,6944a7e2-b9a1-492f-a6f2-9bf31d97ec78,0,1,f3750ea4-5f9e-4ab3-9495-3f182ecff407,f3750ea4-5f9e-4ab3-9495-3f182ecff407,0,1,14002d51-87d4-4647-92ef-a9b1935cb666,14002d51-87d4-4647-92ef-a9b1935cb666,0,1,e941a39d-1f3c-4e6e-af17-75f92a15dd40,e941a39d-1f3c-4e6e-af17-75f92a15dd40,0,1,d9bbedcb-4872-4183-83c2-6c2aae9634b0,d9bbedcb-4872-4183-83c2-6c2aae9634b0,0,1,72c695c3-66f6-4aa8-8a39-737ec6967a1d,72c695c3-66f6-4aa8-8a39-737ec6967a1d,0,1,2beef1e0-7a59-407e-b454-ee2ec38ca4b3,2beef1e0-7a59-407e-b454-ee2ec38ca4b3,0,1,b57a1d6f-8375-4d57-a2c1-f53e25318ddb,b57a1d6f-8375-4d57-a2c1-f53e25318ddb,0,1,d5d11480-d5c7-4569-80c1-f872655ff084,d5d11480-d5c7-4569-80c1-f872655ff084,0,1,b1e45d36-08e9-430e-976b-03e6e3320c6a,b1e45d36-08e9-430e-976b-03e6e3320c6a,0,1,b5384eb7-40e4-4437-b96b-eab9b7b5b8f2,b5384eb7-40e4-4437-b96b-eab9b7b5b8f2,0,1,8e21374f-5a65-406c-856d-2040607da4bc,8e21374f-5a65-406c-856d-2040607da4bc,0,1,1b63cbbb-77b1-4e78-a4c7-ddea8ea7294d,1b63cbbb-77b1-4e78-a4c7-ddea8ea7294d,0,1,3e5f5167-8978-4191-b0f6-6a262b848b95,3e5f5167-8978-4191-b0f6-6a262b848b95,0,1,ae3aef9e-df3b-4ebc-912d-2bc581063745,ae3aef9e-df3b-4ebc-912d-2bc581063745,0,1,5c4ecf15-b92d-4610-b2bb-f2331c5c7528,5c4ecf15-b92d-4610-b2bb-f2331c5c7528,0,1,a8c09e65-6e10-4772-b264-6ead83d52fe3,a8c09e65-6e10-4772-b264-6ead83d52fe3,0,1,256618cc-0956-4cda-9691-e4ced68a791f,256618cc-0956-4cda-9691-e4ced68a791f,0,1,e20593fd-b3e3-41d2-8c8d-97b5d6148fa4,e20593fd-b3e3-41d2-8c8d-97b5d6148fa4,0,1,4b9771a7-b924-4e61-8468-4633e3c54706,4b9771a7-b924-4e61-8468-4633e3c54706,0,1,bc846fc8-3c67-45f8-9c5c-69bf1190baf9,bc846fc8-3c67-45f8-9c5c-69bf1190baf9,0,1,667de710-cee5-4a97-8434-641d199f3b68,667de710-cee5-4a97-8434-641d199f3b68,0,1,e9a2320b-71a1-4974-8b5a-1990062ec7df,e9a2320b-71a1-4974-8b5a-1990062ec7df,0,1,2e459a7c-c448-4db4-ae21-e59646527030,2e459a7c-c448-4db4-ae21-e59646527030,0,1,891194d9-9f02-4b22-89cd-941181c83ecb,891194d9-9f02-4b22-89cd-941181c83ecb,0,1,a4d3b738-9ae3-46a9-ac21-7ac3d081c727,a4d3b738-9ae3-46a9-ac21-7ac3d081c727,0,1,f6e85eeb-d81b-4526-9a33-ab77bd447236,f6e85eeb-d81b-4526-9a33-ab77bd447236,0,1,470e37fe-d149-4007-b397-12fc84f93041,470e37fe-d149-4007-b397-12fc84f93041,0,1,f8d9068d-8a4e-4b23-b5ca-5b9ddce1f60f,f8d9068d-8a4e-4b23-b5ca-5b9ddce1f60f,0,1,7175cfa0-885c-4807-98ec-af255dcd55d9,7175cfa0-885c-4807-98ec-af255dcd55d9,0,1,1773ff66-ebe4-46e1-b505-d07d87c7fe3e,1773ff66-ebe4-46e1-b505-d07d87c7fe3e,0,1,f5b66759-8102-4cba-a3fd-ee96db5bc809,f5b66759-8102-4cba-a3fd-ee96db5bc809,0,1,6c205eae-9113-46c1-a245-25d29173646e,6c205eae-9113-46c1-a245-25d29173646e,0,1,4cc4aa90-49fb-4602-9f9c-d4d47d223988,4cc4aa90-49fb-4602-9f9c-d4d47d223988,0,1,e0227e4b-be22-4614-8980-5d573fae705d,e0227e4b-be22-4614-8980-5d573fae705d,0,1,66ef1631-277b-4c22-99d7-1434b4dbbb3f,66ef1631-277b-4c22-99d7-1434b4dbbb3f,0,1,7cfa5a37-b9f8-43e4-ae33-e3a7251dd052,7cfa5a37-b9f8-43e4-ae33-e3a7251dd052,0,1,2f8a5b9d-ab86-492b-85d1-5a28535b2ebc,2f8a5b9d-ab86-492b-85d1-5a28535b2ebc,0,1,898535ff-50cd-464a-aadc-5e4f9de15b04,898535ff-50cd-464a-aadc-5e4f9de15b04,0,1,6a25c089-38e8-49ae-b20a-d5f91bb5e1fd,6a25c089-38e8-49ae-b20a-d5f91bb5e1fd,0,1,737f6f1b-9ffc-4916-b378-7321eab1f886,737f6f1b-9ffc-4916-b378-7321eab1f886,0,1,01dedf5b-2cce-4d24-81ea-2e3af82f5794,01dedf5b-2cce-4d24-81ea-2e3af82f5794,0,1,385e209d-65aa-43b1-8591-f92544882740,385e209d-65aa-43b1-8591-f92544882740,0,1,8381bc76-0e0f-4196-9911-ec05730cb1c9,8381bc76-0e0f-4196-9911-ec05730cb1c9,0,1,c224e520-7204-4f4a-aac9-b6221ea9ce44,c224e520-7204-4f4a-aac9-b6221ea9ce44,0,1,771a1900-46be-49fe-a02d-584780de8363,771a1900-46be-49fe-a02d-584780de8363,0,1,f81b1f2d-6fde-4861-8fee-1dbe6acf3985,f81b1f2d-6fde-4861-8fee-1dbe6acf3985,0,1,b62eecf6-6ee3-4a70-a4d6-3f064ae35c43,b62eecf6-6ee3-4a70-a4d6-3f064ae35c43,0,1,9bf2525c-e8fc-44e6-ac14-7df3208dbb0f,9bf2525c-e8fc-44e6-ac14-7df3208dbb0f,0,1,827720ed-a9ec-4573-a91b-71d7a3e02c2a,827720ed-a9ec-4573-a91b-71d7a3e02c2a,0,1,a2faa3f8-5064-4fbf-a90e-26d15c021cd3,a2faa3f8-5064-4fbf-a90e-26d15c021cd3,0,1,527ea8ca-e723-454a-8e9e-f2e7a38e62ee,527ea8ca-e723-454a-8e9e-f2e7a38e62ee,0,1,ef257b20-da10-4cda-8b9d-7de2d68a2f71,ef257b20-da10-4cda-8b9d-7de2d68a2f71,0,1,de0d41b7-acc0-4ebc-8933-d6b5ad351860,de0d41b7-acc0-4ebc-8933-d6b5ad351860,0,1,9ef5dd5e-1f26-4187-90a0-a3ac7aaabc1d,9ef5dd5e-1f26-4187-90a0-a3ac7aaabc1d,0,1,1a354069-07ea-40e0-bbac-e1b6232750c2,1a354069-07ea-40e0-bbac-e1b6232750c2,0,1,df31548b-0b8e-412b-999a-761970ae3c23,df31548b-0b8e-412b-999a-761970ae3c23,0,1,05135747-43e7-4b61-bc30-57b3289ea923,05135747-43e7-4b61-bc30-57b3289ea923,0,1,6d63728d-3384-4131-b890-1b82d14a04b7,6d63728d-3384-4131-b890-1b82d14a04b7,0,1,f4554046-493e-4960-94df-0a8b9d02f474,f4554046-493e-4960-94df-0a8b9d02f474,0,1,06abad33-2d69-4e8b-a16c-8aa0d4422d5a,06abad33-2d69-4e8b-a16c-8aa0d4422d5a,0,1,9222a6c0-b785-4811-bfb6-44ac44a55925,9222a6c0-b785-4811-bfb6-44ac44a55925,0,1,ea84021d-2431-44ad-a446-f1fb979c9e96,ea84021d-2431-44ad-a446-f1fb979c9e96,0,1,d86acdeb-fa70-4d1c-bd0c-1b4ea30c03dd,d86acdeb-fa70-4d1c-bd0c-1b4ea30c03dd,0,1,8fa21575-177f-4b7c-94b5-dfeefe737cb4,8fa21575-177f-4b7c-94b5-dfeefe737cb4,0,1,4a749e8c-cb35-4bc4-9b31-fb5bc0eab474,4a749e8c-cb35-4bc4-9b31-fb5bc0eab474,0,1,da4a0c05-2285-434b-b7f8-83b2a0d7f23d,da4a0c05-2285-434b-b7f8-83b2a0d7f23d,0,1,8afa9a0e-04c1-4cac-82bb-6767cc0594d9,8afa9a0e-04c1-4cac-82bb-6767cc0594d9,0,1,ecbe625a-55eb-437a-8dee-33fb034d4c0d,ecbe625a-55eb-437a-8dee-33fb034d4c0d,0,1,5d4cefac-5dc4-4d73-8b4b-900a8464fbb2,5d4cefac-5dc4-4d73-8b4b-900a8464fbb2,0,1,84796b00-79db-42ba-94d0-5bf543e09cd6,84796b00-79db-42ba-94d0-5bf543e09cd6,0,1,948b10b3-0d7c-4dca-8816-75eb86e7881b,948b10b3-0d7c-4dca-8816-75eb86e7881b,0,1,9de91b5a-98e4-414b-b650-b669b0159b49,9de91b5a-98e4-414b-b650-b669b0159b49,0,1,840dc727-288a-4bf2-8b1a-47629d28229c,840dc727-288a-4bf2-8b1a-47629d28229c,0,1,314ac8ca-8845-40c2-b844-91beb05fb601,314ac8ca-8845-40c2-b844-91beb05fb601,0,1,3de3948d-40ff-4e0d-8445-9bf49c916161,3de3948d-40ff-4e0d-8445-9bf49c916161,0,1,37ae1946-9436-47ef-8b8c-17ed0a24971c,37ae1946-9436-47ef-8b8c-17ed0a24971c,0,1,d844d861-fbe9-4391-89e3-00e505b33b33,d844d861-fbe9-4391-89e3-00e505b33b33,0,1,c0688817-fd73-4ead-b9dd-ec966780a2c2,c0688817-fd73-4ead-b9dd-ec966780a2c2,0,1,b1fbfbfe-766f-4018-9491-507748193808,b1fbfbfe-766f-4018-9491-507748193808,0,1,e55dfadb-8e12-4808-ad90-e891a4644548,e55dfadb-8e12-4808-ad90-e891a4644548,0,1,a792b3dc-ac80-492b-bd94-83eb0438ba9f,a792b3dc-ac80-492b-bd94-83eb0438ba9f,0,1,73a093ea-1927-483b-b6f5-8f0cbd253753,73a093ea-1927-483b-b6f5-8f0cbd253753,0,1,345f04c0-0274-4e79-b523-f1fa3cf0d92a,345f04c0-0274-4e79-b523-f1fa3cf0d92a,0,1,f3a14787-de1b-4b65-8cb1-bc33a785821c,f3a14787-de1b-4b65-8cb1-bc33a785821c,0,1,b9ba3ce3-9059-4135-9d31-725f01907431,b9ba3ce3-9059-4135-9d31-725f01907431,0,1,4d2b3767-7c96-44a6-bb1b-ab74b103b90e,4d2b3767-7c96-44a6-bb1b-ab74b103b90e,0,1,fc9fc58f-c888-41f0-9f57-70748b21706e,fc9fc58f-c888-41f0-9f57-70748b21706e,0,1,fc761833-aa85-4c6d-a36c-d1ed060e3bb1,fc761833-aa85-4c6d-a36c-d1ed060e3bb1,0,1,f0ba2ff2-b353-4f84-8e45-23e47ee6c1b6,f0ba2ff2-b353-4f84-8e45-23e47ee6c1b6,0,1,bb8bade2-5c1b-49a6-b66f-79a3ebff86f7,bb8bade2-5c1b-49a6-b66f-79a3ebff86f7,0,1,33596560-3d45-4d3e-b6ec-1c22162110ad,33596560-3d45-4d3e-b6ec-1c22162110ad,0,1,d3e82a06-daae-4f4d-b3f8-45a406e31664,d3e82a06-daae-4f4d-b3f8-45a406e31664,0,1,af76c3c9-d8dc-4156-9e10-80ee02fcf4fe,af76c3c9-d8dc-4156-9e10-80ee02fcf4fe,0,1,ac6a184d-1247-4b54-a023-f0d16daa5fe9,ac6a184d-1247-4b54-a023-f0d16daa5fe9,0,1,f9af5fe6-0b4f-4d48-92a4-1f2a29972155,f9af5fe6-0b4f-4d48-92a4-1f2a29972155,0,1,3ca1682d-5ff5-4b2b-96c2-54d2dd5297a9,3ca1682d-5ff5-4b2b-96c2-54d2dd5297a9,0,1,a687d346-73cf-4aea-a4d0-f29824f0f6f1,a687d346-73cf-4aea-a4d0-f29824f0f6f1,0,1,f51fda72-56d9-4b45-a775-a0e1dfbf3a27,f51fda72-56d9-4b45-a775-a0e1dfbf3a27,0,1,8bf73614-81a4-4702-88b9-3c6f2594d204,8bf73614-81a4-4702-88b9-3c6f2594d204,0,1,b8d4410b-f626-41b8-87c8-67102256bae2,b8d4410b-f626-41b8-87c8-67102256bae2,0,1,484eeb5f-12af-4139-a081-4dcac067a712,484eeb5f-12af-4139-a081-4dcac067a712,0,1,44d8556f-5abf-4b8a-bbb1-637642e0ab4e,44d8556f-5abf-4b8a-bbb1-637642e0ab4e,0,1,d8f7ef22-57b4-468a-be46-d5cda556c254,d8f7ef22-57b4-468a-be46-d5cda556c254,0,1,ec61075e-fbcb-494a-b790-81548a212d2b,ec61075e-fbcb-494a-b790-81548a212d2b,0,1,2f3bdc3c-4c5d-4fcb-85bb-932fe1747d98,2f3bdc3c-4c5d-4fcb-85bb-932fe1747d98,0,1,0c444045-302b-4dbd-a9a3-81fd40004948,0c444045-302b-4dbd-a9a3-81fd40004948,0,1,16099d54-e84f-47c5-aaf3-f8ced3cba5e0,16099d54-e84f-47c5-aaf3-f8ced3cba5e0,0,1,1528b799-1c0f-4244-85e8-e738b827934a,1528b799-1c0f-4244-85e8-e738b827934a,0,1,45d79e4d-8c2a-432b-abb8-fb9046abea40,45d79e4d-8c2a-432b-abb8-fb9046abea40,0,1,8f4d2fa9-c6ed-4f85-b3ef-f9214468ffc4,8f4d2fa9-c6ed-4f85-b3ef-f9214468ffc4,0,1,cb73c8c2-3b09-42e9-ac26-1bd51854efb6,cb73c8c2-3b09-42e9-ac26-1bd51854efb6,0,1,6da034af-0481-4a3c-aff9-c50ced6f21d4,6da034af-0481-4a3c-aff9-c50ced6f21d4,0,1,d07016c8-7d97-42cd-865b-85b49075adfb,d07016c8-7d97-42cd-865b-85b49075adfb,0,1,491a2337-1bf9-45c1-8ae6-95605ef41992,491a2337-1bf9-45c1-8ae6-95605ef41992,0,1,9202335d-50bb-4282-9438-24c7fb9cf637,9202335d-50bb-4282-9438-24c7fb9cf637,0,1,a62906e5-27f8-4e72-8769-9a3eed6997d7,a62906e5-27f8-4e72-8769-9a3eed6997d7,0,1,6c5d0ac3-6086-434c-812b-1c1158ecc574,6c5d0ac3-6086-434c-812b-1c1158ecc574,0,1,783536d7-c0db-44c9-96e8-58b57804d7c8,783536d7-c0db-44c9-96e8-58b57804d7c8,0,1,a8295435-c2c4-4aff-874b-7412556aa76d,a8295435-c2c4-4aff-874b-7412556aa76d,0,1,f6c4e24b-172b-4ba3-8e3e-988306ade660,f6c4e24b-172b-4ba3-8e3e-988306ade660,0,1,9baab24c-a5a3-46f4-ad17-a28d4a49f851,9baab24c-a5a3-46f4-ad17-a28d4a49f851,0,1,d1952319-0e42-4684-a386-fbe7c24526c2,d1952319-0e42-4684-a386-fbe7c24526c2,0,1,01cd59fc-8577-4b3c-9d69-6db75e81e7c4,01cd59fc-8577-4b3c-9d69-6db75e81e7c4,0,1,83b47a9d-d44b-4c40-becd-df74f9cb2e91,83b47a9d-d44b-4c40-becd-df74f9cb2e91,0,1,d03e636e-ff88-4e96-bf3c-d795d10cbcb0,d03e636e-ff88-4e96-bf3c-d795d10cbcb0,0,1,86e2a2eb-160f-4e93-a449-b2f726286d1b,86e2a2eb-160f-4e93-a449-b2f726286d1b,0,1,8e6e1f24-83bf-42c2-9eda-b3874c7910c3,8e6e1f24-83bf-42c2-9eda-b3874c7910c3,0,1,364184c2-ec71-44be-b40c-ba719b4ab0e1,364184c2-ec71-44be-b40c-ba719b4ab0e1,0,1,7ef46c54-ec0c-4211-a750-e5949956b593,7ef46c54-ec0c-4211-a750-e5949956b593,0,1,04823681-875e-459a-b3cf-051c89527f38,04823681-875e-459a-b3cf-051c89527f38,0,1,8e115a0c-a17c-4d7e-bd2c-305fb53d09ca,8e115a0c-a17c-4d7e-bd2c-305fb53d09ca,0,1,38265f08-3301-40d1-b630-a319c983e826,38265f08-3301-40d1-b630-a319c983e826,0,1,5175c496-bac7-4c57-9628-793b727aecd0,5175c496-bac7-4c57-9628-793b727aecd0,0,1,1453309e-77d0-444d-ac3f-fd7c2cb65c0c,1453309e-77d0-444d-ac3f-fd7c2cb65c0c,0,1,fc42df4a-93f0-461f-acfe-fea09158030f,fc42df4a-93f0-461f-acfe-fea09158030f,0,1,9f0a7909-0b97-48a7-964f-a52cb3c19c4e,9f0a7909-0b97-48a7-964f-a52cb3c19c4e,0,1,6d002aef-00c9-4069-80df-153151218831,6d002aef-00c9-4069-80df-153151218831,0,1,4fec3a6c-5a99-4763-aa07-d5de8712559e,4fec3a6c-5a99-4763-aa07-d5de8712559e,0,1,968a1202-d271-43e0-bfd4-d38e49ceadd4,968a1202-d271-43e0-bfd4-d38e49ceadd4,0,1,c80e2ef7-93b6-4cef-806a-2dfcf2fd80e6,c80e2ef7-93b6-4cef-806a-2dfcf2fd80e6,0,1,b3b4fbf1-cbf0-4ee2-a490-4d657693479b,b3b4fbf1-cbf0-4ee2-a490-4d657693479b,0,1,ea61e442-273e-4ce4-a806-8090893729ba,ea61e442-273e-4ce4-a806-8090893729ba,0,1,e7100f2b-d169-4635-ab87-7a2225ff12ee,e7100f2b-d169-4635-ab87-7a2225ff12ee,0,1,1e2d790c-0076-413a-b5fb-f25c01ab6ad5,1e2d790c-0076-413a-b5fb-f25c01ab6ad5,0,1,0dcc537b-76b3-4e73-b060-6cbdcf6345db,0dcc537b-76b3-4e73-b060-6cbdcf6345db,0,1,ae662b53-e11e-4b59-be52-b9d4ab00c4a4,ae662b53-e11e-4b59-be52-b9d4ab00c4a4,0,1,ce55df94-71e4-46ac-9b3b-bdae5d336b0a,ce55df94-71e4-46ac-9b3b-bdae5d336b0a,0,1,7601fa7e-079a-4347-abea-e161b2d00783,7601fa7e-079a-4347-abea-e161b2d00783,0,1,ee84cb40-f82d-4558-91be-229d68ad9f4a,ee84cb40-f82d-4558-91be-229d68ad9f4a,0,1,101a7eff-9556-4165-879a-a7c8a852e236,101a7eff-9556-4165-879a-a7c8a852e236,0,1,01775932-3603-4efc-9235-abdb97490dea,01775932-3603-4efc-9235-abdb97490dea,0,1,7637844b-4059-4f8a-8436-b4f4e8cb4f74,7637844b-4059-4f8a-8436-b4f4e8cb4f74,0,1,b6bb4cbe-b6fa-4d28-b372-0b959951ad4d,b6bb4cbe-b6fa-4d28-b372-0b959951ad4d,0,1,0ee5b788-61dc-464b-86da-f985df7704b6,0ee5b788-61dc-464b-86da-f985df7704b6,0,1,2375c6a8-9799-4b7c-a48d-091a90c67693,2375c6a8-9799-4b7c-a48d-091a90c67693,0,1,3d3c3360-4502-4ad4-bbe9-35d4ba9b54b3,3d3c3360-4502-4ad4-bbe9-35d4ba9b54b3,0,1,9b0671c6-6e92-42e6-9cf4-13d4be11f27d,9b0671c6-6e92-42e6-9cf4-13d4be11f27d,0,1,63c6522f-be04-422a-b4f4-0f55f58b09a8,63c6522f-be04-422a-b4f4-0f55f58b09a8,0,1,be919dc1-a377-43e1-82e6-ce946cabdd55,be919dc1-a377-43e1-82e6-ce946cabdd55,0,1,6b17a0fc-4d6f-4189-9067-c58a95f04dd7,6b17a0fc-4d6f-4189-9067-c58a95f04dd7,0,1,9ded532e-9e60-4895-a4c5-4ea6697aa83c,9ded532e-9e60-4895-a4c5-4ea6697aa83c,0,1,106c5159-ffc7-4059-b3e3-acf74326a44f,106c5159-ffc7-4059-b3e3-acf74326a44f,0,1,d39fd717-1a69-4fd3-889e-4fa9abefea1c,d39fd717-1a69-4fd3-889e-4fa9abefea1c,0,1,5b85e6df-7493-4201-97ad-2aea14de6006,5b85e6df-7493-4201-97ad-2aea14de6006,0,1,061e6c0f-ba52-40ec-96ad-2eba3eee3097,061e6c0f-ba52-40ec-96ad-2eba3eee3097,0,1,d77e3c65-e9fd-4ba7-885f-a8a2f4c827d2,d77e3c65-e9fd-4ba7-885f-a8a2f4c827d2,0,1,4fb86bf3-02ad-4f0e-85a9-98be6c350a06,4fb86bf3-02ad-4f0e-85a9-98be6c350a06,0,1,4840753b-e2e1-4e67-b35f-2f5eab7754f5,4840753b-e2e1-4e67-b35f-2f5eab7754f5,0,1,4095c9e7-83ab-4db9-a2d0-a9f4ef9ee53e,4095c9e7-83ab-4db9-a2d0-a9f4ef9ee53e,0,1,6ffd9c17-d90b-4d19-b337-0fbc2c717557,6ffd9c17-d90b-4d19-b337-0fbc2c717557,0,1,9a11a6bd-0c13-4be2-9e34-b12b7554f3c9,9a11a6bd-0c13-4be2-9e34-b12b7554f3c9,0,1,3bb83275-7a0e-420f-8c6b-028038f11a8c,3bb83275-7a0e-420f-8c6b-028038f11a8c,0,1,e1950a23-f6e7-48af-b78a-77aa61f08ece,e1950a23-f6e7-48af-b78a-77aa61f08ece,0,1,1cc3d7c4-9178-4a40-86ea-2bbc1f5aa69f,1cc3d7c4-9178-4a40-86ea-2bbc1f5aa69f,0,1,790735cf-f6e2-4b0d-bb16-c5b9ea95efae,790735cf-f6e2-4b0d-bb16-c5b9ea95efae,0,1,5d726fa3-bde0-4d97-a577-415857bbb5c1,5d726fa3-bde0-4d97-a577-415857bbb5c1,0,1,f63d0e2d-4685-4ac5-b22c-1b83e3ab955f,f63d0e2d-4685-4ac5-b22c-1b83e3ab955f,0,1,49068231-202c-4ac6-a39a-69207cb597dd,49068231-202c-4ac6-a39a-69207cb597dd,0,1,5a470575-e012-42ad-9ad7-53930a8e843f,5a470575-e012-42ad-9ad7-53930a8e843f,0,1,5872d4ed-6503-422d-bcf9-63a8df3e777d,5872d4ed-6503-422d-bcf9-63a8df3e777d,0,1,e21cda29-2579-485e-a207-20b76f719c80,e21cda29-2579-485e-a207-20b76f719c80,0,1,1b232a57-2833-42c6-b318-38dae2af1ab2,1b232a57-2833-42c6-b318-38dae2af1ab2,0,1,007ade8c-b102-408b-b877-b531e046560b,007ade8c-b102-408b-b877-b531e046560b,0,1,a8dfea6c-0c21-456d-96ab-f4bb5d579b13,a8dfea6c-0c21-456d-96ab-f4bb5d579b13,0,1,305f1ef1-4f9c-40a2-a978-3a4c0ecf75d4,305f1ef1-4f9c-40a2-a978-3a4c0ecf75d4,0,1,eb69c41a-392d-43bb-9b67-a0adcb651b1e,eb69c41a-392d-43bb-9b67-a0adcb651b1e,0,1,93b01c88-48a2-4753-b443-0e9892395a8f,93b01c88-48a2-4753-b443-0e9892395a8f,0,1,0b7f8e05-bb34-47cc-9775-04362e814316,0b7f8e05-bb34-47cc-9775-04362e814316,0,1,e71e0297-3709-4247-933e-18a6350cbf39,e71e0297-3709-4247-933e-18a6350cbf39,0,1,0b32e372-c6ad-4dda-acd1-8b5d58537d37,0b32e372-c6ad-4dda-acd1-8b5d58537d37,0,1,602dac6f-abe6-407a-92d3-7f1613e5dda6,602dac6f-abe6-407a-92d3-7f1613e5dda6,0,1,db03a88b-2804-45c2-9089-7ddb87ef2f18,db03a88b-2804-45c2-9089-7ddb87ef2f18,0,1,df6417d1-c722-4a87-a543-5d2c31795b20,df6417d1-c722-4a87-a543-5d2c31795b20,0,1,526a85c9-3a8d-4044-adb9-fd0689c70601,526a85c9-3a8d-4044-adb9-fd0689c70601,0,1,c4203772-580c-4db1-9bde-8925faa90688,c4203772-580c-4db1-9bde-8925faa90688,0,1,f64a91c4-f5cb-4e8e-8387-9f242ce6de44,f64a91c4-f5cb-4e8e-8387-9f242ce6de44,0,1,9ab0fe18-4dd7-4eed-958d-8537d4896d84,9ab0fe18-4dd7-4eed-958d-8537d4896d84,0,1,2278dc46-46ce-4d00-9289-4de1640782d7,2278dc46-46ce-4d00-9289-4de1640782d7,0,1,1f983a04-c2df-40bb-bee2-b326474d89f8,1f983a04-c2df-40bb-bee2-b326474d89f8,0,1,f03f1b68-e924-4c06-b0aa-8033a9a2f592,f03f1b68-e924-4c06-b0aa-8033a9a2f592,0,1,5e453d10-235d-4e53-86b1-20eed3247992,5e453d10-235d-4e53-86b1-20eed3247992,0,1,0eefb856-0fb4-4c3e-bb08-e88b03a44065,0eefb856-0fb4-4c3e-bb08-e88b03a44065,0,1,21ba8b9f-de97-40a1-8ea1-85a29e8e53ef,21ba8b9f-de97-40a1-8ea1-85a29e8e53ef,0,1,738228ad-c30a-42f4-a6ad-bde0edba6266,738228ad-c30a-42f4-a6ad-bde0edba6266,0,1,c08aea99-ee33-488c-9ba0-f8b24a6d1d04,c08aea99-ee33-488c-9ba0-f8b24a6d1d04,0,1,df8e8344-d7bc-4cf2-b498-88d3abb66c09,df8e8344-d7bc-4cf2-b498-88d3abb66c09,0,1,e6d13536-3021-45b2-a8e1-bdb0e0be850c,e6d13536-3021-45b2-a8e1-bdb0e0be850c,0,1,b49f538c-b2b2-4a1f-a6b4-a911033b1666,b49f538c-b2b2-4a1f-a6b4-a911033b1666,0,1,794e952b-6b03-4a1e-ad3f-453376bccf45,794e952b-6b03-4a1e-ad3f-453376bccf45,0,1,3e2a0713-e6ed-4d38-8036-72f7b62ca64a,3e2a0713-e6ed-4d38-8036-72f7b62ca64a,0,1,5cd997ba-f123-47b3-8cde-fbba45a4a11c,5cd997ba-f123-47b3-8cde-fbba45a4a11c,0,1,0d746247-c4f4-47a5-a373-45ec4023d3ef,0d746247-c4f4-47a5-a373-45ec4023d3ef,0,1,a25bcf4e-1a47-472b-9f93-f6ab45abf461,a25bcf4e-1a47-472b-9f93-f6ab45abf461,0,1,958b7dab-0aba-423f-ab81-b70f2b93a027,958b7dab-0aba-423f-ab81-b70f2b93a027,0,1,a17ec3be-2255-42af-a6ee-d3fb8bb00519,a17ec3be-2255-42af-a6ee-d3fb8bb00519,0,1,add0b22d-ff5a-41f7-88a1-ef34880e50c9,add0b22d-ff5a-41f7-88a1-ef34880e50c9,0,1,4b714d9c-26f4-46e8-ac79-471522b3853b,4b714d9c-26f4-46e8-ac79-471522b3853b,0,1,411489de-f907-4d60-a776-64bb0aa12a0e,411489de-f907-4d60-a776-64bb0aa12a0e,0,1,58d9ba60-a0c7-405d-a76e-0b0a796daaf3,58d9ba60-a0c7-405d-a76e-0b0a796daaf3,0,1,9c47670e-9eb9-49ec-876c-cd545aaa093c,9c47670e-9eb9-49ec-876c-cd545aaa093c,0,1,f57e74e6-75e8-4136-911e-86793036a077,f57e74e6-75e8-4136-911e-86793036a077,0,1,8492ee20-3f15-45d8-b70d-19b5cd6f1ae3,8492ee20-3f15-45d8-b70d-19b5cd6f1ae3,0,1,3ba8c378-ef3d-4646-90b3-6d8078aa623e,3ba8c378-ef3d-4646-90b3-6d8078aa623e,0,1,b96b2e45-8fb3-4d48-ab53-d3bbf6ef0284,b96b2e45-8fb3-4d48-ab53-d3bbf6ef0284,0,1,5ac38b5a-92e5-47eb-b956-24d9f010cb9f,5ac38b5a-92e5-47eb-b956-24d9f010cb9f,0,1,2dd7eb87-8130-425a-be13-85235508cde6,2dd7eb87-8130-425a-be13-85235508cde6,0,1,8a62c997-4fda-4464-90bd-ab719161949f,8a62c997-4fda-4464-90bd-ab719161949f,0,1,28af52dd-3144-428b-956d-b6f27863ec4a,28af52dd-3144-428b-956d-b6f27863ec4a,0,1,c34c330a-991a-4ec9-a0ad-73c04c6a6fc3,c34c330a-991a-4ec9-a0ad-73c04c6a6fc3,0,1,8ac94328-2300-4681-9c35-fd7e2f830310,8ac94328-2300-4681-9c35-fd7e2f830310,0,1,da0ee165-1917-466b-ac5c-16c28e2318bb,da0ee165-1917-466b-ac5c-16c28e2318bb,0,1,4868cb2e-0892-42bc-9de1-73cb8a15a96f,4868cb2e-0892-42bc-9de1-73cb8a15a96f,0,1,e8b80879-33b3-4c45-ad68-1acabcf91faf,e8b80879-33b3-4c45-ad68-1acabcf91faf,0,1,4a87fafc-7ca7-478e-bb31-358c2b85fa92,4a87fafc-7ca7-478e-bb31-358c2b85fa92,0,1,239601eb-e8de-4d58-a32a-01ee52f6e698,239601eb-e8de-4d58-a32a-01ee52f6e698,0,1,11370667-bec5-4a2d-8aa1-97f4d795718f,11370667-bec5-4a2d-8aa1-97f4d795718f,0,1,2032162d-fbb5-4e6a-be72-cda79869b9ff,2032162d-fbb5-4e6a-be72-cda79869b9ff,0,1,95a8e790-25ef-4ef3-a44a-f150bf1ceb1f,95a8e790-25ef-4ef3-a44a-f150bf1ceb1f,0,1,10543f9a-4e3f-427a-b36a-9c66709dd6fb,10543f9a-4e3f-427a-b36a-9c66709dd6fb,0,1,973967e5-1702-4fb8-ba36-70fd5b3b7e7c,973967e5-1702-4fb8-ba36-70fd5b3b7e7c,0,1,96ab5424-7be1-416d-b74d-d0c815726b1f,96ab5424-7be1-416d-b74d-d0c815726b1f,0,1,3714e794-ddef-4ad9-a933-6130bbc84545,3714e794-ddef-4ad9-a933-6130bbc84545,0,1,282b089c-7411-40d6-9a0a-ceaf6abb5586,282b089c-7411-40d6-9a0a-ceaf6abb5586,0,1,678188aa-76e7-49bc-a4be-1c55ccd625b1,678188aa-76e7-49bc-a4be-1c55ccd625b1,0,1,6c27eece-2f8e-48eb-b9c7-f9c414ee15bd,6c27eece-2f8e-48eb-b9c7-f9c414ee15bd,0,1,b3415b4a-d8de-4536-aa4b-82e75fd986ee,b3415b4a-d8de-4536-aa4b-82e75fd986ee,0,1,acc996ab-672a-4602-b7ad-8eee83557e61,acc996ab-672a-4602-b7ad-8eee83557e61,0,1,bf9e9c2f-e5dc-4f82-8e9a-7f35e3ad9a0b,bf9e9c2f-e5dc-4f82-8e9a-7f35e3ad9a0b,0,1,371361b6-15fd-4e62-9f60-cc8ee3fbacf0,371361b6-15fd-4e62-9f60-cc8ee3fbacf0,0,1,97745768-ed35-44f1-beba-abb8b28a29ae,97745768-ed35-44f1-beba-abb8b28a29ae,0,1,69364942-bcd1-4b06-9b57-fa59b4e7c552,69364942-bcd1-4b06-9b57-fa59b4e7c552,0,1,ab201c5f-4134-42cf-a528-c1c4df02f2d7,ab201c5f-4134-42cf-a528-c1c4df02f2d7,0,1,303fb7b5-6a23-40ea-ae12-b54f4ebae026,303fb7b5-6a23-40ea-ae12-b54f4ebae026,0,1,634cd26b-78f1-4446-8aad-b96ed16e5329,634cd26b-78f1-4446-8aad-b96ed16e5329,0,1,d8e62f1a-92ca-4971-9609-e79da798c083,d8e62f1a-92ca-4971-9609-e79da798c083,0,1,61892a62-9381-401d-af31-9073ef2509fb,61892a62-9381-401d-af31-9073ef2509fb,0,1,eb74ebf0-a9c6-4c4c-b279-5a46f40ea0d3,eb74ebf0-a9c6-4c4c-b279-5a46f40ea0d3,0,1,d5e1806b-9827-40ab-9cfa-23c22456d137,d5e1806b-9827-40ab-9cfa-23c22456d137,0,1,b57b186a-ec1e-46a2-87ae-6ba27793ebf6,b57b186a-ec1e-46a2-87ae-6ba27793ebf6,0,1,d24170d7-5477-4ec8-acd2-0de8bd2067d6,d24170d7-5477-4ec8-acd2-0de8bd2067d6,0,1,f047da82-7574-4da4-b54e-480195280a11,f047da82-7574-4da4-b54e-480195280a11,0,1,a469f018-da26-485f-87c3-f580321a34f0,a469f018-da26-485f-87c3-f580321a34f0,0,1,9e16edb6-d841-48fa-bfe1-f9aabdcf9e46,9e16edb6-d841-48fa-bfe1-f9aabdcf9e46,0,1,628de771-c19c-4474-989f-8fb6cd7756a2,628de771-c19c-4474-989f-8fb6cd7756a2,0,1,0e3c6508-caa3-43ef-9647-0e3b96955898,0e3c6508-caa3-43ef-9647-0e3b96955898,0,1,ceb18abf-0390-450c-9e4c-cab9e43eb2e8,ceb18abf-0390-450c-9e4c-cab9e43eb2e8,0,1,1b1fa685-dccb-4d0f-ac01-adc6febf7f15,1b1fa685-dccb-4d0f-ac01-adc6febf7f15,0,1,6b0ddefa-ee70-4b27-989f-e23c734ab943,6b0ddefa-ee70-4b27-989f-e23c734ab943,0,1,ee873280-28ea-41fb-af52-c10c2018cbe4,ee873280-28ea-41fb-af52-c10c2018cbe4,0,1,6789e57b-1293-442c-97d0-b8007367602e,6789e57b-1293-442c-97d0-b8007367602e,0,1,0f193c89-b664-448e-bed3-2147430367f7,0f193c89-b664-448e-bed3-2147430367f7,0,1,4c9b2506-75a8-47d3-a5d5-d946088ba14a,4c9b2506-75a8-47d3-a5d5-d946088ba14a,0,1,36eacaa1-2efd-49c0-82de-2f8972535bf2,36eacaa1-2efd-49c0-82de-2f8972535bf2,0,1,c35a643d-fe3a-4293-93c0-074fa68a31e3,c35a643d-fe3a-4293-93c0-074fa68a31e3,0,1,32012b27-1b43-49be-b9af-df0c877e7a4c,32012b27-1b43-49be-b9af-df0c877e7a4c,0,1,e97d5152-9e58-4a91-a691-b4d358f1c89d,e97d5152-9e58-4a91-a691-b4d358f1c89d,0,1,1de4d7ee-7ddd-44db-bf7f-1b99b653652c,1de4d7ee-7ddd-44db-bf7f-1b99b653652c,0,1,dfe624ac-9f49-46dd-b821-1f1f5b5e0d15,dfe624ac-9f49-46dd-b821-1f1f5b5e0d15,0,1,296c478b-4103-46cb-9d14-97f59034ffd4,296c478b-4103-46cb-9d14-97f59034ffd4,0,1,fb918a68-f86d-46c0-9078-61d2b32b5aef,fb918a68-f86d-46c0-9078-61d2b32b5aef,0,1,9ca4d0c4-f5d3-4748-bf73-f3cd1bc4ac46,9ca4d0c4-f5d3-4748-bf73-f3cd1bc4ac46,0,1,1ddfc773-4f3c-4764-978e-585aab4666de,1ddfc773-4f3c-4764-978e-585aab4666de,0,1,e424d122-1dbb-4545-975c-177997129f2e,e424d122-1dbb-4545-975c-177997129f2e,0,1,c83bc626-dfdd-4451-92b0-b53eed40f534,c83bc626-dfdd-4451-92b0-b53eed40f534,0,1,7b9b1d11-4f78-4113-8fca-1a3a30953aef,7b9b1d11-4f78-4113-8fca-1a3a30953aef,0,1,7f84cb85-c3e4-4b53-b829-3b1e216f978a,7f84cb85-c3e4-4b53-b829-3b1e216f978a,0,1,7e621ecc-7d2b-42bf-a502-f8e59de56b63,7e621ecc-7d2b-42bf-a502-f8e59de56b63,0,1,798fd445-d02e-4e97-890a-0283f33317cf,798fd445-d02e-4e97-890a-0283f33317cf,0,1,095583ca-010d-43ad-8c7a-8938fa4cb761,095583ca-010d-43ad-8c7a-8938fa4cb761,0,1,178d210c-e847-4805-a8d4-31acdf4983af,178d210c-e847-4805-a8d4-31acdf4983af,0,1,aa214d9f-23b1-4996-8a43-9010dceeb53d,aa214d9f-23b1-4996-8a43-9010dceeb53d,0,1,26a5527e-dc2b-45a4-a51c-b1dfb31fa8a2,26a5527e-dc2b-45a4-a51c-b1dfb31fa8a2,0,1,aefc3149-90ee-4ccc-8fb6-b1f6096237f6,aefc3149-90ee-4ccc-8fb6-b1f6096237f6,0,1,d9d103bd-1dd6-48a9-8869-6c8485705393,d9d103bd-1dd6-48a9-8869-6c8485705393,0,1,cf2f7e1f-9b0b-4ae9-9c94-99d80bf95eae,cf2f7e1f-9b0b-4ae9-9c94-99d80bf95eae,0,1,ff0e8487-bdbf-4b21-877e-00008c81bc09,ff0e8487-bdbf-4b21-877e-00008c81bc09,0,1,39c9f8ac-56a0-4057-8359-7228bf97184a,39c9f8ac-56a0-4057-8359-7228bf97184a,0,1,763fbb4c-cab2-4c71-ba16-7e2ce8c3dc97,763fbb4c-cab2-4c71-ba16-7e2ce8c3dc97,0,1,2c0dd892-1d3e-4497-850b-080bdb9c59d8,2c0dd892-1d3e-4497-850b-080bdb9c59d8,0,1,3b727d49-c9ed-4d9e-af61-c13b9a170c75,3b727d49-c9ed-4d9e-af61-c13b9a170c75,0,1,1b264744-bdcd-4c5c-932b-0ac4b990dd78,1b264744-bdcd-4c5c-932b-0ac4b990dd78,0,1,a2dbf20e-1fe9-463d-8fd4-76ce2e4854d1,a2dbf20e-1fe9-463d-8fd4-76ce2e4854d1,0,1,37bde288-8e02-4127-bd80-de8ae7590a14,37bde288-8e02-4127-bd80-de8ae7590a14,0,1,a9b8e517-78cd-4428-b2fc-9e16af0069d7,a9b8e517-78cd-4428-b2fc-9e16af0069d7,0,1,5c592024-c009-4674-bbb8-283669e673ef,5c592024-c009-4674-bbb8-283669e673ef,0,1,e76f16b9-77a0-4033-90d0-6e04e4494747,e76f16b9-77a0-4033-90d0-6e04e4494747,0,1,cfb221fc-8639-4e15-9a78-f7837d657a99,cfb221fc-8639-4e15-9a78-f7837d657a99,0,1,4e61c8c3-756e-4937-adf6-6a1e9a89fc6a,4e61c8c3-756e-4937-adf6-6a1e9a89fc6a,0,1,022147c1-1ebe-4c8d-b367-4c47115b101d,022147c1-1ebe-4c8d-b367-4c47115b101d,0,1,2975d4c8-90d8-4791-8bc2-4adaa328ddc0,2975d4c8-90d8-4791-8bc2-4adaa328ddc0,0,1,fca6b230-a38e-4791-9cc5-3d215f79dc6f,fca6b230-a38e-4791-9cc5-3d215f79dc6f,0,1,04e87de4-940a-4533-8c81-8f145b201dc0,04e87de4-940a-4533-8c81-8f145b201dc0,0,1,573ef4f4-e9e6-4b7c-944d-30808a6a00b7,573ef4f4-e9e6-4b7c-944d-30808a6a00b7,0,1,fa488af9-a5ec-47d8-8661-fa5058a60a6b,fa488af9-a5ec-47d8-8661-fa5058a60a6b,0,1,97cc84c6-3565-474c-a028-83acb5390446,97cc84c6-3565-474c-a028-83acb5390446,0,1,9bf07c3e-7fdf-4a4f-ab00-98c7668349bd,9bf07c3e-7fdf-4a4f-ab00-98c7668349bd,0,1,ebbf6957-6ff6-4dc2-9e20-23d1da091f05,ebbf6957-6ff6-4dc2-9e20-23d1da091f05,0,1,9b80acf6-6bf0-42c4-abb3-2fa2fcf4088c,9b80acf6-6bf0-42c4-abb3-2fa2fcf4088c,0,1,1dcec107-9d5f-4b69-ad65-cc4cb1f27a9c,1dcec107-9d5f-4b69-ad65-cc4cb1f27a9c,0,1,b366d7eb-626c-4c0c-b4cc-c392763e6e94,b366d7eb-626c-4c0c-b4cc-c392763e6e94,0,1,4c7e24aa-726a-4595-82ad-ef1e525b14fa,4c7e24aa-726a-4595-82ad-ef1e525b14fa,0,1,b9e5bb39-ed0a-4e12-b7e4-2d9b5015bf9c,b9e5bb39-ed0a-4e12-b7e4-2d9b5015bf9c,0,1,dbced4aa-6432-4f0c-a99a-5a3e7b0f6755,dbced4aa-6432-4f0c-a99a-5a3e7b0f6755,0,1,e849e46c-2ce6-427b-92bc-06d7997f59bf,e849e46c-2ce6-427b-92bc-06d7997f59bf,0,1,5a971dc0-28bf-4426-9426-9f456aea080a,5a971dc0-28bf-4426-9426-9f456aea080a,0,1,aed2ceeb-cc0f-4bdc-bb94-2e15cd68aa96,aed2ceeb-cc0f-4bdc-bb94-2e15cd68aa96,0,1,04b5ae71-7fa4-4a64-b406-59dc603b80c5,04b5ae71-7fa4-4a64-b406-59dc603b80c5,0,1,f23a2023-f776-40db-8689-1fc3f7ebc482,f23a2023-f776-40db-8689-1fc3f7ebc482,0,1,1e7684f0-1b3b-4a32-8602-dd0672c5a800,1e7684f0-1b3b-4a32-8602-dd0672c5a800,0,1,ab178a93-8570-43b6-ae42-f34a7cc4f359,ab178a93-8570-43b6-ae42-f34a7cc4f359,0,1,4c82f31d-7a98-47dd-89dc-1846cb15bf3b,4c82f31d-7a98-47dd-89dc-1846cb15bf3b,0,1,168e3189-2676-4cdb-bc9d-78d85df51faf,168e3189-2676-4cdb-bc9d-78d85df51faf,0,1,ecf1a87f-4ca4-4efb-a84c-b2db1b0e8829,ecf1a87f-4ca4-4efb-a84c-b2db1b0e8829,0,1,470bbff8-20d0-475c-a61a-1a09ac14c2db,470bbff8-20d0-475c-a61a-1a09ac14c2db,0,1,6ea25680-c4db-4717-9498-62420ca16970,6ea25680-c4db-4717-9498-62420ca16970,0,1,14e20d48-635e-4c52-9099-e743323fc190,14e20d48-635e-4c52-9099-e743323fc190,0,1,c37a660e-16c5-495e-9486-e61bcb693fa0,c37a660e-16c5-495e-9486-e61bcb693fa0,0,1,8f44ebad-1160-474e-a566-fb9da55ffcba,8f44ebad-1160-474e-a566-fb9da55ffcba,0,1,11cf336e-7890-4972-bf71-32d7416ff647,11cf336e-7890-4972-bf71-32d7416ff647,0,1,4c4d61a6-6bb6-4a15-9a81-25fdcf96ec4b,4c4d61a6-6bb6-4a15-9a81-25fdcf96ec4b,0,1,14bd3392-36cd-4ed0-8847-44375d6fb861,14bd3392-36cd-4ed0-8847-44375d6fb861,0,1,759ede7a-e832-44e6-9b11-5bfb3c507820,759ede7a-e832-44e6-9b11-5bfb3c507820,0,1,64484611-b32c-4155-a063-7df5a3f924dd,64484611-b32c-4155-a063-7df5a3f924dd,0,1,2f2ac0db-db86-4ed2-a55a-b245b4d00d70,2f2ac0db-db86-4ed2-a55a-b245b4d00d70,0,1,821b93bd-f0dd-4468-972a-d9b2b4de72f1,821b93bd-f0dd-4468-972a-d9b2b4de72f1,0,1,56900066-90e3-40c0-b64a-8f7964a4dfc1,56900066-90e3-40c0-b64a-8f7964a4dfc1,0,1,56f0c4d6-9b13-486a-9586-05e657dca8be,56f0c4d6-9b13-486a-9586-05e657dca8be,0,1,c795c0d3-6a0d-4311-9821-df320663727e,c795c0d3-6a0d-4311-9821-df320663727e,0,1,512b8d89-8798-4549-9e79-b9c3f7d9098f,512b8d89-8798-4549-9e79-b9c3f7d9098f,0,1,e1fe71f8-f37c-4705-aca1-c25e2bdc5db6,e1fe71f8-f37c-4705-aca1-c25e2bdc5db6,0,1,7f356abf-9045-4a76-89f3-8b52d467122a,7f356abf-9045-4a76-89f3-8b52d467122a,0,1,625a61ac-4ad0-4b31-aa67-9f864154b9c4,625a61ac-4ad0-4b31-aa67-9f864154b9c4,0,1,51fa8d01-44a1-4e75-9b04-6a2504972f08,51fa8d01-44a1-4e75-9b04-6a2504972f08,0,1,73dae482-a1ee-4c57-8859-2dd8e8635a49,73dae482-a1ee-4c57-8859-2dd8e8635a49,0,1,e4ea640f-e3a4-44ad-b17d-51f32136372e,e4ea640f-e3a4-44ad-b17d-51f32136372e,0,1,7dca913d-e37a-4740-8e3d-677d379605ee,7dca913d-e37a-4740-8e3d-677d379605ee,0,1,bd1cf7ef-f3e2-4441-836b-16f2cc227aa9,bd1cf7ef-f3e2-4441-836b-16f2cc227aa9,0,1,e62e60ea-9f0c-4a7e-869f-4639f31f826c,e62e60ea-9f0c-4a7e-869f-4639f31f826c,0,1,c9035b0f-cfc4-4761-9ba0-a8aacfaa9c72,c9035b0f-cfc4-4761-9ba0-a8aacfaa9c72,0,1,7efb0bf4-d40c-417b-b9bc-f4a5af66ec09,7efb0bf4-d40c-417b-b9bc-f4a5af66ec09,0,1,4cd4694f-17f8-43ba-8940-07628bd937fe,4cd4694f-17f8-43ba-8940-07628bd937fe,0,1,7df6c94b-3cfe-4764-988e-858d733e35d9,7df6c94b-3cfe-4764-988e-858d733e35d9,0,1,8b251c7d-2d55-4734-a1da-7f1115d95080,8b251c7d-2d55-4734-a1da-7f1115d95080,0,1,87b3153d-bef0-4441-8b1c-a5fc7ba4c36a,87b3153d-bef0-4441-8b1c-a5fc7ba4c36a,0,1,5a8c3621-595a-4168-8bba-a7f8d499e47e,5a8c3621-595a-4168-8bba-a7f8d499e47e,0,1,fc4cfed6-e492-4420-b357-8143a8c2a41a,fc4cfed6-e492-4420-b357-8143a8c2a41a,0,1,4311a250-64af-443e-a711-93b7c41175cf,4311a250-64af-443e-a711-93b7c41175cf,0,1,804b6c57-1d7b-4927-be5b-84b7959fe55e,804b6c57-1d7b-4927-be5b-84b7959fe55e,0,1,f2655d85-79ea-4736-8f41-94a4f9b2b998,f2655d85-79ea-4736-8f41-94a4f9b2b998,0,1,21258174-3a95-4c10-bb8f-4d6db0c5ae0e,21258174-3a95-4c10-bb8f-4d6db0c5ae0e,0,1,a8eb5ed9-df99-405b-afad-eeaa98956eee,a8eb5ed9-df99-405b-afad-eeaa98956eee,0,1,a64d4b1b-fae4-43ae-ae98-bdc4e59a94c1,a64d4b1b-fae4-43ae-ae98-bdc4e59a94c1,0,1,26a1279f-91f0-4632-ad7c-21cf2f524208,26a1279f-91f0-4632-ad7c-21cf2f524208,0,1,bf751ed0-ee47-4eaf-81bd-f0da00bef343,bf751ed0-ee47-4eaf-81bd-f0da00bef343,0,1,14b65111-4c0e-4521-9fcd-2a8d4aaa6b4b,14b65111-4c0e-4521-9fcd-2a8d4aaa6b4b,0,1,1f1def7c-e0ee-4963-afea-1751bf1b812c,1f1def7c-e0ee-4963-afea-1751bf1b812c,0,1,9a4c0898-ab56-425c-8191-5ab90f4e12bf,9a4c0898-ab56-425c-8191-5ab90f4e12bf,0,1,6841ec47-7a84-441a-b975-69d089072ce7,6841ec47-7a84-441a-b975-69d089072ce7,0,1,ead4001a-0d8a-4b95-8212-2a40e5aa6659,ead4001a-0d8a-4b95-8212-2a40e5aa6659,0,1,22165c8a-2179-4cd5-b195-bd2721e9e232,22165c8a-2179-4cd5-b195-bd2721e9e232,0,1,b28c3a8f-8cad-45eb-90d3-6d90a0b3f881,b28c3a8f-8cad-45eb-90d3-6d90a0b3f881,0,1,3c5974ec-f76d-401c-a8e4-d51c7cd4c4fb,3c5974ec-f76d-401c-a8e4-d51c7cd4c4fb,0,1,609a9bc9-4225-4fe1-91fa-90c9c2e5cfba,609a9bc9-4225-4fe1-91fa-90c9c2e5cfba,0,1,d22ed498-c7df-45bb-869f-f16d3aa2d3d3,d22ed498-c7df-45bb-869f-f16d3aa2d3d3,0,1,4a966f6e-87dd-4dae-9cc0-dbabee9424dc,4a966f6e-87dd-4dae-9cc0-dbabee9424dc,0,1,9d9debfd-4a10-4f09-9d09-2aa5e058b525,9d9debfd-4a10-4f09-9d09-2aa5e058b525,0,1,fc19586c-d89c-495c-b473-6f85967ed48e,fc19586c-d89c-495c-b473-6f85967ed48e,0,1,2ac7c701-a281-4e77-a5f8-294526021e2d,2ac7c701-a281-4e77-a5f8-294526021e2d,0,1,979df549-889d-496a-b6ce-c56d54c771b5,979df549-889d-496a-b6ce-c56d54c771b5,0,1,91b320d8-3426-44d3-97d7-c200287d7343,91b320d8-3426-44d3-97d7-c200287d7343,0,1,b9297f72-b40a-4adb-9975-bb693d4834a4,b9297f72-b40a-4adb-9975-bb693d4834a4,0,1,41cf3916-216f-4c4e-a587-82777f4263e0,41cf3916-216f-4c4e-a587-82777f4263e0,0,1,2ce3a350-86f1-4275-8299-3c3693ca11fa,2ce3a350-86f1-4275-8299-3c3693ca11fa,0,1,59f0ed15-c84c-4f41-bdd4-26317e4e914d,59f0ed15-c84c-4f41-bdd4-26317e4e914d,0,1,4b5ff142-47b8-4548-b6f9-56ebcbd40e35,4b5ff142-47b8-4548-b6f9-56ebcbd40e35,0,1,8fef790c-a3f4-460c-9093-5065cbdba196,8fef790c-a3f4-460c-9093-5065cbdba196,0,1,79bd24d0-61a9-4558-90ac-4e726066789c,79bd24d0-61a9-4558-90ac-4e726066789c,0,1,d843cbd7-e2b5-4c50-8ed2-7cb0baac8ecc,d843cbd7-e2b5-4c50-8ed2-7cb0baac8ecc,0,1,ef356548-51a4-4b09-b37d-ede5b8f3edb6,ef356548-51a4-4b09-b37d-ede5b8f3edb6,0,1,53c0d900-5e96-4381-a1ed-4424a5799608,53c0d900-5e96-4381-a1ed-4424a5799608,0,1,64fe317a-7d0e-4758-b5cf-0d871d2bf4ad,64fe317a-7d0e-4758-b5cf-0d871d2bf4ad,0,1,abfb7ac3-ebfa-4275-a039-a6b94bb9a76f,abfb7ac3-ebfa-4275-a039-a6b94bb9a76f,0,1,45ca9e20-1246-4400-a019-ffb521af6ea7,45ca9e20-1246-4400-a019-ffb521af6ea7,0,1,73eed854-5c3a-4a10-9bfa-793fd517f303,73eed854-5c3a-4a10-9bfa-793fd517f303,0,1,c3eb2836-ea4d-48cc-a03f-3a0c30f67e7f,c3eb2836-ea4d-48cc-a03f-3a0c30f67e7f,0,1,9134dc40-a8f1-4c60-9431-27cb98be5ecd,9134dc40-a8f1-4c60-9431-27cb98be5ecd,0,1,16c4622a-33af-4a95-b44e-0861a6df21d2,16c4622a-33af-4a95-b44e-0861a6df21d2,0,1,d8cac67b-cce2-4a00-a8df-c6570c50153f,d8cac67b-cce2-4a00-a8df-c6570c50153f,0,1,37213c65-bf26-4e50-a2fa-58eb45439b58,37213c65-bf26-4e50-a2fa-58eb45439b58,0,1,e43c08a9-6496-4c8e-bfe2-9d728e31d63d,e43c08a9-6496-4c8e-bfe2-9d728e31d63d,0,1,b6b31892-73ee-4c9b-92b0-2735536c4938,b6b31892-73ee-4c9b-92b0-2735536c4938,0,1,deb8b883-142e-47d0-a722-7c734a0cf9b3,deb8b883-142e-47d0-a722-7c734a0cf9b3,0,1,a6794f74-08a4-4b73-add7-e6d0d1b6e7a3,a6794f74-08a4-4b73-add7-e6d0d1b6e7a3,0,1,29233058-ccb1-4110-a9bc-cdb4c531f35a,29233058-ccb1-4110-a9bc-cdb4c531f35a,0,1,cf3729b2-9ee6-437c-81df-83966793be50,cf3729b2-9ee6-437c-81df-83966793be50,0,1,429d08b7-0b98-4f9b-a053-d04dd84a7026,429d08b7-0b98-4f9b-a053-d04dd84a7026,0,1,b64fd964-cee8-4619-872f-82d2fdc14240,b64fd964-cee8-4619-872f-82d2fdc14240,0,1,5ce7846d-9806-40f5-8631-4e14deb8bc95,5ce7846d-9806-40f5-8631-4e14deb8bc95,0,1,79528a0e-1e48-4d14-bd28-756fd5db57b9,79528a0e-1e48-4d14-bd28-756fd5db57b9,0,1,4eeab8c2-d901-4b95-adea-4a08f79d0fa2,4eeab8c2-d901-4b95-adea-4a08f79d0fa2,0,1,d9426219-4b37-4776-8d5d-acab5825e789,d9426219-4b37-4776-8d5d-acab5825e789,0,1,7ce1f9eb-ac51-46fd-adc5-c8b9bfb32e44,7ce1f9eb-ac51-46fd-adc5-c8b9bfb32e44,0,1,4fef5026-1cba-4c33-ae75-5f9570a8e6b6,4fef5026-1cba-4c33-ae75-5f9570a8e6b6,0,1,243ee3d4-4130-41ea-a37c-c7b39a5e73fa,243ee3d4-4130-41ea-a37c-c7b39a5e73fa,0,1,29e7299a-ce80-497a-8102-615d0a001ea8,29e7299a-ce80-497a-8102-615d0a001ea8,0,1,f9e48170-62eb-4d6b-b861-c7af1b4a38c3,f9e48170-62eb-4d6b-b861-c7af1b4a38c3,0,1,9bcc8f9a-ec12-45f2-8a32-6946d556f57a,9bcc8f9a-ec12-45f2-8a32-6946d556f57a,0,1,adc2cc11-b647-453f-a98e-8a73b7c368c7,adc2cc11-b647-453f-a98e-8a73b7c368c7,0,1,4522c564-61da-40da-a749-5312121a331d,4522c564-61da-40da-a749-5312121a331d,0,1,9394c709-6cbe-4ef6-bc8c-cba8af65821e,9394c709-6cbe-4ef6-bc8c-cba8af65821e,0,1,2943b572-7411-4f92-a6cc-7ee552b85223,2943b572-7411-4f92-a6cc-7ee552b85223,0,1,28478e7a-e8aa-40aa-866c-a3624f903141,28478e7a-e8aa-40aa-866c-a3624f903141,0,1,f692ab21-a8de-4feb-914f-4beef350543a,f692ab21-a8de-4feb-914f-4beef350543a,0,1,0ec0b1a0-5f0d-4a14-9a84-49098befa0af,0ec0b1a0-5f0d-4a14-9a84-49098befa0af,0,1,c644ab9b-7bcb-4bfa-b8ba-4c5f7689c91c,c644ab9b-7bcb-4bfa-b8ba-4c5f7689c91c,0,1,dabb3395-6100-4f53-913d-e0230e81b494,dabb3395-6100-4f53-913d-e0230e81b494,0,1,e0a3fae1-1582-4c7a-acd8-870b558acec4,e0a3fae1-1582-4c7a-acd8-870b558acec4,0,1,e9f393e5-04d3-4330-afb0-aa73caf0c5cd,e9f393e5-04d3-4330-afb0-aa73caf0c5cd,0,1,036868c2-e2c4-426b-8402-0d77b4224828,036868c2-e2c4-426b-8402-0d77b4224828,0,1,1bf18e24-8157-4aa4-b790-21c6535f5233,1bf18e24-8157-4aa4-b790-21c6535f5233,0,1,18470536-57df-48f0-9a85-68e4006558eb,18470536-57df-48f0-9a85-68e4006558eb,0,1,893e2f4c-b056-42ae-89fb-ecd90a53bb4c,893e2f4c-b056-42ae-89fb-ecd90a53bb4c,0,1,5eaaa3fd-3a87-4eaa-93a9-49337b19eddd,5eaaa3fd-3a87-4eaa-93a9-49337b19eddd,0,1,77ee9f6c-0be9-450f-978c-297626d6275b,77ee9f6c-0be9-450f-978c-297626d6275b,0,1,a63e6145-0d4b-4da2-9864-485a61e621df,a63e6145-0d4b-4da2-9864-485a61e621df,0,1,f29738d5-ad22-47bf-9053-497763674486,f29738d5-ad22-47bf-9053-497763674486,0,1,9c23d3bd-7a98-4d71-b9b0-78cda4ffb3ce,9c23d3bd-7a98-4d71-b9b0-78cda4ffb3ce,0,1,9aca958a-a938-4421-9e37-6606e02f7b77,9aca958a-a938-4421-9e37-6606e02f7b77,0,1,44109976-b763-4807-a013-9d04c3675bf3,44109976-b763-4807-a013-9d04c3675bf3,0,1,46127175-144d-438e-8fbe-c55ae0233620,46127175-144d-438e-8fbe-c55ae0233620,0,1,20754057-6397-4478-a484-74b8c2f243ee,20754057-6397-4478-a484-74b8c2f243ee,0,1,b8a06e8b-4581-4088-a5b4-a5d3330eab22,b8a06e8b-4581-4088-a5b4-a5d3330eab22,0,1,ea838b79-af81-4767-a8b1-fce68baa866a,ea838b79-af81-4767-a8b1-fce68baa866a,0,1,5e1056d0-6778-4030-8806-3dc90ffed318,5e1056d0-6778-4030-8806-3dc90ffed318,0,1,068e6f32-a2b6-4ade-9b9e-db3eac8b09c1,068e6f32-a2b6-4ade-9b9e-db3eac8b09c1,0,1,3701531a-b408-455f-a49d-652d3fcab4ef,3701531a-b408-455f-a49d-652d3fcab4ef,0,1,63e229aa-2638-45f1-9c5e-f821d9397ac3,63e229aa-2638-45f1-9c5e-f821d9397ac3,0,1,9e425f71-ef7d-4936-9f1b-7dceca99ca95,9e425f71-ef7d-4936-9f1b-7dceca99ca95,0,1,968ecea6-7d21-4e85-9d25-e8c6fe1b76cc,968ecea6-7d21-4e85-9d25-e8c6fe1b76cc,0,1,c6777ffe-1fb2-4807-8624-43f47a4e3947,c6777ffe-1fb2-4807-8624-43f47a4e3947,0,1,be42c5c6-b604-4180-a3d7-24b2348c8d5e,be42c5c6-b604-4180-a3d7-24b2348c8d5e,0,1,6223c072-bff3-4ea8-96a1-ac2a5bbe9f99,6223c072-bff3-4ea8-96a1-ac2a5bbe9f99,0,1,6fd083fe-a132-4f63-b38f-4891004aca8a,6fd083fe-a132-4f63-b38f-4891004aca8a,0,1,f9f021ca-8b3e-4d10-9538-1bce7e851fdd,f9f021ca-8b3e-4d10-9538-1bce7e851fdd,0,1,bb7cf0f8-56b0-4c0d-b206-79051ba83f6d,bb7cf0f8-56b0-4c0d-b206-79051ba83f6d,0,1,ab057ce4-ac51-4465-8aad-eadc9088c62d,ab057ce4-ac51-4465-8aad-eadc9088c62d,0,1,8842c0e3-2e20-4f37-ae7c-f5449004994b,8842c0e3-2e20-4f37-ae7c-f5449004994b,0,1,5b2cc44b-69cb-495c-a26b-003a495df40b,5b2cc44b-69cb-495c-a26b-003a495df40b,0,1,30250d93-10ff-45c9-920b-5fed3f9d8093,30250d93-10ff-45c9-920b-5fed3f9d8093,0,1,fc959221-6313-45d9-b2c4-85befaede226,fc959221-6313-45d9-b2c4-85befaede226,0,1,6ffa8536-7639-4e9a-9f6d-4eda71f5ca3b,6ffa8536-7639-4e9a-9f6d-4eda71f5ca3b,0,1,5206d407-ac91-477e-80e7-97c312da934c,5206d407-ac91-477e-80e7-97c312da934c,0,1,15b53eaa-cb35-4385-9515-c2ec6e1fdb4b,15b53eaa-cb35-4385-9515-c2ec6e1fdb4b,0,1,ccb8a530-260a-4488-b1d9-c67325c69bf4,ccb8a530-260a-4488-b1d9-c67325c69bf4,0,1,c869c1b7-3c04-4e5e-a033-d3f2fb0af03c,c869c1b7-3c04-4e5e-a033-d3f2fb0af03c,0,1,23f93492-59f5-491b-8708-45096934c7e6,23f93492-59f5-491b-8708-45096934c7e6,0,1,30f5471a-17fb-4184-9798-4f8e3ef0cccb,30f5471a-17fb-4184-9798-4f8e3ef0cccb,0,1,27abda4c-a43c-49b4-90cd-db780afe0c45,27abda4c-a43c-49b4-90cd-db780afe0c45,0,1,450a36cb-9bc1-4c5b-ae21-0e023f3eb951,450a36cb-9bc1-4c5b-ae21-0e023f3eb951,0,1,1a28db16-d410-4101-bf31-21cefa880dae,1a28db16-d410-4101-bf31-21cefa880dae,0,1,2b85bcf6-85b0-4efb-bada-b65414a8d264,2b85bcf6-85b0-4efb-bada-b65414a8d264,0,1,cf027de4-59c9-4b8f-9695-b1d4d16548fe,cf027de4-59c9-4b8f-9695-b1d4d16548fe,0,1,d33ceaee-a374-40a3-9406-cbcbf82fd8ae,d33ceaee-a374-40a3-9406-cbcbf82fd8ae,0,1,0b13cad5-91ae-4cd1-a620-9a315ae8024c,0b13cad5-91ae-4cd1-a620-9a315ae8024c,0,1,d0634a8e-676f-4f49-9a38-7cb80cfa9fdf,d0634a8e-676f-4f49-9a38-7cb80cfa9fdf,0,1,59bb5271-4cc7-45aa-8e2a-f556a4afa2dc,59bb5271-4cc7-45aa-8e2a-f556a4afa2dc,0,1,81dd61e5-fe02-4272-a525-affda9b606ca,81dd61e5-fe02-4272-a525-affda9b606ca,0,1,8de7b423-b7d1-46fe-b1dc-fb936736b864,8de7b423-b7d1-46fe-b1dc-fb936736b864,0,1,f565876c-0326-4b12-895e-c248b9e64115,f565876c-0326-4b12-895e-c248b9e64115,0,1,62f075c5-1ad0-4a29-9f40-567b9fa70cdf,62f075c5-1ad0-4a29-9f40-567b9fa70cdf,0,1,88cefe4a-a6c5-4753-935e-f956d9de9f77,88cefe4a-a6c5-4753-935e-f956d9de9f77,0,1,882e78b7-90bd-4b95-8852-146bdb51ec15,882e78b7-90bd-4b95-8852-146bdb51ec15,0,1,ae4435c3-62c0-4f08-b526-7f9571eed8ae,ae4435c3-62c0-4f08-b526-7f9571eed8ae,0,1,0f6f8fd9-b3af-4d06-bc47-bdad238d15b7,0f6f8fd9-b3af-4d06-bc47-bdad238d15b7,0,1,460e76d2-4ed6-464e-bf9c-a6bcf920aaf2,460e76d2-4ed6-464e-bf9c-a6bcf920aaf2,0,1,80c23bf0-cef0-4d07-a017-d90635f8041d,80c23bf0-cef0-4d07-a017-d90635f8041d,0,1,47a24216-3299-470b-a18c-d8c1258fff24,47a24216-3299-470b-a18c-d8c1258fff24,0,1,72dcfd46-491e-4f88-a0ea-57919f8fbdea,72dcfd46-491e-4f88-a0ea-57919f8fbdea,0,1,fa7a11cc-7ee0-4550-8d0d-9c7464d57a37,fa7a11cc-7ee0-4550-8d0d-9c7464d57a37,0,1,8317ac49-890d-4921-8c0d-1bfc676f0b40,8317ac49-890d-4921-8c0d-1bfc676f0b40,0,1,9dfb5735-6cc7-4525-b57d-04f9c798fac4,9dfb5735-6cc7-4525-b57d-04f9c798fac4,0,1,f9161bc3-9a1c-4870-8681-8e97d8ce838a,f9161bc3-9a1c-4870-8681-8e97d8ce838a,0,1,5e53ccc6-5ab4-4f9d-b524-0081d345d7a2,5e53ccc6-5ab4-4f9d-b524-0081d345d7a2,0,1,c3b3805b-3501-47a7-b280-46180049b235,c3b3805b-3501-47a7-b280-46180049b235,0,1,29af05c2-37de-495b-b3cf-477d452abe5e,29af05c2-37de-495b-b3cf-477d452abe5e,0,1,0c732569-a50f-4be3-a214-0843c6a3da47,0c732569-a50f-4be3-a214-0843c6a3da47,0,1,5e922083-0ceb-449a-8201-7dd27a46f2fc,5e922083-0ceb-449a-8201-7dd27a46f2fc,0,1,d97e78c7-f2c1-4e0e-9c9b-d2dd6a94da22,d97e78c7-f2c1-4e0e-9c9b-d2dd6a94da22,0,1,e757303e-c61a-4e42-9829-c5a36dba9414,e757303e-c61a-4e42-9829-c5a36dba9414,0,1,091de87c-0801-4bd3-aaaa-ed37bc4cd161,091de87c-0801-4bd3-aaaa-ed37bc4cd161,0,1,9a6bfcbe-6ac7-4839-bfb9-a11b97e64185,9a6bfcbe-6ac7-4839-bfb9-a11b97e64185,0,1,b53c545c-3b1c-4315-a213-4f2b2c7128aa,b53c545c-3b1c-4315-a213-4f2b2c7128aa,0,1,02a84df9-2171-43e6-8135-a74edd384826,02a84df9-2171-43e6-8135-a74edd384826,0,1,ff36356d-cb1d-4316-896a-c6ae83b92437,ff36356d-cb1d-4316-896a-c6ae83b92437,0,1,465cce6a-7064-4b0a-932c-40f842042f33,465cce6a-7064-4b0a-932c-40f842042f33,0,1,f9cd82e7-8252-4bb6-8e08-23ab45ed3976,f9cd82e7-8252-4bb6-8e08-23ab45ed3976,0,1,e67dff00-92e2-4f58-a950-d5bbca9291c5,e67dff00-92e2-4f58-a950-d5bbca9291c5,0,1,e1964724-804a-4ecc-be9e-5b84e58f2b84,e1964724-804a-4ecc-be9e-5b84e58f2b84,0,1,46e961c2-cd45-4d76-a6ad-c1d5c8dc95cc,46e961c2-cd45-4d76-a6ad-c1d5c8dc95cc,0,1,bf3cb513-2856-472b-8713-7bf8ba70cdce,bf3cb513-2856-472b-8713-7bf8ba70cdce,0,1,de4815c8-0853-47e0-862b-b60119c674f6,de4815c8-0853-47e0-862b-b60119c674f6,0,1,dbe02a79-3179-42bb-a8e8-dd9bf3ff705c,dbe02a79-3179-42bb-a8e8-dd9bf3ff705c,0,1,8f17ec3f-6d62-46b8-baef-b20430e948ce,8f17ec3f-6d62-46b8-baef-b20430e948ce,0,1,ea1298d0-9396-4a50-b83e-24064e8dd99d,ea1298d0-9396-4a50-b83e-24064e8dd99d,0,1,038dbb00-e4c6-4e64-b861-3a0764f54ab3,038dbb00-e4c6-4e64-b861-3a0764f54ab3,0,1,1c291f7d-a493-4297-8aaa-912896800066,1c291f7d-a493-4297-8aaa-912896800066,0,1,69149801-a825-4ed2-b077-c26660dff271,69149801-a825-4ed2-b077-c26660dff271,0,1,12146ed3-c159-4d6b-ae1a-1ecd30e5a87e,12146ed3-c159-4d6b-ae1a-1ecd30e5a87e,0,1,518ab687-b84a-40c8-8547-aee4257c1b71,518ab687-b84a-40c8-8547-aee4257c1b71,0,1,5cec0949-bfe8-4f7e-98c1-0c402be3ea09,5cec0949-bfe8-4f7e-98c1-0c402be3ea09,0,1,7732ef07-16eb-46a0-9645-7de95c5482af,7732ef07-16eb-46a0-9645-7de95c5482af,0,1,75dac536-b316-4b04-a57b-03656c678bec,75dac536-b316-4b04-a57b-03656c678bec,0,1,a07d6c85-159d-4d09-b117-561a1e20329f,a07d6c85-159d-4d09-b117-561a1e20329f,0,1,8a2f9733-4f83-41f2-9d74-dca7161a4b41,8a2f9733-4f83-41f2-9d74-dca7161a4b41,0,1,fbd2d900-1e0d-48f3-9793-0186ee49915c,fbd2d900-1e0d-48f3-9793-0186ee49915c,0,1,8ede4c18-ebf0-4c39-9e82-c59df8d62ca7,8ede4c18-ebf0-4c39-9e82-c59df8d62ca7,0,1,8a50e7f2-97a9-4ed8-a46f-6413f7fcf8cd,8a50e7f2-97a9-4ed8-a46f-6413f7fcf8cd,0,1,b2c200a7-b9cc-4d84-b839-e69f2a14a8f5,b2c200a7-b9cc-4d84-b839-e69f2a14a8f5,0,1,4a69a70d-1b4c-4999-a3dd-ae1deb331fea,4a69a70d-1b4c-4999-a3dd-ae1deb331fea,0,1,3a36e0f5-a645-47f1-99ae-5b0493d604ad,3a36e0f5-a645-47f1-99ae-5b0493d604ad,0,1,57f762f7-b8e4-498b-a3dc-3d40c94855ec,57f762f7-b8e4-498b-a3dc-3d40c94855ec,0,1,ca7d4086-de35-40fd-af65-73369d452135,ca7d4086-de35-40fd-af65-73369d452135,0,1,563c0f5c-e0b4-4229-a3f6-183091060aa4,563c0f5c-e0b4-4229-a3f6-183091060aa4,0,1,bf967588-ea8f-49a3-9331-af2331ffa162,bf967588-ea8f-49a3-9331-af2331ffa162,0,1,5083530c-9a24-4def-99c1-6eb9514e9b33,5083530c-9a24-4def-99c1-6eb9514e9b33,0,1,d59c2725-5d98-495e-9f86-f5d38dbfad90,d59c2725-5d98-495e-9f86-f5d38dbfad90,0,1,176f8835-73d2-4fbe-9d2a-0a4c79d3b871,176f8835-73d2-4fbe-9d2a-0a4c79d3b871,0,1,0ba68198-983d-409b-be27-96f1572b3f12,0ba68198-983d-409b-be27-96f1572b3f12,0,1,9cd1e8dd-e2be-48a9-b32d-43688e1748bc,9cd1e8dd-e2be-48a9-b32d-43688e1748bc,0,1,decb27a8-7dd3-4601-a694-30429e638b39,decb27a8-7dd3-4601-a694-30429e638b39,0,1,922ac6c0-a6a8-444e-9aad-27dc0f49b32e,922ac6c0-a6a8-444e-9aad-27dc0f49b32e,0,1,d7a128e4-f31f-4b09-8424-e816ab59d5c3,d7a128e4-f31f-4b09-8424-e816ab59d5c3,0,1,0ce6e252-8d6e-4bfe-b8cc-daf3434fa51e,0ce6e252-8d6e-4bfe-b8cc-daf3434fa51e,0,1,aa9513b4-f575-4030-a7f9-ac09aa319e98,aa9513b4-f575-4030-a7f9-ac09aa319e98,0,1,f01afc5e-91b8-4cc2-b63a-c245e5e36d01,f01afc5e-91b8-4cc2-b63a-c245e5e36d01,0,1,028cbc0e-023d-40ad-86c3-5e6f8dc96c57,028cbc0e-023d-40ad-86c3-5e6f8dc96c57,0,1,d03f66b1-48a3-434b-bb58-9fd53c183514,d03f66b1-48a3-434b-bb58-9fd53c183514,0,1,a469e55e-d7ca-4c27-b350-fafe7364c18f,a469e55e-d7ca-4c27-b350-fafe7364c18f,0,1,b09fc04b-94d8-4dea-bf6c-24370f231274,b09fc04b-94d8-4dea-bf6c-24370f231274,0,1,e669a5cd-daf3-4a88-a2c0-380db496a4dd,e669a5cd-daf3-4a88-a2c0-380db496a4dd,0,1,177710c8-2441-4436-a096-64c27aa7aec5,177710c8-2441-4436-a096-64c27aa7aec5,0,1,ab143db8-185b-4093-a3b1-c65322cb8fd6,ab143db8-185b-4093-a3b1-c65322cb8fd6,0,1,e3ce5882-541e-4620-9c24-f00deacc33c2,e3ce5882-541e-4620-9c24-f00deacc33c2,0,1,c9694243-390e-4217-8996-b33924c4fe60,c9694243-390e-4217-8996-b33924c4fe60,0,1,8e08ea9b-8c63-475a-9335-c8edc6214555,8e08ea9b-8c63-475a-9335-c8edc6214555,0,1,19bd6152-7e9c-4710-80c3-c6aa399fe4e9,19bd6152-7e9c-4710-80c3-c6aa399fe4e9,0,1,72846fcc-a9ab-4393-9133-38c1805abab1,72846fcc-a9ab-4393-9133-38c1805abab1,0,1,91a81670-9124-4b65-aecd-77f252249030,91a81670-9124-4b65-aecd-77f252249030,0,1,ed2e5344-9261-4473-86a5-f914b8458cfc,ed2e5344-9261-4473-86a5-f914b8458cfc,0,1,4ff32c59-4ca5-4e60-b54c-f46f757758e2,4ff32c59-4ca5-4e60-b54c-f46f757758e2,0,1,acbc674d-d053-43f4-9d62-86fbbb962ee2,acbc674d-d053-43f4-9d62-86fbbb962ee2,0,1,e0608801-124b-4c52-9a17-9072eb5b676c,e0608801-124b-4c52-9a17-9072eb5b676c,0,1,64e3295e-89c6-4b09-8dc4-b552da47db84,64e3295e-89c6-4b09-8dc4-b552da47db84,0,1,2c1846a5-09f2-414b-b95c-67ed7432ce0e,2c1846a5-09f2-414b-b95c-67ed7432ce0e,0,1,ce339ae7-a794-425b-8d5f-b04fd4b21364,ce339ae7-a794-425b-8d5f-b04fd4b21364,0,1,3ad5d8a7-3071-46aa-aebf-306bdb67983b,3ad5d8a7-3071-46aa-aebf-306bdb67983b,0,1,ab7ef662-71c1-4d51-9f0f-ea8c5ea3df8a,ab7ef662-71c1-4d51-9f0f-ea8c5ea3df8a,0,1,cb954476-c551-4a06-9bcd-18d67ba47dc8,cb954476-c551-4a06-9bcd-18d67ba47dc8,0,1,79201015-bfae-463e-81f1-0ae2d3066f3f,79201015-bfae-463e-81f1-0ae2d3066f3f,0,1,bed8af4e-fa3a-4b25-ba6e-5b7b4a6cd363,bed8af4e-fa3a-4b25-ba6e-5b7b4a6cd363,0,1,951927d4-7bfc-4edb-b97f-dcc29a937400,951927d4-7bfc-4edb-b97f-dcc29a937400,0,1,71309e88-d514-40f3-a329-b2a420e75504,71309e88-d514-40f3-a329-b2a420e75504,0,1,1ea3178b-73dd-4063-9140-c61687a4b1b8,1ea3178b-73dd-4063-9140-c61687a4b1b8,0,1,85fd7ef4-2886-4e2c-a6eb-63d0b0b9cd55,85fd7ef4-2886-4e2c-a6eb-63d0b0b9cd55,0,1,696723be-7b4f-4321-956e-eff07ea9f5fa,696723be-7b4f-4321-956e-eff07ea9f5fa,0,1,616c27dc-5c59-4469-97a7-27e0752bd3a7,616c27dc-5c59-4469-97a7-27e0752bd3a7,0,1,f7323121-74bc-441c-a3e9-dd5cb4f0accd,f7323121-74bc-441c-a3e9-dd5cb4f0accd,0,1,fddfb2fd-4d58-4bc6-b196-720425a8c029,fddfb2fd-4d58-4bc6-b196-720425a8c029,0,1,ce075cf1-1778-4671-aa40-166e6c41adc8,ce075cf1-1778-4671-aa40-166e6c41adc8,0,1,eddb111f-7622-44a3-b7d8-97faec67b23c,eddb111f-7622-44a3-b7d8-97faec67b23c,0,1,84872892-842e-4d7d-a3cd-576c42343a7a,84872892-842e-4d7d-a3cd-576c42343a7a,0,1,78ad6047-473d-494b-a2ba-81e062b567e6,78ad6047-473d-494b-a2ba-81e062b567e6,0,1,bb264e83-49f4-4b7a-8be2-094712fc0640,bb264e83-49f4-4b7a-8be2-094712fc0640,0,1,07bf650d-e61e-44f3-9643-6ffc95b913fb,07bf650d-e61e-44f3-9643-6ffc95b913fb,0,1,5c68c57a-31d6-4ae9-855f-3fbc57922e39,5c68c57a-31d6-4ae9-855f-3fbc57922e39,0,1,6b90ed05-813c-4324-8a69-02c2268856b2,6b90ed05-813c-4324-8a69-02c2268856b2,0,1,081ed48d-cb87-459d-97d6-9af121edbabb,081ed48d-cb87-459d-97d6-9af121edbabb,0,1,6c4074b2-f631-451d-b412-1c8c096a71b1,6c4074b2-f631-451d-b412-1c8c096a71b1,0,1,f9931a20-8391-4b13-8c6d-1836f2492e53,f9931a20-8391-4b13-8c6d-1836f2492e53,0,1,c6eec20b-13b9-44a0-968f-1325680c399b,c6eec20b-13b9-44a0-968f-1325680c399b,0,1,02fbf083-1bdd-4900-9dc1-62f415b792a4,02fbf083-1bdd-4900-9dc1-62f415b792a4,0,1,35454c2d-7088-487b-abb3-f95f2dfdcffa,35454c2d-7088-487b-abb3-f95f2dfdcffa,0,1,2c2526c1-bdf8-4115-bdff-3e79d28321cb,2c2526c1-bdf8-4115-bdff-3e79d28321cb,0,1,4f4da2e9-37ab-4505-b3b1-4b3a908f38c2,4f4da2e9-37ab-4505-b3b1-4b3a908f38c2,0,1,95ab774f-27fa-4bd4-a422-0f997f632679,95ab774f-27fa-4bd4-a422-0f997f632679,0,1,ee3ad891-b7d6-439d-892b-de2f3399d147,ee3ad891-b7d6-439d-892b-de2f3399d147,0,1,4af0f1ee-42cb-47bd-99d0-99deb70e9f82,4af0f1ee-42cb-47bd-99d0-99deb70e9f82,0,1,a2ae0338-ed11-422a-8442-f6c4002ddf0d,a2ae0338-ed11-422a-8442-f6c4002ddf0d,0,1,eb59c9c3-6043-401c-87cc-ba7620139d6a,eb59c9c3-6043-401c-87cc-ba7620139d6a,0,1,2b5ce871-8630-4f2f-9ccb-d9f863886420,2b5ce871-8630-4f2f-9ccb-d9f863886420,0,1,86ae353e-7eed-434c-b4ab-cede36e462bc,86ae353e-7eed-434c-b4ab-cede36e462bc,0,1,18e65717-738b-4d39-9c85-676bca15e6b7,18e65717-738b-4d39-9c85-676bca15e6b7,0,1,0cc63813-cf16-4a99-b3bd-18a773091230,0cc63813-cf16-4a99-b3bd-18a773091230,0,1,4fc00971-c980-468a-9690-5cd520d12eb0,4fc00971-c980-468a-9690-5cd520d12eb0,0,1,85972c27-4f39-4982-9307-7877e87ef87b,85972c27-4f39-4982-9307-7877e87ef87b,0,1,96afdffb-7595-4c49-9e86-8296f50bd2f5,96afdffb-7595-4c49-9e86-8296f50bd2f5,0,1,823d5b5e-e9bf-40f0-9dcd-579bb53847bb,823d5b5e-e9bf-40f0-9dcd-579bb53847bb,0,1,e125d3e0-950f-42ee-8904-bd26091afa55,e125d3e0-950f-42ee-8904-bd26091afa55,0,1,2b4797a5-074a-4a01-b99f-1c5590cfde40,2b4797a5-074a-4a01-b99f-1c5590cfde40,0,1,718e53d2-24ec-40fb-9def-825441ada46c,718e53d2-24ec-40fb-9def-825441ada46c,0,1,4c0a7fd6-8f09-41d6-949f-65ce708c1256,4c0a7fd6-8f09-41d6-949f-65ce708c1256,0,1,792abc06-b52a-4691-ba92-96ed73ca702a,792abc06-b52a-4691-ba92-96ed73ca702a,0,1,148dbe44-86d1-4362-b9db-8ff68cd2b34d,148dbe44-86d1-4362-b9db-8ff68cd2b34d,0,1,1fbc893e-3000-4fac-88f5-c82251835d65,1fbc893e-3000-4fac-88f5-c82251835d65,0,1,05852816-63ec-4179-abca-66372bbfb04c,05852816-63ec-4179-abca-66372bbfb04c,0,1,0165f721-b011-4524-bfd5-81e35092f2be,0165f721-b011-4524-bfd5-81e35092f2be,0,1,e74925d4-1979-4600-8560-0932d26450ad,e74925d4-1979-4600-8560-0932d26450ad,0,1,aa108131-151d-4356-8a24-345e4ec74281,aa108131-151d-4356-8a24-345e4ec74281,0,1,284b77a8-d9f4-44c4-a2dc-91c1f8bd5808,284b77a8-d9f4-44c4-a2dc-91c1f8bd5808,0,1,e3251f1a-3c80-4c86-9960-270920bd512f,e3251f1a-3c80-4c86-9960-270920bd512f,0,1,3c3d5474-977b-4df9-88de-042e997bd10d,3c3d5474-977b-4df9-88de-042e997bd10d,0,1,4b88d172-5a44-4011-bb38-e94bf7a9c879,4b88d172-5a44-4011-bb38-e94bf7a9c879,0,1,3bced2d4-e3d7-4489-a26d-f84620b096f4,3bced2d4-e3d7-4489-a26d-f84620b096f4,0,1,6d015113-1e32-4f5e-aacd-8134d7307125,6d015113-1e32-4f5e-aacd-8134d7307125,0,1,58230238-d2f2-422e-90cb-de355996eb19,58230238-d2f2-422e-90cb-de355996eb19,0,1,3d907678-628d-4fb2-85c2-149839024c08,3d907678-628d-4fb2-85c2-149839024c08,0,1,71384d10-6acf-4139-b766-cb8b5796f1a7,71384d10-6acf-4139-b766-cb8b5796f1a7,0,1,a8f149d7-e9bc-4695-b4f4-88434e31aafb,a8f149d7-e9bc-4695-b4f4-88434e31aafb,0,1,10dcbcc6-7793-4da7-a9a5-e4f124209d3e,10dcbcc6-7793-4da7-a9a5-e4f124209d3e,0,1,11ba510f-cb57-43d0-9897-c49e10b67ccd,11ba510f-cb57-43d0-9897-c49e10b67ccd,0,1,9d92af67-c88d-4429-9e85-0b5bf04c4b79,9d92af67-c88d-4429-9e85-0b5bf04c4b79,0,1,b009bc99-ea12-46db-a7f8-cb3e285b20d0,b009bc99-ea12-46db-a7f8-cb3e285b20d0,0,1,43523bbb-c923-4a20-bcb5-50d30cc826ee,43523bbb-c923-4a20-bcb5-50d30cc826ee,0,1,c89d9aad-3364-45df-88b5-b23ae76edbba,c89d9aad-3364-45df-88b5-b23ae76edbba,0,1,9a2f2cd1-4c9f-460b-b3b7-64706a0164ab,9a2f2cd1-4c9f-460b-b3b7-64706a0164ab,0,1,7e4b9dce-e332-4d35-8b5f-d3f88918989d,7e4b9dce-e332-4d35-8b5f-d3f88918989d,0,1,96fe619a-b819-4f96-9788-e1f4ef57833a,96fe619a-b819-4f96-9788-e1f4ef57833a,0,1,94dff2da-f721-411a-9fc0-5d013b685dcc,94dff2da-f721-411a-9fc0-5d013b685dcc,0,1,9343fc5f-7b08-4be5-8cd5-dbed635b819d,9343fc5f-7b08-4be5-8cd5-dbed635b819d,0,1,99e87e66-1b07-451b-a476-f5213cbd7150,99e87e66-1b07-451b-a476-f5213cbd7150,0,1,c3317f75-f6ad-41f6-97f1-77074c3ff62a,c3317f75-f6ad-41f6-97f1-77074c3ff62a,0,1,8800dec9-84f8-4643-8742-1d76fe575f58,8800dec9-84f8-4643-8742-1d76fe575f58,0,1,62903794-3b41-4d21-b800-1c26dbeda3ce,62903794-3b41-4d21-b800-1c26dbeda3ce,0,1,9bda4a0b-e8a7-4acf-9f07-4033b3a84ebc,9bda4a0b-e8a7-4acf-9f07-4033b3a84ebc,0,1,4ba2e55e-29bc-4fbe-83e8-8bfa36abfdab,4ba2e55e-29bc-4fbe-83e8-8bfa36abfdab,0,1,93de88de-0069-4aa8-96b2-d5709e4def2f,93de88de-0069-4aa8-96b2-d5709e4def2f,0,1,9f94fadf-ac9d-4e57-9fe4-41ce8cfbec6a,9f94fadf-ac9d-4e57-9fe4-41ce8cfbec6a,0,1,12d4ffc8-592e-42a7-b8c6-20bd58f6da90,12d4ffc8-592e-42a7-b8c6-20bd58f6da90,0,1,3a8d9010-8785-4d8d-b908-b821d7d681c9,3a8d9010-8785-4d8d-b908-b821d7d681c9,0,1,2568a935-ea49-4b99-aa9c-de27de6a0e81,2568a935-ea49-4b99-aa9c-de27de6a0e81,0,1,de2bdd4f-93f2-4341-86d6-7082fc286a5c,de2bdd4f-93f2-4341-86d6-7082fc286a5c,0,1,ba96ec0e-931e-45be-a782-e68ba4fedddb,ba96ec0e-931e-45be-a782-e68ba4fedddb,0,1,9af5882f-3a42-4fae-83df-6aa8de577112,9af5882f-3a42-4fae-83df-6aa8de577112,0,1,79bc5e39-3017-48bf-8e42-fa34e8b581ef,79bc5e39-3017-48bf-8e42-fa34e8b581ef,0,1,fe6e207f-d306-4470-8441-ffd3f3710d31,fe6e207f-d306-4470-8441-ffd3f3710d31,0,1,7451af80-7387-4e8d-a3da-2ae0540c3fd4,7451af80-7387-4e8d-a3da-2ae0540c3fd4,0,1,1c1e01f2-b2b3-480d-ae51-2db27b82dedd,1c1e01f2-b2b3-480d-ae51-2db27b82dedd,0,1,df459525-4e4d-4819-b996-5a6379b22a88,df459525-4e4d-4819-b996-5a6379b22a88,0,1,ed1d69f4-b09f-430a-bb2e-a23fe4dedf6b,ed1d69f4-b09f-430a-bb2e-a23fe4dedf6b,0,1,e67b4a32-4bac-450e-be6d-88c262383f31,e67b4a32-4bac-450e-be6d-88c262383f31,0,1,8b83bb54-4c23-4bd8-bd00-374a7a101cfa,8b83bb54-4c23-4bd8-bd00-374a7a101cfa,0,1,6c4c3eca-8b02-451b-af52-93073c3da146,6c4c3eca-8b02-451b-af52-93073c3da146,0,1,095c281c-3903-465d-baea-af1e6abf8019,095c281c-3903-465d-baea-af1e6abf8019,0,1,440d115d-a769-427e-891a-88d65fba2057,440d115d-a769-427e-891a-88d65fba2057,0,1,f7932210-027e-4fad-b7f7-3530789ce803,f7932210-027e-4fad-b7f7-3530789ce803,0,1,7bbfd95e-39a1-485b-930f-c9210c18dcd0,7bbfd95e-39a1-485b-930f-c9210c18dcd0,0,1,4975d3d6-b5a2-41c6-973b-6817013a388d,4975d3d6-b5a2-41c6-973b-6817013a388d,0,1,18ebc799-9724-4ffb-855e-b09a0723869e,18ebc799-9724-4ffb-855e-b09a0723869e,0,1,a06b8ef5-83e6-4fc6-91e1-256004134d69,a06b8ef5-83e6-4fc6-91e1-256004134d69,0,1,1d6a68ec-917f-4c3b-b970-797a6921cbc9,1d6a68ec-917f-4c3b-b970-797a6921cbc9,0,1,ae29eb40-5c8f-4ab4-8556-f98d45e8effe,ae29eb40-5c8f-4ab4-8556-f98d45e8effe,0,1,5b663988-3599-46dc-8d59-4c82ceac537c,5b663988-3599-46dc-8d59-4c82ceac537c,0,1,0f5f136c-688b-491e-a72b-3d9c2e609f0e,0f5f136c-688b-491e-a72b-3d9c2e609f0e,0,1,5573b405-6ac4-4632-b8d6-5d1cbdb63b97,5573b405-6ac4-4632-b8d6-5d1cbdb63b97,0,1,679cc0df-df5c-4c33-8c64-c0b6cee39116,679cc0df-df5c-4c33-8c64-c0b6cee39116,0,1,b156752b-f25c-4f35-9474-8ac3636597f5,b156752b-f25c-4f35-9474-8ac3636597f5,0,1,b67b872e-236a-4ea7-9838-0827234867b4,b67b872e-236a-4ea7-9838-0827234867b4,0,1,1e5ced23-48a7-4f3c-aa3b-78399a2b9e2b,1e5ced23-48a7-4f3c-aa3b-78399a2b9e2b,0,1,ce422d4f-1221-4ebf-a801-975a3220a226,ce422d4f-1221-4ebf-a801-975a3220a226,0,1,8735949b-f259-48b9-97e9-a81dfc7dcc8d,8735949b-f259-48b9-97e9-a81dfc7dcc8d,0,1,b8810612-dc7a-4a45-a83c-163a8669b578,b8810612-dc7a-4a45-a83c-163a8669b578,0,1,00e4dc17-b984-4f45-8b42-2e6a7a5dbced,00e4dc17-b984-4f45-8b42-2e6a7a5dbced,0,1,349c3dc3-0729-41f3-983f-3b13170c6509,349c3dc3-0729-41f3-983f-3b13170c6509,0,1,8281df26-4bde-47ba-926e-f22a8042bf1f,8281df26-4bde-47ba-926e-f22a8042bf1f,0,1,7278fb66-1d48-4c1d-bd15-425f78ad0c32,7278fb66-1d48-4c1d-bd15-425f78ad0c32,0,1,6893007f-8354-4b3b-b205-7c7d385cbde0,6893007f-8354-4b3b-b205-7c7d385cbde0,0,1,d74365a3-b434-41d0-84a7-543c336b5880,d74365a3-b434-41d0-84a7-543c336b5880,0,1,3d42502a-5705-49d7-b4ed-29edbd6306bc,3d42502a-5705-49d7-b4ed-29edbd6306bc,0,1,221e24e6-b31c-45b6-8835-2ad08d595c5f,221e24e6-b31c-45b6-8835-2ad08d595c5f,0,1,fd0fa6c9-1f42-4907-a266-fe7b6847e58a,fd0fa6c9-1f42-4907-a266-fe7b6847e58a,0,1,2e8cbcd7-f5b5-471e-863a-e09b4bc8e163,2e8cbcd7-f5b5-471e-863a-e09b4bc8e163,0,1,55956063-b227-4c74-8d9c-4a62b4f0dbc7,55956063-b227-4c74-8d9c-4a62b4f0dbc7,0,1,b6871b83-7269-43a9-b9a6-a195ff93365d,b6871b83-7269-43a9-b9a6-a195ff93365d,0,1,7dcd627c-16f6-41f9-b474-590ad1c7d2ed,7dcd627c-16f6-41f9-b474-590ad1c7d2ed,0,1,0cf89f30-e702-4c9e-8af4-888634463b99,0cf89f30-e702-4c9e-8af4-888634463b99,0,1,77f890ac-3c9c-4043-a5b7-12158772bcf5,77f890ac-3c9c-4043-a5b7-12158772bcf5,0,1,2bc734f9-8c0d-473a-b1c3-340395069501,2bc734f9-8c0d-473a-b1c3-340395069501,0,1,316c3933-21dd-4e8a-9450-0900e85ef7e2,316c3933-21dd-4e8a-9450-0900e85ef7e2,0,1,994fe78b-9f61-4aaf-9355-fafcae6b816d,994fe78b-9f61-4aaf-9355-fafcae6b816d,0,1,8448f07b-751b-4670-b44c-3564e81e5cdc,8448f07b-751b-4670-b44c-3564e81e5cdc,0,1,17aadd5f-cda2-4785-a07f-3ab4b04434a6,17aadd5f-cda2-4785-a07f-3ab4b04434a6,0,1,71bc35e6-0fec-4e54-af2d-23d1357d1c3b,71bc35e6-0fec-4e54-af2d-23d1357d1c3b,0,1,1832336e-32f6-42c4-9087-8614ead52bb3,1832336e-32f6-42c4-9087-8614ead52bb3,0,1,ff9f7b5c-70f4-4eed-8216-64448e7da76f,ff9f7b5c-70f4-4eed-8216-64448e7da76f,0,1,44ac2869-990d-4cac-a14b-c1a28854341e,44ac2869-990d-4cac-a14b-c1a28854341e,0,1,d5df31c3-89f9-469c-80a9-fb4706d30bc4,d5df31c3-89f9-469c-80a9-fb4706d30bc4,0,1,e73a6a9d-8ddd-4531-9f17-745117d9da9b,e73a6a9d-8ddd-4531-9f17-745117d9da9b,0,1,9dd4e17c-d10b-435e-8665-08997edc3e7e,9dd4e17c-d10b-435e-8665-08997edc3e7e,0,1,cafd44e1-8509-4550-8329-ff8cab0c31ae,cafd44e1-8509-4550-8329-ff8cab0c31ae,0,1,ee0412d3-58e7-4715-8774-d49778e1ef73,ee0412d3-58e7-4715-8774-d49778e1ef73,0,1,ea31df21-1402-417a-9788-b17a7116e842,ea31df21-1402-417a-9788-b17a7116e842,0,1,7a93efb9-62bb-437a-8095-b26a2c8ce8ed,7a93efb9-62bb-437a-8095-b26a2c8ce8ed,0,1,e964753f-7f4c-4f9f-bd17-cdac317c1d35,e964753f-7f4c-4f9f-bd17-cdac317c1d35,0,1,20c2aba0-e2b2-4e4f-9d48-1515c0ae7b4d,20c2aba0-e2b2-4e4f-9d48-1515c0ae7b4d,0,1,43c22498-3fd6-4038-a291-05f0db9ab66a,43c22498-3fd6-4038-a291-05f0db9ab66a,0,1,4ffc9d16-c450-4ecb-b8f6-9ec6fe37fc75,4ffc9d16-c450-4ecb-b8f6-9ec6fe37fc75,0,1,ee6e5e56-5848-46b6-89bf-b9345a57d94c,ee6e5e56-5848-46b6-89bf-b9345a57d94c,0,1,8817c872-bdee-4577-bcc3-4046edc72803,8817c872-bdee-4577-bcc3-4046edc72803,0,1,5b88c214-4e4e-45c2-b8c5-14eb852e9900,5b88c214-4e4e-45c2-b8c5-14eb852e9900,0,1,105cd740-1f60-45e1-871c-adeecd291b0d,105cd740-1f60-45e1-871c-adeecd291b0d,0,1,95aec7d2-179b-4ea3-a3df-3d737b713564,95aec7d2-179b-4ea3-a3df-3d737b713564,0,1,4bd1cae4-d5b5-444e-9cf5-67a969714293,4bd1cae4-d5b5-444e-9cf5-67a969714293,0,1,b1a330d7-9b88-44e9-aba6-41ce5e5e669c,b1a330d7-9b88-44e9-aba6-41ce5e5e669c,0,1,f279a625-b88f-43b4-bce9-de1186fe7d7e,f279a625-b88f-43b4-bce9-de1186fe7d7e,0,1,99fc224a-2a61-441a-85e9-d69df6aa8b5e,99fc224a-2a61-441a-85e9-d69df6aa8b5e,0,1,a528c26f-3ceb-4ae4-8420-edfbdea6e1ac,a528c26f-3ceb-4ae4-8420-edfbdea6e1ac,0,1,d009782b-d73e-42d1-9979-2cbaf20ee98e,d009782b-d73e-42d1-9979-2cbaf20ee98e,0,1,1ef6282c-ae81-4d76-8e3e-99fec58fc7bd,1ef6282c-ae81-4d76-8e3e-99fec58fc7bd,0,1,88d8edf7-654f-4627-b68d-c7e929726da6,88d8edf7-654f-4627-b68d-c7e929726da6,0,1,483720db-6c9e-4179-b5c7-56159c9b6073,483720db-6c9e-4179-b5c7-56159c9b6073,0,1,1725c619-9c4a-40ac-9044-00fee71945a4,1725c619-9c4a-40ac-9044-00fee71945a4,0,1,45a85e25-7c33-4ff5-87a0-2a0b4cda8130,45a85e25-7c33-4ff5-87a0-2a0b4cda8130,0,1,e95b126d-797d-4071-b7b4-b14aaf595f2d,e95b126d-797d-4071-b7b4-b14aaf595f2d,0,1,9241ea3c-633f-4469-9e70-c5a20e464da8,9241ea3c-633f-4469-9e70-c5a20e464da8,0,1,bbadbe1b-cb33-4cc5-84c8-a4fdfc8a2247,bbadbe1b-cb33-4cc5-84c8-a4fdfc8a2247,0,1,961ae0fb-7f7b-414d-8fbf-32b893b41085,961ae0fb-7f7b-414d-8fbf-32b893b41085,0,1,10adf8c8-6f5f-477f-b244-4452b774b766,10adf8c8-6f5f-477f-b244-4452b774b766,0,1,ac9dcb8c-d4f5-4f0d-affb-e4187eafdf14,ac9dcb8c-d4f5-4f0d-affb-e4187eafdf14,0,1,04ec5e44-8469-4e9c-8021-83d258f2ec54,04ec5e44-8469-4e9c-8021-83d258f2ec54,0,1,cff36ede-0bd1-424b-8c75-b9695133f32e,cff36ede-0bd1-424b-8c75-b9695133f32e,0,1,9d872d99-eac7-43ee-8ce2-c9d31a76bd75,9d872d99-eac7-43ee-8ce2-c9d31a76bd75,0,1,77e5bd01-35f3-4072-bc7a-8730e6dcbab3,77e5bd01-35f3-4072-bc7a-8730e6dcbab3,0,1,58b33683-1916-4aef-9b98-5569ef7782ed,58b33683-1916-4aef-9b98-5569ef7782ed,0,1,d3e1f622-f438-4cad-94ae-0272f51610f7,d3e1f622-f438-4cad-94ae-0272f51610f7,0,1,8569cd73-d40d-4d92-83e0-8ece0c03a86a,8569cd73-d40d-4d92-83e0-8ece0c03a86a,0,1,9ebe2809-be6b-4c91-9443-b237fb7ad43c,9ebe2809-be6b-4c91-9443-b237fb7ad43c,0,1,bf29c091-de15-4cd4-be0e-a9785f97d444,bf29c091-de15-4cd4-be0e-a9785f97d444,0,1,6a675752-fd31-46a5-8a62-2a1ede437c68,6a675752-fd31-46a5-8a62-2a1ede437c68,0,1,060b2bb4-ca03-4da9-930f-7f91f6299a35,060b2bb4-ca03-4da9-930f-7f91f6299a35,0,1,394b1a1c-a7ae-41b7-a346-4bac99fa567d,394b1a1c-a7ae-41b7-a346-4bac99fa567d,0,1,9a5fa511-59e8-4a1b-a101-f276f0b7b261,9a5fa511-59e8-4a1b-a101-f276f0b7b261,0,1,ccfe4e36-80b6-419f-8bb3-c1046203d023,ccfe4e36-80b6-419f-8bb3-c1046203d023,0,1,94b2e060-53b7-4b40-af05-30bea3520330,94b2e060-53b7-4b40-af05-30bea3520330,0,1,0f634f7e-7d6b-43e4-8e5e-a31ed05898ea,0f634f7e-7d6b-43e4-8e5e-a31ed05898ea,0,1,41b0dabd-85a3-4819-84dd-371eaf4f996e,41b0dabd-85a3-4819-84dd-371eaf4f996e,0,1,86a5ba4d-0681-4ddc-a505-0f537528e1a3,86a5ba4d-0681-4ddc-a505-0f537528e1a3,0,1,12d936f5-932b-4561-b934-c8444808a450,12d936f5-932b-4561-b934-c8444808a450,0,1,2ccb06ca-9bb7-4b74-9a96-c109bb117984,2ccb06ca-9bb7-4b74-9a96-c109bb117984,0,1,ac1a661d-db18-4576-80a9-a19d4140c05e,ac1a661d-db18-4576-80a9-a19d4140c05e,0,1,acd89f6c-a25f-47b9-ac21-036bfafcc0fc,acd89f6c-a25f-47b9-ac21-036bfafcc0fc,0,1,c3ffeb09-121b-4d77-9c15-def4648b4f3c,c3ffeb09-121b-4d77-9c15-def4648b4f3c,0,1,c2de0724-04c1-4adb-b62a-b7ba727dbe67,c2de0724-04c1-4adb-b62a-b7ba727dbe67,0,1,4ae26777-69ff-4a55-942b-0bad8ab7a70a,4ae26777-69ff-4a55-942b-0bad8ab7a70a,0,1,a0d8fb0a-0e90-4140-8687-e249b153dc66,a0d8fb0a-0e90-4140-8687-e249b153dc66,0,1,917c6f60-2a07-4587-9496-d393aff93953,917c6f60-2a07-4587-9496-d393aff93953,0,1,4bac50a2-762a-44e6-b8c5-3b09ef1a3f5e,4bac50a2-762a-44e6-b8c5-3b09ef1a3f5e,0,1,9fe72d73-4c95-47e0-bf92-dcb714d747c6,9fe72d73-4c95-47e0-bf92-dcb714d747c6,0,1,fe00e64f-2fa9-44a7-9bd7-854ebb6c0185,fe00e64f-2fa9-44a7-9bd7-854ebb6c0185,0,1,4d84bb11-e06e-4ed9-915b-76ee0e385a8b,4d84bb11-e06e-4ed9-915b-76ee0e385a8b,0,1,2b94076d-39ee-45ad-9ba5-435115cf5d4f,2b94076d-39ee-45ad-9ba5-435115cf5d4f,0,1,72ace16c-e90a-4d05-bc23-4351d4c87683,72ace16c-e90a-4d05-bc23-4351d4c87683,0,1,bd86e378-84bb-486a-be7b-319a3fe3b70b,bd86e378-84bb-486a-be7b-319a3fe3b70b,0,1,ef3bc279-6721-4949-8dc0-f96141f7f05c,ef3bc279-6721-4949-8dc0-f96141f7f05c,0,1,f81c7e21-48ad-4b64-975d-e62d34c7235a,f81c7e21-48ad-4b64-975d-e62d34c7235a,0,1,d0523c14-585e-45d3-9735-891235631004,d0523c14-585e-45d3-9735-891235631004,0,1,b6f8bc3e-f0cd-43ef-b060-d701cd446197,b6f8bc3e-f0cd-43ef-b060-d701cd446197,0,1,4f10e5f9-6cfd-4fa9-9c72-d19a484a796c,4f10e5f9-6cfd-4fa9-9c72-d19a484a796c,0,1,b94e805f-e1ab-4870-b855-98aa401864b2,b94e805f-e1ab-4870-b855-98aa401864b2,0,1,ff8eedeb-fc3e-4bee-852b-6da6d59ff38c,ff8eedeb-fc3e-4bee-852b-6da6d59ff38c,0,1,a98bd18f-ccda-41a2-a1b2-8b37cc1f6c36,a98bd18f-ccda-41a2-a1b2-8b37cc1f6c36,0,1,62f9fe19-3d64-4506-a0bc-dbfe47b4df64,62f9fe19-3d64-4506-a0bc-dbfe47b4df64,0,1,45af8f5d-d505-466b-a798-19f2219a180c,45af8f5d-d505-466b-a798-19f2219a180c,0,1,8a8229bc-f70a-4434-bacc-8a81fc58154b,8a8229bc-f70a-4434-bacc-8a81fc58154b,0,1,6324ad14-82ca-467b-b6b7-8d5f6049ca65,6324ad14-82ca-467b-b6b7-8d5f6049ca65,0,1,273446f0-f28b-4ce2-874c-3c6a57299b71,273446f0-f28b-4ce2-874c-3c6a57299b71,0,1,eb2f7449-ee42-43ec-b59c-3e07a6e3c139,eb2f7449-ee42-43ec-b59c-3e07a6e3c139,0,1,f8a7913a-2c64-47e1-8ae9-622fc6e9477e,f8a7913a-2c64-47e1-8ae9-622fc6e9477e,0,1,9b46a2b4-223d-4527-a94e-37ecd4fe72d7,9b46a2b4-223d-4527-a94e-37ecd4fe72d7,0,1,7a4e17bf-3649-4982-a9c6-5982390f1f1d,7a4e17bf-3649-4982-a9c6-5982390f1f1d,0,1,722be6e0-2698-431b-9206-777a36e6742f,722be6e0-2698-431b-9206-777a36e6742f,0,1,75bb0122-26bd-40be-8de8-7a57680c85ae,75bb0122-26bd-40be-8de8-7a57680c85ae,0,1,5e22429f-9ec0-4943-bf80-1becc4b8e5cb,5e22429f-9ec0-4943-bf80-1becc4b8e5cb,0,1,0153e60e-daca-48ac-b1c6-adecc89f579e,0153e60e-daca-48ac-b1c6-adecc89f579e,0,1,1ed4cf25-19f0-49f5-96a0-0ffe13adfe35,1ed4cf25-19f0-49f5-96a0-0ffe13adfe35,0,1,a896bc34-30a6-48b6-acfc-786c24c186bd,a896bc34-30a6-48b6-acfc-786c24c186bd,0,1,3867f4cb-bf54-42fb-8ea6-ca51d7cd6c91,3867f4cb-bf54-42fb-8ea6-ca51d7cd6c91,0,1,da8ae00a-7207-4ceb-b739-9114888c5b27,da8ae00a-7207-4ceb-b739-9114888c5b27,0,1,a6be80f7-d6aa-4371-a180-3d355080d849,a6be80f7-d6aa-4371-a180-3d355080d849,0,1,b37722c3-e29f-4a40-b4eb-0317919fc7a5,b37722c3-e29f-4a40-b4eb-0317919fc7a5,0,1,b1b1cd90-094d-428b-a6bc-156521c1c54d,b1b1cd90-094d-428b-a6bc-156521c1c54d,0,1,4f79ef7c-79be-4a69-acc0-bd591c712d03,4f79ef7c-79be-4a69-acc0-bd591c712d03,0,1,a0dd2129-d3a1-4bca-b555-72b065be1c13,a0dd2129-d3a1-4bca-b555-72b065be1c13,0,1,dc5e8229-e301-477c-846e-2e7078e3ee5f,dc5e8229-e301-477c-846e-2e7078e3ee5f,0,1,24836e44-8fdd-44bd-91d8-4ddab2caf485,24836e44-8fdd-44bd-91d8-4ddab2caf485,0,1,3727bcfe-4d75-4270-86e7-4a66ab14866c,3727bcfe-4d75-4270-86e7-4a66ab14866c,0,1,870a4708-0b5a-4fa3-9978-d94b161d289a,870a4708-0b5a-4fa3-9978-d94b161d289a,0,1,30e9f89d-7b94-488e-9963-886c271b1af7,30e9f89d-7b94-488e-9963-886c271b1af7,0,1,91af7a52-0825-4af5-94df-cc501e0123cd,91af7a52-0825-4af5-94df-cc501e0123cd,0,1,1c2cc78a-2ae6-4996-a743-7b55aecbe84c,1c2cc78a-2ae6-4996-a743-7b55aecbe84c,0,1,9292bf81-5668-4d52-a4ec-a93bc4b0ad3b,9292bf81-5668-4d52-a4ec-a93bc4b0ad3b,0,1,9693cc78-852e-445b-a7d2-f1689fa9eeec,9693cc78-852e-445b-a7d2-f1689fa9eeec,0,1,eb33e555-db41-462a-a45d-c7e0945cece8,eb33e555-db41-462a-a45d-c7e0945cece8,0,1,9cfd517c-1008-483a-9f65-7d15feb2cefc,9cfd517c-1008-483a-9f65-7d15feb2cefc,0,1,d66adc5e-25a3-472e-b0a4-5f22f88d7a0f,d66adc5e-25a3-472e-b0a4-5f22f88d7a0f,0,1,ae48d48f-cd39-4821-a4b7-9394b2a77ef6,ae48d48f-cd39-4821-a4b7-9394b2a77ef6,0,1,f34d3a69-533e-49df-b91d-f7f7f49c5fb1,f34d3a69-533e-49df-b91d-f7f7f49c5fb1,0,1,1d76f613-f4f6-4772-8c16-d97b3104a553,1d76f613-f4f6-4772-8c16-d97b3104a553,0,1,3e58d607-b906-449f-b044-9c130a487b86,3e58d607-b906-449f-b044-9c130a487b86,0,1,7a911212-7fde-4ea8-a1fa-229116b60895,7a911212-7fde-4ea8-a1fa-229116b60895,0,1,f4580043-5bc2-4295-8523-909302009b44,f4580043-5bc2-4295-8523-909302009b44,0,1,dc8af632-a5a4-4270-ba5f-2d3ba506f7e3,dc8af632-a5a4-4270-ba5f-2d3ba506f7e3,0,1,81936ac2-32fe-4e14-897b-0aba92b90c05,81936ac2-32fe-4e14-897b-0aba92b90c05,0,1,9f88e355-3f8f-4fcd-b45f-39c3d45490f5,9f88e355-3f8f-4fcd-b45f-39c3d45490f5,0,1,ac028c56-b2a8-4a9b-a325-554c636f838e,ac028c56-b2a8-4a9b-a325-554c636f838e,0,1,0ed85f4c-c002-49b6-99b9-0c3c4b7f940e,0ed85f4c-c002-49b6-99b9-0c3c4b7f940e,0,1,f99e98ac-cd94-4989-8c02-ef8b323c6815,f99e98ac-cd94-4989-8c02-ef8b323c6815,0,1,e2562347-4549-4111-862e-86c20a6daade,e2562347-4549-4111-862e-86c20a6daade,0,1,b270fc64-15c6-41ed-ad09-44c833ca7c41,b270fc64-15c6-41ed-ad09-44c833ca7c41,0,1,4c3312fd-5613-4e9b-ae7c-572fa1887ded,4c3312fd-5613-4e9b-ae7c-572fa1887ded,0,1,6c8c9618-287a-41ab-890c-60250925ad52,6c8c9618-287a-41ab-890c-60250925ad52,0,1,55b9650e-098b-4d44-9fb5-d525b46f014b,55b9650e-098b-4d44-9fb5-d525b46f014b,0,1,5b7b32ec-3d0e-42e9-bd13-5d2b8cc1942d,5b7b32ec-3d0e-42e9-bd13-5d2b8cc1942d,0,1,bc55dc06-a769-40be-9c99-0794bdd2dbea,bc55dc06-a769-40be-9c99-0794bdd2dbea,0,1,7861e179-96d2-422f-a7c2-b38b59074956,7861e179-96d2-422f-a7c2-b38b59074956,0,1,0b2416bc-f322-45b3-8c3f-2c8a206c55a1,0b2416bc-f322-45b3-8c3f-2c8a206c55a1,0,1,3797b4c6-e336-4cbe-8d0b-0902e1247b42,3797b4c6-e336-4cbe-8d0b-0902e1247b42,0,1,67ebc493-d29a-4614-890a-feb8b5bd884b,67ebc493-d29a-4614-890a-feb8b5bd884b,0,1,dc79e5e2-37d1-4f19-9500-15c1d9be10eb,dc79e5e2-37d1-4f19-9500-15c1d9be10eb,0,1,dba6cb38-79c6-4060-87c5-a993548f36c4,dba6cb38-79c6-4060-87c5-a993548f36c4,0,1,6b44227a-e226-4bcb-8638-06b49f830669,6b44227a-e226-4bcb-8638-06b49f830669,0,1,f2406400-87e9-4df2-bcd3-8f1e3ad62088,f2406400-87e9-4df2-bcd3-8f1e3ad62088,0,1,ecaacedb-bf2d-4736-a9e1-fa89cda85ee6,ecaacedb-bf2d-4736-a9e1-fa89cda85ee6,0,1,a5623e87-3102-4521-b4ab-c41bf2403a1a,a5623e87-3102-4521-b4ab-c41bf2403a1a,0,1,599b1692-5f4e-42ef-ae1a-822ff527a415,599b1692-5f4e-42ef-ae1a-822ff527a415,0,1,ee9abe8a-b3a2-48a9-9157-ea537e83b7e7,ee9abe8a-b3a2-48a9-9157-ea537e83b7e7,0,1,4bb7372a-87a9-426e-b09f-fc0110455b10,4bb7372a-87a9-426e-b09f-fc0110455b10,0,1,ac853a0f-c185-4cdb-9f09-c921770937b5,ac853a0f-c185-4cdb-9f09-c921770937b5,0,1,920a7940-4d12-476d-a909-2231787839a9,920a7940-4d12-476d-a909-2231787839a9,0,1,168fce48-2413-45fc-ad21-9b465121d81b,168fce48-2413-45fc-ad21-9b465121d81b,0,1,d65c8992-aabc-4b67-9893-01862231ebe1,d65c8992-aabc-4b67-9893-01862231ebe1,0,1,23f70675-6a05-4b50-ad68-c55ddc93e857,23f70675-6a05-4b50-ad68-c55ddc93e857,0,1,b3aeeb3c-622d-4e0c-8c13-199f0e431a7d,b3aeeb3c-622d-4e0c-8c13-199f0e431a7d,0,1,ad14c4d1-bc11-44b6-a32c-c00fb89a9ea5,ad14c4d1-bc11-44b6-a32c-c00fb89a9ea5,0,1,32eb2a75-ff35-4795-bf0c-12b1328441ee,32eb2a75-ff35-4795-bf0c-12b1328441ee,0,1,8e877990-a64c-4c45-91f1-007d47618cc7,8e877990-a64c-4c45-91f1-007d47618cc7,0,1,73c6640e-2fe6-4132-9237-d6f28cbacc1c,73c6640e-2fe6-4132-9237-d6f28cbacc1c,0,1,1731708f-53cb-4b00-b90e-f581b4baa845,1731708f-53cb-4b00-b90e-f581b4baa845,0,1,d4b0feca-c00a-4d48-9f23-d92277ea6483,d4b0feca-c00a-4d48-9f23-d92277ea6483,0,1,00b2a0b3-6af8-4ea4-aa38-d1e078d5cbff,00b2a0b3-6af8-4ea4-aa38-d1e078d5cbff,0,1,20f7fdd2-30f6-4a52-a63b-7d2c326c0e83,20f7fdd2-30f6-4a52-a63b-7d2c326c0e83,0,1,23cb5bc2-9638-4d1c-b4bc-d5297e271570,23cb5bc2-9638-4d1c-b4bc-d5297e271570,0,1,6e547ccb-6d5a-4f7c-aaf0-568c22d2c276,6e547ccb-6d5a-4f7c-aaf0-568c22d2c276,0,1,04b7389d-697d-4b0d-a239-ac8c674cc46f,04b7389d-697d-4b0d-a239-ac8c674cc46f,0,1,a1cf5173-2e86-4ed7-9a0b-1bd5e578326a,a1cf5173-2e86-4ed7-9a0b-1bd5e578326a,0,1,864cad61-8280-415d-8fe1-bcb39d56670a,864cad61-8280-415d-8fe1-bcb39d56670a,0,1,b106bd29-5dc7-44d7-94d0-00f61499392e,b106bd29-5dc7-44d7-94d0-00f61499392e,0,1,a4febff8-0566-4977-bf55-1d574568fe9f,a4febff8-0566-4977-bf55-1d574568fe9f,0,1,5199cc65-bed1-40b9-96fe-cf6d855a8b91,5199cc65-bed1-40b9-96fe-cf6d855a8b91,0,1,f518add9-5c26-4dac-ab2e-b30fe3fbd347,f518add9-5c26-4dac-ab2e-b30fe3fbd347,0,1,23f53317-7aa8-4816-8a69-3d39d5e76da0,23f53317-7aa8-4816-8a69-3d39d5e76da0,0,1,9ade5155-fa6d-4999-b019-a5e7e235a158,9ade5155-fa6d-4999-b019-a5e7e235a158,0,1,8b302c5e-b255-4cb5-94d9-0dfef4250097,8b302c5e-b255-4cb5-94d9-0dfef4250097,0,1,49d713b8-6a61-4bd1-9650-0de1869967d2,49d713b8-6a61-4bd1-9650-0de1869967d2,0,1,4738ffd0-3c3b-4e5f-8773-0c9a80efdfbf,4738ffd0-3c3b-4e5f-8773-0c9a80efdfbf,0,1,3d1bae2a-4dfd-48e5-bfe9-b7e30c8475f6,3d1bae2a-4dfd-48e5-bfe9-b7e30c8475f6,0,1,0f2ec7ac-6d3f-4fcf-af3d-b0bfaa187a4b,0f2ec7ac-6d3f-4fcf-af3d-b0bfaa187a4b,0,1,6d351276-2c04-4198-a3e4-865881c12f5c,6d351276-2c04-4198-a3e4-865881c12f5c,0,1,73b1d2e2-0eeb-45dc-8ca3-3bda594d6823,73b1d2e2-0eeb-45dc-8ca3-3bda594d6823,0,1,5c4abd61-2f29-499e-a2ca-d133e9eeeaea,5c4abd61-2f29-499e-a2ca-d133e9eeeaea,0,1,0ddeed48-b98a-47c3-84a2-2eac065be06c,0ddeed48-b98a-47c3-84a2-2eac065be06c,0,1,7987fe2c-d7cc-4fd2-ac4e-610bfb1ab6d2,7987fe2c-d7cc-4fd2-ac4e-610bfb1ab6d2,0,1,fc18d95e-a51d-45c0-83b0-09aeb2b5b03a,fc18d95e-a51d-45c0-83b0-09aeb2b5b03a,0,1,61b947a5-edca-43ca-82c4-5a7b529d8f82,61b947a5-edca-43ca-82c4-5a7b529d8f82,0,1,59eb6a7a-1d96-4985-8d8e-575162759415,59eb6a7a-1d96-4985-8d8e-575162759415,0,1,68564573-ed49-4519-a8b3-997865fe70a6,68564573-ed49-4519-a8b3-997865fe70a6,0,1,6c789969-d066-489d-ad88-92e2a5a6ec69,6c789969-d066-489d-ad88-92e2a5a6ec69,0,1,2a07d696-75d6-4a12-a310-30d6598b4a4c,2a07d696-75d6-4a12-a310-30d6598b4a4c,0,1,dde88f56-417c-4559-a893-85dc91e7e623,dde88f56-417c-4559-a893-85dc91e7e623,0,1,963eedab-6976-4a98-b9ad-b81f89239661,963eedab-6976-4a98-b9ad-b81f89239661,0,1,3370d43e-8e97-4411-8123-2bb2bcf60a75,3370d43e-8e97-4411-8123-2bb2bcf60a75,0,1,d9d377c9-406f-4bc9-8076-1f049348b816,d9d377c9-406f-4bc9-8076-1f049348b816,0,1,dcfcb108-3761-43d9-ad2a-29633bd1ae47,dcfcb108-3761-43d9-ad2a-29633bd1ae47,0,1,afde7867-15d3-43fa-b439-6d9e40df580b,afde7867-15d3-43fa-b439-6d9e40df580b,0,1,a676ff94-a0d1-4de9-8690-ec67f2c891d8,a676ff94-a0d1-4de9-8690-ec67f2c891d8,0,1,012bf716-3672-462e-b390-7bb4384ab4b1,012bf716-3672-462e-b390-7bb4384ab4b1,0,1,65342599-ff37-4f99-8e40-f05d87403bcf,65342599-ff37-4f99-8e40-f05d87403bcf,0,1,3a3f505a-7a50-4111-8029-5b9057fed232,3a3f505a-7a50-4111-8029-5b9057fed232,0,1,36baa776-83c4-413d-b70c-cbbc45e25662,36baa776-83c4-413d-b70c-cbbc45e25662,0,1,b65f9165-c20d-4053-8a0b-cff3f693b762,b65f9165-c20d-4053-8a0b-cff3f693b762,0,1,51af096b-687f-44f4-a0d8-306f670fc5ce,51af096b-687f-44f4-a0d8-306f670fc5ce,0,1,75972f88-aedd-4338-a3b5-320cd632a2e6,75972f88-aedd-4338-a3b5-320cd632a2e6,0,1,a720abc8-dcf0-4684-8d94-22d394a8e4df,a720abc8-dcf0-4684-8d94-22d394a8e4df,0,1,e40f53de-c27b-4e74-8241-f784d7ca5c84,e40f53de-c27b-4e74-8241-f784d7ca5c84,0,1,ef38b84d-277e-48c2-8826-330132eb6807,ef38b84d-277e-48c2-8826-330132eb6807,0,1,67a50910-059a-4724-84e0-c21bc3ac74c2,67a50910-059a-4724-84e0-c21bc3ac74c2,0,1,fdd83a89-a2fe-40d8-a531-a10bfeb36a1d,fdd83a89-a2fe-40d8-a531-a10bfeb36a1d,0,1,0d190f8b-87c5-4dd1-bcfb-609ec3a44f72,0d190f8b-87c5-4dd1-bcfb-609ec3a44f72,0,1,9e78a2b9-44fc-4971-801d-1ddd4bb09cfd,9e78a2b9-44fc-4971-801d-1ddd4bb09cfd,0,1,2c0d11fc-b927-4b5d-a16c-d60e69580824,2c0d11fc-b927-4b5d-a16c-d60e69580824,0,1,5251e744-666e-48a0-a5b4-9cef313c7631,5251e744-666e-48a0-a5b4-9cef313c7631,0,1,ebedc283-5eb0-459b-b686-f8643666b8b8,ebedc283-5eb0-459b-b686-f8643666b8b8,0,1,6a6afffd-cfed-4801-8b59-34d27e46565c,6a6afffd-cfed-4801-8b59-34d27e46565c,0,1,a469b12d-4537-419c-91e0-37abc9d31505,a469b12d-4537-419c-91e0-37abc9d31505,0,1,6f312bda-1f4d-48a6-bd95-f23f34f0ea4b,6f312bda-1f4d-48a6-bd95-f23f34f0ea4b,0,1,82c42232-531e-403f-8599-cc21a248fa2c,82c42232-531e-403f-8599-cc21a248fa2c,0,1,9104b791-9ac4-41ba-a7f0-9e609db3b578,9104b791-9ac4-41ba-a7f0-9e609db3b578,0,1,2d3721d1-816f-4e84-9df1-863cb269d83d,2d3721d1-816f-4e84-9df1-863cb269d83d,0,1,73554821-8ab5-44ab-a593-37ca10a1b777,73554821-8ab5-44ab-a593-37ca10a1b777,0,1,d5a98e02-e199-445e-8d53-11acd07f473f,d5a98e02-e199-445e-8d53-11acd07f473f,0,1,79db55d6-e916-4bde-b417-7d0a53bb85af,79db55d6-e916-4bde-b417-7d0a53bb85af,0,1,3084fb99-59cb-4338-ae37-0b1e8b333f01,3084fb99-59cb-4338-ae37-0b1e8b333f01,0,1,818a1fbf-17c1-44f9-8e20-27d4ceda549c,818a1fbf-17c1-44f9-8e20-27d4ceda549c,0,1,959a5d25-03e5-4911-bbb7-b93714db7eed,959a5d25-03e5-4911-bbb7-b93714db7eed,0,1,1d0b6a8d-9351-4ce2-85dd-6ac508c660c2,1d0b6a8d-9351-4ce2-85dd-6ac508c660c2,0,1,0b09cf2f-1759-4362-b997-29e09ac00445,0b09cf2f-1759-4362-b997-29e09ac00445,0,1,f6a9eb9c-a1c2-4114-b155-3ce94c7b7f20,f6a9eb9c-a1c2-4114-b155-3ce94c7b7f20,0,1,828ddf5d-ca09-4baf-897f-77d569e02a6b,828ddf5d-ca09-4baf-897f-77d569e02a6b,0,1,8856015c-a695-4b1a-99ef-770263f9dc4a,8856015c-a695-4b1a-99ef-770263f9dc4a,0,1,183ec2b5-e173-4885-9e26-1098ffa15020,183ec2b5-e173-4885-9e26-1098ffa15020,0,1,74702fdf-bfc5-4658-ba58-e39bcfbaa647,74702fdf-bfc5-4658-ba58-e39bcfbaa647,0,1,2f436ec3-6a04-4d2c-998a-c60ea875ca86,2f436ec3-6a04-4d2c-998a-c60ea875ca86,0,1,6a947b2d-3e6b-42c8-a9fd-4c5a71d600a9,6a947b2d-3e6b-42c8-a9fd-4c5a71d600a9,0,1,ae641a80-4ada-4592-ace9-29a82e6700e4,ae641a80-4ada-4592-ace9-29a82e6700e4,0,1,f0b0608c-178f-4dea-b461-0d8f00d79d30,f0b0608c-178f-4dea-b461-0d8f00d79d30,0,1,ed2dba0c-7fe3-4d24-b6a6-b104beadc286,ed2dba0c-7fe3-4d24-b6a6-b104beadc286,0,1,a4c98768-c9fc-4f95-b89b-bb1cb0e8fade,a4c98768-c9fc-4f95-b89b-bb1cb0e8fade,0,1,5546b9a9-a4fe-4a2b-9492-883bcb37a210,5546b9a9-a4fe-4a2b-9492-883bcb37a210,0,1,6fb76c5f-844f-4cbc-ae7c-4ac834fddfc9,6fb76c5f-844f-4cbc-ae7c-4ac834fddfc9,0,1,275a5772-8428-497a-81ef-c919f15fcccd,275a5772-8428-497a-81ef-c919f15fcccd,0,1,8df6e7e6-2a1e-4cf3-bdc9-60e52ea3f625,8df6e7e6-2a1e-4cf3-bdc9-60e52ea3f625,0,1,bf070420-9eb7-4372-96a6-b0d00ac3ce8c,bf070420-9eb7-4372-96a6-b0d00ac3ce8c,0,1,10336352-f3a1-4bc3-bdec-1a2eef15f176,10336352-f3a1-4bc3-bdec-1a2eef15f176,0,1,cacabf2f-6d1c-4c33-80c7-c27a5e757cc9,cacabf2f-6d1c-4c33-80c7-c27a5e757cc9,0,1,3b7c713e-81ae-4adc-9519-99c936599ef7,3b7c713e-81ae-4adc-9519-99c936599ef7,0,1,1c8ffbbd-035c-45cf-8ec8-dc5d26d7f673,1c8ffbbd-035c-45cf-8ec8-dc5d26d7f673,0,1,ecda2c4b-6411-4b47-ab59-1918bad5acdd,ecda2c4b-6411-4b47-ab59-1918bad5acdd,0,1,190bc52e-0d51-4dfc-9f16-99ed71ebfa75,190bc52e-0d51-4dfc-9f16-99ed71ebfa75,0,1,0c24858a-7e64-426f-9b59-392449aecaf5,0c24858a-7e64-426f-9b59-392449aecaf5,0,1,b1d61e28-f3dc-418b-b5df-f75622a4b980,b1d61e28-f3dc-418b-b5df-f75622a4b980,0,1,bec4c82f-4e76-4d16-bb4d-b6d9fa404c5d,bec4c82f-4e76-4d16-bb4d-b6d9fa404c5d,0,1,4033f86b-d250-475a-8837-071bf31664b0,4033f86b-d250-475a-8837-071bf31664b0,0,1,876e31ff-ab7b-4ea4-b491-161963727dd1,876e31ff-ab7b-4ea4-b491-161963727dd1,0,1,bb43995b-68b4-41a1-8458-e10a2d8925f1,bb43995b-68b4-41a1-8458-e10a2d8925f1,0,1,61730dd9-fed7-43ce-8f38-724cac8f3d08,61730dd9-fed7-43ce-8f38-724cac8f3d08,0,1,e6a494b8-27e7-46a6-9435-7be6e150a69e,e6a494b8-27e7-46a6-9435-7be6e150a69e,0,1,133dc852-59d3-4351-934d-8845f8a38431,133dc852-59d3-4351-934d-8845f8a38431,0,1,55dbaaf1-554d-46e2-b42a-ce6a8bf20dfb,55dbaaf1-554d-46e2-b42a-ce6a8bf20dfb,0,1,b67914a8-d483-4bed-bd4d-a4aadd4998a4,b67914a8-d483-4bed-bd4d-a4aadd4998a4,0,1,707a8a49-fec5-454c-9e80-c3da829d395c,707a8a49-fec5-454c-9e80-c3da829d395c,0,1,b5ea4aff-11be-4232-94a2-cb92801b6c49,b5ea4aff-11be-4232-94a2-cb92801b6c49,0,1,6f630213-c16c-421c-a160-09e3c729ab26,6f630213-c16c-421c-a160-09e3c729ab26,0,1,878c638c-7c84-4914-896a-d4fdf0d759ef,878c638c-7c84-4914-896a-d4fdf0d759ef,0,1,6065653e-b7a9-4033-9617-f64430c57d89,6065653e-b7a9-4033-9617-f64430c57d89,0,1,9ec63da6-1f53-417f-9c7d-6879eaa56a7e,9ec63da6-1f53-417f-9c7d-6879eaa56a7e,0,1,00d1d85b-c258-4f10-9d13-a99375a29fc1,00d1d85b-c258-4f10-9d13-a99375a29fc1,0,1,0544376f-461c-42c3-a102-e0ae65e3c0c6,0544376f-461c-42c3-a102-e0ae65e3c0c6,0,1,6df8d316-6ac3-4626-8951-1ad36d7049ed,6df8d316-6ac3-4626-8951-1ad36d7049ed,0,1,f211b418-899d-4220-a14b-4a7302183e46,f211b418-899d-4220-a14b-4a7302183e46,0,1,e499629a-69ed-46b4-be5d-7b1f2f6a11d4,e499629a-69ed-46b4-be5d-7b1f2f6a11d4,0,1,52ab6aea-e6a0-43f0-9cc8-f7c9126635cc,52ab6aea-e6a0-43f0-9cc8-f7c9126635cc,0,1,876b23bf-2f48-4916-ad0f-4de8306e1864,876b23bf-2f48-4916-ad0f-4de8306e1864,0,1,e983f539-e369-491e-9cee-510518187870,e983f539-e369-491e-9cee-510518187870,0,1,9a402a9c-a31f-4082-91d5-b4fe7576a5c2,9a402a9c-a31f-4082-91d5-b4fe7576a5c2,0,1,e99a1b17-0e37-489a-bc39-3dd2e23b0861,e99a1b17-0e37-489a-bc39-3dd2e23b0861,0,1,e7c63a25-c804-4bc4-a6f1-81009dd889e2,e7c63a25-c804-4bc4-a6f1-81009dd889e2,0,1,7ccd86cd-4294-4f6c-84f4-98e25e479f4d,7ccd86cd-4294-4f6c-84f4-98e25e479f4d,0,1,70e710c5-42df-465f-a9c5-8345c87e1f19,70e710c5-42df-465f-a9c5-8345c87e1f19,0,1,4c1576c4-b327-4ec1-87bc-662c5aba343b,4c1576c4-b327-4ec1-87bc-662c5aba343b,0,1,0f694ef1-4a97-4aed-ab4b-0b2c18ea7e17,0f694ef1-4a97-4aed-ab4b-0b2c18ea7e17,0,1,14facdfb-9835-4bb6-98a8-5a6ca9a5d2f8,14facdfb-9835-4bb6-98a8-5a6ca9a5d2f8,0,1,4492ac73-eb91-41f8-98f1-54c2b3ad212a,4492ac73-eb91-41f8-98f1-54c2b3ad212a,0,1,869b43fb-968f-4fe0-b945-5030c90a38f2,869b43fb-968f-4fe0-b945-5030c90a38f2,0,1,af071a52-212b-4131-98e6-81f6048a70e6,af071a52-212b-4131-98e6-81f6048a70e6,0,1,37210dde-9a2f-475c-8341-578ac99f0e17,37210dde-9a2f-475c-8341-578ac99f0e17,0,1,e5094d4f-ee61-4142-a97b-d96172350f65,e5094d4f-ee61-4142-a97b-d96172350f65,0,1,3a8fffb6-a732-440c-afb9-d1c699ea53b6,3a8fffb6-a732-440c-afb9-d1c699ea53b6,0,1,b0650787-8ff5-4407-b491-bcdc2f61fd58,b0650787-8ff5-4407-b491-bcdc2f61fd58,0,1,33dd6bba-0044-4e2f-ae9e-c8a26079ab2a,33dd6bba-0044-4e2f-ae9e-c8a26079ab2a,0,1,3f289f67-dfc7-4f2d-90e4-b47aff76ecdb,3f289f67-dfc7-4f2d-90e4-b47aff76ecdb,0,1,9aadad98-69f5-41ce-ad1c-0afd8c610d86,9aadad98-69f5-41ce-ad1c-0afd8c610d86,0,1,706a3db0-9d4f-4c08-91cd-3ccaa6d06d3b,706a3db0-9d4f-4c08-91cd-3ccaa6d06d3b,0,1,3d662173-e19d-4077-9a08-8c8899226e24,3d662173-e19d-4077-9a08-8c8899226e24,0,1,69fd1e6e-7302-4ca8-8419-ec567ae66bef,69fd1e6e-7302-4ca8-8419-ec567ae66bef,0,1,0eee931a-57bb-4844-8e6e-eaca342640a0,0eee931a-57bb-4844-8e6e-eaca342640a0,0,1,20c57e30-5856-4801-9e77-8006471d89f8,20c57e30-5856-4801-9e77-8006471d89f8,0,1,64eff9f4-c57b-40a0-bd83-7e371fd010ce,64eff9f4-c57b-40a0-bd83-7e371fd010ce,0,1,4a3fe393-8aea-4394-8c10-a234f1f191ad,4a3fe393-8aea-4394-8c10-a234f1f191ad,0,1,6f9a3d00-d935-4fa6-9fd2-14700226daff,6f9a3d00-d935-4fa6-9fd2-14700226daff,0,1,d792831c-698d-40c6-96c2-dd0ae6f30707,d792831c-698d-40c6-96c2-dd0ae6f30707,0,1,a1d91c5f-1acd-4b46-887e-d06e7260dd20,a1d91c5f-1acd-4b46-887e-d06e7260dd20,0,1,3fd26019-c464-4c73-b18e-0888740b1747,3fd26019-c464-4c73-b18e-0888740b1747,0,1,a21989bd-a57f-4969-be3b-d8b39ead4145,a21989bd-a57f-4969-be3b-d8b39ead4145,0,1,c4aee120-cdbb-4b48-a1c7-99cccbafb120,c4aee120-cdbb-4b48-a1c7-99cccbafb120,0,1,6b3e07d5-9299-4933-b3fa-c3cc5f5aa7c9,6b3e07d5-9299-4933-b3fa-c3cc5f5aa7c9,0,1,a3667b25-7c18-446d-a318-685a4fe4bf89,a3667b25-7c18-446d-a318-685a4fe4bf89,0,1,fd271670-bde6-4351-abec-eb82548c6c98,fd271670-bde6-4351-abec-eb82548c6c98,0,1,498b012b-bb63-490e-8100-1d33dc84b400,498b012b-bb63-490e-8100-1d33dc84b400,0,1,8103f12c-ed50-4052-8117-33b6d11ef620,8103f12c-ed50-4052-8117-33b6d11ef620,0,1,4f8653e4-3f58-4bad-8ded-424fe7b1d18a,4f8653e4-3f58-4bad-8ded-424fe7b1d18a,0,1,799b3dda-fbfc-4dea-a577-30321e64f4d5,799b3dda-fbfc-4dea-a577-30321e64f4d5,0,1,7c7857b6-90e8-4b3f-9902-fd81bf68d133,7c7857b6-90e8-4b3f-9902-fd81bf68d133,0,1,617de19c-bf01-4900-832a-c169e9faeb79,617de19c-bf01-4900-832a-c169e9faeb79,0,1,70b73fd0-f5dc-411e-9bbb-10a538e8281b,70b73fd0-f5dc-411e-9bbb-10a538e8281b,0,1,758f44ad-54da-4f72-accf-0afecc4f4827,758f44ad-54da-4f72-accf-0afecc4f4827,0,1,05ee4a7c-63e6-4587-8be7-e206345e3471,05ee4a7c-63e6-4587-8be7-e206345e3471,0,1,98d5e98b-0382-4b28-a5d9-24392925664a,98d5e98b-0382-4b28-a5d9-24392925664a,0,1,7c424a77-2a83-4a85-8b7d-e8bb6d013c77,7c424a77-2a83-4a85-8b7d-e8bb6d013c77,0,1,2a77eb39-0487-4fb0-8d5b-d4a27592ea60,2a77eb39-0487-4fb0-8d5b-d4a27592ea60,0,1,19a18193-c5d3-4e56-86c5-5a81c525e9ad,19a18193-c5d3-4e56-86c5-5a81c525e9ad,0,1,c208fcc0-d7b2-435b-963a-e18c97727f8f,c208fcc0-d7b2-435b-963a-e18c97727f8f,0,1,ac5db038-8bc3-45ff-9e8d-04ea9fef6d43,ac5db038-8bc3-45ff-9e8d-04ea9fef6d43,0,1,bf11f7b1-6332-4499-ba48-b94bc10ef869,bf11f7b1-6332-4499-ba48-b94bc10ef869,0,1,ecaba9aa-fca7-42f5-a4fe-d8176cf875b9,ecaba9aa-fca7-42f5-a4fe-d8176cf875b9,0,1,4378ab20-5467-476b-8f04-4b6876efdee6,4378ab20-5467-476b-8f04-4b6876efdee6,0,1,55e47901-c79c-41c5-9d7f-6b6846ed2782,55e47901-c79c-41c5-9d7f-6b6846ed2782,0,1,479d9428-02fd-47d2-a869-a3695b315724,479d9428-02fd-47d2-a869-a3695b315724,0,1,838b4840-86e3-4bf3-8b95-1e58ef60e97a,838b4840-86e3-4bf3-8b95-1e58ef60e97a,0,1,36d258b5-bfda-4b40-88a8-1e0abf351805,36d258b5-bfda-4b40-88a8-1e0abf351805,0,1,cc95b010-ca42-4b54-9c50-0551b2c690ed,cc95b010-ca42-4b54-9c50-0551b2c690ed,0,1,829fb3c0-6d96-4765-adc6-f177344a4a33,829fb3c0-6d96-4765-adc6-f177344a4a33,0,1,9241e7fe-e3e8-4ddd-ac6c-4edb1a1b2f71,9241e7fe-e3e8-4ddd-ac6c-4edb1a1b2f71,0,1,7c47f039-1ca9-4c6f-ac36-f4cb59b48b65,7c47f039-1ca9-4c6f-ac36-f4cb59b48b65,0,1,974d2430-1ff6-4be9-a5aa-aa896e9a66d4,974d2430-1ff6-4be9-a5aa-aa896e9a66d4,0,1,d392a791-af74-40c9-ab20-6ed6aeabe864,d392a791-af74-40c9-ab20-6ed6aeabe864,0,1,0b7cee9b-3870-49f5-a58e-063cf5353467,0b7cee9b-3870-49f5-a58e-063cf5353467,0,1,1612570d-b069-405a-9dd3-80b8175fb468,1612570d-b069-405a-9dd3-80b8175fb468,0,1,3c429fe8-e663-4a58-817f-8f8382697dbb,3c429fe8-e663-4a58-817f-8f8382697dbb,0,1,c37be0c3-d2db-4e63-a8cb-7956a5396650,c37be0c3-d2db-4e63-a8cb-7956a5396650,0,1,83180e0d-fc4b-41ec-9a17-5af555a4776f,83180e0d-fc4b-41ec-9a17-5af555a4776f,0,1,27c52afc-7127-41e1-af8a-1b1bd2c9bfa8,27c52afc-7127-41e1-af8a-1b1bd2c9bfa8,0,1,7f68e4c1-c4f7-4c6c-8f0a-225e544e07ee,7f68e4c1-c4f7-4c6c-8f0a-225e544e07ee,0,1,561ed574-617d-4a46-b32b-f022e07846c8,561ed574-617d-4a46-b32b-f022e07846c8,0,1,cba706bf-a9a7-4dda-9c5a-a26e85119396,cba706bf-a9a7-4dda-9c5a-a26e85119396,0,1,159a4eb5-00cd-426c-86e3-09cd3f569f22,159a4eb5-00cd-426c-86e3-09cd3f569f22,0,1,f03cdb56-ef3f-461f-91b1-cdcaed2786e8,f03cdb56-ef3f-461f-91b1-cdcaed2786e8,0,1,3e8c6546-416c-4437-8c85-2cf591b4fc3f,3e8c6546-416c-4437-8c85-2cf591b4fc3f,0,1,038e5027-3cc5-4ea2-b0b5-28a7544ad53e,038e5027-3cc5-4ea2-b0b5-28a7544ad53e,0,1,9a0b27db-e4ac-496b-b6de-876b90381527,9a0b27db-e4ac-496b-b6de-876b90381527,0,1,2ded5135-b6c3-46dd-b563-7b6fab986d23,2ded5135-b6c3-46dd-b563-7b6fab986d23,0,1,14215720-ccb3-4e5a-8345-cd42c96a3e77,14215720-ccb3-4e5a-8345-cd42c96a3e77,0,1,24fa0604-b6a5-49ad-9d03-b2cf8e81dad8,24fa0604-b6a5-49ad-9d03-b2cf8e81dad8,0,1,0690a5c7-bc25-4101-afa5-69c095d415c2,0690a5c7-bc25-4101-afa5-69c095d415c2,0,1,2ad7b509-4cd1-456a-a6ae-94649fdf8c3e,2ad7b509-4cd1-456a-a6ae-94649fdf8c3e,0,1,79013bba-a0f2-481c-a63e-095a54ee52aa,79013bba-a0f2-481c-a63e-095a54ee52aa,0,1,8523c346-f144-41b8-a702-2d588e7097c2,8523c346-f144-41b8-a702-2d588e7097c2,0,1,93969a30-d9d7-4f2f-85fa-57a4eb7495bf,93969a30-d9d7-4f2f-85fa-57a4eb7495bf,0,1,9fb73c9b-05de-4474-8a28-7e3fd5b2b143,9fb73c9b-05de-4474-8a28-7e3fd5b2b143,0,1,fa2bd6a6-bb46-4e21-8684-248578310164,fa2bd6a6-bb46-4e21-8684-248578310164,0,1,f7cf3b42-39c0-48db-b8ca-fe9ea267a45a,f7cf3b42-39c0-48db-b8ca-fe9ea267a45a,0,1,3a0c06eb-f6d5-46c3-b0b9-c8d98e572093,3a0c06eb-f6d5-46c3-b0b9-c8d98e572093,0,1,88ccac36-169d-48f8-bc68-15e3bb775b79,88ccac36-169d-48f8-bc68-15e3bb775b79,0,1,a1640988-bd60-43b3-86f1-184b9db275c6,a1640988-bd60-43b3-86f1-184b9db275c6,0,1,300a02f7-8062-4843-b11e-0321f8b40f4d,300a02f7-8062-4843-b11e-0321f8b40f4d,0,1,bac41d45-249f-40b4-a013-008e261369c8,bac41d45-249f-40b4-a013-008e261369c8,0,1,84e34b4a-02e8-4676-8b81-771ddf3c2931,84e34b4a-02e8-4676-8b81-771ddf3c2931,0,1,0aa6a024-66ae-4592-87d6-f7cb2a59f906,0aa6a024-66ae-4592-87d6-f7cb2a59f906,0,1,734b4dc5-dc91-4945-a2d7-cefe56a6e0a6,734b4dc5-dc91-4945-a2d7-cefe56a6e0a6,0,1,bb2dcb37-410d-4a6c-9ace-1f04177d6e88,bb2dcb37-410d-4a6c-9ace-1f04177d6e88,0,1,cb6ecc18-a14f-4c3c-a39d-2cd2d1ab4e03,cb6ecc18-a14f-4c3c-a39d-2cd2d1ab4e03,0,1,f71ac535-74a5-4001-a613-455a9e1bf734,f71ac535-74a5-4001-a613-455a9e1bf734,0,1,55a42b83-b6d2-409b-a8ff-7849b08e07ed,55a42b83-b6d2-409b-a8ff-7849b08e07ed,0,1,61889399-ecc2-442c-a790-a8b27a7a540c,61889399-ecc2-442c-a790-a8b27a7a540c,0,1,ecd3a928-3e59-439c-8f58-ba360f2a8b3c,ecd3a928-3e59-439c-8f58-ba360f2a8b3c,0,1,4ee2efbc-bc4a-4b47-bfdb-bb83f108c5bb,4ee2efbc-bc4a-4b47-bfdb-bb83f108c5bb,0,1,2d942a50-b239-4b8c-812a-5a634f5dcaef,2d942a50-b239-4b8c-812a-5a634f5dcaef,0,1,8ab0c61d-85b4-47e3-aca1-1890e4c6ec8d,8ab0c61d-85b4-47e3-aca1-1890e4c6ec8d,0,1,a21cf522-d657-49ba-a198-01ff1de5e3f0,a21cf522-d657-49ba-a198-01ff1de5e3f0,0,1,4dc698da-8471-4b3f-816d-f1467cd2e5f1,4dc698da-8471-4b3f-816d-f1467cd2e5f1,0,1,7ceb2f18-4dae-4b13-a5be-e949be165b4e,7ceb2f18-4dae-4b13-a5be-e949be165b4e,0,1,c4f94f6d-e33f-4226-bf47-c4b544098082,c4f94f6d-e33f-4226-bf47-c4b544098082,0,1,0abca5b8-4974-48aa-bf5d-dbbe2c2ea0e6,0abca5b8-4974-48aa-bf5d-dbbe2c2ea0e6,0,1,fc67b510-3fb4-4305-92d2-c252bc718f03,fc67b510-3fb4-4305-92d2-c252bc718f03,0,1,ed98a7b2-ad31-401f-a65e-dfbcc8e5a4a8,ed98a7b2-ad31-401f-a65e-dfbcc8e5a4a8,0,1,9a5e3d2c-ab69-4f9d-a56f-20bb5f0be1e2,9a5e3d2c-ab69-4f9d-a56f-20bb5f0be1e2,0,1,cf1f7915-94ad-47e7-8676-73271d0cf71e,cf1f7915-94ad-47e7-8676-73271d0cf71e,0,1,fceb6e4a-bd51-4193-a542-70d2317af669,fceb6e4a-bd51-4193-a542-70d2317af669,0,1,80847d57-1795-46c7-a106-926e1f43ac1e,80847d57-1795-46c7-a106-926e1f43ac1e,0,1,38685415-dc87-48b4-8cc4-f85b438f2ec2,38685415-dc87-48b4-8cc4-f85b438f2ec2,0,1,110eff8b-aeec-4ba5-b710-fefc1bd60284,110eff8b-aeec-4ba5-b710-fefc1bd60284,0,1,0a8a6bb9-8b6a-43cf-9d46-b18a8a9591d8,0a8a6bb9-8b6a-43cf-9d46-b18a8a9591d8,0,1,75eca481-002b-4046-898d-dfac9357611f,75eca481-002b-4046-898d-dfac9357611f,0,1,0110decc-d06e-43cf-9d01-30d412edcdd7,0110decc-d06e-43cf-9d01-30d412edcdd7,0,1,3ea32a24-d37b-4fad-937a-9d1357d649a9,3ea32a24-d37b-4fad-937a-9d1357d649a9,0,1,2856ee9a-0fea-4684-b7b8-4844773eae07,2856ee9a-0fea-4684-b7b8-4844773eae07,0,1,fae4675c-dcdc-42fc-911d-07c3c577b8b8,fae4675c-dcdc-42fc-911d-07c3c577b8b8,0,1,f1050611-4f82-411b-97f2-bcd8a5c914bf,f1050611-4f82-411b-97f2-bcd8a5c914bf,0,1,efacf22d-b474-4d49-af8b-6d3784aa5cf2,efacf22d-b474-4d49-af8b-6d3784aa5cf2,0,1,f818b937-9ac3-4a0c-ba50-26c060984f09,f818b937-9ac3-4a0c-ba50-26c060984f09,0,1,f385778d-96cb-4e09-884d-533739b393b1,f385778d-96cb-4e09-884d-533739b393b1,0,1,5bdaa783-e965-4d59-b7b7-a1e86ddb89f7,5bdaa783-e965-4d59-b7b7-a1e86ddb89f7,0,1,0b2356a4-5571-4ba0-9095-265106f2b3b3,0b2356a4-5571-4ba0-9095-265106f2b3b3,0,1,a2581834-dde8-439a-8204-6712c829738e,a2581834-dde8-439a-8204-6712c829738e,0,1,222985c4-fe09-44d1-a1c5-5a3e3cedd9b2,222985c4-fe09-44d1-a1c5-5a3e3cedd9b2,0,1,c746a268-815b-4917-8b06-af745ba9db04,c746a268-815b-4917-8b06-af745ba9db04,0,1,5cc01f13-0faa-4c3c-8e5e-156656f71efd,5cc01f13-0faa-4c3c-8e5e-156656f71efd,0,1,7c3463c8-ea36-415a-8e9d-dc7bd927b9d1,7c3463c8-ea36-415a-8e9d-dc7bd927b9d1,0,1,260f4fb1-02cb-4c32-ba4b-5aa202cd0311,260f4fb1-02cb-4c32-ba4b-5aa202cd0311,0,1,be2b4dba-e77e-4947-bd2f-0710b357ca2a,be2b4dba-e77e-4947-bd2f-0710b357ca2a,0,1,86182e9a-89e0-40d7-b2d7-fcd92ee42942,86182e9a-89e0-40d7-b2d7-fcd92ee42942,0,1,df750e63-50fc-4085-b8b8-f05e4751ff51,df750e63-50fc-4085-b8b8-f05e4751ff51,0,1,091cb921-c7e3-4a5f-97b7-34e625159b9c,091cb921-c7e3-4a5f-97b7-34e625159b9c,0,1,f6118cdd-1dcd-464e-a49d-e95c69466750,f6118cdd-1dcd-464e-a49d-e95c69466750,0,1,39932897-959b-41a6-94ad-61426abfdbd9,39932897-959b-41a6-94ad-61426abfdbd9,0,1,c56ea6f3-1032-4b7a-a20e-e912196da1cd,c56ea6f3-1032-4b7a-a20e-e912196da1cd,0,1,20d655a7-788c-48bc-83ae-25003106bedb,20d655a7-788c-48bc-83ae-25003106bedb,0,1,7bfb78de-899f-4a4d-a8b2-ebadeccf3921,7bfb78de-899f-4a4d-a8b2-ebadeccf3921,0,1,68a72014-4b2e-4347-aaa7-54d95b8eb919,68a72014-4b2e-4347-aaa7-54d95b8eb919,0,1,a71d9c41-7510-4d38-90df-1034977b8f45,a71d9c41-7510-4d38-90df-1034977b8f45,0,1,25830f5b-27e2-4eff-9728-b21eb498727d,25830f5b-27e2-4eff-9728-b21eb498727d,0,1,379c9295-d0d5-418d-82f3-5ae19985cc53,379c9295-d0d5-418d-82f3-5ae19985cc53,0,1,af02f534-8508-4f9f-bcc1-0c6f3d696971,af02f534-8508-4f9f-bcc1-0c6f3d696971,0,1,dd345cfb-ea0c-4ea8-9b35-22547b000275,dd345cfb-ea0c-4ea8-9b35-22547b000275,0,1,86a871da-3725-43a1-a7c3-98acd187011b,86a871da-3725-43a1-a7c3-98acd187011b,0,1,2447cfeb-d877-4222-8ac2-b0026b85f932,2447cfeb-d877-4222-8ac2-b0026b85f932,0,1,fb94e9cb-1f27-42a6-a701-18bbe5888e70,fb94e9cb-1f27-42a6-a701-18bbe5888e70,0,1,2e26e32e-a0c6-4460-99de-865622202166,2e26e32e-a0c6-4460-99de-865622202166,0,1,c9489a6e-45af-4877-9788-158071571a0a,c9489a6e-45af-4877-9788-158071571a0a,0,1,23959912-f8fc-42bc-9ec2-1d520ebc5dad,23959912-f8fc-42bc-9ec2-1d520ebc5dad,0,1,4770398f-8013-4d43-93ce-ec1165e40c4e,4770398f-8013-4d43-93ce-ec1165e40c4e,0,1,9a706997-90cb-430d-972c-d2bad87c4a79,9a706997-90cb-430d-972c-d2bad87c4a79,0,1,6f661660-b9c4-41d4-99a8-e08006cfe9c8,6f661660-b9c4-41d4-99a8-e08006cfe9c8,0,1,199e79fa-54d6-4748-aaaa-9c55283582a3,199e79fa-54d6-4748-aaaa-9c55283582a3,0,1,77b4ade5-149c-4803-af25-fb24ad8b7116,77b4ade5-149c-4803-af25-fb24ad8b7116,0,1,afedc975-4354-473c-8a4d-5b4b547c6e13,afedc975-4354-473c-8a4d-5b4b547c6e13,0,1,8faced7e-d498-499e-8011-7d8d2de1a25f,8faced7e-d498-499e-8011-7d8d2de1a25f,0,1,a67b69dc-ca89-4813-a78d-4a7be1aff328,a67b69dc-ca89-4813-a78d-4a7be1aff328,0,1,dec2510f-4517-4144-a525-3c344e44abc4,dec2510f-4517-4144-a525-3c344e44abc4,0,1,5ef026c2-2ef4-45d6-9792-5ba0d298714b,5ef026c2-2ef4-45d6-9792-5ba0d298714b,0,1,45d61391-4cf7-4f45-8775-ada582c42400,45d61391-4cf7-4f45-8775-ada582c42400,0,1,78b2a913-2ab9-455d-85a3-504f0f468468,78b2a913-2ab9-455d-85a3-504f0f468468,0,1,8c7e1080-fbb2-4a9c-b740-b3e9eb996565,8c7e1080-fbb2-4a9c-b740-b3e9eb996565,0,1,560b5b12-4dee-4c69-ab6b-7680757a2797,560b5b12-4dee-4c69-ab6b-7680757a2797,0,1,3cfb1ce0-de42-4914-85c0-807d0c10f77e,3cfb1ce0-de42-4914-85c0-807d0c10f77e,0,1,aa89881f-f111-4384-911c-847b04bb56dd,aa89881f-f111-4384-911c-847b04bb56dd,0,1,444d9e3b-c702-4ad6-a929-a220eff0f6e7,444d9e3b-c702-4ad6-a929-a220eff0f6e7,0,1,022c4519-1cdb-45b6-a699-89fd6688999c,022c4519-1cdb-45b6-a699-89fd6688999c,0,1,fb5b79a2-caec-4c6e-a112-27e78a184d5e,fb5b79a2-caec-4c6e-a112-27e78a184d5e,0,1,fa523958-ce1e-42e1-ae00-2dcb401b7eda,fa523958-ce1e-42e1-ae00-2dcb401b7eda,0,1,1518bca2-a004-4566-8991-7c60e6745a49,1518bca2-a004-4566-8991-7c60e6745a49,0,1,ed8618e2-3ce6-4956-856a-9f40279b4da6,ed8618e2-3ce6-4956-856a-9f40279b4da6,0,1,733f6bc2-544d-4fac-bca8-11b981b95a03,733f6bc2-544d-4fac-bca8-11b981b95a03,0,1,0333cd9e-392d-40b2-869d-ad47119e0384,0333cd9e-392d-40b2-869d-ad47119e0384,0,1,82cc8820-0b92-4bb7-b097-7ac79e922f01,82cc8820-0b92-4bb7-b097-7ac79e922f01,0,1,f2267d6c-6972-4621-b677-87798056363b,f2267d6c-6972-4621-b677-87798056363b,0,1,243d201b-3714-4700-b410-c74c9093e6f6,243d201b-3714-4700-b410-c74c9093e6f6,0,1,de3cb50c-ef99-419e-b922-c6a453da6a5b,de3cb50c-ef99-419e-b922-c6a453da6a5b,0,1,d4ca4802-756a-494c-bab3-e77e0777a3fa,d4ca4802-756a-494c-bab3-e77e0777a3fa,0,1,134c1054-8d65-405f-ba3b-5beeca803a72,134c1054-8d65-405f-ba3b-5beeca803a72,0,1,cfa1669b-5310-4171-83fd-4dff3c6ac345,cfa1669b-5310-4171-83fd-4dff3c6ac345,0,1,9ec26d14-b09d-4fd7-9c43-062c0120cf3d,9ec26d14-b09d-4fd7-9c43-062c0120cf3d,0,1,0db78226-37d0-4016-b4c9-5134af1aabc7,0db78226-37d0-4016-b4c9-5134af1aabc7,0,1,8d6b4d23-a260-4352-9975-c13ce3e05220,8d6b4d23-a260-4352-9975-c13ce3e05220,0,1,e0be0bc7-def6-4ae9-9a33-9689aa829b5e,e0be0bc7-def6-4ae9-9a33-9689aa829b5e,0,1,97d4ffd0-07ef-4dc2-8fbc-449c3c8453ef,97d4ffd0-07ef-4dc2-8fbc-449c3c8453ef,0,1,6f5ac40b-ea22-47cf-acf2-614406669a72,6f5ac40b-ea22-47cf-acf2-614406669a72,0,1,b6caaa9e-a9d1-4519-a61f-7fa0ab0ff201,b6caaa9e-a9d1-4519-a61f-7fa0ab0ff201,0,1,8a0d4f7f-7a80-4e5d-8238-05fc169e0319,8a0d4f7f-7a80-4e5d-8238-05fc169e0319,0,1,8e9f9baf-8d12-46cc-915f-f6f290af5512,8e9f9baf-8d12-46cc-915f-f6f290af5512,0,1,5808331f-9ab4-4a23-a592-1f65087f3214,5808331f-9ab4-4a23-a592-1f65087f3214,0,1,9316738d-3d38-4068-818e-a001355b19fb,9316738d-3d38-4068-818e-a001355b19fb,0,1,d86d766f-021a-4c11-b9e8-403af08918cc,d86d766f-021a-4c11-b9e8-403af08918cc,0,1,2cedfef0-5d93-475a-b2dd-ee36e553e6e1,2cedfef0-5d93-475a-b2dd-ee36e553e6e1,0,1,29200d04-d7da-435a-89e6-858c11a1a98c,29200d04-d7da-435a-89e6-858c11a1a98c,0,1,8e5f6c70-04b3-46a1-94ef-82c9f6019f8f,8e5f6c70-04b3-46a1-94ef-82c9f6019f8f,0,1,6c119ef2-d24b-4c3d-ad07-611bed89cab1,6c119ef2-d24b-4c3d-ad07-611bed89cab1,0,1,13b1cb1f-88df-4ff8-b4cc-0473e4f96005,13b1cb1f-88df-4ff8-b4cc-0473e4f96005,0,1,0e861ad8-6fa3-4b0f-a9b0-6c91df1dfc6b,0e861ad8-6fa3-4b0f-a9b0-6c91df1dfc6b,0,1,27df6c22-85d7-4cb6-be19-82af76c84bf9,27df6c22-85d7-4cb6-be19-82af76c84bf9,0,1,77bd95d6-3cd5-4b67-a0b6-72d24243fbc2,77bd95d6-3cd5-4b67-a0b6-72d24243fbc2,0,1,0be7f905-53b8-4bb1-8e37-dcc142e508c5,0be7f905-53b8-4bb1-8e37-dcc142e508c5,0,1,422155c7-1640-48c4-bb21-36595b405c66,422155c7-1640-48c4-bb21-36595b405c66,0,1,16d37b5a-88db-4787-b2de-fb50da0ca94b,16d37b5a-88db-4787-b2de-fb50da0ca94b,0,1,f653bcbf-5659-4605-9bb9-3737f19e79dd,f653bcbf-5659-4605-9bb9-3737f19e79dd,0,1,8b980868-fe63-49ff-ba3d-4c29732e1b90,8b980868-fe63-49ff-ba3d-4c29732e1b90,0,1,54668731-4963-4ec3-b188-9feacaefa182,54668731-4963-4ec3-b188-9feacaefa182,0,1,3702135e-5380-4ca6-82f5-63eff1b043e9,3702135e-5380-4ca6-82f5-63eff1b043e9,0,1,29b2104b-fd02-4d51-951f-51ea213b8ebd,29b2104b-fd02-4d51-951f-51ea213b8ebd,0,1,ba5c945e-554f-45a2-a2de-3157b2d7e931,ba5c945e-554f-45a2-a2de-3157b2d7e931,0,1,f7085f33-f122-4443-a3f5-4e765300175e,f7085f33-f122-4443-a3f5-4e765300175e,0,1,b7e4c512-b856-4679-a025-5f0f28918593,b7e4c512-b856-4679-a025-5f0f28918593,0,1,bba56b8f-a3f3-4d3f-9804-f9569bb1f6f3,bba56b8f-a3f3-4d3f-9804-f9569bb1f6f3,0,1,cff7ba79-9418-43a4-badc-3e3cc2f6bd5b,cff7ba79-9418-43a4-badc-3e3cc2f6bd5b,0,1,a9362ac4-85ee-4214-80c1-048fab769885,a9362ac4-85ee-4214-80c1-048fab769885,0,1,4ec242e0-75d1-4bf7-be18-783e7aa4f236,4ec242e0-75d1-4bf7-be18-783e7aa4f236,0,1,e02b1366-9d7a-462f-86a1-436bbf4532ff,e02b1366-9d7a-462f-86a1-436bbf4532ff,0,1,40ee729c-c317-4a1c-b985-5f7e4e1e20fb,40ee729c-c317-4a1c-b985-5f7e4e1e20fb,0,1,2feb35c0-b046-4086-a2ce-ccc462fc6e9c,2feb35c0-b046-4086-a2ce-ccc462fc6e9c,0,1,8811cc64-99d9-4f13-8309-c29965783f5a,8811cc64-99d9-4f13-8309-c29965783f5a,0,1,7c737071-e850-4a3f-8942-697ef52a8ecc,7c737071-e850-4a3f-8942-697ef52a8ecc,0,1,62eff222-7b74-4cab-9138-880db1f05147,62eff222-7b74-4cab-9138-880db1f05147,0,1,39c6c277-cfc6-4e8a-8e7f-afcff55f0511,39c6c277-cfc6-4e8a-8e7f-afcff55f0511,0,1,860f8893-22fe-4b13-adb1-24e1ea8c6544,860f8893-22fe-4b13-adb1-24e1ea8c6544,0,1,95266e9f-073f-4de3-83c6-cc0d9ee9334f,95266e9f-073f-4de3-83c6-cc0d9ee9334f,0,1,21b8ac8d-75ca-481c-8e85-01bc2029f0c0,21b8ac8d-75ca-481c-8e85-01bc2029f0c0,0,1,d5012e69-89bc-40af-8e4f-377a042854ee,d5012e69-89bc-40af-8e4f-377a042854ee,0,1,02f79fd8-5315-4c90-b520-db67dcb6e371,02f79fd8-5315-4c90-b520-db67dcb6e371,0,1,9bb52788-4a3a-48b5-a551-5ca753b6c059,9bb52788-4a3a-48b5-a551-5ca753b6c059,0,1,4fb5004f-3cd9-44c4-a44b-d235cccf9e9c,4fb5004f-3cd9-44c4-a44b-d235cccf9e9c,0,1,872a0c47-fab5-4a54-8ab9-23940bbdefbb,872a0c47-fab5-4a54-8ab9-23940bbdefbb,0,1,7428a626-3fbc-4f2c-a3dd-f14e8d90c00b,7428a626-3fbc-4f2c-a3dd-f14e8d90c00b,0,1,2f20bff4-9201-4f36-9e74-eba4d9b3c59a,2f20bff4-9201-4f36-9e74-eba4d9b3c59a,0,1,b6c94efd-5994-4c4c-a641-b062ecc38b65,b6c94efd-5994-4c4c-a641-b062ecc38b65,0,1,98501228-7f0e-45a3-b58f-4c654f393f80,98501228-7f0e-45a3-b58f-4c654f393f80,0,1,502384c9-edb7-451a-b7ea-de006f657a6e,502384c9-edb7-451a-b7ea-de006f657a6e,0,1,4e1a4fe0-dca4-40ba-9369-73be303a4aef,4e1a4fe0-dca4-40ba-9369-73be303a4aef,0,1,329906a0-0b61-4f3f-8cd0-f06a78e8fe5f,329906a0-0b61-4f3f-8cd0-f06a78e8fe5f,0,1,840e0b1b-a599-4c5f-8eaa-7f7e4f2e55a4,840e0b1b-a599-4c5f-8eaa-7f7e4f2e55a4,0,1,1d06a9e4-e637-4219-a81c-64f8ec1b91a4,1d06a9e4-e637-4219-a81c-64f8ec1b91a4,0,1,50968921-76f3-4108-835a-96b153671c8d,50968921-76f3-4108-835a-96b153671c8d,0,1,b773f510-1485-4886-9071-afcbf49ff856,b773f510-1485-4886-9071-afcbf49ff856,0,1,964403f2-0a87-49e1-b183-dbe3624e3805,964403f2-0a87-49e1-b183-dbe3624e3805,0,1,01579044-5659-4a73-a989-c52cfabaae66,01579044-5659-4a73-a989-c52cfabaae66,0,1,9b8509e8-8262-4e6a-b2f3-a0df8f49e2c5,9b8509e8-8262-4e6a-b2f3-a0df8f49e2c5,0,1,911baaa1-a4de-4558-b00e-51644144a762,911baaa1-a4de-4558-b00e-51644144a762,0,1,8a8ad123-c01a-440a-bd01-1c0da72cf2eb,8a8ad123-c01a-440a-bd01-1c0da72cf2eb,0,1,ca4ef957-36c2-43b9-8ff7-e2b7ee58cde5,ca4ef957-36c2-43b9-8ff7-e2b7ee58cde5,0,1,4e036eff-92a8-4010-89b2-ed949c123311,4e036eff-92a8-4010-89b2-ed949c123311,0,1,38160114-dc22-4d0b-86a5-d650f4756932,38160114-dc22-4d0b-86a5-d650f4756932,0,1,60aaa289-1f07-438c-8f10-81058ac671c3,60aaa289-1f07-438c-8f10-81058ac671c3,0,1,7312a4ab-a269-4d85-a2c2-25bd5c5dc59c,7312a4ab-a269-4d85-a2c2-25bd5c5dc59c,0,1,c44b0868-bd7f-4230-973b-544ff4dd2afe,c44b0868-bd7f-4230-973b-544ff4dd2afe,0,1,fc2675c2-1c9b-41f9-88eb-5c8be365fe41,fc2675c2-1c9b-41f9-88eb-5c8be365fe41,0,1,51e6a6f9-ce9d-4cb0-a40c-384ede074e07,51e6a6f9-ce9d-4cb0-a40c-384ede074e07,0,1,d49411b4-5f6d-48c5-b4f8-fdfbd1b73317,d49411b4-5f6d-48c5-b4f8-fdfbd1b73317,0,1,8b3da21b-ea3f-47cf-af48-15b886b21f20,8b3da21b-ea3f-47cf-af48-15b886b21f20,0,1,32c4750b-0096-4bbc-8dcd-c1f717734233,32c4750b-0096-4bbc-8dcd-c1f717734233,0,1,be6740b1-1f57-4c01-a67a-d48152931dc8,be6740b1-1f57-4c01-a67a-d48152931dc8,0,1,40fd038d-a93a-4be7-9221-d8ae83350ca0,40fd038d-a93a-4be7-9221-d8ae83350ca0,0,1,e9fcabef-5067-477b-8cb0-1bf3ab8161c5,e9fcabef-5067-477b-8cb0-1bf3ab8161c5,0,1,29adc9e5-a994-48ab-a5a1-919d01119c3a,29adc9e5-a994-48ab-a5a1-919d01119c3a,0,1,c47ffce7-c905-4e88-8b1f-156f47047ccd,c47ffce7-c905-4e88-8b1f-156f47047ccd,0,1,e1755eed-88cf-42c1-83e4-f9047f2c30bf,e1755eed-88cf-42c1-83e4-f9047f2c30bf,0,1,c6ec9d48-9131-4735-9cf7-b498705a57e4,c6ec9d48-9131-4735-9cf7-b498705a57e4,0,1,865d76f7-db4a-4fa2-8e1c-3ecbc2d8faf4,865d76f7-db4a-4fa2-8e1c-3ecbc2d8faf4,0,1,706c421a-74ce-4985-9443-b4a2032481f6,706c421a-74ce-4985-9443-b4a2032481f6,0,1,64da4c24-4aaf-42c8-8595-7f60ff3bc344,64da4c24-4aaf-42c8-8595-7f60ff3bc344,0,1,fb9577e1-00d9-4d52-8de9-23914929a683,fb9577e1-00d9-4d52-8de9-23914929a683,0,1,ffd62a16-f2b4-4e3a-8849-15b957a3d1a1,ffd62a16-f2b4-4e3a-8849-15b957a3d1a1,0,1,529253ae-9c92-4426-b150-8444ba622f89,529253ae-9c92-4426-b150-8444ba622f89,0,1,06a1955a-2ef0-4607-9dcb-a480a7951af7,06a1955a-2ef0-4607-9dcb-a480a7951af7,0,1,6f8fcc96-bfed-444a-908d-95c5b1c64972,6f8fcc96-bfed-444a-908d-95c5b1c64972,0,1,97ce4bf2-6580-4f27-8b5d-d60b66a09c9e,97ce4bf2-6580-4f27-8b5d-d60b66a09c9e,0,1,a84c89d9-2cfe-405f-9bb0-5392b3171695,a84c89d9-2cfe-405f-9bb0-5392b3171695,0,1,070ecbfe-88d6-4de8-b236-e7eedbc3ebc6,070ecbfe-88d6-4de8-b236-e7eedbc3ebc6,0,1,91e26e73-027f-4a10-9083-e5182e768723,91e26e73-027f-4a10-9083-e5182e768723,0,1,e55680f4-cb1a-4cdb-88f0-5d82f43c1d05,e55680f4-cb1a-4cdb-88f0-5d82f43c1d05,0,1,54433668-4391-4dea-8baf-43e9aa1d624e,54433668-4391-4dea-8baf-43e9aa1d624e,0,1,fc309616-060a-42c3-8401-dfef0f359bc5,fc309616-060a-42c3-8401-dfef0f359bc5,0,1,b968398d-973d-4643-95a5-16633d7e48bc,b968398d-973d-4643-95a5-16633d7e48bc,0,1,b9507495-2536-4895-b68b-62acd74343f6,b9507495-2536-4895-b68b-62acd74343f6,0,1,e05a14cc-9051-4c38-9725-19856e36d260,e05a14cc-9051-4c38-9725-19856e36d260,0,1,8154aa0f-ecd6-4ab0-9498-56ef25486a55,8154aa0f-ecd6-4ab0-9498-56ef25486a55,0,1,9d6429f7-23da-4596-822a-04818deb3088,9d6429f7-23da-4596-822a-04818deb3088,0,1,a1b67bd2-3220-497d-b2b4-bd0ea62d9111,a1b67bd2-3220-497d-b2b4-bd0ea62d9111,0,1,acb533e7-4610-4f92-b548-1a4ff1a423d4,acb533e7-4610-4f92-b548-1a4ff1a423d4,0,1,8697999d-9cdb-43d8-979b-3f283daffdd3,8697999d-9cdb-43d8-979b-3f283daffdd3,0,1,23378687-249c-4ec6-99b8-b13fb04b8643,23378687-249c-4ec6-99b8-b13fb04b8643,0,1,66315b12-7abf-46e0-a994-894b827b1301,66315b12-7abf-46e0-a994-894b827b1301,0,1,dba174fb-8392-4451-8069-ae8145658e34,dba174fb-8392-4451-8069-ae8145658e34,0,1,ff5dd4f8-8a16-4a41-875d-c4f7c37ae67a,ff5dd4f8-8a16-4a41-875d-c4f7c37ae67a,0,1,4435d99d-a1df-43e6-97ab-5e651017c61d,4435d99d-a1df-43e6-97ab-5e651017c61d,0,1,2398d69d-ecdd-4d34-bdae-34ed5507a61e,2398d69d-ecdd-4d34-bdae-34ed5507a61e,0,1,a707035a-0172-4b55-b589-fa4a8be9b596,a707035a-0172-4b55-b589-fa4a8be9b596,0,1,c4456e94-8c76-49b1-b85a-433e0f65bdb0,c4456e94-8c76-49b1-b85a-433e0f65bdb0,0,1,4a347209-3a07-48ea-b407-6ee37f1d69f2,4a347209-3a07-48ea-b407-6ee37f1d69f2,0,1,d6aed0fd-686c-430d-b884-74494177422e,d6aed0fd-686c-430d-b884-74494177422e,0,1,245ec4aa-ed65-41f7-b0f0-f8085cfc5bef,245ec4aa-ed65-41f7-b0f0-f8085cfc5bef,0,1,3ed64288-8bf0-4049-8d44-1b424f31d40f,3ed64288-8bf0-4049-8d44-1b424f31d40f,0,1,e0a3fab1-3fe9-4927-840e-f983f72bdfc1,e0a3fab1-3fe9-4927-840e-f983f72bdfc1,0,1,df31eee8-387d-40d1-98df-1f7d8176b50e,df31eee8-387d-40d1-98df-1f7d8176b50e,0,1,c8364283-5525-4bef-8e96-abced54c6a4a,c8364283-5525-4bef-8e96-abced54c6a4a,0,1,bcc25539-c6ca-40d0-84fd-53c3caf1aec7,bcc25539-c6ca-40d0-84fd-53c3caf1aec7,0,1,577f2671-7d38-4806-b7ff-840d649e6d69,577f2671-7d38-4806-b7ff-840d649e6d69,0,1,4ff9376e-ffa6-48f3-bf26-b55ceb23da09,4ff9376e-ffa6-48f3-bf26-b55ceb23da09,0,1,de4c339a-a3cf-4b30-bcf2-ce86f5c2d3b0,de4c339a-a3cf-4b30-bcf2-ce86f5c2d3b0,0,1,40e2fb30-bb03-4178-a8eb-ddf48337ef23,40e2fb30-bb03-4178-a8eb-ddf48337ef23,0,1,1026fbcb-acd8-40dc-b638-6e02c6378c55,1026fbcb-acd8-40dc-b638-6e02c6378c55,0,1,dc9e2ba6-f4f1-493f-9054-cac633f239dd,dc9e2ba6-f4f1-493f-9054-cac633f239dd,0,1,7b95d0b1-c7b2-43b4-9119-320cb8912032,7b95d0b1-c7b2-43b4-9119-320cb8912032,0,1,004582b7-00aa-405e-8e24-ce76c945edae,004582b7-00aa-405e-8e24-ce76c945edae,0,1,97a9b005-a836-4308-8e63-0e00f6890baa,97a9b005-a836-4308-8e63-0e00f6890baa,0,1,98c34ada-0b78-41db-9183-6d7b9e466bde,98c34ada-0b78-41db-9183-6d7b9e466bde,0,1,fb688339-918e-40a1-8721-a26f3077973e,fb688339-918e-40a1-8721-a26f3077973e,0,1,1f56de63-81eb-4de5-ad20-01cb6f84e5b0,1f56de63-81eb-4de5-ad20-01cb6f84e5b0,0,1,079ba95c-8293-47e2-b8bd-7acf73c2d880,079ba95c-8293-47e2-b8bd-7acf73c2d880,0,1,fbe1dcf7-c11d-4395-ab3a-c2f986c25419,fbe1dcf7-c11d-4395-ab3a-c2f986c25419,0,1,a5f264a8-a547-4653-abb1-eb1666d527dc,a5f264a8-a547-4653-abb1-eb1666d527dc,0,1,dabae379-6356-497a-aab5-cf102f16a72a,dabae379-6356-497a-aab5-cf102f16a72a,0,1,337370e0-1021-4887-9d38-6c3833c90a5b,337370e0-1021-4887-9d38-6c3833c90a5b,0,1,0ff569eb-d5b8-4ab1-ac77-5e5afd6d44d0,0ff569eb-d5b8-4ab1-ac77-5e5afd6d44d0,0,1,d6f01f1c-801b-4776-ae11-48236103f76a,d6f01f1c-801b-4776-ae11-48236103f76a,0,1,b6fe68cf-657b-40e0-af2e-247607a86519,b6fe68cf-657b-40e0-af2e-247607a86519,0,1,9b0b8191-94b7-428f-be86-e9e4cd24a72f,9b0b8191-94b7-428f-be86-e9e4cd24a72f,0,1,a923dbcb-7146-4445-ad17-f4a32c16a837,a923dbcb-7146-4445-ad17-f4a32c16a837,0,1,41dec792-1d1a-4e06-a54b-a86193b98225,41dec792-1d1a-4e06-a54b-a86193b98225,0,1,52257beb-3e0c-4681-b430-9690398cd13a,52257beb-3e0c-4681-b430-9690398cd13a,0,1,135e637c-c28e-4547-8da2-d897dca54cb2,135e637c-c28e-4547-8da2-d897dca54cb2,0,1,245be006-6d0a-4c9e-97c5-f3c2ddd734f7,245be006-6d0a-4c9e-97c5-f3c2ddd734f7,0,1,a0b74de9-06b5-416c-9dd0-2f9dc209fe91,a0b74de9-06b5-416c-9dd0-2f9dc209fe91,0,1,5356543a-db9a-4265-b83f-31d45544c8e6,5356543a-db9a-4265-b83f-31d45544c8e6,0,1,857dd311-9c6d-4dba-82d8-283d7b05b09e,857dd311-9c6d-4dba-82d8-283d7b05b09e,0,1,1055d15b-8cb5-4ff0-a526-7fd20a08a96c,1055d15b-8cb5-4ff0-a526-7fd20a08a96c,0,1,8064eb3a-d56c-4517-9db0-b7300149c7c4,8064eb3a-d56c-4517-9db0-b7300149c7c4,0,1,fe926c88-d792-4db3-abcf-3c94dfdcc407,fe926c88-d792-4db3-abcf-3c94dfdcc407,0,1,bcbdba9e-0b29-4ea7-a7d5-1de819bf86ec,bcbdba9e-0b29-4ea7-a7d5-1de819bf86ec,0,1,e0c51555-1614-4aa7-a075-c5e1251579ba,e0c51555-1614-4aa7-a075-c5e1251579ba,0,1,c75a1c6d-fa33-4b57-b359-6253aff5f3e7,c75a1c6d-fa33-4b57-b359-6253aff5f3e7,0,1,af88ea84-5742-4c9f-9a02-6d0f25186f72,af88ea84-5742-4c9f-9a02-6d0f25186f72,0,1,51363236-c8eb-4eb7-9692-5c18edc9a5a8,51363236-c8eb-4eb7-9692-5c18edc9a5a8,0,1,cb65fbad-69a0-47d8-b4a9-da49274c3eb7,cb65fbad-69a0-47d8-b4a9-da49274c3eb7,0,1,872521e3-413c-45ac-a6ea-39fe1324bae8,872521e3-413c-45ac-a6ea-39fe1324bae8,0,1,8cad6cfd-91d0-4563-800a-d60c8a1b6a03,8cad6cfd-91d0-4563-800a-d60c8a1b6a03,0,1,81ef02df-498d-4af0-8254-dc6730cbf140,81ef02df-498d-4af0-8254-dc6730cbf140,0,1,79ad09ba-875a-46bd-9cd9-9d084bf4f6ea,79ad09ba-875a-46bd-9cd9-9d084bf4f6ea,0,1,2902460a-ed86-41cf-8e8f-895adab9a72f,2902460a-ed86-41cf-8e8f-895adab9a72f,0,1,c4968b4e-0715-43a5-92ad-c8cd276fbf7b,c4968b4e-0715-43a5-92ad-c8cd276fbf7b,0,1,402f2fe0-4d08-4701-9c8f-0c2bb75815ef,402f2fe0-4d08-4701-9c8f-0c2bb75815ef,0,1,1a4ed7cf-3294-4a5c-9650-75b61d6b2531,1a4ed7cf-3294-4a5c-9650-75b61d6b2531,0,1,d6b72e00-018a-4fdc-b6a4-06dcecf89809,d6b72e00-018a-4fdc-b6a4-06dcecf89809,0,1,9f816562-57f0-473f-8c85-14f7521ffd7f,9f816562-57f0-473f-8c85-14f7521ffd7f,0,1,917b0acc-88fe-4afc-b19b-6da69e060393,917b0acc-88fe-4afc-b19b-6da69e060393,0,1,a091b76e-8ba4-4534-bbb0-9990e69b8603,a091b76e-8ba4-4534-bbb0-9990e69b8603,0,1,867ee5d2-7566-4052-a311-b56e7e46b90d,867ee5d2-7566-4052-a311-b56e7e46b90d,0,1,f82d5bd6-4c74-4c23-978c-565aae3d752a,f82d5bd6-4c74-4c23-978c-565aae3d752a,0,1,7fba41a5-4faa-412b-b367-b30ced0314c0,7fba41a5-4faa-412b-b367-b30ced0314c0,0,1,98422d20-9a71-40e4-966e-6958d44eaefb,98422d20-9a71-40e4-966e-6958d44eaefb,0,1,37333d0b-3589-4b8b-bf6c-e605e0287b66,37333d0b-3589-4b8b-bf6c-e605e0287b66,0,1,1813c469-da20-46a6-8947-6815b66f64c1,1813c469-da20-46a6-8947-6815b66f64c1,0,1,64e702e9-8934-4356-a1b2-be0e8b390630,64e702e9-8934-4356-a1b2-be0e8b390630,0,1,74880ac4-bdd3-48e6-82a0-a2103da42723,74880ac4-bdd3-48e6-82a0-a2103da42723,0,1,ad083c26-7461-4e94-b524-0174242fbd91,ad083c26-7461-4e94-b524-0174242fbd91,0,1,5ce39370-f918-493f-bb24-53346b6fd836,5ce39370-f918-493f-bb24-53346b6fd836,0,1,84f22fd2-e0d0-42ce-8628-1b13c021a4cb,84f22fd2-e0d0-42ce-8628-1b13c021a4cb,0,1,0e3d2750-bb4c-42b9-9829-60f1480ced9c,0e3d2750-bb4c-42b9-9829-60f1480ced9c,0,1,d1b6c5e8-7625-43aa-bb11-943c9bfa01b7,d1b6c5e8-7625-43aa-bb11-943c9bfa01b7,0,1,dad11c2e-08fc-4a6b-8829-8be6c64c15fc,dad11c2e-08fc-4a6b-8829-8be6c64c15fc,0,1,a76b1fd1-ba00-40e6-8756-f17fee449818,a76b1fd1-ba00-40e6-8756-f17fee449818,0,1,5c913626-48d1-4e0a-a423-64078ce59c7b,5c913626-48d1-4e0a-a423-64078ce59c7b,0,1,0a4e6b7a-b380-4547-bc3c-5d6895a5d19a,0a4e6b7a-b380-4547-bc3c-5d6895a5d19a,0,1,7b0ec304-1904-413e-a9c6-ff62e87107dd,7b0ec304-1904-413e-a9c6-ff62e87107dd,0,1,d4dd8c96-914d-496f-b735-ef85ec473605,d4dd8c96-914d-496f-b735-ef85ec473605,0,1,62517db4-59e6-4945-bcd6-b3f1845572bf,62517db4-59e6-4945-bcd6-b3f1845572bf,0,1,a6a9dd40-24cd-4d40-a12d-44f94f8c05a7,a6a9dd40-24cd-4d40-a12d-44f94f8c05a7,0,1,f0f72149-0e7f-441a-b70d-8f47d4977927,f0f72149-0e7f-441a-b70d-8f47d4977927,0,1,776efc3e-ac27-4550-bafd-6e91aa987af2,776efc3e-ac27-4550-bafd-6e91aa987af2,0,1,9f478c85-b72c-40ae-aa08-7ddf73b5b15c,9f478c85-b72c-40ae-aa08-7ddf73b5b15c,0,1,cc438366-85ea-48be-8b74-d05cddb1fc51,cc438366-85ea-48be-8b74-d05cddb1fc51,0,1,4688fd3b-4a92-4ed8-b111-0cf22a729b1c,4688fd3b-4a92-4ed8-b111-0cf22a729b1c,0,1,92029d1f-0472-4aaa-8fd6-9fb3c3cf414e,92029d1f-0472-4aaa-8fd6-9fb3c3cf414e,0,1,3271b800-1825-422f-97bb-757baf403e90,3271b800-1825-422f-97bb-757baf403e90,0,1,6fd6efc1-facc-4ece-a5b3-3dce6acca81d,6fd6efc1-facc-4ece-a5b3-3dce6acca81d,0,1,4ee82868-7a20-4c3a-91f9-42a6bf53ac37,4ee82868-7a20-4c3a-91f9-42a6bf53ac37,0,1,a040c756-4687-4bfd-a690-b122d3c490e5,a040c756-4687-4bfd-a690-b122d3c490e5,0,1,bd5940d5-13fd-4f59-bb6c-614f93f9c8e4,bd5940d5-13fd-4f59-bb6c-614f93f9c8e4,0,1,961a9801-3956-4ea0-b0d3-908f09bf4929,961a9801-3956-4ea0-b0d3-908f09bf4929,0,1,6fac5c14-e126-4342-9078-edf1d0efcbf2,6fac5c14-e126-4342-9078-edf1d0efcbf2,0,1,0a3325a1-21c4-4997-882f-4ac2edc175f0,0a3325a1-21c4-4997-882f-4ac2edc175f0,0,1,71102d3f-f020-4d6f-9582-9a7eefb4e797,71102d3f-f020-4d6f-9582-9a7eefb4e797,0,1,53ef6849-a3f3-4171-9167-f349f2d6a736,53ef6849-a3f3-4171-9167-f349f2d6a736,0,1,3f588bd3-d461-42b7-8ab1-386af6399d56,3f588bd3-d461-42b7-8ab1-386af6399d56,0,1,c04ff85e-b4af-4a9f-b0e9-c5c65e3d10a1,c04ff85e-b4af-4a9f-b0e9-c5c65e3d10a1,0,1,8c576405-29c1-46b1-ab2e-40e52c21cab0,8c576405-29c1-46b1-ab2e-40e52c21cab0,0,1,b33a89da-8589-4902-83fa-6545e5fce23e,b33a89da-8589-4902-83fa-6545e5fce23e,0,1,f0620d5a-e1fe-419f-af37-e0f462f97e8d,f0620d5a-e1fe-419f-af37-e0f462f97e8d,0,1,3e2f2ae1-c809-43fc-8276-b0a16a92858c,3e2f2ae1-c809-43fc-8276-b0a16a92858c,0,1,b58942ca-1367-4e1d-b5b4-7d973d0fecd8,b58942ca-1367-4e1d-b5b4-7d973d0fecd8,0,1,1a7c7427-bead-4655-9dd6-df6e722663c5,1a7c7427-bead-4655-9dd6-df6e722663c5,0,1,3ad08f4a-6202-4099-b6cc-bc116e6731a0,3ad08f4a-6202-4099-b6cc-bc116e6731a0,0,1,fd96c8ab-602a-4735-b168-52b501e80351,fd96c8ab-602a-4735-b168-52b501e80351,0,1,b1dc619d-8d91-4f7a-aa50-1d07ff9aebdc,b1dc619d-8d91-4f7a-aa50-1d07ff9aebdc,0,1,370f0c75-d2c5-4be5-a633-4bcc77998ece,370f0c75-d2c5-4be5-a633-4bcc77998ece,0,1,f80b505f-b4ff-45fb-bd88-74b274ae9d2b,f80b505f-b4ff-45fb-bd88-74b274ae9d2b,0,1,2139532c-f6cb-4393-936e-cc912e5adca9,2139532c-f6cb-4393-936e-cc912e5adca9,0,1,755c3eca-4956-4a44-9b38-c11dae00b87f,755c3eca-4956-4a44-9b38-c11dae00b87f,0,1,f57c558c-2c94-4b9d-8697-448d0548ab1a,f57c558c-2c94-4b9d-8697-448d0548ab1a,0,1,a310c09f-4d3a-4d3a-9ad5-7a5735a33a1d,a310c09f-4d3a-4d3a-9ad5-7a5735a33a1d,0,1,c32db021-eca1-4b67-aa85-3d6e28c51b53,c32db021-eca1-4b67-aa85-3d6e28c51b53,0,1,e9ed0ee4-3fbe-4093-9078-cb265ed6842c,e9ed0ee4-3fbe-4093-9078-cb265ed6842c,0,1,02466dcf-02a1-4853-814f-a913a9baba45,02466dcf-02a1-4853-814f-a913a9baba45,0,1,c4a40dc9-b619-4219-9d9a-e11f49a14fb1,c4a40dc9-b619-4219-9d9a-e11f49a14fb1,0,1,62b75eb2-42e1-4484-a77f-b676dd36f3d4,62b75eb2-42e1-4484-a77f-b676dd36f3d4,0,1,5e28e22a-dd6e-4703-92bd-13f5cb0dc023,5e28e22a-dd6e-4703-92bd-13f5cb0dc023,0,1,856510ee-74f5-44e9-a3c0-1c60cfb7a787,856510ee-74f5-44e9-a3c0-1c60cfb7a787,0,1,28b761c6-c286-4125-a4ed-da602e49950f,28b761c6-c286-4125-a4ed-da602e49950f,0,1,4ac66a22-c736-4e06-a8aa-ef4a71788c65,4ac66a22-c736-4e06-a8aa-ef4a71788c65,0,1,9cfe9281-8840-4077-824d-a2c9cbb0b730,9cfe9281-8840-4077-824d-a2c9cbb0b730,0,1,76389fa9-b9e0-492e-9c93-24b5f3bf094c,76389fa9-b9e0-492e-9c93-24b5f3bf094c,0,1,23e3de37-9315-45e6-bbfd-60aae28c25ae,23e3de37-9315-45e6-bbfd-60aae28c25ae,0,1,a9957f43-8b6f-4d98-a2d8-77b78047494c,a9957f43-8b6f-4d98-a2d8-77b78047494c,0,1,e470e15d-1b06-43cb-a9f9-ba489e2f596f,e470e15d-1b06-43cb-a9f9-ba489e2f596f,0,1,0408002c-9255-43a2-8022-82f02ee0e8f4,0408002c-9255-43a2-8022-82f02ee0e8f4,0,1,88f44c9b-216d-4d7e-bc88-1e6b253ed01e,88f44c9b-216d-4d7e-bc88-1e6b253ed01e,0,1,1851afd4-5324-45c1-b754-54e65943f945,1851afd4-5324-45c1-b754-54e65943f945,0,1,bc5eca9b-32d8-44e0-a127-8ad1f47d7957,bc5eca9b-32d8-44e0-a127-8ad1f47d7957,0,1,6e5307ea-8fbf-4177-bcc8-f163a6ce1b40,6e5307ea-8fbf-4177-bcc8-f163a6ce1b40,0,1,0fa77ef7-a836-4459-9bca-6010d0bdfc7f,0fa77ef7-a836-4459-9bca-6010d0bdfc7f,0,1,c322dc4a-30f3-4d23-9824-4a01c496408d,c322dc4a-30f3-4d23-9824-4a01c496408d,0,1,dcff004c-1b61-4a19-b977-ea21bf688614,dcff004c-1b61-4a19-b977-ea21bf688614,0,0,0,1,0,0,0,1,0,1,0,1,1,1,1} \ No newline at end of file diff --git a/SSL/src/Constants/ВерсияДатЗапретаИзменения/ВерсияДатЗапретаИзменения.mdo b/SSL/src/Constants/ВерсияДатЗапретаИзменения/ВерсияДатЗапретаИзменения.mdo new file mode 100644 index 000000000..0423374a4 --- /dev/null +++ b/SSL/src/Constants/ВерсияДатЗапретаИзменения/ВерсияДатЗапретаИзменения.mdo @@ -0,0 +1,20 @@ + + + + + + + + ВерсияДатЗапретаИзменения + + ru + Версия дат запрета изменения + + + UUID + + true + + + Managed + diff --git a/SSL/src/Constants/ИспользоватьВнешнихПользователей/ValueManagerModule.bsl b/SSL/src/Constants/ИспользоватьВнешнихПользователей/ValueManagerModule.bsl index 788900d99..e27a78c8c 100644 --- a/SSL/src/Constants/ИспользоватьВнешнихПользователей/ValueManagerModule.bsl +++ b/SSL/src/Constants/ИспользоватьВнешнихПользователей/ValueManagerModule.bsl @@ -26,10 +26,59 @@ МодульУправлениеДоступом = ОбщегоНазначения.ОбщийМодуль("УправлениеДоступом"); МодульУправлениеДоступом.ОбновитьРолиПользователей(Тип("СправочникСсылка.ВнешниеПользователи")); КонецЕсли; + Если Значение Тогда + ОчиститьРеквизитПоказыватьВСпискеВыбораУВсехПользователейИБ(); + Иначе + ОчиститьРеквизитВходВПрограммуРазрешенУВсехВнешнихПользователей(); + КонецЕсли; КонецЕсли; КонецПроцедуры #КонецОбласти +#Область СлужебныеПроцедурыИФункции + +// У всех пользователей ИБ очищает реквизит ПризнакПоказыватьВСписке. +Процедура ОчиститьРеквизитПоказыватьВСпискеВыбораУВсехПользователейИБ() Экспорт + + ПользователиИБ = ПользователиИнформационнойБазы.ПолучитьПользователей(); + Для Каждого ПользовательИБ Из ПользователиИБ Цикл + Если ПользовательИБ.ПоказыватьВСпискеВыбора Тогда + ПользовательИБ.ПоказыватьВСпискеВыбора = Ложь; + ПользовательИБ.Записать(); + КонецЕсли; + КонецЦикла; + +КонецПроцедуры + +// У всех пользователей ИБ очищает реквизит ПризнакПоказыватьВСписке. +Процедура ОчиститьРеквизитВходВПрограммуРазрешенУВсехВнешнихПользователей() + + Запрос = Новый Запрос; + Запрос.Текст = + "ВЫБРАТЬ + | ВнешниеПользователи.ИдентификаторПользователяИБ КАК Идентификатор + |ИЗ + | Справочник.ВнешниеПользователи КАК ВнешниеПользователи"; + Идентификаторы = Запрос.Выполнить().Выгрузить(); + Идентификаторы.Индексы.Добавить("Идентификатор"); + + ПользователиИБ = ПользователиИнформационнойБазы.ПолучитьПользователей(); + Для Каждого ПользовательИБ Из ПользователиИБ Цикл + + Если Идентификаторы.Найти(ПользовательИБ.УникальныйИдентификатор, "Идентификатор") <> Неопределено + И Пользователи.ВходВПрограммуРазрешен(ПользовательИБ) Тогда + + ПользовательИБ.АутентификацияСтандартная = Ложь; + ПользовательИБ.АутентификацияОС = Ложь; + ПользовательИБ.АутентификацияOpenID = Ложь; + ПользовательИБ.Записать(); + КонецЕсли; + КонецЦикла; + +КонецПроцедуры + +#КонецОбласти + #КонецЕсли diff --git a/SSL/src/Constants/ИспользоватьДатыЗапретаЗагрузки/ValueManagerModule.bsl b/SSL/src/Constants/ИспользоватьДатыЗапретаЗагрузки/ValueManagerModule.bsl new file mode 100644 index 000000000..09a20fb90 --- /dev/null +++ b/SSL/src/Constants/ИспользоватьДатыЗапретаЗагрузки/ValueManagerModule.bsl @@ -0,0 +1,19 @@ +#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда + +#Область ОбработчикиСобытий + +Процедура ПриЗаписи(Отказ) + + Если Не ДополнительныеСвойства.Свойство("ПропуститьОбновлениеВерсииДатЗапретаИзменения") Тогда + ДатыЗапретаИзмененияСлужебный.ОбновитьВерсиюДатЗапретаИзменения(); + КонецЕсли; + + Если ОбменДанными.Загрузка Тогда + Возврат; + КонецЕсли; + +КонецПроцедуры + +#КонецОбласти + +#КонецЕсли diff --git a/SSL/src/Constants/ИспользоватьДатыЗапретаЗагрузки/ИспользоватьДатыЗапретаЗагрузки.mdo b/SSL/src/Constants/ИспользоватьДатыЗапретаЗагрузки/ИспользоватьДатыЗапретаЗагрузки.mdo new file mode 100644 index 000000000..5d82576c0 --- /dev/null +++ b/SSL/src/Constants/ИспользоватьДатыЗапретаЗагрузки/ИспользоватьДатыЗапретаЗагрузки.mdo @@ -0,0 +1,19 @@ + + + + + + + + ИспользоватьДатыЗапретаЗагрузки + + ru + Использовать даты запрета загрузки + + + Boolean + + + + Managed + diff --git a/SSL/src/Constants/ИспользоватьДатыЗапретаИзменения/ValueManagerModule.bsl b/SSL/src/Constants/ИспользоватьДатыЗапретаИзменения/ValueManagerModule.bsl new file mode 100644 index 000000000..09a20fb90 --- /dev/null +++ b/SSL/src/Constants/ИспользоватьДатыЗапретаИзменения/ValueManagerModule.bsl @@ -0,0 +1,19 @@ +#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда + +#Область ОбработчикиСобытий + +Процедура ПриЗаписи(Отказ) + + Если Не ДополнительныеСвойства.Свойство("ПропуститьОбновлениеВерсииДатЗапретаИзменения") Тогда + ДатыЗапретаИзмененияСлужебный.ОбновитьВерсиюДатЗапретаИзменения(); + КонецЕсли; + + Если ОбменДанными.Загрузка Тогда + Возврат; + КонецЕсли; + +КонецПроцедуры + +#КонецОбласти + +#КонецЕсли diff --git a/SSL/src/Constants/ИспользоватьДатыЗапретаИзменения/ИспользоватьДатыЗапретаИзменения.mdo b/SSL/src/Constants/ИспользоватьДатыЗапретаИзменения/ИспользоватьДатыЗапретаИзменения.mdo new file mode 100644 index 000000000..a5617a024 --- /dev/null +++ b/SSL/src/Constants/ИспользоватьДатыЗапретаИзменения/ИспользоватьДатыЗапретаИзменения.mdo @@ -0,0 +1,19 @@ + + + + + + + + ИспользоватьДатыЗапретаИзменения + + ru + Использовать даты запрета изменения + + + Boolean + + + + Managed + diff --git a/SSL/src/DataProcessors/ОбновлениеКонфигурации/ManagerModule.bsl b/SSL/src/Constants/ИспользоватьДополнительныеОтчетыИОбработки/ValueManagerModule.bsl similarity index 100% rename from SSL/src/DataProcessors/ОбновлениеКонфигурации/ManagerModule.bsl rename to SSL/src/Constants/ИспользоватьДополнительныеОтчетыИОбработки/ValueManagerModule.bsl diff --git a/SSL/src/Constants/ИспользоватьДополнительныеРеквизитыИСведения/ValueManagerModule.bsl b/SSL/src/Constants/ИспользоватьДополнительныеРеквизитыИСведения/ValueManagerModule.bsl new file mode 100644 index 000000000..879d02a85 --- /dev/null +++ b/SSL/src/Constants/ИспользоватьДополнительныеРеквизитыИСведения/ValueManagerModule.bsl @@ -0,0 +1,34 @@ +#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда + +Перем ЗначениеИзменено; + +#Область ОбработчикиСобытий + +Процедура ПередЗаписью(Отказ) + + Если ОбменДанными.Загрузка Тогда + Возврат; + КонецЕсли; + + ЗначениеИзменено = Значение <> Константы.ИспользоватьДополнительныеРеквизитыИСведения.Получить(); + +КонецПроцедуры + +Процедура ПриЗаписи(Отказ) + + Если ОбменДанными.Загрузка Тогда + Возврат; + КонецЕсли; + + Если ЗначениеИзменено Тогда + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.УправлениеДоступом") Тогда + МодульУправлениеДоступом = ОбщегоНазначения.ОбщийМодуль("УправлениеДоступом"); + МодульУправлениеДоступом.ОбновитьРазрешенныеЗначенияПриИзмененииИспользованияВидовДоступа(); + КонецЕсли; + КонецЕсли; + +КонецПроцедуры + +#КонецОбласти + +#КонецЕсли diff --git a/SSL/src/Constants/ИспользоватьНесколькоОрганизаций/ValueManagerModule.bsl b/SSL/src/Constants/ИспользоватьНесколькоОрганизаций/ValueManagerModule.bsl index ea267d48e..548380b0a 100644 --- a/SSL/src/Constants/ИспользоватьНесколькоОрганизаций/ValueManagerModule.bsl +++ b/SSL/src/Constants/ИспользоватьНесколькоОрганизаций/ValueManagerModule.bsl @@ -4,6 +4,10 @@ Процедура ПриЗаписи(Отказ) + Если ОбменДанными.Загрузка Тогда + Возврат; + КонецЕсли; + УстановитьПривилегированныйРежим(Истина); Константы.НеИспользоватьНесколькоОрганизаций.Установить(НЕ ЭтотОбъект.Значение); diff --git a/SSL/src/Constants/ИспользоватьПроверкуКонтрагентов/ValueManagerModule.bsl b/SSL/src/Constants/ИспользоватьПроверкуКонтрагентов/ValueManagerModule.bsl index 492537349..3b0d0d793 100644 --- a/SSL/src/Constants/ИспользоватьПроверкуКонтрагентов/ValueManagerModule.bsl +++ b/SSL/src/Constants/ИспользоватьПроверкуКонтрагентов/ValueManagerModule.bsl @@ -10,7 +10,7 @@ Процедура ПриЗаписи(Отказ) // При записи преднамеренно не используется ОбменДанными.Загрузка. - // Причина в том, что по РИБу может перемещаться только константа + // Причина в том, что по РИБ может перемещаться только константа // "Использовать сервис проверки данных по контрагенту". // После того, как константа попадет в узел, должно быть включено // регламентное задание для периодической проверки контрагентов. diff --git a/SSL/src/Constants/ИспользоватьРазделениеПоОбластямДанных/ValueManagerModule.bsl b/SSL/src/Constants/ИспользоватьРазделениеПоОбластямДанных/ValueManagerModule.bsl index 987dae0bf..f55a88e93 100644 --- a/SSL/src/Constants/ИспользоватьРазделениеПоОбластямДанных/ValueManagerModule.bsl +++ b/SSL/src/Constants/ИспользоватьРазделениеПоОбластямДанных/ValueManagerModule.bsl @@ -6,6 +6,12 @@ ДополнительныеСвойства.Вставить("ТекущееЗначение", Константы.ИспользоватьРазделениеПоОбластямДанных.Получить()); + Если ОбменДанными.Загрузка Тогда + + Возврат; + + КонецЕсли; + КонецПроцедуры Процедура ПриЗаписи(Отказ) @@ -34,15 +40,28 @@ КонецЕсли; Если ДополнительныеСвойства.ТекущееЗначение <> Значение Тогда + ОбновитьПовторноИспользуемыеЗначения(); + Если Значение Тогда + ОбработчикиСобытия = ОбщегоНазначения.ОбработчикиСлужебногоСобытия( "СтандартныеПодсистемы.БазоваяФункциональность\ПриВключенииРазделенияПоОбластямДанных"); Для каждого Обработчик Из ОбработчикиСобытия Цикл + Обработчик.Модуль.ПриВключенииРазделенияПоОбластямДанных(); + КонецЦикла; + КонецЕсли; + + КонецЕсли; + + Если ОбменДанными.Загрузка Тогда + + Возврат; + КонецЕсли; КонецПроцедуры diff --git a/SSL/src/Constants/НастройкиВходаПользователей/НастройкиВходаПользователей.mdo b/SSL/src/Constants/НастройкиВходаПользователей/НастройкиВходаПользователей.mdo new file mode 100644 index 000000000..f4788f57e --- /dev/null +++ b/SSL/src/Constants/НастройкиВходаПользователей/НастройкиВходаПользователей.mdo @@ -0,0 +1,19 @@ + + + + + + + + НастройкиВходаПользователей + + ru + Настройки входа пользователей + + + ValueStorage + + + + Managed + diff --git a/SSL/src/Constants/ОграничиватьДоступНаУровнеЗаписей/ValueManagerModule.bsl b/SSL/src/Constants/ОграничиватьДоступНаУровнеЗаписей/ValueManagerModule.bsl index a15bbedfd..ecfdad01e 100644 --- a/SSL/src/Constants/ОграничиватьДоступНаУровнеЗаписей/ValueManagerModule.bsl +++ b/SSL/src/Constants/ОграничиватьДоступНаУровнеЗаписей/ValueManagerModule.bsl @@ -1,10 +1,10 @@ #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда Перем ОграничениеДоступаНаУровнеЗаписейВключено; // Флажок изменения значения константы с Ложь на Истина. -// Используется в обработчике события ПриЗаписи. + // Используется в обработчике события ПриЗаписи. Перем ОграничениеДоступаНаУровнеЗаписейИзменено; // Флажок изменения значения константы. -// Используется в обработчике события ПриЗаписи. + // Используется в обработчике события ПриЗаписи. #Область ОбработчикиСобытий diff --git a/SSL/src/Constants/ОценкаПроизводительностиЭкспортВсехКлючевыхОпераций/ОценкаПроизводительностиЭкспортВсехКлючевыхОпераций.mdo b/SSL/src/Constants/ОценкаПроизводительностиЭкспортВсехКлючевыхОпераций/ОценкаПроизводительностиЭкспортВсехКлючевыхОпераций.mdo new file mode 100644 index 000000000..a04cb198d --- /dev/null +++ b/SSL/src/Constants/ОценкаПроизводительностиЭкспортВсехКлючевыхОпераций/ОценкаПроизводительностиЭкспортВсехКлючевыхОпераций.mdo @@ -0,0 +1,24 @@ + + + + + + + + ОценкаПроизводительностиЭкспортВсехКлючевыхОпераций + + ru + Оценка производительности экспорт всех ключевых операций + + + Boolean + + true + + ru + Выполняется экспорт всех замеров ключевых операций, включая те, у которых не проставлены приоритет и целевое время + + + + Managed + diff --git a/SSL/src/Constants/ПараметрыВариантовОтчетов/ПараметрыВариантовОтчетов.mdo b/SSL/src/Constants/ПараметрыВариантовОтчетов/ПараметрыВариантовОтчетов.mdo index a6b1d1fbd..a10f1f138 100644 --- a/SSL/src/Constants/ПараметрыВариантовОтчетов/ПараметрыВариантовОтчетов.mdo +++ b/SSL/src/Constants/ПараметрыВариантовОтчетов/ПараметрыВариантовОтчетов.mdo @@ -10,7 +10,7 @@ ru Параметры вариантов отчетов - Таблица: ИмяФункциональнойОпции, Отчет, ПредопределенныйВариант + Структура хранения описана в процедуре ВариантыОтчетов.ЗаписатьПараметрыВариантовОтчетов(). ValueStorage diff --git a/SSL/src/Constants/ПараметрыОграниченияДоступа/ValueManagerModule.bsl b/SSL/src/Constants/ПараметрыОграниченияДоступа/ValueManagerModule.bsl index 0ffa9a011..fde6e278d 100644 --- a/SSL/src/Constants/ПараметрыОграниченияДоступа/ValueManagerModule.bsl +++ b/SSL/src/Constants/ПараметрыОграниченияДоступа/ValueManagerModule.bsl @@ -105,11 +105,7 @@ ВидыДоступа.Колонки.Добавить("НесколькоГруппЗначений", Новый ОписаниеТипов("Булево")); ВидыДоступа.Колонки.Добавить("ДополнительныеТипы", Новый ОписаниеТипов("ТаблицаЗначений")); - ВидДоступаПользователи = ВидыДоступа.Добавить(); - ВидДоступаВнешниеПользователи = ВидыДоступа.Добавить(); - - ЗаполнитьНеизмененныеСвойстваВидовДоступаПользователиИВнешниеПользователи( - ВидДоступаПользователи, ВидДоступаВнешниеПользователи); + ПользователиСлужебный.ПриЗаполненииВидовДоступа(ВидыДоступа); ОбработчикиСобытия = ОбщегоНазначения.ОбработчикиСлужебногоСобытия( "СтандартныеПодсистемы.УправлениеДоступом\ПриЗаполненииВидовДоступа"); @@ -120,9 +116,6 @@ УправлениеДоступомПереопределяемый.ПриЗаполненииВидовДоступа(ВидыДоступа); - ЗаполнитьНеизмененныеСвойстваВидовДоступаПользователиИВнешниеПользователи( - ВидДоступаПользователи, ВидДоступаВнешниеПользователи); - // Проверки: // - тип значений доступа не указан для 2-х видов доступа // - тип значений доступа Пользователи, ГруппыПользователей используется только для вида доступа Пользователи. @@ -157,8 +150,8 @@ Параметры.Вставить("ЗаголовокОшибки", ЗаголовокОшибки); Параметры.Вставить("ТипыПодпискиОбновитьГруппыЗначенийДоступа", - УправлениеДоступомСлужебныйПовтИсп.ТипыОбъектовВПодпискахНаСобытия( - "ОбновитьГруппыЗначенийДоступа")); + УправлениеДоступомСлужебныйПовтИсп.ТипыПоляТаблицы( + "ОпределяемыйТип.ЗначениеДоступаСГруппамиЗначенийДоступаОбъект")); ВсеИменаВидовДоступа = Новый Соответствие; ВсеИменаВидовДоступа.Вставить(ВРег("Объект"), Истина); @@ -173,8 +166,7 @@ Для каждого ВидДоступа Из ВидыДоступа Цикл Если ВсеИменаВидовДоступа[ВРег(ВидДоступа.Имя)] <> Неопределено Тогда - ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - ЗаголовокОшибки + + ВызватьИсключение ЗаголовокОшибки + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Имя вида доступа ""%1"" уже определено.'"), ВидДоступа.Имя); КонецЕсли; @@ -355,40 +347,21 @@ Если Параметры.ТипыПодпискиОбновитьГруппыЗначенийДоступа.Получить(ТипОбъекта) = Неопределено И НЕ ОбщегоНазначения.ЭтоПеречисление(МетаданныеТипаЗначений) Тогда - ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - Параметры.ЗаголовокОшибки + - НСтр("ru = 'Тип значения доступа ""%1"", использующий группы значений, - |не указан в подписке на событие ""Обновить группы значений доступа"".'"), + ВызватьИсключение Параметры.ЗаголовокОшибки + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Тип значения доступа ""%1"", использующий группы значений, не указан + |в определяемом типе ""Значение доступа с группами значений доступа объект"".'"), Строка(ТипОбъекта)); КонецЕсли; КонецПроцедуры -Процедура ЗаполнитьНеизмененныеСвойстваВидовДоступаПользователиИВнешниеПользователи( - ВидДоступаПользователи, ВидДоступаВнешниеПользователи) - - ВидДоступаПользователи.Имя = "Пользователи"; - ВидДоступаПользователи.Представление = НСтр("ru = 'Пользователи'"); - ВидДоступаПользователи.ТипЗначений = Тип("СправочникСсылка.Пользователи"); - ВидДоступаПользователи.ТипГруппЗначений = Тип("СправочникСсылка.ГруппыПользователей"); - ВидДоступаПользователи.НесколькоГруппЗначений = Истина; - - ВидДоступаВнешниеПользователи.Имя = "ВнешниеПользователи"; - ВидДоступаВнешниеПользователи.Представление = НСтр("ru = 'Внешние пользователи'"); - ВидДоступаВнешниеПользователи.ТипЗначений = Тип("СправочникСсылка.ВнешниеПользователи"); - ВидДоступаВнешниеПользователи.ТипГруппЗначений = Тип("СправочникСсылка.ГруппыВнешнихПользователей"); - ВидДоступаВнешниеПользователи.НесколькоГруппЗначений = Истина; - -КонецПроцедуры - Процедура ПроверитьТип(ВидДоступа, Тип, ВсеТипы, Параметры, ПроверкаТиповГрупп = Ложь, ПроверкаПересечения = Ложь) Если Тип = Тип("Неопределено") Тогда Если ПроверкаТиповГрупп Тогда Возврат; КонецЕсли; - ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - Параметры.ЗаголовокОшибки + + ВызватьИсключение Параметры.ЗаголовокОшибки + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Для вида доступа ""%1"" не указан тип значений доступа.'"), ВидДоступа.Имя); КонецЕсли; @@ -404,8 +377,8 @@ НСтр("ru = 'Тип ""%1"" указан, как тип значений, для вида доступа ""%2"". |Однако это не тип ссылки.'"); КонецЕсли; - ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - Параметры.ЗаголовокОшибки + ОписаниеОшибки, Тип, ВидДоступа.Имя); + ВызватьИсключение Параметры.ЗаголовокОшибки + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + ОписаниеОшибки, Тип, ВидДоступа.Имя); КонецЕсли; // Проверка повторения и пересечения типов значений и групп значений. @@ -436,8 +409,8 @@ Если ВсеТипы.Получить(Тип) <> Неопределено Тогда Если НЕ (ДляТогоЖеВидаДоступаОшибкиНет И ВидДоступа.Имя = ВсеТипы.Получить(Тип)) Тогда - ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - Параметры.ЗаголовокОшибки + ОписаниеОшибки, Тип, ВсеТипы.Получить(Тип), ВидДоступа.Имя); + ВызватьИсключение Параметры.ЗаголовокОшибки + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + ОписаниеОшибки, Тип, ВсеТипы.Получить(Тип), ВидДоступа.Имя); КонецЕсли; ИначеЕсли НЕ ПроверкаПересечения Тогда ВсеТипы.Вставить(Тип, ВидДоступа.Имя); @@ -458,10 +431,8 @@ КонецЕсли; Если ЗначениеЗаполнено(ОписаниеОшибки) Тогда - ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - Параметры.ЗаголовокОшибки + ОписаниеОшибки, - Тип, - ВидДоступа.Имя); + ВызватьИсключение Параметры.ЗаголовокОшибки + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + ОписаниеОшибки, Тип, ВидДоступа.Имя); КонецЕсли; КонецПроцедуры diff --git a/SSL/src/Constants/ПараметрыРаботыПользователей/ValueManagerModule.bsl b/SSL/src/Constants/ПараметрыРаботыПользователей/ValueManagerModule.bsl index 3a1fa7854..1af859cae 100644 --- a/SSL/src/Constants/ПараметрыРаботыПользователей/ValueManagerModule.bsl +++ b/SSL/src/Constants/ПараметрыРаботыПользователей/ValueManagerModule.bsl @@ -122,6 +122,7 @@ РазрешеноИзменениеОбщихДанных = РазрешеноИзменениеОбщихДанных(); НеразделенныеДанныеДоступныеДляИзменения = НеразделенныеДанныеДоступныеДляИзменения(); + НедоступныеРолиПоТипамПользователей = Новый Соответствие; Для каждого ТипПользователей Из Перечисления.ТипыПользователей Цикл @@ -265,24 +266,27 @@ Права = Новый СписокЗначений; НедоступныеПрава.Вставить(Перечисления.ТипыПользователей.ВнешнийПользователь, Права); - Права.Добавить("Администрирование", НСтр("ru = 'Администрирование'")); - Права.Добавить("АдминистрированиеДанных", НСтр("ru = 'Администрирование данных'")); + Права.Добавить("Администрирование", НСтр("ru = 'Администрирование'")); + Права.Добавить("АдминистрированиеРасширенийКонфигурации", НСтр("ru = 'Администрирование расширений конфигурации'")); + Права.Добавить("АдминистрированиеДанных", НСтр("ru = 'Администрирование данных'")); Права = Новый СписокЗначений; НедоступныеПрава.Вставить(Перечисления.ТипыПользователей.ПользовательЛокальногоРешения, Права); - Права.Добавить("Администрирование", НСтр("ru = 'Администрирование'")); - Права.Добавить("ОбновлениеКонфигурацииБазыДанных", НСтр("ru = 'Обновление конфигурации базы данных'")); + Права.Добавить("Администрирование", НСтр("ru = 'Администрирование'")); + Права.Добавить("АдминистрированиеРасширенийКонфигурации", НСтр("ru = 'Администрирование расширений конфигурации'")); + Права.Добавить("ОбновлениеКонфигурацииБазыДанных", НСтр("ru = 'Обновление конфигурации базы данных'")); Права = Новый СписокЗначений; НедоступныеПрава.Вставить(Перечисления.ТипыПользователей.ПользовательОбластиДанных, Права); - Права.Добавить("Администрирование", НСтр("ru = 'Администрирование'")); - Права.Добавить("ОбновлениеКонфигурацииБазыДанных", НСтр("ru = 'Обновление конфигурации базы данных'")); - Права.Добавить("ТолстыйКлиент", НСтр("ru = 'Толстый клиент'")); - Права.Добавить("ВнешнееСоединение", НСтр("ru = 'Внешнее соединение'")); - Права.Добавить("Automation", НСтр("ru = 'Automation'")); - Права.Добавить("ИнтерактивноеОткрытиеВнешнихОбработок", НСтр("ru = 'Интерактивное открытие внешних обработок'")); - Права.Добавить("ИнтерактивноеОткрытиеВнешнихОтчетов", НСтр("ru = 'Интерактивное открытие внешних отчетов'")); - Права.Добавить("РежимВсеФункции", НСтр("ru = 'Режим все функции'")); + Права.Добавить("Администрирование", НСтр("ru = 'Администрирование'")); + Права.Добавить("АдминистрированиеРасширенийКонфигурации", НСтр("ru = 'Администрирование расширений конфигурации'")); + Права.Добавить("ОбновлениеКонфигурацииБазыДанных", НСтр("ru = 'Обновление конфигурации базы данных'")); + Права.Добавить("ТолстыйКлиент", НСтр("ru = 'Толстый клиент'")); + Права.Добавить("ВнешнееСоединение", НСтр("ru = 'Внешнее соединение'")); + Права.Добавить("Automation", НСтр("ru = 'Automation'")); + Права.Добавить("ИнтерактивноеОткрытиеВнешнихОбработок", НСтр("ru = 'Интерактивное открытие внешних обработок'")); + Права.Добавить("ИнтерактивноеОткрытиеВнешнихОтчетов", НСтр("ru = 'Интерактивное открытие внешних отчетов'")); + Права.Добавить("РежимВсеФункции", НСтр("ru = 'Режим все функции'")); Возврат НедоступныеПрава; diff --git a/SSL/src/Constants/ПараметрыЦентраМониторинга/ПараметрыЦентраМониторинга.mdo b/SSL/src/Constants/ПараметрыЦентраМониторинга/ПараметрыЦентраМониторинга.mdo new file mode 100644 index 000000000..3ab99a5a8 --- /dev/null +++ b/SSL/src/Constants/ПараметрыЦентраМониторинга/ПараметрыЦентраМониторинга.mdo @@ -0,0 +1,20 @@ + + + + + + + + ПараметрыЦентраМониторинга + + ru + Параметры центра мониторинга + + + ValueStorage + + true + + + Managed + diff --git a/SSL/src/Constants/ИмяСлужебногоПользователяМенеджераСервиса/ИмяСлужебногоПользователяМенеджераСервиса.mdo b/SSL/src/Constants/УдалитьИмяСлужебногоПользователяМенеджераСервиса/УдалитьИмяСлужебногоПользователяМенеджераСервиса.mdo similarity index 78% rename from SSL/src/Constants/ИмяСлужебногоПользователяМенеджераСервиса/ИмяСлужебногоПользователяМенеджераСервиса.mdo rename to SSL/src/Constants/УдалитьИмяСлужебногоПользователяМенеджераСервиса/УдалитьИмяСлужебногоПользователяМенеджераСервиса.mdo index c4db7eb56..b89891c98 100644 --- a/SSL/src/Constants/ИмяСлужебногоПользователяМенеджераСервиса/ИмяСлужебногоПользователяМенеджераСервиса.mdo +++ b/SSL/src/Constants/УдалитьИмяСлужебногоПользователяМенеджераСервиса/УдалитьИмяСлужебногоПользователяМенеджераСервиса.mdo @@ -5,10 +5,10 @@ - ИмяСлужебногоПользователяМенеджераСервиса + УдалитьИмяСлужебногоПользователяМенеджераСервиса ru - Имя служебного пользователя менеджера сервиса + (не используется) Имя служебного пользователя менеджера сервиса String diff --git a/SSL/src/Constants/ЛогинДляОтправкиSMS/ЛогинДляОтправкиSMS.mdo b/SSL/src/Constants/УдалитьЛогинДляОтправкиSMS/УдалитьЛогинДляОтправкиSMS.mdo similarity index 86% rename from SSL/src/Constants/ЛогинДляОтправкиSMS/ЛогинДляОтправкиSMS.mdo rename to SSL/src/Constants/УдалитьЛогинДляОтправкиSMS/УдалитьЛогинДляОтправкиSMS.mdo index b1ae452ce..8f22197cd 100644 --- a/SSL/src/Constants/ЛогинДляОтправкиSMS/ЛогинДляОтправкиSMS.mdo +++ b/SSL/src/Constants/УдалитьЛогинДляОтправкиSMS/УдалитьЛогинДляОтправкиSMS.mdo @@ -5,10 +5,10 @@ - ЛогинДляОтправкиSMS + УдалитьЛогинДляОтправкиSMS ru - Логин для отправки SMS + (не используется) Логин для отправки SMS String diff --git a/SSL/src/Constants/ПарольДляОтправкиSMS/ПарольДляОтправкиSMS.mdo b/SSL/src/Constants/УдалитьПарольДляОтправкиSMS/УдалитьПарольДляОтправкиSMS.mdo similarity index 86% rename from SSL/src/Constants/ПарольДляОтправкиSMS/ПарольДляОтправкиSMS.mdo rename to SSL/src/Constants/УдалитьПарольДляОтправкиSMS/УдалитьПарольДляОтправкиSMS.mdo index cbf965152..6fc0a721a 100644 --- a/SSL/src/Constants/ПарольДляОтправкиSMS/ПарольДляОтправкиSMS.mdo +++ b/SSL/src/Constants/УдалитьПарольДляОтправкиSMS/УдалитьПарольДляОтправкиSMS.mdo @@ -5,10 +5,10 @@ - ПарольДляОтправкиSMS + УдалитьПарольДляОтправкиSMS ru - Пароль для отправки SMS + (не используется) Пароль для отправки SMS String diff --git a/SSL/src/Constants/ПарольСлужебногоПользователяМенеджераСервиса/ПарольСлужебногоПользователяМенеджераСервиса.mdo b/SSL/src/Constants/УдалитьПарольСлужебногоПользователяМенеджераСервиса/УдалитьПарольСлужебногоПользователяМенеджераСервиса.mdo similarity index 78% rename from SSL/src/Constants/ПарольСлужебногоПользователяМенеджераСервиса/ПарольСлужебногоПользователяМенеджераСервиса.mdo rename to SSL/src/Constants/УдалитьПарольСлужебногоПользователяМенеджераСервиса/УдалитьПарольСлужебногоПользователяМенеджераСервиса.mdo index a51b9f649..fbf4debb4 100644 --- a/SSL/src/Constants/ПарольСлужебногоПользователяМенеджераСервиса/ПарольСлужебногоПользователяМенеджераСервиса.mdo +++ b/SSL/src/Constants/УдалитьПарольСлужебногоПользователяМенеджераСервиса/УдалитьПарольСлужебногоПользователяМенеджераСервиса.mdo @@ -5,10 +5,10 @@ - ПарольСлужебногоПользователяМенеджераСервиса + УдалитьПарольСлужебногоПользователяМенеджераСервиса ru - Пароль служебного пользователя менеджера сервиса + (не используется) Пароль служебного пользователя менеджера сервиса String diff --git a/SSL/src/Constants/УдалитьПоказыватьКомандуДополнительныеПечатныеФормы/УдалитьПоказыватьКомандуДополнительныеПечатныеФормы.mdo b/SSL/src/Constants/УдалитьПоказыватьКомандуДополнительныеПечатныеФормы/УдалитьПоказыватьКомандуДополнительныеПечатныеФормы.mdo deleted file mode 100644 index 24f189e6c..000000000 --- a/SSL/src/Constants/УдалитьПоказыватьКомандуДополнительныеПечатныеФормы/УдалитьПоказыватьКомандуДополнительныеПечатныеФормы.mdo +++ /dev/null @@ -1,20 +0,0 @@ - - - - - - - - УдалитьПоказыватьКомандуДополнительныеПечатныеФормы - - ru - (не используется) Показывать команду дополнительные печатные формы - - Переназначить ФО.ИспользоватьДополнительныеПечатныеФормы на эту константу после окончательного перевода команд печати на версию 2.1.4 - - Boolean - - - - Managed - diff --git a/SSL/src/DataProcessors/АвтоматическоеИзвлечениеТекстов/Forms/Форма/Form.form b/SSL/src/DataProcessors/АвтоматическоеИзвлечениеТекстов/Forms/Форма/Form.form index 5f76bfa39..8fa470b47 100644 --- a/SSL/src/DataProcessors/АвтоматическоеИзвлечениеТекстов/Forms/Форма/Form.form +++ b/SSL/src/DataProcessors/АвтоматическоеИзвлечениеТекстов/Forms/Форма/Form.form @@ -409,7 +409,6 @@ Vertical true true - UseIfNecessary auto true @@ -558,7 +557,7 @@ Старт - Auto + DontUse Auto @@ -580,7 +579,7 @@ Стоп - Auto + DontUse Auto @@ -602,7 +601,7 @@ ИзвлечьВсе - Auto + DontUse Auto diff --git a/SSL/src/DataProcessors/АвтоматическоеИзвлечениеТекстов/Forms/Форма/Module.bsl b/SSL/src/DataProcessors/АвтоматическоеИзвлечениеТекстов/Forms/Форма/Module.bsl index 9e93280e8..a51b7342d 100644 --- a/SSL/src/DataProcessors/АвтоматическоеИзвлечениеТекстов/Forms/Форма/Module.bsl +++ b/SSL/src/DataProcessors/АвтоматическоеИзвлечениеТекстов/Forms/Форма/Module.bsl @@ -59,9 +59,7 @@ Если ВключеноИзвлечениеТекста Тогда ОтключитьОбработчикОжидания("ИзвлечениеТекстовКлиентОбработчик"); - // Здесь ТекущаяДата не выводится и не пишется в базу, а используется только - // на клиенте в информационных целях, поэтому заменять на ТекущаяДатаСеанса не надо. - ПрогнозируемоеВремяНачалаИзвлечения = ТекущаяДата() + ИнтервалВремениВыполнения; + ПрогнозируемоеВремяНачалаИзвлечения = ОбщегоНазначенияКлиент.ДатаСеанса() + ИнтервалВремениВыполнения; ПодключитьОбработчикОжидания("ИзвлечениеТекстовКлиентОбработчик", ИнтервалВремениВыполнения); ОбновлениеОбратногоОтсчета(); КонецЕсли; @@ -86,9 +84,7 @@ ВключеноИзвлечениеТекста = Истина; - // Здесь ТекущаяДата не выводится и не пишется в базу, а используется только - // на клиенте в информационных целях, поэтому заменять на ТекущаяДатаСеанса не надо. - ПрогнозируемоеВремяНачалаИзвлечения = ТекущаяДата(); + ПрогнозируемоеВремяНачалаИзвлечения = ОбщегоНазначенияКлиент.ДатаСеанса(); ПодключитьОбработчикОжидания("ИзвлечениеТекстовКлиентОбработчик", ИнтервалВремениВыполнения); #Если НЕ ВебКлиент Тогда @@ -144,9 +140,7 @@ &НаКлиенте Процедура ОбновлениеОбратногоОтсчета() - // Здесь ТекущаяДата не выводится и не пишется в базу, а используется только - // на клиенте в информационных целях, поэтому заменять на ТекущаяДатаСеанса не надо. - Осталось = ПрогнозируемоеВремяНачалаИзвлечения - ТекущаяДата(); + Осталось = ПрогнозируемоеВремяНачалаИзвлечения - ОбщегоНазначенияКлиент.ДатаСеанса(); ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'До начала извлечения текстов осталось %1 сек'"), @@ -175,9 +169,7 @@ &НаКлиенте Процедура ИзвлечениеТекстовКлиент(РазмерПорции = Неопределено) - // Здесь ТекущаяДата не выводится и не пишется в базу, а используется только - // на клиенте в информационных целях, поэтому заменять на ТекущаяДатаСеанса не надо. - ПрогнозируемоеВремяНачалаИзвлечения = ТекущаяДата() + ИнтервалВремениВыполнения; + ПрогнозируемоеВремяНачалаИзвлечения = ОбщегоНазначенияКлиент.ДатаСеанса() + ИнтервалВремениВыполнения; Состояние(НСтр("ru = 'Начато извлечение текста'")); @@ -294,8 +286,13 @@ Кодировка = ФайловыеФункцииСлужебный.ПолучитьКодировкуВерсииФайла(Строка.Ссылка); - Результат.Добавить(Новый Структура("Ссылка, Расширение, Наименование, Кодировка", - Строка.Ссылка, Строка.Расширение, Строка.Наименование, Кодировка)); + СтруктураСтроки = Новый Структура; + СтруктураСтроки.Вставить("Ссылка", Строка.Ссылка); + СтруктураСтроки.Вставить("Расширение", Строка.Расширение); + СтруктураСтроки.Вставить("Наименование", Строка.Наименование); + СтруктураСтроки.Вставить("Кодировка", Кодировка); + + Результат.Добавить(СтруктураСтроки); КонецЦикла; diff --git a/SSL/src/DataProcessors/АктивныеПользователи/Commands/АктивныеПользователи/CommandModule.bsl b/SSL/src/DataProcessors/АктивныеПользователи/Commands/АктивныеПользователи/CommandModule.bsl index 6c22ba157..ba1cbdf0c 100644 --- a/SSL/src/DataProcessors/АктивныеПользователи/Commands/АктивныеПользователи/CommandModule.bsl +++ b/SSL/src/DataProcessors/АктивныеПользователи/Commands/АктивныеПользователи/CommandModule.bsl @@ -1,5 +1,9 @@ +#Область ОбработчикиСобытий + &НаКлиенте Процедура ОбработкаКоманды(ПараметрКоманды, ПараметрыВыполненияКоманды) ОткрытьФорму("Обработка.АктивныеПользователи.Форма", , ПараметрыВыполненияКоманды.Источник, ПараметрыВыполненияКоманды.Уникальность, ПараметрыВыполненияКоманды.Окно); КонецПроцедуры + +#КонецОбласти \ No newline at end of file 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 919d9bd29..b9307dbc6 100644 --- a/SSL/src/DataProcessors/АктивныеПользователи/Forms/ФормаСпискаАктивныхПользователей/Form.form +++ b/SSL/src/DataProcessors/АктивныеПользователи/Forms/АктивныеПользователи/Form.form @@ -1025,7 +1025,6 @@ true true true - UseIfNecessary auto true @@ -1382,7 +1381,7 @@ ОткрытьЖурналРегистрации - Auto + DontUse Auto @@ -1408,7 +1407,7 @@ ОбновитьВыполнить - Auto + DontUse Auto @@ -1433,7 +1432,7 @@ СортироватьПоВозрастанию - Auto + DontUse Auto @@ -1458,7 +1457,7 @@ СортироватьПоУбыванию - Auto + DontUse Auto @@ -1483,7 +1482,7 @@ ЗавершитьСеанс - Auto + DontUse Auto @@ -1506,7 +1505,7 @@ TextPicture - Auto + DontUse Auto 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 bfe9000e6..23908dbd0 100644 --- a/SSL/src/DataProcessors/АктивныеПользователи/Forms/ФормаСпискаАктивныхПользователей/Module.bsl +++ b/SSL/src/DataProcessors/АктивныеПользователи/Forms/АктивныеПользователи/Module.bsl @@ -215,7 +215,7 @@ ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно; ОтборЭлемента.ПравоеЗначение = 0; - Элемент.Оформление.УстановитьЗначениеПараметра("Шрифт", Новый Шрифт(WindowsШрифты.ШрифтДиалоговИМеню, , , Истина, Ложь, Ложь, Ложь, )); + Элемент.Оформление.УстановитьЗначениеПараметра("Шрифт", Новый Шрифт(,, Истина)); КонецПроцедуры @@ -293,7 +293,7 @@ Если НЕ ОбщегоНазначенияПовтИсп.РазделениеВключено() ИЛИ ОбщегоНазначенияПовтИсп.ДоступноИспользованиеРазделенныхДанных() Тогда - Пользователи.НайтиНеоднозначныхПользователейИБ(,); + Пользователи.НайтиНеоднозначныхПользователейИБ(Неопределено); КонецЕсли; СеансыИнформационнойБазы = ПолучитьСеансыИнформационнойБазы(); @@ -301,7 +301,7 @@ ФильтроватьИменаПриложений = ЗначениеЗаполнено(ОтборИмяПриложения); Если ФильтроватьИменаПриложений Тогда - ИменаПриложений = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(ОтборИмяПриложения, ","); + ИменаПриложений = СтрРазделить(ОтборИмяПриложения, ","); КонецЕсли; Для Каждого СеансИБ Из СеансыИнформационнойБазы Цикл @@ -390,7 +390,7 @@ Если ОбщегоНазначенияПовтИсп.РазделениеВключено() И Не ОбщегоНазначенияПовтИсп.ДоступноИспользованиеРазделенныхДанных() Тогда Возврат Неопределено; - КонецЕсли; + КонецЕсли; Запрос = Новый Запрос; @@ -401,16 +401,10 @@ |ГДЕ | ИдентификаторПользователяИБ = &Идентификатор"; - ТекстЗапросаПоПользователям = - СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - ШаблонТекстаЗапроса, - "Справочник.Пользователи"); + ТекстЗапросаПоПользователям = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонТекстаЗапроса, Метаданные.Справочники.Пользователи.ПолноеИмя()); + + ТекстЗапросаПоВнешнимПользователям = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонТекстаЗапроса, Метаданные.Справочники.ВнешниеПользователи.ПолноеИмя()); - ТекстЗапросаПоВнешнимПользователям = - СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - ШаблонТекстаЗапроса, - "Справочник.ВнешниеПользователи"); - Запрос.Текст = ТекстЗапросаПоПользователям; Запрос.Параметры.Вставить("Идентификатор", Идентификатор); Результат = Запрос.Выполнить(); @@ -512,9 +506,8 @@ И ДополнительныеПараметры.НомераСеансов.Количество() > 1 Тогда ТекстОповещения = НСтр("ru = 'Сеансы %1 завершены.'"); - НомераСеансов = СтроковыеФункцииКлиентСервер.СтрокаИзМассиваПодстрок(ДополнительныеПараметры.НомераСеансов); - ТекстОповещения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ТекстОповещения, - НомераСеансов); + НомераСеансов = СтрСоединить(ДополнительныеПараметры.НомераСеансов, ","); + ТекстОповещения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ТекстОповещения, НомераСеансов); ПоказатьОповещениеПользователя(НСтр("ru = 'Завершение сеансов'"),, ТекстОповещения); Иначе diff --git a/SSL/src/DataProcessors/АктивныеПользователи/АктивныеПользователи.mdo b/SSL/src/DataProcessors/АктивныеПользователи/АктивныеПользователи.mdo index 1a0ba27fc..6c5aec097 100644 --- a/SSL/src/DataProcessors/АктивныеПользователи/АктивныеПользователи.mdo +++ b/SSL/src/DataProcessors/АктивныеПользователи/АктивныеПользователи.mdo @@ -10,7 +10,7 @@ Активные пользователи true - DataProcessor.АктивныеПользователи.Form.ФормаСпискаАктивныхПользователей + DataProcessor.АктивныеПользователи.Form.АктивныеПользователи true @@ -18,7 +18,7 @@ - ФормаСпискаАктивныхПользователей + АктивныеПользователи ru Активные пользователи 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 e40f12b26..9e3dec575 100644 --- a/SSL/src/DataProcessors/БлокировкаРаботыПользователей/Forms/Форма/Form.form +++ b/SSL/src/DataProcessors/БлокировкаРаботыПользователей/Forms/БлокировкаСоединенийСИнформационнойБазой/Form.form @@ -1129,7 +1129,6 @@ true true true - UseIfNecessary auto true @@ -1326,7 +1325,7 @@ Применить - Auto + DontUse Auto @@ -1352,7 +1351,7 @@ TextPicture - Auto + DontUse Auto @@ -1378,7 +1377,7 @@ TextPicture - Auto + DontUse Auto @@ -1400,7 +1399,7 @@ ПараметрыАдминистрирования - Auto + DontUse Auto diff --git a/SSL/src/DataProcessors/БлокировкаРаботыПользователей/Forms/Форма/Module.bsl b/SSL/src/DataProcessors/БлокировкаРаботыПользователей/Forms/БлокировкаСоединенийСИнформационнойБазой/Module.bsl similarity index 98% rename from SSL/src/DataProcessors/БлокировкаРаботыПользователей/Forms/Форма/Module.bsl rename to SSL/src/DataProcessors/БлокировкаРаботыПользователей/Forms/БлокировкаСоединенийСИнформационнойБазой/Module.bsl index 6a70d80f7..17e73c61b 100644 --- a/SSL/src/DataProcessors/БлокировкаРаботыПользователей/Forms/Форма/Module.bsl +++ b/SSL/src/DataProcessors/БлокировкаРаботыПользователей/Forms/БлокировкаСоединенийСИнформационнойБазой/Module.bsl @@ -143,8 +143,7 @@ |Продолжить?'"); КонецЕсли; Оповещение = Новый ОписаниеОповещения("ПрименитьЗавершение", ЭтотОбъект, "Подтверждение"); - ТекстВопроса = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - ТекстВопроса, Объект.НачалоДействияБлокировки - 900, Объект.НачалоДействияБлокировки); + ТекстВопроса = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ТекстВопроса, Объект.НачалоДействияБлокировки - 900, Объект.НачалоДействияБлокировки); ПоказатьВопрос(Оповещение, ТекстВопроса, РежимДиалогаВопрос.ОКОтмена,,, ЗаголовокВопроса); КонецЕсли; @@ -187,7 +186,7 @@ УстановитьБлокировкуРегламентныхЗаданийНаСервере(ПараметрыАдминистрирования); Иначе АдминистрированиеКластераКлиентСервер.УстановитьБлокировкуРегламентныхЗаданийИнформационнойБазы( - ПараметрыАдминистрирования,, Объект.ЗапретитьРаботуРегламентныхЗаданий); + ПараметрыАдминистрирования, Неопределено, Объект.ЗапретитьРаботуРегламентныхЗаданий); КонецЕсли; Исключение @@ -396,8 +395,7 @@ &НаКлиентеНаСервереБезКонтекста Процедура ОбновитьСостояниеБлокировки(Форма) - Форма.Элементы.Состояние.Заголовок = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru='Пожалуйста, подождите... + Форма.Элементы.Состояние.Заголовок = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru='Пожалуйста, подождите... |Работа пользователей завершается. Осталось активных сеансов: %1'"), Форма.КоличествоСеансов); @@ -426,7 +424,7 @@ &НаСервере Функция КраткоеОписаниеОшибки(ОписаниеОшибки) ТекстОшибки = ОписаниеОшибки; - Позиция = Найти(ТекстОшибки, "}:"); + Позиция = СтрНайти(ТекстОшибки, "}:"); Если Позиция > 0 Тогда ТекстОшибки = СокрЛП(Сред(ТекстОшибки, Позиция + 2, СтрДлина(ТекстОшибки))); КонецЕсли; @@ -554,7 +552,7 @@ Процедура УстановитьБлокировкуРегламентныхЗаданийНаСервере(ПараметрыАдминистрирования) АдминистрированиеКластераКлиентСервер.УстановитьБлокировкуРегламентныхЗаданийИнформационнойБазы( - ПараметрыАдминистрирования,, Объект.ЗапретитьРаботуРегламентныхЗаданий); + ПараметрыАдминистрирования, Неопределено, Объект.ЗапретитьРаботуРегламентныхЗаданий); КонецПроцедуры diff --git a/SSL/src/DataProcessors/БлокировкаРаботыПользователей/Forms/ОшибкаУстановкиМонопольногоРежима/Form.form b/SSL/src/DataProcessors/БлокировкаРаботыПользователей/Forms/ОшибкаУстановкиМонопольногоРежима/Form.form index 6744b5e3d..57bdae90b 100644 --- a/SSL/src/DataProcessors/БлокировкаРаботыПользователей/Forms/ОшибкаУстановкиМонопольногоРежима/Form.form +++ b/SSL/src/DataProcessors/БлокировкаРаботыПользователей/Forms/ОшибкаУстановкиМонопольногоРежима/Form.form @@ -612,7 +612,6 @@ true true true - UseIfNecessary auto true @@ -737,6 +736,26 @@ true + + КоличествоАктивныхСеансов + + <key>ru</key> + <value>Количество активных сеансов</value> + + 8 + + Number + + 10 + + + + true + + + true + + ЗавершитьСеансыИПерезапуститьПрограмму @@ -752,7 +771,7 @@ <name>ЗавершитьСеансыИПерезапуститьПрограмму</name> </handler> </action> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <formCommands> @@ -774,7 +793,7 @@ <name>ОтменитьЗапускПрограммы</name> </handler> </action> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <formCommands> @@ -796,7 +815,7 @@ <name>ПовторитьЗапускПрограммы</name> </handler> </action> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <parameters> diff --git a/SSL/src/DataProcessors/БлокировкаРаботыПользователей/Forms/ОшибкаУстановкиМонопольногоРежима/Module.bsl b/SSL/src/DataProcessors/БлокировкаРаботыПользователей/Forms/ОшибкаУстановкиМонопольногоРежима/Module.bsl index 922390401..796ef89a8 100644 --- a/SSL/src/DataProcessors/БлокировкаРаботыПользователей/Forms/ОшибкаУстановкиМонопольногоРежима/Module.bsl +++ b/SSL/src/DataProcessors/БлокировкаРаботыПользователей/Forms/ОшибкаУстановкиМонопольногоРежима/Module.bsl @@ -16,15 +16,21 @@ АктивныеПользователиШаблон = НСтр("ru = 'Активные пользователи (%1)'"); - КоличествоАктивныхСеансов = СоединенияИБ.КоличествоСеансовИнформационнойБазы(); - Элементы.АктивныеПользователи.Заголовок = СтроковыеФункцииКлиентСервер. - ПодставитьПараметрыВСтроку(АктивныеПользователиШаблон, КоличествоАктивныхСеансов); + КоличествоАктивныхСеансов = КоличестваАктивныхСеансовНаСервере(); + Элементы.АктивныеПользователи.Заголовок = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(АктивныеПользователиШаблон, КоличествоАктивныхСеансов); КонецПроцедуры &НаКлиенте Процедура ПриОткрытии(Отказ) - ПодключитьОбработчикОжидания("ОбновитьКоличествоАктивныхСеансов", 30); + + Если КоличествоАктивныхСеансов = 0 Тогда + Отказ = Истина; + ВыполнитьОбработкуОповещения(ОписаниеОповещенияОЗакрытии, Ложь); + Иначе + ПодключитьОбработчикОжидания("ОбновитьКоличествоАктивныхСеансов", 30); + КонецЕсли; + КонецПроцедуры #КонецОбласти @@ -34,14 +40,21 @@ &НаКлиенте Процедура АктивныеПользователиНажатие(Элемент) - ОткрытьФорму("Обработка.АктивныеПользователи.Форма.ФормаСпискаАктивныхПользователей", Новый Структура("ОшибкаУстановкиМонопольногоРежима")); + ОписаниеОповещения = Новый ОписаниеОповещения("ОткрытьСписокАктивныхПользователейЗавершение", ЭтотОбъект); + ОткрытьФорму("Обработка.АктивныеПользователи.Форма.АктивныеПользователи", + Новый Структура("ОшибкаУстановкиМонопольногоРежима"), , , , , + ОписаниеОповещения, + РежимОткрытияОкнаФормы.БлокироватьОкноВладельца); КонецПроцедуры &НаКлиенте Процедура АктивныеПользователи2Нажатие(Элемент) - ОткрытьФорму("Обработка.АктивныеПользователи.Форма.ФормаСпискаАктивныхПользователей"); + ОписаниеОповещения = Новый ОписаниеОповещения("ОткрытьСписокАктивныхПользователейЗавершение", ЭтотОбъект); + ОткрытьФорму("Обработка.АктивныеПользователи.Форма.АктивныеПользователи" , , , , , , + ОписаниеОповещения, + РежимОткрытияОкнаФормы.БлокироватьОкноВладельца); КонецПроцедуры @@ -86,44 +99,46 @@ #Область СлужебныеПроцедурыИФункции &НаКлиенте -Процедура ОбновитьКоличествоАктивныхСеансов() - - Результат = ОбновлениеКоличестваАктивныхСеансовНаСервере(); - Если Результат Тогда - Закрыть(Ложь); - КонецЕсли; - +Процедура ОткрытьСписокАктивныхПользователейЗавершение(Результат, ДополнительныеПараметры) Экспорт + ОбновитьКоличествоАктивныхСеансов(); КонецПроцедуры -&НаСервере -Функция ОбновлениеКоличестваАктивныхСеансовНаСервере() +&НаКлиенте +Процедура ОбновитьКоличествоАктивныхСеансов() Если ТекущаяСтраницаПомощника = "Страница2" Тогда АктивныеПользователи = "АктивныеПользователи2"; Иначе АктивныеПользователи = "АктивныеПользователи"; КонецЕсли; - - СеансыИнформационнойБазы = ПолучитьСеансыИнформационнойБазы(); - КоличествоАктивныхСеансов = СеансыИнформационнойБазы.Количество(); - Элементы[АктивныеПользователи].Заголовок = СтроковыеФункцииКлиентСервер. - ПодставитьПараметрыВСтроку(АктивныеПользователиШаблон, КоличествоАктивныхСеансов); - КоличествоСеансовПрепятствующихОбновлению = 0; + Результат = КоличестваАктивныхСеансовНаСервере(); + Если Результат = 0 Тогда + Закрыть(Ложь); + Иначе + Элементы[АктивныеПользователи].Заголовок = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(АктивныеПользователиШаблон, Результат); + КонецЕсли; + +КонецПроцедуры + +&НаСервере +Функция КоличестваАктивныхСеансовНаСервере() + + СеансыИнформационнойБазы = ПолучитьСеансыИнформационнойБазы(); + + НомерСеансаТекущегоПользователя = НомерСеансаИнформационнойБазы(); + КоличествоСеансовПрепятствующихПродолжению = 0; Для Каждого СеансИБ Из СеансыИнформационнойБазы Цикл - Если СеансИБ.ИмяПриложения = "Designer" Тогда + Если СеансИБ.ИмяПриложения = "Designer" + Или СеансИБ.НомерСеанса = НомерСеансаТекущегоПользователя Тогда Продолжить; КонецЕсли; - КоличествоСеансовПрепятствующихОбновлению = КоличествоСеансовПрепятствующихОбновлению + 1; + КоличествоСеансовПрепятствующихПродолжению = КоличествоСеансовПрепятствующихПродолжению + 1; КонецЦикла; - Если КоличествоСеансовПрепятствующихОбновлению = 1 Тогда - Возврат Истина; - Иначе - Возврат Ложь; - КонецЕсли; + Возврат КоличествоСеансовПрепятствующихПродолжению; КонецФункции @@ -181,7 +196,7 @@ Функция КраткоеОписаниеОшибки(ОписаниеОшибки) ТекстОшибки = ОписаниеОшибки; - Позиция = Найти(ТекстОшибки, "}:"); + Позиция = СтрНайти(ТекстОшибки, "}:"); Если Позиция > 0 Тогда ТекстОшибки = СокрЛП(Сред(ТекстОшибки, Позиция + 2, СтрДлина(ТекстОшибки))); КонецЕсли; diff --git a/SSL/src/DataProcessors/БлокировкаРаботыПользователей/БлокировкаРаботыПользователей.mdo b/SSL/src/DataProcessors/БлокировкаРаботыПользователей/БлокировкаРаботыПользователей.mdo index 57d4cdb9e..08f6ce75e 100644 --- a/SSL/src/DataProcessors/БлокировкаРаботыПользователей/БлокировкаРаботыПользователей.mdo +++ b/SSL/src/DataProcessors/БлокировкаРаботыПользователей/БлокировкаРаботыПользователей.mdo @@ -10,7 +10,7 @@ <value>Блокировка работы пользователей</value> </synonym> <useStandardCommands>true</useStandardCommands> - <defaultForm>DataProcessor.БлокировкаРаботыПользователей.Form.Форма</defaultForm> + <defaultForm>DataProcessor.БлокировкаРаботыПользователей.Form.БлокировкаСоединенийСИнформационнойБазой</defaultForm> <includeHelpInContents>true</includeHelpInContents> <help> <pages> @@ -121,7 +121,7 @@ <maxValue xsi:type="core:UndefinedValue"/> </attributes> <forms uuid="ca4c0299-625a-4b03-be0e-36ffb45c6d08"> - <name>Форма</name> + <name>БлокировкаСоединенийСИнформационнойБазой</name> <synonym> <key>ru</key> <value>Блокировка соединений с информационной базой</value> diff --git a/SSL/src/DataProcessors/ВводКонтактнойИнформации/Forms/ВводАдреса/Form.form b/SSL/src/DataProcessors/ВводКонтактнойИнформации/Forms/ВводАдреса/Form.form index 53706cc00..463bf1ebc 100644 --- a/SSL/src/DataProcessors/ВводКонтактнойИнформации/Forms/ВводАдреса/Form.form +++ b/SSL/src/DataProcessors/ВводКонтактнойИнформации/Forms/ВводАдреса/Form.form @@ -199,6 +199,10 @@ <key>ru</key> <value>Почтовый индекс российского адреса</value> </toolTip> + <handlers> + <event>OnChange</event> + <name>ИндексПриИзменении</name> + </handlers> <extendedTooltip> <name>ИндексExtendedTooltip</name> <id>110</id> @@ -228,6 +232,7 @@ <event>ChoiceProcessing</event> <name>ИндексОбработкаВыбора</name> </handlers> + <width>6</width> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> <wrap>true</wrap> @@ -243,6 +248,47 @@ <textSize>Normal</textSize> </extInfo> </items> + <items xsi:type="form:FormField"> + <name>ОКТМО</name> + <id>279</id> + <enabled>true</enabled> + <userVisible> + <common>true</common> + </userVisible> + <dataPath xsi:type="form:DataPath"> + <segments>ОКТМО</segments> + </dataPath> + <extendedTooltip> + <name>ОКТМОРасширеннаяПодсказка</name> + <id>281</id> + <type>Label</type> + <autoMaxWidth>true</autoMaxWidth> + <autoMaxHeight>true</autoMaxHeight> + <extInfo xsi:type="form:LabelDecorationExtInfo"> + <horizontalAlign>Left</horizontalAlign> + </extInfo> + </extendedTooltip> + <contextMenu> + <name>ОКТМОКонтекстноеМеню</name> + <id>280</id> + <autoFill>true</autoFill> + </contextMenu> + <type>InputField</type> + <editMode>Enter</editMode> + <showInHeader>true</showInHeader> + <headerHorizontalAlign>Left</headerHorizontalAlign> + <showInFooter>true</showInFooter> + <extInfo xsi:type="form:InputFieldExtInfo"> + <width>10</width> + <autoMaxWidth>true</autoMaxWidth> + <autoMaxHeight>true</autoMaxHeight> + <wrap>true</wrap> + <chooseType>true</chooseType> + <typeDomainEnabled>true</typeDomainEnabled> + <textEdit>true</textEdit> + <textSize>Normal</textSize> + </extInfo> + </items> <visible>true</visible> <enabled>true</enabled> <userVisible> @@ -268,7 +314,6 @@ </extendedTooltip> <type>UsualGroup</type> <extInfo xsi:type="form:UsualGroupExtInfo"> - <group>Vertical</group> <behavior>Auto</behavior> <showLeftMargin>true</showLeftMargin> <united>true</united> @@ -565,6 +610,10 @@ <headerHorizontalAlign>Left</headerHorizontalAlign> <showInFooter>true</showInFooter> <extInfo xsi:type="form:InputFieldExtInfo"> + <handlers> + <event>AutoComplete</event> + <name>ДомАвтоПодбор</name> + </handlers> <width>7</width> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -1565,6 +1614,675 @@ <items xsi:type="form:FormGroup"> <name>ИностранныйАдрес</name> <id>3</id> + <items xsi:type="form:FormGroup"> + <name>СтруктураИностранныйАдреса</name> + <id>320</id> + <items xsi:type="form:FormField"> + <name>НаселенныйПунктИностранныйАдреса</name> + <id>282</id> + <visible>true</visible> + <enabled>true</enabled> + <userVisible> + <common>true</common> + </userVisible> + <dataPath xsi:type="form:DataPath"> + <segments>НаселенныйПункт</segments> + </dataPath> + <handlers> + <event>OnChange</event> + <name>НаселенныйПунктИностранныйАдресаПриИзменении</name> + </handlers> + <extendedTooltip> + <name>НаселенныйПунктИностранныйАдресаРасширеннаяПодсказка</name> + <id>284</id> + <type>Label</type> + <autoMaxWidth>true</autoMaxWidth> + <autoMaxHeight>true</autoMaxHeight> + <extInfo xsi:type="form:LabelDecorationExtInfo"> + <horizontalAlign>Left</horizontalAlign> + </extInfo> + </extendedTooltip> + <contextMenu> + <name>НаселенныйПунктИностранныйАдресаКонтекстноеМеню</name> + <id>283</id> + <autoFill>true</autoFill> + </contextMenu> + <type>InputField</type> + <editMode>Enter</editMode> + <showInHeader>true</showInHeader> + <headerHorizontalAlign>Left</headerHorizontalAlign> + <showInFooter>true</showInFooter> + <extInfo xsi:type="form:InputFieldExtInfo"> + <handlers> + <event>StartChoice</event> + <name>НаселенныйПунктИностранныйАдресаНачалоВыбора</name> + </handlers> + <handlers> + <event>ChoiceProcessing</event> + <name>НаселенныйПунктИностранныйАдресаОбработкаВыбора</name> + </handlers> + <autoMaxWidth>true</autoMaxWidth> + <autoMaxHeight>true</autoMaxHeight> + <wrap>true</wrap> + <choiceButton>true</choiceButton> + <chooseType>true</chooseType> + <typeDomainEnabled>true</typeDomainEnabled> + <textEdit>true</textEdit> + <textSize>Normal</textSize> + </extInfo> + </items> + <items xsi:type="form:FormField"> + <name>УлицаИностранныйАдреса</name> + <id>285</id> + <visible>true</visible> + <enabled>true</enabled> + <userVisible> + <common>true</common> + </userVisible> + <dataPath xsi:type="form:DataPath"> + <segments>Улица</segments> + </dataPath> + <handlers> + <event>OnChange</event> + <name>УлицаИностранныйАдресаПриИзменении</name> + </handlers> + <extendedTooltip> + <name>УлицаИностранныйАдресаРасширеннаяПодсказка</name> + <id>287</id> + <type>Label</type> + <autoMaxWidth>true</autoMaxWidth> + <autoMaxHeight>true</autoMaxHeight> + <extInfo xsi:type="form:LabelDecorationExtInfo"> + <horizontalAlign>Left</horizontalAlign> + </extInfo> + </extendedTooltip> + <contextMenu> + <name>УлицаИностранныйАдресаКонтекстноеМеню</name> + <id>286</id> + <autoFill>true</autoFill> + </contextMenu> + <type>InputField</type> + <editMode>Enter</editMode> + <showInHeader>true</showInHeader> + <headerHorizontalAlign>Left</headerHorizontalAlign> + <showInFooter>true</showInFooter> + <extInfo xsi:type="form:InputFieldExtInfo"> + <autoMaxWidth>true</autoMaxWidth> + <autoMaxHeight>true</autoMaxHeight> + <wrap>true</wrap> + <chooseType>true</chooseType> + <typeDomainEnabled>true</typeDomainEnabled> + <textEdit>true</textEdit> + <textSize>Normal</textSize> + </extInfo> + </items> + <items xsi:type="form:FormGroup"> + <name>ГруппаДомаИСтроенияИностранныйАдреса</name> + <id>288</id> + <items xsi:type="form:FormGroup"> + <name>ГруппаДомИностранныйАдреса</name> + <id>290</id> + <items xsi:type="form:FormField"> + <name>ТипДомаИностранныйАдреса</name> + <id>292</id> + <visible>true</visible> + <enabled>true</enabled> + <userVisible> + <common>true</common> + </userVisible> + <dataPath xsi:type="form:DataPath"> + <segments>ТипДома</segments> + </dataPath> + <titleLocation>None</titleLocation> + <toolTip> + <key>ru</key> + <value>Тип дома: дом, владение и т. п.</value> + </toolTip> + <handlers> + <event>OnChange</event> + <name>ТипДомаПриИзменении</name> + </handlers> + <extendedTooltip> + <name>ТипДомаИностранныйАдресаРасширеннаяПодсказка</name> + <id>294</id> + <type>Label</type> + <autoMaxWidth>true</autoMaxWidth> + <autoMaxHeight>true</autoMaxHeight> + <extInfo xsi:type="form:LabelDecorationExtInfo"> + <horizontalAlign>Left</horizontalAlign> + </extInfo> + </extendedTooltip> + <contextMenu> + <name>ТипДомаИностранныйАдресаКонтекстноеМеню</name> + <id>293</id> + <autoFill>true</autoFill> + </contextMenu> + <type>InputField</type> + <editMode>Enter</editMode> + <showInHeader>true</showInHeader> + <headerHorizontalAlign>Left</headerHorizontalAlign> + <showInFooter>true</showInFooter> + <extInfo xsi:type="form:InputFieldExtInfo"> + <width>12</width> + <autoMaxWidth>true</autoMaxWidth> + <autoMaxHeight>true</autoMaxHeight> + <wrap>true</wrap> + <choiceListButton>false</choiceListButton> + <dropListButton>true</dropListButton> + <choiceButtonRepresentation>ShowInDropList</choiceButtonRepresentation> + <chooseType>true</chooseType> + <typeDomainEnabled>true</typeDomainEnabled> + <textEdit>true</textEdit> + <textSize>Normal</textSize> + </extInfo> + </items> + <items xsi:type="form:FormField"> + <name>ДомИностранныйАдреса</name> + <id>295</id> + <visible>true</visible> + <enabled>true</enabled> + <userVisible> + <common>true</common> + </userVisible> + <dataPath xsi:type="form:DataPath"> + <segments>Дом</segments> + </dataPath> + <titleLocation>None</titleLocation> + <toolTip> + <key>ru</key> + <value>Номер дома, владения</value> + </toolTip> + <handlers> + <event>OnChange</event> + <name>ДомИностранныйАдресаПриИзменении</name> + </handlers> + <extendedTooltip> + <name>ДомИностранныйАдресаРасширеннаяПодсказка</name> + <id>297</id> + <type>Label</type> + <autoMaxWidth>true</autoMaxWidth> + <autoMaxHeight>true</autoMaxHeight> + <extInfo xsi:type="form:LabelDecorationExtInfo"> + <horizontalAlign>Left</horizontalAlign> + </extInfo> + </extendedTooltip> + <contextMenu> + <name>ДомИностранныйАдресаКонтекстноеМеню</name> + <id>296</id> + <autoFill>true</autoFill> + </contextMenu> + <type>InputField</type> + <editMode>Enter</editMode> + <showInHeader>true</showInHeader> + <headerHorizontalAlign>Left</headerHorizontalAlign> + <showInFooter>true</showInFooter> + <extInfo xsi:type="form:InputFieldExtInfo"> + <width>7</width> + <autoMaxWidth>true</autoMaxWidth> + <autoMaxHeight>true</autoMaxHeight> + <wrap>true</wrap> + <quickChoice>true</quickChoice> + <chooseType>true</chooseType> + <typeDomainEnabled>true</typeDomainEnabled> + <textEdit>true</textEdit> + <textSize>Normal</textSize> + </extInfo> + </items> + <visible>true</visible> + <enabled>true</enabled> + <userVisible> + <common>true</common> + </userVisible> + <title> + <key>ru</key> + <value>Группа дом</value> + + + ru + Группа дом + + false + + ГруппаДомИностранныйАдресаРасширеннаяПодсказка + 291 + Label + true + true + + Left + + + UsualGroup + + Auto + true + true + Auto + Auto + + + + ГруппаСтроенияИностранныйАдреса + 298 + + ГруппаСтроениеНачальноеИностранныйАдреса + 300 + + ТипСтроенияИностранныйАдреса + 302 + true + true + + true + + + ТипСтроения + + None + + ru + Дополнительный тип здания: корпус, строение и т. п. + + + OnChange + ТипСтроенияПриИзменении + + + ТипСтроенияИностранныйАдресаРасширеннаяПодсказка + 304 + Label + true + true + + Left + + + + ТипСтроенияИностранныйАдресаКонтекстноеМеню + 303 + true + + InputField + Enter + true + Left + true + + 12 + true + true + true + ShowInDropList + true + true + true + true + true + Normal + + + + СтроениеИностранныйАдреса + 305 + true + true + + true + + + Строение + + None + + ru + Номер здания + + + OnChange + СтроениеИностранныйАдресаПриИзменении + + + СтроениеИностранныйАдресаРасширеннаяПодсказка + 307 + Label + true + true + + Left + + + + СтроениеИностранныйАдресаКонтекстноеМеню + 306 + true + + InputField + Enter + true + Left + true + + 7 + true + true + true + true + true + true + true + Normal + + + true + true + + true + + + <key>ru</key> + <value>Группа строение начальное</value> + + + ru + Группа строение начальное + + false + + ГруппаСтроениеНачальноеИностранныйАдресаРасширеннаяПодсказка + 301 + Label + true + true + + Left + + + UsualGroup + + Auto + true + true + Auto + Auto + + + true + true + + true + + + <key>ru</key> + <value>Группа строения</value> + + + ru + Группа строения + + true + false + + ГруппаСтроенияИностранныйАдресаРасширеннаяПодсказка + 299 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + true + true + Auto + Auto + + + + ГруппаПомещениеИностранныйАдреса + 310 + + ГруппаПомещениеНачальноеИностранныйАдреса + 312 + + ТипПомещенияИностранныйАдреса + 314 + true + true + + true + + + ТипПомещения + + None + + ru + Тип помещения: квартира, офис и т. п. + + + OnChange + ТипПомещенияПриИзменении + + + ТипПомещенияИностранныйАдресаРасширеннаяПодсказка + 316 + Label + true + true + + Left + + + + ТипПомещенияИностранныйАдресаКонтекстноеМеню + 315 + true + + InputField + Enter + true + Left + true + + 12 + true + true + true + ShowInDropList + true + true + true + true + true + Normal + + + + ПомещениеИностранныйАдреса + 317 + true + true + + true + + + Помещение + + None + + ru + Значение помещения + + + OnChange + ПомещениеИностранныйАдресаПриИзменении + + + ПомещениеИностранныйАдресаРасширеннаяПодсказка + 319 + Label + true + true + + Left + + + + ПомещениеИностранныйАдресаКонтекстноеМеню + 318 + true + + InputField + Enter + true + Left + true + + 7 + true + true + true + true + true + true + Normal + + + true + true + + true + + + <key>ru</key> + <value>Группа помещение начальное</value> + + + ru + Группа помещение начальное + + false + + ГруппаПомещениеНачальноеИностранныйАдресаРасширеннаяПодсказка + 313 + Label + true + true + + Left + + + UsualGroup + + Auto + true + true + Auto + Auto + + + true + true + + true + + + <key>ru</key> + <value>Помещение</value> + + + ru + Помещение + + true + false + + ГруппаПомещениеИностранныйАдресаРасширеннаяПодсказка + 311 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + true + true + Auto + Auto + + + true + true + + true + + + <key>ru</key> + <value>Группа дома и строения</value> + + + ru + Группа дома и строения + + + ГруппаДомаИСтроенияИностранныйАдресаРасширеннаяПодсказка + 289 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + WeakSeparation + true + true + Auto + Auto + + + true + true + + true + + + <key>ru</key> + <value>Структура иностранный адреса</value> + + + СтруктураИностранныйАдресаРасширеннаяПодсказка + 321 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + true + true + Auto + Auto + + ПредставлениеИностранногоАдреса 21 @@ -1574,9 +2292,13 @@ true - ПредставлениеИностранногоАдреса + ПредставлениеАдреса None + + OnChange + ПредставлениеИностранногоАдресаПриИзменении + ПредставлениеИностранногоАдресаExtendedTooltip 132 @@ -2497,7 +3219,6 @@ true true true - UseIfNecessary auto true @@ -2517,6 +3238,7 @@ true + true ПредставлениеАдреса @@ -2535,6 +3257,7 @@ true + true Страна @@ -2951,25 +3674,6 @@ true - - ПредставлениеИностранногоАдреса - - <key>ru</key> - <value>Представление иностранного адреса</value> - - 23 - - String - - - - true - - - true - - true - ПроверятьКорректность @@ -3367,6 +4071,27 @@ <common>true</common> </edit> </attributes> + <attributes> + <name>ОКТМО</name> + <title> + <key>ru</key> + <value>ОКТМО</value> + + 44 + + String + + 11 + + + + true + + + true + + true + КомандаОК @@ -3386,7 +4111,7 @@ <name>КомандаОК</name> </handler> </action> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <formCommands> @@ -3412,7 +4137,7 @@ </handler> </action> <representation>TextPicture</representation> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <formCommands> @@ -3437,7 +4162,8 @@ <name>ОчиститьАдрес</name> </handler> </action> - <currentRowUse>Auto</currentRowUse> + <modifiesStoredData>true</modifiesStoredData> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <formCommands> @@ -3459,7 +4185,8 @@ <name>ЗагрузитьКлассификатор</name> </handler> </action> - <currentRowUse>Auto</currentRowUse> + <modifiesStoredData>true</modifiesStoredData> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <formCommands> @@ -3485,7 +4212,8 @@ </handler> </action> <representation>TextPicture</representation> - <currentRowUse>Auto</currentRowUse> + <modifiesStoredData>true</modifiesStoredData> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <formCommands> @@ -3507,7 +4235,8 @@ <name>ВвестиАдресВСвободнойФорме</name> </handler> </action> - <currentRowUse>Auto</currentRowUse> + <modifiesStoredData>true</modifiesStoredData> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <formCommands> @@ -3529,7 +4258,7 @@ <name>КомандаОтмена</name> </handler> </action> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <formCommands> @@ -3551,7 +4280,8 @@ <name>ЗаполнитьПоПочтовомуИндексу</name> </handler> </action> - <currentRowUse>Auto</currentRowUse> + <modifiesStoredData>true</modifiesStoredData> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <formCommands> @@ -3573,7 +4303,7 @@ <name>АвторизацияНаСайтеПоддержкиПользователей</name> </handler> </action> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <parameters> diff --git a/SSL/src/DataProcessors/ВводКонтактнойИнформации/Forms/ВводАдреса/Module.bsl b/SSL/src/DataProcessors/ВводКонтактнойИнформации/Forms/ВводАдреса/Module.bsl index c31f71622..db9c55a3e 100644 --- a/SSL/src/DataProcessors/ВводКонтактнойИнформации/Forms/ВводАдреса/Module.bsl +++ b/SSL/src/DataProcessors/ВводКонтактнойИнформации/Forms/ВводАдреса/Module.bsl @@ -33,10 +33,10 @@ КонецЕсли; // Настройки формы - НовыйАдрес = ?(ЗначениеЗаполнено(Параметры.ЗначенияПолей), Ложь, Истина); ЭтоВебСервис = УправлениеКонтактнойИнформациейСлужебный.КлассификаторДоступенЧерезВебСервис(); МожноЗагружатьКлассификатор = УправлениеКонтактнойИнформациейСлужебный.ЕстьВозможностьИзмененияАдресногоКлассификатора() И Не ЭтоВебСервис; ЕстьКлассификатор = УправлениеКонтактнойИнформациейСлужебныйПовтИсп.АдресныйКлассификаторДоступен(); + ЭтоТакси = ТекущийВариантИнтерфейсаКлиентскогоПриложения() = ВариантИнтерфейсаКлиентскогоПриложения.Такси; // Группа команд "все действия" зависит от интерфейса. УстановитьВозможностьПодбораПоИндексу(ЭтоВебСервис); @@ -45,10 +45,10 @@ ЦветФонаУправляющегоПоля = ЦветаСтиля.ФонУправляющегоПоля; ЦветФонаФормы = ЦветаСтиля.ЦветФонаФормы; АвтоЦвет = Новый Цвет; - СтранаРоссия = Справочники.СтраныМира.Россия; ВидКонтактнойИнформации = УправлениеКонтактнойИнформациейСлужебный.СтруктураВидаКонтактнойИнформации(Параметры.ВидКонтактнойИнформации); + Если ВидКонтактнойИнформации.ПроверятьПоФИАС Тогда Команды.ПроверитьЗаполнениеАдреса.Подсказка = НСтр("ru = 'Проверить заполнение адреса в формате ФИАС'"); Иначе @@ -60,29 +60,19 @@ ВидКонтактнойИнформации.Вставить("ФорматАдреса", "ФИАС"); // Заголовок - Если ПустаяСтрока(Параметры.Заголовок) Тогда - Если ТипЗнч(ВидКонтактнойИнформации) = Тип("СправочникСсылка.ВидыКонтактнойИнформации") Тогда - Заголовок = Строка(ВидКонтактнойИнформации); - // Иначе останется заголовок, заданный в форме. - КонецЕсли; - Иначе - Заголовок = Параметры.Заголовок; - КонецЕсли; + Заголовок = ?(ПустаяСтрока(Параметры.Заголовок), + Строка(УправлениеКонтактнойИнформациейСлужебный.ТипВидаКонтактнойИнформации(ВидКонтактнойИнформации)), + Параметры.Заголовок); СкрыватьНеактуальныеАдреса = ВидКонтактнойИнформации.СкрыватьНеактуальныеАдреса; - АдресТолькоРоссийский = ВидКонтактнойИнформации.АдресТолькоРоссийский; ТипКонтактнойИнформации = ВидКонтактнойИнформации.Тип; - // Возможные варианты дома, строения, квартиры. - УстановитьСписокВыбораЭлемента(Элементы.ТипДома, Элементы.Дом, УправлениеКонтактнойИнформациейСлужебный.ВариантыДанныхДом()); - УстановитьСписокВыбораЭлемента(Элементы.ТипСтроения, Элементы.Строение, УправлениеКонтактнойИнформациейСлужебный.ВариантыДанныхСтроение()); - УстановитьСписокВыбораЭлемента(Элементы.ТипПомещения, Элементы.Помещение, УправлениеКонтактнойИнформациейСлужебный.ВариантыДанныхПомещение()); + ЗаполнитьВариантыДомовСтроенийКвартир(); // Пытаемся заполнить из параметров. Если УправлениеКонтактнойИнформациейКлиентСервер.ЭтоКонтактнаяИнформацияВXML(Параметры.ЗначенияПолей) - И ТипКонтактнойИнформации = Перечисления.ТипыКонтактнойИнформации.Адрес - Тогда + И ТипКонтактнойИнформации = Перечисления.ТипыКонтактнойИнформации.Адрес Тогда РезультатыЧтения = Новый Структура; XDTOКонтактная = УправлениеКонтактнойИнформациейСлужебный.КонтактнаяИнформацияИзXML(Параметры.ЗначенияПолей, ТипКонтактнойИнформации, РезультатыЧтения); Если РезультатыЧтения.Свойство("ТекстОшибки") Тогда @@ -93,6 +83,7 @@ КонецЕсли; Иначе XDTOКонтактная = УправлениеКонтактнойИнформациейСлужебный.АдресXMLВXDTO(Параметры.ЗначенияПолей, Параметры.Представление, ); + XDTOКонтактная.Состав.Страна = СтранаРоссия.Наименование; КонецЕсли; Если Параметры.Комментарий <> Неопределено Тогда @@ -103,43 +94,24 @@ ЗначениеРеквизитовПоКонтактнойИнформации(ЭтотОбъект, XDTOКонтактная); Если ЗначениеЗаполнено(Страна) Тогда - // Нашли в справочнике стран - ИсходноеПредставлениеСтраны = ""; - ИначеЕсли НЕ ПустаяСтрока(КодСтраны) Тогда - // Нашли в классификаторе, но не нашли в справочнике, возможно стоит завести? - ИсходноеПредставлениеСтраны = СокрЛП(XDTOКонтактная.Состав.Страна); + КодСтраны = Страна.Код; Иначе - // Не нашли ни в классификаторе ни в справочнике. - ИсходноеПредставлениеСтраны = СокрЛП(XDTOКонтактная.Состав.Страна); - Если ПустаяСтрока(ИсходноеПредставлениеСтраны) Тогда - ИсходноеПредставлениеСтраны = СтранаРоссия.Наименование; - Страна = СтранаРоссия; - КонецЕсли; + Страна = СтранаРоссия; + КодСтраны = СтранаРоссия.Код; КонецЕсли; - + ОтрисоватьДополнительныеЗданияИПомещения(); - // Возможно пустые значения, чтобы не смущали. - Если ПустаяСтрока(Дом) И ПустаяСтрока(ТипДома) Тогда - ТипДома = УправлениеКонтактнойИнформациейКлиентСервер.ПервыйИлиПустой(Элементы.ТипДома); - КонецЕсли; - Если ПустаяСтрока(Строение) И ПустаяСтрока(ТипСтроения) Тогда - ТипСтроения = УправлениеКонтактнойИнформациейКлиентСервер.ПервыйИлиПустой(Элементы.ТипСтроения); - КонецЕсли; - Если ПустаяСтрока(Помещение) И ПустаяСтрока(ТипПомещения) Тогда - ТипПомещения = УправлениеКонтактнойИнформациейКлиентСервер.ПервыйИлиПустой(Элементы.ТипПомещения); - КонецЕсли; - - // Проверяем на корректность Если АдресТолькоРоссийский Тогда Элементы.Страна.Доступность = Ложь; Элементы.Страна.ЦветФона = АвтоЦвет; + // Проверяем на корректность Если Страна <> СтранаРоссия Тогда // Считаем адрес российским - ТестПредставленияАдреса = СокрЛП(СокрЛП(Страна) + " " + СокрЛП(ПредставлениеИностранногоАдреса)); + ТестПредставленияАдреса = СокрЛП(СокрЛП(Страна) + " " + СокрЛП(ПредставлениеАдреса)); Если Не ПустаяСтрока(ТестПредставленияАдреса) Тогда ПредставлениеАдреса = ТестПредставленияАдреса; - РазрешитьВводАдресаВСвободнойФорме = Истина; + РазрешитьВводАдресаВСвободнойФорме = Ложь; ПредставлениеАдресаИзменено = Истина; КонецЕсли; ТекстПредупрежденияПриОткрытии = НСтр("ru = 'Адрес введен некорректно: допускается ввод только российских адресов. Значение поля ""Страна"" было изменено на ""Россия"", необходимо проверить остальные поля.'"); @@ -148,28 +120,33 @@ Страна = СтранаРоссия; КонецЕсли; - Если ЗначениеЗаполнено(Страна) Тогда - КодСтраны = Страна.Код; - ИначеЕсли ПустаяСтрока(ИсходноеПредставлениеСтраны) Тогда - Страна = СтранаРоссия; - КодСтраны = СтранаРоссия.Код; - Иначе - // Не определили страну, но точно не Россия. Поэтому устанавливаем - Если ПустаяСтрока(ТекстПредупрежденияПриОткрытии) Тогда - ПолеПредупрежденияПриОткрытии = "Страна"; - КонецЕсли; - ТекстПредупрежденияПриОткрытии = ТекстПредупрежденияПриОткрытии - + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru='Страна ""%1"" отсутствует в справочнике стран мира.'"), ИсходноеПредставлениеСтраны); - КонецЕсли; - - // Инициализируем элементы + // Проверка какой адрес Если Страна = СтранаРоссия Тогда - Элементы.ТипАдреса.ТекущаяСтраница = Элементы.РоссийскийАдрес; - ТекущийЭлемент = Элементы.НаселенныйПункт; + Элементы.ОКТМО.Видимость = ВидКонтактнойИнформации.УказыватьОКТМО; + + Если Не ЭтоВебСервис Тогда + // российский адрес + Если XDTOКонтактная.Состав.Состав <> Неопределено И ТипЗнч(XDTOКонтактная.Состав.Состав) <> Тип("Строка") Тогда + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.АдресныйКлассификатор") Тогда + МодульАдресныйКлассификаторСлужебный = ОбщегоНазначения.ОбщийМодуль("АдресныйКлассификаторСлужебный"); + СведенияОРегионе = МодульАдресныйКлассификаторСлужебный.СведенияОРегионе(XDTOКонтактная.Состав.Состав.СубъектРФ); + Если СведенияОРегионе.Загружен = Ложь Тогда + ДоступностьКлассификатора = Новый Структура("Отказ, КраткоеПредставлениеОшибки"); + ДоступностьКлассификатора.Отказ = Истина; + ДоступностьКлассификатора.КраткоеПредставлениеОшибки = + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Необходимо загрузить адресные сведения по региону ""%1"" (в меню ""%2"").'"), + XDTOКонтактная.Состав.Состав.СубъектРФ, + ?(ЭтоТакси, НСтр("ru = 'Еще'"), НСтр("ru = 'Все действия'"))); + Элементы.АвторизацияНаСайтеПоддержкиПользователей.Видимость = Ложь; + КонецЕсли; + КонецЕсли; + КонецЕсли; + КонецЕсли; + + Если НЕ УправлениеКонтактнойИнформациейСлужебный.XDTOКонтактнаяИнформацияЗаполнена(XDTOКонтактная) Тогда + РазрешитьВводАдресаВСвободнойФорме = Ложь; + КонецЕсли; Иначе - Элементы.ТипАдреса.ТекущаяСтраница = Элементы.ИностранныйАдрес; - ТекущийЭлемент = Элементы.ПредставлениеИностранногоАдреса; МожноЗагружатьКлассификатор = Ложь; КонецЕсли; @@ -184,8 +161,6 @@ // По умолчанию выводим представление. Элементы.АдресПредставлениеКомментарий.ТекущаяСтраница = Элементы.АдресСтраницаПредставление; - // Группа команд "все действия" зависит от интерфейса. - ЭтоТакси = ТекущийВариантИнтерфейсаКлиентскогоПриложения() = ВариантИнтерфейсаКлиентскогоПриложения.Такси; Если ЭтоТакси Тогда Элементы.ФормаВсеДействия.Видимость = Ложь; Иначе @@ -193,45 +168,23 @@ Элементы.ЗаполнитьПоПочтовомуИндексу.Видимость = Ложь; Элементы.ФормаОчиститьАдрес.Видимость = Ложь; Элементы.ЗагрузитьКлассификатор.Видимость = Ложь; - Если Элементы.Найти("ИзменитьФорму") <> Неопределено Тогда - Элементы.ИзменитьФорму.Видимость = Ложь; - КонецЕсли; + Элементы.ИзменитьФорму.Видимость = Ложь; КонецЕсли; ДоступностьКлассификатора = Неопределено; - - Если Не ЭтоВебСервис Тогда - // российский адрес - Если XDTOКонтактная.Состав.Состав <> Неопределено И ТипЗнч(XDTOКонтактная.Состав.Состав) <> Тип("Строка") Тогда - Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.АдресныйКлассификатор") Тогда - МодульАдресныйКлассификаторСлужебный = ОбщегоНазначения.ОбщийМодуль("АдресныйКлассификаторСлужебный"); - СведенияОРегионе = МодульАдресныйКлассификаторСлужебный.СведенияОРегионе(XDTOКонтактная.Состав.Состав.СубъектРФ); - Если СведенияОРегионе.Загружен = Ложь Тогда - ДоступностьКлассификатора = Новый Структура("Отказ, КраткоеПредставлениеОшибки"); - ДоступностьКлассификатора.Отказ = Истина; - ДоступностьКлассификатора.КраткоеПредставлениеОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Необходимо загрузить адресные сведения по региону ""%1"" (в меню ""%2"").'"), - XDTOКонтактная.Состав.Состав.СубъектРФ, - ?(ЭтоТакси, НСтр("ru = 'Еще'"), НСтр("ru = 'Все действия'"))); - Элементы.АвторизацияНаСайтеПоддержкиПользователей.Видимость = Ложь; - КонецЕсли; - КонецЕсли; - КонецЕсли; - КонецЕсли; + Элементы.АдресСтраницаКомментарий.Картинка = ОбщегоНазначенияКлиентСервер.КартинкаКомментария(Комментарий); ПроверитьДоступностьКлассификатора(ДоступностьКлассификатора); УстановитьКлючИспользованияФормы(); + КонецПроцедуры &НаКлиенте Процедура ПриОткрытии(Отказ) - УстановитьПиктограммуКомментария(); Элементы.ДобавитьОбъект.Доступность = МожноДобавлятьДополнительныеОбъекты(); - ОбработкаИзмененияСтраныКлиент(); - СостояниеВводаПредставленияАдреса(РазрешитьВводАдресаВСвободнойФорме, Ложь); Если Не ПустаяСтрока(ДоступностьКлассификатораАдрес) Или Не ПустаяСтрока(ТекстПредупрежденияПриОткрытии) Тогда ПодключитьОбработчикОжидания("Подключаемый_ПроверитьВыполнениеЗадания", 0.5, Истина); @@ -321,18 +274,21 @@ &НаКлиенте Процедура ИндексИзменениеТекстаРедактирования(Элемент, Текст, СтандартнаяОбработка) - СтандартнаяОбработка = Ложь; - ТекущийИндекс = Формат(Текст, "ЧЦ=6; ЧРГ=' '; ЧН=; ЧГ=0"); - Если СтрДлина(СокрЛП(ТекущийИндекс)) = 6 И Индекс <> Текст Тогда - Контекст = КонтекстФормыКлиент(); - Индекс = ТекущийИндекс; - Если ЕстьКлассификатор Тогда - ПараметрыФормы = Новый Структура; - ПараметрыФормы.Вставить("Индекс", ТекущийИндекс); - ПараметрыФормы.Вставить("СкрыватьНеактуальныеАдреса", СкрыватьНеактуальныеАдреса); - ПараметрыФормы.Вставить("ФорматАдреса", ВидКонтактнойИнформации.ФорматАдреса); - - ОткрытьФорму("Обработка.ВводКонтактнойИнформации.Форма.ВыборАдресаПоПочтовомуИндексу", ПараметрыФормы, Элементы.Индекс); + Если МожноЗагружатьКлассификатор И Страна = СтранаРоссия Тогда + Если СтрДлина(СокрЛП(Текст)) = 6 И Индекс <> Текст И Страна = СтранаРоссия Тогда + Контекст = КонтекстФормыКлиент(); + Если ЕстьКлассификатор Тогда + ПараметрыФормы = Новый Структура; + ПараметрыФормы.Вставить("Индекс", СокрЛП(Текст)); + ПараметрыФормы.Вставить("СкрыватьНеактуальныеАдреса", СкрыватьНеактуальныеАдреса); + ПараметрыФормы.Вставить("ФорматАдреса", ВидКонтактнойИнформации.ФорматАдреса); + + ОткрытьФорму("Обработка.ВводКонтактнойИнформации.Форма.ВыборАдресаПоПочтовомуИндексу", ПараметрыФормы, Элементы.Индекс); + КонецЕсли; + Иначе + Если СтрДлина(СокрЛП(Текст)) = 6 Тогда + ОбновитьПредставлениеАдреса(); + КонецЕсли; КонецЕсли; КонецЕсли; КонецПроцедуры @@ -341,16 +297,16 @@ Процедура ИндексОбработкаВыбора(Элемент, ВыбранноеЗначение, СтандартнаяОбработка) СтандартнаяОбработка = Ложь; - Если ВыбранноеЗначение = Неопределено Тогда + Если ВыбранноеЗначение = Неопределено Тогда Возврат; ИначеЕсли ВыбранноеЗначение.Отказ Тогда Если ВыбранноеЗначение.Свойство("Индекс") И НЕ ПустаяСтрока(ВыбранноеЗначение.Индекс) И ПодборПоИндексуДоступен Тогда Оповещение = Новый ОписаниеОповещения("ПослеВопросООбновлениеКлассификатора", ЭтотОбъект); ТекстВопроса = НСтр("ru = 'Индекс %1 не найден в адресном классификаторе. Возможные причины:'") + Символы.ПС; - ТекстВопроса = ТекстВопроса + НСтр("ru = ' - индекс относится к региону, по которому в программе отсутствуют адресные сведения;'") + Символы.ПС; - ТекстВопроса = ТекстВопроса + НСтр("ru = ' - адресные сведения, загруженные в программу, устарели;'") + Символы.ПС; - ТекстВопроса = ТекстВопроса + НСтр("ru = ' - индекс введен некорректно.'"); + ТекстВопроса = ТекстВопроса + " - " + НСтр("ru = 'индекс относится к региону, по которому в программе отсутствуют адресные сведения;'") + Символы.ПС; + ТекстВопроса = ТекстВопроса + " - " + НСтр("ru = 'адресные сведения, загруженные в программу, устарели;'") + Символы.ПС; + ТекстВопроса = ТекстВопроса + " - " + НСтр("ru = 'индекс введен некорректно.'"); ТекстВопроса = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ТекстВопроса, Формат(ВыбранноеЗначение.Индекс, "ЧРГ=' '; ЧГ=0")); Кнопки = Новый СписокЗначений; Кнопки.Добавить(КодВозвратаДиалога.Да, НСтр("ru = 'Обновить классификатор'")); @@ -358,8 +314,8 @@ ПоказатьВопрос(Оповещение, ТекстВопроса, Кнопки); Иначе Если НЕ ПодборПоИндексуДоступен Тогда - ТекстСообщения = НСтр("ru = 'Индекс %1 не найден в адресном классификаторе'"); - ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ТекстСообщения, Формат(ВыбранноеЗначение.Индекс, "ЧРГ=' '; ЧГ=0")); + ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Индекс %1 не найден в адресном классификаторе'"), + Формат(ВыбранноеЗначение.Индекс, "ЧРГ=' '; ЧГ=0")); ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстСообщения,,, "Объект.Индекс"); Иначе ПроверитьДоступностьКлассификатора(ВыбранноеЗначение); @@ -407,7 +363,7 @@ &НаКлиенте Процедура КомментарийПриИзменении(Элемент) - УстановитьПиктограммуКомментария(); + ПодключитьОбработчикОжидания("УстановитьПиктограммуКомментария", 0.1, Истина); КонецПроцедуры @@ -493,6 +449,8 @@ ПараметрыФормы.Вставить("ИдентификаторНаселенногоПункта", ИдентификаторНаселенногоПункта); ПараметрыФормы.Вставить("СкрыватьНеактуальныеАдреса", СкрыватьНеактуальныеАдреса); ПараметрыФормы.Вставить("ФорматАдреса", ВидКонтактнойИнформации.ФорматАдреса); + ПараметрыФормы.Вставить("СервисКлассификатораНедоступен", НЕ ЕстьКлассификатор); + ОткрытьФорму("Обработка.ВводКонтактнойИнформации.Форма.НаселенныйПунктАдреса", ПараметрыФормы, Элемент, , , , , РежимОткрытияОкнаФормы.БлокироватьОкноВладельца); КонецПроцедуры @@ -540,7 +498,7 @@ Если МожноЗагружатьКлассификатор И РегионНеЗагружен Тогда // Предлагаем загрузить классификатор. УправлениеКонтактнойИнформациейКлиент.ПредложениеЗагрузкиКлассификатора( - СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru='Данные для ""%1"" не загружены.'"), ВыбранноеЗначение.Представление), + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru='Данные для ""%1"" не загружены.'"), ВыбранноеЗначение.Представление), ВыбранноеЗначение.Представление); КонецЕсли; @@ -556,6 +514,7 @@ ОбработкаИзмененияУлицыСервер(Контекст); КонтекстФормыКлиент(Контекст); + КонецПроцедуры &НаКлиенте @@ -628,17 +587,19 @@ Улица = Элемент.ТекстРедактирования; КонецЕсли; + ПараметрыФормы = Новый Структура; + ПараметрыФормы.Вставить("СкрыватьНеактуальныеАдреса", СкрыватьНеактуальныеАдреса); + ПараметрыФормы.Вставить("ФорматАдреса", ВидКонтактнойИнформации.ФорматАдреса); Если ЗначениеЗаполнено(ИдентификаторНаселенногоПункта) Тогда - ПараметрыФормы = Новый Структура("СкрыватьНеактуальныеАдреса, ИдентификаторНаселенногоПункта, Улица", - СкрыватьНеактуальныеАдреса, ИдентификаторНаселенногоПункта, Улица); + ПараметрыФормы.Вставить("ИдентификаторНаселенногоПункта", ИдентификаторНаселенногоПункта); + ПараметрыФормы.Вставить("Улица", Улица); Иначе // Родитель улицы неопределен, открываем форму в которой ничего нет. - ПараметрыФормы = Новый Структура("СкрыватьНеактуальныеАдреса, ИдентификаторНаселенногоПункта, Улица, Заголовок", - СкрыватьНеактуальныеАдреса, -1, Улица, НаселенныйПункт + " " + НСтр("ru = '(не найден)'")); + ПараметрыФормы.Вставить("ИдентификаторНаселенногоПункта", -1); + ПараметрыФормы.Вставить("Улица", Улица); + ПараметрыФормы.Вставить("Заголовок", НаселенныйПункт + " " + НСтр("ru = '(не найден)'")); КонецЕсли; - ПараметрыФормы.Вставить("ФорматАдреса", ВидКонтактнойИнформации.ФорматАдреса); - УправлениеКонтактнойИнформациейКлиент.НачалоВыбораУлицы(Элемент, ИдентификаторНаселенногоПункта, Улица, ПараметрыФормы); КонецПроцедуры @@ -755,15 +716,34 @@ ПредставлениеАдресаПриИзмененииСервер(); КонецПроцедуры +&НаКлиенте +Процедура ПредставлениеИностранногоАдресаПриИзменении(Элемент) + ПредставлениеАдресаИзменено = Истина; + ПредставлениеАдресаПриИзмененииСервер(); +КонецПроцедуры + +&НаКлиенте +Процедура ДомАвтоПодбор(Элемент, Текст, ДанныеВыбора, ПараметрыПолученияДанных, Ожидание, СтандартнаяОбработка) + Если ЗначениеЗаполнено(Текст) + И (ЗначениеЗаполнено(ЭтотОбъект.ИдентификаторНаселенногоПункта) + ИЛИ ЗначениеЗаполнено(ЭтотОбъект.ИдентификаторУлицы)) Тогда + Идентификатор = ?(ЗначениеЗаполнено(ИдентификаторУлицы), + ИдентификаторУлицы, ИдентификаторНаселенногоПункта); + + ДанныеВыбора = СписокАвтоподбораВариантовДомов(Идентификатор, Текст); + Если ДанныеВыбора.Количество() > 0 Тогда + СтандартнаяОбработка = Ложь; + КонецЕсли; + КонецЕсли; +КонецПроцедуры + #КонецОбласти #Область ОбработчикиКомандФормы &НаКлиенте Процедура КомандаОК(Команда) - ПодтвердитьИЗакрыть(); - КонецПроцедуры &НаКлиенте @@ -834,6 +814,7 @@ Если РазрешитьВводАдресаВСвободнойФорме Тогда ТекстВопроса = НСтр("ru='Изменения, введенные вручную, будут потеряны. + |Исходный адрес будет перемещен в комментарий. |Продолжить?'"); Иначе ТекстВопроса = НСтр("ru='Ввести адрес в свободной форме? @@ -858,33 +839,24 @@ &НаКлиенте Процедура УстановитьПиктограммуКомментария() - - Если ПустаяСтрока(Комментарий) Тогда - Элементы.АдресСтраницаКомментарий.Картинка = Новый Картинка; - Иначе - Элементы.АдресСтраницаКомментарий.Картинка = БиблиотекаКартинок.Комментарий; - КонецЕсли; - + Элементы.АдресСтраницаКомментарий.Картинка = ОбщегоНазначенияКлиентСервер.КартинкаКомментария(Комментарий); КонецПроцедуры &НаКлиенте Процедура ПодтвердитьИЗакрыть(Результат = Неопределено, ДополнительныеПараметры = Неопределено) Экспорт - // При немодифицированности работает как "отмена". - Если Модифицированность Тогда - // Изменено значение адреса - + Если Модифицированность Тогда // При немодифицированности работает как "отмена". Контекст = КонтекстФормыКлиент(); Результат = РезультатаВыбораПоОбновлениюФлагов(Контекст, ВозвращатьСписокЗначений); // Флаги вида были прочитаны заново. ВидКонтактнойИнформации = Контекст.ВидКонтактнойИнформации; - Если ВидКонтактнойИнформации.ПроверятьКорректность И (Не РазрешитьВводАдресаВСвободнойФорме) И Результат.ОшибкиЗаполнения.Количество() > 0 Тогда - СообщитьОбОшибкахЗаполнения(Результат.ОшибкиЗаполнения, Ложь); - Если ВидКонтактнойИнформации.ЗапрещатьВводНекорректного Тогда - Возврат; - КонецЕсли; + Если ВидКонтактнойИнформации.ПроверятьКорректность + И (Не РазрешитьВводАдресаВСвободнойФорме) + И Результат.ОшибкиЗаполнения.Количество() > 0 Тогда + СообщитьОбОшибкахЗаполнения(Результат.ОшибкиЗаполнения, Ложь); + Возврат; КонецЕсли; Результат = Результат.ДанныеВыбора; @@ -945,13 +917,13 @@ Строка = ДополнительныеЗдания.Добавить(); Строка.Тип = ВыбранныйЭлемент.Представление; - Строка.ПутьXPath = УправлениеКонтактнойИнформациейКлиентСерверПовтИсп.XPathНомераДополнительногоОбъектаАдресации(Строка.Тип); + Строка.ПутьXPath = УправлениеКонтактнойИнформациейКлиентСервер.XPathНомераДополнительногоОбъектаАдресации(Строка.Тип); ИмяТекущего = ОтрисоватьДополнительныеЗдания(); Иначе Строка = ДополнительныеПомещения.Добавить(); Строка.Тип = ВыбранныйЭлемент.Представление; - Строка.ПутьXPath = УправлениеКонтактнойИнформациейКлиентСерверПовтИсп.XPathНомераДополнительногоОбъектаАдресации(Строка.Тип); + Строка.ПутьXPath = УправлениеКонтактнойИнформациейКлиентСервер.XPathНомераДополнительногоОбъектаАдресации(Строка.Тип); ИмяТекущего = ОтрисоватьДополнительныеПомещения(); КонецЕсли; @@ -967,12 +939,26 @@ &НаКлиенте Процедура ВвестиАдресВСвободнойФормеЗавершение(Знач РезультатВопроса, Знач ДополнительныеПараметры) Экспорт - Если РезультатВопроса<>КодВозвратаДиалога.Да Тогда + Если РезультатВопроса <> КодВозвратаДиалога.Да Тогда Возврат; КонецЕсли; + Если РазрешитьВводАдресаВСвободнойФорме Тогда + Комментарий = ?(НЕ ПустаяСтрока(Комментарий), Комментарий + Символы.ПС, "") + + НСтр("ru = 'Исходный адрес:'") + " " + ПредставлениеАдреса; + ПодключитьОбработчикОжидания("УстановитьПиктограммуКомментария", 0.1, Истина); + КонецЕсли; РазрешитьВводАдресаВСвободнойФорме = Не РазрешитьВводАдресаВСвободнойФорме; - СостояниеВводаПредставленияАдреса(РазрешитьВводАдресаВСвободнойФорме); + + СписокСтран = УправлениеКонтактнойИнформациейКлиент.СтраныПоддерживающиеСтруктурированныйВвод(); + Если ЗначениеЗаполнено(СписокСтран[ВРег(Страна)]) Тогда + // ЕАЭС + Контекст = КонтекстФормыКлиент(); + ЗначениеРеквизитовПоКонтактнойИнформацииАдресИностранныйАдрес(ПредставлениеАдреса, Контекст); + КонтекстФормыКлиент(Контекст); + КонецЕсли; + + ОпределениеРежимаВводаАдреса(); Модифицированность = Истина; КонецПроцедуры @@ -1020,7 +1006,6 @@ ЗначениеФлагов = УправлениеКонтактнойИнформациейСлужебный.СтруктураВидаКонтактнойИнформации(Контекст.ВидКонтактнойИнформации.Ссылка); Контекст.ВидКонтактнойИнформации.АдресТолькоРоссийский = ЗначениеФлагов.АдресТолькоРоссийский; - Контекст.ВидКонтактнойИнформации.ЗапрещатьВводНекорректного = ЗначениеФлагов.ЗапрещатьВводНекорректного; Контекст.ВидКонтактнойИнформации.ПроверятьКорректность = ЗначениеФлагов.ПроверятьКорректность; Возврат РезультатВыбора(Контекст, ВозвращатьСписокЗначений); @@ -1034,19 +1019,17 @@ Если ВозвращатьСписокЗначений Тогда ДанныеВыбора = УправлениеКонтактнойИнформациейСлужебный.КонтактнаяИнформацияВСтаруюСтруктуру(XDTOИнформация); ДанныеВыбора = ДанныеВыбора.ЗначенияПолей; - ИначеЕсли Контекст.Страна = Контекст.СтранаРоссия И ПустаяСтрока(XDTOИнформация.Представление) Тогда ДанныеВыбора = ""; - Иначе ДанныеВыбора = УправлениеКонтактнойИнформациейСлужебный.КонтактнаяИнформацияXDTOВXML(XDTOИнформация); - КонецЕсли; - Результат.ДанныеВыбора = Новый Структура("КонтактнаяИнформация, Представление, Комментарий, ВведеноВСвободнойФорме", - ДанныеВыбора, - XDTOИнформация.Представление, - XDTOИнформация.Комментарий, + Результат.ДанныеВыбора = Новый Структура; + Результат.ДанныеВыбора.Вставить("КонтактнаяИнформация", ДанныеВыбора); + Результат.ДанныеВыбора.Вставить("Представление", XDTOИнформация.Представление); + Результат.ДанныеВыбора.Вставить("Комментарий", XDTOИнформация.Комментарий); + Результат.ДанныеВыбора.Вставить("ВведеноВСвободнойФорме", УправлениеКонтактнойИнформациейСлужебный.АдресВведенВСвободнойФорме(XDTOИнформация)); Результат.ОшибкиЗаполнения = УправлениеКонтактнойИнформациейСлужебный.ОшибкиЗаполненияАдресаXDTO( @@ -1063,15 +1046,20 @@ Функция СписокОшибокЗаполнения(Контекст, ПредупреждатьОбОтсутствии) XDTOИнформация = КонтактнаяИнформацияПоЗначениюРеквизитов(Контекст); + Если Контекст.ВидКонтактнойИнформации.ПроверятьКорректность Тогда + ПараметрыПроверки = Контекст.ВидКонтактнойИнформации; + Иначе + ПараметрыПроверки = Новый Структура("ПроверятьПоФИАС", Истина); + КонецЕсли; + // Получаем список значений: XPath - текст ошибки. Результат = УправлениеКонтактнойИнформациейСлужебный.ОшибкиЗаполненияАдресаXDTO( - XDTOИнформация.Состав, Контекст.ВидКонтактнойИнформации); + XDTOИнформация.Состав, ПараметрыПроверки); Если Результат.Количество() = 0 // Нет ошибок И ПредупреждатьОбОтсутствии // Но надо предупредить об их отсутствии. // Дополнительно проверяем на пустоту. - И (Не УправлениеКонтактнойИнформациейСлужебный.XDTOКонтактнаяИнформацияЗаполнена(XDTOИнформация)) - Тогда + И (Не УправлениеКонтактнойИнформациейСлужебный.XDTOКонтактнаяИнформацияЗаполнена(XDTOИнформация)) Тогда Результат.Добавить("/", НСтр("ru = 'Адрес пуст.'")); КонецЕсли; @@ -1084,7 +1072,7 @@ Если ПустаяСтрока(КонтактнаяИнфо) Тогда НоваяКонтактная = УправлениеКонтактнойИнформациейСлужебный.АдресXMLВXDTO(""); НоваяКонтактная.Комментарий = Комментарий; - НоваяКонтактная = УправлениеКонтактнойИнформацией.КонтактнаяИнформацияВXML(НоваяКонтактная); + НоваяКонтактная = УправлениеКонтактнойИнформациейСлужебный.КонтактнаяИнформацияXDTOВXML(НоваяКонтактная); АдресВведенВСвободнойФорме = Ложь; ИначеЕсли УправлениеКонтактнойИнформациейКлиентСервер.ЭтоКонтактнаяИнформацияВXML(КонтактнаяИнфо) Тогда @@ -1113,9 +1101,10 @@ Если Не ЗначениеЗаполнено(Контекст.ИдентификаторНаселенногоПункта) Тогда // Данные вводились вручную, пробуем разбор введенной строки. Адрес = НаселенныеПунктыПоПредставлению(Контекст.НаселенныйПункт, Контекст.СкрыватьНеактуальныеАдреса); - СформироватьДетальныйНаселенныйПункт(Контекст, Адрес); + + ЗаполнитьКонтекстПоXDTOАдреса(Адрес, Контекст, УровниНаселенногоПункта()); + Контекст.ИдентификаторНаселенногоПункта = УправлениеКонтактнойИнформациейСлужебный.ИдентификаторНаселенногоПунктаПоЧастямАдреса(Контекст.НаселенныйПунктДетально); ПереформироватьДетально = Ложь; - УправлениеКонтактнойИнформациейСлужебный.ЗаполнитьИдентификаторыНаселенногоПункта(Контекст.НаселенныйПунктДетально, Контекст.ИдентификаторНаселенногоПункта); КонецЕсли; // Населенный пункт, разбитый по частям. @@ -1128,6 +1117,19 @@ КонецПроцедуры +&НаСервереБезКонтекста +Функция УровниНаселенногоПункта() + Уровни = Новый Массив; + Уровни.Добавить(1); + Уровни.Добавить(2); + Уровни.Добавить(3); + Уровни.Добавить(4); + Уровни.Добавить(5); + Уровни.Добавить(6); + + Возврат Уровни; +КонецФункции + &НаСервереБезКонтекста Процедура ОбработкаИзмененияУлицыСервер(Контекст) @@ -1149,12 +1151,12 @@ ИначеЕсли ЧастьАдреса.Уровень = 90 Тогда Контекст.НаселенныйПунктДетально.ДополнительныйЭлемент.Представление = ЧастьАдреса.Значение; Контекст.НаселенныйПунктДетально.ДополнительныйЭлемент.Идентификатор = ЧастьАдреса.Идентификатор; - ПутьXPath = УправлениеКонтактнойИнформациейКлиентСерверПовтИсп.XPathДополнительногоОбъектаАдресации(90, Контекст.НаселенныйПунктДетально.ДополнительныйЭлемент.Сокращение); + ПутьXPath = УправлениеКонтактнойИнформациейКлиентСервер.XPathДополнительногоОбъектаАдресации(90, Контекст.НаселенныйПунктДетально.ДополнительныйЭлемент.Сокращение); Контекст.НаселенныйПунктДетально.ДополнительныйЭлемент.ПутьXPath = ПутьXPath; ИначеЕсли ЧастьАдреса.Уровень = 91 Тогда Контекст.НаселенныйПунктДетально.ПодчиненныйЭлемент.Представление = ЧастьАдреса.Значение; Контекст.НаселенныйПунктДетально.ПодчиненныйЭлемент.Идентификатор = ЧастьАдреса.Идентификатор; - ПутьXPath = УправлениеКонтактнойИнформациейКлиентСерверПовтИсп.XPathДополнительногоОбъектаАдресации(91, Контекст.НаселенныйПунктДетально.ДополнительныйЭлемент.Сокращение); + ПутьXPath = УправлениеКонтактнойИнформациейКлиентСервер.XPathДополнительногоОбъектаАдресации(91, Контекст.НаселенныйПунктДетально.ДополнительныйЭлемент.Сокращение); Контекст.НаселенныйПунктДетально.ПодчиненныйЭлемент.ПутьXPath = ПутьXPath; Иначе Контекст.НаселенныйПунктДетально.Улица.Представление = ЧастьАдреса.Значение; @@ -1166,40 +1168,66 @@ КонецЕсли; // Перепроверяем дом, индекс и представление обновятся там. - ОбработкаИзмененияДомаСервер(Контекст); -КонецПроцедуры - -&НаСервереБезКонтекста -Процедура ОбработкаИзмененияДомаСервер(Контекст) - ОбновитьИндексИПредставление(Контекст); - КонецПроцедуры &НаКлиенте Процедура ОбработкаИзмененияСтраныКлиент() - ЭтоРоссийскийАдрес = Страна = СтранаРоссия; - Элементы.Индекс.Видимость = ЭтоРоссийскийАдрес; + ЭтоРоссийскийАдрес = (Страна = СтранаРоссия); Элементы.ТипАдреса.ТекущаяСтраница = ?(ЭтоРоссийскийАдрес, Элементы.РоссийскийАдрес, Элементы.ИностранныйАдрес); // Проверять, вводить в свободной форме и искать по индексу можем только российские адреса. Элементы.ПроверитьЗаполнениеАдреса.Доступность = ЭтоРоссийскийАдрес; - - Элементы.ВвестиАдресВСвободнойФорме.Доступность = ЭтоРоссийскийАдрес; - Элементы.ВвестиАдресВСвободнойФормеВсеДействия.Доступность = ЭтоРоссийскийАдрес; - Элементы.ЗаполнитьПоПочтовомуИндексу.Доступность = ЭтоРоссийскийАдрес; Элементы.ЗаполнитьПоПочтовомуИндексуВсеДействия.Доступность = ЭтоРоссийскийАдрес; - // Загружать можем только российские адреса. - Если МожноЗагружатьКлассификатор Тогда - КнопкаПанели = Элементы.Найти("ЗагрузитьКлассификатор"); - Если КнопкаПанели <> Неопределено Тогда - Элементы.ЗагрузитьКлассификатор.Доступность = ЭтоРоссийскийАдрес; + ОпределениеРежимаВводаАдреса(); + +КонецПроцедуры + +&НаКлиенте +Процедура ОпределениеРежимаВводаАдреса() + + Если Страна = СтранаРоссия Тогда + // РОССИЯ. Загружать можем только российские адреса. + Элементы.ВвестиАдресВСвободнойФорме.Доступность = Истина; + Элементы.ВвестиАдресВСвободнойФормеВсеДействия.Доступность = Истина; + Если МожноЗагружатьКлассификатор Тогда + КнопкаПанели = Элементы.Найти("ЗагрузитьКлассификатор"); + Если КнопкаПанели <> Неопределено Тогда + Элементы.ЗагрузитьКлассификатор.Доступность = Истина; + КонецЕсли; + КонецЕсли; + Иначе + СписокСтран = УправлениеКонтактнойИнформациейКлиент.СтраныПоддерживающиеСтруктурированныйВвод(); + Если СписокСтран[ВРег(Страна)] <> Истина Тогда + // Прочие страны + Элементы.ВвестиАдресВСвободнойФорме.Доступность = Ложь; + Элементы.ВвестиАдресВСвободнойФормеВсеДействия.Доступность = Ложь; + Элементы.СтруктураИностранныйАдреса.Видимость = Ложь; + Элементы.ГруппаИндекса.Видимость = Ложь; + РазрешитьВводАдресаВСвободнойФорме = Истина; + Иначе + // Страны ЕАЭС + Элементы.ВвестиАдресВСвободнойФорме.Доступность = Истина; + Элементы.ВвестиАдресВСвободнойФормеВсеДействия.Доступность = Истина; + Если РазрешитьВводАдресаВСвободнойФорме Тогда + Элементы.СтруктураИностранныйАдреса.Видимость = Ложь; + Элементы.ГруппаИндекса.Видимость = Ложь; + Иначе + Элементы.СтруктураИностранныйАдреса.Видимость = Истина; + Элементы.ГруппаИндекса.Видимость = Истина; + КонецЕсли; + КонецЕсли; + Если ВидКонтактнойИнформации.ВключатьСтрануВПредставление Тогда + ПозицияСтрана = СтрНайти(ПредставлениеАдреса, ","); + Если ПозицияСтрана > 0 Тогда + ПредставлениеАдреса = ВРег(Страна) + Сред(ПредставлениеАдреса, ПозицияСтрана); + КонецЕсли; КонецЕсли; КонецЕсли; - + СостояниеВводаПредставленияАдреса(РазрешитьВводАдресаВСвободнойФорме); КонецПроцедуры &НаСервере @@ -1219,22 +1247,30 @@ Инфо = ?(XDTOКонтактная = Неопределено, КонтактнаяИнформацияПоЗначениюРеквизитов(Контекст), XDTOКонтактная); - УстановитьЗначениеИндекса(Контекст, Инфо); + Если Контекст.Страна = Контекст.СтранаРоссия Тогда + УстановитьЗначениеИндекса(Контекст, Инфо); + КонецЕсли; ЗаполнитьПредставлениеАдреса(Контекст, Инфо); КонецПроцедуры &НаСервереБезКонтекста Процедура УстановитьЗначениеИндекса(Контекст, XDTOКонтактная = Неопределено) + Инфо = ?(XDTOКонтактная = Неопределено, КонтактнаяИнформацияПоЗначениюРеквизитов(Контекст), XDTOКонтактная); Адрес = Инфо.Состав; Идентификатор = НайтиИдентификаторАдресаПоИерархии(Контекст.НаселенныйПунктДетально); - ИндексПоКлассификатору = Формат(УправлениеКонтактнойИнформациейСлужебный.ОпределитьПочтовыйИндексАдреса(Адрес, Идентификатор), "ЧЦ=6; ЧРГ=' '; ЧН=; ЧГ=0"); + ИндексИОКМТОПоКлассификатору = УправлениеКонтактнойИнформациейСлужебный.ОпределитьПочтовыйИндексИОКТМОАдреса(Адрес, Идентификатор); - Контекст.Индекс = ИндексПоКлассификатору; - УправлениеКонтактнойИнформациейСлужебный.ПочтовыйИндексАдреса(Адрес, ИндексПоКлассификатору); + Если ЗначениеЗаполнено(ИндексИОКМТОПоКлассификатору.Индекс) Тогда + Контекст.Индекс = Формат(ИндексИОКМТОПоКлассификатору.Индекс, "ЧЦ=6; ЧРГ=; ЧГ=0"); + КонецЕсли; + Если ЗначениеЗаполнено(ИндексИОКМТОПоКлассификатору.ОКТМО) Тогда + Контекст.ОКТМО = Формат(ИндексИОКМТОПоКлассификатору.ОКТМО, "ЧЦ=11; ЧРГ=; ЧГ=0"); + КонецЕсли; + УправлениеКонтактнойИнформациейСлужебный.ПочтовыйИндексАдреса(Адрес, Контекст.Индекс); XDTOКонтактная.Представление = УправлениеКонтактнойИнформациейСлужебный.ПредставлениеАдреса(Адрес, Контекст.ВидКонтактнойИнформации); КонецПроцедуры @@ -1257,7 +1293,7 @@ Процедура ЗаполнитьПредставлениеАдреса(Контекст, XDTOКонтактная = Неопределено) // Код страны ставим всегда - Если ТипЗнч(Контекст.Страна)=Тип("СправочникСсылка.СтраныМира") Тогда + Если ТипЗнч(Контекст.Страна) = Тип("СправочникСсылка.СтраныМира") Тогда Контекст.КодСтраны = Контекст.Страна.Код Иначе Контекст.КодСтраны = ""; @@ -1269,6 +1305,7 @@ Инфо = ?(XDTOКонтактная = Неопределено, КонтактнаяИнформацияПоЗначениюРеквизитов(Контекст), XDTOКонтактная); Контекст.ПредставлениеАдреса = Инфо.Представление; + КонецПроцедуры &НаСервереБезКонтекста @@ -1314,8 +1351,7 @@ // Дополнительно проверяем случай, когда представление по документу равно вычисленному. Если Контекст.РазрешитьВводАдресаВСвободнойФорме Тогда Если ПредставленияАдресаОдинаковы(ВычисленноеПредставление, ДанныеАдреса.Состав.Адрес_по_документу, Истина) - И ПредставленияАдресаОдинаковы(РедактируемаяИнформация.Представление, ДанныеАдреса.Состав.Адрес_по_документу, Истина) - Тогда + И ПредставленияАдресаОдинаковы(РедактируемаяИнформация.Представление, ДанныеАдреса.Состав.Адрес_по_документу, Истина) Тогда Контекст.РазрешитьВводАдресаВСвободнойФорме = Ложь; ДанныеАдреса.Состав.Адрес_по_документу = ""; КонецЕсли; @@ -1325,15 +1361,93 @@ Контекст.ПредставлениеАдреса = ДанныеАдреса.Состав.Адрес_по_документу; КонецЕсли; - Если Контекст.ЕстьКлассификатор Тогда - МодульАдресныйКлассификаторСлужебный = ОбщегоНазначения.ОбщийМодуль("АдресныйКлассификаторСлужебный"); - Контекст.ИдентификаторНаселенногоПункта = МодульАдресныйКлассификаторСлужебный.ИдентификаторАдресногоОбъектаПоЧастямАдреса(ДанныеАдреса.Состав); - КонецЕсли; - + Контекст.ОКТМО = Формат(ДанныеАдреса.Состав.ОКТМО, "ЧРГ=''; ЧН=-; ЧГ=0"); + ЗначениеРеквизитовПоКонтактнойИнформацииАдресРФ(ДанныеАдреса, Контекст); Иначе - Контекст.ПредставлениеИностранногоАдреса = Строка(ДанныеАдреса.Состав); + Адрес = Строка(ДанныеАдреса.Состав); + Контекст.НаселенныйПунктДетально = УправлениеКонтактнойИнформациейКлиентСервер.СтруктураЧастейАдресаНаселенногоПункта("ФИАС"); + Если ЗначениеЗаполнено(Адрес) И СтрЧислоВхождений(Адрес, ",") = 9 Тогда + ЗначениеРеквизитовПоКонтактнойИнформацииАдресИностранныйАдрес(Адрес, Контекст); + Контекст.РазрешитьВводАдресаВСвободнойФорме = Ложь; + Иначе + Контекст.РазрешитьВводАдресаВСвободнойФорме = Истина; + КонецЕсли; + Контекст.ПредставлениеАдреса = ВычисленноеПредставление; + КонецЕсли; +КонецПроцедуры + +&НаСервереБезКонтекста +Процедура ЗначениеРеквизитовПоКонтактнойИнформацииАдресИностранныйАдрес(Адрес, Контекст) + + Если НЕ СтрНачинаетсяС(ВРег(Адрес), ВРег(Контекст.Страна)) Тогда + Адрес = ВРег(Контекст.Страна) + "," + Адрес; + КонецЕсли; + + СтруктураАдрес = УправлениеКонтактнойИнформациейСлужебный.РазложитьАдресВСтруктуру(Адрес); + + Контекст.НаселенныйПунктДетально.Регион.Представление = СтруктураАдрес.Регион; + Контекст.НаселенныйПунктДетально.Район.Представление = СтруктураАдрес.Район; + Контекст.НаселенныйПунктДетально.Город.Представление = СтруктураАдрес.Город; + Контекст.НаселенныйПунктДетально.НаселенныйПункт.Представление = СтруктураАдрес.НаселенныйПункт; + + НаселенныйПункт = ""; + НаселенныйПункт = ?(ЗначениеЗаполнено(СтруктураАдрес.НаселенныйПункт), СтруктураАдрес.НаселенныйПункт + ", ",""); + НаселенныйПункт = НаселенныйПункт + ?(ЗначениеЗаполнено(СтруктураАдрес.Город), СтруктураАдрес.Город + ", ",""); + НаселенныйПункт = НаселенныйПункт + ?(ЗначениеЗаполнено(СтруктураАдрес.Район), СтруктураАдрес.Район + ", ",""); + НаселенныйПункт = НаселенныйПункт + ?(ЗначениеЗаполнено(СтруктураАдрес.Регион), СтруктураАдрес.Регион + ", ",""); + + Если СтрДлина(НаселенныйПункт) > 2 И СтрЗаканчиваетсяНа(НаселенныйПункт, ", ") Тогда + НаселенныйПункт = Лев(НаселенныйПункт, СтрДлина(НаселенныйПункт) - 2); + КонецЕсли; + + Контекст.Индекс = СтруктураАдрес.Индекс; + Контекст.НаселенныйПункт = НаселенныйПункт; + Контекст.Улица = СтруктураАдрес.Улица; + + Если Не ПустаяСтрока(СтруктураАдрес.Дом) Тогда + ЗданиеИНомер = НаименованиеЗданияИЕгоНомер(СтруктураАдрес.Дом); + Контекст.ТипДома = ЗданиеИНомер.Здание; + Контекст.Дом = ЗданиеИНомер.Номер; + КонецЕсли; + + Если Не ПустаяСтрока(СтруктураАдрес.Корпус) Тогда + ЗданиеИНомер = НаименованиеЗданияИЕгоНомер(СтруктураАдрес.Корпус); + Контекст.ТипСтроения = ЗданиеИНомер.Здание; + Контекст.Строение = ЗданиеИНомер.Номер; + КонецЕсли; + + Если Не ПустаяСтрока(СтруктураАдрес.Квартира) Тогда + ЗданиеИНомер = НаименованиеЗданияИЕгоНомер(СтруктураАдрес.Квартира); + Контекст.ТипПомещения = ЗданиеИНомер.Здание; + Контекст.Помещение = ЗданиеИНомер.Номер; + КонецЕсли; + +КонецПроцедуры + +&НаСервереБезКонтекста +Функция НаименованиеЗданияИЕгоНомер(Название) + ТекстПоиска = СокрЛП(Название); + + Позиция = СтрНайти(ТекстПоиска, " "); + + Результат = Новый Структура("Здание, Номер"); + Если Позиция > 0 Тогда + Результат.Здание = Лев(ТекстПоиска, Позиция - 1); + Результат.Номер = СокрЛ(Сред(ТекстПоиска, Позиция + 1)); + Иначе + Результат.Здание = ТекстПоиска; + Результат.Номер = ""; + КонецЕсли; + + Возврат Результат; +КонецФункции + + +&НаСервереБезКонтекста +Процедура ЗначениеРеквизитовПоКонтактнойИнформацииАдресРФ(ДанныеАдреса, Контекст) + // Индекс просто ставим Контекст.Индекс = Формат(УправлениеКонтактнойИнформациейСлужебный.ПочтовыйИндексАдреса(ДанныеАдреса), "ЧГ="); @@ -1381,14 +1495,14 @@ НомерСтроки = НомерСтроки - 1; ЗаполнитьЗначенияСвойств(Контекст.ДополнительныеПомещения.Вставить(0), ТаблицаДанных[НомерСтроки]); КонецЦикла; - + КонецПроцедуры &НаСервереБезКонтекста Функция КонтактнаяИнформацияПоЗначениюРеквизитов(Контекст) - ПространствоИмен = УправлениеКонтактнойИнформациейКлиентСерверПовтИсп.ПространствоИмен(); + ПространствоИмен = УправлениеКонтактнойИнформациейКлиентСервер.ПространствоИмен(); - Результат = ФабрикаXDTO.Создать( ФабрикаXDTO.Тип(ПространствоИмен, "КонтактнаяИнформация") ); + Результат = ФабрикаXDTO.Создать(ФабрикаXDTO.Тип(ПространствоИмен, "КонтактнаяИнформация")); Результат.Комментарий = Контекст.Комментарий; Результат.Состав = ФабрикаXDTO.Создать(ФабрикаXDTO.Тип(ПространствоИмен, "Адрес")); @@ -1396,8 +1510,24 @@ Адрес.Страна = Строка(Контекст.Страна); Если ВРег(Контекст.Страна) <> ВРег(Контекст.СтранаРоссия.Наименование) Тогда - Адрес.Состав = Контекст.ПредставлениеИностранногоАдреса; - Результат.Представление = УправлениеКонтактнойИнформациейСлужебный.ПредставлениеАдреса(Адрес, Контекст.ВидКонтактнойИнформации); + Если Контекст.РазрешитьВводАдресаВСвободнойФорме Тогда + Результат.Представление = Контекст.ПредставлениеАдреса; + Если Контекст.ВидКонтактнойИнформации.ВключатьСтрануВПредставление + И СтрНачинаетсяС(ВРЕГ(Контекст.ПредставлениеАдреса), ВРег(Контекст.Страна)) Тогда + Адрес.Состав = Сред(Контекст.ПредставлениеАдреса, СтрДлина(Контекст.Страна) + 2); + Иначе + Адрес.Состав = Контекст.ПредставлениеАдреса; + КонецЕсли; + Иначе + НаселенныйПункт = Строка(Контекст.НаселенныйПунктДетально.Регион.Представление) + "," + Строка(Контекст.НаселенныйПунктДетально.Район.Представление) + + "," + Строка(Контекст.НаселенныйПунктДетально.Город.Представление) + "," + Строка(Контекст.НаселенныйПунктДетально.НаселенныйПункт.Представление); + Строка9Запятых = Контекст.Страна.Наименование + "," + Контекст.Индекс + "," + НаселенныйПункт + "," + Контекст.Улица + ","; + Строка9Запятых = Строка9Запятых + ?(ЗначениеЗаполнено(Контекст.Дом), Контекст.ТипДома + " " +Контекст.Дом, "") + ","; + Строка9Запятых = Строка9Запятых + ?(ЗначениеЗаполнено(Контекст.Строение), Контекст.ТипСтроения + " " + Контекст.Строение, "") + ","; + Строка9Запятых = Строка9Запятых + ?(ЗначениеЗаполнено(Контекст.Помещение), Контекст.ТипПомещения + " " + Контекст.Помещение, ""); + Адрес.Состав = Строка9Запятых; + Результат.Представление = УправлениеКонтактнойИнформациейСлужебный.ПредставлениеАдреса(Адрес, Контекст.ВидКонтактнойИнформации); + КонецЕсли; Возврат Результат; КонецЕсли; @@ -1454,6 +1584,10 @@ // Индекс УправлениеКонтактнойИнформациейСлужебный.ПочтовыйИндексАдреса(АдресРФ, Контекст.Индекс); + // ОКТМО + ОписаниеЧисло = Новый ОписаниеТипов("Число"); + УправлениеКонтактнойИнформациейСлужебный.УстановитьXDTOРеквизитОбъекта(АдресРФ, "ОКТМО", ОписаниеЧисло.ПривестиЗначение(Контекст.ОКТМО)); + // Если НЕ ПустаяСтрока( Контекст.ДополнительныйЭлемент) Тогда УправлениеКонтактнойИнформациейСлужебный.ДобавитьДополнительныеЭлементыАдреса(АдресРФ, Контекст.ДополнительныйЭлемент, 90); @@ -1505,8 +1639,10 @@ КонецЕсли; КонецЕсли; - Контекст.НаселенныйПунктДетально = УправлениеКонтактнойИнформациейСлужебный.СписокРеквизитовНаселенныйПункт(, - Контекст.ВидКонтактнойИнформации.ФорматАдреса); + Если НЕ ЗначениеЗаполнено(Контекст.НаселенныйПунктДетально) Тогда + Контекст.НаселенныйПунктДетально = УправлениеКонтактнойИнформациейСлужебный.СписокРеквизитовНаселенныйПункт(, + Контекст.ВидКонтактнойИнформации.ФорматАдреса); + КонецЕсли; Если XDTOДанныеАдреса = Неопределено Тогда @@ -1522,26 +1658,56 @@ Возврат; КонецЕсли; + ЗаполнитьКонтекстПоXDTOАдреса(XDTOДанныеАдреса, Контекст); + + +КонецПроцедуры + +&НаСервереБезКонтекста +Процедура ЗаполнитьКонтекстПоXDTOАдреса(XDTOДанныеАдреса, Контекст, Уровни = Неопределено) + // Из переданного XDTO АдресРФ = УправлениеКонтактнойИнформациейСлужебный.РоссийскийАдрес(XDTOДанныеАдреса); Если АдресРФ <> Неопределено Тогда Для Каждого КлючЗначение Из Контекст.НаселенныйПунктДетально Цикл Значение = КлючЗначение.Значение; - Если Значение.Уровень <> 90 Тогда - Представление = УправлениеКонтактнойИнформациейСлужебный.ПолучитьXDTOРеквизитОбъекта(АдресРФ, Значение.ПутьXPath); - Иначе - Представление = УправлениеКонтактнойИнформациейСлужебный.НайтиДополнительныйЭлементАдреса(АдресРФ); - КонецЕсли; - Части = УправлениеКонтактнойИнформациейКлиентСервер.НаименованиеСокращение(Представление); - Значение.Представление = Представление; - Значение.Наименование = Части.Наименование; - Значение.Сокращение = Части.Сокращение; + Если Уровни = Неопределено ИЛИ Уровни.Найти(Значение.Уровень) <> Неопределено Тогда + Если Значение.Уровень <> 90 Тогда + Представление = УправлениеКонтактнойИнформациейСлужебный.ПолучитьXDTOРеквизитОбъекта(АдресРФ, Значение.ПутьXPath); + Иначе + Представление = УправлениеКонтактнойИнформациейСлужебный.НайтиДополнительныйЭлементАдреса(АдресРФ); + КонецЕсли; + + Части = УправлениеКонтактнойИнформациейКлиентСервер.НаименованиеСокращение(Представление); + Значение.Представление = Представление; + Значение.Наименование = Части.Наименование; + Значение.Сокращение = Части.Сокращение; + КонецЕсли; + КонецЦикла; + + УправлениеКонтактнойИнформациейСлужебный.ЗаполнитьИдентификаторыНаселенногоПункта(Контекст.НаселенныйПунктДетально); + + УровеньНаселенногоПункта = 0; + УровеньУлицы = 0; + Для каждого Элемент Из Контекст.НаселенныйПунктДетально Цикл + Если Элемент.Значение.Уровень < 7 + И ЗначениеЗаполнено(Элемент.Значение.Идентификатор) + И Элемент.Значение.Уровень > УровеньНаселенногоПункта Тогда + Контекст.ИдентификаторНаселенногоПункта = Элемент.Значение.Идентификатор; + УровеньНаселенногоПункта = Элемент.Значение.Уровень; + КонецЕсли; + Если Элемент.Значение.Уровень > 6 + И ЗначениеЗаполнено(Элемент.Значение.Идентификатор) + И Элемент.Значение.Уровень > УровеньУлицы Тогда + Контекст.ИдентификаторУлицы = Элемент.Значение.Идентификатор; + УровеньУлицы = Элемент.Значение.Уровень; + КонецЕсли; КонецЦикла; КонецЕсли; - + КонецПроцедуры &НаСервере @@ -1631,7 +1797,7 @@ НомерСтроки = Сред(Элемент.Имя, 1 + СтрДлина("ТипСтроения")); СтрокаЗданий = ДополнительныеЗдания.Получить(НомерСтроки); СтрокаЗданий.Тип = ЭтотОбъект[Элемент.Имя]; - СтрокаЗданий.ПутьXPath = УправлениеКонтактнойИнформациейКлиентСерверПовтИсп.XPathНомераДополнительногоОбъектаАдресации(СтрокаЗданий.Тип); + СтрокаЗданий.ПутьXPath = УправлениеКонтактнойИнформациейКлиентСервер.XPathНомераДополнительногоОбъектаАдресации(СтрокаЗданий.Тип); Контекст = КонтекстФормыКлиент(); ОбновитьИндексИПредставление(Контекст); @@ -1721,7 +1887,7 @@ НомерСтроки = Сред(Элемент.Имя, 1 + СтрДлина("ТипПомещения")); СтрокаПомещений = ДополнительныеПомещения.Получить(НомерСтроки); СтрокаПомещений.Тип = ЭтотОбъект[Элемент.Имя]; - СтрокаПомещений.ПутьXPath = УправлениеКонтактнойИнформациейКлиентСерверПовтИсп.XPathНомераДополнительногоОбъектаАдресации(СтрокаПомещений.Тип); + СтрокаПомещений.ПутьXPath = УправлениеКонтактнойИнформациейКлиентСервер.XPathНомераДополнительногоОбъектаАдресации(СтрокаПомещений.Тип); Контекст = КонтекстФормыКлиент(); ЗаполнитьПредставлениеАдреса(Контекст); @@ -1781,7 +1947,7 @@ ИначеЕсли ПутьXPath = "Округ" Тогда Возврат "НаселенныйПункт"; - ИначеЕсли ПутьXPath = УправлениеКонтактнойИнформациейКлиентСерверПовтИсп.XPathРайона() Тогда + ИначеЕсли ПутьXPath = УправлениеКонтактнойИнформациейКлиентСервер.XPathРайона() Тогда Возврат "НаселенныйПункт"; ИначеЕсли ПутьXPath = "Город" Тогда @@ -1796,7 +1962,7 @@ ИначеЕсли ПутьXPath = "Улица" Тогда Возврат "Улица"; - ИначеЕсли ПутьXPath = УправлениеКонтактнойИнформациейКлиентСерверПовтИсп.XPathПочтовогоИндекса() Тогда + ИначеЕсли ПутьXPath = УправлениеКонтактнойИнформациейКлиентСервер.XPathПочтовогоИндекса() Тогда Возврат "Индекс"; КонецЕсли; @@ -1828,21 +1994,21 @@ // Варианты дома Для Каждого ЭлементСписка Из Элементы.ТипДома.СписокВыбора Цикл - Если ПутьXPath = УправлениеКонтактнойИнформациейКлиентСерверПовтИсп.XPathНомераДополнительногоОбъектаАдресации(ЭлементСписка.Значение) Тогда + Если ПутьXPath = УправлениеКонтактнойИнформациейКлиентСервер.XPathНомераДополнительногоОбъектаАдресации(ЭлементСписка.Значение) Тогда Возврат "Дом"; КонецЕсли; КонецЦикла; // Варианты корпуса Для Каждого ЭлементСписка Из Элементы.ТипСтроения.СписокВыбора Цикл - Если ПутьXPath = УправлениеКонтактнойИнформациейКлиентСерверПовтИсп.XPathНомераДополнительногоОбъектаАдресации(ЭлементСписка.Значение) Тогда + Если ПутьXPath = УправлениеКонтактнойИнформациейКлиентСервер.XPathНомераДополнительногоОбъектаАдресации(ЭлементСписка.Значение) Тогда Возврат "Строение"; КонецЕсли; КонецЦикла; // Варианты помещения Для Каждого ЭлементСписка Из Элементы.ТипПомещения.СписокВыбора Цикл - Если ПутьXPath = УправлениеКонтактнойИнформациейКлиентСерверПовтИсп.XPathНомераДополнительногоОбъектаАдресации(ЭлементСписка.Значение) Тогда + Если ПутьXPath = УправлениеКонтактнойИнформациейКлиентСервер.XPathНомераДополнительногоОбъектаАдресации(ЭлементСписка.Значение) Тогда Возврат "Помещение"; КонецЕсли; КонецЦикла; @@ -1864,18 +2030,13 @@ &НаСервере Процедура ОчиститьАдресСервер(Контекст) - Если Контекст.Страна<>Контекст.СтранаРоссия Тогда - Контекст.ПредставлениеИностранногоАдреса = ""; - Возврат; - КонецЕсли; - + Контекст.ПредставлениеАдреса = ""; Контекст.Комментарий = ""; - Контекст.Индекс = Неопределено; - + Контекст.ОКТМО = Неопределено; Контекст.ИдентификаторНаселенногоПункта = Неопределено; Контекст.НаселенныйПункт = ""; - Контекст.НаселенныйПунктДетально = УправлениеКонтактнойИнформациейСлужебный.СписокРеквизитовНаселенныйПункт(); + Контекст.НаселенныйПунктДетально = УправлениеКонтактнойИнформациейСлужебный.СписокРеквизитовНаселенныйПункт(Неопределено, "ФИАС"); Контекст.ИдентификаторУлицы = Неопределено; Контекст.Улица = ""; @@ -1961,7 +2122,12 @@ Функция СписокАвтоподбораУлицы(ИдентификаторНаселенногоПункта, Текст, ДополнительныеПараметры) Возврат УправлениеКонтактнойИнформациейСлужебный.СписокАвтоподбораУлицы(ИдентификаторНаселенногоПункта, Текст, ДополнительныеПараметры); - + +КонецФункции + +&НаСервереБезКонтекста +Функция СписокАвтоподбораВариантовДомов(Идентификатор, Текст) + Возврат УправлениеКонтактнойИнформациейСлужебный.СписокАвтоподбораНомераДомов(Идентификатор, Текст); КонецФункции &НаСервереБезКонтекста @@ -1986,9 +2152,9 @@ СписокРеквизитов = " |ВидКонтактнойИнформации, |Страна, КодСтраны, СтранаРоссия, СкрыватьНеактуальныеАдреса, - |Индекс, ПредставлениеАдреса, ПредставлениеИностранногоАдреса, Комментарий, КопияКомментария, + |Индекс, ПредставлениеАдреса, Комментарий, КопияКомментария, |НаселенныйПункт, ИдентификаторНаселенногоПункта, НаселенныйПунктДетально, - |Улица, ИдентификаторУлицы, + |Улица, ИдентификаторУлицы, ОКТМО, |ТипДома, Дом, ТипСтроения, Строение, ТипПомещения, Помещение, |РазрешитьВводАдресаВСвободнойФорме, ПредставлениеАдресаИзменено, |Модифицированность, ЕстьКлассификатор, ДополнительныйЭлемент, ПодчиненныйЭлемент @@ -2028,15 +2194,19 @@ // - ФормироватьПредставление - Булево - необязательный флаг. По умолчанию установлен. // &НаКлиенте -Процедура СостояниеВводаПредставленияАдреса(Режим, ФормироватьПредставление=Истина) - Элемент = Элементы.ПредставлениеАдреса; +Процедура СостояниеВводаПредставленияАдреса(РедактироватьПредставлениеАдреса, ФормироватьПредставление = Истина) - Элемент.РедактированиеТекста = Режим; - Если Режим Тогда - Элемент.РедактированиеТекста = Истина; + Если Страна = СтранаРоссия Тогда + Элемент = Элементы.ПредставлениеАдреса; + // Проверять адрес, введенный вручную нельзя. + Элементы.ПроверитьЗаполнениеАдреса.Доступность = Не РедактироватьПредставлениеАдреса; + Иначе + Элемент = Элементы.ПредставлениеИностранногоАдреса; + КонецЕсли; + Элемент.РедактированиеТекста = РедактироватьПредставлениеАдреса; + Если РедактироватьПредставлениеАдреса Тогда Элемент.ЦветФона = АвтоЦвет; Иначе - Элемент.РедактированиеТекста = Ложь; Элемент.ЦветФона = ЦветФонаФормы; Если ФормироватьПредставление Тогда @@ -2047,19 +2217,12 @@ КонецЕсли; // Остальные поля ввода - СостояниеГруппыВвода(Элементы.СтранаАдреса, Не Режим); - СостояниеГруппыВвода(Элементы.ТипАдреса, Не Режим); + СостояниеГруппыВвода(Элементы.ТипАдреса, Не РедактироватьПредставлениеАдреса); // Пометка режима - Элементы.ВвестиАдресВСвободнойФорме.Пометка = Режим; - Элементы.ВвестиАдресВСвободнойФормеВсеДействия.Пометка = Режим; - - Элементы.ПредставлениеАдресаКонтекстноеМенюВвестиАдресВСвободнойФорме.Пометка = Режим; - - // Проверять адрес, введенный вручную нельзя. - Если Страна = СтранаРоссия Тогда - Элементы.ПроверитьЗаполнениеАдреса.Доступность = Не Режим; - КонецЕсли; + Элементы.ВвестиАдресВСвободнойФорме.Пометка = РедактироватьПредставлениеАдреса; + Элементы.ВвестиАдресВСвободнойФормеВсеДействия.Пометка = РедактироватьПредставлениеАдреса; + Элементы.ПредставлениеАдресаКонтекстноеМенюВвестиАдресВСвободнойФорме.Пометка = РедактироватьПредставлениеАдреса; // Страна - по прежнему управляющее поле. Если Элементы.Страна.Доступность Тогда @@ -2067,20 +2230,24 @@ КонецЕсли; // Переключаем заголовок представления и текущий элемент ввода для индикации режима. - Если Режим Тогда + Если РедактироватьПредставлениеАдреса Тогда Элементы.ПредставлениеАдреса.ПоложениеЗаголовка = ПоложениеЗаголовкаЭлементаФормы.Верх; Элементы.ПредставлениеАдреса.Заголовок = НСтр("ru='Адрес в свободной форме'"); - Элементы.СтранаАдреса.Отображение = ОтображениеОбычнойГруппы.Нет; - - ТекущийЭлемент = Элементы.ПредставлениеАдреса; + Если Страна <> СтранаРоссия Тогда + ТекущийЭлемент = Элементы.ПредставлениеИностранногоАдреса; + Иначе + ТекущийЭлемент = Элементы.ПредставлениеАдреса; + КонецЕсли; Иначе Элементы.ПредставлениеАдреса.ПоложениеЗаголовка = ПоложениеЗаголовкаЭлементаФормы.Нет; Элементы.ПредставлениеАдреса.Заголовок = ""; - Элементы.СтранаАдреса.Отображение = ОтображениеОбычнойГруппы.ОбычноеВыделение; - - ТекущийЭлемент = Элементы.НаселенныйПункт; + Если Страна = СтранаРоссия Тогда + ТекущийЭлемент = Элементы.НаселенныйПункт; + Иначе + ТекущийЭлемент = Элементы.НаселенныйПунктИностранныйАдреса; + КонецЕсли; КонецЕсли; КонецПроцедуры @@ -2129,24 +2296,25 @@ &НаСервере Процедура ПредставлениеАдресаПриИзмененииСервер() - // Пытаемся разобрать заново - XDTOКонтактная = УправлениеКонтактнойИнформациейСлужебный.КонтактнаяИнформацияXDTOПоПредставлению(ПредставлениеАдреса, ВидКонтактнойИнформации); - XDTOКонтактная.Представление = ПредставлениеАдреса; - XDTOКонтактная.Комментарий = Комментарий; - - // И проставляем в реквизиты, кроме страны и представления. - ТекущееПредставление = ПредставлениеАдреса; - ТекущаяСтрана = Страна; - - ОчиститьАдресСервер(ЭтотОбъект); - - // Возможно будет отключен свободного ввода. - ЗначениеРеквизитовПоКонтактнойИнформации(ЭтотОбъект, XDTOКонтактная); - - ПредставлениеАдреса = ТекущееПредставление; - Страна = ТекущаяСтрана; - - ОтрисоватьДополнительныеЗданияИПомещения(); + Если Страна = СтранаРоссия Тогда + // Пытаемся разобрать заново + XDTOКонтактная = УправлениеКонтактнойИнформациейСлужебный.КонтактнаяИнформацияXDTOПоПредставлению(ПредставлениеАдреса, ВидКонтактнойИнформации); + XDTOКонтактная.Представление = ПредставлениеАдреса; + XDTOКонтактная.Комментарий = Комментарий; + + // И проставляем в реквизиты, кроме страны и представления. + ТекущееПредставление = ПредставлениеАдреса; + ТекущаяСтрана = Страна; + + ОчиститьАдресСервер(ЭтотОбъект); + + // Возможно будет отключен свободного ввода. + ЗначениеРеквизитовПоКонтактнойИнформации(ЭтотОбъект, XDTOКонтактная); + + ПредставлениеАдреса = ТекущееПредставление; + Страна = ТекущаяСтрана; + ОтрисоватьДополнительныеЗданияИПомещения(); + КонецЕсли; // Включаем режим свободного ввода принудительно. РазрешитьВводАдресаВСвободнойФорме = Истина; @@ -2169,6 +2337,39 @@ Возврат ВРег(Результат); КонецФункции +&НаСервере +Процедура ЗаполнитьВариантыДомовСтроенийКвартир() + + Перем ВариантыДанныхДом, ВариантыДанныхПомещение, ВариантыДанныхСтроение; + + // Возможные варианты дома, строения, квартиры. + ВариантыДанныхДом = УправлениеКонтактнойИнформациейСлужебный.ВариантыДанныхДом(); + УстановитьСписокВыбораЭлемента(Элементы.ТипДома, Элементы.Дом, ВариантыДанныхДом); + УстановитьСписокВыбораЭлемента(Элементы.ТипДомаИностранныйАдреса, Элементы.ДомИностранныйАдреса, ВариантыДанныхДом); + + ВариантыДанныхСтроение = УправлениеКонтактнойИнформациейСлужебный.ВариантыДанныхСтроение(); + УстановитьСписокВыбораЭлемента(Элементы.ТипСтроения, Элементы.Строение, ВариантыДанныхСтроение); + УстановитьСписокВыбораЭлемента(Элементы.ТипСтроенияИностранныйАдреса, Элементы.СтроениеИностранныйАдреса, ВариантыДанныхСтроение); + + ВариантыДанныхПомещение = УправлениеКонтактнойИнформациейСлужебный.ВариантыДанныхПомещение(); + УстановитьСписокВыбораЭлемента(Элементы.ТипПомещения, Элементы.Помещение, ВариантыДанныхПомещение); + УстановитьСписокВыбораЭлемента(Элементы.ТипПомещенияИностранныйАдреса, Элементы.ПомещениеИностранныйАдреса, ВариантыДанныхПомещение); + // + + // Возможно пустые значения, чтобы не смущали. + Если ПустаяСтрока(Дом) И ПустаяСтрока(ТипДома) Тогда + ТипДома = УправлениеКонтактнойИнформациейКлиентСервер.ПервыйИлиПустой(Элементы.ТипДома); + КонецЕсли; + Если ПустаяСтрока(Строение) И ПустаяСтрока(ТипСтроения) Тогда + ТипСтроения = УправлениеКонтактнойИнформациейКлиентСервер.ПервыйИлиПустой(Элементы.ТипСтроения); + КонецЕсли; + Если ПустаяСтрока(Помещение) И ПустаяСтрока(ТипПомещения) Тогда + ТипПомещения = УправлениеКонтактнойИнформациейКлиентСервер.ПервыйИлиПустой(Элементы.ТипПомещения); + КонецЕсли; + +КонецПроцедуры + + &НаСервере Функция НедоступностьСервиса() @@ -2267,4 +2468,176 @@ КонецФункции +&НаКлиенте +Процедура НаселенныйПунктИностранныйАдресаНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка) + СтандартнаяОбработка = Ложь; + + // Если пришли впрямую после редактирования, то сбрасываем адрес. + Если Элемент.ТекстРедактирования <> НаселенныйПункт Тогда + Модифицированность = Истина; + НаселенныйПункт = Элемент.ТекстРедактирования; + + ИдентификаторНаселенногоПункта = Неопределено; + ОбновитьНаселенныйПунктИностранногоАдреса(); + КонецЕсли; + + ПараметрыФормы = Новый Структура; + ПараметрыФормы.Вставить("НаселенныйПунктДетально", НаселенныйПунктДетально); + ПараметрыФормы.Вставить("ФорматАдреса","КЛАДР"); + ПараметрыФормы.Вставить("СервисКлассификатораНедоступен", Истина); + ОткрытьФорму("Обработка.ВводКонтактнойИнформации.Форма.НаселенныйПунктАдреса", ПараметрыФормы, Элемент, , , , , РежимОткрытияОкнаФормы.БлокироватьОкноВладельца); +КонецПроцедуры + +&НаКлиенте +Процедура НаселенныйПунктИностранныйАдресаОбработкаВыбора(Элемент, ВыбранноеЗначение, СтандартнаяОбработка) + + СтандартнаяОбработка = Ложь; + Если ВыбранноеЗначение=Неопределено Тогда + Возврат; + КонецЕсли; + + Модифицированность = Истина; + ТипЗначения = ТипЗнч(ВыбранноеЗначение); + + ФормироватьДетально = Истина; + + Если ТипЗначения = Тип("Структура") Тогда + + НаселенныйПункт = ВыбранноеЗначение.Представление; + + Если ВыбранноеЗначение.Свойство("НаселенныйПунктДетально") Тогда + // Выбор из формы детального ввода. + НаселенныйПунктДетально = ВыбранноеЗначение.НаселенныйПунктДетально; + ФормироватьДетально = Ложь; + Иначе + Если НаселенныйПунктДетально <> Неопределено Тогда + НовыеДанныеПоНаселенномуПунктуДетально = НаселенныйПунктДетальноПоИдентификатору(ИдентификаторНаселенногоПункта, ВидКонтактнойИнформации.ФорматАдреса); + Для каждого ЧастьАдреса Из НовыеДанныеПоНаселенномуПунктуДетально Цикл + Если ЧастьАдреса.Значение.Уровень < 7 Тогда + НаселенныйПунктДетально[ЧастьАдреса.Ключ] = ЧастьАдреса.Значение; + КонецЕсли; + КонецЦикла; + Иначе + НаселенныйПунктДетально = НаселенныйПунктДетальноПоИдентификатору(ИдентификаторНаселенногоПункта, ВидКонтактнойИнформации.ФорматАдреса); + КонецЕсли; + КонецЕсли; + + РегионНеЗагружен = ВыбранноеЗначение.Свойство("РегионЗагружен") И (Не ВыбранноеЗначение.РегионЗагружен); + Если МожноЗагружатьКлассификатор И РегионНеЗагружен Тогда + // Предлагаем загрузить классификатор. + УправлениеКонтактнойИнформациейКлиент.ПредложениеЗагрузкиКлассификатора( + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru='Данные для ""%1"" не загружены.'"), ВыбранноеЗначение.Представление), + ВыбранноеЗначение.Представление); + КонецЕсли; + + Иначе + // Иной источник, будет попытка разобрать. + НаселенныйПункт = Строка(ВыбранноеЗначение); + КонецЕсли; + + Контекст = КонтекстФормыКлиент(); + // Так как изменился населенный пункт, то перепроверяем улицу, индекс и представление обновятся там. + ЗаполнитьПредставлениеАдреса(Контекст); + КонтекстФормыКлиент(Контекст); + + +КонецПроцедуры + +&НаКлиенте +Процедура УлицаИностранныйАдресаПриИзменении(Элемент) + Контекст = КонтекстФормыКлиент(); + ЗаполнитьПредставлениеАдреса(Контекст); + КонтекстФормыКлиент(Контекст); + +КонецПроцедуры + +&НаКлиенте +Процедура НаселенныйПунктИностранныйАдресаПриИзменении(Элемент) + + ОбновитьНаселенныйПунктИностранногоАдреса(); + +КонецПроцедуры + +&НаКлиенте +Процедура ОбновитьНаселенныйПунктИностранногоАдреса() + + НаселенныйПунктМассив = СтрРазделить(НаселенныйПункт, ",", Ложь); + КоличествоЭлементовВНаселенныйПункт = 0; + СоответствиеУровнейНаселенногоПункта = Новый Соответствие; + Для каждого НаселенныйПунктДетальноЭлемент Из НаселенныйПунктДетально Цикл + Если НЕ (НаселенныйПунктДетальноЭлемент.Значение.Уровень = 2 ИЛИ НаселенныйПунктДетальноЭлемент.Значение.Уровень = 5 + ИЛИ НаселенныйПунктДетальноЭлемент.Значение.Уровень > 6) Тогда + Если ЗначениеЗаполнено(НаселенныйПунктДетальноЭлемент.Значение.Представление) Тогда + КоличествоЭлементовВНаселенныйПункт = КоличествоЭлементовВНаселенныйПункт + 1; + КонецЕсли; + КонецЕсли; + СоответствиеУровнейНаселенногоПункта.Вставить(НаселенныйПунктДетальноЭлемент.Значение.Уровень, НаселенныйПунктДетальноЭлемент); + КонецЦикла; + + ПозицияВМассиве = НаселенныйПунктМассив.Количество() - 1; + + Если ПозицияВМассиве >=0 Тогда + Если НаселенныйПунктМассив.Количество() = КоличествоЭлементовВНаселенныйПункт Тогда + Для Уровень = 1 По 6 Цикл + Если НЕ (Уровень = 2 ИЛИ Уровень = 5) Тогда + Элемент = СоответствиеУровнейНаселенногоПункта.Получить(Уровень); + Если Элемент <> Неопределено И ЗначениеЗаполнено(Элемент.Значение.Представление) Тогда + Элемент.Значение.Представление = СокрЛП(НаселенныйПунктМассив.Получить(ПозицияВМассиве)); + ПозицияВМассиве = ПозицияВМассиве - 1; + КонецЕсли; + КонецЕсли; + КонецЦикла; + Иначе + Для Уровень = 1 По 6 Цикл + Если НЕ (Уровень = 2 ИЛИ Уровень = 5) Тогда + Элемент = СоответствиеУровнейНаселенногоПункта.Получить(Уровень); + Если Элемент <> Неопределено Тогда + Если ПозицияВМассиве >= 0 Тогда + Элемент.Значение.Представление = СокрЛП(НаселенныйПунктМассив.Получить(ПозицияВМассиве)); + ПозицияВМассиве = ПозицияВМассиве - 1; + Иначе + Элемент.Значение.Представление = ""; + КонецЕсли; + КонецЕсли; + КонецЕсли; + КонецЦикла; + КонецЕсли; + Иначе + Для Уровень = 1 По 6 Цикл + Элемент = СоответствиеУровнейНаселенногоПункта.Получить(Уровень); + Элемент.Значение.Представление = ""; + КонецЦикла; + КонецЕсли; + + ОбновитьПредставлениеАдреса(); + +КонецПроцедуры + +&НаКлиенте +Процедура ОбновитьПредставлениеАдреса() + Контекст = КонтекстФормыКлиент(); + ЗаполнитьПредставлениеАдреса(Контекст); + КонтекстФормыКлиент(Контекст); +КонецПроцедуры + +&НаКлиенте +Процедура ДомИностранныйАдресаПриИзменении(Элемент) + ОбновитьПредставлениеАдреса(); +КонецПроцедуры + +&НаКлиенте +Процедура СтроениеИностранныйАдресаПриИзменении(Элемент) + ОбновитьПредставлениеАдреса(); +КонецПроцедуры + +&НаКлиенте +Процедура ПомещениеИностранныйАдресаПриИзменении(Элемент) + ОбновитьПредставлениеАдреса(); +КонецПроцедуры + +&НаКлиенте +Процедура ИндексПриИзменении(Элемент) + ОбновитьПредставлениеАдреса(); +КонецПроцедуры + #КонецОбласти diff --git a/SSL/src/DataProcessors/ВводКонтактнойИнформации/Forms/ВводТелефона/Form.form b/SSL/src/DataProcessors/ВводКонтактнойИнформации/Forms/ВводТелефона/Form.form index d72f17040..ffd438700 100644 --- a/SSL/src/DataProcessors/ВводКонтактнойИнформации/Forms/ВводТелефона/Form.form +++ b/SSL/src/DataProcessors/ВводКонтактнойИнформации/Forms/ВводТелефона/Form.form @@ -769,7 +769,6 @@ <autoFillCheck>true</autoFillCheck> <allowFormCustomize>true</allowFormCustomize> <enabled>true</enabled> - <verticalScroll>UseIfNecessary</verticalScroll> <showTitle>auto</showTitle> <showCloseButton>true</showCloseButton> <attributes> @@ -924,23 +923,6 @@ <common>true</common> </edit> </attributes> - <attributes> - <name>ЗапрещатьВводНекорректного</name> - <title> - <key>ru</key> - <value>Запрещать ввод некорректного</value> - - 9 - - Boolean - - - true - - - true - - ВидКонтактнойИнформации @@ -1047,7 +1029,7 @@ <name>КомандаОК</name> </handler> </action> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <formCommands> @@ -1072,7 +1054,7 @@ <name>ОчиститьТелефон</name> </handler> </action> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <formCommands> @@ -1094,7 +1076,7 @@ <name>КомандаОтмена</name> </handler> </action> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <parameters> diff --git a/SSL/src/DataProcessors/ВводКонтактнойИнформации/Forms/ВводТелефона/Help/ru.html b/SSL/src/DataProcessors/ВводКонтактнойИнформации/Forms/ВводТелефона/Help/ru.html index e0a1ef5da..c0063a979 100644 --- a/SSL/src/DataProcessors/ВводКонтактнойИнформации/Forms/ВводТелефона/Help/ru.html +++ b/SSL/src/DataProcessors/ВводКонтактнойИнформации/Forms/ВводТелефона/Help/ru.html @@ -4,8 +4,8 @@ <p>Для того чтобы ввести телефон (факс), необходимо заполнить поля:</p> <ul><li><strong>Код страны</strong> - программа автоматически добавляет "+" к коду страны; </li><li><strong>Код города</strong> - автоматически заключается в скобки; -</li><li><strong>Номер телефона</strong> - пишется в произвольной форме; -</li><li><strong>Добавочный номер</strong> - перед цифрами добавочного номера программа автоматически проставляет доб; +</li><li><strong>Номер</strong> - пишется в произвольной форме; +</li><li><strong>Добавочный номер</strong> - перед цифрами добавочного номера программа автоматически проставляет доб. Зависит от настроек (добавочного номера может и не быть); </li><li><strong>Комментарий</strong> - введите дополнительную информацию о телефоне.</li></ul><h3>Очистка номера телефона (факса)</h3> <ul><li>Для того чтобы удалить ошибочно введенный номер телефона (факса) и начать заполнение заново, воспользуйтесь командой  <strong>Еще</strong> - <strong>Очистить номер телефона</strong>. </li></ul><h3>См. также:</h3> <ul><li><a href="Catalog.ВидыКонтактнойИнформации/Help">Виды контактной информации</a>. diff --git a/SSL/src/DataProcessors/ВводКонтактнойИнформации/Forms/ВводТелефона/Module.bsl b/SSL/src/DataProcessors/ВводКонтактнойИнформации/Forms/ВводТелефона/Module.bsl index d7058ab13..5b5c556a1 100644 --- a/SSL/src/DataProcessors/ВводКонтактнойИнформации/Forms/ВводТелефона/Module.bsl +++ b/SSL/src/DataProcessors/ВводКонтактнойИнформации/Forms/ВводТелефона/Module.bsl @@ -40,7 +40,6 @@ КонецЕсли; ПроверятьКорректность = ВидКонтактнойИнформации.ПроверятьКорректность; - ЗапрещатьВводНекорректного = ВидКонтактнойИнформации.ЗапрещатьВводНекорректного; Заголовок = ?(ПустаяСтрока(Параметры.Заголовок), Строка(ВидКонтактнойИнформации), Параметры.Заголовок); @@ -66,6 +65,7 @@ КонецЕсли; ЗначениеРеквизитовПоКонтактнойИнформации(XDTOКонтактная); + Элементы.Добавочный.Видимость = ВидКонтактнойИнформации.ТелефонCДобавочнымНомером; // Группа команд "все действия" зависит от интерфейса. Если ТекущийВариантИнтерфейсаКлиентскогоПриложения() = ВариантИнтерфейсаКлиентскогоПриложения.Такси Тогда @@ -108,7 +108,7 @@ &НаКлиенте Процедура КодГородаПриИзменении(Элемент) - Если (КодСтраны = "+7" ИЛИ КодСтраны = "8") И Лев(КодГорода, 1) = "9" И СтрДлина(КодГорода) <> 3 Тогда + Если (КодСтраны = "+7" ИЛИ КодСтраны = "8") И СтрНачинаетсяС(КодГорода, "9") И СтрДлина(КодГорода) <> 3 Тогда ОбщегоНазначенияКлиентСервер.СообщитьПользователю(НСтр("ru = 'Кода мобильных телефонов начинающиеся на цифру 9 имеют фиксированную длину в 3 цифры, например - 916.'"),, "КодГорода"); КонецЕсли; @@ -173,13 +173,7 @@ &НаКлиенте Процедура УстановитьПиктограммуКомментария() - - Если ПустаяСтрока(Комментарий) Тогда - Элементы.ТелефонСтраницаКомментарий.Картинка = Новый Картинка; - Иначе - Элементы.ТелефонСтраницаКомментарий.Картинка = БиблиотекаКартинок.Комментарий; - КонецЕсли; - + Элементы.ТелефонСтраницаКомментарий.Картинка = ОбщегоНазначенияКлиентСервер.КартинкаКомментария(Комментарий); КонецПроцедуры &НаКлиенте @@ -198,9 +192,7 @@ КонецЕсли; Если ЕстьОшибкиЗаполнения Тогда СообщитьОбОшибкахЗаполнения(СписокОшибок); - Если ЗапрещатьВводНекорректного Тогда - Возврат; - КонецЕсли; + Возврат; КонецЕсли; Результат = РезультатВыбора(); @@ -295,7 +287,7 @@ // Возвращает XTDO объект типа "Контактная информация" по значению реквизитов. &НаСервере Функция КонтактнаяИнформацияПоЗначениюРеквизитов() - ПространствоИмен = УправлениеКонтактнойИнформациейКлиентСерверПовтИсп.ПространствоИмен(); + ПространствоИмен = УправлениеКонтактнойИнформациейКлиентСервер.ПространствоИмен(); Результат = ФабрикаXDTO.Создать( ФабрикаXDTO.Тип(ПространствоИмен, "КонтактнаяИнформация") ); diff --git a/SSL/src/DataProcessors/ВводКонтактнойИнформации/Forms/ВыборАдресаПоПочтовомуИндексу/Form.form b/SSL/src/DataProcessors/ВводКонтактнойИнформации/Forms/ВыборАдресаПоПочтовомуИндексу/Form.form index de5280967..fd1cb5e8d 100644 --- a/SSL/src/DataProcessors/ВводКонтактнойИнформации/Forms/ВыборАдресаПоПочтовомуИндексу/Form.form +++ b/SSL/src/DataProcessors/ВводКонтактнойИнформации/Forms/ВыборАдресаПоПочтовомуИндексу/Form.form @@ -59,6 +59,7 @@ <dataPath xsi:type="form:DataPath"> <segments>ВариантыАдреса</segments> </dataPath> + <defaultItem>true</defaultItem> <titleLocation>None</titleLocation> <excludedCommands>Change</excludedCommands> <items xsi:type="form:FormGroup"> @@ -192,15 +193,16 @@ <id>10</id> <items xsi:type="form:Button"> <name>ВариантыАдресаВыбрать</name> - <id>39</id> + <id>62</id> <visible>true</visible> <enabled>true</enabled> <userVisible> <common>true</common> </userVisible> + <defaultItem>true</defaultItem> <extendedTooltip> <name>ВариантыАдресаВыбратьРасширеннаяПодсказка</name> - <id>40</id> + <id>63</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -208,7 +210,7 @@ <horizontalAlign>Left</horizontalAlign> </extInfo> </extendedTooltip> - <commandName>Form.Item.ВариантыАдреса.StandardCommand.Choose</commandName> + <commandName>Form.Command.Выбрать</commandName> <representation>Auto</representation> <defaultButton>true</defaultButton> <autoMaxWidth>true</autoMaxWidth> @@ -503,7 +505,7 @@ <horizontalAlign>Left</horizontalAlign> </extInfo> </extendedTooltip> - <commandName>Form.Item.ВариантыАдреса.StandardCommand.Choose</commandName> + <commandName>Form.Command.Выбрать</commandName> <buttonImportance>Normal</buttonImportance> <representation>Auto</representation> <autoMaxWidth>true</autoMaxWidth> @@ -642,6 +644,7 @@ <name>ФормаКоманднаяПанель</name> <id>-1</id> <horizontalAlign>Left</horizontalAlign> + <autoFill>true</autoFill> </autoCommandBar> <handlers> <event>OnOpen</event> @@ -838,7 +841,29 @@ <picture xsi:type="core:PictureRef"> <picture>StdPicture.Refresh</picture> </picture> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> + <selectedRowsUse>Auto</selectedRowsUse> + </formCommands> + <formCommands> + <name>Выбрать</name> + <title> + <key>ru</key> + <value>Выбрать</value> + + 1 + + ru + Выбрать + + + true + + + + Выбрать + + + DontUse Auto diff --git a/SSL/src/DataProcessors/ВводКонтактнойИнформации/Forms/ВыборАдресаПоПочтовомуИндексу/Module.bsl b/SSL/src/DataProcessors/ВводКонтактнойИнформации/Forms/ВыборАдресаПоПочтовомуИндексу/Module.bsl index c32d41d2e..f29bc7946 100644 --- a/SSL/src/DataProcessors/ВводКонтактнойИнформации/Forms/ВыборАдресаПоПочтовомуИндексу/Module.bsl +++ b/SSL/src/DataProcessors/ВводКонтактнойИнформации/Forms/ВыборАдресаПоПочтовомуИндексу/Module.bsl @@ -72,6 +72,17 @@ #КонецОбласти +#Область ОбработчикиКомандФормы + +&НаКлиенте +Процедура Выбрать(Команда) + Если Элементы.ВариантыАдреса.ТекущаяСтрока <> Неопределено Тогда + ПроизвестиВыбор(Элементы.ВариантыАдреса.ТекущаяСтрока); + КонецЕсли; +КонецПроцедуры + +#КонецОбласти + #Область СлужебныеПроцедурыИФункции &НаКлиенте @@ -84,16 +95,12 @@ ИначеЕсли Не Данные.Неактуален Тогда ОповеститьВладельца(Данные); Возврат; - КонецЕсли; Оповещение = Новый ОписаниеОповещения("ПроизвестиВыборЗавершениеВопроса", ЭтотОбъект, Данные); - ПредупреждениеНеактуальности = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Адрес ""%2, %1"" неактуален. - |Продолжить?'"), - СокрЛП(ОбщаяЧастьПредставления), Данные.Представление - ); + ПредупреждениеНеактуальности = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Адрес ""%2, %1"" неактуален. + |Продолжить?'"), СокрЛП(ОбщаяЧастьПредставления), Данные.Представление); ЗаголовокПредупреждения = НСтр("ru = 'Подтверждение'"); @@ -113,7 +120,8 @@ &НаКлиенте Процедура ОповеститьВладельца(Знач Данные, Отказ = Ложь) - Результат = Новый Структура("Индекс, Идентификатор, Представление", Индекс); + ТекущийИндекс = Формат(Индекс, "ЧЦ=6; ЧРГ=; ЧН=; ЧГ=0"); + Результат = Новый Структура("Индекс, Идентификатор, Представление", ТекущийИндекс); Результат.Вставить("КраткоеПредставлениеОшибки", КраткоеПредставлениеОшибки); Результат.Вставить("Отказ", Отказ); @@ -125,3 +133,4 @@ КонецПроцедуры #КонецОбласти + diff --git a/SSL/src/DataProcessors/ВводКонтактнойИнформации/Forms/ВыборАдресаПоУровню/Form.form b/SSL/src/DataProcessors/ВводКонтактнойИнформации/Forms/ВыборАдресаПоУровню/Form.form index dd5b044f0..4cebfd496 100644 --- a/SSL/src/DataProcessors/ВводКонтактнойИнформации/Forms/ВыборАдресаПоУровню/Form.form +++ b/SSL/src/DataProcessors/ВводКонтактнойИнформации/Forms/ВыборАдресаПоУровню/Form.form @@ -826,7 +826,7 @@ StdPicture.Refresh - Auto + DontUse Auto diff --git a/SSL/src/DataProcessors/ВводКонтактнойИнформации/Forms/ВыборАдресаПоУровню/Module.bsl b/SSL/src/DataProcessors/ВводКонтактнойИнформации/Forms/ВыборАдресаПоУровню/Module.bsl index 9da363c77..6a444a047 100644 --- a/SSL/src/DataProcessors/ВводКонтактнойИнформации/Forms/ВыборАдресаПоУровню/Module.bsl +++ b/SSL/src/DataProcessors/ВводКонтактнойИнформации/Forms/ВыборАдресаПоУровню/Module.bsl @@ -40,6 +40,12 @@ ПараметрыПоиска.Свойство("ФорматАдреса", ФорматАдреса); ПараметрыПоиска.Свойство("СкрыватьНеактуальные", СкрыватьНеактуальные); + Если НЕ ЗначениеЗаполнено(Родитель) И Уровень > 1 Тогда + // поиск адреса без родителя + КраткоеПредставлениеОшибки = НСтр("ru = 'Поле не содержит адресных сведений для выбора.'");; + Возврат; + КонецЕсли; + ДанныеКлассификатора = УправлениеКонтактнойИнформациейСлужебный.АдресаДляИнтерактивногоВыбора(Родитель, Уровень, ПараметрыПоиска); Если ДанныеКлассификатора.Отказ Тогда @@ -48,7 +54,7 @@ Возврат; ИначеЕсли ДанныеКлассификатора.Данные.Количество() = 0 Тогда - КраткоеПредставлениеОшибки = НСтр("ru = 'Поле ""'") + Параметры.Представление + НСтр("ru = '"" не содержит адресных сведений для выбора.'");; + КраткоеПредставлениеОшибки = НСтр("ru = 'Поле не содержит адресных сведений для выбора.'");; // Нет данных, функционал выбора не применим. КонецЕсли; @@ -116,11 +122,8 @@ Оповещение = Новый ОписаниеОповещения("ПроизвестиВыборЗавершениеВопроса", ЭтотОбъект, Данные); - ПредупреждениеНеактуальности = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Адрес ""%1"" неактуален. - |Продолжить?'"), - Данные.Представление - ); + ПредупреждениеНеактуальности = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Адрес ""%1"" неактуален. + |Продолжить?'"), Данные.Представление); ЗаголовокПредупреждения = НСтр("ru = 'Подтверждение'"); diff --git a/SSL/src/DataProcessors/ВводКонтактнойИнформации/Forms/ВыборУлицы/Form.form b/SSL/src/DataProcessors/ВводКонтактнойИнформации/Forms/ВыборУлицы/Form.form index 7079817bc..8f82293ff 100644 --- a/SSL/src/DataProcessors/ВводКонтактнойИнформации/Forms/ВыборУлицы/Form.form +++ b/SSL/src/DataProcessors/ВводКонтактнойИнформации/Forms/ВыборУлицы/Form.form @@ -1106,20 +1106,108 @@ MoveUp SortListAsc SortListDesc - - ВариантыДополнительныхТерриторийПредставление - 118 + + ВариантыДополнительныхТерриторийГруппа + 176 + + ВариантыДополнительныхТерриторийНеактуален + 173 + true + true + + true + + + ВариантыДополнительныхТерриторий.Неактуален + + + ВариантыДополнительныхТерриторийНеактуаленРасширеннаяПодсказка + 175 + Label + true + true + + Left + + + + ВариантыДополнительныхТерриторийНеактуаленКонтекстноеМеню + 174 + true + + PictureField + Auto + true + Left + true + + true + true + true + true + + CommonPicture.КонтактнаяИнформацияНеактуально + + + + 1 + + + + + ВариантыДополнительныхТерриторийПредставление + 118 + true + true + + true + + + ВариантыДополнительныхТерриторий.Представление + + + ВариантыДополнительныхТерриторийПредставлениеРасширеннаяПодсказка + 120 + Label + true + true + + Left + + + + ВариантыДополнительныхТерриторийПредставлениеКонтекстноеМеню + 119 + true + + InputField + true + Auto + true + Left + true + + true + true + true + true + true + true + Normal + + true true true - - ВариантыДополнительныхТерриторий.Представление - + + <key>ru</key> + <value>Варианты дополнительных территорий группа</value> + - ВариантыДополнительныхТерриторийПредставлениеРасширеннаяПодсказка - 120 + ВариантыДополнительныхТерриторийГруппаРасширеннаяПодсказка + 177 Label true true @@ -1127,25 +1215,11 @@ Left - - ВариантыДополнительныхТерриторийПредставлениеКонтекстноеМеню - 119 - true - - InputField - true - Auto - true - Left - true - - true - true - true - true - true - true - Normal + ColumnGroup + + InCell + auto + true @@ -1236,6 +1310,10 @@ Selection ВариантыДополнительныхТерриторийВыбор + + OnActivateRow + ВариантыДополнительныхТерриторийПриАктивизацииСтроки + ВариантыДополнительныхТерриторийСтрокаПоиска 103 @@ -1951,7 +2029,7 @@ СледующаяПорция - Auto + DontUse Auto @@ -1973,7 +2051,7 @@ ПредыдущаяПорция - Auto + DontUse Auto @@ -1995,7 +2073,7 @@ ПерваяПорция - Auto + DontUse Auto @@ -2017,7 +2095,7 @@ ПерейтиНаПорцию - Auto + DontUse Auto @@ -2039,7 +2117,7 @@ Выбрать - Auto + DontUse Auto @@ -2061,7 +2139,7 @@ ВыбратьУлицу - Auto + DontUse Auto diff --git a/SSL/src/DataProcessors/ВводКонтактнойИнформации/Forms/ВыборУлицы/Module.bsl b/SSL/src/DataProcessors/ВводКонтактнойИнформации/Forms/ВыборУлицы/Module.bsl index 038babb12..f78b98077 100644 --- a/SSL/src/DataProcessors/ВводКонтактнойИнформации/Forms/ВыборУлицы/Module.bsl +++ b/SSL/src/DataProcessors/ВводКонтактнойИнформации/Forms/ВыборУлицы/Module.bsl @@ -261,20 +261,14 @@ КонецЕсли; КонецПроцедуры -&НаСервереБезКонтекста -Функция ЕстьПодчиненныеЭлементы(Идентификатор) - ПараметрыПоиска = Новый Структура; - ПараметрыПоиска.Свойство("ФорматАдреса", "ФИАС"); - ПараметрыПоиска.Свойство("СкрыватьНеактуальные", Истина); - - ДанныеКлассификатора = УправлениеКонтактнойИнформациейСлужебный.АдресаДляИнтерактивногоВыбора(Идентификатор, 90, ПараметрыПоиска); - Если ДанныеКлассификатора.Данные.Количество() > 0 Тогда - Возврат Истина; +&НаКлиенте +Процедура ВариантыДополнительныхТерриторийПриАктивизацииСтроки(Элемент) + Если Элемент.ТекущиеДанные <> Неопределено И ЕстьПодчиненныеЭлементы(Элемент.ТекущиеДанные.Идентификатор, 91) Тогда + Элементы.ПодчиненныйЭлементДляТерритории.Доступность = Истина; + Иначе + Элементы.ПодчиненныйЭлементДляТерритории.Доступность = Ложь; КонецЕсли; - - Возврат Ложь; - -КонецФункции +КонецПроцедуры #КонецОбласти @@ -394,11 +388,8 @@ Оповещение = Новый ОписаниеОповещения("ПроизвестиВыборЗавершениеВопроса", ЭтотОбъект, Данные); - ПредупреждениеНеактуальности = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Адрес ""%1"" неактуален. - |Продолжить?'"), - Данные.Представление - ); + ПредупреждениеНеактуальности = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Адрес ""%1"" неактуален. + |Продолжить?'"), Данные.Представление); ЗаголовокПредупреждения = НСтр("ru = 'Подтверждение'"); ПоказатьВопрос(Оповещение, ПредупреждениеНеактуальности, РежимДиалогаВопрос.ДаНет, , ,ЗаголовокПредупреждения); @@ -590,17 +581,17 @@ КонецЕсли; КонецЕсли; Иначе - ЧастиУлицы = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(Представление, ",", Истина, Истина); + ЧастиУлицы = СтрРазделить(Представление, ",", Ложь); Если ЧастиУлицы.Количество() = 3 Тогда - Отбор = Новый Структура("Представление", ЧастиУлицы[0]); + Отбор = Новый Структура("Представление", СокрЛП(ЧастиУлицы[0])); Варианты = ВариантыАдреса.НайтиСтроки(Отбор); Если Варианты.Количество() > 0 Тогда Элементы.ВариантыАдреса.ТекущаяСтрока = Варианты[0].ПолучитьИдентификатор(); КонецЕсли; - ДополнительныйЭлемент = ЧастиУлицы[1]; - ПодчиненныйЭлемент = ЧастиУлицы[2]; + ДополнительныйЭлемент = СокрЛП(ЧастиУлицы[1]); + ПодчиненныйЭлемент = СокрЛП(ЧастиУлицы[2]); ИначеЕсли ЧастиУлицы.Количество() = 2 Тогда - Отбор = Новый Структура("Представление", ЧастиУлицы[0]); + Отбор = Новый Структура("Представление", СокрЛП(ЧастиУлицы[0])); Варианты = ВариантыАдреса.НайтиСтроки(Отбор); Если Варианты.Количество() > 0 Тогда Элементы.ВариантыАдреса.ТекущаяСтрока = Варианты[0].ПолучитьИдентификатор(); @@ -621,7 +612,7 @@ КонецЕсли; КонецЕсли; ИначеЕсли ЧастиУлицы.Количество() = 1 Тогда - Отбор = Новый Структура("Представление", ЧастиУлицы[0]); + Отбор = Новый Структура("Представление", СокрЛП(ЧастиУлицы[0])); Варианты = ВариантыАдреса.НайтиСтроки(Отбор); Если Варианты.Количество() > 0 Тогда Элементы.ВариантыАдреса.ТекущаяСтрока = Варианты[0].ПолучитьИдентификатор(); @@ -650,6 +641,19 @@ КонецЕсли; КонецПроцедуры +&НаСервереБезКонтекста +Функция ЕстьПодчиненныеЭлементы(Идентификатор, Уровень = 90) + ПараметрыПоиска = Новый Структура; + ПараметрыПоиска.Свойство("ФорматАдреса", "ФИАС"); + ПараметрыПоиска.Свойство("СкрыватьНеактуальные", Истина); + ДанныеКлассификатора = УправлениеКонтактнойИнформациейСлужебный.АдресаДляИнтерактивногоВыбора(Идентификатор, Уровень, ПараметрыПоиска); + Если ДанныеКлассификатора.Данные.Количество() > 0 Тогда + Возврат Истина; + КонецЕсли; + + Возврат Ложь; + +КонецФункции #КонецОбласти diff --git a/SSL/src/DataProcessors/ВводКонтактнойИнформации/Forms/ЗагрузкаАдресногоКлассификатора/Form.form b/SSL/src/DataProcessors/ВводКонтактнойИнформации/Forms/ЗагрузкаАдресногоКлассификатора/Form.form index eda665050..cb97f086a 100644 --- a/SSL/src/DataProcessors/ВводКонтактнойИнформации/Forms/ЗагрузкаАдресногоКлассификатора/Form.form +++ b/SSL/src/DataProcessors/ВводКонтактнойИнформации/Forms/ЗагрузкаАдресногоКлассификатора/Form.form @@ -196,7 +196,7 @@ Загрузить - Auto + DontUse Auto @@ -218,7 +218,7 @@ Отмена - Auto + DontUse Auto diff --git a/SSL/src/DataProcessors/ВводКонтактнойИнформации/Forms/НаселенныйПунктАдреса/Form.form b/SSL/src/DataProcessors/ВводКонтактнойИнформации/Forms/НаселенныйПунктАдреса/Form.form index 5e8ea82c7..c4262ff66 100644 --- a/SSL/src/DataProcessors/ВводКонтактнойИнформации/Forms/НаселенныйПунктАдреса/Form.form +++ b/SSL/src/DataProcessors/ВводКонтактнойИнформации/Forms/НаселенныйПунктАдреса/Form.form @@ -137,7 +137,6 @@ true true true - UseIfNecessary auto true @@ -312,7 +311,7 @@ КомандаОК - Auto + DontUse Auto diff --git a/SSL/src/DataProcessors/ВводКонтактнойИнформации/Forms/НаселенныйПунктАдреса/Module.bsl b/SSL/src/DataProcessors/ВводКонтактнойИнформации/Forms/НаселенныйПунктАдреса/Module.bsl index 2d9996093..35022c49e 100644 --- a/SSL/src/DataProcessors/ВводКонтактнойИнформации/Forms/НаселенныйПунктАдреса/Module.bsl +++ b/SSL/src/DataProcessors/ВводКонтактнойИнформации/Forms/НаселенныйПунктАдреса/Module.bsl @@ -28,8 +28,8 @@ КонецЕсли; Параметры.Свойство("ФорматАдреса", ФорматАдреса); - Параметры.Свойство("СервисКлассификатораНедоступен", СервисКлассификатораНедоступен); - Параметры.Свойство("СкрыватьНеактуальныеАдреса ", СкрыватьНеактуальныеАдреса); + Параметры.Свойство("СервисКлассификатораНедоступен", СервисКлассификатораНедоступен); + Параметры.Свойство("СкрыватьНеактуальныеАдреса ", СкрыватьНеактуальныеАдреса); Если ПустаяСтрока(ФорматАдреса) Тогда ФорматАдреса = "ФИАС"; @@ -42,7 +42,9 @@ ЧастиАдреса = УправлениеКонтактнойИнформациейСлужебный.СписокРеквизитовНаселенныйПункт( , ФорматАдреса); КонецЕсли; - УправлениеКонтактнойИнформациейСлужебный.ЗаполнитьИдентификаторыНаселенногоПункта(ЧастиАдреса, Параметры.ИдентификаторНаселенногоПункта); + Если СервисКлассификатораНедоступен Тогда + УправлениеКонтактнойИнформациейСлужебный.ЗаполнитьИдентификаторыНаселенногоПункта(ЧастиАдреса, Параметры.ИдентификаторНаселенногоПункта); + КонецЕсли; ПостроитьФормуПоЧастямАдреса(); УстановитьКлючИспользованияФормы(); @@ -93,20 +95,18 @@ Добавлять.Добавить( Новый РеквизитФормы(ПрефиксИмениЧастиАдреса + Имя, ТипСтрока, , Часть.Заголовок)); КонецЦикла; ИзменитьРеквизиты(Добавлять); - РодительЭлементов = Элементы.ГруппаЧастейАдреса; - ЭлементыФормыПоУровням.Очистить(); + Для Каждого КлючЗначение Из ЧастиАдреса Цикл Часть = КлючЗначение.Значение; Имя = КлючЗначение.Ключ; - Если Часть.Уровень < 7 Тогда + Если Часть.Уровень < 7 И НЕ (ФорматАдреса = "КЛАДР" И (Часть.Уровень = 2 ИЛИ Часть.Уровень = 5))Тогда Элемент = Элементы.Добавить(ПрефиксИмениЧастиАдреса + Имя, Тип("ПолеФормы"), РодительЭлементов); Элемент.ПутьКДанным = Элемент.Имя; Элемент.Вид = ВидПоляФормы.ПолеВвода; - Элемент.КнопкаВыбора = Истина; Элемент.ОбновлениеТекстаРедактирования = ОбновлениеТекстаРедактирования.ПриИзмененииЗначения; @@ -114,16 +114,18 @@ Если ПустаяСтрока(Элемент.Подсказка) Тогда Элемент.Подсказка = Часть.Заголовок; КонецЕсли; - + Элемент.УстановитьДействие("ПриИзменении", "Подключаемый_ПолеПриИзменении"); - Элемент.УстановитьДействие("НачалоВыбора", "Подключаемый_ПолеНачалоВыбора"); - Элемент.УстановитьДействие("Очистка", "Подключаемый_Очистка"); - Элемент.УстановитьДействие("ОбработкаВыбора", "Подключаемый_ПолеОбработкаВыбора"); - Элемент.УстановитьДействие("Автоподбор", "Подключаемый_ПолеАвтоподбор"); Элемент.УстановитьДействие("ОкончаниеВводаТекста", "Подключаемый_ПолеОкончаниеВводаТекста"); + Если НЕ СервисКлассификатораНедоступен Тогда + Элемент.КнопкаВыбора = Истина; + Элемент.УстановитьДействие("НачалоВыбора", "Подключаемый_ПолеНачалоВыбора"); + Элемент.УстановитьДействие("Очистка", "Подключаемый_Очистка"); + Элемент.УстановитьДействие("ОбработкаВыбора", "Подключаемый_ПолеОбработкаВыбора"); + Элемент.УстановитьДействие("Автоподбор", "Подключаемый_ПолеАвтоподбор"); + КонецЕсли; ЭтотОбъект[Элемент.Имя] = Часть.Представление; - ЭлементыФормыПоУровням.Добавить(КлючЗначение.Значение.Уровень, Элемент.Имя); КонецЕсли; @@ -153,8 +155,7 @@ Функция УстановитьЗначениеЧастиАдреса(Элемент, ВыбранноеЗначение) Результат = УправлениеКонтактнойИнформациейКлиентСервер.УстановитьЗначениеЧастиАдреса( - ИмяЧастиАдресаЭлемента(Элемент), ЧастиАдреса, ВыбранноеЗначение - ); + ИмяЧастиАдресаЭлемента(Элемент), ЧастиАдреса, ВыбранноеЗначение); ЭтотОбъект[Элемент.Имя] = Результат; Возврат Результат; @@ -163,9 +164,6 @@ &НаКлиенте Процедура Подключаемый_ПолеПриИзменении(Элемент) АдресИзменен = Истина; - Если ПустаяСтрока(ЭтотОбъект[Элемент.Имя]) Тогда - ОчиститьДочерниеПоляАдреса(Элемент.Имя); - КонецЕсли; ДоступностьКнопкиОК = Ложь; Для каждого Элемент Из ЭлементыФормыПоУровням Цикл @@ -203,36 +201,6 @@ ОткрытьФорму("Обработка.ВводКонтактнойИнформации.Форма.ВыборАдресаПоУровню", ПараметрыОткрытия, Элемент); КонецПроцедуры -&НаСервере -Функция ИдентификаторРодителяЧастиАдресаЭлемента(ЧастьАдреса, ЧастиАдреса) - - Идентификатор = Неопределено; - ЕстьЧастьАдресаБезИдентификатора = Ложь; - ЧастиАдресаВышеПоУровню = Новый Структура; - УровеньАдреса = 0; - Для Каждого КлючЗначение Из ЧастиАдреса Цикл - Часть = КлючЗначение.Значение; - Если Часть.Уровень < ЧастьАдреса.Уровень И НЕ ПустаяСтрока(Часть.Представление) Тогда - ЧастиАдресаВышеПоУровню.Вставить(КлючЗначение.Ключ, Часть); - Если ЗначениеЗаполнено(КлючЗначение.Значение.Идентификатор) Тогда - Если УровеньАдреса < КлючЗначение.Значение.Уровень Тогда - Идентификатор = КлючЗначение.Значение.Идентификатор; - УровеньАдреса = КлючЗначение.Значение.Уровень; - КонецЕсли; - Иначе - ЕстьЧастьАдресаБезИдентификатора = Истина; - КонецЕсли; - КонецЕсли; - КонецЦикла; - - Если ЕстьЧастьАдресаБезИдентификатора Тогда - УправлениеКонтактнойИнформациейСлужебный.ЗаполнитьИдентификаторыНаселенногоПункта(ЧастиАдресаВышеПоУровню, Идентификатор); - КонецЕсли; - - Возврат Идентификатор; - -КонецФункции - &НаКлиенте Процедура Подключаемый_Очистка(Элемент, СтандартнаяОбработка) @@ -254,6 +222,7 @@ Если НЕ ПустаяСтрока(ВыбранноеЗначение.КраткоеПредставлениеОшибки) Тогда ПоказатьПредупреждение(, ВыбранноеЗначение.КраткоеПредставлениеОшибки); КонецЕсли; + Возврат; Иначе НеЗагружатьАдресныйКлассификатор = ПараметрыПриложения.Получить("АдресныйКлассификатор.НеЗагружатьКлассификатор"); Если НеЗагружатьАдресныйКлассификатор = Неопределено ИЛИ НеЗагружатьАдресныйКлассификатор = Ложь Тогда @@ -261,11 +230,8 @@ Если МожноЗагружатьКлассификатор И РегионНеЗагружен Тогда // Предлагаем загрузить классификатор. УправлениеКонтактнойИнформациейКлиент.ПредложениеЗагрузкиКлассификатора( - СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru='Данные для ""%1"" не загружены.'"), ВыбранноеЗначение.Представление - ), - ВыбранноеЗначение.Представление - ); + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru='Данные для ""%1"" не загружены.'"), ВыбранноеЗначение.Представление), + ВыбранноеЗначение.Представление); КонецЕсли; КонецЕсли; КонецЕсли; @@ -431,4 +397,46 @@ КонецПроцедуры +&НаСервере +Функция ИдентификаторРодителяЧастиАдресаЭлемента(ЧастьАдреса, ЧастиАдреса) + + Идентификатор = Неопределено; + ЕстьЧастьАдресаБезИдентификатора = ЕстьЛиИдентификаторРодителяЧастиАдресаЭлемента(ЧастиАдреса, ЧастьАдреса, Идентификатор); + + Если ЕстьЧастьАдресаБезИдентификатора Тогда + УправлениеКонтактнойИнформациейСлужебный.ЗаполнитьИдентификаторыНаселенногоПункта(ЧастиАдреса, Идентификатор); + ЕстьЧастьАдресаБезИдентификатора = ЕстьЛиИдентификаторРодителяЧастиАдресаЭлемента(ЧастиАдреса, ЧастьАдреса, Идентификатор); + Если ЕстьЧастьАдресаБезИдентификатора Тогда + Возврат Неопределено; + КонецЕсли; + КонецЕсли; + + Возврат Идентификатор; + +КонецФункции + +&НаСервере +Функция ЕстьЛиИдентификаторРодителяЧастиАдресаЭлемента(ЧастиАдреса, ЧастьАдреса, Идентификатор) + + ЕстьЧастьАдресаБезИдентификатора = Ложь; + ЧастиАдресаВышеПоУровню = Новый Структура; + УровеньАдреса = 0; + Для Каждого КлючЗначение Из ЧастиАдреса Цикл + Часть = КлючЗначение.Значение; + Если Часть.Уровень < ЧастьАдреса.Уровень И НЕ ПустаяСтрока(Часть.Представление) Тогда + ЧастиАдресаВышеПоУровню.Вставить(КлючЗначение.Ключ, Часть); + Если ЗначениеЗаполнено(КлючЗначение.Значение.Идентификатор) Тогда + Если УровеньАдреса < КлючЗначение.Значение.Уровень Тогда + Идентификатор = КлючЗначение.Значение.Идентификатор; + УровеньАдреса = КлючЗначение.Значение.Уровень; + КонецЕсли; + Иначе + ЕстьЧастьАдресаБезИдентификатора = Истина; + КонецЕсли; + КонецЕсли; + КонецЦикла; + + Возврат ЕстьЧастьАдресаБезИдентификатора; +КонецФункции + #КонецОбласти diff --git a/SSL/src/DataProcessors/ВводКонтактнойИнформации/ManagerModule.bsl b/SSL/src/DataProcessors/ВводКонтактнойИнформации/ManagerModule.bsl new file mode 100644 index 000000000..e78edc609 --- /dev/null +++ b/SSL/src/DataProcessors/ВводКонтактнойИнформации/ManagerModule.bsl @@ -0,0 +1,75 @@ +#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда + +#КонецЕсли + +#Область ОбработчикиПодписокНаСобытия + +Процедура ОбработкаПолученияФормы(ВидФормы, Параметры, ВыбраннаяФорма, ДополнительнаяИнформация, СтандартнаяОбработка) + + Если Параметры <> Неопределено И Параметры.Свойство("ОткрытаПоСценарию") Тогда + СтандартнаяОбработка = Ложь; + ВидИнформации = Параметры.ВидКонтактнойИнформации; + ВыбраннаяФорма = ИмяФормыВводаКонтактнойИнформации(ВидИнформации); + + Если ВыбраннаяФорма = Неопределено Тогда + ВызватьИсключение НСтр("ru = 'Не обрабатываемый тип адреса: """ + ВидИнформации + """'"); + КонецЕсли; + + КонецЕсли; + +КонецПроцедуры + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +// Возвращает имя формы для редактирования типа контактной информации. +// +// Параметры: +// ВидИнформации - ПеречислениеСсылка.ТипыКонтактнойИнформации, СправочникСсылка.ВидыКонтактнойИнформации - +// запрашиваемый тип. +// +// Возвращаемое значение: +// Строка - полное имя формы. +// +Функция ИмяФормыВводаКонтактнойИнформации(Знач ВидИнформации) Экспорт + + ТипИнформации = ТипВидаКонтактнойИнформации(ВидИнформации); + + ВсеТипы = "Перечисление.ТипыКонтактнойИнформации."; + Если ТипИнформации = ПредопределенноеЗначение(ВсеТипы + "Адрес") Тогда + Возврат "Обработка.ВводКонтактнойИнформации.Форма.ВводАдреса"; + + ИначеЕсли ТипИнформации = ПредопределенноеЗначение(ВсеТипы + "Телефон") Тогда + Возврат "Обработка.ВводКонтактнойИнформации.Форма.ВводТелефона"; + + ИначеЕсли ТипИнформации = ПредопределенноеЗначение(ВсеТипы + "Факс") Тогда + Возврат "Обработка.ВводКонтактнойИнформации.Форма.ВводТелефона"; + + КонецЕсли; + + Возврат Неопределено; +КонецФункции + + +Функция ТипВидаКонтактнойИнформации(Знач ВидИнформации) Экспорт + Результат = Неопределено; + + Тип = ТипЗнч(ВидИнформации); + Если Тип = Тип("ПеречислениеСсылка.ТипыКонтактнойИнформации") Тогда + Результат = ВидИнформации; + ИначеЕсли Тип = Тип("СправочникСсылка.ВидыКонтактнойИнформации") Тогда + Результат = ВидИнформации.Тип; + ИначеЕсли ВидИнформации <> Неопределено Тогда + Данные = Новый Структура("Тип"); + ЗаполнитьЗначенияСвойств(Данные, ВидИнформации); + Результат = Данные.Тип; + КонецЕсли; + + Возврат Результат; +КонецФункции + +#КонецОбласти + + + diff --git a/SSL/src/DataProcessors/ВыполнениеОбменаДанными/Forms/Форма/Form.form b/SSL/src/DataProcessors/ВыполнениеОбменаДанными/Forms/Форма/Form.form index fbb56f86e..4e9c29f2f 100644 --- a/SSL/src/DataProcessors/ВыполнениеОбменаДанными/Forms/Форма/Form.form +++ b/SSL/src/DataProcessors/ВыполнениеОбменаДанными/Forms/Форма/Form.form @@ -629,6 +629,298 @@ auto + + ОжиданиеСинхронизацииДанныхПрогрессБарЗагрузка + 170 + + СтатусЗагрузкиДанных1 + 172 + + <key>ru</key> + <value>Шаг 1 из 2. Загрузка данных</value> + + true + true + + true + + + СтатусЗагрузкиДанных1РасширеннаяПодсказка + 174 + Label + true + true + + Left + + + + СтатусЗагрузкиДанных1КонтекстноеМеню + 173 + true + + Label + true + true + + Left + Center + + + + ПроцентВыполнения + 175 + true + true + + true + + + ПроцентВыполнения + + None + + ПроцентВыполненияРасширеннаяПодсказка + 177 + Label + true + true + + Left + + + + ПроцентВыполненияКонтекстноеМеню + 176 + true + + ProgressBarField + Enter + true + Left + true + + 32 + true + 1 + true + true + 100 + true + + + + ДопИнформацияВыполнениеЗагрузка + 178 + true + true + + true + + + ДопИнформацияВыполнение + + None + + ДопИнформацияВыполнениеЗагрузкаРасширеннаяПодсказка + 180 + Label + true + true + + Left + + + + ДопИнформацияВыполнениеЗагрузкаКонтекстноеМеню + 179 + true + + LabelField + Enter + true + Left + true + + true + true + + + true + true + + true + + + <key>ru</key> + <value>Ожидание синхронизации данных</value> + + + ru + Ожидание синхронизации данных + + + ОжиданиеСинхронизацииДанныхПрогрессБарЗагрузкаРасширеннаяПодсказка + 171 + Label + true + true + + Left + + + Page + + Vertical + auto + + + + ОжиданиеСинхронизацииДанныхПрогрессБарВыгрузка + 181 + + СтатусВыгрузкиДанных + 183 + + <key>ru</key> + <value>Шаг 2 из 2. Выгрузка данных</value> + + true + true + + true + + + СтатусВыгрузкиДанныхРасширеннаяПодсказка + 185 + Label + true + true + + Left + + + + СтатусВыгрузкиДанныхКонтекстноеМеню + 184 + true + + Label + true + true + + Left + Center + + + + ПроцентВыполненияВыгрузки + 186 + true + true + + true + + + ПроцентВыполнения + + None + + ПроцентВыполненияВыгрузкиРасширеннаяПодсказка + 188 + Label + true + true + + Left + + + + ПроцентВыполненияВыгрузкиКонтекстноеМеню + 187 + true + + ProgressBarField + Enter + true + Left + true + + 32 + true + 1 + true + true + 100 + true + + + + ДопИнформацияВыполнениеВыгрузка + 189 + true + true + + true + + + ДопИнформацияВыполнение + + None + + ДопИнформацияВыполнениеВыгрузкаРасширеннаяПодсказка + 191 + Label + true + true + + Left + + + + ДопИнформацияВыполнениеВыгрузкаКонтекстноеМеню + 190 + true + + LabelField + Enter + true + Left + true + + true + true + + + true + true + + true + + + <key>ru</key> + <value>Ожидание синхронизации данных</value> + + + ru + Ожидание синхронизации данных + + + ОжиданиеСинхронизацииДанныхПрогрессБарВыгрузкаРасширеннаяПодсказка + 182 + Label + true + true + + Left + + + Page + + Vertical + auto + + ЗавершениеОбмена 12 @@ -1904,7 +2196,6 @@ true Vertical true - UseIfNecessary auto true @@ -2479,6 +2770,95 @@ true + + ПроцентВыполнения + + <key>ru</key> + <value>Процент выполнения</value> + + 28 + + Number + + 3 + true + + + + true + + + true + + + + ФоновоеЗаданиеАдресХранилища + + <key>ru</key> + <value>Фоновое задание адрес хранилища</value> + + 29 + + String + + + + true + + + true + + + + ФоновоеЗаданиеИдентификатор + + <key>ru</key> + <value>Фоновое задание идентификатор</value> + + 30 + + + true + + + true + + + + ДопИнформацияВыполнение + + <key>ru</key> + <value>Доп информация выполнение</value> + + 31 + + String + + 150 + + + + true + + + true + + + + ПараметрыПовторногоОткрытияФормы + + <key>ru</key> + <value>Параметры повторного открытия формы</value> + + 32 + + + true + + + true + + ПерейтиВЖурналРегистрации @@ -2498,7 +2878,7 @@ <name>ПерейтиВЖурналРегистрации</name> </handler> </action> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <formCommands> @@ -2520,7 +2900,7 @@ <name>УстановитьОбновление</name> </handler> </action> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <formCommands> @@ -2542,7 +2922,7 @@ <name>ЗабылиПароль</name> </handler> </action> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <formCommands> @@ -2564,7 +2944,7 @@ <name>ВыполнитьОбмен</name> </handler> </action> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <formCommands> @@ -2586,7 +2966,7 @@ <name>ПродолжитьСинхронизацию</name> </handler> </action> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <parameters> diff --git a/SSL/src/DataProcessors/ВыполнениеОбменаДанными/Forms/Форма/Module.bsl b/SSL/src/DataProcessors/ВыполнениеОбменаДанными/Forms/Форма/Module.bsl index 84a37061a..2ea1e0fc6 100644 --- a/SSL/src/DataProcessors/ВыполнениеОбменаДанными/Forms/Форма/Module.bsl +++ b/SSL/src/DataProcessors/ВыполнениеОбменаДанными/Forms/Форма/Module.bsl @@ -144,8 +144,23 @@ &НаКлиенте Процедура ПриЗакрытии() - - СохранитьФлагВопросаОДолгойСинхронизации(); + Если ДлительнаяОперация Тогда + ЗавершитьВыполнениеДлительнойОперации(ФоновоеЗаданиеИдентификатор); + КонецЕсли; + Если ЗначениеЗаполнено(ПараметрыПовторногоОткрытияФормы) + И ПараметрыПовторногоОткрытияФормы.Свойство("НоваяНастройкаСинхронизацииДанных") Тогда + НоваяНастройкаСинхронизацииДанных = ПараметрыПовторногоОткрытияФормы.НоваяНастройкаСинхронизацииДанных; + ПараметрыФормы = Новый Структура; + ПараметрыФормы.Вставить("УзелИнформационнойБазы", НоваяНастройкаСинхронизацииДанных); + ПараметрыФормы.Вставить("АдресДляВосстановленияПароляУчетнойЗаписи", АдресДляВосстановленияПароляУчетнойЗаписи); + + ПараметрыОткрытия = Новый Структура; + ПараметрыОткрытия.Вставить("РежимОткрытияОкна", РежимОткрытияОкнаФормы.БлокироватьОкноВладельца); + ОбменДаннымиКлиент.ОткрытьФормуПослеЗакрытияТекущей(ЭтотОбъект, + "Обработка.ВыполнениеОбменаДанными.Форма.Форма", ПараметрыФормы, ПараметрыОткрытия); + Иначе + СохранитьФлагВопросаОДолгойСинхронизации(); + КонецЕсли; КонецПроцедуры @@ -290,6 +305,37 @@ КонецЕсли; + Иначе + + СтрокиПерехода = ТаблицаПереходов.НайтиСтроки(Новый Структура("ПорядковыйНомерПерехода", ПорядковыйНомерПерехода + 1)); + + Если СтрокиПерехода.Количество() > 0 Тогда + + СтрокаПерехода = СтрокиПерехода[0]; + + // Обработчик ПриПереходеНазад. + Если Не ПустаяСтрока(СтрокаПерехода.ИмяОбработчикаПриПереходеНазад) + И Не СтрокаПерехода.ДлительнаяОперация Тогда + + ИмяПроцедуры = "Подключаемый_[ИмяОбработчика](Отказ)"; + ИмяПроцедуры = СтрЗаменить(ИмяПроцедуры, "[ИмяОбработчика]", СтрокаПерехода.ИмяОбработчикаПриПереходеНазад); + + Отказ = Ложь; + + А = Вычислить(ИмяПроцедуры); + + Если Отказ Тогда + + УстановитьПорядковыйНомерПерехода(ПорядковыйНомерПерехода + 1); + + Возврат; + + КонецЕсли; + + КонецЕсли; + + КонецЕсли; + КонецЕсли; СтрокиПереходаТекущие = ТаблицаПереходов.НайтиСтроки(Новый Структура("ПорядковыйНомерПерехода", ПорядковыйНомерПерехода)); @@ -408,6 +454,7 @@ // номеру перехода. // ИмяОбработчикаПриОткрытии (необязательный) - Строка. Имя функции-обработчика события открытия текущей страницы // помощника. + // ДлительнаяОперация (необязательный) - Булево. Признак отображения страницы длительной операции. // Истина - отображается страница длительной операции; Ложь - отображается обычная страница. Значение по умолчанию - // Ложь. @@ -484,7 +531,7 @@ КонецЕсли; ИначеЕсли ТипЗнч(Элемент) = Тип("КнопкаФормы") - И Найти(Элемент.ИмяКоманды, ИмяКоманды) > 0 Тогда + И СтрНайти(Элемент.ИмяКоманды, ИмяКоманды) > 0 Тогда Возврат Элемент; @@ -575,7 +622,7 @@ КонецЕсли; КонецПроцедуры - + &НаСервереБезКонтекста Функция СохранитьФлагВопросаОДолгойСинхронизацииСервер(Знач Флаг, Настройки = Неопределено) @@ -608,6 +655,10 @@ КонецПроцедуры +&НаСервереБезКонтекста +Процедура ЗавершитьВыполнениеДлительнойОперации(ИдентификаторЗадания) + ДлительныеОперации.ОтменитьВыполнениеЗадания(ИдентификаторЗадания); +КонецПроцедуры //////////////////////////////////////////////////////////////////////////////// // РАЗДЕЛ ОБРАБОТЧИКОВ СОБЫТИЙ ПЕРЕХОДОВ @@ -615,64 +666,191 @@ &НаКлиенте Функция Подключаемый_ОбычнаяЗагрузкаДанных_ОбработкаДлительнойОперации(Отказ, ПерейтиДалее) - - ОбычнаяЗагрузкаДанных_ОбработкаДлительнойОперации(Отказ, УзелИнформационнойБазы, - ВидТранспортаСообщений, ОшибкаРасхожденияВерсийПриПолученииДанных, ПроверятьРасхождениеВерсий); - - Если ОшибкаРасхожденияВерсийПриПолученииДанных.ЕстьОшибка Тогда - - Отказ = Истина; - - Иначе - - ЕстьОшибки = ЕстьОшибки ИЛИ Отказ; - Отказ = Ложь; - - КонецЕсли; - + ПроцентВыполнения = 0; + ДопИнформацияВыполнение = ""; + ПерейтиДалее = Ложь; + ФоновоеЗаданиеЗапуститьНаКлиенте(1, Отказ); КонецФункции -&НаСервереБезКонтекста -Процедура ОбычнаяЗагрузкаДанных_ОбработкаДлительнойОперации(Отказ, Знач УзелИнформационнойБазы, - Знач ВидТранспортаСообщений, ОшибкаРасхожденияВерсийПриПолученииДанных, ПроверятьРасхождениеВерсий) - - ОбменДаннымиСервер.ИнициализироватьПараметрыПроверкиРасхожденияВерсий(ПроверятьРасхождениеВерсий); - - // Запускаем выполнение обмена. - ОбменДаннымиСервер.ВыполнитьОбменДаннымиДляУзлаИнформационнойБазы( - Отказ, - УзелИнформационнойБазы, - Истина, - Ложь, - ВидТранспортаСообщений); - - ОшибкаРасхожденияВерсийПриПолученииДанных = ОбменДаннымиСервер.ОшибкаРасхожденияВерсийПриПолученииДанных(); - -КонецПроцедуры - &НаКлиенте Функция Подключаемый_ОбычнаяВыгрузкаДанных_ОбработкаДлительнойОперации(Отказ, ПерейтиДалее) - - ОбычнаяВыгрузкаДанных_ОбработкаДлительнойОперации(Отказ, УзелИнформационнойБазы, ВидТранспортаСообщений); - - ЕстьОшибки = ЕстьОшибки ИЛИ Отказ; - Отказ = Ложь; - + ПроцентВыполнения = 0; + ДопИнформацияВыполнение = ""; + ПерейтиДалее = Ложь; + ФоновоеЗаданиеЗапуститьНаКлиенте(2, Отказ); КонецФункции -&НаСервереБезКонтекста -Процедура ОбычнаяВыгрузкаДанных_ОбработкаДлительнойОперации(Отказ, Знач УзелИнформационнойБазы, Знач ВидТранспортаСообщений) - - // Запускаем выполнение обмена. - ОбменДаннымиСервер.ВыполнитьОбменДаннымиДляУзлаИнформационнойБазы( - Отказ, - УзелИнформационнойБазы, - Ложь, - Истина, - ВидТранспортаСообщений); - + +&НаКлиенте +Процедура ФоновоеЗаданиеПроверитьНаКлиенте() + Результат = ФоновоеЗаданиеПолучитьРезультат(); + Если Результат.ФоновоеЗаданиеВыполнено Тогда + // Выполнен переход на новый обмен. Необходимо закрыть форму и открыть ее заново с другими параметрами. + Если Результат.Свойство("ЗакрытьФормуБезусловно") И Результат.ЗакрытьФормуБезусловно Тогда + ПараметрыПовторногоОткрытияФормы = Результат.ПараметрыПовторногоОткрытияФормы; + ЭтаФорма.Закрыть(); + КонецЕсли; + ПроцентВыполнения = 100; + ДопИнформацияВыполнение = ""; + Если ОшибкаРасхожденияВерсийПриПолученииДанных <> Неопределено + И ОшибкаРасхожденияВерсийПриПолученииДанных.ЕстьОшибка = Истина Тогда + Отказ = Истина; + Иначе + ЕстьОшибки = ЕстьОшибки ИЛИ Результат.Отказ; + Отказ = Ложь; + КонецЕсли; + ДлительнаяОперация = Ложь; + // Переход дальше с задержкой на 1 секунду. + ПодключитьОбработчикОжидания("ЗапуститьПереходДалее", 1, Истина); + + Иначе + ПодключитьОбработчикОжидания("ФоновоеЗаданиеПроверитьНаКлиенте", 2, Истина); + КонецЕсли; КонецПроцедуры +&НаКлиенте +Процедура ЗапуститьПереходДалее() + ПроцентВыполнения = 0; + ПерейтиДалее = Истина; + ВыполнитьПереходДалее(); +КонецПроцедуры + +&НаКлиенте +Процедура ФоновоеЗаданиеЗапуститьНаКлиенте(Действие, Отказ) + ПараметрыЗадания = Новый Структура; + ПараметрыЗадания.Вставить("Отказ", Отказ); + ПараметрыЗадания.Вставить("УзелИнформационнойБазы", УзелИнформационнойБазы); + Если Действие = 1 Тогда + // Загрузка. + ПараметрыЗадания.Вставить("ВыполнятьЗагрузку", Истина); + ПараметрыЗадания.Вставить("ВыполнятьВыгрузку", Ложь); + ИначеЕсли Действие = 2 Тогда + // Выгрузка. + ПараметрыЗадания.Вставить("ВыполнятьЗагрузку", Ложь); + ПараметрыЗадания.Вставить("ВыполнятьВыгрузку", Истина); + КонецЕсли; + ПараметрыЗадания.Вставить("ВидТранспортаСообщенийОбмена", ВидТранспортаСообщений); + + Результат = ФоновоеЗаданиеЗапустить(ПараметрыЗадания, ОшибкаРасхожденияВерсийПриПолученииДанных, ПроверятьРасхождениеВерсий); + Если Результат.ФоновоеЗаданиеЗапущено Тогда + ПодключитьОбработчикОжидания("ФоновоеЗаданиеПроверитьНаКлиенте", 2, Истина); + ДлительнаяОперация = Истина; + Иначе + // Переход далее с задержкой в 1 сек. + ПроцентВыполнения = 100; + ДопИнформацияВыполнение = ""; + ПодключитьОбработчикОжидания("ЗапуститьПереходДалее", 1, Истина); + КонецЕсли; +КонецПроцедуры + +&НаСервере +Функция ФоновоеЗаданиеЗапустить(Знач ПараметрыЗадания, ОшибкаРасхожденияВерсийПриПолученииДанных, ПроверятьРасхождениеВерсий) + Если ПараметрыЗадания.ВыполнятьЗагрузку Тогда + ОбменДаннымиСервер.ИнициализироватьПараметрыПроверкиРасхожденияВерсий(ПроверятьРасхождениеВерсий); + НаименованиеЗадания = НСтр("ru = 'Загрузка данных'"); + Иначе + НаименованиеЗадания = НСтр("ru = 'Выгрузка данных'"); + КонецЕсли; + + Результат = Новый Структура; + Результат.Вставить("ФоновоеЗаданиеЗапущено", Ложь); + Результат.Вставить("Отказ", Ложь); + // Запуск фонового задания + + РезультатФоновогоЗадания = ДлительныеОперации.ЗапуститьВыполнениеВФоне( + УникальныйИдентификатор, + "Обработки.ВыполнениеОбменаДанными.ВыполнитьЗапускОбменаДанными", + ПараметрыЗадания, + НаименованиеЗадания); + + ФоновоеЗаданиеИдентификатор = РезультатФоновогоЗадания.ИдентификаторЗадания; + ФоновоеЗаданиеАдресХранилища = РезультатФоновогоЗадания.АдресХранилища; + + Если РезультатФоновогоЗадания.ЗаданиеВыполнено Тогда + ФоновоеЗаданиеЗагрузитьРезультат(Результат); + Результат.ФоновоеЗаданиеЗапущено = Ложь; + // Выполнен переход на новый обмен. Необходимо закрыть форму и открыть ее заново с другими параметрами. + Если Результат.Свойство("ЗакрытьФормуБезусловно") И Результат.ЗакрытьФормуБезусловно Тогда + ПараметрыПовторногоОткрытияФормы = Результат.ПараметрыПовторногоОткрытияФормы; + КонецЕсли; + Если Результат.Отказ Тогда + ЕстьОшибки = Истина; + КонецЕсли; + Иначе + ФоновоеЗаданиеПрочитатьПромежуточныйРезультат(); + Результат.ФоновоеЗаданиеЗапущено = Истина; + КонецЕсли; + + Возврат Результат; +КонецФункции + +&НаСервере +Процедура ФоновоеЗаданиеПрочитатьПромежуточныйРезультат() + Прогресс = ДлительныеОперации.ПрочитатьПрогресс(ФоновоеЗаданиеИдентификатор); + Если Прогресс <> Неопределено Тогда + ПроцентВыполнения = Прогресс.Процент; + ДопИнформацияВыполнение = Прогресс.Текст; + КонецЕсли; +КонецПроцедуры + +&НаСервере +Процедура ФоновоеЗаданиеЗагрузитьРезультат(Результат) + РезультатВыполненияВФоне = ПолучитьИзВременногоХранилища(ФоновоеЗаданиеАдресХранилища); + Если РезультатВыполненияВФоне = Неопределено Тогда + Возврат; + КонецЕсли; + Если РезультатВыполненияВФоне.ВыполнятьЗагрузку Тогда + ОшибкаРасхожденияВерсийПриПолученииДанных = ОбменДаннымиСервер.ОшибкаРасхожденияВерсийПриПолученииДанных(); + МассивСообщений = ПолучитьСообщенияПользователю(Истина); + Если МассивСообщений = Неопределено Тогда + Возврат; + КонецЕсли; + Количество = МассивСообщений.Количество(); + Если Количество = 0 Тогда + Возврат; + КонецЕсли; + + Сообщение = МассивСообщений[Количество-1]; + ТекстСообщения = Сообщение.Текст; + // При необходимости из сообщения удаляется идентификатор подсистемы. + Если СтрНачинаетсяС(ТекстСообщения, "{ВыполненПереходНаНовыйОбмен}") Тогда + ДанныеСообщения = ОбщегоНазначения.ЗначениеИзСтрокиXML(ТекстСообщения); + Если ДанныеСообщения <> Неопределено + И ТипЗнч(ДанныеСообщения) = Тип("Структура") Тогда + + ИмяПланаОбмена = ДанныеСообщения.ИмяПланаОбменаДляПереходаНаНовыйОбмен; + КодУзлаПланаОбмена = ДанныеСообщения.Код; + НоваяНастройкаСинхронизацииДанных = ПланыОбмена[ИмяПланаОбмена].НайтиПоКоду(КодУзлаПланаОбмена); + + Результат.Вставить("ПараметрыПовторногоОткрытияФормы", + Новый Структура("НоваяНастройкаСинхронизацииДанных", НоваяНастройкаСинхронизацииДанных)); + Результат.ЗакрытьФормуБезусловно = Истина; + КонецЕсли; + КонецЕсли; + КонецЕсли; + Результат.Отказ = РезультатВыполненияВФоне.Отказ; + УдалитьИзВременногоХранилища(ФоновоеЗаданиеАдресХранилища); + + ФоновоеЗаданиеАдресХранилища = Неопределено; + ФоновоеЗаданиеИдентификатор = Неопределено; +КонецПроцедуры + +Функция ФоновоеЗаданиеПолучитьРезультат() + Результат = Новый Структура; + Результат.Вставить("ФоновоеЗаданиеВыполнено", Ложь); + Результат.Вставить("Отказ", Ложь); + Состояние = ОбменДаннымиВызовСервера.СостояниеЗадания(ФоновоеЗаданиеИдентификатор); + + Если Состояние = "Активно" Тогда + ФоновоеЗаданиеПрочитатьПромежуточныйРезультат(); + ИначеЕсли Состояние = "Завершено" Тогда + Результат.ФоновоеЗаданиеВыполнено = Истина; + ФоновоеЗаданиеЗагрузитьРезультат(Результат); + КонецЕсли; + + Возврат Результат; +КонецФункции + // Обмен через Веб-сервис &НаКлиенте @@ -734,8 +912,7 @@ Если Не СинхронизацияДанныхОтключена Тогда ПараметрыАутентификации = ?(ИспользоватьСохраненныеПараметрыАутентификации, Неопределено, - Новый Структура("ИспользоватьТекущегоПользователя", ИспользоватьТекущегоПользователяДляАутентификации) - ); + Новый Структура("ИспользоватьТекущегоПользователя", ИспользоватьТекущегоПользователяДляАутентификации)); ЗагрузкаДанных_ОбработкаДлительнойОперации( Отказ, @@ -768,17 +945,24 @@ ОбменДаннымиСервер.ИнициализироватьПараметрыПроверкиРасхожденияВерсий(ПроверятьРасхождениеВерсий); // Запускаем выполнение обмена. - ОбменДаннымиСервер.ВыполнитьОбменДаннымиДляУзлаИнформационнойБазы( - Отказ, - УзелИнформационнойБазы, - Истина, - Ложь, - Перечисления.ВидыТранспортаСообщенийОбмена.WS, - ДлительнаяОперация, - ИдентификаторДлительнойОперации, - ИдентификаторФайлаСообщенияВСервисе, - Истина, - ПараметрыАутентификации); + + ПараметрыОбмена = ОбменДаннымиСервер.ПараметрыОбмена(); + ПараметрыОбмена.ВидТранспортаСообщенийОбмена = Перечисления.ВидыТранспортаСообщенийОбмена.WS; + ПараметрыОбмена.ВыполнятьЗагрузку = Истина; + ПараметрыОбмена.ВыполнятьВыгрузку = Ложь; + + ПараметрыОбмена.ДлительнаяОперацияРазрешена = Истина; + ПараметрыОбмена.ДлительнаяОперация = ДлительнаяОперация; + ПараметрыОбмена.ИдентификаторОперации = ИдентификаторДлительнойОперации; + ПараметрыОбмена.ИдентификаторФайла = ИдентификаторФайлаСообщенияВСервисе; + ПараметрыОбмена.ПараметрыАутентификации = ПараметрыАутентификации; + + ОбменДаннымиСервер.ВыполнитьОбменДаннымиДляУзлаИнформационнойБазы(УзелИнформационнойБазы, ПараметрыОбмена, Отказ); + + ДлительнаяОперация = ПараметрыОбмена.ДлительнаяОперация; + ИдентификаторДлительнойОперации = ПараметрыОбмена.ИдентификаторОперации; + ИдентификаторФайлаСообщенияВСервисе = ПараметрыОбмена.ИдентификаторФайла; + ПараметрыАутентификации = ПараметрыОбмена.ПараметрыАутентификации; ОшибкаРасхожденияВерсийПриПолученииДанных = ОбменДаннымиСервер.ОшибкаРасхожденияВерсийПриПолученииДанных(); @@ -873,17 +1057,23 @@ ДатаНачалаОперации = ТекущаяДатаСеанса(); // Запускаем выполнение обмена. - ОбменДаннымиСервер.ВыполнитьОбменДаннымиДляУзлаИнформационнойБазы( - Отказ, - УзелИнформационнойБазы, - Ложь, - Истина, - Перечисления.ВидыТранспортаСообщенийОбмена.WS, - ДлительнаяОперация, - ИдентификаторОперации, - ИдентификаторФайла, - Истина, - ПараметрыАутентификации); + ПараметрыОбмена = ОбменДаннымиСервер.ПараметрыОбмена(); + ПараметрыОбмена.ВидТранспортаСообщенийОбмена = Перечисления.ВидыТранспортаСообщенийОбмена.WS; + ПараметрыОбмена.ВыполнятьЗагрузку = Ложь; + ПараметрыОбмена.ВыполнятьВыгрузку = Истина; + + ПараметрыОбмена.ДлительнаяОперацияРазрешена = Истина; + ПараметрыОбмена.ДлительнаяОперация = ДлительнаяОперация; + ПараметрыОбмена.ИдентификаторОперации = ИдентификаторОперации; + ПараметрыОбмена.ИдентификаторФайла = ИдентификаторФайла; + ПараметрыОбмена.ПараметрыАутентификации = ПараметрыАутентификации; + + ОбменДаннымиСервер.ВыполнитьОбменДаннымиДляУзлаИнформационнойБазы(УзелИнформационнойБазы, ПараметрыОбмена, Отказ); + + ДлительнаяОперация = ПараметрыОбмена.ДлительнаяОперация; + ИдентификаторОперации = ПараметрыОбмена.ИдентификаторОперации; + ИдентификаторФайла = ПараметрыОбмена.ИдентификаторФайла; + ПараметрыАутентификации = ПараметрыОбмена.ПараметрыАутентификации; КонецПроцедуры @@ -987,9 +1177,9 @@ Процедура СценарийОбменаОбычный() ТаблицаПереходов.Очистить(); + ТаблицаПереходовНоваяСтрока(1, "ОжиданиеСинхронизацииДанныхПрогрессБарЗагрузка",, Истина, "ОбычнаяЗагрузкаДанных_ОбработкаДлительнойОперации"); + ТаблицаПереходовНоваяСтрока(2, "ОжиданиеСинхронизацииДанныхПрогрессБарВыгрузка",, Истина, "ОбычнаяВыгрузкаДанных_ОбработкаДлительнойОперации"); - ТаблицаПереходовНоваяСтрока(1, "ОжиданиеСинхронизацииДанных",, Истина, "ОбычнаяЗагрузкаДанных_ОбработкаДлительнойОперации"); - ТаблицаПереходовНоваяСтрока(2, "ОжиданиеСинхронизацииДанных",, Истина, "ОбычнаяВыгрузкаДанных_ОбработкаДлительнойОперации"); ТаблицаПереходовНоваяСтрока(3, "ЗавершениеОбмена", "ЗавершениеОбмена_ПриОткрытии", Истина, "ЗавершениеОбмена_ОбработкаДлительнойОперации"); КонецПроцедуры diff --git a/SSL/src/DataProcessors/ВыполнениеОбменаДанными/ManagerModule.bsl b/SSL/src/DataProcessors/ВыполнениеОбменаДанными/ManagerModule.bsl new file mode 100644 index 000000000..5fa485bf8 --- /dev/null +++ b/SSL/src/DataProcessors/ВыполнениеОбменаДанными/ManagerModule.bsl @@ -0,0 +1,22 @@ +#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда + +// Запускает обмен данными, используется в фоновом задании. +// +// Параметры: +// ПараметрыВыполнения - Структура - Параметры, необходимые для удаления. +// АдресХранилища - Строка - Адрес временного хранилища. + +Процедура ВыполнитьЗапускОбменаДанными(ПараметрыВыполнения, АдресХранилища) Экспорт + ПараметрыОбмена = ОбменДаннымиСервер.ПараметрыОбмена(); + ЗаполнитьЗначенияСвойств(ПараметрыОбмена, ПараметрыВыполнения, + "ВидТранспортаСообщенийОбмена,ВыполнятьЗагрузку,ВыполнятьВыгрузку"); + + ОбменДаннымиСервер.ВыполнитьОбменДаннымиДляУзлаИнформационнойБазы( + ПараметрыВыполнения.УзелИнформационнойБазы, + ПараметрыОбмена, + ПараметрыВыполнения.Отказ); + + ПоместитьВоВременноеХранилище(ПараметрыВыполнения, АдресХранилища); +КонецПроцедуры + +#КонецЕсли \ No newline at end of file diff --git a/SSL/src/DataProcessors/ГрупповоеИзменениеРеквизитов/Commands/ГрупповоеИзменениеРеквизитов/CommandModule.bsl b/SSL/src/DataProcessors/ГрупповоеИзменениеРеквизитов/Commands/ГрупповоеИзменениеРеквизитов/CommandModule.bsl index 39f900441..25c3bc9af 100644 --- a/SSL/src/DataProcessors/ГрупповоеИзменениеРеквизитов/Commands/ГрупповоеИзменениеРеквизитов/CommandModule.bsl +++ b/SSL/src/DataProcessors/ГрупповоеИзменениеРеквизитов/Commands/ГрупповоеИзменениеРеквизитов/CommandModule.bsl @@ -1,5 +1,9 @@ +#Область ОбработчикиСобытий &НаКлиенте Процедура ОбработкаКоманды(ПараметрКоманды, ПараметрыВыполненияКоманды) ОткрытьФорму("Обработка.ГрупповоеИзменениеРеквизитов.Форма", , ПараметрыВыполненияКоманды.Источник, ПараметрыВыполненияКоманды.Уникальность, ПараметрыВыполненияКоманды.Окно, ПараметрыВыполненияКоманды.НавигационнаяСсылка); КонецПроцедуры + +#КонецОбласти + diff --git a/SSL/src/DataProcessors/ГрупповоеИзменениеРеквизитов/Forms/ВыборВидаОбъектов/Form.form b/SSL/src/DataProcessors/ГрупповоеИзменениеРеквизитов/Forms/ВыборВидаОбъектов/Form.form index 9d011cae9..3f9cc9e88 100644 --- a/SSL/src/DataProcessors/ГрупповоеИзменениеРеквизитов/Forms/ВыборВидаОбъектов/Form.form +++ b/SSL/src/DataProcessors/ГрупповоеИзменениеРеквизитов/Forms/ВыборВидаОбъектов/Form.form @@ -27,21 +27,104 @@ <excludedCommands>Pickup</excludedCommands> <excludedCommands>SortListAsc</excludedCommands> <excludedCommands>SortListDesc</excludedCommands> - <excludedCommands>UncheckAll</excludedCommands> - <items xsi:type="form:FormField"> - <name>ДоступныеОбъектыДляИзмененияЗначение</name> - <id>12</id> + <items xsi:type="form:FormGroup"> + <name>ДоступныеОбъектыДляИзмененияГруппа</name> + <id>26</id> + <items xsi:type="form:FormField"> + <name>ДоступныеОбъектыДляИзмененияПометка</name> + <id>28</id> + <visible>true</visible> + <enabled>true</enabled> + <userVisible> + <common>true</common> + </userVisible> + <dataPath xsi:type="form:DataPath"> + <segments>ДоступныеОбъектыДляИзменения.Check</segments> + </dataPath> + <handlers> + <event>OnChange</event> + <name>ДоступныеОбъектыДляИзмененияПометкаПриИзменении</name> + </handlers> + <extendedTooltip> + <name>ДоступныеОбъектыДляИзмененияПометкаРасширеннаяПодсказка</name> + <id>30</id> + <type>Label</type> + <autoMaxWidth>true</autoMaxWidth> + <autoMaxHeight>true</autoMaxHeight> + <extInfo xsi:type="form:LabelDecorationExtInfo"> + <horizontalAlign>Left</horizontalAlign> + </extInfo> + </extendedTooltip> + <contextMenu> + <name>ДоступныеОбъектыДляИзмененияПометкаКонтекстноеМеню</name> + <id>29</id> + <autoFill>true</autoFill> + </contextMenu> + <type>CheckBoxField</type> + <editMode>Auto</editMode> + <showInHeader>true</showInHeader> + <headerHorizontalAlign>Left</headerHorizontalAlign> + <showInFooter>true</showInFooter> + <extInfo xsi:type="form:CheckBoxFieldExtInfo"/> + </items> + <items xsi:type="form:FormField"> + <name>ДоступныеОбъектыДляИзмененияЗначение</name> + <id>12</id> + <visible>true</visible> + <enabled>true</enabled> + <userVisible> + <common>true</common> + </userVisible> + <dataPath xsi:type="form:DataPath"> + <segments>ДоступныеОбъектыДляИзменения.Value</segments> + </dataPath> + <extendedTooltip> + <name>ДоступныеОбъектыДляИзмененияЗначениеРасширеннаяПодсказка</name> + <id>14</id> + <type>Label</type> + <autoMaxWidth>true</autoMaxWidth> + <autoMaxHeight>true</autoMaxHeight> + <extInfo xsi:type="form:LabelDecorationExtInfo"> + <horizontalAlign>Left</horizontalAlign> + </extInfo> + </extendedTooltip> + <contextMenu> + <name>ДоступныеОбъектыДляИзмененияЗначениеКонтекстноеМеню</name> + <id>13</id> + <autoFill>true</autoFill> + </contextMenu> + <type>InputField</type> + <readOnly>true</readOnly> + <editMode>Auto</editMode> + <showInHeader>true</showInHeader> + <headerHorizontalAlign>Left</headerHorizontalAlign> + <showInFooter>true</showInFooter> + <extInfo xsi:type="form:InputFieldExtInfo"> + <autoMaxWidth>true</autoMaxWidth> + <autoMaxHeight>true</autoMaxHeight> + <wrap>true</wrap> + <chooseType>true</chooseType> + <typeDomainEnabled>true</typeDomainEnabled> + <textEdit>true</textEdit> + <textSize>Normal</textSize> + </extInfo> + </items> <visible>true</visible> <enabled>true</enabled> <userVisible> <common>true</common> </userVisible> - <dataPath xsi:type="form:DataPath"> - <segments>ДоступныеОбъектыДляИзменения.Value</segments> - </dataPath> + <title> + <key>ru</key> + <value>Доступные объекты для изменения группа</value> + + + ru + Доступные объекты для изменения группа + - ДоступныеОбъектыДляИзмененияЗначениеРасширеннаяПодсказка - 14 + ДоступныеОбъектыДляИзмененияГруппаРасширеннаяПодсказка + 27 Label true true @@ -49,24 +132,11 @@ Left - - ДоступныеОбъектыДляИзмененияЗначениеКонтекстноеМеню - 13 - true - - InputField - Auto - true - Left - true - - true - true - true - true - true - true - Normal + ColumnGroup + + InCell + auto + true @@ -74,10 +144,6 @@ 10 Left - - Selection - ДоступныеОбъектыДляИзмененияВыбор - ДоступныеОбъектыДляИзмененияСтрокаПоиска 17 @@ -164,10 +230,11 @@ 9 true - true true true true + true + MultiRow 1 1 AutoUse @@ -219,7 +286,34 @@ UserCmds Auto + + ФормаСнятьФлажки + 31 + true + true + + true + + + ФормаСнятьФлажкиРасширеннаяПодсказка + 32 + Label + true + true + + Left + + + Form.Item.ДоступныеОбъектыДляИзменения.StandardCommand.UncheckAll + Normal + Auto + true + true + UserCmds + Auto + Left + true OnCreateAtServer @@ -228,7 +322,6 @@ Abort Cancel Close - CustomizeForm Help Ignore No @@ -238,7 +331,7 @@ SaveValues Yes 45 - 20 + 10 LockOwner true true @@ -301,7 +394,7 @@ Выбрать - Auto + DontUse Auto @@ -317,6 +410,13 @@ Boolean + + ВыбранныеТипы + + String + + + diff --git a/SSL/src/DataProcessors/ГрупповоеИзменениеРеквизитов/Forms/ВыборВидаОбъектов/Module.bsl b/SSL/src/DataProcessors/ГрупповоеИзменениеРеквизитов/Forms/ВыборВидаОбъектов/Module.bsl index 5509d3480..80b1a2a0a 100644 --- a/SSL/src/DataProcessors/ГрупповоеИзменениеРеквизитов/Forms/ВыборВидаОбъектов/Module.bsl +++ b/SSL/src/DataProcessors/ГрупповоеИзменениеРеквизитов/Forms/ВыборВидаОбъектов/Module.bsl @@ -7,6 +7,44 @@ Возврат; КонецЕсли; + ЗаполнитьСписокТиповОбъектов(); + + Если Не ПустаяСтрока(Параметры.ВыбранныеТипы) Тогда + ВыбранныеТипы = СтрРазделить(Параметры.ВыбранныеТипы, ",", Истина); + Элементы.ДоступныеОбъектыДляИзменения.ТекущаяСтрока = ДоступныеОбъектыДляИзменения.НайтиПоЗначению(ВыбранныеТипы[0]).ПолучитьИдентификатор(); + Для Каждого ВыбранныйТип Из ВыбранныеТипы Цикл + ДоступныеОбъектыДляИзменения.НайтиПоЗначению(ВыбранныйТип).Пометка = Истина; + КонецЦикла; + КонецЕсли; + +КонецПроцедуры + +#КонецОбласти + +#Область ОбработчикиКомандФормы + +&НаКлиенте +Процедура Выбрать(Команда) + ВыбранныеЭлементы = ВыбранныеЭлементы(); + Если ВыбранныеЭлементы.Количество() = 0 Тогда + ВыбранныеЭлементы.Добавить(Элементы.ДоступныеОбъектыДляИзменения.ТекущиеДанные.Значение); + КонецЕсли; + Закрыть(ВыбранныеЭлементы); +КонецПроцедуры + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +&НаСервере +Функция ЭтоСлужебныйОбъект(ОбъектМетаданных) + ОбработкаОбъект = РеквизитФормыВЗначение("Объект"); + Возврат ОбработкаОбъект.ЭтоСлужебныйОбъект(ОбъектМетаданных); +КонецФункции + +&НаСервере +Процедура ЗаполнитьСписокТиповОбъектов() + КоллекцииОбъектовМетаданных = Новый Массив; КоллекцииОбъектовМетаданных.Добавить(Метаданные.Справочники); КоллекцииОбъектовМетаданных.Добавить(Метаданные.Документы); @@ -17,394 +55,35 @@ КоллекцииОбъектовМетаданных.Добавить(Метаданные.ПланыСчетов); КоллекцииОбъектовМетаданных.Добавить(Метаданные.ПланыОбмена); - ПрефиксУдаляемыхОбъектов = "Удалить"; - - Если ВерсияБСПСоответствуетТребованиям() Тогда - МенеджерыОбъектов = МенеджерыОбъектовДляРедактированияРеквизитов(); - КонецЕсли; - + ПрефиксУдаляемыхОбъектов = "удалить"; + УдаляемыеОбъекты = Новый СписокЗначений; Для Каждого КоллекцияОбъектовМетаданных Из КоллекцииОбъектовМетаданных Цикл Для Каждого ОбъектМетаданных Из КоллекцияОбъектовМетаданных Цикл Если Не Параметры.ПоказыватьСкрытые Тогда - Если НРег(Лев(ОбъектМетаданных.Имя, СтрДлина(ПрефиксУдаляемыхОбъектов))) = НРег(ПрефиксУдаляемыхОбъектов) - Или ЭтоСлужебныйОбъект(ОбъектМетаданных, МенеджерыОбъектов) Тогда + Если СтрНачинаетсяС(НРег(ОбъектМетаданных.Имя),ПрефиксУдаляемыхОбъектов) + Или ЭтоСлужебныйОбъект(ОбъектМетаданных) Тогда Продолжить; КонецЕсли; КонецЕсли; + Если ПравоДоступа("Изменение", ОбъектМетаданных) Тогда - ДоступныеОбъектыДляИзменения.Добавить(ОбъектМетаданных.ПолноеИмя(), ОбъектМетаданных.Синоним); + Если СтрНачинаетсяС(НРег(ОбъектМетаданных.Имя),ПрефиксУдаляемыхОбъектов) Тогда + УдаляемыеОбъекты.Добавить(ОбъектМетаданных.ПолноеИмя(), ОбъектМетаданных.Синоним); + Иначе + ДоступныеОбъектыДляИзменения.Добавить(ОбъектМетаданных.ПолноеИмя(), ОбъектМетаданных.Синоним); + КонецЕсли; КонецЕсли; КонецЦикла; КонецЦикла; + ДоступныеОбъектыДляИзменения.СортироватьПоПредставлению(); + УдаляемыеОбъекты.СортироватьПоПредставлению(); - Если Не ПустаяСтрока(Параметры.ТекущийОбъект) Тогда - Элементы.ДоступныеОбъектыДляИзменения.ТекущаяСтрока = ДоступныеОбъектыДляИзменения.НайтиПоЗначению(Параметры.ТекущийОбъект).ПолучитьИдентификатор(); - КонецЕсли; -КонецПроцедуры - -&НаКлиенте -Процедура ДоступныеОбъектыДляИзмененияВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка) - СтандартнаяОбработка = Ложь; - Закрыть(Элементы.ДоступныеОбъектыДляИзменения.ТекущиеДанные.Значение); -КонецПроцедуры - -#КонецОбласти - -#Область ОбработчикиКомандФормы - -&НаКлиенте -Процедура Выбрать(Команда) - ТекущиеДанные = Элементы.ДоступныеОбъектыДляИзменения.ТекущиеДанные; - Если ТекущиеДанные <> Неопределено Тогда - Закрыть(ТекущиеДанные.Значение); - КонецЕсли; -КонецПроцедуры - -#КонецОбласти - -#Область СлужебныеПроцедурыИФункции - -&НаСервереБезКонтекста -Функция ЭтоСлужебныйОбъект(ОбъектМетаданных, МенеджерыОбъектов) - - Если МенеджерыОбъектов <> Неопределено Тогда - ДоступныеМетоды = МетодыМенеджераОбъектаДляРедактированияРеквизитов(ОбъектМетаданных.ПолноеИмя(), МенеджерыОбъектов); - Если ТипЗнч(ДоступныеМетоды) = Тип("Массив") И (ДоступныеМетоды.Количество() = 0 ИЛИ - ДоступныеМетоды.Найти("РеквизитыРедактируемыеВГрупповойОбработке") <> Неопределено) Тогда - - МенеджерОбъекта = МенеджерОбъектаПоПолномуИмени(ОбъектМетаданных.ПолноеИмя()); - Редактируемые = МенеджерОбъекта.РеквизитыРедактируемыеВГрупповойОбработке(); - КонецЕсли; - - Иначе - // В конфигурациях без БСП или на старых версиях БСП, пытаемся определить, - // есть ли у объекта редактируемые реквизиты. - МенеджерОбъекта = МенеджерОбъектаПоПолномуИмени(ОбъектМетаданных.ПолноеИмя()); - Попытка - Редактируемые = МенеджерОбъекта.РеквизитыРедактируемыеВГрупповойОбработке(); - Исключение - // метод не найден - Редактируемые = Неопределено; - КонецПопытки; - КонецЕсли; - - Если Редактируемые <> Неопределено И Редактируемые.Количество() = 0 Тогда - Возврат Истина; - КонецЕсли; - - // - - Если МенеджерыОбъектов <> Неопределено Тогда - Если ТипЗнч(ДоступныеМетоды) = Тип("Массив") И (ДоступныеМетоды.Количество() = 0 ИЛИ - ДоступныеМетоды.Найти("РеквизитыНеРедактируемыеВГрупповойОбработке") <> Неопределено) Тогда - - Если МенеджерОбъекта = Неопределено Тогда - МенеджерОбъекта = МенеджерОбъектаПоПолномуИмени(ОбъектМетаданных.ПолноеИмя()); - КонецЕсли; - НеРедактируемые = МенеджерОбъекта.РеквизитыНеРедактируемыеВГрупповойОбработке(); - КонецЕсли; - - Иначе - // В конфигурациях без БСП или на старых версиях БСП, пытаемся определить, - // есть ли у объекта нередактируемые реквизиты. - Попытка - НеРедактируемые = МенеджерОбъекта.РеквизитыНеРедактируемыеВГрупповойОбработке(); - Исключение - // метод не найден - НеРедактируемые = Неопределено; - КонецПопытки; - КонецЕсли; - - Если НеРедактируемые <> Неопределено И НеРедактируемые.Найти("*") <> Неопределено Тогда - Возврат Истина; - КонецЕсли; - - Возврат Ложь; - -КонецФункции - -&НаСервереБезКонтекста -Функция МетодыМенеджераОбъектаДляРедактированияРеквизитов(ИмяОбъекта, МенеджерыОбъектов) - - СведенияОМенеджереОбъекта = МенеджерыОбъектов[ИмяОбъекта]; - Если СведенияОМенеджереОбъекта = Неопределено Тогда - Возврат "НеПоддерживается"; - КонецЕсли; - ДоступныеМетоды = РазложитьСтрокуВМассивПодстрок(СведенияОМенеджереОбъекта, Символы.ПС, Истина); - Возврат ДоступныеМетоды; - -КонецФункции - -&НаСервереБезКонтекста -Функция МенеджерыОбъектовДляРедактированияРеквизитов() - - МодульИнтеграцияСтандартныхПодсистем = ОбщийМодуль("ИнтеграцияСтандартныхПодсистем"); - МодульГрупповоеИзменениеОбъектовПереопределяемый = ОбщийМодуль("ГрупповоеИзменениеОбъектовПереопределяемый"); - Если МодульИнтеграцияСтандартныхПодсистем = Неопределено Или МодульГрупповоеИзменениеОбъектовПереопределяемый = Неопределено Тогда - Возврат Новый Массив; - КонецЕсли; - - ОбъектыСЗаблокированнымиРеквизитами = Новый Соответствие; - МодульИнтеграцияСтандартныхПодсистем.ПриОпределенииОбъектовСРедактируемымиРеквизитами(ОбъектыСЗаблокированнымиРеквизитами); - МодульГрупповоеИзменениеОбъектовПереопределяемый.ПриОпределенииОбъектовСРедактируемымиРеквизитами(ОбъектыСЗаблокированнымиРеквизитами); - - Возврат ОбъектыСЗаблокированнымиРеквизитами; - -КонецФункции - -&НаСервереБезКонтекста -Функция ВерсияБСПСоответствуетТребованиям() - - Попытка - МодульСтандартныеПодсистемыСервер = ОбщийМодуль("СтандартныеПодсистемыСервер"); - Исключение - // Модуль не существует - МодульСтандартныеПодсистемыСервер = Неопределено; - КонецПопытки; - Если МодульСтандартныеПодсистемыСервер = Неопределено Тогда - Возврат Ложь; - КонецЕсли; - - ВерсияБСП = МодульСтандартныеПодсистемыСервер.ВерсияБиблиотеки(); - Возврат НомерВерсииВЧисло(ВерсияБСП) >= НомерВерсииВЧисло("2.2.4.9"); - -КонецФункции - -&НаСервереБезКонтекста -Функция НомерВерсииВЧисло(НомерВерсии) - ЧастиНомера = РазложитьСтрокуВМассивПодстрок(НомерВерсии, ".", Истина); - Если ЧастиНомера.Количество() <> 4 Тогда - Возврат 0; - КонецЕсли; - Результат = 0; - Для Каждого ЧастьНомера Из ЧастиНомера Цикл - Результат = Результат * 1000 + Число(ЧастьНомера); - КонецЦикла; - Возврат Результат; -КонецФункции - -//////////////////////////////////////////////////////////////////////////////// -// Процедуры и функции из базовой функциональности для обеспечения автономности. - -&НаСервереБезКонтекста -Функция МенеджерОбъектаПоПолномуИмени(ПолноеИмя) - Перем КлассОМ, ИмяОМ, Менеджер; - - ЧастиИмени = РазложитьСтрокуВМассивПодстрок(ПолноеИмя, "."); - - Если ЧастиИмени.Количество() = 2 Тогда - КлассОМ = ЧастиИмени[0]; - ИмяОМ = ЧастиИмени[1]; - КонецЕсли; - - Если ВРег(КлассОМ) = "ПЛАНОБМЕНА" Тогда - Менеджер = ПланыОбмена; - - ИначеЕсли ВРег(КлассОМ) = "СПРАВОЧНИК" Тогда - Менеджер = Справочники; - - ИначеЕсли ВРег(КлассОМ) = "ДОКУМЕНТ" Тогда - Менеджер = Документы; - - ИначеЕсли ВРег(КлассОМ) = "ЖУРНАЛДОКУМЕНТОВ" Тогда - Менеджер = ЖурналыДокументов; - - ИначеЕсли ВРег(КлассОМ) = "ПЕРЕЧИСЛЕНИЕ" Тогда - Менеджер = Перечисления; - - ИначеЕсли ВРег(КлассОМ) = "ОТЧЕТ" Тогда - Менеджер = Отчеты; - - ИначеЕсли ВРег(КлассОМ) = "ОБРАБОТКА" Тогда - Менеджер = Обработки; - - ИначеЕсли ВРег(КлассОМ) = "ПЛАНВИДОВХАРАКТЕРИСТИК" Тогда - Менеджер = ПланыВидовХарактеристик; - - ИначеЕсли ВРег(КлассОМ) = "ПЛАНСЧЕТОВ" Тогда - Менеджер = ПланыСчетов; - - ИначеЕсли ВРег(КлассОМ) = "ПЛАНВИДОВРАСЧЕТА" Тогда - Менеджер = ПланыВидовРасчета; - - ИначеЕсли ВРег(КлассОМ) = "РЕГИСТРСВЕДЕНИЙ" Тогда - Менеджер = РегистрыСведений; - - ИначеЕсли ВРег(КлассОМ) = "РЕГИСТРНАКОПЛЕНИЯ" Тогда - Менеджер = РегистрыНакопления; - - ИначеЕсли ВРег(КлассОМ) = "РЕГИСТРБУХГАЛТЕРИИ" Тогда - Менеджер = РегистрыБухгалтерии; - - ИначеЕсли ВРег(КлассОМ) = "РЕГИСТРРАСЧЕТА" Тогда - Если ЧастиИмени.Количество() = 2 Тогда - // Регистр расчета - Менеджер = РегистрыРасчета; - Иначе - КлассПодчиненногоОМ = ЧастиИмени[2]; - ИмяПодчиненногоОМ = ЧастиИмени[3]; - Если ВРег(КлассПодчиненногоОМ) = "ПЕРЕРАСЧЕТ" Тогда - // Перерасчет - Менеджер = РегистрыРасчета[ИмяОМ].Перерасчеты; - Иначе - ВызватьИсключение ПодставитьПараметрыВСтроку( - НСтр("ru = 'Неизвестный тип объекта метаданных ""%1""'"), ПолноеИмя); - КонецЕсли; - КонецЕсли; - - ИначеЕсли ВРег(КлассОМ) = "БИЗНЕСПРОЦЕСС" Тогда - Менеджер = БизнесПроцессы; - - ИначеЕсли ВРег(КлассОМ) = "ЗАДАЧА" Тогда - Менеджер = Задачи; - - ИначеЕсли ВРег(КлассОМ) = "КОНСТАНТА" Тогда - Менеджер = Константы; - - ИначеЕсли ВРег(КлассОМ) = "ПОСЛЕДОВАТЕЛЬНОСТЬ" Тогда - Менеджер = Последовательности; - КонецЕсли; - - Если Менеджер <> Неопределено Тогда - Попытка - Возврат Менеджер[ИмяОМ]; - Исключение - Менеджер = Неопределено; - КонецПопытки; - КонецЕсли; - - ВызватьИсключение ПодставитьПараметрыВСтроку( - НСтр("ru = 'Неизвестный тип объекта метаданных ""%1""'"), ПолноеИмя); - -КонецФункции - -// Разбивает строку на несколько строк по разделителю. Разделитель может иметь любую длину. -// -// Параметры: -// Строка - Строка - текст с разделителями; -// Разделитель - Строка - разделитель строк текста, минимум 1 символ; -// ПропускатьПустыеСтроки - Булево - признак необходимости включения в результат пустых строк. -// Если параметр не задан, то функция работает в режиме совместимости со своей предыдущей версией: -// - для разделителя-пробела пустые строки не включаются в результат, для остальных разделителей пустые строки -// включаются в результат. -// Е если параметр Строка не содержит значащих символов или не содержит ни одного символа (пустая строка), то в -// случае разделителя-пробела результатом функции будет массив, содержащий одно значение "" (пустая строка), а -// при других разделителях результатом функции будет пустой массив. -// -// -// Возвращаемое значение: -// Массив - массив строк. -// -// Примеры: -// РазложитьСтрокуВМассивПодстрок(",один,,два,", ",") - возвратит массив из 5 элементов, три из которых - пустые -// строки; -// РазложитьСтрокуВМассивПодстрок(",один,,два,", ",", Истина) - возвратит массив из двух элементов; -// РазложитьСтрокуВМассивПодстрок(" один два ", " ") - возвратит массив из двух элементов; -// РазложитьСтрокуВМассивПодстрок("") - возвратит пустой массив; -// РазложитьСтрокуВМассивПодстрок("",,Ложь) - возвратит массив с одним элементом "" (пустой строкой); -// РазложитьСтрокуВМассивПодстрок("", " ") - возвратит массив с одним элементом "" (пустой строкой); -// -&НаКлиентеНаСервереБезКонтекста -Функция РазложитьСтрокуВМассивПодстрок(Знач Строка, Знач Разделитель = ",", Знач ПропускатьПустыеСтроки = Неопределено) - - Результат = Новый Массив; - - // Для обеспечения обратной совместимости. - Если ПропускатьПустыеСтроки = Неопределено Тогда - ПропускатьПустыеСтроки = ?(Разделитель = " ", Истина, Ложь); - Если ПустаяСтрока(Строка) Тогда - Если Разделитель = " " Тогда - Результат.Добавить(""); - КонецЕсли; - Возврат Результат; - КонецЕсли; - КонецЕсли; - // - - Позиция = Найти(Строка, Разделитель); - Пока Позиция > 0 Цикл - Подстрока = Лев(Строка, Позиция - 1); - Если Не ПропускатьПустыеСтроки Или Не ПустаяСтрока(Подстрока) Тогда - Результат.Добавить(Подстрока); - КонецЕсли; - Строка = Сред(Строка, Позиция + СтрДлина(Разделитель)); - Позиция = Найти(Строка, Разделитель); + Для Каждого Элемент Из УдаляемыеОбъекты Цикл + ДоступныеОбъектыДляИзменения.Добавить(Элемент.Значение, Элемент.Представление); КонецЦикла; - Если Не ПропускатьПустыеСтроки Или Не ПустаяСтрока(Строка) Тогда - Результат.Добавить(Строка); - КонецЕсли; - - Возврат Результат; - -КонецФункции - -// Подставляет параметры в строку. -// Параметры в строке задаются как %<номер параметра>. Нумерация параметров начинается с единицы. -// -// Параметры: -// СтрокаПодстановки - Строка - шаблон строки с параметрами (вхождениями вида "%ИмяПараметра"); -// Параметр - Строка - подставляемый параметр. -// -// Возвращаемое значение: -// Строка - текстовая строка с подставленными параметрами. -// -// Пример: -// ПодставитьПараметрыВСтроку(НСтр("ru='%1 пошел в %2'"), "Вася", "Зоопарк") = "Вася пошел в Зоопарк". -// -&НаКлиентеНаСервереБезКонтекста -Функция ПодставитьПараметрыВСтроку(Знач СтрокаПодстановки, - Знач Параметр1, Знач Параметр2 = Неопределено, Знач Параметр3 = Неопределено) - - ИспользоватьАльтернативныйАлгоритм = - Найти(Параметр1, "%") - Или Найти(Параметр2, "%") - Или Найти(Параметр3, "%"); - - Если ИспользоватьАльтернативныйАлгоритм Тогда - СтрокаПодстановки = ПодставитьПараметрыВСтрокуАльтернативныйАлгоритм(СтрокаПодстановки, Параметр1, - Параметр2, Параметр3); - Иначе - СтрокаПодстановки = СтрЗаменить(СтрокаПодстановки, "%1", Параметр1); - СтрокаПодстановки = СтрЗаменить(СтрокаПодстановки, "%2", Параметр2); - СтрокаПодстановки = СтрЗаменить(СтрокаПодстановки, "%3", Параметр3); - КонецЕсли; - - Возврат СтрокаПодстановки; -КонецФункции - -// Вставляет параметры в строку, учитывая, что в параметрах могут использоваться подстановочные слова %1, %2 и т.д. -&НаКлиентеНаСервереБезКонтекста -Функция ПодставитьПараметрыВСтрокуАльтернативныйАлгоритм(Знач СтрокаПодстановки, - Знач Параметр1, Знач Параметр2 = Неопределено, Знач Параметр3 = Неопределено) - - Результат = ""; - Позиция = Найти(СтрокаПодстановки, "%"); - Пока Позиция > 0 Цикл - Результат = Результат + Лев(СтрокаПодстановки, Позиция - 1); - СимволПослеПроцента = Сред(СтрокаПодстановки, Позиция + 1, 1); - ПодставляемыйПараметр = ""; - Если СимволПослеПроцента = "1" Тогда - ПодставляемыйПараметр = Параметр1; - ИначеЕсли СимволПослеПроцента = "2" Тогда - ПодставляемыйПараметр = Параметр2; - ИначеЕсли СимволПослеПроцента = "3" Тогда - ПодставляемыйПараметр = Параметр3; - КонецЕсли; - Если ПодставляемыйПараметр = "" Тогда - Результат = Результат + "%"; - СтрокаПодстановки = Сред(СтрокаПодстановки, Позиция + 1); - Иначе - Результат = Результат + ПодставляемыйПараметр; - СтрокаПодстановки = Сред(СтрокаПодстановки, Позиция + 2); - КонецЕсли; - Позиция = Найти(СтрокаПодстановки, "%"); - КонецЦикла; - Результат = Результат + СтрокаПодстановки; - - Возврат Результат; -КонецФункции +КонецПроцедуры // Возвращает ссылку на общий модуль по имени. // @@ -427,15 +106,13 @@ КонецЕсли; Если ТипЗнч(Модуль) <> Тип("ОбщийМодуль") Тогда - ВызватьИсключение ПодставитьПараметрыВСтроку( - НСтр("ru = 'Общий модуль ""%1"" не найден.'"), Имя); + ВызватьИсключение ПодставитьПараметрыВСтроку(НСтр("ru = 'Общий модуль ""%1"" не найден.'"), Имя); КонецЕсли; #Иначе Модуль = Вычислить(Имя); #Если НЕ ВебКлиент Тогда Если ТипЗнч(Модуль) <> Тип("ОбщийМодуль") Тогда - ВызватьИсключение ПодставитьПараметрыВСтроку( - НСтр("ru = 'Общий модуль ""%1"" не найден.'"), Имя); + ВызватьИсключение ПодставитьПараметрыВСтроку(НСтр("ru = 'Общий модуль ""%1"" не найден.'"), Имя); КонецЕсли; #КонецЕсли #КонецЕсли @@ -463,4 +140,41 @@ КонецФункции +&НаКлиенте +Функция ВыбранныеЭлементы() + Результат = Новый Массив; + Для Каждого Элемент Из ДоступныеОбъектыДляИзменения Цикл + Если Элемент.Пометка Тогда + Результат.Добавить(Элемент.Значение); + КонецЕсли; + КонецЦикла; + Возврат Результат; +КонецФункции + +&НаКлиенте +Процедура ДоступныеОбъектыДляИзмененияПометкаПриИзменении(Элемент) + ОбновитьКоличествоВыбранных(); +КонецПроцедуры + +&НаКлиенте +Процедура ОбновитьКоличествоВыбранных() + ТекстКнопкиВыбора = НСтр("ru = 'Выбрать'"); + КоличествоВыбранных = ВыбранныеЭлементы().Количество(); + Если КоличествоВыбранных > 0 Тогда + ТекстКнопкиВыбора = ТекстКнопкиВыбора + " (" + КоличествоВыбранных + ")"; + КонецЕсли; + Элементы.ФормаВыбрать.Заголовок = ТекстКнопкиВыбора; +КонецПроцедуры + +&НаКлиентеНаСервереБезКонтекста +Функция ПодставитьПараметрыВСтроку(Знач СтрокаПодстановки, + Знач Параметр1, Знач Параметр2 = Неопределено, Знач Параметр3 = Неопределено) + + СтрокаПодстановки = СтрЗаменить(СтрокаПодстановки, "%1", Параметр1); + СтрокаПодстановки = СтрЗаменить(СтрокаПодстановки, "%2", Параметр2); + СтрокаПодстановки = СтрЗаменить(СтрокаПодстановки, "%3", Параметр3); + + Возврат СтрокаПодстановки; +КонецФункции + #КонецОбласти diff --git a/SSL/src/DataProcessors/ГрупповоеИзменениеРеквизитов/Forms/ВыбранныеЭлементы/Form.form b/SSL/src/DataProcessors/ГрупповоеИзменениеРеквизитов/Forms/ВыбранныеЭлементы/Form.form index 69b36c6b8..0d43fc342 100644 --- a/SSL/src/DataProcessors/ГрупповоеИзменениеРеквизитов/Forms/ВыбранныеЭлементы/Form.form +++ b/SSL/src/DataProcessors/ГрупповоеИзменениеРеквизитов/Forms/ВыбранныеЭлементы/Form.form @@ -252,7 +252,7 @@ 29 Список - 11 + 74 true true @@ -263,7 +263,6 @@ None CancelSearch - Choose DynamicListStandardSettings Find ListSettings @@ -271,7 +270,7 @@ SaveDynamicListSettings СписокСсылка - 15 + 87 true true @@ -282,7 +281,7 @@ СписокСсылкаРасширеннаяПодсказка - 17 + 89 Label true true @@ -292,30 +291,38 @@ СписокСсылкаКонтекстноеМеню - 16 + 88 true - LabelField + InputField Enter true Left true - + true true + true + true + true + Normal СписокКоманднаяПанель - 13 + 76 Left + + Selection + СписокВыбор + - СписокSearchString - 62 + СписокСтрокаПоиска + 78 - СписокSearchStringExtendedTooltip - 64 + СписокСтрокаПоискаРасширеннаяПодсказка + 80 Label true true @@ -324,8 +331,8 @@ - СписокSearchStringContextMenu - 63 + СписокСтрокаПоискаКонтекстноеМеню + 79 true Список @@ -334,11 +341,11 @@ - СписокViewStatus - 65 + СписокСостояниеПросмотра + 81 - СписокViewStatusExtendedTooltip - 67 + СписокСостояниеПросмотраРасширеннаяПодсказка + 83 Label true true @@ -347,8 +354,8 @@ - СписокViewStatusContextMenu - 66 + СписокСостояниеПросмотраКонтекстноеМеню + 82 true ViewStatusAddition @@ -358,11 +365,11 @@ - СписокSearchControl - 68 + СписокУправлениеПоиском + 84 - СписокSearchControlExtendedTooltip - 70 + СписокУправлениеПоискомРасширеннаяПодсказка + 86 Label true true @@ -371,8 +378,8 @@ - СписокSearchControlContextMenu - 69 + СписокУправлениеПоискомКонтекстноеМеню + 85 true SearchControlAddition @@ -383,7 +390,7 @@ СписокРасширеннаяПодсказка - 14 + 77 Label true true @@ -393,18 +400,18 @@ СписокКонтекстноеМеню - 12 + 75 - СписокКонтекстноеМенюОбновить - 45 + СписокКонтекстноеМенюОбновить1 + 90 true true true - СписокКонтекстноеМенюОбновитьРасширеннаяПодсказка - 46 + СписокКонтекстноеМенюОбновить1РасширеннаяПодсказка + 91 Label true true @@ -412,7 +419,7 @@ Left - Form.Item.Список.StandardCommand.Refresh + 0 Normal Auto true @@ -421,16 +428,16 @@ Auto - СписокКонтекстноеМенюВывестиСписок - 43 + СписокКонтекстноеМенюВывестиСписок1 + 92 true true true - СписокКонтекстноеМенюВывестиСписокРасширеннаяПодсказка - 44 + СписокКонтекстноеМенюВывестиСписок1РасширеннаяПодсказка + 93 Label true true @@ -438,7 +445,7 @@ Left - Form.Item.Список.StandardCommand.OutputList + 0 Normal Auto true @@ -448,7 +455,7 @@ СписокКонтекстноеМенюКопироватьВБуферОбмена - 47 + 94 true true @@ -456,7 +463,7 @@ СписокКонтекстноеМенюКопироватьВБуферОбменаРасширеннаяПодсказка - 48 + 95 Label true true @@ -623,7 +630,6 @@ Retry SaveValues Yes - 22 LockOwner true true @@ -685,7 +691,8 @@ ВЫБРАТЬ - "" КАК Ссылка + "" КАК Ссылка + true true true @@ -709,10 +716,10 @@ - ВидИзменяемыхОбъектов + ВыбранныеТипы <key>ru</key> - <value>Вид изменяемых объектов</value> + <value>Выбранные типы</value> 6 @@ -781,7 +788,7 @@ ОК - Auto + DontUse Auto @@ -798,7 +805,7 @@ true - Auto + DontUse Auto @@ -812,6 +819,13 @@ + + ВыбранныеТипы + + String + + + diff --git a/SSL/src/DataProcessors/ГрупповоеИзменениеРеквизитов/Forms/ВыбранныеЭлементы/Module.bsl b/SSL/src/DataProcessors/ГрупповоеИзменениеРеквизитов/Forms/ВыбранныеЭлементы/Module.bsl index 85f0bced8..1ca172597 100644 --- a/SSL/src/DataProcessors/ГрупповоеИзменениеРеквизитов/Forms/ВыбранныеЭлементы/Module.bsl +++ b/SSL/src/DataProcessors/ГрупповоеИзменениеРеквизитов/Forms/ВыбранныеЭлементы/Module.bsl @@ -1,4 +1,3 @@ - #Область ОбработчикиСобытийФормы &НаСервере @@ -8,16 +7,16 @@ Возврат; КонецЕсли; - ВидИзменяемыхОбъектов = Параметры.ВидИзменяемыхОбъектов; + ВыбранныеТипы = Параметры.ВыбранныеТипы; + ОбъектОбработка = РеквизитФормыВЗначение("Объект"); - ОбъектМетаданных = Метаданные.НайтиПоПолномуИмени(ВидИзменяемыхОбъектов); - ТекстЗапроса = ОбъектОбработка.ТекстЗапроса(ОбъектМетаданных); + ТекстЗапроса = ОбъектОбработка.ТекстЗапроса(ВыбранныеТипы); ИнициализироватьКомпоновщикНастроек(); КомпоновщикНастроек.ЗагрузитьНастройки(Параметры.Настройки); Список.ТекстЗапроса = ТекстЗапроса; - Список.ОсновнаяТаблица = ВидИзменяемыхОбъектов; + ОбновитьСписокВыбранныхНаСервере(); КонецПроцедуры @@ -43,6 +42,17 @@ #КонецОбласти +#Область ОбработчикиСобытийЭлементовТаблицыФормыСписок + +&НаКлиенте +Процедура СписокВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка) + Если Элемент.ТекущиеДанные <> Неопределено Тогда + ПоказатьЗначение(, Элемент.ТекущиеДанные.Ссылка); + КонецЕсли; +КонецПроцедуры + +#КонецОбласти + #Область ОбработчикиКомандФормы &НаКлиенте @@ -57,7 +67,7 @@ &НаСервере Процедура ИнициализироватьКомпоновщикНастроек() - Если Не ПустаяСтрока(ВидИзменяемыхОбъектов) Тогда + Если Не ПустаяСтрока(Параметры.ВыбранныеТипы) Тогда СхемаКомпоновкиДанных = СхемаКомпоновкиДанных(ТекстЗапроса); АдресСхемы = ПоместитьВоВременноеХранилище(СхемаКомпоновкиДанных, УникальныйИдентификатор); КомпоновщикНастроек.Инициализировать(Новый ИсточникДоступныхНастроекКомпоновкиДанных(АдресСхемы)); @@ -66,21 +76,8 @@ &НаСервере Функция СхемаКомпоновкиДанных(ТекстЗапроса) - - СхемаКомпоновкиДанных = Новый СхемаКомпоновкиДанных; - - ИсточникДанных = СхемаКомпоновкиДанных.ИсточникиДанных.Добавить(); - ИсточникДанных.Имя = "ИсточникДанных1"; - ИсточникДанных.ТипИсточникаДанных = "local"; - - НаборДанных = СхемаКомпоновкиДанных.НаборыДанных.Добавить(Тип("НаборДанныхЗапросСхемыКомпоновкиДанных")); - НаборДанных.ИсточникДанных = "ИсточникДанных1"; - НаборДанных.АвтоЗаполнениеДоступныхПолей = Истина; - НаборДанных.Запрос = ТекстЗапроса; - НаборДанных.Имя = "НаборДанных1"; - - Возврат СхемаКомпоновкиДанных; - + ОбработкаОбъект = РеквизитФормыВЗначение("Объект"); + Возврат ОбработкаОбъект.СхемаКомпоновкиДанных(ТекстЗапроса); КонецФункции &НаСервере @@ -99,6 +96,8 @@ ПолеВыбора.Поле = Новый ПолеКомпоновкиДанных("Ссылка"); ПолеВыбора.Использование = Истина; + Элементы.ГруппаВыбранныеОбъекты.Заголовок = ПодставитьПараметрыВСтроку(НСтр("ru = 'Выбранные элементы (%1)'"), ВыбранныеОбъекты().Строки.Количество()); + КонецПроцедуры &НаКлиенте @@ -114,4 +113,52 @@ ОбновитьСписокВыбранныхНаСервере(); КонецПроцедуры +&НаСервере +Функция ВыбранныеОбъекты() + + Результат = Новый ДеревоЗначений; + + Если Не ПустаяСтрока(ВыбранныеТипы) Тогда + ОбработкаОбъект = РеквизитФормыВЗначение("Объект"); + ТекстЗапроса = ОбработкаОбъект.ТекстЗапроса(ВыбранныеТипы); + СхемаКомпоновкиДанных = СхемаКомпоновкиДанных(ТекстЗапроса); + + КомпоновщикНастроекКомпоновкиДанных = Новый КомпоновщикНастроекКомпоновкиДанных; + АдресСхемы = ПоместитьВоВременноеХранилище(СхемаКомпоновкиДанных, УникальныйИдентификатор); + КомпоновщикНастроекКомпоновкиДанных.Инициализировать(Новый ИсточникДоступныхНастроекКомпоновкиДанных(АдресСхемы)); + КомпоновщикНастроекКомпоновкиДанных.ЗагрузитьНастройки(КомпоновщикНастроек.Настройки); + + Результат = Новый ДеревоЗначений; + КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных; + Попытка + МакетКомпоновкиДанных = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных, + КомпоновщикНастроекКомпоновкиДанных.Настройки, , , Тип("ГенераторМакетаКомпоновкиДанныхДляКоллекцииЗначений")); + Исключение + Возврат Результат; + КонецПопытки; + + ПроцессорКомпоновкиДанных = Новый ПроцессорКомпоновкиДанных; + ПроцессорКомпоновкиДанных.Инициализировать(МакетКомпоновкиДанных); + + ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВКоллекциюЗначений; + ПроцессорВывода.УстановитьОбъект(Результат); + ПроцессорВывода.Вывести(ПроцессорКомпоновкиДанных); + АдресСпискаВыбранных = ПоместитьВоВременноеХранилище(Результат, УникальныйИдентификатор); + КонецЕсли; + + Возврат Результат; + +КонецФункции + +&НаКлиентеНаСервереБезКонтекста +Функция ПодставитьПараметрыВСтроку(Знач СтрокаПодстановки, + Знач Параметр1, Знач Параметр2 = Неопределено, Знач Параметр3 = Неопределено) + + СтрокаПодстановки = СтрЗаменить(СтрокаПодстановки, "%1", Параметр1); + СтрокаПодстановки = СтрЗаменить(СтрокаПодстановки, "%2", Параметр2); + СтрокаПодстановки = СтрЗаменить(СтрокаПодстановки, "%3", Параметр3); + + Возврат СтрокаПодстановки; +КонецФункции + #КонецОбласти diff --git a/SSL/src/DataProcessors/ГрупповоеИзменениеРеквизитов/Forms/ДополнительныеПараметры/Form.form b/SSL/src/DataProcessors/ГрупповоеИзменениеРеквизитов/Forms/ДополнительныеПараметры/Form.form index 6fba527bb..9b26d3785 100644 --- a/SSL/src/DataProcessors/ГрупповоеИзменениеРеквизитов/Forms/ДополнительныеПараметры/Form.form +++ b/SSL/src/DataProcessors/ГрупповоеИзменениеРеквизитов/Forms/ДополнительныеПараметры/Form.form @@ -19,6 +19,7 @@ ИзменятьВТранзакции Right + ShowBottom OnChange ИзменятьВТранзакцииПриИзменении @@ -26,9 +27,16 @@ ИзменятьВТранзакцииExtendedTooltip 54 + + <key>ru</key> + <value>При невозможности изменения элементов в транзакции все изменения будут отменены.</value> + Label true true + + Style.ПоясняющийТекст + Left @@ -52,7 +60,6 @@ ru При невозможности изменения элементов в транзакции, все изменения будут отменены. - true true true @@ -109,7 +116,6 @@ Vertical Auto - NormalSeparation true true Auto @@ -131,12 +137,20 @@ ПрерыватьПриОшибке Right + ShowBottom ПрерыватьПриОшибкеExtendedTooltip 57 + + <key>ru</key> + <value>Предупреждать, если во время изменения элементов возникнут ошибки.</value> + Label true true + + Style.ПоясняющийТекст + Left @@ -160,7 +174,6 @@ ru Предупреждать, если во время изменения элементов возникнут ошибки. - true true true @@ -217,7 +230,6 @@ Vertical Auto - NormalSeparation true true Auto @@ -239,12 +251,20 @@ ОбрабатыватьРекурсивно Right + ShowBottom ОбрабатыватьГруппыРекурсивноExtendedTooltip 60 + + <key>ru</key> + <value>Обрабатывать дочерние элементы групп и родительских элементов.</value> + Label true true + + Style.ПоясняющийТекст + Left @@ -268,7 +288,6 @@ ru Обрабатывать дочерние элементы групп и родительских элементов. - true true true @@ -325,7 +344,6 @@ Vertical Auto - NormalSeparation true true Auto @@ -333,57 +351,105 @@ - ГруппаПоказыватьСлужебныеРеквизиты - 78 - - ПоказыватьСлужебныеРеквизиты - 80 + СпециальныеВозможности + 96 + + ГруппаПоказыватьСлужебныеРеквизиты + 78 + + ПоказыватьСлужебныеРеквизиты + 80 + true + true + + true + + + ПоказыватьСлужебныеРеквизиты + + Right + ShowBottom + + ПоказыватьСлужебныеРеквизитыРасширеннаяПодсказка + 82 + + <key>ru</key> + <value>Отображать реквизиты, значения которых не рекомендуется изменять этой обработкой.</value> + + Label + true + true + + Style.ПоясняющийТекст + + + Left + + + + ПоказыватьСлужебныеРеквизитыКонтекстноеМеню + 81 + true + + CheckBoxField + Enter + true + Left + true + + + + ПояснениеПоказыватьСлужебныеРеквизиты + 83 + + <key>ru</key> + <value>Отображать реквизиты, значения которых не рекомендуется изменять этой обработкой.</value> + + true + + true + + + ПояснениеПоказыватьСлужебныеРеквизитыРасширеннаяПодсказка + 85 + Label + true + true + + Left + + + + ПояснениеПоказыватьСлужебныеРеквизитыКонтекстноеМеню + 84 + true + + Label + true + true + + Style.ПоясняющийТекст + + + Left + + true true true - - ПоказыватьСлужебныеРеквизиты - - Right - - ПоказыватьСлужебныеРеквизитыРасширеннаяПодсказка - 82 - Label - true - true - - Left - - - - ПоказыватьСлужебныеРеквизитыКонтекстноеМеню - 81 - true - - CheckBoxField - Enter - true - Left - true - - - - ПояснениеПоказыватьСлужебныеРеквизиты - 83 <key>ru</key> - <value>Показывать все реквизиты и табличные части элементов, в том числе служебные.</value> + <value>Группа показывать служебные реквизиты</value> - true - true - - true - + + ru + Группа показывать служебные реквизиты + - ПояснениеПоказыватьСлужебныеРеквизитыРасширеннаяПодсказка - 85 + ГруппаПоказыватьСлужебныеРеквизитыРасширеннаяПодсказка + 79 Label true true @@ -391,19 +457,174 @@ Left - - ПояснениеПоказыватьСлужебныеРеквизитыКонтекстноеМеню - 84 - true - - Label - true - true - - Style.ПоясняющийТекст - - - Left + UsualGroup + + Vertical + Auto + true + true + Auto + Auto + + + + ГруппаРежимРазработчика + 86 + + РежимРазработчика + 88 + + <key>ru</key> + <value>Режим разработчика</value> + + true + true + + true + + + РежимРазработчика + + Right + ShowBottom + + РежимРазработчикаРасширеннаяПодсказка + 90 + + <key>ru</key> + <value>Выполнять запись объектов в режиме ОбменДанными.Загрузка = Истина.</value> + + Label + true + true + + Style.ПоясняющийТекст + + + Left + + + + РежимРазработчикаКонтекстноеМеню + 89 + true + + CheckBoxField + Enter + true + Left + true + + + true + true + + true + + + <key>ru</key> + <value>Группа режим разработчика</value> + + + ru + Группа режим разработчика + + + ГруппаРежимРазработчикаРасширеннаяПодсказка + 87 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + true + true + Auto + Auto + + + + ГруппаНастройкиВыбораИзСписков + 91 + + ОтключитьСвязиПараметровВыбора + 93 + true + true + + true + + + ОтключитьСвязиПараметровВыбора + + Right + ShowBottom + + ОтключитьСвязиПараметровВыбораРасширеннаяПодсказка + 95 + + <key>ru</key> + <value>При выборе значений не использовать отборы, прописанные в свойствах реквизитов СвязиПараметровВыбора и ПараметрыВыбора.</value> + + Label + true + true + + Style.ПоясняющийТекст + + + Left + + + + ОтключитьСвязиПараметровВыбораКонтекстноеМеню + 94 + true + + CheckBoxField + Enter + true + Left + true + + + true + true + + true + + + <key>ru</key> + <value>Группа настройки выбора из списков</value> + + + ru + Группа настройки выбора из списков + + + ГруппаНастройкиВыбораИзСписковРасширеннаяПодсказка + 92 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + true + true + Auto + Auto true @@ -413,15 +634,15 @@ <key>ru</key> - <value>Группа показывать служебные реквизиты</value> + <value>Специальные возможности</value> ru - Группа показывать служебные реквизиты + Специальные возможности - ГруппаПоказыватьСлужебныеРеквизитыРасширеннаяПодсказка - 79 + СпециальныеВозможностиРасширеннаяПодсказка + 97 Label true true @@ -432,9 +653,13 @@ UsualGroup Vertical - Auto + Collapsible + true + Button + WeakSeparation true true + auto Auto Auto @@ -532,6 +757,7 @@ OnCreateAtServer ПриСозданииНаСервере + 54 LockOwner true true @@ -539,7 +765,6 @@ true true true - UseIfNecessary auto true @@ -660,7 +885,7 @@ ПоказыватьСлужебныеРеквизиты <key>ru</key> - <value>Показывать служебные реквизиты и табличные части</value> + <value>Показывать служебные реквизиты</value> 8 @@ -673,6 +898,58 @@ true + + ОтключитьМеханизмПроведения + + <key>ru</key> + <value>Отключить механизм проведения</value> + + 7 + + String + + + + true + + + true + + + + РежимРазработчика + + <key>ru</key> + <value>Режим разработчика</value> + + 9 + + Boolean + + + true + + + true + + + + ОтключитьСвязиПараметровВыбора + + <key>ru</key> + <value>Отключить отборы при выборе значений</value> + + 10 + + Boolean + + + true + + + true + + ОК @@ -692,7 +969,7 @@ <name>ОК</name> </handler> </action> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <parameters> @@ -755,6 +1032,18 @@ <types>Boolean</types> </valueType> </parameters> + <parameters> + <name>ОтключитьСвязиПараметровВыбора</name> + <valueType> + <types>Boolean</types> + </valueType> + </parameters> + <parameters> + <name>РежимРазработчика</name> + <valueType> + <types>Boolean</types> + </valueType> + </parameters> <commandInterface> <navigationPanel/> <commandBar/> diff --git a/SSL/src/DataProcessors/ГрупповоеИзменениеРеквизитов/Forms/ДополнительныеПараметры/Module.bsl b/SSL/src/DataProcessors/ГрупповоеИзменениеРеквизитов/Forms/ДополнительныеПараметры/Module.bsl index 355a14a78..ce271e77b 100644 --- a/SSL/src/DataProcessors/ГрупповоеИзменениеРеквизитов/Forms/ДополнительныеПараметры/Module.bsl +++ b/SSL/src/DataProcessors/ГрупповоеИзменениеРеквизитов/Forms/ДополнительныеПараметры/Module.bsl @@ -12,15 +12,20 @@ Параметры.Свойство("НастройкаПорции", НастройкаПорции); Параметры.Свойство("ПроцентОбъектовВПорции", ПроцентОбъектовВПорции); Параметры.Свойство("ЧислоОбъектовВПорции", ЧислоОбъектовВПорции); - Параметры.Свойство("ПрерыватьПриОшибке", ПрерыватьПриОшибке); + Параметры.Свойство("РежимРазработчика", РежимРазработчика); + Параметры.Свойство("ОтключитьСвязиПараметровВыбора", ОтключитьСвязиПараметровВыбора); + ЕстьПравоАдминистрированияДанных = ПравоДоступа("АдминистрированиеДанных", Метаданные); КлючСохраненияПоложенияОкна = ?(ЕстьПравоАдминистрированияДанных, "ЕстьПравоАдминистрированияДанных", "НетПраваАдминистрированияДанных"); - Если Не Параметры.КонтекстныйВызов И ЕстьПравоАдминистрированияДанных Тогда + + МожноПоказыватьСлужебныеРеквизиты = Не Параметры.КонтекстныйВызов И ЕстьПравоАдминистрированияДанных; + Элементы.ГруппаПоказыватьСлужебныеРеквизиты.Видимость = МожноПоказыватьСлужебныеРеквизиты; + Элементы.РежимРазработчика.Видимость = МожноПоказыватьСлужебныеРеквизиты; + Элементы.ОтключитьСвязиПараметровВыбора.Видимость = МожноПоказыватьСлужебныеРеквизиты; + + Если МожноПоказыватьСлужебныеРеквизиты Тогда Параметры.Свойство("ПоказыватьСлужебныеРеквизиты", ПоказыватьСлужебныеРеквизиты); - Элементы.ГруппаПоказыватьСлужебныеРеквизиты.Видимость = Истина; - Иначе - Элементы.ГруппаПоказыватьСлужебныеРеквизиты.Видимость = Ложь; КонецЕсли; Элементы.ГруппаОбрабатыватьРекурсивно.Видимость = Параметры.КонтекстныйВызов И Параметры.УчитыватьИерархию; @@ -60,6 +65,8 @@ РезультатВыбора.Вставить("ЧислоОбъектовВПорции", ЧислоОбъектовВПорции); РезультатВыбора.Вставить("ПрерыватьПриОшибке", ИзменятьВТранзакции Или ПрерыватьПриОшибке); РезультатВыбора.Вставить("ПоказыватьСлужебныеРеквизиты", ПоказыватьСлужебныеРеквизиты); + РезультатВыбора.Вставить("РежимРазработчика", РежимРазработчика); + РезультатВыбора.Вставить("ОтключитьСвязиПараметровВыбора", ОтключитьСвязиПараметровВыбора); ОповеститьОВыборе(РезультатВыбора); diff --git a/SSL/src/DataProcessors/ГрупповоеИзменениеРеквизитов/Forms/РедактированиеФормулы/Form.form b/SSL/src/DataProcessors/ГрупповоеИзменениеРеквизитов/Forms/РедактированиеФормулы/Form.form new file mode 100644 index 000000000..112ce2b83 --- /dev/null +++ b/SSL/src/DataProcessors/ГрупповоеИзменениеРеквизитов/Forms/РедактированиеФормулы/Form.form @@ -0,0 +1,2046 @@ +<?xml version="1.0" encoding="UTF-8"?> +<form:Form xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:core="http://g5.1c.ru/v8/dt/mcore" xmlns:form="http://g5.1c.ru/v8/dt/form"> + <items xsi:type="form:FormGroup"> + <name>Группа</name> + <id>1</id> + <items xsi:type="form:FormGroup"> + <name>ГруппаОсновная</name> + <id>2</id> + <items xsi:type="form:FormGroup"> + <name>ГруппаОперанды</name> + <id>18</id> + <items xsi:type="form:FormGroup"> + <name>ГруппаОперандыСтраницы</name> + <id>26</id> + <items xsi:type="form:FormGroup"> + <name>СтраницаДеревоОперандов</name> + <id>67</id> + <items xsi:type="form:Table"> + <name>ДеревоОперандов</name> + <id>69</id> + <visible>true</visible> + <enabled>true</enabled> + <userVisible> + <common>true</common> + </userVisible> + <dataPath xsi:type="form:DataPath"> + <segments>ДеревоОперандов</segments> + </dataPath> + <titleLocation>None</titleLocation> + <excludedCommands>Add</excludedCommands> + <excludedCommands>Change</excludedCommands> + <excludedCommands>Copy</excludedCommands> + <excludedCommands>Delete</excludedCommands> + <excludedCommands>HierarchicalList</excludedCommands> + <excludedCommands>List</excludedCommands> + <excludedCommands>Tree</excludedCommands> + <items xsi:type="form:FormGroup"> + <name>ДеревоОперандовГруппаПредставлениеКодКартинки</name> + <id>85</id> + <items xsi:type="form:FormField"> + <name>ДеревоОперандовКодКартинки</name> + <id>79</id> + <visible>true</visible> + <enabled>true</enabled> + <userVisible> + <common>true</common> + </userVisible> + <dataPath xsi:type="form:DataPath"> + <segments>ДеревоОперандов.КодКартинки</segments> + </dataPath> + <extendedTooltip> + <name>ДеревоОперандовКодКартинкиРасширеннаяПодсказка</name> + <id>81</id> + <type>Label</type> + <autoMaxWidth>true</autoMaxWidth> + <autoMaxHeight>true</autoMaxHeight> + <extInfo xsi:type="form:LabelDecorationExtInfo"> + <horizontalAlign>Left</horizontalAlign> + </extInfo> + </extendedTooltip> + <contextMenu> + <name>ДеревоОперандовКодКартинкиКонтекстноеМеню</name> + <id>80</id> + <autoFill>true</autoFill> + </contextMenu> + <type>PictureField</type> + <editMode>Auto</editMode> + <showInHeader>true</showInHeader> + <headerHorizontalAlign>Left</headerHorizontalAlign> + <showInFooter>true</showInFooter> + <extInfo xsi:type="form:ImageFieldExtInfo"> + <autoMaxWidth>true</autoMaxWidth> + <autoMaxHeight>true</autoMaxHeight> + <horizontalStretch>true</horizontalStretch> + <verticalStretch>true</verticalStretch> + <border xsi:type="core:BorderDef"> + <style>Single</style> + <width>1</width> + </border> + </extInfo> + </items> + <items xsi:type="form:FormField"> + <name>ДеревоОперандовПредставление</name> + <id>76</id> + <visible>true</visible> + <enabled>true</enabled> + <userVisible> + <common>true</common> + </userVisible> + <dataPath xsi:type="form:DataPath"> + <segments>ДеревоОперандов.Представление</segments> + </dataPath> + <extendedTooltip> + <name>ДеревоОперандовПредставлениеРасширеннаяПодсказка</name> + <id>78</id> + <type>Label</type> + <autoMaxWidth>true</autoMaxWidth> + <autoMaxHeight>true</autoMaxHeight> + <extInfo xsi:type="form:LabelDecorationExtInfo"> + <horizontalAlign>Left</horizontalAlign> + </extInfo> + </extendedTooltip> + <contextMenu> + <name>ДеревоОперандовПредставлениеКонтекстноеМеню</name> + <id>77</id> + <autoFill>true</autoFill> + </contextMenu> + <type>InputField</type> + <readOnly>true</readOnly> + <editMode>Auto</editMode> + <showInHeader>true</showInHeader> + <headerHorizontalAlign>Left</headerHorizontalAlign> + <showInFooter>true</showInFooter> + <extInfo xsi:type="form:InputFieldExtInfo"> + <autoMaxWidth>true</autoMaxWidth> + <autoMaxHeight>true</autoMaxHeight> + <wrap>true</wrap> + <chooseType>true</chooseType> + <typeDomainEnabled>true</typeDomainEnabled> + <textEdit>true</textEdit> + <textSize>Normal</textSize> + </extInfo> + </items> + <visible>true</visible> + <enabled>true</enabled> + <userVisible> + <common>true</common> + </userVisible> + <title> + <key>ru</key> + <value>Дерево операндов группа представление код картинки</value> + + + ru + Дерево операндов группа представление код картинки + + + ДеревоОперандовГруппаПредставлениеКодКартинкиРасширеннаяПодсказка + 86 + Label + true + true + + Left + + + ColumnGroup + + InCell + auto + true + + + + ДеревоОперандовИдентификатор + 73 + true + + true + + + ДеревоОперандов.Идентификатор + + + ДеревоОперандовИдентификаторРасширеннаяПодсказка + 75 + Label + true + true + + Left + + + + ДеревоОперандовИдентификаторКонтекстноеМеню + 74 + true + + InputField + Auto + true + Left + true + + true + true + true + true + true + true + Normal + + + + ДеревоОперандовКоманднаяПанель + 71 + Left + + + Selection + ДеревоОперандовВыбор + + + DragStart + ДеревоОперандовНачалоПеретаскивания + + + ДеревоОперандовСтрокаПоиска + 87 + + ДеревоОперандовСтрокаПоискаРасширеннаяПодсказка + 89 + Label + true + true + + Left + + + + ДеревоОперандовСтрокаПоискаКонтекстноеМеню + 88 + true + + ДеревоОперандов + + true + + + + ДеревоОперандовСостояниеПросмотра + 90 + + ДеревоОперандовСостояниеПросмотраРасширеннаяПодсказка + 92 + Label + true + true + + Left + + + + ДеревоОперандовСостояниеПросмотраКонтекстноеМеню + 91 + true + + ViewStatusAddition + ДеревоОперандов + + true + + + + ДеревоОперандовУправлениеПоиском + 93 + + ДеревоОперандовУправлениеПоискомРасширеннаяПодсказка + 95 + Label + true + true + + Left + + + + ДеревоОперандовУправлениеПоискомКонтекстноеМеню + 94 + true + + SearchControlAddition + ДеревоОперандов + + true + + + + ДеревоОперандовРасширеннаяПодсказка + 72 + Label + true + true + + Left + + + + ДеревоОперандовКонтекстноеМеню + 70 + true + + Tree + true + true + true + true + true + 1 + 1 + AutoUse + AutoUse + true + true + false + true + Auto + Auto + true + true + true + true + + ДеревоОперандов.КодКартинки + + None + None + None + true + + true + true + + true + + + <key>ru</key> + <value>Страница дерево операндов</value> + + + ru + Страница дерево операндов + + + СтраницаДеревоОперандовРасширеннаяПодсказка + 68 + Label + true + true + + Left + + + Page + + Vertical + auto + + + + СтраницаЧисловыхОперандов + 27 + + Операнды + 3 + true + true + + true + + + Операнды + + false + None + + ОперандыПредставление + 50 + + <key>ru</key> + <value>Операнды</value> + + true + true + + true + + + Операнды.Представление + + + ОперандыПредставлениеРасширеннаяПодсказка + 52 + Label + true + true + + Left + + + + ОперандыПредставлениеКонтекстноеМеню + 51 + true + + InputField + true + Auto + true + Left + true + + true + true + true + true + true + true + Normal + + + + ОперандыИдентификатор + 21 + true + + true + + + Операнды.Идентификатор + + + ОперандыИдентификаторExtendedTooltip + 40 + Label + true + true + + Left + + + + ОперандыИдентификаторКонтекстноеМеню + 22 + true + + InputField + Auto + true + Left + true + + true + true + true + true + true + true + Normal + + + + ОперандыЗначение + 53 + + <key>ru</key> + <value>Значение</value> + + true + true + + true + + + Операнды.Значение + + + ОперандыЗначениеРасширеннаяПодсказка + 55 + Label + true + true + + Left + + + + ОперандыЗначениеКонтекстноеМеню + 54 + true + + InputField + Auto + true + Left + true + + true + true + true + false + true + true + true + true + Normal + + + None + + ОперандыКоманднаяПанель + 5 + Left + true + + + Selection + ОперандыВыбор + + + DragStart + ОперандыНачалоПеретаскивания + + + DragEnd + ОперандыОкончаниеПеретаскивания + + + ОперандыСтрокаПоиска + 96 + + ОперандыСтрокаПоискаРасширеннаяПодсказка + 98 + Label + true + true + + Left + + + + ОперандыСтрокаПоискаКонтекстноеМеню + 97 + true + + Операнды + + true + + + + ОперандыСостояниеПросмотра + 99 + + ОперандыСостояниеПросмотраРасширеннаяПодсказка + 101 + Label + true + true + + Left + + + + ОперандыСостояниеПросмотраКонтекстноеМеню + 100 + true + + ViewStatusAddition + Операнды + + true + + + + ОперандыУправлениеПоиском + 102 + + ОперандыУправлениеПоискомРасширеннаяПодсказка + 104 + Label + true + true + + Left + + + + ОперандыУправлениеПоискомКонтекстноеМеню + 103 + true + + SearchControlAddition + Операнды + + true + + + + ОперандыExtendedTooltip + 39 + Label + true + true + + Left + + + + ОперандыКонтекстноеМеню + 4 + true + + Tree + true + true + true + true + true + MultiRow + 1 + 1 + AutoUse + AutoUse + true + true + false + true + Auto + Auto + true + true + true + true + + Операнды.ИндексКартинки + + + CommonPicture.КоллекцияПиктограммЭлементов + + None + None + None + true + + + true + true + + true + + + <key>ru</key> + <value>Страница числовых операндов</value> + + + ru + Страница числовых операндов + + + СтраницаЧисловыхОперандовExtendedTooltip + 38 + Label + true + true + + Left + + + Page + + Vertical + + + + СтраницаСтроковыхОперандов + 28 + + КомпоновщикНастроек + 29 + true + true + + true + + + КомпоновщикНастроек.Settings.Filter.FilterAvailableFields + + None + None + + КомпоновщикНастроекКоманднаяПанель + 31 + Left + true + + + Selection + КомпоновщикНастроекНастройкиВыборДоступныеПоляВыбораВыбор + + + DragStart + КомпоновщикНастроекНачалоПеретаскивания + + + КомпоновщикНастроекСтрокаПоиска + 105 + + КомпоновщикНастроекСтрокаПоискаРасширеннаяПодсказка + 107 + Label + true + true + + Left + + + + КомпоновщикНастроекСтрокаПоискаКонтекстноеМеню + 106 + true + + КомпоновщикНастроек + + true + + + + КомпоновщикНастроекСостояниеПросмотра + 108 + + КомпоновщикНастроекСостояниеПросмотраРасширеннаяПодсказка + 110 + Label + true + true + + Left + + + + КомпоновщикНастроекСостояниеПросмотраКонтекстноеМеню + 109 + true + + ViewStatusAddition + КомпоновщикНастроек + + true + + + + КомпоновщикНастроекУправлениеПоиском + 111 + + КомпоновщикНастроекУправлениеПоискомРасширеннаяПодсказка + 113 + Label + true + true + + Left + + + + КомпоновщикНастроекУправлениеПоискомКонтекстноеМеню + 112 + true + + SearchControlAddition + КомпоновщикНастроек + + true + + + + КомпоновщикНастроекExtendedTooltip + 42 + Label + true + true + + Left + + + + КомпоновщикНастроекКонтекстноеМеню + 30 + true + + Tree + true + true + true + 60 + true + true + 15 + true + true + MultiRow +
        true
        + 1 + 1 + AutoUse + AutoUse + true + true + false + false + false + Auto + Auto + true + true + true + true + None + None + None + true +
        + true + true + + true + + + <key>ru</key> + <value>Страница строковых операндов</value> + + + ru + Страница строковых операндов + + + СтраницаСтроковыхОперандовExtendedTooltip + 41 + Label + true + true + + Left + + + Page + + Vertical + +
        + true + true + + true + + + <key>ru</key> + <value>Группа операнды страницы</value> + + + ru + Группа операнды страницы + + + ГруппаОперандыСтраницыExtendedTooltip + 37 + Label + true + true + + Left + + + Pages + + Auto + + + true + true + + true + + + <key>ru</key> + <value>Операнды</value> + + + ru + Операнды + + + ГруппаОперандыExtendedTooltip + 36 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + WeakSeparation + true + true + auto + Auto + Auto + + + + ГруппаОператоры + 19 + + Операторы + 8 + true + true + + true + + + Операторы + + false + None + + ОператорыОператор + 11 + true + true + + true + + + Операторы.Наименование + + + ОператорыОператорExtendedTooltip + 45 + Label + true + true + + Left + + + + ОператорыОператорКонтекстноеМеню + 12 + true + + InputField + Auto + true + Left + true + + true + true + true + true + true + true + Normal + + + None + + ОператорыКоманднаяПанель + 10 + Left + true + + + Selection + ОператорыВыбор + + + DragStart + ОператорыНачалоПеретаскивания + + + DragEnd + ОператорыОкончаниеПеретаскивания + + + ОператорыСтрокаПоиска + 114 + + ОператорыСтрокаПоискаРасширеннаяПодсказка + 116 + Label + true + true + + Left + + + + ОператорыСтрокаПоискаКонтекстноеМеню + 115 + true + + Операторы + + true + + + + ОператорыСостояниеПросмотра + 117 + + ОператорыСостояниеПросмотраРасширеннаяПодсказка + 119 + Label + true + true + + Left + + + + ОператорыСостояниеПросмотраКонтекстноеМеню + 118 + true + + ViewStatusAddition + Операторы + + true + + + + ОператорыУправлениеПоиском + 120 + + ОператорыУправлениеПоискомРасширеннаяПодсказка + 122 + Label + true + true + + Left + + + + ОператорыУправлениеПоискомКонтекстноеМеню + 121 + true + + SearchControlAddition + Операторы + + true + + + + ОператорыExtendedTooltip + 44 + Label + true + true + + Left + + + + ОператорыКонтекстноеМеню + 9 + true + + Tree + true + true + true + true + true + true + MultiRow + 1 + 1 + AutoUse + AutoUse + true + true + false + true + Auto + Auto + true + true + true + None + None + None + true + + true + true + + true + + + <key>ru</key> + <value>Операторы и функции</value> + + + ru + Операторы и функции + + + ГруппаОператорыExtendedTooltip + 43 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + WeakSeparation + true + true + auto + Auto + Auto + + + true + true + + true + + + <key>ru</key> + <value>Группа основная</value> + + + ru + Группа основная + + + ГруппаОсновнаяExtendedTooltip + 35 + Label + true + true + + Left + + + UsualGroup + + Auto + true + true + Auto + Auto + + + + ДекорацияПояснение + 56 + true + true + + true + + + ДекорацияПояснениеРасширеннаяПодсказка + 58 + Label + true + true + + Left + + + + ДекорацияПояснениеКонтекстноеМеню + 57 + true + + Label + true + true + + Style.ПоясняющийТекст + + + Left + + + + Формула + 13 + true + true + + true + + + Формула + + None + + OnChange + ФормулаПриИзменении + + + ФормулаExtendedTooltip + 46 + Label + true + true + + Left + + + + ФормулаКонтекстноеМеню + 14 + true + + TextDocumentField + Enter + true + Left + true + + 50 + true + 10 + true + true + true + + + true + true + + true + + + ГруппаExtendedTooltip + 34 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + true + true + Auto + Auto + + + + ГруппаПредставление + 62 + + Представление + 47 + true + true + + true + + + Представление + + + ПредставлениеРасширеннаяПодсказка + 49 + Label + true + true + + Left + + + + ПредставлениеКонтекстноеМеню + 48 + true + + InputField + Enter + true + Left + true + + true + true + true + true + true + true + Normal + + + + ДекорацияАвтоСумма + 64 + true + false + + true + + + ДекорацияАвтоСуммаExtendedTooltip + 66 + Label + true + true + + Left + + + + ДекорацияАвтоСуммаКонтекстноеМеню + 65 + true + + 3 + true + 1 + true + + + + Вычисление + 59 + true + true + + true + + + Вычисление + + None + + ВычислениеРасширеннаяПодсказка + 61 + Label + true + true + + Left + + + + ВычислениеКонтекстноеМеню + 60 + true + + InputField + true + Enter + true + Left + true + + true + true + true + true + true + true + Normal + + + true + + true + + + <key>ru</key> + <value>Группа представление</value> + + + ru + Группа представление + + + ГруппаПредставлениеРасширеннаяПодсказка + 63 + Label + true + true + + Left + + + UsualGroup + + Auto + true + true + Auto + Auto + + + + ФормаКоманднаяПанель + -1 + + ОК + 20 + true + true + + true + + false + + ОКExtendedTooltip + 32 + Label + true + true + + Left + + + Form.Command.ОК + Auto + true + true + true + UserCmds + Auto + + + Проверить + 17 + true + true + + true + + false + + ПроверитьExtendedTooltip + 33 + Label + true + true + + Left + + + Form.Command.Проверить + Normal + Auto + true + true + UserCmds + Auto + + Left + true + + + BeforeClose + ПередЗакрытием + + + OnCreateAtServer + ПриСозданииНаСервере + + DontBlock + true + true + true + Vertical + true + true + true + UseIfNecessary + auto + true + + Формула + + <key>ru</key> + <value>Формула</value> + + 1 + + String + + + + true + + + true + + true + + + Операторы + + <key>ru</key> + <value>Операторы</value> + + 3 + + ValueTree + + + true + + + true + + + Наименование + + <key>ru</key> + <value>Операторы</value> + + 1 + + String + + + + true + + + true + + + + Оператор + + <key>ru</key> + <value>Оператор</value> + + 2 + + String + + + + true + + + true + + + + Сдвиг + + <key>ru</key> + <value>Сдвиг</value> + + 3 + + Number + + 10 + + + + true + + + true + + + + + Операнды + + <key>ru</key> + <value>Операнды</value> + + 4 + + ValueTable + + + true + + + true + + + Идентификатор + + <key>ru</key> + <value>Идентификатор</value> + + 1 + + String + + 50 + + + + true + + + true + + + + ИндексКартинки + + <key>ru</key> + <value>Индекс картинки</value> + + 2 + + Number + + 1 + true + + + + true + + + true + + + + ПометкаУдаления + + <key>ru</key> + <value>Пометка удаления</value> + + 3 + + Boolean + + + true + + + true + + + + Значение + + <key>ru</key> + <value>Значение</value> + + 4 + + Number + + 15 + 3 + + + + true + + + true + + + + Представление + + <key>ru</key> + <value>Представление</value> + + 5 + + String + + + + true + + + true + + + + + СтроковаяФормула + + <key>ru</key> + <value>Строковая формула</value> + + 2 + + Boolean + + + true + + + true + + + + КомпоновщикНастроек + + <key>ru</key> + <value>Компоновщик настроек</value> + + 5 + + DataCompositionSettingsComposer + + + true + + + true + + + + НаборСвойств + + <key>ru</key> + <value>Набор свойств</value> + + 6 + + + true + + + true + + + + ИсходнаяФормула + + <key>ru</key> + <value>Исходная формула</value> + + 7 + + String + + + + true + + + true + + + + Представление + + <key>ru</key> + <value>Представление</value> + + 8 + + String + + + + true + + + true + + + + Вычисление + + <key>ru</key> + <value>Вычисление</value> + + 9 + + String + + + + true + + + true + + + + Расширенный + + <key>ru</key> + <value>Расширенный</value> + + 10 + + Boolean + + + true + + + true + + + + ВключитьЗначение + + <key>ru</key> + <value>Включить значение</value> + + 11 + + Boolean + + + true + + + true + + + + ПараметрыРасшифровки + + <key>ru</key> + <value>Параметры расшифровки</value> + + 13 + + + true + + + true + + + + ДеревоОперандов + + <key>ru</key> + <value>Дерево операндов</value> + + 14 + + ValueTree + + + true + + + true + + true + + Идентификатор + + <key>ru</key> + <value>Идентификатор</value> + + 1 + + String + + 100 + + + + true + + + true + + + + Представление + + <key>ru</key> + <value>Представление</value> + + 3 + + String + + 150 + + + + true + + + true + + + + КодКартинки + + <key>ru</key> + <value>Код картинки</value> + + 8 + + Number + + 10 + true + + + + true + + + true + + + + + ИспользуетсяДеревоОперандов + + <key>ru</key> + <value>Используется дерево операндов</value> + + 15 + + Boolean + + + true + + + true + + + + ТипРезультата + + <key>ru</key> + <value>Тип результата</value> + + 16 + + TypeDescription + + + true + + + true + + + + ФормулаДляВычисленияВЗапросе + + <key>ru</key> + <value>Формула для вычисления в запросе</value> + + 17 + + Boolean + + + true + + + true + + + + Объект + 18 + + DataProcessorObject.ГрупповоеИзменениеРеквизитов + + + true + + + true + + + Объект.ИзменятьВТранзакции + + + Объект.ПрерыватьПриОшибке + +
        true
        +
        + + Проверить + + <key>ru</key> + <value>Проверить формулу</value> + + 1 + + ru + Проверить формулу + + + true + + + + Проверить + + + TextPicture + DontUse + Auto + + + ОК + + <key>ru</key> + <value>Сохранить и закрыть</value> + + 2 + + ru + ОК + + + true + + + + ОК + + + DontUse + 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..2a99d7e8f --- /dev/null +++ b/SSL/src/DataProcessors/ГрупповоеИзменениеРеквизитов/Forms/РедактированиеФормулы/Help/ru.html @@ -0,0 +1,8 @@ + +

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

        +

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

        +

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

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

         

        \ No newline at end of file diff --git a/SSL/src/DataProcessors/ГрупповоеИзменениеРеквизитов/Forms/РедактированиеФормулы/Module.bsl b/SSL/src/DataProcessors/ГрупповоеИзменениеРеквизитов/Forms/РедактированиеФормулы/Module.bsl new file mode 100644 index 000000000..4ca684011 --- /dev/null +++ b/SSL/src/DataProcessors/ГрупповоеИзменениеРеквизитов/Forms/РедактированиеФормулы/Module.bsl @@ -0,0 +1,751 @@ + +#Область ОбработчикиСобытийФормы + +&НаСервере +Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) + + // Пропускаем инициализацию, чтобы гарантировать получение формы при передаче параметра "АвтоТест". + Если Параметры.Свойство("АвтоТест") Тогда + Возврат; + КонецЕсли; + + Формула = Параметры.Формула; + ИсходнаяФормула = Параметры.Формула; + + Параметры.Свойство("СтроковаяФормула", СтроковаяФормула); + Параметры.Свойство("ИспользуетсяДеревоОперандов", ИспользуетсяДеревоОперандов); + + Элементы.ГруппаОперандыСтраницы.ТекущаяСтраница = Элементы.СтраницаЧисловыхОперандов; + Операнды.Загрузить(ПолучитьИзВременногоХранилища(Параметры.Операнды)); + Для Каждого ТекСтрока Из Операнды Цикл + Если ТекСтрока.ПометкаУдаления Тогда + ТекСтрока.ИндексКартинки = 3; + Иначе + ТекСтрока.ИндексКартинки = 2; + КонецЕсли; + КонецЦикла; + + ДеревоОператоров = ПолучитьСтандартноеДеревоОператоров(); + ЗначениеВРеквизитФормы(ДеревоОператоров, "Операторы"); + + Если Параметры.Свойство("ОперандыЗаголовок") Тогда + Элементы.ГруппаОперанды.Заголовок = Параметры.ОперандыЗаголовок; + Элементы.ГруппаОперанды.Подсказка = Параметры.ОперандыЗаголовок; + КонецЕсли; + + УстановитьСвойствоЭлементаФормы( + Элементы, + "Операнды", + "ИзменятьСоставСтрок", + Ложь); + + УстановитьВидимость(); + +КонецПроцедуры + +&НаКлиенте +Процедура ПередЗакрытием(Отказ, СтандартнаяОбработка) + + СтандартнаяОбработка = Ложь; + Если Модифицированность И ЗначениеЗаполнено(ИсходнаяФормула) И ИсходнаяФормула <> Формула Тогда + Отказ = Истина; + Ответ = Неопределено; + + ПоказатьВопрос(Новый ОписаниеОповещения("ПередЗакрытиемЗавершение", ЭтотОбъект), НСтр("ru='Данные были изменены. Сохранить изменения?'"), РежимДиалогаВопрос.ДаНетОтмена); + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура ПередЗакрытиемЗавершение(РезультатВопроса, ДополнительныеПараметры) Экспорт + + Ответ = РезультатВопроса; + Если Ответ = КодВозвратаДиалога.Да Тогда + Если ПроверитьФормулу(Формула, ПолучитьМассивОперандов(), "Формула", СтроковаяФормула) Тогда + Модифицированность = Ложь; + Закрыть(Формула); + КонецЕсли; + ИначеЕсли Ответ = КодВозвратаДиалога.Нет Тогда + Модифицированность = Ложь; + Закрыть(Неопределено); + КонецЕсли; + +КонецПроцедуры + +#КонецОбласти + +#Область ОбработчикиСобытийЭлементовШапкиФормы + +&НаКлиенте +Процедура КомпоновщикНастроекНастройкиВыборДоступныеПоляВыбораВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка) + + ТекстСтроки = Строка(КомпоновщикНастроек.Настройки.ДоступныеПоляПорядка.ПолучитьОбъектПоИдентификатору(ВыбраннаяСтрока).Поле); + Операнд = ОбработатьТекстОперанда(ТекстСтроки); + ВставитьТекстВФормулу(Операнд); + +КонецПроцедуры + +&НаКлиенте +Процедура КомпоновщикНастроекНачалоПеретаскивания(Элемент, ПараметрыПеретаскивания, Выполнение) + + ТекстЭлемента = Строка(КомпоновщикНастроек.Настройки.ДоступныеПоляПорядка.ПолучитьОбъектПоИдентификатору(Элементы.КомпоновщикНастроек.ТекущаяСтрока).Поле); + ПараметрыПеретаскивания.Значение = ОбработатьТекстОперанда(ТекстЭлемента); + +КонецПроцедуры + +#КонецОбласти + +#Область ОбработчикиСобытийЭлементовТаблицыФормыОперанды + +&НаКлиенте +Процедура ОперандыВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка) + + Если Поле.Имя = "ОперандыЗначение" Тогда + Возврат; + КонецЕсли; + + Если Элемент.ТекущиеДанные.ПометкаУдаления Тогда + + ПоказатьВопрос( + Новый ОписаниеОповещения("ОперандыВыборЗавершение", ЭтотОбъект), + НСтр("ru = 'Выбранный элемент помечен на удаление. + |Продолжить?'"), + РежимДиалогаВопрос.ДаНет); + СтандартнаяОбработка = Ложь; + Возврат; + КонецЕсли; + + СтандартнаяОбработка = Ложь; + ВставитьОперандВФормулу(); + +КонецПроцедуры + +&НаКлиенте +Процедура ОперандыВыборЗавершение(РезультатВопроса, ДополнительныеПараметры) Экспорт + + Если РезультатВопроса = КодВозвратаДиалога.Да Тогда + ВставитьОперандВФормулу(); + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура ОперандыНачалоПеретаскивания(Элемент, ПараметрыПеретаскивания, СтандартнаяОбработка) + + ПараметрыПеретаскивания.Значение = ПолучитьТекстОперандаДляВставки(Элемент.ТекущиеДанные.Идентификатор); + +КонецПроцедуры + +&НаКлиенте +Процедура ОперандыОкончаниеПеретаскивания(Элемент, ПараметрыПеретаскивания, СтандартнаяОбработка) + + Если Элемент.ТекущиеДанные.ПометкаУдаления Тогда + Ответ = Неопределено; + ПоказатьВопрос(Новый ОписаниеОповещения("ОперандыОкончаниеПеретаскиванияЗавершение", ЭтотОбъект), НСтр("ru = 'Выбранный элемент помечен на удаление'") + Символы.ПС + НСтр("ru = 'Продолжить?'"), РежимДиалогаВопрос.ДаНет); + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура ОперандыОкончаниеПеретаскиванияЗавершение(РезультатВопроса, ДополнительныеПараметры) Экспорт + + Ответ = РезультатВопроса; + + Если Ответ = КодВозвратаДиалога.Нет Тогда + + НачалоСтроки = 0; + НачалоКолонки = 0; + КонецСтроки = 0; + КонецКолонки = 0; + + Элементы.Формула.ПолучитьГраницыВыделения(НачалоСтроки, НачалоКолонки, КонецСтроки, КонецКолонки); + Элементы.Формула.ВыделенныйТекст = ""; + Элементы.Формула.УстановитьГраницыВыделения(НачалоСтроки, НачалоКолонки, НачалоСтроки, НачалоКолонки); + + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура ДеревоОперандовВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка) + + ТекущиеДанные = Элементы.ДеревоОперандов.ТекущиеДанные; + Если ТекущиеДанные = Неопределено Тогда + Возврат; + КонецЕсли; + + СтрокаРодитель = ТекущиеДанные.ПолучитьРодителя(); + Если СтрокаРодитель = Неопределено Тогда + Возврат; + КонецЕсли; + + ВставитьТекстВФормулу(ПолучитьТекстОперандаДляВставки( + СтрокаРодитель.Идентификатор + "." + ТекущиеДанные.Идентификатор)); + +КонецПроцедуры + +#КонецОбласти + +#Область ОбработчикиСобытийЭлементовТаблицыФормыДеревоОперандов + +&НаКлиенте +Процедура ДеревоОперандовНачалоПеретаскивания(Элемент, ПараметрыПеретаскивания, Выполнение) + + Если ПараметрыПеретаскивания.Значение = Неопределено Тогда + Возврат; + КонецЕсли; + + СтрокаДерева = ДеревоОперандов.НайтиПоИдентификатору(ПараметрыПеретаскивания.Значение); + СтрокаРодитель = СтрокаДерева.ПолучитьРодителя(); + Если СтрокаРодитель = Неопределено Тогда + Выполнение = Ложь; + Возврат; + Иначе + ПараметрыПеретаскивания.Значение = + ПолучитьТекстОперандаДляВставки(СтрокаРодитель.Идентификатор +"." + СтрокаДерева.Идентификатор); + КонецЕсли; + +КонецПроцедуры + +#КонецОбласти + +#Область ОбработчикиСобытийЭлементовТаблицыФормыОператоры + +&НаКлиенте +Процедура ОператорыВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка) + + СтандартнаяОбработка = Ложь; + ВставитьОператорВФормулу(); + +КонецПроцедуры + +&НаКлиенте +Процедура ОператорыНачалоПеретаскивания(Элемент, ПараметрыПеретаскивания, СтандартнаяОбработка) + + Если ЗначениеЗаполнено(Элемент.ТекущиеДанные.Оператор) Тогда + ПараметрыПеретаскивания.Значение = Элемент.ТекущиеДанные.Оператор; + Иначе + СтандартнаяОбработка = Ложь; + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура ОператорыОкончаниеПеретаскивания(Элемент, ПараметрыПеретаскивания, СтандартнаяОбработка) + + Если Элемент.ТекущиеДанные.Оператор = "Формат(,)" Тогда + ФорматСтроки = Новый КонструкторФорматнойСтроки; + ФорматСтроки.Показать(Новый ОписаниеОповещения("ОператорыОкончаниеПеретаскиванияЗавершение", ЭтотОбъект, Новый Структура("ФорматСтроки", ФорматСтроки))); + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура ОператорыОкончаниеПеретаскиванияЗавершение(Текст, ДополнительныеПараметры) Экспорт + + ФорматСтроки = ДополнительныеПараметры.ФорматСтроки; + + + Если ЗначениеЗаполнено(ФорматСтроки.Текст) Тогда + ТекстДляВставки = "Формат( , """ + ФорматСтроки.Текст + """)"; + Элементы.Формула.ВыделенныйТекст = ТекстДляВставки; + КонецЕсли; + +КонецПроцедуры + +#КонецОбласти + +#Область ОбработчикиКомандФормы + +&НаКлиенте +Процедура ОК(Команда) + + ОчиститьСообщения(); + + Если ПроверитьФормулу(Формула, ПолучитьМассивОперандов(), "Формула", СтроковаяФормула) Тогда + Закрыть(Формула); + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура Проверить(Команда) + + ОчиститьСообщения(); + ПроверитьФормулуИнтерактивно(Формула, ПолучитьМассивОперандов(), "Формула", СтроковаяФормула); + +КонецПроцедуры + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +&НаКлиенте +Процедура ВставитьТекстВФормулу(ТекстДляВставки, Сдвиг = 0) + + СтрокаНач = 0; + СтрокаКон = 0; + КолонкаНач = 0; + КолонкаКон = 0; + + Элементы.Формула.ПолучитьГраницыВыделения(СтрокаНач, КолонкаНач, СтрокаКон, КолонкаКон); + + Если (КолонкаКон = КолонкаНач) И (КолонкаКон + СтрДлина(ТекстДляВставки)) > Элементы.Формула.Ширина / 8 Тогда + Элементы.Формула.ВыделенныйТекст = ""; + КонецЕсли; + + Элементы.Формула.ВыделенныйТекст = ТекстДляВставки; + + Если Не Сдвиг = 0 Тогда + Элементы.Формула.ПолучитьГраницыВыделения(СтрокаНач, КолонкаНач, СтрокаКон, КолонкаКон); + Элементы.Формула.УстановитьГраницыВыделения(СтрокаНач, КолонкаНач - Сдвиг, СтрокаКон, КолонкаКон - Сдвиг); + КонецЕсли; + + ТекущийЭлемент = Элементы.Формула; + +КонецПроцедуры + +&НаКлиенте +Процедура ВставитьОперандВФормулу() + + ВставитьТекстВФормулу(ПолучитьТекстОперандаДляВставки(Элементы.Операнды.ТекущиеДанные.Идентификатор)); + +КонецПроцедуры + +&НаКлиенте +Функция ПолучитьМассивОперандов() + + МассивОперандов = Новый Массив(); + Для Каждого ТекСтрока Из Операнды Цикл + МассивОперандов.Добавить(ТекСтрока.Идентификатор); + КонецЦикла; + + Возврат МассивОперандов; + +КонецФункции + +&НаКлиенте +Процедура ВставитьОператорВФормулу() + + Если Элементы.Операторы.ТекущиеДанные.Наименование = "Формат" Тогда + ФорматСтроки = Новый КонструкторФорматнойСтроки; + ФорматСтроки.Показать(Новый ОписаниеОповещения("ВставитьОператорВФормулуЗавершение", ЭтотОбъект, Новый Структура("ФорматСтроки", ФорматСтроки))); + Возврат; + Иначе + ВставитьТекстВФормулу(Элементы.Операторы.ТекущиеДанные.Оператор, Элементы.Операторы.ТекущиеДанные.Сдвиг); + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура ВставитьОператорВФормулуЗавершение(Текст, ДополнительныеПараметры) Экспорт + + ФорматСтроки = ДополнительныеПараметры.ФорматСтроки; + + Если ЗначениеЗаполнено(ФорматСтроки.Текст) Тогда + ТекстДляВставки = "Формат( , """ + ФорматСтроки.Текст + """)"; + ВставитьТекстВФормулу(ТекстДляВставки, Элементы.Операторы.ТекущиеДанные.Сдвиг); + Иначе + ВставитьТекстВФормулу(Элементы.Операторы.ТекущиеДанные.Оператор, Элементы.Операторы.ТекущиеДанные.Сдвиг); + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Функция ОбработатьТекстОперанда(ТекстОперанда) + + ТекстСтроки = ТекстОперанда; + ТекстСтроки = СтрЗаменить(ТекстСтроки, "[", ""); + ТекстСтроки = СтрЗаменить(ТекстСтроки, "]", ""); + Операнд = "[" + СтрЗаменить(ТекстСтроки, + ?(НаборСвойств.НаборСвойствНоменклатуры, "Номенклатура.", + ?(НЕ НаборСвойств.Свойство("НаборСвойствХарактеристик") ИЛИ НаборСвойств.НаборСвойствХарактеристик, "ХарактеристикаНоменклатуры.", "СерияНоменклатуры.")), "") + "]"; + + Возврат Операнд + +КонецФункции + +&НаКлиенте +Процедура ФормулаПриИзменении(Элемент) + + Если Расширенный Тогда + Представление = ""; + КонецЕсли; + + Если ВключитьЗначение Тогда + УстановитьПредставлениеВычисленияПоФормуле(Формула, Операнды, Вычисление); + КонецЕсли; + +КонецПроцедуры + +&НаСервере +Процедура УстановитьВидимость() + + УстановитьСвойствоЭлементаФормы( + Элементы, + "ОперандыИдентификатор", + "Видимость", + Не Расширенный); + + УстановитьСвойствоЭлементаФормы( + Элементы, + "ОперандыПредставление", + "Видимость", + Расширенный); + + УстановитьСвойствоЭлементаФормы( + Элементы, + "ОперандыЗначение", + "Видимость", + ВключитьЗначение); + + УстановитьСвойствоЭлементаФормы( + Элементы, + "Вычисление", + "Видимость", + ВключитьЗначение); + + УстановитьСвойствоЭлементаФормы( + Элементы, + "ДекорацияАвтоСумма", + "Видимость", + ВключитьЗначение); + + УстановитьСвойствоЭлементаФормы( + Элементы, + "Операнды", + "Шапка", + ВключитьЗначение); + + УстановитьСвойствоЭлементаФормы( + Элементы, + "Операторы", + "Шапка", + ВключитьЗначение); + +КонецПроцедуры + +&НаКлиентеНаСервереБезКонтекста +Процедура УстановитьПредставлениеВычисленияПоФормуле(Знач РасчетнаяФормула, Операнды, Представление) + + Если Не ЗначениеЗаполнено(РасчетнаяФормула) Тогда + Представление = ""; + Возврат; + КонецЕсли; + + РасчетнаяФормула = УдалениеНезначимыхСимволов(РасчетнаяФормула); + ВыводитьПромежуточныеВычисления = Ложь; + + МассивОперандов = ПолучитьМассивОперандовТекстовойФормулы(РасчетнаяФормула); + + Для каждого Операнд Из МассивОперандов Цикл + НайденныйСтроки = Операнды.НайтиСтроки(Новый Структура("Идентификатор", Операнд)); + Если НайденныйСтроки.Количество() = 1 Тогда + Если НЕ ВыводитьПромежуточныеВычисления Тогда + ВыводитьПромежуточныеВычисления = НЕ ПустаяСтрока(УдалениеНезначимыхСимволов(СтрЗаменить(РасчетнаяФормула, "["+Операнд+"]", ""))); + КонецЕсли; + РасчетнаяФормула = СтрЗаменить(РасчетнаяФормула, "["+Операнд+"]", Формат(НайденныйСтроки[0].Значение, "ЧРД=.; ЧН=0; ЧГ=0")); + КонецЕсли; + КонецЦикла; + + Попытка + РезультатВычисления = Формат(Вычислить(РасчетнаяФормула),"ЧЦ=15; ЧДЦ=3; ЧН=0"); + Исключение + Возврат; + КонецПопытки; + + Представление = ?(ВыводитьПромежуточныеВычисления, РасчетнаяФормула, "") + ?(ЗначениеЗаполнено(РасчетнаяФормула), " = ", "") + РезультатВычисления; + + Представление = УдалениеНезначимыхСимволов(Представление); + +КонецПроцедуры + +&НаКлиентеНаСервереБезКонтекста +Функция УдалениеНезначимыхСимволов(Знач ВходящаяСтрока) + + ВходящаяСтрока = СокрЛП(ВходящаяСтрока); + ДлинаСтроки = СтрДлина(ВходящаяСтрока); + КонечнаяСтрока = Строка(""); + + Пока ДлинаСтроки > 0 Цикл + + ПервыйСимвол = Лев(ВходящаяСтрока, 1); + + Если Не ПустаяСтрока(ПервыйСимвол) Тогда + КонечнаяСтрока = КонечнаяСтрока + ПервыйСимвол; + ДлинаСтроки = ДлинаСтроки - 1; + Отступ = 2; + Иначе + КонечнаяСтрока = КонечнаяСтрока + " "; + ВходящаяСтрока = СокрЛ(ВходящаяСтрока); + ДлинаСтроки = СтрДлина(ВходящаяСтрока); + Отступ = 1; + КонецЕсли; + + Если ДлинаСтроки > 1 Тогда + ВходящаяСтрока = Сред(ВходящаяСтрока, Отступ, ДлинаСтроки); + Иначе + КонечнаяСтрока = КонечнаяСтрока + Сред(ВходящаяСтрока, Отступ, 1); + ДлинаСтроки = 0; + КонецЕсли; + + КонецЦикла; + + Возврат КонечнаяСтрока; + +КонецФункции + +&НаСервере +Функция ПолучитьПустоеДеревоОператоров() + + Дерево = Новый ДеревоЗначений(); + Дерево.Колонки.Добавить("Наименование"); + Дерево.Колонки.Добавить("Оператор"); + Дерево.Колонки.Добавить("Сдвиг", Новый ОписаниеТипов("Число")); + + Возврат Дерево; + +КонецФункции + +&НаСервере +Функция ДобавитьГруппуОператоров(Дерево, Наименование) + + НоваяГруппа = Дерево.Строки.Добавить(); + НоваяГруппа.Наименование = Наименование; + + Возврат НоваяГруппа; + +КонецФункции + +&НаСервере +Функция ДобавитьОператор(Дерево, Родитель, Наименование, Оператор = Неопределено, Сдвиг = 0) + + НоваяСтрока = ?(Родитель <> Неопределено, Родитель.Строки.Добавить(), Дерево.Строки.Добавить()); + НоваяСтрока.Наименование = Наименование; + НоваяСтрока.Оператор = ?(ЗначениеЗаполнено(Оператор), Оператор, Наименование); + НоваяСтрока.Сдвиг = Сдвиг; + + Возврат НоваяСтрока; + +КонецФункции + +&НаСервере +Функция ПолучитьСтандартноеДеревоОператоров() + + Дерево = ПолучитьПустоеДеревоОператоров(); + + ГруппаОператоров = ДобавитьГруппуОператоров(Дерево, НСтр("ru='Разделители'")); + + ДобавитьОператор(Дерево, ГруппаОператоров, "/", " + ""/"" + "); + ДобавитьОператор(Дерево, ГруппаОператоров, "\", " + ""\"" + "); + ДобавитьОператор(Дерево, ГруппаОператоров, "|", " + ""|"" + "); + ДобавитьОператор(Дерево, ГруппаОператоров, "_", " + ""_"" + "); + ДобавитьОператор(Дерево, ГруппаОператоров, ",", " + "", "" + "); + ДобавитьОператор(Дерево, ГруппаОператоров, ".", " + "". "" + "); + ДобавитьОператор(Дерево, ГруппаОператоров, НСтр("ru='Пробел'"), " + "" "" + "); + ДобавитьОператор(Дерево, ГруппаОператоров, "(", " + "" ("" + "); + ДобавитьОператор(Дерево, ГруппаОператоров, ")", " + "") "" + "); + ДобавитьОператор(Дерево, ГруппаОператоров, """", " + """""""" + "); + + ГруппаОператоров = ДобавитьГруппуОператоров(Дерево, НСтр("ru='Операторы'")); + + ДобавитьОператор(Дерево, ГруппаОператоров, "+", " + "); + ДобавитьОператор(Дерево, ГруппаОператоров, "-", " - "); + ДобавитьОператор(Дерево, ГруппаОператоров, "*", " * "); + ДобавитьОператор(Дерево, ГруппаОператоров, "/", " / "); + + ГруппаОператоров = ДобавитьГруппуОператоров(Дерево, НСтр("ru='Логические операторы и константы'")); + ДобавитьОператор(Дерево, ГруппаОператоров, "<", " < "); + ДобавитьОператор(Дерево, ГруппаОператоров, ">", " > "); + ДобавитьОператор(Дерево, ГруппаОператоров, "<=", " <= "); + ДобавитьОператор(Дерево, ГруппаОператоров, ">=", " >= "); + ДобавитьОператор(Дерево, ГруппаОператоров, "=", " = "); + ДобавитьОператор(Дерево, ГруппаОператоров, "<>", " <> "); + ДобавитьОператор(Дерево, ГруппаОператоров, НСтр("ru='И'"), " " + НСтр("ru='И'") + " "); + ДобавитьОператор(Дерево, ГруппаОператоров, НСтр("ru='Или'"), " " + НСтр("ru='Или'") + " "); + ДобавитьОператор(Дерево, ГруппаОператоров, НСтр("ru='Не'"), " " + НСтр("ru='Не'") + " "); + ДобавитьОператор(Дерево, ГруппаОператоров, НСтр("ru='ИСТИНА'"), " " + НСтр("ru='ИСТИНА'") + " "); + ДобавитьОператор(Дерево, ГруппаОператоров, НСтр("ru='ЛОЖЬ'"), " " + НСтр("ru='ЛОЖЬ'") + " "); + + ГруппаОператоров = ДобавитьГруппуОператоров(Дерево, НСтр("ru='Числовые функции'")); + + ДобавитьОператор(Дерево, ГруппаОператоров, НСтр("ru='Максимум'"), НСтр("ru='Макс(,)'"), 2); + ДобавитьОператор(Дерево, ГруппаОператоров, НСтр("ru='Минимум'"), НСтр("ru='Мин(,)'"), 2); + ДобавитьОператор(Дерево, ГруппаОператоров, НСтр("ru='Округление'"), НСтр("ru='Окр(,)'"), 2); + ДобавитьОператор(Дерево, ГруппаОператоров, НСтр("ru='Целая часть'"), НСтр("ru='Цел()'"), 1); + + ГруппаОператоров = ДобавитьГруппуОператоров(Дерево, НСтр("ru='Строковые функции'")); + + ДобавитьОператор(Дерево, ГруппаОператоров, НСтр("ru='Строка'"), НСтр("ru='Строка()'")); + ДобавитьОператор(Дерево, ГруппаОператоров, НСтр("ru='ВРег'"), НСтр("ru='ВРег()'")); + ДобавитьОператор(Дерево, ГруппаОператоров, НСтр("ru='Лев'"), НСтр("ru='Лев()'")); + ДобавитьОператор(Дерево, ГруппаОператоров, НСтр("ru='НРег'"), НСтр("ru='НРег()'")); + ДобавитьОператор(Дерево, ГруппаОператоров, НСтр("ru='Прав'"), НСтр("ru='Прав()'")); + ДобавитьОператор(Дерево, ГруппаОператоров, НСтр("ru='СокрЛ'"), НСтр("ru='СокрЛ()'")); + ДобавитьОператор(Дерево, ГруппаОператоров, НСтр("ru='СокрЛП'"), НСтр("ru='СокрЛП()'")); + ДобавитьОператор(Дерево, ГруппаОператоров, НСтр("ru='СокрП'"), НСтр("ru='СокрП()'")); + ДобавитьОператор(Дерево, ГруппаОператоров, НСтр("ru='ТРег'"), НСтр("ru='ТРег()'")); + ДобавитьОператор(Дерево, ГруппаОператоров, НСтр("ru='СтрЗаменить'"), НСтр("ru='СтрЗаменить(,,)'")); + ДобавитьОператор(Дерево, ГруппаОператоров, НСтр("ru='СтрДлина'"), НСтр("ru='СтрДлина()'")); + + ГруппаОператоров = ДобавитьГруппуОператоров(Дерево, НСтр("ru='Прочие функции'")); + + ДобавитьОператор(Дерево, ГруппаОператоров, НСтр("ru='Условие'"), "?(,,)", 3); + ДобавитьОператор(Дерево, ГруппаОператоров, НСтр("ru='Предопределенное значение'"), НСтр("ru='ПредопределенноеЗначение()'")); + ДобавитьОператор(Дерево, ГруппаОператоров, НСтр("ru='Значение заполнено'"), НСтр("ru='ЗначениеЗаполнено()'")); + ДобавитьОператор(Дерево, ГруппаОператоров, НСтр("ru='Формат'"), НСтр("ru='Формат(,)'")); + + Возврат Дерево; + +КонецФункции + +&НаКлиентеНаСервереБезКонтекста +Функция ПолучитьТекстОперандаДляВставки(Операнд) + + Возврат "[" + Операнд + "]"; + +КонецФункции + +&НаКлиенте +Функция ПроверитьФормулу(Формула, Операнды, Знач Поле = "", СтроковаяФормула = Ложь) + + ПутьКДанным = ""; + Результат = Истина; + ВыводитьСообщения = Истина; + + Если ЗначениеЗаполнено(Формула) Тогда + + Если СтроковаяФормула Тогда + ТекстРасчета = """Строка"" + " + Формула; + ЗначениеЗамены = """1"""; + Иначе + ЗначениеЗамены = 1; + ТекстРасчета = Формула; + КонецЕсли; + + Для Каждого Операнд Из Операнды Цикл + ТекстРасчета = СтрЗаменить(ТекстРасчета, ПолучитьТекстОперандаДляВставки(Операнд), ЗначениеЗамены); + КонецЦикла; + + Если СтрНачинаетсяС(ТекстРасчета, "=") Тогда + ТекстРасчета = Сред(ТекстРасчета, 2); + КонецЕсли; + + Попытка + РезультатРасчета = Вычислить(ТекстРасчета); + + Если СтроковаяФормула Тогда + ТекстПроверки = СтрЗаменить(Формула, " ", ""); + ОтсутствиеРазделителей = СтрНайти(ТекстПроверки, "]["); + Если ОтсутствиеРазделителей > 0 Тогда + СообщитьПользователю( + НСтр("ru='В формуле обнаружены ошибки. Между операндами должен присутствовать оператор или разделитель'"), + Поле, + ПутьКДанным); + Результат = Ложь; + КонецЕсли; + КонецЕсли; + Исключение + Результат = Ложь; + СообщитьПользователю( + НСтр("ru='В формуле обнаружены ошибки. Проверьте формулу. Формулы должны составляться по правилам написания выражений на встроенном языке 1С:Предприятия.'"), + Поле, + ПутьКДанным); + КонецПопытки; + + КонецЕсли; + + Возврат Результат; + +КонецФункции + +&НаКлиентеНаСервереБезКонтекста +Функция ПолучитьМассивОперандовТекстовойФормулы(Формула) + + МассивОперандов = Новый Массив(); + + ТекстФормулы = СокрЛП(Формула); + Если СтрЧислоВхождений(ТекстФормулы, "[") <> СтрЧислоВхождений(ТекстФормулы, "]") Тогда + ЕстьОперанды = Ложь; + Иначе + ЕстьОперанды = Истина; + КонецЕсли; + + Пока ЕстьОперанды = Истина Цикл + НачалоОперанда = СтрНайти(ТекстФормулы, "["); + КонецОперанда = СтрНайти(ТекстФормулы, "]"); + + Если НачалоОперанда = 0 + Или КонецОперанда = 0 + Или НачалоОперанда > КонецОперанда Тогда + ЕстьОперанды = Ложь; + Прервать; + + КонецЕсли; + + ИмяОперанда = Сред(ТекстФормулы, НачалоОперанда + 1, КонецОперанда - НачалоОперанда - 1); + МассивОперандов.Добавить(ИмяОперанда); + ТекстФормулы = СтрЗаменить(ТекстФормулы, "[" + ИмяОперанда + "]", ""); + КонецПрошлогоОперанда = КонецОперанда; + + КонецЦикла; + + Возврат МассивОперандов + +КонецФункции + + +&НаКлиенте +Процедура ПроверитьФормулуИнтерактивно(Формула, Операнды, Знач Поле, СтроковаяФормула = Ложь) + + Если ЗначениеЗаполнено(Формула) Тогда + Если ПроверитьФормулу(Формула, Операнды, Поле, СтроковаяФормула) Тогда + ПоказатьОповещениеПользователя( + НСтр("ru = 'В формуле ошибок не обнаружено'"), + , + , + КартинкаИнформация32()); + КонецЕсли; + КонецЕсли; + +КонецПроцедуры + +&НаСервере +Функция КартинкаИнформация32() + Если ВерсияБСПСоответствуетТребованиям() Тогда + Возврат БиблиотекаКартинок["Информация32"]; + Иначе + Возврат Новый Картинка; + КонецЕсли; +КонецФункции + +&НаСервере +Функция ВерсияБСПСоответствуетТребованиям() + ОбработкаОбъект = РеквизитФормыВЗначение("Объект"); + Возврат ОбработкаОбъект.ВерсияБСПСоответствуетТребованиям(); +КонецФункции + +&НаСервере +Процедура УстановитьСвойствоЭлементаФормы(ЭлементыФормы, ИмяЭлемента, ИмяСвойства, Значение) + + ЭлементФормы = ЭлементыФормы.Найти(ИмяЭлемента); + Если ЭлементФормы <> Неопределено И ЭлементФормы[ИмяСвойства] <> Значение Тогда + ЭлементФормы[ИмяСвойства] = Значение; + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура СообщитьПользователю(Знач ТекстСообщенияПользователю, Знач Поле = "", Знач ПутьКДанным = "") + Сообщение = Новый СообщениеПользователю; + Сообщение.Текст = ТекстСообщенияПользователю; + Сообщение.Поле = Поле; + + Если НЕ ПустаяСтрока(ПутьКДанным) Тогда + Сообщение.ПутьКДанным = ПутьКДанным; + КонецЕсли; + + Сообщение.Сообщить(); +КонецПроцедуры + +#КонецОбласти diff --git a/SSL/src/DataProcessors/ГрупповоеИзменениеРеквизитов/Forms/Форма/Form.form b/SSL/src/DataProcessors/ГрупповоеИзменениеРеквизитов/Forms/Форма/Form.form index e216665e3..c07fe9e15 100644 --- a/SSL/src/DataProcessors/ГрупповоеИзменениеРеквизитов/Forms/Форма/Form.form +++ b/SSL/src/DataProcessors/ГрупповоеИзменениеРеквизитов/Forms/Форма/Form.form @@ -20,6 +20,10 @@ ПредставлениеИзменяемыхОбъектов + + OnChange + ПредставлениеИзменяемыхОбъектовПриИзменении + ПредставлениеИзменяемыхОбъектовРасширеннаяПодсказка 169 @@ -41,6 +45,10 @@ Left true + + AutoComplete + ПредставлениеИзменяемыхОбъектовАвтоПодбор + StartChoice ВидИзменяемыхОбъектовНачалоВыбора @@ -53,268 +61,17 @@ true true true + true Normal + + ru + Введите первые буквы вида элементов + - - КомпоновщикНастроекНастройкиОтбор - 170 - true - true - - true - - - КомпоновщикНастроек.Settings.Filter - - None - Detailed - SetPresentation - UserSettingItemProperties - - КомпоновщикНастроекНастройкиОтборКоманднаяПанель - 172 - - КомпоновщикНастроекНастройкиОтборДобавитьЭлементОтбора - 179 - - <key>ru</key> - <value>Добавить условие отбора</value> - - true - true - - true - - - КомпоновщикНастроекНастройкиОтборДобавитьЭлементОтбораРасширеннаяПодсказка - 180 - Label - true - true - - Left - - - Form.Item.КомпоновщикНастроекНастройкиОтбор.StandardCommand.AddFilterItem - Normal - Auto - true - true - UserCmds - Auto - - - КомпоновщикНастроекНастройкиОтборГруппа1 - 181 - true - true - - true - - - КомпоновщикНастроекНастройкиОтборГруппа1РасширеннаяПодсказка - 182 - Label - true - true - - Left - - - - Item.КомпоновщикНастроекНастройкиОтбор - - - Left - - - OnEditEnd - КомпоновщикНастроекНастройкиОтборПриОкончанииРедактирования - - - OnStartEdit - КомпоновщикНастроекНастройкиОтборПриНачалеРедактирования - - - AfterDeleteRow - КомпоновщикНастроекНастройкиОтборПослеУдаления - - - КомпоновщикНастроекНастройкиОтборСтрокаПоиска - 231 - - КомпоновщикНастроекНастройкиОтборСтрокаПоискаРасширеннаяПодсказка - 233 - Label - true - true - - Left - - - - КомпоновщикНастроекНастройкиОтборСтрокаПоискаКонтекстноеМеню - 232 - true - - КомпоновщикНастроекНастройкиОтбор - - true - - - - КомпоновщикНастроекНастройкиОтборСостояниеПросмотра - 234 - - КомпоновщикНастроекНастройкиОтборСостояниеПросмотраРасширеннаяПодсказка - 236 - Label - true - true - - Left - - - - КомпоновщикНастроекНастройкиОтборСостояниеПросмотраКонтекстноеМеню - 235 - true - - ViewStatusAddition - КомпоновщикНастроекНастройкиОтбор - - true - - - - КомпоновщикНастроекНастройкиОтборУправлениеПоиском - 237 - - КомпоновщикНастроекНастройкиОтборУправлениеПоискомРасширеннаяПодсказка - 239 - Label - true - true - - Left - - - - КомпоновщикНастроекНастройкиОтборУправлениеПоискомКонтекстноеМеню - 238 - true - - SearchControlAddition - КомпоновщикНастроекНастройкиОтбор - - true - - - - КомпоновщикНастроекНастройкиОтборРасширеннаяПодсказка - 173 - Label - true - true - - Left - - - - КомпоновщикНастроекНастройкиОтборКонтекстноеМеню - 171 - - КомпоновщикНастроекНастройкиОтборКонтекстноеМенюДобавитьЭлементОтбора - 225 - - <key>ru</key> - <value>Добавить условие отбора</value> - - true - true - - true - - - КомпоновщикНастроекНастройкиОтборКонтекстноеМенюДобавитьЭлементОтбораРасширеннаяПодсказка - 226 - Label - true - true - - Left - - - Form.Item.КомпоновщикНастроекНастройкиОтбор.StandardCommand.AddFilterItem - Normal - Auto - true - true - UserCmds - Auto - - - КомпоновщикНастроекНастройкиОтборКонтекстноеМенюГруппа1 - 229 - true - true - - true - - - КомпоновщикНастроекНастройкиОтборКонтекстноеМенюГруппа1РасширеннаяПодсказка - 230 - Label - true - true - - Left - - - - Item.КомпоновщикНастроекНастройкиОтбор - - - - Tree - true - true - true - true - 7 - true - true - MultiRow -
        true
        - 1 - 1 - AutoUse - AutoUse - true - true - false - Auto - Auto - ExpandAllLevels - true - true - true - true - None - None - None - true - All - false -
        НастройкаОтбора 107 - - <key>ru</key> - <value>Элементы не выбраны</value> - true true @@ -343,6 +100,7 @@ Click НастройкаОтбораНажатие + true Left
        @@ -371,7 +129,6 @@ UsualGroup - Vertical Auto WeakSeparation true @@ -649,6 +406,10 @@ Left true + + StartChoice + РеквизитыОбъектаЗначениеНачалоВыбора + true true true @@ -663,6 +424,14 @@ 118 Left + + DragCheck + РеквизитыОбъектаПроверкаПеретаскивания + + + Drag + РеквизитыОбъектаПеретаскивание + BeforeRowChange Подключаемый_ПередНачаломИзменения @@ -784,6 +553,110 @@ true + + ГруппаНетРеквизитов + 261 + + Декорация2 + 263 + true + true + + true + + + Декорация2РасширеннаяПодсказка + 265 + Label + true + true + + Left + + + + Декорация2КонтекстноеМеню + 264 + true + + 5 + true + 3 + true + + + CommonPicture.Информация32 + + + + + Декорация1 + 258 + + <key>ru</key> + <value>У выбранных объектов нет общих реквизитов.</value> + + true + true + + true + + + Декорация1РасширеннаяПодсказка + 260 + Label + true + true + + Left + + + + Декорация1КонтекстноеМеню + 259 + true + + Label + true + 3 + true + + Left + Center + + + true + + true + + + <key>ru</key> + <value>Группа нет реквизитов</value> + + + ru + Группа нет реквизитов + + + ГруппаНетРеквизитовРасширеннаяПодсказка + 262 + Label + true + true + + Left + + + UsualGroup + + Auto + NormalSeparation + true + true + Auto + Auto + + true true @@ -873,7 +746,12 @@ true 2 true + true + + URLProcessing + ПояснениеОНастроенныхИзмененияхОбработкаНавигационнойСсылки + Left @@ -1836,7 +1714,6 @@ true true true - UseIfNecessary auto true @@ -2176,24 +2053,6 @@ true - - ВидИзменяемыхОбъектов - - <key>ru</key> - <value>Изменять</value> - - 22 - - String - - - - true - - - true - - КомпоновщикНастроек @@ -2435,6 +2294,23 @@ <common>true</common> </edit> </columns> + <columns> + <name>ЭтоСтандартныйРеквизит</name> + <title> + <key>ru</key> + <value>Это стандартный реквизит</value> + + 12 + + Boolean + + + true + + + true + + ТабличныеЧастиОбъекта @@ -2668,6 +2544,94 @@ + + ВидыИзменяемыхОбъектов + + <key>ru</key> + <value>Виды изменяемых объектов</value> + + 34 + + String + + + + true + + + true + + + + РежимРазработчика + + <key>ru</key> + <value>Режим разработчика</value> + + 35 + + Boolean + + + true + + + true + + + + ОтключитьСвязиПараметровВыбора + + <key>ru</key> + <value>Отключить связи параметров выбора</value> + + 36 + + Boolean + + + true + + + true + + + + ПояснениеПоАвтонумерации + + <key>ru</key> + <value>Пояснение по автонумерации</value> + + 37 + + String + + + + true + + + true + + + + АдресХранилищаДереваОператоров + + <key>ru</key> + <value>Адрес хранилища дерева операторов</value> + + 38 + + String + + + + true + + + true + + Назад @@ -2687,7 +2651,7 @@ <name>Назад</name> </handler> </action> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <formCommands> @@ -2709,7 +2673,7 @@ <name>Далее</name> </handler> </action> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <formCommands> @@ -2731,7 +2695,7 @@ <name>Изменить</name> </handler> </action> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <formCommands> @@ -2753,7 +2717,7 @@ <name>НастроитьПараметрыИзменения</name> </handler> </action> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <formCommands> @@ -2770,7 +2734,7 @@ <use> <common>true</common> </use> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <parameters> diff --git a/SSL/src/DataProcessors/ГрупповоеИзменениеРеквизитов/Forms/Форма/Module.bsl b/SSL/src/DataProcessors/ГрупповоеИзменениеРеквизитов/Forms/Форма/Module.bsl index fb6a1344b..da2cb7474 100644 --- a/SSL/src/DataProcessors/ГрупповоеИзменениеРеквизитов/Forms/Форма/Module.bsl +++ b/SSL/src/DataProcessors/ГрупповоеИзменениеРеквизитов/Forms/Форма/Module.bsl @@ -1,4 +1,5 @@ + #Область ОбработчикиСобытийФормы &НаСервере @@ -16,7 +17,6 @@ ЗагрузитьНастройкиОбработки(); КонтекстныйВызов = ТипЗнч(Параметры.МассивОбъектов) = Тип("Массив"); - Элементы.ОтборОбъектов.Видимость = Не КонтекстныйВызов; Элементы.ФормаНазад.Видимость = Ложь; Если КонтекстныйВызов Тогда ВыполнитьДействияПриКонтекстномОткрытии(); @@ -25,6 +25,11 @@ КонецЕсли; СформироватьПояснениеОНастроенныхИзменениях(); ОбновитьВидимостьЭлементов(); + + Если Не КонтекстныйВызов Тогда + РежимОткрытияОкна = РежимОткрытияОкнаФормы.Независимый; + КонецЕсли; + КонецПроцедуры &НаКлиенте @@ -34,6 +39,8 @@ ПерезаполнитьСтруктуруРеквизитовОбъекта = Ложь; Если ТипЗнч(ВыбранноеЗначение) = Тип("Структура") Тогда + Объект.РежимРазработчика = ВыбранноеЗначение.РежимРазработчика; + ОтключитьСвязиПараметровВыбора = ВыбранноеЗначение.ОтключитьСвязиПараметровВыбора; Если УчитыватьИерархию И ОбрабатыватьРекурсивно <> ВыбранноеЗначение.ОбрабатыватьРекурсивно Тогда ОбрабатыватьРекурсивно = ВыбранноеЗначение.ОбрабатыватьРекурсивно; ПерезаполнитьСтруктуруРеквизитовОбъекта = Истина; @@ -51,7 +58,7 @@ ТОПроцентОбъектовВПорции = ВыбранноеЗначение.ПроцентОбъектовВПорции; ТОЧислоОбъектовВПорции = ВыбранноеЗначение.ЧислоОбъектовВПорции; - Если ПерезаполнитьСтруктуруРеквизитовОбъекта И Не ПустаяСтрока(ВидИзменяемыхОбъектов) Тогда + Если ПерезаполнитьСтруктуруРеквизитовОбъекта И Не ПустаяСтрока(ВидыИзменяемыхОбъектов) Тогда СохраненныеНастройки = Неопределено; ЗагрузитьМетаданныеОбъекта(Истина, СохраненныеНастройки); Если СохраненныеНастройки <> Неопределено Тогда @@ -89,7 +96,7 @@ КонецЕсли; СохранитьНастройкиОбработки( - ВидИзменяемыхОбъектов, + ВидыИзменяемыхОбъектов, Объект.ИзменятьВТранзакции, Объект.ПрерыватьПриОшибке, ТОНастройкаПорции, @@ -108,20 +115,44 @@ СтандартнаяОбработка = Ложь; ОписаниеОповещения = Новый ОписаниеОповещения("ВидИзменяемыхОбъектовВыборСделан", ЭтотОбъект); ПараметрыФормы = Новый Структура; - ПараметрыФормы.Вставить("ТекущийОбъект", ВидИзменяемыхОбъектов); + ПараметрыФормы.Вставить("ВыбранныеТипы", ВидыИзменяемыхОбъектов); ПараметрыФормы.Вставить("ПоказыватьСкрытые", Объект.ПоказыватьСлужебныеРеквизиты); ОткрытьФорму(ПолноеИмяФормы("ВыборВидаОбъектов"), ПараметрыФормы, , , , , ОписаниеОповещения); КонецПроцедуры +&НаКлиенте +Процедура ПредставлениеИзменяемыхОбъектовАвтоПодбор(Элемент, Текст, ДанныеВыбора, ПараметрыПолученияДанных, Ожидание, СтандартнаяОбработка) + Если Элементы.ПредставлениеИзменяемыхОбъектов.СписокВыбора.Количество() = 0 Тогда + ЗаполнитьСписокТиповОбъектов(); + КонецЕсли; +КонецПроцедуры + +&НаКлиенте +Процедура ПредставлениеИзменяемыхОбъектовПриИзменении(Элемент) + ВыбранныйТип = Элементы.ПредставлениеИзменяемыхОбъектов.СписокВыбора.НайтиПоЗначению(ПредставлениеИзменяемыхОбъектов); + Если ВыбранныйТип = Неопределено Тогда + Для Каждого Тип Из Элементы.ПредставлениеИзменяемыхОбъектов.СписокВыбора Цикл + Если СтрНайти(НРег(Тип.Представление), НРег(ПредставлениеИзменяемыхОбъектов)) = 1 Тогда + ВыбранныйТип = Тип; + Прервать; + КонецЕсли; + КонецЦикла; + КонецЕсли; + + Если ВыбранныйТип = Неопределено Тогда + ПредставлениеИзменяемыхОбъектов = ПредставлениеИзменяемыхОбъектов(); + Иначе + ПредставлениеИзменяемыхОбъектов = ВыбранныйТип.Представление; + ВидыИзменяемыхОбъектов = ВыбранныйТип.Значение; + ВыбранныеОбъектыВКонтексте.Очистить(); + ПерестроитьИнтерфейсФормыДляВыбранногоВидаОбъектов(); + КонецЕсли; +КонецПроцедуры + #КонецОбласти #Область ОбработчикиСобытийЭлементовТаблицыФормыКомпоновщикНастроекНастройкиОтбор -&НаКлиенте -Процедура КомпоновщикНастроекНастройкиОтборПриОкончанииРедактирования(Элемент, НоваяСтрока, ОтменаРедактирования) - ПодключитьОбработчикОжидания("ОбновитьНадписи", 1, Истина); -КонецПроцедуры - &НаКлиенте Процедура ОбновитьНадписи() ОбновитьНадписиСервер(); @@ -133,16 +164,6 @@ СформироватьПояснениеОНастроенныхИзменениях(); КонецПроцедуры -&НаКлиенте -Процедура КомпоновщикНастроекНастройкиОтборПослеУдаления(Элемент) - ОбновитьНадписи(); -КонецПроцедуры - -&НаКлиенте -Процедура КомпоновщикНастроекНастройкиОтборПриНачалеРедактирования(Элемент, НоваяСтрока, Копирование) - ОтключитьОбработчикОжидания("ОбновитьНадписи"); -КонецПроцедуры - #КонецОбласти #Область ОбработчикиСобытийЭлементовТаблицыФормыОбъектыКоторыеНеУдалосьИзменить @@ -164,6 +185,66 @@ #КонецОбласти +#Область ОбработчикиСобытийЭлементовТаблицыФормыРеквизитыОбъекта + +&НаКлиенте +Процедура РеквизитыОбъектаПроверкаПеретаскивания(Элемент, ПараметрыПеретаскивания, СтандартнаяОбработка, Строка, Поле) + Если Поле <> Неопределено И Поле.Имя = Элементы.РеквизитыОбъектаЗначение.Имя + И РеквизитыОбъекта.НайтиПоИдентификатору(Строка).ДопустимыеТипы.СодержитТип(Тип("Строка")) + И Не СтрНачинаетсяС(РеквизитыОбъекта.НайтиПоИдентификатору(Строка).Значение, "'") Тогда + СтандартнаяОбработка = Ложь; + КонецЕсли; +КонецПроцедуры + +&НаКлиенте +Процедура РеквизитыОбъектаПеретаскивание(Элемент, ПараметрыПеретаскивания, СтандартнаяОбработка, Строка, Поле) + ОписаниеРеквизита = РеквизитыОбъекта.НайтиПоИдентификатору(ПараметрыПеретаскивания.Значение[0]); + ШаблонВставки = "[%1]"; + + ТекстДляВставки = ПодставитьПараметрыВСтроку(ШаблонВставки, ОписаниеРеквизита.Представление); + ТекущиеДанные = РеквизитыОбъекта.НайтиПоИдентификатору(Строка); + Если Не ПустаяСтрока(ТекущиеДанные.Значение) Тогда + ТекстДляВставки = "+" + ТекстДляВставки; + КонецЕсли; + ТекущиеДанные.Значение = Строка(ТекущиеДанные.Значение) + ТекстДляВставки; + Если Не СтрНачинаетсяС(СокрЛ(ТекущиеДанные.Значение), "=") Тогда + ТекущиеДанные.Значение = "=" + ТекущиеДанные.Значение; + КонецЕсли; + ТекущиеДанные.Изменять = Истина; +КонецПроцедуры + +&НаКлиенте +Процедура РеквизитыОбъектаЗначениеНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка) + ТекущиеДанные = Элементы.РеквизитыОбъекта.ТекущиеДанные; + Если ТекущиеДанные.ДопустимыеТипы.Типы().Количество() = 1 И ТекущиеДанные.ДопустимыеТипы.СодержитТип(Тип("Строка")) Тогда + СтандартнаяОбработка = Ложь; + ОписаниеОповещения = Новый ОписаниеОповещения("РеквизитыОбъектаЗначениеЗавершениеВыбора", ЭтотОбъект, ТекущиеДанные); + ОткрытьФорму(ПолноеИмяФормы("РедактированиеФормулы"), ПараметрыКонструктора(ТекущиеДанные.Значение), , , , , + ОписаниеОповещения); + КонецЕсли; +КонецПроцедуры + +&НаКлиенте +Функция ЕстьОшибкиВВыражениях() + Результат = Ложь; + Для Индекс = 0 По РеквизитыОбъекта.Количество() - 1 Цикл + ОписаниеРеквизита = РеквизитыОбъекта[Индекс]; + Если ОписаниеРеквизита.Изменять И ТипЗнч(ОписаниеРеквизита.Значение) = Тип("Строка") И СтрНачинаетсяС(ОписаниеРеквизита.Значение, "=") Тогда + ТекстОшибки = ""; + Если ЕстьОшибкаВВыражении(ОписаниеРеквизита.Значение, ТекстОшибки) Тогда + Результат = Истина; + Сообщение = Новый СообщениеПользователю; + Сообщение.Поле = ПодставитьПараметрыВСтроку("РеквизитыОбъекта[%1].Значение", Формат(Индекс, "ЧГ=0")); + Сообщение.Текст = ТекстОшибки; + Сообщение.Сообщить(); + КонецЕсли; + КонецЕсли; + КонецЦикла; + Возврат Результат; +КонецФункции + +#КонецОбласти + #Область ОбработчикиКомандФормы &НаКлиенте @@ -210,6 +291,10 @@ ПоказатьПредупреждение(, НСтр("ru = 'Не указаны элементы для изменения'")); Возврат; КонецЕсли; + + Если ЕстьОшибкиВВыражениях() Тогда + Возврат; + КонецЕсли; Если ЕстьНастроенныеОтборы() Тогда ВыполнитьИзменениеПроверкаОтбораВыполнена(); @@ -249,6 +334,9 @@ ПараметрыФормы.Вставить("УчитыватьИерархию", УчитыватьИерархию); ПараметрыФормы.Вставить("ПоказыватьСлужебныеРеквизиты", Объект.ПоказыватьСлужебныеРеквизиты); ПараметрыФормы.Вставить("КонтекстныйВызов", КонтекстныйВызов); + ПараметрыФормы.Вставить("РежимРазработчика", Объект.РежимРазработчика); + ПараметрыФормы.Вставить("ОтключитьСвязиПараметровВыбора", ОтключитьСвязиПараметровВыбора); + ОткрытьФорму(ПолноеИмяФормы("ДополнительныеПараметры"), ПараметрыФормы, ЭтотОбъект); @@ -299,11 +387,61 @@ #Область СлужебныеПроцедурыИФункции +&НаКлиенте +Процедура РеквизитыОбъектаЗначениеЗавершениеВыбора(Формула, ТекущиеДанные) Экспорт + Если Формула = Неопределено Тогда + Возврат; + КонецЕсли; + Если Не СтрНачинаетсяС(Формула, "=") Тогда + Формула = "=" + Формула; + КонецЕсли; + ТекущиеДанные.Значение = Формула; +КонецПроцедуры + &НаСервере Процедура УстановитьУсловноеОформление() УсловноеОформление.Элементы.Очистить(); + // Информация об автонумерации. Эта настройка должна быть всегда первой. + + Элемент = УсловноеОформление.Элементы.Добавить(); + + ПолеЭлемента = Элемент.Поля.Элементы.Добавить(); + ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.РеквизитыОбъектаЗначение.Имя); + + ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); + ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("РеквизитыОбъекта.Изменять"); + ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно; + ОтборЭлемента.ПравоеЗначение = Истина; + + ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); + ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("РеквизитыОбъекта.ЭтоСтандартныйРеквизит"); + ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно; + ОтборЭлемента.ПравоеЗначение = Истина; + + ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); + ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("РеквизитыОбъекта.Значение"); + ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.НеЗаполнено; + + ГруппаОтбора = Элемент.Отбор.Элементы.Добавить(Тип("ГруппаЭлементовОтбораКомпоновкиДанных")); + ГруппаОтбора.ТипГруппы = ТипГруппыЭлементовОтбораКомпоновкиДанных.ГруппаИли; + + ОтборЭлемента = ГруппаОтбора.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); + ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("РеквизитыОбъекта.Имя"); + ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно; + ОтборЭлемента.ПравоеЗначение = "Код"; + + ОтборЭлемента = ГруппаОтбора.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); + ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("РеквизитыОбъекта.Имя"); + ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно; + ОтборЭлемента.ПравоеЗначение = "Номер"; + + Элемент.Оформление.УстановитьЗначениеПараметра("Текст", ПояснениеПоАвтонумерации); + Элемент.Оформление.УстановитьЗначениеПараметра("ЦветТекста", WebЦвета.Серый); + + // Заблокированный реквизит + Элемент = УсловноеОформление.Элементы.Добавить(); ПолеЭлемента = Элемент.Поля.Элементы.Добавить(); @@ -315,7 +453,7 @@ ОтборЭлемента.ПравоеЗначение = Истина; Элемент.Оформление.УстановитьЗначениеПараметра("ЦветТекста", Новый Цвет(192, 192, 192)); - + КонецПроцедуры &НаКлиенте @@ -347,25 +485,33 @@ &НаКлиенте Функция ПолноеИмяФормы(Имя) - ЧастиИмени = РазложитьСтрокуВМассивПодстрок(ИмяФормы, "."); + ЧастиИмени = СтрРазделить(ИмяФормы, "."); ЧастиИмени[3] = Имя; - Возврат СтрокаИзМассиваПодстрок(ЧастиИмени, "."); + Возврат СтрСоединить(ЧастиИмени, "."); КонецФункции &НаСервере Процедура ВыполнитьДействияПриКонтекстномОткрытии() - ТипПереданныхОбъектов = ТипЗнч(Параметры.МассивОбъектов[0]); + ШаблонЗаголовка = НСтр("ru = 'Изменение выделенных элементов ""%1"" (%2)'"); + ТипыОбъектов = Новый СписокЗначений; Для Каждого ПереданныйОбъект Из Параметры.МассивОбъектов Цикл - Если ТипЗнч(ПереданныйОбъект) <> ТипПереданныхОбъектов Тогда - ВызватьИсключение НСтр("ru = 'Групповое изменение возможно только для элементов одного типа.'"); + ОбъектМетаданных = ПереданныйОбъект.Метаданные(); + ИмяОбъекта = ОбъектМетаданных.ПолноеИмя(); + Если ТипыОбъектов.НайтиПоЗначению(ИмяОбъекта) = Неопределено Тогда + ТипыОбъектов.Добавить(ИмяОбъекта, ОбъектМетаданных.Представление()); КонецЕсли; КонецЦикла; - КоличествоОбъектов = Параметры.МассивОбъектов.Количество(); - ШаблонЗаголовка = НСтр("ru = 'Изменение выделенных элементов ""%1"" (%2)'"); - Заголовок = ПодставитьПараметрыВСтроку(ШаблонЗаголовка, ТипПереданныхОбъектов, КоличествоОбъектов); + ПредставлениеТипа = Параметры.МассивОбъектов[0].Метаданные().Представление(); + Если ТипыОбъектов.Количество() > 1 Тогда + ПредставлениеТипа = ""; + ШаблонЗаголовка = НСтр("ru = 'Изменение выделенных элементов (%2)'"); + КонецЕсли; + + КоличествоОбъектов = Параметры.МассивОбъектов.Количество(); + Заголовок = ПодставитьПараметрыВСтроку(ШаблонЗаголовка, ПредставлениеТипа, КоличествоОбъектов); ЗапретРедактированияВстроен = Метаданные.НайтиПоПолномуИмени("ОбщийМодуль.ЗапретРедактированияРеквизитовОбъектовКлиент") <> Неопределено; СвойстваВстроены = Метаданные.НайтиПоПолномуИмени("ОбщийМодуль.УправлениеСвойствами") <> Неопределено; @@ -376,8 +522,7 @@ Элементы.ИзменяемыеРеквизиты.Отображение = ОтображениеОбычнойГруппы.Нет; Элементы.ИзменяемыеРеквизиты.ОтображатьЗаголовок = Ложь; - МетаданныеОбъекта = Параметры.МассивОбъектов[0].Метаданные(); - ВидИзменяемыхОбъектов = МетаданныеОбъекта.ПолноеИмя(); + ВидыИзменяемыхОбъектов = СтрСоединить(ТипыОбъектов.ВыгрузитьЗначения(), ","); // Подгружаем историю операций с данным типом объектов. ЗагрузитьИсториюОпераций(); @@ -390,20 +535,25 @@ ВыбранныеОбъектыВКонтексте.ЗагрузитьЗначения(Параметры.МассивОбъектов); ИнициализироватьКомпоновщикНастроек(); - // Если нет заблокированных реквизитов скрываем кнопку "РазрешитьРедактированиеРеквизитов". - Отбор = Новый Структура("ЗаблокированныйРеквизит", Истина); - - Если ЗапретРедактированияВстроен - И РеквизитыОбъекта.НайтиСтроки(Отбор).Количество() > 0 Тогда - Если МетаданныеОбъекта.Формы.Найти("РазблокированиеРеквизитов") = Неопределено Тогда - ЕстьФормаРазблокированияРеквизитов = Ложь; - Иначе - ЕстьФормаРазблокированияРеквизитов = Истина; - ПолноеИмяФормыРаботыСБлокируемымиРеквизитами = ВидИзменяемыхОбъектов + ".Форма.РазблокированиеРеквизитов"; + Если ТипыОбъектов.Количество() > 0 Тогда + МетаданныеОбъекта = Метаданные.НайтиПоПолномуИмени(ТипыОбъектов[0].Значение); + + Если ЗапретРедактированияВстроен И РеквизитыОбъекта.НайтиСтроки(Новый Структура("ЗаблокированныйРеквизит", Истина)).Количество() > 0 Тогда + Если МетаданныеОбъекта.Формы.Найти("РазблокированиеРеквизитов") = Неопределено Тогда + ЕстьФормаРазблокированияРеквизитов = Ложь; + Иначе + ЕстьФормаРазблокированияРеквизитов = Истина; + ПолноеИмяФормыРаботыСБлокируемымиРеквизитами = ТипыОбъектов[0].Значение + ".Форма.РазблокированиеРеквизитов"; + КонецЕсли; КонецЕсли; КонецЕсли; ЗагрузитьМетаданныеОбъекта(); + + ПредставлениеИзменяемыхОбъектов = ПредставлениеИзменяемыхОбъектов(); + ОбновитьНадписьКоличествоВыбранных(); + + Элементы.ПредставлениеИзменяемыхОбъектов.ТолькоПросмотр = Истина; КонецПроцедуры &НаКлиенте @@ -434,7 +584,7 @@ // Представление - представление настройки пользователю. Настройки = ХранилищеОбщихНастроекЗагрузить( "ГрупповоеИзменениеОбъектов", - "ИсторияИзменений/" + ВидИзменяемыхОбъектов); + "ИсторияИзменений/" + ВидыИзменяемыхОбъектов); Если Настройки = Неопределено Тогда Настройки = Новый Массив; @@ -453,7 +603,7 @@ Настройки.Удалить(19); КонецЕсли; - ХранилищеОбщихНастроекСохранить("ГрупповоеИзменениеОбъектов", "ИсторияИзменений/" + ВидИзменяемыхОбъектов, Настройки); + ХранилищеОбщихНастроекСохранить("ГрупповоеИзменениеОбъектов", "ИсторияИзменений/" + ВидыИзменяемыхОбъектов, Настройки); ЗагрузитьИсториюОпераций(); ЗаполнитьПодменюРанееИзмененныеРеквизиты(); @@ -464,7 +614,7 @@ ИсторияОперацийСписок.Очистить(); - ИсторияИзменений = ХранилищеОбщихНастроекЗагрузить("ГрупповоеИзменениеОбъектов", "ИсторияИзменений/" + ВидИзменяемыхОбъектов); + ИсторияИзменений = ХранилищеОбщихНастроекЗагрузить("ГрупповоеИзменениеОбъектов", "ИсторияИзменений/" + ВидыИзменяемыхОбъектов); Если ИсторияИзменений = Неопределено Тогда Возврат; КонецЕсли; @@ -505,7 +655,7 @@ ПараметрыВыбораСтрока = СтрПолучитьСтроку(ПараметрыВыбора, Индекс); - ПараметрыВыбораМассивСтрок = РазложитьСтрокуВМассивПодстрок(ПараметрыВыбораСтрока, ";"); + ПараметрыВыбораМассивСтрок = СтрРазделить(ПараметрыВыбораСтрока, ";"); ИмяПоляОтбора = СокрЛП(ПараметрыВыбораМассивСтрок[0]); ИмяТипа = СокрЛП(ПараметрыВыбораМассивСтрок[1]); XMLСтрока = СокрЛП(ПараметрыВыбораМассивСтрок[2]); @@ -514,11 +664,11 @@ Массив = Новый Массив; - XMLСтрокаМассив = РазложитьСтрокуВМассивПодстрок(XMLСтрока, "#"); + XMLСтрокаМассив = СтрРазделить(XMLСтрока, "#"); Для Каждого Элемент Из XMLСтрокаМассив Цикл - ЭлементМассив = РазложитьСтрокуВМассивПодстрок(Элемент, "*"); + ЭлементМассив = СтрРазделить(Элемент, "*"); ЗначениеЭлемента = XMLЗначение(Тип(ЭлементМассив[0]), ЭлементМассив[1]); @@ -572,7 +722,7 @@ СтруктураНастроек = ХранилищеОбщихНастроекЗагрузить( "Обработка.ГрупповоеИзменениеОбъектов", - ВидИзменяемыхОбъектов); + ВидыИзменяемыхОбъектов); Если СтруктураНастроек <> Неопределено Тогда Объект.ИзменятьВТранзакции = СтруктураНастроек.ИзменятьВТранзакции; @@ -851,7 +1001,11 @@ УстановитьКнопкиНаВремяИзменения(Ложь); ЗавершающиеДействияПриИзмененииСервер(); - ОповеститьОбИзменении(ТипИзменяемыхОбъектов()); + + Для Каждого Тип Из ТипыИзменяемыхОбъектов() Цикл + ОповеститьОбИзменении(Тип); + КонецЦикла; + Оповестить("ЗавершениеГрупповогоИзмененияОбъектов"); ОбработкаЗавершена = ТекущееСостояниеИзменения.КоличествоИзмененных = ТекущееСостояниеИзменения.КоличествоОбъектовДляОбработки; @@ -926,9 +1080,13 @@ КонецПроцедуры &НаСервере -Функция ТипИзменяемыхОбъектов() - МенеджерОбъекта = МенеджерОбъектаПоПолномуИмени(ВидИзменяемыхОбъектов); - Возврат ТипЗнч(МенеджерОбъекта.ПустаяСсылка()); +Функция ТипыИзменяемыхОбъектов() + Результат = Новый Массив; + Для Каждого ВидОбъектов Из СтрРазделить(ВидыИзменяемыхОбъектов, ",", Ложь) Цикл + МенеджерОбъекта = МенеджерОбъектаПоПолномуИмени(ВидОбъектов); + Результат.Добавить(ТипЗнч(МенеджерОбъекта.ПустаяСсылка())); + КонецЦикла; + Возврат Результат; КонецФункции &НаСервере @@ -1105,8 +1263,10 @@ СтруктураПараметров.Вставить("ИспользуютсяДопРеквизиты", ОбработкаОбъект.ИспользуютсяДопРеквизиты); СтруктураПараметров.Вставить("ИспользуютсяДопСведения", ОбработкаОбъект.ИспользуютсяДопСведения); СтруктураПараметров.Вставить("ИзменяемыеРеквизиты", ИзменяемыеРеквизиты()); + СтруктураПараметров.Вставить("ДоступныеРеквизиты", ТаблицаЗначенийВМассив(РеквизитыОбъекта.Выгрузить(, "Имя,Представление,ВидОперации,Свойство"))); СтруктураПараметров.Вставить("ИзменяемыеТабличныеЧасти", ИзменяемыеТабличныеЧасти()); СтруктураПараметров.Вставить("ОбъектыДляИзменения", Новый ХранилищеЗначения(ВыбранныеОбъекты())); + СтруктураПараметров.Вставить("РежимРазработчика", ОбработкаОбъект.РежимРазработчика); ЭтоВнешняяОбработка = Не Метаданные.Обработки.Содержит(ОбработкаОбъект.Метаданные()); Если Не Объект.ИзменятьВТранзакции Или Не ПодсистемаСуществует("СтандартныеПодсистемы.БазоваяФункциональность") Тогда @@ -1117,14 +1277,19 @@ НаименованиеЗадания = НСтр("ru = 'Групповое изменение элементов'"); ВыполняемыйМетод = "ДлительныеОперации.ВыполнитьПроцедуруМодуляОбъектаОбработки"; - СтруктураПараметров = Новый Структура("ИмяОбработки,ИмяМетода,ПараметрыВыполнения,ЭтоВнешняяОбработка,ДополнительнаяОбработкаСсылка", - ИмяОбработки(), "ВыполнитьИзменениеОбъектов", СтруктураПараметров, ЭтоВнешняяОбработка, ДополнительнаяОбработкаСсылка); + + ПараметрыЗадания = Новый Структура; + ПараметрыЗадания.Вставить("ИмяОбработки", ИмяОбработки()); + ПараметрыЗадания.Вставить("ИмяМетода", "ВыполнитьИзменениеОбъектов"); + ПараметрыЗадания.Вставить("ПараметрыВыполнения", СтруктураПараметров); + ПараметрыЗадания.Вставить("ЭтоВнешняяОбработка", ЭтоВнешняяОбработка); + ПараметрыЗадания.Вставить("ДополнительнаяОбработкаСсылка", ДополнительнаяОбработкаСсылка); МодульДлительныеОперации = ОбщийМодуль("ДлительныеОперации"); РезультатФоновогоЗадания = МодульДлительныеОперации.ЗапуститьВыполнениеВФоне( УникальныйИдентификатор, ВыполняемыйМетод, - СтруктураПараметров, + ПараметрыЗадания, НаименованиеЗадания); КонецЕсли; @@ -1136,7 +1301,7 @@ Функция ИмяОбработки() ОбработкаОбъект = РеквизитФормыВЗначение("Объект"); ЭтоВнешняяОбработка = Не Метаданные.Обработки.Содержит(ОбработкаОбъект.Метаданные()); - ЧастиИмени = РазложитьСтрокуВМассивПодстрок(ИмяФормы, "."); + ЧастиИмени = СтрРазделить(ИмяФормы, "."); Если ЭтоВнешняяОбработка Тогда Возврат ОбработкаОбъект.ИспользуемоеИмяФайла; Иначе @@ -1182,16 +1347,9 @@ ВидОбъектаПоСсылке = ВидОбъектаПоСсылке(СсылкаПервого); - Если (ВидОбъектаПоСсылке = "Справочник" - И СсылкаПервого.Метаданные().Иерархический - И СсылкаПервого.Метаданные().ВидИерархии = Метаданные.СвойстваОбъектов.ВидИерархии.ИерархияГруппИЭлементов) - ИЛИ (ВидОбъектаПоСсылке = "ПланВидовХарактеристик" - И СсылкаПервого.Метаданные().Иерархический) - Тогда - Возврат Истина; - КонецЕсли; - - Возврат Ложь; + Возврат (ВидОбъектаПоСсылке = "Справочник" И СсылкаПервого.Метаданные().Иерархический + И СсылкаПервого.Метаданные().ВидИерархии = Метаданные.СвойстваОбъектов.ВидИерархии.ИерархияГруппИЭлементов) + Или (ВидОбъектаПоСсылке = "ПланВидовХарактеристик" И СсылкаПервого.Метаданные().Иерархический); КонецФункции @@ -1252,11 +1410,7 @@ &НаКлиенте Процедура НастройкаОтбораНажатие(Элемент) - Если Не ПустаяСтрока(ВидИзменяемыхОбъектов) Тогда - ОписаниеОповещения = Новый ОписаниеОповещения("ПриЗакрытииФормыВыбранныхОбъектов", ЭтотОбъект); - ОткрытьФорму(ПолноеИмяФормы("ВыбранныеЭлементы"), - Новый Структура("ВидИзменяемыхОбъектов, Настройки", ВидИзменяемыхОбъектов, КомпоновщикНастроек.Настройки), , , , , ОписаниеОповещения); - КонецЕсли; + ПерейтиКНастройкеОтбора(); КонецПроцедуры &НаКлиенте @@ -1276,10 +1430,9 @@ Результат = Новый ДеревоЗначений; - Если Не ПустаяСтрока(ВидИзменяемыхОбъектов) Тогда - ОбъектМетаданных = Метаданные.НайтиПоПолномуИмени(ВидИзменяемыхОбъектов); - ОбъектОбработка = РеквизитФормыВЗначение("Объект"); - ТекстЗапроса = ОбъектОбработка.ТекстЗапроса(ОбъектМетаданных); + Если Не ПустаяСтрока(ВидыИзменяемыхОбъектов) Тогда + ОбработкаОбъект = РеквизитФормыВЗначение("Объект"); + ТекстЗапроса = ОбработкаОбъект.ТекстЗапроса(ВидыИзменяемыхОбъектов); СхемаКомпоновкиДанных = СхемаКомпоновкиДанных(ТекстЗапроса); КомпоновщикНастроекКомпоновкиДанных = Новый КомпоновщикНастроекКомпоновкиДанных; @@ -1340,9 +1493,10 @@ ПолеВыбора.Использование = Истина; Если ДляИзменения Тогда - ОбъектМетаданных = Метаданные.НайтиПоПолномуИмени(ВидИзменяемыхОбъектов); - Для Каждого ТабличнаяЧасть Из ОбъектМетаданных.ТабличныеЧасти Цикл - ИмяТабличнойЧасти = ТабличнаяЧасть.Имя; + ОбработкаОбъект = РеквизитФормыВЗначение("Объект"); + ОбщиеРеквизитыОбъектов = ОбработкаОбъект.ОбщиеРеквизитыОбъектов(ВидыИзменяемыхОбъектов); + Для Каждого ТабличнаяЧасть Из ОбщиеРеквизитыОбъектов.ТабличныеЧасти Цикл + ИмяТабличнойЧасти = ТабличнаяЧасть.Ключ; ГруппировкаТаблицы = ГруппировкаКомпоновкиДанных.Структура.Добавить(Тип("ГруппировкаКомпоновкиДанных")); ГруппировкаТаблицы.Выбор.Элементы.Добавить(Тип("АвтоВыбранноеПолеКомпоновкиДанных")); @@ -1387,9 +1541,10 @@ КонецФункции &НаКлиенте -Процедура ВидИзменяемыхОбъектовВыборСделан(ВыбранныйОбъект, ДополнительныеПараметры) Экспорт - Если ВыбранныйОбъект <> Неопределено И ВидИзменяемыхОбъектов <> ВыбранныйОбъект Тогда - ВидИзменяемыхОбъектов = ВыбранныйОбъект; +Процедура ВидИзменяемыхОбъектовВыборСделан(Знач ВыбранныеОбъекты, ДополнительныеПараметры) Экспорт + Если ВыбранныеОбъекты <> Неопределено И ВидыИзменяемыхОбъектов <> ВыбранныеОбъекты Тогда + ВидыИзменяемыхОбъектов = СтрСоединить(ВыбранныеОбъекты, ","); + ВыбранныеОбъектыВКонтексте.Очистить(); ПерестроитьИнтерфейсФормыДляВыбранногоВидаОбъектов(); КонецЕсли; КонецПроцедуры @@ -1413,22 +1568,39 @@ &НаСервере Функция ПредставлениеИзменяемыхОбъектов() - ОбъектМетаданных = Метаданные.НайтиПоПолномуИмени(ВидИзменяемыхОбъектов); - Результат = ОбъектМетаданных.Представление(); + ПредставленияТипов = Новый Массив; + Для Каждого ИмяОбъектаМетаданных Из СтрРазделить(ВидыИзменяемыхОбъектов, ",", Ложь) Цикл + ОбъектМетаданных = Метаданные.НайтиПоПолномуИмени(ИмяОбъектаМетаданных); + ПредставленияТипов.Добавить(ОбъектМетаданных.Представление()); + КонецЦикла; + + Результат = СтрСоединить(ПредставленияТипов, ", "); Возврат Результат; КонецФункции &НаСервере Процедура ИнициализироватьКомпоновщикНастроек() - ОбъектМетаданных = Метаданные.НайтиПоПолномуИмени(ВидИзменяемыхОбъектов); ОбъектОбработка = РеквизитФормыВЗначение("Объект"); - ТекстЗапроса = ОбъектОбработка.ТекстЗапроса(ОбъектМетаданных); + ТекстЗапроса = ОбъектОбработка.ТекстЗапроса(ВидыИзменяемыхОбъектов); СхемаКомпоновкиДанных = СхемаКомпоновкиДанных(ТекстЗапроса); КомпоновщикНастроек.Инициализировать(Новый ИсточникДоступныхНастроекКомпоновкиДанных(ПоместитьВоВременноеХранилище(СхемаКомпоновкиДанных, УникальныйИдентификатор))); КомпоновщикНастроек.ЗагрузитьНастройки(СхемаКомпоновкиДанных.НастройкиПоУмолчанию); - УстановитьНастройкуСтруктурыВыводаРезультата(КомпоновщикНастроек.Настройки); Если ВыбранныеОбъектыВКонтексте.Количество() > 0 Тогда + Если Параметры.Свойство("Список") И ТипЗнч(Параметры.Список) = Тип("ДинамическийСписок") Тогда + НастройкиКомпоновщика = Параметры.Список.КомпоновщикНастроек.ПолучитьНастройки(); + КомпоновщикНастроек.ЗагрузитьНастройки(НастройкиКомпоновщика); + КомпоновщикНастроек.Настройки.УсловноеОформление.Элементы.Очистить(); + + КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных; + Попытка + МакетКомпоновкиДанных = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных, + КомпоновщикНастроек.Настройки, , , Тип("ГенераторМакетаКомпоновкиДанныхДляКоллекцииЗначений")); + Исключение + КомпоновщикНастроек.ЗагрузитьНастройки(СхемаКомпоновкиДанных.НастройкиПоУмолчанию); + КонецПопытки; + КонецЕсли; + ЭлементОтбора = КомпоновщикНастроек.Настройки.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); ЭлементОтбора.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Ссылка"); Если УчитыватьИерархию И ОбрабатыватьРекурсивно Тогда @@ -1438,7 +1610,11 @@ КонецЕсли; ЭлементОтбора.ПравоеЗначение = Новый СписокЗначений; ЭлементОтбора.ПравоеЗначение.ЗагрузитьЗначения(ВыбранныеОбъектыВКонтексте.ВыгрузитьЗначения()); + КонецЕсли; + + УстановитьНастройкуСтруктурыВыводаРезультата(КомпоновщикНастроек.Настройки); + КонецПроцедуры &НаСервере @@ -1468,74 +1644,96 @@ НередактируемыеРеквизиты = НередактируемыеРеквизиты(); ФильтруемыеРеквизиты = ФильтруемыеРеквизиты(); - ЗаполнитьРеквизитыОбъекта(ЗаблокированныеРеквизиты, НередактируемыеРеквизиты, ФильтруемыеРеквизиты); - Если Не КонтекстныйВызов Тогда - ЗаполнитьТабличныеЧастиОбъектов(ЗаблокированныеРеквизиты, НередактируемыеРеквизиты, ФильтруемыеРеквизиты); + ОбработкаОбъект = РеквизитФормыВЗначение("Объект"); + ОбщиеРеквизитыОбъектов = ОбработкаОбъект.ОбщиеРеквизитыОбъектов(ВидыИзменяемыхОбъектов); + + ЗаполнитьРеквизитыОбъекта(ЗаблокированныеРеквизиты, НередактируемыеРеквизиты, ФильтруемыеРеквизиты, ОбщиеРеквизитыОбъектов.Реквизиты); + ЗаполнитьТабличныеЧастиОбъектов(ЗаблокированныеРеквизиты, НередактируемыеРеквизиты, ФильтруемыеРеквизиты, ОбщиеРеквизитыОбъектов.ТабличныеЧасти); + + СформироватьПояснениеПоАвтонумерации(); + УстановитьУсловноеОформление(); +КонецПроцедуры + +&НаСервере +Процедура СформироватьПояснениеПоАвтонумерации() + + Автонумерация = Неопределено; + Для Каждого ИмяТипа Из СтрРазделить(ВидыИзменяемыхОбъектов, ",", Ложь) Цикл + ОбъектМетаданных = Метаданные.НайтиПоПолномуИмени(ИмяТипа); + + Если Метаданные.ПланыОбмена.Содержит(ОбъектМетаданных) + Или Метаданные.ПланыВидовРасчета.Содержит(ОбъектМетаданных) + Или Метаданные.ПланыСчетов.Содержит(ОбъектМетаданных) Тогда + Автонумерация = Неопределено; + Прервать; + КонецЕсли; + + Если Автонумерация = Неопределено Тогда + Автонумерация = ОбъектМетаданных.Автонумерация; + Продолжить; + КонецЕсли; + + Если Автонумерация И Не ОбъектМетаданных.Автонумерация Тогда + Автонумерация = Неопределено; + Прервать; + КонецЕсли; + КонецЦикла; + + Если Автонумерация = Неопределено Тогда + ПояснениеПоАвтонумерации = ""; + ИначеЕсли Автонумерация Тогда + ПояснениеПоАвтонумерации = НСтр("ru = '<Установить автоматически>'"); + Иначе + ПояснениеПоАвтонумерации = НСтр("ru = '<Очистить>'"); КонецЕсли; КонецПроцедуры -&НаСервереБезКонтекста -Функция МетодыМенеджераОбъектаДляБлокированияРеквизитов(ИмяОбъекта) +&НаСервере +Функция ЗапретРедактированияПредусмотрен(ИмяОбъекта) Если ПодсистемаСуществует("СтандартныеПодсистемы.ЗапретРедактированияРеквизитовОбъектов") Тогда - МодульИнтеграцияСтандартныхПодсистем = ОбщийМодуль("ИнтеграцияСтандартныхПодсистем"); - МодульЗапретРедактированияРеквизитовОбъектовПереопределяемый = ОбщийМодуль("ЗапретРедактированияРеквизитовОбъектовПереопределяемый"); - Иначе - Возврат "НеПоддерживается"; + МодульЗапретРедактированияРеквизитовОбъектовСлужебный = ОбщийМодуль("ЗапретРедактированияРеквизитовОбъектовСлужебный"); + Возврат МодульЗапретРедактированияРеквизитовОбъектовСлужебный.ЗапретРедактированияПредусмотрен(ИмяОбъекта); КонецЕсли; - ОбъектыСЗаблокированнымиРеквизитами = Новый Соответствие; - МодульИнтеграцияСтандартныхПодсистем.ПриОпределенииОбъектовСЗаблокированнымиРеквизитами(ОбъектыСЗаблокированнымиРеквизитами); - МодульЗапретРедактированияРеквизитовОбъектовПереопределяемый.ПриОпределенииОбъектовСЗаблокированнымиРеквизитами(ОбъектыСЗаблокированнымиРеквизитами); - - СведенияОМенеджереОбъекта = ОбъектыСЗаблокированнымиРеквизитами[ИмяОбъекта]; - Если СведенияОМенеджереОбъекта = Неопределено Тогда - Возврат "НеПоддерживается"; - КонецЕсли; - ДоступныеМетоды = РазложитьСтрокуВМассивПодстрок(СведенияОМенеджереОбъекта, Символы.ПС, Истина); - Возврат ДоступныеМетоды; + Возврат Ложь; КонецФункции &НаСервере Функция ЗаблокированныеРеквизиты() - Результат = Новый Массив; - Если ВерсияБСПСоответствуетТребованиям() Тогда - - ДоступныеМетоды = МетодыМенеджераОбъектаДляБлокированияРеквизитов(ВидИзменяемыхОбъектов); - Если ТипЗнч(ДоступныеМетоды) = Тип("Массив") И (ДоступныеМетоды.Количество() = 0 - ИЛИ ДоступныеМетоды.Найти("ПолучитьБлокируемыеРеквизитыОбъекта") <> Неопределено) Тогда - - МенеджерОбъекта = МенеджерОбъектаПоПолномуИмени(ВидИзменяемыхОбъектов); - БлокируемыеРеквизитыОписание = МенеджерОбъекта.ПолучитьБлокируемыеРеквизитыОбъекта(); - + Для Каждого ВидОбъектов Из СтрРазделить(ВидыИзменяемыхОбъектов, ",", Ложь) Цикл + Если ВерсияБСПСоответствуетТребованиям() Тогда + Если ЗапретРедактированияПредусмотрен(ВидОбъектов) Тогда + МенеджерОбъекта = МенеджерОбъектаПоПолномуИмени(ВидОбъектов); + БлокируемыеРеквизитыОписание = МенеджерОбъекта.ПолучитьБлокируемыеРеквизитыОбъекта(); + КонецЕсли; + Иначе + // В конфигурациях без БСП или на старых версиях БСП, пытаемся определить, + // есть ли у объекта блокируемые реквизиты (подсистема "Запрет редактирования реквизитов объектов"). + МенеджерОбъекта = МенеджерОбъектаПоПолномуИмени(ВидОбъектов); + Попытка + БлокируемыеРеквизитыОписание = МенеджерОбъекта.ПолучитьБлокируемыеРеквизитыОбъекта(); + Исключение + // метод не найден + БлокируемыеРеквизитыОписание = Неопределено; + КонецПопытки; КонецЕсли; - - Иначе - - // В конфигурациях без БСП или на старых версиях БСП, пытаемся определить, - // есть ли у объекта блокируемые реквизиты (подсистема "Запрет редактирования реквизитов объектов"). - МенеджерОбъекта = МенеджерОбъектаПоПолномуИмени(ВидИзменяемыхОбъектов); - - Попытка - БлокируемыеРеквизитыОписание = МенеджерОбъекта.ПолучитьБлокируемыеРеквизитыОбъекта(); - Исключение - // метод не найден - БлокируемыеРеквизитыОписание = Неопределено; - КонецПопытки; - - КонецЕсли; - Если БлокируемыеРеквизитыОписание <> Неопределено Тогда - Для Каждого БлокируемыйРеквизитОписание Из БлокируемыеРеквизитыОписание Цикл - Результат.Добавить(СокрЛП(РазложитьСтрокуВМассивПодстрок(БлокируемыйРеквизитОписание, ";")[0])); - КонецЦикла; - КонецЕсли; + Если БлокируемыеРеквизитыОписание <> Неопределено Тогда + Для Каждого БлокируемыйРеквизитОписание Из БлокируемыеРеквизитыОписание Цикл + ИмяРеквизита = СокрЛП(СтрРазделить(БлокируемыйРеквизитОписание, ";")[0]); + Если Результат.Найти(ИмяРеквизита) = Неопределено Тогда + Результат.Добавить(ИмяРеквизита); + КонецЕсли; + КонецЦикла; + КонецЕсли; + КонецЦикла; + Возврат Результат; - КонецФункции &НаСервереБезКонтекста @@ -1555,7 +1753,7 @@ Если СведенияОМенеджереОбъекта = Неопределено Тогда Возврат "НеПоддерживается"; КонецЕсли; - ДоступныеМетоды = РазложитьСтрокуВМассивПодстрок(СведенияОМенеджереОбъекта, Символы.ПС, Истина); + ДоступныеМетоды = СтрРазделить(СведенияОМенеджереОбъекта, Символы.ПС, Ложь); Возврат ДоступныеМетоды; КонецФункции @@ -1567,140 +1765,152 @@ Возврат Новый Массив; КонецЕсли; - ВерсияБСПСоответствуетТребованиям = ВерсияБСПСоответствуетТребованиям(); - Если ВерсияБСПСоответствуетТребованиям Тогда - ДоступныеМетоды = МетодыМенеджераОбъектаДляРедактированияРеквизитов(ВидИзменяемыхОбъектов); - Если ТипЗнч(ДоступныеМетоды) = Тип("Массив") И (ДоступныеМетоды.Количество() = 0 ИЛИ - ДоступныеМетоды.Найти("РеквизитыНеРедактируемыеВГрупповойОбработке") <> Неопределено) Тогда - - МенеджерОбъекта = МенеджерОбъектаПоПолномуИмени(ВидИзменяемыхОбъектов); - НеРедактируемые = МенеджерОбъекта.РеквизитыНеРедактируемыеВГрупповойОбработке(); - - Иначе - НеРедактируемые = Новый Массив; - КонецЕсли; - Иначе - // В конфигурациях без БСП или на старых версиях БСП, пытаемся определить, - // есть ли у объекта нередактируемые реквизиты. - МенеджерОбъекта = МенеджерОбъектаПоПолномуИмени(ВидИзменяемыхОбъектов); - Попытка - НеРедактируемые = МенеджерОбъекта.РеквизитыНеРедактируемыеВГрупповойОбработке(); - Исключение - // метод не найден - НеРедактируемые = Новый Массив; - КонецПопытки; - КонецЕсли; - - Если НеРедактируемые.Количество() > 0 Тогда - Возврат НеРедактируемые; - КонецЕсли; + Результат = Новый Массив; + Для Каждого ВидИзменяемыхОбъектов Из СтрРазделить(ВидыИзменяемыхОбъектов, ",", Ложь) Цикл - Если ВерсияБСПСоответствуетТребованиям Тогда - Если ТипЗнч(ДоступныеМетоды) = Тип("Массив") И (ДоступныеМетоды.Количество() = 0 ИЛИ - ДоступныеМетоды.Найти("РеквизитыРедактируемыеВГрупповойОбработке") <> Неопределено) Тогда - - Если МенеджерОбъекта = Неопределено Тогда - МенеджерОбъекта = МенеджерОбъектаПоПолномуИмени(ВидИзменяемыхОбъектов); + ВерсияБСПСоответствуетТребованиям = ВерсияБСПСоответствуетТребованиям(); + Если ВерсияБСПСоответствуетТребованиям Тогда + ДоступныеМетоды = МетодыМенеджераОбъектаДляРедактированияРеквизитов(ВидИзменяемыхОбъектов); + Если ТипЗнч(ДоступныеМетоды) = Тип("Массив") И (ДоступныеМетоды.Количество() = 0 + Или ДоступныеМетоды.Найти("РеквизитыНеРедактируемыеВГрупповойОбработке") <> Неопределено) Тогда + МенеджерОбъекта = МенеджерОбъектаПоПолномуИмени(ВидИзменяемыхОбъектов); + НеРедактируемые = МенеджерОбъекта.РеквизитыНеРедактируемыеВГрупповойОбработке(); + Иначе + НеРедактируемые = Новый Массив; КонецЕсли; - Редактируемые = МенеджерОбъекта.РеквизитыРедактируемыеВГрупповойОбработке(); - Иначе - Редактируемые = Неопределено; + Иначе + // В конфигурациях без БСП или на старых версиях БСП, пытаемся определить, + // есть ли у объекта нередактируемые реквизиты. + МенеджерОбъекта = МенеджерОбъектаПоПолномуИмени(ВидИзменяемыхОбъектов); + Попытка + НеРедактируемые = МенеджерОбъекта.РеквизитыНеРедактируемыеВГрупповойОбработке(); + Исключение + // метод не найден + НеРедактируемые = Новый Массив; + КонецПопытки; + КонецЕсли; + + Если НеРедактируемые.Количество() > 0 Тогда + Возврат НеРедактируемые; + КонецЕсли; + + Если ВерсияБСПСоответствуетТребованиям Тогда + Если ТипЗнч(ДоступныеМетоды) = Тип("Массив") И (ДоступныеМетоды.Количество() = 0 + Или ДоступныеМетоды.Найти("РеквизитыРедактируемыеВГрупповойОбработке") <> Неопределено) Тогда + Если МенеджерОбъекта = Неопределено Тогда + МенеджерОбъекта = МенеджерОбъектаПоПолномуИмени(ВидИзменяемыхОбъектов); + КонецЕсли; + Редактируемые = МенеджерОбъекта.РеквизитыРедактируемыеВГрупповойОбработке(); + Иначе + Редактируемые = Неопределено; + КонецЕсли; + Иначе + // В конфигурациях без БСП или на старых версиях БСП, пытаемся определить, + // есть ли у объекта редактируемые реквизиты. + Попытка + Редактируемые = МенеджерОбъекта.РеквизитыРедактируемыеВГрупповойОбработке(); + Исключение + Редактируемые = Неопределено; + КонецПопытки; КонецЕсли; - Иначе - // В конфигурациях без БСП или на старых версиях БСП, пытаемся определить, - // есть ли у объекта редактируемые реквизиты. - Попытка - Редактируемые = МенеджерОбъекта.РеквизитыРедактируемыеВГрупповойОбработке(); - Исключение - Редактируемые = Неопределено; - КонецПопытки; - КонецЕсли; - Если Редактируемые = Неопределено Или Редактируемые.Найти("*") <> Неопределено Тогда - Возврат НеРедактируемые; - КонецЕсли; - - ОбъектМетаданных = Метаданные.НайтиПоПолномуИмени(ВидИзменяемыхОбъектов); - Для Каждого ОписаниеРеквизита Из ОбъектМетаданных.СтандартныеРеквизиты Цикл - НеРедактируемые.Добавить(ОписаниеРеквизита.Имя); - КонецЦикла; - - Для Каждого ОписаниеРеквизита Из ОбъектМетаданных.Реквизиты Цикл - НеРедактируемые.Добавить(ОписаниеРеквизита.Имя); - КонецЦикла; - - Для Каждого ТабличнаяЧасть Из ОбъектМетаданных.ТабличныеЧасти Цикл - Если Редактируемые.Найти(ТабличнаяЧасть.Имя + ".*") <> Неопределено Тогда - Прервать; + Если Редактируемые = Неопределено Или Редактируемые.Найти("*") <> Неопределено Тогда + Возврат НеРедактируемые; КонецЕсли; - Для Каждого Реквизит Из ТабличнаяЧасть.Реквизиты Цикл - НеРедактируемые.Добавить(ТабличнаяЧасть.Имя + "." + Реквизит.Имя); + + ОбъектМетаданных = Метаданные.НайтиПоПолномуИмени(ВидИзменяемыхОбъектов); + Для Каждого ОписаниеРеквизита Из ОбъектМетаданных.СтандартныеРеквизиты Цикл + НеРедактируемые.Добавить(ОписаниеРеквизита.Имя); + КонецЦикла; + + Для Каждого ОписаниеРеквизита Из ОбъектМетаданных.Реквизиты Цикл + НеРедактируемые.Добавить(ОписаниеРеквизита.Имя); + КонецЦикла; + + Для Каждого ТабличнаяЧасть Из ОбъектМетаданных.ТабличныеЧасти Цикл + Если Редактируемые.Найти(ТабличнаяЧасть.Имя + ".*") <> Неопределено Тогда + Прервать; + КонецЕсли; + Для Каждого Реквизит Из ТабличнаяЧасть.Реквизиты Цикл + НеРедактируемые.Добавить(ТабличнаяЧасть.Имя + "." + Реквизит.Имя); + КонецЦикла; + КонецЦикла; + + Для Каждого ИмяРедактируемого Из Редактируемые Цикл + Индекс = НеРедактируемые.Найти(ИмяРедактируемого); + Если Индекс = Неопределено Тогда + Продолжить; + КонецЕсли; + НеРедактируемые.Удалить(Индекс); + КонецЦикла; + + Для Каждого Реквизит Из НеРедактируемые Цикл + Если Результат.Найти(Реквизит) = Неопределено Тогда + Результат.Добавить(Реквизит); + КонецЕсли; КонецЦикла; КонецЦикла; - Для Каждого ИмяРедактируемого Из Редактируемые Цикл - Индекс = НеРедактируемые.Найти(ИмяРедактируемого); - Если Индекс = Неопределено Тогда - Продолжить; - КонецЕсли; - НеРедактируемые.Удалить(Индекс); - КонецЦикла; - - Возврат НеРедактируемые; + Возврат Результат; КонецФункции &НаСервере Функция ФильтруемыеРеквизиты() - + Результат = Новый Массив; Если Объект.ПоказыватьСлужебныеРеквизиты Тогда - Возврат Новый Массив; + Возврат Результат; КонецЕсли; - - ОбъектМетаданных = Метаданные.НайтиПоПолномуИмени(ВидИзменяемыхОбъектов); - ФильтруемыеРеквизиты = ПолучитьФильтрРедактированияПоТипу(ОбъектМетаданных); - ////////////////////////////////////////////////////////////////////////////////////////// - // Фильтрация по отключенным функциональными опциями. - - ЗакрытыеФункциональнымиОпциями = Новый ТаблицаЗначений; - ЗакрытыеФункциональнымиОпциями.Колонки.Добавить("ИмяРеквизита", Новый ОписаниеТипов("Строка")); - - Для Каждого ОписаниеФО Из Метаданные.ФункциональныеОпции Цикл + Для Каждого ИмяТипа Из СтрРазделить(ВидыИзменяемыхОбъектов, ",", Ложь) Цикл + ОбъектМетаданных = Метаданные.НайтиПоПолномуИмени(ИмяТипа); + ФильтруемыеРеквизиты = ПолучитьФильтрРедактированияПоТипу(ОбъектМетаданных); - Если РазложитьСтрокуВМассивПодстрок(ОписаниеФО.Хранение.ПолноеИмя(), ".")[0] = "Константа" Тогда - ЗначениеФО = ПолучитьФункциональнуюОпцию(ОписаниеФО.Имя); - Если ТипЗнч(ЗначениеФО) = Тип("Булево") И ЗначениеФО = Истина Тогда + ЗакрытыеФункциональнымиОпциями = Новый ТаблицаЗначений; + ЗакрытыеФункциональнымиОпциями.Колонки.Добавить("ИмяРеквизита", Новый ОписаниеТипов("Строка")); + + Для Каждого ОписаниеФО Из Метаданные.ФункциональныеОпции Цикл + Если СтрРазделить(ОписаниеФО.Хранение.ПолноеИмя(), ".")[0] = "Константа" Тогда + ЗначениеФО = ПолучитьФункциональнуюОпцию(ОписаниеФО.Имя); + Если ТипЗнч(ЗначениеФО) = Тип("Булево") И ЗначениеФО = Истина Тогда + Продолжить; + КонецЕсли; + Иначе + // Не фильтруем реквизиты, которые входят в параметризуемые функциональные опции. Продолжить; КонецЕсли; - Иначе - // Не фильтруем реквизиты, которые входят в параметризуемые функциональные опции. - Продолжить; - КонецЕсли; - - Для Каждого РеквизитОМ Из ОбъектМетаданных.Реквизиты Цикл - Если ОписаниеФО.Состав.Содержит(РеквизитОМ) Тогда - НоваяСтрока = ЗакрытыеФункциональнымиОпциями.Добавить(); - НоваяСтрока.ИмяРеквизита = РеквизитОМ.Имя; - КонецЕсли; + + Для Каждого РеквизитОМ Из ОбъектМетаданных.Реквизиты Цикл + Если ОписаниеФО.Состав.Содержит(РеквизитОМ) Тогда + НоваяСтрока = ЗакрытыеФункциональнымиОпциями.Добавить(); + НоваяСтрока.ИмяРеквизита = РеквизитОМ.Имя; + КонецЕсли; + КонецЦикла; КонецЦикла; + ЗакрытыеФункциональнымиОпциями.Свернуть("ИмяРеквизита"); + + Для Каждого ЗакрытыйФО Из ЗакрытыеФункциональнымиОпциями Цикл + ФильтруемыеРеквизиты.Добавить(ЗакрытыйФО.ИмяРеквизита); + КонецЦикла; + + Для Каждого Реквизит Из ФильтруемыеРеквизиты Цикл + Если Результат.Найти(Реквизит) = Неопределено Тогда + Результат.Добавить(Реквизит); + КонецЕсли; + КонецЦикла; КонецЦикла; - - ЗакрытыеФункциональнымиОпциями.Свернуть("ИмяРеквизита"); - - Для Каждого ЗакрытыйФО Из ЗакрытыеФункциональнымиОпциями Цикл - ФильтруемыеРеквизиты.Добавить(ЗакрытыйФО.ИмяРеквизита); - КонецЦикла; - - Возврат ФильтруемыеРеквизиты; - + + Возврат Результат; КонецФункции &НаСервере -Процедура ЗаполнитьТабличныеЧастиОбъектов(ЗаблокированныеРеквизиты, НередактируемыеРеквизиты, ФильтруемыеРеквизиты) +Процедура ЗаполнитьТабличныеЧастиОбъектов(ЗаблокированныеРеквизиты, НередактируемыеРеквизиты, ФильтруемыеРеквизиты, ДоступныеТабличныеЧасти) - ОбъектМетаданных = Метаданные.НайтиПоПолномуИмени(ВидИзменяемыхОбъектов); + СписокВидовИзменяемыхОбъектов = СтрРазделить(ВидыИзменяемыхОбъектов, ",", Ложь); + ИмяОбъекта = СписокВидовИзменяемыхОбъектов[0]; + + ОбъектМетаданных = Метаданные.НайтиПоПолномуИмени(ИмяОбъекта); // Создание реквизитов для табличных частей. НовыеРеквизитыФормы = Новый Массив; @@ -1710,6 +1920,10 @@ ТаблицыОбъекта = Новый Структура; ТабличныеЧастиОбъекта.Очистить(); Для Каждого ОписаниеТабличнойЧасти Из ОбъектМетаданных.ТабличныеЧасти Цикл + Если Не ДоступныеТабличныеЧасти.Свойство(ОписаниеТабличнойЧасти.Имя) Тогда + Продолжить; + КонецЕсли; + Если Не ПравоДоступа("Редактирование", ОписаниеТабличнойЧасти) Тогда Продолжить; КонецЕсли; @@ -1721,7 +1935,9 @@ Продолжить; КонецЕсли; - ДоступныеДляИзмененияРеквизиты = ДоступныеДляИзмененияРеквизиты(ОписаниеТабличнойЧасти, НередактируемыеРеквизиты, ФильтруемыеРеквизиты); + ДоступныеДляИзмененияРеквизиты = ДоступныеДляИзмененияРеквизиты(ОписаниеТабличнойЧасти, НередактируемыеРеквизиты, + ФильтруемыеРеквизиты, ДоступныеТабличныеЧасти[ОписаниеТабличнойЧасти.Имя]); + Если ДоступныеДляИзмененияРеквизиты.Количество() = 0 Тогда Продолжить; КонецЕсли; @@ -1757,6 +1973,8 @@ ТаблицаФормы.УстановитьДействие("ПередНачаломИзменения", "Подключаемый_ПередНачаломИзменения"); ТаблицаФормы.ИзменятьПорядокСтрок = Ложь; ТаблицаФормы.ИзменятьСоставСтрок = Ложь; + ТаблицаФормы.КартинкаСтрок = КартинкаВидыОпераций(); + ТаблицаФормы.ПутьКДаннымКартинкиСтроки = ИмяРеквизита + ".ВидОперации"; Для Каждого ОписаниеКолонки Из КолонкиТаблиц Цикл Если ОписаниеКолонки.ВидПоля = Неопределено Тогда @@ -1780,7 +1998,9 @@ КонецЕсли; КонецЦикла; - ДоступныеДляИзмененияРеквизиты = ДоступныеДляИзмененияРеквизиты(ОписаниеТабличнойЧасти, НередактируемыеРеквизиты, ФильтруемыеРеквизиты); + ДоступныеДляИзмененияРеквизиты = ДоступныеДляИзмененияРеквизиты(ОписаниеТабличнойЧасти, НередактируемыеРеквизиты, + ФильтруемыеРеквизиты, ДоступныеТабличныеЧасти[ОписаниеТабличнойЧасти.Имя]); + Для Каждого ОписаниеРеквизита Из ДоступныеДляИзмененияРеквизиты Цикл Реквизит = ЭтотОбъект[ТаблицаОбъекта.Ключ].Добавить(); Реквизит.Имя = ОписаниеРеквизита.Имя; @@ -1795,11 +2015,15 @@ КонецПроцедуры &НаСервере -Функция ДоступныеДляИзмененияРеквизиты(ОписаниеТабличнойЧасти, НередактируемыеРеквизиты, ФильтруемыеРеквизиты) +Функция ДоступныеДляИзмененияРеквизиты(ОписаниеТабличнойЧасти, НередактируемыеРеквизиты, ФильтруемыеРеквизиты, ДоступныеРеквизиты) Результат = Новый Массив; Для Каждого ОписаниеРеквизита Из ОписаниеТабличнойЧасти.Реквизиты Цикл + Если ДоступныеРеквизиты.Найти(ОписаниеРеквизита.Имя) = Неопределено Тогда + Продолжить; + КонецЕсли; + Если Не ПравоДоступа("Редактирование", ОписаниеРеквизита) Тогда Продолжить; КонецЕсли; @@ -1905,6 +2129,10 @@ ПолеВвода = ТабличноеПоле.ПодчиненныеЭлементы[ТабличноеПоле.Имя + "Значение"]; ПолеВвода.ОграничениеТипа = ТабличноеПоле.ТекущиеДанные.ДопустимыеТипы; + Если ПолеВвода.ОграничениеТипа.Типы().Количество() = 1 И ПолеВвода.ОграничениеТипа.СодержитТип(Тип("Строка")) Тогда + ПолеВвода.КнопкаВыбора = Истина; + КонецЕсли; + ПараметрыВыбораМассив = Новый Массив; Если НЕ ПустаяСтрока(ТабличноеПоле.ТекущиеДанные.ПараметрыВыбора) Тогда @@ -1914,11 +2142,11 @@ Если Не ПустаяСтрока(ТабличноеПоле.ТекущиеДанные.СвязиПараметровВыбора) Тогда Для Индекс = 1 По СтрЧислоСтрок(ТабличноеПоле.ТекущиеДанные.СвязиПараметровВыбора) Цикл СвязьПараметровВыбораСтрока = СтрПолучитьСтроку(ТабличноеПоле.ТекущиеДанные.СвязиПараметровВыбора, Индекс); - РазложенныеСтроки = РазложитьСтрокуВМассивПодстрок(СвязьПараметровВыбораСтрока, ";"); + РазложенныеСтроки = СтрРазделить(СвязьПараметровВыбораСтрока, ";"); ИмяПараметра = СокрЛП(РазложенныеСтроки[0]); ИмяРеквизита = СокрЛП(РазложенныеСтроки[1]); - ЧастиИмениРеквизита = РазложитьСтрокуВМассивПодстрок(ИмяРеквизита, ".", Истина); + ЧастиИмениРеквизита = СтрРазделить(ИмяРеквизита, ".", Ложь); ИмяТабличнойЧасти = ""; Если ЧастиИмениРеквизита.Количество() > 1 Тогда ИмяТабличнойЧасти = ЧастиИмениРеквизита[0]; @@ -1944,7 +2172,11 @@ ПараметрыВыбораМассив.Добавить(Новый ПараметрВыбора("Отбор.Владелец", ТабличноеПоле.ТекущиеДанные.Свойство)); КонецЕсли; - ПолеВвода.ПараметрыВыбора = Новый ФиксированныйМассив(ПараметрыВыбораМассив); + Если ОтключитьСвязиПараметровВыбора Тогда + ПолеВвода.ПараметрыВыбора = Новый ФиксированныйМассив(Новый Массив); + Иначе + ПолеВвода.ПараметрыВыбора = Новый ФиксированныйМассив(ПараметрыВыбораМассив); + КонецЕсли; ВыборГруппИЭлементов = ТабличноеПоле.ТекущиеДанные.ВыборГруппИЭлементов; @@ -1999,39 +2231,49 @@ Иначе Элементы.СоставОбъекта.ОтображениеСтраниц = ОтображениеСтраницФормы.ЗакладкиСверху; КонецЕсли; + + Если Не ПустаяСтрока(ВидыИзменяемыхОбъектов) Тогда + ЕстьОбщиеРеквизиты = РеквизитыОбъекта.Количество() > 0; + Элементы.ГруппаНетРеквизитов.Видимость = Не ЕстьОбщиеРеквизиты; + Элементы.РанееИзмененныеРеквизиты.Видимость = ЕстьОбщиеРеквизиты Или ТабличныеЧастиОбъекта.Количество() > 0; + Элементы.РеквизитыОбъекта.Видимость = ЕстьОбщиеРеквизиты; + КонецЕсли; КонецПроцедуры &НаСервере -Процедура ЗаполнитьРеквизитыОбъекта(БлокируемыеРеквизиты, НеРедактируемые, ФильтруемыеРеквизиты) +Процедура ЗаполнитьРеквизитыОбъекта(БлокируемыеРеквизиты, НеРедактируемые, ФильтруемыеРеквизиты, ДоступныеРеквизиты) - // Получаем менеджер объекта для получения массивов не редактируемых - // интерактивно и блокируемых реквизитов. - МенеджерОбъекта = МенеджерОбъектаПоПолномуИмени(ВидИзменяемыхОбъектов); - ОбъектМетаданных = Метаданные.НайтиПоПолномуИмени(ВидИзменяемыхОбъектов); + НаборыРеквизитов = Новый Структура; + НаборыРеквизитов.Вставить("НеРедактируемые", НеРедактируемые); + НаборыРеквизитов.Вставить("Фильтруемые", ФильтруемыеРеквизиты); + НаборыРеквизитов.Вставить("Блокируемые", БлокируемыеРеквизиты); + НаборыРеквизитов.Вставить("Доступные", ДоступныеРеквизиты); + + + СписокВидовИзменяемыхОбъектов = СтрРазделить(ВидыИзменяемыхОбъектов, ",", Ложь); + ИмяОбъекта = СписокВидовИзменяемыхОбъектов[0]; + + ОбъектМетаданных = Метаданные.НайтиПоПолномуИмени(ИмяОбъекта); РеквизитыОбъекта.Очистить(); - ДобавитьРеквизитыВНабор(ОбъектМетаданных.СтандартныеРеквизиты, - НеРедактируемые, - ФильтруемыеРеквизиты, - БлокируемыеРеквизиты, - ОбъектМетаданных); + НаборыРеквизитов.Вставить("ОписанияРеквизитов", ОбъектМетаданных.СтандартныеРеквизиты); + ДобавитьРеквизитыВНабор(НаборыРеквизитов, ОбъектМетаданных); - ДобавитьРеквизитыВНабор(ОбъектМетаданных.Реквизиты, - НеРедактируемые, - ФильтруемыеРеквизиты, - БлокируемыеРеквизиты, - ОбъектМетаданных); + НаборыРеквизитов.Вставить("ОписанияРеквизитов", ОбъектМетаданных.Реквизиты); + ДобавитьРеквизитыВНабор(НаборыРеквизитов, ОбъектМетаданных); РеквизитыОбъекта.Сортировать("Представление Возр"); - ИспользуютсяДопРеквизиты = Ложь; - ИспользуютсяДопСведения = Ложь; Если ПодсистемаСуществует("СтандартныеПодсистемы.Свойства") Тогда МодульУправлениеСвойствами = ОбщийМодуль("УправлениеСвойствами"); Если МодульУправлениеСвойствами <> Неопределено Тогда - ИспользуютсяДопРеквизиты = МодульУправлениеСвойствами.ИспользоватьДопРеквизиты(МенеджерОбъекта.ПустаяСсылка()); - ИспользуютсяДопСведения = МодульУправлениеСвойствами.ИспользоватьДопСведения (МенеджерОбъекта.ПустаяСсылка()); - + ИспользуютсяДопРеквизиты = Истина; + ИспользуютсяДопСведения = Истина; + Для Каждого ВидОбъекта Из СписокВидовИзменяемыхОбъектов Цикл + МенеджерОбъекта = МенеджерОбъектаПоПолномуИмени(ВидОбъекта); + ИспользуютсяДопРеквизиты = ИспользуютсяДопРеквизиты И МодульУправлениеСвойствами.ИспользоватьДопРеквизиты(МенеджерОбъекта.ПустаяСсылка()); + ИспользуютсяДопСведения = ИспользуютсяДопСведения И МодульУправлениеСвойствами.ИспользоватьДопСведения (МенеджерОбъекта.ПустаяСсылка()); + КонецЦикла; Если ИспользуютсяДопРеквизиты Или ИспользуютсяДопСведения Тогда ДобавитьДополнительныеРеквизитыИСведенияВНабор(); КонецЕсли; @@ -2043,99 +2285,96 @@ &НаСервере Процедура ДобавитьДополнительныеРеквизитыИСведенияВНабор() - Если Не КонтекстныйВызов Тогда - МодульУправлениеСвойствамиСлужебный = ОбщийМодуль("УправлениеСвойствамиСлужебный"); - Если МодульУправлениеСвойствамиСлужебный <> Неопределено Тогда - ДобавитьСвойствоВТаблицуРеквизитов(МодульУправлениеСвойствамиСлужебный.СписокСвойствДляВидаОбъектов(ВидИзменяемыхОбъектов, "ДополнительныеРеквизиты")); - ДобавитьСвойствоВТаблицуРеквизитов(МодульУправлениеСвойствамиСлужебный.СписокСвойствДляВидаОбъектов(ВидИзменяемыхОбъектов, "ДополнительныеСведения"), Ложь); - КонецЕсли; - Возврат; + ОбработкаОбъект = РеквизитФормыВЗначение("Объект"); + + СписокВидовИзменяемыхОбъектов = СтрРазделить(ВидыИзменяемыхОбъектов, ",", Ложь); + ОбщийСписокРеквизитов = СписокСвойствДляВидаОбъектов(СписокВидовИзменяемыхОбъектов[0]); + Для Индекс = 1 По СписокВидовИзменяемыхОбъектов.Количество() - 1 Цикл + ОбщийСписокРеквизитов = ОбработкаОбъект.ПересечениеМножеств(ОбщийСписокРеквизитов, СписокСвойствДляВидаОбъектов(СписокВидовИзменяемыхОбъектов[Индекс])); + КонецЦикла; + + Если КонтекстныйВызов Тогда + Для Каждого ДанныеОбъекта Из ВыбранныеОбъекты(Истина).Строки Цикл + ОбъектДляИзменения = ДанныеОбъекта.Ссылка; + + ВидОбъектаПоСсылке = ВидОбъектаПоСсылке(ОбъектДляИзменения); + Если (ВидОбъектаПоСсылке = "Справочник" ИЛИ ВидОбъектаПоСсылке = "ПланВидовХарактеристик") И ОбъектЯвляетсяГруппой(ОбъектДляИзменения) Тогда + Продолжить; + КонецЕсли; + + МодульУправлениеСвойствами = ОбщийМодуль("УправлениеСвойствами"); + СписокСвойств = МодульУправлениеСвойствами.ПолучитьСписокСвойств(ОбъектДляИзменения); + Для Каждого Свойство Из СписокСвойств Цикл + Если ОбщийСписокРеквизитов.Найти(Свойство) = Неопределено Тогда + Продолжить; + КонецЕсли; + + Если РеквизитыОбъекта.НайтиСтроки(Новый Структура("Свойство", Свойство)).Количество() > 0 Тогда + Продолжить; + КонецЕсли; + + ДобавитьСвойствоВСписокРеквизитов(Свойство); + КонецЦикла; + КонецЦикла; + Иначе + Для Каждого Реквизит Из ОбщийСписокРеквизитов Цикл + ДобавитьСвойствоВСписокРеквизитов(Реквизит); + КонецЦикла; КонецЕсли; - ТаблицаДопРеквизитов = Новый ТаблицаЗначений; - ТаблицаДопРеквизитов.Колонки.Добавить("Свойство", Новый ОписаниеТипов("ПланВидовХарактеристикСсылка.ДополнительныеРеквизитыИСведения")); - ТаблицаДопРеквизитов.Колонки.Добавить("Наименование", Новый ОписаниеТипов("Строка")); - ТаблицаДопРеквизитов.Колонки.Добавить("ТипЗначения", Новый ОписаниеТипов("ОписаниеТипов")); + РеквизитыОбъекта.Сортировать("Представление"); - ТаблицаДопСведений = Новый ТаблицаЗначений; - ТаблицаДопСведений.Колонки.Добавить("Свойство", Новый ОписаниеТипов("ПланВидовХарактеристикСсылка.ДополнительныеРеквизитыИСведения")); - ТаблицаДопСведений.Колонки.Добавить("Наименование", Новый ОписаниеТипов("Строка")); - ТаблицаДопСведений.Колонки.Добавить("ТипЗначения", Новый ОписаниеТипов("ОписаниеТипов")); +КонецПроцедуры + +&НаСервере +Процедура ДобавитьСвойствоВСписокРеквизитов(Свойство) + ОписаниеСвойства = ЗначенияРеквизитовОбъекта(Свойство, "Ссылка,Наименование,ТипЗначения,ЭтоДополнительноеСведение"); + ОписаниеРеквизита = РеквизитыОбъекта.Добавить(); + ОписаниеРеквизита.ВидОперации = ?(ОписаниеСвойства.ЭтоДополнительноеСведение, 3, 2); + ОписаниеРеквизита.Свойство = ОписаниеСвойства.Ссылка; + ОписаниеРеквизита.Представление = ОписаниеСвойства.Наименование; + ОписаниеРеквизита.ДопустимыеТипы = ОписаниеСвойства.ТипЗначения; +КонецПроцедуры + +&НаСервере +Функция СписокСвойствДляВидаОбъектов(ВидОбъектов) + Результат = Новый Массив; - Для Каждого ДанныеОбъекта Из ВыбранныеОбъекты(Истина).Строки Цикл - ОбъектДляИзменения = ДанныеОбъекта.Ссылка; - ВидОбъектаПоСсылке = ВидОбъектаПоСсылке(ОбъектДляИзменения); - Если (ВидОбъектаПоСсылке = "Справочник" ИЛИ ВидОбъектаПоСсылке = "ПланВидовХарактеристик") - И ОбъектЯвляетсяГруппой(ОбъектДляИзменения) Тогда + ВидыСвойств = Новый Массив; + ВидыСвойств.Добавить("ДополнительныеРеквизиты"); + ВидыСвойств.Добавить("ДополнительныеСведения"); + + МодульУправлениеСвойствамиСлужебный = ОбщийМодуль("УправлениеСвойствамиСлужебный"); + Если МодульУправлениеСвойствамиСлужебный <> Неопределено Тогда + Для Каждого ВидСвойства Из ВидыСвойств Цикл + СписокСвойств = МодульУправлениеСвойствамиСлужебный.СписокСвойствДляВидаОбъектов(ВидОбъектов, ВидСвойства); + Если СписокСвойств <> Неопределено Тогда + Для Каждого Элемент Из СписокСвойств Цикл + Результат.Добавить(Элемент.Свойство); + КонецЦикла; + КонецЕсли; + КонецЦикла; + КонецЕсли; + + Возврат Результат; +КонецФункции + +&НаСервере +Процедура ДобавитьРеквизитыВНабор(НаборыРеквизитов, ОбъектМетаданных) + + Реквизиты = НаборыРеквизитов.ОписанияРеквизитов; + НеРедактируемые = НаборыРеквизитов.НеРедактируемые; + ФильтруемыеРеквизиты = НаборыРеквизитов.Фильтруемые; + БлокируемыеРеквизиты = НаборыРеквизитов.Блокируемые; + СписокДоступныхРеквизитов = НаборыРеквизитов.Доступные; + + Для Каждого ОписаниеРеквизита Из Реквизиты Цикл + Если СписокДоступныхРеквизитов.Найти(ОписаниеРеквизита.Имя) = Неопределено Тогда Продолжить; КонецЕсли; - МодульУправлениеСвойствами = ОбщийМодуль("УправлениеСвойствами"); - ДопРеквизиты = МодульУправлениеСвойствами.ПолучитьСписокСвойств(ОбъектДляИзменения, , Ложь); - Для Каждого СвойствоСсылка Из ДопРеквизиты Цикл - ОбъектСвойство = СвойствоСсылка.ПолучитьОбъект(); - НоваяСтрока = ТаблицаДопРеквизитов.Добавить(); - НоваяСтрока.Свойство = ОбъектСвойство.Ссылка;; - НоваяСтрока.Наименование = ОбъектСвойство.Наименование; - НоваяСтрока.ТипЗначения = ОбъектСвойство.ТипЗначения; - КонецЦикла; - - ДопСведения = МодульУправлениеСвойствами.ПолучитьСписокСвойств(ОбъектДляИзменения, Ложь); - Для Каждого СвойствоСсылка Из ДопСведения Цикл - ОбъектСвойство = СвойствоСсылка.ПолучитьОбъект(); - НоваяСтрока = ТаблицаДопСведений.Добавить(); - НоваяСтрока.Свойство = ОбъектСвойство.Ссылка;; - НоваяСтрока.Наименование= ОбъектСвойство.Наименование; - НоваяСтрока.ТипЗначения = ОбъектСвойство.ТипЗначения; - КонецЦикла; - КонецЦикла; - - ТаблицаДопРеквизитов.Свернуть("Свойство,Наименование,ТипЗначения"); - ТаблицаДопРеквизитов.Сортировать("Наименование Возр"); - ТаблицаДопСведений.Свернуть("Свойство,Наименование,ТипЗначения"); - ТаблицаДопСведений.Сортировать("Наименование Возр"); - - ДобавитьСвойствоВТаблицуРеквизитов(ТаблицаДопРеквизитов); - ДобавитьСвойствоВТаблицуРеквизитов(ТаблицаДопСведений, Ложь); - -КонецПроцедуры - -&НаСервере -Процедура ДобавитьСвойствоВТаблицуРеквизитов(ТаблицаДопСвойств, ЭтоДопРеквизит = Истина) - - Если ТаблицаДопСвойств = Неопределено Тогда - Возврат; - КонецЕсли; - - Для Каждого СтрокаТаблицы Из ТаблицаДопСвойств Цикл - Реквизит = РеквизитыОбъекта.Добавить(); - Реквизит.ВидОперации = ?(ЭтоДопРеквизит, 2, 3); - Реквизит.Свойство = СтрокаТаблицы.Свойство; - Реквизит.Представление = СтрокаТаблицы.Наименование; - Реквизит.ДопустимыеТипы = СтрокаТаблицы.ТипЗначения; - КонецЦикла; - -КонецПроцедуры - -// Добавляет в набор операций (фактически набор реквизитов и свойств) те, -// которые могут быть отредактированы. -// В него не попадают: -// не редактируемые - зависят от настроек самого объекта метаданных -// фильтруемые - задаются для класса объектов метаданных. -// В него попадают с исключением: -// БлокируемыеРеквизиты - реквизиты, которые могут редактироваться -// только при наличии у пользователя роли РедактированиеРеквизитовОбъектов. -// Передаваемые параметры: -// Реквизиты - коллекция реквизитов (стандартных реквизитов) объекта метаданных. -// НеРедактируемые, ФильтруемыеРеквизиты - массив - фильтр по реквизитам. -// БлокируемыеРеквизиты - массив - блокируемые реквизиты. -// -&НаСервере -Процедура ДобавитьРеквизитыВНабор(Реквизиты, НеРедактируемые, ФильтруемыеРеквизиты, БлокируемыеРеквизиты, ОбъектМетаданных) - - Для Каждого ОписаниеРеквизита Из Реквизиты Цикл Если ТипЗнч(ОписаниеРеквизита) = Тип("ОписаниеСтандартногоРеквизита") Тогда - Если НЕ ПравоДоступа("Редактирование", Метаданные.НайтиПоПолномуИмени(ВидИзменяемыхОбъектов), , ОписаниеРеквизита.Имя) Тогда + Если НЕ ПравоДоступа("Редактирование", ОбъектМетаданных, , ОписаниеРеквизита.Имя) Тогда Продолжить; КонецЕсли; Иначе @@ -2186,22 +2425,29 @@ КонецЕсли; КонецЕсли; - ПараметрыВыбораСтрока = ПараметрыВыбораСтрокой(ОписаниеРеквизита.ПараметрыВыбора); - СвязиПараметровВыбораСтрока = СвязиПараметровВыбораСтрокой(ОписаниеРеквизита.СвязиПараметровВыбора); - - НоваяОперация = РеквизитыОбъекта.Добавить(); - НоваяОперация.Имя = ОписаниеРеквизита.Имя; - НоваяОперация.Представление = ОписаниеРеквизита.Представление(); - НоваяОперация.ВидОперации = 1; // реквизит - НоваяОперация.ДопустимыеТипы = ОписаниеРеквизита.Тип; - НоваяОперация.ПараметрыВыбора = ПараметрыВыбораСтрока; - НоваяОперация.СвязиПараметровВыбора = СвязиПараметровВыбораСтрока; - НоваяОперация.ВыборГруппИЭлементов = ВыборГруппИЭлементов; - - Если БлокируемыеРеквизиты.Найти(ОписаниеРеквизита.Имя) <> Неопределено Тогда - НоваяОперация.ЗаблокированныйРеквизит = Истина; + СписокВидовИзменяемыхОбъектов = СтрРазделить(ВидыИзменяемыхОбъектов, ",", Ложь); + Если СписокВидовИзменяемыхОбъектов.Количество() = 1 Тогда + ПараметрыВыбораСтрока = ПараметрыВыбораСтрокой(ОписаниеРеквизита.ПараметрыВыбора); + СвязиПараметровВыбораСтрока = СвязиПараметровВыбораСтрокой(ОписаниеРеквизита.СвязиПараметровВыбора); + Иначе + ПараметрыВыбораСтрока = ПараметрыВыбораСтрокой(Новый Массив); + СвязиПараметровВыбораСтрока = СвязиПараметровВыбораСтрокой(Новый Массив); КонецЕсли; + РеквизитОбъекта = РеквизитыОбъекта.Добавить(); + РеквизитОбъекта.Имя = ОписаниеРеквизита.Имя; + РеквизитОбъекта.Представление = ОписаниеРеквизита.Представление(); + РеквизитОбъекта.ВидОперации = 1; // реквизит + РеквизитОбъекта.ДопустимыеТипы = ОписаниеРеквизита.Тип; + РеквизитОбъекта.ПараметрыВыбора = ПараметрыВыбораСтрока; + РеквизитОбъекта.СвязиПараметровВыбора = СвязиПараметровВыбораСтрока; + РеквизитОбъекта.ВыборГруппИЭлементов = ВыборГруппИЭлементов; + + Если БлокируемыеРеквизиты.Найти(ОписаниеРеквизита.Имя) <> Неопределено Тогда + РеквизитОбъекта.ЗаблокированныйРеквизит = Истина; + КонецЕсли; + + РеквизитОбъекта.ЭтоСтандартныйРеквизит = ТипЗнч(ОписаниеРеквизита) = Тип("ОписаниеСтандартногоРеквизита"); КонецЦикла; КонецПроцедуры @@ -2283,7 +2529,7 @@ КонецЕсли; Для Каждого ТабличнаяЧасть Из ТабличныеЧастиОбъекта Цикл ИмяТабличнойЧасти = Сред(ТабличнаяЧасть.Значение, СтрДлина("ТабличнаяЧасть") + 1); - Если Лев(ЭлементОтбора.ЛевоеЗначение, СтрДлина(ИмяТабличнойЧасти)) = ИмяТабличнойЧасти Тогда + Если СтрНачинаетсяС(ЭлементОтбора.ЛевоеЗначение, ИмяТабличнойЧасти) Тогда ЕстьОтборПоСтрокам = Истина; Прервать; КонецЕсли; @@ -2340,8 +2586,7 @@ Если Не ПустаяСтрока(Пояснение) Тогда Пояснение = Пояснение + ", "; КонецЕсли; - Пояснение = Пояснение + ПодставитьПараметрыВСтроку( - НСтр("ru = 'реквизиты (%1)'"), ИзменяемыеРеквизиты.Количество()); + Пояснение = Пояснение + ПодставитьПараметрыВСтроку(НСтр("ru = 'реквизиты (%1)'"), ИзменяемыеРеквизиты.Количество()); Иначе Для Каждого Реквизит Из ИзменяемыеРеквизиты Цикл Если Не ПустаяСтрока(Пояснение) Тогда @@ -2366,7 +2611,7 @@ Если ЕстьОтборПоСтрокам Тогда Пояснение = Пояснение + " " + НСтр("ru = 'в тех строках выбранных элементов, которые удовлетворяют условиям отбора'") Иначе - Пояснение = Пояснение + " " + НСтр("ru = 'во всех строках выбранных элементов'") + Пояснение = Пояснение + " " + НСтр("ru = '<b>во всех строках</b> выбранных элементов'") КонецЕсли; КонецЕсли; КонецЕсли; @@ -2375,13 +2620,13 @@ Если Не ПустаяСтрока(Пояснение) Тогда Пояснение = НСтр("ru = 'Изменить'") + " " + Пояснение + "."; Иначе - Пояснение = НСтр("ru = 'Выполнить перезапись выбранных элементов.'"); + Пояснение = НСтр("ru = 'Выполнить <b>перезапись</b> выбранных элементов.'"); КонецЕсли; Иначе Пояснение = НСтр("ru = 'Не выбраны элементы, реквизиты которых необходимо изменить.'"); КонецЕсли; - Элементы.ПояснениеОНастроенныхИзменениях.Заголовок = Пояснение; + Элементы.ПояснениеОНастроенныхИзменениях.Заголовок = ФорматированнаяСтрока(Пояснение); КонецПроцедуры &НаСервере @@ -2390,21 +2635,12 @@ Если ЕстьНастроенныеОтборы() Тогда ТекстСообщенияОбОшибке = ""; КоличествоВыбранныхОбъектов = КоличествоВыбранныхОбъектов(Истина, , ТекстСообщенияОбОшибке); - Если ПустаяСтрока(ТекстСообщенияОбОшибке) Тогда - ТекстНадписи = ПодставитьПараметрыВСтроку( - НСтр("ru = 'Выбрано элементов: %1'"), КоличествоВыбранныхОбъектов); - Иначе - ЕстьОшибкиВОтборе = Истина; - ТекстНадписи = ПодставитьПараметрыВСтроку( - НСтр("ru = 'Элементы не выбраны. %1'"), ТекстСообщенияОбОшибке); - КонецЕсли; + ТекстНадписи = ЧислоЦифрамиПредметИсчисленияПрописью(КоличествоВыбранныхОбъектов, НСтр("ru = 'элемент,элемента,элементов'")); Иначе - ТекстНадписи = НСтр("ru = 'Изменять все элементы'"); + ТекстНадписи = НСтр("ru = 'Все элементы'"); КонецЕсли; Элементы.НастройкаОтбора.Заголовок = ТекстНадписи; - Элементы.НастройкаОтбора.Гиперссылка = Не ЕстьОшибкиВОтборе; - КонецПроцедуры &НаСервере @@ -2548,6 +2784,101 @@ Возврат Результат; КонецФункции +&НаСервере +Процедура ЗаполнитьСписокТиповОбъектов() + КоллекцииОбъектовМетаданных = Новый Массив; + КоллекцииОбъектовМетаданных.Добавить(Метаданные.Справочники); + КоллекцииОбъектовМетаданных.Добавить(Метаданные.Документы); + КоллекцииОбъектовМетаданных.Добавить(Метаданные.БизнесПроцессы); + КоллекцииОбъектовМетаданных.Добавить(Метаданные.Задачи); + КоллекцииОбъектовМетаданных.Добавить(Метаданные.ПланыВидовРасчета); + КоллекцииОбъектовМетаданных.Добавить(Метаданные.ПланыВидовХарактеристик); + КоллекцииОбъектовМетаданных.Добавить(Метаданные.ПланыСчетов); + КоллекцииОбъектовМетаданных.Добавить(Метаданные.ПланыОбмена); + + ПрефиксУдаляемыхОбъектов = "Удалить"; + Для Каждого КоллекцияОбъектовМетаданных Из КоллекцииОбъектовМетаданных Цикл + Для Каждого ОбъектМетаданных Из КоллекцияОбъектовМетаданных Цикл + Если Не Объект.ПоказыватьСлужебныеРеквизиты Тогда + Если НРег(Лев(ОбъектМетаданных.Имя, СтрДлина(ПрефиксУдаляемыхОбъектов))) = НРег(ПрефиксУдаляемыхОбъектов) + Или ЭтоСлужебныйОбъект(ОбъектМетаданных) Тогда + Продолжить; + КонецЕсли; + КонецЕсли; + Если ПравоДоступа("Изменение", ОбъектМетаданных) Тогда + Элементы.ПредставлениеИзменяемыхОбъектов.СписокВыбора.Добавить(ОбъектМетаданных.ПолноеИмя(), ОбъектМетаданных.Представление()); + КонецЕсли; + КонецЦикла; + КонецЦикла; + + Элементы.ПредставлениеИзменяемыхОбъектов.СписокВыбора.СортироватьПоПредставлению(); +КонецПроцедуры + +&НаКлиенте +Процедура ПояснениеОНастроенныхИзмененияхОбработкаНавигационнойСсылки(Элемент, НавигационнаяСсылкаФорматированнойСтроки, СтандартнаяОбработка) + Если НавигационнаяСсылкаФорматированнойСтроки = "ПерейтиКНастройкеОтбора" Тогда + СтандартнаяОбработка = Ложь; + ПерейтиКНастройкеОтбора(); + КонецЕсли; +КонецПроцедуры + +&НаКлиенте +Процедура ПерейтиКНастройкеОтбора() + Если Не ПустаяСтрока(ВидыИзменяемыхОбъектов) Тогда + ОписаниеОповещения = Новый ОписаниеОповещения("ПриЗакрытииФормыВыбранныхОбъектов", ЭтотОбъект); + ОткрытьФорму(ПолноеИмяФормы("ВыбранныеЭлементы"), + Новый Структура("ВыбранныеТипы, Настройки", ВидыИзменяемыхОбъектов, КомпоновщикНастроек.Настройки), , , , , ОписаниеОповещения); + КонецЕсли; +КонецПроцедуры + +&НаСервере +Функция ЭтоСлужебныйОбъект(ОбъектМетаданных) + ОбработкаОбъект = РеквизитФормыВЗначение("Объект"); + Возврат ОбработкаОбъект.ЭтоСлужебныйОбъект(ОбъектМетаданных); +КонецФункции + +&НаКлиенте +Функция ПараметрыКонструктора(Формула) + Результат = Новый Структура; + Результат.Вставить("Формула", Формула); + Результат.Вставить("ОперандыЗаголовок", НСтр("ru = 'Доступные реквизиты'")); + Результат.Вставить("Операнды", Операнды()); + Результат.Вставить("Расширенный", Ложь); + Возврат Результат; +КонецФункции + +&НаСервере +Функция Операнды() + ТаблицаОперандов = Новый ТаблицаЗначений; + ТаблицаОперандов.Колонки.Добавить("Идентификатор"); + ТаблицаОперандов.Колонки.Добавить("Представление"); + + Для Каждого ОписаниеРеквизита Из РеквизитыОбъекта Цикл + Операнд = ТаблицаОперандов.Добавить(); + Операнд.Идентификатор = ОписаниеРеквизита.Представление; + КонецЦикла; + + Возврат ПоместитьВоВременноеХранилище(ТаблицаОперандов, УникальныйИдентификатор); +КонецФункции + +&НаКлиенте +Функция ЕстьОшибкаВВыражении(Знач Выражение, ТекстОшибки = "") + + Выражение = Сред(Выражение, 2); + + Для Каждого ОписаниеРеквизита Из РеквизитыОбъекта Цикл + Выражение = СтрЗаменить(Выражение, "[" + ОписаниеРеквизита.Представление + "]", """1"""); + КонецЦикла; + + Попытка + Возврат Вычислить(Выражение) = Неопределено; + Исключение + ТекстОшибки = КраткоеПредставлениеОшибки(ИнформацияОбОшибке()); + Возврат Истина; + КонецПопытки; + +КонецФункции + //////////////////////////////////////////////////////////////////////////////// // Процедуры и функции из базовой функциональности для обеспечения автономности. @@ -2662,7 +2993,7 @@ Функция МенеджерОбъектаПоПолномуИмени(ПолноеИмя) Перем КлассОМ, ИмяОМ, Менеджер; - ЧастиИмени = РазложитьСтрокуВМассивПодстрок(ПолноеИмя, "."); + ЧастиИмени = СтрРазделить(ПолноеИмя, "."); Если ЧастиИмени.Количество() = 2 Тогда КлассОМ = ЧастиИмени[0]; @@ -2719,8 +3050,7 @@ // Перерасчет Менеджер = РегистрыРасчета[ИмяОМ].Перерасчеты; Иначе - ВызватьИсключение ПодставитьПараметрыВСтроку( - НСтр("ru = 'Неизвестный тип объекта метаданных ""%1""'"), ПолноеИмя); + ВызватьИсключение ПодставитьПараметрыВСтроку(НСтр("ru = 'Неизвестный тип объекта метаданных ""%1""'"), ПолноеИмя); КонецЕсли; КонецЕсли; @@ -2745,175 +3075,21 @@ КонецПопытки; КонецЕсли; - ВызватьИсключение ПодставитьПараметрыВСтроку( - НСтр("ru = 'Неизвестный тип объекта метаданных ""%1""'"), ПолноеИмя); + ВызватьИсключение ПодставитьПараметрыВСтроку(НСтр("ru = 'Неизвестный тип объекта метаданных ""%1""'"), ПолноеИмя); КонецФункции -// Разбивает строку на несколько строк по разделителю. Разделитель может иметь любую длину. -// -// Параметры: -// Строка - Строка - текст с разделителями; -// Разделитель - Строка - разделитель строк текста, минимум 1 символ; -// ПропускатьПустыеСтроки - Булево - признак необходимости включения в результат пустых строк. -// Если параметр не задан, то функция работает в режиме совместимости со своей предыдущей версией: -// - для разделителя-пробела пустые строки не включаются в результат, для остальных разделителей пустые строки -// включаются в результат. -// Е если параметр Строка не содержит значащих символов или не содержит ни одного символа (пустая строка), то в -// случае разделителя-пробела результатом функции будет массив, содержащий одно значение "" (пустая строка), а -// при других разделителях результатом функции будет пустой массив. -// -// -// Возвращаемое значение: -// Массив - массив строк. -// -// Примеры: -// РазложитьСтрокуВМассивПодстрок(",один,,два,", ",") - возвратит массив из 5 элементов, три из которых - пустые -// строки; -// РазложитьСтрокуВМассивПодстрок(",один,,два,", ",", Истина) - возвратит массив из двух элементов; -// РазложитьСтрокуВМассивПодстрок(" один два ", " ") - возвратит массив из двух элементов; -// РазложитьСтрокуВМассивПодстрок("") - возвратит пустой массив; -// РазложитьСтрокуВМассивПодстрок("",,Ложь) - возвратит массив с одним элементом "" (пустой строкой); -// РазложитьСтрокуВМассивПодстрок("", " ") - возвратит массив с одним элементом "" (пустой строкой); -// -&НаКлиентеНаСервереБезКонтекста -Функция РазложитьСтрокуВМассивПодстрок(Знач Строка, Знач Разделитель = ",", Знач ПропускатьПустыеСтроки = Неопределено) - - Результат = Новый Массив; - - // Для обеспечения обратной совместимости. - Если ПропускатьПустыеСтроки = Неопределено Тогда - ПропускатьПустыеСтроки = ?(Разделитель = " ", Истина, Ложь); - Если ПустаяСтрока(Строка) Тогда - Если Разделитель = " " Тогда - Результат.Добавить(""); - КонецЕсли; - Возврат Результат; - КонецЕсли; - КонецЕсли; - // - - Позиция = Найти(Строка, Разделитель); - Пока Позиция > 0 Цикл - Подстрока = Лев(Строка, Позиция - 1); - Если Не ПропускатьПустыеСтроки Или Не ПустаяСтрока(Подстрока) Тогда - Результат.Добавить(Подстрока); - КонецЕсли; - Строка = Сред(Строка, Позиция + СтрДлина(Разделитель)); - Позиция = Найти(Строка, Разделитель); - КонецЦикла; - - Если Не ПропускатьПустыеСтроки Или Не ПустаяСтрока(Строка) Тогда - Результат.Добавить(Строка); - КонецЕсли; - - Возврат Результат; - -КонецФункции - -&НаКлиентеНаСервереБезКонтекста -// Следует использовать МассивВСтроку. -// Объединяет строки из массива в строку с разделителями. -// -// Параметры: -// Массив - Массив - массив строк которые необходимо объединить в одну строку; -// Разделитель - Строка - любой набор символов, который будет использован в качестве разделителя. -// -// Возвращаемое значение: -// Строка - строка с разделителями. -// -Функция СтрокаИзМассиваПодстрок(Массив, Разделитель = ",", СокращатьНепечатаемыеСимволы = Ложь) - - Результат = ""; - - Для Индекс = 0 По Массив.ВГраница() Цикл - Подстрока = Массив[Индекс]; - - Если СокращатьНепечатаемыеСимволы Тогда - Подстрока = СокрЛП(Подстрока); - КонецЕсли; - - Если ТипЗнч(Подстрока) <> Тип("Строка") Тогда - Подстрока = Строка(Подстрока); - КонецЕсли; - - Если Индекс > 0 Тогда - Результат = Результат + Разделитель; - КонецЕсли; - - Результат = Результат + Подстрока; - КонецЦикла; - - Возврат Результат; - -КонецФункции - -// Подставляет параметры в строку. -// Параметры в строке задаются как %<номер параметра>. Нумерация параметров начинается с единицы. -// -// Параметры: -// СтрокаПодстановки - Строка - шаблон строки с параметрами (вхождениями вида "%ИмяПараметра"); -// Параметр<n> - Строка - подставляемый параметр. -// -// Возвращаемое значение: -// Строка - текстовая строка с подставленными параметрами. -// -// Пример: -// ПодставитьПараметрыВСтроку(НСтр("ru='%1 пошел в %2'"), "Вася", "Зоопарк") = "Вася пошел в Зоопарк". -// &НаКлиентеНаСервереБезКонтекста Функция ПодставитьПараметрыВСтроку(Знач СтрокаПодстановки, Знач Параметр1, Знач Параметр2 = Неопределено, Знач Параметр3 = Неопределено) - ИспользоватьАльтернативныйАлгоритм = - Найти(Параметр1, "%") - Или Найти(Параметр2, "%") - Или Найти(Параметр3, "%"); - - Если ИспользоватьАльтернативныйАлгоритм Тогда - СтрокаПодстановки = ПодставитьПараметрыВСтрокуАльтернативныйАлгоритм(СтрокаПодстановки, Параметр1, - Параметр2, Параметр3); - Иначе - СтрокаПодстановки = СтрЗаменить(СтрокаПодстановки, "%1", Параметр1); - СтрокаПодстановки = СтрЗаменить(СтрокаПодстановки, "%2", Параметр2); - СтрокаПодстановки = СтрЗаменить(СтрокаПодстановки, "%3", Параметр3); - КонецЕсли; + СтрокаПодстановки = СтрЗаменить(СтрокаПодстановки, "%1", Параметр1); + СтрокаПодстановки = СтрЗаменить(СтрокаПодстановки, "%2", Параметр2); + СтрокаПодстановки = СтрЗаменить(СтрокаПодстановки, "%3", Параметр3); Возврат СтрокаПодстановки; КонецФункции -// Вставляет параметры в строку, учитывая, что в параметрах могут использоваться подстановочные слова %1, %2 и т.д. -&НаКлиентеНаСервереБезКонтекста -Функция ПодставитьПараметрыВСтрокуАльтернативныйАлгоритм(Знач СтрокаПодстановки, - Знач Параметр1, Знач Параметр2 = Неопределено, Знач Параметр3 = Неопределено) - - Результат = ""; - Позиция = Найти(СтрокаПодстановки, "%"); - Пока Позиция > 0 Цикл - Результат = Результат + Лев(СтрокаПодстановки, Позиция - 1); - СимволПослеПроцента = Сред(СтрокаПодстановки, Позиция + 1, 1); - ПодставляемыйПараметр = ""; - Если СимволПослеПроцента = "1" Тогда - ПодставляемыйПараметр = Параметр1; - ИначеЕсли СимволПослеПроцента = "2" Тогда - ПодставляемыйПараметр = Параметр2; - ИначеЕсли СимволПослеПроцента = "3" Тогда - ПодставляемыйПараметр = Параметр3; - КонецЕсли; - Если ПодставляемыйПараметр = "" Тогда - Результат = Результат + "%"; - СтрокаПодстановки = Сред(СтрокаПодстановки, Позиция + 1); - Иначе - Результат = Результат + ПодставляемыйПараметр; - СтрокаПодстановки = Сред(СтрокаПодстановки, Позиция + 2); - КонецЕсли; - Позиция = Найти(СтрокаПодстановки, "%"); - КонецЦикла; - Результат = Результат + СтрокаПодстановки; - - Возврат Результат; -КонецФункции - // Функция ВидОбъектаПоСсылке возвращает имя вида объектов метаданных // по ссылке на объект. // @@ -2973,8 +3149,7 @@ Возврат "Перечисление"; Иначе - ВызватьИсключение ПодставитьПараметрыВСтроку( - НСтр("ru='Неверный тип значения параметра (%1)'"), Строка(Тип)); + ВызватьИсключение ПодставитьПараметрыВСтроку(НСтр("ru='Неверный тип значения параметра (%1)'"), Строка(Тип)); КонецЕсли; @@ -3436,7 +3611,7 @@ Если ПустаяСтрока(Реквизиты) Тогда Возврат Новый Структура; КонецЕсли; - Реквизиты = РазложитьСтрокуВМассивПодстрок(Реквизиты, ",", Истина); + Реквизиты = СтрРазделить(Реквизиты, ",", Ложь); КонецЕсли; СтруктураРеквизитов = Новый Структура; @@ -3447,9 +3622,7 @@ СтруктураРеквизитов.Вставить(СтрЗаменить(Реквизит, ".", ""), Реквизит); КонецЦикла; Иначе - ВызватьИсключение ПодставитьПараметрыВСтроку( - НСтр("ru = 'Неверный тип второго параметра Реквизиты: %1'"), - Строка(ТипЗнч(Реквизиты))); + ВызватьИсключение ПодставитьПараметрыВСтроку(НСтр("ru = 'Неверный тип второго параметра Реквизиты: %1'"), Строка(ТипЗнч(Реквизиты))); КонецЕсли; ТекстПолей = ""; @@ -3529,15 +3702,13 @@ КонецЕсли; Если ТипЗнч(Модуль) <> Тип("ОбщийМодуль") Тогда - ВызватьИсключение ПодставитьПараметрыВСтроку( - НСтр("ru = 'Общий модуль ""%1"" не найден.'"), Имя); + ВызватьИсключение ПодставитьПараметрыВСтроку(НСтр("ru = 'Общий модуль ""%1"" не найден.'"), Имя); КонецЕсли; #Иначе Модуль = Вычислить(Имя); #Если НЕ ВебКлиент Тогда Если ТипЗнч(Модуль) <> Тип("ОбщийМодуль") Тогда - ВызватьИсключение ПодставитьПараметрыВСтроку( - НСтр("ru = 'Общий модуль ""%1"" не найден.'"), Имя); + ВызватьИсключение ПодставитьПараметрыВСтроку(НСтр("ru = 'Общий модуль ""%1"" не найден.'"), Имя); КонецЕсли; #КонецЕсли #КонецЕсли @@ -3562,7 +3733,7 @@ // Возвращаемое значение: // Булево. // -&НаСервереБезКонтекста +&НаСервере Функция ПодсистемаСуществует(ПолноеИмяПодсистемы) Если Не ВерсияБСПСоответствуетТребованиям() Тогда @@ -3613,7 +3784,7 @@ Если ЭтоСсылка(Тип) Тогда ПолноеИмя = Метаданные.НайтиПоТипу(Тип).ПолноеИмя(); - ИмяОбъекта = РазложитьСтрокуВМассивПодстрок(ПолноеИмя, ".")[1]; + ИмяОбъекта = СтрРазделить(ПолноеИмя, ".")[1]; Если Справочники.ТипВсеСсылки().СодержитТип(Тип) Тогда Представление = "СправочникСсылка"; @@ -3786,35 +3957,128 @@ КонецФункции -&НаСервереБезКонтекста -Функция ВерсияБСПСоответствуетТребованиям() +// Форматирует строку в соответствии с заданным шаблоном. +// Возможные значения тегов выделения: +// <b> Строка </b> - выделяет строку жирным шрифтом. +// <a href = "Ссылка"> Строка </a> +// +// Пример: +// Минимальная версия программы <b>1.1</b>. <a href = "Обновление">Обновите</a> программу. +// +// Возвращаемое значение: +// ФорматированнаяСтрока +Функция ФорматированнаяСтрока(Знач Строка) - Попытка - МодульСтандартныеПодсистемыСервер = ОбщийМодуль("СтандартныеПодсистемыСервер"); - Исключение - // Модуль не существует - МодульСтандартныеПодсистемыСервер = Неопределено; - КонецПопытки; - Если МодульСтандартныеПодсистемыСервер = Неопределено Тогда - Возврат Ложь; - КонецЕсли; + СтрокиСВыделением = Новый СписокЗначений; + Пока СтрНайти(Строка, "<b>") <> 0 Цикл + НачалоВыделения = СтрНайти(Строка, "<b>"); + СтрокаДоОткрывающегоТега = Лев(Строка, НачалоВыделения - 1); + СтрокиСВыделением.Добавить(СтрокаДоОткрывающегоТега); + СтрокаПослеОткрывающегоТега = Сред(Строка, НачалоВыделения + 3); + КонецВыделения = СтрНайти(СтрокаПослеОткрывающегоТега, "</b>"); + ВыделенныйФрагмент = Лев(СтрокаПослеОткрывающегоТега, КонецВыделения - 1); + СтрокиСВыделением.Добавить(ВыделенныйФрагмент,, Истина); + СтрокаПослеВыделения = Сред(СтрокаПослеОткрывающегоТега, КонецВыделения + 4); + Строка = СтрокаПослеВыделения; + КонецЦикла; + СтрокиСВыделением.Добавить(Строка); - ВерсияБСП = МодульСтандартныеПодсистемыСервер.ВерсияБиблиотеки(); - Возврат НомерВерсииВЧисло(ВерсияБСП) >= НомерВерсииВЧисло("2.2.4.9"); + СтрокиСоСсылками = Новый СписокЗначений; + Для Каждого ЧастьСтроки Из СтрокиСВыделением Цикл + + Строка = ЧастьСтроки.Значение; + + Если ЧастьСтроки.Пометка Тогда + СтрокиСоСсылками.Добавить(Строка,, Истина); + Продолжить; + КонецЕсли; + + НачалоВыделения = СтрНайти(Строка, "<a href = "); + Пока НачалоВыделения <> 0 Цикл + СтрокаДоОткрывающегоТега = Лев(Строка, НачалоВыделения - 1); + СтрокиСоСсылками.Добавить(СтрокаДоОткрывающегоТега, ); + + СтрокаПослеОткрывающегоТега = Сред(Строка, НачалоВыделения + 9); + ЗакрывающийТег = СтрНайти(СтрокаПослеОткрывающегоТега, ">"); + + Ссылка = СокрЛП(Лев(СтрокаПослеОткрывающегоТега, ЗакрывающийТег - 2)); + Если СтрНачинаетсяС(Ссылка, """") Тогда + Ссылка = Сред(Ссылка, 2, СтрДлина(Ссылка) - 1); + КонецЕсли; + Если СтрЗаканчиваетсяНа(Ссылка, """") Тогда + Ссылка = Сред(Ссылка, 1, СтрДлина(Ссылка) - 1); + КонецЕсли; + + СтрокаПослеСсылки = Сред(СтрокаПослеОткрывающегоТега, ЗакрывающийТег + 1); + КонецВыделения = СтрНайти(СтрокаПослеСсылки, "</a>"); + ТекстСсылки = Лев(СтрокаПослеСсылки, КонецВыделения - 1); + СтрокиСоСсылками.Добавить(ТекстСсылки, Ссылка); + + СтрокаПослеВыделения = Сред(СтрокаПослеСсылки, КонецВыделения + 4); + Строка = СтрокаПослеВыделения; + + НачалоВыделения = СтрНайти(Строка, "<a href = "); + КонецЦикла; + СтрокиСоСсылками.Добавить(Строка); + + КонецЦикла; + + МассивСтроки = Новый Массив; + Для Каждого ЧастьСтроки Из СтрокиСоСсылками Цикл + + Если ЧастьСтроки.Пометка Тогда + МассивСтроки.Добавить(Новый ФорматированнаяСтрока(ЧастьСтроки.Значение, Новый Шрифт(,,Истина))); + ИначеЕсли Не ПустаяСтрока(ЧастьСтроки.Представление) Тогда + МассивСтроки.Добавить(Новый ФорматированнаяСтрока(ЧастьСтроки.Значение,,,, ЧастьСтроки.Представление)); + Иначе + МассивСтроки.Добавить(ЧастьСтроки.Значение); + КонецЕсли; + + КонецЦикла; + + Возврат Новый ФорматированнаяСтрока(МассивСтроки); КонецФункции -&НаСервереБезКонтекста -Функция НомерВерсииВЧисло(НомерВерсии) - ЧастиНомера = РазложитьСтрокуВМассивПодстрок(НомерВерсии, ".", Истина); - Если ЧастиНомера.Количество() <> 4 Тогда - Возврат 0; - КонецЕсли; - Результат = 0; - Для Каждого ЧастьНомера Из ЧастиНомера Цикл - Результат = Результат * 1000 + Число(ЧастьНомера); +// Возвращает текстовое представление числа с единицей измерения в правильном склонении и числе. +// +// Параметры: +// Число - Число - любое целое число. +// ПараметрыПредметаИсчисления - Строка - варианты написания единицы измерения в родительном падеже для одной, +// для двух и для пяти единиц, разделитель - запятая. +// +// Возвращаемое значение: +// Строка - текстовое представление количества единиц, число записывается цифрами. +// +// Примеры: +// ЧислоЦифрамиПредметИсчисленияПрописью(23, "минуту,минуты,минут") = "23 минуты"; +// ЧислоЦифрамиПредметИсчисленияПрописью(15, "минуту,минуты,минут") = "15 минут". +Функция ЧислоЦифрамиПредметИсчисленияПрописью(Знач Число, Знач ПараметрыПредметаИсчисления) + + Результат = Формат(Число, "ЧН=0"); + ПредставленияПредмета = Новый Массив; + + ПараметрыПредметаИсчисления = СтрРазделить(ПараметрыПредметаИсчисления, ","); + Для Каждого Параметр Из ПараметрыПредметаИсчисления Цикл + ПредставленияПредмета.Добавить(СокрЛП(Параметр)); КонецЦикла; + + Число = Число % 100; + Если Число > 20 Тогда + Число = Число % 10; + КонецЕсли; + + Индекс = ?(Число = 1, 0, ?(Число > 1 И Число < 5, 1, 2)); + Результат = Результат + " " + ПредставленияПредмета[Индекс]; + Возврат Результат; + +КонецФункции + +&НаСервере +Функция ВерсияБСПСоответствуетТребованиям() + ОбработкаОбъект = РеквизитФормыВЗначение("Объект"); + Возврат ОбработкаОбъект.ВерсияБСПСоответствуетТребованиям(); КонецФункции &НаСервере @@ -3836,4 +4100,13 @@ КонецФункции +&НаСервере +Функция КартинкаВидыОпераций() + Если ВерсияБСПСоответствуетТребованиям() Тогда + Возврат БиблиотекаКартинок["ВидыОпераций"]; + Иначе + Возврат Новый Картинка; + КонецЕсли; +КонецФункции + #КонецОбласти diff --git a/SSL/src/DataProcessors/ГрупповоеИзменениеРеквизитов/ObjectModule.bsl b/SSL/src/DataProcessors/ГрупповоеИзменениеРеквизитов/ObjectModule.bsl index 9463a4393..42af1611c 100644 --- a/SSL/src/DataProcessors/ГрупповоеИзменениеРеквизитов/ObjectModule.bsl +++ b/SSL/src/DataProcessors/ГрупповоеИзменениеРеквизитов/ObjectModule.bsl @@ -28,43 +28,147 @@ КонецФункции // Для внутреннего использования. -Функция ТекстЗапроса(ОбъектМетаданных) Экспорт +Функция ТекстЗапроса(ТипыИзменяемыхОбъектов) Экспорт - ТекстЗапроса = ""; - - Для Каждого Реквизит Из ОбъектМетаданных.СтандартныеРеквизиты Цикл - Если Не ПустаяСтрока(ТекстЗапроса) Тогда - ТекстЗапроса = ТекстЗапроса + "," + Символы.ПС; - КонецЕсли; - ТекстЗапроса = ТекстЗапроса + Реквизит.Имя + " КАК " + Реквизит.Имя; - КонецЦикла; - - Для Каждого Реквизит Из ОбъектМетаданных.Реквизиты Цикл - Если Не ПустаяСтрока(ТекстЗапроса) Тогда - ТекстЗапроса = ТекстЗапроса + "," + Символы.ПС; - КонецЕсли; - ТекстЗапроса = ТекстЗапроса + Реквизит.Имя; + ОбъектыМетаданных = Новый Массив; + Для Каждого ИмяОбъекта Из СтрРазделить(ТипыИзменяемыхОбъектов, ",", Ложь) Цикл + ОбъектыМетаданных.Добавить(Метаданные.НайтиПоПолномуИмени(ИмяОбъекта)); КонецЦикла; - Для Каждого ТабличнаяЧасть Из ОбъектМетаданных.ТабличныеЧасти Цикл - ТекстЗапроса = ТекстЗапроса + "," + Символы.ПС + ТабличнаяЧасть.Имя + ".("; - СтрокаРеквизитов = "НомерСтроки"; - Для Каждого Реквизит Из ТабличнаяЧасть.Реквизиты Цикл - Если Не ПустаяСтрока(СтрокаРеквизитов) Тогда - СтрокаРеквизитов = СтрокаРеквизитов + "," + Символы.ПС; + СтруктураОбъектов = ОбщиеРеквизитыОбъектов(ТипыИзменяемыхОбъектов); + + Результат = ""; + ПсевдонимТаблицы = "ПсевдонимЗаданнойТаблицы"; + Для Каждого ОбъектМетаданных Из ОбъектыМетаданных Цикл + + Если Не ПустаяСтрока(Результат) Тогда + Результат = Результат + Символы.ПС + Символы.ПС + "ОБЪЕДИНИТЬ ВСЕ" + Символы.ПС + Символы.ПС; + КонецЕсли; + + ТекстЗапроса = ""; + + Для Каждого ИмяРеквизита Из СтруктураОбъектов.Реквизиты Цикл + Если Не ПустаяСтрока(ТекстЗапроса) Тогда + ТекстЗапроса = ТекстЗапроса + "," + Символы.ПС; КонецЕсли; - СтрокаРеквизитов = СтрокаРеквизитов + Реквизит.Имя; + ТекстЗапроса = ТекстЗапроса + ПсевдонимТаблицы + "." + ИмяРеквизита + " КАК " + ИмяРеквизита; КонецЦикла; - ТекстЗапроса = ТекстЗапроса + СтрокаРеквизитов +" - |)"; + Для Каждого ТабличнаяЧасть Из СтруктураОбъектов.ТабличныеЧасти Цикл + ИмяТабличнойЧасти = ТабличнаяЧасть.Ключ; + ТекстЗапроса = ТекстЗапроса + "," + Символы.ПС + ПсевдонимТаблицы + "." + ИмяТабличнойЧасти + ".("; + + СтрокаРеквизитов = "НомерСтроки"; + РеквизитыТабличнойЧасти = ТабличнаяЧасть.Значение; + Для Каждого ИмяРеквизита Из РеквизитыТабличнойЧасти Цикл + Если Не ПустаяСтрока(СтрокаРеквизитов) Тогда + СтрокаРеквизитов = СтрокаРеквизитов + "," + Символы.ПС; + КонецЕсли; + СтрокаРеквизитов = СтрокаРеквизитов + ИмяРеквизита; + КонецЦикла; + ТекстЗапроса = ТекстЗапроса + СтрокаРеквизитов +" + |)"; + КонецЦикла; + + ТекстЗапроса = "ВЫБРАТЬ " + ТекстЗапроса + Символы.ПС + " + |ИЗ + | "+ ОбъектМетаданных.ПолноеИмя() + " КАК " + ПсевдонимТаблицы; + + Результат = Результат + ТекстЗапроса; + КонецЦикла; + + + Возврат Результат; + +КонецФункции + +Функция ОбщиеРеквизитыОбъектов(ТипыОбъектов) Экспорт + + ОбъектыМетаданных = Новый Массив; + Для Каждого ИмяОбъекта Из СтрРазделить(ТипыОбъектов, ",", Ложь) Цикл + ОбъектыМетаданных.Добавить(Метаданные.НайтиПоПолномуИмени(ИмяОбъекта)); КонецЦикла; - ТекстЗапроса = "ВЫБРАТЬ " + ТекстЗапроса + Символы.ПС + " - |ИЗ - | "+ ОбъектМетаданных.ПолноеИмя(); - - Возврат ТекстЗапроса; + Результат = Новый Структура; + Результат.Вставить("Реквизиты", Новый Массив); + Результат.Вставить("ТабличныеЧасти", Новый Структура); + + ОбщийСписокРеквизитов = СписокЭлементов(ОбъектыМетаданных[0].Реквизиты, Ложь); + Для Индекс = 1 По ОбъектыМетаданных.Количество() - 1 Цикл + ОбщийСписокРеквизитов = ПересечениеРеквизитов(ОбщийСписокРеквизитов, ОбъектыМетаданных[Индекс].Реквизиты); + КонецЦикла; + + СтандартныеРеквизиты = ОбъектыМетаданных[0].СтандартныеРеквизиты; + Для Индекс = 1 По ОбъектыМетаданных.Количество() - 1 Цикл + СтандартныеРеквизиты = ПересечениеРеквизитов(СтандартныеРеквизиты, ОбъектыМетаданных[Индекс].СтандартныеРеквизиты); + КонецЦикла; + Для Каждого Реквизит Из СтандартныеРеквизиты Цикл + ОбщийСписокРеквизитов.Добавить(Реквизит); + КонецЦикла; + + Результат.Реквизиты = СписокЭлементов(ОбщийСписокРеквизитов); + + ТабличныеЧасти = СписокЭлементов(ОбъектыМетаданных[0].ТабличныеЧасти); + Для Индекс = 1 По ОбъектыМетаданных.Количество() - 1 Цикл + ТабличныеЧасти = ПересечениеМножеств(ТабличныеЧасти, СписокЭлементов(ОбъектыМетаданных[Индекс].ТабличныеЧасти)); + КонецЦикла; + + Для Каждого ИмяТабличнойЧасти Из ТабличныеЧасти Цикл + РеквизитыТабличнойЧасти = СписокЭлементов(ОбъектыМетаданных[0].ТабличныеЧасти[ИмяТабличнойЧасти].Реквизиты, Ложь); + Для Индекс = 1 По ОбъектыМетаданных.Количество() - 1 Цикл + РеквизитыТабличнойЧасти = ПересечениеРеквизитов(РеквизитыТабличнойЧасти, ОбъектыМетаданных[Индекс].ТабличныеЧасти[ИмяТабличнойЧасти].Реквизиты); + КонецЦикла; + Если РеквизитыТабличнойЧасти.Количество() > 0 Тогда + Результат.ТабличныеЧасти.Вставить(ИмяТабличнойЧасти, СписокЭлементов(РеквизитыТабличнойЧасти)); + КонецЕсли; + КонецЦикла; + + Возврат Результат; + +КонецФункции + +Функция СписокЭлементов(Коллекция, ТолькоИмена = Истина) + Результат = Новый Массив; + Для Каждого Элемент Из Коллекция Цикл + Если ТолькоИмена Тогда + Результат.Добавить(Элемент.Имя); + Иначе + Результат.Добавить(Элемент); + КонецЕсли; + КонецЦикла; + Возврат Результат; +КонецФункции + +Функция ПересечениеМножеств(Множество1, Множество2) Экспорт + + Результат = Новый Массив; + + Для Каждого Элемент Из Множество2 Цикл + Индекс = Множество1.Найти(Элемент); + Если Индекс <> Неопределено Тогда + Результат.Добавить(Элемент); + КонецЕсли; + КонецЦикла; + + Возврат Результат; + +КонецФункции + +Функция ПересечениеРеквизитов(КоллекцияРеквизитов1, КоллекцияРеквизитов2) + + Результат = Новый Массив; + + Для Каждого Реквизит2 Из КоллекцияРеквизитов2 Цикл + Для Каждого Реквизит1 Из КоллекцияРеквизитов1 Цикл + Если Реквизит1.Имя = Реквизит2.Имя + И (Реквизит1.Тип = Реквизит2.Тип Или Реквизит1.Имя = "Ссылка") Тогда + Результат.Добавить(Реквизит1); + Прервать; + КонецЕсли; + КонецЦикла; + КонецЦикла; + + Возврат Результат; КонецФункции @@ -95,6 +199,7 @@ ПрерыватьПриОшибке = Параметры.ПрерыватьПриОшибке; ИспользуютсяДопРеквизиты = Параметры.ИспользуютсяДопРеквизиты; ИспользуютсяДопСведения = Параметры.ИспользуютсяДопСведения; + РежимРазработчика = Параметры.РежимРазработчика; ОбъектыДляИзменения = Параметры.ОбъектыДляИзменения.Получить().Строки; @@ -125,6 +230,7 @@ КонецЕсли; ИзменяемыеРеквизиты = Параметры.ИзменяемыеРеквизиты; + ДоступныеРеквизиты = Параметры.ДоступныеРеквизиты; Для Каждого ДанныеОбъекта Из ОбрабатываемыеОбъекты Цикл @@ -161,9 +267,9 @@ Отказ = Ложь; Для Каждого Операция Из ИзменяемыеРеквизиты Цикл + Значение = ВычислитьВыражение(Операция.Значение, ИзменяемыйОбъект, ДоступныеРеквизиты); Если Операция.ВидОперации = 1 Тогда // изменение реквизита - // Для групп не устанавливаем реквизиты, которых у них нет. Если ПроверятьНаГруппу И ИзменяемыйОбъект.ЭтоГруппа Тогда Если НЕ ЭтоСтандартныйРеквизит(ИзменяемыйОбъект.Метаданные().СтандартныеРеквизиты, Операция.Имя) Тогда @@ -172,7 +278,7 @@ КонецЕсли; Попытка - ИзменяемыйОбъект[Операция.Имя] = Операция.Значение; + ИзменяемыйОбъект[Операция.Имя] = Значение; Исключение Отказ = Истина; КраткоеПредставлениеОшибки = КраткоеПредставлениеОшибки(ИнформацияОбОшибке()); @@ -202,10 +308,16 @@ НайденнаяСтрока.Свойство = Операция.Свойство; КонецЕсли; - НайденнаяСтрока.Значение = Операция.Значение; + НайденнаяСтрока.Значение = Значение; + + ОписаниеСвойства = ЗначенияРеквизитовОбъекта(Операция.Свойство, "ТипЗначения, МногострочноеПолеВвода"); + МодульУправлениеСвойствами = ОбщийМодуль("УправлениеСвойствамиСлужебный"); + Если МодульУправлениеСвойствами.ИспользоватьНеограниченнуюСтроку(ОписаниеСвойства.ТипЗначения, ОписаниеСвойства.МногострочноеПолеВвода) Тогда + НайденнаяСтрока.ТекстоваяСтрока = Значение; + КонецЕсли; ИмяРеквизитаФормы = ПрефиксИмениДопРеквизита() + СтрЗаменить(Строка(Операция.Свойство.УникальныйИдентификатор()), "-", "_"); - ИзменяемыеДопРеквизитыОбъекта.Вставить(ИмяРеквизитаФормы, Операция.Значение); + ИзменяемыеДопРеквизитыОбъекта.Вставить(ИмяРеквизитаФормы, Значение); ИначеЕсли Операция.ВидОперации = 3 Тогда // изменение доп сведения @@ -217,12 +329,12 @@ МенеджерЗаписи.Объект = ИзменяемыйОбъект.Ссылка; МенеджерЗаписи.Свойство = Операция.Свойство; - МенеджерЗаписи.Значение = Операция.Значение; + МенеджерЗаписи.Значение = Значение; МассивЗаписейДопСведений.Добавить(МенеджерЗаписи); ИмяРеквизитаФормы = ПрефиксИмениДопСведения() + СтрЗаменить(Строка(Операция.Свойство.УникальныйИдентификатор()), "-", "_"); - ИзменяемыеДопСведенияОбъекта.Вставить(ИмяРеквизитаФормы, Операция.Значение); + ИзменяемыеДопСведенияОбъекта.Вставить(ИмяРеквизитаФормы, Значение); КонецЕсли; @@ -239,6 +351,22 @@ // Отбор операций изменения по каждому объекту. /////////////////////////////////////////////////////////////////////////////////////// + РежимЗаписи = Неопределено; + ЭтоДокумент = Метаданные.Документы.Содержит(ИзменяемыйОбъект.Метаданные()); + Если ЭтоДокумент Тогда + РежимЗаписи = РежимЗаписиДокумента.Запись; + Если ИзменяемыйОбъект.Проведен Тогда + РежимЗаписи = РежимЗаписиДокумента.Проведение; + ИначеЕсли ИзменяемыйОбъект.Метаданные().Проведение = Метаданные.СвойстваОбъектов.Проведение.Разрешить Тогда + РежимЗаписи = РежимЗаписиДокумента.ОтменаПроведения; + КонецЕсли; + КонецЕсли; + + Если РежимРазработчика Тогда + РежимЗаписи = Неопределено; + ИзменяемыйОбъект.ОбменДанными.Загрузка = Истина; + КонецЕсли; + /////////////////////////////////////////////////////////////////////////////////////// // Блок обработки проверки заполнения. // @@ -246,24 +374,28 @@ ПрерватьИзменение = Ложь; ПроверкаЗаполненияУспешно = Истина; - Попытка - Если Не ИзменяемыйОбъект.ПроверитьЗаполнение() Тогда - ЗаполнитьРезультатИзменения(РезультатИзменения, Ссылка, "Ошибка_ОбработкиПроверкиЗаполнения", - ПолучитьСтрокуСообщенийОбОшибках()); + Если Не РежимРазработчика Тогда + Попытка + Если Не ЭтоДокумент Или РежимЗаписи = РежимЗаписиДокумента.Проведение Тогда + Если Не ИзменяемыйОбъект.ПроверитьЗаполнение() Тогда + ЗаполнитьРезультатИзменения(РезультатИзменения, Ссылка, "Ошибка_ОбработкиПроверкиЗаполнения", + ПолучитьСтрокуСообщенийОбОшибках()); + Если ОстанавливатьИзменениеПриОшибке Или ИзменятьВТранзакции Тогда + ПрерватьИзменение = Истина; + КонецЕсли; + ПроверкаЗаполненияУспешно = Ложь; + КонецЕсли; + КонецЕсли; + Исключение + Инфо = ИнформацияОбОшибке(); + КраткоеПредставлениеОшибки = КраткоеПредставлениеОшибки(Инфо); + ЗаполнитьРезультатИзменения(РезультатИзменения, Ссылка, "Ошибка_НеКлассифицированная", КраткоеПредставлениеОшибки); Если ОстанавливатьИзменениеПриОшибке Или ИзменятьВТранзакции Тогда ПрерватьИзменение = Истина; КонецЕсли; ПроверкаЗаполненияУспешно = Ложь; - КонецЕсли; - Исключение - Инфо = ИнформацияОбОшибке(); - КраткоеПредставлениеОшибки = КраткоеПредставлениеОшибки(Инфо); - ЗаполнитьРезультатИзменения(РезультатИзменения, Ссылка, "Ошибка_НеКлассифицированная", КраткоеПредставлениеОшибки); - Если ОстанавливатьИзменениеПриОшибке Или ИзменятьВТранзакции Тогда - ПрерватьИзменение = Истина; - КонецЕсли; - ПроверкаЗаполненияУспешно = Ложь; - КонецПопытки; + КонецПопытки; + КонецЕсли; Если ПрерватьИзменение Тогда Если ИзменятьВТранзакции Тогда @@ -319,17 +451,7 @@ Отказ = Ложь; - РежимЗаписи = Неопределено; - ЭтоДокумент = Метаданные.Документы.Содержит(ИзменяемыйОбъект.Метаданные()); - Если ЭтоДокумент Тогда - РежимЗаписи = РежимЗаписиДокумента.Запись; - Если ИзменяемыйОбъект.Проведен Тогда - РежимЗаписи = РежимЗаписиДокумента.Проведение; - ИначеЕсли ИзменяемыйОбъект.Метаданные().Проведение = Метаданные.СвойстваОбъектов.Проведение.Разрешить Тогда - РежимЗаписи = РежимЗаписиДокумента.ОтменаПроведения; - КонецЕсли; - КонецЕсли; - + Попытка Если РежимЗаписи = Неопределено Тогда ИзменяемыйОбъект.Записать(); @@ -369,7 +491,13 @@ КонецЦикла; Если ИзменятьВТранзакции И ТранзакцияАктивна() Тогда - ЗафиксироватьТранзакцию(); + Попытка + ЗафиксироватьТранзакцию(); + Исключение + КраткоеПредставлениеОшибки = КраткоеПредставлениеОшибки(ИнформацияОбОшибке()); + ЗаполнитьРезультатИзменения(РезультатИзменения, Ссылка, "Ошибка_НеКлассифицированная", КраткоеПредставлениеОшибки); + ОтменитьТранзакцию(); + КонецПопытки; КонецЕсли; ПоместитьВоВременноеХранилище(РезультатИзменения, АдресРезультата); @@ -379,7 +507,6 @@ Функция СвойствоНужноИзменять(Ссылка, Свойство, Параметры) - ОбъектыДляИзменения = Параметры.ОбъектыДляИзменения; Если ПодсистемаСуществует("СтандартныеПодсистемы.Свойства") Тогда МодульУправлениеСвойствами = ОбщийМодуль("УправлениеСвойствами"); Если МодульУправлениеСвойствами = Неопределено Тогда @@ -490,6 +617,248 @@ КонецФункции +Функция ЭтоСлужебныйОбъект(ОбъектМетаданных) Экспорт + МенеджерыОбъектов = Неопределено; + Если ВерсияБСПСоответствуетТребованиям() Тогда + МенеджерыОбъектов = МенеджерыОбъектовДляРедактированияРеквизитов(); + КонецЕсли; + + Если МенеджерыОбъектов <> Неопределено Тогда + ДоступныеМетоды = МетодыМенеджераОбъектаДляРедактированияРеквизитов(ОбъектМетаданных.ПолноеИмя(), МенеджерыОбъектов); + Если ТипЗнч(ДоступныеМетоды) = Тип("Массив") И (ДоступныеМетоды.Количество() = 0 + Или ДоступныеМетоды.Найти("РеквизитыРедактируемыеВГрупповойОбработке") <> Неопределено) Тогда + МенеджерОбъекта = МенеджерОбъектаПоПолномуИмени(ОбъектМетаданных.ПолноеИмя()); + Редактируемые = МенеджерОбъекта.РеквизитыРедактируемыеВГрупповойОбработке(); + КонецЕсли; + + Иначе + // В конфигурациях без БСП или на старых версиях БСП, пытаемся определить, + // есть ли у объекта редактируемые реквизиты. + МенеджерОбъекта = МенеджерОбъектаПоПолномуИмени(ОбъектМетаданных.ПолноеИмя()); + Попытка + Редактируемые = МенеджерОбъекта.РеквизитыРедактируемыеВГрупповойОбработке(); + Исключение + // метод не найден + Редактируемые = Неопределено; + КонецПопытки; + КонецЕсли; + + Если Редактируемые <> Неопределено И Редактируемые.Количество() = 0 Тогда + Возврат Истина; + КонецЕсли; + + // + + Если МенеджерыОбъектов <> Неопределено Тогда + Если ТипЗнч(ДоступныеМетоды) = Тип("Массив") И (ДоступныеМетоды.Количество() = 0 + Или ДоступныеМетоды.Найти("РеквизитыНеРедактируемыеВГрупповойОбработке") <> Неопределено) Тогда + Если МенеджерОбъекта = Неопределено Тогда + МенеджерОбъекта = МенеджерОбъектаПоПолномуИмени(ОбъектМетаданных.ПолноеИмя()); + КонецЕсли; + НеРедактируемые = МенеджерОбъекта.РеквизитыНеРедактируемыеВГрупповойОбработке(); + КонецЕсли; + + Иначе + // В конфигурациях без БСП или на старых версиях БСП, пытаемся определить, + // есть ли у объекта нередактируемые реквизиты. + Попытка + НеРедактируемые = МенеджерОбъекта.РеквизитыНеРедактируемыеВГрупповойОбработке(); + Исключение + // метод не найден + НеРедактируемые = Неопределено; + КонецПопытки; + КонецЕсли; + + Если НеРедактируемые <> Неопределено И НеРедактируемые.Найти("*") <> Неопределено Тогда + Возврат Истина; + КонецЕсли; + + Возврат Ложь; + +КонецФункции + +Функция МетодыМенеджераОбъектаДляРедактированияРеквизитов(ИмяОбъекта, МенеджерыОбъектов) + + СведенияОМенеджереОбъекта = МенеджерыОбъектов[ИмяОбъекта]; + Если СведенияОМенеджереОбъекта = Неопределено Тогда + Возврат "НеПоддерживается"; + КонецЕсли; + ДоступныеМетоды = СтрРазделить(СведенияОМенеджереОбъекта, Символы.ПС, Ложь); + Возврат ДоступныеМетоды; + +КонецФункции + +Функция МенеджерыОбъектовДляРедактированияРеквизитов() + + МодульИнтеграцияСтандартныхПодсистем = ОбщийМодуль("ИнтеграцияСтандартныхПодсистем"); + МодульГрупповоеИзменениеОбъектовПереопределяемый = ОбщийМодуль("ГрупповоеИзменениеОбъектовПереопределяемый"); + Если МодульИнтеграцияСтандартныхПодсистем = Неопределено Или МодульГрупповоеИзменениеОбъектовПереопределяемый = Неопределено Тогда + Возврат Новый Массив; + КонецЕсли; + + ОбъектыСЗаблокированнымиРеквизитами = Новый Соответствие; + МодульИнтеграцияСтандартныхПодсистем.ПриОпределенииОбъектовСРедактируемымиРеквизитами(ОбъектыСЗаблокированнымиРеквизитами); + МодульГрупповоеИзменениеОбъектовПереопределяемый.ПриОпределенииОбъектовСРедактируемымиРеквизитами(ОбъектыСЗаблокированнымиРеквизитами); + + Возврат ОбъектыСЗаблокированнымиРеквизитами; + +КонецФункции + +Функция ВерсияБСПСоответствуетТребованиям() Экспорт + + Попытка + МодульСтандартныеПодсистемыСервер = ОбщийМодуль("СтандартныеПодсистемыСервер"); + Исключение + // Модуль не существует + МодульСтандартныеПодсистемыСервер = Неопределено; + КонецПопытки; + Если МодульСтандартныеПодсистемыСервер = Неопределено Тогда + Возврат Ложь; + КонецЕсли; + + ВерсияБСП = МодульСтандартныеПодсистемыСервер.ВерсияБиблиотеки(); + Возврат НомерВерсииВЧисло(ВерсияБСП) >= НомерВерсииВЧисло("2.3.1.57"); + +КонецФункции + +Функция НомерВерсииВЧисло(НомерВерсии) + ЧастиНомера = СтрРазделить(НомерВерсии, ".", Ложь); + Если ЧастиНомера.Количество() <> 4 Тогда + Возврат 0; + КонецЕсли; + Результат = 0; + Для Каждого ЧастьНомера Из ЧастиНомера Цикл + Результат = Результат * 1000 + Число(ЧастьНомера); + КонецЦикла; + Возврат Результат; +КонецФункции + +Функция МенеджерОбъектаПоПолномуИмени(ПолноеИмя) + Перем КлассОМ, ИмяОМ, Менеджер; + + ЧастиИмени = СтрРазделить(ПолноеИмя, "."); + + Если ЧастиИмени.Количество() = 2 Тогда + КлассОМ = ЧастиИмени[0]; + ИмяОМ = ЧастиИмени[1]; + КонецЕсли; + + Если ВРег(КлассОМ) = "ПЛАНОБМЕНА" Тогда + Менеджер = ПланыОбмена; + + ИначеЕсли ВРег(КлассОМ) = "СПРАВОЧНИК" Тогда + Менеджер = Справочники; + + ИначеЕсли ВРег(КлассОМ) = "ДОКУМЕНТ" Тогда + Менеджер = Документы; + + ИначеЕсли ВРег(КлассОМ) = "ЖУРНАЛДОКУМЕНТОВ" Тогда + Менеджер = ЖурналыДокументов; + + ИначеЕсли ВРег(КлассОМ) = "ПЕРЕЧИСЛЕНИЕ" Тогда + Менеджер = Перечисления; + + ИначеЕсли ВРег(КлассОМ) = "ОТЧЕТ" Тогда + Менеджер = Отчеты; + + ИначеЕсли ВРег(КлассОМ) = "ОБРАБОТКА" Тогда + Менеджер = Обработки; + + ИначеЕсли ВРег(КлассОМ) = "ПЛАНВИДОВХАРАКТЕРИСТИК" Тогда + Менеджер = ПланыВидовХарактеристик; + + ИначеЕсли ВРег(КлассОМ) = "ПЛАНСЧЕТОВ" Тогда + Менеджер = ПланыСчетов; + + ИначеЕсли ВРег(КлассОМ) = "ПЛАНВИДОВРАСЧЕТА" Тогда + Менеджер = ПланыВидовРасчета; + + ИначеЕсли ВРег(КлассОМ) = "РЕГИСТРСВЕДЕНИЙ" Тогда + Менеджер = РегистрыСведений; + + ИначеЕсли ВРег(КлассОМ) = "РЕГИСТРНАКОПЛЕНИЯ" Тогда + Менеджер = РегистрыНакопления; + + ИначеЕсли ВРег(КлассОМ) = "РЕГИСТРБУХГАЛТЕРИИ" Тогда + Менеджер = РегистрыБухгалтерии; + + ИначеЕсли ВРег(КлассОМ) = "РЕГИСТРРАСЧЕТА" Тогда + Если ЧастиИмени.Количество() = 2 Тогда + // Регистр расчета + Менеджер = РегистрыРасчета; + Иначе + КлассПодчиненногоОМ = ЧастиИмени[2]; + ИмяПодчиненногоОМ = ЧастиИмени[3]; + Если ВРег(КлассПодчиненногоОМ) = "ПЕРЕРАСЧЕТ" Тогда + // Перерасчет + Менеджер = РегистрыРасчета[ИмяОМ].Перерасчеты; + Иначе + ВызватьИсключение ПодставитьПараметрыВСтроку(НСтр("ru = 'Неизвестный тип объекта метаданных ""%1""'"), ПолноеИмя); + КонецЕсли; + КонецЕсли; + + ИначеЕсли ВРег(КлассОМ) = "БИЗНЕСПРОЦЕСС" Тогда + Менеджер = БизнесПроцессы; + + ИначеЕсли ВРег(КлассОМ) = "ЗАДАЧА" Тогда + Менеджер = Задачи; + + ИначеЕсли ВРег(КлассОМ) = "КОНСТАНТА" Тогда + Менеджер = Константы; + + ИначеЕсли ВРег(КлассОМ) = "ПОСЛЕДОВАТЕЛЬНОСТЬ" Тогда + Менеджер = Последовательности; + КонецЕсли; + + Если Менеджер <> Неопределено Тогда + Попытка + Возврат Менеджер[ИмяОМ]; + Исключение + Менеджер = Неопределено; + КонецПопытки; + КонецЕсли; + + ВызватьИсключение ПодставитьПараметрыВСтроку(НСтр("ru = 'Неизвестный тип объекта метаданных ""%1""'"), ПолноеИмя); + +КонецФункции + +Функция ВычислитьВыражение(Знач Выражение, Объект, ДоступныеРеквизиты) + + Если Не(ТипЗнч(Выражение) = Тип("Строка") И СтрНачинаетсяС(Выражение, "=")) Тогда + Возврат Выражение; + КонецЕсли; + + Если СтрНачинаетсяС(Выражение, "'=") Тогда + Возврат Сред(Выражение, 2); + КонецЕсли; + + Выражение = Сред(Выражение, 2); + + Для Каждого ОписаниеРеквизита Из ДоступныеРеквизиты Цикл + Если СтрНайти(Выражение, "[" + ОписаниеРеквизита.Представление + "]") = 0 Тогда + Продолжить; + КонецЕсли; + + Значение = ""; + Если ОписаниеРеквизита.ВидОперации = 1 Тогда + Значение = Объект[ОписаниеРеквизита.Имя]; + Иначе + МодульУправлениеСвойствами = ОбщийМодуль("УправлениеСвойствами"); + СписокСвойств = Новый Массив; + СписокСвойств.Добавить(ОписаниеРеквизита.Свойство); + ЗначенияСвойств = МодульУправлениеСвойствами.ПолучитьЗначенияСвойств(Объект.Ссылка, Истина, Истина, СписокСвойств); + Для Каждого СтрокаТаблицы Из ЗначенияСвойств.НайтиСтроки(Новый Структура("Свойство", ОписаниеРеквизита.Свойство)) Цикл + Значение = СтрокаТаблицы.Значение; + КонецЦикла; + КонецЕсли; + + Выражение = СтрЗаменить(Выражение, "[" + ОписаниеРеквизита.Представление + "]", """" + Значение + """"); + КонецЦикла; + + Возврат Вычислить(Выражение); + +КонецФункции + //////////////////////////////////////////////////////////////////////////////// // Процедуры и функции из базовой функциональности для обеспечения автономности. @@ -571,8 +940,7 @@ Возврат "Перечисление"; Иначе - ВызватьИсключение ПодставитьПараметрыВСтроку( - НСтр("ru='Неверный тип значения параметра (%1)'"), Строка(Тип)); + ВызватьИсключение ПодставитьПараметрыВСтроку(НСтр("ru='Неверный тип значения параметра (%1)'"), Строка(Тип)); КонецЕсли; @@ -708,7 +1076,7 @@ Если ПустаяСтрока(Реквизиты) Тогда Возврат Новый Структура; КонецЕсли; - Реквизиты = РазложитьСтрокуВМассивПодстрок(Реквизиты, ",", Истина); + Реквизиты = СтрРазделить(Реквизиты, ",", Ложь); КонецЕсли; СтруктураРеквизитов = Новый Структура; @@ -719,9 +1087,7 @@ СтруктураРеквизитов.Вставить(СтрЗаменить(Реквизит, ".", ""), Реквизит); КонецЦикла; Иначе - ВызватьИсключение ПодставитьПараметрыВСтроку( - НСтр("ru = 'Неверный тип второго параметра Реквизиты: %1'"), - Строка(ТипЗнч(Реквизиты))); + ВызватьИсключение ПодставитьПараметрыВСтроку(НСтр("ru = 'Неверный тип второго параметра Реквизиты: %1'"), Строка(ТипЗнч(Реквизиты))); КонецЕсли; ТекстПолей = ""; @@ -779,88 +1145,6 @@ КонецФункции -// Разбивает строку на несколько строк по разделителю. Разделитель может иметь любую длину. -// -// Параметры: -// Строка - Строка - текст с разделителями; -// Разделитель - Строка - разделитель строк текста, минимум 1 символ; -// ПропускатьПустыеСтроки - Булево - признак необходимости включения в результат пустых строк. -// Если параметр не задан, то функция работает в режиме совместимости со своей предыдущей версией: -// - для разделителя-пробела пустые строки не включаются в результат, для остальных разделителей пустые строки -// включаются в результат. -// Е если параметр Строка не содержит значащих символов или не содержит ни одного символа (пустая строка), то в -// случае разделителя-пробела результатом функции будет массив, содержащий одно значение "" (пустая строка), а -// при других разделителях результатом функции будет пустой массив. -// -// -// Возвращаемое значение: -// Массив - массив строк. -// -// Примеры: -// РазложитьСтрокуВМассивПодстрок(",один,,два,", ",") - возвратит массив из 5 элементов, три из которых - пустые -// строки; -// РазложитьСтрокуВМассивПодстрок(",один,,два,", ",", Истина) - возвратит массив из двух элементов; -// РазложитьСтрокуВМассивПодстрок(" один два ", " ") - возвратит массив из двух элементов; -// РазложитьСтрокуВМассивПодстрок("") - возвратит пустой массив; -// РазложитьСтрокуВМассивПодстрок("",,Ложь) - возвратит массив с одним элементом "" (пустой строкой); -// РазложитьСтрокуВМассивПодстрок("", " ") - возвратит массив с одним элементом "" (пустой строкой); -// -Функция РазложитьСтрокуВМассивПодстрок(Знач Строка, Знач Разделитель = ",", Знач ПропускатьПустыеСтроки = Неопределено) Экспорт - - Результат = Новый Массив; - - // Для обеспечения обратной совместимости. - Если ПропускатьПустыеСтроки = Неопределено Тогда - ПропускатьПустыеСтроки = ?(Разделитель = " ", Истина, Ложь); - Если ПустаяСтрока(Строка) Тогда - Если Разделитель = " " Тогда - Результат.Добавить(""); - КонецЕсли; - Возврат Результат; - КонецЕсли; - КонецЕсли; - // - - Позиция = Найти(Строка, Разделитель); - Пока Позиция > 0 Цикл - Подстрока = Лев(Строка, Позиция - 1); - Если Не ПропускатьПустыеСтроки Или Не ПустаяСтрока(Подстрока) Тогда - Результат.Добавить(Подстрока); - КонецЕсли; - Строка = Сред(Строка, Позиция + СтрДлина(Разделитель)); - Позиция = Найти(Строка, Разделитель); - КонецЦикла; - - Если Не ПропускатьПустыеСтроки Или Не ПустаяСтрока(Строка) Тогда - Результат.Добавить(Строка); - КонецЕсли; - - Возврат Результат; - -КонецФункции - -// Подставляет параметры в строку. -// Параметры в строке задаются как %<номер параметра>. Нумерация параметров начинается с единицы. -// -// Параметры: -// СтрокаПодстановки - Строка - шаблон строки с параметрами (вхождениями вида "%ИмяПараметра"); -// Параметр<n> - Строка - подставляемый параметр. -// -// Возвращаемое значение: -// Строка - текстовая строка с подставленными параметрами. -// -// Пример: -// ПодставитьПараметрыВСтроку(НСтр("ru='%1 пошел в %2'"), "Вася", "Зоопарк") = "Вася пошел в Зоопарк". -// -Функция ПодставитьПараметрыВСтроку(Знач СтрокаПодстановки, - Знач Параметр1, Знач Параметр2 = Неопределено, Знач Параметр3 = Неопределено) - - СтрокаПодстановки = СтрЗаменить(СтрокаПодстановки, "%1", Параметр1); - СтрокаПодстановки = СтрЗаменить(СтрокаПодстановки, "%2", Параметр2); - СтрокаПодстановки = СтрЗаменить(СтрокаПодстановки, "%3", Параметр3); - Возврат СтрокаПодстановки; -КонецФункции - // Возвращает Истина, если подсистема существует. // // Параметры: @@ -928,14 +1212,23 @@ КонецЕсли; Если ТипЗнч(Модуль) <> Тип("ОбщийМодуль") Тогда - ВызватьИсключение ПодставитьПараметрыВСтроку( - НСтр("ru = 'Общий модуль ""%1"" не найден.'"), Имя); + ВызватьИсключение ПодставитьПараметрыВСтроку(НСтр("ru = 'Общий модуль ""%1"" не найден.'"), Имя); КонецЕсли; Возврат Модуль; КонецФункции +Функция ПодставитьПараметрыВСтроку(Знач СтрокаПодстановки, + Знач Параметр1, Знач Параметр2 = Неопределено, Знач Параметр3 = Неопределено) + + СтрокаПодстановки = СтрЗаменить(СтрокаПодстановки, "%1", Параметр1); + СтрокаПодстановки = СтрЗаменить(СтрокаПодстановки, "%2", Параметр2); + СтрокаПодстановки = СтрЗаменить(СтрокаПодстановки, "%3", Параметр3); + + Возврат СтрокаПодстановки; +КонецФункции + #КонецОбласти #КонецЕсли \ No newline at end of file diff --git a/SSL/src/DataProcessors/ГрупповоеИзменениеРеквизитов/Templates/ФильтрРеквизитов/Template.txt b/SSL/src/DataProcessors/ГрупповоеИзменениеРеквизитов/Templates/ФильтрРеквизитов/Template.txt index e22940913..b4907f8b7 100644 --- a/SSL/src/DataProcessors/ГрупповоеИзменениеРеквизитов/Templates/ФильтрРеквизитов/Template.txt +++ b/SSL/src/DataProcessors/ГрупповоеИзменениеРеквизитов/Templates/ФильтрРеквизитов/Template.txt @@ -14,7 +14,6 @@ <Item ObjectType="Документы" Attribute="Номер"/> <Item ObjectType="Документы" Attribute="Проведен"/> - <Item ObjectType="Документы" Attribute="Дата"/> <Item ObjectType="ПланыВидовХарактеристик" Attribute="ИмяПредопределенныхДанных"/> <Item ObjectType="ПланыВидовХарактеристик" Attribute="Код"/> diff --git a/SSL/src/DataProcessors/ГрупповоеИзменениеРеквизитов/ГрупповоеИзменениеРеквизитов.mdo b/SSL/src/DataProcessors/ГрупповоеИзменениеРеквизитов/ГрупповоеИзменениеРеквизитов.mdo index 1ae92c154..c5af1cf99 100644 --- a/SSL/src/DataProcessors/ГрупповоеИзменениеРеквизитов/ГрупповоеИзменениеРеквизитов.mdo +++ b/SSL/src/DataProcessors/ГрупповоеИзменениеРеквизитов/ГрупповоеИзменениеРеквизитов.mdo @@ -91,7 +91,23 @@ </type> <toolTip> <key>ru</key> - <value>Показывать все реквизиты и табличные части элементов, в том числе служебные.</value> + <value>Отображать служебные реквизиты в общем списке реквизитов.</value> + </toolTip> + <minValue xsi:type="core:UndefinedValue"/> + <maxValue xsi:type="core:UndefinedValue"/> + </attributes> + <attributes uuid="325bacdd-793f-47d8-b987-57e9d5f2782b"> + <name>РежимРазработчика</name> + <synonym> + <key>ru</key> + <value>Режим разработчика</value> + </synonym> + <type> + <types>Boolean</types> + </type> + <toolTip> + <key>ru</key> + <value>Выполнять запись объектов в режиме ОбменДанными.Загрузка = Истина.</value> </toolTip> <minValue xsi:type="core:UndefinedValue"/> <maxValue xsi:type="core:UndefinedValue"/> @@ -105,20 +121,6 @@ <usePurposes>PersonalComputer</usePurposes> <usePurposes>MobileDevice</usePurposes> </forms> - <forms uuid="d5142574-a040-4dd0-a482-cdc61c1d86ab"> - <name>ДополнительныеПараметры</name> - <synonym> - <key>ru</key> - <value>Дополнительные параметры</value> - </synonym> - <help> - <pages> - <lang>ru</lang> - </pages> - </help> - <usePurposes>PersonalComputer</usePurposes> - <usePurposes>MobileDevice</usePurposes> - </forms> <forms uuid="fb36c775-1124-4ba6-8af8-133bf66fcb54"> <name>ВыбранныеЭлементы</name> <synonym> @@ -137,6 +139,34 @@ <usePurposes>PersonalComputer</usePurposes> <usePurposes>MobileDevice</usePurposes> </forms> + <forms uuid="d5142574-a040-4dd0-a482-cdc61c1d86ab"> + <name>ДополнительныеПараметры</name> + <synonym> + <key>ru</key> + <value>Дополнительные параметры</value> + </synonym> + <help> + <pages> + <lang>ru</lang> + </pages> + </help> + <usePurposes>PersonalComputer</usePurposes> + <usePurposes>MobileDevice</usePurposes> + </forms> + <forms uuid="62957889-503f-4923-a372-29776dc3b5e5"> + <name>РедактированиеФормулы</name> + <synonym> + <key>ru</key> + <value>Редактирование формулы</value> + </synonym> + <help> + <pages> + <lang>ru</lang> + </pages> + </help> + <usePurposes>PersonalComputer</usePurposes> + <usePurposes>MobileDevice</usePurposes> + </forms> <templates uuid="778e79ee-eb1a-4d52-8a31-58e781c78fe4"> <name>ФильтрРеквизитов</name> <synonym> diff --git a/SSL/src/DataProcessors/ЖурналРегистрации/Commands/ЖурналРегистрации/CommandModule.bsl b/SSL/src/DataProcessors/ЖурналРегистрации/Commands/ЖурналРегистрации/CommandModule.bsl index 263911f7c..ced150371 100644 --- a/SSL/src/DataProcessors/ЖурналРегистрации/Commands/ЖурналРегистрации/CommandModule.bsl +++ b/SSL/src/DataProcessors/ЖурналРегистрации/Commands/ЖурналРегистрации/CommandModule.bsl @@ -1,5 +1,8 @@ +#Область ОбработчикиСобытий &НаКлиенте Процедура ОбработкаКоманды(ПараметрКоманды, ПараметрыВыполненияКоманды) ОткрытьФорму("Обработка.ЖурналРегистрации.Форма",, ПараметрыВыполненияКоманды.Источник, ПараметрыВыполненияКоманды.Уникальность, ПараметрыВыполненияКоманды.Окно); КонецПроцедуры + +#КонецОбласти \ No newline at end of file diff --git a/SSL/src/DataProcessors/ЖурналРегистрации/Forms/ЖурналРегистрации/Form.form b/SSL/src/DataProcessors/ЖурналРегистрации/Forms/ЖурналРегистрации/Form.form index e7accdb4c..cdccdb6ce 100644 --- a/SSL/src/DataProcessors/ЖурналРегистрации/Forms/ЖурналРегистрации/Form.form +++ b/SSL/src/DataProcessors/ЖурналРегистрации/Forms/ЖурналРегистрации/Form.form @@ -2876,7 +2876,7 @@ <name>ПросмотрТекущегоСобытияВОтдельномОкне</name> </handler> </action> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <formCommands> @@ -2901,7 +2901,7 @@ <name>ОткрытьДанныеДляПросмотра</name> </handler> </action> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <formCommands> @@ -2926,7 +2926,7 @@ <name>УстановитьИнтервалДатДляПросмотра</name> </handler> </action> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <formCommands> @@ -2952,7 +2952,7 @@ </handler> </action> <representation>Picture</representation> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <formCommands> @@ -2977,7 +2977,7 @@ <name>УстановитьОтборПоЗначениюВТекущейКолонке</name> </handler> </action> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <formCommands> @@ -3002,7 +3002,7 @@ <name>ОтключитьОтбор</name> </handler> </action> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <formCommands> @@ -3028,7 +3028,7 @@ <name>ОбновитьТекущийСписок</name> </handler> </action> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <parameters> diff --git a/SSL/src/DataProcessors/ЖурналРегистрации/Forms/ЖурналРегистрации/Module.bsl b/SSL/src/DataProcessors/ЖурналРегистрации/Forms/ЖурналРегистрации/Module.bsl index f46a2a012..0a0865e2d 100644 --- a/SSL/src/DataProcessors/ЖурналРегистрации/Forms/ЖурналРегистрации/Module.bsl +++ b/SSL/src/DataProcessors/ЖурналРегистрации/Forms/ЖурналРегистрации/Module.bsl @@ -66,6 +66,12 @@ ОтборЖурналаРегистрации.Вставить("ИмяПриложения", СписокПриложений); КонецЕсли; + Если ОтборЖурналаРегистрации.Количество() = 0 + И ОбщегоНазначенияПовтИсп.РазделениеВключено() + И ОбщегоНазначенияПовтИсп.ДоступноИспользованиеРазделенныхДанных() Тогда + ОтборЖурналаРегистрации.Вставить("ДатаНачала", НачалоДня(ТекущаяДатаСеанса())); + КонецЕсли; + КоличествоПоказываемыхСобытий = 200; ОтборПоУмолчанию = ОтборПоУмолчанию(ЗначенияОтбора); @@ -252,11 +258,10 @@ КолонкиИсключения.Добавить("Дата"); Если ЖурналРегистрацииКлиент.УстановитьОтборПоЗначениюВТекущейКолонке( - Элементы.Журнал.ТекущиеДанные, - Элементы.Журнал.ТекущийЭлемент, - ОтборЖурналаРегистрации, - КолонкиИсключения - ) Тогда + Элементы.Журнал.ТекущиеДанные, + Элементы.Журнал.ТекущийЭлемент, + ОтборЖурналаРегистрации, + КолонкиИсключения) Тогда ОбновитьТекущийСписок(); diff --git a/SSL/src/DataProcessors/ЖурналРегистрации/Forms/ОтборЖурналаРегистрации/Form.form b/SSL/src/DataProcessors/ЖурналРегистрации/Forms/ОтборЖурналаРегистрации/Form.form index 74d923493..60de3900a 100644 --- a/SSL/src/DataProcessors/ЖурналРегистрации/Forms/ОтборЖурналаРегистрации/Form.form +++ b/SSL/src/DataProcessors/ЖурналРегистрации/Forms/ОтборЖурналаРегистрации/Form.form @@ -1009,7 +1009,6 @@ <userVisible> <common>true</common> </userVisible> - <titleFont xsi:type="core:AutoFont"/> <toolTip> <key>ru</key> <value>Данные</value> @@ -1561,7 +1560,6 @@ <key>ru</key> <value>Транзакция</value> - ГруппаТранзакцияExtendedTooltip 230 @@ -1833,7 +1831,6 @@ ru Прочее - ГруппаПрочееРасширеннаяПодсказка 225 @@ -2002,7 +1999,6 @@ true true true - UseIfNecessary auto true @@ -2611,7 +2607,7 @@ УстановитьОтборИЗакрытьФорму - Auto + DontUse Auto @@ -2637,7 +2633,7 @@ Picture - Auto + DontUse Auto @@ -2663,7 +2659,7 @@ Picture - Auto + DontUse Auto @@ -2688,7 +2684,7 @@ УстановитьСтатусыТранзакции - Auto + DontUse Auto @@ -2713,7 +2709,7 @@ СнятьСтатусыТранзакции - Auto + DontUse Auto diff --git a/SSL/src/DataProcessors/ЖурналРегистрации/Forms/ОтборЖурналаРегистрации/Module.bsl b/SSL/src/DataProcessors/ЖурналРегистрации/Forms/ОтборЖурналаРегистрации/Module.bsl index aac737d2c..796e1e2a2 100644 --- a/SSL/src/DataProcessors/ЖурналРегистрации/Forms/ОтборЖурналаРегистрации/Module.bsl +++ b/SSL/src/DataProcessors/ЖурналРегистрации/Forms/ОтборЖурналаРегистрации/Module.bsl @@ -339,7 +339,7 @@ ТЧ = Новый ОписаниеТипов("Число"); Пока Не ПустаяСтрока(Стр) Цикл - Поз = Найти(Стр, " "); + Поз = СтрНайти(Стр, " "); Если Поз = 0 Тогда Значение = ТЧ.ПривестиЗначение(Стр); diff --git a/SSL/src/DataProcessors/ЖурналРегистрации/Forms/РазделениеДанныхСеанса/Form.form b/SSL/src/DataProcessors/ЖурналРегистрации/Forms/РазделениеДанныхСеанса/Form.form index e8955444c..684eab9fd 100644 --- a/SSL/src/DataProcessors/ЖурналРегистрации/Forms/РазделениеДанныхСеанса/Form.form +++ b/SSL/src/DataProcessors/ЖурналРегистрации/Forms/РазделениеДанныхСеанса/Form.form @@ -561,7 +561,7 @@ ОтметитьВсе - Auto + DontUse Auto
        @@ -587,7 +587,7 @@ Picture - Auto + DontUse Auto @@ -605,7 +605,7 @@ КомандаОк - Auto + DontUse Auto @@ -623,7 +623,7 @@ КомандаОтмена - Auto + DontUse Auto diff --git a/SSL/src/DataProcessors/ЖурналРегистрации/Forms/РазделениеДанныхСеанса/Module.bsl b/SSL/src/DataProcessors/ЖурналРегистрации/Forms/РазделениеДанныхСеанса/Module.bsl index a36b3eb6a..c771e09aa 100644 --- a/SSL/src/DataProcessors/ЖурналРегистрации/Forms/РазделениеДанныхСеанса/Module.bsl +++ b/SSL/src/DataProcessors/ЖурналРегистрации/Forms/РазделениеДанныхСеанса/Module.bsl @@ -12,7 +12,7 @@ Если УстановленныйОтбор.Количество() > 0 Тогда Для Каждого РазделительСеанса Из УстановленныйОтбор Цикл - РазделениеДанныхМассив = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(РазделительСеанса.Значение, "="); + РазделениеДанныхМассив = СтрРазделить(РазделительСеанса.Значение, "=", Ложь); РазделениеДанныхСоответствие.Вставить(РазделениеДанныхМассив[0], РазделениеДанныхМассив[1]); КонецЦикла; diff --git a/SSL/src/DataProcessors/ЖурналРегистрации/Forms/РедакторСоставаСвойства/Form.form b/SSL/src/DataProcessors/ЖурналРегистрации/Forms/РедакторСоставаСвойства/Form.form index b105e72eb..69afdfbe0 100644 --- a/SSL/src/DataProcessors/ЖурналРегистрации/Forms/РедакторСоставаСвойства/Form.form +++ b/SSL/src/DataProcessors/ЖурналРегистрации/Forms/РедакторСоставаСвойства/Form.form @@ -433,7 +433,6 @@ true true true - UseIfNecessary auto true @@ -653,7 +652,7 @@ УстановитьВсеФлажки - Auto + DontUse Auto @@ -678,7 +677,7 @@ СнятьВсеФлажки - Auto + DontUse Auto @@ -700,7 +699,7 @@ ВыбратьСоставОтбора - Auto + DontUse Auto diff --git a/SSL/src/DataProcessors/ЖурналРегистрации/Forms/РедакторСоставаСвойства/Module.bsl b/SSL/src/DataProcessors/ЖурналРегистрации/Forms/РедакторСоставаСвойства/Module.bsl index d04081149..0c210f0c7 100644 --- a/SSL/src/DataProcessors/ЖурналРегистрации/Forms/РедакторСоставаСвойства/Module.bsl +++ b/SSL/src/DataProcessors/ЖурналРегистрации/Forms/РедакторСоставаСвойства/Module.bsl @@ -81,8 +81,10 @@ КонецЦикла; ИначеЕсли ТипЗнч(ЗначенияОтбора) = Тип("Соответствие") Тогда - Если ОтбираемыеПараметры = "Событие" Или ОтбираемыеПараметры = "Event" Или - ОтбираемыеПараметры = "Метаданные" Или ОтбираемыеПараметры = "Metadata" Тогда + Если ОтбираемыеПараметры = "Событие" + Или ОтбираемыеПараметры = "Event" + Или ОтбираемыеПараметры = "Метаданные" + Или ОтбираемыеПараметры = "Metadata" Тогда // Грузим как дерево Для Каждого ЭлементСоответствия Из ЗначенияОтбора Цикл ПараметрыОтбораСобытий = Новый Структура("Представление", ЭлементСоответствия.Значение); @@ -188,7 +190,7 @@ КонецПроцедуры &НаКлиенте -Функция ПолучитьВетвьДерева(Представление) +Функция ПолучитьВетвьДерева(Представление, Рекурсия = Ложь) СтрокиПути = РазложитьСтрокуПоТочкам(Представление); Если СтрокиПути.Количество() = 1 Тогда ЭлементыДерева = Список.ПолучитьЭлементы(); @@ -202,12 +204,15 @@ КонецЕсли; ПредставлениеПутиРодителя = ПредставлениеПутиРодителя + СтрокиПути[Сч]; КонецЦикла; - ЭлементыДерева = ПолучитьВетвьДерева(ПредставлениеПутиРодителя).ПолучитьЭлементы(); + ЭлементыДерева = ПолучитьВетвьДерева(ПредставлениеПутиРодителя, Истина).ПолучитьЭлементы(); ИмяВетки = СтрокиПути[СтрокиПути.Количество() - 1]; КонецЕсли; Для Каждого ЭлементДерева Из ЭлементыДерева Цикл Если ЭлементДерева.Представление = ИмяВетки Тогда + Если СтрокиПути.Количество() = 1 И Не Рекурсия Тогда + Прервать; + КонецЕсли; Возврат ЭлементДерева; КонецЕсли; КонецЦикла; @@ -224,7 +229,7 @@ Фрагменты = Новый Массив; Пока Истина Цикл Представление = СокрЛП(Представление); - ПозицияТочки = Найти(Представление, "."); + ПозицияТочки = СтрНайти(Представление, "."); Если ПозицияТочки > 0 Тогда Фрагмент = СокрЛП(Лев(Представление, ПозицияТочки - 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 25deae4df..5c3ecbe72 100644 --- a/SSL/src/DataProcessors/ЖурналРегистрации/Forms/ФормаСобытия/Form.form +++ b/SSL/src/DataProcessors/ЖурналРегистрации/Forms/Событие/Form.form @@ -1866,7 +1866,6 @@ ru Данные - ГруппаДанныеExtendedTooltip 118 @@ -1997,7 +1996,6 @@ ru Событие - ГруппаСобытиеExtendedTooltip 146 @@ -2244,7 +2242,6 @@ ru Сеанс - ГруппаСоединениеExtendedTooltip 150 @@ -2367,7 +2364,6 @@ ru Транзакция - ru Транзакция @@ -2448,7 +2444,6 @@ Vertical true true - UseIfNecessary auto true diff --git a/SSL/src/DataProcessors/ЖурналРегистрации/Forms/ФормаСобытия/Help/ru.html b/SSL/src/DataProcessors/ЖурналРегистрации/Forms/Событие/Help/ru.html similarity index 100% rename from SSL/src/DataProcessors/ЖурналРегистрации/Forms/ФормаСобытия/Help/ru.html rename to SSL/src/DataProcessors/ЖурналРегистрации/Forms/Событие/Help/ru.html diff --git a/SSL/src/DataProcessors/ЖурналРегистрации/Forms/ФормаСобытия/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/ЖурналРегистрации/Help/ru.html b/SSL/src/DataProcessors/ЖурналРегистрации/Help/ru.html index 52cee0859..38367ccdf 100644 --- a/SSL/src/DataProcessors/ЖурналРегистрации/Help/ru.html +++ b/SSL/src/DataProcessors/ЖурналРегистрации/Help/ru.html @@ -72,7 +72,7 @@
      • Для того чтобы отключить все отборы (в том числе и быстрые), нажмите Отключить отбор или выполните команду Еще - Отключить отбор. Эту команду также можно найти в контекстном меню по правой кнопке мыши.

      Просмотр события

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

      Просмотр объекта программы

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

      diff --git a/SSL/src/DataProcessors/ЖурналРегистрации/ЖурналРегистрации.mdo b/SSL/src/DataProcessors/ЖурналРегистрации/ЖурналРегистрации.mdo index a66c4af47..603e24ef0 100644 --- a/SSL/src/DataProcessors/ЖурналРегистрации/ЖурналРегистрации.mdo +++ b/SSL/src/DataProcessors/ЖурналРегистрации/ЖурналРегистрации.mdo @@ -45,7 +45,7 @@ MobileDevice - ФормаСобытия + Событие ru Событие diff --git a/SSL/src/DataProcessors/ЗагрузкаДанныхИзФайла/Commands/ЗагрузкаДанныхИзФайла/CommandModule.bsl b/SSL/src/DataProcessors/ЗагрузкаДанныхИзФайла/Commands/ЗагрузкаДанныхИзФайла/CommandModule.bsl index d45226a9a..0b43c8cff 100644 --- a/SSL/src/DataProcessors/ЗагрузкаДанныхИзФайла/Commands/ЗагрузкаДанныхИзФайла/CommandModule.bsl +++ b/SSL/src/DataProcessors/ЗагрузкаДанныхИзФайла/Commands/ЗагрузкаДанныхИзФайла/CommandModule.bsl @@ -1,5 +1,8 @@ +#Область ОбработчикиСобытий &НаКлиенте Процедура ОбработкаКоманды(ПараметрКоманды, ПараметрыВыполненияКоманды) ОткрытьФорму("Обработка.ЗагрузкаДанныхИзФайла.Форма", , ПараметрыВыполненияКоманды.Источник, ПараметрыВыполненияКоманды.Уникальность, ПараметрыВыполненияКоманды.Окно, ПараметрыВыполненияКоманды.НавигационнаяСсылка); КонецПроцедуры + +#КонецОбласти \ No newline at end of file diff --git a/SSL/src/DataProcessors/ЗагрузкаДанныхИзФайла/Forms/ВыборКолонок/Form.form b/SSL/src/DataProcessors/ЗагрузкаДанныхИзФайла/Forms/ВыборКолонок/Form.form index ee3330a89..972736022 100644 --- a/SSL/src/DataProcessors/ЗагрузкаДанныхИзФайла/Forms/ВыборКолонок/Form.form +++ b/SSL/src/DataProcessors/ЗагрузкаДанныхИзФайла/Forms/ВыборКолонок/Form.form @@ -403,7 +403,7 @@ Выбор - Auto + DontUse Auto diff --git a/SSL/src/DataProcessors/ЗагрузкаДанныхИзФайла/Forms/ЗагрузкаДанныхИзФайла/Form.form b/SSL/src/DataProcessors/ЗагрузкаДанныхИзФайла/Forms/ЗагрузкаДанныхИзФайла/Form.form index e256ec1e4..b3b31ebed 100644 --- a/SSL/src/DataProcessors/ЗагрузкаДанныхИзФайла/Forms/ЗагрузкаДанныхИзФайла/Form.form +++ b/SSL/src/DataProcessors/ЗагрузкаДанныхИзФайла/Forms/ЗагрузкаДанныхИзФайла/Form.form @@ -863,7 +863,7 @@ - Ненайдено + НеНайдено 543 ГруппаНеНайдено @@ -977,16 +977,8 @@ true - - <key>ru</key> - <value>Ненайдено</value> - - - ru - Ненайдено - - НенайденоРасширеннаяПодсказка + НеНайденоРасширеннаяПодсказка 544 Label true @@ -1821,7 +1813,7 @@ ГруппаНастройкиСопоставления 419 - ГруппаИтогоНеспоставленых + ГруппаИтогоНеСопоставленных 421 ОбновлятьСуществующие @@ -1977,16 +1969,8 @@ true - - <key>ru</key> - <value>Группа итого неспоставленых</value> - - - ru - Группа итого неспоставленых - - ГруппаИтогоНеспоставленыхРасширеннаяПодсказка + ГруппаИтогоНеСопоставленныхРасширеннаяПодсказка 422 Label true @@ -2773,7 +2757,7 @@ ДлительныеОперации 553 - ГруппаИнформацияОВыполенение + ГруппаИнформацияОВыполнение 561 ГруппаПрогресс @@ -2895,16 +2879,8 @@ true - - <key>ru</key> - <value>Группа информация о выполенение</value> - - - ru - Группа информация о выполенение - - ГруппаИнформацияОВыполенениеРасширеннаяПодсказка + ГруппаИнформацияОВыполнениеРасширеннаяПодсказка 562 Label true @@ -3263,6 +3239,7 @@ true true true + UseIfNecessary auto true @@ -4007,7 +3984,7 @@ ЗагрузитьШаблонИзФайла - Auto + DontUse Auto @@ -4029,7 +4006,7 @@ ВыгрузитьШаблонВФайл - Auto + DontUse Auto @@ -4047,7 +4024,7 @@ Далее - Auto + DontUse Auto @@ -4069,7 +4046,7 @@ Назад - Auto + DontUse Auto @@ -4091,7 +4068,7 @@ ГрупповоеИзменениеРеквизитов - Auto + DontUse Auto @@ -4113,7 +4090,7 @@ РазрешитьНеоднозначность - Auto + DontUse Auto @@ -4135,7 +4112,7 @@ ВставитьВСписок - Auto + DontUse Auto @@ -4157,7 +4134,7 @@ ИзменитьБланк - Auto + DontUse Auto @@ -4179,7 +4156,7 @@ ОтменитьСопоставление - Auto + DontUse Auto diff --git a/SSL/src/DataProcessors/ЗагрузкаДанныхИзФайла/Forms/ЗагрузкаДанныхИзФайла/Module.bsl b/SSL/src/DataProcessors/ЗагрузкаДанныхИзФайла/Forms/ЗагрузкаДанныхИзФайла/Module.bsl index e7c32d706..779a7acf2 100644 --- a/SSL/src/DataProcessors/ЗагрузкаДанныхИзФайла/Forms/ЗагрузкаДанныхИзФайла/Module.bsl +++ b/SSL/src/DataProcessors/ЗагрузкаДанныхИзФайла/Forms/ЗагрузкаДанныхИзФайла/Module.bsl @@ -346,7 +346,7 @@ Если ПодключитьРасширениеРаботыСФайлами() Тогда Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.ФайловыеФункции") Тогда МодульФайловыеФункцииСлужебныйКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("ФайловыеФункцииСлужебныйКлиент"); - ПутьКФайлу = МодульФайловыеФункцииСлужебныйКлиент.КаталогМоиДокументы(); + ПутьКФайлу = ""; Иначе ПутьКФайлу = ""; КонецЕсли; @@ -359,10 +359,7 @@ Если РасширениеФайла = "csv" Тогда СохранитьТаблицуВCSVФайл(ПутьКФайлу); ИначеЕсли РасширениеФайла = "xlsx" Тогда - АдресВоВременномХранилище = ТабличныйДокументУдалениеПримечаний(); - ТабличныйДокументБезПримечаний = ПолучитьИзВременногоХранилища(АдресВоВременномХранилище); - ТабличныйДокументБезПримечаний.Записать(ПутьКФайлу, ТипФайлаТабличногоДокумента.xlsx); - ШаблонСДанными = ТабличныйДокументБезПримечаний; + ШаблонСДанными.Записать(ПутьКФайлу, ТипФайлаТабличногоДокумента.xlsx); ИначеЕсли РасширениеФайла = "mxl" Тогда ШаблонСДанными.Записать(ПутьКФайлу, ТипФайлаТабличногоДокумента.mxl); Иначе @@ -374,25 +371,15 @@ ОткрытьФорму("Обработка.ЗагрузкаДанныхИзФайла.Форма.РасширениеФайла",, ЭтотОбъект, Истина,,, Оповещение, РежимОткрытияОкнаФормы.БлокироватьОкноВладельца); ПутьКФайлу = ""; КонецЕсли; - КонецПроцедуры -// Функция для обхода ошибки сохранения, если в документе есть примечания. -// -&НаСервере -Функция ТабличныйДокументУдалениеПримечаний() - ТабличныйДокументДляСохранения = Новый ТабличныйДокумент; - ИзменитьБланкПоИнформацииПоКолонкам(ТабличныйДокументДляСохранения); - АдресВоВременномХранилище = ПоместитьВоВременноеХранилище(ТабличныйДокументДляСохранения); - Возврат АдресВоВременномХранилище; -КонецФункции - &НаКлиенте Процедура ЗагрузитьШаблонИзФайла(Команда) ПолноеИмяФайла = ""; Интерактивно = Истина; - Если ПодключитьРасширениеРаботыСФайлами() Тогда + + #Если НЕ ВебКлиент Тогда Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.ФайловыеФункции") Тогда МодульФайловыеФункцииСлужебныйКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("ФайловыеФункцииСлужебныйКлиент"); ПутьКФайлу = МодульФайловыеФункцииСлужебныйКлиент.КаталогМоиДокументы(); @@ -401,6 +388,7 @@ КонецЕсли; ИмяФайла = СформироватьИмяФайлаДляОбъектаМетаданных(ИмяОбъектаСопоставления); + ПолучитьПутьКФайлуНачалоВыбора(РежимДиалогаВыбораФайла.Открытие, ПутьКФайлу, ""); ВыбранныйФайл = ОбщегоНазначенияКлиентСервер.РазложитьПолноеИмяФайла(ПутьКФайлу); РасширениеФайла = ОбщегоНазначенияКлиентСервер.РасширениеБезТочки(ВыбранныйФайл.Расширение); @@ -410,7 +398,9 @@ Иначе Возврат; КонецЕсли; - КонецЕсли; + #Иначе + ПолноеИмяФайла = ""; + #КонецЕсли АдресВременногоХранилища = ""; Оповещение = Новый ОписаниеОповещения("ПриОкончаниеПомещенияФайла", ЭтотОбъект); НачатьПомещениеФайла(Оповещение, АдресВременногоХранилища, ПолноеИмяФайла, Интерактивно); @@ -420,110 +410,6 @@ #КонецОбласти -#Область ОбработчикиСобытийЭлементовТаблицыВидЗагрузкиДанных - -&НаКлиенте -Процедура ВидЗагрузкиДанныхВыборЗначения(Элемент, Значение, СтандартнаяОбработка) - СтандартнаяОбработка = Ложь; - ПереходКСледующемуШагуЗагрузкиДанных(); -КонецПроцедуры - - -&НаКлиенте -Процедура ВидЗагрузкиДанныхПередНачаломИзменения(Элемент, Отказ) - Отказ = Истина; -КонецПроцедуры - -#КонецОбласти - -#Область ОбработчикиСобытийЭлементовТаблицыСопоставленияДанных - -&НаКлиенте -Процедура ТаблицаСопоставленияДанныхПриОкончанииРедактирования(Элемент, НоваяСтрока, ОтменаРедактирования) - - Если ТипЗагрузки <> "ТабличнаяЧасть" Тогда - Если ЗначениеЗаполнено(Элемент.ТекущиеДанные.ОбъектСопоставления) Тогда - Элемент.ТекущиеДанные.РезультатСопоставленияСтроки = "СтрокаСопоставлена"; - Иначе - Элемент.ТекущиеДанные.РезультатСопоставленияСтроки = "НеСопоставлен"; - КонецЕсли; - Иначе - Отбор = Новый Структура("ОбязательнаДляЗаполнения", Истина); - КолонкиОбязательнаДляЗаполнения = ИнформацияПоКолонкам.НайтиСтроки(Отбор); - РезультатСопоставленияСтроки = "СтрокаСопоставлена"; - Для каждого КолонкаТаблицы Из КолонкиОбязательнаДляЗаполнения Цикл - Если НЕ ЗначениеЗаполнено(Элемент.ТекущиеДанные["ТЧ_" + КолонкаТаблицы.Ассоциация]) Тогда - РезультатСопоставленияСтроки = "НеСопоставлен"; - Прервать; - КонецЕсли; - КонецЦикла; - Элемент.ТекущиеДанные.РезультатСопоставленияСтроки = РезультатСопоставленияСтроки; - КонецЕсли; - - ПоказатьСтатистикуПоСопоставлениюЗагрузкаИзФайла(); - -КонецПроцедуры - -&НаКлиенте -Процедура ТаблицаСопоставленияДанныхПриАктивизацииЯчейки(Элемент) - Элементы.РазрешитьНеоднозначность.Доступность = Ложь; - Элементы.ТаблицаСопоставленияДанныхКонтекстноеМенюРазрешитьНеоднозначность.Доступность = Ложь; - - Если Элемент.ТекущиеДанные <> Неопределено И ЗначениеЗаполнено(Элемент.ТекущиеДанные.РезультатСопоставленияСтроки) Тогда - Если ТипЗагрузки = "ТабличнаяЧасть" Тогда - Если СтрДлина(Элемент.ТекущийЭлемент.Имя) > 3 И Лев(Элемент.ТекущийЭлемент.Имя,3) = "ТЧ_" Тогда - ИмяКолонки = Сред(Элемент.ТекущийЭлемент.Имя, 4); - Если Найти(Элемент.ТекущиеДанные.ОписаниеОшибки, ИмяКолонки) > 0 Тогда - Элементы.РазрешитьНеоднозначность.Доступность = Истина; - Элементы.ТаблицаСопоставленияДанныхКонтекстноеМенюРазрешитьНеоднозначность.Доступность = Истина; - КонецЕсли; - КонецЕсли; - ИначеЕсли Элемент.ТекущиеДанные.РезультатСопоставленияСтроки = "Неоднозначность" Тогда - Элементы.РазрешитьНеоднозначность.Доступность = Истина; - Элементы.ТаблицаСопоставленияДанныхКонтекстноеМенюРазрешитьНеоднозначность.Доступность = Истина; - КонецЕсли; - КонецЕсли; -КонецПроцедуры - -&НаКлиенте -Процедура ТаблицаСопоставленияДанныхВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка) - ОткрытьФормуРазрешенияНеоднозначности(ВыбраннаяСтрока, Поле.Имя, СтандартнаяОбработка); -КонецПроцедуры - -#КонецОбласти - -#Область ОбработчикиСобытийЭлементовТаблицыОтчет - -&НаКлиенте -Процедура ТаблицаОтчетПриАктивизацииОбласти(Элемент) - Если ТаблицаОтчет.ТекущаяОбласть.Низ = 1 И ТаблицаОтчет.ТекущаяОбласть.Верх = 1 Тогда - Элементы.ИзменитьРеквизиты.Доступность = Ложь; - Иначе - Элементы.ИзменитьРеквизиты.Доступность = Истина; - КонецЕсли; -КонецПроцедуры - -&НаКлиенте -Процедура ГрупповоеИзменениеРеквизитов(Команда) - - Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.ГрупповоеИзменениеОбъектов") Тогда - Если ТаблицаОтчет.ТекущаяОбласть.Верх = 1 Тогда - ВерхняяПозиция = 2; - Иначе - ВерхняяПозиция = ТаблицаОтчет.ТекущаяОбласть.Верх; - КонецЕсли; - МассивСсылок = ГрупповоеИзменениеРеквизитовНаСервере(ВерхняяПозиция, ТаблицаОтчет.ТекущаяОбласть.Низ); - Если массивСсылок.Количество() > 0 Тогда - ПараметрыФормы = Новый Структура("МассивОбъектов", МассивСсылок); - ИмяОбъекта = "Обработка."; - ОткрытьФорму(ИмяОбъекта + "ГрупповоеИзменениеРеквизитов.Форма", ПараметрыФормы); - КонецЕсли; - КонецЕсли; - -КонецПроцедуры - -#КонецОбласти - #Область СлужебныеПроцедурыИФункции /////////////////////////////////////// КЛИЕНТ /////////////////////////////////////////// @@ -556,24 +442,21 @@ Элементы.Назад.Заголовок = НСтр("ru = '< В начало'"); ИначеЕсли Элементы.СтраницыПомощника.ТекущаяСтраница = Элементы.СопоставлениеЗагружаемыхДанных Тогда Элементы.ВставитьВСписок.Видимость = Ложь; + ПодтверждениеЗакрытияФормы = Истина; Если ТипЗагрузки = "ТабличнаяЧасть" Тогда - ПодтверждениеЗакрытияФормы = Истина; Отбор = Новый Структура("РезультатСопоставленияСтроки", "НеСопоставлен"); Строки = ТаблицаСопоставленияДанных.НайтиСтроки(Отбор); - Если Строки.Количество() > 0 Тогда Оповещение = Новый ОписаниеОповещения("ПослеВопросаОДобавлениеВТабличнуюЧасть", ЭтотОбъект); - ПоказатьВопрос(Оповещение, НСтр("ru = 'Строки в которых не заполнены обязательные колонки будут пропущены.'") + - Символы.ПС + НСтр("ru = 'Продолжить?'"), РежимДиалогаВопрос.ДаНет); + ПоказатьВопрос(Оповещение, НСтр("ru = 'Строки в которых не заполнены обязательные колонки будут пропущены.'") + + Символы.ПС + НСтр("ru = 'Продолжить?'"), РежимДиалогаВопрос.ДаНет); Возврат; КонецЕсли; АдресЗагруженныхДанных = АдресВХранилищеТаблицыСопоставления(); Закрыть(АдресЗагруженныхДанных); - ИначеЕсли ТипЗагрузки = "ВставкаИзБуфераОбмена" Тогда Элементы.Назад.Заголовок = НСтр("ru = '< В начало_'"); - ПодтверждениеЗакрытияФормы = Истина; ЗакрытьФормуИВернутьМассивСсылок(); Иначе Элементы.СтраницыПомощника.ТекущаяСтраница = Элементы.ДлительныеОперации; @@ -678,17 +561,17 @@ СписокВыбора = Элементы.ФильтрТаблицаСопоставления.СписокВыбора; СписокВыбора.Очистить(); СписокВыбора.Добавить("Все", ТекстВсе, Истина); - СписокВыбора.Добавить("Несопоставленные", СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Несопоставленные (%1 из %2)'"), Статистика.НеСопоставленных, Статистика.Всего)); - СписокВыбора.Добавить("Сопоставленные", СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Сопоставленные (%1 из %2)'"), Статистика.Сопоставленных, Статистика.Всего)); - СписокВыбора.Добавить("Неоднозначные", СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Неоднозначные (%1 из %2)'"), Статистика.Неоднозначных, Статистика.Всего)); + СписокВыбора.Добавить("Несопоставленные", СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Несопоставленные (%1 из %2)'"), + Статистика.НеСопоставленных, Статистика.Всего)); + СписокВыбора.Добавить("Сопоставленные", СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Сопоставленные (%1 из %2)'"), + Статистика.Сопоставленных, Статистика.Всего)); + СписокВыбора.Добавить("Неоднозначные", СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Неоднозначные (%1 из %2)'"), + Статистика.Неоднозначных, Статистика.Всего)); Если Статистика.Неоднозначных > 0 Тогда Элементы.ОписаниеНеоднозначность.Видимость=Истина; - Элементы.ОписаниеНеоднозначность.Заголовок = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = '(неоднозначностей: %1)'"), Статистика.Неоднозначных); + Элементы.ОписаниеНеоднозначность.Заголовок = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = '(неоднозначностей: %1)'"), + Статистика.Неоднозначных); Иначе Элементы.ОписаниеНеоднозначность.Видимость=Ложь; КонецЕсли; @@ -761,7 +644,7 @@ &НаСервере Процедура ВыполнитьШагЗаполнениеТаблицыДаннымиНаСервере(ОписаниеСтрокиВыбора) - Если Найти(ОписаниеСтрокиВыбора.ПолноеИмяОбъектаМетаданных, ".") > 0 Тогда + Если СтрНайти(ОписаниеСтрокиВыбора.ПолноеИмяОбъектаМетаданных, ".") > 0 Тогда ИмяОбъектаСопоставления = ОписаниеСтрокиВыбора.ПолноеИмяОбъектаМетаданных; Иначе ИмяОбъектаСопоставления = ПолучитьПолноеИмяОбъектаМетаданных(ОписаниеСтрокиВыбора.ПолноеИмяОбъектаМетаданных); @@ -869,13 +752,7 @@ СкопироватьСтруктуруТабличнойЧасти(АдресКопииТабличнойЧасти); МенеджерОбъекта = МенеджерОбъекта(ИмяОбъектаСопоставления); - - Попытка - МенеджерОбъекта.СопоставитьЗагружаемыеДанные(АдресЗагруженныхДанных, АдресКопииТабличнойЧасти, СписокНеоднозначностей, ИмяОбъектаСопоставления, ДополнительныеПараметры); - Исключение - // Используется старый вариант метода СопоставитьЗагружаемыеДанные без параметра ДополнительныеПараметры. - МенеджерОбъекта.СопоставитьЗагружаемыеДанные(АдресЗагруженныхДанных, АдресКопииТабличнойЧасти, СписокНеоднозначностей, ИмяОбъектаСопоставления); - КонецПопытки; + МенеджерОбъекта.СопоставитьЗагружаемыеДанные(АдресЗагруженныхДанных, АдресКопииТабличнойЧасти, СписокНеоднозначностей, ИмяОбъектаСопоставления, ДополнительныеПараметры); Если НЕ РеквизитыСозданы Тогда СоздатьТаблицуСопоставленияПоИнформацииОКолонкахДляТЧ(); @@ -920,14 +797,14 @@ Если ТипЗагрузки = "ПрикладнаяЗагрузка" Тогда СопоставитьДанныеПрикладнаяЗагрузка(ТаблицаСопоставления); - Элементы.ПояснениеДляПрикладнойЗагрузки.Заголовок = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - Элементы.ПояснениеДляПрикладнойЗагрузки.Заголовок, ПредставлениеСправочника(ИмяОбъектаСопоставления)); + Элементы.ПояснениеДляПрикладнойЗагрузки.Заголовок = СтрЗаменить(Элементы.ПояснениеДляПрикладнойЗагрузки.Заголовок, "%1", + ПредставлениеСправочника(ИмяОбъектаСопоставления)); ИначеЕсли ТипЗагрузки = "ВнешняяЗагрузка" Тогда СопоставитьДанныеВнешняяОбработка(ТаблицаСопоставления); КонецЕсли; - Элементы.ПояснениеДляПрикладнойЗагрузки.Заголовок = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - Элементы.ПояснениеДляПрикладнойЗагрузки.Заголовок, ПредставлениеСправочника(ИмяОбъектаСопоставления)); + Элементы.ПояснениеДляПрикладнойЗагрузки.Заголовок = СтрЗаменить(Элементы.ПояснениеДляПрикладнойЗагрузки.Заголовок, "%1", + ПредставлениеСправочника(ИмяОбъектаСопоставления)); ЗначениеВРеквизитФормы(ТаблицаСопоставления, "ТаблицаСопоставленияДанных"); @@ -945,11 +822,11 @@ СписокНезаполненныхКолонок = НезаполненныеОбязательныеКолонки(); Если СписокНезаполненныхКолонок.Количество() > 0 Тогда Если СписокНезаполненныхКолонок.Количество() =1 Тогда - ТекстПроКолонки = НСтр("ru = 'Обязательная колонка""'") + " " + СписокНезаполненныхКолонок[0] + - НСтр("ru = '"" содержит незаполненные строки, эти строки будут пропущены при загрузке'"); + ТекстПроКолонки = НСтр("ru = 'Обязательная колонка""'") + " " + СписокНезаполненныхКолонок[0] + + НСтр("ru = '"" содержит незаполненные строки, эти строки будут пропущены при загрузке'"); Иначе - ТекстПроКолонки = НСтр("ru = 'Обязательные колонки""'") + " " + СтроковыеФункцииКлиентСервер.СтрокаИзМассиваПодстрок(СписокНезаполненныхКолонок,", ") + - НСтр("ru = '"" содержат незаполненные строки, эти строки будут пропущены при загрузке'"); + ТекстПроКолонки = НСтр("ru = 'Обязательные колонки""'") + " " + СтрСоединить(СписокНезаполненныхКолонок,", ") + + НСтр("ru = '"" содержат незаполненные строки, эти строки будут пропущены при загрузке'"); КонецЕсли; ТекстПроКолонки = ТекстПроКолонки + Символы.ПС + НСтр("ru = 'Продолжить?'"); @@ -1276,9 +1153,9 @@ Если ТипЗагрузки = "ТабличнаяЧасть" Тогда Если Строка.РезультатСопоставленияСтроки = "НеСопоставлен" И СтрДлина(Строка.ОписаниеОшибки) > 0 Тогда - Если СтрДлина(ПолеИмя) > 3 И Лев(ПолеИмя,3) = "ТЧ_" Тогда + Если СтрДлина(ПолеИмя) > 3 И СтрНачинаетсяС(ПолеИмя, "ТЧ_") Тогда Имя = Сред(ПолеИмя, 4); - Если Найти(Строка.ОписаниеОшибки, Имя) Тогда + Если СтрНайти(Строка.ОписаниеОшибки, Имя) Тогда СтандартнаяОбработка = Ложь; СтрокаИзТаблицы = Новый Массив; ЗначенияЗагружаемыхКолонок = Новый Структура(); @@ -1408,11 +1285,13 @@ ЗначениеВРеквизитФормы(СопоставленныеДанные, "ТаблицаСопоставленияДанных"); КонецЕсли; - Элементы.ОткрытьСправочникПослеЗакрытияПомощника.Заголовок = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(Элементы.ОткрытьСправочникПослеЗакрытияПомощника.Заголовок, ПредставлениеСправочника(ИмяОбъектаСопоставления)); - Элементы.ПояснениеОтчетаОЗагрузке.Заголовок = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(Элементы.ПояснениеОтчетаОЗагрузке.Заголовок, ПредставлениеСправочника(ИмяОбъектаСопоставления)); + Элементы.ОткрытьСправочникПослеЗакрытияПомощника.Заголовок = + СтрЗаменить(Элементы.ОткрытьСправочникПослеЗакрытияПомощника.Заголовок, "%1", + ПредставлениеСправочника(ИмяОбъектаСопоставления)); + Элементы.ПояснениеОтчетаОЗагрузке.Заголовок = + СтрЗаменить(Элементы.ПояснениеОтчетаОЗагрузке.Заголовок, "%1", ПредставлениеСправочника(ИмяОбъектаСопоставления)); ТипОтчета = "ВсеЭлементы"; - КонецПроцедуры @@ -1509,14 +1388,14 @@ Функция ИнформацияОбОбъектеМетаданныхПоТипу(ПолныйТипОбъекта) ОписаниеОбъекта = Новый Структура("ТипОбъекта, ИмяОбъекта"); ПолноеИмя = Метаданные.НайтиПоТипу(ПолныйТипОбъекта).ПолноеИмя(); - Результат = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(ПолноеИмя,"."); + Результат = СтрРазделить(ПолноеИмя, ".", Ложь); Если Результат.Количество()>1 Тогда ОписаниеОбъекта.ТипОбъекта = Результат[0]; ОписаниеОбъекта.ИмяОбъекта = Результат[1]; Возврат ОписаниеОбъекта; Иначе - Возврат Неопределено; + Возврат Неопределено; КонецЕсли; КонецФункции @@ -1749,7 +1628,7 @@ ТаблицаДляТЧ = Новый ТаблицаЗначений; Для Каждого Колонка Из Таблица.Колонки Цикл - Если Лев(Колонка.Имя, 3) = "ТЧ_" Тогда + Если СтрНачинаетсяС(Колонка.Имя, "ТЧ_") Тогда ТаблицаДляТЧ.Колонки.Добавить(Сред(Колонка.имя, 4), Колонка.ТипЗначения, Колонка.Заголовок, Колонка.Ширина); ИначеЕсли Колонка.Имя = "РезультатСопоставленияСтроки" ИЛИ Колонка.Имя = "ОписаниеОшибки" ИЛИ Колонка.Имя = "Идентификатор" Тогда ТаблицаДляТЧ.Колонки.Добавить(Колонка.имя, Колонка.ТипЗначения, Колонка.Заголовок, Колонка.Ширина); @@ -2088,7 +1967,7 @@ ЗначениеВРеквизитФормы(ВременнаяТЗ, "ТаблицаСопоставленияДанных"); Для Каждого Колонка Из ВременнаяТЗ.Колонки Цикл - НовыйЭлемент = Элементы.Добавить(Колонка.Имя, Тип("ПолеФормы"), Элементы.ТаблицаСопоставленияДанных); + НовыйЭлемент = Элементы.Добавить("ТаблицаСопоставленияДанных_" + Колонка.Имя, Тип("ПолеФормы"), Элементы.ТаблицаСопоставленияДанных); НовыйЭлемент.Вид = ВидПоляФормы.ПолеВвода; НовыйЭлемент.ПутьКДанным = "ТаблицаСопоставленияДанных." + Колонка.Имя; НовыйЭлемент.Заголовок = Колонка.Заголовок; @@ -2105,12 +1984,12 @@ НовыйЭлемент.КартинкаШапки = БиблиотекаКартинок.Изменить; НовыйЭлемент.ТолькоПросмотр = Ложь; - НовыйЭлемент.РежимРедактирования = РежимРедактированияКолонки.Вход; - НовыйЭлемент.КнопкаВыпадающегоСписка = Ложь; + НовыйЭлемент.РежимРедактирования = РежимРедактированияКолонки.Непосредственно; НовыйЭлемент.КнопкаСоздания = Ложь; - НовыйЭлемент.РедактированиеТекста = Ложь; + НовыйЭлемент.КнопкаОткрытия = Истина; + НовыйЭлемент.КнопкаВыбора = Истина; + НовыйЭлемент.РедактированиеТекста = Истина; НовыйЭлемент.ИсторияВыбораПриВводе = ИсторияВыбораПриВводе.НеИспользовать; - НовыйЭлемент.РежимВыбораНезаполненного = РежимВыбораНезаполненного.ПриАктивизации; ИначеЕсли Колонка.Имя = "Идентификатор" Тогда НовыйЭлемент.ФиксацияВТаблице = ФиксацияВТаблице.Лево; НовыйЭлемент.ТолькоПросмотр = Истина; @@ -2141,10 +2020,10 @@ ДобавитьСтандартныеКолонкиВТаблицуСопоставления(ВременнаяТЗ, СтруктураОбъектаСопоставления, Истина, Истина, Истина, Истина); ДобавитьСтандартныеКолонкиВМассивРеквизитов(МассивРеквизитов, СтруктураОбъектаСопоставления, Истина, Истина, Истина, Истина); - Для каждого Колонка Из ИнформацияПоКолонкам Цикл + Для каждого Колонка Из ИнформацияПоКолонкам Цикл Если ВременнаяТЗ.Колонки.Найти(Колонка.ИмяКолонки) = Неопределено Тогда ПредставлениеКолонки = ?(ЗначениеЗаполнено(Колонка.Синоним), Колонка.Синоним, Колонка.ПредставлениеКолонки); - ВременнаяТЗ.Колонки.Добавить(Колонка.ИмяКолонки, Колонка.ТипКолонки, ПредставлениеКолонки); + ВременнаяТЗ.Колонки.Добавить(Колонка.ИмяКолонки, Колонка.ТипКолонки,ПредставлениеКолонки); МассивРеквизитов.Добавить(Новый РеквизитФормы(Колонка.ИмяКолонки, Колонка.ТипКолонки, "ТаблицаСопоставленияДанных", ПредставлениеКолонки)); КонецЕсли; КонецЦикла; @@ -2152,7 +2031,7 @@ ИзменитьРеквизиты(МассивРеквизитов); Для Каждого Колонка Из ВременнаяТЗ.Колонки Цикл - НовыйЭлемент = Элементы.Добавить(Колонка.Имя, Тип("ПолеФормы"), Элементы.ТаблицаСопоставленияДанных); + НовыйЭлемент = Элементы.Добавить("ТаблицаСопоставленияДанных_" + Колонка.Имя, Тип("ПолеФормы"), Элементы.ТаблицаСопоставленияДанных); НовыйЭлемент.Вид = ВидПоляФормы.ПолеВвода; НовыйЭлемент.ПутьКДанным = "ТаблицаСопоставленияДанных." + Колонка.Имя; НовыйЭлемент.Заголовок = Колонка.Заголовок; @@ -2229,24 +2108,24 @@ Для Каждого Колонка Из ВременнаяТЗ.Колонки Цикл - Если Лев(Колонка.Имя, 3) = "ТЧ_" Тогда + Если СтрНачинаетсяС(Колонка.Имя, "ТЧ_") Тогда ГруппаКолонокЗагружаемыеДанныеТЧ = Элементы.Добавить("ЗагружаемыеДанные_" + Колонка.Имя , Тип("ГруппаФормы"), ГруппаКолонокЗагружаемыеДанные); ГруппаКолонокЗагружаемыеДанныеТЧ.Группировка = ГруппировкаКолонок.Вертикальная; Родитель = ГруппаКолонокЗагружаемыеДанныеТЧ; - ИначеЕсли Лев(Колонка.Имя, 3) = "ФЛ_" Тогда + ИначеЕсли СтрНачинаетсяС(Колонка.Имя, "ФЛ_") Тогда Продолжить; Иначе Родитель = ГруппаКолонокЗагружаемыеДанные; КонецЕсли; - НовыйЭлемент = Элементы.Добавить(Колонка.Имя, Тип("ПолеФормы"), Родитель); + НовыйЭлемент = Элементы.Добавить("ТаблицаСопоставленияДанных_" + Колонка.Имя, Тип("ПолеФормы"), Родитель); НовыйЭлемент.Вид = ВидПоляФормы.ПолеВвода; НовыйЭлемент.ПутьКДанным = "ТаблицаСопоставленияДанных." + Колонка.Имя; НовыйЭлемент.Заголовок = Колонка.Заголовок; НовыйЭлемент.ИсторияВыбораПриВводе = ИсторияВыбораПриВводе.НеИспользовать; - Если СтрДлина(Колонка.Имя) > 3 И Лев(Колонка.Имя, 3) = "ТЧ_" Тогда + Если СтрДлина(Колонка.Имя) > 3 И СтрНачинаетсяС(Колонка.Имя, "ТЧ_") Тогда Отбор = Новый Структура("ИмяКолонки", Сред(Колонка.Имя, 4)); Колонки = ИнформацияПоКолонкам.НайтиСтроки(Отбор); Если Колонки.Количество() > 0 Тогда @@ -2266,9 +2145,9 @@ НовыйЭлемент.АвтоОтметкаНезаполненного = Истина; КонецЕсли; - Если Лев(Колонка.Имя, 3) = "ТЧ_" Тогда + Если СтрНачинаетсяС(Колонка.Имя, "ТЧ_") Тогда ТипКолонки = Метаданные.НайтиПоТипу(Колонка.ТипЗначения.Типы()[0]); - Если ТипКолонки <> Неопределено И Найти(ТипКолонки.ПолноеИмя(), "Справочник") > 0 Тогда + Если ТипКолонки <> Неопределено И СтрНайти(ТипКолонки.ПолноеИмя(), "Справочник") > 0 Тогда НовыйЭлемент.КартинкаШапки = БиблиотекаКартинок.Изменить; КонецЕсли; @@ -2276,7 +2155,7 @@ Если КолонкаСвязьПараметровВыбора <> Неопределено Тогда НовыйМассив = Новый Массив(); Для каждого СвязьПараметраВыбора Из КолонкаСвязьПараметровВыбора Цикл - Позиция = СтроковыеФункцииКлиентСервер.НайтиСимволСКонца(СвязьПараметраВыбора.ПутьКДанным, "."); + Позиция = СтрНайти(СвязьПараметраВыбора.ПутьКДанным, ".", НаправлениеПоиска.СКонца); Если Позиция > 0 Тогда ИмяЭлемента = Сред(СвязьПараметраВыбора.ПутьКДанным, Позиция + 1); НоваяСвязь = Новый СвязьПараметраВыбора(СвязьПараметраВыбора.Имя, "Элементы.ТаблицаСопоставленияДанных.ТекущиеДанные.ТЧ_" + ИмяЭлемента, СвязьПараметраВыбора.ИзменениеЗначения); @@ -2298,7 +2177,7 @@ НовыйЭлемент.Вид = ВидПоляФормы.ПолеВвода; НовыйЭлемент.ПутьКДанным = "ТаблицаСопоставленияДанных." + КолонкаУровень2.Имя; ТипКолонки = Метаданные.НайтиПоТипу(КолонкаУровень2.ТипЗначения.Типы()[0]); - Если ТипКолонки <> Неопределено И Найти(ТипКолонки.ПолноеИмя(), "Справочник") > 0 Тогда + Если ТипКолонки <> Неопределено И СтрНайти(ТипКолонки.ПолноеИмя(), "Справочник") > 0 Тогда НовыйЭлемент.Заголовок = НСтр("ru = 'Данные из файла'"); Иначе НовыйЭлемент.Заголовок = " "; @@ -2323,7 +2202,7 @@ НовыйЭлемент.ТолькоПросмотр = Истина; НовыйЭлемент.ЦветТекста = ЦветаСтиля.ПоясняющийТекст; - Если СтрДлина(Колонка.Имя) > 3 И Лев(Колонка.Имя, 3) = "ФЛ_" Тогда + Если СтрДлина(Колонка.Имя) > 3 И СтрНачинаетсяС(Колонка.Имя, "ФЛ_") Тогда Отбор = Новый Структура("ИмяКолонки", Сред(Колонка.Имя, 4)); Колонки = ИнформацияПоКолонкам.НайтиСтроки(Отбор); Если Колонки.Количество() > 0 Тогда @@ -2553,16 +2432,14 @@ &НаСервере Процедура ИзменитьБланкПоИнформацииПоКолонкам(Бланк = Неопределено) - СПримечаниями = Ложь; Если Бланк = Неопределено Тогда Бланк = ШаблонСДанными; - СПримечаниями = Истина; КонецЕсли; ТаблицаКолонок = РеквизитФормыВЗначение("ИнформацияПоКолонкам"); ОбщегоНазначения.ХранилищеОбщихНастроекСохранить("ЗагрузкаДанныхИзФайла", ИмяОбъектаСопоставления, ТаблицаКолонок,, ИмяПользователя()); Бланк.Очистить(); - Шапка = Обработки.ЗагрузкаДанныхИзФайла.ШапкаБланкаДляЗаполненияПоИнформацииПоКолонкам(ТаблицаКолонок, СПримечаниями); + Шапка = Обработки.ЗагрузкаДанныхИзФайла.ШапкаБланкаДляЗаполненияПоИнформацииПоКолонкам(ТаблицаКолонок); Бланк.Вывести(Шапка); ПоказатьИнформационнуюСтрокуПроОбязательныеКолонки(); @@ -2578,6 +2455,110 @@ #КонецОбласти +#Область ОбработчикиСобытийЭлементовТаблицыВидЗагрузкиДанных + +&НаКлиенте +Процедура ВидЗагрузкиДанныхВыборЗначения(Элемент, Значение, СтандартнаяОбработка) + СтандартнаяОбработка = Ложь; + ПереходКСледующемуШагуЗагрузкиДанных(); +КонецПроцедуры + + +&НаКлиенте +Процедура ВидЗагрузкиДанныхПередНачаломИзменения(Элемент, Отказ) + Отказ = Истина; +КонецПроцедуры + +#КонецОбласти + +#Область ОбработчикиСобытийЭлементовТаблицыСопоставленияДанных + +&НаКлиенте +Процедура ТаблицаСопоставленияДанныхПриОкончанииРедактирования(Элемент, НоваяСтрока, ОтменаРедактирования) + + Если ТипЗагрузки <> "ТабличнаяЧасть" Тогда + Если ЗначениеЗаполнено(Элемент.ТекущиеДанные.ОбъектСопоставления) Тогда + Элемент.ТекущиеДанные.РезультатСопоставленияСтроки = "СтрокаСопоставлена"; + Иначе + Элемент.ТекущиеДанные.РезультатСопоставленияСтроки = "НеСопоставлен"; + КонецЕсли; + Иначе + Отбор = Новый Структура("ОбязательнаДляЗаполнения", Истина); + КолонкиОбязательнаДляЗаполнения = ИнформацияПоКолонкам.НайтиСтроки(Отбор); + РезультатСопоставленияСтроки = "СтрокаСопоставлена"; + Для каждого КолонкаТаблицы Из КолонкиОбязательнаДляЗаполнения Цикл + Если НЕ ЗначениеЗаполнено(Элемент.ТекущиеДанные["ТЧ_" + КолонкаТаблицы.Ассоциация]) Тогда + РезультатСопоставленияСтроки = "НеСопоставлен"; + Прервать; + КонецЕсли; + КонецЦикла; + Элемент.ТекущиеДанные.РезультатСопоставленияСтроки = РезультатСопоставленияСтроки; + КонецЕсли; + + ПоказатьСтатистикуПоСопоставлениюЗагрузкаИзФайла(); + +КонецПроцедуры + +&НаКлиенте +Процедура ТаблицаСопоставленияДанныхПриАктивизацииЯчейки(Элемент) + Элементы.РазрешитьНеоднозначность.Доступность = Ложь; + Элементы.ТаблицаСопоставленияДанныхКонтекстноеМенюРазрешитьНеоднозначность.Доступность = Ложь; + + Если Элемент.ТекущиеДанные <> Неопределено И ЗначениеЗаполнено(Элемент.ТекущиеДанные.РезультатСопоставленияСтроки) Тогда + Если ТипЗагрузки = "ТабличнаяЧасть" Тогда + Если СтрДлина(Элемент.ТекущийЭлемент.Имя) > 3 И СтрНачинаетсяС(Элемент.ТекущийЭлемент.Имя, "ТЧ_") Тогда + ИмяКолонки = Сред(Элемент.ТекущийЭлемент.Имя, 4); + Если СтрНайти(Элемент.ТекущиеДанные.ОписаниеОшибки, ИмяКолонки) > 0 Тогда + Элементы.РазрешитьНеоднозначность.Доступность = Истина; + Элементы.ТаблицаСопоставленияДанныхКонтекстноеМенюРазрешитьНеоднозначность.Доступность = Истина; + КонецЕсли; + КонецЕсли; + ИначеЕсли Элемент.ТекущиеДанные.РезультатСопоставленияСтроки = "Неоднозначность" Тогда + Элементы.РазрешитьНеоднозначность.Доступность = Истина; + Элементы.ТаблицаСопоставленияДанныхКонтекстноеМенюРазрешитьНеоднозначность.Доступность = Истина; + КонецЕсли; + КонецЕсли; +КонецПроцедуры + +&НаКлиенте +Процедура ТаблицаСопоставленияДанныхВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка) + ОткрытьФормуРазрешенияНеоднозначности(ВыбраннаяСтрока, Поле.Имя, СтандартнаяОбработка); +КонецПроцедуры + +#КонецОбласти + +#Область ОбработчикиСобытийЭлементовТаблицыОтчет + +&НаКлиенте +Процедура ТаблицаОтчетПриАктивизацииОбласти(Элемент) + Если ТаблицаОтчет.ТекущаяОбласть.Низ = 1 И ТаблицаОтчет.ТекущаяОбласть.Верх = 1 Тогда + Элементы.ИзменитьРеквизиты.Доступность = Ложь; + Иначе + Элементы.ИзменитьРеквизиты.Доступность = Истина; + КонецЕсли; +КонецПроцедуры + +&НаКлиенте +Процедура ГрупповоеИзменениеРеквизитов(Команда) + + Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.ГрупповоеИзменениеОбъектов") Тогда + Если ТаблицаОтчет.ТекущаяОбласть.Верх = 1 Тогда + ВерхняяПозиция = 2; + Иначе + ВерхняяПозиция = ТаблицаОтчет.ТекущаяОбласть.Верх; + КонецЕсли; + МассивСсылок = ГрупповоеИзменениеРеквизитовНаСервере(ВерхняяПозиция, ТаблицаОтчет.ТекущаяОбласть.Низ); + Если массивСсылок.Количество() > 0 Тогда + ПараметрыФормы = Новый Структура("МассивОбъектов", МассивСсылок); + ИмяОбъекта = "Обработка."; + ОткрытьФорму(ИмяОбъекта + "ГрупповоеИзменениеРеквизитов.Форма", ПараметрыФормы); + КонецЕсли; + КонецЕсли; + +КонецПроцедуры + +#КонецОбласти + diff --git a/SSL/src/DataProcessors/ЗагрузкаДанныхИзФайла/Forms/РазрешенияНеоднозначностей/Form.form b/SSL/src/DataProcessors/ЗагрузкаДанныхИзФайла/Forms/РазрешенияНеоднозначностей/Form.form index a11b245f7..b0054dc18 100644 --- a/SSL/src/DataProcessors/ЗагрузкаДанныхИзФайла/Forms/РазрешенияНеоднозначностей/Form.form +++ b/SSL/src/DataProcessors/ЗагрузкаДанныхИзФайла/Forms/РазрешенияНеоднозначностей/Form.form @@ -1166,7 +1166,7 @@ Выбрать - Auto + DontUse Auto @@ -1188,7 +1188,7 @@ НовыйЭлемент - Auto + DontUse Auto @@ -1205,7 +1205,7 @@ true - Auto + DontUse Auto diff --git a/SSL/src/DataProcessors/ЗагрузкаДанныхИзФайла/Forms/РазрешенияНеоднозначностей/Module.bsl b/SSL/src/DataProcessors/ЗагрузкаДанныхИзФайла/Forms/РазрешенияНеоднозначностей/Module.bsl index 8bbdf64ad..e7c8fc11f 100644 --- a/SSL/src/DataProcessors/ЗагрузкаДанныхИзФайла/Forms/РазрешенияНеоднозначностей/Module.bsl +++ b/SSL/src/DataProcessors/ЗагрузкаДанныхИзФайла/Forms/РазрешенияНеоднозначностей/Module.bsl @@ -22,12 +22,7 @@ Возврат; КонецЕсли; - Попытка - МенеджерОбъекта.ЗаполнитьСписокНеоднозначностей(Параметры.ПолноеИмяТабличнойЧасти, СписокНеоднозначностей, Параметры.Имя, Параметры.ЗначенияЗагружаемыхКолонок, Параметры.ДополнительныеПараметры); - Исключение - // Используется старый вариант метода ЗаполнитьСписокНеоднозначностей без параметра ДополнительныеПараметры. - МенеджерОбъекта.ЗаполнитьСписокНеоднозначностей(Параметры.ПолноеИмяТабличнойЧасти, СписокНеоднозначностей, Параметры.Имя, Параметры.ЗначенияЗагружаемыхКолонок); - КонецПопытки; + МенеджерОбъекта.ЗаполнитьСписокНеоднозначностей(Параметры.ПолноеИмяТабличнойЧасти, СписокНеоднозначностей, Параметры.Имя, Параметры.ЗначенияЗагружаемыхКолонок, Параметры.ДополнительныеПараметры); Элементы.ВариантРазрешенияНеоднозначности.Видимость = Ложь; Элементы.ДекорацияЗаголовок.Заголовок = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(Элементы.ДекорацияЗаголовок.Заголовок, Параметры.Имя); @@ -141,7 +136,7 @@ СтрокаСоЗначениями = Лев(СтрокаСоЗначениями, 70) + "..."; КонецЕсли; Элементы.ДекорацияЗаголовокПоискСсылок.Заголовок = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(Элементы.ДекорацияЗаголовокПоискСсылок.Заголовок, - СтрокаСоЗначениями); + СтрокаСоЗначениями); Иначе КоличествоСвернутыхЭлементов = 0; Для каждого Элемент Из Параметры.СтрокаИзТаблицы Цикл diff --git a/SSL/src/DataProcessors/ЗагрузкаДанныхИзФайла/Forms/РасширениеФайла/Form.form b/SSL/src/DataProcessors/ЗагрузкаДанныхИзФайла/Forms/РасширениеФайла/Form.form index 6a26c94b6..ede67aa5b 100644 --- a/SSL/src/DataProcessors/ЗагрузкаДанныхИзФайла/Forms/РасширениеФайла/Form.form +++ b/SSL/src/DataProcessors/ЗагрузкаДанныхИзФайла/Forms/РасширениеФайла/Form.form @@ -205,7 +205,7 @@ Выбрать - Auto + DontUse Auto @@ -227,7 +227,7 @@ УстановитьДополнениеДляОблегченияРаботыСФайлами - Auto + DontUse Auto diff --git a/SSL/src/DataProcessors/ЗагрузкаДанныхИзФайла/Forms/РедактированиеБланка/Form.form b/SSL/src/DataProcessors/ЗагрузкаДанныхИзФайла/Forms/РедактированиеБланка/Form.form index 96e681b71..935295be9 100644 --- a/SSL/src/DataProcessors/ЗагрузкаДанныхИзФайла/Forms/РедактированиеБланка/Form.form +++ b/SSL/src/DataProcessors/ЗагрузкаДанныхИзФайла/Forms/РедактированиеБланка/Form.form @@ -830,7 +830,7 @@ ОК - Auto + DontUse Auto @@ -855,7 +855,7 @@ УстановитьФлажки - Auto + DontUse Auto @@ -880,7 +880,7 @@ СнятьФлажки - Auto + DontUse Auto @@ -902,7 +902,7 @@ СброситьНастройки - Auto + DontUse Auto diff --git a/SSL/src/DataProcessors/ЗагрузкаДанныхИзФайла/ManagerModule.bsl b/SSL/src/DataProcessors/ЗагрузкаДанныхИзФайла/ManagerModule.bsl index 534b501ba..c47ecc1a5 100644 --- a/SSL/src/DataProcessors/ЗагрузкаДанныхИзФайла/ManagerModule.bsl +++ b/SSL/src/DataProcessors/ЗагрузкаДанныхИзФайла/ManagerModule.bsl @@ -189,9 +189,9 @@ Функция СправочникСодержитРеквизитИсключение(Справочник) Для каждого Реквизит Из Справочник.ТабличныеЧасти Цикл - Если Реквизит.Имя <> "КонтактнаяИнформация" И - Реквизит.Имя <> "ДополнительныеРеквизиты" И - Реквизит.Имя <> "СертификатыШифрования" Тогда + Если Реквизит.Имя <> "КонтактнаяИнформация" + И Реквизит.Имя <> "ДополнительныеРеквизиты" + И Реквизит.Имя <> "СертификатыШифрования" Тогда Возврат Истина; КонецЕсли; КонецЦикла; @@ -221,18 +221,20 @@ Для каждого Тип Из ОписаниеТипов.Типы() Цикл ОбъектМетаданных = Метаданные.НайтиПоТипу(Тип); - СтруктураОбъекта = РазложитьПолноеИмяОбъекта(ОбъектМетаданных.ПолноеИмя()); - - Для каждого Колонка Из ОбъектМетаданных.ВводПоСтроке Цикл - Если СоответствиеКолонок.Получить(Колонка.Имя) = Неопределено Тогда - - ЗаголовокКолонки = ЗаголовокКолонки + Разделитель +Колонка.Имя; - Разделитель = ", "; - СоответствиеКолонок.Вставить(Колонка.Имя, Колонка.Имя); + Если ОбъектМетаданных <> Неопределено Тогда + СтруктураОбъекта = РазложитьПолноеИмяОбъекта(ОбъектМетаданных.ПолноеИмя()); + + Для каждого Колонка Из ОбъектМетаданных.ВводПоСтроке Цикл + Если СоответствиеКолонок.Получить(Колонка.Имя) = Неопределено Тогда + + ЗаголовокКолонки = ЗаголовокКолонки + Разделитель +Колонка.Имя; + Разделитель = ", "; + СоответствиеКолонок.Вставить(Колонка.Имя, Колонка.Имя); + КонецЕсли; + КонецЦикла; + Если СтруктураОбъекта.ТипОбъекта = "Документ" Тогда + ЗаголовокКолонки = ЗаголовокКолонки + Разделитель + "Представление"; КонецЕсли; - КонецЦикла; - Если СтруктураОбъекта.ТипОбъекта = "Документ" Тогда - ЗаголовокКолонки = ЗаголовокКолонки + Разделитель + "Представление"; КонецЕсли; ЗаголовокКолонки = НСтр("ru = 'Введенные данные'"); @@ -254,18 +256,20 @@ ТекстЗапроса = ""; Для каждого Тип Из Типы Цикл ОбъектМетаданных = Метаданные.НайтиПоТипу(Тип); - СтруктураОбъекта = РазложитьПолноеИмяОбъекта(ОбъектМетаданных.ПолноеИмя()); - - МассивКолонок = Новый Массив; - Для каждого Поле Из ОбъектМетаданных.ВводПоСтроке Цикл - МассивКолонок.Добавить(Поле.Имя); - КонецЦикла; - Если СтруктураОбъекта.ТипОбъекта = "Документ" Тогда - МассивКолонок.Добавить("Ссылка"); + Если ОбъектМетаданных <> Неопределено И ПравоДоступа("Чтение", ОбъектМетаданных) Тогда + СтруктураОбъекта = РазложитьПолноеИмяОбъекта(ОбъектМетаданных.ПолноеИмя()); + + МассивКолонок = Новый Массив; + Для каждого Поле Из ОбъектМетаданных.ВводПоСтроке Цикл + МассивКолонок.Добавить(Поле.Имя); + КонецЦикла; + Если СтруктураОбъекта.ТипОбъекта = "Документ" Тогда + МассивКолонок.Добавить("Ссылка"); + КонецЕсли; + + ТекстЗапроса = СтрокаЗапроса(ТекстЗапроса, СтруктураОбъекта.ТипОбъекта, + СтруктураОбъекта.НазваниеОбъекта, МассивКолонок); КонецЕсли; - - ТекстЗапроса = СтрокаЗапроса(ТекстЗапроса, СтруктураОбъекта.ТипОбъекта, - СтруктураОбъекта.НазваниеОбъекта, МассивКолонок); КонецЦикла; Для каждого Строка Из ТаблицаСопоставления Цикл @@ -298,8 +302,11 @@ // Функция ДокументПоПредставлению(Представление, Типы) - Для каждого Тип Из Типы Цикл + Для каждого Тип Из Типы Цикл ОбъектМетаданных = Метаданные.НайтиПоТипу(Тип); + Если ОбъектМетаданных = Неопределено Тогда + Продолжить; + КонецЕсли; СтруктураИмениОбъекта = РазложитьПолноеИмяОбъекта(ОбъектМетаданных.ПолноеИмя()); Если СтруктураИмениОбъекта.ТипОбъекта <> "Документ" Тогда Продолжить; @@ -316,23 +323,41 @@ ПредставлениеЭлемента = ОбъектМетаданных.Представление(); КонецЕсли; - Если Найти(Представление, ПредставлениеЭлемента) > 0 Тогда + Если СтрНайти(Представление, ПредставлениеЭлемента) > 0 Тогда ПредставлениеНомерИДата = СокрЛП(Сред(Представление, СтрДлина(ПредставлениеЭлемента) + 1)); - ПозицияОкончанияНомера = Найти(ПредставлениеНомерИДата, " "); + ПозицияОкончанияНомера = СтрНайти(ПредставлениеНомерИДата, " "); Номер = Лев(ПредставлениеНомерИДата, ПозицияОкончанияНомера - 1); - ПозицияОт = Найти(НРег(ПредставлениеНомерИДата), "от"); + ПозицияОт = СтрНайти(НРег(ПредставлениеНомерИДата), "от"); ПредставлениеДата = СокрЛ(Сред(ПредставлениеНомерИДата, ПозицияОт + 2)); - ПозицияОкончаниеДаты = Найти(ПредставлениеДата, " "); + ПозицияОкончаниеДаты = СтрНайти(ПредставлениеДата, " "); ДатаОкругленнаяДоДня = Лев(ПредставлениеДата, ПозицияОкончаниеДаты - 1) + " 00:00:00"; НомерДокумент = Номер; - ДатаДокумента = ПреобразоватьВДату(ДатаОкругленнаяДоДня); + ДатаДокумента = СтроковыеФункцииКлиентСервер.СтрокаВДату(ДатаОкругленнаяДоДня); КонецЕсли; - Документ = Документы[ОбъектМетаданных.Имя].НайтиПоНомеру(НомерДокумент, ДатаДокумента); - Если НЕ (Документ = Неопределено ИЛИ Документ = Документы[ОбъектМетаданных.Имя].ПустаяСсылка()) Тогда + УстановитьПривилегированныйРежим(Истина); + Документ = Документы[ОбъектМетаданных.Имя].НайтиПоНомеру(НомерДокумент, ДатаДокумента); + УстановитьПривилегированныйРежим(Ложь); + + Если Документ = Неопределено ИЛИ Документ = Документы[ОбъектМетаданных.Имя].ПустаяСсылка() Тогда + Возврат Неопределено; + КонецЕсли; + + Запрос = Новый Запрос; // Проверка доступности документа с учетом RLS + Запрос.Текст = + "ВЫБРАТЬ РАЗРЕШЕННЫЕ + | ДокументДляПроверки.Ссылка + |ИЗ + | Документ." + ОбъектМетаданных.Имя + " КАК ДокументДляПроверки + |ГДЕ + | ДокументДляПроверки.Ссылка = &Ссылка"; + + Запрос.УстановитьПараметр("Ссылка", Документ.Ссылка); + РезультатЗапроса = Запрос.Выполнить().Выбрать(); + + Если РезультатЗапроса.Следующий() Тогда Возврат Документ; КонецЕсли; - КонецЦикла; Возврат Неопределено; @@ -349,7 +374,8 @@ РазделительГде = " ИЛИ "; КонецЦикла; - ТекстШаблон = "ВЫБРАТЬ %1.Ссылка КАК СсылкаНаОбъект ИЗ %2.%1 КАК %1 ГДЕ " + ТекстГде; + ТекстРазрешенные = ?(ПустаяСтрока(ТекстЗапроса), "РАЗРЕШЕННЫЕ ", ""); + ТекстШаблон = "ВЫБРАТЬ " + ТекстРазрешенные + "%1.Ссылка КАК СсылкаНаОбъект ИЗ %2.%1 КАК %1 ГДЕ " + ТекстГде; Если ЗначениеЗаполнено(ТекстЗапроса) Тогда ТекстОбъединитьВсе = Символы.ПС + "ОБЪЕДИНИТЬ ВСЕ" + Символы.ПС; Иначе @@ -578,10 +604,9 @@ Если Реквизит.Тип.СодержитТип(Тип("Булево")) Тогда ОписаниеТипаКолонки = НСтр("ru = 'Флаг, Да или 1 / Нет или 0'"); ИначеЕсли Реквизит.Тип.СодержитТип(Тип("Число")) Тогда - ОписаниеТипаКолонки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Число, Длина: %1, Точность: %2'"), - Строка(Реквизит.Тип.КвалификаторыЧисла.Разрядность), - Строка(Реквизит.Тип.КвалификаторыЧисла.РазрядностьДробнойЧасти)); + ОписаниеТипаКолонки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Число, Длина: %1, Точность: %2'"), + Строка(Реквизит.Тип.КвалификаторыЧисла.Разрядность), + Строка(Реквизит.Тип.КвалификаторыЧисла.РазрядностьДробнойЧасти)); ИначеЕсли Реквизит.Тип.СодержитТип(Тип("Строка")) Тогда Если Реквизит.Тип.КвалификаторыСтроки.Длина > 0 Тогда ДлинаСтроки = Строка(Реквизит.Тип.КвалификаторыСтроки.Длина); @@ -590,9 +615,8 @@ ОписаниеТипаКолонки = НСтр("ru = 'Строка неограниченной длины'"); КонецЕсли; ИначеЕсли Реквизит.Тип.СодержитТип(Тип("Дата")) Тогда - ОписаниеТипаКолонки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = '%1'"),Строка(Реквизит.Тип.КвалификаторыДаты.ЧастиДаты)); - ИначеЕсли Реквизит.Тип.СодержитТип(Тип("УникальныйИдентификатор")) Тогда + ОписаниеТипаКолонки = Строка(Реквизит.Тип.КвалификаторыДаты.ЧастиДаты); + ИначеЕсли Реквизит.Тип.СодержитТип(Тип("УникальныйИдентификатор")) Тогда ОписаниеТипаКолонки = НСтр("ru = 'УникальныйИдентификатор'"); КонецЕсли; @@ -628,7 +652,7 @@ ШиринаКолонки = 11; Если ТипДанных = Тип("Строка") Тогда - ПредставлениеТипа = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Строка (не более %1 символов)"), ОписаниеТипа.КвалификаторыСтроки.Длина); + ПредставлениеТипа = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Строка (не более %1 символов)'"), ОписаниеТипа.КвалификаторыСтроки.Длина); ШиринаКолонки = ?(ОписаниеТипа.КвалификаторыСтроки.Длина < 30, ОписаниеТипа.КвалификаторыСтроки.Длина + 1, 30); ИначеЕсли ТипДанных = Тип("Число") Тогда ПредставлениеТипа = НСтр("ru = 'Число'"); @@ -737,7 +761,7 @@ ВыборочноеДобавление = Ложь; Если ЗначениеЗаполнено(ИменаДобавляемыхКолонок) Тогда ВыборочноеДобавление = Истина; - МассивДобавляемыхКолонок = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивСлов(ИменаДобавляемыхКолонок, ","); + МассивДобавляемыхКолонок = СтрРазделить(ИменаДобавляемыхКолонок, ",", Ложь); Позиция = ИнформацияПоКолонкам.Количество() + 1; Иначе ИнформацияПоКолонкам.Очистить(); @@ -755,7 +779,7 @@ Для НомерКолонки = 1 По ОбластьЗаголовокТаблицы.ШиринаТаблицы Цикл Ячейка = ОбластьЗаголовокТаблицы.ПолучитьОбласть(1, НомерКолонки, 1, НомерКолонки).ТекущаяОбласть; - Если Найти(Ячейка.Имя, "R") > 0 И Найти(Ячейка.Имя, "C") > 0 Тогда + Если СтрНайти(Ячейка.Имя, "R") > 0 И СтрНайти(Ячейка.Имя, "C") > 0 Тогда ИмяРеквизита = ?(ЗначениеЗаполнено(Ячейка.ПараметрРасшифровки), Ячейка.ПараметрРасшифровки, Ячейка.Текст); ПредставлениеРеквизита = ?(ЗначениеЗаполнено(Ячейка.Текст), Ячейка.Текст, Ячейка.ПараметрРасшифровки); Ассоциация = ?(ЗначениеЗаполнено(Ячейка.ПараметрРасшифровки), Ячейка.ПараметрРасшифровки, Ячейка.Текст); @@ -915,7 +939,7 @@ // Создает шапку бланка по информации о колонках. // -Функция ШапкаБланкаДляЗаполненияПоИнформацииПоКолонкам(ИнформацияПоКолонкам, СПримечаниями = Истина) Экспорт +Функция ШапкаБланкаДляЗаполненияПоИнформацииПоКолонкам(ИнформацияПоКолонкам) Экспорт ТабличныйДокумент = Новый ТабличныйДокумент; @@ -929,6 +953,7 @@ Если Колонка.Видимость = Истина Тогда ОбластьЗаголовок.ТекущаяОбласть.Имя = Колонка.ИмяКолонки; ОбластьЗаголовок.ТекущаяОбласть.Расшифровка = Колонка.Ассоциация; + ОбластьЗаголовок.ТекущаяОбласть.Примечание.Текст = Колонка.Примечание; Если ЗначениеЗаполнено(Колонка.Синоним) Тогда ОбластьЗаголовок.Параметры.Заголовок = Колонка.Синоним; Иначе @@ -944,9 +969,6 @@ Иначе ОбластьЗаголовок.ТекущаяОбласть.ШиринаКолонки = Колонка.Ширина; КонецЕсли; - Если СПримечаниями Тогда - ОбластьЗаголовок.ТекущаяОбласть.Примечание.Текст = Колонка.Примечание; - КонецЕсли; ТабличныйДокумент.Присоединить(ОбластьЗаголовок); КонецЕсли; КонецЦикла; @@ -974,6 +996,19 @@ КорректировкаИдентификатора = 0; + Для каждого Строка Из ИнформацияПоКолонкам Цикл + Строка.Позиция = -1; + КонецЦикла; + + Для НомерКолонки = 1 По ШаблонСДанными.ШиринаТаблицы Цикл + ЯчейкаЗаголовок = ШаблонСДанными.ПолучитьОбласть(1, НомерКолонки, 1, НомерКолонки).ТекущаяОбласть; + Отбор = Новый Структура("ПредставлениеКолонки", ЯчейкаЗаголовок.Текст); + НайденныеКолонки = ИнформацияПоКолонкам.НайтиСтроки(Отбор); + Если НайденныеКолонки.Количество() > 0 Тогда + НайденныеКолонки[0].Позиция = НомерКолонки; + КонецЕсли; + КонецЦикла; + Для НомерСтроки = 2 По ШаблонСДанными.ВысотаТаблицы Цикл СтрокаТаблицыПустая = Истина; НоваяСтрока = ЗагружаемыеДанные.Добавить(); @@ -1016,7 +1051,7 @@ Для Индекс= 1 По ДанныеИзФайла.Количество() - 1 Цикл СтрокаТЗ = ДанныеИзФайла.Получить(Индекс); - + НоваяСтрока = Истина; Для НомерКолонки =1 По ШаблонСДанными.ШиринаТаблицы Цикл КолонкаВТаблице = СоответствиеКолонок.Получить(НомерКолонки); Колонка = ИнформацияПоКолонкам.Найти(НомерКолонки, "Позиция"); @@ -1030,33 +1065,18 @@ Иначе Ячейка.ТекущаяОбласть.Текст = ""; КонецЕсли; - Если НомерКолонки = 1 Тогда + Если НоваяСтрока Тогда ШаблонСДанными.Вывести(Ячейка); + НоваяСтрока = Ложь; Иначе ШаблонСДанными.Присоединить(Ячейка); КонецЕсли; КонецЦикла; КонецЦикла; + КонецПроцедуры -///////////////// Общего назначения /////////////////////////// - -Функция ПреобразоватьВДату(Знач ДатаСтрока) - - ДатаСтрока = СокрЛП(СтрЗаменить(ДатаСтрока, ".", "")); - ДатаСтрока = Сред(ДатаСтрока, 5) + Сред(ДатаСтрока, 3, 2) + Лев(ДатаСтрока, 2); - Если СтрДлина(ДатаСтрока) = 6 Тогда - ДатаСтрока = "20" + ДатаСтрока; - КонецЕсли; - - ОписаниеТипа = Новый ОписаниеТипов("Дата"); - Результат = ОписаниеТипа.ПривестиЗначение(ДатаСтрока); - - Возврат Результат; - -КонецФункции - Функция НайтиИнформациюОКолонке(ТаблицаИнформацияПоКолонкам, ИмяКолонки, Значение) Отбор = Новый Структура(ИмяКолонки, Значение); @@ -1071,7 +1091,7 @@ Функция ПолноеИмяОбъектаТабличнаяЧасть(ИмяОбъекта) Экспорт - Результат = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(ИмяОбъекта,"."); + Результат = СтрРазделить(ИмяОбъекта, ".", Ложь); Если Результат.Количество() = 4 Тогда Объект = Метаданные.НайтиПоПолномуИмени(ИмяОбъекта); Если Объект <> Неопределено Тогда @@ -1119,7 +1139,7 @@ Если ТипОбъектаМетаданных <> Неопределено Тогда ТипОбъектаМетаданных = "Справочник"; Иначе - ТипОбъектаМетаданных = Метаданные.Документы.Найти(НазваниеОбъектаМетаданных); + ТипОбъектаМетаданных = Метаданные.Документы.Найти(НазваниеОбъектаМетаданных); Если ТипОбъектаМетаданных <> Неопределено Тогда ТипОбъектаМетаданных = "Документ"; Иначе @@ -1128,7 +1148,7 @@ КонецЕсли; КонецЕсли; - Возврат Неопределено; + Возврат Неопределено; КонецФункции @@ -1140,7 +1160,7 @@ // * НазваниеОбъекта - Строка - Название объекта. // * ИмяТабличнойЧасти - Строка - Имя табличной части. Функция РазложитьПолноеИмяОбъекта(ПолноеИмяОбъекта) Экспорт - Результат = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(ПолноеИмяОбъекта, "."); + Результат = СтрРазделить(ПолноеИмяОбъекта, ".", Ложь); ИмяОбъекта = Новый Структура; ИмяОбъекта.Вставить("ПолноеИмяОбъекта", ПолноеИмяОбъекта); @@ -1150,14 +1170,15 @@ Если Результат.Количество() = 2 Тогда - Если Результат[0] = "Документ" ИЛИ Результат[0] = "Справочник" ИЛИ Результат[0] = "БизнесПроцесс" ИЛИ - Результат[0] = "Перечисление" ИЛИ Результат[0] = "ПланВидовХарактеристик" ИЛИ Результат[0] = "ПланСчетов" Тогда - ИмяОбъекта.ТипОбъекта = Результат[0]; - ИмяОбъекта.НазваниеОбъекта = Результат[1]; + Если Результат[0] = "Документ" ИЛИ Результат[0] = "Справочник" ИЛИ Результат[0] = "БизнесПроцесс" + ИЛИ Результат[0] = "Перечисление" ИЛИ Результат[0] = "ПланВидовХарактеристик" + ИЛИ Результат[0] = "ПланСчетов" Тогда + ИмяОбъекта.ТипОбъекта = Результат[0]; + ИмяОбъекта.НазваниеОбъекта = Результат[1]; Иначе - ИмяОбъекта.ТипОбъекта = ОпределитьТипОбъектаМетаданныхПоИмени(Результат[0]); - ИмяОбъекта.НазваниеОбъекта = Результат[0]; - ИмяОбъекта.ИмяТабличнойЧасти = Результат[1]; + ИмяОбъекта.ТипОбъекта = ОпределитьТипОбъектаМетаданныхПоИмени(Результат[0]); + ИмяОбъекта.НазваниеОбъекта = Результат[0]; + ИмяОбъекта.ИмяТабличнойЧасти = Результат[1]; КонецЕсли; ИначеЕсли Результат.Количество() = 3 Тогда ИмяОбъекта.ТипОбъекта = Результат[0]; @@ -1277,7 +1298,7 @@ Счетчик = МассивБукв.Количество(); Пока Счетчик > 0 Цикл Счетчик = Счетчик - 1; - Если Найти(Диапазон, МассивБукв[Счетчик]) > 0 Тогда + Если СтрНайти(Диапазон, МассивБукв[Счетчик]) > 0 Тогда Для Индекс = 0 По Счетчик Цикл Таблица.Колонки.Добавить(МассивБукв[Индекс]); КонецЦикла; @@ -1322,7 +1343,7 @@ ИмяФормата = СписокФорматов.Получить(СтрЗначение); Если ИмяФормата = "Дата" ИЛИ ИмяФормата = "ДатаВремя" ИЛИ ИмяФормата = "Время" Тогда Если ЗначениеЗаполнено(ЗначениеЯчейки) И НЕ ЯчейкаСодержитТекст Тогда - ПозицияРазделителя = Найти(ЗначениеЯчейки, "."); + ПозицияРазделителя = СтрНайти(ЗначениеЯчейки, "."); Если ПозицияРазделителя > 0 Тогда КоличествоДней = СтрокуВЧисло(Лев(ЗначениеЯчейки, ПозицияРазделителя - 1)) * 86400 - 2 * 86400; КоличествоСекунд = СтрокуВЧисло(Сред(ЗначениеЯчейки, ПозицияРазделителя + 1)) - 2 * 60; @@ -1361,7 +1382,7 @@ Счетчик = МассивБукв.Количество(); Пока Счетчик > 0 Цикл Счетчик = Счетчик - 1; - Если Найти(ИмяКолонки, МассивБукв[Счетчик])>0 Тогда + Если СтрНайти(ИмяКолонки, МассивБукв[Счетчик])>0 Тогда ИндексСтроки = Счетчик; Счетчик = 0; КонецЕсли; @@ -1542,7 +1563,7 @@ Иначе СтепеньЧисла = 0; - Позиция = Найти(Значение, "E"); + Позиция = СтрНайти(Значение, "E"); Если Позиция > 0 Тогда СтепеньЧисла = Сред(Значение, Позиция + 1); Значение = Лев(Значение, Позиция - 1); @@ -1585,7 +1606,7 @@ Возврат; КонецЕсли; - КолонкиШапки = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивСлов(Строка, ";"); + КолонкиШапки = СтрРазделить(Строка, ";", Ложь); Источник = Новый ТаблицаЗначений; ПозицияКолонкиВФайле = Новый Соответствие(); @@ -1612,7 +1633,7 @@ Пока Строка <> Неопределено Цикл НоваяСтрока = Источник.Добавить(); - Позиция = Найти(Строка, ";"); + Позиция = СтрНайти(Строка, ";"); Индекс = 0; Пока Позиция > 0 Цикл Если Источник.Колонки.Количество() < Индекс + 1 Тогда @@ -1623,7 +1644,7 @@ НоваяСтрока[ИмяКолонки] = Лев(Строка, Позиция - 1); КонецЕсли; Строка = Сред(Строка, Позиция + 1); - Позиция = Найти(Строка, ";"); + Позиция = СтрНайти(Строка, ";"); Индекс = Индекс + 1; КонецЦикла; Если Источник.Колонки.Количество() = Индекс + 1 Тогда @@ -1704,9 +1725,8 @@ ЭлементСправочника = СтрокаТаблицы.ОбъектСопоставления.ПолучитьОбъект(); СтрокаТаблицы.РезультатСопоставленияСтроки = "Обновлен"; Если ЭлементСправочника = Неопределено Тогда - ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Номенклатура с артикулом %1 не существует.'"), СтрокаТаблицы.Артикул); - ВызватьИсключение ТекстСообщения; + ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Номенклатура с артикулом %1 не существует.'"), + СтрокаТаблицы.Артикул); КонецЕсли; КонецЕсли; @@ -1896,10 +1916,9 @@ ДоступностьОбъектов = Новый Соответствие; Для Каждого ФункциональнаяОпция Из Метаданные.ФункциональныеОпции Цикл - Для Каждого Элемент Из ФункциональнаяОпция.Состав Цикл Если Элемент.Объект <> Неопределено Тогда - Если Найти(Элемент.Объект.ПолноеИмя(), ИмяОбъекта) > 0 Тогда + Если СтрНайти(Элемент.Объект.ПолноеИмя(), ИмяОбъекта) > 0 Тогда Значение = ПолучитьФункциональнуюОпцию(ФункциональнаяОпция.Имя, Параметры); Если Значение = Истина Тогда ДоступностьОбъектов.Вставить(Элемент.Объект, Истина); diff --git a/SSL/src/DataProcessors/ЗагрузкаДанныхИзФайла/ЗагрузкаДанныхИзФайла.mdo b/SSL/src/DataProcessors/ЗагрузкаДанныхИзФайла/ЗагрузкаДанныхИзФайла.mdo index 165ea9d93..f8cb598b9 100644 --- a/SSL/src/DataProcessors/ЗагрузкаДанныхИзФайла/ЗагрузкаДанныхИзФайла.mdo +++ b/SSL/src/DataProcessors/ЗагрузкаДанныхИзФайла/ЗагрузкаДанныхИзФайла.mdo @@ -37,7 +37,7 @@ РазрешенияНеоднозначностей ru - Разрешение неоднозначностей + Разрешения неоднозначностей PersonalComputer MobileDevice @@ -46,7 +46,7 @@ РасширениеФайла ru - Выбор формата файла + Расширение файла PersonalComputer MobileDevice diff --git a/SSL/src/DataProcessors/ЗагрузкаКурсовВалют/Forms/Форма/Form.form b/SSL/src/DataProcessors/ЗагрузкаКурсовВалют/Forms/Форма/Form.form index 683bbe5f4..69d5d7ecf 100644 --- a/SSL/src/DataProcessors/ЗагрузкаКурсовВалют/Forms/Форма/Form.form +++ b/SSL/src/DataProcessors/ЗагрузкаКурсовВалют/Forms/Форма/Form.form @@ -431,6 +431,10 @@ СписокВалютПредставление 38 + + <key>ru</key> + <value>Валюта</value> + true true @@ -918,7 +922,6 @@ true true true - UseIfNecessary auto true @@ -1007,7 +1010,7 @@ TextPicture - Auto + DontUse Auto @@ -1032,7 +1035,7 @@ ВыбратьВсеВалюты - Auto + DontUse Auto @@ -1057,7 +1060,7 @@ СнятьВыбор - Auto + DontUse Auto @@ -1083,7 +1086,7 @@ TextPicture - Auto + DontUse Auto diff --git a/SSL/src/DataProcessors/ЗагрузкаКурсовВалют/Forms/Форма/Module.bsl b/SSL/src/DataProcessors/ЗагрузкаКурсовВалют/Forms/Форма/Module.bsl index eea7b7978..e1886ea9a 100644 --- a/SSL/src/DataProcessors/ЗагрузкаКурсовВалют/Forms/Форма/Module.bsl +++ b/SSL/src/DataProcessors/ЗагрузкаКурсовВалют/Forms/Форма/Module.bsl @@ -243,9 +243,9 @@ Отбор = Новый Структура; Отбор.Вставить("РегламентноеЗадание", РегламентноеЗадание); Отбор.Вставить("Состояние", СостояниеФоновогоЗадания.Активно); - ФоновыеЗаданияОчистки = ФоновыеЗадания.ПолучитьФоновыеЗадания(Отбор); - Если ФоновыеЗаданияОчистки.Количество() > 0 Тогда - ИдентификаторФоновогоЗадания = ФоновыеЗаданияОчистки[0].УникальныйИдентификатор; + ФоновыеЗаданияЗагрузки = ФоновыеЗадания.ПолучитьФоновыеЗадания(Отбор); + Если ФоновыеЗаданияЗагрузки.Количество() > 0 Тогда + ИдентификаторФоновогоЗадания = ФоновыеЗаданияЗагрузки[0].УникальныйИдентификатор; Иначе АдресРезультата = ПоместитьВоВременноеХранилище(Неопределено, УникальныйИдентификатор); НаименованиеФоновогоЗадания = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Запуск вручную: %1'"), РегламентноеЗадание.Метаданные.Синоним); @@ -274,6 +274,8 @@ &НаКлиенте Процедура Подключаемый_ПроверитьВыполнениеЗагрузкиКурсов() + ПолучитьСообщенияПользователюИзФоновогоЗадания(); + Попытка ЗаданиеВыполнено = ЗаданиеВыполнено(ИдентификаторФоновогоЗадания); Исключение @@ -289,6 +291,26 @@ Иначе ПодключитьОбработчикОжидания("Подключаемый_ПроверитьВыполнениеЗагрузкиКурсов", 2, Истина); КонецЕсли; + +КонецПроцедуры + +&НаСервере +Процедура ПолучитьСообщенияПользователюИзФоновогоЗадания() + + Задание = ФоновыеЗадания.НайтиПоУникальномуИдентификатору(ИдентификаторФоновогоЗадания); + Если Задание = Неопределено Тогда + Возврат; + КонецЕсли; + + СообщенияПользователю = Задание.ПолучитьСообщенияПользователю(Истина); + Если Не ЗначениеЗаполнено(СообщенияПользователю) Тогда + Возврат; + КонецЕсли; + + Для Каждого Сообщение Из СообщенияПользователю Цикл + Сообщение.Сообщить(); + КонецЦикла; + КонецПроцедуры &НаКлиенте diff --git a/SSL/src/DataProcessors/ЗагрузкаКурсовВалют/ЗагрузкаКурсовВалют.mdo b/SSL/src/DataProcessors/ЗагрузкаКурсовВалют/ЗагрузкаКурсовВалют.mdo index c00b8b495..ddebb5ce1 100644 --- a/SSL/src/DataProcessors/ЗагрузкаКурсовВалют/ЗагрузкаКурсовВалют.mdo +++ b/SSL/src/DataProcessors/ЗагрузкаКурсовВалют/ЗагрузкаКурсовВалют.mdo @@ -206,7 +206,7 @@ Представление ru - Валюта + Представление String diff --git a/SSL/src/DataProcessors/ЗагрузкаПравилРегистрацииОбъектов/Forms/Форма/Form.form b/SSL/src/DataProcessors/ЗагрузкаПравилРегистрацииОбъектов/Forms/Форма/Form.form index 86dd669d3..e1c979f7d 100644 --- a/SSL/src/DataProcessors/ЗагрузкаПравилРегистрацииОбъектов/Forms/Форма/Form.form +++ b/SSL/src/DataProcessors/ЗагрузкаПравилРегистрацииОбъектов/Forms/Форма/Form.form @@ -18,7 +18,6 @@ true true true - UseIfNecessary auto true diff --git a/SSL/src/DataProcessors/ЗагрузкаПравилРегистрацииОбъектов/ObjectModule.bsl b/SSL/src/DataProcessors/ЗагрузкаПравилРегистрацииОбъектов/ObjectModule.bsl index 589888e1f..7a7fc17d2 100644 --- a/SSL/src/DataProcessors/ЗагрузкаПравилРегистрацииОбъектов/ObjectModule.bsl +++ b/SSL/src/DataProcessors/ЗагрузкаПравилРегистрацииОбъектов/ObjectModule.bsl @@ -97,8 +97,8 @@ СтрокаИнформации = НСтр("ru = 'Правила регистрации объектов этой информационной базы (%1) от %2'"); Возврат СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(СтрокаИнформации, - ПолучитьПредставлениеКонфигурацииИзПравилРегистрации(), - Формат(Регистрация.ДатаВремяСоздания, "ДЛФ = дд")); + ПолучитьПредставлениеКонфигурацииИзПравилРегистрации(), + Формат(Регистрация.ДатаВремяСоздания, "ДЛФ = дд")); КонецФункции //////////////////////////////////////////////////////////////////////////////// @@ -442,11 +442,11 @@ ИмяТабличнойЧастиПланаОбмена = ""; - ПозСкобки1 = Найти(ПолноеНаименованиеСвойства, "["); + ПозСкобки1 = СтрНайти(ПолноеНаименованиеСвойства, "["); Если ПозСкобки1 <> 0 Тогда - ПозСкобки2 = Найти(ПолноеНаименованиеСвойства, "]"); + ПозСкобки2 = СтрНайти(ПолноеНаименованиеСвойства, "]"); ИмяТабличнойЧастиПланаОбмена = Сред(ПолноеНаименованиеСвойства, ПозСкобки1 + 1, ПозСкобки2 - ПозСкобки1 - 1); diff --git a/SSL/src/DataProcessors/ЗаменаИОбъединениеЭлементов/Forms/ЗаменаЭлементов/Form.form b/SSL/src/DataProcessors/ЗаменаИОбъединениеЭлементов/Forms/ЗаменаЭлементов/Form.form index 15a03d427..27682277e 100644 --- a/SSL/src/DataProcessors/ЗаменаИОбъединениеЭлементов/Forms/ЗаменаЭлементов/Form.form +++ b/SSL/src/DataProcessors/ЗаменаИОбъединениеЭлементов/Forms/ЗаменаЭлементов/Form.form @@ -330,6 +330,10 @@ 184 Left + + Selection + СписокВыбор + OnActivateRow СписокПриАктивизацииСтроки @@ -2131,7 +2135,7 @@ ШагМастераДалее - Auto + DontUse Auto @@ -2153,7 +2157,7 @@ ШагМастераНазад - Auto + DontUse Auto @@ -2175,7 +2179,7 @@ ШагМастераОтмена - Auto + DontUse Auto @@ -2200,7 +2204,7 @@ РазвернутьВсеНеудачныеЗамены - Auto + DontUse Auto @@ -2225,7 +2229,7 @@ СвернутьВсеНеудачныеЗамены - Auto + DontUse Auto @@ -2251,7 +2255,7 @@ ОткрытьЭлементНеудачнойЗамены - Auto + DontUse Auto diff --git a/SSL/src/DataProcessors/ЗаменаИОбъединениеЭлементов/Forms/ЗаменаЭлементов/Module.bsl b/SSL/src/DataProcessors/ЗаменаИОбъединениеЭлементов/Forms/ЗаменаЭлементов/Module.bsl index 12c25e866..2279d00e1 100644 --- a/SSL/src/DataProcessors/ЗаменаИОбъединениеЭлементов/Forms/ЗаменаЭлементов/Module.bsl +++ b/SSL/src/DataProcessors/ЗаменаИОбъединениеЭлементов/Forms/ЗаменаЭлементов/Module.bsl @@ -153,6 +153,12 @@ КонецПроцедуры +&НаКлиенте +Процедура СписокВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка) + СтандартнаяОбработка = Ложь; + ШагМастера("Далее"); +КонецПроцедуры + #КонецОбласти #Область ОбработчикиСобытийЭлементовТаблицыФормыНеудачныеЗамены @@ -257,7 +263,7 @@ ТекстПодсказки = НСтр("ru = 'Выбранный элемент будет заменен на ""%1"" |и помечен на удаление.'"); КонецЕсли; - + ТекстПодсказки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ТекстПодсказки, Контекст.ЦелевойЭлемент); Контекст.Элементы.ПодсказкаВыбораЦелевогоЭлемента.Заголовок = СтроковыеФункцииКлиентСервер.ФорматированнаяСтрока(ТекстПодсказки); @@ -276,8 +282,7 @@ |и помечен на удаление.'"); КонецЕсли; - ТекстПодсказки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ТекстПодсказки, - Количество, Контекст.ЦелевойЭлемент); + ТекстПодсказки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ТекстПодсказки, Количество, Контекст.ЦелевойЭлемент); Контекст.Элементы.ПодсказкаВыбораЦелевогоЭлемента.Заголовок = СтроковыеФункцииКлиентСервер.ФорматированнаяСтрока(ТекстПодсказки); КонецЕсли; @@ -368,7 +373,7 @@ СтрокаОшибки.Причина = НСтр("ru = 'Обнаружена данные, обработка которых не планировалась.'"); ИначеЕсли ТипОшибки = "ОшибкаБлокировки" Тогда - СтрокаОшибки.Причина = НСтр("ru = 'Данные заблокированы другим пользователем.'"); + СтрокаОшибки.Причина = НСтр("ru = 'Не удалось заблокировать данные.'"); ИначеЕсли ТипОшибки = "ДанныеИзменены" Тогда СтрокаОшибки.Причина = НСтр("ru = 'Данные изменены другим пользователем.'"); @@ -667,21 +672,19 @@ Возврат; ИначеЕсли ЗаменяемыеСсылки.Количество() = 1 И ТекущиеДанные.Ссылка = ЗаменяемыеСсылки.Получить(0).Ссылка Тогда - ПоказатьПредупреждение( , НСтр("ru = 'Нельзя заменять элемент сам на себя.'")); + ПоказатьПредупреждение(, НСтр("ru = 'Нельзя заменять элемент сам на себя.'")); Возврат; ИначеЕсли ЗначениеРеквизита(ТекущиеДанные, "ЭтоГруппа", Ложь) Тогда - ПоказатьПредупреждение( , НСтр("ru = 'Нельзя заменять элемент на группу.'")); + ПоказатьПредупреждение(, НСтр("ru = 'Нельзя заменять элемент на группу.'")); Возврат; КонецЕсли; ТекущийВладелец = ЗначениеРеквизита(ТекущиеДанные, "Владелец"); Если ТекущийВладелец <> ОбщийВладелецЗаменяемыхСсылок Тогда - ПоказатьПредупреждение( , СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Нельзя заменять на элемент, подчиненный другому владельцу. - |У выбранного элемента владелец ""%1"", а у заменяемого - ""%2"".'"), - ТекущийВладелец, ОбщийВладелецЗаменяемыхСсылок - )); + Текст = НСтр("ru = 'Нельзя заменять на элемент, подчиненный другому владельцу. + |У выбранного элемента владелец ""%1"", а у заменяемого - ""%2"".'"); + ПоказатьПредупреждение(, СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(Текст, ТекущийВладелец, ОбщийВладелецЗаменяемыхСсылок)); Возврат; ИначеЕсли Не ЗначениеРеквизита(ТекущиеДанные, "ПометкаУдаления", Ложь) Тогда @@ -692,10 +695,7 @@ КонецЕсли; // Попытка заменить на элемент, помеченный на удаление. - Текст = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Элемент %1 помечен на удаление. Продолжить?'"), - ТекущиеДанные.Ссылка - ); + Текст = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Элемент %1 помечен на удаление. Продолжить?'"), ТекущиеДанные.Ссылка); Описание = Новый ОписаниеОповещения("ПодтверждениеВыбораЦелевогоЭлемента", ЭтотОбъект, Новый Структура); Описание.ДополнительныеПараметры.Вставить("ПараметрыШага", ПараметрыШага); @@ -1046,12 +1046,8 @@ Попытка Тест = Новый ОписаниеОповещения(ИмяОбработчика, ЭтотОбъект); Исключение - Текст = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Ошибка создания обработчика события %1 для страницы %2, не определена процедура %3'"), - ИмяДействия, - ОписаниеШага.Страница, - ИмяОбработчика - ); + Текст = НСтр("ru = 'Ошибка создания обработчика события %1 для страницы %2, не определена процедура %3'"); + Текст = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(Текст, ИмяДействия, ОписаниеШага.Страница, ИмяОбработчика); ВызватьИсключение Текст; КонецПопытки; КонецЕсли; @@ -1124,10 +1120,7 @@ Процедура ПерейтиНаШагМастера(Знач ИдентификаторШага, Знач ИнициироватьСобытия = Ложь) СледующийШаг = НомерШагаМастераПоИдентификатору(ИдентификаторШага); Если СледующийШаг = Неопределено Тогда - Ошибка = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Не найден шаг помощника %1'"), - ИдентификаторШага - ); + Ошибка = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Не найден шаг помощника %1'"), ИдентификаторШага); ВызватьИсключение Ошибка; КонецЕсли; @@ -1245,7 +1238,7 @@ КонецЕсли; КонецЦикла; - ВызватьИсключение СтрЗаменить(НСтр("ru = 'Не найден шаг ""%1"".'"), "%1", ИмяПоиска); + ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Не найден шаг ""%1"".'"), ИмяПоиска); КонецФункции // Возвращает флаг отмены diff --git a/SSL/src/DataProcessors/ЗаменаИОбъединениеЭлементов/Forms/МногострочноеПредупреждение/Form.form b/SSL/src/DataProcessors/ЗаменаИОбъединениеЭлементов/Forms/МногострочноеПредупреждение/Form.form index 944cc97f8..5152d96b2 100644 --- a/SSL/src/DataProcessors/ЗаменаИОбъединениеЭлементов/Forms/МногострочноеПредупреждение/Form.form +++ b/SSL/src/DataProcessors/ЗаменаИОбъединениеЭлементов/Forms/МногострочноеПредупреждение/Form.form @@ -276,7 +276,6 @@ Vertical true true - UseIfNecessary auto true @@ -312,7 +311,7 @@ КомандаОК - Auto + DontUse Auto diff --git a/SSL/src/DataProcessors/ЗаменаИОбъединениеЭлементов/Forms/ОбъединениеЭлементов/Form.form b/SSL/src/DataProcessors/ЗаменаИОбъединениеЭлементов/Forms/ОбъединениеЭлементов/Form.form index c09c7099d..05f5f232e 100644 --- a/SSL/src/DataProcessors/ЗаменаИОбъединениеЭлементов/Forms/ОбъединениеЭлементов/Form.form +++ b/SSL/src/DataProcessors/ЗаменаИОбъединениеЭлементов/Forms/ОбъединениеЭлементов/Form.form @@ -2950,7 +2950,7 @@ TextPicture - Auto + DontUse Auto @@ -2972,7 +2972,7 @@ ВсеМестаИспользования - Auto + DontUse Auto @@ -2994,7 +2994,7 @@ ШагМастераДалее - Auto + DontUse Auto @@ -3016,7 +3016,7 @@ ШагМастераНазад - Auto + DontUse Auto @@ -3038,7 +3038,7 @@ ШагМастераОтмена - Auto + DontUse Auto @@ -3063,7 +3063,7 @@ РазвернутьВсеНеудачныеЗамены - Auto + DontUse Auto @@ -3088,7 +3088,7 @@ СвернутьВсеНеудачныеЗамены - Auto + DontUse Auto @@ -3114,7 +3114,7 @@ ОткрытьЭлементМестаИспользования - Auto + DontUse Auto @@ -3140,7 +3140,7 @@ ОткрытьЭлементНеудачнойЗамены - Auto + DontUse Auto @@ -3162,7 +3162,7 @@ МестаИспользования - Auto + DontUse Auto diff --git a/SSL/src/DataProcessors/ЗаменаИОбъединениеЭлементов/Forms/ОбъединениеЭлементов/Module.bsl b/SSL/src/DataProcessors/ЗаменаИОбъединениеЭлементов/Forms/ОбъединениеЭлементов/Module.bsl index f9a66bded..e494e6a55 100644 --- a/SSL/src/DataProcessors/ЗаменаИОбъединениеЭлементов/Forms/ОбъединениеЭлементов/Module.bsl +++ b/SSL/src/DataProcessors/ЗаменаИОбъединениеЭлементов/Forms/ОбъединениеЭлементов/Module.bsl @@ -290,53 +290,54 @@ ШрифтВажнойНадписи = Новый Шрифт("Arial", 10, Истина, Ложь, Ложь, Ложь, 100); КонецЕсли; - Инструкция = ПоискИУдалениеДублей.ИнструкцияУсловногоОформления(); - Условие = Новый Структура("Вид, Значение", "НеРавно", Новый ПолеКомпоновкиДанных("ОсновнойЭлемент")); + Инструкция = СтандартныеПодсистемыСервер.ИнструкцияУсловногоОформления(); + Поле = Новый ПолеКомпоновкиДанных("ОсновнойЭлемент"); // Для стандартов (запрещается конструктор внутри конструктора). + Условие = Новый Структура("Вид, Значение", "НеРавно", Поле); Инструкция.Отборы.Вставить("МестаИспользования.Ссылка", Условие); Инструкция.Поля = "МестаИспользованияОсновной"; Инструкция.Оформление.Вставить("Отображать", Ложь); - ПоискИУдалениеДублей.ДобавитьЭлементУсловногоОформления(ЭтотОбъект, Инструкция); + СтандартныеПодсистемыСервер.ДобавитьЭлементУсловногоОформления(ЭтотОбъект, Инструкция); - Инструкция = ПоискИУдалениеДублей.ИнструкцияУсловногоОформления(); + Инструкция = СтандартныеПодсистемыСервер.ИнструкцияУсловногоОформления(); Инструкция.Отборы.Вставить("МестаИспользования.Ссылка", Новый ПолеКомпоновкиДанных("ОсновнойЭлемент")); Инструкция.Поля = "МестаИспользованияСсылка, МестаИспользованияКод, МестаИспользованияМестИспользования"; Инструкция.Оформление.Вставить("Шрифт", ШрифтВажнойНадписи); - ПоискИУдалениеДублей.ДобавитьЭлементУсловногоОформления(ЭтотОбъект, Инструкция); + СтандартныеПодсистемыСервер.ДобавитьЭлементУсловногоОформления(ЭтотОбъект, Инструкция); - Инструкция = ПоискИУдалениеДублей.ИнструкцияУсловногоОформления(); + Инструкция = СтандартныеПодсистемыСервер.ИнструкцияУсловногоОформления(); Инструкция.Отборы.Вставить("МестаИспользования.МестИспользования", Новый Структура("Вид, Значение", "МеньшеИлиРавно", 0)); Инструкция.Поля = "МестаИспользованияНеИспользуется"; Инструкция.Оформление.Вставить("Видимость", Истина); Инструкция.Оформление.Вставить("Отображать", Истина); - ПоискИУдалениеДублей.ДобавитьЭлементУсловногоОформления(ЭтотОбъект, Инструкция); + СтандартныеПодсистемыСервер.ДобавитьЭлементУсловногоОформления(ЭтотОбъект, Инструкция); - Инструкция = ПоискИУдалениеДублей.ИнструкцияУсловногоОформления(); + Инструкция = СтандартныеПодсистемыСервер.ИнструкцияУсловногоОформления(); Инструкция.Отборы.Вставить("МестаИспользования.МестИспользования", Новый Структура("Вид, Значение", "Больше", 0)); Инструкция.Поля = "МестаИспользованияНеИспользуется"; Инструкция.Оформление.Вставить("Видимость", Ложь); Инструкция.Оформление.Вставить("Отображать", Ложь); - ПоискИУдалениеДублей.ДобавитьЭлементУсловногоОформления(ЭтотОбъект, Инструкция); + СтандартныеПодсистемыСервер.ДобавитьЭлементУсловногоОформления(ЭтотОбъект, Инструкция); - Инструкция = ПоискИУдалениеДублей.ИнструкцияУсловногоОформления(); + Инструкция = СтандартныеПодсистемыСервер.ИнструкцияУсловногоОформления(); Инструкция.Отборы.Вставить("МестаИспользования.МестИспользования", Новый Структура("Вид, Значение", "МеньшеИлиРавно", 0)); Инструкция.Поля = "МестаИспользованияМестИспользования"; Инструкция.Оформление.Вставить("Видимость", Ложь); Инструкция.Оформление.Вставить("Отображать", Ложь); - ПоискИУдалениеДублей.ДобавитьЭлементУсловногоОформления(ЭтотОбъект, Инструкция); + СтандартныеПодсистемыСервер.ДобавитьЭлементУсловногоОформления(ЭтотОбъект, Инструкция); - Инструкция = ПоискИУдалениеДублей.ИнструкцияУсловногоОформления(); + Инструкция = СтандартныеПодсистемыСервер.ИнструкцияУсловногоОформления(); Инструкция.Отборы.Вставить("НеудачныеЗамены.Код", Новый Структура("Вид, Значение", "НеЗаполнено")); Инструкция.Поля = "НеудачныеЗаменыКод"; Инструкция.Оформление.Вставить("Видимость", Ложь); Инструкция.Оформление.Вставить("Отображать", Ложь); - ПоискИУдалениеДублей.ДобавитьЭлементУсловногоОформления(ЭтотОбъект, Инструкция); + СтандартныеПодсистемыСервер.ДобавитьЭлементУсловногоОформления(ЭтотОбъект, Инструкция); - Инструкция = ПоискИУдалениеДублей.ИнструкцияУсловногоОформления(); + Инструкция = СтандартныеПодсистемыСервер.ИнструкцияУсловногоОформления(); Инструкция.Отборы.Вставить("МестаИспользования.МестИспользования", Новый Структура("Вид, Значение", "Больше", 0)); Инструкция.Поля = "МестаИспользованияМестИспользования"; Инструкция.Оформление.Вставить("Видимость", Истина); Инструкция.Оформление.Вставить("Отображать", Истина); - ПоискИУдалениеДублей.ДобавитьЭлементУсловногоОформления(ЭтотОбъект, Инструкция); + СтандартныеПодсистемыСервер.ДобавитьЭлементУсловногоОформления(ЭтотОбъект, Инструкция); КонецПроцедуры @@ -563,12 +564,8 @@ КонецЕсли; // Обновляем заголовки - Представление = ?(ОсновнойЭлемент=Неопределено, "", ОсновнойЭлемент.Метаданные().Представление()); - - ТекстЗаголовка = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Объединение элементов %1 в один'"), - Представление - ); + Представление = ?(ОсновнойЭлемент = Неопределено, "", ОсновнойЭлемент.Метаданные().Представление()); + ТекстЗаголовка = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Объединение элементов %1 в один'"), Представление); КонецПроцедуры &НаСервере @@ -604,7 +601,7 @@ СтрокаОшибки.Причина = НСтр("ru = 'Обнаружена данные, обработка которых не планировалась.'"); ИначеЕсли ТипОшибки = "ОшибкаБлокировки" Тогда - СтрокаОшибки.Причина = НСтр("ru = 'Данные заблокированы другим пользователем.'"); + СтрокаОшибки.Причина = НСтр("ru = 'Не удалось заблокировать данные.'"); ИначеЕсли ТипОшибки = "ДанныеИзменены" Тогда СтрокаОшибки.Причина = НСтр("ru = 'Данные изменены другим пользователем.'"); @@ -852,7 +849,8 @@ &НаКлиенте Процедура ШагПоискМестИспользованияПриАктивации(Знач Страница, Знач ДополнительныеПараметры) Экспорт - ФоновоеЗаданиеЗапустить("ОпределитьМестаИспользования"); + НастройкиПошаговогоМастера.ИмяПроцедуры = "ОпределитьМестаИспользования"; + ФоновоеЗаданиеЗапустить(); КонецПроцедуры &НаКлиенте @@ -900,7 +898,8 @@ &НаКлиенте Процедура ШагОбъединениеПриАктивации(Знач Страница, Знач ДополнительныеПараметры) Экспорт - ФоновоеЗаданиеЗапустить("ЗаменитьСсылки"); + НастройкиПошаговогоМастера.ИмяПроцедуры = "ЗаменитьСсылки"; + ФоновоеЗаданиеЗапустить(); КонецПроцедуры &НаКлиенте @@ -1186,12 +1185,8 @@ Попытка Тест = Новый ОписаниеОповещения(ИмяОбработчика, ЭтотОбъект); Исключение - Текст = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Ошибка создания обработчика события %1 для страницы %2, не определена процедура %3'"), - ИмяДействия, - ОписаниеШага.Страница, - ИмяОбработчика - ); + Текст = НСтр("ru = 'Ошибка создания обработчика события %1 для страницы %2, не определена процедура %3'"); + Текст = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(Текст, ИмяДействия, ОписаниеШага.Страница, ИмяОбработчика); ВызватьИсключение Текст; КонецПопытки; КонецЕсли; @@ -1267,10 +1262,7 @@ Процедура ПерейтиНаШагМастера(Знач ИдентификаторШага, Знач ИнициироватьСобытия = Ложь) СледующийШаг = НомерШагаМастераПоИдентификатору(ИдентификаторШага); Если СледующийШаг = Неопределено Тогда - Ошибка = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Не найден шаг помощника %1'"), - ИдентификаторШага - ); + Ошибка = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Не найден шаг помощника %1'"), ИдентификаторШага); ВызватьИсключение Ошибка; КонецЕсли; @@ -1388,7 +1380,7 @@ КонецЕсли; КонецЦикла; - ВызватьИсключение СтрЗаменить(НСтр("ru = 'Не найден шаг ""%1"".'"), "%1", ИмяПоиска); + ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Не найден шаг ""%1"".'"), ИмяПоиска); КонецФункции // Возвращает флаг отмены @@ -1495,19 +1487,19 @@ КонецФункции &НаСервере -Функция ФоновоеЗаданиеЗапустить(Знач ИмяПроцедуры) +Функция ФоновоеЗаданиеЗапустить() // Отмена предыдущего задания. ФоновоеЗаданиеОтменить(); // Определение параметров запуска. - ПолноеИмяМетода = "ПоискИУдалениеДублей." + ИмяПроцедуры; + ПолноеИмяМетода = "ПоискИУдалениеДублей." + НастройкиПошаговогоМастера.ИмяПроцедуры; - Если ИмяПроцедуры = "ОпределитьМестаИспользования" Тогда + Если НастройкиПошаговогоМастера.ИмяПроцедуры = "ОпределитьМестаИспользования" Тогда НаименованиеМетода = НСтр("ru = 'Поиск и удаление дублей: Определение мест использования'"); ПараметрыМетода = МассивСсылокИзНабора(МестаИспользования); - ИначеЕсли ИмяПроцедуры = "ЗаменитьСсылки" Тогда + ИначеЕсли НастройкиПошаговогоМастера.ИмяПроцедуры = "ЗаменитьСсылки" Тогда НаименованиеМетода = НСтр("ru = 'Поиск и удаление дублей: Объединение элементов'"); ПарыЗамен = Новый Соответствие; @@ -1545,14 +1537,12 @@ НастройкиПошаговогоМастера.ИнформацияОбОшибке = ПодробноеПредставлениеОшибки(ИнформацияОбОшибке); НастройкиПошаговогоМастера.ИдентификаторФоновогоЗадания = Неопределено; НастройкиПошаговогоМастера.АдресРезультатаФоновогоЗадания = Неопределено; - НастройкиПошаговогоМастера.ИмяПроцедуры = Неопределено; Возврат Ложь; КонецЕсли; НастройкиПошаговогоМастера.АдресРезультатаФоновогоЗадания = Задание.АдресХранилища; НастройкиПошаговогоМастера.ИдентификаторФоновогоЗадания = Задание.ИдентификаторЗадания; НастройкиПошаговогоМастера.ЗаданиеВыполнено = Задание.ЗаданиеВыполнено; - НастройкиПошаговогоМастера.ИмяПроцедуры = ИмяПроцедуры; Если НастройкиПошаговогоМастера.ЗаданиеВыполнено Тогда Возврат Ложь; @@ -1619,7 +1609,6 @@ НастройкиПошаговогоМастера.АдресРезультатаФоновогоЗадания = Неопределено; НастройкиПошаговогоМастера.ИнформацияОбОшибке = Неопределено; НастройкиПошаговогоМастера.ИдентификаторФоновогоЗадания = Неопределено; - НастройкиПошаговогоМастера.ИмяПроцедуры = Неопределено; КонецПроцедуры #КонецОбласти diff --git a/SSL/src/DataProcessors/ЗащитаПерсональныхДанных/Commands/ЗащитаПерсональныхДанных/CommandModule.bsl b/SSL/src/DataProcessors/ЗащитаПерсональныхДанных/Commands/ЗащитаПерсональныхДанных/CommandModule.bsl index 588bdbf4e..181ed16e2 100644 --- a/SSL/src/DataProcessors/ЗащитаПерсональныхДанных/Commands/ЗащитаПерсональныхДанных/CommandModule.bsl +++ b/SSL/src/DataProcessors/ЗащитаПерсональныхДанных/Commands/ЗащитаПерсональныхДанных/CommandModule.bsl @@ -1,5 +1,8 @@ +#Область ОбработчикиСобытий &НаКлиенте Процедура ОбработкаКоманды(ПараметрКоманды, ПараметрыВыполненияКоманды) ОткрытьФорму("Обработка.ЗащитаПерсональныхДанных.Форма",, ПараметрыВыполненияКоманды.Источник, ПараметрыВыполненияКоманды.Уникальность, ПараметрыВыполненияКоманды.Окно); КонецПроцедуры + +#КонецОбласти diff --git a/SSL/src/DataProcessors/ЗащитаПерсональныхДанных/Forms/Форма/Form.form b/SSL/src/DataProcessors/ЗащитаПерсональныхДанных/Forms/Форма/Form.form index dbf654ee4..e7a741c89 100644 --- a/SSL/src/DataProcessors/ЗащитаПерсональныхДанных/Forms/Форма/Form.form +++ b/SSL/src/DataProcessors/ЗащитаПерсональныхДанных/Forms/Форма/Form.form @@ -2705,7 +2705,7 @@ ПросмотрТекущегоСобытияВОтдельномОкне - Auto + DontUse Auto @@ -2730,7 +2730,7 @@ УстановитьИнтервалДатДляПросмотра - Auto + DontUse Auto @@ -2755,7 +2755,7 @@ УстановитьОтборПоЗначениюВТекущейКолонке - Auto + DontUse Auto @@ -2780,7 +2780,7 @@ ОтключитьОтбор - Auto + DontUse Auto @@ -2806,7 +2806,7 @@ ОбновитьТекущийСписок - Auto + DontUse Auto diff --git a/SSL/src/DataProcessors/ЗащитаПерсональныхДанных/Help/ru.html b/SSL/src/DataProcessors/ЗащитаПерсональныхДанных/Help/ru.html index f5d088307..40a724065 100644 --- a/SSL/src/DataProcessors/ЗащитаПерсональныхДанных/Help/ru.html +++ b/SSL/src/DataProcessors/ЗащитаПерсональныхДанных/Help/ru.html @@ -14,8 +14,8 @@

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

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

      Просмотр события

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

      • Для просмотра детальной информации о событии можно воспользоваться двойным щелчком мыши или кнопкой  Просмотр текущего события.
      • diff --git a/SSL/src/DataProcessors/ЗащитаПерсональныхДанных/ManagerModule.bsl b/SSL/src/DataProcessors/ЗащитаПерсональныхДанных/ManagerModule.bsl index 5d1df2347..6bc07d16a 100644 --- a/SSL/src/DataProcessors/ЗащитаПерсональныхДанных/ManagerModule.bsl +++ b/SSL/src/DataProcessors/ЗащитаПерсональныхДанных/ManagerModule.bsl @@ -24,7 +24,7 @@ Для Каждого ЭлементМассива Из СобытиеЖурнала.ПредставлениеМетаданных Цикл // Выбираем представление самого объекта без имени метаданных. - ЧастиПредставленияЭлемента = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(ЭлементМассива, "."); + ЧастиПредставленияЭлемента = СтрРазделить(ЭлементМассива, "."); Если ЧастиПредставленияЭлемента.Количество() < 2 Тогда ПредставлениеЭлемента = СокрЛП(ЧастиПредставленияЭлемента[0]); Иначе 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/ИнструкцияПоИспользованиюПроверкиКонтрагента/ИнструкцияПоИспользованиюПроверкиКонтрагента.mdo b/SSL/src/DataProcessors/ИнструкцияПоИспользованиюПроверкиКонтрагента/ИнструкцияПоИспользованиюПроверкиКонтрагента.mdo index 4fca07bed..3f51e3aa0 100644 --- a/SSL/src/DataProcessors/ИнструкцияПоИспользованиюПроверкиКонтрагента/ИнструкцияПоИспользованиюПроверкиКонтрагента.mdo +++ b/SSL/src/DataProcessors/ИнструкцияПоИспользованиюПроверкиКонтрагента/ИнструкцияПоИспользованиюПроверкиКонтрагента.mdo @@ -10,9 +10,9 @@ Инструкция по использованию проверки контрагента true - DataProcessor.ИнструкцияПоИспользованиюПроверкиКонтрагента.Form.ИнструкцияПоПроверкеКонтрагентов + DataProcessor.ИнструкцияПоИспользованиюПроверкиКонтрагента.Form.ИнструкцияПоИспользованиюСервиса - ИнструкцияПоПроверкеКонтрагентов + ИнструкцияПоИспользованиюСервиса ru Инструкция по использованию сервиса diff --git a/SSL/src/DataProcessors/ИнтерактивноеИзменениеВыгрузки/Forms/ВыборВидаОбъектаСоставаУзла/Form.form b/SSL/src/DataProcessors/ИнтерактивноеИзменениеВыгрузки/Forms/ВыборВидаОбъектаСоставаУзла/Form.form index 08f9ac9bf..58f84361e 100644 --- a/SSL/src/DataProcessors/ИнтерактивноеИзменениеВыгрузки/Forms/ВыборВидаОбъектаСоставаУзла/Form.form +++ b/SSL/src/DataProcessors/ИнтерактивноеИзменениеВыгрузки/Forms/ВыборВидаОбъектаСоставаУзла/Form.form @@ -308,7 +308,6 @@ true true true - UseIfNecessary auto true @@ -598,7 +597,7 @@ Подобрать - Auto + DontUse Auto @@ -620,7 +619,7 @@ ПодобратьИЗакрыть - Auto + DontUse Auto diff --git a/SSL/src/DataProcessors/ИнтерактивноеИзменениеВыгрузки/Forms/ОбщиеПараметрыСинхронизации/Form.form b/SSL/src/DataProcessors/ИнтерактивноеИзменениеВыгрузки/Forms/ОбщиеПараметрыСинхронизации/Form.form index d31855e30..4952ceae0 100644 --- a/SSL/src/DataProcessors/ИнтерактивноеИзменениеВыгрузки/Forms/ОбщиеПараметрыСинхронизации/Form.form +++ b/SSL/src/DataProcessors/ИнтерактивноеИзменениеВыгрузки/Forms/ОбщиеПараметрыСинхронизации/Form.form @@ -99,7 +99,6 @@ true true true - UseIfNecessary auto true diff --git a/SSL/src/DataProcessors/ИнтерактивноеИзменениеВыгрузки/Forms/РедактированиеПериодаИОтбора/Form.form b/SSL/src/DataProcessors/ИнтерактивноеИзменениеВыгрузки/Forms/РедактированиеПериодаИОтбора/Form.form index 5a3b6c344..f341f0636 100644 --- a/SSL/src/DataProcessors/ИнтерактивноеИзменениеВыгрузки/Forms/РедактированиеПериодаИОтбора/Form.form +++ b/SSL/src/DataProcessors/ИнтерактивноеИзменениеВыгрузки/Forms/РедактированиеПериодаИОтбора/Form.form @@ -386,7 +386,6 @@ true true true - UseIfNecessary auto true @@ -495,7 +494,7 @@ КомандаОК - Auto + DontUse Auto diff --git a/SSL/src/DataProcessors/ИнтерактивноеИзменениеВыгрузки/Forms/РедактированиеСоставаНастроек/Form.form b/SSL/src/DataProcessors/ИнтерактивноеИзменениеВыгрузки/Forms/РедактированиеСоставаНастроек/Form.form index f6b32294f..768e90579 100644 --- a/SSL/src/DataProcessors/ИнтерактивноеИзменениеВыгрузки/Forms/РедактированиеСоставаНастроек/Form.form +++ b/SSL/src/DataProcessors/ИнтерактивноеИзменениеВыгрузки/Forms/РедактированиеСоставаНастроек/Form.form @@ -354,7 +354,6 @@ true true true - UseIfNecessary auto true @@ -684,7 +683,7 @@ СохранитьНастройку - Auto + DontUse Auto @@ -706,7 +705,7 @@ ПроизвестиВыбор - Auto + DontUse Auto diff --git a/SSL/src/DataProcessors/ИнтерактивноеИзменениеВыгрузки/Forms/РедактированиеСоставаНастроек/Help/ru.html b/SSL/src/DataProcessors/ИнтерактивноеИзменениеВыгрузки/Forms/РедактированиеСоставаНастроек/Help/ru.html index afccdbb10..c344d0f34 100644 --- a/SSL/src/DataProcessors/ИнтерактивноеИзменениеВыгрузки/Forms/РедактированиеСоставаНастроек/Help/ru.html +++ b/SSL/src/DataProcessors/ИнтерактивноеИзменениеВыгрузки/Forms/РедактированиеСоставаНастроек/Help/ru.html @@ -6,4 +6,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 3c6066869..7ed133ed2 100644 --- a/SSL/src/DataProcessors/ИнтерактивноеИзменениеВыгрузки/Forms/СоставВыгрузки/Form.form +++ b/SSL/src/DataProcessors/ИнтерактивноеИзменениеВыгрузки/Forms/СоставВыгрузки/Form.form @@ -654,7 +654,7 @@ СформироватьОтчет - Auto + DontUse Auto @@ -679,7 +679,7 @@ НастройкиОтчета - Auto + DontUse Auto @@ -699,7 +699,7 @@ StdPicture.LoadReportSettings - Auto + DontUse Auto @@ -719,7 +719,7 @@ StdPicture.SaveReportSettings - Auto + DontUse Auto @@ -736,7 +736,7 @@ true - Auto + DontUse Auto diff --git a/SSL/src/DataProcessors/ИнтерактивноеИзменениеВыгрузки/Forms/СоставВыгрузки/Help/ru.html b/SSL/src/DataProcessors/ИнтерактивноеИзменениеВыгрузки/Forms/СоставВыгрузки/Help/ru.html index 26f7e0369..91a00479e 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/Форма/Form.form b/SSL/src/DataProcessors/ИнтерактивноеИзменениеВыгрузки/Forms/Форма/Form.form index e6f4495b7..abe602733 100644 --- a/SSL/src/DataProcessors/ИнтерактивноеИзменениеВыгрузки/Forms/Форма/Form.form +++ b/SSL/src/DataProcessors/ИнтерактивноеИзменениеВыгрузки/Forms/Форма/Form.form @@ -769,7 +769,6 @@ true true true - UseIfNecessary auto true @@ -1023,7 +1022,7 @@ СоставВыгрузки - Auto + DontUse Auto @@ -1048,7 +1047,7 @@ НастройкиОтборов - Auto + DontUse Auto @@ -1070,7 +1069,7 @@ ПоказатьТекстОбщихПараметров - Auto + DontUse Auto @@ -1092,7 +1091,7 @@ ПодтвердитьВыбор - Auto + DontUse Auto @@ -1114,7 +1113,7 @@ ОбновитьКоличество - Auto + DontUse Auto diff --git a/SSL/src/DataProcessors/ИнтерактивноеИзменениеВыгрузки/Forms/Форма/Module.bsl b/SSL/src/DataProcessors/ИнтерактивноеИзменениеВыгрузки/Forms/Форма/Module.bsl index fbb76f929..89139bcfd 100644 --- a/SSL/src/DataProcessors/ИнтерактивноеИзменениеВыгрузки/Forms/Форма/Module.bsl +++ b/SSL/src/DataProcessors/ИнтерактивноеИзменениеВыгрузки/Forms/Форма/Module.bsl @@ -209,12 +209,19 @@ ПоказатьВопрос(Оповещение, ТекстВопроса, РежимДиалогаВопрос.ДаНет, , , ТекстЗаголовка); ИначеЕсли ПредставлениеНастройки=1 Тогда - // Форма всех настроек - ОткрытьФорму(БазовоеИмяДляФормы + "Форма.РедактированиеСоставаНастроек", - Новый Структура("ЗакрыватьПриВыборе, ДействиеВыбора, Объект, ПредставлениеТекущейНастройки", - Истина, 3, - Объект, ПредставлениеТекущейНастройки - ), Элементы.ДополнительнаяРегистрация); + + // Форма всех настроек. + + ПараметрыФормыНастроек = Новый Структура; + ПараметрыФормыНастроек.Вставить("ЗакрыватьПриВыборе", Истина); + ПараметрыФормыНастроек.Вставить("ДействиеВыбора", 3); + ПараметрыФормыНастроек.Вставить("Объект", Объект); + ПараметрыФормыНастроек.Вставить("ПредставлениеТекущейНастройки", ПредставлениеТекущейНастройки); + + ИмяФормыНастроек = БазовоеИмяДляФормы + "Форма.РедактированиеСоставаНастроек"; + + ОткрытьФорму(ИмяФормыНастроек, ПараметрыФормыНастроек, Элементы.ДополнительнаяРегистрация); + КонецЕсли; КонецПроцедуры @@ -263,8 +270,7 @@ ТаблицаВМассивСтруктур( РеквизитФормыВЗначение("Объект.ДополнительнаяРегистрация")) ); Возврат Новый Структура("ДействиеВыбора, АдресОбъекта", - Параметры.ДействиеВыбора, ПоместитьВоВременноеХранилище(ОбъектРезультат, УникальныйИдентификатор) - ); + Параметры.ДействиеВыбора, ПоместитьВоВременноеХранилище(ОбъектРезультат, УникальныйИдентификатор)); КонецФункции &НаСервере diff --git a/SSL/src/DataProcessors/ИнтерактивноеИзменениеВыгрузки/Help/ru.html b/SSL/src/DataProcessors/ИнтерактивноеИзменениеВыгрузки/Help/ru.html index 5ebefff0b..cbadbbd4a 100644 --- a/SSL/src/DataProcessors/ИнтерактивноеИзменениеВыгрузки/Help/ru.html +++ b/SSL/src/DataProcessors/ИнтерактивноеИзменениеВыгрузки/Help/ru.html @@ -1,5 +1,5 @@ -

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

        +

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

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

        Отправляемые данные

        • Нажмите Подобрать, для того чтобы выбрать данные для отправки и заполнить список. Объекты программы для выбора выводятся в виде дерева. Выделите нужные, нажмите Выбрать. Данные размещаются в списке для отправки. diff --git a/SSL/src/DataProcessors/ИнтерактивноеИзменениеВыгрузки/ObjectModule.bsl b/SSL/src/DataProcessors/ИнтерактивноеИзменениеВыгрузки/ObjectModule.bsl index 0d2b8e9a2..b4dd436a9 100644 --- a/SSL/src/DataProcessors/ИнтерактивноеИзменениеВыгрузки/ObjectModule.bsl +++ b/SSL/src/DataProcessors/ИнтерактивноеИзменениеВыгрузки/ObjectModule.bsl @@ -752,7 +752,7 @@ ИмяНабора = "Автоматически_" + ИмяНабораПоМетаданным; Если ЭлементыНабораИзменения.Найти(ИмяНабора) = Неопределено Тогда Набор = ЭлементыНабораИзменения.Добавить(Тип("НаборДанныхЗапросСхемыКомпоновкиДанных")); - Набор.АвтоЗаполнениеДоступныхПолей = Ложь; + Набор.АвтоЗаполнениеДоступныхПолей = Не ОграничиватьИспользованиеОтбором; Набор.ИсточникДанных = ИсточникДанных; Набор.Имя = ИмяНабора; Набор.Запрос = " @@ -951,8 +951,7 @@ МетаданныеОбъекта = Метаданные.НайтиПоПолномуИмени(ИмяДобавляемойТаблицы); Если МетаданныеОбъекта = Неопределено Тогда - ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru='Некорректное имя метаданных ""%1"" для регистрации на узле ""%2""'"), + ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru='Некорректное имя метаданных ""%1"" для регистрации на узле ""%2""'"), ИмяДобавляемойТаблицы, УзелИнформационнойБазы); КонецЕсли; @@ -965,15 +964,15 @@ // Это элемент, смотрим чтобы попало на нашу табличку. ИмяПоля = Элемент.ЛевоеЗначение; - Если Лев(ИмяПоля, 7) = "Ссылка." Тогда + Если СтрНачинаетсяС(ИмяПоля, "Ссылка.") Тогда ИмяПоля = Сред(ИмяПоля, 8); - ИначеЕсли Лев(ИмяПоля, 18) = "ОбъектРегистрации." Тогда + ИначеЕсли СтрНачинаетсяС(ИмяПоля, "ОбъектРегистрации.") Тогда ИмяПоля = Сред(ИмяПоля, 19); Иначе Продолжить; КонецЕсли; - Позиция = Найти(ИмяПоля, "."); + Позиция = СтрНайти(ИмяПоля, "."); ИмяТаблицы = Лев(ИмяПоля, Позиция - 1); МетаданныеТабличнойЧасти = МетаданныеОбъекта.ТабличныеЧасти.Найти(ИмяТаблицы); @@ -987,7 +986,7 @@ // Наша табличная часть ПутьКДанным = Сред(ИмяПоля, Позиция + 1); - Если Лев(ПутьКДанным + ".", 7) = "Ссылка." Тогда + Если СтрНачинаетсяС(ПутьКДанным + ".", "Ссылка.") Тогда // Переадресуем на головную таблицу. Продолжить; КонецЕсли; @@ -1048,8 +1047,7 @@ ДобавитьДополнительныеОтборыКомпоновкиТабличныхЧастей( ЭлементОтбора.Элементы, Элемент.Элементы, ЭлементыНабора, - ПараметрыДобавления - ); + ПараметрыДобавления); Продолжить; КонецЕсли; @@ -1061,10 +1059,10 @@ ЭлементОтбора.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("ОбъектРегистрации"); Продолжить; - ИначеЕсли Лев(ИмяПоля, 7) = "Ссылка." Тогда + ИначеЕсли СтрНачинаетсяС(ИмяПоля, "Ссылка.") Тогда ИмяПоля = Сред(ИмяПоля, 8); - ИначеЕсли Лев(ИмяПоля, 18) = "ОбъектРегистрации." Тогда + ИначеЕсли СтрНачинаетсяС(ИмяПоля, "ОбъектРегистрации.") Тогда ИмяПоля = Сред(ИмяПоля, 19); Иначе @@ -1074,7 +1072,7 @@ КонецЕсли; - Позиция = Найти(ИмяПоля, "."); + Позиция = СтрНайти(ИмяПоля, "."); ИмяТаблицы = Лев(ИмяПоля, Позиция - 1); МетаТабличнаяЧасть = МетаОбъекта.ТабличныеЧасти.Найти(ИмяТаблицы); @@ -1099,15 +1097,14 @@ // Отбор к табличной части ПутьКДанным = Сред(ИмяПоля, Позиция + 1); - Если Лев(ПутьКДанным + ".", 7) = "Ссылка." Тогда + Если СтрНачинаетсяС(ПутьКДанным + ".", "Ссылка.") Тогда // Переадресуем на головную таблицу. ЭлементОтбора = ЭлементыПриемника.Добавить(Тип); ЗаполнитьЗначенияСвойств(ЭлементОтбора, Элемент); ЭлементОтбора.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("ОбъектРегистрации." + Сред(ПутьКДанным, 8)); ИначеЕсли ПутьКДанным <> "НомерСтроки" И ПутьКДанным <> "Ссылка" - И МетаТабличнаяЧасть.Реквизиты.Найти(ПутьКДанным) = Неопределено - Тогда + И МетаТабличнаяЧасть.Реквизиты.Найти(ПутьКДанным) = Неопределено Тогда // Табличная часть совпадает, но реквизит не наш. Усиливаем отбор. ЭлементОтбора = ЭлементыПриемника.Добавить(Тип); ЗаполнитьЗначенияСвойств(ЭлементОтбора, Элемент); diff --git a/SSL/src/DataProcessors/ИнформацияПриЗапуске/Commands/ИнформацияПриЗапуске/CommandModule.bsl b/SSL/src/DataProcessors/ИнформацияПриЗапуске/Commands/ИнформацияПриЗапуске/CommandModule.bsl index 81dbaa3e3..a3c62e761 100644 --- a/SSL/src/DataProcessors/ИнформацияПриЗапуске/Commands/ИнформацияПриЗапуске/CommandModule.bsl +++ b/SSL/src/DataProcessors/ИнформацияПриЗапуске/Commands/ИнформацияПриЗапуске/CommandModule.bsl @@ -1,5 +1,8 @@ +#Область ОбработчикиСобытий &НаКлиенте Процедура ОбработкаКоманды(ПараметрКоманды, ПараметрыВыполненияКоманды) ОткрытьФорму("Обработка.ИнформацияПриЗапуске.Форма"); КонецПроцедуры + +#КонецОбласти \ No newline at end of file diff --git a/SSL/src/DataProcessors/ИнформацияПриЗапуске/Forms/Форма/Form.form b/SSL/src/DataProcessors/ИнформацияПриЗапуске/Forms/Форма/Form.form index 68cb4e512..134b4d8ab 100644 --- a/SSL/src/DataProcessors/ИнформацияПриЗапуске/Forms/Форма/Form.form +++ b/SSL/src/DataProcessors/ИнформацияПриЗапуске/Forms/Форма/Form.form @@ -956,7 +956,7 @@ Picture - Auto + DontUse Auto @@ -982,7 +982,7 @@ Picture - Auto + DontUse Auto @@ -1004,7 +1004,7 @@ Подключаемый_ПерейтиКСтранице - Auto + DontUse Auto diff --git a/SSL/src/DataProcessors/ИнформацияПриЗапуске/Forms/Форма/Module.bsl b/SSL/src/DataProcessors/ИнформацияПриЗапуске/Forms/Форма/Module.bsl index aa7664d14..d38b81a8c 100644 --- a/SSL/src/DataProcessors/ИнформацияПриЗапуске/Forms/Форма/Module.bsl +++ b/SSL/src/DataProcessors/ИнформацияПриЗапуске/Forms/Форма/Module.bsl @@ -8,14 +8,11 @@ ТекущаяСтрокаИндекс = -1; КонфигурацияБазовая = СтандартныеПодсистемыСервер.ЭтоБазоваяВерсияКонфигурации(); - КонфигурацияМоделиСервиса = ОбщегоНазначенияПовтИсп.РазделениеВключено(); - Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ОбменДанными") Тогда - МодульОбменДаннымиПовтИсп = ОбщегоНазначения.ОбщийМодуль("ОбменДаннымиПовтИсп"); - КонфигурацияМоделиСервиса = КонфигурацияМоделиСервиса Или МодульОбменДаннымиПовтИсп.ЭтоАвтономноеРабочееМесто(); - КонецЕсли; + КонфигурацияМоделиСервиса = ОбщегоНазначенияПовтИсп.РазделениеВключено() + Или ОбщегоНазначенияПовтИсп.ЭтоАвтономноеРабочееМесто(); СтандартныйПрефикс = ПолучитьНавигационнуюСсылкуИнформационнойБазы() + "/"; - ЭтоВебКлиент = Найти(СтандартныйПрефикс, "http://") > 0; + ЭтоВебКлиент = СтрНайти(СтандартныйПрефикс, "http://") > 0; Если ЭтоВебКлиент Тогда КодЛокализации = ТекущийКодЛокализации(); СтандартныйПрефикс = СтандартныйПрефикс + КодЛокализации + "/"; @@ -68,16 +65,16 @@ Возврат; // Не ссылка КонецЕсли; - Если Найти(ИмяОткрываемойСтраницы, СтандартныйПрефикс) > 0 Тогда + Если СтрНайти(ИмяОткрываемойСтраницы, СтандартныйПрефикс) > 0 Тогда ИмяОткрываемойСтраницы = СтрЗаменить(ИмяОткрываемойСтраницы, СтандартныйПрефикс, ""); - Если Лев(ИмяОткрываемойСтраницы, 1) = "#" Тогда + Если СтрНачинаетсяС(ИмяОткрываемойСтраницы, "#") Тогда Возврат; КонецЕсли; ПросмотрСтраницы("ПоВнутреннейСсылке", ИмяОткрываемойСтраницы); - ИначеЕсли Найти(ИмяОткрываемойСтраницы, СтрЗаменить(СтандартныйПрефикс, " ", "%20")) > 0 Тогда + ИначеЕсли СтрНайти(ИмяОткрываемойСтраницы, СтрЗаменить(СтандартныйПрефикс, " ", "%20")) > 0 Тогда ИмяОткрываемойСтраницы = СтрЗаменить(ИмяОткрываемойСтраницы, "%20", " "); ИмяОткрываемойСтраницы = СтрЗаменить(ИмяОткрываемойСтраницы, СтандартныйПрефикс, ""); - Если Лев(ИмяОткрываемойСтраницы, 1) = "#" Тогда + Если СтрНачинаетсяС(ИмяОткрываемойСтраницы, "#") Тогда Возврат; КонецЕсли; ПросмотрСтраницы("ПоВнутреннейСсылке", ИмяОткрываемойСтраницы); @@ -163,7 +160,7 @@ Продолжить; КонецЕсли; - Если Лев(ПакетСтраниц.Раздел, 1) = "_" Тогда + Если СтрНачинаетсяС(ПакетСтраниц.Раздел, "_") Тогда НомерПодменю = Сред(ПакетСтраниц.Раздел, 2); Если НомерПодменю = "0" Тогда ПакетСтраниц.Раздел = ""; @@ -177,7 +174,7 @@ ИмяПодменю = "Подменю" + НомерПодменю; ТекущееПодменю = Элементы.Найти(ИмяПодменю); Если ТекущееПодменю = Неопределено Тогда - ВызватьИсключение СтрЗаменить(НСтр("ru = 'Не найдена группа ""%1""'"), "%1", ИмяПодменю); + ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Не найдена группа ""%1""'"), ИмяПодменю); КонецЕсли; ПакетСтраниц.Раздел = ТекущееПодменю.Заголовок; КонецЕсли; @@ -371,7 +368,7 @@ // Вычисление пути к картинки от страницы. // Например в странице "/1/a.htm" путь к картинке "/1/2/b.png" будет значиться как "2/b.png". ПутьККартинке = Картинка.ОтносительноеИмя; - Если Длина > 0 И Лев(ПутьККартинке, Длина) = ВебСтраница.ОтносительныйКаталог Тогда + Если Длина > 0 И СтрНачинаетсяС(ПутьККартинке, ВебСтраница.ОтносительныйКаталог) Тогда ПутьККартинке = Сред(ПутьККартинке, Длина + 1); КонецЕсли; // Замена относительных путей картинки на адреса во временном хранилище. @@ -411,13 +408,13 @@ ПрефиксГиперссылкиВстроеннойСправки = """" + СтандартныйПрефикс + "e1cib/helpservice/topics/v8config/v8cfgHelp/"; Остаток = ТекстHTML; Пока Истина Цикл - ПозицияПрефикса = Найти(Остаток, ПрефиксГиперссылкиВстроеннойСправки); + ПозицияПрефикса = СтрНайти(Остаток, ПрефиксГиперссылкиВстроеннойСправки); Если ПозицияПрефикса = 0 Тогда Прервать; КонецЕсли; Остаток = Сред(Остаток, ПозицияПрефикса + 1); - ПозицияКавычки = Найти(Остаток, """"); + ПозицияКавычки = СтрНайти(Остаток, """"); Если ПозицияКавычки = 0 Тогда Прервать; КонецЕсли; @@ -436,7 +433,7 @@ &НаКлиентеНаСервереБезКонтекста Функция СтрЛевДоСимвола(Строка, Разделитель, Остаток = Неопределено) - Позиция = Найти(Строка, Разделитель); + Позиция = СтрНайти(Строка, Разделитель); Если Позиция = 0 Тогда СтрокаДоТочки = Строка; Остаток = ""; diff --git a/SSL/src/DataProcessors/КартаМаршрутаБизнесПроцесса/Forms/Форма/Form.form b/SSL/src/DataProcessors/КартаМаршрутаБизнесПроцесса/Forms/Форма/Form.form index 0fa392885..c75f37642 100644 --- a/SSL/src/DataProcessors/КартаМаршрутаБизнесПроцесса/Forms/Форма/Form.form +++ b/SSL/src/DataProcessors/КартаМаршрутаБизнесПроцесса/Forms/Форма/Form.form @@ -389,6 +389,113 @@ UserCmds Auto + + ГруппаКартаМаршрута + 49 + + ФормаПечать + 51 + true + true + + true + + + ФормаПечатьРасширеннаяПодсказка + 52 + Label + true + true + + Left + + + Form.Item.КартаМаршрута.StandardCommand.Print + Normal + Auto + true + true + UserCmds + Auto + InCommandBarAndInAdditionalSubmenu + + + ФормаПредварительныйПросмотр + 53 + true + true + + true + + + ФормаПредварительныйПросмотрРасширеннаяПодсказка + 54 + Label + true + true + + Left + + + Form.Item.КартаМаршрута.StandardCommand.Preview + Normal + Auto + true + true + UserCmds + Auto + + + ФормаПараметрыСтраницы + 55 + true + true + + true + + + ФормаПараметрыСтраницыРасширеннаяПодсказка + 56 + Label + true + true + + Left + + + Form.Item.КартаМаршрута.StandardCommand.PageSetup + Normal + Auto + true + true + UserCmds + Auto + + true + true + + true + + + <key>ru</key> + <value>Группа карта маршрута</value> + + + ru + Группа карта маршрута + + + ГруппаКартаМаршрутаРасширеннаяПодсказка + 50 + Label + true + true + + Left + + + + Обновить 5 @@ -501,6 +608,7 @@ true GraphicalSchemaField + true Enter true Left @@ -542,7 +650,6 @@ true true true - UseIfNecessary auto true @@ -708,7 +815,7 @@ TextPicture - Auto + DontUse Auto @@ -731,7 +838,7 @@ TextPicture - Auto + DontUse Auto diff --git a/SSL/src/DataProcessors/КартаМаршрутаБизнесПроцесса/Forms/Форма/Module.bsl b/SSL/src/DataProcessors/КартаМаршрутаБизнесПроцесса/Forms/Форма/Module.bsl index 4addae9de..e9ecd04bd 100644 --- a/SSL/src/DataProcessors/КартаМаршрутаБизнесПроцесса/Forms/Форма/Module.bsl +++ b/SSL/src/DataProcessors/КартаМаршрутаБизнесПроцесса/Forms/Форма/Module.bsl @@ -66,8 +66,8 @@ ЕстьСостояние = БизнесПроцесс.Метаданные().Реквизиты.Найти("Состояние") <> Неопределено; СвойстваБизнесПроцесса = ОбщегоНазначения.ЗначенияРеквизитовОбъекта( - БизнесПроцесс, "Автор,Дата,ДатаЗавершения,Завершен,Стартован" + - ?(ЕстьСостояние, ",Состояние", "")); + БизнесПроцесс, "Автор,Дата,ДатаЗавершения,Завершен,Стартован" + + ?(ЕстьСостояние, ",Состояние", "")); ЗаполнитьЗначенияСвойств(ЭтотОбъект, СвойстваБизнесПроцесса); Если СвойстваБизнесПроцесса.Завершен Тогда Статус = НСтр("ru = 'Завершен'"); @@ -102,9 +102,9 @@ Возврат; КонецЕсли; - Если ТекЭлемент = Неопределено ИЛИ - НЕ (ТипЗнч(ТекЭлемент) = Тип("ЭлементГрафическойСхемыДействие") - ИЛИ ТипЗнч(ТекЭлемент) = Тип("ЭлементГрафическойСхемыВложенныйБизнесПроцесс")) Тогда + Если ТекЭлемент = Неопределено + Или НЕ (ТипЗнч(ТекЭлемент) = Тип("ЭлементГрафическойСхемыДействие") + Или ТипЗнч(ТекЭлемент) = Тип("ЭлементГрафическойСхемыВложенныйБизнесПроцесс")) Тогда ОбщегоНазначенияКлиентСервер.СообщитьПользователю( НСтр("ru = 'Для просмотра списка задач необходимо выбрать точку действия или вложенный бизнес-процесс карты маршрута.'"),, @@ -114,11 +114,15 @@ ЗаголовокФормы = НСтр("ru = 'Задачи по точке маршрута бизнес-процесса'"); - ОткрытьФорму("Задача.ЗадачаИсполнителя.ФормаСписка", - Новый Структура("Отбор,ЗаголовокФормы,ПоказыватьЗадачи,ВидимостьОтборов,БлокировкаОкнаВладельца,Задача,БизнесПроцесс", - Новый Структура("БизнесПроцесс,ТочкаМаршрута", БизнесПроцесс, ТекЭлемент.Значение), - ЗаголовокФормы,0,Ложь,РежимОткрытияОкнаФормы.БлокироватьОкноВладельца,Строка(ТекЭлемент.Значение),Строка(БизнесПроцесс)), - ЭтотОбъект, БизнесПроцесс); + ПараметрыФормы = Новый Структура; + ПараметрыФормы.Вставить("Отбор", Новый Структура("БизнесПроцесс,ТочкаМаршрута", БизнесПроцесс, ТекЭлемент.Значение)); + ПараметрыФормы.Вставить("ЗаголовокФормы", ЗаголовокФормы); + ПараметрыФормы.Вставить("ПоказыватьЗадачи", 0); + ПараметрыФормы.Вставить("ВидимостьОтборов", Ложь); + ПараметрыФормы.Вставить("БлокировкаОкнаВладельца", РежимОткрытияОкнаФормы.БлокироватьОкноВладельца); + ПараметрыФормы.Вставить("Задача", Строка(ТекЭлемент.Значение)); + ПараметрыФормы.Вставить("БизнесПроцесс", Строка(БизнесПроцесс)); + ОткрытьФорму("Задача.ЗадачаИсполнителя.ФормаСписка", ПараметрыФормы, ЭтотОбъект, БизнесПроцесс); КонецПроцедуры diff --git a/SSL/src/DataProcessors/КартаМаршрутаБизнесПроцесса/КартаМаршрутаБизнесПроцесса.mdo b/SSL/src/DataProcessors/КартаМаршрутаБизнесПроцесса/КартаМаршрутаБизнесПроцесса.mdo index 71fbeba77..58bf69a17 100644 --- a/SSL/src/DataProcessors/КартаМаршрутаБизнесПроцесса/КартаМаршрутаБизнесПроцесса.mdo +++ b/SSL/src/DataProcessors/КартаМаршрутаБизнесПроцесса/КартаМаршрутаБизнесПроцесса.mdo @@ -7,7 +7,7 @@ КартаМаршрутаБизнесПроцесса ru - Карта маршрута бизнес процесса + Карта маршрута бизнес-процесса true DataProcessor.КартаМаршрутаБизнесПроцесса.Form.Форма @@ -21,7 +21,7 @@ Форма ru - Карта маршрута бизнес процесса + Форма PersonalComputer MobileDevice diff --git a/SSL/src/DataProcessors/КонвертацияОбъектовXDTO/ObjectModule.bsl b/SSL/src/DataProcessors/КонвертацияОбъектовXDTO/ObjectModule.bsl index 236e6a958..aeafb5067 100644 --- a/SSL/src/DataProcessors/КонвертацияОбъектовXDTO/ObjectModule.bsl +++ b/SSL/src/DataProcessors/КонвертацияОбъектовXDTO/ObjectModule.bsl @@ -1,5 +1,11 @@ #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда +#Область ОбъявлениеПеременных + +Перем ПолеОбработкаДляЗагрузкиДанных; + +#КонецОбласти + #Область ПрограммныйИнтерфейс #Область ЭкспортныеСвойства @@ -10,16 +16,40 @@ // Функция РезультатВыполненияОбмена() Экспорт - Возврат КомпонентыОбмена.СостояниеОбменаДанными.РезультатВыполненияОбмена; + Если КомпонентыОбмена = Неопределено Тогда + Возврат Перечисления.РезультатыВыполненияОбмена.Отменено; + КонецЕсли; + + РезультатВыполненияОбмена = КомпонентыОбмена.СостояниеОбменаДанными.РезультатВыполненияОбмена; + Если РезультатВыполненияОбмена = Неопределено Тогда + Возврат Перечисления.РезультатыВыполненияОбмена.Выполнено; + КонецЕсли; + + Возврат РезультатВыполненияОбмена; КонецФункции +// Функция-свойство: результат выполнения обмена данными. +// +// Тип: Строка +// +Функция РезультатВыполненияОбменаСтрокой() Экспорт + + Возврат ОбщегоНазначения.ИмяЗначенияПеречисления(РезультатВыполненияОбмена()); + +КонецФункции + + // Функция-свойство: количество объектов, которые были загружены. // // Тип: Число // Функция СчетчикЗагруженныхОбъектов() Экспорт + Если КомпонентыОбмена = Неопределено Тогда + Возврат 0; + КонецЕсли; + Возврат КомпонентыОбмена.СчетчикЗагруженныхОбъектов; КонецФункции @@ -30,6 +60,10 @@ // Функция СчетчикВыгруженныхОбъектов() Экспорт + Если КомпонентыОбмена = Неопределено Тогда + Возврат 0; + КонецЕсли; + Возврат КомпонентыОбмена.СчетчикВыгруженныхОбъектов; КонецФункции @@ -103,6 +137,8 @@ // Процедура ВыполнитьВыгрузкуДанных(ОбработкаДляЗагрузкиДанных = Неопределено) Экспорт + ПолеОбработкаДляЗагрузкиДанных = ОбработкаДляЗагрузкиДанных; + КомпонентыОбмена = ОбменДаннымиXDTOСервер.ИнициализироватьКомпонентыОбмена("Отправка"); КомпонентыОбмена.ВедениеПротоколаДанных.ВыводВПротоколИнформационныхСообщений = ВыводВПротоколИнформационныхСообщений; @@ -150,10 +186,22 @@ Возврат; КонецПопытки; - КомпонентыОбмена.ФайлОбмена.Закрыть(); - + Если ЭтоОбменЧерезВнешнееСоединение() Тогда + ДанныеВыгрузкиXML = КомпонентыОбмена.ФайлОбмена.Закрыть(); + ИмяВременногоФайла = ПолучитьИмяВременногоФайла("xml"); + ТекстовыйДокумент = Новый ТекстовыйДокумент; + ТекстовыйДокумент.ДобавитьСтроку(ДанныеВыгрузкиXML); + ТекстовыйДокумент.Записать(ИмяВременногоФайла,,Символы.ПС); + Иначе + КомпонентыОбмена.ФайлОбмена.Закрыть(); + КонецЕсли; ОбменДаннымиXDTOСервер.ЗавершитьВедениеПротоколаОбмена(КомпонентыОбмена); + Если ЭтоОбменЧерезВнешнееСоединение() Тогда + ОбработкаДляЗагрузкиДанных().ИмяФайлаОбмена = ИмяВременногоФайла; + ОбработкаДляЗагрузкиДанных().ВыполнитьЗагрузкуДанных(); + КонецЕсли; + КонецПроцедуры #КонецОбласти @@ -196,17 +244,24 @@ Возврат; КонецЕсли; + РезультатПодсчетаДанныхКЗагрузке = ОбменДаннымиСервер.РезультатПодсчетаДанныхКЗагрузке(ИмяФайлаОбмена, Истина); + КомпонентыОбмена.Вставить("РазмерФайлаСообщенияОбмена", РезультатПодсчетаДанныхКЗагрузке.РазмерФайлаСообщенияОбмена); + КомпонентыОбмена.Вставить("КоличествоОбъектовКЗагрузке", РезультатПодсчетаДанныхКЗагрузке.КоличествоОбъектовКЗагрузке); + ОбменДаннымиXDTOСервер.ИнициализироватьТаблицыПравилОбмена(КомпонентыОбмена); Попытка ОбменДаннымиXDTOСервер.ПроизвестиЧтениеДанных(КомпонентыОбмена); Исключение + СтрокаСообщения = НСтр("ru = 'Ошибка при загрузке данных: %1'"); СтрокаСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(СтрокаСообщения, ОписаниеОшибки()); ОбменДаннымиXDTOСервер.ЗаписатьВПротоколВыполнения(КомпонентыОбмена, СтрокаСообщения,,,,,Истина); КомпонентыОбмена.ФлагОшибки = Истина; КонецПопытки; + ОбменДаннымиXDTOСервер.УдалитьВременныеОбъектыСозданныеПоСсылкам(КомпонентыОбмена); + КомпонентыОбмена.ФайлОбмена.Закрыть(); Если Не КомпонентыОбмена.ФлагОшибки Тогда @@ -261,6 +316,7 @@ ОбменДаннымиXDTOСервер.ЗаписьЖурналаРегистрацииОбменДанными(СтрокаСообщения, КомпонентыОбмена, УровеньЖурналаРегистрации.Информация); ОбменДаннымиXDTOСервер.ПроизвестиЧтениеДанных(КомпонентыОбмена, ТаблицыДляЗагрузки); + ОбменДаннымиXDTOСервер.УдалитьВременныеОбъектыСозданныеПоСсылкам(КомпонентыОбмена); // Запись в журнале регистрации. СтрокаСообщения = НСтр("ru = '%1, %2; Обработано %3 объектов'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()); @@ -326,9 +382,8 @@ // Сворачиваем таблицу данных заголовка пакета. КомпонентыОбмена.ТаблицаДанныхЗаголовкаПакета.Свернуть( "ТипОбъектаСтрокой, ТипИсточникаСтрокой, ТипПриемникаСтрокой, СинхронизироватьПоИдентификатору, ЭтоКлассификатор, ЭтоУдалениеОбъекта, ИспользоватьПредварительныйПросмотр", - "КоличествоОбъектовВИсточнике" - ); - // + "КоличествоОбъектовВИсточнике"); + КомпонентыОбмена.ТаблицаДанныхЗаголовкаПакета.Колонки.Добавить("ПоляПоиска", Новый ОписаниеТипов("Строка")); КомпонентыОбмена.ТаблицаДанныхЗаголовкаПакета.Колонки.Добавить("ПоляТаблицы", Новый ОписаниеТипов("Строка")); @@ -399,7 +454,7 @@ // Инициализируем таблицы данных сообщения обмена. Для Каждого КлючТаблицыДанных Из ТаблицыДляЗагрузки Цикл - МассивПодстрок = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(КлючТаблицыДанных, "#"); + МассивПодстрок = СтрРазделить(КлючТаблицыДанных, "#"); ТипОбъекта = МассивПодстрок[1]; @@ -442,6 +497,18 @@ КонецФункции +Функция ОбработкаДляЗагрузкиДанных() + + Возврат ПолеОбработкаДляЗагрузкиДанных; + +КонецФункции + +Функция ЭтоОбменЧерезВнешнееСоединение() + + Возврат ОбработкаДляЗагрузкиДанных() <> Неопределено; + +КонецФункции + #КонецОбласти #Область ОператорыОсновнойПрограммы diff --git a/SSL/src/DataProcessors/КонвертацияОбъектовИнформационныхБаз/Forms/Форма/Form.form b/SSL/src/DataProcessors/КонвертацияОбъектовИнформационныхБаз/Forms/Форма/Form.form index 0f5da0f14..cc884c253 100644 --- a/SSL/src/DataProcessors/КонвертацияОбъектовИнформационныхБаз/Forms/Форма/Form.form +++ b/SSL/src/DataProcessors/КонвертацияОбъектовИнформационныхБаз/Forms/Форма/Form.form @@ -18,7 +18,6 @@ true true true - UseIfNecessary auto true diff --git a/SSL/src/DataProcessors/КонвертацияОбъектовИнформационныхБаз/ObjectModule.bsl b/SSL/src/DataProcessors/КонвертацияОбъектовИнформационныхБаз/ObjectModule.bsl index 07ca9d4a7..8b19b16d5 100644 --- a/SSL/src/DataProcessors/КонвертацияОбъектовИнформационныхБаз/ObjectModule.bsl +++ b/SSL/src/DataProcessors/КонвертацияОбъектовИнформационныхБаз/ObjectModule.bsl @@ -1,5 +1,7 @@ #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда +#Область ОписаниеПеременных + //////////////////////////////////////////////////////////////////////////////// // ИСПОЛЬЗУЕМЫЕ СОКРАЩЕНИЯ ИМЕН ПЕРЕМЕННЫХ (АББРЕВИАТУРЫ) // @@ -12,7 +14,6 @@ //////////////////////////////////////////////////////////////////////////////// // ЭКСПОРТНЫЕ ПЕРЕМЕННЫЕ - Перем КлючСообщенияЖурналаРегистрации Экспорт; // строка сообщения для фиксации ошибок в журнале регистрации. Перем ВнешнееСоединение Экспорт; // Содержит глобальный контекст внешнего соединения или Неопределено. Перем Запросы Экспорт; // Структура, содержащая используемые запросы. @@ -96,6 +97,7 @@ // после загрузки данных. Перем ПолеОбъектыДляОтложеннойЗаписи; // Соответствие для записи объектов ссылочных типов после загрузки данных. Перем ФайлОбмена; // Последовательно записываемый/читаемый файл обмена. +Перем КоличествоОбъектовКВыгрузке; //Общее количество объектов подлежащих выгрузке. //////////////////////////////////////////////////////////////////////////////// // ПЕРЕМЕННЫЕ МОДУЛЯ ОБРАБОТКИ ЗАГРУЗКИ @@ -131,6 +133,8 @@ Перем ЕстьИнформацияОРегистрацииОбъекта; Перем ПолеОбработкаДляЗагрузкиДанных; +Перем КоличествоОбъектовКЗагрузке; +Перем РазмерФайлаСообщенияОбмена; //////////////////////////////////////////////////////////////////////////////// // ПЕРЕМЕННЫЕ ДЛЯ ЗНАЧЕНИЙ СВОЙСТВ @@ -171,11 +175,13 @@ Перем ПолеВерсияФорматаВходящегоСообщенияОбмена; -//////////////////////////////////////////////////////////////////////////////// -// ЭКСПОРТНЫЕ СВОЙСТВА +#КонецОбласти #Область СлужебныеПроцедурыИФункции +//////////////////////////////////////////////////////////////////////////////// +// ЭКСПОРТНЫЕ СВОЙСТВА + // Функция-свойство: флаг ошибки выполнения обмена данными. // // Возвращаемое значение: @@ -604,7 +610,7 @@ КонецЕсли; // Дополняем версию формата входящего сообщения до 4-х разрядов. - РазрядыВерсий = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(ПолеВерсияФорматаВходящегоСообщенияОбмена, "."); + РазрядыВерсий = СтрРазделить(ПолеВерсияФорматаВходящегоСообщенияОбмена, "."); Если РазрядыВерсий.Количество() < 4 Тогда @@ -616,7 +622,7 @@ КонецЦикла; - ПолеВерсияФорматаВходящегоСообщенияОбмена = СтроковыеФункцииКлиентСервер.СтрокаИзМассиваПодстрок(РазрядыВерсий, "."); + ПолеВерсияФорматаВходящегоСообщенияОбмена = СтрСоединить(РазрядыВерсий, "."); КонецЕсли; @@ -636,7 +642,7 @@ КонецФункции //////////////////////////////////////////////////////////////////////////////// -// ФУНКЦИИ КЕШИРОВАНИЯ +// ФУНКЦИИ КЭШИРОВАНИЯ Функция ТаблицаОписанияСвойствОбъекта(ОбъектМетаданных) @@ -845,6 +851,10 @@ КоличествоОбработанныхОбъектовДляОбновленияСтатуса = 100; КонецЕсли; + РезультатПодсчетаДанныхКЗагрузке = ОбменДаннымиСервер.РезультатПодсчетаДанныхКЗагрузке(ИмяФайлаОбмена, Ложь); + РазмерФайлаСообщенияОбмена = РезультатПодсчетаДанныхКЗагрузке.РазмерФайлаСообщенияОбмена; + КоличествоОбъектовКЗагрузке = РезультатПодсчетаДанныхКЗагрузке.КоличествоОбъектовКЗагрузке; + ИмяПрофиляБезопасности = ИнициализироватьОбработки(); Если ИмяПрофиляБезопасности <> Неопределено Тогда @@ -894,8 +904,7 @@ Если ЧтениеСообщения <> Неопределено И ЧтениеСообщения.СообщениеБылоПринятоРанее Тогда ЗаписатьВПротоколВыполнения(174,,,,,, - Перечисления.РезультатыВыполненияОбмена.Предупреждение_СообщениеОбменаБылоРанееПринято - ); + Перечисления.РезультатыВыполненияОбмена.Предупреждение_СообщениеОбменаБылоРанееПринято); Иначе ЗаписатьВПротоколВыполнения(ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); КонецЕсли; @@ -1012,7 +1021,7 @@ // Инициализируем таблицы данных сообщения обмена. Для Каждого КлючТаблицыДанных Из ТаблицыДляЗагрузки Цикл - МассивПодстрок = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(КлючТаблицыДанных, "#"); + МассивПодстрок = СтрРазделить(КлючТаблицыДанных, "#"); ТипОбъекта = МассивПодстрок[1]; @@ -1125,8 +1134,7 @@ Если ЧтениеСообщения <> Неопределено И ЧтениеСообщения.СообщениеБылоПринятоРанее Тогда ЗаписатьВПротоколВыполнения(174,,,,,, - Перечисления.РезультатыВыполненияОбмена.Предупреждение_СообщениеОбменаБылоРанееПринято - ); + Перечисления.РезультатыВыполненияОбмена.Предупреждение_СообщениеОбменаБылоРанееПринято); Иначе ЗаписатьВПротоколВыполнения(ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); КонецЕсли; @@ -1171,8 +1179,7 @@ Если ЧтениеСообщения <> Неопределено И ЧтениеСообщения.СообщениеБылоПринятоРанее Тогда ЗаписатьВПротоколВыполнения(174,,,,,, - Перечисления.РезультатыВыполненияОбмена.Предупреждение_СообщениеОбменаБылоРанееПринято - ); + Перечисления.РезультатыВыполненияОбмена.Предупреждение_СообщениеОбменаБылоРанееПринято); Иначе ЗаписатьВПротоколВыполнения(ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); КонецЕсли; @@ -1420,8 +1427,6 @@ ЗаписатьВФайл(Приемник); - УвеличитьСчетчикВыгруженныхОбъектов(); - КонецПроцедуры // Регистрирует объект, созданный при выгрузке. @@ -1540,6 +1545,9 @@ Возврат; КонецЕсли; + РегистрыСведений.РезультатыОбменаДанными.ЗарегистрироватьУстранениеПроблемы(Объект, + Перечисления.ТипыПроблемОбменаДанными.НепроведенныйДокумент); + // Устанавливаем режим загрузки данных для объекта. УстановитьОбменДаннымиЗагрузка(Объект); @@ -1704,8 +1712,7 @@ ИЛИ ИмяТипа = "РегистрСведений" ИЛИ ИмяТипа = "РегистрНакопления" ИЛИ ИмяТипа = "РегистрБухгалтерии" - ИЛИ ИмяТипа = "РегистрРасчета" - ; + ИЛИ ИмяТипа = "РегистрРасчета"; Если ЭтоНеСсылочныйТип ИЛИ ПустаяСтрока(ИмяТипа) Тогда @@ -1747,10 +1754,44 @@ Если ОтладкаОбработчиковВыгрузки Тогда - ВыполнитьОбработчик_Конвертация_ПередКонвертациейОбъекта(ФайлОбмена, Источник, ВходящиеДанные, ИсходящиеДанные, ИмяПКО, ПКО, - ВыгруженныеОбъекты, Отказ, КлючВыгружаемыхДанных, ЗапоминатьВыгруженные, - НеЗамещатьОбъектПриЗагрузке, ВсеОбъектыВыгружены,ТолькоПолучитьУзелСсылки, - Приемник, РежимЗаписи, РежимПроведения, НеСоздаватьЕслиНеНайден); + ПараметрыОбработчика = Новый Массив(); + ПараметрыОбработчика.Добавить(ФайлОбмена); + ПараметрыОбработчика.Добавить(Источник); + ПараметрыОбработчика.Добавить(ВходящиеДанные); + ПараметрыОбработчика.Добавить(ИсходящиеДанные); + ПараметрыОбработчика.Добавить(ИмяПКО); + ПараметрыОбработчика.Добавить(ПКО); + ПараметрыОбработчика.Добавить(ВыгруженныеОбъекты); + ПараметрыОбработчика.Добавить(Отказ); + ПараметрыОбработчика.Добавить(КлючВыгружаемыхДанных); + ПараметрыОбработчика.Добавить(ЗапоминатьВыгруженные); + ПараметрыОбработчика.Добавить(НеЗамещатьОбъектПриЗагрузке); + ПараметрыОбработчика.Добавить(ВсеОбъектыВыгружены); + ПараметрыОбработчика.Добавить(ТолькоПолучитьУзелСсылки); + ПараметрыОбработчика.Добавить(Приемник); + ПараметрыОбработчика.Добавить(РежимЗаписи); + ПараметрыОбработчика.Добавить(РежимПроведения); + ПараметрыОбработчика.Добавить(НеСоздаватьЕслиНеНайден); + + ВыполнитьОбработчик_Конвертация_ПередКонвертациейОбъекта(ПараметрыОбработчика); + + ФайлОбмена = ПараметрыОбработчика[0]; + Источник = ПараметрыОбработчика[1]; + ВходящиеДанные = ПараметрыОбработчика[2]; + ИсходящиеДанные = ПараметрыОбработчика[3]; + ИмяПКО = ПараметрыОбработчика[4]; + ПКО = ПараметрыОбработчика[5]; + ВыгруженныеОбъекты = ПараметрыОбработчика[6]; + Отказ = ПараметрыОбработчика[7]; + КлючВыгружаемыхДанных = ПараметрыОбработчика[8]; + ЗапоминатьВыгруженные = ПараметрыОбработчика[9]; + НеЗамещатьОбъектПриЗагрузке = ПараметрыОбработчика[10]; + ВсеОбъектыВыгружены = ПараметрыОбработчика[11]; + ТолькоПолучитьУзелСсылки = ПараметрыОбработчика[12]; + Приемник = ПараметрыОбработчика[13]; + РежимЗаписи = ПараметрыОбработчика[14]; + РежимПроведения = ПараметрыОбработчика[15]; + НеСоздаватьЕслиНеНайден = ПараметрыОбработчика[16]; Иначе @@ -1820,7 +1861,7 @@ Если ТолькоПолучитьУзелСсылки Тогда ТекущийУровеньВложенностиВыгрузитьПоПравилу = ТекущийУровеньВложенностиВыгрузитьПоПравилу - 1; - Если Найти(СтрокаВыгруженныхОбъектов.УзелСсылки, "<Ссылка") > 0 + Если СтрНайти(СтрокаВыгруженныхОбъектов.УзелСсылки, "<Ссылка") > 0 И НППЗаписанногоВФайл >= СтрокаВыгруженныхОбъектов.НППСсылки Тогда Возврат СтрокаВыгруженныхОбъектов.НППСсылки; Иначе @@ -1950,7 +1991,7 @@ // Возможно это конвертация из перечисления в перечисление и мы просто не нашли по. // ПКЗ нужное свойство - тогда просто выгружаем пустую ссылку и все. Если СтруктураСвойств.ИмяТипа = "Перечисление" - И Найти(ПКО.Приемник, "ПеречислениеСсылка.") > 0 Тогда + И СтрНайти(ПКО.Приемник, "ПеречислениеСсылка.") > 0 Тогда // Записываем ошибку в протокол выполнения. ЗП = ПолучитьСтруктуруЗаписиПротокола(); @@ -2255,7 +2296,6 @@ // Запись объекта в файл - УвеличитьСчетчикВыгруженныхОбъектов(); ТекущийУровеньВложенностиВыгрузитьПоПравилу = ТекущийУровеньВложенностиВыгрузитьПоПравилу - 1; @@ -2472,8 +2512,6 @@ ПровестиУстановкуПризнаковВыгруженныхОбъектовВФайл(); - Инкремент(ПолеСчетчикВыгруженныхОбъектов, 1 - СтрокиНабораЗаписей.Количество()); - КонецПроцедуры // Устанавливает пометку удаления. @@ -2490,6 +2528,12 @@ Возврат; КонецЕсли; + Если ИмяТипаОбъекта = "Документ" Тогда + УстановитьОбменДаннымиЗагрузка(Объект, Ложь); + РегистрыСведений.РезультатыОбменаДанными.ЗарегистрироватьУстранениеПроблемы(Объект, + Перечисления.ТипыПроблемОбменаДанными.НепроведенныйДокумент); + КонецЕсли; + ПометкаДляУстановки = ?(ПометкаУдаления <> Неопределено, ПометкаУдаления, Ложь); УстановитьОбменДаннымиЗагрузка(Объект); @@ -2522,23 +2566,7 @@ // Процедура УстановитьОбменДаннымиЗагрузка(Объект, Значение = Истина, Знач ОтправкаНазад = Ложь) Экспорт - Попытка - Объект.ОбменДанными.Загрузка = Значение; - Исключение - // Не все объекты, которые участвуют в обмене, имеют свойство "ОбменДанными". - КонецПопытки; - - Если Не ОтправкаНазад - И УзелОбменаЗагрузкаДанных <> Неопределено - И НЕ УзелОбменаЗагрузкаДанных.Пустая() Тогда - - Попытка - Объект.ОбменДанными.Отправитель = УзелОбменаЗагрузкаДанных; - Исключение - // Не все объекты, которые участвуют в обмене, имеют свойство "ОбменДанными". - КонецПопытки; - - КонецЕсли; + ОбменДаннымиСервер.УстановитьОбменДаннымиЗагрузка(Объект, Значение, ОтправкаНазад, УзелОбменаЗагрузкаДанных); КонецПроцедуры @@ -2647,7 +2675,7 @@ Функция ОтделитьРазделителем(Стр, Знач Разделитель, Режим=0) ПраваяЧасть = ""; - ПозРазделителя = Найти(Стр, Разделитель); + ПозРазделителя = СтрНайти(Стр, Разделитель); ДлинаРазделителя = СтрДлина(Разделитель); Если ПозРазделителя > 0 Тогда ПраваяЧасть = Сред(Стр, ПозРазделителя + ?(Режим=2, 0, ДлинаРазделителя)); @@ -3039,8 +3067,7 @@ |ГДЕ | Предопределенный |", - "{ИмяТаблицы}", Метаданные.НайтиПоТипу(ТипЗнч(Менеджер)).ПолноеИмя() - )); + "{ИмяТаблицы}", Метаданные.НайтиПоТипу(ТипЗнч(Менеджер)).ПолноеИмя())); Выборка = Запрос.Выполнить().Выбрать(); Если Выборка.НайтиСледующий( Новый Структура("ИмяПредопределенныхДанных", ИмяПредопределенного) ) Тогда @@ -3336,8 +3363,7 @@ ИЛИ (Тип = ТипХранилищеЗначения) ИЛИ (Тип = ТипУникальныйИдентификатор) ИЛИ (Тип = ТипВидДвиженияНакопления) - ИЛИ (Тип = ТипВидСчета) - Тогда + ИЛИ (Тип = ТипВидСчета) Тогда Возврат XMLЗначение(Тип, Значение); @@ -3345,7 +3371,7 @@ Возврат одПолучитьЗначениеПоСтроке(Значение, Тип, ИскатьПоСвойству); - КонецЕсли; + КонецЕсли; КонецФункции @@ -3405,8 +3431,7 @@ |Описание ошибки: |%2'"), Строка(ИмяФайлаОбмена), - ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()) - ); + ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); ЗаписатьВПротоколВыполнения(ПредставлениеОшибки); Возврат ""; КонецПопытки; @@ -3864,7 +3889,13 @@ ИначеЕсли ИмяУзла = "Свойство" Тогда РодительПКС = ?(ЗначениеЗаполнено(НоваяСтрока.Источник), "_" + НоваяСтрока.Источник, "_" + НоваяСтрока.Приемник); - ЗагрузитьПКС(ПравилаОбмена, НоваяСтрока.ПравилаГруппы,, НоваяСтрока.ПравилаГруппыОтключенные, СтрокаПолейПоиска, СинхронизироватьПоИдентификатору, ИмяПКО, РодительПКС); + + СвойстваПКО = Новый Структура; + СвойстваПКО.Вставить("ИмяПКО", ИмяПКО); + СвойстваПКО.Вставить("ИмяРодителя", РодительПКС); + СвойстваПКО.Вставить("СинхронизироватьПоИдентификатору", СинхронизироватьПоИдентификатору); + + ЗагрузитьПКС(ПравилаОбмена, НоваяСтрока.ПравилаГруппы, НоваяСтрока.ПравилаГруппыОтключенные, СвойстваПКО, СтрокаПолейПоиска); ИначеЕсли ИмяУзла = "ПередОбработкойВыгрузки" Тогда НоваяСтрока.ПередОбработкойВыгрузки = одЗначениеЭлемента(ПравилаОбмена, ТипСтрока); @@ -3995,17 +4026,29 @@ // Параметры: // ПравилаОбмена - Объект типа XMLЧтение. // ТаблицаСвойств - таблица значений, содержащая ПКС. -// ТаблицаПоиска - таблица значений, содержащая ПКС (синхронизирующих). // -Процедура ЗагрузитьПКС( ПравилаОбмена, - ТаблицаСвойств, - ТаблицаПоиска = Неопределено, - СвойстваОтключенные, - СтрокаПолейПоиска = "", - СинхронизироватьПоИдентификатору = Ложь, - ИмяПКО = "", - ИмяРодителя = "") - // +// Параметры: +// ПравилаОбмена - XMLЧтение - объект, содержащий текст правил обмена. +// ТаблицаСвойств - Таблица значений - таблица ПКС. +// СвойстваОтключенные - Таблица значений - таблица отключенных ПКС. +// СвойстваПКО - Структура - уточняющие сведения об изменяемых данных: +// * ИмяПКО - Строка - Имя ПКО. +// * СинхронизироватьПоИдентификатору - Булево - признак использования алгоритма поиска по уникальному идентификатору. +// * ИмяРодителя - Строка - имя родительского ПКО или ПКГС. +// СтрокаПолейПоиска - Строка - свойства поиска ПКО. +// ТаблицаПоиска - Таблица значений - таблица ПКС (синхронизирующих). +// +Процедура ЗагрузитьПКС(ПравилаОбмена, + ТаблицаСвойств, + СвойстваОтключенные, + СвойстваПКО, + СтрокаПолейПоиска = "", + ТаблицаПоиска = Неопределено) + + ИмяПКО = ?(ЗначениеЗаполнено(СвойстваПКО.ИмяПКО), СвойстваПКО.ИмяПКО, ""); + ИмяРодителя = ?(ЗначениеЗаполнено(СвойстваПКО.ИмяРодителя), СвойстваПКО.ИмяРодителя, ""); + СинхронизироватьПоИдентификатору = ?(ЗначениеЗаполнено(СвойстваПКО.СинхронизироватьПоИдентификатору), + СвойстваПКО.СинхронизироватьПоИдентификатору, Ложь); ЭтоПолеОтключено = одАтрибут(ПравилаОбмена, ТипБулево, "Отключить"); ЭтоПолеПоиска = одАтрибут(ПравилаОбмена, ТипБулево, "Поиск"); @@ -4175,7 +4218,11 @@ Если ИмяУзла = "Свойство" Тогда - ЗагрузитьПКС(ПравилаОбмена, ТаблицаСвойств, ТаблицаПоиска, СвойстваОтключенные,, СинхронизироватьПоИдентификатору, ИмяПКО); + СвойстваПКО = Новый Структура; + СвойстваПКО.Вставить("ИмяПКО", ИмяПКО); + СвойстваПКО.Вставить("ИмяРодителя", ""); + СвойстваПКО.Вставить("СинхронизироватьПоИдентификатору", СинхронизироватьПоИдентификатору); + ЗагрузитьПКС(ПравилаОбмена, ТаблицаСвойств, СвойстваОтключенные, СвойстваПКО,, ТаблицаПоиска); ИначеЕсли ИмяУзла = "Группа" Тогда @@ -4268,7 +4315,7 @@ НоваяСтрока.ЗапоминатьВыгруженные = Истина; НоваяСтрока.НеЗамещать = Ложь; - НоваяСтрока.ПриоритетОбъектовОбмена = Перечисления.ПриоритетыОбъектовОбмена.ПриоритетПоступившегоПриОбменеОбъектаВыше; + НоваяСтрока.ПриоритетОбъектовОбмена = Перечисления.ПриоритетыОбъектовОбмена.ПриоритетОбъектаОбменаВыше; ПоискПоТабличнымЧастям = Новый ТаблицаЗначений; ПоискПоТабличнымЧастям.Колонки.Добавить("ИмяЭлемента"); @@ -4516,9 +4563,9 @@ Значение = одЗначениеЭлемента(ПравилаОбмена, ТипСтрока); Если Значение = "Ниже" Тогда - НоваяСтрока.ПриоритетОбъектовОбмена = Перечисления.ПриоритетыОбъектовОбмена.ПриоритетПоступившегоПриОбменеОбъектаНиже; + НоваяСтрока.ПриоритетОбъектовОбмена = Перечисления.ПриоритетыОбъектовОбмена.ПриоритетОбъектаОбменаНиже; ИначеЕсли Значение = "Совпадает" Тогда - НоваяСтрока.ПриоритетОбъектовОбмена = Перечисления.ПриоритетыОбъектовОбмена.ПриоритетПоступившегоПриОбменеОбъектаСовпадает; + НоваяСтрока.ПриоритетОбъектовОбмена = Перечисления.ПриоритетыОбъектовОбмена.ПриоритетОбъектаОбменаСовпадает; КонецЕсли; // Настройки вариантов поиска. @@ -4625,8 +4672,8 @@ ТаблицаПоляТаблицы.Свернуть("Приемник"); СвойстваМассив = ТаблицаПоляТаблицы.ВыгрузитьКолонку("Приемник"); - ПоляТаблицы = СтроковыеФункцииКлиентСервер.СтрокаИзМассиваПодстрок(СвойстваМассив); - ПоляПоиска = СтроковыеФункцииКлиентСервер.СтрокаИзМассиваПодстрок(СвойстваПоискаМассив); + ПоляТаблицы = СтрСоединить(СвойстваМассив, ","); + ПоляПоиска = СтрСоединить(СвойстваПоискаМассив, ","); КонецЕсли; @@ -5329,7 +5376,7 @@ КонецЕсли; // Для поддержки отбора с помощью построителя. - Если Найти(ОбъектВыборки, "Ссылка.") Тогда + Если СтрНайти(ОбъектВыборки, "Ссылка.") Тогда НоваяСтрока.ИмяОбъектаДляЗапроса = СтрЗаменить(ОбъектВыборки, "Ссылка.", "."); Иначе НоваяСтрока.ИмяОбъектаДляЗапросаРегистра = СтрЗаменить(ОбъектВыборки, "Запись.", "."); @@ -5471,8 +5518,7 @@ СтруктураПравил.Свойство("ВерсияФорматаХраненияПравил", ВерсияФорматаХраненияПравил); Если ВерсияФорматаХраненияПравил <> ВерсияФорматаХраненияПравилОбмена() Тогда ВызватьИсключение НСтр("ru = 'Версия формата хранения правил обмена не соответствует ожидаемой. - |Требуется выполнить загрузку правил обмена повторно.'" - ); + |Требуется выполнить загрузку правил обмена повторно.'"); КонецЕсли; Конвертация = СтруктураПравил.Конвертация; @@ -5861,7 +5907,12 @@ КонецЕсли; Если ФайлОбмена.ЛокальноеИмя <> "ФайлОбмена" Тогда - ВызватьИсключение НСтр("ru = 'Ошибка формата сообщения обмена.'"); + // Возможно, это сообщение обмена в новом формате. + Если ОбменДаннымиXDTOСервер.ПроверитьФорматСообщенияОбмена(ФайлОбмена) Тогда + ВыполнитьПереходНаНовыйОбмен(); + Иначе + ВызватьИсключение НСтр("ru = 'Ошибка формата сообщения обмена.'"); + КонецЕсли; КонецЕсли; ПолеВерсияФорматаВходящегоСообщенияОбмена = одАтрибут(ФайлОбмена, ТипСтрока, "ВерсияФормата"); @@ -6018,8 +6069,7 @@ | |Подробности: |%1'"), - КраткоеПредставлениеОшибки(ИнформацияОбОшибке()) - ); + КраткоеПредставлениеОшибки(ИнформацияОбОшибке())); КонецПопытки; КонецПроцедуры @@ -6294,7 +6344,7 @@ Для Каждого СтрокаДвижения Из ТаблицаДвижений Цикл // Имя регистра передается как значение, полученное с помощью // функции ПолноеИмя() метаданных регистра. - ПозицияТочки = Найти(СтрокаДвижения.Имя, "."); + ПозицияТочки = СтрНайти(СтрокаДвижения.Имя, "."); ТипРегистра = Лев(СтрокаДвижения.Имя, ПозицияТочки - 1); ИмяРегистра = СокрП(Сред(СтрокаДвижения.Имя, ПозицияТочки + 1)); @@ -7135,7 +7185,7 @@ Для Каждого ЭлементСвойств Из СвойстваПоиска Цикл ИмяПараметра = ЭлементСвойств.Ключ; - Если Найти(ГотоваяСтрокаДляРазбора, ИмяПараметра + ",") > 0 Тогда + Если СтрНайти(ГотоваяСтрокаДляРазбора, ИмяПараметра + ",") > 0 Тогда ВременныеСвойстваПоиска.Вставить(ИмяПараметра, ЭлементСвойств.Значение); @@ -7240,7 +7290,7 @@ Функция НайтиПервоеПравилоПоСтруктуреСвойств(СтруктураСвойств) - Попытка + Если СтруктураСвойств <> Неопределено Тогда СтрокаПриемника = СтруктураСвойств.ТипСсылкиСтрокой; @@ -7256,9 +7306,7 @@ КонецЦикла; - Исключение - - КонецПопытки; + КонецЕсли; Возврат Неопределено; @@ -7352,8 +7400,7 @@ УникальныйИдентификаторСтрокой = СвойствоУникальныйИдентификатор; ПриПереносеОбъектаПоСсылкеУстанавливатьТолькоGIUD = ПриПереносеОбъектаПоСсылкеУстанавливатьТолькоGIUD - И СвойствоУникальныйИдентификатор <> Неопределено - ; + И СвойствоУникальныйИдентификатор <> Неопределено; Если НайденоСоответствиеОбъекта Тогда @@ -7684,10 +7731,10 @@ Пока ФайлОбмена.Прочитать() Цикл ИмяУзла = ФайлОбмена.ЛокальноеИмя; - - Если ИмяУзла = "Свойство" ИЛИ - ИмяУзла = "ЗначениеПараметра" Тогда - + + Если ИмяУзла = "Свойство" + ИЛИ ИмяУзла = "ЗначениеПараметра" Тогда + ЭтоПараметр = (ИмяУзла = "ЗначениеПараметра"); Имя = одАтрибут(ФайлОбмена, ТипСтрока, "Имя"); @@ -7767,7 +7814,7 @@ КонецЦикла; - КлючевыеПоляПоиска = СтроковыеФункцииКлиентСервер.СтрокаИзМассиваПодстрок(МассивКлючевыхПолейПоиска); + КлючевыеПоляПоиска = СтрСоединить(МассивКлючевыхПолейПоиска, ","); КонецЕсли; @@ -7906,7 +7953,7 @@ Пока Истина Цикл - Поз = Найти(СтрокаЭлементов, ","); + Поз = СтрНайти(СтрокаЭлементов, ","); Если Поз = 0 Тогда Прервать; // выход @@ -8006,9 +8053,9 @@ КопияТЧДляПоиска = Неопределено; Движения = Объект.Движения[Имя]; - Движения.Записывать = Истина; Движения.Прочитать(); + Движения.Записывать = Истина; Если Очистить И Движения.Количество() <> 0 Тогда @@ -8086,7 +8133,7 @@ Имя = одАтрибут(ФайлОбмена, ТипСтрока, "Имя"); ИмяПКО = одАтрибут(ФайлОбмена, ТипСтрока, "ИмяПКО"); - Если Имя = "ВидДвижения" И Найти(Метаданные.НайтиПоТипу(ТипЗнч(Запись)).ПолноеИмя(), "РегистрНакопления") Тогда + Если Имя = "ВидДвижения" И СтрНайти(Метаданные.НайтиПоТипу(ТипЗнч(Запись)).ПолноеИмя(), "РегистрНакопления") Тогда ТипСвойства = ТипВидДвиженияНакопления; @@ -8457,7 +8504,12 @@ КонецПопытки; // Получаем структуру свойств источника по типу источника. - СтруктураСвойств = Менеджеры[Тип(ТипИсточника)]; + Попытка + СтруктураСвойств = Менеджеры[Тип(ТипИсточника)]; + Исключение + одПропустить(ФайлОбмена, "ИнформацияОРегистрацииОбъекта"); + Возврат Неопределено; + КонецПопытки; // Получаем ссылку источника по GUID. УникальныйИдентификаторИсточника = СтруктураСвойств.Менеджер.ПолучитьСсылку(УникальныйИдентификаторИсточника); @@ -8524,8 +8576,6 @@ ЗаписатьВФайл(Приемник); - УвеличитьСчетчикВыгруженныхОбъектов(); - КонецЦикла; КонецЕсли; @@ -8878,7 +8928,7 @@ Объект.ДополнительныеСвойства.Вставить("ОбменДанными", Новый Структура("АнализДанных", Не РежимЗагрузкиДанныхВИнформационнуюБазу())); - Если ПриоритетОбъектаОбмена <> Перечисления.ПриоритетыОбъектовОбмена.ПриоритетПоступившегоПриОбменеОбъектаВыше Тогда + Если ПриоритетОбъектаОбмена <> Перечисления.ПриоритетыОбъектовОбмена.ПриоритетОбъектаОбменаВыше Тогда СтандартныеПодсистемыСервер.ПриПолученииДанныхОтПодчиненного(Объект, ПолучениеЭлемента, ОтправкаНазад, УзелОбменаЗагрузкаДанных); Иначе СтандартныеПодсистемыСервер.ПриПолученииДанныхОтГлавного(Объект, ПолучениеЭлемента, ОтправкаНазад, УзелОбменаЗагрузкаДанных); @@ -8902,9 +8952,15 @@ Если СтрокаСтека <> Неопределено Тогда Возврат; КонецЕсли; - - ГлобальныйСтекНеЗаписанныхОбъектов.Вставить(НомерДляСтека, Новый Структура("Объект, ИзвестнаяСсылка, ТипОбъекта, ИмяТипа, АвтоматическиГенерироватьКод, ПараметрыОбъекта", - Объект, ИзвестнаяСсылка, ТипОбъекта, ИмяТипа, АвтоматическиГенерироватьКод, ПараметрыОбъекта)); + СтруктураПараметров = Новый Структура(); + СтруктураПараметров.Вставить("Объект",Объект); + СтруктураПараметров.Вставить("ИзвестнаяСсылка",ИзвестнаяСсылка); + СтруктураПараметров.Вставить("ТипОбъекта", ТипОбъекта); + СтруктураПараметров.Вставить("ИмяТипа", ИмяТипа); + СтруктураПараметров.Вставить("АвтоматическиГенерироватьКод", АвтоматическиГенерироватьКод); + СтруктураПараметров.Вставить("ПараметрыОбъекта", ПараметрыОбъекта); + + ГлобальныйСтекНеЗаписанныхОбъектов.Вставить(НомерДляСтека, СтруктураПараметров); КонецПроцедуры @@ -8978,13 +9034,13 @@ СтрокаПриоритета = одАтрибут(ФайлОбмена, ТипСтрока, "ПриоритетОбъектаОбмена"); Если ПустаяСтрока(СтрокаПриоритета) Тогда - ЗначениеПриоритета = Перечисления.ПриоритетыОбъектовОбмена.ПриоритетПоступившегоПриОбменеОбъектаВыше; + ЗначениеПриоритета = Перечисления.ПриоритетыОбъектовОбмена.ПриоритетОбъектаОбменаВыше; ИначеЕсли СтрокаПриоритета = "Выше" Тогда - ЗначениеПриоритета = Перечисления.ПриоритетыОбъектовОбмена.ПриоритетПоступившегоПриОбменеОбъектаВыше; + ЗначениеПриоритета = Перечисления.ПриоритетыОбъектовОбмена.ПриоритетОбъектаОбменаВыше; ИначеЕсли СтрокаПриоритета = "Ниже" Тогда - ЗначениеПриоритета = Перечисления.ПриоритетыОбъектовОбмена.ПриоритетПоступившегоПриОбменеОбъектаНиже; + ЗначениеПриоритета = Перечисления.ПриоритетыОбъектовОбмена.ПриоритетОбъектаОбменаНиже; ИначеЕсли СтрокаПриоритета = "Совпадает" Тогда - ЗначениеПриоритета = Перечисления.ПриоритетыОбъектовОбмена.ПриоритетПоступившегоПриОбменеОбъектаСовпадает; + ЗначениеПриоритета = Перечисления.ПриоритетыОбъектовОбмена.ПриоритетОбъектаОбменаСовпадает; КонецЕсли; Возврат ЗначениеПриоритета; @@ -9485,7 +9541,7 @@ Объект.ДополнительныеСвойства.Вставить("ОбменДанными", Новый Структура("АнализДанных", Не РежимЗагрузкиДанныхВИнформационнуюБазу())); КонецЕсли; - Если ПриоритетОбъектаОбмена <> Перечисления.ПриоритетыОбъектовОбмена.ПриоритетПоступившегоПриОбменеОбъектаВыше Тогда + Если ПриоритетОбъектаОбмена <> Перечисления.ПриоритетыОбъектовОбмена.ПриоритетОбъектаОбменаВыше Тогда СтандартныеПодсистемыСервер.ПриПолученииДанныхОтПодчиненного(Объект, ПолучениеЭлемента, ОтправкаНазад, УзелОбменаЗагрузкаДанных); Иначе СтандартныеПодсистемыСервер.ПриПолученииДанныхОтГлавного(Объект, ПолучениеЭлемента, ОтправкаНазад, УзелОбменаЗагрузкаДанных); @@ -9720,6 +9776,25 @@ КонецФункции +Процедура ВыполнитьПереходНаНовыйОбмен() + + ИмяПланаОбмена = ИмяПланаОбмена(); + ИмяПланаОбменаДляПерехода = ПланыОбмена[ИмяПланаОбмена].ИмяПланаОбменаДляПереходаНаНовыйОбмен(); + + НастройкаСинхронизацииДанных = Неопределено; + Если ЗначениеЗаполнено(УзелДляОбмена) Тогда + НастройкаСинхронизацииДанных = УзелДляОбмена; + ИначеЕсли ЗначениеЗаполнено(УзелОбменаЗагрузкаДанных) Тогда + НастройкаСинхронизацииДанных = УзелОбменаЗагрузкаДанных; + КонецЕсли; + + ПланыОбмена[ИмяПланаОбменаДляПерехода].ВыполнитьПереходНаНовыйОбмен(НастройкаСинхронизацииДанных); + СтрокаСообщения = НСтр("ru = 'Выполнен автоматический переход на синхронизацию данных через формат EnterpriseData.'"); + ЗаписьЖурналаРегистрацииОбменДанными(СтрокаСообщения, УровеньЖурналаРегистрации.Информация); + ПолеРезультатВыполненияОбмена = Перечисления.РезультатыВыполненияОбмена.Отменено; + ВызватьИсключение НСтр("ru = 'Синхронизация данных по старой настройке отменена.'"); +КонецПроцедуры + //////////////////////////////////////////////////////////////////////////////// // ПРОЦЕДУРЫ ВЫГРУЗКИ ДАННЫХ ПО ПРАВИЛАМ ОБМЕНА @@ -9862,7 +9937,7 @@ СоздатьОбъектыДляЗаписиДанныхВXML(СтруктураУзлаСвойств, УзелКоллекцииОбъектов, ИСТИНА, ПКГС.Приемник, ИмяГоловногоУзла); - ИначеЕсли Найти(ВидПриемника, "НаборДвижений") > 0 Тогда + ИначеЕсли СтрНайти(ВидПриемника, "НаборДвижений") > 0 Тогда ИмяГоловногоУзла = "НаборЗаписей"; @@ -9980,7 +10055,7 @@ ИначеЕсли ВидИсточника = "ПодчиненныйСправочник" Тогда - ИначеЕсли Найти(ВидИсточника, "НаборДвижений") > 0 Тогда + ИначеЕсли СтрНайти(ВидИсточника, "НаборДвижений") > 0 Тогда КоллекцияОбъектов = ПолучитьНаборДвиженийДокумента(Источник, ВидИсточника, ПКГС.Источник); @@ -10603,7 +10678,7 @@ Если ТипУзлаСсылки = ТипСтрока Тогда - Если Найти(УзелСсылки, "<Ссылка") > 0 Тогда + Если СтрНайти(УзелСсылки, "<Ссылка") > 0 Тогда УзелСвойства.ЗаписатьБезОбработки(УзелСсылки); @@ -11343,7 +11418,7 @@ Если ТипУзлаСсылки = ТипСтрока Тогда - Если Найти(УзелСсылки, "<Ссылка") > 0 Тогда + Если СтрНайти(УзелСсылки, "<Ссылка") > 0 Тогда ДобавитьПроизвольныеДанныеДляЗаписиВXML(СтруктураУзлаСвойств, УзелСвойства, "Ссылка", УзелСсылки); @@ -11482,12 +11557,12 @@ Процедура ЗаписатьПриоритетОбъектовОбмена(ПриоритетОбъектовОбмена, Узел) Если ЗначениеЗаполнено(ПриоритетОбъектовОбмена) - И ПриоритетОбъектовОбмена <> Перечисления.ПриоритетыОбъектовОбмена.ПриоритетПоступившегоПриОбменеОбъектаВыше Тогда + И ПриоритетОбъектовОбмена <> Перечисления.ПриоритетыОбъектовОбмена.ПриоритетОбъектаОбменаВыше Тогда - Если ПриоритетОбъектовОбмена = Перечисления.ПриоритетыОбъектовОбмена.ПриоритетПоступившегоПриОбменеОбъектаНиже Тогда + Если ПриоритетОбъектовОбмена = Перечисления.ПриоритетыОбъектовОбмена.ПриоритетОбъектаОбменаНиже Тогда УстановитьАтрибут(Узел, "ПриоритетОбъектаОбмена", "Ниже"); - ИначеЕсли ПриоритетОбъектовОбмена = Перечисления.ПриоритетыОбъектовОбмена.ПриоритетПоступившегоПриОбменеОбъектаСовпадает Тогда - УстановитьАтрибут(Узел, "ПриоритетОбъектаОбмена", "Совпадает"); + ИначеЕсли ПриоритетОбъектовОбмена = Перечисления.ПриоритетыОбъектовОбмена.ПриоритетОбъектаОбменаСовпадает Тогда + УстановитьАтрибут(Узел, "ПриоритетОбъектаОбмена", "Совпадает"); КонецЕсли; КонецЕсли; @@ -11533,14 +11608,11 @@ ЗаписатьВФайл(Приемник); - УвеличитьСчетчикВыгруженныхОбъектов(); - КонецПроцедуры Процедура ВызватьСобытияПередВыгрузкойОбъекта(Объект, Правило, Свойства=Неопределено, ВходящиеДанные=Неопределено, НеВыгружатьОбъектыСвойствПоСсылкам = Ложь, ИмяПКО, Отказ, ИсходящиеДанные) - Если ФлагКомментироватьОбработкуОбъектов Тогда ОписаниеТипов = Новый ОписаниеТипов("Строка"); @@ -11838,16 +11910,14 @@ СтрокаДополненияПолейВыборкиПериодичность = ?(Непериодический, ", NULL КАК Период", ""); - Запрос.Текст = "ВЫБРАТЬ " + СтрокаРазрешения + " - | * - | - | " + СтрокаДополненияПолейВыборкиПодчиненРегистратору + " - | " + СтрокаДополненияПолейВыборкиПериодичность + " - | - |ИЗ - | " + ИмяТипа + "." + Свойства.Имя + " КАК ОбъектДляВыгрузки - | - |" + ИтоговоеОграничениеПоДате; + Запрос.Текст = "ВЫБРАТЬ " + СтрокаРазрешения + + " + | * + | " + СтрокаДополненияПолейВыборкиПодчиненРегистратору + " + | " + СтрокаДополненияПолейВыборкиПериодичность + " + |ИЗ + | " + ИмяТипа + "." + Свойства.Имя + " КАК ОбъектДляВыгрузки + |" + ИтоговоеОграничениеПоДате; Иначе @@ -12762,7 +12832,7 @@ Если СтрокаПолей.ЭтоГруппа Тогда Если СтрокаПолей.ВидПриемника = "ТабличнаяЧасть" - ИЛИ Найти(СтрокаПолей.ВидПриемника, "НаборДвижений") > 0 Тогда + ИЛИ СтрНайти(СтрокаПолей.ВидПриемника, "НаборДвижений") > 0 Тогда ИмяСтруктурыПриемника = СтрокаПолей.Приемник + ?(СтрокаПолей.ВидПриемника = "ТабличнаяЧасть", "ТабличнаяЧасть", "НаборЗаписей"); @@ -13047,9 +13117,8 @@ Процедура ЗагрузитьПравилаОбмена(Источник="", ТипИсточника="XMLФайл", СтрокаСообщенияОбОшибке = "", - ЗагружатьТолькоЗаголовокПравил = Ложь - ) Экспорт - // + ЗагружатьТолькоЗаголовокПравил = Ложь) Экспорт + ИнициализироватьМенеджерыИСообщения(); ЕстьГлобальныйОбработчикПередВыгрузкойОбъекта = Ложь; @@ -13315,7 +13384,9 @@ Если Не ПустаяСтрока(ИмяВременногоФайлаПравилОбмена) Тогда Попытка УдалитьФайлы(ИмяВременногоФайлаПравилОбмена); - Исключение + Исключение + ЗаписьЖурналаРегистрации(НСтр("ru = 'Обмен данными'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), + УровеньЖурналаРегистрации.Ошибка,,, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); КонецПопытки; КонецЕсли; @@ -13531,8 +13602,7 @@ Если ЧтениеСообщения <> Неопределено И ЧтениеСообщения.СообщениеБылоПринятоРанее Тогда ЗаписатьВПротоколВыполнения(174,,,,,, - Перечисления.РезультатыВыполненияОбмена.Предупреждение_СообщениеОбменаБылоРанееПринято - ); + Перечисления.РезультатыВыполненияОбмена.Предупреждение_СообщениеОбменаБылоРанееПринято); Иначе ЗаписатьВПротоколВыполнения(ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); КонецЕсли; @@ -13552,6 +13622,7 @@ Если ИмяУзла = "Объект" Тогда + ОбменДаннымиСервер.РассчитатьПроцентЗагрузки(СчетчикЗагруженныхОбъектов(), КоличествоОбъектовКЗагрузке, РазмерФайлаСообщенияОбмена); ПоследнийОбъектЗагрузки = ПрочитатьОбъект(); ОбработатьОкончаниеЧтенияНовогоЭлемента(ПоследнийОбъектЗагрузки); @@ -13817,7 +13888,7 @@ Функция ЭтоОбъектКлассификатор(ТипОбъектаСтрокой, ПКО) ВидОбъекта = ТипОбъектаСтрокой; - Позиция = Найти(ВидОбъекта, "."); + Позиция = СтрНайти(ВидОбъекта, "."); Если Позиция > 0 Тогда ВидОбъекта = Лев(ВидОбъекта, Позиция - 1); КонецЕсли; @@ -13825,8 +13896,7 @@ Если ВидОбъекта = "СправочникСсылка" Или ВидОбъекта = "ПланВидовХарактеристикСсылка" Или ВидОбъекта = "ПланСчетовСсылка" - Или ВидОбъекта = "ПланВидовРасчетаСсылка" - Тогда + Или ВидОбъекта = "ПланВидовРасчетаСсылка" Тогда Возврат ПКО.СинхронизироватьПоИдентификатору И ПКО.ПродолжитьПоискПоПолямПоискаЕслиПоИдентификаторуНеНашли КонецЕсли; @@ -13930,7 +14000,7 @@ // Удаляем поле "Ссылка" из визуальных полей таблицы. ОбщегоНазначенияКлиентСервер.УдалитьЗначениеИзМассива(МассивПодстрок, "Ссылка"); - СтрокаТаблицы.ПоляТаблицы = СтроковыеФункцииКлиентСервер.СтрокаИзМассиваПодстрок(МассивПодстрок); + СтрокаТаблицы.ПоляТаблицы = СтрСоединить(МассивПодстрок, ","); одПропустить(ФайлОбмена, ИмяУзла); @@ -13978,6 +14048,7 @@ Процедура ПроизвестиЧтениеДанныхВРежимеВнешнегоСоединения(ЧтениеСообщения) СтрокаСообщенияОбОшибке = ""; + КоличествоОбъектовКЗагрузке = КоличествоОбъектовКЗагрузкеВнешнееСоединение; Пока ФайлОбмена.Прочитать() Цикл @@ -13989,13 +14060,15 @@ ОбработатьОкончаниеЧтенияНовогоЭлемента(ПоследнийОбъектЗагрузки); + ОбменДаннымиСервер.РассчитатьПроцентЗагрузки(СчетчикЗагруженныхОбъектов(), КоличествоОбъектовКЗагрузке, РазмерФайлаСообщенияОбмена); + ИначеЕсли ИмяУзла = "НаборЗаписейРегистра" Тогда // набор записей регистра ПоследнийОбъектЗагрузки = ПрочитатьНаборЗаписейРегистра(); ОбработатьОкончаниеЧтенияНовогоЭлемента(ПоследнийОбъектЗагрузки); - + ОбменДаннымиСервер.РассчитатьПроцентЗагрузки(СчетчикЗагруженныхОбъектов(), КоличествоОбъектовКЗагрузке, РазмерФайлаСообщенияОбмена); ИначеЕсли ИмяУзла = "УдалениеОбъекта" Тогда // Обработка удаления объекта из информационной базы. @@ -14004,7 +14077,7 @@ одПропустить(ФайлОбмена, "УдалениеОбъекта"); ОбработатьОкончаниеЧтенияНовогоЭлемента(); - + ОбменДаннымиСервер.РассчитатьПроцентЗагрузки(СчетчикЗагруженныхОбъектов(), КоличествоОбъектовКЗагрузке, РазмерФайлаСообщенияОбмена); ИначеЕсли ИмяУзла = "ИнформацияОРегистрацииОбъекта" Тогда ЕстьИнформацияОРегистрацииОбъекта = Истина; @@ -14528,7 +14601,7 @@ ТабличныеЧастиОбщегоУзла = ОбменДаннымиСобытия.ТабличныеЧастиОбъекта(МетаданныеОбщегоУзла); - СвойстваОбщегоУзла = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(ОбщиеДанныеУзлов); + СвойстваОбщегоУзла = СтрРазделить(ОбщиеДанныеУзлов, ","); Для Каждого Свойство Из СвойстваОбщегоУзла Цикл @@ -14766,11 +14839,11 @@ Функция ПоляПоискаМеханизмаСопоставленияОбъектов(Знач ПоляПоиска) - ПоляПоискаКоллекция = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(ПоляПоиска); + ПоляПоискаКоллекция = СтрРазделить(ПоляПоиска, ","); ОбщегоНазначенияКлиентСервер.УдалитьЗначениеИзМассива(ПоляПоискаКоллекция, "ЭтоГруппа"); - Возврат СтроковыеФункцииКлиентСервер.СтрокаИзМассиваПодстрок(ПоляПоискаКоллекция); + Возврат СтрСоединить(ПоляПоискаКоллекция, ","); КонецФункции // @@ -15121,6 +15194,21 @@ УзелДляОбменаОбъект = УзелДляОбмена.ПолучитьОбъект(); Пока ВыборкаИзменений.Следующий() Цикл + Инкремент(КоличествоОбъектовКВыгрузке); + КонецЦикла; + ВыборкаИзменений.Сбросить(); + + Если ЭтоОбменЧерезВнешнееСоединение() Тогда + // В базе-корреспонденте может не быть этого реквизита обработки. + Если ОбработкаДляЗагрузкиДанных().Метаданные().Реквизиты.Найти("КоличествоОбъектовКЗагрузкеВнешнееСоединение") <> Неопределено Тогда + ОбработкаДляЗагрузкиДанных().КоличествоОбъектовКЗагрузкеВнешнееСоединение = КоличествоОбъектовКВыгрузке; + КонецЕсли; + КонецЕсли; + + Пока ВыборкаИзменений.Следующий() Цикл + + Инкремент(ПолеСчетчикВыгруженныхОбъектов); + ОбменДаннымиСервер.РассчитатьПроцентВыгрузки(СчетчикВыгруженныхОбъектов(), КоличествоОбъектовКВыгрузке); Данные = ВыборкаИзменений.Получить(); @@ -15444,7 +15532,7 @@ НоваяСтрока.ЗапоминатьВыгруженные = Истина; НоваяСтрока.НеЗамещать = Ложь; - НоваяСтрока.ПриоритетОбъектовОбмена = Перечисления.ПриоритетыОбъектовОбмена.ПриоритетПоступившегоПриОбменеОбъектаВыше; + НоваяСтрока.ПриоритетОбъектовОбмена = Перечисления.ПриоритетыОбъектовОбмена.ПриоритетОбъектаОбменаВыше; НоваяСтрока.Свойства = ТаблицаПравилКонвертацииСвойств.Скопировать(); НоваяСтрока.СвойстваПоиска = ТаблицаПравилКонвертацииСвойств.Скопировать(); @@ -15836,7 +15924,8 @@ Попытка ОбработкаВыгрузки.ОтключитьОбработкуДляОтладки(); Исключение - // Нет процедуры отключения обработки. + ЗаписьЖурналаРегистрации(НСтр("ru = 'Обмен данными'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), + УровеньЖурналаРегистрации.Ошибка,,, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); КонецПопытки; ОбработкаВыгрузки = Неопределено; @@ -15845,7 +15934,8 @@ Попытка ОбработкаЗагрузки.ОтключитьОбработкуДляОтладки(); Исключение - // Нет процедуры отключения обработки. + ЗаписьЖурналаРегистрации(НСтр("ru = 'Обмен данными'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), + УровеньЖурналаРегистрации.Ошибка,,, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); КонецПопытки; ОбработкаЗагрузки = Неопределено; @@ -15964,11 +16054,16 @@ СтрокаПоиска = "ВЫБРАТЬ Ссылка ИЗ " + ИмяТипа + "." + Имя + " ГДЕ "; СтрокаПоискаВыгрузкиСсылки = "ВЫБРАТЬ #ПоляПоиска# ИЗ " + ИмяТипа + "." + Имя; ТипСсылки = Тип(ТипСсылкиСтрокой); - Структура = Новый Структура("Имя,ИмяТипа,ТипСсылкиСтрокой,Менеджер,ОбъектМД,СтрокаПоиска,СтрокаПоискаВыгрузкиСсылки,ВозможенПоискПоПредопределенным,ПКО", Имя, ИмяТипа, ТипСсылкиСтрокой, Менеджер, ОбъектМД, СтрокаПоиска, СтрокаПоискаВыгрузкиСсылки, ВозможенПоискПоПредопределенным); + Структура = СтруктураПараметровМенеджера(Имя, ИмяТипа, ТипСсылкиСтрокой, Менеджер, ОбъектМД); + Структура.Вставить("СтрокаПоиска",СтрокаПоиска); + Структура.Вставить("СтрокаПоискаВыгрузкиСсылки",СтрокаПоискаВыгрузкиСсылки); + Структура.Вставить("ВозможенПоискПоПредопределенным",ВозможенПоискПоПредопределенным); + Менеджеры.Вставить(ТипСсылки, Структура); - СтруктураДляПланаОбмена = Новый Структура("Имя,ТипСсылки,ЭтоСсылочныйТип,ЭтоРегистр", Имя, ТипСсылки, Истина, Ложь); + СтруктураДляПланаОбмена = СтруктураПараметровПланаОбмена(Имя, ТипСсылки, Истина, Ложь); + МенеджерыДляПлановОбмена.Вставить(ОбъектМД, СтруктураДляПланаОбмена); КонецПроцедуры @@ -15980,8 +16075,8 @@ Имя = ОбъектМД.Имя; ТипСсылкиСтрокой = ПрефиксИмениТипаЗапись + "." + Имя; ТипСсылки = Тип(ТипСсылкиСтрокой); - Структура = Новый Структура("Имя,ИмяТипа,ТипСсылкиСтрокой,Менеджер,ОбъектМД,ВозможенПоискПоПредопределенным,ПКО", Имя, ИмяТипа, ТипСсылкиСтрокой, Менеджер, ОбъектМД, Ложь); - + Структура = СтруктураПараметровМенеджера(Имя, ИмяТипа, ТипСсылкиСтрокой, Менеджер, ОбъектМД); + Если ИмяТипа = "РегистрСведений" Тогда Периодический = (ОбъектМД.ПериодичностьРегистраСведений <> Метаданные.СвойстваОбъектов.ПериодичностьРегистраСведений.Непериодический); @@ -15994,23 +16089,23 @@ Менеджеры.Вставить(ТипСсылки, Структура); + СтруктураДляПланаОбмена = СтруктураПараметровПланаОбмена(Имя, ТипСсылки, Ложь, Истина); - СтруктураДляПланаОбмена = Новый Структура("Имя,ТипСсылки,ЭтоСсылочныйТип,ЭтоРегистр", Имя, ТипСсылки, Ложь, Истина); МенеджерыДляПлановОбмена.Вставить(ОбъектМД, СтруктураДляПланаОбмена); ТипСсылкиСтрокой = ПрефиксИмениТипаВыборка + "." + Имя; ТипСсылки = Тип(ТипСсылкиСтрокой); - Структура = Новый Структура("Имя,ИмяТипа,ТипСсылкиСтрокой,Менеджер,ОбъектМД,ВозможенПоискПоПредопределенным,ПКО", Имя, ИмяТипа, ТипСсылкиСтрокой, Менеджер, ОбъектМД, Ложь); - + Структура = СтруктураПараметровМенеджера(Имя, ИмяТипа, ТипСсылкиСтрокой, Менеджер, ОбъектМД); + Если Периодический <> Неопределено Тогда Структура.Вставить("Периодический", Периодический); - Структура.Вставить("ПодчиненныйРегистратору", ПодчиненныйРегистратору); + Структура.Вставить("ПодчиненныйРегистратору", ПодчиненныйРегистратору); КонецЕсли; - Менеджеры.Вставить(ТипСсылки, Структура); + Менеджеры.Вставить(ТипСсылки, Структура); КонецПроцедуры @@ -16080,8 +16175,10 @@ СтрокаПоиска = ""; ТипСсылкиСтрокой = "ТочкаМаршрутаБизнесПроцессаСсылка." + Имя; ТипСсылки = Тип(ТипСсылкиСтрокой); - Структура = Новый Структура("Имя,ИмяТипа,ТипСсылкиСтрокой,Менеджер,ОбъектМД,ПКО,ПустаяСсылка,ВозможенПоискПоПредопределенным,СтрокаПоиска", Имя, - ИмяТипа, ТипСсылкиСтрокой, Менеджер, ОбъектМД, , Неопределено, Ложь, СтрокаПоиска); + Структура = СтруктураПараметровМенеджера(Имя, ИмяТипа, ТипСсылкиСтрокой, Менеджер, ОбъектМД); + Структура.Вставить("ПустаяСсылка", Неопределено); + Структура.Вставить("СтрокаПоиска", СтрокаПоиска); + Менеджеры.Вставить(ТипСсылки, Структура); КонецЦикла; @@ -16120,7 +16217,9 @@ Менеджер = Перечисления[Имя]; ТипСсылкиСтрокой = "ПеречислениеСсылка." + Имя; ТипСсылки = Тип(ТипСсылкиСтрокой); - Структура = Новый Структура("Имя,ИмяТипа,ТипСсылкиСтрокой,Менеджер,ОбъектМД,ПКО,ПустаяСсылка,ВозможенПоискПоПредопределенным", Имя, ИмяТипа, ТипСсылкиСтрокой, Менеджер, ОбъектМД, , Перечисления[Имя].ПустаяСсылка(), Ложь); + Структура = СтруктураПараметровМенеджера(Имя, ИмяТипа, ТипСсылкиСтрокой, Менеджер, ОбъектМД); + Структура.Вставить("ПустаяСсылка", Перечисления[Имя].ПустаяСсылка()); + Менеджеры.Вставить(ТипСсылки, Структура); КонецЦикла; @@ -16132,7 +16231,8 @@ Менеджер = Константы; ТипСсылкиСтрокой = "КонстантыНабор"; ТипСсылки = Тип(ТипСсылкиСтрокой); - Структура = Новый Структура("Имя,ИмяТипа,ТипСсылкиСтрокой,Менеджер,ОбъектМД,ВозможенПоискПоПредопределенным,ПКО", Имя, ИмяТипа, ТипСсылкиСтрокой, Менеджер, ОбъектМД, Ложь); + Структура = СтруктураПараметровМенеджера(Имя, ИмяТипа, ТипСсылкиСтрокой, Менеджер, ОбъектМД); + Менеджеры.Вставить(ТипСсылки, Структура); КонецПроцедуры @@ -16214,6 +16314,10 @@ ТипРегистрСоответствия = Тип("РегистрСведенийНаборЗаписей.СоответствияОбъектовИнформационныхБаз"); ЗначениеПустаяДата = Дата('00010101'); + + КоличествоОбъектовКЗагрузке = 0; + КоличествоОбъектовКВыгрузке = 0; + РазмерФайлаСообщенияОбмена = 0; // Типы узлов xml @@ -16295,18 +16399,33 @@ КонецПроцедуры -Процедура УвеличитьСчетчикВыгруженныхОбъектов() - - Инкремент(ПолеСчетчикВыгруженныхОбъектов); - -КонецПроцедуры - Процедура УвеличитьСчетчикЗагруженныхОбъектов() Инкремент(ПолеСчетчикЗагруженныхОбъектов); КонецПроцедуры +Функция СтруктураПараметровМенеджера(Имя, ИмяТипа, ТипСсылкиСтрокой, Менеджер, ОбъектМД) + Структура = Новый Структура(); + Структура.Вставить("Имя", Имя); + Структура.Вставить("ИмяТипа", ИмяТипа); + Структура.Вставить("ТипСсылкиСтрокой", ТипСсылкиСтрокой); + Структура.Вставить("Менеджер", Менеджер); + Структура.Вставить("ОбъектМД", ОбъектМД); + Структура.Вставить("ВозможенПоискПоПредопределенным", Ложь); + Структура.Вставить("ПКО"); + Возврат Структура; +КонецФункции + +Функция СтруктураПараметровПланаОбмена(Имя, ТипСсылки, ЭтоСсылочныйТип, ЭтоРегистр) + Структура = Новый Структура(); + Структура.Вставить("Имя",Имя); + Структура.Вставить("ТипСсылки",ТипСсылки); + Структура.Вставить("ЭтоСсылочныйТип",ЭтоСсылочныйТип); + Структура.Вставить("ЭтоРегистр",ЭтоРегистр); + Возврат Структура; +КонецФункции + //////////////////////////////////////////////////////////////////////////////// // ПРОЦЕДУРЫ ОБРАБОТЧИКОВ @@ -16424,52 +16543,11 @@ КонецПроцедуры -Процедура ВыполнитьОбработчик_Конвертация_ПередКонвертациейОбъекта(ФайлОбмена, Источник, ВходящиеДанные, ИсходящиеДанные, - ИмяПКО, ПКО, ВыгруженныеОбъекты, Отказ, КлючВыгружаемыхДанных, - ЗапоминатьВыгруженные, НеЗамещатьОбъектПриЗагрузке, - ВсеОбъектыВыгружены,ТолькоПолучитьУзелСсылки, Приемник, - РежимЗаписи, РежимПроведения, НеСоздаватьЕслиНеНайден) - - ПараметрыОбработчика = Новый Массив(); - ПараметрыОбработчика.Добавить(ФайлОбмена); - ПараметрыОбработчика.Добавить(Источник); - ПараметрыОбработчика.Добавить(ВходящиеДанные); - ПараметрыОбработчика.Добавить(ИсходящиеДанные); - ПараметрыОбработчика.Добавить(ИмяПКО); - ПараметрыОбработчика.Добавить(ПКО); - ПараметрыОбработчика.Добавить(ВыгруженныеОбъекты); - ПараметрыОбработчика.Добавить(Отказ); - ПараметрыОбработчика.Добавить(КлючВыгружаемыхДанных); - ПараметрыОбработчика.Добавить(ЗапоминатьВыгруженные); - ПараметрыОбработчика.Добавить(НеЗамещатьОбъектПриЗагрузке); - ПараметрыОбработчика.Добавить(ВсеОбъектыВыгружены); - ПараметрыОбработчика.Добавить(ТолькоПолучитьУзелСсылки); - ПараметрыОбработчика.Добавить(Приемник); - ПараметрыОбработчика.Добавить(РежимЗаписи); - ПараметрыОбработчика.Добавить(РежимПроведения); - ПараметрыОбработчика.Добавить(НеСоздаватьЕслиНеНайден); +Процедура ВыполнитьОбработчик_Конвертация_ПередКонвертациейОбъекта(ПараметрыОбработчика) РаботаВБезопасномРежиме.ВыполнитьМетодОбъекта( ОбработкаВыгрузки, Конвертация.ИмяОбработчикаПередКонвертациейОбъекта, ПараметрыОбработчика); - ФайлОбмена = ПараметрыОбработчика[0]; - Источник = ПараметрыОбработчика[1]; - ВходящиеДанные = ПараметрыОбработчика[2]; - ИсходящиеДанные = ПараметрыОбработчика[3]; - ИмяПКО = ПараметрыОбработчика[4]; - ПКО = ПараметрыОбработчика[5]; - ВыгруженныеОбъекты = ПараметрыОбработчика[6]; - Отказ = ПараметрыОбработчика[7]; - КлючВыгружаемыхДанных = ПараметрыОбработчика[8]; - ЗапоминатьВыгруженные = ПараметрыОбработчика[9]; - НеЗамещатьОбъектПриЗагрузке = ПараметрыОбработчика[10]; - ВсеОбъектыВыгружены = ПараметрыОбработчика[11]; - ТолькоПолучитьУзелСсылки = ПараметрыОбработчика[12]; - Приемник = ПараметрыОбработчика[13]; - РежимЗаписи = ПараметрыОбработчика[14]; - РежимПроведения = ПараметрыОбработчика[15]; - НеСоздаватьЕслиНеНайден = ПараметрыОбработчика[16]; - КонецПроцедуры Процедура ВыполнитьОбработчик_Конвертация_ПередОтправкойИнформацииОбУдалении(Ссылка, Отказ) @@ -17385,8 +17463,7 @@ #КонецОбласти -//////////////////////////////////////////////////////////////////////////////// -// ОПЕРАТОРЫ ОСНОВНОЙ ПРОГРАММЫ +#Область ОператорыОсновнойПрограммы ИнициализацияРеквизитовИМодульныхПеременных(); @@ -17394,4 +17471,7 @@ ИнициализацияТаблицыПравилВыгрузки(); ИнициализацияТаблицыПравилОчистки(); ИнициализацияТаблицыНастройкиПараметров(); + +#КонецОбласти + #КонецЕсли diff --git a/SSL/src/DataProcessors/КонвертацияОбъектовИнформационныхБаз/КонвертацияОбъектовИнформационныхБаз.mdo b/SSL/src/DataProcessors/КонвертацияОбъектовИнформационныхБаз/КонвертацияОбъектовИнформационныхБаз.mdo index 5754bfa5c..6136b2360 100644 --- a/SSL/src/DataProcessors/КонвертацияОбъектовИнформационныхБаз/КонвертацияОбъектовИнформационныхБаз.mdo +++ b/SSL/src/DataProcessors/КонвертацияОбъектовИнформационныхБаз/КонвертацияОбъектовИнформационныхБаз.mdo @@ -503,7 +503,7 @@ - ФлагРежимОтладки + РежимОтладки ru Режим отладки @@ -514,6 +514,26 @@ + + КоличествоОбъектовКЗагрузкеВнешнееСоединение + + ru + Количество объектов к загрузке внешнее соединение + + + Number + + 10 + true + + + + ru + Количество объектов подлежащих к загрузке через внешнее соединение. Заполняется обработкой, выполняющей выгрузку на стороне базы-корреспондента + + + + Форма diff --git a/SSL/src/DataProcessors/КонвертацияОбъектовРаспределенныхИнформационныхБаз/Forms/Форма/Form.form b/SSL/src/DataProcessors/КонвертацияОбъектовРаспределенныхИнформационныхБаз/Forms/Форма/Form.form index 1b3945ea1..e724cbb13 100644 --- a/SSL/src/DataProcessors/КонвертацияОбъектовРаспределенныхИнформационныхБаз/Forms/Форма/Form.form +++ b/SSL/src/DataProcessors/КонвертацияОбъектовРаспределенныхИнформационныхБаз/Forms/Форма/Form.form @@ -18,7 +18,6 @@ true true true - UseIfNecessary auto true diff --git a/SSL/src/DataProcessors/КонвертацияОбъектовРаспределенныхИнформационныхБаз/ObjectModule.bsl b/SSL/src/DataProcessors/КонвертацияОбъектовРаспределенныхИнформационныхБаз/ObjectModule.bsl index cd52a0c1b..723ae76b2 100644 --- a/SSL/src/DataProcessors/КонвертацияОбъектовРаспределенныхИнформационныхБаз/ObjectModule.bsl +++ b/SSL/src/DataProcessors/КонвертацияОбъектовРаспределенныхИнформационныхБаз/ObjectModule.bsl @@ -24,6 +24,31 @@ И (ОбменДаннымиВызовСервера.ПовторитьЗагрузкуСообщенияОбменаДаннымиПередЗапуском() ИЛИ НЕ ОбменДаннымиВызовСервера.РежимЗагрузкиСообщенияОбменаДаннымиПередЗапуском( "СообщениеПолученоИзКэша")); + + РезультатПодсчетаДанныхКЗагрузке = ОбменДаннымиСервер.РезультатПодсчетаДанныхКЗагрузке(ИмяФайлаСообщенияОбмена(), Ложь, Истина); + РазмерФайлаСообщенияОбмена = РезультатПодсчетаДанныхКЗагрузке.РазмерФайлаСообщенияОбмена; + КоличествоОбъектовКЗагрузке = РезультатПодсчетаДанныхКЗагрузке.КоличествоОбъектовКЗагрузке; + + // Установка параметров сеанса. + ПараметрыСеансаСинхронизацииДанных = Новый Соответствие; + УстановитьПривилегированныйРежим(Истина); + Попытка + ТекущийПараметрСеанса = ПараметрыСеанса.ПараметрыСеансаСинхронизацииДанных.Получить(); + Исключение + ТекущийПараметрСеанса = Неопределено; + КонецПопытки; + + Если ТипЗнч(ТекущийПараметрСеанса) = Тип("Соответствие") Тогда + Для Каждого Элемент Из ТекущийПараметрСеанса Цикл + ПараметрыСеансаСинхронизацииДанных.Вставить(Элемент.Ключ, Элемент.Значение); + КонецЦикла; + КонецЕсли; + + ПараметрыСеансаСинхронизацииДанных.Вставить(УзелИнформационнойБазы, + Новый Структура("РазмерФайлаСообщенияОбмена, КоличествоОбъектовКЗагрузке", + РазмерФайлаСообщенияОбмена, КоличествоОбъектовКЗагрузке)); + ПараметрыСеанса.ПараметрыСеансаСинхронизацииДанных = Новый ХранилищеЗначения(ПараметрыСеансаСинхронизацииДанных); + УстановитьПривилегированныйРежим(Ложь); ЧтениеXML = Новый ЧтениеXML; @@ -120,7 +145,7 @@ // Получаем изменения конфигурации, изменения данных игнорируем. ПланыОбмена.ПрочитатьИзменения(ЧтениеСообщения, КоличествоЭлементовВТранзакции); - // Читаем приоритетные данные (идентификаторы объектов метаданных). + // Читаем приоритетные данные (предопределенные элементы, идентификаторы объектов метаданных). ПрочитатьПриоритетныеИзмененияИзСообщенияОбмена(ЧтениеСообщения, УзелОбщихДанных); // Сообщение считаем не принятым, для этого прерываем чтение. @@ -150,7 +175,7 @@ ЧтениеСообщения.ЧтениеXML.Прочитать(); // - // Читаем приоритетные данные (идентификаторы объектов метаданных). + // Читаем приоритетные данные (предопределенные элементы, идентификаторы объектов метаданных). ПрочитатьПриоритетныеИзмененияИзСообщенияОбмена(ЧтениеСообщения, УзелОбщихДанных); // Сообщение считаем не принятым, для этого прерываем чтение. @@ -170,7 +195,7 @@ // Получаем изменения конфигурации и изменения данных из сообщения обмена. ПланыОбмена.ПрочитатьИзменения(ЧтениеСообщения, КоличествоЭлементовВТранзакции); - // Читаем приоритетные данные (идентификаторы объектов метаданных). + // Читаем приоритетные данные (предопределенные элементы, идентификаторы объектов метаданных). ПрочитатьПриоритетныеИзмененияИзСообщенияОбмена(ЧтениеСообщения, УзелОбщихДанных); // Сообщение считаем принятым @@ -217,7 +242,8 @@ // Записываем изменения конфигурации и изменения данных в сообщение обмена. ПланыОбмена.ЗаписатьИзменения(ЗаписьСообщения, КоличествоЭлементовВТранзакции); - // Записываем приоритетные данные в конец сообщения обмена. + // Записываем приоритетные данные в конец сообщения обмена + // (предопределенные элементы, идентификаторы объектов метаданных). ЗаписатьПриоритетныеИзмененияВСообщениеОбмена(ЗаписьСообщения); ЗаписьСообщения.ЗакончитьЗапись(); @@ -230,7 +256,7 @@ КонецПроцедуры // Запись приоритетных данных в сообщение обмена. -// Например, идентификаторов объектов метаданных. +// Например, предопределенных элементов и идентификаторов объектов метаданных. // Процедура ЗаписатьПриоритетныеИзмененияВСообщениеОбмена(Знач ЗаписьСообщения) @@ -266,7 +292,7 @@ КонецЕсли; - Если Не СтандартныеПодсистемыПовтИсп.ОтключитьСправочникИдентификаторыОбъектовМетаданных() Тогда + Если Не СтандартныеПодсистемыПовтИсп.ОтключитьИдентификаторыОбъектовМетаданных() Тогда // Выгружаем справочник идентификаторов объектов метаданных. ВыборкаИзменений = ОбменДаннымиСервер.ВыбратьИзменения( @@ -315,8 +341,8 @@ КонецПроцедуры -// Чтение приоритетных данных из сообщения обмена. -// Например, идентификаторов объектов метаданных. +// Чтение приоритетных данных из сообщения обмена +// (предопределенные элементы, идентификаторы объектов метаданных). // Процедура ПрочитатьПриоритетныеИзмененияИзСообщенияОбмена(Знач ЧтениеСообщения, УзелОбщихДанных) @@ -381,7 +407,7 @@ Если Отказ Тогда ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Загрузка важных изменений не выполнена. + НСтр("ru = 'Загрузка приоритетных данных не выполнена. |При загрузке предопределенных элементов найдены не уникальные записи. |По следующим причинам продолжение невозможно. |%1'"), @@ -403,7 +429,9 @@ ОбновитьУдалениеПредопределенных(); - Справочники.ИдентификаторыОбъектовМетаданных.ЗагрузитьДанныеВПодчиненныйУзел(ОбъектыИдентификаторов); + Если Не СтандартныеПодсистемыПовтИсп.ОтключитьИдентификаторыОбъектовМетаданных() Тогда + Справочники.ИдентификаторыОбъектовМетаданных.ЗагрузитьДанныеВПодчиненныйУзел(ОбъектыИдентификаторов); + КонецЕсли; ЗафиксироватьТранзакцию(); Исключение @@ -602,7 +630,7 @@ Функция ШаблонОшибкиНеУникальностиЗаписей() Возврат - НСтр("ru = 'Загрузка важных изменений не выполнена. + НСтр("ru = 'Загрузка приоритетных данных не выполнена. |%1 |Требуется исправление информационной базы. |1. Откройте конфигуратор, перейдите в меню Администрирование, @@ -653,7 +681,7 @@ Пока Выборка.Следующий() Цикл - Если Лев(Выборка.ИмяПредопределенныхДанных, 1) = "#" Тогда + Если СтрНачинаетсяС(Выборка.ИмяПредопределенныхДанных, "#") Тогда Объект = Выборка.Ссылка.ПолучитьОбъект(); Объект.ИмяПредопределенныхДанных = ""; diff --git a/SSL/src/DataProcessors/ЛегальностьПолученияОбновлений/Forms/ПроверкаЛегальностиПолученияОбновления/Form.form b/SSL/src/DataProcessors/ЛегальностьПолученияОбновлений/Forms/ПроверкаЛегальностиПолученияОбновления/Form.form index 5be917f36..d5468b717 100644 --- a/SSL/src/DataProcessors/ЛегальностьПолученияОбновлений/Forms/ПроверкаЛегальностиПолученияОбновления/Form.form +++ b/SSL/src/DataProcessors/ЛегальностьПолученияОбновлений/Forms/ПроверкаЛегальностиПолученияОбновления/Form.form @@ -131,6 +131,218 @@ Left + + ГруппаОтправкаСтатистики + 26 + + ДекорацияОтсупПередОтправкойСтатистики + 18 + true + true + + true + + + ДекорацияОтсупПередОтправкойСтатистикиРасширеннаяПодсказка + 20 + Label + true + true + + Left + + + + ДекорацияОтсупПередОтправкойСтатистикиКонтекстноеМеню + 19 + true + + Label + true + true + + Left + + + + РазрешитьОтправкуСтатистики + 12 + + <key>ru</key> + <value>Разрешить автоматическую отправку сведений об использовании программы в фирму "1С"</value> + + true + true + + true + + + РазрешитьОтправкуСтатистики + + Right + + РазрешитьОтправкуСтатистикиРасширеннаяПодсказка + 14 + Label + true + true + + Left + + + + РазрешитьОтправкуСтатистикиКонтекстноеМеню + 13 + true + + CheckBoxField + Enter + true + Left + true + + + + ГруппаОтправкаСтатистикиПояснение + 21 + + ДекорацияОтсупПояснение + 23 + true + true + + true + + + ДекорацияОтсупПояснениеРасширеннаяПодсказка + 25 + Label + true + true + + Left + + + + ДекорацияОтсупПояснениеКонтекстноеМеню + 24 + true + + Label + true + true + + Left + + + + ДекорацияПояснение + 15 + + <key>ru</key> + <value>Собранные сведения включают в себя только технические характеристики работы программы, являются обезличенными и не содержат информации о пользователях или бизнес-информации.</value> + + true + true + + true + + Button + + ДекорацияПояснениеРасширеннаяПодсказка + 17 + + <key>ru</key> + <value>Отчеты об использовании программы помогают нам определить, над чем следует поработать в первую очередь. Вы можете в любой момент отключить отправку технических отчетов.</value> + + Label + true + true + + Left + + + + ДекорацияПояснениеКонтекстноеМеню + 16 + true + + Label + true + true + + Style.ПоясняющийТекст + + + Left + Top + + + true + true + + true + + + <key>ru</key> + <value>Группа отправка статистики пояснение</value> + + + ru + Группа отправка статистики пояснение + + + ГруппаОтправкаСтатистикиПояснениеРасширеннаяПодсказка + 22 + Label + true + true + + Left + + + UsualGroup + + Auto + true + true + Auto + Auto + + + true + true + + true + + + <key>ru</key> + <value>Группа отправка статистики</value> + + + ru + Группа отправка статистики + + + ГруппаОтправкаСтатистикиРасширеннаяПодсказка + 27 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + true + true + Auto + Auto + + Bottom true @@ -271,6 +483,23 @@ true + + РазрешитьОтправкуСтатистики + + <key>ru</key> + <value>Разрешить отправку статистики</value> + + 6 + + Boolean + + + true + + + true + + Продолжить @@ -290,7 +519,7 @@ <name>ОсновныеДействияФормыПродолжить</name> </handler> </action> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <parameters> diff --git a/SSL/src/DataProcessors/ЛегальностьПолученияОбновлений/Forms/ПроверкаЛегальностиПолученияОбновления/Module.bsl b/SSL/src/DataProcessors/ЛегальностьПолученияОбновлений/Forms/ПроверкаЛегальностиПолученияОбновления/Module.bsl index 956f77a86..8793af0d7 100644 --- a/SSL/src/DataProcessors/ЛегальностьПолученияОбновлений/Forms/ПроверкаЛегальностиПолученияОбновления/Module.bsl +++ b/SSL/src/DataProcessors/ЛегальностьПолученияОбновлений/Forms/ПроверкаЛегальностиПолученияОбновления/Module.bsl @@ -22,6 +22,25 @@ ПодтверждениеВыбора = 0; // Пользователю требуется явно выбрать один из вариантов. Элементы.Примечание.Видимость = Параметры.ПоказыватьПредупреждениеОПерезапуске; + // СтандартныеПодсистемы.ЦентрМониторинга + // + ЦентрМониторингаСуществует = ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ЦентрМониторинга"); + Если ЦентрМониторингаСуществует Тогда + МодульЦентрМониторингаСлужебный = ОбщегоНазначения.ОбщийМодуль("ЦентрМониторингаСлужебный"); + ПараметрыЦентраМониторинга = МодульЦентрМониторингаСлужебный.ПолучитьПараметрыЦентраМониторингаВнешнийВызов(); + + Если (НЕ ПараметрыЦентраМониторинга.ВключитьЦентрМониторинга И НЕ ПараметрыЦентраМониторинга.ЦентрОбработкиИнформацииОПрограмме) Тогда + РазрешитьОтправкуСтатистики = Истина; + Элементы.ГруппаОтправкаСтатистики.Видимость = Истина; + Иначе + РазрешитьОтправкуСтатистики = Истина; + Элементы.ГруппаОтправкаСтатистики.Видимость = Ложь; + КонецЕсли; + Иначе + Элементы.ГруппаОтправкаСтатистики.Видимость = Ложь; + КонецЕсли; + // Конец СтандартныеПодсистемы.ЦентрМониторинга + // КонецПроцедуры #КонецОбласти @@ -38,7 +57,7 @@ ПрекратитьРаботуСистемы(); КонецЕсли; Иначе - ЗаписатьПодтверждениеЛегальностиПолученияОбновлений(); + ЗаписатьПодтверждениеЛегальностиПолученияОбновлений(РазрешитьОтправкуСтатистики); КонецЕсли; Закрыть(Результат); @@ -53,7 +72,7 @@ ПрекратитьРаботуСистемы(); КонецЕсли; Иначе - ЗаписатьПодтверждениеЛегальностиПолученияОбновлений(); + ЗаписатьПодтверждениеЛегальностиПолученияОбновлений(РазрешитьОтправкуСтатистики); КонецЕсли; Оповестить("ЛегальностьПолученияОбновлений", Результат); @@ -65,12 +84,37 @@ #Область СлужебныеПроцедурыИФункции &НаСервереБезКонтекста -Процедура ЗаписатьПодтверждениеЛегальностиПолученияОбновлений() +Процедура ЗаписатьПодтверждениеЛегальностиПолученияОбновлений(РазрешитьОтправкуСтатистики) УстановитьПривилегированныйРежим(Истина); ОбновлениеИнформационнойБазыСлужебный.ЗаписатьПодтверждениеЛегальностиПолученияОбновлений(); + ЦентрМониторингаСуществует = ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ЦентрМониторинга"); + Если ЦентрМониторингаСуществует Тогда + МодульЦентрМониторингаСлужебный = ОбщегоНазначения.ОбщийМодуль("ЦентрМониторингаСлужебный"); + + ПараметрыОтправкиСтатистики = Новый Структура("ВключитьЦентрМониторинга, ЦентрОбработкиИнформацииОПрограмме", Неопределено, Неопределено); + ПараметрыОтправкиСтатистики = МодульЦентрМониторингаСлужебный.ПолучитьПараметрыЦентраМониторингаВнешнийВызов(ПараметрыОтправкиСтатистики); + + Если (НЕ ПараметрыОтправкиСтатистики.ВключитьЦентрМониторинга И ПараметрыОтправкиСтатистики.ЦентрОбработкиИнформацииОПрограмме) Тогда + // Настроена отправка статистики стороннему разработчику + // настройки не меняем + // + Иначе + Если РазрешитьОтправкуСтатистики Тогда + МодульЦентрМониторингаСлужебный.УстановитьПараметрЦентраМониторингаВнешнийВызов("ВключитьЦентрМониторинга", РазрешитьОтправкуСтатистики); + МодульЦентрМониторингаСлужебный.УстановитьПараметрЦентраМониторингаВнешнийВызов("ЦентрОбработкиИнформацииОПрограмме", Ложь); + РегЗадание = МодульЦентрМониторингаСлужебный.ПолучитьРегламентноеЗаданиеВнешнийВызов("СборИОтправкаСтатистики", Истина); + МодульЦентрМониторингаСлужебный.УстановитьРасписаниеПоУмолчаниюВнешнийВызов(РегЗадание); + Иначе + МодульЦентрМониторингаСлужебный.УстановитьПараметрЦентраМониторингаВнешнийВызов("ВключитьЦентрМониторинга", РазрешитьОтправкуСтатистики); + МодульЦентрМониторингаСлужебный.УстановитьПараметрЦентраМониторингаВнешнийВызов("ЦентрОбработкиИнформацииОПрограмме", Ложь); + МодульЦентрМониторингаСлужебный.УдалитьРегламентноеЗаданиеВнешнийВызов("СборИОтправкаСтатистики"); + КонецЕсли; + КонецЕсли; + КонецЕсли; + КонецПроцедуры #КонецОбласти diff --git a/SSL/src/DataProcessors/ЛегальностьПолученияОбновлений/Help/ru.html b/SSL/src/DataProcessors/ЛегальностьПолученияОбновлений/Help/ru.html index fc0e5c5d0..89679d292 100644 --- a/SSL/src/DataProcessors/ЛегальностьПолученияОбновлений/Help/ru.html +++ b/SSL/src/DataProcessors/ЛегальностьПолученияОбновлений/Help/ru.html @@ -3,4 +3,6 @@ <p>При обновлении программа запрашивает у администратора подтверждение, что файлы обновления были получены легальным способом. </p> <p>Выберите с помощью переключателя:</p> <ul><li><strong>Я подтверждаю легальность получения обновления в соответствии с вышеизложенными условиями</strong> - в этом случае будет проведено обновление программы. -</li><li><strong>Я НЕ подтверждаю легальность получения обновления в соответствии с вышеизложенными условиями</strong> - в этом случае работа программы будет завершена.</li></ul></body></html> \ No newline at end of file +</li><li><strong>Я НЕ подтверждаю легальность получения обновления в соответствии с вышеизложенными условиями</strong> - в этом случае работа программы будет завершена.</li></ul><p>Приводятся <strong>Условия распространения обновлений программ "1С:Предприятие"</strong>, в тексте которых размещены полезные сведения и ссылки: о договоре на ИТС, поддержке программных продуктов, партнерах фирмы "1С".</p> +<p>По умолчанию включен флажок <strong>Разрешить автоматическую отправку сведений об использовании программы в фирму "1С"</strong>. В этом случае в фирму "1С" будут автоматически отправляться отчеты об использовании программы. Собранные сведения являются обезличенными и содержат только статистические показатели.</p> +<p>Подготовка и отправка отчетов не замедлит работу программы, при этом отчеты об использовании программы помогут разработчикам определить, над чем стоит поработать в первую очередь. Поэтому флажок не рекомендуется выключать.</p></body></html> \ No newline at end of file diff --git a/SSL/src/DataProcessors/НастройкаРазрешенийНаИспользованиеВнешнихРесурсов/Commands/НастройкиИспользованияПрофилейБезопасности/CommandModule.bsl b/SSL/src/DataProcessors/НастройкаРазрешенийНаИспользованиеВнешнихРесурсов/Commands/НастройкиИспользованияПрофилейБезопасности/CommandModule.bsl index 59efbca6f..48fb78c11 100644 --- a/SSL/src/DataProcessors/НастройкаРазрешенийНаИспользованиеВнешнихРесурсов/Commands/НастройкиИспользованияПрофилейБезопасности/CommandModule.bsl +++ b/SSL/src/DataProcessors/НастройкаРазрешенийНаИспользованиеВнешнихРесурсов/Commands/НастройкиИспользованияПрофилейБезопасности/CommandModule.bsl @@ -1,3 +1,4 @@ +#Область ОбработчикиСобытий &НаКлиенте Процедура ОбработкаКоманды(ПараметрКоманды, ПараметрыВыполненияКоманды) @@ -5,3 +6,5 @@ РаботаВБезопасномРежимеКлиент.ОткрытьДиалогНастройкиИспользованияПрофилейБезопасности(); КонецПроцедуры + +#КонецОбласти \ No newline at end of file diff --git a/SSL/src/DataProcessors/НастройкаРазрешенийНаИспользованиеВнешнихРесурсов/Forms/НастройкаРазрешенийНаИспользованиеВнешнихРесурсов/Form.form b/SSL/src/DataProcessors/НастройкаРазрешенийНаИспользованиеВнешнихРесурсов/Forms/НастройкаРазрешенийНаИспользованиеВнешнихРесурсов/Form.form index ad5dcf302..3a1848b78 100644 --- a/SSL/src/DataProcessors/НастройкаРазрешенийНаИспользованиеВнешнихРесурсов/Forms/НастройкаРазрешенийНаИспользованиеВнешнихРесурсов/Form.form +++ b/SSL/src/DataProcessors/НастройкаРазрешенийНаИспользованиеВнешнихРесурсов/Forms/НастройкаРазрешенийНаИспользованиеВнешнихРесурсов/Form.form @@ -2961,7 +2961,7 @@ <name>Далее</name> </handler> </action> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <formCommands> @@ -2983,7 +2983,7 @@ <name>Назад</name> </handler> </action> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <formCommands> @@ -3005,7 +3005,7 @@ <name>ПеререгистрироватьCOMСоединитель</name> </handler> </action> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <parameters> diff --git a/SSL/src/DataProcessors/НастройкаРазрешенийНаИспользованиеВнешнихРесурсов/Forms/НастройкаРазрешенийНаИспользованиеВнешнихРесурсов/Module.bsl b/SSL/src/DataProcessors/НастройкаРазрешенийНаИспользованиеВнешнихРесурсов/Forms/НастройкаРазрешенийНаИспользованиеВнешнихРесурсов/Module.bsl index 8e007697f..a9fadcf9c 100644 --- a/SSL/src/DataProcessors/НастройкаРазрешенийНаИспользованиеВнешнихРесурсов/Forms/НастройкаРазрешенийНаИспользованиеВнешнихРесурсов/Module.bsl +++ b/SSL/src/DataProcessors/НастройкаРазрешенийНаИспользованиеВнешнихРесурсов/Forms/НастройкаРазрешенийНаИспользованиеВнешнихРесурсов/Module.bsl @@ -74,7 +74,7 @@ ИдентификаторАдминистратораИБ = ПользовательИБ.УникальныйИдентификатор; КонецЕсли; - Пользователи.НайтиНеоднозначныхПользователейИБ(, ИдентификаторАдминистратораИБ); + Пользователи.НайтиНеоднозначныхПользователейИБ(Неопределено, ИдентификаторАдминистратораИБ); АдминистраторИБ = Справочники.Пользователи.НайтиПоРеквизиту("ИдентификаторПользователяИБ", ИдентификаторАдминистратораИБ); Элементы.ГруппаАдминистрирование.Видимость = ТребуютсяПараметрыАдминистрированияИнформационнойБазы; diff --git a/SSL/src/DataProcessors/НастройкаРазрешенийНаИспользованиеВнешнихРесурсов/Forms/НастройкиИспользованияПрофилейБезопасности/Form.form b/SSL/src/DataProcessors/НастройкаРазрешенийНаИспользованиеВнешнихРесурсов/Forms/НастройкиИспользованияПрофилейБезопасности/Form.form index db3f6df5f..4c1094046 100644 --- a/SSL/src/DataProcessors/НастройкаРазрешенийНаИспользованиеВнешнихРесурсов/Forms/НастройкиИспользованияПрофилейБезопасности/Form.form +++ b/SSL/src/DataProcessors/НастройкаРазрешенийНаИспользованиеВнешнихРесурсов/Forms/НастройкиИспользованияПрофилейБезопасности/Form.form @@ -1107,7 +1107,6 @@ <group>Vertical</group> <autoFillCheck>true</autoFillCheck> <enabled>true</enabled> - <verticalScroll>UseIfNecessary</verticalScroll> <showTitle>auto</showTitle> <showCloseButton>true</showCloseButton> <attributes> @@ -1217,7 +1216,7 @@ <name>ВосстановитьПрофилиБезопасности</name> </handler> </action> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <formCommands> @@ -1239,7 +1238,7 @@ <name>ТребуемыеРазрешения</name> </handler> </action> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <formCommands> @@ -1261,7 +1260,7 @@ <name>ОткрытьВнешнююОбработку</name> </handler> </action> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <commandInterface> diff --git a/SSL/src/DataProcessors/НастройкаРазрешенийНаИспользованиеВнешнихРесурсов/Forms/НастройкиИспользованияПрофилейБезопасности/Module.bsl b/SSL/src/DataProcessors/НастройкаРазрешенийНаИспользованиеВнешнихРесурсов/Forms/НастройкиИспользованияПрофилейБезопасности/Module.bsl index 5ff108469..159102034 100644 --- a/SSL/src/DataProcessors/НастройкаРазрешенийНаИспользованиеВнешнихРесурсов/Forms/НастройкиИспользованияПрофилейБезопасности/Module.bsl +++ b/SSL/src/DataProcessors/НастройкаРазрешенийНаИспользованиеВнешнихРесурсов/Forms/НастройкиИспользованияПрофилейБезопасности/Module.bsl @@ -303,7 +303,7 @@ КонстантаМенеджер.Установить(КонстантаЗначение); КонецЕсли; - СтандартныеПодсистемыКлиентСервер.РезультатВыполненияДобавитьОповещениеОткрытыхФорм(Результат, "Запись_НаборКонстант", Новый Структура, КонстантаИмя); + СтандартныеПодсистемыКлиентСервер.ОповеститьОткрытыеФормы(Результат, "Запись_НаборКонстант", Новый Структура, КонстантаИмя); КонецЕсли; diff --git a/SSL/src/DataProcessors/НастройкаРазрешенийНаИспользованиеВнешнихРесурсов/Forms/ОткрытиеВнешнейОбработкиИлиОтчетаСВыборомБезопасногоРежима/Form.form b/SSL/src/DataProcessors/НастройкаРазрешенийНаИспользованиеВнешнихРесурсов/Forms/ОткрытиеВнешнейОбработкиИлиОтчетаСВыборомБезопасногоРежима/Form.form index 8b993a519..d08527fde 100644 --- a/SSL/src/DataProcessors/НастройкаРазрешенийНаИспользованиеВнешнихРесурсов/Forms/ОткрытиеВнешнейОбработкиИлиОтчетаСВыборомБезопасногоРежима/Form.form +++ b/SSL/src/DataProcessors/НастройкаРазрешенийНаИспользованиеВнешнихРесурсов/Forms/ОткрытиеВнешнейОбработкиИлиОтчетаСВыборомБезопасногоРежима/Form.form @@ -292,7 +292,7 @@ </handler> </action> <representation>TextPicture</representation> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <commandInterface> diff --git a/SSL/src/DataProcessors/НастройкаРазрешенийНаИспользованиеВнешнихРесурсов/Forms/ОткрытиеВнешнейОбработкиИлиОтчетаСВыборомБезопасногоРежима/Module.bsl b/SSL/src/DataProcessors/НастройкаРазрешенийНаИспользованиеВнешнихРесурсов/Forms/ОткрытиеВнешнейОбработкиИлиОтчетаСВыборомБезопасногоРежима/Module.bsl index 82f1d3e56..aa31e3649 100644 --- a/SSL/src/DataProcessors/НастройкаРазрешенийНаИспользованиеВнешнихРесурсов/Forms/ОткрытиеВнешнейОбработкиИлиОтчетаСВыборомБезопасногоРежима/Module.bsl +++ b/SSL/src/DataProcessors/НастройкаРазрешенийНаИспользованиеВнешнихРесурсов/Forms/ОткрытиеВнешнейОбработкиИлиОтчетаСВыборомБезопасногоРежима/Module.bsl @@ -107,8 +107,7 @@ Иначе - ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Файл %1 не является файлом внешнего отчета или обработки'"), ФайлОбработкиИмя); + ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Файл %1 не является файлом внешнего отчета или обработки'"), ФайлОбработкиИмя); КонецЕсли; diff --git a/SSL/src/DataProcessors/НастройкаРазрешенийНаИспользованиеВнешнихРесурсов/ManagerModule.bsl b/SSL/src/DataProcessors/НастройкаРазрешенийНаИспользованиеВнешнихРесурсов/ManagerModule.bsl index 6fe4f4116..c6b498449 100644 --- a/SSL/src/DataProcessors/НастройкаРазрешенийНаИспользованиеВнешнихРесурсов/ManagerModule.bsl +++ b/SSL/src/DataProcessors/НастройкаРазрешенийНаИспользованиеВнешнихРесурсов/ManagerModule.bsl @@ -340,8 +340,7 @@ Иначе - ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Нарушение уникальности строк в таблице разрешений по отбору %1'"), + ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Нарушение уникальности строк в таблице разрешений по отбору %1'"), ОбщегоНазначения.ЗначениеВСтрокуXML(Отбор)); КонецЕсли; diff --git a/SSL/src/DataProcessors/НастройкаРазрешенийНаИспользованиеВнешнихРесурсов/ObjectModule.bsl b/SSL/src/DataProcessors/НастройкаРазрешенийНаИспользованиеВнешнихРесурсов/ObjectModule.bsl index 799525731..44222b12a 100644 --- a/SSL/src/DataProcessors/НастройкаРазрешенийНаИспользованиеВнешнихРесурсов/ObjectModule.bsl +++ b/SSL/src/DataProcessors/НастройкаРазрешенийНаИспользованиеВнешнихРесурсов/ObjectModule.bsl @@ -279,9 +279,7 @@ Имя = РегистрыСведений.РежимыПодключенияВнешнихМодулей.РежимПодключенияВнешнегоМодуля( РаботаВБезопасномРежимеСлужебный.СсылкаИзРегистраРазрешений( - ТипПрограммногоМодуля, ИдентификаторПрограммногоМодуля - ) - ); + ТипПрограммногоМодуля, ИдентификаторПрограммногоМодуля)); КонецЕсли; @@ -346,7 +344,7 @@ Отбор.Вставить("ИдентификаторПрограммногоМодуля", ИдентификаторПрограммногоМодуля); Отбор.Вставить("ТипВладельца", ТипВладельца); Отбор.Вставить("ИдентификаторВладельца", ИдентификаторВладельца); - Отбор.Вставить("Тип", ДобавляемоеРазрешение.Тип().Имя); + Отбор.Вставить("Тип", УдаляемоеРазрешение.Тип().Имя); Строка = Обработки.НастройкаРазрешенийНаИспользованиеВнешнихРесурсов.СтрокаТаблицыРазрешений( ПланПримененияЗапросов.Удаляемые, Отбор); @@ -354,7 +352,7 @@ КлючРазрешения = РегистрыСведений.РазрешенияНаИспользованиеВнешнихРесурсов.КлючРазрешения(УдаляемоеРазрешение); ДополнениеРазрешения = РегистрыСведений.РазрешенияНаИспользованиеВнешнихРесурсов.ДополнениеРазрешения(УдаляемоеРазрешение); - Строка.Разрешения.Добавить(КлючРазрешения, ОбщегоНазначения.ОбъектXDTOВСтрокуXML(УдаляемоеРазрешение)); + Строка.Разрешения.Вставить(КлючРазрешения, ОбщегоНазначения.ОбъектXDTOВСтрокуXML(УдаляемоеРазрешение)); Если ЗначениеЗаполнено(ДополнениеРазрешения) Тогда Строка.ДополненияРазрешений.Вставить(КлючРазрешения, ОбщегоНазначения.ЗначениеВСтрокуXML(ДополнениеРазрешения)); @@ -1029,6 +1027,14 @@ КонецЦикла; + ИначеЕсли Строка.Тип = "ExternalModule" Тогда + + ВнешнийМодуль = АдминистрированиеКластераКлиентСервер.СвойстваВнешнегоМодуля(); + ВнешнийМодуль.Имя = Разрешение.Name; + ВнешнийМодуль.ХэшСумма = Разрешение.Hash; + ВнешнийМодуль.Описание = Разрешение.Description; + Профиль.ВнешниеМодули.Добавить(ВнешнийМодуль); + ИначеЕсли Строка.Тип = "RunApplication" Тогда ПриложениеОС = АдминистрированиеКластераКлиентСервер.СвойстваПриложенияОС(); @@ -1077,9 +1083,9 @@ ИмяИБ = ""; СтрокаСоединения = СтрокаСоединенияИнформационнойБазы(); - Подстроки = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(СтрокаСоединения, ";"); + Подстроки = СтрРазделить(СтрокаСоединения, ";"); Для Каждого Подстрока Из Подстроки Цикл - Если Лев(Подстрока, 3) = "Ref" Тогда + Если СтрНачинаетсяС(Подстрока, "Ref") Тогда ИмяИБ = СтрЗаменить(Прав(Подстрока, СтрДлина(Подстрока) - 4), """", ""); КонецЕсли; КонецЦикла; diff --git a/SSL/src/DataProcessors/НастройкаРазрешенийНаИспользованиеВнешнихРесурсов/НастройкаРазрешенийНаИспользованиеВнешнихРесурсов.mdo b/SSL/src/DataProcessors/НастройкаРазрешенийНаИспользованиеВнешнихРесурсов/НастройкаРазрешенийНаИспользованиеВнешнихРесурсов.mdo index e3520598c..e12bca5c9 100644 --- a/SSL/src/DataProcessors/НастройкаРазрешенийНаИспользованиеВнешнихРесурсов/НастройкаРазрешенийНаИспользованиеВнешнихРесурсов.mdo +++ b/SSL/src/DataProcessors/НастройкаРазрешенийНаИспользованиеВнешнихРесурсов/НастройкаРазрешенийНаИспользованиеВнешнихРесурсов.mdo @@ -43,7 +43,7 @@ <name>НастройкиИспользованияПрофилейБезопасности</name> <synonym> <key>ru</key> - <value>Использование профилей безопасности</value> + <value>Настройки использования профилей безопасности</value> </synonym> <help> <pages> diff --git a/SSL/src/DataProcessors/НастройкаРезервногоКопированияИБ/Forms/Форма/Form.form b/SSL/src/DataProcessors/НастройкаРезервногоКопированияИБ/Forms/НастройкаРезервногоКопирования/Form.form similarity index 76% rename from SSL/src/DataProcessors/НастройкаРезервногоКопированияИБ/Forms/Форма/Form.form rename to SSL/src/DataProcessors/НастройкаРезервногоКопированияИБ/Forms/НастройкаРезервногоКопирования/Form.form index 2fd721c60..a7485f2a6 100644 --- a/SSL/src/DataProcessors/НастройкаРезервногоКопированияИБ/Forms/Форма/Form.form +++ b/SSL/src/DataProcessors/НастройкаРезервногоКопированияИБ/Forms/НастройкаРезервногоКопирования/Form.form @@ -6,67 +6,37 @@ <items xsi:type="form:FormGroup"> <name>СтраницаНастройкиПараметровРезервногоКопирования</name> <id>6</id> - <items xsi:type="form:FormField"> - <name>ВыполнятьАвтоматическоеРезервноеКопирование</name> - <id>405</id> - <visible>true</visible> - <enabled>true</enabled> - <userVisible> - <common>true</common> - </userVisible> - <dataPath xsi:type="form:DataPath"> - <segments>Объект.ВыполнятьАвтоматическоеРезервноеКопирование</segments> - </dataPath> - <titleLocation>Right</titleLocation> - <toolTipRepresentation>Button</toolTipRepresentation> - <handlers> - <event>OnChange</event> - <name>ВыполнятьАвтоматическоеРезервноеКопированиеПриИзменении</name> - </handlers> - <extendedTooltip> - <name>ВыполнятьАвтоматическоеРезервноеКопированиеРасширеннаяПодсказка</name> - <id>407</id> - <title> - <key>ru</key> - <value>Рекомендуется отключать выполнение резервного копирования только - в том случае, если оно выполняется сторонними средствами.</value> - - Label - true - true - - Left - - - - ВыполнятьАвтоматическоеРезервноеКопированиеКонтекстноеМеню - 406 - true - - CheckBoxField - Enter - true - Left - true - - - ГруппаПараметры - 377 + РежимыРаботы + 434 - ГруппаПриветствияПриНастройкеРасписанияРК - 47 - - Декорация1 - 410 + Обычный + 436 + + ВыполнятьАвтоматическоеРезервноеКопирование1 + 440 true true true + + Объект.ВыполнятьАвтоматическоеРезервноеКопирование + + Right + Button + + OnChange + ВыполнятьАвтоматическоеРезервноеКопированиеПриИзменении + - Декорация1РасширеннаяПодсказка - 412 + ВыполнятьАвтоматическоеРезервноеКопирование1РасширеннаяПодсказка + 442 + + <key>ru</key> + <value>Рекомендуется отключать выполнение резервного копирования только +в том случае, если оно выполняется сторонними средствами.</value> + Label true true @@ -75,40 +45,31 @@ - Декорация1КонтекстноеМеню - 411 + ВыполнятьАвтоматическоеРезервноеКопирование1КонтекстноеМеню + 441 true - Label - 1 - true - true - - Left - + CheckBoxField + Enter + true + Left + true + - Группа4 - 408 - - ВариантПроведенияРезервногоКопирования - 245 + ГруппаПриветствияПриНастройкеРасписанияРК + 47 + + Декорация1 + 410 true true true - - Объект.ВариантВыполнения - - None - - OnChange - ВариантПроведенияРезервногоКопированияПриИзменении - - ВариантПроведенияРезервногоКопированияExtendedTooltip - 285 + Декорация1РасширеннаяПодсказка + 412 Label true true @@ -117,53 +78,265 @@ - ВариантПроведенияРезервногоКопированияКонтекстноеМеню - 246 + Декорация1КонтекстноеМеню + 411 true - RadioButtonField - Enter - true - Left - true - - 1 - - - ru - Регулярно по расписанию: - - - ПоРасписанию - - - - - ru - При завершении работы - - - ПриЗавершенииРаботы - - - Vertical + Label + 1 + true + true + + Left - - ИзменитьРасписание - 238 - - <key>ru</key> - <value>Не задано</value> - + + Группа1 + 424 + + Группа3 + 432 + + ВариантПоРасписанию + 421 + true + true + + true + + + Объект.ВариантВыполнения + + None + + OnChange + ВариантПроведенияРезервногоКопированияПриИзменении + + + ВариантПоРасписаниюРасширеннаяПодсказка + 423 + Label + true + true + + Left + + + + ВариантПоРасписаниюКонтекстноеМеню + 422 + true + + RadioButtonField + Enter + true + Left + true + + 1 + + + ru + Регулярно по расписанию: + + + ПоРасписанию + + + Vertical + + + + ИзменитьРасписание + 238 + + <key>ru</key> + <value>Не задано</value> + + true + true + + true + + + ИзменитьРасписаниеExtendedTooltip + 289 + Label + true + true + + Left + + + Hyperlink + Form.Command.ИзменитьРасписание + Normal + Auto + true + true + UserCmds + Auto + + true + true + + true + + + Группа3РасширеннаяПодсказка + 433 + Label + true + true + + Left + + + UsualGroup + + Auto + true + true + Auto + Auto + + + + ДекорацияВариантПоРасписанию + 426 + + <key>ru</key> + <value>При составлении расписания необходимо учитывать, что если к моменту запуска резервного +копирования программа не будет работать, то резервное копирование не выполнится. При выполнении +резервного копирования работа всех пользователей в программе будет завершена.</value> + + true + true + + true + + + ДекорацияВариантПоРасписаниюРасширеннаяПодсказка + 428 + Label + true + true + + Left + + + + ДекорацияВариантПоРасписаниюКонтекстноеМеню + 427 + true + + Label + true + true + + Style.ПоясняющийТекст + + + Left + 3 + + + + ВариантПриЗавершенииРаботы + 245 + true + true + + true + + + Объект.ВариантВыполнения + + None + + OnChange + ВариантПроведенияРезервногоКопированияПриИзменении + + + ВариантПриЗавершенииРаботыРасширеннаяПодсказка + 285 + Label + true + true + + Left + + + + ВариантПриЗавершенииРаботыКонтекстноеМеню + 246 + true + + RadioButtonField + Enter + true + Left + true + + 1 + + + ru + При завершении работы + + + ПриЗавершенииРаботы + + + Vertical + + + + ДекорацияВариантПриЗавершенииРаботы + 429 + + <key>ru</key> + <value>При каждом выходе из программы администратору предлагается выполнить резервное копирование. При выполнении резервного копирования работа всех пользователей в программе будет завершена.</value> + + true + true + + true + + + ДекорацияВариантПриЗавершенииРаботыРасширеннаяПодсказка + 431 + Label + true + true + + Left + + + + ДекорацияВариантПриЗавершенииРаботыКонтекстноеМеню + 430 + true + + Label + true + true + + Style.ПоясняющийТекст + + + Left + 2 + + true true true - ИзменитьРасписаниеExtendedTooltip - 289 + Группа1РасширеннаяПодсказка + 425 Label true true @@ -171,14 +344,15 @@ Left - Hyperlink - Form.Command.ИзменитьРасписание - Normal - Auto - true - true - UserCmds - Auto + UsualGroup + + Vertical + Auto + true + true + Auto + Auto + true true @@ -186,8 +360,8 @@ true - Группа4РасширеннаяПодсказка - 409 + ГруппаПриветствияПриНастройкеРасписанияРКExtendedTooltip + 284 Label true true @@ -209,9 +383,13 @@ true + + <key>ru</key> + <value>Обычный</value> + - ГруппаПриветствияПриНастройкеРасписанияРКExtendedTooltip - 284 + ОбычныйРасширеннаяПодсказка + 437 Label true true @@ -219,15 +397,115 @@ Left - UsualGroup - - Auto - true - true - Auto - Auto + Page + + Vertical + auto + + Базовый + 438 + + ВыполнятьАвтоматическоеРезервноеКопирование + 405 + + <key>ru</key> + <value>Предлагать резервное копирование при завершении работы</value> + + true + true + + true + + + Объект.ВыполнятьАвтоматическоеРезервноеКопирование + + Right + ShowBottom + + OnChange + ВыполнятьАвтоматическоеРезервноеКопированиеПриИзменении + + + ВыполнятьАвтоматическоеРезервноеКопированиеРасширеннаяПодсказка + 407 + + <key>ru</key> + <value>Рекомендуется отключать выполнение резервного копирования только +в том случае, если оно выполняется сторонними средствами.</value> + + Label + true + true + + Left + + + + ВыполнятьАвтоматическоеРезервноеКопированиеКонтекстноеМеню + 406 + true + + CheckBoxField + Enter + true + Left + true + + + true + true + + true + + + <key>ru</key> + <value>Базовый</value> + + + БазовыйРасширеннаяПодсказка + 439 + Label + true + true + + Left + + + Page + + Vertical + auto + + + true + true + + true + + + <key>ru</key> + <value>Режимы работы</value> + + + РежимыРаботыРасширеннаяПодсказка + 435 + Label + true + true + + Left + + + Pages + + Auto + + + + ГруппаПараметры + 377 ГруппаЗаведенияПутиКопирования 52 @@ -1509,7 +1787,6 @@ Vertical true true - UseIfNecessary auto true @@ -1632,7 +1909,7 @@ Готово - Auto + DontUse Auto @@ -1650,7 +1927,7 @@ ИзменитьРасписание - Auto + DontUse Auto diff --git a/SSL/src/DataProcessors/НастройкаРезервногоКопированияИБ/Forms/Форма/Module.bsl b/SSL/src/DataProcessors/НастройкаРезервногоКопированияИБ/Forms/НастройкаРезервногоКопирования/Module.bsl similarity index 88% rename from SSL/src/DataProcessors/НастройкаРезервногоКопированияИБ/Forms/Форма/Module.bsl rename to SSL/src/DataProcessors/НастройкаРезервногоКопированияИБ/Forms/НастройкаРезервногоКопирования/Module.bsl index 49a9e9b01..76d6342c0 100644 --- a/SSL/src/DataProcessors/НастройкаРезервногоКопированияИБ/Forms/Форма/Module.bsl +++ b/SSL/src/DataProcessors/НастройкаРезервногоКопированияИБ/Forms/НастройкаРезервногоКопирования/Module.bsl @@ -25,10 +25,11 @@ Объект.РезервноеКопированиеНастроено = НастройкиРезервногоКопирования.РезервноеКопированиеНастроено; Если Не Объект.РезервноеКопированиеНастроено Тогда - Объект.ВыполнятьАвтоматическоеРезервноеКопирование = Истина; - КонецЕсли; + ЭтоБазоваяВерсияКонфигурации = СтандартныеПодсистемыСервер.ЭтоБазоваяВерсияКонфигурации(); + Элементы.Обычный.Видимость = Не ЭтоБазоваяВерсияКонфигурации; + Элементы.Базовый.Видимость = ЭтоБазоваяВерсияКонфигурации; ПарольАдминистратораИБ = НастройкиРезервногоКопирования.ПарольАдминистратораИБ; Расписание = ОбщегоНазначенияКлиентСервер.СтруктураВРасписание(НастройкиРезервногоКопирования.РасписаниеКопирования); @@ -41,8 +42,15 @@ ОбновитьТипОграниченияКаталогаСРезервнымиКопиями(ЭтотОбъект); - // Первая часть проверки на сервере - если в информационной базе есть пользователи. - ТребуетсяВводПароля = (ПользователиИнформационнойБазы.ПолучитьПользователей().Количество() > 0); + ИнформацияОПользователе = РезервноеКопированиеИБСервер.ИнформацияОПользователе(); + ТребуетсяВводПароля = ИнформацияОПользователе.ТребуетсяВводПароля; + Если ТребуетсяВводПароля Тогда + АдминистраторИБ = ИнформацияОПользователе.Имя; + Иначе + Элементы.ГруппаАвторизации.Видимость = Ложь; + Элементы.АвторизацияАдминистратораИнформационнойБазы.Видимость = Ложь; + ПарольАдминистратораИБ = ""; + КонецЕсли; Элементы.ИзменитьРасписание.Доступность = (Объект.ВариантВыполнения = "ПоРасписанию"); Элементы.ГруппаПараметры.Доступность = Объект.ВыполнятьАвтоматическоеРезервноеКопирование; @@ -65,19 +73,6 @@ ПараметрыРезервногоКопированияИБ.МинимальнаяДатаСледующегоАвтоматическогоРезервногоКопирования = '29990101'; ЗаписатьНастройки = Ложь; - ИнформацияОПользователе = СтандартныеПодсистемыКлиентПовтИсп.ПараметрыРаботыКлиента().ИнформацияОПользователе; - - // Вторая часть проверки на клиенте - если у текущего пользователя (администратор) - // используется стандартная аутентификация и установлен пароль. - ТребуетсяВводПароля = ТребуетсяВводПароля И ИнформацияОПользователе.АутентификацияСтандартная И ИнформацияОПользователе.ПарольУстановлен; - - Если ТребуетсяВводПароля Тогда - АдминистраторИБ = ИнформацияОПользователе.Имя; - Иначе - Элементы.ГруппаАвторизации.Видимость = Ложь; - Элементы.АвторизацияАдминистратораИнформационнойБазы.Видимость = Ложь; - КонецЕсли; - КонецПроцедуры &НаКлиенте @@ -108,9 +103,12 @@ &НаКлиенте Процедура ПутьККаталогуАрхивовНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка) - ВыбранныйПуть = ПолучитьПуть(РежимДиалогаВыбораФайла.ВыборКаталога); - Если Не ПустаяСтрока(ВыбранныйПуть) Тогда - Объект.КаталогСРезервнымиКопиями = ВыбранныйПуть; + ДиалогОткрытияФайла = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.ВыборКаталога); + ДиалогОткрытияФайла.Заголовок= НСтр("ru = 'Выберите каталог для сохранения резервных копий'"); + ДиалогОткрытияФайла.Каталог = Элементы.ПутьККаталогуАрхивов.ТекстРедактирования; + + Если ДиалогОткрытияФайла.Выбрать() Тогда + Объект.КаталогСРезервнымиКопиями = ДиалогОткрытияФайла.Каталог; КонецЕсли; КонецПроцедуры @@ -167,8 +165,10 @@ Возврат; КонецЕсли; - Если Не РезервноеКопированиеИБКлиент.ПроверитьДоступКИнформационнойБазе(ПарольАдминистратораИБ) Тогда + РезультатПодключения = РезервноеКопированиеИБКлиент.ПроверитьДоступКИнформационнойБазе(ПарольАдминистратораИБ); + Если РезультатПодключения.ОшибкаПодключенияКомпоненты Тогда Элементы.СтраницыПомощника.ТекущаяСтраница = Элементы.ДополнительныеНастройки; + ОбнаруженнаяОшибкаПодключения = РезультатПодключения.КраткоеОписаниеОшибки; Возврат; КонецЕсли; @@ -186,8 +186,7 @@ РезервноеКопированиеИБКлиент.ПодключитьОбработчикОжиданияРезервногоКопирования(); ИмяФормыНастроек = "e1cib/app/%1"; - ИмяФормыНастроек = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ИмяФормыНастроек, - РезервноеКопированиеИБКлиент.ИмяФормыНастроекРезервногоКопирования()); + ИмяФормыНастроек = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ИмяФормыНастроек, РезервноеКопированиеИБКлиент.ИмяФормыНастроекРезервногоКопирования()); ПоказатьОповещениеПользователя(НСтр("ru = 'Резервное копирование'"), ИмяФормыНастроек, НСтр("ru = 'Резервное копирование настроено.'")); @@ -261,29 +260,6 @@ КонецФункции -// Запрашивает у пользователя путь к файлу или каталогу. -&НаКлиенте -Функция ПолучитьПуть(РежимДиалога) - - Режим = РежимДиалога; - ДиалогОткрытияФайла = Новый ДиалогВыбораФайла(Режим); - - Если Режим = РежимДиалогаВыбораФайла.ВыборКаталога Тогда - ДиалогОткрытияФайла.Заголовок= НСтр("ru = 'Выберите каталог'"); - Иначе - ДиалогОткрытияФайла.Заголовок= НСтр("ru = 'Выберите файл'"); - КонецЕсли; - - Если ДиалогОткрытияФайла.Выбрать() Тогда - Если РежимДиалога = РежимДиалогаВыбораФайла.ВыборКаталога Тогда - Возврат ДиалогОткрытияФайла.Каталог; - Иначе - Возврат ДиалогОткрытияФайла.ПолноеИмяФайла; - КонецЕсли; - КонецЕсли; - -КонецФункции - &НаСервереБезКонтекста Процедура ОстановитьСервисОповещения(ТекущийПользователь) // Останавливает оповещения о резервном копировании. @@ -297,6 +273,11 @@ &НаСервере Процедура ЗаписатьНастройки(ТекущийПользователь) + ЭтоБазоваяВерсияКонфигурации = СтандартныеПодсистемыСервер.ЭтоБазоваяВерсияКонфигурации(); + Если ЭтоБазоваяВерсияКонфигурации Тогда + Объект.ВариантВыполнения = "ПриЗавершенииРаботы"; + КонецЕсли; + ПараметрыРезервногоКопирования = РезервноеКопированиеИБСервер.ПараметрыРезервногоКопирования(); ПараметрыРезервногоКопирования.Вставить("АдминистраторИБ", АдминистраторИБ); 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 562821a4a..b6dc54a8e 100644 --- a/SSL/src/DataProcessors/НастройкаРезервногоКопированияИБ/Forms/НапоминаниеКлиентСервер/Form.form +++ b/SSL/src/DataProcessors/НастройкаРезервногоКопированияИБ/Forms/НастройкаРезервногоКопированияКлиентСервер/Form.form @@ -289,7 +289,7 @@ ОК - Auto + DontUse Auto 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/НастройкаРезервногоКопированияИБ/НастройкаРезервногоКопированияИБ.mdo b/SSL/src/DataProcessors/НастройкаРезервногоКопированияИБ/НастройкаРезервногоКопированияИБ.mdo index 4664ff97a..800948417 100644 --- a/SSL/src/DataProcessors/НастройкаРезервногоКопированияИБ/НастройкаРезервногоКопированияИБ.mdo +++ b/SSL/src/DataProcessors/НастройкаРезервногоКопированияИБ/НастройкаРезервногоКопированияИБ.mdo @@ -10,7 +10,7 @@ Настройка резервного копирования true - DataProcessor.НастройкаРезервногоКопированияИБ.Form.Форма + DataProcessor.НастройкаРезервногоКопированияИБ.Form.НастройкаРезервногоКопирования true @@ -214,7 +214,7 @@ - Форма + НастройкаРезервногоКопирования ru Настройка резервного копирования @@ -223,7 +223,7 @@ MobileDevice - НапоминаниеКлиентСервер + НастройкаРезервногоКопированияКлиентСервер ru Настройка резервного копирования diff --git a/SSL/src/DataProcessors/НастройкаРезервногоКопированияПриложения/Forms/НастройкаБезИнтервалов/Form.form b/SSL/src/DataProcessors/НастройкаРезервногоКопированияПриложения/Forms/НастройкаБезИнтервалов/Form.form index a70159b87..7a6dbd23f 100644 --- a/SSL/src/DataProcessors/НастройкаРезервногоКопированияПриложения/Forms/НастройкаБезИнтервалов/Form.form +++ b/SSL/src/DataProcessors/НастройкаРезервногоКопированияПриложения/Forms/НастройкаБезИнтервалов/Form.form @@ -1085,7 +1085,6 @@ true true true - UseIfNecessary auto true @@ -1351,7 +1350,7 @@ true - Auto + DontUse Auto @@ -1369,7 +1368,7 @@ ЗаписатьИЗакрыть - Auto + DontUse Auto diff --git a/SSL/src/DataProcessors/НастройкаРезервногоКопированияПриложения/Forms/НастройкаСИнтервалами/Form.form b/SSL/src/DataProcessors/НастройкаРезервногоКопированияПриложения/Forms/НастройкаСИнтервалами/Form.form index 9babad3d6..0fb447a51 100644 --- a/SSL/src/DataProcessors/НастройкаРезервногоКопированияПриложения/Forms/НастройкаСИнтервалами/Form.form +++ b/SSL/src/DataProcessors/НастройкаРезервногоКопированияПриложения/Forms/НастройкаСИнтервалами/Form.form @@ -1183,7 +1183,6 @@ Vertical true true - UseIfNecessary auto true @@ -1557,7 +1556,7 @@ true - Auto + DontUse Auto @@ -1584,7 +1583,7 @@ Text true - Auto + DontUse Auto @@ -1609,7 +1608,7 @@ Перечитать - Auto + DontUse Auto @@ -1634,7 +1633,7 @@ Записать - Auto + DontUse Auto diff --git a/SSL/src/DataProcessors/НастройкаРезервногоКопированияПриложения/Forms/НастройкаСИнтервалами/Module.bsl b/SSL/src/DataProcessors/НастройкаРезервногоКопированияПриложения/Forms/НастройкаСИнтервалами/Module.bsl index 47c582985..db80338a3 100644 --- a/SSL/src/DataProcessors/НастройкаРезервногоКопированияПриложения/Forms/НастройкаСИнтервалами/Module.bsl +++ b/SSL/src/DataProcessors/НастройкаРезервногоКопированияПриложения/Forms/НастройкаСИнтервалами/Module.bsl @@ -180,8 +180,7 @@ Элемент = Элементы[КлючИЗначение.Ключ]; Элемент.МаксимальноеЗначение = ОграниченияНастроек[КлючИЗначение.Значение]; Элемент.Подсказка = - СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - ШаблонПодсказки, + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонПодсказки, ОграниченияНастроек[КлючИЗначение.Значение]); КонецЦикла; diff --git a/SSL/src/DataProcessors/НастройкаРезервногоКопированияПриложения/ManagerModule.bsl b/SSL/src/DataProcessors/НастройкаРезервногоКопированияПриложения/ManagerModule.bsl index c517e6b94..0e871d212 100644 --- a/SSL/src/DataProcessors/НастройкаРезервногоКопированияПриложения/ManagerModule.bsl +++ b/SSL/src/DataProcessors/НастройкаРезервногоКопированияПриложения/ManagerModule.bsl @@ -40,9 +40,9 @@ Функция ПолучитьВерсииWebСервиса() Возврат ОбщегоНазначения.ПолучитьВерсииИнтерфейса( - Константы.ВнутреннийАдресМенеджераСервиса.Получить(), - Константы.ИмяСлужебногоПользователяМенеджераСервиса.Получить(), - Константы.ПарольСлужебногоПользователяМенеджераСервиса.Получить(), + РаботаВМоделиСервиса.ВнутреннийАдресМенеджераСервиса(), + РаботаВМоделиСервиса.ИмяСлужебногоПользователяМенеджераСервиса(), + РаботаВМоделиСервиса.ПарольСлужебногоПользователяМенеджераСервиса(), "ZoneBackupControl"); КонецФункции diff --git a/SSL/src/DataProcessors/НастройкиПользователей/Commands/КопированиеНастроекПользователей/CommandModule.bsl b/SSL/src/DataProcessors/НастройкиПользователей/Commands/КопированиеНастроекПользователей/CommandModule.bsl index 75246a629..af4f4c883 100644 --- a/SSL/src/DataProcessors/НастройкиПользователей/Commands/КопированиеНастроекПользователей/CommandModule.bsl +++ b/SSL/src/DataProcessors/НастройкиПользователей/Commands/КопированиеНастроекПользователей/CommandModule.bsl @@ -1,3 +1,4 @@ +#Область ОбработчикиСобытий &НаКлиенте Процедура ОбработкаКоманды(ПараметрКоманды, ПараметрыВыполненияКоманды) @@ -6,3 +7,5 @@ ПараметрыВыполненияКоманды.Уникальность, ПараметрыВыполненияКоманды.Окно); КонецПроцедуры + +#КонецОбласти \ No newline at end of file diff --git a/SSL/src/DataProcessors/НастройкиПользователей/Commands/НастройкиПользователя/CommandModule.bsl b/SSL/src/DataProcessors/НастройкиПользователей/Commands/НастройкиПользователя/CommandModule.bsl index 159e9bd72..096250a60 100644 --- a/SSL/src/DataProcessors/НастройкиПользователей/Commands/НастройкиПользователя/CommandModule.bsl +++ b/SSL/src/DataProcessors/НастройкиПользователей/Commands/НастройкиПользователя/CommandModule.bsl @@ -1,3 +1,5 @@ +#Область ОбработчикиСобытий + &НаКлиенте Процедура ОбработкаКоманды(ПараметрКоманды, ПараметрыВыполненияКоманды) @@ -6,3 +8,5 @@ ПараметрыВыполненияКоманды.Уникальность, ПараметрыВыполненияКоманды.Окно); КонецПроцедуры + +#КонецОбласти \ No newline at end of file diff --git a/SSL/src/DataProcessors/НастройкиПользователей/Commands/ОчисткаНастроекПользователей/CommandModule.bsl b/SSL/src/DataProcessors/НастройкиПользователей/Commands/ОчисткаНастроекПользователей/CommandModule.bsl index 512eb6ff3..d7cb702d9 100644 --- a/SSL/src/DataProcessors/НастройкиПользователей/Commands/ОчисткаНастроекПользователей/CommandModule.bsl +++ b/SSL/src/DataProcessors/НастройкиПользователей/Commands/ОчисткаНастроекПользователей/CommandModule.bsl @@ -1,3 +1,4 @@ +#Область ОбработчикиСобытий &НаКлиенте Процедура ОбработкаКоманды(ПараметрКоманды, ПараметрыВыполненияКоманды) @@ -6,3 +7,5 @@ ПараметрыВыполненияКоманды.Уникальность, ПараметрыВыполненияКоманды.Окно); КонецПроцедуры + +#КонецОбласти \ No newline at end of file diff --git a/SSL/src/DataProcessors/НастройкиПользователей/Forms/ВыборНастроек/Form.form b/SSL/src/DataProcessors/НастройкиПользователей/Forms/ВыборНастроек/Form.form index 3033cb0eb..10e7bf57f 100644 --- a/SSL/src/DataProcessors/НастройкиПользователей/Forms/ВыборНастроек/Form.form +++ b/SSL/src/DataProcessors/НастройкиПользователей/Forms/ВыборНастроек/Form.form @@ -1636,7 +1636,6 @@ true true true - UseIfNecessary auto true @@ -2351,7 +2350,7 @@ TextPicture - Auto + DontUse Auto @@ -2377,7 +2376,7 @@ TextPicture - Auto + DontUse Auto @@ -2403,7 +2402,7 @@ TextPicture - Auto + DontUse Auto @@ -2428,7 +2427,7 @@ ПометитьВсе - Auto + DontUse Auto @@ -2453,7 +2452,7 @@ СнятьПометкуСоВсех - Auto + DontUse Auto diff --git a/SSL/src/DataProcessors/НастройкиПользователей/Forms/ВыборНастроек/Module.bsl b/SSL/src/DataProcessors/НастройкиПользователей/Forms/ВыборНастроек/Module.bsl index d441cf072..4f40c4dc4 100644 --- a/SSL/src/DataProcessors/НастройкиПользователей/Forms/ВыборНастроек/Module.bsl +++ b/SSL/src/DataProcessors/НастройкиПользователей/Forms/ВыборНастроек/Module.bsl @@ -16,8 +16,8 @@ ВыбраннаяСтраницаНастроек = Элементы.ВидыНастроек.ТекущаяСтраница.Имя; - ИмяФормыПерсональныхНастроек = ОбщегоНазначения.ОбщиеПараметрыБазовойФункциональности( - ).ИмяФормыПерсональныхНастроек; + ИмяФормыПерсональныхНастроек = + ОбщегоНазначения.ОбщиеПараметрыБазовойФункциональности().ИмяФормыПерсональныхНастроек; ЗаполнитьСпискиНастроек(Ложь); @@ -192,9 +192,10 @@ ВыбранныеНастройкиОтчетов = ВыбранныеНастройки(НастройкиОтчетов); ВыбранныеНастройкиВнешнегоВида = ВыбранныеНастройки(ВнешнийВид); ПрочиеНастройкиСтруктура = ВыбранныеНастройки(ПрочиеНастройки); - КоличествоНастроек = ВыбранныеНастройкиОтчетов.КоличествоНастроек + - ВыбранныеНастройкиВнешнегоВида.КоличествоНастроек + ПрочиеНастройкиСтруктура.КоличествоНастроек; - + КоличествоНастроек = ВыбранныеНастройкиОтчетов.КоличествоНастроек + + ВыбранныеНастройкиВнешнегоВида.КоличествоНастроек + + ПрочиеНастройкиСтруктура.КоличествоНастроек; + Если ВыбранныеНастройкиОтчетов.КоличествоНастроек = 1 Тогда ПредставленияНастроек = ВыбранныеНастройкиОтчетов.ПредставленияНастроек; ИначеЕсли ВыбранныеНастройкиВнешнегоВида.КоличествоНастроек = 1 Тогда @@ -297,26 +298,39 @@ Если ВыбраннаяСтраницаНастроек = "НастройкиОтчетовСтраница" Тогда КоличествоНастроекОтчетов = КоличествоНастроекОтчетов + КоличествоНастроек; - ТекстЗаголовка = ?(КоличествоНастроекОтчетов = 0, НСтр("ru='Настройки отчетов'"), НСтр("ru='Настройки отчетов (%1)'")); - Элементы.НастройкиОтчетовСтраница.Заголовок = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - ТекстЗаголовка, КоличествоНастроекОтчетов); + Если КоличествоНастроекОтчетов = 0 Тогда + ТекстЗаголовка = НСтр("ru='Настройки отчетов'"); + Иначе + ТекстЗаголовка = НСтр("ru='Настройки отчетов (%1)'"); + ТекстЗаголовка = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ТекстЗаголовка, КоличествоНастроекОтчетов); + КонецЕсли; + + Элементы.НастройкиОтчетовСтраница.Заголовок = ТекстЗаголовка; ИначеЕсли ВыбраннаяСтраницаНастроек = "ВнешнийВидСтраница" Тогда КоличествоНастроекВнешнегоВида = КоличествоНастроекВнешнегоВида + КоличествоНастроек; - ТекстЗаголовка = ?(КоличествоНастроекВнешнегоВида = 0, НСтр("ru='Внешний вид'"), НСтр("ru='Внешний вид (%1)'")); + Если КоличествоНастроекВнешнегоВида = 0 Тогда + ТекстЗаголовка = НСтр("ru='Внешний вид'"); + Иначе + ТекстЗаголовка = НСтр("ru='Внешний вид (%1)'"); + ТекстЗаголовка = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ТекстЗаголовка, КоличествоНастроекВнешнегоВида); + КонецЕсли; - Элементы.ВнешнийВидСтраница.Заголовок = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - ТекстЗаголовка, КоличествоНастроекВнешнегоВида); + Элементы.ВнешнийВидСтраница.Заголовок = ТекстЗаголовка; ИначеЕсли ВыбраннаяСтраницаНастроек = "ПрочиеНастройкиСтраница" Тогда КоличествоПрочихНастроек = КоличествоПрочихНастроек + КоличествоНастроек; - ТекстЗаголовка = ?(КоличествоПрочихНастроек = 0, НСтр("ru='Прочие настройки'"), НСтр("ru='Прочие настройки (%1)'")); + Если КоличествоПрочихНастроек = 0 Тогда + ТекстЗаголовка = НСтр("ru='Прочие настройки'"); + Иначе + ТекстЗаголовка = НСтр("ru='Прочие настройки (%1)'"); + ТекстЗаголовка = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ТекстЗаголовка, КоличествоПрочихНастроек); + КонецЕсли; - Элементы.ПрочиеНастройкиСтраница.Заголовок = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - ТекстЗаголовка, КоличествоПрочихНастроек); + Элементы.ПрочиеНастройкиСтраница.Заголовок = ТекстЗаголовка; КонецЕсли; @@ -606,16 +620,13 @@ Если ВидНастроек = "НастройкиОтчетов" Тогда КоличествоНастроекОтчетов = КоличествоПомеченных; - Элементы.НастройкиОтчетовСтраница.Заголовок = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru='Настройки отчетов (%1)'"), КоличествоПомеченных); + Элементы.НастройкиОтчетовСтраница.Заголовок = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru='Настройки отчетов (%1)'"), КоличествоПомеченных); ИначеЕсли ВидНастроек = "ВнешнийВид" Тогда КоличествоНастроекВнешнегоВида = КоличествоПомеченных; - Элементы.ВнешнийВидСтраница.Заголовок = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru='Внешний вид (%1)'"), КоличествоПомеченных); + Элементы.ВнешнийВидСтраница.Заголовок = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru='Внешний вид (%1)'"), КоличествоПомеченных); ИначеЕсли ВидНастроек = "ПрочиеНастройки" Тогда КоличествоПрочихНастроек = КоличествоПомеченных; - Элементы.ПрочиеНастройкиСтраница.Заголовок = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru='Прочие настройки (%1)'"), КоличествоПомеченных); + Элементы.ПрочиеНастройкиСтраница.Заголовок = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru='Прочие настройки (%1)'"), КоличествоПомеченных); КонецЕсли; КонецЕсли; diff --git a/SSL/src/DataProcessors/НастройкиПользователей/Forms/ВыборПользователей/Form.form b/SSL/src/DataProcessors/НастройкиПользователей/Forms/ВыборПользователей/Form.form index 634da7834..75d22d201 100644 --- a/SSL/src/DataProcessors/НастройкиПользователей/Forms/ВыборПользователей/Form.form +++ b/SSL/src/DataProcessors/НастройкиПользователей/Forms/ВыборПользователей/Form.form @@ -1101,7 +1101,6 @@ true true true - UseIfNecessary auto true @@ -1518,7 +1517,7 @@ TextPicture - Auto + DontUse Auto @@ -1541,7 +1540,7 @@ Picture - Auto + DontUse Auto @@ -1564,7 +1563,7 @@ Picture - Auto + DontUse Auto @@ -1589,7 +1588,7 @@ ПометитьВсе - Auto + DontUse Auto @@ -1614,7 +1613,7 @@ СнятьПометкуСоВсех - Auto + DontUse Auto @@ -1640,7 +1639,7 @@ TextPicture - Auto + DontUse Auto @@ -1662,7 +1661,7 @@ АктивныеПользователи - Auto + DontUse Auto diff --git a/SSL/src/DataProcessors/НастройкиПользователей/Forms/ВыборПользователей/Module.bsl b/SSL/src/DataProcessors/НастройкиПользователей/Forms/ВыборПользователей/Module.bsl index 248b01d49..a491bde29 100644 --- a/SSL/src/DataProcessors/НастройкиПользователей/Forms/ВыборПользователей/Module.bsl +++ b/SSL/src/DataProcessors/НастройкиПользователей/Forms/ВыборПользователей/Module.bsl @@ -388,8 +388,7 @@ ПомеченоПользователей = ГруппаПользователей.ПомеченоПользователей; ГруппаПользователей.ПомеченоПользователей = ?(ЗначениеПометки, ПомеченоПользователей + 1, ПомеченоПользователей - 1); ГруппаПользователей.НаименованиеГруппыИПомеченоПользователей = - СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru='%1 (%2)'"), - Строка(ГруппаПользователей.Группа), ГруппаПользователей.ПомеченоПользователей); + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru='%1 (%2)'"), Строка(ГруппаПользователей.Группа), ГруппаПользователей.ПомеченоПользователей); КонецЕсли; // Обновить заголовки у всех подчиненных групп рекурсивно. diff --git a/SSL/src/DataProcessors/НастройкиПользователей/Forms/КопированиеНастроекПользователей/Form.form b/SSL/src/DataProcessors/НастройкиПользователей/Forms/КопированиеНастроекПользователей/Form.form index 4ec3ca80f..32d99c003 100644 --- a/SSL/src/DataProcessors/НастройкиПользователей/Forms/КопированиеНастроекПользователей/Form.form +++ b/SSL/src/DataProcessors/НастройкиПользователей/Forms/КопированиеНастроекПользователей/Form.form @@ -577,7 +577,6 @@ true true true - UseIfNecessary auto true @@ -868,7 +867,7 @@ Скопировать - Auto + DontUse Auto @@ -890,7 +889,7 @@ Скопировать - Auto + DontUse Auto diff --git a/SSL/src/DataProcessors/НастройкиПользователей/Forms/КопированиеНастроекПользователей/Module.bsl b/SSL/src/DataProcessors/НастройкиПользователей/Forms/КопированиеНастроекПользователей/Module.bsl index 7fe52e591..5efa9d4b4 100644 --- a/SSL/src/DataProcessors/НастройкиПользователей/Forms/КопированиеНастроекПользователей/Module.bsl +++ b/SSL/src/DataProcessors/НастройкиПользователей/Forms/КопированиеНастроекПользователей/Module.bsl @@ -44,20 +44,9 @@ Если КоличествоПользователей = 1 Тогда Элементы.ВыбратьПользователей.Заголовок = Строка(Параметр.ПользователиПриемник[0]); ИначеЕсли КоличествоПользователей > 1 Тогда - - ПрописьЧисла = ЧислоПрописью( - КоличествоПользователей, - "Л = ru_RU", - НСтр("ru = ',,,,,,,,0'")); - ПрописьЧислаИПредмета = ЧислоПрописью( - КоличествоПользователей, - "Л = ru_RU", - НСтр("ru = 'пользователь,пользователя,пользователей,,,,,,0'")); - ЧислоИПредмет = СтрЗаменить( - ПрописьЧислаИПредмета, - ПрописьЧисла, - Формат(КоличествоПользователей, "ЧДЦ=0") + " "); - + ЧислоИПредмет = Формат(КоличествоПользователей, "ЧДЦ=0") + " " + + ПользователиСлужебныйКлиентСервер.ПредметЦелогоЧисла(КоличествоПользователей, + "Л = ru_RU", НСтр("ru = 'пользователь,пользователя,пользователей,,,,,,0'")); Элементы.ВыбратьПользователей.Заголовок = ЧислоИПредмет; КонецЕсли; Элементы.ВыбратьПользователей.Подсказка = ""; @@ -82,18 +71,9 @@ ПредставлениеНастройки = Параметр.ПредставленияНастроек[0]; ТекстЗаголовка = ПредставлениеНастройки; Иначе - ПрописьЧисла = ЧислоПрописью( - КоличествоНастроек, - "Л = ru_RU", - НСтр("ru = ',,,,,,,,0'")); - ПрописьЧислаИПредмета = ЧислоПрописью( - КоличествоНастроек, - "Л = ru_RU", - НСтр("ru = 'настройка,настройки,настроек,,,,,,0'")); - ТекстЗаголовка = СтрЗаменить( - ПрописьЧислаИПредмета, - ПрописьЧисла, - Формат(КоличествоНастроек, "ЧДЦ=0") + " "); + ТекстЗаголовка = Формат(КоличествоНастроек, "ЧДЦ=0") + " " + + ПользователиСлужебныйКлиентСервер.ПредметЦелогоЧисла(КоличествоНастроек, + "Л = ru_RU", НСтр("ru = 'настройка,настройки,настроек,,,,,,0'")); КонецЕсли; Элементы.ВыбратьНастройки.Заголовок = ТекстЗаголовка; @@ -125,8 +105,8 @@ КонецЕсли; ПараметрыОтбора = Новый Структура( - "СкрытьПользователейБезПользователяИБ, РежимВыбора, СкрываемыеПользователи", - Истина, Истина, СкрываемыеПользователи); + "РежимВыбора, СкрываемыеПользователи", + Истина, СкрываемыеПользователи); Если ТипПереданногоПользователя = Неопределено Тогда @@ -177,19 +157,23 @@ &НаКлиенте Процедура ПользовательСсылкаПриИзменении(Элемент) + Если ПользовательСсылка <> Неопределено + И ИмяПользователяИБ(ПользовательСсылка) = Неопределено Тогда + ПоказатьПредупреждение(,НСтр("ru = 'У выбранного пользователя нет настроек, которые можно было бы + |скопировать, выберите другого пользователя.'")); + ПользовательСсылка = ПользовательСсылкаСтарый; + Возврат; + КонецЕсли; + Если ПользовательСсылка <> Неопределено И ПользователиПолучателиНастроек.Свойство("МассивПользователей") Тогда - Для Каждого ПользовательПриемник Из ПользователиПолучателиНастроек.МассивПользователей Цикл - - Если ПользовательСсылка = ПользовательПриемник Тогда - ПоказатьПредупреждение(,НСтр("ru = 'Нельзя копировать настройки пользователя самому себе, + Если ПользователиПолучателиНастроек.МассивПользователей.Найти(ПользовательСсылка) <> Неопределено Тогда + ПоказатьПредупреждение(,НСтр("ru = 'Нельзя копировать настройки пользователя самому себе, |выберите другого пользователя.'")); ПользовательСсылка = ПользовательСсылкаСтарый; Возврат; - КонецЕсли; - - КонецЦикла; + КонецЕсли; КонецЕсли; @@ -201,6 +185,13 @@ КонецПроцедуры +&НаСервере +Функция ИмяПользователяИБ(ПользовательСсылка) + + Возврат Обработки.НастройкиПользователей.ИмяПользователяИБ(ПользовательСсылка); + +КонецФункции + &НаКлиенте Процедура ВыбратьНастройки(Элемент) @@ -218,8 +209,12 @@ ВыбранныеПользователи = Неопределено; ПользователиПолучателиНастроек.Свойство("МассивПользователей", ВыбранныеПользователи); - ПараметрыФормы = Новый Структура("Пользователь, ТипПользователя, ТипДействия, ВыбранныеПользователи", - ПользовательСсылка, ТипПользователя, "Копирование", ВыбранныеПользователи); + ПараметрыФормы = Новый Структура; + ПараметрыФормы.Вставить("Пользователь", ПользовательСсылка); + ПараметрыФормы.Вставить("ТипПользователя", ТипПользователя); + ПараметрыФормы.Вставить("ТипДействия", "Копирование"); + ПараметрыФормы.Вставить("ВыбранныеПользователи", ВыбранныеПользователи); + ОткрытьФорму("Обработка.НастройкиПользователей.Форма.ВыборПользователей", ПараметрыФормы); КонецПроцедуры @@ -342,16 +337,14 @@ Если Не НастройкиСкопированы Тогда ТекстПредупреждения = НСтр("ru = 'Настройки не были скопированы, так как у пользователя ""%1"" не было сохранено ни одной настройки.'"); - ТекстПредупреждения = СтроковыеФункцииКлиентСервер. - ПодставитьПараметрыВСтроку(ТекстПредупреждения, Строка(ПользовательСсылка)); + ТекстПредупреждения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ТекстПредупреждения, Строка(ПользовательСсылка)); ПоказатьПредупреждение(,ТекстПредупреждения); Возврат; КонецЕсли; ТекстПояснения = НСтр("ru = 'Скопированы все настройки %1'"); - ТекстПояснения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - ТекстПояснения, ПояснениеКомуСкопированыНастройки); + ТекстПояснения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ТекстПояснения, ПояснениеКомуСкопированыНастройки); ПоказатьОповещениеПользователя( НСтр("ru = 'Копирование настроек'"), , ТекстПояснения, БиблиотекаКартинок.Информация32); КонецЕсли; diff --git a/SSL/src/DataProcessors/НастройкиПользователей/Forms/НастройкиПользователей/Form.form b/SSL/src/DataProcessors/НастройкиПользователей/Forms/НастройкиПользователей/Form.form index b2f6e3a7b..b1374b055 100644 --- a/SSL/src/DataProcessors/НастройкиПользователей/Forms/НастройкиПользователей/Form.form +++ b/SSL/src/DataProcessors/НастройкиПользователей/Forms/НастройкиПользователей/Form.form @@ -2362,7 +2362,6 @@ true true true - UseIfNecessary auto true @@ -2825,15 +2824,15 @@ - ТекущийПользователь + ТекущийПользовательСсылка <key>ru</key> - <value>Текущий пользователь</value> + <value>Текущий пользователь ссылка</value> 12 - String - + CatalogRef.ВнешниеПользователи + CatalogRef.Пользователи true @@ -3005,7 +3004,7 @@ TextPicture - Auto + DontUse Auto @@ -3032,7 +3031,7 @@ TextPicture - Auto + DontUse Auto @@ -3058,7 +3057,7 @@ TextPicture - Auto + DontUse Auto @@ -3084,7 +3083,7 @@ TextPicture - Auto + DontUse Auto @@ -3107,7 +3106,7 @@ TextPicture - Auto + DontUse Auto @@ -3130,7 +3129,7 @@ Text - Auto + DontUse Auto @@ -3153,7 +3152,7 @@ Text - Auto + DontUse Auto @@ -3176,7 +3175,7 @@ Text - Auto + DontUse Auto @@ -3199,7 +3198,7 @@ Text - Auto + DontUse Auto @@ -3221,7 +3220,7 @@ ОчиститьВсеНастройки - Auto + DontUse Auto @@ -3243,7 +3242,7 @@ ОчиститьНастройкиОтчетовИВнешнегоВида - Auto + DontUse Auto @@ -3269,7 +3268,7 @@ TextPicture - Auto + DontUse Auto @@ -3291,7 +3290,7 @@ ОчиститьНастройкиВыбраннымПользователям - Auto + DontUse Auto diff --git a/SSL/src/DataProcessors/НастройкиПользователей/Forms/НастройкиПользователей/Module.bsl b/SSL/src/DataProcessors/НастройкиПользователей/Forms/НастройкиПользователей/Module.bsl index aa5b74325..a9c26cc29 100644 --- a/SSL/src/DataProcessors/НастройкиПользователей/Forms/НастройкиПользователей/Module.bsl +++ b/SSL/src/DataProcessors/НастройкиПользователей/Forms/НастройкиПользователей/Module.bsl @@ -33,8 +33,7 @@ ИспользоватьВнешнихПользователей = ПолучитьФункциональнуюОпцию("ИспользоватьВнешнихПользователей"); - ИмяФормыПерсональныхНастроек = ОбщегоНазначения.ОбщиеПараметрыБазовойФункциональности( - ).ИмяФормыПерсональныхНастроек; + ИмяФормыПерсональныхНастроек = ОбщегоНазначения.ОбщиеПараметрыБазовойФункциональности().ИмяФормыПерсональныхНастроек; ВыбраннаяСтраницаНастроек = Элементы.ВидыНастроек.ТекущаяСтраница.Имя; ЗаполнитьСпискиНастроек(); @@ -71,7 +70,16 @@ Процедура ПользовательСсылкаПриИзменении(Элемент) Элементы.КоманднаяПанель.Доступность = Не ПустаяСтрока(Элемент.ВыделенныйТекст); - ПолучитьИмяПользователяИОбновить(); + Если РезультатПолученияНастроек() = "НетПользователяИБ" Тогда + ТекстСообщения = НСтр("ru = 'У выбранного пользователя ""%1"" не указан + |пользователь информационной базы, просмотреть его настройки невозможно. + |Устранить проблему можно в карточке данного пользователя.'"); + ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ТекстСообщения, ПользовательСсылка); + ПоказатьПредупреждение(, ТекстСообщения); + ПользовательСсылка = ТекущийПользовательСсылка; + Возврат; + КонецЕсли; + РазвернутьДеревоЗначений(); КонецПроцедуры @@ -115,7 +123,7 @@ Процедура ПользовательСсылкаНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка) СтандартнаяОбработка = Ложь; - ПараметрыОтбора = Новый Структура("СкрытьПользователейБезПользователяИБ, РежимВыбора", Истина, Истина); + ПараметрыОтбора = Новый Структура("РежимВыбора", Истина); Если ИспользоватьВнешнихПользователей Тогда ВыборТипаПользователей = Новый СписокЗначений; @@ -296,7 +304,7 @@ Процедура ОчиститьВсеНастройки(Команда) ТекстВопроса = НСтр("ru = 'Очистить все настройки у пользователя ""%1""?'"); - ТекстВопроса = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ТекстВопроса, ПользовательСсылка); + ТекстВопроса = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ТекстВопроса, Строка(ПользовательСсылка)); КнопкиВопроса = Новый СписокЗначений; КнопкиВопроса.Добавить("Очистить", НСтр("ru='Очистить'")); КнопкиВопроса.Добавить("Отмена", НСтр("ru='Отмена'")); @@ -310,7 +318,7 @@ Процедура ОчиститьНастройкиОтчетовИВнешнегоВида(Команда) ТекстВопроса = НСтр("ru = 'Очистить все настройки отчетов и внешнего вида у пользователя ""%1""?'"); - ТекстВопроса = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ТекстВопроса, ПользовательСсылка); + ТекстВопроса = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ТекстВопроса, Строка(ПользовательСсылка)); КнопкиВопроса = Новый СписокЗначений; КнопкиВопроса.Добавить("Очистить", НСтр("ru='Очистить'")); КнопкиВопроса.Добавить("Отмена", НСтр("ru='Отмена'")); @@ -332,8 +340,7 @@ Процедура ОчиститьНастройкиВсехПользователей(Команда) ТекстВопроса = НСтр("ru = 'Сейчас будут очищены все настройки всех пользователей. - |Продолжить?'"); - ТекстВопроса = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ТекстВопроса, ПользовательСсылка); + |Продолжить?'"); КнопкиВопроса = Новый СписокЗначений; КнопкиВопроса.Добавить("ОчиститьВсе", НСтр("ru='Очистить все'")); КнопкиВопроса.Добавить("Отмена", НСтр("ru='Отмена'")); @@ -377,8 +384,7 @@ КоличествоНастроек = КоличествоНастроекВДереве(СписокНастроек); Если КоличествоНастроек <> 0 Тогда - Элементы.НастройкиОтчетовСтраница.Заголовок = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru='Настройки отчетов (%1)'"), КоличествоНастроек); + Элементы.НастройкиОтчетовСтраница.Заголовок = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru='Настройки отчетов (%1)'"), КоличествоНастроек); Иначе Элементы.НастройкиОтчетовСтраница.Заголовок = НСтр("ru='Настройки отчетов'"); КонецЕсли; @@ -388,8 +394,7 @@ КоличествоНастроек = КоличествоНастроекВДереве(СписокНастроек); Если КоличествоНастроек <> 0 Тогда - Элементы.ВнешнийВидСтраница.Заголовок = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru='Внешний вид (%1)'"), КоличествоНастроек); + Элементы.ВнешнийВидСтраница.Заголовок = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru='Внешний вид (%1)'"), КоличествоНастроек); Иначе Элементы.ВнешнийВидСтраница.Заголовок = НСтр("ru='Внешний вид'"); КонецЕсли; @@ -399,8 +404,7 @@ КоличествоНастроек = КоличествоНастроекВДереве(СписокНастроек); Если КоличествоНастроек <> 0 Тогда - Элементы.ПрочиеНастройкиСтраница.Заголовок = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru='Прочие настройки (%1)'"), КоличествоНастроек); + Элементы.ПрочиеНастройкиСтраница.Заголовок = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru='Прочие настройки (%1)'"), КоличествоНастроек); Иначе Элементы.ПрочиеНастройкиСтраница.Заголовок = НСтр("ru='Прочие настройки'"); КонецЕсли; @@ -447,7 +451,7 @@ Если Элемент.Пометка Тогда ЛичныхНастроекОтчетов = ЛичныхНастроекОтчетов + 1; - КлючОтчета = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(Элемент.Значение, "/"); + КлючОтчета = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(Элемент.Значение, "/"); ПараметрОтбора = Новый Структура("КлючОбъекта", КлючОтчета[0]); МассивСтрок = ТаблицаПользовательскихВариантовОтчетов.НайтиСтроки(ПараметрОтбора); Если МассивСтрок.Количество() <> 0 Тогда @@ -543,17 +547,18 @@ КонецЕсли; // Очистка настроек - Обработки.НастройкиПользователей.УдалитьВыбранныеНастройки(ПользовательИнформационнойБазы, Результат.МассивНастроек, НазваниеХранилища); + СведенияОПользователе = Новый Структура; + СведенияОПользователе.Вставить("ИмяПользователяИнформационнойБазы", ПользовательИнформационнойБазы); + СведенияОПользователе.Вставить("ПользовательСсылка", ПользовательСсылка); + + Обработки.НастройкиПользователей.УдалитьВыбранныеНастройки(СведенияОПользователе, Результат.МассивНастроек, НазваниеХранилища); Если Результат.МассивПерсональныхНастроек.Количество() <> 0 Тогда Обработки.НастройкиПользователей.УдалитьВыбранныеНастройки( - ПользовательИнформационнойБазы, Результат.МассивПерсональныхНастроек, "ХранилищеОбщихНастроек"); + СведенияОПользователе, Результат.МассивПерсональныхНастроек, "ХранилищеОбщихНастроек"); КонецЕсли; Если Результат.МассивПользовательскихНастроек.Количество() <> 0 Тогда Для Каждого ПрочиеПользовательскиеНастройки Из Результат.МассивПользовательскихНастроек Цикл - СведенияОПользователе = Новый Структура; - СведенияОПользователе.Вставить("ПользовательСсылка", ПользовательСсылка); - СведенияОПользователе.Вставить("ИмяПользователяИнформационнойБазы", ПользовательИнформационнойБазы); ПользователиСлужебный.ПриУдаленииПрочихНастроек( СведенияОПользователе, ПрочиеПользовательскиеНастройки); КонецЦикла; @@ -682,11 +687,9 @@ ИменаНастроек = Лев(ИменаНастроек, СтрДлина(ИменаНастроек)-2); Если МассивНастроек.Количество() = 7 Тогда - ТекстПояснения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Скопированы все настройки %1'"), ПояснениеКомуСкопированыНастройки); + ТекстПояснения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Скопированы все настройки %1'"), ПояснениеКомуСкопированыНастройки); Иначе - ТекстПояснения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = '%1 скопированы %2'"), ИменаНастроек, ПояснениеКомуСкопированыНастройки); + ТекстПояснения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = '%1 скопированы %2'"), ИменаНастроек, ПояснениеКомуСкопированыНастройки); КонецЕсли; Состояние(НСтр("ru = 'Выполняется копирование настроек'")); @@ -821,8 +824,7 @@ ТекстПояснения = НСтр("ru = 'Очищены все настройки пользователя ""%1""'"); ТекстПояснения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ТекстПояснения, ПользовательСсылка); - ПоказатьОповещениеПользователя( - НСтр("ru = 'Очистка настроек'"), , ТекстПояснения, БиблиотекаКартинок.Информация32); + ПоказатьОповещениеПользователя(НСтр("ru = 'Очистка настроек'"), , ТекстПояснения, БиблиотекаКартинок.Информация32); КонецПроцедуры @@ -842,9 +844,8 @@ ОбщегоНазначенияКлиент.ОбновитьИнтерфейсПрограммы(); ТекстПояснения = НСтр("ru = 'Очищены все настройки отчетов и внешнего вида у пользователя ""%1""'"); - ТекстПояснения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ТекстПояснения, ПользовательСсылка); - ПоказатьОповещениеПользователя( - НСтр("ru = 'Очистка настроек'"), , ТекстПояснения, БиблиотекаКартинок.Информация32); + ТекстПояснения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ТекстПояснения, Строка(ПользовательСсылка)); + ПоказатьОповещениеПользователя(НСтр("ru = 'Очистка настроек'"), , ТекстПояснения, БиблиотекаКартинок.Информация32); КонецПроцедуры @@ -996,16 +997,17 @@ &НаКлиенте Процедура ОповеститьОбУдалении(КоличествоНастроек, НазваниеНастройки = Неопределено, КоличествоПользователей = Неопределено) - ПрописьПредмета = ПользователиСлужебныйКлиент.ФормированиеСтрокиКоличестваНастроек(КоличествоНастроек); + ПрописьПредмета = Формат(КоличествоНастроек, "ЧДЦ=0") + " " + + ПользователиСлужебныйКлиентСервер.ПредметЦелогоЧисла(КоличествоНастроек, + "Л = ru_RU", НСтр("ru = 'настройка,настройки,настроек,,,,,,0'")); + Если КоличествоНастроек = 1 И КоличествоПользователей = Неопределено Тогда ТекстПояснения = НСтр("ru = '""%1"" очищена пользователю ""%2""'"); - ТекстПояснения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - ТекстПояснения, НазваниеНастройки, Строка(ПользовательСсылка)); + ТекстПояснения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ТекстПояснения, НазваниеНастройки, Строка(ПользовательСсылка)); ИначеЕсли КоличествоПользователей = Неопределено Тогда ТекстПояснения = НСтр("ru = 'Очищено %1 пользователю ""%2""'"); - ТекстПояснения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - ТекстПояснения, ПрописьПредмета, Строка(ПользовательСсылка)); + ТекстПояснения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ТекстПояснения, ПрописьПредмета, Строка(ПользовательСсылка)); КонецЕсли; ПояснениеКомуОчищатьНастройки = ПользователиСлужебныйКлиент.ПояснениеПользователи( @@ -1015,12 +1017,10 @@ Если КоличествоНастроек = 1 Тогда ТекстПояснения = НСтр("ru = '""%1"" очищена %2'"); - ТекстПояснения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - ТекстПояснения, НазваниеНастройки, ПояснениеКомуОчищатьНастройки); + ТекстПояснения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ТекстПояснения, НазваниеНастройки, ПояснениеКомуОчищатьНастройки); Иначе ТекстПояснения = НСтр("ru = 'Очищено %1 %2'"); - ТекстПояснения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - ТекстПояснения, ПрописьПредмета, ПояснениеКомуОчищатьНастройки); + ТекстПояснения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ТекстПояснения, ПрописьПредмета, ПояснениеКомуОчищатьНастройки); КонецЕсли; КонецЕсли; @@ -1060,7 +1060,7 @@ КонецПроцедуры &НаСервере -Процедура ПолучитьИмяПользователяИОбновить() +Функция РезультатПолученияНастроек() Если Не ЗначениеЗаполнено(ПользовательСсылка) Тогда ПользовательСсылка = Справочники.Пользователи.ПустаяСсылка(); @@ -1068,9 +1068,16 @@ Иначе ПользовательИнформационнойБазы = Обработки.НастройкиПользователей.ИмяПользователяИБ(ПользовательСсылка); КонецЕсли; + + Если ПользовательИнформационнойБазы = "" Тогда + Возврат "НетПользователяИБ"; + КонецЕсли; + ЗаполнитьСпискиНастроек(); -КонецПроцедуры + Возврат "Успешно"; + +КонецФункции &НаСервере Функция ДеревоНастроекДляВыбраннойСтраницы() @@ -1171,8 +1178,13 @@ КонецЦикла; - Возврат Новый Структура("МассивНастроек, МассивПерсональныхНастроек, МассивВариантовОтчетов, МассивПользовательскихНастроек", - МассивНастроек, МассивПерсональныхНастроек, МассивВариантовОтчетов, МассивПользовательскихНастроек); + Результат = Новый Структура; + Результат.Вставить("МассивНастроек", МассивНастроек); + Результат.Вставить("МассивПерсональныхНастроек", МассивПерсональныхНастроек); + Результат.Вставить("МассивВариантовОтчетов", МассивВариантовОтчетов); + Результат.Вставить("МассивПользовательскихНастроек", МассивПользовательскихНастроек); + + Возврат Результат; КонецФункции #КонецОбласти diff --git a/SSL/src/DataProcessors/НастройкиПользователей/Forms/ОчисткаНастроекПользователей/Form.form b/SSL/src/DataProcessors/НастройкиПользователей/Forms/ОчисткаНастроекПользователей/Form.form index e1eedbf75..542492f92 100644 --- a/SSL/src/DataProcessors/НастройкиПользователей/Forms/ОчисткаНастроекПользователей/Form.form +++ b/SSL/src/DataProcessors/НастройкиПользователей/Forms/ОчисткаНастроекПользователей/Form.form @@ -488,7 +488,6 @@ true true true - UseIfNecessary auto true @@ -678,7 +677,7 @@ Очистить - Auto + DontUse Auto @@ -700,7 +699,7 @@ ОчиститьИЗакрыть - Auto + DontUse Auto diff --git a/SSL/src/DataProcessors/НастройкиПользователей/Forms/ОчисткаНастроекПользователей/Module.bsl b/SSL/src/DataProcessors/НастройкиПользователей/Forms/ОчисткаНастроекПользователей/Module.bsl index fbd5261bd..37a9dda93 100644 --- a/SSL/src/DataProcessors/НастройкиПользователей/Forms/ОчисткаНастроекПользователей/Module.bsl +++ b/SSL/src/DataProcessors/НастройкиПользователей/Forms/ОчисткаНастроекПользователей/Module.bsl @@ -35,20 +35,9 @@ Элементы.ВыбратьПользователей.Заголовок = Строка(Параметр.ПользователиПриемник[0]); Элементы.ГруппаОчищаемыеНастройки.Доступность = Истина; ИначеЕсли КоличествоПользователей > 1 Тогда - - ПрописьЧисла = ЧислоПрописью( - КоличествоПользователей, - "Л = ru_RU", - НСтр("ru = ',,,,,,,,0'")); - ПрописьЧислаИПредмета = ЧислоПрописью( - КоличествоПользователей, - "Л = ru_RU", - НСтр("ru = 'пользователь,пользователя,пользователей,,,,,,0'")); - ЧислоИПредмет = СтрЗаменить( - ПрописьЧислаИПредмета, - ПрописьЧисла, - Формат(КоличествоПользователей, "ЧДЦ=0") + " "); - + ЧислоИПредмет = Формат(КоличествоПользователей, "ЧДЦ=0") + " " + + ПользователиСлужебныйКлиентСервер.ПредметЦелогоЧисла(КоличествоПользователей, + "Л = ru_RU", НСтр("ru = 'пользователь,пользователя,пользователей,,,,,,0'")); Элементы.ВыбратьПользователей.Заголовок = ЧислоИПредмет; ПереключательОчищаемыеНастройки = "ОчиститьВсе"; КонецЕсли; @@ -73,18 +62,9 @@ ПредставлениеНастройки = Параметр.ПредставленияНастроек[0]; ТекстЗаголовка = ПредставлениеНастройки; Иначе - ПрописьЧисла = ЧислоПрописью( - КоличествоНастроек, - "Л = ru_RU", - НСтр("ru = ',,,,,,,,0'")); - ПрописьЧислаИПредмета = ЧислоПрописью( - КоличествоНастроек, - "Л = ru_RU", - НСтр("ru = 'настройка,настройки,настроек,,,,,,0'")); - ТекстЗаголовка = СтрЗаменить( - ПрописьЧислаИПредмета, - ПрописьЧисла, - Формат(КоличествоНастроек, "ЧДЦ=0") + " "); + ТекстЗаголовка = Формат(КоличествоНастроек, "ЧДЦ=0") + " " + + ПользователиСлужебныйКлиентСервер.ПредметЦелогоЧисла(КоличествоНастроек, + "Л = ru_RU", НСтр("ru = 'настройка,настройки,настроек,,,,,,0'")); КонецЕсли; Элементы.ВыбратьНастройки.Заголовок = ТекстЗаголовка; @@ -218,8 +198,12 @@ ВыбранныеПользователи = Неопределено; ПользователиКоторымОчищаютсяНастройки.Свойство("МассивПользователей", ВыбранныеПользователи); - ПараметрыФормы = Новый Структура("Пользователь, ТипПользователя, ТипДействия, ВыбранныеПользователи", - "", ТипПользователя, "Очистка", ВыбранныеПользователи); + ПараметрыФормы = Новый Структура; + ПараметрыФормы.Вставить("Пользователь", ""); + ПараметрыФормы.Вставить("ТипПользователя", ТипПользователя); + ПараметрыФормы.Вставить("ТипДействия", "Очистка"); + ПараметрыФормы.Вставить("ВыбранныеПользователи", ВыбранныеПользователи); + ОткрытьФорму("Обработка.НастройкиПользователей.Форма.ВыборПользователей", ПараметрыФормы); КонецПроцедуры @@ -243,8 +227,7 @@ ПояснениеУКогоОчищеныНастройки, ПользователиКоторымОчищаютсяНастройки.МассивПользователей[0]); Иначе ПояснениеУКогоОчищеныНастройки = НСтр("ru = '%1 пользователям'"); - ПояснениеУКогоОчищеныНастройки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - ПояснениеУКогоОчищеныНастройки, КоличествоПользователей); + ПояснениеУКогоОчищеныНастройки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ПояснениеУКогоОчищеныНастройки, КоличествоПользователей); КонецЕсли; Иначе @@ -268,39 +251,24 @@ КонецЕсли; ТекстПояснения = НСтр("ru = '""%1"" очищена у %2'"); - ТекстПояснения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - ТекстПояснения, ПредставлениеНастройки, ПояснениеУКогоОчищеныНастройки); + ТекстПояснения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ТекстПояснения, ПредставлениеНастройки, ПояснениеУКогоОчищеныНастройки); Иначе - - ПрописьЧисла = ЧислоПрописью( - КоличествоНастроек, - "Л = ru_RU", - НСтр("ru = ',,,,,,,,0'")); - ПрописьЧислаИПредмета = ЧислоПрописью( - КоличествоНастроек, - "Л = ru_RU", - НСтр("ru = 'настройка,настройки,настроек,,,,,,0'")); - ПрописьПредмета = СтрЗаменить( - ПрописьЧислаИПредмета, - ПрописьЧисла, - Формат(КоличествоНастроек, "ЧДЦ=0") + " "); + ПрописьПредмета = Формат(КоличествоНастроек, "ЧДЦ=0") + " " + + ПользователиСлужебныйКлиентСервер.ПредметЦелогоЧисла(КоличествоНастроек, + "Л = ru_RU", НСтр("ru = 'настройка,настройки,настроек,,,,,,0'")); ТекстПояснения = НСтр("ru = 'Очищено %1 у %2'"); - ТекстПояснения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - ТекстПояснения, ПрописьПредмета, ПояснениеУКогоОчищеныНастройки); + ТекстПояснения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ТекстПояснения, ПрописьПредмета, ПояснениеУКогоОчищеныНастройки); КонецЕсли; - ПоказатьОповещениеПользователя( - НСтр("ru = 'Очистка настроек'"), , ТекстПояснения, БиблиотекаКартинок.Информация32); + ПоказатьОповещениеПользователя(НСтр("ru = 'Очистка настроек'"), , ТекстПояснения, БиблиотекаКартинок.Информация32); ИначеЕсли ПереключательОчищаемыеНастройки = "ОчиститьВсе" Тогда ОчиститьВсеНастройки(); ТекстПояснения = НСтр("ru = 'Очищены все настройки %1'"); - ТекстПояснения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - ТекстПояснения, ПояснениеУКогоОчищеныНастройки); - ПоказатьОповещениеПользователя( - НСтр("ru = 'Очистка настроек'"), , ТекстПояснения, БиблиотекаКартинок.Информация32); + ТекстПояснения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ТекстПояснения, ПояснениеУКогоОчищеныНастройки); + ПоказатьОповещениеПользователя(НСтр("ru = 'Очистка настроек'"), , ТекстПояснения, БиблиотекаКартинок.Информация32); КонецЕсли; КоличествоНастроек = 0; @@ -314,10 +282,13 @@ Источник = ПользователиКоторымОчищаютсяНастройки.МассивПользователей[0]; Пользователь = Обработки.НастройкиПользователей.ИмяПользователяИБ(Источник); + СведенияОПользователе = Новый Структура; + СведенияОПользователе.Вставить("ПользовательСсылка", Источник); + СведенияОПользователе.Вставить("ИмяПользователяИнформационнойБазы", Пользователь); Если ВыбранныеНастройки.НастройкиОтчетов.Количество() > 0 Тогда Обработки.НастройкиПользователей.УдалитьВыбранныеНастройки( - Пользователь, ВыбранныеНастройки.НастройкиОтчетов, "ХранилищеПользовательскихНастроекОтчетов"); + СведенияОПользователе, ВыбранныеНастройки.НастройкиОтчетов, "ХранилищеПользовательскихНастроекОтчетов"); Обработки.НастройкиПользователей.УдалитьВариантыОтчетов( ВыбранныеНастройки.ВыбранныеВариантыОтчетов, ВыбранныеНастройки.ТаблицаВариантовОтчетов, Пользователь); @@ -325,23 +296,20 @@ Если ВыбранныеНастройки.ВнешнийВид.Количество() > 0 Тогда Обработки.НастройкиПользователей.УдалитьВыбранныеНастройки( - Пользователь, ВыбранныеНастройки.ВнешнийВид, "ХранилищеСистемныхНастроек"); + СведенияОПользователе, ВыбранныеНастройки.ВнешнийВид, "ХранилищеСистемныхНастроек"); КонецЕсли; Если ВыбранныеНастройки.ПрочиеНастройки.Количество() > 0 Тогда Обработки.НастройкиПользователей.УдалитьВыбранныеНастройки( - Пользователь, ВыбранныеНастройки.ПрочиеНастройки, "ХранилищеСистемныхНастроек"); + СведенияОПользователе, ВыбранныеНастройки.ПрочиеНастройки, "ХранилищеСистемныхНастроек"); КонецЕсли; Если ВыбранныеНастройки.ПерсональныеНастройки.Количество() > 0 Тогда Обработки.НастройкиПользователей.УдалитьВыбранныеНастройки( - Пользователь, ВыбранныеНастройки.ПерсональныеНастройки, "ХранилищеОбщихНастроек"); + СведенияОПользователе, ВыбранныеНастройки.ПерсональныеНастройки, "ХранилищеОбщихНастроек"); КонецЕсли; Если ВыбранныеНастройки.ПрочиеПользовательскиеНастройки.Количество() > 0 Тогда - СведенияОПользователе = Новый Структура; - СведенияОПользователе.Вставить("ПользовательСсылка", Источник); - СведенияОПользователе.Вставить("ИмяПользователяИнформационнойБазы", Пользователь); ПользователиСлужебный.ПриУдаленииПрочихНастроек( СведенияОПользователе, ВыбранныеНастройки.ПрочиеПользовательскиеНастройки); КонецЕсли; diff --git a/SSL/src/DataProcessors/НастройкиПользователей/Forms/ПредупреждениеОКопированииНастроек/Form.form b/SSL/src/DataProcessors/НастройкиПользователей/Forms/ПредупреждениеОКопированииНастроек/Form.form index a4acc7b5e..d30cdf94c 100644 --- a/SSL/src/DataProcessors/НастройкиПользователей/Forms/ПредупреждениеОКопированииНастроек/Form.form +++ b/SSL/src/DataProcessors/НастройкиПользователей/Forms/ПредупреждениеОКопированииНастроек/Form.form @@ -187,7 +187,6 @@ true true true - UseIfNecessary auto true @@ -227,7 +226,7 @@ Скопировать - Auto + DontUse Auto diff --git a/SSL/src/DataProcessors/НастройкиПользователей/ManagerModule.bsl b/SSL/src/DataProcessors/НастройкиПользователей/ManagerModule.bsl index 4388c2b24..b4e4b4f03 100644 --- a/SSL/src/DataProcessors/НастройкиПользователей/ManagerModule.bsl +++ b/SSL/src/DataProcessors/НастройкиПользователей/ManagerModule.bsl @@ -14,7 +14,7 @@ // Возвращаемое значение // СписокЗначений - Список форм, для которых у переданного пользователя есть настройки. // -Функция НастройкиВсехФорм(ИмяПользователя) Экспорт +Функция НастройкиВсехФорм(ИмяПользователя) СписокФорм = ФормыОбъектовМетаданных(); @@ -182,21 +182,45 @@ // Функция СписокНастроекФорм(СписокФорм, ИмяПользователя) - Результат = Новый СписокЗначений; - Настройки = ЧтениеНастроекИзХранилища(ХранилищеСистемныхНастроек, ИмяПользователя); - МассивНастроекФорм = ПредопределенныеНастройки(); - Для Каждого Элемент Из СписокФорм Цикл + Результат = Новый ТаблицаЗначений; + Результат.Колонки.Добавить("Значение", Новый ОписаниеТипов("Строка")); + Результат.Колонки.Добавить("Представление", Новый ОписаниеТипов("Строка")); + Результат.Колонки.Добавить("Пометка", Новый ОписаниеТипов("Булево")); + Результат.Колонки.Добавить("Картинка", Новый ОписаниеТипов("Картинка")); + Результат.Колонки.Добавить("СписокКлючей", Новый ОписаниеТипов("СписокЗначений")); + + СтрокаРезультата = Неопределено; + ОписаниеФормы = Неопределено; + + Настройки = ЧтениеНастроекИзХранилища(ХранилищеСистемныхНастроек, ИмяПользователя); + КлючиНастроек = Настройки.ВыгрузитьКолонку("КлючОбъекта"); + + ТекущееИмяФормы = ""; + Для Каждого КлючОбъекта Из КлючиНастроек Цикл + ЧастиКлючаОбъекта = СтрРазделить(КлючОбъекта, "/"); + Если ЧастиКлючаОбъекта.Количество() < 2 Тогда + Продолжить; + КонецЕсли; - Для Каждого НастройкаФормы Из МассивНастроекФорм Цикл + ИмяФормы = ЧастиКлючаОбъекта[0]; + Если ЗначениеЗаполнено(ИмяФормы) И ИмяФормы = ТекущееИмяФормы Тогда + СтрокаРезультата.СписокКлючей.Добавить(КлючОбъекта, "", ОписаниеФормы.Пометка); + Продолжить; + КонецЕсли; - ПоискНастройки = Настройки.Найти(Элемент.Значение + НастройкаФормы); - Если ПоискНастройки <> Неопределено Тогда - Результат.Добавить(Элемент.Значение, Элемент.Представление, Элемент.Пометка, Элемент.Картинка); - Прервать; - КонецЕсли; - - КонецЦикла; + ОписаниеФормы = СписокФорм.НайтиПоЗначению(ИмяФормы); + Если ОписаниеФормы = Неопределено Тогда + Продолжить; + КонецЕсли; + СтрокаРезультата = Результат.Добавить(); + СтрокаРезультата.Значение = ОписаниеФормы.Значение; + СтрокаРезультата.Представление = ОписаниеФормы.Представление; + СтрокаРезультата.Пометка = ОписаниеФормы.Пометка; + СтрокаРезультата.Картинка = ОписаниеФормы.Картинка; + СтрокаРезультата.СписокКлючей.Добавить(КлючОбъекта, "", ОписаниеФормы.Пометка); + + ТекущееИмяФормы = ИмяФормы; КонецЦикла; Возврат Результат; @@ -314,30 +338,33 @@ Продолжить; КонецЕсли; - Источник = ИмяПользователяИБ(Источник); + ПользовательИБ = ИмяПользователяИБ(Источник); Если ОчищаемаяНастройка = "НастройкиОтчетов" Тогда Если ТаблицаПользовательскихВариантовОтчетов = Неопределено Тогда - ТаблицаПользовательскихВариантовОтчетов = ПользовательскиеВариантыОтчетов(Источник); + ТаблицаПользовательскихВариантовОтчетов = ПользовательскиеВариантыОтчетов(ПользовательИБ); КонецЕсли; Для Каждого ВариантОтчета Из ТаблицаПользовательскихВариантовОтчетов Цикл СтандартнаяОбработка = Истина; - ПользователиСлужебный.ПриУдаленииПользовательскихВариантовОтчета(ВариантОтчета, Источник, СтандартнаяОбработка); + + ИнтеграцияСтандартныхПодсистем.ПриУдаленииПользовательскихВариантовОтчета(ВариантОтчета, + ПользовательИБ, СтандартнаяОбработка); + Если СтандартнаяОбработка Тогда - ХранилищеВариантовОтчетов.Удалить(ВариантОтчета.КлючОбъекта, ВариантОтчета.КлючВарианта, Источник); + ХранилищеВариантовОтчетов.Удалить(ВариантОтчета.КлючОбъекта, ВариантОтчета.КлючВарианта, ПользовательИБ); КонецЕсли; КонецЦикла; КонецЕсли; - НастройкиИзХранилища = СписокНастроек(Источник, МенеджерНастроек, ОчищаемаяНастройка); - УдалитьНастройки(МенеджерНастроек, НастройкиИзХранилища, Источник); + НастройкиИзХранилища = СписокНастроек(ПользовательИБ, МенеджерНастроек, ОчищаемаяНастройка); + УдалитьНастройки(МенеджерНастроек, НастройкиИзХранилища, ПользовательИБ); - ПользователиСлужебный.УстановитьНачальныеНастройки(Источник); + ПользователиСлужебный.УстановитьНачальныеНастройки(ПользовательИБ, Источник); КонецЦикла; @@ -472,13 +499,13 @@ КонецЕсли; Если Не ПолучитьИзбранное - И Найти(ВыборкаНастроек.КлючОбъекта, "ИзбранноеРаботыПользователя") <> 0 Тогда + И СтрНайти(ВыборкаНастроек.КлючОбъекта, "ИзбранноеРаботыПользователя") <> 0 Тогда Продолжить; ИначеЕсли ПолучитьИзбранное Тогда - Если Найти(ВыборкаНастроек.КлючОбъекта, "ИзбранноеРаботыПользователя") = 0 Тогда + Если СтрНайти(ВыборкаНастроек.КлючОбъекта, "ИзбранноеРаботыПользователя") = 0 Тогда Продолжить; - ИначеЕсли Найти(ВыборкаНастроек.КлючОбъекта, "ИзбранноеРаботыПользователя") <> 0 Тогда + ИначеЕсли СтрНайти(ВыборкаНастроек.КлючОбъекта, "ИзбранноеРаботыПользователя") <> 0 Тогда ДобавитьСтрокуВТаблицуЗначений(ТаблицаНастроек, ВыборкаНастроек); Продолжить; КонецЕсли; @@ -486,13 +513,13 @@ КонецЕсли; Если Не ПолучитьНастройкиПечати - И Найти(ВыборкаНастроек.КлючОбъекта, "НастройкиПечатиТабличногоДокумента") <> 0 Тогда + И СтрНайти(ВыборкаНастроек.КлючОбъекта, "НастройкиПечатиТабличногоДокумента") <> 0 Тогда Продолжить; ИначеЕсли ПолучитьНастройкиПечати Тогда - Если Найти(ВыборкаНастроек.КлючОбъекта, "НастройкиПечатиТабличногоДокумента") = 0 Тогда + Если СтрНайти(ВыборкаНастроек.КлючОбъекта, "НастройкиПечатиТабличногоДокумента") = 0 Тогда Продолжить; - ИначеЕсли Найти(ВыборкаНастроек.КлючОбъекта, "НастройкиПечатиТабличногоДокумента") <> 0 Тогда + ИначеЕсли СтрНайти(ВыборкаНастроек.КлючОбъекта, "НастройкиПечатиТабличногоДокумента") <> 0 Тогда ДобавитьСтрокуВТаблицуЗначений(ТаблицаНастроек, ВыборкаНастроек); Продолжить; КонецЕсли; @@ -549,7 +576,7 @@ Или МенеджерНастроек = ХранилищеВариантовОтчетов Тогда МассивДоступныхОтчетов = ОтчетыДоступныеПользователю(ПользовательПриемникИБ); - КлючОтчета = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(КлючОбъекта, "/"); + КлючОтчета = СтрРазделить(КлючОбъекта, "/", Ложь); Если МассивДоступныхОтчетов.Найти(КлючОтчета[0]) = Неопределено Тогда Если МенеджерНастроек = ХранилищеПользовательскихНастроекОтчетов @@ -620,7 +647,7 @@ Если МенеджерНастроек = ХранилищеПользовательскихНастроекОтчетов Тогда МассивДоступныхОтчетов = ОтчетыДоступныеПользователю(ПользовательПриемникИБ); - КлючОтчета = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(КлючОбъекта, "/"); + КлючОтчета = СтрРазделить(КлючОбъекта, "/", Ложь); Если МассивДоступныхОтчетов.Найти(КлючОтчета[0]) = Неопределено Тогда @@ -660,7 +687,6 @@ // настроек. // Процедура СкопироватьНастройкиВнешнегоВида(ПользовательИсточник, ПользователиПриемник, МассивНастроекДляКопирования) Экспорт - МассивНастроекФорм = ПредопределенныеНастройки(); Для Каждого Элемент Из МассивНастроекДляКопирования Цикл @@ -674,19 +700,15 @@ Продолжить; КонецЕсли; - Для Каждого Элемент Из МассивНастроекФорм Цикл - Настройка = ХранилищеСистемныхНастроек.Загрузить(КлючОбъекта + Элемент, КлючНастроек, , ПользовательИсточник); + Настройка = ХранилищеСистемныхНастроек.Загрузить(КлючОбъекта, КлючНастроек, , ПользовательИсточник); + Если Настройка <> Неопределено Тогда - Если Настройка <> Неопределено Тогда - - Для Каждого ПользовательПриемник Из ПользователиПриемник Цикл - ПользовательПриемникИБ = Обработки.НастройкиПользователей.ИмяПользователяИБ(ПользовательПриемник); - ХранилищеСистемныхНастроек.Сохранить(КлючОбъекта + Элемент, КлючНастроек, Настройка, , ПользовательПриемникИБ); - КонецЦикла; - - КонецЕсли; + Для Каждого ПользовательПриемник Из ПользователиПриемник Цикл + ПользовательПриемникИБ = Обработки.НастройкиПользователей.ИмяПользователяИБ(ПользовательПриемник); + ХранилищеСистемныхНастроек.Сохранить(КлючОбъекта, КлючНастроек, Настройка, , ПользовательПриемникИБ); + КонецЦикла; - КонецЦикла; + КонецЕсли; КонецЦикла; @@ -711,20 +733,20 @@ Процедура УдалитьНастройкиВыбраннымПользователям(Пользователи, МассивНастроекДляУдаления, НазваниеХранилища) Экспорт Для Каждого Пользователь Из Пользователи Цикл - Пользователь = Обработки.НастройкиПользователей.ИмяПользователяИБ(Пользователь); - УдалитьВыбранныеНастройки(Пользователь, МассивНастроекДляУдаления, НазваниеХранилища); + ПользовательИнформационнойБазы = Обработки.НастройкиПользователей.ИмяПользователяИБ(Пользователь); + + СведенияОПользователе = Новый Структура; + СведенияОПользователе.Вставить("ИмяПользователяИнформационнойБазы", ПользовательИнформационнойБазы); + СведенияОПользователе.Вставить("ПользовательСсылка", Пользователь); + УдалитьВыбранныеНастройки(СведенияОПользователе, МассивНастроекДляУдаления, НазваниеХранилища); КонецЦикла; КонецПроцедуры -// Удаляет выбранные настройки. -// -// Параметры: -// Пользователь - Строка - Имя пользователя информационной базы, у которого необходимо удалить настройки. -// МассивНастроекДляУдаления - Массив - элемент массива - СписокЗначений, в котором содержатся ключи выбранных настроек. -// НазваниеХранилища - Строка - название хранилища, из которого необходимо удалить настройки. -// -Процедура УдалитьВыбранныеНастройки(ИмяПользователя, МассивНастроекДляУдаления, ИмяХранилища) Экспорт +Процедура УдалитьВыбранныеНастройки(СведенияОПользователе, МассивНастроекДляУдаления, ИмяХранилища) Экспорт + + ПользовательИБ = СведенияОПользователе.ИмяПользователяИнформационнойБазы; + ПользовательСсылка = СведенияОПользователе.ПользовательСсылка; МенеджерНастроек = ХранилищеНастроекПоИмени(ИмяХранилища); Если ИмяХранилища = "ХранилищеПользовательскихНастроекОтчетов" Или ИмяХранилища = "ХранилищеОбщихНастроек" Тогда @@ -732,7 +754,7 @@ Для Каждого Элемент Из МассивНастроекДляУдаления Цикл Для Каждого Настройка Из Элемент Цикл - МенеджерНастроек.Удалить(Настройка.Значение, Настройка.Представление, ИмяПользователя); + МенеджерНастроек.Удалить(Настройка.Значение, Настройка.Представление, ПользовательИБ); КонецЦикла; КонецЦикла; @@ -740,7 +762,6 @@ ИначеЕсли ИмяХранилища = "ХранилищеСистемныхНастроек" Тогда УстановитьНачальныеНастройки = Ложь; - МассивНастроекФорм = ПредопределенныеНастройки(); Для Каждого Элемент Из МассивНастроекДляУдаления Цикл @@ -748,7 +769,7 @@ Если Настройка.Представление = "Интерфейс" Или Настройка.Представление = "Прочие" Тогда - МенеджерНастроек.Удалить(Настройка.Значение, , ИмяПользователя); + МенеджерНастроек.Удалить(Настройка.Значение, , ПользовательИБ); Если Настройка.Значение = "Общее/НастройкиКлиентскогоПриложения" Или Настройка.Значение = "Общее/ПанельРазделов/НастройкиКомандногоИнтерфейса" @@ -760,9 +781,7 @@ Иначе - Для Каждого ЭлементФорм Из МассивНастроекФорм Цикл - МенеджерНастроек.Удалить(Настройка.Значение + ЭлементФорм, Настройка.Представление, ИмяПользователя); - КонецЦикла; + МенеджерНастроек.Удалить(Настройка.Значение, Настройка.Представление, ПользовательИБ); КонецЕсли; @@ -771,7 +790,7 @@ КонецЦикла; Если УстановитьНачальныеНастройки Тогда - ПользователиСлужебный.УстановитьНачальныеНастройки(ИмяПользователя); + ПользователиСлужебный.УстановитьНачальныеНастройки(ПользовательИБ, ПользовательСсылка); КонецЕсли; КонецЕсли; @@ -782,7 +801,7 @@ Для Каждого Настройка Из МассивВариантовОтчетов Цикл - КлючОбъекта = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(Настройка[0].Значение, "/"); + КлючОбъекта = СтрРазделить(Настройка[0].Значение, "/", Ложь); КлючОтчета = КлючОбъекта[0]; КлючВарианта = КлючОбъекта[1]; @@ -794,7 +813,10 @@ КонецЕсли; СтандартнаяОбработка = Истина; - ПользователиСлужебный.ПриУдаленииПользовательскихВариантовОтчета(НайденныйВариантОтчета[0], ПользовательИнформационнойБазы, СтандартнаяОбработка); + + ИнтеграцияСтандартныхПодсистем.ПриУдаленииПользовательскихВариантовОтчета(НайденныйВариантОтчета[0], + ПользовательИнформационнойБазы, СтандартнаяОбработка); + Если СтандартнаяОбработка Тогда ХранилищеВариантовОтчетов.Удалить(КлючОтчета, КлючВарианта, ПользовательИнформационнойБазы); КонецЕсли; @@ -812,7 +834,7 @@ Для Каждого Настройка Из МассивВариантовОтчетов Цикл - КлючОбъекта = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(Настройка[0].Значение, "/"); + КлючОбъекта = СтрРазделить(Настройка[0].Значение, "/", Ложь); КлючОтчета = КлючОбъекта[0]; КлючВарианта = КлючОбъекта[1]; @@ -876,8 +898,8 @@ |ГДЕ | НЕ Пользователи.Недействителен" + ?(Очистка И Не ОбщегоНазначенияПовтИсп.РазделениеВключено(),"", Символы.ПС + " И НЕ Пользователи.Служебный") - + ?(Очистка,"", Символы.ПС + " И НЕ Пользователи.ПометкаУдаления") + Символы.ПС + - " И Пользователи.Ссылка <> &ПользовательИсточник + + ?(Очистка,"", Символы.ПС + " И НЕ Пользователи.ПометкаУдаления") + Символы.ПС + + " И Пользователи.Ссылка <> &ПользовательИсточник | И Пользователи.ИдентификаторПользователяИБ <> &ПустойИдентификаторПользователяИБ"; Запрос.Параметры.Вставить("ПользовательИсточник", ПользовательИсточник); Запрос.Параметры.Вставить("ПустойИдентификаторПользователяИБ", Новый УникальныйИдентификатор("00000000-0000-0000-0000-000000000000")); @@ -1129,25 +1151,6 @@ КонецФункции -Функция ПредопределенныеНастройки() - - ИнтерфейсТакси = (ТекущийВариантИнтерфейсаКлиентскогоПриложения() = ВариантИнтерфейсаКлиентскогоПриложения.Такси); - - МассивНастроекФорм = Новый Массив; - МассивНастроекФорм.Добавить("/НастройкиФормы"); - Если ИнтерфейсТакси Тогда - МассивНастроекФорм.Добавить("/Такси/НастройкиОкна"); - МассивНастроекФорм.Добавить("/Такси/НастройкиОкнаВебКлиента"); - Иначе - МассивНастроекФорм.Добавить("/НастройкиОкна"); - МассивНастроекФорм.Добавить("/НастройкиОкнаВебКлиента"); - КонецЕсли; - МассивНастроекФорм.Добавить("/ТекущиеДанные"); - МассивНастроекФорм.Добавить("/ТекущиеПользовательскиеНастройки"); - - Возврат МассивНастроекФорм; -КонецФункции - Функция ПредставлениеФормы(Объект, Форма, ТипОбъектаМетаданных) ФормаОткрываемая = Ложь; @@ -1400,14 +1403,11 @@ Процедура ДобавитьТипФормыВПредставление(Объект, Форма, ИмяФормы) Если Форма = Объект.ОсновнаяФормаСписка Тогда - ИмяФормы = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru='%1 (список)'"), ИмяФормы); + ИмяФормы = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru='%1 (список)'"), ИмяФормы); ИначеЕсли Форма = Объект.ОсновнаяФормаДляВыбора Тогда - ИмяФормы = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru='%1 (выбор)'"), ИмяФормы); + ИмяФормы = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru='%1 (выбор)'"), ИмяФормы); ИначеЕсли Форма = Объект.ОсновнаяФормаГруппы Тогда - ИмяФормы = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru='%1 (группа)'"), ИмяФормы); + ИмяФормы = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru='%1 (группа)'"), ИмяФормы); КонецЕсли; КонецПроцедуры @@ -1415,21 +1415,18 @@ Процедура ДобавитьТипФормыВПредставлениеАвтогенерируемойФормы(Объект, Форма, ИмяФормы) Если Форма = "ФормаСписка" Тогда - ИмяФормы = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru='%1 (список)'"), ИмяФормы); + ИмяФормы = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru='%1 (список)'"), ИмяФормы); ИначеЕсли Форма = "ФормаДляВыбора" Тогда - ИмяФормы = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru='%1 (выбор)'"), ИмяФормы); + ИмяФормы = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru='%1 (выбор)'"), ИмяФормы); ИначеЕсли Форма = "ФормаДляВыбораГруппы" Тогда - ИмяФормы = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru='%1 (группа)'"), ИмяФормы); + ИмяФормы = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru='%1 (группа)'"), ИмяФормы); КонецЕсли; КонецПроцедуры Процедура ДобавитьСтрокуВТаблицуЗначений(ТаблицаНастроек, ВыборкаНастроек) - Если Найти(ВыборкаНастроек.КлючОбъекта, "ВнешнийОтчет.") <> 0 Тогда + Если СтрНайти(ВыборкаНастроек.КлючОбъекта, "ВнешнийОтчет.") <> 0 Тогда Возврат; КонецЕсли; @@ -1441,7 +1438,7 @@ Функция ПредставлениеВариантаОтчета(НастройкаКлюч, ИмяВариантаОтчета) - ИмяОтчета = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(ИмяВариантаОтчета[0], "."); + ИмяОтчета = СтрРазделить(ИмяВариантаОтчета[0], ".", Ложь); Отчет = Метаданные.Отчеты.Найти(ИмяОтчета[1]); Если Отчет = Неопределено Тогда @@ -1468,8 +1465,7 @@ ПредставлениеВариантаОтчета = ХранилищеВариантов.ПолучитьОписание(ИмяВариантаОтчета[0], ИдентификаторВарианта); - Если ПредставлениеВариантаОтчета <> Неопределено - Тогда + Если ПредставлениеВариантаОтчета <> Неопределено Тогда Возврат ПредставлениеВариантаОтчета.Представление; Иначе Возврат ИмяОтчета[1]; @@ -1517,7 +1513,10 @@ Для Каждого ОтчетМетаданные Из Метаданные.Отчеты Цикл СтандартнаяОбработка = Истина; - ПользователиСлужебный.ПриПолученииПользовательскихВариантовОтчетов(ОтчетМетаданные, ПользовательИнформационнойБазы, ТаблицаВариантовОтчетов, СтандартнаяОбработка); + + ИнтеграцияСтандартныхПодсистем.ПриПолученииПользовательскихВариантовОтчетов(ОтчетМетаданные, + ПользовательИнформационнойБазы, ТаблицаВариантовОтчетов, СтандартнаяОбработка); + Если СтандартнаяОбработка Тогда ВариантыОтчета = ХранилищеВариантовОтчетов.ПолучитьСписок("Отчет." + ОтчетМетаданные.Имя, ПользовательИнформационнойБазы); Для Каждого ВариантОтчета Из ВариантыОтчета Цикл @@ -1598,8 +1597,8 @@ Если ТаблицаПользовательскихВариантовОтчетов <> Неопределено И ТаблицаПользовательскихВариантовОтчетов.Количество() <> 0 Тогда ОбластьЗаголовок = ТабМакет.ПолучитьОбласть("Заголовок"); - ОбластьЗаголовок.Параметры.Описание = НСтр("ru = ' - |Невозможно скопировать личные варианты отчетов. + ОбластьЗаголовок.Параметры.Описание = + НСтр("ru = 'Невозможно скопировать личные варианты отчетов. |Для того чтобы личный вариант отчета стал доступен другим пользователям, |необходимо его пересохранить со снятой пометкой ""Только для автора"". |Список пропущенных вариантов отчетов:'"); @@ -1623,8 +1622,8 @@ Если НеСкопированныеНастройкиОтчетов.Количество() <> 0 Тогда ОбластьЗаголовок = ТабМакет.ПолучитьОбласть("Заголовок"); - ОбластьЗаголовок.Параметры.Описание = НСтр("ru = ' - |У следующих пользователй недостаточно прав на отчеты:'"); + ОбластьЗаголовок.Параметры.Описание = + НСтр("ru = 'У следующих пользователей недостаточно прав на отчеты:'"); ТабДок.Вывести(ОбластьЗаголовок); ОбластьСодержание = ТабМакет.ПолучитьОбласть("СодержаниеОтчета"); @@ -1685,7 +1684,7 @@ Процедура ЗаполнитьСписокНастроекОтчетов(Форма) - ИмяФормы = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(Форма.ИмяФормы, "."); + ИмяФормы = СтрРазделить(Форма.ИмяФормы, ".", Ложь); Форма.НастройкиОтчетов.ПолучитьЭлементы().Очистить(); НастройкиОтчетовДерево = Форма.РеквизитФормыВЗначение("НастройкиОтчетов"); ТаблицаВариантовОтчетов = ПользовательскиеВариантыОтчетов(Форма.ПользовательИнформационнойБазы); @@ -1703,7 +1702,7 @@ НастройкаКлюч = Настройка.КлючНастроек; НазваниеНастройки = Настройка.Представление; - ИмяВариантаОтчета = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(НастройкаОбъект, "/"); + ИмяВариантаОтчета = СтрРазделить(НастройкаОбъект, "/", Ложь); Если ИмяВариантаОтчета.Количество() < 2 Тогда Продолжить; // Некорректная настройка. КонецЕсли; @@ -1726,8 +1725,8 @@ КонецЕсли; Если Не ПустаяСтрока(Форма.Поиск) Тогда - Если Найти(ВРег(ПредставлениеВариантаОтчета), ВРег(Форма.Поиск)) = 0 - И Найти(ВРег(НазваниеНастройки), ВРег(Форма.Поиск)) = 0 Тогда + Если СтрНайти(ВРег(ПредставлениеВариантаОтчета), ВРег(Форма.Поиск)) = 0 + И СтрНайти(ВРег(НазваниеНастройки), ВРег(Форма.Поиск)) = 0 Тогда Продолжить; КонецЕсли; КонецЕсли; @@ -1773,7 +1772,7 @@ Если Не ПустаяСтрока(Форма.Поиск) Тогда - Если Найти(ВРег(ВариантОтчета.Представление), ВРег(Форма.Поиск)) = 0 Тогда + Если СтрНайти(ВРег(ВариантОтчета.Представление), ВРег(Форма.Поиск)) = 0 Тогда Продолжить; КонецЕсли; @@ -1797,7 +1796,7 @@ Процедура ДобавитьНастройкиРабочегоСтолаИКомандногоИнтерфейса(Форма, ДеревоНастроек) Если Не ПустаяСтрока(Форма.Поиск) Тогда - Если Найти(ВРег(НСтр("ru='Рабочий стол и командный интерфейс'")), ВРег(Форма.Поиск)) = 0 Тогда + Если СтрНайти(ВРег(НСтр("ru='Рабочий стол и командный интерфейс'")), ВРег(Форма.Поиск)) = 0 Тогда Возврат; КонецЕсли; КонецЕсли; @@ -1808,8 +1807,8 @@ КлючиВсехНастроек = Новый СписокЗначений; Для Каждого Настройка Из Настройки Цикл - ИмяНастройки = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(Настройка.КлючОбъекта, "/"); - ЧастьИмениНастройки = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(ИмяНастройки[0], "."); + ИмяНастройки = СтрРазделить(Настройка.КлючОбъекта, "/", Ложь); + ЧастьИмениНастройки = СтрРазделить(ИмяНастройки[0], ".", Ложь); Если ЧастьИмениНастройки[0] = "Подсистема" Тогда КлючиНастроекИнтерфейса.Добавить(Настройка.КлючОбъекта, "Интерфейс"); @@ -1884,12 +1883,12 @@ НастройкиФорм = НастройкиВсехФорм(Форма.ПользовательИнформационнойБазы); Для Каждого НастройкаФормы Из НастройкиФорм Цикл - ИмяОбъектаМетаданных = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(НастройкаФормы.Значение, "."); - ПредставлениеОбъектаМетаданных = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(НастройкаФормы.Представление, "."); + ИмяОбъектаМетаданных = СтрРазделить(НастройкаФормы.Значение, ".", Ложь); + ПредставлениеОбъектаМетаданных = СтрРазделить(НастройкаФормы.Представление, ".", Ложь); Если Не ПустаяСтрока(Форма.Поиск) Тогда - Если Найти(ВРег(НастройкаФормы.Представление), ВРег(Форма.Поиск)) = 0 Тогда + Если СтрНайти(ВРег(НастройкаФормы.Представление), ВРег(Форма.Поиск)) = 0 Тогда Продолжить; КонецЕсли; @@ -1899,14 +1898,14 @@ НоваяСтрокаОбщиеФормы = НастройкиВнешнегоВида.Строки.Добавить(); НоваяСтрокаОбщиеФормы.Настройка = НастройкаФормы.Представление; НоваяСтрокаОбщиеФормы.Картинка = БиблиотекаКартинок.Форма; - НоваяСтрокаОбщиеФормы.Ключи.Добавить(НастройкаФормы.Значение, ""); + ОбъединитьСпискиЗначений(НоваяСтрокаОбщиеФормы.Ключи, НастройкаФормы.СписокКлючей); НоваяСтрокаОбщиеФормы.Тип = "НастройкаВнешнегоВида"; НоваяСтрокаОбщиеФормы.ТипСтроки = "ОбщаяФорма" + ИмяОбъектаМетаданных[1]; ИначеЕсли ИмяОбъектаМетаданных[0] = "ХранилищеНастроек" Тогда НоваяСтрокаХранилищеНастроек = НастройкиВнешнегоВида.Строки.Добавить(); НоваяСтрокаХранилищеНастроек.Настройка = НастройкаФормы.Представление; НоваяСтрокаХранилищеНастроек.Картинка = БиблиотекаКартинок.Форма; - НоваяСтрокаХранилищеНастроек.Ключи.Добавить(НастройкаФормы.Значение, ""); + ОбъединитьСпискиЗначений(НоваяСтрокаХранилищеНастроек.Ключи, НастройкаФормы.СписокКлючей); НоваяСтрокаХранилищеНастроек.ТипСтроки = "ХранилищеНастроек" + ИмяОбъектаМетаданных[2]; НоваяСтрокаХранилищеНастроек.Тип = "НастройкаВнешнегоВида"; ИначеЕсли ПредставлениеОбъектаМетаданных[0] = НСтр("ru = 'Стандартные'") Тогда @@ -1926,8 +1925,8 @@ НоваяСтрокаВнешнегоВидаФорм.Картинка = БиблиотекаКартинок.Форма; НоваяСтрокаВнешнегоВидаФорм.ТипСтроки = ИмяОбъектаМетаданных[1] + ИмяОбъектаМетаданных[2]; НоваяСтрокаВнешнегоВидаФорм.Тип = "НастройкаВнешнегоВида"; - НоваяСтрокаВнешнегоВидаФорм.Ключи.Добавить(НастройкаФормы.Значение, "", НастройкаФормы.Пометка); - НоваяСтрокаОбъектМетаданных.Ключи.Добавить(НастройкаФормы.Значение, "", НастройкаФормы.Пометка); + ОбъединитьСпискиЗначений(НоваяСтрокаВнешнегоВидаФорм.Ключи, НастройкаФормы.СписокКлючей); + ОбъединитьСпискиЗначений(НоваяСтрокаОбъектМетаданных.Ключи, НастройкаФормы.СписокКлючей); ТекущийОбъект = ПредставлениеОбъектаМетаданных[0]; @@ -1950,12 +1949,16 @@ КонецЕсли; НоваяСтрокаВнешнегоВидаФорм = НоваяСтрокаОбъектМетаданных.Строки.Добавить(); - НоваяСтрокаВнешнегоВидаФорм.Настройка = ПредставлениеОбъектаМетаданных[1]; + Если ПредставлениеОбъектаМетаданных.Количество() = 1 Тогда + НоваяСтрокаВнешнегоВидаФорм.Настройка = ПредставлениеОбъектаМетаданных[0]; + Иначе + НоваяСтрокаВнешнегоВидаФорм.Настройка = ПредставлениеОбъектаМетаданных[1]; + КонецЕсли; НоваяСтрокаВнешнегоВидаФорм.Картинка = БиблиотекаКартинок.Форма; НоваяСтрокаВнешнегоВидаФорм.ТипСтроки = ИмяОбъектаМетаданных[1] + ИмяФормы; НоваяСтрокаВнешнегоВидаФорм.Тип = "НастройкаВнешнегоВида"; - НоваяСтрокаВнешнегоВидаФорм.Ключи.Добавить(НастройкаФормы.Значение, "", НастройкаФормы.Пометка); - НоваяСтрокаОбъектМетаданных.Ключи.Добавить(НастройкаФормы.Значение, "", НастройкаФормы.Пометка); + ОбъединитьСпискиЗначений(НоваяСтрокаВнешнегоВидаФорм.Ключи, НастройкаФормы.СписокКлючей); + ОбъединитьСпискиЗначений(НоваяСтрокаОбъектМетаданных.Ключи, НастройкаФормы.СписокКлючей); ТекущийОбъект = ИмяОбъектаМетаданных[1]; КонецЕсли; @@ -1965,7 +1968,8 @@ ДобавитьНастройкиРабочегоСтолаИКомандногоИнтерфейса(Форма, НастройкиВнешнегоВида); НастройкиВнешнегоВида.Строки.Сортировать("Настройка Возр", Истина); - РабочийСтолИКомандныйИнтерфейс = НастройкиВнешнегоВида.Строки.Найти(НСтр("ru='Рабочий стол и командный интерфейс'"), "Настройка"); + ПредставлениеНастройки = НСтр("ru='Рабочий стол и командный интерфейс'"); + РабочийСтолИКомандныйИнтерфейс = НастройкиВнешнегоВида.Строки.Найти(ПредставлениеНастройки, "Настройка"); Если РабочийСтолИКомандныйИнтерфейс <> Неопределено Тогда ИндексСтроки = НастройкиВнешнегоВида.Строки.Индекс(РабочийСтолИКомандныйИнтерфейс); @@ -1976,6 +1980,12 @@ КонецПроцедуры +Процедура ОбъединитьСпискиЗначений(СписокПриемник, СписокИсточник) + Для Каждого Элемент Из СписокИсточник Цикл + ЗаполнитьЗначенияСвойств(СписокПриемник.Добавить(), Элемент); + КонецЦикла; +КонецПроцедуры + Процедура ЗаполнитьСписокПрочихНастроек(Форма) Форма.ПрочиеНастройки.ПолучитьЭлементы().Очистить(); @@ -1993,7 +2003,7 @@ Если Ключи.Количество() > 0 Тогда Если Не ПустаяСтрока(Форма.Поиск) Тогда - Если Найти(ВРег(НСтр("ru='Персональные настройки'")), ВРег(Форма.Поиск)) = 0 Тогда + Если СтрНайти(ВРег(НСтр("ru='Персональные настройки'")), ВРег(Форма.Поиск)) = 0 Тогда ВыводитьНастройку = Ложь; КонецЕсли; КонецЕсли; @@ -2016,7 +2026,7 @@ ОкончанияКлючей = КлючиПользовательскихНастроек(); Для Каждого Настройка Из Настройки Цикл - ИмяНастройки = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(Настройка.КлючОбъекта, "/"); + ИмяНастройки = СтрРазделить(Настройка.КлючОбъекта, "/", Ложь); Если ИмяНастройки.Количество() = 1 Тогда Продолжить; КонецЕсли; @@ -2038,7 +2048,7 @@ ВыводитьНастройку = Истина; Если Не ПустаяСтрока(Форма.Поиск) Тогда - Если Найти(ВРег(НСтр("ru='Настройки печати табличных документов'")), ВРег(Форма.Поиск)) = 0 Тогда + Если СтрНайти(ВРег(НСтр("ru='Настройки печати табличных документов'")), ВРег(Форма.Поиск)) = 0 Тогда ВыводитьНастройку = Ложь; КонецЕсли; @@ -2056,7 +2066,7 @@ ВыводитьНастройку = Истина; Если Не ПустаяСтрока(Форма.Поиск) Тогда - Если Найти(ВРег(НСтр("ru='Избранное'")), ВРег(Форма.Поиск)) = 0 Тогда + Если СтрНайти(ВРег(НСтр("ru='Избранное'")), ВРег(Форма.Поиск)) = 0 Тогда ВыводитьНастройку = Ложь; КонецЕсли; @@ -2093,7 +2103,7 @@ ВыводитьНастройку = Истина; Если Не ПустаяСтрока(Форма.Поиск) Тогда - Если Найти(ВРег(Результат.НазваниеНастройки), ВРег(Форма.Поиск)) = 0 Тогда + Если СтрНайти(ВРег(Результат.НазваниеНастройки), ВРег(Форма.Поиск)) = 0 Тогда ВыводитьНастройку = Ложь; КонецЕсли; @@ -2134,7 +2144,7 @@ ВыводитьНастройку = Истина; Если Не ПустаяСтрока(Форма.Поиск) Тогда - Если Найти(ВРег(НСтр("ru='Прочие настройки'")), ВРег(Форма.Поиск)) = 0 Тогда + Если СтрНайти(ВРег(НСтр("ru='Прочие настройки'")), ВРег(Форма.Поиск)) = 0 Тогда ВыводитьНастройку = Ложь; КонецЕсли; diff --git a/SSL/src/DataProcessors/НерекомендуемаяВерсияПлатформы/Forms/НерекомендуемаяВерсияПлатформы/Form.form b/SSL/src/DataProcessors/НерекомендуемаяВерсияПлатформы/Forms/НерекомендуемаяВерсияПлатформы/Form.form index b38dbd599..3802d2fc4 100644 --- a/SSL/src/DataProcessors/НерекомендуемаяВерсияПлатформы/Forms/НерекомендуемаяВерсияПлатформы/Form.form +++ b/SSL/src/DataProcessors/НерекомендуемаяВерсияПлатформы/Forms/НерекомендуемаяВерсияПлатформы/Form.form @@ -407,7 +407,6 @@ true true true - UseIfNecessary auto true @@ -499,7 +498,7 @@ ПродолжитьРаботу - Auto + DontUse Auto @@ -521,7 +520,7 @@ ЗавершитьРаботу - Auto + DontUse Auto diff --git a/SSL/src/DataProcessors/НерекомендуемаяВерсияПлатформы/Forms/НерекомендуемаяВерсияПлатформы/Module.bsl b/SSL/src/DataProcessors/НерекомендуемаяВерсияПлатформы/Forms/НерекомендуемаяВерсияПлатформы/Module.bsl index 4476511ed..52380139c 100644 --- a/SSL/src/DataProcessors/НерекомендуемаяВерсияПлатформы/Forms/НерекомендуемаяВерсияПлатформы/Module.bsl +++ b/SSL/src/DataProcessors/НерекомендуемаяВерсияПлатформы/Forms/НерекомендуемаяВерсияПлатформы/Module.bsl @@ -19,8 +19,7 @@ СистемнаяИнформация = Новый СистемнаяИнформация; ТекстУсловие = ?(Параметры.ЗавершитьРаботу, НСтр("ru = 'необходимо'"), НСтр("ru = 'рекомендуется'")); - Элементы.Версия.Заголовок = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - Элементы.Версия.Заголовок, ТекстУсловие, СистемнаяИнформация.ВерсияПриложения); + Элементы.Версия.Заголовок = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(Элементы.Версия.Заголовок, ТекстУсловие, СистемнаяИнформация.ВерсияПриложения); Если Параметры.ЗавершитьРаботу Тогда Элементы.ТекстВопроса.Видимость = Ложь; diff --git a/SSL/src/DataProcessors/НерекомендуемаяВерсияПлатформы/Forms/ПорядокОбновленияПлатформы/Form.form b/SSL/src/DataProcessors/НерекомендуемаяВерсияПлатформы/Forms/ПорядокОбновленияПлатформы/Form.form index 5699cff0a..a5a2e8f58 100644 --- a/SSL/src/DataProcessors/НерекомендуемаяВерсияПлатформы/Forms/ПорядокОбновленияПлатформы/Form.form +++ b/SSL/src/DataProcessors/НерекомендуемаяВерсияПлатформы/Forms/ПорядокОбновленияПлатформы/Form.form @@ -170,7 +170,7 @@ TextPicture - Auto + DontUse Auto diff --git a/SSL/src/DataProcessors/НерекомендуемаяВерсияПлатформы/Templates/ПорядокОбновленияДляФайловойБазы/_files/Convert1.png b/SSL/src/DataProcessors/НерекомендуемаяВерсияПлатформы/Templates/ПорядокОбновленияДляФайловойБазы/_files/Convert1.png deleted file mode 100644 index f4a67ebb1..000000000 Binary files a/SSL/src/DataProcessors/НерекомендуемаяВерсияПлатформы/Templates/ПорядокОбновленияДляФайловойБазы/_files/Convert1.png and /dev/null differ diff --git a/SSL/src/DataProcessors/НерекомендуемаяВерсияПлатформы/Templates/ПорядокОбновленияДляФайловойБазы/_files/Convert2.png b/SSL/src/DataProcessors/НерекомендуемаяВерсияПлатформы/Templates/ПорядокОбновленияДляФайловойБазы/_files/Convert2.png deleted file mode 100644 index 24847db48..000000000 Binary files a/SSL/src/DataProcessors/НерекомендуемаяВерсияПлатформы/Templates/ПорядокОбновленияДляФайловойБазы/_files/Convert2.png and /dev/null differ diff --git a/SSL/src/DataProcessors/НерекомендуемаяВерсияПлатформы/Templates/ПорядокОбновленияДляФайловойБазы/_files/Download.png b/SSL/src/DataProcessors/НерекомендуемаяВерсияПлатформы/Templates/ПорядокОбновленияДляФайловойБазы/_files/Download.png deleted file mode 100644 index cacdf34d7..000000000 Binary files a/SSL/src/DataProcessors/НерекомендуемаяВерсияПлатформы/Templates/ПорядокОбновленияДляФайловойБазы/_files/Download.png and /dev/null differ diff --git a/SSL/src/DataProcessors/НерекомендуемаяВерсияПлатформы/Templates/ПорядокОбновленияДляФайловойБазы/_files/Download1.png b/SSL/src/DataProcessors/НерекомендуемаяВерсияПлатформы/Templates/ПорядокОбновленияДляФайловойБазы/_files/Download1.png deleted file mode 100644 index cacdf34d7..000000000 Binary files a/SSL/src/DataProcessors/НерекомендуемаяВерсияПлатформы/Templates/ПорядокОбновленияДляФайловойБазы/_files/Download1.png and /dev/null differ diff --git a/SSL/src/DataProcessors/НерекомендуемаяВерсияПлатформы/Templates/ПорядокОбновленияДляФайловойБазы/_files/Download11.png b/SSL/src/DataProcessors/НерекомендуемаяВерсияПлатформы/Templates/ПорядокОбновленияДляФайловойБазы/_files/Download11.png deleted file mode 100644 index cacdf34d7..000000000 Binary files a/SSL/src/DataProcessors/НерекомендуемаяВерсияПлатформы/Templates/ПорядокОбновленияДляФайловойБазы/_files/Download11.png and /dev/null differ diff --git a/SSL/src/DataProcessors/НерекомендуемаяВерсияПлатформы/Templates/ПорядокОбновленияДляФайловойБазы/_files/Platform.png b/SSL/src/DataProcessors/НерекомендуемаяВерсияПлатформы/Templates/ПорядокОбновленияДляФайловойБазы/_files/Platform.png deleted file mode 100644 index 24379c154..000000000 Binary files a/SSL/src/DataProcessors/НерекомендуемаяВерсияПлатформы/Templates/ПорядокОбновленияДляФайловойБазы/_files/Platform.png and /dev/null differ diff --git a/SSL/src/DataProcessors/НерекомендуемаяВерсияПлатформы/Templates/ПорядокОбновленияДляФайловойБазы/_files/Safe.png b/SSL/src/DataProcessors/НерекомендуемаяВерсияПлатформы/Templates/ПорядокОбновленияДляФайловойБазы/_files/Safe.png deleted file mode 100644 index ebfe445a0..000000000 Binary files a/SSL/src/DataProcessors/НерекомендуемаяВерсияПлатформы/Templates/ПорядокОбновленияДляФайловойБазы/_files/Safe.png and /dev/null differ diff --git a/SSL/src/DataProcessors/НерекомендуемаяВерсияПлатформы/Templates/ПорядокОбновленияДляФайловойБазы/_files/Safe2.png b/SSL/src/DataProcessors/НерекомендуемаяВерсияПлатформы/Templates/ПорядокОбновленияДляФайловойБазы/_files/Safe2.png deleted file mode 100644 index ebfe445a0..000000000 Binary files a/SSL/src/DataProcessors/НерекомендуемаяВерсияПлатформы/Templates/ПорядокОбновленияДляФайловойБазы/_files/Safe2.png and /dev/null differ diff --git a/SSL/src/DataProcessors/НерекомендуемаяВерсияПлатформы/Templates/ПорядокОбновленияДляФайловойБазы/_files/Safe21.png b/SSL/src/DataProcessors/НерекомендуемаяВерсияПлатформы/Templates/ПорядокОбновленияДляФайловойБазы/_files/Safe21.png deleted file mode 100644 index ebfe445a0..000000000 Binary files a/SSL/src/DataProcessors/НерекомендуемаяВерсияПлатформы/Templates/ПорядокОбновленияДляФайловойБазы/_files/Safe21.png and /dev/null differ diff --git a/SSL/src/DataProcessors/НерекомендуемаяВерсияПлатформы/Templates/ПорядокОбновленияДляФайловойБазы/_files/Setup1.jpg b/SSL/src/DataProcessors/НерекомендуемаяВерсияПлатформы/Templates/ПорядокОбновленияДляФайловойБазы/_files/Setup1.jpg deleted file mode 100644 index c6cc35cf6..000000000 Binary files a/SSL/src/DataProcessors/НерекомендуемаяВерсияПлатформы/Templates/ПорядокОбновленияДляФайловойБазы/_files/Setup1.jpg and /dev/null differ diff --git a/SSL/src/DataProcessors/НерекомендуемаяВерсияПлатформы/Templates/ПорядокОбновленияДляФайловойБазы/_files/Setup2.jpg b/SSL/src/DataProcessors/НерекомендуемаяВерсияПлатформы/Templates/ПорядокОбновленияДляФайловойБазы/_files/Setup2.jpg deleted file mode 100644 index e6c617f9d..000000000 Binary files a/SSL/src/DataProcessors/НерекомендуемаяВерсияПлатформы/Templates/ПорядокОбновленияДляФайловойБазы/_files/Setup2.jpg and /dev/null differ diff --git a/SSL/src/DataProcessors/НерекомендуемаяВерсияПлатформы/Templates/ПорядокОбновленияДляФайловойБазы/_files/Setup3.jpg b/SSL/src/DataProcessors/НерекомендуемаяВерсияПлатформы/Templates/ПорядокОбновленияДляФайловойБазы/_files/Setup3.jpg deleted file mode 100644 index e18c5f3a1..000000000 Binary files a/SSL/src/DataProcessors/НерекомендуемаяВерсияПлатформы/Templates/ПорядокОбновленияДляФайловойБазы/_files/Setup3.jpg and /dev/null differ diff --git a/SSL/src/DataProcessors/НерекомендуемаяВерсияПлатформы/Templates/ПорядокОбновленияДляФайловойБазы/_files/Setup4.jpg b/SSL/src/DataProcessors/НерекомендуемаяВерсияПлатформы/Templates/ПорядокОбновленияДляФайловойБазы/_files/Setup4.jpg deleted file mode 100644 index 145139887..000000000 Binary files a/SSL/src/DataProcessors/НерекомендуемаяВерсияПлатформы/Templates/ПорядокОбновленияДляФайловойБазы/_files/Setup4.jpg and /dev/null differ diff --git a/SSL/src/DataProcessors/НерекомендуемаяВерсияПлатформы/Templates/ПорядокОбновленияДляФайловойБазы/_files/SetupEXE.png b/SSL/src/DataProcessors/НерекомендуемаяВерсияПлатформы/Templates/ПорядокОбновленияДляФайловойБазы/_files/SetupEXE.png deleted file mode 100644 index 2e9e4ada5..000000000 Binary files a/SSL/src/DataProcessors/НерекомендуемаяВерсияПлатформы/Templates/ПорядокОбновленияДляФайловойБазы/_files/SetupEXE.png and /dev/null differ diff --git a/SSL/src/DataProcessors/НерекомендуемаяВерсияПлатформы/Templates/ПорядокОбновленияДляФайловойБазы/_files/Start1.png b/SSL/src/DataProcessors/НерекомендуемаяВерсияПлатформы/Templates/ПорядокОбновленияДляФайловойБазы/_files/Start1.png deleted file mode 100644 index 863af29c7..000000000 Binary files a/SSL/src/DataProcessors/НерекомендуемаяВерсияПлатформы/Templates/ПорядокОбновленияДляФайловойБазы/_files/Start1.png and /dev/null differ diff --git a/SSL/src/DataProcessors/НерекомендуемаяВерсияПлатформы/Templates/ПорядокОбновленияДляФайловойБазы/_files/StartEnt.png b/SSL/src/DataProcessors/НерекомендуемаяВерсияПлатформы/Templates/ПорядокОбновленияДляФайловойБазы/_files/StartEnt.png deleted file mode 100644 index 35f4fccde..000000000 Binary files a/SSL/src/DataProcessors/НерекомендуемаяВерсияПлатформы/Templates/ПорядокОбновленияДляФайловойБазы/_files/StartEnt.png and /dev/null differ diff --git a/SSL/src/DataProcessors/НерекомендуемаяВерсияПлатформы/Templates/ПорядокОбновленияДляФайловойБазы/_files/UserSite.png b/SSL/src/DataProcessors/НерекомендуемаяВерсияПлатформы/Templates/ПорядокОбновленияДляФайловойБазы/_files/UserSite.png deleted file mode 100644 index 6fe1d4e1e..000000000 Binary files a/SSL/src/DataProcessors/НерекомендуемаяВерсияПлатформы/Templates/ПорядокОбновленияДляФайловойБазы/_files/UserSite.png and /dev/null differ diff --git a/SSL/src/DataProcessors/НерекомендуемаяВерсияПлатформы/Templates/ПорядокОбновленияДляФайловойБазы/_files/UserSite1.png b/SSL/src/DataProcessors/НерекомендуемаяВерсияПлатформы/Templates/ПорядокОбновленияДляФайловойБазы/_files/UserSite1.png deleted file mode 100644 index 6fe1d4e1e..000000000 Binary files a/SSL/src/DataProcessors/НерекомендуемаяВерсияПлатформы/Templates/ПорядокОбновленияДляФайловойБазы/_files/UserSite1.png and /dev/null differ diff --git a/SSL/src/DataProcessors/НерекомендуемаяВерсияПлатформы/Templates/ПорядокОбновленияДляФайловойБазы/_files/UserSite11.png b/SSL/src/DataProcessors/НерекомендуемаяВерсияПлатформы/Templates/ПорядокОбновленияДляФайловойБазы/_files/UserSite11.png deleted file mode 100644 index 6fe1d4e1e..000000000 Binary files a/SSL/src/DataProcessors/НерекомендуемаяВерсияПлатформы/Templates/ПорядокОбновленияДляФайловойБазы/_files/UserSite11.png and /dev/null differ diff --git a/SSL/src/DataProcessors/НерекомендуемаяВерсияПлатформы/Templates/ПорядокОбновленияДляФайловойБазы/_files/pic08.jpg b/SSL/src/DataProcessors/НерекомендуемаяВерсияПлатформы/Templates/ПорядокОбновленияДляФайловойБазы/_files/pic08.jpg deleted file mode 100644 index 7d8eeac34..000000000 Binary files a/SSL/src/DataProcessors/НерекомендуемаяВерсияПлатформы/Templates/ПорядокОбновленияДляФайловойБазы/_files/pic08.jpg and /dev/null differ diff --git a/SSL/src/DataProcessors/НерекомендуемаяВерсияПлатформы/Templates/ПорядокОбновленияДляФайловойБазы/_files/setup5.jpg b/SSL/src/DataProcessors/НерекомендуемаяВерсияПлатформы/Templates/ПорядокОбновленияДляФайловойБазы/_files/setup5.jpg deleted file mode 100644 index d9b91e169..000000000 Binary files a/SSL/src/DataProcessors/НерекомендуемаяВерсияПлатформы/Templates/ПорядокОбновленияДляФайловойБазы/_files/setup5.jpg and /dev/null differ diff --git a/SSL/src/DataProcessors/НерекомендуемаяВерсияПлатформы/Templates/ПорядокОбновленияДляФайловойБазы/_files/setup6.jpg b/SSL/src/DataProcessors/НерекомендуемаяВерсияПлатформы/Templates/ПорядокОбновленияДляФайловойБазы/_files/setup6.jpg deleted file mode 100644 index e847dae78..000000000 Binary files a/SSL/src/DataProcessors/НерекомендуемаяВерсияПлатформы/Templates/ПорядокОбновленияДляФайловойБазы/_files/setup6.jpg and /dev/null differ diff --git a/SSL/src/DataProcessors/НерекомендуемаяВерсияПлатформы/Templates/ПорядокОбновленияДляФайловойБазы/_files/startconf.png b/SSL/src/DataProcessors/НерекомендуемаяВерсияПлатформы/Templates/ПорядокОбновленияДляФайловойБазы/_files/startconf.png deleted file mode 100644 index 3fd63b453..000000000 Binary files a/SSL/src/DataProcessors/НерекомендуемаяВерсияПлатформы/Templates/ПорядокОбновленияДляФайловойБазы/_files/startconf.png and /dev/null differ diff --git a/SSL/src/DataProcessors/НерекомендуемаяВерсияПлатформы/Templates/ПорядокОбновленияДляФайловойБазы/_files/Платф1.jpg b/SSL/src/DataProcessors/НерекомендуемаяВерсияПлатформы/Templates/ПорядокОбновленияДляФайловойБазы/_files/Платф1.jpg deleted file mode 100644 index bf9c39ac5..000000000 Binary files a/SSL/src/DataProcessors/НерекомендуемаяВерсияПлатформы/Templates/ПорядокОбновленияДляФайловойБазы/_files/Платф1.jpg and /dev/null differ diff --git a/SSL/src/DataProcessors/НерекомендуемаяВерсияПлатформы/Templates/ПорядокОбновленияДляФайловойБазы/_files/Платф11.jpg b/SSL/src/DataProcessors/НерекомендуемаяВерсияПлатформы/Templates/ПорядокОбновленияДляФайловойБазы/_files/Платф11.jpg deleted file mode 100644 index bf9c39ac5..000000000 Binary files a/SSL/src/DataProcessors/НерекомендуемаяВерсияПлатформы/Templates/ПорядокОбновленияДляФайловойБазы/_files/Платф11.jpg and /dev/null differ diff --git a/SSL/src/DataProcessors/НерекомендуемаяВерсияПлатформы/Templates/ПорядокОбновленияДляФайловойБазы/_files/Уст1.png b/SSL/src/DataProcessors/НерекомендуемаяВерсияПлатформы/Templates/ПорядокОбновленияДляФайловойБазы/_files/Уст1.png deleted file mode 100644 index d90e30c7e..000000000 Binary files a/SSL/src/DataProcessors/НерекомендуемаяВерсияПлатформы/Templates/ПорядокОбновленияДляФайловойБазы/_files/Уст1.png and /dev/null differ diff --git a/SSL/src/DataProcessors/НерекомендуемаяВерсияПлатформы/Templates/ПорядокОбновленияДляФайловойБазы/_files/Уст11.png b/SSL/src/DataProcessors/НерекомендуемаяВерсияПлатформы/Templates/ПорядокОбновленияДляФайловойБазы/_files/Уст11.png deleted file mode 100644 index d90e30c7e..000000000 Binary files a/SSL/src/DataProcessors/НерекомендуемаяВерсияПлатформы/Templates/ПорядокОбновленияДляФайловойБазы/_files/Уст11.png and /dev/null differ diff --git a/SSL/src/DataProcessors/НерекомендуемаяВерсияПлатформы/Templates/ПорядокОбновленияДляФайловойБазы/_files/запуск.png b/SSL/src/DataProcessors/НерекомендуемаяВерсияПлатформы/Templates/ПорядокОбновленияДляФайловойБазы/_files/запуск.png deleted file mode 100644 index 82bd1be69..000000000 Binary files a/SSL/src/DataProcessors/НерекомендуемаяВерсияПлатформы/Templates/ПорядокОбновленияДляФайловойБазы/_files/запуск.png and /dev/null differ diff --git a/SSL/src/DataProcessors/НерекомендуемаяВерсияПлатформы/Templates/ПорядокОбновленияДляФайловойБазы/_files/запуск1.png b/SSL/src/DataProcessors/НерекомендуемаяВерсияПлатформы/Templates/ПорядокОбновленияДляФайловойБазы/_files/запуск1.png deleted file mode 100644 index 82bd1be69..000000000 Binary files a/SSL/src/DataProcessors/НерекомендуемаяВерсияПлатформы/Templates/ПорядокОбновленияДляФайловойБазы/_files/запуск1.png and /dev/null differ diff --git a/SSL/src/DataProcessors/НерекомендуемаяВерсияПлатформы/Templates/ПорядокОбновленияДляФайловойБазы/_files/шаг12.png b/SSL/src/DataProcessors/НерекомендуемаяВерсияПлатформы/Templates/ПорядокОбновленияДляФайловойБазы/_files/шаг12.png deleted file mode 100644 index 2d90b6f52..000000000 Binary files a/SSL/src/DataProcessors/НерекомендуемаяВерсияПлатформы/Templates/ПорядокОбновленияДляФайловойБазы/_files/шаг12.png and /dev/null differ diff --git a/SSL/src/DataProcessors/НерекомендуемаяВерсияПлатформы/Templates/ПорядокОбновленияДляФайловойБазы/_files/шаг121.png b/SSL/src/DataProcessors/НерекомендуемаяВерсияПлатформы/Templates/ПорядокОбновленияДляФайловойБазы/_files/шаг121.png deleted file mode 100644 index 2d90b6f52..000000000 Binary files a/SSL/src/DataProcessors/НерекомендуемаяВерсияПлатформы/Templates/ПорядокОбновленияДляФайловойБазы/_files/шаг121.png and /dev/null differ diff --git a/SSL/src/DataProcessors/НерекомендуемаяВерсияПлатформы/Templates/ПорядокОбновленияДляФайловойБазы/_files/шаг2.png b/SSL/src/DataProcessors/НерекомендуемаяВерсияПлатформы/Templates/ПорядокОбновленияДляФайловойБазы/_files/шаг2.png deleted file mode 100644 index 5c27a3756..000000000 Binary files a/SSL/src/DataProcessors/НерекомендуемаяВерсияПлатформы/Templates/ПорядокОбновленияДляФайловойБазы/_files/шаг2.png and /dev/null differ diff --git a/SSL/src/DataProcessors/НерекомендуемаяВерсияПлатформы/Templates/ПорядокОбновленияДляФайловойБазы/_files/шаг21.png b/SSL/src/DataProcessors/НерекомендуемаяВерсияПлатформы/Templates/ПорядокОбновленияДляФайловойБазы/_files/шаг21.png deleted file mode 100644 index 5c27a3756..000000000 Binary files a/SSL/src/DataProcessors/НерекомендуемаяВерсияПлатформы/Templates/ПорядокОбновленияДляФайловойБазы/_files/шаг21.png and /dev/null differ diff --git a/SSL/src/DataProcessors/НерекомендуемаяВерсияПлатформы/Templates/ПорядокОбновленияДляФайловойБазы/_files/шаг31.png b/SSL/src/DataProcessors/НерекомендуемаяВерсияПлатформы/Templates/ПорядокОбновленияДляФайловойБазы/_files/шаг31.png deleted file mode 100644 index a20057e22..000000000 Binary files a/SSL/src/DataProcessors/НерекомендуемаяВерсияПлатформы/Templates/ПорядокОбновленияДляФайловойБазы/_files/шаг31.png and /dev/null differ diff --git a/SSL/src/DataProcessors/НерекомендуемаяВерсияПлатформы/Templates/ПорядокОбновленияДляФайловойБазы/_files/шаг311.png b/SSL/src/DataProcessors/НерекомендуемаяВерсияПлатформы/Templates/ПорядокОбновленияДляФайловойБазы/_files/шаг311.png deleted file mode 100644 index a20057e22..000000000 Binary files a/SSL/src/DataProcessors/НерекомендуемаяВерсияПлатформы/Templates/ПорядокОбновленияДляФайловойБазы/_files/шаг311.png and /dev/null differ diff --git a/SSL/src/DataProcessors/НерекомендуемаяВерсияПлатформы/Templates/ПорядокОбновленияДляФайловойБазы/_files/шаг4.png b/SSL/src/DataProcessors/НерекомендуемаяВерсияПлатформы/Templates/ПорядокОбновленияДляФайловойБазы/_files/шаг4.png deleted file mode 100644 index 0d15106f4..000000000 Binary files a/SSL/src/DataProcessors/НерекомендуемаяВерсияПлатформы/Templates/ПорядокОбновленияДляФайловойБазы/_files/шаг4.png and /dev/null differ diff --git a/SSL/src/DataProcessors/НерекомендуемаяВерсияПлатформы/Templates/ПорядокОбновленияДляФайловойБазы/_files/шаг41.png b/SSL/src/DataProcessors/НерекомендуемаяВерсияПлатформы/Templates/ПорядокОбновленияДляФайловойБазы/_files/шаг41.png deleted file mode 100644 index 0d15106f4..000000000 Binary files a/SSL/src/DataProcessors/НерекомендуемаяВерсияПлатформы/Templates/ПорядокОбновленияДляФайловойБазы/_files/шаг41.png and /dev/null differ diff --git a/SSL/src/DataProcessors/НерекомендуемаяВерсияПлатформы/Templates/ПорядокОбновленияДляФайловойБазы/_files/шаг5.png b/SSL/src/DataProcessors/НерекомендуемаяВерсияПлатформы/Templates/ПорядокОбновленияДляФайловойБазы/_files/шаг5.png deleted file mode 100644 index 43c801197..000000000 Binary files a/SSL/src/DataProcessors/НерекомендуемаяВерсияПлатформы/Templates/ПорядокОбновленияДляФайловойБазы/_files/шаг5.png and /dev/null differ diff --git a/SSL/src/DataProcessors/НерекомендуемаяВерсияПлатформы/Templates/ПорядокОбновленияДляФайловойБазы/_files/шаг51.png b/SSL/src/DataProcessors/НерекомендуемаяВерсияПлатформы/Templates/ПорядокОбновленияДляФайловойБазы/_files/шаг51.png deleted file mode 100644 index 43c801197..000000000 Binary files a/SSL/src/DataProcessors/НерекомендуемаяВерсияПлатформы/Templates/ПорядокОбновленияДляФайловойБазы/_files/шаг51.png and /dev/null differ diff --git a/SSL/src/DataProcessors/НерекомендуемаяВерсияПлатформы/Templates/ПорядокОбновленияДляФайловойБазы/_files/шаг6.png b/SSL/src/DataProcessors/НерекомендуемаяВерсияПлатформы/Templates/ПорядокОбновленияДляФайловойБазы/_files/шаг6.png deleted file mode 100644 index 7019b662c..000000000 Binary files a/SSL/src/DataProcessors/НерекомендуемаяВерсияПлатформы/Templates/ПорядокОбновленияДляФайловойБазы/_files/шаг6.png and /dev/null differ diff --git a/SSL/src/DataProcessors/НерекомендуемаяВерсияПлатформы/Templates/ПорядокОбновленияДляФайловойБазы/_files/шаг61.png b/SSL/src/DataProcessors/НерекомендуемаяВерсияПлатформы/Templates/ПорядокОбновленияДляФайловойБазы/_files/шаг61.png deleted file mode 100644 index 7019b662c..000000000 Binary files a/SSL/src/DataProcessors/НерекомендуемаяВерсияПлатформы/Templates/ПорядокОбновленияДляФайловойБазы/_files/шаг61.png and /dev/null differ diff --git a/SSL/src/DataProcessors/ОбновлениеИнформационнойБазы/Forms/ОтложенныеОбработчики/Module.bsl b/SSL/src/DataProcessors/ОбновлениеИнформационнойБазы/Forms/ОтложенныеОбработчики/Module.bsl deleted file mode 100644 index 41a5c8a53..000000000 --- a/SSL/src/DataProcessors/ОбновлениеИнформационнойБазы/Forms/ОтложенныеОбработчики/Module.bsl +++ /dev/null @@ -1,221 +0,0 @@ - -#Область ОбработчикиСобытийФормы - -&НаСервере -Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) - - Если Параметры.Свойство("АвтоТест") Тогда // Возврат при получении формы для анализа. - Возврат; - КонецЕсли; - - СведенияОбОбновлении = ОбновлениеИнформационнойБазыСлужебный.СведенияОбОбновленииИнформационнойБазы(); - ВремяНачалаОтложенногоОбновления = СведенияОбОбновлении.ВремяНачалаОтложенногоОбновления; - ВремяОкончанияОтложенногоОбновления = СведенияОбОбновлении.ВремяОкончаниеОтложенногоОбновления; - НомерТекущегоСеанса = СведенияОбОбновлении.НомерСеанса; - ИБФайловая = ОбщегоНазначения.ИнформационнаяБазаФайловая(); - - Если Не Пользователи.ЭтоПолноправныйПользователь(, Истина) Тогда - Элементы.ГруппаПовторныйЗапуск.Видимость = Ложь; - КонецЕсли; - - Если Не ИБФайловая Тогда - ОбновлениеВыполняется = (СведенияОбОбновлении.ОтложенноеОбновлениеЗавершеноУспешно = Неопределено); - КонецЕсли; - - Если Не Пользователи.РолиДоступны("ПросмотрЖурналаРегистрации") Тогда - Элементы.ГиперссылкаОтложенноеОбновление.Видимость = Ложь; - КонецЕсли; - - Статус = "ВсеПроцедуры"; - - СформироватьТаблицуОтложенныхОбработчиков(, Истина); - -КонецПроцедуры - -&НаКлиенте -Процедура ПриОткрытии(Отказ) - - Если ОбновлениеВыполняется Тогда - ПодключитьОбработчикОжидания("ОбновитьТаблицуОбработчиков", 15); - КонецЕсли; - -КонецПроцедуры - -#КонецОбласти - -#Область ОбработчикиКомандФормы - -&НаКлиенте -Процедура ЗакрытьФорму(Команда) - Закрыть(); -КонецПроцедуры - -&НаКлиенте -Процедура ЗапуститьПовторно(Команда) - Оповестить("ОтложенноеОбновление"); - Закрыть(); -КонецПроцедуры - -&НаКлиенте -Процедура ГиперссылкаОтложенноеОбновлениеНажатие(Элемент) - - ПолучитьСведенияОбОбновлении(); - Если ЗначениеЗаполнено(ВремяНачалаОтложенногоОбновления) И ЗначениеЗаполнено(ВремяОкончанияОтложенногоОбновления) Тогда - ПараметрыФормы = Новый Структура; - ПараметрыФормы.Вставить("ДатаНачала", ВремяНачалаОтложенногоОбновления); - ПараметрыФормы.Вставить("ДатаОкончания", ВремяОкончанияОтложенногоОбновления); - ПараметрыФормы.Вставить("Сеанс", НомерТекущегоСеанса); - - ОткрытьФорму("Обработка.ЖурналРегистрации.Форма.ЖурналРегистрации", ПараметрыФормы); - Иначе - - Если ЗначениеЗаполнено(ВремяНачалаОтложенногоОбновления) Тогда - ТекстПредупреждения = НСтр("ru = 'Обработка данных еще не завершилась.'"); - Иначе - ТекстПредупреждения = НСтр("ru = 'Обработка данных еще не выполнялась.'"); - КонецЕсли; - - ПоказатьПредупреждение(,ТекстПредупреждения); - КонецЕсли; - -КонецПроцедуры - -&НаКлиенте -Процедура СтатусПриИзменении(Элемент) - Если Статус = "ВсеПроцедуры" Тогда - Элементы.ОтложенныеОбработчики.ОтборСтрок = Новый ФиксированнаяСтруктура; - Иначе - ОтборСтрокТаблицы = Новый Структура; - ОтборСтрокТаблицы.Вставить("СтатусОбработчика", Статус); - Элементы.ОтложенныеОбработчики.ОтборСтрок = Новый ФиксированнаяСтруктура(ОтборСтрокТаблицы); - КонецЕсли; -КонецПроцедуры - -&НаКлиенте -Процедура СтрокаПоискаПриИзменении(Элемент) - ОтложенныеОбработчики.Очистить(); - СформироватьТаблицуОтложенныхОбработчиков(, Истина); -КонецПроцедуры - -#КонецОбласти - -#Область СлужебныеПроцедурыИФункции - -&НаКлиенте -Процедура ОбновитьТаблицуОбработчиков() - - ВыполненыВсеОбработчики = Истина; - СформироватьТаблицуОтложенныхОбработчиков(ВыполненыВсеОбработчики); - Если ВыполненыВсеОбработчики Тогда - ОтключитьОбработчикОжидания("ОбновитьТаблицуОбработчиков"); - КонецЕсли; - -КонецПроцедуры - -&НаСервере -Процедура ПолучитьСведенияОбОбновлении() - СведенияОбОбновлении = ОбновлениеИнформационнойБазыСлужебный.СведенияОбОбновленииИнформационнойБазы(); - ВремяНачалаОтложенногоОбновления = СведенияОбОбновлении.ВремяНачалаОтложенногоОбновления; - ВремяОкончанияОтложенногоОбновления = СведенияОбОбновлении.ВремяОкончаниеОтложенногоОбновления; -КонецПроцедуры - -&НаСервере -Процедура СформироватьТаблицуОтложенныхОбработчиков(ВыполненыВсеОбработчики = Истина, НачальноеЗаполнение = Ложь) - - ОбработчикиНеВыполнялись = Истина; - СведенияОбОбновлении = ОбновлениеИнформационнойБазыСлужебный.СведенияОбОбновленииИнформационнойБазы(); - - Для Каждого СтрокаДереваБиблиотека Из СведенияОбОбновлении.ДеревоОбработчиков.Строки Цикл - Для Каждого СтрокаДереваВерсия Из СтрокаДереваБиблиотека.Строки Цикл - Для Каждого СтрокаОбработчика Из СтрокаДереваВерсия.Строки Цикл - - Если Не ПустаяСтрока(СтрокаПоиска) Тогда - Если Не ПустаяСтрока(СтрокаОбработчика.Комментарий) Тогда - Если Найти(ВРег(СтрокаОбработчика.Комментарий), ВРег(СтрокаПоиска)) = 0 Тогда - Продолжить; - КонецЕсли; - Иначе - Если Найти(ВРег(СтрокаОбработчика.ИмяОбработчика), ВРег(СтрокаПоиска)) = 0 Тогда - Продолжить; - КонецЕсли; - КонецЕсли; - КонецЕсли; - ДобавитьОтложенныйОбработчик(СтрокаОбработчика, ОбработчикиНеВыполнялись, ВыполненыВсеОбработчики, НачальноеЗаполнение); - - КонецЦикла; - КонецЦикла; - КонецЦикла; - - Если Статус <> "ВсеПроцедуры" Тогда - ОтборСтрокТаблицы = Новый Структура; - ОтборСтрокТаблицы.Вставить("СтатусОбработчика", Статус); - Элементы.ОтложенныеОбработчики.ОтборСтрок = Новый ФиксированнаяСтруктура(ОтборСтрокТаблицы); - КонецЕсли; - - Если ВыполненыВсеОбработчики Или ОбновлениеВыполняется Тогда - Элементы.ГруппаПовторныйЗапуск.Видимость = Ложь; - КонецЕсли; - - Если ОбработчикиНеВыполнялись Тогда - Элементы.ТекстПояснения.Заголовок = НСтр("ru = 'Рекомендуется запустить невыполненные процедуры обработки данных.'"); - Иначе - Элементы.ТекстПояснения.Заголовок = НСтр("ru = 'Невыполненные процедуры рекомендуется запустить повторно.'"); - КонецЕсли; - - НомерЭлемента = 1; - Для Каждого СтрокаТаблицы Из ОтложенныеОбработчики Цикл - СтрокаТаблицы.Номер = НомерЭлемента; - НомерЭлемента = НомерЭлемента + 1; - КонецЦикла; - - Элементы.ОбновлениеВыполняется.Видимость = Не ВыполненыВсеОбработчики; - -КонецПроцедуры - -&НаСервере -Процедура ДобавитьОтложенныйОбработчик(СтрокаОбработчика, ОбработчикиНеВыполнялись, ВыполненыВсеОбработчики, НачальноеЗаполнение) - - Если НачальноеЗаполнение Тогда - СтрокаСписка = ОтложенныеОбработчики.Добавить(); - Иначе - ПараметрыОтбора = Новый Структура; - ПараметрыОтбора.Вставить("Идентификатор", СтрокаОбработчика.ИмяОбработчика); - СтрокаСписка = ОтложенныеОбработчики.НайтиСтроки(ПараметрыОтбора)[0]; - КонецЕсли; - - СтрокаСписка.Идентификатор = СтрокаОбработчика.ИмяОбработчика; - Если Не ПустаяСтрока(СтрокаОбработчика.Комментарий) Тогда - СтрокаСписка.Обработчик = СтрокаОбработчика.Комментарий; - Иначе - СтрокаСписка.Обработчик = СтрокаОбработчика.ИмяОбработчика; - КонецЕсли; - - Если СтрокаОбработчика.Статус = "Выполнено" Тогда - ОбработчикиНеВыполнялись = Ложь; - СтрокаСписка.ИнформацияОПроцедуреОбновления = - НСтр("ru = 'Процедура ""%1"" обработки данных завершилась успешно.'"); - СтрокаСписка.СтатусОбработчика = НСтр("ru = 'Выполнено'"); - СтрокаСписка.СтатусКартинка = БиблиотекаКартинок.Успешно; - ИначеЕсли СтрокаОбработчика.Статус = "Выполняется" Тогда - ОбработчикиНеВыполнялись = Ложь; - СтрокаСписка.ИнформацияОПроцедуреОбновления = - НСтр("ru = 'Процедура ""%1"" обработки данных в данный момент выполняется.'"); - СтрокаСписка.СтатусОбработчика = НСтр("ru = 'Выполняется'"); - ИначеЕсли СтрокаОбработчика.Статус = "Ошибка" Тогда - ОбработчикиНеВыполнялись = Ложь; - ВыполненыВсеОбработчики = Ложь; - СтрокаСписка.ИнформацияОПроцедуреОбновления = СтрокаОбработчика.ИнформацияОбОшибке; - СтрокаСписка.СтатусОбработчика = НСтр("ru = 'Ошибка'"); - СтрокаСписка.СтатусКартинка = БиблиотекаКартинок.Остановить; - Иначе - ВыполненыВсеОбработчики = Ложь; - СтрокаСписка.СтатусОбработчика = НСтр("ru = 'Не выполнялась'"); - СтрокаСписка.ИнформацияОПроцедуреОбновления = НСтр("ru = 'Процедура ""%1"" обработки данных еще не выполнялась.'"); - КонецЕсли; - - СтрокаСписка.ИнформацияОПроцедуреОбновления = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - СтрокаСписка.ИнформацияОПроцедуреОбновления, СтрокаОбработчика.ИмяОбработчика); - -КонецПроцедуры - -#КонецОбласти \ No newline at end of file diff --git a/SSL/src/DataProcessors/ОценкаПроизводительности/Commands/НастройкиОценкиПроизводительности/CommandModule.bsl b/SSL/src/DataProcessors/ОценкаПроизводительности/Commands/НастройкиОценкиПроизводительности/CommandModule.bsl new file mode 100644 index 000000000..41a3d5571 --- /dev/null +++ b/SSL/src/DataProcessors/ОценкаПроизводительности/Commands/НастройкиОценкиПроизводительности/CommandModule.bsl @@ -0,0 +1,8 @@ +#Область ОбработчикиСобытий + +&НаКлиенте +Процедура ОбработкаКоманды(ПараметрКоманды, ПараметрыВыполненияКоманды) + ОткрытьФорму("Обработка.ОценкаПроизводительности.Форма.АвтоматическийЭкспортЗамеровПроизводительности", , ЭтотОбъект,,,,,РежимОткрытияОкнаФормы.БлокироватьОкноВладельца); +КонецПроцедуры + +#КонецОбласти \ No newline at end of file diff --git a/SSL/src/DataProcessors/ОценкаПроизводительности/Forms/АвтоматическийЭкспортЗамеровПроизводительности/Form.form b/SSL/src/DataProcessors/ОценкаПроизводительности/Forms/АвтоматическийЭкспортЗамеровПроизводительности/Form.form index e4a479167..78a64c32e 100644 --- a/SSL/src/DataProcessors/ОценкаПроизводительности/Forms/АвтоматическийЭкспортЗамеровПроизводительности/Form.form +++ b/SSL/src/DataProcessors/ОценкаПроизводительности/Forms/АвтоматическийЭкспортЗамеровПроизводительности/Form.form @@ -1,24 +1,328 @@ - - ВыполнятьЭкспорт - 14 + + НастройкиВыполненияЗамеров + 40 + + НастройкиВыполненияЗамеровФлаги + 45 + + ВыполнятьЗамерыПроизводительностиВыполнятьЗамерыПроизводительности + 37 + true + + true + + + КонстантыНабор.ВыполнятьЗамерыПроизводительности + + Right + + ВыполнятьЗамерыПроизводительностиВыполнятьЗамерыПроизводительностиРасширеннаяПодсказка + 39 + Label + true + true + + Left + + + + ВыполнятьЗамерыПроизводительностиВыполнятьЗамерыПроизводительностиКонтекстноеМеню + 38 + true + + CheckBoxField + Enter + true + Left + true + + + + ВыполнятьЭкспорт + 14 + true + true + + true + + + ВыполнятьЭкспорт + + Right + + OnChange + ВыполнятьЭкспортПриИзменении + + + ВыполнятьЭкспортExtendedTooltip + 29 + Label + true + true + + Left + + + + ВыполнятьЭкспортКонтекстноеМеню + 15 + true + + CheckBoxField + Enter + true + Left + true + + + + КонстантыНаборОценкаПроизводительностиЭкспортВсехКлючевыхОпераций + 49 + + <key>ru</key> + <value>Экспорт всех ключевых операций</value> + + true + true + + true + + + КонстантыНабор.ОценкаПроизводительностиЭкспортВсехКлючевыхОпераций + + Right + + КонстантыНаборОценкаПроизводительностиЭкспортВсехКлючевыхОперацийРасширеннаяПодсказка + 51 + Label + true + true + + Left + + + + КонстантыНаборОценкаПроизводительностиЭкспортВсехКлючевыхОперацийКонтекстноеМеню + 50 + true + + CheckBoxField + Enter + true + Left + true + + + true + true + + true + + + <key>ru</key> + <value>Настройки выполнения замеров флаги</value> + + + ru + Настройки выполнения замеров флаги + + + НастройкиВыполненияЗамеровФлагиРасширеннаяПодсказка + 46 + Label + true + true + + Left + + + UsualGroup + + Auto + true + true + Auto + Auto + + + + НастройкиВыполненияЗамеровИнфо + 47 + + КонстантыНаборОценкаПроизводительностиПериодЗаписи + 58 + + <key>ru</key> + <value>Период записи</value> + + true + true + + true + + + КонстантыНабор.ОценкаПроизводительностиПериодЗаписи + + + КонстантыНаборОценкаПроизводительностиПериодЗаписиРасширеннаяПодсказка + 60 + Label + true + true + + Left + + + + КонстантыНаборОценкаПроизводительностиПериодЗаписиКонтекстноеМеню + 59 + true + + InputField + Enter + true + Left + true + + true + true + true + true + true + true + Normal + + + + ДекорацияПериодЗаписи + 55 + + <key>ru</key> + <value>сек. </value> + + true + true + + true + + + ДекорацияПериодЗаписиРасширеннаяПодсказка + 57 + Label + true + true + + Left + + + + ДекорацияПериодЗаписиКонтекстноеМеню + 56 + true + + Label + true + true + + Left + + + + КонстантыНаборДатаПоследнейВыгрузкиЗамеровПроизводительностиUTC + 42 + + <key>ru</key> + <value>Дата последнего выгруженного замера в UTC</value> + + true + true + + true + + + КонстантыНабор.ДатаПоследнейВыгрузкиЗамеровПроизводительностиUTC + + + КонстантыНаборДатаПоследнейВыгрузкиЗамеровПроизводительностиUTCРасширеннаяПодсказка + 44 + Label + true + true + + Left + + + + КонстантыНаборДатаПоследнейВыгрузкиЗамеровПроизводительностиUTCКонтекстноеМеню + 43 + true + + InputField + true + Enter + true + Left + true + + true + true + true + true + true + true + Normal + + + true + true + + true + + + <key>ru</key> + <value>Настройки выполнения замеров инфо</value> + + + ru + Настройки выполнения замеров инфо + + + НастройкиВыполненияЗамеровИнфоРасширеннаяПодсказка + 48 + Label + true + true + + Left + + + UsualGroup + + Auto + true + true + Auto + Auto + + true true true - - ВыполнятьЭкспорт - - Right - - OnChange - ВыполнятьЭкспортПриИзменении - + + <key>ru</key> + <value>Настройки выполнения замеров</value> + + + ru + Настройки выполнения замеров + - ВыполнятьЭкспортExtendedTooltip - 29 + НастройкиВыполненияЗамеровРасширеннаяПодсказка + 41 Label true true @@ -26,17 +330,17 @@ Left - - ВыполнятьЭкспортКонтекстноеМеню - 15 - true - - CheckBoxField - Enter - true - Left - true - + UsualGroup + + Vertical + Auto + WeakSeparation + true + true + auto + Auto + Auto + НастройкиЭкспортаВЛокальныйКаталог @@ -52,6 +356,7 @@ ВыполнятьЭкспортВЛокальныйКаталог + Right OnChange ВыполнятьЭкспортВКаталогПриИзменении @@ -181,6 +486,7 @@ ВыполнятьЭкспортНаFTP + Right OnChange ВыполнятьЭкспортВКаталогПриИзменении @@ -402,7 +708,7 @@ FillCheckProcessingAtServer ОбработкаПроверкиЗаполненияНаСервере - LockOwner + DontBlock true true true @@ -410,7 +716,6 @@ true true true - UseIfNecessary auto true @@ -509,6 +814,23 @@ true + + КонстантыНабор + + <key>ru</key> + <value>Константы набор</value> + + 6 + + ConstantsSet + + + true + + + true + + НастроитьРасписаниеЭкспорта @@ -528,7 +850,7 @@ <name>НастроитьРасписаниеЭкспорта</name> </handler> </action> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <formCommands> @@ -550,7 +872,7 @@ <name>СохранитьНастройки</name> </handler> </action> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <formCommands> @@ -572,7 +894,7 @@ <name>СохранитьЗакрыть</name> </handler> </action> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <commandInterface> diff --git a/SSL/src/DataProcessors/ОценкаПроизводительности/Forms/АвтоматическийЭкспортЗамеровПроизводительности/Help/ru.html b/SSL/src/DataProcessors/ОценкаПроизводительности/Forms/АвтоматическийЭкспортЗамеровПроизводительности/Help/ru.html index 3024a390d..5dd75398a 100644 --- a/SSL/src/DataProcessors/ОценкаПроизводительности/Forms/АвтоматическийЭкспортЗамеровПроизводительности/Help/ru.html +++ b/SSL/src/DataProcessors/ОценкаПроизводительности/Forms/АвтоматическийЭкспортЗамеровПроизводительности/Help/ru.html @@ -1,12 +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.16421"></meta></head><body> <p>Предназначена для настройки регламентного задания по экспорту замеров производительности.</p> <p>Это может потребоваться, например, для выполнения анализа производительности в другой программе.</p> -<p>Вызывается по команде <strong>Еще -</strong> <strong>Настройка</strong> из окна <strong>Оценка производительности</strong>.</p> +<p>Вызывается по команде <strong>Настройки оценки производительности</strong> раздела <strong>Администрирование - Поддержка и обслуживание</strong>. </p> +<p>Также можно открыть по команде <strong>Еще -</strong> <strong>Настройка</strong> из окна <strong>Оценка производительности</strong>.</p> <h3>Настройка автоматического экспорта замеров производительности</h3> <ul><li>Включите флажок <strong>Выполнять экспорт</strong>, при этом автоматически включаются флажки <strong>Выполнять экспорт в локальный каталог</strong>, <strong>Выполнять экспорт на FTP</strong>. +</li><li>При необходимости включите флажок <strong>Экспорт всех ключевых операций</strong>. В том случае производится экспорт замеров производительности всех ключевых операций, в том числе и тех, у которых не заполнены поля <strong>Приоритет</strong> и <strong>Целевое время</strong>. +</li><li>При необходимости можно изменить <strong>Период записи</strong> - по умолчанию равен 60 сек. +</li><li>На просмотр выводится <strong>Дата последнего выгруженного замера в UTC</strong> (заполняется программой автоматически). </li><li>Выберите путь в поле <strong>Локальный каталог экспорта</strong> (если экспорт не будет осуществляться в локальный каталог, то отключите соответствующий флажок); -</li><li>при необходимости укажите <strong>Адрес ftp-сервера</strong> или отключите флажок <strong>Выполнять экспорт на FTP</strong>. +</li><li>При необходимости укажите <strong>Адрес ftp-сервера</strong> или отключите флажок <strong>Выполнять экспорт на FTP</strong>. </li><li>Для перехода к дальнейшей настройке экспорта нажмите <strong>Настроить расписание экспорта</strong>, заполните <a href="v8help://mngbase/jobschedule.lf">расписание</a>. -</li><li>Для подтверждения и возврата в программу нажмите <strong>Записать и закрыть</strong>. -</li><li>После этого экспорт замеров производительности будет производиться автоматически. Сформированные внешние файлы, а также файлы, содержащие настройки, при которых были получены эти замеры, автоматически упаковываются в ZIP-архив.</li></ul><h3>См. также:</h3> +</li><li>Для подтверждения и возврата в программу нажмите <strong>Записать и закрыть</strong>.</li></ul><p>После этого экспорт замеров производительности будет производиться автоматически. Сформированные внешние файлы, а также файлы, содержащие настройки, при которых были получены эти замеры, автоматически упаковываются в ZIP-архив.</p> +<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 80eb2c9db..e9733c91a 100644 --- a/SSL/src/DataProcessors/ОценкаПроизводительности/Forms/АвтоматическийЭкспортЗамеровПроизводительности/Module.bsl +++ b/SSL/src/DataProcessors/ОценкаПроизводительности/Forms/АвтоматическийЭкспортЗамеровПроизводительности/Module.bsl @@ -10,11 +10,15 @@ Возврат; КонецЕсли; + КонстантыНабор.ВыполнятьЗамерыПроизводительности = Константы.ВыполнятьЗамерыПроизводительности.Получить(); + КонстантыНабор.ДатаПоследнейВыгрузкиЗамеровПроизводительностиUTC = Константы.ДатаПоследнейВыгрузкиЗамеровПроизводительностиUTC.Получить(); + КонстантыНабор.ОценкаПроизводительностиЭкспортВсехКлючевыхОпераций = Константы.ОценкаПроизводительностиЭкспортВсехКлючевыхОпераций.Получить(); + + КонстантыНабор.ОценкаПроизводительностиПериодЗаписи = ОценкаПроизводительностиВызовСервераПолныеПрава.ПериодЗаписи(); + КаталогиЭкспорта = ОценкаПроизводительностиСлужебный.КаталогиЭкспортаОценкиПроизводительности(); Если ТипЗнч(КаталогиЭкспорта) <> Тип("Структура") - ИЛИ - КаталогиЭкспорта.Количество() = 0 - Тогда + ИЛИ КаталогиЭкспорта.Количество() = 0 Тогда Возврат; КонецЕсли; @@ -86,6 +90,10 @@ УстановитьКаталогЭкспорта(ВыполнятьЛокальныйКаталог, ВыполнятьFTPКаталог); УстановитьИспользованиеРегламентногоЗадания(ВыполнятьЭкспорт); + + Константы.ВыполнятьЗамерыПроизводительности.Установить(КонстантыНабор.ВыполнятьЗамерыПроизводительности); + Константы.ОценкаПроизводительностиЭкспортВсехКлючевыхОпераций.Установить(КонстантыНабор.ОценкаПроизводительностиЭкспортВсехКлючевыхОпераций); + Константы.ОценкаПроизводительностиПериодЗаписи.Установить(КонстантыНабор.ОценкаПроизводительностиПериодЗаписи); Модифицированность = Ложь; КонецПроцедуры @@ -131,30 +139,20 @@ ВыборФайла.МножественныйВыбор = Ложь; ВыборФайла.Заголовок = НСтр("ru = 'Выбор каталога экспорта'"); - ОписаниеОповещения = Новый ОписаниеОповещения("ДействиеПослеВыбораКаталогаЭкспорта", ЭтотОбъект); - ВыборФайла.Показать(ОписаниеОповещения); + Если ВыборФайла.Выбрать() Тогда + ВыбранныйКаталог = ВыборФайла.Каталог; + ЛокальныйКаталогЭкспорта = ВыбранныйКаталог; + ЭтотОбъект.Модифицированность = Истина; + КонецЕсли; КонецЕсли; КонецПроцедуры -&НаКлиенте -Процедура ДействиеПослеВыбораКаталогаЭкспорта(Результат, ДополнительныеПараметры) Экспорт - - Если ЗначениеЗаполнено(Результат) Тогда - - ВыбранныйКаталог = Результат; - ЛокальныйКаталогЭкспорта = Результат; - ЭтотОбъект.Модифицированность = Истина; - - КонецЕсли; - -КонецПроцедуры - -// Изменяет каталог экспорта данных. +// Изменяет каталог экспорта данных // // Параметры: -// КаталогЭкспорта - Строка, новый каталог экспорта. +// КаталогЭкспорта - Строка, новый каталог экспорта // &НаСервереБезКонтекста Процедура УстановитьКаталогЭкспорта(ВыполнятьЛокальныйКаталогЭкспорта, ВыполнятьFTPКаталогЭкспорта) @@ -172,13 +170,13 @@ КонецПроцедуры -// Изменяет признак использования регламентного задания. +// Изменяет признак использования регламентного задания // // Параметры: -// НовоеЗначение - Булево, новое значение использования. +// НовоеЗначение - Булево, новое значение использования // // Возвращаемое значение: -// Булево - состояние до изменения (предыдущее состояние). +// Булево - состояние до изменения (предыдущее состояние) // &НаСервереБезКонтекста Функция УстановитьИспользованиеРегламентногоЗадания(НовоеЗначение) @@ -194,10 +192,10 @@ КонецФункции -// Возвращает текущее расписание регламентного задания. +// Возвращает текущее расписание регламентного задания // // Возвращаемое значение: -// РасписаниеРегламентногоЗадания - текущее расписание. +// РасписаниеРегламентногоЗадания - текущее расписание // &НаСервереБезКонтекста Функция РасписаниеЭкспортаОценкиПроизводительности() @@ -207,10 +205,10 @@ КонецФункции -// Устанавливает новое расписание регламентному заданию. +// Устанавливает новое расписание регламентному заданию // // Параметры: -// НовоеРасписание - РасписаниеРегламентногоЗадания, которое надо установить. +// НовоеРасписание - РасписаниеРегламентногоЗадания, которое надо установить // &НаСервереБезКонтекста Процедура УстановитьРасписание(Знач НовоеРасписание) @@ -221,7 +219,7 @@ КонецПроцедуры -// Сохраняет настройки регламентного задания. +// Сохраняет настройки регламентного задания // // Параметры: // Задание - РегламентноеЗадание.ЭкспортОценкиПроизводительности diff --git a/SSL/src/DataProcessors/ОценкаПроизводительности/Forms/ИсторияВыполнения/Form.form b/SSL/src/DataProcessors/ОценкаПроизводительности/Forms/ИсторияВыполнения/Form.form index e95cd84a7..cf9417a15 100644 --- a/SSL/src/DataProcessors/ОценкаПроизводительности/Forms/ИсторияВыполнения/Form.form +++ b/SSL/src/DataProcessors/ОценкаПроизводительности/Forms/ИсторияВыполнения/Form.form @@ -527,10 +527,10 @@ <horizontalAlign>Left</horizontalAlign> </autoCommandBar> <searchStringAddition> - <name>ИсторияSearchString</name> + <name>ИсторияСтрокаПоиска</name> <id>38</id> <extendedTooltip> - <name>ИсторияSearchStringExtendedTooltip</name> + <name>ИсторияСтрокаПоискаРасширеннаяПодсказка</name> <id>40</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> @@ -540,7 +540,7 @@ </extInfo> </extendedTooltip> <contextMenu> - <name>ИсторияSearchStringContextMenu</name> + <name>ИсторияСтрокаПоискаКонтекстноеМеню</name> <id>39</id> <autoFill>true</autoFill> </contextMenu> @@ -550,10 +550,10 @@ </extInfo> </searchStringAddition> <viewStatusAddition> - <name>ИсторияViewStatus</name> + <name>ИсторияСостояниеПросмотра</name> <id>41</id> <extendedTooltip> - <name>ИсторияViewStatusExtendedTooltip</name> + <name>ИсторияСостояниеПросмотраРасширеннаяПодсказка</name> <id>43</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> @@ -563,7 +563,7 @@ </extInfo> </extendedTooltip> <contextMenu> - <name>ИсторияViewStatusContextMenu</name> + <name>ИсторияСостояниеПросмотраКонтекстноеМеню</name> <id>42</id> <autoFill>true</autoFill> </contextMenu> @@ -574,10 +574,10 @@ </extInfo> </viewStatusAddition> <searchControlAddition> - <name>ИсторияSearchControl</name> + <name>ИсторияУправлениеПоиском</name> <id>44</id> <extendedTooltip> - <name>ИсторияSearchControlExtendedTooltip</name> + <name>ИсторияУправлениеПоискомРасширеннаяПодсказка</name> <id>46</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> @@ -587,7 +587,7 @@ </extInfo> </extendedTooltip> <contextMenu> - <name>ИсторияSearchControlContextMenu</name> + <name>ИсторияУправлениеПоискомКонтекстноеМеню</name> <id>45</id> <autoFill>true</autoFill> </contextMenu> @@ -654,7 +654,6 @@ <group>Vertical</group> <autoFillCheck>true</autoFillCheck> <enabled>true</enabled> - <verticalScroll>UseIfNecessary</verticalScroll> <showTitle>auto</showTitle> <showCloseButton>true</showCloseButton> <attributes> diff --git a/SSL/src/DataProcessors/ОценкаПроизводительности/Forms/ИсторияВыполнения/Module.bsl b/SSL/src/DataProcessors/ОценкаПроизводительности/Forms/ИсторияВыполнения/Module.bsl index eb531786d..e7b010223 100644 --- a/SSL/src/DataProcessors/ОценкаПроизводительности/Forms/ИсторияВыполнения/Module.bsl +++ b/SSL/src/DataProcessors/ОценкаПроизводительности/Forms/ИсторияВыполнения/Module.bsl @@ -51,7 +51,7 @@ #Область ОбработчикиСобытийЭлементовТаблицыФормыИстория // Запрещает редактирование ключевой операции из формы обработки -// т.к. могут пострадать внутренние механизмы. +// т.к. могут пострадать внутренние механизмы // &НаКлиенте Процедура КлючеваяОперацияОткрытие(Элемент, СтандартнаяОбработка) diff --git a/SSL/src/DataProcessors/ОценкаПроизводительности/Forms/Форма/Form.form b/SSL/src/DataProcessors/ОценкаПроизводительности/Forms/Форма/Form.form index 0709f4d51..55ce40311 100644 --- a/SSL/src/DataProcessors/ОценкаПроизводительности/Forms/Форма/Form.form +++ b/SSL/src/DataProcessors/ОценкаПроизводительности/Forms/Форма/Form.form @@ -3,20 +3,174 @@ <items xsi:type="form:FormGroup"> <name>Настройки</name> <id>57</id> - <items xsi:type="form:FormField"> - <name>ДатаНачала</name> - <id>69</id> + <items xsi:type="form:FormGroup"> + <name>НастройкаПериода</name> + <id>99</id> + <items xsi:type="form:FormField"> + <name>ДатаНачала</name> + <id>69</id> + <visible>true</visible> + <enabled>true</enabled> + <userVisible> + <common>true</common> + </userVisible> + <dataPath xsi:type="form:DataPath"> + <segments>Объект.ДатаНачала</segments> + </dataPath> + <extendedTooltip> + <name>ДатаНачалаExtendedTooltip</name> + <id>78</id> + <type>Label</type> + <autoMaxWidth>true</autoMaxWidth> + <autoMaxHeight>true</autoMaxHeight> + <extInfo xsi:type="form:LabelDecorationExtInfo"> + <horizontalAlign>Left</horizontalAlign> + </extInfo> + </extendedTooltip> + <contextMenu> + <name>ДатаНачалаКонтекстноеМеню</name> + <id>70</id> + <autoFill>true</autoFill> + </contextMenu> + <type>InputField</type> + <editMode>Enter</editMode> + <showInHeader>true</showInHeader> + <headerHorizontalAlign>Left</headerHorizontalAlign> + <showInFooter>true</showInFooter> + <extInfo xsi:type="form:InputFieldExtInfo"> + <autoMaxWidth>true</autoMaxWidth> + <autoMaxHeight>true</autoMaxHeight> + <wrap>true</wrap> + <chooseType>true</chooseType> + <typeDomainEnabled>true</typeDomainEnabled> + <textEdit>true</textEdit> + <textSize>Normal</textSize> + </extInfo> + </items> + <items xsi:type="form:FormField"> + <name>ДатаОкончания</name> + <id>71</id> + <visible>true</visible> + <enabled>true</enabled> + <userVisible> + <common>true</common> + </userVisible> + <dataPath xsi:type="form:DataPath"> + <segments>Объект.ДатаОкончания</segments> + </dataPath> + <extendedTooltip> + <name>ДатаОкончанияExtendedTooltip</name> + <id>79</id> + <type>Label</type> + <autoMaxWidth>true</autoMaxWidth> + <autoMaxHeight>true</autoMaxHeight> + <extInfo xsi:type="form:LabelDecorationExtInfo"> + <horizontalAlign>Left</horizontalAlign> + </extInfo> + </extendedTooltip> + <contextMenu> + <name>ДатаОкончанияКонтекстноеМеню</name> + <id>72</id> + <autoFill>true</autoFill> + </contextMenu> + <type>InputField</type> + <editMode>Enter</editMode> + <showInHeader>true</showInHeader> + <headerHorizontalAlign>Left</headerHorizontalAlign> + <showInFooter>true</showInFooter> + <extInfo xsi:type="form:InputFieldExtInfo"> + <handlers> + <event>ChoiceProcessing</event> + <name>ДатаОкончанияОбработкаВыбора</name> + </handlers> + <autoMaxWidth>true</autoMaxWidth> + <autoMaxHeight>true</autoMaxHeight> + <wrap>true</wrap> + <chooseType>true</chooseType> + <typeDomainEnabled>true</typeDomainEnabled> + <textEdit>true</textEdit> + <textSize>Normal</textSize> + </extInfo> + </items> + <items xsi:type="form:FormField"> + <name>Шаг</name> + <id>4</id> + <visible>true</visible> + <enabled>true</enabled> + <userVisible> + <common>true</common> + </userVisible> + <dataPath xsi:type="form:DataPath"> + <segments>Объект.Шаг</segments> + </dataPath> + <extendedTooltip> + <name>ШагExtendedTooltip</name> + <id>80</id> + <type>Label</type> + <autoMaxWidth>true</autoMaxWidth> + <autoMaxHeight>true</autoMaxHeight> + <extInfo xsi:type="form:LabelDecorationExtInfo"> + <horizontalAlign>Left</horizontalAlign> + </extInfo> + </extendedTooltip> + <contextMenu> + <name>ШагКонтекстноеМеню</name> + <id>5</id> + <autoFill>true</autoFill> + </contextMenu> + <type>InputField</type> + <editMode>Enter</editMode> + <showInHeader>true</showInHeader> + <headerHorizontalAlign>Left</headerHorizontalAlign> + <showInFooter>true</showInFooter> + <extInfo xsi:type="form:InputFieldExtInfo"> + <autoMaxWidth>true</autoMaxWidth> + <autoMaxHeight>true</autoMaxHeight> + <horizontalStretch>false</horizontalStretch> + <wrap>true</wrap> + <dropListButton>true</dropListButton> + <chooseType>true</chooseType> + <typeDomainEnabled>true</typeDomainEnabled> + <textEdit>true</textEdit> + <choiceList> + <value xsi:type="core:StringValue"> + <value>Час</value> + </value> + </choiceList> + <choiceList> + <value xsi:type="core:StringValue"> + <value>День</value> + </value> + </choiceList> + <choiceList> + <value xsi:type="core:StringValue"> + <value>Неделя</value> + </value> + </choiceList> + <choiceList> + <presentation> + <key>ru</key> + <value>Месяц (30 дней)</value> + </presentation> + <value xsi:type="core:StringValue"> + <value>Месяц</value> + </value> + </choiceList> + <textSize>Normal</textSize> + </extInfo> + </items> <visible>true</visible> <enabled>true</enabled> <userVisible> <common>true</common> </userVisible> - <dataPath xsi:type="form:DataPath"> - <segments>Объект.ДатаНачала</segments> - </dataPath> + <toolTip> + <key>ru</key> + <value>Настройка периода</value> + </toolTip> <extendedTooltip> - <name>ДатаНачалаExtendedTooltip</name> - <id>78</id> + <name>НастройкаПериодаРасширеннаяПодсказка</name> + <id>100</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -24,40 +178,156 @@ <horizontalAlign>Left</horizontalAlign> </extInfo> </extendedTooltip> - <contextMenu> - <name>ДатаНачалаКонтекстноеМеню</name> - <id>70</id> - <autoFill>true</autoFill> - </contextMenu> - <type>InputField</type> - <editMode>Enter</editMode> - <showInHeader>true</showInHeader> - <headerHorizontalAlign>Left</headerHorizontalAlign> - <showInFooter>true</showInFooter> - <extInfo xsi:type="form:InputFieldExtInfo"> - <autoMaxWidth>true</autoMaxWidth> - <autoMaxHeight>true</autoMaxHeight> - <wrap>true</wrap> - <chooseType>true</chooseType> - <typeDomainEnabled>true</typeDomainEnabled> - <textEdit>true</textEdit> - <textSize>Normal</textSize> + <type>UsualGroup</type> + <extInfo xsi:type="form:UsualGroupExtInfo"> + <behavior>Auto</behavior> + <representation>WeakSeparation</representation> + <showLeftMargin>true</showLeftMargin> + <united>true</united> + <throughAlign>Auto</throughAlign> + <currentRowUse>Auto</currentRowUse> </extInfo> </items> - <items xsi:type="form:FormField"> - <name>ДатаОкончания</name> - <id>71</id> + <items xsi:type="form:FormGroup"> + <name>НастройкаКомментарий</name> + <id>101</id> + <items xsi:type="form:FormField"> + <name>Комментарий</name> + <id>103</id> + <visible>true</visible> + <enabled>true</enabled> + <userVisible> + <common>true</common> + </userVisible> + <dataPath xsi:type="form:DataPath"> + <segments>Объект.Комментарий</segments> + </dataPath> + <extendedTooltip> + <name>КомментарийРасширеннаяПодсказка</name> + <id>105</id> + <type>Label</type> + <autoMaxWidth>true</autoMaxWidth> + <autoMaxHeight>true</autoMaxHeight> + <extInfo xsi:type="form:LabelDecorationExtInfo"> + <horizontalAlign>Left</horizontalAlign> + </extInfo> + </extendedTooltip> + <contextMenu> + <name>КомментарийКонтекстноеМеню</name> + <id>104</id> + <autoFill>true</autoFill> + </contextMenu> + <type>InputField</type> + <editMode>Enter</editMode> + <showInHeader>true</showInHeader> + <headerHorizontalAlign>Left</headerHorizontalAlign> + <showInFooter>true</showInFooter> + <extInfo xsi:type="form:InputFieldExtInfo"> + <handlers> + <event>StartChoice</event> + <name>КомментарийНачалоВыбора</name> + </handlers> + <handlers> + <event>ChoiceProcessing</event> + <name>КомментарийОбработкаВыбора</name> + </handlers> + <autoMaxWidth>true</autoMaxWidth> + <autoMaxHeight>true</autoMaxHeight> + <wrap>true</wrap> + <choiceButton>true</choiceButton> + <chooseType>true</chooseType> + <typeDomainEnabled>true</typeDomainEnabled> + <textEdit>true</textEdit> + <textSize>Normal</textSize> + </extInfo> + </items> + <items xsi:type="form:FormField"> + <name>ВариантФильтраКомментарий</name> + <id>106</id> + <title> + <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 + + + ru + Не фильтровать + + + НеФильтровать + + + + + ru + Равен + + + Равен + + + + + ru + Содержит + + + Содержит + + + Normal + + true true true - - Объект.ДатаОкончания - + + <key>ru</key> + <value>Настройка комментарий</value> + + + ru + Настройка комментарий + - ДатаОкончанияExtendedTooltip - 79 + НастройкаКомментарийРасширеннаяПодсказка + 102 Label true true @@ -65,91 +335,14 @@ Left - - ДатаОкончанияКонтекстноеМеню - 72 - true - - InputField - Enter - true - Left - true - - true - true - true - true - true - true - Normal - - - - Шаг - 4 - true - true - - true - - - Объект.Шаг - - - ШагExtendedTooltip - 80 - Label - true - true - - Left - - - - ШагКонтекстноеМеню - 5 - true - - InputField - Enter - true - Left - true - - true - true - false - true - true - true - true - true - - - Час - - - - - День - - - - - Неделя - - - - - ru - Месяц (30 дней) - - - Месяц - - - Normal + UsualGroup + + Auto + WeakSeparation + true + true + Auto + Auto true @@ -159,7 +352,7 @@ <key>ru</key> - <value>Настройка периода</value> + <value>Настройки отбора замеров</value> ru @@ -177,6 +370,7 @@ UsualGroup + Vertical Auto WeakSeparation true @@ -515,10 +709,10 @@ ПроизводительностьSearchString - 99 + 109 ПроизводительностьSearchStringExtendedTooltip - 101 + 111 Label true true @@ -528,7 +722,7 @@ ПроизводительностьSearchStringContextMenu - 100 + 110 true Производительность @@ -538,10 +732,10 @@ ПроизводительностьViewStatus - 102 + 112 ПроизводительностьViewStatusExtendedTooltip - 104 + 114 Label true true @@ -551,7 +745,7 @@ ПроизводительностьViewStatusContextMenu - 103 + 113 true ViewStatusAddition @@ -562,10 +756,10 @@ ПроизводительностьSearchControl - 105 + 115 ПроизводительностьSearchControlExtendedTooltip - 107 + 117 Label true true @@ -575,7 +769,7 @@ ПроизводительностьSearchControlContextMenu - 106 + 116 true SearchControlAddition @@ -917,7 +1111,6 @@ true Vertical true - UseIfNecessary auto true @@ -932,12 +1125,18 @@ true + + Объект.ВариантФильтраКомментарий + Объект.ДатаНачала Объект.ДатаОкончания + + Объект.Комментарий + Объект.Шаг @@ -996,7 +1195,7 @@ Обновить - Auto + DontUse Auto @@ -1018,7 +1217,7 @@ ПереместитьВверх - Auto + DontUse Auto @@ -1040,7 +1239,7 @@ ПереместитьВниз - Auto + DontUse Auto @@ -1062,7 +1261,7 @@ ЭкспортДанных - Auto + DontUse Auto @@ -1084,7 +1283,7 @@ Настройка - Auto + DontUse Auto @@ -1106,7 +1305,7 @@ УказатьAPDEX - Auto + DontUse Auto @@ -1128,7 +1327,7 @@ УстановитьОтбор - Auto + DontUse Auto @@ -1150,7 +1349,7 @@ ДобавитьКлючевуюОперацию - Auto + DontUse Auto @@ -1172,7 +1371,7 @@ УдалитьКлючевуюОперацию - Auto + DontUse Auto diff --git a/SSL/src/DataProcessors/ОценкаПроизводительности/Forms/Форма/Module.bsl b/SSL/src/DataProcessors/ОценкаПроизводительности/Forms/Форма/Module.bsl index 3577ea6c2..70a121b16 100644 --- a/SSL/src/DataProcessors/ОценкаПроизводительности/Forms/Форма/Module.bsl +++ b/SSL/src/DataProcessors/ОценкаПроизводительности/Forms/Форма/Module.bsl @@ -2,7 +2,7 @@ #Область ОбработчикиСобытийФормы // Процедура загружает настройки ТЧ, если это первое открытие -// то в ТЧ добавляются все ключевые операции из справочника. +// то в ТЧ добавляются все ключевые операции из справочника // &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) @@ -26,6 +26,10 @@ ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстСообщения); КонецПопытки; + Если ПустаяСтрока(Объект.ВариантФильтраКомментарий) Тогда + Объект.ВариантФильтраКомментарий = "НеФильтровать"; + КонецЕсли; + УстановитьУсловноеОформление(); КонецПроцедуры @@ -93,17 +97,16 @@ КонецПроцедуры -// Отображение истории выполнения ключевой операции. +// Отображение истории выполнения ключевой операции // &НаКлиенте Процедура ПроизводительностьВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка) СтрокаТЧ = Объект.Производительность.НайтиПоИдентификатору(ВыбраннаяСтрока); - Если Лев(Поле.Имя, 18) <> "Производительность" - Или СтрокаТЧ.КлючеваяОперация = Объект.ОбщаяПроизводительностьСистемы - Тогда - Возврат; + Если Не СтрНачинаетсяС(Поле.Имя, "Производительность") + Или СтрокаТЧ.КлючеваяОперация = Объект.ОбщаяПроизводительностьСистемы Тогда + Возврат; КонецЕсли; СтандартнаяОбработка = Ложь; @@ -143,12 +146,11 @@ Врем = Объект.Производительность; ТекущийИндекс = Врем.Индекс(ТД); - Если Врем.Количество() <= 1 ИЛИ - ТекущийИндекс = 0 ИЛИ - Врем[ТекущийИндекс - 1].КлючеваяОперация = Объект.ОбщаяПроизводительностьСистемы ИЛИ - ТД.КлючеваяОперация = Объект.ОбщаяПроизводительностьСистемы - Тогда - Возврат; + Если Врем.Количество() <= 1 + ИЛИ ТекущийИндекс = 0 + ИЛИ Врем[ТекущийИндекс - 1].КлючеваяОперация = Объект.ОбщаяПроизводительностьСистемы + ИЛИ ТД.КлючеваяОперация = Объект.ОбщаяПроизводительностьСистемы Тогда + Возврат; КонецЕсли; НаправлениеСдвига = -1; @@ -167,12 +169,11 @@ Врем = Объект.Производительность; ТекущийИндекс = Врем.Индекс(ТД); - Если Врем.Количество() <= 1 Или - ТекущийИндекс = Врем.Количество() - 1 Или - Врем[ТекущийИндекс + 1].КлючеваяОперация = Объект.ОбщаяПроизводительностьСистемы Или - ТД.КлючеваяОперация = Объект.ОбщаяПроизводительностьСистемы - Тогда - Возврат; + Если Врем.Количество() <= 1 + ИЛИ ТекущийИндекс = Врем.Количество() - 1 + ИЛИ Врем[ТекущийИндекс + 1].КлючеваяОперация = Объект.ОбщаяПроизводительностьСистемы + ИЛИ ТД.КлючеваяОперация = Объект.ОбщаяПроизводительностьСистемы Тогда + Возврат; КонецЕсли; НаправлениеСдвига = 1; @@ -189,7 +190,7 @@ &НаКлиенте Процедура Настройка(Команда) - ОткрытьФорму("Обработка.ОценкаПроизводительности.Форма.АвтоматическийЭкспортЗамеровПроизводительности", , ЭтотОбъект); + ОткрытьФорму("Обработка.ОценкаПроизводительности.Форма.АвтоматическийЭкспортЗамеровПроизводительности", , ЭтотОбъект,,,,,РежимОткрытияОкнаФормы.БлокироватьОкноВладельца); КонецПроцедуры @@ -199,10 +200,9 @@ СтрокаТЧ = Объект.Производительность.НайтиПоИдентификатору(Элементы.Производительность.ТекущаяСтрока); Элемент = Элементы.Производительность.ТекущийЭлемент; - Если Лев(Элемент.Имя, 18) <> "Производительность" - Или СтрокаТЧ.КлючеваяОперация = Объект.ОбщаяПроизводительностьСистемы - Тогда - Возврат; + Если Не СтрНачинаетсяС(Элемент.Имя, "Производительность") + ИЛИ СтрокаТЧ.КлючеваяОперация = Объект.ОбщаяПроизводительностьСистемы Тогда + Возврат; КонецЕсли; Если СтрокаТЧ[Элемент.Имя] = 0 Тогда @@ -300,7 +300,7 @@ ЦелевоеВремяПриИзменении(Элемент); КонецПроцедуры -// Процедура рассчитывает показатели производительности. +// Процедура рассчитывает показатели производительности // &НаСервере Процедура ОбновитьПоказатели(ЗначенияОтбора = Неопределено) @@ -319,7 +319,7 @@ Возврат; КонецЕсли; - // Получение итоговой ТаблицаКлючевыхОпераций которая будет выведена пользователю. + // Получение итоговой ТаблицаКлючевыхОпераций которая будет выведена пользователю ТаблицаКлючевыхОпераций = ОбработкаОбъект.ПоказателиПроизводительности(); Если ТаблицаКлючевыхОпераций = Неопределено Тогда ОбщегоНазначенияКлиентСервер.СообщитьПользователю(НСтр("ru = 'Период установлен не верно.'")); @@ -347,16 +347,15 @@ КонецПроцедуры -// Вычисляет целевое время для указанного значения APDEX. +// Вычисляет целевое время для указанного значения APDEX // // Параметры: -// КлючеваяОперация - СправочникСсылка.КлючевыеОперации, ключевая операция, для которой следует рассчитать целевое -// время. -// ЗначениеAPDEX - Число, APDEX, для которого необходимо подобрать целевое время. -// ИндексПериода - Число, индекс периода, для которого будет вычислено целевое время. +// КлючеваяОперация - СправочникСсылка.КлючевыеОперации, ключевая операция, для которой следует рассчитать целевое время +// ЗначениеAPDEX - Число, APDEX, для которого необходимо подобрать целевое время +// ИндексПериода - Число, индекс периода, для которого будет вычислено целевое время // // Возвращаемое значение: -// Число - целевое время, при котором APDEX будет равен указанному значению. +// Число - целевое время, при котором APDEX будет равен указанному значению // &НаСервере Функция РассчитатьЦелевоеВремя(КлючеваяОперация, ЗначениеAPDEX, ИндексПериода) @@ -421,11 +420,10 @@ КонецФункции -// Обрабатывает реквизиты табличной части "Производительность". +// Обрабатывает реквизиты табличной части "Производительность" // // Параметры: -// КолонкиТаблицаКлючевыхОпераций - КоллекцияКолонокТаблицыЗначений, из них вычисляется какие реквизиты удалить, а -// какие оставить. +// КолонкиТаблицаКлючевыхОпераций - КоллекцияКолонокТаблицыЗначений, из них вычисляется какие реквизиты удалить, а какие оставить // &НаСервере Процедура ОбработатьРеквизитыОбъекта(КолонкиТаблицаКлючевыхОпераций) @@ -433,7 +431,7 @@ РеквизитыОбъекта = ПолучитьРеквизиты("Объект.Производительность"); УдаляемыеРеквизиты = УдаляемыеРеквизиты(РеквизитыОбъекта); - // Колонки "Ключевая операция", "Приоритет" и "Целевое время". + // Колонки "Ключевая операция", "Приоритет" и "Целевое время" КоличествоПредопределенныхКолонок = 3; // Меняется состав колонок @@ -441,7 +439,7 @@ ИзменитьСоставРеквизитовОбъекта(КолонкиТаблицаКлючевыхОпераций, УдаляемыеРеквизиты); - // Формирование списков полей для условного оформления. + // Формирование списков полей для условного оформления ПоляОтбора = Новый Массив; ПоляОформления = Новый Массив; Для Каждого КолонкаТаблицаКлючевыхОпераций Из КолонкиТаблицаКлючевыхОпераций Цикл @@ -454,14 +452,13 @@ УстановитьУсловноеОформлениеТЧ(ПоляОтбора, ПоляОформления, УсловноеОформление, Объект.ОбщаяПроизводительностьСистемы); - // Меняются только заголовки колонок. + // Меняются только заголовки колонок Иначе Сч = -1; Для Каждого Элемент Из Элементы.Производительность.ПодчиненныеЭлементы Цикл Сч = Сч + 1; - // Пропускаем первые 3 элемента, чтобы не менять заголовки у колонок "Ключевая операция", "Приоритет" и "Целевое - // время". + // Пропускаем первые 3 элемента, чтобы не менять заголовки у колонок "Ключевая операция", "Приоритет" и "Целевое время" Если Сч < КоличествоПредопределенныхКолонок Тогда Продолжить; КонецЕсли; @@ -472,22 +469,21 @@ КонецПроцедуры -// Изменяются реквизиты формы ненужные удаляются нужные добавляются. +// Изменяются реквизиты формы ненужные удаляются нужные добавляются // // Параметры: -// КолонкиТаблицаКлючевыхОпераций - КоллекцияКолонокТаблицыЗначений, из них вычисляется какие реквизиты удалить, а -// какие оставить. +// КолонкиТаблицаКлючевыхОпераций - КоллекцияКолонокТаблицыЗначений, из них вычисляется какие реквизиты удалить, а какие оставить // УдаляемыеРеквизиты - Массив, список полных имен удаляемых реквизитов -// имена в формате Объект.Производительность.ПроизводительностьN, где N номер. +// имена в формате Объект.Производительность.ПроизводительностьN, где N номер // &НаСервере Процедура ИзменитьСоставРеквизитовОбъекта(КолонкиТаблицаКлючевыхОпераций, УдаляемыеРеквизиты) - // Удаление колонок из табличной части "Производительность". + // Удаление колонок из табличной части "Производительность" Для ИндексРеквизита = 0 По УдаляемыеРеквизиты.Количество() - 1 Цикл // Имена удаляемых реквизитов Объект.Производительность.ПроизводительностьN - // где N номер, это выражение получает строку вида ПроизводительностьN. + // где N номер, это выражение получает строку вида ПроизводительностьN Элемент = Элементы.Найти(Сред(УдаляемыеРеквизиты[ИндексРеквизита], 27)); Если Элемент <> Неопределено Тогда Элементы.Удалить(Элемент); @@ -498,12 +494,12 @@ ДобавляемыеРеквизиты = ДобавляемыеРеквизиты(КолонкиТаблицаКлючевыхОпераций); ИзменитьРеквизиты(ДобавляемыеРеквизиты, УдаляемыеРеквизиты); - // Добавление колонок в табличную часть "Производительность". + // Добавление колонок в табличную часть "Производительность" РеквизитыОбъекта = ПолучитьРеквизиты("Объект.Производительность"); Для Каждого РеквизитОбъекта Из РеквизитыОбъекта Цикл ИмяРеквизита = РеквизитОбъекта.Имя; - Если Лев(ИмяРеквизита, 18) = "Производительность" Тогда + Если СтрНачинаетсяС(ИмяРеквизита, "Производительность") Тогда Элемент = Элементы.Добавить(ИмяРеквизита, Тип("ПолеФормы"), Элементы.Производительность); Элемент.Вид = ВидПоляФормы.ПолеВвода; Элемент.ПутьКДанным = "Объект.Производительность." + ИмяРеквизита; @@ -517,13 +513,13 @@ КонецПроцедуры -// Функция создает массив реквизитов формы(колонки ТЧ "Производительность"), которые надо добавить. +// Функция создает массив реквизитов формы(колонки ТЧ "Производительность"), которые надо добавить // // Параметры: -// КолонкиТаблицаКлючевыхОпераций - КоллекцияКолонокТаблицыЗначений, список колонок, которые необходимо создать. +// КолонкиТаблицаКлючевыхОпераций - КоллекцияКолонокТаблицыЗначений, список колонок, которые необходимо создать // // Возвращаемое значение: -// Массив - Массив реквизитов формы. +// Массив - Массив реквизитов формы // &НаСервереБезКонтекста Функция ДобавляемыеРеквизиты(КолонкиТаблицаКлючевыхОпераций) @@ -547,10 +543,10 @@ КонецФункции // Функция создает массив реквизитов формы(колонки ТЧ "Производительность"), которые надо удалить -// и удаляет элементы формы связанные с реквизитами. +// и удаляет элементы формы связанные с реквизитами // // Возвращаемое значение: -// Массив - Массив реквизитов формы. +// Массив - Массив реквизитов формы // &НаСервереБезКонтекста Функция УдаляемыеРеквизиты(РеквизитыОбъекта) @@ -561,7 +557,7 @@ Пока ИндексРеквизита < РеквизитыОбъекта.Количество() Цикл ИмяРеквизита = РеквизитыОбъекта[ИндексРеквизита].Имя; - Если Лев(ИмяРеквизита, 18) = "Производительность" Тогда + Если СтрНачинаетсяС(ИмяРеквизита, "Производительность") Тогда УдаляемыеРеквизиты.Добавить("Объект.Производительность." + ИмяРеквизита); КонецЕсли; ИндексРеквизита = ИндексРеквизита + 1; @@ -572,14 +568,14 @@ КонецФункции -// Процедура устанавливает условное оформление ТЧ "Производительность". +// Процедура устанавливает условное оформление ТЧ "Производительность" // &НаСервереБезКонтекста Процедура УстановитьУсловноеОформлениеТЧ(ПоляОтбора, ПоляОформления, УсловноеОформление, ОбщаяПроизводительностьСистемы); УсловноеОформление.Элементы.Очистить(); - // Убрать приоритет у ключевой операции ОбщаяПроизводительностьСистемы. + // Убрать приоритет у ключевой операции ОбщаяПроизводительностьСистемы ЭлементОформления = УсловноеОформление.Элементы.Добавить(); // Вид оформления ЭлементОформления.Оформление.УстановитьЗначениеПараметра("Текст", ""); @@ -592,7 +588,7 @@ ПолеОформления = ЭлементОформления.Поля.Элементы.Добавить(); ПолеОформления.Поле = Новый ПолеКомпоновкиДанных("Приоритет"); - // Только просмотр колонки Приоритет. + // Только просмотр колонки Приоритет ЭлементОформления = УсловноеОформление.Элементы.Добавить(); // Вид оформления ЭлементОформления.Оформление.УстановитьЗначениеПараметра("ТолькоПросмотр", Истина); @@ -641,7 +637,7 @@ КоличествоПолей = ПоляОтбора.Количество() - 1; - // Оформление если операция не выполнялась. + // Оформление если операция не выполнялась Для ИндексПоля = 0 По КоличествоПолей Цикл ЭлементОформления = УсловноеОформление.Элементы.Добавить(); @@ -659,7 +655,7 @@ КонецЦикла; - // Оформление для показателей производительности. + // Оформление для показателей производительности Соответствие = СоответствиеЦветовУровнюАпдекса(); Для Каждого КлючЗначение Из Соответствие Цикл @@ -689,10 +685,10 @@ КонецПроцедуры -// Выполняет обновление диаграммы. +// Выполняет обновление диаграммы // // Параметры: -// ТаблицаКлючевыхОпераций - ТаблицаЗначений, данные, по которым будет обновлена диаграмма. +// ТаблицаКлючевыхОпераций - ТаблицаЗначений, данные, по которым будет обновлена диаграмма // &НаСервере Процедура ОбновитьДиаграмму(ТаблицаКлючевыхОпераций) @@ -731,8 +727,7 @@ Для Каждого КолонкаТаблицаКлючевыхОпераций Из ТаблицаКлючевыхОпераций.Колонки Цикл Точка = Диаграмма.Точки.Добавить(КолонкаТаблицаКлючевыхОпераций.Имя); - // Для отображения только часов если шаг Час. - Точка.Текст = ?(Объект.Шаг = "Час", Лев(КолонкаТаблицаКлючевыхОпераций.Заголовок, 2), КолонкаТаблицаКлючевыхОпераций.Заголовок); + Точка.Текст = ?(Объект.Шаг = "Час", Лев(КолонкаТаблицаКлючевыхОпераций.Заголовок, 2), КолонкаТаблицаКлючевыхОпераций.Заголовок); //Для отображения только часов если шаг Час Строка = 0; Столбец = ТаблицаКлючевыхОпераций.Колонки.Индекс(КолонкаТаблицаКлючевыхОпераций); Для Каждого Серия Из Диаграмма.Серии Цикл @@ -769,17 +764,19 @@ КонецЦикла; - ПараметрыЭкспорта = Новый Структура("ДатаНачала, ДатаОкончания, Шаг, МассивКлючевыхОпераций"); + ПараметрыЭкспорта = Новый Структура("ДатаНачала, ДатаОкончания, Шаг, МассивКлючевыхОпераций, Комментарий, ВариантФильтраКомментарий"); ПараметрыЭкспорта.ДатаНачала = Объект.ДатаНачала; ПараметрыЭкспорта.ДатаОкончания = Объект.ДатаОкончания; ПараметрыЭкспорта.Шаг = Строка(Объект.Шаг); + ПараметрыЭкспорта.Комментарий = Объект.Комментарий; + ПараметрыЭкспорта.ВариантФильтраКомментарий = Объект.ВариантФильтраКомментарий; ПараметрыЭкспорта.МассивКлючевыхОпераций = КлючевыеОперации; Возврат ПараметрыЭкспорта; КонецФункции -// Экспортировать данные замеров на указанном интервале. +// Экспортировать данные замеров на указанном интервале // &НаСервереБезКонтекста Процедура Экспортировать(АдресВХранилище, ПараметрыЭкспорта) @@ -794,6 +791,8 @@ Начало = ПараметрыЭкспорта.ДатаНачала; Конец = ПараметрыЭкспорта.ДатаОкончания; МассивКлючевыхОпераций = ПараметрыЭкспорта.МассивКлючевыхОпераций; + Комментарий = ПараметрыЭкспорта.Комментарий; + ВариантФильтра = ПараметрыЭкспорта.ВариантФильтраКомментарий; НачалоИнтервала = Начало; КонецИнтервала = Конец; @@ -810,7 +809,7 @@ КонецЕсли; ИмяВременногоФайла = ВременныйКаталог + "/" + ИмяФайлаПоВремени(НачалоИнтервала) + ".1capd"; - Если ЭкспортироватьИнтервал(ИмяВременногоФайла, НачалоИнтервала, КонецИнтервала, МассивКлючевыхОпераций) Тогда + Если ЭкспортироватьИнтервал(ИмяВременногоФайла, НачалоИнтервала, КонецИнтервала, МассивКлючевыхОпераций, Комментарий, ВариантФильтра) Тогда ЗаписьZip.Добавить(ИмяВременногоФайла); КонецЕсли; @@ -818,7 +817,7 @@ КонецЦикла; - ЗаполнитьОписание(ИмяФайлаОписания, Начало, Конец, МассивКлючевыхОпераций); + ЗаполнитьОписание(ИмяФайлаОписания, Начало, Конец, МассивКлючевыхОпераций, Комментарий, ВариантФильтра); ЗаписьZip.Добавить(ИмяФайлаОписания); ЗаполнитьНастройки(ИмяФайлаНастроек, Начало, Конец, ПараметрыЭкспорта.Шаг, МассивКлючевыхОпераций); @@ -833,18 +832,18 @@ КонецПроцедуры -// Экспортировать данные замеров информационной базы на указанном интервале. +// Экспортировать данные замеров информационной базы на указанном интервале // // Параметры: -// ИмяВременногоФайла - Строка, имя файла для записи данных. -// Начало - ДатаВремя, начало интервала поиска. -// Конец - ДатаВремя, конец интервала поиска. -// МассивКлючевыхОпераций - Массив, массив ключевых операций данные по которым надо экспортировать. +// ИмяВременногоФайла - Строка, имя файла для записи данных +// Начало - ДатаВремя, начало интервала поиска +// Конец - ДатаВремя, конец интервала поиска +// МассивКлючевыхОпераций - Массив, массив ключевых операций данные по которым надо экспортировать // &НаСервереБезКонтекста -Функция ЭкспортироватьИнтервал(ИмяВременногоФайла, Начало, Конец, МассивКлючевыхОпераций) +Функция ЭкспортироватьИнтервал(ИмяВременногоФайла, Начало, Конец, МассивКлючевыхОпераций, Комментарий, ВариантФильтра) - НаборЗаписейЗамеры = НаборЗаписейЗамерыВремени(Начало, Конец, МассивКлючевыхОпераций); + НаборЗаписейЗамеры = НаборЗаписейЗамерыВремени(Начало, Конец, МассивКлючевыхОпераций, Комментарий, ВариантФильтра); Если Не ЗначениеЗаполнено(НаборЗаписейЗамеры) Тогда Возврат Ложь; @@ -858,21 +857,25 @@ Возврат Истина; КонецФункции -// Получить набор записей регистра. +// Получить набор записей регистра // // Параметры: -// Начало - ДатаВремя, начало интервала поиска. -// Конец - ДатаВремя, конец интервала поиска. -// МассивКлючевыхОпераций - Массив, экспортируемые ключевые операции. +// Начало - ДатаВремя, начало интервала поиска +// Конец - ДатаВремя, конец интервала поиска +// МассивКлючевыхОпераций - Массив, экспортируемые ключевые операции // // Возвращаемое значение: // РегистрСведений.ЗамерыВремени.НаборЗаписей // &НаСервереБезКонтекста -Функция НаборЗаписейЗамерыВремени(Начало, Конец, МассивКлючевыхОпераций) - +Функция НаборЗаписейЗамерыВремени(Начало, Конец, МассивКлючевыхОпераций, Комментарий, ВариантФильтра) + Если ПустаяСтрока(Комментарий) Тогда + ВариантФильтра = "НеФильтровать"; + КонецЕсли; + МетаданныеРегистра = Метаданные.РегистрыСведений.ЗамерыВремени; + Запрос = Новый Запрос; ТекстЗапроса = "ВЫБРАТЬ"; Для Каждого Измерение Из МетаданныеРегистра.Измерения Цикл @@ -896,9 +899,19 @@ | " + МетаданныеРегистра.ПолноеИмя() + " КАК Замеры |ГДЕ | Замеры.ДатаНачалаЗамера МЕЖДУ &ДатаНачала И &ДатаОкончания - | И Замеры.КлючеваяОперация В(&МассивКлючевыхОпераций)"; + | И Замеры.КлючеваяОперация В(&МассивКлючевыхОпераций) + | %УсловиеКомментарий%"; + + Если ВариантФильтра = "НеФильтровать" Тогда + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "%УсловиеКомментарий%", ""); + ИначеЕсли ВариантФильтра = "Равен" Тогда + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "%УсловиеКомментарий%", "И Замеры.Комментарий = &Комментарий"); + Запрос.УстановитьПараметр("Комментарий", Комментарий); + ИначеЕсли ВариантФильтра = "Содержит" Тогда + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "%УсловиеКомментарий%", "И Замеры.Комментарий ПОДОБНО &Комментарий"); + Запрос.УстановитьПараметр("Комментарий", "%" + Комментарий + "%"); + КонецЕсли; - Запрос = Новый Запрос; Запрос.УстановитьПараметр("ДатаНачала", Начало); Запрос.УстановитьПараметр("ДатаОкончания", Конец); Запрос.УстановитьПараметр("МассивКлючевыхОпераций", МассивКлючевыхОпераций); @@ -930,15 +943,15 @@ КонецФункции -// Заполнить файл описания экспорта. +// Заполнить файл описания экспорта // // Параметры: -// ИмяФайлаОписания - Строка, имя файла для размещения описания. -// Начало - Дата и время, начало периода экспорта. -// Конец - Дата и время, конец периода экспорта. +// ИмяФайлаОписания - Строка, имя файла для размещения описания +// Начало - Дата и время, начало периода экспорта +// Конец - Дата и время, конец периода экспорта // &НаСервереБезКонтекста -Процедура ЗаполнитьОписание(ИмяФайлаОписания, Начало, Конец, МассивКлючевыхОпераций) +Процедура ЗаполнитьОписание(ИмяФайлаОписания, Начало, Конец, МассивКлючевыхОпераций, Комментарий, ВариантФильтра) ЗаписьXML = Новый ЗаписьXML; ЗаписьXML.ОткрытьФайл(ИмяФайлаОписания); @@ -950,10 +963,12 @@ ЗаписьXML.ЗаписатьАтрибут("BeginDate", Строка(Начало)); ЗаписьXML.ЗаписатьАтрибут("EndDate", Строка(Конец)); ЗаписьXML.ЗаписатьАтрибут("ExportDate", Строка(ТекущаяДата())); + ЗаписьXML.ЗаписатьАтрибут("Comment", Комментарий); + ЗаписьXML.ЗаписатьАтрибут("FilterOption", ВариантФильтра); - Для ИндексОперации = 0 По МассивКлючевыхОпераций.Количество() - 1 Цикл + Для ИндексКО = 0 По МассивКлючевыхОпераций.Количество() - 1 Цикл ЗаписьXML.ЗаписатьНачалоЭлемента("KeyOperation"); - ЗаписьXML.ЗаписатьАтрибут("name", Строка(МассивКлючевыхОпераций[ИндексОперации])); + ЗаписьXML.ЗаписатьАтрибут("name", Строка(МассивКлючевыхОпераций[ИндексКО])); ЗаписьXML.ЗаписатьКонецЭлемента(); КонецЦикла; @@ -993,13 +1008,13 @@ /////////////////////////////////////////////////////////////////////// // ВСПОМОГАТЕЛЬНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ -// Сдвигает строки табличной части и меняет приоритеты ключевых операций. +// Сдвигает строки табличной части и меняет приоритеты ключевых операций // // Параметры: // НаправлениеСдвига - Число, // -1, сдвиг вверх // 1, сдвиг вниз -// ТекущийИндекс - Число, индекс сдвигаемой строки. +// ТекущийИндекс - Число, индекс сдвигаемой строки // &НаКлиенте Процедура ВыполнитьСдвигСтроки(НаправлениеСдвига, ТекущийИндекс) @@ -1022,7 +1037,7 @@ КонецПроцедуры -// Устанавливает исключительную управляемую блокировку на ссылку. +// Устанавливает исключительную управляемую блокировку на ссылку // &НаСервереБезКонтекста Процедура ЗаблокироватьСсылку(Ссылка) @@ -1036,13 +1051,13 @@ КонецПроцедуры // Начинает транзакцию и устанавливает исключительную -// управляемую блокировку по значению ссылки. +// управляемую блокировку по значению ссылки // // Параметры: -// Ссылка - ЛюбаяСсылка, ссылка, которую надо заблокировать. +// Ссылка - ЛюбаяСсылка, ссылка, которую надо заблокировать // // Возвращаемое значение: -// Объект - объект полученный из ссылки. +// Объект - объект полученный из ссылки // &НаСервереБезКонтекста Функция НачатьИзменениеОбъекта(Ссылка) @@ -1057,11 +1072,11 @@ КонецФункции -// Фиксирует транзакцию и записывает объект. +// Фиксирует транзакцию и записывает объект // // Параметры: -// Объект - ЛюбойОбъект, объект, изменения которого следует зафиксировать. -// Записывать - Булево, необходимость записи объекта перед фиксацией транзакции. +// Объект - ЛюбойОбъект, объект, изменения которого следует зафиксировать +// Записывать - Булево, необходимость записи объекта перед фиксацией транзакции // &НаСервереБезКонтекста Процедура ЗафиксироватьИзменениеОбъекта(Объект, Записывать = Истина) @@ -1074,13 +1089,13 @@ КонецПроцедуры -// Выполняет обмен приоритетами ключевых операций. +// Выполняет обмен приоритетами ключевых операций // // Параметры: // КлючеваяОперация1 - СправочникСсылка.КлючевыеОперации -// Приоритет1 - Число, будет присвоен КлючеваяОперация2. +// Приоритет1 - Число, будет присвоен КлючеваяОперация2 // КлючеваяОперация2 - СправочникСсылка.КлючевыеОперации -// Приоритет2 - Число, будет присвоен КлючеваяОперация1. +// Приоритет2 - Число, будет присвоен КлючеваяОперация1 // &НаСервере Процедура ОбменятьПриоритеты(КлючеваяОперация1, Приоритет1, КлючеваяОперация2, Приоритет2) @@ -1101,7 +1116,7 @@ КонецПроцедуры // Процедура открывает форму выбора справочника КлючевыеОперации -// и устанавливает отбор, чтобы в списке не было операций которые уже выбраны. +// и устанавливает отбор, чтобы в списке не было операций которые уже выбраны // &НаКлиенте Процедура ОткрытьФормуВыбора() @@ -1109,8 +1124,8 @@ ТЧ = Объект.Производительность; Отбор = Новый Массив; - Для ТекИндекс = 0 По ТЧ.Количество() - 1 Цикл - Отбор.Добавить(ТЧ[ТекИндекс].КлючеваяОперация); + Для ИндексТЧ = 0 По ТЧ.Количество() - 1 Цикл + Отбор.Добавить(ТЧ[ИндексТЧ].КлючеваяОперация); КонецЦикла; ПараметрыФормы = Новый Структура; @@ -1119,15 +1134,14 @@ Оповещение = Новый ОписаниеОповещения( "ДобавитьКлючевуюОперациюЗавершение", - ЭтотОбъект - ); + ЭтотОбъект); + ОткрытьФорму( "Справочник.КлючевыеОперации.ФормаВыбора", ПараметрыФормы, ЭтотОбъект, ,,, - Оповещение, РежимОткрытияОкнаФормы.БлокироватьВесьИнтерфейс - ); + Оповещение, РежимОткрытияОкнаФормы.БлокироватьВесьИнтерфейс); КонецПроцедуры @@ -1153,7 +1167,7 @@ КонецФункции -// Функция получает имя файла по указанному времени. +// Функция получает имя файла по указанному времени // // // Параметры: @@ -1167,21 +1181,29 @@ Возврат Формат(Время, "ДФ=""гггг-ММ-дд ЧЧ-мм-сс"""); -КонецФункции +КонецФункции // ИмяФайлаПоВремени() -// Процедура удаляет каталог на сервере. +// Процедура удаляет каталог на сервере // &НаСервереБезКонтекста Процедура УдалитьФайлыНаСервере(Каталог) - УдалитьФайлы(Каталог); + + Попытка + УдалитьФайлы(Каталог); + Исключение + Событие = НСтр("ru = 'Удалить файлы на сервере'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()); + ЗаписьЖурналаРегистрации(Событие, + УровеньЖурналаРегистрации.Ошибка,,, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); + КонецПопытки; + КонецПроцедуры -// Вычисляет точные дату начала и окончания на выбранном отрезке. +// Вычисляет точные дату начала и окончания на выбранном отрезке // // Параметры: -// ДатаНачала [OUT] - Дата, дата начала выбранного периода. -// ДатаОкончания [OUT] - Дата, дата окончания выбранного периода. -// ИндексПериода [IN] - Число, индекс выбранного периода. +// ДатаНачала [OUT] - Дата, дата начала выбранного периода +// ДатаОкончания [OUT] - Дата, дата окончания выбранного периода +// ИндексПериода [IN] - Число, индекс выбранного периода // // Возвращаемое значение: // Булево - @@ -1204,21 +1226,20 @@ КонецЕсли; ДатаНачала = Объект.ДатаНачала + (ШагЧисло * ИндексПериода); - Если ШагЧисло <> 0 Тогда ДатаОкончания = ДатаНачала + ШагЧисло - 1; Иначе ДатаОкончания = КонецДня(Объект.ДатаОкончания); КонецЕсли; - + Возврат Истина; КонецФункции -// Создает таблицу значения, которая необходима для расчета APDEX. +// Создает таблицу значения, которая необходима для расчета APDEX // // Возвращаемое значение: -// ТаблицаЗначений - таблица значений со структурой необходимой для расчета APDEX. +// ТаблицаЗначений - таблица значений со структурой необходимой для расчета APDEX // &НаСервереБезКонтекста Функция ТаблицаКлючевыхОперацийДляВычисленияAPDEX() @@ -1241,7 +1262,7 @@ /////////////////////////////////////////////////////////////////////// // ВСПОМОГАТЕЛЬНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ (ОФОРМЛЕНИЕ, НАСТРОЙКИ) -// Функция возвращает цвет значения Неприемлемо. +// Функция возвращает цвет значения Неприемлемо // // Возвращаемое значение: // Цвет - цвет значения @@ -1253,7 +1274,7 @@ КонецФункции -// Функция возвращает цвет значения Плохо. +// Функция возвращает цвет значения Плохо // // Возвращаемое значение: // Цвет - цвет значения @@ -1265,7 +1286,7 @@ КонецФункции -// Функция возвращает цвет значения Удовлетворительно. +// Функция возвращает цвет значения Удовлетворительно // // Возвращаемое значение: // Цвет - цвет значения @@ -1277,7 +1298,7 @@ КонецФункции -// Функция возвращает цвет значения Хорошо. +// Функция возвращает цвет значения Хорошо // // Возвращаемое значение: // Цвет - цвет значения @@ -1289,7 +1310,7 @@ КонецФункции -// Функция возвращает цвет значения Отлично. +// Функция возвращает цвет значения Отлично // // Возвращаемое значение: // Цвет - цвет значения @@ -1301,9 +1322,9 @@ КонецФункции -// Функция возвращает соответствие, в котором. -// Ключ - Строка, оценка производительности. -// Значение - Структура, параметры оценки. +// Функция возвращает соответствие, в котором +// Ключ - Строка, оценка производительности +// Значение - Структура, параметры оценки // // Возвращаемое значение: // Соответствие @@ -1314,7 +1335,7 @@ Соответствие = Новый Соответствие; Значения = Новый Структура("От, До, Цвет"); - Значения.От = 0.001; // О означает что операция не выполнялась вообще. + Значения.От = 0.001; // 0 означает что операция не выполнялась вообще Значения.До = 0.5; Значения.Цвет = ЦветНеприемлемо(); Соответствие.Вставить("Неприемлемо", Значения); @@ -1339,7 +1360,7 @@ Значения = Новый Структура("От, До, Цвет"); Значения.От = 0.94; - Значения.До = 1.002; // Т.к. в условном оформлении к значению "До" применяется условие "Меньше", а не "МеньшеИлиРавно". + Значения.До = 1.002; // т.к. в условном оформлении к значению "До" применяется условие "Меньше", а не "МеньшеИлиРавно" Значения.Цвет = ЦветОтлично(); Соответствие.Вставить("Отлично", Значения); @@ -1347,7 +1368,7 @@ КонецФункции -// Функция проверяет правильность настроек формы. +// Функция проверяет правильность настроек формы // // Возвращаемое значение: // Истина - настройки верны @@ -1360,8 +1381,7 @@ Для Каждого СтрокаТЧ Из Объект.Производительность Цикл Если СтрокаТЧ.ЦелевоеВремя = 0 - И СтрокаТЧ.КлючеваяОперация <> Объект.ОбщаяПроизводительностьСистемы - Тогда + И СтрокаТЧ.КлючеваяОперация <> Объект.ОбщаяПроизводительностьСистемы Тогда ОбщегоНазначенияКлиентСервер.СообщитьПользователю( НСтр("ru = 'Целевое время обязательно должно быть заполнено.'"), @@ -1379,8 +1399,8 @@ КонецФункции -// Процедура при первом открытии формы обработки заполняет. -// ТЧ "Производительность" из справочника "КлючевыеОперации". +// Процедура при первом открытии формы обработки заполняет +// ТЧ "Производительность" из справочника "КлючевыеОперации" // &НаСервереБезКонтекста Функция ЗагрузитьКлючевыеОперации(ОбщаяПроизводительностьСистемы) @@ -1419,11 +1439,11 @@ КонецФункции -// Меняет целевое время ключевой операции. +// Меняет целевое время ключевой операции // // Параметры: -// КлючеваяОперация - СправочникСсылка.КлючевыеОперации, операция, у которой необходимо изменить целевое время. -// ЦелевоеВремя - Число, новое целевое время. +// КлючеваяОперация - СправочникСсылка.КлючевыеОперации, операция, у которой необходимо изменить целевое время +// ЦелевоеВремя - Число, новое целевое время // &НаСервере Процедура ИзменитьЦелевоеВремя(КлючеваяОперация, ЦелевоеВремя) @@ -1434,11 +1454,11 @@ КонецПроцедуры -// Удаляет из таблицы значений строки не подходящие под отбор. +// Удаляет из таблицы значений строки не подходящие под отбор // // Параметры: -// ТаблицаКлючевыхОпераций - ТаблицаЗначений, таблица, которую нужно отфильтровать. -// ЗначенияОтбора - Массив, массив строк со значениями отбора. +// ТаблицаКлючевыхОпераций - ТаблицаЗначений, таблица, которую нужно отфильтровать +// ЗначенияОтбора - Массив, массив строк со значениями отбора // &НаСервереБезКонтекста Процедура УстановитьОтборТаблицаКлючевыхОпераций(ТаблицаКлючевыхОпераций, ЗначенияОтбора) @@ -1525,4 +1545,33 @@ КонецПроцедуры +&НаКлиенте +Процедура КомментарийНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка) + Комментарии = ПолучитьПоследниеКомментарии(); + ДанныеВыбора = Новый СписокЗначений; + Для Каждого Комментарий Из Комментарии Цикл + ДанныеВыбора.Добавить(Комментарий); + КонецЦикла; + + СтандартнаяОбработка = Ложь; +КонецПроцедуры + +&НаСервереБезКонтекста +Функция ПолучитьПоследниеКомментарии() + Возврат РегистрыСведений.ЗамерыВремени.ПолучитьПоследниеКомментарии(); +КонецФункции + +&НаКлиенте +Процедура КомментарийОбработкаВыбора(Элемент, ВыбранноеЗначение, СтандартнаяОбработка) + Если НЕ ПустаяСтрока(ВыбранноеЗначение) И Объект.ВариантФильтраКомментарий = "НеФильтровать" Тогда + Объект.ВариантФильтраКомментарий = "Равен"; + КонецЕсли; +КонецПроцедуры + +&НаКлиенте +Процедура ДатаОкончанияОбработкаВыбора(Элемент, ВыбранноеЗначение, СтандартнаяОбработка) + Объект.ДатаОкончания = КонецДня(ВыбранноеЗначение); + СтандартнаяОбработка = Ложь; +КонецПроцедуры + #КонецОбласти diff --git a/SSL/src/DataProcessors/ОценкаПроизводительности/Forms/ФормаОтбора/Form.form b/SSL/src/DataProcessors/ОценкаПроизводительности/Forms/ФормаОтбора/Form.form index 80f3cf1f1..a631b119b 100644 --- a/SSL/src/DataProcessors/ОценкаПроизводительности/Forms/ФормаОтбора/Form.form +++ b/SSL/src/DataProcessors/ОценкаПроизводительности/Forms/ФормаОтбора/Form.form @@ -343,7 +343,6 @@ true true true - UseIfNecessary auto true @@ -479,7 +478,7 @@ ОК - Auto + DontUse Auto diff --git a/SSL/src/DataProcessors/ОценкаПроизводительности/Help/ru.html b/SSL/src/DataProcessors/ОценкаПроизводительности/Help/ru.html index 45a0f3f0c..0d72e2153 100644 --- a/SSL/src/DataProcessors/ОценкаПроизводительности/Help/ru.html +++ b/SSL/src/DataProcessors/ОценкаПроизводительности/Help/ru.html @@ -22,11 +22,11 @@
          Самая верхняя операция в списке имеет самый высокий приоритет, самая нижняя запись - самый низкий. Таким образом, изменяя расположение ключевой операции в списке, можно настроить приоритет для каждой операции.
        • Запись Общая производительность системы всегда располагается в начале списка, не имеет приоритета и служит для оценки производительности программы в целом.
      • -
        Целевое время - выводится из списка Ключевые операции. Оценка производительности будет строиться относительно этого значения. Т.е. при изменении целевых значений времени будут меняться и оценки производительности. Целевое значение указывается в секундах. 

      Настройка периода

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

      Настройка периода

      • Перед проведением оценки производительности нужно задать период, за который будет проводиться оценка производительности. -
        • Для этого введите Дату начала и Дату окончания периода. С помощью кнопки  выберите дату из календаря, при необходимости поменяйте время (по умолчанию равно 0:00:00).
      • Установкой поля Шаг регулируется количество результатов, которые будут отображаться в периоде. Например, если в качестве периода установить день, а в качестве шага - час, то в окне будет выведено 24 результата (для каждой ключевой операции). При этом результат за час будет рассчитан по специальной формуле по методике APDEX. Если в течение часа операция не выполнялась в программе,  то в соответствующей ячейке таблицы будет ноль. Замеры будут произведены во время выполнения указанных ключевых операций, например, при проведении документа. +
        • Для этого введите Дату начала и Дату окончания периода в формате Дата-время. С помощью кнопки  выберите дату из календаря, при необходимости поменяйте время (по умолчанию равно 0:00:00).
      • Установкой поля Шаг регулируется количество результатов, которые будут отображаться в периоде. Например, если в качестве периода установить день, а в качестве шага - час, то в окне будет выведено 24 результата (для каждой ключевой операции). При этом результат за час будет рассчитан по специальной формуле по методике APDEX. Если в течение часа операция не выполнялась в программе,  то в соответствующей ячейке таблицы будет ноль. Замеры будут произведены во время выполнения указанных ключевых операций, например, при проведении документа.
      • Результаты замеров будут показаны в окне Оценка производительности на вкладках Таблица и Диаграмма.

      Обновление таблицы

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

      Вычисление целевого времени

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

      Вычисление целевого времени

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

      Оценка производительности

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

      @@ -53,7 +53,7 @@
    • в поле Условие автоматически проставляется цифровое выражение по APDEX, которое соответствует оценкам.
    • Для начала отбора нажмите ОК.
    • История выполнения ключевой операции

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

      Диаграмма

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

      Экспорт замеров производительности

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

      Экспорт замеров производительности

      • Полученные замеры производительности программа позволяет автоматически в фоне выгружать во внешние файлы, например, для выполнения анализа производительности в другой программе.
      • Для того чтобы настроить выгрузку этих данных, нажмите Еще - Настройка. Сформированные внешние файлы, а также файлы, содержащие настройки, при которых были получены эти замеры, автоматически упаковываются в ZIP-архив. -
      • Для того чтобы выполнить экспорт замеров производительности вручную, нажмите Еще - Экспорт данных.
      \ 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 f47beac35..8e4c8bf9d 100644 --- a/SSL/src/DataProcessors/ОценкаПроизводительности/ObjectModule.bsl +++ b/SSL/src/DataProcessors/ОценкаПроизводительности/ObjectModule.bsl @@ -2,10 +2,10 @@ #Область ПрограммныйИнтерфейс -// Функция формирует таблицу значений которая будет выведена пользователю. +// Функция формирует таблицу значений которая будет выведена пользователю // // Возвращаемое значение: -// ТаблицаЗначений - итоговая таблица значений. +// ТаблицаЗначений - итоговая таблица значений // Функция ПоказателиПроизводительности() Экспорт @@ -27,19 +27,25 @@ Иначе ПараметрыВычисления.ВыводитьИтоги = Истина; КонецЕсли; + ПараметрыВычисления.Комментарий = Комментарий; + Если НЕ ПустаяСтрока(Комментарий) Тогда + ПараметрыВычисления.ВариантФильтраКомментарий = ВариантФильтраКомментарий; + Иначе + ПараметрыВычисления.ВариантФильтраКомментарий = "НеФильтровать"; + КонецЕсли; Возврат ВычислитьAPDEX(ПараметрыВычисления); КонецФункции -// Функция динамически формирует запрос и получает APDEX. +// Функция динамически формирует запрос и получает APDEX // // Параметры: -// ПараметрыВычисления - Структура, см. СтруктураПараметровДляРасчетаАпдекса(). +// ПараметрыВычисления - Структура, см. СтруктураПараметровДляРасчетаАпдекса() // // Возвращаемое значение: // ТаблицаЗначений - в таблице возвращается ключевая операция и -// показатель производительности за определенный период времени. +// показатель производительности за определенный период времени // Функция ВычислитьAPDEX(ПараметрыВычисления) Экспорт @@ -67,9 +73,12 @@ | КлючевыеОперации.ЦелевоеВремя КАК ЦелевоеВремя%Колонки% |ИЗ | КлючевыеОперации КАК КлючевыеОперации - | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЗамерыВремени КАК ЗамерыВремени - | ПО КлючевыеОперации.КлючеваяОперация = ЗамерыВремени.КлючеваяОперация - | И ЗамерыВремени.ДатаНачалаЗамера МЕЖДУ &НачалоПериода И &КонецПериода + |ЛЕВОЕ СОЕДИНЕНИЕ + | РегистрСведений.ЗамерыВремени КАК ЗамерыВремени + |ПО + | КлючевыеОперации.КлючеваяОперация = ЗамерыВремени.КлючеваяОперация + | И ЗамерыВремени.ДатаНачалаЗамера МЕЖДУ &НачалоПериода И &КонецПериода + | %УсловиеКомментарий% |ГДЕ | НЕ КлючевыеОперации.КлючеваяОперация = &КлючеваяОперацияИтого | @@ -78,7 +87,7 @@ | КлючевыеОперации.Приоритет, | КлючевыеОперации.ЦелевоеВремя |%Итоги%"; - + Выражение = " | ,ВЫБОР @@ -95,6 +104,7 @@ | И ЗамерыВремениВнутр.ДатаНачалаЗамера МЕЖДУ &НачалоПериода И &КонецПериода | И ЗамерыВремениВнутр.ДатаНачалаЗамера >= &НачалоПериода%Номер% | И ЗамерыВремениВнутр.ДатаНачалаЗамера <= &КонецПериода%Номер% + | %УсловиеКомментарийВнутр% | ) | ТОГДА 0 | @@ -194,6 +204,19 @@ ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "%Итоги%", ?(ПараметрыВычисления.ВыводитьИтоги, "ИТОГИ" + Итоги, "")); ТекстЗапроса = ТекстЗапроса + ?(ПараметрыВычисления.ВыводитьИтоги, ПоОбщие, ""); + Если ПараметрыВычисления.ВариантФильтраКомментарий = "НеФильтровать" Тогда + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "%УсловиеКомментарий%", ""); + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "%УсловиеКомментарийВнутр%", ""); + ИначеЕсли ПараметрыВычисления.ВариантФильтраКомментарий = "Равен" Тогда + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "%УсловиеКомментарий%", "И ЗамерыВремени.Комментарий = &Комментарий"); + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "%УсловиеКомментарийВнутр%", "И ЗамерыВремениВнутр.Комментарий = &Комментарий"); + Запрос.УстановитьПараметр("Комментарий", ПараметрыВычисления.Комментарий); + ИначеЕсли ПараметрыВычисления.ВариантФильтраКомментарий = "Содержит" Тогда + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "%УсловиеКомментарий%", "И ЗамерыВремени.Комментарий ПОДОБНО &Комментарий"); + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "%УсловиеКомментарийВнутр%", "И ЗамерыВремениВнутр.Комментарий ПОДОБНО &Комментарий"); + Запрос.УстановитьПараметр("Комментарий", "%" + ПараметрыВычисления.Комментарий + "%"); + КонецЕсли; + Запрос.Текст = ТекстЗапроса; Результат = Запрос.Выполнить(); @@ -206,7 +229,6 @@ Если ПараметрыВычисления.ВыводитьИтоги Тогда ТаблицаКлючевыхОпераций[0][0] = ОбщаяПроизводительностьСистемы; ВычислитьИтоговыйAPDEX(ТаблицаКлючевыхОпераций); - // ТаблицаКлючевыхОпераций.Сдвинуть(0, ТаблицаКлючевыхОпераций.Количество() - 1); КонецЕсли; ИндексКолонки = 0; @@ -214,7 +236,7 @@ Пока ИндексКолонки <= ТаблицаКлючевыхОпераций.Колонки.Количество() - 1 Цикл КолонкаТаблицаКлючевыхОпераций = ТаблицаКлючевыхОпераций.Колонки[ИндексКолонки]; - Если Лев(КолонкаТаблицаКлючевыхОпераций.Имя, 4) = "Врем" Тогда + Если СтрНачинаетсяС(КолонкаТаблицаКлючевыхОпераций.Имя, "Врем") Тогда ТаблицаКлючевыхОпераций.Колонки.Удалить(КолонкаТаблицаКлючевыхОпераций); Продолжить; КонецЕсли; @@ -235,44 +257,47 @@ КонецФункции -// Создает структуру параметров необходимую для расчета APDEX. +// Создает структуру параметров необходимую для расчета APDEX // // Возвращаемое значение: // Структура - -// ШагЧисло - Число, указывается размер шага в секундах. -// КоличествоШагов - Число, количество шагов в периоде. -// ДатаНачала - Дата, дата начала замеров. -// ДатаОкончания - Дата, дата окончания замеров. +// ШагЧисло - Число, указывается размер шага в секундах +// КоличествоШагов - Число, количество шагов в периоде +// ДатаНачала - Дата, дата начала замеров +// ДатаОкончания - Дата, дата окончания замеров // ТаблицаКлючевыхОпераций - ТаблицаЗначений, -// КлючеваяОперация - СправочникСсылка.КлючевыеОперации, ключевая операция. -// НомерСтроки - Число, приоритет ключевой операции. -// ЦелевоеВремя - Число, целевое время ключевой операции. +// КлючеваяОперация - СправочникСсылка.КлючевыеОперации, ключевая операция +// НомерСтроки - Число, приоритет ключевой операции +// ЦелевоеВремя - Число, целевое время ключевой операции // ВыводитьИтоги - Булево, -// Истина, вычислять итоговую производительность. -// Ложь, не вычислять итоговую производительность. +// Истина, вычислять итоговую производительность +// Ложь, не вычислять итоговую производительность // Функция СтруктураПараметровДляРасчетаАпдекса() Экспорт + СтруктураПараметров = Новый Структура; - Возврат Новый Структура( - "ШагЧисло," + - "КоличествоШагов," + - "ДатаНачала," + - "ДатаОкончания," + - "ТаблицаКлючевыхОпераций," + - "ВыводитьИтоги"); + СтруктураПараметров.Вставить("ШагЧисло"); + СтруктураПараметров.Вставить("КоличествоШагов"); + СтруктураПараметров.Вставить("ДатаНачала"); + СтруктураПараметров.Вставить("ДатаОкончания"); + СтруктураПараметров.Вставить("ТаблицаКлючевыхОпераций"); + СтруктураПараметров.Вставить("ВыводитьИтоги"); + СтруктураПараметров.Вставить("Комментарий"); + СтруктураПараметров.Вставить("ВариантФильтраКомментарий"); + Возврат СтруктураПараметров; КонецФункции -// Вычисляет размер и количество шагов на заданном интервале. +// Вычисляет размер и количество шагов на заданном интервале // // Параметры: -// ШагЧисло [OUT] - Число, количество секунд, которое надо прибавить к дате начала чтобы выполнить следующий шаг. -// КоличествоШагов [OUT] - Число, количество шагов на заданном интервале. +// ШагЧисло [OUT] - Число, количество секунд, которое надо прибавить к дате начала чтобы выполнить следующий шаг +// КоличествоШагов [OUT] - Число, количество шагов на заданном интервале // // Возвращаемое значение: // Булево - -// Истина, параметры рассчитаны. -// Ложь, параметры не рассчитаны. +// Истина, параметры рассчитаны +// Ложь, параметры не рассчитаны // Функция ПериодичностьДиаграммы(ШагЧисло, КоличествоШагов) Экспорт @@ -282,7 +307,7 @@ Возврат Ложь; КонецЕсли; - // КоличествоШагов - целое число, округленное вверх. + // КоличествоШагов - целое число, округленное вверх КоличествоШагов = 0; Если Шаг = "Час" Тогда ШагЧисло = 86400 / 24; @@ -299,7 +324,7 @@ ИначеЕсли Шаг = "Месяц" Тогда ШагЧисло = 86400 * 30; Врем = КонецДня(ДатаНачала); - Пока Врем < ДатаОкончания Цикл + Пока Врем <= ДатаОкончания Цикл Врем = ДобавитьМесяц(Врем, 1); КоличествоШагов = КоличествоШагов + 1; КонецЦикла; @@ -316,14 +341,14 @@ #Область СлужебныеПроцедурыИФункции -// Процедура рассчитывает итоговое значение APDEX. +// Процедура рассчитывает итоговое значение APDEX // // Параметры: -// ТаблицаКлючевыхОпераций - ТаблицаЗначений, результат запроса рассчитавшего APDEX. +// ТаблицаКлючевыхОпераций - ТаблицаЗначений, результат запроса рассчитавшего APDEX // Процедура ВычислитьИтоговыйAPDEX(ТаблицаКлючевыхОпераций) - // Начинаем с 4 колонки первые 3 это КлючеваяОперация, Приоритет, ЦелевоеВремя. + // Начинаем с 4 колонки первые 3 это КлючеваяОперация, Приоритет, ЦелевоеВремя ИндексНачальнойКолонки = 3; ИндексСтрокиИтогов = 0; ИндексКолонкиПриоритет = 1; @@ -339,11 +364,9 @@ КонецЦикла; Если МинимальныйПриоритет < 1 Тогда - ТекстСообщения = НСтр("ru = 'Неверно заполнены приоритеты. Расчет итогового APDEX невозможен.'"); - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстСообщения); - Возврат; + МинимальныйПриоритет = 1; КонецЕсли; - + Колонка = ИндексНачальнойКолонки; Пока Колонка < ИндексПоследнейКолонки Цикл НН = 0; @@ -352,7 +375,7 @@ МаксимальноеКоличествоОперацийЗаПериод = ТаблицаКлючевыхОпераций[ИндексСтрокиИтогов][Колонка]; - // С 1 т.к. 0 это строка итогов. + // с 1 т.к. 0 это строка итогов Для Строка = 1 По ИндексПоследнейСтроки Цикл ПриоритетТекущейОперации = ТаблицаКлючевыхОпераций[Строка][ИндексКолонкиПриоритет]; @@ -385,11 +408,10 @@ КонецПроцедуры - Функция ЗаголовокКолонки(НачалоПериода) Если Шаг = "Час" Тогда - // Страна указана для вывода лидирующего нуля чтобы было не 1:30:25, а 01:30:25. + // Страна указана для вывода лидирующего нуля чтобы было не 1:30:25, а 01:30:25 ЗаголовокКолонки = Строка(Формат(НачалоПериода, "Л=ru_UA; ДЛФ=T")); Иначе ЗаголовокКолонки = Строка(Формат(НачалоПериода, "ДФ=dd.MM.yy")); @@ -399,33 +421,6 @@ КонецФункции -//////////////////////////////////////////////////////////////////////////////// -// УСТАРЕВШИЕ ПРОЦЕДУРЫ И ФУНКЦИИ - -// Устарела. Следует использовать функцию СтруктураПараметровДляРасчетаАпдекса. -// -// Создает структуру параметров необходимую для расчета APDEX. -// -// Возвращаемое значение: -// Структура - -// ШагЧисло - Число, указывается размер шага в секундах. -// КоличествоШагов - Число, количество шагов в периоде. -// ДатаНачала - Дата, дата начала замеров. -// ДатаОкончания - Дата, дата окончания замеров. -// ТаблицаКлючевыхОпераций - ТаблицаЗначений, -// КлючеваяОперация - СправочникСсылка.КлючевыеОперации, ключевая операция. -// НомерСтроки - Число, приоритет ключевой операции. -// ЦелевоеВремя - Число, целевое время ключевой операции. -// ВыводитьИтоги - Булево, -// Истина, вычислять итоговую производительность. -// Ложь, не вычислять итоговую производительность. -// -Функция СтруктураПараметровДляРасчётаАпдекса() Экспорт - - Возврат СтруктураПараметровДляРасчетаАпдекса(); - -КонецФункции - #КонецОбласти #КонецЕсли \ No newline at end of file diff --git a/SSL/src/DataProcessors/ОценкаПроизводительности/ОценкаПроизводительности.mdo b/SSL/src/DataProcessors/ОценкаПроизводительности/ОценкаПроизводительности.mdo index dd6e12fe9..c6c3af62a 100644 --- a/SSL/src/DataProcessors/ОценкаПроизводительности/ОценкаПроизводительности.mdo +++ b/SSL/src/DataProcessors/ОценкаПроизводительности/ОценкаПроизводительности.mdo @@ -101,7 +101,64 @@ ru - Общая производительность системы по всем ключевым операциям + Общая производительность всей системы + + + + + + Комментарий + + ru + Комментарий + + Значение комментария для отбора замеров + + String + + 256 + + + + ru + Комментарий, по которому будут отбираться замеры производительности при расчете APDEX + + + + + + ВариантФильтраКомментарий + + ru + Вариант фильтра комментарий + + Вариант отбора комментариев при расчете производительности + + String + + 20 + + + + ru + Вариант сравнения строки комментария + + + + + + ВыполнятьЗамерыПроизводительности + + ru + Выполнять замеры производительности + + Включение подсистемы "Оценка производительности" + + ConstantsSet + + + ru + Включает запись замеров производительности @@ -139,7 +196,7 @@ ru - Ключевая операция замеров производительности + Ключевая операция замера производительности @@ -231,4 +288,13 @@ PersonalComputer MobileDevice + + НастройкиОценкиПроизводительности + + ru + Настройки оценки производительности + + ActionsPanelTools + Auto + diff --git a/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Commands/ПоискИУстановкаОбновлений/CommandModule.bsl b/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Commands/ПоискИУстановкаОбновлений/CommandModule.bsl new file mode 100644 index 000000000..1161cbb07 --- /dev/null +++ b/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Commands/ПоискИУстановкаОбновлений/CommandModule.bsl @@ -0,0 +1,16 @@ + +#Область ОбработчикиСобытий + +&НаКлиенте +Процедура ОбработкаКоманды(ПараметрКоманды, ПараметрыВыполненияКоманды) + + ОткрытьФорму( + "Обработка.ПанельАдминистрированияБСП.Форма.ПоискИУстановкаОбновлений", + Новый Структура, + ПараметрыВыполненияКоманды.Источник, + "Обработка.ПанельАдминистрированияБСП.Форма.ПоискИУстановкаОбновлений" + ?(ПараметрыВыполненияКоманды.Окно = Неопределено, ".ОтдельноеОкно", ""), + ПараметрыВыполненияКоманды.Окно); + +КонецПроцедуры + +#КонецОбласти diff --git a/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/НастройкиПользователейИПрав/Form.form b/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/НастройкиПользователейИПрав/Form.form index b3ed28fc0..47fb8ac90 100644 --- a/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/НастройкиПользователейИПрав/Form.form +++ b/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/НастройкиПользователейИПрав/Form.form @@ -171,128 +171,94 @@ Auto - - ГруппаПрименитьНастройки - 2133 - - КакПрименитьНастройки - 2135 - - <key>ru</key> - <value>После изменения настроек необходимо переоткрыть все открытые окна или перезайти в программу.</value> - - true - true - - true - - - КакПрименитьНастройкиРасширеннаяПодсказка - 2137 - Label - true - true - - Left - - - - КакПрименитьНастройкиКонтекстноеМеню - 2136 - true - - Label - true - true - - - URLProcessing - КакПрименитьНастройкиОбработкаНавигационнойСсылки - - Left - - - true - true - - true - - - <key>ru</key> - <value>Группа применить настройки</value> - - - ru - Группа применить настройки - - - ГруппаПрименитьНастройкиРасширеннаяПодсказка - 2134 - Label - true - true - - Left - - - UsualGroup - - Vertical - Auto - true - true - Auto - Auto - - ПользователиИГруппы 830 - Пользователи + ГруппыПользователейИНастройкиВхода 1876 - - ОткрытьПользователи - 831 + + Пользователи + 2140 + + ОткрытьПользователи + 831 + true + true + + true + + + ОткрытьПользователиExtendedTooltip + 2044 + Label + true + true + + Left + + + Hyperlink + Catalog.Пользователи.StandardCommand.OpenList + Normal + Auto + true + true + UserCmds + Auto + + + ПояснениеПользователи + 833 + + <key>ru</key> + <value>Ведение списка пользователей, которые работают с программой.</value> + + true + true + + true + + + ПояснениеПользователиExtendedTooltip + 2045 + Label + true + true + + Left + + + + ПояснениеПользователиКонтекстноеМеню + 834 + true + + Label + true + true + + Style.ПоясняющийТекст + + + Left + Top + + true true true - - ОткрытьПользователиExtendedTooltip - 2044 - Label - true - true - - Left - - - Hyperlink - Catalog.Пользователи.StandardCommand.OpenList - Normal - Auto - true - true - UserCmds - Auto - - - ПояснениеПользователи - 833 <key>ru</key> - <value>Ведение списка пользователей, которые работают с программой.</value> + <value>Пользователи</value> - true - true - - true - + 43 + false - ПояснениеПользователиExtendedTooltip - 2045 + ПользователиРасширеннаяПодсказка + 2141 Label true true @@ -300,19 +266,129 @@ Left - - ПояснениеПользователиКонтекстноеМеню - 834 - true - - Label - true - true - - Style.ПоясняющийТекст - - - Left + UsualGroup + + Vertical + Auto + true + true + Auto + Auto + + + + ГруппыПользователей + 1877 + + ИспользоватьГруппыПользователей + 697 + + <key>ru</key> + <value>Группы пользователей</value> + + true + true + + true + + + НаборКонстант.ИспользоватьГруппыПользователей + + Right + + OnChange + ИспользоватьГруппыПользователейПриИзменении + + + ИспользоватьГруппыПользователейExtendedTooltip + 2047 + Label + true + true + + Left + + + + ИспользоватьГруппыПользователейКонтекстноеМеню + 698 + true + + CheckBoxField + Enter + true + Left + true + + + + ПояснениеИспользоватьГруппыПользователей + 836 + + <key>ru</key> + <value>Объединение пользователей в группы.</value> + + true + true + + true + + + ПояснениеИспользоватьГруппыПользователейExtendedTooltip + 2048 + Label + true + true + + Left + + + + ПояснениеИспользоватьГруппыПользователейКонтекстноеМеню + 837 + true + + Label + true + 1 + true + + Style.ПоясняющийТекст + + + Left + Top + + + true + true + + true + + + <key>ru</key> + <value>Группы пользователей</value> + + 43 + false + + ГруппыПользователейРасширеннаяПодсказка + 2046 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + true + true + Auto + Auto true @@ -322,16 +398,10 @@ <key>ru</key> - <value>Пользователи</value> + <value>Группы пользователей и настройки входа</value> - - ru - Пользователи - - 43 - false - ПользователиРасширеннаяПодсказка + ГруппыПользователейИНастройкиВходаРасширеннаяПодсказка 2043 Label true @@ -351,31 +421,23 @@ - ГруппыПользователей - 1877 - - ИспользоватьГруппыПользователей - 697 + ГруппаНастройкиВхода + 2142 + + НастройкиВхода + 2138 <key>ru</key> - <value>Группы пользователей</value> + <value>Настройки входа</value> true true true - - НаборКонстант.ИспользоватьГруппыПользователей - - Right - - OnChange - ИспользоватьГруппыПользователейПриИзменении - - ИспользоватьГруппыПользователейExtendedTooltip - 2047 + НастройкиВходаРасширеннаяПодсказка + 2139 Label true true @@ -383,24 +445,21 @@ Left - - ИспользоватьГруппыПользователейКонтекстноеМеню - 698 - true - - CheckBoxField - Enter - true - Left - true - + Hyperlink + Form.Command.НастройкиВходаПользователей + Normal + Auto + true + true + UserCmds + Auto - ПояснениеИспользоватьГруппыПользователей - 836 + ПояснениеНастройкиВхода + 2144 <key>ru</key> - <value>Объединение пользователей в группы.</value> + <value>Сложность и смена паролей, ограничение работы неактивных пользователей.</value> true true @@ -408,8 +467,8 @@ true - ПояснениеИспользоватьГруппыПользователейExtendedTooltip - 2048 + ПояснениеНастройкиВходаРасширеннаяПодсказка + 2146 Label true true @@ -418,8 +477,8 @@ - ПояснениеИспользоватьГруппыПользователейКонтекстноеМеню - 837 + ПояснениеНастройкиВходаКонтекстноеМеню + 2145 true Label @@ -430,6 +489,7 @@ Left + Top true @@ -439,17 +499,13 @@ <key>ru</key> - <value>Группы пользователей</value> + <value>Группа настройки входа</value> - - ru - Группы пользователей - 43 false - ГруппыПользователейРасширеннаяПодсказка - 2046 + ГруппаНастройкиВходаРасширеннаяПодсказка + 2143 Label true true @@ -495,7 +551,6 @@ UsualGroup Auto - NormalSeparation true true Equal @@ -504,53 +559,96 @@ - ПрофилиИГруппыДоступа - 838 + Группа1 + 2174 - ГруппыДоступа - 848 - - ОткрытьГруппыДоступа - 849 + ПрофилиИГруппыДоступа + 838 + + ГруппыДоступа + 848 + + ОткрытьГруппыДоступа + 849 + true + true + + true + + + ОткрытьГруппыДоступаExtendedTooltip + 2052 + Label + true + true + + Left + + + Hyperlink + Catalog.ГруппыДоступа.StandardCommand.OpenList + Normal + Auto + true + true + UserCmds + Auto + + + ПояснениеГруппыДоступа + 850 + + <key>ru</key> + <value>Групповая настройка прав доступа.</value> + + true + true + + true + + + ПояснениеГруппыДоступаExtendedTooltip + 2053 + Label + true + true + + Left + + + + ПояснениеГруппыДоступаКонтекстноеМеню + 851 + true + + Label + true + true + + Style.ПоясняющийТекст + + + Left + + true true true - - ОткрытьГруппыДоступаExtendedTooltip - 2052 - Label - true - true - - Left - - - Hyperlink - Catalog.ГруппыДоступа.StandardCommand.OpenList - Normal - Auto - true - true - UserCmds - Auto - - - ПояснениеГруппыДоступа - 850 <key>ru</key> - <value>Групповая настройка прав доступа.</value> + <value>Группы доступа</value> - true - true - - true - + + ru + Группы доступа + + 43 + false - ПояснениеГруппыДоступаExtendedTooltip - 2053 + ГруппыДоступаРасширеннаяПодсказка + 2051 Label true true @@ -558,19 +656,116 @@ Left - - ПояснениеГруппыДоступаКонтекстноеМеню - 851 - true - - Label - true - true - - Style.ПоясняющийТекст - - - Left + UsualGroup + + Vertical + Auto + true + true + Auto + Auto + + + + ПрофилиГруппДоступа + 844 + + ОткрытьПрофилиГруппДоступа + 845 + true + true + + true + + + ОткрытьПрофилиГруппДоступаExtendedTooltip + 2055 + Label + true + true + + Left + + + Hyperlink + Catalog.ПрофилиГруппДоступа.StandardCommand.OpenList + Normal + Auto + true + true + UserCmds + Auto + + + ПояснениеПрофилиГруппДоступа + 846 + + <key>ru</key> + <value>Шаблоны настроек прав доступа пользователей.</value> + + true + true + + true + + + ПояснениеПрофилиГруппДоступаExtendedTooltip + 2056 + Label + true + true + + Left + + + + ПояснениеПрофилиГруппДоступаКонтекстноеМеню + 847 + true + + Label + true + true + + Style.ПоясняющийТекст + + + Left + + + true + true + + true + + + <key>ru</key> + <value>Профили групп доступа</value> + + + ru + Профили групп доступа + + 43 + false + + ПрофилиГруппДоступаРасширеннаяПодсказка + 2054 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + true + true + Auto + Auto true @@ -580,197 +775,17 @@ <key>ru</key> - <value>Группы доступа</value> + <value> </value> - - ru - Группы доступа - - 43 - false - - ГруппыДоступаРасширеннаяПодсказка - 2051 - Label - true - true - - Left - - - UsualGroup - - Vertical - Auto - true - true - Auto - Auto - - - - ПрофилиГруппДоступа - 844 - - ОткрытьПрофилиГруппДоступа - 845 - true - true - - true - - - ОткрытьПрофилиГруппДоступаExtendedTooltip - 2055 - Label - true - true - - Left - - - Hyperlink - Catalog.ПрофилиГруппДоступа.StandardCommand.OpenList - Normal - Auto - true - true - UserCmds - Auto - - - ПояснениеПрофилиГруппДоступа - 846 - - <key>ru</key> - <value>Шаблоны настроек прав доступа пользователей.</value> - - true - true - - true - - - ПояснениеПрофилиГруппДоступаExtendedTooltip - 2056 - Label - true - true - - Left - - - - ПояснениеПрофилиГруппДоступаКонтекстноеМеню - 847 - true - - Label - true - true - - Style.ПоясняющийТекст - - - Left - - - true - true - - true - - - <key>ru</key> - <value>Профили групп доступа</value> - - - ru - Профили групп доступа - - 43 - false - - ПрофилиГруппДоступаРасширеннаяПодсказка - 2054 - Label - true - true - - Left - - - UsualGroup - - Vertical - Auto - true - true - Auto - Auto - - - true - true - - true - - - <key>ru</key> - <value> </value> - - - ru - - - 86 - false - - ПрофилиИГруппыДоступаРасширеннаяПодсказка - 2049 - Label - true - true - - Left - - - UsualGroup - - Auto - true - true - Equal - Auto - Auto - - - - ГруппаОграничиватьДоступНаУровнеЗаписей - 1881 - - ОграничиватьДоступНаУровнеЗаписей - 701 - true - true - - true - - - НаборКонстант.ОграничиватьДоступНаУровнеЗаписей - - Right ru - - OnChange - ОграничиватьДоступНаУровнеЗаписейПриИзменении - + 86 + false - ОграничиватьДоступНаУровнеЗаписейExtendedTooltip - 2058 + ПрофилиИГруппыДоступаРасширеннаяПодсказка + 2049 Label true true @@ -778,33 +793,117 @@ Left - - ОграничиватьДоступНаУровнеЗаписейКонтекстноеМеню - 702 - true - - CheckBoxField - Auto - true - Left - true - + UsualGroup + + Auto + true + true + Equal + Auto + Auto + - - ПояснениеОграничиватьДоступНаУровнеЗаписей - 839 - - <key>ru</key> - <value>Расширенная настройка, позволяющая максимально гибко настраивать права доступа к справочникам, документам и другим данным программы в предусмотренных разрезах.</value> - + + ГруппаОграничиватьДоступНаУровнеЗаписей + 1881 + + ОграничиватьДоступНаУровнеЗаписей + 701 + true + true + + true + + + НаборКонстант.ОграничиватьДоступНаУровнеЗаписей + + Right + + ru + + + + OnChange + ОграничиватьДоступНаУровнеЗаписейПриИзменении + + + ОграничиватьДоступНаУровнеЗаписейExtendedTooltip + 2058 + Label + true + true + + Left + + + + ОграничиватьДоступНаУровнеЗаписейКонтекстноеМеню + 702 + true + + CheckBoxField + Auto + true + Left + true + + + + ПояснениеОграничиватьДоступНаУровнеЗаписей + 839 + + <key>ru</key> + <value>Расширенная настройка, позволяющая максимально гибко настраивать права доступа к справочникам, документам и другим данным программы в предусмотренных разрезах.</value> + + true + true + + true + + + ПояснениеОграничиватьДоступНаУровнеЗаписейExtendedTooltip + 2059 + Label + true + true + + Left + + + + ПояснениеОграничиватьДоступНаУровнеЗаписейКонтекстноеМеню + 840 + true + + Label + true + true + + Style.ПоясняющийТекст + + + Left + Top + + true true true + + <key>ru</key> + <value>Группа ограничивать доступ на уровне записей</value> + + + ru + Группа ограничивать доступ на уровне записей + + 43 + false - ПояснениеОграничиватьДоступНаУровнеЗаписейExtendedTooltip - 2059 + ГруппаОграничиватьДоступНаУровнеЗаписейExtendedTooltip + 2057 Label true true @@ -812,20 +911,14 @@ Left - - ПояснениеОграничиватьДоступНаУровнеЗаписейКонтекстноеМеню - 840 - true - - Label - true - true - - Style.ПоясняющийТекст - - - Left - Top + UsualGroup + + Vertical + Auto + true + true + Auto + Auto true @@ -833,19 +926,9 @@ true - - <key>ru</key> - <value>Группа ограничивать доступ на уровне записей</value> - - - ru - Группа ограничивать доступ на уровне записей - - 43 - false - ГруппаОграничиватьДоступНаУровнеЗаписейExtendedTooltip - 2057 + Группа1РасширеннаяПодсказка + 2175 Label true true @@ -857,6 +940,7 @@ Vertical Auto + NormalSeparation true true Auto @@ -1205,31 +1289,105 @@ НастройкаВнешнихПользователей 852 - ИспользованиеВнешнихПользователей - 1883 - - ИспользоватьВнешнихПользователей - 699 - - <key>ru</key> - <value>Разрешить доступ внешним пользователям</value> - + ИспользованиеВнешнихПользователейИНастройкиВхода + 2154 + + ИспользованиеВнешнихПользователей + 1883 + + ИспользоватьВнешнихПользователей + 699 + + <key>ru</key> + <value>Разрешить доступ внешним пользователям</value> + + true + true + + true + + + НаборКонстант.ИспользоватьВнешнихПользователей + + Right + + OnChange + ИспользоватьВнешнихПользователейПриИзменении + + + ИспользоватьВнешнихПользователейExtendedTooltip + 2072 + Label + true + true + + Left + + + + ИспользоватьВнешнихПользователейКонтекстноеМеню + 700 + true + + CheckBoxField + Enter + true + Left + true + + + + ПояснениеИспользоватьВнешнихПользователей + 853 + + <key>ru</key> + <value>Предоставление удаленного доступа партнерам к программе.</value> + + true + true + + true + + + ПояснениеИспользоватьВнешнихПользователейExtendedTooltip + 2073 + Label + true + true + + Left + + + + ПояснениеИспользоватьВнешнихПользователейКонтекстноеМеню + 854 + true + + Label + true + true + + Style.ПоясняющийТекст + + + Left + Top + + true true true - - НаборКонстант.ИспользоватьВнешнихПользователей - - Right - - OnChange - ИспользоватьВнешнихПользователейПриИзменении - + + <key>ru</key> + <value>Использование внешних пользователей</value> + + 43 + false - ИспользоватьВнешнихПользователейExtendedTooltip - 2072 + ИспользованиеВнешнихПользователейРасширеннаяПодсказка + 2071 Label true true @@ -1237,33 +1395,263 @@ Left - - ИспользоватьВнешнихПользователейКонтекстноеМеню - 700 - true - - CheckBoxField - Enter - true - Left - true - + UsualGroup + + Vertical + Auto + true + true + Auto + Auto + - - ПояснениеИспользоватьВнешнихПользователей - 853 - - <key>ru</key> - <value>Предоставление удаленного доступа партнерам к программе.</value> - + + ВнешниеПользователиИНастройкиВхода + 2156 + + ГоризонтальныйОтступ2 + 2158 + true + true + + true + + + ГоризонтальныйОтступ2РасширеннаяПодсказка + 2160 + Label + true + true + + Left + + + + ГоризонтальныйОтступ2КонтекстноеМеню + 2159 + true + + Label + true + true + + Left + + + + ВнешниеПользователи + 855 + + ОткрытьВнешниеПользователи + 2031 + true + true + + true + + + ОткрытьВнешниеПользователиРасширеннаяПодсказка + 2075 + Label + true + true + + Left + + + Hyperlink + Form.Command.ВнешниеПользователи + Normal + Auto + true + true + UserCmds + Auto + + + ПояснениеВнешниеПользователи + 857 + + <key>ru</key> + <value>Ведение списка внешних пользователей, которым предоставлен удаленный доступ к программе.</value> + + true + true + + true + + + ПояснениеВнешниеПользователиРасширеннаяПодсказка + 2076 + Label + true + true + + Left + + + + ПояснениеВнешниеПользователиКонтекстноеМеню + 858 + true + + Label + true + true + + Style.ПоясняющийТекст + + + Left + Top + + + true + true + + true + + + <key>ru</key> + <value>Внешние пользователи</value> + + 43 + false + + ВнешниеПользователиРасширеннаяПодсказка + 2074 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + true + true + Auto + Auto + + + + ГруппаНастройкиВходаВнешнихПользователей + 2147 + + НастройкиВходаВнешнихПользователей + 2149 + + <key>ru</key> + <value>Настройки входа</value> + + true + true + + true + + + НастройкиВходаВнешнихПользователейРасширеннаяПодсказка + 2150 + Label + true + true + + Left + + + Hyperlink + Form.Command.НастройкиВходаВнешнихПользователей + Normal + Auto + true + true + UserCmds + Auto + + + ПояснениеНастройкиВходаВнешнихПользователей + 2151 + + <key>ru</key> + <value>Сложность и смена паролей, ограничение работы неактивных внешних пользователей.</value> + + true + true + + true + + + ПояснениеНастройкиВходаВнешнихПользователейРасширеннаяПодсказка + 2153 + Label + true + true + + Left + + + + ПояснениеНастройкиВходаВнешнихПользователейКонтекстноеМеню + 2152 + true + + Label + true + true + + Style.ПоясняющийТекст + + + Left + Top + + + true + true + + true + + + <key>ru</key> + <value>Группа настройки входа внешних пользователей</value> + + 43 + false + + ГруппаНастройкиВходаВнешнихПользователейРасширеннаяПодсказка + 2148 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + true + true + Auto + Auto + + true true true + + <key>ru</key> + <value>Внешние пользователи и настройки входа</value> + - ПояснениеИспользоватьВнешнихПользователейExtendedTooltip - 2073 + ВнешниеПользователиИНастройкиВходаРасширеннаяПодсказка + 2157 Label true true @@ -1271,19 +1659,13 @@ Left - - ПояснениеИспользоватьВнешнихПользователейКонтекстноеМеню - 854 - true - - Label - true - true - - Style.ПоясняющийТекст - - - Left + UsualGroup + + Auto + true + true + Auto + Auto true @@ -1293,119 +1675,13 @@ <key>ru</key> - <value>Использование внешних пользователей</value> + <value>Использование внешних пользователей и настройки входа</value> - - ru - Использование внешних пользователей - - 43 + 86 false - ИспользованиеВнешнихПользователейРасширеннаяПодсказка - 2071 - Label - true - true - - Left - - - UsualGroup - - Vertical - Auto - true - true - Auto - Auto - - - - ВнешниеПользователи - 855 - - ОткрытьВнешниеПользователи - 2031 - true - true - - true - - - ОткрытьВнешниеПользователиРасширеннаяПодсказка - 2075 - Label - true - true - - Left - - - Hyperlink - Form.Command.ВнешниеПользователи - Normal - Auto - true - true - UserCmds - Auto - - - ПояснениеВнешниеПользователи - 857 - - <key>ru</key> - <value>Ведение списка внешних пользователей, которым предоставлен удаленный доступ к программе.</value> - - true - true - - true - - - ПояснениеВнешниеПользователиРасширеннаяПодсказка - 2076 - Label - true - true - - Left - - - - ПояснениеВнешниеПользователиКонтекстноеМеню - 858 - true - - Label - true - true - - Style.ПоясняющийТекст - - - Left - - - true - true - - true - - - <key>ru</key> - <value>Внешние пользователи</value> - - - ru - Внешние пользователи - - 43 - false - - ВнешниеПользователиРасширеннаяПодсказка - 2074 + ИспользованиеВнешнихПользователейИНастройкиВходаРасширеннаяПодсказка + 2155 Label true true @@ -1437,7 +1713,6 @@ Настройка внешних пользователей 86 - false НастройкаВнешнихПользователейРасширеннаяПодсказка 2070 @@ -1449,138 +1724,12 @@ UsualGroup - - Auto - NormalSeparation - true - true - Equal - Auto - Auto - - - - ПубликацияБазы - 2032 - - АдресПубликацииИнформационнойБазыВИнтернете - 2033 - true - true - - true - - - НаборКонстант.АдресПубликацииИнформационнойБазыВИнтернете - - Top - - OnChange - АдресПубликацииИнформационнойБазыВИнтернетеПриИзменении - - - АдресПубликацииИнформационнойБазыВИнтернетеExtendedTooltip - 2078 - Label - true - true - - Left - - - - АдресПубликацииИнформационнойБазыВИнтернетеКонтекстноеМеню - 2034 - true - - InputField - Enter - true - Left - true - - 42 - true - true - false - true - true - true - true - Normal - - - - ПояснениеАдресПубликацииИнформационнойБазыВИнтернете - 2035 - - <key>ru</key> - <value>Используется для формирования ссылок на объекты информационной базы при отправке электронных писем партнерам.</value> - - true - true - - true - - - ПояснениеАдресПубликацииИнформационнойБазыВИнтернетеРасширеннаяПодсказка - 2079 - Label - true - true - - Left - - - - ПояснениеАдресПубликацииИнформационнойБазыВИнтернетеКонтекстноеМеню - 2036 - true - - Label - 43 - true - true - false - - Style.ПоясняющийТекст - - - Left - Top - - - true - true - - true - - - <key>ru</key> - <value>Публикация базы</value> - - - ru - Публикация базы - - 86 - false - - ПубликацияБазыРасширеннаяПодсказка - 2077 - Label - true - true - - Left - - - UsualGroup Vertical Auto true true + Equal Auto Auto @@ -1617,7 +1766,6 @@ Vertical true true - UseIfNecessary auto true @@ -1752,7 +1900,43 @@ СправочникВнешниеПользователи - Auto + DontUse + Auto + + + НастройкиВходаПользователей + + <key>ru</key> + <value>Настройки входа пользователей</value> + + 2 + + true + + + + НастройкиВходаПользователей + + + DontUse + Auto + + + НастройкиВходаВнешнихПользователей + + <key>ru</key> + <value>Настройки входа внешних пользователей</value> + + 3 + + true + + + + НастройкиВходаВнешнихПользователей + + + DontUse Auto diff --git a/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/НастройкиПользователейИПрав/Help/ru.html b/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/НастройкиПользователейИПрав/Help/ru.html index 7ca638bff..54793099f 100644 --- a/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/НастройкиПользователейИПрав/Help/ru.html +++ b/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/НастройкиПользователейИПрав/Help/ru.html @@ -8,6 +8,7 @@ TD {

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

      • Пользователи - администрирование пользователей, которые работают с программой. +
      • Настройки входа - переход к настройкам сложности и смены паролей пользователей. Можно установить сроки действия паролей, а также ограничение работы неактивных пользователей.
      • Группы пользователей - включите флажок, для того чтобы можно было использовать группы для пользователей и внешних пользователей. Один пользователь может быть участником нескольких групп. Права доступа, указанные для группы, назначаются всем ее участникам. Использование групп имеет смысл, если пользователей программы много.
      • Группы доступа - настройка прав доступа и ограничений для пользователей и групп пользователей. Группа доступа определяет совокупность действий с данными программы, которые могут выполнять участники этой группы.
      • Ограничивать доступ на уровне записей - включите этот флажок, для того чтобы максимально гибко настраивать прав доступа пользователей к справочникам, документам и другим данным программы. @@ -17,5 +18,5 @@ TD {
      • Настройки пользователей - просмотр и управление настройками выбранного пользователя.
      • Разрешить доступ внешним пользователям - включите флажок, для того чтобы настраивать доступ внешних пользователей и использовать их в программе.
      • Внешние пользователи - учет пользователей, которые работают с программой "извне". В качестве внешних пользователей программы могут выступать партнеры, респонденты различных опросов, клиенты интернет-магазина и др. Администрирование внешних пользователей выполняется аналогично пользователям программы.
      • -
      • Адрес публикации информационной базы в интернете - адрес информационной базы на веб-сервере. Используется при формировании навигационных ссылок на объекты информационной базы в электронных письмах.

      См. также:

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

      \ No newline at end of file diff --git a/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/НастройкиПользователейИПрав/Module.bsl b/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/НастройкиПользователейИПрав/Module.bsl index 11271776c..590dd17c0 100644 --- a/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/НастройкиПользователейИПрав/Module.bsl +++ b/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/НастройкиПользователейИПрав/Module.bsl @@ -5,56 +5,60 @@ &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) + Если Параметры.Свойство("АвтоТест") Тогда Возврат; КонецЕсли; - // Значения реквизитов формы - РежимРаботы = ОбщегоНазначенияПовтИсп.РежимРаботыПрограммы(); - РежимРаботы = Новый ФиксированнаяСтруктура(РежимРаботы); + // СтандартныеПодсистемы.Пользователи + Если Не Пользователи.ОбщиеНастройкиВходаИспользуются() Тогда + Элементы.ГруппаНастройкиВхода.Видимость = Ложь; + Элементы.ГруппыПользователейИНастройкиВхода.Группировка + = ГруппировкаПодчиненныхЭлементовФормы.Горизонтальная; + Элементы.ГоризонтальныйОтступ2.Видимость = Ложь; + Элементы.ГруппаНастройкиВходаВнешнихПользователей.Видимость = Ложь; + Элементы.ИспользованиеВнешнихПользователейИНастройкиВхода.Группировка + = ГруппировкаПодчиненныхЭлементовФормы.Горизонтальная; + КонецЕсли; - // Настройки видимости при запуске. - Элементы.ГруппаПрименитьНастройки.Видимость = РежимРаботы.ЭтоВебКлиент; + Если ОбщегоНазначенияПовтИсп.РазделениеВключено() + Или СтандартныеПодсистемыСервер.ЭтоБазоваяВерсияКонфигурации() + Или ОбщегоНазначенияПовтИсп.ЭтоАвтономноеРабочееМесто() Тогда + + Элементы.НастройкаВнешнихПользователей.Видимость = Ложь; + КонецЕсли; + + Если СтандартныеПодсистемыСервер.ЭтоБазоваяВерсияКонфигурации() + Или ОбщегоНазначенияПовтИсп.ЭтоАвтономноеРабочееМесто() Тогда + + Элементы.ИспользоватьГруппыПользователей.Доступность = Ложь; + КонецЕсли; + // Конец СтандартныеПодсистемы.Пользователи // СтандартныеПодсистемы.УправлениеДоступом УпрощенныйИнтерфейс = УправлениеДоступомСлужебный.УпрощенныйИнтерфейсНастройкиПравДоступа(); Элементы.ГруппыДоступа.Видимость = НЕ УпрощенныйИнтерфейс; Элементы.ГруппыПользователей.Видимость = НЕ УпрощенныйИнтерфейс; - // Конец СтандартныеПодсистемы.УправлениеДоступом - Если РежимРаботы.МодельСервиса Тогда - // СтандартныеПодсистемы.Взаимодействия - Элементы.АдресПубликацииИнформационнойБазыВИнтернете.Видимость = Ложь; - Элементы.ПояснениеАдресПубликацииИнформационнойБазыВИнтернете.Видимость = Ложь; - // Конец СтандартныеПодсистемы.Взаимодействия - - // СтандартныеПодсистемы.Пользователи - Элементы.НастройкаВнешнихПользователей.Видимость = Ложь; - // Конец СтандартныеПодсистемы.Пользователи + Если ОбщегоНазначенияПовтИсп.ЭтоАвтономноеРабочееМесто() Тогда + Элементы.ОграничиватьДоступНаУровнеЗаписей.Доступность = Ложь; КонецЕсли; + // Конец СтандартныеПодсистемы.УправлениеДоступом // Обновление состояния элементов. УстановитьДоступность(); + КонецПроцедуры &НаКлиенте Процедура ПриЗакрытии() - #Если Не ВебКлиент Тогда ОбновитьИнтерфейсПрограммы(); - #КонецЕсли КонецПроцедуры #КонецОбласти #Область ОбработчикиСобытийЭлементовШапкиФормы -&НаКлиенте -Процедура КакПрименитьНастройкиОбработкаНавигационнойСсылки(Элемент, НавигационнаяСсылка, СтандартнаяОбработка) - СтандартнаяОбработка = Ложь; - ОбновитьИнтерфейс = Истина; - ПодключитьОбработчикОжидания("ОбновитьИнтерфейсПрограммы", 0.1, Истина); -КонецПроцедуры - // СтандартныеПодсистемы.УправлениеДоступом &НаКлиенте Процедура ИспользоватьГруппыПользователейПриИзменении(Элемент) @@ -96,19 +100,42 @@ // СтандартныеПодсистемы.Пользователи &НаКлиенте Процедура ИспользоватьВнешнихПользователейПриИзменении(Элемент) - Подключаемый_ПриИзмененииРеквизита(Элемент); + + Если НаборКонстант.ИспользоватьВнешнихПользователей Тогда + + ТекстВопроса = + НСтр("ru = 'Разрешить доступ внешним пользователям? + | + |При входе в программу список выбора пользователей станет пустым + |(реквизит ""Показывать в списке выбора"" в карточках всех + | пользователей будет очищен и скрыт).'"); + + ПоказатьВопрос( + Новый ОписаниеОповещения( + "ИспользоватьВнешнихПользователейПриИзмененииЗавершение", + ЭтотОбъект, + Элемент), + ТекстВопроса, + РежимДиалогаВопрос.ДаНет); + Иначе + ТекстВопроса = + НСтр("ru = 'Запретить доступ внешним пользователям? + | + |Реквизит ""Вход в программу разрешен"" будет + |очищен в карточках всех внешних пользователей.'"); + + ПоказатьВопрос( + Новый ОписаниеОповещения( + "ИспользоватьВнешнихПользователейПриИзмененииЗавершение", + ЭтотОбъект, + Элемент), + ТекстВопроса, + РежимДиалогаВопрос.ДаНет); + КонецЕсли; + КонецПроцедуры // Конец СтандартныеПодсистемы.Пользователи -// СтандартныеПодсистемы.Взаимодействия -&НаКлиенте -Процедура АдресПубликацииИнформационнойБазыВИнтернетеПриИзменении(Элемент) - - Подключаемый_ПриИзмененииРеквизита(Элемент); - -КонецПроцедуры -// Конец СтандартныеПодсистемы.Взаимодействия - #КонецОбласти #Область ОбработчикиКомандФормы @@ -118,6 +145,23 @@ Процедура СправочникВнешниеПользователи(Команда) ОткрытьФорму("Справочник.ВнешниеПользователи.ФормаСписка", , ЭтотОбъект); КонецПроцедуры + +&НаКлиенте +Процедура НастройкиВходаПользователей(Команда) + + ОткрытьФорму("ОбщаяФорма.НастройкиВходаПользователей", , ЭтотОбъект); + +КонецПроцедуры + +&НаКлиенте +Процедура НастройкиВходаВнешнихПользователей(Команда) + + ПараметрыФормы = Новый Структура; + ПараметрыФормы.Вставить("ПоказатьНастройкиВнешнихПользователей", Истина); + + ОткрытьФорму("ОбщаяФорма.НастройкиВходаПользователей", ПараметрыФормы, ЭтотОбъект); + +КонецПроцедуры // Конец СтандартныеПодсистемы.Пользователи #КонецОбласти @@ -134,9 +178,7 @@ Если ОбновлятьИнтерфейс Тогда ОбновитьИнтерфейс = Истина; - #Если Не ВебКлиент Тогда - ПодключитьОбработчикОжидания("ОбновитьИнтерфейсПрограммы", 1, Истина); - #КонецЕсли + ПодключитьОбработчикОжидания("ОбновитьИнтерфейсПрограммы", 2, Истина); КонецЕсли; СтандартныеПодсистемыКлиент.ПоказатьРезультатВыполнения(ЭтотОбъект, Результат); @@ -166,6 +208,19 @@ КонецПроцедуры // Конец СтандартныеПодсистемы.УправлениеДоступом +// СтандартныеПодсистемы.Пользователи +&НаКлиенте +Процедура ИспользоватьВнешнихПользователейПриИзмененииЗавершение(Ответ, Элемент) Экспорт + + Если Ответ = КодВозвратаДиалога.Нет Тогда + НаборКонстант.ИспользоватьВнешнихПользователей = Ложь; + Иначе + Подключаемый_ПриИзмененииРеквизита(Элемент); + КонецЕсли; + +КонецПроцедуры +// Конец СтандартныеПодсистемы.Пользователи + //////////////////////////////////////////////////////////////////////////////// // Вызов сервера @@ -176,7 +231,15 @@ РеквизитПутьКДанным = Элементы[ИмяЭлемента].ПутьКДанным; - СохранитьЗначениеРеквизита(РеквизитПутьКДанным, Результат); + НачатьТранзакцию(); + Попытка + + СохранитьЗначениеРеквизита(РеквизитПутьКДанным, Результат); + ЗафиксироватьТранзакцию(); + Исключение + ОтменитьТранзакцию(); + ВызватьИсключение; + КонецПопытки; УстановитьДоступность(РеквизитПутьКДанным); @@ -216,7 +279,7 @@ КонстантаМенеджер.Установить(КонстантаЗначение); КонецЕсли; - СтандартныеПодсистемыКлиентСервер.РезультатВыполненияДобавитьОповещениеОткрытыхФорм(Результат, "Запись_НаборКонстант", Новый Структура, КонстантаИмя); + СтандартныеПодсистемыКлиентСервер.ОповеститьОткрытыеФормы(Результат, "Запись_НаборКонстант", Новый Структура, КонстантаИмя); // СтандартныеПодсистемы.ВариантыОтчетов ВариантыОтчетов.ДобавитьОповещениеПриИзмененииЗначенияКонстанты(Результат, КонстантаМенеджер); // Конец СтандартныеПодсистемы.ВариантыОтчетов @@ -229,16 +292,11 @@ // СтандартныеПодсистемы.Пользователи Если РеквизитПутьКДанным = "НаборКонстант.ИспользоватьВнешнихПользователей" ИЛИ РеквизитПутьКДанным = "" Тогда - Элементы.ОткрытьВнешниеПользователи.Доступность = НаборКонстант.ИспользоватьВнешнихПользователей; + Элементы.ОткрытьВнешниеПользователи.Доступность = НаборКонстант.ИспользоватьВнешнихПользователей; + Элементы.НастройкиВходаВнешнихПользователей.Доступность = НаборКонстант.ИспользоватьВнешнихПользователей; КонецЕсли; // Конец СтандартныеПодсистемы.Пользователи - // СтандартныеПодсистемы.Взаимодействия - Если РеквизитПутьКДанным = "НаборКонстант.ИспользоватьВнешнихПользователей" ИЛИ РеквизитПутьКДанным = "" Тогда - ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы, "АдресПубликацииИнформационнойБазыВИнтернете", "Доступность", НаборКонстант.ИспользоватьВнешнихПользователей); - КонецЕсли; - // Конец СтандартныеПодсистемы.Взаимодействия - КонецПроцедуры diff --git a/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/НастройкиРаботыСФайлами/Form.form b/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/НастройкиРаботыСФайлами/Form.form index 43b26017d..aea461284 100644 --- a/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/НастройкиРаботыСФайлами/Form.form +++ b/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/НастройкиРаботыСФайлами/Form.form @@ -171,80 +171,6 @@ Auto
      - - ГруппаПрименитьНастройки - 2096 - - КакПрименитьНастройки - 2098 - - <key>ru</key> - <value>После изменения настроек необходимо переоткрыть все открытые окна или перезайти в программу.</value> - - true - true - - true - - - КакПрименитьНастройкиРасширеннаяПодсказка - 2100 - Label - true - true - - Left - - - - КакПрименитьНастройкиКонтекстноеМеню - 2099 - true - - Label - true - true - - - URLProcessing - КакПрименитьНастройкиОбработкаНавигационнойСсылки - - Left - - - true - true - - true - - - <key>ru</key> - <value>Группа применить настройки</value> - - - ru - Группа применить настройки - - - ГруппаПрименитьНастройкиРасширеннаяПодсказка - 2097 - Label - true - true - - Left - - - UsualGroup - - Vertical - Auto - true - true - Auto - Auto - - ГруппаУправлениеТомамиФайлов 1403 @@ -693,29 +619,111 @@ - ГруппаМаксимальныйРазмерФайлаОбластиДанных - 1412 + ГруппаУправлениеФайлами + 2101 - ГруппаРазмер - 713 - - МаксимальныйРазмерФайлаОбластиДанных - 714 + ГруппаМаксимальныйРазмерФайлаОбластиДанных + 1412 + + ГруппаРазмер + 713 + + МаксимальныйРазмерФайлаОбластиДанных + 714 + true + true + + true + + + МаксимальныйРазмерФайлаОбластиДанных + + + OnChange + МаксимальныйРазмерФайлаОбластиДанныхПриИзменении + + + МаксимальныйРазмерФайлаОбластиДанныхExtendedTooltip + 2063 + Label + true + true + + Left + + + + МаксимальныйРазмерФайлаОбластиДанныхКонтекстноеМеню + 715 + true + + InputField + Auto + true + Left + true + + 5 + true + true + true + true + true + true + Normal + + + + ДекорацияМб + 716 + + <key>ru</key> + <value>Мбайт</value> + + true + true + + true + + + ДекорацияМбExtendedTooltip + 2064 + Label + true + true + + Left + + + + ДекорацияМбКонтекстноеМеню + 717 + true + + Label + true + true + false + + Left + + true true true - - МаксимальныйРазмерФайлаОбластиДанных - - - OnChange - МаксимальныйРазмерФайлаОбластиДанныхПриИзменении - + + <key>ru</key> + <value>Группа размер</value> + + + ru + Группа размер + - МаксимальныйРазмерФайлаОбластиДанныхExtendedTooltip - 2063 + ГруппаРазмерExtendedTooltip + 2062 Label true true @@ -723,33 +731,21 @@ Left - - МаксимальныйРазмерФайлаОбластиДанныхКонтекстноеМеню - 715 - true - - InputField - Auto - true - Left - true - - 5 - true - true - true - true - true - true - Normal + UsualGroup + + Auto + true + true + Auto + Auto - ДекорацияМб - 716 + ПояснениеМаксимальныйРазмерФайлаОбластиДанных + 1413 <key>ru</key> - <value>Мбайт</value> + <value>Ограничение загрузки файлов, превышающих указанный размер.</value> true true @@ -757,8 +753,8 @@ true - ДекорацияМбExtendedTooltip - 2064 + ПояснениеМаксимальныйРазмерФайлаОбластиДанныхExtendedTooltip + 2065 Label true true @@ -767,14 +763,16 @@ - ДекорацияМбКонтекстноеМеню - 717 + ПояснениеМаксимальныйРазмерФайлаОбластиДанныхКонтекстноеМеню + 1414 true Label true true - false + + Style.ПоясняющийТекст + Left @@ -786,15 +784,17 @@ <key>ru</key> - <value>Группа размер</value> + <value>Группа максимальный размер файла области данных</value> ru - Группа размер + Группа максимальный размер файла области данных + 43 + false - ГруппаРазмерExtendedTooltip - 2062 + ГруппаМаксимальныйРазмерФайлаОбластиДанныхExtendedTooltip + 2061 Label true true @@ -804,28 +804,98 @@ UsualGroup + Vertical Auto + NormalSeparation true true Auto Auto - - ПояснениеМаксимальныйРазмерФайлаОбластиДанных - 1413 - - <key>ru</key> - <value>Ограничение загрузки файлов, превышающих указанный размер.</value> - + + ГруппаНастройкаОчисткиФайлов + 2105 + + НастройкаОчисткиФайлов + 2103 + true + true + + true + + + НастройкаОчисткиФайловРасширеннаяПодсказка + 2104 + Label + true + true + + Left + + + Hyperlink + Form.Command.НастройкаОчисткиФайлов + Normal + Auto + true + true + UserCmds + Auto + + + ПояснениеНастройкаОчисткиФайлов + 2107 + + <key>ru</key> + <value>Настройка правил очистки файлов.</value> + + true + true + + true + + + ПояснениеНастройкаОчисткиФайловРасширеннаяПодсказка + 2109 + Label + true + true + + Left + + + + ПояснениеНастройкаОчисткиФайловКонтекстноеМеню + 2108 + true + + Label + true + true + + Style.ПоясняющийТекст + + + Left + + true true true + + <key>ru</key> + <value>Группа настройка очистки файлов</value> + + + ru + Группа настройка очистки файлов + - ПояснениеМаксимальныйРазмерФайлаОбластиДанныхExtendedTooltip - 2065 + ГруппаНастройкаОчисткиФайловРасширеннаяПодсказка + 2106 Label true true @@ -833,19 +903,14 @@ Left - - ПояснениеМаксимальныйРазмерФайлаОбластиДанныхКонтекстноеМеню - 1414 - true - - Label - true - true - - Style.ПоясняющийТекст - - - Left + UsualGroup + + Vertical + Auto + true + true + Auto + Auto true @@ -855,17 +920,15 @@ <key>ru</key> - <value>Группа максимальный размер файла области данных</value> + <value>Группа управление файлами</value> ru - Группа максимальный размер файла области данных + Группа управление файлами - 43 - false - ГруппаМаксимальныйРазмерФайлаОбластиДанныхExtendedTooltip - 2061 + ГруппаУправлениеФайламиРасширеннаяПодсказка + 2102 Label true true @@ -875,9 +938,7 @@ UsualGroup - Vertical Auto - NormalSeparation true true Auto @@ -1719,7 +1780,6 @@ Vertical true true - UseIfNecessary auto true @@ -1901,7 +1961,29 @@ СправочникТомаХраненияФайлов - Auto + DontUse + Auto + + + НастройкаОчисткиФайлов + + <key>ru</key> + <value>Настройка очистки файлов</value> + + 1 + + ru + Настройка очистки файлов + + + true + + + + НастройкаОчисткиФайлов + + + DontUse Auto diff --git a/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/НастройкиРаботыСФайлами/Help/ru.html b/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/НастройкиРаботыСФайлами/Help/ru.html index 33f275c83..946dbe297 100644 --- a/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/НастройкиРаботыСФайлами/Help/ru.html +++ b/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/НастройкиРаботыСФайлами/Help/ru.html @@ -12,5 +12,6 @@ TD {
    • Запретить загрузку файлов с расширениями - включите флажок, для того чтобы запретить загрузку в программу файлов с указанными расширениями и укажите запрещенные к загрузке расширения файлов в поле ввода через пробел.
    • Максимальный размер файла - введите ограничение загрузки в программу файлов, превышающих указанный размер. По умолчанию указан размер 50 Мб. Файлы большего размера не будут загружаться в программу. Если максимальный размер равен нулю, то объем файлов не ограничен.
    • Расширения файлов ODF - можно указать расширения файлов открытого формата документов для офисных приложений, текст из которых также будет извлекаться для построения индекса полнотекстового поиска. Расширения указываются через пробел. По умолчанию список заполнен основными расширениями файлов. Указывать или уточнять список расширений файлов открытого формата документов нужно при использовании операционных систем фирмы Microsoft, если для программы OpenOffice не установлено расширение IFilter. -
    • Расширения текстовых файлов - введите расширения файлов, содержащих текстовые данные. Расширения указываются через пробел.
    • См. также:

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

      \ No newline at end of file diff --git a/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/НастройкиРаботыСФайлами/Module.bsl b/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/НастройкиРаботыСФайлами/Module.bsl index 5af6d84ff..54b29c9bd 100644 --- a/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/НастройкиРаботыСФайлами/Module.bsl +++ b/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/НастройкиРаботыСФайлами/Module.bsl @@ -21,9 +21,6 @@ КонецЕсли; // Конец СтандартныеПодсистемы.ФайловыеФункции - // Настройки видимости при запуске. - Элементы.ГруппаПрименитьНастройки.Видимость = РежимРаботы.ЭтоВебКлиент; - // СтандартныеПодсистемы.ФайловыеФункции Элементы.ГруппаХранитьФайлыВТомахНаДиске.Видимость = РежимРаботы.ЭтоАдминистраторСистемы; Элементы.ГруппаСправочникТомаХраненияФайлов.Видимость = РежимРаботы.ЭтоАдминистраторСистемы; @@ -36,22 +33,13 @@ &НаКлиенте Процедура ПриЗакрытии() - #Если Не ВебКлиент Тогда ОбновитьИнтерфейсПрограммы(); - #КонецЕсли КонецПроцедуры #КонецОбласти #Область ОбработчикиСобытийЭлементовШапкиФормы -&НаКлиенте -Процедура КакПрименитьНастройкиОбработкаНавигационнойСсылки(Элемент, НавигационнаяСсылка, СтандартнаяОбработка) - СтандартнаяОбработка = Ложь; - ОбновитьИнтерфейс = Истина; - ПодключитьОбработчикОжидания("ОбновитьИнтерфейсПрограммы", 0.1, Истина); -КонецПроцедуры - // СтандартныеПодсистемы.ФайловыеФункции &НаКлиенте Процедура ХранитьФайлыВТомахНаДискеПриИзменении(Элемент) @@ -85,6 +73,11 @@ &НаКлиенте Процедура МаксимальныйРазмерФайлаОбластиДанныхПриИзменении(Элемент) + Если МаксимальныйРазмерФайлаОбластиДанных = 0 Тогда + ТекстСообщения = НСтр("ru = 'Поле ""Максимальный размер файла"" не заполнено.'"); + ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстСообщения, ,"МаксимальныйРазмерФайлаОбластиДанных"); + Возврат; + КонецЕсли; Подключаемый_ПриИзмененииРеквизита(Элемент); КонецПроцедуры @@ -105,6 +98,11 @@ // СтандартныеПодсистемы.ФайловыеФункции &НаКлиенте Процедура МаксимальныйРазмерФайлаПриИзменении(Элемент) + Если МаксимальныйРазмерФайла = 0 Тогда + ТекстСообщения = НСтр("ru = 'Поле ""Максимальный размер файла"" не заполнено.'"); + ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстСообщения, ,"МаксимальныйРазмерФайла"); + Возврат; + КонецЕсли; Подключаемый_ПриИзмененииРеквизита(Элемент); КонецПроцедуры @@ -128,6 +126,12 @@ Процедура СправочникТомаХраненияФайлов(Команда) ОткрытьФорму("Справочник.ТомаХраненияФайлов.ФормаСписка", , ЭтотОбъект); КонецПроцедуры + +&НаКлиенте +Процедура НастройкаОчисткиФайлов(Команда) + ОткрытьФорму("РегистрСведений.НастройкиОчисткиФайлов.ФормаСписка", , ЭтотОбъект); +КонецПроцедуры + // Конец СтандартныеПодсистемы.ФайловыеФункции #КонецОбласти @@ -174,9 +178,7 @@ Если ОбновлятьИнтерфейс Тогда ОбновитьИнтерфейс = Истина; - #Если Не ВебКлиент Тогда - ПодключитьОбработчикОжидания("ОбновитьИнтерфейсПрограммы", 1, Истина); - #КонецЕсли + ПодключитьОбработчикОжидания("ОбновитьИнтерфейсПрограммы", 2, Истина); КонецЕсли; СтандартныеПодсистемыКлиент.ПоказатьРезультатВыполнения(ЭтотОбъект, Результат); @@ -253,7 +255,7 @@ КонстантаМенеджер.Установить(КонстантаЗначение); КонецЕсли; - СтандартныеПодсистемыКлиентСервер.РезультатВыполненияДобавитьОповещениеОткрытыхФорм(Результат, "Запись_НаборКонстант", Новый Структура, КонстантаИмя); + СтандартныеПодсистемыКлиентСервер.ОповеститьОткрытыеФормы(Результат, "Запись_НаборКонстант", Новый Структура, КонстантаИмя); // СтандартныеПодсистемы.ВариантыОтчетов ВариантыОтчетов.ДобавитьОповещениеПриИзмененииЗначенияКонстанты(Результат, КонстантаМенеджер); // Конец СтандартныеПодсистемы.ВариантыОтчетов diff --git a/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/НастройкиСинхронизацииДанных/Form.form b/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/НастройкиСинхронизацииДанных/Form.form index 4e4acc513..105446af4 100644 --- a/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/НастройкиСинхронизацииДанных/Form.form +++ b/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/НастройкиСинхронизацииДанных/Form.form @@ -172,80 +172,6 @@ Auto
      - - ГруппаПрименитьНастройки - 2051 - - КакПрименитьНастройки - 2053 - - <key>ru</key> - <value>После изменения настроек необходимо переоткрыть все открытые окна или перезайти в программу.</value> - - true - true - - true - - - КакПрименитьНастройкиРасширеннаяПодсказка - 2055 - Label - true - true - - Left - - - - КакПрименитьНастройкиКонтекстноеМеню - 2054 - true - - Label - true - true - - - URLProcessing - КакПрименитьНастройкиОбработкаНавигационнойСсылки - - Left - - - true - true - - true - - - <key>ru</key> - <value>Группа применить настройки</value> - - - ru - Группа применить настройки - - - ГруппаПрименитьНастройкиРасширеннаяПодсказка - 2052 - Label - true - true - - Left - - - UsualGroup - - Vertical - Auto - true - true - Auto - Auto - - Группа4 1217 @@ -491,6 +417,224 @@ UsualGroup + + Auto + true + true + Equal + Auto + Auto + + + + ГруппаДатыЗапретаЗагрузки + 2051 + + ГруппаДатыЗапретаЗагрузкиИспользование + 2053 + + ИспользоватьДатыЗапретаЗагрузки + 2055 + + <key>ru</key> + <value>Даты запрета загрузки</value> + + true + true + + true + + + НаборКонстант.ИспользоватьДатыЗапретаЗагрузки + + Right + + OnChange + Подключаемый_ПриИзмененииРеквизита + + + ИспользоватьДатыЗапретаЗагрузкиРасширеннаяПодсказка + 2057 + Label + true + true + + Left + + + + ИспользоватьДатыЗапретаЗагрузкиКонтекстноеМеню + 2056 + true + + CheckBoxField + Enter + true + Left + true + + + + ИспользоватьДатыЗапретаЗагрузкиПояснение + 2058 + + <key>ru</key> + <value>Запрет загрузки данных прошлых периодов из других программ. +Не влияет на распределенные информационные базы.</value> + + true + true + + true + + + ИспользоватьДатыЗапретаЗагрузкиПояснениеРасширеннаяПодсказка + 2060 + Label + true + true + + Left + + + + ИспользоватьДатыЗапретаЗагрузкиПояснениеКонтекстноеМеню + 2059 + true + + Label + true + true + + Style.ПоясняющийТекст + + + Left + + + true + true + + true + + + <key>ru</key> + <value>Группа даты запрета загрузки использование</value> + + 43 + false + + ГруппаДатыЗапретаЗагрузкиИспользованиеРасширеннаяПодсказка + 2054 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + true + true + Auto + Auto + + + + ГруппаДатыЗапретаЗагрузкиНастройка + 2061 + + ДатыЗапретаЗагрузкиНастроить + 2063 + + <key>ru</key> + <value>Настроить</value> + + true + true + + true + + + ДатыЗапретаЗагрузкиНастроитьРасширеннаяПодсказка + 2064 + Label + true + true + + Left + + + Hyperlink + Form.Command.РегистрСведенийДатыЗапретаЗагрузкиДанных + Normal + Auto + true + true + UserCmds + None + Auto + + true + true + + true + + + <key>ru</key> + <value>Группа даты запрета загрузки настройка</value> + + 43 + false + + ГруппаДатыЗапретаЗагрузкиНастройкаРасширеннаяПодсказка + 2062 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + true + true + Auto + Auto + + + true + true + + true + + + <key>ru</key> + <value>Группа даты запрета загрузки</value> + + + ru + + + 86 + false + + ГруппаДатыЗапретаЗагрузкиРасширеннаяПодсказка + 2052 + Label + true + true + + Left + + + UsualGroup Auto NormalSeparation @@ -584,6 +728,8 @@ ru Группа результатов синхронизации данных + 43 + false ГруппаРезультатовСинхронизацииДанныхExtendedTooltip 2026 @@ -604,106 +750,6 @@ Auto - - ГруппаДатыЗапретаЗагрузкиДанных - 1624 - - ДатыЗапретаЗагрузкиДанных - 1623 - true - true - - true - - - ДатыЗапретаЗагрузкиДанныхExtendedTooltip - 2030 - Label - true - true - - Left - - - Hyperlink - Form.Command.РегистрСведенийДатыЗапретаЗагрузкиДанных - Normal - Auto - true - true - UserCmds - Auto - - - ПояснениеОткрытьДатыЗапретаЗагрузкиДанных - 1625 - - <key>ru</key> - <value>Запрет загрузки данных прошлых периодов из других программ.</value> - - true - true - - true - - - ПояснениеОткрытьДатыЗапретаЗагрузкиДанныхExtendedTooltip - 2031 - Label - true - true - - Left - - - - ПояснениеОткрытьДатыЗапретаЗагрузкиДанныхКонтекстноеМеню - 1626 - true - - Label - true - true - - Style.ПоясняющийТекст - - - Left - - - true - true - - true - - - <key>ru</key> - <value>Группа даты запрета загрузки данных</value> - - - ru - Группа даты запрета загрузки данных - - - ГруппаДатыЗапретаЗагрузкиДанныхExtendedTooltip - 2029 - Label - true - true - - Left - - - UsualGroup - - Vertical - Auto - true - true - Auto - Auto - - true true @@ -1138,7 +1184,6 @@ Vertical true true - UseIfNecessary auto true @@ -1273,7 +1318,7 @@ НастройкиСинхронизацииДанных - Auto + DontUse Auto @@ -1295,7 +1340,7 @@ РегистрСведенийДатыЗапретаЗагрузкиДанных - Auto + DontUse Auto @@ -1317,7 +1362,7 @@ РезультатыСинхронизацииДанных - Auto + DontUse Auto diff --git a/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/НастройкиСинхронизацииДанных/Help/ru.html b/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/НастройкиСинхронизацииДанных/Help/ru.html index 09852112c..75dce9d36 100644 --- a/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/НастройкиСинхронизацииДанных/Help/ru.html +++ b/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/НастройкиСинхронизацииДанных/Help/ru.html @@ -7,11 +7,13 @@ TD {

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

      Каталог временных файлов кластера серверов 1С:Предприятие

      См. также:

      \ No newline at end of file diff --git a/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/Органайзер/Module.bsl b/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/Органайзер/Module.bsl index 82362a2c4..22098bb3e 100644 --- a/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/Органайзер/Module.bsl +++ b/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/Органайзер/Module.bsl @@ -13,44 +13,57 @@ РежимРаботы = ОбщегоНазначенияПовтИсп.РежимРаботыПрограммы(); РежимРаботы = Новый ФиксированнаяСтруктура(РежимРаботы); - // Настройки видимости при запуске. - Элементы.ГруппаПрименитьНастройки.Видимость = РежимРаботы.ЭтоВебКлиент; - // СтандартныеПодсистемы.Взаимодействия Если РежимРаботы.МодельСервиса Тогда - Элементы.ИспользоватьПочтовыйКлиент.Видимость = Ложь; - Элементы.ПояснениеИспользоватьПочтовыйКлиент.Видимость = Ложь; - Элементы.ОтправлятьПисьмаВФорматеHTML.Видимость = Ложь; - Элементы.ПояснениеОтправлятьПисьмаВФорматеHTML.Видимость = Ложь; - Элементы.ИспользоватьПрочиеВзаимодействия.Видимость = Ложь; - Элементы.ПояснениеИспользоватьПрочиеВзаимодействия.Видимость = Ложь; - Элементы.ИспользоватьПризнакРассмотрено.Видимость = Ложь; - Элементы.ПояснениеИспользоватьПризнакРассмотрено.Видимость = Ложь; + Элементы.ИспользоватьПочтовыйКлиент.Видимость = Ложь; + Элементы.ПояснениеИспользоватьПочтовыйКлиент.Видимость = Ложь; + Элементы.ОтправлятьПисьмаВФорматеHTML.Видимость = Ложь; + Элементы.ПояснениеОтправлятьПисьмаВФорматеHTML.Видимость = Ложь; + Элементы.ИспользоватьПрочиеВзаимодействия.Видимость = Ложь; + Элементы.ПояснениеИспользоватьПрочиеВзаимодействия.Видимость = Ложь; + Элементы.ИспользоватьПризнакРассмотрено.Видимость = Ложь; + Элементы.ПояснениеИспользоватьПризнакРассмотрено.Видимость = Ложь; + Элементы.АдресПубликацииИнформационнойБазыВИнтернете.Видимость = Ложь; + Элементы.ПояснениеАдресПубликацииИнформационнойБазыВИнтернете.Видимость = Ложь; КонецЕсли; // Конец СтандартныеПодсистемы.Взаимодействия + // СтандартныеПодсистемы.БизнесПроцессыИЗадачи + Если Не РежимРаботы.МодельСервиса И РежимРаботы.ЭтоАдминистраторСистемы Тогда + ЕстьПочта = ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаСПочтовымиСообщениями"); + РегламентноеЗадание = НайтиРегламентноеЗадание("МониторингЗадач"); + Если ЕстьПочта И РегламентноеЗадание <> Неопределено Тогда + МониторингЗадачИспользование = РегламентноеЗадание.Использование; + МониторингЗадачРасписание = РегламентноеЗадание.Расписание; + Иначе + Элементы.ГруппаМониторингЗадач.Видимость = Ложь; + КонецЕсли; + РегламентноеЗадание = НайтиРегламентноеЗадание("УведомлениеИсполнителейОНовыхЗадачах"); + Если ЕстьПочта И РегламентноеЗадание <> Неопределено Тогда + УведомлениеИсполнителейОНовыхЗадачахИспользование = РегламентноеЗадание.Использование; + УведомлениеИсполнителейОНовыхЗадачахРасписание = РегламентноеЗадание.Расписание; + Иначе + Элементы.ГруппаУведомлениеИсполнителейОНовыхЗадачах.Видимость = Ложь; + КонецЕсли; + Иначе + Элементы.ГруппаМониторингЗадач.Видимость = Ложь; + Элементы.ГруппаУведомлениеИсполнителейОНовыхЗадачах.Видимость = Ложь; + КонецЕсли; + // Конец СтандартныеПодсистемы.БизнесПроцессыИЗадачи + // Обновление состояния элементов. УстановитьДоступность(); КонецПроцедуры &НаКлиенте Процедура ПриЗакрытии() - #Если Не ВебКлиент Тогда ОбновитьИнтерфейсПрограммы(); - #КонецЕсли КонецПроцедуры #КонецОбласти #Область ОбработчикиСобытийЭлементовШапкиФормы -&НаКлиенте -Процедура КакПрименитьНастройкиОбработкаНавигационнойСсылки(Элемент, НавигационнаяСсылка, СтандартнаяОбработка) - СтандартнаяОбработка = Ложь; - ОбновитьИнтерфейс = Истина; - ПодключитьОбработчикОжидания("ОбновитьИнтерфейсПрограммы", 0.1, Истина); -КонецПроцедуры - // СтандартныеПодсистемы.Взаимодействия &НаКлиенте Процедура ИспользоватьПочтовыйКлиентПриИзменении(Элемент) @@ -71,6 +84,44 @@ Процедура ИспользоватьПризнакРассмотреноПриИзменении(Элемент) Подключаемый_ПриИзмененииРеквизита(Элемент); КонецПроцедуры + +&НаКлиенте +Процедура АдресПубликацииИнформационнойБазыВИнтернетеПриИзменении(Элемент) + + Подключаемый_ПриИзмененииРеквизита(Элемент); + +КонецПроцедуры + +&НаКлиенте +Процедура АдресПубликацииИнформационнойБазыВИнтернетеНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка) + + СтандартнаяОбработка = Ложь; + ПодключитьОбработчикОжидания("АдресПубликацииИнформационнойБазыВИнтернетеНачалоВыбораЗавершение", 0.1, Истина); + +КонецПроцедуры + +&НаКлиенте +Процедура АдресПубликацииИнформационнойБазыВИнтернетеНачалоВыбораЗавершение() + + Если ОбщегоНазначенияКлиентСервер.КлиентПодключенЧерезВебСервер() Тогда + АдресПубликацииИнформационнойБазыВИнтернетеНачалоВыбораНаСервере(СтрокаСоединенияИнформационнойБазы()); + Подключаемый_ПриИзмененииРеквизита(Элементы.АдресПубликацииИнформационнойБазыВИнтернете); + Иначе + ПоказатьПредупреждение(, НСтр("ru = 'Не удалось автоматически заполнить поле, т.к. клиентское приложение не подключено через веб-сервер.'")); + КонецЕсли; + +КонецПроцедуры + +&НаСервере +Процедура АдресПубликацииИнформационнойБазыВИнтернетеНачалоВыбораНаСервере(СтрокаСоединения) + + ПараметрыСоединения = СтроковыеФункцииКлиентСервер.ПолучитьПараметрыИзСтроки(СтрокаСоединения); + Если ПараметрыСоединения.Свойство("WS") Тогда + НаборКонстант.АдресПубликацииИнформационнойБазыВИнтернете = ПараметрыСоединения.WS; + КонецЕсли; + +КонецПроцедуры + // Конец СтандартныеПодсистемы.Взаимодействия // СтандартныеПодсистемы.ЗаметкиПользователя @@ -129,9 +180,22 @@ &НаКлиенте Процедура ОткрытьРолиИИсполнителиБизнесПроцессов(Команда) - ОткрытьФорму("РегистрСведений.ИсполнителиЗадач.Форма.АдресацияПоОбъекту",,ЭтотОбъект); + ОткрытьФорму("РегистрСведений.ИсполнителиЗадач.Форма.РолиИИсполнителиЗадач",,ЭтотОбъект); КонецПроцедуры + +&НаКлиенте +Процедура МониторингЗадачНастроитьРасписание(Команда) + Диалог = Новый ДиалогРасписанияРегламентногоЗадания(МониторингЗадачРасписание); + Диалог.Показать(Новый ОписаниеОповещения("МониторингЗадачПослеИзмененияРасписания", ЭтотОбъект)); +КонецПроцедуры + +&НаКлиенте +Процедура УведомлениеИсполнителейОНовыхЗадачахНастроитьРасписание(Команда) + Диалог = Новый ДиалогРасписанияРегламентногоЗадания(УведомлениеИсполнителейОНовыхЗадачахРасписание); + Диалог.Показать(Новый ОписаниеОповещения("УведомлениеИсполнителейОНовыхЗадачахПослеИзмененияРасписания", ЭтотОбъект)); +КонецПроцедуры + // Конец СтандартныеПодсистемы.БизнесПроцессыИЗадачи #КонецОбласти @@ -148,9 +212,7 @@ Если ОбновлятьИнтерфейс Тогда ОбновитьИнтерфейс = Истина; - #Если Не ВебКлиент Тогда ПодключитьОбработчикОжидания("ОбновитьИнтерфейсПрограммы", 1, Истина); - #КонецЕсли КонецЕсли; СтандартныеПодсистемыКлиент.ПоказатьРезультатВыполнения(ЭтотОбъект, Результат); @@ -167,8 +229,47 @@ КонецПроцедуры +// СтандартныеПодсистемы.БизнесПроцессыИЗадачи +&НаКлиенте +Процедура МониторингЗадачПослеИзмененияРасписания(Расписание, ПараметрыВыполнения) Экспорт + Если Расписание = Неопределено Тогда + Возврат; + КонецЕсли; + + МониторингЗадачРасписание = Расписание; + МониторингЗадачИспользование = Истина; + ЗаписатьРегламентноеЗадание("МониторингЗадач", МониторингЗадачИспользование, + МониторингЗадачРасписание, "МониторингЗадачРасписание"); +КонецПроцедуры + +&НаКлиенте +Процедура МониторингЗадачИспользованиеПриИзменении(Элемент) + ЗаписатьРегламентноеЗадание("МониторингЗадач", МониторингЗадачИспользование, + МониторингЗадачРасписание, "МониторингЗадачРасписание"); +КонецПроцедуры + +&НаКлиенте +Процедура УведомлениеИсполнителейОНовыхЗадачахПослеИзмененияРасписания(Расписание, ПараметрыВыполнения) Экспорт + Если Расписание = Неопределено Тогда + Возврат; + КонецЕсли; + + УведомлениеИсполнителейОНовыхЗадачахРасписание = Расписание; + УведомлениеИсполнителейОНовыхЗадачахИспользование = Истина; + ЗаписатьРегламентноеЗадание("УведомлениеИсполнителейОНовыхЗадачах", УведомлениеИсполнителейОНовыхЗадачахИспользование, + УведомлениеИсполнителейОНовыхЗадачахРасписание, "УведомлениеИсполнителейОНовыхЗадачахРасписание"); +КонецПроцедуры + +&НаКлиенте +Процедура УведомлениеИсполнителейОНовыхЗадачахИспользованиеПриИзменении(Элемент) + ЗаписатьРегламентноеЗадание("УведомлениеИсполнителейОНовыхЗадачах", УведомлениеИсполнителейОНовыхЗадачахИспользование, + УведомлениеИсполнителейОНовыхЗадачахРасписание, "УведомлениеИсполнителейОНовыхЗадачахРасписание"); +КонецПроцедуры + +// Конец СтандартныеПодсистемы.БизнесПроцессыИЗадачи + //////////////////////////////////////////////////////////////////////////////// -// Вызов сервера +// Сервер &НаСервере Функция ПриИзмененииРеквизитаСервер(ИмяЭлемента) @@ -187,9 +288,6 @@ КонецФункции -//////////////////////////////////////////////////////////////////////////////// -// Сервер - &НаСервере Процедура СохранитьЗначениеРеквизита(РеквизитПутьКДанным, Результат) @@ -221,7 +319,7 @@ ЭтотОбъект.Прочитать(); КонецЕсли; - СтандартныеПодсистемыКлиентСервер.РезультатВыполненияДобавитьОповещениеОткрытыхФорм(Результат, "Запись_НаборКонстант", Новый Структура, КонстантаИмя); + СтандартныеПодсистемыКлиентСервер.ОповеститьОткрытыеФормы(Результат, "Запись_НаборКонстант", Новый Структура, КонстантаИмя); // СтандартныеПодсистемы.ВариантыОтчетов ВариантыОтчетов.ДобавитьОповещениеПриИзмененииЗначенияКонстанты(Результат, КонстантаМенеджер); // Конец СтандартныеПодсистемы.ВариантыОтчетов @@ -235,9 +333,10 @@ // СтандартныеПодсистемы.Взаимодействия Если РеквизитПутьКДанным = "НаборКонстант.ИспользоватьПочтовыйКлиент" ИЛИ РеквизитПутьКДанным = "" Тогда - Элементы.ИспользоватьПрочиеВзаимодействия.Доступность = НаборКонстант.ИспользоватьПочтовыйКлиент; - Элементы.ИспользоватьПризнакРассмотрено.Доступность = НаборКонстант.ИспользоватьПочтовыйКлиент; - Элементы.ОтправлятьПисьмаВФорматеHTML.Доступность = НаборКонстант.ИспользоватьПочтовыйКлиент; + Элементы.ИспользоватьПрочиеВзаимодействия.Доступность = НаборКонстант.ИспользоватьПочтовыйКлиент; + Элементы.ИспользоватьПризнакРассмотрено.Доступность = НаборКонстант.ИспользоватьПочтовыйКлиент; + Элементы.ОтправлятьПисьмаВФорматеHTML.Доступность = НаборКонстант.ИспользоватьПочтовыйКлиент; + Элементы.АдресПубликацииИнформационнойБазыВИнтернете.Доступность = НаборКонстант.ИспользоватьПочтовыйКлиент КонецЕсли; // Конец СтандартныеПодсистемы.Взаимодействия @@ -250,10 +349,55 @@ Элементы.ИзменятьЗаданияЗаднимЧислом.Доступность = НаборКонстант.ИспользоватьБизнесПроцессыИЗадачи; Элементы.ИспользоватьДатуНачалаЗадач.Доступность = НаборКонстант.ИспользоватьБизнесПроцессыИЗадачи; Элементы.ИспользоватьДатуИВремяВСрокахЗадач.Доступность = НаборКонстант.ИспользоватьБизнесПроцессыИЗадачи; + Элементы.ГруппаМониторингЗадач.Доступность = НаборКонстант.ИспользоватьБизнесПроцессыИЗадачи; + Элементы.ГруппаУведомлениеИсполнителейОНовыхЗадачах.Доступность = НаборКонстант.ИспользоватьБизнесПроцессыИЗадачи; КонецЕсли; + + Если Элементы.ГруппаМониторингЗадач.Видимость + И (РеквизитПутьКДанным = "МониторингЗадачРасписание" Или РеквизитПутьКДанным = "") Тогда + Элементы.МониторингЗадачНастроитьРасписание.Доступность = МониторингЗадачИспользование; + Если МониторингЗадачИспользование Тогда + РасписаниеПредставление = Строка(МониторингЗадачРасписание); + Представление = ВРег(Лев(РасписаниеПредставление, 1)) + Сред(РасписаниеПредставление, 2); + Иначе + Представление = ""; + КонецЕсли; + Элементы.МониторингЗадачПояснение.Заголовок = Представление; + КонецЕсли; + + Если Элементы.ГруппаУведомлениеИсполнителейОНовыхЗадачах.Видимость + И (РеквизитПутьКДанным = "УведомлениеИсполнителейОНовыхЗадачахРасписание" Или РеквизитПутьКДанным = "") Тогда + Элементы.УведомлениеИсполнителейОНовыхЗадачахНастроитьРасписание.Доступность = УведомлениеИсполнителейОНовыхЗадачахИспользование; + Если УведомлениеИсполнителейОНовыхЗадачахИспользование Тогда + РасписаниеПредставление = Строка(УведомлениеИсполнителейОНовыхЗадачахРасписание); + Представление = ВРег(Лев(РасписаниеПредставление, 1)) + Сред(РасписаниеПредставление, 2); + Иначе + Представление = ""; + КонецЕсли; + Элементы.УведомлениеИсполнителейОНовыхЗадачахПояснение.Заголовок = Представление; + КонецЕсли; // Конец СтандартныеПодсистемы.БизнесПроцессыИЗадачи КонецПроцедуры +&НаСервере +Процедура ЗаписатьРегламентноеЗадание(ИмяПредопределенного, Использование, Расписание, РеквизитПутьКДанным) + РегламентноеЗадание = НайтиРегламентноеЗадание(ИмяПредопределенного); + РегламентноеЗадание.Использование = Использование; + РегламентноеЗадание.Расписание = Расписание; + РегламентноеЗадание.Записать(); + + Если РеквизитПутьКДанным <> Неопределено Тогда + УстановитьДоступность(РеквизитПутьКДанным); + КонецЕсли; +КонецПроцедуры + +&НаСервере +Функция НайтиРегламентноеЗадание(ИмяПредопределенного) + МетаданныеПредопределенного = Метаданные.РегламентныеЗадания.Найти(ИмяПредопределенного); + Возврат ?(МетаданныеПредопределенного <> Неопределено, + РегламентныеЗадания.НайтиПредопределенное(МетаданныеПредопределенного), Неопределено); +КонецФункции + #КонецОбласти diff --git a/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/ПечатныеФормыОтчетыИОбработки/Form.form b/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/ПечатныеФормыОтчетыИОбработки/Form.form index 98b871385..2eb939374 100644 --- a/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/ПечатныеФормыОтчетыИОбработки/Form.form +++ b/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/ПечатныеФормыОтчетыИОбработки/Form.form @@ -172,23 +172,93 @@
      - ГруппаПрименитьНастройки - 1622 - - КакПрименитьНастройки - 1624 - - <key>ru</key> - <value>После изменения настроек необходимо переоткрыть все открытые окна или перезайти в программу.</value> - + Группа1 + 1627 + + ГруппаОткрытьМакетыПечатныхФорм + 1381 + + ОткрытьМакетыПечатныхФорм + 1380 + true + true + + true + + + ОткрытьМакетыПечатныхФормExtendedTooltip + 1606 + Label + true + true + + Left + + + Hyperlink + InformationRegister.ПользовательскиеМакетыПечати.StandardCommand.OpenList + Normal + Auto + true + true + UserCmds + Auto + + + ПояснениеОткрытьМакетыПечатныхФорм + 1382 + + <key>ru</key> + <value>Настройка макетов печатных форм документов.</value> + + true + true + + true + + + ПояснениеОткрытьМакетыПечатныхФормExtendedTooltip + 1607 + Label + true + true + + Left + + + + ПояснениеОткрытьМакетыПечатныхФормКонтекстноеМеню + 1383 + true + + Label + true + true + + Style.ПоясняющийТекст + + + Left + + true true true + + <key>ru</key> + <value>Группа открыть макеты печатных форм</value> + + + ru + Группа открыть макеты печатных форм + + 43 + false - КакПрименитьНастройкиРасширеннаяПодсказка - 1626 + ГруппаОткрытьМакетыПечатныхФормExtendedTooltip + 1605 Label true true @@ -196,20 +266,116 @@ Left - - КакПрименитьНастройкиКонтекстноеМеню - 1625 - true - - Label - true - true - - - URLProcessing - КакПрименитьНастройкиОбработкаНавигационнойСсылки - - Left + UsualGroup + + Vertical + Auto + true + true + Auto + Auto + + + + ГруппаНастройкаПодменюПечать + 1629 + + ПодменюПечать + 1636 + true + true + + true + + + ПодменюПечатьРасширеннаяПодсказка + 1637 + Label + true + true + + Left + + + Hyperlink + Form.Command.ПодменюПечать + Normal + Auto + true + true + UserCmds + Auto + + + ПояснениеНастройкаИспользованияКомандПечати + 1633 + + <key>ru</key> + <value>Настройка видимости команд печати в формах.</value> + + true + true + + true + + + ПояснениеНастройкаИспользованияКомандПечатиРасширеннаяПодсказка + 1635 + Label + true + true + + Left + + + + ПояснениеНастройкаИспользованияКомандПечатиКонтекстноеМеню + 1634 + true + + Label + true + true + + Style.ПоясняющийТекст + + + Left + + + true + true + + true + + + <key>ru</key> + <value>Группа настройка подменю печать</value> + + + ru + Группа настройка подменю печать + + 43 + false + + ГруппаНастройкаПодменюПечатьРасширеннаяПодсказка + 1630 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + true + true + Auto + Auto true @@ -217,17 +383,9 @@ true - - <key>ru</key> - <value>Группа применить настройки</value> - - - ru - Группа применить настройки - - ГруппаПрименитьНастройкиРасширеннаяПодсказка - 1623 + Группа1РасширеннаяПодсказка + 1628 Label true true @@ -237,113 +395,11 @@ UsualGroup - Vertical - Auto - true - true - Auto - Auto - - - - ГруппаОткрытьМакетыПечатныхФорм - 1381 - - ОткрытьМакетыПечатныхФорм - 1380 - true - true - - true - - - ОткрытьМакетыПечатныхФормExtendedTooltip - 1606 - Label - true - true - - Left - - - Hyperlink - InformationRegister.ПользовательскиеМакетыПечати.StandardCommand.OpenList - Normal - Auto - true - true - UserCmds - Auto - - - ПояснениеОткрытьМакетыПечатныхФорм - 1382 - - <key>ru</key> - <value>Настройка макетов печатных форм документов.</value> - - true - true - - true - - - ПояснениеОткрытьМакетыПечатныхФормExtendedTooltip - 1607 - Label - true - true - - Left - - - - ПояснениеОткрытьМакетыПечатныхФормКонтекстноеМеню - 1383 - true - - Label - true - true - - Style.ПоясняющийТекст - - - Left - - - true - true - - true - - - <key>ru</key> - <value>Группа открыть макеты печатных форм</value> - - - ru - Группа открыть макеты печатных форм - - 43 - false - - ГруппаОткрытьМакетыПечатныхФормExtendedTooltip - 1605 - Label - true - true - - Left - - - UsualGroup - - Vertical Auto NormalSeparation true true + Equal Auto Auto @@ -852,6 +908,146 @@ Auto + + Группа5 + 1641 + + ГруппаАдминистрированиеРасширений + 1643 + + Расширения + 1645 + true + true + + true + + + РасширенияРасширеннаяПодсказка + 1646 + Label + true + true + + Left + + + Hyperlink + Form.Command.Расширения + Normal + Auto + true + true + UserCmds + Auto + + + РасширенияПояснение + 1647 + + <key>ru</key> + <value>Подключение расширений: разделов, отчетов и обработок в дополнение к предусмотренным в программе.</value> + + true + true + + true + + + РасширенияПояснениеРасширеннаяПодсказка + 1649 + Label + true + true + + Left + + + + РасширенияПояснениеКонтекстноеМеню + 1648 + true + + Label + true + 2 + true + + Style.ПоясняющийТекст + + + Left + + + true + true + + true + + + <key>ru</key> + <value> </value> + + + ru + + + 43 + false + + ГруппаАдминистрированиеРасширенийРасширеннаяПодсказка + 1644 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + true + true + Auto + Auto + + + true + true + + true + + + <key>ru</key> + <value> </value> + + + ru + + + + Группа5РасширеннаяПодсказка + 1642 + Label + true + true + + Left + + + UsualGroup + + Auto + NormalSeparation + true + true + Equal + Auto + Auto + + ФормаКоманднаяПанель -1 @@ -884,7 +1080,6 @@ Vertical true true - UseIfNecessary auto true @@ -938,7 +1133,51 @@ СправочникДополнительныеОтчетыИОбработки - Auto + DontUse + Auto + + + ПодменюПечать + + <key>ru</key> + <value>Подменю "Печать"</value> + + 2 + + ru + Подменю печать + + + true + + + + ПодменюПечать + + + DontUse + Auto + + + Расширения + + <key>ru</key> + <value>Расширения</value> + + 3 + + ru + Расширения + + + true + + + + Расширения + + + DontUse Auto diff --git a/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/ПечатныеФормыОтчетыИОбработки/Help/ru.html b/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/ПечатныеФормыОтчетыИОбработки/Help/ru.html index e764c670d..8aabcfed6 100644 --- a/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/ПечатныеФормыОтчетыИОбработки/Help/ru.html +++ b/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/ПечатныеФормыОтчетыИОбработки/Help/ru.html @@ -7,9 +7,11 @@ TD {

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

      См. также:

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

      \ No newline at end of file diff --git a/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/ПечатныеФормыОтчетыИОбработки/Module.bsl b/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/ПечатныеФормыОтчетыИОбработки/Module.bsl index 048b818bb..6cc8d1498 100644 --- a/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/ПечатныеФормыОтчетыИОбработки/Module.bsl +++ b/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/ПечатныеФормыОтчетыИОбработки/Module.bsl @@ -14,7 +14,8 @@ РежимРаботы = Новый ФиксированнаяСтруктура(РежимРаботы); // Настройки видимости при запуске. - Элементы.ГруппаПрименитьНастройки.Видимость = РежимРаботы.ЭтоВебКлиент; + Элементы.ГруппаАдминистрированиеРасширений.Видимость = + Не СтандартныеПодсистемыСервер.ЭтоБазоваяВерсияКонфигурации(); // СтандартныеПодсистемы.ДополнительныеОтчетыИОбработки Элементы.ГруппаИспользоватьДополнительныеОтчетыИОбработки.Видимость = РежимРаботы.Локальный Или РежимРаботы.Автономный; @@ -23,28 +24,23 @@ Или НаборКонстант.ИспользоватьДополнительныеОтчетыИОбработки; // Конец СтандартныеПодсистемы.ДополнительныеОтчетыИОбработки + // СтандартныеПодсистемы.РассылкаОтчетов + Элементы.ГруппаРассылкиОтчетов.Видимость = РассылкаОтчетов.ПравоДобавления(); + // Конец СтандартныеПодсистемы.РассылкаОтчетов + // Обновление состояния элементов. УстановитьДоступность(); КонецПроцедуры &НаКлиенте Процедура ПриЗакрытии() - #Если Не ВебКлиент Тогда ОбновитьИнтерфейсПрограммы(); - #КонецЕсли КонецПроцедуры #КонецОбласти #Область ОбработчикиСобытийЭлементовШапкиФормы -&НаКлиенте -Процедура КакПрименитьНастройкиОбработкаНавигационнойСсылки(Элемент, НавигационнаяСсылка, СтандартнаяОбработка) - СтандартнаяОбработка = Ложь; - ОбновитьИнтерфейс = Истина; - ПодключитьОбработчикОжидания("ОбновитьИнтерфейсПрограммы", 0.1, Истина); -КонецПроцедуры - // СтандартныеПодсистемы.ДополнительныеОтчетыИОбработки &НаКлиенте Процедура ИспользоватьДополнительныеОтчетыИОбработкиПриИзменении(Элемент) @@ -81,6 +77,18 @@ КонецПроцедуры // Конец СтандартныеПодсистемы.ДополнительныеОтчетыИОбработки +&НаКлиенте +Процедура ПодменюПечать(Команда) + ОткрытьФорму("ОбщаяФорма.НастройкаКомандПечати"); +КонецПроцедуры + +&НаКлиенте +Процедура Расширения(Команда) + + ОткрытьФорму("ОбщаяФорма.УстановленныеРасширения"); + +КонецПроцедуры + #КонецОбласти #Область СлужебныеПроцедурыИФункции @@ -95,9 +103,7 @@ Если ОбновлятьИнтерфейс Тогда ОбновитьИнтерфейс = Истина; - #Если Не ВебКлиент Тогда - ПодключитьОбработчикОжидания("ОбновитьИнтерфейсПрограммы", 1, Истина); - #КонецЕсли + ПодключитьОбработчикОжидания("ОбновитьИнтерфейсПрограммы", 2, Истина); КонецЕсли; СтандартныеПодсистемыКлиент.ПоказатьРезультатВыполнения(ЭтотОбъект, Результат); @@ -164,7 +170,7 @@ КонстантаМенеджер.Установить(КонстантаЗначение); КонецЕсли; - СтандартныеПодсистемыКлиентСервер.РезультатВыполненияДобавитьОповещениеОткрытыхФорм(Результат, "Запись_НаборКонстант", Новый Структура, КонстантаИмя); + СтандартныеПодсистемыКлиентСервер.ОповеститьОткрытыеФормы(Результат, "Запись_НаборКонстант", Новый Структура, КонстантаИмя); // СтандартныеПодсистемы.ВариантыОтчетов ВариантыОтчетов.ДобавитьОповещениеПриИзмененииЗначенияКонстанты(Результат, КонстантаМенеджер); // Конец СтандартныеПодсистемы.ВариантыОтчетов diff --git a/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/ПоддержкаИОбслуживание/Form.form b/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/ПоддержкаИОбслуживание/Form.form index 62223633d..955497205 100644 --- a/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/ПоддержкаИОбслуживание/Form.form +++ b/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/ПоддержкаИОбслуживание/Form.form @@ -8,7 +8,7 @@ 1575 <key>ru</key> - <value>Контроль за состоянием программы, резервное копирование и восстановление, обновление версии, оптимизация быстродействия.</value> + <value>Контроль за состоянием программы, резервное копирование и восстановление, оптимизация быстродействия.</value> true true @@ -171,81 +171,6 @@ Auto
      - - ГруппаПрименитьНастройки - 1901 - - КакПрименитьНастройки - 1903 - - <key>ru</key> - <value>После изменения настроек необходимо <link ОбновитьИнтерфейс>переоткрыть все открытые окна</> или перезайти в программу.</value> - - true - true - - true - - - КакПрименитьНастройкиРасширеннаяПодсказка - 1905 - Label - true - true - - Left - - - - КакПрименитьНастройкиКонтекстноеМеню - 1904 - true - - true - Label - true - true - - - URLProcessing - КакПрименитьНастройкиОбработкаНавигационнойСсылки - - Left - - - true - true - - true - - - <key>ru</key> - <value>Группа применить настройки</value> - - - ru - Группа применить настройки - - - ГруппаПрименитьНастройкиРасширеннаяПодсказка - 1902 - Label - true - true - - Left - - - UsualGroup - - Vertical - Auto - true - true - Auto - Auto - - ГруппаЧастотныйСервис 1431 @@ -385,7 +310,6 @@ UsualGroup Auto - NormalSeparation true true Auto @@ -863,19 +787,23 @@ - ГруппаРегистрСведенийДатыЗапретаИзмененияДатыЗапретаИзмененияДанных - 1553 + ГруппаУправлениеПолнотекстовымПоискомИИзвлечениемТекстов + 1512 - РегистрСведенийДатыЗапретаИзмененияДатыЗапретаИзмененияДанных - 1552 + УправлениеПолнотекстовымПоискомИИзвлечениемТекстов + 1503 + + <key>ru</key> + <value>Управление полнотекстовым поиском</value> + true true true - РегистрСведенийДатыЗапретаИзмененияДатыЗапретаИзмененияДанныхExtendedTooltip - 1648 + УправлениеПолнотекстовымПоискомИИзвлечениемТекстовExtendedTooltip + 1655 Label true true @@ -884,7 +812,7 @@ Hyperlink - InformationRegister.ДатыЗапретаИзменения.Command.ДатыЗапретаИзмененияДанных + Form.Command.УправлениеПолнотекстовымПоискомИИзвлечениемТекстов Normal Auto true @@ -893,11 +821,12 @@ Auto - ПояснениеРегистрСведенийДатыЗапретаИзмененияДатыЗапретаИзмененияДанных - 1554 + ПояснениеУправлениеПолнотекстовымПоискомИИзвлечениемТекстов + 1513 <key>ru</key> - <value>Запрет изменения данных прошлых периодов.</value> + <value>Обновление и очистка индекса полнотекстового поиска. +Управление извлечением текстов из файлов.</value> true true @@ -905,8 +834,8 @@ true - ПояснениеРегистрСведенийДатыЗапретаИзмененияДатыЗапретаИзмененияДанныхExtendedTooltip - 1649 + ПояснениеУправлениеПолнотекстовымПоискомИИзвлечениемТекстовExtendedTooltip + 1656 Label true true @@ -915,8 +844,8 @@ - ПояснениеРегистрСведенийДатыЗапретаИзмененияДатыЗапретаИзмененияДанныхКонтекстноеМеню - 1555 + ПояснениеУправлениеПолнотекстовымПоискомИИзвлечениемТекстовКонтекстноеМеню + 1514 true Label @@ -936,17 +865,17 @@ <key>ru</key> - <value>Группа регистр сведений даты запрета изменения даты запрета изменения данных</value> + <value> </value> ru - Группа регистр сведений даты запрета изменения даты запрета изменения данных + 43 false - ГруппаРегистрСведенийДатыЗапретаИзмененияДатыЗапретаИзмененияДанныхExtendedTooltip - 1647 + ГруппаУправлениеПолнотекстовымПоискомИИзвлечениемТекстовExtendedTooltip + 1654 Label true true @@ -1102,113 +1031,6 @@ Auto - - ГруппаУправлениеПолнотекстовымПоискомИИзвлечениемТекстов - 1512 - - УправлениеПолнотекстовымПоискомИИзвлечениемТекстов - 1503 - - <key>ru</key> - <value>Управление полнотекстовым поиском</value> - - true - true - - true - - - УправлениеПолнотекстовымПоискомИИзвлечениемТекстовExtendedTooltip - 1655 - Label - true - true - - Left - - - Hyperlink - Form.Command.УправлениеПолнотекстовымПоискомИИзвлечениемТекстов - Normal - Auto - true - true - UserCmds - Auto - - - ПояснениеУправлениеПолнотекстовымПоискомИИзвлечениемТекстов - 1513 - - <key>ru</key> - <value>Обновление и очистка индекса полнотекстового поиска. -Управление извлечением текстов из файлов.</value> - - true - true - - true - - - ПояснениеУправлениеПолнотекстовымПоискомИИзвлечениемТекстовExtendedTooltip - 1656 - Label - true - true - - Left - - - - ПояснениеУправлениеПолнотекстовымПоискомИИзвлечениемТекстовКонтекстноеМеню - 1514 - true - - Label - true - true - - Style.ПоясняющийТекст - - - Left - - - true - true - - true - - - <key>ru</key> - <value> </value> - - - ru - - - 43 - false - - ГруппаУправлениеПолнотекстовымПоискомИИзвлечениемТекстовExtendedTooltip - 1654 - Label - true - true - - Left - - - UsualGroup - - Vertical - Auto - true - true - Auto - Auto - - true true @@ -1242,17 +1064,17 @@ - ГруппаУдалениеПомеченныхОбъектовПоРасписанию - 1766 + ГруппаДатыЗапретаИзменения + 2005 - Группа8 - 1768 + ГруппаДатыЗапретаИзмененияИспользование + 2007 - УдалениеПомеченныхИспользование - 1770 + ИспользоватьДатыЗапретаИзменения + 2009 <key>ru</key> - <value>Автоматически удалять помеченные объекты по расписанию:</value> + <value>Даты запрета изменения</value> true true @@ -1260,16 +1082,16 @@ true - УдалениеПомеченныхИспользование + НаборКонстант.ИспользоватьДатыЗапретаИзменения Right OnChange - УдалениеПомеченныхИспользованиеПриИзменении + Подключаемый_ПриИзмененииРеквизита - УдалениеПомеченныхИспользованиеРасширеннаяПодсказка - 1772 + ИспользоватьДатыЗапретаИзмененияРасширеннаяПодсказка + 2011 Label true true @@ -1278,8 +1100,8 @@ - УдалениеПомеченныхИспользованиеКонтекстноеМеню - 1771 + ИспользоватьДатыЗапретаИзмененияКонтекстноеМеню + 2010 true CheckBoxField @@ -1289,11 +1111,264 @@ true + + ИспользоватьДатыЗапретаИзмененияПояснение + 2012 + + <key>ru</key> + <value>Запрет изменения данных прошлых периодов.</value> + + true + true + + true + + + ИспользоватьДатыЗапретаИзмененияПояснениеРасширеннаяПодсказка + 2014 + Label + true + true + + Left + + + + ИспользоватьДатыЗапретаИзмененияПояснениеКонтекстноеМеню + 2013 + true + + Label + true + true + + Style.ПоясняющийТекст + + + Left + + + true + true + + true + + + <key>ru</key> + <value>Группа даты запрета изменения использование</value> + + 43 + false + + ГруппаДатыЗапретаИзмененияИспользованиеРасширеннаяПодсказка + 2008 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + true + true + Auto + Auto + + + + ГруппаДатыЗапретаИзмененияНастройка + 2015 + + ДатыЗапретаИзмененияНастроить + 2017 + + <key>ru</key> + <value>Настроить</value> + + true + true + + true + + + ДатыЗапретаИзмененияНастроитьРасширеннаяПодсказка + 2018 + Label + true + true + + Left + + + Hyperlink + InformationRegister.ДатыЗапретаИзменения.Command.ДатыЗапретаИзмененияДанных + Normal + Auto + true + true + UserCmds + None + Auto + + true + true + + true + + + <key>ru</key> + <value>Группа даты запрета изменения настройка</value> + + 43 + false + + ГруппаДатыЗапретаИзмененияНастройкаРасширеннаяПодсказка + 2016 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + true + true + Auto + Auto + + + true + true + + true + + + <key>ru</key> + <value>Группа даты запрета изменения</value> + + + ru + + + + ГруппаДатыЗапретаИзмененияРасширеннаяПодсказка + 2006 + Label + true + true + + Left + + + UsualGroup + + Auto + NormalSeparation + true + true + Auto + Auto + + + + ГруппаУдалениеПомеченныхОбъектовПоРасписанию + 1766 + + Группа8 + 1768 + + ГруппаУдалениеПомеченныхИспользование + 2021 + + УдалениеПомеченныхИспользование + 1770 + + <key>ru</key> + <value>Автоматически удалять помеченные объекты по расписанию</value> + + true + true + + true + + + УдалениеПомеченныхИспользование + + Right + + OnChange + УдалениеПомеченныхИспользованиеПриИзменении + + + УдалениеПомеченныхИспользованиеРасширеннаяПодсказка + 1772 + Label + true + true + + Left + + + + УдалениеПомеченныхИспользованиеКонтекстноеМеню + 1771 + true + + CheckBoxField + Enter + true + Left + true + + + true + true + + true + + + <key>ru</key> + <value> </value> + + + ru + + + 43 + false + + ГруппаУдалениеПомеченныхИспользованиеРасширеннаяПодсказка + 2022 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + true + true + Auto + Auto + + УдалениеПомеченныхНастроитьРасписание 1773 true - false + true true @@ -2472,6 +2547,70 @@ Left + + ОбработкаНастройкиОценкиПроизводительности + 1946 + true + true + + true + + + ОбработкаНастройкиОценкиПроизводительностиРасширеннаяПодсказка + 1947 + Label + true + true + + Left + + + Hyperlink + DataProcessor.ОценкаПроизводительности.Command.НастройкиОценкиПроизводительности + Normal + Auto + true + true + UserCmds + Auto + + + ПояснениеОбработкаНастройкиОценкиПроизводительности + 1948 + + <key>ru</key> + <value>Настройки параметров оценки производительности.</value> + + true + true + + true + + + ПояснениеОбработкаНастройкиОценкиПроизводительностиРасширеннаяПодсказка + 1950 + Label + true + true + + Left + + + + ПояснениеОбработкаНастройкиОценкиПроизводительностиКонтекстноеМеню + 1949 + true + + Label + true + true + + Style.ПоясняющийТекст + + + Left + + true true @@ -3022,7 +3161,7 @@ 1858 <key>ru</key> - <value>Загрузка адресного классификатора с сайта 1С или из папки на диске.</value> + <value>Загрузка и проверка обновления адресного классификатора с сайта 1С или из папки на диске.</value> true true @@ -3055,75 +3194,6 @@ Top - - РегистрСведенийАдресныеОбъектыПроверитьОбновлениеАдресногоКлассификатора - 1824 - - <key>ru</key> - <value>Проверить обновление</value> - - true - true - - true - - - РегистрСведенийАдресныеОбъектыПроверитьОбновлениеАдресногоКлассификатораРасширеннаяПодсказка - 1825 - Label - true - true - - Left - - - Hyperlink - InformationRegister.АдресныеОбъекты.Command.ПроверитьОбновлениеАдресногоКлассификатора - Normal - Auto - true - true - UserCmds - Auto - - - ПояснениеАдресныйКлассификаторОбновление - 1846 - - <key>ru</key> - <value>Проверка и обновление адресного классификатора на сайте 1С</value> - - true - true - - true - - - ПояснениеАдресныйКлассификаторОбновлениеРасширеннаяПодсказка - 1848 - Label - true - true - - Left - - - - ПояснениеАдресныйКлассификаторОбновлениеКонтекстноеМеню - 1847 - true - - Label - true - true - - Style.ПоясняющийТекст - - - Left - Top - - true true @@ -3868,676 +3938,6 @@ Auto - - ГруппаОбновлениеИОписаниеИзменений - 1537 - - ГруппаОбновлениеИОписаниеИзмененийПерваяСтрока - 1614 - - ГруппаОбработкаОбновлениеКонфигурации - 1460 - - ОбработкаОбновлениеКонфигурации - 1452 - - <key>ru</key> - <value>Поиск и установка обновлений</value> - - true - true - - true - - - ОбработкаОбновлениеКонфигурацииExtendedTooltip - 1700 - Label - true - true - - Left - - - Hyperlink - DataProcessor.ОбновлениеКонфигурации.StandardCommand.Open - Normal - Auto - true - true - UserCmds - Auto - - - ПояснениеОбработкаОбновлениеКонфигурации - 1461 - - <key>ru</key> - <value>Получение информации о последних обновлениях и автоматическая установка обновлений сразу, через указанное время, при завершении работы.</value> - - true - true - - true - - - ПояснениеОбработкаОбновлениеКонфигурацииExtendedTooltip - 1701 - Label - true - true - - Left - - - - ПояснениеОбработкаОбновлениеКонфигурацииКонтекстноеМеню - 1462 - true - - Label - true - 3 - true - - Style.ПоясняющийТекст - - - Left - Top - - - true - true - - true - - - <key>ru</key> - <value> </value> - - - ru - - - 43 - false - - ГруппаОбработкаОбновлениеКонфигурацииExtendedTooltip - 1699 - Label - true - true - - Left - - - UsualGroup - - Vertical - Auto - true - true - Auto - Auto - - - - ГруппаНастройкиОбновленияПрограммы - 1746 - - НастройкаОбновленияПрограммы - 1748 - - <key>ru</key> - <value>Настройка обновления программы через Интернет</value> - - true - true - - true - - - НастройкаОбновленияПрограммыРасширеннаяПодсказка - 1749 - Label - true - true - - Left - - - Hyperlink - Form.Command.НастройкаОбновленияПрограммы - Normal - Auto - true - true - UserCmds - Auto - - - ПояснениеНастройкаОбновленияПрограммы - 1750 - - <key>ru</key> - <value>Настройка обновления программы через Интернет</value> - - true - true - - true - - - ПояснениеНастройкаОбновленияПрограммыРасширеннаяПодсказка - 1752 - Label - true - true - - Left - - - - ПояснениеНастройкаОбновленияПрограммыКонтекстноеМеню - 1751 - true - - Label - true - 3 - true - - Style.ПоясняющийТекст - - - Left - Top - - - true - true - - true - - 43 - - ГруппаНастройкиОбновленияПрограммыРасширеннаяПодсказка - 1747 - Label - true - true - - Left - - - UsualGroup - - Vertical - Auto - true - true - Auto - Auto - - - true - true - - true - - - <key>ru</key> - <value> </value> - - - ru - - - - ГруппаОбновлениеИОписаниеИзмененийПерваяСтрокаРасширеннаяПодсказка - 1698 - Label - true - true - - Left - - - UsualGroup - - Auto - true - true - Auto - Auto - - - - ГруппаОбновлениеИОписаниеИзмененийВтораяСтрока - 1627 - - ГруппаОткрытьОписаниеИзмененийСистемы - 1464 - - ОткрытьОписаниеИзмененийСистемы - 1463 - true - true - - true - - - ОткрытьОписаниеИзмененийСистемыExtendedTooltip - 1703 - Label - true - true - - Left - - - Hyperlink - CommonForm.ОписаниеИзмененийСистемы.StandardCommand.Open - Normal - Auto - true - true - UserCmds - Auto - - - ПояснениеОткрытьОписаниеИзмененийСистемы - 1465 - - <key>ru</key> - <value>История изменений по версиям программы.</value> - - true - true - - true - - - ПояснениеОткрытьОписаниеИзмененийСистемыExtendedTooltip - 1704 - Label - true - true - - Left - - - - ПояснениеОткрытьОписаниеИзмененийСистемыКонтекстноеМеню - 1466 - true - - Label - true - true - - Style.ПоясняющийТекст - - - Left - - - true - true - - true - - - <key>ru</key> - <value>Группа открыть описание изменений системы</value> - - 43 - false - - ГруппаОткрытьОписаниеИзмененийСистемыExtendedTooltip - 1702 - Label - true - true - - Left - - - UsualGroup - - Vertical - Auto - true - true - Auto - Auto - - - - ГруппаОтложеннаяОбработкаДанных - 1628 - - РезультатыОбновленияИДополнительнаяОбработкаДанных - 1629 - true - true - - true - - - РезультатыОбновленияИДополнительнаяОбработкаДанныхExtendedTooltip - 1707 - Label - true - true - - Left - - - Hyperlink - Form.Command.РезультатыОбновленияИДополнительнаяОбработкаДанных - Normal - Auto - true - true - UserCmds - Auto - - - ПояснениеОтложеннаяОбработкаДанных - 1630 - - <key>ru</key> - <value>Сведения о ходе обновления версии программы, отложенное выполнение дополнительных процедур обработки данных.</value> - - true - true - - true - - - ПояснениеОтложеннаяОбработкаДанныхExtendedTooltip - 1708 - Label - true - true - - Left - - - - ПояснениеОтложеннаяОбработкаДанныхКонтекстноеМеню - 1631 - true - - Label - true - true - - Style.ПоясняющийТекст - - - Left - - - true - true - - true - - - <key>ru</key> - <value>Группа отложенная обработка данных</value> - - 43 - - ГруппаОтложеннаяОбработкаДанныхExtendedTooltip - 1706 - Label - true - true - - Left - - - UsualGroup - - Vertical - Auto - true - true - Auto - Auto - - - true - true - - true - - - <key>ru</key> - <value>Группа обновление и описание изменений вторая строка</value> - - - ru - Группа обновление и описание изменений вторая строка - - - ГруппаОбновлениеИОписаниеИзмененийВтораяСтрокаРасширеннаяПодсказка - 1705 - Label - true - true - - Left - - - UsualGroup - - Auto - true - true - Auto - Auto - - - - ГруппаОбновлениеИОписаниеИзмененийТретьяСтрока - 1753 - - ГруппаДетализироватьОбновлениеИБВЖурналеРегистрации - 1609 - - ДетализироватьОбновлениеИБВЖурналеРегистрации - 1610 - - <key>ru</key> - <value>Детализировать ход обновления в журнале регистрации</value> - - true - true - - true - - - НаборКонстант.ДетализироватьОбновлениеИБВЖурналеРегистрации - - Right - - OnChange - ДетализироватьОбновлениеИБВЖурналеРегистрацииПриИзменении - - - ДетализироватьОбновлениеИБВЖурналеРегистрацииExtendedTooltip - 1710 - Label - true - true - - Left - - - - ДетализироватьОбновлениеИБВЖурналеРегистрацииКонтекстноеМеню - 1611 - true - - CheckBoxField - Enter - true - Left - true - - - - ПояснениеДетализироватьОбновлениеИБВЖурналеРегистрации - 1612 - - <key>ru</key> - <value>Записывать в журнал регистрации подробную информацию о ходе выполнения обновления.</value> - - true - true - - true - - - ПояснениеДетализироватьОбновлениеИБВЖурналеРегистрацииExtendedTooltip - 1711 - Label - true - true - - Left - - - - ПояснениеДетализироватьОбновлениеИБВЖурналеРегистрацииКонтекстноеМеню - 1613 - true - - Label - true - true - - Style.ПоясняющийТекст - - - Left - - - true - true - - true - - - <key>ru</key> - <value> </value> - - - ru - - - 43 - false - - ГруппаДетализироватьОбновлениеИБВЖурналеРегистрацииExtendedTooltip - 1709 - Label - true - true - - Left - - - UsualGroup - - Vertical - Auto - true - true - Auto - Auto - - - true - true - - true - - - <key>ru</key> - <value>Группа обновление и описание изменений третья строка</value> - - - ru - Группа обновление и описание изменений третья строка - - - ГруппаОбновлениеИОписаниеИзмененийТретьяСтрокаРасширеннаяПодсказка - 1754 - Label - true - true - - Left - - - UsualGroup - - Vertical - Auto - true - true - Auto - Auto - - - true - true - - true - - - <key>ru</key> - <value>Обновление версии программы</value> - - - System.DefaultGUIFont - 11.0 - true - false - false - false - - 86 - false - - ГруппаОбновлениеИОписаниеИзмененийExtendedTooltip - 1697 - Label - true - true - - Left - - - UsualGroup - - Vertical - Auto - NormalSeparation - true - true - Equal - auto - Auto - Auto - - ГруппаКорректировкаДанных 1755 @@ -5257,6 +4657,955 @@ Auto + + ГруппаРезультатыОбновленияПрограммы + 2032 + + ГруппаОбновлениеИОписаниеИзмененийПерваяСтрока + 2050 + + ГруппаОткрытьОписаниеИзмененийСистемы + 2052 + + ОткрытьОписаниеИзмененийСистемы + 2054 + true + true + + true + + + ОткрытьОписаниеИзмененийСистемыExtendedTooltip + 2055 + Label + true + true + + Left + + + Hyperlink + CommonForm.ОписаниеИзмененийПрограммы.StandardCommand.Open + Normal + Auto + true + true + UserCmds + Auto + + + ПояснениеОткрытьОписаниеИзмененийСистемы + 2056 + + <key>ru</key> + <value>История изменений по версиям программы.</value> + + true + true + + true + + + ПояснениеОткрытьОписаниеИзмененийСистемыExtendedTooltip + 2058 + Label + true + true + + Left + + + + ПояснениеОткрытьОписаниеИзмененийСистемыКонтекстноеМеню + 2057 + true + + Label + true + true + + Style.ПоясняющийТекст + + + Left + + + true + true + + true + + + <key>ru</key> + <value>Группа открыть описание изменений системы</value> + + 43 + false + + ГруппаОткрытьОписаниеИзмененийСистемыExtendedTooltip + 2053 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + true + true + Auto + Auto + + + + ГруппаОтложеннаяОбработкаДанных + 2059 + + РезультатыОбновленияИДополнительнаяОбработкаДанных + 2061 + true + true + + true + + + РезультатыОбновленияИДополнительнаяОбработкаДанныхРасширеннаяПодсказка + 2062 + Label + true + true + + Left + + + Hyperlink + Form.Command.РезультатыОбновленияИДополнительнаяОбработкаДанных + Normal + Auto + true + true + UserCmds + Auto + + + ПояснениеОтложеннаяОбработкаДанных + 2063 + + <key>ru</key> + <value>Сведения о ходе обновления версии программы, отложенное выполнение дополнительных процедур обработки данных.</value> + + true + true + + true + + + ПояснениеОтложеннаяОбработкаДанныхРасширеннаяПодсказка + 2065 + Label + true + true + + Left + + + + ПояснениеОтложеннаяОбработкаДанныхКонтекстноеМеню + 2064 + true + + Label + true + true + + Style.ПоясняющийТекст + + + Left + + + true + true + + true + + + <key>ru</key> + <value>Группа отложенная обработка данных</value> + + + ru + Группа отложенная обработка данных + + 43 + + ГруппаОтложеннаяОбработкаДанныхРасширеннаяПодсказка + 2060 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + true + true + Auto + Auto + + + true + true + + true + + + <key>ru</key> + <value>Группа обновление и описание изменений первая строка</value> + + + ru + Группа обновление и описание изменений первая строка + + + ГруппаОбновлениеИОписаниеИзмененийПерваяСтрокаРасширеннаяПодсказка + 2051 + Label + true + true + + Left + + + UsualGroup + + Auto + true + true + Auto + Auto + + + + ГруппаОбновлениеИОписаниеИзмененийВтораяСтрока + 2066 + + ГруппаДетализироватьОбновлениеИБВЖурналеРегистрации + 2068 + + ДетализироватьОбновлениеИБВЖурналеРегистрации + 2070 + + <key>ru</key> + <value>Детализировать ход обновления в журнале регистрации</value> + + true + true + + true + + + НаборКонстант.ДетализироватьОбновлениеИБВЖурналеРегистрации + + Right + + OnChange + ДетализироватьОбновлениеИБВЖурналеРегистрацииПриИзменении + + + ДетализироватьОбновлениеИБВЖурналеРегистрацииExtendedTooltip + 2072 + Label + true + true + + Left + + + + ДетализироватьОбновлениеИБВЖурналеРегистрацииКонтекстноеМеню + 2071 + true + + CheckBoxField + Enter + true + Left + true + + + + ПояснениеДетализироватьОбновлениеИБВЖурналеРегистрации + 2073 + + <key>ru</key> + <value>Записывать в журнал регистрации подробную информацию о ходе выполнения обновления.</value> + + true + true + + true + + + ПояснениеДетализироватьОбновлениеИБВЖурналеРегистрацииExtendedTooltip + 2075 + Label + true + true + + Left + + + + ПояснениеДетализироватьОбновлениеИБВЖурналеРегистрацииКонтекстноеМеню + 2074 + true + + Label + true + true + + Style.ПоясняющийТекст + + + Left + + + true + true + + true + + + <key>ru</key> + <value> </value> + + + ru + + + 43 + false + + ГруппаДетализироватьОбновлениеИБВЖурналеРегистрацииExtendedTooltip + 2069 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + true + true + Auto + Auto + + + true + true + + true + + + <key>ru</key> + <value>Группа обновление и описание изменений вторая строка</value> + + + ru + Группа обновление и описание изменений вторая строка + + + ГруппаОбновлениеИОписаниеИзмененийВтораяСтрокаРасширеннаяПодсказка + 2067 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + true + true + Auto + Auto + + + true + true + + true + + + <key>ru</key> + <value>Результаты обновления программы</value> + + + System.DefaultGUIFont + 11.0 + true + false + false + false + + 86 + false + + ГруппаРезультатыОбновленияПрограммыРасширеннаяПодсказка + 2033 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + NormalSeparation + true + true + Equal + auto + Auto + Auto + + + + ГруппаЦентрМониторинга + 1951 + + ГруппаРазрешитьОтправлятьДанные + 1953 + + ДекорацияПояснение + 1955 + + <key>ru</key> + <value>Отчеты об использовании программы помогают нам определить, над чем следует поработать в первую очередь. +Собранные сведения являются обезличенными и содержат только статистические показатели. Подготовка +и отправка отчетов не замедлит работу программы.</value> + + true + true + + true + + + ДекорацияПояснениеРасширеннаяПодсказка + 1957 + Label + true + true + + Left + + + + ДекорацияПояснениеКонтекстноеМеню + 1956 + true + + Label + true + true + + Style.ПоясняющийТекст + + + Left + + + + ГруппаПереключатель + 1958 + + ДекорацияПереключатель + 1960 + true + true + + true + + + ДекорацияПереключательРасширеннаяПодсказка + 1962 + Label + true + true + + Left + + + + ДекорацияПереключательКонтекстноеМеню + 1961 + true + + Label + true + true + + Left + + + + ЦентрМониторингаРазрешитьОтправлятьДанные + 1985 + true + true + + true + + + ЦентрМониторингаРазрешитьОтправлятьДанные + + None + + OnChange + РазрешитьОтправлятьДанныеПриИзменении + + + ЦентрМониторингаРазрешитьОтправлятьДанныеРасширеннаяПодсказка + 1987 + Label + true + true + + Left + + + + ЦентрМониторингаРазрешитьОтправлятьДанныеКонтекстноеМеню + 1986 + true + + RadioButtonField + Enter + true + Left + true + + RadioButtons + 1 + + + ru + Разрешить автоматическую отправку сведений об использовании программы в фирму "1С" + + + 0 + + + + + ru + Разрешить отправку сведений стороннему разработчику + + + 1 + + + Vertical + + + true + true + + true + + + <key>ru</key> + <value>Группа переключатель</value> + + + ru + Группа переключатель + + + ГруппаПереключательРасширеннаяПодсказка + 1959 + Label + true + true + + Left + + + UsualGroup + + Auto + true + true + Auto + Auto + + + true + true + + true + + + <key>ru</key> + <value>Настройка автоматической отправки сведений об использовании программы</value> + + + System.DefaultGUIFont + 11.0 + true + false + false + false + + + ru + Группа разрешить отправлять данные + + + ГруппаРазрешитьОтправлятьДанныеРасширеннаяПодсказка + 1954 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + true + true + Auto + Auto + + + + ГруппаОтправкиДанныхНастройкаРесурсаОбщая + 1983 + + ДекорацияАдресСервиса + 1991 + true + true + + true + + + ДекорацияАдресСервисаРасширеннаяПодсказка + 1993 + Label + true + true + + Left + + + + ДекорацияАдресСервисаКонтекстноеМеню + 1992 + true + + Label + 4 + true + true + + Left + + + + ЦентрМониторингаАдресСервиса + 1988 + + <key>ru</key> + <value>Адрес сервиса</value> + + true + true + + true + + + ЦентрМониторингаАдресСервиса + + + OnChange + ЦентрМониторингаАдресСервисаПриИзменении + + + ЦентрМониторингаАдресСервисаРасширеннаяПодсказка + 1990 + Label + true + true + + Left + + + + ЦентрМониторингаАдресСервисаКонтекстноеМеню + 1989 + true + + InputField + Enter + true + Left + true + + true + true + true + true + true + true + Normal + + + true + true + + true + + + <key>ru</key> + <value>Группа отправки данных настройка ресурса общая</value> + + + ru + Группа отправки данных настройка ресурса общая + + + ГруппаОтправкиДанныхНастройкаРесурсаОбщаяРасширеннаяПодсказка + 1984 + Label + true + true + + Left + + + UsualGroup + + Auto + true + true + Auto + Auto + + + + ГруппаЗапретитьОтправлятьДанные + 1997 + + ДекорацияЗапретитьОтправлятьДанные + 1999 + true + true + + true + + + ДекорацияЗапретитьОтправлятьДанныеРасширеннаяПодсказка + 2001 + Label + true + true + + Left + + + + ДекорацияЗапретитьОтправлятьДанныеКонтекстноеМеню + 2000 + true + + Label + true + true + + Left + + + + ЦентрМониторингаЗапретитьОтправлятьДанные + 1994 + true + true + + true + + + ЦентрМониторингаРазрешитьОтправлятьДанные + + None + + OnChange + РазрешитьОтправлятьДанныеПриИзменении + + + ЦентрМониторингаЗапретитьОтправлятьДанныеРасширеннаяПодсказка + 1996 + Label + true + true + + Left + + + + ЦентрМониторингаЗапретитьОтправлятьДанныеКонтекстноеМеню + 1995 + true + + RadioButtonField + Enter + true + Left + true + + RadioButtons + + + ru + Запретить отправку сведений + + + 2 + + + Vertical + + + true + true + + true + + + <key>ru</key> + <value>Группа запретить отправлять данные</value> + + + ru + Группа запретить отправлять данные + + + ГруппаЗапретитьОтправлятьДанныеРасширеннаяПодсказка + 1998 + Label + true + true + + Left + + + UsualGroup + + Auto + true + true + Auto + Auto + + + + ДекорацияГруппаЦентрМониторинга + 2002 + true + true + + true + + + ДекорацияГруппаЦентрМониторингаРасширеннаяПодсказка + 2004 + Label + true + true + + Left + + + + ДекорацияГруппаЦентрМониторингаКонтекстноеМеню + 2003 + true + + Label + true + true + + Left + + + true + true + + true + + + <key>ru</key> + <value>Центр мониторинга</value> + + + System.DefaultGUIFont + 11.0 + true + false + false + false + + + ru + Группа оценка производительности + + 86 + false + + ГруппаЦентрМониторингаРасширеннаяПодсказка + 1952 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + NormalSeparation + true + true + Equal + auto + Auto + Auto + + ФормаКоманднаяПанель -1 @@ -5434,6 +5783,60 @@ true
      + + ПараметрыЦентраМониторинга + + <key>ru</key> + <value>Параметры центра мониторинга</value> + + 10 + + + true + + + true + + + + ЦентрМониторингаАдресСервиса + + <key>ru</key> + <value>Центр мониторинга адрес сервиса</value> + + 14 + + String + + + + true + + + true + + + + ЦентрМониторингаРазрешитьОтправлятьДанные + + <key>ru</key> + <value>Центр мониторинга разрешить отправлять данные</value> + + 15 + + Number + + 1 + true + + + + true + + + true + + УправлениеПолнотекстовымПоискомИИзвлечениемТекстов @@ -5453,7 +5856,7 @@ <name>ОбработкаУправлениеПолнотекстовымПоиском</name> </handler> </action> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <formCommands> @@ -5476,7 +5879,7 @@ </handler> </action> <functionalOptions>FunctionalOption.СтандартныеПодсистемыВЛокальномРежиме</functionalOptions> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <formCommands> @@ -5498,51 +5901,7 @@ <name>ЗагрузитьКлассификаторБанков</name> </handler> </action> - <currentRowUse>Auto</currentRowUse> - <selectedRowsUse>Auto</selectedRowsUse> - </formCommands> - <formCommands> - <name>РезультатыОбновленияИДополнительнаяОбработкаДанных</name> - <title> - <key>ru</key> - <value>Результаты обновления и дополнительная обработка данных</value> - - 5 - - ru - Результаты обновления и дополнительная обработка данных - - - true - - - - ОтложеннаяОбработкаДанных - - - Auto - Auto - - - НастройкаОбновленияПрограммы - - <key>ru</key> - <value>Настройка обновления программы</value> - - 9 - - ru - Настройка обновления программы - - - true - - - - НастройкаОбновленияПрограммы - - - Auto + DontUse Auto @@ -5564,7 +5923,7 @@ УдалениеПомеченныхНастроитьРасписание - Auto + DontUse Auto @@ -5586,7 +5945,7 @@ ПоискИУдалениеДублей - Auto + DontUse Auto @@ -5608,7 +5967,7 @@ РегистрСведенийНастройкиВерсионированияОбъектов - Auto + DontUse Auto @@ -5630,7 +5989,7 @@ ПроверитьДоступКСервису - Auto + DontUse Auto @@ -5652,7 +6011,29 @@ НастроитьРасписаниеПроверкиКонтрагентов - Auto + DontUse + Auto + + + РезультатыОбновленияИДополнительнаяОбработкаДанных + + <key>ru</key> + <value>Результаты обновления и дополнительная обработка данных</value> + + 5 + + ru + Результаты обновления и дополнительная обработка данных + + + true + + + + ОтложеннаяОбработкаДанных + + + DontUse Auto diff --git a/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/ПоддержкаИОбслуживание/Help/ru.html b/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/ПоддержкаИОбслуживание/Help/ru.html index 8ed09ce64..73eda6f07 100644 --- a/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/ПоддержкаИОбслуживание/Help/ru.html +++ b/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/ПоддержкаИОбслуживание/Help/ru.html @@ -29,23 +29,24 @@ TD { - - - + - + + + + -
    • Регламентные и фоновые задания
    • Настройка, выполнение и отслеживание состояний регламентных и фоновых заданий. Регламентные задания автоматически выполняют регламентные операции по расписанию.
      -
    • Даты запрета изменения данных
    • -

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

      -

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

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

      См. также: Даты запрета загрузки данных в разделе Синхронизация данных. После этого становится активной команда:

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

      Резервное копирование и восстановление

      @@ -64,15 +65,16 @@ TD {
    • Настройки хранения
    • Настройка хранения и очистка версий документов и справочников.

      Оценка производительности

      - +
      +
    • Оценка производительности
    • Флажок замеров интегральной производительности программы по методике APDEX.
      +
    • Настройки оценки производительности
    • Настройки параметров оценки производительности.
    • Показатели производительности
    • Просмотр и оценка результатов замеров производительности.

      Адресный классификатор

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

      @@ -84,9 +86,7 @@ TD {
    • Загрузить классификатор
    • Загрузка адресного классификатора с сайта 1С или из папки на диске.
    • Очистить адресные сведения
    • Удаление загруженных адресных сведений по выбранным, неиспользуемым регионам для уменьшения размера базы.
      -
    • Проверить обновление
    • Проверка и обновление адресного классификатора на сайте 1С.

      Другие классификаторы

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

      Другие классификаторы

      @@ -97,28 +97,46 @@ TD {

      Защита персональных данных

    • Загрузить классификатор банков
    • - + -
      -
    • Регистрация событий доступа к персональным данным
    • Регистрация событий доступа в соответствии с требованиями Федерального закона от 27.07.2006 N152-ФЗ "О персональных данных"
      +
    • Настройки регистрации событий доступа к персональным данным
    • Настройки регистрации событий доступа в соответствии с требованиями Федерального закона от 27.07.2006 N152-ФЗ "О персональных данных"
    • Защита персональных данных
    • Просмотр обращений к персональным данным выбранных объектов программы.
      -

      Обновление версии программы

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

      Корректировка данных

      +Просмотр обращений к персональным данным выбранных объектов программы.

      Корректировка данных

      -
    • Групповое изменение реквизитов
    • Изменение реквизитов и табличных частей в выбранных элементах
    • Поиск и удаление дублей
    • Поиск похожих элементов по заданным условиям сравнения.

      См. также:

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

      Работа с контрагентами

      +

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

      Результаты обновления программы

      +

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

      Центр мониторинга

      +

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

      +

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

      +

      + + + +
      +
    • Разрешить автоматическую отправку сведений об использовании программы в фирму "1С"
    • выбрано по умолчанию, рекомендуется.
      +
    • Разрешить отправку сведений стороннему разработчику
    • в этом случае необходимо заполнить Адрес сервиса, например, https://pult1C.ru/pult/v1/packet/.
      +
    • Запретить отправку сведений
    • не рекомендуется, т.к. статистика необходима разработчикам для анализа работы программы, при этом передача статистики не замедляет ее работу.

      См. также:

      \ No newline at end of file diff --git a/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/ПоддержкаИОбслуживание/Module.bsl b/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/ПоддержкаИОбслуживание/Module.bsl index c245a3195..39cdfce2b 100644 --- a/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/ПоддержкаИОбслуживание/Module.bsl +++ b/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/ПоддержкаИОбслуживание/Module.bsl @@ -13,9 +13,6 @@ РежимРаботы = ОбщегоНазначенияПовтИсп.РежимРаботыПрограммы(); РежимРаботы = Новый ФиксированнаяСтруктура(РежимРаботы); - // Настройки видимости при запуске. - Элементы.ГруппаПрименитьНастройки.Видимость = РежимРаботы.ЭтоВебКлиент; - // СтандартныеПодсистемы.УдалениеПомеченныхОбъектов Если Не РежимРаботы.МодельСервиса И РежимРаботы.ЭтоАдминистраторСистемы Тогда РегламентноеЗадание = РегламентныеЗаданияНайтиПредопределенное("УдалениеПомеченных"); @@ -59,7 +56,8 @@ Элементы.ГруппаКлассификаторы.Видимость = РежимРаботы.Локальный Или РежимРаботы.Автономный; // СтандартныеПодсистемы.ОценкаПроизводительности - Элементы.ГруппаОценкаПроизводительности.Видимость = РежимРаботы.ЭтоАдминистраторСистемы; + ОценкаПроизводительностиСуществует = ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ОценкаПроизводительности"); + Элементы.ГруппаОценкаПроизводительности.Видимость = (РежимРаботы.ЭтоАдминистраторСистемы И ОценкаПроизводительностиСуществует); // Конец СтандартныеПодсистемы.ОценкаПроизводительности // СтандартныеПодсистемы.Валюты @@ -74,16 +72,6 @@ Элементы.ГруппаОткрытьНастройкиРегистрацииСобытийДоступаКПерсональнымДанным.Видимость = РежимРаботы.ЭтоАдминистраторСистемы; // Конец СтандартныеПодсистемы.ЗащитаПерсональныхДанных - // СтандартныеПодсистемы.ОбновлениеКонфигурации - Элементы.ГруппаОбработкаОбновлениеКонфигурации.Видимость = РежимРаботы.Локальный И РежимРаботы.ЭтоАдминистраторСистемы И Не РежимРаботы.ЭтоLinuxКлиент; - Элементы.ГруппаНастройкиОбновленияПрограммы.Видимость = РежимРаботы.Локальный И РежимРаботы.ЭтоАдминистраторСистемы И Не РежимРаботы.ЭтоLinuxКлиент; - ОбновитьНастройкиОбновленияКонфигурации(); - // Конец СтандартныеПодсистемы.ОбновлениеКонфигурации - - // СтандартныеПодсистемы.ОбновлениеВерсииИБ - Элементы.ГруппаДетализироватьОбновлениеИБВЖурналеРегистрации.Видимость = РежимРаботы.ЭтоАдминистраторСистемы; - // Конец СтандартныеПодсистемы.ОбновлениеВерсииИБ - // СтандартныеПодсистемы.ГрупповоеИзменениеОбъектов Элементы.ГруппаОбработкаГрупповоеИзменениеОбъектов.Видимость = РежимРаботы.ЭтоАдминистраторПрограммы; // Конец СтандартныеПодсистемы.ГрупповоеИзменениеОбъектов @@ -110,6 +98,48 @@ КонецЕсли; // Конец СтандартныеПодсистемы.РаботаСКонтрагентами + // СтандартныеПодсистемы.ЦентрМониторинга + ЦентрМониторингаСуществует = ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ЦентрМониторинга"); + Элементы.ГруппаЦентрМониторинга.Видимость = (РежимРаботы.ЭтоАдминистраторСистемы И ЦентрМониторингаСуществует); + + Если (РежимРаботы.ЭтоАдминистраторСистемы И ЦентрМониторингаСуществует) Тогда + ПараметрыЦентраМониторинга = ПолучитьПараметрыЦентраМониторинга(); + ЦентрМониторингаРазрешитьОтправлятьДанные = ПолучитьПереключательОтправкиДанных(ПараметрыЦентраМониторинга.ВключитьЦентрМониторинга, ПараметрыЦентраМониторинга.ЦентрОбработкиИнформацииОПрограмме); + + ПараметрыСервиса = Новый Структура("Сервер, АдресРесурса, Порт"); + Если ЦентрМониторингаРазрешитьОтправлятьДанные = 0 Тогда + ПараметрыСервиса.Сервер = ПараметрыЦентраМониторинга.СерверПоУмолчанию; + ПараметрыСервиса.АдресРесурса = ПараметрыЦентраМониторинга.АдресРесурсаПоУмолчанию; + ПараметрыСервиса.Порт = ПараметрыЦентраМониторинга.ПортПоУмолчанию; + ИначеЕсли ЦентрМониторингаРазрешитьОтправлятьДанные = 1 Тогда + ПараметрыСервиса.Сервер = ПараметрыЦентраМониторинга.Сервер; + ПараметрыСервиса.АдресРесурса = ПараметрыЦентраМониторинга.АдресРесурса; + ПараметрыСервиса.Порт = ПараметрыЦентраМониторинга.Порт; + ИначеЕсли ЦентрМониторингаРазрешитьОтправлятьДанные = 2 Тогда + ПараметрыСервиса = Неопределено; + КонецЕсли; + + Если ПараметрыСервиса <> Неопределено Тогда + Если ПараметрыСервиса.Порт = 80 Тогда + Схема = "http://"; + Порт = ""; + ИначеЕсли ПараметрыСервиса.Порт = 443 Тогда + Схема = "https://"; + Порт = ""; + Иначе + Схема = "http://"; + Порт = ":" + Формат(ПараметрыСервиса.Порт, "ЧН=0; ЧГ="); + КонецЕсли; + + ЦентрМониторингаАдресСервиса = Схема + ПараметрыСервиса.Сервер + Порт + "/" + ПараметрыСервиса.АдресРесурса; + Иначе + ЦентрМониторингаАдресСервиса = ""; + КонецЕсли; + + УстановитьДоступностьЦентрМониторингаНаСервере(ЦентрМониторингаРазрешитьОтправлятьДанные); + КонецЕсли; + // Конец СтандартныеПодсистемы.ЦентрМониторинга + // Обновление состояния элементов. УстановитьДоступность(); @@ -124,32 +154,17 @@ КонецЕсли; // Конец СтандартныеПодсистемы.РезервноеКопированиеИБ - // СтандартныеПодсистемы.ОбновлениеКонфигурации - Если ИмяСобытия = "ЗакрытаФормаНастройкиОбновленияКонфигурации" Тогда - ОбновитьНастройкиОбновленияКонфигурации(); - КонецЕсли; - // Конец СтандартныеПодсистемы.ОбновлениеКонфигурации - КонецПроцедуры &НаКлиенте Процедура ПриЗакрытии() - #Если Не ВебКлиент Тогда ОбновитьИнтерфейсПрограммы(); - #КонецЕсли КонецПроцедуры #КонецОбласти #Область ОбработчикиСобытийЭлементовШапкиФормы -&НаКлиенте -Процедура КакПрименитьНастройкиОбработкаНавигационнойСсылки(Элемент, НавигационнаяСсылка, СтандартнаяОбработка) - СтандартнаяОбработка = Ложь; - ОбновитьИнтерфейс = Истина; - ПодключитьОбработчикОжидания("ОбновитьИнтерфейсПрограммы", 0.1, Истина); -КонецПроцедуры - // СтандартныеПодсистемы.УдалениеПомеченныхОбъектов &НаКлиенте Процедура УдалениеПомеченныхИспользованиеПриИзменении(Элемент) @@ -239,6 +254,54 @@ КонецПроцедуры // Конец СтандартныеПодсистемы.РаботаСКонтрагентами + +// СтандартныеПодсистемы.ЦентрМониторинга +&НаКлиенте +Процедура РазрешитьОтправлятьДанныеПриИзменении(Элемент) + УстановитьДоступностьЦентрМониторингаНаКлиенте(ЦентрМониторингаРазрешитьОтправлятьДанные); + Если ЦентрМониторингаРазрешитьОтправлятьДанные = 2 Тогда + ПараметрыЦентраМониторингаЗапись = Новый Структура("ВключитьЦентрМониторинга, ЦентрОбработкиИнформацииОПрограмме", Ложь, Ложь); + ИначеЕсли ЦентрМониторингаРазрешитьОтправлятьДанные = 1 Тогда + ПараметрыЦентраМониторингаЗапись = Новый Структура("ВключитьЦентрМониторинга, ЦентрОбработкиИнформацииОПрограмме", Ложь, Истина); + ИначеЕсли ЦентрМониторингаРазрешитьОтправлятьДанные = 0 Тогда + ПараметрыЦентраМониторингаЗапись = Новый Структура("ВключитьЦентрМониторинга, ЦентрОбработкиИнформацииОПрограмме", Истина, Ложь); + КонецЕсли; + ЦентрМониторингаАдресСервиса = ПолучитьАдресСервиса(); + РазрешитьОтправлятьДанныеПриИзмененииНаСервере(ПараметрыЦентраМониторингаЗапись); +КонецПроцедуры +// Конец СтандартныеПодсистемы.ЦентрМониторинга + +// СтандартныеПодсистемы.ЦентрМониторинга +&НаКлиенте +Процедура ЦентрМониторингаАдресСервисаПриИзменении(Элемент) + Попытка + СтруктураАдреса = ОбщегоНазначенияКлиентСервер.СтруктураURI(ЦентрМониторингаАдресСервиса); + + Если СтруктураАдреса.Схема = "http" Тогда + СтруктураАдреса.Вставить("ЗащищенноеСоединение", Ложь); + ИначеЕсли СтруктураАдреса.Схема = "https" Тогда + СтруктураАдреса.Вставить("ЗащищенноеСоединение", Истина); + КонецЕсли; + + Если НЕ ЗначениеЗаполнено(СтруктураАдреса.Порт) Тогда + Если СтруктураАдреса.Схема = "http" Тогда + СтруктураАдреса.Порт = 80; + ИначеЕсли СтруктураАдреса.Схема = "https" Тогда + СтруктураАдреса.Порт = 443; + КонецЕсли; + КонецЕсли; + Исключение + // Внимание, формат адреса должен соответствовать RFC 3986 + // см. описание функции ОбщегоНазначенияКлиентСервер.СтруктураURI + ОписаниеОшибки = НСтр("ru = 'Адрес сервиса'") + " " + + ЦентрМониторингаАдресСервиса + " " + + НСтр("ru = 'не является допустимым адресом веб-сервиса для отправки отчетов об использовании программы.'"); + ВызватьИсключение(ОписаниеОшибки); + КонецПопытки; + + ЦентрМониторингаАдресСервисаПриИзмененииНаСервере(СтруктураАдреса); +КонецПроцедуры +// Конец СтандартныеПодсистемы.ЦентрМониторинга #КонецОбласти #Область ОбработчикиКомандФормы @@ -295,23 +358,6 @@ КонецПроцедуры // Конец СтандартныеПодсистемы.ПолнотекстовыйПоиск -// СтандартныеПодсистемы.ОбновлениеВерсииИБ -&НаКлиенте -Процедура ОтложеннаяОбработкаДанных(Команда) - ПараметрыФормы = Новый Структура("ОткрытиеИзПанелиАдминистрирования", Истина); - ОткрытьФорму("Обработка.ОбновлениеИнформационнойБазы.Форма.ИндикацияХодаОтложенногоОбновленияИБ", ПараметрыФормы); -КонецПроцедуры -// Конец СтандартныеПодсистемы.ОбновлениеВерсииИБ - -// СтандартныеПодсистемы.ОбновлениеКонфигурации -&НаКлиенте -Процедура НастройкаОбновленияПрограммы(Команда) - - ОткрытьФорму("Обработка.ОбновлениеКонфигурации.Форма.НастройкаРасписания"); - -КонецПроцедуры -// Конец СтандартныеПодсистемы.ОбновлениеКонфигурации - // СтандартныеПодсистемы.РаботаСКонтрагентами &НаКлиенте Процедура ПроверитьДоступКСервису(Команда) @@ -330,6 +376,14 @@ КонецПроцедуры // Конец СтандартныеПодсистемы.РаботаСКонтрагентами +// СтандартныеПодсистемы.ОбновлениеВерсииИБ +&НаКлиенте +Процедура ОтложеннаяОбработкаДанных(Команда) + ПараметрыФормы = Новый Структура("ОткрытиеИзПанелиАдминистрирования", Истина); + ОткрытьФорму("Обработка.РезультатыОбновленияПрограммы.Форма.ИндикацияХодаОтложенногоОбновленияИБ", ПараметрыФормы); +КонецПроцедуры +// Конец СтандартныеПодсистемы.ОбновлениеВерсииИБ + #КонецОбласти #Область СлужебныеПроцедурыИФункции @@ -344,9 +398,7 @@ Если НеобходимоОбновлятьИнтерфейс Тогда ОбновитьИнтерфейс = Истина; - #Если Не ВебКлиент Тогда - ПодключитьОбработчикОжидания("ОбновитьИнтерфейсПрограммы", 1, Истина); - #КонецЕсли + ПодключитьОбработчикОжидания("ОбновитьИнтерфейсПрограммы", 2, Истина); КонецЕсли; СтандартныеПодсистемыКлиент.ПоказатьРезультатВыполнения(ЭтотОбъект, Результат); @@ -466,7 +518,7 @@ КонстантаМенеджер.Установить(КонстантаЗначение); КонецЕсли; - СтандартныеПодсистемыКлиентСервер.РезультатВыполненияДобавитьОповещениеОткрытыхФорм(Результат, "Запись_НаборКонстант", Новый Структура, КонстантаИмя); + СтандартныеПодсистемыКлиентСервер.ОповеститьОткрытыеФормы(Результат, "Запись_НаборКонстант", Новый Структура, КонстантаИмя); // СтандартныеПодсистемы.ВариантыОтчетов ВариантыОтчетов.ДобавитьОповещениеПриИзмененииЗначенияКонстанты(Результат, КонстантаМенеджер); @@ -481,11 +533,25 @@ Если Не РежимРаботы.ЭтоАдминистраторСистемы Тогда Возврат; КонецЕсли; + + // СтандартныеПодсистемы.ДатыЗапретаИзменения + Если РеквизитПутьКДанным = "НаборКонстант.ИспользоватьДатыЗапретаИзменения" + Или РеквизитПутьКДанным = "" Тогда + Элементы.ГруппаДатыЗапретаИзмененияНастройка.Доступность = + НаборКонстант.ИспользоватьДатыЗапретаИзменения; + КонецЕсли; + // Конец СтандартныеПодсистемы.ДатыЗапретаИзменения + // СтандартныеПодсистемы.ОценкаПроизводительности Если РеквизитПутьКДанным = "НаборКонстант.ВыполнятьЗамерыПроизводительности" Или РеквизитПутьКДанным = "" Тогда - Элементы.ОбработкаОценкаПроизводительности.Доступность = НаборКонстант.ВыполнятьЗамерыПроизводительности; + ЭлементОбработкаОценкаПроизводительности = Элементы.Найти("ОбработкаОценкаПроизводительности"); + ЭлементОбработкаНастройкиОценкиПроизводительности = Элементы.Найти("ОбработкаНастройкиОценкиПроизводительности"); + Если (ЭлементОбработкаОценкаПроизводительности <> Неопределено И ЭлементОбработкаНастройкиОценкиПроизводительности <> Неопределено И НаборКонстант.Свойство("ВыполнятьЗамерыПроизводительности")) Тогда + ЭлементОбработкаОценкаПроизводительности.Доступность = НаборКонстант.ВыполнятьЗамерыПроизводительности; + ЭлементОбработкаНастройкиОценкиПроизводительности.Доступность = НаборКонстант.ВыполнятьЗамерыПроизводительности; + КонецЕсли; КонецЕсли; // Конец СтандартныеПодсистемы.ОценкаПроизводительности @@ -543,13 +609,16 @@ Элементы.АвтоматическиПроверятьКонтрагентовИспользование.Доступность = ИспользоватьСервисПроверкиКонтрагентов; Элементы.АвтоматическиПроверятьКонтрагентовПояснение.Видимость = ИспользоватьСервисПроверкиКонтрагентов; - Элементы.НастроитьРасписаниеПроверкиКонтрагентов.Доступность = ИспользоватьСервисПроверкиКонтрагентов; + Элементы.НастроитьРасписаниеПроверкиКонтрагентов.Доступность = ИспользоватьСервисПроверкиКонтрагентов + И АвтоматическиПроверятьКонтрагентовИспользование; + Если ИспользоватьСервисПроверкиКонтрагентов Тогда РасписаниеПредставление = Строка(АвтоматическиПроверятьКонтрагентовРасписание); Представление = ВРег(Лев(РасписаниеПредставление, 1)) + Сред(РасписаниеПредставление, 2); Иначе Представление = НСтр("ru = '<Отключено>'"); КонецЕсли; + Элементы.АвтоматическиПроверятьКонтрагентовПояснение.Заголовок = Представление; КонецЕсли; @@ -569,26 +638,6 @@ КонецПроцедуры // Конец СтандартныеПодсистемы.РезервноеКопированиеИБ -// СтандартныеПодсистемы.ОбновлениеКонфигурации -&НаСервере -Процедура ОбновитьНастройкиОбновленияКонфигурации() - - НастройкиОбновленияКонфигурации = ОбновлениеКонфигурации.ПолучитьСтруктуруНастроекПомощника(); - - ЗаголовокОбновленияПрограммы = НСтр("ru = 'Автоматическая проверка обновлений отключена.'"); - Если НастройкиОбновленияКонфигурации.ПроверятьНаличиеОбновленияПриЗапуске = 2 Тогда - ЗаголовокОбновленияПрограммы = НСтр("ru = 'Автоматическая проверка обновлений выполняется при каждом запуске программы.'"); - ИначеЕсли НастройкиОбновленияКонфигурации.ПроверятьНаличиеОбновленияПриЗапуске = 1 Тогда - ЗаголовокОбновленияПрограммы = НСтр("ru = 'Автоматическая проверка обновлений выполняется по расписанию: %1.'"); - Расписание = ОбщегоНазначенияКлиентСервер.СтруктураВРасписание(НастройкиОбновленияКонфигурации.РасписаниеПроверкиНаличияОбновления); - ЗаголовокОбновленияПрограммы = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ЗаголовокОбновленияПрограммы, Расписание); - КонецЕсли; - - Элементы.ПояснениеНастройкаОбновленияПрограммы.Заголовок = ЗаголовокОбновленияПрограммы; - -КонецПроцедуры -// Конец СтандартныеПодсистемы.ОбновлениеКонфигурации - &НаСервере Функция РегламентныеЗаданияНайтиПредопределенное(ИмяПредопределенного) МетаданныеПредопределенного = Метаданные.РегламентныеЗадания.Найти(ИмяПредопределенного); @@ -603,10 +652,18 @@ &НаСервере Процедура ИспользоватьПроверкуКонтрагентовПриИзмененииСервер(ИмяЭлемента) - ПриИзмененииРеквизитаСервер(ИмяЭлемента); - ПроверкаКонтрагентов.ЗапуститьФоновуюПроверкуКонтрагентовПослеИзмененияНастройкиПриНеобходимости(); + Результат = Новый Структура; + РеквизитПутьКДанным = Элементы[ИмяЭлемента].ПутьКДанным; + + СохранитьЗначениеРеквизита(РеквизитПутьКДанным, Результат); + ОпределитьНастройкиРегламентногоЗаданияПроверкиКонтрагентов(); + УстановитьДоступность(РеквизитПутьКДанным); + ОбновитьПовторноИспользуемыеЗначения(); + + ПроверкаКонтрагентов.ЗапуститьФоновуюПроверкуКонтрагентовПослеИзмененияНастройкиПриНеобходимости(); + КонецПроцедуры // Конец СтандартныеПодсистемы.РаботаСКонтрагентами @@ -624,4 +681,141 @@ КонецПроцедуры // Конец СтандартныеПодсистемы.РаботаСКонтрагентами +// СтандартныеПодсистемы.ЦентрМониторинга +&НаСервереБезКонтекста +Функция ПолучитьПереключательОтправкиДанных(ВключитьЦентрМониторинга, ЦентрОбработкиИнформацииОПрограмме) + Состояние = ?(ВключитьЦентрМониторинга, "1", "0") + ?(ЦентрОбработкиИнформацииОПрограмме, "1", "0"); + + Если Состояние = "00" Тогда + Результат = 2; + ИначеЕсли Состояние = "01" Тогда + Результат = 1; + ИначеЕсли Состояние = "10" Тогда + Результат = 0; + ИначеЕсли Состояние = "11" Тогда + // А такого быть не может... + КонецЕсли; + + Возврат Результат; +КонецФункции +// Конец СтандартныеПодсистемы.ЦентрМониторинга + +// СтандартныеПодсистемы.ЦентрМониторинга +&НаСервере +Процедура УстановитьДоступностьЦентрМониторингаНаСервере(Параметр) + Если Параметр = 0 Тогда + ЭтаФорма.Элементы.ЦентрМониторингаАдресСервиса.Доступность = Ложь; + ИначеЕсли Параметр = 1 Тогда + ЭтаФорма.Элементы.ЦентрМониторингаАдресСервиса.Доступность = Истина; + ИначеЕсли Параметр = 2 Тогда + ЭтаФорма.Элементы.ЦентрМониторингаАдресСервиса.Доступность = Ложь; + КонецЕсли; +КонецПроцедуры +// Конец СтандартныеПодсистемы.ЦентрМониторинга + +// СтандартныеПодсистемы.ЦентрМониторинга +&НаКлиенте +Процедура УстановитьДоступностьЦентрМониторингаНаКлиенте(Параметр) + Если Параметр = 0 Тогда + ЭтаФорма.Элементы.ЦентрМониторингаАдресСервиса.Доступность = Ложь; + ИначеЕсли Параметр = 1 Тогда + ЭтаФорма.Элементы.ЦентрМониторингаАдресСервиса.Доступность = Истина; + ИначеЕсли Параметр = 2 Тогда + ЭтаФорма.Элементы.ЦентрМониторингаАдресСервиса.Доступность = Ложь; + КонецЕсли; +КонецПроцедуры +// Конец СтандартныеПодсистемы.ЦентрМониторинга + +// СтандартныеПодсистемы.ЦентрМониторинга +&НаКлиенте +Функция ПолучитьАдресСервиса() + + ПараметрыЦентраМониторинга = ПолучитьПараметрыЦентраМониторинга(); + + ПараметрыСервиса = Новый Структура("Сервер, АдресРесурса, Порт"); + + Если ЦентрМониторингаРазрешитьОтправлятьДанные = 0 Тогда + ПараметрыСервиса.Сервер = ПараметрыЦентраМониторинга.СерверПоУмолчанию; + ПараметрыСервиса.АдресРесурса = ПараметрыЦентраМониторинга.АдресРесурсаПоУмолчанию; + ПараметрыСервиса.Порт = ПараметрыЦентраМониторинга.ПортПоУмолчанию; + ИначеЕсли ЦентрМониторингаРазрешитьОтправлятьДанные = 1 Тогда + ПараметрыСервиса.Сервер = ПараметрыЦентраМониторинга.Сервер; + ПараметрыСервиса.АдресРесурса = ПараметрыЦентраМониторинга.АдресРесурса; + ПараметрыСервиса.Порт = ПараметрыЦентраМониторинга.Порт; + ИначеЕсли ЦентрМониторингаРазрешитьОтправлятьДанные = 2 Тогда + ПараметрыСервиса = Неопределено; + КонецЕсли; + + Если ПараметрыСервиса <> Неопределено Тогда + Если ПараметрыСервиса.Порт = 80 Тогда + Схема = "http://"; + Порт = ""; + ИначеЕсли ПараметрыСервиса.Порт = 443 Тогда + Схема = "https://"; + Порт = ""; + Иначе + Схема = "http://"; + Порт = ":" + Формат(ПараметрыСервиса.Порт, "ЧН=0; ЧГ="); + КонецЕсли; + + АдресСервиса = Схема + ПараметрыСервиса.Сервер + Порт + "/" + ПараметрыСервиса.АдресРесурса; + Иначе + АдресСервиса = ""; + КонецЕсли; + + Возврат АдресСервиса; +КонецФункции +// Конец СтандартныеПодсистемы.ЦентрМониторинга + +// СтандартныеПодсистемы.ЦентрМониторинга +&НаСервереБезКонтекста +Функция ПолучитьПараметрыЦентраМониторинга() + МодульЦентрМониторингаСлужебный = ОбщегоНазначения.ОбщийМодуль("ЦентрМониторингаСлужебный"); + ПараметрыЦентраМониторинга = МодульЦентрМониторингаСлужебный.ПолучитьПараметрыЦентраМониторингаВнешнийВызов(); + + ПараметрыСервисаПоУмолчанию = МодульЦентрМониторингаСлужебный.ПолучитьПараметрыПоУмолчаниюВнешнийВызов(); + ПараметрыЦентраМониторинга.Вставить("СерверПоУмолчанию", ПараметрыСервисаПоУмолчанию.Сервер); + ПараметрыЦентраМониторинга.Вставить("АдресРесурсаПоУмолчанию", ПараметрыСервисаПоУмолчанию.АдресРесурса); + ПараметрыЦентраМониторинга.Вставить("ПортПоУмолчанию", ПараметрыСервисаПоУмолчанию.Порт); + + Возврат ПараметрыЦентраМониторинга; +КонецФункции +// Конец СтандартныеПодсистемы.ЦентрМониторинга + +// СтандартныеПодсистемы.ЦентрМониторинга +&НаСервереБезКонтекста +Процедура РазрешитьОтправлятьДанныеПриИзмененииНаСервере(ПараметрыЦентраМониторинга) + МодульЦентрМониторингаСлужебный = ОбщегоНазначения.ОбщийМодуль("ЦентрМониторингаСлужебный"); + МодульЦентрМониторингаСлужебный.УстановитьПараметрыЦентраМониторингаВнешнийВызов(ПараметрыЦентраМониторинга); + + ВключитьЦентрМониторинга = ПараметрыЦентраМониторинга.ВключитьЦентрМониторинга; + ЦентрОбработкиИнформацииОПрограмме = ПараметрыЦентраМониторинга.ЦентрОбработкиИнформацииОПрограмме; + + Результат = ПолучитьПереключательОтправкиДанных(ВключитьЦентрМониторинга, ЦентрОбработкиИнформацииОПрограмме); + + Если Результат = 0 Тогда + РегЗадание = МодульЦентрМониторингаСлужебный.ПолучитьРегламентноеЗаданиеВнешнийВызов("СборИОтправкаСтатистики", Истина); + МодульЦентрМониторингаСлужебный.УстановитьРасписаниеПоУмолчаниюВнешнийВызов(РегЗадание); + ИначеЕсли Результат = 1 Тогда + РегЗадание = МодульЦентрМониторингаСлужебный.ПолучитьРегламентноеЗаданиеВнешнийВызов("СборИОтправкаСтатистики", Истина); + МодульЦентрМониторингаСлужебный.УстановитьРасписаниеПоУмолчаниюВнешнийВызов(РегЗадание); + ИначеЕсли Результат = 2 Тогда + МодульЦентрМониторингаСлужебный.УдалитьРегламентноеЗаданиеВнешнийВызов("СборИОтправкаСтатистики"); + КонецЕсли; +КонецПроцедуры +// Конец СтандартныеПодсистемы.ЦентрМониторинга + +// СтандартныеПодсистемы.ЦентрМониторинга +&НаСервереБезКонтекста +Процедура ЦентрМониторингаАдресСервисаПриИзмененииНаСервере(СтруктураАдреса) + ПараметрыЦентраМониторинга = Новый Структура(); + ПараметрыЦентраМониторинга.Вставить("Сервер", СтруктураАдреса.Хост); + ПараметрыЦентраМониторинга.Вставить("АдресРесурса", СтруктураАдреса.ПутьНаСервере); + ПараметрыЦентраМониторинга.Вставить("Порт", СтруктураАдреса.Порт); + ПараметрыЦентраМониторинга.Вставить("ЗащищенноеСоединение", СтруктураАдреса.ЗащищенноеСоединение); + + МодульЦентрМониторингаСлужебный = ОбщегоНазначения.ОбщийМодуль("ЦентрМониторингаСлужебный"); + МодульЦентрМониторингаСлужебный.УстановитьПараметрыЦентраМониторингаВнешнийВызов(ПараметрыЦентраМониторинга); +КонецПроцедуры +// Конец СтандартныеПодсистемы.ЦентрМониторинга #КонецОбласти diff --git a/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/ПоискИУстановкаОбновлений/Form.form b/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/ПоискИУстановкаОбновлений/Form.form new file mode 100644 index 000000000..7cf6f370f --- /dev/null +++ b/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/ПоискИУстановкаОбновлений/Form.form @@ -0,0 +1,953 @@ + + + + ГруппаЗаголовок + 45 + + ОписаниеРаздела + 47 + + <key>ru</key> + <value>Поиск и установка обновлений программы. Информация о предыдущих обновлениях.</value> + + true + true + + true + + + ОписаниеРазделаРасширеннаяПодсказка + 49 + Label + true + true + + Left + + + + ОписаниеРазделаКонтекстноеМеню + 48 + true + + Label + 78 + true + true + false + false + + Left + Top + + + + Декорация + 50 + + <key>ru</key> + <value> </value> + + true + true + + true + + + ru + + + + ДекорацияРасширеннаяПодсказка + 52 + Label + true + true + + Left + + + + ДекорацияКонтекстноеМеню + 51 + true + + Label + true + true + true + + Left + + + + ГруппаСправка + 53 + + Справка + 55 + true + true + + true + + + СправкаExtendedTooltip + 56 + Label + true + true + + Left + + + Form.StandardCommand.Help + Normal + Auto + true + true + UserCmds + Auto + + true + true + + true + + + <key>ru</key> + <value> </value> + + + ru + + + false + false + + ГруппаСправкаExtendedTooltip + 54 + Label + true + true + + Left + + + CommandBar + + Left + + + true + true + + true + + + <key>ru</key> + <value> </value> + + + ru + + + + ГруппаЗаголовокExtendedTooltip + 46 + Label + true + true + + Left + + + UsualGroup + + Auto + true + true + Auto + Auto + + + + ГруппаОбновлениеИОписаниеИзменений + 1 + + ГруппаОбновлениеИОписаниеИзмененийПерваяСтрока + 3 + + ГруппаОбработкаОбновлениеКонфигурации + 5 + + ОбработкаОбновлениеКонфигурации + 7 + + <key>ru</key> + <value>Поиск и установка обновлений</value> + + true + true + + true + + + ОбработкаОбновлениеКонфигурацииExtendedTooltip + 8 + Label + true + true + + Left + + + Hyperlink + DataProcessor.ПоискИУстановкаОбновлений.StandardCommand.Open + Normal + Auto + true + true + UserCmds + Auto + + + ПояснениеОбработкаОбновлениеКонфигурации + 9 + + <key>ru</key> + <value>Получение информации о последних обновлениях и автоматическая установка обновлений сразу, через указанное время, при завершении работы.</value> + + true + true + + true + + + ПояснениеОбработкаОбновлениеКонфигурацииExtendedTooltip + 11 + Label + true + true + + Left + + + + ПояснениеОбработкаОбновлениеКонфигурацииКонтекстноеМеню + 10 + true + + Label + true + 3 + true + + Style.ПоясняющийТекст + + + Left + Top + + + true + true + + true + + + <key>ru</key> + <value> </value> + + + ru + + + 43 + false + + ГруппаОбработкаОбновлениеКонфигурацииExtendedTooltip + 6 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + true + true + Auto + Auto + + + + ГруппаНастройкиОбновленияПрограммы + 12 + + НастройкаОбновленияПрограммы + 14 + + <key>ru</key> + <value>Настройка обновления программы через Интернет</value> + + true + true + + true + + + НастройкаОбновленияПрограммыРасширеннаяПодсказка + 15 + Label + true + true + + Left + + + Hyperlink + Form.Command.НастройкаОбновленияПрограммы + Normal + Auto + true + true + UserCmds + Auto + + + ПояснениеНастройкаОбновленияПрограммы + 16 + + <key>ru</key> + <value>Настройка обновления программы через Интернет</value> + + true + true + + true + + + ПояснениеНастройкаОбновленияПрограммыРасширеннаяПодсказка + 18 + Label + true + true + + Left + + + + ПояснениеНастройкаОбновленияПрограммыКонтекстноеМеню + 17 + true + + Label + true + 3 + true + + Style.ПоясняющийТекст + + + Left + Top + + + true + true + + true + + 43 + + ГруппаНастройкиОбновленияПрограммыРасширеннаяПодсказка + 13 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + true + true + Auto + Auto + + + true + true + + true + + + <key>ru</key> + <value> </value> + + + ru + + + + ГруппаОбновлениеИОписаниеИзмененийПерваяСтрокаРасширеннаяПодсказка + 4 + Label + true + true + + Left + + + UsualGroup + + Auto + true + true + Auto + Auto + + + + ГруппаОбновлениеИОписаниеИзмененийВтораяСтрока + 19 + + ГруппаОткрытьОписаниеИзмененийСистемы + 21 + + ОткрытьОписаниеИзмененийСистемы + 23 + true + true + + true + + + ОткрытьОписаниеИзмененийСистемыExtendedTooltip + 24 + Label + true + true + + Left + + + Hyperlink + CommonForm.ОписаниеИзмененийПрограммы.StandardCommand.Open + Normal + Auto + true + true + UserCmds + Auto + + + ПояснениеОткрытьОписаниеИзмененийСистемы + 25 + + <key>ru</key> + <value>История изменений по версиям программы.</value> + + true + true + + true + + + ПояснениеОткрытьОписаниеИзмененийСистемыExtendedTooltip + 27 + Label + true + true + + Left + + + + ПояснениеОткрытьОписаниеИзмененийСистемыКонтекстноеМеню + 26 + true + + Label + true + true + + Style.ПоясняющийТекст + + + Left + + + true + true + + true + + + <key>ru</key> + <value>Группа открыть описание изменений системы</value> + + 43 + false + + ГруппаОткрытьОписаниеИзмененийСистемыExtendedTooltip + 22 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + true + true + Auto + Auto + + + + ГруппаОтложеннаяОбработкаДанных + 28 + + РезультатыОбновленияИДополнительнаяОбработкаДанных + 30 + true + true + + true + + + РезультатыОбновленияИДополнительнаяОбработкаДанныхExtendedTooltip + 31 + Label + true + true + + Left + + + Hyperlink + Form.Command.РезультатыОбновленияИДополнительнаяОбработкаДанных + Normal + Auto + true + true + UserCmds + Auto + + + ПояснениеОтложеннаяОбработкаДанных + 32 + + <key>ru</key> + <value>Сведения о ходе обновления версии программы, отложенное выполнение дополнительных процедур обработки данных.</value> + + true + true + + true + + + ПояснениеОтложеннаяОбработкаДанныхExtendedTooltip + 34 + Label + true + true + + Left + + + + ПояснениеОтложеннаяОбработкаДанныхКонтекстноеМеню + 33 + true + + Label + true + true + + Style.ПоясняющийТекст + + + Left + + + true + true + + true + + + <key>ru</key> + <value>Группа отложенная обработка данных</value> + + 43 + + ГруппаОтложеннаяОбработкаДанныхExtendedTooltip + 29 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + true + true + Auto + Auto + + + true + true + + true + + + <key>ru</key> + <value>Группа обновление и описание изменений вторая строка</value> + + + ru + Группа обновление и описание изменений вторая строка + + + ГруппаОбновлениеИОписаниеИзмененийВтораяСтрокаРасширеннаяПодсказка + 20 + Label + true + true + + Left + + + UsualGroup + + Auto + true + true + Auto + Auto + + + + ГруппаОбновлениеИОписаниеИзмененийТретьяСтрока + 35 + + ГруппаДетализироватьОбновлениеИБВЖурналеРегистрации + 37 + + ДетализироватьОбновлениеИБВЖурналеРегистрации + 39 + + <key>ru</key> + <value>Детализировать ход обновления в журнале регистрации</value> + + true + true + + true + + + НаборКонстант.ДетализироватьОбновлениеИБВЖурналеРегистрации + + Right + + OnChange + ДетализироватьОбновлениеИБВЖурналеРегистрацииПриИзменении + + + ДетализироватьОбновлениеИБВЖурналеРегистрацииExtendedTooltip + 41 + Label + true + true + + Left + + + + ДетализироватьОбновлениеИБВЖурналеРегистрацииКонтекстноеМеню + 40 + true + + CheckBoxField + Enter + true + Left + true + + + + ПояснениеДетализироватьОбновлениеИБВЖурналеРегистрации + 42 + + <key>ru</key> + <value>Записывать в журнал регистрации подробную информацию о ходе выполнения обновления.</value> + + true + true + + true + + + ПояснениеДетализироватьОбновлениеИБВЖурналеРегистрацииExtendedTooltip + 44 + Label + true + true + + Left + + + + ПояснениеДетализироватьОбновлениеИБВЖурналеРегистрацииКонтекстноеМеню + 43 + true + + Label + true + true + + Style.ПоясняющийТекст + + + Left + + + true + true + + true + + + <key>ru</key> + <value> </value> + + + ru + + + 43 + false + + ГруппаДетализироватьОбновлениеИБВЖурналеРегистрацииExtendedTooltip + 38 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + true + true + Auto + Auto + + + true + true + + true + + + <key>ru</key> + <value>Группа обновление и описание изменений третья строка</value> + + + ru + Группа обновление и описание изменений третья строка + + + ГруппаОбновлениеИОписаниеИзмененийТретьяСтрокаРасширеннаяПодсказка + 36 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + true + true + Auto + Auto + + + true + true + + true + + + <key>ru</key> + <value>Обновление версии программы</value> + + + System.DefaultGUIFont + 11.0 + true + false + false + false + + 86 + false + + ГруппаОбновлениеИОписаниеИзмененийExtendedTooltip + 2 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + NormalSeparation + true + true + Equal + auto + Auto + Auto + + + + ФормаКоманднаяПанель + -1 + Left + + + NotificationProcessing + ОбработкаОповещения + + + OnCreateAtServer + ПриСозданииНаСервере + + + OnClose + ПриЗакрытии + + DontBlock + true + true + true + Vertical + true + true + true + auto + true + + НаборКонстант + + <key>ru</key> + <value>Набор констант</value> + + 1 + + ConstantsSet + + + true + + + true + +
      true
      +
      + + РежимРаботы + + <key>ru</key> + <value>Режим работы (фиксированная структура)</value> + + 2 + + + true + + + true + + + + НастройкаОбновленияПрограммы + + <key>ru</key> + <value>Настройка обновления программы</value> + + 1 + + ru + Настройка обновления программы + + + true + + + + НастройкаОбновленияПрограммы + + + DontUse + Auto + + + РезультатыОбновленияИДополнительнаяОбработкаДанных + + <key>ru</key> + <value>Результаты обновления и дополнительная обработка данных</value> + + 2 + + ru + Результаты обновления и дополнительная обработка данных + + + true + + + + ОтложеннаяОбработкаДанных + + + DontUse + 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..aa7e6428c --- /dev/null +++ b/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/ПоискИУстановкаОбновлений/Help/ru.html @@ -0,0 +1,15 @@ + +

      В данной панели осуществляется настройка параметров обновления программы.

      +

      Обновление версии программы

      + + + + + + +
      +
    • Поиск и установка обновлений
    • Получение информации о последних обновлениях на пользовательском сайте в сети Интернет и помощник автоматической установки обновлений программы.
      +
    • Настройка обновления программы через Интернет
    • Настройте обновление программы через интернет, при этом автоматическая проверка обновлений отключена.
      +
    • Описание изменений программы
    • Просмотр списка изменений в установленной версии программы и рекомендаций по обновлению программы.
      +
    • Результаты обновления и дополнительная обработка данных
    • Сведения о ходе обновления версии программы, отложенное выполнение дополнительных процедур обработки данных
      +
    • Детализировать ход обновления в журнале регистрации
    • При включенной настройке в журнал регистрации записываются выполняемые обработчики обновления с указанием времени выполнения.
      \ 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..faab9f779 --- /dev/null +++ b/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/ПоискИУстановкаОбновлений/Module.bsl @@ -0,0 +1,164 @@ +&НаКлиенте +Перем ОбновитьИнтерфейс; + +#Область ОбработчикиСобытийФормы + +&НаСервере +Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) + + Если Параметры.Свойство("АвтоТест") Тогда + Возврат; + КонецЕсли; + + // Значения реквизитов формы + РежимРаботы = ОбщегоНазначенияПовтИсп.РежимРаботыПрограммы(); + РежимРаботы = Новый ФиксированнаяСтруктура(РежимРаботы); + + // СтандартныеПодсистемы.ОбновлениеКонфигурации + Элементы.ГруппаОбработкаОбновлениеКонфигурации.Видимость = РежимРаботы.Локальный И РежимРаботы.ЭтоАдминистраторСистемы И Не РежимРаботы.ЭтоLinuxКлиент; + Элементы.ГруппаНастройкиОбновленияПрограммы.Видимость = РежимРаботы.Локальный И РежимРаботы.ЭтоАдминистраторСистемы И Не РежимРаботы.ЭтоLinuxКлиент; + ОбновитьНастройкиОбновленияКонфигурации(); + // Конец СтандартныеПодсистемы.ОбновлениеКонфигурации + + // СтандартныеПодсистемы.ОбновлениеВерсииИБ + Элементы.ГруппаДетализироватьОбновлениеИБВЖурналеРегистрации.Видимость = РежимРаботы.ЭтоАдминистраторСистемы; + // Конец СтандартныеПодсистемы.ОбновлениеВерсииИБ + +КонецПроцедуры + +&НаКлиенте +Процедура ОбработкаОповещения(ИмяСобытия, Параметр, Источник) + + // СтандартныеПодсистемы.ОбновлениеКонфигурации + Если ИмяСобытия = "ЗакрытаФормаНастройкиОбновленияКонфигурации" Тогда + ОбновитьНастройкиОбновленияКонфигурации(); + КонецЕсли; + // Конец СтандартныеПодсистемы.ОбновлениеКонфигурации + +КонецПроцедуры + +&НаКлиенте +Процедура ПриЗакрытии() + ОбновитьИнтерфейсПрограммы(); +КонецПроцедуры + +#КонецОбласти + +#Область ОбработчикиСобытийЭлементовШапкиФормы + +// СтандартныеПодсистемы.ОбновлениеВерсииИБ +&НаКлиенте +Процедура ДетализироватьОбновлениеИБВЖурналеРегистрацииПриИзменении(Элемент) + Подключаемый_ПриИзмененииРеквизита(Элемент); +КонецПроцедуры +// Конец СтандартныеПодсистемы.ОбновлениеВерсииИБ + +#КонецОбласти + +#Область ОбработчикиКомандФормы + +// СтандартныеПодсистемы.ОбновлениеВерсииИБ +&НаКлиенте +Процедура ОтложеннаяОбработкаДанных(Команда) + ПараметрыФормы = Новый Структура("ОткрытиеИзПанелиАдминистрирования", Истина); + ОткрытьФорму("Обработка.РезультатыОбновленияПрограммы.Форма.ИндикацияХодаОтложенногоОбновленияИБ", ПараметрыФормы); +КонецПроцедуры +// Конец СтандартныеПодсистемы.ОбновлениеВерсииИБ + +// СтандартныеПодсистемы.ОбновлениеКонфигурации +&НаКлиенте +Процедура НастройкаОбновленияПрограммы(Команда) + + ОткрытьФорму("Обработка.ПоискИУстановкаОбновлений.Форма.НастройкаРасписания"); + +КонецПроцедуры +// Конец СтандартныеПодсистемы.ОбновлениеКонфигурации + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +// СтандартныеПодсистемы.ОбновлениеКонфигурации +&НаСервере +Процедура ОбновитьНастройкиОбновленияКонфигурации() + + НастройкиОбновленияКонфигурации = ОбновлениеКонфигурации.ПолучитьСтруктуруНастроекПомощника(); + + ЗаголовокОбновленияПрограммы = НСтр("ru = 'Автоматическая проверка обновлений отключена.'"); + Если НастройкиОбновленияКонфигурации.ПроверятьНаличиеОбновленияПриЗапуске = 2 Тогда + ЗаголовокОбновленияПрограммы = НСтр("ru = 'Автоматическая проверка обновлений выполняется при каждом запуске программы.'"); + ИначеЕсли НастройкиОбновленияКонфигурации.ПроверятьНаличиеОбновленияПриЗапуске = 1 Тогда + ЗаголовокОбновленияПрограммы = НСтр("ru = 'Автоматическая проверка обновлений выполняется по расписанию: %1.'"); + Расписание = ОбщегоНазначенияКлиентСервер.СтруктураВРасписание(НастройкиОбновленияКонфигурации.РасписаниеПроверкиНаличияОбновления); + ЗаголовокОбновленияПрограммы = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ЗаголовокОбновленияПрограммы, Расписание); + КонецЕсли; + + Элементы.ПояснениеНастройкаОбновленияПрограммы.Заголовок = ЗаголовокОбновленияПрограммы; + +КонецПроцедуры +// Конец СтандартныеПодсистемы.ОбновлениеКонфигурации + +&НаКлиенте +Процедура ОбновитьИнтерфейсПрограммы() + + Если ОбновитьИнтерфейс = Истина Тогда + ОбновитьИнтерфейс = Ложь; + ОбщегоНазначенияКлиент.ОбновитьИнтерфейсПрограммы(); + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура Подключаемый_ПриИзмененииРеквизита(Элемент, НеобходимоОбновлятьИнтерфейс = Истина) + + Результат = ПриИзмененииРеквизитаСервер(Элемент.Имя); + + Если НеобходимоОбновлятьИнтерфейс Тогда + ОбновитьИнтерфейс = Истина; + ПодключитьОбработчикОжидания("ОбновитьИнтерфейсПрограммы", 2, Истина); + КонецЕсли; + + СтандартныеПодсистемыКлиент.ПоказатьРезультатВыполнения(ЭтотОбъект, Результат); + +КонецПроцедуры + +&НаСервере +Функция ПриИзмененииРеквизитаСервер(ИмяЭлемента) + + Результат = Новый Структура; + РеквизитПутьКДанным = Элементы[ИмяЭлемента].ПутьКДанным; + + СохранитьЗначениеРеквизита(РеквизитПутьКДанным, Результат); + + ОбновитьПовторноИспользуемыеЗначения(); + + Возврат Результат; +КонецФункции + +&НаСервере +Процедура СохранитьЗначениеРеквизита(РеквизитПутьКДанным, Результат) + + // Сохранение значений реквизитов, не связанных с константами напрямую. + Если РеквизитПутьКДанным = "" Тогда + Возврат; + КонецЕсли; + + // Определение имени и запись значения реквизита в соответствующей константе из "НаборКонстант". + // Используется для тех реквизитов формы, которые связаны с константами напрямую. + + Если НРег(Лев(РеквизитПутьКДанным, 14)) = НРег("НаборКонстант.") Тогда + КонстантаИмя = Сред(РеквизитПутьКДанным, 15); + КонстантаМенеджер = Константы[КонстантаИмя]; + КонстантаЗначение = НаборКонстант[КонстантаИмя]; + + Если КонстантаМенеджер.Получить() <> КонстантаЗначение Тогда + КонстантаМенеджер.Установить(КонстантаЗначение); + КонецЕсли; + + СтандартныеПодсистемыКлиентСервер.ОповеститьОткрытыеФормы(Результат, "Запись_НаборКонстант", Новый Структура, КонстантаИмя); + + КонецЕсли; + +КонецПроцедуры + +#КонецОбласти \ No newline at end of file diff --git a/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/УправлениеПолнотекстовымПоискомИИзвлечениемТекстов/Form.form b/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/УправлениеПолнотекстовымПоискомИИзвлечениемТекстов/Form.form index 0f2244681..be3d91210 100644 --- a/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/УправлениеПолнотекстовымПоискомИИзвлечениемТекстов/Form.form +++ b/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/УправлениеПолнотекстовымПоискомИИзвлечениемТекстов/Form.form @@ -171,80 +171,6 @@ Auto
      - - ГруппаПрименитьНастройки - 146 - - КакПрименитьНастройки - 148 - - <key>ru</key> - <value>После изменения настроек необходимо переоткрыть все открытые окна или перезайти в программу.</value> - - true - true - - true - - - КакПрименитьНастройкиРасширеннаяПодсказка - 150 - Label - true - true - - Left - - - - КакПрименитьНастройкиКонтекстноеМеню - 149 - true - - Label - true - true - - - URLProcessing - КакПрименитьНастройкиОбработкаНавигационнойСсылки - - Left - - - true - true - - true - - - <key>ru</key> - <value>Группа применить настройки</value> - - - ru - Группа применить настройки - - - ГруппаПрименитьНастройкиРасширеннаяПодсказка - 147 - Label - true - true - - Left - - - UsualGroup - - Vertical - Auto - true - true - Auto - Auto - - Группа1 151 @@ -485,6 +411,33 @@ UserCmds Auto + + ПроверитьИндекс + 155 + true + true + + true + + + ПроверитьИндексРасширеннаяПодсказка + 156 + Label + true + true + + Left + + + UsualButton + Form.Command.ПроверитьИндекс + Normal + Auto + true + true + UserCmds + Auto + true true @@ -577,7 +530,6 @@ Vertical Auto - NormalSeparation true true Auto @@ -672,7 +624,7 @@ ru - Все сервера в кластере 1С:Предприятие работают под управлением ОС Windows + В кластере серверов настроено выполнение на сервере под управлением ОС Windows 1 @@ -681,7 +633,7 @@ ru - Один или несколько серверов работают под управлением ОС Linux + В кластере нет серверов под управлением ОС Windows (все сервера в кластере только под управлением ОС Linux) 0 @@ -695,7 +647,7 @@ true - 30 + 29 4 false false @@ -1072,7 +1024,6 @@ Vertical true true - UseIfNecessary auto true @@ -1292,6 +1243,23 @@ + + ИндексСодержитКорректныеДанные + + <key>ru</key> + <value>Индекс содержит корректные данные</value> + + 12 + + Boolean + + + true + + + true + + ОбновитьИндекс @@ -1311,7 +1279,7 @@ <name>ОбновитьИндекс</name> </handler> </action> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <formCommands> @@ -1333,7 +1301,7 @@ <name>ОчиститьИндекс</name> </handler> </action> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <formCommands> @@ -1355,7 +1323,7 @@ <name>ЗапуститьИзвлечениеТекстов</name> </handler> </action> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <formCommands> @@ -1377,7 +1345,29 @@ <name>РедактироватьРегламентноеЗадание</name> </handler> </action> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> + <selectedRowsUse>Auto</selectedRowsUse> + </formCommands> + <formCommands> + <name>ПроверитьИндекс</name> + <title> + <key>ru</key> + <value>Проверить индекс</value> + + 5 + + ru + Проверить индекс + + + true + + + + ПроверитьИндекс + + + DontUse Auto diff --git a/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/УправлениеПолнотекстовымПоискомИИзвлечениемТекстов/Help/ru.html b/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/УправлениеПолнотекстовымПоискомИИзвлечениемТекстов/Help/ru.html index f208c0476..70e5348ee 100644 --- a/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/УправлениеПолнотекстовымПоискомИИзвлечениемТекстов/Help/ru.html +++ b/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/УправлениеПолнотекстовымПоискомИИзвлечениемТекстов/Help/ru.html @@ -15,13 +15,18 @@ TD {
      • Для того чтобы можно было осуществлять поиск по всем введенным в программу данным, необходимо регулярно актуализировать индекс полнотекстового поиска. Для регулярного автоматического обновления индекса предназначены регламентные задания Обновление индекса ППД и Слияние индекса ППД (выполняется раз в сутки).
      • Если индекс уже был обновлен, то отображается Дата актуальности индекса - дата последнего обновления индекса.
      • Если в программе есть данные, которые не прошли индексирование, то становится доступна кнопка Обновить индекс и выводится Статус индекса "Требуется обновление".

      Очистка индекса полнотекстового поиска

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

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

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

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

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

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

      Автоматическое извлечение текстов

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

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

        -
      • Все сервера в кластере 1С:Предприятие работают под управлением ОС Windows - в этом случае становится доступной команда Настроить регламентное задание. Укажите расписание и другие параметры регламентного задания по извлечению текстов из файлов.
      • -
      • Один или несколько серверов работают под управлением ОС Linux - в этом случае с помощью команды Запустить извлечение текстов можно начать извлечение текстов в тонком клиенте на рабочей станции под управлением ОС Windows.
        • Если в клиент-серверном варианте один или несколько рабочих процессов сервера работают под Linux, а часть или все клиенты подключаются с помощью веб-клиента, то в информационной базе могут быть добавлены файлы, текст из которых не извлечен, и соответственно эти файлы не могут быть найдены полнотекстовым поиском по содержимому. В этом случае на одном из клиентских компьютеров, работающих под управлением ОС Microsoft Windows, нужно запустить тонкий или толстый клиент, и на нем выполнить команду Извлечение текстов, для того чтобы в автоматическом режиме извлекать текст из файлов. По умолчанию интервал времени выполнения равен 60 секундам.
      +
    • В кластере серверов настроено выполнение на сервере под управлением ОС Windows - в этом случае становится доступной команда Настроить расписание, с помощью которой можно  настроить регламентное задание. Укажите расписание и другие параметры регламентного задания по извлечению текстов из файлов.

    • Данный вариант подходит, когда в Администрировании серверов 1С Предприятия задано следующее правило для сервера под управлением ОС Microsoft Windows: +
      • Объект требования: Клиентское соединение с ИБ. +
      • Тип требования: Назначать. +
      • Имя ИБ: не указывается. +
      • Значение дополнительного параметра: 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 6d213871d..dd0160f84 100644 --- a/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/УправлениеПолнотекстовымПоискомИИзвлечениемТекстов/Module.bsl +++ b/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/УправлениеПолнотекстовымПоискомИИзвлечениемТекстов/Module.bsl @@ -18,8 +18,6 @@ ИзвлекатьТекстыФайловНаСервере = НаборКонстант.ИзвлекатьТекстыФайловНаСервере; // Настройки видимости при запуске. - Элементы.ГруппаПрименитьНастройки.Видимость = РежимРаботы.ЭтоВебКлиент; - Элементы.ГруппаАвтоматическоеИзвлечениеТекстов.Видимость = РежимРаботы.ЭтоАдминистраторСистемы; Если РежимРаботы.ЭтоАдминистраторПрограммы И ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ФайловыеФункции") Тогда @@ -46,22 +44,13 @@ &НаКлиенте Процедура ПриЗакрытии() - #Если Не ВебКлиент Тогда ОбновитьИнтерфейсПрограммы(); - #КонецЕсли КонецПроцедуры #КонецОбласти #Область ОбработчикиСобытийЭлементовШапкиФормы -&НаКлиенте -Процедура КакПрименитьНастройкиОбработкаНавигационнойСсылки(Элемент, НавигационнаяСсылка, СтандартнаяОбработка) - СтандартнаяОбработка = Ложь; - ОбновитьИнтерфейс = Истина; - ПодключитьОбработчикОжидания("ОбновитьИнтерфейсПрограммы", 0.1, Истина); -КонецПроцедуры - &НаКлиенте Процедура ИспользоватьПолнотекстовыйПоискПриИзменении(Элемент) Если ИспользоватьПолнотекстовыйПоиск = 0 Тогда // Предыдущее значение - 2 (3й режим). @@ -104,6 +93,23 @@ Состояние(НСтр("ru = 'Очистка полнотекстового индекса завершена.'")); КонецПроцедуры +&НаКлиенте +Процедура ПроверитьИндекс(Команда) + Состояние( + НСтр("ru = 'Идет проверка полнотекстового индекса... + |Пожалуйста, подождите.'")); + + Попытка + ПроверитьИндексСервер(); + Исключение + ТекстСообщенияОбОшибке = + НСтр("ru = 'В настоящее время проверка индекса невозможна, так как выполняется его очистка или обновление.'"); + ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстСообщенияОбОшибке); + КонецПопытки; + + Состояние(НСтр("ru = 'Проверка полнотекстового индекса завершена.'")); +КонецПроцедуры + &НаКлиенте Процедура РедактироватьРегламентноеЗадание(Команда) РегламентныеЗаданияГиперссылкаНажатие("ИзвлечениеТекста"); @@ -141,9 +147,7 @@ Если ОбновлятьИнтерфейс Тогда ОбновитьИнтерфейс = Истина; - #Если Не ВебКлиент Тогда - ПодключитьОбработчикОжидания("ОбновитьИнтерфейсПрограммы", 1, Истина); - #КонецЕсли + ПодключитьОбработчикОжидания("ОбновитьИнтерфейсПрограммы", 2, Истина); КонецЕсли; СтандартныеПодсистемыКлиент.ПоказатьРезультатВыполнения(ЭтотОбъект, Результат); @@ -193,7 +197,6 @@ Если ОбновитьИнтерфейс = Истина Тогда ОбновитьИнтерфейс = Ложь; - ОбновитьПовторноИспользуемыеЗначения(); ОбщегоНазначенияКлиент.ОбновитьИнтерфейсПрограммы(); КонецЕсли; @@ -214,6 +217,12 @@ УстановитьДоступность("Команда.ОчиститьИндекс"); КонецПроцедуры +&НаСервере +Процедура ПроверитьИндексСервер() + ИндексСодержитКорректныеДанные = ПолнотекстовыйПоиск.ПроверитьИндекс(); + УстановитьДоступность("Команда.ПроверитьИндекс", Истина); +КонецПроцедуры + &НаСервере Функция ПриИзмененииРеквизитаСервер(ИмяЭлемента) @@ -302,7 +311,7 @@ КонстантаМенеджер.Установить(КонстантаЗначение); КонецЕсли; - СтандартныеПодсистемыКлиентСервер.РезультатВыполненияДобавитьОповещениеОткрытыхФорм(Результат, "Запись_НаборКонстант", Новый Структура, КонстантаИмя); + СтандартныеПодсистемыКлиентСервер.ОповеститьОткрытыеФормы(Результат, "Запись_НаборКонстант", Новый Структура, КонстантаИмя); // СтандартныеПодсистемы.ВариантыОтчетов ВариантыОтчетов.ДобавитьОповещениеПриИзмененииЗначенияКонстанты(Результат, КонстантаМенеджер); // Конец СтандартныеПодсистемы.ВариантыОтчетов @@ -311,7 +320,7 @@ КонецПроцедуры &НаСервере -Процедура УстановитьДоступность(РеквизитПутьКДанным = "") +Процедура УстановитьДоступность(РеквизитПутьКДанным = "", ИндексПроверен = Ложь) Если РеквизитПутьКДанным = "" Или РеквизитПутьКДанным = "ИспользоватьПолнотекстовыйПоиск" Тогда @@ -328,13 +337,16 @@ Если РеквизитПутьКДанным = "" Или РеквизитПутьКДанным = "ИспользоватьПолнотекстовыйПоиск" Или РеквизитПутьКДанным = "Команда.ОбновитьИндекс" - Или РеквизитПутьКДанным = "Команда.ОчиститьИндекс" Тогда + Или РеквизитПутьКДанным = "Команда.ОчиститьИндекс" + Или РеквизитПутьКДанным = "Команда.ПроверитьИндекс" Тогда Если ИспользоватьПолнотекстовыйПоиск = 1 Тогда ДатаАктуальностиИндекса = ПолнотекстовыйПоиск.ДатаАктуальности(); ИндексАктуален = ПолнотекстовыйПоискСервер.ИндексПоискаАктуален(); ФлагДоступность = НЕ ИндексАктуален; - Если ИндексАктуален Тогда + Если ИндексПроверен И Не ИндексСодержитКорректныеДанные Тогда + СтатусИндекса = НСтр("ru = 'Требуется очистка и обновление'"); + ИначеЕсли ИндексАктуален Тогда СтатусИндекса = НСтр("ru = 'Обновление не требуется'"); Иначе СтатусИндекса = НСтр("ru = 'Требуется обновление'"); @@ -346,10 +358,11 @@ СтатусИндекса = НСтр("ru = 'Полнотекстовый поиск отключен'"); КонецЕсли; - Если ИндексАктуален Тогда - Элементы.СтатусИндекса.Шрифт = Новый Шрифт; - Иначе + Если (ИндексПроверен И Не ИндексСодержитКорректныеДанные) + Или Не ИндексАктуален Тогда Элементы.СтатусИндекса.Шрифт = Новый Шрифт(, , Истина); + Иначе + Элементы.СтатусИндекса.Шрифт = Новый Шрифт; КонецЕсли; Элементы.ОбновитьИндекс.Доступность = ФлагДоступность; diff --git a/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/Форма/Form.form b/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/Форма/Form.form index 1573954b1..9b42381e1 100644 --- a/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/Форма/Form.form +++ b/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/Форма/Form.form @@ -18,7 +18,6 @@ true true true - UseIfNecessary auto true diff --git a/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Help/ru.html b/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Help/ru.html index ac656509c..4a9d3f892 100644 --- a/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Help/ru.html +++ b/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Help/ru.html @@ -6,6 +6,7 @@
    • Поддержка и обслуживание - в данном подразделе администратору предоставляются возможности по поддержанию программы в работоспособном состоянии;
    • Общие настройки - в данном подразделе производятся основные настройки программы;
    • Настройки пользователей и прав - в данном подразделе предусмотрены команды, связанные с управлением доступом и настройкой прав пользователей; +
    • Поиск и установка обновлений - в данном подразделе производится поиск и установка обновлений программы, также можно просмотреть информацию о предыдущих обновлениях; 
    • Органайзер - в данном подразделе предусмотрены команды настройки электронной почты, заметок, напоминаний и бизнес-процессов;
    • Настройки синхронизации данных - в данном подразделе производится настройка синхронизации данных с другими программами, а также организация совместной работы в распределенной информационной базе;
    • Настройки работы с файлами - в данном подразделе предоставляется возможность настройки параметров загрузки, хранения и обработки файлов; diff --git a/SSL/src/DataProcessors/ПанельАдминистрированияБСП/ПанельАдминистрированияБСП.mdo b/SSL/src/DataProcessors/ПанельАдминистрированияБСП/ПанельАдминистрированияБСП.mdo index d0e67ece3..2b64a919f 100644 --- a/SSL/src/DataProcessors/ПанельАдминистрированияБСП/ПанельАдминистрированияБСП.mdo +++ b/SSL/src/DataProcessors/ПанельАдминистрированияБСП/ПанельАдминистрированияБСП.mdo @@ -58,6 +58,20 @@ PersonalComputer MobileDevice + + ПоискИУстановкаОбновлений + + ru + Поиск и установка обновлений + + + + ru + + + PersonalComputer + MobileDevice + Органайзер @@ -147,7 +161,7 @@ Auto ru - Контроль за состоянием программы, резервное копирование и восстановление, обновление версии, оптимизация быстродействия. + Контроль за состоянием программы, резервное копирование и восстановление, оптимизация быстродействия. @@ -176,6 +190,19 @@ Администрирование пользователей, настройка групп доступа, предоставление доступа для внешних пользователей, управление пользовательскими настройками. + + ПоискИУстановкаОбновлений + + ru + Поиск и установка обновлений + + NavigationPanelOrdinary + Auto + + ru + Поиск и установка обновлений программы + + Органайзер diff --git a/SSL/src/DataProcessors/ПереносФайловВТома/Forms/Форма/Form.form b/SSL/src/DataProcessors/ПереносФайловВТома/Forms/Форма/Form.form index 08b36d5a5..a5cf90058 100644 --- a/SSL/src/DataProcessors/ПереносФайловВТома/Forms/Форма/Form.form +++ b/SSL/src/DataProcessors/ПереносФайловВТома/Forms/Форма/Form.form @@ -347,7 +347,6 @@ Vertical true true - UseIfNecessary auto true @@ -455,7 +454,7 @@ ВыполнитьПереносФайловВТома - Auto + DontUse Auto diff --git a/SSL/src/DataProcessors/ПереносФайловВТома/Forms/Форма/Module.bsl b/SSL/src/DataProcessors/ПереносФайловВТома/Forms/Форма/Module.bsl index 147d7a26e..d99590c3c 100644 --- a/SSL/src/DataProcessors/ПереносФайловВТома/Forms/Форма/Module.bsl +++ b/SSL/src/DataProcessors/ПереносФайловВТома/Forms/Форма/Module.bsl @@ -87,7 +87,7 @@ Состояние(НСтр("ru = 'Выполняется получение списка файлов...'")); МассивВерсий = ПолучитьМассивВерсийВБазе(); - НомерЦикла = 0; + НомерЦикла = 1; ЧислоПеренесенных = 0; ЧислоВерсийВПакете = 10; @@ -100,7 +100,7 @@ Прогресс = 0; Если ЧислоВерсийВБазе <> 0 Тогда - Прогресс = НомерЦикла * 100 / ЧислоВерсийВБазе; + Прогресс = Окр(НомерЦикла * 100 / ЧислоВерсийВБазе, 2); КонецЕсли; Состояние(НСтр("ru = 'Выполняется перенос файла в том...'"), Прогресс, ВерсияСтруктура.Текст, БиблиотекаКартинок.УстановитьВремя); @@ -113,26 +113,26 @@ Если ЧислоПеренесенныхВПакете = 0 И ПакетВерсий.Количество() = ЧислоВерсийВПакете Тогда ОбработкаПрервана = Истина; // Весь пакет не смогли перенести - прекращаем операцию. Прервать; - КонецЕсли; + КонецЕсли; ЧислоПеренесенных = ЧислоПеренесенных + ЧислоПеренесенныхВПакете; ПакетВерсий.Очистить(); - КонецЕсли; + КонецЕсли; НомерЦикла = НомерЦикла + 1; - КонецЦикла; + КонецЦикла; Если ПакетВерсий.Количество() <> 0 Тогда ЧислоПеренесенныхВПакете = ПеренестиМассивВерсийВТом(ПакетВерсий, МассивФайловСОшибками); Если ЧислоПеренесенныхВПакете = 0 Тогда ОбработкаПрервана = Истина; // Весь пакет не смогли перенести - прекращаем операцию. - КонецЕсли; + КонецЕсли; ЧислоПеренесенных = ЧислоПеренесенных + ЧислоПеренесенныхВПакете; ПакетВерсий.Очистить(); - КонецЕсли; + КонецЕсли; ЧислоВерсийВБазе = ПолучитьЧислоВерсийВБазе(); РазмерВерсийВБазеВБайтах = ПолучитьРазмерВерсийВБазе(); diff --git a/SSL/src/DataProcessors/ПоискИУдалениеДублей/Forms/ОбластьПоискаДублей/Form.form b/SSL/src/DataProcessors/ПоискИУдалениеДублей/Forms/ОбластьПоискаДублей/Form.form index 150af8d2e..f2526accc 100644 --- a/SSL/src/DataProcessors/ПоискИУдалениеДублей/Forms/ОбластьПоискаДублей/Form.form +++ b/SSL/src/DataProcessors/ПоискИУдалениеДублей/Forms/ОбластьПоискаДублей/Form.form @@ -295,7 +295,7 @@ Выбрать - Auto + DontUse Auto diff --git a/SSL/src/DataProcessors/ПоискИУдалениеДублей/Forms/ОбластьПоискаДублей/Module.bsl b/SSL/src/DataProcessors/ПоискИУдалениеДублей/Forms/ОбластьПоискаДублей/Module.bsl index cc134bd9b..1fa101a8f 100644 --- a/SSL/src/DataProcessors/ПоискИУдалениеДублей/Forms/ОбластьПоискаДублей/Module.bsl +++ b/SSL/src/DataProcessors/ПоискИУдалениеДублей/Forms/ОбластьПоискаДублей/Module.bsl @@ -68,12 +68,12 @@ &НаСервере Процедура ИнициализироватьСписокОбластейПоискаДублей() - ОбъектОбработки = РеквизитФормыВЗначение("Объект"); - ОбъектОбработки.ОбластиПоискаДублей(ОбластиПоискаДублей); + ОбработкаОбъект = РеквизитФормыВЗначение("Объект"); + ОбластиПоискаДублей = ОбработкаОбъект.ОбластиПоискаДублей(Ложь); ОбластиПоискаДублей.СортироватьПоПредставлению(); Элемент = ОбластиПоискаДублей.НайтиПоЗначению(ОбластьПоУмолчанию); - Если Элемент<>Неопределено Тогда + Если Элемент <> Неопределено Тогда Элементы.ОбластиПоискаДублей.ТекущаяСтрока = Элемент.ПолучитьИдентификатор(); КонецЕсли; diff --git a/SSL/src/DataProcessors/ПоискИУдалениеДублей/Forms/ПоискДублей/Form.form b/SSL/src/DataProcessors/ПоискИУдалениеДублей/Forms/ПоискДублей/Form.form index 88dccedff..a3f7c9dff 100644 --- a/SSL/src/DataProcessors/ПоискИУдалениеДублей/Forms/ПоискДублей/Form.form +++ b/SSL/src/DataProcessors/ПоискИУдалениеДублей/Forms/ПоискДублей/Form.form @@ -534,9 +534,53 @@ НайденныеДубли None + Change ИспользоватьНаименование 109 + + НайденныеДублиНаименование + 100 + true + true + + true + + + НайденныеДубли.Наименование + + + НайденныеДублиНаименованиеРасширеннаяПодсказка + 102 + Label + true + true + + Left + + + + НайденныеДублиНаименованиеКонтекстноеМеню + 101 + true + + InputField + true + Auto + true + Left + true + + 5 + true + true + true + true + true + true + Normal + + НайденныеДублиОсновной 114 @@ -624,49 +668,6 @@ true - - НайденныеДублиНаименование - 100 - true - true - - true - - - НайденныеДубли.Наименование - - - НайденныеДублиНаименованиеРасширеннаяПодсказка - 102 - Label - true - true - - Left - - - - НайденныеДублиНаименованиеКонтекстноеМеню - 101 - true - - InputField - true - Auto - true - Left - true - - 5 - true - true - true - true - true - true - Normal - - true true @@ -702,9 +703,7 @@ 111 true true - - true - + НайденныеДубли.Код @@ -917,6 +916,151 @@ UserCmds Auto + + НайденныеДублиКонтекстноеМенюГруппаИзменить + 422 + + НайденныеДублиКонтекстноеМенюОткрытьКандидатаВДубли1 + 430 + true + true + + true + + + НайденныеДублиКонтекстноеМенюОткрытьКандидатаВДубли1РасширеннаяПодсказка + 431 + Label + true + true + + Left + + + Form.Command.ОткрытьКандидатаВДубли + Normal + Auto + true + true + UserCmds + Auto + + true + true + + true + + + НайденныеДублиКонтекстноеМенюГруппаИзменитьРасширеннаяПодсказка + 423 + Label + true + true + + Left + + + + + + НайденныеДублиКонтекстноеМенюКопироватьВБуферОбмена + 418 + true + true + + true + + + НайденныеДублиКонтекстноеМенюКопироватьВБуферОбменаРасширеннаяПодсказка + 419 + Label + true + true + + Left + + + Form.Item.НайденныеДубли.StandardCommand.CopyToClipboard + Normal + Auto + true + true + UserCmds + Auto + + + НайденныеДублиКонтекстноеМенюВывестиСписок + 416 + true + true + + true + + + НайденныеДублиКонтекстноеМенюВывестиСписокРасширеннаяПодсказка + 417 + Label + true + true + + Left + + + Form.Item.НайденныеДубли.StandardCommand.OutputList + Normal + Auto + true + true + UserCmds + Auto + + + НайденныеДублиКонтекстноеМенюГруппаИзменитьФорму + 426 + + НайденныеДублиКонтекстноеМенюИзменитьФорму + 424 + true + true + + true + + + НайденныеДублиКонтекстноеМенюИзменитьФормуРасширеннаяПодсказка + 425 + Label + true + true + + Left + + + Form.StandardCommand.CustomizeForm + Normal + Auto + true + true + UserCmds + Auto + + true + true + + true + + + НайденныеДублиКонтекстноеМенюГруппаИзменитьФормуРасширеннаяПодсказка + 427 + Label + true + true + + Left + + + + + true Tree 45 @@ -1102,6 +1246,32 @@ МестаИспользованияКандидатаКонтекстноеМеню 138 + + МестаИспользованияКандидатаКонтекстноеМенюВывестиСписок + 446 + true + true + + true + + + МестаИспользованияКандидатаКонтекстноеМенюВывестиСписокРасширеннаяПодсказка + 447 + Label + true + true + + Left + + + Form.Item.МестаИспользованияКандидата.StandardCommand.OutputList + Normal + Auto + true + true + UserCmds + Auto + true true @@ -1557,7 +1727,6 @@ Декорация4 355 - true true true @@ -1611,9 +1780,9 @@ 353 true - 5 + 6 true - 1 + 3 true @@ -1650,15 +1819,16 @@ LabelField Left - Top + Center Enter true Left true true + 3 true - true + false true @@ -1698,6 +1868,7 @@ ru Шаг успешное удаление + true ШагУспешноеУдалениеРасширеннаяПодсказка 213 @@ -1837,6 +2008,7 @@ НеобработанныеДубли None + Change ОсновнойНаименование 246 @@ -1961,9 +2133,7 @@ 293 true true - - true - + НеобработанныеДубли.Код @@ -2149,6 +2319,151 @@ НеобработанныеДублиКонтекстноеМеню 243 + + НеобработанныеДублиКонтекстноеМенюГруппаОткрыть + 442 + + НеобработанныеДублиКонтекстноеМенюОткрытьНеобработанныйДубль + 432 + true + true + + true + + + НеобработанныеДублиКонтекстноеМенюОткрытьНеобработанныйДубльРасширеннаяПодсказка + 433 + Label + true + true + + Left + + + Form.Command.ОткрытьНеобработанныйДубль + Normal + Auto + true + true + UserCmds + Auto + + true + true + + true + + + НеобработанныеДублиКонтекстноеМенюГруппаОткрытьРасширеннаяПодсказка + 443 + Label + true + true + + Left + + + + + + НеобработанныеДублиКонтекстноеМенюКопироватьВБуферОбмена + 434 + true + true + + true + + + НеобработанныеДублиКонтекстноеМенюКопироватьВБуферОбменаРасширеннаяПодсказка + 435 + Label + true + true + + Left + + + Form.Item.НеобработанныеДубли.StandardCommand.CopyToClipboard + Normal + Auto + true + true + UserCmds + Auto + + + НеобработанныеДублиКонтекстноеМенюВывестиСписок + 436 + true + true + + true + + + НеобработанныеДублиКонтекстноеМенюВывестиСписокРасширеннаяПодсказка + 437 + Label + true + true + + Left + + + Form.Item.НеобработанныеДубли.StandardCommand.OutputList + Normal + Auto + true + true + UserCmds + Auto + + + НеобработанныеДублиКонтекстноеМенюГруппаИзменитьФорму + 440 + + НеобработанныеДублиКонтекстноеМенюИзменитьФорму + 438 + true + true + + true + + + НеобработанныеДублиКонтекстноеМенюИзменитьФормуРасширеннаяПодсказка + 439 + Label + true + true + + Left + + + Form.StandardCommand.CustomizeForm + Normal + Auto + true + true + UserCmds + Auto + + true + true + + true + + + НеобработанныеДублиКонтекстноеМенюГруппаИзменитьФормуРасширеннаяПодсказка + 441 + Label + true + true + + Left + + + + + true Tree true @@ -2377,6 +2692,32 @@ МестаИспользованияНеобработанныхКонтекстноеМеню 270 + + МестаИспользованияНеобработанныхКонтекстноеМенюВывестиСписок + 444 + true + true + + true + + + МестаИспользованияНеобработанныхКонтекстноеМенюВывестиСписокРасширеннаяПодсказка + 445 + Label + true + true + + Left + + + Form.Item.МестаИспользованияНеобработанных.StandardCommand.OutputList + Normal + Auto + true + true + UserCmds + Auto + true true @@ -3370,10 +3711,6 @@ Left true - - ChoiceProcessing - ОбработкаВыбора - OnOpen ПриОткрытии @@ -3390,21 +3727,16 @@ OnClose ПриЗакрытии - - BeforeLoadDataFromSettingsAtServer - ПередЗагрузкойДанныхИзНастроекНаСервере - 75 14 LockOwner - Use - UseList true true Vertical true true true + UseIfNecessary auto true @@ -3440,28 +3772,10 @@ - БазовоеИмяФормы + НастройкиОбъектовМетаданных <key>ru</key> - <value>Базовое имя формы</value> - - 3 - - String - - - - true - - - true - - - - ОбластиПоискаДублей - - <key>ru</key> - <value>Области поиска дублей</value> + <value>Настройки объектов метаданных</value> 4 @@ -3494,9 +3808,6 @@ true - - ОбластьПоискаДублей - КомпоновщикПредварительногоОтбора @@ -4274,6 +4585,65 @@ true + + НечеткийПоиск + + <key>ru</key> + <value>Нечеткий поиск</value> + + 29 + + Boolean + + + true + + + true + + + + ВсегоНайденоДублей + + <key>ru</key> + <value>Всего найдено дублей</value> + + 30 + + Number + + 10 + true + + + + true + + + true + + + + ВсегоЭлементов + + <key>ru</key> + <value>Всего элементов</value> + + 31 + + Number + + 10 + true + + + + true + + + true + + ВыбратьОсновнойЭлемент @@ -4297,7 +4667,7 @@ </handler> </action> <representation>TextPicture</representation> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <formCommands> @@ -4319,7 +4689,7 @@ <name>ОткрытьКандидатаВДубли</name> </handler> </action> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <formCommands> @@ -4344,7 +4714,7 @@ <name>РазвернутьГруппыДублей</name> </handler> </action> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <formCommands> @@ -4369,7 +4739,7 @@ <name>СвернутьГруппыДублей</name> </handler> </action> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <formCommands> @@ -4391,7 +4761,7 @@ <name>ШагМастераДалее</name> </handler> </action> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <formCommands> @@ -4413,7 +4783,7 @@ <name>ШагМастераНазад</name> </handler> </action> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <formCommands> @@ -4435,7 +4805,7 @@ <name>ШагМастераОтмена</name> </handler> </action> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <formCommands> @@ -4457,7 +4827,29 @@ <name>ПовторитьПоиск</name> </handler> </action> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> + <selectedRowsUse>Auto</selectedRowsUse> + </formCommands> + <formCommands> + <name>ОткрытьНеобработанныйДубль</name> + <title> + <key>ru</key> + <value>Открыть</value> + + 1 + + ru + Открыть элемент + + + true + + + + ОткрытьНеобработанныйДубль + + + DontUse Auto diff --git a/SSL/src/DataProcessors/ПоискИУдалениеДублей/Forms/ПоискДублей/Module.bsl b/SSL/src/DataProcessors/ПоискИУдалениеДублей/Forms/ПоискДублей/Module.bsl index 824481653..883b69ebc 100644 --- a/SSL/src/DataProcessors/ПоискИУдалениеДублей/Forms/ПоискДублей/Module.bsl +++ b/SSL/src/DataProcessors/ПоискИУдалениеДублей/Forms/ПоискДублей/Module.bsl @@ -7,9 +7,16 @@ Возврат; КонецЕсли; - ИнициализироватьОсновныеПараметры(); + Если ПодключитьВнешнююКомпоненту("ОбщийМакет.КомпонентаПоискаСтрок", "FuzzySearch", ТипВнешнейКомпоненты.Native) Тогда + НечеткийПоиск = Истина; + КонецЕсли; + + НастройкиФормы = ОбщегоНазначения.ХранилищеОбщихНастроекЗагрузить(ИмяФормы, ""); + + ПриСозданииНаСервереИнициализацияДанных(НастройкиФормы); + + ИнициализироватьКомпоновщикОтбораИПравила(НастройкиФормы); - ИнициализироватьКомпоновщикОтбораИПравила(); // Схема должна быть переформирована всегда, настройки компоновщика - в разрезе ОбластьПоискаДублей. // Постоянный интерфейс @@ -43,14 +50,12 @@ // Автосохранение настроек СохраняемыеВНастройкахДанныеМодифицированы = Истина; + КонецПроцедуры &НаКлиенте Процедура ПриОткрытии(Отказ) - // Контролируем корректность установок. - ОбновитьУстановкиОбластиДублей(ОбластьПоискаДублей); - // Указываем стартовую страницу. УстановитьНачальнуюСтраницуМастера(Элементы.ШагПоискНеВыполнялся); ЗапуститьРаботуМастера(); @@ -75,46 +80,7 @@ И НастройкиПошаговогоМастера.ИдентификаторФоновогоЗадания <> Неопределено Тогда ФоновоеЗаданиеОтменить(); КонецЕсли; -КонецПроцедуры - -&НаКлиенте -Процедура ОбработкаВыбора(ВыбранноеЗначение, ИсточникВыбора) - - Если ВыбранноеЗначение = Неопределено Тогда - Возврат; - КонецЕсли; - - ИмяФормыИсточника = Сред(ИсточникВыбора.ИмяФормы, СтрДлина(БазовоеИмяФормы) + 1); - Если ИмяФормыИсточника = "ПравилаОтбора" Тогда - ОбновитьКомпоновщикОтбора(ВыбранноеЗначение); - ОбновитьОписаниеОтбора(); - - ПерейтиНаШагМастера(Элементы.ШагПоискНеВыполнялся, Истина); - - ИначеЕсли ИмяФормыИсточника = "ОбластьПоискаДублей" Тогда - ОбновитьУстановкиОбластиДублей(ВыбранноеЗначение); - - ПерейтиНаШагМастера(Элементы.ШагПоискНеВыполнялся, Истина); - - ИначеЕсли ИмяФормыИсточника = "ПравилаПоиска" Тогда - ОбновитьПравилаПоиска(ВыбранноеЗначение); - ОбновитьОписаниеПравилПоиска(); - - ПерейтиНаШагМастера(Элементы.ШагПоискНеВыполнялся, Истина); - - КонецЕсли; - -КонецПроцедуры - -&НаСервере -Процедура ПередЗагрузкойДанныхИзНастроекНаСервере(Настройки) - - // Убеждаемся, что область дублей корректная по списку. - КлючНастройки = "ОбластьПоискаДублей"; - Если ОбластиПоискаДублей.НайтиПоЗначению( Настройки[КлючНастройки] ) = Неопределено Тогда - Настройки.Удалить(КлючНастройки); - КонецЕсли; - + ПриЗакрытииСохранениеДанных(); КонецПроцедуры #КонецОбласти @@ -125,10 +91,25 @@ Процедура ПредставлениеОбластиПоискаНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка) СтандартнаяОбработка = Ложь; + Имя = ПолноеИмяФормы("ОбластьПоискаДублей"); + ПараметрыФормы = Новый Структура; ПараметрыФормы.Вставить("ОбластьПоискаДублей", ОбластьПоискаДублей); - ОткрытьФорму(БазовоеИмяФормы + "ОбластьПоискаДублей", ПараметрыФормы, ЭтотОбъект); + Обработчик = Новый ОписаниеОповещения("ОбластьПоискаДублейЗавершениеВыбора", ЭтотОбъект); + + ОткрытьФорму(Имя, ПараметрыФормы, ЭтотОбъект, , , , Обработчик); +КонецПроцедуры + +&НаКлиенте +Процедура ОбластьПоискаДублейЗавершениеВыбора(Результат, ПараметрыВыполнения) Экспорт + Если ТипЗнч(Результат) <> Тип("Строка") Тогда + Возврат; + КонецЕсли; + + ОбластьПоискаДублей = Результат; + ИнициализироватьКомпоновщикОтбораИПравила(Неопределено); + ПерейтиНаШагМастера(Элементы.ШагПоискНеВыполнялся, Истина); КонецПроцедуры &НаКлиенте @@ -141,16 +122,14 @@ &НаКлиенте Процедура ВсеМестаИспользованияНеобработанныхНажатие(Элемент) - ПараметрыОтчета = ПараметрыОтчетаМестИспользования(НеобработанныеДубли); - ОткрытьФорму("Отчет.МестаИспользованияСсылок.Форма", ПараметрыОтчета); + ПоказатьМестаИспользования(НеобработанныеДубли); КонецПроцедуры &НаКлиенте Процедура ВсеМестаИспользованияНажатие(Элемент) - ПараметрыОтчета = ПараметрыОтчетаМестИспользования(НайденныеДубли); - ОткрытьФорму("Отчет.МестаИспользованияСсылок.Форма", ПараметрыОтчета); + ПоказатьМестаИспользования(НайденныеДубли); КонецПроцедуры @@ -158,13 +137,29 @@ Процедура ПредставлениеПравилОтбораНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка) СтандартнаяОбработка = Ложь; + Имя = ПолноеИмяФормы("ПравилаОтбора"); + ПараметрыФормы = Новый Структура; ПараметрыФормы.Вставить("АдресСхемыКомпоновки", АдресСхемыКомпоновки); ПараметрыФормы.Вставить("АдресНастроекКомпоновщикаОтбора", АдресНастроекКомпоновщикаОтбора()); ПараметрыФормы.Вставить("ИдентификаторОсновнойФормы", УникальныйИдентификатор); ПараметрыФормы.Вставить("ПредставлениеОбластиОтбора", ПредставлениеОбластиПоискаДублей); - ОткрытьФорму(БазовоеИмяФормы + "ПравилаОтбора", ПараметрыФормы, ЭтотОбъект); + Обработчик = Новый ОписаниеОповещения("ПравилаОтбораЗавершениеВыбора", ЭтотОбъект); + + ОткрытьФорму(Имя, ПараметрыФормы, ЭтотОбъект, , , , Обработчик); +КонецПроцедуры + +&НаКлиенте +Процедура ПравилаОтбораЗавершениеВыбора(Результат, ПараметрыВыполнения) Экспорт + Если ТипЗнч(Результат) <> Тип("Строка") Тогда + Возврат; + КонецЕсли; + + ОбновитьКомпоновщикОтбора(Результат); + ОбновитьОписаниеОтбора(); + + ПерейтиНаШагМастера(Элементы.ШагПоискНеВыполнялся, Истина); КонецПроцедуры &НаКлиенте @@ -178,13 +173,29 @@ Процедура ПредставлениеПравилПоискаНажатие(Элемент, СтандартнаяОбработка) СтандартнаяОбработка = Ложь; + Имя = ПолноеИмяФормы("ПравилаПоиска"); + ПараметрыФормы = Новый Структура; ПараметрыФормы.Вставить("ОбластьПоискаДублей", ОбластьПоискаДублей); ПараметрыФормы.Вставить("ОписаниеПрикладныхПравил", ОписаниеПрикладныхПравил); ПараметрыФормы.Вставить("АдресНастроек", АдресНастроекПравилПоиска()); ПараметрыФормы.Вставить("ПредставлениеОбластиОтбора", ПредставлениеОбластиПоискаДублей); - ОткрытьФорму(БазовоеИмяФормы + "ПравилаПоиска", ПараметрыФормы, ЭтотОбъект); + Обработчик = Новый ОписаниеОповещения("ПравилаПоискаЗавершениеВыбора", ЭтотОбъект); + + ОткрытьФорму(Имя, ПараметрыФормы, ЭтотОбъект, , , , Обработчик); +КонецПроцедуры + +&НаКлиенте +Процедура ПравилаПоискаЗавершениеВыбора(Результат, ПараметрыВыполнения) Экспорт + Если ТипЗнч(Результат) <> Тип("Строка") Тогда + Возврат; + КонецЕсли; + + ОбновитьПравилаПоиска(Результат); + ОбновитьОписаниеПравилПоиска(); + + ПерейтиНаШагМастера(Элементы.ШагПоискНеВыполнялся, Истина); КонецПроцедуры #КонецОбласти @@ -227,7 +238,8 @@ Элементы.ОписаниеТекущейГруппыДублей.Заголовок = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Для элемента ""%1"" найдено дублей: %2'"), - НаименованиеОригинала, ДанныеСтроки.Количество); + НаименованиеОригинала, + ДанныеСтроки.Количество); Элементы.СтраницыМестаИспользования.ТекущаяСтраница = Элементы.ОписаниеГруппы; Возврат; @@ -237,9 +249,7 @@ ТаблицаИспользования = ПолучитьИзВременногоХранилища(АдресМестИспользования); Фильтр = Новый Структура("Ссылка", ДанныеСтроки.Ссылка); - МестаИспользованияКандидата.Загрузить( - ТаблицаИспользования.Скопировать( ТаблицаИспользования.НайтиСтроки(Фильтр) ) - ); + МестаИспользованияКандидата.Загрузить(ТаблицаИспользования.Скопировать(ТаблицаИспользования.НайтиСтроки(Фильтр))); Если ДанныеСтроки.Количество = 0 Тогда Элементы.ОписаниеТекущейГруппыДублей.Заголовок = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( @@ -250,7 +260,8 @@ Иначе Элементы.МестаИспользованияКандидата.Заголовок = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Места использования ""%1"" (%2)'"), - ДанныеСтроки.Наименование, ДанныеСтроки.Количество); + ДанныеСтроки.Наименование, + ДанныеСтроки.Количество); Элементы.СтраницыМестаИспользования.ТекущаяСтраница = Элементы.МестаИспользования; КонецЕсли; @@ -271,6 +282,11 @@ ДанныеСтроки.Пометка = ДанныеСтроки.Пометка % 2; ИзменитьПометкиКандидатовИерархически(ДанныеСтроки); + + ПересчитатьКоличествоНайденныхДублей(); + + ОбновитьОписаниеСостоянияНайденныхДублей(ЭтотОбъект); + КонецПроцедуры #КонецОбласти @@ -384,10 +400,8 @@ Процедура ВыбратьОсновнойЭлемент(Команда) ДанныеСтроки = Элементы.НайденныеДубли.ТекущиеДанные; - Если ДанныеСтроки = Неопределено // Нет данных - Или ДанныеСтроки.Основной // Текущий уже основной - Тогда - Возврат; + Если ДанныеСтроки = Неопределено Или ДанныеСтроки.Основной Тогда + Возврат; // Нет данных или Текущий уже основной. КонецЕсли; Родитель = ДанныеСтроки.ПолучитьРодителя(); @@ -405,6 +419,13 @@ КонецПроцедуры +&НаКлиенте +Процедура ОткрытьНеобработанныйДубль(Команда) + + ОткрытьФормуДубля(Элементы.НеобработанныеДубли.ТекущиеДанные); + +КонецПроцедуры + &НаКлиенте Процедура РазвернутьГруппыДублей(Команда) @@ -445,21 +466,50 @@ #Область СлужебныеПроцедурыИФункции +//////////////////////////////////////////////////////////////////////////////// +// Клиент + &НаКлиенте -Процедура ОбновитьУстановкиОбластиДублей(Знач ВыбранноеЗначение) - - Элемент = ОбластиПоискаДублей.НайтиПоЗначению(ВыбранноеЗначение); - Если Элемент = Неопределено Тогда - ПредставлениеОбластиПоискаДублей = ""; - ОбластьПоискаДублей = ""; +Функция ПолноеИмяФормы(КраткоеИмяФормы) + Имена = СтрРазделить(ИмяФормы, "."); + Возврат Имена[0] + "." + Имена[1] + ".Форма." + КраткоеИмяФормы; +КонецФункции + + +//////////////////////////////////////////////////////////////////////////////// +// Сервер + +&НаСервере +Процедура ПриСозданииНаСервереИнициализацияДанных(НастройкиФормы) + Если НастройкиФормы = Неопределено Тогда + УчитыватьПрикладныеПравила = Истина; + ОбластьПоискаДублей = ""; Иначе - ПредставлениеОбластиПоискаДублей = Элемент.Представление; - ОбластьПоискаДублей = ВыбранноеЗначение; + УчитыватьПрикладныеПравила = ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(НастройкиФормы, "УчитыватьПрикладныеПравила"); + ОбластьПоискаДублей = ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(НастройкиФормы, "ОбластьПоискаДублей"); КонецЕсли; - ИнициализироватьКомпоновщикОтбораИПравила(); + ОбработкаОбъект = РеквизитФормыВЗначение("Объект"); + НастройкиОбъектовМетаданных = ОбработкаОбъект.ОбластиПоискаДублей(Истина); + + ВсеВариантыСравнения.Добавить("Равно", НСтр("ru = 'Совпадает'")); + ВсеВариантыСравнения.Добавить("Подобно", НСтр("ru = 'Совпадает по похожим словам'")); + КонецПроцедуры +&НаСервере +Процедура ПриЗакрытииСохранениеДанных() + НастройкиФормы = Новый Структура; + НастройкиФормы.Вставить("УчитыватьПрикладныеПравила", УчитыватьПрикладныеПравила); + НастройкиФормы.Вставить("ОбластьПоискаДублей", ОбластьПоискаДублей); + НастройкиФормы.Вставить("НастройкиКД", КомпоновщикПредварительногоОтбора.Настройки); + НастройкиФормы.Вставить("ПравилаПоиска", ПравилаПоиска.Выгрузить()); + ОбщегоНазначения.ХранилищеОбщихНастроекСохранить(ИмяФормы, "", НастройкиФормы); +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// Прочее + &НаКлиенте Процедура ОткрытьФормуДубля(Знач ТекущиеДанные) Если ТекущиеДанные = Неопределено Или Не ЗначениеЗаполнено(ТекущиеДанные.Ссылка) Тогда @@ -564,7 +614,7 @@ ОтборОформления.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно; ОтборОформления.ПравоеЗначение = 0; - ЭлементОформления.Оформление.УстановитьЗначениеПараметра("Текст", НСтр("ru = '–'")); + ЭлементОформления.Оформление.УстановитьЗначениеПараметра("Текст", НСтр("ru = '-'")); ПолеОформления = ЭлементОформления.Поля.Элементы.Добавить(); ПолеОформления.Поле = Новый ПолеКомпоновкиДанных("НайденныеДублиКоличество"); @@ -615,19 +665,19 @@ КонецФункции &НаКлиенте -Функция ПараметрыОтчетаМестИспользования(Знач Источник) - - ПараметрыОтчета = Новый Структура; - ПараметрыОтчета.Вставить("НаборСсылок", Новый Массив); - - Для Каждого Родитель Из Источник.ПолучитьЭлементы() Цикл - Для Каждого Потомок Из Родитель.ПолучитьЭлементы() Цикл - ПараметрыОтчета.НаборСсылок.Добавить(Потомок.Ссылка); +Процедура ПоказатьМестаИспользования(ДеревоИсточник) + МассивСсылок = Новый Массив; + Для Каждого ГруппаДублей Из ДеревоИсточник.ПолучитьЭлементы() Цикл + Для Каждого СтрокаДерева Из ГруппаДублей.ПолучитьЭлементы() Цикл + МассивСсылок.Добавить(СтрокаДерева.Ссылка); КонецЦикла; КонецЦикла; - Возврат ПараметрыОтчета; -КонецФункции + ПараметрыОтчета = Новый Структура; + ПараметрыОтчета.Вставить("Отбор", Новый Структура("НаборСсылок", МассивСсылок)); + РежимОкна = РежимОткрытияОкнаФормы.БлокироватьОкноВладельца; + ОткрытьФорму("Отчет.МестаИспользованияСсылок.Форма", ПараметрыОтчета, ЭтотОбъект, , , , , РежимОкна); +КонецПроцедуры &НаКлиенте Процедура РазвернутьГруппуДублейИерархически(Знач СтрокаДанных = Неопределено) @@ -700,6 +750,31 @@ КонецПроцедуры +&НаКлиентеНаСервереБезКонтекста +Процедура ОбновитьОписаниеСостоянияНайденныхДублей(Форма) + + Форма.ОписаниеСостоянияНайденныхДублей = Новый ФорматированнаяСтрока( + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Найдено дублей: %2 (среди элементов: %1). Все отмеченные элементы будут помечены на удаление и заменены во всех местах использования на оригиналы (отмечены стрелкой).'"), + Форма.ВсегоЭлементов, + Форма.ВсегоНайденоДублей), + , + Форма.ЦветПоясняющийТекст); + +КонецПроцедуры + +&НаКлиенте +Процедура ПересчитатьКоличествоНайденныхДублей() + ВсегоНайденоДублей = 0; + Для Каждого Дубль Из НайденныеДубли.ПолучитьЭлементы() Цикл + Для Каждого Потомок Из Дубль.ПолучитьЭлементы() Цикл + Если Не Потомок.Основной И Потомок.Пометка Тогда + ВсегоНайденоДублей = ВсегоНайденоДублей + 1; + КонецЕсли; + КонецЦикла; + КонецЦикла; +КонецПроцедуры + &НаКлиенте Процедура ИзменитьОсновнойЭлементИерархически(Знач ДанныеСтроки, Знач Родитель) Для Каждого Потомок Из Родитель.ПолучитьЭлементы() Цикл @@ -712,20 +787,20 @@ ИзменитьПометкиКандидатовИерархически(ДанныеСтроки); // И изменяем название группы - Родитель.Наименование = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = '%1 (%2)'"), - ДанныеСтроки.Наименование, Родитель.Количество); + Родитель.Наименование = ДанныеСтроки.Наименование + " (" + Родитель.Количество + ")"; КонецПроцедуры &НаСервере Функция ЗаполнитьРезультатыПоискаДублей(Знач Данные) // Данные - результат функции ГруппыДублей модуля. - Если Не ПустаяСтрока(Данные.ОписаниеОшибки) Тогда - // Фоновое сломалось - ОписаниеСостоянияНайденныхДублей = Новый ФорматированнаяСтрока(Элементы.Внимание16.Картинка, " ", + + Если Не ПустаяСтрока(Данные.ОписаниеОшибки) Тогда // Фоновое сломалось + ОписаниеСостоянияНайденныхДублей = Новый ФорматированнаяСтрока(Элементы.Внимание16.Картинка, Новый ФорматированнаяСтрока(Данные.ОписаниеОшибки, , ЦветПоясняющийОшибкуТекст)); Возврат -1; КонецЕсли; + // Нет ошибок поиска // Строим дерево для редактирования по таблицам результата. ЭлементыДерева = НайденныеДубли.ПолучитьЭлементы(); ЭлементыДерева.Очистить(); @@ -782,18 +857,16 @@ КонецЕсли; АдресМестИспользования = ПоместитьВоВременноеХранилище(МестаИспользования, УникальныйИдентификатор); - // Нет ошибок поиска + ВсегоЭлементов = ВсегоНайденоДублей; + ВсегоНайденоДублей = ВсегоНайденоДублей - ЭлементыДерева.Количество(); Если ВсегоНайденоДублей = 0 Тогда ОписаниеСостоянияНайденныхДублей = Новый ФорматированнаяСтрока(Элементы.Информация16.Картинка, " ", НСтр("ru = 'Не обнаружено дублей по указанным условиям.'")); Иначе - ОписаниеСостоянияНайденныхДублей = Новый ФорматированнаяСтрока(СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Найдено дублей: %2 (среди элементов: %1). Все отмеченные элементы будут помечены на удаление и заменены во всех местах использования на оригиналы (отмечены стрелкой).'"), - ВсегоНайденоДублей, ВсегоНайденоДублей - ЭлементыДерева.Количество()), - , ЦветПоясняющийТекст); + ОбновитьОписаниеСостоянияНайденныхДублей(ЭтотОбъект); КонецЕсли; - Возврат ВсегоНайденоДублей; + Возврат ВсегоЭлементов; КонецФункции &НаСервере @@ -827,21 +900,26 @@ Если ВсегоОсновных = 1 Тогда // Много дублей в один элемент. Если ПоследнийКандидат = Неопределено Тогда - ОписаниеСостоянияНайденныхДублей = Новый ФорматированнаяСтрока(СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Все найденные дубли (%1) успешно объединены'"), ВсегоОбработано)); + ОписаниеСостоянияНайденныхДублей = Новый ФорматированнаяСтрока( + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Все найденные дубли (%1) успешно объединены'"), + ВсегоОбработано)); Иначе ПоследнийКандидатСтрокой = ОбщегоНазначения.ПредметСтрокой(ПоследнийКандидат); - ОписаниеСостоянияНайденныхДублей = Новый ФорматированнаяСтрока(СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Все найденные дубли (%1) успешно объединены - |в ""%2""'"), - ВсегоОбработано, ПоследнийКандидатСтрокой)); + ОписаниеСостоянияНайденныхДублей = Новый ФорматированнаяСтрока( + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Все найденные дубли (%1) успешно объединены + |в ""%2""'"), + ВсегоОбработано, ПоследнийКандидатСтрокой)); КонецЕсли; Иначе // Много дублей во много групп. - ОписаниеСостоянияНайденныхДублей = Новый ФорматированнаяСтрока(СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Все найденные дубли (%1) успешно объединены. - |Оставлено элементов (%2).'"), - ВсегоОбработано, ВсегоОсновных)); + ОписаниеСостоянияНайденныхДублей = Новый ФорматированнаяСтрока( + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Все найденные дубли (%1) успешно объединены. + |Оставлено элементов (%2).'"), + ВсегоОбработано, + ВсегоОсновных)); КонецЕсли; КонецЕсли; @@ -909,7 +987,7 @@ &НаСервере Функция АдресНастроекКомпоновщикаОтбора() - Возврат ПоместитьВоВременноеХранилище(КомпоновщикПредварительногоОтбора.Настройки, УникальныйИдентификатор) + Возврат ПоместитьВоВременноеХранилище(КомпоновщикПредварительногоОтбора.Настройки, УникальныйИдентификатор); КонецФункции @@ -948,14 +1026,14 @@ Для Каждого Правило Из ПравилаПоиска Цикл Если Правило.Правило = "Равно" Тогда - Сравнение = НСтр("ru = '%1 совпадает'"); + Сравнение = Правило.ПредставлениеРеквизита + " " + НСтр("ru = 'совпадает'"); ИначеЕсли Правило.Правило = "Подобно" Тогда - Сравнение = НСтр("ru = '%1 совпадает по похожим словам'"); + Сравнение = Правило.ПредставлениеРеквизита + " " + НСтр("ru = 'совпадает по похожим словам'"); Иначе Сравнение = ""; КонецЕсли; - ТекстПравил = ТекстПравил + ?(ПустаяСтрока(Сравнение), "", Союз) + СтрЗаменить(Сравнение, "%1", Правило.ПредставлениеРеквизита); + ТекстПравил = ТекстПравил + ?(ТекстПравил = "" Или Сравнение = "", "", Союз) + Сравнение; КонецЦикла; ПрикладнойТекст = ""; @@ -971,8 +1049,6 @@ ТекстПравил = ТекстПравил + ПрикладнойТекст; Если ПустаяСтрока(ТекстПравил) Тогда ТекстПравил = НСтр("ru = 'Правила не заданы'"); - Иначе - ТекстПравил = СокрЛП(Сред(ТекстПравил, СтрДлина(Союз))); КонецЕсли; ПредставлениеПравилПоиска = ТекстПравил; Элементы.ПредставлениеПравилПоиска.Доступность = Не ПустаяСтрока(ОбластьПоискаДублей); @@ -988,70 +1064,96 @@ КонецПроцедуры &НаСервере -Процедура ИнициализироватьКомпоновщикОтбораИПравила() - // 1. Очистка всего - КомпоновщикПредварительногоОтбора = Новый КомпоновщикНастроекКомпоновкиДанных; - Если ЭтоАдресВременногоХранилища(АдресСхемыКомпоновки) Тогда - УдалитьИзВременногоХранилища(АдресСхемыКомпоновки); - АдресСхемыКомпоновки = ""; - КонецЕсли; - - ОписаниеПрикладныхПравил = Неопределено; - ПравилаПоиска.Очистить(); - - Если ПустаяСтрока(ОбластьПоискаДублей) Тогда +Процедура ИнициализироватьКомпоновщикОтбораИПравила(НастройкиФормы) + // 1. Очистка и инициализация сведений об объекте метаданных. + ПредставлениеПравилОтбора = ""; + ПредставлениеПравилПоиска = ""; + ПредставлениеОбластиПоискаДублей = ""; + ЭлементСписка = НастройкиОбъектовМетаданных.НайтиПоЗначению(ОбластьПоискаДублей); + Если ЭлементСписка = Неопределено Тогда + ОбластьПоискаДублей = ""; Возврат; КонецЕсли; + ПредставлениеОбластиПоискаДублей = ЭлементСписка.Представление; - МетаОбласть = Метаданные.НайтиПоПолномуИмени(ОбластьПоискаДублей); + ОбъектМетаданных = Метаданные.НайтиПоПолномуИмени(ОбластьПоискаДублей); - // 2. Собираем компоновщик для поиска - отбора. - ДоступныеРеквизитыОтбора = ДоступныеИменаМетаРеквизитовОтбора(МетаОбласть.СтандартныеРеквизиты); - ДоступныеРеквизитыОтбора = ?(ПустаяСтрока(ДоступныеРеквизитыОтбора), ",", ДоступныеРеквизитыОтбора) - + ДоступныеИменаМетаРеквизитовОтбора(МетаОбласть.Реквизиты); - + // 2. Инициализация СКД, которая используется для отборов. СхемаКомпоновки = Новый СхемаКомпоновкиДанных; ИсточникДанных = СхемаКомпоновки.ИсточникиДанных.Добавить(); ИсточникДанных.ТипИсточникаДанных = "Local"; НаборДанных = СхемаКомпоновки.НаборыДанных.Добавить(Тип("НаборДанныхЗапросСхемыКомпоновкиДанных")); - НаборДанных.Запрос = "ВЫБРАТЬ " + Сред(ДоступныеРеквизитыОтбора, 2) + " ИЗ " + ОбластьПоискаДублей; + НаборДанных.Запрос = "ВЫБРАТЬ " + ДоступныеРеквизитыОтбора(ОбъектМетаданных) + " ИЗ " + ОбластьПоискаДублей; НаборДанных.АвтоЗаполнениеДоступныхПолей = Истина; - // Сохраним схему в разрезе основной формы, чтобы компоновщик не терял актуальность. АдресСхемыКомпоновки = ПоместитьВоВременноеХранилище(СхемаКомпоновки, УникальныйИдентификатор); КомпоновщикПредварительногоОтбора.Инициализировать(Новый ИсточникДоступныхНастроекКомпоновкиДанных(СхемаКомпоновки)); - // 3. Собираем правила, предлагаемые нами по умолчанию для вида метаданных. - ИгнорируемыеРеквизиты = Новый Структура("ПометкаУдаления, Ссылка, Предопределенный, ИмяПредопределенныхДанных, ЭтоГруппа"); + // 3. Заполнение таблицы ПравилаПоиска. ТаблицаПравил = РеквизитФормыВЗначение("ПравилаПоиска"); + ТаблицаПравил.Очистить(); - ВсеВариантыСравнения.Очистить(); - ВсеВариантыСравнения.Добавить("Равно", НСтр("ru = 'Совпадает'")); - ВсеВариантыСравнения.Добавить("Подобно", НСтр("ru = 'Совпадает по похожим словам'")); - - ДобавитьПравилаМетаРеквизитов(ТаблицаПравил, ИгнорируемыеРеквизиты, ВсеВариантыСравнения, МетаОбласть.СтандартныеРеквизиты); - ДобавитьПравилаМетаРеквизитов(ТаблицаПравил, ИгнорируемыеРеквизиты, ВсеВариантыСравнения, МетаОбласть.Реквизиты); + ИгнорируемыеРеквизиты = Новый Структура("ПометкаУдаления, Ссылка, Предопределенный, ИмяПредопределенныхДанных, ЭтоГруппа"); + ДобавитьПравилаМетаРеквизитов(ТаблицаПравил, ИгнорируемыеРеквизиты, ВсеВариантыСравнения, ОбъектМетаданных.СтандартныеРеквизиты, НечеткийПоиск); + ДобавитьПравилаМетаРеквизитов(ТаблицаПравил, ИгнорируемыеРеквизиты, ВсеВариантыСравнения, ОбъектМетаданных.Реквизиты, НечеткийПоиск); - УстановитьЗначенияПравилПоУмолчанию(ОбластьПоискаДублей, КомпоновщикПредварительногоОтбора, ТаблицаПравил); + // 4. Загрузка сохраненных значений. + ОтборыЗагружены = Ложь; + НастройкиКД = ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(НастройкиФормы, "НастройкиКД"); + Если ТипЗнч(НастройкиКД) = Тип("НастройкиКомпоновкиДанных") Тогда + КомпоновщикПредварительногоОтбора.ЗагрузитьНастройки(НастройкиКД); + ОтборыЗагружены = Истина; + КонецЕсли; - // 4. Обрабатываем прикладные данные. - Если ОбластиПоискаДублей.НайтиПоЗначению(ОбластьПоискаДублей).Пометка Тогда - // Есть прикладной функционал + ПравилаЗагружены = Ложь; + СохраненныеПравила = ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(НастройкиФормы, "ПравилаПоиска"); + Если ТипЗнч(СохраненныеПравила) = Тип("ТаблицаЗначений") Тогда + ПравилаЗагружены = Истина; + Для Каждого СохраненноеПравило Из СохраненныеПравила Цикл + Правило = ТаблицаПравил.Найти(СохраненноеПравило.Реквизит, "Реквизит"); + Если Правило <> Неопределено + И Правило.ВариантыСравнения.НайтиПоЗначению(СохраненноеПравило.Правило) <> Неопределено Тогда + Правило.Правило = СохраненноеПравило.Правило; + КонецЕсли; + КонецЦикла; + КонецЕсли; + + // 5. Установка умолчаний. + // Отбор по пометке удаления. + Если Не ОтборыЗагружены Тогда + ОбщегоНазначенияКлиентСервер.УстановитьЭлементОтбора( + КомпоновщикПредварительногоОтбора.Настройки.Отбор, + "ПометкаУдаления", + Ложь, + ВидСравненияКомпоновкиДанных.Равно, + , + Ложь); + КонецЕсли; + // Сравнение по наименованию. + Если Не ПравилаЗагружены Тогда + Правило = ТаблицаПравил.Найти("Наименование", "Реквизит"); + Если Правило <> Неопределено Тогда + ЗначениеДляСравнения = ?(НечеткийПоиск, "Подобно", "Равно"); + Если Правило.ВариантыСравнения.НайтиПоЗначению(ЗначениеДляСравнения) <> Неопределено Тогда + Правило.Правило = ЗначениеДляСравнения; + КонецЕсли; + КонецЕсли; + КонецЕсли; + + // 6. Механизмы расширения в части прикладных правил. + ОписаниеПрикладныхПравил = Неопределено; + Если ЭлементСписка.Пометка Тогда + ПараметрыПоУмолчанию = Новый Структура; + ПараметрыПоУмолчанию.Вставить("ПравилаПоиска", ТаблицаПравил); + ПараметрыПоУмолчанию.Вставить("ОграниченияСравнения", Новый Массив); + ПараметрыПоУмолчанию.Вставить("КомпоновщикОтбора", КомпоновщикПредварительногоОтбора); + ПараметрыПоУмолчанию.Вставить("КоличествоЭлементовДляСравнения", 1000); + МенеджерОбъектаМетаданных = ОбщегоНазначения.МенеджерОбъектаПоПолномуИмени(ОбъектМетаданных.ПолноеИмя()); + МенеджерОбъектаМетаданных.ПараметрыПоискаДублей(ПараметрыПоУмолчанию); - // Пустая структура параметров. - ОбъектОбработки = РеквизитФормыВЗначение("Объект"); - ПараметрыПоУмолчанию = ОбъектОбработки.ПрикладныеПараметрыПоУмолчанию( - ПравилаПоиска.Выгрузить(,"Реквизит, Правило"), - КомпоновщикПредварительногоОтбора - ); - - // Вызываем прикладной код - МенеджерОбласти = ОбъектОбработки.МенеджерОбластиПоискаДублей(ОбластьПоискаДублей); - МенеджерОбласти.ПараметрыПоискаДублей(ПараметрыПоУмолчанию); - - // Формируем строку прикладных правил. + // Представление прикладных правил. ОписаниеПрикладныхПравил = ""; Для Каждого Описание Из ПараметрыПоУмолчанию.ОграниченияСравнения Цикл ОписаниеПрикладныхПравил = ОписаниеПрикладныхПравил + Символы.ПС + Описание.Представление; @@ -1063,27 +1165,27 @@ ЗначениеВРеквизитФормы(ТаблицаПравил, "ПравилаПоиска"); КонецПроцедуры -&НаСервереБезКонтекста -Функция ДоступныеИменаМетаРеквизитовОтбора(Знач МетаКоллекция) - Результат = ""; - ТипХранилища = Тип("ХранилищеЗначения"); - - Для Каждого МетаРеквизит Из МетаКоллекция Цикл - ЭтоХранилище = МетаРеквизит.Тип.СодержитТип(ТипХранилища); - Если Не ЭтоХранилище Тогда - Результат = Результат + "," + МетаРеквизит.Имя; +Функция ДоступныеРеквизитыОтбора(ОбъектМетаданных) + МассивРеквизитов = Новый Массив; + Для Каждого РеквизитМетаданные Из ОбъектМетаданных.СтандартныеРеквизиты Цикл + Если Не РеквизитМетаданные.Тип.СодержитТип(Тип("ХранилищеЗначения")) Тогда + МассивРеквизитов.Добавить(РеквизитМетаданные.Имя); КонецЕсли КонецЦикла; - - Возврат Результат; + Для Каждого РеквизитМетаданные Из ОбъектМетаданных.Реквизиты Цикл + Если Не РеквизитМетаданные.Тип.СодержитТип(Тип("ХранилищеЗначения")) Тогда + МассивРеквизитов.Добавить(РеквизитМетаданные.Имя); + КонецЕсли + КонецЦикла; + Возврат СтрСоединить(МассивРеквизитов, ","); КонецФункции &НаСервереБезКонтекста -Процедура ДобавитьПравилаМетаРеквизитов(ТаблицаПравил, Знач Игнорировать, Знач ВсеВариантыСравнения, Знач МетаКоллекция) +Процедура ДобавитьПравилаМетаРеквизитов(ТаблицаПравил, Знач Игнорировать, Знач ВсеВариантыСравнения, Знач МетаКоллекция, Знач ДоступенНечеткийПоиск) Для Каждого МетаРеквизит Из МетаКоллекция Цикл Если Не Игнорировать.Свойство(МетаРеквизит.Имя) Тогда - ВариантыСравнения = ВариантыСравненияДляТипа(МетаРеквизит.Тип, ВсеВариантыСравнения); + ВариантыСравнения = ВариантыСравненияДляТипа(МетаРеквизит.Тип, ВсеВариантыСравнения, ДоступенНечеткийПоиск); Если ВариантыСравнения <> Неопределено Тогда // Можно сравнивать СтрокаПравил = ТаблицаПравил.Добавить(); @@ -1099,28 +1201,7 @@ КонецПроцедуры &НаСервереБезКонтекста -Процедура УстановитьЗначенияПравилПоУмолчанию(Знач ОбластьПоиска, Знач КомпоновщикОтбора, Знач ПравилаСравнения) - - // Правило отбора - ЭлементыОтбора = КомпоновщикОтбора.Настройки.Отбор.Элементы; - ЭлементОтбора = ЭлементыОтбора.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); - ЭлементОтбора.Использование = Истина; - ЭлементОтбора.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("ПометкаУдаления"); - ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно; - ЭлементОтбора.ПравоеЗначение = Ложь;; - - // Правило сравнения, только если есть наименование. - Правило = ПравилаСравнения.Найти("Наименование", "Реквизит"); - Если Правило <> Неопределено Тогда - Если Правило.ВариантыСравнения.НайтиПоЗначению("Равно") <> Неопределено Тогда - Правило.Правило = "Равно"; - КонецЕсли; - КонецЕсли; - -КонецПроцедуры - -&НаСервереБезКонтекста -Функция ВариантыСравненияДляТипа(Знач ДоступныеТипы, Знач ВсеВариантыСравнения) +Функция ВариантыСравненияДляТипа(Знач ДоступныеТипы, Знач ВсеВариантыСравнения, Знач ДоступенНечеткийПоиск) ЭтоХранилище = ДоступныеТипы.СодержитТип(Тип("ХранилищеЗначения")); Если ЭтоХранилище Тогда @@ -1140,25 +1221,13 @@ Результат = Новый СписокЗначений; ЗаполнитьЗначенияСвойств(Результат.Добавить(), ВсеВариантыСравнения[0]); // Совпадает + Если ДоступенНечеткийПоиск И ЭтоСтрока Тогда + ЗаполнитьЗначенияСвойств(Результат.Добавить(), ВсеВариантыСравнения[1]); // Похоже + КонецЕсли; + Возврат Результат; КонецФункции -&НаСервере -Процедура ИнициализироватьОсновныеПараметры() - - // Флаг учета правил ставим безусловно. - УчитыватьПрикладныеПравила = Истина; - - ОбъектОбработки = РеквизитФормыВЗначение("Объект"); - МетаОбъектОбработки = ОбъектОбработки.Метаданные(); - - ЭтоВнешняяОбработка = Не Метаданные.Обработки.Содержит(МетаОбъектОбработки); - ИмяОбработки = ?(ЭтоВнешняяОбработка, ОбъектОбработки.ИспользуемоеИмяФайла, МетаОбъектОбработки.Имя); - БазовоеИмяФормы = МетаОбъектОбработки.ПолноеИмя() + ".Форма."; - - ОбъектОбработки.ОбластиПоискаДублей(ОбластиПоискаДублей, Истина); -КонецПроцедуры - //////////////////////////////////////////////////////////////////////////////// // Пошаговый помощник @@ -1302,7 +1371,8 @@ Возврат; // Не инициализировано. КонецЕсли; - ФоновоеЗаданиеЗапустить("ФоновыйПоискДублей"); + НастройкиПошаговогоМастера.ИмяПроцедуры = "ФоновыйПоискДублей"; + ФоновоеЗаданиеЗапустить(); КонецПроцедуры @@ -1351,7 +1421,8 @@ &НаКлиенте Процедура ШагВыполнениеУдаленияПриАктивации(Знач ПараметрыШага, Знач ДополнительныеПараметры) Экспорт Элементы.Шапка.Доступность = Ложь; - ФоновоеЗаданиеЗапустить("ФоновоеУдалениеДублей"); + НастройкиПошаговогоМастера.ИмяПроцедуры = "ФоновоеУдалениеДублей"; + ФоновоеЗаданиеЗапустить(); КонецПроцедуры &НаКлиенте @@ -1691,12 +1762,8 @@ Попытка Тест = Новый ОписаниеОповещения(ИмяОбработчика, ЭтотОбъект); Исключение - Текст = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Ошибка создания обработчика события %1 для страницы %2, не определена процедура %3'"), - ИмяДействия, - ОписаниеШага.Страница, - ИмяОбработчика - ); + Текст = НСтр("ru = 'Ошибка создания обработчика события %1 для страницы %2, не определена процедура %3'"); + Текст = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(Текст, ИмяДействия, ОписаниеШага.Страница, ИмяОбработчика); ВызватьИсключение Текст; КонецПопытки; КонецЕсли; @@ -1773,13 +1840,10 @@ Процедура ПерейтиНаШагМастера(Знач ИдентификаторШага, Знач ИнициироватьСобытия = Ложь) СледующийШаг = НомерШагаМастераПоИдентификатору(ИдентификаторШага); Если СледующийШаг = Неопределено Тогда - Ошибка = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Не найден шаг помощника %1'"), - ИдентификаторШага - ); + Ошибка = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Не найден шаг помощника %1'"), ИдентификаторШага); ВызватьИсключение Ошибка; КонецЕсли; - + ОписаниеШага = НастройкиПошаговогоМастера.Шаги[НастройкиПошаговогоМастера.НомерТекущегоШага]; // Останавливаем обработчик, если есть. @@ -1894,7 +1958,7 @@ КонецЕсли; КонецЦикла; - ВызватьИсключение СтрЗаменить(НСтр("ru = 'Не найден шаг ""%1"".'"), "%1", ИмяПоиска); + ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Не найден шаг ""%1"".'"), ИмяПоиска); КонецФункции // Возвращает флаг отмены @@ -2003,16 +2067,16 @@ КонецФункции &НаСервере -Функция ФоновоеЗаданиеЗапустить(Знач ИмяПроцедуры) +Функция ФоновоеЗаданиеЗапустить() // Отмена предыдущего задания. ФоновоеЗаданиеОтменить(); // Определение параметров запуска. ПараметрыМетода = Новый Структура; ПараметрыМетода.Вставить("ПолноеИмяОбъекта", "Обработка.ПоискИУдалениеДублей"); - ПараметрыМетода.Вставить("ИмяПроцедуры", ИмяПроцедуры); + ПараметрыМетода.Вставить("ИмяПроцедуры", НастройкиПошаговогоМастера.ИмяПроцедуры); - Если ИмяПроцедуры = "ФоновыйПоискДублей" Тогда + Если НастройкиПошаговогоМастера.ИмяПроцедуры = "ФоновыйПоискДублей" Тогда НаименованиеМетода = НСтр("ru = 'Поиск и удаление дублей: Поиск дублей'"); @@ -2035,7 +2099,7 @@ ПараметрыМетода.Вставить("СхемаКомпоновки", ПолучитьИзВременногоХранилища(АдресСхемыКомпоновки)); ПараметрыМетода.Вставить("НастройкиКомпоновщикаПредварительногоОтбора", КомпоновщикПредварительногоОтбора.Настройки); - ИначеЕсли ИмяПроцедуры = "ФоновоеУдалениеДублей" Тогда + ИначеЕсли НастройкиПошаговогоМастера.ИмяПроцедуры = "ФоновоеУдалениеДублей" Тогда НаименованиеМетода = НСтр("ru = 'Поиск и удаление дублей: Удаление дублей'"); @@ -2065,14 +2129,12 @@ НастройкиПошаговогоМастера.ИнформацияОбОшибке = ПодробноеПредставлениеОшибки(ИнформацияОбОшибке); НастройкиПошаговогоМастера.ИдентификаторФоновогоЗадания = Неопределено; НастройкиПошаговогоМастера.АдресРезультатаФоновогоЗадания = Неопределено; - НастройкиПошаговогоМастера.ИмяПроцедуры = Неопределено; Возврат Ложь; КонецЕсли; НастройкиПошаговогоМастера.АдресРезультатаФоновогоЗадания = Задание.АдресХранилища; НастройкиПошаговогоМастера.ИдентификаторФоновогоЗадания = Задание.ИдентификаторЗадания; НастройкиПошаговогоМастера.ЗаданиеВыполнено = Задание.ЗаданиеВыполнено; - НастройкиПошаговогоМастера.ИмяПроцедуры = ИмяПроцедуры; Если НастройкиПошаговогоМастера.ЗаданиеВыполнено Тогда Возврат Ложь; diff --git a/SSL/src/DataProcessors/ПоискИУдалениеДублей/Forms/ПравилаОтбора/Form.form b/SSL/src/DataProcessors/ПоискИУдалениеДублей/Forms/ПравилаОтбора/Form.form index 0d728b7bf..4b06da789 100644 --- a/SSL/src/DataProcessors/ПоискИУдалениеДублей/Forms/ПравилаОтбора/Form.form +++ b/SSL/src/DataProcessors/ПоискИУдалениеДублей/Forms/ПравилаОтбора/Form.form @@ -332,7 +332,7 @@ Выбрать - Auto + DontUse Auto diff --git a/SSL/src/DataProcessors/ПоискИУдалениеДублей/Forms/ПравилаОтбора/Module.bsl b/SSL/src/DataProcessors/ПоискИУдалениеДублей/Forms/ПравилаОтбора/Module.bsl index 8de4201d3..415bf0ac8 100644 --- a/SSL/src/DataProcessors/ПоискИУдалениеДублей/Forms/ПравилаОтбора/Module.bsl +++ b/SSL/src/DataProcessors/ПоискИУдалениеДублей/Forms/ПравилаОтбора/Module.bsl @@ -32,7 +32,7 @@ КомпоновщикПредварительногоОтбора.ЗагрузитьНастройки(ПолучитьИзВременногоХранилища(АдресНастроекКомпоновщикаОтбора)); УдалитьИзВременногоХранилища(АдресНастроекКомпоновщикаОтбора); - Заголовок = СтрЗаменить( НСтр("ru = 'Правила отбора ""%1""'"), "%1", Параметры.ПредставлениеОбластиОтбора) + Заголовок = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Правила отбора ""%1""'"), Параметры.ПредставлениеОбластиОтбора); КонецПроцедуры #КонецОбласти @@ -44,6 +44,9 @@ Если Модифицированность Тогда ЗначениеВыбора = АдресНастроекКомпоновщикаОтбора(); + Если ЗначениеВыбора = Ложь Тогда + Возврат; + КонецЕсли; ОповеститьОВыборе(ЗначениеВыбора); Иначе Закрыть(); @@ -57,10 +60,34 @@ &НаСервере Функция АдресНастроекКомпоновщикаОтбора() + Если Не ПроверитьРекурсивно(КомпоновщикПредварительногоОтбора.Настройки.Отбор.Элементы) Тогда + Возврат Ложь; + КонецЕсли; Возврат ПоместитьВоВременноеХранилище(КомпоновщикПредварительногоОтбора.Настройки, ИдентификаторОсновнойФормы) КонецФункции +&НаСервере +Функция ПроверитьРекурсивно(КоллекцияЭлементовОтбораКД) + Результат = Истина; + Для Каждого ЭлементКД Из КоллекцияЭлементовОтбораКД Цикл + Тип = ТипЗнч(ЭлементКД); + Если Тип = Тип("ЭлементОтбораКомпоновкиДанных") Тогда + Если ЭлементКД.ВидСравнения = ВидСравненияКомпоновкиДанных.Заполнено + Или ЭлементКД.ВидСравнения = ВидСравненияКомпоновкиДанных.НеЗаполнено Тогда + ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Недопустимый вид сравнения ""%1""'"), ЭлементКД.ВидСравнения); + ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстОшибки, , "КомпоновщикПредварительногоОтбора.Настройки.Отбор"); + Результат = Ложь; + КонецЕсли; + ИначеЕсли Тип = Тип("ГруппаЭлементовОтбораКомпоновкиДанных") Тогда + Если Не ПроверитьРекурсивно(ЭлементКД.Элементы) Тогда + Результат = Ложь; + КонецЕсли; + КонецЕсли; + КонецЦикла; + Возврат Результат; +КонецФункции + #КонецОбласти diff --git a/SSL/src/DataProcessors/ПоискИУдалениеДублей/Forms/ПравилаПоиска/Form.form b/SSL/src/DataProcessors/ПоискИУдалениеДублей/Forms/ПравилаПоиска/Form.form index 9042aabd0..a2f26634b 100644 --- a/SSL/src/DataProcessors/ПоискИУдалениеДублей/Forms/ПравилаПоиска/Form.form +++ b/SSL/src/DataProcessors/ПоискИУдалениеДублей/Forms/ПравилаПоиска/Form.form @@ -774,7 +774,7 @@ ЗавершитьРедактирование - Auto + DontUse Auto diff --git a/SSL/src/DataProcessors/ПоискИУдалениеДублей/Forms/ПравилаПоиска/Module.bsl b/SSL/src/DataProcessors/ПоискИУдалениеДублей/Forms/ПравилаПоиска/Module.bsl index 334c05426..08b818d59 100644 --- a/SSL/src/DataProcessors/ПоискИУдалениеДублей/Forms/ПравилаПоиска/Module.bsl +++ b/SSL/src/DataProcessors/ПоискИУдалениеДублей/Forms/ПравилаПоиска/Module.bsl @@ -33,7 +33,7 @@ Параметры.Свойство("ОписаниеПрикладныхПравил", ОписаниеПрикладныхПравил); ОбластьПоискаДублей = Параметры.ОбластьПоискаДублей; - Заголовок = СтрЗаменить( НСтр("ru = 'Правила поиска дублей ""%1""'"), "%1", Параметры.ПредставлениеОбластиОтбора); + Заголовок = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Правила поиска дублей ""%1""'"), Параметры.ПредставлениеОбластиОтбора); ИсходныеНастройки = ПолучитьИзВременногоХранилища(Параметры.АдресНастроек); УдалитьИзВременногоХранилища(Параметры.АдресНастроек); diff --git a/SSL/src/DataProcessors/ПоискИУдалениеДублей/ObjectModule.bsl b/SSL/src/DataProcessors/ПоискИУдалениеДублей/ObjectModule.bsl index 23b3cf991..f6b565da8 100644 --- a/SSL/src/DataProcessors/ПоискИУдалениеДублей/ObjectModule.bsl +++ b/SSL/src/DataProcessors/ПоискИУдалениеДублей/ObjectModule.bsl @@ -3,33 +3,34 @@ #Область СлужебныйПрограммныйИнтерфейс // Заполняет список всех возможных областей для поиска дублей. -// +// // Параметры: -// Список - СписокЗначений - Заполняемый список, в котором устанавливаются: -// Значение - Строка - Полное имя метаданных объекта-таблицы. -// Представление - Строка - Представление для пользователя. -// Картинка - Картинка - Соответствующая картинка из платформенной библиотеки. -// Пометка - Булево - Флаг наличия прикладных правил поиска дублей. -// Устанавливается только если второй параметр равен Истина. +// УчитыватьПрикладныеПравила - Булево - Флаг необходимости поиска прикладных правил поиска дублей. // -// АнализироватьПрикладныеПравила - Булево - Флаг необходимости поиска прикладных правил поиска дублей. +// Возвращаемое значение: +// СписокЗначений - Заполняемый список, в котором устанавливаются: +// * Значение - Строка - Полное имя метаданных объекта-таблицы. +// * Представление - Строка - Представление для пользователя. +// * Картинка - Картинка - Соответствующая картинка из платформенной библиотеки. +// * Пометка - Булево - Флаг наличия прикладных правил поиска дублей. +// Устанавливается только если второй параметр равен Истина.// // -Процедура ОбластиПоискаДублей(Список, Знач АнализироватьПрикладныеПравила = Ложь) Экспорт +Функция ОбластиПоискаДублей(Знач УчитыватьПрикладныеПравила = Ложь) Экспорт + Результат = Новый СписокЗначений; - Список.Очистить(); - - Если АнализироватьПрикладныеПравила Тогда + Если УчитыватьПрикладныеПравила Тогда ОбъектыСПоискомДублей = Новый Соответствие; ПоискИУдалениеДублейПереопределяемый.ПриОпределенииОбъектовСПоискомДублей(ОбъектыСПоискомДублей); Иначе ОбъектыСПоискомДублей = Неопределено; КонецЕсли; - ГруппаОбластейПоискаДублей(Список, ОбъектыСПоискомДублей, АнализироватьПрикладныеПравила, Справочники, "Справочник"); - ГруппаОбластейПоискаДублей(Список, ОбъектыСПоискомДублей, АнализироватьПрикладныеПравила, ПланыВидовХарактеристик, "ПланВидовХарактеристик"); - ГруппаОбластейПоискаДублей(Список, ОбъектыСПоискомДублей, АнализироватьПрикладныеПравила, ПланыСчетов, "ПланСчетов"); - ГруппаОбластейПоискаДублей(Список, ОбъектыСПоискомДублей, АнализироватьПрикладныеПравила, ПланыВидовРасчета, "ПланВидовРасчета"); - -КонецПроцедуры + ГруппаОбластейПоискаДублей(Результат, ОбъектыСПоискомДублей, УчитыватьПрикладныеПравила, Справочники, "Справочник"); + ГруппаОбластейПоискаДублей(Результат, ОбъектыСПоискомДублей, УчитыватьПрикладныеПравила, ПланыВидовХарактеристик, "ПланВидовХарактеристик"); + ГруппаОбластейПоискаДублей(Результат, ОбъектыСПоискомДублей, УчитыватьПрикладныеПравила, ПланыСчетов, "ПланСчетов"); + ГруппаОбластейПоискаДублей(Результат, ОбъектыСПоискомДублей, УчитыватьПрикладныеПравила, ПланыВидовРасчета, "ПланВидовРасчета"); + + Возврат Результат; +КонецФункции // Определение менеджера объекта для вызова прикладных правил. // @@ -55,34 +56,8 @@ Возврат ПланыВидовРасчета[Мета.Имя]; КонецЕсли; - - ВызватьИсключение СтрЗаменить( - НСтр("ru = 'Неизвестный тип объекта метаданных ""%1""'"), - "%1", ИмяОбластиПоискаДанных - ); - -КонецФункции - -// Параметры по умолчанию для передачи в прикладной код. -// -// Параметры: -// ПравилаПоиска - ТаблицаЗначений - Предлагаемые правила поиска, содержит колонки. -// Реквизит - Строка - Имя реквизита области поиска. -// Правило - Строка - Идентификатор правила сравнения, "Равно" или "Подобно". -// -// Возвращаемое значение: -// Структура -// -Функция ПрикладныеПараметрыПоУмолчанию(Знач ПравилаПоиска, Знач КомпоновщикОтбора) Экспорт - - ПараметрыПоУмолчанию = Новый Структура; - ПараметрыПоУмолчанию.Вставить("ПравилаПоиска", ПравилаПоиска); - ПараметрыПоУмолчанию.Вставить("ОграниченияСравнения", Новый Массив); - ПараметрыПоУмолчанию.Вставить("КомпоновщикОтбора", КомпоновщикОтбора); - ПараметрыПоУмолчанию.Вставить("КоличествоЭлементовДляСравнения", 1000); - - Возврат ПараметрыПоУмолчанию; + ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Неизвестный тип объекта метаданных ""%1""'"), ИмяОбластиПоискаДанных); КонецФункции // Обработчик фонового поиска дублей. @@ -128,7 +103,8 @@ ПараметрыЗамены = Новый Структура; ПараметрыЗамены.Вставить("СпособУдаления", Параметры.СпособУдаления); - ПараметрыЗамены.Вставить("ВключатьБизнесЛогику", Параметры.УчитыватьПрикладныеПравила); + ПараметрыЗамены.Вставить("ВключатьБизнесЛогику", Истина); + ПараметрыЗамены.Вставить("УчитыватьПрикладныеПравила", Параметры.УчитыватьПрикладныеПравила); ЗаменитьСсылки(Параметры.ПарыЗамен, ПараметрыЗамены, АдресРезультата); @@ -158,7 +134,7 @@ Если Не ПараметрыПоиска.Свойство("РассчитыватьМестаИспользования", РассчитыватьМестаИспользования) Тогда РассчитыватьМестаИспользования = Ложь; КонецЕсли; - + // Для передачи в прикладной код. ДополнительныеПараметры = Неопределено; ПараметрыПоиска.Свойство("ДополнительныеПараметры", ДополнительныеПараметры); @@ -172,8 +148,12 @@ РазмерПрикладнойПорции = 0; // Сколько отдавать в прикладные правила для расчета. Если ИспользоватьПрикладныеПравила Тогда - ПрикладныеПараметры = ПрикладныеПараметрыПоУмолчанию(ПараметрыПоиска.ПравилаПоиска, ПараметрыПоиска.КомпоновщикПредварительногоОтбора); - + ПрикладныеПараметры = Новый Структура; + ПрикладныеПараметры.Вставить("ПравилаПоиска", ПараметрыПоиска.ПравилаПоиска); + ПрикладныеПараметры.Вставить("ОграниченияСравнения", Новый Массив); + ПрикладныеПараметры.Вставить("КомпоновщикОтбора", ПараметрыПоиска.КомпоновщикПредварительногоОтбора); + ПрикладныеПараметры.Вставить("КоличествоЭлементовДляСравнения", 1000); + МенеджерОбластиПоиска = МенеджерОбластиПоискаДублей(ПараметрыПоиска.ОбластьПоискаДублей); МенеджерОбластиПоиска.ПараметрыПоискаДублей(ПрикладныеПараметры, ДополнительныеПараметры); @@ -334,10 +314,14 @@ КолонкиРезультата = ТаблицаДублей.Колонки; КолонкиРезультата.Добавить("Ссылка"); Для Каждого КлючЗначение Из СтруктураПолейИдентичности Цикл - КолонкиРезультата.Добавить(КлючЗначение.Ключ); + Если КолонкиРезультата.Найти(КлючЗначение.Ключ) = Неопределено Тогда + КолонкиРезультата.Добавить(КлючЗначение.Ключ); + КонецЕсли; КонецЦикла; Для Каждого КлючЗначение Из СтруктураПолейПодобия Цикл - КолонкиРезультата.Добавить(КлючЗначение.Ключ); + Если КолонкиРезультата.Найти(КлючЗначение.Ключ) = Неопределено Тогда + КолонкиРезультата.Добавить(КлючЗначение.Ключ); + КонецЕсли; КонецЦикла; Если КолонкиРезультата.Найти("Код") = Неопределено Тогда КолонкиРезультата.Добавить("Код"); @@ -345,7 +329,9 @@ Если КолонкиРезультата.Найти("Наименование") = Неопределено Тогда КолонкиРезультата.Добавить("Наименование"); КонецЕсли; - КолонкиРезультата.Добавить("Родитель"); + Если КолонкиРезультата.Найти("Родитель") = Неопределено Тогда + КолонкиРезультата.Добавить("Родитель"); + КонецЕсли; ТаблицаДублей.Индексы.Добавить("Ссылка"); ТаблицаДублей.Индексы.Добавить("Родитель"); @@ -370,40 +356,66 @@ ЗапросКандидатов.УстановитьПараметр(ИмяПоля, Выборка[ИмяПоля]); КонецЦикла; - ВыборкаКандидатов = ЗапросКандидатов.Выполнить().Выбрать(); - Пока ВыборкаКандидатов.Следующий() Цикл - - // Если мы его уже посчитали дублем в какой-то группе, то не трогаем. - Если ТаблицаДублей.Найти(ВыборкаКандидатов.Ссылка, "Ссылка") <> Неопределено Тогда - Продолжить; - КонецЕсли; - - НеДубли = Ложь; - - // Проигрываем правила подобия для строк. + ВыборкаКандидатов = ЗапросКандидатов.Выполнить().Выгрузить(); + Если СтруктураПолейПодобия.Количество() > 0 Тогда + ПодключитьВнешнююКомпоненту("ОбщийМакет.КомпонентаПоискаСтрок", "FuzzySearch", ТипВнешнейКомпоненты.Native); + FuzzySearch = Новый("AddIn.FuzzySearch.FuzzyStringMatchExtension"); Для Каждого КлючЗначение Из СтруктураПолейПодобия Цикл ИмяПоля = КлючЗначение.Ключ; - Если Не СтрокиПодобны(Выборка[ИмяПоля], ВыборкаКандидатов[ИмяПоля]) Тогда - НеДубли = Истина; - Прервать; + МассивСтрок = ВыборкаКандидатов.ВыгрузитьКолонку(ИмяПоля); + СтрокаМассивом = СтрСоединить(МассивСтрок,"~"); + СтрокаДляПоиска = Выборка[ИмяПоля]; + МассивИндексовСтрокой = FuzzySearch.StringSearch(СтрокаДляПоиска, СтрокаМассивом, "~", 10, 80, 90); + Если ПустаяСтрока(МассивИндексовСтрокой) Тогда + Продолжить; + КонецЕсли; + МассивИндексов = СтрРазделить(МассивИндексовСтрокой, ","); + Если МассивИндексов.Количество() > 0 Тогда + Для Каждого ИндексСтроки Из МассивИндексов Цикл + Если ПустаяСтрока(ИндексСтроки) Тогда + Продолжить; + КонецЕсли; + СтрокаКандидата = ВыборкаКандидатов.Получить(ИндексСтроки); + Если ТаблицаДублей.Найти(СтрокаКандидата.Ссылка, "Ссылка") <> Неопределено Тогда + Продолжить; + КонецЕсли; + + Если ИспользоватьПрикладныеПравила Тогда + // Наполняем таблицу для прикладных правил, вызываем их, если пора. + ДобавитьСтрокуКандидатов(ТаблицаКандидатов, Выборка, СтрокаКандидата, СтруктураПолей); + Если ТаблицаКандидатов.Количество() = РазмерПрикладнойПорции Тогда + ДобавитьДублиПоПрикладнымПравилам(ТаблицаДублей, МенеджерОбластиПоиска, Выборка, ТаблицаКандидатов, СтруктураПолей, ДополнительныеПараметры); + ТаблицаКандидатов.Очистить(); + КонецЕсли; + Иначе + ДобавитьДубльВРезультат(ТаблицаДублей, Выборка, СтрокаКандидата, СтруктураПолей); + КонецЕсли; + КонецЦикла; КонецЕсли; КонецЦикла; - Если НеДубли Тогда - Продолжить; - КонецЕсли; + Иначе + Для Каждого ВыборкаКандидатов Из ВыборкаКандидатов Цикл - Если ИспользоватьПрикладныеПравила Тогда - // Наполняем таблицу для прикладных правил, вызываем их, если пора. - ДобавитьСтрокуКандидатов(ТаблицаКандидатов, Выборка, ВыборкаКандидатов, СтруктураПолей); - Если ТаблицаКандидатов.Количество() = РазмерПрикладнойПорции Тогда - ДобавитьДублиПоПрикладнымПравилам(ТаблицаДублей, МенеджерОбластиПоиска, Выборка, ТаблицаКандидатов, СтруктураПолей, ДополнительныеПараметры); - ТаблицаКандидатов.Очистить(); + // Если мы его уже посчитали дублем в какой-то группе, то не трогаем. + Если ТаблицаДублей.Найти(ВыборкаКандидатов.Ссылка, "Ссылка") <> Неопределено Тогда + Продолжить; + КонецЕсли; + + // Проигрываем правила подобия для строк. + + Если ИспользоватьПрикладныеПравила Тогда + // Наполняем таблицу для прикладных правил, вызываем их, если пора. + ДобавитьСтрокуКандидатов(ТаблицаКандидатов, Выборка, ВыборкаКандидатов, СтруктураПолей); + Если ТаблицаКандидатов.Количество() = РазмерПрикладнойПорции Тогда + ДобавитьДублиПоПрикладнымПравилам(ТаблицаДублей, МенеджерОбластиПоиска, Выборка, ТаблицаКандидатов, СтруктураПолей, ДополнительныеПараметры); + ТаблицаКандидатов.Очистить(); + КонецЕсли; + Иначе + ДобавитьДубльВРезультат(ТаблицаДублей, Выборка, ВыборкаКандидатов, СтруктураПолей); КонецЕсли; - Иначе - ДобавитьДубльВРезультат(ТаблицаДублей, Выборка, ВыборкаКандидатов, СтруктураПолей); - КонецЕсли; - КонецЦикла; + КонецЦикла; + КонецЕсли; // Обрабатываем остаток таблицы для прикладных правил. Если ИспользоватьПрикладныеПравила Тогда @@ -446,8 +458,7 @@ МестаИспользования = МестаИспользованияСсылок(НаборСсылок); МестаИспользования = МестаИспользования.Скопировать( - МестаИспользования.НайтиСтроки(Новый Структура("ВспомогательныеДанные", Ложь)) - ); + МестаИспользования.НайтиСтроки(Новый Структура("ВспомогательныеДанные", Ложь))); МестаИспользования.Индексы.Добавить("Ссылка"); Результат.Вставить("МестаИспользования", МестаИспользования); @@ -470,7 +481,7 @@ ПоискИУдалениеДублейПереопределяемый.ПриОпределенииОбъектовСПоискомДублей(СписокОбъектов); СведенияОбОбъекте = СписокОбъектов[ИмяОбъекта]; - Возврат СведенияОбОбъекте <> Неопределено И (СведенияОбОбъекте = "" Или Найти(СведенияОбОбъекте, "ПараметрыПоискаДублей") > 0); + Возврат СведенияОбОбъекте <> Неопределено И (СведенияОбОбъекте = "" Или СтрНайти(СведенияОбОбъекте, "ПараметрыПоискаДублей") > 0); КонецФункции @@ -602,9 +613,8 @@ ЗаполнитьЗначенияСвойств(ГруппаДублей, ФильтрГруппы); СтрокаДублей = Результат.Добавить(); - ЗаполнитьЗначенияСвойств(СтрокаДублей, ДанныеОсновногоЭлемента, - "Ссылка, Код, Наименование," + СтруктураПолей.СписокПолейИдентичности + "," + СтруктураПолей.СписокПолейПодобия - ); + СписокСвойств = "Ссылка, Код, Наименование," + СтруктураПолей.СписокПолейИдентичности + "," + СтруктураПолей.СписокПолейПодобия; + ЗаполнитьЗначенияСвойств(СтрокаДублей, ДанныеОсновногоЭлемента, СписокСвойств); СтрокаДублей.Родитель = ГруппаДублей.Ссылка; Иначе @@ -612,9 +622,8 @@ КонецЕсли; СтрокаДублей = Результат.Добавить(); - ЗаполнитьЗначенияСвойств(СтрокаДублей, ДанныеКандидата, - "Ссылка, Код, Наименование," + СтруктураПолей.СписокПолейИдентичности + "," + СтруктураПолей.СписокПолейПодобия - ); + СписокСвойств = "Ссылка, Код, Наименование," + СтруктураПолей.СписокПолейИдентичности + "," + СтруктураПолей.СписокПолейПодобия; + ЗаполнитьЗначенияСвойств(СтрокаДублей, ДанныеКандидата, СписокСвойств); СтрокаДублей.Родитель = ГруппаДублей.Ссылка; КонецПроцедуры @@ -650,6 +659,10 @@ Для Каждого Элемент Из ЭлементыГруппы Цикл + Если Не Элемент.Использование Тогда + Продолжить; + КонецЕсли; + Если ТипЗнч(Элемент) = Тип("ЭлементОтбораКомпоновкиДанных") Тогда // Одиночный элемент ИмяПараметра = "ПараметрОтбора" + Формат(ПараметрыКомпоновщика.Количество(), "ЧН=; ЧГ="); @@ -665,12 +678,19 @@ Иначе // Вложенная группа СтекГрупп.Вставить(0, Элемент.ТипГруппы); - Текст = Текст + " " + ТокенСравнения + " " + ТекстОтбораГруппыКомпоновщика(Элемент.Элементы, СтекГрупп, ПараметрыКомпоновщика); + ТекстГруппы = ТекстОтбораГруппыКомпоновщика(Элемент.Элементы, СтекГрупп, ПараметрыКомпоновщика); + Если Не ПустаяСтрока(ТекстГруппы) Тогда + Текст = Текст + " " + ТокенСравнения + " " + ТекстОтбораГруппыКомпоновщика(Элемент.Элементы, СтекГрупп, ПараметрыКомпоновщика); + КонецЕсли; СтекГрупп.Удалить(0); КонецЕсли; КонецЦикла; + Если ПустаяСтрока(Текст) Тогда + Возврат ""; + КонецЕсли; + Текст = Сред(Текст, 2 + СтрДлина(ТокенСравнения)); Возврат ТокенОткрытияГруппыОтбораКомпоновки(ТипТекущейГруппы) + "(" + Текст + ")"; @@ -769,152 +789,6 @@ Возврат ""; КонецФункции -//////////////////////////////////////////////////////////////////////////////// -// Нечеткое сравнение строк - -Функция СтрокиПодобны(Знач Строка1, Знач Строка2) - - Если Макс(СтрДлина(Строка1), СтрДлина(Строка2)) > 10 Тогда - Возврат ПроцентПодобияСтрок(Строка1, Строка2) >= 90; - Иначе - Возврат ПроцентПодобияСтрок(Строка1, Строка2) >= 80; - КонецЕсли; - -КонецФункции - -// Возвращает процент похожести: 0 - не похоже, 100 - полное совпадение для строк. -// -Функция ПроцентПодобияСтрок(Знач Строка1, Знач Строка2) Экспорт - Если Строка1 = Строка2 Тогда - Возврат 100; - КонецЕсли; - - ВсеСлова = Новый Соответствие; - ВхожденияСлов(ВсеСлова, Строка1, 1); - ВхожденияСлов(ВсеСлова, Строка2, 2); - - // Только различные слова - Сортировщик1 = Новый СписокЗначений; - Сортировщик2 = Новый СписокЗначений; - Для Каждого КлючЗначение Из ВсеСлова Цикл - Если КлючЗначение.Значение = 1 Тогда - Сортировщик1.Добавить(КлючЗначение.Ключ); - ИначеЕсли КлючЗначение.Значение = 2 Тогда - Сортировщик2.Добавить(КлючЗначение.Ключ); - КонецЕсли; - КонецЦикла; - - ПерваяСтрока = СловаИзСписка(Сортировщик1); - ВтораяСтрока = СловаИзСписка(Сортировщик2); - Если ПерваяСтрока = ВтораяСтрока Тогда - Возврат 100; - КонецЕсли; - - Метрика = МетрикаРедактирования(ПерваяСтрока, ВтораяСтрока); - - Возврат 100 - Метрика * 100 / Макс(СтрДлина(Строка1), СтрДлина(Строка2)) -КонецФункции - -Процедура ВхожденияСлов(Результат, Знач ИсходнаяСтрока, Знач Приращение) - - РабочаяСтрока = СокрЛП(ИсходнаяСтрока); - Пока Истина Цикл - Позиция = Найти(РабочаяСтрока, " "); - Если Позиция = 0 Тогда - Прервать; - КонецЕсли; - - ТекущаяСтрока = Лев(РабочаяСтрока, Позиция - 1); - Если Не ПустаяСтрока(ТекущаяСтрока) Тогда - Значение = Результат[ТекущаяСтрока]; - Если Значение = Неопределено Тогда - Значение = 0; - КонецЕсли; - Результат.Вставить(ТекущаяСтрока, Значение + Приращение); - КонецЕсли; - - РабочаяСтрока = Сред(РабочаяСтрока, Позиция + 1); - КонецЦикла; - - Если Не ПустаяСтрока(РабочаяСтрока) Тогда - Значение = Результат[РабочаяСтрока]; - Если Значение = Неопределено Тогда - Значение = 0; - КонецЕсли; - Результат.Вставить(РабочаяСтрока, Значение + Приращение); - КонецЕсли; - -КонецПроцедуры - -Функция СловаИзСписка(Знач СписокСлов) - Результат = ""; - - СписокСлов.СортироватьПоЗначению(); - Для Каждого Элемент Из СписокСлов Цикл - Результат = Результат + " " + Элемент.Значение; - КонецЦикла; - - Возврат Сред(Результат, 2); -КонецФункции - -Функция МетрикаРедактирования(Знач Строка1, Знач Строка2) - Если Строка1 = Строка2 Тогда - Возврат 0; - КонецЕсли; - - Длина1 = СтрДлина(Строка1); - Длина2 = СтрДлина(Строка2); - - Если Длина1 = 0 Тогда - Если Длина2 = 0 Тогда - Возврат 0; - КонецЕсли; - Возврат Длина2; - - ИначеЕсли Длина2 = "" Тогда - Возврат Длина1; - - КонецЕсли; - - // Инициализация - Коэффициенты = Новый Массив(Длина1 + 1, Длина2 + 1); - Для Позиция1 = 0 По Длина1 Цикл - Коэффициенты[Позиция1][0] = Позиция1; - КонецЦикла; - Для Позиция2 = 0 По Длина2 Цикл - Коэффициенты[0][Позиция2] = Позиция2 - КонецЦикла; - - // Расчет - Для Позиция1 = 1 По Длина1 Цикл - ПредПозиция1 = Позиция1 - 1; - Символ1 = Сред(Строка1, Позиция1, 1); - - Для Позиция2 = 1 По Длина2 Цикл - ПредПозиция2 = Позиция2 - 1; - Символ2 = Сред(Строка2, Позиция2, 1); - - Стоимость = ?(Символ1 = Символ2, 0, 1); // Стоимость замены - - Коэффициенты[Позиция1][Позиция2] = Мин( - Коэффициенты[ПредПозиция1][Позиция2] + 1, // Стоимость удаления, - Коэффициенты[Позиция1] [ПредПозиция2] + 1, // Стоимость вставки, - Коэффициенты[ПредПозиция1][ПредПозиция2] + Стоимость - ); - - Если Позиция1 > 1 И Позиция2 > 1 И Символ1 = Сред(Строка2, ПредПозиция2, 1) И Сред(Строка1, ПредПозиция1, 1) = Символ2 Тогда - Коэффициенты[Позиция1][Позиция2] = Мин( - Коэффициенты[Позиция1][Позиция2], - Коэффициенты[Позиция1 - 2][Позиция2 - 2] + Стоимость // Стоимость перестановки - ); - КонецЕсли; - - КонецЦикла; - КонецЦикла; - - Возврат Коэффициенты[Длина1][Длина2]; -КонецФункции - Процедура ГруппаОбластейПоискаДублей(Результат, ОбъектыСПоискомДублей, Знач АнализироватьПрикладныеПравила, Знач МенеджерГруппы, Знач Пиктограмма) Для Каждого Элемент Из МенеджерГруппы Цикл @@ -927,8 +801,8 @@ ПолноеИмя = ОбъектМетаданных.ПолноеИмя(); Если АнализироватьПрикладныеПравила Тогда СведенияОбОбъекте = ОбъектыСПоискомДублей[ПолноеИмя]; - ЕстьПрикладныеПравила = СведенияОбОбъекте <> Неопределено И - (СведенияОбОбъекте = "" Или Найти(СведенияОбОбъекте, "ПараметрыПоискаДублей") > 0); + ЕстьПрикладныеПравила = СведенияОбОбъекте <> Неопределено + И (СведенияОбОбъекте = "" Или СтрНайти(СведенияОбОбъекте, "ПараметрыПоискаДублей") > 0); Иначе ЕстьПрикладныеПравила = Ложь; КонецЕсли; diff --git a/SSL/src/DataProcessors/ПоискИУдалениеДублей/ПоискИУдалениеДублей.mdo b/SSL/src/DataProcessors/ПоискИУдалениеДублей/ПоискИУдалениеДублей.mdo index 34d1a9ce2..b847f075e 100644 --- a/SSL/src/DataProcessors/ПоискИУдалениеДублей/ПоискИУдалениеДублей.mdo +++ b/SSL/src/DataProcessors/ПоискИУдалениеДублей/ПоискИУдалениеДублей.mdo @@ -9,7 +9,6 @@ ru Поиск и удаление дублей - true DataProcessor.ПоискИУдалениеДублей.Form.ПоискДублей true 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 f127f3495..d1cedc4dd 100644 --- a/SSL/src/DataProcessors/ОбновлениеКонфигурации/Forms/НастройкаРасписания/Form.form +++ b/SSL/src/DataProcessors/ПоискИУстановкаОбновлений/Forms/НастройкаРасписания/Form.form @@ -583,14 +583,13 @@ true true true - UseIfNecessary auto true Объект 1 - DataProcessorObject.ОбновлениеКонфигурации + DataProcessorObject.ПоискИУстановкаОбновлений true @@ -667,7 +666,7 @@ КомандаОК - Auto + DontUse Auto @@ -689,7 +688,7 @@ ПолучитьКодПользователяИПароль - Auto + DontUse Auto diff --git a/SSL/src/DataProcessors/ОбновлениеКонфигурации/Forms/НастройкаРасписания/Help/ru.html b/SSL/src/DataProcessors/ПоискИУстановкаОбновлений/Forms/НастройкаРасписания/Help/ru.html similarity index 94% rename from SSL/src/DataProcessors/ОбновлениеКонфигурации/Forms/НастройкаРасписания/Help/ru.html rename to SSL/src/DataProcessors/ПоискИУстановкаОбновлений/Forms/НастройкаРасписания/Help/ru.html index 717d285af..a19a19305 100644 --- a/SSL/src/DataProcessors/ОбновлениеКонфигурации/Forms/НастройкаРасписания/Help/ru.html +++ b/SSL/src/DataProcessors/ПоискИУстановкаОбновлений/Forms/НастройкаРасписания/Help/ru.html @@ -1,5 +1,5 @@ -

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

      +

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

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

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

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

      diff --git a/SSL/src/DataProcessors/ОбновлениеКонфигурации/Forms/НастройкаРасписания/Module.bsl b/SSL/src/DataProcessors/ПоискИУстановкаОбновлений/Forms/НастройкаРасписания/Module.bsl similarity index 98% rename from SSL/src/DataProcessors/ОбновлениеКонфигурации/Forms/НастройкаРасписания/Module.bsl rename to SSL/src/DataProcessors/ПоискИУстановкаОбновлений/Forms/НастройкаРасписания/Module.bsl index e80d095d6..215625282 100644 --- a/SSL/src/DataProcessors/ОбновлениеКонфигурации/Forms/НастройкаРасписания/Module.bsl +++ b/SSL/src/DataProcessors/ПоискИУстановкаОбновлений/Forms/НастройкаРасписания/Module.bsl @@ -66,8 +66,8 @@ НастройкиОбновленияКонфигурации.РасписаниеПроверкиНаличияОбновления = ОбщегоНазначенияКлиентСервер.РасписаниеВСтруктуру(Объект.РасписаниеПроверкиНаличияОбновления); ЗаписатьНастройки(НастройкиОбновленияКонфигурации); - ОбновлениеКонфигурацииКлиент.ПодключитьОтключитьПроверкуПоРасписанию(Объект.ПроверятьНаличиеОбновленияПриЗапуске = 1 И - Объект.РасписаниеПроверкиНаличияОбновления <> Неопределено); + ОбновлениеКонфигурацииКлиент.ПодключитьОтключитьПроверкуПоРасписанию(Объект.ПроверятьНаличиеОбновленияПриЗапуске = 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 13fff67d4..f484071bf 100644 --- a/SSL/src/DataProcessors/ОбновлениеКонфигурации/Forms/НастройкаРезервнойКопии/Form.form +++ b/SSL/src/DataProcessors/ПоискИУстановкаОбновлений/Forms/НастройкаРезервнойКопии/Form.form @@ -705,14 +705,13 @@ true true true - UseIfNecessary auto true Объект 1 - DataProcessorObject.ОбновлениеКонфигурации + DataProcessorObject.ПоискИУстановкаОбновлений true @@ -741,7 +740,7 @@ КомандаОК - Auto + DontUse Auto diff --git a/SSL/src/DataProcessors/ОбновлениеКонфигурации/Forms/НастройкаРезервнойКопии/Help/ru.html b/SSL/src/DataProcessors/ПоискИУстановкаОбновлений/Forms/НастройкаРезервнойКопии/Help/ru.html similarity index 93% rename from SSL/src/DataProcessors/ОбновлениеКонфигурации/Forms/НастройкаРезервнойКопии/Help/ru.html rename to SSL/src/DataProcessors/ПоискИУстановкаОбновлений/Forms/НастройкаРезервнойКопии/Help/ru.html index 1cf97a968..0499f6b92 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 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 98% rename from SSL/src/DataProcessors/ОбновлениеКонфигурации/Forms/Обозреватель/Form.form rename to SSL/src/DataProcessors/ПоискИУстановкаОбновлений/Forms/Обозреватель/Form.form index b943b2c55..5e59e05c1 100644 --- a/SSL/src/DataProcessors/ОбновлениеКонфигурации/Forms/Обозреватель/Form.form +++ b/SSL/src/DataProcessors/ПоискИУстановкаОбновлений/Forms/Обозреватель/Form.form @@ -317,7 +317,7 @@ ПерейтиКСтранице - Auto + DontUse Auto @@ -342,7 +342,7 @@ Вперед - Auto + DontUse Auto @@ -367,7 +367,7 @@ Назад - Auto + DontUse Auto 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 529dff6db..d6bcb6a81 100644 --- a/SSL/src/DataProcessors/ОбновлениеКонфигурации/Forms/Форма/Form.form +++ b/SSL/src/DataProcessors/ПоискИУстановкаОбновлений/Forms/Форма/Form.form @@ -3376,21 +3376,92 @@ - - Декорация34 - 149 - - <key>ru</key> - <value>Получение обновления программы может занять от нескольких минут до нескольких часов в зависимости от размера обновления, скорости подключения к Интернету и производительности компьютера.</value> - + + Группа7 + 1088 + + НадписьДлительнаяОперация + 149 + + <key>ru</key> + <value>Получение обновления программы может занять от нескольких минут до нескольких часов в зависимости от размера обновления, скорости подключения к Интернету и производительности компьютера.</value> + + true + true + + true + + + НадписьДлительнаяОперацияРасширеннаяПодсказка + 836 + Label + true + true + + Left + + + + НадписьДлительнаяОперацияКонтекстноеМеню + 150 + true + + Label + true + true + true + true + false + + Left + Center + 2 + + + + НадписьПрогресс + 158 + + <key>ru</key> + <value>Выполняется получение файлов обновления: 1 из 1...</value> + + true + true + + true + + + НадписьПрогрессExtendedTooltip + 841 + Label + true + true + + Left + + + + НадписьПрогрессКонтекстноеМеню + 159 + true + + Label + true + true + false + + Left + Top + + true true true - Декорация34ExtendedTooltip - 836 + Группа7РасширеннаяПодсказка + 1089 Label true true @@ -3398,21 +3469,14 @@ Left - - Декорация34КонтекстноеМеню - 150 - true - - Label - true - true - true - true - false - - Left - Center - 2 + UsualGroup + + Vertical + Auto + true + true + Auto + Auto true @@ -3443,42 +3507,6 @@ ГруппаПрогресс 610 - - НадписьПрогресс - 158 - - <key>ru</key> - <value>Выполняется получение файлов обновления: 1 из 1...</value> - - true - true - - true - - - НадписьПрогрессExtendedTooltip - 841 - Label - true - true - - Left - - - - НадписьПрогрессКонтекстноеМеню - 159 - true - - Label - true - true - false - - Left - Top - - true true @@ -3741,6 +3769,39 @@ Vertical + + НадписьНажмитеДалее + 1095 + + <key>ru</key> + <value>Нажмите "Далее" для установки обновления.</value> + + true + + true + + + НадписьНажмитеДалееРасширеннаяПодсказка + 1097 + Label + true + true + + Left + + + + НадписьНажмитеДалееКонтекстноеМеню + 1096 + true + + Label + true + true + + Left + + НадписьПроцессОбновленияМожетЗанятьМногоВремени 177 @@ -4428,7 +4489,7 @@ <key>ru</key> - <value>Установка обновления</value> + <value>Все готово для установки обновления</value> ГруппаВыборРежимаОбновленияФайлРасширеннаяПодсказка @@ -5431,21 +5492,94 @@ - - НадписьРезервнаяКопияСервер - 537 - - <key>ru</key> - <value>Перед установкой обновления рекомендуется выполнить резервное копирование информационной базы.</value> - + + Группа12 + 1090 + + НадписьРезервнаяКопияСервер + 537 + + <key>ru</key> + <value>Перед установкой обновления рекомендуется выполнить резервное копирование информационной базы.</value> + + true + true + + true + + + НадписьРезервнаяКопияСерверExtendedTooltip + 913 + Label + true + true + + Left + + + + НадписьРезервнаяКопияСерверКонтекстноеМеню + 538 + true + + Label + true + true + false + + Left + Center + + + + НадписьОтложенныеОбработчики + 1092 + + <key>ru</key> + <value>В программе имеются <link ОтложенныеОбработчики>дополнительные процедуры обработки данных</>, которые не были завершены +при переходе с предыдущего релиза. Они будут автоматически выполнены в процессе обновления +на новую версию. Это может существенно увеличить время обновления.</value> + + true + true + + true + + + НадписьОтложенныеОбработчикиРасширеннаяПодсказка + 1094 + Label + true + true + + Left + + + + НадписьОтложенныеОбработчикиКонтекстноеМеню + 1093 + true + + true + Label + true + true + + + URLProcessing + НадписьОтложенныеОбработчикиОбработкаНавигационнойСсылки + + Left + + true true true - НадписьРезервнаяКопияСерверExtendedTooltip - 913 + Группа12РасширеннаяПодсказка + 1091 Label true true @@ -5453,18 +5587,14 @@ Left - - НадписьРезервнаяКопияСерверКонтекстноеМеню - 538 - true - - Label - true - true - false - - Left - Center + UsualGroup + + Vertical + Auto + true + true + Auto + Auto true @@ -5503,7 +5633,7 @@ <key>ru</key> - <value>Установка обновления</value> + <value>Все готово для установки обновления</value> ГруппаВыборРежимаОбновленияСерверРасширеннаяПодсказка @@ -5594,105 +5724,6 @@ Left - - Декорация4 - 1085 - true - true - - true - - - Декорация4РасширеннаяПодсказка - 1087 - Label - true - true - - Left - - - - Декорация4КонтекстноеМеню - 1086 - true - - Label - true - 2 - true - - Left - - - - ПоказатьНовоеВВерсии - 1082 - true - true - - true - - - ПоказатьНовоеВВерсии - - Right - - ПоказатьНовоеВВерсииРасширеннаяПодсказка - 1084 - Label - true - true - - Left - - - - ПоказатьНовоеВВерсииКонтекстноеМеню - 1083 - true - - CheckBoxField - Enter - true - Left - true - - - - ОзнакомитьсяСДополнительнымиИнструкциями - 1079 - true - true - - true - - - ОзнакомитьсяСДополнительнымиИнструкциями - - Right - - ОзнакомитьсяСДополнительнымиИнструкциямиРасширеннаяПодсказка - 1081 - Label - true - true - - Left - - - - ОзнакомитьсяСДополнительнымиИнструкциямиКонтекстноеМеню - 1080 - true - - CheckBoxField - Enter - true - Left - true - - Отступ45 389 @@ -6236,14 +6267,13 @@ true true true - UseIfNecessary auto true Объект 1 - DataProcessorObject.ОбновлениеКонфигурации + DataProcessorObject.ПоискИУстановкаОбновлений true @@ -6540,40 +6570,6 @@ true - - ПоказатьНовоеВВерсии - - <key>ru</key> - <value>Показать новое в версии</value> - - 6 - - Boolean - - - true - - - true - - - - ОзнакомитьсяСДополнительнымиИнструкциями - - <key>ru</key> - <value>Ознакомиться с информацией о порядке обновления</value> - - 10 - - Boolean - - - true - - - true - - ЕстьАктивныеСеансы @@ -6591,6 +6587,59 @@ <common>true</common> </edit> </attributes> + <attributes> + <name>КаталогСкрипта</name> + <title> + <key>ru</key> + <value>Каталог скрипта</value> + + 15 + + String + + + + true + + + true + + + + ИменаФайловОбновления + + <key>ru</key> + <value>Имена файлов обновления</value> + + 25 + + String + + + + true + + + true + + + + УстановленыРасширения + + <key>ru</key> + <value>Установлены расширения</value> + + 26 + + Boolean + + + true + + + true + + Назад @@ -6610,7 +6659,7 @@ <name>КнопкаНазадНажатие</name> </handler> </action> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <formCommands> @@ -6632,7 +6681,7 @@ <name>КнопкаДалееНажатие</name> </handler> </action> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <formCommands> @@ -6654,7 +6703,7 @@ <name>НастроитьПараметрыПроксиСервера</name> </handler> </action> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <formCommands> @@ -6676,7 +6725,7 @@ <name>НовоеВВерсии</name> </handler> </action> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <parameters> @@ -6698,6 +6747,7 @@ <valueType> <types>Boolean</types> </valueType> + <keyParameter>true</keyParameter> </parameters> <commandInterface> <navigationPanel/> diff --git a/SSL/src/DataProcessors/ОбновлениеКонфигурации/Forms/Форма/Module.bsl b/SSL/src/DataProcessors/ПоискИУстановкаОбновлений/Forms/Форма/Module.bsl similarity index 81% rename from SSL/src/DataProcessors/ОбновлениеКонфигурации/Forms/Форма/Module.bsl rename to SSL/src/DataProcessors/ПоискИУстановкаОбновлений/Forms/Форма/Module.bsl index 522c0f886..b742056cc 100644 --- a/SSL/src/DataProcessors/ОбновлениеКонфигурации/Forms/Форма/Module.bsl +++ b/SSL/src/DataProcessors/ПоискИУстановкаОбновлений/Forms/Форма/Module.bsl @@ -23,7 +23,7 @@ ВыполнитьОбновление = Ложь; // Если это первый запуск после обновления конфигурации, то запоминаем и сбрасываем статус. - Объект.РезультатОбновления = ОбновлениеКонфигурации.ОбновлениеКонфигурацииУспешно(); + Объект.РезультатОбновления = ОбновлениеКонфигурации.ОбновлениеКонфигурацииУспешно(КаталогСкрипта); Если Объект.РезультатОбновления <> Неопределено Тогда ОбновлениеКонфигурации.СброситьСтатусОбновленияКонфигурации(); КонецЕсли; @@ -39,6 +39,7 @@ Элементы.ПереключательОбновленияФайл.Видимость = Ложь; Элементы.ПереключательОбновленияСервер.Видимость = Ложь; Элементы.ГруппаДатаОбновления.Видимость = Ложь; + Элементы.НадписьНажмитеДалее.Видимость = Истина; КонецЕсли; Если Параметры.ПолученоОбновлениеКонфигурации Тогда @@ -47,14 +48,14 @@ КонецЕсли; - ИнформацияОНаличииСоединений = СоединенияИБ.ИнформацияОСоединениях(); - ЕстьАктивныеСеансы = Не ИнформацияОНаличииСоединений.НаличиеАктивныхСоединений; - Элементы.НадписьОбновлениеКонфигурацииВыполняетсяПриОбменеДаннымиСГлавнымУзлом.Заголовок = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( Элементы.НадписьОбновлениеКонфигурацииВыполняетсяПриОбменеДаннымиСГлавнымУзлом.Заголовок, ПланыОбмена.ГлавныйУзел()); ПараметрыАутентификации = СтандартныеПодсистемыСервер.ПараметрыАутентификацииНаСайте(); + УстановитьПривилегированныйРежим(Истина); + УстановленыРасширения = РасширенияКонфигурации.Получить().Количество() > 0; + КонецПроцедуры &НаКлиенте @@ -70,16 +71,10 @@ ВосстановитьНастройкиОбновленияКонфигурации(); Если Параметры.ВыполнитьОбновление Тогда - Если ЕстьАктивныеСеансы Тогда - ПерейтиКВыборуРежимаОбновления(); - Возврат; - ИначеЕсли ПроверитьДоступКИБ() Тогда - ВыполнитьОбновление = Истина; - ОбновлениеКонфигурацииКлиентПереопределяемый.ПередЗавершениемРаботыСистемы(); - ПараметрыПриложения.Вставить("СтандартныеПодсистемы.ПропуститьПредупреждениеПередЗавершениемРаботыСистемы", Истина); - ЗавершитьРаботуСистемы(Ложь); - Закрыть(); - КонецЕсли; + + ПерейтиКВыборуРежимаОбновления(); + Возврат; + КонецЕсли; Страницы = Элементы.СтраницыПомощника.ПодчиненныеЭлементы; @@ -98,10 +93,8 @@ ИмяСтраницы = Страницы.ФайлОбновления.Имя; КонецЕсли; - Если Объект.КодЗадачиПланировщика <> 0 Тогда - Если ПолучитьЗадачуПланировщика(Объект.КодЗадачиПланировщика) = Неопределено Тогда - Объект.КодЗадачиПланировщика = 0; - КонецЕсли; + Если Объект.КодЗадачиПланировщика <> 0 И Не СуществуетЗадачаПланировщика(Объект.КодЗадачиПланировщика) Тогда + Объект.КодЗадачиПланировщика = 0; КонецЕсли; // Если форма открывается при запуске программы после обновления. @@ -117,15 +110,23 @@ ИмяФайлаИнформацияОбОбновлении = ""; КонецЕсли; + Если СтандартныеПодсистемыКлиентПовтИсп.ПараметрыРаботыКлиента().ЭтоБазоваяВерсияКонфигурации Тогда + + Если ПустаяСтрока(КаталогСкрипта) Тогда + Отказ = Истина; + Возврат; + Иначе + ПрочитатьДанныеВЖурналРегистрации(); + КонецЕсли; + + КонецЕсли; + ИмяСтраницы = ? (Объект.РезультатОбновления, Страницы.УспешноеОбновление.Имя, Страницы.НеуспешноеОбновление.Имя); Объект.РезультатОбновления = Неопределено; Иначе - КонфигурацияГотоваКОбновлению = ОбновлениеКонфигурацииКлиентПереопределяемый.ГотовностьКОбновлениюКонфигурации(Истина); - Если КонфигурацияГотоваКОбновлению = Неопределено Тогда - КонфигурацияГотоваКОбновлению = Истина; - КонецЕсли; + КонфигурацияГотоваКОбновлению = Истина; ОбновлениеКонфигурацииКлиентПереопределяемый.ПриОпределенииГотовностиКОбновлениюКонфигурации( КонфигурацияГотоваКОбновлению); @@ -140,10 +141,9 @@ Если Объект.КодЗадачиПланировщика <> 0 Тогда ПараметрОтказа = Ложь; // Не используется в этом случае. ИмяСтраницы = ВосстановитьРезультатыПредыдущегоЗапуска(ПараметрОтказа); - ИначеЕсли КонфигурацияИзменена И - Объект.ИсточникОбновления = 2 Тогда - Объект.НуженФайлОбновления = 0; - ИмяСтраницы = Страницы.ФайлОбновления.Имя; + ИначеЕсли КонфигурацияИзменена И Объект.ИсточникОбновления = 2 Тогда + Объект.НуженФайлОбновления = 0; + ИмяСтраницы = Страницы.ФайлОбновления.Имя; КонецЕсли; Если Не СтандартныеПодсистемыКлиентПовтИсп.ПараметрыРаботыКлиента().ЭтоГлавныйУзел Тогда @@ -169,7 +169,7 @@ &НаКлиенте Процедура ОбработкаВыбора(ВыбранноеЗначение, ИсточникВыбора) - Если ВРег(ИсточникВыбора.ИмяФормы) = ВРег("Обработка.ОбновлениеКонфигурации.Форма.НастройкаРасписания") Тогда + Если ВРег(ИсточникВыбора.ИмяФормы) = ВРег("Обработка.ПоискИУстановкаОбновлений.Форма.НастройкаРасписания") Тогда Если ТипЗнч(ВыбранноеЗначение) = Тип("Структура") Тогда ЗаполнитьЗначенияСвойств(Объект, ВыбранноеЗначение); @@ -177,11 +177,11 @@ ПередОткрытиемСтраницы(); - ИначеЕсли ВРег(ИсточникВыбора.ИмяФормы) = ВРег("Обработка.АктивныеПользователи.Форма.ФормаСпискаАктивныхПользователей") Тогда + ИначеЕсли ВРег(ИсточникВыбора.ИмяФормы) = ВРег("Обработка.АктивныеПользователи.Форма.АктивныеПользователи") Тогда ПередОткрытиемСтраницы(); - ИначеЕсли ВРег(ИсточникВыбора.ИмяФормы) = ВРег("Обработка.ОбновлениеКонфигурации.Форма.НастройкаРезервнойКопии") Тогда + ИначеЕсли ВРег(ИсточникВыбора.ИмяФормы) = ВРег("Обработка.ПоискИУстановкаОбновлений.Форма.НастройкаРезервнойКопии") Тогда Если ТипЗнч(ВыбранноеЗначение) = Тип("Структура") Тогда ЗаполнитьЗначенияСвойств(Объект, ВыбранноеЗначение); @@ -297,7 +297,7 @@ СтандартнаяОбработка = Ложь; Диалог = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Открытие); - Диалог.Каталог = ОбновлениеКонфигурацииКлиент.ПолучитьКаталогФайла(Объект.ИмяФайлаОбновления); + Диалог.Каталог = ПолучитьКаталогФайла(Объект.ИмяФайлаОбновления); Диалог.ПроверятьСуществованиеФайла = Истина; Диалог.Фильтр = НСтр("ru = 'Все файлы поставки (*.cf*;*.cfu)|*.cf*;*.cfu|Файлы поставки конфигурации (*.cf)|*.cf|Файлы поставки обновления конфигурации(*.cfu)|*.cfu'"); Диалог.Заголовок = НСтр("ru = 'Выбор поставки обновления конфигурации'"); @@ -312,9 +312,30 @@ СтандартнаяОбработка = Ложь; - ПараметрыФормы = Новый Структура; - ПараметрыФормы.Вставить("ИнструкцияДляСледующейРедакции", Истина); - ОткрытьФорму("Обработка.НерекомендуемаяВерсияПлатформы.Форма.ПорядокОбновленияПлатформы", ПараметрыФормы); + ДоступноОбновлениеВерсииПлатформы = Ложь; + Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("ИнтернетПоддержкаПользователей.ПолучениеОбновленийПрограммы") Тогда + МодульПолучениеОбновленийПрограммыКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("ПолучениеОбновленийПрограммыКлиент"); + ДоступноОбновлениеВерсииПлатформы = МодульПолучениеОбновленийПрограммыКлиент.ДоступноИспользованиеПолученияОбновленийПлатформы(); + КонецЕсли; + + Если ДоступноОбновлениеВерсииПлатформы Тогда + + НоваяВерсияКонфигурации = ПолучитьСтруктуруДоступногоОбновления().Версия; + + ПараметрыАвторизации = Новый Структура; + ПараметрыАвторизации.Вставить("Логин", Объект.КодПользователяСервераОбновлений); + ПараметрыАвторизации.Вставить("Пароль", Объект.ПарольСервераОбновлений); + + МодульПолучениеОбновленийПрограммыКлиент.УстановитьОбновлениеПлатформы1СПредприятие( + НоваяВерсияКонфигурации, ПараметрыАвторизации); + + Иначе + + ПараметрыФормы = Новый Структура; + ПараметрыФормы.Вставить("ИнструкцияДляСледующейРедакции", Истина); + ОткрытьФорму("Обработка.НерекомендуемаяВерсияПлатформы.Форма.ПорядокОбновленияПлатформы", ПараметрыФормы); + + КонецЕсли; КонецПроцедуры @@ -334,23 +355,17 @@ &НаКлиенте Процедура НадписьСписокДействийНажатие(Элемент) - ПараметрыФормы = Новый Структура; - ПараметрыФормы.Вставить("ОповещатьОЗакрытии", Истина); - ОткрытьФорму("Обработка.АктивныеПользователи.Форма.ФормаСпискаАктивныхПользователей", , ЭтотОбъект); + ПоказатьАктивныхПользователей(); КонецПроцедуры &НаКлиенте Процедура НадписьСписокДействий1Нажатие(Элемент) - ПараметрыФормы = Новый Структура; - ПараметрыФормы.Вставить("ОповещатьОЗакрытии", Истина); - ОткрытьФорму("Обработка.АктивныеПользователи.Форма.ФормаСпискаАктивныхПользователей", , ЭтотОбъект); + ПоказатьАктивныхПользователей(); КонецПроцедуры &НаКлиенте Процедура НадписьСписокДействий3Нажатие(Элемент) - ПараметрыФормы = Новый Структура; - ПараметрыФормы.Вставить("ОповещатьОЗакрытии", Истина); - ОткрытьФорму("Обработка.АктивныеПользователи.Форма.ФормаСпискаАктивныхПользователей", , ЭтотОбъект); + ПоказатьАктивныхПользователей(); КонецПроцедуры &НаКлиенте @@ -359,7 +374,7 @@ ПараметрыФормы.Вставить("СоздаватьРезервнуюКопию", Объект.СоздаватьРезервнуюКопию); ПараметрыФормы.Вставить("ИмяКаталогаРезервнойКопииИБ", Объект.ИмяКаталогаРезервнойКопииИБ); ПараметрыФормы.Вставить("ВосстанавливатьИнформационнуюБазу", Объект.ВосстанавливатьИнформационнуюБазу); - ОткрытьФорму("Обработка.ОбновлениеКонфигурации.Форма.НастройкаРезервнойКопии", ПараметрыФормы, ЭтотОбъект); + ОткрытьФорму("Обработка.ПоискИУстановкаОбновлений.Форма.НастройкаРезервнойКопии", ПараметрыФормы, ЭтотОбъект); КонецПроцедуры &НаКлиенте @@ -391,6 +406,14 @@ КонецПроцедуры +&НаКлиенте +Процедура НадписьОтложенныеОбработчикиОбработкаНавигационнойСсылки(Элемент, НавигационнаяСсылка, СтандартнаяОбработка) + + СтандартнаяОбработка = Ложь; + ОткрытьФорму("Обработка.РезультатыОбновленияПрограммы.Форма.ОтложенныеОбработчики"); + +КонецПроцедуры + #КонецОбласти #Область ОбработчикиКомандФормы @@ -453,9 +476,9 @@ Результат = Новый Массив(); Результат.Добавить(ПолучитьТекстСкрипта(СтруктураПараметров)); - ИменаМакетовМассив = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(ИменаМакетов); + ИменаМакетовМассив = СтрРазделить(ИменаМакетов, ","); Для Каждого ИмяМакета Из ИменаМакетовМассив Цикл - Результат.Добавить(Обработки.ОбновлениеКонфигурации.ПолучитьМакет(ИмяМакета).ПолучитьТекст()); + Результат.Добавить(Обработки.ПоискИУстановкаОбновлений.ПолучитьМакет(ИмяМакета).ПолучитьТекст()); КонецЦикла; Возврат Результат; КонецФункции @@ -464,7 +487,7 @@ Функция ПолучитьТекстСкрипта(СтруктураПараметров) // Файл обновления конфигурации: main.js. - ШаблонСкрипта = Обработки.ОбновлениеКонфигурации.ПолучитьМакет("МакетФайлаОбновленияКонфигурации"); + ШаблонСкрипта = Обработки.ПоискИУстановкаОбновлений.ПолучитьМакет("МакетФайлаОбновленияКонфигурации"); Скрипт = ШаблонСкрипта.ПолучитьОбласть("ОбластьПараметров"); Скрипт.УдалитьСтроку(1); @@ -489,19 +512,12 @@ Объект.ВосстанавливатьИнформационнуюБазу = Ложь; КонецЕсли; - ИменаФайловОбновления = ""; - Для Каждого Обновление Из Объект.ДоступныеОбновления Цикл - ИменаФайловОбновления = ИменаФайловОбновления + Форматировать(Обновление.ПутьКЛокальномуФайлуОбновления) + ","; - КонецЦикла; - Если СтрДлина(ИменаФайловОбновления) > 0 Тогда - ИменаФайловОбновления = Лев(ИменаФайловОбновления, СтрДлина(ИменаФайловОбновления) - 1); - КонецЕсли; - ИменаФайловОбновления = "[" + ИменаФайловОбновления + "]"; + ИменаФайловОбновления = ИменаФайловОбновления(); - СтрокаСоединенияИнформационнойБазы = СтруктураПараметров.ПараметрыСкрипта.СтрокаСоединенияИнформационнойБазы + - СтруктураПараметров.ПараметрыСкрипта.СтрокаПодключения; + ПараметрыСкрипта = СтруктураПараметров.ПараметрыСкрипта; + СтрокаСоединенияИнформационнойБазы = ПараметрыСкрипта.СтрокаСоединенияИнформационнойБазы + ПараметрыСкрипта.СтрокаПодключения; - Если Прав(СтрокаСоединенияИнформационнойБазы, 1) = ";" Тогда + Если СтрЗаканчиваетсяНа(СтрокаСоединенияИнформационнойБазы, ";") Тогда СтрокаСоединенияИнформационнойБазы = Лев(СтрокаСоединенияИнформационнойБазы, СтрДлина(СтрокаСоединенияИнформационнойБазы) - 1); КонецЕсли; @@ -514,25 +530,26 @@ ПараметрПутиКИнформационнойБазе = ?(ПризнакФайловогоРежима, "/F", "/S") + ПутьКИнформационнойБазе; СтрокаПутиКИнформационнойБазе = ?(ПризнакФайловогоРежима, ПутьКИнформационнойБазе, ""); - БлокироватьСоединенияИБ = НЕ СтруктураПараметров.ИнформационнаяБазаФайловая ИЛИ РежимИмитацииКлиентСервернойИБ(); + БлокироватьСоединенияИБ = Не СтруктураПараметров.ИнформационнаяБазаФайловая Или РежимИмитацииКлиентСервернойИБ(); - Результат = СтрЗаменить(Результат, "[ИменаФайловОбновления]" , ИменаФайловОбновления); - Результат = СтрЗаменить(Результат, "[ИмяИсполняемогоФайлаКонфигуратора]" , Форматировать(ИмяИсполняемогоФайлаКонфигуратора)); - Результат = СтрЗаменить(Результат, "[ИмяИсполняемогоФайлаКлиента]" , Форматировать(ИмяИсполняемогоФайлаКлиента)); - Результат = СтрЗаменить(Результат, "[ПараметрПутиКИнформационнойБазе]" , Форматировать(ПараметрПутиКИнформационнойБазе)); - Результат = СтрЗаменить(Результат, "[СтрокаПутиКФайлуИнформационнойБазы]" , Форматировать(ОбновлениеКонфигурацииКлиентСервер.ДобавитьКонечныйРазделительПути(СтрЗаменить(СтрокаПутиКИнформационнойБазе, """", "")) + "1Cv8.1CD")); - Результат = СтрЗаменить(Результат, "[СтрокаСоединенияИнформационнойБазы]" , Форматировать(СтрокаСоединенияИнформационнойБазы)); - Результат = СтрЗаменить(Результат, "[СобытиеЖурналаРегистрации]" , Форматировать(СтруктураПараметров.СобытиеЖурналаРегистрации)); - Результат = СтрЗаменить(Результат, "[АдресЭлектроннойПочты]" , Форматировать(?(Объект.РежимОбновления = 2 И Объект.ВыслатьОтчетНаПочту, Объект.АдресЭлектроннойПочты, ""))); - Результат = СтрЗаменить(Результат, "[ИмяАдминистратораОбновления]" , Форматировать(ИмяПользователя())); - Результат = СтрЗаменить(Результат, "[СоздаватьРезервнуюКопию]" , ?(ПризнакФайловогоРежима И Объект.СоздаватьРезервнуюКопию <> 0, "true", "false")); - Результат = СтрЗаменить(Результат, "[КаталогРезервнойКопии]" , Форматировать(?(Объект.СоздаватьРезервнуюКопию = 2, ОбновлениеКонфигурацииКлиентСервер.ДобавитьКонечныйРазделительПути(Объект.ИмяКаталогаРезервнойКопииИБ), ""))); - Результат = СтрЗаменить(Результат, "[ВосстанавливатьИнформационнуюБазу]" , ?(Объект.ВосстанавливатьИнформационнуюБазу, "true", "false")); - Результат = СтрЗаменить(Результат, "[БлокироватьСоединенияИБ]" , ?(БлокироватьСоединенияИБ, "true", "false")); - Результат = СтрЗаменить(Результат, "[ИмяCOMСоединителя]" , Форматировать(СтруктураПараметров.ИмяCOMСоединителя)); - Результат = СтрЗаменить(Результат, "[ИспользоватьCOMСоединитель]" , ?(СтруктураПараметров.ИспользоватьCOMСоединитель, "false", "true")); - Результат = СтрЗаменить(Результат, "[ЗапускСеансаПослеОбновления]" , ?(Параметры.ЗавершениеРаботыСистемы, "false", "true")); - Результат = СтрЗаменить(Результат, "[ВыполнятьСжатиеТаблицИБ]" , ?(ВыполнятьСжатиеТаблицИБ(), "true", "false")); + Результат = СтрЗаменить(Результат, "[ИменаФайловОбновления]" , ИменаФайловОбновления); + Результат = СтрЗаменить(Результат, "[ИмяИсполняемогоФайлаКонфигуратора]" , Форматировать(ИмяИсполняемогоФайлаКонфигуратора)); + Результат = СтрЗаменить(Результат, "[ИмяИсполняемогоФайлаКлиента]" , Форматировать(ИмяИсполняемогоФайлаКлиента)); + Результат = СтрЗаменить(Результат, "[ПараметрПутиКИнформационнойБазе]" , Форматировать(ПараметрПутиКИнформационнойБазе)); + Результат = СтрЗаменить(Результат, "[СтрокаПутиКФайлуИнформационнойБазы]", Форматировать(ОбновлениеКонфигурацииКлиентСервер.ДобавитьКонечныйРазделительПути(СтрЗаменить(СтрокаПутиКИнформационнойБазе, """", "")) + "1Cv8.1CD")); + Результат = СтрЗаменить(Результат, "[СтрокаСоединенияИнформационнойБазы]", Форматировать(СтрокаСоединенияИнформационнойБазы)); + Результат = СтрЗаменить(Результат, "[СобытиеЖурналаРегистрации]" , Форматировать(СтруктураПараметров.СобытиеЖурналаРегистрации)); + Результат = СтрЗаменить(Результат, "[АдресЭлектроннойПочты]" , Форматировать(?(Объект.РежимОбновления = 2 И Объект.ВыслатьОтчетНаПочту, Объект.АдресЭлектроннойПочты, ""))); + Результат = СтрЗаменить(Результат, "[ИмяАдминистратораОбновления]" , Форматировать(ИмяПользователя())); + Результат = СтрЗаменить(Результат, "[СоздаватьРезервнуюКопию]" , ?(ПризнакФайловогоРежима И Объект.СоздаватьРезервнуюКопию <> 0, "true", "false")); + Результат = СтрЗаменить(Результат, "[КаталогРезервнойКопии]" , Форматировать(?(Объект.СоздаватьРезервнуюКопию = 2, ОбновлениеКонфигурацииКлиентСервер.ДобавитьКонечныйРазделительПути(Объект.ИмяКаталогаРезервнойКопииИБ), ""))); + Результат = СтрЗаменить(Результат, "[ВосстанавливатьИнформационнуюБазу]" , ?(Объект.ВосстанавливатьИнформационнуюБазу, "true", "false")); + Результат = СтрЗаменить(Результат, "[БлокироватьСоединенияИБ]" , ?(БлокироватьСоединенияИБ, "true", "false")); + Результат = СтрЗаменить(Результат, "[ИмяCOMСоединителя]" , Форматировать(СтруктураПараметров.ИмяCOMСоединителя)); + Результат = СтрЗаменить(Результат, "[ИспользоватьCOMСоединитель]" , ?(СтруктураПараметров.ИспользоватьCOMСоединитель, "false", "true")); + Результат = СтрЗаменить(Результат, "[ЗапускСеансаПослеОбновления]" , ?(Параметры.ЗавершениеРаботыСистемы, "false", "true")); + Результат = СтрЗаменить(Результат, "[ВыполнятьСжатиеТаблицИБ]" , ?(ОбщегоНазначения.ИнформационнаяБазаФайловая(), "true", "false")); + Результат = СтрЗаменить(Результат, "[ВыполнитьОтложенныеОбработчики]" , ?(ВыполнитьОтложенныеОбработчики(), "true", "false")); Возврат Результат; @@ -549,19 +566,52 @@ КонецФункции +&НаСервере +Функция ИменаФайловОбновления() + + Если Не ПустаяСтрока(ИменаФайловОбновления) + И Объект.ДоступныеОбновления.Количество() = 0 + И Не (Объект.ИсточникОбновления = 2 И Объект.НуженФайлОбновления = 0) Тогда + + Возврат ИменаФайловОбновления; + + КонецЕсли; + + ИменаФайловОбновления = ""; + Для Каждого Обновление Из Объект.ДоступныеОбновления Цикл + ПрефиксФайлаОбновления = ""; + СледующийЭлемент = Объект.ДоступныеОбновления.Индекс(Обновление) + 1; + Если СледующийЭлемент <> Объект.ДоступныеОбновления.Количество() Тогда + МинимальнаяВерсия = Объект.ДоступныеОбновления[СледующийЭлемент].МинимальнаяВерсия; + Если МинимальнаяВерсия = ОбщегоНазначенияКлиентСервер.ВерсияКонфигурацииБезНомераСборки(Обновление.Версия) Тогда + ПрефиксФайлаОбновления = "+"; + КонецЕсли; + КонецЕсли; + ИменаФайловОбновления = ИменаФайловОбновления + Форматировать(ПрефиксФайлаОбновления + Обновление.ПутьКЛокальномуФайлуОбновления) + ","; + КонецЦикла; + + Если СтрДлина(ИменаФайловОбновления) > 0 Тогда + ИменаФайловОбновления = Лев(ИменаФайловОбновления, СтрДлина(ИменаФайловОбновления) - 1); + КонецЕсли; + ИменаФайловОбновления = "[" + ИменаФайловОбновления + "]"; + + Возврат ИменаФайловОбновления; + +КонецФункции + &НаСервереБезКонтекста Процедура НоваяСтрокаТаблицыОбновленийКонфигурации(ТаблицаОбновленийКонфигурации, Обновление) НоваяСтрока = ТаблицаОбновленийКонфигурации.Добавить(); ЗаполнитьЗначенияСвойств(НоваяСтрока, Обновление); - НомерВерсии = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(Обновление.Версия, "."); + НомерВерсии = СтрРазделить(Обновление.Версия, "."); НоваяСтрока.Версия1Разряд = Число(НомерВерсии[0]); НоваяСтрока.Версия2Разряд = Число(НомерВерсии[1]); НоваяСтрока.Версия3Разряд = Число(НомерВерсии[2]); НоваяСтрока.Версия4Разряд = Число(НомерВерсии[3]); - ПутьФайла = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(СтрЗаменить(Обновление.ПутьКФайлуОбновления, "\", "/"), "/"); + ПутьФайла = СтрРазделить(СтрЗаменить(Обновление.ПутьКФайлуОбновления, "\", "/"), "/"); Если ПутьФайла.Количество() > 0 Тогда НоваяСтрока.ФайлОбновления = ПутьФайла[ПутьФайла.Количество() - 1]; КонецЕсли; @@ -637,8 +687,7 @@ НоваяТекущаяВерсияОт = ТаблицаДоступныхОбновленийКонфигурации[0].Версия; Если ТекущаяВерсияОт = НоваяТекущаяВерсияОт И НоваяТекущаяВерсияОт <> ВерсияДо Тогда ТаблицаДоступныхОбновленийКонфигурации.Очистить(); - ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Недоступно обновление на версию %1 с текущей версии %2'"), ВерсияДо, ВерсияОт); + ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Недоступно обновление на версию %1 с текущей версии %2'"), ВерсияДо, ВерсияОт); КонецЕсли; ТекущаяВерсияОт = НоваяТекущаяВерсияОт; @@ -662,20 +711,23 @@ ВызватьИсключение СообщениеОбОшибке; КонецЕсли; + ТипСтрока = ОбщегоНазначения.ОписаниеТипаСтрока(0); + ТаблицаОбновлений = Новый ТаблицаЗначений; // Основные колонки - ТаблицаОбновлений.Колонки.Добавить("Конфигурация" , ОбщегоНазначения.ОписаниеТипаСтрока(0)); - ТаблицаОбновлений.Колонки.Добавить("Поставщик" , ОбщегоНазначения.ОписаниеТипаСтрока(0)); - ТаблицаОбновлений.Колонки.Добавить("Версия" , ОбщегоНазначения.ОписаниеТипаСтрока(0)); - ТаблицаОбновлений.Колонки.Добавить("ВерсияДляОбновления" , ОбщегоНазначения.ОписаниеТипаСтрока(0)); - ТаблицаОбновлений.Колонки.Добавить("ПутьКФайлуОбновления" , ОбщегоНазначения.ОписаниеТипаСтрока(0)); - ТаблицаОбновлений.Колонки.Добавить("НомерДискаИТС" , ОбщегоНазначения.ОписаниеТипаСтрока(0)); - ТаблицаОбновлений.Колонки.Добавить("ВерсияПлатформы" , ОбщегоНазначения.ОписаниеТипаСтрока(0)); - ТаблицаОбновлений.Колонки.Добавить("РазмерФайлаОбновления" , ОбщегоНазначения.ОписаниеТипаЧисло(15, 0)); + ТаблицаОбновлений.Колонки.Добавить("Конфигурация" ,ТипСтрока); + ТаблицаОбновлений.Колонки.Добавить("Поставщик" ,ТипСтрока); + ТаблицаОбновлений.Колонки.Добавить("Версия" ,ТипСтрока); + ТаблицаОбновлений.Колонки.Добавить("ВерсияДляОбновления" ,ТипСтрока); + ТаблицаОбновлений.Колонки.Добавить("ПутьКФайлуОбновления" ,ТипСтрока); + ТаблицаОбновлений.Колонки.Добавить("НомерДискаИТС" ,ТипСтрока); + ТаблицаОбновлений.Колонки.Добавить("ВерсияПлатформы" ,ТипСтрока); + ТаблицаОбновлений.Колонки.Добавить("МинимальнаяВерсия" ,ТипСтрока); + ТаблицаОбновлений.Колонки.Добавить("РазмерФайлаОбновления" ,ОбщегоНазначения.ОписаниеТипаЧисло(15, 0)); ЧтениеXML = Новый ЧтениеXML; ЧтениеXML.ОткрытьФайл(ПолныйПутьФайлаЗагрузки); - ЧтениеXML.Прочитать(); + ЧтениеXML.Прочитать(); // Дата формирования файла. ЧтениеXML.Прочитать(); @@ -696,6 +748,7 @@ РазмерФайлаОбновления = 0; Конфигурация = СтроковыеФункцииКлиентСервер.СократитьДвойныеКавычки(СокрЛП(ЧтениеXML.ПолучитьАтрибут("configuration"))); ВерсияПлатформы = Неопределено; + МинимальнаяВерсия = ""; // Читаем содержимое элемента update. МассивВерсийДляОбновления = Новый Массив; @@ -708,6 +761,7 @@ Поставщик = СтроковыеФункцииКлиентСервер.СократитьДвойныеКавычки(СокрЛП(ЧтениеXML.Значение)); ИначеЕсли ЧтениеXML.Имя = "v8u:version" Тогда ВерсияПлатформы = ЧтениеXML.ПолучитьАтрибут("platform"); + МинимальнаяВерсия = ЧтениеXML.ПолучитьАтрибут("minimal"); ЧтениеXML.Прочитать(); Версия = ЧтениеXML.Значение; ИначеЕсли ЧтениеXML.Имя = "v8u:file" Тогда @@ -739,7 +793,8 @@ НоваяСтрока.НомерДискаИТС = НомерДискаИТС; НоваяСтрока.РазмерФайлаОбновления = РазмерФайлаОбновления; НоваяСтрока.ВерсияПлатформы = ВерсияПлатформы; - + НоваяСтрока.МинимальнаяВерсия = МинимальнаяВерсия; + КонецЦикла; КонецЦикла; @@ -747,7 +802,7 @@ Если ТаблицаОбновлений = Неопределено Тогда // ошибки при чтении файла ВызватьИсключение НСтр("ru = 'Ошибка при чтении файла'") + " " + ПолныйПутьФайлаЗагрузки; - КонецЕсли; + КонецЕсли; КонецПроцедуры @@ -807,6 +862,7 @@ Настройки.ПовторныйЗапуск = Объект.ПовторныйЗапуск; Настройки.ИмяФайлаОбновления = Объект.ИмяФайлаОбновления; Настройки.НуженФайлОбновления = Объект.НуженФайлОбновления; + Настройки.ИменаФайловОбновления = ИменаФайловОбновления(); Настройки.СоздаватьРезервнуюКопию = Объект.СоздаватьРезервнуюКопию; Настройки.ВосстанавливатьИнформационнуюБазу = Объект.ВосстанавливатьИнформационнуюБазу; @@ -834,6 +890,7 @@ ОбновлениеКонфигурацииКлиентСервер.ПолучитьОбновленныеНастройкиОбновленияКонфигурации(ПараметрыПриложения[ИмяПараметра]); КонецЕсли; ЗаполнитьЗначенияСвойств(Объект, ПараметрыПриложения[ИмяПараметра]); + ИменаФайловОбновления = ПараметрыПриложения[ИмяПараметра].ИменаФайловОбновления; Если ПараметрыАутентификации <> Неопределено И Не ПустаяСтрока(ПараметрыАутентификации.Логин) @@ -993,23 +1050,27 @@ ДоступностьКнопкиНазад = Ложь; КонецЕсли; ИначеЕсли НоваяТекущаяСтраница = Страницы.ВыборРежимаОбновленияСервер Тогда - + Если Объект.КодЗадачиПланировщика = 0 И НЕ ДатаВремяОбновленияУстановлена Тогда Объект.ДатаВремяОбновления = ВернутьДату(ОбновлениеКонфигурацииКлиентСервер.ДобавитьДни( НачалоДня(ОбщегоНазначенияКлиент.ДатаСеанса()), 1), Объект.ДатаВремяОбновления); ДатаВремяОбновленияУстановлена = Истина; КонецЕсли; - ФункцияКнопкиДалее = (Объект.РежимОбновления = 0);// Если НЕ обновляем сейчас, то "готово". + ФункцияКнопкиДалее = (Объект.РежимОбновления = 0);// Если не обновляем сейчас, то "готово". + Объект.ВосстанавливатьИнформационнуюБазу = Ложь; + + ПараметрыСтраницы = ПараметрыСтраницыВыборРежимаОбновленияСервер(ПараметрыПриложения["СтандартныеПодсистемы.СообщенияДляЖурналаРегистрации"]); // Вызов сервера Элементы.ПорядокОбновленияСервер.Видимость = Не ПустаяСтрока(ИмяФайлаПорядокОбновления); + Элементы.НадписьОтложенныеОбработчики.Видимость = ПараметрыСтраницы.ЕстьОтложенныеОбработчики; СтраницыПанелиИнформацииПерезагрузки1 = Элементы.СтраницыИнформацииПерезагрузки1.ПодчиненныеЭлементы; Элементы.СтраницыИнформацииПерезагрузки1.ТекущаяСтраница = ?(Объект.РежимОбновления = 0, СтраницыПанелиИнформацииПерезагрузки1.СтраницаПерезагрузкиСейчас1, СтраницыПанелиИнформацииПерезагрузки1.СтраницаЗапланированнойПерезагрузки); - СоединенияИнфо = СоединенияИБВызовСервера.ИнформацияОСоединениях(Ложь, ПараметрыПриложения["СтандартныеПодсистемы.СообщенияДляЖурналаРегистрации"]); + СоединенияИнфо = ПараметрыСтраницы.ИнформацияОСоединениях; НаличиеСоединений = СоединенияИнфо.НаличиеАктивныхСоединений И ФункцияКнопкиДалее; Элементы.ГруппаСоединений1.Видимость = НаличиеСоединений; Если НаличиеСоединений Тогда @@ -1026,9 +1087,6 @@ КонецЕсли; ИначеЕсли НоваяТекущаяСтраница = Страницы.УспешноеОбновление Тогда - ОзнакомитьсяСДополнительнымиИнструкциями = Не ПустаяСтрока(ИмяФайлаПорядокОбновления); - ПоказатьНовоеВВерсии = Не ОзнакомитьсяСДополнительнымиИнструкциями; - Элементы.ОзнакомитьсяСДополнительнымиИнструкциями.Видимость = ОзнакомитьсяСДополнительнымиИнструкциями; ФункцияКнопкиДалее = Ложь; ДоступностьКнопкиНазад = Ложь; ДоступностьКнопкиЗакрыть = Ложь; @@ -1089,10 +1147,10 @@ Страницы = Элементы.СтраницыПомощника.ПодчиненныеЭлементы; ВосстановлениеРезультатовПредЗапуска = Истина; ИмяСтраницы = ОбработатьСтраницуДоброПожаловать(Ложь); - Обработано = ИмяСтраницы = Страницы.ДоступноеОбновление.Имя Или - ИмяСтраницы = Страницы.ВыборРежимаОбновленияСервер.Имя Или - ИмяСтраницы = Страницы.ВыборРежимаОбновленияФайл.Имя; - + Обработано = ИмяСтраницы = Страницы.ДоступноеОбновление.Имя + Или ИмяСтраницы = Страницы.ВыборРежимаОбновленияСервер.Имя + Или ИмяСтраницы = Страницы.ВыборРежимаОбновленияФайл.Имя; + ВосстановлениеРезультатовПредЗапуска = Ложь; Если НЕ Обработано Тогда Отказ = Истина; @@ -1197,7 +1255,7 @@ Если НаличиеСоединений Тогда ПоказатьПредупреждение(, НСтр("ru = 'Невозможно продолжить обновление конфигурации, так как не завершены все соединения с информационной базой.'")); Возврат ТекущаяСтраница.Имя; - КонецЕсли; + КонецЕсли; КонецЕсли; ВыполнитьОбновление = Истина; ФлагЗавершенияРаботы = Истина; @@ -1216,7 +1274,7 @@ КонецЕсли; КонецЕсли; - Если НЕ УстановленWMI(ВыдаватьСообщения) Тогда + Если Не ВозможноЗапланироватьОбновление(ВыдаватьСообщения) Тогда Возврат ТекущаяСтраница.Имя; КонецЕсли; @@ -1290,8 +1348,8 @@ НоваяТекущаяСтраница = Страницы[ОбработатьСтраницуОбновленияНеОбнаружено()]; ИначеЕсли ТекущаяСтраница = Страницы.ДлительнаяОперация Тогда НоваяТекущаяСтраница = Страницы[ОбработатьСтраницуДлительнаяОперация()]; - ИначеЕсли ТекущаяСтраница = Страницы.ВыборРежимаОбновленияФайл ИЛИ - ТекущаяСтраница = Страницы.ВыборРежимаОбновленияСервер Тогда + ИначеЕсли ТекущаяСтраница = Страницы.ВыборРежимаОбновленияФайл + Или ТекущаяСтраница = Страницы.ВыборРежимаОбновленияСервер Тогда НоваяТекущаяСтраница = Страницы[ОбработатьСтраницуВыборРежимаОбновления(, ФлагЗавершенияРаботы)]; ИначеЕсли ТекущаяСтраница = Страницы.УспешноеОбновление Тогда НоваяТекущаяСтраница = Страницы[ОбработатьСтраницуУспешноеОбновление()]; @@ -1313,12 +1371,13 @@ ТекущаяСтраница.Доступность = Истина; // Проверим, что есть доступ к возможности обновления конфигурации. - Если НЕ СтандартныеПодсистемыКлиентПовтИсп.ПараметрыРаботыКлиента().НастройкиОбновления.ЕстьДоступДляОбновления - И (НоваяТекущаяСтраница = Страницы.ПодключениеКСайту ИЛИ - НоваяТекущаяСтраница = Страницы.ДлительнаяОперация ИЛИ - НоваяТекущаяСтраница = Страницы.ВыборРежимаОбновленияФайл ИЛИ - НоваяТекущаяСтраница = Страницы.ВыборРежимаОбновленияСервер ИЛИ - НоваяТекущаяСтраница = Страницы.ФайлОбновления) Тогда + Если Не СтандартныеПодсистемыКлиентПовтИсп.ПараметрыРаботыКлиента().НастройкиОбновления.ЕстьДоступДляОбновления + И (НоваяТекущаяСтраница = Страницы.ПодключениеКСайту + Или НоваяТекущаяСтраница = Страницы.ДлительнаяОперация + Или НоваяТекущаяСтраница = Страницы.ВыборРежимаОбновленияФайл + Или НоваяТекущаяСтраница = Страницы.ВыборРежимаОбновленияСервер + Или НоваяТекущаяСтраница = Страницы.ФайлОбновления) Тогда + Отказ = Истина; КнопкаНазад.Доступность = Истина; КнопкаДалее.Доступность = Истина; @@ -1353,8 +1412,8 @@ НоваяТекущаяСтраница = Страницы.ДоброПожаловать; ИначеЕсли ТекущаяСтраница = Страницы.ДлительнаяОперация Тогда НоваяТекущаяСтраница = Страницы.ДоброПожаловать; - ИначеЕсли ТекущаяСтраница = Страницы.ВыборРежимаОбновленияФайл ИЛИ - ТекущаяСтраница = Страницы.ВыборРежимаОбновленияСервер Тогда + ИначеЕсли ТекущаяСтраница = Страницы.ВыборРежимаОбновленияФайл + Или ТекущаяСтраница = Страницы.ВыборРежимаОбновленияСервер Тогда Если Объект.ИсточникОбновления = 0 Тогда // Интернет НоваяТекущаяСтраница = Страницы.ДоступноеОбновление; Иначе // файл @@ -1390,7 +1449,14 @@ КонецЕсли; - ОбновлениеКонфигурацииКлиентПереопределяемый.ПриПереходеНаСтраницуПомощника(ПредыдущаяСтраница, СледующаяСтраница, Отказ); +КонецПроцедуры + +&НаКлиенте +Процедура ПоказатьАктивныхПользователей() + + ПараметрыФормы = Новый Структура; + ПараметрыФормы.Вставить("ОповещатьОЗакрытии", Истина); + СтандартныеПодсистемыКлиент.ОткрытьСписокАктивныхПользователей(ПараметрыФормы, ЭтотОбъект); КонецПроцедуры @@ -1415,6 +1481,12 @@ Возврат Страницы.ДоступноеОбновление.Имя; КонецЕсли; + Если СтандартныеПодсистемыКлиентПовтИсп.ПараметрыРаботыКлиента().ИнформационнаяБазаФайловая И УстановленыРасширения Тогда + ПоказатьПредупреждение(, НСтр("ru = 'Перед обновлением необходимо удалить все подключенные расширения конфигурации. + |После завершения обновления их нужно подключить заново.'")); + Возврат Страницы.ДоступноеОбновление.Имя; + КонецЕсли; + СписокФайловДляПолучения.ЗагрузитьЗначения(СоздатьСписокФайловДляПолучения()); Если ПроверитьФайлыОбновленияПолучены() Тогда ИмяСобытияЖурнала = ОбновлениеКонфигурацииКлиент.СобытиеЖурналаРегистрации(); @@ -1438,14 +1510,6 @@ &НаКлиенте Функция ОбработатьСтраницуУспешноеОбновление(ВыдаватьСообщения = Истина) - Если ПоказатьНовоеВВерсии Тогда - ОткрытьФорму("ОбщаяФорма.ОписаниеИзмененийСистемы", Новый Структура("ПоказыватьТолькоИзменения", Истина)); - КонецЕсли; - - Если ОзнакомитьсяСДополнительнымиИнструкциями Тогда - ОбновлениеКонфигурацииКлиент.ОткрытьВебСтраницу(ИмяФайлаПорядокОбновления); - КонецЕсли; - Закрыть(); Возврат Элементы.УспешноеОбновление.Имя; @@ -1593,10 +1657,10 @@ Если Стр = Неопределено Тогда Прервать; КонецЕсли; - Если Найти(ВРег(Стр), ВРег("ConfigurationTemplatesLocation")) = 0 Тогда + Если СтрНайти(ВРег(Стр), ВРег("ConfigurationTemplatesLocation")) = 0 Тогда Продолжить; КонецЕсли; - ПозицияРазделителя = Найти(Стр, "="); + ПозицияРазделителя = СтрНайти(Стр, "="); Если ПозицияРазделителя = 0 Тогда Продолжить; КонецЕсли; @@ -1635,7 +1699,7 @@ КонецФункции &НаКлиенте -Функция ПерейтиКВыборуРежимаОбновления(ЭтоПереходДалее = Ложь) +Процедура ПерейтиКВыборуРежимаОбновления(ЭтоПереходДалее = Ложь) Если ПараметрыАдминистрирования = Неопределено Тогда @@ -1662,9 +1726,7 @@ КонецЕсли; - Возврат Неопределено; - -КонецФункции +КонецПроцедуры &НаКлиенте Процедура ПослеПолученияПараметровАдминистрирования(Результат, ЭтоПереходДалее) Экспорт @@ -1743,69 +1805,32 @@ // &НаКлиенте Функция ПолучитьПараметрыАутентификацииАдминистратораОбновления() - - Результат = Новый Структура("ИмяПользователя, - |ПарольПользователя, - |СтрокаПодключения, - |СтрокаСоединенияИнформационнойБазы", - Неопределено, "", "", "", "", ""); - + + Результат = Новый Структура("СтрокаПодключения, СтрокаСоединенияИнформационнойБазы"); + ПортКластера = ПараметрыАдминистрирования.ПортКластера; ТекущиеСоединения = СоединенияИБВызовСервера.ИнформацияОСоединениях(Истина, ПараметрыПриложения["СтандартныеПодсистемы.СообщенияДляЖурналаРегистрации"], ПортКластера); + Результат.СтрокаСоединенияИнформационнойБазы = ТекущиеСоединения.СтрокаСоединенияИнформационнойБазы; - // Диагностика случая, когда ролевой безопасности в системе не предусмотрено. - // Т.е. ситуация, когда любой пользователь «может» в системе все. - Если НЕ ТекущиеСоединения.ЕстьАктивныеПользователи Тогда - Возврат Результат; - КонецЕсли; + Результат.СтрокаПодключения = "Usr=""{0}"";Pwd=""{1}"""; - Пользователь = ПараметрыАдминистрирования.ИмяАдминистратораИнформационнойБазы; - Пароль = ПараметрыАдминистрирования.ПарольАдминистратораИнформационнойБазы; - - Результат.ИмяПользователя = Пользователь; - Результат.ПарольПользователя = Пароль; - Результат.СтрокаПодключения = "Usr=""{0}"";Pwd=""{1}"""; Возврат Результат; КонецФункции &НаКлиенте -Функция ПроверитьДоступКИБ() +Функция СтрокаUnicode(Строка) - ИмяСобытияЖурнала = ОбновлениеКонфигурацииКлиент.СобытиеЖурналаРегистрации(); - Результат = Истина; - ОбнаруженнаяОшибкаПодключения = ""; - // В базовых версиях проверку подключения не осуществляем; - // при некорректном вводе имени и пароля обновление завершится неуспешно. - ПараметрыРаботыКлиента = СтандартныеПодсистемыКлиентПовтИсп.ПараметрыРаботыКлиента(); - Если ПараметрыРаботыКлиента.ЭтоБазоваяВерсияКонфигурации Или ПараметрыРаботыКлиента.ЭтоУчебнаяПлатформа Тогда - Возврат Результат; - КонецЕсли; + Результат = ""; - // Проверка подключения к информационной базе. - Попытка - АдминистрированиеКластераКлиентСервер.ПроверитьПараметрыАдминистрирования(ПараметрыАдминистрирования,, Ложь); - Исключение - Результат = Ложь; - ТекстСообщения = НСтр("ru = 'Не удалось выполнить подключение к информационной базе:'") + Символы.ПС; - ЖурналРегистрацииКлиент.ДобавитьСообщениеДляЖурналаРегистрации(ИмяСобытияЖурнала, - "Ошибка", ТекстСообщения + ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); - ОбнаруженнаяОшибкаПодключения = ТекстСообщения + КраткоеПредставлениеОшибки(ИнформацияОбОшибке()); - КонецПопытки; - - // Проверка подключения к кластеру. - Если Результат И Не ПараметрыРаботыКлиента.ИнформационнаяБазаФайловая Тогда - Попытка - АдминистрированиеКластераКлиентСервер.ПроверитьПараметрыАдминистрирования(ПараметрыАдминистрирования,,, Ложь); - Исключение - Результат = Ложь; - ТекстСообщения = НСтр("ru = 'Не удалось выполнить подключение к кластеру серверов:'") + Символы.ПС; - ЖурналРегистрацииКлиент.ДобавитьСообщениеДляЖурналаРегистрации(ИмяСобытияЖурнала, - "Ошибка", ТекстСообщения + ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); - ОбнаруженнаяОшибкаПодключения = ТекстСообщения + КраткоеПредставлениеОшибки(ИнформацияОбОшибке()); - КонецПопытки; - КонецЕсли; + Для НомерСимвола = 1 По СтрДлина(Строка) Цикл + + Символ = Формат(КодСимвола(Сред(Строка, НомерСимвола, 1)), "ЧГ=0"); + Символ = СтроковыеФункцииКлиентСервер.ДополнитьСтроку(Символ, 4); + Результат = Результат + Символ; + + КонецЦикла; Возврат Результат; @@ -1817,6 +1842,7 @@ Если ВыдаватьСообщения Тогда ПоказатьПредупреждение(, НСтр("ru = 'Укажите допустимый адрес электронной почты.'")); КонецЕсли; + ТекущийЭлемент = Элементы.АдресЭлектроннойПочты; Возврат ИмяТекущейСтраницы; КонецЕсли; Возврат ""; @@ -1824,10 +1850,10 @@ &НаКлиенте Функция ОпределитьИмяСкрипта() - App = Новый COMОбъект("Shell.Application"); + App = Новый COMОбъект("Shell.Application"); Попытка - Folder = App.Namespace(41); - Возврат Folder.Self.Path + "\wscript.exe"; + Folder = App.Namespace(41); + Возврат Folder.Self.Path + "\wscript.exe"; Исключение Возврат "wscript.exe"; КонецПопытки; @@ -1855,86 +1881,6 @@ КонецФункции -// Запланировать обновление конфигурации. -&НаКлиенте -Функция ЗапланироватьОбновлениеКонфигурации() - Если НЕ УдалитьЗадачуПланировщика(Объект.КодЗадачиПланировщика) Тогда - Возврат Ложь; - КонецЕсли; - ИмяГлавногоФайлаСкрипта = СформироватьФайлыСкриптаОбновления(Ложь); - - ИмяЗапускаемогоСкрипта = ОпределитьИмяСкрипта(); - ПутьЗапускаемогоСкрипта = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку("%1 %2 //nologo ""%3"" /p1:""%4"" /p2:""%5""", - ИмяЗапускаемогоСкрипта, ?(РежимОтладкиСкрипта(), "//X //D", ""), ИмяГлавногоФайлаСкрипта, - ПараметрыАдминистрирования.ПарольАдминистратораИнформационнойБазы, ПараметрыАдминистрирования.ПарольАдминистратораКластера); - - Объект.КодЗадачиПланировщика = СоздатьЗадачуПланировщика(ПутьЗапускаемогоСкрипта, Объект.ДатаВремяОбновления); - ЗаписатьСтатусОбновления(ИмяПользователя(), Объект.КодЗадачиПланировщика <> 0, Ложь, Ложь); - Возврат Объект.КодЗадачиПланировщика <> 0; -КонецФункции - -// Создать задачу планировщика ОС Windows. -// -// Параметры: -// ИмяФайлаПрограммы - Строка - путь к запускаемому приложению или файлу. -// ДатаВремя - Дата - Дата и время запуска. Значение даты может быть -// в интервале [текущая дата, текущая дата + 30 дней). -// -// Возвращаемое значение: -// Число - код созданной задачи планировщика или "Неопределено" при ошибке. -&НаКлиенте -Функция СоздатьЗадачуПланировщика(Знач ИмяФайлаПрограммы, Знач ДатаВремя) - ИмяСобытияЖурнала = ОбновлениеКонфигурацииКлиент.СобытиеЖурналаРегистрации(); - Попытка - Планировщик = ОбъектWMI().Get("Win32_ScheduledJob"); - КодЗадачи = 0; - КодОшибки = Планировщик.Create(ИмяФайлаПрограммы, // Command - ПреобразоватьВремяВФорматCIM(ДатаВремя), // StartTime - Ложь, // RunRepeatedly - , // DaysOfWeek - Pow(2, День(ДатаВремя) - 1), // DaysOfMonth - Ложь, // InteractWithDesktop - КодЗадачи);// out JobId - Если КодОшибки <> 0 Тогда // Коды ошибок: http://msdn2.microsoft.com/en-us/library/aa389389(VS.85).aspx. - ЖурналРегистрацииКлиент.ДобавитьСообщениеДляЖурналаРегистрации(ИмяСобытияЖурнала, - "Ошибка", НСтр("ru = 'Ошибка при создании задачи планировщика:'") - + " " + КодОшибки); - Возврат 0; - КонецЕсли; - ТекстСообщения = НСтр("ru = 'Задача планировщика успешно запланирована (команда: %1; дата: %2; код задачи: %3).'"); - - ЖурналРегистрацииКлиент.ДобавитьСообщениеДляЖурналаРегистрации(ИмяСобытияЖурнала, - "Информация", - СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ТекстСообщения, ИмяФайлаПрограммы, ДатаВремя, КодЗадачи)); - - Исключение - - ЖурналРегистрацииКлиент.ДобавитьСообщениеДляЖурналаРегистрации(ИмяСобытияЖурнала, "Ошибка", - НСтр("ru = 'Ошибка при создании задачи планировщика:'") - + " " + ОписаниеОшибки()); - Возврат 0; - КонецПопытки; - - Возврат КодЗадачи; - -КонецФункции - -&НаКлиенте -Функция ПреобразоватьВремяВФорматCIM(ДатаВремя) - Локатор = Новый COMObject("WbemScripting.SWbemLocator"); - Сервис = Локатор.ConnectServer(".", "\root\cimv2"); - ComputerSystems = Сервис.ExecQuery("Select * from Win32_ComputerSystem"); - Для Каждого ComputerSystem Из ComputerSystems Цикл - Разница = ComputerSystem.CurrentTimeZone; - Час = Формат(ДатаВремя,"ДФ=ЧЧ"); - Минута = Формат(ДатаВремя,"ДФ=мм"); - Разница = ?(Разница > 0, "+" + Формат(Разница, "ЧГ=0"), Формат(Разница, "ЧГ=0")); - Возврат "********" + Час + Минута + "00.000000" + Разница; - КонецЦикла; - - Возврат Неопределено; -КонецФункции - &НаКлиенте Функция СформироватьФайлыСкриптаОбновления(Знач ИнтерактивныйРежим) ПараметрыОбновления = ОбновлениеКонфигурацииКлиент.ПолучитьПараметрыОбновления(); @@ -2006,17 +1952,6 @@ Возврат ИмяГлавногоФайлаСкрипта; КонецФункции -&НаКлиенте -Функция УстановленWMI(Знач ВыдаватьСообщения = Истина) - Попытка - Возврат ОбъектWMI() <> Неопределено; - Исключение - ИмяСобытияЖурнала = ОбновлениеКонфигурацииКлиент.СобытиеЖурналаРегистрации(); - ЖурналРегистрацииКлиент.ДобавитьСообщениеДляЖурналаРегистрации(ИмяСобытияЖурнала, "Ошибка", ОписаниеОшибки()); - Возврат Ложь; - КонецПопытки; -КонецФункции - &НаКлиенте Функция ПроверитьДопустимуюДатуОбновления(ДатаВремя, ВыдаватьСообщения = Истина) ТекстСообщения = ПроверитьДопустимуюДатуОбновленияНаСервере(ДатаВремя); @@ -2042,46 +1977,6 @@ КонецФункции -&НаКлиенте -Функция УдалитьЗадачуПланировщика(КодЗадачи) - ИмяСобытияЖурнала = ОбновлениеКонфигурацииКлиент.СобытиеЖурналаРегистрации(); - Если КодЗадачи = 0 Тогда - Возврат Истина; - КонецЕсли; - - Попытка - Сервис = ОбъектWMI(); - - Задача = ПолучитьЗадачуПланировщика(КодЗадачи); - Если Задача = Неопределено Тогда - КодЗадачи = 0; - Возврат Истина; - КонецЕсли; - - КодОшибки = Задача.Delete(); - Результат = КодОшибки = 0; - Если НЕ Результат Тогда // Коды ошибок: http://msdn2.microsoft.com/en-us/library/aa389957(VS.85).aspx. - ЖурналРегистрацииКлиент.ДобавитьСообщениеДляЖурналаРегистрации(ИмяСобытияЖурнала, "Ошибка", - НСтр("ru = 'Ошибка при удалении задачи планировщика:'") - + " " + КодОшибки); - Возврат Результат; - КонецЕсли; - ТекстСообщения = НСтр("ru = 'Задача планировщика успешно удалена (код задачи: %1).'"); - ЖурналРегистрацииКлиент.ДобавитьСообщениеДляЖурналаРегистрации(ИмяСобытияЖурнала, "Информация", - СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ТекстСообщения, КодЗадачи)); - КодЗадачи = 0; - - Возврат Результат; - Исключение - - ЖурналРегистрацииКлиент.ДобавитьСообщениеДляЖурналаРегистрации(ИмяСобытияЖурнала, "Ошибка", - НСтр("ru = 'Ошибка при удалении задачи планировщика:'") - + " " + ОписаниеОшибки()); - Возврат Ложь; - КонецПопытки; - -КонецФункции - &НаКлиенте Функция СоздатьСписокФайловДляПолучения() @@ -2090,20 +1985,17 @@ КаталогОбновленияВИсточнике = ПараметрыОбновления.АдресКаталогаШаблоновНаСервереОбновлений; Для Каждого Обновление Из Объект.ДоступныеОбновления Цикл - Если НЕ ПустаяСтрока(Обновление.ПутьКФайлуОбновления) И ПустаяСтрока(Обновление.ПутьКЛокальномуФайлуОбновления) Тогда - СтруктураИнформацииПоФайлу = Новый Структура("Адрес, ЛокальныйПуть, Обязательный, Получен"); + Если Не ПустаяСтрока(Обновление.ПутьКФайлуОбновления) И ПустаяСтрока(Обновление.ПутьКЛокальномуФайлуОбновления) Тогда - КаталогФайлаОбновления = ПолучитьКаталогФайлаОбновления(Обновление); - Обновление.ЛокальныйОтносительныйКаталог = КаталогФайлаОбновления; - Обновление.ПутьКЛокальномуФайлу = ПараметрыОбновления.КаталогФайловОбновления + - КаталогФайлаОбновления + Обновление.ФайлОбновления; + КаталогФайлаОбновления = ПолучитьКаталогФайлаОбновления(Обновление); + Обновление.ЛокальныйОтносительныйКаталог = КаталогФайлаОбновления; + Обновление.ПутьКЛокальномуФайлу = ПараметрыОбновления.КаталогФайловОбновления + КаталогФайлаОбновления + Обновление.ФайлОбновления; // Описание файла обновления. - СтруктураИнформацииПоФайлу.Очистить(); - СтруктураИнформацииПоФайлу.Вставить("Адрес" , КаталогОбновленияВИсточнике + Обновление.ПутьКФайлуОбновления); - СтруктураИнформацииПоФайлу.Вставить("ЛокальныйПуть" , Обновление.ПутьКЛокальномуФайлу); - СтруктураИнформацииПоФайлу.Вставить("Обязательный" , Истина); - СтруктураИнформацииПоФайлу.Вставить("Получен" , ОпределитьФайлПолучен(СтруктураИнформацииПоФайлу, - Обновление.РазмерФайлаОбновления)); + СтруктураИнформацииПоФайлу = Новый Структура; + СтруктураИнформацииПоФайлу.Вставить("Адрес", КаталогОбновленияВИсточнике + Обновление.ПутьКФайлуОбновления); + СтруктураИнформацииПоФайлу.Вставить("ЛокальныйПуть", Обновление.ПутьКЛокальномуФайлу); + СтруктураИнформацииПоФайлу.Вставить("Обязательный", Истина); + СтруктураИнформацииПоФайлу.Вставить("Получен", ОпределитьФайлПолучен(СтруктураИнформацииПоФайлу, Обновление.РазмерФайлаОбновления)); СписокФайлов.Добавить(СтруктураИнформацииПоФайлу); КонецЕсли; КонецЦикла; @@ -2125,8 +2017,8 @@ НастройкиОбновления = СтандартныеПодсистемыКлиентПовтИсп.ПараметрыРаботыКлиента().НастройкиОбновления; ПараметрыОбновления = ОбновлениеКонфигурацииКлиент.ПолучитьПараметрыОбновления(); ИмяФайла = ПолучитьИмяЛокальногоФайлаОписанияОбновления(); - Результат = ПолучениеФайловИзИнтернетаКлиент.СкачатьФайлНаКлиенте(НастройкиОбновления.АдресСервераДляПроверкиНаличияОбновления + - ПараметрыОбновления.АдресРесурсовДляПроверкиНаличияОбновления + ПараметрыОбновления.ИмяФайлаОписанияОбновления, + Результат = ПолучениеФайловИзИнтернетаКлиент.СкачатьФайлНаКлиенте(НастройкиОбновления.АдресСервераДляПроверкиНаличияОбновления + + ПараметрыОбновления.АдресРесурсовДляПроверкиНаличияОбновления + ПараметрыОбновления.ИмяФайлаОписанияОбновления, Новый Структура("ПутьДляСохранения", ? (ПустаяСтрока(ИмяФайла), Неопределено, ИмяФайла))); Если Результат.Статус Тогда Возврат ИмяФайла; @@ -2139,8 +2031,7 @@ |%2'"); ИмяСобытияЖурнала = ОбновлениеКонфигурацииКлиент.СобытиеЖурналаРегистрации(); ЖурналРегистрацииКлиент.ДобавитьСообщениеДляЖурналаРегистрации(ИмяСобытияЖурнала, - "Ошибка", СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ТекстСообщения, ИмяФайла, - ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()))); + "Ошибка", СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ТекстСообщения, ИмяФайла, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()))); КонецПопытки; Возврат Неопределено; @@ -2169,8 +2060,8 @@ НастройкиОбновления = СтандартныеПодсистемыКлиентПовтИсп.ПараметрыРаботыКлиента().НастройкиОбновления; ПараметрыОбновления = ОбновлениеКонфигурацииКлиент.ПолучитьПараметрыОбновления(); ИмяФайла = ПолучитьИмяЛокальногоФайлаПорядкаОбновления(); - Результат = ПолучениеФайловИзИнтернетаКлиент.СкачатьФайлНаКлиенте(НастройкиОбновления.АдресСервераДляПроверкиНаличияОбновления + - ПараметрыОбновления.АдресРесурсовДляПроверкиНаличияОбновления + ПараметрыОбновления.ИмяФайлаПорядкаОбновления, + Результат = ПолучениеФайловИзИнтернетаКлиент.СкачатьФайлНаКлиенте(НастройкиОбновления.АдресСервераДляПроверкиНаличияОбновления + + ПараметрыОбновления.АдресРесурсовДляПроверкиНаличияОбновления + ПараметрыОбновления.ИмяФайлаПорядкаОбновления, Новый Структура("ПутьДляСохранения", ? (ПустаяСтрока(ИмяФайла), Неопределено, ИмяФайла)), Ложь); Если Результат.Статус Тогда Возврат ИмяФайла; @@ -2180,11 +2071,9 @@ Исключение ТекстСообщения = НСтр("ru = 'Ошибка при удалении временного файла %1 |%2'"); - ИмяСобытияЖурнала = ОбновлениеКонфигурацииКлиент.СобытиеЖурналаРегистрации(); ЖурналРегистрацииКлиент.ДобавитьСообщениеДляЖурналаРегистрации(ИмяСобытияЖурнала, - "Ошибка", СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ТекстСообщения, ИмяФайла, - ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()))); + "Ошибка", СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ТекстСообщения, ИмяФайла, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()))); КонецПопытки; Возврат Неопределено; @@ -2222,7 +2111,7 @@ КороткоеИмяКонфигурации = СтрЗаменить(КороткоеИмяКонфигурации, "/", "\"); КороткоеИмяКонфигурации = ОбновлениеКонфигурацииКлиентСервер.ДобавитьКонечныйРазделительПути(КороткоеИмяКонфигурации); Результат = СтрЗаменить(ДоступноеОбновление.ПутьКФайлуОбновления, "/", "\"); - Результат = ОбновлениеКонфигурацииКлиент.ПолучитьКаталогФайла(Результат); + Результат = ПолучитьКаталогФайла(Результат); Результат = СтрЗаменить(Результат, "_", "."); Результат = ОбновлениеКонфигурацииКлиентСервер.ДобавитьКонечныйРазделительПути(Результат); Возврат Результат; @@ -2300,8 +2189,7 @@ Процедура ПолучитьДоступныеОбновления(ПараметрыОбновления, ВерсияКонфигурации, ВыдаватьСообщения, ДоступноОбновлениеДляСледующейРедакции = Ложь) ПараметрыОбновления = ОбновлениеКонфигурацииКлиент.ПолучитьПараметрыОбновления(ДоступноОбновлениеДляСледующейРедакции); - ПутьКФайлуСпискаОбновлений = ПараметрыОбновления.КаталогФайловОбновления + - ПараметрыОбновления.ИмяФайлаСпискаШаблонов; + ПутьКФайлуСпискаОбновлений = ПараметрыОбновления.КаталогФайловОбновления + ПараметрыОбновления.ИмяФайлаСпискаШаблонов; АдресФайлаВоВремХранилище = ПоместитьВоВременноеХранилище(Новый ДвоичныеДанные(ПутьКФайлуСпискаОбновлений)); Попытка ПолучитьДоступныеОбновленияВИнтервале(СтандартныеПодсистемыКлиентПовтИсп.ПараметрыРаботыКлиента().ВерсияКонфигурации, @@ -2317,22 +2205,21 @@ // Получение файла списка шаблонов с сервера. &НаКлиенте Функция ПолучитьФайлСпискаШаблонов(Знач ВыдаватьСообщения = Истина, ДоступноОбновлениеДляСледующейРедакции = Ложь) - #Если НЕ ВебКлиент Тогда + #Если НЕ ВебКлиент Тогда ПараметрыОбновления = ОбновлениеКонфигурацииКлиент.ПолучитьПараметрыОбновления(ДоступноОбновлениеДляСледующейРедакции); НастройкиОбновления = СтандартныеПодсистемыКлиентПовтИсп.ПараметрыРаботыКлиента().НастройкиОбновления; ПутьКФайлуСпискаШаблонов = ПараметрыОбновления.КаталогФайловОбновления + ПараметрыОбновления.ИмяZipФайлаСпискаШаблонов; - Результат = ПолучениеФайловИзИнтернетаКлиент.СкачатьФайлНаКлиенте(НастройкиОбновления.АдресСервераДляПроверкиНаличияОбновления + - ПараметрыОбновления.АдресРесурсовДляПроверкиНаличияОбновления + ПараметрыОбновления.ИмяZipФайлаСпискаШаблонов, + Результат = ПолучениеФайловИзИнтернетаКлиент.СкачатьФайлНаКлиенте(НастройкиОбновления.АдресСервераДляПроверкиНаличияОбновления + + ПараметрыОбновления.АдресРесурсовДляПроверкиНаличияОбновления + ПараметрыОбновления.ИмяZipФайлаСпискаШаблонов, Новый Структура("ПутьДляСохранения", ? (ПустаяСтрока(ПутьКФайлуСпискаШаблонов), Неопределено, ПутьКФайлуСпискаШаблонов))); Если Результат.Статус <> Истина Тогда Попытка УдалитьФайлы(ПутьКФайлуСпискаШаблонов); Исключение ЖурналРегистрацииКлиент.ДобавитьСообщениеДляЖурналаРегистрации(ОбновлениеКонфигурацииКлиент.СобытиеЖурналаРегистрации(), - "Ошибка", - НСтр("ru = 'Ошибка при удалении временного файла'") + " " + ПутьКФайлуСпискаШаблонов + Символы.ПС + - ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Ошибка при удалении временного файла %1 + |%2'"), ПутьКФайлуСпискаШаблонов, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()))); КонецПопытки; ТекстОшибки = НСтр("ru = 'Ошибка при получении файла списка шаблонов:'") + " " + Результат.СообщениеОбОшибке; Если ВыдаватьСообщения Тогда @@ -2410,31 +2297,34 @@ КонецЕсли; // Вывод сообщения о закачке файла в журнал регистрации. - Сообщение = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = ' Получаем файл %1 в %2'"), + Сообщение = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Получаем файл %1 в %2'"), ОбновлениеКонфигурацииКлиент.ПолучитьПараметрыОбновления().АдресСервераОбновлений + Файл.Значение.Адрес, ? (ПустаяСтрока(Файл.Значение.ЛокальныйПуть), Неопределено, Файл.Значение.ЛокальныйПуть)); Элементы.НадписьПрогресс.Заголовок = Сообщение; ЖурналРегистрацииКлиент.ДобавитьСообщениеДляЖурналаРегистрации(ОбновлениеКонфигурацииКлиент.СобытиеЖурналаРегистрации(), , Сообщение); - СоздатьКаталог(ОбновлениеКонфигурацииКлиент.ПолучитьКаталогФайла(Файл.Значение.ЛокальныйПуть)); - Результат = ПолучениеФайловИзИнтернетаКлиент.СкачатьФайлНаКлиенте( - ОбновлениеКонфигурацииКлиент.ПолучитьПараметрыОбновления().АдресСервераОбновлений + Файл.Значение.Адрес, - Новый Структура("ПутьДляСохранения, Пользователь, Пароль", - ? (ПустаяСтрока(Файл.Значение.ЛокальныйПуть), Неопределено, Файл.Значение.ЛокальныйПуть), - Объект.КодПользователяСервераОбновлений, - Объект.ПарольСервераОбновлений)); + СоздатьКаталог(ПолучитьКаталогФайла(Файл.Значение.ЛокальныйПуть)); + + URL = ОбновлениеКонфигурацииКлиент.ПолучитьПараметрыОбновления().АдресСервераОбновлений + Файл.Значение.Адрес; + + ПараметрыПолучения = Новый Структура; + ПараметрыПолучения.Вставить("ПутьДляСохранения", ?(ПустаяСтрока(Файл.Значение.ЛокальныйПуть), Неопределено, Файл.Значение.ЛокальныйПуть)); + ПараметрыПолучения.Вставить("Пользователь", Объект.КодПользователяСервераОбновлений); + ПараметрыПолучения.Вставить("Пароль", Объект.ПарольСервераОбновлений); + + Результат = СкачатьФайлОбновления(URL, ПараметрыПолучения); + ТекстОшибки = ""; Если Результат.Статус <> Истина Тогда ТекстОшибки = Результат.СообщениеОбОшибке; Попытка УдалитьФайлы(Файл.Значение.ЛокальныйПуть); Исключение - ЖурналРегистрацииКлиент.ДобавитьСообщениеДляЖурналаРегистрации(ОбновлениеКонфигурацииКлиент.СобытиеЖурналаРегистрации(), - "Ошибка", НСтр("ru = 'Ошибка при удалении временного файла'") + " " + - Файл.Значение.ЛокальныйПуть + Символы.ПС + ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); + ЖурналРегистрацииКлиент.ДобавитьСообщениеДляЖурналаРегистрации(ОбновлениеКонфигурацииКлиент.СобытиеЖурналаРегистрации(), + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Ошибка при удалении временного файла %1 + |%2'"), Файл.Значение.ЛокальныйПуть, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()))); КонецПопытки; - Если НЕ ПустаяСтрока(ТекстОшибки) Тогда + Если Не ПустаяСтрока(ТекстОшибки) Тогда Если Файл.Значение.Обязательный И ВыдаватьСообщения Тогда ПоказатьПредупреждение(, ТекстОшибки); Возврат Страницы.ПодключениеКСайту.Имя; @@ -2449,8 +2339,7 @@ КонецЕсли; Иначе // Вывод сообщения в журнал регистрации о копировании файла. - Сообщение = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = ' Получаем файл %1 в %2'"), Файл.Значение.Адрес, Файл.Значение.ЛокальныйПуть); + Сообщение = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Получаем файл %1 в %2'"), Файл.Значение.Адрес, Файл.Значение.ЛокальныйПуть); Элементы.НадписьПрогресс.Заголовок = Сообщение; ЖурналРегистрацииКлиент.ДобавитьСообщениеДляЖурналаРегистрации(ОбновлениеКонфигурацииКлиент.СобытиеЖурналаРегистрации(), , Сообщение); @@ -2476,6 +2365,25 @@ КонецФункции +&НаКлиенте +Функция СкачатьФайлОбновления(URL, ПараметрыПолучения) + + Результат = Неопределено; + + СтандартнаяОбработка = Истина; + + ОбновлениеКонфигурацииКлиентПереопределяемый.ПриСкачиванииФайлаОбновления(URL, ПараметрыПолучения, Результат, СтандартнаяОбработка); + + Если СтандартнаяОбработка Тогда + + Результат = ПолучениеФайловИзИнтернетаКлиент.СкачатьФайлНаКлиенте(URL, ПараметрыПолучения); + + КонецЕсли; + + Возврат Результат; + +КонецФункции + // Функция, выполняющая копирование заданного файла в другой. // // Параметры: @@ -2486,13 +2394,11 @@ &НаКлиенте Функция СкопироватьФайл(ИмяФайлаИсточник, ИмяФайлаНазначение, ВыдаватьСообщения = Ложь) Попытка - СоздатьКаталог(ОбновлениеКонфигурацииКлиент.ПолучитьКаталогФайла(ИмяФайлаНазначение)); + СоздатьКаталог(ПолучитьКаталогФайла(ИмяФайлаНазначение)); КопироватьФайл(ИмяФайлаИсточник, ИмяФайлаНазначение); Исключение - Сообщение = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Ошибка при копировании: %1 - |(источник: %2; приемник: %3)'"), - ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()), + Сообщение = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Ошибка при копировании: %1 + |(Источник: %2; Приемник: %3)'"), ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()), ИмяФайлаИсточник, ИмяФайлаНазначение); ЖурналРегистрацииКлиент.ДобавитьСообщениеДляЖурналаРегистрации( ОбновлениеКонфигурацииКлиент.СобытиеЖурналаРегистрации(), "Предупреждение", Сообщение); @@ -2565,6 +2471,12 @@ Страницы = Элементы.СтраницыПомощника.ПодчиненныеЭлементы; + Если СтандартныеПодсистемыКлиентПовтИсп.ПараметрыРаботыКлиента().ИнформационнаяБазаФайловая И УстановленыРасширения Тогда + ПоказатьПредупреждение(, НСтр("ru = 'Перед обновлением необходимо удалить все подключенные расширения конфигурации. + |После завершения обновления их нужно подключить заново.'")); + Возврат Страницы.ДоброПожаловать.Имя; + КонецЕсли; + ЖурналРегистрацииКлиент.ДобавитьСообщениеДляЖурналаРегистрации(ОбновлениеКонфигурацииКлиент.СобытиеЖурналаРегистрации(), "Информация", НСтр("ru = 'Проверка обновления в Интернете...'")); @@ -2618,13 +2530,13 @@ УдалитьЗадачуПланировщика(Объект.КодЗадачиПланировщика); ИмяГлавногоФайлаСкрипта = СформироватьФайлыСкриптаОбновления(Истина); ЖурналРегистрацииКлиент.ДобавитьСообщениеДляЖурналаРегистрации(ОбновлениеКонфигурацииКлиент.СобытиеЖурналаРегистрации(), "Информация", - НСтр("ru = 'Выполняется процедура обновления конфигурации:'") - + " " + ИмяГлавногоФайлаСкрипта); - ЗаписатьСтатусОбновления(ИмяПользователя(), Истина, Ложь, Ложь, ПараметрыПриложения["СтандартныеПодсистемы.СообщенияДляЖурналаРегистрации"]); + НСтр("ru = 'Выполняется процедура обновления конфигурации:'") + " " + ИмяГлавногоФайлаСкрипта); + ЗаписатьСтатусОбновления(ИмяПользователя(), Истина, Ложь, Ложь, ИмяГлавногоФайлаСкрипта, ПараметрыПриложения["СтандартныеПодсистемы.СообщенияДляЖурналаРегистрации"]); СтрокаЗапуска = "cmd /c """"%1"""" [p1]%2[/p1][p2]%3[/p2]"; СтрокаЗапуска = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(СтрокаЗапуска, ИмяГлавногоФайлаСкрипта, - ПараметрыАдминистрирования.ПарольАдминистратораИнформационнойБазы, ПараметрыАдминистрирования.ПарольАдминистратораКластера); + СтрокаUnicode(ПараметрыАдминистрирования.ПарольАдминистратораИнформационнойБазы), + СтрокаUnicode(ПараметрыАдминистрирования.ПарольАдминистратораКластера)); Оболочка = Новый COMОбъект("Wscript.Shell"); Оболочка.RegWrite("HKCU\Software\Microsoft\Internet Explorer\Styles\MaxScriptStatements", 1107296255, "REG_DWORD"); Оболочка.Run(СтрокаЗапуска, 0); @@ -2632,38 +2544,24 @@ КонецПроцедуры &НаСервереБезКонтекста -Процедура ЗаписатьСтатусОбновления(ИмяАдминистратораОбновления, ОбновлениеЗапланировано, ОбновлениеВыполнено, РезультатОбновления, - СообщенияДляЖурналаРегистрации = Неопределено) +Процедура ЗаписатьСтатусОбновления(ИмяАдминистратораОбновления, ОбновлениеЗапланировано, ОбновлениеВыполнено, + РезультатОбновления, ИмяФайлаСкрипта = "", СообщенияДляЖурналаРегистрации = Неопределено) + + КаталогСкрипта = ""; + Если СтандартныеПодсистемыСервер.ЭтоБазоваяВерсияКонфигурации() Тогда + КаталогСкрипта = Лев(ИмяФайлаСкрипта, СтрДлина(ИмяФайлаСкрипта) - 10); + КонецЕсли; ОбновлениеКонфигурации.ЗаписатьСтатусОбновления( ИмяАдминистратораОбновления, ОбновлениеЗапланировано, ОбновлениеВыполнено, РезультатОбновления, + КаталогСкрипта, СообщенияДляЖурналаРегистрации); КонецПроцедуры -&НаКлиенте -Функция ОбъектWMI() - // WMI: http://www.microsoft.com/technet/scriptcenter/resources/wmifaq.mspx. - Локатор = Новый COMObject("WbemScripting.SWbemLocator"); - Возврат Локатор.ConnectServer(".", "\root\cimv2"); -КонецФункции - -&НаКлиенте -Функция ПолучитьЗадачуПланировщика(Знач КодЗадачи) - Если КодЗадачи = 0 Тогда - Возврат Неопределено; - КонецЕсли; - - Попытка - Возврат ОбъектWMI().Get("Win32_ScheduledJob.JobID=" + КодЗадачи); - Исключение - Возврат Неопределено; - КонецПопытки; -КонецФункции - &НаКлиенте Функция ВозможенЗапускОбновления() @@ -2708,21 +2606,10 @@ КонецПроцедуры &НаСервере -Функция ВыполнятьСжатиеТаблицИБ() +Функция ВыполнитьОтложенныеОбработчики() - Если Объект.ДоступныеОбновления.Количество() = 0 Тогда - Возврат Ложь; - КонецЕсли; - - ДоступнаяВерсия = ОбщегоНазначенияКлиентСервер.ВерсияКонфигурацииБезНомераСборки(Объект.ДоступныеОбновления[Объект.ДоступныеОбновления.Количество()-1].Версия); - - Если ПустаяСтрока(ДоступнаяВерсия) Тогда - Возврат Ложь; - КонецЕсли; - - ТекущаяВерсия = ОбщегоНазначенияКлиентСервер.ВерсияКонфигурацииБезНомераСборки(Метаданные.Версия); - - Возврат ОбщегоНазначенияКлиентСервер.СравнитьВерсииБезНомераСборки(ДоступнаяВерсия, ТекущаяВерсия) > 0; + Возврат Не СтандартныеПодсистемыСервер.ЭтоБазоваяВерсияКонфигурации() + И ОбновлениеИнформационнойБазыСлужебный.СтатусНевыполненныхОбработчиков() = "СтатусНеВыполнено"; КонецФункции @@ -2740,4 +2627,405 @@ КонецФункции +&НаСервере +Функция ПараметрыСтраницыВыборРежимаОбновленияСервер(СообщенияДляЖурналаРегистрации) + + ПараметрыСтраницы = Новый Структура; + ПараметрыСтраницы.Вставить("ЕстьОтложенныеОбработчики", (ОбновлениеИнформационнойБазыСлужебный.СтатусНевыполненныхОбработчиков() = "СтатусНеВыполнено")); + ПараметрыСтраницы.Вставить("ИнформацияОСоединениях", СоединенияИБ.ИнформацияОСоединениях(Ложь, СообщенияДляЖурналаРегистрации)); + Возврат ПараметрыСтраницы; + +КонецФункции + +&НаКлиенте +Процедура ПрочитатьДанныеВЖурналРегистрации() + + МассивФайлов = НайтиФайлы(КаталогСкрипта, "log*.txt"); + + Если МассивФайлов.Количество() = 0 Тогда + Возврат; + КонецЕсли; + + ИмяСобытияЖурнала = ОбновлениеКонфигурацииКлиент.СобытиеЖурналаРегистрации(); + + ФайлЖурнала = МассивФайлов[0]; + ТекстовыйДокумент = Новый ТекстовыйДокумент; + ТекстовыйДокумент.Прочитать(ФайлЖурнала.ПолноеИмя); + + Для НомерСтроки = 1 По ТекстовыйДокумент.КоличествоСтрок() Цикл + + ТекущаяСтрока = ТекстовыйДокумент.ПолучитьСтроку(НомерСтроки); + Если ПустаяСтрока(ТекущаяСтрока) Тогда + Продолжить; + КонецЕсли; + + ПредставлениеУровня = "Информация"; + Если Сред(ТекущаяСтрока, 3, 1) = "." И Сред(ТекущаяСтрока, 6, 1) = "." Тогда // Строка с датой + МассивСтроки = СтрРазделить(ТекущаяСтрока, " ", Ложь); + МассивДаты = СтрРазделить(МассивСтроки[0], "."); + МассивВремени = СтрРазделить(МассивСтроки[1], ":"); + ДатаСобытия = Дата(МассивДаты[2], МассивДаты[1], МассивДаты[0], МассивВремени[0], МассивВремени[1], МассивВремени[2]); + Если МассивСтроки[2] = "{ERR}" Тогда + ПредставлениеУровня = "Ошибка"; + КонецЕсли; + Комментарий = СокрЛП(Сред(ТекущаяСтрока, СтрНайти(ТекущаяСтрока, "}") + 2)); + + Если Комментарий = Нстр("ru = 'Обновление выполнено'") Тогда + Объект.РезультатОбновления = Истина; + Продолжить; + ИначеЕсли Комментарий = Нстр("ru = 'Обновление не выполнено'") Тогда + Объект.РезультатОбновления = Ложь; + Продолжить; + КонецЕсли; + + Иначе + Комментарий = ТекущаяСтрока; + КонецЕсли; + + ЖурналРегистрацииКлиент.ДобавитьСообщениеДляЖурналаРегистрации(ИмяСобытияЖурнала, ПредставлениеУровня, Комментарий, ДатаСобытия); + + КонецЦикла; + +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// Планирование обновления в указанное время. + +// Запланировать обновление конфигурации. +// +&НаКлиенте +Функция ЗапланироватьОбновлениеКонфигурации() + Если Не УдалитьЗадачуПланировщика(Объект.КодЗадачиПланировщика) Тогда + Возврат Ложь; + КонецЕсли; + ИмяГлавногоФайлаСкрипта = СформироватьФайлыСкриптаОбновления(Ложь); + + ИмяЗапускаемогоСкрипта = ОпределитьИмяСкрипта(); + ПутьЗапускаемогоСкрипта = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку("%1 %2 //nologo ""%3"" /p1:""%4"" /p2:""%5""", + ИмяЗапускаемогоСкрипта, ?(РежимОтладкиСкрипта(), "//X //D", ""), ИмяГлавногоФайлаСкрипта, + СтрокаUnicode(ПараметрыАдминистрирования.ПарольАдминистратораИнформационнойБазы), + СтрокаUnicode(ПараметрыАдминистрирования.ПарольАдминистратораКластера)); + + Объект.КодЗадачиПланировщика = СоздатьЗадачуПланировщика(ПутьЗапускаемогоСкрипта, Объект.ДатаВремяОбновления); + ЗаписатьСтатусОбновления(ИмяПользователя(), Объект.КодЗадачиПланировщика <> 0, Ложь, Ложь); + Возврат Объект.КодЗадачиПланировщика <> 0; +КонецФункции + +&НаКлиенте +Функция СоздатьЗадачуПланировщика(Знач ИмяФайлаПрограммы, Знач ДатаВремя) + + ИмяСобытияЖурнала = ОбновлениеКонфигурацииКлиент.СобытиеЖурналаРегистрации(); + + Если ВерсияWindowsВышеVista() Тогда + Возврат СоздатьЗадачуПланировщикаScheduleService(ИмяФайлаПрограммы, ДатаВремя, ИмяСобытияЖурнала); + Иначе + Возврат СоздатьЗадачуПланировщикаScheduledJob(ИмяФайлаПрограммы, ДатаВремя, ИмяСобытияЖурнала); + КонецЕсли; + +КонецФункции + +// Создать задачу планировщика ОС Windows. +// +// Параметры: +// ИмяФайлаПрограммы - Строка - путь к запускаемому приложению или файлу. +// ДатаВремя - Дата - Дата и время запуска. Значение даты может быть +// в интервале [текущая дата, текущая дата + 30 дней). +// +// Возвращаемое значение: +// Число - код созданной задачи планировщика или "Неопределено" при ошибке. +// +&НаКлиенте +Функция СоздатьЗадачуПланировщикаScheduledJob(Знач ИмяФайлаПрограммы, Знач ДатаВремя, Знач ИмяСобытияЖурнала) + + Попытка + + Планировщик = ОбъектWMI().Get("Win32_ScheduledJob"); + КодЗадачи = 0; + КодОшибки = Планировщик.Create(ИмяФайлаПрограммы, // Command + ПреобразоватьВремяВФорматCIM(ДатаВремя), // StartTime + Ложь, // RunRepeatedly + , // DaysOfWeek + Pow(2, День(ДатаВремя) - 1), // DaysOfMonth + Ложь, // InteractWithDesktop + КодЗадачи); // out JobId + + Исключение + + ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Ошибка при создании задачи планировщика: %1'"), ОписаниеОшибки()); + ЖурналРегистрацииКлиент.ДобавитьСообщениеДляЖурналаРегистрации(ИмяСобытияЖурнала, "Ошибка", ТекстСообщения); + Возврат 0; + + КонецПопытки; + + Если КодОшибки <> 0 Тогда // Коды ошибок: http://msdn2.microsoft.com/en-us/library/aa389389(VS.85).aspx. + ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Ошибка при создании задачи планировщика: %1'"), КодОшибки); + ЖурналРегистрацииКлиент.ДобавитьСообщениеДляЖурналаРегистрации(ИмяСобытияЖурнала, "Ошибка", ТекстСообщения); + Возврат 0; + КонецЕсли; + + ТекстСообщения = НСтр("ru = 'Задача планировщика успешно запланирована (команда: %1; дата: %2; код задачи: %3).'"); + ЖурналРегистрацииКлиент.ДобавитьСообщениеДляЖурналаРегистрации(ИмяСобытияЖурнала, + "Информация", СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ТекстСообщения, ИмяФайлаПрограммы, ДатаВремя, КодЗадачи)); + + Возврат КодЗадачи; + +КонецФункции + +&НаКлиенте +Функция СоздатьЗадачуПланировщикаScheduleService(Знач ИмяФайлаПрограммы, Знач ДатаВремя, Знач ИмяСобытияЖурнала) + + ГенераторСлучайныхЧисел = Новый ГенераторСлучайныхЧисел; + КодЗадачи = Формат(ГенераторСлучайныхЧисел.СлучайноеЧисло(1000, 9999), "ЧГ=0"); + ИмяЗадачи = ИмяЗадачиScheduleService(КодЗадачи); + ДатаЗапуска = Формат(ДатаВремя, "ДФ=yyyy-MM-ddTHH:mm:ss"); + + РазделительИмениИПараметров = СтрНайти(ИмяФайлаПрограммы, ".exe") + 3; + ИмяПрограммы = Лев(ИмяФайлаПрограммы, РазделительИмениИПараметров); + ПараметрыЗапуска = Сред(ИмяФайлаПрограммы, РазделительИмениИПараметров + 2); + + Попытка + + СлужбаПланировщика = СлужбаПланировщика(); + ОписаниеЗадачи = СлужбаПланировщика.NewTask(0); + ОписаниеЗадачи.RegistrationInfo.Description = Нстр("ru = 'Обновление конфигурации 1С:Предприятие'"); + + ОписаниеЗадачи.Principal.RunLevel = 1; + + ОписаниеЗадачи.Settings.Enabled = Истина; + ОписаниеЗадачи.Settings.Hidden = Ложь; + + Триггер = ОписаниеЗадачи.Triggers.Create(1); + Триггер.StartBoundary = ДатаЗапуска; + Триггер.Enabled = Истина; + + Действие = ОписаниеЗадачи.Actions.Create(0); + Действие.Path = ИмяПрограммы; + Действие.Arguments = ПараметрыЗапуска; + + Корень = СлужбаПланировщика.GetFolder("\"); + Задача = Корень.RegisterTaskDefinition(ИмяЗадачи, ОписаниеЗадачи, 6, "SYSTEM", Неопределено, 4); + + Исключение + + ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Ошибка при создании задачи планировщика: %1'"), ОписаниеОшибки()); + ЖурналРегистрацииКлиент.ДобавитьСообщениеДляЖурналаРегистрации(ИмяСобытияЖурнала, "Ошибка", ТекстСообщения); + Возврат 0; + + КонецПопытки; + + Возврат КодЗадачи; + +КонецФункции + +&НаКлиенте +Функция СуществуетЗадачаПланировщика(Знач КодЗадачи) + + Если КодЗадачи = 0 Тогда + Возврат Ложь; + КонецЕсли; + + Если ВерсияWindowsВышеVista() Тогда + ЗадачаПланировщика = ПолучитьЗадачуПланировщикаScheduleService(КодЗадачи); + Иначе + ЗадачаПланировщика = ПолучитьЗадачуПланировщикаScheduledJob(КодЗадачи); + КонецЕсли; + + Возврат ЗадачаПланировщика <> Неопределено; + +КонецФункции + +&НаКлиенте +Функция ПолучитьЗадачуПланировщикаScheduledJob(Знач КодЗадачи) + + Попытка + Возврат ОбъектWMI().Get("Win32_ScheduledJob.JobID=" + КодЗадачи); + Исключение + Возврат Неопределено; + КонецПопытки; + +КонецФункции + +&НаКлиенте +Функция ПолучитьЗадачуПланировщикаScheduleService(Знач КодЗадачи) + + НайденнаяЗадача = Неопределено; + ИмяЗадачи = ИмяЗадачиScheduleService(КодЗадачи); + + СлужбаПланировщика = СлужбаПланировщика(); + Корень = СлужбаПланировщика.GetFolder("\"); + СписокЗадач = Корень.GetTasks(0); + + Для Каждого Задача Из СписокЗадач Цикл + Если Задача.Name = ИмяЗадачи Тогда + НайденнаяЗадача = Задача; + КонецЕсли; + КонецЦикла; + + Возврат НайденнаяЗадача; + +КонецФункции + +&НаКлиенте +Функция УдалитьЗадачуПланировщика(КодЗадачи) + + ИмяСобытияЖурнала = ОбновлениеКонфигурацииКлиент.СобытиеЖурналаРегистрации(); + Если КодЗадачи = 0 Тогда + Возврат Истина; + КонецЕсли; + + Если Не СуществуетЗадачаПланировщика(КодЗадачи) Тогда + Возврат Истина; + КонецЕсли; + + Если ВерсияWindowsВышеVista() Тогда + Возврат УдалитьЗадачуПланировщикаScheduleService(КодЗадачи, ИмяСобытияЖурнала); + Иначе + Возврат УдалитьЗадачуПланировщикаScheduledJob(КодЗадачи, ИмяСобытияЖурнала); + КонецЕсли; + +КонецФункции + +&НаКлиенте +Функция УдалитьЗадачуПланировщикаScheduledJob(КодЗадачи, ИмяСобытияЖурнала) + + Попытка + + Сервис = ОбъектWMI(); + Задача = ПолучитьЗадачуПланировщикаScheduledJob(КодЗадачи); + КодОшибки = Задача.Delete(); + + Исключение + + ТекстСообщения = НСтр("ru = 'Ошибка при удалении задачи планировщика: %1'"); + ЖурналРегистрацииКлиент.ДобавитьСообщениеДляЖурналаРегистрации(ИмяСобытияЖурнала, "Ошибка", + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ТекстСообщения, ОписаниеОшибки())); + Возврат Ложь; + КонецПопытки; + + Результат = КодОшибки = 0; + Если Не Результат Тогда // Коды ошибок: http://msdn2.microsoft.com/en-us/library/aa389957(VS.85).aspx. + ТекстСообщения = НСтр("ru = 'Ошибка при удалении задачи планировщика: %1'"); + ЖурналРегистрацииКлиент.ДобавитьСообщениеДляЖурналаРегистрации(ИмяСобытияЖурнала, "Ошибка", + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ТекстСообщения, КодОшибки)); + Возврат Результат; + КонецЕсли; + ТекстСообщения = НСтр("ru = 'Задача планировщика успешно удалена (код задачи: %1).'"); + ЖурналРегистрацииКлиент.ДобавитьСообщениеДляЖурналаРегистрации(ИмяСобытияЖурнала, "Информация", + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ТекстСообщения, КодЗадачи)); + КодЗадачи = 0; + + Возврат Результат; + +КонецФункции + +&НаКлиенте +Функция УдалитьЗадачуПланировщикаScheduleService(КодЗадачи, ИмяСобытияЖурнала) + + ИмяЗадачи = ИмяЗадачиScheduleService(КодЗадачи); + + Попытка + + СлужбаПланировщика = СлужбаПланировщика(); + Корень = СлужбаПланировщика.GetFolder("\"); + Результат = Корень.DeleteTask(ИмяЗадачи, 0); + + Исключение + + ТекстСообщения = НСтр("ru = 'Ошибка при удалении задачи планировщика: %1'"); + ЖурналРегистрацииКлиент.ДобавитьСообщениеДляЖурналаРегистрации(ИмяСобытияЖурнала, "Ошибка", + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ТекстСообщения, ОписаниеОшибки())); + Возврат Ложь; + + КонецПопытки; + + Возврат Истина; + +КонецФункции + +&НаКлиенте +Функция ИмяЗадачиScheduleService(Знач КодЗадачи) + + Возврат СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(Нстр("ru = 'Обновление конфигурации (%1)'"), Формат(КодЗадачи, "ЧГ=0")); + +КонецФункции + +&НаКлиенте +Функция ПреобразоватьВремяВФорматCIM(ДатаВремя) + Локатор = Новый COMObject("WbemScripting.SWbemLocator"); + Сервис = Локатор.ConnectServer(".", "\root\cimv2"); + ComputerSystems = Сервис.ExecQuery("Select * from Win32_ComputerSystem"); + Для Каждого ComputerSystem Из ComputerSystems Цикл + Разница = ComputerSystem.CurrentTimeZone; + Час = Формат(ДатаВремя,"ДФ=ЧЧ"); + Минута = Формат(ДатаВремя,"ДФ=мм"); + Разница = ?(Разница > 0, "+" + Формат(Разница, "ЧГ=0"), Формат(Разница, "ЧГ=0")); + Возврат "********" + Час + Минута + "00.000000" + Разница; + КонецЦикла; + + Возврат Неопределено; +КонецФункции + +&НаКлиенте +Функция ОбъектWMI() + // WMI: http://www.microsoft.com/technet/scriptcenter/resources/wmifaq.mspx. + Локатор = Новый COMObject("WbemScripting.SWbemLocator"); + Возврат Локатор.ConnectServer(".", "\root\cimv2"); +КонецФункции + +&НаКлиенте +Функция СлужбаПланировщика() + СлужбаПланировщика = Новый COMObject("Schedule.Service"); + СлужбаПланировщика.Connect(); + Возврат СлужбаПланировщика; +КонецФункции + +&НаКлиенте +Функция ВозможноЗапланироватьОбновление(Знач ВыдаватьСообщения = Истина) + + ВерсияWindowsВышеVista = ВерсияWindowsВышеVista(); + + Попытка + ОбъектAPI = ?(ВерсияWindowsВышеVista, СлужбаПланировщика(), ОбъектWMI()); + Возврат ОбъектAPI <> Неопределено; + Исключение + ИмяСобытияЖурнала = ОбновлениеКонфигурацииКлиент.СобытиеЖурналаРегистрации(); + ЖурналРегистрацииКлиент.ДобавитьСообщениеДляЖурналаРегистрации(ИмяСобытияЖурнала, "Ошибка", ОписаниеОшибки()); + Возврат Ложь; + КонецПопытки; + +КонецФункции + +// Определяет что текущая версия windows больше Vista (Vista, Windows 7, Windows 8) +// +Функция ВерсияWindowsВышеVista() + + СистемнаяИнформация = Новый СистемнаяИнформация(); + ВерсияОС = СистемнаяИнформация.ВерсияОС; + + ПозицияТочки = СтрНайти(ВерсияОС, "."); + НомерВерсии = Сред(ВерсияОС, ПозицияТочки - 1, 1); + + Возврат Число(НомерВерсии) >= 6; + +КонецФункции + +&НаКлиенте +// Возвратить каталог файла - часть пути без имени файла. +// +// Параметры: +// ПутьКФайлу - Строка - путь к файлу. +// +// Возвращаемое значение: +// Строка - каталог файла +Функция ПолучитьКаталогФайла(Знач ПутьКФайлу) + + ПозицияСимвола = СтрНайти(ПутьКФайлу, "\", НаправлениеПоиска.СКонца); + Если ПозицияСимвола > 1 Тогда + Возврат Сред(ПутьКФайлу, 1, ПозицияСимвола - 1); + Иначе + Возврат ""; + КонецЕсли; + +КонецФункции + #КонецОбласти diff --git a/SSL/src/DataProcessors/ОбновлениеКонфигурации/Help/ru.html b/SSL/src/DataProcessors/ПоискИУстановкаОбновлений/Help/ru.html similarity index 93% rename from SSL/src/DataProcessors/ОбновлениеКонфигурации/Help/ru.html rename to SSL/src/DataProcessors/ПоискИУстановкаОбновлений/Help/ru.html index 408dab518..041d00d23 100644 --- a/SSL/src/DataProcessors/ОбновлениеКонфигурации/Help/ru.html +++ b/SSL/src/DataProcessors/ПоискИУстановкаОбновлений/Help/ru.html @@ -8,7 +8,7 @@ </li><li><a href="#2">Локальный или сетевой каталог</a> - из файла обновления в локальном или сетевом каталоге (или с диска 1С:ИТС). <p>Если у Вас уже имеется файл обновления, то помощник позволяет провести обновление с использованием файла поставки обновления (.cfu) или файла поставки конфигурации (.cf) из локального или сетевого каталога. Если файл обновления уже загружен в основную конфигурацию, и она отличается от конфигурации информационной базы, то необходимо указать вариант обновления без использования файла обновления.</p></li></ul><h3><a name="#1">Получение обновлений через Интернет</a></h3> <p>На первой странице помощника выберите вариант <strong>Автоматический поиск обновления в Интернете</strong><strong> (рекомендуется)</strong>. Если на пользовательском сайте имеется доступное обновление, то программа сообщает номер версии, краткое описание, размер обновления и предлагает его установить. </p> -<p>Программа может автоматически проверять наличие обновления конфигурации на пользовательском сайте при каждом запуске или по расписанию, и далее обновлять конфигурацию также автоматически. Состояние автоматической проверки обновления в Интернете отражается ссылкой в нижней части окна <strong>Помощника обновления конфигурации</strong>. Для <a href="DataProcessor.ОбновлениеКонфигурации.Form.НастройкаРасписания/Help">настройки автоматической проверки обновления</a> в Интернете перейдите по ссылке.</p> +<p>Программа может автоматически проверять наличие обновления конфигурации на пользовательском сайте при каждом запуске или по расписанию, и далее обновлять конфигурацию также автоматически. Состояние автоматической проверки обновления в Интернете отражается ссылкой в нижней части окна <strong>Помощника обновления конфигурации</strong>. Для <a href="DataProcessor.ПоискИУстановкаОбновлений.Form.НастройкаРасписания/Help">настройки автоматической проверки обновления</a> в Интернете перейдите по ссылке.</p> <p>Обновление конфигурации через Интернет включает несколько шагов:</p> <ul><li>Подключение к пользовательскому сайту; <ul><li>При первом обновлении с пользовательского сайта необходимо указать <strong>Код пользователя</strong> и <strong>Пароль</strong> для доступа. Доступ к получению обновлений имеют только зарегистрированные пользователи программ 1С:Предприятие. По ссылке <strong>Как получить код пользователя и пароль</strong> перейдите для получения подробной информации о регистрации. Подробная информация о том, как можно получить код пользователя и пароль, содержится в разделе методической поддержки на сайте <a href="http://v8.1c.ru/"><strong>v8.1c.ru</strong></a>. Код пользователя запоминается автоматически. Включите флажок <strong>Запомнить пароль</strong>, для того чтобы сохранить пароль в программе. @@ -32,7 +32,7 @@ <h3>Установка обновлений </h3> <p>После того, как обновление было получено локально на компьютер, помощник предлагает его установить.  </p> <ul><li>Установка обновления выполняется от имени текущего пользователя. Введите <strong>Параметры администрирования информационной базы - Имя пользователя</strong> и <strong>Пароль</strong>, если для доступа к информационной базе необходима авторизация. В случае клиент-серверного варианта работы программы также может потребоваться ввести имя и пароль администратора кластера серверов. -</li><li>Перед началом обновления версии программы рекомендуется создавать <a href="DataProcessor.ОбновлениеКонфигурации.Form.НастройкаРезервнойКопии/Help">резервную копию</a> информационной базы. Резервная копия используется для автоматического восстановления информационной базы в случае нештатной ситуации. К настройке автоматического создания резервной копии в файловом варианте работы можно перейти по ссылке <strong>Создавать временную резервную копию ИБ и выполнять откат при нештатной ситуации</strong>. +</li><li>Перед началом обновления версии программы рекомендуется создавать <a href="DataProcessor.ПоискИУстановкаОбновлений.Form.НастройкаРезервнойКопии/Help">резервную копию</a> информационной базы. Резервная копия используется для автоматического восстановления информационной базы в случае нештатной ситуации. К настройке автоматического создания резервной копии в файловом варианте работы можно перейти по ссылке <strong>Создавать временную резервную копию ИБ и выполнять откат при нештатной ситуации</strong>. <ul><li>Если для резервного копирования используются сторонние средства, то можно отключить автоматическое создание резервной копии с помощью ссылки <strong>Создавать временную резервную копию ИБ и выполнять откат при нештатной ситуации</strong>, расположенной внизу страницы помощника. Создать резервную копию можно и другими средствами, например, путем копирования файла информационной базы. В клиент-серверном варианте работы рекомендуется создать резервную копию самостоятельно средствами SQL-сервера.</li></ul></li><li>С помощью переключателя можно уточнить время обновления конфигурации ИБ: <ul><li><strong>Выполнить установку обновления прямо сейчас</strong> - для обновления потребуется перезапуск. </li><li><strong>Напомнить при завершении работы</strong>. @@ -44,8 +44,8 @@ </li><li>Если к программе подключены другие программы в режиме внешнего соединения, то необходимо завершить их работу.</li></ul></li><li>Если все указанные условия выполнены, после нажатия кнопки <strong>Далее</strong> программа автоматически создаст резервную копию ИБ (если это предусмотрено), и обновит конфигурацию. </li><li>Процесс обновления программы может занять продолжительное время, в зависимости от производительности компьютера и объема информационной базы. Не выключайте питание компьютера до завершения процесса. </li><li>После завершения обновления конфигурации программа будет автоматически запущена и готова к дальнейшей работе. Для базовых версий конфигураций после обновления требуется выполнить первый запуск программы от имени администратора, во время которого будет выполнено завершение процесса обновления конфигурации. -</li><li>Помощник выводит сообщение об успешном завершении обновления программы. Перейдите по ссылке <strong>Новое в этой версии</strong>, для того чтобы просмотреть <a href="CommonForm.ОписаниеИзмененийСистемы/Help">описание изменений программы</a>. Нажмите <strong>Готово</strong>, для того чтобы приступить к работе в программе. -</li><li>Если в программе предусмотрено <a href="DataProcessor.ОбновлениеИнформационнойБазы.Form.ИндикацияХодаОтложенногоОбновленияИБ/Help">отложенное обновление</a>, выводится предупреждение о необходимости ознакомиться <strong>с дополнительными инструкциями</strong> для завершения обновления. Перейдите по соответствующей ссылке.</li></ul><h3><a name="#3">Планирование обновлений</a></h3> +</li><li>Помощник выводит сообщение об успешном завершении обновления программы. Перейдите по ссылке <strong>Новое в этой версии</strong>, для того чтобы просмотреть <a href="CommonForm.ОписаниеИзмененийПрограммы/Help">описание изменений программы</a>. Нажмите <strong>Готово</strong>, для того чтобы приступить к работе в программе. +</li><li>Если в программе предусмотрено <a href="DataProcessor.РезультатыОбновленияПрограммы.Form.ИндикацияХодаОтложенногоОбновленияИБ/Help">отложенное обновление</a>, выводится предупреждение о необходимости ознакомиться <strong>с дополнительными инструкциями</strong> для завершения обновления. Перейдите по соответствующей ссылке.</li></ul><h3><a name="#3">Планирование обновлений</a></h3> <ul><li>При работе в клиент-серверном варианте работы программы можно задавать отложенное по времени обновление, например, можно отложить обновление конфигурации на ночь. </li><li>Для этого при обновлении конфигурации в помощнике выберите с помощью переключателя <strong>Запланировать установку обновления на указанное время</strong> и укажите время и дату обновления. </li><li>Существует возможность настроить отправку отчета на указанный адрес электронной почты об успешном или неуспешном выполнении обновления. Отправка сообщения производится с компьютера, на которой установлен сервер 1С:Предприятие. Для этого включите флажок <strong>Выслать отчет на почту</strong>, напишите адрес электронной почты.</li></ul><p class="Important">Запланированное обновление будет выполнено с клиентского компьютера в фоновом режиме. Питание компьютера должно быть включено в указанную дату и время.</p> diff --git a/SSL/src/DataProcessors/ОбновлениеКонфигурации/ObjectModule.bsl b/SSL/src/DataProcessors/ПоискИУстановкаОбновлений/ManagerModule.bsl similarity index 100% rename from SSL/src/DataProcessors/ОбновлениеКонфигурации/ObjectModule.bsl rename to SSL/src/DataProcessors/ПоискИУстановкаОбновлений/ManagerModule.bsl diff --git a/SSL/src/DataProcessors/ПоискИУстановкаОбновлений/ObjectModule.bsl b/SSL/src/DataProcessors/ПоискИУстановкаОбновлений/ObjectModule.bsl new file mode 100644 index 000000000..e69de29bb diff --git a/SSL/src/DataProcessors/ОбновлениеКонфигурации/Templates/ДопФайлОбновленияКонфигурации/Template.txt b/SSL/src/DataProcessors/ПоискИУстановкаОбновлений/Templates/ДопФайлОбновленияКонфигурации/Template.txt similarity index 100% rename from SSL/src/DataProcessors/ОбновлениеКонфигурации/Templates/ДопФайлОбновленияКонфигурации/Template.txt rename to SSL/src/DataProcessors/ПоискИУстановкаОбновлений/Templates/ДопФайлОбновленияКонфигурации/Template.txt diff --git a/SSL/src/DataProcessors/ОбновлениеКонфигурации/Templates/ЗаставкаОбновленияКонфигурации/Template.txt b/SSL/src/DataProcessors/ПоискИУстановкаОбновлений/Templates/ЗаставкаОбновленияКонфигурации/Template.txt similarity index 83% rename from SSL/src/DataProcessors/ОбновлениеКонфигурации/Templates/ЗаставкаОбновленияКонфигурации/Template.txt rename to SSL/src/DataProcessors/ПоискИУстановкаОбновлений/Templates/ЗаставкаОбновленияКонфигурации/Template.txt index ee516db41..d35564a26 100644 --- a/SSL/src/DataProcessors/ОбновлениеКонфигурации/Templates/ЗаставкаОбновленияКонфигурации/Template.txt +++ b/SSL/src/DataProcessors/ПоискИУстановкаОбновлений/Templates/ЗаставкаОбновленияКонфигурации/Template.txt @@ -2,7 +2,7 @@ <head> <meta http-equiv="Content-Language" content="ru-ru"> <meta http-equiv="Content-Type" content="text/html; charset=unicode"> - <title>Обновление конфигурации "1C:Предприятие"... + Обновление конфигурации "1С:Предприятие"... @@ -10,8 +10,8 @@ - +
        diff --git a/SSL/src/DataProcessors/ОбновлениеКонфигурации/Templates/МакетФайлаОбновленияКонфигурации/Template.txt b/SSL/src/DataProcessors/ПоискИУстановкаОбновлений/Templates/МакетФайлаОбновленияКонфигурации/Template.txt similarity index 82% rename from SSL/src/DataProcessors/ОбновлениеКонфигурации/Templates/МакетФайлаОбновленияКонфигурации/Template.txt rename to SSL/src/DataProcessors/ПоискИУстановкаОбновлений/Templates/МакетФайлаОбновленияКонфигурации/Template.txt index e5c4c2df1..e79c948c5 100644 --- a/SSL/src/DataProcessors/ОбновлениеКонфигурации/Templates/МакетФайлаОбновленияКонфигурации/Template.txt +++ b/SSL/src/DataProcessors/ПоискИУстановкаОбновлений/Templates/МакетФайлаОбновленияКонфигурации/Template.txt @@ -19,6 +19,7 @@ var comConnectorName = [ИмяCOMСоединителя]; // имя COM-кла var useComConnector = [ИспользоватьCOMСоединитель]; // флаг использования COM-соединения для работы с 1С:Предприятием 8 var startEnterprise = [ЗапускСеансаПослеОбновления]; // выполнять запуск предприятия после обновления var makeCompression = [ВыполнятьСжатиеТаблицИБ]; // запускать сжатие таблиц информационной базы +var executeDeferredHandlers = [ВыполнитьОтложенныеОбработчики]; // выполнить отложенные обработчики обновления var tempLogFileName = "templog.txt"; #КонецОбласти @@ -45,6 +46,8 @@ else { ClusterPassword = eval("WScript.Arguments").Named.Item("p2"); } +InfoBasePassword = fromUnicode(InfoBasePassword); +ClusterPassword = fromUnicode(ClusterPassword); var infoBaseAuthorization = format('/N\"{0}\" /P\"{1}\" /WA-', adminName, InfoBasePassword); connectionString = format(connectionString, adminName, InfoBasePassword); @@ -52,7 +55,7 @@ var oShell = new ActiveXObject("WScript.Shell"); oShell.CurrentDirectory = thisFileDir; var errorMarker = "{ERR}"; -var successMarker = "{OK }"; +var successMarker = "{OK}"; // Переменные состояния var backupCreated = false; @@ -115,7 +118,8 @@ function log(text, failed) { // Записать текст в лог-файл function logFile(text, failed) { - var now = new Date(); + var date = new Date(); + var now = ('0' + date.getDate()).slice(-2) + '.' + ('0' + (date.getMonth() + 1)).slice(-2) + '.' + date.getFullYear() + " " + ('0' + date.getHours()).slice(-2) + ":" + ('0' + date.getMinutes()).slice(-2) + ":" + ('0' + date.getSeconds()).slice(-2); var f; try { f = oFileSystemObject.OpenTextFile(outFileName, ForAppending, true, TristateTrue); @@ -196,9 +200,11 @@ function initialize() { clearLogFile(); log(format("Файл скрипта: {0}", thisFileName)); log(format("Количество файлов обновления: {0}", cfgFileNames.length)); - for (var i = 0; i < cfgFileNames.length; i++) - log(format("{0}. {1}", i + 1, cfgFileNames[i])); - + for (var i = 0; i < cfgFileNames.length; i++) { + var fileInfo = GetRequired(cfgFileNames[i], null); + var required = fileInfo.requiredVersion ? "(Обязательная)" : ""; + log(format("{0}. {1} {2}", i + 1, fileInfo.filePath, required)); + } return 0; } @@ -214,7 +220,7 @@ function finalize(success) { if (UseRestore) { restoreDB(); // Восстановление ИБ из временного архива } - allowConnections(false); // Разрешение подключений + allowConnections(); // Разрешение подключений } write1CEventLog(); // Запись всей информации из log-файла в журнал регистрации @@ -273,17 +279,20 @@ function write1CEventLog() { } function doSetResult(success) { - var connection = createConnection(); - if (connection == null) - return (useComConnector ? 1 : 0); - var res = 0; - try { - connection.ОбновлениеКонфигурации.ЗавершитьОбновление(success, emailAddress, adminName); - } - catch (e) { - log(format("Исключение при вызове ОбновлениеКонфигурации.ЗавершитьОбновление: {0}, {1}.", e.name, e.message), true); - res = 2; + if (useComConnector) { + var connection = createConnection(); + if (connection == null) return 1; + var res = 0; + try { + connection.ОбновлениеКонфигурации.ЗавершитьОбновление(success, emailAddress, adminName); + } + catch (e) { + log(format("Исключение при вызове ОбновлениеКонфигурации.ЗавершитьОбновление: {0}, {1}.", e.name, e.message), true); + res = 2; + } } + else if (success) log("Обновление выполнено", false); + else log("Обновление не выполнено", true); return res; } @@ -353,42 +362,55 @@ function restoreDB() { return ret; } -function doAllowConnections(updateAndFillDB) { - if (updateAndFillDB == undefined) - updateAndFillDB = true; - - var connection = createConnection(); - if (connection == null) - return (useComConnector ? 1 : 0); - - if (updateAndFillDB) - try { - connection.ОбновлениеИнформационнойБазы.ВыполнитьОбновлениеИнформационнойБазы(); - } - catch (e) { - connection = null; - CollectGarbage(); // предотвращает исключение out of memory - log(format("Исключение при вызове ОбновлениеИнформационнойБазы.ВыполнитьОбновлениеИнформационнойБазы: {0}, {1}.", e.name, e.message), true); - return 2; - } - if (connectionsDenied) - try { - connection.СоединенияИБ.РазрешитьРаботуПользователей(); - connectionsDenied = false; - } - catch (e) { - connection = null; - CollectGarbage(); // предотвращает исключение out of memory - log(format("Исключение при вызове СоединенияИБ.РазрешитьРаботуПользователей: {0}, {1}.", e.name, e.message), true); - return 3; +function doAllowConnections() { + if (connectionsDenied) { + var connection = createConnection(); + if (connection == null) + return (useComConnector ? 1 : 0); + try { + connection.СоединенияИБ.РазрешитьРаботуПользователей(); + connectionsDenied = false; + } + catch (e) { + connection = null; + CollectGarbage(); // предотвращает исключение out of memory + log(format("Исключение при вызове СоединенияИБ.РазрешитьРаботуПользователей: {0}, {1}.", e.name, e.message), true); + return 3; + } } return 0; } -// Первоначальное заполнение информационной базы, разрешение подключений новых соединений, -// и оповещение о результате обновления -function allowConnections(updateAndFillDB) { - var result = doAllowConnections(updateAndFillDB); +// Разрешение подключений новых соединений +function allowConnections() { + var result = doAllowConnections(); + ComConnection = null; + CollectGarbage(); // освобождает соединения с COM-объектом + return result; +} + +function doExecuteUpdate(lastVersion) { + if (useComConnector) { + var connection = createConnection(); + if (connection == null) return 1; + + try { + connection.ОбновлениеИнформационнойБазыВызовСервера.ВыполнитьОбновлениеИнформационнойБазы(!lastVersion); + } + catch (e) { + connection = null; + CollectGarbage(); // предотвращает исключение out of memory + log(format("Исключение при вызове ОбновлениеИнформационнойБазыВызовСервера.ВыполнитьОбновлениеИнформационнойБазы: {0}, {1}.", e.name, e.message), true); + return 2; + } + return 0; + } + else return runApp(v8client, format('ENTERPRISE {0} {1} /CВыполнитьОбновлениеИЗавершитьРаботу', infoBasePath, infoBaseAuthorization), SW_SHOW, true); +} + +// Выполнение обработчиков обновления информационной базы через com +function executeUpdate(lastVersion) { + var result = doExecuteUpdate(lastVersion); ComConnection = null; CollectGarbage(); // освобождает соединения с COM-объектом return result; @@ -599,6 +621,54 @@ function compressDB() return ret; } +function doDeferredHandlers() { + if (!executeDeferredHandlers) + return 0; + + var connection = createConnection(); + if (connection == null) + return (useComConnector ? 1 : 0); // в базовых версиях отложенные обработчики выполняются из основного сеанса перед обновлением + + try { + connection.ОбновлениеИнформационнойБазыСлужебный.ВыполнитьОтложенноеОбновлениеСейчас(); + } + catch (e) { + connection = null; + CollectGarbage(); // предотвращает исключение out of memory + log(format("Исключение при вызове ОбновлениеИнформационнойБазыСлужебный.ВыполнитьОтложенноеОбновлениеСейчас: {0}, {1}.", e.name, e.message), true); + return 2; + } + return 0; +} + +// Выполнение отложенных обработчиков обновления информационной базы через com +function runDeferredHandlers() { + var result = doDeferredHandlers(); + connection = null; + ComConnection = null; + CollectGarbage(); // освобождает соединения с COM-объектом + return result; +} + +// Получение имени файла обновления и определение является ли он приоритетным (обязятелен запуск) +function GetRequired(filePath) { + var fileProperties = Object(); + fileProperties.filePath = filePath; + fileProperties.requiredVersion = filePath.substr(0,1) == '+'; + if (fileProperties.requiredVersion) + fileProperties.filePath = filePath.substr(1); + return fileProperties; +} + +function fromUnicode(text){ + var str = ""; + for(var i=0; i - ОбновлениеКонфигурации + ПоискИУстановкаОбновлений ru Поиск и установка обновлений true - DataProcessor.ОбновлениеКонфигурации.Form.Форма + DataProcessor.ПоискИУстановкаОбновлений.Form.Форма true @@ -688,6 +688,24 @@ + + МинимальнаяВерсия + + ru + Минимальная версия + + + String + + + + ru + Минимальная версия для перехода на новую версию + + + + + Форма diff --git a/SSL/src/DataProcessors/ПолнотекстовыйПоискВДанных/Commands/ПолнотекстовыйПоиск/CommandModule.bsl b/SSL/src/DataProcessors/ПолнотекстовыйПоискВДанных/Commands/ПолнотекстовыйПоиск/CommandModule.bsl index a76224321..f9ab9d439 100644 --- a/SSL/src/DataProcessors/ПолнотекстовыйПоискВДанных/Commands/ПолнотекстовыйПоиск/CommandModule.bsl +++ b/SSL/src/DataProcessors/ПолнотекстовыйПоискВДанных/Commands/ПолнотекстовыйПоиск/CommandModule.bsl @@ -5,7 +5,7 @@ Процедура ОбработкаКоманды(ПараметрКоманды, ПараметрыВыполненияКоманды) ОткрытьФорму( - "Обработка.ПолнотекстовыйПоискВДанных.Форма", + "ОбщаяФорма.ФормаПоиска", , ПараметрыВыполненияКоманды.Источник, ПараметрыВыполненияКоманды.Уникальность, diff --git a/SSL/src/DataProcessors/ПолнотекстовыйПоискВДанных/Forms/Настройки/Form.form b/SSL/src/DataProcessors/ПолнотекстовыйПоискВДанных/Forms/Настройки/Form.form new file mode 100644 index 000000000..17e9ba93d --- /dev/null +++ b/SSL/src/DataProcessors/ПолнотекстовыйПоискВДанных/Forms/Настройки/Form.form @@ -0,0 +1,923 @@ + + + + <key>ru</key> + <value>Область поиска</value> + + + ГруппаОбластьПоиска + 29 + + ОбластьПоиска + 1 + true + true + + true + + + ИскатьВРазделах + + None + + OnChange + ОбластьПоискаПриИзменении + + + ОбластьПоискаРасширеннаяПодсказка + 3 + Label + true + true + + Left + + + + ОбластьПоискаКонтекстноеМеню + 2 + true + + RadioButtonField + Enter + true + Left + true + + + + ru + Везде + + + 0 + + + + + ru + В разделах + + + 1 + + + Vertical + + + + КоманднаяПанельДереваРазделов + 31 + + КомандыДереваРазделов + 33 + + УстановитьФлажки + 37 + true + true + + true + + + УстановитьФлажкиРасширеннаяПодсказка + 38 + Label + true + true + + Left + + + Form.Command.УстановитьФлажки + Normal + Auto + true + true + UserCmds + Auto + + + СнятьФлажки + 35 + true + true + + true + + + СнятьФлажкиРасширеннаяПодсказка + 36 + Label + true + true + + Left + + + Form.Command.СнятьФлажки + Normal + Auto + true + true + UserCmds + Auto + + + РазвернутьВсе + 41 + true + true + + true + + + РазвернутьВсеРасширеннаяПодсказка + 42 + Label + true + true + + Left + + + Form.Command.РазвернутьВсе + Normal + Auto + true + true + UserCmds + Auto + + + СвернутьВсе + 43 + true + true + + true + + + СвернутьВсеРасширеннаяПодсказка + 44 + Label + true + true + + Left + + + Form.Command.СвернутьВсе + Normal + Auto + true + true + UserCmds + Auto + + true + true + + true + + + <key>ru</key> + <value>Еще</value> + + + ru + Команды дерева разделов + + + КомандыДереваРазделовРасширеннаяПодсказка + 34 + Label + true + true + + Left + + + Popup + + Auto + Normal + + + true + true + + true + + + <key>ru</key> + <value>Командная панель дерева разделов</value> + + + ru + Командная панель дерева разделов + + + КоманднаяПанельДереваРазделовРасширеннаяПодсказка + 32 + Label + true + true + + Left + + + CommandBar + + Right + + + true + true + + true + + + <key>ru</key> + <value>Группа область поиска</value> + + + ru + Группа область поиска + + + ГруппаОбластьПоискаРасширеннаяПодсказка + 30 + Label + true + true + + Left + + + UsualGroup + + Auto + true + true + Auto + Auto + + + + ДеревоРазделовПоиска + 4 + true + true + + true + + + ДеревоРазделовПоиска + + None + Add + Change + Copy + CopyToClipboard + Delete + EndEdit + HierarchicalList + List + MoveDown + MoveUp + OutputList + ShowRowRearrangement + SortListAsc + SortListDesc + Tree + + ДеревоРазделовПоискаГруппа + 23 + + ДеревоРазделовПоискаПометка + 20 + true + true + + true + + + ДеревоРазделовПоиска.Пометка + + None + + OnChange + ДеревоРазделовПоискаПометкаПриИзменении + + + ДеревоРазделовПоискаПометкаРасширеннаяПодсказка + 22 + Label + true + true + + Left + + + + ДеревоРазделовПоискаПометкаКонтекстноеМеню + 21 + true + + CheckBoxField + Auto + true + Left + true + + + + ДеревоРазделовПоискаРаздел + 17 + true + true + + true + + + ДеревоРазделовПоиска.Раздел + + + ДеревоРазделовПоискаРазделРасширеннаяПодсказка + 19 + Label + true + true + + Left + + + + ДеревоРазделовПоискаРазделКонтекстноеМеню + 18 + true + + InputField + Auto + true + Left + true + + true + true + true + true + true + true + Normal + + + true + true + + true + + + <key>ru</key> + <value>Дерево разделов поиска группа</value> + + + ru + Дерево разделов поиска группа + + + ДеревоРазделовПоискаГруппаРасширеннаяПодсказка + 24 + Label + true + true + + Left + + + ColumnGroup + + InCell + auto + true + + + + ДеревоРазделовПоискаКоманднаяПанель + 6 + Left + true + + + ДеревоРазделовПоискаСтрокаПоиска + 8 + + ДеревоРазделовПоискаСтрокаПоискаРасширеннаяПодсказка + 10 + Label + true + true + + Left + + + + ДеревоРазделовПоискаСтрокаПоискаКонтекстноеМеню + 9 + true + + ДеревоРазделовПоиска + + true + + + + ДеревоРазделовПоискаСостояниеПросмотра + 11 + + ДеревоРазделовПоискаСостояниеПросмотраРасширеннаяПодсказка + 13 + Label + true + true + + Left + + + + ДеревоРазделовПоискаСостояниеПросмотраКонтекстноеМеню + 12 + true + + ViewStatusAddition + ДеревоРазделовПоиска + + true + + + + ДеревоРазделовПоискаУправлениеПоиском + 14 + + ДеревоРазделовПоискаУправлениеПоискомРасширеннаяПодсказка + 16 + Label + true + true + + Left + + + + ДеревоРазделовПоискаУправлениеПоискомКонтекстноеМеню + 15 + true + + SearchControlAddition + ДеревоРазделовПоиска + + true + + + + ДеревоРазделовПоискаРасширеннаяПодсказка + 7 + Label + true + true + + Left + + + + ДеревоРазделовПоискаКонтекстноеМеню + 5 + true + + Tree + true + true + true +
        true
        + 1 + 1 + AutoUse + AutoUse + true + true + true + Auto + Auto + true + true + true + true + true +
        + Bottom + true + + ФормаКоманднаяПанель + -1 + + ФормаКомандаОК + 39 + true + true + + true + + + ФормаКомандаОКРасширеннаяПодсказка + 40 + Label + true + true + + Left + + + Form.Command.КомандаОК + Auto + true + true + true + UserCmds + Auto + + + ФормаОтмена + 27 + true + true + + true + + + ФормаОтменаРасширеннаяПодсказка + 28 + Label + true + true + + Left + + + Form.StandardCommand.Cancel + Normal + Auto + true + true + UserCmds + Auto + + Right + true + + + OnOpen + ПриОткрытии + + + OnCreateAtServer + ПриСозданииНаСервере + + Abort + Close + CustomizeForm + Ignore + No + RestoreValues + Retry + SaveValues + Yes + LockOwner + true + true + Vertical + true + true + true + auto + true + + Объект + 1 + + DataProcessorObject.ПолнотекстовыйПоискВДанных + + + true + + + true + +
        true
        +
        + + ИскатьВРазделах + + <key>ru</key> + <value>Искать в разделах</value> + + 2 + + Number + + 1 + true + + + + true + + + true + + + + ДеревоРазделовПоиска + + <key>ru</key> + <value>Дерево разделов поиска</value> + + 3 + + ValueTree + + + true + + + true + + + Раздел + + <key>ru</key> + <value>Раздел</value> + + 1 + + String + + + + true + + + true + + + + Пометка + + <key>ru</key> + <value>Пометка</value> + + 2 + + Boolean + + + true + + + true + + + + ЭтоОбъектМетаданных + + <key>ru</key> + <value>Это объект метаданных</value> + + 3 + + Boolean + + + true + + + true + + + + ПутьКДанным + + <key>ru</key> + <value>Путь к данным</value> + + 4 + + String + + + + true + + + true + + + + ОбъектМД + + <key>ru</key> + <value>Объект МД</value> + + 5 + + CatalogRef.ИдентификаторыОбъектовМетаданных + + + true + + + true + + + + + ОбластиПоиска + + <key>ru</key> + <value>Области поиска</value> + + 4 + + ValueList + + + true + + + true + + + + + + + ТекущийРаздел + + <key>ru</key> + <value>Текущий раздел</value> + + 5 + + String + + + + true + + + true + + + + ИдентификаторСтроки + + <key>ru</key> + <value>Идентификатор строки</value> + + 6 + + Number + + 5 + true + + + + true + + + true + + + + УстановитьФлажки + + <key>ru</key> + <value>Установить флажки</value> + + 1 + + ru + Установить флажки + + + true + + + StdPicture.CheckAll + + + + УстановитьФлажки + + + DontUse + Auto + + + СнятьФлажки + + <key>ru</key> + <value>Снять флажки</value> + + 2 + + ru + Снять флажки + + + true + + + StdPicture.UncheckAll + + + + СнятьФлажки + + + DontUse + Auto + + + КомандаОК + + <key>ru</key> + <value>ОК</value> + + 3 + + ru + Команда ОК + + + true + + + + КомандаОК + + + DontUse + Auto + + + СвернутьВсе + + <key>ru</key> + <value>Свернуть</value> + + 4 + + ru + Свернуть все + + + true + + + + СвернутьВсе + + + DontUse + Auto + + + РазвернутьВсе + + <key>ru</key> + <value>Развернуть</value> + + 5 + + ru + Развернуть все + + + true + + + + РазвернутьВсе + + + DontUse + Auto + + + + + + +
        diff --git a/SSL/src/DataProcessors/ПолнотекстовыйПоискВДанных/Forms/Настройки/Module.bsl b/SSL/src/DataProcessors/ПолнотекстовыйПоискВДанных/Forms/Настройки/Module.bsl new file mode 100644 index 000000000..2678781f7 --- /dev/null +++ b/SSL/src/DataProcessors/ПолнотекстовыйПоискВДанных/Forms/Настройки/Module.bsl @@ -0,0 +1,392 @@ +#Область ОбработчикиСобытийФормы + +&НаСервере +Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) + + Если Параметры.Свойство("АвтоТест") Тогда // Возврат при получении формы для анализа. + Возврат; + КонецЕсли; + + Параметры.Свойство("ОбластиПоиска", ОбластиПоиска); + Параметры.Свойство("ИскатьВРазделах", ИскатьВРазделах); + ЗаполнитьДеревоРазделовПоиска(); + Элементы.ДеревоРазделовПоиска.Доступность = ИскатьВРазделах = 1; + + ДанныеТекущегоРаздела = ОбщегоНазначения.ХранилищеОбщихНастроекЗагрузить("ПолнотекстовыйПоискТекущийРаздел", ""); + Если ДанныеТекущегоРаздела <> Неопределено + И ТипЗнч(ДанныеТекущегоРаздела) = Тип("Структура") Тогда + + ТекущийРаздел = ДанныеТекущегоРаздела.ТекущийРаздел; + ИдентификаторСтроки = ДанныеТекущегоРаздела.ИдентификаторСтроки; + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура ПриОткрытии(Отказ) + + // Перейдем к разделу, с которым работали при предыдущих настройках + Если Не ПустаяСтрока(ТекущийРаздел) И ИдентификаторСтроки <> 0 Тогда + РазделПоиска = ДеревоРазделовПоиска.НайтиПоИдентификатору(ИдентификаторСтроки); + Если РазделПоиска = Неопределено Или РазделПоиска.Раздел <> ТекущийРаздел Тогда + Возврат; + КонецЕсли; + РодительРаздела = РазделПоиска.ПолучитьРодителя(); + Если РодительРаздела <> Неопределено Тогда + Пока РодительРаздела <> Неопределено Цикл + Элементы.ДеревоРазделовПоиска.Развернуть(РодительРаздела.ПолучитьИдентификатор()); + РодительРаздела = РодительРаздела.ПолучитьРодителя(); + КонецЦикла; + КонецЕсли; + Элементы.ДеревоРазделовПоиска.ТекущаяСтрока = ИдентификаторСтроки; + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура ОбластьПоискаПриИзменении(Элемент) + + УстановитьДоступностьЭлементовФормы(); + +КонецПроцедуры + +#КонецОбласти + +#Область ОбработчикиСобытийЭлементовТаблицыФормыДеревоРазделовПоиска + +&НаКлиенте +Процедура ДеревоРазделовПоискаПометкаПриИзменении(Элемент) + ЗначениеПометки = Элементы.ДеревоРазделовПоиска.ТекущиеДанные.Пометка; + + Родитель = Элементы.ДеревоРазделовПоиска.ТекущиеДанные.ПолучитьРодителя(); + Пока Родитель <> Неопределено Цикл + Если Не ЕстьВозможностьИзмененияПометки(Родитель, ЗначениеПометки) Тогда + Прервать; + КонецЕсли; + Родитель.Пометка = ЗначениеПометки; + Родитель = Родитель.ПолучитьРодителя(); + КонецЦикла; + + ДочерниеЭлементы = Элементы.ДеревоРазделовПоиска.ТекущиеДанные.ПолучитьЭлементы(); + Если ДочерниеЭлементы.Количество() > 0 Тогда + УстановитьПометкуВДочернихУзлах(ДочерниеЭлементы, ЗначениеПометки); + КонецЕсли; + +КонецПроцедуры + +#КонецОбласти + +#Область ОбработчикиКомандФормы + +&НаКлиенте +Процедура КомандаОК(Команда) + + ТекущийРаздел = ""; + ТекущиеДанные = Элементы.ДеревоРазделовПоиска.ТекущиеДанные; + Если ТекущиеДанные <> Неопределено Тогда + ТекущийРаздел = ТекущиеДанные.Раздел; + КонецЕсли; + СохранитьТекущийПутьРаздела(ТекущийРаздел, Элементы.ДеревоРазделовПоиска.ТекущаяСтрока); + + НастройкиПоиска = Новый Структура; + НастройкиПоиска.Вставить("ОбластиПоиска", СписокОбластей()); + НастройкиПоиска.Вставить("ИскатьВРазделах", ИскатьВРазделах = 1); + + Закрыть(НастройкиПоиска); + +КонецПроцедуры + +&НаКлиенте +Процедура СнятьФлажки(Команда) + УстановитьПометкуВДочернихУзлах(ДеревоРазделовПоиска.ПолучитьЭлементы(), Ложь); +КонецПроцедуры + +&НаКлиенте +Процедура УстановитьФлажки(Команда) + УстановитьПометкуВДочернихУзлах(ДеревоРазделовПоиска.ПолучитьЭлементы(), Истина); +КонецПроцедуры + +&НаКлиенте +Процедура СвернутьВсе(Команда) + ДеревоФормы = Элементы.ДеревоРазделовПоиска; + Для Каждого Элемент Из ДеревоРазделовПоиска.ПолучитьЭлементы() Цикл + ДеревоФормы.Свернуть(Элемент.ПолучитьИдентификатор()); + КонецЦикла; +КонецПроцедуры + +&НаКлиенте +Процедура РазвернутьВсе(Команда) + ДеревоФормы = Элементы.ДеревоРазделовПоиска; + Для Каждого Элемент Из ДеревоРазделовПоиска.ПолучитьЭлементы() Цикл + Элементы.ДеревоРазделовПоиска.Развернуть(Элемент.ПолучитьИдентификатор(), Истина); + КонецЦикла; +КонецПроцедуры + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +&НаСервере +Функция СписокОбластей() + + Список = Новый СписокЗначений; + + ДеревоОМ = РеквизитФормыВЗначение("ДеревоРазделовПоиска"); + + ЗаполнитьСписокОбластей(ДеревоОМ.Строки, Список); + + Возврат Список; + +КонецФункции + +&НаСервере +Процедура ЗаполнитьСписокОбластей(Строки, Список) + + Для Каждого Раздел Из Строки Цикл + Если Раздел.Пометка Тогда + + Если Раздел.ЭтоОбъектМетаданных Тогда + Список.Добавить(Раздел.ОбъектМД, Раздел.ПутьКДанным); + КонецЕсли; + + Если Раздел.Строки.Количество() > 0 Тогда + ЗаполнитьСписокОбластей(Раздел.Строки, Список); + КонецЕсли; + + КонецЕсли; + КонецЦикла; + +КонецПроцедуры + +&НаСервере +Процедура ЗаполнитьДеревоРазделовПоиска() + + МетаданныеПодсистемы = Метаданные.Подсистемы; + МетаданныеЖурналыДокументов = Метаданные.ЖурналыДокументов; + ТаблицаСправочники = СвязанныеСправочники(); + + ДеревоОМ = РеквизитФормыВЗначение("ДеревоРазделовПоиска"); + + ДобавитьОбъектыПодсистемы(МетаданныеПодсистемы, ДеревоОМ, ТаблицаСправочники); + + ПолнотекстовыйПоискСерверПереопределяемый.ПриПолученииРазделовПолнотекстовогоПоиска(ДеревоОМ); + + ДеревоОМ.Строки.Сортировать("Раздел"); + + Для Каждого Область Из ОбластиПоиска Цикл + Если ПустаяСтрока(Область.Представление) Тогда + СтрокаДерева = ДеревоОМ.Строки.Найти(Область.Значение ,"Раздел"); + Если СтрокаДерева <> Неопределено Тогда + СтрокаДерева.Пометка = Истина; + КонецЕсли; + Иначе + // Если есть путь к разделу, ставим отметку, начиная с корневого + МассивОбластейСПутями = СтрРазделить(Область.Представление, ",", Ложь); + СтрокиПоиска = ДеревоОМ.Строки; + Для Каждого ОбластьСПутем Из МассивОбластейСПутями Цикл + СтрокаДерева = СтрокиПоиска.Найти(ОбластьСПутем ,"Раздел"); + Если СтрокаДерева <> Неопределено Тогда + СтрокаДерева.Пометка = Истина; + СтрокиПоиска = СтрокаДерева.Строки; + Иначе + Прервать; + КонецЕсли; + КонецЦикла; + КонецЕсли; + КонецЦикла; + + ЗначениеВРеквизитФормы(ДеревоОМ, "ДеревоРазделовПоиска"); + +КонецПроцедуры + +&НаСервере +Процедура ДобавитьОбъектыПодсистемы(Подсистемы, ЭлементДерева, ТаблицаСправочники, ПутьКДанным = "") + + Для Каждого Подсистема Из Подсистемы Цикл + + Если Подсистема.ВключатьВКомандныйИнтерфейс + И ПравоДоступа("Просмотр", Подсистема) + И ОбщегоНазначения.ОбъектМетаданныхДоступенПоФункциональнымОпциям(Подсистема) Тогда + + НоваяПодсистема = ЭлементДерева.Строки.Добавить(); + НоваяПодсистема.Раздел = Подсистема; + + ПутьКДаннымОбъекта = ПутьКДанным + Подсистема + ","; + + Для Каждого ОбъектПодсистемы Из Подсистема.Состав Цикл + + Если Не ОбщегоНазначения.ОбъектМетаданныхДоступенПоФункциональнымОпциям(ОбъектПодсистемы) Тогда + Продолжить; + КонецЕсли; + + Если ОбщегоНазначения.ЭтоСправочник(ОбъектПодсистемы) + Или ОбщегоНазначения.ЭтоДокумент(ОбъектПодсистемы) + Или ОбщегоНазначения.ЭтоРегистрСведений(ОбъектПодсистемы) + Или ОбщегоНазначения.ЭтоЗадача(ОбъектПодсистемы) Тогда + + Если ОбъектПодсистемы.ПолнотекстовыйПоиск = Метаданные.СвойстваОбъектов.ИспользованиеПолнотекстовогоПоиска.НеИспользовать Тогда + Продолжить; + КонецЕсли; + + ПредставлениеОбъекта = ПредставлениеФормыСписка(ОбъектПодсистемы); + НовыйОбъект = НоваяПодсистема.Строки.Добавить(); + НовыйОбъект.Раздел = ПредставлениеОбъекта; + НовыйОбъект.ЭтоОбъектМетаданных = Истина; + НовыйОбъект.ОбъектМД = ОбщегоНазначения.ИдентификаторОбъектаМетаданных(ОбъектПодсистемы); + НовыйОбъект.ПутьКДанным = ПутьКДаннымОбъекта + ПредставлениеОбъекта + ","; + + Отбор = Новый Структура; + Отбор.Вставить("Владелец", ОбъектПодсистемы); + + НайденныеОбъекты = ТаблицаСправочники.НайтиСтроки(Отбор); + Для Каждого Стр Из НайденныеОбъекты Цикл + + Если Не ОбщегоНазначения.ОбъектМетаданныхДоступенПоФункциональнымОпциям(Стр) Тогда + Продолжить; + КонецЕсли; + + ПредставлениеОбъекта = ПредставлениеФормыСписка(Стр.Объект); + НовыйВспомогательныйОбъект = НовыйОбъект.Строки.Добавить(); + НовыйВспомогательныйОбъект.Раздел = ПредставлениеОбъекта; + НовыйВспомогательныйОбъект.ЭтоОбъектМетаданных = Истина; + НовыйВспомогательныйОбъект.ОбъектМД = ОбщегоНазначения.ИдентификаторОбъектаМетаданных(Стр.Объект); + НовыйВспомогательныйОбъект.ПутьКДанным = НовыйОбъект.ПутьКДанным + ПредставлениеОбъекта; + КонецЦикла; + ИначеЕсли ОбщегоНазначения.ЭтоЖурналДокументов(ОбъектПодсистемы) Тогда + ЖурналДокументовСоздан = Ложь; + Для Каждого Документ Из ОбъектПодсистемы.РегистрируемыеДокументы Цикл + + Если Не ОбщегоНазначения.ОбъектМетаданныхДоступенПоФункциональнымОпциям(Документ) Тогда + Продолжить; + КонецЕсли; + + Если Документ.ПолнотекстовыйПоиск = Метаданные.СвойстваОбъектов.ИспользованиеПолнотекстовогоПоиска.НеИспользовать Тогда + Продолжить; + КонецЕсли; + Если Не ЖурналДокументовСоздан Тогда + НовыйОбъект = НоваяПодсистема.Строки.Добавить(); + НовыйОбъект.Раздел = ОбъектПодсистемы; + НовыйОбъект.ПутьКДанным = ПутьКДаннымОбъекта + ОбъектПодсистемы + ","; + ЖурналДокументовСоздан = Истина; + КонецЕсли; + + ПредставлениеОбъекта = ПредставлениеФормыСписка(Документ); + НовыйВспомогательныйОбъект = НовыйОбъект.Строки.Добавить(); + НовыйВспомогательныйОбъект.Раздел = ПредставлениеОбъекта; + НовыйВспомогательныйОбъект.ЭтоОбъектМетаданных = Истина; + НовыйВспомогательныйОбъект.ОбъектМД = ОбщегоНазначения.ИдентификаторОбъектаМетаданных(Документ); + НовыйВспомогательныйОбъект.ПутьКДанным = НовыйОбъект.ПутьКДанным + ПредставлениеОбъекта; + КонецЦикла; + Если ЖурналДокументовСоздан Тогда + НовыйОбъект.Строки.Сортировать("Раздел"); + КонецЕсли; + КонецЕсли; + + КонецЦикла; + + Если Подсистема.Подсистемы.Количество() > 0 Тогда + ДобавитьОбъектыПодсистемы(Подсистема.Подсистемы, НоваяПодсистема, ТаблицаСправочники, ПутьКДаннымОбъекта); + КонецЕсли; + + Если НоваяПодсистема.Строки.Количество() = 0 Тогда + ЭлементДерева.Строки.Удалить(НоваяПодсистема); + Иначе + НоваяПодсистема.Строки.Сортировать("Раздел"); + КонецЕсли; + КонецЕсли; + КонецЦикла; + +КонецПроцедуры + +&НаСервере +Функция СвязанныеСправочники() + + МетаданныеСправочники = Метаданные.Справочники; + + ТаблицаСправочники = Новый ТаблицаЗначений; + ТаблицаСправочники.Колонки.Добавить("ТипОбъекта"); + ТаблицаСправочники.Колонки.Добавить("Объект"); + ТаблицаСправочники.Колонки.Добавить("Владелец"); + + Для Каждого Справочник Из МетаданныеСправочники Цикл + Если Справочник.ПолнотекстовыйПоиск = Метаданные.СвойстваОбъектов.ИспользованиеПолнотекстовогоПоиска.Использовать Тогда + Если Справочник.Владельцы.Количество() = 1 Тогда + НоваяСтрока = ТаблицаСправочники.Добавить(); + НоваяСтрока.ТипОбъекта = "Справочник"; + НоваяСтрока.Объект = Справочник; + Для Каждого Владелец Из Справочник.Владельцы Цикл + НоваяСтрока.Владелец = Владелец; + КонецЦикла; + КонецЕсли; + КонецЕсли; + КонецЦикла; + + Возврат ТаблицаСправочники; + +КонецФункции + +&НаСервере +Процедура УстановитьДоступностьЭлементовФормы() + Элементы.ДеревоРазделовПоиска.Доступность = ИскатьВРазделах = 1; +КонецПроцедуры + +&НаКлиенте +Функция УстановитьПометкуВДочернихУзлах(ЭлементыДерева, ЗначениеПометки) + Для Каждого Элемент Из ЭлементыДерева Цикл + Элемент.Пометка = ЗначениеПометки; + ДочерниеЭлементы = Элемент.ПолучитьЭлементы(); + Если ДочерниеЭлементы.Количество() > 0 Тогда + УстановитьПометкуВДочернихУзлах(ДочерниеЭлементы, ЗначениеПометки); + КонецЕсли; + КонецЦикла; +КонецФункции + +&НаКлиенте +Функция ЕстьВозможностьИзмененияПометки(Родитель, ЗначениеПометки) + ВозможностьИзменения = Истина; + + Если ЗначениеПометки Тогда + Возврат Истина; + КонецЕсли; + + ЭлементыДерева = Родитель.ПолучитьЭлементы(); + Если Родитель.ЭтоОбъектМетаданных И ЭлементыДерева.Количество() = 1 Тогда + Возврат Ложь; + КонецЕсли; + Для Каждого Элемент Из ЭлементыДерева Цикл + Если Элемент.Пометка <> ЗначениеПометки Тогда + ВозможностьИзменения = Ложь; + Прервать; + КонецЕсли; + КонецЦикла; + + Возврат ВозможностьИзменения; +КонецФункции + +&НаСервере +Функция ПредставлениеФормыСписка(Объект) + + Если Не ПустаяСтрока(Объект.РасширенноеПредставлениеСписка) Тогда + Представление = Объект.РасширенноеПредставлениеСписка; + ИначеЕсли Не ПустаяСтрока(Объект.ПредставлениеСписка) Тогда + Представление = Объект.ПредставлениеСписка; + Иначе + Представление = Объект.Представление(); + КонецЕсли; + + Возврат Представление; + +КонецФункции + +&НаСервереБезКонтекста +Процедура СохранитьТекущийПутьРаздела(ТекущийРаздел, ИдентификаторСтроки) + + ПараметрыТекущегоРаздела = Новый Структура; + ПараметрыТекущегоРаздела.Вставить("ТекущийРаздел", ТекущийРаздел); + ПараметрыТекущегоРаздела.Вставить("ИдентификаторСтроки", ИдентификаторСтроки); + ОбщегоНазначения.ХранилищеОбщихНастроекСохранить("ПолнотекстовыйПоискТекущийРаздел", "", ПараметрыТекущегоРаздела); + +КонецПроцедуры + +#КонецОбласти + diff --git a/SSL/src/DataProcessors/ПолнотекстовыйПоискВДанных/Forms/УпрощеннаяФорма/Form.form b/SSL/src/DataProcessors/ПолнотекстовыйПоискВДанных/Forms/УпрощеннаяФорма/Form.form index 3878bf802..8d752bda1 100644 --- a/SSL/src/DataProcessors/ПолнотекстовыйПоискВДанных/Forms/УпрощеннаяФорма/Form.form +++ b/SSL/src/DataProcessors/ПолнотекстовыйПоискВДанных/Forms/УпрощеннаяФорма/Form.form @@ -109,7 +109,6 @@ true true true - UseIfNecessary auto true @@ -171,7 +170,7 @@ Picture - Auto + DontUse Auto
        diff --git a/SSL/src/DataProcessors/ПолнотекстовыйПоискВДанных/Forms/УпрощеннаяФорма/Module.bsl b/SSL/src/DataProcessors/ПолнотекстовыйПоискВДанных/Forms/УпрощеннаяФорма/Module.bsl index f6aea730b..28cf386de 100644 --- a/SSL/src/DataProcessors/ПолнотекстовыйПоискВДанных/Forms/УпрощеннаяФорма/Module.bsl +++ b/SSL/src/DataProcessors/ПолнотекстовыйПоискВДанных/Forms/УпрощеннаяФорма/Module.bsl @@ -45,7 +45,7 @@ ФормаПараметры = Новый Структура; ФормаПараметры.Вставить("ПереданнаяСтрокаПоиска", СтрокаПоиска); - ФормаИмя = СтрЗаменить(ИмяФормы, ".УпрощеннаяФорма", ".Форма"); + ФормаИмя = "ОбщаяФорма.ФормаПоиска"; ОткрытьФорму(ФормаИмя, ФормаПараметры, , Истина); ИсторияПоиска = ИсторияПоиска(); @@ -57,7 +57,7 @@ &НаСервереБезКонтекста Функция ИсторияПоиска() - Возврат ОбщегоНазначения.ХранилищеОбщихНастроекЗагрузить("ПолнотекстовыйПоискСтрокиПолнотекстовогоПоиска"); + Возврат ОбщегоНазначения.ХранилищеОбщихНастроекЗагрузить("ПолнотекстовыйПоискСтрокиПолнотекстовогоПоиска", ""); КонецФункции #КонецОбласти diff --git a/SSL/src/DataProcessors/ПолнотекстовыйПоискВДанных/ManagerModule.bsl b/SSL/src/DataProcessors/ПолнотекстовыйПоискВДанных/ManagerModule.bsl new file mode 100644 index 000000000..032082d58 --- /dev/null +++ b/SSL/src/DataProcessors/ПолнотекстовыйПоискВДанных/ManagerModule.bsl @@ -0,0 +1,16 @@ +#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда + +#КонецЕсли + +#Область ОбработчикиСобытий + +Процедура ОбработкаПолученияФормы(ВидФормы, Параметры, ВыбраннаяФорма, ДополнительнаяИнформация, СтандартнаяОбработка) + + Если ВидФормы = "Форма" Тогда + СтандартнаяОбработка = Ложь; + ВыбраннаяФорма = "ОбщаяФорма.ФормаПоиска"; + КонецЕсли; + +КонецПроцедуры + +#КонецОбласти diff --git a/SSL/src/DataProcessors/ПолнотекстовыйПоискВДанных/ПолнотекстовыйПоискВДанных.mdo b/SSL/src/DataProcessors/ПолнотекстовыйПоискВДанных/ПолнотекстовыйПоискВДанных.mdo index bc2f96fd5..09457e8c3 100644 --- a/SSL/src/DataProcessors/ПолнотекстовыйПоискВДанных/ПолнотекстовыйПоискВДанных.mdo +++ b/SSL/src/DataProcessors/ПолнотекстовыйПоискВДанных/ПолнотекстовыйПоискВДанных.mdo @@ -9,22 +9,12 @@ ru Полнотекстовый поиск - DataProcessor.ПолнотекстовыйПоискВДанных.Form.Форма true ru - - Форма - - ru - Форма - - PersonalComputer - MobileDevice - УпрощеннаяФорма @@ -34,6 +24,15 @@ PersonalComputer MobileDevice + + Настройки + + ru + Настройки + + PersonalComputer + MobileDevice + ПолнотекстовыйПоиск diff --git a/SSL/src/DataProcessors/ПомощникИнтерактивногоОбменаДанными/Forms/Форма/Form.form b/SSL/src/DataProcessors/ПомощникИнтерактивногоОбменаДанными/Forms/Форма/Form.form index 8872e63c6..106e8f863 100644 --- a/SSL/src/DataProcessors/ПомощникИнтерактивногоОбменаДанными/Forms/Форма/Form.form +++ b/SSL/src/DataProcessors/ПомощникИнтерактивногоОбменаДанными/Forms/Форма/Form.form @@ -5340,6 +5340,384 @@ auto
        + + СтраницаОжиданияСинхронизацииДанныхПрогрессБарЗагрузка + 942 + + ЗаголовокСтраницыОжиданияСинхронизацииДанных1 + 944 + + ДекорацияПрогрессБарЗагрузка + 946 + + <key>ru</key> + <value>Загрузка данных.</value> + + true + true + + true + + + ДекорацияПрогрессБарЗагрузкаРасширеннаяПодсказка + 948 + Label + true + true + + Left + + + + ДекорацияПрогрессБарЗагрузкаКонтекстноеМеню + 947 + true + + Label + true + true + false + + System.DefaultGUIFont + 10.0 + + + Left + Center + + + + ПроцентВыполнения + 949 + true + true + + true + + + ПроцентВыполнения + + None + + ПроцентВыполненияРасширеннаяПодсказка + 951 + Label + true + true + + Left + + + + ПроцентВыполненияКонтекстноеМеню + 950 + true + + ProgressBarField + Enter + true + Left + true + + 32 + true + 1 + true + true + 100 + true + + + + ДопИнформацияВыполнениеЗагрузка + 952 + true + true + + true + + + ДопИнформацияВыполнение + + None + + ДопИнформацияВыполнениеЗагрузкаРасширеннаяПодсказка + 954 + Label + true + true + + Left + + + + ДопИнформацияВыполнениеЗагрузкаКонтекстноеМеню + 953 + true + + LabelField + Enter + true + Left + true + + true + true + + + true + true + + true + + + <key>ru</key> + <value>Синхронизация данных</value> + + + ru + Группировка сообщения + + + ЗаголовокСтраницыОжиданияСинхронизацииДанных1РасширеннаяПодсказка + 945 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + NormalSeparation + true + true + auto + Auto + Auto + + + true + true + + true + + + <key>ru</key> + <value>Страница ожидания синхронизации данных</value> + + + ru + Страница ожидания выгрузки данных + + + СтраницаОжиданияСинхронизацииДанныхПрогрессБарЗагрузкаРасширеннаяПодсказка + 943 + Label + true + true + + Left + + + Page + + Vertical + auto + + + + СтраницаОжиданияСинхронизацииДанныхПрогрессБарВыгрузка + 955 + + ЗаголовокСтраницыОжиданияСинхронизацииДанных2 + 957 + + ДекорацияПрогрессБарВыгрузка + 959 + + <key>ru</key> + <value>Выгрузка данных.</value> + + true + true + + true + + + ДекорацияПрогрессБарВыгрузкаРасширеннаяПодсказка + 961 + Label + true + true + + Left + + + + ДекорацияПрогрессБарВыгрузкаКонтекстноеМеню + 960 + true + + Label + true + true + false + + System.DefaultGUIFont + 10.0 + + + Left + Center + + + + ПроцентВыполненияВыгрузка + 962 + true + true + + true + + + ПроцентВыполнения + + None + + ПроцентВыполненияВыгрузкаРасширеннаяПодсказка + 964 + Label + true + true + + Left + + + + ПроцентВыполненияВыгрузкаКонтекстноеМеню + 963 + true + + ProgressBarField + Enter + true + Left + true + + 32 + true + 1 + true + true + 100 + true + + + + ДопИнформацияВыполнениеВыгрузка + 965 + true + true + + true + + + ДопИнформацияВыполнение + + None + + ДопИнформацияВыполнениеВыгрузкаРасширеннаяПодсказка + 967 + Label + true + true + + Left + + + + ДопИнформацияВыполнениеВыгрузкаКонтекстноеМеню + 966 + true + + LabelField + Enter + true + Left + true + + true + true + + + true + true + + true + + + <key>ru</key> + <value>Синхронизация данных</value> + + + ru + Группировка сообщения + + + ЗаголовокСтраницыОжиданияСинхронизацииДанных2РасширеннаяПодсказка + 958 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + NormalSeparation + true + true + auto + Auto + Auto + + + true + true + + true + + + <key>ru</key> + <value>Страница ожидания синхронизации данных</value> + + + ru + Страница ожидания выгрузки данных + + + СтраницаОжиданияСинхронизацииДанныхПрогрессБарВыгрузкаРасширеннаяПодсказка + 956 + Label + true + true + + Left + + + Page + + Vertical + auto + + true true @@ -6058,7 +6436,6 @@ Vertical true true - UseIfNecessary auto true @@ -7257,6 +7634,79 @@ true + + ДопИнформацияВыполнение + + <key>ru</key> + <value>Доп информация выполнение</value> + + 44 + + String + + 150 + + + + true + + + true + + + + ПроцентВыполнения + + <key>ru</key> + <value>Процент выполнения</value> + + 45 + + Number + + 3 + true + + + + true + + + true + + + + ИспользоватьПрогрессБар + + <key>ru</key> + <value>Использовать прогресс бар</value> + + 46 + + Boolean + + + true + + + true + + + + ПараметрыПовторногоОткрытияФормы + + <key>ru</key> + <value>Параметры повторного открытия формы</value> + + 47 + + + true + + + true + + ОбновитьИнформациюСопоставленияПолностью @@ -7280,7 +7730,7 @@ <name>ОбновитьИнформациюСопоставленияПолностью</name> </handler> </action> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <formCommands> @@ -7307,7 +7757,7 @@ </handler> </action> <representation>TextPicture</representation> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <formCommands> @@ -7333,7 +7783,7 @@ </handler> </action> <representation>TextPicture</representation> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <formCommands> @@ -7355,7 +7805,7 @@ <name>ОткрытьКаталогОбменаИнформацией</name> </handler> </action> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <formCommands> @@ -7377,7 +7827,7 @@ <name>НастроитьПараметрыТранспортаСообщенийОбмена</name> </handler> </action> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <formCommands> @@ -7399,7 +7849,7 @@ <name>ПерейтиВЖурналРегистрацииСобытийЗагрузкиДанных</name> </handler> </action> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <formCommands> @@ -7421,7 +7871,7 @@ <name>ПерейтиВЖурналРегистрацииСобытийВыгрузкиДанных</name> </handler> </action> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <formCommands> @@ -7439,7 +7889,7 @@ <name>КомандаГотово</name> </handler> </action> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <formCommands> @@ -7457,7 +7907,7 @@ <name>КомандаДалее</name> </handler> </action> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <formCommands> @@ -7475,7 +7925,7 @@ <name>КомандаОтмена</name> </handler> </action> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <formCommands> @@ -7497,7 +7947,7 @@ <name>ДополнениеВыгрузкиДетальныйОтбор</name> </handler> </action> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <formCommands> @@ -7522,7 +7972,7 @@ <name>ДополнениеВыгрузкиИсторияОтборов</name> </handler> </action> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <formCommands> @@ -7544,7 +7994,7 @@ <name>ДополнениеВыгрузкиОбщийОтборДокументов</name> </handler> </action> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <formCommands> @@ -7569,7 +8019,7 @@ <name>ДополнениеВыгрузкиОчисткаДетальногоОтбора</name> </handler> </action> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <formCommands> @@ -7594,7 +8044,7 @@ <name>ДополнениеВыгрузкиОчисткаОбщегоОтбора</name> </handler> </action> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <formCommands> @@ -7619,7 +8069,7 @@ <name>ДополнениеВыгрузкиСоставВыгрузки</name> </handler> </action> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <formCommands> @@ -7644,7 +8094,7 @@ <name>ОткрытьНастройкуРасписания</name> </handler> </action> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <formCommands> @@ -7666,7 +8116,7 @@ <name>ДополнениеВыгрузкиОтборПоСценариюУзла</name> </handler> </action> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <formCommands> @@ -7688,7 +8138,7 @@ <name>ПродолжитьСинхронизацию</name> </handler> </action> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <commandInterface> diff --git a/SSL/src/DataProcessors/ПомощникИнтерактивногоОбменаДанными/Forms/Форма/Module.bsl b/SSL/src/DataProcessors/ПомощникИнтерактивногоОбменаДанными/Forms/Форма/Module.bsl index 07f404c39..635fdef0d 100644 --- a/SSL/src/DataProcessors/ПомощникИнтерактивногоОбменаДанными/Forms/Форма/Module.bsl +++ b/SSL/src/DataProcessors/ПомощникИнтерактивногоОбменаДанными/Forms/Форма/Module.bsl @@ -173,7 +173,10 @@ &НаКлиенте Процедура ПередЗакрытием(Отказ, СтандартнаяОбработка) - + Если ЗакрытьФормуБезусловно Тогда + Возврат; + КонецЕсли; + ТекущаяСтраница = Элементы.ПанельОсновная.ТекущаяСтраница; Если ТекущаяСтраница = Элементы.СтраницаНачала Тогда @@ -190,16 +193,24 @@ &НаКлиенте Процедура ПриЗакрытии() - Если ДлительнаяОперация Тогда ЗавершитьВыполнениеДлительнойОперации(ИдентификаторЗадания); КонецЕсли; - // удаляем временный каталог УдалитьВременныйКаталогСообщенийОбмена(Объект.ИмяВременногоКаталогаСообщенийОбмена); - - Оповестить("ЗакрытаФормаПомощникаСопоставленияОбъектов"); - + Если ЗначениеЗаполнено(ПараметрыПовторногоОткрытияФормы) + И ПараметрыПовторногоОткрытияФормы.Свойство("НоваяНастройкаСинхронизацииДанных") Тогда + НоваяНастройкаСинхронизацииДанных = ПараметрыПовторногоОткрытияФормы.НоваяНастройкаСинхронизацииДанных; + ПараметрыФормы = Новый Структура; + ПараметрыФормы.Вставить("УзелИнформационнойБазы", НоваяНастройкаСинхронизацииДанных); + ПараметрыФормы.Вставить("РасширенныйРежимДополненияВыгрузки", Истина); + + ПараметрыОткрытия = Новый Структура; + ПараметрыОткрытия.Вставить("РежимОткрытияОкна", РежимОткрытияОкнаФормы.БлокироватьОкноВладельца); + ОбменДаннымиКлиент.ОткрытьФормуПослеЗакрытияТекущей(ЭтотОбъект, "Обработка.ПомощникИнтерактивногоОбменаДанными.Форма", ПараметрыФормы, ПараметрыОткрытия); + Иначе + Оповестить("ЗакрытаФормаПомощникаСопоставленияОбъектов"); + КонецЕсли; КонецПроцедуры &НаКлиенте @@ -715,8 +726,7 @@ Иначе ТекстПредупреждения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Каталог ""%1"" не существует или к нему нет доступа.'"), - ДополнительныеПараметры.ИмяКаталога - ); + ДополнительныеПараметры.ИмяКаталога); ПоказатьПредупреждение(, ТекстПредупреждения); КонецЕсли; @@ -732,8 +742,7 @@ Иначе ТекстПредупреждения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = '""%1"" является файлом, а не каталогом.'"), - ДополнительныеПараметры.ИмяКаталога - ); + ДополнительныеПараметры.ИмяКаталога); ПоказатьПредупреждение(, ТекстПредупреждения); КонецЕсли; @@ -829,8 +838,7 @@ Элементы.СтраницыСтатусаСопоставленияДанных.ТекущаяСтраница = ?(ВсеДанныеСопоставлены, Элементы.СтатусСопоставленияВсеДанныеСопоставлены, - Элементы.СтатусСопоставленияЕстьНесопоставленныеДанные - ); + Элементы.СтатусСопоставленияЕстьНесопоставленныеДанные); КонецПроцедуры &НаСервере @@ -989,9 +997,8 @@ УдалитьФайлы(ИмяВременногоКаталога); ИмяВременногоКаталога = ""; Исключение - ЗаписьЖурналаРегистрации(НСтр("ru = 'Обмен данными.Удаление временных файлов'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), - УровеньЖурналаРегистрации.Ошибка,,, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()) - ); + ЗаписьЖурналаРегистрации(НСтр("ru = 'Обмен данными'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), + УровеньЖурналаРегистрации.Ошибка,,, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); КонецПопытки; КонецЕсли; @@ -1049,17 +1056,23 @@ // Дополнительно регистрируем данные. ОбменДаннымиСервер.ИнтерактивноеИзменениеВыгрузкиЗарегистрироватьДополнительныеДанные(ДополнениеВыгрузки); - ОбменДаннымиСервер.ВыполнитьОбменДаннымиДляУзлаИнформационнойБазы( - Отказ, - Объект.УзелИнформационнойБазы, - Ложь, - Истина, - Объект.ВидТранспортаСообщенийОбмена, - ДлительнаяОперация, - ИдентификаторОперации, - ИдентификаторФайла, - Истина, - WSПароль); + ПараметрыОбмена = ОбменДаннымиСервер.ПараметрыОбмена(); + ПараметрыОбмена.ВидТранспортаСообщенийОбмена = Объект.ВидТранспортаСообщенийОбмена; + ПараметрыОбмена.ВыполнятьЗагрузку = Ложь; + ПараметрыОбмена.ВыполнятьВыгрузку = Истина; + + ПараметрыОбмена.ДлительнаяОперацияРазрешена = Истина; + ПараметрыОбмена.ДлительнаяОперация = ДлительнаяОперация; + ПараметрыОбмена.ИдентификаторОперации = ИдентификаторОперации; + ПараметрыОбмена.ИдентификаторФайла = ИдентификаторФайла; + ПараметрыОбмена.ПараметрыАутентификации = WSПароль; + + ОбменДаннымиСервер.ВыполнитьОбменДаннымиДляУзлаИнформационнойБазы(Объект.УзелИнформационнойБазы, ПараметрыОбмена, Отказ); + + ДлительнаяОперация = ПараметрыОбмена.ДлительнаяОперация; + ИдентификаторОперации = ПараметрыОбмена.ИдентификаторОперации; + ИдентификаторФайла = ПараметрыОбмена.ИдентификаторФайла; + WSПароль = ПараметрыОбмена.ПараметрыАутентификации; КонецПроцедуры @@ -1173,10 +1186,13 @@ ДлительнаяОперацияЗавершенаСОшибкой = Ложь; Состояние = ОбменДаннымиВызовСервера.СостояниеЗадания(ИдентификаторЗадания); - + ОтображаетсяПрогрессБар = Элементы.ПанельОсновная.ТекущаяСтраница = Элементы.СтраницаОжиданияСинхронизацииДанныхПрогрессБарЗагрузка + ИЛИ Элементы.ПанельОсновная.ТекущаяСтраница = Элементы.СтраницаОжиданияСинхронизацииДанныхПрогрессБарВыгрузка; Если Состояние = "Активно" Тогда - - ПодключитьОбработчикОжидания("ОбработчикОжиданияФоновогоЗадания", 5, Истина); + Если ИспользоватьПрогрессБар И ОтображаетсяПрогрессБар Тогда + ФоновоеЗаданиеПрочитатьПромежуточныйРезультат(); + КонецЕсли; + ПодключитьОбработчикОжидания("ОбработчикОжиданияФоновогоЗадания", 2, Истина); Иначе // Завершено, ЗавершеноАварийно @@ -1188,13 +1204,65 @@ ДлительнаяОперация = Ложь; ДлительнаяОперацияЗавершена = Истина; - - ВыполнитьПереходДалее(); + ПрочитатьСообщенияПользователю(); + Если ЗакрытьФормуБезусловно Тогда + ЭтаФорма.Закрыть(); + КонецЕсли; + Если ИспользоватьПрогрессБар И ОтображаетсяПрогрессБар Тогда + ПроцентВыполнения = 100; + ДопИнформацияВыполнение = ""; + // Переход далее с задержкой 1 сек. + ПодключитьОбработчикОжидания("ЗапуститьПереходДалее", 1, Истина); + Иначе + ВыполнитьПереходДалее(); + КонецЕсли; КонецЕсли; КонецПроцедуры +&НаКлиенте +Процедура ЗапуститьПереходДалее() + ВыполнитьПереходДалее(); +КонецПроцедуры + +&НаСервере +Процедура ПрочитатьСообщенияПользователю() + Задание = ФоновыеЗадания.НайтиПоУникальномуИдентификатору(ИдентификаторЗадания); + Если Задание = Неопределено Тогда + Возврат; + КонецЕсли; + МассивСообщений = Задание.ПолучитьСообщенияПользователю(Истина); + + Если МассивСообщений = Неопределено Тогда + Возврат; + КонецЕсли; + Количество = МассивСообщений.Количество(); + Если Количество = 0 Тогда + Возврат; + КонецЕсли; + + Сообщение = МассивСообщений[Количество-1]; + ТекстСообщения = Сообщение.Текст; + // При необходимости из сообщения удаляется идентификатор подсистемы. + Если СтрНачинаетсяС(ТекстСообщения, "{ВыполненПереходНаНовыйОбмен}") Тогда + + Результат = ОбщегоНазначения.ЗначениеИзСтрокиXML(ТекстСообщения); + Если Результат <> Неопределено + И ТипЗнч(Результат) = Тип("Структура") Тогда + + ИмяПланаОбмена = Результат.ИмяПланаОбменаДляПереходаНаНовыйОбмен; + КодУзлаПланаОбмена = Результат.Код; + НоваяНастройкаСинхронизацииДанных = ПланыОбмена[ИмяПланаОбмена].НайтиПоКоду(КодУзлаПланаОбмена); + + ПараметрыПовторногоОткрытияФормы = Новый Структура("НоваяНастройкаСинхронизацииДанных", + НоваяНастройкаСинхронизацииДанных); + ЗакрытьФормуБезусловно = Истина; + КонецЕсли; + КонецЕсли; +КонецПроцедуры + + &НаКлиенте Процедура ВыполнитьОбработчикДлительнойОперации() @@ -1697,8 +1765,7 @@ ИдентификаторФайла, ДлительнаяОперация, ИдентификаторОперации, - WSПароль - ); + WSПароль); ЗначениеВРеквизитФормы(ОбработкаОбъект, "Объект"); Если Отказ Тогда @@ -1708,8 +1775,7 @@ Исключение ПропуститьПолучениеДанных = Истина; ЗаписатьОшибкуВЖурналРегистрации(ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()), - НСтр("ru = 'Помощник интерактивного обмена данными.Транспорт сообщения обмена'") - ); + НСтр("ru = 'Помощник интерактивного обмена данными.Транспорт сообщения обмена'")); Возврат; КонецПопытки; @@ -1780,8 +1846,7 @@ Исключение ПропуститьПолучениеДанных = Истина; ЗаписатьОшибкуВЖурналРегистрации(ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()), - НСтр("ru = 'Помощник интерактивного обмена данными.Транспорт сообщения обмена'") - ); + НСтр("ru = 'Помощник интерактивного обмена данными.Транспорт сообщения обмена'")); Возврат; КонецПопытки; @@ -1826,8 +1891,7 @@ УникальныйИдентификатор, "Обработки.ПомощникИнтерактивногоОбменаДанными.ВыполнитьАвтоматическоеСопоставлениеДанных", ПараметрыМетода, - НСтр("ru = 'Анализ данных сообщения обмена'") - ); + НСтр("ru = 'Анализ данных сообщения обмена'")); Если Результат.ЗаданиеВыполнено Тогда ПослеАнализаДанных(ПолучитьИзВременногоХранилища(Результат.АдресХранилища)); @@ -1901,8 +1965,7 @@ Исключение ПропуститьПолучениеДанных = Истина; ЗаписатьОшибкуВЖурналРегистрации(ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()), - НСтр("ru = 'Помощник интерактивного обмена данными.Анализ данных'") - ); + НСтр("ru = 'Помощник интерактивного обмена данными.Анализ данных'")); Возврат; КонецПопытки; @@ -2022,7 +2085,13 @@ Если Результат.ЗаданиеВыполнено Тогда УдалитьВременныйКаталогСообщенийОбмена(Объект.ИмяВременногоКаталогаСообщенийОбмена); - + ОтображаетсяПрогрессБар = Элементы.ПанельОсновная.ТекущаяСтраница = Элементы.СтраницаОжиданияСинхронизацииДанныхПрогрессБарЗагрузка + ИЛИ Элементы.ПанельОсновная.ТекущаяСтраница = Элементы.СтраницаОжиданияСинхронизацииДанныхПрогрессБарВыгрузка; + + Если ИспользоватьПрогрессБар И ОтображаетсяПрогрессБар Тогда + ПроцентВыполнения = 100; + ДопИнформацияВыполнение = ""; + КонецЕсли; Иначе ДлительнаяОперация = Истина; @@ -2030,6 +2099,7 @@ КонецЕсли; + Исключение ПропуститьПолучениеДанных = Истина; УдалитьВременныйКаталогСообщенийОбмена(Объект.ИмяВременногоКаталогаСообщенийОбмена); @@ -2051,14 +2121,26 @@ ПерейтиДалее = Ложь; - ПодключитьОбработчикОжидания("ОбработчикОжиданияФоновогоЗадания", 5, Истина); + ПодключитьОбработчикОжидания("ОбработчикОжиданияФоновогоЗадания", 2, Истина); КонецЕсли; КонецФункции +&НаСервере +Процедура ФоновоеЗаданиеПрочитатьПромежуточныйРезультат() + + Прогресс = ДлительныеОперации.ПрочитатьПрогресс(ИдентификаторЗадания); + Если Прогресс <> Неопределено Тогда + ПроцентВыполнения = Прогресс.Процент; + ДопИнформацияВыполнение = Прогресс.Текст; + КонецЕсли; +КонецПроцедуры + &НаКлиенте Функция Подключаемый_ЗагрузкаДанныхДлительнаяОперацияОкончание_ОбработкаДлительнойОперации(Отказ, ПерейтиДалее) + ПроцентВыполнения = 0; + ДопИнформацияВыполнение = ""; Если ПропуститьПолучениеДанных Тогда Возврат Неопределено; @@ -2086,6 +2168,76 @@ // Выгрузка данных +&НаКлиенте +Функция Подключаемый_СтраницаОжиданияВыгрузкиДанныхОбычныеКаналы_ОбработкаДлительнойОперации(Отказ, ПерейтиДалее) + + ПроцентВыполнения = 0; + ДопИнформацияВыполнение = ""; + ДлительнаяОперация = Ложь; + ДлительнаяОперацияЗавершена = Ложь; + ДлительнаяОперацияЗавершенаСОшибкой = Ложь; + ИдентификаторФайла = ""; + ИдентификаторОперации = ""; + + ВыгрузкаДанных(); + +КонецФункции + +&НаСервере +Процедура ВыгрузкаДанных() + + ИдентификаторЗадания = Неопределено; + + ДатаНачалаОперации = ТекущаяДатаСеанса(); + + // Сохраняем настройки дополнения выгрузки. + ОбменДаннымиСервер.ИнтерактивноеИзменениеВыгрузкиСохранитьНастройки(ДополнениеВыгрузки, + ОбменДаннымиСервер.ДополнениеВыгрузкиИмяАвтоСохраненияНастроек()); + + // Дополнительно регистрируем данные. + ОбменДаннымиСервер.ИнтерактивноеИзменениеВыгрузкиЗарегистрироватьДополнительныеДанные(ДополнениеВыгрузки); + + Попытка + + ПараметрыМетода = Новый Структура; + ПараметрыМетода.Вставить("УзелИнформационнойБазы", Объект.УзелИнформационнойБазы); + ПараметрыМетода.Вставить("ИмяФайлаСообщенияОбмена", Объект.ИмяФайлаСообщенияОбмена); + ПараметрыМетода.Вставить("ВидТранспортаСообщенийОбмена", Объект.ВидТранспортаСообщенийОбмена); + ПараметрыМетода.Вставить("ИдентификаторОперации", ИдентификаторОперации); + ПараметрыМетода.Вставить("ИдентификаторФайла", ИдентификаторФайла); + ПараметрыМетода.Вставить("WSПароль", WSПароль); + + Результат = ДлительныеОперации.ЗапуститьВыполнениеВФоне( + УникальныйИдентификатор, + "Обработки.ПомощникИнтерактивногоОбменаДанными.ВыполнитьВыгрузкуДанных", + ПараметрыМетода, + НСтр("ru = 'Выгрузка данных из сообщения обмена'")); + + Если Результат.ЗаданиеВыполнено Тогда + УдалитьВременныйКаталогСообщенийОбмена(Объект.ИмяВременногоКаталогаСообщенийОбмена); + ОтображаетсяПрогрессБар = Элементы.ПанельОсновная.ТекущаяСтраница = Элементы.СтраницаОжиданияСинхронизацииДанныхПрогрессБарЗагрузка + ИЛИ Элементы.ПанельОсновная.ТекущаяСтраница = Элементы.СтраницаОжиданияСинхронизацииДанныхПрогрессБарВыгрузка; + + Если ИспользоватьПрогрессБар И ОтображаетсяПрогрессБар Тогда + ПроцентВыполнения = 100; + ДопИнформацияВыполнение = ""; + КонецЕсли; + Иначе + + ДлительнаяОперация = Истина; + ИдентификаторЗадания = Результат.ИдентификаторЗадания; + + КонецЕсли; + + Исключение + УдалитьВременныйКаталогСообщенийОбмена(Объект.ИмяВременногоКаталогаСообщенийОбмена); + ЗаписатьОшибкуВЖурналРегистрации(ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()), + НСтр("ru = 'Помощник интерактивного обмена данными.Выгрузка данных'")); + Возврат; + КонецПопытки; + +КонецПроцедуры + &НаКлиенте Функция Подключаемый_СтраницаОжиданияВыгрузкиДанных_ОбработкаДлительнойОперации(Отказ, ПерейтиДалее) @@ -2106,8 +2258,11 @@ Если ДлительнаяОперация Тогда ПерейтиДалее = Ложь; - - ПодключитьОбработчикОжидания("ОбработчикОжиданияДлительнойОперации", 5, Истина); + Если ИспользоватьПрогрессБар Тогда + ПодключитьОбработчикОжидания("ОбработчикОжиданияФоновогоЗадания", 2, Истина); + Иначе + ПодключитьОбработчикОжидания("ОбработчикОжиданияДлительнойОперации", 5, Истина); + КонецЕсли; КонецЕсли; @@ -2269,16 +2424,11 @@ КонецЕсли; УстанавливатьПервыйЭлемент = УстанавливатьПервыйЭлемент - Или - ДополнениеВыгрузки.ВариантВыгрузки<0 - Или - ( (ДополнениеВыгрузки.ВариантВыгрузки=0) И (Не ПараметрыСценарияДополнения.ВариантБезДополнения.Использование) ) - Или - ( (ДополнениеВыгрузки.ВариантВыгрузки=1) И (Не ПараметрыСценарияДополнения.ВариантВсеДокументы.Использование) ) - Или - ( (ДополнениеВыгрузки.ВариантВыгрузки=2) И (Не ПараметрыСценарияДополнения.ВариантПроизвольныйОтбор.Использование) ) - Или - ( (ДополнениеВыгрузки.ВариантВыгрузки=3) И (Не ПараметрыСценарияДополнения.ВариантДополнительно.Использование) ); + Или ДополнениеВыгрузки.ВариантВыгрузки<0 + Или ( (ДополнениеВыгрузки.ВариантВыгрузки=0) И (Не ПараметрыСценарияДополнения.ВариантБезДополнения.Использование) ) + Или ( (ДополнениеВыгрузки.ВариантВыгрузки=1) И (Не ПараметрыСценарияДополнения.ВариантВсеДокументы.Использование) ) + Или ( (ДополнениеВыгрузки.ВариантВыгрузки=2) И (Не ПараметрыСценарияДополнения.ВариантПроизвольныйОтбор.Использование) ) + Или ( (ДополнениеВыгрузки.ВариантВыгрузки=3) И (Не ПараметрыСценарияДополнения.ВариантДополнительно.Использование) ); Если УстанавливатьПервыйЭлемент Тогда Для Каждого ЭлементГруппыДополнения Из ПорядокГруппДополнения[0].Значение.ПодчиненныеЭлементы Цикл @@ -2375,7 +2525,7 @@ ТаблицаПереходов.Очистить(); - // Начало + // Начало. ТаблицаПереходовНоваяСтрока(1, "СтраницаНачала", "СтраницаНавигацииНачало",, "СтраницаНачала_ПриПереходеДалее"); // Получение данных (транспорт сообщения обмена). @@ -2383,7 +2533,7 @@ ТаблицаПереходовНоваяСтрокаДлительнаяОперация(3, "СтраницаОжиданияАнализаДанных", "СтраницаНавигацииОжидание", Истина, "СтраницаОжиданияАнализаДанныхДлительнаяОперация_ОбработкаДлительнойОперации"); ТаблицаПереходовНоваяСтрокаДлительнаяОперация(4, "СтраницаОжиданияАнализаДанных", "СтраницаНавигацииОжидание", Истина, "СтраницаОжиданияАнализаДанныхДлительнаяОперацияОкончание_ОбработкаДлительнойОперации"); - // Анализ данных + // Анализ данных. // Автоматическое сопоставление данных. ТаблицаПереходовНоваяСтрокаДлительнаяОперация(5, "СтраницаОжиданияАнализаДанных", "СтраницаНавигацииОжидание", Истина, "АнализДанных_ОбработкаДлительнойОперации"); ТаблицаПереходовНоваяСтрокаДлительнаяОперация(6, "СтраницаОжиданияАнализаДанных", "СтраницаНавигацииОжидание", Истина, "АнализДанныхДлительнаяОперация_ОбработкаДлительнойОперации"); @@ -2392,12 +2542,19 @@ // Сопоставление данных пользователем. ТаблицаПереходовНоваяСтрока(8, "СтраницаИнформацииСтатистики", "СтраницаНавигацииПродолжение", "СтраницаИнформацииСтатистики_ПриОткрытии", "СтраницаИнформацииСтатистики_ПриПереходеДалее"); - // Загрузка данных - ТаблицаПереходовНоваяСтрокаДлительнаяОперация(9, "СтраницаОжиданияСинхронизацииДанных", "СтраницаНавигацииОжидание", Истина, "ЗагрузкаДанных_ОбработкаДлительнойОперации"); - ТаблицаПереходовНоваяСтрокаДлительнаяОперация(10, "СтраницаОжиданияСинхронизацииДанных", "СтраницаНавигацииОжидание", Истина, "ЗагрузкаДанныхДлительнаяОперация_ОбработкаДлительнойОперации"); - ТаблицаПереходовНоваяСтрокаДлительнаяОперация(11, "СтраницаОжиданияСинхронизацииДанных", "СтраницаНавигацииОжидание", Истина, "ЗагрузкаДанныхДлительнаяОперацияОкончание_ОбработкаДлительнойОперации"); + // Загрузка данных. + Если ОбменДаннымиПовтИсп.ЭтоУзелРаспределеннойИнформационнойБазы(Объект.УзелИнформационнойБазы) Тогда + ТаблицаПереходовНоваяСтрокаДлительнаяОперация(9, "СтраницаОжиданияСинхронизацииДанных", "СтраницаНавигацииОжидание", Истина, "ЗагрузкаДанных_ОбработкаДлительнойОперации"); + ТаблицаПереходовНоваяСтрокаДлительнаяОперация(10, "СтраницаОжиданияСинхронизацииДанных", "СтраницаНавигацииОжидание", Истина, "ЗагрузкаДанныхДлительнаяОперация_ОбработкаДлительнойОперации"); + ТаблицаПереходовНоваяСтрокаДлительнаяОперация(11, "СтраницаОжиданияСинхронизацииДанных", "СтраницаНавигацииОжидание", Истина, "ЗагрузкаДанныхДлительнаяОперацияОкончание_ОбработкаДлительнойОперации"); + Иначе + ИспользоватьПрогрессБар = Истина; + ТаблицаПереходовНоваяСтрокаДлительнаяОперация(9, "СтраницаОжиданияСинхронизацииДанныхПрогрессБарЗагрузка", "СтраницаНавигацииОжидание", Истина, "ЗагрузкаДанных_ОбработкаДлительнойОперации"); + ТаблицаПереходовНоваяСтрокаДлительнаяОперация(10, "СтраницаОжиданияСинхронизацииДанныхПрогрессБарЗагрузка", "СтраницаНавигацииОжидание", Истина, "ЗагрузкаДанныхДлительнаяОперация_ОбработкаДлительнойОперации"); + ТаблицаПереходовНоваяСтрокаДлительнаяОперация(11, "СтраницаОжиданияСинхронизацииДанныхПрогрессБарЗагрузка", "СтраницаНавигацииОжидание", Истина, "ЗагрузкаДанныхДлительнаяОперацияОкончание_ОбработкаДлительнойОперации"); + КонецЕсли; - // Итоги + // Итоги. ТаблицаПереходовНоваяСтрока(12, "СтраницаОкончанияСопоставления", "СтраницаНавигацииОкончание", "СтраницаОкончанияСопоставления_ПриОткрытии"); КонецПроцедуры @@ -2407,16 +2564,16 @@ ТаблицаПереходов.Очистить(); - // Проверка подключения - ТаблицаПереходовНоваяСтрока(1, "СтраницаНачала", "СтраницаНавигацииНачало",, "СтраницаНачала_ПриПереходеДалее"); - ТаблицаПереходовНоваяСтрокаДлительнаяОперация(2, "СтраницаОжиданияАнализаДанных", "СтраницаНавигацииОжидание", Истина, "СтраницаОжиданияПроверкиПодключения_ОбработкаДлительнойОперации"); + // Проверка подключения. + ТаблицаПереходовНоваяСтрока(1, "СтраницаНачала", "СтраницаНавигацииНачало",, "СтраницаНачала_ПриПереходеДалее"); + ТаблицаПереходовНоваяСтрокаДлительнаяОперация(2, "СтраницаОжиданияАнализаДанных", "СтраницаНавигацииОжидание", Истина, "СтраницаОжиданияПроверкиПодключения_ОбработкаДлительнойОперации"); // Получение данных (транспорт сообщения обмена). ТаблицаПереходовНоваяСтрокаДлительнаяОперация(3, "СтраницаОжиданияАнализаДанных", "СтраницаНавигацииОжидание", Истина, "СтраницаОжиданияАнализаДанных_ОбработкаДлительнойОперации"); ТаблицаПереходовНоваяСтрокаДлительнаяОперация(4, "СтраницаОжиданияАнализаДанных", "СтраницаНавигацииОжидание", Истина, "СтраницаОжиданияАнализаДанныхДлительнаяОперация_ОбработкаДлительнойОперации"); ТаблицаПереходовНоваяСтрокаДлительнаяОперация(5, "СтраницаОжиданияАнализаДанных", "СтраницаНавигацииОжидание", Истина, "СтраницаОжиданияАнализаДанныхДлительнаяОперацияОкончание_ОбработкаДлительнойОперации"); - // Анализ данных + // Анализ данных. // Автоматическое сопоставление данных. ТаблицаПереходовНоваяСтрокаДлительнаяОперация(6, "СтраницаОжиданияАнализаДанных", "СтраницаНавигацииОжидание", Истина, "АнализДанных_ОбработкаДлительнойОперации"); ТаблицаПереходовНоваяСтрокаДлительнаяОперация(7, "СтраницаОжиданияАнализаДанных", "СтраницаНавигацииОжидание", Истина, "АнализДанныхДлительнаяОперация_ОбработкаДлительнойОперации"); @@ -2425,12 +2582,19 @@ // Сопоставление данных пользователем. ТаблицаПереходовНоваяСтрока(9, "СтраницаИнформацииСтатистики", "СтраницаНавигацииПродолжение", "СтраницаИнформацииСтатистики_ПриОткрытии", "СтраницаИнформацииСтатистики_ПриПереходеДалее"); - // Загрузка данных - ТаблицаПереходовНоваяСтрокаДлительнаяОперация(10, "СтраницаОжиданияСинхронизацииДанных", "СтраницаНавигацииОжидание", Истина, "ЗагрузкаДанных_ОбработкаДлительнойОперации"); - ТаблицаПереходовНоваяСтрокаДлительнаяОперация(11, "СтраницаОжиданияСинхронизацииДанных", "СтраницаНавигацииОжидание", Истина, "ЗагрузкаДанныхДлительнаяОперация_ОбработкаДлительнойОперации"); - ТаблицаПереходовНоваяСтрокаДлительнаяОперация(12, "СтраницаОжиданияСинхронизацииДанных", "СтраницаНавигацииОжидание", Истина, "ЗагрузкаДанныхДлительнаяОперацияОкончание_ОбработкаДлительнойОперации"); + // Загрузка данных. + Если ОбменЧерезВебСервис Тогда + ИмяСтраницыСинхронизация = "СтраницаОжиданияСинхронизацииДанных"; + Иначе + ИспользоватьПрогрессБар = Истина; + ИмяСтраницыСинхронизация = "СтраницаОжиданияСинхронизацииДанныхПрогрессБарЗагрузка"; + КонецЕсли; + + ТаблицаПереходовНоваяСтрокаДлительнаяОперация(10, ИмяСтраницыСинхронизация, "СтраницаНавигацииОжидание", Истина, "ЗагрузкаДанных_ОбработкаДлительнойОперации"); + ТаблицаПереходовНоваяСтрокаДлительнаяОперация(11, ИмяСтраницыСинхронизация, "СтраницаНавигацииОжидание", Истина, "ЗагрузкаДанныхДлительнаяОперация_ОбработкаДлительнойОперации"); + ТаблицаПереходовНоваяСтрокаДлительнаяОперация(12, ИмяСтраницыСинхронизация, "СтраницаНавигацииОжидание", Истина, "ЗагрузкаДанныхДлительнаяОперацияОкончание_ОбработкаДлительнойОперации"); - // Итоги + // Итоги. ТаблицаПереходовНоваяСтрока(13, "СтраницаОкончанияСопоставления", "СтраницаНавигацииОкончание", "СтраницаОкончанияСопоставления_ПриОткрытии"); КонецПроцедуры @@ -2440,19 +2604,28 @@ ТаблицаПереходов.Очистить(); - // Начало + // Начало. ТаблицаПереходовНоваяСтрока(1, "СтраницаНачала", "СтраницаНавигацииНачало",, "СтраницаНачала_ПриПереходеДалее"); - // Настройка выгрузки данных + // Настройка выгрузки данных. РезультатВыгрузкиДанных = ""; - ТаблицаПереходовНоваяСтрока(2, "СтраницаВопросОСоставеВыгрузки", "СтраницаНавигацииПродолжение", "СтраницаВопросОСоставеВыгрузки_ПриОткрытии"); + ТаблицаПереходовНоваяСтрока(2, "СтраницаВопросОСоставеВыгрузки", "СтраницаНавигацииПродолжение", "СтраницаВопросОСоставеВыгрузки_ПриОткрытии"); - // Выгрузка данных - ТаблицаПереходовНоваяСтрокаДлительнаяОперация(3, "СтраницаОжиданияСинхронизацииДанных", "СтраницаНавигацииОжидание", Истина, "СтраницаОжиданияВыгрузкиДанных_ОбработкаДлительнойОперации"); - ТаблицаПереходовНоваяСтрокаДлительнаяОперация(4, "СтраницаОжиданияСинхронизацииДанных", "СтраницаНавигацииОжидание", Истина, "СтраницаОжиданияВыгрузкиДанныхДлительнаяОперация_ОбработкаДлительнойОперации"); - ТаблицаПереходовНоваяСтрокаДлительнаяОперация(5, "СтраницаОжиданияСинхронизацииДанных", "СтраницаНавигацииОжидание", Истина, "СтраницаОжиданияВыгрузкиДанныхДлительнаяОперацияОкончание_ОбработкаДлительнойОперации"); + // Выгрузка данных. + Если ОбменДаннымиПовтИсп.ЭтоУзелРаспределеннойИнформационнойБазы(Объект.УзелИнформационнойБазы) Тогда + ИмяСтраницыСинхронизация = "СтраницаОжиданияСинхронизацииДанных"; + ИмяПроцедуры = "СтраницаОжиданияВыгрузкиДанных_ОбработкаДлительнойОперации"; + Иначе + ИспользоватьПрогрессБар = Истина; + ИмяСтраницыСинхронизация = "СтраницаОжиданияСинхронизацииДанныхПрогрессБарВыгрузка"; + ИмяПроцедуры = "СтраницаОжиданияВыгрузкиДанныхОбычныеКаналы_ОбработкаДлительнойОперации"; + КонецЕсли; - // Итоги + ТаблицаПереходовНоваяСтрокаДлительнаяОперация(3, ИмяСтраницыСинхронизация, "СтраницаНавигацииОжидание", Истина, ИмяПроцедуры); + ТаблицаПереходовНоваяСтрокаДлительнаяОперация(4, ИмяСтраницыСинхронизация, "СтраницаНавигацииОжидание", Истина, "СтраницаОжиданияВыгрузкиДанныхДлительнаяОперация_ОбработкаДлительнойОперации"); + ТаблицаПереходовНоваяСтрокаДлительнаяОперация(5, ИмяСтраницыСинхронизация, "СтраницаНавигацииОжидание", Истина, "СтраницаОжиданияВыгрузкиДанныхДлительнаяОперацияОкончание_ОбработкаДлительнойОперации"); + + // Итоги. ТаблицаПереходовНоваяСтрока(6, "СтраницаОкончанияСопоставления", "СтраницаНавигацииОкончание", "СтраницаОкончанияСопоставления_ПриОткрытии"); КонецПроцедуры @@ -2462,20 +2635,29 @@ ТаблицаПереходов.Очистить(); - // Проверка подключения - ТаблицаПереходовНоваяСтрока(1, "СтраницаНачала", "СтраницаНавигацииНачало",, "СтраницаНачала_ПриПереходеДалее"); + // Проверка подключения. + ТаблицаПереходовНоваяСтрока(1, "СтраницаНачала", "СтраницаНавигацииНачало",, "СтраницаНачала_ПриПереходеДалее"); ТаблицаПереходовНоваяСтрокаДлительнаяОперация(2, "СтраницаОжиданияСинхронизацииДанных", "СтраницаНавигацииОжидание", Истина, "СтраницаОжиданияПроверкиПодключения_ОбработкаДлительнойОперации"); - // Настройка выгрузки данных + // Настройка выгрузки данных. РезультатВыгрузкиДанных = ""; - ТаблицаПереходовНоваяСтрока(3, "СтраницаВопросОСоставеВыгрузки", "СтраницаНавигацииПродолжение", "СтраницаВопросОСоставеВыгрузки_ПриОткрытии"); + ТаблицаПереходовНоваяСтрока(3, "СтраницаВопросОСоставеВыгрузки", "СтраницаНавигацииПродолжение", "СтраницаВопросОСоставеВыгрузки_ПриОткрытии"); - // Выгрузка данных - ТаблицаПереходовНоваяСтрокаДлительнаяОперация(4, "СтраницаОжиданияСинхронизацииДанных", "СтраницаНавигацииОжидание", Истина, "СтраницаОжиданияВыгрузкиДанных_ОбработкаДлительнойОперации"); - ТаблицаПереходовНоваяСтрокаДлительнаяОперация(5, "СтраницаОжиданияСинхронизацииДанных", "СтраницаНавигацииОжидание", Истина, "СтраницаОжиданияВыгрузкиДанныхДлительнаяОперация_ОбработкаДлительнойОперации"); - ТаблицаПереходовНоваяСтрокаДлительнаяОперация(6, "СтраницаОжиданияСинхронизацииДанных", "СтраницаНавигацииОжидание", Истина, "СтраницаОжиданияВыгрузкиДанныхДлительнаяОперацияОкончание_ОбработкаДлительнойОперации"); + // Выгрузка данных. + Если ОбменЧерезВебСервис Тогда + ИмяСтраницыСинхронизация = "СтраницаОжиданияСинхронизацииДанных"; + ИмяПроцедуры = "СтраницаОжиданияВыгрузкиДанных_ОбработкаДлительнойОперации"; + Иначе + ИспользоватьПрогрессБар = Истина; + ИмяСтраницыСинхронизация = "СтраницаОжиданияСинхронизацииДанныхПрогрессБарВыгрузка"; + ИмяПроцедуры = "СтраницаОжиданияВыгрузкиДанныхОбычныеКаналы_ОбработкаДлительнойОперации"; + КонецЕсли; + + ТаблицаПереходовНоваяСтрокаДлительнаяОперация(4, ИмяСтраницыСинхронизация, "СтраницаНавигацииОжидание", Истина, ИмяПроцедуры); + ТаблицаПереходовНоваяСтрокаДлительнаяОперация(5, ИмяСтраницыСинхронизация, "СтраницаНавигацииОжидание", Истина, "СтраницаОжиданияВыгрузкиДанныхДлительнаяОперация_ОбработкаДлительнойОперации"); + ТаблицаПереходовНоваяСтрокаДлительнаяОперация(6, ИмяСтраницыСинхронизация, "СтраницаНавигацииОжидание", Истина, "СтраницаОжиданияВыгрузкиДанныхДлительнаяОперацияОкончание_ОбработкаДлительнойОперации"); - // Итоги + // Итоги. ТаблицаПереходовНоваяСтрока(7, "СтраницаОкончанияСопоставления", "СтраницаНавигацииОкончание", "СтраницаОкончанияСопоставления_ПриОткрытии"); КонецПроцедуры @@ -2485,7 +2667,7 @@ ТаблицаПереходов.Очистить(); - // Начало + // Начало. ТаблицаПереходовНоваяСтрока(1, "СтраницаНачала", "СтраницаНавигацииНачало",, "СтраницаНачала_ПриПереходеДалее"); // Получение данных (транспорт сообщения обмена). @@ -2493,7 +2675,7 @@ ТаблицаПереходовНоваяСтрокаДлительнаяОперация(3, "СтраницаОжиданияАнализаДанных", "СтраницаНавигацииОжидание", Истина, "СтраницаОжиданияАнализаДанныхДлительнаяОперация_ОбработкаДлительнойОперации"); ТаблицаПереходовНоваяСтрокаДлительнаяОперация(4, "СтраницаОжиданияАнализаДанных", "СтраницаНавигацииОжидание", Истина, "СтраницаОжиданияАнализаДанныхДлительнаяОперацияОкончание_ОбработкаДлительнойОперации"); - // Анализ данных + // Анализ данных. // Автоматическое сопоставление данных. ТаблицаПереходовНоваяСтрокаДлительнаяОперация(5, "СтраницаОжиданияАнализаДанных", "СтраницаНавигацииОжидание", Истина, "АнализДанных_ОбработкаДлительнойОперации"); ТаблицаПереходовНоваяСтрокаДлительнаяОперация(6, "СтраницаОжиданияАнализаДанных", "СтраницаНавигацииОжидание", Истина, "АнализДанныхДлительнаяОперация_ОбработкаДлительнойОперации"); @@ -2501,22 +2683,32 @@ // Сопоставление данных пользователем. ТаблицаПереходовНоваяСтрока(8, "СтраницаИнформацииСтатистики", "СтраницаНавигацииПродолжение", "СтраницаИнформацииСтатистики_ПриОткрытии", "СтраницаИнформацииСтатистики_ПриПереходеДалее"); + Если ОбменДаннымиПовтИсп.ЭтоУзелРаспределеннойИнформационнойБазы(Объект.УзелИнформационнойБазы) Тогда + ИмяСтраницыСинхронизацияЗагрузка = "СтраницаОжиданияСинхронизацииДанных"; + ИмяСтраницыСинхронизацияВыгрузка = "СтраницаОжиданияСинхронизацииДанных"; + ИмяПроцедурыВыгрузка = "СтраницаОжиданияВыгрузкиДанных_ОбработкаДлительнойОперации"; + Иначе + ИспользоватьПрогрессБар = Истина; + ИмяСтраницыСинхронизацияЗагрузка = "СтраницаОжиданияСинхронизацииДанныхПрогрессБарЗагрузка"; + ИмяСтраницыСинхронизацияВыгрузка = "СтраницаОжиданияСинхронизацииДанныхПрогрессБарВыгрузка"; + ИмяПроцедурыВыгрузка = "СтраницаОжиданияВыгрузкиДанныхОбычныеКаналы_ОбработкаДлительнойОперации"; + КонецЕсли; - // Загрузка данных - ТаблицаПереходовНоваяСтрокаДлительнаяОперация(9, "СтраницаОжиданияСинхронизацииДанных", "СтраницаНавигацииОжидание", Истина, "ЗагрузкаДанных_ОбработкаДлительнойОперации"); - ТаблицаПереходовНоваяСтрокаДлительнаяОперация(10, "СтраницаОжиданияСинхронизацииДанных", "СтраницаНавигацииОжидание", Истина, "ЗагрузкаДанныхДлительнаяОперация_ОбработкаДлительнойОперации"); - ТаблицаПереходовНоваяСтрокаДлительнаяОперация(11, "СтраницаОжиданияСинхронизацииДанных", "СтраницаНавигацииОжидание", Истина, "ЗагрузкаДанныхДлительнаяОперацияОкончание_ОбработкаДлительнойОперации"); + // Загрузка данных. + ТаблицаПереходовНоваяСтрокаДлительнаяОперация(9, ИмяСтраницыСинхронизацияЗагрузка, "СтраницаНавигацииОжидание", Истина, "ЗагрузкаДанных_ОбработкаДлительнойОперации"); + ТаблицаПереходовНоваяСтрокаДлительнаяОперация(10, ИмяСтраницыСинхронизацияЗагрузка, "СтраницаНавигацииОжидание", Истина, "ЗагрузкаДанныхДлительнаяОперация_ОбработкаДлительнойОперации"); + ТаблицаПереходовНоваяСтрокаДлительнаяОперация(11, ИмяСтраницыСинхронизацияЗагрузка, "СтраницаНавигацииОжидание", Истина, "ЗагрузкаДанныхДлительнаяОперацияОкончание_ОбработкаДлительнойОперации"); - // Настройка выгрузки данных + // Настройка выгрузки данных. РезультатВыгрузкиДанных = ""; ТаблицаПереходовНоваяСтрока(12, "СтраницаВопросОСоставеВыгрузки", "СтраницаНавигацииПродолжение", "СтраницаВопросОСоставеВыгрузки_ПриОткрытии"); - // Выгрузка данных - ТаблицаПереходовНоваяСтрокаДлительнаяОперация(13, "СтраницаОжиданияСинхронизацииДанных", "СтраницаНавигацииОжидание", Истина, "СтраницаОжиданияВыгрузкиДанных_ОбработкаДлительнойОперации"); - ТаблицаПереходовНоваяСтрокаДлительнаяОперация(14, "СтраницаОжиданияСинхронизацииДанных", "СтраницаНавигацииОжидание", Истина, "СтраницаОжиданияВыгрузкиДанныхДлительнаяОперация_ОбработкаДлительнойОперации"); - ТаблицаПереходовНоваяСтрокаДлительнаяОперация(15, "СтраницаОжиданияСинхронизацииДанных", "СтраницаНавигацииОжидание", Истина, "СтраницаОжиданияВыгрузкиДанныхДлительнаяОперацияОкончание_ОбработкаДлительнойОперации"); + // Выгрузка данных. + ТаблицаПереходовНоваяСтрокаДлительнаяОперация(13, ИмяСтраницыСинхронизацияВыгрузка, "СтраницаНавигацииОжидание", Истина, ИмяПроцедурыВыгрузка); + ТаблицаПереходовНоваяСтрокаДлительнаяОперация(14, ИмяСтраницыСинхронизацияВыгрузка, "СтраницаНавигацииОжидание", Истина, "СтраницаОжиданияВыгрузкиДанныхДлительнаяОперация_ОбработкаДлительнойОперации"); + ТаблицаПереходовНоваяСтрокаДлительнаяОперация(15, ИмяСтраницыСинхронизацияВыгрузка, "СтраницаНавигацииОжидание", Истина, "СтраницаОжиданияВыгрузкиДанныхДлительнаяОперацияОкончание_ОбработкаДлительнойОперации"); - // Итоги + // Итоги. ТаблицаПереходовНоваяСтрока(16, "СтраницаОкончанияСопоставления", "СтраницаНавигацииОкончание", "СтраницаОкончанияСопоставления_ПриОткрытии"); КонецПроцедуры @@ -2526,16 +2718,16 @@ ТаблицаПереходов.Очистить(); - // Проверка подключения + // Проверка подключения. ТаблицаПереходовНоваяСтрока(1, "СтраницаНачала", "СтраницаНавигацииНачало",, "СтраницаНачала_ПриПереходеДалее"); - ТаблицаПереходовНоваяСтрокаДлительнаяОперация(2, "СтраницаОжиданияАнализаДанных", "СтраницаНавигацииОжидание", Истина, "СтраницаОжиданияПроверкиПодключения_ОбработкаДлительнойОперации"); + ТаблицаПереходовНоваяСтрокаДлительнаяОперация(2, "СтраницаОжиданияАнализаДанных", "СтраницаНавигацииОжидание", Истина, "СтраницаОжиданияПроверкиПодключения_ОбработкаДлительнойОперации"); // Получение данных (транспорт сообщения обмена). - ТаблицаПереходовНоваяСтрокаДлительнаяОперация(3, "СтраницаОжиданияАнализаДанных", "СтраницаНавигацииОжидание", Истина, "СтраницаОжиданияАнализаДанных_ОбработкаДлительнойОперации"); - ТаблицаПереходовНоваяСтрокаДлительнаяОперация(4, "СтраницаОжиданияАнализаДанных", "СтраницаНавигацииОжидание", Истина, "СтраницаОжиданияАнализаДанныхДлительнаяОперация_ОбработкаДлительнойОперации"); - ТаблицаПереходовНоваяСтрокаДлительнаяОперация(5, "СтраницаОжиданияАнализаДанных", "СтраницаНавигацииОжидание", Истина, "СтраницаОжиданияАнализаДанныхДлительнаяОперацияОкончание_ОбработкаДлительнойОперации"); + ТаблицаПереходовНоваяСтрокаДлительнаяОперация(3, "СтраницаОжиданияАнализаДанных", "СтраницаНавигацииОжидание", Истина, "СтраницаОжиданияАнализаДанных_ОбработкаДлительнойОперации"); + ТаблицаПереходовНоваяСтрокаДлительнаяОперация(4, "СтраницаОжиданияАнализаДанных", "СтраницаНавигацииОжидание", Истина, "СтраницаОжиданияАнализаДанныхДлительнаяОперация_ОбработкаДлительнойОперации"); + ТаблицаПереходовНоваяСтрокаДлительнаяОперация(5, "СтраницаОжиданияАнализаДанных", "СтраницаНавигацииОжидание", Истина, "СтраницаОжиданияАнализаДанныхДлительнаяОперацияОкончание_ОбработкаДлительнойОперации"); - // Анализ данных + // Анализ данных. // Автоматическое сопоставление данных. ТаблицаПереходовНоваяСтрокаДлительнаяОперация(6, "СтраницаОжиданияАнализаДанных", "СтраницаНавигацииОжидание", Истина, "АнализДанных_ОбработкаДлительнойОперации"); ТаблицаПереходовНоваяСтрокаДлительнаяОперация(7, "СтраницаОжиданияАнализаДанных", "СтраницаНавигацииОжидание", Истина, "АнализДанныхДлительнаяОперация_ОбработкаДлительнойОперации"); @@ -2544,21 +2736,32 @@ // Сопоставление данных пользователем. ТаблицаПереходовНоваяСтрока(9, "СтраницаИнформацииСтатистики", "СтраницаНавигацииПродолжение", "СтраницаИнформацииСтатистики_ПриОткрытии", "СтраницаИнформацииСтатистики_ПриПереходеДалее"); - // Загрузка данных - ТаблицаПереходовНоваяСтрокаДлительнаяОперация(10, "СтраницаОжиданияСинхронизацииДанных", "СтраницаНавигацииОжидание", Истина, "ЗагрузкаДанных_ОбработкаДлительнойОперации"); - ТаблицаПереходовНоваяСтрокаДлительнаяОперация(11, "СтраницаОжиданияСинхронизацииДанных", "СтраницаНавигацииОжидание", Истина, "ЗагрузкаДанныхДлительнаяОперация_ОбработкаДлительнойОперации"); - ТаблицаПереходовНоваяСтрокаДлительнаяОперация(12, "СтраницаОжиданияСинхронизацииДанных", "СтраницаНавигацииОжидание", Истина, "ЗагрузкаДанныхДлительнаяОперацияОкончание_ОбработкаДлительнойОперации"); + // Загрузка данных. + Если ОбменЧерезВебСервис Тогда + ИмяСтраницыСинхронизацияЗагрузка = "СтраницаОжиданияСинхронизацииДанных"; + ИмяСтраницыСинхронизацияВыгрузка = "СтраницаОжиданияСинхронизацииДанных"; + ИмяПроцедурыВыгрузка = "СтраницаОжиданияВыгрузкиДанных_ОбработкаДлительнойОперации"; + Иначе + ИспользоватьПрогрессБар = Истина; + ИмяСтраницыСинхронизацияЗагрузка = "СтраницаОжиданияСинхронизацииДанныхПрогрессБарЗагрузка"; + ИмяСтраницыСинхронизацияВыгрузка = "СтраницаОжиданияСинхронизацииДанныхПрогрессБарВыгрузка"; + ИмяПроцедурыВыгрузка = "СтраницаОжиданияВыгрузкиДанныхОбычныеКаналы_ОбработкаДлительнойОперации"; + КонецЕсли; - // Настройка выгрузки данных + ТаблицаПереходовНоваяСтрокаДлительнаяОперация(10, ИмяСтраницыСинхронизацияЗагрузка, "СтраницаНавигацииОжидание", Истина, "ЗагрузкаДанных_ОбработкаДлительнойОперации"); + ТаблицаПереходовНоваяСтрокаДлительнаяОперация(11, ИмяСтраницыСинхронизацияЗагрузка, "СтраницаНавигацииОжидание", Истина, "ЗагрузкаДанныхДлительнаяОперация_ОбработкаДлительнойОперации"); + ТаблицаПереходовНоваяСтрокаДлительнаяОперация(12, ИмяСтраницыСинхронизацияЗагрузка, "СтраницаНавигацииОжидание", Истина, "ЗагрузкаДанныхДлительнаяОперацияОкончание_ОбработкаДлительнойОперации"); + + // Настройка выгрузки данных. РезультатВыгрузкиДанных = ""; - ТаблицаПереходовНоваяСтрока(13, "СтраницаВопросОСоставеВыгрузки", "СтраницаНавигацииПродолжение", "СтраницаВопросОСоставеВыгрузки_ПриОткрытии"); + ТаблицаПереходовНоваяСтрока(13, "СтраницаВопросОСоставеВыгрузки", "СтраницаНавигацииПродолжение", "СтраницаВопросОСоставеВыгрузки_ПриОткрытии"); - // Выгрузка данных - ТаблицаПереходовНоваяСтрокаДлительнаяОперация(14, "СтраницаОжиданияСинхронизацииДанных", "СтраницаНавигацииОжидание", Истина, "СтраницаОжиданияВыгрузкиДанных_ОбработкаДлительнойОперации"); - ТаблицаПереходовНоваяСтрокаДлительнаяОперация(15, "СтраницаОжиданияСинхронизацииДанных", "СтраницаНавигацииОжидание", Истина, "СтраницаОжиданияВыгрузкиДанныхДлительнаяОперация_ОбработкаДлительнойОперации"); - ТаблицаПереходовНоваяСтрокаДлительнаяОперация(16, "СтраницаОжиданияСинхронизацииДанных", "СтраницаНавигацииОжидание", Истина, "СтраницаОжиданияВыгрузкиДанныхДлительнаяОперацияОкончание_ОбработкаДлительнойОперации"); + // Выгрузка данных. + ТаблицаПереходовНоваяСтрокаДлительнаяОперация(14, ИмяСтраницыСинхронизацияВыгрузка, "СтраницаНавигацииОжидание", Истина, ИмяПроцедурыВыгрузка); + ТаблицаПереходовНоваяСтрокаДлительнаяОперация(15, ИмяСтраницыСинхронизацияВыгрузка, "СтраницаНавигацииОжидание", Истина, "СтраницаОжиданияВыгрузкиДанныхДлительнаяОперация_ОбработкаДлительнойОперации"); + ТаблицаПереходовНоваяСтрокаДлительнаяОперация(16, ИмяСтраницыСинхронизацияВыгрузка, "СтраницаНавигацииОжидание", Истина, "СтраницаОжиданияВыгрузкиДанныхДлительнаяОперацияОкончание_ОбработкаДлительнойОперации"); - // Итоги + // Итоги. ТаблицаПереходовНоваяСтрока(17, "СтраницаОкончанияСопоставления", "СтраницаНавигацииОкончание", "СтраницаОкончанияСопоставления_ПриОткрытии"); КонецПроцедуры diff --git a/SSL/src/DataProcessors/ПомощникИнтерактивногоОбменаДанными/Help/ru.html b/SSL/src/DataProcessors/ПомощникИнтерактивногоОбменаДанными/Help/ru.html index 785141d70..db7bd8346 100644 --- a/SSL/src/DataProcessors/ПомощникИнтерактивногоОбменаДанными/Help/ru.html +++ b/SSL/src/DataProcessors/ПомощникИнтерактивногоОбменаДанными/Help/ru.html @@ -1,7 +1,7 @@ <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"><html><head><meta content="text/html; charset=utf-8" http-equiv="Content-Type"></meta><link rel="stylesheet" type="text/css" href="v8help://service_book/service_style"></link><meta name="GENERATOR" content="MSHTML 9.00.8112.16421"></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>Открыть помощник можно, нажав кнопку <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> при необходимости можно перейти в каталог обмена информацией и убедиться в физическом существовании требуемых файлов или проверить параметры транспорта сообщений обмена. </li><li>Для перехода к следующей странице нажмите кнопку <strong>Далее</strong>. </li></ul><h3 align="left">Сопоставление данных</h3> @@ -48,4 +48,4 @@ </li><li><strong><img src="CommonPicture.СостояниеОбменаДаннымиОшибка" width="16" height="16"></img>Не удалось отправить данные</strong> или <strong>Данные успешно отправлены</strong> и т.д. </li><li>По ссылке <strong>Подробно</strong> можно перейти в журнал регистрации и просмотреть, как проходил процесс синхронизации, узнать об ошибках.</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 +<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 4e850695f..5fc50e3df 100644 --- a/SSL/src/DataProcessors/ПомощникИнтерактивногоОбменаДанными/ManagerModule.bsl +++ b/SSL/src/DataProcessors/ПомощникИнтерактивногоОбменаДанными/ManagerModule.bsl @@ -8,8 +8,7 @@ ПоместитьВоВременноеХранилище( РезультатАвтоматическогоСопоставленияДанных(Параметры.УзелИнформационнойБазы, Параметры.ИмяФайлаСообщенияОбмена, Параметры.ИмяВременногоКаталогаСообщенийОбмена, - Параметры.ПроверятьРасхождениеВерсий), АдресВременногоХранилища - ); + Параметры.ПроверятьРасхождениеВерсий), АдресВременногоХранилища); КонецПроцедуры @@ -67,11 +66,39 @@ // Процедура ВыполнитьЗагрузкуДанных(Параметры, АдресВременногоХранилища) Экспорт - ОбменДаннымиСервер.ВыполнитьОбменДаннымиДляУзлаИнформационнойБазыЧерезФайлИлиСтроку( - Параметры.УзелИнформационнойБазы, - Параметры.ИмяФайлаСообщенияОбмена, - Перечисления.ДействияПриОбмене.ЗагрузкаДанных - ); + ПараметрыОбменаДанными = ОбменДаннымиСервер.ПараметрыОбменаДаннымиЧерезФайлИлиСтроку(); + + ПараметрыОбменаДанными.УзелИнформационнойБазы = Параметры.УзелИнформационнойБазы; + ПараметрыОбменаДанными.ПолноеИмяФайлаСообщенияОбмена = Параметры.ИмяФайлаСообщенияОбмена; + ПараметрыОбменаДанными.ДействиеПриОбмене = Перечисления.ДействияПриОбмене.ЗагрузкаДанных; + + ОбменДаннымиСервер.ВыполнитьОбменДаннымиДляУзлаИнформационнойБазыЧерезФайлИлиСтроку(ПараметрыОбменаДанными); +КонецПроцедуры + +// Для внутреннего использования. +// Выполняет выгрузку данных, вызывается фоновым заданием +// Параметры - структура с параметрами для передачи +Процедура ВыполнитьВыгрузкуДанных(Параметры, АдресВременногоХранилища) Экспорт + + Отказ = Ложь; + + ПараметрыОбмена = ОбменДаннымиСервер.ПараметрыОбмена(); + ПараметрыОбмена.ВидТранспортаСообщенийОбмена = Параметры.ВидТранспортаСообщенийОбмена; + ПараметрыОбмена.ВыполнятьЗагрузку = Ложь; + ПараметрыОбмена.ВыполнятьВыгрузку = Истина; + + ПараметрыОбмена.ДлительнаяОперацияРазрешена = Истина; + ПараметрыОбмена.ДлительнаяОперация = Истина; + ПараметрыОбмена.ИдентификаторОперации = Параметры.ИдентификаторОперации; + ПараметрыОбмена.ИдентификаторФайла = Параметры.ИдентификаторФайла; + ПараметрыОбмена.ПараметрыАутентификации = Параметры.WSПароль; + + ОбменДаннымиСервер.ВыполнитьОбменДаннымиДляУзлаИнформационнойБазы(Параметры.УзелИнформационнойБазы, ПараметрыОбмена, Отказ); + + Параметры.ИдентификаторОперации = ПараметрыОбмена.ИдентификаторОперации; + Параметры.ИдентификаторФайла = ПараметрыОбмена.ИдентификаторФайла; + Параметры.WSПароль = ПараметрыОбмена.ПараметрыАутентификации; + КонецПроцедуры // Для внутреннего использования. diff --git a/SSL/src/DataProcessors/ПомощникИнтерактивногоОбменаДанными/ObjectModule.bsl b/SSL/src/DataProcessors/ПомощникИнтерактивногоОбменаДанными/ObjectModule.bsl index e8fbba8d9..0ea21a4a1 100644 --- a/SSL/src/DataProcessors/ПомощникИнтерактивногоОбменаДанными/ObjectModule.bsl +++ b/SSL/src/DataProcessors/ПомощникИнтерактивногоОбменаДанными/ObjectModule.bsl @@ -229,8 +229,7 @@ ИдентификаторФайла, ДлительнаяОперация, ИдентификаторОперации, - Пароль - ) Экспорт + Пароль) Экспорт УстановитьПривилегированныйРежим(Истина); @@ -270,8 +269,7 @@ Отказ, ИдентификаторФайлаПакетаДанных, ИдентификаторФайла, - Знач Пароль = "" - ) Экспорт + Знач Пароль = "") Экспорт УстановитьПривилегированныйРежим(Истина); @@ -372,7 +370,7 @@ Если СтруктураНастроекОбмена.Отказ Тогда Возврат; КонецЕсли; - + СтруктураНастроекОбмена.ДатаНачала = ТекущаяДатаСеанса(); ОбработкаОбменаДанными = СтруктураНастроекОбмена.ОбработкаОбменаДанными; // Получаем массив таблиц, которые необходимо пакетно загрузить в кэш платформы. @@ -409,6 +407,17 @@ НСтрока = НСтр("ru = 'При загрузке сообщения обмена возникли ошибки: %1'"); НСтрока = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтрока, ОбработкаОбменаДанными.СтрокаСообщенияОбОшибке()); ОбщегоНазначенияКлиентСервер.СообщитьПользователю(НСтрока,,,, Отказ); + + // В случае ошибки фиксируем результат загрузки. + СтруктураЗаписи = Новый Структура; + СтруктураЗаписи.Вставить("УзелИнформационнойБазы", СтруктураНастроекОбмена.УзелИнформационнойБазы); + СтруктураЗаписи.Вставить("ДействиеПриОбмене", СтруктураНастроекОбмена.ДействиеПриОбмене); + + СтруктураЗаписи.Вставить("РезультатВыполненияОбмена", Перечисления.РезультатыВыполненияОбмена.Ошибка); + СтруктураЗаписи.Вставить("ДатаНачала", СтруктураНастроекОбмена.ДатаНачала); + СтруктураЗаписи.Вставить("ДатаОкончания", ТекущаяДатаСеанса()); + + РегистрыСведений.СостоянияОбменовДанными.ДобавитьЗапись(СтруктураЗаписи); Возврат; КонецЕсли; @@ -424,6 +433,11 @@ УдалитьФайлы(ИмяВременногоКаталога); ИмяВременногоКаталога = ""; Исключение + СтрокаСообщения = НСтр("ru = 'Ошибка при попытке удаления файлов из временного каталога сообщений обмена %1. Описание ошибки: %2'", + ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()); + СтрокаСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(СтрокаСообщения, ИмяВременногоКаталога, ОписаниеОшибки()); + ЗаписьЖурналаРегистрации(ОбменДаннымиСервер.СобытиеЖурналаРегистрацииОбменДанными(), + УровеньЖурналаРегистрации.Предупреждение,,, СтрокаСообщения); КонецПопытки; КонецЕсли; diff --git a/SSL/src/DataProcessors/ПомощникСозданияОбменаДанными/Forms/Форма/Form.form b/SSL/src/DataProcessors/ПомощникСозданияОбменаДанными/Forms/Форма/Form.form index 4e96b27d6..af8ec0af3 100644 --- a/SSL/src/DataProcessors/ПомощникСозданияОбменаДанными/Forms/Форма/Form.form +++ b/SSL/src/DataProcessors/ПомощникСозданияОбменаДанными/Forms/Форма/Form.form @@ -337,7 +337,7 @@ <common>true</common> </userVisible> <dataPath xsi:type="form:DataPath"> - <segments>Объект.ИмяФайлаНастроекОбменаДаннымиДляЗагрузки</segments> + <segments>Объект.ИмяФайлаНастроекСинхронизацииДанныхДляЗагрузки</segments> </dataPath> <titleLocation>None</titleLocation> <toolTipRepresentation>Button</toolTipRepresentation> @@ -10597,7 +10597,7 @@ <common>true</common> </userVisible> <dataPath xsi:type="form:DataPath"> - <segments>Объект.ИмяФайлаНастроекОбменаДанными</segments> + <segments>Объект.ИмяФайлаНастроекСинхронизацииДанных</segments> </dataPath> <titleLocation>None</titleLocation> <extendedTooltip> @@ -10919,6 +10919,188 @@ <currentRowUse>Auto</currentRowUse> </extInfo> </items> + <items xsi:type="form:FormGroup"> + <name>ГруппаПрогрессБарВыгрузка</name> + <id>2517</id> + <items xsi:type="form:Decoration"> + <name>Декорация1</name> + <id>2519</id> + <visible>true</visible> + <enabled>true</enabled> + <userVisible> + <common>true</common> + </userVisible> + <extendedTooltip> + <name>Декорация1РасширеннаяПодсказка</name> + <id>2521</id> + <type>Label</type> + <autoMaxWidth>true</autoMaxWidth> + <autoMaxHeight>true</autoMaxHeight> + <extInfo xsi:type="form:LabelDecorationExtInfo"> + <horizontalAlign>Left</horizontalAlign> + </extInfo> + </extendedTooltip> + <contextMenu> + <name>Декорация1КонтекстноеМеню</name> + <id>2520</id> + <autoFill>true</autoFill> + </contextMenu> + <type>Label</type> + <width>6</width> + <autoMaxWidth>true</autoMaxWidth> + <height>4</height> + <autoMaxHeight>true</autoMaxHeight> + <extInfo xsi:type="form:LabelDecorationExtInfo"> + <horizontalAlign>Left</horizontalAlign> + </extInfo> + </items> + <items xsi:type="form:FormGroup"> + <name>ГруппаПрогрессБарВыгрузкаВертикальная</name> + <id>2522</id> + <items xsi:type="form:FormField"> + <name>ПроцентВыполнения</name> + <id>2524</id> + <visible>true</visible> + <enabled>true</enabled> + <userVisible> + <common>true</common> + </userVisible> + <dataPath xsi:type="form:DataPath"> + <segments>ПроцентВыполнения</segments> + </dataPath> + <titleLocation>None</titleLocation> + <extendedTooltip> + <name>ПроцентВыполненияРасширеннаяПодсказка</name> + <id>2526</id> + <type>Label</type> + <autoMaxWidth>true</autoMaxWidth> + <autoMaxHeight>true</autoMaxHeight> + <extInfo xsi:type="form:LabelDecorationExtInfo"> + <horizontalAlign>Left</horizontalAlign> + </extInfo> + </extendedTooltip> + <contextMenu> + <name>ПроцентВыполненияКонтекстноеМеню</name> + <id>2525</id> + <autoFill>true</autoFill> + </contextMenu> + <type>ProgressBarField</type> + <editMode>Enter</editMode> + <showInHeader>true</showInHeader> + <headerHorizontalAlign>Left</headerHorizontalAlign> + <showInFooter>true</showInFooter> + <extInfo xsi:type="form:ProgressBarFieldExtInfo"> + <width>32</width> + <autoMaxWidth>true</autoMaxWidth> + <height>1</height> + <autoMaxHeight>true</autoMaxHeight> + <horizontalStretch>true</horizontalStretch> + <maxValue>100</maxValue> + <showPercent>true</showPercent> + </extInfo> + </items> + <items xsi:type="form:FormField"> + <name>ДопИнформацияВыполнение</name> + <id>2527</id> + <visible>true</visible> + <enabled>true</enabled> + <userVisible> + <common>true</common> + </userVisible> + <dataPath xsi:type="form:DataPath"> + <segments>ДопИнформацияВыполнение</segments> + </dataPath> + <titleLocation>None</titleLocation> + <extendedTooltip> + <name>ДопИнформацияВыполнениеРасширеннаяПодсказка</name> + <id>2529</id> + <type>Label</type> + <autoMaxWidth>true</autoMaxWidth> + <autoMaxHeight>true</autoMaxHeight> + <extInfo xsi:type="form:LabelDecorationExtInfo"> + <horizontalAlign>Left</horizontalAlign> + </extInfo> + </extendedTooltip> + <contextMenu> + <name>ДопИнформацияВыполнениеКонтекстноеМеню</name> + <id>2528</id> + <autoFill>true</autoFill> + </contextMenu> + <type>LabelField</type> + <editMode>Enter</editMode> + <showInHeader>true</showInHeader> + <headerHorizontalAlign>Left</headerHorizontalAlign> + <showInFooter>true</showInFooter> + <extInfo xsi:type="form:LabelFieldExtInfo"> + <autoMaxWidth>true</autoMaxWidth> + <autoMaxHeight>true</autoMaxHeight> + </extInfo> + </items> + <visible>true</visible> + <enabled>true</enabled> + <userVisible> + <common>true</common> + </userVisible> + <title> + <key>ru</key> + <value>Группа прогресс бар выгрузка вертикальная</value> + + + ru + Группа прогресс бар выгрузка вертикальная + + + ГруппаПрогрессБарВыгрузкаВертикальнаяРасширеннаяПодсказка + 2523 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + true + true + Auto + Auto + +
        + true + true + + true + + + <key>ru</key> + <value>Группа прогресс бар выгрузка</value> + + + ru + Группа прогресс бар выгрузка + + + ГруппаПрогрессБарВыгрузкаРасширеннаяПодсказка + 2518 + Label + true + true + + Left + + + UsualGroup + + Auto + true + true + Auto + Auto + + true true @@ -11426,6 +11608,188 @@ Auto + + ГруппаПрогрессБарВыгрузкаВнешнееСоединение + 2530 + + Декорация2 + 2532 + true + true + + true + + + Декорация2РасширеннаяПодсказка + 2534 + Label + true + true + + Left + + + + Декорация2КонтекстноеМеню + 2533 + true + + Label + 6 + true + 4 + true + + Left + + + + ГруппаПрогрессБарВыгрузкаВертикальная1 + 2535 + + ПроцентВыполнения1 + 2537 + true + true + + true + + + ПроцентВыполнения + + None + + ПроцентВыполнения1РасширеннаяПодсказка + 2539 + Label + true + true + + Left + + + + ПроцентВыполнения1КонтекстноеМеню + 2538 + true + + ProgressBarField + Enter + true + Left + true + + 32 + true + 1 + true + true + 100 + true + + + + ДопИнформацияВыполнение1 + 2540 + true + true + + true + + + ДопИнформацияВыполнение + + None + + ДопИнформацияВыполнение1РасширеннаяПодсказка + 2542 + Label + true + true + + Left + + + + ДопИнформацияВыполнение1КонтекстноеМеню + 2541 + true + + LabelField + Enter + true + Left + true + + true + true + + + true + true + + true + + + <key>ru</key> + <value>Группа прогресс бар выгрузка вертикальная</value> + + + ru + Группа прогресс бар выгрузка вертикальная + + + ГруппаПрогрессБарВыгрузкаВертикальная1РасширеннаяПодсказка + 2536 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + true + true + Auto + Auto + + + true + true + + true + + + <key>ru</key> + <value>Группа прогресс бар выгрузка</value> + + + ru + Группа прогресс бар выгрузка + + + ГруппаПрогрессБарВыгрузкаВнешнееСоединениеРасширеннаяПодсказка + 2531 + Label + true + true + + Left + + + UsualGroup + + Auto + true + true + Auto + Auto + + Декорация104 897 @@ -14612,7 +14976,6 @@ Vertical true true - UseIfNecessary auto true @@ -15457,10 +15820,7 @@ ИдентификаторДлительнойОперации 41 - - String - - + true @@ -16427,6 +16787,47 @@ true + + ДопИнформацияВыполнение + + <key>ru</key> + <value>Доп информация выполнение</value> + + 77 + + String + + 150 + + + + true + + + true + + + + ПроцентВыполнения + + <key>ru</key> + <value>Процент выполнения</value> + + 78 + + Number + + 10 + true + + + + true + + + true + + КомандаДалее @@ -16442,7 +16843,7 @@ <name>КомандаДалее</name> </handler> </action> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <formCommands> @@ -16460,7 +16861,7 @@ <name>КомандаНазад</name> </handler> </action> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <formCommands> @@ -16478,7 +16879,7 @@ <name>КомандаОтмена</name> </handler> </action> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <formCommands> @@ -16501,7 +16902,7 @@ </handler> </action> <representation>TextPicture</representation> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <formCommands> @@ -16523,7 +16924,7 @@ </handler> </action> <representation>TextPicture</representation> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <formCommands> @@ -16549,7 +16950,7 @@ </handler> </action> <representation>TextPicture</representation> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <formCommands> @@ -16572,7 +16973,7 @@ </handler> </action> <representation>TextPicture</representation> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <formCommands> @@ -16598,7 +16999,7 @@ </handler> </action> <representation>TextPicture</representation> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <formCommands> @@ -16624,7 +17025,7 @@ </handler> </action> <representation>TextPicture</representation> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <formCommands> @@ -16650,7 +17051,7 @@ </handler> </action> <representation>TextPicture</representation> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <formCommands> @@ -16676,7 +17077,7 @@ </handler> </action> <representation>TextPicture</representation> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <formCommands> @@ -16695,7 +17096,7 @@ </handler> </action> <representation>TextPicture</representation> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <formCommands> @@ -16714,7 +17115,7 @@ </handler> </action> <representation>TextPicture</representation> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <formCommands> @@ -16736,7 +17137,7 @@ </handler> </action> <representation>TextPicture</representation> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <formCommands> @@ -16759,7 +17160,7 @@ </handler> </action> <representation>TextPicture</representation> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <formCommands> @@ -16785,7 +17186,7 @@ </handler> </action> <representation>TextPicture</representation> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <formCommands> @@ -16807,7 +17208,7 @@ <name>КомандаГотово</name> </handler> </action> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <formCommands> @@ -16830,7 +17231,7 @@ </handler> </action> <representation>TextPicture</representation> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <formCommands> @@ -16856,7 +17257,7 @@ </handler> </action> <representation>TextPicture</representation> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <formCommands> @@ -16874,7 +17275,7 @@ <name>ИзменитьПользовательскоеРасписание</name> </handler> </action> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <formCommands> @@ -16895,7 +17296,7 @@ <name>ПодробноеОписание</name> </handler> </action> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <formCommands> @@ -16917,7 +17318,7 @@ <name>ПараметрыДоступаВИнтернет</name> </handler> </action> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <commandInterface> diff --git a/SSL/src/DataProcessors/ПомощникСозданияОбменаДанными/Forms/Форма/Module.bsl b/SSL/src/DataProcessors/ПомощникСозданияОбменаДанными/Forms/Форма/Module.bsl index 0a8e4cbe6..85e09eb17 100644 --- a/SSL/src/DataProcessors/ПомощникСозданияОбменаДанными/Forms/Форма/Module.bsl +++ b/SSL/src/DataProcessors/ПомощникСозданияОбменаДанными/Forms/Форма/Module.bsl @@ -104,10 +104,7 @@ Если Не Объект.ПрефиксИнформационнойБазыИсточникаУстановлен И Не НастройкаОбменаССервисом Тогда - - Объект.ПрефиксИнформационнойБазыИсточника = ОбменДаннымиПереопределяемый.ПрефиксИнформационнойБазыПоУмолчанию(); ОбменДаннымиПереопределяемый.ПриОпределенииПрефиксаИнформационнойБазыПоУмолчанию(Объект.ПрефиксИнформационнойБазыИсточника); - КонецЕсли; ВариантРаботыМастера = "НастроитьНовыйОбменДанными"; @@ -276,7 +273,7 @@ Элементы.ПараметрыДоступаВИнтернет2.Видимость = Ложь; КонецЕсли; - Объект.НаименованиеВторойБазы = НаименованиеВторойБазы(ЭтотУзел); + Объект.НаименованиеВторойБазы = НаименованиеВторойБазы(); КонецПроцедуры @@ -737,7 +734,7 @@ ПолучитьФайл(АдресВременногоХранилища, ИмяФайлаНастроекДляПриемника, Истина); - Объект.ИмяФайлаНастроекОбменаДанными = ИмяФайлаНастроекДляПриемника; + Объект.ИмяФайлаНастроекСинхронизацииДанных = ИмяФайлаНастроекДляПриемника; #Иначе @@ -780,10 +777,10 @@ Возврат; КонецЕсли; Если ВыбранныеФайлы.Количество() = 1 Тогда - Объект.ИмяФайлаНастроекОбменаДанными = ВыбранныеФайлы[0]; + Объект.ИмяФайлаНастроекСинхронизацииДанных = ВыбранныеФайлы[0]; ДвоичныеДанные = ПолучитьИзВременногоХранилища(ДополнительныеПараметры.АдресВременногоХранилища); УдалитьИзВременногоХранилища(ДополнительныеПараметры.АдресВременногоХранилища); - ДвоичныеДанные.Записать(Объект.ИмяФайлаНастроекОбменаДанными); + ДвоичныеДанные.Записать(Объект.ИмяФайлаНастроекСинхронизацииДанных); КонецЕсли; КонецПроцедуры @@ -884,7 +881,12 @@ ИначеЕсли РежимРаботыМастера = "ОбменЧерезОбычныеКаналыСвязи" Тогда Если ВариантРаботыМастера = "НастроитьНовыйОбменДанными" Тогда ЗавершениеПервогоЭтапаНастройкиОбменаЧерезОбычныеКаналыСвязи(Отказ); - + Если ВыполнитьОбменДаннымиСейчас + И ВыполнитьСозданиеНачальногоОбразаСейчас + И ВыполнитьИнтерактивныйОбменДаннымиСейчас Тогда + // Надо дождаться окончания выгрузки и только потом закрывать форму. + Возврат; + КонецЕсли; ИначеЕсли ВариантРаботыМастера = "ПродолжитьНастройкуОбменаДанными" Тогда ЗавершениеВторогоЭтапаНастройкиОбменаЧерезОбычныеКаналыСвязи(Отказ, ЗакрыватьФорму); @@ -1192,7 +1194,7 @@ КонецЕсли; ИначеЕсли ТипЗнч(Элемент) = Тип("КнопкаФормы") - И Найти(Элемент.ИмяКоманды, ИмяКоманды) > 0 Тогда + И СтрНайти(Элемент.ИмяКоманды, ИмяКоманды) > 0 Тогда Возврат Элемент; @@ -1322,7 +1324,7 @@ КонецПроцедуры &НаСервере -Функция НаименованиеВторойБазы(ЭтотУзел) +Функция НаименованиеВторойБазы() НаименованиеВторойБазы = ""; @@ -1332,14 +1334,13 @@ | ПланОбмена.%ИмяПланаОбмена% КАК СозданныеОбмены |ГДЕ | СозданныеОбмены.Наименование = &Наименование - | И СозданныеОбмены.Ссылка <> &ЭтотУзел"; + | И НЕ СозданныеОбмены.ЭтотУзел"; ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "%ИмяПланаОбмена%", Объект.ИмяПланаОбмена); Запрос = Новый Запрос; Запрос.Текст = ТекстЗапроса; Запрос.УстановитьПараметр("Наименование", СокрЛП(СинонимПланаОбмена)); - Запрос.УстановитьПараметр("ЭтотУзел", ЭтотУзел.Ссылка); РезультатЗапроса = Запрос.Выполнить().Выгрузить(); @@ -1505,9 +1506,12 @@ Элементы.ПрефиксИнформационнойБазыИсточникаОбменССервисом.ТолькоПросмотр = Объект.ПрефиксИнформационнойБазыИсточникаУстановлен; Элементы.ПрефиксИнформационнойБазыПриемникаОбменССервисом.ТолькоПросмотр = Истина; - Элементы.СтраницыОтображенияФинальногоДействия.ТекущаяСтраница = ?(Объект.ЭтоНастройкаРаспределеннойИнформационнойБазы, - Элементы.СтраницаВыполнитьСозданиеНачальногоОбразаПодчиненногоУзла, - Элементы.СтраницаВыполнитьВыгрузкуДанныхДляСопоставления); + Если Объект.ЭтоНастройкаРаспределеннойИнформационнойБазы Тогда + Элементы.СтраницыОтображенияФинальногоДействия.ТекущаяСтраница = Элементы.СтраницаВыполнитьСозданиеНачальногоОбразаПодчиненногоУзла; + Иначе + Элементы.СтраницыОтображенияФинальногоДействия.ТекущаяСтраница = Элементы.СтраницаВыполнитьВыгрузкуДанныхДляСопоставления; + Элементы.ГруппаПрогрессБарВыгрузка.Видимость = Ложь; + КонецЕсли; // Если Объект.ЭтоНастройкаРаспределеннойИнформационнойБазы Тогда @@ -1535,8 +1539,7 @@ Результат = Строка(Объект.ВидТранспортаСообщенийОбмена) + НСтр("ru = ', параметры:'") + Символы.ПС - + ПолучитьОписаниеНастроекТранспортаОбмена() - ; + + ПолучитьОписаниеНастроекТранспортаОбмена(); КонецЕсли; Возврат Результат; @@ -1628,15 +1631,6 @@ КонецПроцедуры -&НаСервереБезКонтекста -Процедура ИнициализацияОбменаДаннымиНаКлиенте(Отказ, УзелИнформационнойБазы, ВидТранспортаСообщенийОбмена) - - // Выполняем выгрузку данных - ОбменДаннымиСервер.ВыполнитьОбменДаннымиДляУзлаИнформационнойБазы(Отказ, - УзелИнформационнойБазы, Ложь, Истина, ВидТранспортаСообщенийОбмена); - -КонецПроцедуры - &НаСервере Функция ПолучитьОписаниеНастроекТранспортаОбмена() @@ -1685,8 +1679,7 @@ Если COMАутентификацияОперационнойСистемы Тогда - Если Элемент.Ключ = "COMИмяПользователя" - ИЛИ Элемент.Ключ = "COMПарольПользователя" Тогда + Если Элемент.Ключ = "COMИмяПользователя" Тогда Продолжить; КонецЕсли; @@ -1694,7 +1687,7 @@ КонецЕсли; - Если Найти(ВРег(Элемент.Значение), "ПАРОЛЬ") <> 0 Тогда + Если СтрНайти(ВРег(Элемент.Значение), "ПАРОЛЬ") <> 0 Тогда Продолжить; // Значения паролей не выводим. @@ -2320,11 +2313,11 @@ ОчиститьСообщения(); Если Не Объект.ЭтоНастройкаРаспределеннойИнформационнойБазы - И ПустаяСтрока(Объект.ИмяФайлаНастроекОбменаДанными) Тогда + И ПустаяСтрока(Объект.ИмяФайлаНастроекСинхронизацииДанных) Тогда НСтрока = НСтр("ru = 'Сохраните файл с настройками для другой программы'"); - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(НСтрока,,"Объект.ИмяФайлаНастроекОбменаДанными",, Отказ); + ОбщегоНазначенияКлиентСервер.СообщитьПользователю(НСтрока,,"Объект.ИмяФайлаНастроекСинхронизацииДанных",, Отказ); Возврат; КонецЕсли; @@ -2346,15 +2339,25 @@ Если ВыполнитьОбменДаннымиСейчас Тогда Состояние(НСтр("ru = 'Выполняется отправка данных...'")); - ИнициализацияОбменаДаннымиНаКлиенте(Отказ, Объект.УзелИнформационнойБазы, Объект.ВидТранспортаСообщенийОбмена); - Состояние(НСтр("ru = 'Отправка данных завершена'")); + // Видимость прогресс-бара + Если РежимРаботыМастера <> "ОбменЧерезВебСервис" + ИЛИ РежимРаботыМастера = "ОбменЧерезВнешнееСоединение" + ИЛИ РежимРаботыМастера = "ОбменЧерезОбычныеКаналыСвязи" Тогда + Элементы.ГруппаПрогрессБарВыгрузка.Видимость = Истина; + КонецЕсли; + + ЭтаФорма.ТолькоПросмотр = Истина; + Элементы.КомандаГотово6.Доступность = Ложь; + Элементы.КомандаГотово7.Доступность = Ложь; + + ЗапуститьВыгрузкуДанных(Отказ, Объект.УзелИнформационнойБазы, Объект.ВидТранспортаСообщенийОбмена); Если Отказ Тогда ПоказатьПредупреждение(, НСтр("ru = 'Во время отправки данных возникли ошибки(см. журнал регистрации).'")); КонецЕсли; - + ПодключитьОбработчикОжидания("ФоновоеЗаданиеПроверитьНаКлиенте", 2, Истина); КонецЕсли; КонецЕсли; @@ -2556,8 +2559,7 @@ НСтр("ru = 'При выполнении обработчика ПриПодключенииККорреспонденту произошла ошибка:%1%2'"), Символы.ПС, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())), - СобытиеЖурналаРегистрацииСозданиеОбменаДанными - ); + СобытиеЖурналаРегистрацииСозданиеОбменаДанными); Возврат; КонецПопытки; @@ -3068,9 +3070,9 @@ Отказ = Истина; // Пытаемся передать файл на сервер с запросом установки расширения, без диалога. - Если ПустаяСтрока(Объект.ИмяФайлаНастроекОбменаДаннымиДляЗагрузки) Тогда + Если ПустаяСтрока(Объект.ИмяФайлаНастроекСинхронизацииДанныхДляЗагрузки) Тогда ТекстОшибки = НСтр("ru = 'Выберите файл с настройками синхронизации данных'"); - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстОшибки, , "Объект.ИмяФайлаНастроекОбменаДаннымиДляЗагрузки"); + ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстОшибки, , "Объект.ИмяФайлаНастроекСинхронизацииДанныхДляЗагрузки"); Возврат Неопределено; КонецЕсли; @@ -3078,7 +3080,7 @@ ТекстПредупреждения = НСтр("ru = 'Для передачи файла настроек синхронизации данных необходимо установить расширение для веб-клиента 1С:Предприятие.'"); ИменаФайлов = Новый Массив; - ИменаФайлов.Добавить(Объект.ИмяФайлаНастроекОбменаДаннымиДляЗагрузки); + ИменаФайлов.Добавить(Объект.ИмяФайлаНастроекСинхронизацииДанныхДляЗагрузки); ОбменДаннымиКлиент.ПередатьФайлыНаСервер(Оповещение, ИменаФайлов, УникальныйИдентификатор, ТекстПредупреждения); КонецФункции @@ -3105,7 +3107,7 @@ АдресПомещенногоФайла = РезультатПомещенияФайлов.Хранение; ТекстОшибки = РезультатПомещенияФайлов.ОписаниеОшибки; - Объект.ИмяФайлаНастроекОбменаДаннымиДляЗагрузки = РезультатПомещенияФайлов.Имя; + Объект.ИмяФайлаНастроекСинхронизацииДанныхДляЗагрузки = РезультатПомещенияФайлов.Имя; ФайлНастроекОбменаДаннымиУспешноЗагружен = Ложь; @@ -3126,7 +3128,7 @@ КонецЕсли; Если Не ПустаяСтрока(ТекстОшибки) Тогда - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстОшибки, , "Объект.ИмяФайлаНастроекОбменаДаннымиДляЗагрузки"); + ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстОшибки, , "Объект.ИмяФайлаНастроекСинхронизацииДанныхДляЗагрузки"); КонецЕсли; ОбновитьОтображениеДанных(); @@ -3595,17 +3597,23 @@ ДатаНачалаОперации = ТекущаяДатаСеанса(); // Запускаем выполнение обмена. - ОбменДаннымиСервер.ВыполнитьОбменДаннымиДляУзлаИнформационнойБазы( - Отказ, - УзелИнформационнойБазы, - Ложь, - Истина, - Перечисления.ВидыТранспортаСообщенийОбмена.WS, - ДлительнаяОперация, - ИдентификаторОперации, - ИдентификаторФайла, - Истина, - Пароль); + ПараметрыОбмена = ОбменДаннымиСервер.ПараметрыОбмена(); + ПараметрыОбмена.ВидТранспортаСообщенийОбмена = Перечисления.ВидыТранспортаСообщенийОбмена.WS; + ПараметрыОбмена.ВыполнятьЗагрузку = Ложь; + ПараметрыОбмена.ВыполнятьВыгрузку = Истина; + + ПараметрыОбмена.ДлительнаяОперацияРазрешена = Истина; + ПараметрыОбмена.ДлительнаяОперация = ДлительнаяОперация; + ПараметрыОбмена.ИдентификаторОперации = ИдентификаторОперации; + ПараметрыОбмена.ИдентификаторФайла = ИдентификаторФайла; + ПараметрыОбмена.ПараметрыАутентификации = Пароль; + + ОбменДаннымиСервер.ВыполнитьОбменДаннымиДляУзлаИнформационнойБазы(УзелИнформационнойБазы, ПараметрыОбмена, Отказ); + + ДлительнаяОперация = ПараметрыОбмена.ДлительнаяОперация; + ИдентификаторОперации = ПараметрыОбмена.ИдентификаторОперации; + ИдентификаторФайла = ПараметрыОбмена.ИдентификаторФайла; + Пароль = ПараметрыОбмена.ПараметрыАутентификации; КонецПроцедуры @@ -3709,17 +3717,23 @@ ДатаНачалаОперации = ТекущаяДатаСеанса(); // Запускаем выполнение обмена. - ОбменДаннымиСервер.ВыполнитьОбменДаннымиДляУзлаИнформационнойБазы( - Отказ, - УзелИнформационнойБазы, - Истина, - Ложь, - Перечисления.ВидыТранспортаСообщенийОбмена.WS, - ДлительнаяОперация, - ИдентификаторОперации, - ИдентификаторФайла, - Истина, - Пароль); + ПараметрыОбмена = ОбменДаннымиСервер.ПараметрыОбмена(); + ПараметрыОбмена.ВидТранспортаСообщенийОбмена = Перечисления.ВидыТранспортаСообщенийОбмена.WS; + ПараметрыОбмена.ВыполнятьЗагрузку = Истина; + ПараметрыОбмена.ВыполнятьВыгрузку = Ложь; + + ПараметрыОбмена.ДлительнаяОперацияРазрешена = Истина; + ПараметрыОбмена.ДлительнаяОперация = ДлительнаяОперация; + ПараметрыОбмена.ИдентификаторОперации = ИдентификаторОперации; + ПараметрыОбмена.ИдентификаторФайла = ИдентификаторФайла; + ПараметрыОбмена.ПараметрыАутентификации = Пароль; + + ОбменДаннымиСервер.ВыполнитьОбменДаннымиДляУзлаИнформационнойБазы(УзелИнформационнойБазы, ПараметрыОбмена, Отказ); + + ДлительнаяОперация = ПараметрыОбмена.ДлительнаяОперация; + ИдентификаторОперации = ПараметрыОбмена.ИдентификаторОперации; + ИдентификаторФайла = ПараметрыОбмена.ИдентификаторФайла; + Пароль = ПараметрыОбмена.ПараметрыАутентификации; КонецПроцедуры @@ -3802,17 +3816,23 @@ ДатаНачалаОперации = ТекущаяДатаСеанса(); // Запускаем выполнение обмена. - ОбменДаннымиСервер.ВыполнитьОбменДаннымиДляУзлаИнформационнойБазы( - Отказ, - УзелИнформационнойБазы, - Ложь, - Истина, - Перечисления.ВидыТранспортаСообщенийОбмена.WS, - ДлительнаяОперация, - ИдентификаторОперации, - ИдентификаторФайла, - Истина, - Пароль); + ПараметрыОбмена = ОбменДаннымиСервер.ПараметрыОбмена(); + ПараметрыОбмена.ВидТранспортаСообщенийОбмена = Перечисления.ВидыТранспортаСообщенийОбмена.WS; + ПараметрыОбмена.ВыполнятьЗагрузку = Ложь; + ПараметрыОбмена.ВыполнятьВыгрузку = Истина; + + ПараметрыОбмена.ДлительнаяОперацияРазрешена = Истина; + ПараметрыОбмена.ДлительнаяОперация = ДлительнаяОперация; + ПараметрыОбмена.ИдентификаторОперации = ИдентификаторОперации; + ПараметрыОбмена.ИдентификаторФайла = ИдентификаторФайла; + ПараметрыОбмена.ПараметрыАутентификации = Пароль; + + ОбменДаннымиСервер.ВыполнитьОбменДаннымиДляУзлаИнформационнойБазы(УзелИнформационнойБазы, ПараметрыОбмена, Отказ); + + ДлительнаяОперация = ПараметрыОбмена.ДлительнаяОперация; + ИдентификаторОперации = ПараметрыОбмена.ИдентификаторОперации; + ИдентификаторФайла = ПараметрыОбмена.ИдентификаторФайла; + Пароль = ПараметрыОбмена.ПараметрыАутентификации; КонецПроцедуры @@ -4275,14 +4295,14 @@ Если Не Отказ Тогда - Объект.ИмяФайлаНастроекОбменаДанными = ОбщегоНазначенияКлиентСервер.ПолучитьПолноеИмяФайла(Объект.FILEКаталогОбменаИнформацией, ИмяФайлаНастроекДляПриемника); + Объект.ИмяФайлаНастроекСинхронизацииДанных = ОбщегоНазначенияКлиентСервер.ПолучитьПолноеИмяФайла(Объект.FILEКаталогОбменаИнформацией, ИмяФайлаНастроекДляПриемника); ДвоичныеДанные = ПолучитьИзВременногоХранилища(АдресВременногоХранилища); УдалитьИзВременногоХранилища(АдресВременногоХранилища); // получаем файл - ДвоичныеДанные.Записать(Объект.ИмяФайлаНастроекОбменаДанными); + ДвоичныеДанные.Записать(Объект.ИмяФайлаНастроекСинхронизацииДанных); КонецЕсли; @@ -4442,6 +4462,82 @@ КонецПроцедуры +&НаСервере +Процедура ЗапуститьВыгрузкуДанных(Отказ, УзелИнформационнойБазы, ВидТранспортаСообщенийОбмена) + ПараметрыЗадания = Новый Структура; + ПараметрыЗадания.Вставить("Отказ", Отказ); + ПараметрыЗадания.Вставить("УзелИнформационнойБазы", УзелИнформационнойБазы); + ПараметрыЗадания.Вставить("ВыполнятьЗагрузку", Ложь); + ПараметрыЗадания.Вставить("ВыполнятьВыгрузку", Истина); + ПараметрыЗадания.Вставить("ВидТранспортаСообщенийОбмена", ВидТранспортаСообщенийОбмена); + + ДлительнаяОперация = Ложь; + ДлительнаяОперацияЗавершена = Ложь; + ИдентификаторДлительнойОперации = ""; + + Результат = ДлительныеОперации.ЗапуститьВыполнениеВФоне( + УникальныйИдентификатор, + "Обработки.ВыполнениеОбменаДанными.ВыполнитьЗапускОбменаДанными", + ПараметрыЗадания, + НСтр("ru = 'Выгрузка данных'")); + + Если Не Результат.ЗаданиеВыполнено Тогда + ДлительнаяОперация = Истина; + ИдентификаторДлительнойОперации = Результат.ИдентификаторЗадания; + КонецЕсли; + +КонецПроцедуры + + +&НаСервере +Процедура ФоновоеЗаданиеПрочитатьПромежуточныйРезультат() + Прогресс = ДлительныеОперации.ПрочитатьПрогресс(ИдентификаторДлительнойОперации); + Если Прогресс <> Неопределено Тогда + ПроцентВыполнения = Прогресс.Процент; + ДопИнформацияВыполнение = Прогресс.Текст; + КонецЕсли; +КонецПроцедуры + +&НаСервере +Функция ФоновоеЗаданиеПолучитьРезультат() + Результат = Новый Структура; + Результат.Вставить("ФоновоеЗаданиеВыполнено", Ложь); + + Состояние = ОбменДаннымиВызовСервера.СостояниеЗадания(ИдентификаторДлительнойОперации); + + Если Состояние = "Активно" Тогда + ФоновоеЗаданиеПрочитатьПромежуточныйРезультат(); + ИначеЕсли Состояние = "Завершено" Тогда + Результат.ФоновоеЗаданиеВыполнено = Истина; + КонецЕсли; + + Возврат Результат; +КонецФункции + +&НаКлиенте +Процедура ФоновоеЗаданиеПроверитьНаКлиенте() + Если ДлительнаяОперация Тогда + Результат = ФоновоеЗаданиеПолучитьРезультат(); + КонецЕсли; + Если НЕ ДлительнаяОперация ИЛИ Результат.ФоновоеЗаданиеВыполнено Тогда + ПроцентВыполнения = 100; + ДопИнформацияВыполнение = ""; + ДлительнаяОперация = Ложь; + Состояние(НСтр("ru = 'Отправка данных завершена'")); + ПодключитьОбработчикОжидания("ЗакрытьФормуОтложенно", 1, Истина); + Иначе + ПодключитьОбработчикОжидания("ФоновоеЗаданиеПроверитьНаКлиенте", 2, Истина); + КонецЕсли; +КонецПроцедуры + +&НаКлиенте +Процедура ЗакрытьФормуОтложенно() + ОбновитьИнтерфейс(); + + ЗакрытьФормуБезусловно = Истина; + Закрыть(); +КонецПроцедуры + //////////////////////////////////////////////////////////////////////////////// // Переопределяемая часть - Инициализация переходов помощника. diff --git a/SSL/src/DataProcessors/ПомощникСозданияОбменаДанными/Help/ru.html b/SSL/src/DataProcessors/ПомощникСозданияОбменаДанными/Help/ru.html index 36a68fb2a..1d06baca3 100644 --- a/SSL/src/DataProcessors/ПомощникСозданияОбменаДанными/Help/ru.html +++ b/SSL/src/DataProcessors/ПомощникСозданияОбменаДанными/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 9.00.8112.16421"></meta></head><body> -<p>Предназначен для настройки <a href="CommonForm.ОбменыДанными/Help">синхронизации данных</a> между двумя программами. Возможна настройка синхронизации данных по правилам обмена, без использования правил обмена и организация совместной работы в распределенной информационной базе (РИБ).</p> +<p>Предназначен для настройки <a href="CommonForm.СинхронизацияДанных/Help">синхронизации данных</a> между двумя программами. Возможна настройка синхронизации данных по правилам обмена, без использования правил обмена и организация совместной работы в распределенной информационной базе (РИБ).</p> <h3>Этапы настройки параметров синхронизации данных</h3> <ul><li>Настройка синхронизации данных при выборе варианта подключения через другие каналы связи выполняется в два этапа. Первый шаг настройки синхронизации данных выполняется в текущей программе, затем необходимо перейти в другую программу и закончить в ней настройку синхронизации данных. Для передачи информации между этапами настройки синхронизации данных используется временный файл с настройками. При настройке синхронизации данных через прямое соединение с базой или через веб-сервисы вся настройка для обеих программ выполняется в текущей программе. </li><li>Во время настройки определяются следующие параметры: diff --git a/SSL/src/DataProcessors/ПомощникСозданияОбменаДанными/ManagerModule.bsl b/SSL/src/DataProcessors/ПомощникСозданияОбменаДанными/ManagerModule.bsl index b19ef776c..9425831d4 100644 --- a/SSL/src/DataProcessors/ПомощникСозданияОбменаДанными/ManagerModule.bsl +++ b/SSL/src/DataProcessors/ПомощникСозданияОбменаДанными/ManagerModule.bsl @@ -6,10 +6,13 @@ // Процедура ВыполнитьЗагрузкуСправочников(Параметры, АдресВременногоХранилища) Экспорт - ОбменДаннымиСервер.ВыполнитьОбменДаннымиДляУзлаИнформационнойБазыЧерезФайлИлиСтроку( - Параметры.УзелИнформационнойБазы, - Параметры.ИмяФайлаСообщенияОбмена, - Перечисления.ДействияПриОбмене.ЗагрузкаДанных); + ПараметрыОбменаДанными = ОбменДаннымиСервер.ПараметрыОбменаДаннымиЧерезФайлИлиСтроку(); + + ПараметрыОбменаДанными.УзелИнформационнойБазы = Параметры.УзелИнформационнойБазы; + ПараметрыОбменаДанными.ПолноеИмяФайлаСообщенияОбмена = Параметры.ИмяФайлаСообщенияОбмена; + ПараметрыОбменаДанными.ДействиеПриОбмене = Перечисления.ДействияПриОбмене.ЗагрузкаДанных; + + ОбменДаннымиСервер.ВыполнитьОбменДаннымиДляУзлаИнформационнойБазыЧерезФайлИлиСтроку(ПараметрыОбменаДанными); КонецПроцедуры diff --git a/SSL/src/DataProcessors/ПомощникСозданияОбменаДанными/ObjectModule.bsl b/SSL/src/DataProcessors/ПомощникСозданияОбменаДанными/ObjectModule.bsl index e5177449c..772ec20a5 100644 --- a/SSL/src/DataProcessors/ПомощникСозданияОбменаДанными/ObjectModule.bsl +++ b/SSL/src/DataProcessors/ПомощникСозданияОбменаДанными/ObjectModule.bsl @@ -1,7 +1,11 @@ #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда +#Область ОписаниеПеременных + Перем ПолеСтрокаСообщенияОбОшибке; // Строка - переменная содержит строку с сообщением об ошибке. +#КонецОбласти + #Область СлужебныеПроцедурыИФункции //////////////////////////////////////////////////////////////////////////////// @@ -391,8 +395,7 @@ НастройкаОтборовНаУзлеБазыКорреспондента, ЗначенияПоУмолчаниюНаУзлеБазыКорреспондента, ПрефиксИнформационнойБазыУстановлен, - ПрефиксИнформационнойБазы - ) Экспорт + ПрефиксИнформационнойБазы) Экспорт ОбменДаннымиСервер.ПроверитьИспользованиеОбменаДанными(); @@ -453,8 +456,7 @@ НастройкаОтборовНаУзлеБазыКорреспондента, ЗначенияПоУмолчаниюНаУзлеБазыКорреспондента, ПрефиксИнформационнойБазыУстановлен, - ПрефиксИнформационнойБазы - ) Экспорт + ПрефиксИнформационнойБазы) Экспорт НастройкаОтборовНаУзле = ПолучитьЗначенияНастройкиОтборов(ОбщегоНазначения.ЗначениеИзСтрокиXML(НастройкаОтборовНаУзлеБазыКорреспондента)); ЗначенияПоУмолчаниюНаУзле = ПолучитьЗначенияНастройкиОтборов(ОбщегоНазначения.ЗначениеИзСтрокиXML(ЗначенияПоУмолчаниюНаУзлеБазыКорреспондента)); @@ -784,9 +786,6 @@ Если ЭтоНастройкаРаспределеннойИнформационнойБазы И ВариантРаботыМастера = "ПродолжитьНастройкуОбменаДанными" Тогда - // Правила обмена не мигрируют в РИБ, поэтому выполняем загрузку правил. - ОбменДаннымиСервер.ВыполнитьОбновлениеПравилДляОбменаДанными(); - Константы.НастройкаПодчиненногоУзлаРИБЗавершена.Установить(Истина); Константы.ИспользоватьСинхронизациюДанных.Установить(Истина); Константы.НеИспользоватьРазделениеПоОбластямДанных.Установить(Истина); @@ -836,7 +835,7 @@ КонецЕсли; // ПОЛУЧАЕМ УЗЕЛ ДЛЯ ОБМЕНА - + СоздаватьНовыйУзел = Ложь; Если ЭтоНастройкаРаспределеннойИнформационнойБазы И ВариантРаботыМастера = "ПродолжитьНастройкуОбменаДанными" Тогда @@ -854,8 +853,8 @@ // СОЗДАЕМ/ОБНОВЛЯЕМ УЗЕЛ НовыйУзел = МенеджерПланаОбмена.НайтиПоКоду(КодНовогоУзла); - - Если НовыйУзел.Пустая() Тогда + СоздаватьНовыйУзел = НовыйУзел.Пустая(); + Если СоздаватьНовыйУзел Тогда НовыйУзел = МенеджерПланаОбмена.СоздатьУзел(); НовыйУзел.Код = КодНовогоУзла; Иначе @@ -897,6 +896,11 @@ УзелИнформационнойБазы = НовыйУзел.Ссылка; + Если СоздаватьНовыйУзел + И Не ОбщегоНазначенияПовтИсп.РазделениеВключено() Тогда + ОбменДаннымиСервер.ВыполнитьОбновлениеПравилДляОбменаДанными(); + КонецЕсли; + КонецПроцедуры Процедура ОбновитьНастройкиТранспортаСообщенийОбмена() diff --git a/SSL/src/DataProcessors/ПомощникСозданияОбменаДанными/ПомощникСозданияОбменаДанными.mdo b/SSL/src/DataProcessors/ПомощникСозданияОбменаДанными/ПомощникСозданияОбменаДанными.mdo index 42b66c8f2..6ef85544d 100644 --- a/SSL/src/DataProcessors/ПомощникСозданияОбменаДанными/ПомощникСозданияОбменаДанными.mdo +++ b/SSL/src/DataProcessors/ПомощникСозданияОбменаДанными/ПомощникСозданияОбменаДанными.mdo @@ -459,7 +459,7 @@ <maxValue xsi:type="core:UndefinedValue"/> </attributes> <attributes uuid="790735cf-f6e2-4b0d-bb16-c5b9ea95efae"> - <name>ИмяФайлаНастроекОбменаДанными</name> + <name>ИмяФайлаНастроекСинхронизацииДанных</name> <synonym> <key>ru</key> <value>Имя файла настроек синхронизации данных</value> @@ -472,7 +472,7 @@ <maxValue xsi:type="core:UndefinedValue"/> </attributes> <attributes uuid="5d726fa3-bde0-4d97-a577-415857bbb5c1"> - <name>ИмяФайлаНастроекОбменаДаннымиДляЗагрузки</name> + <name>ИмяФайлаНастроекСинхронизацииДанныхДляЗагрузки</name> <synonym> <key>ru</key> <value>Имя файла настроек синхронизации данных для загрузки</value> diff --git a/SSL/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/Forms/ВыборКонстанты/Form.form b/SSL/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/Forms/ВыборКонстанты/Form.form index e57ca45cd..cf9ef10cb 100644 --- a/SSL/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/Forms/ВыборКонстанты/Form.form +++ b/SSL/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/Forms/ВыборКонстанты/Form.form @@ -581,7 +581,6 @@ <autoFillCheck>true</autoFillCheck> <allowFormCustomize>true</allowFormCustomize> <enabled>true</enabled> - <verticalScroll>UseIfNecessary</verticalScroll> <showTitle>auto</showTitle> <showCloseButton>true</showCloseButton> <attributes> @@ -716,7 +715,7 @@ <name>ВыбратьКонстанту</name> </handler> </action> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <parameters> diff --git a/SSL/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/Forms/ВыборОбъектовОтбором/Form.form b/SSL/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/Forms/ВыборОбъектовОтбором/Form.form index d48ef16f2..952fc5035 100644 --- a/SSL/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/Forms/ВыборОбъектовОтбором/Form.form +++ b/SSL/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/Forms/ВыборОбъектовОтбором/Form.form @@ -918,7 +918,6 @@ <autoFillCheck>true</autoFillCheck> <allowFormCustomize>true</allowFormCustomize> <enabled>true</enabled> - <verticalScroll>UseIfNecessary</verticalScroll> <showTitle>auto</showTitle> <showCloseButton>true</showCloseButton> <attributes> @@ -1009,7 +1008,7 @@ <name>ВыбратьОтобранныеЗначения</name> </handler> </action> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <formCommands> @@ -1031,7 +1030,7 @@ <name>ВыбратьТекущуюСтроку</name> </handler> </action> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <formCommands> @@ -1053,7 +1052,7 @@ <name>ОткрытьТекущийОбъект</name> </handler> </action> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <parameters> diff --git a/SSL/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/Forms/ВыборОбъектовОтбором/Module.bsl b/SSL/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/Forms/ВыборОбъектовОтбором/Module.bsl index be21773f6..c6ec215df 100644 --- a/SSL/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/Forms/ВыборОбъектовОтбором/Module.bsl +++ b/SSL/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/Forms/ВыборОбъектовОтбором/Module.bsl @@ -133,12 +133,12 @@ Данные.Добавить(Элемент); КонецЦикла; КонецЕсли; - - ОповеститьОВыборе(Новый Структура("ИмяТаблицы, ДанныеВыбора, ДействиеВыбора, СтруктураПолей", - Параметры.ИмяТаблицы, - Данные, - Параметры.ДействиеВыбора, - СтруктураДанных)); + СтруктураПараметров = Новый Структура(); + СтруктураПараметров.Вставить("ИмяТаблицы", Параметры.ИмяТаблицы); + СтруктураПараметров.Вставить("ДанныеВыбора", Данные); + СтруктураПараметров.Вставить("ДействиеВыбора", Параметры.ДействиеВыбора); + СтруктураПараметров.Вставить("СтруктураПолей", СтруктураДанных); + ОповеститьОВыборе(СтруктураПараметров); КонецПроцедуры &НаСервере @@ -162,34 +162,21 @@ ТекИмяФормы = ЭтотОбъект().ПолучитьИмяФормы(Значение) + ".ФормаОбъекта"; Иначе // Там структура с именами измерений. - ТекИмяФормы = ""; - ЗаполнитьЗначенияСвойств(КлючФормыДанных, Данные); - ТекПараметры = Новый Массив; - ТекПараметры.Добавить(КлючФормыДанных); - ИмяКлючаЗаписи = СтрЗаменить(Параметры.ИмяТаблицы, ".", "КлючЗаписи."); - Попытка + Если Данные.Свойство("Регистратор") Тогда + Значение = Данные.Регистратор; + Иначе + ЗаполнитьЗначенияСвойств(КлючФормыДанных, Данные); + ТекПараметры = Новый Массив; + ТекПараметры.Добавить(КлючФормыДанных); + ИмяКлючаЗаписи = СтрЗаменить(Параметры.ИмяТаблицы, ".", "КлючЗаписи."); Значение = Новый(ИмяКлючаЗаписи, ТекПараметры); ТекИмяФормы = Параметры.ИмяТаблицы + ".ФормаЗаписи"; - Исключение - // Набор без ключей записи, типа оборотного регистра. - КонецПопытки; - - Если ПустаяСтрока(ТекИмяФормы) Тогда - Если Данные.Свойство("Регистратор") Тогда - Значение = Данные.Регистратор; - Иначе - Для Каждого КлючЗначение Из КлючФормыДанных Цикл - Значение = Данные[КлючЗначение.Ключ]; - Прервать; - КонецЦикла; - КонецЕсли; - ТекИмяФормы = ЭтотОбъект().ПолучитьИмяФормы(Значение) + ".ФормаОбъекта"; КонецЕсли; - КонецЕсли; - - Возврат Новый Структура("ИмяФормы, Ключ", - ТекИмяФормы, - Новый Структура("Ключ", Значение)); + + КонецЕсли; + Результат = Новый Структура("ИмяФормы", ТекИмяФормы); + Результат.Вставить("Ключ", Новый Структура("Ключ", Значение)); + Возврат Результат; КонецФункции &НаСервере diff --git a/SSL/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/Forms/ВыборУзлаПланаОбмена/Form.form b/SSL/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/Forms/ВыборУзлаПланаОбмена/Form.form index c590c95b1..c374ebaae 100644 --- a/SSL/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/Forms/ВыборУзлаПланаОбмена/Form.form +++ b/SSL/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/Forms/ВыборУзлаПланаОбмена/Form.form @@ -534,7 +534,6 @@ <autoFillCheck>true</autoFillCheck> <allowFormCustomize>true</allowFormCustomize> <enabled>true</enabled> - <verticalScroll>UseIfNecessary</verticalScroll> <showTitle>auto</showTitle> <showCloseButton>true</showCloseButton> <attributes> @@ -694,7 +693,7 @@ <name>ВыбратьУзел</name> </handler> </action> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <formCommands> @@ -720,7 +719,7 @@ <name>ИзменитьУзел</name> </handler> </action> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <parameters> diff --git a/SSL/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/Forms/Настройки/Form.form b/SSL/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/Forms/Настройки/Form.form index 01c54e61b..4c752c35a 100644 --- a/SSL/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/Forms/Настройки/Form.form +++ b/SSL/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/Forms/Настройки/Form.form @@ -714,7 +714,6 @@ <group>Vertical</group> <autoFillCheck>true</autoFillCheck> <enabled>true</enabled> - <verticalScroll>UseIfNecessary</verticalScroll> <showTitle>auto</showTitle> <showCloseButton>true</showCloseButton> <attributes> @@ -791,7 +790,7 @@ <name>ПодтвердитьВыбор</name> </handler> </action> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <commandInterface> diff --git a/SSL/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/Forms/Настройки/Module.bsl b/SSL/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/Forms/Настройки/Module.bsl index 4bbe2155b..8bbda047d 100644 --- a/SSL/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/Forms/Настройки/Module.bsl +++ b/SSL/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/Forms/Настройки/Module.bsl @@ -64,30 +64,21 @@ &НаКлиенте Процедура ОбработкаЗапросаПутьНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка) + СтандартнаяОбработка = Ложь; ДополнительныеПараметры = Новый Структура(); - ТекстПредложения = Нстр("ru = 'Для открытия каталога необходимо необходимо установить расширение работы с файлами.'"); - ОписаниеОповещенияОЗакрытии = Новый ОписаниеОповещения("ПослеПроверкиРасширенияРаботыСФайлами", ЭтаФорма, ДополнительныеПараметры); - - ОписаниеОповещенияЗавершение = Новый ОписаниеОповещения("ПоказатьВопросОбУстановкеРасширенияРаботыСФайламиЗавершение", - ЭтотОбъект, ОписаниеОповещенияОЗакрытии); + ОписаниеОповещения = Новый ОписаниеОповещения("ПослеПроверкиРасширенияРаботыСФайлами", ЭтаФорма, ДополнительныеПараметры); #Если Не ВебКлиент Тогда // В тонком и толстом клиентах расширение подключено всегда. - ВыполнитьОбработкуОповещения(ОписаниеОповещенияЗавершение, "ПодключениеНеТребуется"); - Возврат; + ВыполнитьОбработкуОповещения(ОписаниеОповещения, Истина); +#Иначе + ВызватьИсключение(НСтр("ru = 'В WEB-клиенте данная возможность недоступна.'")); #КонецЕсли - ДополнительныеПараметры = Новый Структура; - ДополнительныеПараметры.Вставить("ОписаниеОповещенияЗавершение", ОписаниеОповещенияЗавершение); - ДополнительныеПараметры.Вставить("ТекстПредложения", ТекстПредложения); - ДополнительныеПараметры.Вставить("ВозможноПродолжениеБезУстановки", Истина); - - Оповещение = Новый ОписаниеОповещения("ПоказатьВопросОбУстановкеРасширенияРаботыСФайламиПриУстановкеРасширения", - ЭтотОбъект, ДополнительныеПараметры); - НачатьПодключениеРасширенияРаботыСФайлами(Оповещение); + Возврат; КонецПроцедуры @@ -179,14 +170,13 @@ Если ВариантИспользованияКонсолиЗапросов = 2 Тогда ТекущийОбъект.НастройкаАдресВнешнейОбработкиЗапросов = СокрЛП(ТекущийОбъект.НастройкаАдресВнешнейОбработкиЗапросов); - Если Лев(ТекущийОбъект.НастройкаАдресВнешнейОбработкиЗапросов, 1) = """" - И Прав(ТекущийОбъект.НастройкаАдресВнешнейОбработкиЗапросов, 1) = """" - Тогда + Если СтрНачинаетсяС(ТекущийОбъект.НастройкаАдресВнешнейОбработкиЗапросов, """") + И СтрЗаканчиваетсяНа(ТекущийОбъект.НастройкаАдресВнешнейОбработкиЗапросов, """") Тогда ТекущийОбъект.НастройкаАдресВнешнейОбработкиЗапросов = Сред(ТекущийОбъект.НастройкаАдресВнешнейОбработкиЗапросов, 2, СтрДлина(ТекущийОбъект.НастройкаАдресВнешнейОбработкиЗапросов) - 2); КонецЕсли; - Если НРег(Прав(СокрЛП(ТекущийОбъект.НастройкаАдресВнешнейОбработкиЗапросов), 4)) <> ".epf" Тогда + Если Не СтрЗаканчиваетсяНа(НРег(СокрЛП(ТекущийОбъект.НастройкаАдресВнешнейОбработкиЗапросов)), ".epf") Тогда ТекущийОбъект.НастройкаАдресВнешнейОбработкиЗапросов = СокрЛП(ТекущийОбъект.НастройкаАдресВнешнейОбработкиЗапросов) + ".epf"; КонецЕсли; diff --git a/SSL/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/Forms/НомераСообщенийУзлаПланаОбмена/Form.form b/SSL/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/Forms/НомераСообщенийУзлаПланаОбмена/Form.form index 2512b2eb6..1d277b227 100644 --- a/SSL/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/Forms/НомераСообщенийУзлаПланаОбмена/Form.form +++ b/SSL/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/Forms/НомераСообщенийУзлаПланаОбмена/Form.form @@ -247,7 +247,6 @@ <autoFillCheck>true</autoFillCheck> <allowFormCustomize>true</allowFormCustomize> <enabled>true</enabled> - <verticalScroll>UseIfNecessary</verticalScroll> <showTitle>auto</showTitle> <showCloseButton>true</showCloseButton> <attributes> @@ -381,7 +380,7 @@ <name>ЗаписатьИзмененияУзла</name> </handler> </action> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <parameters> diff --git a/SSL/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/Forms/СообщениеОбОбычномИнтерфейсе/Form.oform b/SSL/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/Forms/СообщениеОбОбычномИнтерфейсе/Form.oform index 47ed67a14..b75c26289 100644 Binary files a/SSL/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/Forms/СообщениеОбОбычномИнтерфейсе/Form.oform and b/SSL/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/Forms/СообщениеОбОбычномИнтерфейсе/Form.oform differ diff --git a/SSL/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/Forms/УзлыРегистрацииОбъекта/Form.form b/SSL/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/Forms/УзлыРегистрацииОбъекта/Form.form index aa5af13c3..11aa5b3e7 100644 --- a/SSL/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/Forms/УзлыРегистрацииОбъекта/Form.form +++ b/SSL/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/Forms/УзлыРегистрацииОбъекта/Form.form @@ -919,7 +919,6 @@ <autoFillCheck>true</autoFillCheck> <allowFormCustomize>true</allowFormCustomize> <enabled>true</enabled> - <verticalScroll>UseIfNecessary</verticalScroll> <showTitle>auto</showTitle> <showCloseButton>true</showCloseButton> <attributes> @@ -1172,7 +1171,7 @@ <name>ИзменитьРегистрацию</name> </handler> </action> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <formCommands> @@ -1197,7 +1196,7 @@ <name>ПометитьВсеУзлы</name> </handler> </action> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <formCommands> @@ -1222,7 +1221,7 @@ <name>СнятьПометкуВсемУзлам</name> </handler> </action> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <formCommands> @@ -1244,7 +1243,7 @@ <name>ИнвертироватьПометкуВсемУзлам</name> </handler> </action> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <formCommands> @@ -1266,7 +1265,7 @@ <name>ОткрытьФормуРедактированияОтУзла</name> </handler> </action> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <formCommands> @@ -1291,7 +1290,7 @@ <name>ПеречитатьДеревоУзлов</name> </handler> </action> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <formCommands> @@ -1316,7 +1315,7 @@ <name>ОткрытьФормуНастроек</name> </handler> </action> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <parameters> diff --git a/SSL/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/Forms/Форма/Form.form b/SSL/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/Forms/Форма/Form.form index 65f9622fb..4074e5653 100644 --- a/SSL/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/Forms/Форма/Form.form +++ b/SSL/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/Forms/Форма/Form.form @@ -4215,7 +4215,6 @@ <autoFillCheck>true</autoFillCheck> <allowFormCustomize>true</allowFormCustomize> <enabled>true</enabled> - <verticalScroll>UseIfNecessary</verticalScroll> <showTitle>auto</showTitle> <showCloseButton>true</showCloseButton> <attributes> @@ -4459,15 +4458,6 @@ <edit> <common>true</common> </edit> - <notDefaultUseAlwaysAttributes xsi:type="form:DataPath"> - <segments>СписокСсылок.ИндексКартинки</segments> - </notDefaultUseAlwaysAttributes> - <notDefaultUseAlwaysAttributes xsi:type="form:DataPath"> - <segments>СписокСсылок.СсылкаПредставление</segments> - </notDefaultUseAlwaysAttributes> - <notDefaultUseAlwaysAttributes xsi:type="form:DataPath"> - <segments>СписокСсылок.Узел</segments> - </notDefaultUseAlwaysAttributes> <notDefaultUseAlwaysAttributes xsi:type="form:DataPath"> <segments>СписокСсылок.НеВыгружалось</segments> </notDefaultUseAlwaysAttributes> @@ -4744,7 +4734,7 @@ <name>ДобавитьРегистрациюСсылки</name> </handler> </action> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <formCommands> @@ -4766,7 +4756,7 @@ <name>УдалитьРегистрациюСсылки</name> </handler> </action> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <formCommands> @@ -4791,7 +4781,7 @@ <name>ОбновитьВсеДанные</name> </handler> </action> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <formCommands> @@ -4813,7 +4803,7 @@ <name>ДобавитьРегистрациюВсехОбъектов</name> </handler> </action> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <formCommands> @@ -4835,7 +4825,7 @@ <name>ДобавитьРегистрациюАвтоОбъектов</name> </handler> </action> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <formCommands> @@ -4857,7 +4847,7 @@ <name>УдалитьРегистрациюВсехОбъектов</name> </handler> </action> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <formCommands> @@ -4879,7 +4869,7 @@ <name>УдалитьРегистрациюАвтоОбъектов</name> </handler> </action> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <formCommands> @@ -4901,7 +4891,7 @@ <name>ДобавитьРегистрациюСсылкиПодбор</name> </handler> </action> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <formCommands> @@ -4923,7 +4913,7 @@ <name>ДобавитьРегистрациюРезультатаЗапроса</name> </handler> </action> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <formCommands> @@ -4945,7 +4935,7 @@ <name>УдалитьРегистрациюРезультатаЗапроса</name> </handler> </action> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <formCommands> @@ -4967,7 +4957,7 @@ <name>ДобавитьРегистрациюКонстанты</name> </handler> </action> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <formCommands> @@ -4989,7 +4979,7 @@ <name>УдалитьРегистрациюКонстанты</name> </handler> </action> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <formCommands> @@ -5012,7 +5002,7 @@ <name>РедактироватьНомераСообщений</name> </handler> </action> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <formCommands> @@ -5034,7 +5024,7 @@ <name>ПоказатьРезультатВыгрузки</name> </handler> </action> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <formCommands> @@ -5056,7 +5046,7 @@ <name>ДобавитьРегистрациюСсылкиОтбор</name> </handler> </action> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <formCommands> @@ -5078,7 +5068,7 @@ <name>УдалитьРегистрациюСсылкиОтбор</name> </handler> </action> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <formCommands> @@ -5100,7 +5090,7 @@ <name>ДобавитьРегистрациюНабораЗаписейОтбор</name> </handler> </action> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <formCommands> @@ -5122,7 +5112,7 @@ <name>УдалитьРегистрациюНабораЗаписейОтбор</name> </handler> </action> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <formCommands> @@ -5144,7 +5134,7 @@ <name>УдалитьРегистрациюНабораЗаписей</name> </handler> </action> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <formCommands> @@ -5166,7 +5156,7 @@ <name>ОткрытьФормуРегистрацииНаУзлах</name> </handler> </action> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <formCommands> @@ -5191,7 +5181,7 @@ <name>ОткрытьФормуНастроек</name> </handler> </action> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <formCommands> @@ -5213,7 +5203,7 @@ <name>ДобавитьРегистрациюОдногоОбъекта</name> </handler> </action> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <formCommands> @@ -5235,7 +5225,7 @@ <name>ДобавитьРегистрациюОтбор</name> </handler> </action> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <formCommands> @@ -5257,7 +5247,7 @@ <name>УдалитьРегистрациюОдногоОбъекта</name> </handler> </action> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <formCommands> @@ -5279,7 +5269,7 @@ <name>УдалитьРегистрациюОтбор</name> </handler> </action> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <formCommands> @@ -5301,7 +5291,7 @@ <name>ДобавитьРегистрациюУдаленияОбъекта</name> </handler> </action> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <formCommands> @@ -5326,7 +5316,7 @@ <name>РедактироватьНомерСообщенияОбъекта</name> </handler> </action> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <formCommands> @@ -5348,7 +5338,7 @@ <name>ЗарегистрироватьИОМИПредопределенные</name> </handler> </action> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <parameters> diff --git a/SSL/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/Forms/Форма/Module.bsl b/SSL/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/Forms/Форма/Module.bsl index 84562f815..60cd0002d 100644 --- a/SSL/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/Forms/Форма/Module.bsl +++ b/SSL/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/Forms/Форма/Module.bsl @@ -129,8 +129,7 @@ Или (Не ВыбранноеЗначение.Свойство("ДействиеВыбора")) Или (Не ВыбранноеЗначение.Свойство("ДанныеВыбора")) Или ТипЗнч(ВыбранноеЗначение.ДействиеВыбора) <> Тип("Булево") - Или ТипЗнч(ВыбранноеЗначение.ДанныеВыбора) <> Тип("Строка") - Тогда + Или ТипЗнч(ВыбранноеЗначение.ДанныеВыбора) <> Тип("Строка") Тогда Ошибка = НСтр("ru = 'Неожиданный результат выбора из консоли запросов'"); Иначе Ошибка = КонтрольСсылокДляВыбораЗапросом(ВыбранноеЗначение.ДанныеВыбора); @@ -195,8 +194,7 @@ // Если восстановленный узел обмена был удален, то очищаем его. Если УзелОбменаСсылка <> Неопределено И ПланыОбмена.ТипВсеСсылки().СодержитТип(ТипЗнч(УзелОбменаСсылка)) - И ПустаяСтрока(УзелОбменаСсылка.ВерсияДанных) - Тогда + И ПустаяСтрока(УзелОбменаСсылка.ВерсияДанных) Тогда УзелОбменаСсылка = Неопределено; КонецЕсли; КонецЕсли; @@ -415,9 +413,7 @@ ТаблицаРегистрации = ?(ТипЗнч(Данные) = Тип("Структура"), СписокНаборовЗаписейИмяТаблицы, ""); ОткрытьФорму(ПолучитьИмяФормы() + "Форма.УзлыРегистрацииОбъекта", Новый Структура("ОбъектРегистрации, ТаблицаРегистрации, ОповещатьОбИзменениях", - Данные, ТаблицаРегистрации, Истина - ), - ЭтотОбъект); + Данные, ТаблицаРегистрации, Истина), ЭтотОбъект); КонецЕсли; КонецПроцедуры @@ -635,8 +631,7 @@ ТекстВопроса = СтрЗаменить( НСтр("ru = 'Зарегистрировать данные для восстановления подчиненного узла РИБ |на узле ""%1""?'"), - "%1", УзелОбменаСсылка - ); + "%1", УзелОбменаСсылка); Оповещение = Новый ОписаниеОповещения("ЗарегистрироватьИОМЗавершение", ЭтотОбъект); ПоказатьВопрос(Оповещение, ТекстВопроса, РежимДиалогаВопрос.ДаНет, , , ЗаголовокВопроса); @@ -917,8 +912,7 @@ Если Объект.ДоступнаРаботаРИБ // Доступна работа с ИОМ по версии БСП. И (ПланыОбмена.ГлавныйУзел() = Неопределено) // Текущая база - главный узел. - И МетаПланОбменаУзла.РаспределеннаяИнформационнаяБаза // Текущий узел - РИБ - Тогда + И МетаПланОбменаУзла.РаспределеннаяИнформационнаяБаза Тогда // Текущий узел - РИБ Элементы.ФормаЗарегистрироватьИОМИПредопределенные.Видимость = Истина; Иначе Элементы.ФормаЗарегистрироватьИОМИПредопределенные.Видимость = Ложь; @@ -994,11 +988,11 @@ &НаКлиенте Процедура ДобавитьРегистрациюКонстантыВСписке() ТекИмяФормы = ПолучитьИмяФормы() + "Форма.ВыборКонстанты"; - ТекПараметры = Новый Структура("УзелОбмена, МассивИменМетаданных, МассивПредставлений, МассивАвторегистрации", - УзелОбменаСсылка, - СтруктураИменМетаданных.Константы, - СтруктураПредставленийМетаданных.Константы, - СтруктураАвторегистрацииМетаданных.Константы); + ТекПараметры = Новый Структура(); + ТекПараметры.Вставить("УзелОбмена",УзелОбменаСсылка); + ТекПараметры.Вставить("МассивИменМетаданных",СтруктураИменМетаданных.Константы); + ТекПараметры.Вставить("МассивПредставлений",СтруктураПредставленийМетаданных.Константы); + ТекПараметры.Вставить("МассивАвторегистрации",СтруктураАвторегистрацииМетаданных.Константы); ОткрытьФорму(ТекИмяФормы, ТекПараметры, Элементы.СписокКонстант); КонецПроцедуры @@ -1053,8 +1047,12 @@ &НаКлиенте Процедура ДобавитьРегистрациюВСписокСсылок(ЭтоПодбор = Ложь) ТекИмяФормы = ПолучитьИмяФормы(СписокСсылок) + "ФормаВыбора"; - ТекПараметры = Новый Структура("РежимВыбора, МножественныйВыбор, ЗакрыватьПриВыборе, ВыборГруппИЭлементов", - Истина, Истина, ЭтоПодбор, ИспользованиеГруппИЭлементов.ГруппыИЭлементы); + ТекПараметры = Новый Структура(); + ТекПараметры.Вставить("РежимВыбора", Истина); + ТекПараметры.Вставить("МножественныйВыбор", Истина); + ТекПараметры.Вставить("ЗакрыватьПриВыборе", ЭтоПодбор); + ТекПараметры.Вставить("ВыборГруппИЭлементов", ИспользованиеГруппИЭлементов.ГруппыИЭлементы); + ОткрытьФорму(ТекИмяФормы, ТекПараметры, Элементы.СписокСсылок); КонецПроцедуры @@ -1171,12 +1169,11 @@ Возврат; КонецЕсли; - Выбор = Новый Структура("ИмяТаблицы, ДанныеВыбора, ДействиеВыбора, СтруктураПолей", - СписокНаборовЗаписейИмяТаблицы, - Данные, - Ложь, - СтруктураДанных); - + Выбор = Новый Структура(); + Выбор.Вставить("ИмяТаблицы",СписокНаборовЗаписейИмяТаблицы); + Выбор.Вставить("ДанныеВыбора",Данные); + Выбор.Вставить("ДействиеВыбора",Ложь); + Выбор.Вставить("СтруктураПолей",СтруктураДанных); ОбработкаВыбораДанных(Элементы.СписокНаборовЗаписей, Выбор); КонецПроцедуры @@ -1420,10 +1417,12 @@ Иначе Текст = НСтр("ru = 'Отмена регистрации изменений результата запроса'"); КонецЕсли; - ОткрытьФорму(ТекИмяФормы, - Новый Структура("Заголовок, ДействиеВыбора, РежимВыбора, ЗакрыватьПриВыборе, ", - Текст, КомандаОперации, Истина, Ложь - ), ЭтотОбъект); + СтруктураПараметров = Новый Структура(); + СтруктураПараметров.Вставить("Заголовок", Текст); + СтруктураПараметров.Вставить("ДействиеВыбора", КомандаОперации); + СтруктураПараметров.Вставить("РежимВыбора", Истина); + СтруктураПараметров.Вставить("ЗакрыватьПриВыборе", Ложь); + ОткрытьФорму(ТекИмяФормы, СтруктураПараметров, ЭтотОбъект); Возврат; КонецЕсли; @@ -1662,8 +1661,7 @@ Или Метаданные.ПланыСчетов.Содержит(Мета) Или Метаданные.ПланыВидовРасчета.Содержит(Мета) Или Метаданные.БизнесПроцессы.Содержит(Мета) - Или Метаданные.Задачи.Содержит(Мета) - Тогда + Или Метаданные.Задачи.Содержит(Мета) Тогда // Ссылочный тип НастроитьСписокСсылок(ИмяТаблицы, Наименование); НовСтраница = Элементы.СтраницаСписокСсылок; diff --git a/SSL/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/Help/ru.html b/SSL/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/Help/ru.html index 57ed0d22a..3b7cf28a2 100644 --- a/SSL/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/Help/ru.html +++ b/SSL/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/Help/ru.html @@ -1,6 +1,6 @@ <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"><html><head><meta content="text/html; charset=utf-8" http-equiv="Content-Type"></meta><link rel="stylesheet" type="text/css" href="v8help://service_book/service_style"></link><meta name="GENERATOR" content="MSHTML 9.00.8112.16421"></meta></head><body> <p>Предназначена для регистрации изменений данных в программе. Это необходимо для последующей отправки данных при синхронизации в другие программы.</p> -<p>Список можно открыть по команде <strong>Еще -</strong> <strong>Состав отправляемых данных</strong> из списка <a href="CommonForm.ОбменыДанными/Help">Синхронизации данных</a>.</p> +<p>Список можно открыть по команде <strong>Еще -</strong> <strong>Состав отправляемых данных</strong> из списка <a href="CommonForm.СинхронизацияДанных/Help">Синхронизации данных</a>.</p> <p>Ведется регистрация номеров сообщений. Нажмите на ссылку с номерами сообщений, чтобы просмотреть их или исправить. </p> <p>Список состоит из двух частей: </p> <ul><li>левая часть состоит из двух колонок: diff --git a/SSL/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/ObjectModule.bsl b/SSL/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/ObjectModule.bsl index 4a26f73c2..ee1fd92f2 100644 --- a/SSL/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/ObjectModule.bsl +++ b/SSL/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/ObjectModule.bsl @@ -1,5 +1,11 @@ #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда +#Область ОписаниеПеременных + +Перем ДоступностьОбъектовПоОпциям Экспорт; + +#КонецОбласти + #Область ПрограммныйИнтерфейс // Возвращает дерево значений, заполненное данными для выбора узла обмена. В дереве 2 уровня: @@ -239,8 +245,11 @@ СтрокаКорень.ИдентификаторСтроки = 0; // Параметры: - ТекПараметры = Новый Структура("СтруктураИмен, СтруктураПредставлений, СтруктураАвторегистрации, Строки", - Новый Структура, Новый Структура, Новый Структура, СтрокаКорень.Строки); + ТекПараметры = Новый Структура(); + ТекПараметры.Вставить("СтруктураИмен", Новый Структура); + ТекПараметры.Вставить("СтруктураПредставлений", Новый Структура); + ТекПараметры.Вставить("СтруктураАвторегистрации", Новый Структура); + ТекПараметры.Вставить("Строки", СтрокаКорень.Строки); Если ИмяПланаОбмена = Неопределено Тогда ПланОбмена = Неопределено; @@ -251,9 +260,12 @@ КонецЕсли; ТекПараметры.Вставить("ПланОбмена", ПланОбмена); - Результат = Новый Структура("Дерево, СтруктураИмен, СтруктураПредставлений, СтруктураАвторегистрации", - Дерево, ТекПараметры.СтруктураИмен, ТекПараметры.СтруктураПредставлений, ТекПараметры.СтруктураАвторегистрации); - + Результат = Новый Структура(); + Результат.Вставить("Дерево", Дерево); + Результат.Вставить("СтруктураИмен", ТекПараметры.СтруктураИмен); + Результат.Вставить("СтруктураПредставлений", ТекПараметры.СтруктураПредставлений); + Результат.Вставить("СтруктураАвторегистрации", ТекПараметры.СтруктураАвторегистрации); + ТекНомерСтроки = 1; СформироватьУровеньМетаданных(ТекНомерСтроки, ТекПараметры, 1, 2, Ложь, "Константы", НСтр("ru = 'Константы'")); СформироватьУровеньМетаданных(ТекНомерСтроки, ТекПараметры, 3, 4, Истина, "Справочники", НСтр("ru = 'Справочники'")); @@ -868,10 +880,16 @@ КонецЕсли; КонецЕсли; - - Возврат Новый Структура("ИмяТаблицы, Метаданные, Менеджер, ЭтоНабор, ЭтоСсылка, ЭтоКонстанта, ЭтоПоследовательность, ЭтоКоллекция", - ИмяТаблицы, Мета, Менеджер, - ЭтоНабор, ЭтоСсылка, ЭтоКонстанта, ЭтоПоследовательность, ЭтоКоллекция); + Результат = Новый Структура(); + Результат.Вставить("ИмяТаблицы", ИмяТаблицы); + Результат.Вставить("Метаданные", Мета); + Результат.Вставить("Менеджер", Менеджер); + Результат.Вставить("ЭтоНабор", ЭтоНабор); + Результат.Вставить("ЭтоСсылка", ЭтоСсылка); + Результат.Вставить("ЭтоКонстанта", ЭтоКонстанта); + Результат.Вставить("ЭтоПоследовательность", ЭтоПоследовательность); + Результат.Вставить("ЭтоКоллекция", ЭтоКоллекция); + Возврат Результат; КонецФункции @@ -914,7 +932,7 @@ ПустойРезультат = Запрос.Выполнить(); Для Каждого КолонкаРезультата Из ПустойРезультат.Колонки Цикл ИмяКолонки = КолонкаРезультата.Имя; - Если Найти(НеУчитывать, ИмяКолонки + ",") = 0 Тогда + Если СтрНайти(НеУчитывать, ИмяКолонки + ",") = 0 Тогда Строка = Измерения.Добавить(); Строка.Имя = ИмяКолонки; Строка.ТипЗначения = КолонкаРезультата.ТипЗначения; @@ -936,8 +954,7 @@ Или Метаданные.РегистрыБухгалтерии.Содержит(Мета) Или Метаданные.РегистрыРасчета.Содержит(Мета) Или (ЭтоРегистрСведений И Мета.РежимЗаписи = Метаданные.СвойстваОбъектов.РежимЗаписиРегистра.ПодчинениеРегистратору) - Или Метаданные.Последовательности.Содержит(Мета) - Тогда + Или Метаданные.Последовательности.Содержит(Мета) Тогда Строка = Измерения.Добавить(); Строка.Имя = "Регистратор"; Строка.ТипЗначения = Документы.ТипВсеСсылки(); @@ -1070,11 +1087,7 @@ Результат = ""; МодульОбщегоНазначения = ОбщегоНазначенияОбщийМодуль("ОбщегоНазначения"); Если МодульОбщегоНазначения <> Неопределено Тогда - Попытка - Результат = МодульОбщегоНазначения.ПредметСтрокой(ОбъектПредставления); - Исключение - // Нет или поломан метод получения предмета. - КонецПопытки; + Результат = МодульОбщегоНазначения.ПредметСтрокой(ОбъектПредставления); КонецЕсли; Если ПустаяСтрока(Результат) И ОбъектПредставления <> Неопределено И Не ОбъектПредставления.Пустая() Тогда @@ -1103,7 +1116,7 @@ // Возвращает флаг того, что работа происходит в файловой базе. // Функция ЭтоФайловаяБаза() Экспорт - Возврат Найти(СтрокаСоединенияИнформационнойБазы(), "File=") > 0; + Возврат СтрНайти(СтрокаСоединенияИнформационнойБазы(), "File=") > 0; КонецФункции // Читает текущие данные из динамического списка по его настройкам и возвращает в виде таблицы значений. @@ -1449,7 +1462,7 @@ Если МетаПлан = Неопределено Тогда // Без учета плана обмена - Если Не ДоступноПоФункциональнымОпциям(Мета) Тогда + Если Не ОбъектМетаданныхДоступенПоФункциональнымОпциям(Мета) Тогда Продолжить; КонецЕсли; @@ -1478,7 +1491,7 @@ Если Элемент <> Неопределено И ПравоДоступа("Чтение", Мета) Тогда - Если Не ДоступноПоФункциональнымОпциям(Мета) Тогда + Если Не ОбъектМетаданныхДоступенПоФункциональнымОпциям(Мета) Тогда Продолжить; КонецЕсли; @@ -1523,26 +1536,36 @@ КонецПроцедуры -Функция ДоступноПоФункциональнымОпциям(ОбъектМетаДанных) - Возврат ДоступностьОбъектов()[ОбъектМетаДанных] <> Ложь; +// Определяет доступность объекта метаданных по функциональным опциям. +// +// Параметры: +// ОбъектМетаданных - ОбъектМетаданных - проверяемый объект метаданных. +// +// Возвращаемое значение: +// Булево - Истина, если объект доступен. +// +Функция ОбъектМетаданныхДоступенПоФункциональнымОпциям(ОбъектМетаданных) + + Если Не ЗначениеЗаполнено(ДоступностьОбъектовПоОпциям) Тогда + ДоступностьОбъектовПоОпциям = ДоступностьОбъектовПоОпциям(); + КонецЕсли; + + Возврат ДоступностьОбъектовПоОпциям[ОбъектМетаданных] <> Ложь; + КонецФункции -Функция ДоступностьОбъектов() +// Доступность объектов метаданных по функциональным опциям. +Функция ДоступностьОбъектовПоОпциям() Параметры = Новый Структура(); ДоступностьОбъектов = Новый Соответствие; - Для Каждого ФункциональнаяОпция Из Метаданные.ФункциональныеОпции Цикл - Значение = -1; - Для Каждого Элемент Из ФункциональнаяОпция.Состав Цикл - Если Значение = -1 Тогда Значение = ПолучитьФункциональнуюОпцию(ФункциональнаяОпция.Имя, Параметры); КонецЕсли; - Если Значение = Истина Тогда ДоступностьОбъектов.Вставить(Элемент.Объект, Истина); Иначе @@ -1550,9 +1573,7 @@ ДоступностьОбъектов.Вставить(Элемент.Объект, Ложь); КонецЕсли; КонецЕсли; - КонецЦикла; - КонецЦикла; Возврат ДоступностьОбъектов; @@ -1661,8 +1682,7 @@ Метаданные.РегистрыСведений.Содержит(МетаОбъект) Или Метаданные.РегистрыНакопления.Содержит(МетаОбъект) Или Метаданные.РегистрыБухгалтерии.Содержит(МетаОбъект) - Или Метаданные.РегистрыРасчета.Содержит(МетаОбъект) - ) Тогда + Или Метаданные.РегистрыРасчета.Содержит(МетаОбъект)) Тогда Для Каждого Мета Из Метаданные.Последовательности Цикл Если Мета.Движения.Содержит(МетаОбъект) Тогда // Последовательность регистрируется для набора записей. @@ -1987,8 +2007,7 @@ Если (Не ДоступнаРаботаРИБ) // Недоступна работа с ИОМ из-за версии БСП. Или (ПланыОбмена.ГлавныйУзел() <> Неопределено) // Текущая база - подчиненный узел. - Или (Не МетаПланОбменаУзла.РаспределеннаяИнформационнаяБаза) // Узел-параметр не РИБ - Тогда + Или (Не МетаПланОбменаУзла.РаспределеннаяИнформационнаяБаза) Тогда // Узел-параметр не РИБ Возврат Результат; КонецЕсли; diff --git a/SSL/src/DataProcessors/РегламентныеИФоновыеЗадания/Commands/РегламентныеИФоновыеЗадания/CommandModule.bsl b/SSL/src/DataProcessors/РегламентныеИФоновыеЗадания/Commands/РегламентныеИФоновыеЗадания/CommandModule.bsl index 1052a23d0..f341845d5 100644 --- a/SSL/src/DataProcessors/РегламентныеИФоновыеЗадания/Commands/РегламентныеИФоновыеЗадания/CommandModule.bsl +++ b/SSL/src/DataProcessors/РегламентныеИФоновыеЗадания/Commands/РегламентныеИФоновыеЗадания/CommandModule.bsl @@ -1,3 +1,4 @@ +#Область ОбработчикиСобытий &НаКлиенте Процедура ОбработкаКоманды(ПараметрКоманды, ПараметрыВыполненияКоманды) @@ -9,3 +10,5 @@ ПараметрыВыполненияКоманды.Окно); КонецПроцедуры + +#КонецОбласти \ No newline at end of file diff --git a/SSL/src/DataProcessors/РегламентныеИФоновыеЗадания/Forms/РегламентноеЗадание/Form.form b/SSL/src/DataProcessors/РегламентныеИФоновыеЗадания/Forms/РегламентноеЗадание/Form.form index 4974578a4..9c56a823a 100644 --- a/SSL/src/DataProcessors/РегламентныеИФоновыеЗадания/Forms/РегламентноеЗадание/Form.form +++ b/SSL/src/DataProcessors/РегламентныеИФоновыеЗадания/Forms/РегламентноеЗадание/Form.form @@ -164,7 +164,6 @@ <key>ru</key> <value>1. Основное</value> - ОсновноеExtendedTooltip 50 @@ -352,7 +351,6 @@ ru 2. Действия при ошибках - ru Действия при ошибках @@ -572,7 +570,6 @@ ru 3. Дополнительно - ДополнительноExtendedTooltip 60 @@ -730,7 +727,6 @@ ru 4. Метаданные - МетаданныеExtendedTooltip 65 @@ -758,7 +754,6 @@ СообщенияИОписаниеИнформацииОбОшибке 27 - true true @@ -811,7 +806,6 @@ ru 5. Сообщения пользователю и описание информации об ошибке - СообщенияПользователюИОписаниеИнформацииОбОшибкеExtendedTooltip 69 @@ -922,7 +916,6 @@ true true true - UseIfNecessary auto true @@ -1230,7 +1223,7 @@ Text - Auto + DontUse Auto @@ -1256,7 +1249,7 @@ TextPicture - Auto + DontUse Auto @@ -1282,7 +1275,7 @@ Text - Auto + DontUse Auto diff --git a/SSL/src/DataProcessors/РегламентныеИФоновыеЗадания/Forms/РегламентноеЗадание/Module.bsl b/SSL/src/DataProcessors/РегламентныеИФоновыеЗадания/Forms/РегламентноеЗадание/Module.bsl index 26a6861e1..8b5a17731 100644 --- a/SSL/src/DataProcessors/РегламентныеИФоновыеЗадания/Forms/РегламентноеЗадание/Module.bsl +++ b/SSL/src/DataProcessors/РегламентныеИФоновыеЗадания/Forms/РегламентноеЗадание/Module.bsl @@ -17,7 +17,7 @@ Действие = Параметры.Действие; - Если Найти(", Добавить, Скопировать, Изменить,", ", " + Действие + ",") = 0 Тогда + Если СтрНайти(", Добавить, Скопировать, Изменить,", ", " + Действие + ",") = 0 Тогда ВызватьИсключение НСтр("ru = 'Неверные параметры открытия формы ""Регламентное задание"".'"); КонецЕсли; @@ -251,8 +251,7 @@ КонецЕсли; Если Действие = "Изменить" Тогда - Заголовок = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = '%1 (Регламентное задание)'"), Представление); + Заголовок = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = '%1 (Регламентное задание)'"), Представление); Иначе Заголовок = НСтр("ru = 'Регламентное задание (создание)'"); КонецЕсли; diff --git a/SSL/src/DataProcessors/РегламентныеИФоновыеЗадания/Forms/РегламентныеИФоновыеЗадания/Form.form b/SSL/src/DataProcessors/РегламентныеИФоновыеЗадания/Forms/РегламентныеИФоновыеЗадания/Form.form index b83b27f50..bacee5665 100644 --- a/SSL/src/DataProcessors/РегламентныеИФоновыеЗадания/Forms/РегламентныеИФоновыеЗадания/Form.form +++ b/SSL/src/DataProcessors/РегламентныеИФоновыеЗадания/Forms/РегламентныеИФоновыеЗадания/Form.form @@ -293,17 +293,16 @@ ТаблицаРегламентныеЗаданияКоманднаяПанель 31 - ТаблицаРегламентныеЗаданияОбновитьДанные - 146 + ТаблицаРегламентныеЗаданияДобавить + 157 true true true - false - ТаблицаРегламентныеЗаданияОбновитьДанныеExtendedTooltip - 185 + ТаблицаРегламентныеЗаданияДобавитьExtendedTooltip + 186 Label true true @@ -311,13 +310,13 @@ Left - Form.Command.ОбновитьРегламентныеЗадания + Form.Item.ТаблицаРегламентныеЗадания.StandardCommand.Add Normal - Auto true true UserCmds Auto + InAdditionalSubmenu ТаблицаРегламентныеЗаданияИзменить @@ -346,6 +345,33 @@ Auto InAdditionalSubmenu + + ТаблицаРегламентныеЗаданияНастроитьРасписание + 135 + true + true + + true + + false + + ТаблицаРегламентныеЗаданияНастроитьРасписаниеРасширеннаяПодсказка + 190 + Label + true + true + + Left + + + Form.Command.НастроитьРасписание + Normal + Auto + true + true + UserCmds + Auto + ТаблицаРегламентныеЗаданияСкопировать 158 @@ -400,33 +426,6 @@ Auto InAdditionalSubmenu - - ТаблицаРегламентныеЗаданияНастроитьРасписание - 135 - true - true - - true - - false - - ТаблицаРегламентныеЗаданияНастроитьРасписаниеРасширеннаяПодсказка - 190 - Label - true - true - - Left - - - Form.Command.НастроитьРасписание - Normal - Auto - true - true - UserCmds - Auto - ТаблицаРегламентныеЗаданияВыполнитьСейчас 152 @@ -455,16 +454,15 @@ Auto - ТаблицаРегламентныеЗаданияДобавить - 157 - true + ТаблицаРегламентныеЗаданияВыполнитьНеВФоне + 279 true true - ТаблицаРегламентныеЗаданияДобавитьExtendedTooltip - 186 + ТаблицаРегламентныеЗаданияВыполнитьНеВФонеРасширеннаяПодсказка + 280 Label true true @@ -472,8 +470,36 @@ Left - Form.Item.ТаблицаРегламентныеЗадания.StandardCommand.Add + Form.Command.ВыполнитьНеВФоне Normal + Auto + true + true + UserCmds + Auto + + + ТаблицаРегламентныеЗаданияОбновитьДанные + 146 + true + true + + true + + false + + ТаблицаРегламентныеЗаданияОбновитьДанныеExtendedTooltip + 185 + Label + true + true + + Left + + + Form.Command.ОбновитьРегламентныеЗадания + Normal + Auto true true UserCmds @@ -532,6 +558,33 @@ UserCmds Auto + + ТаблицаРегламентныеЗаданияПоказатьВсеЗадания + 275 + true + true + + true + + + ТаблицаРегламентныеЗаданияПоказатьВсеЗаданияРасширеннаяПодсказка + 276 + Label + true + true + + Left + + + Form.Command.ПоказатьВсеЗадания + Normal + Auto + true + true + UserCmds + Auto + InAdditionalSubmenu + Left true @@ -635,6 +688,31 @@ ТаблицаРегламентныеЗаданияКонтекстноеМеню 30 + + ТаблицаРегламентныеЗаданияКонтекстноеМенюВыполнитьНеВФоне + 277 + true + + true + + + ТаблицаРегламентныеЗаданияКонтекстноеМенюВыполнитьНеВФонеРасширеннаяПодсказка + 278 + Label + true + true + + Left + + + Form.Command.ВыполнитьНеВФоне + Normal + Auto + true + true + UserCmds + Auto + ТаблицаРегламентныеЗаданияКонтекстноеМенюОбновитьДанные 165 @@ -924,23 +1002,209 @@ ФоновыеЗадания 28 - ПоСостоянию - 97 - - ДекорацияСостояние - 238 + ГруппаШапка + 273 + + ПоСостоянию + 97 + + ДекорацияСостояние + 238 + + <key>ru</key> + <value>Состояние:</value> + + true + true + + true + + + ДекорацияСостояниеРасширеннаяПодсказка + 240 + Label + true + true + + Left + + + + ДекорацияСостояниеКонтекстноеМеню + 239 + true + + Label + true + true + + Left + + + + ОтборПоСостояниюЗавершено + 100 + true + true + + true + + + ОтборПоСостояниюЗавершено + + Right + + ru + Показывать выполненные фоновые задания + + + ОтборПоСостояниюЗавершеноExtendedTooltip + 207 + Label + true + true + + Left + + + + ОтборПоСостояниюЗавершеноКонтекстноеМеню + 101 + true + + CheckBoxField + Enter + true + Left + true + + + + ОтборПоСостояниюЗавершеноАварийно + 102 + true + true + + true + + + ОтборПоСостояниюЗавершеноАварийно + + Right + + ru + Показывать фоновые задания завершенные с ошибкой + + + ОтборПоСостояниюЗавершеноАварийноExtendedTooltip + 208 + Label + true + true + + Left + + + + ОтборПоСостояниюЗавершеноАварийноКонтекстноеМеню + 103 + true + + CheckBoxField + Enter + true + Left + true + + + + ОтборПоСостояниюОтменено + 104 + true + true + + true + + + ОтборПоСостояниюОтменено + + Right + + ru + Показывать фоновые задания отмененные пользователем + + + ОтборПоСостояниюОтмененоExtendedTooltip + 209 + Label + true + true + + Left + + + + ОтборПоСостояниюОтмененоКонтекстноеМеню + 105 + true + + CheckBoxField + Enter + true + Left + true + + + + ОтборПоСостояниюАктивно + 98 + true + true + + true + + + ОтборПоСостояниюАктивно + + Right + + ru + Показывать фоновые задания, которые сейчас выполняются + + + ОтборПоСостояниюАктивноExtendedTooltip + 210 + Label + true + true + + Left + + + + ОтборПоСостояниюАктивноКонтекстноеМеню + 99 + true + + CheckBoxField + Enter + true + Left + true + + + true + true + + true + <key>ru</key> - <value>Состояние:</value> + <value>По состоянию</value> - true - true - - true - - ДекорацияСостояниеРасширеннаяПодсказка - 240 + ПоСостояниюExtendedTooltip + 206 Label true true @@ -948,344 +1212,33 @@ Left - - ДекорацияСостояниеКонтекстноеМеню - 239 - true - - Label - true - true - - Left - - - - ОтборПоСостояниюЗавершено - 100 - true - true - - true - - - ОтборПоСостояниюЗавершено - - Right - - ru - Показывать выполненные фоновые задания - - - ОтборПоСостояниюЗавершеноExtendedTooltip - 207 - Label - true - true - - Left - - - - ОтборПоСостояниюЗавершеноКонтекстноеМеню - 101 - true - - CheckBoxField - Enter - true - Left - true - - - - ОтборПоСостояниюЗавершеноАварийно - 102 - true - true - - true - - - ОтборПоСостояниюЗавершеноАварийно - - Right - - ru - Показывать фоновые задания завершенные с ошибкой - - - ОтборПоСостояниюЗавершеноАварийноExtendedTooltip - 208 - Label - true - true - - Left - - - - ОтборПоСостояниюЗавершеноАварийноКонтекстноеМеню - 103 - true - - CheckBoxField - Enter - true - Left - true - - - - ОтборПоСостояниюОтменено - 104 - true - true - - true - - - ОтборПоСостояниюОтменено - - Right - - ru - Показывать фоновые задания отмененные пользователем - - - ОтборПоСостояниюОтмененоExtendedTooltip - 209 - Label - true - true - - Left - - - - ОтборПоСостояниюОтмененоКонтекстноеМеню - 105 - true - - CheckBoxField - Enter - true - Left - true - - - - ОтборПоСостояниюАктивно - 98 - true - true - - true - - - ОтборПоСостояниюАктивно - - Right - - ru - Показывать фоновые задания, которые сейчас выполняются - - - ОтборПоСостояниюАктивноExtendedTooltip - 210 - Label - true - true - - Left - - - - ОтборПоСостояниюАктивноКонтекстноеМеню - 99 - true - - CheckBoxField - Enter - true - Left - true - - - true - true - - true - - - <key>ru</key> - <value>По состоянию</value> - - - ПоСостояниюExtendedTooltip - 206 - Label - true - true - - Left - - - UsualGroup - - Auto - true - true - Auto - Auto - - - - ПоПериоду - 150 - - ДекорацияЗаПериод - 241 - - <key>ru</key> - <value>За период:</value> - - true - true - - true - - - ДекорацияЗаПериодРасширеннаяПодсказка - 243 - Label - true - true - - Left - - - - ДекорацияЗаПериодКонтекстноеМеню - 242 - true - - Label - true - true - - Left - - - - ВидОтбораПоПериоду - 110 - true - true - - true - - - ВидОтбораПоПериоду - - None - - OnChange - ВидОтбораПоПериодуПриИзменении - - - ВидОтбораПоПериодуExtendedTooltip - 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 + + Auto + true + true + Auto + Auto - УстановкаПроизвольногоПериода - 112 - - ОтборПериодС - 113 + ПоПериоду + 150 + + ДекорацияЗаПериод + 241 + + <key>ru</key> + <value>За период:</value> + true true true - - ОтборПериодС - - ОтборПериодСExtendedTooltip - 217 + ДекорацияЗаПериодРасширеннаяПодсказка + 243 Label true true @@ -1294,8 +1247,46 @@ - ОтборПериодСКонтекстноеМеню - 114 + ДекорацияЗаПериодКонтекстноеМеню + 242 + true + + Label + true + true + + Left + + + + ВидОтбораПоПериоду + 110 + true + true + + true + + + ВидОтбораПоПериоду + + None + + OnChange + ВидОтбораПоПериодуПриИзменении + + + ВидОтбораПоПериодуExtendedTooltip + 213 + Label + true + true + + Left + + + + ВидОтбораПоПериодуКонтекстноеМеню + 111 true InputField @@ -1306,26 +1297,155 @@ true true + true + true true true true + + + ru + Все время + + + 0 + + + + + ru + Прошлая ночь + + + 1 + + + + + ru + Вчера + + + 2 + + + + + ru + Сегодня + + + 3 + + + + + ru + Произвольный + + + 4 + + Normal - - ОтборПериодПо - 115 - true + + УстановкаПроизвольногоПериода + 112 + + ОтборПериодС + 113 + true + true + + true + + + ОтборПериодС + + + ОтборПериодСExtendedTooltip + 217 + Label + true + true + + Left + + + + ОтборПериодСКонтекстноеМеню + 114 + true + + InputField + Enter + true + Left + true + + true + true + true + true + true + Normal + + + + ОтборПериодПо + 115 + true + true + + true + + + ОтборПериодПо + + + ОтборПериодПоExtendedTooltip + 218 + Label + true + true + + Left + + + + ОтборПериодПоКонтекстноеМеню + 116 + true + + InputField + Enter + true + Left + true + + true + true + true + true + true + Normal + + true true - - ОтборПериодПо - + + ru + Укажите период для отбора информации о фоновых заданий + + 35 + false - ОтборПериодПоExtendedTooltip - 218 + УстановкаПроизвольногоПериодаРасширеннаяПодсказка + 216 Label true true @@ -1333,38 +1453,151 @@ Left - - ОтборПериодПоКонтекстноеМеню - 116 - true - - InputField - Enter - true - Left - true - - true - true - true - true - true - Normal + UsualGroup + + Auto + true + true + Auto + Auto + true true true - + <key>ru</key> - <value>Укажите период для отбора информации о фоновых заданий</value> - </toolTip> - <width>35</width> - <horizontalStretch>false</horizontalStretch> + <value>По периоду</value> + - УстановкаПроизвольногоПериодаРасширеннаяПодсказка - 216 + ПоПериодуExtendedTooltip + 211 + Label + true + true + + Left + + + UsualGroup + + Auto + true + true + Auto + Auto + + + + ПоРегламентномуЗаданию + 96 + + ОтбиратьПоРегламентномуЗаданию + 94 + true + true + + true + + + ОтбиратьПоРегламентномуЗаданию + + Right + + ru + Включить отбор по регламентному заданию + + + OnChange + ОтбиратьПоРегламентномуЗаданиюПриИзменении + + + ОтбиратьПоРегламентномуЗаданиюExtendedTooltip + 220 + Label + true + true + + Left + + + + ОтбиратьПоРегламентномуЗаданиюКонтекстноеМеню + 95 + true + + CheckBoxField + Enter + true + Left + true + + + + РегламентноеЗаданиеДляОтбора + 56 + true + false + + true + + + РегламентноеЗаданиеДляОтбораИдентификатор + + None + + ru + Регламентное задание для отбора + + + РегламентноеЗаданиеДляОтбораExtendedTooltip + 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> + + + ПоРегламентномуЗаданиюExtendedTooltip + 219 Label true true @@ -1386,13 +1619,9 @@ true - - <key>ru</key> - <value>По периоду</value> - - ПоПериодуExtendedTooltip - 211 + ГруппаШапкаРасширеннаяПодсказка + 274 Label true true @@ -1402,6 +1631,7 @@ UsualGroup + Vertical Auto true true @@ -1410,31 +1640,489 @@ - ПоРегламентномуЗаданию - 96 - - ОтбиратьПоРегламентномуЗаданию - 94 + СтраницыОтложеннаяЗагрузкаФоновыхЗаданий + 264 + + СтраницаФоновыеЗадания + 266 + + ТаблицаФоновыеЗадания + 65 + true + true + + true + + + ТаблицаФоновыеЗадания + + false + None + Add + Change + Copy + Delete + EndEdit + MoveDown + MoveUp + SortListAsc + SortListDesc + + Состояние + 76 + true + true + + true + + + ТаблицаФоновыеЗадания.Состояние + + + СостояниеExtendedTooltip + 228 + Label + true + true + + Left + + + + СостояниеКонтекстноеМеню + 77 + true + + InputField + Enter + true + Left + true + + 15 + true + true + false + true + true + true + Normal + + + + НаименованиеФоновогоЗадания + 139 + true + true + + true + + + ТаблицаФоновыеЗадания.Наименование + + + НаименованиеФоновогоЗаданияExtendedTooltip + 227 + Label + true + true + + Left + + + + НаименованиеФоновогоЗаданияКонтекстноеМеню + 140 + true + + InputField + Enter + true + Left + true + + true + true + true + true + true + Normal + + + + Начало + 78 + true + true + + true + + + ТаблицаФоновыеЗадания.Начало + + + НачалоExtendedTooltip + 229 + Label + true + true + + Left + + + + НачалоКонтекстноеМеню + 79 + true + + InputField + Enter + true + Left + true + + 15 + true + true + false + true + true + true + Normal + + + + Конец + 80 + + <key>ru</key> + <value>Окончание</value> + + true + true + + true + + + ТаблицаФоновыеЗадания.Конец + + + КонецExtendedTooltip + 230 + Label + true + true + + Left + + + + КонецКонтекстноеМеню + 81 + true + + InputField + Enter + true + Left + true + + 15 + true + true + false + true + true + true + Normal + + + + НаименованиеРегламентногоЗадания + 90 + + <key>ru</key> + <value>Регламентное задание</value> + + true + true + + true + + + ТаблицаФоновыеЗадания.НаименованиеРегламентногоЗадания + + + НаименованиеРегламентногоЗаданияExtendedTooltip + 231 + Label + true + true + + Left + + + + НаименованиеРегламентногоЗаданияКонтекстноеМеню + 91 + true + + InputField + Enter + true + Left + true + + true + true + true + true + true + Normal + + + + ТаблицаФоновыеЗаданияКоманднаяПанель + 67 + + ТаблицаФоновыеЗаданияОбновитьДанные + 92 + true + true + + true + + false + + ТаблицаФоновыеЗаданияОбновитьДанныеExtendedTooltip + 222 + Label + true + true + + Left + + + Form.Command.ОбновитьФоновыеЗадания + Normal + Auto + true + true + UserCmds + Auto + + + ТаблицаФоновыеЗаданияОткрыть + 121 + true + true + + true + + true + false + + ТаблицаФоновыеЗаданияОткрытьExtendedTooltip + 223 + Label + true + true + + Left + + + Form.Command.ОткрытьФоновоеЗадание + Normal + Auto + true + true + UserCmds + Auto + + + ТаблицаФоновыеЗаданияОтменить + 122 + + <key>ru</key> + <value>Отменить</value> + + true + true + + true + + false + + ТаблицаФоновыеЗаданияОтменитьExtendedTooltip + 224 + Label + true + true + + Left + + + Form.Command.ОтменитьФоновоеЗадание + Normal + Auto + true + true + UserCmds + Auto + + + ТаблицаФоновыеЗаданияСправка + 154 + true + true + + true + + false + + ТаблицаФоновыеЗаданияСправкаExtendedTooltip + 225 + Label + true + true + + Left + + + Form.StandardCommand.Help + Normal + Auto + true + true + UserCmds + Auto + + Left + true + + + Selection + ТаблицаФоновыеЗаданияВыбор + + + ТаблицаФоновыеЗаданияСтрокаПоиска + 255 + + ТаблицаФоновыеЗаданияСтрокаПоискаРасширеннаяПодсказка + 257 + Label + true + true + + Left + + + + ТаблицаФоновыеЗаданияСтрокаПоискаКонтекстноеМеню + 256 + true + + ТаблицаФоновыеЗадания + + true + + + + ТаблицаФоновыеЗаданияСостояниеПросмотра + 258 + + ТаблицаФоновыеЗаданияСостояниеПросмотраРасширеннаяПодсказка + 260 + Label + true + true + + Left + + + + ТаблицаФоновыеЗаданияСостояниеПросмотраКонтекстноеМеню + 259 + true + + ViewStatusAddition + ТаблицаФоновыеЗадания + + true + + + + ТаблицаФоновыеЗаданияУправлениеПоиском + 261 + + ТаблицаФоновыеЗаданияУправлениеПоискомРасширеннаяПодсказка + 263 + Label + true + true + + Left + + + + ТаблицаФоновыеЗаданияУправлениеПоискомКонтекстноеМеню + 262 + true + + SearchControlAddition + ТаблицаФоновыеЗадания + + true + + + + ТаблицаФоновыеЗаданияExtendedTooltip + 226 + Label + true + true + + Left + + + + ТаблицаФоновыеЗаданияКонтекстноеМеню + 66 + true + + true + true + true + true + true + true +
        true
        + 1 + 1 + AutoUse + AutoUse + true + true + false + true + Auto + Auto + true + true + None + None + None + true + +
        true true true - - ОтбиратьПоРегламентномуЗаданию - - Right - - ru - Включить отбор по регламентному заданию - - - OnChange - ОтбиратьПоРегламентномуЗаданиюПриИзменении - - ОтбиратьПоРегламентномуЗаданиюExtendedTooltip - 220 + СтраницаФоновыеЗаданияРасширеннаяПодсказка + 267 Label true true @@ -1442,37 +2130,55 @@ Left - - ОтбиратьПоРегламентномуЗаданиюКонтекстноеМеню - 95 - true - - CheckBoxField - Enter - true - Left - true - + Page + + Vertical +
        - - РегламентноеЗаданиеДляОтбора - 56 + + СтраницаДлительнаяОперация + 268 + + ДлительнаяОперация + 270 + true + true + + true + + + ДлительнаяОперацияРасширеннаяПодсказка + 272 + Label + true + true + + Left + + + + ДлительнаяОперацияКонтекстноеМеню + 271 + true + + 5 + true + 3 + true + + + CommonPicture.ДлительнаяОперация48 + + + true - false + true true - - РегламентноеЗаданиеДляОтбораИдентификатор - - None - - ru - Регламентное задание для отбора - - РегламентноеЗаданиеДляОтбораExtendedTooltip - 221 + СтраницаДлительнаяОперацияРасширеннаяПодсказка + 269 Label true true @@ -1480,29 +2186,10 @@ Left - - РегламентноеЗаданиеДляОтбораКонтекстноеМеню - 57 - true - - InputField - Enter - true - Left - true - - - Clearing - РегламентноеЗаданиеДляОтбораОчистка - - true - true - true - false - true - true - true - Normal + Page + + Vertical + auto true @@ -1510,13 +2197,9 @@ true - - <key>ru</key> - <value>По регламентному заданию</value> - - ПоРегламентномуЗаданиюExtendedTooltip - 219 + СтраницыОтложеннаяЗагрузкаФоновыхЗаданийРасширеннаяПодсказка + 265 Label true true @@ -1524,485 +2207,11 @@ Left - UsualGroup - - Auto - true - true - Auto + Pages + Auto - - ТаблицаФоновыеЗадания - 65 - true - true - - true - - - ТаблицаФоновыеЗадания - - false - None - Add - Change - Copy - Delete - EndEdit - MoveDown - MoveUp - SortListAsc - SortListDesc - - Состояние - 76 - true - true - - true - - - ТаблицаФоновыеЗадания.Состояние - - - СостояниеExtendedTooltip - 228 - Label - true - true - - Left - - - - СостояниеКонтекстноеМеню - 77 - true - - InputField - Enter - true - Left - true - - 15 - true - true - false - true - true - true - Normal - - - - НаименованиеФоновогоЗадания - 139 - true - true - - true - - - ТаблицаФоновыеЗадания.Наименование - - - НаименованиеФоновогоЗаданияExtendedTooltip - 227 - Label - true - true - - Left - - - - НаименованиеФоновогоЗаданияКонтекстноеМеню - 140 - true - - InputField - Enter - true - Left - true - - true - true - true - true - true - Normal - - - - Начало - 78 - true - true - - true - - - ТаблицаФоновыеЗадания.Начало - - - НачалоExtendedTooltip - 229 - Label - true - true - - Left - - - - НачалоКонтекстноеМеню - 79 - true - - InputField - Enter - true - Left - true - - 15 - true - true - false - true - true - true - Normal - - - - Конец - 80 - - <key>ru</key> - <value>Окончание</value> - - true - true - - true - - - ТаблицаФоновыеЗадания.Конец - - - КонецExtendedTooltip - 230 - Label - true - true - - Left - - - - КонецКонтекстноеМеню - 81 - true - - InputField - Enter - true - Left - true - - 15 - true - true - false - true - true - true - Normal - - - - НаименованиеРегламентногоЗадания - 90 - - <key>ru</key> - <value>Регламентное задание</value> - - true - true - - true - - - ТаблицаФоновыеЗадания.НаименованиеРегламентногоЗадания - - - НаименованиеРегламентногоЗаданияExtendedTooltip - 231 - Label - true - true - - Left - - - - НаименованиеРегламентногоЗаданияКонтекстноеМеню - 91 - true - - InputField - Enter - true - Left - true - - true - true - true - true - true - Normal - - - - ТаблицаФоновыеЗаданияКоманднаяПанель - 67 - - ТаблицаФоновыеЗаданияОбновитьДанные - 92 - true - true - - true - - false - - ТаблицаФоновыеЗаданияОбновитьДанныеExtendedTooltip - 222 - Label - true - true - - Left - - - Form.Command.ОбновитьФоновыеЗадания - Normal - Auto - true - true - UserCmds - Auto - - - ТаблицаФоновыеЗаданияОткрыть - 121 - true - true - - true - - true - false - - ТаблицаФоновыеЗаданияОткрытьExtendedTooltip - 223 - Label - true - true - - Left - - - Form.Command.ОткрытьФоновоеЗадание - Normal - Auto - true - true - UserCmds - Auto - - - ТаблицаФоновыеЗаданияОтменить - 122 - - <key>ru</key> - <value>Отменить</value> - - true - true - - true - - false - - ТаблицаФоновыеЗаданияОтменитьExtendedTooltip - 224 - Label - true - true - - Left - - - Form.Command.ОтменитьФоновоеЗадание - Normal - Auto - true - true - UserCmds - Auto - - - ТаблицаФоновыеЗаданияСправка - 154 - true - true - - true - - false - - ТаблицаФоновыеЗаданияСправкаExtendedTooltip - 225 - Label - true - true - - Left - - - Form.StandardCommand.Help - Normal - Auto - true - true - UserCmds - Auto - - Left - true - - - Selection - ТаблицаФоновыеЗаданияВыбор - - - ТаблицаФоновыеЗаданияСтрокаПоиска - 255 - - ТаблицаФоновыеЗаданияСтрокаПоискаРасширеннаяПодсказка - 257 - Label - true - true - - Left - - - - ТаблицаФоновыеЗаданияСтрокаПоискаКонтекстноеМеню - 256 - true - - ТаблицаФоновыеЗадания - - true - - - - ТаблицаФоновыеЗаданияСостояниеПросмотра - 258 - - ТаблицаФоновыеЗаданияСостояниеПросмотраРасширеннаяПодсказка - 260 - Label - true - true - - Left - - - - ТаблицаФоновыеЗаданияСостояниеПросмотраКонтекстноеМеню - 259 - true - - ViewStatusAddition - ТаблицаФоновыеЗадания - - true - - - - ТаблицаФоновыеЗаданияУправлениеПоиском - 261 - - ТаблицаФоновыеЗаданияУправлениеПоискомРасширеннаяПодсказка - 263 - Label - true - true - - Left - - - - ТаблицаФоновыеЗаданияУправлениеПоискомКонтекстноеМеню - 262 - true - - SearchControlAddition - ТаблицаФоновыеЗадания - - true - - - - ТаблицаФоновыеЗаданияExtendedTooltip - 226 - Label - true - true - - Left - - - - ТаблицаФоновыеЗаданияКонтекстноеМеню - 66 - true - - true - true - true - true - true - true -
        true
        - 1 - 1 - AutoUse - AutoUse - true - true - false - true - Auto - Auto - true - true - None - None - None - true - -
        true true @@ -2073,6 +2282,10 @@ OnCreateAtServer ПриСозданииНаСервере + + OnClose + ПриЗакрытии + BeforeLoadDataFromSettingsAtServer ПриЗагрузкеДанныхИзНастроекНаСервере @@ -2094,7 +2307,6 @@ true true true - UseIfNecessary auto true @@ -2333,6 +2545,24 @@ true + + ИмяЗадания + + <key>ru</key> + <value>Имя задания</value> + + 11 + + String + + + + true + + + true + + ТаблицаФоновыеЗадания @@ -2867,6 +3097,93 @@ true + + ЭтоПодчиненныйУзелРИБ + + <key>ru</key> + <value>Это подчиненный узел РИБ</value> + + 23 + + Boolean + + + true + + + true + + + + ПараметрыОбработчикаОжидания + + <key>ru</key> + <value>Параметры обработчика ожидания</value> + + 24 + + + true + + + true + + + + ИдентификаторЗадания + + <key>ru</key> + <value>Идентификатор задания</value> + + 25 + + UUID + + + true + + + true + + + + АдресХранилища + + <key>ru</key> + <value>Адрес хранилища</value> + + 26 + + String + + + + true + + + true + + + + ОтключенныеЗадания + + <key>ru</key> + <value>Отключенные задания</value> + + 27 + + ValueList + + + true + + + true + + + + + ОбновитьФоновыеЗадания @@ -2891,7 +3208,7 @@ </handler> </action> <representation>Text</representation> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <formCommands> @@ -2917,7 +3234,7 @@ </handler> </action> <representation>Text</representation> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <formCommands> @@ -2940,7 +3257,7 @@ </handler> </action> <representation>Text</representation> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <formCommands> @@ -2966,7 +3283,7 @@ </handler> </action> <representation>Text</representation> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <formCommands> @@ -2992,7 +3309,7 @@ </handler> </action> <representation>Text</representation> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <formCommands> @@ -3014,7 +3331,7 @@ <name>ВключитьРегламентноеЗадание</name> </handler> </action> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <formCommands> @@ -3036,7 +3353,7 @@ <name>ВыключитьРегламентноеЗадание</name> </handler> </action> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <formCommands> @@ -3058,7 +3375,51 @@ <name>ОбновитьРегламентныеЗадания</name> </handler> </action> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> + <selectedRowsUse>Auto</selectedRowsUse> + </formCommands> + <formCommands> + <name>ПоказатьВсеЗадания</name> + <title> + <key>ru</key> + <value>Показать все задания</value> + + 9 + + ru + Показать все задания + + + true + + + + ПоказатьВсеЗадания + + + DontUse + Auto + + + ВыполнитьНеВФоне + + <key>ru</key> + <value>Выполнить не в фоне</value> + + 10 + + ru + Вызывает регламентное задание напрямую, для целей отладки + + + true + + + + ВыполнитьНеВФоне + + + DontUse Auto diff --git a/SSL/src/DataProcessors/РегламентныеИФоновыеЗадания/Forms/РегламентныеИФоновыеЗадания/Module.bsl b/SSL/src/DataProcessors/РегламентныеИФоновыеЗадания/Forms/РегламентныеИФоновыеЗадания/Module.bsl index c5f2a7933..4a00fb18f 100644 --- a/SSL/src/DataProcessors/РегламентныеИФоновыеЗадания/Forms/РегламентныеИФоновыеЗадания/Module.bsl +++ b/SSL/src/DataProcessors/РегламентныеИФоновыеЗадания/Forms/РегламентныеИФоновыеЗадания/Module.bsl @@ -18,6 +18,12 @@ ПустойИдентификатор = Строка(Новый УникальныйИдентификатор("00000000-0000-0000-0000-000000000000")); ТекстНеОпределено = РегламентныеЗаданияСлужебный.ТекстНеОпределено(); + ЭтоПодчиненныйУзелРИБ = ОбщегоНазначения.ЭтоПодчиненныйУзелРИБ(); + + Если ОбщегоНазначенияКлиентСервер.РежимОтладки() Тогда + Элементы.ТаблицаРегламентныеЗаданияКонтекстноеМенюВыполнитьНеВФоне.Видимость = Истина; + Элементы.ТаблицаРегламентныеЗаданияВыполнитьНеВФоне.Видимость = Истина; + КонецЕсли; КонецПроцедуры @@ -30,6 +36,13 @@ КонецПроцедуры +&НаКлиенте +Процедура ПриЗакрытии() + Если ИдентификаторЗадания <> Новый УникальныйИдентификатор("00000000-0000-0000-0000-000000000000") Тогда + ПриЗакрытииНаСервере(); + КонецЕсли; +КонецПроцедуры + &НаКлиенте Процедура ОбработкаОповещения(ИмяСобытия, Параметр, Источник) @@ -64,7 +77,7 @@ И Не СтраницаФоновыеЗаданияОткрывалась Тогда СтраницаФоновыеЗаданияОткрывалась = Истина; - ОбновитьТаблицуФоновыхЗаданий(); + ОбновитьТаблицуФоновыхЗаданийНаКлиенте(); КонецЕсли; КонецПроцедуры @@ -266,7 +279,7 @@ &НаКлиенте Процедура ОбновитьФоновыеЗадания(Команда) - ОбновитьТаблицуФоновыхЗаданий(); + ОбновитьТаблицуФоновыхЗаданийНаКлиенте(); КонецПроцедуры @@ -327,22 +340,71 @@ КонецПроцедуры +&НаКлиенте +Процедура ПоказатьВсеЗадания(Команда) + Значение = Элементы.ТаблицаРегламентныеЗаданияПоказатьВсеЗадания.Пометка; + Элементы.ТаблицаРегламентныеЗаданияПоказатьВсеЗадания.Пометка = Не Значение; + + УстановитьВидимостьОтключенныхЗаданий(Не Значение); +КонецПроцедуры + +&НаКлиенте +Процедура ВыполнитьНеВФоне(Команда) + + Если Элементы.ТаблицаРегламентныеЗадания.ТекущиеДанные = Неопределено Тогда + ПоказатьПредупреждение(, НСтр("ru = 'Выберите регламентное задание.'")); + Возврат; + КонецЕсли; + + ВыделенныеСтроки = Новый Массив; + Для каждого ВыделеннаяСтрока Из Элементы.ТаблицаРегламентныеЗадания.ВыделенныеСтроки Цикл + ВыделенныеСтроки.Добавить(ВыделеннаяСтрока); + КонецЦикла; + Индекс = 0; + + Для каждого ВыделеннаяСтрока Из ВыделенныеСтроки Цикл + ТекущиеДанные = ТаблицаРегламентныеЗадания.НайтиПоИдентификатору(ВыделеннаяСтрока); + ПараметрыВыполнения = ЗапуститьРегламентноеЗаданиеНеВФоне(ТекущиеДанные.Идентификатор); + Индекс = Индекс + 1; + КонецЦикла; + + ПоказатьОповещениеПользователя( + НСтр("ru = 'Выполнена процедура регламентного задания'"), , + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = '%1. + |Процедура выполнена вручную без фонового задания'"), + ТекущиеДанные.Наименование), + БиблиотекаКартинок.ВыполнитьРегламентноеЗаданиеВручную); + +КонецПроцедуры + +&НаСервере +Функция ЗапуститьРегламентноеЗаданиеНеВФоне(ИдентификаторЗадания) + + РегламентныеЗаданияСлужебный.ВызватьИсключениеЕслиНетПраваАдминистрирования(); + УстановитьПривилегированныйРежим(Истина); + + Задание = РегламентныеЗаданияСервер.ПолучитьРегламентноеЗадание(ИдентификаторЗадания); + ИмяМетода = Задание.Метаданные.ИмяМетода; + + РаботаВБезопасномРежиме.ВыполнитьМетодКонфигурации(ИмяМетода); + +КонецФункции + #КонецОбласти #Область СлужебныеПроцедурыИФункции &НаСервере Процедура УстановитьУсловноеОформление() - + УсловноеОформление.Элементы.Очистить(); - + // - Элемент = УсловноеОформление.Элементы.Добавить(); - + ПолеЭлемента = Элемент.Поля.Элементы.Добавить(); ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.Конец.Имя); - + ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("ТаблицаФоновыеЗадания.Конец"); ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.НеЗаполнено; @@ -350,29 +412,70 @@ // Элемент = УсловноеОформление.Элементы.Добавить(); - + ПолеЭлемента = Элемент.Поля.Элементы.Добавить(); ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.СостояниеВыполнения.Имя); - + ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("ТаблицаРегламентныеЗадания.СостояниеВыполнения"); ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно; ОтборЭлемента.ПравоеЗначение = НСтр("ru = '<не определено>'"); - Элемент.Оформление.УстановитьЗначениеПараметра("ЦветТекста", ЦветаСтиля.НедоступныеДанныеЦвет); + Элемент.Оформление.УстановитьЗначениеПараметра("ЦветТекста", ЦветаСтиля.ТекстЗапрещеннойЯчейкиЦвет); // Элемент = УсловноеОформление.Элементы.Добавить(); - + ПолеЭлемента = Элемент.Поля.Элементы.Добавить(); ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ДатаОкончания.Имя); - + ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("ТаблицаРегламентныеЗадания.ДатаОкончания"); ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно; ОтборЭлемента.ПравоеЗначение = НСтр("ru = '<не определено>'"); - Элемент.Оформление.УстановитьЗначениеПараметра("ЦветТекста", ЦветаСтиля.НедоступныеДанныеЦвет); - + Элемент.Оформление.УстановитьЗначениеПараметра("ЦветТекста", ЦветаСтиля.ТекстЗапрещеннойЯчейкиЦвет); + + // + Элемент = УсловноеОформление.Элементы.Добавить(); + + ПолеЭлемента = Элемент.Поля.Элементы.Добавить(); + ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.Использование.Имя); + ПолеЭлемента = Элемент.Поля.Элементы.Добавить(); + ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.Наименование.Имя); + ПолеЭлемента = Элемент.Поля.Элементы.Добавить(); + ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.СостояниеВыполнения.Имя); + ПолеЭлемента = Элемент.Поля.Элементы.Добавить(); + ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ДатаОкончания.Имя); + ПолеЭлемента = Элемент.Поля.Элементы.Добавить(); + ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ИмяПользователя.Имя); + ПолеЭлемента = Элемент.Поля.Элементы.Добавить(); + ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.Предопределенное.Имя); + + ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); + ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("ТаблицаРегламентныеЗадания.ИмяЗадания"); + ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.ВСписке; + ОтборЭлемента.ПравоеЗначение = ОтключенныеЗадания; + Элемент.Оформление.УстановитьЗначениеПараметра("Видимость", Ложь); + +КонецПроцедуры +&НаСервере +Процедура УстановитьВидимостьОтключенныхЗаданий(Показывать) + + Элемент = УсловноеОформление.Элементы.Получить(3); + ЭлементОформления = Элемент.Оформление.Элементы.Найти("Видимость"); + + Если Не Показывать Тогда + ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); + ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("ТаблицаРегламентныеЗадания.ИмяЗадания"); + ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.ВСписке; + ОтборЭлемента.ПравоеЗначение = ОтключенныеЗадания; + + ЭлементОформления.Использование = Истина; + Иначе + Элемент.Отбор.Элементы.Очистить(); + ЭлементОформления.Использование = Ложь; + КонецЕсли; + КонецПроцедуры &НаКлиенте @@ -409,7 +512,7 @@ УстановитьПривилегированныйРежим(Истина); - Возврат РегламентныеЗаданияСервер.ПолучитьРасписаниеРегламентногоЗадания( + Возврат РегламентныеЗаданияСервер.РасписаниеРегламентногоЗадания( ИдентификаторРегламентногоЗадания); КонецФункции @@ -480,8 +583,6 @@ ОбновитьАвтоматическийПериод(ЭтотОбъект, ТекущаяДатаСеанса()); - ОбновитьТаблицуФоновыхЗаданий(); - КонецПроцедуры &НаКлиенте @@ -533,8 +634,10 @@ УстановитьПривилегированныйРежим(Истина); Пока Индекс >= 0 Цикл - Отбор = Новый Структура("УникальныйИдентификатор", Новый УникальныйИдентификатор( - ИдентификаторыФоновыхЗаданийПриРучномВыполнении[Индекс].Значение)); + НовыйУникальныйИдентификатор = Новый УникальныйИдентификатор( + ИдентификаторыФоновыхЗаданийПриРучномВыполнении[Индекс].Значение); + Отбор = Новый Структура; + Отбор.Вставить("УникальныйИдентификатор", НовыйУникальныйИдентификатор); МассивФоновыхЗаданий = ФоновыеЗадания.ПолучитьФоновыеЗадания(Отбор); @@ -646,7 +749,7 @@ РегламентныеЗаданияСлужебный.ОтменитьФоновоеЗадание(Идентификатор); ОбновитьТаблицуРегламентныхЗаданий(); - ОбновитьТаблицуФоновыхЗаданий(); + ОбновитьТаблицуФоновыхЗаданий(Ложь); КонецПроцедуры @@ -684,15 +787,22 @@ &НаСервере Процедура ОбновитьТаблицуРегламентныхЗаданий(ИдентификаторРегламентногоЗадания = Неопределено) - + // Обновление таблицы РегламентныеЗадания и списка СписокВыбора регламентного задания для отбора. ТекущиеЗадания = РегламентныеЗадания.ПолучитьРегламентныеЗадания(); Таблица = ТаблицаРегламентныеЗадания; + ОтключенныеЗадания.Очистить(); + + ЗависимостиЗаданий = РегламентныеЗаданияСлужебный.РегламентныеЗаданияЗависимыеОтФункциональныхОпций(); ЗаданияВМоделиСервиса = Новый Соответствие; ПодсистемаРаботаВМоделиСервиса = Метаданные.Подсистемы.СтандартныеПодсистемы.Подсистемы.Найти("РаботаВМоделиСервиса"); - Если НЕ ОбщегоНазначенияПовтИсп.РазделениеВключено() И ПодсистемаРаботаВМоделиСервиса <> Неопределено Тогда - Для каждого ОбъектМетаданных Из Метаданные.РегламентныеЗадания Цикл + Для Каждого ОбъектМетаданных Из Метаданные.РегламентныеЗадания Цикл + Если Не РегламентныеЗаданияСлужебный.РегламентноеЗаданиеДоступноПоФункциональнымОпциям(ОбъектМетаданных, ЗависимостиЗаданий) Тогда + ОтключенныеЗадания.Добавить(ОбъектМетаданных.Имя); + Продолжить; + КонецЕсли; + Если НЕ ОбщегоНазначенияПовтИсп.РазделениеВключено() И ПодсистемаРаботаВМоделиСервиса <> Неопределено Тогда Если ПодсистемаРаботаВМоделиСервиса.Состав.Содержит(ОбъектМетаданных) Тогда ЗаданияВМоделиСервиса.Вставить(ОбъектМетаданных.Имя, Истина); Продолжить; @@ -703,8 +813,8 @@ Продолжить; КонецЕсли; КонецЦикла; - КонецЦикла; - КонецЕсли; + КонецЕсли; + КонецЦикла; Если ИдентификаторРегламентногоЗадания = Неопределено Тогда @@ -753,7 +863,7 @@ Элементы.ТаблицаРегламентныеЗадания.Обновить(); - ПозицияСкобки = Найти(Элементы.РегламентныеЗадания.Заголовок, " ("); + ПозицияСкобки = СтрНайти(Элементы.РегламентныеЗадания.Заголовок, " ("); Если ПозицияСкобки > 0 Тогда Элементы.РегламентныеЗадания.Заголовок = Лев(Элементы.РегламентныеЗадания.Заголовок, ПозицияСкобки - 1); КонецЕсли; @@ -778,6 +888,7 @@ СвойстваПоследнегоФоновогоЗадания = РегламентныеЗаданияСлужебный .ПолучитьСвойстваПоследнегоФоновогоЗаданияВыполненияРегламентногоЗадания(Задание); + Строка.ИмяЗадания = Задание.Метаданные.Имя; Если СвойстваПоследнегоФоновогоЗадания = Неопределено Тогда Строка.ДатаОкончания = ТекстНеОпределено; @@ -791,13 +902,87 @@ КонецПроцедуры -&НаСервере -Процедура ОбновитьТаблицуФоновыхЗаданий() +&НаКлиентеНаСервереБезКонтекста +Процедура ОбновитьАвтоматическийПериод(Форма, ТекущаяДатаСеанса) - Если Не СтраницаФоновыеЗаданияОткрывалась Тогда - Возврат; + Если Форма.ВидОтбораПоПериоду = 1 Тогда + Форма.ОтборПериодС = НачалоДня(ТекущаяДатаСеанса) - 3*3600; + Форма.ОтборПериодПо = НачалоДня(ТекущаяДатаСеанса) + 9*3600; + + ИначеЕсли Форма.ВидОтбораПоПериоду = 2 Тогда + Форма.ОтборПериодС = НачалоДня(ТекущаяДатаСеанса) - 24*3600; + Форма.ОтборПериодПо = КонецДня(Форма.ОтборПериодС); + + ИначеЕсли Форма.ВидОтбораПоПериоду = 3 Тогда + Форма.ОтборПериодС = НачалоДня(ТекущаяДатаСеанса); + Форма.ОтборПериодПо = КонецДня(Форма.ОтборПериодС); КонецЕсли; +КонецПроцедуры + +&НаСервере +Процедура УстановитьИспользованиеРегламентногоЗадания(Включено) + + Для каждого ВыделеннаяСтрока Из Элементы.ТаблицаРегламентныеЗадания.ВыделенныеСтроки Цикл + ТекущиеДанные = ТаблицаРегламентныеЗадания.НайтиПоИдентификатору(ВыделеннаяСтрока); + Задание = РегламентныеЗаданияСервер.ПолучитьРегламентноеЗадание(ТекущиеДанные.Идентификатор); + Если Задание.Использование <> Включено Тогда + Задание.Использование = Включено; + Задание.Записать(); + ТекущиеДанные.Использование = Включено; + КонецЕсли; + КонецЦикла; + +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// Фоновая загрузка фоновых заданий. + +&НаКлиенте +Процедура ОбновитьТаблицуФоновыхЗаданийНаКлиенте() + + Результат = ФормированиеТаблицыФоновыхЗаданийВФоне(); + + Если Не Результат.ЗаданиеВыполнено Тогда + Элементы.ГруппаШапка.Доступность = Ложь; + Элементы.СтраницыОтложеннаяЗагрузкаФоновыхЗаданий.ТекущаяСтраница = Элементы.СтраницаДлительнаяОперация; + ПараметрыОбработчикаОжидания = Новый Структура; + ДлительныеОперацииКлиент.ИнициализироватьПараметрыОбработчикаОжидания(ПараметрыОбработчикаОжидания); + ПодключитьОбработчикОжидания("Подключаемый_ПроверитьВыполнениеЗадания", 1, Истина); + Иначе + ОбновитьТаблицуФоновыхЗаданий(); + КонецЕсли; + +КонецПроцедуры + +&НаСервере +Функция ФормированиеТаблицыФоновыхЗаданийВФоне() + + Отбор = ОтборФоновыхЗаданий(); + ПередаваемыеПараметры = Новый Структура; + ПередаваемыеПараметры.Вставить("Отбор", Отбор); + + Результат = ДлительныеОперации.ЗапуститьВыполнениеВФонеСлужебный( + УникальныйИдентификатор, + "РегламентныеЗаданияСлужебный.ТаблицаСвойствФоновыхЗаданийВФоне", + ПередаваемыеПараметры, + НСтр("ru = 'Регламентные задания. Обновление списка фоновых заданий'") + , , Ложь); + + АдресХранилища = Результат.АдресХранилища; + ИдентификаторЗадания = Результат.ИдентификаторЗадания; + + Если Результат.ЗаданиеВыполнено Тогда + ОбновитьТаблицуФоновыхЗаданий(); + КонецЕсли; + + Возврат Результат; + +КонецФункции + +&НаСервере +Функция ОтборФоновыхЗаданий() + // 1. Подготовка отбора. Отбор = Новый Структура; @@ -844,10 +1029,24 @@ Отбор.Вставить("Конец", ОтборПериодПо); КонецЕсли; - // 2. Обновление списка фоновых заданий. - Таблица = ТаблицаФоновыеЗадания; + Возврат Отбор; - ТекущаяТаблица = РегламентныеЗаданияСлужебный.ПолучитьТаблицуСвойствФоновыхЗаданий(Отбор); +КонецФункции + +&НаСервере +Процедура ОбновитьТаблицуФоновыхЗаданий(ФоноваяЗагрузка = Истина) + + // 2. Обновление списка фоновых заданий. + + Если ФоноваяЗагрузка Тогда + ДанныеИзХранилища = ПолучитьИзВременногоХранилища(АдресХранилища); + ТекущаяТаблица = ДанныеИзХранилища.ТаблицаСвойств; + Иначе + Отбор = ОтборФоновыхЗаданий(); + ТекущаяТаблица = РегламентныеЗаданияСлужебный.ПолучитьТаблицуСвойствФоновыхЗаданий(Отбор); + КонецЕсли; + + Таблица = ТаблицаФоновыеЗадания; Индекс = 0; Для каждого Задание Из ТекущаяТаблица Цикл @@ -896,7 +1095,7 @@ Элементы.ТаблицаФоновыеЗадания.Обновить(); - ПозицияСкобки = Найти(Элементы.ФоновыеЗадания.Заголовок, " ("); + ПозицияСкобки = СтрНайти(Элементы.ФоновыеЗадания.Заголовок, " ("); Если ПозицияСкобки > 0 Тогда Элементы.ФоновыеЗадания.Заголовок = Лев(Элементы.ФоновыеЗадания.Заголовок, ПозицияСкобки - 1); КонецЕсли; @@ -907,37 +1106,37 @@ КонецПроцедуры -&НаКлиентеНаСервереБезКонтекста -Процедура ОбновитьАвтоматическийПериод(Форма, ТекущаяДатаСеанса) +&НаКлиенте +Процедура Подключаемый_ПроверитьВыполнениеЗадания() - Если Форма.ВидОтбораПоПериоду = 1 Тогда - Форма.ОтборПериодС = НачалоДня(ТекущаяДатаСеанса) - 3*3600; - Форма.ОтборПериодПо = НачалоДня(ТекущаяДатаСеанса) + 9*3600; - - ИначеЕсли Форма.ВидОтбораПоПериоду = 2 Тогда - Форма.ОтборПериодС = НачалоДня(ТекущаяДатаСеанса) - 24*3600; - Форма.ОтборПериодПо = КонецДня(Форма.ОтборПериодС); - - ИначеЕсли Форма.ВидОтбораПоПериоду = 3 Тогда - Форма.ОтборПериодС = НачалоДня(ТекущаяДатаСеанса); - Форма.ОтборПериодПо = КонецДня(Форма.ОтборПериодС); - КонецЕсли; + Попытка + Если ЗаданиеВыполнено(ИдентификаторЗадания) Тогда + ОбновитьТаблицуФоновыхЗаданий(); + Элементы.ГруппаШапка.Доступность = Истина; + Элементы.СтраницыОтложеннаяЗагрузкаФоновыхЗаданий.ТекущаяСтраница = Элементы.СтраницаФоновыеЗадания; + Иначе + ДлительныеОперацииКлиент.ОбновитьПараметрыОбработчикаОжидания(ПараметрыОбработчикаОжидания); + ПодключитьОбработчикОжидания( + "Подключаемый_ПроверитьВыполнениеЗадания", + ПараметрыОбработчикаОжидания.ТекущийИнтервал, + Истина); + КонецЕсли; + Исключение + Элементы.ГруппаШапка.Доступность = Истина; + Элементы.СтраницыОтложеннаяЗагрузкаФоновыхЗаданий.ТекущаяСтраница = Элементы.СтраницаФоновыеЗадания; + ВызватьИсключение; + КонецПопытки; КонецПроцедуры &НаСервере -Процедура УстановитьИспользованиеРегламентногоЗадания(Включено) - - Для каждого ВыделеннаяСтрока Из Элементы.ТаблицаРегламентныеЗадания.ВыделенныеСтроки Цикл - ТекущиеДанные = ТаблицаРегламентныеЗадания.НайтиПоИдентификатору(ВыделеннаяСтрока); - Задание = РегламентныеЗаданияСервер.ПолучитьРегламентноеЗадание(ТекущиеДанные.Идентификатор); - Если Задание.Использование <> Включено Тогда - Задание.Использование = Включено; - Задание.Записать(); - ТекущиеДанные.Использование = Включено; - КонецЕсли; - КонецЦикла; - +Процедура ПриЗакрытииНаСервере() + ДлительныеОперации.ОтменитьВыполнениеЗадания(ИдентификаторЗадания); КонецПроцедуры +&НаСервереБезКонтекста +Функция ЗаданиеВыполнено(ИдентификаторЗадания) + Возврат ДлительныеОперации.ЗаданиеВыполнено(ИдентификаторЗадания); +КонецФункции + #КонецОбласти diff --git a/SSL/src/DataProcessors/РегламентныеИФоновыеЗадания/Forms/ФоновоеЗадание/Form.form b/SSL/src/DataProcessors/РегламентныеИФоновыеЗадания/Forms/ФоновоеЗадание/Form.form index 32c501c75..5106602b6 100644 --- a/SSL/src/DataProcessors/РегламентныеИФоновыеЗадания/Forms/ФоновоеЗадание/Form.form +++ b/SSL/src/DataProcessors/РегламентныеИФоновыеЗадания/Forms/ФоновоеЗадание/Form.form @@ -1,5 +1,5 @@ - + <key>ru</key> <value>Фоновое задание</value> @@ -216,7 +216,6 @@ <key>ru</key> <value>1. Основное</value> - true ОсновноеExtendedTooltip @@ -371,7 +370,6 @@ ru 2. Дополнительно - true ДополнительноExtendedTooltip @@ -490,7 +488,6 @@ ru 3. Регламентное задание - true РегламентноеЗаданиеExtendedTooltip @@ -571,7 +568,6 @@ ru 4. Сообщения пользователю и описание информации об ошибке - СообщенияПользователюИОписаниеИнформацииОбОшибкеExtendedTooltip 44 @@ -647,7 +643,6 @@ true true true - UseIfNecessary auto true diff --git a/SSL/src/DataProcessors/РегламентныеИФоновыеЗадания/Help/ru.html b/SSL/src/DataProcessors/РегламентныеИФоновыеЗадания/Help/ru.html index 37543d41c..dbe9202bb 100644 --- a/SSL/src/DataProcessors/РегламентныеИФоновыеЗадания/Help/ru.html +++ b/SSL/src/DataProcessors/РегламентныеИФоновыеЗадания/Help/ru.html @@ -5,15 +5,7 @@

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

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

        -
        • -
          Внимание! При одновременной параллельной работе с файловой базой нескольких пользователей рекомендуется выделить для выполнения регламентных заданий отдельное приложение (запуск с параметром /AllowExecuteScheduledJobs -Force).
          -
        • -
          Желательно, чтобы приложение запускалось на том же компьютере, где расположена информационная база.
          -
        • -
          Это связано с тем, что выполнение регламентных заданий во время одновременной работы нескольких пользователей (от 4 и выше) в файловой базе может существенно затормозить их работу.
          -
        • -
          Если пользователей более 10, то необходимо воспользоваться отдельным приложением для выполнения регламентных заданий.

        Регламентные задания

        +
      • Контроль выполнения регламентных заданий.

      Регламентные задания

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

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

      •  - флажок в колонке означает, что регламентное задание Включено и выполняется в соответствии с заданным расписанием; diff --git a/SSL/src/DataProcessors/РезервноеКопированиеИБ/Commands/ВыполнитьВосстановлениеИБ/CommandModule.bsl b/SSL/src/DataProcessors/РезервноеКопированиеИБ/Commands/ВыполнитьВосстановлениеДанных/CommandModule.bsl similarity index 87% rename from SSL/src/DataProcessors/РезервноеКопированиеИБ/Commands/ВыполнитьВосстановлениеИБ/CommandModule.bsl rename to SSL/src/DataProcessors/РезервноеКопированиеИБ/Commands/ВыполнитьВосстановлениеДанных/CommandModule.bsl index 4e6ff45dd..f79ed6a3c 100644 --- a/SSL/src/DataProcessors/РезервноеКопированиеИБ/Commands/ВыполнитьВосстановлениеИБ/CommandModule.bsl +++ b/SSL/src/DataProcessors/РезервноеКопированиеИБ/Commands/ВыполнитьВосстановлениеДанных/CommandModule.bsl @@ -1,6 +1,10 @@ +#Область ОбработчикиСобытий + &НаКлиенте Процедура ОбработкаКоманды(ПараметрКоманды, ПараметрыВыполненияКоманды) ОткрытьФорму("Обработка.РезервноеКопированиеИБ.Форма.ВосстановлениеДанныхИзРезервнойКопии", , ПараметрыВыполненияКоманды.Источник, ПараметрыВыполненияКоманды.Уникальность, ПараметрыВыполненияКоманды.Окно); КонецПроцедуры + +#КонецОбласти \ No newline at end of file diff --git a/SSL/src/DataProcessors/РезервноеКопированиеИБ/Commands/ПоказатьРезультат/CommandModule.bsl b/SSL/src/DataProcessors/РезервноеКопированиеИБ/Commands/ПоказатьРезультат/CommandModule.bsl index 581644ee1..d2e871159 100644 --- a/SSL/src/DataProcessors/РезервноеКопированиеИБ/Commands/ПоказатьРезультат/CommandModule.bsl +++ b/SSL/src/DataProcessors/РезервноеКопированиеИБ/Commands/ПоказатьРезультат/CommandModule.bsl @@ -1,4 +1,6 @@ +#Область ОбработчикиСобытий + &НаКлиенте Процедура ОбработкаКоманды(ПараметрКоманды, ПараметрыВыполненияКоманды) @@ -15,3 +17,5 @@ ОткрытьФорму("Обработка.РезервноеКопированиеИБ.Форма.РезервноеКопированиеДанных", ПараметрыФормы); КонецПроцедуры + +#КонецОбласти \ No newline at end of file diff --git a/SSL/src/DataProcessors/РезервноеКопированиеИБ/Forms/ВосстановлениеДанныхИзРезервнойКопии/Form.form b/SSL/src/DataProcessors/РезервноеКопированиеИБ/Forms/ВосстановлениеДанныхИзРезервнойКопии/Form.form index 113a95ee8..282cca1d6 100644 --- a/SSL/src/DataProcessors/РезервноеКопированиеИБ/Forms/ВосстановлениеДанныхИзРезервнойКопии/Form.form +++ b/SSL/src/DataProcessors/РезервноеКопированиеИБ/Forms/ВосстановлениеДанныхИзРезервнойКопии/Form.form @@ -1568,7 +1568,6 @@ Vertical true true - UseIfNecessary auto true @@ -1689,7 +1688,7 @@ Готово - Auto + DontUse Auto @@ -1707,7 +1706,7 @@ ФормаОтмена - Auto + DontUse Auto @@ -1729,7 +1728,7 @@ ПерейтиВЖурналРегистрации - Auto + DontUse Auto diff --git a/SSL/src/DataProcessors/РезервноеКопированиеИБ/Forms/ВосстановлениеДанныхИзРезервнойКопии/Module.bsl b/SSL/src/DataProcessors/РезервноеКопированиеИБ/Forms/ВосстановлениеДанныхИзРезервнойКопии/Module.bsl index dab561a4e..d327b1df0 100644 --- a/SSL/src/DataProcessors/РезервноеКопированиеИБ/Forms/ВосстановлениеДанныхИзРезервнойКопии/Module.bsl +++ b/SSL/src/DataProcessors/РезервноеКопированиеИБ/Forms/ВосстановлениеДанныхИзРезервнойКопии/Module.bsl @@ -30,8 +30,14 @@ КонецЕсли; - // Первая часть проверки на сервере - если в информационной базе есть пользователи. - ТребуетсяВводПароля = (ПользователиИнформационнойБазы.ПолучитьПользователей().Количество() > 0); + ИнформацияОПользователе = РезервноеКопированиеИБСервер.ИнформацияОПользователе(); + ТребуетсяВводПароля = ИнформацияОПользователе.ТребуетсяВводПароля; + Если ТребуетсяВводПароля Тогда + АдминистраторИБ = ИнформацияОПользователе.Имя; + Иначе + Элементы.ГруппаАвторизации.Видимость = Ложь; + ПарольАдминистратораИБ = ""; + КонецЕсли; КонецПроцедуры @@ -45,19 +51,6 @@ Возврат; КонецЕсли; - ПараметрыРаботыКлиента = СтандартныеПодсистемыКлиентПовтИсп.ПараметрыРаботыКлиента(); - ИнформацияОПользователе = ПараметрыРаботыКлиента.ИнформацияОПользователе; - - // Вторая часть проверки на клиенте - если у текущего пользователя (администратор) - // используется стандартная аутентификация и установлен пароль. - ТребуетсяВводПароля = ТребуетсяВводПароля И ИнформацияОПользователе.АутентификацияСтандартная И ИнформацияОПользователе.ПарольУстановлен; - - Если ТребуетсяВводПароля Тогда - АдминистраторИБ = ИнформацияОПользователе.Имя; - Иначе - Элементы.ГруппаАвторизации.Видимость = Ложь; - КонецЕсли; - #Если ВебКлиент Тогда Элементы.ГруппаComcntrФайловыйРежим.Видимость = Ложь; #КонецЕсли @@ -109,7 +102,7 @@ &НаКлиенте Процедура СписокПользователейНажатие(Элемент) - ОткрытьФорму("Обработка.АктивныеПользователи.Форма.ФормаСпискаАктивныхПользователей", , ЭтотОбъект); + СтандартныеПодсистемыКлиент.ОткрытьСписокАктивныхПользователей(, ЭтотОбъект); КонецПроцедуры @@ -141,11 +134,13 @@ Страницы = Элементы.СтраницыЗагрузкиДанных; - Если РезервноеКопированиеИБКлиент.ПроверитьДоступКИнформационнойБазе(ПарольАдминистратораИБ) Тогда - УстановитьПараметрыРезервногоКопирования(); - Иначе - Элементы.СтраницыСтатусаВосстановления.ТекущаяСтраница = Элементы.СтраницыСтатусаВосстановления.ПодчиненныеЭлементы.СтраницаОшибкаПодключения; + РезультатПодключения = РезервноеКопированиеИБКлиент.ПроверитьДоступКИнформационнойБазе(ПарольАдминистратораИБ); + Если РезультатПодключения.ОшибкаПодключенияКомпоненты Тогда + Элементы.СтраницыСтатусаВосстановления.ТекущаяСтраница = Элементы.СтраницаОшибкаПодключения; + ОбнаруженнаяОшибкаПодключения = РезультатПодключения.КраткоеОписаниеОшибки; Возврат; + Иначе + УстановитьПараметрыРезервногоКопирования(); КонецЕсли; Страницы.ТекущаяСтраница = Элементы.СтраницаИнформацииИВыполненияРезервногоКопирования; @@ -321,7 +316,11 @@ ПараметрыПриложения.Вставить("СтандартныеПодсистемы.ПропуститьПредупреждениеПередЗавершениемРаботыСистемы", Истина); ЗавершитьРаботуСистемы(Ложь); - ЗапуститьПриложение("""" + ИмяГлавногоФайлаСкрипта + """", РезервноеКопированиеИБКлиент.ПолучитьКаталогФайла(ИмяГлавногоФайлаСкрипта)); + + СтрокаЗапуска = "cmd /c """"%1"""" [p1]%2[/p1]"; + СтрокаЗапуска = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(СтрокаЗапуска, ИмяГлавногоФайлаСкрипта, РезервноеКопированиеИБКлиент.СтрокаUnicode(ПарольАдминистратораИБ)); + Оболочка = Новый COMОбъект("Wscript.Shell"); + Оболочка.Run(СтрокаЗапуска, 0); КонецПроцедуры @@ -390,7 +389,7 @@ Результат = Новый Массив(); Результат.Добавить(ПолучитьТекстСкрипта(СтруктураПараметров)); - ИменаМакетовМассив = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(ИменаМакетов); + ИменаМакетовМассив = СтрРазделить(ИменаМакетов, ","); Для каждого ИмяМакета Из ИменаМакетовМассив Цикл Результат.Добавить(Обработки.РезервноеКопированиеИБ.ПолучитьМакет(ИмяМакета).ПолучитьТекст()); КонецЦикла; @@ -421,11 +420,12 @@ Результат = Текст; - ИменаФайловОбновления = ""; - ИменаФайловОбновления = "[" + "" + "]"; + ПараметрыСкрипта = СтруктураПараметров.ПараметрыСкрипта; + СтрокаСоединенияИнформационнойБазы = ПараметрыСкрипта.СтрокаСоединенияИнформационнойБазы + ПараметрыСкрипта.СтрокаПодключения; - СтрокаСоединенияИнформационнойБазы = СтруктураПараметров.ПараметрыСкрипта.СтрокаСоединенияИнформационнойБазы + - СтруктураПараметров.ПараметрыСкрипта.СтрокаПодключения; + Если СтрЗаканчиваетсяНа(СтрокаСоединенияИнформационнойБазы, ";") Тогда + СтрокаСоединенияИнформационнойБазы = Лев(СтрокаСоединенияИнформационнойБазы, СтрДлина(СтрокаСоединенияИнформационнойБазы) - 1); + КонецЕсли; ИмяИсполняемогоФайлаПрограммы = КаталогПрограммы() + СтруктураПараметров.ИмяФайлаПрограммы; @@ -435,25 +435,20 @@ ПараметрПутиКИнформационнойБазе = ?(ПризнакФайловогоРежима, "/F", "/S") + ПутьКИнформационнойБазе; СтрокаПутиКИнформационнойБазе = ?(ПризнакФайловогоРежима, ПутьКИнформационнойБазе, ""); - - Результат = СтрЗаменить(Результат, "[ИменаФайловОбновления]" , ИменаФайловОбновления); - Результат = СтрЗаменить(Результат, "[ИмяИсполняемогоФайлаПрограммы]" , ПодготовитьТекст(ИмяИсполняемогоФайлаПрограммы)); - Результат = СтрЗаменить(Результат, "[ПараметрПутиКИнформационнойБазе]" , ПодготовитьТекст(ПараметрПутиКИнформационнойБазе)); - Результат = СтрЗаменить(Результат, "[СтрокаПутиКФайлуИнформационнойБазы]" , ПодготовитьТекст(ОбщегоНазначенияКлиентСервер.ДобавитьКонечныйРазделительПути(СтрЗаменить(СтрокаПутиКИнформационнойБазе, """", "")))); - Результат = СтрЗаменить(Результат, "[СтрокаСоединенияИнформационнойБазы]" , ПодготовитьТекст(СтрокаСоединенияИнформационнойБазы)); - Результат = СтрЗаменить(Результат, "[ПараметрыАутентификацииПользователя]" , ПодготовитьТекст(СтруктураПараметров.ПараметрыСкрипта.ПараметрыАутентификации)); - Результат = СтрЗаменить(Результат, "[СобытиеЖурналаРегистрации]" , ПодготовитьТекст(СтруктураПараметров.СобытиеЖурналаРегистрации)); - Результат = СтрЗаменить(Результат, "[АдресЭлектроннойПочты]", ""); - Результат = СтрЗаменить(Результат, "[СоздаватьРезервнуюКопию]" ,"true"); - - Результат = СтрЗаменить(Результат, "[КаталогРезервнойКопии]",ПодготовитьТекст(Объект.ФайлЗагрузкиРезервнойКопии)); СтрокаКаталога = ПроверитьКаталогНаУказаниеКорневогоЭлемента(Объект.КаталогСРезервнымиКопиями); - Результат = СтрЗаменить(Результат, "[КаталогРезервнойКопии2]" ,ПодготовитьТекст(СтрокаКаталога+"\backup"+СтрокаКаталогаИзДаты())); - Результат = СтрЗаменить(Результат, "[ВосстанавливатьИнформационнуюБазу]" , "false"); - Результат = СтрЗаменить(Результат, "[ИмяCOMСоединителя]" , ПодготовитьТекст(СтруктураПараметров.ИмяCOMСоединителя)); - Результат = СтрЗаменить(Результат, "[ИспользоватьCOMСоединитель]" , ?(СтруктураПараметров.ЭтоБазоваяВерсияКонфигурации, "false", "true")); - Результат = СтрЗаменить(Результат, "[КаталогВременныхФайлов]" , ПодготовитьТекст(КаталогВременныхФайлов())); + Результат = СтрЗаменить(Результат, "[ИмяИсполняемогоФайлаПрограммы]" , ПодготовитьТекст(ИмяИсполняемогоФайлаПрограммы)); + Результат = СтрЗаменить(Результат, "[ПараметрПутиКИнформационнойБазе]" , ПодготовитьТекст(ПараметрПутиКИнформационнойБазе)); + Результат = СтрЗаменить(Результат, "[СтрокаПутиКФайлуИнформационнойБазы]", ПодготовитьТекст(ОбщегоНазначенияКлиентСервер.ДобавитьКонечныйРазделительПути(СтрЗаменить(СтрокаПутиКИнформационнойБазе, """", "")))); + Результат = СтрЗаменить(Результат, "[СтрокаСоединенияИнформационнойБазы]", ПодготовитьТекст(СтрокаСоединенияИнформационнойБазы)); + Результат = СтрЗаменить(Результат, "[ИмяАдминистратораОбновления]" , ПодготовитьТекст(ИмяПользователя())); + Результат = СтрЗаменить(Результат, "[СобытиеЖурналаРегистрации]" , ПодготовитьТекст(СтруктураПараметров.СобытиеЖурналаРегистрации)); + Результат = СтрЗаменить(Результат, "[КаталогРезервнойКопии]" , ПодготовитьТекст(Объект.ФайлЗагрузкиРезервнойКопии)); + Результат = СтрЗаменить(Результат, "[КаталогРезервнойКопии2]" , ПодготовитьТекст(СтрокаКаталога+"\backup"+СтрокаКаталогаИзДаты())); + Результат = СтрЗаменить(Результат, "[ИмяCOMСоединителя]" , ПодготовитьТекст(СтруктураПараметров.ИмяCOMСоединителя)); + Результат = СтрЗаменить(Результат, "[ИспользоватьCOMСоединитель]" , ?(СтруктураПараметров.ЭтоБазоваяВерсияКонфигурации, "false", "true")); + Результат = СтрЗаменить(Результат, "[КаталогВременныхФайлов]" , ПодготовитьТекст(КаталогВременныхФайлов())); + Возврат Результат; КонецФункции @@ -461,7 +456,7 @@ &НаСервере Функция ПроверитьКаталогНаУказаниеКорневогоЭлемента(СтрокаКаталога) - Если Прав(СтрокаКаталога, 2) = ":\" Тогда + Если СтрЗаканчиваетсяНа(СтрокаКаталога, ":\") Тогда Возврат Лев(СтрокаКаталога, СтрДлина(СтрокаКаталога) - 1) ; Иначе Возврат СтрокаКаталога; diff --git a/SSL/src/DataProcessors/РезервноеКопированиеИБ/Forms/РезервноеКопированиеДанных/Form.form b/SSL/src/DataProcessors/РезервноеКопированиеИБ/Forms/РезервноеКопированиеДанных/Form.form index dc64aff9e..6680502e4 100644 --- a/SSL/src/DataProcessors/РезервноеКопированиеИБ/Forms/РезервноеКопированиеДанных/Form.form +++ b/SSL/src/DataProcessors/РезервноеКопированиеИБ/Forms/РезервноеКопированиеДанных/Form.form @@ -2046,7 +2046,6 @@ Vertical true true - UseIfNecessary auto true @@ -2170,6 +2169,24 @@ true + + КаталогПрограммы + + <key>ru</key> + <value>Каталог программы</value> + + 11 + + String + + + + true + + + true + + ФормаДалее @@ -2189,7 +2206,7 @@ <name>Далее</name> </handler> </action> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <formCommands> @@ -2211,7 +2228,7 @@ <name>Отмена</name> </handler> </action> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <formCommands> @@ -2233,7 +2250,7 @@ <name>ПерейтиВЖурналРегистрации</name> </handler> </action> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <parameters> diff --git a/SSL/src/DataProcessors/РезервноеКопированиеИБ/Forms/РезервноеКопированиеДанных/Module.bsl b/SSL/src/DataProcessors/РезервноеКопированиеИБ/Forms/РезервноеКопированиеДанных/Module.bsl index e6f2cb881..1e7eec098 100644 --- a/SSL/src/DataProcessors/РезервноеКопированиеИБ/Forms/РезервноеКопированиеДанных/Module.bsl +++ b/SSL/src/DataProcessors/РезервноеКопированиеИБ/Forms/РезервноеКопированиеДанных/Module.bsl @@ -61,8 +61,14 @@ Элементы.ГруппаАвтоматическоеРезервноеКопирование.Видимость = Не НастройкиРезервногоКопирования.ВыполнятьАвтоматическоеРезервноеКопирование; - // Первая часть проверки на сервере - если в информационной базе есть пользователи. - ТребуетсяВводПароля = (ПользователиИнформационнойБазы.ПолучитьПользователей().Количество() > 0); + ИнформацияОПользователе = РезервноеКопированиеИБСервер.ИнформацияОПользователе(); + ТребуетсяВводПароля = ИнформацияОПользователе.ТребуетсяВводПароля; + Если ТребуетсяВводПароля Тогда + АдминистраторИБ = ИнформацияОПользователе.Имя; + Иначе + Элементы.ГруппаАвторизации.Видимость = Ложь; + ПарольАдминистратораИБ = ""; + КонецЕсли; РучнойЗапуск = (Элементы.СтраницыПомощника.ТекущаяСтраница = Элементы.СтраницаВыполненияРезервногоКопирования); @@ -80,6 +86,8 @@ РезервноеКопированиеИБСервер.УстановитьЗначениеНастройки("РучнойЗапускПоследнегоРезервногоКопирования", РучнойЗапуск); + Параметры.Свойство("КаталогПрограммы", КаталогПрограммы); + КонецПроцедуры &НаКлиенте @@ -92,19 +100,6 @@ Возврат; КонецЕсли; - ПараметрыРаботыКлиента = СтандартныеПодсистемыКлиентПовтИсп.ПараметрыРаботыКлиента(); - ИнформацияОПользователе = ПараметрыРаботыКлиента.ИнформацияОПользователе; - - // Вторая часть проверки на клиенте - если у текущего пользователя (администратор) - // используется стандартная аутентификация и установлен пароль. - ТребуетсяВводПароля = ТребуетсяВводПароля И ИнформацияОПользователе.АутентификацияСтандартная И ИнформацияОПользователе.ПарольУстановлен; - - Если ТребуетсяВводПароля Тогда - АдминистраторИБ = ИнформацияОПользователе.Имя; - Иначе - Элементы.ГруппаАвторизации.Видимость = Ложь; - КонецЕсли; - ПерейтиНаСтраницу(Элементы.СтраницыПомощника.ТекущаяСтраница); #Если ВебКлиент Тогда @@ -141,10 +136,8 @@ СоединенияИБКлиент.УстановитьПризнакЗавершитьВсеСеансыКромеТекущего(Ложь); СоединенияИБВызовСервера.РазрешитьРаботуПользователей(); - ИмяПараметра = "СтандартныеПодсистемы.ПараметрыРезервногоКопированияИБ"; - Если ПараметрыПриложения[ИмяПараметра].ПроцессВыполняется Тогда - ПараметрыПриложения[ИмяПараметра].ПроцессВыполняется = Ложь; - РезервноеКопированиеИБВызовСервера.УстановитьЗначениеНастройки("ПроцессВыполняется", Ложь); + Если ПроцессВыполняется() Тогда + ПроцессВыполняется(Ложь); КонецЕсли; КонецПроцедуры @@ -164,7 +157,8 @@ &НаКлиенте Процедура СписокПользователейНажатие(Элемент) - ОткрытьФорму("Обработка.АктивныеПользователи.Форма.ФормаСпискаАктивныхПользователей", , ЭтотОбъект); + ПараметрыФормы = Новый Структура("ОшибкаУстановкиМонопольногоРежима"); + СтандартныеПодсистемыКлиент.ОткрытьСписокАктивныхПользователей(ПараметрыФормы, ЭтотОбъект); КонецПроцедуры @@ -240,14 +234,19 @@ &НаКлиенте Процедура ПерейтиНаСтраницу(НоваяСтраница) + ПерейтиДалее = Истина; ПодчиненныеСтраницы = Элементы.СтраницыПомощника.ПодчиненныеЭлементы; Если НоваяСтраница = ПодчиненныеСтраницы.СтраницаИнформацииИВыполненияРезервногоКопирования Тогда - ПерейтиНаСтраницуИнформацииИВыполненияРезервногоКопирования(); + ПерейтиНаСтраницуИнформацииИВыполненияРезервногоКопирования(ПерейтиДалее); ИначеЕсли НоваяСтраница = ПодчиненныеСтраницы.СтраницаОшибокПриКопировании ИЛИ НоваяСтраница = ПодчиненныеСтраницы.СтраницаУспешногоВыполненияКопирования Тогда ПерейтиНаСтраницуРезультатовРезервногоКопирования(); КонецЕсли; - + + Если Не ПерейтиДалее Тогда + Возврат; + КонецЕсли; + Если НоваяСтраница <> Неопределено Тогда Элементы.СтраницыПомощника.ТекущаяСтраница = НоваяСтраница; Иначе @@ -257,28 +256,31 @@ КонецПроцедуры &НаКлиенте -Процедура ПерейтиНаСтраницуИнформацииИВыполненияРезервногоКопирования() +Процедура ПерейтиНаСтраницуИнформацииИВыполненияРезервногоКопирования(ПерейтиДалее) - ПараметрыПриложения["СтандартныеПодсистемы.ПараметрыРезервногоКопированияИБ"].ПроцессВыполняется = Истина; - РезервноеКопированиеИБВызовСервера.УстановитьЗначениеНастройки("ПроцессВыполняется", Истина); + Если Не ПроверитьЗаполнениеРеквизитов(Ложь) Тогда + Элементы.СтраницыПомощника.ТекущаяСтраница = Элементы.СтраницаОшибокПриКопировании; + ПерейтиДалее = Ложь; + Возврат; + КонецЕсли; + + РезультатПодключения = РезервноеКопированиеИБКлиент.ПроверитьДоступКИнформационнойБазе(ПарольАдминистратораИБ); + Если РезультатПодключения.ОшибкаПодключенияКомпоненты Тогда + Элементы.СтраницыСтатусаКопирования.ТекущаяСтраница = Элементы.СтраницаОшибкаПодключения; + ОбнаруженнаяОшибкаПодключения = РезультатПодключения.КраткоеОписаниеОшибки; + ПерейтиДалее = Ложь; + Возврат; + Иначе + УстановитьПараметрыРезервногоКопирования(); + КонецЕсли; + + ПроцессВыполняется(Истина); Элементы.Отмена.Доступность = Истина; Элементы.КоличествоАктивныхПользователей.Заголовок = КоличествоСеансовИнформационнойБазы(); УстановитьЗаголовокКнопкиДалее(Истина); Элементы.Далее.Доступность = Ложь; - Если Не ПроверитьЗаполнениеРеквизитов(Ложь) Тогда - Элементы.СтраницыПомощника.ТекущаяСтраница = Элементы.СтраницаОшибокПриКопировании; - Возврат; - КонецЕсли; - - Если РезервноеКопированиеИБКлиент.ПроверитьДоступКИнформационнойБазе(ПарольАдминистратораИБ) Тогда - УстановитьПараметрыРезервногоКопирования(); - Иначе - Элементы.СтраницыПомощника.ТекущаяСтраница = Элементы.СтраницаОшибокПриКопировании; - Возврат; - КонецЕсли; - Если КоличествоСеансовИнформационнойБазы() = 1 Тогда СоединенияИБВызовСервера.УстановитьБлокировкуСоединений(Нстр("ru = 'Для выполнения резервного копирования.'"), "РезервноеКопирование"); @@ -535,7 +537,11 @@ ПараметрыПриложения.Вставить("СтандартныеПодсистемы.ПропуститьПредупреждениеПередЗавершениемРаботыСистемы", Истина); ЗавершитьРаботуСистемы(Ложь); - ЗапуститьПриложение("""" + ИмяГлавногоФайлаСкрипта + """", РезервноеКопированиеИБКлиент.ПолучитьКаталогФайла(ИмяГлавногоФайлаСкрипта)); + + СтрокаЗапуска = "cmd /c """"%1"""" [p1]%2[/p1]"; + СтрокаЗапуска = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(СтрокаЗапуска, ИмяГлавногоФайлаСкрипта, РезервноеКопированиеИБКлиент.СтрокаUnicode(ПарольАдминистратораИБ)); + Оболочка = Новый COMОбъект("Wscript.Shell"); + Оболочка.Run(СтрокаЗапуска, 0); КонецПроцедуры @@ -558,16 +564,15 @@ Функция СформироватьФайлыСкриптаОбновления() ПараметрыРезервногоКопирования = РезервноеКопированиеИБКлиент.КлиентскиеПараметрыРезервногоКопирования(); - ПараметрыРаботыКлиента = СтандартныеПодсистемыКлиентПовтИсп.ПараметрыРаботыКлиента(); + ПараметрыРаботыКлиентаПриЗапуске = СтандартныеПодсистемыКлиентПовтИсп.ПараметрыРаботыКлиентаПриЗапуске(); СоздатьКаталог(ПараметрыРезервногоКопирования.КаталогВременныхФайловОбновления); // Структура параметров необходима для их определения на клиенте и передачи на сервер. СтруктураПараметров = Новый Структура; СтруктураПараметров.Вставить("ИмяФайлаПрограммы" , ПараметрыРезервногоКопирования.ИмяФайлаПрограммы); СтруктураПараметров.Вставить("СобытиеЖурналаРегистрации" , ПараметрыРезервногоКопирования.СобытиеЖурналаРегистрации); - СтруктураПараметров.Вставить("ИмяCOMСоединителя" , ПараметрыРаботыКлиента.ИмяCOMСоединителя); - СтруктураПараметров.Вставить("ЭтоБазоваяВерсияКонфигурации" , ПараметрыРаботыКлиента.ЭтоБазоваяВерсияКонфигурации); - СтруктураПараметров.Вставить("ИнформационнаяБазаФайловая" , ПараметрыРаботыКлиента.ИнформационнаяБазаФайловая); + СтруктураПараметров.Вставить("ИмяCOMСоединителя" , ПараметрыРаботыКлиентаПриЗапуске.ИмяCOMСоединителя); + СтруктураПараметров.Вставить("ЭтоБазоваяВерсияКонфигурации" , ПараметрыРаботыКлиентаПриЗапуске.ЭтоБазоваяВерсияКонфигурации); СтруктураПараметров.Вставить("ПараметрыСкрипта" , РезервноеКопированиеИБКлиент.ПараметрыАутентификацииАдминистратораОбновления(ПарольАдминистратораИБ)); ИменаМакетов = "ДопФайлРезервногоКопирования"; @@ -601,7 +606,7 @@ ФайлСкрипта.УстановитьТекст(ТекстыМакетов[2]); ФайлСкрипта.Записать(ИмяГлавногоФайлаСкрипта, КодировкаТекста.UTF16); - Возврат ИмяГлавногоФайлаСкрипта; + Возврат ИмяГлавногоФайлаСкрипта; КонецФункции @@ -614,7 +619,7 @@ Результат = Новый Массив(); Результат.Добавить(ПолучитьТекстСкрипта(СтруктураПараметров)); - ИменаМакетовМассив = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(ИменаМакетов); + ИменаМакетовМассив = СтрРазделить(ИменаМакетов, ","); Для каждого ИмяМакета Из ИменаМакетовМассив Цикл Результат.Добавить(Обработки.РезервноеКопированиеИБ.ПолучитьМакет(ИмяМакета).ПолучитьТекст()); @@ -646,13 +651,16 @@ Функция ВставитьПараметрыСкрипта(Знач Текст, Знач СтруктураПараметров) Результат = Текст; - ИменаФайловОбновления = ""; - ИменаФайловОбновления = "[" + "" + "]"; - СтрокаСоединенияИнформационнойБазы = СтруктураПараметров.ПараметрыСкрипта.СтрокаСоединенияИнформационнойБазы + - СтруктураПараметров.ПараметрыСкрипта.СтрокаПодключения; + ПараметрыСкрипта = СтруктураПараметров.ПараметрыСкрипта; + СтрокаСоединенияИнформационнойБазы = ПараметрыСкрипта.СтрокаСоединенияИнформационнойБазы + ПараметрыСкрипта.СтрокаПодключения; - ИмяИсполняемогоФайлаПрограммы = КаталогПрограммы() + СтруктураПараметров.ИмяФайлаПрограммы; + Если СтрЗаканчиваетсяНа(СтрокаСоединенияИнформационнойБазы, ";") Тогда + СтрокаСоединенияИнформационнойБазы = Лев(СтрокаСоединенияИнформационнойБазы, СтрДлина(СтрокаСоединенияИнформационнойБазы) - 1); + КонецЕсли; + + КаталогПрограммы = ?(ПустаяСтрока(КаталогПрограммы), КаталогПрограммы(), КаталогПрограммы); + ИмяИсполняемогоФайлаПрограммы = КаталогПрограммы + СтруктураПараметров.ИмяФайлаПрограммы; // Определение пути к информационной базе. ПризнакФайловогоРежима = Неопределено; @@ -661,22 +669,20 @@ ПараметрПутиКИнформационнойБазе = ?(ПризнакФайловогоРежима, "/F", "/S") + ПутьКИнформационнойБазе; СтрокаПутиКИнформационнойБазе = ?(ПризнакФайловогоРежима, ПутьКИнформационнойБазе, ""); - Результат = СтрЗаменить(Результат, "[ИменаФайловОбновления]" , ИменаФайловОбновления); - Результат = СтрЗаменить(Результат, "[ИмяИсполняемогоФайлаПрограммы]" , ПодготовитьТекст(ИмяИсполняемогоФайлаПрограммы)); - Результат = СтрЗаменить(Результат, "[ПараметрПутиКИнформационнойБазе]" , ПодготовитьТекст(ПараметрПутиКИнформационнойБазе)); - Результат = СтрЗаменить(Результат, "[СтрокаПутиКФайлуИнформационнойБазы]" , ПодготовитьТекст(ОбщегоНазначенияКлиентСервер.ДобавитьКонечныйРазделительПути(СтрЗаменить(СтрокаПутиКИнформационнойБазе, """", "")))); - Результат = СтрЗаменить(Результат, "[СтрокаСоединенияИнформационнойБазы]" , ПодготовитьТекст(СтрокаСоединенияИнформационнойБазы)); - Результат = СтрЗаменить(Результат, "[ПараметрыАутентификацииПользователя]" , ПодготовитьТекст(СтруктураПараметров.ПараметрыСкрипта.ПараметрыАутентификации)); - Результат = СтрЗаменить(Результат, "[СобытиеЖурналаРегистрации]" , ПодготовитьТекст(СтруктураПараметров.СобытиеЖурналаРегистрации)); - Результат = СтрЗаменить(Результат, "[АдресЭлектроннойПочты]", ""); - Результат = СтрЗаменить(Результат, "[СоздаватьРезервнуюКопию]" ,"true"); СтрокаКаталога = ПроверитьКаталогНаУказаниеКорневогоЭлемента(Объект.КаталогСРезервнымиКопиями); - Результат = СтрЗаменить(Результат, "[КаталогРезервнойКопии]" ,ПодготовитьТекст(СтрокаКаталога+"\backup"+СтрокаКаталогаИзДаты())); - Результат = СтрЗаменить(Результат, "[ВосстанавливатьИнформационнуюБазу]" , "false"); - Результат = СтрЗаменить(Результат, "[ИмяCOMСоединителя]" , ПодготовитьТекст(СтруктураПараметров.ИмяCOMСоединителя)); - Результат = СтрЗаменить(Результат, "[ИспользоватьCOMСоединитель]" , ?(СтруктураПараметров.ЭтоБазоваяВерсияКонфигурации, "false", "true")); - Результат = СтрЗаменить(Результат, "[ВыполнитьПриЗавершенииРаботы]" , ?(Параметры.РежимРаботы = "ВыполнитьПриЗавершенииРаботы", "true", "false")); + Результат = СтрЗаменить(Результат, "[ИмяИсполняемогоФайлаПрограммы]" , ПодготовитьТекст(ИмяИсполняемогоФайлаПрограммы)); + Результат = СтрЗаменить(Результат, "[ПараметрПутиКИнформационнойБазе]" , ПодготовитьТекст(ПараметрПутиКИнформационнойБазе)); + Результат = СтрЗаменить(Результат, "[СтрокаПутиКФайлуИнформационнойБазы]", ПодготовитьТекст(ОбщегоНазначенияКлиентСервер.ДобавитьКонечныйРазделительПути(СтрЗаменить(СтрокаПутиКИнформационнойБазе, """", "")))); + Результат = СтрЗаменить(Результат, "[СтрокаСоединенияИнформационнойБазы]", ПодготовитьТекст(СтрокаСоединенияИнформационнойБазы)); + Результат = СтрЗаменить(Результат, "[ИмяАдминистратораОбновления]" , ПодготовитьТекст(ИмяПользователя())); + Результат = СтрЗаменить(Результат, "[СобытиеЖурналаРегистрации]" , ПодготовитьТекст(СтруктураПараметров.СобытиеЖурналаРегистрации)); + Результат = СтрЗаменить(Результат, "[СоздаватьРезервнуюКопию]" , "true"); + Результат = СтрЗаменить(Результат, "[КаталогРезервнойКопии]" , ПодготовитьТекст(СтрокаКаталога+"\backup"+СтрокаКаталогаИзДаты())); + Результат = СтрЗаменить(Результат, "[ВосстанавливатьИнформационнуюБазу]" , "false"); + Результат = СтрЗаменить(Результат, "[ИмяCOMСоединителя]" , ПодготовитьТекст(СтруктураПараметров.ИмяCOMСоединителя)); + Результат = СтрЗаменить(Результат, "[ИспользоватьCOMСоединитель]" , ?(СтруктураПараметров.ЭтоБазоваяВерсияКонфигурации, "false", "true")); + Результат = СтрЗаменить(Результат, "[ВыполнитьПриЗавершенииРаботы]" , ?(Параметры.РежимРаботы = "ВыполнитьПриЗавершенииРаботы", "true", "false")); Возврат Результат; @@ -685,7 +691,7 @@ &НаСервере Функция ПроверитьКаталогНаУказаниеКорневогоЭлемента(СтрокаКаталога) - Если Прав(СтрокаКаталога, 2) = ":\" Тогда + Если СтрЗаканчиваетсяНа(СтрокаКаталога, ":\") Тогда Возврат Лев(СтрокаКаталога, СтрДлина(СтрокаКаталога) - 1) ; Иначе Возврат СтрокаКаталога; @@ -723,4 +729,22 @@ КонецФункции +&НаКлиенте +Функция ПроцессВыполняется(Значение = Неопределено) + + ИмяПараметра = "СтандартныеПодсистемы.ПараметрыРезервногоКопированияИБ"; + + Если ПараметрыПриложения.Получить(ИмяПараметра) = Неопределено Тогда + ПараметрыПриложения.Вставить(ИмяПараметра, Новый Структура("ПроцессВыполняется", Ложь)); + КонецЕсли; + + Если Значение <> Неопределено Тогда + ПараметрыПриложения[ИмяПараметра].ПроцессВыполняется = Значение; + РезервноеКопированиеИБВызовСервера.УстановитьЗначениеНастройки("ПроцессВыполняется", Значение); + Иначе + Возврат ПараметрыПриложения[ИмяПараметра].ПроцессВыполняется; + КонецЕсли; + +КонецФункции + #КонецОбласти diff --git a/SSL/src/DataProcessors/РезервноеКопированиеИБ/Templates/ЗаставкаВосстановления/Template.txt b/SSL/src/DataProcessors/РезервноеКопированиеИБ/Templates/ЗаставкаВосстановления/Template.txt index a4bb91d5e..aa9d98dd8 100644 --- a/SSL/src/DataProcessors/РезервноеКопированиеИБ/Templates/ЗаставкаВосстановления/Template.txt +++ b/SSL/src/DataProcessors/РезервноеКопированиеИБ/Templates/ЗаставкаВосстановления/Template.txt @@ -10,8 +10,8 @@ <script language="javascript"> // Размер и положение окна по умолчанию. - var splashWindowWidth = 600; - var splashWindowHeight = 320; + var splashWindowWidth = 604; + var splashWindowHeight = 324; var splashWindowLeft = 200; var splashWindowTop = 100; @@ -126,16 +126,15 @@ oFileSystemObject.DeleteFile(thisFileDir + '\\splash.png'); oFileSystemObject.DeleteFile(thisFileDir + '\\splash.ico'); oFileSystemObject.DeleteFile(thisFileDir + '\\progress.gif'); - - if (createBackup) - oFileSystemObject.DeleteFile(TempCatalog + '\\1Cv8.1CD'); + oFileSystemObject.DeleteFile(thisFileDir + '\\splash.hta'); + oFileSystemObject.DeleteFile(TempCatalog + '\\1Cv8.1CD'); } catch (e) { } } </script> </head> -<body onload="window.setTimeout('main()',10);" background="splash.png" style="border: 0px;"> +<body onload="window.setTimeout('main()',10);" style="border: 2px; background-image:url(splash.png); background-repeat: no-repeat; background-position: center center; background-attachment: fixed; background-color: #B3B3B3;"> <div id="progressIcon" style="position: absolute; left: 10px; top: 65px;"> <img src="progress.gif" border="0" /> </div> diff --git a/SSL/src/DataProcessors/РезервноеКопированиеИБ/Templates/ЗаставкаРезервногоКопирования/Template.txt b/SSL/src/DataProcessors/РезервноеКопированиеИБ/Templates/ЗаставкаРезервногоКопирования/Template.txt index 71c4b9e99..70473ab7f 100644 --- a/SSL/src/DataProcessors/РезервноеКопированиеИБ/Templates/ЗаставкаРезервногоКопирования/Template.txt +++ b/SSL/src/DataProcessors/РезервноеКопированиеИБ/Templates/ЗаставкаРезервногоКопирования/Template.txt @@ -10,8 +10,8 @@ <script language="javascript"> // Размер и положение окна по умолчанию. - var splashWindowWidth = 600; - var splashWindowHeight = 320; + var splashWindowWidth = 604; + var splashWindowHeight = 324; var splashWindowLeft = 200; var splashWindowTop = 100; @@ -127,13 +127,14 @@ oFileSystemObject.DeleteFile(thisFileDir + '\\splash.png'); oFileSystemObject.DeleteFile(thisFileDir + '\\splash.ico'); oFileSystemObject.DeleteFile(thisFileDir + '\\progress.gif'); + oFileSystemObject.DeleteFile(thisFileDir + '\\splash.hta'); } catch (e) { } } </script> </head> -<body onload="window.setTimeout('main()',10);" background="splash.png" style="border: 0px;"> +<body onload="window.setTimeout('main()',10);" style="border: 2px; background-image:url(splash.png); background-repeat: no-repeat; background-position: center center; background-attachment: fixed; background-color: #B3B3B3;"> <div id="progressIcon" style="position: absolute; left: 10px; top: 65px;"> <img src="progress.gif" border="0" /> </div> diff --git a/SSL/src/DataProcessors/РезервноеКопированиеИБ/Templates/МакетФайлаЗагрузкаИБ/Template.txt b/SSL/src/DataProcessors/РезервноеКопированиеИБ/Templates/МакетФайлаЗагрузкаИБ/Template.txt index 3a9f9ba64..80f160b32 100644 --- a/SSL/src/DataProcessors/РезервноеКопированиеИБ/Templates/МакетФайлаЗагрузкаИБ/Template.txt +++ b/SSL/src/DataProcessors/РезервноеКопированиеИБ/Templates/МакетФайлаЗагрузкаИБ/Template.txt @@ -7,12 +7,10 @@ var TempCatalog = [КаталогВременныхФайлов]; // катал var v8exe = [ИмяИсполняемогоФайлаПрограммы]; // Путь к исполняемому файлу 1С:Предприятия 8 var infoBasePath = [ПараметрПутиКИнформационнойБазе]; var BaseFileName = [СтрокаПутиКФайлуИнформационнойБазы]; -var connectionString = [СтрокаСоединенияИнформационнойБазы] + 'С="РазрешитьРаботуПользователей";'+ 'UC=РезервноеКопирование'; -var infoBaseAuthorization = [ПараметрыАутентификацииПользователя]; +var connectionString = [СтрокаСоединенияИнформационнойБазы] + ';С="РазрешитьРаботуПользователей"; UC=РезервноеКопирование'; +var adminName = [ИмяАдминистратораОбновления]; // имя администратора, инициировавшего обновление var backupFileCopyName = [КаталогРезервнойКопии2] + '1Cv8' + now.valueOf() + '.zip'; // Файл резервной копии var backupFileName = [КаталогРезервнойКопии]; // Файл резервной копии -var UseRestore = [ВосстанавливатьИнформационнуюБазу]; // Использовать восстановление ИБ в случае падения -var createBackup = [СоздаватьРезервнуюКопию]; // создавать резервную копию var eventLogID = [СобытиеЖурналаРегистрации]; var comConnectorName = [ИмяCOMСоединителя]; // имя COM-класса для работы с 1С:Предприятием 8 через COM-соединение var useComConnector = [ИспользоватьCOMСоединитель]; // флаг использования COM-соединения для работы с 1С:Предприятием 8 @@ -24,20 +22,19 @@ var retryCount = 0; // Инициализация var oFileSystemObject = new ActiveXObject("Scripting.FileSystemObject"); - var thisFileName; var thisFileDir; +var InfoBasePassword; + +thisFileName = eval("oHTA.commandLine"); +thisFileDir = thisFileName.substr(1, thisFileName.lastIndexOf("\\") - 1); +InfoBasePassword = thisFileName.substr(thisFileName.indexOf("[p1]") + 4, thisFileName.indexOf("[/p1]") - thisFileName.indexOf("[p1]") - 4); +InfoBasePassword = fromUnicode(InfoBasePassword); +thisFileName = thisFileName.substr(1, thisFileName.indexOf("[p1]") - 3); + +var infoBaseAuthorization = format('/N\"{0}\" /P\"{1}\" /WA-', adminName, InfoBasePassword); +connectionString = format(connectionString, adminName, InfoBasePassword); -if (oHTA != null) -{ - thisFileName = eval("oHTA.commandLine"); - thisFileDir = thisFileName.substr(1, thisFileName.lastIndexOf("\\")-1); -} -else -{ - thisFileName = eval("WScript.ScriptFullName"); - thisFileDir = thisFileName.substr(0, thisFileName.lastIndexOf("\\")-1); -} var oShell = new ActiveXObject("WScript.Shell"); var oShellApplication = new ActiveXObject("Shell.Application"); oShell.CurrentDirectory = thisFileDir; @@ -225,7 +222,7 @@ function finalize(success) ComConnection = null; } - + function createConnection() { if (!useComConnector) @@ -335,45 +332,13 @@ function writeEventLog(success) } } -//Создание копии БД - - function CreateBackup() - - { - - var NewTextFile = oFileSystemObject.CreateTextFile(backupFileCopyName,false); - - NewTextFile.Write(String.fromCharCode(80,75,5,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0)); - NewTextFile.Close(); - - var ZIPFile = oFileSystemObject.GetAbsolutePathName(backupFileCopyName); - var dFolder = oShellApplication.NameSpace(ZIPFile); - var file = oFileSystemObject.GetAbsolutePathName(TempCatalog + '\\1Cv8.1CD'); - if (!createBackup) - return 0; - try - { - - dFolder.CopyHere(file,4|16|1024); - ret = 0; - log(format("Попытка создания резервной копии", ret), ret != 0); - } - catch(e) - { - CollectGarbage(); // предотвращает исключение out of memory - log(format("Исключение при создании резервной копии базы: {0}, {1}.", e.name, e.message), true); - ret = -1; - } - - - } // Восстановление БД function backupDB() { - var oShellApplication = new ActiveXObject("Shell.Application"); + var oShellApplication = new ActiveXObject("Shell.Application"); var ZIPFile = oFileSystemObject.GetAbsolutePathName(backupFileName); var dFolder = oShellApplication.NameSpace(ZIPFile); - var file = oFileSystemObject.GetAbsolutePathName(BaseFileName); + var file = oFileSystemObject.GetAbsolutePathName(BaseFileName); var Folder = oShellApplication.Namespace(file); var FileObject = oFileSystemObject.GetFile(BaseFileName + '1Cv8.1CD'); var FileObject2 = new ActiveXObject("Scripting.FileSystemObject"); @@ -390,7 +355,7 @@ function backupDB() { retryCount++; CollectGarbage(); // предотвращает исключение out of memory - if (retryCount > 5) + if (retryCount > 5) { log(format("Ошибка переноса файла базы во временный каталог (возможно есть активные сеансы к файлу базы): {0}, {1}.", e.name, e.message), true); return 1; @@ -401,9 +366,6 @@ function backupDB() return -1; } } - - if (!createBackup) - return 0; try { @@ -488,6 +450,15 @@ function allowConnections() return result; } +function fromUnicode(text){ + var str = ""; + for(var i=0; i<text.length/4; i++ ){ + str = str + String.fromCharCode(text.slice(4*i, 4*i+4)); + } + str = str.replace(/"/g, '""'); + return str; +} + // Интерактивный запуск "1С:Предприятие" function runEnterprise() { diff --git a/SSL/src/DataProcessors/РезервноеКопированиеИБ/Templates/МакетФайлаРезервногоКопирования/Template.txt b/SSL/src/DataProcessors/РезервноеКопированиеИБ/Templates/МакетФайлаРезервногоКопирования/Template.txt index 7ff858f68..a07510d4f 100644 --- a/SSL/src/DataProcessors/РезервноеКопированиеИБ/Templates/МакетФайлаРезервногоКопирования/Template.txt +++ b/SSL/src/DataProcessors/РезервноеКопированиеИБ/Templates/МакетФайлаРезервногоКопирования/Template.txt @@ -5,8 +5,8 @@ var outFileName = "log" + now.valueOf() + ".txt"; // Путь к log-файлу var v8exe = [ИмяИсполняемогоФайлаПрограммы]; // Путь к исполняемому файлу 1С:Предприятия 8 var infoBasePath = [ПараметрПутиКИнформационнойБазе]; var BaseFileName = [СтрокаПутиКФайлуИнформационнойБазы]; -var connectionString = [СтрокаСоединенияИнформационнойБазы] +'UC=РезервноеКопирование'; -var infoBaseAuthorization = [ПараметрыАутентификацииПользователя]; +var connectionString = [СтрокаСоединенияИнформационнойБазы] +';UC=РезервноеКопирование'; +var adminName = [ИмяАдминистратораОбновления]; // имя администратора, инициировавшего обновление var backupFileName = [КаталогРезервнойКопии]+'.zip'; // Файл резервной копии var UseRestore = [ВосстанавливатьИнформационнуюБазу]; // Использовать восстановление ИБ в случае падения var createBackup = [СоздаватьРезервнуюКопию]; // создавать резервную копию @@ -22,18 +22,18 @@ var oFileSystemObject = new ActiveXObject("Scripting.FileSystemObject"); var thisFileName; var thisFileDir; +var InfoBasePassword; -if (oHTA != null) -{ - thisFileName = eval("oHTA.commandLine"); - thisFileDir = thisFileName.substr(1, thisFileName.lastIndexOf("\\")-1); -} -else -{ - thisFileName = eval("WScript.ScriptFullName"); - thisFileDir = thisFileName.substr(0, thisFileName.lastIndexOf("\\")-1); -} -var oShell = new ActiveXObject("WScript.Shell"); +thisFileName = eval("oHTA.commandLine"); +thisFileDir = thisFileName.substr(1, thisFileName.lastIndexOf("\\") - 1); +InfoBasePassword = thisFileName.substr(thisFileName.indexOf("[p1]") + 4, thisFileName.indexOf("[/p1]") - thisFileName.indexOf("[p1]") - 4); +InfoBasePassword = fromUnicode(InfoBasePassword); +thisFileName = thisFileName.substr(1, thisFileName.indexOf("[p1]") - 3); + +var infoBaseAuthorization = format('/N\"{0}\" /P\"{1}\" /WA-', adminName, InfoBasePassword); +connectionString = format(connectionString, adminName, InfoBasePassword); + +var oShell = new ActiveXObject("WScript.Shell"); var oShellApplication = new ActiveXObject("Shell.Application"); oShell.CurrentDirectory = thisFileDir; @@ -205,43 +205,33 @@ function initialize() // Финализация function finalize(success) { - - var TestFolder = oShellApplication.NameSpace(backupFileName); - + var TestFolder = oShellApplication.NameSpace(backupFileName); + if (success == undefined) success = false; - - if (!(oFileSystemObject.FileExists(backupFileName))) - - log("Произошла ошибка при создании резервной копии ИБ. Для диагностики запустите резервное копирование вручную"); - - - - if (TestFolder!= null) - log("Резервная копия успешно создана"); - if (TestFolder== null) - { - log("Произошла ошибка при создании резервной копии ИБ. Для диагностики запустите резервное копирование вручную"); - success = false; - } - - + + if (!(oFileSystemObject.FileExists(backupFileName))) + log("Произошла ошибка при создании резервной копии ИБ. Для диагностики запустите резервное копирование вручную"); + + if (TestFolder!= null) + log("Резервная копия успешно создана"); + if (TestFolder== null){ + log("Произошла ошибка при создании резервной копии ИБ. Для диагностики запустите резервное копирование вручную"); + success = false;} + // Запись результата обновления в Event Log writeEventLog(success); if (!success) - { allowConnections(false); // Разрешение подключений - } - - - write1CEventLog(); // Запись всей информации из log-файла в журнал регистрации + + write1CEventLog(); // Запись всей информации из log-файла в журнал регистрации setResult(success); // очистка глобального COM-соединения ComConnection = null; } - + function createConnection() { if (!useComConnector) @@ -441,6 +431,15 @@ function allowConnections() return result; } +function fromUnicode(text){ + var str = ""; + for(var i=0; i<text.length/4; i++ ){ + str = str + String.fromCharCode(text.slice(4*i, 4*i+4)); + } + str = str.replace(/"/g, '""'); + return str; +} + // Интерактивный запуск "1С:Предприятие" function runEnterprise() { diff --git a/SSL/src/DataProcessors/РезервноеКопированиеИБ/РезервноеКопированиеИБ.mdo b/SSL/src/DataProcessors/РезервноеКопированиеИБ/РезервноеКопированиеИБ.mdo index 651cdf259..1770d904d 100644 --- a/SSL/src/DataProcessors/РезервноеКопированиеИБ/РезервноеКопированиеИБ.mdo +++ b/SSL/src/DataProcessors/РезервноеКопированиеИБ/РезервноеКопированиеИБ.mdo @@ -205,7 +205,7 @@ <templateType>TextDocument</templateType> </templates> <commands uuid="d8e62f1a-92ca-4971-9609-e79da798c083"> - <name>ВыполнитьВосстановлениеИБ</name> + <name>ВыполнитьВосстановлениеДанных</name> <synonym> <key>ru</key> <value>Выполнить восстановление данных</value> @@ -217,7 +217,7 @@ <name>ПоказатьРезультат</name> <synonym> <key>ru</key> - <value>Показать результат резервного копирования</value> + <value>Показать результат</value> </synonym> <comment>Служебная команда. Не для размещения в командном интерфейсе</comment> <group>NavigationPanelSeeAlso</group> 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 95e5f88a7..1fc055839 100644 --- a/SSL/src/DataProcessors/ОбновлениеИнформационнойБазы/Forms/ИндикацияХодаОбновленияИБ/Form.form +++ b/SSL/src/DataProcessors/РезультатыОбновленияПрограммы/Forms/ИндикацияХодаОбновленияИБ/Form.form @@ -534,14 +534,13 @@ <autoFillCheck>true</autoFillCheck> <allowFormCustomize>true</allowFormCustomize> <enabled>true</enabled> - <verticalScroll>UseIfNecessary</verticalScroll> <showTitle>auto</showTitle> <showCloseButton>true</showCloseButton> <attributes> <name>Объект</name> <id>1</id> <valueType> - <types>DataProcessorObject.ОбновлениеИнформационнойБазы</types> + <types>DataProcessorObject.РезультатыОбновленияПрограммы</types> </valueType> <view> <common>true</common> diff --git a/SSL/src/DataProcessors/ОбновлениеИнформационнойБазы/Forms/ИндикацияХодаОбновленияИБ/Help/ru.html b/SSL/src/DataProcessors/РезультатыОбновленияПрограммы/Forms/ИндикацияХодаОбновленияИБ/Help/ru.html similarity index 90% rename from SSL/src/DataProcessors/ОбновлениеИнформационнойБазы/Forms/ИндикацияХодаОбновленияИБ/Help/ru.html rename to SSL/src/DataProcessors/РезультатыОбновленияПрограммы/Forms/ИндикацияХодаОбновленияИБ/Help/ru.html index 93f692d76..2b80f4bbf 100644 --- a/SSL/src/DataProcessors/ОбновлениеИнформационнойБазы/Forms/ИндикацияХодаОбновленияИБ/Help/ru.html +++ b/SSL/src/DataProcessors/РезультатыОбновленияПрограммы/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 9.00.8112.16421"></meta></head><body> <p>Индикатор показывает ход обновления ИБ. </p> -<p>В сообщении выводится номер версии, на которую производится <a href="DataProcessor.ОбновлениеИнформационнойБазы/Help">обновление ИБ</a>.</p> +<p>В сообщении выводится номер версии, на которую производится <a href="DataProcessor.РезультатыОбновленияПрограммы/Help">обновление ИБ</a>.</p> <p>Обновление может занять длительное время, в зависимости от объема данных и производительности компьютера.</p> <p>Для получения подробных сведений о ходе обновления ИБ из <a href="DataProcessor.ЖурналРегистрации/Help">журнала регистрации</a> перейдите по ссылке <strong>Техническая информация о ходе обновления</strong>.</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 similarity index 90% rename from SSL/src/DataProcessors/ОбновлениеИнформационнойБазы/Forms/ИндикацияХодаОбновленияИБ/Module.bsl rename to SSL/src/DataProcessors/РезультатыОбновленияПрограммы/Forms/ИндикацияХодаОбновленияИБ/Module.bsl index aa36c2668..7f339e166 100644 --- a/SSL/src/DataProcessors/ОбновлениеИнформационнойБазы/Forms/ИндикацияХодаОбновленияИБ/Module.bsl +++ b/SSL/src/DataProcessors/РезультатыОбновленияПрограммы/Forms/ИндикацияХодаОбновленияИБ/Module.bsl @@ -136,11 +136,6 @@ ОбновитьПовторноИспользуемыеЗначения(); - ТекущийПользователь = ПользователиИнформационнойБазы.ТекущийПользователь(); - Если ПравоДоступа("Администрирование", Метаданные, ТекущийПользователь) Тогда - УстановитьПривилегированныйРежим(Истина); - КонецЕсли; - ИнформацияОбОшибке = Неопределено; Попытка @@ -159,6 +154,13 @@ ПараметрыВыполнения = Новый Структура; Если Не РежимОтладки Тогда ПараметрыВыполнения.Вставить("ПараметрыКлиентаНаСервере", ПараметрыСеанса.ПараметрыКлиентаНаСервере); + Если ОбщегоНазначения.ИнформационнаяБазаФайловая() + Или Не ОбщегоНазначенияПовтИсп.РазделениеВключено() + Или Не ОбщегоНазначенияПовтИсп.СеансЗапущенБезРазделителей() Тогда + ПараметрыВыполнения.Вставить("УстановленныеРасширения", ПараметрыСеанса.УстановленныеРасширения); + ПараметрыВыполнения.Вставить("ХранилищеСвойствРасширений", + Справочники.ИдентификаторыОбъектовМетаданных.ХранилищеСвойствРасширений()); + КонецЕсли; КонецЕсли; Попытка @@ -252,11 +254,15 @@ Процедура ЗагрузитьОбновитьПараметрыРаботыПрограммыПриОшибкеУстановкиМонопольногоРежимаЗавершение(Отказ, ДополнительныеПараметры) Экспорт Если Отказ <> Ложь Тогда - ОбновлениеИнформационнойБазыСлужебныйВызовСервера.СнятьБлокировкуФайловойБазы(); + Если БлокировкаИБ <> Неопределено + И БлокировкаИБ.Свойство("СнятьБлокировкуФайловойБазы") Тогда + ОбновлениеИнформационнойБазыСлужебныйВызовСервера.СнятьБлокировкуФайловойБазы(); + КонецЕсли; ЗакрытьФорму(Истина, Ложь); Возврат; КонецЕсли; + УстановитьПараметрыБлокировкиИБПриОшибкеУстановкиМонопольногоРежима(); ЗагрузитьОбновитьПараметрыРаботыПрограммыНачало(); КонецПроцедуры @@ -269,13 +275,20 @@ Возврат; КонецЕсли; - ОбновлениеИнформационнойБазыСлужебныйВызовСервера.СнятьБлокировкуФайловойБазы(); ПараметрыПродолжения.ПолученныеПараметрыКлиента.Вставить("НеобходимоОбновлениеПараметровРаботыПрограммы"); ПараметрыПродолжения.Вставить("КоличествоПолученныхПараметровКлиента", ПараметрыПродолжения.ПолученныеПараметрыКлиента.Количество()); ОбновитьПовторноИспользуемыеЗначения(); - ПараметрыКлиента = СтандартныеПодсистемыКлиентПовтИсп.ПараметрыРаботыКлиентаПриЗапуске(); + Попытка + ПараметрыКлиента = СтандартныеПодсистемыКлиентПовтИсп.ПараметрыРаботыКлиентаПриЗапуске(); + Исключение + ИнформацияОбОшибке = ИнформацияОбОшибке(); + ДополнительныеПараметры.Вставить("КраткоеСообщениеОбОшибке", КраткоеПредставлениеОшибки(ИнформацияОбОшибке)); + ДополнительныеПараметры.Вставить("ПодробноеСообщениеОбОшибке", ПодробноеПредставлениеОшибки(ИнформацияОбОшибке)); + СообщениеОНеудачномОбновлении(ДополнительныеПараметры, Неопределено); + Возврат; + КонецПопытки; Если Не ТолькоОбновлениеПараметровРаботыПрограммы И ПараметрыКлиента.ДоступноИспользованиеРазделенныхДанных Тогда @@ -284,7 +297,7 @@ Иначе Если ПараметрыКлиента.Свойство("НеобходимоОбновлениеНеразделенныхДанныхИнформационнойБазы") Тогда Попытка - ОбновлениеИнформационнойБазыСлужебныйВызовСервера.ВыполнитьОбновлениеИнформационнойБазы(, Истина); + ОбновлениеИнформационнойБазыСлужебныйВызовСервера.ВыполнитьОбновлениеИнформационнойБазы(Истина); Исключение ИнформацияОбОшибке = ИнформацияОбОшибке(); ДополнительныеПараметры.Вставить("КраткоеСообщениеОбОшибке", КраткоеПредставлениеОшибки(ИнформацияОбОшибке)); @@ -295,6 +308,11 @@ Возврат; КонецЕсли; КонецЕсли; + + Если БлокировкаИБ <> Неопределено + И БлокировкаИБ.Свойство("СнятьБлокировкуФайловойБазы") Тогда + ОбновлениеИнформационнойБазыСлужебныйВызовСервера.СнятьБлокировкуФайловойБазы(); + КонецЕсли; ЗакрытьФорму(Ложь, Ложь); КонецЕсли; @@ -478,6 +496,10 @@ &НаКлиенте Процедура УстановитьПараметрыБлокировкиИБПриОшибкеУстановкиМонопольногоРежима() + Если БлокировкаИБ = Неопределено Тогда + БлокировкаИБ = Новый Структура; + КонецЕсли; + БлокировкаИБ.Вставить("Установлена", Ложь); БлокировкаИБ.Вставить("СнятьБлокировкуФайловойБазы", Истина); БлокировкаИБ.Вставить("Ошибка", Неопределено); @@ -501,7 +523,13 @@ ДополнительныеПараметры.ВремяНачалаОбновления, ДополнительныеПараметры.ВремяОкончанияОбновления); ОбновитьПовторноИспользуемыеЗначения(); - ЗакрытьФорму(Ложь, Ложь); + Если (СтандартныеПодсистемыКлиентПовтИсп.ПараметрыРаботыКлиента().ЭтоБазоваяВерсияКонфигурации + Или СтандартныеПодсистемыКлиентПовтИсп.ПараметрыРаботыКлиентаПриЗапуске().ЭтоУчебнаяПлатформа) + И СтрНайти(ПараметрЗапуска, "ВыполнитьОбновлениеИЗавершитьРаботу") > 0 Тогда + ПрекратитьРаботуСистемы(Ложь); + Иначе + ЗакрытьФорму(Ложь, Ложь); + КонецЕсли; КонецПроцедуры @@ -607,12 +635,12 @@ ПараметрыФормы.Вставить("ВремяНачалаОбновления", ВремяНачалаОбновления); ПараметрыФормы.Вставить("ВремяОкончанияОбновления", ВремяОкончанияОбновления); - ИмяОткрываемойФормы = "Обработка.ОбновлениеИнформационнойБазы.Форма.СообщениеОНеудачномОбновлении"; + ИмяОткрываемойФормы = "Обработка.РезультатыОбновленияПрограммы.Форма.СообщениеОНеудачномОбновлении"; Если ЗначениеЗаполнено(ИмяПланаОбмена) Тогда МодульОбменДаннымиКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("ОбменДаннымиКлиент"); - МодульОбменДаннымиКлиент.ИмяФормыСообщенияОНеудачномОбновлении(ИмяОткрываемойФормы); + ИмяОткрываемойФормы = МодульОбменДаннымиКлиент.ИмяФормыСообщенияОНеудачномОбновлении(); ПараметрыФормы.Вставить("ИмяПланаОбмена", ИмяПланаОбмена); КонецЕсли; @@ -624,6 +652,11 @@ &НаКлиенте Процедура ОбновитьИнформационнуюБазуДействияПриОшибке(ЗавершитьРаботу, ДополнительныеПараметры) Экспорт + Если БлокировкаИБ <> Неопределено + И БлокировкаИБ.Свойство("СнятьБлокировкуФайловойБазы") Тогда + ОбновлениеИнформационнойБазыСлужебныйВызовСервера.СнятьБлокировкуФайловойБазы(); + КонецЕсли; + Если ЗавершитьРаботу <> Ложь Тогда ЗакрытьФорму(Истина, Ложь); Иначе @@ -660,10 +693,10 @@ КонецЕсли; НачалоСтроки = "ШагПрогресса="; - Если Лев(СообщениеПользователю.Текст, СтрДлина(НачалоСтроки)) = НачалоСтроки Тогда + Если СтрНачинаетсяС(СообщениеПользователю.Текст, НачалоСтроки) Тогда ПрибавкаНаШагеПрогресса = 0; ОписаниеНовогоШага = Сред(СообщениеПользователю.Текст, СтрДлина(НачалоСтроки) + 1); - ПозицияРазделителя = Найти(ОписаниеНовогоШага, "/"); + ПозицияРазделителя = СтрНайти(ОписаниеНовогоШага, "/"); Если ПозицияРазделителя > 0 Тогда НачалоШагаПрогресса = Число( Лев(ОписаниеНовогоШага, ПозицияРазделителя - 1)); ДлинаШагаПрогресса = Число(Сред(ОписаниеНовогоШага, ПозицияРазделителя + 1)); @@ -671,7 +704,7 @@ КонецЕсли; НачалоСтроки = "ПрибавкаНаШагеПрогресса="; - Если Лев(СообщениеПользователю.Текст, СтрДлина(НачалоСтроки)) = НачалоСтроки Тогда + Если СтрНачинаетсяС(СообщениеПользователю.Текст, НачалоСтроки) Тогда ПрибавкаНаШагеПрогресса = Число(Сред(СообщениеПользователю.Текст, СтрДлина(НачалоСтроки) + 1)); КонецЕсли; КонецЦикла; @@ -691,7 +724,7 @@ Для Каждого СообщениеПользователю Из ВсеСообщения Цикл НачалоСтроки = "ОбменДанными="; - Если Лев(СообщениеПользователю.Текст, СтрДлина(НачалоСтроки)) = НачалоСтроки Тогда + Если СтрНачинаетсяС(СообщениеПользователю.Текст, НачалоСтроки) Тогда ИмяПланаОбмена = Сред(СообщениеПользователю.Текст, СтрДлина(НачалоСтроки) + 1); КонецЕсли; @@ -714,4 +747,4 @@ ПараметрыСеанса.ПараметрыКлиентаНаСервере = РезультатОбновления.ПараметрыКлиентаНаСервере; КонецПроцедуры -#КонецОбласти +#КонецОбласти \ No newline at end of file diff --git a/SSL/src/DataProcessors/ОбновлениеИнформационнойБазы/Forms/ИндикацияХодаОтложенногоОбновленияИБ/Form.form b/SSL/src/DataProcessors/РезультатыОбновленияПрограммы/Forms/ИндикацияХодаОтложенногоОбновленияИБ/Form.form similarity index 94% rename from SSL/src/DataProcessors/ОбновлениеИнформационнойБазы/Forms/ИндикацияХодаОтложенногоОбновленияИБ/Form.form rename to SSL/src/DataProcessors/РезультатыОбновленияПрограммы/Forms/ИндикацияХодаОтложенногоОбновленияИБ/Form.form index 980f95db6..a331f54fb 100644 --- a/SSL/src/DataProcessors/ОбновлениеИнформационнойБазы/Forms/ИндикацияХодаОтложенногоОбновленияИБ/Form.form +++ b/SSL/src/DataProcessors/РезультатыОбновленияПрограммы/Forms/ИндикацияХодаОтложенногоОбновленияИБ/Form.form @@ -787,6 +787,70 @@ <horizontalAlign>Left</horizontalAlign> </extInfo> </items> + <items xsi:type="form:FormField"> + <name>ПриоритетОбновления</name> + <id>177</id> + <visible>true</visible> + <enabled>true</enabled> + <userVisible> + <common>true</common> + </userVisible> + <dataPath xsi:type="form:DataPath"> + <segments>ПриоритетОбновления</segments> + </dataPath> + <toolTipRepresentation>Button</toolTipRepresentation> + <handlers> + <event>OnChange</event> + <name>ПриоритетОбновленияПриИзменении</name> + </handlers> + <extendedTooltip> + <name>ПриоритетОбновленияРасширеннаяПодсказка</name> + <id>179</id> + <title> + <key>ru</key> + <value><b>• </><b>Работа пользователей</> - данные обрабатываются медленнее, но меньше нагрузка на сервер и влияние на работу пользователей в программе. +<b>• </><b>Обработка данных</> - выше скорость обработки данных, но выше нагрузка на сервер, а так же существенное замедление работы пользователей в программе. Рекомендуется использовать в тех случаях, когда необходимо быстрее получить доступ к обрабатываемым данным.</value> + + true + Label + true + true + + Left + + + + ПриоритетОбновленияКонтекстноеМеню + 178 + true + + RadioButtonField + Enter + true + Left + true + + + + ru + Работа пользователей + + + РаботаПользователей + + + + + ru + Обработка данных + + + ОбработкаДанных + + + Vertical + + ИнформацияПодсказкаФайловаяБаза2 114 @@ -1628,14 +1692,13 @@ true true true - UseIfNecessary auto true Объект 1 - DataProcessorObject.ОбновлениеИнформационнойБазы + DataProcessorObject.РезультатыОбновленияПрограммы true @@ -1731,6 +1794,24 @@ true + + ПриоритетОбновления + + <key>ru</key> + <value>Приоритет</value> + + 7 + + String + + + + true + + + true + + ЗакрытьФорму @@ -1746,7 +1827,7 @@ <name>ЗакрытьФорму</name> </handler> </action> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <formCommands> @@ -1771,7 +1852,7 @@ <name>ВыполнитьОбновление</name> </handler> </action> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <formCommands> @@ -1793,7 +1874,7 @@ <name>ОткрытьСписокОтложенныхОбработчиков</name> </handler> </action> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <formCommands> @@ -1814,7 +1895,7 @@ <name>ИзменитьРасписание</name> </handler> </action> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <formCommands> @@ -1832,7 +1913,7 @@ <name>СнятьБлокировкуРегламентныхЗаданий</name> </handler> </action> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <parameters> diff --git a/SSL/src/DataProcessors/ОбновлениеИнформационнойБазы/Forms/ИндикацияХодаОтложенногоОбновленияИБ/Help/ru.html b/SSL/src/DataProcessors/РезультатыОбновленияПрограммы/Forms/ИндикацияХодаОтложенногоОбновленияИБ/Help/ru.html similarity index 93% rename from SSL/src/DataProcessors/ОбновлениеИнформационнойБазы/Forms/ИндикацияХодаОтложенногоОбновленияИБ/Help/ru.html rename to SSL/src/DataProcessors/РезультатыОбновленияПрограммы/Forms/ИндикацияХодаОтложенногоОбновленияИБ/Help/ru.html index cc9f26d33..17db3b117 100644 --- a/SSL/src/DataProcessors/ОбновлениеИнформационнойБазы/Forms/ИндикацияХодаОтложенногоОбновленияИБ/Help/ru.html +++ b/SSL/src/DataProcessors/РезультатыОбновленияПрограммы/Forms/ИндикацияХодаОтложенногоОбновленияИБ/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="DataProcessor.ОбновлениеИнформационнойБазы/Help">обновления ИБ</a>.</p> +<p>Предназначена для индикации хода и просмотра результатов отложенного <a href="DataProcessor.РезультатыОбновленияПрограммы/Help">обновления ИБ</a>.</p> <p>При обновлении версии ИБ в программе предусмотрена возможность часть данных обрабатывать отложенно, во время работы программы, в фоновом режиме. В этом случае документы, которые еще не были обработаны, будут недоступны. При попытке открыть такой документ программа выдает сообщение, что действия с документом временно запрещены, так как не завершен переход на новую версию программы. Некоторые отчеты также могут быть недоступны. Программа при попытке сформировать отчет выдает сообщение, что отчет может содержать некорректные данные, так как не завершен переход на новую версию программы.</p> -<p>Открывается автоматически при входе в программу после обновления ИБ одновременно с открытием окна <a href="CommonForm.ОписаниеИзмененийСистемы/Help">Описание изменений программы</a> (<strong>Что нового в конфигурации</strong>).</p> +<p>Открывается автоматически при входе в программу после обновления ИБ одновременно с открытием окна <a href="CommonForm.ОписаниеИзмененийПрограммы/Help">Описание изменений программы</a> (<strong>Что нового в конфигурации</strong>).</p> <p>Сведения о результатах отложенного обновления версии программы также открыть из раздела <strong>Администрирование - Поддержка и обслуживание</strong> по команде <strong>Результаты обновления и дополнительная обработка данных</strong>, а также из окна <strong>Что нового в конфигурации</strong>, перейдя по ссылке <strong>Необходимо выполнить дополнительные процедуры обработки данных</strong>. После начала выполнения ссылка меняет значение на <strong>Выполняются дополнительные процедуры обработки данных</strong>.</p> <h3>Информация о проведенном обновлении ИБ</h3> <ul><li>Указывается, на какую версию проведено обновление, дата и время обновления, длительность процесса обновления.</li></ul><h3>Просмотр журнала регистрации</h3> <ul><li>Перейдите по ссылке <strong>Техническая информация о результатах обновления</strong>, для того чтобы просмотреть события обновления ИБ в <a href="DataProcessor.ЖурналРегистрации/Help">журнале регистрации</a>.</li></ul><h3>Выполнение процедур обработки данных</h3> -<ul><li>Если процедуры обработки данных еще не были запущены, то ссылка принимает значение <strong>Список процедур обработки данных</strong>. Перейдите по ссылке, для того чтобы просмотреть <a href="DataProcessor.ОбновлениеИнформационнойБазы.Form.ОтложенныеОбработчики/Help">список дополнительных процедур</a>. +<ul><li>Если процедуры обработки данных еще не были запущены, то ссылка принимает значение <strong>Список процедур обработки данных</strong>. Перейдите по ссылке, для того чтобы просмотреть <a href="DataProcessor.РезультатыОбновленияПрограммы.Form.ОтложенныеОбработчики/Help">список дополнительных процедур</a>. </li><li>Нажмите <strong>Выполнить</strong>, для того чтобы начать обработку данных. </li><li>Если выполнение начато, то ссылка указывает, сколько процедур выполнено. </li><li>После завершения дополнительных процедур обработки данных указывается дата и время их завершения. Ссылка принимает значение <strong>Все процедуры обновления выполнены успешно</strong> (в скобках указывается количество выполненных процедур).</li></ul><h3>Настройка расписания обработки данных</h3> diff --git a/SSL/src/DataProcessors/ОбновлениеИнформационнойБазы/Forms/ИндикацияХодаОтложенногоОбновленияИБ/Module.bsl b/SSL/src/DataProcessors/РезультатыОбновленияПрограммы/Forms/ИндикацияХодаОтложенногоОбновленияИБ/Module.bsl similarity index 88% rename from SSL/src/DataProcessors/ОбновлениеИнформационнойБазы/Forms/ИндикацияХодаОтложенногоОбновленияИБ/Module.bsl rename to SSL/src/DataProcessors/РезультатыОбновленияПрограммы/Forms/ИндикацияХодаОтложенногоОбновленияИБ/Module.bsl index 005b43a98..04fec3c2c 100644 --- a/SSL/src/DataProcessors/ОбновлениеИнформационнойБазы/Forms/ИндикацияХодаОтложенногоОбновленияИБ/Module.bsl +++ b/SSL/src/DataProcessors/РезультатыОбновленияПрограммы/Forms/ИндикацияХодаОтложенногоОбновленияИБ/Module.bsl @@ -9,8 +9,6 @@ КонецЕсли; ОбновлениеИнформационнойБазыПереопределяемый.ПриПолученииПоясненияДляРезультатовОбновленияПрограммы(ТекстПодсказки); - // Вызов устаревшей процедуры для обратной совместимости. - ОбновлениеИнформационнойБазыПереопределяемый.ПолучитьТекстПоясненияДляРезультатовОбновленияПрограммы(ТекстПодсказки); Если Не ПустаяСтрока(ТекстПодсказки) Тогда Элементы.ИнформацияПодсказка.Заголовок = ТекстПодсказки; @@ -27,8 +25,9 @@ КонецЕсли; - // Зачитываем значение константы. + // Зачитываем значение констант. СведенияОбОбновлении = ОбновлениеИнформационнойБазыСлужебный.СведенияОбОбновленииИнформационнойБазы(); + ПриоритетОбновления = ?(СведенияОбОбновлении.ФорсироватьОтложенноеОбновление, "ОбработкаДанных", "РаботаПользователей"); ВремяОкончанияОбновления = СведенияОбОбновлении.ВремяОкончанияОбновления; ВремяНачалаОтложенногоОбновления = СведенияОбОбновлении.ВремяНачалаОтложенногоОбновления; @@ -45,9 +44,7 @@ СведенияОбОбновлении.ПродолжительностьОбновления); Иначе ЗаголовокОбновлениеЗавершено = НСтр("ru = 'Версия программы успешно обновлена на версию %1'"); - Элементы.ИнформацияОбновлениеЗавершено.Заголовок = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - ЗаголовокОбновлениеЗавершено, - Метаданные.Версия); + Элементы.ИнформацияОбновлениеЗавершено.Заголовок = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ЗаголовокОбновлениеЗавершено, Метаданные.Версия); КонецЕсли; Если СведенияОбОбновлении.ВремяОкончаниеОтложенногоОбновления = Неопределено Тогда @@ -95,7 +92,7 @@ Если Пользователи.ЭтоПолноправныйПользователь(, Истина) Тогда Если ОбщегоНазначенияПовтИсп.РазделениеВключено() Тогда - Элементы.ИзменитьРасписание.Видимость = Ложь; + Элементы.ГруппаНастройкаРасписания.Видимость = Ложь; Иначе Расписание = РегламентныеЗадания.НайтиПредопределенное( Метаданные.РегламентныеЗадания.ОтложенноеОбновлениеИБ).Расписание; @@ -105,6 +102,7 @@ Если ОбщегоНазначенияПовтИсп.РазделениеВключено() Тогда Элементы.ГиперссылкаОсновноеОбновление.Видимость = Ложь; + Элементы.ПриоритетОбновления.Видимость = Ложь; КонецЕсли; СкрытьЛишниеГруппыНаФорме(Параметры.ОткрытиеИзПанелиАдминистрирования); @@ -149,7 +147,7 @@ &НаКлиенте Процедура ИнформацияСтатусОбновленияНажатие(Элемент) - ОткрытьФорму("Обработка.ОбновлениеИнформационнойБазы.Форма.ОтложенныеОбработчики"); + ОткрытьФорму("Обработка.РезультатыОбновленияПрограммы.Форма.ОтложенныеОбработчики"); КонецПроцедуры &НаКлиенте @@ -165,6 +163,11 @@ КонецПроцедуры +&НаКлиенте +Процедура ПриоритетОбновленияПриИзменении(Элемент) + УстановитьПриоритетОбновления(); +КонецПроцедуры + #КонецОбласти #Область ОбработчикиКомандФормы @@ -187,7 +190,7 @@ &НаКлиенте Процедура ОткрытьСписокОтложенныхОбработчиков(Команда) - ОткрытьФорму("Обработка.ОбновлениеИнформационнойБазы.Форма.ОтложенныеОбработчики"); + ОткрытьФорму("Обработка.РезультатыОбновленияПрограммы.Форма.ОтложенныеОбработчики"); КонецПроцедуры &НаКлиенте @@ -203,9 +206,8 @@ &НаКлиенте Процедура СнятьБлокировкуРегламентныхЗаданий(Команда) Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.ЗавершениеРаботыПользователей") Тогда - // Чтобы не находила проверка зависимостей. Связь условная, не требует документирования. - ИмяФормыБлокировкиРаботыПользователей = "Обработка" + ".БлокировкаРаботыПользователей.Форма.Форма"; - ОткрытьФорму(ИмяФормыБлокировкиРаботыПользователей); + МодульСоединенияИБКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("СоединенияИБКлиент"); + МодульСоединенияИБКлиент.ПриОткрытииФормыБлокировкиРаботыПользователей(); КонецЕсли; КонецПроцедуры @@ -240,6 +242,27 @@ КонецПроцедуры +&НаСервере +Процедура УстановитьПриоритетОбновления() + + НачатьТранзакцию(); + Попытка + Блокировка = Новый БлокировкаДанных; + ЭлементБлокировки = Блокировка.Добавить("Константа.СведенияОбОбновленииИБ"); + Блокировка.Заблокировать(); + + СведенияОбОбновлении = ОбновлениеИнформационнойБазыСлужебный.СведенияОбОбновленииИнформационнойБазы(); + СведенияОбОбновлении.ФорсироватьОтложенноеОбновление = ?(ПриоритетОбновления = "ОбработкаДанных", Истина, Ложь); + ОбновлениеИнформационнойБазыСлужебный.ЗаписатьСведенияОбОбновленииИнформационнойБазы(СведенияОбОбновлении); + + ЗафиксироватьТранзакцию(); + Исключение + ОтменитьТранзакцию(); + ВызватьИсключение; + КонецПопытки; + +КонецПроцедуры + &НаКлиенте Процедура ЗапуститьОтложенноеОбновление() @@ -292,6 +315,10 @@ Для Каждого СтрокаДереваВерсия Из СтрокаДереваБиблиотека.Строки Цикл Для Каждого Обработчик Из СтрокаДереваВерсия.Строки Цикл Обработчик.ЧислоПопыток = 0; + Если Обработчик.Статус = "Ошибка" Тогда + Обработчик.СтатистикаВыполнения.Очистить(); + Обработчик.Статус = "НеВыполнено"; + КонецЕсли; КонецЦикла; КонецЦикла; КонецЦикла; @@ -358,16 +385,17 @@ Если ВсегоОбработчиков = 0 Тогда Элементы.ИнформацияОтложенныеОбработчикиОтсутствуют.Видимость = Истина; Элементы.ГруппаПереходКСпискуОтложенныхОбработчиков.Видимость = Ложь; + ТекстСообщения = ""; Иначе - ТекстСообщения = НСтр("ru = 'Все процедуры обновления выполнены успешно (%1)'"); + ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Все процедуры обновления выполнены успешно (%1)'"), УспешноВыполненоОбработчиков); КонецЕсли; Элементы.КартинкаИнформация1.Картинка = БиблиотекаКартинок.Успешно32; Иначе - ТекстСообщения = НСтр("ru = 'Не все процедуры удалось выполнить (выполнено %1 из %2)'"); + ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Не все процедуры удалось выполнить (выполнено %1 из %2)'"), + УспешноВыполненоОбработчиков, ВсегоОбработчиков); Элементы.КартинкаИнформация1.Картинка = БиблиотекаКартинок.Ошибка32; КонецЕсли; - Возврат СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - ТекстСообщения, УспешноВыполненоОбработчиков, ВсегоОбработчиков); + Возврат ТекстСообщения; КонецФункции diff --git a/SSL/src/DataProcessors/РезультатыОбновленияПрограммы/Forms/ОтложенноеОбновлениеНеЗавершено/Form.form b/SSL/src/DataProcessors/РезультатыОбновленияПрограммы/Forms/ОтложенноеОбновлениеНеЗавершено/Form.form new file mode 100644 index 000000000..91edceee1 --- /dev/null +++ b/SSL/src/DataProcessors/РезультатыОбновленияПрограммы/Forms/ОтложенноеОбновлениеНеЗавершено/Form.form @@ -0,0 +1,318 @@ +<?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 + + Картинка + 3 + + <key>ru</key> + <value>Картинка</value> + + true + true + + true + + + КартинкаРасширеннаяПодсказка + 5 + Label + true + true + + Left + + + + КартинкаКонтекстноеМеню + 4 + true + + 3 + true + 2 + true + + + CommonPicture.Предупреждение32 + + + + + ГруппаПояснение + 16 + + Сообщение + 6 + + <key>ru</key> + <value>Дополнительные процедуры обработки данных на предыдущую версию не завершены. +Рекомендуется выполнить восстановление из резервной копии и дождаться их выполнения, +в противном случае это может привести к ошибкам при обновлении или неработоспособности программы.</value> + + true + true + + true + + + СообщениеРасширеннаяПодсказка + 8 + Label + true + true + + Left + + + + СообщениеКонтекстноеМеню + 7 + true + + Label + true + true + + Left + + + + Подсказка + 13 + + <key>ru</key> + <value>Посмотреть статус выполнения дополнительных процедур обработки данных +можно в разделе "Администрирование" - "Поддержка и обслуживание", гиперссылка +"Результаты обновления и дополнительная обработка данных".</value> + + true + true + + true + + + ПодсказкаРасширеннаяПодсказка + 15 + Label + true + true + + Left + + + + ПодсказкаКонтекстноеМеню + 14 + true + + Label + true + true + + Left + + + true + true + + true + + + <key>ru</key> + <value>Группа пояснение</value> + + + ru + Группа пояснение + + + ГруппаПояснениеРасширеннаяПодсказка + 17 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + true + true + Auto + Auto + + + true + true + + true + + + <key>ru</key> + <value>Группа картинка и текст</value> + + + ГруппаКартинкаИТекстРасширеннаяПодсказка + 2 + Label + true + true + + Left + + + UsualGroup + + Auto + true + true + Auto + Auto + + + Bottom + true + + ФормаКоманднаяПанель + -1 + + ФормаЗавершить + 11 + true + true + + true + + + ФормаЗавершитьРасширеннаяПодсказка + 12 + Label + true + true + + Left + + + Form.Command.Завершить + Auto + true + true + true + UserCmds + Auto + + + ФормаПродолжить + 9 + true + true + + true + + + ФормаПродолжитьРасширеннаяПодсказка + 10 + Label + true + true + + Left + + + Form.Command.ПродолжитьОбновление + Normal + Auto + true + true + UserCmds + Auto + + Right + + + OnCreateAtServer + ПриСозданииНаСервере + + LockWholeInterface + true + true + Vertical + true + true + true + auto + true + + Объект + 1 + + DataProcessorObject.РезультатыОбновленияПрограммы + + + true + + + true + +
        true
        +
        + + Завершить + + <key>ru</key> + <value>Завершить работу</value> + + 1 + + ru + Завершить + + + true + + + + Завершить + + + DontUse + Auto + + + ПродолжитьОбновление + + <key>ru</key> + <value>Продолжить</value> + + 2 + + ru + Продолжить обновление + + + true + + + + ПродолжитьОбновление + + + DontUse + Auto + + + + + + + diff --git a/SSL/src/DataProcessors/РезультатыОбновленияПрограммы/Forms/ОтложенноеОбновлениеНеЗавершено/Module.bsl b/SSL/src/DataProcessors/РезультатыОбновленияПрограммы/Forms/ОтложенноеОбновлениеНеЗавершено/Module.bsl new file mode 100644 index 000000000..8152942fc --- /dev/null +++ b/SSL/src/DataProcessors/РезультатыОбновленияПрограммы/Forms/ОтложенноеОбновлениеНеЗавершено/Module.bsl @@ -0,0 +1,47 @@ +#Область ОбработчикиСобытийФормы + +&НаСервере +Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) + + ТекстПодсказки = ""; + ОбновлениеИнформационнойБазыПереопределяемый.ПриПолученииПоясненияДляРезультатовОбновленияПрограммы(ТекстПодсказки); + + Если Не ПустаяСтрока(ТекстПодсказки) Тогда + Элементы.Подсказка.Заголовок = ТекстПодсказки; + КонецЕсли; + + ПараметрыСообщения = Новый Структура; + ПараметрыСообщения.Вставить("КартинкаСообщения", Неопределено); + ПараметрыСообщения.Вставить("ТекстСообщения", ""); + ПараметрыСообщения.Вставить("ЗапрещатьПродолжение", Ложь); + ОбновлениеИнформационнойБазыПереопределяемый.ПриОпределенииПараметровСообщенияОНевыполненныхОтложенныхОбработчиках(ПараметрыСообщения); + + Если ЗначениеЗаполнено(ПараметрыСообщения.ТекстСообщения) Тогда + Элементы.Сообщение.Заголовок = ПараметрыСообщения.ТекстСообщения; + КонецЕсли; + + Если ПараметрыСообщения.КартинкаСообщения <> Неопределено Тогда + Элементы.Картинка.Картинка = ПараметрыСообщения.КартинкаСообщения; + КонецЕсли; + + Если ПараметрыСообщения.ЗапрещатьПродолжение Тогда + Элементы.ФормаПродолжить.Видимость = Ложь; + КонецЕсли; + +КонецПроцедуры + +#КонецОбласти + +#Область ОбработчикиКомандФормы + +&НаКлиенте +Процедура Завершить(Команда) + Закрыть(Ложь); +КонецПроцедуры + +&НаКлиенте +Процедура ПродолжитьОбновление(Команда) + Закрыть(Истина); +КонецПроцедуры + +#КонецОбласти diff --git a/SSL/src/DataProcessors/ОбновлениеИнформационнойБазы/Forms/ОтложенныеОбработчики/Form.form b/SSL/src/DataProcessors/РезультатыОбновленияПрограммы/Forms/ОтложенныеОбработчики/Form.form similarity index 65% rename from SSL/src/DataProcessors/ОбновлениеИнформационнойБазы/Forms/ОтложенныеОбработчики/Form.form rename to SSL/src/DataProcessors/РезультатыОбновленияПрограммы/Forms/ОтложенныеОбработчики/Form.form index 2f43792d4..ff312a048 100644 --- a/SSL/src/DataProcessors/ОбновлениеИнформационнойБазы/Forms/ОтложенныеОбработчики/Form.form +++ b/SSL/src/DataProcessors/РезультатыОбновленияПрограммы/Forms/ОтложенныеОбработчики/Form.form @@ -5,115 +5,163 @@ Дополнительные процедуры обработки данных - ОтборПоСтатусуИПоиск - 52 - - Статус - 54 + ГруппаОтборКоманднаяПанель + 91 + + ОтборПоСтатусуИПоиск + 52 + + Статус + 54 + true + true + + true + + + Статус + + + OnChange + СтатусПриИзменении + + + СтатусРасширеннаяПодсказка + 56 + Label + true + true + + Left + + + + СтатусКонтекстноеМеню + 55 + true + + InputField + Enter + true + Left + true + + 15 + true + true + false + true + true + true + true + true + true + + + ru + Все процедуры + + + ВсеПроцедуры + + + + + ru + Ошибка + + + Ошибка + + + + + ru + Выполняется + + + Выполняется + + + + + ru + Выполнено + + + Выполнено + + + Normal + + + + СтрокаПоиска + 57 + + <key>ru</key> + <value>Найти</value> + + true + true + + true + + + СтрокаПоиска + + + OnChange + СтрокаПоискаПриИзменении + + + СтрокаПоискаРасширеннаяПодсказка + 59 + Label + true + true + + Left + + + + СтрокаПоискаКонтекстноеМеню + 58 + true + + InputField + Enter + true + Left + true + + true + true + false + true + true + true + true + true + Normal + + ru + слово или часть фразы + + + true true true - - Статус - - - OnChange - СтатусПриИзменении - - - СтатусРасширеннаяПодсказка - 56 - Label - true - true - - Left - - - - СтатусКонтекстноеМеню - 55 - true - - InputField - Enter - true - Left - true - - 15 - true - true - false - true - true - true - true - true - true - - - ru - Все процедуры - - - ВсеПроцедуры - - - - - ru - Ошибка - - - Ошибка - - - - - ru - Выполняется - - - Выполняется - - - - - ru - Выполнено - - - Выполнено - - - Normal - - - - СтрокаПоиска - 57 <key>ru</key> - <value>Найти</value> + <value>Отбор по статусу и поиск</value> - true - true - - true - - - СтрокаПоиска - - - OnChange - СтрокаПоискаПриИзменении - - СтрокаПоискаРасширеннаяПодсказка - 59 + ОтборПоСтатусуИПоискРасширеннаяПодсказка + 53 Label true true @@ -121,30 +169,121 @@ Left - - СтрокаПоискаКонтекстноеМеню - 58 - true - - InputField - Enter - true - Left - true - + UsualGroup + + Auto + true + true + Auto + Auto + +
        + + ГруппаКоманднаяПанель + 89 + + Обновить + 97 + true + true + + true + + + ОбновитьРасширеннаяПодсказка + 98 + Label + true + true + + Left + + + Form.Command.Обновить + Normal + Auto true true - false - true - true - true - true - true - Normal - - ru - слово или часть фразы - + UserCmds + Auto + InAdditionalSubmenu + + + Запустить + 93 + true + true + + true + + + ЗапуститьРасширеннаяПодсказка + 94 + Label + true + true + + Left + + + Form.Command.Запустить + Normal + PictureAndText + true + true + UserCmds + Auto + InAdditionalSubmenu + + + Приостановить + 95 + true + true + + true + + + ПриостановитьРасширеннаяПодсказка + 96 + Label + true + true + + Left + + + Form.Command.Приостановить + Normal + PictureAndText + true + true + UserCmds + Auto + InAdditionalSubmenu + + true + true + + true + + + <key>ru</key> + <value>Группа командная панель</value> + + + ГруппаКоманднаяПанельРасширеннаяПодсказка + 90 + Label + true + true + + Left + + + CommandBar + + Left true @@ -154,11 +293,11 @@ <key>ru</key> - <value>Отбор по статусу и поиск</value> + <value>Группа отбор командная панель</value> - ОтборПоСтатусуИПоискРасширеннаяПодсказка - 53 + ГруппаОтборКоманднаяПанельРасширеннаяПодсказка + 92 Label true true @@ -238,6 +377,7 @@ 4 true true + false true true true @@ -277,11 +417,12 @@ Left true - 85 + 36 true true + false true - true + false true true true @@ -324,9 +465,9 @@ Left true + 9 true true - true true @@ -343,7 +484,7 @@ true - ОтложенныеОбработчики.СтатусОбработчика + ОтложенныеОбработчики.СтатусПредставление ОтложенныеОбработчикиСтатусОбработчикаExtendedTooltip @@ -366,9 +507,10 @@ Left true - 5 + 1 true true + false true true true @@ -385,6 +527,8 @@ ru Группа статус картинка + 10 + false ГруппаСтатусКартинкаExtendedTooltip 45 @@ -402,11 +546,102 @@ true + + ОтложенныеОбработчикиИнтервалВыполнения + 80 + true + true + + true + + + ОтложенныеОбработчики.ИнтервалВыполнения + + + ОтложенныеОбработчикиИнтервалВыполненияРасширеннаяПодсказка + 82 + Label + true + true + + Left + + + + ОтложенныеОбработчикиИнтервалВыполненияКонтекстноеМеню + 81 + true + + InputField + Auto + true + Left + true + + 15 + true + true + false + true + true + true + true + true + Normal + + + + ОтложенныеОбработчикиДлительностьВыполнения + 77 + true + true + + true + + + ОтложенныеОбработчики.ДлительностьВыполнения + + + ОтложенныеОбработчикиДлительностьВыполненияРасширеннаяПодсказка + 79 + Label + true + true + + Left + + + + ОтложенныеОбработчикиДлительностьВыполненияКонтекстноеМеню + 78 + true + + InputField + Auto + true + Left + true + + 15 + true + true + false + true + true + true + true + Normal + + ОтложенныеОбработчикиКоманднаяПанель 36 Left + + OnActivateRow + ОтложенныеОбработчикиПриАктивизацииСтроки + ОтложенныеОбработчикиСтрокаПоиска 60 @@ -491,6 +726,58 @@ ОтложенныеОбработчикиКонтекстноеМеню 35 + + КонтекстноеМенюПриостановить + 85 + true + true + + true + + + КонтекстноеМенюПриостановитьРасширеннаяПодсказка + 86 + Label + true + true + + Left + + + Form.Command.Приостановить + Normal + Auto + true + true + UserCmds + Auto + + + КонтекстноеМенюЗапустить + 87 + true + true + + true + + + КонтекстноеМенюЗапуститьРасширеннаяПодсказка + 88 + Label + true + true + + Left + + + Form.Command.Запустить + Normal + Auto + true + true + UserCmds + Auto + true true @@ -776,7 +1063,6 @@ Auto Right - true OnOpen @@ -789,7 +1075,6 @@ Abort Cancel Close - CustomizeForm Help Ignore No @@ -798,7 +1083,7 @@ Retry SaveValues Yes - 85 + 100 LockOwner true true @@ -806,14 +1091,13 @@ true true true - UseIfNecessary auto true Объект 1 - DataProcessorObject.ОбновлениеИнформационнойБазы + DataProcessorObject.РезультатыОбновленияПрограммы true @@ -858,10 +1142,10 @@ - СтатусОбработчика + СтатусПредставление <key>ru</key> - <value>Статус выполнения</value> + <value>Статус</value> 2 @@ -906,26 +1190,6 @@ true - - Вес - - <key>ru</key> - <value>Вес</value> - - 5 - - Number - - 10 - - - - true - - - true - - Номер @@ -964,6 +1228,60 @@ <common>true</common> </edit> </columns> + <columns> + <name>ДлительностьВыполнения</name> + <title> + <key>ru</key> + <value>Длительность</value> + + 10 + + String + + + + true + + + true + + + + ИнтервалВыполнения + + <key>ru</key> + <value>Интервал запуска</value> + + 5 + + String + + + + true + + + true + + + + Статус + + <key>ru</key> + <value>Статус</value> + + 8 + + String + + + + true + + + true + + ВремяНачалаОтложенногоОбновления @@ -1091,6 +1409,23 @@ true + + ПолноправныйПользователь + + <key>ru</key> + <value>Полноправный пользователь</value> + + 10 + + Boolean + + + true + + + true + + ЗакрытьФорму @@ -1106,7 +1441,7 @@ <name>ЗакрытьФорму</name> </handler> </action> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <formCommands> @@ -1131,7 +1466,83 @@ <name>ЗапуститьПовторно</name> </handler> </action> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> + <selectedRowsUse>Auto</selectedRowsUse> + </formCommands> + <formCommands> + <name>Приостановить</name> + <title> + <key>ru</key> + <value>Остановить</value> + + 3 + + ru + Остановить выполнение выделенной процедуры обработки данных. + + + true + + + CommonPicture.ЗнакСтоп + + + + Приостановить + + + DontUse + Auto + + + Запустить + + <key>ru</key> + <value>Запустить</value> + + 4 + + ru + Запустить выполнение выделенной процедуры обработки данных. + + + true + + + StdPicture.GenerateReport + + + + Запустить + + + DontUse + Auto + + + Обновить + + <key>ru</key> + <value>Обновить</value> + + 5 + + ru + Обновляет список дополнительных процедур обработки данных + + + true + + F5 + + StdPicture.Refresh + + + + Обновить + + + DontUse Auto diff --git a/SSL/src/DataProcessors/ОбновлениеИнформационнойБазы/Forms/ОтложенныеОбработчики/Help/ru.html b/SSL/src/DataProcessors/РезультатыОбновленияПрограммы/Forms/ОтложенныеОбработчики/Help/ru.html similarity index 80% rename from SSL/src/DataProcessors/ОбновлениеИнформационнойБазы/Forms/ОтложенныеОбработчики/Help/ru.html rename to SSL/src/DataProcessors/РезультатыОбновленияПрограммы/Forms/ОтложенныеОбработчики/Help/ru.html index 5463801c0..8f939323b 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 new file mode 100644 index 000000000..45dedb94c --- /dev/null +++ b/SSL/src/DataProcessors/РезультатыОбновленияПрограммы/Forms/ОтложенныеОбработчики/Module.bsl @@ -0,0 +1,441 @@ + +#Область ОбработчикиСобытийФормы + +&НаСервере +Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) + + Если Параметры.Свойство("АвтоТест") Тогда // Возврат при получении формы для анализа. + Возврат; + КонецЕсли; + + СведенияОбОбновлении = ОбновлениеИнформационнойБазыСлужебный.СведенияОбОбновленииИнформационнойБазы(); + ВремяНачалаОтложенногоОбновления = СведенияОбОбновлении.ВремяНачалаОтложенногоОбновления; + ВремяОкончанияОтложенногоОбновления = СведенияОбОбновлении.ВремяОкончаниеОтложенногоОбновления; + НомерТекущегоСеанса = СведенияОбОбновлении.НомерСеанса; + ИБФайловая = ОбщегоНазначения.ИнформационнаяБазаФайловая(); + + ПолноправныйПользователь = Пользователи.ЭтоПолноправныйПользователь(, Истина); + Если Не ПолноправныйПользователь Тогда + Элементы.ГруппаПовторныйЗапуск.Видимость = Ложь; + Элементы.Запустить.Видимость = Ложь; + Элементы.Приостановить.Видимость = Ложь; + Элементы.КонтекстноеМенюПриостановить.Видимость = Ложь; + Элементы.КонтекстноеМенюЗапустить.Видимость = Ложь; + КонецЕсли; + + Если Не ИБФайловая Тогда + ОбновлениеВыполняется = (СведенияОбОбновлении.ОтложенноеОбновлениеЗавершеноУспешно = Неопределено); + КонецЕсли; + + Если Не Пользователи.РолиДоступны("ПросмотрЖурналаРегистрации") Тогда + Элементы.ГиперссылкаОтложенноеОбновление.Видимость = Ложь; + КонецЕсли; + + Статус = "ВсеПроцедуры"; + + СформироватьТаблицуОтложенныхОбработчиков(, Истина); + +КонецПроцедуры + +&НаКлиенте +Процедура ПриОткрытии(Отказ) + + Если ОбновлениеВыполняется Тогда + ПодключитьОбработчикОжидания("ОбновитьТаблицуОбработчиков", 15); + КонецЕсли; + +КонецПроцедуры + +#КонецОбласти + +#Область ОбработчикиСобытийЭлементовШапкиФормы + +&НаКлиенте +Процедура ОтложенныеОбработчикиПриАктивизацииСтроки(Элемент) + Если Элемент.ТекущиеДанные = Неопределено + Или Не ПолноправныйПользователь Тогда + Возврат; + КонецЕсли; + + Если Элемент.ТекущиеДанные.Статус = "Выполняется" Тогда + Элементы.КонтекстноеМенюЗапустить.Доступность = Ложь; + Элементы.КонтекстноеМенюПриостановить.Доступность = Истина; + Элементы.Запустить.Доступность = Ложь; + Элементы.Приостановить.Доступность = Истина; + ИначеЕсли Элемент.ТекущиеДанные.Статус = "Приостановлен" Тогда + Элементы.КонтекстноеМенюЗапустить.Доступность = Истина; + Элементы.КонтекстноеМенюПриостановить.Доступность = Ложь; + Элементы.Запустить.Доступность = Истина; + Элементы.Приостановить.Доступность = Ложь; + Иначе + Элементы.КонтекстноеМенюЗапустить.Доступность = Ложь; + Элементы.КонтекстноеМенюПриостановить.Доступность = Ложь; + Элементы.Запустить.Доступность = Ложь; + Элементы.Приостановить.Доступность = Ложь; + КонецЕсли; +КонецПроцедуры + +#КонецОбласти + +#Область ОбработчикиКомандФормы + +&НаКлиенте +Процедура ЗакрытьФорму(Команда) + Закрыть(); +КонецПроцедуры + +&НаКлиенте +Процедура ЗапуститьПовторно(Команда) + Оповестить("ОтложенноеОбновление"); + Закрыть(); +КонецПроцедуры + +&НаКлиенте +Процедура ГиперссылкаОтложенноеОбновлениеНажатие(Элемент) + + ПолучитьСведенияОбОбновлении(); + Если ЗначениеЗаполнено(ВремяНачалаОтложенногоОбновления) И ЗначениеЗаполнено(ВремяОкончанияОтложенногоОбновления) Тогда + ПараметрыФормы = Новый Структура; + ПараметрыФормы.Вставить("ДатаНачала", ВремяНачалаОтложенногоОбновления); + ПараметрыФормы.Вставить("ДатаОкончания", ВремяОкончанияОтложенногоОбновления); + ПараметрыФормы.Вставить("Сеанс", НомерТекущегоСеанса); + + ОткрытьФорму("Обработка.ЖурналРегистрации.Форма.ЖурналРегистрации", ПараметрыФормы); + Иначе + + Если ЗначениеЗаполнено(ВремяНачалаОтложенногоОбновления) Тогда + ТекстПредупреждения = НСтр("ru = 'Обработка данных еще не завершилась.'"); + Иначе + ТекстПредупреждения = НСтр("ru = 'Обработка данных еще не выполнялась.'"); + КонецЕсли; + + ПоказатьПредупреждение(,ТекстПредупреждения); + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура СтатусПриИзменении(Элемент) + Если Статус = "ВсеПроцедуры" Тогда + Элементы.ОтложенныеОбработчики.ОтборСтрок = Новый ФиксированнаяСтруктура; + Иначе + ОтборСтрокТаблицы = Новый Структура; + ОтборСтрокТаблицы.Вставить("Статус", Статус); + Элементы.ОтложенныеОбработчики.ОтборСтрок = Новый ФиксированнаяСтруктура(ОтборСтрокТаблицы); + КонецЕсли; +КонецПроцедуры + +&НаКлиенте +Процедура СтрокаПоискаПриИзменении(Элемент) + ОтложенныеОбработчики.Очистить(); + СформироватьТаблицуОтложенныхОбработчиков(, Истина); +КонецПроцедуры + +&НаКлиенте +Процедура Приостановить(Команда) + ТекущиеДанные = Элементы.ОтложенныеОбработчики.ТекущиеДанные; + Если ТекущиеДанные = Неопределено Тогда + Возврат; + КонецЕсли; + + ПроцедураОбновления = ТекущиеДанные.Идентификатор; + + ТекстВопроса = НСтр("ru = 'Остановка дополнительных процедур обработки данных + |может привести к нестабильной работе или неработоспособности программы. + |Выполнять отключение рекомендуется в случае обнаружения ошибки + |в процедуре обработки данных и только после консультации со службой поддержки, + |т.к. процедуры отработки данных могут зависеть друг от друга.'"); + КнопкиВопроса = Новый СписокЗначений; + КнопкиВопроса.Добавить("Да", "Остановить"); + КнопкиВопроса.Добавить("Нет", "Отмена"); + + Оповещение = Новый ОписаниеОповещения("ПриостановитьВыполнениеОтложенногоОбработчика", ЭтотОбъект, ПроцедураОбновления); + ПоказатьВопрос(Оповещение, ТекстВопроса, КнопкиВопроса); + +КонецПроцедуры + +&НаКлиенте +Процедура Запустить(Команда) + ТекущиеДанные = Элементы.ОтложенныеОбработчики.ТекущиеДанные; + Если ТекущиеДанные = Неопределено Тогда + Возврат; + КонецЕсли; + + ПроцедураОбновления = ТекущиеДанные.Идентификатор; + ЗапуститьВыполнениеОтложенногоОбработчика(ПроцедураОбновления); + Оповестить("ОтложенноеОбновление"); + ПодключитьОбработчикОжидания("ОбновитьТаблицуОбработчиков", 15); + +КонецПроцедуры + +&НаКлиенте +Процедура Обновить(Команда) + ОбновитьСтатусыОбработчиков(Истина); +КонецПроцедуры + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +&НаСервере +Процедура ПриостановитьВыполнениеОтложенногоОбработчика(Результат, ПроцедураОбновления) Экспорт + Если Результат = "Нет" Тогда + Возврат; + КонецЕсли; + + НачатьТранзакцию(); + Попытка + Блокировка = Новый БлокировкаДанных; + ЭлементБлокировки = Блокировка.Добавить("Константа.СведенияОбОбновленииИБ"); + Блокировка.Заблокировать(); + + СведенияОбОбновлении = ОбновлениеИнформационнойБазыСлужебный.СведенияОбОбновленииИнформационнойБазы(); + СведенияОбОбновлении.ПриостановленныеПроцедурыОбновления.Добавить(ПроцедураОбновления); + ОбновлениеИнформационнойБазыСлужебный.ЗаписатьСведенияОбОбновленииИнформационнойБазы(СведенияОбОбновлении); + + ЗафиксироватьТранзакцию(); + Исключение + ОтменитьТранзакцию(); + ВызватьИсключение; + КонецПопытки; + +КонецПроцедуры + +&НаСервере +Процедура ЗапуститьВыполнениеОтложенногоОбработчика(ПроцедураОбновления) + + НачатьТранзакцию(); + Попытка + Блокировка = Новый БлокировкаДанных; + ЭлементБлокировки = Блокировка.Добавить("Константа.СведенияОбОбновленииИБ"); + Блокировка.Заблокировать(); + + СведенияОбОбновлении = ОбновлениеИнформационнойБазыСлужебный.СведенияОбОбновленииИнформационнойБазы(); + СведенияОбОбновлении.ЗапущенныеПроцедурыОбновления.Добавить(ПроцедураОбновления); + ОбновлениеИнформационнойБазыСлужебный.ЗаписатьСведенияОбОбновленииИнформационнойБазы(СведенияОбОбновлении); + + ЗафиксироватьТранзакцию(); + Исключение + ОтменитьТранзакцию(); + ВызватьИсключение; + КонецПопытки; + +КонецПроцедуры + +&НаКлиенте +Процедура ОбновитьТаблицуОбработчиков() + ОбновитьСтатусыОбработчиков(Ложь); +КонецПроцедуры + +&НаКлиенте +Процедура ОбновитьСтатусыОбработчиков(ПоКоманде) + + ВыполненыВсеОбработчики = Истина; + СформироватьТаблицуОтложенныхОбработчиков(ВыполненыВсеОбработчики); + Если Не ПоКоманде И ВыполненыВсеОбработчики Тогда + ОтключитьОбработчикОжидания("ОбновитьТаблицуОбработчиков"); + КонецЕсли; + +КонецПроцедуры + +&НаСервере +Процедура ПолучитьСведенияОбОбновлении() + СведенияОбОбновлении = ОбновлениеИнформационнойБазыСлужебный.СведенияОбОбновленииИнформационнойБазы(); + ВремяНачалаОтложенногоОбновления = СведенияОбОбновлении.ВремяНачалаОтложенногоОбновления; + ВремяОкончанияОтложенногоОбновления = СведенияОбОбновлении.ВремяОкончаниеОтложенногоОбновления; +КонецПроцедуры + +&НаСервере +Процедура СформироватьТаблицуОтложенныхОбработчиков(ВыполненыВсеОбработчики = Истина, НачальноеЗаполнение = Ложь) + + ОбработчикиНеВыполнялись = Истина; + СведенияОбОбновлении = ОбновлениеИнформационнойБазыСлужебный.СведенияОбОбновленииИнформационнойБазы(); + ОбновлениеВыполняется = (СведенияОбОбновлении.ОтложенноеОбновлениеЗавершеноУспешно = Неопределено); + + Для Каждого СтрокаДереваБиблиотека Из СведенияОбОбновлении.ДеревоОбработчиков.Строки Цикл + Для Каждого СтрокаДереваВерсия Из СтрокаДереваБиблиотека.Строки Цикл + Для Каждого СтрокаОбработчика Из СтрокаДереваВерсия.Строки Цикл + + Если Не ПустаяСтрока(СтрокаПоиска) Тогда + Если Не ПустаяСтрока(СтрокаОбработчика.Комментарий) Тогда + Если СтрНайти(ВРег(СтрокаОбработчика.Комментарий), ВРег(СтрокаПоиска)) = 0 Тогда + Продолжить; + КонецЕсли; + Иначе + Если СтрНайти(ВРег(СтрокаОбработчика.ИмяОбработчика), ВРег(СтрокаПоиска)) = 0 Тогда + Продолжить; + КонецЕсли; + КонецЕсли; + КонецЕсли; + ДобавитьОтложенныйОбработчик(СтрокаОбработчика, ОбработчикиНеВыполнялись, ВыполненыВсеОбработчики, НачальноеЗаполнение); + + КонецЦикла; + КонецЦикла; + КонецЦикла; + + Если Статус <> "ВсеПроцедуры" Тогда + ОтборСтрокТаблицы = Новый Структура; + ОтборСтрокТаблицы.Вставить("Статус", Статус); + Элементы.ОтложенныеОбработчики.ОтборСтрок = Новый ФиксированнаяСтруктура(ОтборСтрокТаблицы); + КонецЕсли; + + Если ВыполненыВсеОбработчики Или ОбновлениеВыполняется Тогда + Элементы.ГруппаПовторныйЗапуск.Видимость = Ложь; + КонецЕсли; + + Если ОбработчикиНеВыполнялись Тогда + Элементы.ТекстПояснения.Заголовок = НСтр("ru = 'Рекомендуется запустить невыполненные процедуры обработки данных.'"); + Иначе + Элементы.ТекстПояснения.Заголовок = НСтр("ru = 'Невыполненные процедуры рекомендуется запустить повторно.'"); + КонецЕсли; + + НомерЭлемента = 1; + Для Каждого СтрокаТаблицы Из ОтложенныеОбработчики Цикл + СтрокаТаблицы.Номер = НомерЭлемента; + НомерЭлемента = НомерЭлемента + 1; + КонецЦикла; + + Элементы.ОбновлениеВыполняется.Видимость = ОбновлениеВыполняется; + +КонецПроцедуры + +&НаСервере +Процедура ДобавитьОтложенныйОбработчик(СтрокаОбработчика, ОбработчикиНеВыполнялись, ВыполненыВсеОбработчики, НачальноеЗаполнение) + + Если НачальноеЗаполнение Тогда + СтрокаСписка = ОтложенныеОбработчики.Добавить(); + Иначе + ПараметрыОтбора = Новый Структура; + ПараметрыОтбора.Вставить("Идентификатор", СтрокаОбработчика.ИмяОбработчика); + СтрокаСписка = ОтложенныеОбработчики.НайтиСтроки(ПараметрыОтбора)[0]; + КонецЕсли; + + СтатистикаВыполнения = СтрокаОбработчика.СтатистикаВыполнения; + + НачалоОбработкиДанных = СтатистикаВыполнения["НачалоОбработкиДанных"]; + ЗавершениеОбработкиДанных = СтатистикаВыполнения["ЗавершениеОбработкиДанных"]; + ДлительностьВыполнения = СтатистикаВыполнения["ДлительностьВыполнения"]; + ПрогрессВыполнения = СтатистикаВыполнения["ПрогрессВыполнения"]; + + Прогресс = Неопределено; + Если ПрогрессВыполнения <> Неопределено + И ПрогрессВыполнения.ВсегоОбъектов <> 0 + И ПрогрессВыполнения.ОбработаноОбъектов <> 0 Тогда + Прогресс = ПрогрессВыполнения.ОбработаноОбъектов / ПрогрессВыполнения.ВсегоОбъектов * 100; + Прогресс = Цел(Прогресс); + Прогресс = ?(Прогресс > 100, 99, Прогресс); + КонецЕсли; + + СтрокаСписка.Идентификатор = СтрокаОбработчика.ИмяОбработчика; + СтрокаСписка.Обработчик = ?(ЗначениеЗаполнено(СтрокаОбработчика.Комментарий), + СтрокаОбработчика.Комментарий, + ПроцедураОбработкиДанных(СтрокаОбработчика.ИмяОбработчика)); + + ШаблонИнтервалВыполнения = + НСтр("ru = '%1 - + |%2'"); + + ШаблонИнформацияОПроцедуреОбновления = НСтр("ru = '%1%2Процедура ""%3"" обработки данных %4.'"); + + СтрокаСписка.Статус = СтрокаОбработчика.Статус; + Если СтрокаОбработчика.Статус = "Выполнено" Тогда + + ОбработчикиНеВыполнялись = Ложь; + ПредставлениеСтатусаВыполнения = НСтр("ru = 'завершилась успешно'"); + СтрокаСписка.СтатусПредставление = НСтр("ru = 'Выполнено'"); + СтрокаСписка.СтатусКартинка = БиблиотекаКартинок.Успешно; + СтрокаСписка.ДлительностьВыполнения = ДлительностьВыполненияПроцедурыОбновления(ДлительностьВыполнения); + ИначеЕсли СтрокаОбработчика.Статус = "Выполняется" Тогда + + ОбработчикиНеВыполнялись = Ложь; + ВыполненыВсеОбработчики = Ложь; + СтрокаСписка.СтатусКартинка = Новый Картинка; + ПредставлениеСтатусаВыполнения = НСтр("ru = 'в данный момент выполняется'"); + Если Прогресс <> Неопределено Тогда + ШаблонСтатус = НСтр("ru = 'Выполняется (%1%%)'"); + СтрокаСписка.СтатусПредставление = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонСтатус, Прогресс) + Иначе + СтрокаСписка.СтатусПредставление = НСтр("ru = 'Выполняется'"); + КонецЕсли; + ИначеЕсли СтрокаОбработчика.Статус = "Ошибка" Тогда + + ОбработчикиНеВыполнялись = Ложь; + ВыполненыВсеОбработчики = Ложь; + ПредставлениеСтатусаВыполнения = НСтр("ru = 'завершилась успешно'"); + СтрокаСписка.ИнформацияОПроцедуреОбновления = СтрокаОбработчика.ИнформацияОбОшибке; + СтрокаСписка.СтатусПредставление = НСтр("ru = 'Ошибка'"); + СтрокаСписка.СтатусКартинка = БиблиотекаКартинок.Остановить; + СтрокаСписка.ДлительностьВыполнения = ДлительностьВыполненияПроцедурыОбновления(ДлительностьВыполнения); + ИначеЕсли СтрокаОбработчика.Статус = "Приостановлен" Тогда + + ОбработчикиНеВыполнялись = Ложь; + ВыполненыВсеОбработчики = Ложь; + ПредставлениеСтатусаВыполнения = НСтр("ru = 'остановлена администратором'"); + СтрокаСписка.СтатусПредставление = НСтр("ru = 'Остановлено'"); + СтрокаСписка.СтатусКартинка = БиблиотекаКартинок.ЗнакСтоп; + Иначе + + ВыполненыВсеОбработчики = Ложь; + ПредставлениеСтатусаВыполнения = НСтр("ru = 'еще не выполнялась'"); + СтрокаСписка.СтатусПредставление = НСтр("ru = 'Не выполнялась'"); + КонецЕсли; + + Если Не ПустаяСтрока(СтрокаОбработчика.Комментарий) Тогда + Отступ = Символы.ПС + Символы.ПС; + Иначе + Отступ = ""; + КонецЕсли; + + Если СтрокаОбработчика.Статус <> "Ошибка" Тогда + СтрокаСписка.ИнформацияОПроцедуреОбновления = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + ШаблонИнформацияОПроцедуреОбновления, + СтрокаОбработчика.Комментарий, + Отступ, + СтрокаОбработчика.ИмяОбработчика, + ПредставлениеСтатусаВыполнения); + КонецЕсли; + + СтрокаСписка.ИнтервалВыполнения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + ШаблонИнтервалВыполнения, + Строка(НачалоОбработкиДанных), + Строка(ЗавершениеОбработкиДанных)); + +КонецПроцедуры + +&НаСервере +Функция ПроцедураОбработкиДанных(ИмяОбработчика) + ИмяОбработчикаМассив = СтрРазделить(ИмяОбработчика, "."); + ЭлементовМассива = ИмяОбработчикаМассив.Количество(); + Возврат ИмяОбработчикаМассив[ЭлементовМассива-1]; +КонецФункции + +&НаСервере +Функция ДлительностьВыполненияПроцедурыОбновления(ДлительностьВыполнения) + + Если ДлительностьВыполнения = Неопределено Тогда + Возврат ""; + КонецЕсли; + + ШаблонСекунды = НСтр("ru = '%1 сек.'"); + ШаблонМинуты = НСтр("ru = '%1 мин. %2 сек.'"); + ШаблонЧасы = НСтр("ru = '%1 ч. %2 мин.'"); + + ДлительностьВСекундах = ДлительностьВыполнения/1000; + ДлительностьВСекундах = Окр(ДлительностьВСекундах); + Если ДлительностьВСекундах < 1 Тогда + Возврат НСтр("ru = 'менее секунды'") + ИначеЕсли ДлительностьВСекундах < 60 Тогда + Возврат СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонСекунды, ДлительностьВСекундах); + ИначеЕсли ДлительностьВСекундах < 3600 Тогда + Минуты = ДлительностьВСекундах/60; + Секунды = (Минуты - Цел(Минуты))*60; + Возврат СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонМинуты, Цел(Минуты), Цел(Секунды)); + Иначе + Часы = ДлительностьВСекундах/60/60; + Минуты = (Часы - Цел(Часы))*60; + Возврат СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонЧасы, Цел(Часы), Цел(Минуты)); + КонецЕсли; + +КонецФункции + +#КонецОбласти \ 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 e4e32e157..068153253 100644 --- a/SSL/src/DataProcessors/ОбновлениеИнформационнойБазы/Forms/СообщениеОНеудачномОбновлении/Form.form +++ b/SSL/src/DataProcessors/РезультатыОбновленияПрограммы/Forms/СообщениеОНеудачномОбновлении/Form.form @@ -284,7 +284,6 @@ true true true - UseIfNecessary auto true @@ -371,7 +370,7 @@ ЗавершитьРаботу - Auto + DontUse Auto @@ -393,7 +392,7 @@ ПерезагрузитьПрограмму - Auto + DontUse Auto @@ -411,7 +410,7 @@ ОткрытьВнешнююОбработку - Auto + DontUse Auto diff --git a/SSL/src/DataProcessors/ОбновлениеИнформационнойБазы/Forms/СообщениеОНеудачномОбновлении/Help/ru.html b/SSL/src/DataProcessors/РезультатыОбновленияПрограммы/Forms/СообщениеОНеудачномОбновлении/Help/ru.html similarity index 86% rename from SSL/src/DataProcessors/ОбновлениеИнформационнойБазы/Forms/СообщениеОНеудачномОбновлении/Help/ru.html rename to SSL/src/DataProcessors/РезультатыОбновленияПрограммы/Forms/СообщениеОНеудачномОбновлении/Help/ru.html index e666b5faa..4c1f361ad 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 similarity index 92% rename from SSL/src/DataProcessors/ОбновлениеИнформационнойБазы/Forms/СообщениеОНеудачномОбновлении/Module.bsl rename to SSL/src/DataProcessors/РезультатыОбновленияПрограммы/Forms/СообщениеОНеудачномОбновлении/Module.bsl index 72f7f6437..416cf38d6 100644 --- a/SSL/src/DataProcessors/ОбновлениеИнформационнойБазы/Forms/СообщениеОНеудачномОбновлении/Module.bsl +++ b/SSL/src/DataProcessors/РезультатыОбновленияПрограммы/Forms/СообщениеОНеудачномОбновлении/Module.bsl @@ -11,10 +11,9 @@ ЗаписьЖурналаРегистрации(ОбновлениеИнформационнойБазы.СобытиеЖурналаРегистрации(), УровеньЖурналаРегистрации.Ошибка, , , Параметры.ПодробноеСообщениеОбОшибке); - ТекстСообщенияОбОшибке = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'При обновлении версии программы возникла ошибка: - | - |%1'"), + ТекстСообщенияОбОшибке = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'При обновлении версии программы возникла ошибка: + | + |%1'"), Параметры.КраткоеСообщениеОбОшибке); Элементы.ТекстСообщенияОбОшибке.Заголовок = ТекстСообщенияОбОшибке; @@ -26,8 +25,6 @@ Элементы.ФормаОткрытьВнешнююОбработку.Видимость = Ложь; КонецЕсли; - ПоправкаКВремениСеанса = ТекущаяДатаСеанса() - ТекущаяДата(); // Исключение. - ИспользуютсяПрофилиБезопасности = ПолучитьФункциональнуюОпцию("ИспользуютсяПрофилиБезопасности"); КонецПроцедуры @@ -40,11 +37,11 @@ Процедура ПоказатьСведенияОРезультатахОбновленияНажатие(Элемент) ПараметрыФормы = Новый Структура; - ПараметрыФормы.Вставить("ДатаНачала", ВремяНачалаОбновления - ПоправкаКВремениСеанса); - ПараметрыФормы.Вставить("ДатаОкончания", ВремяОкончанияОбновления - ПоправкаКВремениСеанса); + ПараметрыФормы.Вставить("ДатаНачала", ВремяНачалаОбновления); + ПараметрыФормы.Вставить("ДатаОкончания", ВремяОкончанияОбновления); ПараметрыФормы.Вставить("ЗапускатьНеВФоне", Истина); - ОткрытьФорму("Обработка.ЖурналРегистрации.Форма.ЖурналРегистрации", ПараметрыФормы); + ОткрытьФорму("Обработка.ЖурналРегистрации.Форма.ЖурналРегистрации", ПараметрыФормы,,,,,, РежимОткрытияОкнаФормы.БлокироватьВесьИнтерфейс); КонецПроцедуры diff --git a/SSL/src/DataProcessors/ОбновлениеИнформационнойБазы/Help/ru.html b/SSL/src/DataProcessors/РезультатыОбновленияПрограммы/Help/ru.html similarity index 71% rename from SSL/src/DataProcessors/ОбновлениеИнформационнойБазы/Help/ru.html rename to SSL/src/DataProcessors/РезультатыОбновленияПрограммы/Help/ru.html index dfe1cf24e..c4a394b72 100644 --- a/SSL/src/DataProcessors/ОбновлениеИнформационнойБазы/Help/ru.html +++ b/SSL/src/DataProcessors/РезультатыОбновленияПрограммы/Help/ru.html @@ -13,16 +13,16 @@
          вход пользователей в программу разрешен.
        • применяется для обновления "архивной" части данных ИБ, с которыми пользователи либо активно не работают, либо могут начинать свою работу, не дожидаясь завершения обработки.

      Обновление информационной базы

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

        Описание изменений программы

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

        Особенности и преимущества отложенного обновления ИБ

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

        Особенности и преимущества отложенного обновления ИБ

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

        Контроль процесса отложенного обновления

        • В тех случаях, когда переход на новую версию программы предусматривает фоновую отложенную обработку данных, с ходом выполнения отложенных процедур обновления версии программы администратор может ознакомиться выполнив команду Результаты обновления и дополнительная обработка данных раздела Администрирование - Поддержка и обслуживание или по ссылке Выполняются дополнительные процедуры обработки данных в окне Что нового в конфигурации.
        \ No newline at end of file diff --git a/SSL/src/DataProcessors/ОбновлениеИнформационнойБазы/ОбновлениеИнформационнойБазы.mdo b/SSL/src/DataProcessors/РезультатыОбновленияПрограммы/РезультатыОбновленияПрограммы.mdo similarity index 79% rename from SSL/src/DataProcessors/ОбновлениеИнформационнойБазы/ОбновлениеИнформационнойБазы.mdo rename to SSL/src/DataProcessors/РезультатыОбновленияПрограммы/РезультатыОбновленияПрограммы.mdo index 61fc2f840..d71e12ea3 100644 --- a/SSL/src/DataProcessors/ОбновлениеИнформационнойБазы/ОбновлениеИнформационнойБазы.mdo +++ b/SSL/src/DataProcessors/РезультатыОбновленияПрограммы/РезультатыОбновленияПрограммы.mdo @@ -4,13 +4,13 @@ - ОбновлениеИнформационнойБазы + РезультатыОбновленияПрограммы ru Результаты обновления программы true - DataProcessor.ОбновлениеИнформационнойБазы.Form.ИндикацияХодаОтложенногоОбновленияИБ + DataProcessor.РезультатыОбновленияПрограммы.Form.ИндикацияХодаОтложенногоОбновленияИБ true @@ -73,4 +73,13 @@ PersonalComputer MobileDevice + + ОтложенноеОбновлениеНеЗавершено + + ru + Отложенное обновление не завершено + + PersonalComputer + MobileDevice + diff --git a/SSL/src/DataProcessors/РекомендацияПоПовышениюСкоростиРаботы/РекомендацияПоПовышениюСкоростиРаботы.mdo b/SSL/src/DataProcessors/РекомендацияПоПовышениюСкоростиРаботы/РекомендацияПоПовышениюСкоростиРаботы.mdo index 0973358db..dad5c917c 100644 --- a/SSL/src/DataProcessors/РекомендацияПоПовышениюСкоростиРаботы/РекомендацияПоПовышениюСкоростиРаботы.mdo +++ b/SSL/src/DataProcessors/РекомендацияПоПовышениюСкоростиРаботы/РекомендацияПоПовышениюСкоростиРаботы.mdo @@ -1,8 +1,8 @@ - + - - + + РекомендацияПоПовышениюСкоростиРаботы @@ -11,7 +11,7 @@ true DataProcessor.РекомендацияПоПовышениюСкоростиРаботы.Form.Форма - + Форма ru diff --git a/SSL/src/DataProcessors/СбросНастроекПроверкиКонтрагентов/Commands/ОткрытьФормуСбросаНастроек/CommandModule.bsl b/SSL/src/DataProcessors/СбросНастроекПроверкиКонтрагентов/Commands/СбросНастроекПроверкиКонтрагентов/CommandModule.bsl similarity index 90% rename from SSL/src/DataProcessors/СбросНастроекПроверкиКонтрагентов/Commands/ОткрытьФормуСбросаНастроек/CommandModule.bsl rename to SSL/src/DataProcessors/СбросНастроекПроверкиКонтрагентов/Commands/СбросНастроекПроверкиКонтрагентов/CommandModule.bsl index ba530483d..deea668ed 100644 --- a/SSL/src/DataProcessors/СбросНастроекПроверкиКонтрагентов/Commands/ОткрытьФормуСбросаНастроек/CommandModule.bsl +++ b/SSL/src/DataProcessors/СбросНастроекПроверкиКонтрагентов/Commands/СбросНастроекПроверкиКонтрагентов/CommandModule.bsl @@ -1,6 +1,10 @@ +#Область ОбработчикиСобытий + &НаКлиенте Процедура ОбработкаКоманды(ПараметрКоманды, ПараметрыВыполненияКоманды) ПараметрыФормы = Новый Структура("", ); ОткрытьФорму("Обработка.СбросНастроекПроверкиКонтрагентов.Форма", ПараметрыФормы, ПараметрыВыполненияКоманды.Источник, ПараметрыВыполненияКоманды.Уникальность, ПараметрыВыполненияКоманды.Окно, ПараметрыВыполненияКоманды.НавигационнаяСсылка); КонецПроцедуры + +#КонецОбласти \ No newline at end of file diff --git a/SSL/src/DataProcessors/СбросНастроекПроверкиКонтрагентов/Forms/Форма/Form.form b/SSL/src/DataProcessors/СбросНастроекПроверкиКонтрагентов/Forms/Форма/Form.form index 7c92167a0..b1a7aa478 100644 --- a/SSL/src/DataProcessors/СбросНастроекПроверкиКонтрагентов/Forms/Форма/Form.form +++ b/SSL/src/DataProcessors/СбросНастроекПроверкиКонтрагентов/Forms/Форма/Form.form @@ -83,7 +83,7 @@ СбросНастроек - Auto + DontUse Auto diff --git a/SSL/src/DataProcessors/СбросНастроекПроверкиКонтрагентов/СбросНастроекПроверкиКонтрагентов.mdo b/SSL/src/DataProcessors/СбросНастроекПроверкиКонтрагентов/СбросНастроекПроверкиКонтрагентов.mdo index 55a133f1f..fefaff2d3 100644 --- a/SSL/src/DataProcessors/СбросНастроекПроверкиКонтрагентов/СбросНастроекПроверкиКонтрагентов.mdo +++ b/SSL/src/DataProcessors/СбросНастроекПроверкиКонтрагентов/СбросНастроекПроверкиКонтрагентов.mdo @@ -20,7 +20,7 @@ MobileDevice - ОткрытьФормуСбросаНастроек + СбросНастроекПроверкиКонтрагентов ru Сброс настроек проверки контрагентов diff --git a/SSL/src/DataProcessors/СдвигГраницыИтогов/Forms/ОсновнаяФорма/Form.form b/SSL/src/DataProcessors/СдвигГраницыИтогов/Forms/ОсновнаяФорма/Form.form index d0dabf3b4..25a7e1b59 100644 --- a/SSL/src/DataProcessors/СдвигГраницыИтогов/Forms/ОсновнаяФорма/Form.form +++ b/SSL/src/DataProcessors/СдвигГраницыИтогов/Forms/ОсновнаяФорма/Form.form @@ -211,7 +211,6 @@ true true true - UseIfNecessary auto true diff --git a/SSL/src/DataProcessors/СдвигГраницыИтогов/Forms/ОсновнаяФорма/Module.bsl b/SSL/src/DataProcessors/СдвигГраницыИтогов/Forms/ОсновнаяФорма/Module.bsl index df37a9b0f..a3a8a662c 100644 --- a/SSL/src/DataProcessors/СдвигГраницыИтогов/Forms/ОсновнаяФорма/Module.bsl +++ b/SSL/src/DataProcessors/СдвигГраницыИтогов/Forms/ОсновнаяФорма/Module.bsl @@ -49,12 +49,11 @@ &НаКлиенте Процедура ФоновоеЗаданиеПроверитьНаКлиенте() - ПараметрыЗадания = ПеременныеКлиента.ПараметрыЗадания; - ФоновоеЗаданиеОбновитьНаСервере(ПараметрыЗадания); - Если ПараметрыЗадания.ЗаданиеВыполнено Тогда + ФоновоеЗаданиеОбновитьНаСервере(ПеременныеКлиента.ПараметрыЗадания); + Если ПеременныеКлиента.ПараметрыЗадания.ЗаданиеВыполнено Тогда СообщитьРезультатЗакрытьФорму(); Иначе - ПодключитьОбработчикОжидания("ФоновоеЗаданиеПроверитьНаКлиенте", ПараметрыЗадания.ТекущийИнтервал, Истина); + ПодключитьОбработчикОжидания("ФоновоеЗаданиеПроверитьНаКлиенте", ПеременныеКлиента.ПараметрыЗадания.ТекущийИнтервал, Истина); КонецЕсли; КонецПроцедуры diff --git a/SSL/src/Catalogs/Файлы/Forms/ВыборУстройстваСканирования/Form.form b/SSL/src/DataProcessors/Сканирование/Forms/ВыборУстройстваСканирования/Form.form similarity index 98% rename from SSL/src/Catalogs/Файлы/Forms/ВыборУстройстваСканирования/Form.form rename to SSL/src/DataProcessors/Сканирование/Forms/ВыборУстройстваСканирования/Form.form index 1fbcb6eaa..38be04fd6 100644 --- a/SSL/src/Catalogs/Файлы/Forms/ВыборУстройстваСканирования/Form.form +++ b/SSL/src/DataProcessors/Сканирование/Forms/ВыборУстройстваСканирования/Form.form @@ -114,7 +114,6 @@ Vertical true true - UseIfNecessary auto true @@ -155,7 +154,7 @@ ВыбратьСканер - Auto + DontUse Auto diff --git a/SSL/src/Catalogs/Файлы/Forms/ВыборУстройстваСканирования/Help/ru.html b/SSL/src/DataProcessors/Сканирование/Forms/ВыборУстройстваСканирования/Help/ru.html similarity index 86% rename from SSL/src/Catalogs/Файлы/Forms/ВыборУстройстваСканирования/Help/ru.html rename to SSL/src/DataProcessors/Сканирование/Forms/ВыборУстройстваСканирования/Help/ru.html index b02f921d2..a68cfd1b1 100644 --- a/SSL/src/Catalogs/Файлы/Forms/ВыборУстройстваСканирования/Help/ru.html +++ b/SSL/src/DataProcessors/Сканирование/Forms/ВыборУстройстваСканирования/Help/ru.html @@ -1,4 +1,4 @@ -

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

        +

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

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

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

        \ No newline at end of file diff --git a/SSL/src/Catalogs/Файлы/Forms/ВыборУстройстваСканирования/Module.bsl b/SSL/src/DataProcessors/Сканирование/Forms/ВыборУстройстваСканирования/Module.bsl similarity index 85% rename from SSL/src/Catalogs/Файлы/Forms/ВыборУстройстваСканирования/Module.bsl rename to SSL/src/DataProcessors/Сканирование/Forms/ВыборУстройстваСканирования/Module.bsl index fe990a43d..5913500f1 100644 --- a/SSL/src/Catalogs/Файлы/Forms/ВыборУстройстваСканирования/Module.bsl +++ b/SSL/src/DataProcessors/Сканирование/Forms/ВыборУстройстваСканирования/Module.bsl @@ -4,8 +4,8 @@ &НаКлиенте Процедура ПриОткрытии(Отказ) КоличествоЭлементов = 0; - Если РаботаСФайламиСлужебныйКлиент.ПроинициализироватьКомпоненту() Тогда - МассивУстройств = РаботаСФайламиСлужебныйКлиент.ПолучитьУстройства(); + Если ФайловыеФункцииСлужебныйКлиент.ПроинициализироватьКомпоненту() Тогда + МассивУстройств = ФайловыеФункцииСлужебныйКлиент.ПолучитьУстройства(); Для Каждого Строка Из МассивУстройств Цикл КоличествоЭлементов = КоличествоЭлементов + 1; Элементы.ИмяУстройства.СписокВыбора.Добавить(Строка); diff --git a/SSL/src/Catalogs/Файлы/Forms/НастройкаСканирования/Form.form b/SSL/src/DataProcessors/Сканирование/Forms/НастройкаСканирования/Form.form similarity index 90% rename from SSL/src/Catalogs/Файлы/Forms/НастройкаСканирования/Form.form rename to SSL/src/DataProcessors/Сканирование/Forms/НастройкаСканирования/Form.form index 399d06770..e10001dd9 100644 --- a/SSL/src/Catalogs/Файлы/Forms/НастройкаСканирования/Form.form +++ b/SSL/src/DataProcessors/Сканирование/Forms/НастройкаСканирования/Form.form @@ -1,77 +1,5 @@ - - УстановитьКомпонентуСканирования - 11 - true - true - - true - - false - - УстановитьКомпонентуСканированияExtendedTooltip - 53 - Label - true - true - - Left - - - UsualButton - Form.Command.УстановитьКомпонентуСканирования - Normal - Auto - true - true - UserCmds - Auto - - - ВерсияКомпонентыСканирования - 12 - true - true - - true - - - ВерсияКомпонентыСканирования - - - ВерсияКомпонентыСканированияExtendedTooltip - 54 - Label - true - true - - Left - - - - ВерсияКомпонентыСканированияКонтекстноеМеню - 13 - true - - InputField - true - Enter - true - Left - true - - 5 - true - true - false - true - true - true - true - Normal - - ГруппаНастройки 24 @@ -129,6 +57,288 @@ Normal + + ГруппаПараметрыСканирования + 38 + + Разрешение + 14 + true + true + + true + + + Разрешение + + + РазрешениеExtendedTooltip + 72 + Label + true + true + + Left + + + + РазрешениеКонтекстноеМеню + 15 + true + + InputField + Enter + true + Left + true + + 13 + true + true + false + true + true + true + true + Normal + + + + Цветность + 16 + true + true + + true + + + Цветность + + + ЦветностьExtendedTooltip + 73 + Label + true + true + + Left + + + + ЦветностьКонтекстноеМеню + 17 + true + + InputField + Enter + true + Left + true + + 13 + true + true + false + true + true + true + true + Normal + + + + Поворот + 20 + + <key>ru</key> + <value>Поворот</value> + + true + true + + true + + + Поворот + + + ПоворотExtendedTooltip + 74 + Label + true + true + + Left + + + + ПоворотКонтекстноеМеню + 21 + true + + InputField + Enter + true + Left + true + + 13 + true + true + false + true + true + true + true + Normal + + + + РазмерБумаги + 22 + true + true + + true + + + РазмерБумаги + + + РазмерБумагиExtendedTooltip + 75 + Label + true + true + + Left + + + + РазмерБумагиКонтекстноеМеню + 23 + true + + InputField + Enter + true + Left + true + + 13 + true + true + false + true + true + true + true + Normal + + + + ДвустороннееСканирование + 28 + true + true + + true + + + ДвустороннееСканирование + + Right + + ДвустороннееСканированиеExtendedTooltip + 76 + Label + true + true + + Left + + + + ДвустороннееСканированиеКонтекстноеМеню + 29 + true + + CheckBoxField + Enter + true + Left + true + + + + ПоказыватьДиалогСканера + 1 + true + true + + true + + + ПоказыватьДиалогСканера + + Right + + ПоказыватьДиалогСканераExtendedTooltip + 77 + Label + true + true + + Left + + + + ПоказыватьДиалогСканераКонтекстноеМеню + 2 + true + + CheckBoxField + Enter + true + Left + true + + + true + true + + true + + + <key>ru</key> + <value>Основное</value> + + + ru + Группа параметры сканирования + + + ГруппаПараметрыСканированияExtendedTooltip + 71 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + WeakSeparation + true + true + auto + Auto + Auto + + ГруппаPDF 36 @@ -250,6 +460,65 @@ Auto + true + true + + true + + + Группа1РасширеннаяПодсказка + 82 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + true + true + Auto + Auto + + + + Группа2 + 83 + + ОткрытьНомераОтсканированныхФайлов + 79 + + <key>ru</key> + <value>Номера отсканированных файлов</value> + + true + true + + true + + + ОткрытьНомераОтсканированныхФайловРасширеннаяПодсказка + 80 + Label + true + true + + Left + + + Hyperlink + Form.Command.ОткрытьНомераОтсканированныхФайлов + Normal + Auto + true + true + UserCmds + Auto + ГруппаФорматХраненияОдиночный 37 @@ -610,34 +879,6 @@ Auto - true - true - - true - - - Группа1РасширеннаяПодсказка - 82 - Label - true - true - - Left - - - UsualGroup - - Vertical - Auto - true - true - Auto - Auto - - - - Группа2 - 83 ГруппаФорматХраненияМногостраничный 39 @@ -721,316 +962,6 @@ Auto - - ГруппаПараметрыСканирования - 38 - - Разрешение - 14 - true - true - - true - - - Разрешение - - - РазрешениеExtendedTooltip - 72 - Label - true - true - - Left - - - - РазрешениеКонтекстноеМеню - 15 - true - - InputField - Enter - true - Left - true - - 13 - true - true - false - true - true - true - true - Normal - - - - Цветность - 16 - true - true - - true - - - Цветность - - - ЦветностьExtendedTooltip - 73 - Label - true - true - - Left - - - - ЦветностьКонтекстноеМеню - 17 - true - - InputField - Enter - true - Left - true - - 13 - true - true - false - true - true - true - true - Normal - - - - Поворот - 20 - - <key>ru</key> - <value>Поворот</value> - - true - true - - true - - - Поворот - - - ПоворотExtendedTooltip - 74 - Label - true - true - - Left - - - - ПоворотКонтекстноеМеню - 21 - true - - InputField - Enter - true - Left - true - - 13 - true - true - false - true - true - true - true - Normal - - - - РазмерБумаги - 22 - true - true - - true - - - РазмерБумаги - - - РазмерБумагиExtendedTooltip - 75 - Label - true - true - - Left - - - - РазмерБумагиКонтекстноеМеню - 23 - true - - InputField - Enter - true - Left - true - - 13 - true - true - false - true - true - true - true - Normal - - - - ДвустороннееСканирование - 28 - true - true - - true - - - ДвустороннееСканирование - - Right - - ДвустороннееСканированиеExtendedTooltip - 76 - Label - true - true - - Left - - - - ДвустороннееСканированиеКонтекстноеМеню - 29 - true - - CheckBoxField - Enter - true - Left - true - - - - ПоказыватьДиалогСканера - 1 - true - true - - true - - - ПоказыватьДиалогСканера - - Right - - ПоказыватьДиалогСканераExtendedTooltip - 77 - Label - true - true - - Left - - - - ПоказыватьДиалогСканераКонтекстноеМеню - 2 - true - - CheckBoxField - Enter - true - Left - true - - - - УстановитьСтандартныеНастройки - 25 - true - true - - true - - false - - УстановитьСтандартныеНастройкиExtendedTooltip - 78 - Label - true - true - - Left - - - UsualButton - Form.Command.УстановитьСтандартныеНастройки - Normal - Auto - true - true - UserCmds - Auto - - true - true - - true - - - <key>ru</key> - <value>Параметры сканирования</value> - - - ru - Группа параметры сканирования - - - ГруппаПараметрыСканированияExtendedTooltip - 71 - Label - true - true - - Left - - - UsualGroup - - Vertical - Auto - WeakSeparation - true - true - auto - Auto - Auto - - true true @@ -1089,33 +1020,6 @@ Auto - - ОткрытьНомераОтсканированныхФайлов - 79 - true - true - - true - - - ОткрытьНомераОтсканированныхФайловРасширеннаяПодсказка - 80 - Label - true - true - - Left - - - UsualButton - Form.Command.ОткрытьНомераОтсканированныхФайлов - Normal - Auto - true - true - UserCmds - Auto - Bottom true @@ -1202,6 +1106,65 @@ UserCmds Auto + + ГруппаЕще + 94 + + УстановитьСтандартныеНастройки + 25 + true + true + + true + + false + + УстановитьСтандартныеНастройкиExtendedTooltip + 78 + Label + true + true + + Left + + + Form.Command.УстановитьСтандартныеНастройки + Normal + Auto + true + true + UserCmds + Auto + + true + true + + true + + + <key>ru</key> + <value>Еще</value> + + + ru + Группа еще + + + ГруппаЕщеРасширеннаяПодсказка + 95 + Label + true + true + + Left + + + Popup + + Auto + Normal + + Right true @@ -1220,7 +1183,6 @@ Vertical true true - UseIfNecessary auto true @@ -1622,6 +1584,24 @@ true + + ВариантСохранения + + <key>ru</key> + <value>Вариант сохранения</value> + + 24 + + String + + + + true + + + true + + ОК @@ -1641,29 +1621,7 @@ <name>ОК</name> </handler> </action> - <currentRowUse>Auto</currentRowUse> - <selectedRowsUse>Auto</selectedRowsUse> - </formCommands> - <formCommands> - <name>УстановитьКомпонентуСканирования</name> - <title> - <key>ru</key> - <value>Установить компоненту сканирования</value> - - 4 - - ru - Установить компоненту сканирования - - - true - - - - УстановитьКомпонентуСканирования - - - Auto + DontUse Auto @@ -1685,7 +1643,7 @@ УстановитьСтандартныеНастройки - Auto + DontUse Auto @@ -1707,7 +1665,7 @@ ОткрытьНомераОтсканированныхФайлов - Auto + DontUse Auto diff --git a/SSL/src/Catalogs/Файлы/Forms/НастройкаСканирования/Help/ru.html b/SSL/src/DataProcessors/Сканирование/Forms/НастройкаСканирования/Help/ru.html similarity index 89% rename from SSL/src/Catalogs/Файлы/Forms/НастройкаСканирования/Help/ru.html rename to SSL/src/DataProcessors/Сканирование/Forms/НастройкаСканирования/Help/ru.html index 8c48e80c7..9292ceb7b 100644 --- a/SSL/src/Catalogs/Файлы/Forms/НастройкаСканирования/Help/ru.html +++ b/SSL/src/DataProcessors/Сканирование/Forms/НастройкаСканирования/Help/ru.html @@ -1,10 +1,7 @@

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

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

        -

        Компонента сканирования

        -
        • Перед настройкой сканирования нажмите Установить компоненту сканирования. -
        • Если на Вашем компьютере нет сканера, устанавливать компоненту не нужно. -
        • Если компонента уже установлена, то вместо этой кнопки отображается Версия установленной компоненты сканирования.

        Имя сканера

        +

        Имя сканера

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

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

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

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

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

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

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

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

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

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

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

      • Выберите Разрешение сканирования (DPI). Список доступных разрешений зависит от выбранного сканера.
      • Выберите Цветность изображений, которые будут получены со сканера (Монохромное, Градации Серого, Цветное). Зависит от возможностей сканера. diff --git a/SSL/src/Catalogs/Файлы/Forms/НастройкаСканирования/Module.bsl b/SSL/src/DataProcessors/Сканирование/Forms/НастройкаСканирования/Module.bsl similarity index 91% rename from SSL/src/Catalogs/Файлы/Forms/НастройкаСканирования/Module.bsl rename to SSL/src/DataProcessors/Сканирование/Forms/НастройкаСканирования/Module.bsl index 079ce0054..6765e2c48 100644 --- a/SSL/src/Catalogs/Файлы/Forms/НастройкаСканирования/Module.bsl +++ b/SSL/src/DataProcessors/Сканирование/Forms/НастройкаСканирования/Module.bsl @@ -8,10 +8,6 @@ Возврат; КонецЕсли; - Если Параметры.КомпонентаУстановлена Тогда - Элементы.УстановитьКомпонентуСканирования.Видимость = Ложь; - КонецЕсли; - ИдентификаторКлиента = Параметры.ИдентификаторКлиента; ПоказыватьДиалогСканера = ОбщегоНазначения.ХранилищеОбщихНастроекЗагрузить( @@ -81,7 +77,7 @@ Если НЕ ИспользоватьImageMagickДляПреобразованияВPDF Тогда ФорматХраненияМногостраничный = ФорматМногостраничныйTIF; - КонецЕсли; + КонецЕсли; Элементы.ГруппаФорматаХранения.Видимость = ИспользоватьImageMagickДляПреобразованияВPDF; @@ -234,12 +230,6 @@ КонецПроцедуры -&НаКлиенте -Процедура УстановитьКомпонентуСканирования(Команда) - Обработчик = Новый ОписаниеОповещения("УстановитьКомпонентуСканированияЗавершение", ЭтотОбъект); - РаботаСФайламиСлужебныйКлиент.УстановитьКомпоненту(Обработчик); -КонецПроцедуры - &НаКлиенте Процедура УстановитьСтандартныеНастройки(Команда) ПрочитатьНастройкиСканера(); @@ -279,21 +269,17 @@ Элементы.ДвустороннееСканирование.Доступность = Ложь; Элементы.УстановитьСтандартныеНастройки.Доступность = Ложь; - Если Не РаботаСФайламиСлужебныйКлиент.ПроинициализироватьКомпоненту() Тогда - ВерсияКомпонентыСканирования = НСтр("ru= 'Компонента сканирования не установлена'"); + Если Не ФайловыеФункцииСлужебныйКлиент.ПроинициализироватьКомпоненту() Тогда Элементы.ИмяУстройства.Доступность = Ложь; Возврат; КонецЕсли; - Элементы.УстановитьКомпонентуСканирования.Видимость = Ложь; - ВерсияКомпонентыСканирования = РаботаСФайламиСлужебныйКлиент.ВерсияКомпонентыСканирования(); - - Если Не РаботаСФайламиСлужебныйКлиент.ДоступнаКомандаСканировать() Тогда + Если Не ФайловыеФункцииСлужебныйКлиент.ДоступнаКомандаСканировать() Тогда Элементы.ИмяУстройства.Доступность = Ложь; Возврат; КонецЕсли; - МассивУстройств = РаботаСФайламиСлужебныйКлиент.ПолучитьУстройства(); + МассивУстройств = ФайловыеФункцииСлужебныйКлиент.ПолучитьУстройства(); Для Каждого Строка Из МассивУстройств Цикл Элементы.ИмяУстройства.СписокВыбора.Добавить(Строка); КонецЦикла; @@ -303,13 +289,13 @@ Если ПустаяСтрока(ИмяУстройства) Тогда Возврат; КонецЕсли; - + Элементы.ФорматСканированногоИзображения.Доступность = Истина; Элементы.Разрешение.Доступность = Истина; Элементы.Цветность.Доступность = Истина; Элементы.УстановитьСтандартныеНастройки.Доступность = Истина; - ДвустороннееСканированиеЧисло = РаботаСФайламиСлужебныйКлиент.ПолучитьНастройку( + ДвустороннееСканированиеЧисло = ФайловыеФункцииСлужебныйКлиент.ПолучитьНастройку( ИмяУстройства, "DUPLEX"); Элементы.ДвустороннееСканирование.Доступность = (ДвустороннееСканированиеЧисло <> -1); @@ -318,19 +304,19 @@ Элементы.Поворот.Доступность = Не Поворот.Пустая(); Элементы.РазмерБумаги.Доступность = Не РазмерБумаги.Пустая(); Возврат; - КонецЕсли; - - РазрешениеЧисло = РаботаСФайламиСлужебныйКлиент.ПолучитьНастройку(ИмяУстройства, "XRESOLUTION"); - ЦветностьЧисло = РаботаСФайламиСлужебныйКлиент.ПолучитьНастройку(ИмяУстройства, "PIXELTYPE"); - ПоворотЧисло = РаботаСФайламиСлужебныйКлиент.ПолучитьНастройку(ИмяУстройства, "ROTATION"); - РазмерБумагиЧисло = РаботаСФайламиСлужебныйКлиент.ПолучитьНастройку(ИмяУстройства, "SUPPORTEDSIZES"); + КонецЕсли; + + РазрешениеЧисло = ФайловыеФункцииСлужебныйКлиент.ПолучитьНастройку(ИмяУстройства, "XRESOLUTION"); + ЦветностьЧисло = ФайловыеФункцииСлужебныйКлиент.ПолучитьНастройку(ИмяУстройства, "PIXELTYPE"); + ПоворотЧисло = ФайловыеФункцииСлужебныйКлиент.ПолучитьНастройку(ИмяУстройства, "ROTATION"); + РазмерБумагиЧисло = ФайловыеФункцииСлужебныйКлиент.ПолучитьНастройку(ИмяУстройства, "SUPPORTEDSIZES"); Элементы.Поворот.Доступность = (ПоворотЧисло <> -1); Элементы.РазмерБумаги.Доступность = (РазмерБумагиЧисло <> -1); ДвустороннееСканирование = ? ((ДвустороннееСканированиеЧисло = 1), Истина, Ложь); СохранитьВНастройкахПараметрыСканера(РазрешениеЧисло, ЦветностьЧисло, ПоворотЧисло, РазмерБумагиЧисло); - + КонецПроцедуры &НаСервере @@ -391,19 +377,19 @@ Состояние(ТекстСообщения); - РазрешениеЧисло = РаботаСФайламиСлужебныйКлиент.ПолучитьНастройку( + РазрешениеЧисло = ФайловыеФункцииСлужебныйКлиент.ПолучитьНастройку( ИмяУстройства, "XRESOLUTION"); - ЦветностьЧисло = РаботаСФайламиСлужебныйКлиент.ПолучитьНастройку( + ЦветностьЧисло = ФайловыеФункцииСлужебныйКлиент.ПолучитьНастройку( ИмяУстройства, "PIXELTYPE"); - ПоворотЧисло = РаботаСФайламиСлужебныйКлиент.ПолучитьНастройку( + ПоворотЧисло = ФайловыеФункцииСлужебныйКлиент.ПолучитьНастройку( ИмяУстройства, "ROTATION"); - РазмерБумагиЧисло = РаботаСФайламиСлужебныйКлиент.ПолучитьНастройку( + РазмерБумагиЧисло = ФайловыеФункцииСлужебныйКлиент.ПолучитьНастройку( ИмяУстройства, "SUPPORTEDSIZES"); - ДвустороннееСканированиеЧисло = РаботаСФайламиСлужебныйКлиент.ПолучитьНастройку( + ДвустороннееСканированиеЧисло = ФайловыеФункцииСлужебныйКлиент.ПолучитьНастройку( ИмяУстройства, "DUPLEX"); Элементы.Поворот.Доступность = (ПоворотЧисло <> -1); @@ -422,7 +408,7 @@ &НаСервере Процедура ПреобразоватьПараметрыСканераВПеречисления(РазрешениеЧисло, ЦветностьЧисло, ПоворотЧисло, РазмерБумагиЧисло) - Результат = РаботаСФайламиСлужебный.ПараметрыСканераВПеречисления(РазрешениеЧисло, ЦветностьЧисло, ПоворотЧисло, РазмерБумагиЧисло); + Результат = ФайловыеФункцииСлужебный.ПараметрыСканераВПеречисления(РазрешениеЧисло, ЦветностьЧисло, ПоворотЧисло, РазмерБумагиЧисло); Разрешение = Результат.Разрешение; Цветность = Результат.Цветность; Поворот = Результат.Поворот; @@ -523,9 +509,4 @@ КонецПроцедуры -&НаКлиенте -Процедура УстановитьКомпонентуСканированияЗавершение(Результат, ПараметрыВыполнения) Экспорт - ОбновитьСостояние(); -КонецПроцедуры - #КонецОбласти diff --git a/SSL/src/Catalogs/Файлы/Forms/НастройкаСканированияНаСеанс/Form.form b/SSL/src/DataProcessors/Сканирование/Forms/НастройкаСканированияНаСеанс/Form.form similarity index 99% rename from SSL/src/Catalogs/Файлы/Forms/НастройкаСканированияНаСеанс/Form.form rename to SSL/src/DataProcessors/Сканирование/Forms/НастройкаСканированияНаСеанс/Form.form index 42c0567ec..f08be63fb 100644 --- a/SSL/src/Catalogs/Файлы/Forms/НастройкаСканированияНаСеанс/Form.form +++ b/SSL/src/DataProcessors/Сканирование/Forms/НастройкаСканированияНаСеанс/Form.form @@ -7,6 +7,289 @@ Группа1 69 + + ГруппаОсновное + 24 + + Разрешение + 14 + true + true + + true + + + Разрешение + + + РазрешениеExtendedTooltip + 63 + Label + true + true + + Left + + + + РазрешениеКонтекстноеМеню + 15 + true + + InputField + Enter + true + Left + true + + 13 + true + true + false + true + true + true + true + Normal + + + + Цветность + 16 + true + true + + true + + + Цветность + + + ЦветностьExtendedTooltip + 64 + Label + true + true + + Left + + + + ЦветностьКонтекстноеМеню + 17 + true + + InputField + Enter + true + Left + true + + 13 + true + true + false + true + true + true + true + Normal + + + + Поворот + 20 + + <key>ru</key> + <value>Поворот изображения</value> + + true + true + + true + + + Поворот + + + ПоворотExtendedTooltip + 65 + Label + true + true + + Left + + + + ПоворотКонтекстноеМеню + 21 + true + + InputField + Enter + true + Left + true + + 13 + true + true + false + true + true + true + true + Normal + + + + РазмерБумаги + 22 + true + true + + true + + + РазмерБумаги + + + РазмерБумагиExtendedTooltip + 66 + Label + true + true + + Left + + + + РазмерБумагиКонтекстноеМеню + 23 + true + + InputField + Enter + true + Left + true + + 13 + true + true + false + true + true + true + true + Normal + + + + ДвустороннееСканирование + 28 + true + true + + true + + + ДвустороннееСканирование + + Right + + ДвустороннееСканированиеExtendedTooltip + 67 + Label + true + true + + Left + + + + ДвустороннееСканированиеКонтекстноеМеню + 29 + true + + CheckBoxField + Enter + true + Left + true + + + + ПоказыватьДиалогСканера + 1 + true + true + + true + + + ПоказыватьДиалогСканера + + Right + + ПоказыватьДиалогСканераExtendedTooltip + 68 + Label + true + true + + Left + + + + ПоказыватьДиалогСканераКонтекстноеМеню + 2 + true + + CheckBoxField + Enter + true + Left + true + + + true + true + + true + + + <key>ru</key> + <value>Основное</value> + + + ru + Группа основное + + true + + ГруппаОсновноеРасширеннаяПодсказка + 62 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + WeakSeparation + true + true + auto + Auto + Auto + + Группа2 71 @@ -478,289 +761,6 @@ Auto - - ГруппаПараметрыСканирования - 24 - - Разрешение - 14 - true - true - - true - - - Разрешение - - - РазрешениеExtendedTooltip - 63 - Label - true - true - - Left - - - - РазрешениеКонтекстноеМеню - 15 - true - - InputField - Enter - true - Left - true - - 13 - true - true - false - true - true - true - true - Normal - - - - Цветность - 16 - true - true - - true - - - Цветность - - - ЦветностьExtendedTooltip - 64 - Label - true - true - - Left - - - - ЦветностьКонтекстноеМеню - 17 - true - - InputField - Enter - true - Left - true - - 13 - true - true - false - true - true - true - true - Normal - - - - Поворот - 20 - - <key>ru</key> - <value>Поворот изображения</value> - - true - true - - true - - - Поворот - - - ПоворотExtendedTooltip - 65 - Label - true - true - - Left - - - - ПоворотКонтекстноеМеню - 21 - true - - InputField - Enter - true - Left - true - - 13 - true - true - false - true - true - true - true - Normal - - - - РазмерБумаги - 22 - true - true - - true - - - РазмерБумаги - - - РазмерБумагиExtendedTooltip - 66 - Label - true - true - - Left - - - - РазмерБумагиКонтекстноеМеню - 23 - true - - InputField - Enter - true - Left - true - - 13 - true - true - false - true - true - true - true - Normal - - - - ДвустороннееСканирование - 28 - true - true - - true - - - ДвустороннееСканирование - - Right - - ДвустороннееСканированиеExtendedTooltip - 67 - Label - true - true - - Left - - - - ДвустороннееСканированиеКонтекстноеМеню - 29 - true - - CheckBoxField - Enter - true - Left - true - - - - ПоказыватьДиалогСканера - 1 - true - true - - true - - - ПоказыватьДиалогСканера - - Right - - ПоказыватьДиалогСканераExtendedTooltip - 68 - Label - true - true - - Left - - - - ПоказыватьДиалогСканераКонтекстноеМеню - 2 - true - - CheckBoxField - Enter - true - Left - true - - - true - true - - true - - - <key>ru</key> - <value>Параметры сканирования</value> - - - ru - Группа параметры сканирования - - true - - ГруппаПараметрыСканированияExtendedTooltip - 62 - Label - true - true - - Left - - - UsualGroup - - Vertical - Auto - WeakSeparation - true - true - auto - Auto - Auto - - true true @@ -884,7 +884,6 @@ Vertical true true - UseIfNecessary auto true @@ -1251,7 +1250,7 @@ ОК - Auto + DontUse Auto diff --git a/SSL/src/Catalogs/Файлы/Forms/НастройкаСканированияНаСеанс/Help/ru.html b/SSL/src/DataProcessors/Сканирование/Forms/НастройкаСканированияНаСеанс/Help/ru.html similarity index 86% rename from SSL/src/Catalogs/Файлы/Forms/НастройкаСканированияНаСеанс/Help/ru.html rename to SSL/src/DataProcessors/Сканирование/Forms/НастройкаСканированияНаСеанс/Help/ru.html index 96da99755..9be442a71 100644 --- a/SSL/src/Catalogs/Файлы/Forms/НастройкаСканированияНаСеанс/Help/ru.html +++ b/SSL/src/DataProcessors/Сканирование/Forms/НастройкаСканированияНаСеанс/Help/ru.html @@ -1,6 +1,6 @@ -

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

        -

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

        +

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

        +

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

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

        • Формат - позволяет выбрать один из поддерживаемых форматов (BMP, JPG, GIF, PNG, TIF, PDF) для помещения в информационную базу.
          • Тип сканированного изображения - позволяет выбрать один из поддерживаемых форматов (BMP, JPG, GIF, PNG, TIF) для изображений, которые будут получены со сканера. Опция доступна, если формат одностраничного изображения - PDF. diff --git a/SSL/src/Catalogs/Файлы/Forms/НастройкаСканированияНаСеанс/Module.bsl b/SSL/src/DataProcessors/Сканирование/Forms/НастройкаСканированияНаСеанс/Module.bsl similarity index 99% rename from SSL/src/Catalogs/Файлы/Forms/НастройкаСканированияНаСеанс/Module.bsl rename to SSL/src/DataProcessors/Сканирование/Forms/НастройкаСканированияНаСеанс/Module.bsl index eabb801e4..ba1ce9564 100644 --- a/SSL/src/Catalogs/Файлы/Forms/НастройкаСканированияНаСеанс/Module.bsl +++ b/SSL/src/DataProcessors/Сканирование/Forms/НастройкаСканированияНаСеанс/Module.bsl @@ -69,7 +69,7 @@ КонецЕсли; СтандартныеПодсистемыСервер.УстановитьОтображениеЗаголовковГрупп(ЭтотОбъект, - "ГруппаФорматХраненияОдиночный,ГруппаФорматХраненияМногостраничный,ГруппаПараметрыСканирования"); + "ГруппаФорматХраненияОдиночный,ГруппаФорматХраненияМногостраничный,ГруппаОсновное"); КонецПроцедуры diff --git a/SSL/src/Catalogs/Файлы/Forms/РезультатСканирования/Form.form b/SSL/src/DataProcessors/Сканирование/Forms/РезультатСканирования/Form.form similarity index 79% rename from SSL/src/Catalogs/Файлы/Forms/РезультатСканирования/Form.form rename to SSL/src/DataProcessors/Сканирование/Forms/РезультатСканирования/Form.form index 383563e62..f51d3e84c 100644 --- a/SSL/src/Catalogs/Файлы/Forms/РезультатСканирования/Form.form +++ b/SSL/src/DataProcessors/Сканирование/Forms/РезультатСканирования/Form.form @@ -2,7 +2,7 @@ <key>ru</key> - <value>Помощник сканирования</value> + <value>Сканирование изображений</value> ГруппаИзображения @@ -345,21 +345,16 @@ - - ТекстНастроек - 17 - true + + ТекстНастроекИзменить1 + 64 true true - - ТекстНастроек - - None - ТекстНастроекExtendedTooltip - 38 + ТекстНастроекИзменить1РасширеннаяПодсказка + 65 Label true true @@ -367,22 +362,208 @@ Left - - ТекстНастроекКонтекстноеМеню - 18 - true - - LabelField - Enter - true - Left - true - + UsualButton + Form.Command.ТекстНастроекИзменить + Normal + Picture + true + true + UserCmds + + CommonPicture.ПрочиеПользовательскиеНастройки + + Auto + + + Группа1 + 53 + + ТекстНастроек + 17 + true + true + + true + + + ТекстНастроек + + None + + ТекстНастроекExtendedTooltip + 38 + Label + true + true + + Left + + + + ТекстНастроекКонтекстноеМеню + 18 + true + + LabelField + Enter + true + Left + true + + 75 + true + 2 + true + false + + + + Группа2 + 55 + + ТекстНастроек1 + 50 + true + true + + true + + + ТекстНастроек + + None + + ТекстНастроек1РасширеннаяПодсказка + 52 + Label + true + true + + Left + + + + ТекстНастроек1КонтекстноеМеню + 51 + true + + LabelField + Enter + true + Left + true + + true + 1 + true + true + false + + + + Декорация1 + 57 + true + true + + true + + + Декорация1РасширеннаяПодсказка + 59 + Label + true + true + + Left + + + + Декорация1КонтекстноеМеню + 58 + true + + Label + true + true + + Left + + + true + + true + + + Группа2РасширеннаяПодсказка + 56 + Label + true + true + + Left + + + UsualGroup + + Auto + true + true + Auto + Auto + + + + ТекстНастроекИзменить + 60 + true + + true + + + ТекстНастроекИзменитьРасширеннаяПодсказка + 61 + Label + true + true + + Left + + + Hyperlink + Form.Command.ТекстНастроекИзменить + Normal + Auto 75 true 2 true - false + UserCmds + Auto + + true + true + + true + + + Группа1РасширеннаяПодсказка + 54 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + true + true + Auto + Auto true @@ -419,7 +600,7 @@ Auto - Bottom + Top true ФормаКоманднаяПанель @@ -442,7 +623,7 @@ Left - Form.Command.СканироватьЕще + Form.Command.Сканировать Normal Auto true @@ -453,6 +634,10 @@ Пересканировать 5 + + <key>ru</key> + <value>Пересканировать</value> + true true @@ -480,6 +665,10 @@ ФормаПринятьВсеКакОдинФайл 15 + + <key>ru</key> + <value>Сохранить как один файл</value> + true true @@ -495,7 +684,7 @@ Left - Form.Command.ПринятьВсеКакОдинФайл + Form.Command.СохранитьВсеКакОдинФайл Normal Auto true @@ -506,6 +695,10 @@ ФормаПринятьВсеКакОтдельныеФайлы 16 + + <key>ru</key> + <value>Сохранить как отдельные файлы</value> + true true @@ -521,7 +714,7 @@ Left - Form.Command.ПринятьВсеКакОтдельныеФайлы + Form.Command.СохранитьВсеКакОтдельныеФайлы Normal Auto true @@ -530,8 +723,12 @@ Auto - Принять + Сохранить 3 + + <key>ru</key> + <value>Сохранить</value> + true true @@ -539,7 +736,7 @@ false - ПринятьExtendedTooltip + СохранитьРасширеннаяПодсказка 28 Label true @@ -548,36 +745,9 @@ Left - Form.Command.Принять - Normal - Auto - true - true - UserCmds - Auto - - - Отмена - 4 - true - true - - true - - false - - ОтменаExtendedTooltip - 29 - Label - true - true - - Left - - - Form.Command.Отмена - Normal + Form.Command.Сохранить Auto + true true true UserCmds @@ -608,8 +778,9 @@ true UserCmds Auto + InAdditionalSubmenu - Right + Left true @@ -632,13 +803,13 @@ OnClose ПриЗакрытии + Cancel LockOwner true true Vertical true true - UseIfNecessary auto true @@ -701,7 +872,9 @@ Не открывать карточку после создания из файла 5 - + + Boolean + true @@ -1317,48 +1490,43 @@ true - - Принять + + ЭтоФайл <key>ru</key> - <value>Принять</value> + <value>Это файл</value> + + 36 + + Boolean + + + true + + + true + + + + Сохранить + + <key>ru</key> + <value>Сохранить</value> 1 ru - Принять + Сохранить true - Принять + Сохранить - Auto - Auto - - - Отмена - - <key>ru</key> - <value>Отмена</value> - - 2 - - ru - Отмена - - - true - - - - Отмена - - - Auto + DontUse Auto @@ -1380,73 +1548,73 @@ Пересканировать - Auto + DontUse Auto - СканироватьЕще + Сканировать <key>ru</key> - <value>Сканировать еще</value> + <value>Сканировать</value> 4 ru - Сканировать еще + Сканировать true - СканироватьЕще + Сканировать - Auto + DontUse Auto - ПринятьВсеКакОдинФайл + СохранитьВсеКакОдинФайл <key>ru</key> - <value>Принять все как один файл</value> + <value>Сохранить все как один файл</value> 5 ru - Принять все как один файл + Сохранить все как один файл true - ПринятьВсеКакОдинФайл + СохранитьВсеКакОдинФайл - Auto + DontUse Auto - ПринятьВсеКакОтдельныеФайлы + СохранитьВсеКакОтдельныеФайлы <key>ru</key> - <value>Принять все как отдельные файлы</value> + <value>Сохранить все как отдельные файлы</value> 6 ru - Принять все как отдельные файлы + Сохранить все как отдельные файлы true - ПринятьВсеКакОтдельныеФайлы + СохранитьВсеКакОтдельныеФайлы - Auto + DontUse Auto @@ -1468,7 +1636,24 @@ Настройка - Auto + DontUse + Auto + + + ТекстНастроекИзменить + + <key>ru</key> + <value>Текст настроек изменить</value> + + 8 + + ru + Текст настроек изменить + + + true + + DontUse Auto diff --git a/SSL/src/Catalogs/Файлы/Forms/РезультатСканирования/Help/ru.html b/SSL/src/DataProcessors/Сканирование/Forms/РезультатСканирования/Help/ru.html similarity index 83% rename from SSL/src/Catalogs/Файлы/Forms/РезультатСканирования/Help/ru.html rename to SSL/src/DataProcessors/Сканирование/Forms/РезультатСканирования/Help/ru.html index be7c0bae7..95929f08c 100644 --- a/SSL/src/Catalogs/Файлы/Forms/РезультатСканирования/Help/ru.html +++ b/SSL/src/DataProcessors/Сканирование/Forms/РезультатСканирования/Help/ru.html @@ -5,9 +5,9 @@

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

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

            См. также:

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

          См. также:

          \ No newline at end of file diff --git a/SSL/src/Catalogs/Файлы/Forms/РезультатСканирования/Module.bsl b/SSL/src/DataProcessors/Сканирование/Forms/РезультатСканирования/Module.bsl similarity index 90% rename from SSL/src/Catalogs/Файлы/Forms/РезультатСканирования/Module.bsl rename to SSL/src/DataProcessors/Сканирование/Forms/РезультатСканирования/Module.bsl index 74c872213..1859b73c4 100644 --- a/SSL/src/Catalogs/Файлы/Forms/РезультатСканирования/Module.bsl +++ b/SSL/src/DataProcessors/Сканирование/Forms/РезультатСканирования/Module.bsl @@ -21,14 +21,18 @@ ВладелецФайла = Параметры.ВладелецФайла; КонецЕсли; + Если Параметры.Свойство("ЭтоФайл") Тогда + ЭтоФайл = Параметры.ЭтоФайл; + КонецЕсли; + ИдентификаторКлиента = Параметры.ИдентификаторКлиента; Если Параметры.Свойство("НеОткрыватьКарточкуПослеСозданияИзФайла") Тогда НеОткрыватьКарточкуПослеСозданияИзФайла = Параметры.НеОткрыватьКарточкуПослеСозданияИзФайла; КонецЕсли; - НомерФайла = РаботаСФайламиСлужебныйВызовСервера.ПолучитьНовыйНомерДляСканирования(ВладелецФайла); - ИмяФайла = РаботаСФайламиКлиентСервер.ИмяСканированногоФайла(НомерФайла, ""); + НомерФайла = ФайловыеФункцииСлужебныйВызовСервера.ПолучитьНовыйНомерДляСканирования(ВладелецФайла); + ИмяФайла = ФайловыеФункцииСлужебныйКлиентСервер.ИмяСканированногоФайла(НомерФайла, ""); ФорматСканированногоИзображения = ОбщегоНазначения.ХранилищеОбщихНастроекЗагрузить( "НастройкиСканирования/ФорматСканированногоИзображения", @@ -109,16 +113,20 @@ &НаКлиенте Процедура ПриОткрытии(Отказ) + Если Не ПроверкиПриОткрытииВыполнены Тогда Отказ = Истина; ПодключитьОбработчикОжидания("ПередОткрытием", 0.1, Истина); КонецЕсли; + + ПозицияДляВставки = Неопределено; + КонецПроцедуры &НаКлиенте Процедура ОбработкаВыбора(ВыбранноеЗначение, ИсточникВыбора) - Если ВРег(ИсточникВыбора.ИмяФормы) = ВРег("Справочник.Файлы.Форма.НастройкаСканированияНаСеанс") Тогда + Если ВРег(ИсточникВыбора.ИмяФормы) = ВРег("Обработка.Сканирование.Форма.НастройкаСканированияНаСеанс") Тогда Если ТипЗнч(ВыбранноеЗначение) <> Тип("Структура") Тогда Возврат; @@ -159,6 +167,10 @@ &НаКлиенте Процедура ТаблицаФайловПриАктивизацииСтроки(Элемент) #Если НЕ ВебКлиент Тогда + Если Элементы.ТаблицаФайлов.ТекущиеДанные = Неопределено Тогда + Возврат; + КонецЕсли; + НомерТекущейСтроки = Элементы.ТаблицаФайлов.ТекущаяСтрока; СтрокаТаблицы = Элементы.ТаблицаФайлов.ДанныеСтроки(НомерТекущейСтроки); @@ -169,13 +181,13 @@ Если ПустаяСтрока(СтрокаТаблицы.АдресКартинки) Тогда ДвоичныеДанные = Новый ДвоичныеДанные(ПутьКВыбранномуФайлу); СтрокаТаблицы.АдресКартинки = ПоместитьВоВременноеХранилище(ДвоичныеДанные, УникальныйИдентификатор); - КонецЕсли; + КонецЕсли; АдресКартинки = СтрокаТаблицы.АдресКартинки; - КонецЕсли; + КонецЕсли; -#КонецЕсли +#КонецЕсли КонецПроцедуры &НаКлиенте @@ -200,12 +212,6 @@ #Область ОбработчикиКомандФормы -&НаКлиенте -Процедура Отмена(Команда) - УдалитьВременныеФайлы(ТаблицаФайлов); - Закрыть(); -КонецПроцедуры - // Кнопка "Пересканировать" замещает выделенную (или единственную, если она одна) картинку // (или добавляет в конец новые картинки, если ничего не выделено) новым изображением (изображениями). &НаКлиенте @@ -213,6 +219,7 @@ Если ТаблицаФайлов.Количество() = 1 Тогда УдалитьВременныеФайлы(ТаблицаФайлов); + ПозицияДляВставки = 0; ИначеЕсли ТаблицаФайлов.Количество() > 1 Тогда НомерТекущейСтроки = Элементы.ТаблицаФайлов.ТекущаяСтрока; @@ -242,104 +249,7 @@ КонецПроцедуры &НаКлиенте -Процедура ПринятьВсеКакОтдельныеФайлы(Команда) - - МассивФайловКопия = Новый Массив; - Для Каждого Строка Из ТаблицаФайлов Цикл - МассивФайловКопия.Добавить(Новый Структура("ПутьКФайлу", Строка.ПутьКФайлу)); - КонецЦикла; - - ТаблицаФайлов.Очистить(); // Чтобы не удалились файлы в ПриЗакрытии. - - Закрыть(); - - РасширениеРезультата = Строка(ФорматХраненияОдностраничный); - РасширениеРезультата = НРег(РасширениеРезультата); - - ПараметрыДобавления = Новый Структура; - ПараметрыДобавления.Вставить("ВладелецФайла", ВладелецФайла); - ПараметрыДобавления.Вставить("ФормаВладелец", ЭтотОбъект); - ПараметрыДобавления.Вставить("УникальныйИдентификатор", УникальныйИдентификатор); - ПараметрыДобавления.Вставить("ПолноеИмяФайла", ""); - ПараметрыДобавления.Вставить("ИмяСоздаваемогоФайла", ""); - - ПолныйТекстВсехОшибок = ""; - КоличествоОшибок = 0; - - // Здесь работаем со всеми картинками -каждую как отдельный файл принимаем. - Для Каждого Строка Из МассивФайловКопия Цикл - - ПутьКФайлуЛокальный = Строка.ПутьКФайлу; - - ФайлРезультата = ""; - Если РасширениеРезультата = "pdf" Тогда - - #Если НЕ ВебКлиент Тогда - ФайлРезультата = ПолучитьИмяВременногоФайла("pdf"); - #КонецЕсли - - СтрокаВсехПутей = ПутьКФайлуЛокальный; - ПараметрыПриложения["СтандартныеПодсистемы.КомпонентаTwain"].ОбъединитьВМногостраничныйФайл( - СтрокаВсехПутей, ФайлРезультата, ПутьКПрограммеКонвертации); - - ОбъектФайлРезультата = Новый Файл(ФайлРезультата); - Если НЕ ОбъектФайлРезультата.Существует() Тогда - ТекстОшибки = ТекстСообщенияОшибкиПреобразованияВPDF(ФайлРезультата); - Если ПолныйТекстВсехОшибок <> "" Тогда - ПолныйТекстВсехОшибок = ПолныйТекстВсехОшибок + Символы.ПС + Символы.ПС + "---" + Символы.ПС + Символы.ПС; - КонецЕсли; - ПолныйТекстВсехОшибок = ПолныйТекстВсехОшибок + ТекстОшибки; - КоличествоОшибок = КоличествоОшибок + 1; - ФайлРезультата = ""; - КонецЕсли; - - ПутьКФайлуЛокальный = ФайлРезультата; - - КонецЕсли; - - Если НЕ ПустаяСтрока(ПутьКФайлуЛокальный) Тогда - ПараметрыДобавления.ПолноеИмяФайла = ПутьКФайлуЛокальный; - ПараметрыДобавления.ИмяСоздаваемогоФайла = ИмяФайла; - Результат = РаботаСФайламиСлужебныйКлиент.ДобавитьИзФайловойСистемыСРасширениемСинхронно(ПараметрыДобавления); - Если Не Результат.ФайлДобавлен Тогда - Если ЗначениеЗаполнено(Результат.ТекстОшибки) Тогда - ПоказатьПредупреждение(, Результат.ТекстОшибки); - Возврат; - КонецЕсли; - КонецЕсли; - КонецЕсли; - - Если НЕ ПустаяСтрока(ФайлРезультата) Тогда - УдалитьФайлы(ФайлРезультата); - КонецЕсли; - - НомерФайла = НомерФайла + 1; - ИмяФайла = РаботаСФайламиКлиентСервер.ИмяСканированногоФайла(НомерФайла, ""); - - КонецЦикла; - - РаботаСФайламиСлужебныйВызовСервера.ЗанестиМаксимальныйНомерДляСканирования( - ВладелецФайла, НомерФайла - 1); - - УдалитьВременныеФайлы(МассивФайловКопия); - - Если КоличествоОшибок > 0 Тогда - Результат = СтандартныеПодсистемыКлиентСервер.НовыйРезультатВыполнения(); - Результат.ВыводПредупреждения.Использование = Истина; - Если КоличествоОшибок = 1 Тогда - Результат.ВыводПредупреждения.Текст = ПолныйТекстВсехОшибок; - Иначе - КраткийТекстВсехОшибок = СтрЗаменить(НСтр("ru = 'При выполнении возникли ошибки (%1).'"), "%1", Строка(КоличествоОшибок)); - Результат.ВыводПредупреждения.Текст = КраткийТекстВсехОшибок; - Результат.ВыводПредупреждения.ТекстОшибок = ПолныйТекстВсехОшибок; - КонецЕсли; - СтандартныеПодсистемыКлиент.ПоказатьРезультатВыполнения(ЭтотОбъект, Результат); - КонецЕсли; - -КонецПроцедуры - -&НаКлиенте -Процедура Принять(Команда) +Процедура Сохранить(Команда) ПараметрыВыполнения = Новый Структура; ПараметрыВыполнения.Вставить("МассивФайловКопия", Новый Массив); @@ -394,8 +304,10 @@ ПараметрыДобавления.Вставить("ФормаВладелец", ЭтотОбъект); ПараметрыДобавления.Вставить("ИмяСоздаваемогоФайла", ИмяФайла); ПараметрыДобавления.Вставить("НеОткрыватьКарточкуПослеСозданияИзФайла", НеОткрыватьКарточкуПослеСозданияИзФайла); + ПараметрыДобавления.Вставить("ИдентификаторФормы", УникальныйИдентификатор); + ПараметрыДобавления.Вставить("ЭтоФайл", ЭтоФайл); - РаботаСФайламиСлужебныйКлиент.ДобавитьИзФайловойСистемыСРасширением(ПараметрыДобавления); + ФайловыеФункцииСлужебныйКлиент.ДобавитьИзФайловойСистемыСРасширением(ПараметрыДобавления); Возврат; КонецЕсли; @@ -406,7 +318,7 @@ &НаКлиенте Процедура Настройка(Команда) - ДвустороннееСканированиеЧисло = РаботаСФайламиСлужебныйКлиент.ПолучитьНастройку( + ДвустороннееСканированиеЧисло = ФайловыеФункцииСлужебныйКлиент.ПолучитьНастройку( ИмяУстройстваСканирования, "DUPLEX"); ДоступностьДвустороннееСканирование = (ДвустороннееСканированиеЧисло <> -1); @@ -432,12 +344,12 @@ ПараметрыФормы.Вставить("ФорматХраненияОдностраничный", ФорматХраненияОдностраничный); ПараметрыФормы.Вставить("ФорматХраненияМногостраничный", ФорматХраненияМногостраничный); - ОткрытьФорму("Справочник.Файлы.Форма.НастройкаСканированияНаСеанс", ПараметрыФормы, ЭтотОбъект); + ОткрытьФорму("Обработка.Сканирование.Форма.НастройкаСканированияНаСеанс", ПараметрыФормы, ЭтотОбъект); КонецПроцедуры &НаКлиенте -Процедура ПринятьВсеКакОдинФайл(Команда) +Процедура СохранитьВсеКакОдинФайл(Команда) ПараметрыВыполнения = Новый Структура; ПараметрыВыполнения.Вставить("МассивФайловКопия", Новый Массив); @@ -485,8 +397,11 @@ ПараметрыДобавления.Вставить("ПолноеИмяФайла", ПараметрыВыполнения.ФайлРезультата); ПараметрыДобавления.Вставить("ИмяСоздаваемогоФайла", ИмяФайла); ПараметрыДобавления.Вставить("НеОткрыватьКарточкуПослеСозданияИзФайла", НеОткрыватьКарточкуПослеСозданияИзФайла); + ПараметрыДобавления.Вставить("ИдентификаторФормы", УникальныйИдентификатор); + ПараметрыДобавления.Вставить("УникальныйИдентификатор", УникальныйИдентификатор); + ПараметрыДобавления.Вставить("ЭтоФайл", ЭтоФайл); - РаботаСФайламиСлужебныйКлиент.ДобавитьИзФайловойСистемыСРасширением(ПараметрыДобавления); + ФайловыеФункцииСлужебныйКлиент.ДобавитьИзФайловойСистемыСРасширением(ПараметрыДобавления); Возврат; КонецЕсли; @@ -495,7 +410,105 @@ КонецПроцедуры &НаКлиенте -Процедура СканироватьЕще(Команда) +Процедура СохранитьВсеКакОтдельныеФайлы(Команда) + + МассивФайловКопия = Новый Массив; + Для Каждого Строка Из ТаблицаФайлов Цикл + МассивФайловКопия.Добавить(Новый Структура("ПутьКФайлу", Строка.ПутьКФайлу)); + КонецЦикла; + + ТаблицаФайлов.Очистить(); // Чтобы не удалились файлы в ПриЗакрытии. + + Закрыть(); + + РасширениеРезультата = Строка(ФорматХраненияОдностраничный); + РасширениеРезультата = НРег(РасширениеРезультата); + + ПараметрыДобавления = Новый Структура; + ПараметрыДобавления.Вставить("ВладелецФайла", ВладелецФайла); + ПараметрыДобавления.Вставить("УникальныйИдентификатор", УникальныйИдентификатор); + ПараметрыДобавления.Вставить("ИдентификаторФормы", УникальныйИдентификатор); + ПараметрыДобавления.Вставить("ФормаВладелец", ЭтотОбъект); + ПараметрыДобавления.Вставить("НеОткрыватьКарточкуПослеСозданияИзФайла", Истина); + ПараметрыДобавления.Вставить("ПолноеИмяФайла", ""); + ПараметрыДобавления.Вставить("ИмяСоздаваемогоФайла", ""); + ПараметрыДобавления.Вставить("ЭтоФайл", ЭтоФайл); + + ПолныйТекстВсехОшибок = ""; + КоличествоОшибок = 0; + + // Здесь работаем со всеми картинками -каждую как отдельный файл принимаем. + Для Каждого Строка Из МассивФайловКопия Цикл + + ПутьКФайлуЛокальный = Строка.ПутьКФайлу; + + ФайлРезультата = ""; + Если РасширениеРезультата = "pdf" Тогда + + #Если НЕ ВебКлиент Тогда + ФайлРезультата = ПолучитьИмяВременногоФайла("pdf"); + #КонецЕсли + + СтрокаВсехПутей = ПутьКФайлуЛокальный; + ПараметрыПриложения["СтандартныеПодсистемы.КомпонентаTwain"].ОбъединитьВМногостраничныйФайл( + СтрокаВсехПутей, ФайлРезультата, ПутьКПрограммеКонвертации); + + ОбъектФайлРезультата = Новый Файл(ФайлРезультата); + Если НЕ ОбъектФайлРезультата.Существует() Тогда + ТекстОшибки = ТекстСообщенияОшибкиПреобразованияВPDF(ФайлРезультата); + Если ПолныйТекстВсехОшибок <> "" Тогда + ПолныйТекстВсехОшибок = ПолныйТекстВсехОшибок + Символы.ПС + Символы.ПС + "---" + Символы.ПС + Символы.ПС; + КонецЕсли; + ПолныйТекстВсехОшибок = ПолныйТекстВсехОшибок + ТекстОшибки; + КоличествоОшибок = КоличествоОшибок + 1; + ФайлРезультата = ""; + КонецЕсли; + + ПутьКФайлуЛокальный = ФайлРезультата; + + КонецЕсли; + + Если НЕ ПустаяСтрока(ПутьКФайлуЛокальный) Тогда + ПараметрыДобавления.ПолноеИмяФайла = ПутьКФайлуЛокальный; + ПараметрыДобавления.ИмяСоздаваемогоФайла = ИмяФайла; + Результат = ФайловыеФункцииСлужебныйКлиент.ДобавитьИзФайловойСистемыСРасширениемСинхронно(ПараметрыДобавления); + Если Не Результат.ФайлДобавлен Тогда + Если ЗначениеЗаполнено(Результат.ТекстОшибки) Тогда + ПоказатьПредупреждение(, Результат.ТекстОшибки); + Возврат; + КонецЕсли; + КонецЕсли; + КонецЕсли; + + Если НЕ ПустаяСтрока(ФайлРезультата) Тогда + УдалитьФайлы(ФайлРезультата); + КонецЕсли; + + НомерФайла = НомерФайла + 1; + ИмяФайла = ФайловыеФункцииСлужебныйКлиентСервер.ИмяСканированногоФайла(НомерФайла, ""); + + КонецЦикла; + + ФайловыеФункцииСлужебныйВызовСервера.ЗанестиМаксимальныйНомерДляСканирования( + ВладелецФайла, НомерФайла - 1); + + УдалитьВременныеФайлы(МассивФайловКопия); + + Если КоличествоОшибок > 0 Тогда + Результат = Новый Структура; + Если КоличествоОшибок = 1 Тогда + СтандартныеПодсистемыКлиентСервер.ВывестиПредупреждение(Результат, ПолныйТекстВсехОшибок); + Иначе + КраткийТекстВсехОшибок = СтрЗаменить(НСтр("ru = 'При выполнении возникли ошибки (%1).'"), "%1", Строка(КоличествоОшибок)); + СтандартныеПодсистемыКлиентСервер.ВывестиПредупреждение(Результат, КраткийТекстВсехОшибок, ПолныйТекстВсехОшибок); + КонецЕсли; + СтандартныеПодсистемыКлиент.ПоказатьРезультатВыполнения(ЭтотОбъект, Результат); + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура Сканировать(Команда) ПоказыватьДиалог = ПоказыватьДиалогСканера; ВыбранноеУстройство = ИмяУстройстваСканирования; @@ -537,13 +550,13 @@ КонецЕсли; Если ПараметрыОткрытия.ТекущийШаг = 1 Тогда - Если Не РаботаСФайламиСлужебныйКлиент.ПроинициализироватьКомпоненту() Тогда + Если Не ФайловыеФункцииСлужебныйКлиент.ПроинициализироватьКомпоненту() Тогда Возврат; КонецЕсли; // Вызывается здесь, т.к. вызов ПараметрыПриложения["СтандартныеПодсистемы.КомпонентаTwain"].ЕстьУстройства() // занимает очень много времени (больше, чем ОбновитьПовторноИспользуемыеЗначения()). - Если Не РаботаСФайламиСлужебныйКлиент.ДоступнаКомандаСканировать() Тогда + Если Не ФайловыеФункцииСлужебныйКлиент.ДоступнаКомандаСканировать() Тогда ОбновитьПовторноИспользуемыеЗначения(); Возврат; КонецЕсли; @@ -557,7 +570,7 @@ Если ПараметрыОткрытия.ВыбранноеУстройство = "" Тогда Обработчик = Новый ОписаниеОповещения("ПередОткрытиемАвтомат", ЭтотОбъект, ПараметрыОткрытия); - ОткрытьФорму("Справочник.Файлы.Форма.ВыборУстройстваСканирования", , ЭтотОбъект, , , , Обработчик, РежимОткрытияОкнаФормы.БлокироватьВесьИнтерфейс); + ОткрытьФорму("Обработка.Сканирование.Форма.ВыборУстройстваСканирования", , ЭтотОбъект, , , , Обработчик, РежимОткрытияОкнаФормы.БлокироватьВесьИнтерфейс); Возврат; КонецЕсли; @@ -571,23 +584,23 @@ Если Разрешение = -1 ИЛИ Цветность = -1 ИЛИ Поворот = -1 ИЛИ РазмерБумаги = -1 Тогда - Разрешение = РаботаСФайламиСлужебныйКлиент.ПолучитьНастройку( + Разрешение = ФайловыеФункцииСлужебныйКлиент.ПолучитьНастройку( ПараметрыОткрытия.ВыбранноеУстройство, "XRESOLUTION"); - Цветность = РаботаСФайламиСлужебныйКлиент.ПолучитьНастройку( + Цветность = ФайловыеФункцииСлужебныйКлиент.ПолучитьНастройку( ПараметрыОткрытия.ВыбранноеУстройство, "PIXELTYPE"); - Поворот = РаботаСФайламиСлужебныйКлиент.ПолучитьНастройку( + Поворот = ФайловыеФункцииСлужебныйКлиент.ПолучитьНастройку( ПараметрыОткрытия.ВыбранноеУстройство, "ROTATION"); - РазмерБумаги = РаботаСФайламиСлужебныйКлиент.ПолучитьНастройку( + РазмерБумаги = ФайловыеФункцииСлужебныйКлиент.ПолучитьНастройку( ПараметрыОткрытия.ВыбранноеУстройство, "SUPPORTEDSIZES"); - ДвустороннееСканированиеЧисло = РаботаСФайламиСлужебныйКлиент.ПолучитьНастройку( + ДвустороннееСканированиеЧисло = ФайловыеФункцииСлужебныйКлиент.ПолучитьНастройку( ПараметрыОткрытия.ВыбранноеУстройство, "DUPLEX"); @@ -608,7 +621,7 @@ КонецЕсли; ИмяФайлаКартинки = ""; - Элементы.Принять.Доступность = Ложь; + Элементы.Сохранить.Доступность = Ложь; ПараметрСжатие = ?(ВРег(ФорматКартинки) = "JPG", КачествоJPG, СжатиеTIFFЧисло); @@ -781,6 +794,8 @@ ТекстНастроек = Представление; + Элементы.ТекстНастроекИзменить.Заголовок = ТекстНастроек + "Изменить"; + КонецПроцедуры &НаКлиенте @@ -791,7 +806,7 @@ Если Источник = "TWAIN" И Событие = "ImageAcquired" Тогда ИмяФайлаКартинки = Данные; - Элементы.Принять.Доступность = Истина; + Элементы.Сохранить.Доступность = Истина; КоличествоСтрокДоДобавления = ТаблицаФайлов.Количество(); @@ -799,7 +814,7 @@ Если ПозицияДляВставки = Неопределено Тогда СтрокаТаблицы = ТаблицаФайлов.Добавить(); - Иначе + Иначе СтрокаТаблицы = ТаблицаФайлов.Вставить(ПозицияДляВставки); ПозицияДляВставки = ПозицияДляВставки + 1; КонецЕсли; @@ -824,7 +839,7 @@ Элементы.ТаблицаФайлов.Видимость = Истина; Элементы.ФормаПринятьВсеКакОдинФайл.Видимость = Истина; Элементы.ФормаПринятьВсеКакОтдельныеФайлы.Видимость = Истина; - Элементы.Принять.Видимость = Ложь; + Элементы.Сохранить.Видимость = Ложь; КонецЕсли; Если ТаблицаФайлов.Количество() > 1 Тогда @@ -838,7 +853,7 @@ Элементы.ТаблицаФайлов.ТекущаяСтрока = ИдентификаторСтроки; КонецЕсли; - ИначеЕсли Источник = "TWAIN" И Событие = "UserPressedCancel" Тогда + ИначеЕсли Источник = "TWAIN" И Событие = "UserPressedCancel" Тогда Если ЭтаФорма.Открыта() Тогда Закрыть(); КонецЕсли; @@ -853,9 +868,10 @@ Для Каждого Строка Из ТаблицаЗначенийФайлов Цикл УдалитьФайлы(Строка.ПутьКФайлу); - КонецЦикла; + КонецЦикла; ТаблицаЗначенийФайлов.Очистить(); + ПозицияДляВставки = Неопределено; КонецПроцедуры @@ -876,7 +892,7 @@ &НаСервереБезКонтекста Процедура СохранитьПараметрыСканера(РазрешениеЧисло, ЦветностьЧисло, ИдентификаторКлиента) - Результат = РаботаСФайламиСлужебный.ПараметрыСканераВПеречисления(РазрешениеЧисло, ЦветностьЧисло, 0, 0); + Результат = ФайловыеФункцииСлужебный.ПараметрыСканераВПеречисления(РазрешениеЧисло, ЦветностьЧисло, 0, 0); ОбщегоНазначения.ХранилищеОбщихНастроекСохранить("НастройкиСканирования/Разрешение", ИдентификаторКлиента, Результат.Разрешение); ОбщегоНазначения.ХранилищеОбщихНастроекСохранить("НастройкиСканирования/Цветность", ИдентификаторКлиента, Результат.Цветность); diff --git a/SSL/src/DataProcessors/Сканирование/Сканирование.mdo b/SSL/src/DataProcessors/Сканирование/Сканирование.mdo new file mode 100644 index 000000000..634e223e0 --- /dev/null +++ b/SSL/src/DataProcessors/Сканирование/Сканирование.mdo @@ -0,0 +1,69 @@ + + + + + + + Сканирование + + ru + Сканирование + + true + + НастройкаСканирования + + ru + Настройка сканирования + + + + ru + + + PersonalComputer + MobileDevice + + + НастройкаСканированияНаСеанс + + ru + Настройка сканирования на сеанс + + + + ru + + + PersonalComputer + MobileDevice + + + РезультатСканирования + + ru + Результат сканирования + + + + ru + + + PersonalComputer + MobileDevice + + + ВыборУстройстваСканирования + + ru + Выбор устройства сканирования + + + + ru + + + PersonalComputer + MobileDevice + + diff --git a/SSL/src/DataProcessors/СогласиеНаОбработкуПерсональныхДанных/Commands/СогласиеНаОбработкуПерсональныхДанных/CommandModule.bsl b/SSL/src/DataProcessors/СогласиеНаОбработкуПерсональныхДанных/Commands/СогласиеНаОбработкуПерсональныхДанных/CommandModule.bsl deleted file mode 100644 index be2d75f0c..000000000 --- a/SSL/src/DataProcessors/СогласиеНаОбработкуПерсональныхДанных/Commands/СогласиеНаОбработкуПерсональныхДанных/CommandModule.bsl +++ /dev/null @@ -1,7 +0,0 @@ - -&НаКлиенте -Процедура ОбработкаКоманды(ПараметрКоманды, ПараметрыВыполненияКоманды) - - ОткрытьФорму("Обработка.СогласиеНаОбработкуПерсональныхДанных.Форма", Новый Структура("Субъекты", ПараметрКоманды), ПараметрыВыполненияКоманды.Источник, ПараметрыВыполненияКоманды.Уникальность, ПараметрыВыполненияКоманды.Окно); - -КонецПроцедуры diff --git a/SSL/src/DataProcessors/СогласиеНаОбработкуПерсональныхДанных/Forms/Форма/Form.form b/SSL/src/DataProcessors/СогласиеНаОбработкуПерсональныхДанных/Forms/Форма/Form.form deleted file mode 100644 index d59b0f148..000000000 --- a/SSL/src/DataProcessors/СогласиеНаОбработкуПерсональныхДанных/Forms/Форма/Form.form +++ /dev/null @@ -1,1237 +0,0 @@ - - - - ГруппаПараметрыСогласия - 12 - - ДатаСогласия - 27 - true - true - - true - - - ДатаСогласия - - - ДатаСогласияExtendedTooltip - 41 - Label - true - true - - Left - - - - ДатаСогласияКонтекстноеМеню - 28 - true - - InputField - Enter - true - Left - true - - true - true - true - true - true - true - Normal - - - - ГруппаОператорПерсональныхДанных - 22 - - Организация - 14 - true - true - - true - - - Организация - - - OnChange - ОрганизацияПриИзменении - - - ОрганизацияExtendedTooltip - 43 - Label - true - true - - Left - - - - ОрганизацияКонтекстноеМеню - 15 - true - - InputField - Enter - true - Left - true - - true - true - true - true - true - true - Normal - - - - АдресОрганизации - 23 - true - true - - true - - - АдресОрганизации - - - АдресОрганизацииExtendedTooltip - 44 - Label - true - true - - Left - - - - АдресОрганизацииКонтекстноеМеню - 24 - true - - InputField - Enter - true - Left - true - - true - true - true - true - true - true - Normal - - - - ОтветственныйЗаОбработкуПерсональныхДанных - 25 - true - true - - true - - - ОтветственныйЗаОбработкуПерсональныхДанных - - - ОтветственныйЗаОбработкуПерсональныхДанныхExtendedTooltip - 45 - Label - true - true - - Left - - - - ОтветственныйЗаОбработкуПерсональныхДанныхКонтекстноеМеню - 26 - true - - InputField - Enter - true - Left - true - - true - true - true - true - true - true - Normal - - - true - true - - true - - - <key>ru</key> - <value>Оператор персональных данных</value> - - - ru - Оператор персональных данных - - - ГруппаОператорПерсональныхДанныхExtendedTooltip - 42 - Label - true - true - - Left - - - UsualGroup - - Vertical - Auto - WeakSeparation - true - true - auto - Auto - Auto - - - - ГруппаСубъектыПерсональныхДанных - 13 - - ВариантПечатиСогласия - 1 - - <key>ru</key> - <value>Персональные данные субъекта</value> - - true - true - - true - - - ВариантПечатиСогласия - - - OnChange - ВариантПечатиСогласияПриИзменении - - - ВариантПечатиСогласияExtendedTooltip - 47 - Label - true - true - - Left - - - - ВариантПечатиСогласияКонтекстноеМеню - 2 - true - - RadioButtonField - Enter - true - Left - true - - 1 - - - ru - пока отсутствуют в информационной базе - - - ВыводитьБланк - - - - - ru - будут использованы из информационной базы - - - ВыводитьПоСубъектам - - - Vertical - - - - ГруппаДанныеПечатиСогласия - 32 - - ВыводитьБланк - 33 - - ИнформационнаяНадписьДанныеСубъектов - 35 - - <key>ru</key> - <value>Данные субъектов можно будет заполнить непосредственно в печатной форме</value> - - true - true - - true - - - ИнформационнаяНадписьДанныеСубъектовExtendedTooltip - 50 - Label - true - true - - Left - - - - ИнформационнаяНадписьДанныеСубъектовКонтекстноеМеню - 36 - true - - Label - true - true - - Style.ПоясняющийТекст - - - Left - - - true - true - - true - - - <key>ru</key> - <value>Выводить бланк</value> - - - ru - Выводить бланк - - - ВыводитьБланкExtendedTooltip - 49 - Label - true - true - - Left - - - Page - - Vertical - auto - - - - ВыводитьПоСубъектам - 34 - - СубъектыПерсональныхДанных - 3 - true - true - - true - - - СубъектыПерсональныхДанных - - None - - СубъектыПерсональныхДанныхФИО - 16 - true - true - - true - - - СубъектыПерсональныхДанных.ФИО - - - СубъектыПерсональныхДанныхФИОExtendedTooltip - 53 - Label - true - true - - Left - - - - СубъектыПерсональныхДанныхФИОКонтекстноеМеню - 17 - true - - InputField - Auto - true - Left - true - - true - true - true - true - true - true - Normal - - - - СубъектыПерсональныхДанныхАдрес - 18 - true - true - - true - - - СубъектыПерсональныхДанных.Адрес - - - СубъектыПерсональныхДанныхАдресExtendedTooltip - 54 - Label - true - true - - Left - - - - СубъектыПерсональныхДанныхАдресКонтекстноеМеню - 19 - true - - InputField - Auto - true - Left - true - - true - true - true - true - true - true - Normal - - - - СубъектыПерсональныхДанныхПаспортныеДанные - 20 - true - true - - true - - - СубъектыПерсональныхДанных.ПаспортныеДанные - - - СубъектыПерсональныхДанныхПаспортныеДанныеExtendedTooltip - 55 - Label - true - true - - Left - - - - СубъектыПерсональныхДанныхПаспортныеДанныеКонтекстноеМеню - 21 - true - - InputField - Auto - true - Left - true - - true - true - true - true - true - true - Normal - - - - СубъектыПерсональныхДанныхКоманднаяПанель - 5 - Left - true - - - СубъектыПерсональныхДанныхSearchString - 60 - - СубъектыПерсональныхДанныхSearchStringExtendedTooltip - 62 - Label - true - true - - Left - - - - СубъектыПерсональныхДанныхSearchStringContextMenu - 61 - true - - СубъектыПерсональныхДанных - - true - - - - СубъектыПерсональныхДанныхViewStatus - 63 - - СубъектыПерсональныхДанныхViewStatusExtendedTooltip - 65 - Label - true - true - - Left - - - - СубъектыПерсональныхДанныхViewStatusContextMenu - 64 - true - - ViewStatusAddition - СубъектыПерсональныхДанных - - true - - - - СубъектыПерсональныхДанныхSearchControl - 66 - - СубъектыПерсональныхДанныхSearchControlExtendedTooltip - 68 - Label - true - true - - Left - - - - СубъектыПерсональныхДанныхSearchControlContextMenu - 67 - true - - SearchControlAddition - СубъектыПерсональныхДанных - - true - - - - СубъектыПерсональныхДанныхExtendedTooltip - 52 - Label - true - true - - Left - - - - СубъектыПерсональныхДанныхКонтекстноеМеню - 4 - true - - true - true - true - true - true - MultiRow -
          true
          - 1 - 1 - AutoUse - AutoUse - true - true - false - false - false - true - Auto - Auto - true - true - None - None - None - true - -
          - true - true - - true - - - <key>ru</key> - <value>Выводить по субъектам</value> - - - ru - Выводить по субъектам - - - ВыводитьПоСубъектамExtendedTooltip - 51 - Label - true - true - - Left - - - Page - - Vertical - auto - -
          - true - true - - true - - - <key>ru</key> - <value>Данные печати согласия</value> - - - ru - Данные печати согласия - - - ГруппаДанныеПечатиСогласияExtendedTooltip - 48 - Label - true - true - - Left - - - Pages - - Auto - -
          - true - true - - true - - - <key>ru</key> - <value>Субъекты персональных данных</value> - - - ru - Субъекты персональных данных, для которых оформляется согласие на обработку персональных данных - - - ГруппаСубъектыПерсональныхДанныхExtendedTooltip - 46 - Label - true - true - - Left - - - UsualGroup - - Vertical - Auto - WeakSeparation - true - true - auto - Auto - Auto - -
          - true - true - - true - - - <key>ru</key> - <value>Параметры согласия</value> - - - ru - Параметры согласия - - - ГруппаПараметрыСогласияExtendedTooltip - 40 - Label - true - true - - Left - - - UsualGroup - - Vertical - Auto - true - true - Auto - Auto - -
          - - ГруппаКнопкиПечати - 8 - - Печать - 9 - true - true - - true - - - ПечатьExtendedTooltip - 57 - Label - true - true - - Left - - - UsualButton - Form.Command.Печать - Normal - Auto - true - true - UserCmds - Auto - - - ПечатьMSWord - 10 - true - true - - true - - - ПечатьMSWordExtendedTooltip - 58 - Label - true - true - - Left - - - UsualButton - Form.Command.ПечатьMSWord - Normal - Auto - true - true - UserCmds - Auto - - - ПечатьOOWritter - 11 - true - true - - true - - - ПечатьOOWritterExtendedTooltip - 59 - Label - true - true - - Left - - - UsualButton - Form.Command.ПечатьOOWritter - Normal - Auto - true - true - UserCmds - Auto - - true - - true - - - <key>ru</key> - <value>Кнопки печати</value> - - - ru - Кнопки печати - - - ГруппаКнопкиПечатиExtendedTooltip - 56 - Label - true - true - - Left - - - UsualGroup - - Vertical - Auto - true - true - Auto - Auto - - - - ФормаКоманднаяПанель - -1 - - ФормаПечать - 29 - true - true - - true - - - ФормаПечатьExtendedTooltip - 37 - Label - true - true - - Left - - - Form.Command.Печать - Auto - true - true - true - UserCmds - Auto - - - ФормаПечатьMSWord - 30 - true - true - - true - - - ФормаПечатьMSWordExtendedTooltip - 38 - Label - true - true - - Left - - - Form.Command.ПечатьMSWord - Normal - Auto - true - true - UserCmds - Auto - - - ФормаПечатьOOWritter - 31 - true - true - - true - - - ФормаПечатьOOWritterExtendedTooltip - 39 - Label - true - true - - Left - - - Form.Command.ПечатьOOWritter - Normal - Auto - true - true - UserCmds - Auto - - Left - true - - - OnOpen - ПриОткрытии - - - OnCreateAtServer - ПриСозданииНаСервере - - LockOwner - Use - true - true - true - Vertical - true - true - true - UseIfNecessary - auto - true - - СубъектыПерсональныхДанных - - <key>ru</key> - <value>Субъекты персональных данных</value> - - 2 - - ValueTable - - - true - - - true - - - ФИО - - <key>ru</key> - <value>Фамилия, имя, отчество</value> - - 1 - - String - - 50 - - - - true - - - true - - - - Адрес - - <key>ru</key> - <value>Адрес</value> - - 2 - - String - - - - true - - - true - - - - ПаспортныеДанные - - <key>ru</key> - <value>Паспортные данные</value> - - 3 - - String - - - - true - - - true - - - - Субъект - - <key>ru</key> - <value>Субъект</value> - - 4 - - CatalogRef - - - true - - - true - - - - - ВариантПечатиСогласия - - <key>ru</key> - <value>Вариант печати согласия</value> - - 3 - - String - - 100 - - - - true - - - true - - - - Организация - - <key>ru</key> - <value>Организация</value> - - 1 - - CatalogRef.Организации - - - true - - - true - - FunctionalOption.ИспользоватьНесколькоОрганизаций - - Организация - - - - ДатаСогласия - - <key>ru</key> - <value>Дата согласия</value> - - 4 - - Date - - Date - - - - true - - - true - - - - ОтветственныйЗаОбработкуПерсональныхДанных - - <key>ru</key> - <value>Ответственный за обработку ПДн</value> - - 5 - - String - - - - true - - - true - - - ОтветственныйЗаОбработкуПерсональныхДанных - - - - АдресОрганизации - - <key>ru</key> - <value>Адрес организации</value> - - 6 - - String - - - - true - - - true - - - АдресОрганизации - - - - Объект - - <key>ru</key> - <value>Объект</value> - - 7 - - DataProcessorObject.СогласиеНаОбработкуПерсональныхДанных - - - true - - - true - -
          true
          -
          - - Печать - - <key>ru</key> - <value>Печать</value> - - 1 - - ru - Печать - - - true - - - - Печать - - - Auto - Auto - - - ПечатьMSWord - - <key>ru</key> - <value>Вывести в Microsoft Word</value> - - 2 - - ru - Открытие документа в Microsoft Word - - - true - - - - ПечатьMSWord - - - Auto - Auto - - - ПечатьOOWritter - - <key>ru</key> - <value>Вывести в OpenOffice.org Writer</value> - - 3 - - ru - Открытие документа в OpenOffice.org Writer - - - true - - - - ПечатьOOWritter - - - Auto - Auto - - - Субъекты - - - - - - - -
          diff --git a/SSL/src/DataProcessors/СогласиеНаОбработкуПерсональныхДанных/Forms/Форма/Module.bsl b/SSL/src/DataProcessors/СогласиеНаОбработкуПерсональныхДанных/Forms/Форма/Module.bsl deleted file mode 100644 index e203efea3..000000000 --- a/SSL/src/DataProcessors/СогласиеНаОбработкуПерсональныхДанных/Forms/Форма/Module.bsl +++ /dev/null @@ -1,267 +0,0 @@ - -#Область ОбработчикиСобытийФормы - -&НаСервере -Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) - - Если Параметры.Свойство("АвтоТест") Тогда // Возврат при получении формы для анализа. - Возврат; - КонецЕсли; - - Если НЕ Параметры.Свойство("ДатаСогласия", ДатаСогласия) Тогда - ДатаСогласия = ТекущаяДатаСеанса(); - КонецЕсли; - - Если НЕ Параметры.Свойство("Организация", Организация) Тогда - Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.Организации") Тогда - Модуль = ОбщегоНазначения.ОбщийМодуль("Справочники.Организации"); - Организация = Модуль.ОрганизацияПоУмолчанию(); - КонецЕсли; - КонецЕсли; - ЗаполнитьДанныеОрганизации(); - - Если ЗначениеЗаполнено(Параметры.Субъекты) Тогда - ВариантПечатиСогласия = "ВыводитьПоСубъектам"; - Для Каждого Субъект Из Параметры.Субъекты Цикл - НоваяСтрока = СубъектыПерсональныхДанных.Добавить(); - НоваяСтрока.Субъект = Субъект; - КонецЦикла; - ЗаполнитьДанныеСубъектовПерсональныхДанных(); - Иначе - ВариантПечатиСогласия = "ВыводитьБланк"; - КонецЕсли; - - Если ОбщегоНазначенияКлиентСервер.ЭтоLinuxКлиент() Тогда - Элементы.ФормаПечатьMSWord.Видимость = Ложь; - Элементы.ФормаПечатьOOWritter.Видимость = Ложь; - КонецЕсли; - -КонецПроцедуры - -&НаКлиенте -Процедура ПриОткрытии(Отказ) - - УстановитьДоступностьСпискаВыбораСубъектов(); - -КонецПроцедуры - -/////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ЭЛЕМЕНТОВ ФОРМЫ - -&НаКлиенте -Процедура ВариантПечатиСогласияПриИзменении(Элемент) - - УстановитьДоступностьСпискаВыбораСубъектов(); - -КонецПроцедуры - -&НаКлиенте -Процедура ОрганизацияПриИзменении(Элемент) - - ЗаполнитьДанныеОрганизации(); - -КонецПроцедуры - -/////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ КОМАНД - -&НаКлиенте -Процедура Печать(Команда) - - Отказ = Ложь; - - ПроверитьЗаполнениеФормы(Отказ); - - Если Отказ Тогда - Возврат; - КонецЕсли; - - ПараметрКоманды = Новый Массив; - Если СубъектыПерсональныхДанных.Количество() > 0 И ЗначениеЗаполнено(СубъектыПерсональныхДанных[0].Субъект) Тогда - ПараметрКоманды.Добавить(СубъектыПерсональныхДанных[0].Субъект); - Иначе - ПараметрКоманды.Добавить(ПредопределенноеЗначение("Справочник.Пользователи.ПустаяСсылка")); - КонецЕсли; - - УправлениеПечатьюКлиент.ВыполнитьКомандуПечати("Обработка.СогласиеНаОбработкуПерсональныхДанных", "СогласиеНаОбработкуПерсональныхДанных", - ПараметрКоманды, ЭтотОбъект, Новый Структура("ДанныеПечатиСогласия", ДанныеПечатиСогласия())); - -КонецПроцедуры - -&НаКлиенте -Процедура ПечатьMSWord(Команда) - - Отказ = Ложь; - - ПроверитьЗаполнениеФормы(Отказ); - - Если Отказ Тогда - Возврат; - КонецЕсли; - - ПечатьСогласияНаОбработкуПерсональныхДанных("Обработка.СогласиеНаОбработкуПерсональныхДанных", "СогласиеНаОбработкуПерсональныхДанных(MSWord)", ДанныеПечатиСогласия(), ЭтотОбъект); - -КонецПроцедуры - -&НаКлиенте -Процедура ПечатьOOWritter(Команда) - - Отказ = Ложь; - - ПроверитьЗаполнениеФормы(Отказ); - - Если Отказ Тогда - Возврат; - КонецЕсли; - - ПечатьСогласияНаОбработкуПерсональныхДанных("Обработка.СогласиеНаОбработкуПерсональныхДанных", "СогласиеНаОбработкуПерсональныхДанных(ODT)", ДанныеПечатиСогласия(), ЭтотОбъект); - -КонецПроцедуры - -#КонецОбласти - -#Область СлужебныеПроцедурыИФункции - -&НаКлиенте -Процедура УстановитьДоступностьСпискаВыбораСубъектов() - - Элементы.ГруппаДанныеПечатиСогласия.ТекущаяСтраница = Элементы[ВариантПечатиСогласия]; - -КонецПроцедуры - -&НаКлиенте -Функция ДанныеПечатиСогласия() - - ОбщиеДанные = Новый Структура; - ОбщиеДанные.Вставить("ДатаСогласия", ?(ЗначениеЗаполнено(ДатаСогласия), Формат(ДатаСогласия, "ДЛФ=DD"), НСтр("ru = '«____»_______________20___г.'"))); - ОбщиеДанные.Вставить("Организация", ?(ЗначениеЗаполнено(Организация), Организация, НСтр("ru = '<Организация>'"))); - ОбщиеДанные.Вставить("АдресОрганизации", ?(ЗначениеЗаполнено(АдресОрганизации), АдресОрганизации, НСтр("ru = '<Адрес организации>'"))); - ОбщиеДанные.Вставить("ОтветственныйЗаОбработкуПерсональныхДанных", ?(ЗначениеЗаполнено(ОтветственныйЗаОбработкуПерсональныхДанных), ОтветственныйЗаОбработкуПерсональныхДанных, НСтр("ru = '<ФИО ответственного лица>'"))); - - Субъекты = Новый Массив; - Если ВариантПечатиСогласия = "ВыводитьБланк" Тогда - Субъекты.Добавить(Новый Структура("ФИО, Адрес, ПаспортныеДанные", НСтр("ru = '<ФИО субъекта>'"), НСтр("ru = '<Адрес субъекта>'"), НСтр("ru = '<Паспортные данные субъекта>'"))); - Иначе - Для Каждого Субъект Из СубъектыПерсональныхДанных Цикл - ДанныеСубъекта = Новый Структура("ФИО, Адрес, ПаспортныеДанные"); - ЗаполнитьЗначенияСвойств(ДанныеСубъекта, Субъект); - Субъекты.Добавить(ДанныеСубъекта); - КонецЦикла; - КонецЕсли; - - // Структура по каждому субъекту дополняется общими данными. - Для Каждого Субъект Из Субъекты Цикл - Для Каждого КлючИЗначение Из ОбщиеДанные Цикл - Субъект.Вставить(КлючИЗначение.Ключ, КлючИЗначение.Значение); - КонецЦикла; - КонецЦикла; - - Возврат Субъекты; - -КонецФункции - -&НаСервере -Процедура ЗаполнитьДанныеОрганизации() - - ДанныеОрганизацииОператора = Новый Структура("АдресОрганизации, ОтветственныйЗаОбработкуПерсональныхДанных"); - - ЗащитаПерсональныхДанныхПереопределяемый.ДополнитьДанныеОрганизацииОператораПерсональныхДанных(Организация, ДанныеОрганизацииОператора, ДатаСогласия); - - ЗаполнитьЗначенияСвойств(ЭтотОбъект, ДанныеОрганизацииОператора); - -КонецПроцедуры - -&НаСервере -Процедура ЗаполнитьДанныеСубъектовПерсональныхДанных() - - // Заполнение данных субъектов. - ЗащитаПерсональныхДанныхПереопределяемый.ДополнитьДанныеСубъектовПерсональныхДанных(СубъектыПерсональныхДанных, ДатаСогласия); - -КонецПроцедуры - -&НаКлиенте -Процедура ПечатьСогласияНаОбработкуПерсональныхДанных(ИмяМенеджераПечати, ИмяМакета, Субъекты, ФормаИсточник) - - // Проверим количество объектов. - Если Субъекты.Количество() = 0 Тогда - Возврат; - КонецЕсли; - - ТекстСообщения = ?(Субъекты.Количество() > 1, - НСтр("ru = 'Выполняется формирование печатных форм...'"), - НСтр("ru = 'Выполняется формирование печатной формы...'")); - Состояние(ТекстСообщения); - - МакетИДанныеОбъекта = УправлениеПечатьюВызовСервера.МакетыИДанныеОбъектовДляПечати(ИмяМенеджераПечати, ИмяМакета, Субъекты); - - Для Каждого Субъект Из Субъекты Цикл - НапечататьСогласиеНаОбработкуПерсональныхДанныхСубъекта(Строка(Субъект.ФИО) + Строка(Субъект.Адрес) + Строка(Субъект.ПаспортныеДанные), МакетИДанныеОбъекта, ИмяМакета, МакетИДанныеОбъекта.ЛокальныйКаталогФайловПечати); - КонецЦикла; - -КонецПроцедуры - -&НаКлиенте -Процедура НапечататьСогласиеНаОбработкуПерсональныхДанныхСубъекта(СубъектКлюч, МакетИДанныеОбъекта, ИмяМакета, ЛокальныйКаталогФайловПечати) - - ТипМакета = МакетИДанныеОбъекта.Макеты.ТипыМакетов[ИмяМакета]; - ДвоичныеДанныеМакетов = МакетИДанныеОбъекта.Макеты.ДвоичныеДанныеМакетов; - Области = МакетИДанныеОбъекта.Макеты.ОписаниеОбластей; - ДанныеОбъекта = МакетИДанныеОбъекта.Данные[СубъектКлюч][ИмяМакета]; - - Макет = УправлениеПечатьюКлиент.ИнициализироватьМакетОфисногоДокумента(ДвоичныеДанныеМакетов[ИмяМакета], ТипМакета, ИмяМакета); - Если Макет = Неопределено Тогда - Возврат; - КонецЕсли; - - ЗакрытьОкноПечатнойФормы = Ложь; - Попытка - ПечатнаяФорма = УправлениеПечатьюКлиент.ИнициализироватьПечатнуюФорму(ТипМакета, Макет.НастройкиСтраницыМакета); - Если ПечатнаяФорма = Неопределено Тогда - УправлениеПечатьюКлиент.ОчиститьСсылки(Макет); - Возврат; - КонецЕсли; - - // Вывод обычных областей с параметрами. - Область = УправлениеПечатьюКлиент.ОбластьМакета(Макет, Области[ИмяМакета]["Заголовок"]); - УправлениеПечатьюКлиент.ПрисоединитьОбластьИЗаполнитьПараметры(ПечатнаяФорма, Область, ДанныеОбъекта, Ложь); - - Область = УправлениеПечатьюКлиент.ОбластьМакета(Макет, Области[ИмяМакета]["НомерДата"]); - УправлениеПечатьюКлиент.ПрисоединитьОбластьИЗаполнитьПараметры(ПечатнаяФорма, Область, ДанныеОбъекта, Ложь); - - Область = УправлениеПечатьюКлиент.ОбластьМакета(Макет, Области[ИмяМакета]["Преамбула"]); - УправлениеПечатьюКлиент.ПрисоединитьОбластьИЗаполнитьПараметры(ПечатнаяФорма, Область, ДанныеОбъекта, Ложь); - - Область = УправлениеПечатьюКлиент.ОбластьМакета(Макет, Области[ИмяМакета]["ОсновнойТекст"]); - УправлениеПечатьюКлиент.ПрисоединитьОбластьИЗаполнитьПараметры(ПечатнаяФорма, Область, ДанныеОбъекта, Ложь); - - Область = УправлениеПечатьюКлиент.ОбластьМакета(Макет, Области[ИмяМакета]["РеквизитыОператора"]); - УправлениеПечатьюКлиент.ПрисоединитьОбластьИЗаполнитьПараметры(ПечатнаяФорма, Область, ДанныеОбъекта, Ложь); - - Область = УправлениеПечатьюКлиент.ОбластьМакета(Макет, Области[ИмяМакета]["РеквизитыСубъекта"]); - УправлениеПечатьюКлиент.ПрисоединитьОбластьИЗаполнитьПараметры(ПечатнаяФорма, Область, ДанныеОбъекта, Ложь); - - Область = УправлениеПечатьюКлиент.ОбластьМакета(Макет, Области[ИмяМакета]["Подпись"]); - УправлениеПечатьюКлиент.ПрисоединитьОбластьИЗаполнитьПараметры(ПечатнаяФорма, Область, ДанныеОбъекта, Ложь); - - УправлениеПечатьюКлиент.ПоказатьДокумент(ПечатнаяФорма); - Исключение - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(КраткоеПредставлениеОшибки(ИнформацияОбОшибке())); - ЗакрытьОкноПечатнойФормы = Истина; - КонецПопытки; - - УправлениеПечатьюКлиент.ОчиститьСсылки(ПечатнаяФорма, ЗакрытьОкноПечатнойФормы); - УправлениеПечатьюКлиент.ОчиститьСсылки(Макет); - -КонецПроцедуры - -&НаКлиенте -Процедура ПроверитьЗаполнениеФормы(Отказ) - - Если ВариантПечатиСогласия = "ВыводитьПоСубъектам" И СубъектыПерсональныхДанных.Количество() = 0 Тогда - ТекстСообщения = НСтр("ru = 'Субъекты персональных данных не выбраны.'"); - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстСообщения, , "СубъектыПерсональныхДанных", , Отказ); - КонецЕсли; - -КонецПроцедуры - -#КонецОбласти diff --git a/SSL/src/DataProcessors/СогласиеНаОбработкуПерсональныхДанных/Help/ru.html b/SSL/src/DataProcessors/СогласиеНаОбработкуПерсональныхДанных/Help/ru.html deleted file mode 100644 index a75411af7..000000000 --- a/SSL/src/DataProcessors/СогласиеНаОбработкуПерсональныхДанных/Help/ru.html +++ /dev/null @@ -1,22 +0,0 @@ - -

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

          -

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

          -

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

          -

          Оператор персональных данных

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

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

          -

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

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

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

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

          Печать формы согласия

          -
          • Для печати формы в виде табличных документов формата .mxl нажмите кнопку Печать, далее укажите нужное количество копий, нажмите кнопку Печать. -
          • Для печати в формате Microcoft Word или OpenOffice.org Writer используйте соответствующие кнопки. Необходимо иметь в виду, что на компьютере должно быть установлено соответствующее приложение.

          См. также:

          - \ No newline at end of file diff --git a/SSL/src/DataProcessors/СогласиеНаОбработкуПерсональныхДанных/ManagerModule.bsl b/SSL/src/DataProcessors/СогласиеНаОбработкуПерсональныхДанных/ManagerModule.bsl deleted file mode 100644 index ba32e1aa3..000000000 --- a/SSL/src/DataProcessors/СогласиеНаОбработкуПерсональныхДанных/ManagerModule.bsl +++ /dev/null @@ -1,167 +0,0 @@ -#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда - -#Область СлужебныеПроцедурыИФункции - -////////////////////////////////////////////////////////////////////////////// -// ПРОЦЕДУРЫ ПОДГОТОВКИ ПЕЧАТНЫХ ФОРМ - -// Сформировать печатные формы объектов. -// -// ВХОДЯЩИЕ: -// МассивОбъектов - Массив - Массив ссылок на объекты которые нужно распечатать. -// -// ИСХОДЯЩИЕ: -// КоллекцияПечатныхФорм - Таблица значений - Сформированные табличные документы. -// ОшибкиПечати - Список значений - Ошибки печати (значение - ссылка на объект, представление - текст -// ошибки). -// ОбъектыПечати - Список значений - Объекты печати (значение - ссылка на объект, представление - имя -// области в которой был выведен объект). -// ПараметрыВывода - Структура - Параметры сформированных табличных документов. -// -Процедура Печать(МассивОбъектов, ПараметрыПечати, КоллекцияПечатныхФорм, ОбъектыПечати, ПараметрыВывода) Экспорт - - Если УправлениеПечатью.НужноПечататьМакет(КоллекцияПечатныхФорм, "СогласиеНаОбработкуПерсональныхДанных") Тогда - УправлениеПечатью.ВывестиТабличныйДокументВКоллекцию( - КоллекцияПечатныхФорм, - "СогласиеНаОбработкуПерсональныхДанных", НСтр("ru = 'Согласие на обработку персональных данных'"), - ПечатьСогласияНаОбработкуПДн(ПараметрыПечати.ДанныеПечатиСогласия, ОбъектыПечати), , - "Обработка.СогласиеНаОбработкуПерсональныхДанных.ПФ_MXL_СогласиеНаОбработкуПерсональныхДанных"); - КонецЕсли; - -КонецПроцедуры - -// Процедура печати согласия на обработку персональных данных. -// -Функция ПечатьСогласияНаОбработкуПДн(Субъекты, ОбъектыПечати) Экспорт - - ТабличныйДокумент = Новый ТабличныйДокумент; - ТабличныйДокумент.КлючПараметровПечати = "ПараметрыПечати_СогласиеНаОбработкуПерсональныхДанных"; - - ИмяМакета = "СогласиеНаОбработкуПерсональныхДанных"; - - ПолеВписывания = СтроковыеФункцииКлиентСервер.СформироватьСтрокуСимволов("_", 50); - - ОбластиМакета = Новый Структура; - ОбластиМакета.Вставить("Заголовок"); - ОбластиМакета.Вставить("НомерДата"); - ОбластиМакета.Вставить("Преамбула"); - ОбластиМакета.Вставить("П1_ЦелиОбработкиПДн"); - ОбластиМакета.Вставить("П2_СоставПДн"); - ОбластиМакета.Вставить("П3_ПравоПолученияИнформации"); - ОбластиМакета.Вставить("П4_СрокДействия"); - ОбластиМакета.Вставить("П5_ДействияСПДн"); - ОбластиМакета.Вставить("П6_ПравоОтзыва"); - ОбластиМакета.Вставить("РеквизитыОператора"); - ОбластиМакета.Вставить("РеквизитыСубъекта"); - - Макет = УправлениеПечатью.МакетПечатнойФормы("Обработка.СогласиеНаОбработкуПерсональныхДанных.ПФ_MXL_СогласиеНаОбработкуПерсональныхДанных"); - - // Общие данные одинаковые для любого субъекта. - ОбщиеДанные = Субъекты[0]; - - // Заполнение общих для всех субъектов областей согласия. - Для Каждого КлючИЗначение Из ОбластиМакета Цикл - ИмяОбласти = КлючИЗначение.Ключ; - ОбластьМакета = Макет.ПолучитьОбласть(ИмяОбласти); - Если ИмяОбласти = "НомерДата" Тогда - ОбластьМакета.Параметры.ДатаСогласия = ОбщиеДанные.ДатаСогласия; - ИначеЕсли ИмяОбласти = "Преамбула" Тогда - ОбластьМакета.Параметры.Организация = ?(ЗначениеЗаполнено(ОбщиеДанные.Организация), ОбщиеДанные.Организация, ПолеВписывания); - ОбластьМакета.Параметры.ОтветственныйЗаОбработкуПерсональныхДанных = ?(ЗначениеЗаполнено(ОбщиеДанные.ОтветственныйЗаОбработкуПерсональныхДанных), ОбщиеДанные.ОтветственныйЗаОбработкуПерсональныхДанных, ПолеВписывания); - ИначеЕсли ИмяОбласти = "РеквизитыОператора" Тогда - ОбластьМакета.Параметры.Заполнить(ОбщиеДанные); - КонецЕсли; - ОбластиМакета.Вставить(ИмяОбласти, ОбластьМакета); - КонецЦикла; - - // Вывод форм для субъектов - ПервыйДокумент = Истина; - Для Каждого Субъект Из Субъекты Цикл - Если Не ПервыйДокумент Тогда - ТабличныйДокумент.ВывестиГоризонтальныйРазделительСтраниц(); - КонецЕсли; - ПервыйДокумент = Ложь; - ТабличныйДокумент.Вывести(ПечатьСогласияНаОбработкуПДнСубъекта(Субъект, ОбластиМакета, ПолеВписывания)); - КонецЦикла; - - Возврат ТабличныйДокумент; - -КонецФункции - -Функция ПечатьСогласияНаОбработкуПДнСубъекта(Субъект, ОбластиМакета, ПолеВписывания) - - ТабличныйДокумент = Новый ТабличныйДокумент; - - Для Каждого КлючИЗначение Из ОбластиМакета Цикл - ИмяОбласти = КлючИЗначение.Ключ; - ОбластьМакета = КлючИЗначение.Значение; - Если ИмяОбласти = "Преамбула" Тогда - ОбластьМакета.Параметры.ФИО = ?(ЗначениеЗаполнено(Субъект.ФИО), Субъект.ФИО, ПолеВписывания); - ИначеЕсли ИмяОбласти = "РеквизитыСубъекта" Тогда - ОбластьМакета.Параметры.Заполнить(Субъект); - КонецЕсли; - ТабличныйДокумент.Вывести(ОбластьМакета); - КонецЦикла; - - Возврат ТабличныйДокумент; - -КонецФункции - -//////////////////////////////////////////////////////////////////////////////// -// Работа с макетами офисных документов. - -Функция ПолучитьДанныеПечати(Знач Субъекты, Знач МассивИменМакетов) Экспорт - - ДанныеПоВсемОбъектам = Новый Соответствие; - - Для Каждого Субъект Из Субъекты Цикл - ДанныеОбъектаПоМакетам = Новый Соответствие; - Для Каждого ИмяМакета Из МассивИменМакетов Цикл - ДанныеОбъектаПоМакетам.Вставить(ИмяМакета, Субъект); - КонецЦикла; - ДанныеПоВсемОбъектам.Вставить(Строка(Субъект.ФИО) + Строка(Субъект.Адрес) + Строка(Субъект.ПаспортныеДанные), ДанныеОбъектаПоМакетам); - КонецЦикла; - - ОписаниеОбластей = Новый Соответствие; - ДвоичныеДанныеМакетов = Новый Соответствие; - ТипыМакетов = Новый Соответствие; - - Для Каждого ИмяМакета Из МассивИменМакетов Цикл - Если ИмяМакета = "СогласиеНаОбработкуПерсональныхДанных(MSWord)" Тогда - ДвоичныеДанныеМакетов.Вставить(ИмяМакета, УправлениеПечатью.МакетПечатнойФормы("Обработка.СогласиеНаОбработкуПерсональныхДанных.ПФ_DOC_СогласиеНаОбработкуПерсональныхДанных")); - ТипыМакетов.Вставить(ИмяМакета, "DOC"); - ИначеЕсли ИмяМакета = "СогласиеНаОбработкуПерсональныхДанных(ODT)" Тогда - ДвоичныеДанныеМакетов.Вставить(ИмяМакета, УправлениеПечатью.МакетПечатнойФормы("Обработка.СогласиеНаОбработкуПерсональныхДанных.ПФ_ODT_СогласиеНаОбработкуПерсональныхДанных")); - ТипыМакетов.Вставить(ИмяМакета, "ODT"); - КонецЕсли; - ОписаниеОбластей.Вставить(ИмяМакета, ПолучитьОписаниеОбластейМакетаОфисногоДокумента()); - КонецЦикла; - - Возврат Новый Структура("Данные, Макеты", - ДанныеПоВсемОбъектам, - Новый Структура("ОписаниеОбластей, ТипыМакетов, ДвоичныеДанныеМакетов", - ОписаниеОбластей, - ТипыМакетов, - ДвоичныеДанныеМакетов)); - -КонецФункции - -Функция ПолучитьОписаниеОбластейМакетаОфисногоДокумента() - - ОписаниеОбластей = Новый Структура; - - УправлениеПечатью.ДобавитьОписаниеОбласти(ОписаниеОбластей, "Заголовок", "Общая"); - УправлениеПечатью.ДобавитьОписаниеОбласти(ОписаниеОбластей, "НомерДата", "Общая"); - УправлениеПечатью.ДобавитьОписаниеОбласти(ОписаниеОбластей, "Преамбула", "Общая"); - УправлениеПечатью.ДобавитьОписаниеОбласти(ОписаниеОбластей, "ОсновнойТекст", "Общая"); - УправлениеПечатью.ДобавитьОписаниеОбласти(ОписаниеОбластей, "РеквизитыОператора", "Общая"); - УправлениеПечатью.ДобавитьОписаниеОбласти(ОписаниеОбластей, "РеквизитыСубъекта", "Общая"); - УправлениеПечатью.ДобавитьОписаниеОбласти(ОписаниеОбластей, "Подпись", "Общая"); - - Возврат ОписаниеОбластей; - -КонецФункции - -#КонецОбласти - -#КонецЕсли \ No newline at end of file diff --git a/SSL/src/DataProcessors/СогласиеНаОбработкуПерсональныхДанных/Templates/ПФ_DOC_СогласиеНаОбработкуПерсональныхДанных/Template.bin b/SSL/src/DataProcessors/СогласиеНаОбработкуПерсональныхДанных/Templates/ПФ_DOC_СогласиеНаОбработкуПерсональныхДанных/Template.bin deleted file mode 100644 index 8384f4180..000000000 Binary files a/SSL/src/DataProcessors/СогласиеНаОбработкуПерсональныхДанных/Templates/ПФ_DOC_СогласиеНаОбработкуПерсональныхДанных/Template.bin and /dev/null differ diff --git a/SSL/src/DataProcessors/СогласиеНаОбработкуПерсональныхДанных/Templates/ПФ_ODT_СогласиеНаОбработкуПерсональныхДанных/Template.bin b/SSL/src/DataProcessors/СогласиеНаОбработкуПерсональныхДанных/Templates/ПФ_ODT_СогласиеНаОбработкуПерсональныхДанных/Template.bin deleted file mode 100644 index 801a7c212..000000000 Binary files a/SSL/src/DataProcessors/СогласиеНаОбработкуПерсональныхДанных/Templates/ПФ_ODT_СогласиеНаОбработкуПерсональныхДанных/Template.bin and /dev/null differ diff --git a/SSL/src/DataProcessors/СогласиеНаОбработкуПерсональныхДанных/СогласиеНаОбработкуПерсональныхДанных.mdo b/SSL/src/DataProcessors/СогласиеНаОбработкуПерсональныхДанных/СогласиеНаОбработкуПерсональныхДанных.mdo deleted file mode 100644 index c4beda2ca..000000000 --- a/SSL/src/DataProcessors/СогласиеНаОбработкуПерсональныхДанных/СогласиеНаОбработкуПерсональныхДанных.mdo +++ /dev/null @@ -1,62 +0,0 @@ - - - - - - - СогласиеНаОбработкуПерсональныхДанных - - ru - Согласие на обработку персональных данных (в соответствии с требованиями 152-ФЗ) - - DataProcessor.СогласиеНаОбработкуПерсональныхДанных.Form.Форма - true - - - ru - - - - Форма - - ru - Форма - - PersonalComputer - MobileDevice - - - ПФ_MXL_СогласиеНаОбработкуПерсональныхДанных - - ru - Согласие на обработку персональных данных (табличный документ 1С:Предприятия) - - - - ПФ_DOC_СогласиеНаОбработкуПерсональныхДанных - - ru - Cогласие на обработку персональных данных (документ Microsoft Word) - - BinaryData - - - ПФ_ODT_СогласиеНаОбработкуПерсональныхДанных - - ru - Cогласие на обработку персональных данных (документ OpenOffice.org Writer) - - BinaryData - - - СогласиеНаОбработкуПерсональныхДанных - - ru - Согласие на обработку персональных данных... - - Печать формы согласия на обработку персональных данных - CommandGroup.Печать - Multiple - Auto - - diff --git a/SSL/src/DataProcessors/СопоставлениеОбъектовИнформационныхБаз/Forms/НастройкаАвтоматическогоСопоставления/Form.form b/SSL/src/DataProcessors/СопоставлениеОбъектовИнформационныхБаз/Forms/НастройкаАвтоматическогоСопоставления/Form.form index 6b00cc43b..b4cd5f383 100644 --- a/SSL/src/DataProcessors/СопоставлениеОбъектовИнформационныхБаз/Forms/НастройкаАвтоматическогоСопоставления/Form.form +++ b/SSL/src/DataProcessors/СопоставлениеОбъектовИнформационныхБаз/Forms/НастройкаАвтоматическогоСопоставления/Form.form @@ -370,7 +370,6 @@ true true true - UseIfNecessary auto true @@ -430,7 +429,7 @@ ВыполнитьСопоставление - Auto + DontUse Auto @@ -452,7 +451,7 @@ Отмена - Auto + DontUse Auto diff --git a/SSL/src/DataProcessors/СопоставлениеОбъектовИнформационныхБаз/Forms/НастройкаПолейТаблицы/Form.form b/SSL/src/DataProcessors/СопоставлениеОбъектовИнформационныхБаз/Forms/НастройкаПолейТаблицы/Form.form index 6712f1b27..123303a2e 100644 --- a/SSL/src/DataProcessors/СопоставлениеОбъектовИнформационныхБаз/Forms/НастройкаПолейТаблицы/Form.form +++ b/SSL/src/DataProcessors/СопоставлениеОбъектовИнформационныхБаз/Forms/НастройкаПолейТаблицы/Form.form @@ -313,7 +313,6 @@ true true true - UseIfNecessary auto true @@ -355,7 +354,7 @@ Применить - Auto + DontUse Auto @@ -377,7 +376,7 @@ Отмена - Auto + DontUse Auto diff --git a/SSL/src/DataProcessors/СопоставлениеОбъектовИнформационныхБаз/Forms/НастройкаПолейТаблицыСопоставления/Form.form b/SSL/src/DataProcessors/СопоставлениеОбъектовИнформационныхБаз/Forms/НастройкаПолейТаблицыСопоставления/Form.form index 7c00fe34c..5dac9873c 100644 --- a/SSL/src/DataProcessors/СопоставлениеОбъектовИнформационныхБаз/Forms/НастройкаПолейТаблицыСопоставления/Form.form +++ b/SSL/src/DataProcessors/СопоставлениеОбъектовИнформационныхБаз/Forms/НастройкаПолейТаблицыСопоставления/Form.form @@ -419,7 +419,6 @@ true true true - UseIfNecessary auto true @@ -461,7 +460,7 @@ Применить - Auto + DontUse Auto @@ -483,7 +482,7 @@ Отмена - Auto + DontUse Auto diff --git a/SSL/src/DataProcessors/СопоставлениеОбъектовИнформационныхБаз/Forms/НастройкаСортировки/Form.form b/SSL/src/DataProcessors/СопоставлениеОбъектовИнформационныхБаз/Forms/НастройкаСортировки/Form.form index 857d9ef7d..9cbb00631 100644 --- a/SSL/src/DataProcessors/СопоставлениеОбъектовИнформационныхБаз/Forms/НастройкаСортировки/Form.form +++ b/SSL/src/DataProcessors/СопоставлениеОбъектовИнформационныхБаз/Forms/НастройкаСортировки/Form.form @@ -388,7 +388,6 @@ true true true - UseIfNecessary auto true @@ -479,7 +478,7 @@ Применить - Auto + DontUse Auto @@ -501,7 +500,7 @@ Отменить - Auto + DontUse Auto diff --git a/SSL/src/DataProcessors/СопоставлениеОбъектовИнформационныхБаз/Forms/РезультатАвтоматическогоСопоставления/Form.form b/SSL/src/DataProcessors/СопоставлениеОбъектовИнформационныхБаз/Forms/РезультатАвтоматическогоСопоставления/Form.form index aa0024d4e..db01dcb44 100644 --- a/SSL/src/DataProcessors/СопоставлениеОбъектовИнформационныхБаз/Forms/РезультатАвтоматическогоСопоставления/Form.form +++ b/SSL/src/DataProcessors/СопоставлениеОбъектовИнформационныхБаз/Forms/РезультатАвтоматическогоСопоставления/Form.form @@ -1892,7 +1892,6 @@ Vertical true true - UseIfNecessary auto true @@ -2275,7 +2274,7 @@ Применить - Auto + DontUse Auto @@ -2297,7 +2296,7 @@ Отмена - Auto + DontUse Auto @@ -2323,7 +2322,7 @@ Picture - Auto + DontUse Auto @@ -2349,7 +2348,7 @@ Picture - Auto + DontUse Auto @@ -2371,7 +2370,7 @@ ЗакрытьФорму - Auto + DontUse Auto diff --git a/SSL/src/DataProcessors/СопоставлениеОбъектовИнформационныхБаз/Forms/РезультатАвтоматическогоСопоставления/Module.bsl b/SSL/src/DataProcessors/СопоставлениеОбъектовИнформационныхБаз/Forms/РезультатАвтоматическогоСопоставления/Module.bsl index 3c0435e18..017cdb123 100644 --- a/SSL/src/DataProcessors/СопоставлениеОбъектовИнформационныхБаз/Forms/РезультатАвтоматическогоСопоставления/Module.bsl +++ b/SSL/src/DataProcessors/СопоставлениеОбъектовИнформационныхБаз/Forms/РезультатАвтоматическогоСопоставления/Module.bsl @@ -458,8 +458,7 @@ УникальныйИдентификатор, "Обработки.СопоставлениеОбъектовИнформационныхБаз.ВыполнитьАвтоматическоеСопоставлениеОбъектов", ПараметрыМетода, - НСтр("ru = 'Автоматическое сопоставление объектов'") - ); + НСтр("ru = 'Автоматическое сопоставление объектов'")); Если Результат.ЗаданиеВыполнено Тогда ПослеСопоставленияОбъектов(ПолучитьИзВременногоХранилища(Результат.АдресХранилища)); @@ -472,8 +471,7 @@ Исключение Отказ = Истина; ЗаписьЖурналаРегистрации(НСтр("ru = 'Помощник сопоставления объектов.Автоматическое сопоставление'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), - УровеньЖурналаРегистрации.Ошибка,,, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()) - ); + УровеньЖурналаРегистрации.Ошибка,,, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); Возврат; КонецПопытки; @@ -489,8 +487,7 @@ Исключение Отказ = Истина; ЗаписьЖурналаРегистрации(НСтр("ru = 'Помощник сопоставления объектов.Автоматическое сопоставление'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), - УровеньЖурналаРегистрации.Ошибка,,, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()) - ); + УровеньЖурналаРегистрации.Ошибка,,, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); Возврат; КонецПопытки; diff --git a/SSL/src/DataProcessors/СопоставлениеОбъектовИнформационныхБаз/Forms/Форма/Form.form b/SSL/src/DataProcessors/СопоставлениеОбъектовИнформационныхБаз/Forms/Форма/Form.form index f856a8a62..b74d502ec 100644 --- a/SSL/src/DataProcessors/СопоставлениеОбъектовИнформационныхБаз/Forms/Форма/Form.form +++ b/SSL/src/DataProcessors/СопоставлениеОбъектовИнформационныхБаз/Forms/Форма/Form.form @@ -2591,7 +2591,6 @@ Vertical true true - UseIfNecessary auto true @@ -3576,7 +3575,7 @@ ДобавитьСопоставление - Auto + DontUse Auto @@ -3599,7 +3598,7 @@ ОтменитьСопоставление - Auto + DontUse Auto @@ -3626,7 +3625,7 @@ TextPicture - Auto + DontUse Auto @@ -3652,7 +3651,7 @@ TextPicture - Auto + DontUse Auto @@ -3674,7 +3673,7 @@ ИзменитьПоляТаблицы - Auto + DontUse Auto @@ -3696,7 +3695,7 @@ TextPicture - Auto + DontUse Auto @@ -3722,7 +3721,7 @@ TextPicture - Auto + DontUse Auto @@ -3747,7 +3746,7 @@ ЗаписатьОбновить - Auto + DontUse Auto @@ -3769,7 +3768,7 @@ ЗаписатьИЗакрыть - Auto + DontUse Auto @@ -3795,7 +3794,7 @@ TextPicture - Auto + DontUse Auto diff --git a/SSL/src/DataProcessors/СопоставлениеОбъектовИнформационныхБаз/Forms/Форма/Module.bsl b/SSL/src/DataProcessors/СопоставлениеОбъектовИнформационныхБаз/Forms/Форма/Module.bsl index eb3d09236..521cb42f7 100644 --- a/SSL/src/DataProcessors/СопоставлениеОбъектовИнформационныхБаз/Forms/Форма/Module.bsl +++ b/SSL/src/DataProcessors/СопоставлениеОбъектовИнформационныхБаз/Forms/Форма/Module.bsl @@ -51,29 +51,28 @@ // Заполняем список отборов СписокВыбора = Элементы.ОтборПоСтатусуСопоставления.СписокВыбора;; - ВариантыОтбораСтатусаСопоставления.Вставить(СписокВыбора.Добавить( - "ВсеОбъекты", НСтр("ru='Все данные'") - ).Значение, Новый ФиксированнаяСтруктура); + НовыйЭлементСписка = СписокВыбора.Добавить("ВсеОбъекты", НСтр("ru='Все данные'")); + ВариантыОтбораСтатусаСопоставления.Вставить(НовыйЭлементСписка.Значение, Новый ФиксированнаяСтруктура); - ВариантыОтбораСтатусаСопоставления.Вставить(СписокВыбора.Добавить( - "СопоставленныеОбъектыНеутвержденные", НСтр("ru='Изменения'"), - ).Значение, Новый ФиксированнаяСтруктура("СтатусСопоставления", 3)); + НовыйЭлементСписка = СписокВыбора.Добавить("СопоставленныеОбъектыНеутвержденные", НСтр("ru='Изменения'")); + ВариантыОтбораСтатусаСопоставления.Вставить(НовыйЭлементСписка.Значение, + Новый ФиксированнаяСтруктура("СтатусСопоставления", 3)); - ВариантыОтбораСтатусаСопоставления.Вставить(СписокВыбора.Добавить( - "СопоставленныеОбъекты", НСтр("ru='Сопоставленные данные'"),, - ).Значение, Новый ФиксированнаяСтруктура("СтатусСопоставленияДополнительный", 0)); + НовыйЭлементСписка = СписокВыбора.Добавить("СопоставленныеОбъекты", НСтр("ru='Сопоставленные данные'")); + ВариантыОтбораСтатусаСопоставления.Вставить(НовыйЭлементСписка.Значение, + Новый ФиксированнаяСтруктура("СтатусСопоставленияДополнительный", 0)); - ВариантыОтбораСтатусаСопоставления.Вставить(СписокВыбора.Добавить( - "НесопоставленныеОбъекты", НСтр("ru='Несопоставленные данные'"), - ).Значение, Новый ФиксированнаяСтруктура("СтатусСопоставленияДополнительный", 1)); + НовыйЭлементСписка = СписокВыбора.Добавить("НесопоставленныеОбъекты", НСтр("ru='Несопоставленные данные'")); + ВариантыОтбораСтатусаСопоставления.Вставить(НовыйЭлементСписка.Значение, + Новый ФиксированнаяСтруктура("СтатусСопоставленияДополнительный", 1)); - ВариантыОтбораСтатусаСопоставления.Вставить(СписокВыбора.Добавить( - "НесопоставленныеОбъектыПриемника", НСтр("ru='Несопоставленные данные этой базы'"), - ).Значение, Новый ФиксированнаяСтруктура("СтатусСопоставления", 1)); + НовыйЭлементСписка = СписокВыбора.Добавить("НесопоставленныеОбъектыПриемника", НСтр("ru='Несопоставленные данные этой базы'")); + ВариантыОтбораСтатусаСопоставления.Вставить(НовыйЭлементСписка.Значение, + Новый ФиксированнаяСтруктура("СтатусСопоставления", 1)); - ВариантыОтбораСтатусаСопоставления.Вставить(СписокВыбора.Добавить( - "НесопоставленныеОбъектыИсточника", НСтр("ru='Несопоставленные данные второй базы'"), - ).Значение, Новый ФиксированнаяСтруктура("СтатусСопоставления", -1)); + НовыйЭлементСписка = СписокВыбора.Добавить("НесопоставленныеОбъектыИсточника", НСтр("ru='Несопоставленные данные второй базы'")); + ВариантыОтбораСтатусаСопоставления.Вставить(НовыйЭлементСписка.Значение, + Новый ФиксированнаяСтруктура("СтатусСопоставления", -1)); // Умолчания ОтборПоСтатусуСопоставления = "НесопоставленныеОбъекты"; @@ -1016,10 +1015,8 @@ КонецЕсли; // Выбор связи возможен только для несопоставленных объектов источника или приемника. - Если Не ( - ТекущиеДанные.СтатусСопоставления=-1 // Несопоставленный объект источника. - Или ТекущиеДанные.СтатусСопоставления=+1 // Несопоставленный объект приемника. - ) Тогда + // В условии: несопоставленный объект источника и несопоставленный объект приемника. + Если Не (ТекущиеДанные.СтатусСопоставления=-1 Или ТекущиеДанные.СтатусСопоставления=+1) Тогда ПоказатьПредупреждение(, НСтр("ru = 'Объекты уже сопоставлены'"), 2); @@ -1041,15 +1038,10 @@ Строка1 = ТаблицаСопоставления.НайтиПоИдентификатору(Идентификатор1); Строка2 = ТаблицаСопоставления.НайтиПоИдентификатору(Идентификатор2); - Если Не ( - ( - Строка1.СтатусСопоставления = -1 // Несопоставленный объект источника. - И Строка2.СтатусСопоставления = +1 // Несопоставленный объект приемника. - ) Или ( - Строка1.СтатусСопоставления = +1 // Несопоставленный объект приемника. - И Строка2.СтатусСопоставления = -1 // Несопоставленный объект источника. - ) ) - Тогда + Если Не (( Строка1.СтатусСопоставления = -1 // Несопоставленный объект источника. + И Строка2.СтатусСопоставления = +1 ) // Несопоставленный объект приемника. + Или ( Строка1.СтатусСопоставления = +1 // Несопоставленный объект приемника. + И Строка2.СтатусСопоставления = -1 )) Тогда // Несопоставленный объект источника. НельзяУстановитьСвязьБыстро = Истина; КонецЕсли; КонецЕсли; @@ -1059,6 +1051,7 @@ ИдентификаторСтрокиНачала = Элементы.ТаблицаСопоставления.ТекущаяСтрока; ПараметрыОтбора = Новый Структура("СтатусСопоставления", ?(ТекущиеДанные.СтатусСопоставления = -1, 1, -1)); + ПараметрыОтбора.Вставить("ИндексКартинки", ТекущиеДанные.ИндексКартинки); ПараметрыФормы = Новый Структура; ПараметрыФормы.Вставить("АдресВременногоХранилища", ПолучитьАдресВременногоХранилищаТаблицыВыбораСвязи(ПараметрыОтбора)); @@ -1123,7 +1116,7 @@ КонецЕсли; - Возврат СтроковыеФункцииКлиентСервер.СтрокаИзМассиваПодстрок(Результат, ", "); + Возврат СтрСоединить(Результат, ", "); КонецФункции &НаКлиенте @@ -1381,8 +1374,7 @@ УникальныйИдентификатор, "Обработки.СопоставлениеОбъектовИнформационныхБаз.ВыполнитьСопоставлениеОбъектов", ПараметрыМетода, - НСтр("ru = 'Сопоставление объектов'") - ); + НСтр("ru = 'Сопоставление объектов'")); Если Результат.ЗаданиеВыполнено Тогда ПослеСопоставленияОбъектов(ПолучитьИзВременногоХранилища(Результат.АдресХранилища)); @@ -1395,8 +1387,7 @@ Исключение Отказ = Истина; ЗаписьЖурналаРегистрации(НСтр("ru = 'Помощник сопоставления объектов.Анализ данных'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), - УровеньЖурналаРегистрации.Ошибка,,, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()) - ); + УровеньЖурналаРегистрации.Ошибка,,, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); Возврат; КонецПопытки; @@ -1412,8 +1403,7 @@ Исключение Отказ = Истина; ЗаписьЖурналаРегистрации(НСтр("ru = 'Помощник сопоставления объектов.Анализ данных'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), - УровеньЖурналаРегистрации.Ошибка,,, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()) - ); + УровеньЖурналаРегистрации.Ошибка,,, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); Возврат; КонецПопытки; diff --git a/SSL/src/DataProcessors/СопоставлениеОбъектовИнформационныхБаз/Forms/ФормаВыбораСвязиСопоставления/Form.form b/SSL/src/DataProcessors/СопоставлениеОбъектовИнформационныхБаз/Forms/ФормаВыбораСвязиСопоставления/Form.form index e912e030d..d20b4990a 100644 --- a/SSL/src/DataProcessors/СопоставлениеОбъектовИнформационныхБаз/Forms/ФормаВыбораСвязиСопоставления/Form.form +++ b/SSL/src/DataProcessors/СопоставлениеОбъектовИнформационныхБаз/Forms/ФормаВыбораСвязиСопоставления/Form.form @@ -774,7 +774,6 @@ true true true - UseIfNecessary auto true @@ -886,7 +885,7 @@ TextPicture - Auto + DontUse Auto diff --git a/SSL/src/DataProcessors/СопоставлениеОбъектовИнформационныхБаз/Help/ru.html b/SSL/src/DataProcessors/СопоставлениеОбъектовИнформационныхБаз/Help/ru.html index 8f14d75a3..60ae9afed 100644 --- a/SSL/src/DataProcessors/СопоставлениеОбъектовИнформационныхБаз/Help/ru.html +++ b/SSL/src/DataProcessors/СопоставлениеОбъектовИнформационныхБаз/Help/ru.html @@ -14,4 +14,4 @@
        • В противном случае поля таблицы сопоставления могут содержать фиктивные ссылки вида:
          <Объект не найден> (26:a0b9001b24e002fe11dfba347dd41412).
        • Фиктивная ссылка указывает на объект в текущей информационной базе, который еще не был загружен из сообщения обмена.

        См. также:

        \ 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 4666c1eff..d6f57a915 100644 --- a/SSL/src/DataProcessors/СопоставлениеОбъектовИнформационныхБаз/ObjectModule.bsl +++ b/SSL/src/DataProcessors/СопоставлениеОбъектовИнформационныхБаз/ObjectModule.bsl @@ -1,10 +1,14 @@ #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда +#Область ОписаниеПеременных + Перем ПолеТаблицаСопоставления; Перем ПолеИнформацияСтатистикиСопоставленияОбъектов; Перем ПолеДайджестСопоставления; Перем ПолеТипСтрокаНеограниченнойДлины; +#КонецОбласти + #Область СлужебныеПроцедурыИФункции //////////////////////////////////////////////////////////////////////////////// @@ -116,8 +120,7 @@ ЗафиксироватьТранзакцию(); Исключение ЗаписьЖурналаРегистрации(НСтр("ru = 'Обмен данными'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), - УровеньЖурналаРегистрации.Ошибка,,, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()) - ); + УровеньЖурналаРегистрации.Ошибка,,, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); Отказ = Истина; ОтменитьТранзакцию(); Возврат; @@ -202,9 +205,9 @@ Процедура Конструктор() Экспорт // Заполняем список полей таблицы; из этих полей можно выбирать поля для сопоставления и отображения (поля поиска). - СписокПолейТаблицы.ЗагрузитьЗначения(СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(ПоляТаблицыПриемника)); + СписокПолейТаблицы.ЗагрузитьЗначения(СтрРазделить(ПоляТаблицыПриемника, ",", Ложь)); - МассивПолейПоиска = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(ПоляПоискаТаблицыПриемника); + МассивПолейПоиска = СтрРазделить(ПоляПоискаТаблицыПриемника, ",", Ложь); // Если поля поиска не указаны, то выбираем поля поиска сами. Если МассивПолейПоиска.Количество() = 0 Тогда @@ -1961,7 +1964,7 @@ Если Элемент.Пометка Тогда - Если Найти(Элемент.Представление, ОбменДаннымиСервер.СтрокаНеограниченнойДлины()) > 0 Тогда + Если СтрНайти(Элемент.Представление, ОбменДаннымиСервер.СтрокаНеограниченнойДлины()) > 0 Тогда ШаблонПоля = "ПОДСТРОКА(ТаблицаНеСопоставленныхОбъектовПриемникаПоПолям.ПриемникПолеNN, 0, 1024) = ПОДСТРОКА(ТаблицаНеСопоставленныхОбъектовИсточникаПоПолям.ИсточникПолеNN, 0, 1024)"; diff --git a/SSL/src/DataProcessors/СписокРеспондента/Forms/АрхивАнкет/Form.form b/SSL/src/DataProcessors/СписокРеспондента/Forms/АрхивАнкет/Form.form index b421da5e6..7a240d252 100644 --- a/SSL/src/DataProcessors/СписокРеспондента/Forms/АрхивАнкет/Form.form +++ b/SSL/src/DataProcessors/СписокРеспондента/Forms/АрхивАнкет/Form.form @@ -407,7 +407,6 @@ Vertical true true - UseIfNecessary auto true @@ -440,21 +439,6 @@ true - - ОтвеченныеАнкеты.АнкетаОпрос - - - ОтвеченныеАнкеты.ДатаАнкеты - - - ОтвеченныеАнкеты.ДатаОкончания - - - ОтвеченныеАнкеты.Представление - - - ОтвеченныеАнкеты.Статус - ОтвеченныеАнкеты.Анкета @@ -484,7 +468,6 @@ ПО Анкета.Опрос = НазначениеОпросов.Ссылка ГДЕ Анкета.Проведен - И (НЕ Анкета.ПометкаУдаления) И Анкета.Респондент = &Респондент И (НазначениеОпросов.ПоказыватьВАрхивеАнкет)) КАК ВложенныйЗапрос true diff --git a/SSL/src/DataProcessors/СписокРеспондента/Forms/Форма/Form.form b/SSL/src/DataProcessors/СписокРеспондента/Forms/Форма/Form.form index 7f28e4adb..cdd729f1b 100644 --- a/SSL/src/DataProcessors/СписокРеспондента/Forms/Форма/Form.form +++ b/SSL/src/DataProcessors/СписокРеспондента/Forms/Форма/Form.form @@ -441,7 +441,6 @@ true true true - UseIfNecessary auto true @@ -569,7 +568,7 @@ АрхивАнкет - Auto + DontUse Auto @@ -594,7 +593,7 @@ Обновить - Auto + DontUse Auto diff --git a/SSL/src/DataProcessors/СписокРеспондента/Forms/Форма/Module.bsl b/SSL/src/DataProcessors/СписокРеспондента/Forms/Форма/Module.bsl index 1776dfa29..dc7997ec4 100644 --- a/SSL/src/DataProcessors/СписокРеспондента/Forms/Форма/Module.bsl +++ b/SSL/src/DataProcessors/СписокРеспондента/Forms/Форма/Module.bsl @@ -141,14 +141,14 @@ Если ТипЗнч(СтрокаДерева.АнкетаОпрос) = Тип("ДокументСсылка.НазначениеОпросов") Тогда СтрокаВозврата = СтрокаВозврата + НСтр("ru = 'Анкета'") + " '" + СтрокаДерева.Наименование + "'"; ИначеЕсли ТипЗнч(СтрокаДерева.АнкетаОпрос) = Тип("ДокументСсылка.Анкета") Тогда - СтрокаВозврата = СтрокаВозврата + НСтр("ru = 'Анкета'") + " '" + СтрокаДерева.Наименование + - "', " + НСтр("ru = 'последний раз редактировавшаяся'") + " " + Формат(СтрокаДерева.ДатаАнкеты, "ДФ=dd.MM.yyyy"); + СтрокаВозврата = СтрокаВозврата + НСтр("ru = 'Анкета'") + " '" + СтрокаДерева.Наименование + + "', " + НСтр("ru = 'последний раз редактировавшаяся'") + " " + Формат(СтрокаДерева.ДатаАнкеты, "ДЛФ=D"); Иначе Возврат СтрокаВозврата; КонецЕсли; Если ЕстьОграниченияПоСроку Тогда - СтрокаВозврата = СтрокаВозврата + ", " + НСтр("ru = 'к заполнению до'") + " " + Формат(НачалоДня(КонецДня(СтрокаДерева.ДатаОкончания) + 1),"ДФ=dd.MM.yyyy"); + СтрокаВозврата = СтрокаВозврата + ", " + НСтр("ru = 'к заполнению до'") + " " + Формат(НачалоДня(КонецДня(СтрокаДерева.ДатаОкончания) + 1),"ДЛФ=D"); КонецЕсли; СтрокаВозврата = СтрокаВозврата + "."; 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 c1a7e2254..0606d1e28 100644 --- a/SSL/src/DataProcessors/ТекущиеДела/Forms/НастройкаПанели/Form.form +++ b/SSL/src/DataProcessors/ТекущиеДела/Forms/НастройкаТекущихДел/Form.form @@ -994,7 +994,7 @@ УстановитьФлажки - Auto + DontUse Auto @@ -1015,7 +1015,7 @@ СнятьФлажки - Auto + DontUse Auto @@ -1037,7 +1037,7 @@ КнопкаОК - Auto + DontUse Auto @@ -1059,7 +1059,7 @@ КнопкаОтмена - Auto + DontUse Auto @@ -1080,7 +1080,7 @@ ПереместитьВверх - Auto + DontUse Auto @@ -1101,7 +1101,7 @@ ПереместитьВниз - Auto + DontUse Auto diff --git a/SSL/src/DataProcessors/ТекущиеДела/Forms/НастройкаПанели/Module.bsl b/SSL/src/DataProcessors/ТекущиеДела/Forms/НастройкаТекущихДел/Module.bsl similarity index 90% rename from SSL/src/DataProcessors/ТекущиеДела/Forms/НастройкаПанели/Module.bsl rename to SSL/src/DataProcessors/ТекущиеДела/Forms/НастройкаТекущихДел/Module.bsl index f756149e9..bfc6869b7 100644 --- a/SSL/src/DataProcessors/ТекущиеДела/Forms/НастройкаПанели/Module.bsl +++ b/SSL/src/DataProcessors/ТекущиеДела/Forms/НастройкаТекущихДел/Module.bsl @@ -155,7 +155,7 @@ ИндексДела = 0; Если НастройкиОтображения = Неопределено Тогда - УстановитьНачальныйПорядокРазделов(ТекущиеДела); + ТекущиеДелаСлужебный.УстановитьНачальныйПорядокРазделов(ТекущиеДела); КонецЕсли; Для Каждого Дело Из ТекущиеДела Цикл @@ -298,32 +298,4 @@ КонецПроцедуры -&НаСервере -Процедура УстановитьНачальныйПорядокРазделов(ТекущиеДела) - - ПорядокРазделовКомандногоИнтерфейса = Новый Массив; - ТекущиеДелаПереопределяемый.ПриОпределенииПорядкаРазделовКомандногоИнтерфейса(ПорядокРазделовКомандногоИнтерфейса); - - Индекс = 0; - Для Каждого РазделКомандногоИнтерфейса Из ПорядокРазделовКомандногоИнтерфейса Цикл - РазделКомандногоИнтерфейса = СтрЗаменить(РазделКомандногоИнтерфейса.ПолноеИмя(), ".", ""); - ОтборСтрок = Новый Структура; - ОтборСтрок.Вставить("ИдентификаторВладельца", РазделКомандногоИнтерфейса); - - НайденныеСтроки = ТекущиеДела.НайтиСтроки(ОтборСтрок); - Для Каждого НайденнаяСтрока Из НайденныеСтроки Цикл - ИндексСтрокиВТаблице = ТекущиеДела.Индекс(НайденнаяСтрока); - Если ИндексСтрокиВТаблице = Индекс Тогда - Индекс = Индекс + 1; - Продолжить; - КонецЕсли; - - ТекущиеДела.Сдвинуть(ИндексСтрокиВТаблице, (Индекс - ИндексСтрокиВТаблице)); - Индекс = Индекс + 1; - КонецЦикла; - - КонецЦикла; - -КонецПроцедуры - #КонецОбласти \ No newline at end of file diff --git a/SSL/src/DataProcessors/ТекущиеДела/Forms/Форма/Form.form b/SSL/src/DataProcessors/ТекущиеДела/Forms/Форма/Form.form index c7a7efaa2..c335be7d8 100644 --- a/SSL/src/DataProcessors/ТекущиеДела/Forms/Форма/Form.form +++ b/SSL/src/DataProcessors/ТекущиеДела/Forms/Форма/Form.form @@ -475,7 +475,7 @@ Text - Auto + DontUse Auto @@ -500,7 +500,7 @@ Обновить - Auto + DontUse Auto diff --git a/SSL/src/DataProcessors/ТекущиеДела/Forms/Форма/Module.bsl b/SSL/src/DataProcessors/ТекущиеДела/Forms/Форма/Module.bsl index 8d91da748..0c0d96522 100644 --- a/SSL/src/DataProcessors/ТекущиеДела/Forms/Форма/Module.bsl +++ b/SSL/src/DataProcessors/ТекущиеДела/Forms/Форма/Module.bsl @@ -103,7 +103,7 @@ ПараметрыФормы = Новый Структура; ПараметрыФормы.Вставить("ТекущиеДела", ТекущиеДелаВХранилище); - ОткрытьФорму("Обработка.ТекущиеДела.Форма.НастройкаПанели", ПараметрыФормы,,,,,ОбработчикРезультата); + ОткрытьФорму("Обработка.ТекущиеДела.Форма.НастройкаТекущихДел", ПараметрыФормы,,,,,ОбработчикРезультата); КонецПроцедуры @@ -247,7 +247,7 @@ // Если пользователь не настраивал положение разделов в списке дел, то // они сортируются согласно порядку, определенному в процедуре ПриОпределенииПорядкаРазделовКомандногоИнтерфейса. Если СохраненныеНастройкиОтображения = Неопределено Тогда - УстановитьНачальныйПорядокРазделов(ТекущиеДела); + ТекущиеДелаСлужебный.УстановитьНачальныйПорядокРазделов(ТекущиеДела); КонецЕсли; ТекущаяГруппа = ""; @@ -801,34 +801,6 @@ КонецПроцедуры -&НаСервере -Процедура УстановитьНачальныйПорядокРазделов(ТекущиеДела) - - ПорядокРазделовКомандногоИнтерфейса = Новый Массив; - ТекущиеДелаПереопределяемый.ПриОпределенииПорядкаРазделовКомандногоИнтерфейса(ПорядокРазделовКомандногоИнтерфейса); - - Индекс = 0; - Для Каждого РазделКомандногоИнтерфейса Из ПорядокРазделовКомандногоИнтерфейса Цикл - РазделКомандногоИнтерфейса = СтрЗаменить(РазделКомандногоИнтерфейса.ПолноеИмя(), ".", ""); - ОтборСтрок = Новый Структура; - ОтборСтрок.Вставить("ИдентификаторВладельца", РазделКомандногоИнтерфейса); - - НайденныеСтроки = ТекущиеДела.НайтиСтроки(ОтборСтрок); - Для Каждого НайденнаяСтрока Из НайденныеСтроки Цикл - ИндексСтрокиВТаблице = ТекущиеДела.Индекс(НайденнаяСтрока); - Если ИндексСтрокиВТаблице = Индекс Тогда - Индекс = Индекс + 1; - Продолжить; - КонецЕсли; - - ТекущиеДела.Сдвинуть(ИндексСтрокиВТаблице, (Индекс - ИндексСтрокиВТаблице)); - Индекс = Индекс + 1; - КонецЦикла; - - КонецЦикла; - -КонецПроцедуры - &НаСервере Процедура ПереключитьКартинку(ИмяЭлемента) diff --git a/SSL/src/DataProcessors/ТекущиеДела/ТекущиеДела.mdo b/SSL/src/DataProcessors/ТекущиеДела/ТекущиеДела.mdo index c3813fd9f..bc3354a98 100644 --- a/SSL/src/DataProcessors/ТекущиеДела/ТекущиеДела.mdo +++ b/SSL/src/DataProcessors/ТекущиеДела/ТекущиеДела.mdo @@ -26,7 +26,7 @@ MobileDevice
      - НастройкаПанели + НастройкаТекущихДел ru Настройка текущих дел diff --git a/SSL/src/DataProcessors/ТранспортСообщенийОбменаEMAIL/Forms/Форма/Form.form b/SSL/src/DataProcessors/ТранспортСообщенийОбменаEMAIL/Forms/Форма/Form.form index c0795c573..ca8c8d2fb 100644 --- a/SSL/src/DataProcessors/ТранспортСообщенийОбменаEMAIL/Forms/Форма/Form.form +++ b/SSL/src/DataProcessors/ТранспортСообщенийОбменаEMAIL/Forms/Форма/Form.form @@ -18,7 +18,6 @@ true true true - UseIfNecessary auto true diff --git a/SSL/src/DataProcessors/ТранспортСообщенийОбменаEMAIL/ObjectModule.bsl b/SSL/src/DataProcessors/ТранспортСообщенийОбменаEMAIL/ObjectModule.bsl index 5f23ae10f..4f9fde138 100644 --- a/SSL/src/DataProcessors/ТранспортСообщенийОбменаEMAIL/ObjectModule.bsl +++ b/SSL/src/DataProcessors/ТранспортСообщенийОбменаEMAIL/ObjectModule.bsl @@ -1,5 +1,6 @@ #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда +#Область ОписаниеПеременных Перем СтрокаСообщенияОбОшибке Экспорт; Перем СтрокаСообщенияОбОшибкеЖР Экспорт; @@ -13,6 +14,7 @@ Перем ТелоСообщенияПростое; // Текст тела сообщения с вложением - файлом XML. Перем ТелоСообщенияСжатое; // Текст тела сообщения с вложением - сжатым файлом. Перем ТелоСообщенияПакетное; // Текст тела сообщения с вложением - сжатый файл, в котором с набор файлов. +#КонецОбласти #Область СлужебныеПроцедурыИФункции @@ -173,16 +175,6 @@ Возврат Ложь; КонецЕсли; - СообщениеОбОшибке = ""; - ДополнительноеСообщение = ""; - РаботаСПочтовымиСообщениямиСлужебный.ПроверитьВозможностьОтправкиИПолученияЭлектроннойПочты(EMAILУчетнаяЗапись, Неопределено, СообщениеОбОшибке, ДополнительноеСообщение); - - Если ЗначениеЗаполнено(СообщениеОбОшибке) Тогда - ПолучитьСообщениеОбОшибке(107); - ДополнитьСообщениеОбОшибке(СообщениеОбОшибке); - Возврат Ложь; - КонецЕсли; - Возврат Истина; КонецФункции diff --git a/SSL/src/DataProcessors/ТранспортСообщенийОбменаFILE/Forms/Форма/Form.form b/SSL/src/DataProcessors/ТранспортСообщенийОбменаFILE/Forms/Форма/Form.form index 574a2cf89..c630e66e8 100644 --- a/SSL/src/DataProcessors/ТранспортСообщенийОбменаFILE/Forms/Форма/Form.form +++ b/SSL/src/DataProcessors/ТранспортСообщенийОбменаFILE/Forms/Форма/Form.form @@ -18,7 +18,6 @@ true true true - UseIfNecessary auto true diff --git a/SSL/src/DataProcessors/ТранспортСообщенийОбменаFILE/ObjectModule.bsl b/SSL/src/DataProcessors/ТранспортСообщенийОбменаFILE/ObjectModule.bsl index 60812fbbd..9a8b0f6c5 100644 --- a/SSL/src/DataProcessors/ТранспортСообщенийОбменаFILE/ObjectModule.bsl +++ b/SSL/src/DataProcessors/ТранспортСообщенийОбменаFILE/ObjectModule.bsl @@ -1,5 +1,6 @@ #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда +#Область ОписаниеПеременных Перем СтрокаСообщенияОбОшибке Экспорт; Перем СтрокаСообщенияОбОшибкеЖР Экспорт; @@ -9,6 +10,7 @@ Перем ВременныйФайлСообщенияОбмена; // временный файл сообщения обмена для выгрузки/загрузки данных. Перем ВременныйКаталогСообщенийОбмена; // Временный каталог для сообщений обмена. Перем КаталогОбменаИнформацией; // Сетевой каталог для обмена сообщениями. +#КонецОбласти #Область СлужебныеПроцедурыИФункции @@ -364,7 +366,7 @@ Продолжить; // Проверяем что это файл, а не каталог. - ИначеЕсли (ТекущийФайл.ЭтоФайл() = Ложь) Тогда + ИначеЕсли НЕ ТекущийФайл.ЭтоФайл() Тогда Продолжить; diff --git a/SSL/src/DataProcessors/ТранспортСообщенийОбменаFTP/Forms/Форма/Form.form b/SSL/src/DataProcessors/ТранспортСообщенийОбменаFTP/Forms/Форма/Form.form index 21a070ffc..c4071f522 100644 --- a/SSL/src/DataProcessors/ТранспортСообщенийОбменаFTP/Forms/Форма/Form.form +++ b/SSL/src/DataProcessors/ТранспортСообщенийОбменаFTP/Forms/Форма/Form.form @@ -18,7 +18,6 @@ true true true - UseIfNecessary auto true diff --git a/SSL/src/DataProcessors/ТранспортСообщенийОбменаFTP/ObjectModule.bsl b/SSL/src/DataProcessors/ТранспортСообщенийОбменаFTP/ObjectModule.bsl index 1c2062bee..5c6d07932 100644 --- a/SSL/src/DataProcessors/ТранспортСообщенийОбменаFTP/ObjectModule.bsl +++ b/SSL/src/DataProcessors/ТранспортСообщенийОбменаFTP/ObjectModule.bsl @@ -1,5 +1,6 @@ #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда +#Область ОписаниеПеременных Перем СтрокаСообщенияОбОшибке Экспорт; Перем СтрокаСообщенияОбОшибкеЖР Экспорт; @@ -10,6 +11,7 @@ Перем ВременныйФайлСообщенияОбмена; // Временный файл сообщения обмена для выгрузки/загрузки данных. Перем ВременныйКаталогСообщенийОбмена; // Временный каталог для сообщений обмена. +#КонецОбласти #Область СлужебныеПроцедурыИФункции @@ -399,7 +401,7 @@ Продолжить; // Проверяем что это файл, а не каталог. - ИначеЕсли (ТекущийФайл.ЭтоФайл() = Ложь) Тогда + ИначеЕсли НЕ ТекущийФайл.ЭтоФайл() Тогда Продолжить; diff --git a/SSL/src/DataProcessors/УдалениеПомеченныхОбъектов/Forms/ОсновнаяФорма/Form.form b/SSL/src/DataProcessors/УдалениеПомеченныхОбъектов/Forms/ОсновнаяФорма/Form.form index c19a85eee..85341164d 100644 --- a/SSL/src/DataProcessors/УдалениеПомеченныхОбъектов/Forms/ОсновнаяФорма/Form.form +++ b/SSL/src/DataProcessors/УдалениеПомеченныхОбъектов/Forms/ОсновнаяФорма/Form.form @@ -2154,83 +2154,6 @@ СтраницыВариантовОтображенияПричин 255 - - СтраницаВыберитеНеУдаленныйОбъект - 317 - - ТекстОшибки1 - 345 - true - true - - true - - - ТекстОшибки - - None - - ТекстОшибки1РасширеннаяПодсказка - 347 - Label - true - true - - Left - - - - ТекстОшибки1КонтекстноеМеню - 346 - true - - InputField - true - Enter - true - Left - true - - 10 - true - true - true - true - true - true - true - Normal - - - true - true - - true - - - <key>ru</key> - <value> </value> - - - ru - - - - СтраницаВыберитеНеУдаленныйОбъектРасширеннаяПодсказка - 318 - Label - true - true - - Left - - - Page - - Vertical - auto - - СтраницаТекстОшибки 259 @@ -2285,6 +2208,47 @@ Normal + + СсылкаПодробнее + 452 + + <key>ru</key> + <value>Подробнее</value> + + true + true + + true + + + СсылкаПодробнееРасширеннаяПодсказка + 454 + Label + true + true + + Left + + + + СсылкаПодробнееКонтекстноеМеню + 453 + true + + Label + 7 + true + true + false + + + Click + СсылкаПодробнееНажатие + + true + Left + + true true @@ -2310,7 +2274,6 @@ Page - Vertical auto @@ -2676,9 +2639,6 @@ Label true true - - Style.FormTextColor - Left @@ -2707,9 +2667,6 @@ Label true true - - Style.FormTextColor - Left @@ -2758,12 +2715,11 @@ - НадписьИтогиЧастичногоУдаленияПояснение - 377 + НадписьВПодвале + 449 <key>ru</key> - <value>Для удаления объектов необходимо либо пометить на удаление все связанные с ними объекты -(в списке "Места использования"), либо очистить (заменить) их ссылки в перечисленных местах использования.</value> + <value>Для удаления объектов необходимо либо пометить на удаление все связанные с ними объекты (в списке "Места использования"), либо очистить (заменить) их ссылки в перечисленных местах использования.</value> true true @@ -2771,8 +2727,8 @@ true - НадписьИтогиЧастичногоУдаленияПояснениеРасширеннаяПодсказка - 379 + НадписьВПодвалеРасширеннаяПодсказка + 451 Label true true @@ -2781,8 +2737,8 @@ - НадписьИтогиЧастичногоУдаленияПояснениеКонтекстноеМеню - 378 + НадписьВПодвалеКонтекстноеМеню + 450 true Label @@ -3132,7 +3088,6 @@ true Vertical true - UseIfNecessary auto true @@ -3834,6 +3789,24 @@ true + + ПодробныйТекстОшибки + + <key>ru</key> + <value>Подробный текст ошибки</value> + + 23 + + String + + + + true + + + true + + КомандаДалее @@ -3849,7 +3822,7 @@ <name>КомандаДалее</name> </handler> </action> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <formCommands> @@ -3874,7 +3847,7 @@ <name>ДеревоПомеченныхНаУдалениеУстановитьВсе</name> </handler> </action> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <formCommands> @@ -3899,7 +3872,7 @@ <name>ДеревоПомеченныхНаУдалениеСнятьВсе</name> </handler> </action> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <formCommands> @@ -3917,7 +3890,7 @@ <name>КомандаНазад</name> </handler> </action> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <formCommands> @@ -3944,7 +3917,7 @@ </handler> </action> <representation>Picture</representation> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <formCommands> @@ -3969,7 +3942,7 @@ <name>СвязиНеУдаленныхУдалить</name> </handler> </action> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <formCommands> @@ -3991,7 +3964,7 @@ <name>НеУдаленныеЗаменитьНа</name> </handler> </action> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <formCommands> @@ -4017,7 +3990,7 @@ <name>ДеревоПомеченныхНаУдалениеИзменить</name> </handler> </action> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <formCommands> @@ -4042,7 +4015,7 @@ <name>НеУдаленныеУдалить</name> </handler> </action> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <commandInterface> diff --git a/SSL/src/DataProcessors/УдалениеПомеченныхОбъектов/Forms/ОсновнаяФорма/Module.bsl b/SSL/src/DataProcessors/УдалениеПомеченныхОбъектов/Forms/ОсновнаяФорма/Module.bsl index 218624632..d08973f20 100644 --- a/SSL/src/DataProcessors/УдалениеПомеченныхОбъектов/Forms/ОсновнаяФорма/Module.bsl +++ b/SSL/src/DataProcessors/УдалениеПомеченныхОбъектов/Forms/ОсновнаяФорма/Module.bsl @@ -93,6 +93,11 @@ СтандартныеПодсистемыКлиент.ОткрытьСписокАктивныхПользователей(ПараметрыФормы); КонецПроцедуры +&НаКлиенте +Процедура СсылкаПодробнееНажатие(Элемент) + СтандартныеПодсистемыКлиент.ПоказатьПодробнуюИнформацию(Неопределено, ПодробныйТекстОшибки); +КонецПроцедуры + #КонецОбласти #Область ОбработчикиСобытийЭлементовТаблицыФормыДеревоПомеченныхНаУдаление @@ -364,11 +369,12 @@ &НаКлиенте Процедура ПоказатьСвязиНеУдаленныхНаКлиенте() СтрокаДерева = Элементы.НеУдаленные.ТекущиеДанные; + ПоказыватьТекстОшибки = Истина; + ТекстОшибки = ""; + ПодробныйТекстОшибки = ""; Если СтрокаДерева = Неопределено Или СтрокаДерева.НомерКартинки < 1 Тогда // Ничего не выбрано или выбрана группа. - ТекущаяСтраница = Элементы.СтраницаВыберитеНеУдаленныйОбъект; - НеУдаленныеПодсказка = " "; - ТекстОшибки = НСтр("ru = 'Выберите объект, чтобы узнать причину, + НеУдаленныеПодсказка = НСтр("ru = 'Выберите объект, чтобы узнать причину, |по которой его не удалось удалить.'"); Иначе // Выбрана ссылка не удаленного объекта. @@ -377,13 +383,13 @@ СтрокаТаблицы.Видимость = Ложь; КонецЦикла; - ТекстОшибки = ""; - ПоказыватьТекстОшибки = Истина; + НеУдаленныеПодсказка = " "; Показываемые = СвязиНеУдаленных.НайтиСтроки(Новый Структура("УдаляемыйСсылка", СтрокаДерева.УдаляемыйСсылка)); Для Каждого СтрокаТаблицы Из Показываемые Цикл СтрокаТаблицы.Видимость = Истина; Если СтрокаТаблицы.ЭтоОшибка Тогда ТекстОшибки = СтрокаТаблицы.ОбнаруженныйСсылка; + ПодробныйТекстОшибки = СтрокаТаблицы.Представление; Иначе Если ПоказыватьТекстОшибки Тогда Элементы.СвязиНеУдаленных.ТекущаяСтрока = СтрокаТаблицы.ПолучитьИдентификатор(); @@ -391,18 +397,14 @@ КонецЕсли; КонецЕсли; КонецЦикла; - - Если ПоказыватьТекстОшибки Тогда - ТекущаяСтраница = Элементы.СтраницаТекстОшибки; - НеУдаленныеПодсказка = " "; - Иначе - ТекущаяСтраница = Элементы.СтраницаПричиныНеУдаления; - НеУдаленныеПодсказка = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Места использования объекта ""%1"" (%2):'"), - СтрокаДерева.Представление, - Формат(СтрокаДерева.КоличествоСвязей, "ЧН=0; ЧГ=") - ); - КонецЕсли; + КонецЕсли; + Если ПоказыватьТекстОшибки Тогда + ТекущаяСтраница = Элементы.СтраницаТекстОшибки; + Элементы.СсылкаПодробнее.Видимость = ЗначениеЗаполнено(ПодробныйТекстОшибки); + Иначе + ТекущаяСтраница = Элементы.СтраницаПричиныНеУдаления; + Шаблон = НСтр("ru = 'Места использования объекта ""%1"" (%2):'"); + НеУдаленныеПодсказка = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(Шаблон, СтрокаДерева.Представление, Формат(СтрокаДерева.КоличествоСвязей, "ЧН=0; ЧГ=")); КонецЕсли; Если Элементы.СтраницыВариантовОтображенияПричин.ТекущаяСтраница <> ТекущаяСтраница Тогда Элементы.СтраницыВариантовОтображенияПричин.ТекущаяСтраница = ТекущаяСтраница; @@ -535,14 +537,14 @@ Иначе ТекстВопроса = НСтр("ru = 'Пометить ""%1"" на удаление?'"); КонецЕсли; - ТекстВопроса = СтрЗаменить(ТекстВопроса, "%1", МассивСтрокТаблицы[0].Представление); + ТекстВопроса = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ТекстВопроса, МассивСтрокТаблицы[0].Представление); Иначе Если ЕстьПомеченныеНаУдаление Тогда ТекстВопроса = НСтр("ru = 'Снять с выделенных объектов (%1) пометку на удаление?'"); Иначе ТекстВопроса = НСтр("ru = 'Пометить выделенные объекты (%1) на удаление?'"); КонецЕсли; - ТекстВопроса = СтрЗаменить(ТекстВопроса, "%1", Формат(КоличествоМожноУдалить, "ЧН=0; ЧГ=")); + ТекстВопроса = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ТекстВопроса, Формат(КоличествоМожноУдалить, "ЧН=0; ЧГ=")); КонецЕсли; Кнопки = Новый СписокЗначений; @@ -751,7 +753,6 @@ Результат.Вставить("ФоновоеЗаданиеВыполнено", Ложь); Результат.ФоновоеЗаданиеВыполнено = ДлительныеОперации.ЗаданиеВыполнено(ФоновоеЗаданиеИдентификатор); Если Результат.ФоновоеЗаданиеВыполнено Тогда - СтандартныеПодсистемыКлиентСервер.НовыйРезультатВыполнения(Результат); ФоновоеЗаданиеЗагрузитьРезультат(Результат); Иначе ФоновоеЗаданиеПрочитатьПромежуточныйРезультат(Результат); @@ -761,7 +762,7 @@ &НаСервере Функция ФоновоеЗаданиеЗапустить(Знач ПараметрыЗадания) - Результат = СтандартныеПодсистемыКлиентСервер.НовыйРезультатВыполнения(); + Результат = Новый Структура; Результат.Вставить("ФоновоеЗаданиеЗапущено", Ложь); Результат.Вставить("ОшибкаПриУстановкеМонопольногоРежима", Ложь); Результат.Вставить("ТекстОшибкиУстановкиМонопольногоРежима", Неопределено); @@ -1010,6 +1011,10 @@ &НаСервереБезКонтекста Процедура СнятьМонопольныйРежим() ОбщегоНазначения.РазблокироватьИБ(); + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ЗавершениеРаботыПользователей") Тогда + МодульСоединенияИБ = ОбщегоНазначения.ОбщийМодуль("СоединенияИБ"); + МодульСоединенияИБ.РазрешитьРаботуПользователей(); + КонецЕсли; КонецПроцедуры &НаКлиенте @@ -1037,8 +1042,7 @@ КонецЕсли; Если СеансИнформационнойБазы.ИмяПриложения = "1CV8" // Толстый клиент. Или СеансИнформационнойБазы.ИмяПриложения = "1CV8C" // Тонкий клиент. - Или СеансИнформационнойБазы.ИмяПриложения = "WebClient" // Веб-клиент. - Тогда + Или СеансИнформационнойБазы.ИмяПриложения = "WebClient" Тогда // Веб-клиент. КоличествоСоединений = КоличествоСоединений + 1; КонецЕсли; КонецЦикла; @@ -1052,24 +1056,24 @@ ШаблонЗаголовка = Элементы.ПояснениеКОбработке.Заголовок; Если Не ВыводитьПодпись Тогда - Элементы.ПояснениеКОбработке.Заголовок = Лев(ШаблонЗаголовка, Найти(ШаблонЗаголовка, "<1/>") - 1); + Элементы.ПояснениеКОбработке.Заголовок = Лев(ШаблонЗаголовка, СтрНайти(ШаблонЗаголовка, "<1/>") - 1); КлючСохраненияПоложенияОкна = "1"; Иначе Остаток = СтрЗаменить(ШаблонЗаголовка, "<1/>", ""); МассивСтрок = Новый Массив; - Позиция = Найти(Остаток, "<a"); + Позиция = СтрНайти(Остаток, "<a"); МассивСтрок.Добавить(Лев(Остаток, Позиция - 1)); Остаток = Сред(Остаток, Позиция); - Позиция = Найти(Остаток, "</a>"); + Позиция = СтрНайти(Остаток, "</a>"); ОпределениеСсылки = Лев(Остаток, Позиция -1); Остаток = Сред(Остаток, Позиция + 4); - Позиция = Найти(ОпределениеСсылки, """"); + Позиция = СтрНайти(ОпределениеСсылки, """"); ОпределениеСсылки = Сред(ОпределениеСсылки, Позиция + 1); - Позиция = Найти(ОпределениеСсылки, """"); + Позиция = СтрНайти(ОпределениеСсылки, """"); АдресСсылки = Лев(ОпределениеСсылки, Позиция - 1); ТекстСсылки = Сред(ОпределениеСсылки, Позиция + 2); Если ВыводитьКоличество Тогда @@ -1142,37 +1146,33 @@ Элементы.СтраницыФормы.ТекущаяСтраница = Элементы.СтраницаУспешноЗавершено; ОповещениеТекст = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Удаление помеченных объектов успешно завершено. - |Удалено объектов: %1.'"), - Формат(УдаленныеКоличество, "ЧН=0; ЧГ=") - ); + |Удалено объектов: %1.'"), + Формат(УдаленныеКоличество, "ЧН=0; ЧГ=")); Элементы.НадписьУспешноЗавершено.Заголовок = ОповещениеТекст; Иначе Элементы.СтраницыФормы.ТекущаяСтраница = Элементы.СтраницаПричиныНевозможностиУдаления; ОповещениеТекст = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Удаление помеченных объектов завершено. - |Удалено объектов: %1, - |Не удалено: %2.'"), + |Удалено объектов: %1, + |Не удалено: %2.'"), Формат(УдаленныеКоличество, "ЧН=0; ЧГ="), - Формат(НеУдаленныеКоличество, "ЧН=0; ЧГ=") - ); + Формат(НеУдаленныеКоличество, "ЧН=0; ЧГ=")); ОповещениеКартинка = БиблиотекаКартинок.Предупреждение32; Если УдаленныеКоличество = 0 Тогда Элементы.НадписьИтогиЧастичногоУдаления.Заголовок = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Не получилось удалить объекты, помеченные на удаление (%1):'"), - Формат(НеУдаленныеКоличество, "ЧН=0; ЧГ=") - ); + Формат(НеУдаленныеКоличество, "ЧН=0; ЧГ=")); Иначе Элементы.НадписьИтогиЧастичногоУдаления.Заголовок = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Успешно удалено: %1 из %2, остальные объекты не удалены (%3):'"), Формат(УдаленныеКоличество, "ЧН=0; ЧГ="), Формат(УдаленныеКоличество+НеУдаленныеКоличество, "ЧН=0; ЧГ="), - Формат(НеУдаленныеКоличество, "ЧН=0; ЧГ=") - ); + Формат(НеУдаленныеКоличество, "ЧН=0; ЧГ=")); КонецЕсли; Шаблон = Элементы.ГруппаНеУдаленные.Заголовок; - Шаблон = Лев(Шаблон, Найти(Шаблон, "(")); + Шаблон = Лев(Шаблон, СтрНайти(Шаблон, "(")); Элементы.ГруппаНеУдаленные.Заголовок = Шаблон + Формат(НеУдаленныеКоличество, "ЧН=0; ЧГ=") + ")"; ЗаполнитьКоллекцииОставшихсяОбъектов(РезультатВыполненияВФоне); @@ -1283,6 +1283,9 @@ ГруппыНеУдаленных = Новый Соответствие; СтрокиНеУдаленных = Новый Соответствие; + ОбнаруженыСсылочныеНеОтмеченные = Ложь; + ОбнаруженыРегистры = Ложь; + Для Каждого Причина Из ПрепятствующиеУдалению Цикл СтрокаНеУдаленного = СтрокиНеУдаленных.Получить(Причина.УдаляемыйСсылка); Если СтрокаНеУдаленного = Неопределено Тогда @@ -1325,11 +1328,26 @@ СтрокаПрепятствующегоУдалению.ПометкаУдаления = Причина.ОбнаруженныйПометкаУдаления; СтрокаПрепятствующегоУдалению.ЭтоОшибка = (Причина.ОбнаруженныйТип = Тип("Строка")); - Если Не СтрокаПрепятствующегоУдалению.ЭтоОшибка Тогда + Если СтрокаПрепятствующегоУдалению.ЭтоОшибка Тогда + СтрокаПрепятствующегоУдалению.Представление = Причина.Подробно; + Иначе ОбнаруженныйИнформация = ИнформацияОТипах.Получить(Причина.ОбнаруженныйТип); СтрокаПрепятствующегоУдалению.СсылочногоТипа = ОбнаруженныйИнформация.Ссылочный; + Если ОбнаруженныйИнформация.Вид = "РЕГИСТРСВЕДЕНИЙ" + Или ОбнаруженныйИнформация.Вид = "РЕГИСТРНАКОПЛЕНИЯ" + Или ОбнаруженныйИнформация.Вид = "РЕГИСТРБУХГАЛТЕРИИ" + Или ОбнаруженныйИнформация.Вид = "РЕГИСТРРАСЧЕТА" Тогда + ОбнаруженыРегистры = Истина; + КонецЕсли; + + Если Не ОбнаруженыСсылочныеНеОтмеченные // Оптимизация. + И ОбнаруженныйИнформация.Ссылочный + И РезультатВыполненияВФоне.НеУдаленные.Найти(Причина.ОбнаруженныйСсылка) = Неопределено Тогда + ОбнаруженыСсылочныеНеОтмеченные = Ложь; + КонецЕсли; + Если Причина.ОбнаруженныйСсылка = Неопределено Тогда // Константа СтрокаПрепятствующегоУдалению.ОбнаруженныйСсылка = ОбнаруженныйИнформация.ПолноеИмя; СтрокаПрепятствующегоУдалению.ЭтоКонстанта = Истина; @@ -1350,6 +1368,19 @@ ГруппаНеУдаленного.Представление = ГруппаНеУдаленного.Представление + " (" + Формат(ГруппаНеУдаленного.КоличествоСвязей, "ЧН=0; ЧГ=") + ")"; КонецЦикла; + ЗаголовокПодвала = Элементы.НадписьВПодвале.Заголовок; + ПодписьДобавлена = (СтрЧислоВхождений(ЗаголовокПодвала, ".") = 2); + Если ОбнаруженыРегистры И Не ОбнаруженыСсылочныеНеОтмеченные Тогда + Если Не ПодписьДобавлена Тогда + Элементы.НадписьВПодвале.Заголовок = ЗаголовокПодвала + " " + + НСтр("ru = 'Для устранения сложных зависимостей рекомендуется повторить удаление с включенным флажком ""Заблокировать всю работу в программе и ускорить удаление"" (нажмите кнопку ""< В начало"").'"); + КонецЕсли; + Иначе + Если ПодписьДобавлена Тогда + Элементы.НадписьВПодвале.Заголовок = Лев(ЗаголовокПодвала, СтрНайти(ЗаголовокПодвала, ".")); + КонецЕсли; + КонецЕсли; + ДеревоНеУдаленные.Строки.Сортировать("Представление", Истина); ТаблицаСвязиНеУдаленных.Сортировать("УдаляемыйСсылка, Представление"); diff --git a/SSL/src/DataProcessors/УдалениеПомеченныхОбъектов/ManagerModule.bsl b/SSL/src/DataProcessors/УдалениеПомеченныхОбъектов/ManagerModule.bsl index fd3214ec0..da0f0e00c 100644 --- a/SSL/src/DataProcessors/УдалениеПомеченныхОбъектов/ManagerModule.bsl +++ b/SSL/src/DataProcessors/УдалениеПомеченныхОбъектов/ManagerModule.bsl @@ -108,15 +108,17 @@ // Удаление одиночного объекта с контролем результата и откатом транзакции в случае неудачи. Функция УдалитьСсылку(ПараметрыВыполнения, Ссылка) - Результат = Новый Структура; + Результат = Новый Структура; // Результат обрабатывается в ЗарегистрироватьРезультатУдаления(). Результат.Вставить("Успех", Неопределено); Результат.Вставить("ИнформацияОбОшибке", Неопределено); Результат.Вставить("ПрепятствующиеУдалению", Неопределено); Результат.Вставить("ВложенныеИПодчиненныеОбъекты", Новый Массив); Результат.Вставить("Количество", 0); + Результат.Вставить("Сообщения", Неопределено); Информация = СформироватьИнформациюОТипах(ПараметрыВыполнения, ТипЗнч(Ссылка)); + ИсходныеСообщения = ПолучитьСообщенияПользователю(Истина); НачатьТранзакцию(); Попытка ПопробоватьУдалитьСсылку(ПараметрыВыполнения, Ссылка, Информация, Результат); @@ -124,6 +126,10 @@ Результат.Успех = Ложь; Результат.ИнформацияОбОшибке = ИнформацияОбОшибке(); КонецПопытки; + Результат.Сообщения = ПолучитьСообщенияПользователю(Истина); + Для Каждого Сообщение Из ИсходныеСообщения Цикл + Сообщение.Сообщить(); + КонецЦикла; Если Результат.Успех Тогда ЗафиксироватьТранзакцию(); Иначе @@ -376,6 +382,7 @@ // Регистрация результата удаления и заполнение коллекции ПовторноУдаляемые. Процедура ЗарегистрироватьРезультатУдаления(ПараметрыВыполнения, Ссылка, Результат, ИмяКоллекции) + // Результат формируется в УдалитьСсылку(). Если Результат.Успех Тогда // Регистрация ссылки в коллекции удаленных. ПараметрыВыполнения.Удаленные.Добавить(Ссылка); @@ -409,15 +416,21 @@ Если ТипЗнч(Результат.ИнформацияОбОшибке) = Тип("ИнформацияОбОшибке") Или Результат.ПрепятствующиеУдалению = Неопределено Тогда // Текст ошибки Если ТипЗнч(Результат.ИнформацияОбОшибке) = Тип("ИнформацияОбОшибке") Тогда - ТекстОшибки = КраткоеПредставлениеОшибки(Результат.ИнформацияОбОшибке); + ТекстОшибки = СтандартныеПодсистемыКлиентСервер.ИсходнаяПричинаОшибки(Результат.ИнформацияОбОшибке); + Подробно = ПодробноеПредставлениеОшибки(Результат.ИнформацияОбОшибке); Иначе ТекстОшибки = Результат.ИнформацияОбОшибке; + Подробно = ""; КонецЕсли; + Для Каждого СообщениеОтОбъекта Из Результат.Сообщения Цикл + ТекстОшибки = СокрП(ТекстОшибки + Символы.ПС + Символы.ПС + СокрЛ(СообщениеОтОбъекта.Текст)); + КонецЦикла; Причина = ПараметрыВыполнения.ПрепятствующиеУдалению.Добавить(); Причина.УдаляемыйСсылка = Ссылка; Причина.УдаляемыйТип = ТипЗнч(Причина.УдаляемыйСсылка); Причина.ОбнаруженныйСсылка = ТекстОшибки; Причина.ОбнаруженныйТип = Тип("Строка"); + Причина.Подробно = Подробно; СформироватьИнформациюОТипах(ПараметрыВыполнения, Причина.УдаляемыйТип); Иначе // Регистрация связей (причин не удаления) для вывода пользователю. Для Каждого СтрокаТаблицы Из Результат.ПрепятствующиеУдалению Цикл @@ -578,7 +591,7 @@ ИмяКорневойТаблицы = СтрокаТаблицы.ОбнаруженныйМетаданные.ПолноеИмя(); Для Каждого ПутьКРеквизиту Из ИсключениеПоиска Цикл - ПозицияТочки = Найти(ПутьКРеквизиту, "."); + ПозицияТочки = СтрНайти(ПутьКРеквизиту, "."); Если ПозицияТочки = 0 Тогда ПолноеИмяТаблицы = ИмяКорневойТаблицы; ИмяРеквизита = ПутьКРеквизиту; @@ -669,6 +682,7 @@ ПрепятствующиеУдалению.Колонки.Добавить("ОбнаруженныйСсылка"); ПрепятствующиеУдалению.Колонки.Добавить("ОбнаруженныйТип", Новый ОписаниеТипов("Тип")); ПрепятствующиеУдалению.Колонки.Добавить("ОбнаруженныйПометкаУдаления", Новый ОписаниеТипов("Булево")); + ПрепятствующиеУдалению.Колонки.Добавить("Подробно", Новый ОписаниеТипов("Строка")); ПараметрыВыполнения.Вставить("Удаленные", Новый Массив); ПараметрыВыполнения.Вставить("НеУдаленные", Новый Массив); @@ -759,7 +773,7 @@ КонецЕсли; // Вид и его свойства. - Информация.Вид = Лев(Информация.ПолноеИмя, Найти(Информация.ПолноеИмя, ".")-1); + Информация.Вид = Лев(Информация.ПолноеИмя, СтрНайти(Информация.ПолноеИмя, ".")-1); Если Информация.Вид = "СПРАВОЧНИК" Или Информация.Вид = "ДОКУМЕНТ" Или Информация.Вид = "ПЕРЕЧИСЛЕНИЕ" @@ -816,6 +830,10 @@ Или Информация.ПолноеИмя = "СПРАВОЧНИК.ПРЕДОПРЕДЕЛЕННЫЕВАРИАНТЫОТЧЕТОВ" Тогда Информация.Технический = Истина; Информация.Разделенный = Ложь; + ИначеЕсли Информация.ПолноеИмя = "СПРАВОЧНИК.ИДЕНТИФИКАТОРЫОБЪЕКТОВРАСШИРЕНИЙ" + Или Информация.ПолноеИмя = "СПРАВОЧНИК.ПРЕДОПРЕДЕЛЕННЫЕВАРИАНТЫОТЧЕТОВРАСШИРЕНИЙ" Тогда + Информация.Технический = Истина; + Информация.Разделенный = Истина; Иначе Информация.Технический = Ложь; Если ПараметрыВыполнения.МодельСервиса Тогда @@ -1012,16 +1030,16 @@ ИначеЕсли ИмяКоллекции = "ПользовательскиеОбъекты" Тогда НеУдалено = ПараметрыВыполнения.НеУдаленные.Количество(); - Если НеУдалено = 0 Тогда - Шаблон = НСтр("ru = 'Удалено: %1 из %2 объектов.'"); + ПредставлениеНомер = Формат(ПараметрыВыполнения.Номер, "ЧН=0; ЧГ="); + ПредставлениеВсего = Формат(ПараметрыВыполнения.Всего, "ЧН=0; ЧГ="); + ПредставлениеНеУдалено = Формат(НеУдалено, "ЧН=0; ЧГ="); + Если НеУдалено = 0 Тогда // Переход на СтрШаблон невозможен. + Текст = НСтр("ru = 'Удалено: %1 из %2 объектов.'"); + Текст = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(Текст, ПредставлениеНомер, ПредставлениеВсего); Иначе - Шаблон = НСтр("ru = 'Обработано: %1 из %2 объектов, из них не удалено: %3.'"); + Текст = НСтр("ru = 'Обработано: %1 из %2 объектов, из них не удалено: %3.'"); + Текст = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(Текст, ПредставлениеНомер, ПредставлениеВсего, ПредставлениеНеУдалено); КонецЕсли; - Текст = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - Шаблон, - Формат(ПараметрыВыполнения.Номер, "ЧН=0; ЧГ="), - Формат(ПараметрыВыполнения.Всего, "ЧН=0; ЧГ="), - Формат(НеУдалено, "ЧН=0; ЧГ=")); ИначеЕсли ИмяКоллекции = "ПовторноУдаляемые" Тогда diff --git a/SSL/src/DataProcessors/УдалениеПомеченныхОбъектов/УдалениеПомеченныхОбъектов.mdo b/SSL/src/DataProcessors/УдалениеПомеченныхОбъектов/УдалениеПомеченныхОбъектов.mdo index dd94236d2..efe09118a 100644 --- a/SSL/src/DataProcessors/УдалениеПомеченныхОбъектов/УдалениеПомеченныхОбъектов.mdo +++ b/SSL/src/DataProcessors/УдалениеПомеченныхОбъектов/УдалениеПомеченныхОбъектов.mdo @@ -26,9 +26,8 @@ <name>ОсновнаяФорма</name> <synonym> <key>ru</key> - <value>Удаление помеченных объектов</value> + <value>Основная форма</value> </synonym> - <includeHelpInContents>true</includeHelpInContents> <usePurposes>PersonalComputer</usePurposes> <usePurposes>MobileDevice</usePurposes> </forms> diff --git a/SSL/src/DataProcessors/УниверсальныйОбменДаннымиXML/Commands/УниверсальныйОбменДанными/CommandModule.bsl b/SSL/src/DataProcessors/УниверсальныйОбменДаннымиXML/Commands/УниверсальныйОбменДанными/CommandModule.bsl index 2c681b65d..2c1124522 100644 --- a/SSL/src/DataProcessors/УниверсальныйОбменДаннымиXML/Commands/УниверсальныйОбменДанными/CommandModule.bsl +++ b/SSL/src/DataProcessors/УниверсальныйОбменДаннымиXML/Commands/УниверсальныйОбменДанными/CommandModule.bsl @@ -1,5 +1,8 @@ +#Область ОбработчикиСобытий &НаКлиенте Процедура ОбработкаКоманды(ПараметрКоманды, ПараметрыВыполненияКоманды) ОткрытьФорму("Обработка.УниверсальныйОбменДаннымиXML.Форма.УправляемаяФорма"); КонецПроцедуры + +#КонецОбласти \ No newline at end of file diff --git a/SSL/src/DataProcessors/УниверсальныйОбменДаннымиXML/Forms/УправляемаяФорма/Form.form b/SSL/src/DataProcessors/УниверсальныйОбменДаннымиXML/Forms/УправляемаяФорма/Form.form index ac854ca8a..01efb8771 100644 --- a/SSL/src/DataProcessors/УниверсальныйОбменДаннымиXML/Forms/УправляемаяФорма/Form.form +++ b/SSL/src/DataProcessors/УниверсальныйОбменДаннымиXML/Forms/УправляемаяФорма/Form.form @@ -4892,7 +4892,6 @@ <autoFillCheck>true</autoFillCheck> <allowFormCustomize>true</allowFormCustomize> <enabled>true</enabled> - <verticalScroll>UseIfNecessary</verticalScroll> <showTitle>auto</showTitle> <showCloseButton>true</showCloseButton> <attributes> @@ -5589,7 +5588,7 @@ <name>ПрочитатьПравилаОбмена</name> </handler> </action> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <formCommands> @@ -5612,7 +5611,7 @@ </handler> </action> <representation>TextPicture</representation> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <formCommands> @@ -5634,7 +5633,7 @@ <name>НастройкаОтладкиВыгрузки</name> </handler> </action> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <formCommands> @@ -5656,7 +5655,7 @@ <name>ВосстановитьПараметры</name> </handler> </action> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <formCommands> @@ -5678,7 +5677,7 @@ <name>СохранитьПараметры</name> </handler> </action> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <formCommands> @@ -5700,7 +5699,7 @@ <name>НастройкаОтладкиЗагрузки</name> </handler> </action> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <formCommands> @@ -5722,7 +5721,7 @@ <name>ПолучитьИнформациюОФайлеОбмена</name> </handler> </action> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <formCommands> @@ -5748,7 +5747,7 @@ </handler> </action> <representation>Picture</representation> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <formCommands> @@ -5774,7 +5773,7 @@ </handler> </action> <representation>Picture</representation> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <formCommands> @@ -5800,7 +5799,7 @@ </handler> </action> <representation>TextPicture</representation> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <formCommands> @@ -5826,7 +5825,7 @@ </handler> </action> <representation>Picture</representation> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <formCommands> @@ -5852,7 +5851,7 @@ </handler> </action> <representation>Picture</representation> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <formCommands> @@ -5874,7 +5873,7 @@ <name>ВыгрузкаОчиститьУзлыОбмена</name> </handler> </action> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <formCommands> @@ -5896,7 +5895,7 @@ <name>ВыгрузкаУстановитьУзелОбмена</name> </handler> </action> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <formCommands> @@ -5922,7 +5921,7 @@ </handler> </action> <representation>TextPicture</representation> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <formCommands> @@ -5948,7 +5947,7 @@ </handler> </action> <representation>TextPicture</representation> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <formCommands> @@ -5970,7 +5969,7 @@ <name>НаКлиенте</name> </handler> </action> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <formCommands> @@ -5992,7 +5991,7 @@ <name>НаСервере</name> </handler> </action> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <commandInterface> diff --git a/SSL/src/DataProcessors/УниверсальныйОбменДаннымиXML/Forms/УправляемаяФорма/Module.bsl b/SSL/src/DataProcessors/УниверсальныйОбменДаннымиXML/Forms/УправляемаяФорма/Module.bsl index a992901fc..a04db2673 100644 --- a/SSL/src/DataProcessors/УниверсальныйОбменДаннымиXML/Forms/УправляемаяФорма/Module.bsl +++ b/SSL/src/DataProcessors/УниверсальныйОбменДаннымиXML/Forms/УправляемаяФорма/Module.bsl @@ -1255,7 +1255,7 @@ СохраняемыеПараметры.Вставить(СтрокаТаблицы.Наименование, СтрокаТаблицы.Значение); КонецЦикла; - ХранилищеСистемныхНастроек.Сохранить("УниверсальныйОбменданнымиXML", "Параметры", СохраняемыеПараметры); + ХранилищеСистемныхНастроек.Сохранить("УниверсальныйОбменДаннымиXML", "Параметры", СохраняемыеПараметры); КонецПроцедуры @@ -1265,7 +1265,7 @@ Процедура ВосстановитьПараметрыНаСервере() ТаблицаПараметров = РеквизитФормыВЗначение("Объект.ТаблицаНастройкиПараметров"); - ВосстановленныеПараметры = ХранилищеСистемныхНастроек.Загрузить("УниверсальныйОбменданнымиXML", "Параметры"); + ВосстановленныеПараметры = ХранилищеСистемныхНастроек.Загрузить("УниверсальныйОбменДаннымиXML", "Параметры"); Если ТипЗнч(ВосстановленныеПараметры) <> Тип("Структура") Тогда Возврат; @@ -1360,7 +1360,8 @@ КонецЕсли; Исключение - + ЗаписьЖурналаРегистрации(НСтр("ru = 'Универсальный обмен данными в формате XML'", ОбъектДляСервера.КодОсновногоЯзыка()), + УровеньЖурналаРегистрации.Ошибка,,, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); КонецПопытки; ОбъектДляСервера.Параметры.Очистить(); diff --git a/SSL/src/DataProcessors/УниверсальныйОбменДаннымиXML/Forms/УправляемаяФормаНастройкиОтладкиОбработчиков/Form.form b/SSL/src/DataProcessors/УниверсальныйОбменДаннымиXML/Forms/УправляемаяФормаНастройкиОтладкиОбработчиков/Form.form index 28c511cff..ad4114258 100644 --- a/SSL/src/DataProcessors/УниверсальныйОбменДаннымиXML/Forms/УправляемаяФормаНастройкиОтладкиОбработчиков/Form.form +++ b/SSL/src/DataProcessors/УниверсальныйОбменДаннымиXML/Forms/УправляемаяФормаНастройкиОтладкиОбработчиков/Form.form @@ -799,7 +799,7 @@ <name>ВыгрузитьКодОбработчиков</name> </handler> </action> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <formCommands> @@ -825,7 +825,7 @@ </handler> </action> <representation>Picture</representation> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <formCommands> @@ -847,7 +847,7 @@ <name>Готово</name> </handler> </action> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <parameters> diff --git a/SSL/src/DataProcessors/УниверсальныйОбменДаннымиXML/ObjectModule.bsl b/SSL/src/DataProcessors/УниверсальныйОбменДаннымиXML/ObjectModule.bsl index 408dffd85..139460ffc 100644 --- a/SSL/src/DataProcessors/УниверсальныйОбменДаннымиXML/ObjectModule.bsl +++ b/SSL/src/DataProcessors/УниверсальныйОбменДаннымиXML/ObjectModule.bsl @@ -1,5 +1,7 @@ #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда +#Область ОписаниеПеременных + //////////////////////////////////////////////////////////////////////////////// // ИСПОЛЬЗУЕМЫЕ СОКРАЩЕНИЯ ИМЕН ПЕРЕМЕННЫХ (АБРЕВИАТУРЫ) @@ -10,8 +12,6 @@ // ПВД - правило выгрузки данных. // ПОД - правило очистки данных. -#Область СлужебныеПроцедурыИФункции - //////////////////////////////////////////////////////////////////////////////// // ВСПОМОГАТЕЛЬНЫЕ ПЕРЕМЕННЫЕ МОДУЛЯ ДЛЯ НАПИСАНИЯ АЛГОРИТМОВ (ОБЩИЕ ДЛЯ ВЫГРУЗКИ И ЗАГРУЗКИ) @@ -143,6 +143,10 @@ Перем ТекущийУровеньВложенностиВыгрузитьПоПравилу; +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + //////////////////////////////////////////////////////////////////////////////// // ВСПОМОГАТЕЛЬНЫЕ ПРОЦЕДУРЫ ДЛЯ НАПИСАНИЯ АЛГОРИТМОВ @@ -164,7 +168,7 @@ Функция ОтделитьРазделителем(Стр, Знач Разделитель, Режим=0) Экспорт ПраваяЧасть = ""; - ПозРазделителя = Найти(Стр, Разделитель); + ПозРазделителя = СтрНайти(Стр, Разделитель); ДлинаРазделителя = СтрДлина(Разделитель); Если ПозРазделителя > 0 Тогда ПраваяЧасть = Сред(Стр, ПозРазделителя + ?(Режим=2, 0, ДлинаРазделителя)); @@ -241,14 +245,14 @@ КонецЕсли; // - Позиция = Найти(Строка, Разделитель); + Позиция = СтрНайти(Строка, Разделитель); Пока Позиция > 0 Цикл Подстрока = Лев(Строка, Позиция - 1); Если Не ПропускатьПустыеСтроки Или Не ПустаяСтрока(Подстрока) Тогда Результат.Добавить(Подстрока); КонецЕсли; Строка = Сред(Строка, Позиция + СтрДлина(Разделитель)); - Позиция = Найти(Строка, Разделитель); + Позиция = СтрНайти(Строка, Разделитель); КонецЦикла; Если Не ПропускатьПустыеСтроки Или Не ПустаяСтрока(Строка) Тогда @@ -1128,8 +1132,7 @@ ИЛИ (Тип = одТипХранилищеЗначения) ИЛИ (Тип = одТипУникальныйИдентификатор) ИЛИ (Тип = одТипВидДвиженияНакопления) - ИЛИ (Тип = одТипВидСчета) - Тогда + ИЛИ (Тип = одТипВидСчета) Тогда Возврат XMLЗначение(Тип, Значение); @@ -2841,7 +2844,7 @@ НоваяСтрока.ОбъектВыборки = Тип(ОбъектВыборки); КонецЕсли; // Для поддержки отбора с помощью построителя. - Если Найти(ОбъектВыборки, "Ссылка.") Тогда + Если СтрНайти(ОбъектВыборки, "Ссылка.") Тогда НоваяСтрока.ИмяОбъектаДляЗапроса = СтрЗаменить(ОбъектВыборки, "Ссылка.", "."); Иначе НоваяСтрока.ИмяОбъектаДляЗапросаРегистра = СтрЗаменить(ОбъектВыборки, "Запись.", "."); @@ -3536,7 +3539,7 @@ ДлинаСтрокиШаблона = СтрДлина(ШаблонПоиска); - СимволНачальный = Найти(СтрокаОбработчика, ШаблонПоиска); + СимволНачальный = СтрНайти(СтрокаОбработчика, ШаблонПоиска); Если СимволНачальный = 0 Тогда // В данной строке нет алгоритмов или все алгоритмы из этой строки уже учтены. @@ -3546,7 +3549,7 @@ // Проверка на наличие признака того, что этот оператор закомментирован. СтрокаОбработчикаДоВызоваАлгоритма = Лев(СтрокаОбработчика, СимволНачальный); - Если Найти(СтрокаОбработчикаДоВызоваАлгоритма, "//") <> 0 Тогда + Если СтрНайти(СтрокаОбработчикаДоВызоваАлгоритма, "//") <> 0 Тогда // Этот оператор и все последующие закомментированы. // Выходим из цикла. Возврат; @@ -3554,7 +3557,7 @@ СтрокаОбработчика = Сред(СтрокаОбработчика, СимволНачальный + ДлинаСтрокиШаблона); - СимволКонечный = Найти(СтрокаОбработчика, ")") - 1; + СимволКонечный = СтрНайти(СтрокаОбработчика, ")") - 1; ИмяАлгоритма = Сред(СтрокаОбработчика, 1, СимволКонечный); @@ -3682,7 +3685,7 @@ СтрокаОбработчика = СокрЛ(СтрПолучитьСтроку(Обработчик, Индекс)); - Если Лев(СтрокаОбработчика, 2) = "//" Тогда //Строка закомментирована, ее пропускаем.. + Если СтрНачинаетсяС(СтрокаОбработчика, "//") Тогда //Строка закомментирована, ее пропускаем. Продолжить; КонецЕсли; @@ -3706,7 +3709,7 @@ СтрокаОбработчика = ВРег(СтрокаОбработчика); - НомерПозицииШаблонаВыполнить = Найти(СтрокаОбработчика, "ВЫПОЛНИТЬ"); + НомерПозицииШаблонаВыполнить = СтрНайти(СтрокаОбработчика, "ВЫПОЛНИТЬ"); СтрокаПрефиксаДляВложенногоКода = СтрокаПрефикса + Лев(СтрокаОбработчика, НомерПозицииШаблонаВыполнить - 1) + Символы.Таб; @@ -3842,9 +3845,9 @@ ТекстОбласти = Область.ПолучитьТекст(); - Если Найти(ТекстОбласти, "#Область") > 0 Тогда + Если СтрНайти(ТекстОбласти, "#Область") > 0 Тогда - ПервыйПереводСтроки = Найти(ТекстОбласти, Символы.ПС); + ПервыйПереводСтроки = СтрНайти(ТекстОбласти, Символы.ПС); ТекстОбласти = Сред(ТекстОбласти, ПервыйПереводСтроки + 1); @@ -4196,7 +4199,7 @@ Функция ОпределитьПоВерсииПлатформыПриемникаПлатформу(ВерсияПлатформы) - Если Найти(ВерсияПлатформы, "8.") > 0 Тогда + Если СтрНайти(ВерсияПлатформы, "8.") > 0 Тогда Возврат "V8"; @@ -4605,6 +4608,9 @@ Объект.ОбменДанными.Загрузка = Значение; Исключение // Не все объекты, которые участвуют в обмене, имеют свойство "ОбменДанными". + // Например КонстантыНабор такого свойства не имеют + // Использование конструкции Попытка ... Исключение выгоднее с точки зрения быстродействия, + // нежели определения типа объекта. КонецПопытки; КонецПроцедуры @@ -5627,7 +5633,7 @@ Для Каждого ЭлементСвойств Из СвойстваПоиска Цикл ИмяПараметра = ЭлементСвойств.Ключ; - Если Найти(ГотоваяСтрокаДляРазбора, ИмяПараметра + ",") > 0 Тогда + Если СтрНайти(ГотоваяСтрокаДляРазбора, ИмяПараметра + ",") > 0 Тогда ВременныеСвойстваПоиска.Вставить(ИмяПараметра, ЭлементСвойств.Значение); @@ -6151,7 +6157,7 @@ Имя = одАтрибут(ФайлОбмена, одТипСтрока, "Имя"); ИмяПКО = одАтрибут(ФайлОбмена, одТипСтрока, "ИмяПКО"); - Если Имя = "ВидДвижения" И Найти(Метаданные.НайтиПоТипу(ТипЗнч(Запись)).ПолноеИмя(), "РегистрНакопления") Тогда + Если Имя = "ВидДвижения" И СтрНайти(Метаданные.НайтиПоТипу(ТипЗнч(Запись)).ПолноеИмя(), "РегистрНакопления") Тогда ТипСвойства = одТипВидДвиженияНакопления; @@ -6703,8 +6709,13 @@ Если СтрокаСтека <> Неопределено Тогда Возврат; КонецЕсли; - - мГлобальныйСтекНеЗаписанныхОбъектов.Вставить(НомерДляСтека, Новый Структура("Объект, ИзвестнаяСсылка, ТипОбъекта, ПараметрыОбъекта", Объект, ИзвестнаяСсылка, ТипОбъекта, ПараметрыОбъекта)); + СтруктураПараметров = Новый Структура(); + СтруктураПараметров.Вставить("Объект", Объект); + СтруктураПараметров.Вставить("ИзвестнаяСсылка", ИзвестнаяСсылка); + СтруктураПараметров.Вставить("ТипОбъекта", ТипОбъекта); + СтруктураПараметров.Вставить("ПараметрыОбъекта", ПараметрыОбъекта); + + мГлобальныйСтекНеЗаписанныхОбъектов.Вставить(НомерДляСтека, СтруктураПараметров); КонецПроцедуры @@ -7700,7 +7711,7 @@ СоздатьОбъектыДляЗаписиДанныхВXML(СтруктураУзлаСвойств, УзелКоллекцииОбъектов, ИСТИНА, ПКГС.Приемник, ИмяГоловногоУзла); - ИначеЕсли Найти(ВидПриемника, "НаборДвижений") > 0 Тогда + ИначеЕсли СтрНайти(ВидПриемника, "НаборДвижений") > 0 Тогда ИмяГоловногоУзла = "НаборЗаписей"; @@ -7787,7 +7798,7 @@ ИначеЕсли ВидИсточника = "ПодчиненныйСправочник" Тогда - ИначеЕсли Найти(ВидИсточника, "НаборДвижений") > 0 Тогда + ИначеЕсли СтрНайти(ВидИсточника, "НаборДвижений") > 0 Тогда КоллекцияОбъектов = ПолучитьНаборДвиженийДокумента(Источник, ВидИсточника, ПКГС.Источник); @@ -8328,7 +8339,7 @@ Если ТипУзлаСсылки = одТипСтрока Тогда - Если Найти(УзелСсылки, "<Ссылка") > 0 Тогда + Если СтрНайти(УзелСсылки, "<Ссылка") > 0 Тогда УзелСвойства.ЗаписатьБезОбработки(УзелСсылки); @@ -8655,6 +8666,10 @@ И ПКС.Источник = "{УникальныйИдентификатор}" И ПКС.Приемник = "{УникальныйИдентификатор}" Тогда + Если Источник = Неопределено Тогда + Продолжить; + КонецЕсли; + Если ЗначениеСсылочногоТипа(Источник) Тогда УникальныйИдентификатор = Источник.УникальныйИдентификатор(); Иначе @@ -9043,6 +9058,8 @@ КонецЕсли; + ТекущийУровеньВложенностиВыгрузитьПоПравилу = ТекущийУровеньВложенностиВыгрузитьПоПравилу + 1; + Если ФлагКомментироватьОбработкуОбъектов Тогда ОписаниеТипа = Новый ОписаниеТипов("Строка"); @@ -9056,8 +9073,6 @@ СтрокаПользователю = ?(ТолькоПолучитьУзелСсылки, НСтр("ru = 'Конвертация ссылки на объект: %1'"), НСтр("ru = 'Конвертация объекта: %1'")); СтрокаПользователю = ПодставитьПараметрыВСтроку(СтрокаПользователю, ПрОбъекта); - ТекущийУровеньВложенностиВыгрузитьПоПравилу = ТекущийУровеньВложенностиВыгрузитьПоПравилу + 1; - ЗаписатьВПротоколВыполнения(СтрокаПользователю + СтрокаНазванияПКО, , Ложь, ТекущийУровеньВложенностиВыгрузитьПоПравилу + 1, 7); КонецЕсли; @@ -9274,7 +9289,7 @@ // Возможно это конвертация из перечисления в перечисление и мы просто не нашли по. // ПКЗ нужное свойство - тогда просто выгружаем пустую ссылку и все. Если СтруктураСвойств.ИмяТипа = "Перечисление" - И Найти(ПКО.Приемник, "ПеречислениеСсылка.") > 0 Тогда + И СтрНайти(ПКО.Приемник, "ПеречислениеСсылка.") > 0 Тогда УзелСсылки = ""; @@ -9912,14 +9927,14 @@ ИтоговоеОграничениеПоДате = ПолучитьСтрокуОграниченияПоДатеДляЗапроса(Свойства, Свойства.ИмяТипа, Правило.ИмяОбъектаДляЗапросаРегистра, Ложь); - ПостроительОтчета.Текст = "ВЫБРАТЬ " + СтрокаРазрешения + " - | * - | - | " + СтрокаДополненияПолейВыборкиПодчиненРегистратору + " - | " + СтрокаДополненияПолейВыборкиПериодичность + " - | - | ИЗ " + Правило.ИмяОбъектаДляЗапросаРегистра + " + ПостроительОтчета.Текст = "ВЫБРАТЬ " + СтрокаРазрешения + + "| * | + | " + СтрокаДополненияПолейВыборкиПодчиненРегистратору + + " | " + СтрокаДополненияПолейВыборкиПериодичность + + " | + | ИЗ " + Правило.ИмяОбъектаДляЗапросаРегистра + + " | |" + ИтоговоеОграничениеПоДате; ПостроительОтчета.ЗаполнитьНастройки(); @@ -10717,18 +10732,15 @@ Для Каждого ВыгруженноеПКО Из Элемент.Значение.МассивПКО Цикл - Попытка - - Правило = Правила[ВыгруженноеПКО.ПравилоКонвертации]; + Правило = Правила[ВыгруженноеПКО.ПравилоКонвертации]; + + Если ЗначениеЗаполнено(Правило.Источник) Тогда Менеджер = Менеджеры[Правило.Источник]; - ПланыОбмена.УдалитьРегистрациюИзменений(Элемент.Ключ, Менеджер.ОбъектМД); + ПланыОбмена.УдалитьРегистрациюИзменений(Элемент.Ключ, Менеджер.ОбъектМД); - Исключение - - - КонецПопытки; + КонецЕсли; КонецЦикла; @@ -10763,7 +10775,7 @@ // Архивные файлы будем идентифицировать по расширению ".zip". - Если Найти(ИмяФайлаОбмена, ".zip") > 0 Тогда + Если СтрНайти(ИмяФайлаОбмена, ".zip") > 0 Тогда ИмяФайлаЗагрузкиДанных = РаспаковатьZipФайл(ИмяФайлаОбмена); @@ -10962,8 +10974,8 @@ Для Каждого Строка Из Родитель.Строки Цикл - Если Строка[Реквизит] = 0 И - Строка.НастройкиПостроителя <> Неопределено Тогда + Если Строка[Реквизит] = 0 + И Строка.НастройкиПостроителя <> Неопределено Тогда НайденыВыключенные = Истина; @@ -11049,7 +11061,7 @@ Если СтрокаПолей.ЭтоГруппа Тогда Если СтрокаПолей.ВидПриемника = "ТабличнаяЧасть" - ИЛИ Найти(СтрокаПолей.ВидПриемника, "НаборДвижений") > 0 Тогда + ИЛИ СтрНайти(СтрокаПолей.ВидПриемника, "НаборДвижений") > 0 Тогда ИмяСтруктурыПриемника = СтрокаПолей.Приемник + ?(СтрокаПолей.ВидПриемника = "ТабличнаяЧасть", "ТабличнаяЧасть", "НаборЗаписей"); @@ -11301,7 +11313,7 @@ ТекстОбработчика = одЗначениеЭлемента(ПравилаОбмена, одТипСтрока); - Если Найти(ТекстОбработчика, Символы.ПС) = 0 Тогда + Если СтрНайти(ТекстОбработчика, Символы.ПС) = 0 Тогда Возврат ТекстОбработчика; КонецЕсли; @@ -11636,6 +11648,8 @@ Попытка УдалитьФайлы(ИмяВременногоФайлаПравилОбмена); Исключение + ЗаписьЖурналаРегистрации(НСтр("ru = 'Универсальный обмен данными в формате XML'", КодОсновногоЯзыка()), + УровеньЖурналаРегистрации.Ошибка,,, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); КонецПопытки; КонецЕсли; @@ -11645,7 +11659,9 @@ Попытка УдалитьФайлы(Источник); Исключение - КонецПопытки; + ЗаписьЖурналаРегистрации(НСтр("ru = 'Универсальный обмен данными в формате XML'", КодОсновногоЯзыка()), + УровеньЖурналаРегистрации.Ошибка,,, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); + КонецПопытки; КонецЕсли; @@ -11677,6 +11693,9 @@ Текст = НСтр("ru = 'Обработчик: ""ПослеЗагрузкиПравилОбмена"": %1'"); Текст = ПодставитьПараметрыВСтроку(Текст, КраткоеПредставлениеОшибки(ИнформацияОбОшибке())); + ЗаписьЖурналаРегистрации(НСтр("ru = 'Универсальный обмен данными в формате XML'", КодОсновногоЯзыка()), + УровеньЖурналаРегистрации.Ошибка,,, Текст); + СообщитьПользователю(Текст); КонецПопытки; @@ -12081,7 +12100,8 @@ УдалитьФайлы(ИмяИсходногоФайлаОбмена); Исключение - + ЗаписьЖурналаРегистрации(НСтр("ru = 'Универсальный обмен данными в формате XML'", КодОсновногоЯзыка()), + УровеньЖурналаРегистрации.Ошибка,,, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); КонецПопытки; КонецПроцедуры @@ -12931,11 +12951,13 @@ ТипСсылкиСтрокой = ПрефиксИмениТипа + "." + Имя; СтрокаПоиска = "ВЫБРАТЬ Ссылка ИЗ " + ИмяТипа + "." + Имя + " ГДЕ "; ТипСсылки = Тип(ТипСсылкиСтрокой); - Структура = Новый Структура("Имя,ИмяТипа,ТипСсылкиСтрокой,Менеджер,ОбъектМД,СтрокаПоиска,ВозможенПоискПоПредопределенным,ПКО", Имя, ИмяТипа, ТипСсылкиСтрокой, Менеджер, ОбъектМД, СтрокаПоиска, ВозможенПоискПоПредопределенным); + Структура = СтруктураПараметровМенеджера(Имя, ИмяТипа, ТипСсылкиСтрокой, Менеджер, ОбъектМД); + Структура.Вставить("ВозможенПоискПоПредопределенным", ВозможенПоискПоПредопределенным); + Структура.Вставить("СтрокаПоиска", СтрокаПоиска); Менеджеры.Вставить(ТипСсылки, Структура); - СтруктураДляПланаОбмена = Новый Структура("Имя,ТипСсылки,ЭтоСсылочныйТип,ЭтоРегистр", Имя, ТипСсылки, Истина, Ложь); + СтруктураДляПланаОбмена = СтруктураПараметровПланаОбмена(Имя, ТипСсылки, Истина, Ложь); МенеджерыДляПлановОбмена.Вставить(ОбъектМД, СтруктураДляПланаОбмена); КонецПроцедуры @@ -12947,7 +12969,7 @@ Имя = ОбъектМД.Имя; ТипСсылкиСтрокой = ПрефиксИмениТипаЗапись + "." + Имя; ТипСсылки = Тип(ТипСсылкиСтрокой); - Структура = Новый Структура("Имя,ИмяТипа,ТипСсылкиСтрокой,Менеджер,ОбъектМД,ВозможенПоискПоПредопределенным,ПКО", Имя, ИмяТипа, ТипСсылкиСтрокой, Менеджер, ОбъектМД, Ложь); + Структура = СтруктураПараметровМенеджера(Имя, ИмяТипа, ТипСсылкиСтрокой, Менеджер, ОбъектМД); Если ИмяТипа = "РегистрСведений" Тогда @@ -12962,14 +12984,15 @@ Менеджеры.Вставить(ТипСсылки, Структура); - СтруктураДляПланаОбмена = Новый Структура("Имя,ТипСсылки,ЭтоСсылочныйТип,ЭтоРегистр", Имя, ТипСсылки, Ложь, Истина); + СтруктураДляПланаОбмена = СтруктураПараметровПланаОбмена(Имя, ТипСсылки, Ложь, Истина); + МенеджерыДляПлановОбмена.Вставить(ОбъектМД, СтруктураДляПланаОбмена); ТипСсылкиСтрокой = ПрефиксИмениТипаВыборка + "." + Имя; ТипСсылки = Тип(ТипСсылкиСтрокой); - Структура = Новый Структура("Имя,ИмяТипа,ТипСсылкиСтрокой,Менеджер,ОбъектМД,ВозможенПоискПоПредопределенным,ПКО", Имя, ИмяТипа, ТипСсылкиСтрокой, Менеджер, ОбъектМД, Ложь); - + Структура = СтруктураПараметровМенеджера(Имя, ИмяТипа, ТипСсылкиСтрокой, Менеджер, ОбъектМД); + Если Периодический <> Неопределено Тогда Структура.Вставить("Периодический", Периодический); @@ -13047,8 +13070,9 @@ СтрокаПоиска = ""; ТипСсылкиСтрокой = "ТочкаМаршрутаБизнесПроцессаСсылка." + Имя; ТипСсылки = Тип(ТипСсылкиСтрокой); - Структура = Новый Структура("Имя,ИмяТипа,ТипСсылкиСтрокой,Менеджер,ОбъектМД,ПКО,ПустаяСсылка,ВозможенПоискПоПредопределенным,СтрокаПоиска", Имя, - ИмяТипа, ТипСсылкиСтрокой, Менеджер, ОбъектМД, , Неопределено, Ложь, СтрокаПоиска); + Структура = СтруктураПараметровМенеджера(Имя, ИмяТипа, ТипСсылкиСтрокой, Менеджер, ОбъектМД); + Структура.Вставить("ПустаяСсылка", Неопределено); + Структура.Вставить("СтрокаПоиска", СтрокаПоиска); Менеджеры.Вставить(ТипСсылки, Структура); КонецЦикла; @@ -13087,7 +13111,9 @@ Менеджер = Перечисления[Имя]; ТипСсылкиСтрокой = "ПеречислениеСсылка." + Имя; ТипСсылки = Тип(ТипСсылкиСтрокой); - Структура = Новый Структура("Имя,ИмяТипа,ТипСсылкиСтрокой,Менеджер,ОбъектМД,ПКО,ПустаяСсылка,ВозможенПоискПоПредопределенным", Имя, ИмяТипа, ТипСсылкиСтрокой, Менеджер, ОбъектМД, , Перечисления[Имя].ПустаяСсылка(), Ложь); + Структура = СтруктураПараметровМенеджера(Имя, ИмяТипа, ТипСсылкиСтрокой, Менеджер, ОбъектМД); + Структура.Вставить("ПустаяСсылка", Перечисления[Имя].ПустаяСсылка()); + Менеджеры.Вставить(ТипСсылки, Структура); КонецЦикла; @@ -13099,7 +13125,7 @@ Менеджер = Константы; ТипСсылкиСтрокой = "КонстантыНабор"; ТипСсылки = Тип(ТипСсылкиСтрокой); - Структура = Новый Структура("Имя,ИмяТипа,ТипСсылкиСтрокой,Менеджер,ОбъектМД,ВозможенПоискПоПредопределенным,ПКО", Имя, ИмяТипа, ТипСсылкиСтрокой, Менеджер, ОбъектМД, Ложь); + Структура = СтруктураПараметровМенеджера(Имя, ИмяТипа, ТипСсылкиСтрокой, Менеджер, ОбъектМД); Менеджеры.Вставить(ТипСсылки, Структура); КонецПроцедуры @@ -13602,11 +13628,13 @@ ИмяВременногоФайла = ""; Исключение - КонецПопытки; + ЗаписьЖурналаРегистрации(НСтр("ru = 'Универсальный обмен данными в формате XML'", КодОсновногоЯзыка()), + УровеньЖурналаРегистрации.Ошибка,,, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); + КонецПопытки; - КонецЕсли; + КонецЕсли; -КонецПроцедуры +КонецПроцедуры Функция ПолучитьНовоеУникальноеИмяВременногоФайла(Префикс, Расширение, СтароеИмяВременногоФайла) @@ -13784,15 +13812,40 @@ КонецФункции +// Возвращает код основного языка конфигурации, например "ru". +Функция КодОсновногоЯзыка() Экспорт + Возврат Метаданные.ОсновнойЯзык.КодЯзыка; +КонецФункции + +Функция СтруктураПараметровМенеджера(Имя, ИмяТипа, ТипСсылкиСтрокой, Менеджер, ОбъектМД) + Структура = Новый Структура(); + Структура.Вставить("Имя", Имя); + Структура.Вставить("ИмяТипа", ИмяТипа); + Структура.Вставить("ТипСсылкиСтрокой", ТипСсылкиСтрокой); + Структура.Вставить("Менеджер", Менеджер); + Структура.Вставить("ОбъектМД", ОбъектМД); + Структура.Вставить("ВозможенПоискПоПредопределенным", Ложь); + Структура.Вставить("ПКО"); + Возврат Структура; +КонецФункции + +Функция СтруктураПараметровПланаОбмена(Имя, ТипСсылки, ЭтоСсылочныйТип, ЭтоРегистр) + Структура = Новый Структура(); + Структура.Вставить("Имя",Имя); + Структура.Вставить("ТипСсылки",ТипСсылки); + Структура.Вставить("ЭтоСсылочныйТип",ЭтоСсылочныйТип); + Структура.Вставить("ЭтоРегистр",ЭтоРегистр); + Возврат Структура; +КонецФункции + #КонецОбласти -//////////////////////////////////////////////////////////////////////////////// -// ОПЕРАТОРЫ ОСНОВНОЙ ПРОГРАММЫ +#Область ОператорыОсновнойПрограммы ИнициализацияРеквизитовИМодульныхПеременных(); ДополнитьСлужебныеТаблицыКолонками(); ИнициализацияСтруктурыИменОбработчиков(); - +#КонецОбласти #КонецЕсли diff --git a/SSL/src/DataProcessors/УправлениеИтогамиИАгрегатами/Forms/ОсновнаяФорма/Form.form b/SSL/src/DataProcessors/УправлениеИтогамиИАгрегатами/Forms/ОсновнаяФорма/Form.form index b19681d7f..bfafb9ee4 100644 --- a/SSL/src/DataProcessors/УправлениеИтогамиИАгрегатами/Forms/ОсновнаяФорма/Form.form +++ b/SSL/src/DataProcessors/УправлениеИтогамиИАгрегатами/Forms/ОсновнаяФорма/Form.form @@ -3312,7 +3312,6 @@ <group>Vertical</group> <autoFillCheck>true</autoFillCheck> <enabled>true</enabled> - <verticalScroll>UseIfNecessary</verticalScroll> <showTitle>auto</showTitle> <showCloseButton>true</showCloseButton> <attributes> @@ -4127,7 +4126,7 @@ <name>ВключитьИспользованиеИтогов</name> </handler> </action> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <formCommands> @@ -4149,7 +4148,7 @@ <name>ВключитьИспользованиеТекущихИтогов</name> </handler> </action> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <formCommands> @@ -4171,7 +4170,7 @@ <name>ВыключитьИспользованиеИтогов</name> </handler> </action> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <formCommands> @@ -4193,7 +4192,7 @@ <name>ВыключитьИспользованиеТекущихИтогов</name> </handler> </action> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <formCommands> @@ -4220,7 +4219,7 @@ </handler> </action> <representation>Text</representation> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <formCommands> @@ -4242,7 +4241,7 @@ <name>УстановитьПериодИтогов</name> </handler> </action> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <formCommands> @@ -4264,7 +4263,7 @@ <name>ВключитьРазделениеИтогов</name> </handler> </action> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <formCommands> @@ -4286,7 +4285,7 @@ <name>ВыключитьРазделениеИтогов</name> </handler> </action> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <formCommands> @@ -4313,7 +4312,7 @@ </handler> </action> <representation>Picture</representation> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <formCommands> @@ -4335,7 +4334,7 @@ <name>ВключитьРежимАгрегатов</name> </handler> </action> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <formCommands> @@ -4357,7 +4356,7 @@ <name>ВключитьИспользованиеАгрегатов</name> </handler> </action> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <formCommands> @@ -4379,7 +4378,7 @@ <name>ВключитьРежимИтогов</name> </handler> </action> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <formCommands> @@ -4401,7 +4400,7 @@ <name>ВыключитьИспользованиеАгрегатов</name> </handler> </action> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <formCommands> @@ -4423,7 +4422,7 @@ <name>ПерестроитьАгрегаты</name> </handler> </action> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <formCommands> @@ -4446,7 +4445,7 @@ </handler> </action> <representation>Text</representation> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <formCommands> @@ -4468,7 +4467,7 @@ <name>ЗаполнитьАгрегатыПоРегистрам</name> </handler> </action> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <formCommands> @@ -4490,7 +4489,7 @@ <name>АгрегатыОптимальные</name> </handler> </action> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <formCommands> @@ -4512,7 +4511,7 @@ <name>УстановитьПериодРассчитанныхИтогов</name> </handler> </action> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <formCommands> @@ -4534,7 +4533,7 @@ <name>ВключитьИспользованиеИтоговБыстрыйДоступ</name> </handler> </action> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <formCommands> @@ -4556,7 +4555,7 @@ <name>ЗаполнитьАгрегатыИВыполнитьПерестроение</name> </handler> </action> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <formCommands> @@ -4578,7 +4577,7 @@ <name>ПолучитьОптимальныеАгрегаты</name> </handler> </action> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <formCommands> @@ -4600,7 +4599,7 @@ <name>ПересчитатьИтоги</name> </handler> </action> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <formCommands> @@ -4622,7 +4621,7 @@ <name>ПересчитатьИтогиЗаПериод</name> </handler> </action> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <formCommands> @@ -4644,7 +4643,7 @@ <name>ПересчитатьТекущиеИтоги</name> </handler> </action> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <commandInterface> diff --git a/SSL/src/DataProcessors/УправлениеИтогамиИАгрегатами/Forms/ОсновнаяФорма/Module.bsl b/SSL/src/DataProcessors/УправлениеИтогамиИАгрегатами/Forms/ОсновнаяФорма/Module.bsl index 61d19fea8..18e0fbbe0 100644 --- a/SSL/src/DataProcessors/УправлениеИтогамиИАгрегатами/Forms/ОсновнаяФорма/Module.bsl +++ b/SSL/src/DataProcessors/УправлениеИтогамиИАгрегатами/Forms/ОсновнаяФорма/Module.bsl @@ -970,7 +970,7 @@ #Иначе ПолучаемыеФайлы = Новый Массив; ПолучаемыеФайлы.Добавить(Новый ОписаниеПередаваемогоФайла(Результат.ИмяФайла, Результат.АдресФайла)); - Расширение = НРег(Сред(Результат.ИмяФайла, Найти(Результат.ИмяФайла, ".") + 1)); + Расширение = НРег(Сред(Результат.ИмяФайла, СтрНайти(Результат.ИмяФайла, ".") + 1)); Если Расширение = "zip" Тогда Фильтр = НСтр("ru = 'Архив ZIP (*.%1)|*.%1'"); ИначеЕсли Расширение = "xml" Тогда @@ -1052,7 +1052,7 @@ ЗаголовокОшибки = НСтр("ru = 'Не удалось получить оптимальные агрегаты регистра ""%1"":'"); ПодробныйТекстОшибок = ПодробныйТекстОшибок + ?(ПодробныйТекстОшибок = "", "", Символы.ПС + Символы.ПС) - + СтрЗаменить(ЗаголовокОшибки, "%1", ИмяРегистраНакопления) + + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ЗаголовокОшибки, ИмяРегистраНакопления) + Символы.ПС + ПодробноеПредставлениеОшибки(ИнформацияОбОшибке); Продолжить; diff --git a/SSL/src/DataProcessors/УправлениеИтогамиИАгрегатами/Forms/ФормаВыбораПериода/Form.form b/SSL/src/DataProcessors/УправлениеИтогамиИАгрегатами/Forms/ФормаВыбораПериода/Form.form index 6d9edb764..9056bb00f 100644 --- a/SSL/src/DataProcessors/УправлениеИтогамиИАгрегатами/Forms/ФормаВыбораПериода/Form.form +++ b/SSL/src/DataProcessors/УправлениеИтогамиИАгрегатами/Forms/ФормаВыбораПериода/Form.form @@ -1,5 +1,9 @@ <?xml version="1.0" encoding="UTF-8"?> <form:Form xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:form="http://g5.1c.ru/v8/dt/form"> + <title> + <key>ru</key> + <value>Выбор периода рассчитанных итогов</value> + ПериодДляРегистровНакопления 10 @@ -183,12 +187,10 @@
      LockOwner true - true true Vertical true true - UseIfNecessary auto true @@ -250,7 +252,7 @@ ОК - Auto + DontUse Auto diff --git a/SSL/src/DataProcessors/УправлениеИтогамиИАгрегатами/Forms/ФормаПараметровПерестроения/Form.form b/SSL/src/DataProcessors/УправлениеИтогамиИАгрегатами/Forms/ФормаПараметровПерестроения/Form.form index e95d0d13b..a12218cb0 100644 --- a/SSL/src/DataProcessors/УправлениеИтогамиИАгрегатами/Forms/ФормаПараметровПерестроения/Form.form +++ b/SSL/src/DataProcessors/УправлениеИтогамиИАгрегатами/Forms/ФормаПараметровПерестроения/Form.form @@ -158,7 +158,6 @@ Vertical true true - UseIfNecessary auto true @@ -240,7 +239,7 @@ ОК - Auto + DontUse Auto diff --git a/SSL/src/DataProcessors/УправлениеИтогамиИАгрегатами/УправлениеИтогамиИАгрегатами.mdo b/SSL/src/DataProcessors/УправлениеИтогамиИАгрегатами/УправлениеИтогамиИАгрегатами.mdo index 195eb152b..c3d08d871 100644 --- a/SSL/src/DataProcessors/УправлениеИтогамиИАгрегатами/УправлениеИтогамиИАгрегатами.mdo +++ b/SSL/src/DataProcessors/УправлениеИтогамиИАгрегатами/УправлениеИтогамиИАгрегатами.mdo @@ -20,7 +20,7 @@ ОсновнаяФорма ru - Управление итогами + Основная форма PersonalComputer MobileDevice @@ -29,7 +29,7 @@ ФормаВыбораПериода ru - Выбор периода рассчитанных итогов + Форма выбора периода @@ -43,7 +43,7 @@ ФормаПараметровПерестроения ru - Параметры перестроения + Форма параметров перестроения diff --git a/SSL/src/DefinedTypes/АдресатЗапретаИзменения/АдресатЗапретаИзменения.mdo b/SSL/src/DefinedTypes/АдресатЗапретаИзменения/АдресатЗапретаИзменения.mdo new file mode 100644 index 000000000..cc9cd618d --- /dev/null +++ b/SSL/src/DefinedTypes/АдресатЗапретаИзменения/АдресатЗапретаИзменения.mdo @@ -0,0 +1,18 @@ + + + + + + АдресатЗапретаИзменения + + ru + Адресат запрета изменения + + + CatalogRef.ВнешниеПользователи + CatalogRef.ГруппыВнешнихПользователей + CatalogRef.ГруппыПользователей + CatalogRef.Пользователи + EnumRef.ВидыНазначенияДатЗапрета + + diff --git a/SSL/src/DefinedTypes/БизнесПроцесс/БизнесПроцесс.mdo b/SSL/src/DefinedTypes/БизнесПроцесс/БизнесПроцесс.mdo new file mode 100644 index 000000000..02778df4b --- /dev/null +++ b/SSL/src/DefinedTypes/БизнесПроцесс/БизнесПроцесс.mdo @@ -0,0 +1,14 @@ + + + + + + БизнесПроцесс + + ru + Бизнес процесс + + + BusinessProcessRef.Задание + + diff --git a/SSL/src/DefinedTypes/ВерсионируемыеДанные/ВерсионируемыеДанные.mdo b/SSL/src/DefinedTypes/ВерсионируемыеДанные/ВерсионируемыеДанные.mdo new file mode 100644 index 000000000..f5e01003a --- /dev/null +++ b/SSL/src/DefinedTypes/ВерсионируемыеДанные/ВерсионируемыеДанные.mdo @@ -0,0 +1,14 @@ + + + + + + ВерсионируемыеДанные + + ru + Версионируемые данные + + + CatalogRef.ИдентификаторыОбъектовМетаданных + + diff --git a/SSL/src/DefinedTypes/ВерсионируемыеДанныеОбъект/ВерсионируемыеДанныеОбъект.mdo b/SSL/src/DefinedTypes/ВерсионируемыеДанныеОбъект/ВерсионируемыеДанныеОбъект.mdo new file mode 100644 index 000000000..b4d0c4d15 --- /dev/null +++ b/SSL/src/DefinedTypes/ВерсионируемыеДанныеОбъект/ВерсионируемыеДанныеОбъект.mdo @@ -0,0 +1,14 @@ + + + + + + ВерсионируемыеДанныеОбъект + + ru + Версионируемые данные объект + + + CatalogObject.ИдентификаторыОбъектовМетаданных + + diff --git a/SSL/src/DefinedTypes/ВладелецВнешнихЗначенийВНаборахЗначенийДоступаОбъект/ВладелецВнешнихЗначенийВНаборахЗначенийДоступаОбъект.mdo b/SSL/src/DefinedTypes/ВладелецВнешнихЗначенийВНаборахЗначенийДоступаОбъект/ВладелецВнешнихЗначенийВНаборахЗначенийДоступаОбъект.mdo new file mode 100644 index 000000000..3306a8bc0 --- /dev/null +++ b/SSL/src/DefinedTypes/ВладелецВнешнихЗначенийВНаборахЗначенийДоступаОбъект/ВладелецВнешнихЗначенийВНаборахЗначенийДоступаОбъект.mdo @@ -0,0 +1,14 @@ + + + + + + ВладелецВнешнихЗначенийВНаборахЗначенийДоступаОбъект + + ru + Владелец внешних значений в наборах значений доступа объект + + + CatalogObject.ИдентификаторыОбъектовМетаданных + + diff --git a/SSL/src/DefinedTypes/ВладелецДополнительныхСведений/ВладелецДополнительныхСведений.mdo b/SSL/src/DefinedTypes/ВладелецДополнительныхСведений/ВладелецДополнительныхСведений.mdo new file mode 100644 index 000000000..f812cd21f --- /dev/null +++ b/SSL/src/DefinedTypes/ВладелецДополнительныхСведений/ВладелецДополнительныхСведений.mdo @@ -0,0 +1,23 @@ + + + + + + ВладелецДополнительныхСведений + + ru + Владелец дополнительных сведений + + + DocumentRef.ЭлектронноеПисьмоИсходящее + DocumentRef.ЗапланированноеВзаимодействие + CatalogRef.ПапкиФайлов + CatalogRef.ВнешниеПользователи + DocumentRef.ЭлектронноеПисьмоВходящее + DocumentRef.ТелефонныйЗвонок + DocumentRef.Встреча + CatalogRef.Файлы + DocumentRef.СообщениеSMS + CatalogRef.Пользователи + + diff --git a/SSL/src/DefinedTypes/ВладелецКонтактнойИнформации/ВладелецКонтактнойИнформации.mdo b/SSL/src/DefinedTypes/ВладелецКонтактнойИнформации/ВладелецКонтактнойИнформации.mdo new file mode 100644 index 000000000..2c8535722 --- /dev/null +++ b/SSL/src/DefinedTypes/ВладелецКонтактнойИнформации/ВладелецКонтактнойИнформации.mdo @@ -0,0 +1,15 @@ + + + + + + ВладелецКонтактнойИнформации + + ru + Владелец контактной информации + + + CatalogObject.Организации + CatalogObject.Пользователи + + diff --git a/SSL/src/DefinedTypes/ВладелецНаборовЗначенийДоступаОбъект/ВладелецНаборовЗначенийДоступаОбъект.mdo b/SSL/src/DefinedTypes/ВладелецНаборовЗначенийДоступаОбъект/ВладелецНаборовЗначенийДоступаОбъект.mdo new file mode 100644 index 000000000..0b9764f3c --- /dev/null +++ b/SSL/src/DefinedTypes/ВладелецНаборовЗначенийДоступаОбъект/ВладелецНаборовЗначенийДоступаОбъект.mdo @@ -0,0 +1,21 @@ + + + + + + ВладелецНаборовЗначенийДоступаОбъект + + ru + Владелец наборов значений доступа объект + + + BusinessProcessObject.Задание + DocumentObject.Встреча + DocumentObject.ЭлектронноеПисьмоВходящее + DocumentObject.ЗапланированноеВзаимодействие + DocumentObject.СообщениеSMS + DocumentObject.ТелефонныйЗвонок + CatalogObject.ИдентификаторыОбъектовМетаданных + DocumentObject.ЭлектронноеПисьмоИсходящее + + diff --git a/SSL/src/DefinedTypes/ВладелецНастроекПравОбъект/ВладелецНастроекПравОбъект.mdo b/SSL/src/DefinedTypes/ВладелецНастроекПравОбъект/ВладелецНастроекПравОбъект.mdo new file mode 100644 index 000000000..4858092c6 --- /dev/null +++ b/SSL/src/DefinedTypes/ВладелецНастроекПравОбъект/ВладелецНастроекПравОбъект.mdo @@ -0,0 +1,15 @@ + + + + + + ВладелецНастроекПравОбъект + + ru + Владелец настроек прав объект + + + CatalogObject.ПапкиФайлов + CatalogObject.ИдентификаторыОбъектовМетаданных + + diff --git a/SSL/src/DefinedTypes/ВладелецПрисоединенныхФайлов/ВладелецПрисоединенныхФайлов.mdo b/SSL/src/DefinedTypes/ВладелецПрисоединенныхФайлов/ВладелецПрисоединенныхФайлов.mdo new file mode 100644 index 000000000..cb8083bdd --- /dev/null +++ b/SSL/src/DefinedTypes/ВладелецПрисоединенныхФайлов/ВладелецПрисоединенныхФайлов.mdo @@ -0,0 +1,20 @@ + + + + + + ВладелецПрисоединенныхФайлов + + ru + Владелец присоединенных файлов + + + DocumentRef.ЭлектронноеПисьмоИсходящее + DocumentRef.ЗапланированноеВзаимодействие + DocumentRef.ЭлектронноеПисьмоВходящее + DocumentRef.ТелефонныйЗвонок + DocumentRef.Встреча + DocumentRef.СообщениеSMS + CatalogRef.ИдентификаторыОбъектовМетаданных + + diff --git a/SSL/src/DefinedTypes/ВладелецПрисоединенныхФайловОбъект/ВладелецПрисоединенныхФайловОбъект.mdo b/SSL/src/DefinedTypes/ВладелецПрисоединенныхФайловОбъект/ВладелецПрисоединенныхФайловОбъект.mdo new file mode 100644 index 000000000..5d0cced4b --- /dev/null +++ b/SSL/src/DefinedTypes/ВладелецПрисоединенныхФайловОбъект/ВладелецПрисоединенныхФайловОбъект.mdo @@ -0,0 +1,14 @@ + + + + + + ВладелецПрисоединенныхФайловОбъект + + ru + Владелец присоединенных файлов объект + + + CatalogObject.ИдентификаторыОбъектовМетаданных + + diff --git a/SSL/src/DefinedTypes/ВладелецСОграничениемПоНаборамЗначенийДоступаОбъект/ВладелецСОграничениемПоНаборамЗначенийДоступаОбъект.mdo b/SSL/src/DefinedTypes/ВладелецСОграничениемПоНаборамЗначенийДоступаОбъект/ВладелецСОграничениемПоНаборамЗначенийДоступаОбъект.mdo new file mode 100644 index 000000000..f3260f1da --- /dev/null +++ b/SSL/src/DefinedTypes/ВладелецСОграничениемПоНаборамЗначенийДоступаОбъект/ВладелецСОграничениемПоНаборамЗначенийДоступаОбъект.mdo @@ -0,0 +1,14 @@ + + + + + + ВладелецСОграничениемПоНаборамЗначенийДоступаОбъект + + ru + Владелец с ограничением по наборам значений доступа объект + + + CatalogObject.ИдентификаторыОбъектовМетаданных + + diff --git a/SSL/src/DefinedTypes/ВладелецФайловОбъект/ВладелецФайловОбъект.mdo b/SSL/src/DefinedTypes/ВладелецФайловОбъект/ВладелецФайловОбъект.mdo new file mode 100644 index 000000000..ec9024e72 --- /dev/null +++ b/SSL/src/DefinedTypes/ВладелецФайловОбъект/ВладелецФайловОбъект.mdo @@ -0,0 +1,14 @@ + + + + + + ВладелецФайловОбъект + + ru + Владелец файлов объект + + + CatalogObject.ИдентификаторыОбъектовМетаданных + + diff --git a/SSL/src/DefinedTypes/ВнешнийПользовательОбъект/ВнешнийПользовательОбъект.mdo b/SSL/src/DefinedTypes/ВнешнийПользовательОбъект/ВнешнийПользовательОбъект.mdo new file mode 100644 index 000000000..56855cbf9 --- /dev/null +++ b/SSL/src/DefinedTypes/ВнешнийПользовательОбъект/ВнешнийПользовательОбъект.mdo @@ -0,0 +1,14 @@ + + + + + + ВнешнийПользовательОбъект + + ru + Внешний пользователь объект + + + CatalogObject.ВнешниеПользователи + + diff --git a/SSL/src/DefinedTypes/ЗначениеДоступа/ЗначениеДоступа.mdo b/SSL/src/DefinedTypes/ЗначениеДоступа/ЗначениеДоступа.mdo index a6e50a4fb..e6af96262 100644 --- a/SSL/src/DefinedTypes/ЗначениеДоступа/ЗначениеДоступа.mdo +++ b/SSL/src/DefinedTypes/ЗначениеДоступа/ЗначениеДоступа.mdo @@ -16,6 +16,7 @@ EnumRef.ДополнительныеЗначенияДоступа ChartOfCharacteristicTypesRef.ДополнительныеРеквизитыИСведения ChartOfCharacteristicTypesRef.УдалитьВидыДоступа + CatalogRef.ДополнительныеОтчетыИОбработки CatalogRef.Пользователи CatalogRef.Организации CatalogRef.ГруппыИсполнителейЗадач diff --git a/SSL/src/DefinedTypes/ЗначениеДоступаСГруппамиЗначенийДоступаОбъект/ЗначениеДоступаСГруппамиЗначенийДоступаОбъект.mdo b/SSL/src/DefinedTypes/ЗначениеДоступаСГруппамиЗначенийДоступаОбъект/ЗначениеДоступаСГруппамиЗначенийДоступаОбъект.mdo new file mode 100644 index 000000000..cd92b9d83 --- /dev/null +++ b/SSL/src/DefinedTypes/ЗначениеДоступаСГруппамиЗначенийДоступаОбъект/ЗначениеДоступаСГруппамиЗначенийДоступаОбъект.mdo @@ -0,0 +1,14 @@ + + + + + + ЗначениеДоступаСГруппамиЗначенийДоступаОбъект + + ru + Значение доступа с группами значений доступа объект + + + CatalogObject.ИдентификаторыОбъектовМетаданных + + diff --git a/SSL/src/DefinedTypes/КонтрагентОбъект/КонтрагентОбъект.mdo b/SSL/src/DefinedTypes/КонтрагентОбъект/КонтрагентОбъект.mdo new file mode 100644 index 000000000..55fcb4e70 --- /dev/null +++ b/SSL/src/DefinedTypes/КонтрагентОбъект/КонтрагентОбъект.mdo @@ -0,0 +1,14 @@ + + + + + + КонтрагентОбъект + + ru + Контрагент объект + + + CatalogObject.ИдентификаторыОбъектовМетаданных + + diff --git a/SSL/src/DefinedTypes/МестоХраненияФункциональныхОпций/МестоХраненияФункциональныхОпций.mdo b/SSL/src/DefinedTypes/МестоХраненияФункциональныхОпций/МестоХраненияФункциональныхОпций.mdo new file mode 100644 index 000000000..86db91c6c --- /dev/null +++ b/SSL/src/DefinedTypes/МестоХраненияФункциональныхОпций/МестоХраненияФункциональныхОпций.mdo @@ -0,0 +1,55 @@ + + + + + + МестоХраненияФункциональныхОпций + + ru + Место хранения функциональных опций + + + ConstantValueManager.СоздаватьЭлектронныеПодписиНаСервере + ConstantValueManager.ИспользоватьСинхронизациюДанныхВМоделиСервиса + ConstantValueManager.НеИспользоватьРазделениеПоОбластямДанных + ConstantValueManager.ИспользоватьЗаметки + ConstantValueManager.ИспользоватьНапоминанияПользователя + ConstantValueManager.ИспользоватьСинхронизациюДанных + ConstantValueManager.ИспользоватьДатуНачалаЗадач + ConstantValueManager.ИзменятьЗаданияЗаднимЧислом + ConstantValueManager.ИспользоватьПолнотекстовыйПоиск + ConstantValueManager.ИспользоватьОбщиеДополнительныеРеквизитыИСведения + ConstantValueManager.ИспользоватьПочтовыйКлиент + ConstantValueManager.ИспользоватьСинхронизациюДанныхВЛокальномРежиме + ConstantValueManager.ОграничиватьДоступНаУровнеЗаписей + ConstantValueManager.ПроверятьЭлектронныеПодписиНаСервере + ConstantValueManager.ИспользоватьАнкетирование + ConstantValueManager.ИсточникДанныхАдресногоКлассификатора + ConstantValueManager.ИспользоватьПодчиненныеБизнесПроцессы + ConstantValueManager.ХранитьФайлыВТомахНаДиске + ConstantValueManager.ИспользоватьШифрование + ConstantValueManager.ИспользоватьНесколькоОрганизаций + ConstantValueManager.ИспользоватьЭлектронныеПодписи + ConstantValueManager.ИспользоватьДатуИВремяВСрокахЗадач + ConstantValueManager.ИспользоватьВнешнихПользователей + ConstantValueManager.ИспользоватьПроверкуКонтрагентов + ConstantValueManager.ИспользуютсяПрофилиБезопасности + ConstantValueManager.ЭтоАвтономноеРабочееМесто + ConstantValueManager.ИспользоватьДополнительныеОтчетыИОбработки + ConstantValueManager.ИспользоватьДополнительныеРеквизитыИСведения + ConstantValueManager.ДатаОбновленияПовторноИспользуемыхЗначенийМРО + ConstantValueManager.ПоддержкаРезервногоКопирования + ConstantValueManager.ИспользоватьИнтеграцию1СБухфон + ConstantValueManager.ИспользоватьРазделениеПоОбластямДанных + ConstantValueManager.ИспользоватьГруппыПользователей + ConstantValueManager.НеИспользоватьНесколькоОрганизаций + ConstantValueManager.ИспользоватьПрочиеВзаимодействия + ConstantValueManager.ИспользоватьОбщиеДополнительныеЗначения + ConstantValueManager.ИспользоватьПризнакРассмотрено + ConstantValueManager.ПрефиксУзлаРаспределеннойИнформационнойБазы + ConstantValueManager.ИспользоватьБизнесПроцессыИЗадачи + ConstantValueManager.ИспользоватьНесколькоПроизводственныхКалендарей + ConstantValueManager.ИспользоватьВерсионированиеОбъектов + ConstantValueManager.ОтправлятьПисьмаВФорматеHTML + + diff --git a/SSL/src/DefinedTypes/ОбъектАдресации/ОбъектАдресации.mdo b/SSL/src/DefinedTypes/ОбъектАдресации/ОбъектАдресации.mdo new file mode 100644 index 000000000..bd8b6ad31 --- /dev/null +++ b/SSL/src/DefinedTypes/ОбъектАдресации/ОбъектАдресации.mdo @@ -0,0 +1,15 @@ + + + + + + ОбъектАдресации + + ru + Объект адресации + + + CatalogRef.Организации + CatalogRef.ИдентификаторыОбъектовМетаданных + + diff --git a/SSL/src/DefinedTypes/ОбъектСДополнительнымиКомандами/ОбъектСДополнительнымиКомандами.mdo b/SSL/src/DefinedTypes/ОбъектСДополнительнымиКомандами/ОбъектСДополнительнымиКомандами.mdo new file mode 100644 index 000000000..d6329b4ac --- /dev/null +++ b/SSL/src/DefinedTypes/ОбъектСДополнительнымиКомандами/ОбъектСДополнительнымиКомандами.mdo @@ -0,0 +1,15 @@ + + + + + + ОбъектСДополнительнымиКомандами + + ru + Объект с дополнительными командами + + + DocumentRef.СообщениеSMS + CatalogRef.ИдентификаторыОбъектовМетаданных + + diff --git a/SSL/src/DefinedTypes/ОбъектСНастраиваемымПорядком/ОбъектСНастраиваемымПорядком.mdo b/SSL/src/DefinedTypes/ОбъектСНастраиваемымПорядком/ОбъектСНастраиваемымПорядком.mdo new file mode 100644 index 000000000..f83a16a35 --- /dev/null +++ b/SSL/src/DefinedTypes/ОбъектСНастраиваемымПорядком/ОбъектСНастраиваемымПорядком.mdo @@ -0,0 +1,17 @@ + + + + + + ОбъектСНастраиваемымПорядком + + ru + Объект с настраиваемым порядком + + + CatalogObject.ПравилаОбработкиЭлектроннойПочты + CatalogObject.ВидыКонтактнойИнформации + CatalogObject.ВариантыОтветовАнкет + CatalogObject.ИдентификаторыОбъектовМетаданных + + diff --git a/SSL/src/DefinedTypes/Подразделение/Подразделение.mdo b/SSL/src/DefinedTypes/Подразделение/Подразделение.mdo new file mode 100644 index 000000000..b5619675e --- /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..5a1a7f340 --- /dev/null +++ b/SSL/src/DefinedTypes/Пользователь/Пользователь.mdo @@ -0,0 +1,14 @@ + + + + + + Пользователь + + ru + Пользователь + + + CatalogRef.Пользователи + + diff --git a/SSL/src/DefinedTypes/ПредметЗадачи/ПредметЗадачи.mdo b/SSL/src/DefinedTypes/ПредметЗадачи/ПредметЗадачи.mdo new file mode 100644 index 000000000..d8f83581c --- /dev/null +++ b/SSL/src/DefinedTypes/ПредметЗадачи/ПредметЗадачи.mdo @@ -0,0 +1,15 @@ + + + + + + ПредметЗадачи + + ru + Предмет задачи + + + CatalogRef.Файлы + CatalogRef.Пользователи + + diff --git a/SSL/src/DefinedTypes/ПредметЗаметок/ПредметЗаметок.mdo b/SSL/src/DefinedTypes/ПредметЗаметок/ПредметЗаметок.mdo new file mode 100644 index 000000000..02300bf9f --- /dev/null +++ b/SSL/src/DefinedTypes/ПредметЗаметок/ПредметЗаметок.mdo @@ -0,0 +1,14 @@ + + + + + + ПредметЗаметок + + ru + Предмет заметок + + + CatalogRef.ИдентификаторыОбъектовМетаданных + + diff --git a/SSL/src/DefinedTypes/ПредметЗаметокОбъект/ПредметЗаметокОбъект.mdo b/SSL/src/DefinedTypes/ПредметЗаметокОбъект/ПредметЗаметокОбъект.mdo new file mode 100644 index 000000000..6ca839be4 --- /dev/null +++ b/SSL/src/DefinedTypes/ПредметЗаметокОбъект/ПредметЗаметокОбъект.mdo @@ -0,0 +1,14 @@ + + + + + + ПредметЗаметокОбъект + + ru + Предмет заметок объект + + + CatalogObject.Пользователи + + diff --git a/SSL/src/DefinedTypes/ПредметНапоминания/ПредметНапоминания.mdo b/SSL/src/DefinedTypes/ПредметНапоминания/ПредметНапоминания.mdo new file mode 100644 index 000000000..340ae48bc --- /dev/null +++ b/SSL/src/DefinedTypes/ПредметНапоминания/ПредметНапоминания.mdo @@ -0,0 +1,16 @@ + + + + + + ПредметНапоминания + + ru + Предмет напоминания + + + CatalogRef.Заметки + TaskRef.ЗадачаИсполнителя + CatalogRef.ИдентификаторыОбъектовМетаданных + + diff --git a/SSL/src/DefinedTypes/ПредметНапоминанияОбъект/ПредметНапоминанияОбъект.mdo b/SSL/src/DefinedTypes/ПредметНапоминанияОбъект/ПредметНапоминанияОбъект.mdo new file mode 100644 index 000000000..ca5517393 --- /dev/null +++ b/SSL/src/DefinedTypes/ПредметНапоминанияОбъект/ПредметНапоминанияОбъект.mdo @@ -0,0 +1,16 @@ + + + + + + ПредметНапоминанияОбъект + + ru + Предмет напоминания объект + + + CatalogObject.Заметки + CatalogObject.ИдентификаторыОбъектовМетаданных + TaskObject.ЗадачаИсполнителя + + diff --git a/SSL/src/DefinedTypes/ПрисоединенныйФайл/ПрисоединенныйФайл.mdo b/SSL/src/DefinedTypes/ПрисоединенныйФайл/ПрисоединенныйФайл.mdo new file mode 100644 index 000000000..922f404f2 --- /dev/null +++ b/SSL/src/DefinedTypes/ПрисоединенныйФайл/ПрисоединенныйФайл.mdo @@ -0,0 +1,19 @@ + + + + + + ПрисоединенныйФайл + + ru + Присоединенный файл + + + CatalogRef.ЭлектронноеПисьмоИсходящееПрисоединенныеФайлы + CatalogRef.ЭлектронноеПисьмоВходящееПрисоединенныеФайлы + CatalogRef.ЗапланированноеВзаимодействиеПрисоединенныеФайлы + CatalogRef.СообщениеSMSПрисоединенныеФайлы + CatalogRef.ВстречаПрисоединенныеФайлы + CatalogRef.ТелефонныйЗвонокПрисоединенныеФайлы + + diff --git a/SSL/src/EventSubscriptions/ВыполнитьДействияПриЗаписиПрисоединенногоФайлаВзаимодействия/ВыполнитьДействияПриЗаписиПрисоединенногоФайлаВзаимодействия.mdo b/SSL/src/DefinedTypes/ПрисоединенныйФайлОбъект/ПрисоединенныйФайлОбъект.mdo similarity index 53% rename from SSL/src/EventSubscriptions/ВыполнитьДействияПриЗаписиПрисоединенногоФайлаВзаимодействия/ВыполнитьДействияПриЗаписиПрисоединенногоФайлаВзаимодействия.mdo rename to SSL/src/DefinedTypes/ПрисоединенныйФайлОбъект/ПрисоединенныйФайлОбъект.mdo index 8e434c45c..7cbbde1a3 100644 --- a/SSL/src/EventSubscriptions/ВыполнитьДействияПриЗаписиПрисоединенногоФайлаВзаимодействия/ВыполнитьДействияПриЗаписиПрисоединенногоФайлаВзаимодействия.mdo +++ b/SSL/src/DefinedTypes/ПрисоединенныйФайлОбъект/ПрисоединенныйФайлОбъект.mdo @@ -1,18 +1,20 @@ - - ВыполнитьДействияПриЗаписиПрисоединенногоФайлаВзаимодействия + + + + + ПрисоединенныйФайлОбъект ru - Выполнить действия при записи присоединенного файла (Взаимодействия) + Присоединенный файл объект - + CatalogObject.СообщениеSMSПрисоединенныеФайлы CatalogObject.ВстречаПрисоединенныеФайлы CatalogObject.ТелефонныйЗвонокПрисоединенныеФайлы CatalogObject.ЭлектронноеПисьмоИсходящееПрисоединенныеФайлы CatalogObject.ЗапланированноеВзаимодействиеПрисоединенныеФайлы CatalogObject.ЭлектронноеПисьмоВходящееПрисоединенныеФайлы - - OnWrite - CommonModule.ПрисоединенныеФайлы.ВыполнитьДействияПриЗаписиПрисоединенногоФайла - + CatalogObject.ИдентификаторыОбъектовМетаданных + + diff --git a/SSL/src/DefinedTypes/СубъектПерсональныхДанных/СубъектПерсональныхДанных.mdo b/SSL/src/DefinedTypes/СубъектПерсональныхДанных/СубъектПерсональныхДанных.mdo new file mode 100644 index 000000000..83464007b --- /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..fe277e0f4 --- /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 6d4b5190a..2487f4363 100644 --- a/SSL/src/DocumentJournals/Взаимодействия/Commands/ВзаимодействияПоКонтакту/CommandModule.bsl +++ b/SSL/src/DocumentJournals/Взаимодействия/Commands/ВзаимодействияПоКонтакту/CommandModule.bsl @@ -1,4 +1,6 @@ +#Область ОбработчикиСобытий + &НаКлиенте Процедура ОбработкаКоманды(ПараметрКоманды, ПараметрыВыполненияКоманды) @@ -22,3 +24,5 @@ ПараметрыВыполненияКоманды.Окно); КонецПроцедуры + +#КонецОбласти diff --git a/SSL/src/DocumentJournals/Взаимодействия/Commands/ВзаимодействияПоПредмету/CommandModule.bsl b/SSL/src/DocumentJournals/Взаимодействия/Commands/ВзаимодействияПоПредмету/CommandModule.bsl index e50886b51..4582c6386 100644 --- a/SSL/src/DocumentJournals/Взаимодействия/Commands/ВзаимодействияПоПредмету/CommandModule.bsl +++ b/SSL/src/DocumentJournals/Взаимодействия/Commands/ВзаимодействияПоПредмету/CommandModule.bsl @@ -1,4 +1,6 @@ +#Область ОбработчикиСобытий + &НаКлиенте Процедура ОбработкаКоманды(ПараметрКоманды, ПараметрыВыполненияКоманды) @@ -38,3 +40,5 @@ ПараметрыВыполненияКоманды.Окно); КонецПроцедуры + +#КонецОбласти \ No newline at end of file diff --git a/SSL/src/DocumentJournals/Взаимодействия/Commands/ЗапланироватьВзаимодействиеПоКонтакту/CommandModule.bsl b/SSL/src/DocumentJournals/Взаимодействия/Commands/ЗапланироватьВзаимодействиеПоКонтакту/CommandModule.bsl index aa1e980cf..f1945cdc4 100644 --- a/SSL/src/DocumentJournals/Взаимодействия/Commands/ЗапланироватьВзаимодействиеПоКонтакту/CommandModule.bsl +++ b/SSL/src/DocumentJournals/Взаимодействия/Commands/ЗапланироватьВзаимодействиеПоКонтакту/CommandModule.bsl @@ -1,4 +1,6 @@ +#Область ОбработчикиСобытий + &НаКлиенте Процедура ОбработкаКоманды(ПараметрКоманды, ПараметрыВыполненияКоманды) @@ -7,3 +9,5 @@ ПараметрКоманды, ПараметрыВыполненияКоманды.Источник); КонецПроцедуры + +#КонецОбласти \ No newline at end of file diff --git a/SSL/src/DocumentJournals/Взаимодействия/Commands/ЗапланироватьВзаимодействиеПоПредмету/CommandModule.bsl b/SSL/src/DocumentJournals/Взаимодействия/Commands/ЗапланироватьВзаимодействиеПоПредмету/CommandModule.bsl index aa1e980cf..f1945cdc4 100644 --- a/SSL/src/DocumentJournals/Взаимодействия/Commands/ЗапланироватьВзаимодействиеПоПредмету/CommandModule.bsl +++ b/SSL/src/DocumentJournals/Взаимодействия/Commands/ЗапланироватьВзаимодействиеПоПредмету/CommandModule.bsl @@ -1,4 +1,6 @@ +#Область ОбработчикиСобытий + &НаКлиенте Процедура ОбработкаКоманды(ПараметрКоманды, ПараметрыВыполненияКоманды) @@ -7,3 +9,5 @@ ПараметрКоманды, ПараметрыВыполненияКоманды.Источник); КонецПроцедуры + +#КонецОбласти \ No newline at end of file diff --git a/SSL/src/DocumentJournals/Взаимодействия/Commands/ЗапланироватьВстречуПоКонтакту/CommandModule.bsl b/SSL/src/DocumentJournals/Взаимодействия/Commands/ЗапланироватьВстречуПоКонтакту/CommandModule.bsl index f482daec4..e363a9142 100644 --- a/SSL/src/DocumentJournals/Взаимодействия/Commands/ЗапланироватьВстречуПоКонтакту/CommandModule.bsl +++ b/SSL/src/DocumentJournals/Взаимодействия/Commands/ЗапланироватьВстречуПоКонтакту/CommandModule.bsl @@ -1,4 +1,6 @@ +#Область ОбработчикиСобытий + &НаКлиенте Процедура ОбработкаКоманды(ПараметрКоманды, ПараметрыВыполненияКоманды) @@ -6,3 +8,5 @@ "Документ.Встреча.ФормаОбъекта", ПараметрКоманды, ПараметрыВыполненияКоманды.Источник); КонецПроцедуры + +#КонецОбласти \ No newline at end of file diff --git a/SSL/src/DocumentJournals/Взаимодействия/Commands/ЗапланироватьВстречуПоПредмету/CommandModule.bsl b/SSL/src/DocumentJournals/Взаимодействия/Commands/ЗапланироватьВстречуПоПредмету/CommandModule.bsl index f482daec4..e363a9142 100644 --- a/SSL/src/DocumentJournals/Взаимодействия/Commands/ЗапланироватьВстречуПоПредмету/CommandModule.bsl +++ b/SSL/src/DocumentJournals/Взаимодействия/Commands/ЗапланироватьВстречуПоПредмету/CommandModule.bsl @@ -1,4 +1,6 @@ +#Область ОбработчикиСобытий + &НаКлиенте Процедура ОбработкаКоманды(ПараметрКоманды, ПараметрыВыполненияКоманды) @@ -6,3 +8,5 @@ "Документ.Встреча.ФормаОбъекта", ПараметрКоманды, ПараметрыВыполненияКоманды.Источник); КонецПроцедуры + +#КонецОбласти \ No newline at end of file diff --git a/SSL/src/DocumentJournals/Взаимодействия/Commands/НаписатьSMSПоКонтакту/CommandModule.bsl b/SSL/src/DocumentJournals/Взаимодействия/Commands/НаписатьSMSПоКонтакту/CommandModule.bsl index a5a7201e0..0da90d1f5 100644 --- a/SSL/src/DocumentJournals/Взаимодействия/Commands/НаписатьSMSПоКонтакту/CommandModule.bsl +++ b/SSL/src/DocumentJournals/Взаимодействия/Commands/НаписатьSMSПоКонтакту/CommandModule.bsl @@ -1,4 +1,6 @@ +#Область ОбработчикиСобытий + &НаКлиенте Процедура ОбработкаКоманды(ПараметрКоманды, ПараметрыВыполненияКоманды) @@ -6,3 +8,5 @@ "Документ.СообщениеSMS.ФормаОбъекта", ПараметрКоманды, ПараметрыВыполненияКоманды.Источник); КонецПроцедуры + +#КонецОбласти \ No newline at end of file diff --git a/SSL/src/DocumentJournals/Взаимодействия/Commands/НаписатьSMSПоПредмету/CommandModule.bsl b/SSL/src/DocumentJournals/Взаимодействия/Commands/НаписатьSMSПоПредмету/CommandModule.bsl index a5a7201e0..0da90d1f5 100644 --- a/SSL/src/DocumentJournals/Взаимодействия/Commands/НаписатьSMSПоПредмету/CommandModule.bsl +++ b/SSL/src/DocumentJournals/Взаимодействия/Commands/НаписатьSMSПоПредмету/CommandModule.bsl @@ -1,4 +1,6 @@ +#Область ОбработчикиСобытий + &НаКлиенте Процедура ОбработкаКоманды(ПараметрКоманды, ПараметрыВыполненияКоманды) @@ -6,3 +8,5 @@ "Документ.СообщениеSMS.ФормаОбъекта", ПараметрКоманды, ПараметрыВыполненияКоманды.Источник); КонецПроцедуры + +#КонецОбласти \ No newline at end of file diff --git a/SSL/src/DocumentJournals/Взаимодействия/Commands/НаписатьЭлектронноеПисьмоПоКонтакту/CommandModule.bsl b/SSL/src/DocumentJournals/Взаимодействия/Commands/НаписатьЭлектронноеПисьмоПоКонтакту/CommandModule.bsl index ec8a850ca..e46c4390b 100644 --- a/SSL/src/DocumentJournals/Взаимодействия/Commands/НаписатьЭлектронноеПисьмоПоКонтакту/CommandModule.bsl +++ b/SSL/src/DocumentJournals/Взаимодействия/Commands/НаписатьЭлектронноеПисьмоПоКонтакту/CommandModule.bsl @@ -1,4 +1,6 @@ +#Область ОбработчикиСобытий + &НаКлиенте Процедура ОбработкаКоманды(ПараметрКоманды, ПараметрыВыполненияКоманды) @@ -7,3 +9,5 @@ ПараметрКоманды, ПараметрыВыполненияКоманды.Источник); КонецПроцедуры + +#КонецОбласти diff --git a/SSL/src/DocumentJournals/Взаимодействия/Commands/НаписатьЭлектронноеПисьмоПоПредмету/CommandModule.bsl b/SSL/src/DocumentJournals/Взаимодействия/Commands/НаписатьЭлектронноеПисьмоПоПредмету/CommandModule.bsl index ec8a850ca..7326bc69e 100644 --- a/SSL/src/DocumentJournals/Взаимодействия/Commands/НаписатьЭлектронноеПисьмоПоПредмету/CommandModule.bsl +++ b/SSL/src/DocumentJournals/Взаимодействия/Commands/НаписатьЭлектронноеПисьмоПоПредмету/CommandModule.bsl @@ -1,4 +1,6 @@ +#Область ОбработчикиСобытий + &НаКлиенте Процедура ОбработкаКоманды(ПараметрКоманды, ПараметрыВыполненияКоманды) @@ -7,3 +9,5 @@ ПараметрКоманды, ПараметрыВыполненияКоманды.Источник); КонецПроцедуры + +#КонецОбласти \ No newline at end of file diff --git a/SSL/src/DocumentJournals/Взаимодействия/Commands/НастройкиРаботыСПочтой/CommandModule.bsl b/SSL/src/DocumentJournals/Взаимодействия/Commands/НастройкиРаботыСПочтой/CommandModule.bsl index f6d0b173a..5e6ebefb0 100644 --- a/SSL/src/DocumentJournals/Взаимодействия/Commands/НастройкиРаботыСПочтой/CommandModule.bsl +++ b/SSL/src/DocumentJournals/Взаимодействия/Commands/НастройкиРаботыСПочтой/CommandModule.bsl @@ -1,6 +1,10 @@ +#Область ОбработчикиСобытий + &НаКлиенте Процедура ОбработкаКоманды(ПараметрКоманды, ПараметрыВыполненияКоманды) ОткрытьФорму("ЖурналДокументов.Взаимодействия.Форма.НастройкиРаботыСПочтой",, ПараметрыВыполненияКоманды.Источник, ПараметрыВыполненияКоманды.Уникальность, ПараметрыВыполненияКоманды.Окно); КонецПроцедуры + +#КонецОбласти \ No newline at end of file diff --git a/SSL/src/DocumentJournals/Взаимодействия/Commands/ПечатьЭлектронногоПисьма/CommandModule.bsl b/SSL/src/DocumentJournals/Взаимодействия/Commands/ПечатьЭлектронногоПисьма/CommandModule.bsl index 21d0484bd..a07bb644f 100644 --- a/SSL/src/DocumentJournals/Взаимодействия/Commands/ПечатьЭлектронногоПисьма/CommandModule.bsl +++ b/SSL/src/DocumentJournals/Взаимодействия/Commands/ПечатьЭлектронногоПисьма/CommandModule.bsl @@ -1,4 +1,6 @@ +#Область ОбработчикиСобытий + &НаКлиенте Процедура ОбработкаКоманды(ПараметрКоманды, ПараметрыВыполненияКоманды) @@ -6,3 +8,5 @@ ОткрытьФорму("ЖурналДокументов.Взаимодействия.Форма.ПечатьЭлектронногоПисьма", ПараметрыФормы, ПараметрыВыполненияКоманды.Источник); КонецПроцедуры + +#КонецОбласти \ No newline at end of file diff --git a/SSL/src/DocumentJournals/Взаимодействия/Commands/ПозвонитьПоКонтакту/CommandModule.bsl b/SSL/src/DocumentJournals/Взаимодействия/Commands/ПозвонитьПоКонтакту/CommandModule.bsl index 142ed0053..25730c320 100644 --- a/SSL/src/DocumentJournals/Взаимодействия/Commands/ПозвонитьПоКонтакту/CommandModule.bsl +++ b/SSL/src/DocumentJournals/Взаимодействия/Commands/ПозвонитьПоКонтакту/CommandModule.bsl @@ -1,4 +1,6 @@ +#Область ОбработчикиСобытий + &НаКлиенте Процедура ОбработкаКоманды(ПараметрКоманды, ПараметрыВыполненияКоманды) @@ -7,3 +9,5 @@ ПараметрКоманды, ПараметрыВыполненияКоманды.Источник); КонецПроцедуры + +#КонецОбласти \ No newline at end of file diff --git a/SSL/src/DocumentJournals/Взаимодействия/Commands/ПозвонитьПоПредмету/CommandModule.bsl b/SSL/src/DocumentJournals/Взаимодействия/Commands/ПозвонитьПоПредмету/CommandModule.bsl index 142ed0053..25730c320 100644 --- a/SSL/src/DocumentJournals/Взаимодействия/Commands/ПозвонитьПоПредмету/CommandModule.bsl +++ b/SSL/src/DocumentJournals/Взаимодействия/Commands/ПозвонитьПоПредмету/CommandModule.bsl @@ -1,4 +1,6 @@ +#Область ОбработчикиСобытий + &НаКлиенте Процедура ОбработкаКоманды(ПараметрКоманды, ПараметрыВыполненияКоманды) @@ -7,3 +9,5 @@ ПараметрКоманды, ПараметрыВыполненияКоманды.Источник); КонецПроцедуры + +#КонецОбласти \ No newline at end of file diff --git a/SSL/src/DocumentJournals/Взаимодействия/Forms/НастройкиРаботыСПочтой/Form.form b/SSL/src/DocumentJournals/Взаимодействия/Forms/НастройкиРаботыСПочтой/Form.form index 12a644045..f27fa61c8 100644 --- a/SSL/src/DocumentJournals/Взаимодействия/Forms/НастройкиРаботыСПочтой/Form.form +++ b/SSL/src/DocumentJournals/Взаимодействия/Forms/НастройкиРаботыСПочтой/Form.form @@ -1538,7 +1538,7 @@ ЗаписатьИЗакрыть - Auto + DontUse Auto diff --git a/SSL/src/DocumentJournals/Взаимодействия/Forms/НастройкиРаботыСПочтой/Module.bsl b/SSL/src/DocumentJournals/Взаимодействия/Forms/НастройкиРаботыСПочтой/Module.bsl index 84d5a193b..fdfe27e5a 100644 --- a/SSL/src/DocumentJournals/Взаимодействия/Forms/НастройкиРаботыСПочтой/Module.bsl +++ b/SSL/src/DocumentJournals/Взаимодействия/Forms/НастройкиРаботыСПочтой/Module.bsl @@ -73,17 +73,16 @@ Процедура ФорматПодписиДляНовыхСообщенийПриИзменении(Элемент) Если ФорматПодписиДляНовыхСообщений = - ПредопределенноеЗначение("Перечисление.СпособыРедактированияЭлектронныхПисем.HTML") И - Элементы.СтраницыПодписьДляНовыхСообщений.ТекущаяСтраница = - Элементы.СтраницаНовоеСообщениеФорматированныйТекст Тогда + ПредопределенноеЗначение("Перечисление.СпособыРедактированияЭлектронныхПисем.HTML") + И Элементы.СтраницыПодписьДляНовыхСообщений.ТекущаяСтраница = Элементы.СтраницаНовоеСообщениеФорматированныйТекст Тогда Возврат; КонецЕсли; Если ФорматПодписиДляНовыхСообщений = - ПредопределенноеЗначение("Перечисление.СпособыРедактированияЭлектронныхПисем.ОбычныйТекст") И - Элементы.СтраницыПодписьДляНовыхСообщений.ТекущаяСтраница = Элементы.СтраницаНовоеСообщениеПростойТекст Тогда + ПредопределенноеЗначение("Перечисление.СпособыРедактированияЭлектронныхПисем.ОбычныйТекст") + И Элементы.СтраницыПодписьДляНовыхСообщений.ТекущаяСтраница = Элементы.СтраницаНовоеСообщениеПростойТекст Тогда Возврат; @@ -112,16 +111,16 @@ Процедура ФорматПодписиПриОтветеПересылкеПриИзменении(Элемент) Если ФорматПодписиПриОтветеПересылке = - ПредопределенноеЗначение("Перечисление.СпособыРедактированияЭлектронныхПисем.HTML") И - Элементы.СтраницыПодписьПриОтветеПересылке.ТекущаяСтраница = Элементы.СтраницаПриОтветеПересылкеФорматированныйДокумент Тогда + ПредопределенноеЗначение("Перечисление.СпособыРедактированияЭлектронныхПисем.HTML") + И Элементы.СтраницыПодписьПриОтветеПересылке.ТекущаяСтраница = Элементы.СтраницаПриОтветеПересылкеФорматированныйДокумент Тогда Возврат; КонецЕсли; Если ФорматПодписиПриОтветеПересылке = - ПредопределенноеЗначение("Перечисление.СпособыРедактированияЭлектронныхПисем.ОбычныйТекст") И - Элементы.СтраницыПодписьПриОтветеПересылке.ТекущаяСтраница = Элементы.СтраницаПриОтветеПересылкеПростойТекст Тогда + ПредопределенноеЗначение("Перечисление.СпособыРедактированияЭлектронныхПисем.ОбычныйТекст") + И Элементы.СтраницыПодписьПриОтветеПересылке.ТекущаяСтраница = Элементы.СтраницаПриОтветеПересылкеПростойТекст Тогда Возврат; diff --git a/SSL/src/DocumentJournals/Взаимодействия/Forms/ПараметрыЭлектронногоПисьма/Form.form b/SSL/src/DocumentJournals/Взаимодействия/Forms/ПараметрыЭлектронногоПисьма/Form.form index baebe3a26..38af7904c 100644 --- a/SSL/src/DocumentJournals/Взаимодействия/Forms/ПараметрыЭлектронногоПисьма/Form.form +++ b/SSL/src/DocumentJournals/Взаимодействия/Forms/ПараметрыЭлектронногоПисьма/Form.form @@ -781,7 +781,7 @@ КомандаОК - Auto + DontUse Auto diff --git a/SSL/src/DocumentJournals/Взаимодействия/Forms/ФормаСписка/Form.form b/SSL/src/DocumentJournals/Взаимодействия/Forms/ФормаСписка/Form.form index 5112da117..b61559e88 100644 --- a/SSL/src/DocumentJournals/Взаимодействия/Forms/ФормаСписка/Form.form +++ b/SSL/src/DocumentJournals/Взаимодействия/Forms/ФормаСписка/Form.form @@ -6821,10 +6821,18 @@ OnLoadDataFromSettingsAtServer ПриЗагрузкеДанныхИзНастроекНаСервере + + NavigationProcessing + ОбработкаПерехода + OnCreateAtServer ПриСозданииНаСервере + + BeforeLoadDataFromSettingsAtServer + ПередЗагрузкойДанныхИзНастроекНаСервере + Refresh DontBlock Use @@ -6850,12 +6858,6 @@ true - - Список.Отработано - - - Список.ОтработатьПосле - Список.Date @@ -7243,14 +7245,7 @@ 1 - Boolean - CatalogRef.ЗначенияСвойствОбъектов - String - Date - Number - - - + Characteristic.ДополнительныеРеквизитыИСведения true @@ -8340,7 +8335,7 @@ УстановитьВариантНавигацииПоПредмету - Auto + DontUse Auto @@ -8362,7 +8357,7 @@ УстановитьВариантНавигацииПоКонтакту - Auto + DontUse Auto @@ -8387,7 +8382,7 @@ ОтветственныйВыполнить - Auto + DontUse Auto @@ -8414,7 +8409,7 @@ FunctionalOption.ИспользоватьПризнакРассмотрено Picture - Auto + DontUse Auto @@ -8439,7 +8434,7 @@ ПредметВыполнить - Auto + DontUse Auto @@ -8465,7 +8460,7 @@ FunctionalOption.ИспользоватьПризнакРассмотрено - Auto + DontUse Auto @@ -8487,7 +8482,7 @@ СоздатьВстречу - Auto + DontUse Auto @@ -8509,7 +8504,7 @@ СоздатьЗапланированноеВзаимодействие - Auto + DontUse Auto @@ -8531,7 +8526,7 @@ СоздатьТелефонныйЗвонок - Auto + DontUse Auto @@ -8554,7 +8549,7 @@ СоздатьЭлектронноеПисьмо - Auto + DontUse Auto @@ -8581,7 +8576,7 @@ TextPicture - Auto + DontUse Auto @@ -8603,7 +8598,7 @@ УстановитьВариантНавигацииПоЗакладкам - Auto + DontUse Auto @@ -8628,7 +8623,7 @@ ДобавитьВЗакладки - Auto + DontUse Auto @@ -8650,7 +8645,7 @@ ПерсональныеНастройки - Auto + DontUse Auto @@ -8672,7 +8667,7 @@ УстановитьВариантНавигацииПоПапкам - Auto + DontUse Auto @@ -8697,7 +8692,7 @@ ПрименитьПравилаОбработки - Auto + DontUse Auto @@ -8722,7 +8717,7 @@ ПеренестиВПапку - Auto + DontUse Auto @@ -8748,7 +8743,7 @@ Обновить - Auto + DontUse Auto @@ -8775,7 +8770,7 @@ FunctionalOption.ИспользоватьПризнакРассмотрено - Auto + DontUse Auto @@ -8802,7 +8797,7 @@ FunctionalOption.ИспользоватьПризнакРассмотрено - Auto + DontUse Auto @@ -8828,7 +8823,7 @@ ПредметСписок - Auto + DontUse Auto @@ -8854,7 +8849,7 @@ ОтветственныйСписок - Auto + DontUse Auto @@ -8881,7 +8876,7 @@ FunctionalOption.ИспользоватьПризнакРассмотрено - Auto + DontUse Auto @@ -8907,7 +8902,7 @@ ИзменитьЗначениеПанелиНавигации - Auto + DontUse Auto @@ -8932,7 +8927,7 @@ Ответить - Auto + DontUse Auto @@ -8957,7 +8952,7 @@ ОтветитьВсем - Auto + DontUse Auto @@ -8982,7 +8977,7 @@ Переслать - Auto + DontUse Auto @@ -9004,7 +8999,7 @@ ВзаимодействияПоПредмету - Auto + DontUse Auto @@ -9027,7 +9022,7 @@ FunctionalOption.ИспользоватьПрочиеВзаимодействия - Auto + DontUse Auto @@ -9049,7 +9044,7 @@ ТолькоЗначимыеКонтакты - Auto + DontUse Auto @@ -9071,7 +9066,7 @@ ТолькоЗначимыеПредметы - Auto + DontUse Auto @@ -9093,7 +9088,7 @@ ТолькоАктивныеПредметы - Auto + DontUse Auto @@ -9115,7 +9110,7 @@ ОтображатьОбластьЧтения - Auto + DontUse Auto @@ -9137,7 +9132,7 @@ ИзменитьОтображениеПанелиНавигации - Auto + DontUse Auto diff --git a/SSL/src/DocumentJournals/Взаимодействия/Forms/ФормаСписка/Help/ru.html b/SSL/src/DocumentJournals/Взаимодействия/Forms/ФормаСписка/Help/ru.html index a4825f092..964d3cbd3 100644 --- a/SSL/src/DocumentJournals/Взаимодействия/Forms/ФормаСписка/Help/ru.html +++ b/SSL/src/DocumentJournals/Взаимодействия/Forms/ФормаСписка/Help/ru.html @@ -92,7 +92,7 @@

      Полнотекстовый поиск в переписке или во вложениях

      • Введите строку поиска в поле Найти, расположенное в правой верхней части окна.
        -
      • +
        • Будет выполнен поиск по текстам, содержащимся в переписке или во вложениях.
        • Данный поиск позволяет найти взаимодействия, для которых либо в самом документе, либо в текстах присоединенных файлов имеется строка, удовлетворяющая условиям.
          @@ -103,9 +103,13 @@
        • Если ни одно взаимодействие не найдено, поле ввода строки поиска подсвечивается красным.
        • -
          Для того чтобы отменить отображение списка по результатам полнотекстового поиска, необходимо очистить строку поиска.
          +
          Для того чтобы отменить отображение списка по результатам полнотекстового поиска, необходимо очистить строку поиска.
      • +
        По умолчанию поиск работает по целому слову или словосочетанию.
      • -
        Следует учитывать, что некоторые символы, введенные в строку поиска, будут трактоваться как служебные символы языка запросов полнотекстового поиска в данных. Информацию о списке таких служебных символов можно получить в справке (раздел 1С:Предприятие - Работа пользователя - Язык запросов полнотекстового поиска в данных).

      Установка признака Рассмотрено

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

      • Выделите нужные документы. 
      • diff --git a/SSL/src/DocumentJournals/Взаимодействия/Forms/ФормаСписка/Module.bsl b/SSL/src/DocumentJournals/Взаимодействия/Forms/ФормаСписка/Module.bsl index b3a360e33..3829e373b 100644 --- a/SSL/src/DocumentJournals/Взаимодействия/Forms/ФормаСписка/Module.bsl +++ b/SSL/src/DocumentJournals/Взаимодействия/Forms/ФормаСписка/Module.bsl @@ -29,9 +29,9 @@ Взаимодействия.ЗаполнитьПодменюПоТипуВзаимодействия(Элементы.СписокТипВзаимодействия, ЭтотОбъект); Для Каждого ТипПредмета Из Метаданные.РегистрыСведений.ПредметыПапкиВзаимодействий.Ресурсы.Предмет.Тип.Типы() Цикл - Если ТолькоПочта И - (ТипПредмета = Тип("ДокументСсылка.Встреча") ИЛИ ТипПредмета = Тип("ДокументСсылка.ТелефонныйЗвонок") ИЛИ - ТипПредмета = Тип("ДокументСсылка.ЗапланированноеВзаимодействие") ИЛИ ТипПредмета = Тип("ДокументСсылка.СообщениеSMS")) Тогда + Если ТолькоПочта + И (ТипПредмета = Тип("ДокументСсылка.Встреча") ИЛИ ТипПредмета = Тип("ДокументСсылка.ТелефонныйЗвонок") + ИЛИ ТипПредмета = Тип("ДокументСсылка.ЗапланированноеВзаимодействие") ИЛИ ТипПредмета = Тип("ДокументСсылка.СообщениеSMS")) Тогда Продолжить; КонецЕсли; СписокВыбораТипаПредмета.Добавить(Метаданные.НайтиПоТипу(ТипПредмета).ПолноеИмя(), Строка(ТипПредмета)); @@ -40,15 +40,27 @@ ТипВзаимодействия = ?(ТолькоПочта, "ВсеПисьма","Все"); Статус = "Все"; + ИмяТекущейПанелиНавигации = ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(Параметры, "ИмяТекущейПанелиНавигации"); + ТекущаяСсылка = ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(Параметры, "ТекущаяСтрока"); + Если ЗначениеЗаполнено(ТекущаяСсылка) Тогда + ПодготовитьНастройкиФормыКВыводуТекущейСсылки(ТекущаяСсылка); + КонецЕсли; + Взаимодействия.ЗаполнитьСписокДоступныхДляСозданияДокументов(ДокументыДоступныеДляСоздания); КонецПроцедуры +&НаСервере +Процедура ПередЗагрузкойДанныхИзНастроекНаСервере(Настройки) + Если Параметры.Свойство("ИмяТекущейПанелиНавигации") Тогда + Настройки.Удалить("ИмяТекущейПанелиНавигации"); + КонецЕсли; +КонецПроцедуры + &НаСервере Процедура ПриЗагрузкеДанныхИзНастроекНаСервере(Настройки) - ИмяТекущейПанелиНавигации = Настройки.Получить("ИмяТекущейПанелиНавигации"); - Если ПустаяСтрока(ИмяТекущейПанелиНавигации) Тогда + Если ПустаяСтрока(ИмяТекущейПанелиНавигации) Или Элементы.Найти(ИмяТекущейПанелиНавигации) = Неопределено Тогда ИмяТекущейПанелиНавигации = "СтраницаПредмет"; ИначеЕсли ИмяТекущейПанелиНавигации = "СтраницаСвойства" Тогда Если ТаблицаДопРеквизитовСвойств.НайтиСтроки(Новый @@ -91,8 +103,8 @@ Элементы.Закладки.Обновить(); ОбработатьАктивизациюСтрокиПанелиНавигации(); КонецЕсли; - ИначеЕсли Врег(ИмяСобытия) = Врег("Запись_ПапкиЭлектронныхПисем") ИЛИ - Врег(ИмяСобытия) = Врег("ПримененыПравилаОбработкиПисем") Тогда + ИначеЕсли Врег(ИмяСобытия) = Врег("Запись_ПапкиЭлектронныхПисем") + ИЛИ Врег(ИмяСобытия) = Врег("ПримененыПравилаОбработкиПисем") Тогда Если Элементы.СтраницыПанелиНавигации.ТекущаяСтраница = Элементы.СтраницаПапки Тогда ОбновитьПанельНавигации(); ВосстановитьРаскрытыеУзлыДерева(); @@ -112,6 +124,16 @@ КонецПроцедуры +&НаКлиенте +Процедура ОбработкаПерехода(ОбъектПерехода, СтандартнаяОбработка) + Если Не ЗначениеЗаполнено(ОбъектПерехода) Или ОбъектПерехода = Элементы.Список.ТекущаяСтрока Тогда + Возврат; + КонецЕсли; + + ОбработкаПереходаНаСервере(ОбъектПерехода); + ВосстановитьРаскрытыеУзлыДерева(); +КонецПроцедуры + &НаКлиенте Процедура ОбработкаВыбора(ВыбранноеЗначение, ИсточникВыбора) @@ -154,7 +176,7 @@ ИмяТекущегоЭлемента = ТекущийЭлемент.Имя; ПапкиТекущиеДанные = Элементы.Папки.ТекущиеДанные; - Если Лев(ИмяТекущегоЭлемента,6) = "Список" Тогда + Если СтрНачинаетсяС(ИмяТекущегоЭлемента, "Список") Тогда ВыполнитьПереносВПапкуМассиваПисем(Элементы[ИмяТекущегоЭлемента].ВыделенныеСтроки, ВыбранноеЗначение); Иначе УстановитьРодителяУПапки(ПапкиТекущиеДанные.Значение, ВыбранноеЗначение); @@ -176,23 +198,23 @@ &НаКлиенте Процедура ПанельНавигацииПриАктивизацииСтроки(Элемент) - Если Элемент.Имя = "Предметы" И - Элементы.СтраницыПанелиНавигации.ТекущаяСтраница <> Элементы.СтраницаПредмет Тогда + Если Элемент.Имя = "Предметы" + И Элементы.СтраницыПанелиНавигации.ТекущаяСтраница <> Элементы.СтраницаПредмет Тогда Возврат; - ИначеЕсли Элемент.Имя = "Контакты" И - Элементы.СтраницыПанелиНавигации.ТекущаяСтраница <> Элементы.СтраницаКонтакт Тогда + ИначеЕсли Элемент.Имя = "Контакты" + И Элементы.СтраницыПанелиНавигации.ТекущаяСтраница <> Элементы.СтраницаКонтакт Тогда Возврат; - ИначеЕсли Элемент.Имя = "Закладки" И - Элементы.СтраницыПанелиНавигации.ТекущаяСтраница <> Элементы.СтраницаЗакладки Тогда + ИначеЕсли Элемент.Имя = "Закладки" + И Элементы.СтраницыПанелиНавигации.ТекущаяСтраница <> Элементы.СтраницаЗакладки Тогда Возврат; - ИначеЕсли Элемент.Имя = "Свойства" И - Элементы.СтраницыПанелиНавигации.ТекущаяСтраница <> Элементы.СтраницаСвойства Тогда + ИначеЕсли Элемент.Имя = "Свойства" + И Элементы.СтраницыПанелиНавигации.ТекущаяСтраница <> Элементы.СтраницаСвойства Тогда Возврат; - ИначеЕсли Элемент.Имя = "Папки" И - Элементы.СтраницыПанелиНавигации.ТекущаяСтраница <> Элементы.СтраницаПапки Тогда + ИначеЕсли Элемент.Имя = "Папки" + И Элементы.СтраницыПанелиНавигации.ТекущаяСтраница <> Элементы.СтраницаПапки Тогда Возврат; - ИначеЕсли Элемент.Имя = "Категории" И - Элементы.СтраницыПанелиНавигации.ТекущаяСтраница <> Элементы.СтраницаКатегории Тогда + ИначеЕсли Элемент.Имя = "Категории" + И Элементы.СтраницыПанелиНавигации.ТекущаяСтраница <> Элементы.СтраницаКатегории Тогда Возврат; КонецЕсли; @@ -247,8 +269,8 @@ Иначе - Если ВыборКорректен(Элемент.Имя,Истина) И - ВзаимодействиеДляКоторогоСформированПредпросмотр <> Элементы.Список.ТекущиеДанные.Ссылка Тогда + Если ВыборКорректен(Элемент.Имя,Истина) + И ВзаимодействиеДляКоторогоСформированПредпросмотр <> Элементы.Список.ТекущиеДанные.Ссылка Тогда Если Элементы.Список.ВыделенныеСтроки.Количество() = 1 Тогда @@ -536,8 +558,8 @@ Если ТипЗнч(ПараметрыПеретаскивания.Значение) = Тип("Массив") Тогда - Если ТипЗнч(СтрокаНазначение.Значение) = Тип("СправочникСсылка.УчетныеЗаписиЭлектроннойПочты") ИЛИ - СтрокаНазначение.ЕстьПравоНаИзменение = 0 Тогда + Если ТипЗнч(СтрокаНазначение.Значение) = Тип("СправочникСсылка.УчетныеЗаписиЭлектроннойПочты") + ИЛИ СтрокаНазначение.ЕстьПравоНаИзменение = 0 Тогда ПараметрыПеретаскивания.Действие = ДействиеПеретаскивания.Отмена; Возврат; КонецЕсли; @@ -612,8 +634,8 @@ КонецЕсли; ДанныеСтроки = Папки.НайтиПоИдентификатору(ПараметрыПеретаскивания.Значение); - Если ТипЗнч(ДанныеСтроки.Значение) = Тип("СправочникСсылка.УчетныеЗаписиЭлектроннойПочты") ИЛИ - ДанныеСтроки.ПредопределеннаяПапка ИЛИ ДанныеСтроки.ЕстьПравоНаИзменение = 0 Тогда + Если ТипЗнч(ДанныеСтроки.Значение) = Тип("СправочникСсылка.УчетныеЗаписиЭлектроннойПочты") + ИЛИ ДанныеСтроки.ПредопределеннаяПапка ИЛИ ДанныеСтроки.ЕстьПравоНаИзменение = 0 Тогда Выполнение = Ложь; КонецЕсли; @@ -626,15 +648,15 @@ СписокИменФайлов = Новый СписокЗначений; - Если ТипЗнч(ПараметрыПеретаскивания.Значение) = Тип("Файл") И - ПараметрыПеретаскивания.Значение.ЭтоФайл() = Истина Тогда + Если ТипЗнч(ПараметрыПеретаскивания.Значение) = Тип("Файл") + И ПараметрыПеретаскивания.Значение.ЭтоФайл() Тогда СписокИменФайлов.Добавить(ПараметрыПеретаскивания.Значение.ПолноеИмя,ПараметрыПеретаскивания.Значение.Имя); ИначеЕсли ТипЗнч(ПараметрыПеретаскивания.Значение) = Тип("Массив") Тогда - Если ПараметрыПеретаскивания.Значение.Количество() >= 1 И - ТипЗнч(ПараметрыПеретаскивания.Значение[0]) = Тип("Файл") Тогда + Если ПараметрыПеретаскивания.Значение.Количество() >= 1 + И ТипЗнч(ПараметрыПеретаскивания.Значение[0]) = Тип("Файл") Тогда Для Каждого ФайлПринятый Из ПараметрыПеретаскивания.Значение Цикл Если ТипЗнч(ФайлПринятый) = Тип("Файл") И ФайлПринятый.ЭтоФайл() Тогда @@ -727,8 +749,8 @@ Если ВыборКорректен(Элементы.Список.Имя, Истина) Тогда ТекущееВзаимодействие = Элементы.Список.ТекущиеДанные.Ссылка; - Если ТипЗнч(ТекущееВзаимодействие) <> Тип("ДокументСсылка.ЭлектронноеПисьмоИсходящее") И - ТипЗнч(ТекущееВзаимодействие) <> Тип("ДокументСсылка.ЭлектронноеПисьмоВходящее") Тогда + Если ТипЗнч(ТекущееВзаимодействие) <> Тип("ДокументСсылка.ЭлектронноеПисьмоИсходящее") + И ТипЗнч(ТекущееВзаимодействие) <> Тип("ДокументСсылка.ЭлектронноеПисьмоВходящее") Тогда ПоказатьПредупреждение(, НСтр("ru = 'Команда ""Переслать"" может быть выполнена только для писем.'")); Возврат; КонецЕсли; @@ -794,7 +816,7 @@ Процедура ОтветственныйСписок(Команда) ИмяТекущегоЭлемента = Элементы.Список.Имя; - Если Лев(ИмяТекущегоЭлемента,6) = "Список" И Не ВыборКорректен(ИмяТекущегоЭлемента) Тогда + Если СтрНачинаетсяС(ИмяТекущегоЭлемента, "Список") И Не ВыборКорректен(ИмяТекущегоЭлемента) Тогда Возврат; КонецЕсли; @@ -914,13 +936,13 @@ Процедура ДобавитьВЗакладки(Команда) ИмяТекущегоЭлемента = ТекущийЭлемент.Имя; - Если Лев(ИмяТекущегоЭлемента, 6) = "Список" И Не ВыборКорректен(ИмяТекущегоЭлемента) Тогда + Если СтрНачинаетсяС(ИмяТекущегоЭлемента, "Список") И Не ВыборКорректен(ИмяТекущегоЭлемента) Тогда ПоказатьПредупреждение(, НСтр("ru = 'Не выбран элемент для добавления в закладки.'")); Возврат; КонецЕсли; ЭлементДляДобавления = Неопределено; - Если Лев(ИмяТекущегоЭлемента, 6) = "Список" Тогда + Если СтрНачинаетсяС(ИмяТекущегоЭлемента, "Список") Тогда ЭлементДляДобавления = Элементы[ИмяТекущегоЭлемента].ВыделенныеСтроки; ИначеЕсли ИмяТекущегоЭлемента = "Свойства" Или ИмяТекущегоЭлемента = "Категории" Или ИмяТекущегоЭлемента = "Папки" Тогда ТекущиеДанные = Элементы[ИмяТекущегоЭлемента].ТекущиеДанные; @@ -958,7 +980,7 @@ Процедура ОтложитьРассмотрениеВыполнить(Команда) ИмяТекущегоЭлемента = ТекущийЭлемент.Имя; - Если Лев(ИмяТекущегоЭлемента,6) = "Список" И Не ВыборКорректен(ИмяТекущегоЭлемента) Тогда + Если СтрНачинаетсяС(ИмяТекущегоЭлемента, "Список") И Не ВыборКорректен(ИмяТекущегоЭлемента) Тогда Возврат; КонецЕсли; @@ -1029,8 +1051,8 @@ Возврат; КонецЕсли; - Если ТекущиеДанные.ЕстьПравоНаИзменение = 0 ИЛИ - ТипЗнч(ТекущиеДанные.Значение) = Тип("СправочникСсылка.УчетныеЗаписиЭлектроннойПочты") Тогда + Если ТекущиеДанные.ЕстьПравоНаИзменение = 0 + ИЛИ ТипЗнч(ТекущиеДанные.Значение) = Тип("СправочникСсылка.УчетныеЗаписиЭлектроннойПочты") Тогда Возврат; КонецЕсли; @@ -1046,7 +1068,7 @@ Процедура ПеренестиВПапку(Команда) ИмяТекущегоЭлемента = ТекущийЭлемент.Имя; - Если Лев(ИмяТекущегоЭлемента,6) = "Список" И Не ВыборКорректен(ИмяТекущегоЭлемента) Тогда + Если СтрНачинаетсяС(ИмяТекущегоЭлемента, "Список") И Не ВыборКорректен(ИмяТекущегоЭлемента) Тогда Возврат; КонецЕсли; @@ -1056,8 +1078,8 @@ КонецЕсли; Если ИмяТекущегоЭлемента = "Папки" Тогда - Если ТипЗнч(ПапкиТекущиеДанные.Значение) = Тип("СправочникСсылка.УчетныеЗаписиЭлектроннойПочты") ИЛИ - ПапкиТекущиеДанные.ПредопределеннаяПапка Тогда + Если ТипЗнч(ПапкиТекущиеДанные.Значение) = Тип("СправочникСсылка.УчетныеЗаписиЭлектроннойПочты") + ИЛИ ПапкиТекущиеДанные.ПредопределеннаяПапка Тогда ПоказатьПредупреждение(, НСтр("ru = 'Команда не может быть выполнена для данного объекта'")); Возврат; ИначеЕсли ПапкиТекущиеДанные.ЕстьПравоНаИзменение = 0 Тогда @@ -1530,8 +1552,8 @@ ИмяПоля = "Ссылка.[" + ТекущееСвойствоПанелиНавигации.Наименование + "]"; ИмяОтбора = ТекущееСвойствоПанелиНавигации.Наименование; - Если ТипЗнч(ДанныеДляОбработки.Значение) = Тип("Строка") И - ДанныеДляОбработки.Значение = НСтр("ru = 'Не указан'") Тогда + Если ТипЗнч(ДанныеДляОбработки.Значение) = Тип("Строка") + И ДанныеДляОбработки.Значение = НСтр("ru = 'Не указан'") Тогда ВидСравненияЭлементаОтбора = ВидСравненияКомпоновкиДанных.НеЗаполнено; ПравоеЗначение = ""; @@ -1568,7 +1590,7 @@ КомпоновщикНастроек.Восстановить(СпособВосстановленияНастроекКомпоновкиДанных.ПроверятьДоступность); СкопироватьОтбор(ГруппаОтбора,КомпоновщикНастроек.Настройки.Отбор); - ЗаголовокПанелиНавигации = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонЗаголовка, НСтр("ru = 'Закладка'") ,ДанныеДляОбработки.Значение); + ЗаголовокПанелиНавигации = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонЗаголовка, НСтр("ru = 'Закладка'"), ДанныеДляОбработки.Значение); Возврат; @@ -1579,7 +1601,7 @@ КонецЕсли; - ЗаголовокПанелиНавигацииПодсказка = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонЗаголовка, ЗначениеОтбора , ИмяОтбора); + ЗаголовокПанелиНавигацииПодсказка = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонЗаголовка, ЗначениеОтбора, ИмяОтбора); ЗаголовокПанелиНавигации = ЗначениеОтбора; Если СтрДлина(ЗаголовокПанелиНавигации) > 30 Тогда ЗаголовокПанелиНавигации = Лев(ЗаголовокПанелиНавигации, 27) + "..."; @@ -1616,6 +1638,10 @@ КонецЕсли; + Если СтрНайти(ПредпросмотрHTML,"") = 0 Тогда + ПредпросмотрHTML = "" + ПредпросмотрHTML + ""; + КонецЕсли; + ВзаимодействиеДляКоторогоСформированПредпросмотр = СсылкаДокументВзаимодействий; КонецПроцедуры @@ -1640,7 +1666,7 @@ ИначеЕсли ИмяКоманды = "УстановитьВариантПоКатегориям" Тогда ЗаполнитьТаблицуКатегорий(); Элементы.СтраницыПанелиНавигации.ТекущаяСтраница = Элементы.СтраницаКатегории; - ИначеЕсли Найти(ИмяКоманды,"УстановитьВариантПоСвойству") > 0 Тогда + ИначеЕсли СтрНайти(ИмяКоманды,"УстановитьВариантПоСвойству") > 0 Тогда ЗаполнитьДеревоСвойств(ИмяКоманды); Элементы.СтраницыПанелиНавигации.ТекущаяСтраница = Элементы.СтраницаСвойства; КонецЕсли; @@ -1982,9 +2008,9 @@ СтрокаСвойства = СтрокиПервыйУровень.Добавить(); ЗаполнитьЗначенияСвойств(СтрокаСвойства, Строка); СтрокаСвойства.НомерКартинки = ?(ТипЗнч(СтрокаСвойства.Значение) = Тип("Строка"),0,1); - СтрокаСвойства.Представление = Строка(СтрокаСвойства.Значение) + - ?(Строка.НеРассмотрено = 0 Или Не ИспользоватьПризнакРассмотрено, - "", " (" + Строка(Строка.НеРассмотрено) + ")"); + СтрокаСвойства.Представление = Строка(СтрокаСвойства.Значение) + + ?(Строка.НеРассмотрено = 0 Или Не ИспользоватьПризнакРассмотрено, + "", " (" + Строка(Строка.НеРассмотрено) + ")"); ДобавитьСтрокиВДеревоНавигации(Строка, СтрокаСвойства, Истина, 1); КонецЦикла; @@ -2238,9 +2264,9 @@ НоваяСтрока = Категории.Добавить(); ЗаполнитьЗначенияСвойств(НоваяСтрока,Выборка); НоваяСтрока.НомерКартинки = 0; - НоваяСтрока.Представление = Строка(Выборка.Представление) + - ?(Выборка.НеРассмотрено = 0 Или Не ИспользоватьПризнакРассмотрено, - "", " (" + Строка(Выборка.НеРассмотрено) + ")"); + НоваяСтрока.Представление = Строка(Выборка.Представление) + + ?(Выборка.НеРассмотрено = 0 Или Не ИспользоватьПризнакРассмотрено, + "", " (" + Строка(Выборка.НеРассмотрено) + ")"); КонецЦикла; @@ -2255,8 +2281,8 @@ Запрос = Новый Запрос; ТекстЗапросаПоОтбору = ПолучитьТекстЗапросаПоОтборуСписка(Запрос); - СтрокаПоКоторойИщем = Прав(ТекстЗапросаПоОтбору, СтрДлина(ТекстЗапросаПоОтбору) - Найти(ТекстЗапросаПоОтбору,"ГДЕ") + 1); - МассивСтрокУсловия = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(СтрокаПоКоторойИщем, Символы.ПС,Истина); + СтрокаПоКоторойИщем = Прав(ТекстЗапросаПоОтбору, СтрДлина(ТекстЗапросаПоОтбору) - СтрНайти(ТекстЗапросаПоОтбору,"ГДЕ") + 1); + МассивСтрокУсловия = СтрРазделить(СтрокаПоКоторойИщем, Символы.ПС, Ложь); ТекстУсловийПоЖурналуДокументов = ""; ТекстУсловийПоРегистру = ""; Инд = 1; @@ -2266,9 +2292,9 @@ Если Инд = 2 Тогда СтрокаУсловия = " И " + СтрокаУсловия; КонецЕсли; - Если Найти(СтрокаУсловия, "ЖурналДокументовВзаимодействия") Тогда + Если СтрНайти(СтрокаУсловия, "ЖурналДокументовВзаимодействия") Тогда ТекстУсловийПоЖурналуДокументов = ТекстУсловийПоЖурналуДокументов + СтрокаУсловия + Символы.ПС; - ИначеЕсли Найти(СтрокаУсловия, "ПредметыВзаимодействий") Тогда + ИначеЕсли СтрНайти(СтрокаУсловия, "ПредметыВзаимодействий") Тогда ТекстУсловийПоРегистру = ТекстУсловийПоРегистру + СтрокаУсловия + Символы.ПС; КонецЕсли; @@ -2307,7 +2333,7 @@ КонтактыПанельНавигации.ТекстЗапроса = ТекстЗапросаДинамическийСписок; Для каждого ПараметрЗапроса Из Запрос.Параметры Цикл - Если Лев(ПараметрЗапроса.Ключ, 1) = "П" Тогда + Если СтрНачинаетсяС(ПараметрЗапроса.Ключ, "П") Тогда ИмяПараметра = "Пар" + Прав(ПараметрЗапроса.Ключ, СтрДлина(ПараметрЗапроса.Ключ)-1); Иначе ИмяПараметра = ПараметрЗапроса.Ключ; @@ -2352,9 +2378,10 @@ Папки.ПолучитьЭлементы().Очистить(); Запрос = Новый Запрос; - Запрос.Текст = "ВЫБРАТЬ РАЗРЕШЕННЫЕ - | ПапкиЭлектронныхПисем.Владелец КАК УчетнаяЗапись, - | ПапкиЭлектронныхПисем.Ссылка КАК Значение, + Запрос.Текст = " + |ВЫБРАТЬ РАЗРЕШЕННЫЕ + | УчетныеЗаписиЭлектроннойПочты.Ссылка КАК УчетнаяЗапись, + | ПапкиЭлектронныхПисем.Ссылка КАК Значение, | ЕСТЬNULL(НеРассмотреноПапки.КоличествоНеРассмотрено, 0) КАК НеРассмотрено, | ПапкиЭлектронныхПисем.ПредопределеннаяПапка, | ВЫБОР @@ -2382,13 +2409,17 @@ | КОНЕЦ | КОНЕЦ КАК НомерКартинки |ИЗ - | Справочник.ПапкиЭлектронныхПисем КАК ПапкиЭлектронныхПисем + | Справочник.УчетныеЗаписиЭлектроннойПочты КАК УчетныеЗаписиЭлектроннойПочты + | ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ПапкиЭлектронныхПисем КАК ПапкиЭлектронныхПисем + | ПО ПапкиЭлектронныхПисем.Владелец = УчетныеЗаписиЭлектроннойПочты.Ссылка | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.СостоянияПапокПисем КАК НеРассмотреноПапки | ПО (НеРассмотреноПапки.Папка = ПапкиЭлектронныхПисем.Ссылка) | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.НастройкиУчетныхЗаписейЭлектроннойПочты КАК НастройкиУчетныхЗаписейЭлектроннойПочты | ПО ПапкиЭлектронныхПисем.Владелец = НастройкиУчетныхЗаписейЭлектроннойПочты.УчетнаяЗаписьЭлектроннойПочты |ГДЕ | НЕ ЕСТЬNULL(НастройкиУчетныхЗаписейЭлектроннойПочты.НеИспользоватьВоВстроенномПочтовомКлиенте, ЛОЖЬ) + | И НЕ ПапкиЭлектронныхПисем.ПометкаУдаления + | И НЕ УчетныеЗаписиЭлектроннойПочты.ПометкаУдаления | |УПОРЯДОЧИТЬ ПО | ПапкиЭлектронныхПисем.Код @@ -2414,9 +2445,9 @@ СтрокаУчЗаписи.НомерКартинки = 0; СтрокаУчЗаписи.НеРассмотрено = Строка.НеРассмотрено; СтрокаУчЗаписи.ЕстьПравоНаИзменение = Строка.ЕстьПравоНаИзменение; - СтрокаУчЗаписи.Представление = Строка(СтрокаУчЗаписи.Значение) + - ?(Строка.НеРассмотрено = 0 Или Не ИспользоватьПризнакРассмотрено, - "", " (" + Строка(Строка.НеРассмотрено) + ")"); + СтрокаУчЗаписи.Представление = Строка(СтрокаУчЗаписи.Значение) + + ?(Строка.НеРассмотрено = 0 Или Не ИспользоватьПризнакРассмотрено, + "", " (" + Строка(Строка.НеРассмотрено) + ")"); ДобавитьСтрокиВДеревоНавигации(Строка, СтрокаУчЗаписи); @@ -2443,14 +2474,16 @@ Если ВзаимодействияКлиентСервер.ЯвляетсяВзаимодействием(Строка.Значение) Тогда СтрокаДетали = Строка.Строки[0]; НоваяСтрока.Представление = ?(ПустаяСтрока(СтрокаДетали.Тема), - НСтр("ru = 'Тема не указана'"), СтрокаДетали.Тема) + " " + НСтр("ru ='от'") + " " + - Формат(СтрокаДетали.Дата, "ДЛФ=DT") + ?(Строка.НеРассмотрено = 0 Или Не ИспользоватьПризнакРассмотрено, - "", " (" + Строка(Строка.НеРассмотрено) + ")"); + НСтр("ru = 'Тема не указана'"), СтрокаДетали.Тема) + " " + НСтр("ru ='от'") + " " + + Формат(СтрокаДетали.Дата, "ДЛФ=DT") + ?(Строка.НеРассмотрено = 0 Или Не ИспользоватьПризнакРассмотрено, + "", + " (" + Строка(Строка.НеРассмотрено) + ")"); НоваяСтрока.НомерКартинки = СтрокаДетали.НомерКартинки; Иначе - НоваяСтрока.Представление = Строка(НоваяСтрока.Значение) + - ?(Строка.НеРассмотрено = 0 Или Не ИспользоватьПризнакРассмотрено, - "", " (" + Строка(Строка.НеРассмотрено) + ")"); + НоваяСтрока.Представление = Строка(НоваяСтрока.Значение) + + ?(Строка.НеРассмотрено = 0 Или Не ИспользоватьПризнакРассмотрено, + "", + " (" + Строка(Строка.НеРассмотрено) + ")"); Если Строка.НомерКартинки = Null И НомерКартинки = -1 И Строка.Строки.Количество() > 0 Тогда НоваяСтрока.НомерКартинки = Строка.Строки[0].НомерКартинки; КонецЕсли; @@ -2485,9 +2518,9 @@ Если МакетКомпоновкиДанных.ЗначенияПараметров.Количество() = 0 Тогда Возврат ""; - ИначеЕсли МакетКомпоновкиДанных.ЗначенияПараметров.Количество() = 2 И - (НЕ ЗначениеЗаполнено(МакетКомпоновкиДанных.ЗначенияПараметров.ДатаНачала.Значение)) И - (НЕ ЗначениеЗаполнено(МакетКомпоновкиДанных.ЗначенияПараметров.ДатаОкончания.Значение)) Тогда + ИначеЕсли МакетКомпоновкиДанных.ЗначенияПараметров.Количество() = 2 + И (НЕ ЗначениеЗаполнено(МакетКомпоновкиДанных.ЗначенияПараметров.ДатаНачала.Значение)) + И (НЕ ЗначениеЗаполнено(МакетКомпоновкиДанных.ЗначенияПараметров.ДатаОкончания.Значение)) Тогда Возврат ""; КонецЕсли; @@ -2503,7 +2536,7 @@ |//////////////////////////////////////////////////////////////////////////////// |"; - НайденнаяПозицияИЗ = Найти(ТекстЗапроса,"ИЗ"); + НайденнаяПозицияИЗ = СтрНайти(ТекстЗапроса,"ИЗ"); Если НайденнаяПозицияИЗ <> 0 Тогда ТекстЗапроса = Лев(ТекстЗапроса,НайденнаяПозицияИЗ - 1) + " ПОМЕСТИТЬ ОтборСписка | " + Прав(ТекстЗапроса,СтрДлина(ТекстЗапроса) - НайденнаяПозицияИЗ + 1); @@ -2585,6 +2618,10 @@ ИначеЕсли Элементы.СтраницыПанелиНавигации.ТекущаяСтраница = Элементы.СтраницаПредмет Тогда + Если ЗначениеЗаполнено(Элементы.ПредметыПанельНавигации.ТекущаяСтрока) Тогда + Возврат; + КонецЕсли; + Элементы.ПредметыПанельНавигации.ТекущаяСтрока = РегистрыСведений.СостоянияПредметовВзаимодействий.СоздатьКлючЗаписи(Новый Структура("Предмет", ЗначениеНастроек.ТекущееЗначение)); ИзменитьОтборСписок("Предметы",Новый Структура("Значение,ОписаниеТипов", @@ -2692,8 +2729,8 @@ НоваяКоманда = Команды.Добавить("УстановитьВариантПоСвойству_" + Строка(Инд)); НоваяКоманда.Действие = "ПереключитьПанельНавигации"; - ЭлементКнопкаПодменю = Элементы.Добавить("ДопКнопкаВыбораВариантаНавигацииСвойства_" + - Строка(Инд),Тип("КнопкаФормы"), Элементы.ВыборВариантаНавигации); + ЭлементКнопкаПодменю = Элементы.Добавить("ДопКнопкаВыбораВариантаНавигацииСвойства_" + + Строка(Инд),Тип("КнопкаФормы"), Элементы.ВыборВариантаНавигации); ЭлементКнопкаПодменю.Вид = ВидКнопкиФормы.КнопкаКоманднойПанели; ЭлементКнопкаПодменю.ИмяКоманды = НоваяКоманда.Имя; ЭлементКнопкаПодменю.Заголовок = НСтр("ru = 'По'") + " " + Выборка.Представление; @@ -3010,7 +3047,11 @@ &НаСервере Функция ДобавитьВЗакладкиСервер(Знач ДанныеДляОбработки, ИмяЭлементаФормы) - Результат = Новый Структура("ЭлементДобавлен,НавигационнаяСсылкаЭлемента, ПредставлениеЭлемента, ТекстСообщенияОшибка", Ложь, "", "", ""); + Результат = Новый Структура; + Результат.Вставить("ЭлементДобавлен", Ложь); + Результат.Вставить("НавигационнаяСсылкаЭлемента", ""); + Результат.Вставить("ПредставлениеЭлемента", ""); + Результат.Вставить("ТекстСообщенияОшибка", ""); СхемаКомпоновки = ЖурналыДокументов.Взаимодействия.ПолучитьМакет("СхемаОтборВзаимодействия"); АдресСхемы = ПоместитьВоВременноеХранилище(СхемаКомпоновки, УникальныйИдентификатор); @@ -3019,7 +3060,7 @@ КомпоновщикНастроек.Инициализировать(Новый ИсточникДоступныхНастроекКомпоновкиДанных(АдресСхемы)); КомпоновщикНастроек.ЗагрузитьНастройки(СхемаКомпоновки.НастройкиПоУмолчанию); - Если Лев(ИмяЭлементаФормы, 6) = "Список" Тогда + Если СтрНачинаетсяС(ИмяЭлементаФормы, "Список") Тогда СписокВзаимодействий = Новый СписокЗначений; @@ -3038,9 +3079,8 @@ "Ссылка", ВидСравненияКомпоновкиДанных.ВСписке, СписокВзаимодействий); НаименованиеЗакладки = ?(ТолькоПочта, НСтр("ru = 'Избранные письма'"), НСтр("ru = 'Избранные взаимодействия'")); Если СписокВзаимодействий.Количество() > 1 Тогда - Текст = ?(ТолькоПочта, НСтр("ru = 'Выбранные письма (%1)'"), НСтр("ru = 'выбранные взаимодействия (%1)'")); - Результат.ПредставлениеЭлемента = - СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(Текст, СписокВзаимодействий.Количество()); + Текст = ?(ТолькоПочта, НСтр("ru = 'Выбранные письма (%1)'"), НСтр("ru = 'Выбранные взаимодействия (%1)'")); + Результат.ПредставлениеЭлемента = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(Текст, СписокВзаимодействий.Количество()); Иначе Результат.ПредставлениеЭлемента = ОбщегоНазначения.ПредметСтрокой(СписокВзаимодействий[0].Значение); Результат.НавигационнаяСсылкаЭлемента = ПолучитьНавигационнуюСсылку(СписокВзаимодействий[0].Значение); @@ -3067,8 +3107,7 @@ НаименованиеЗакладки = НСтр("ru = 'Предмет'") + " = " + Строка(ДанныеДляОбработки.Значение); Текст = ?(ТолькоПочта, НСтр("ru = 'Письма по предмету %1'"), НСтр("ru = 'Взаимодействия по предмету %1'")); - Результат.ПредставлениеЭлемента = - СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(Текст, ОбщегоНазначения.ПредметСтрокой(ДанныеДляОбработки.Значение)); + Результат.ПредставлениеЭлемента = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(Текст, ОбщегоНазначения.ПредметСтрокой(ДанныеДляОбработки.Значение)); Результат.НавигационнаяСсылкаЭлемента = ПолучитьНавигационнуюСсылку(ДанныеДляОбработки.Значение); ИначеЕсли ДанныеДляОбработки.Значение = НСтр("ru = 'Не указан'") Тогда @@ -3085,22 +3124,21 @@ НаименованиеЗакладки = НСтр("ru = 'Тип предмета'") + " " + Строка(ДанныеДляОбработки.ОписаниеТипов.Типы()[0]); Результат.ПредставлениеЭлемента = ?(ТолькоПочта, НСтр("ru = 'Письма по: %1'"), НСтр("ru = 'Взаимодействия по: %1'")); - Результат.ПредставлениеЭлемента = - СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(Результат.ПредставлениеЭлемента, - ДанныеДляОбработки.ОписаниеТипов.Типы()[0]); + Результат.ПредставлениеЭлемента = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(Результат.ПредставлениеЭлемента, ДанныеДляОбработки.ОписаниеТипов.Типы()[0]); КонецЕсли; ИначеЕсли ИмяЭлементаФормы = "Свойства" Тогда - Если ТипЗнч(ДанныеДляОбработки.Значение) = Тип("Строка") И - ДанныеДляОбработки.Значение = Нстр("ru = 'Не указан'") Тогда + Если ТипЗнч(ДанныеДляОбработки.Значение) = Тип("Строка") + И ДанныеДляОбработки.Значение = Нстр("ru = 'Не указан'") Тогда НаименованиеЗакладки = ТекущееСвойствоПанелиНавигации.Наименование + " " + НСтр("ru = 'не указан'"); Результат.ПредставлениеЭлемента = ?(ТолькоПочта, НСтр("ru = 'Письма'"), НСтр("ru = 'Взаимодействия'")); Иначе - НаименованиеЗакладки = ТекущееСвойствоПанелиНавигации.Наименование + - " = " + Строка(ДанныеДляОбработки.Значение); - Результат.ПредставлениеЭлемента = ?(ТолькоПочта, НСтр("ru = 'Письма с заданным свойством: %1'"), НСтр("ru = 'Взаимодействия с заданным свойством: %1'")); + НаименованиеЗакладки = ТекущееСвойствоПанелиНавигации.Наименование + " = " + Строка(ДанныеДляОбработки.Значение); + Результат.ПредставлениеЭлемента = ?(ТолькоПочта, + НСтр("ru = 'Письма с заданным свойством: %1'"), + НСтр("ru = 'Взаимодействия с заданным свойством: %1'")); Результат.ПредставлениеЭлемента = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(Результат.ПредставлениеЭлемента, ДанныеДляОбработки.Значение); КонецЕсли; @@ -3131,9 +3169,7 @@ НаименованиеЗакладки = НСтр("ru = 'Тип контакта'") + " " + Строка(ДанныеДляОбработки.ОписаниеТипов.Типы()[0]); Результат.ПредставлениеЭлемента = ?(ТолькоПочта, НСтр("ru = 'Письма по контактам: %1'"), НСтр("ru = 'Взаимодействия по контактам: %1'")); - Результат.ПредставлениеЭлемента = - СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(Результат.ПредставлениеЭлемента, - ДанныеДляОбработки.ОписаниеТипов.Типы()[0]); + Результат.ПредставлениеЭлемента = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(Результат.ПредставлениеЭлемента, ДанныеДляОбработки.ОписаниеТипов.Типы()[0]); КонецЕсли; @@ -3141,8 +3177,7 @@ НаименованиеЗакладки = НСтр("ru = 'В папке'") + " " + Строка(ДанныеДляОбработки.Значение); Результат.ПредставлениеЭлемента = ?(ТолькоПочта, НСтр("ru = 'Письма в папке: %1'"), НСтр("ru = 'Взаимодействия в папке: %1'")); - Результат.ПредставлениеЭлемента = - СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(Результат.ПредставлениеЭлемента, ДанныеДляОбработки.Значение); + Результат.ПредставлениеЭлемента = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(Результат.ПредставлениеЭлемента, ДанныеДляОбработки.Значение); КонецЕсли; @@ -3163,8 +3198,8 @@ Пока Выборка.Следующий() Цикл Если ПолучитьXML(КомпоновщикНастроек.ПолучитьНастройки()) = ПолучитьXML(Выборка.КомпоновщикНастроек.Получить()) Тогда - Результат.ТекстСообщенияОшибка = - СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Закладка с такими настройками уже существует : %1'"), Выборка.Наименование); + Результат.ТекстСообщенияОшибка = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Закладка с такими настройками уже существует : %1'"), + Выборка.Наименование); Возврат Результат; КонецЕсли; КонецЦикла; @@ -3339,9 +3374,9 @@ &НаСервере Процедура ОпределитьДоступностьПолнотекстовыйПоиск() - Если ПолучитьФункциональнуюОпцию("ИспользоватьПолнотекстовыйПоиск") И - ПолнотекстовыйПоиск.ПолучитьРежимПолнотекстовогоПоиска() = РежимПолнотекстовогоПоиска.Разрешить Тогда - ИсторияПоиска = ОбщегоНазначения.ХранилищеОбщихНастроекЗагрузить("ИсторияПоискаВзаимодействия"); + Если ПолучитьФункциональнуюОпцию("ИспользоватьПолнотекстовыйПоиск") + И ПолнотекстовыйПоиск.ПолучитьРежимПолнотекстовогоПоиска() = РежимПолнотекстовогоПоиска.Разрешить Тогда + ИсторияПоиска = ОбщегоНазначения.ХранилищеОбщихНастроекЗагрузить("ИсторияПоискаВзаимодействия", ""); Если ИсторияПоиска <> Неопределено Тогда Элементы.СтрокаПоиска.СписокВыбора.ЗагрузитьЗначения(ИсторияПоиска); КонецЕсли; @@ -3359,8 +3394,8 @@ Если ТекстОшибки = Неопределено Тогда РасширенныйПоиск = Истина; ТекстОповещения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Найдено %1 %2.'"), - ?(ТолькоПочта,НСтр("ru = 'писем'"), НСтр("ru = 'взаимодействий'")) + ": ", - Строка(КоличествоЭлементовНайдено)); + ?(ТолькоПочта,НСтр("ru = 'писем'"), НСтр("ru = 'взаимодействий'")) + ": ", + Строка(КоличествоЭлементовНайдено)); ПоказатьОповещениеПользователя(ТекстОповещения); ТекущиеДанные = Элементы.Список.ТекущиеДанные; Если ТекущиеДанные <> Неопределено Тогда @@ -3482,8 +3517,8 @@ Элементы.СтрокаПоиска.СписокВыбора.Удалить(Элементы.СтрокаПоиска.СписокВыбора.Количество() - 1); КонецЦикла; ОбщегоНазначения.ХранилищеОбщихНастроекСохранить( - "ИсторияПоискаВзаимодействия", - , + "ИсторияПоискаВзаимодействия", + "", Элементы.СтрокаПоиска.СписокВыбора.ВыгрузитьЗначения()); ОбщегоНазначенияКлиентСервер.УстановитьЭлементОтбораДинамическогоСписка( @@ -3603,16 +3638,15 @@ Продолжить; КонецЕсли; - Если НеВключатьОтборПанелиНавигации И - ТипЗнч(ЭлементОтбораИсточник) = Тип("ГруппаЭлементовОтбораКомпоновкиДанных") И - ЭлементОтбораИсточник.Представление = "ОтборПанелиНавигации" Тогда + Если НеВключатьОтборПанелиНавигации И ТипЗнч(ЭлементОтбораИсточник) = Тип("ГруппаЭлементовОтбораКомпоновкиДанных") + И ЭлементОтбораИсточник.Представление = "ОтборПанелиНавигации" Тогда Продолжить; КонецЕсли; - Если ТипЗнч(ЭлементОтбораИсточник) = Тип("ЭлементОтбораКомпоновкиДанных") И - ЭлементОтбораИсточник.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Поиск") Тогда + Если ТипЗнч(ЭлементОтбораИсточник) = Тип("ЭлементОтбораКомпоновкиДанных") + И ЭлементОтбораИсточник.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Поиск") Тогда Продолжить; КонецЕсли; @@ -3680,4 +3714,47 @@ КонецПроцедуры +&НаСервере +Процедура ПодготовитьНастройкиФормыКВыводуТекущейСсылки(ТекущаяСсылка) + ИмяТекущейПанелиНавигации = "СтраницаПредмет"; + Если ВзаимодействияКлиентСервер.ЯвляетсяПредметом(ТекущаяСсылка) Тогда + Предмет = ТекущаяСсылка; + ИначеЕсли ВзаимодействияКлиентСервер.ЯвляетсяВзаимодействием(ТекущаяСсылка) Тогда + Предмет = Взаимодействия.СтруктураРеквизитовВзаимодействия(ТекущаяСсылка).Предмет; + Иначе + Предмет = Неопределено; + КонецЕсли; + Если ЗначениеЗаполнено(Предмет) Тогда + Элементы.ПредметыПанельНавигации.ТекущаяСтрока = РегистрыСведений.СостоянияПредметовВзаимодействий.СоздатьКлючЗаписи(Новый Структура("Предмет", Предмет)); + ИзменитьОтборСписок("Предметы", Новый Структура("Значение, ОписаниеТипов", Предмет, Неопределено)); + КонецЕсли; +КонецПроцедуры + +&НаСервере +Процедура ОбработкаПереходаНаСервере(ТекущаяСсылка) + ПодготовитьНастройкиФормыКВыводуТекущейСсылки(ТекущаяСсылка); + + Если СтрокаПоиска <> "" Тогда + СтрокаПоиска = ""; + РасширенныйПоиск = Ложь; + ОбщегоНазначенияКлиентСервер.УстановитьЭлементОтбораДинамическогоСписка( + Список, + "Поиск", + Неопределено, + ВидСравненияКомпоновкиДанных.Равно,,Ложь); + ОснованиеВыбора = ""; + Элементы.ОписаниеНайденоПП.Видимость = РасширенныйПоиск; + КонецЕсли; + + ТипВзаимодействия = "Все"; + Статус = "Все"; + Ответственный = Неопределено; + ВзаимодействияКлиентСервер.БыстрыйОтборСписокПриИзменении(ЭтотОбъект,"Ответственный"); + ПриИзмененииТипаСервер(Истина); + + ПанельНавигацииСкрыта = Ложь; + Элементы.СтраницыПанелиНавигации.ТекущаяСтраница = Элементы[ИмяТекущейПанелиНавигации]; + УправлениеВидимостьюПриПереключенииПанелиНавигации(); +КонецПроцедуры + #КонецОбласти diff --git a/SSL/src/DocumentJournals/Взаимодействия/Forms/ФормаСпискаПараметрическая/Form.form b/SSL/src/DocumentJournals/Взаимодействия/Forms/ФормаСпискаПараметрическая/Form.form index 3e728acb9..e5448d8ec 100644 --- a/SSL/src/DocumentJournals/Взаимодействия/Forms/ФормаСпискаПараметрическая/Form.form +++ b/SSL/src/DocumentJournals/Взаимодействия/Forms/ФормаСпискаПараметрическая/Form.form @@ -2858,7 +2858,6 @@ true true true - UseIfNecessary auto true @@ -2873,12 +2872,6 @@ true - - Список.Отработано - - - Список.ОтработатьПосле - Список.Date @@ -3422,7 +3415,7 @@ FunctionalOption.ИспользоватьПризнакРассмотрено Picture - Auto + DontUse Auto @@ -3447,7 +3440,7 @@ ОтветственныйВыполнить - Auto + DontUse Auto @@ -3472,7 +3465,7 @@ ПредметВыполнить - Auto + DontUse Auto @@ -3498,7 +3491,7 @@ FunctionalOption.ИспользоватьПризнакРассмотрено - Auto + DontUse Auto @@ -3521,7 +3514,7 @@ FunctionalOption.ИспользоватьПрочиеВзаимодействия - Auto + DontUse Auto @@ -3544,7 +3537,7 @@ FunctionalOption.ИспользоватьПрочиеВзаимодействия - Auto + DontUse Auto @@ -3567,7 +3560,7 @@ FunctionalOption.ИспользоватьПрочиеВзаимодействия - Auto + DontUse Auto @@ -3589,7 +3582,7 @@ СоздатьЭлектронноеПисьмо - Auto + DontUse Auto @@ -3614,7 +3607,7 @@ ПереключитьРежимПросмотра - Auto + DontUse Auto @@ -3637,7 +3630,7 @@ ОбновитьДерево - Auto + DontUse Auto @@ -3662,7 +3655,7 @@ УстановитьИнтервал - Auto + DontUse Auto @@ -3688,7 +3681,7 @@ FunctionalOption.ИспользоватьПризнакРассмотрено - Auto + DontUse Auto @@ -3711,7 +3704,7 @@ FunctionalOption.ИспользоватьПрочиеВзаимодействия - Auto + DontUse Auto diff --git a/SSL/src/DocumentJournals/Взаимодействия/Forms/ФормаСпискаПараметрическая/Module.bsl b/SSL/src/DocumentJournals/Взаимодействия/Forms/ФормаСпискаПараметрическая/Module.bsl index b5b66d585..5b21651e9 100644 --- a/SSL/src/DocumentJournals/Взаимодействия/Forms/ФормаСпискаПараметрическая/Module.bsl +++ b/SSL/src/DocumentJournals/Взаимодействия/Forms/ФормаСпискаПараметрическая/Module.bsl @@ -188,9 +188,11 @@ &НаКлиенте Процедура СписокПередНачаломДобавления(Элемент, Отказ, Копирование, Родитель, Группа) + ЗначенияЗаполнения = Новый Структура("Предмет,Контакт",ПредметДляОтбора,Контакт); + ВзаимодействияКлиент.СписокПередНачаломДобавления( Элемент,Отказ,Копирование,ТолькоПочта,ДокументыДоступныеДляСоздания, - Новый Структура("ЗначенияЗаполнения",Новый Структура("Предмет,Контакт",ПредметДляОтбора,Контакт))); + Новый Структура("ЗначенияЗаполнения", ЗначенияЗаполнения)); КонецПроцедуры @@ -253,8 +255,8 @@ Если Копирование Тогда ТекущиеДанные = Элемент.ТекущиеДанные; Если ТекущиеДанные <> Неопределено Тогда - Если ТипЗнч(ТекущиеДанные.Ссылка) = Тип("ДокументСсылка.ЭлектронноеПисьмоВходящее") ИЛИ - ТипЗнч(ТекущиеДанные.Ссылка) = Тип("ДокументСсылка.ЭлектронноеПисьмоИсходящее") Тогда + Если ТипЗнч(ТекущиеДанные.Ссылка) = Тип("ДокументСсылка.ЭлектронноеПисьмоВходящее") + ИЛИ ТипЗнч(ТекущиеДанные.Ссылка) = Тип("ДокументСсылка.ЭлектронноеПисьмоИсходящее") Тогда ПоказатьПредупреждение(, НСтр("ru = 'Копирование электронных писем запрещено'")); @@ -429,9 +431,11 @@ &НаКлиенте Процедура СоздатьНовоеВзаимодействие(ТипОбъекта) + ЗначенияЗаполнения = Новый Структура("Предмет,Контакт",ПредметДляОтбора,Контакт); + ВзаимодействияКлиент.СоздатьНовоеВзаимодействие( ТипОбъекта, - Новый Структура("ЗначенияЗаполнения",Новый Структура("Предмет,Контакт",ПредметДляОтбора,Контакт)), + Новый Структура("ЗначенияЗаполнения", ЗначенияЗаполнения), ЭтотОбъект); КонецПроцедуры @@ -1012,7 +1016,7 @@ |ИЗ | Справочник." + Лев(Связь,Найти(Связь,".")-1) + " КАК Таблица |ГДЕ - | Таблица." + Прав(Связь,СтрДлина(Связь) - Найти(Связь,".")) + " = &Контакт"; + | Таблица." + Прав(Связь,СтрДлина(Связь) - СтрНайти(Связь,".")) + " = &Контакт"; ЕстьДополнительныеТаблицы = Истина; diff --git a/SSL/src/DocumentJournals/СогласияНаОбработкуПерсональныхДанных/Forms/ФормаСписка/Attributes/Список/ExtInfo/ListSettings.dcss b/SSL/src/DocumentJournals/СогласияНаОбработкуПерсональныхДанных/Forms/ФормаСписка/Attributes/Список/ExtInfo/ListSettings.dcss new file mode 100644 index 000000000..61e6fb4bb --- /dev/null +++ b/SSL/src/DocumentJournals/СогласияНаОбработкуПерсональныхДанных/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/DocumentJournals/СогласияНаОбработкуПерсональныхДанных/Forms/ФормаСписка/Form.form b/SSL/src/DocumentJournals/СогласияНаОбработкуПерсональныхДанных/Forms/ФормаСписка/Form.form new file mode 100644 index 000000000..485d23cef --- /dev/null +++ b/SSL/src/DocumentJournals/СогласияНаОбработкуПерсональныхДанных/Forms/ФормаСписка/Form.form @@ -0,0 +1,624 @@ + + + + СписокКомпоновщикНастроекПользовательскиеНастройки + 1 + true + true + + true + + + <key>ru</key> + <value>Группа пользовательских настроек</value> + + false + + СписокКомпоновщикНастроекПользовательскиеНастройкиРасширеннаяПодсказка + 2 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + WeakSeparation + true + true + Auto + Auto + + + + Список + 3 + true + true + + true + + + Список + + true + None + + Дата + 16 + true + true + + true + + + Список.Date + + + ДатаРасширеннаяПодсказка + 18 + Label + true + true + + Left + + + + ДатаКонтекстноеМеню + 17 + true + + LabelField + Enter + true + Left + true + + true + true + + + + Номер + 19 + true + true + + true + + + Список.Number + + + НомерРасширеннаяПодсказка + 21 + Label + true + true + + Left + + + + НомерКонтекстноеМеню + 20 + true + + LabelField + Enter + true + Left + true + + true + true + + + + Тип + 22 + true + true + + true + + + Список.Type + + true + + ТипРасширеннаяПодсказка + 24 + Label + true + true + + Left + + + + ТипКонтекстноеМеню + 23 + true + + LabelField + Enter + true + Left + true + + true + true + + + + Организация + 25 + true + true + + true + + + Список.Организация + + + ОрганизацияРасширеннаяПодсказка + 27 + Label + true + true + + Left + + + + ОрганизацияКонтекстноеМеню + 26 + true + + LabelField + Enter + true + Left + true + + true + true + + + + Субъект + 28 + true + true + + true + + + Список.Субъект + + + СубъектРасширеннаяПодсказка + 30 + Label + true + true + + Left + + + + СубъектКонтекстноеМеню + 29 + true + + LabelField + Enter + true + Left + true + + true + true + + + + ДатаРегистрации + 31 + true + true + + true + + + Список.ДатаРегистрации + + + ДатаРегистрацииРасширеннаяПодсказка + 33 + Label + true + true + + Left + + + + ДатаРегистрацииКонтекстноеМеню + 32 + true + + LabelField + Enter + true + Left + true + + true + true + + + + СрокДействия + 34 + true + true + + true + + + Список.СрокДействия + + + СрокДействияРасширеннаяПодсказка + 36 + Label + true + true + + Left + + + + СрокДействияКонтекстноеМеню + 35 + true + + LabelField + Enter + true + Left + true + + true + true + + + + ОтветственныйЗаОбработкуПерсональныхДанных + 45 + true + true + + true + + + Список.ОтветственныйЗаОбработкуПерсональныхДанных + + + ОтветственныйЗаОбработкуПерсональныхДанныхРасширеннаяПодсказка + 47 + Label + true + true + + Left + + + + ОтветственныйЗаОбработкуПерсональныхДанныхКонтекстноеМеню + 46 + true + + LabelField + Enter + true + Left + true + + true + true + + + + Ответственный + 37 + true + true + + true + + + Список.Ответственный + + + ОтветственныйРасширеннаяПодсказка + 39 + Label + true + true + + Left + + + + ОтветственныйКонтекстноеМеню + 38 + true + + LabelField + Enter + true + Left + true + + true + true + + + + Комментарий + 40 + true + true + + true + + + Список.Комментарий + + + КомментарийРасширеннаяПодсказка + 42 + Label + true + true + + Left + + + + КомментарийКонтекстноеМеню + 41 + true + + LabelField + Enter + true + Left + true + + true + true + + + None + + СписокКоманднаяПанель + 5 + Left + + + СписокСтрокаПоиска + 7 + + СписокСтрокаПоискаРасширеннаяПодсказка + 9 + Label + true + true + + Left + + + + СписокСтрокаПоискаКонтекстноеМеню + 8 + true + + Список + + true + + + + СписокСостояниеПросмотра + 10 + + СписокСостояниеПросмотраРасширеннаяПодсказка + 12 + Label + true + true + + Left + + + + СписокСостояниеПросмотраКонтекстноеМеню + 11 + true + + ViewStatusAddition + Список + + true + + + + СписокУправлениеПоиском + 13 + + СписокУправлениеПоискомРасширеннаяПодсказка + 15 + Label + true + true + + Left + + + + СписокУправлениеПоискомКонтекстноеМеню + 14 + true + + SearchControlAddition + Список + + true + + + + СписокРасширеннаяПодсказка + 6 + Label + true + true + + Left + + + + СписокКонтекстноеМеню + 4 + true + + true + true + true + true + true + MultiRow +
        true
        + 1 + 1 + AutoUse + AutoUse + true + true + Auto + Auto + ExpandTopLevel + true + true + true + + Список.DefaultPicture + + None + None + true + + 60 + + 0001-01-01T00:00:00 + 0001-01-01T00:00:00 + + + true + true + СписокКомпоновщикНастроекПользовательскиеНастройки + +
        + + ФормаКоманднаяПанель + -1 + + Печать + 43 + true + true + + true + + + <key>ru</key> + <value>Печать</value> + + + ru + Печать + + + ПечатьExtendedTooltip + 44 + Label + true + true + + Left + + + Popup + + + StdPicture.Print + + Auto + Normal + + + Left + true + + + OnCreateAtServer + ПриСозданииНаСервере + + DontBlock + true + true + true + Vertical + true + true + true + auto + true + + Список + 1 + + DynamicList + + + true + + + true + + + Список.Ref + +
        true
        + + DocumentJournal.СогласияНаОбработкуПерсональныхДанных + true + true + true + true + +
        + + + + + +
        diff --git a/SSL/src/DocumentJournals/СогласияНаОбработкуПерсональныхДанных/Forms/ФормаСписка/Module.bsl b/SSL/src/DocumentJournals/СогласияНаОбработкуПерсональныхДанных/Forms/ФормаСписка/Module.bsl new file mode 100644 index 000000000..9b62e54a2 --- /dev/null +++ b/SSL/src/DocumentJournals/СогласияНаОбработкуПерсональныхДанных/Forms/ФормаСписка/Module.bsl @@ -0,0 +1,30 @@ + +#Область ОбработчикиСобытийФормы + +&НаСервере +Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) + + Если Параметры.Свойство("АвтоТест") Тогда // Возврат при получении формы для анализа. + Возврат; + КонецЕсли; + + // СтандартныеПодсистемы.Печать + УправлениеПечатью.ПриСозданииНаСервере(ЭтотОбъект, Элементы.ФормаКоманднаяПанель); + // Конец СтандартныеПодсистемы.Печать + +КонецПроцедуры + +#КонецОбласти + +#Область ОбработчикиКомандФормы + +// СтандартныеПодсистемы.Печать +&НаКлиенте +Процедура Подключаемый_ВыполнитьКомандуПечати(Команда) + + УправлениеПечатьюКлиент.ВыполнитьПодключаемуюКомандуПечати(Команда, ЭтотОбъект, Элементы.Список); + +КонецПроцедуры +// Конец СтандартныеПодсистемы.Печать + +#КонецОбласти diff --git a/SSL/src/DocumentJournals/СогласияНаОбработкуПерсональныхДанных/Help/ru.html b/SSL/src/DocumentJournals/СогласияНаОбработкуПерсональныхДанных/Help/ru.html new file mode 100644 index 000000000..cc55f877f --- /dev/null +++ b/SSL/src/DocumentJournals/СогласияНаОбработкуПерсональныхДанных/Help/ru.html @@ -0,0 +1,18 @@ + +

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

        +

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

        +

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

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

        Печать

        +

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

        +
        • в виде табличных документов формата MXL (для печати в этом формате не требуется специальных программ); +
        • в виде офисных документов в форматах Microsoft Word OpenOffice.org, для этого требуются соответствующие программы, установленные на компьютере.

        Проведение документов

        +

        С помощью соответствующих команд меню Еще можно:

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

        См. также:

        + \ No newline at end of file diff --git a/SSL/src/DocumentJournals/СогласияНаОбработкуПерсональныхДанных/СогласияНаОбработкуПерсональныхДанных.mdo b/SSL/src/DocumentJournals/СогласияНаОбработкуПерсональныхДанных/СогласияНаОбработкуПерсональныхДанных.mdo new file mode 100644 index 000000000..0aa36b958 --- /dev/null +++ b/SSL/src/DocumentJournals/СогласияНаОбработкуПерсональныхДанных/СогласияНаОбработкуПерсональныхДанных.mdo @@ -0,0 +1,149 @@ + + + + + + + + СогласияНаОбработкуПерсональныхДанных + + ru + Согласия на обработку персональных данных + + DocumentJournal.СогласияНаОбработкуПерсональныхДанных.Form.ФормаСписка + true + Document.ОтзывСогласияНаОбработкуПерсональныхДанных + Document.СогласиеНаОбработкуПерсональныхДанных + + + ru + + + + Use + Type + + Use + + + + + Use + Ref + + Use + + + + + Use + Date + + Use + + + + + Use + Posted + + Use + + + + + Use + DeletionMark + + Use + + + + + Use + Number + + Use + + + + + ru + Согласия на обработку ПДн + + + ru + Согласия на обработку персональных данных + + + Организация + + ru + Организация + + Document.ОтзывСогласияНаОбработкуПерсональныхДанных.Attribute.Организация + Document.СогласиеНаОбработкуПерсональныхДанных.Attribute.Организация + + + ОтветственныйЗаОбработкуПерсональныхДанных + + ru + Ответственный за обработку ПДн + + Document.ОтзывСогласияНаОбработкуПерсональныхДанных.Attribute.ОтветственныйЗаОбработкуПерсональныхДанных + Document.СогласиеНаОбработкуПерсональныхДанных.Attribute.ОтветственныйЗаОбработкуПерсональныхДанных + + + Субъект + + ru + Субъект + + Document.ОтзывСогласияНаОбработкуПерсональныхДанных.Attribute.Субъект + Document.СогласиеНаОбработкуПерсональныхДанных.Attribute.Субъект + + + ДатаРегистрации + + ru + Дата регистрации + + Document.ОтзывСогласияНаОбработкуПерсональныхДанных.Attribute.ДатаОтзыва + Document.СогласиеНаОбработкуПерсональныхДанных.Attribute.ДатаПолучения + + + СрокДействия + + ru + Срок действия + + Document.СогласиеНаОбработкуПерсональныхДанных.Attribute.СрокДействия + + + Ответственный + + ru + Ответственный + + Document.ОтзывСогласияНаОбработкуПерсональныхДанных.Attribute.Ответственный + Document.СогласиеНаОбработкуПерсональныхДанных.Attribute.Ответственный + + + Комментарий + + ru + Комментарий + + Document.ОтзывСогласияНаОбработкуПерсональныхДанных.Attribute.Комментарий + Document.СогласиеНаОбработкуПерсональныхДанных.Attribute.Комментарий + + + ФормаСписка + + ru + Форма списка + + PersonalComputer + MobileDevice + + diff --git a/SSL/src/Documents/Анкета/Forms/ФормаДокумента/Form.form b/SSL/src/Documents/Анкета/Forms/ФормаДокумента/Form.form index dccc7f265..9b1b3adfb 100644 --- a/SSL/src/Documents/Анкета/Forms/ФормаДокумента/Form.form +++ b/SSL/src/Documents/Анкета/Forms/ФормаДокумента/Form.form @@ -1721,7 +1721,6 @@ true true true - UseIfNecessary auto true @@ -2896,6 +2895,23 @@ true + + ЭтоСеансОбычногоПользователя + + <key>ru</key> + <value>Это сеанс обычного пользователя</value> + + 17 + + Boolean + + + true + + + true + + ФормаЗаполненияЗаписать @@ -2917,7 +2933,7 @@ </handler> </action> <modifiesStoredData>true</modifiesStoredData> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <formCommands> @@ -2939,7 +2955,7 @@ <name>ФормаЗаполненияПровестиЗакрыть</name> </handler> </action> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <formCommands> @@ -2957,7 +2973,7 @@ <name>СкрытьПоказатьДеревоРазделов</name> </handler> </action> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <formCommands> @@ -2979,7 +2995,7 @@ <name>СледующийРаздел</name> </handler> </action> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <formCommands> @@ -3001,7 +3017,7 @@ <name>ПредыдущийРаздел</name> </handler> </action> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <formCommands> @@ -3023,7 +3039,7 @@ <name>ВыборРаздела</name> </handler> </action> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <commandInterface> diff --git a/SSL/src/Documents/Анкета/Forms/ФормаДокумента/Module.bsl b/SSL/src/Documents/Анкета/Forms/ФормаДокумента/Module.bsl index 62bbd9d02..bf65d62de 100644 --- a/SSL/src/Documents/Анкета/Forms/ФормаДокумента/Module.bsl +++ b/SSL/src/Documents/Анкета/Forms/ФормаДокумента/Module.bsl @@ -15,6 +15,8 @@ Отказ = Истина; КонецЕсли; КонецЕсли; + Иначе + ЭтоСеансОбычногоПользователя = Истина; КонецЕсли; ПозиционированиеНаРазделе = Ложь; @@ -1282,7 +1284,7 @@ Процедура ОкончаниеПостроенияФормыЗаполнения() ПостроениеФормыСогласноРаздела(); - УправлениеДоступностьюПодчиненныеВопросы(ПредыдущийРазделБезВопросов = Ложь); + УправлениеДоступностьюПодчиненныеВопросы(ПредыдущийРазделБезВопросов = Ложь И Не ЭтоСеансОбычногоПользователя); УправлениеДоступностьюКнопкиНавигацияРазделов(); ЭлементДляПозиционирования = Элементы.Найти(ИмяЭлементаДляПозиционирования); diff --git a/SSL/src/Documents/Анкета/Forms/ФормаСписка/Form.form b/SSL/src/Documents/Анкета/Forms/ФормаСписка/Form.form index 2d1d54261..4250719fa 100644 --- a/SSL/src/Documents/Анкета/Forms/ФормаСписка/Form.form +++ b/SSL/src/Documents/Анкета/Forms/ФормаСписка/Form.form @@ -426,7 +426,6 @@ <autoFillCheck>true</autoFillCheck> <allowFormCustomize>true</allowFormCustomize> <enabled>true</enabled> - <verticalScroll>UseIfNecessary</verticalScroll> <showTitle>auto</showTitle> <showCloseButton>true</showCloseButton> <attributes> diff --git a/SSL/src/Documents/Анкета/Анкета.mdo b/SSL/src/Documents/Анкета/Анкета.mdo index 9f030ebeb..a0608408a 100644 --- a/SSL/src/Documents/Анкета/Анкета.mdo +++ b/SSL/src/Documents/Анкета/Анкета.mdo @@ -186,7 +186,7 @@ <name>ФормаДокумента</name> <synonym> <key>ru</key> - <value>Анкета</value> + <value>Форма документа</value> </synonym> <help> <pages> diff --git a/SSL/src/Documents/Встреча/Forms/ФормаВыбора/Form.form b/SSL/src/Documents/Встреча/Forms/ФормаВыбора/Form.form index 458217c75..e5564661d 100644 --- a/SSL/src/Documents/Встреча/Forms/ФормаВыбора/Form.form +++ b/SSL/src/Documents/Встреча/Forms/ФормаВыбора/Form.form @@ -408,7 +408,6 @@ <autoFillCheck>true</autoFillCheck> <allowFormCustomize>true</allowFormCustomize> <enabled>true</enabled> - <verticalScroll>UseIfNecessary</verticalScroll> <showTitle>auto</showTitle> <showCloseButton>true</showCloseButton> <attributes> @@ -425,9 +424,34 @@ </edit> <main>true</main> <extInfo xsi:type="form:DynamicListExtInfo"> + <queryText>ВЫБРАТЬ + ДокументВстреча.Ссылка, + ДокументВстреча.ПометкаУдаления, + ДокументВстреча.Номер, + ДокументВстреча.Дата, + ДокументВстреча.Проведен, + ДокументВстреча.Автор, + ДокументВстреча.Важность, + ДокументВстреча.ДатаНачала, + ДокументВстреча.ДатаОкончания, + ДокументВстреча.МестоПроведенияВстречи, + ДокументВстреча.Описание, + ДокументВстреча.Ответственный, + ДокументВстреча.СписокУчастников, + ДокументВстреча.ВзаимодействиеОснование, + ДокументВстреча.Тема, + ДокументВстреча.Комментарий, + ПредметыПапкиВзаимодействий.Предмет, + ПредметыПапкиВзаимодействий.Рассмотрено, + ПредметыПапкиВзаимодействий.РассмотретьПосле +ИЗ + Документ.Встреча КАК ДокументВстреча + ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ПредметыПапкиВзаимодействий КАК ПредметыПапкиВзаимодействий + ПО ПредметыПапкиВзаимодействий.Взаимодействие = ДокументВстреча.Ссылка</queryText> <mainTable>Document.Встреча</mainTable> <dynamicDataRead>true</dynamicDataRead> <autoFillAvailableFields>true</autoFillAvailableFields> + <customQuery>true</customQuery> <autoSaveUserSettings>true</autoSaveUserSettings> <getInvisibleFieldPresentations>true</getInvisibleFieldPresentations> </extInfo> diff --git a/SSL/src/Documents/Встреча/Forms/ФормаДокумента/Form.form b/SSL/src/Documents/Встреча/Forms/ФормаДокумента/Form.form index d43b7d491..a1ca6fb65 100644 --- a/SSL/src/Documents/Встреча/Forms/ФормаДокумента/Form.form +++ b/SSL/src/Documents/Встреча/Forms/ФормаДокумента/Form.form @@ -965,6 +965,10 @@ </extendedTooltip> <type>Pages</type> <extInfo xsi:type="form:PagesGroupExtInfo"> + <handlers> + <event>OnCurrentPageChange</event> + <name>СтраницыОписаниеУчастникиДополнительноПриСменеСтраницы</name> + </handlers> <pagesRepresentation>TabsOnTop</pagesRepresentation> <currentRowUse>Auto</currentRowUse> </extInfo> @@ -1041,7 +1045,8 @@ <width>25</width> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> - <clearButton>false</clearButton> + <dropListButton>false</dropListButton> + <clearButton>true</clearButton> <openButton>true</openButton> <chooseType>true</chooseType> <typeDomainEnabled>true</typeDomainEnabled> @@ -1576,6 +1581,67 @@ <autoCommandBar> <name>ФормаКоманднаяПанель</name> <id>-1</id> + <items xsi:type="form:Button"> + <name>ФормаПоказатьВСписке</name> + <id>172</id> + <enabled>true</enabled> + <userVisible> + <common>true</common> + </userVisible> + <extendedTooltip> + <name>ФормаПоказатьВСпискеРасширеннаяПодсказка</name> + <id>173</id> + <type>Label</type> + <autoMaxWidth>true</autoMaxWidth> + <autoMaxHeight>true</autoMaxHeight> + <extInfo xsi:type="form:LabelDecorationExtInfo"> + <horizontalAlign>Left</horizontalAlign> + </extInfo> + </extendedTooltip> + <commandName>Form.StandardCommand.ShowInList</commandName> + <parameter xsi:type="core:ReferenceValue"> + <value>Document.Встреча</value> + </parameter> + <buttonImportance>Normal</buttonImportance> + <representation>Auto</representation> + <autoMaxWidth>true</autoMaxWidth> + <autoMaxHeight>true</autoMaxHeight> + <placementArea>UserCmds</placementArea> + <representationInContextMenu>Auto</representationInContextMenu> + </items> + <items xsi:type="form:Button"> + <name>ФормаПоказатьВЖурнале</name> + <id>174</id> + <title> + <key>ru</key> + <value>Показать в списке</value> + + true + true + + true + + + ФормаПоказатьВЖурналеРасширеннаяПодсказка + 175 + Label + true + true + + Left + + + Form.StandardCommand.ShowInList + + DocumentJournal.Взаимодействия + + Normal + Auto + true + true + UserCmds + Auto + Left true @@ -1603,7 +1669,6 @@ true true true - UseIfNecessary auto true @@ -1880,7 +1945,7 @@ Text - Auto + DontUse Auto diff --git a/SSL/src/Documents/Встреча/Forms/ФормаДокумента/Module.bsl b/SSL/src/Documents/Встреча/Forms/ФормаДокумента/Module.bsl index 7651d3c9a..af3ed5e66 100644 --- a/SSL/src/Documents/Встреча/Forms/ФормаДокумента/Module.bsl +++ b/SSL/src/Documents/Встреча/Forms/ФормаДокумента/Module.bsl @@ -23,6 +23,7 @@ // СтандартныеПодсистемы.Свойства ДополнительныеПараметры = Новый Структура; ДополнительныеПараметры.Вставить("ИмяЭлементаДляРазмещения", "СтраницаДополнительныеРеквизиты"); + ДополнительныеПараметры.Вставить("ОтложеннаяИнициализация", Истина); УправлениеСвойствами.ПриСозданииНаСервере(ЭтотОбъект, ДополнительныеПараметры); // Конец СтандартныеПодсистемы.Свойства @@ -52,6 +53,10 @@ &НаКлиенте Процедура ПриОткрытии(Отказ) + // СтандартныеПодсистемы.Свойства + УправлениеСвойствамиКлиент.ПослеЗагрузкиДополнительныхРеквизитов(ЭтотОбъект); + // Конец СтандартныеПодсистемы.Свойства + ОбновитьОтображениеДанных(); ПроверитьДоступностьСозданияКонтакта(); @@ -63,6 +68,7 @@ // СтандартныеПодсистемы.Свойства Если УправлениеСвойствамиКлиент.ОбрабатыватьОповещения(ЭтотОбъект, ИмяСобытия, Параметр) Тогда ОбновитьЭлементыДополнительныхРеквизитов(); + УправлениеСвойствамиКлиент.ПослеЗагрузкиДополнительныхРеквизитов(ЭтотОбъект); КонецЕсли; // Конец СтандартныеПодсистемы.Свойства @@ -101,7 +107,7 @@ &НаСервере Процедура ПослеЗаписиНаСервере(ТекущийОбъект, ПараметрыЗаписи) - Элементы.СтраницаКомментарий.Картинка = ОбщегоНазначения.ПолучитьКартинкуКомментария(Объект.Комментарий); + Элементы.СтраницаКомментарий.Картинка = ОбщегоНазначенияКлиентСервер.КартинкаКомментария(Объект.Комментарий); КонецПроцедуры @@ -118,6 +124,20 @@ #Область ОбработчикиСобытийЭлементовШапкиФормы +&НаКлиенте +Процедура СтраницыОписаниеУчастникиДополнительноПриСменеСтраницы(Элемент, ТекущаяСтраница) + + // СтандартныеПодсистемы.Свойства + Если ТекущаяСтраница.Имя = "СтраницаДополнительныеРеквизиты" + И Не ЭтотОбъект.ПараметрыСвойств.ВыполненаОтложеннаяИнициализация Тогда + + СвойстваВыполнитьОтложеннуюИнициализацию(); + УправлениеСвойствамиКлиент.ПослеЗагрузкиДополнительныхРеквизитов(ЭтотОбъект); + КонецЕсли; + // Конец СтандартныеПодсистемы.Свойства + +КонецПроцедуры + &НаКлиенте Процедура РассмотретьПослеОбработкаВыбора(Элемент, ВыбранноеЗначение, СтандартнаяОбработка) @@ -274,9 +294,10 @@ &НаКлиенте Процедура ПроверитьДоступностьСозданияКонтакта() - текДанные = Элементы.Участники.ТекущиеДанные; - Элементы.СоздатьКонтакт.Доступность = (Не Объект.Ссылка.Пустая()) И - ((текДанные <> Неопределено) И (НЕ ЗначениеЗаполнено(текДанные.Контакт))); + ТекДанные = Элементы.Участники.ТекущиеДанные; + Элементы.СоздатьКонтакт.Доступность = (Не Объект.Ссылка.Пустая()) + И ((ТекДанные <> Неопределено) + И (НЕ ЗначениеЗаполнено(ТекДанные.Контакт))); КонецПроцедуры @@ -304,12 +325,27 @@ ВзаимодействияКлиентСервер.ПроверитьЗаполнениеКонтактов(Объект, ЭтотОбъект, "Встреча"); Элементы.РассмотретьПосле.Доступность = НЕ Рассмотрено; - Элементы.СтраницаКомментарий.Картинка = ОбщегоНазначения.ПолучитьКартинкуКомментария(Объект.Комментарий); + Элементы.СтраницаКомментарий.Картинка = ОбщегоНазначенияКлиентСервер.КартинкаКомментария(Объект.Комментарий); КонецПроцедуры // СтандартныеПодсистемы.Свойства +&НаСервере +Процедура СвойстваВыполнитьОтложеннуюИнициализацию() + УправлениеСвойствами.ЗаполнитьДополнительныеРеквизитыВФорме(ЭтотОбъект); +КонецПроцедуры + +&НаКлиенте +Процедура ОбновитьЗависимостиДополнительныхРеквизитов() + УправлениеСвойствамиКлиент.ОбновитьЗависимостиДополнительныхРеквизитов(ЭтотОбъект); +КонецПроцедуры + +&НаКлиенте +Процедура Подключаемый_ПриИзмененииДополнительногоРеквизита(Элемент) + УправлениеСвойствамиКлиент.ОбновитьЗависимостиДополнительныхРеквизитов(ЭтотОбъект); +КонецПроцедуры + &НаСервере Процедура ОбновитьЭлементыДополнительныхРеквизитов() diff --git a/SSL/src/Documents/Встреча/ObjectModule.bsl b/SSL/src/Documents/Встреча/ObjectModule.bsl index 033af77d1..430312098 100644 --- a/SSL/src/Documents/Встреча/ObjectModule.bsl +++ b/SSL/src/Documents/Встреча/ObjectModule.bsl @@ -15,9 +15,7 @@ Процедура ОбработкаЗаполнения(ДанныеЗаполнения, СтандартнаяОбработка) - ДатаНачала = ТекущаяДатаСеанса(); - ДатаНачала = НачалоЧаса(ДатаНачала) + ?(Минута(ДатаНачала) < 30, 1800, 3600); - ДатаОкончания = ДатаНачала + 1800; + УстановитьДатыПоУмолчанию(); Взаимодействия.ЗаполнитьРеквизитыПоУмолчанию(ЭтотОбъект, ДанныеЗаполнения); КонецПроцедуры @@ -34,8 +32,7 @@ Процедура ПриКопировании(ОбъектКопирования) - ДатаНачала = ТекущаяДатаСеанса(); - ДатаОкончания = Неопределено; + УстановитьДатыПоУмолчанию(); Ответственный = Пользователи.ТекущийПользователь(); Автор = Пользователи.ТекущийПользователь(); @@ -70,6 +67,15 @@ #Область СлужебныеПроцедурыИФункции +Процедура УстановитьДатыПоУмолчанию() + + ДатаНачала = ТекущаяДатаСеанса(); + ДатаНачала = НачалоЧаса(ДатаНачала) + ?(Минута(ДатаНачала) < 30, 1800, 3600); + ДатаОкончания = ДатаНачала + 1800; + +КонецПроцедуры + + #КонецОбласти diff --git a/SSL/src/Documents/ЗапланированноеВзаимодействие/Forms/ФормаВыбора/Form.form b/SSL/src/Documents/ЗапланированноеВзаимодействие/Forms/ФормаВыбора/Form.form index c883d69a4..33ee1e208 100644 --- a/SSL/src/Documents/ЗапланированноеВзаимодействие/Forms/ФормаВыбора/Form.form +++ b/SSL/src/Documents/ЗапланированноеВзаимодействие/Forms/ФормаВыбора/Form.form @@ -409,7 +409,6 @@ true true true - UseIfNecessary auto true @@ -426,9 +425,31 @@
        true
        + ВЫБРАТЬ + ДокументЗапланированноеВзаимодействие.Ссылка, + ДокументЗапланированноеВзаимодействие.ПометкаУдаления, + ДокументЗапланированноеВзаимодействие.Номер, + ДокументЗапланированноеВзаимодействие.Дата, + ДокументЗапланированноеВзаимодействие.Проведен, + ДокументЗапланированноеВзаимодействие.Автор, + ДокументЗапланированноеВзаимодействие.Важность, + ДокументЗапланированноеВзаимодействие.Описание, + ДокументЗапланированноеВзаимодействие.Ответственный, + ДокументЗапланированноеВзаимодействие.СписокУчастников, + ДокументЗапланированноеВзаимодействие.ВзаимодействиеОснование, + ДокументЗапланированноеВзаимодействие.Тема, + ДокументЗапланированноеВзаимодействие.Комментарий, + ПредметыПапкиВзаимодействий.Предмет КАК Предмет, + ПредметыПапкиВзаимодействий.Рассмотрено, + ПредметыПапкиВзаимодействий.РассмотретьПосле +ИЗ + Документ.ЗапланированноеВзаимодействие КАК ДокументЗапланированноеВзаимодействие + ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ПредметыПапкиВзаимодействий КАК ПредметыПапкиВзаимодействий + ПО ПредметыПапкиВзаимодействий.Взаимодействие = ДокументЗапланированноеВзаимодействие.Ссылка Document.ЗапланированноеВзаимодействие true true + true true true diff --git a/SSL/src/Documents/ЗапланированноеВзаимодействие/Forms/ФормаДокумента/Form.form b/SSL/src/Documents/ЗапланированноеВзаимодействие/Forms/ФормаДокумента/Form.form index fd2fd7709..4746b72ea 100644 --- a/SSL/src/Documents/ЗапланированноеВзаимодействие/Forms/ФормаДокумента/Form.form +++ b/SSL/src/Documents/ЗапланированноеВзаимодействие/Forms/ФормаДокумента/Form.form @@ -596,6 +596,10 @@ Pages + + OnCurrentPageChange + СтраницыОписаниеДополнительноПриСменеСтраницы + TabsOnTop Auto @@ -674,6 +678,7 @@ 25 true true + false true true true @@ -1173,6 +1178,67 @@ ФормаКоманднаяПанель -1 + + ФормаПоказатьВСписке + 146 + true + + true + + + ФормаПоказатьВСпискеРасширеннаяПодсказка + 147 + Label + true + true + + Left + + + Form.StandardCommand.ShowInList + + Document.ЗапланированноеВзаимодействие + + Normal + Auto + true + true + UserCmds + Auto + + + ФормаПоказатьВЖурнале + 148 + + <key>ru</key> + <value>Показать в списке</value> + + true + true + + true + + + ФормаПоказатьВЖурналеРасширеннаяПодсказка + 149 + Label + true + true + + Left + + + Form.StandardCommand.ShowInList + + DocumentJournal.Взаимодействия + + Normal + Auto + true + true + UserCmds + Auto + Left true @@ -1200,7 +1266,6 @@ true true true - UseIfNecessary auto true @@ -1386,7 +1451,7 @@ true - Auto + DontUse Auto @@ -1403,7 +1468,7 @@ true - Auto + DontUse Auto @@ -1425,7 +1490,7 @@ СоздатьКонтактВыполнить - Auto + DontUse Auto diff --git a/SSL/src/Documents/ЗапланированноеВзаимодействие/Forms/ФормаДокумента/Module.bsl b/SSL/src/Documents/ЗапланированноеВзаимодействие/Forms/ФормаДокумента/Module.bsl index 2cfdd67dd..15a545504 100644 --- a/SSL/src/Documents/ЗапланированноеВзаимодействие/Forms/ФормаДокумента/Module.bsl +++ b/SSL/src/Documents/ЗапланированноеВзаимодействие/Forms/ФормаДокумента/Module.bsl @@ -23,6 +23,7 @@ // СтандартныеПодсистемы.Свойства ДополнительныеПараметры = Новый Структура; ДополнительныеПараметры.Вставить("ИмяЭлементаДляРазмещения", "СтраницаДополнительныеРеквизиты"); + ДополнительныеПараметры.Вставить("ОтложеннаяИнициализация", Истина); УправлениеСвойствами.ПриСозданииНаСервере(ЭтотОбъект, ДополнительныеПараметры); // Конец СтандартныеПодсистемы.Свойства @@ -49,6 +50,10 @@ &НаКлиенте Процедура ПриОткрытии(Отказ) + // СтандартныеПодсистемы.Свойства + УправлениеСвойствамиКлиент.ПослеЗагрузкиДополнительныхРеквизитов(ЭтотОбъект); + // Конец СтандартныеПодсистемы.Свойства + ПроверитьДоступностьСозданияКонтакта(); КонецПроцедуры @@ -59,6 +64,7 @@ // СтандартныеПодсистемы.Свойства Если УправлениеСвойствамиКлиент.ОбрабатыватьОповещения(ЭтотОбъект, ИмяСобытия, Параметр) Тогда ОбновитьЭлементыДополнительныхРеквизитов(); + УправлениеСвойствамиКлиент.ПослеЗагрузкиДополнительныхРеквизитов(ЭтотОбъект); КонецЕсли; // Конец СтандартныеПодсистемы.Свойства @@ -97,7 +103,7 @@ &НаСервере Процедура ПослеЗаписиНаСервере(ТекущийОбъект, ПараметрыЗаписи) - Элементы.СтраницаКомментарий.Картинка = ОбщегоНазначения.ПолучитьКартинкуКомментария(Объект.Комментарий); + Элементы.СтраницаКомментарий.Картинка = ОбщегоНазначенияКлиентСервер.КартинкаКомментария(Объект.Комментарий); КонецПроцедуры @@ -114,6 +120,20 @@ #Область ОбработчикиСобытийЭлементовШапкиФормы +&НаКлиенте +Процедура СтраницыОписаниеДополнительноПриСменеСтраницы(Элемент, ТекущаяСтраница) + + // СтандартныеПодсистемы.Свойства + Если ТекущаяСтраница.Имя = "СтраницаДополнительныеРеквизиты" + И Не ЭтотОбъект.ПараметрыСвойств.ВыполненаОтложеннаяИнициализация Тогда + + СвойстваВыполнитьОтложеннуюИнициализацию(); + УправлениеСвойствамиКлиент.ПослеЗагрузкиДополнительныхРеквизитов(ЭтотОбъект); + КонецЕсли; + // Конец СтандартныеПодсистемы.Свойства + +КонецПроцедуры + &НаКлиенте Процедура РассмотретьПослеОбработкаВыбора(Элемент, ВыбранноеЗначение, СтандартнаяОбработка) @@ -228,13 +248,28 @@ ВзаимодействияКлиентСервер.ПроверитьЗаполнениеКонтактов(Объект, ЭтотОбъект, "ЗапланированноеВзаимодействие"); Элементы.РассмотретьПосле.Доступность = НЕ Рассмотрено; - Элементы.СтраницаКомментарий.Картинка = ОбщегоНазначения.ПолучитьКартинкуКомментария(Объект.Комментарий); + Элементы.СтраницаКомментарий.Картинка = ОбщегоНазначенияКлиентСервер.КартинкаКомментария(Объект.Комментарий); КоличествоУчастников = Объект.Участники.Количество(); КонецПроцедуры // СтандартныеПодсистемы.Свойства +&НаСервере +Процедура СвойстваВыполнитьОтложеннуюИнициализацию() + УправлениеСвойствами.ЗаполнитьДополнительныеРеквизитыВФорме(ЭтотОбъект); +КонецПроцедуры + +&НаКлиенте +Процедура ОбновитьЗависимостиДополнительныхРеквизитов() + УправлениеСвойствамиКлиент.ОбновитьЗависимостиДополнительныхРеквизитов(ЭтотОбъект); +КонецПроцедуры + +&НаКлиенте +Процедура Подключаемый_ПриИзмененииДополнительногоРеквизита(Элемент) + УправлениеСвойствамиКлиент.ОбновитьЗависимостиДополнительныхРеквизитов(ЭтотОбъект); +КонецПроцедуры + &НаСервере Процедура ОбновитьЭлементыДополнительныхРеквизитов() @@ -247,9 +282,10 @@ &НаКлиенте Процедура ПроверитьДоступностьСозданияКонтакта() - текДанные = Элементы.Участники.ТекущиеДанные; - Элементы.СоздатьКонтакт.Доступность = (НЕ Объект.Ссылка.Пустая()) И - ((текДанные <> Неопределено) И (НЕ ЗначениеЗаполнено(текДанные.Контакт))); + ТекДанные = Элементы.Участники.ТекущиеДанные; + Элементы.СоздатьКонтакт.Доступность = (НЕ Объект.Ссылка.Пустая()) + И ((ТекДанные <> Неопределено) + И (НЕ ЗначениеЗаполнено(ТекДанные.Контакт))); КонецПроцедуры diff --git a/SSL/src/Documents/НазначениеОпросов/Forms/ФормаВыбора/Form.form b/SSL/src/Documents/НазначениеОпросов/Forms/ФормаВыбора/Form.form index a674d7b6d..acd322089 100644 --- a/SSL/src/Documents/НазначениеОпросов/Forms/ФормаВыбора/Form.form +++ b/SSL/src/Documents/НазначениеОпросов/Forms/ФормаВыбора/Form.form @@ -376,7 +376,6 @@ true true true - UseIfNecessary auto true diff --git a/SSL/src/Documents/НазначениеОпросов/Forms/ФормаДокумента/Form.form b/SSL/src/Documents/НазначениеОпросов/Forms/ФормаДокумента/Form.form index 7508163a9..a75d8a539 100644 --- a/SSL/src/Documents/НазначениеОпросов/Forms/ФормаДокумента/Form.form +++ b/SSL/src/Documents/НазначениеОпросов/Forms/ФормаДокумента/Form.form @@ -1349,7 +1349,6 @@ true true true - UseIfNecessary auto true @@ -1406,7 +1405,7 @@ ПодборРеспондентов - Auto + DontUse Auto diff --git a/SSL/src/Documents/НазначениеОпросов/Forms/ФормаДокумента/Module.bsl b/SSL/src/Documents/НазначениеОпросов/Forms/ФормаДокумента/Module.bsl index 0626a8481..82e2adf91 100644 --- a/SSL/src/Documents/НазначениеОпросов/Forms/ФормаДокумента/Module.bsl +++ b/SSL/src/Documents/НазначениеОпросов/Forms/ФормаДокумента/Module.bsl @@ -79,7 +79,7 @@ &НаСервере Процедура ПослеЗаписиНаСервере(ТекущийОбъект, ПараметрыЗаписи) - Элементы.СтраницаКомментарий.Картинка = ОбщегоНазначения.ПолучитьКартинкуКомментария(Объект.Комментарий); + Элементы.СтраницаКомментарий.Картинка = ОбщегоНазначенияКлиентСервер.КартинкаКомментария(Объект.Комментарий); КонецПроцедуры @@ -193,7 +193,7 @@ &НаСервере Процедура ПриСозданииЧтенииНаСервере() - Элементы.СтраницаКомментарий.Картинка = ОбщегоНазначения.ПолучитьКартинкуКомментария(Объект.Комментарий); + Элементы.СтраницаКомментарий.Картинка = ОбщегоНазначенияКлиентСервер.КартинкаКомментария(Объект.Комментарий); КонецПроцедуры diff --git a/SSL/src/Documents/НазначениеОпросов/Forms/ФормаПодбораРеспондентов/Form.form b/SSL/src/Documents/НазначениеОпросов/Forms/ФормаПодбораРеспондентов/Form.form index d75f7030e..241d198e8 100644 --- a/SSL/src/Documents/НазначениеОпросов/Forms/ФормаПодбораРеспондентов/Form.form +++ b/SSL/src/Documents/НазначениеОпросов/Forms/ФормаПодбораРеспондентов/Form.form @@ -279,7 +279,6 @@ Vertical true true - UseIfNecessary auto true @@ -298,9 +297,6 @@ true - - Респонденты.IsFolder - Респонденты.Description diff --git a/SSL/src/Documents/НазначениеОпросов/Forms/ФормаСписка/Form.form b/SSL/src/Documents/НазначениеОпросов/Forms/ФормаСписка/Form.form index 0e65e8496..36e3c54f8 100644 --- a/SSL/src/Documents/НазначениеОпросов/Forms/ФормаСписка/Form.form +++ b/SSL/src/Documents/НазначениеОпросов/Forms/ФормаСписка/Form.form @@ -556,7 +556,6 @@ true true true - UseIfNecessary auto true diff --git a/SSL/src/Documents/ОтзывСогласияНаОбработкуПерсональныхДанных/Forms/ФормаДокумента/Form.form b/SSL/src/Documents/ОтзывСогласияНаОбработкуПерсональныхДанных/Forms/ФормаДокумента/Form.form new file mode 100644 index 000000000..f88d90a44 --- /dev/null +++ b/SSL/src/Documents/ОтзывСогласияНаОбработкуПерсональныхДанных/Forms/ФормаДокумента/Form.form @@ -0,0 +1,791 @@ + + + + НомерДатаГруппа + 40 + + Номер + 1 + true + true + + true + + + Объект.Number + + + НомерРасширеннаяПодсказка + 3 + Label + true + true + + Left + + + + НомерКонтекстноеМеню + 2 + true + + InputField + Auto + true + Left + true + + true + true + true + true + true + true + Normal + + + + Дата + 4 + true + true + + true + + + Объект.Date + + + ДатаРасширеннаяПодсказка + 6 + Label + true + true + + Left + + + + ДатаКонтекстноеМеню + 5 + true + + InputField + Auto + true + Left + true + + true + true + true + true + true + true + Normal + + + true + true + + true + + + <key>ru</key> + <value>Номер и дата</value> + + false + + НомерДатаГруппаРасширеннаяПодсказка + 41 + Label + true + true + + Left + + + UsualGroup + + Auto + true + true + Auto + Auto + + + + ОператорПерсональныхДанныхГруппа + 67 + + ОрганизацияАдресГруппа + 75 + + Организация + 7 + true + true + + true + + + Объект.Организация + + + OnChange + ОрганизацияПриИзменении + + + ОрганизацияРасширеннаяПодсказка + 9 + Label + true + true + + Left + + + + ОрганизацияКонтекстноеМеню + 8 + true + + InputField + Auto + true + Left + true + + true + true + true + true + true + true + Normal + + + + ЮридическийАдресОрганизации + 10 + + <key>ru</key> + <value>Адрес</value> + + true + true + + true + + + Объект.ЮридическийАдресОрганизации + + + ЮридическийАдресОрганизацииРасширеннаяПодсказка + 12 + Label + true + true + + Left + + + + ЮридическийАдресОрганизацииКонтекстноеМеню + 11 + true + + InputField + Auto + true + Left + true + + true + true + true + true + true + true + Normal + + + true + true + + true + + + <key>ru</key> + <value>Организация и адрес</value> + + + ОрганизацияАдресГруппаРасширеннаяПодсказка + 76 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + true + true + Auto + Auto + + + + ОтветственныйЗаОбработкуПерсональныхДанных + 13 + + <key>ru</key> + <value>Ответственный за обработку ПДн</value> + + true + true + + true + + + Объект.ОтветственныйЗаОбработкуПерсональныхДанных + + + ОтветственныйЗаОбработкуПерсональныхДанныхРасширеннаяПодсказка + 15 + Label + true + true + + Left + + + + ОтветственныйЗаОбработкуПерсональныхДанныхКонтекстноеМеню + 14 + true + + InputField + Auto + true + Left + true + + true + true + true + true + true + true + Normal + + + true + true + + true + + + <key>ru</key> + <value>Оператор персональных данных</value> + + + ОператорПерсональныхДанныхГруппаРасширеннаяПодсказка + 68 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + WeakSeparation + true + true + auto + Auto + Auto + + + + СубъектГруппа + 57 + + СубъектФИОГруппа + 73 + + Субъект + 16 + true + true + + true + + + Объект.Субъект + + + OnChange + СубъектПриИзменении + + + СубъектРасширеннаяПодсказка + 18 + Label + true + true + + Left + + + + СубъектКонтекстноеМеню + 17 + true + + InputField + Auto + true + Left + true + + true + true + false + true + true + true + true + Normal + + + true + true + + true + + + <key>ru</key> + <value>Субъект и ФИО</value> + + + СубъектФИОГруппаРасширеннаяПодсказка + 74 + Label + true + true + + Left + + + UsualGroup + + Auto + true + true + Auto + Auto + + + true + true + + true + + + <key>ru</key> + <value>Субъект персональных данных</value> + + 35 + + СубъектГруппаРасширеннаяПодсказка + 58 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + WeakSeparation + true + true + auto + Auto + Auto + + + + СведенияОСогласииГруппа + 77 + + СведенияКартинка + 85 + + <key>ru</key> + <value>Сведения картинка</value> + + true + true + + true + + + СведенияКартинкаРасширеннаяПодсказка + 87 + Label + true + true + + Left + + + + СведенияКартинкаКонтекстноеМеню + 86 + true + + 3 + true + 2 + true + + + CommonPicture.Информация32 + + + + + СведенияТекст + 82 + + <key>ru</key> + <value>Не обнаружено действующего согласия на обработку персональных данных субъекта</value> + + true + true + + true + + + СведенияТекстРасширеннаяПодсказка + 84 + Label + true + true + + Left + + + + СведенияТекстКонтекстноеМеню + 83 + true + + true + Label + true + 2 + true + + Style.ПоясняющийТекст + + + Left + + + true + true + + true + + + <key>ru</key> + <value>Сведения о согласии</value> + + + СведенияОСогласииГруппаРасширеннаяПодсказка + 78 + Label + true + true + + Left + + + UsualGroup + + Collapsible + true + true + Auto + Auto + + + + ДатаОтзываГруппа + 71 + + ДатаОтзыва + 28 + + <key>ru</key> + <value>Согласие отзывается</value> + + true + true + + true + + + Объект.ДатаОтзыва + + Button + + OnChange + ДатаОтзываПриИзменении + + + ДатаОтзываРасширеннаяПодсказка + 30 + Label + true + true + + Left + + + + ДатаОтзываКонтекстноеМеню + 29 + true + + InputField + Auto + true + Left + true + + true + true + true + true + true + true + Normal + + + true + true + + true + + + <key>ru</key> + <value>Дата отзыва</value> + + + ru + Дата отзыва группа + + + ДатаОтзываГруппаРасширеннаяПодсказка + 72 + Label + true + true + + Left + + + UsualGroup + + Auto + NormalSeparation + true + true + Auto + Auto + + + + ОтветственныйКомментарийГруппа + 69 + + Комментарий + 37 + true + true + + true + + + Объект.Комментарий + + + КомментарийРасширеннаяПодсказка + 39 + Label + true + true + + Left + + + + КомментарийКонтекстноеМеню + 38 + true + + InputField + Auto + true + Left + true + + + StartChoice + КомментарийНачалоВыбора + + true + true + true + true + true + true + true + Normal + + + + Ответственный + 34 + true + true + + true + + + Объект.Ответственный + + + ОтветственныйРасширеннаяПодсказка + 36 + Label + true + true + + Left + + + + ОтветственныйКонтекстноеМеню + 35 + true + + InputField + Auto + true + Left + true + + true + true + true + true + true + true + Normal + + + true + true + + true + + + <key>ru</key> + <value>Ответственный и комментарий</value> + + + ОтветственныйКомментарийГруппаРасширеннаяПодсказка + 70 + Label + true + true + + Left + + + UsualGroup + + Auto + true + true + LeftWide + Auto + Auto + + + + ФормаКоманднаяПанель + -1 + Left + true + + + OnCreateAtServer + ПриСозданииНаСервере + + DontBlock + true + true + true + Vertical + true + true + true + auto + true + + Объект + 1 + + DocumentObject.ОтзывСогласияНаОбработкуПерсональныхДанных + + + true + + + true + + + Объект.RegisterRecords + +
        true
        + true +
        + + + + + + + OnReadAtServer + ПриЧтенииНаСервере + + true + +
        diff --git a/SSL/src/Documents/ОтзывСогласияНаОбработкуПерсональныхДанных/Forms/ФормаДокумента/Module.bsl b/SSL/src/Documents/ОтзывСогласияНаОбработкуПерсональныхДанных/Forms/ФормаДокумента/Module.bsl new file mode 100644 index 000000000..586b0c562 --- /dev/null +++ b/SSL/src/Documents/ОтзывСогласияНаОбработкуПерсональныхДанных/Forms/ФормаДокумента/Module.bsl @@ -0,0 +1,162 @@ + +#Область ОбработчикиСобытий + +&НаСервере +Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) + + Если Параметры.Свойство("АвтоТест") Тогда // Возврат при получении формы для анализа. + Возврат; + КонецЕсли; + + Если Параметры.Ключ.Пустая() Тогда + // Заполняем значениями по умолчанию. + Объект.Ответственный = Пользователи.ТекущийПользователь(); + Если Не Параметры.Свойство("ДатаСогласия", Объект.ДатаОтзыва) Тогда + Объект.ДатаОтзыва = ТекущаяДатаСеанса(); + КонецЕсли; + Если Не ЗначениеЗаполнено(Объект.Организация) Тогда + Если Параметры.Свойство("Организация") Тогда + Объект.Организация = Параметры.Организация; + Иначе + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.Организации") Тогда + Модуль = ОбщегоНазначения.ОбщийМодуль("Справочники.Организации"); + Объект.Организация = Модуль.ОрганизацияПоУмолчанию(); + КонецЕсли; + КонецЕсли; + КонецЕсли; + ЗаполнитьДанныеОрганизации(); + Если Параметры.Свойство("Субъект") Тогда + Объект.Субъект = Параметры.Субъект; + КонецЕсли; + УстановитьСведенияДействующегоСогласия(); + КонецЕсли; + +КонецПроцедуры + +&НаСервере +Процедура ПриЧтенииНаСервере(ТекущийОбъект) + + УстановитьСведенияДействующегоСогласия(); + + // СтандартныеПодсистемы.ДатыЗапретаИзменения + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ДатыЗапретаИзменения") Тогда + МодульДатыЗапретаИзменения = ОбщегоНазначения.ОбщийМодуль("ДатыЗапретаИзменения"); + МодульДатыЗапретаИзменения.ОбъектПриЧтенииНаСервере(ЭтотОбъект, ТекущийОбъект); + КонецЕсли; + // Конец СтандартныеПодсистемы.ДатыЗапретаИзменения + +КонецПроцедуры + +#КонецОбласти + +#Область ОбработчикиСобытийЭлементовФормы + +&НаКлиенте +Процедура ОрганизацияПриИзменении(Элемент) + + ОрганизацияПриИзмененииНаСервере(); + +КонецПроцедуры + +&НаКлиенте +Процедура СубъектПриИзменении(Элемент) + + СубъектПриИзмененииНаСервере(); + +КонецПроцедуры + +&НаКлиенте +Процедура ДатаОтзываПриИзменении(Элемент) + + ДатаОтзываПриИзмененииНаСервере(); + +КонецПроцедуры + +&НаКлиенте +Процедура КомментарийНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка) + + СтандартнаяОбработка = Ложь; + + ОбщегоНазначенияКлиент.ПоказатьФормуРедактированияКомментария( + Элемент.ТекстРедактирования, + ЭтотОбъект, + "Объект.Комментарий"); + +КонецПроцедуры + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +&НаСервере +Процедура ОрганизацияПриИзмененииНаСервере() + + ЗаполнитьДанныеОрганизации(); + УстановитьСведенияДействующегоСогласия(); + +КонецПроцедуры + +&НаСервере +Процедура СубъектПриИзмененииНаСервере() + + УстановитьСведенияДействующегоСогласия(); + +КонецПроцедуры + +&НаСервере +Процедура ДатаОтзываПриИзмененииНаСервере() + + УстановитьСведенияДействующегоСогласия(); + +КонецПроцедуры + +&НаСервере +Процедура ЗаполнитьДанныеОрганизации() + + ДанныеОрганизации = ЗащитаПерсональныхДанных.ОписаниеДанныхОрганизации(); + + ЗащитаПерсональныхДанныхПереопределяемый.ДополнитьДанныеОрганизацииОператораПерсональныхДанных(Объект.Организация, ДанныеОрганизации, Объект.ДатаОтзыва); + + Объект.ЮридическийАдресОрганизации = ДанныеОрганизации.АдресОрганизации; + Объект.ОтветственныйЗаОбработкуПерсональныхДанных = ДанныеОрганизации.ОтветственныйЗаОбработкуПерсональныхДанных; + +КонецПроцедуры + +&НаСервере +Процедура УстановитьСведенияДействующегоСогласия() + + // Если не заполнена организация или субъект, не отображаем вообще никаких сведений. + Если Не ЗначениеЗаполнено(Объект.Организация) Или Не ЗначениеЗаполнено(Объект.Субъект) Тогда + Элементы.СведенияОСогласииГруппа.Видимость = Ложь; + Возврат; + КонецЕсли; + + Элементы.СведенияОСогласииГруппа.Видимость = Истина; + + // Запрашиваем сведения о действующем согласии. + Согласие = ЗащитаПерсональныхДанных.ДействующееСогласиеНаОбработкуПерсональныхДанных(Объект.Субъект, Объект.Организация, Объект.ДатаОтзыва, Объект.Ссылка); + + Если Согласие = Неопределено Тогда + // Не обнаружено действующего согласия. + Элементы.СведенияКартинка.Картинка = БиблиотекаКартинок.Предупреждение32; + Элементы.СведенияТекст.Заголовок = НСтр("ru = 'Не обнаружено действующего согласия на обработку персональных данных субъекта.'"); + Возврат; + КонецЕсли; + + // Обнаружено действующее согласие - готовим форматированную строку. + + // Пример сообщения: "У субъекта 20.03.2014 было получено согласие, которое действует до 20.03.2017". + ЧастиСообщения = Новый Массив; + ЧастиСообщения.Добавить(СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'У субъекта %1 было получено'"), Формат(Согласие.ДатаПолучения, "ДЛФ=D")) + " "); + ЧастиСообщения.Добавить(Новый ФорматированнаяСтрока(НСтр("ru = 'согласие'"), , , , ПолучитьНавигационнуюСсылку(Согласие.ДокументОснование))); + Если ЗначениеЗаполнено(Согласие.СрокДействия) Тогда + ЧастиСообщения.Добавить(СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = ', которое действует до %1.'"), Формат(Согласие.СрокДействия, "ДЛФ=D"))); + Иначе + ЧастиСообщения.Добавить(НСтр("ru = ', которое действует бессрочно.'")); + КонецЕсли; + + Элементы.СведенияТекст.Заголовок = Новый ФорматированнаяСтрока(ЧастиСообщения); + +КонецПроцедуры + +#КонецОбласти diff --git a/SSL/src/Documents/ОтзывСогласияНаОбработкуПерсональныхДанных/Help/ru.html b/SSL/src/Documents/ОтзывСогласияНаОбработкуПерсональныхДанных/Help/ru.html new file mode 100644 index 000000000..59ca7aa42 --- /dev/null +++ b/SSL/src/Documents/ОтзывСогласияНаОбработкуПерсональныхДанных/Help/ru.html @@ -0,0 +1,14 @@ + +

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

        +

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

        +

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

        +

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

        +

        Заполните оставшиеся поля:

        +

        Просмотр согласия на обработку ПДн

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

        Проведение документа

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

        См. также:

        + \ No newline at end of file diff --git a/SSL/src/Documents/ОтзывСогласияНаОбработкуПерсональныхДанных/ObjectModule.bsl b/SSL/src/Documents/ОтзывСогласияНаОбработкуПерсональныхДанных/ObjectModule.bsl new file mode 100644 index 000000000..912bcf297 --- /dev/null +++ b/SSL/src/Documents/ОтзывСогласияНаОбработкуПерсональныхДанных/ObjectModule.bsl @@ -0,0 +1,34 @@ +#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда + +#Область ОбработчикиСобытий + +Процедура ОбработкаЗаполнения(ДанныеЗаполнения, СтандартнаяОбработка) + + Если ТипЗнч(ДанныеЗаполнения) = Тип("ДокументСсылка.СогласиеНаОбработкуПерсональныхДанных") Тогда + ИменаРеквизитов = + "Организация, + |ЮридическийАдресОрганизации, + |ОтветственныйЗаОбработкуПерсональныхДанных, + |Субъект"; + ЗначенияРеквизитов = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(ДанныеЗаполнения, ИменаРеквизитов); + ЗаполнитьЗначенияСвойств(ЭтотОбъект, ЗначенияРеквизитов); + СтандартнаяОбработка = Ложь; + КонецЕсли; + +КонецПроцедуры + +Процедура ОбработкаПроведения(Отказ, РежимПроведения) + + ОписаниеРегистрации = ЗащитаПерсональныхДанных.ОписаниеРегистрацииСогласияНаОбработкуПерсональныхДанных(); + ОписаниеРегистрации.Организация = Организация; + ОписаниеРегистрации.Субъект = Субъект; + ОписаниеРегистрации.ДатаРегистрации = ДатаОтзыва; + ОписаниеРегистрации.Действует = Ложь; + + ЗащитаПерсональныхДанных.ЗарегистрироватьСведенияОСогласииНаОбработкуПерсональныхДанных(Движения, ОписаниеРегистрации); + +КонецПроцедуры + +#КонецОбласти + +#КонецЕсли \ No newline at end of file diff --git a/SSL/src/Documents/ОтзывСогласияНаОбработкуПерсональныхДанных/ОтзывСогласияНаОбработкуПерсональныхДанных.mdo b/SSL/src/Documents/ОтзывСогласияНаОбработкуПерсональныхДанных/ОтзывСогласияНаОбработкуПерсональныхДанных.mdo new file mode 100644 index 000000000..08214c665 --- /dev/null +++ b/SSL/src/Documents/ОтзывСогласияНаОбработкуПерсональныхДанных/ОтзывСогласияНаОбработкуПерсональныхДанных.mdo @@ -0,0 +1,238 @@ + + + + + + + + + + ОтзывСогласияНаОбработкуПерсональныхДанных + + ru + Отзыв согласия на обработку персональных данных + + true + Document.ОтзывСогласияНаОбработкуПерсональныхДанных.StandardAttribute.Number + DontUse + + Use + Posted + + Use + + + + + Use + Ref + + Use + + + + + Use + DeletionMark + + Use + + + + + Use + Date + + ShowError + Use + + + + + Use + Number + + Use + + + + Document.СогласиеНаОбработкуПерсональныхДанных + Use + + + ru + + + Managed + Use + + ru + Отзыв согласия на обработку ПДн + + + ru + Отзывы согласий на обработку ПДн + + + ru + Отзывы согласий на обработку персональных данных + + String + 11 + Variable + true + true + Document.ОтзывСогласияНаОбработкуПерсональныхДанных.Form.ФормаДокумента + InformationRegister.СогласияНаОбработкуПерсональныхДанных + true + true + + Организация + + ru + Организация + + + CatalogRef.Организации + + + ru + Оператор персональных данных + + + + ShowError + + Use + Use + + + ЮридическийАдресОрганизации + + ru + Юридический адрес организации + + + String + + 150 + + + + + + Use + Use + + + ОтветственныйЗаОбработкуПерсональныхДанных + + ru + Ответственный за обработку персональных данных + + + CatalogRef.Пользователи + + + ru + Ответственный за обработку персональных данных в организации + + + + + Use + Use + + + Субъект + + ru + Субъект + + + DefinedType.СубъектПерсональныхДанных + + + ru + Субъект, предоставляющий согласие на обработку персональных данных + + + + ShowError + + Use + Use + + + ДатаОтзыва + + ru + Дата отзыва + + + Date + + Date + + + + ru + Дата, с которой по инициативе субъекта оператором должна быть прекращена обработка его персональных данных + + + + ShowError + + Use + Use + + + Ответственный + + ru + Ответственный + + + CatalogRef.Пользователи + + + ru + Пользователь, который оформил документ + + + + + Use + Use + + + Комментарий + + ru + Комментарий + + + String + + + + ru + Произвольный текст + + true + + + + Use + Use + + + ФормаДокумента + + ru + Форма документа + + PersonalComputer + MobileDevice + + diff --git a/SSL/src/Documents/СогласиеНаОбработкуПерсональныхДанных/Forms/ФормаДокумента/Form.form b/SSL/src/Documents/СогласиеНаОбработкуПерсональныхДанных/Forms/ФормаДокумента/Form.form new file mode 100644 index 000000000..9a2010a9f --- /dev/null +++ b/SSL/src/Documents/СогласиеНаОбработкуПерсональныхДанных/Forms/ФормаДокумента/Form.form @@ -0,0 +1,993 @@ + + + + НомерДатаГруппа + 40 + + Номер + 1 + true + true + + true + + + Объект.Number + + + НомерРасширеннаяПодсказка + 3 + Label + true + true + + Left + + + + НомерКонтекстноеМеню + 2 + true + + InputField + Auto + true + Left + true + + true + true + true + true + true + true + Normal + + + + Дата + 4 + true + true + + true + + + Объект.Date + + + ДатаРасширеннаяПодсказка + 6 + Label + true + true + + Left + + + + ДатаКонтекстноеМеню + 5 + true + + InputField + Auto + true + Left + true + + true + true + true + true + true + true + Normal + + + true + true + + true + + + <key>ru</key> + <value>Номер и дата</value> + + false + + НомерДатаГруппаРасширеннаяПодсказка + 41 + Label + true + true + + Left + + + UsualGroup + + Auto + true + true + Auto + Auto + + + + ОператорПерсональныхДанныхГруппа + 67 + + ОрганизацияАдресГруппа + 75 + + Организация + 7 + true + true + + true + + + Объект.Организация + + + OnChange + ОрганизацияПриИзменении + + + ОрганизацияРасширеннаяПодсказка + 9 + Label + true + true + + Left + + + + ОрганизацияКонтекстноеМеню + 8 + true + + InputField + Auto + true + Left + true + + true + true + true + true + true + true + Normal + + + + ЮридическийАдресОрганизации + 10 + + <key>ru</key> + <value>Адрес</value> + + true + true + + true + + + Объект.ЮридическийАдресОрганизации + + + ЮридическийАдресОрганизацииРасширеннаяПодсказка + 12 + Label + true + true + + Left + + + + ЮридическийАдресОрганизацииКонтекстноеМеню + 11 + true + + InputField + Auto + true + Left + true + + true + true + true + true + true + true + Normal + + + true + true + + true + + + <key>ru</key> + <value>Организация и адрес</value> + + + ОрганизацияАдресГруппаРасширеннаяПодсказка + 76 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + true + true + Auto + Auto + + + + ОтветственныйЗаОбработкуПерсональныхДанных + 13 + + <key>ru</key> + <value>Ответственный за обработку ПДн</value> + + true + true + + true + + + Объект.ОтветственныйЗаОбработкуПерсональныхДанных + + + ОтветственныйЗаОбработкуПерсональныхДанныхРасширеннаяПодсказка + 15 + Label + true + true + + Left + + + + ОтветственныйЗаОбработкуПерсональныхДанныхКонтекстноеМеню + 14 + true + + InputField + Auto + true + Left + true + + true + true + true + true + true + true + Normal + + + true + true + + true + + + <key>ru</key> + <value>Оператор персональных данных</value> + + + ОператорПерсональныхДанныхГруппаРасширеннаяПодсказка + 68 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + WeakSeparation + true + true + auto + Auto + Auto + + + + СубъектГруппа + 57 + + СубъектФИОГруппа + 73 + + Субъект + 16 + true + true + + true + + + Объект.Субъект + + + OnChange + СубъектПриИзменении + + + СубъектРасширеннаяПодсказка + 18 + Label + true + true + + Left + + + + СубъектКонтекстноеМеню + 17 + true + + InputField + Auto + true + Left + true + + true + true + true + true + true + true + Normal + + + + ФИОСубъекта + 19 + + <key>ru</key> + <value>ФИО</value> + + true + true + + true + + + Объект.ФИОСубъекта + + + ФИОСубъектаРасширеннаяПодсказка + 21 + Label + true + true + + Left + + + + ФИОСубъектаКонтекстноеМеню + 20 + true + + InputField + Auto + true + Left + true + + true + true + true + true + true + true + Normal + + + true + true + + true + + + <key>ru</key> + <value>Субъект и ФИО</value> + + + СубъектФИОГруппаРасширеннаяПодсказка + 74 + Label + true + true + + Left + + + UsualGroup + + Auto + true + true + Auto + Auto + + + + АдресСубъекта + 22 + + <key>ru</key> + <value>Адрес</value> + + true + true + + true + + + Объект.АдресСубъекта + + + АдресСубъектаРасширеннаяПодсказка + 24 + Label + true + true + + Left + + + + АдресСубъектаКонтекстноеМеню + 23 + true + + InputField + Auto + true + Left + true + + true + true + true + true + true + true + Normal + + + + ПаспортныеДанные + 25 + true + true + + true + + + Объект.ПаспортныеДанные + + + ПаспортныеДанныеРасширеннаяПодсказка + 27 + Label + true + true + + Left + + + + ПаспортныеДанныеКонтекстноеМеню + 26 + true + + InputField + Auto + true + Left + true + + true + true + true + true + true + true + Normal + + + true + true + + true + + + <key>ru</key> + <value>Субъект персональных данных</value> + + 35 + + СубъектГруппаРасширеннаяПодсказка + 58 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + WeakSeparation + true + true + auto + Auto + Auto + + + + СведенияОСогласииГруппа + 77 + + ПредупреждениеКартинка + 79 + + <key>ru</key> + <value>Предупреждение картинка</value> + + true + true + + true + + + ПредупреждениеКартинкаРасширеннаяПодсказка + 81 + Label + true + true + + Left + + + + ПредупреждениеКартинкаКонтекстноеМеню + 80 + true + + 3 + true + 2 + true + + + CommonPicture.Предупреждение32 + + + + + ПредупреждениеТекст + 82 + + <key>ru</key> + <value>У субъекта 20.03.2014 уже было получено <u>согласие</>, которое действует до 20.03.2017</value> + + true + true + + true + + + ПредупреждениеТекстРасширеннаяПодсказка + 84 + Label + true + true + + Left + + + + ПредупреждениеТекстКонтекстноеМеню + 83 + true + + true + Label + true + 2 + true + + Style.ПоясняющийТекст + + + Left + + + true + true + + true + + + <key>ru</key> + <value>Сведения о согласии</value> + + + СведенияОСогласииГруппаРасширеннаяПодсказка + 78 + Label + true + true + + Left + + + UsualGroup + + Auto + true + true + Auto + Auto + + + + СрокДействияГруппа + 71 + + ДатаПолучения + 28 + + <key>ru</key> + <value>Согласие получено</value> + + true + true + + true + + + Объект.ДатаПолучения + + + OnChange + ДатаПолученияПриИзменении + + + ДатаПолученияРасширеннаяПодсказка + 30 + Label + true + true + + Left + + + + ДатаПолученияКонтекстноеМеню + 29 + true + + InputField + Auto + true + Left + true + + true + true + true + true + true + true + Normal + + + + СрокДействия + 31 + true + true + + true + + + Объект.СрокДействия + + Button + + СрокДействияРасширеннаяПодсказка + 33 + Label + true + true + + Left + + + + СрокДействияКонтекстноеМеню + 32 + true + + InputField + Auto + true + Left + true + + true + true + true + true + true + true + Normal + + + true + true + + true + + + <key>ru</key> + <value>Срок действия</value> + + + СрокДействияГруппаРасширеннаяПодсказка + 72 + Label + true + true + + Left + + + UsualGroup + + Auto + NormalSeparation + true + true + Auto + Auto + + + + ОтветственныйКомментарийГруппа + 69 + + Комментарий + 37 + true + true + + true + + + Объект.Комментарий + + + КомментарийРасширеннаяПодсказка + 39 + Label + true + true + + Left + + + + КомментарийКонтекстноеМеню + 38 + true + + InputField + Auto + true + Left + true + + + StartChoice + КомментарийНачалоВыбора + + true + true + true + true + true + true + true + Normal + + + + Ответственный + 34 + true + true + + true + + + Объект.Ответственный + + + ОтветственныйРасширеннаяПодсказка + 36 + Label + true + true + + Left + + + + ОтветственныйКонтекстноеМеню + 35 + true + + InputField + Auto + true + Left + true + + true + true + true + true + true + true + Normal + + + true + true + + true + + + <key>ru</key> + <value>Ответственный и комментарий</value> + + + ОтветственныйКомментарийГруппаРасширеннаяПодсказка + 70 + Label + true + true + + Left + + + UsualGroup + + Auto + true + true + LeftWide + Auto + Auto + + + + ФормаКоманднаяПанель + -1 + + ГруппаПечать + 85 + true + true + + true + + + <key>ru</key> + <value>Печать</value> + + + ru + Группа печать + + + ГруппаПечатьРасширеннаяПодсказка + 86 + Label + true + true + + Left + + + Popup + + + StdPicture.Print + + PictureAndText + Normal + + + Left + true + + + OnCreateAtServer + ПриСозданииНаСервере + + DontBlock + true + true + true + Vertical + true + true + true + auto + true + + Объект + 1 + + DocumentObject.СогласиеНаОбработкуПерсональныхДанных + + + true + + + true + + + Объект.RegisterRecords + +
        true
        + true +
        + + + + + + + OnReadAtServer + ПриЧтенииНаСервере + + true + +
        diff --git a/SSL/src/Documents/СогласиеНаОбработкуПерсональныхДанных/Forms/ФормаДокумента/Module.bsl b/SSL/src/Documents/СогласиеНаОбработкуПерсональныхДанных/Forms/ФормаДокумента/Module.bsl new file mode 100644 index 000000000..7098a4bbb --- /dev/null +++ b/SSL/src/Documents/СогласиеНаОбработкуПерсональныхДанных/Forms/ФормаДокумента/Module.bsl @@ -0,0 +1,186 @@ + +#Область ОбработчикиСобытий + +&НаСервере +Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) + + Если Параметры.Свойство("АвтоТест") Тогда // Возврат при получении формы для анализа. + Возврат; + КонецЕсли; + + Если Параметры.Ключ.Пустая() Тогда + // Заполняем значениями по умолчанию. + Объект.Ответственный = Пользователи.ТекущийПользователь(); + Если Не Параметры.Свойство("ДатаСогласия", Объект.ДатаПолучения) Тогда + Объект.ДатаПолучения = ТекущаяДатаСеанса(); + КонецЕсли; + Если Не Параметры.Свойство("Организация", Объект.Организация) Тогда + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.Организации") Тогда + Модуль = ОбщегоНазначения.ОбщийМодуль("Справочники.Организации"); + Объект.Организация = Модуль.ОрганизацияПоУмолчанию(); + КонецЕсли; + КонецЕсли; + ЗаполнитьДанныеОрганизации(); + Если Параметры.Свойство("Субъект") Тогда + Объект.Субъект = Параметры.Субъект; + ЗаполнитьДанныеСубъекта(); + КонецЕсли; + УстановитьСведенияДействующегоСогласия(); + КонецЕсли; + + // СтандартныеПодсистемы.Печать + УправлениеПечатью.ПриСозданииНаСервере(ЭтотОбъект, Элементы.ГруппаПечать); + // Конец СтандартныеПодсистемы.Печать + +КонецПроцедуры + +&НаСервере +Процедура ПриЧтенииНаСервере(ТекущийОбъект) + + УстановитьСведенияДействующегоСогласия(); + + // СтандартныеПодсистемы.ДатыЗапретаИзменения + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ДатыЗапретаИзменения") Тогда + МодульДатыЗапретаИзменения = ОбщегоНазначения.ОбщийМодуль("ДатыЗапретаИзменения"); + МодульДатыЗапретаИзменения.ОбъектПриЧтенииНаСервере(ЭтотОбъект, ТекущийОбъект); + КонецЕсли; + // Конец СтандартныеПодсистемы.ДатыЗапретаИзменения + +КонецПроцедуры + +#КонецОбласти + +#Область ОбработчикиКомандФормы + +// СтандартныеПодсистемы.Печать +&НаКлиенте +Процедура Подключаемый_ВыполнитьКомандуПечати(Команда) + + УправлениеПечатьюКлиент.ВыполнитьПодключаемуюКомандуПечати(Команда, ЭтотОбъект, Объект); + +КонецПроцедуры +// Конец СтандартныеПодсистемы.Печать + +#КонецОбласти + +#Область ОбработчикиСобытийЭлементовФормы + +&НаКлиенте +Процедура ОрганизацияПриИзменении(Элемент) + + ОрганизацияПриИзмененииНаСервере(); + +КонецПроцедуры + +&НаКлиенте +Процедура СубъектПриИзменении(Элемент) + + СубъектПриИзмененииНаСервере(); + +КонецПроцедуры + +&НаКлиенте +Процедура ДатаПолученияПриИзменении(Элемент) + + ДатаПолученияПриИзмененииНаСервере(); + +КонецПроцедуры + +&НаКлиенте +Процедура КомментарийНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка) + + СтандартнаяОбработка = Ложь; + + ОбщегоНазначенияКлиент.ПоказатьФормуРедактированияКомментария( + Элемент.ТекстРедактирования, + ЭтотОбъект, + "Объект.Комментарий"); + +КонецПроцедуры + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +&НаСервере +Процедура ОрганизацияПриИзмененииНаСервере() + + ЗаполнитьДанныеОрганизации(); + УстановитьСведенияДействующегоСогласия(); + +КонецПроцедуры + +&НаСервере +Процедура СубъектПриИзмененииНаСервере() + + ЗаполнитьДанныеСубъекта(); + УстановитьСведенияДействующегоСогласия(); + +КонецПроцедуры + +&НаСервере +Процедура ДатаПолученияПриИзмененииНаСервере() + + УстановитьСведенияДействующегоСогласия(); + +КонецПроцедуры + +&НаСервере +Процедура ЗаполнитьДанныеОрганизации() + + ДанныеОрганизации = ЗащитаПерсональныхДанных.ОписаниеДанныхОрганизации(); + + ЗащитаПерсональныхДанныхПереопределяемый.ДополнитьДанныеОрганизацииОператораПерсональныхДанных(Объект.Организация, ДанныеОрганизации, Объект.ДатаПолучения); + + Объект.ЮридическийАдресОрганизации = ДанныеОрганизации.АдресОрганизации; + Объект.ОтветственныйЗаОбработкуПерсональныхДанных = ДанныеОрганизации.ОтветственныйЗаОбработкуПерсональныхДанных; + +КонецПроцедуры + +&НаСервере +Процедура ЗаполнитьДанныеСубъекта() + + ДанныеСубъекта = ЗащитаПерсональныхДанных.ОписаниеДанныхСубъекта(); + ДанныеСубъекта.Субъект = Объект.Субъект; + + ДанныеСубъектов = Новый Массив; + ДанныеСубъектов.Добавить(ДанныеСубъекта); + + ЗащитаПерсональныхДанныхПереопределяемый.ДополнитьДанныеСубъектовПерсональныхДанных(ДанныеСубъектов, Объект.ДатаПолучения); + + Объект.ФИОСубъекта = ДанныеСубъекта.ФИО; + Объект.АдресСубъекта = ДанныеСубъекта.Адрес; + Объект.ПаспортныеДанные = ДанныеСубъекта.ПаспортныеДанные; + +КонецПроцедуры + +&НаСервере +Процедура УстановитьСведенияДействующегоСогласия() + + // Запрашиваем сведения о действующем согласии. + Согласие = ЗащитаПерсональныхДанных.ДействующееСогласиеНаОбработкуПерсональныхДанных(Объект.Субъект, Объект.Организация, Объект.ДатаПолучения, Объект.Ссылка); + + Если Согласие = Неопределено Тогда + // Не обнаружено действующего согласия - не отображаем сведения. + Элементы.СведенияОСогласииГруппа.Видимость = Ложь; + Возврат; + КонецЕсли; + + // Обнаружено действующее согласие. + Элементы.СведенияОСогласииГруппа.Видимость = Истина; + + // Пример сообщения: "У субъекта 20.03.2014 уже было получено согласие, которое действует до 20.03.2017". + ЧастиСообщения = Новый Массив; + ЧастиСообщения.Добавить(СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'У субъекта %1 уже было получено'"), Формат(Согласие.ДатаПолучения, "ДЛФ=D")) + " "); + ЧастиСообщения.Добавить(Новый ФорматированнаяСтрока(НСтр("ru = 'согласие'"), , , , ПолучитьНавигационнуюСсылку(Согласие.ДокументОснование))); + Если ЗначениеЗаполнено(Согласие.СрокДействия) Тогда + ЧастиСообщения.Добавить(СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = ', которое действует до %1.'"), Формат(Согласие.СрокДействия, "ДЛФ=D"))); + Иначе + ЧастиСообщения.Добавить(НСтр("ru = ', которое действует бессрочно.'")); + КонецЕсли; + + Элементы.ПредупреждениеТекст.Заголовок = Новый ФорматированнаяСтрока(ЧастиСообщения); + +КонецПроцедуры + +#КонецОбласти diff --git a/SSL/src/Documents/СогласиеНаОбработкуПерсональныхДанных/Help/ru.html b/SSL/src/Documents/СогласиеНаОбработкуПерсональныхДанных/Help/ru.html new file mode 100644 index 000000000..e05b59e48 --- /dev/null +++ b/SSL/src/Documents/СогласиеНаОбработкуПерсональныхДанных/Help/ru.html @@ -0,0 +1,32 @@ + +

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

        +

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

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

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

        +

        Укажите Дату согласия.

        +

        Оператор персональных данных

        +

        Субъект персональных данных

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

        Остальные поля

        +

        Печать

        +
        • С помощью кнопки Печать можно распечатать выделенные согласия. Печать возможна в виде табличных документов формата MXL (для печати в этом формате не требуется специальных программ); +
        • В виде офисных документов в форматах Microsoft Word и OpenOffice.org, для этого требуются соответствующие программы, установленные на компьютере.

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

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

        Проведение документа

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

        См. также:

        + \ No newline at end of file diff --git a/SSL/src/Documents/СогласиеНаОбработкуПерсональныхДанных/ManagerModule.bsl b/SSL/src/Documents/СогласиеНаОбработкуПерсональныхДанных/ManagerModule.bsl new file mode 100644 index 000000000..4ec7315a2 --- /dev/null +++ b/SSL/src/Documents/СогласиеНаОбработкуПерсональныхДанных/ManagerModule.bsl @@ -0,0 +1,311 @@ +#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда + +#Область СлужебныеПроцедурыИФункции + +//////////////////////////////////////////////////////////////////////////////// +// Интерфейс для работы с подсистемой Печать. + +// Заполняет список команд печати. +// +// Параметры: +// КомандыПечати - ТаблицаЗначений - состав полей см. в функции УправлениеПечатью.СоздатьКоллекциюКомандПечати. +// +Процедура ДобавитьКомандыПечати(КомандыПечати) Экспорт + + КомандаПечати = КомандыПечати.Добавить(); + КомандаПечати.Идентификатор = "СогласиеНаОбработкуПерсональныхДанных"; + КомандаПечати.Представление = НСтр("ru = 'Согласие на обработку ПДн (табличный документ 1С:Предприятия)'"); + + // В формате Microsoft Word. + КомандаПечати = КомандыПечати.Добавить(); + КомандаПечати.Идентификатор = "СогласиеНаОбработкуПерсональныхДанных(MSWord)"; + КомандаПечати.Представление = НСтр("ru = 'Согласие на обработку ПДн (документ Microsoft Word)'"); + КомандаПечати.Картинка = БиблиотекаКартинок.ФорматWord2007; + КомандаПечати.ПроверкаПроведенияПередПечатью = Истина; + КомандаПечати.Обработчик = "ЗащитаПерсональныхДанныхКлиент.ПечатьСогласияНаОбработкуПерсональныхДанных"; + КомандаПечати.ТребуетсяРасширениеРаботыСФайлами = Истина; + + // В формате OpenOffice.org Writer. + КомандаПечати = КомандыПечати.Добавить(); + КомандаПечати.Идентификатор = "СогласиеНаОбработкуПерсональныхДанных(ODT)"; + КомандаПечати.Представление = НСтр("ru = 'Согласие на обработку ПДн (документ OpenOffice.org Writer)'"); + КомандаПечати.Картинка = БиблиотекаКартинок.ФорматOpenOfficeWriter; + КомандаПечати.ПроверкаПроведенияПередПечатью = Истина; + КомандаПечати.Обработчик = "ЗащитаПерсональныхДанныхКлиент.ПечатьСогласияНаОбработкуПерсональныхДанных"; + КомандаПечати.ТребуетсяРасширениеРаботыСФайлами = Истина; + +КонецПроцедуры + +// Формирует печатные формы. +// +// Параметры: +// МассивОбъектов - Массив - ссылки на объекты, которые нужно распечатать; +// ПараметрыПечати - Структура - дополнительные настройки печати; +// КоллекцияПечатныхФорм - ТаблицаЗначений - сформированные табличные документы (выходной параметр). +// ОбъектыПечати - СписокЗначений - значение - ссылка на объект; +// представление - имя области в которой был выведен объект (выходной +// параметр); +// ПараметрыВывода - Структура - дополнительные параметры сформированных табличных документов (выходной +// параметр). +// +Процедура Печать(МассивОбъектов, ПараметрыПечати, КоллекцияПечатныхФорм, ОбъектыПечати, ПараметрыВывода) Экспорт + + // Печать согласия + ПечатнаяФорма = УправлениеПечатью.СведенияОПечатнойФорме(КоллекцияПечатныхФорм, "СогласиеНаОбработкуПерсональныхДанных"); + Если ПечатнаяФорма <> Неопределено Тогда + // имена файлов + ИменаФайлов = Новый Соответствие; + Шаблон = НСтр("ru = 'Согласие на обработку ПДн [Субъект] - [Организация] (№[Номер] получено [ДатаПолучения])'"); + ЗначенияРеквизитовДокументов = ОбщегоНазначения.ЗначенияРеквизитовОбъектов(МассивОбъектов, "Организация,Субъект,Номер,ДатаПолучения,Ссылка"); + Для Каждого Ссылка Из МассивОбъектов Цикл + ЗначенияРеквизитовДокумента = ЗначенияРеквизитовДокументов[Ссылка]; + ЗначенияРеквизитовДокумента.ДатаПолучения = Формат(ЗначенияРеквизитовДокумента.ДатаПолучения, "ДЛФ=D"); + ЗначенияРеквизитовДокумента.Номер = ЗначенияРеквизитовДокумента.Номер; + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ПрефиксацияОбъектов") Тогда + Модуль = ОбщегоНазначения.ОбщийМодуль("ПрефиксацияОбъектовКлиентСервер"); + ЗначенияРеквизитовДокумента.Номер = Модуль.ПолучитьНомерНаПечать(ЗначенияРеквизитовДокумента.Номер); + КонецЕсли; + ИмяФайла = СтроковыеФункцииКлиентСервер.ВставитьПараметрыВСтроку(Шаблон, ЗначенияРеквизитовДокументов[Ссылка]); + ИменаФайлов.Вставить(Ссылка, ИмяФайла); + КонецЦикла; + + // описание печатной формы + ПечатнаяФорма.ТабличныйДокумент = ПечатьСогласияНаОбработкуПДн(МассивОбъектов, ОбъектыПечати); + ПечатнаяФорма.СинонимМакета = НСтр("ru = 'Согласие на обработку ПДн'"); + ПечатнаяФорма.ПолныйПутьКМакету = "Документ.СогласиеНаОбработкуПерсональныхДанных.ПФ_MXL_СогласиеНаОбработкуПерсональныхДанных"; + ПечатнаяФорма.ИмяФайлаПечатнойФормы = ИменаФайлов; + КонецЕсли; + + // Печать в формате Word + НужноПечататьМакет = УправлениеПечатью.НужноПечататьМакет(КоллекцияПечатныхФорм, "СогласиеНаОбработкуПерсональныхДанных(MSWord)"); + Если НужноПечататьМакет Тогда + УправлениеПечатью.ВывестиТабличныйДокументВКоллекцию( + КоллекцияПечатныхФорм, + "СогласиеНаОбработкуПерсональныхДанных(MSWord)", + НСтр("ru = 'Согласие на обработку ПДн (документ Microsoft Word)'"), + ПечатьСогласияНаОбработкуПДн(МассивОбъектов, ОбъектыПечати), + , + "Документ.СогласиеНаОбработкуПерсональныхДанных.ПФ_DOC_СогласиеНаОбработкуПерсональныхДанных"); + КонецЕсли; + + // Печать в формате OpenOffice + НужноПечататьМакет = УправлениеПечатью.НужноПечататьМакет(КоллекцияПечатныхФорм, "СогласиеНаОбработкуПерсональныхДанных(ODT)"); + Если НужноПечататьМакет Тогда + УправлениеПечатью.ВывестиТабличныйДокументВКоллекцию( + КоллекцияПечатныхФорм, + "СогласиеНаОбработкуПерсональныхДанных(ODT)", + НСтр("ru = 'Согласие на обработку ПДн (документ OpenOffice.org Writer)'"), + ПечатьСогласияНаОбработкуПДн(МассивОбъектов, ОбъектыПечати), + , + "Документ.СогласиеНаОбработкуПерсональныхДанных.ПФ_ODT_СогласиеНаОбработкуПерсональныхДанных"); + КонецЕсли; + +КонецПроцедуры + +// Процедура печати согласия на обработку персональных данных. +// +Функция ПечатьСогласияНаОбработкуПДн(Согласия, ОбъектыПечати) Экспорт + + ТабличныйДокумент = Новый ТабличныйДокумент; + ТабличныйДокумент.КлючПараметровПечати = "ПараметрыПечати_СогласиеНаОбработкуПерсональныхДанных"; + + ИмяМакета = "СогласиеНаОбработкуПерсональныхДанных"; + + ОбластиМакета = Новый Структура; + ОбластиМакета.Вставить("Заголовок"); + ОбластиМакета.Вставить("НомерДата"); + ОбластиМакета.Вставить("Преамбула"); + ОбластиМакета.Вставить("П1_ЦелиОбработкиПДн"); + ОбластиМакета.Вставить("П2_СоставПДн"); + ОбластиМакета.Вставить("П3_ДействияСПДн"); + ОбластиМакета.Вставить("П4_ПравоПолученияИнформации"); + ОбластиМакета.Вставить("П5_СрокДействия"); + ОбластиМакета.Вставить("П6_ПравоОтзыва"); + ОбластиМакета.Вставить("РеквизитыОператора"); + ОбластиМакета.Вставить("РеквизитыСубъекта"); + + Макет = УправлениеПечатью.МакетПечатнойФормы("Документ.СогласиеНаОбработкуПерсональныхДанных.ПФ_MXL_СогласиеНаОбработкуПерсональныхДанных"); + + ДанныеДляПечати = ДанныеДляПечатиСогласий(Согласия); + + // Вывод форм для субъектов. + ПервыйДокумент = Истина; + Для Каждого ОписаниеСогласия Из ДанныеДляПечати Цикл + Если Не ПервыйДокумент Тогда + ТабличныйДокумент.ВывестиГоризонтальныйРазделительСтраниц(); + КонецЕсли; + ПервыйДокумент = Ложь; + НомерСтрокиНачало = ТабличныйДокумент.ВысотаТаблицы + 1; + // Формируем печатную форму согласия. + СогласиеФорма = Новый ТабличныйДокумент; + Для Каждого КлючИЗначение Из ОбластиМакета Цикл + ИмяОбласти = КлючИЗначение.Ключ; + ОбластьМакета = Макет.ПолучитьОбласть(ИмяОбласти); + ОбластьМакета.Параметры.Заполнить(ОписаниеСогласия); + СогласиеФорма.Вывести(ОбластьМакета); + КонецЦикла; + ТабличныйДокумент.Вывести(СогласиеФорма); + УправлениеПечатью.ЗадатьОбластьПечатиДокумента(ТабличныйДокумент, НомерСтрокиНачало, ОбъектыПечати, ОписаниеСогласия.ДокументОснование); + КонецЦикла; + + Возврат ТабличныйДокумент; + +КонецФункции + +// Структура данных для подготовки печатных форм. +// +// Параметры: +// Согласия - массив документов типа ДокументСсылка.СогласиеНаОбработкуПерсональныхДанных +// +// Возвращаемое значение - массив структур, см. ОписаниеСогласия(). +// +Функция ДанныеДляПечатиСогласий(Согласия) Экспорт + + ДанныеДляПечати = Новый Массив; + + Запрос = Новый Запрос( + "ВЫБРАТЬ + | Согласия.Ссылка КАК ДокументОснование, + | Согласия.Номер, + | Согласия.Организация, + | Согласия.ЮридическийАдресОрганизации КАК АдресОрганизации, + | Согласия.ОтветственныйЗаОбработкуПерсональныхДанных, + | Согласия.Субъект, + | Согласия.ФИОСубъекта КАК ФИО, + | Согласия.АдресСубъекта КАК Адрес, + | Согласия.ПаспортныеДанные, + | Согласия.ДатаПолучения КАК ДатаСогласия, + | Согласия.СрокДействия, + | Согласия.Ответственный, + | Согласия.Комментарий + |ИЗ + | Документ.СогласиеНаОбработкуПерсональныхДанных КАК Согласия + |ГДЕ + | Согласия.Ссылка В(&Согласия)"); + + Запрос.УстановитьПараметр("Согласия", Согласия); + + Выборка = Запрос.Выполнить().Выбрать(); + Пока Выборка.Следующий() Цикл + Описание = ОписаниеСогласия(); + ЗаполнитьЗначенияСвойств(Описание, Выборка); + Описание.ДатаСогласия = Формат(Выборка.ДатаСогласия, "ДЛФ=D"); + Если ЗначениеЗаполнено(Выборка.СрокДействия) Тогда + Описание.ПериодДействия = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'с %1 по %2.'"), Формат(Выборка.ДатаСогласия, "ДЛФ=D"), Формат(Выборка.СрокДействия, "ДЛФ=D")); + Иначе + Описание.ПериодДействия = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'с %1 бессрочно.'"), Формат(Выборка.ДатаСогласия, "ДЛФ=D")); + КонецЕсли; + ДанныеДляПечати.Добавить(Описание); + КонецЦикла; + + Возврат ДанныеДляПечати; + +КонецФункции + +// Структура данных для подготовки печатных форм. +// +// Параметры: +// Согласия - массив документов типа ДокументСсылка.СогласиеНаОбработкуПерсональныхДанных +// +// Возвращаемое значение - соответствие, в котором ключом является ссылкой, а значением описание, см. ОписаниеСогласия(). +// +Функция СоответствиеДанныхДляПечатиСогласий(Согласия) + + Соответствие = Новый Соответствие; + + ДанныеДляПечати = ДанныеДляПечатиСогласий(Согласия); + + Для Каждого ОписаниеСогласия Из ДанныеДляПечати Цикл + Соответствие.Вставить(ОписаниеСогласия.ДокументОснование, ОписаниеСогласия); + КонецЦикла; + + Возврат Соответствие; + +КонецФункции + +Функция ОписаниеСогласия() + + ОписаниеСогласия = Новый Структура( + "ДатаСогласия, + |ДокументОснование, + |Организация, + |АдресОрганизации, + |ОтветственныйЗаОбработкуПерсональныхДанных, + |ПериодДействия, + |ФИО, + |Адрес, + |ПаспортныеДанные"); + + ОписаниеСогласия.ДатаСогласия = НСтр("ru = '«____»_______________20___г.'"); + ОписаниеСогласия.Организация = НСтр("ru = '<Организация>'"); + ОписаниеСогласия.АдресОрганизации = НСтр("ru = '<Адрес организации>'"); + ОписаниеСогласия.ОтветственныйЗаОбработкуПерсональныхДанных = НСтр("ru = '<ФИО ответственного лица>'"); + + Возврат ОписаниеСогласия; + +КонецФункции + +//////////////////////////////////////////////////////////////////////////////// +// Работа с макетами офисных документов. + +Функция ПолучитьДанныеПечати(Знач Согласия, Знач МассивИменМакетов) Экспорт + + ДанныеПоВсемОбъектам = Новый Соответствие; + + СоответствиеПоСогласиям = СоответствиеДанныхДляПечатиСогласий(Согласия); + + Для Каждого ОбъектСсылка Из Согласия Цикл + ДанныеОбъектаПоМакетам = Новый Соответствие; + Для Каждого ИмяМакета Из МассивИменМакетов Цикл + ДанныеОбъектаПоМакетам.Вставить(ИмяМакета, СоответствиеПоСогласиям[ОбъектСсылка]); + КонецЦикла; + ДанныеПоВсемОбъектам.Вставить(ОбъектСсылка, ДанныеОбъектаПоМакетам); + КонецЦикла; + + ОписаниеОбластей = Новый Соответствие; + ДвоичныеДанныеМакетов = Новый Соответствие; + ТипыМакетов = Новый Соответствие; + + Для Каждого ИмяМакета Из МассивИменМакетов Цикл + Если ИмяМакета = "СогласиеНаОбработкуПерсональныхДанных(MSWord)" Тогда + ДвоичныеДанныеМакетов.Вставить(ИмяМакета, УправлениеПечатью.МакетПечатнойФормы("Документ.СогласиеНаОбработкуПерсональныхДанных.ПФ_DOC_СогласиеНаОбработкуПерсональныхДанных")); + ТипыМакетов.Вставить(ИмяМакета, "DOC"); + ИначеЕсли ИмяМакета = "СогласиеНаОбработкуПерсональныхДанных(ODT)" Тогда + ДвоичныеДанныеМакетов.Вставить(ИмяМакета, УправлениеПечатью.МакетПечатнойФормы("Документ.СогласиеНаОбработкуПерсональныхДанных.ПФ_ODT_СогласиеНаОбработкуПерсональныхДанных")); + ТипыМакетов.Вставить(ИмяМакета, "ODT"); + КонецЕсли; + ОписаниеОбластей.Вставить(ИмяМакета, ОписаниеОбластейМакетаОфисногоДокумента()); + КонецЦикла; + + Макеты = Новый Структура("ОписаниеОбластей, ТипыМакетов, ДвоичныеДанныеМакетов"); + Макеты.ОписаниеОбластей = ОписаниеОбластей; + Макеты.ТипыМакетов = ТипыМакетов; + Макеты.ДвоичныеДанныеМакетов = ДвоичныеДанныеМакетов; + + ДанныеПечати = Новый Структура("Данные, Макеты"); + ДанныеПечати.Данные = ДанныеПоВсемОбъектам; + ДанныеПечати.Макеты = Макеты; + + Возврат ДанныеПечати; + +КонецФункции + +Функция ОписаниеОбластейМакетаОфисногоДокумента() + + ОписаниеОбластей = Новый Структура; + + УправлениеПечатью.ДобавитьОписаниеОбласти(ОписаниеОбластей, "Заголовок", "Общая"); + УправлениеПечатью.ДобавитьОписаниеОбласти(ОписаниеОбластей, "НомерДата", "Общая"); + УправлениеПечатью.ДобавитьОписаниеОбласти(ОписаниеОбластей, "Преамбула", "Общая"); + УправлениеПечатью.ДобавитьОписаниеОбласти(ОписаниеОбластей, "ОсновнойТекст", "Общая"); + УправлениеПечатью.ДобавитьОписаниеОбласти(ОписаниеОбластей, "РеквизитыОператора", "Общая"); + УправлениеПечатью.ДобавитьОписаниеОбласти(ОписаниеОбластей, "РеквизитыСубъекта", "Общая"); + УправлениеПечатью.ДобавитьОписаниеОбласти(ОписаниеОбластей, "Подпись", "Общая"); + + Возврат ОписаниеОбластей; + +КонецФункции + +#КонецОбласти + +#КонецЕсли \ No newline at end of file diff --git a/SSL/src/Documents/СогласиеНаОбработкуПерсональныхДанных/ObjectModule.bsl b/SSL/src/Documents/СогласиеНаОбработкуПерсональныхДанных/ObjectModule.bsl new file mode 100644 index 000000000..b787a9a25 --- /dev/null +++ b/SSL/src/Documents/СогласиеНаОбработкуПерсональныхДанных/ObjectModule.bsl @@ -0,0 +1,38 @@ +#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда + +#Область ОбработчикиСобытий + +Процедура ОбработкаПроверкиЗаполнения(Отказ, ПроверяемыеРеквизиты) + + Если ЗначениеЗаполнено(СрокДействия) И СрокДействия < ДатаПолучения Тогда + ТекстСообщения = НСтр("ru = 'Срок действия согласия противоречит дате получения.'"); + ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстСообщения, , "Объект.СрокДействия", , Отказ); + КонецЕсли; + + // Проверяем, что на указанную дату не было других записей о согласии. + Согласие = ЗащитаПерсональныхДанных.ДействующееСогласиеНаОбработкуПерсональныхДанных(Субъект, Организация, ДатаПолучения, Ссылка); + Если Согласие <> Неопределено Тогда + Если ДатаПолучения = Согласие.ДатаПолучения Тогда + ТекстСообщения = НСтр("ru = 'На указанную дату уже зарегистрировано согласие.'"); + ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстСообщения, , "Объект.ДатаПолучения", , Отказ); + КонецЕсли; + КонецЕсли; + +КонецПроцедуры + +Процедура ОбработкаПроведения(Отказ, РежимПроведения) + + ОписаниеРегистрации = ЗащитаПерсональныхДанных.ОписаниеРегистрацииСогласияНаОбработкуПерсональныхДанных(); + ОписаниеРегистрации.Организация = Организация; + ОписаниеРегистрации.Субъект = Субъект; + ОписаниеРегистрации.ДатаРегистрации = ДатаПолучения; + ОписаниеРегистрации.Действует = Истина; + ОписаниеРегистрации.СрокДействия = СрокДействия; + + ЗащитаПерсональныхДанных.ЗарегистрироватьСведенияОСогласииНаОбработкуПерсональныхДанных(Движения, ОписаниеРегистрации); + +КонецПроцедуры + +#КонецОбласти + +#КонецЕсли \ No newline at end of file diff --git a/SSL/src/Documents/СогласиеНаОбработкуПерсональныхДанных/Templates/ПФ_DOC_СогласиеНаОбработкуПерсональныхДанных/Template.bin b/SSL/src/Documents/СогласиеНаОбработкуПерсональныхДанных/Templates/ПФ_DOC_СогласиеНаОбработкуПерсональныхДанных/Template.bin new file mode 100644 index 000000000..7a0924c2e Binary files /dev/null and b/SSL/src/Documents/СогласиеНаОбработкуПерсональныхДанных/Templates/ПФ_DOC_СогласиеНаОбработкуПерсональныхДанных/Template.bin differ diff --git a/SSL/src/DataProcessors/СогласиеНаОбработкуПерсональныхДанных/Templates/ПФ_MXL_СогласиеНаОбработкуПерсональныхДанных/Template.mxlx b/SSL/src/Documents/СогласиеНаОбработкуПерсональныхДанных/Templates/ПФ_MXL_СогласиеНаОбработкуПерсональныхДанных/Template.mxlx similarity index 85% rename from SSL/src/DataProcessors/СогласиеНаОбработкуПерсональныхДанных/Templates/ПФ_MXL_СогласиеНаОбработкуПерсональныхДанных/Template.mxlx rename to SSL/src/Documents/СогласиеНаОбработкуПерсональныхДанных/Templates/ПФ_MXL_СогласиеНаОбработкуПерсональныхДанных/Template.mxlx index fdae23e0c..b1a805625 100644 --- a/SSL/src/DataProcessors/СогласиеНаОбработкуПерсональныхДанных/Templates/ПФ_MXL_СогласиеНаОбработкуПерсональныхДанных/Template.mxlx +++ b/SSL/src/Documents/СогласиеНаОбработкуПерсональныхДанных/Templates/ПФ_MXL_СогласиеНаОбработкуПерсональныхДанных/Template.mxlx @@ -217,7 +217,7 @@ - 1 + 0 3 @@ -235,173 +235,7 @@ - 3 - - - 1 - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - - 4 + 2 3 @@ -568,7 +402,7 @@ - 5 + 3 3 @@ -683,11 +517,67 @@ + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + - 6 + 4 + 3 1 @@ -791,75 +681,76 @@ - 2 + 5 - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - - 7 - - - 1 7 + + + 7 + + + + + 7 + + + + + 7 + + + + + 7 + + + + + 7 + + + + + 7 + + + + + 7 + + + + + 7 + + + + + 7 + + + + + 7 + + + + + + 5 + + 3 + + 1 + + 8 + + 2 @@ -1018,12 +909,13 @@ - 8 + 6 + 3 1 - 8 + 9 ru @@ -1189,9 +1081,344 @@ + + 7 + + 3 + + 1 + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + + 8 + + 3 + + 1 + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + 9 + 3 1 @@ -1358,10 +1585,11 @@ 10 + 3 1 - 2 + 8 @@ -1524,513 +1752,16 @@ 11 + 3 1 - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - - 12 - - - 1 - - 9 - - - - - 9 - - - - - 9 - - - - - 9 - - - - - 9 - - - - - 9 - - - - - 9 - - - - - 9 - - - - - 9 - - - - - 9 - - - - - 9 - - - - - 9 - - - - - 9 - - - - - 9 - - - - - 9 - - - - - 9 - - - - - 9 - - - - - 9 - - - - - 9 - - - - - 9 - - - - - 9 - - - - - 9 - - - - - 9 - - - - - 9 - - - - - 9 - - - - - 9 - - - - - 9 - - - - - 9 - - - - - 9 - - - - - 9 - - - - - 9 - - - - - 9 - - - - - - 13 - - - 1 - - 7 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - - 14 - - - 1 - - 7 + 8 ru - 1. Субъект дает согласие на обработку Оператором своих персональных данных, то есть совершение следующих действий: сбор, систематизация, накопление, хранение, уточнение (обновление, изменение), использование, распространение (в том числе передачу), обезличивание, блокирование, уничтожение персональных данных, при этом описание вышеуказанных способов обработки данных приведено в Федеральном законе от 27.07.2006 № 152-ФЗ «О персональных данных», в следующих целях: - - в целях исполнения трудового договора; + 1. В соответствии со статьей 9 Федерального закона от 27.07.2006 № 152-ФЗ «О персональных данных» субъект персональных данных дает согласие на обработку Оператором своих персональных данных, с целью: + - исполнения трудового договора; - для обеспечения личной безопасности, защиты жизни и здоровья работника; - в целях ведения финансово-хозяйственной деятельности организации; - иное (необходимо точное указание целей). @@ -2195,9 +1926,511 @@ + + 12 + + 3 + + 1 + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + + 13 + + 3 + + 1 + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + + 14 + + 3 + + 1 + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + 15 + 3 1 @@ -2364,6 +2597,7 @@ 16 + 3 1 @@ -2530,6 +2764,7 @@ 17 + 3 1 @@ -2696,165 +2931,166 @@ 18 + 3 1 - 2 + 10 - 2 + 11 - 2 + 11 - 2 + 11 - 2 + 11 - 2 + 11 - 2 + 11 - 2 + 11 - 2 + 11 - 2 + 11 - 2 + 11 - 2 + 11 - 2 + 11 - 2 + 11 - 2 + 11 - 2 + 11 - 2 + 11 - 2 + 11 - 2 + 11 - 2 + 11 - 2 + 11 - 2 + 11 - 2 + 11 - 2 + 11 - 2 + 11 - 2 + 11 - 2 + 11 - 2 + 11 - 2 + 11 - 2 + 11 - 2 + 11 - 2 + 11 @@ -2862,10 +3098,11 @@ 19 + 3 1 - 2 + 10 @@ -3028,6 +3265,7 @@ 20 + 3 1 @@ -3194,670 +3432,7 @@ 21 - - 1 - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - - 22 - - - 1 - - 10 - - - - - 11 - - - - - 11 - - - - - 11 - - - - - 11 - - - - - 11 - - - - - 11 - - - - - 11 - - - - - 11 - - - - - 11 - - - - - 11 - - - - - 11 - - - - - 11 - - - - - 11 - - - - - 11 - - - - - 11 - - - - - 11 - - - - - 11 - - - - - 11 - - - - - 11 - - - - - 11 - - - - - 11 - - - - - 11 - - - - - 11 - - - - - 11 - - - - - 11 - - - - - 11 - - - - - 11 - - - - - 11 - - - - - 11 - - - - - 11 - - - - - 11 - - - - - - 23 - - - 1 - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - - 24 - - - 1 - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - - 25 - + 3 1 @@ -3865,7 +3440,7 @@ ru - 2. Перечень персональных данных, передаваемых Оператору на обработку (нужное подчеркнуть): + 2. Перечень персональных данных, на обработку которых дается согласие (нужное подчеркнуть): - дата и место рождения; - биографические сведения; - сведения об образовании (образовательное учреждение, время обучения, присвоенная квалификация); @@ -3873,7 +3448,6 @@ - сведения о семейном положении, детях (фамилия, имя, отчество, дата рождения); - сведения о месте регистрации, проживании; - контактная информация; - - паспортные данные; - сведения о постановке на налоговый учет (ИНН); - сведения о регистрации в Пенсионном фонде (номер страхового свидетельства); - сведения об открытых банковских счетах; @@ -4040,9 +3614,678 @@ + + 22 + + 3 + + 1 + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + + 23 + + 3 + + 1 + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + + 24 + + 3 + + 1 + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + + 25 + + 3 + + 1 + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + 26 + 3 1 @@ -4209,6 +4452,7 @@ 27 + 3 1 @@ -4375,6 +4619,7 @@ 28 + 3 1 @@ -4541,6 +4786,7 @@ 29 + 3 1 @@ -4707,6 +4953,7 @@ 30 + 3 1 @@ -4873,6 +5120,7 @@ 31 + 3 1 @@ -5039,6 +5287,7 @@ 32 + 3 1 @@ -5205,670 +5454,7 @@ 33 - - 1 - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - - 34 - - - 1 - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - - 35 - - - 1 - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - - 36 - - - 1 - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - - 37 - + 3 1 @@ -6033,12 +5619,13 @@ - 38 + 34 + 3 1 - 12 + 13 @@ -6199,12 +5786,13 @@ - 39 + 35 + 3 1 - 7 + 8 @@ -6365,844 +5953,9 @@ - 40 - - - 1 - - 7 - - - ru - 3. В соответствии с пунктом 4 статьи 14 Федерального закона от 27.07.2006 № 152-ФЗ «О персональных данных» субъект персональных данных по письменному запросу имеет право на получение информации, касающейся обработки его персональных данных. - - - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - - 41 - - - 1 - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - - 42 - - - 1 - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - - 43 - - - 1 - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - - 44 - - - 1 - - 15 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - - 45 + 36 + 3 1 @@ -7210,853 +5963,14 @@ ru - 4. Срок действия данного согласия устанавливается на период: - - с ____________________________ по ____________________________ - - - - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - - 46 - - - 1 - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - - 47 - - - 1 - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - - 48 - - - 1 - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - - 49 - - - 1 - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - - 50 - - - 1 - - 9 - - - ru - 5. Оператор вправе осуществлять следующие действия с указанными выше персональными данными (нужное подчеркнуть): + 3. Оператор вправе осуществлять следующие действия с указанными выше персональными данными путем автоматизированной обработки и обработки без использования средств автоматизации (нужное подчеркнуть): - сбор; - систематизацию; - накопление; - хранение; - уточнение (обновление, изменение); - использование; - - распространение/передачу ; + - распространение/передачу; - блокирование; - уничтожение; - иное (необходимо точное указание). @@ -8222,9 +6136,2354 @@ + + 37 + + 3 + + 1 + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + + 38 + + 3 + + 1 + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + + 39 + + 3 + + 1 + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + + 40 + + 3 + + 1 + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + + 41 + + 3 + + 1 + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + + 42 + + 3 + + 1 + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + + 43 + + 3 + + 1 + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + + 44 + + 3 + + 1 + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + + 45 + + 3 + + 1 + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + + 46 + + 3 + + 1 + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + + 47 + + 3 + + 1 + + 16 + + + + + 17 + + + + + 17 + + + + + 17 + + + + + 17 + + + + + 17 + + + + + 17 + + + + + 17 + + + + + 17 + + + + + 17 + + + + + 17 + + + + + 17 + + + + + 17 + + + + + 17 + + + + + 17 + + + + + 17 + + + + + 17 + + + + + 17 + + + + + 17 + + + + + 17 + + + + + 17 + + + + + 17 + + + + + 17 + + + + + 17 + + + + + 17 + + + + + 17 + + + + + 17 + + + + + 17 + + + + + 17 + + + + + 17 + + + + + 17 + + + + + 17 + + + + + + 48 + + 3 + + 1 + + 16 + + + + + 18 + + + + + 18 + + + + + 18 + + + + + 18 + + + + + 18 + + + + + 18 + + + + + 18 + + + + + 18 + + + + + 18 + + + + + 18 + + + + + 18 + + + + + 18 + + + + + 18 + + + + + 18 + + + + + 18 + + + + + 18 + + + + + 18 + + + + + 18 + + + + + 18 + + + + + 18 + + + + + 18 + + + + + 18 + + + + + 18 + + + + + 18 + + + + + 18 + + + + + 18 + + + + + 18 + + + + + 18 + + + + + 18 + + + + + 18 + + + + + 18 + + + + + + 49 + + 3 + + 1 + + 8 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + + 50 + + 3 + + 1 + + 8 + + + ru + 4. Субъект персональных данных имеет право на доступ к его персональным данным в порядке, определенном статьей 14 Федерального закона от 27.07.2006 № 152-ФЗ «О персональных данных». + + + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + 51 + 3 1 @@ -8391,6 +8650,7 @@ 52 + 3 1 @@ -8557,10 +8817,11 @@ 53 + 3 1 - 2 + 18 @@ -8723,10 +8984,17 @@ 54 + 3 1 - 2 + 19 + + + ru + 5. Срок действия данного согласия устанавливается на период: [ПериодДействия] + + @@ -8889,165 +9157,166 @@ 55 + 3 1 - 2 + 18 - 2 + 18 - 2 + 18 - 2 + 18 - 2 + 18 - 2 + 18 - 2 + 18 - 2 + 18 - 2 + 18 - 2 + 18 - 2 + 18 - 2 + 18 - 2 + 18 - 2 + 18 - 2 + 18 - 2 + 18 - 2 + 18 - 2 + 18 - 2 + 18 - 2 + 18 - 2 + 18 - 2 + 18 - 2 + 18 - 2 + 18 - 2 + 18 - 2 + 18 - 2 + 18 - 2 + 18 - 2 + 18 - 2 + 18 - 2 + 18 - 2 + 18 @@ -9055,165 +9324,166 @@ 56 + 3 1 - 2 + 18 - 2 + 18 - 2 + 18 - 2 + 18 - 2 + 18 - 2 + 18 - 2 + 18 - 2 + 18 - 2 + 18 - 2 + 18 - 2 + 18 - 2 + 18 - 2 + 18 - 2 + 18 - 2 + 18 - 2 + 18 - 2 + 18 - 2 + 18 - 2 + 18 - 2 + 18 - 2 + 18 - 2 + 18 - 2 + 18 - 2 + 18 - 2 + 18 - 2 + 18 - 2 + 18 - 2 + 18 - 2 + 18 - 2 + 18 - 2 + 18 - 2 + 18 @@ -9221,1172 +9491,11 @@ 57 + 3 1 - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - - 58 - - - 1 - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - - 59 - - - 1 - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - - 60 - - - 1 - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - - 61 - - - 1 - - 16 - - - - - 17 - - - - - 17 - - - - - 17 - - - - - 17 - - - - - 17 - - - - - 17 - - - - - 17 - - - - - 17 - - - - - 17 - - - - - 17 - - - - - 17 - - - - - 17 - - - - - 17 - - - - - 17 - - - - - 17 - - - - - 17 - - - - - 17 - - - - - 17 - - - - - 17 - - - - - 17 - - - - - 17 - - - - - 17 - - - - - 17 - - - - - 17 - - - - - 17 - - - - - 17 - - - - - 17 - - - - - 17 - - - - - 17 - - - - - 17 - - - - - 17 - - - - - - 62 - - - 1 - - 15 - - - - - 15 - - - - - 15 - - - - - 15 - - - - - 15 - - - - - 15 - - - - - 15 - - - - - 15 - - - - - 15 - - - - - 15 - - - - - 15 - - - - - 15 - - - - - 15 - - - - - 15 - - - - - 15 - - - - - 15 - - - - - 15 - - - - - 15 - - - - - 15 - - - - - 15 - - - - - 15 - - - - - 15 - - - - - 15 - - - - - 15 - - - - - 15 - - - - - 15 - - - - - 15 - - - - - 15 - - - - - 15 - - - - - 15 - - - - - 15 - - - - - 15 - - - - - - 63 - - - 1 - - 15 - - - - - 15 - - - - - 15 - - - - - 15 - - - - - 15 - - - - - 15 - - - - - 15 - - - - - 15 - - - - - 15 - - - - - 15 - - - - - 15 - - - - - 15 - - - - - 15 - - - - - 15 - - - - - 15 - - - - - 15 - - - - - 15 - - - - - 15 - - - - - 15 - - - - - 15 - - - - - 15 - - - - - 15 - - - - - 15 - - - - - 15 - - - - - 15 - - - - - 15 - - - - - 15 - - - - - 15 - - - - - 15 - - - - - 15 - - - - - 15 - - - - - 15 - - - - - - 64 - - - 1 - - 7 + 8 ru @@ -10552,9 +9661,716 @@ + + 58 + + 3 + + 1 + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + + 59 + + 3 + + 1 + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + + 60 + + 3 + + 1 + + 2 + + + ru + Данные об операторе персональных данных: + + + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + + 61 + + 3 + + 1 + + 2 + + + ru + Наименование организации + + + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 20 + + + ru + [Организация] + + + + + + + + 62 + + 3 + + 1 + + 2 + + + ru + Адрес оператора + + + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 20 + + + ru + [АдресОрганизации] + + + + + + + + 63 + + 3 + + 1 + + 2 + + + ru + Ответственный за обработку персональных данных + + + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 20 + + + ru + [ОтветственныйЗаОбработкуПерсональныхДанных] + + + + + + + + 64 + + 3 + + 1 + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + + 2 + + + + 65 + 3 1 @@ -10721,895 +10537,7 @@ 66 - - 1 - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - - 67 - - - 1 - - 18 - - - ru - Данные об операторе персональных данных: - - - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - - 68 - - - 1 - - 2 - - - ru - Наименование организации - - - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 19 - - - ru - [Организация] - - - - - - - - 69 - - - 1 - - 2 - - - ru - Адрес оператора - - - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 19 - - - ru - [АдресОрганизации] - - - - - - - - 70 - - - 1 - - 2 - - - ru - Ответственный за обработку персональных данных - - - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 19 - - - ru - [ОтветственныйЗаОбработкуПерсональныхДанных] - - - - - - - - 71 - - - 1 - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - - 72 - - - 1 - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - - 73 - + 3 1 @@ -11662,126 +10590,12 @@ 2 - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - 74 + 67 + 3 1 @@ -11831,7 +10645,7 @@ - 19 + 20 ru @@ -11843,8 +10657,9 @@ - 75 + 68 + 3 1 @@ -11869,7 +10684,7 @@ - 19 + 20 ru @@ -11881,12 +10696,13 @@ - 76 + 69 + 3 1 - 20 + 21 ru @@ -11898,14 +10714,16 @@ - 77 + 70 + 3 true - 78 + 71 + 3 1 @@ -11994,75 +10812,11 @@ - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 + 22 + 32 2 @@ -12070,8 +10824,9 @@ - 79 + 72 + 3 1 @@ -12108,197 +10863,6 @@ 2 - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - - 80 - - - 1 - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - 11 @@ -12351,7 +10915,7 @@ - 21 + 23 ru @@ -12369,8 +10933,9 @@ - 81 + 73 + 3 1 @@ -12407,31 +10972,6 @@ 2 - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - 22 @@ -12485,7 +11025,7 @@ - 2 + 22 @@ -12500,46 +11040,7 @@ - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - - - 2 - - - + 32 2 @@ -12547,113 +11048,117 @@ true - 23 - 83 - 83 + 24 + 74 + 74 - 1 + 0 1 1 31 - 5 + 3 21 11 - 8 + 6 1 3 31 - 14 + 11 1 - 7 + 6 31 - 25 + 21 1 11 31 - 40 - 1 - 2 - 31 - - - 45 - 1 - 2 - 31 - - - 50 + 36 1 10 31 - 64 + 50 + 1 + 2 + 31 + + + 54 1 31 - 68 + 57 + 1 + 31 + + + 61 10 22 - 69 + 62 7 25 - 70 + 63 16 16 - 74 + 64 + 16 + 16 + + + 67 9 23 - 75 + 68 4 28 - 76 + 69 1 1 31 - 80 - 23 + 72 + 18 + 13 + + + 73 + 8 8 - 81 - 13 - 8 - - - 81 - 23 - 8 + 73 + 18 + 13 Заголовок Rows 0 - 3 + 1 -1 -1 @@ -12662,8 +11167,8 @@ НомерДата Rows - 5 - 6 + 3 + 4 -1 -1 @@ -12672,8 +11177,8 @@ П1_ЦелиОбработкиПДн Rows - 14 - 23 + 11 + 19 -1 -1 @@ -12682,38 +11187,38 @@ П2_СоставПДн Rows - 25 - 38 + 21 + 34 -1 -1 - П3_ПравоПолученияИнформации + П3_ДействияСПДн Rows - 40 - 43 - -1 - -1 - - - - П4_СрокДействия - - Rows - 45 + 36 48 -1 -1 - П5_ДействияСПДн + П4_ПравоПолученияИнформации Rows 50 - 62 + 52 + -1 + -1 + + + + П5_СрокДействия + + Rows + 54 + 55 -1 -1 @@ -12722,8 +11227,8 @@ П6_ПравоОтзыва Rows - 64 - 65 + 57 + 58 -1 -1 @@ -12732,8 +11237,8 @@ Преамбула Rows - 8 - 12 + 6 + 9 -1 -1 @@ -12742,8 +11247,8 @@ РеквизитыОператора Rows - 67 - 71 + 60 + 64 -1 -1 @@ -12752,8 +11257,8 @@ РеквизитыСубъекта Rows - 73 - 81 + 66 + 73 -1 -1 @@ -12784,10 +11289,8 @@ Solid - - - - + + 0 8 @@ -12815,6 +11318,10 @@ Right Template + + 0 + Right + 0 24 @@ -12830,12 +11337,6 @@ Wrap Template - - 0 - 24 - Top - Wrap - 0 0 @@ -12870,6 +11371,7 @@ 0 24 Top + Wrap 0 @@ -12884,8 +11386,15 @@ Top - 2 + 0 24 + Top + + + 0 + 24 + Top + Template 0 @@ -12901,6 +11410,11 @@ Wrap Template + + 0 + 24 + Center + 0 1 @@ -12908,11 +11422,6 @@ Center Template - - 3 - 24 - Center - 0 72 diff --git a/SSL/src/Documents/СогласиеНаОбработкуПерсональныхДанных/Templates/ПФ_ODT_СогласиеНаОбработкуПерсональныхДанных/Template.bin b/SSL/src/Documents/СогласиеНаОбработкуПерсональныхДанных/Templates/ПФ_ODT_СогласиеНаОбработкуПерсональныхДанных/Template.bin new file mode 100644 index 000000000..906aac6d0 Binary files /dev/null and b/SSL/src/Documents/СогласиеНаОбработкуПерсональныхДанных/Templates/ПФ_ODT_СогласиеНаОбработкуПерсональныхДанных/Template.bin differ diff --git a/SSL/src/Documents/СогласиеНаОбработкуПерсональныхДанных/СогласиеНаОбработкуПерсональныхДанных.mdo b/SSL/src/Documents/СогласиеНаОбработкуПерсональныхДанных/СогласиеНаОбработкуПерсональныхДанных.mdo new file mode 100644 index 000000000..8d5a2e05f --- /dev/null +++ b/SSL/src/Documents/СогласиеНаОбработкуПерсональныхДанных/СогласиеНаОбработкуПерсональныхДанных.mdo @@ -0,0 +1,349 @@ + + + + + + + + + + СогласиеНаОбработкуПерсональныхДанных + + ru + Согласие на обработку персональных данных + + true + Document.СогласиеНаОбработкуПерсональныхДанных.StandardAttribute.Number + DontUse + + Use + Posted + + Use + + + + + Use + Ref + + Use + + + + + Use + DeletionMark + + Use + + + + + Use + Date + + ShowError + Use + + + + + Use + Number + + Use + + + + Use + + + ru + + + Managed + Use + + ru + Согласие на обработку ПДн + + + ru + Согласия на обработку ПДн + + + ru + Согласия на обработку персональных данных + + + ru + Согласие субъекта на обработку его персональных данных оператором в соответствии с требованиями 152-ФЗ + + String + 11 + Variable + true + true + Document.СогласиеНаОбработкуПерсональныхДанных.Form.ФормаДокумента + Deny + InformationRegister.СогласияНаОбработкуПерсональныхДанных + true + true + + Организация + + ru + Организация + + + CatalogRef.Организации + + + ru + Оператор персональных данных + + + + ShowError + + Use + Use + + + ЮридическийАдресОрганизации + + ru + Юридический адрес организации + + + String + + 150 + + + + + + Use + Use + + + ОтветственныйЗаОбработкуПерсональныхДанных + + ru + Ответственный за обработку персональных данных + + + CatalogRef.Пользователи + + + ru + Ответственный за обработку персональных данных в организации + + + + + Use + Use + + + Субъект + + ru + Субъект + + + DefinedType.СубъектПерсональныхДанных + + + ru + Субъект, предоставляющий согласие на обработку персональных данных + + + + ShowError + + Use + Use + + + ФИОСубъекта + + ru + ФИО субъекта + + + String + + 150 + + + + ru + Фамилия, имя и отчество субъекта персональных данных + + + + + Use + Use + + + АдресСубъекта + + ru + Адрес субъекта + + + String + + 150 + + + + + + Use + Use + + + ПаспортныеДанные + + ru + Паспортные данные + + + String + + 150 + + + + ru + Реквизиты паспорта субъекта + + + + + Use + Use + + + ДатаПолучения + + ru + Дата получения + + + Date + + Date + + + + ru + Дата получения согласия + + + + ShowError + + Use + Use + + + СрокДействия + + ru + Срок действия + + + Date + + Date + + + + ru + Дата, до которой будет действовать согласие. Если не указано, то согласие действует бессрочно. + + + + + Use + Use + + + Ответственный + + ru + Ответственный + + + CatalogRef.Пользователи + + + ru + Пользователь, который оформил документ + + + + + Use + Use + + + Комментарий + + ru + Комментарий + + + String + + + + ru + Произвольный текст + + true + + + + Use + Use + + + ФормаДокумента + + ru + Форма документа + + PersonalComputer + MobileDevice + + + ПФ_MXL_СогласиеНаОбработкуПерсональныхДанных + + ru + Согласие на обработку персональных данных (табличный документ 1С:Предприятия) + + + + ПФ_DOC_СогласиеНаОбработкуПерсональныхДанных + + ru + Cогласие на обработку персональных данных (документ Microsoft Word) + + BinaryData + + + ПФ_ODT_СогласиеНаОбработкуПерсональныхДанных + + ru + Cогласие на обработку персональных данных (документ OpenOffice.org Writer) + + BinaryData + + diff --git a/SSL/src/Documents/СообщениеSMS/Forms/ФормаВыбора/Attributes/Список/ExtInfo/ListSettings.dcss b/SSL/src/Documents/СообщениеSMS/Forms/ФормаВыбора/Attributes/Список/ExtInfo/ListSettings.dcss new file mode 100644 index 000000000..61e6fb4bb --- /dev/null +++ b/SSL/src/Documents/СообщениеSMS/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/Documents/СообщениеSMS/Forms/ФормаВыбора/Form.form b/SSL/src/Documents/СообщениеSMS/Forms/ФормаВыбора/Form.form new file mode 100644 index 000000000..d95f1d159 --- /dev/null +++ b/SSL/src/Documents/СообщениеSMS/Forms/ФормаВыбора/Form.form @@ -0,0 +1,463 @@ + + + + СписокКомпоновщикНастроекПользовательскиеНастройки + 1 + true + true + + true + + + <key>ru</key> + <value>Группа пользовательских настроек</value> + + false + + СписокКомпоновщикНастроекПользовательскиеНастройкиРасширеннаяПодсказка + 2 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + WeakSeparation + true + true + Auto + Auto + + + + Список + 3 + true + true + + true + + + Список + + true + None + + Дата + 16 + true + true + + true + + + Список.Date + + true + + ДатаРасширеннаяПодсказка + 18 + Label + true + true + + Left + + + + ДатаКонтекстноеМеню + 17 + true + + LabelField + Enter + true + Left + true + + true + true + + + + Номер + 19 + true + true + + true + + + Список.Number + + + НомерРасширеннаяПодсказка + 21 + Label + true + true + + Left + + + + НомерКонтекстноеМеню + 20 + 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 + + + + Предмет + 31 + true + true + + true + + + Список.Предмет + + + ПредметРасширеннаяПодсказка + 33 + Label + true + true + + Left + + + + ПредметКонтекстноеМеню + 32 + 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 + + + + Ссылка + 28 + true + true + + + Список.Ref + + + СсылкаРасширеннаяПодсказка + 30 + Label + true + true + + Left + + + + СсылкаКонтекстноеМеню + 29 + true + + LabelField + Enter + true + Left + true + + true + true + + + None + + СписокКоманднаяПанель + 5 + Left + + + СписокСтрокаПоиска + 7 + + СписокСтрокаПоискаРасширеннаяПодсказка + 9 + Label + true + true + + Left + + + + СписокСтрокаПоискаКонтекстноеМеню + 8 + true + + Список + + true + + + + СписокСостояниеПросмотра + 10 + + СписокСостояниеПросмотраРасширеннаяПодсказка + 12 + Label + true + true + + Left + + + + СписокСостояниеПросмотраКонтекстноеМеню + 11 + true + + ViewStatusAddition + Список + + true + + + + СписокУправлениеПоиском + 13 + + СписокУправлениеПоискомРасширеннаяПодсказка + 15 + Label + true + true + + Left + + + + СписокУправлениеПоискомКонтекстноеМеню + 14 + true + + SearchControlAddition + Список + + true + + + + СписокРасширеннаяПодсказка + 6 + Label + true + true + + Left + + + + СписокКонтекстноеМеню + 4 + true + + true + true + true + true + true + true + MultiRow +
        true
        + 1 + 1 + AutoUse + AutoUse + true + true + Auto + Auto + ExpandTopLevel + true + true + true + + Список.DefaultPicture + + None + None + true + + 60 + + 0001-01-01T00:00:00 + 0001-01-01T00:00:00 + + + true + true + СписокКомпоновщикНастроекПользовательскиеНастройки + +
        + + ФормаКоманднаяПанель + -1 + Left + true + + LockOwner + true + true + true + Vertical + true + true + true + auto + true + + Список + 1 + + DynamicList + + + true + + + true + +
        true
        + + ВЫБРАТЬ + ДокументСообщениеSMS.Ссылка, + ДокументСообщениеSMS.ПометкаУдаления, + ДокументСообщениеSMS.Номер, + ДокументСообщениеSMS.Дата, + ДокументСообщениеSMS.Проведен, + ДокументСообщениеSMS.Автор, + ДокументСообщениеSMS.Важность, + ДокументСообщениеSMS.Ответственный, + ДокументСообщениеSMS.СписокУчастников, + ДокументСообщениеSMS.ВзаимодействиеОснование, + ДокументСообщениеSMS.Тема, + ДокументСообщениеSMS.Комментарий, + ДокументСообщениеSMS.ОтправлятьВТранслите, + ДокументСообщениеSMS.ТекстСообщения, + ДокументСообщениеSMS.Состояние, + ДокументСообщениеSMS.ДатаКогдаОтправить, + ДокументСообщениеSMS.ДатаАктуальностиОтправки, + ПредметыПапкиВзаимодействий.Предмет, + ПредметыПапкиВзаимодействий.Рассмотрено, + ПредметыПапкиВзаимодействий.РассмотретьПосле +ИЗ + Документ.СообщениеSMS КАК ДокументСообщениеSMS + ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ПредметыПапкиВзаимодействий КАК ПредметыПапкиВзаимодействий + ПО ПредметыПапкиВзаимодействий.Взаимодействие = ДокументСообщениеSMS.Ссылка + Document.СообщениеSMS + true + true + true + true + true + +
        + + + + + +
        diff --git a/SSL/src/Documents/СообщениеSMS/Forms/ФормаДокумента/Form.form b/SSL/src/Documents/СообщениеSMS/Forms/ФормаДокумента/Form.form index 8affd731f..d4cb2bf92 100644 --- a/SSL/src/Documents/СообщениеSMS/Forms/ФормаДокумента/Form.form +++ b/SSL/src/Documents/СообщениеSMS/Forms/ФормаДокумента/Form.form @@ -789,6 +789,10 @@ Pages + + OnCurrentPageChange + СтраницыКонтактыДопРеквизитыКомментарийПриСменеСтраницы + TabsOnTop Auto @@ -865,6 +869,7 @@ 25 true true + false true true true @@ -1575,32 +1580,6 @@ ФормаКоманднаяПанель -1 - - ФормаСправка - 89 - true - true - - true - - - ФормаСправкаExtendedTooltip - 110 - Label - true - true - - Left - - - Form.StandardCommand.Help - Normal - Auto - true - true - UserCmds - Auto - ФормаОтправить 84 @@ -1734,6 +1713,39 @@ ГруппаГлобальныеКоманды 90 + + ФормаПоказатьВСписке + 183 + + <key>ru</key> + <value>Показать в списке</value> + + true + true + + true + + + ФормаПоказатьВСпискеРасширеннаяПодсказка + 184 + Label + true + true + + Left + + + Form.StandardCommand.ShowInList + + DocumentJournal.Взаимодействия + + Normal + Auto + true + true + UserCmds + Auto + true true @@ -1757,6 +1769,32 @@ FormCommandPanelGlobalCommands + + ФормаСправка + 89 + true + true + + true + + + ФормаСправкаExtendedTooltip + 110 + Label + true + true + + Left + + + Form.StandardCommand.Help + Normal + Auto + true + true + UserCmds + Auto + Left @@ -1783,7 +1821,6 @@ true true true - UseIfNecessary auto true @@ -2051,7 +2088,7 @@ Text - Auto + DontUse Auto @@ -2073,7 +2110,7 @@ Отправить - Auto + DontUse Auto @@ -2095,7 +2132,7 @@ ПроверитьСтатусыДоставки - Auto + DontUse Auto diff --git a/SSL/src/Documents/СообщениеSMS/Forms/ФормаДокумента/Module.bsl b/SSL/src/Documents/СообщениеSMS/Forms/ФормаДокумента/Module.bsl index 795e724c4..2d83f5de7 100644 --- a/SSL/src/Documents/СообщениеSMS/Forms/ФормаДокумента/Module.bsl +++ b/SSL/src/Documents/СообщениеSMS/Forms/ФормаДокумента/Module.bsl @@ -32,9 +32,18 @@ // Подготовить оповещения взаимодействий. Взаимодействия.ПодготовитьОповещения(ЭтотОбъект, Параметры); + // СтандартныеПодсистемы.ДополнительныеОтчетыИОбработки + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ДополнительныеОтчетыИОбработки") Тогда + МодульДополнительныеОтчетыИОбработки = ОбщегоНазначения.ОбщийМодуль("ДополнительныеОтчетыИОбработки"); + МодульДополнительныеОтчетыИОбработки.ПриСозданииНаСервере(ЭтотОбъект); + КонецЕсли; + + // Конец СтандартныеПодсистемы.ДополнительныеОтчетыИОбработки + // СтандартныеПодсистемы.Свойства ДополнительныеПараметры = Новый Структура; ДополнительныеПараметры.Вставить("ИмяЭлементаДляРазмещения", "СтраницаДополнительныеРеквизиты"); + ДополнительныеПараметры.Вставить("ОтложеннаяИнициализация", Истина); УправлениеСвойствами.ПриСозданииНаСервере(ЭтотОбъект, ДополнительныеПараметры); // Конец СтандартныеПодсистемы.Свойства @@ -50,7 +59,7 @@ &НаСервере Процедура ПослеЗаписиНаСервере(ТекущийОбъект, ПараметрыЗаписи) - Элементы.СтраницаКомментарий.Картинка = ОбщегоНазначения.ПолучитьКартинкуКомментария(Объект.Комментарий); + Элементы.СтраницаКомментарий.Картинка = ОбщегоНазначенияКлиентСервер.КартинкаКомментария(Объект.Комментарий); КонецПроцедуры @@ -70,6 +79,10 @@ &НаКлиенте Процедура ПриОткрытии(Отказ) + // СтандартныеПодсистемы.Свойства + УправлениеСвойствамиКлиент.ПослеЗагрузкиДополнительныхРеквизитов(ЭтотОбъект); + // Конец СтандартныеПодсистемы.Свойства + ПроверитьДоступностьСозданияКонтакта(); КонецПроцедуры @@ -80,6 +93,7 @@ // СтандартныеПодсистемы.Свойства Если УправлениеСвойствамиКлиент.ОбрабатыватьОповещения(ЭтотОбъект, ИмяСобытия, Параметр) Тогда ОбновитьЭлементыДополнительныхРеквизитов(); + УправлениеСвойствамиКлиент.ПослеЗагрузкиДополнительныхРеквизитов(ЭтотОбъект); КонецЕсли; // Конец СтандартныеПодсистемы.Свойства @@ -134,6 +148,20 @@ #Область ОбработчикиСобытийЭлементовШапкиФормы +&НаКлиенте +Процедура СтраницыКонтактыДопРеквизитыКомментарийПриСменеСтраницы(Элемент, ТекущаяСтраница) + + // СтандартныеПодсистемы.Свойства + Если ТекущаяСтраница.Имя = "СтраницаДополнительныеРеквизиты" + И Не ЭтотОбъект.ПараметрыСвойств.ВыполненаОтложеннаяИнициализация Тогда + + СвойстваВыполнитьОтложеннуюИнициализацию(); + УправлениеСвойствамиКлиент.ПослеЗагрузкиДополнительныхРеквизитов(ЭтотОбъект); + КонецЕсли; + // Конец СтандартныеПодсистемы.Свойства + +КонецПроцедуры + &НаКлиенте Процедура РассмотретьПослеОбработкаВыбора(Элемент, ВыбранноеЗначение, СтандартнаяОбработка) @@ -281,6 +309,25 @@ // Конец СтандартныеПодсистемы.Свойства +// СтандартныеПодсистемы.ДополнительныеОтчетыИОбработки +&НаКлиенте +Процедура Подключаемый_ВыполнитьНазначаемуюКоманду(Команда) + + Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("ДополнительныеОтчетыИОбработки") Тогда + + МодульДополнительныеОтчетыИОбработкиКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("ДополнительныеОтчетыИОбработкиКлиент"); + + Если НЕ МодульДополнительныеОтчетыИОбработкиКлиент.ВыполнитьНазначаемуюКомандуНаКлиенте(ЭтотОбъект, Команда.Имя) Тогда + РезультатВыполнения = Неопределено; + ДополнительныеОтчетыИОбработкиВыполнитьНазначаемуюКомандуНаСервере(Команда.Имя, РезультатВыполнения); + МодульДополнительныеОтчетыИОбработкиКлиент.ПоказатьРезультатВыполненияКоманды(ЭтотОбъект, РезультатВыполнения); + КонецЕсли; + + КонецЕсли; + +КонецПроцедуры +// Конец СтандартныеПодсистемы.ДополнительныеОтчетыИОбработки + #КонецОбласти #Область СлужебныеПроцедурыИФункции @@ -292,8 +339,22 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// Подсистема Свойства +// СтандартныеПодсистемы.Свойства + +&НаСервере +Процедура СвойстваВыполнитьОтложеннуюИнициализацию() + УправлениеСвойствами.ЗаполнитьДополнительныеРеквизитыВФорме(ЭтотОбъект); +КонецПроцедуры + +&НаКлиенте +Процедура ОбновитьЗависимостиДополнительныхРеквизитов() + УправлениеСвойствамиКлиент.ОбновитьЗависимостиДополнительныхРеквизитов(ЭтотОбъект); +КонецПроцедуры + +&НаКлиенте +Процедура Подключаемый_ПриИзмененииДополнительногоРеквизита(Элемент) + УправлениеСвойствамиКлиент.ОбновитьЗависимостиДополнительныхРеквизитов(ЭтотОбъект); +КонецПроцедуры &НаСервере Процедура ОбновитьЭлементыДополнительныхРеквизитов() @@ -302,15 +363,33 @@ КонецПроцедуры +// Конец СтандартныеПодсистемы.Свойства + +// СтандартныеПодсистемы.ДополнительныеОтчетыИОбработки + +&НаСервере +Процедура ДополнительныеОтчетыИОбработкиВыполнитьНазначаемуюКомандуНаСервере(ИмяЭлемента, РезультатВыполнения) + + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ДополнительныеОтчетыИОбработки") Тогда + МодульДополнительныеОтчетыИОбработки = ОбщегоНазначения.ОбщийМодуль("ДополнительныеОтчетыИОбработки"); + МодульДополнительныеОтчетыИОбработки.ВыполнитьНазначаемуюКомандуНаСервере(ЭтотОбъект, ИмяЭлемента, РезультатВыполнения); + КонецЕсли; + +КонецПроцедуры + +// Конец СтандартныеПодсистемы.ДополнительныеОтчетыИОбработки + + /////////////////////////////////////////////////////////////////////////////// // Прочее &НаКлиенте Процедура ПроверитьДоступностьСозданияКонтакта() - текДанные = Элементы.Адресаты.ТекущиеДанные; - Элементы.СоздатьКонтакт.Доступность = (Не Объект.Ссылка.Пустая()) И - ((текДанные <> Неопределено) И (НЕ ЗначениеЗаполнено(текДанные.Контакт))); + ТекДанные = Элементы.Адресаты.ТекущиеДанные; + Элементы.СоздатьКонтакт.Доступность = (Не Объект.Ссылка.Пустая()) + И ((ТекДанные <> Неопределено) + И (НЕ ЗначениеЗаполнено(ТекДанные.Контакт))); КонецПроцедуры @@ -324,7 +403,7 @@ ОсталосьСимволов = ВзаимодействияКлиентСервер.СформироватьИнформационнуюНадписьКоличествоСимволовСообщений( Объект.ОтправлятьВТранслите, Объект.ТекстСообщения); - Элементы.СтраницаКомментарий.Картинка = ОбщегоНазначения.ПолучитьКартинкуКомментария(Объект.Комментарий); + Элементы.СтраницаКомментарий.Картинка = ОбщегоНазначенияКлиентСервер.КартинкаКомментария(Объект.Комментарий); НаКонтроле = НЕ Рассмотрено; УправлениеДоступностью(ЭтотОбъект); КоличествоАдресатов = Объект.Адресаты.Количество(); @@ -374,7 +453,7 @@ Возврат; КонецЕсли; - Если СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(Адресат.КакСвязаться, ";", Истина).Количество() > 1 Тогда + Если СтрРазделить(Адресат.КакСвязаться, ";", Ложь).Количество() > 1 Тогда ОбщегоНазначенияКлиентСервер.СообщитьПользователю( НСтр("ru = 'Должен быть указан только один номер телефона'"), , @@ -394,8 +473,9 @@ Отказ); Возврат; Иначе - Адресат.НомерДляОтправки = ?(ЛЕВ(СтруктураПолей.КодСтраны,1)= "+", СтруктураПолей.КодСтраны,"+" + СтруктураПолей.КодСтраны) + - СтруктураПолей.КодГорода + СтруктураПолей.НомерТелефона; + Адресат.НомерДляОтправки = ?(ЛЕВ(СтруктураПолей.КодСтраны,1)= "+", + СтруктураПолей.КодСтраны, + "+" + СтруктураПолей.КодСтраны) + СтруктураПолей.КодГорода + СтруктураПолей.НомерТелефона; КонецЕсли; КонецПроцедуры @@ -444,10 +524,10 @@ Форма.Элементы.РассмотретьПосле.Доступность = Форма.НаКонтроле; Форма.Элементы.ГруппаДатаОтправкиАктуальность.Доступность = НЕ СообщениеОтправлено; - Форма.Элементы.АдресатыПроверитьСтатусыДоставки.Доступность = - Форма.ИнформационнаяБазаФайловая И - СообщениеОтправлено И - Форма.Объект.Состояние = ПредопределенноеЗначение("Перечисление.СостоянияДокументаСообщениеSMS.Доставляется"); + Форма.Элементы.АдресатыПроверитьСтатусыДоставки.Доступность = + Форма.ИнформационнаяБазаФайловая + И СообщениеОтправлено + И Форма.Объект.Состояние = ПредопределенноеЗначение("Перечисление.СостоянияДокументаСообщениеSMS.Доставляется"); КонецПроцедуры @@ -521,8 +601,8 @@ &НаКлиентеНаСервереБезКонтекста Функция СообщениеОтправлено(Состояние) - Возврат Состояние <> ПредопределенноеЗначение("Перечисление.СостоянияДокументаСообщениеSMS.Черновик") И - Состояние <> ПредопределенноеЗначение("Перечисление.СостоянияДокументаСообщениеSMS.Исходящее"); + Возврат Состояние <> ПредопределенноеЗначение("Перечисление.СостоянияДокументаСообщениеSMS.Черновик") + И Состояние <> ПредопределенноеЗначение("Перечисление.СостоянияДокументаСообщениеSMS.Исходящее"); КонецФункции; diff --git a/SSL/src/Documents/СообщениеSMS/Forms/ФормаСписка/Attributes/Список/ExtInfo/ListSettings.dcss b/SSL/src/Documents/СообщениеSMS/Forms/ФормаСписка/Attributes/Список/ExtInfo/ListSettings.dcss new file mode 100644 index 000000000..61e6fb4bb --- /dev/null +++ b/SSL/src/Documents/СообщениеSMS/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/Documents/СообщениеSMS/Forms/ФормаСписка/Form.form b/SSL/src/Documents/СообщениеSMS/Forms/ФормаСписка/Form.form new file mode 100644 index 000000000..065f49c1e --- /dev/null +++ b/SSL/src/Documents/СообщениеSMS/Forms/ФормаСписка/Form.form @@ -0,0 +1,299 @@ + + + + СписокКомпоновщикНастроекПользовательскиеНастройки + 1 + true + true + + true + + + <key>ru</key> + <value>Группа пользовательских настроек</value> + + false + + СписокКомпоновщикНастроекПользовательскиеНастройкиРасширеннаяПодсказка + 2 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + WeakSeparation + true + true + Auto + Auto + + + + Список + 3 + true + true + + true + + + Список + + true + None + + Дата + 16 + true + true + + true + + + Список.Date + + true + + ДатаРасширеннаяПодсказка + 18 + Label + true + true + + Left + + + + ДатаКонтекстноеМеню + 17 + true + + LabelField + Enter + true + Left + true + + true + true + + + + Номер + 19 + true + true + + true + + + Список.Number + + + НомерРасширеннаяПодсказка + 21 + Label + true + true + + Left + + + + НомерКонтекстноеМеню + 20 + true + + LabelField + Enter + true + Left + true + + true + true + + + None + + СписокКоманднаяПанель + 5 + Left + + + СписокСтрокаПоиска + 7 + + СписокСтрокаПоискаРасширеннаяПодсказка + 9 + Label + true + true + + Left + + + + СписокСтрокаПоискаКонтекстноеМеню + 8 + true + + Список + + true + + + + СписокСостояниеПросмотра + 10 + + СписокСостояниеПросмотраРасширеннаяПодсказка + 12 + Label + true + true + + Left + + + + СписокСостояниеПросмотраКонтекстноеМеню + 11 + true + + ViewStatusAddition + Список + + true + + + + СписокУправлениеПоиском + 13 + + СписокУправлениеПоискомРасширеннаяПодсказка + 15 + Label + true + true + + Left + + + + СписокУправлениеПоискомКонтекстноеМеню + 14 + true + + SearchControlAddition + Список + + true + + + + СписокРасширеннаяПодсказка + 6 + Label + true + true + + Left + + + + СписокКонтекстноеМеню + 4 + true + + true + true + true + true + true + MultiRow +
        true
        + 1 + 1 + AutoUse + AutoUse + true + true + Auto + Auto + ExpandTopLevel + true + true + true + + Список.DefaultPicture + + None + None + None + true + + 60 + + 0001-01-01T00:00:00 + 0001-01-01T00:00:00 + + + true + true + СписокКомпоновщикНастроекПользовательскиеНастройки + +
        + + ФормаКоманднаяПанель + -1 + Left + true + + + OnCreateAtServer + ПриСозданииНаСервере + + DontBlock + true + true + true + Vertical + true + true + true + auto + true + + Список + 1 + + DynamicList + + + true + + + true + +
        true
        + + Document.СообщениеSMS + true + true + true + true + +
        + + + + + +
        diff --git a/SSL/src/Documents/СообщениеSMS/Forms/ФормаСписка/Module.bsl b/SSL/src/Documents/СообщениеSMS/Forms/ФормаСписка/Module.bsl new file mode 100644 index 000000000..cfc494c8d --- /dev/null +++ b/SSL/src/Documents/СообщениеSMS/Forms/ФормаСписка/Module.bsl @@ -0,0 +1,19 @@ +#Область ОбработчикиСобытийФормы + +&НаСервере +Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) + + Если Параметры.Свойство("АвтоТест") Тогда + Возврат; + КонецЕсли; + + // СтандартныеПодсистемы.ДополнительныеОтчетыИОбработки + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ДополнительныеОтчетыИОбработки") Тогда + МодульДополнительныеОтчетыИОбработки = ОбщегоНазначения.ОбщийМодуль("ДополнительныеОтчетыИОбработки"); + МодульДополнительныеОтчетыИОбработки.ПриСозданииНаСервере(ЭтотОбъект); + КонецЕсли; + // Конец СтандартныеПодсистемы.ДополнительныеОтчетыИОбработки + +КонецПроцедуры + +#КонецОбласти diff --git a/SSL/src/Documents/СообщениеSMS/СообщениеSMS.mdo b/SSL/src/Documents/СообщениеSMS/СообщениеSMS.mdo index d29f377af..a870a484d 100644 --- a/SSL/src/Documents/СообщениеSMS/СообщениеSMS.mdo +++ b/SSL/src/Documents/СообщениеSMS/СообщениеSMS.mdo @@ -121,6 +121,8 @@ true true Document.СообщениеSMS.Form.ФормаДокумента + Document.СообщениеSMS.Form.ФормаСписка + Document.СообщениеSMS.Form.ФормаВыбора Deny true true @@ -432,6 +434,24 @@ PersonalComputer MobileDevice + + ФормаВыбора + + ru + Форма выбора + + PersonalComputer + MobileDevice + + + ФормаСписка + + ru + Форма списка + + PersonalComputer + MobileDevice + diff --git a/SSL/src/Documents/ТелефонныйЗвонок/Forms/ФормаВыбора/Attributes/Список/ExtInfo/ListSettings.dcss b/SSL/src/Documents/ТелефонныйЗвонок/Forms/ФормаВыбора/Attributes/Список/ExtInfo/ListSettings.dcss new file mode 100644 index 000000000..61e6fb4bb --- /dev/null +++ b/SSL/src/Documents/ТелефонныйЗвонок/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/Documents/ТелефонныйЗвонок/Forms/ФормаВыбора/Form.form b/SSL/src/Documents/ТелефонныйЗвонок/Forms/ФормаВыбора/Form.form new file mode 100644 index 000000000..74d081146 --- /dev/null +++ b/SSL/src/Documents/ТелефонныйЗвонок/Forms/ФормаВыбора/Form.form @@ -0,0 +1,462 @@ + + + + СписокКомпоновщикНастроекПользовательскиеНастройки + 1 + true + true + + true + + + <key>ru</key> + <value>Группа пользовательских настроек</value> + + false + + СписокКомпоновщикНастроекПользовательскиеНастройкиРасширеннаяПодсказка + 2 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + WeakSeparation + true + true + Auto + Auto + + + + Список + 3 + true + true + + true + + + Список + + true + None + + Дата + 19 + true + true + + true + + + Список.Date + + true + + ДатаРасширеннаяПодсказка + 21 + Label + true + true + + Left + + + + ДатаКонтекстноеМеню + 20 + true + + LabelField + Enter + true + Left + true + + true + true + + + + Номер + 22 + true + true + + true + + + Список.Number + + + НомерРасширеннаяПодсказка + 24 + Label + true + true + + Left + + + + НомерКонтекстноеМеню + 23 + true + + LabelField + Enter + true + Left + true + + true + true + + + + Описание + 28 + true + true + + true + + + Список.Описание + + + ОписаниеРасширеннаяПодсказка + 30 + Label + true + true + + Left + + + + ОписаниеКонтекстноеМеню + 29 + true + + LabelField + Enter + true + Left + true + + true + true + + + + Предмет + 31 + true + true + + true + + + Список.Предмет + + + ПредметРасширеннаяПодсказка + 33 + Label + true + true + + Left + + + + ПредметКонтекстноеМеню + 32 + true + + LabelField + Enter + true + Left + true + + true + true + + + + АбонентПредставление + 25 + true + true + + true + + + Список.АбонентПредставление + + + АбонентПредставлениеРасширеннаяПодсказка + 27 + Label + true + true + + Left + + + + АбонентПредставлениеКонтекстноеМеню + 26 + true + + LabelField + Enter + true + Left + true + + true + true + + + + Ссылка + 16 + true + true + + + Список.Ref + + + СсылкаРасширеннаяПодсказка + 18 + Label + true + true + + Left + + + + СсылкаКонтекстноеМеню + 17 + true + + LabelField + Enter + true + Left + true + + true + true + + + None + + СписокКоманднаяПанель + 5 + Left + + + СписокСтрокаПоиска + 7 + + СписокСтрокаПоискаРасширеннаяПодсказка + 9 + Label + true + true + + Left + + + + СписокСтрокаПоискаКонтекстноеМеню + 8 + true + + Список + + true + + + + СписокСостояниеПросмотра + 10 + + СписокСостояниеПросмотраРасширеннаяПодсказка + 12 + Label + true + true + + Left + + + + СписокСостояниеПросмотраКонтекстноеМеню + 11 + true + + ViewStatusAddition + Список + + true + + + + СписокУправлениеПоиском + 13 + + СписокУправлениеПоискомРасширеннаяПодсказка + 15 + Label + true + true + + Left + + + + СписокУправлениеПоискомКонтекстноеМеню + 14 + true + + SearchControlAddition + Список + + true + + + + СписокРасширеннаяПодсказка + 6 + Label + true + true + + Left + + + + СписокКонтекстноеМеню + 4 + true + + true + true + true + true + true + true + MultiRow +
        true
        + 1 + 1 + AutoUse + AutoUse + true + true + Auto + Auto + ExpandTopLevel + true + true + true + + Список.DefaultPicture + + None + None + true + + 60 + + 0001-01-01T00:00:00 + 0001-01-01T00:00:00 + + + true + true + СписокКомпоновщикНастроекПользовательскиеНастройки + +
        + + ФормаКоманднаяПанель + -1 + Left + true + + LockOwner + true + true + true + Vertical + true + true + true + auto + true + + Список + 1 + + DynamicList + + + true + + + true + +
        true
        + + ВЫБРАТЬ + ДокументТелефонныйЗвонок.Ссылка, + ДокументТелефонныйЗвонок.ПометкаУдаления, + ДокументТелефонныйЗвонок.Номер, + ДокументТелефонныйЗвонок.Дата, + ДокументТелефонныйЗвонок.Проведен, + ДокументТелефонныйЗвонок.АбонентКакСвязаться, + ДокументТелефонныйЗвонок.АбонентКонтакт, + ДокументТелефонныйЗвонок.АбонентПредставление, + ДокументТелефонныйЗвонок.Автор, + ДокументТелефонныйЗвонок.Важность, + ДокументТелефонныйЗвонок.Входящий, + ДокументТелефонныйЗвонок.Описание, + ДокументТелефонныйЗвонок.Ответственный, + ДокументТелефонныйЗвонок.ВзаимодействиеОснование, + ДокументТелефонныйЗвонок.Тема, + ДокументТелефонныйЗвонок.Комментарий, + ПредметыПапкиВзаимодействий.Предмет, + ПредметыПапкиВзаимодействий.Рассмотрено, + ПредметыПапкиВзаимодействий.РассмотретьПосле +ИЗ + Документ.ТелефонныйЗвонок КАК ДокументТелефонныйЗвонок + ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ПредметыПапкиВзаимодействий КАК ПредметыПапкиВзаимодействий + ПО (ПредметыПапкиВзаимодействий.Взаимодействие = ДокументТелефонныйЗвонок.Ссылка) + Document.ТелефонныйЗвонок + true + true + true + true + true + +
        + + + + + +
        diff --git a/SSL/src/Documents/ТелефонныйЗвонок/Forms/ФормаДокумента/Form.form b/SSL/src/Documents/ТелефонныйЗвонок/Forms/ФормаДокумента/Form.form index 15cd6d063..1f1a5a3ec 100644 --- a/SSL/src/Documents/ТелефонныйЗвонок/Forms/ФормаДокумента/Form.form +++ b/SSL/src/Documents/ТелефонныйЗвонок/Forms/ФормаДокумента/Form.form @@ -529,6 +529,10 @@ Pages + + OnCurrentPageChange + СтраницыОписаниеДополнительноПриСменеСтраницы + TabsOnTop Auto @@ -605,6 +609,7 @@ 25 true true + false true true true @@ -1092,6 +1097,67 @@ UserCmds Auto + + ФормаПоказатьВСписке + 149 + true + + true + + + ФормаПоказатьВСпискеРасширеннаяПодсказка + 150 + Label + true + true + + Left + + + Form.StandardCommand.ShowInList + + Document.ТелефонныйЗвонок + + Normal + Auto + true + true + UserCmds + Auto + + + ФормаПоказатьВЖурнале + 151 + + <key>ru</key> + <value>Показать в списке</value> + + true + true + + true + + + ФормаПоказатьВЖурналеРасширеннаяПодсказка + 152 + Label + true + true + + Left + + + Form.StandardCommand.ShowInList + + DocumentJournal.Взаимодействия + + Normal + Auto + true + true + UserCmds + Auto + Left true @@ -1119,7 +1185,6 @@ true true true - UseIfNecessary auto true @@ -1289,7 +1354,7 @@ Text - Auto + DontUse Auto @@ -1315,7 +1380,7 @@ Picture - Auto + DontUse Auto diff --git a/SSL/src/Documents/ТелефонныйЗвонок/Forms/ФормаДокумента/Module.bsl b/SSL/src/Documents/ТелефонныйЗвонок/Forms/ФормаДокумента/Module.bsl index eeff78e60..0eb9f6b95 100644 --- a/SSL/src/Documents/ТелефонныйЗвонок/Forms/ФормаДокумента/Module.bsl +++ b/SSL/src/Documents/ТелефонныйЗвонок/Forms/ФормаДокумента/Module.bsl @@ -13,9 +13,8 @@ КонецЕсли; Взаимодействия.ЗаполнитьСписокВыбораДляРассмотретьПосле(Элементы.РассмотретьПосле.СписокВыбора); Если Объект.Ссылка.Пустая() Тогда - Объект.Входящий = НЕ (Параметры.Свойство("Основание") И - НЕ (Параметры.Основание = Ложь ИЛИ - Параметры.Основание = Неопределено)); + Объект.Входящий = НЕ (Параметры.Свойство("Основание") + И НЕ (Параметры.Основание = Ложь ИЛИ Параметры.Основание = Неопределено)); КонецЕсли; // Определим типы контактов, которые можно создать. @@ -28,6 +27,7 @@ // СтандартныеПодсистемы.Свойства ДополнительныеПараметры = Новый Структура; ДополнительныеПараметры.Вставить("ИмяЭлементаДляРазмещения", "СтраницаДополнительныеРеквизиты"); + ДополнительныеПараметры.Вставить("ОтложеннаяИнициализация", Истина); УправлениеСвойствами.ПриСозданииНаСервере(ЭтотОбъект, ДополнительныеПараметры); // Конец СтандартныеПодсистемы.Свойства @@ -60,6 +60,10 @@ &НаКлиенте Процедура ПриОткрытии(Отказ) + // СтандартныеПодсистемы.Свойства + УправлениеСвойствамиКлиент.ПослеЗагрузкиДополнительныхРеквизитов(ЭтотОбъект); + // Конец СтандартныеПодсистемы.Свойства + ПроверитьДоступностьСозданияКонтакта(); КонецПроцедуры @@ -96,6 +100,7 @@ // СтандартныеПодсистемы.Свойства Если УправлениеСвойствамиКлиент.ОбрабатыватьОповещения(ЭтотОбъект, ИмяСобытия, Параметр) Тогда ОбновитьЭлементыДополнительныхРеквизитов(); + УправлениеСвойствамиКлиент.ПослеЗагрузкиДополнительныхРеквизитов(ЭтотОбъект); КонецЕсли; // Конец СтандартныеПодсистемы.Свойства @@ -108,7 +113,7 @@ &НаСервере Процедура ПослеЗаписиНаСервере(ТекущийОбъект, ПараметрыЗаписи) - Элементы.СтраницаКомментарий.Картинка = ОбщегоНазначения.ПолучитьКартинкуКомментария(Объект.Комментарий); + Элементы.СтраницаКомментарий.Картинка = ОбщегоНазначенияКлиентСервер.КартинкаКомментария(Объект.Комментарий); КонецПроцедуры @@ -125,6 +130,20 @@ #Область ОбработчикиСобытийЭлементовШапкиФормы +&НаКлиенте +Процедура СтраницыОписаниеДополнительноПриСменеСтраницы(Элемент, ТекущаяСтраница) + + // СтандартныеПодсистемы.Свойства + Если ТекущаяСтраница.Имя = "СтраницаДополнительныеРеквизиты" + И Не ЭтотОбъект.ПараметрыСвойств.ВыполненаОтложеннаяИнициализация Тогда + + СвойстваВыполнитьОтложеннуюИнициализацию(); + УправлениеСвойствамиКлиент.ПослеЗагрузкиДополнительныхРеквизитов(ЭтотОбъект); + КонецЕсли; + // Конец СтандартныеПодсистемы.Свойства + +КонецПроцедуры + &НаКлиенте Процедура КонтактНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка) @@ -242,12 +261,27 @@ ИзменилисьКонтакты = Истина; КонецЕсли; Элементы.РассмотретьПосле.Доступность = НЕ Рассмотрено; - Элементы.СтраницаКомментарий.Картинка = ОбщегоНазначения.ПолучитьКартинкуКомментария(Объект.Комментарий); + Элементы.СтраницаКомментарий.Картинка = ОбщегоНазначенияКлиентСервер.КартинкаКомментария(Объект.Комментарий); КонецПроцедуры // СтандартныеПодсистемы.Свойства +&НаСервере +Процедура СвойстваВыполнитьОтложеннуюИнициализацию() + УправлениеСвойствами.ЗаполнитьДополнительныеРеквизитыВФорме(ЭтотОбъект); +КонецПроцедуры + +&НаКлиенте +Процедура ОбновитьЗависимостиДополнительныхРеквизитов() + УправлениеСвойствамиКлиент.ОбновитьЗависимостиДополнительныхРеквизитов(ЭтотОбъект); +КонецПроцедуры + +&НаКлиенте +Процедура Подключаемый_ПриИзмененииДополнительногоРеквизита(Элемент) + УправлениеСвойствамиКлиент.ОбновитьЗависимостиДополнительныхРеквизитов(ЭтотОбъект); +КонецПроцедуры + &НаСервере Процедура ОбновитьЭлементыДополнительныхРеквизитов() @@ -260,9 +294,9 @@ &НаКлиенте Процедура ПроверитьДоступностьСозданияКонтакта() - Элементы.СоздатьКонтакт.Доступность = (НЕ Объект.Ссылка.Пустая()) И - (Не ЗначениеЗаполнено(Объект.АбонентКонтакт)) И - (Не ПустаяСтрока(Объект.АбонентПредставление)); + Элементы.СоздатьКонтакт.Доступность = (НЕ Объект.Ссылка.Пустая()) + И (Не ЗначениеЗаполнено(Объект.АбонентКонтакт)) + И (Не ПустаяСтрока(Объект.АбонентПредставление)); КонецПроцедуры diff --git a/SSL/src/Documents/ТелефонныйЗвонок/ТелефонныйЗвонок.mdo b/SSL/src/Documents/ТелефонныйЗвонок/ТелефонныйЗвонок.mdo index 5cb495f23..3589b6d4a 100644 --- a/SSL/src/Documents/ТелефонныйЗвонок/ТелефонныйЗвонок.mdo +++ b/SSL/src/Documents/ТелефонныйЗвонок/ТелефонныйЗвонок.mdo @@ -113,7 +113,7 @@ true Document.ТелефонныйЗвонок.Form.ФормаДокумента Document.ТелефонныйЗвонок.Form.ФормаСписка - Document.ТелефонныйЗвонок.Form.ФормаДокумента + Document.ТелефонныйЗвонок.Form.ФормаВыбора Deny true true @@ -431,7 +431,16 @@ PersonalComputer MobileDevice - + + ФормаВыбора + + ru + Форма выбора + + PersonalComputer + MobileDevice + + ФормаСписка ru diff --git a/SSL/src/Documents/ЭлектронноеПисьмоВходящее/Commands/Ответить/CommandModule.bsl b/SSL/src/Documents/ЭлектронноеПисьмоВходящее/Commands/Ответить/CommandModule.bsl index bb471f146..d3b1d4c77 100644 --- a/SSL/src/Documents/ЭлектронноеПисьмоВходящее/Commands/Ответить/CommandModule.bsl +++ b/SSL/src/Documents/ЭлектронноеПисьмоВходящее/Commands/Ответить/CommandModule.bsl @@ -1,4 +1,6 @@ +#Область ОбработчикиСобытий + &НаКлиенте Процедура ОбработкаКоманды(ПараметрКоманды, ПараметрыВыполненияКоманды) @@ -8,3 +10,5 @@ ПараметрыВыполненияКоманды.Источник.Закрыть(); КонецПроцедуры + +#КонецОбласти \ No newline at end of file diff --git a/SSL/src/Documents/ЭлектронноеПисьмоВходящее/Commands/ОтветитьВсем/CommandModule.bsl b/SSL/src/Documents/ЭлектронноеПисьмоВходящее/Commands/ОтветитьВсем/CommandModule.bsl index f2ee889eb..dcb401cc8 100644 --- a/SSL/src/Documents/ЭлектронноеПисьмоВходящее/Commands/ОтветитьВсем/CommandModule.bsl +++ b/SSL/src/Documents/ЭлектронноеПисьмоВходящее/Commands/ОтветитьВсем/CommandModule.bsl @@ -1,4 +1,6 @@ +#Область ОбработчикиСобытий + &НаКлиенте Процедура ОбработкаКоманды(ПараметрКоманды, ПараметрыВыполненияКоманды) @@ -8,3 +10,5 @@ ПараметрыВыполненияКоманды.Источник.Закрыть(); КонецПроцедуры + +#КонецОбласти \ No newline at end of file diff --git a/SSL/src/Documents/ЭлектронноеПисьмоВходящее/Commands/Переслать/CommandModule.bsl b/SSL/src/Documents/ЭлектронноеПисьмоВходящее/Commands/Переслать/CommandModule.bsl index e37398d84..56cf0c427 100644 --- a/SSL/src/Documents/ЭлектронноеПисьмоВходящее/Commands/Переслать/CommandModule.bsl +++ b/SSL/src/Documents/ЭлектронноеПисьмоВходящее/Commands/Переслать/CommandModule.bsl @@ -1,4 +1,6 @@ +#Область ОбработчикиСобытий + &НаКлиенте Процедура ОбработкаКоманды(ПараметрКоманды, ПараметрыВыполненияКоманды) @@ -8,3 +10,5 @@ ПараметрыВыполненияКоманды.Источник.Закрыть(); КонецПроцедуры + +#КонецОбласти \ No newline at end of file diff --git a/SSL/src/Documents/ЭлектронноеПисьмоВходящее/Forms/ФормаВыбора/Form.form b/SSL/src/Documents/ЭлектронноеПисьмоВходящее/Forms/ФормаВыбора/Form.form index bd90c2ad4..62f9a0942 100644 --- a/SSL/src/Documents/ЭлектронноеПисьмоВходящее/Forms/ФормаВыбора/Form.form +++ b/SSL/src/Documents/ЭлектронноеПисьмоВходящее/Forms/ФормаВыбора/Form.form @@ -419,7 +419,6 @@ true true true - UseIfNecessary auto true @@ -436,9 +435,49 @@
        true
        + ВЫБРАТЬ + ДокументЭлектронноеПисьмоВходящее.Ссылка, + ДокументЭлектронноеПисьмоВходящее.ПометкаУдаления, + ДокументЭлектронноеПисьмоВходящее.Номер, + ДокументЭлектронноеПисьмоВходящее.Дата, + ДокументЭлектронноеПисьмоВходящее.Проведен, + ДокументЭлектронноеПисьмоВходящее.Важность, + ДокументЭлектронноеПисьмоВходящее.ВнутреннийЗаголовок, + ДокументЭлектронноеПисьмоВходящее.ДатаПолучения, + ДокументЭлектронноеПисьмоВходящее.ЕстьВложения, + ДокументЭлектронноеПисьмоВходящее.ИдентификаторНаСервере, + ДокументЭлектронноеПисьмоВходящее.ИдентификаторОснования, + ДокументЭлектронноеПисьмоВходящее.ИдентификаторСообщения, + ДокументЭлектронноеПисьмоВходящее.ИдентификаторыОснований, + ДокументЭлектронноеПисьмоВходящее.Кодировка, + ДокументЭлектронноеПисьмоВходящее.Ответственный, + ДокументЭлектронноеПисьмоВходящее.ОтправительАдрес, + ДокументЭлектронноеПисьмоВходящее.ОтправительКонтакт, + ДокументЭлектронноеПисьмоВходящее.ОтправительПредставление, + ДокументЭлектронноеПисьмоВходящее.Размер, + ДокументЭлектронноеПисьмоВходящее.СписокПолучателейКопий, + ДокументЭлектронноеПисьмоВходящее.СписокПолучателейПисьма, + ДокументЭлектронноеПисьмоВходящее.Текст, + ДокументЭлектронноеПисьмоВходящее.ТекстHTML, + ДокументЭлектронноеПисьмоВходящее.Тема, + ДокументЭлектронноеПисьмоВходящее.ТипТекста, + ДокументЭлектронноеПисьмоВходящее.УчетнаяЗапись, + ДокументЭлектронноеПисьмоВходящее.ВзаимодействиеОснование, + ДокументЭлектронноеПисьмоВходящее.УведомитьОДоставке, + ДокументЭлектронноеПисьмоВходящее.УведомитьОПрочтении, + ДокументЭлектронноеПисьмоВходящее.Комментарий, + ПредметыПапкиВзаимодействий.Предмет КАК Предмет, + ПредметыПапкиВзаимодействий.ПапкаЭлектронногоПисьма, + ПредметыПапкиВзаимодействий.Рассмотрено, + ПредметыПапкиВзаимодействий.РассмотретьПосле +ИЗ + Документ.ЭлектронноеПисьмоВходящее КАК ДокументЭлектронноеПисьмоВходящее + ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ПредметыПапкиВзаимодействий КАК ПредметыПапкиВзаимодействий + ПО ПредметыПапкиВзаимодействий.Взаимодействие = ДокументЭлектронноеПисьмоВходящее.Ссылка Document.ЭлектронноеПисьмоВходящее true true + true true true diff --git a/SSL/src/Documents/ЭлектронноеПисьмоВходящее/Forms/ФормаДокумента/Form.form b/SSL/src/Documents/ЭлектронноеПисьмоВходящее/Forms/ФормаДокумента/Form.form index 8a873c461..f1203cb78 100644 --- a/SSL/src/Documents/ЭлектронноеПисьмоВходящее/Forms/ФормаДокумента/Form.form +++ b/SSL/src/Documents/ЭлектронноеПисьмоВходящее/Forms/ФормаДокумента/Form.form @@ -386,6 +386,10 @@ Pages + + OnCurrentPageChange + СтраницыОписаниеДополнительноПриСменеСтраницы + TabsOnTop Auto @@ -839,6 +843,7 @@ 25 true true + false true true true @@ -1836,7 +1841,7 @@ InAdditionalSubmenu - ГруппаВажноКП + ГруппаВажно 190 true true @@ -1845,14 +1850,14 @@ <key>ru</key> - <value>Группа важно КП</value> + <value>Группа важно</value> ru - Группа важно КП + Группа важно - ГруппаВажноКПExtendedTooltip + ГруппаВажноРасширеннаяПодсказка 241 Label true @@ -1892,6 +1897,39 @@ UserCmds Auto + + ФормаПоказатьВСписке + 301 + + <key>ru</key> + <value>Показать в списке</value> + + true + true + + true + + + ФормаПоказатьВСпискеРасширеннаяПодсказка + 302 + Label + true + true + + Left + + + Form.StandardCommand.ShowInList + + DocumentJournal.Взаимодействия + + Normal + Auto + true + true + UserCmds + Auto + ФормаУточнитьКонтакты 212 @@ -1929,6 +1967,10 @@ NotificationProcessing ОбработкаОповещения
        + + OnOpen + ПриОткрытии + OnCreateAtServer ПриСозданииНаСервере @@ -2329,7 +2371,7 @@ ОткрытьВложениеВыполнить - Auto + DontUse Auto @@ -2354,7 +2396,7 @@ СохранитьВложениеВыполнить - Auto + DontUse Auto @@ -2377,7 +2419,7 @@ TextPicture - Auto + DontUse Auto @@ -2403,7 +2445,7 @@ Picture - Auto + DontUse Auto @@ -2425,7 +2467,7 @@ ИзменитьКодировку - Auto + DontUse Auto @@ -2447,7 +2489,7 @@ УточнитьКонтакты - Auto + DontUse Auto @@ -2472,7 +2514,7 @@ СвойстваВложения - Auto + DontUse Auto @@ -2493,6 +2535,10 @@ 0 + + CommonCommand.ПрисоединенныеФайлыКОбъекту + + diff --git a/SSL/src/Documents/ЭлектронноеПисьмоВходящее/Forms/ФормаДокумента/Module.bsl b/SSL/src/Documents/ЭлектронноеПисьмоВходящее/Forms/ФормаДокумента/Module.bsl index f9d1c87fd..19dfb927d 100644 --- a/SSL/src/Documents/ЭлектронноеПисьмоВходящее/Forms/ФормаДокумента/Module.bsl +++ b/SSL/src/Documents/ЭлектронноеПисьмоВходящее/Forms/ФормаДокумента/Module.bsl @@ -25,15 +25,25 @@ // СтандартныеПодсистемы.Свойства ДополнительныеПараметры = Новый Структура; ДополнительныеПараметры.Вставить("ИмяЭлементаДляРазмещения", "СтраницаДополнительныеРеквизиты"); + ДополнительныеПараметры.Вставить("ОтложеннаяИнициализация", Истина); УправлениеСвойствами.ПриСозданииНаСервере(ЭтотОбъект, ДополнительныеПараметры); // Конец СтандартныеПодсистемы.Свойства Если Объект.Ссылка.Пустая() Тогда - Элементы.СтраницаКомментарий.Картинка = ОбщегоНазначения.ПолучитьКартинкуКомментария(Объект.Комментарий); + Элементы.СтраницаКомментарий.Картинка = ОбщегоНазначенияКлиентСервер.КартинкаКомментария(Объект.Комментарий); КонецЕсли; КонецПроцедуры +&НаКлиенте +Процедура ПриОткрытии(Отказ) + + // СтандартныеПодсистемы.Свойства + УправлениеСвойствамиКлиент.ПослеЗагрузкиДополнительныхРеквизитов(ЭтотОбъект); + // Конец СтандартныеПодсистемы.Свойства + +КонецПроцедуры + &НаСервере Процедура ПриЧтенииНаСервере(ТекущийОбъект) @@ -90,7 +100,7 @@ ОбработатьНеобходимостьУведомленияОПрочтении(); ВзаимодействияКлиентСервер.ПроверитьЗаполнениеКонтактов(Объект, ЭтотОбъект, "ЭлектронноеПисьмоВходящее"); - Элементы.СтраницаКомментарий.Картинка = ОбщегоНазначения.ПолучитьКартинкуКомментария(Объект.Комментарий); + Элементы.СтраницаКомментарий.Картинка = ОбщегоНазначенияКлиентСервер.КартинкаКомментария(Объект.Комментарий); // СтандартныеПодсистемы.Свойства УправлениеСвойствами.ПриЧтенииНаСервере(ЭтотОбъект, ТекущийОбъект); @@ -104,6 +114,7 @@ // СтандартныеПодсистемы.Свойства Если УправлениеСвойствамиКлиент.ОбрабатыватьОповещения(ЭтотОбъект, ИмяСобытия, Параметр) Тогда ОбновитьЭлементыДополнительныхРеквизитов(); + УправлениеСвойствамиКлиент.ПослеЗагрузкиДополнительныхРеквизитов(ЭтотОбъект); КонецЕсли; // Конец СтандартныеПодсистемы.Свойства @@ -153,7 +164,7 @@ &НаСервере Процедура ПослеЗаписиНаСервере(ТекущийОбъект, ПараметрыЗаписи) - Элементы.СтраницаКомментарий.Картинка = ОбщегоНазначения.ПолучитьКартинкуКомментария(Объект.Комментарий); + Элементы.СтраницаКомментарий.Картинка = ОбщегоНазначенияКлиентСервер.КартинкаКомментария(Объект.Комментарий); КонецПроцедуры @@ -170,6 +181,20 @@ #Область ОбработчикиСобытийЭлементовШапкиФормы +&НаКлиенте +Процедура СтраницыОписаниеДополнительноПриСменеСтраницы(Элемент, ТекущаяСтраница) + + // СтандартныеПодсистемы.Свойства + Если ТекущаяСтраница.Имя = "СтраницаДополнительныеРеквизиты" + И Не ЭтотОбъект.ПараметрыСвойств.ВыполненаОтложеннаяИнициализация Тогда + + СвойстваВыполнитьОтложеннуюИнициализацию(); + УправлениеСвойствамиКлиент.ПослеЗагрузкиДополнительныхРеквизитов(ЭтотОбъект); + КонецЕсли; + // Конец СтандартныеПодсистемы.Свойства + +КонецПроцедуры + &НаКлиенте Процедура РассмотретьПослеОбработкаВыбора(Элемент, ВыбранноеЗначение, СтандартнаяОбработка) @@ -491,10 +516,10 @@ &НаСервере Процедура ЗаполнитьДополнительнуюИнформацию() - ДополнительнаяИнформацияОПисьме = НСтр("ru = 'Создано:'") + " " + Объект.Дата + НСтр("ru = ' - |Получено:'") + " " + Объект.ДатаПолучения + НСтр("ru = ' - |Важность:'") + " " + Объект.Важность + НСтр("ru = ' - |Кодировка:'") + " " + Объект.Кодировка; + ДополнительнаяИнформацияОПисьме = НСтр("ru = 'Создано:'") + " " + Объект.Дата + + Символы.ПС + НСтр("ru = 'Получено'") + ": " + Объект.ДатаПолучения + + Символы.ПС + НСтр("ru = 'Важность'") + ": " + Объект.Важность + + Символы.ПС + НСтр("ru = 'Кодировка'") + ": " + Объект.Кодировка; КонецПроцедуры @@ -568,6 +593,21 @@ // СтандартныеПодсистемы.Свойства +&НаСервере +Процедура СвойстваВыполнитьОтложеннуюИнициализацию() + УправлениеСвойствами.ЗаполнитьДополнительныеРеквизитыВФорме(ЭтотОбъект); +КонецПроцедуры + +&НаКлиенте +Процедура ОбновитьЗависимостиДополнительныхРеквизитов() + УправлениеСвойствамиКлиент.ОбновитьЗависимостиДополнительныхРеквизитов(ЭтотОбъект); +КонецПроцедуры + +&НаКлиенте +Процедура Подключаемый_ПриИзмененииДополнительногоРеквизита(Элемент) + УправлениеСвойствамиКлиент.ОбновитьЗависимостиДополнительныхРеквизитов(ЭтотОбъект); +КонецПроцедуры + &НаСервере Процедура ОбновитьЭлементыДополнительныхРеквизитов() diff --git a/SSL/src/Documents/ЭлектронноеПисьмоВходящее/Forms/ФормаСписка/Form.form b/SSL/src/Documents/ЭлектронноеПисьмоВходящее/Forms/ФормаСписка/Form.form index 7612243cd..6968b3667 100644 --- a/SSL/src/Documents/ЭлектронноеПисьмоВходящее/Forms/ФормаСписка/Form.form +++ b/SSL/src/Documents/ЭлектронноеПисьмоВходящее/Forms/ФормаСписка/Form.form @@ -345,7 +345,6 @@ true true true - UseIfNecessary auto true diff --git a/SSL/src/Documents/ЭлектронноеПисьмоИсходящее/Forms/ФормаВыбора/Form.form b/SSL/src/Documents/ЭлектронноеПисьмоИсходящее/Forms/ФормаВыбора/Form.form index e1adfa0cf..94859586c 100644 --- a/SSL/src/Documents/ЭлектронноеПисьмоИсходящее/Forms/ФормаВыбора/Form.form +++ b/SSL/src/Documents/ЭлектронноеПисьмоИсходящее/Forms/ФормаВыбора/Form.form @@ -412,7 +412,6 @@ true true true - UseIfNecessary auto true @@ -429,9 +428,53 @@
        true
        + ВЫБРАТЬ + ДокументЭлектронноеПисьмоИсходящее.Ссылка, + ДокументЭлектронноеПисьмоИсходящее.ПометкаУдаления, + ДокументЭлектронноеПисьмоИсходящее.Номер, + ДокументЭлектронноеПисьмоИсходящее.Дата, + ДокументЭлектронноеПисьмоИсходящее.Проведен, + ДокументЭлектронноеПисьмоИсходящее.Автор, + ДокументЭлектронноеПисьмоИсходящее.Важность, + ДокументЭлектронноеПисьмоИсходящее.ДатаОтправления, + ДокументЭлектронноеПисьмоИсходящее.ЕстьВложения, + ДокументЭлектронноеПисьмоИсходящее.ИдентификаторОснования, + ДокументЭлектронноеПисьмоИсходящее.ИдентификаторСообщения, + ДокументЭлектронноеПисьмоИсходящее.ИдентификаторыОснований, + ДокументЭлектронноеПисьмоИсходящее.Кодировка, + ДокументЭлектронноеПисьмоИсходящее.Ответственный, + ДокументЭлектронноеПисьмоИсходящее.ОтправительПредставление, + ДокументЭлектронноеПисьмоИсходящее.СписокПолучателейКопий, + ДокументЭлектронноеПисьмоИсходящее.СписокПолучателейПисьма, + ДокументЭлектронноеПисьмоИсходящее.СписокПолучателейСкрытыхКопий, + ДокументЭлектронноеПисьмоИсходящее.СтатусПисьма, + ДокументЭлектронноеПисьмоИсходящее.Текст, + ДокументЭлектронноеПисьмоИсходящее.ТекстHTML, + ДокументЭлектронноеПисьмоИсходящее.Тема, + ДокументЭлектронноеПисьмоИсходящее.ТипТекста, + ДокументЭлектронноеПисьмоИсходящее.УчетнаяЗапись, + ДокументЭлектронноеПисьмоИсходящее.ВзаимодействиеОснование, + ДокументЭлектронноеПисьмоИсходящее.УведомитьОДоставке, + ДокументЭлектронноеПисьмоИсходящее.УведомитьОПрочтении, + ДокументЭлектронноеПисьмоИсходящее.ОтображатьТелоИсходногоПисьма, + ДокументЭлектронноеПисьмоИсходящее.ВключатьТелоИсходногоПисьма, + ДокументЭлектронноеПисьмоИсходящее.УдалятьПослеОтправки, + ДокументЭлектронноеПисьмоИсходящее.Размер, + ДокументЭлектронноеПисьмоИсходящее.Комментарий, + ДокументЭлектронноеПисьмоИсходящее.ДатаКогдаОтправить, + ДокументЭлектронноеПисьмоИсходящее.ДатаАктуальностиОтправки, + ПредметыПапкиВзаимодействий.Предмет, + ПредметыПапкиВзаимодействий.ПапкаЭлектронногоПисьма, + ПредметыПапкиВзаимодействий.Рассмотрено, + ПредметыПапкиВзаимодействий.РассмотретьПосле +ИЗ + Документ.ЭлектронноеПисьмоИсходящее КАК ДокументЭлектронноеПисьмоИсходящее + ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ПредметыПапкиВзаимодействий КАК ПредметыПапкиВзаимодействий + ПО ПредметыПапкиВзаимодействий.Взаимодействие = ДокументЭлектронноеПисьмоИсходящее.Ссылка Document.ЭлектронноеПисьмоИсходящее true true + true true true diff --git a/SSL/src/Documents/ЭлектронноеПисьмоИсходящее/Forms/ФормаДокумента/Form.form b/SSL/src/Documents/ЭлектронноеПисьмоИсходящее/Forms/ФормаДокумента/Form.form index 28aee8c38..0a687ebb2 100644 --- a/SSL/src/Documents/ЭлектронноеПисьмоИсходящее/Forms/ФормаДокумента/Form.form +++ b/SSL/src/Documents/ЭлектронноеПисьмоИсходящее/Forms/ФормаДокумента/Form.form @@ -312,6 +312,32 @@ ТекстПисьмаКонтекстноеМеню 26 + + ТекстПисьмаКонтекстноеМенюВставитьВнешнююСсылкуНаОбъектИнформационнойБазы + 385 + true + true + + true + + + ТекстПисьмаКонтекстноеМенюВставитьВнешнююСсылкуНаОбъектИнформационнойБазыРасширеннаяПодсказка + 386 + Label + true + true + + Left + + + Form.Command.ВставитьВнешнююСсылкуНаОбъектИнформационнойБазы + Normal + Auto + true + true + UserCmds + Auto + true HTMLDocumentField @@ -422,6 +448,32 @@ ТекстПисьмаФорматированныйДокументКонтекстноеМеню 201 + + ВставитьВнешнююСсылкуНаОбъектИнформационнойБазы + 387 + true + true + + true + + + ВставитьВнешнююСсылкуНаОбъектИнформационнойБазыРасширеннаяПодсказка + 388 + Label + true + true + + Left + + + Form.Command.ВставитьВнешнююСсылкуНаОбъектИнформационнойБазы + Normal + Auto + true + true + UserCmds + Auto + true FormattedDocumentField @@ -810,6 +862,10 @@ Pages + + OnCurrentPageChange + СтраницыОписаниеДополнительноПриСменеСтраницы + TabsOnTop Auto @@ -1338,6 +1394,7 @@ 25 true true + false true true true @@ -1988,33 +2045,6 @@ ФормаКоманднаяПанель -1 - - Справка - 133 - true - true - - true - - false - - СправкаExtendedTooltip - 287 - Label - true - true - - Left - - - Form.StandardCommand.Help - Normal - Auto - true - true - UserCmds - Auto - Отправить 135 @@ -2175,33 +2205,6 @@ UserCmds Auto - - ФормаВставитьВнешнююСсылкуНаОбъектИнформационнойБазы - 286 - true - true - - true - - - ФормаВставитьВнешнююСсылкуНаОбъектИнформационнойБазыExtendedTooltip - 294 - Label - true - true - - Left - - - Form.Command.ВставитьВнешнююСсылкуНаОбъектИнформационнойБазы - Normal - Auto - true - true - UserCmds - Auto - InAdditionalSubmenu - Дополнительно 154 @@ -2369,6 +2372,39 @@ ГруппаГлобальныеКоманды 225 + + ПоказатьВСписке + 389 + + <key>ru</key> + <value>Показать в списке</value> + + true + true + + true + + + ПоказатьВСпискеРасширеннаяПодсказка + 390 + Label + true + true + + Left + + + Form.StandardCommand.ShowInList + + DocumentJournal.Взаимодействия + + Normal + Auto + true + true + UserCmds + Auto + true true @@ -2396,6 +2432,33 @@ FormCommandPanelGlobalCommands + + Справка + 133 + true + true + + true + + false + + СправкаExtendedTooltip + 287 + Label + true + true + + Left + + + Form.StandardCommand.Help + Normal + Auto + true + true + UserCmds + Auto + Left @@ -3137,7 +3200,7 @@ TextPicture - Auto + DontUse Auto @@ -3162,7 +3225,7 @@ ОткрытьВложениеВыполнить - Auto + DontUse Auto @@ -3188,7 +3251,7 @@ true - Auto + DontUse Auto @@ -3214,7 +3277,7 @@ true - Auto + DontUse Auto @@ -3237,7 +3300,7 @@ TextPicture - Auto + DontUse Auto @@ -3261,7 +3324,7 @@ FunctionalOption.ОтправлятьПисьмаВФорматеHTML true - Auto + DontUse Auto @@ -3285,7 +3348,7 @@ FunctionalOption.ОтправлятьПисьмаВФорматеHTML true - Auto + DontUse Auto @@ -3312,7 +3375,7 @@ FunctionalOption.ОтправлятьПисьмаВФорматеHTML Picture - Auto + DontUse Auto @@ -3334,7 +3397,7 @@ УточнитьКонтакты - Auto + DontUse Auto @@ -3359,14 +3422,14 @@ СвойстваВложения - Auto + DontUse Auto ВставитьВнешнююСсылкуНаОбъектИнформационнойБазы <key>ru</key> - <value>Вставить внешнюю ссылку на объект информационной базы</value> + <value>Вставить внешнюю ссылку</value> 11 @@ -3377,13 +3440,16 @@ true Ctrl+Shift+V + + CommonPicture.ВнешняяСсылкаНаОбъектИнформационнойБазы + ВставитьВнешнююСсылкуНаОбъектИнформационнойБазы true - Auto + DontUse Auto @@ -3411,9 +3477,7 @@ CommonCommand.ПрисоединенныеФайлыКОбъекту - - true - + 0 diff --git a/SSL/src/Documents/ЭлектронноеПисьмоИсходящее/Forms/ФормаДокумента/Module.bsl b/SSL/src/Documents/ЭлектронноеПисьмоИсходящее/Forms/ФормаДокумента/Module.bsl index 8770ddd6c..dd487cf04 100644 --- a/SSL/src/Documents/ЭлектронноеПисьмоИсходящее/Forms/ФормаДокумента/Module.bsl +++ b/SSL/src/Documents/ЭлектронноеПисьмоИсходящее/Forms/ФормаДокумента/Module.bsl @@ -25,6 +25,7 @@ // СтандартныеПодсистемы.Свойства ДополнительныеПараметры = Новый Структура; ДополнительныеПараметры.Вставить("ИмяЭлементаДляРазмещения", "СтраницаДополнительныеРеквизиты"); + ДополнительныеПараметры.Вставить("ОтложеннаяИнициализация", Истина); УправлениеСвойствами.ПриСозданииНаСервере(ЭтотОбъект, ДополнительныеПараметры); // Конец СтандартныеПодсистемы.Свойства @@ -33,6 +34,10 @@ &НаКлиенте Процедура ПриОткрытии(Отказ) + // СтандартныеПодсистемы.Свойства + УправлениеСвойствамиКлиент.ПослеЗагрузкиДополнительныхРеквизитов(ЭтотОбъект); + // Конец СтандартныеПодсистемы.Свойства + УправлениеДоступностью(); КонецПроцедуры @@ -43,6 +48,7 @@ // СтандартныеПодсистемы.Свойства Если УправлениеСвойствамиКлиент.ОбрабатыватьОповещения(ЭтотОбъект, ИмяСобытия, Параметр) Тогда ОбновитьЭлементыДополнительныхРеквизитов(); + УправлениеСвойствамиКлиент.ПослеЗагрузкиДополнительныхРеквизитов(ЭтотОбъект); КонецЕсли; // Конец СтандартныеПодсистемы.Свойства @@ -168,17 +174,17 @@ КонецЕсли; #Если Не ВебКлиент Тогда - Для Каждого СтрокаТаблицыВложений Из Вложения Цикл - Если СтрокаТаблицыВложений.Расположение = 2 Тогда - Попытка - Данные = Новый ДвоичныеДанные(СтрокаТаблицыВложений.ИмяФайлаНаКомпьютере); - СтрокаТаблицыВложений.ИмяФайлаНаКомпьютере = ПоместитьВоВременноеХранилище(Данные, ""); - СтрокаТаблицыВложений.Расположение = 4; - Исключение - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(КраткоеПредставлениеОшибки(ИнформацияОбОшибке()),,"Вложения",, Отказ); - КонецПопытки; - КонецЕсли; - КонецЦикла; + Для Каждого СтрокаТаблицыВложений Из Вложения Цикл + Если СтрокаТаблицыВложений.Расположение = 2 Тогда + Попытка + Данные = Новый ДвоичныеДанные(СтрокаТаблицыВложений.ИмяФайлаНаКомпьютере); + СтрокаТаблицыВложений.ИмяФайлаНаКомпьютере = ПоместитьВоВременноеХранилище(Данные, ""); + СтрокаТаблицыВложений.Расположение = 4; + Исключение + ОбщегоНазначенияКлиентСервер.СообщитьПользователю(КраткоеПредставлениеОшибки(ИнформацияОбОшибке()),,"Вложения",, Отказ); + КонецПопытки; + КонецЕсли; + КонецЦикла; #КонецЕсли Объект.ЕстьВложения = (Вложения.Количество() <> 0); @@ -254,12 +260,12 @@ КонецЕсли; - Если Объект.СтатусПисьма <> ТекущийСтатусПисьма И - ТекущийОбъект.СтатусПисьма = Перечисления.СтатусыИсходящегоЭлектронногоПисьма.Исходящее И - Не ПолучитьФункциональнуюОпцию("ОтправлятьПисьмаВФорматеHTML") И - (ТипЗнч(ВзаимодействиеОснование) = Тип("ДокументСсылка.ЭлектронноеПисьмоВходящее") ИЛИ - ТипЗнч(ВзаимодействиеОснование) = Тип("ДокументСсылка.ЭлектронноеПисьмоИсходящее")) И - ТипТекстаВходящегоПисьма = Перечисления.ТипыТекстовЭлектронныхПисем.HTML Тогда + Если Объект.СтатусПисьма <> ТекущийСтатусПисьма + И ТекущийОбъект.СтатусПисьма = Перечисления.СтатусыИсходящегоЭлектронногоПисьма.Исходящее + И Не ПолучитьФункциональнуюОпцию("ОтправлятьПисьмаВФорматеHTML") + И (ТипЗнч(ВзаимодействиеОснование) = Тип("ДокументСсылка.ЭлектронноеПисьмоВходящее") + ИЛИ ТипЗнч(ВзаимодействиеОснование) = Тип("ДокументСсылка.ЭлектронноеПисьмоИсходящее")) + И ТипТекстаВходящегоПисьма = Перечисления.ТипыТекстовЭлектронныхПисем.HTML Тогда ТекущийОбъект.ЕстьВложения = Истина; @@ -334,7 +340,7 @@ ДвоичныеДанныеКартинки = ПрисоединенныеФайлы.ПолучитьДвоичныеДанныеФайла(Вложение.Ссылка); АдресКартинкиВоВременномХранилище = ПоместитьВоВременноеХранилище(ДвоичныеДанныеКартинки, УникальныйИдентификатор); ПрисоединенныйФайл = УправлениеЭлектроннойПочтой.ЗаписатьВложениеЭлектронногоПисьмаИзВременногоХранилища( - Письмо,АдресКартинкиВоВременномХранилище,Вложение.Наименование, Вложение.Размер); + Письмо,АдресКартинкиВоВременномХранилище,Вложение.Наименование, Вложение.Размер); Если ПрисоединенныйФайл <> Неопределено Тогда ПрисоединенныйФайлОбъект = ПрисоединенныйФайл.ПолучитьОбъект(); ПрисоединенныйФайлОбъект.ИДФайлаЭлектронногоПисьма = Вложение.ИДФайлаЭлектронногоПисьма; @@ -393,7 +399,7 @@ КонецЕсли; - Элементы.СтраницаКомментарий.Картинка = ОбщегоНазначения.ПолучитьКартинкуКомментария(Объект.Комментарий); + Элементы.СтраницаКомментарий.Картинка = ОбщегоНазначенияКлиентСервер.КартинкаКомментария(Объект.Комментарий); КонецПроцедуры @@ -422,6 +428,20 @@ #Область ОбработчикиСобытийЭлементовШапкиФормы +&НаКлиенте +Процедура СтраницыОписаниеДополнительноПриСменеСтраницы(Элемент, ТекущаяСтраница) + + // СтандартныеПодсистемы.Свойства + Если ТекущаяСтраница.Имя = "СтраницаДополнительныеРеквизиты" + И Не ЭтотОбъект.ПараметрыСвойств.ВыполненаОтложеннаяИнициализация Тогда + + СвойстваВыполнитьОтложеннуюИнициализацию(); + УправлениеСвойствамиКлиент.ПослеЗагрузкиДополнительныхРеквизитов(ЭтотОбъект); + КонецЕсли; + // Конец СтандартныеПодсистемы.Свойства + +КонецПроцедуры + &НаКлиенте Процедура РассмотретьПослеОбработкаВыбора(Элемент, ВыбранноеЗначение, СтандартнаяОбработка) @@ -492,11 +512,11 @@ ТекстДляПолученияДанныхВыбора = ""; - ПодстрокиВведенногоТекста = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(Текст, ";"); - ПодстрокиДанныхОбъекта = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(Объект[ИмяЭлемента], ";"); + ПодстрокиВведенногоТекста = СтрРазделить(Текст, ";"); + ПодстрокиДанныхОбъекта = СтрРазделить(Объект[ИмяЭлемента], ";"); - Если (ПодстрокиВведенногоТекста.Количество() < ПодстрокиДанныхОбъекта.Количество()) ИЛИ - (ПодстрокиВведенногоТекста.Количество() > (ПодстрокиДанныхОбъекта.Количество()+1)) Тогда + Если (ПодстрокиВведенногоТекста.Количество() < ПодстрокиДанныхОбъекта.Количество()) + ИЛИ (ПодстрокиВведенногоТекста.Количество() > (ПодстрокиДанныхОбъекта.Количество()+1)) Тогда ДанныеВыбора = Новый СписокЗначений; ДанныеВыбора.Добавить(Текст); @@ -507,10 +527,10 @@ КонецЕсли; Для Инд = 0 По (ПодстрокиВведенногоТекста.Количество()-1) Цикл - Если Инд > (ПодстрокиДанныхОбъекта.Количество()-1) ИЛИ - ПодстрокиВведенногоТекста[Инд] <> ПодстрокиДанныхОбъекта[инд] Тогда + Если Инд > (ПодстрокиДанныхОбъекта.Количество()-1) + ИЛИ ПодстрокиВведенногоТекста[Инд] <> ПодстрокиДанныхОбъекта[Инд] Тогда ТекстДляПолученияДанныхВыбора = - СтроковыеФункцииКлиентСервер.УдалитьПовторяющиесяСимволы(ПодстрокиВведенногоТекста[инд], " "); + СтроковыеФункцииКлиентСервер.УдалитьПовторяющиесяСимволы(ПодстрокиВведенногоТекста[Инд], " "); Прервать; КонецЕсли; КонецЦикла; @@ -579,12 +599,12 @@ ИмяЭлемента = Элемент.Имя; ТекстДляПолученияДанныхВыбора = ""; - ПодстрокиВведенногоТекста = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(Текст, ";"); - ПодстрокиДанныхОбъекта = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(Объект[ИмяЭлемента], ";"); + ПодстрокиВведенногоТекста = СтрРазделить(Текст, ";"); + ПодстрокиДанныхОбъекта = СтрРазделить(Объект[ИмяЭлемента], ";"); Для Инд = 0 По (ПодстрокиВведенногоТекста.Количество()-1) Цикл - Если Инд > (ПодстрокиДанныхОбъекта.Количество()-1) ИЛИ - ПодстрокиВведенногоТекста[Инд] <> ПодстрокиДанныхОбъекта[инд] Тогда + Если Инд > (ПодстрокиДанныхОбъекта.Количество()-1) + ИЛИ ПодстрокиВведенногоТекста[Инд] <> ПодстрокиДанныхОбъекта[инд] Тогда ТекстДляПолученияДанныхВыбора = СтроковыеФункцииКлиентСервер.УдалитьПовторяющиесяСимволы(ПодстрокиВведенногоТекста[инд], " "); Прервать; @@ -698,8 +718,8 @@ ИначеЕсли ТипЗнч(ПараметрыПеретаскивания.Значение) = Тип("Массив") Тогда - Если ПараметрыПеретаскивания.Значение.Количество() >= 1 И - ТипЗнч(ПараметрыПеретаскивания.Значение[0]) = Тип("Файл") Тогда + Если ПараметрыПеретаскивания.Значение.Количество() >= 1 + И ТипЗнч(ПараметрыПеретаскивания.Значение[0]) = Тип("Файл") Тогда Для Каждого ФайлПринятый Из ПараметрыПеретаскивания.Значение Цикл Если ТипЗнч(ФайлПринятый) = Тип("Файл") Тогда @@ -805,8 +825,8 @@ ТекстИдентификаторы = Новый ТекстовыйДокумент; ТекстИдентификаторы.ДобавитьСтроку("Идентификатор сообщения: " + Объект.ИдентификаторСообщения); ТекстИдентификаторы.ДобавитьСтроку("Идентификатор основания: " + Объект.ИдентификаторОснования); - ТекстИдентификаторы.ДобавитьСтроку("Идентификаторы оснований: " + - ПолучитьПредставлениеИдентификаторовОснований(Объект.ИдентификаторыОснований)); + ТекстИдентификаторы.ДобавитьСтроку("Идентификаторы оснований: " + + ПолучитьПредставлениеИдентификаторовОснований(Объект.ИдентификаторыОснований)); СтруктураПараметры = Новый Структура; СтруктураПараметры.Вставить("Создано", Объект.Дата); @@ -928,9 +948,9 @@ &НаСервере Функция НеобходимаОбработкаПисьмаОснования() - Возврат ВыполняетсяОтправка И Объект.ВключатьТелоИсходногоПисьма И ПолучитьФункциональнуюОпцию("ОтправлятьПисьмаВФорматеHTML") И - (Не Объект.ВзаимодействиеОснование = Неопределено) И (Не Объект.ВзаимодействиеОснование.Пустая()) И - Объект.СтатусПисьма = Перечисления.СтатусыИсходящегоЭлектронногоПисьма.Черновик; + Возврат ВыполняетсяОтправка И Объект.ВключатьТелоИсходногоПисьма И ПолучитьФункциональнуюОпцию("ОтправлятьПисьмаВФорматеHTML") + И (Не Объект.ВзаимодействиеОснование = Неопределено) И (Не Объект.ВзаимодействиеОснование.Пустая()) + И Объект.СтатусПисьма = Перечисления.СтатусыИсходящегоЭлектронногоПисьма.Черновик; КонецФункции @@ -942,13 +962,17 @@ Элементы.РассмотретьПосле.Доступность = НаКонтроле; - Если Объект.СтатусПисьма = ПредопределенноеЗначение("Перечисление.СтатусыИсходящегоЭлектронногоПисьма.Исходящее") И - (НЕ ИнформационнаяБазаФайловая + Если Объект.СтатусПисьма = ПредопределенноеЗначение("Перечисление.СтатусыИсходящегоЭлектронногоПисьма.Исходящее") + И (НЕ ИнформационнаяБазаФайловая ИЛИ (Объект.ДатаКогдаОтправить <> Дата(1,1,1) И Объект.ДатаКогдаОтправить > ОбщегоНазначенияКлиент.ДатаСеанса()) ИЛИ (Объект.ДатаАктуальностиОтправки <> Дата(1,1,1) И Объект.ДатаАктуальностиОтправки < ОбщегоНазначенияКлиент.ДатаСеанса())) Тогда + Элементы.Отправить.Доступность = Ложь; + Иначе + Элементы.Отправить.Доступность = Истина; + КонецЕсли; Элементы.ГруппаДатаОтправкиАктуальность.Доступность = (Объект.СтатусПисьма <> ПредопределенноеЗначение("Перечисление.СтатусыИсходящегоЭлектронногоПисьма.Отправлено")); @@ -998,8 +1022,8 @@ Элементы.ТекстПисьма.ТолькоПросмотр = Истина; КонецЕсли; - Если Объект.СтатусПисьма = Перечисления.СтатусыИсходящегоЭлектронногоПисьма.Исходящее И - (НЕ ИнформационнаяБазаФайловая + Если Объект.СтатусПисьма = Перечисления.СтатусыИсходящегоЭлектронногоПисьма.Исходящее + И (НЕ ИнформационнаяБазаФайловая ИЛИ (Объект.ДатаКогдаОтправить <> Дата(1,1,1) И Объект.ДатаКогдаОтправить > ТекущаяДатаСеанса()) ИЛИ (Объект.ДатаАктуальностиОтправки <> Дата(1,1,1) И Объект.ДатаАктуальностиОтправки < ТекущаяДатаСеанса())) Тогда @@ -1138,10 +1162,10 @@ Процедура ЗаполнитьВложения(Параметры = Неопределено) Если Объект.Ссылка.Пустая() И Параметры <> Неопределено Тогда - Если Параметры.Свойство("Основание") И - ТипЗнч(Параметры.Основание) = Тип("Структура") И - Параметры.Основание.Свойство("Команда") И - Параметры.Основание.Команда = "Переслать" Тогда + Если Параметры.Свойство("Основание") + И ТипЗнч(Параметры.Основание) = Тип("Структура") + И Параметры.Основание.Свойство("Команда") + И Параметры.Основание.Команда = "Переслать" Тогда табВложения = УправлениеЭлектроннойПочтой.ПолучитьВложенияЭлектронногоПисьма(Параметры.Основание.Основание, Истина); Для Каждого СтрокаТаблицыВложений Из табВложения Цикл @@ -1181,11 +1205,11 @@ &НаСервере Процедура ПрикрепитьВходящееПисьмоОснованиеКакВложениеЕслиНеобходимо(ТекущийОбъект) - Если ТекущийОбъект.СтатусПисьма = Перечисления.СтатусыИсходящегоЭлектронногоПисьма.Исходящее И - Не ПолучитьФункциональнуюОпцию("ОтправлятьПисьмаВФорматеHTML") И - (ТипЗнч(ВзаимодействиеОснование) = Тип("ДокументСсылка.ЭлектронноеПисьмоВходящее") ИЛИ - ТипЗнч(ВзаимодействиеОснование) = Тип("ДокументСсылка.ЭлектронноеПисьмоИсходящее")) И - ТипТекстаВходящегоПисьма = Перечисления.ТипыТекстовЭлектронныхПисем.HTML Тогда + Если ТекущийОбъект.СтатусПисьма = Перечисления.СтатусыИсходящегоЭлектронногоПисьма.Исходящее + И Не ПолучитьФункциональнуюОпцию("ОтправлятьПисьмаВФорматеHTML") + И (ТипЗнч(ВзаимодействиеОснование) = Тип("ДокументСсылка.ЭлектронноеПисьмоВходящее") + ИЛИ ТипЗнч(ВзаимодействиеОснование) = Тип("ДокументСсылка.ЭлектронноеПисьмоИсходящее")) + И ТипТекстаВходящегоПисьма = Перечисления.ТипыТекстовЭлектронныхПисем.HTML Тогда Если ТипЗнч(ВзаимодействиеОснование) = Тип("ДокументСсылка.ЭлектронноеПисьмоВходящее") Тогда ТекстHTMLВходящее = Взаимодействия.СформироватьТекстHTMLДляВходящегоПисьма(ВзаимодействиеОснование, Истина, Истина); @@ -1411,10 +1435,16 @@ // Подготовим шапку письма основания. // Горизонтальный разделитель + СтруктураАтрибутов = Новый Структура; + СтруктураАтрибутов.Вставить("size", "2"); + СтруктураАтрибутов.Вставить("width", "100%"); + СтруктураАтрибутов.Вставить("align", "center"); + СтруктураАтрибутов.Вставить("tabindex", "-1"); + ЭлементHR = Взаимодействия.ДобавитьЭлементСАтрибутами( ЭлементDIV, "hr", - Новый Структура("size, width, align, tabindex", "2", "100%", "center", "-1")); + СтруктураАтрибутов); Взаимодействия.ВставитьЭлементHTMLПервымДочернимЭлементом(ЭлементDIV ,ЭлементHR, МассивДочернихУзловТела); // Данные письма основания @@ -1431,22 +1461,22 @@ // Формирование шапки входящего письма. СтрокаШапка = НСтр("ru = '-----Пересылаемое сообщение-----'"); - СтрокаШапка = СтрокаШапка + Символы.ПС+ НСтр("ru = 'От'") + ": "+ ВыборкаДанныеВходящегоПисьма.ОтправительПредставление + - ?(ВыборкаДанныеВходящегоПисьма.ИмяОбъектаМетаданных = "ЭлектронноеПисьмоВходящее", - "[" + ВыборкаДанныеВходящегоПисьма.ОтправительАдрес +"]", - ""); + СтрокаШапка = СтрокаШапка + Символы.ПС+ НСтр("ru = 'От'") + ": "+ ВыборкаДанныеВходящегоПисьма.ОтправительПредставление + + ?(ВыборкаДанныеВходящегоПисьма.ИмяОбъектаМетаданных = "ЭлектронноеПисьмоВходящее", + "[" + ВыборкаДанныеВходящегоПисьма.ОтправительАдрес +"]", + ""); - СтрокаШапка = СтрокаШапка + Символы.ПС+ НСтр("ru = 'Отправлено'") + ": "+ Формат(ВыборкаДанныеВходящегоПисьма.Дата,"ДФ='dd MMMM yyyy'"); + СтрокаШапка = СтрокаШапка + Символы.ПС+ НСтр("ru = 'Отправлено'") + ": " + + Формат(ВыборкаДанныеВходящегоПисьма.Дата,"ДФ='dd MMMM yyyy'"); - СтрокаШапка = СтрокаШапка + Символы.ПС+ НСтр("ru = 'Кому'") + ": " + - Взаимодействия.ПолучитьПредставленияПолучателейВходящегоПисьма( - ВыборкаДанныеВходящегоПисьма.ПолучателиПисьма.Выгрузить()); + СтрокаШапка = СтрокаШапка + Символы.ПС+ НСтр("ru = 'Кому'") + ": " + + Взаимодействия.ПолучитьПредставленияПолучателейВходящегоПисьма(ВыборкаДанныеВходящегоПисьма.ПолучателиПисьма.Выгрузить()); ТаблицаПолучателейКопий = ВыборкаДанныеВходящегоПисьма.ПолучателиКопий.Выгрузить(); Если ТаблицаПолучателейКопий.Количество() > 0 Тогда - СтрокаШапка = СтрокаШапка + Символы.ПС+ НСтр("ru = 'Копии'") + ": " + - Взаимодействия.ПолучитьПредставленияПолучателейВходящегоПисьма(ТаблицаПолучателейКопий); + СтрокаШапка = СтрокаШапка + Символы.ПС+ НСтр("ru = 'Копии'") + ": " + + Взаимодействия.ПолучитьПредставленияПолучателейВходящегоПисьма(ТаблицаПолучателейКопий); КонецЕсли; СтрокаШапка = СтрокаШапка + Символы.ПС+ НСтр("ru = 'Тема'") + ": " + ВыборкаДанныеВходящегоПисьма.Тема; @@ -1632,7 +1662,7 @@ Для Каждого ЭлементМассива Из Параметры.Кому Цикл - МассивАдресов = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(ЭлементМассива.Адрес, ";"); + МассивАдресов = СтрРазделить(ЭлементМассива.Адрес, ";"); Для Каждого Адрес Из МассивАдресов Цикл Если ПустаяСтрока(Адрес) Тогда @@ -1787,8 +1817,8 @@ &НаКлиенте Процедура ФорматСообщенияПриИзменении() - Если Объект.ТипТекста <> ПредопределенноеЗначение("Перечисление.ТипыТекстовЭлектронныхПисем.ПростойТекст") И - ФорматСообщения = ПредопределенноеЗначение("Перечисление.СпособыРедактированияЭлектронныхПисем.ОбычныйТекст") Тогда + Если Объект.ТипТекста <> ПредопределенноеЗначение("Перечисление.ТипыТекстовЭлектронныхПисем.ПростойТекст") + И ФорматСообщения = ПредопределенноеЗначение("Перечисление.СпособыРедактированияЭлектронныхПисем.ОбычныйТекст") Тогда ВзаимодействияКлиент.ВопросПриИзмененииФорматаСообщенияНаОбычныйТекст(ЭтотОбъект); @@ -1839,7 +1869,7 @@ Элементы.Тема.РедактированиеТекста = Ложь; КонецЕсли; - Элементы.СтраницаКомментарий.Картинка = ОбщегоНазначения.ПолучитьКартинкуКомментария(Объект.Комментарий); + Элементы.СтраницаКомментарий.Картинка = ОбщегоНазначенияКлиентСервер.КартинкаКомментария(Объект.Комментарий); КонецПроцедуры @@ -1885,7 +1915,7 @@ | |ВЫБРАТЬ | Таблица.Ссылка КАК Контакт, - | ПРЕДСТАВЛЕНИЕ(Таблица.Ссылка) КАК Представление, + | Таблица." + ЭлементМассиваОписания.ИмяРеквизитаПредставлениеКонтакта + " КАК Представление, | ТаблицаКонтактнаяИнформация.АдресЭП КАК АдресЭП |ИЗ | Справочник." + ЭлементМассиваОписания.Имя + " КАК Таблица @@ -2187,10 +2217,9 @@ Функция ОценитьРазмерПисьма() Размер = СтрДлина(Объект.Тема)*2; - Размер = Размер + - ?(Объект.ТипТекста = Перечисления.ТипыТекстовЭлектронныхПисем.HTML, - СтрДлина(Объект.ТекстHTML), - СтрДлина(Объект.Текст))*2; + Размер = Размер + ?(Объект.ТипТекста = Перечисления.ТипыТекстовЭлектронныхПисем.HTML, + СтрДлина(Объект.ТекстHTML), + СтрДлина(Объект.Текст)) * 2; Для каждого Вложение Из Вложения Цикл Размер = Размер + Вложение.Размер * 1.5; @@ -2221,10 +2250,10 @@ ВыполняетсяОтправка = Истина; - Если Объект.Ссылка.Пустая() ИЛИ - Модифицированность ИЛИ - Объект.ВключатьТелоИсходногоПисьма ИЛИ - (Объект.СтатусПисьма = ПредопределенноеЗначение("Перечисление.СтатусыИсходящегоЭлектронногоПисьма.Черновик")) Тогда + Если Объект.Ссылка.Пустая() + ИЛИ Модифицированность + ИЛИ Объект.ВключатьТелоИсходногоПисьма + ИЛИ (Объект.СтатусПисьма = ПредопределенноеЗначение("Перечисление.СтатусыИсходящегоЭлектронногоПисьма.Черновик")) Тогда Записать(); КонецЕсли; @@ -2518,6 +2547,21 @@ // СтандартныеПодсистемы.Свойства +&НаСервере +Процедура СвойстваВыполнитьОтложеннуюИнициализацию() + УправлениеСвойствами.ЗаполнитьДополнительныеРеквизитыВФорме(ЭтотОбъект); +КонецПроцедуры + +&НаКлиенте +Процедура ОбновитьЗависимостиДополнительныхРеквизитов() + УправлениеСвойствамиКлиент.ОбновитьЗависимостиДополнительныхРеквизитов(ЭтотОбъект); +КонецПроцедуры + +&НаКлиенте +Процедура Подключаемый_ПриИзмененииДополнительногоРеквизита(Элемент) + УправлениеСвойствамиКлиент.ОбновитьЗависимостиДополнительныхРеквизитов(ЭтотОбъект); +КонецПроцедуры + &НаСервере Процедура ОбновитьЭлементыДополнительныхРеквизитов() diff --git a/SSL/src/Documents/ЭлектронноеПисьмоИсходящее/Forms/ФормированиеВнешнейСсылкиНаОбъект/Form.form b/SSL/src/Documents/ЭлектронноеПисьмоИсходящее/Forms/ФормированиеВнешнейСсылкиНаОбъект/Form.form index ce00f703f..d92771633 100644 --- a/SSL/src/Documents/ЭлектронноеПисьмоИсходящее/Forms/ФормированиеВнешнейСсылкиНаОбъект/Form.form +++ b/SSL/src/Documents/ЭлектронноеПисьмоИсходящее/Forms/ФормированиеВнешнейСсылкиНаОбъект/Form.form @@ -2,7 +2,7 @@ <key>ru</key> - <value>Формирование внешней ссылки на объект</value> + <value>Вставка внешней ссылки</value> ГруппаШапка @@ -42,6 +42,7 @@ true InputField + true Enter true Left @@ -52,6 +53,7 @@ true false true + true true true true @@ -172,6 +174,7 @@ true InputField + true Enter true Left @@ -180,6 +183,7 @@ true true true + true true true true @@ -369,53 +373,17 @@ Left - - ГруппаВставить - 9 - - Вставить - 8 - true - true - - true - - - ВставитьExtendedTooltip - 30 - Label - true - true - - Left - - - Form.Command.Вставить - Auto - true - true - true - UserCmds - Auto - + + Вставить + 8 true true true - - <key>ru</key> - <value>Группа вставить</value> - - - ru - Группа вставить - - 9 - false - ГруппаВставитьExtendedTooltip - 29 + ВставитьExtendedTooltip + 30 Label true true @@ -423,10 +391,45 @@ Left - CommandBar - - Left - + UsualButton + Form.Command.Вставить + Auto + true + true + true + UserCmds + Auto + + + Закрыть + 31 + + <key>ru</key> + <value>Отмена</value> + + true + true + + true + + + ЗакрытьРасширеннаяПодсказка + 32 + Label + true + true + + Left + + + UsualButton + Form.StandardCommand.Close + Normal + Auto + true + true + UserCmds + Auto true true @@ -473,14 +476,13 @@ OnCreateAtServer ПриСозданииНаСервере - DontBlock + LockOwner true true Vertical true true true - UseIfNecessary auto true @@ -558,7 +560,7 @@ Вставить - Auto + DontUse Auto diff --git a/SSL/src/Documents/ЭлектронноеПисьмоИсходящее/Forms/ФормированиеВнешнейСсылкиНаОбъект/Module.bsl b/SSL/src/Documents/ЭлектронноеПисьмоИсходящее/Forms/ФормированиеВнешнейСсылкиНаОбъект/Module.bsl index 53b33b990..c7e4609d7 100644 --- a/SSL/src/Documents/ЭлектронноеПисьмоИсходящее/Forms/ФормированиеВнешнейСсылкиНаОбъект/Module.bsl +++ b/SSL/src/Documents/ЭлектронноеПисьмоИсходящее/Forms/ФормированиеВнешнейСсылкиНаОбъект/Module.bsl @@ -44,7 +44,27 @@ &НаКлиенте Процедура Вставить(Команда) - ОповеститьОВыборе(СформированнаяСсылка); + ОчиститьСообщения(); + + Отказ = Ложь; + + Если ПустаяСтрока(АдресПубликацииИнформационнойБазыВИнтернете) Тогда + + ТекстСообщения = НСтр("ru = 'Не указан адрес публикации информационной базы в интернете.'"); + ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстСообщения,, "АдресПубликацииИнформационнойБазыВИнтернете",, Отказ); + + КонецЕсли; + + Если ПустаяСтрока(СсылкаНаОбъект) Тогда + + ТекстСообщения = НСтр("ru = 'Не указана внутренняя ссылка на объект.'"); + ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстСообщения,, "СсылкаНаОбъект",, Отказ); + + КонецЕсли; + + Если Не Отказ Тогда + ОповеститьОВыборе(СформированнаяСсылка); + КонецЕсли; КонецПроцедуры diff --git a/SSL/src/Documents/ЭлектронноеПисьмоИсходящее/ObjectModule.bsl b/SSL/src/Documents/ЭлектронноеПисьмоИсходящее/ObjectModule.bsl index 3f2e398cb..fd597a10e 100644 --- a/SSL/src/Documents/ЭлектронноеПисьмоИсходящее/ObjectModule.bsl +++ b/SSL/src/Documents/ЭлектронноеПисьмоИсходящее/ObjectModule.bsl @@ -15,7 +15,7 @@ Если ТипЗнч(СтрокаТаблицы) = Тип("Структура") Тогда // В документ попадут только те контакты, для которых заданы адреса электронной почты. - МассивАдресов = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(СтрокаТаблицы.Адрес,","); + МассивАдресов = СтрРазделить(СтрокаТаблицы.Адрес, ","); Для каждого ЭлементМассиваАдресов Из МассивАдресов Цикл Попытка Результат = ОбщегоНазначенияКлиентСервер.РазобратьСтрокуСПочтовымиАдресами(ЭлементМассиваАдресов); @@ -115,9 +115,9 @@ Процедура ОбработкаЗаполнения(ДанныеЗаполнения, СтандартнаяОбработка) - Если (ТипЗнч(ДанныеЗаполнения) = Тип("Структура")) И (ДанныеЗаполнения.Свойство("Основание")) И - (ТипЗнч(ДанныеЗаполнения.Основание) = Тип("ДокументСсылка.ЭлектронноеПисьмоВходящее") ИЛИ - ТипЗнч(ДанныеЗаполнения.Основание) = Тип("ДокументСсылка.ЭлектронноеПисьмоИсходящее")) Тогда + Если (ТипЗнч(ДанныеЗаполнения) = Тип("Структура")) И (ДанныеЗаполнения.Свойство("Основание")) + И (ТипЗнч(ДанныеЗаполнения.Основание) = Тип("ДокументСсылка.ЭлектронноеПисьмоВходящее") + ИЛИ ТипЗнч(ДанныеЗаполнения.Основание) = Тип("ДокументСсылка.ЭлектронноеПисьмоИсходящее")) Тогда Взаимодействия.ЗаполнитьРеквизитыПоУмолчанию(ЭтотОбъект, Неопределено); ЗаполнитьНаОснованииПисьма(ДанныеЗаполнения.Основание, ДанныеЗаполнения.Команда); diff --git a/SSL/src/Enums/ВариантыОчисткиФайлов/ВариантыОчисткиФайлов.mdo b/SSL/src/Enums/ВариантыОчисткиФайлов/ВариантыОчисткиФайлов.mdo new file mode 100644 index 000000000..12b191e95 --- /dev/null +++ b/SSL/src/Enums/ВариантыОчисткиФайлов/ВариантыОчисткиФайлов.mdo @@ -0,0 +1,59 @@ + + + + + + + + ВариантыОчисткиФайлов + + ru + Варианты очистки файлов + + + Use + Order + + Use + + + + + Use + Ref + + Use + + + + true + BothWays + + ОчиститьФайлыИВерсии + + ru + Очистить файлы и версии + + + + ОчиститьФайлы + + ru + Очистить файлы + + + + ОчиститьВерсии + + ru + Очистить версии + + + + НеОчищать + + ru + Не очищать + + + diff --git a/SSL/src/Enums/ПериодОчисткиФайлов/ПериодОчисткиФайлов.mdo b/SSL/src/Enums/ПериодОчисткиФайлов/ПериодОчисткиФайлов.mdo new file mode 100644 index 000000000..9b23420b2 --- /dev/null +++ b/SSL/src/Enums/ПериодОчисткиФайлов/ПериодОчисткиФайлов.mdo @@ -0,0 +1,59 @@ + + + + + + + + ПериодОчисткиФайлов + + ru + Период очистки файлов + + + Use + Order + + Use + + + + + Use + Ref + + Use + + + + true + BothWays + + СтаршеМесяца + + ru + Старше месяца + + + + СтаршеШестиМесяцев + + ru + Старше шести месяцев + + + + СтаршеГода + + ru + Старше года + + + + ПоПравилу + + ru + По правилу + + + diff --git a/SSL/src/Enums/ПриоритетыОбъектовОбмена/ПриоритетыОбъектовОбмена.mdo b/SSL/src/Enums/ПриоритетыОбъектовОбмена/ПриоритетыОбъектовОбмена.mdo index 437d58ee4..6c7e8041a 100644 --- a/SSL/src/Enums/ПриоритетыОбъектовОбмена/ПриоритетыОбъектовОбмена.mdo +++ b/SSL/src/Enums/ПриоритетыОбъектовОбмена/ПриоритетыОбъектовОбмена.mdo @@ -29,21 +29,21 @@ true BothWays - ПриоритетПоступившегоПриОбменеОбъектаНиже + ПриоритетОбъектаОбменаНиже ru Приоритет объекта обмена ниже - ПриоритетПоступившегоПриОбменеОбъектаСовпадает + ПриоритетОбъектаОбменаСовпадает ru Приоритет объекта обмена совпадает - ПриоритетПоступившегоПриОбменеОбъектаВыше + ПриоритетОбъектаОбменаВыше ru Приоритет объекта обмена выше diff --git a/SSL/src/Enums/СостоянияСуществованияКонтрагента/СостоянияСуществованияКонтрагента.mdo b/SSL/src/Enums/СостоянияСуществованияКонтрагента/СостоянияСуществованияКонтрагента.mdo index 55178a8e1..c71618d6c 100644 --- a/SSL/src/Enums/СостоянияСуществованияКонтрагента/СостоянияСуществованияКонтрагента.mdo +++ b/SSL/src/Enums/СостоянияСуществованияКонтрагента/СостоянияСуществованияКонтрагента.mdo @@ -29,49 +29,49 @@ true BothWays - Действует + КонтрагентЕстьВБазеФНС ru Контрагент есть в базе ФНС - ПрекратилДеятельность + НеДействуетИлиИзмененКПП ru Не действует или изменен КПП - ОтсутствуетВРеестре + КонтрагентОтсутствуетВБазеФНС ru Контрагент отсутствует в базе ФНС - СодержитОшибкиВДанных + КонтрагентСодержитОшибкиВДанных ru Контрагент содержит ошибки в данных - КППНеСоответствуетИНН + КППНеСоответствуетДаннымБазыФНС ru КПП не соответствует данным базы ФНС - НеПодлежитПроверке + КонтрагентНеПодлежитПроверке ru Контрагент не подлежит проверке - ПустойИННКПП + ПустойИННИлиКПП ru Пустой ИНН или КПП diff --git a/SSL/src/Enums/ТипыВерсийОбъекта/ТипыВерсийОбъекта.mdo b/SSL/src/Enums/ТипыВерсийОбъекта/ТипыВерсийОбъекта.mdo index 553d4fe60..ebee80297 100644 --- a/SSL/src/Enums/ТипыВерсийОбъекта/ТипыВерсийОбъекта.mdo +++ b/SSL/src/Enums/ТипыВерсийОбъекта/ТипыВерсийОбъекта.mdo @@ -50,14 +50,14 @@ - НепринятыеДанныеПоДатеЗапретаОбъектСуществует + НепринятыйПоДатеЗапретаОбъектСуществуетВБазе ru Непринятый по дате запрета объект существует в базе - НепринятыеДанныеПоДатеЗапретаОбъектНеСуществует + НепринятыйПоДатеЗапретаОбъектНеСуществуетВБазе ru Непринятый по дате запрета объект не существует в базе diff --git a/SSL/src/Enums/ТипыКонтактнойИнформации/ТипыКонтактнойИнформации.mdo b/SSL/src/Enums/ТипыКонтактнойИнформации/ТипыКонтактнойИнформации.mdo index 6a61aa399..df72563f1 100644 --- a/SSL/src/Enums/ТипыКонтактнойИнформации/ТипыКонтактнойИнформации.mdo +++ b/SSL/src/Enums/ТипыКонтактнойИнформации/ТипыКонтактнойИнформации.mdo @@ -70,4 +70,11 @@ Другое + + Skype + + ru + Skype + + diff --git a/SSL/src/Enums/ТипыОтчетов/ТипыОтчетов.mdo b/SSL/src/Enums/ТипыОтчетов/ТипыОтчетов.mdo index d44b669b1..61e7661fe 100644 --- a/SSL/src/Enums/ТипыОтчетов/ТипыОтчетов.mdo +++ b/SSL/src/Enums/ТипыОтчетов/ТипыОтчетов.mdo @@ -43,6 +43,13 @@ Дополнительный + + Расширение + + ru + Расширение + + Внешний diff --git a/SSL/src/EventSubscriptions/ВариантыОтветовАнкетЗаполнитьЗначениеРеквизитаУпорядочивания/ВариантыОтветовАнкетЗаполнитьЗначениеРеквизитаУпорядочивания.mdo b/SSL/src/EventSubscriptions/ВариантыОтветовАнкетЗаполнитьЗначениеРеквизитаУпорядочивания/ВариантыОтветовАнкетЗаполнитьЗначениеРеквизитаУпорядочивания.mdo deleted file mode 100644 index 9b0255c23..000000000 --- a/SSL/src/EventSubscriptions/ВариантыОтветовАнкетЗаполнитьЗначениеРеквизитаУпорядочивания/ВариантыОтветовАнкетЗаполнитьЗначениеРеквизитаУпорядочивания.mdo +++ /dev/null @@ -1,13 +0,0 @@ - - - ВариантыОтветовАнкетЗаполнитьЗначениеРеквизитаУпорядочивания - - ru - Варианты ответов анкет заполнить значение реквизита упорядочивания - - - CatalogObject.ВариантыОтветовАнкет - - BeforeWrite - CommonModule.НастройкаПорядкаЭлементов.ЗаполнитьЗначениеРеквизитаУпорядочивания - diff --git a/SSL/src/EventSubscriptions/ВариантыОтветовАнкетСброситьЗначениеРеквизитаУпорядочивания/ВариантыОтветовАнкетСброситьЗначениеРеквизитаУпорядочивания.mdo b/SSL/src/EventSubscriptions/ВариантыОтветовАнкетСброситьЗначениеРеквизитаУпорядочивания/ВариантыОтветовАнкетСброситьЗначениеРеквизитаУпорядочивания.mdo deleted file mode 100644 index 839074880..000000000 --- a/SSL/src/EventSubscriptions/ВариантыОтветовАнкетСброситьЗначениеРеквизитаУпорядочивания/ВариантыОтветовАнкетСброситьЗначениеРеквизитаУпорядочивания.mdo +++ /dev/null @@ -1,13 +0,0 @@ - - - ВариантыОтветовАнкетСброситьЗначениеРеквизитаУпорядочивания - - ru - Варианты ответов анкет сбросить значение реквизита упорядочивания - - - CatalogObject.ВариантыОтветовАнкет - - OnCopy - CommonModule.НастройкаПорядкаЭлементов.СброситьЗначениеРеквизитаУпорядочивания - diff --git a/SSL/src/EventSubscriptions/ВариантыОтчетовПередУдалениемИдентификатораОбъектаМетаданных/ВариантыОтчетовПередУдалениемИдентификатораОбъектаМетаданных.mdo b/SSL/src/EventSubscriptions/ВариантыОтчетовПередУдалениемИдентификатораОбъектаМетаданных/ВариантыОтчетовПередУдалениемИдентификатораОбъектаМетаданных.mdo index 6224bd8f8..61f95625f 100644 --- a/SSL/src/EventSubscriptions/ВариантыОтчетовПередУдалениемИдентификатораОбъектаМетаданных/ВариантыОтчетовПередУдалениемИдентификатораОбъектаМетаданных.mdo +++ b/SSL/src/EventSubscriptions/ВариантыОтчетовПередУдалениемИдентификатораОбъектаМетаданных/ВариантыОтчетовПередУдалениемИдентификатораОбъектаМетаданных.mdo @@ -6,6 +6,7 @@ Варианты отчетов перед удалением идентификатора объекта метаданных + CatalogObject.ИдентификаторыОбъектовРасширений CatalogObject.ИдентификаторыОбъектовМетаданных BeforeDelete diff --git a/SSL/src/EventSubscriptions/ВзаимодействияЗаполнитьЗначениеРеквизитаУпорядочивания/ВзаимодействияЗаполнитьЗначениеРеквизитаУпорядочивания.mdo b/SSL/src/EventSubscriptions/ВзаимодействияЗаполнитьЗначениеРеквизитаУпорядочивания/ВзаимодействияЗаполнитьЗначениеРеквизитаУпорядочивания.mdo deleted file mode 100644 index dea7dcbc4..000000000 --- a/SSL/src/EventSubscriptions/ВзаимодействияЗаполнитьЗначениеРеквизитаУпорядочивания/ВзаимодействияЗаполнитьЗначениеРеквизитаУпорядочивания.mdo +++ /dev/null @@ -1,13 +0,0 @@ - - - ВзаимодействияЗаполнитьЗначениеРеквизитаУпорядочивания - - ru - Взаимодействия заполнить значение реквизита упорядочивания - - - CatalogObject.ПравилаОбработкиЭлектроннойПочты - - BeforeWrite - CommonModule.НастройкаПорядкаЭлементов.ЗаполнитьЗначениеРеквизитаУпорядочивания - diff --git a/SSL/src/EventSubscriptions/ВзаимодействияСброситьЗначениеРеквизитаУпорядочивания/ВзаимодействияСброситьЗначениеРеквизитаУпорядочивания.mdo b/SSL/src/EventSubscriptions/ВзаимодействияСброситьЗначениеРеквизитаУпорядочивания/ВзаимодействияСброситьЗначениеРеквизитаУпорядочивания.mdo deleted file mode 100644 index 8cc1b84dc..000000000 --- a/SSL/src/EventSubscriptions/ВзаимодействияСброситьЗначениеРеквизитаУпорядочивания/ВзаимодействияСброситьЗначениеРеквизитаУпорядочивания.mdo +++ /dev/null @@ -1,13 +0,0 @@ - - - ВзаимодействияСброситьЗначениеРеквизитаУпорядочивания - - ru - Взаимодействия сбросить значение реквизита упорядочивания - - - CatalogObject.ПравилаОбработкиЭлектроннойПочты - - OnCopy - CommonModule.НастройкаПорядкаЭлементов.СброситьЗначениеРеквизитаУпорядочивания - diff --git a/SSL/src/EventSubscriptions/ВидыКонтактнойИнформацииЗаполнитьЗначениеРеквизитаУпорядочивания/ВидыКонтактнойИнформацииЗаполнитьЗначениеРеквизитаУпорядочивания.mdo b/SSL/src/EventSubscriptions/ВидыКонтактнойИнформацииЗаполнитьЗначениеРеквизитаУпорядочивания/ВидыКонтактнойИнформацииЗаполнитьЗначениеРеквизитаУпорядочивания.mdo deleted file mode 100644 index a89e84779..000000000 --- a/SSL/src/EventSubscriptions/ВидыКонтактнойИнформацииЗаполнитьЗначениеРеквизитаУпорядочивания/ВидыКонтактнойИнформацииЗаполнитьЗначениеРеквизитаУпорядочивания.mdo +++ /dev/null @@ -1,13 +0,0 @@ - - - ВидыКонтактнойИнформацииЗаполнитьЗначениеРеквизитаУпорядочивания - - ru - Виды контактной информации заполнить значение реквизита упорядочивания - - - CatalogObject.ВидыКонтактнойИнформации - - BeforeWrite - CommonModule.НастройкаПорядкаЭлементов.ЗаполнитьЗначениеРеквизитаУпорядочивания - diff --git a/SSL/src/EventSubscriptions/ВидыКонтактнойИнформацииСброситьЗначениеРеквизитаУпорядочивания/ВидыКонтактнойИнформацииСброситьЗначениеРеквизитаУпорядочивания.mdo b/SSL/src/EventSubscriptions/ВидыКонтактнойИнформацииСброситьЗначениеРеквизитаУпорядочивания/ВидыКонтактнойИнформацииСброситьЗначениеРеквизитаУпорядочивания.mdo deleted file mode 100644 index a488751ff..000000000 --- a/SSL/src/EventSubscriptions/ВидыКонтактнойИнформацииСброситьЗначениеРеквизитаУпорядочивания/ВидыКонтактнойИнформацииСброситьЗначениеРеквизитаУпорядочивания.mdo +++ /dev/null @@ -1,13 +0,0 @@ - - - ВидыКонтактнойИнформацииСброситьЗначениеРеквизитаУпорядочивания - - ru - Виды контактной информации сбросить значение реквизита упорядочивания - - - CatalogObject.ВидыКонтактнойИнформации - - OnCopy - CommonModule.НастройкаПорядкаЭлементов.СброситьЗначениеРеквизитаУпорядочивания - diff --git a/SSL/src/EventSubscriptions/ВключитьРегламентноеЗаданиеПриИзмененииФункциональнойОпции/ВключитьРегламентноеЗаданиеПриИзмененииФункциональнойОпции.mdo b/SSL/src/EventSubscriptions/ВключитьРегламентноеЗаданиеПриИзмененииФункциональнойОпции/ВключитьРегламентноеЗаданиеПриИзмененииФункциональнойОпции.mdo new file mode 100644 index 000000000..b44679d97 --- /dev/null +++ b/SSL/src/EventSubscriptions/ВключитьРегламентноеЗаданиеПриИзмененииФункциональнойОпции/ВключитьРегламентноеЗаданиеПриИзмененииФункциональнойОпции.mdo @@ -0,0 +1,13 @@ + + + ВключитьРегламентноеЗаданиеПриИзмененииФункциональнойОпции + + ru + Включить регламентное задание при изменении функциональной опции + + + DefinedType.МестоХраненияФункциональныхОпций + + OnWrite + CommonModule.РегламентныеЗаданияСлужебный.ВключитьРегламентноеЗаданиеПриИзмененииФункциональнойОпции + diff --git a/SSL/src/EventSubscriptions/ВыполнитьДействияПередЗаписьюПрисоединенногоФайла/ВыполнитьДействияПередЗаписьюПрисоединенногоФайла.mdo b/SSL/src/EventSubscriptions/ВыполнитьДействияПередЗаписьюПрисоединенногоФайла/ВыполнитьДействияПередЗаписьюПрисоединенногоФайла.mdo new file mode 100644 index 000000000..4cf980427 --- /dev/null +++ b/SSL/src/EventSubscriptions/ВыполнитьДействияПередЗаписьюПрисоединенногоФайла/ВыполнитьДействияПередЗаписьюПрисоединенногоФайла.mdo @@ -0,0 +1,13 @@ + + + ВыполнитьДействияПередЗаписьюПрисоединенногоФайла + + ru + Выполнить действия перед записью присоединенного файла + + + DefinedType.ПрисоединенныйФайлОбъект + + BeforeWrite + CommonModule.ПрисоединенныеФайлы.ВыполнитьДействияПередЗаписьюПрисоединенногоФайла + diff --git a/SSL/src/EventSubscriptions/ВыполнитьДействияПередЗаписьюПрисоединенногоФайлаВзаимодействия/ВыполнитьДействияПередЗаписьюПрисоединенногоФайлаВзаимодействия.mdo b/SSL/src/EventSubscriptions/ВыполнитьДействияПередЗаписьюПрисоединенногоФайлаВзаимодействия/ВыполнитьДействияПередЗаписьюПрисоединенногоФайлаВзаимодействия.mdo deleted file mode 100644 index 3df33ff84..000000000 --- a/SSL/src/EventSubscriptions/ВыполнитьДействияПередЗаписьюПрисоединенногоФайлаВзаимодействия/ВыполнитьДействияПередЗаписьюПрисоединенногоФайлаВзаимодействия.mdo +++ /dev/null @@ -1,18 +0,0 @@ - - - ВыполнитьДействияПередЗаписьюПрисоединенногоФайлаВзаимодействия - - ru - Выполнить действия перед записью присоединенного файла (Взаимодействия) - - - CatalogObject.СообщениеSMSПрисоединенныеФайлы - CatalogObject.ВстречаПрисоединенныеФайлы - CatalogObject.ТелефонныйЗвонокПрисоединенныеФайлы - CatalogObject.ЭлектронноеПисьмоИсходящееПрисоединенныеФайлы - CatalogObject.ЗапланированноеВзаимодействиеПрисоединенныеФайлы - CatalogObject.ЭлектронноеПисьмоВходящееПрисоединенныеФайлы - - BeforeWrite - CommonModule.ПрисоединенныеФайлы.ВыполнитьДействияПередЗаписьюПрисоединенногоФайла - diff --git a/SSL/src/EventSubscriptions/ВыполнитьДействияПередУдалениемПрисоединенногоФайла/ВыполнитьДействияПередУдалениемПрисоединенногоФайла.mdo b/SSL/src/EventSubscriptions/ВыполнитьДействияПередУдалениемПрисоединенногоФайла/ВыполнитьДействияПередУдалениемПрисоединенногоФайла.mdo new file mode 100644 index 000000000..ce09d97a0 --- /dev/null +++ b/SSL/src/EventSubscriptions/ВыполнитьДействияПередУдалениемПрисоединенногоФайла/ВыполнитьДействияПередУдалениемПрисоединенногоФайла.mdo @@ -0,0 +1,13 @@ + + + ВыполнитьДействияПередУдалениемПрисоединенногоФайла + + ru + Выполнить действия перед удалением присоединенного файла + + + DefinedType.ПрисоединенныйФайлОбъект + + BeforeDelete + CommonModule.ПрисоединенныеФайлы.ВыполнитьДействияПередУдалениемПрисоединенногоФайла + diff --git a/SSL/src/EventSubscriptions/ВыполнитьДействияПередУдалениемПрисоединенногоФайлаВзаимодействия/ВыполнитьДействияПередУдалениемПрисоединенногоФайлаВзаимодействия.mdo b/SSL/src/EventSubscriptions/ВыполнитьДействияПередУдалениемПрисоединенногоФайлаВзаимодействия/ВыполнитьДействияПередУдалениемПрисоединенногоФайлаВзаимодействия.mdo deleted file mode 100644 index 266e67bbb..000000000 --- a/SSL/src/EventSubscriptions/ВыполнитьДействияПередУдалениемПрисоединенногоФайлаВзаимодействия/ВыполнитьДействияПередУдалениемПрисоединенногоФайлаВзаимодействия.mdo +++ /dev/null @@ -1,18 +0,0 @@ - - - ВыполнитьДействияПередУдалениемПрисоединенногоФайлаВзаимодействия - - ru - Выполнить действия перед удалением присоединенного файла (Взаимодействия) - - - CatalogObject.СообщениеSMSПрисоединенныеФайлы - CatalogObject.ВстречаПрисоединенныеФайлы - CatalogObject.ТелефонныйЗвонокПрисоединенныеФайлы - CatalogObject.ЭлектронноеПисьмоИсходящееПрисоединенныеФайлы - CatalogObject.ЗапланированноеВзаимодействиеПрисоединенныеФайлы - CatalogObject.ЭлектронноеПисьмоВходящееПрисоединенныеФайлы - - BeforeDelete - CommonModule.ПрисоединенныеФайлы.ВыполнитьДействияПередУдалениемПрисоединенногоФайла - diff --git a/SSL/src/EventSubscriptions/ВыполнитьДействияПриЗаписиПрисоединенногоФайла/ВыполнитьДействияПриЗаписиПрисоединенногоФайла.mdo b/SSL/src/EventSubscriptions/ВыполнитьДействияПриЗаписиПрисоединенногоФайла/ВыполнитьДействияПриЗаписиПрисоединенногоФайла.mdo new file mode 100644 index 000000000..8c1ce4e54 --- /dev/null +++ b/SSL/src/EventSubscriptions/ВыполнитьДействияПриЗаписиПрисоединенногоФайла/ВыполнитьДействияПриЗаписиПрисоединенногоФайла.mdo @@ -0,0 +1,13 @@ + + + ВыполнитьДействияПриЗаписиПрисоединенногоФайла + + ru + Выполнить действия при записи присоединенного файла + + + DefinedType.ПрисоединенныйФайлОбъект + + OnWrite + CommonModule.ПрисоединенныеФайлы.ВыполнитьДействияПриЗаписиПрисоединенногоФайла + diff --git a/SSL/src/EventSubscriptions/ЗаписатьВерсиюОбъекта/ЗаписатьВерсиюОбъекта.mdo b/SSL/src/EventSubscriptions/ЗаписатьВерсиюОбъекта/ЗаписатьВерсиюОбъекта.mdo new file mode 100644 index 000000000..0d99e7263 --- /dev/null +++ b/SSL/src/EventSubscriptions/ЗаписатьВерсиюОбъекта/ЗаписатьВерсиюОбъекта.mdo @@ -0,0 +1,13 @@ + + + ЗаписатьВерсиюОбъекта + + ru + Записать версию объекта + + + DefinedType.ВерсионируемыеДанныеОбъект + + BeforeWrite + CommonModule.ВерсионированиеОбъектовСобытия.ЗаписатьВерсиюОбъекта + diff --git a/SSL/src/EventSubscriptions/ЗаписатьЗависимыеНаборыЗначенийДоступа/ЗаписатьЗависимыеНаборыЗначенийДоступа.mdo b/SSL/src/EventSubscriptions/ЗаписатьЗависимыеНаборыЗначенийДоступа/ЗаписатьЗависимыеНаборыЗначенийДоступа.mdo index 90214d97d..a7e56fcd0 100644 --- a/SSL/src/EventSubscriptions/ЗаписатьЗависимыеНаборыЗначенийДоступа/ЗаписатьЗависимыеНаборыЗначенийДоступа.mdo +++ b/SSL/src/EventSubscriptions/ЗаписатьЗависимыеНаборыЗначенийДоступа/ЗаписатьЗависимыеНаборыЗначенийДоступа.mdo @@ -6,7 +6,7 @@ Записать зависимые наборы значений доступа - ChartOfCharacteristicTypesObject.УдалитьВидыДоступа + DefinedType.ВладелецВнешнихЗначенийВНаборахЗначенийДоступаОбъект OnWrite CommonModule.УправлениеДоступомСлужебный.ЗаписатьЗависимыеНаборыЗначенийДоступаПриЗаписи diff --git a/SSL/src/EventSubscriptions/ЗаписатьНаборыЗначенийДоступа/ЗаписатьНаборыЗначенийДоступа.mdo b/SSL/src/EventSubscriptions/ЗаписатьНаборыЗначенийДоступа/ЗаписатьНаборыЗначенийДоступа.mdo index 195c7b895..4bf8d6ebd 100644 --- a/SSL/src/EventSubscriptions/ЗаписатьНаборыЗначенийДоступа/ЗаписатьНаборыЗначенийДоступа.mdo +++ b/SSL/src/EventSubscriptions/ЗаписатьНаборыЗначенийДоступа/ЗаписатьНаборыЗначенийДоступа.mdo @@ -6,13 +6,7 @@ Записать наборы значений доступа - BusinessProcessObject.Задание - DocumentObject.Встреча - DocumentObject.ЭлектронноеПисьмоВходящее - DocumentObject.ЗапланированноеВзаимодействие - DocumentObject.СообщениеSMS - DocumentObject.ТелефонныйЗвонок - DocumentObject.ЭлектронноеПисьмоИсходящее + DefinedType.ВладелецНаборовЗначенийДоступаОбъект OnWrite CommonModule.УправлениеДоступомСлужебный.ЗаписатьНаборыЗначенийДоступаПриЗаписи diff --git a/SSL/src/EventSubscriptions/ЗаполнитьЗначениеРеквизитаУпорядочивания/ЗаполнитьЗначениеРеквизитаУпорядочивания.mdo b/SSL/src/EventSubscriptions/ЗаполнитьЗначениеРеквизитаУпорядочивания/ЗаполнитьЗначениеРеквизитаУпорядочивания.mdo new file mode 100644 index 000000000..d6b5180fc --- /dev/null +++ b/SSL/src/EventSubscriptions/ЗаполнитьЗначениеРеквизитаУпорядочивания/ЗаполнитьЗначениеРеквизитаУпорядочивания.mdo @@ -0,0 +1,13 @@ + + + ЗаполнитьЗначениеРеквизитаУпорядочивания + + ru + Заполнить значение реквизита упорядочивания + + + DefinedType.ОбъектСНастраиваемымПорядком + + BeforeWrite + CommonModule.НастройкаПорядкаЭлементов.ЗаполнитьЗначениеРеквизитаУпорядочивания + diff --git a/SSL/src/EventSubscriptions/ЗаполнитьКонтактнуюИнформацию/ЗаполнитьКонтактнуюИнформацию.mdo b/SSL/src/EventSubscriptions/ЗаполнитьКонтактнуюИнформацию/ЗаполнитьКонтактнуюИнформацию.mdo index 616ade0fc..45453af7c 100644 --- a/SSL/src/EventSubscriptions/ЗаполнитьКонтактнуюИнформацию/ЗаполнитьКонтактнуюИнформацию.mdo +++ b/SSL/src/EventSubscriptions/ЗаполнитьКонтактнуюИнформацию/ЗаполнитьКонтактнуюИнформацию.mdo @@ -6,8 +6,7 @@ Заполнить контактную информацию - CatalogObject.Организации - CatalogObject.Пользователи + DefinedType.ВладелецКонтактнойИнформации Filling CommonModule.УправлениеКонтактнойИнформацией.ОбработкаЗаполненияКонтактнойИнформации diff --git a/SSL/src/EventSubscriptions/ЗаполнитьНаборыЗначенийДоступаТабличныхЧастей/ЗаполнитьНаборыЗначенийДоступаТабличныхЧастей.mdo b/SSL/src/EventSubscriptions/ЗаполнитьНаборыЗначенийДоступаТабличныхЧастей/ЗаполнитьНаборыЗначенийДоступаТабличныхЧастей.mdo new file mode 100644 index 000000000..3cb3a5947 --- /dev/null +++ b/SSL/src/EventSubscriptions/ЗаполнитьНаборыЗначенийДоступаТабличныхЧастей/ЗаполнитьНаборыЗначенийДоступаТабличныхЧастей.mdo @@ -0,0 +1,14 @@ + + + ЗаполнитьНаборыЗначенийДоступаТабличныхЧастей + + ru + Заполнить наборы значений доступа табличных частей + + Подписка поставляется подсистемой Управление доступом для заполнения табличной части НаборыЗначенийДоступа тех объектов метаданных, в которых она была создана для работы шаблона #ПоНаборамЗначений + + DefinedType.ВладелецСОграничениемПоНаборамЗначенийДоступаОбъект + + BeforeWrite + CommonModule.УправлениеДоступом.ЗаполнитьНаборыЗначенийДоступаТабличныхЧастей + diff --git a/SSL/src/EventSubscriptions/КонтрольНеразделенныхНаборовЗаписейПриЗаписи/КонтрольНеразделенныхНаборовЗаписейПриЗаписи.mdo b/SSL/src/EventSubscriptions/КонтрольНеразделенныхНаборовЗаписейПриЗаписи/КонтрольНеразделенныхНаборовЗаписейПриЗаписи.mdo index 1330dc299..c0f7b7f7c 100644 --- a/SSL/src/EventSubscriptions/КонтрольНеразделенныхНаборовЗаписейПриЗаписи/КонтрольНеразделенныхНаборовЗаписейПриЗаписи.mdo +++ b/SSL/src/EventSubscriptions/КонтрольНеразделенныхНаборовЗаписейПриЗаписи/КонтрольНеразделенныхНаборовЗаписейПриЗаписи.mdo @@ -18,6 +18,7 @@ InformationRegisterRecordSet.ВерсииПодсистем InformationRegisterRecordSet.ПричиныИзмененияАдресныхСведений InformationRegisterRecordSet.СообщенияОбменаДанными + InformationRegisterRecordSet.БезопасноеХранилищеДанных InformationRegisterRecordSet.УдалитьАдресныйКлассификатор InformationRegisterRecordSet.РежимыПодключенияВнешнихМодулей InformationRegisterRecordSet.ОриентирыАдресныхОбъектов diff --git a/SSL/src/EventSubscriptions/КонтрольНеразделенныхОбъектовПриЗаписи/КонтрольНеразделенныхОбъектовПриЗаписи.mdo b/SSL/src/EventSubscriptions/КонтрольНеразделенныхОбъектовПриЗаписи/КонтрольНеразделенныхОбъектовПриЗаписи.mdo index b348a8c8e..7836b6372 100644 --- a/SSL/src/EventSubscriptions/КонтрольНеразделенныхОбъектовПриЗаписи/КонтрольНеразделенныхОбъектовПриЗаписи.mdo +++ b/SSL/src/EventSubscriptions/КонтрольНеразделенныхОбъектовПриЗаписи/КонтрольНеразделенныхОбъектовПриЗаписи.mdo @@ -16,7 +16,8 @@ ConstantValueManager.СписокЗапрещенныхРасширений ConstantValueManager.ПараметрыДополнительныхРеквизитовИСведений ConstantValueManager.ИспользоватьСинхронизациюДанных - ConstantValueManager.ПарольСлужебногоПользователяМенеджераСервиса + ConstantValueManager.ПараметрыЦентраМониторинга + ConstantValueManager.УдалитьПарольСлужебногоПользователяМенеджераСервиса ConstantValueManager.РазделыОписанияИзмененийСистемы CatalogObject.СообщенияСистемы ConstantValueManager.РазмерБлокаПередачиФайла @@ -29,7 +30,7 @@ ConstantValueManager.КонечнаяТочкаМенеджераСервиса ConstantValueManager.ДетализироватьОбновлениеИБВЖурналеРегистрации ConstantValueManager.ДатаПоследнейВыгрузкиЗамеровПроизводительностиUTC - ConstantValueManager.ИмяСлужебногоПользователяМенеджераСервиса + ConstantValueManager.УдалитьИмяСлужебногоПользователяМенеджераСервиса ConstantValueManager.ВнутреннийАдресМенеджераСервиса ConstantValueManager.ИзвлекатьТекстыФайловНаСервере ConstantValueManager.ПрофильБезопасностиИнформационнойБазы @@ -47,6 +48,7 @@ ConstantValueManager.ЭтоАвтономноеРабочееМесто ConstantValueManager.ИспользоватьДополнительныеОтчетыИОбработки ChartOfCharacteristicTypesObject.РазделыДатЗапретаИзменения + ConstantValueManager.ОценкаПроизводительностиЭкспортВсехКлючевыхОпераций ConstantValueManager.ВерсияКлассификатораБанковРФ ConstantValueManager.ПоддержкаРезервногоКопирования ConstantValueManager.ГлавныйУзел diff --git a/SSL/src/EventSubscriptions/ОбновитьГруппыВладельцевНастроекПрав/ОбновитьГруппыВладельцевНастроекПрав.mdo b/SSL/src/EventSubscriptions/ОбновитьГруппыВладельцевНастроекПрав/ОбновитьГруппыВладельцевНастроекПрав.mdo new file mode 100644 index 000000000..1157011fe --- /dev/null +++ b/SSL/src/EventSubscriptions/ОбновитьГруппыВладельцевНастроекПрав/ОбновитьГруппыВладельцевНастроекПрав.mdo @@ -0,0 +1,13 @@ + + + ОбновитьГруппыВладельцевНастроекПрав + + ru + Обновить группы владельцев настроек прав + + + DefinedType.ВладелецНастроекПравОбъект + + BeforeWrite + CommonModule.УправлениеДоступомСлужебный.ОбновитьГруппыВладельцевНастроекПрав + diff --git a/SSL/src/EventSubscriptions/ОбновитьГруппыЗначенийДоступа/ОбновитьГруппыЗначенийДоступа.mdo b/SSL/src/EventSubscriptions/ОбновитьГруппыЗначенийДоступа/ОбновитьГруппыЗначенийДоступа.mdo index f75123ddb..ddbd0cf14 100644 --- a/SSL/src/EventSubscriptions/ОбновитьГруппыЗначенийДоступа/ОбновитьГруппыЗначенийДоступа.mdo +++ b/SSL/src/EventSubscriptions/ОбновитьГруппыЗначенийДоступа/ОбновитьГруппыЗначенийДоступа.mdo @@ -6,7 +6,7 @@ Обновить группы значений доступа - CatalogObject.ПапкиФайлов + DefinedType.ЗначениеДоступаСГруппамиЗначенийДоступаОбъект BeforeWrite CommonModule.УправлениеДоступомСлужебный.ОбновитьГруппыЗначенийДоступа diff --git a/SSL/src/EventSubscriptions/ОбновитьКонтактнуюИнформацию/ОбновитьКонтактнуюИнформацию.mdo b/SSL/src/EventSubscriptions/ОбновитьКонтактнуюИнформацию/ОбновитьКонтактнуюИнформацию.mdo new file mode 100644 index 000000000..ccc281b77 --- /dev/null +++ b/SSL/src/EventSubscriptions/ОбновитьКонтактнуюИнформацию/ОбновитьКонтактнуюИнформацию.mdo @@ -0,0 +1,13 @@ + + + ОбновитьКонтактнуюИнформацию + + ru + Обновить контактную информацию + + + DefinedType.ВладелецКонтактнойИнформации + + BeforeWrite + CommonModule.УправлениеКонтактнойИнформацией.ОбработкаОбновленияКонтактнойИнформации + diff --git a/SSL/src/EventSubscriptions/ОбновитьПредставлениеВнешнегоПользователя/ОбновитьПредставлениеВнешнегоПользователя.mdo b/SSL/src/EventSubscriptions/ОбновитьПредставлениеВнешнегоПользователя/ОбновитьПредставлениеВнешнегоПользователя.mdo index 95a86fc7f..10bb0dd97 100644 --- a/SSL/src/EventSubscriptions/ОбновитьПредставлениеВнешнегоПользователя/ОбновитьПредставлениеВнешнегоПользователя.mdo +++ b/SSL/src/EventSubscriptions/ОбновитьПредставлениеВнешнегоПользователя/ОбновитьПредставлениеВнешнегоПользователя.mdo @@ -6,7 +6,7 @@ Обновить представление внешнего пользователя - CatalogObject.ВнешниеПользователи + DefinedType.ВнешнийПользовательОбъект OnWrite CommonModule.ПользователиСлужебный.ОбновитьПредставлениеВнешнегоПользователяПриЗаписи diff --git a/SSL/src/EventSubscriptions/ОбновлениеВерсииДатЗапретаИзмененияПослеЗагрузкиДанных/ОбновлениеВерсииДатЗапретаИзмененияПослеЗагрузкиДанных.mdo b/SSL/src/EventSubscriptions/ОбновлениеВерсииДатЗапретаИзмененияПослеЗагрузкиДанных/ОбновлениеВерсииДатЗапретаИзмененияПослеЗагрузкиДанных.mdo new file mode 100644 index 000000000..3e2548fa8 --- /dev/null +++ b/SSL/src/EventSubscriptions/ОбновлениеВерсииДатЗапретаИзмененияПослеЗагрузкиДанных/ОбновлениеВерсииДатЗапретаИзмененияПослеЗагрузкиДанных.mdo @@ -0,0 +1,13 @@ + + + ОбновлениеВерсииДатЗапретаИзмененияПослеЗагрузкиДанных + + ru + Обновление версии дат запрета изменения после загрузки данных + + + ExchangePlanObject + + OnWrite + CommonModule.ДатыЗапретаИзмененияСлужебный.ОбновлениеВерсииДатЗапретаИзмененияПослеЗагрузкиДанныхПриЗаписи + diff --git a/SSL/src/EventSubscriptions/ПолучениеПолейПредставленияВзамоимодействия/ПолучениеПолейПредставленияВзамоимодействия.mdo b/SSL/src/EventSubscriptions/ПолучениеПолейПредставленияВзаимодействия/ПолучениеПолейПредставленияВзаимодействия.mdo similarity index 96% rename from SSL/src/EventSubscriptions/ПолучениеПолейПредставленияВзамоимодействия/ПолучениеПолейПредставленияВзамоимодействия.mdo rename to SSL/src/EventSubscriptions/ПолучениеПолейПредставленияВзаимодействия/ПолучениеПолейПредставленияВзаимодействия.mdo index 4baa6b818..6bd60a732 100644 --- a/SSL/src/EventSubscriptions/ПолучениеПолейПредставленияВзамоимодействия/ПолучениеПолейПредставленияВзамоимодействия.mdo +++ b/SSL/src/EventSubscriptions/ПолучениеПолейПредставленияВзаимодействия/ПолучениеПолейПредставленияВзаимодействия.mdo @@ -1,6 +1,6 @@ - ПолучениеПолейПредставленияВзамоимодействия + ПолучениеПолейПредставленияВзаимодействия ru Получение полей представления взаимодействия diff --git a/SSL/src/EventSubscriptions/ПроверитьДатуЗапретаИзмененияПередЗаписьюДокумента/ПроверитьДатуЗапретаИзмененияПередЗаписьюДокумента.mdo b/SSL/src/EventSubscriptions/ПроверитьДатуЗапретаИзмененияПередЗаписьюДокумента/ПроверитьДатуЗапретаИзмененияПередЗаписьюДокумента.mdo new file mode 100644 index 000000000..1176e91db --- /dev/null +++ b/SSL/src/EventSubscriptions/ПроверитьДатуЗапретаИзмененияПередЗаписьюДокумента/ПроверитьДатуЗапретаИзмененияПередЗаписьюДокумента.mdo @@ -0,0 +1,14 @@ + + + ПроверитьДатуЗапретаИзмененияПередЗаписьюДокумента + + ru + Проверить дату запрета изменения перед записью документа + + + DocumentObject.ОтзывСогласияНаОбработкуПерсональныхДанных + DocumentObject.СогласиеНаОбработкуПерсональныхДанных + + BeforeWrite + CommonModule.ДатыЗапретаИзменения.ПроверитьДатуЗапретаИзмененияПередЗаписьюДокумента + diff --git a/SSL/src/EventSubscriptions/ПроверитьИзмененияДатВПредмете/ПроверитьИзмененияДатВПредмете.mdo b/SSL/src/EventSubscriptions/ПроверитьИзмененияДатВПредмете/ПроверитьИзмененияДатВПредмете.mdo index d3d6083b3..b5de87229 100644 --- a/SSL/src/EventSubscriptions/ПроверитьИзмененияДатВПредмете/ПроверитьИзмененияДатВПредмете.mdo +++ b/SSL/src/EventSubscriptions/ПроверитьИзмененияДатВПредмете/ПроверитьИзмененияДатВПредмете.mdo @@ -6,8 +6,7 @@ Проверить изменения дат в предмете - CatalogObject.Заметки - TaskObject.ЗадачаИсполнителя + DefinedType.ПредметНапоминанияОбъект OnWrite CommonModule.НапоминанияПользователяСлужебный.ПроверитьИзмененияДатВПредметеПриЗаписи diff --git a/SSL/src/EventSubscriptions/СброситьЗначениеРеквизитаУпорядочивания/СброситьЗначениеРеквизитаУпорядочивания.mdo b/SSL/src/EventSubscriptions/СброситьЗначениеРеквизитаУпорядочивания/СброситьЗначениеРеквизитаУпорядочивания.mdo new file mode 100644 index 000000000..f7fe2f78b --- /dev/null +++ b/SSL/src/EventSubscriptions/СброситьЗначениеРеквизитаУпорядочивания/СброситьЗначениеРеквизитаУпорядочивания.mdo @@ -0,0 +1,13 @@ + + + СброситьЗначениеРеквизитаУпорядочивания + + ru + Сбросить значение реквизита упорядочивания + + + DefinedType.ОбъектСНастраиваемымПорядком + + OnCopy + CommonModule.НастройкаПорядкаЭлементов.СброситьЗначениеРеквизитаУпорядочивания + diff --git a/SSL/src/EventSubscriptions/СохранитьРезультатПроверкиКонтрагента/СохранитьРезультатПроверкиКонтрагента.mdo b/SSL/src/EventSubscriptions/СохранитьРезультатПроверкиКонтрагента/СохранитьРезультатПроверкиКонтрагента.mdo new file mode 100644 index 000000000..0978c5778 --- /dev/null +++ b/SSL/src/EventSubscriptions/СохранитьРезультатПроверкиКонтрагента/СохранитьРезультатПроверкиКонтрагента.mdo @@ -0,0 +1,13 @@ + + + СохранитьРезультатПроверкиКонтрагента + + ru + Сохранить результат проверки контрагента + + + DefinedType.КонтрагентОбъект + + OnWrite + CommonModule.ПроверкаКонтрагентов.СохранитьРезультатПроверкиКонтрагентаПриЗаписи + diff --git a/SSL/src/EventSubscriptions/УстановитьПометкуУдаленияЗаметкамПользователя/УстановитьПометкуУдаленияЗаметкамПользователя.mdo b/SSL/src/EventSubscriptions/УстановитьПометкуУдаленияЗаметкамПользователя/УстановитьПометкуУдаленияЗаметкамПользователя.mdo deleted file mode 100644 index 5df7eb699..000000000 --- a/SSL/src/EventSubscriptions/УстановитьПометкуУдаленияЗаметкамПользователя/УстановитьПометкуУдаленияЗаметкамПользователя.mdo +++ /dev/null @@ -1,13 +0,0 @@ - - - УстановитьПометкуУдаленияЗаметкамПользователя - - ru - Установить пометку удаления заметкам пользователя - - - CatalogObject.Пользователи - - OnWrite - CommonModule.ЗаметкиПользователяСлужебный.УстановитьПометкуУдаленияЗаметкамПользователя - diff --git a/SSL/src/EventSubscriptions/УстановитьПометкуУдаленияПрисоединенныхФайлов/УстановитьПометкуУдаленияПрисоединенныхФайлов.mdo b/SSL/src/EventSubscriptions/УстановитьПометкуУдаленияПрисоединенныхФайлов/УстановитьПометкуУдаленияПрисоединенныхФайлов.mdo new file mode 100644 index 000000000..39d92e0b2 --- /dev/null +++ b/SSL/src/EventSubscriptions/УстановитьПометкуУдаленияПрисоединенныхФайлов/УстановитьПометкуУдаленияПрисоединенныхФайлов.mdo @@ -0,0 +1,13 @@ + + + УстановитьПометкуУдаленияПрисоединенныхФайлов + + ru + Установить пометку удаления присоединенных файлов + + + DefinedType.ВладелецПрисоединенныхФайловОбъект + + BeforeWrite + CommonModule.ПрисоединенныеФайлы.УстановитьПометкуУдаленияПрисоединенныхФайлов + diff --git a/SSL/src/EventSubscriptions/УстановитьПометкуУдаленияПрисоединенныхФайловВзаимодействия/УстановитьПометкуУдаленияПрисоединенныхФайловВзаимодействия.mdo b/SSL/src/EventSubscriptions/УстановитьПометкуУдаленияПрисоединенныхФайловДокументовВзаимодействия/УстановитьПометкуУдаленияПрисоединенныхФайловДокументовВзаимодействия.mdo similarity index 84% rename from SSL/src/EventSubscriptions/УстановитьПометкуУдаленияПрисоединенныхФайловВзаимодействия/УстановитьПометкуУдаленияПрисоединенныхФайловВзаимодействия.mdo rename to SSL/src/EventSubscriptions/УстановитьПометкуУдаленияПрисоединенныхФайловДокументовВзаимодействия/УстановитьПометкуУдаленияПрисоединенныхФайловДокументовВзаимодействия.mdo index f91683d24..73271c4d5 100644 --- a/SSL/src/EventSubscriptions/УстановитьПометкуУдаленияПрисоединенныхФайловВзаимодействия/УстановитьПометкуУдаленияПрисоединенныхФайловВзаимодействия.mdo +++ b/SSL/src/EventSubscriptions/УстановитьПометкуУдаленияПрисоединенныхФайловДокументовВзаимодействия/УстановитьПометкуУдаленияПрисоединенныхФайловДокументовВзаимодействия.mdo @@ -1,9 +1,9 @@ - УстановитьПометкуУдаленияПрисоединенныхФайловВзаимодействия + УстановитьПометкуУдаленияПрисоединенныхФайловДокументовВзаимодействия ru - Установить пометку удаления присоединенных файлов (Взаимодействия) + Установить пометку удаления присоединенных файлов документов (Взаимодействия) DocumentObject.Встреча diff --git a/SSL/src/EventSubscriptions/УстановитьПометкуУдаленияФайлов/УстановитьПометкуУдаленияФайлов.mdo b/SSL/src/EventSubscriptions/УстановитьПометкуУдаленияФайлов/УстановитьПометкуУдаленияФайлов.mdo new file mode 100644 index 000000000..9828e7fee --- /dev/null +++ b/SSL/src/EventSubscriptions/УстановитьПометкуУдаленияФайлов/УстановитьПометкуУдаленияФайлов.mdo @@ -0,0 +1,13 @@ + + + УстановитьПометкуУдаленияФайлов + + ru + Установить пометку удаления файлов + + + DefinedType.ВладелецФайловОбъект + + BeforeWrite + CommonModule.РаботаСФайлами.УстановитьПометкуУдаленияФайловПередЗаписью + diff --git a/SSL/src/EventSubscriptions/УстановитьСнятьПометкуУдаленияЗаметок/УстановитьСнятьПометкуУдаленияЗаметок.mdo b/SSL/src/EventSubscriptions/УстановитьСнятьПометкуУдаленияЗаметок/УстановитьСнятьПометкуУдаленияЗаметок.mdo new file mode 100644 index 000000000..f902ee36e --- /dev/null +++ b/SSL/src/EventSubscriptions/УстановитьСнятьПометкуУдаленияЗаметок/УстановитьСнятьПометкуУдаленияЗаметок.mdo @@ -0,0 +1,13 @@ + + + УстановитьСнятьПометкуУдаленияЗаметок + + ru + Установить снять пометку удаления заметок + + + DefinedType.ПредметЗаметокОбъект + + OnWrite + CommonModule.ЗаметкиПользователяСлужебный.УстановитьСнятьПометкуУдаленияЗаметок + diff --git a/SSL/src/EventSubscriptions/УстановитьСтатусИзмененияПометкиУдаленияПользователя/УстановитьСтатусИзмененияПометкиУдаленияПользователя.mdo b/SSL/src/EventSubscriptions/УстановитьСтатусИзмененияПометкиУдаленияПользователя/УстановитьСтатусИзмененияПометкиУдаленияПользователя.mdo new file mode 100644 index 000000000..9eca3f17f --- /dev/null +++ b/SSL/src/EventSubscriptions/УстановитьСтатусИзмененияПометкиУдаленияПользователя/УстановитьСтатусИзмененияПометкиУдаленияПользователя.mdo @@ -0,0 +1,13 @@ + + + УстановитьСтатусИзмененияПометкиУдаленияПользователя + + ru + Установить статус изменения пометки удаления пользователя + + + CatalogObject.Пользователи + + BeforeWrite + CommonModule.ЗаметкиПользователя.УстановитьСтатусИзмененияПометкиУдаленияОбъекта + diff --git a/SSL/src/ExchangePlans/ОбменСообщениями/Forms/ФормаВыбора/Form.form b/SSL/src/ExchangePlans/ОбменСообщениями/Forms/ФормаВыбора/Form.form index 675c9dcd3..00726f6a7 100644 --- a/SSL/src/ExchangePlans/ОбменСообщениями/Forms/ФормаВыбора/Form.form +++ b/SSL/src/ExchangePlans/ОбменСообщениями/Forms/ФормаВыбора/Form.form @@ -232,7 +232,6 @@ true true true - UseIfNecessary auto true diff --git a/SSL/src/ExchangePlans/ОбменСообщениями/Forms/ФормаСписка/Form.form b/SSL/src/ExchangePlans/ОбменСообщениями/Forms/ФормаСписка/Form.form index b8d896abd..5fc8e69af 100644 --- a/SSL/src/ExchangePlans/ОбменСообщениями/Forms/ФормаСписка/Form.form +++ b/SSL/src/ExchangePlans/ОбменСообщениями/Forms/ФормаСписка/Form.form @@ -295,7 +295,6 @@ true true true - UseIfNecessary auto true diff --git a/SSL/src/ExchangePlans/ОбменСообщениями/Forms/ФормаУзла/Form.form b/SSL/src/ExchangePlans/ОбменСообщениями/Forms/ФормаУзла/Form.form index 59992f60b..33f113e94 100644 --- a/SSL/src/ExchangePlans/ОбменСообщениями/Forms/ФормаУзла/Form.form +++ b/SSL/src/ExchangePlans/ОбменСообщениями/Forms/ФормаУзла/Form.form @@ -480,7 +480,6 @@ true true true - UseIfNecessary auto true @@ -517,7 +516,7 @@ СделатьЭтуКонечнуюТочкуВедомой - Auto + DontUse Auto diff --git a/SSL/src/ExchangePlans/ОбменСообщениями/ObjectModule.bsl b/SSL/src/ExchangePlans/ОбменСообщениями/ObjectModule.bsl index 3b644e6df..bffe56232 100644 --- a/SSL/src/ExchangePlans/ОбменСообщениями/ObjectModule.bsl +++ b/SSL/src/ExchangePlans/ОбменСообщениями/ObjectModule.bsl @@ -22,6 +22,12 @@ КонецПроцедуры +Процедура ПередУдалением(Отказ) + УстановитьПривилегированныйРежим(Истина); + ОбщегоНазначения.УдалитьДанныеИзБезопасногоХранилища(Ссылка); + УстановитьПривилегированныйРежим(Ложь); +КонецПроцедуры + #КонецОбласти #КонецЕсли \ No newline at end of file diff --git a/SSL/src/FilterCriteria/ФайлыВТоме/Forms/ФормаСписка/Form.form b/SSL/src/FilterCriteria/ФайлыВТоме/Forms/ФормаСписка/Form.form index 19961a1da..86aaf1abe 100644 --- a/SSL/src/FilterCriteria/ФайлыВТоме/Forms/ФормаСписка/Form.form +++ b/SSL/src/FilterCriteria/ФайлыВТоме/Forms/ФормаСписка/Form.form @@ -458,7 +458,6 @@ true true true - UseIfNecessary auto true diff --git a/SSL/src/FunctionalOptions/ИспользоватьБизнесПроцессыИЗадачи/ИспользоватьБизнесПроцессыИЗадачи.mdo b/SSL/src/FunctionalOptions/ИспользоватьБизнесПроцессыИЗадачи/ИспользоватьБизнесПроцессыИЗадачи.mdo index 9492d04aa..2dfbaf418 100644 --- a/SSL/src/FunctionalOptions/ИспользоватьБизнесПроцессыИЗадачи/ИспользоватьБизнесПроцессыИЗадачи.mdo +++ b/SSL/src/FunctionalOptions/ИспользоватьБизнесПроцессыИЗадачи/ИспользоватьБизнесПроцессыИЗадачи.mdo @@ -25,7 +25,7 @@ InformationRegister.ИсполнителиЗадач InformationRegister.ДанныеБизнесПроцессов BusinessProcess.Задание - InformationRegister.ИсполнителиЗадач.Command.НастройкаРолевойАдресации + InformationRegister.ИсполнителиЗадач.Command.РолиИИсполнителиЗадач CommonCommand.ЗадачиПоБизнесПроцессу CommonCommand.КартаМаршрутаБизнесПроцесса Task.ЗадачаИсполнителя diff --git a/SSL/src/FunctionalOptions/ИспользоватьДополнительныеПечатныеФормы/ИспользоватьДополнительныеПечатныеФормы.mdo b/SSL/src/FunctionalOptions/ИспользоватьДополнительныеПечатныеФормы/ИспользоватьДополнительныеПечатныеФормы.mdo deleted file mode 100644 index d0a8f123d..000000000 --- a/SSL/src/FunctionalOptions/ИспользоватьДополнительныеПечатныеФормы/ИспользоватьДополнительныеПечатныеФормы.mdo +++ /dev/null @@ -1,11 +0,0 @@ - - - ИспользоватьДополнительныеПечатныеФормы - - ru - Использовать дополнительные печатные формы - - InformationRegister.НазначениеДополнительныхОбработок.Resource.ИспользоватьПечатныеФормы - true - CommonCommand.ДополнительныеПечатныеФормыОбъекта - diff --git a/SSL/src/FunctionalOptions/ИспользоватьДополнительныеРеквизитыИСведения/ИспользоватьДополнительныеРеквизитыИСведения.mdo b/SSL/src/FunctionalOptions/ИспользоватьДополнительныеРеквизитыИСведения/ИспользоватьДополнительныеРеквизитыИСведения.mdo index ebba20036..85945ba4b 100644 --- a/SSL/src/FunctionalOptions/ИспользоватьДополнительныеРеквизитыИСведения/ИспользоватьДополнительныеРеквизитыИСведения.mdo +++ b/SSL/src/FunctionalOptions/ИспользоватьДополнительныеРеквизитыИСведения/ИспользоватьДополнительныеРеквизитыИСведения.mdo @@ -12,6 +12,5 @@ CommonCommand.ДополнительныеСведенияКоманднаяПанель InformationRegister.ДополнительныеСведения Catalog.ЗначенияСвойствОбъектов - CommonCommand.ДополнительныеСведенияПанельНавигации Catalog.ЗначенияСвойствОбъектовИерархия diff --git a/SSL/src/FunctionalOptions/ИспользоватьСинхронизациюДанныхВЛокальномРежиме/ИспользоватьСинхронизациюДанныхВЛокальномРежиме.mdo b/SSL/src/FunctionalOptions/ИспользоватьСинхронизациюДанныхВЛокальномРежиме/ИспользоватьСинхронизациюДанныхВЛокальномРежиме.mdo index a4ad515a8..7854e8849 100644 --- a/SSL/src/FunctionalOptions/ИспользоватьСинхронизациюДанныхВЛокальномРежиме/ИспользоватьСинхронизациюДанныхВЛокальномРежиме.mdo +++ b/SSL/src/FunctionalOptions/ИспользоватьСинхронизациюДанныхВЛокальномРежиме/ИспользоватьСинхронизациюДанныхВЛокальномРежиме.mdo @@ -10,15 +10,15 @@ Subsystem.СтандартныеПодсистемы.Subsystem.ОбменДанными Catalog.СценарииОбменовДанными CommonCommand.НастроитьПараметрыТранспортаСообщенийОбмена - CommonCommand.ПерейтиВЖурналРегистрацииСобытийЗагрузкиДанных - CommonCommand.ОткрытьПравилаКонвертацииОбъектов - CommonCommand.ОткрытьПравилаРегистрацииОбъектов - CommonCommand.ОткрытьОбменыДанными - CommonCommand.ВыполнитьОбменДанными - CommonCommand.ПерейтиВЖурналРегистрацииСобытийВыгрузкиДанных - CommonCommand.ОткрытьСценарииОбменовДанными - CommonCommand.ВыполнитьОбменДаннымиИнтерактивно + CommonCommand.СобытияПолучения + CommonCommand.ЗагрузитьПравилаКонвертацииОбъектов + CommonCommand.ЗагрузитьПравилаРегистрацииОбъектов + CommonCommand.СинхронизацияДанных + CommonCommand.Синхронизировать + CommonCommand.СобытияОтправки + CommonCommand.СценарииСинхронизации + CommonCommand.СинхронизироватьСДополнительнымиПараметрами CommonForm.ВыборОбъектовИнформационнойБазыКорреспондента - CommonForm.ОбменыДанными - CommonCommand.ПолучитьНастройкиОбменаДаннымиДляВторойИнформационнойБазы + CommonForm.СинхронизацияДанных + CommonCommand.ПолучитьНастройкиСинхронизацииДляДругойПрограммы diff --git a/SSL/src/FunctionalOptions/СтандартныеПодсистемыВАвтономномРежиме/СтандартныеПодсистемыВАвтономномРежиме.mdo b/SSL/src/FunctionalOptions/СтандартныеПодсистемыВАвтономномРежиме/СтандартныеПодсистемыВАвтономномРежиме.mdo index db5c986e6..4250e3da9 100644 --- a/SSL/src/FunctionalOptions/СтандартныеПодсистемыВАвтономномРежиме/СтандартныеПодсистемыВАвтономномРежиме.mdo +++ b/SSL/src/FunctionalOptions/СтандартныеПодсистемыВАвтономномРежиме/СтандартныеПодсистемыВАвтономномРежиме.mdo @@ -7,9 +7,10 @@ Constant.ЭтоАвтономноеРабочееМесто true - Catalog.Пользователи.Command.ПользователиИБ + Catalog.Пользователи.Command.ПользователиИнформационнойБазы DataProcessor.НастройкаРезервногоКопированияИБ DataProcessor.РезервноеКопированиеИБ DataProcessor.СдвигГраницыИтогов DataProcessor.УправлениеИтогамиИАгрегатами + DataProcessor.ПоискИУстановкаОбновлений diff --git a/SSL/src/FunctionalOptions/СтандартныеПодсистемыВЛокальномРежиме/СтандартныеПодсистемыВЛокальномРежиме.mdo b/SSL/src/FunctionalOptions/СтандартныеПодсистемыВЛокальномРежиме/СтандартныеПодсистемыВЛокальномРежиме.mdo index d483a3d52..7e3d6f1aa 100644 --- a/SSL/src/FunctionalOptions/СтандартныеПодсистемыВЛокальномРежиме/СтандартныеПодсистемыВЛокальномРежиме.mdo +++ b/SSL/src/FunctionalOptions/СтандартныеПодсистемыВЛокальномРежиме/СтандартныеПодсистемыВЛокальномРежиме.mdo @@ -7,9 +7,9 @@ Constant.НеИспользоватьРазделениеПоОбластямДанных true - Catalog.Пользователи.Command.ПользователиИБ + Catalog.Пользователи.Command.ПользователиИнформационнойБазы DataProcessor.РезервноеКопированиеИБ - DataProcessor.ОбновлениеКонфигурации + DataProcessor.ПоискИУстановкаОбновлений DataProcessor.НастройкаРезервногоКопированияИБ Catalog.КлассификаторБанковРФ.Command.КлассификаторБанковРФ Report.АнализЖурналаРегистрации diff --git a/SSL/src/InformationRegisters/АдресныеОбъекты/Commands/АвторизацияНаСайтеПоддержкиПользователей/CommandModule.bsl b/SSL/src/InformationRegisters/АдресныеОбъекты/Commands/АвторизацияНаСайтеПоддержкиПользователей/CommandModule.bsl index aa25a2953..1816a78a0 100644 --- a/SSL/src/InformationRegisters/АдресныеОбъекты/Commands/АвторизацияНаСайтеПоддержкиПользователей/CommandModule.bsl +++ b/SSL/src/InformationRegisters/АдресныеОбъекты/Commands/АвторизацияНаСайтеПоддержкиПользователей/CommandModule.bsl @@ -1,3 +1,4 @@ +#Область ОбработчикиСобытий &НаКлиенте Процедура ОбработкаКоманды(ПараметрКоманды, ПараметрыВыполненияКоманды) @@ -5,3 +6,5 @@ СтандартныеПодсистемыКлиент.АвторизоватьНаСайтеПоддержкиПользователей(ПараметрыВыполненияКоманды.Источник); КонецПроцедуры + +#КонецОбласти diff --git a/SSL/src/InformationRegisters/АдресныеОбъекты/Commands/ЗагрузитьАдресныйКлассификатор/CommandModule.bsl b/SSL/src/InformationRegisters/АдресныеОбъекты/Commands/ЗагрузитьАдресныйКлассификатор/CommandModule.bsl index bdbaf5ae1..e9578baad 100644 --- a/SSL/src/InformationRegisters/АдресныеОбъекты/Commands/ЗагрузитьАдресныйКлассификатор/CommandModule.bsl +++ b/SSL/src/InformationRegisters/АдресныеОбъекты/Commands/ЗагрузитьАдресныйКлассификатор/CommandModule.bsl @@ -1,3 +1,4 @@ +#Область ОбработчикиСобытий &НаКлиенте Процедура ОбработкаКоманды(ПараметрКоманды, ПараметрыВыполненияКоманды) @@ -5,3 +6,5 @@ АдресныйКлассификаторКлиент.ЗагрузитьАдресныйКлассификатор(ПараметрыВыполненияКоманды); КонецПроцедуры + +#КонецОбласти diff --git a/SSL/src/InformationRegisters/АдресныеОбъекты/Commands/ОчиститьАдресныйКлассификатор/CommandModule.bsl b/SSL/src/InformationRegisters/АдресныеОбъекты/Commands/ОчиститьАдресныйКлассификатор/CommandModule.bsl index 46d5009aa..f4a9ac757 100644 --- a/SSL/src/InformationRegisters/АдресныеОбъекты/Commands/ОчиститьАдресныйКлассификатор/CommandModule.bsl +++ b/SSL/src/InformationRegisters/АдресныеОбъекты/Commands/ОчиститьАдресныйКлассификатор/CommandModule.bsl @@ -1,13 +1,15 @@ +#Область ОбработчикиСобытий &НаКлиенте Процедура ОбработкаКоманды(ПараметрКоманды, ПараметрыВыполненияКоманды) ПараметрыФормы = Новый Структура; - ОткрытьФорму("РегистрСведений.АдресныеОбъекты.Форма.ОчисткаАдресногоКлассификатора", ПараметрыФормы, - ПараметрыВыполненияКоманды.Источник, - ПараметрыВыполненияКоманды.Уникальность, ПараметрыВыполненияКоманды.Окно, - ПараметрыВыполненияКоманды.НавигационнаяСсылка - ); + ОткрытьФорму("РегистрСведений.АдресныеОбъекты.Форма.ОчисткаАдресногоКлассификатора", ПараметрыФормы, + ПараметрыВыполненияКоманды.Источник, + ПараметрыВыполненияКоманды.Уникальность, ПараметрыВыполненияКоманды.Окно, + ПараметрыВыполненияКоманды.НавигационнаяСсылка); КонецПроцедуры + +#КонецОбласти diff --git a/SSL/src/InformationRegisters/АдресныеОбъекты/Commands/ПроверитьОбновлениеАдресногоКлассификатора/CommandModule.bsl b/SSL/src/InformationRegisters/АдресныеОбъекты/Commands/ПроверитьОбновлениеАдресногоКлассификатора/CommandModule.bsl deleted file mode 100644 index 23034884d..000000000 --- a/SSL/src/InformationRegisters/АдресныеОбъекты/Commands/ПроверитьОбновлениеАдресногоКлассификатора/CommandModule.bsl +++ /dev/null @@ -1,7 +0,0 @@ - -&НаКлиенте -Процедура ОбработкаКоманды(ПараметрКоманды, ПараметрыВыполненияКоманды) - - АдресныйКлассификаторКлиент.ОпределитьНеобходимостьОбновленияАдресныхОбъектов(ПараметрыВыполненияКоманды); - -КонецПроцедуры diff --git a/SSL/src/InformationRegisters/АдресныеОбъекты/Forms/АктуализацияУстаревшегоКлассификатора/Form.form b/SSL/src/InformationRegisters/АдресныеОбъекты/Forms/АктуализацияУстаревшегоКлассификатора/Form.form index f2561abcd..28cf7f3a8 100644 --- a/SSL/src/InformationRegisters/АдресныеОбъекты/Forms/АктуализацияУстаревшегоКлассификатора/Form.form +++ b/SSL/src/InformationRegisters/АдресныеОбъекты/Forms/АктуализацияУстаревшегоКлассификатора/Form.form @@ -496,7 +496,7 @@ ОК - Auto + DontUse Auto @@ -518,7 +518,7 @@ Отмена - Auto + DontUse Auto diff --git a/SSL/src/InformationRegisters/АдресныеОбъекты/Forms/АктуализацияУстаревшегоКлассификатора/Module.bsl b/SSL/src/InformationRegisters/АдресныеОбъекты/Forms/АктуализацияУстаревшегоКлассификатора/Module.bsl index 5eae5a9b1..cb73ee419 100644 --- a/SSL/src/InformationRegisters/АдресныеОбъекты/Forms/АктуализацияУстаревшегоКлассификатора/Module.bsl +++ b/SSL/src/InformationRegisters/АдресныеОбъекты/Forms/АктуализацияУстаревшегоКлассификатора/Module.bsl @@ -109,10 +109,11 @@ Исключение ЖурналРегистрацииКлиент.ДобавитьСообщениеДляЖурналаРегистрации(НСтр("ru = 'Обновление адресного классификатора'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), "Ошибка", ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()), , Истина); - ТекстОбОшибке = НСтр("ru = 'Обновление адресного классификатора прервана.|Подробности см. в журнале регистрации.'"); - ПоказатьПредупреждение(, ТекстОбОшибке); + + Элементы.ОК.Доступность = Истина; + Элементы.Страницы.ТекущаяСтраница = Элементы.СтраницаВыбора; Возврат; КонецПопытки; @@ -123,7 +124,7 @@ ОбновитьПовторноИспользуемыеЗначения(); Оповестить("АдресныйКлассификаторАктуализирован", , ЭтотОбъект); ПодтверждениеЗакрытияФормы = Истина; - ЭтаФорма.Закрыть(); + ЭтотОбъект.Закрыть(); Иначе ДлительныеОперацииКлиент.ОбновитьПараметрыОбработчикаОжидания(ПараметрыОбработчика); ПодключитьОбработчикОжидания("Подключаемый_ПроверитьВыполнениеЗадания", ПараметрыОбработчика.ТекущийИнтервал, Истина); @@ -150,8 +151,7 @@ РезультатФоновогоЗадания = ДлительныеОперации.ЗапуститьВыполнениеВФоне(УникальныйИдентификатор, "АдресныйКлассификаторСлужебный.ФоновыйПереносДанныхУстаревшегоКлассификатора", ПараметрыВызоваСервера, - НСтр("ru = 'Подсистема Адресный классификатор: актуализация данных'") - ); + НСтр("ru = 'Подсистема Адресный классификатор: актуализация данных'")); Если РезультатФоновогоЗадания.ЗаданиеВыполнено Тогда Результат = "Выполнено"; @@ -165,7 +165,7 @@ &НаСервере Функция НеобработанныеРегионыКЛАДР() - Возврат АдресныйКлассификаторСлужебный.ЗаполненныеРегионыУстаревшегоКлассификатора(); + Возврат АдресныйКлассификаторСлужебный.ЗаполненныеРегионыУстаревшегоКлассификатора().Количество(); КонецФункции diff --git a/SSL/src/InformationRegisters/АдресныеОбъекты/Forms/ЗагрузкаАдресногоКлассификатора/Form.form b/SSL/src/InformationRegisters/АдресныеОбъекты/Forms/ЗагрузкаАдресногоКлассификатора/Form.form index d7a4b7a30..a4f1f7b39 100644 --- a/SSL/src/InformationRegisters/АдресныеОбъекты/Forms/ЗагрузкаАдресногоКлассификатора/Form.form +++ b/SSL/src/InformationRegisters/АдресныеОбъекты/Forms/ЗагрузкаАдресногоКлассификатора/Form.form @@ -109,6 +109,38 @@ true + + СубъектыРФЗагружено + 162 + true + + true + + + СубъектыРФ.Загружено + + + СубъектыРФЗагруженоРасширеннаяПодсказка + 164 + Label + true + true + + Left + + + + СубъектыРФЗагруженоКонтекстноеМеню + 163 + true + + CheckBoxField + Auto + true + Left + true + + true true @@ -544,6 +576,46 @@ Button Auto + + ИнформацияОбОбновление + 159 + true + true + + true + + + ИнформацияОбОбновление + + None + + ИнформацияОбОбновлениеРасширеннаяПодсказка + 161 + Label + true + true + + Left + + + + ИнформацияОбОбновлениеКонтекстноеМеню + 160 + true + + LabelField + Enter + true + Left + true + + true + true + + Style.ПоясняющийТекст + + + Отступ 146 @@ -1725,7 +1797,7 @@ ВыбраноРегионовДляЗагрузки <key>ru</key> - <value>Регионов</value> + <value>Выбрано регионов</value> 6 @@ -1846,6 +1918,96 @@ true + + ИнформацияОбОбновление + + <key>ru</key> + <value>Информация об обновление</value> + + 12 + + String + + + + true + + + true + + + + Аутентификация + + <key>ru</key> + <value>Аутентификация</value> + + 13 + + + true + + + true + + + + АдресВоВременномХранилище + + <key>ru</key> + <value>Адрес во временном хранилище</value> + + 14 + + String + + 100 + + + + true + + + true + + + + ИдентификаторЗадания + + <key>ru</key> + <value>Идентификатор задания</value> + + 15 + + UUID + + + true + + + true + + + + ОставшиесяКоличествоПопытокПолучитьОбновление + + <key>ru</key> + <value>Оставшиеся количество попыток получить обновление</value> + + 16 + + Number + + 10 + + + + true + + + true + + Загрузить @@ -1865,7 +2027,7 @@ <name>Загрузить</name> </handler> </action> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <formCommands> @@ -1890,7 +2052,7 @@ <name>УстановитьФлажки</name> </handler> </action> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <formCommands> @@ -1915,7 +2077,7 @@ <name>СнятьФлажки</name> </handler> </action> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <formCommands> @@ -1937,7 +2099,7 @@ <name>ПрерватьЗагрузку</name> </handler> </action> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <formCommands> @@ -1959,7 +2121,7 @@ <name>АвторизацияНаСайтеПоддержкиПользователей</name> </handler> </action> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <formCommands> @@ -1977,7 +2139,7 @@ <name>ЗакрытьБезПодтверждения</name> </handler> </action> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <commandInterface> diff --git a/SSL/src/InformationRegisters/АдресныеОбъекты/Forms/ЗагрузкаАдресногоКлассификатора/Module.bsl b/SSL/src/InformationRegisters/АдресныеОбъекты/Forms/ЗагрузкаАдресногоКлассификатора/Module.bsl index ce4baa9d1..e29704bf0 100644 --- a/SSL/src/InformationRegisters/АдресныеОбъекты/Forms/ЗагрузкаАдресногоКлассификатора/Module.bsl +++ b/SSL/src/InformationRegisters/АдресныеОбъекты/Forms/ЗагрузкаАдресногоКлассификатора/Module.bsl @@ -30,6 +30,7 @@ ПараметрыДлительнойОперации = Новый Структура("Завершено, АдресРезультата, Идентификатор, Ошибка, ПодробноеПредставлениеОшибки"); ПараметрыДлительнойОперации.Вставить("ИнтервалОжидания", 5); + ОставшиесяКоличествоПопытокПолучитьОбновление = 20; ЗаполнитьЗначенияСвойств(ДоступныеИсточникиЗагрузки.Добавить(), Элементы.ДоступныеИсточникиЗагрузки.СписокВыбора[0]); ЗаполнитьЗначенияСвойств(ДоступныеИсточникиЗагрузки.Добавить(), Элементы.ДоступныеИсточникиЗагрузки.СписокВыбора[1]); @@ -50,46 +51,13 @@ // Анализируем варианты работы - нас могли вызвать для проверки обновления. ИдентификаторыДляОбновления = Новый Массив; - Если Параметры.Свойство("Режим") И Параметры.Режим = "ПроверкаОбновления" Тогда - ДоступныеВерсии = АдресныйКлассификаторСлужебный.ДоступныеВерсииАдресныхСведений(); - - Фильтр = Новый Структура("Загружено, ДоступноОбновление", Истина, Истина); - ОбновленныеДанные = ДоступныеВерсии.Скопировать(Фильтр); - КоличествоОбновлений = ОбновленныеДанные.Количество(); - - Если КоличествоОбновлений > 0 Тогда - Заголовок = НСтр("ru = 'Доступно обновление адресного классификатора.'"); - КодИсточникаЗагрузки = "САЙТ"; - // Будем загружать только обновленных, возможно добавленных субъекты РФ ! - ИдентификаторыДляОбновления = ОбновленныеДанные.ВыгрузитьКолонку("Идентификатор"); - Иначе - ПредупреждениеПриОткрытии = НСтр("ru = 'Обновление адресного классификатора не требуется. - |В программу уже загружены актуальные адресные сведения.'"); - Возврат; - - КонецЕсли; - - Иначе - // Будем загружать всех уже загруженных. - ТаблицаРегионов.ЗагрузитьКолонку(ТаблицаРегионов.ВыгрузитьКолонку("Загружено"), "Загружать"); - КонецЕсли; + ТаблицаРегионов.ЗагрузитьКолонку(ТаблицаРегионов.ВыгрузитьКолонку("Загружено"), "Загружать"); // Добавляем пометку для загружаемого региона-параметра и ставим его текущей строкой. ТипТекущегоКодаРегиона = ТипЗнч(ТекущийКодРегиона); ТипЧисло = Новый ОписаниеТипов("Число"); - Если ИдентификаторыДляОбновления.Количество() > 0 Тогда - // Обновление строго указанных. - Фильтр = Новый Структура("Идентификатор"); - Для Каждого Идентификатор Из ИдентификаторыДляОбновления Цикл - Фильтр.Идентификатор = Идентификатор; - Кандидаты = ТаблицаРегионов.НайтиСтроки(Фильтр); - Если Кандидаты.Количество() > 0 Тогда - Кандидаты[0].Загружать = Истина; - КонецЕсли; - КонецЦикла; - - ИначеЕсли ТипТекущегоКодаРегиона = Тип("Массив") И ТекущийКодРегиона.Количество() > 0 Тогда + Если ТипТекущегоКодаРегиона = Тип("Массив") И ТекущийКодРегиона.Количество() > 0 Тогда // Указан массив для загрузки Фильтр = Новый Структура("КодСубъектаРФ"); Для Каждого КодРегиона Из ТекущийКодРегиона Цикл @@ -138,7 +106,10 @@ Аутентификация = СохраненныеДанныеАутентификацииСайта(); Элементы.АвторизацияНаСайтеПоддержкиПользователей.Видимость = ПустаяСтрока(Аутентификация.Пароль); + Элементы.ИнформацияОбОбновление.Видимость = НЕ Элементы.АвторизацияНаСайтеПоддержкиПользователей.Видимость; + ПроверитьДоступностьОбновления(); + // Автосохранение настроек СохраняемыеВНастройкахДанныеМодифицированы = Истина; КонецПроцедуры @@ -165,11 +136,10 @@ Возврат; КонецЕсли; - Если КоличествоОбновлений > 0 Тогда - КодИсточникаЗагрузки = "САЙТ"; - КонецЕсли; - ОбновитьИнтерфейсПоКоличествуЗагружаемых(); + УстановитьДоступностьИсточниковЗагрузки(); + + ПодключитьОбработчикОжидания("Подключаемый_ПроверитьВыполнениеЗадания", 0.5, Истина); КонецПроцедуры &НаКлиенте @@ -201,28 +171,13 @@ #Область ОбработчикиСобытийЭлементовФормы -&НаКлиенте -Процедура СубъектыРФВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка) - СтандартнаяОбработка = Ложь; - - Если Поле = Элементы.СубъектыРФПредставление Тогда - ТекущиеДанные = СубъектыРФ.НайтиПоИдентификатору(ВыбраннаяСтрока); - Если ТекущиеДанные <> Неопределено Тогда - ТекущиеДанные.Загружать = Не ТекущиеДанные.Загружать; - ОбновитьИнтерфейсПоКоличествуЗагружаемых(); - КонецЕсли - КонецЕсли; - -КонецПроцедуры - &НаКлиенте Процедура АдресЗагрузкиНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка) АдресныйКлассификаторКлиент.ВыбратьКаталог(ЭтотОбъект, "АдресЗагрузки", НСтр("ru = 'Каталог с файлами адресного классификатора'"), СтандартнаяОбработка, - Новый ОписаниеОповещения("ЗавершениеВыбораКаталогаАдресаЗагрузки", ЭтотОбъект) - ); + Новый ОписаниеОповещения("ЗавершениеВыбораКаталогаАдресаЗагрузки", ЭтотОбъект)); КонецПроцедуры @@ -249,6 +204,24 @@ #КонецОбласти +#Область ОбработчикиСобытийЭлементовТаблицыФормыСубъектыРФ + +&НаКлиенте +Процедура СубъектыРФВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка) + СтандартнаяОбработка = Ложь; + + Если Поле = Элементы.СубъектыРФПредставление Тогда + ТекущиеДанные = СубъектыРФ.НайтиПоИдентификатору(ВыбраннаяСтрока); + Если ТекущиеДанные <> Неопределено Тогда + ТекущиеДанные.Загружать = Не ТекущиеДанные.Загружать; + ОбновитьИнтерфейсПоКоличествуЗагружаемых(); + КонецЕсли + КонецЕсли; + +КонецПроцедуры + +#КонецОбласти + #Область ОбработчикиКомандФормы &НаКлиенте @@ -274,7 +247,7 @@ КонтрольРасширенияРаботыСФайлами(Текст, КодИсточникаЗагрузки, АдресЗагрузки); ИначеЕсли КодИсточникаЗагрузки = "САЙТ" Тогда - ЗагрузитьКлассификаторССайта(); + ЗагрузитьКлассификаторССайта(Аутентификация); Иначе ОбщегоНазначенияКлиентСервер.СообщитьПользователю( НСтр("ru = 'Не указан вариант загрузки классификатора.'") ); @@ -293,7 +266,20 @@ &НаКлиенте Процедура АвторизацияНаСайтеПоддержкиПользователей(Команда) - СтандартныеПодсистемыКлиент.АвторизоватьНаСайтеПоддержкиПользователей(ЭтотОбъект); + Оповещение = Новый ОписаниеОповещения("ПослеВводаЛогинИПароля", ЭтотОбъект); + СтандартныеПодсистемыКлиент.АвторизоватьНаСайтеПоддержкиПользователей(ЭтотОбъект, Оповещение); + +КонецПроцедуры + +&НаКлиенте +Процедура ПослеВводаЛогинИПароля(Результат, Параметр) Экспорт + + Если ТипЗнч(Результат) = Тип("Структура") + И ЗначениеЗаполнено(Результат.Логин) + И ЗначениеЗаполнено(Результат.Пароль) Тогда + Аутентификация = Результат; + Элементы.АвторизацияНаСайтеПоддержкиПользователей.Доступность = Ложь; + КонецЕсли; КонецПроцедуры @@ -309,6 +295,23 @@ #Область СлужебныеПроцедурыИФункции +&НаКлиенте +Процедура Подключаемый_ПроверитьВыполнениеЗадания() + + ОставшиесяКоличествоПопытокПолучитьОбновление = ОставшиесяКоличествоПопытокПолучитьОбновление - 1; + Если ОставшиесяКоличествоПопытокПолучитьОбновление > 0 Тогда + Если Не ПустаяСтрока(АдресВоВременномХранилище) Тогда + Если ЗаданиеВыполнено(ИдентификаторЗадания) Тогда + ОбновитьДоступностьОбновления(); + Иначе + ПодключитьОбработчикОжидания("Подключаемый_ПроверитьВыполнениеЗадания", 2, Истина); + КонецЕсли; + КонецЕсли; + КонецЕсли; + +КонецПроцедуры + + &НаКлиенте Процедура КонтрольРасширенияРаботыСФайлами(Знач ТекстПредложения, Знач КодИсточника, Знач АдресИсточника) @@ -395,9 +398,7 @@ ВыбраноРегионовДляЗагрузки = СубъектыРФ.НайтиСтроки( Новый Структура("Загружать", Истина) ).Количество(); // Страница загрузки - ТекстОписанияЗагрузки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Загружаются данные по выбранным регионам (%1)'"), ВыбраноРегионовДляЗагрузки - ); + ТекстОписанияЗагрузки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Загружаются данные по выбранным регионам (%1)'"), ВыбраноРегионовДляЗагрузки); УстановитьРазрешениеЗагрузки(ВыбраноРегионовДляЗагрузки); КонецПроцедуры @@ -515,16 +516,14 @@ ПараметрыДлительнойОперации.Ошибка = Неопределено; Попытка - РезультатЗапуска = ДлительныеОперации.ЗапуститьВыполнениеВФоне( - УникальныйИдентификатор, + РезультатЗапуска = ДлительныеОперации.ЗапуститьВыполнениеВФоне(УникальныйИдентификатор, "АдресныйКлассификаторСлужебный.ФоновоеЗаданиеЗагрузкиКлассификатораАдресовССайта", ПараметрыМетода, - НСтр("ru = 'Загрузка адресного классификатора с сайта'") - ); + НСтр("ru = 'Загрузка адресного классификатора с сайта'")); Исключение Информация = ИнформацияОбОшибке(); КраткоеПредставлениеОшибки = КраткоеПредставлениеОшибки(Информация); - Если Найти(КраткоеПредставлениеОшибки , "404 Not Found") > 0 ИЛИ Найти(КраткоеПредставлениеОшибки , "401 Unauthorized") > 0 Тогда + Если СтрНайти(КраткоеПредставлениеОшибки , "404 Not Found") > 0 ИЛИ СтрНайти(КраткоеПредставлениеОшибки , "401 Unauthorized") > 0 Тогда ТекстОшибки = НСтр("ru = 'Не удается загрузить адресные сведения.'"); ТекстОшибки = ТекстОшибки + НСтр("ru = 'Возможные причины:'") + Символы.ПС; ТекстОшибки = ТекстОшибки + НСтр("ru = '• Некорректно введен или не введен логин и пароль;'") + Символы.ПС; @@ -550,7 +549,6 @@ ПараметрыДлительнойОперации.Завершено = РезультатЗапуска.ЗаданиеВыполнено; ПараметрыДлительнойОперации.АдресРезультата = РезультатЗапуска.АдресХранилища; - // Запущенное Элементы.ПрерватьЗагрузку.Доступность = Истина; КонецПроцедуры @@ -616,7 +614,7 @@ Файл = Новый Файл(); Файл.НачатьИнициализацию(ОписаниеОповещения, Описание.Имя); - Иначе // выход из цикла + Иначе // Запуск фонового по загрузке из переданных файлов. Если ЭтоАдресВременногоХранилища(ПараметрыДлительнойОперации.АдресРезультата) Тогда @@ -678,12 +676,10 @@ ПараметрыДлительнойОперации.Ошибка = Неопределено; Попытка - РезультатЗапуска = ДлительныеОперации.ЗапуститьВыполнениеВФоне( - УникальныйИдентификатор, + РезультатЗапуска = ДлительныеОперации.ЗапуститьВыполнениеВФоне(УникальныйИдентификатор, "АдресныйКлассификаторСлужебный.ФоновоеЗаданиеЗагрузкиКлассификатораАдресов", ПараметрыМетода, - НСтр("ru = 'Загрузка адресного классификатора'") - ); + НСтр("ru = 'Загрузка адресного классификатора'")); Исключение ТекстОшибки = НСтр("ru = 'Не удается загрузить адресные сведения из файлов.'"); ТекстОшибки = ТекстОшибки + НСтр("ru = 'Необходимо сохранить файлы с сайта «1С» http://its.1c.ru/download/fias на диск, а затем загрузить в программу.'") + Символы.ПС; @@ -696,7 +692,6 @@ ПараметрыДлительнойОперации.Завершено = РезультатЗапуска.ЗаданиеВыполнено; ПараметрыДлительнойОперации.АдресРезультата = РезультатЗапуска.АдресХранилища; - // Запущенное Элементы.ПрерватьЗагрузку.Доступность = Истина; КонецПроцедуры @@ -841,6 +836,60 @@ Возврат Ложь; КонецФункции +&НаСервере +Процедура ПроверитьДоступностьОбновления(Знач РезультатПроверки = Неопределено) + + Элементы.Отступ.Видимость = Истина; + АдресВоВременномХранилище = ПоместитьВоВременноеХранилище(РезультатПроверки, УникальныйИдентификатор); + Если РезультатПроверки = Неопределено Тогда + Если ОбщегоНазначенияКлиентСервер.РежимОтладки() Тогда + АдресныйКлассификаторСлужебный.ДоступныеВерсииАдресныхСведений(АдресВоВременномХранилище); + Иначе + ПараметрыПроцедуры = Новый Массив; + ПараметрыПроцедуры.Добавить(АдресВоВременномХранилище); + + ПараметрыЗадания = Новый Массив; + ПараметрыЗадания.Добавить("АдресныйКлассификаторСлужебный.ДоступныеВерсииАдресныхСведений"); + ПараметрыЗадания.Добавить(ПараметрыПроцедуры); + + НаименованиеЗадания = НСтр("ru = 'Проверка доступности сервиса адресного классификатора'"); + Задание = ФоновыеЗадания.Выполнить("РаботаВБезопасномРежиме.ВыполнитьМетодКонфигурации", ПараметрыЗадания,, НаименованиеЗадания); + ИдентификаторЗадания = Задание.УникальныйИдентификатор; + Возврат; + КонецЕсли; + КонецЕсли; + +КонецПроцедуры + +&НаСервере +Функция ОбновитьДоступностьОбновления() + + ИнформацияОбновление = ПолучитьИзВременногоХранилища(АдресВоВременномХранилище); + АдресВоВременномХранилище = ""; + ИдентификаторЗадания = ""; + + Если ЗначениеЗаполнено(ИнформацияОбновление) Тогда + ОставшиесяКоличествоПопытокПолучитьОбновление = 0; + ДатаОбновления = Формат(ИнформацияОбновление.Таблица[0].ДатаОбновления, "ДЛФ=DD"); + ИнформацияОбОбновление = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Доступно обновление от %1'"), ДатаОбновления); + Элементы.ИнформацияОбОбновление.Видимость = НЕ ИнформацияОбновление.Отказ; + КонецЕсли; + +КонецФункции + +&НаСервереБезКонтекста +Функция ЗаданиеВыполнено(ИдентификаторЗадания) + + Если ОбщегоНазначенияКлиентСервер.РежимОтладки() Тогда + ЗаданиеВыполненоУспешно = Истина; + Иначе + ЗаданиеВыполненоУспешно = ДлительныеОперации.ЗаданиеВыполнено(ИдентификаторЗадания); + КонецЕсли; + + Возврат ЗаданиеВыполненоУспешно; + +КонецФункции + // Удаляет устаревшие данные КЛАДР если они есть. // &НаСервере @@ -863,4 +912,5 @@ КонецПопытки; КонецПроцедуры + #КонецОбласти diff --git a/SSL/src/InformationRegisters/АдресныеОбъекты/Forms/ОчисткаАдресногоКлассификатора/Form.form b/SSL/src/InformationRegisters/АдресныеОбъекты/Forms/ОчисткаАдресногоКлассификатора/Form.form index 95327ba78..6be388798 100644 --- a/SSL/src/InformationRegisters/АдресныеОбъекты/Forms/ОчисткаАдресногоКлассификатора/Form.form +++ b/SSL/src/InformationRegisters/АдресныеОбъекты/Forms/ОчисткаАдресногоКлассификатора/Form.form @@ -1417,7 +1417,7 @@ <name>Очистить</name> </handler> </action> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <formCommands> @@ -1442,7 +1442,7 @@ <name>УстановитьФлажки</name> </handler> </action> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <formCommands> @@ -1467,7 +1467,7 @@ <name>СнятьФлажки</name> </handler> </action> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <formCommands> @@ -1489,7 +1489,7 @@ <name>ПрерватьОчистку</name> </handler> </action> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <commandInterface> diff --git a/SSL/src/InformationRegisters/АдресныеОбъекты/Forms/ОчисткаАдресногоКлассификатора/Module.bsl b/SSL/src/InformationRegisters/АдресныеОбъекты/Forms/ОчисткаАдресногоКлассификатора/Module.bsl index 4c3f9b997..498537a9b 100644 --- a/SSL/src/InformationRegisters/АдресныеОбъекты/Forms/ОчисткаАдресногоКлассификатора/Module.bsl +++ b/SSL/src/InformationRegisters/АдресныеОбъекты/Forms/ОчисткаАдресногоКлассификатора/Module.bsl @@ -187,9 +187,7 @@ ВыбраноРегионовДляОчистки = СубъектыРФ.НайтиСтроки( Новый Структура("Очищать", Истина) ).Количество(); // Страница загрузки - ТекстОписанияОчистки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Очищаются данные выбранных регионов (%1)'"), ВыбраноРегионовДляОчистки - ); + ТекстОписанияОчистки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Очищаются данные выбранных регионов (%1)'"), ВыбраноРегионовДляОчистки); УстановитьРазрешениеОчистки(ВыбраноРегионовДляОчистки); КонецПроцедуры diff --git a/SSL/src/InformationRegisters/АдресныеОбъекты/АдресныеОбъекты.mdo b/SSL/src/InformationRegisters/АдресныеОбъекты/АдресныеОбъекты.mdo index 50001050c..2a13c8a0f 100644 --- a/SSL/src/InformationRegisters/АдресныеОбъекты/АдресныеОбъекты.mdo +++ b/SSL/src/InformationRegisters/АдресныеОбъекты/АдресныеОбъекты.mdo @@ -500,13 +500,4 @@ <group>NavigationPanelOrdinary</group> <representation>Auto</representation> </commands> - <commands uuid="99f5d24a-00ad-403f-912a-677299f1219c"> - <name>ПроверитьОбновлениеАдресногоКлассификатора</name> - <synonym> - <key>ru</key> - <value>Проверить обновление адресного классификатора</value> - </synonym> - <group>NavigationPanelOrdinary</group> - <representation>Auto</representation> - </commands> </mdclass:InformationRegister> diff --git a/SSL/src/InformationRegisters/БезопасноеХранилищеДанных/БезопасноеХранилищеДанных.mdo b/SSL/src/InformationRegisters/БезопасноеХранилищеДанных/БезопасноеХранилищеДанных.mdo new file mode 100644 index 000000000..aef0d597d --- /dev/null +++ b/SSL/src/InformationRegisters/БезопасноеХранилищеДанных/БезопасноеХранилищеДанных.mdo @@ -0,0 +1,85 @@ +<?xml version="1.0" encoding="UTF-8"?> +<mdclass:InformationRegister xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:core="http://g5.1c.ru/v8/dt/mcore" xmlns:mdclass="http://g5.1c.ru/v8/dt/metadata/mdclass" uuid="f9f021ca-8b3e-4d10-9538-1bce7e851fdd"> + <producedTypes> + <selectionType typeId="744f41a9-3525-4f9d-a146-c0f8b3c96c77" valueTypeId="ef9962b5-025f-4e02-adaa-75bde8fb05a5"/> + <listType typeId="f240aaa1-9ffa-4675-9b6e-b472421491c9" valueTypeId="897426b9-6915-4ebd-bc8d-a884f3904a68"/> + <managerType typeId="b435678c-55d3-4c58-927f-ee9a5b5ba0aa" valueTypeId="f768d64b-8ecd-47e8-aa16-cc14ed8719b3"/> + <recordSetType typeId="5e3e5cba-da46-4ee7-b19d-7e318df09d3c" valueTypeId="f756f61a-31bf-439c-a6c0-12de657137b4"/> + <recordKeyType typeId="fdc30f78-411c-4c18-b708-22730ca73641" valueTypeId="3bc0f88c-06e8-4adf-8e4b-16631fadc129"/> + <recordType typeId="604b52ea-88f3-47e9-90d9-647ccb7f9cd1" valueTypeId="14edd79e-c468-43ef-957f-7c19a910d4e7"/> + <recordManagerType typeId="8d21ff76-96b7-4cec-b62b-501f3132a89d" valueTypeId="750cdc21-1846-40e8-9e8d-588f2cdc8577"/> + </producedTypes> + <name>БезопасноеХранилищеДанных</name> + <synonym> + <key>ru</key> + <value>Безопасное хранилище данных</value> + </synonym> + <editType>InDialog</editType> + <standardAttributes> + <dataHistory>Use</dataHistory> + <name>Active</name> + <fillValue xsi:type="core:UndefinedValue"/> + <fullTextSearch>Use</fullTextSearch> + <minValue xsi:type="core:UndefinedValue"/> + <maxValue xsi:type="core:UndefinedValue"/> + </standardAttributes> + <standardAttributes> + <dataHistory>Use</dataHistory> + <name>LineNumber</name> + <fillValue xsi:type="core:UndefinedValue"/> + <fullTextSearch>Use</fullTextSearch> + <minValue xsi:type="core:UndefinedValue"/> + <maxValue xsi:type="core:UndefinedValue"/> + </standardAttributes> + <standardAttributes> + <dataHistory>Use</dataHistory> + <name>Recorder</name> + <fillValue xsi:type="core:UndefinedValue"/> + <fullTextSearch>Use</fullTextSearch> + <minValue xsi:type="core:UndefinedValue"/> + <maxValue xsi:type="core:UndefinedValue"/> + </standardAttributes> + <standardAttributes> + <dataHistory>Use</dataHistory> + <name>Period</name> + <fillValue xsi:type="core:UndefinedValue"/> + <fillChecking>ShowError</fillChecking> + <fullTextSearch>Use</fullTextSearch> + <minValue xsi:type="core:UndefinedValue"/> + <maxValue xsi:type="core:UndefinedValue"/> + </standardAttributes> + <dataLockControlMode>Managed</dataLockControlMode> + <resources uuid="bb7cf0f8-56b0-4c0d-b206-79051ba83f6d"> + <name>Данные</name> + <synonym> + <key>ru</key> + <value>Данные</value> + </synonym> + <type> + <types>ValueStorage</types> + </type> + <minValue xsi:type="core:UndefinedValue"/> + <maxValue xsi:type="core:UndefinedValue"/> + <fullTextSearch>Use</fullTextSearch> + <dataHistory>Use</dataHistory> + <fillValue xsi:type="core:UndefinedValue"/> + </resources> + <dimensions uuid="ab057ce4-ac51-4465-8aad-eadc9088c62d"> + <name>Владелец</name> + <synonym> + <key>ru</key> + <value>Владелец</value> + </synonym> + <type> + <types>ExchangePlanRef</types> + <types>CatalogRef</types> + </type> + <minValue xsi:type="core:UndefinedValue"/> + <maxValue xsi:type="core:UndefinedValue"/> + <fullTextSearch>Use</fullTextSearch> + <dataHistory>Use</dataHistory> + <fillFromFillingValue>true</fillFromFillingValue> + <fillValue xsi:type="core:UndefinedValue"/> + <mainFilter>true</mainFilter> + </dimensions> +</mdclass:InformationRegister> diff --git a/SSL/src/InformationRegisters/БезопасноеХранилищеДанныхОбластейДанных/БезопасноеХранилищеДанныхОбластейДанных.mdo b/SSL/src/InformationRegisters/БезопасноеХранилищеДанныхОбластейДанных/БезопасноеХранилищеДанныхОбластейДанных.mdo new file mode 100644 index 000000000..6eda61aad --- /dev/null +++ b/SSL/src/InformationRegisters/БезопасноеХранилищеДанныхОбластейДанных/БезопасноеХранилищеДанныхОбластейДанных.mdo @@ -0,0 +1,85 @@ +<?xml version="1.0" encoding="UTF-8"?> +<mdclass:InformationRegister xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:core="http://g5.1c.ru/v8/dt/mcore" xmlns:mdclass="http://g5.1c.ru/v8/dt/metadata/mdclass" uuid="8842c0e3-2e20-4f37-ae7c-f5449004994b"> + <producedTypes> + <selectionType typeId="371c647c-267e-425e-bef5-2868178cee38" valueTypeId="b368e298-69b2-4ddf-b25f-bf254991ca7e"/> + <listType typeId="13d48d41-986f-4732-8183-a53f32ce1cb5" valueTypeId="0ff1c7b6-e88d-4715-9a94-820eb3930d00"/> + <managerType typeId="d686188a-33da-4d87-b5ed-b75ba140452e" valueTypeId="a884adcc-de04-4ad7-a69d-ebc64b9d036a"/> + <recordSetType typeId="2d9a9828-a754-4172-ac8a-14aca7f1e70d" valueTypeId="15a08e66-d288-4322-93e2-4bd077f69c52"/> + <recordKeyType typeId="fce1c68f-3380-4d91-97fb-0d60371b98dd" valueTypeId="efdc1f48-a7d2-4f1c-8a2f-7778249afc86"/> + <recordType typeId="7d72ac66-3011-4562-a0a0-289138d2f232" valueTypeId="e219c01a-b9c1-413e-a357-3b7d2cfe314c"/> + <recordManagerType typeId="a70f82f1-9e3c-4622-bb56-e30500571470" valueTypeId="3de9e005-f933-455a-b2b9-3b35d0f0c840"/> + </producedTypes> + <name>БезопасноеХранилищеДанныхОбластейДанных</name> + <synonym> + <key>ru</key> + <value>Безопасное хранилище данных областей данных</value> + </synonym> + <editType>InDialog</editType> + <standardAttributes> + <dataHistory>Use</dataHistory> + <name>Active</name> + <fillValue xsi:type="core:UndefinedValue"/> + <fullTextSearch>Use</fullTextSearch> + <minValue xsi:type="core:UndefinedValue"/> + <maxValue xsi:type="core:UndefinedValue"/> + </standardAttributes> + <standardAttributes> + <dataHistory>Use</dataHistory> + <name>LineNumber</name> + <fillValue xsi:type="core:UndefinedValue"/> + <fullTextSearch>Use</fullTextSearch> + <minValue xsi:type="core:UndefinedValue"/> + <maxValue xsi:type="core:UndefinedValue"/> + </standardAttributes> + <standardAttributes> + <dataHistory>Use</dataHistory> + <name>Recorder</name> + <fillValue xsi:type="core:UndefinedValue"/> + <fullTextSearch>Use</fullTextSearch> + <minValue xsi:type="core:UndefinedValue"/> + <maxValue xsi:type="core:UndefinedValue"/> + </standardAttributes> + <standardAttributes> + <dataHistory>Use</dataHistory> + <name>Period</name> + <fillValue xsi:type="core:UndefinedValue"/> + <fillChecking>ShowError</fillChecking> + <fullTextSearch>Use</fullTextSearch> + <minValue xsi:type="core:UndefinedValue"/> + <maxValue xsi:type="core:UndefinedValue"/> + </standardAttributes> + <dataLockControlMode>Managed</dataLockControlMode> + <resources uuid="5b2cc44b-69cb-495c-a26b-003a495df40b"> + <name>Данные</name> + <synonym> + <key>ru</key> + <value>Данные</value> + </synonym> + <type> + <types>ValueStorage</types> + </type> + <minValue xsi:type="core:UndefinedValue"/> + <maxValue xsi:type="core:UndefinedValue"/> + <fullTextSearch>Use</fullTextSearch> + <dataHistory>Use</dataHistory> + <fillValue xsi:type="core:UndefinedValue"/> + </resources> + <dimensions uuid="30250d93-10ff-45c9-920b-5fed3f9d8093"> + <name>Владелец</name> + <synonym> + <key>ru</key> + <value>Владелец</value> + </synonym> + <type> + <types>ExchangePlanRef</types> + <types>CatalogRef</types> + </type> + <minValue xsi:type="core:UndefinedValue"/> + <maxValue xsi:type="core:UndefinedValue"/> + <fullTextSearch>Use</fullTextSearch> + <dataHistory>Use</dataHistory> + <fillFromFillingValue>true</fillFromFillingValue> + <fillValue xsi:type="core:UndefinedValue"/> + <mainFilter>true</mainFilter> + </dimensions> +</mdclass:InformationRegister> diff --git a/SSL/src/InformationRegisters/БуферОперацийСтатистики/Forms/ФормаСписка/Attributes/Список/ExtInfo/ListSettings.dcss b/SSL/src/InformationRegisters/БуферОперацийСтатистики/Forms/ФормаСписка/Attributes/Список/ExtInfo/ListSettings.dcss new file mode 100644 index 000000000..da9c2752c --- /dev/null +++ b/SSL/src/InformationRegisters/БуферОперацийСтатистики/Forms/ФормаСписка/Attributes/Список/ExtInfo/ListSettings.dcss @@ -0,0 +1,37 @@ +<?xml version="1.0" encoding="UTF-8"?> +<Settings xmlns="http://v8.1c.ru/8.1/data-composition-system/settings" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:v8="http://v8.1c.ru/8.1/data/core" xmlns:v8ui="http://v8.1c.ru/8.1/data/ui" xmlns:pal="http://v8.1c.ru/8.1/data/ui/colors/palette" xmlns:style="http://v8.1c.ru/8.1/data/ui/style" xmlns:sys="http://v8.1c.ru/8.1/data/ui/fonts/system" xmlns:web="http://v8.1c.ru/8.1/data/ui/colors/web" xmlns:win="http://v8.1c.ru/8.1/data/ui/colors/windows" xmlns:dcscor="http://v8.1c.ru/8.1/data-composition-system/core"> + <filter> + <viewMode>Normal</viewMode> + <userSettingID>dfcece9d-5077-440b-b6b3-45a5cb4538eb</userSettingID> + </filter> + <order> + <viewMode>Normal</viewMode> + <userSettingID>88619765-ccb3-46c6-ac52-38e9c992ebd4</userSettingID> + </order> + <conditionalAppearance> + <item> + <selection> + <item> + <field>Период</field> + </item> + <item> + <field>ДатаЗаписи</field> + </item> + <item> + <field>Значение</field> + </item> + </selection> + <filter/> + <appearance> + <dcscor:item xsi:type="SettingsParameterValue"> + <dcscor:parameter>ГоризонтальноеПоложение</dcscor:parameter> + <dcscor:value xsi:type="v8ui:HorizontalAlign">Left</dcscor:value> + </dcscor:item> + </appearance> + </item> + <viewMode>Normal</viewMode> + <userSettingID>b75fecce-942b-4aed-abc9-e6a02e460fb3</userSettingID> + </conditionalAppearance> + <itemsViewMode>Normal</itemsViewMode> + <itemsUserSettingID>911b6018-f537-43e8-a417-da56b22f9aec</itemsUserSettingID> +</Settings> diff --git a/SSL/src/InformationRegisters/БуферОперацийСтатистики/Forms/ФормаСписка/Form.form b/SSL/src/InformationRegisters/БуферОперацийСтатистики/Forms/ФормаСписка/Form.form new file mode 100644 index 000000000..3576593e5 --- /dev/null +++ b/SSL/src/InformationRegisters/БуферОперацийСтатистики/Forms/ФормаСписка/Form.form @@ -0,0 +1,808 @@ +<?xml version="1.0" encoding="UTF-8"?> +<form:Form xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:core="http://g5.1c.ru/v8/dt/mcore" xmlns:form="http://g5.1c.ru/v8/dt/form"> + <items xsi:type="form:FormGroup"> + <name>СписокКомпоновщикНастроекПользовательскиеНастройки</name> + <id>1</id> + <visible>true</visible> + <enabled>true</enabled> + <userVisible> + <common>true</common> + </userVisible> + <title> + <key>ru</key> + <value>Группа пользовательских настроек</value> + + false + + СписокКомпоновщикНастроекПользовательскиеНастройкиРасширеннаяПодсказка + 2 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + WeakSeparation + true + true + Auto + Auto + + + + Список + 3 + true + true + + true + + + Список + + true + None + + ГруппаПериод + 82 + + Период + 84 + true + true + + true + + + Список.Период + + + ПериодРасширеннаяПодсказка + 86 + Label + true + true + + Left + + + + ПериодКонтекстноеМеню + 85 + true + + LabelField + Enter + true + Left + true + + true + true + + + + ДатаЗаписи + 52 + + <key>ru</key> + <value>Период подробно</value> + + true + true + + true + + + Список.ДатаЗаписи + + + ДатаЗаписиРасширеннаяПодсказка + 54 + Label + true + true + + Left + + + + ДатаЗаписиКонтекстноеМеню + 53 + true + + LabelField + Enter + true + Left + true + + true + true + + + true + true + + true + + + <key>ru</key> + <value>Группа период</value> + + + ru + Группа период + + + ГруппаПериодРасширеннаяПодсказка + 83 + Label + true + true + + Left + + + ColumnGroup + + Vertical + auto + true + + + + ГруппаОперация + 46 + + ОперацияСтатистикиНаименование + 64 + + <key>ru</key> + <value>Операция</value> + + true + true + + true + + + Список.ОперацияСтатистикиНаименование + + + ОперацияСтатистикиНаименованиеРасширеннаяПодсказка + 66 + Label + true + true + + Left + + + + ОперацияСтатистикиНаименованиеКонтекстноеМеню + 65 + true + + LabelField + Enter + true + Left + true + + true + true + + + + ОперацияСтатистики + 67 + + <key>ru</key> + <value>Операция ссылка</value> + + true + true + + true + + + Список.ОперацияСтатистики + + + ОперацияСтатистикиРасширеннаяПодсказка + 69 + Label + true + true + + Left + + + + ОперацияСтатистикиКонтекстноеМеню + 68 + true + + LabelField + Enter + true + Left + true + + true + true + + + true + true + + true + + + <key>ru</key> + <value>Группа операция</value> + + + ru + Группа операция + + + ГруппаОперацияРасширеннаяПодсказка + 47 + Label + true + true + + Left + + + ColumnGroup + + Vertical + auto + true + + + + ГруппаКомментарий + 48 + + КомментарийСтатистикиНаименование + 70 + + <key>ru</key> + <value>Комментарий</value> + + true + true + + true + + + Список.КомментарийСтатистикиНаименование + + + КомментарийСтатистикиНаименованиеРасширеннаяПодсказка + 72 + Label + true + true + + Left + + + + КомментарийСтатистикиНаименованиеКонтекстноеМеню + 71 + true + + LabelField + Enter + true + Left + true + + true + true + + + + КомментарийСтатистики + 73 + + <key>ru</key> + <value>Комментарий ссылка</value> + + true + true + + true + + + Список.КомментарийСтатистики + + + КомментарийСтатистикиРасширеннаяПодсказка + 75 + Label + true + true + + Left + + + + КомментарийСтатистикиКонтекстноеМеню + 74 + true + + LabelField + Enter + true + Left + true + + true + true + + + true + true + + true + + + <key>ru</key> + <value>Группа комментарий</value> + + + ru + Группа комментарий + + + ГруппаКомментарийРасширеннаяПодсказка + 49 + Label + true + true + + Left + + + ColumnGroup + + Vertical + auto + true + + + + ГруппаОбласти + 50 + + ОбластьСтатистикиНаименование + 76 + + <key>ru</key> + <value>Область</value> + + true + true + + true + + + Список.ОбластьСтатистикиНаименование + + + ОбластьСтатистикиНаименованиеРасширеннаяПодсказка + 78 + Label + true + true + + Left + + + + ОбластьСтатистикиНаименованиеКонтекстноеМеню + 77 + true + + LabelField + Enter + true + Left + true + + true + true + + + + ОбластьСтатистики + 79 + + <key>ru</key> + <value>Область ссылка</value> + + true + true + + true + + + Список.ОбластьСтатистики + + + ОбластьСтатистикиРасширеннаяПодсказка + 81 + Label + true + true + + Left + + + + ОбластьСтатистикиКонтекстноеМеню + 80 + true + + LabelField + Enter + true + Left + true + + true + true + + + true + true + + true + + + <key>ru</key> + <value>Группа области</value> + + + ru + Группа области + + + ГруппаОбластиРасширеннаяПодсказка + 51 + Label + true + true + + Left + + + ColumnGroup + + Vertical + auto + true + + + + Значение + 58 + true + true + + true + + + Список.Значение + + + ЗначениеРасширеннаяПодсказка + 60 + Label + true + true + + Left + + + + ЗначениеКонтекстноеМеню + 59 + true + + LabelField + Enter + true + Left + true + + true + true + + + + ИдентификаторЗаписи + 61 + true + true + + true + + + Список.ИдентификаторЗаписи + + + ИдентификаторЗаписиРасширеннаяПодсказка + 63 + Label + true + true + + Left + + + + ИдентификаторЗаписиКонтекстноеМеню + 62 + true + + LabelField + Enter + true + Left + true + + true + true + + + + ИдентификаторУдаления + 55 + true + true + + true + + + Список.ИдентификаторУдаления + + + ИдентификаторУдаленияРасширеннаяПодсказка + 57 + Label + true + true + + Left + + + + ИдентификаторУдаленияКонтекстноеМеню + 56 + true + + LabelField + Enter + true + Left + true + + true + true + + + None + + СписокКоманднаяПанель + 5 + Left + + + СписокСтрокаПоиска + 7 + + СписокСтрокаПоискаРасширеннаяПодсказка + 9 + Label + true + true + + Left + + + + СписокСтрокаПоискаКонтекстноеМеню + 8 + true + + Список + + true + + + + СписокСостояниеПросмотра + 10 + + СписокСостояниеПросмотраРасширеннаяПодсказка + 12 + Label + true + true + + Left + + + + СписокСостояниеПросмотраКонтекстноеМеню + 11 + true + + ViewStatusAddition + Список + + true + + + + СписокУправлениеПоиском + 13 + + СписокУправлениеПоискомРасширеннаяПодсказка + 15 + Label + true + true + + Left + + + + СписокУправлениеПоискомКонтекстноеМеню + 14 + true + + SearchControlAddition + Список + + true + + + + СписокРасширеннаяПодсказка + 6 + Label + true + true + + Left + + + + СписокКонтекстноеМеню + 4 + true + + true + true + true + true + true + MultiRow +
        true
        + 1 + 1 + AutoUse + AutoUse + true + true + Auto + Auto + ExpandTopLevel + true + true + true + + Список.DefaultPicture + + None + None + true + + 60 + + 0001-01-01T00:00:00 + 0001-01-01T00:00:00 + + + true + true + СписокКомпоновщикНастроекПользовательскиеНастройки + +
        + + ФормаКоманднаяПанель + -1 + Left + true + + DontBlock + true + true + true + Vertical + true + true + true + auto + true + + Список + 1 + + DynamicList + + + true + + + true + +
        true
        + + ВЫБРАТЬ + ДОБАВИТЬКДАТЕ( + ДАТАВРЕМЯ(2015,1,1), + СЕКУНДА, + (ВЫРАЗИТЬ(БуферОперацийСтатистики.ДатаЗаписи/1000 - 0.5 КАК ЧИСЛО(15,0)) * 1000)/1000 - 63555667200 + ) КАК Период, + БуферОперацийСтатистики.ДатаЗаписи, + БуферОперацийСтатистики.ИдентификаторУдаления, + БуферОперацийСтатистики.ИдентификаторЗаписи, + ОперацииСтатистики.Наименование КАК ОперацияСтатистикиНаименование, + КомментарииСтатистики.Наименование КАК КомментарийСтатистикиНаименование, + ОбластиСтатистики.Наименование КАК ОбластьСтатистикиНаименование, + БуферОперацийСтатистики.Значение, + БуферОперацийСтатистики.ОперацияСтатистики, + БуферОперацийСтатистики.КомментарийСтатистики, + БуферОперацийСтатистики.ОбластьСтатистики +ИЗ + РегистрСведений.БуферОперацийСтатистики КАК БуферОперацийСтатистики +ЛЕВОЕ СОЕДИНЕНИЕ + РегистрСведений.ОперацииСтатистики КАК ОперацииСтатистики +ПО + БуферОперацийСтатистики.ОперацияСтатистики = ОперацииСтатистики.ИдентификаторОперации +ЛЕВОЕ СОЕДИНЕНИЕ + РегистрСведений.КомментарииСтатистики КАК КомментарииСтатистики +ПО + БуферОперацийСтатистики.КомментарийСтатистики = КомментарииСтатистики.ИдентификаторКомментария +ЛЕВОЕ СОЕДИНЕНИЕ + РегистрСведений.ОбластиСтатистики КАК ОбластиСтатистики +ПО + БуферОперацийСтатистики.ОбластьСтатистики = ОбластиСтатистики.ИдентификаторОбласти + InformationRegister.БуферОперацийСтатистики + true + true + true + true + true + +
        + + + + + + diff --git a/SSL/src/InformationRegisters/БуферОперацийСтатистики/ManagerModule.bsl b/SSL/src/InformationRegisters/БуферОперацийСтатистики/ManagerModule.bsl new file mode 100644 index 000000000..cb904c947 --- /dev/null +++ b/SSL/src/InformationRegisters/БуферОперацийСтатистики/ManagerModule.bsl @@ -0,0 +1,250 @@ +#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда + +#Область СлужебныеПроцедурыИФункции + +Процедура ЗаписатьОперациюБизнесСтатистики(ИмяОперации, Значение, Комментарий = Неопределено, Разделитель = ".") Экспорт + УстановитьПривилегированныйРежим(Истина); + + ПериодИдентификатораУдаления = ЦентрМониторингаВызовСервераПовтИсп.ПолучитьПараметрыЦентраМониторинга("ПериодАгрегацииМалый"); + + ОбластьДанных = Формат(ОбщегоНазначения.ЗначениеРазделителяСеанса(), "ЧН=0; ЧГ=0"); + + ТекДата = ТекущаяУниверсальнаяДатаВМиллисекундах(); + + Если Разделитель <> "." Тогда + ИмяОперации = СтрЗаменить(ИмяОперации, ".", "☼"); + ИмяОперации = СтрЗаменить(ИмяОперации, Разделитель, "."); + КонецЕсли; + + ОперацияСсылка = РегистрыСведений.ОперацииСтатистики.ПолучитьСсылку(ИмяОперации); + КомментарийСсылка = РегистрыСведений.КомментарииСтатистики.ПолучитьСсылку(Комментарий, ОперацияСсылка); + ОбластьДанныхСсылка = РегистрыСведений.ОбластиСтатистики.ПолучитьСсылку(ОбластьДанных); + + НаборЗаписей = РегистрыСведений.БуферОперацийСтатистики.СоздатьНаборЗаписей(); + НовЗапись = НаборЗаписей.Добавить(); + НовЗапись.ДатаЗаписи = ТекДата; + НовЗапись.ИдентификаторУдаления = Цел(Цел(ТекДата/1000)/ПериодИдентификатораУдаления)*ПериодИдентификатораУдаления; + НовЗапись.ИдентификаторЗаписи = Новый УникальныйИдентификатор(); + НовЗапись.ОперацияСтатистики = ОперацияСсылка; + НовЗапись.КомментарийСтатистики = КомментарийСсылка; + НовЗапись.ОбластьСтатистики = ОбластьДанныхСсылка; + НовЗапись.Значение = Значение; + + НаборЗаписей.ОбменДанными.Загрузка = Истина; + НаборЗаписей.Записать(Ложь); + + УстановитьПривилегированныйРежим(Ложь); +КонецПроцедуры + +Функция ПолучитьАгрегированныеЗаписиОпераций(ДатаЗаписи, ПериодАгрегации, ПериодУдаления) Экспорт + Запрос = Новый Запрос; + Запрос.Текст = " + |ВЫБРАТЬ + | ДОБАВИТЬКДАТЕ( + | ДАТАВРЕМЯ(2015,1,1), + | СЕКУНДА, + | (ВЫРАЗИТЬ(БуферОперацийСтатистики.ДатаЗаписи/&ПериодАгрегации - 0.5 КАК ЧИСЛО(15,0)) * &ПериодАгрегации)/1000 - 63555667200 + | ) КАК Период, + | БуферОперацийСтатистики.ОперацияСтатистики КАК ОперацияСтатистики, + | ДОБАВИТЬКДАТЕ( + | ДАТАВРЕМЯ(2015,1,1), + | СЕКУНДА, + | (ВЫРАЗИТЬ(БуферОперацийСтатистики.ДатаЗаписи/&ПериодУдаления - 0.5 КАК ЧИСЛО(15,0)) * &ПериодУдаления)/1000 - 63555667200 + | ) КАК ИдентификаторУдаления, + | СУММА(1) КАК КоличествоЗначений, + | СУММА(БуферОперацийСтатистики.Значение) КАК СуммаЗначений, + | ДОБАВИТЬКДАТЕ( + | ДАТАВРЕМЯ(2015,1,1), + | СЕКУНДА, + | (ВЫРАЗИТЬ(БуферОперацийСтатистики.ДатаЗаписи/&ПериодАгрегации - 0.5 КАК ЧИСЛО(15,0)) * &ПериодАгрегации)/1000 - 63555667200 + &ПериодАгрегации/1000 - 1 + | ) КАК ПериодОкончание + |ИЗ + | РегистрСведений.БуферОперацийСтатистики КАК БуферОперацийСтатистики + |ГДЕ + | БуферОперацийСтатистики.ДатаЗаписи < &ДатаЗаписи + |СГРУППИРОВАТЬ ПО + | ДОБАВИТЬКДАТЕ( + | ДАТАВРЕМЯ(2015,1,1), + | СЕКУНДА, + | (ВЫРАЗИТЬ(БуферОперацийСтатистики.ДатаЗаписи/&ПериодАгрегации - 0.5 КАК ЧИСЛО(15,0)) * &ПериодАгрегации)/1000 - 63555667200 + | ), + | БуферОперацийСтатистики.ОперацияСтатистики, + | ДОБАВИТЬКДАТЕ( + | ДАТАВРЕМЯ(2015,1,1), + | СЕКУНДА, + | (ВЫРАЗИТЬ(БуферОперацийСтатистики.ДатаЗаписи/&ПериодУдаления - 0.5 КАК ЧИСЛО(15,0)) * &ПериодУдаления)/1000 - 63555667200 + | ), + | ДОБАВИТЬКДАТЕ( + | ДАТАВРЕМЯ(2015,1,1), + | СЕКУНДА, + | (ВЫРАЗИТЬ(БуферОперацийСтатистики.ДатаЗаписи/&ПериодАгрегации - 0.5 КАК ЧИСЛО(15,0)) * &ПериодАгрегации)/1000 - 63555667200 + &ПериодАгрегации/1000 - 1 + | ) + |УПОРЯДОЧИТЬ ПО + | ДОБАВИТЬКДАТЕ( + | ДАТАВРЕМЯ(2015,1,1), + | СЕКУНДА, + | (ВЫРАЗИТЬ(БуферОперацийСтатистики.ДатаЗаписи/&ПериодАгрегации - 0.5 КАК ЧИСЛО(15,0)) * &ПериодАгрегации)/1000 - 63555667200 + | ) + |"; + + Запрос.УстановитьПараметр("ДатаЗаписи", (ДатаЗаписи - Дата(1, 1, 1)) * 1000); + Запрос.УстановитьПараметр("ПериодАгрегации", ПериодАгрегации * 1000); + Запрос.УстановитьПараметр("ПериодУдаления", ПериодУдаления * 1000); + + РезультатЗапроса = Запрос.Выполнить(); + + Возврат РезультатЗапроса; +КонецФункции + +Функция ПолучитьАгрегированныеЗаписиКомментарий(ДатаЗаписи, ПериодАгрегации, ПериодУдаления) Экспорт + Запрос = Новый Запрос; + Запрос.Текст = " + |ВЫБРАТЬ + | ДОБАВИТЬКДАТЕ( + | ДАТАВРЕМЯ(2015,1,1), + | СЕКУНДА, + | (ВЫРАЗИТЬ(БуферОперацийСтатистики.ДатаЗаписи/&ПериодАгрегации - 0.5 КАК ЧИСЛО(15,0)) * &ПериодАгрегации)/1000 - 63555667200 + | ) КАК Период, + | БуферОперацийСтатистики.ОперацияСтатистики КАК ОперацияСтатистики, + | БуферОперацийСтатистики.КомментарийСтатистики КАК КомментарийСтатистики, + | ДОБАВИТЬКДАТЕ( + | ДАТАВРЕМЯ(2015,1,1), + | СЕКУНДА, + | (ВЫРАЗИТЬ(БуферОперацийСтатистики.ДатаЗаписи/&ПериодУдаления - 0.5 КАК ЧИСЛО(15,0)) * &ПериодУдаления)/1000 - 63555667200 + | ) КАК ИдентификаторУдаления, + | СУММА(1) КАК КоличествоЗначений, + | ДОБАВИТЬКДАТЕ( + | ДАТАВРЕМЯ(2015,1,1), + | СЕКУНДА, + | (ВЫРАЗИТЬ(БуферОперацийСтатистики.ДатаЗаписи/&ПериодАгрегации - 0.5 КАК ЧИСЛО(15,0)) * &ПериодАгрегации)/1000 - 63555667200 + &ПериодАгрегации/1000 - 1 + | ) КАК ПериодОкончание + |ИЗ + | РегистрСведений.БуферОперацийСтатистики КАК БуферОперацийСтатистики + |ГДЕ + | БуферОперацийСтатистики.ДатаЗаписи < &ДатаЗаписи + |СГРУППИРОВАТЬ ПО + | ДОБАВИТЬКДАТЕ( + | ДАТАВРЕМЯ(2015,1,1), + | СЕКУНДА, + | (ВЫРАЗИТЬ(БуферОперацийСтатистики.ДатаЗаписи/&ПериодАгрегации - 0.5 КАК ЧИСЛО(15,0)) * &ПериодАгрегации)/1000 - 63555667200 + | ), + | БуферОперацийСтатистики.ОперацияСтатистики, + | БуферОперацийСтатистики.КомментарийСтатистики, + | ДОБАВИТЬКДАТЕ( + | ДАТАВРЕМЯ(2015,1,1), + | СЕКУНДА, + | (ВЫРАЗИТЬ(БуферОперацийСтатистики.ДатаЗаписи/&ПериодУдаления - 0.5 КАК ЧИСЛО(15,0)) * &ПериодУдаления)/1000 - 63555667200 + | ), + | ДОБАВИТЬКДАТЕ( + | ДАТАВРЕМЯ(2015,1,1), + | СЕКУНДА, + | (ВЫРАЗИТЬ(БуферОперацийСтатистики.ДатаЗаписи/&ПериодАгрегации - 0.5 КАК ЧИСЛО(15,0)) * &ПериодАгрегации)/1000 - 63555667200 + &ПериодАгрегации/1000 - 1 + | ) + |УПОРЯДОЧИТЬ ПО + | ДОБАВИТЬКДАТЕ( + | ДАТАВРЕМЯ(2015,1,1), + | СЕКУНДА, + | (ВЫРАЗИТЬ(БуферОперацийСтатистики.ДатаЗаписи/&ПериодАгрегации - 0.5 КАК ЧИСЛО(15,0)) * &ПериодАгрегации)/1000 - 63555667200 + | ) + |"; + + Запрос.УстановитьПараметр("ДатаЗаписи", (ДатаЗаписи - Дата(1, 1, 1)) * 1000); + Запрос.УстановитьПараметр("ПериодАгрегации", ПериодАгрегации * 1000); + Запрос.УстановитьПараметр("ПериодУдаления", ПериодУдаления * 1000); + + РезультатЗапроса = Запрос.Выполнить(); + + Возврат РезультатЗапроса; +КонецФункции + +Функция ПолучитьАгрегированныеЗаписиОбластиСтатистики(ДатаЗаписи, ПериодАгрегации, ПериодУдаления) Экспорт + ПериодУдаления = 3600; + + Запрос = Новый Запрос; + Запрос.Текст = " + |ВЫБРАТЬ + | ДОБАВИТЬКДАТЕ( + | ДАТАВРЕМЯ(2015,1,1), + | СЕКУНДА, + | (ВЫРАЗИТЬ(БуферОперацийСтатистики.ДатаЗаписи/&ПериодАгрегации - 0.5 КАК ЧИСЛО(15,0)) * &ПериодАгрегации)/1000 - 63555667200 + | ) КАК Период, + | БуферОперацийСтатистики.ОперацияСтатистики КАК ОперацияСтатистики, + | БуферОперацийСтатистики.ОбластьСтатистики КАК ОбластьСтатистики, + | ДОБАВИТЬКДАТЕ( + | ДАТАВРЕМЯ(2015,1,1), + | СЕКУНДА, + | (ВЫРАЗИТЬ(БуферОперацийСтатистики.ДатаЗаписи/&ПериодУдаления - 0.5 КАК ЧИСЛО(15,0)) * &ПериодУдаления)/1000 - 63555667200 + | ) КАК ИдентификаторУдаления, + | СУММА(1) КАК КоличествоЗначений, + | ДОБАВИТЬКДАТЕ( + | ДАТАВРЕМЯ(2015,1,1), + | СЕКУНДА, + | (ВЫРАЗИТЬ(БуферОперацийСтатистики.ДатаЗаписи/&ПериодАгрегации - 0.5 КАК ЧИСЛО(15,0)) * &ПериодАгрегации)/1000 - 63555667200 + &ПериодАгрегации/1000 - 1 + | ) КАК ПериодОкончание + |ИЗ + | РегистрСведений.БуферОперацийСтатистики КАК БуферОперацийСтатистики + |ГДЕ + | БуферОперацийСтатистики.ДатаЗаписи < &ДатаЗаписи + |СГРУППИРОВАТЬ ПО + | ДОБАВИТЬКДАТЕ( + | ДАТАВРЕМЯ(2015,1,1), + | СЕКУНДА, + | (ВЫРАЗИТЬ(БуферОперацийСтатистики.ДатаЗаписи/&ПериодАгрегации - 0.5 КАК ЧИСЛО(15,0)) * &ПериодАгрегации)/1000 - 63555667200 + | ), + | БуферОперацийСтатистики.ОперацияСтатистики, + | БуферОперацийСтатистики.ОбластьСтатистики, + | ДОБАВИТЬКДАТЕ( + | ДАТАВРЕМЯ(2015,1,1), + | СЕКУНДА, + | (ВЫРАЗИТЬ(БуферОперацийСтатистики.ДатаЗаписи/&ПериодУдаления - 0.5 КАК ЧИСЛО(15,0)) * &ПериодУдаления)/1000 - 63555667200 + | ), + | ДОБАВИТЬКДАТЕ( + | ДАТАВРЕМЯ(2015,1,1), + | СЕКУНДА, + | (ВЫРАЗИТЬ(БуферОперацийСтатистики.ДатаЗаписи/&ПериодАгрегации - 0.5 КАК ЧИСЛО(15,0)) * &ПериодАгрегации)/1000 - 63555667200 + &ПериодАгрегации/1000 - 1 + | ) + |УПОРЯДОЧИТЬ ПО + | ДОБАВИТЬКДАТЕ( + | ДАТАВРЕМЯ(2015,1,1), + | СЕКУНДА, + | (ВЫРАЗИТЬ(БуферОперацийСтатистики.ДатаЗаписи/&ПериодАгрегации - 0.5 КАК ЧИСЛО(15,0)) * &ПериодАгрегации)/1000 - 63555667200 + | ) + |"; + + Запрос.УстановитьПараметр("ДатаЗаписи", (ДатаЗаписи - Дата(1, 1, 1)) * 1000); + Запрос.УстановитьПараметр("ПериодАгрегации", ПериодАгрегации * 1000); + Запрос.УстановитьПараметр("ПериодУдаления", ПериодУдаления * 1000); + + РезультатЗапроса = Запрос.Выполнить(); + + Возврат РезультатЗапроса; +КонецФункции + +Процедура УдалитьЗаписи(ДатаЗаписи) Экспорт + Запрос = Новый Запрос; + Запрос.Текст = " + |ВЫБРАТЬ РАЗЛИЧНЫЕ + | БуферОперацийСтатистики.ИдентификаторУдаления КАК ИдентификаторУдаления + |ИЗ + | РегистрСведений.БуферОперацийСтатистики КАК БуферОперацийСтатистики + |ГДЕ + | БуферОперацийСтатистики.ДатаЗаписи < &ДатаЗаписи + |УПОРЯДОЧИТЬ ПО + | БуферОперацийСтатистики.ИдентификаторУдаления + |"; + + Запрос.УстановитьПараметр("ДатаЗаписи", (ДатаЗаписи - Дата(1, 1, 1)) * 1000); + + РезультатЗапроса = Запрос.Выполнить(); + + НаборЗаписей = РегистрыСведений.БуферОперацийСтатистики.СоздатьНаборЗаписей(); + Выборка = РезультатЗапроса.Выбрать(); + Пока Выборка.Следующий() Цикл + НаборЗаписей.Отбор.ИдентификаторУдаления.Установить(Выборка.ИдентификаторУдаления); + НаборЗаписей.Записать(Истина); + КонецЦикла; +КонецПроцедуры + +#КонецОбласти + +#КонецЕсли \ No newline at end of file diff --git a/SSL/src/InformationRegisters/БуферОперацийСтатистики/БуферОперацийСтатистики.mdo b/SSL/src/InformationRegisters/БуферОперацийСтатистики/БуферОперацийСтатистики.mdo new file mode 100644 index 000000000..f8453b3b1 --- /dev/null +++ b/SSL/src/InformationRegisters/БуферОперацийСтатистики/БуферОперацийСтатистики.mdo @@ -0,0 +1,179 @@ + + + + + + + + + + + + БуферОперацийСтатистики + + ru + Буфер операций статистики + + true + InDialog + InformationRegister.БуферОперацийСтатистики.Form.ФормаСписка + + Use + Active + + Use + + + + + Use + LineNumber + + Use + + + + + Use + Recorder + + Use + + + + + Use + Period + + ShowError + Use + + + + Managed + + ОперацияСтатистики + + ru + Операция статистики + + + UUID + + + + Use + + + + КомментарийСтатистики + + ru + Комментарий статистики + + + UUID + + + + Use + + + + ОбластьСтатистики + + ru + Область статистики + + + UUID + + + + Use + + + + Значение + + ru + Значение + + + Number + + 15 + 3 + + + + + Use + Use + + + + ДатаЗаписи + + ru + Дата записи + + + Number + + 15 + true + + + + + Use + Use + + true + + + ИдентификаторУдаления + + ru + Идентификатор удаления + + + Number + + 11 + true + + + + + Index + Use + + true + + + ИдентификаторЗаписи + + ru + Идентификатор записи + + + UUID + + + + Use + + true + + + ФормаСписка + + ru + Форма списка + + PersonalComputer + MobileDevice + + diff --git a/SSL/src/InformationRegisters/ВерсииОбъектов/Forms/ВыборРеквизитовОбъекта/Form.form b/SSL/src/InformationRegisters/ВерсииОбъектов/Forms/ВыборРеквизитовОбъекта/Form.form index 514434262..acc7dc5af 100644 --- a/SSL/src/InformationRegisters/ВерсииОбъектов/Forms/ВыборРеквизитовОбъекта/Form.form +++ b/SSL/src/InformationRegisters/ВерсииОбъектов/Forms/ВыборРеквизитовОбъекта/Form.form @@ -466,7 +466,7 @@ УстановитьФлажки - Auto + DontUse Auto
        @@ -491,7 +491,7 @@ СнятьФлажки - Auto + DontUse Auto @@ -513,7 +513,7 @@ Выбрать - Auto + DontUse Auto diff --git a/SSL/src/InformationRegisters/ВерсииОбъектов/Forms/ВыборРеквизитовОбъекта/Module.bsl b/SSL/src/InformationRegisters/ВерсииОбъектов/Forms/ВыборРеквизитовОбъекта/Module.bsl index ee95f0164..8222e9064 100644 --- a/SSL/src/InformationRegisters/ВерсииОбъектов/Forms/ВыборРеквизитовОбъекта/Module.bsl +++ b/SSL/src/InformationRegisters/ВерсииОбъектов/Forms/ВыборРеквизитовОбъекта/Module.bsl @@ -35,6 +35,7 @@ ТабличнаяЧасть.Пометка = ЕстьВыбранныеЭлементы + ?(ЕстьВыбранныеЭлементы, (Не ВыбранаВсяТабличнаяЧасть), ЕстьВыбранныеЭлементы); КонецЦикла; + ВерсионированиеОбъектовПереопределяемый.ПриВыбореРеквизитовОбъекта(Параметры.Ссылка, РеквизитыОбъекта); КонецПроцедуры #КонецОбласти @@ -72,7 +73,6 @@ Закрыть(Результат); КонецПроцедуры -&НаКлиенте #КонецОбласти #Область СлужебныеПроцедурыИФункции @@ -119,7 +119,7 @@ &НаКлиенте Функция ПредставлениеВыбранныхРеквизитов() - Результат = СтроковыеФункцииКлиентСервер.СтрокаИзМассиваПодстрок(СинонимыВыбранныхРеквизитов(), ", "); + Результат = СтрСоединить(СинонимыВыбранныхРеквизитов(), ", "); Если Результат = "*" Тогда Результат = НСтр("ru = 'Все реквизиты'"); КонецЕсли; @@ -194,6 +194,3 @@ КонецПроцедуры #КонецОбласти - - - diff --git a/SSL/src/InformationRegisters/ВерсииОбъектов/Forms/ВыборХранимыхВерсий/Form.form b/SSL/src/InformationRegisters/ВерсииОбъектов/Forms/ВыборХранимыхВерсий/Form.form index b128d19ac..c4e29c184 100644 --- a/SSL/src/InformationRegisters/ВерсииОбъектов/Forms/ВыборХранимыхВерсий/Form.form +++ b/SSL/src/InformationRegisters/ВерсииОбъектов/Forms/ВыборХранимыхВерсий/Form.form @@ -841,7 +841,6 @@ true true true - UseIfNecessary auto true @@ -930,6 +929,23 @@ true + + ЕстьДанныеВерсии + + <key>ru</key> + <value>Есть данные версии</value> + + 5 + + Boolean + + + true + + + true + + Ссылка @@ -1025,7 +1041,7 @@ СформироватьОтчетПоИзменениям - Auto + DontUse Auto @@ -1047,7 +1063,7 @@ ОткрытьВерсиюОбъекта - Auto + DontUse Auto @@ -1069,7 +1085,7 @@ ПерейтиНаВерсию - Auto + DontUse Auto diff --git a/SSL/src/InformationRegisters/ВерсииОбъектов/Forms/ВыборХранимыхВерсий/Module.bsl b/SSL/src/InformationRegisters/ВерсииОбъектов/Forms/ВыборХранимыхВерсий/Module.bsl index 29e93b060..d750bbb92 100644 --- a/SSL/src/InformationRegisters/ВерсииОбъектов/Forms/ВыборХранимыхВерсий/Module.bsl +++ b/SSL/src/InformationRegisters/ВерсииОбъектов/Forms/ВыборХранимыхВерсий/Module.bsl @@ -5,6 +5,8 @@ &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) + УстановитьУсловноеОформление(); + Если Параметры.Свойство("АвтоТест") Тогда // Возврат при получении формы для анализа. Возврат; КонецЕсли; @@ -13,9 +15,7 @@ Если ВерсионированиеОбъектов.НомерПоследнейВерсии(Ссылка) = 0 Тогда Элементы.ОсновнаяСтраница.ТекущаяСтраница = Элементы.ВерсииДляСравненияОтсутствуют; - Элементы.НетВерсий.Заголовок = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Предыдущие версии отсутствуют: ""%1"".'"), - Строка(Ссылка)); + Элементы.НетВерсий.Заголовок = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Предыдущие версии отсутствуют: ""%1"".'"), Строка(Ссылка)); КонецЕсли; ОбновитьСписокВерсий(); @@ -124,13 +124,15 @@ | ВерсииОбъектов.НомерВерсии КАК НомерВерсии, | ВерсииОбъектов.АвторВерсии КАК АвторВерсии, | ВерсииОбъектов.ДатаВерсии КАК ДатаВерсии, - | ВерсииОбъектов.Комментарий КАК Комментарий + | ВерсииОбъектов.Комментарий КАК Комментарий, + | ВерсииОбъектов.КонтрольнаяСумма, + | ВерсииОбъектов.ЕстьДанныеВерсии, + | &БезОтбора + | ИЛИ ВерсииОбъектов.НомерВерсии В (&НомераВерсий) КАК СоответствуетОтбору |ИЗ | РегистрСведений.ВерсииОбъектов КАК ВерсииОбъектов |ГДЕ | ВерсииОбъектов.Объект = &Ссылка - | И (&БезОтбора - | ИЛИ ВерсииОбъектов.НомерВерсии В (&НомераВерсий)) | |УПОРЯДОЧИТЬ ПО | НомерВерсии УБЫВ"; @@ -140,7 +142,23 @@ Запрос.УстановитьПараметр("НомераВерсий", НомераВерсий); Запрос.УстановитьПараметр("Ссылка", Ссылка); - Возврат Запрос.Выполнить().Выгрузить(); + ТаблицаВерсий = Запрос.Выполнить().Выгрузить(); + Если ТаблицаВерсий.Количество() > 0 Тогда + ТаблицаВерсий[0].ЕстьДанныеВерсии = Истина; + КонецЕсли; + + Для Индекс = 1 По ТаблицаВерсий.Количество() - 1 Цикл + Если Не ТаблицаВерсий[Индекс].ЕстьДанныеВерсии Тогда + Если ПустаяСтрока(ТаблицаВерсий[Индекс].КонтрольнаяСумма) Или ТаблицаВерсий[Индекс].КонтрольнаяСумма = ТаблицаВерсий[Индекс-1].КонтрольнаяСумма Тогда + ТаблицаВерсий[Индекс].ЕстьДанныеВерсии = ТаблицаВерсий[Индекс-1].ЕстьДанныеВерсии; + КонецЕсли; + КонецЕсли; + КонецЦикла; + + Результат = ТаблицаВерсий.Скопировать(ТаблицаВерсий.НайтиСтроки(Новый Структура("СоответствуетОтбору", Истина)), + "НомерВерсии, АвторВерсии, ДатаВерсии, Комментарий, ЕстьДанныеВерсии"); + + Возврат Результат; КонецФункции @@ -176,7 +194,7 @@ // Ничего не делаем, если у формы нет метода Прочитать(). КонецПопытки; КонецЕсли; - ПоказатьПредупреждение(, НСтр("ru = 'Переход к старой версий выполнен успешно.'")); + ПоказатьПредупреждение(, НСтр("ru = 'Переход к старой версии выполнен успешно.'")); КонецЕсли; КонецПроцедуры @@ -204,10 +222,9 @@ КонецЕсли; Объект.ДополнительныеСвойства.Вставить("ВерсионированиеОбъектовКомментарийКВерсии", - СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Выполнен переход к версии №%1 от %2'"), + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Выполнен переход к версии №%1 от %2'"), Строка(НомерВерсии), - Формат(Информация.ДатаВерсии, "ДЛФ=DT")) ); + Формат(Информация.ДатаВерсии, "ДЛФ=DT"))); РежимЗаписи = РежимЗаписиДокумента.Запись; Если ОбщегоНазначения.ЭтоДокумент(Объект.Метаданные()) Тогда @@ -332,7 +349,7 @@ | И ВерсииОбъектов.Объект = &Ссылка | |УПОРЯДОЧИТЬ ПО - | НомерВерсии Убыв"; + | НомерВерсии УБЫВ"; Запрос = Новый Запрос(ТекстЗапроса); Запрос.УстановитьПараметр("Ссылка", Ссылка); @@ -355,10 +372,20 @@ Результат = Новый Массив; Результат.Добавить(ХранимыеВерсии[ХранимыеВерсии.Количество() - 1].НомерВерсии); - ТекущаяВерсия = ВерсионированиеОбъектов.РазборПредставленияОбъектаXML(ХранимыеВерсии[0].Данные.Получить(), Ссылка); + ДанныеОбъекта = ХранимыеВерсии[0].Данные.Получить(); + Если ТипЗнч(ДанныеОбъекта) = Тип("Структура") Тогда + ДанныеОбъекта = ДанныеОбъекта.Объект; + КонецЕсли; + ТекущаяВерсия = ВерсионированиеОбъектов.РазборПредставленияОбъектаXML(ДанныеОбъекта, Ссылка); Для НомерСтроки = 1 По ХранимыеВерсии.Количество() - 1 Цикл ОписаниеВерсии = ХранимыеВерсии[НомерСтроки]; - ПредыдущаяВерсия = ВерсионированиеОбъектов.РазборПредставленияОбъектаXML(ОписаниеВерсии.Данные.Получить(), Ссылка); + + ДанныеОбъекта = ОписаниеВерсии.Данные.Получить(); + Если ТипЗнч(ДанныеОбъекта) = Тип("Структура") Тогда + ДанныеОбъекта = ДанныеОбъекта.Объект; + КонецЕсли; + ПредыдущаяВерсия = ВерсионированиеОбъектов.РазборПредставленияОбъектаXML(ДанныеОбъекта, Ссылка); + Если ЕстьИзменениеРеквизитов(ТекущаяВерсия, ПредыдущаяВерсия, Отбор.ВыгрузитьЗначения()) Тогда Результат.Добавить(ХранимыеВерсии[НомерСтроки - 1].НомерВерсии); КонецЕсли; @@ -373,8 +400,8 @@ Для Каждого Реквизит Из СписокРеквизитов Цикл ИмяТабличнойЧасти = Неопределено; ИмяРеквизита = Реквизит; - Если Найти(ИмяРеквизита, ".") > 0 Тогда - ЧастиИмени = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(ИмяРеквизита, ".", Истина); + Если СтрНайти(ИмяРеквизита, ".") > 0 Тогда + ЧастиИмени = СтрРазделить(ИмяРеквизита, ".", Ложь); Если ЧастиИмени.Количество() > 1 Тогда ИмяТабличнойЧасти = ЧастиИмени[0]; ИмяРеквизита = ЧастиИмени[1]; @@ -467,4 +494,22 @@ Или АвторВерсии = Пользователи.ТекущийПользователь(); КонецФункции +&НаСервере +Процедура УстановитьУсловноеОформление() + + УсловноеОформление.Элементы.Очистить(); + Элемент = УсловноеОформление.Элементы.Добавить(); + + ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); + ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("СписокВерсий.ЕстьДанныеВерсии"); + ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно; + ОтборЭлемента.ПравоеЗначение = Ложь; + + Элемент.Оформление.УстановитьЗначениеПараметра("ЦветТекста", ЦветаСтиля.ТекстЗапрещеннойЯчейкиЦвет); + + ПолеЭлемента = Элемент.Поля.Элементы.Добавить(); + ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.СписокВерсий.Имя); + +КонецПроцедуры + #КонецОбласти diff --git a/SSL/src/InformationRegisters/ВерсииОбъектов/Forms/ОтчетПоВерсиямОбъекта/Form.form b/SSL/src/InformationRegisters/ВерсииОбъектов/Forms/ОтчетПоВерсиямОбъекта/Form.form index 3ae9bfacb..b552be055 100644 --- a/SSL/src/InformationRegisters/ВерсииОбъектов/Forms/ОтчетПоВерсиямОбъекта/Form.form +++ b/SSL/src/InformationRegisters/ВерсииОбъектов/Forms/ОтчетПоВерсиямОбъекта/Form.form @@ -33,6 +33,10 @@ Left true + + Selection + ТаблицаОтчетаВыбор + 50 true 10 @@ -173,6 +177,26 @@ true + + ТабличныеДокументы + + <key>ru</key> + <value>Табличные документы</value> + + 7 + + ValueList + + + true + + + true + + + + + Ссылка diff --git a/SSL/src/InformationRegisters/ВерсииОбъектов/Forms/ОтчетПоВерсиямОбъекта/Module.bsl b/SSL/src/InformationRegisters/ВерсииОбъектов/Forms/ОтчетПоВерсиямОбъекта/Module.bsl index cf069c157..d014746a7 100644 --- a/SSL/src/InformationRegisters/ВерсииОбъектов/Forms/ОтчетПоВерсиямОбъекта/Module.bsl +++ b/SSL/src/InformationRegisters/ВерсииОбъектов/Forms/ОтчетПоВерсиямОбъекта/Module.bsl @@ -12,7 +12,7 @@ ОбщийШаблон = РегистрыСведений.ВерсииОбъектов.ПолучитьМакет("СтандартныйМакетПредставленияОбъекта"); - ЦветСветлоСерый = ЦветаСтиля.НедоступныеДанныеЦвет; + ЦветСветлоСерый = ЦветаСтиля.ТекстЗапрещеннойЯчейкиЦвет; ЦветКрасноФиолетовый = ЦветаСтиля.ЗаголовокУдаленногоРеквизитаФон; Если ТипЗнч(Параметры.СравниваемыеВерсии) = Тип("Массив") Тогда @@ -33,15 +33,11 @@ СтрокаНомераВерсий = Лев(СтрокаНомераВерсий, СтрДлина(СтрокаНомераВерсий) - 2); - Заголовок = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Сравнение версий ""%1"" (№№ %2)'"), - ОбщегоНазначения.ПредметСтрокой(СсылкаНаОбъект), - СтрокаНомераВерсий); + Заголовок = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Сравнение версий ""%1"" (№№ %2)'"), + ОбщегоНазначения.ПредметСтрокой(СсылкаНаОбъект), СтрокаНомераВерсий); Иначе - Заголовок = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Версия объекта ""%1"" №%2'"), - СсылкаНаОбъект, - Строка(СравниваемыеВерсии[0])); + Заголовок = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Версия объекта ""%1"" №%2'"), + СсылкаНаОбъект, Строка(СравниваемыеВерсии[0])); КонецЕсли; СформироватьОтчет(ТаблицаОтчета, СравниваемыеВерсии); @@ -56,6 +52,27 @@ #КонецОбласти +#Область ОбработчикиСобытийЭлементовФормы + +&НаКлиенте +Процедура ТаблицаОтчетаВыбор(Элемент, Область, СтандартнаяОбработка) + + Расшифровка = Область.Расшифровка; + + Если ТипЗнч(Расшифровка) = Тип("Структура") Тогда + + СтандартнаяОбработка = Ложь; + + Если Расшифровка.Свойство("Сравнить") Тогда + ОткрытьФормуСравненияТабличныхДокументов(Расшифровка.Сравнить, Расшифровка.Версия0, Расшифровка.Версия1); + КонецЕсли; + + КонецЕсли; + +КонецПроцедуры + +#КонецОбласти + #Область СлужебныеПроцедурыИФункции // Основная функция модуля, отвечающая за формирование отчета. @@ -87,10 +104,10 @@ Процедура СформироватьОтчетПоИзменениям(ТЧОтчета, Знач МассивВерсий) // Хранит переходную разобранную версию объекта, - // что бы сократить число разборов XML. + // чтобы сократить число разборов XML. Перем ВерсияОбъекта; - // ССквозной" идентификатор измененных строк в версиях. + // "Сквозной" идентификатор измененных строк в версиях. Перем счетчикУникальныйИд; ТЧОтчета.Очистить(); @@ -121,6 +138,12 @@ // объекта среди остальных и сообщает дополнительную информацию по изменению. ТаблицаИзмененийТабличныхЧастей = Новый Соответствие; + ТабличныеДокументы = Новый СписокЗначений; + ТаблицаИзмененийТабличныхДокументов = Новый ТаблицаЗначений; + ТаблицаИзмененийТабличныхДокументов.Колонки.Добавить("Наименование"); + ТаблицаИзмененийТабличныхДокументов.Колонки.Добавить("Представление"); + // + // Формируем начальные версии объекта, значения которых показываются всегда // (при наличии последующих изменений). ВерсияОбъекта_Пред = СчитатьНачальныеЗначенияРеквизитовИТабличныхЧастей( @@ -129,6 +152,9 @@ КоличествоВерсийОбъекта, МассивНомеровВерсий); + ТабличныеДокументы.Добавить(ВерсияОбъекта_Пред.ТабличныеДокументы); + ТаблицаИзмененийТабличныхДокументов.Колонки.Добавить("Версия" + Формат(МассивНомеровВерсий[0], "ЧГ=0")); + счетчикУникальныйИд = ПолучитьУникальныеУникальныйИд(ТаблицаИзмененийТабличныхЧастей, "Версия" + Формат(МассивНомеровВерсий[0], "ЧГ=0")); Для ИндексВерсии = 2 По МассивНомеровВерсий.Количество() Цикл @@ -138,6 +164,8 @@ РезультатСравнения = РассчитатьИзменения(НомерВерсии, ВерсияОбъекта_Пред, ВерсияОбъекта); + ТабличныеДокументы.Добавить(ВерсияОбъекта.ТабличныеДокументы); + // Заполнение таблицы отчета по реквизитам. ЗаполнитьХарактеристикуИзмененияРеквизита(РезультатСравнения["Реквизиты"]["и"], "И", ТаблицаИзмененийРеквизитов, ИмяКолонкиТекущейВерсии, ВерсияОбъекта); @@ -241,12 +269,49 @@ КонецЦикла; КонецЕсли; КонецЦикла; + + ТаблицаИзмененийТабличныхДокументов.Колонки.Добавить(ИмяКолонкиТекущейВерсии); + + РезультатТаблица = РезультатСравнения["ТабличныеДокументы"]["и"]; + Для Каждого ТекСтрока Из РезультатТаблица Цикл + СтрокаТаблицыИзменений = ТаблицаИзмененийТабличныхДокументов.Найти(ТекСтрока.Значение, "Наименование"); + Если СтрокаТаблицыИзменений = Неопределено Тогда + СтрокаТаблицыИзменений = ТаблицаИзмененийТабличныхДокументов.Добавить(); + СтрокаТаблицыИзменений.Наименование = ТекСтрока.Значение; + СтрокаТаблицыИзменений.Представление = ТекСтрока.Представление; + КонецЕсли; + СтрокаТаблицыИзменений[ИмяКолонкиТекущейВерсии] = "И"; + КонецЦикла; + + РезультатТаблица = РезультатСравнения["ТабличныеДокументы"]["д"]; + Для Каждого ТекСтрока Из РезультатТаблица Цикл + СтрокаТаблицыИзменений = ТаблицаИзмененийТабличныхДокументов.Найти(ТекСтрока.Значение, "Наименование"); + Если СтрокаТаблицыИзменений = Неопределено Тогда + СтрокаТаблицыИзменений = ТаблицаИзмененийТабличныхДокументов.Добавить(); + СтрокаТаблицыИзменений.Наименование = ТекСтрока.Значение; + СтрокаТаблицыИзменений.Представление = ТекСтрока.Представление; + КонецЕсли; + СтрокаТаблицыИзменений[ИмяКолонкиТекущейВерсии] = "Д"; + КонецЦикла; + + РезультатТаблица = РезультатСравнения["ТабличныеДокументы"]["у"]; + Для Каждого ТекСтрока Из РезультатТаблица Цикл + СтрокаТаблицыИзменений = ТаблицаИзмененийТабличныхДокументов.Найти(ТекСтрока.Значение, "Наименование"); + Если СтрокаТаблицыИзменений = Неопределено Тогда + СтрокаТаблицыИзменений = ТаблицаИзмененийТабличныхДокументов.Добавить(); + СтрокаТаблицыИзменений.Наименование = ТекСтрока.Значение; + СтрокаТаблицыИзменений.Представление = ТекСтрока.Представление; + КонецЕсли; + СтрокаТаблицыИзменений[ИмяКолонкиТекущейВерсии] = "У"; + КонецЦикла; + ВерсияОбъекта_Пред = ВерсияОбъекта; КонецЦикла; // Передаем скомпонованную информацию в спец блок для вывода данных в отчет. ВывестиРезультатыКомпоновкиВОтчет(ТаблицаИзмененийРеквизитов, ТаблицаИзмененийТабличныхЧастей, + ТаблицаИзмененийТабличныхДокументов, счетчикУникальныйИд, МассивНомеровВерсий, ТЧОтчета); @@ -257,9 +322,7 @@ КонецПроцедуры &НаСервере -Процедура ВывестиИзмененияРеквизитов(ТЧОтчета, - ТаблицаИзмененийРеквизитов, - МассивНомеровВерсий) +Процедура ВывестиИзмененияРеквизитов(ТЧОтчета, ТаблицаИзмененийРеквизитов, МассивНомеровВерсий) ОбластьШапкаРеквизитов = ОбщийШаблон.ПолучитьОбласть("ШапкаРеквизитов"); ТЧОтчета.Вывести(ОбластьШапкаРеквизитов); @@ -267,22 +330,13 @@ Для Каждого ЭлементМодРеквизит Из ТаблицаИзмененийРеквизитов Цикл Если ЭлементМодРеквизит.Версионирование_Модификация = Истина Тогда - НаименованиеРеквизита = ВерсионированиеОбъектов.ПолучитьПредставлениеРеквизитаНаЯзыке(ЭлементМодРеквизит.Наименование); - ОписаниеРеквизита = СсылкаНаОбъект.Метаданные().Реквизиты.Найти(НаименованиеРеквизита); - Если ОписаниеРеквизита = Неопределено Тогда - Для Каждого ОписаниеСтандартногоРеквизита Из СсылкаНаОбъект.Метаданные().СтандартныеРеквизиты Цикл - Если ОписаниеСтандартногоРеквизита.Имя = НаименованиеРеквизита Тогда - ОписаниеРеквизита = ОписаниеСтандартногоРеквизита; - Прервать; - КонецЕсли; - КонецЦикла; + СтруктураОписанияНаименования = ВерсионированиеОбъектов.НаименованиеВыводимогоРеквизита(СсылкаНаОбъект, ЭлементМодРеквизит.Наименование); + Если Не СтруктураОписанияНаименования.ВыводитьРеквизит Тогда + Продолжить; КонецЕсли; - ВыводимоеНаименование = НаименованиеРеквизита; - Если ОписаниеРеквизита <> Неопределено Тогда - ВыводимоеНаименование = ОписаниеРеквизита.Представление(); - КонецЕсли; + ВыводимоеНаименование = СтруктураОписанияНаименования.ВыводимоеНаименование; ПустаяЯчейка = ОбщийШаблон.ПолучитьОбласть("ПустаяЯчейка"); ТЧОтчета.Вывести(ПустаяЯчейка);; @@ -382,7 +436,7 @@ ИндексПоВерсиям = МассивНомеровВерсий.Количество(); // --------------------------------------------------------------------------------- - // просмотрим версии наперед, что бы быть уверенными, что изменения встречаются --- + // просмотрим версии наперед, чтобы быть уверенными, что изменения встречаются --- МодифицированностьСтроки = Ложь; @@ -443,7 +497,14 @@ Если Не ТекущаяТабличнаяЧастьИзменилась Тогда ТекущаяТабличнаяЧастьИзменилась = Истина; ШаблонШапкаТекущейТЧ = ОбщийШаблон.ПолучитьОбласть("ШапкаТабличнойЧасти"); - ШаблонШапкаТекущейТЧ.Параметры.НаименованиеТабличнойЧасти = ИмяТабличнойЧасти; + + ПредставлениеТабличнойЧасти = ИмяТабличнойЧасти; + ОписаниеТабличнойЧасти = СсылкаНаОбъект.Метаданные().ТабличныеЧасти.Найти(ИмяТабличнойЧасти); + Если ОписаниеТабличнойЧасти <> Неопределено Тогда + ПредставлениеТабличнойЧасти = ОписаниеТабличнойЧасти.Представление(); + КонецЕсли; + + ШаблонШапкаТекущейТЧ.Параметры.НаименованиеТабличнойЧасти = ПредставлениеТабличнойЧасти; ТЧОтчета.Вывести(ШаблонШапкаТекущейТЧ); ТЧОтчета.НачатьГруппуСтрок("ТабличнаяЧасть"+ИмяТабличнойЧасти); ТЧОтчета.Вывести(ШаблонСвободнаяСтрока); @@ -465,7 +526,7 @@ КонецЕсли; МассивЗаполнения = Новый Массив; Для Каждого Колонка Из ТекущаяТЧВерсии.Колонки Цикл - Если Найти(Колонка.Имя, ПрефиксСлужебнойКолонки) = 1 Тогда + Если СтрНайти(Колонка.Имя, ПрефиксСлужебнойКолонки) = 1 Тогда Продолжить; КонецЕсли; МассивЗаполнения.Добавить(Колонка.Имя); @@ -489,7 +550,7 @@ // Теперь заполняем очередную измененную табличную строку. МассивЗаполнения = Новый СписокЗначений; Для Каждого Колонка Из ТекущаяТЧВерсии.Колонки Цикл - Если Найти(Колонка.Имя, ПрефиксСлужебнойКолонки) = 1 Тогда + Если СтрНайти(Колонка.Имя, ПрефиксСлужебнойКолонки) = 1 Тогда Продолжить; КонецЕсли; @@ -531,21 +592,75 @@ КонецПроцедуры &НаСервере -Функция ВывестиРезультатыКомпоновкиВОтчет(ТаблицаИзмененийРеквизитов, - ТаблицаИзмененийТабличныхЧастей, - счетчикУникальныйИд, - МассивНомеровВерсий, - ТЧОтчета) +Процедура ВывестиИзмененияТабличныхДокументов(ТЧОтчета, МассивНомеровВерсий, ТаблицаИзмененийТабличныхДокументов) + + Если ТаблицаИзмененийТабличныхДокументов.Количество() = 0 Тогда + Возврат; + КонецЕсли; + + ШаблонЗаголовокТабличныеДокументы = ОбщийШаблон.ПолучитьОбласть("ШапкаТабличныхДокументов"); + ТЧОтчета.Вывести(ШаблонЗаголовокТабличныеДокументы); + + ТЧОтчета.НачатьГруппуСтрок("ГруппаТабличныхДокументов"); + + ШаблонПустаяСтрока = ОбщийШаблон.ПолучитьОбласть("СвободнаяСтрока"); + ТЧОтчета.Вывести(ШаблонПустаяСтрока); + + ШаблонСтрокаТабличныеДокументы = ОбщийШаблон.ПолучитьОбласть("ШапкаТабличногоДокумента"); + + ШаблонЯчейкаНеИзменилась = ОбщийШаблон.ПолучитьОбласть("ТабличныеДокументыИдентичны"); + ШаблонЯчейкаИзменилась = ОбщийШаблон.ПолучитьОбласть("ТабличныеДокументыРазличаются"); + ШаблонЯчейкаДобавлена = ОбщийШаблон.ПолучитьОбласть("ТабличныеДокументыДобавлен"); + ШаблонЯчейкаУдалена = ОбщийШаблон.ПолучитьОбласть("ТабличныеДокументыУдален"); + + Для Каждого текСтрока Из ТаблицаИзмененийТабличныхДокументов Цикл + ШаблонСтрокаТабличныеДокументы.Параметры.НаименованиеТабличногоДокумента = текСтрока.Представление; + ТЧОтчета.Вывести(ШаблонСтрокаТабличныеДокументы); + ВГраница = МассивНомеровВерсий.ВГраница(); + Для Индекс = 0 По ВГраница Цикл + ИндексНомераВерсии = ВГраница-Индекс; + НомерВерсии = МассивНомеровВерсий[ИндексНомераВерсии]; + ИмяКолонки = "Версия" + Формат(НомерВерсии, "ЧГ=0"); + + Если ТекСтрока[ИмяКолонки] = "И" Тогда + Область = ТЧОтчета.Присоединить(ШаблонЯчейкаИзменилась); + НомерВерсии0 = Формат(НомерВерсии, "ЧГ=0"); + НомерВерсии1 = Формат(МассивНомеровВерсий[ИндексНомераВерсии-1], "ЧГ=0"); + ШаблонТекста = НСтр("ru='сравнить версию №%1 с версией №%2'"); + Область.Текст = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонТекста, НомерВерсии0, НомерВерсии1); + Область.Расшифровка = Новый Структура("Сравнить, Версия0, Версия1", + текСтрока.Наименование, ИндексНомераВерсии, ИндексНомераВерсии-1); + + ИначеЕсли текСтрока[ИмяКолонки] = "У" Тогда + Область = ТЧОтчета.Присоединить(ШаблонЯчейкаУдалена); + Область.Текст = НСтр("ru='Сохранение изменений табличного документа отключено'"); + + ИначеЕсли текСтрока[ИмяКолонки] = "Д" Тогда + Область = ТЧОтчета.Присоединить(ШаблонЯчейкаДобавлена); + Область.Текст = НСтр("ru='открыть'"); + Область.Расшифровка = Новый Структура("Открыть, Версия", текСтрока.Наименование, ИндексНомераВерсии); + + Иначе + Область = ТЧОтчета.Присоединить(ШаблонЯчейкаНеИзменилась); + + КонецЕсли; + КонецЦикла; + ТЧОтчета.Вывести(ШаблонПустаяСтрока); + КонецЦикла; + + ТЧОтчета.ЗакончитьГруппуСтрок(); + ТЧОтчета.Вывести(ШаблонПустаяСтрока); + +КонецПроцедуры + +&НаСервере +Функция ВывестиРезультатыКомпоновкиВОтчет(ТаблицаИзмененийРеквизитов, ТаблицаИзмененийТабличныхЧастей, + ТаблицаИзмененийТабличныхДокументов, счетчикУникальныйИд, МассивНомеровВерсий, ТЧОтчета) ЧислоИзменившихсяРеквизитов = РассчитатьЧислоИзменившихсяРеквизитов(ТаблицаИзмененийРеквизитов, МассивНомеровВерсий); ЧислоВерсий = МассивНомеровВерсий.Количество(); - /////////////////////////////////////////////////////////////////////////////// - // ВЫВОДИМ ОТЧЕТ // - /////////////////////////////////////////////////////////////////////////////// - ТЧОтчета.Очистить(); - ВывестиШапку(ТЧОтчета, МассивНомеровВерсий, ЧислоВерсий); Если ЧислоИзменившихсяРеквизитов = 0 Тогда @@ -556,17 +671,12 @@ ТЧОтчета.Вывести(ОбластьРеквизитыНеИзменялись); ТЧОтчета.ЗакончитьГруппуСтрок(); Иначе - ВывестиИзмененияРеквизитов(ТЧОтчета, - ТаблицаИзмененийРеквизитов, - МассивНомеровВерсий); - + ВывестиИзмененияРеквизитов(ТЧОтчета, ТаблицаИзмененийРеквизитов, МассивНомеровВерсий); КонецЕсли; - ВывестиИзмененияТабличныхЧастей(ТЧОтчета, - ТаблицаИзмененийТабличныхЧастей, - МассивНомеровВерсий, - счетчикУникальныйИд); - + ВывестиИзмененияТабличныхЧастей(ТЧОтчета, ТаблицаИзмененийТабличныхЧастей, МассивНомеровВерсий, счетчикУникальныйИд); + ВывестиИзмененияТабличныхДокументов(ТЧОтчета, МассивНомеровВерсий, ТаблицаИзмененийТабличныхДокументов); + ТЧОтчета.ИтогиСнизу = Ложь; ТЧОтчета.ОтображатьСетку = Ложь; ТЧОтчета.Защита = Ложь; @@ -604,7 +714,7 @@ КонецЕсли; ТЧОтчета.Присоединить(ОбластьВерсии); - ТЧОтчета.Область("C"+Строка(ИндексПоВерсиям+2)).ШиринаКолонки = 50; + ТЧОтчета.Область("C" + Формат(ИндексПоВерсиям + 2, "ЧГ=0")).ШиринаКолонки = 50; ИндексПоВерсиям = ИндексПоВерсиям - 1; КонецЦикла; @@ -742,6 +852,64 @@ ТабличныеЧасти_0, ТабличныеЧасти_1); + /////////////////////////////////////////////////////////////////////////////// + // Формируем список ТабличныхДокументов // + /////////////////////////////////////////////////////////////////////////////// + + ТабличныеДокументы0 = РезультатРазбораВерсии_0.ТабличныеДокументы; + ТабличныеДокументы1 = РезультатРазбораВерсии_1.ТабличныеДокументы; + + СписокТабличныхДокументов0 = СоздатьТаблицуСравнения(); + СписокТабличныхДокументов0.Колонки.Добавить("Представление"); + Если ТабличныеДокументы0 <> Неопределено Тогда + Для Каждого ЭлементСтруктуры Из ТабличныеДокументы0 Цикл + НоваяСтрока = СписокТабличныхДокументов0.Добавить(); + НоваяСтрока.Значение = ЭлементСтруктуры.Ключ; + НоваяСтрока.Представление = ЭлементСтруктуры.Значение.Наименование; + КонецЦикла; + КонецЕсли; + + СписокТабличныхДокументов1 = СоздатьТаблицуСравнения(); + СписокТабличныхДокументов1.Колонки.Добавить("Представление"); + Если ТабличныеДокументы1 <> Неопределено Тогда + Для Каждого ЭлементСтруктуры Из ТабличныеДокументы1 Цикл + НоваяСтрока = СписокТабличныхДокументов1.Добавить(); + НоваяСтрока.Значение = ЭлементСтруктуры.Ключ; + НоваяСтрока.Представление = ЭлементСтруктуры.Значение.Наименование; + КонецЦикла; + КонецЕсли; + + СписокДобавленныхТабличныхДокументов = ВычестьТаблицу(СписокТабличныхДокументов1, СписокТабличныхДокументов0); + СписокУдаленныхТабличныхДокументов = ВычестьТаблицу(СписокТабличныхДокументов0, СписокТабличныхДокументов1); + СписокОставшихсяТабличныхДокументов = ВычестьТаблицу(СписокТабличныхДокументов1, + СписокДобавленныхТабличныхДокументов); + + СписокИзменившихсяТабличныхДокументов = СоздатьТаблицуСравнения(); + СписокИзменившихсяТабличныхДокументов.Колонки.Добавить("Представление"); + + ИзмененияВТабличныхДокументах = Новый Соответствие; + ИзмененияВТабличныхДокументах.Вставить("д", СписокДобавленныхТабличныхДокументов); + ИзмененияВТабличныхДокументах.Вставить("у", СписокУдаленныхТабличныхДокументов); + ИзмененияВТабличныхДокументах.Вставить("и", СписокИзменившихсяТабличныхДокументов); + + Для Каждого СтрокаТаблицыЗначений Из СписокОставшихсяТабличныхДокументов Цикл + + ИмяТабличногоДокумента = СтрокаТаблицыЗначений.Значение; + + ТабДокXML = ВерсионированиеОбъектов.СериализоватьОбъект( + Новый ХранилищеЗначения(ТабличныеДокументы0[ИмяТабличногоДокумента].Данные)); + КонтрольнаяСумма0 = ВерсионированиеОбъектов.КонтрольнаяСумма(ТабДокXML); + + ТабДокXML = ВерсионированиеОбъектов.СериализоватьОбъект( + Новый ХранилищеЗначения(ТабличныеДокументы1[ИмяТабличногоДокумента].Данные)); + КонтрольнаяСумма1 = ВерсионированиеОбъектов.КонтрольнаяСумма(ТабДокXML); + + Если КонтрольнаяСумма0 <> КонтрольнаяСумма1 Тогда + ЗаполнитьЗначенияСвойств(СписокИзменившихсяТабличныхДокументов.Добавить(), СтрокаТаблицыЗначений); + КонецЕсли; + + КонецЦикла; + МодификацииТабличныхЧастей = Новый Структура; МодификацииТабличныхЧастей.Вставить("д", СписокДобавленныхТЧ); МодификацииТабличныхЧастей.Вставить("у", СписокУдаленныхТЧ); @@ -750,6 +918,7 @@ КомпоновкаИзменений = Новый Соответствие; КомпоновкаИзменений.Вставить("Реквизиты", ИзмененияВРеквизитах); КомпоновкаИзменений.Вставить("ТабличныеЧасти", МодификацииТабличныхЧастей); + КомпоновкаИзменений.Вставить("ТабличныеДокументы", ИзмененияВТабличныхДокументах); Возврат КомпоновкаИзменений; @@ -969,9 +1138,6 @@ ТекущаяТЗ = ТаблицаТЧ[ЭлементТЧ.Ключ]["Версия" + Формат(МладшаяВерсияОбъекта, "ЧГ=0")]; - // Спец идентификатор строки что бы различать строки - // значение является уникальным в пределах данной таблицы значений. - ТекущаяТЗ.Колонки.Добавить("Версионирование_ИдСтроки"); ТекущаяТЗ.Колонки.Добавить("Версионирование_Модификация"); ТекущаяТЗ.Колонки.Добавить("Версионирование_Изменения", Новый ОписаниеТипов("Массив")); @@ -1048,8 +1214,10 @@ Функция ПолучитьОписаниеПоВерсии(НомерВерсии) СведенияОВерсии = ВерсионированиеОбъектов.СведенияОВерсииОбъекта(СсылкаНаОбъект, НомерВерсии); - Описание = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = '№ %1 / (%2) / %3'"), - НомерВерсии, Строка(СведенияОВерсии.ДатаВерсии), СокрЛП(Строка(СведенияОВерсии.АвторВерсии))); + + Описание = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = '№ %1 / (%2) / %3'"), НомерВерсии, + Строка(СведенияОВерсии.ДатаВерсии), СокрЛП(Строка(СведенияОВерсии.АвторВерсии))); + СведенияОВерсии.Вставить("Описание", Описание); Возврат СведенияОВерсии; @@ -1167,7 +1335,7 @@ ЕстьДетализация = ТипЗнч(ЗначенияЗаполнения) = Тип("СписокЗначений"); Для Каждого Элемент Из ЗначенияЗаполнения Цикл Значение = Элемент; - Если ЕстьДетализация Тогда + Если ЕстьДетализация И ТипВывода = "И" Тогда Значение = Элемент.Представление; ЕстьИзменение = Элемент.Значение; Шаблон = ?(ЕстьИзменение, ШаблонЕстьИзменение, ШаблонНетИзменения); @@ -1511,4 +1679,35 @@ Возврат Результат; КонецФункции -#КонецОбласти \ No newline at end of file +&НаКлиенте +Процедура ОткрытьФормуСравненияТабличныхДокументов(ИмяТабличногоДокумента, Версия0, Версия1) + + ЗаголовокШаблон = НСтр("ru='Версия №%1'"); + НомерВерсии0 = Формат(СравниваемыеВерсии[Версия0], "ЧГ=0"); + НомерВерсии1 = Формат(СравниваемыеВерсии[Версия1], "ЧГ=0"); + ЗаголовокЛевый = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ЗаголовокШаблон, НомерВерсии1); + ЗаголовокПравый = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ЗаголовокШаблон, НомерВерсии0); + + АдресТабличныхДокументов = ПолучитьАдресТабличныхДокументов(ИмяТабличногоДокумента, Версия1, Версия0); + ПараметрыОткрытияФормы = Новый Структура("АдресТабличныхДокументов, ЗаголовокЛевый, ЗаголовокПравый", + АдресТабличныхДокументов, ЗаголовокЛевый, ЗаголовокПравый); + ФормаСравнения = ОткрытьФорму("РегистрСведений.ВерсииОбъектов.Форма.СравнениеТабличныхДокументов", + ПараметрыОткрытияФормы, ЭтотОбъект); + +КонецПроцедуры + +&НаСервере +Функция ПолучитьАдресТабличныхДокументов(ИмяТабличногоДокумента, Левый, Правый) + + ТабличныйДокументЛевый = ТабличныеДокументы[Левый].Значение[ИмяТабличногоДокумента].Данные; + ТабличныйДокументПравый = ТабличныеДокументы[Правый].Значение[ИмяТабличногоДокумента].Данные; + + ТабличныеДокументыСтруктура = Новый Структура("Левый, Правый", ТабличныйДокументЛевый, ТабличныйДокументПравый); + + Возврат ПоместитьВоВременноеХранилище(ТабличныеДокументыСтруктура, УникальныйИдентификатор); + +КонецФункции + +#КонецОбласти + + diff --git a/SSL/src/InformationRegisters/ВерсииОбъектов/Forms/СравнениеТабличныхДокументов/Form.form b/SSL/src/InformationRegisters/ВерсииОбъектов/Forms/СравнениеТабличныхДокументов/Form.form new file mode 100644 index 000000000..ba4d8f240 --- /dev/null +++ b/SSL/src/InformationRegisters/ВерсииОбъектов/Forms/СравнениеТабличныхДокументов/Form.form @@ -0,0 +1,759 @@ + + + + ГруппаТабличныеДокументы + 132 + + ГруппаЛевыйТабличныйДокумент + 134 + + ГруппаКоманднаяПанельЛевогоТабличногоДокумента + 112 + + ПредыдущееИзменениеЛевый + 114 + true + true + + true + + + ПредыдущееИзменениеЛевыйРасширеннаяПодсказка + 115 + Label + true + true + + Left + + + Form.Command.ПредыдущееИзменениеЛевый + Normal + Auto + true + true + UserCmds + + StdPicture.MoveUp + + Auto + + + СледующееИзменениеЛевый + 116 + true + true + + true + + + СледующееИзменениеЛевыйРасширеннаяПодсказка + 117 + Label + true + true + + Left + + + Form.Command.СледующееИзменениеЛевый + Normal + Auto + true + true + UserCmds + + StdPicture.MoveDown + + Auto + + true + true + + true + + + <key>ru</key> + <value>Командная панель левого табличного документа</value> + + + ru + Группа командная панель левого табличного документа + + true + + ГруппаКоманднаяПанельЛевогоТабличногоДокументаРасширеннаяПодсказка + 113 + Label + true + true + + Left + + + CommandBar + + Left + + + + ТабличныйДокументЛевый + 77 + true + true + + true + + + ТабличныйДокументЛевый + + None + + ТабличныйДокументЛевыйРасширеннаяПодсказка + 79 + Label + true + true + + Left + + + + ТабличныйДокументЛевыйКонтекстноеМеню + 78 + true + + SpreadsheetDocumentField + true + Enter + true + Left + true + + + OnActivate + ТабличныйДокументЛевыйПриАктивизацииОбласти + + 50 + true + 10 + true + true + true + Special + ScrollAlways + ScrollAlways + Always + Auto + Enable + true + true + true + + + true + true + + true + + + <key>ru</key> + <value>Версия №</value> + + + ru + Группа левый табличный документ + + + ГруппаЛевыйТабличныйДокументРасширеннаяПодсказка + 135 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + WeakSeparation + true + true + auto + Auto + Auto + + + + ГруппаПравыйТабличныйДокумент + 136 + + ГруппаКоманднаяПанельПравогоТабличногоДокумента + 118 + + ПредыдущееИзменениеПравый + 128 + true + true + + true + + + ПредыдущееИзменениеПравыйРасширеннаяПодсказка + 129 + Label + true + true + + Left + + + Form.Command.ПредыдущееИзменениеПравый + Normal + Auto + true + true + UserCmds + + StdPicture.MoveUp + + Auto + + + СледующееИзменениеПравый + 130 + true + true + + true + + + СледующееИзменениеПравыйРасширеннаяПодсказка + 131 + Label + true + true + + Left + + + Form.Command.СледующееИзменениеПравый + Normal + Auto + true + true + UserCmds + + StdPicture.MoveDown + + Auto + + true + true + + true + + + <key>ru</key> + <value>Группа командная панель правого табличного документа</value> + + + ru + Группа командная панель правого табличного документа + + + ГруппаКоманднаяПанельПравогоТабличногоДокументаРасширеннаяПодсказка + 119 + Label + true + true + + Left + + + CommandBar + + Left + + + + ТабличныйДокументПравый + 80 + true + true + + true + + + ТабличныйДокументПравый + + None + + ТабличныйДокументПравыйРасширеннаяПодсказка + 82 + Label + true + true + + Left + + + + ТабличныйДокументПравыйКонтекстноеМеню + 81 + true + + SpreadsheetDocumentField + true + Enter + true + Left + true + + + OnActivate + ТабличныйДокументПравыйПриАктивизацииОбласти + + 50 + true + 10 + true + true + true + Special + ScrollAlways + ScrollAlways + Always + Auto + Enable + true + true + true + + + true + true + + true + + + <key>ru</key> + <value>Версия №</value> + + + ru + Группа правый табличный документ + + + ГруппаПравыйТабличныйДокументРасширеннаяПодсказка + 137 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + WeakSeparation + true + true + auto + Auto + Auto + + + true + true + + true + + + <key>ru</key> + <value>Группа табличные документы</value> + + + ru + Группа табличные документы + + + ГруппаТабличныеДокументыРасширеннаяПодсказка + 133 + Label + true + true + + Left + + + UsualGroup + + Auto + true + true + Auto + Auto + + + None + false + + ФормаКоманднаяПанель + -1 + Left + true + + + OnCreateAtServer + ПриСозданииНаСервере + + DontBlock + true + true + true + Vertical + true + true + true + auto + true + + Объект + 1 + + String + + + + true + + + true + +
        true
        +
        + + ТабличныйДокументЛевый + + <key>ru</key> + <value>Табличный документ левый</value> + + 5 + + SpreadsheetDocument + + + true + + + true + + + + + ТабличныйДокументПравый + + <key>ru</key> + <value>Табличный документ правый</value> + + 6 + + SpreadsheetDocument + + + true + + + true + + + + + БлокировкаОбработкиАктивизации + + <key>ru</key> + <value>Блокировка обработки активизации</value> + + 9 + + Boolean + + + true + + + true + + + + СоответствиеСтрокЛевый + + <key>ru</key> + <value>Соответствие строк левый</value> + + 11 + + + true + + + true + + + + СоответствиеСтрокПравый + + <key>ru</key> + <value>Соответствие строк правый</value> + + 12 + + + true + + + true + + + + СоответствиеСтолбцовЛевый + + <key>ru</key> + <value>Соответствие столбцов левый</value> + + 13 + + + true + + + true + + + + СоответствиеСтолбцовПравый + + <key>ru</key> + <value>Соответствие столбцов правый</value> + + 14 + + + true + + + true + + + + РазличияЯчеекЛевый + + <key>ru</key> + <value>Различия ячеек левый</value> + + 15 + + ValueTable + + + true + + + true + + + НомерСтроки + + <key>ru</key> + <value>Номер строки</value> + + 1 + + Number + + 10 + + + + true + + + true + + + + НомерСтолбца + + <key>ru</key> + <value>Номер столбца</value> + + 2 + + Number + + 10 + + + + true + + + true + + + + + РазличияЯчеекПравый + + <key>ru</key> + <value>Различия ячеек1</value> + + 16 + + ValueTable + + + true + + + true + + + НомерСтроки + + <key>ru</key> + <value>Номер строки</value> + + 1 + + Number + + 10 + + + + true + + + true + + + + НомерСтолбца + + <key>ru</key> + <value>Номер столбца</value> + + 2 + + Number + + 10 + + + + true + + + true + + + + + ПредыдущееИзменениеЛевый + + <key>ru</key> + <value>Предыдущее изменение</value> + + 6 + + ru + Предыдущее изменение + + + true + + + + КомандаПредыдущееИзменениеЛевый + + + DontUse + Auto + + + СледующееИзменениеЛевый + + <key>ru</key> + <value>Следующее изменение</value> + + 7 + + ru + Следующее изменение + + + true + + + + КомандаСледующееИзменениеЛевый + + + DontUse + Auto + + + ПредыдущееИзменениеПравый + + <key>ru</key> + <value>Предыдущее изменение</value> + + 10 + + ru + Предыдущее изменение + + + true + + + + КомандаПредыдущееИзменениеПравый + + + DontUse + Auto + + + СледующееИзменениеПравый + + <key>ru</key> + <value>Следующее изменение</value> + + 11 + + ru + Следующее изменение + + + true + + + + КомандаСледующееИзменениеПравый + + + DontUse + Auto + + + + + +
        diff --git a/SSL/src/InformationRegisters/ВерсииОбъектов/Forms/СравнениеТабличныхДокументов/Module.bsl b/SSL/src/InformationRegisters/ВерсииОбъектов/Forms/СравнениеТабличныхДокументов/Module.bsl new file mode 100644 index 000000000..63cb8cf00 --- /dev/null +++ b/SSL/src/InformationRegisters/ВерсииОбъектов/Forms/СравнениеТабличныхДокументов/Module.bsl @@ -0,0 +1,582 @@ + +#Область ОбработчикиСобытийФормы + +&НаСервере +Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) + + Если Параметры.Свойство("АвтоТест") Тогда // Возврат при получении формы для анализа. + Возврат; + КонецЕсли; + + ТабличныеДокументыДляСравнения = ПолучитьИзВременногоХранилища(Параметры.АдресТабличныхДокументов); + ТабличныйДокументЛевый = ТабличныеДокументыДляСравнения.Левый; + ТабличныйДокументПравый = ТабличныеДокументыДляСравнения.Правый; + + Элементы.ГруппаЛевыйТабличныйДокумент.Заголовок = Параметры.ЗаголовокЛевый; + Элементы.ГруппаПравыйТабличныйДокумент.Заголовок = Параметры.ЗаголовокПравый; + + СравнитьНаСервере(); + +КонецПроцедуры + +#КонецОбласти + +#Область ОбработчикиСобытийЭлементовТаблицыФормыТабличныйДокументЛевый + +&НаКлиенте +Процедура ТабличныйДокументЛевыйПриАктивизацииОбласти(Элемент) + + Если БлокировкаОбработкиАктивизации = Истина Тогда + Возврат; + КонецЕсли; + + Источник = Новый Структура("Объект, Элемент", ТабличныйДокументЛевый, Элементы.ТабличныйДокументЛевый); + Приемник = Новый Структура("Объект, Элемент", ТабличныйДокументПравый, Элементы.ТабличныйДокументПравый); + + СоответствияИсточник = Новый Структура("Строки, Столбцы", СоответствиеСтрокЛевый, СоответствиеСтолбцовЛевый); + СоответствияПриемник = Новый Структура("Строки, Столбцы", СоответствиеСтрокПравый, СоответствиеСтолбцовПравый); + + ОбработатьАктивизациюОбласти(Источник, Приемник, СоответствияИсточник, СоответствияПриемник); + +КонецПроцедуры + +#КонецОбласти + +#Область ОбработчикиСобытийЭлементовТаблицыФормыТабличныйДокументПравый + +&НаКлиенте +Процедура ТабличныйДокументПравыйПриАктивизацииОбласти(Элемент) + + Если БлокировкаОбработкиАктивизации = Истина Тогда + Возврат; + КонецЕсли; + + Источник = Новый Структура("Объект, Элемент", ТабличныйДокументПравый, Элементы.ТабличныйДокументПравый); + Приемник = Новый Структура("Объект, Элемент", ТабличныйДокументЛевый, Элементы.ТабличныйДокументЛевый); + + СоответствияИсточник = Новый Структура("Строки, Столбцы", СоответствиеСтрокПравый, СоответствиеСтолбцовПравый); + СоответствияПриемник = Новый Структура("Строки, Столбцы", СоответствиеСтрокЛевый, СоответствиеСтолбцовЛевый); + + ОбработатьАктивизациюОбласти(Источник, Приемник, СоответствияИсточник, СоответствияПриемник); + +КонецПроцедуры + +#КонецОбласти + +#Область ОбработчикиКомандФормы + +&НаКлиенте +Процедура КомандаПредыдущееИзменениеЛевый(Команда) + + ПредыдущееИзменение(Элементы.ТабличныйДокументЛевый, ТабличныйДокументЛевый, РазличияЯчеекЛевый); + +КонецПроцедуры + +&НаКлиенте +Процедура КомандаПредыдущееИзменениеПравый(Команда) + + ПредыдущееИзменение(Элементы.ТабличныйДокументПравый, ТабличныйДокументПравый, РазличияЯчеекПравый); + +КонецПроцедуры + +&НаКлиенте +Процедура КомандаСледующееИзменениеЛевый(Команда) + + СледующееИзменение(Элементы.ТабличныйДокументЛевый, ТабличныйДокументЛевый, РазличияЯчеекЛевый); + +КонецПроцедуры + +&НаКлиенте +Процедура КомандаСледующееИзменениеПравый(Команда) + + СледующееИзменение(Элементы.ТабличныйДокументПравый, ТабличныйДокументПравый, РазличияЯчеекПравый); + +КонецПроцедуры + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +&НаСервере +Процедура СравнитьНаСервере() + + БлокировкаОбработкиАктивизации = Истина; + + СоответствиеСтрокЛевый = Новый СписокЗначений; + СоответствиеСтрокПравый = Новый СписокЗначений; + + СоответствиеСтолбцовЛевый = Новый СписокЗначений; + СоответствиеСтолбцовПравый = Новый СписокЗначений; + + РазличияЯчеекЛевый.Очистить(); + РазличияЯчеекПравый.Очистить(); + + ВыполнитьСравнение(); + + БлокировкаОбработкиАктивизации = Ложь; + +КонецПроцедуры + +&НаСервере +Процедура ВыполнитьСравнение() + + #Область Сравнение + + // Тексты из ячеек табличных документов выгружается в таблицы значений. + ТаблицаЛевогоДокумента = ПолучитьТаблицуЗначенийИзДокумента(ТабличныйДокументЛевый); + ТаблицаПравогоДокумента = ПолучитьТаблицуЗначенийИзДокумента(ТабличныйДокументПравый); + + // Сравниваются табличные документы по строкам и подбираются соответствия строк. + Соответствия = СформироватьСоответствия(ТаблицаЛевогоДокумента, ТаблицаПравогоДокумента, Истина); + СоответствиеСтрокЛевый = Соответствия[0]; + СоответствиеСтрокПравый = Соответствия[1]; + + // Сравниваются табличные документы по столбцам и подбираются соответствия столбцов. + Соответствия = СформироватьСоответствия(ТаблицаЛевогоДокумента, ТаблицаПравогоДокумента, Ложь); + СоответствиеСтолбцовЛевый = Соответствия[0]; + СоответствиеСтолбцовПравый = Соответствия[1]; + + ТаблицаЛевогоДокумента = Неопределено; + ТаблицаПравогоДокумента = Неопределено; + + #КонецОбласти + + #Область ГрафическоеОтображениеРазличий + + ЦветОбластиУдаленнойФон = ЦветаСтиля.УдаленныйРеквизитФон; + ЦветОбластиДобавленнойФон = ЦветаСтиля.ДобавленныйРеквизитФон; + ЦветОбластиИзмененнойФон = ЦветаСтиля.ИзмененноеЗначениеРеквизитаФон; + ЦветОбластиИзмененнойТекст = ЦветаСтиля.ИзмененноеЗначениеРеквизитаЦвет; + + + ВысотаЛевойТаблицы = ТабличныйДокументЛевый.ВысотаТаблицы; + ШиринаЛевойТаблицы = ТабличныйДокументЛевый.ШиринаТаблицы; + + ВысотаПравойТаблицы = ТабличныйДокументПравый.ВысотаТаблицы; + ШиринаПравойТаблицы = ТабличныйДокументПравый.ШиринаТаблицы; + + // Строки которые были удалены из левого табличного документа. + Для НомерСтроки = 1 По СоответствиеСтрокЛевый.Количество()-1 Цикл + + Если СоответствиеСтрокЛевый[НомерСтроки].Значение = Неопределено Тогда + + Область = ТабличныйДокументЛевый.Область(НомерСтроки, 1, НомерСтроки, ШиринаЛевойТаблицы); + Область.ЦветФона = ЦветОбластиУдаленнойФон; + + НоваяСтрокаРазличий = РазличияЯчеекЛевый.Добавить(); + НоваяСтрокаРазличий.НомерСтроки = НомерСтроки; + НоваяСтрокаРазличий.НомерСтолбца = 0; + + КонецЕсли; + + КонецЦикла; + + // Столбцы которые были удалены из левого табличного документа. + Для НомерСтолбца = 1 По СоответствиеСтолбцовЛевый.Количество()-1 Цикл + + Если СоответствиеСтолбцовЛевый[НомерСтолбца].Значение = Неопределено Тогда + + Область = ТабличныйДокументЛевый.Область(1, НомерСтолбца, ВысотаЛевойТаблицы, НомерСтолбца); + Область.ЦветФона = ЦветОбластиУдаленнойФон; + + НоваяСтрокаРазличий = РазличияЯчеекЛевый.Добавить(); + НоваяСтрокаРазличий.НомерСтроки = 0; + НоваяСтрокаРазличий.НомерСтолбца = НомерСтолбца; + + КонецЕсли; + + КонецЦикла; + + // Строки которые были добавлены в правый табличный документ. + Для НомерСтроки = 1 По СоответствиеСтрокПравый.Количество()-1 Цикл + + Если СоответствиеСтрокПравый[НомерСтроки].Значение = Неопределено Тогда + + Область = ТабличныйДокументПравый.Область(НомерСтроки, 1, НомерСтроки, ШиринаПравойТаблицы); + Область.ЦветФона = ЦветОбластиДобавленнойФон; + + НоваяСтрокаРазличий = РазличияЯчеекПравый.Добавить(); + НоваяСтрокаРазличий.НомерСтроки = НомерСтроки; + НоваяСтрокаРазличий.НомерСтолбца = 0; + + КонецЕсли; + + КонецЦикла; + + // Столбцы которые были добавлены в правый табличный документ. + Для НомерСтолбца = 1 По СоответствиеСтолбцовПравый.Количество()-1 Цикл + + Если СоответствиеСтолбцовПравый[НомерСтолбца].Значение = Неопределено Тогда + + Область = ТабличныйДокументПравый.Область(1, НомерСтолбца, ВысотаПравойТаблицы, НомерСтолбца); + Область.ЦветФона = ЦветОбластиДобавленнойФон; + + НоваяСтрокаРазличий = РазличияЯчеекПравый.Добавить(); + НоваяСтрокаРазличий.НомерСтроки = 0; + НоваяСтрокаРазличий.НомерСтолбца = НомерСтолбца; + + КонецЕсли; + + КонецЦикла; + + // Ячейки которые были изменены + Для НомерСтроки1 = 1 По СоответствиеСтрокЛевый.Количество()-1 Цикл + + НомерСтроки2 = СоответствиеСтрокЛевый[НомерСтроки1].Значение; + Если НомерСтроки2 = Неопределено Тогда + Продолжить; + КонецЕсли; + + Для НомерСтолбца1 = 1 По СоответствиеСтолбцовЛевый.Количество()-1 Цикл + + НомерСтолбца2 = СоответствиеСтолбцовЛевый[НомерСтолбца1].Значение; + Если НомерСтолбца2 = Неопределено Тогда + Продолжить; + КонецЕсли; + + Область1 = ТабличныйДокументЛевый.Область(НомерСтроки1, НомерСтолбца1, НомерСтроки1, НомерСтолбца1); + Область2 = ТабличныйДокументПравый.Область(НомерСтроки2, НомерСтолбца2, НомерСтроки2, НомерСтолбца2); + + Если НЕ СравнитьОбласти(Область1, Область2) Тогда + + Область1 = ТабличныйДокументЛевый.Область(НомерСтроки1, НомерСтолбца1); + Область2 = ТабличныйДокументПравый.Область(НомерСтроки2, НомерСтолбца2); + + Область1.ЦветТекста = ЦветОбластиИзмененнойТекст; + Область2.ЦветТекста = ЦветОбластиИзмененнойТекст; + + Область1.ЦветФона = ЦветОбластиИзмененнойФон; + Область2.ЦветФона = ЦветОбластиИзмененнойФон; + + + НоваяСтрокаРазличий = РазличияЯчеекЛевый.Добавить(); + НоваяСтрокаРазличий.НомерСтроки = НомерСтроки1; + НоваяСтрокаРазличий.НомерСтолбца = НомерСтолбца1; + + НоваяСтрокаРазличий = РазличияЯчеекПравый.Добавить(); + НоваяСтрокаРазличий.НомерСтроки = НомерСтроки2; + НоваяСтрокаРазличий.НомерСтолбца = НомерСтолбца2; + + КонецЕсли; + + КонецЦикла; + + КонецЦикла; + + РазличияЯчеекЛевый.Сортировать("НомерСтроки, НомерСтолбца"); + РазличияЯчеекПравый.Сортировать("НомерСтроки, НомерСтолбца"); + + #КонецОбласти + +КонецПроцедуры + +&НаСервере +Функция СравнитьОбласти(Область1, Область2) + + Если Область1.Текст <> Область2.Текст Тогда + Возврат Ложь; + КонецЕсли; + + Если Область1.Примечание.Текст <> Область2.Примечание.Текст Тогда + Возврат Ложь; + КонецЕсли; + + Возврат Истина; + +КонецФункции + +&НаСервере +Функция ПолучитьТаблицуЗначенийИзДокумента(ТабличныйДокументИсточник) + + КоличествоСтолбцов = ТабличныйДокументИсточник.ШиринаТаблицы; + + Если КоличествоСтолбцов = 0 Тогда + Возврат Новый ТаблицаЗначений; + КонецЕсли; + + ТабличныйДокумент = Новый ТабличныйДокумент; + Для НомерСтолбца = 1 По КоличествоСтолбцов Цикл + ТабличныйДокумент.Область(1, НомерСтолбца, 1, НомерСтолбца).Текст = "Номер_" + Формат(НомерСтолбца,"ЧГ=0"); + КонецЦикла; + + ТабличныйДокумент.Вывести(ТабличныйДокументИсточник); + + Построитель = Новый ПостроительЗапроса; + + Построитель.ИсточникДанных = Новый ОписаниеИсточникаДанных(ТабличныйДокумент.Область()); + Построитель.Выполнить(); + ТаблицаЗначенийРезультат = Построитель.Результат.Выгрузить(); + + Возврат ТаблицаЗначенийРезультат; + +КонецФункции + +&НаСервере +Функция СформироватьСоответствия(ТаблицаЛевая, ТаблицаПравая, ПоСтрокам) + + ДанныеИзТаблицыЛевая = ПолучитьДанныеДляСравнения(ТаблицаЛевая, ПоСтрокам); + + ДанныеИзТаблицыПравая = ПолучитьДанныеДляСравнения(ТаблицаПравая, ПоСтрокам); + + Если ПоСтрокам Тогда + РезультатСоответствияЛевая = Новый СписокЗначений; + РезультатСоответствияЛевая.ЗагрузитьЗначения(Новый Массив(ТаблицаЛевая.Количество()+1)); + + РезультатСоответствияПравая = Новый СписокЗначений; + РезультатСоответствияПравая.ЗагрузитьЗначения(Новый Массив(ТаблицаПравая.Количество()+1)); + + Иначе + РезультатСоответствияЛевая = Новый СписокЗначений; + РезультатСоответствияЛевая.ЗагрузитьЗначения(Новый Массив(ТаблицаЛевая.Колонки.Количество()+1)); + + РезультатСоответствияПравая = Новый СписокЗначений; + РезультатСоответствияПравая.ЗагрузитьЗначения(Новый Массив(ТаблицаПравая.Колонки.Количество()+1)); + + КонецЕсли; + + ТекстЗапроса = ""; + + ТекстЗапроса = ТекстЗапроса + " ВЫБРАТЬ * ПОМЕСТИТЬ ТаблицаЛевая + | ИЗ &ДанныеИзТаблицыЛевая КАК ДанныеИзТаблицыЛевая;" + Символы.ПС; + + ТекстЗапроса = ТекстЗапроса + " ВЫБРАТЬ * ПОМЕСТИТЬ ТаблицаПравая + | ИЗ &ДанныеИзТаблицыПравая КАК ДанныеИзТаблицыПравая;" + Символы.ПС; + + ТекстЗапроса = ТекстЗапроса + "ВЫБРАТЬ + | ТаблицаЛевая.Номер КАК НомерЭлементаЛевая, + | ТаблицаПравая.Номер КАК НомерЭлементаПравая, + | ВЫБОР + | КОГДА ТаблицаПравая.Номер - ТаблицаЛевая.Номер < 0 + | ТОГДА ТаблицаЛевая.Номер - ТаблицаПравая.Номер + | ИНАЧЕ ТаблицаПравая.Номер - ТаблицаЛевая.Номер + | КОНЕЦ КАК РасстояниеОтНачала, + | ВЫБОР + | КОГДА &КоличествоСтрокПравая - ТаблицаПравая.Номер - (&КоличествоСтрокЛевая - ТаблицаЛевая.Номер) < 0 + | ТОГДА &КоличествоСтрокЛевая - ТаблицаЛевая.Номер - (&КоличествоСтрокПравая - ТаблицаПравая.Номер) + | ИНАЧЕ &КоличествоСтрокПравая - ТаблицаПравая.Номер - (&КоличествоСтрокЛевая - ТаблицаЛевая.Номер) + | КОНЕЦ КАК РасстояниеОтКонца, + | СУММА(ВЫБОР + | КОГДА ТаблицаЛевая.Значение <> """" + | ТОГДА ВЫБОР + | КОГДА ТаблицаЛевая.Количество < ТаблицаПравая.Количество + | ТОГДА ТаблицаЛевая.Количество + | ИНАЧЕ ТаблицаПравая.Количество + | КОНЕЦ + | ИНАЧЕ 0 + | КОНЕЦ) КАК КоличествоСовпаденийЗначений, + | СУММА(ВЫБОР + | КОГДА ТаблицаЛевая.Количество < ТаблицаПравая.Количество + | ТОГДА ТаблицаЛевая.Количество + | ИНАЧЕ ТаблицаПравая.Количество + | КОНЕЦ) КАК КоличествоСовпаденийВсего + |ПОМЕСТИТЬ ДанныеСвернуто + |ИЗ + | ТаблицаЛевая КАК ТаблицаЛевая + | ВНУТРЕННЕЕ СОЕДИНЕНИЕ ТаблицаПравая КАК ТаблицаПравая + | ПО ТаблицаЛевая.Значение = ТаблицаПравая.Значение + | + |СГРУППИРОВАТЬ ПО + | ТаблицаЛевая.Номер, + | ТаблицаПравая.Номер + |; + | + |//////////////////////////////////////////////////////////////////////////////// + |ВЫБРАТЬ + | ДанныеСвернуто.НомерЭлементаЛевая КАК НомерЭлементаЛевая, + | ДанныеСвернуто.НомерЭлементаПравая КАК НомерЭлементаПравая, + | ДанныеСвернуто.КоличествоСовпаденийЗначений КАК КоличествоСовпаденийЗначений, + | ДанныеСвернуто.КоличествоСовпаденийВсего КАК КоличествоСовпаденийВсего, + | ВЫБОР + | КОГДА ДанныеСвернуто.РасстояниеОтНачала < ДанныеСвернуто.РасстояниеОтКонца + | ТОГДА ДанныеСвернуто.РасстояниеОтНачала + | ИНАЧЕ ДанныеСвернуто.РасстояниеОтКонца + | КОНЕЦ КАК МинимальноеРасстояние + |ИЗ + | ДанныеСвернуто КАК ДанныеСвернуто + | + |УПОРЯДОЧИТЬ ПО + | КоличествоСовпаденийЗначений УБЫВ, + | КоличествоСовпаденийВсего УБЫВ, + | МинимальноеРасстояние, + | НомерЭлементаЛевая, + | НомерЭлементаПравая"; + + Запрос = Новый Запрос(ТекстЗапроса); + Запрос.УстановитьПараметр("ДанныеИзТаблицыЛевая", ДанныеИзТаблицыЛевая); + Запрос.УстановитьПараметр("ДанныеИзТаблицыПравая", ДанныеИзТаблицыПравая); + Запрос.УстановитьПараметр("КоличествоСтрокЛевая", ТаблицаЛевая.Количество()); + Запрос.УстановитьПараметр("КоличествоСтрокПравая", ТаблицаПравая.Количество()); + + Выборка = Запрос.Выполнить().Выбрать(); + + Пока Выборка.Следующий() Цикл + Если РезультатСоответствияЛевая[Выборка.НомерЭлементаЛевая].Значение = Неопределено + И РезультатСоответствияПравая[Выборка.НомерЭлементаПравая].Значение = Неопределено Тогда + РезультатСоответствияЛевая[Выборка.НомерЭлементаЛевая].Значение = Выборка.НомерЭлементаПравая; + РезультатСоответствияПравая[Выборка.НомерЭлементаПравая].Значение = Выборка.НомерЭлементаЛевая; + КонецЕсли; + КонецЦикла; + + Результат = Новый Массив; + Результат.Добавить(РезультатСоответствияЛевая); + Результат.Добавить(РезультатСоответствияПравая); + + Возврат Результат; + +КонецФункции + +&НаСервере +Функция ПолучитьДанныеДляСравнения(ТаблицаЗначенийИсточник, ПоСтрокам) + + МаксимальныйРазмерСтрок = Новый КвалификаторыСтроки(100); + + Результат = Новый ТаблицаЗначений; + Результат.Колонки.Добавить("Номер", Новый ОписаниеТипов("Число")); + Результат.Колонки.Добавить("Значение", Новый ОписаниеТипов("Строка",,,,МаксимальныйРазмерСтрок)); + + Граница1 = ?(ПоСтрокам, ТаблицаЗначенийИсточник.Количество(), + ТаблицаЗначенийИсточник.Колонки.Количество()) - 1; + + Граница2 = ?(ПоСтрокам, ТаблицаЗначенийИсточник.Колонки.Количество(), + ТаблицаЗначенийИсточник.Количество()) - 1; + + Для Индекс1 = 0 По Граница1 Цикл + + Для Индекс2 = 0 По Граница2 Цикл + + НоваяСтрока = Результат.Добавить(); + НоваяСтрока.Номер = Индекс1+1; + НоваяСтрока.Значение = ?(ПоСтрокам, ТаблицаЗначенийИсточник[Индекс1][Индекс2], + ТаблицаЗначенийИсточник[Индекс2][Индекс1]); + + КонецЦикла; + + КонецЦикла; + + Результат.Колонки.Добавить("Количество", Новый ОписаниеТипов("Число")); + Результат.ЗаполнитьЗначения(1, "Количество"); + + Результат.Свернуть("Номер, Значение", "Количество"); + + Возврат Результат; + +КонецФункции + + +&НаКлиенте +Процедура ОбработатьАктивизациюОбласти(ТабДокИсточник, ТабДокПриемник, СоответствияИсточник, СоответствияПриемник) + + БлокировкаОбработкиАктивизации = Истина; + + ТекОбласть = ТабДокИсточник.Элемент.ТекущаяОбласть; + + Если ТекОбласть.ТипОбласти = ТипОбластиЯчеекТабличногоДокумента.Таблица Тогда + + ВыбраннаяОбласть = ТабДокПриемник.Область(); + + Иначе + + Если ТекОбласть.Низ < СоответствияИсточник.Строки.Количество() Тогда + НомерСтроки = СоответствияИсточник.Строки[ТекОбласть.Низ].Значение; + Иначе + НомерСтроки = ТекОбласть.Низ + - СоответствияИсточник.Строки.Количество() + + СоответствияПриемник.Строки.Количество(); + КонецЕсли; + + Если ТекОбласть.Лево < СоответствияИсточник.Столбцы.Количество() Тогда + НомерСтолбца = СоответствияИсточник.Столбцы[ТекОбласть.Лево].Значение; + Иначе + НомерСтолбца = ТекОбласть.Лево + - СоответствияИсточник.Столбцы.Количество() + + СоответствияПриемник.Столбцы.Количество(); + КонецЕсли; + + + ВыбраннаяОбласть = Неопределено; + + Если ТекОбласть.ТипОбласти = ТипОбластиЯчеекТабличногоДокумента.Прямоугольник Тогда + + Если НомерСтроки <> Неопределено И НомерСтолбца <> Неопределено Тогда + ВыбраннаяОбласть = ТабДокПриемник.Объект.Область(НомерСтроки, НомерСтолбца); + КонецЕсли; + + ИначеЕсли ТекОбласть.ТипОбласти = ТипОбластиЯчеекТабличногоДокумента.Строки Тогда + + Если НомерСтроки <> Неопределено Тогда + ВыбраннаяОбласть = ТабДокПриемник.Объект.Область(НомерСтроки, 0, НомерСтроки, 0); + КонецЕсли; + + ИначеЕсли ТекОбласть.ТипОбласти = ТипОбластиЯчеекТабличногоДокумента.Колонки Тогда + + Если НомерСтолбца <> Неопределено Тогда + ВыбраннаяОбласть = ТабДокПриемник.Объект.Область(0, НомерСтолбца, 0, НомерСтолбца); + КонецЕсли; + + Иначе + + Возврат; + + КонецЕсли; + + КонецЕсли; + + ТабДокПриемник.Элемент.ТекущаяОбласть = ВыбраннаяОбласть; + + БлокировкаОбработкиАктивизации = Ложь; + +КонецПроцедуры + +&НаКлиенте +Процедура ПредыдущееИзменение(ЭлементФормы, РеквизитФормы, ТаблицаРазличий) + + Перем Индекс; + + ТекЯчейка = ЭлементФормы.ТекущаяОбласть; + НомерСтроки = ТекЯчейка.Верх; + НомерСтолбца = ТекЯчейка.Лево; + Для Каждого ТекСтрока Из ТаблицаРазличий Цикл + Если ТекСтрока.НомерСтроки < НомерСтроки + ИЛИ ТекСтрока.НомерСтроки = НомерСтроки И ТекСтрока.НомерСтолбца < НомерСтолбца Тогда + Индекс = ТаблицаРазличий.Индекс(ТекСтрока); + ИначеЕсли ТекСтрока.НомерСтроки >= НомерСтроки И ТекСтрока.НомерСтолбца > НомерСтолбца Тогда + Прервать; + КонецЕсли; + КонецЦикла; + + Если Индекс <> Неопределено Тогда + СтрокаРазличий = ТаблицаРазличий[Индекс]; + НомерСтроки = СтрокаРазличий.НомерСтроки; + НомерСтолбца = СтрокаРазличий.НомерСтолбца; + ЭлементФормы.ТекущаяОбласть = РеквизитФормы.Область(НомерСтроки, НомерСтолбца, НомерСтроки, НомерСтолбца); + КонецЕсли; + + +КонецПроцедуры + +&НаКлиенте +Процедура СледующееИзменение(ЭлементФормы, РеквизитФормы, ТаблицаРазличий) + + Перем Индекс; + + ТекЯчейка = ЭлементФормы.ТекущаяОбласть; + НомерСтроки = ТекЯчейка.Верх; + НомерСтолбца = ТекЯчейка.Лево; + Для Каждого ТекСтрока Из ТаблицаРазличий Цикл + Если ТекСтрока.НомерСтроки = НомерСтроки И ТекСтрока.НомерСтолбца > НомерСтолбца + ИЛИ ТекСтрока.НомерСтроки > НомерСтроки Тогда + Индекс = ТаблицаРазличий.Индекс(ТекСтрока); + Прервать; + КонецЕсли; + КонецЦикла; + + Если Индекс <> Неопределено Тогда + СтрокаРазличий = ТаблицаРазличий[Индекс]; + НомерСтроки = СтрокаРазличий.НомерСтроки; + НомерСтолбца = СтрокаРазличий.НомерСтолбца; + ЭлементФормы.ТекущаяОбласть = РеквизитФормы.Область(НомерСтроки, НомерСтолбца, НомерСтроки, НомерСтолбца); + КонецЕсли; + +КонецПроцедуры + +#КонецОбласти \ No newline at end of file diff --git a/SSL/src/InformationRegisters/ВерсииОбъектов/Forms/ФормаЗаписи/Form.form b/SSL/src/InformationRegisters/ВерсииОбъектов/Forms/ФормаЗаписи/Form.form index 309b65da9..97ace39c6 100644 --- a/SSL/src/InformationRegisters/ВерсииОбъектов/Forms/ФормаЗаписи/Form.form +++ b/SSL/src/InformationRegisters/ВерсииОбъектов/Forms/ФормаЗаписи/Form.form @@ -183,7 +183,6 @@ true true true - UseIfNecessary auto true diff --git a/SSL/src/InformationRegisters/ВерсииОбъектов/Forms/ФормаСписка/Form.form b/SSL/src/InformationRegisters/ВерсииОбъектов/Forms/ФормаСписка/Form.form index 75640d71c..78e40c205 100644 --- a/SSL/src/InformationRegisters/ВерсииОбъектов/Forms/ФормаСписка/Form.form +++ b/SSL/src/InformationRegisters/ВерсииОбъектов/Forms/ФормаСписка/Form.form @@ -270,9 +270,6 @@ true - - Список.Сжато - true СжатоExtendedTooltip @@ -516,7 +513,6 @@ true true true - UseIfNecessary auto true @@ -561,7 +557,7 @@ TextPicture - Auto + DontUse Auto diff --git a/SSL/src/InformationRegisters/ВерсииОбъектов/RecordSetModule.bsl b/SSL/src/InformationRegisters/ВерсииОбъектов/RecordSetModule.bsl index d8344bf86..f4d5f1920 100644 --- a/SSL/src/InformationRegisters/ВерсииОбъектов/RecordSetModule.bsl +++ b/SSL/src/InformationRegisters/ВерсииОбъектов/RecordSetModule.bsl @@ -3,18 +3,27 @@ #Область ОбработчикиСобытий Процедура ПередЗаписью(Отказ, Замещение) + Если ОбменДанными.Загрузка Тогда Возврат; КонецЕсли; Для Каждого Запись Из ЭтотОбъект Цикл Запись.РазмерДанных = РазмерДанных(Запись.ВерсияОбъекта); - ВерсияОбъекта = Запись.ВерсияОбъекта.Получить(); - Запись.ЕстьДанныеВерсии = ВерсияОбъекта <> Неопределено; + + ДанныеВерсии = Запись.ВерсияОбъекта.Получить(); + Запись.ЕстьДанныеВерсии = ДанныеВерсии <> Неопределено; + Если ПустаяСтрока(Запись.КонтрольнаяСумма) И Запись.ЕстьДанныеВерсии Тогда + Если ТипЗнч(ДанныеВерсии) = Тип("Структура") Тогда + ВерсияОбъекта = ДанныеВерсии.Объект; + Иначе + ВерсияОбъекта = ДанныеВерсии; + КонецЕсли; Запись.КонтрольнаяСумма = ВерсионированиеОбъектов.КонтрольнаяСумма(ВерсияОбъекта); КонецЕсли; КонецЦикла; + КонецПроцедуры #КонецОбласти diff --git a/SSL/src/InformationRegisters/ВерсииОбъектов/Templates/СтандартныйМакетПредставленияОбъекта/Template.mxlx b/SSL/src/InformationRegisters/ВерсииОбъектов/Templates/СтандартныйМакетПредставленияОбъекта/Template.mxlx index bfed345da..c4a12dc6d 100644 --- a/SSL/src/InformationRegisters/ВерсииОбъектов/Templates/СтандартныйМакетПредставленияОбъекта/Template.mxlx +++ b/SSL/src/InformationRegisters/ВерсииОбъектов/Templates/СтандартныйМакетПредставленияОбъекта/Template.mxlx @@ -25,26 +25,42 @@ - 0a84e64e-bded-4ad6-99ae-d67a7e3710ec + 5f1fa99b-1b3d-4e5a-807f-1e4b70e3487b 3 - - 0 - - 3 - - 1 - 4 + 1 2 + + 3 + + + + + 0a84e64e-bded-4ad6-99ae-d67a7e3710ec + 3 + + 0 + + 4 + + + + 1 5 + + 2 + + 6 + + 0 @@ -52,12 +68,12 @@ 1 - 6 + 7 - 7 + 8 НаименованиеОтчета @@ -69,7 +85,7 @@ 1 - 8 + 9 ru @@ -80,7 +96,7 @@ - 9 + 10 НаименованиеОбъекта @@ -92,7 +108,7 @@ 1 - 10 + 11
        @@ -101,9 +117,14 @@ 4 - 1 - 11 + 0 + + + + + + 12 ru @@ -114,7 +135,7 @@ - 12 + 13 ПредставлениеВерсии @@ -130,7 +151,7 @@ - 13 + 14 ru @@ -141,7 +162,7 @@ - 14 + 15 Комментарий @@ -157,7 +178,7 @@ Text 0 - 15 + 16 ru @@ -180,7 +201,7 @@ - 10 + 11 @@ -192,7 +213,7 @@ 1 - 8 + 9 ru @@ -208,12 +229,12 @@ - 3 + 4 - 16 + 17 @@ -228,12 +249,12 @@ - 3 + 4 - 16 + 17 @@ -248,17 +269,17 @@ - 3 - - - - - 16 + 4 17 + + + + + 18 ru @@ -274,12 +295,12 @@ - 3 + 4 - 16 + 17 @@ -294,18 +315,18 @@ - 3 - - - - - 18 - НаименованиеРеквизитаПоля + 4 19 + НаименованиеРеквизитаПоля + + + + + 20 ЗначениеРеквизита @@ -316,25 +337,8 @@ 1 - - 20 - - - 21 - ЗначениеРеквизита - - - -
        - - 15 - - - 1 - - 20 @@ -346,12 +350,12 @@ - 16 + 15 1 - 20 + 21 @@ -362,13 +366,30 @@ + + 16 + + + 1 + + 21 + + + + + 24 + ЗначениеРеквизита + + + + 18 1 - 11 + 12 ru @@ -385,7 +406,7 @@ 1 - 8 + 9 @@ -396,7 +417,7 @@ 1 - 24 + 25 НаименованиеТабличнойЧасти @@ -408,7 +429,7 @@ 1 - 25 + 26 ru @@ -420,13 +441,102 @@
        - 24 + 25 + + + 1 + + 12 + + + ru + Табличные документы + + + + + + + + 27 + + + 1 + + 27 + НаименованиеТабличногоДокумента + + + + + 28 + Текст + + + + + + 28 + + + 2 + + 29 + Текст + + + + + + 29 + + + 2 + + 30 + Текст + + + + + + 30 + + + 2 + + 31 + Текст + + + + + + 31 + + 5f1fa99b-1b3d-4e5a-807f-1e4b70e3487b + + 2 + + 32 + + + ru + открыть + + + + + + + + 33 0a84e64e-bded-4ad6-99ae-d67a7e3710ec 1 - 26 + 33 ru @@ -449,13 +559,13 @@ - 25 + 34 0a84e64e-bded-4ad6-99ae-d67a7e3710ec 1 - 27 + 34 ru @@ -478,13 +588,13 @@ - 26 + 35 0a84e64e-bded-4ad6-99ae-d67a7e3710ec 1 - 28 + 35 ru @@ -507,13 +617,13 @@ - 27 + 36 0a84e64e-bded-4ad6-99ae-d67a7e3710ec 1 - 29 + 36 ru @@ -536,9 +646,9 @@ true - 3 - 28 - 28 + 4 + 37 + 37 ДобавленныйРеквизит @@ -603,10 +713,11 @@ Легенда Rows - 24 - 27 + 33 + 36 -1 -1 + 0a84e64e-bded-4ad6-99ae-d67a7e3710ec @@ -659,6 +770,57 @@ -1 + + ТабличныеДокументыГиперссылка + + Rectangle + 31 + 31 + 2 + 2 + 5f1fa99b-1b3d-4e5a-807f-1e4b70e3487b + + + + ТабличныеДокументыДобавлен + + Rectangle + 29 + 29 + 2 + 2 + + + + ТабличныеДокументыИдентичны + + Rectangle + 27 + 27 + 2 + 2 + + + + ТабличныеДокументыРазличаются + + Rectangle + 28 + 28 + 2 + 2 + + + + ТабличныеДокументыУдален + + Rectangle + 30 + 30 + 2 + 2 + + УдаленныйРеквизит @@ -699,6 +861,16 @@ -1 + + ШапкаТабличногоДокумента + + Rectangle + 27 + 27 + 0 + 1 + + ШапкаТабличнойЧасти @@ -709,6 +881,16 @@ -1 + + ШапкаТабличныхДокументов + + Rows + 25 + 25 + -1 + -1 + + ШапкаТабличныхЧастей @@ -728,7 +910,7 @@ - + 294 Left @@ -740,6 +922,9 @@ 369 + + 121 + 72 @@ -883,8 +1068,55 @@ false QuickChange + + 4 + 294 + Left + Parameter + 0 + false + QuickChange + + + 5 + 369 + Center + Parameter + 6 + 322 + Center + style:ИзмененноеЗначениеРеквизитаЦвет + style:ИзмененноеЗначениеРеквизитаФон + Parameter + true + + + 6 + 322 + Center + style:ДобавленныйРеквизитФон + Parameter + true + + + 322 + Center + style:УдаленныйРеквизитФон + Parameter + false + + + 6 + 322 + Center + style:ИзмененноеЗначениеРеквизитаЦвет + Text + true + + + 1 style:ИзмененноеЗначениеРеквизитаЦвет diff --git a/SSL/src/InformationRegisters/ВерсииОбъектов/ВерсииОбъектов.mdo b/SSL/src/InformationRegisters/ВерсииОбъектов/ВерсииОбъектов.mdo index 29d2bd741..1b73ccf7d 100644 --- a/SSL/src/InformationRegisters/ВерсииОбъектов/ВерсииОбъектов.mdo +++ b/SSL/src/InformationRegisters/ВерсииОбъектов/ВерсииОбъектов.mdo @@ -349,6 +349,15 @@ PersonalComputer MobileDevice + + СравнениеТабличныхДокументов + + ru + Сравнение табличных документов + + PersonalComputer + MobileDevice + СтандартныйМакетПредставленияОбъекта diff --git a/SSL/src/InformationRegisters/ГруппыЗначенийДоступа/Forms/ФормаЗаписи/Form.form b/SSL/src/InformationRegisters/ГруппыЗначенийДоступа/Forms/ФормаЗаписи/Form.form index c48a8c124..8a62218c7 100644 --- a/SSL/src/InformationRegisters/ГруппыЗначенийДоступа/Forms/ФормаЗаписи/Form.form +++ b/SSL/src/InformationRegisters/ГруппыЗначенийДоступа/Forms/ФормаЗаписи/Form.form @@ -216,7 +216,6 @@ true true true - UseIfNecessary auto true @@ -253,7 +252,7 @@ ВключитьВозможностьРедактирования - Auto + DontUse Auto diff --git a/SSL/src/InformationRegisters/ГруппыЗначенийДоступа/Forms/ФормаСписка/Form.form b/SSL/src/InformationRegisters/ГруппыЗначенийДоступа/Forms/ФормаСписка/Form.form index b47e19dee..4ebcd03c9 100644 --- a/SSL/src/InformationRegisters/ГруппыЗначенийДоступа/Forms/ФормаСписка/Form.form +++ b/SSL/src/InformationRegisters/ГруппыЗначенийДоступа/Forms/ФормаСписка/Form.form @@ -545,7 +545,6 @@ true true true - UseIfNecessary auto true @@ -560,30 +559,12 @@ true - - Список.ВидДоступа - - - Список.ГруппаДоступа - - - Список.ИспользоватьПраваСсылки - - - Список.НаследоватьПраваРодителей - - - Список.НомерКартинкиГруппыДоступа - - - Список.СвязьСРодителем - - - Список.ТолькоВидДоступа - Список.DefaultPicture + + Список.ГруппаДанных + Список.ЗначениеДоступа @@ -679,7 +660,7 @@ ВключитьВозможностьРедактирования - Auto + DontUse Auto @@ -701,7 +682,7 @@ ОбновитьДанныеРегистра - Auto + DontUse Auto diff --git a/SSL/src/InformationRegisters/ГруппыЗначенийДоступа/ManagerModule.bsl b/SSL/src/InformationRegisters/ГруппыЗначенийДоступа/ManagerModule.bsl index 8209b3d0b..77ce4ad0e 100644 --- a/SSL/src/InformationRegisters/ГруппыЗначенийДоступа/ManagerModule.bsl +++ b/SSL/src/InformationRegisters/ГруппыЗначенийДоступа/ManagerModule.bsl @@ -135,7 +135,9 @@ Если ПоследниеИзменения = Неопределено ИЛИ ПоследниеИзменения.Количество() > 0 Тогда - УправлениеДоступомСлужебный.УстановитьЗаполнениеДанныхДляОграниченияДоступа(Истина); + Если Константы.ОграничиватьДоступНаУровнеЗаписей.Получить() Тогда + УправлениеДоступомСлужебный.УстановитьЗаполнениеДанныхДляОграниченияДоступа(Истина); + КонецЕсли; ОбновитьГруппыПустыхЗначенийДоступа(); УдалитьЛишниеЗаписи(); КонецЕсли; @@ -181,8 +183,8 @@ Если ЗначенияДоступа = Неопределено Тогда - ЗначенияДоступаСГруппами = УправлениеДоступомСлужебныйПовтИсп.Параметры( - ).СвойстваВидовДоступа.ЗначенияДоступаСГруппами; + ТекущиеПараметры = УправлениеДоступомСлужебныйПовтИсп.Параметры(); + ЗначенияДоступаСГруппами = ТекущиеПараметры.СвойстваВидовДоступа.ЗначенияДоступаСГруппами; Запрос = Новый Запрос; ТекстЗапроса = @@ -218,8 +220,8 @@ // Заполняет группы для пустых ссылок используемых типов значений доступа. Процедура ОбновитьГруппыПустыхЗначенийДоступа() Экспорт - ЗначенияДоступаСГруппами = УправлениеДоступомСлужебныйПовтИсп.Параметры( - ).СвойстваВидовДоступа.ЗначенияДоступаСГруппами; + ТекущиеПараметры = УправлениеДоступомСлужебныйПовтИсп.Параметры(); + ЗначенияДоступаСГруппами = ТекущиеПараметры.СвойстваВидовДоступа.ЗначенияДоступаСГруппами; Для каждого ИмяТаблицы Из ЗначенияДоступаСГруппами.ИменаТаблиц Цикл МенеджерОбъекта = ОбщегоНазначения.МенеджерОбъектаПоПолномуИмени(ИмяТаблицы); @@ -234,8 +236,8 @@ // Удаляет строки, которых не должно быть, если они добавлены каким-либо способом. Функция УдалитьЛишниеЗаписи(ЕстьИзменения = Неопределено) - ТипыГруппИЗначенийДоступа = УправлениеДоступомСлужебныйПовтИсп.Параметры( - ).СвойстваВидовДоступа.ЗначенияДоступаСГруппами.ТипыГруппЗначений; + СвойстваВидовДоступа = УправлениеДоступомСлужебныйПовтИсп.Параметры().СвойстваВидовДоступа; + ТипыГруппИЗначенийДоступа = СвойстваВидовДоступа.ЗначенияДоступаСГруппами.ТипыГруппЗначений; ТаблицаТиповГруппИЗначений = Новый ТаблицаЗначений; ТаблицаТиповГруппИЗначений.Колонки.Добавить("ТипЗначений", Метаданные.ОпределяемыеТипы.ЗначениеДоступа.Тип); @@ -366,8 +368,8 @@ ТипЗначенияДоступа = ТипЗнч(ЗначениеДоступа); - ЗначенияДоступаСГруппами = УправлениеДоступомСлужебныйПовтИсп.Параметры( - ).СвойстваВидовДоступа.ЗначенияДоступаСГруппами; + ТекущиеПараметры = УправлениеДоступомСлужебныйПовтИсп.Параметры(); + ЗначенияДоступаСГруппами = ТекущиеПараметры.СвойстваВидовДоступа.ЗначенияДоступаСГруппами; СвойстваВидаДоступа = ЗначенияДоступаСГруппами.ПоТипам.Получить(ТипЗначенияДоступа); @@ -377,8 +379,7 @@ |'"); Если СвойстваВидаДоступа = Неопределено Тогда - ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - ЗаголовокОшибки + + ВызватьИсключение ЗаголовокОшибки + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Для типа ""%1"" |не настроено использование групп значений доступа.'"), Строка(ТипЗначенияДоступа)); @@ -406,19 +407,20 @@ Исключение Ошибка = ИнформацияОбОшибке(); МетаданныеТипа = Метаданные.НайтиПоТипу(ТипЗначенияДоступа); + Если СвойстваВидаДоступа.НесколькоГруппЗначений Тогда ТабличнаяЧастьМетаданные = МетаданныеТипа.ТабличныеЧасти.Найти("ГруппыДоступа"); + Если ТабличнаяЧастьМетаданные = Неопределено ИЛИ ТабличнаяЧастьМетаданные.Реквизиты.Найти("ГруппаДоступа") = Неопределено Тогда - ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - ЗаголовокОшибки + + + ВызватьИсключение ЗаголовокОшибки + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'У типа значений доступа ""%1"" |не создана специальная табличная часть ГруппыДоступа |со специальным реквизитом ГруппаДоступа.'"), Строка(ТипЗначенияДоступа)); Иначе - ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - ЗаголовокОшибки + + ВызватьИсключение ЗаголовокОшибки + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'У значения доступа ""%1"" |типа ""%2"" |не удалось прочитать табличную часть ГруппаДоступа @@ -430,14 +432,12 @@ КонецЕсли; Иначе Если МетаданныеТипа.Реквизиты.Найти("ГруппаДоступа") = Неопределено Тогда - ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - ЗаголовокОшибки + + ВызватьИсключение ЗаголовокОшибки + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'У типа значений доступа ""%1"" |не создан специальный реквизит ГруппаДоступа.'"), Строка(ТипЗначенияДоступа)); Иначе - ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - ЗаголовокОшибки + + ВызватьИсключение ЗаголовокОшибки + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'У значения доступа ""%1"" |типа ""%2"" |не удалось прочитать реквизит ГруппаДоступа по ошибке: @@ -482,8 +482,8 @@ Если УправлениеДоступом.ОграничиватьДоступНаУровнеЗаписей() Тогда - ТипыГруппЗначений = УправлениеДоступомСлужебныйПовтИсп.Параметры( - ).СвойстваВидовДоступа.ЗначенияДоступаСГруппами.ТипыГруппЗначений; + СвойстваВидовДоступа = УправлениеДоступомСлужебныйПовтИсп.Параметры().СвойстваВидовДоступа; + ТипыГруппЗначений = СвойстваВидовДоступа.ЗначенияДоступаСГруппами.ТипыГруппЗначений; ПустаяСсылкаГруппыЗначенийДоступа = ТипыГруппЗначений.Получить(ТипЗнч(Ссылка)); @@ -797,11 +797,8 @@ КонецЕсли; НетГруппИсполнителей = Истина; - УправлениеДоступомСлужебный.ПриОпределенииГруппИсполнителей( - Запрос.МенеджерВременныхТаблиц, - СодержаниеПараметра, - ЗначениеПараметра, - НетГруппИсполнителей); + ИнтеграцияСтандартныхПодсистем.ПриОпределенииГруппИсполнителей(Запрос.МенеджерВременныхТаблиц, + СодержаниеПараметра, ЗначениеПараметра, НетГруппИсполнителей); Если НетГруппИсполнителей Тогда НаборЗаписей = РегистрыСведений.ГруппыЗначенийДоступа.СоздатьНаборЗаписей(); @@ -875,11 +872,7 @@ Если ГруппыИсполнителей = Неопределено И Исполнители <> Неопределено Тогда - Запрос.Текст = ТекстЗапросовВременныхТаблиц + " - |; - | - |//////////////////////////////////////////////////////////////////////////////// - |" + + ТекстЗапроса = "ВЫБРАТЬ | ПользователиГруппИсполнителей.ГруппаИсполнителей |ИЗ @@ -892,6 +885,12 @@ |ИЗ | ВнешниеПользователиГруппИсполнителей КАК ВнешниеПользователиГруппИсполнителей"; + Запрос.Текст = ТекстЗапросовВременныхТаблиц + " + |; + | + |//////////////////////////////////////////////////////////////////////////////// + |" + ТекстЗапроса; + РезультатыЗапросов = Запрос.ВыполнитьПакет(); Количество = РезультатыЗапросов.Количество(); diff --git a/SSL/src/InformationRegisters/ДампыПлатформы/Forms/ФормаСписка/Attributes/Список/ExtInfo/ListSettings.dcss b/SSL/src/InformationRegisters/ДампыПлатформы/Forms/ФормаСписка/Attributes/Список/ExtInfo/ListSettings.dcss new file mode 100644 index 000000000..61e6fb4bb --- /dev/null +++ b/SSL/src/InformationRegisters/ДампыПлатформы/Forms/ФормаСписка/Attributes/Список/ExtInfo/ListSettings.dcss @@ -0,0 +1,17 @@ + + + + Normal + dfcece9d-5077-440b-b6b3-45a5cb4538eb + + + Normal + 88619765-ccb3-46c6-ac52-38e9c992ebd4 + + + Normal + b75fecce-942b-4aed-abc9-e6a02e460fb3 + + Normal + 911b6018-f537-43e8-a417-da56b22f9aec + diff --git a/SSL/src/InformationRegisters/ДампыПлатформы/Forms/ФормаСписка/Form.form b/SSL/src/InformationRegisters/ДампыПлатформы/Forms/ФормаСписка/Form.form new file mode 100644 index 000000000..a59ab026e --- /dev/null +++ b/SSL/src/InformationRegisters/ДампыПлатформы/Forms/ФормаСписка/Form.form @@ -0,0 +1,382 @@ + + + + СписокКомпоновщикНастроекПользовательскиеНастройки + 1 + true + true + + true + + + <key>ru</key> + <value>Группа пользовательских настроек</value> + + false + + СписокКомпоновщикНастроекПользовательскиеНастройкиРасширеннаяПодсказка + 2 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + WeakSeparation + true + true + Auto + Auto + + + + Список + 3 + true + true + + true + + + Список + + true + None + + ДатаРегистрацииПредставление + 28 + + <key>ru</key> + <value>Дата регистрации</value> + + true + true + + true + + + Список.ДатаРегистрацииПредставление + + + ДатаРегистрацииПредставлениеРасширеннаяПодсказка + 30 + Label + true + true + + Left + + + + ДатаРегистрацииПредставлениеКонтекстноеМеню + 29 + 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 + + Список.DefaultPicture + + None + None + true + + 60 + + 0001-01-01T00:00:00 + 0001-01-01T00:00:00 + + + true + true + СписокКомпоновщикНастроекПользовательскиеНастройки + +
        + + ФормаКоманднаяПанель + -1 + Left + true + + DontBlock + true + true + true + Vertical + true + true + true + auto + true + + Список + 1 + + DynamicList + + + true + + + true + +
        true
        + + ВЫБРАТЬ + ДОБАВИТЬКДАТЕ( + ДАТАВРЕМЯ(2015,1,1), + СЕКУНДА, + (ВЫРАЗИТЬ(ДампыПлатформы.ДатаРегистрации/1000 - 0.5 КАК ЧИСЛО(15,0)) * 1000)/1000 - 63555667200 + ) КАК ДатаРегистрацииПредставление, + ДампыПлатформы.ДатаРегистрации КАК ДатаРегистрации, + ДампыПлатформы.ВариантДампа, + ДампыПлатформы.ВерсияПлатформы, + ДампыПлатформы.ИмяФайла +ИЗ + РегистрСведений.ДампыПлатформы КАК ДампыПлатформы + InformationRegister.ДампыПлатформы + true + true + true + true + true + +
        + + + + + +
        diff --git a/SSL/src/InformationRegisters/ДампыПлатформы/ManagerModule.bsl b/SSL/src/InformationRegisters/ДампыПлатформы/ManagerModule.bsl new file mode 100644 index 000000000..dcf8c23f9 --- /dev/null +++ b/SSL/src/InformationRegisters/ДампыПлатформы/ManagerModule.bsl @@ -0,0 +1,114 @@ +#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда + +#Область СлужебныеПроцедурыИФункции + +Функция ПолучитьДампыДляУдаления() Экспорт + Запрос = Новый Запрос; + Запрос.Текст = + "ВЫБРАТЬ + | ДампыПлатформы.ДатаРегистрации, + | ДампыПлатформы.ВариантДампа, + | ДампыПлатформы.ВерсияПлатформы, + | ДампыПлатформы.ИмяФайла + |ИЗ + | РегистрСведений.ДампыПлатформы КАК ДампыПлатформы + |ГДЕ + | ДампыПлатформы.ИмяФайла <> &ИмяФайла"; + + Запрос.УстановитьПараметр("ИмяФайла", ""); + + РезультатЗапроса = Запрос.Выполнить(); + + ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать(); + + ДампыДляУдаления = Новый Массив; + Пока ВыборкаДетальныеЗаписи.Следующий() Цикл + ДампДляУдаления = Новый Структура; + ДампДляУдаления.Вставить("ДатаРегистрации", ВыборкаДетальныеЗаписи.ДатаРегистрации); + ДампДляУдаления.Вставить("ВариантДампа", ВыборкаДетальныеЗаписи.ВариантДампа); + ДампДляУдаления.Вставить("ВерсияПлатформы", ВыборкаДетальныеЗаписи.ВерсияПлатформы); + ДампДляУдаления.Вставить("ИмяФайла", ВыборкаДетальныеЗаписи.ИмяФайла); + + ДампыДляУдаления.Добавить(ДампДляУдаления); + КонецЦикла; + + Возврат ДампыДляУдаления; +КонецФункции + +Процедура ИзменитьЗапись(Запись) Экспорт + МенеджерЗаписи = РегистрыСведений.ДампыПлатформы.СоздатьМенеджерЗаписи(); + МенеджерЗаписи.ДатаРегистрации = Запись.ДатаРегистрации; + МенеджерЗаписи.ВариантДампа = Запись.ВариантДампа; + МенеджерЗаписи.ВерсияПлатформы = Запись.ВерсияПлатформы; + МенеджерЗаписи.ИмяФайла = Запись.ИмяФайла; + МенеджерЗаписи.Записать(); +КонецПроцедуры + +Функция ПолучитьЗарегистрированныеДампы(Дампы) Экспорт + Запрос = Новый Запрос; + Запрос.Текст = + "ВЫБРАТЬ + | ДампыПлатформы.ИмяФайла + |ИЗ + | РегистрСведений.ДампыПлатформы КАК ДампыПлатформы + |ГДЕ + | ДампыПлатформы.ИмяФайла В(&Дампы)"; + + Запрос.УстановитьПараметр("Дампы", Дампы); + + РезультатЗапроса = Запрос.Выполнить(); + + ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать(); + + ДампыЕсть = Новый Соответствие; + Пока ВыборкаДетальныеЗаписи.Следующий() Цикл + ДампыЕсть.Вставить(ВыборкаДетальныеЗаписи.ИмяФайла, Истина); + КонецЦикла; + + Возврат ДампыЕсть; +КонецФункции + +Функция ПолучитьТопВариантов(ДатаНачала, ДатаОкончания, Количество, Знач ВерсияПлатформы = Неопределено) Экспорт + ДатаНачалаМС = (ДатаНачала - Дата(1,1,1)) * 1000; + ДатаОкончанияМС = (ДатаОкончания - Дата(1,1,1)) * 1000; + + Запрос = Новый Запрос; + Запрос.Текст = + "ВЫБРАТЬ ПЕРВЫЕ %ТОП + | ВариантДампа, + | КоличествоВариантов + |ИЗ + | (ВЫБРАТЬ + | ДампыПлатформы.ВариантДампа КАК ВариантДампа, + | КОЛИЧЕСТВО(1) КАК КоличествоВариантов + | ИЗ + | РегистрСведений.ДампыПлатформы КАК ДампыПлатформы + | ГДЕ + | ДампыПлатформы.ДатаРегистрации МЕЖДУ &ДатаНачалаМС И &ДатаОкончанияМС + | %УслВерсияПлатформы + | СГРУППИРОВАТЬ ПО + | ДампыПлатформы.ВариантДампа + | ) КАК Выборка + |УПОРЯДОЧИТЬ ПО + | КоличествоВариантов УБЫВ + |"; + + Запрос.Текст = СтрЗаменить(Запрос.Текст, "%ТОП", Формат(Количество, "ЧГ=0")); + Запрос.УстановитьПараметр("ДатаНачалаМС", ДатаНачалаМС); + Запрос.УстановитьПараметр("ДатаОкончанияМС", ДатаОкончанияМС); + Если ВерсияПлатформы <> Неопределено Тогда + ВерсияПлатформыЧисло = ЦентрМониторингаСлужебный.ВерсияПлатформыВЧисло(ВерсияПлатформы); + Запрос.Текст = СтрЗаменить(Запрос.Текст, "%УслВерсияПлатформы", "И ДампыПлатформы.ВерсияПлатформы = &ВерсияПлатформы"); + Запрос.УстановитьПараметр("ВерсияПлатформы", ВерсияПлатформыЧисло); + Иначе + Запрос.Текст = СтрЗаменить(Запрос.Текст, "%УслВерсияПлатформы", ""); + КонецЕсли; + + РезультатЗапроса = Запрос.Выполнить(); + + Возврат РезультатЗапроса; +КонецФункции + +#КонецОбласти + +#КонецЕсли \ No newline at end of file diff --git a/SSL/src/InformationRegisters/ДампыПлатформы/ДампыПлатформы.mdo b/SSL/src/InformationRegisters/ДампыПлатформы/ДампыПлатформы.mdo new file mode 100644 index 000000000..75287f504 --- /dev/null +++ b/SSL/src/InformationRegisters/ДампыПлатформы/ДампыПлатформы.mdo @@ -0,0 +1,142 @@ + + + + + + + + + + + + ДампыПлатформы + + ru + Дампы платформы + + true + InDialog + InformationRegister.ДампыПлатформы.Form.ФормаСписка + + Use + Active + + Use + + + + + Use + LineNumber + + Use + + + + + Use + Recorder + + Use + + + + + Use + Period + + ShowError + Use + + + + Managed + + ИмяФайла + + ru + Имя файла + + + String + + 500 + + + + + Use + Use + + Index + + + ДатаРегистрации + + ru + Дата регистрации + + + Number + + 15 + true + + + + + Use + Use + + true + + + ВариантДампа + + ru + Вариант дампа + + + String + + 100 + + + + + Use + Use + + true + + + ВерсияПлатформы + + ru + Версия платформы + + + Number + + 24 + true + + + + + Index + Use + Use + + true + + + ФормаСписка + + ru + Форма списка + + PersonalComputer + MobileDevice + + diff --git a/SSL/src/InformationRegisters/ДанныеБизнесПроцессов/Commands/МоиБизнесПроцессы/CommandModule.bsl b/SSL/src/InformationRegisters/ДанныеБизнесПроцессов/Commands/МоиБизнесПроцессы/CommandModule.bsl index 94d42f921..0fe3fe0f0 100644 --- a/SSL/src/InformationRegisters/ДанныеБизнесПроцессов/Commands/МоиБизнесПроцессы/CommandModule.bsl +++ b/SSL/src/InformationRegisters/ДанныеБизнесПроцессов/Commands/МоиБизнесПроцессы/CommandModule.bsl @@ -1,3 +1,4 @@ +#Область ОбработчикиСобытий &НаКлиенте Процедура ОбработкаКоманды(ПараметрКоманды, ПараметрыВыполненияКоманды) @@ -8,3 +9,4 @@ ПараметрыВыполненияКоманды.Окно); КонецПроцедуры +#КонецОбласти \ No newline at end of file diff --git a/SSL/src/InformationRegisters/ДанныеБизнесПроцессов/Forms/МоиБизнесПроцессы/Form.form b/SSL/src/InformationRegisters/ДанныеБизнесПроцессов/Forms/МоиБизнесПроцессы/Form.form index ac71ef8e3..bf1c66609 100644 --- a/SSL/src/InformationRegisters/ДанныеБизнесПроцессов/Forms/МоиБизнесПроцессы/Form.form +++ b/SSL/src/InformationRegisters/ДанныеБизнесПроцессов/Forms/МоиБизнесПроцессы/Form.form @@ -909,7 +909,6 @@ true true true - UseIfNecessary auto true @@ -924,15 +923,15 @@ true - - Список.ОтветственныйЗаБизнесПроцесс - Список.Автор Список.БизнесПроцесс + + Список.КартинкаСтроки +
        true
        ВЫБРАТЬ @@ -1002,7 +1001,7 @@ ПометкаУдаления - Auto + DontUse Auto @@ -1027,7 +1026,7 @@ КартаМаршрута - Auto + DontUse Auto diff --git a/SSL/src/InformationRegisters/ДанныеБизнесПроцессов/Forms/ФормаСписка/Form.form b/SSL/src/InformationRegisters/ДанныеБизнесПроцессов/Forms/ФормаСписка/Form.form index 80a2aab68..89969e788 100644 --- a/SSL/src/InformationRegisters/ДанныеБизнесПроцессов/Forms/ФормаСписка/Form.form +++ b/SSL/src/InformationRegisters/ДанныеБизнесПроцессов/Forms/ФормаСписка/Form.form @@ -920,7 +920,6 @@ true true true - UseIfNecessary auto true @@ -935,9 +934,6 @@ true - - Список.Предмет - Список.Автор @@ -993,7 +989,7 @@ ПометкаУдаления - Auto + DontUse Auto @@ -1018,7 +1014,7 @@ КартаМаршрута - Auto + DontUse Auto diff --git a/SSL/src/InformationRegisters/ДанныеПроизводственногоКалендаря/Templates/ДанныеПроизводственныхКалендарей/Template.txt b/SSL/src/InformationRegisters/ДанныеПроизводственногоКалендаря/Templates/ДанныеПроизводственныхКалендарей/Template.txt index 7961173a3..6d0882689 100644 --- a/SSL/src/InformationRegisters/ДанныеПроизводственногоКалендаря/Templates/ДанныеПроизводственныхКалендарей/Template.txt +++ b/SSL/src/InformationRegisters/ДанныеПроизводственногоКалендаря/Templates/ДанныеПроизводственныхКалендарей/Template.txt @@ -5477,4 +5477,370 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/SSL/src/InformationRegisters/ДатыЗапретаИзменения/Commands/ДатыЗапретаЗагрузкиДанных/CommandModule.bsl b/SSL/src/InformationRegisters/ДатыЗапретаИзменения/Commands/ДатыЗапретаЗагрузкиДанных/CommandModule.bsl index e8955a76b..a69bad526 100644 --- a/SSL/src/InformationRegisters/ДатыЗапретаИзменения/Commands/ДатыЗапретаЗагрузкиДанных/CommandModule.bsl +++ b/SSL/src/InformationRegisters/ДатыЗапретаИзменения/Commands/ДатыЗапретаЗагрузкиДанных/CommandModule.bsl @@ -1,3 +1,4 @@ +#Область ОбработчикиСобытий &НаКлиенте Процедура ОбработкаКоманды(ПараметрКоманды, ПараметрыВыполненияКоманды) @@ -7,3 +8,5 @@ ОткрытьФорму("РегистрСведений.ДатыЗапретаИзменения.Форма.ДатыЗапретаИзменения", ПараметрыФормы, ПараметрыВыполненияКоманды.Источник, ПараметрыВыполненияКоманды.Уникальность, ПараметрыВыполненияКоманды.Окно); КонецПроцедуры + +#КонецОбласти diff --git a/SSL/src/InformationRegisters/ДатыЗапретаИзменения/Commands/ДатыЗапретаИзмененияДанных/CommandModule.bsl b/SSL/src/InformationRegisters/ДатыЗапретаИзменения/Commands/ДатыЗапретаИзмененияДанных/CommandModule.bsl index cb9c763c1..09aeac031 100644 --- a/SSL/src/InformationRegisters/ДатыЗапретаИзменения/Commands/ДатыЗапретаИзмененияДанных/CommandModule.bsl +++ b/SSL/src/InformationRegisters/ДатыЗапретаИзменения/Commands/ДатыЗапретаИзмененияДанных/CommandModule.bsl @@ -1,3 +1,4 @@ +#Область ОбработчикиСобытий &НаКлиенте Процедура ОбработкаКоманды(ПараметрКоманды, ПараметрыВыполненияКоманды) @@ -6,3 +7,5 @@ ОткрытьФорму("РегистрСведений.ДатыЗапретаИзменения.Форма.ДатыЗапретаИзменения", ПараметрыФормы, ПараметрыВыполненияКоманды.Источник, ПараметрыВыполненияКоманды.Уникальность, ПараметрыВыполненияКоманды.Окно); КонецПроцедуры + +#КонецОбласти diff --git a/SSL/src/InformationRegisters/ДатыЗапретаИзменения/Forms/ДатыЗапретаИзменения/Form.form b/SSL/src/InformationRegisters/ДатыЗапретаИзменения/Forms/ДатыЗапретаИзменения/Form.form index ed639bab4..b6a89220b 100644 --- a/SSL/src/InformationRegisters/ДатыЗапретаИзменения/Forms/ДатыЗапретаИзменения/Form.form +++ b/SSL/src/InformationRegisters/ДатыЗапретаИзменения/Forms/ДатыЗапретаИзменения/Form.form @@ -2206,105 +2206,17 @@ ФормаКоманднаяПанель -1 - - Отчеты - 197 - - ДатыЗапретаПоПользователям - 198 - true - true - - true - - - ДатыЗапретаПоПользователямExtendedTooltip - 318 - Label - true - true - - Left - - - Form.Command.ДатыЗапретаПоПользователям - Normal - Auto - true - true - UserCmds - Auto - - - ДатыЗапретаПоРазделамОбъектамДляПользователей - 199 - true - true - - true - - - ДатыЗапретаПоРазделамОбъектамДляПользователейExtendedTooltip - 319 - Label - true - true - - Left - - - Form.Command.ДатыЗапретаПоРазделамОбъектамДляПользователей - Normal - Auto - true - true - UserCmds - Auto - - true - true - - true - - - <key>ru</key> - <value>Отчеты</value> - - - ru - Отчеты по датам запрета изменения данных, -установленным "По пользователям" - - - ОтчетыExtendedTooltip - 317 - Label - true - true - - Left - - - Popup - - - StdPicture.Report - - Auto - Normal - - - ПересчитатьДаты - 316 + ПоказатьОтчет + 429 true true true - ПересчитатьДатыExtendedTooltip - 320 + ПоказатьОтчетРасширеннаяПодсказка + 430 Label true true @@ -2312,14 +2224,13 @@ Left - Form.Command.ПересчитатьДаты + Form.Command.ПоказатьОтчет Normal Auto true true UserCmds Auto - InAdditionalSubmenu Обновить @@ -2375,7 +2286,6 @@ true true true - UseIfNecessary auto true @@ -2704,44 +2614,6 @@ true - - ДатаЗапрета - - <key>ru</key> - <value>Дата запрета</value> - - 14 - - Date - - Date - - - - true - - - true - - - - ОписаниеДатыЗапрета - - <key>ru</key> - <value>Описание даты запрета</value> - - 15 - - String - - - - true - - - true - - БезДатыЗапрета @@ -2804,49 +2676,13 @@ <value>Типы объектов разделов</value> 5 - - ValueTable - + true true - - Раздел - - <key>ru</key> - <value>Раздел</value> - - 1 - - ChartOfCharacteristicTypesRef.РазделыДатЗапретаИзменения - - - true - - - true - - - - ТипыОбъекта - - <key>ru</key> - <value>Типы объекта</value> - - 2 - - ValueList - - - true - - - true - - БезРазделовИОбъектов @@ -2873,7 +2709,7 @@ 7 - Boolean + ChartOfCharacteristicTypesRef.РазделыДатЗапретаИзменения true @@ -3087,18 +2923,13 @@ Разделы без объектов 17 - - ValueList - + true true - - - ПоказыватьРазделы @@ -3230,10 +3061,10 @@ - ТекущаяДатаНаСервере + НачалоДня <key>ru</key> - <value>Текущая дата на сервере</value> + <value>Начало дня</value> 26 @@ -3249,23 +3080,6 @@ true - - ПервыйРаздел - - <key>ru</key> - <value>Первый раздел</value> - - 8 - - ChartOfCharacteristicTypesRef.РазделыДатЗапретаИзменения - - - true - - - true - - ЗначениеДляВсехПользователей @@ -3317,33 +3131,23 @@ <common>true</common> </edit> </attributes> - <formCommands> - <name>ДатыЗапретаПоПользователям</name> + <attributes> + <name>ЗаписьСуществует</name> <title> <key>ru</key> - <value>Даты запрета по пользователям</value> + <value>Запись существует</value> - 1 - - ru - Даты запрета изменения данных -по пользователям и группам пользователей - - + 29 + + Boolean + + true - - - StdPicture.Report - - - - ДатыЗапретаПоПользователям - - - TextPicture - Auto - Auto - + + + true + + ПодобратьОбъекты @@ -3363,7 +3167,7 @@ <name>ПодобратьОбъекты</name> </handler> </action> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <formCommands> @@ -3389,7 +3193,7 @@ <name>Обновить</name> </handler> </action> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <formCommands> @@ -3411,34 +3215,7 @@ <name>ПодобратьПользователей</name> </handler> </action> - <currentRowUse>Auto</currentRowUse> - <selectedRowsUse>Auto</selectedRowsUse> - </formCommands> - <formCommands> - <name>ДатыЗапретаПоРазделамОбъектамДляПользователей</name> - <title> - <key>ru</key> - <value>Даты запрета по разделам и объектам для пользователей</value> - - 5 - - ru - Даты запрета изменения данных -по разделам и объектам для пользователей и групп пользователей - - - true - - - StdPicture.Report - - - - ДатыЗапретаПоРазделамОбъектамДляПользователей - - - TextPicture - Auto + DontUse Auto @@ -3460,7 +3237,7 @@ Разделы - Auto + DontUse Auto @@ -3486,29 +3263,33 @@ ДатыЗапретаИзменить - Auto + DontUse Auto - ПересчитатьДаты + ПоказатьОтчет <key>ru</key> - <value>Пересчитать даты</value> + <value>Отчет</value> - 8 + 9 ru - Пересчитать текущие значения относительных дат запрета + Показать отчет по датам запрета true + + StdPicture.Report + - ПересчитатьДаты + ПоказатьОтчет - Auto + TextPicture + DontUse Auto diff --git a/SSL/src/InformationRegisters/ДатыЗапретаИзменения/Forms/ДатыЗапретаИзменения/Module.bsl b/SSL/src/InformationRegisters/ДатыЗапретаИзменения/Forms/ДатыЗапретаИзменения/Module.bsl index d2debfb36..eb083243e 100644 --- a/SSL/src/InformationRegisters/ДатыЗапретаИзменения/Forms/ДатыЗапретаИзменения/Module.bsl +++ b/SSL/src/InformationRegisters/ДатыЗапретаИзменения/Forms/ДатыЗапретаИзменения/Module.bsl @@ -18,18 +18,18 @@ Элементы.ДатыЗапретаДобавить.ТолькоВоВсехДействиях = Ложь; КонецЕсли; + // Кэширование текущей даты на сервере. + НачалоДня = НачалоДня(ТекущаяДатаСеанса()); + // Заполнение свойств разделов. - СвойстваРазделов = ДатыЗапретаИзмененияСлужебныйПовтИсп.СвойстваРазделов(); - ЗаполнитьЗначенияСвойств(ЭтотОбъект, СвойстваРазделов, , "ТипыОбъектовРазделов"); - ЗначениеВРеквизитФормы(СвойстваРазделов.ТипыОбъектовРазделов, "ТипыОбъектовРазделов"); - ПервыйРаздел = ?( - ТипыОбъектовРазделов.Количество() = 1, ТипыОбъектовРазделов[0].Раздел, РазделПустаяСсылка); + СвойстваРазделов = ДатыЗапретаИзмененияСлужебный.СвойстваРазделов(); + ЗаполнитьЗначенияСвойств(ЭтотОбъект, СвойстваРазделов); // Настройка полей формы Если Параметры.ДатыЗапретаЗагрузкиДанных Тогда - Если НЕ СвойстваРазделов.ИспользоватьДатыЗапретаЗагрузкиДанных Тогда - ВызватьИсключение(НСтр("ru = 'Даты запрета загрузки данных не используются.'")); + Если НЕ СвойстваРазделов.ДатыЗапретаЗагрузкиВнедрены Тогда + ВызватьИсключение НСтр("ru = 'Даты запрета загрузки данных не применяются.'"); КонецЕсли; Заголовок = НСтр("ru = 'Даты запрета загрузки данных'"); @@ -40,24 +40,6 @@ Элементы.УстановкаДатыЗапрета.СписокВыбора.НайтиПоЗначению("ПоПользователям").Представление = НСтр("ru = 'По информационным базам'"); - Элементы.Отчеты.Подсказка - = НСтр("ru = 'Отчеты по датам запрета загрузки данных, - |установленным ""По информационным базам"".'"); - - Команды.ДатыЗапретаПоПользователям.Заголовок - = НСтр("ru = 'Даты запрета по информационным базам'"); - - Команды.ДатыЗапретаПоПользователям.Подсказка - = НСтр("ru = 'Даты запрета загрузки данных - |по информационным базам и программам.'"); - - Команды.ДатыЗапретаПоРазделамОбъектамДляПользователей.Заголовок = - НСтр("ru = 'Даты запрета по разделам и объектам для информационных баз'"); - - Команды.ДатыЗапретаПоРазделамОбъектамДляПользователей.Подсказка = - НСтр("ru = 'Даты запрета загрузки данных - |по разделам и объектам для информационных баз и программ.'"); - Элементы.ПользователиПолноеПредставление.Заголовок = НСтр("ru = 'Программа: информационная база'"); @@ -94,23 +76,16 @@ Если БезРазделовИОбъектов Тогда Элементы.СпособУказанияДатыЗапрета.Видимость = ЗначениеЗаполнено(ТекущийСпособУказанияДатыЗапрета( - "*", ЕдинственныйРаздел, ПервыйРаздел, ЗначениеДляВсехПользователей)); + "*", ЕдинственныйРаздел, ЗначениеДляВсехПользователей, НачалоДня)); Список.Удалить(Список.НайтиПоЗначению("ПоРазделамИОбъектам")); Список.Удалить(Список.НайтиПоЗначению("ПоРазделам")); Список.Удалить(Список.НайтиПоЗначению("ПоОбъектам")); ИначеЕсли НЕ ПоказыватьРазделы Тогда - Элементы.ДатыЗапретаПоРазделамОбъектамДляПользователей.Заголовок = - ТекстЗаголовкаКомандыОтчетПоОбъектам(); - Список.Удалить(Список.НайтиПоЗначению("ПоРазделамИОбъектам")); Список.Удалить(Список.НайтиПоЗначению("ПоРазделам")); - ИначеЕсли ВсеРазделыБезОбъектов Тогда - Элементы.ДатыЗапретаПоРазделамОбъектамДляПользователей.Заголовок = - ТекстЗаголовкаКомандыОтчетПоРазделам(); - Список.Удалить(Список.НайтиПоЗначению("ПоРазделамИОбъектам")); Список.Удалить(Список.НайтиПоЗначению("ПоОбъектам")); Иначе @@ -255,7 +230,8 @@ КонецЕсли; Данные = Неопределено; - ТекущийСпособ = ТекущийСпособУказанияДатыЗапрета(ТекущийПользователь, ЕдинственныйРаздел, ПервыйРаздел, ЗначениеДляВсехПользователей, Данные); + ТекущийСпособ = ТекущийСпособУказанияДатыЗапрета(ТекущийПользователь, + ЕдинственныйРаздел, ЗначениеДляВсехПользователей, НачалоДня, Данные); ТекстВопроса = ""; Если ТекущийСпособ = "ПоРазделамИОбъектам" И ВыбранноеЗначение = "ОбщаяДата" Тогда @@ -691,7 +667,7 @@ Если Копирование ИЛИ ВсеРазделыБезОбъектов ИЛИ СпособУказанияДатыЗапрета = "ПоРазделам" Тогда - // + Отказ = Истина; Возврат; КонецЕсли; @@ -709,15 +685,16 @@ Возврат; КонецЕсли; - Отбор = Новый Структура("Раздел", ТекущийРаздел); - НайденныеСтроки = ТипыОбъектовРазделов.НайтиСтроки(Отбор); + ТипыОбъектовРаздела = ТипыОбъектовРазделов.Получить(ТекущийРаздел); ТекущиеДанные = Элементы.ДатыЗапрета.ТекущиеДанные; - Если НайденныеСтроки.Количество() > 0 - И НайденныеСтроки[0].ТипыОбъекта.Количество() > 0 Тогда + Если ТипыОбъектовРаздела <> Неопределено + И ТипыОбъектовРаздела.Количество() > 0 Тогда + Если ПоказыватьРазделыТекущегоПользователя Тогда Родитель = ТекущиеДанные.ПолучитьРодителя(); + Если НЕ ТекущиеДанные.ЭтоРаздел И Родитель <> Неопределено Тогда // Добавление объекта в раздел. @@ -743,7 +720,7 @@ ТекущиеДанные = Элемент.ТекущиеДанные; Поле = Элементы.ДатыЗапрета.ТекущийЭлемент; - РазделБезОбъектов = РазделыБезОбъектов.НайтиПоЗначению(ТекущиеДанные.Раздел) <> Неопределено; + РазделБезОбъектов = РазделыБезОбъектов.Найти(ТекущиеДанные.Раздел) <> Неопределено; // Переход к доступному полю или открытие формы. ОткрытьФормуРедактированияДатыЗапрета = Ложь; @@ -789,7 +766,7 @@ // требуется заполнить объект, иначе нельзя выполнить запись в регистр. ТекущийЭлемент = Элементы.ДатыЗапретаПолноеПредставление; ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстСообщенияСначалаВыберитеОбъект()); - // + ИначеЕсли ТекущиеДанные.ОписаниеДатыЗапрета <> "ПроизвольнаяДата" ИЛИ Поле = Элементы.ДатыЗапретаОписаниеДатыЗапретаПредставление Тогда ОткрытьФормуРедактированияДатыЗапрета = Истина; @@ -902,11 +879,8 @@ Возврат; КонецЕсли; Иначе - Если ЗначениеЗаполнено(ТекущиеДанные.Представление) - И (ТекущиеДанные.ЗаписьСуществует - Или ДатаЗапретаУстановлена(ТекущиеДанные, ТекущийПользователь)) Тогда + Если ДатаЗапретаУстановлена(ТекущиеДанные, ТекущийПользователь) Тогда // Удаление даты запрета для объекта по разделу. - ПоказатьВопрос( Новый ОписаниеОповещения( "ДатыЗапретаПередУдалениемОбъектаПродолжение", ЭтотОбъект, ТекущиеДанные), @@ -1100,9 +1074,9 @@ ЗначенияСвойств) Тогда ПоказатьПредупреждение(, - ТекстСообщенияЗначениеУжеДобавленоВСписок() + - Символы.ПС + - ТекстСообщенияОбновитьДанныеФормыF5()); + ТекстСообщенияЗначениеУжеДобавленоВСписок() + + Символы.ПС + + ТекстСообщенияОбновитьДанныеФормыF5()); Возврат; Иначе ОбновитьЗначенияПрочитанныхСвойств( @@ -1142,21 +1116,6 @@ #Область ОбработчикиКомандФормы -&НаКлиенте -Процедура ПересчитатьДаты(Команда) - - ТекстВопроса = ТекстВопросаОНесохраненныхДанных(); - - Если ЗначениеЗаполнено(ТекстВопроса) Тогда - ТекстВопроса = ТекстВопроса + Символы.ПС + ТекстВопросаПересчитатьДатыЗапрета(); - ПоказатьВопрос( - Новый ОписаниеОповещения("ПересчитатьДатыЗавершение", ЭтотОбъект), - ТекстВопроса, - РежимДиалогаВопрос.ДаНет); - КонецЕсли; - -КонецПроцедуры - &НаКлиенте Процедура Обновить(Команда) @@ -1214,33 +1173,15 @@ КонецПроцедуры &НаКлиенте -Процедура ДатыЗапретаПоПользователям(Команда) - - ПараметрыФормы = Новый Структура; +Процедура ПоказатьОтчет(Команда) Если Параметры.ДатыЗапретаЗагрузкиДанных Тогда - ИмяФормыОтчета = "Отчет.ДатыЗапретаЗагрузки.Форма.ФормаОтчета"; + ИмяФормыОтчета = "Отчет.ДатыЗапретаЗагрузки.Форма"; Иначе - ИмяФормыОтчета = "Отчет.ДатыЗапретаИзменения.Форма.ФормаОтчета"; + ИмяФормыОтчета = "Отчет.ДатыЗапретаИзменения.Форма"; КонецЕсли; - ОткрытьФорму(ИмяФормыОтчета, ПараметрыФормы, ЭтотОбъект); - -КонецПроцедуры - -&НаКлиенте -Процедура ДатыЗапретаПоРазделамОбъектамДляПользователей(Команда) - - ПараметрыФормы = Новый Структура; - ПараметрыФормы.Вставить("ПоРазделамОбъектам", Истина); - - Если Параметры.ДатыЗапретаЗагрузкиДанных Тогда - ИмяФормыОтчета = "Отчет.ДатыЗапретаЗагрузки.Форма.ФормаОтчета"; - Иначе - ИмяФормыОтчета = "Отчет.ДатыЗапретаИзменения.Форма.ФормаОтчета"; - КонецЕсли; - - ОткрытьФорму(ИмяФормыОтчета, ПараметрыФормы, ЭтотОбъект); + ОткрытьФорму(ИмяФормыОтчета); КонецПроцедуры @@ -1519,6 +1460,13 @@ ТекущиеДанные.Объект, ТекущийПользователь); + Если ТекущийРаздел() = ТекущиеДанные.Объект Тогда + // Удалена общая дата. + ДатаЗапрета = '00000000'; + ОписаниеДатыЗапрета = "ПроизвольнаяДата"; + ЗаписьСуществует = Ложь; + КонецЕсли; + ДатыЗапретаПриУдалении(ТекущиеДанные); ОповеститьОбИзменении(Тип("РегистрСведенийКлючЗаписи.ДатыЗапретаИзменения")); @@ -1552,21 +1500,7 @@ ТекущийРодитель.ПолучитьИдентификатор(); КонецЕсли; -КонецПроцедуры - -&НаКлиенте -Процедура ПересчитатьДатыЗавершение(Ответ, Неопределен) Экспорт - - Если Ответ = КодВозвратаДиалога.Нет Тогда - Возврат; - КонецЕсли; - - ОписаниеРезультата = ПересчитатьДатыНаСервере(); - - ОбновитьНаСервере(); - РазвернутьДанныеПользователя(); - - ПоказатьПредупреждение(, ОписаниеРезультата); + ОбновитьНаличиеДатЗапретаТекущегоПользователя(); КонецПроцедуры @@ -1582,19 +1516,6 @@ КонецПроцедуры -&НаСервере -Функция ПересчитатьДатыНаСервере() - - ОписаниеРезультата = ""; - ДатыЗапретаИзмененияСлужебный.ПересчитатьТекущиеЗначенияОтносительныхДатЗапрета( - Ложь, ОписаниеРезультата); - - ОбновитьНаСервере(); - - Возврат ОписаниеРезультата; - -КонецФункции - &НаСервере Процедура ОбновитьНаСервере() @@ -1604,7 +1525,7 @@ УстановитьВидимость(); // Кэширование текущей даты на сервере. - ТекущаяДатаНаСервере = ТекущаяДатаСеанса(); + НачалоДня = НачалоДня(ТекущаяДатаСеанса()); СтарыйПользователь = ТекущийПользователь; @@ -1672,7 +1593,7 @@ И СпособУказанияЗначениеВСписке <> Неопределено Тогда ТекущийСпособУказания = ТекущийСпособУказанияДатыЗапрета( - ТекущийПользователь, ЕдинственныйРаздел, ПервыйРаздел, ЗначениеДляВсехПользователей); + ТекущийПользователь, ЕдинственныйРаздел, ЗначениеДляВсехПользователей, НачалоДня); ТекущийСпособУказания = ?(ЗначениеЗаполнено(ТекущийСпособУказания), ТекущийСпособУказания, "ОбщаяДата"); @@ -1793,19 +1714,16 @@ | ИНАЧЕ 1 | КОНЕЦ КАК ОбщееНазначение, | ПРЕДСТАВЛЕНИЕ(ДатыЗапретаИзменения.Пользователь) КАК Представление, - | МАКСИМУМ(ДатыЗапретаИзменения.ДатаЗапрета) КАК ДатаЗапрета, - | МАКСИМУМ(ДатыЗапретаИзменения.ОписаниеДатыЗапрета) КАК ОписаниеДатыЗапрета, | МАКСИМУМ(ДатыЗапретаИзменения.Комментарий) КАК Комментарий, | ЛОЖЬ КАК БезДатыЗапрета, | -1 КАК НомерКартинки |ИЗ | РегистрСведений.ДатыЗапретаИзменения КАК ДатыЗапретаИзменения |ГДЕ - | ДатыЗапретаИзменения.Объект <> НЕОПРЕДЕЛЕНО - | И (НЕ(ДатыЗапретаИзменения.Раздел <> ДатыЗапретаИзменения.Объект - | И ТИПЗНАЧЕНИЯ(ДатыЗапретаИзменения.Объект) = ТИП(ПланВидовХарактеристик.РазделыДатЗапретаИзменения))) - | И (НЕ(ТИПЗНАЧЕНИЯ(ДатыЗапретаИзменения.Объект) <> ТИП(ПланВидовХарактеристик.РазделыДатЗапретаИзменения) - | И &ВсеРазделыБезОбъектов)) + | НЕ(ДатыЗапретаИзменения.Раздел <> ДатыЗапретаИзменения.Объект + | И ТИПЗНАЧЕНИЯ(ДатыЗапретаИзменения.Объект) = ТИП(ПланВидовХарактеристик.РазделыДатЗапретаИзменения)) + | И НЕ(ТИПЗНАЧЕНИЯ(ДатыЗапретаИзменения.Объект) <> ТИП(ПланВидовХарактеристик.РазделыДатЗапретаИзменения) + | И &ВсеРазделыБезОбъектов) | |СГРУППИРОВАТЬ ПО | ДатыЗапретаИзменения.Пользователь @@ -1896,8 +1814,9 @@ ТекущийСпособУказания = ТекущийСпособУказанияДатыЗапрета( Контекст.ТекущийПользователь, Контекст.ЕдинственныйРаздел, - Контекст.ПервыйРаздел, - Контекст.ЗначениеДляВсехПользователей, Данные); + Контекст.ЗначениеДляВсехПользователей, + Контекст.НачалоДня, + Данные); ТекущийСпособУказания = ?(ТекущийСпособУказания = "", "ОбщаяДата", ТекущийСпособУказания); Если Контекст.СпособУказанияДатыЗапрета <> ТекущийСпособУказания Тогда @@ -1941,8 +1860,9 @@ УстановитьКоманднуюПанельДатЗапрета(Контекст); ПередаваемыеПараметры = Новый Структура; + ПередаваемыеПараметры.Вставить("НачалоДня", Контекст.НачалоДня); ПередаваемыеПараметры.Вставить("Пользователь", Контекст.ТекущийПользователь); - ПередаваемыеПараметры.Вставить("ПервыйРаздел", Контекст.ПервыйРаздел); + ПередаваемыеПараметры.Вставить("ЕдинственныйРаздел", Контекст.ЕдинственныйРаздел); ПередаваемыеПараметры.Вставить("ПоказыватьРазделы", Контекст.ПоказыватьРазделы); ПередаваемыеПараметры.Вставить("ВсеРазделыБезОбъектов", Контекст.ВсеРазделыБезОбъектов); ПередаваемыеПараметры.Вставить("РазделыБезОбъектов", Контекст.РазделыБезОбъектов); @@ -1977,7 +1897,7 @@ Если НоваяСтрока.ЭтоРаздел Тогда НоваяСтрока.РазделБезОбъектов = - Контекст.РазделыБезОбъектов.НайтиПоЗначению(НоваяСтрока.Раздел) <> Неопределено; + Контекст.РазделыБезОбъектов.Найти(НоваяСтрока.Раздел) <> Неопределено; КонецЕсли; КонецЦикла; @@ -1998,11 +1918,14 @@ КонецЕсли; Иначе ПредставленияТиповОбъектов = ""; - Для каждого ОписаниеТипаОбъекта Из Контекст.ТипыОбъектовРазделов[0].ТипыОбъекта Цикл - ПредставленияТиповОбъектов = - СокрЛП(ПредставленияТиповОбъектов + Символы.ПС + ОписаниеТипаОбъекта.Представление); - КонецЦикла; - Контекст.Элементы.ДатыЗапретаПолноеПредставление.Заголовок = ПредставленияТиповОбъектов; + ТипыОбъектовРаздела = Контекст.ТипыОбъектовРазделов.Получить(Контекст.ЕдинственныйРаздел); + Если ТипыОбъектовРаздела <> Неопределено Тогда + Для Каждого СвойстваТипа Из ТипыОбъектовРаздела Цикл + ПредставленияТиповОбъектов = ПредставленияТиповОбъектов + Символы.ПС + + СвойстваТипа.Представление; + КонецЦикла; + КонецЕсли; + Контекст.Элементы.ДатыЗапретаПолноеПредставление.Заголовок = СокрЛП(ПредставленияТиповОбъектов); Контекст.Элементы.ДатыЗапрета.Отображение = ОтображениеТаблицы.Список; КонецЕсли; @@ -2026,10 +1949,11 @@ Контекст.Пользователь, Контекст.ВсеРазделыБезОбъектов, Контекст.РазделыБезОбъектов, - Контекст.ЗначениеДляВсехПользователей); + Контекст.ЗначениеДляВсехПользователей, + Контекст.НачалоДня); Иначе ПрочитанныеДатыЗапрета = ПрочитатьДанныеПользователяБезРазделов( - Контекст.Пользователь, Контекст.ПервыйРаздел, Контекст.ЗначениеДляВсехПользователей); + Контекст.Пользователь, Контекст.ЕдинственныйРаздел, Контекст.ЗначениеДляВсехПользователей); КонецЕсли; ДанныеПользователя = Новый СписокЗначений; @@ -2055,7 +1979,8 @@ Функция ПрочитатьДанныеПользователяСРазделами(Знач Пользователь, Знач ВсеРазделыБезОбъектов, Знач РазделыБезОбъектов, - Знач ЗначениеДляВсехПользователей) + Знач ЗначениеДляВсехПользователей, + Знач НачалоДня) // Подготовка дерева значений дат запрета изменения // с первым уровнем по разделам. @@ -2127,7 +2052,6 @@ | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ДатыЗапретаИзменения КАК ДатыЗапретаИзменения | ПО Разделы.Ссылка = ДатыЗапретаИзменения.Раздел | И (ДатыЗапретаИзменения.Пользователь = &Пользователь) - | И (ДатыЗапретаИзменения.Объект <> НЕОПРЕДЕЛЕНО) | И (НЕ(ДатыЗапретаИзменения.Раздел <> ДатыЗапретаИзменения.Объект | И ТИПЗНАЧЕНИЯ(ДатыЗапретаИзменения.Объект) = ТИП(ПланВидовХарактеристик.РазделыДатЗапретаИзменения))) | И (НЕ(ТИПЗНАЧЕНИЯ(ДатыЗапретаИзменения.Объект) <> ТИП(ПланВидовХарактеристик.РазделыДатЗапретаИзменения) @@ -2162,7 +2086,9 @@ СтрокаРаздела = Строка.Строки.Найти(Строка.Раздел, "Объект"); Если СтрокаРаздела <> Неопределено Тогда Строка.ЗаписьСуществует = Истина; - Строка.ДатаЗапрета = СтрокаРаздела.ДатаЗапрета; + Строка.ДатаЗапрета = ДатыЗапретаИзмененияСлужебный.ДатаЗапретаПоОписанию( + СтрокаРаздела.ОписаниеДатыЗапрета, СтрокаРаздела.ДатаЗапрета, НачалоДня); + Если ЗначениеЗаполнено(СтрокаРаздела.ОписаниеДатыЗапрета) Тогда ЗаполнитьПоВнутреннемуОписаниюДатыЗапрета(Строка, СтрокаРаздела.ОписаниеДатыЗапрета); Иначе @@ -2187,14 +2113,14 @@ КонецФункции &НаСервереБезКонтекста -Функция ПрочитатьДанныеПользователяБезРазделов(Знач Пользователь, Знач ПервыйРаздел, Знач ЗначениеДляВсехПользователей) +Функция ПрочитатьДанныеПользователяБезРазделов(Знач Пользователь, Знач ЕдинственныйРаздел, Знач ЗначениеДляВсехПользователей) // Дерево значений с первым уровнем по объектам. НачатьТранзакцию(); Попытка Запрос = Новый Запрос; Запрос.УстановитьПараметр("Пользователь", Пользователь); - Запрос.УстановитьПараметр("ПервыйРаздел", ПервыйРаздел); + Запрос.УстановитьПараметр("ЕдинственныйРаздел", ЕдинственныйРаздел); Запрос.УстановитьПараметр("ОбщаяДатаПредставление", ТекстПредставленияОбщейДаты()); Запрос.УстановитьПараметр("ЗначениеДляВсехПользователей", ЗначениеДляВсехПользователей); Запрос.Текст = @@ -2231,7 +2157,7 @@ |ОБЪЕДИНИТЬ ВСЕ | |ВЫБРАТЬ - | &ПервыйРаздел, + | &ЕдинственныйРаздел, | ДатыЗапретаИзменения.Объект, | ПРЕДСТАВЛЕНИЕ(ДатыЗапретаИзменения.Объект), | ПРЕДСТАВЛЕНИЕ(ДатыЗапретаИзменения.Объект), @@ -2244,8 +2170,7 @@ | РегистрСведений.ДатыЗапретаИзменения КАК ДатыЗапретаИзменения |ГДЕ | ДатыЗапретаИзменения.Пользователь = &Пользователь - | И ДатыЗапретаИзменения.Раздел = &ПервыйРаздел - | И ДатыЗапретаИзменения.Объект <> НЕОПРЕДЕЛЕНО + | И ДатыЗапретаИзменения.Раздел = &ЕдинственныйРаздел | И ТИПЗНАЧЕНИЯ(ДатыЗапретаИзменения.Объект) <> ТИП(ПланВидовХарактеристик.РазделыДатЗапретаИзменения)"; ПрочитанныеДатыЗапрета = Запрос.Выполнить().Выгрузить(ОбходРезультатаЗапроса.ПоГруппировкам); @@ -2458,10 +2383,10 @@ Процедура ОбновитьЗначенияПрочитанныхСвойств(ТекущиеЗначенияСвойств, ПрочитанныеСвойства, КомментарийТекущиеДанные = Ложь) Если ПрочитанныеСвойства.Комментарий <> Неопределено Тогда - // + Если КомментарийТекущиеДанные = Ложь Тогда ТекущиеЗначенияСвойств.Комментарий = ПрочитанныеСвойства.Комментарий; - // + ИначеЕсли КомментарийТекущиеДанные <> Неопределено Тогда КомментарийТекущиеДанные.Комментарий = ПрочитанныеСвойства.Комментарий; КонецЕсли; @@ -2503,7 +2428,7 @@ Функция ЗаблокироватьЗаписьПользователя(Знач Контекст, Знач Раздел, Знач Объект, Знач Пользователь, Знач РазблокироватьРанееЗаблокированное = Ложь) ЗначенияКлючейЗаписей = Новый Массив; - // + Если РазблокироватьРанееЗаблокированное Тогда Для каждого ОписаниеБлокировки Из Контекст.УстановленныеБлокировки Цикл ЗначенияКлючаЗаписи = Новый Структура("Раздел, Объект, Пользователь"); @@ -2532,7 +2457,8 @@ Контекст.УникальныйИдентификатор, ПрочитанныеСвойства, РазблокироватьРанееЗаблокированное, - ЗначенияКлючейЗаписей); + ЗначенияКлючейЗаписей, + Контекст.НачалоДня); Если РазблокироватьРанееЗаблокированное Тогда Контекст.УстановленныеБлокировки.Очистить(); @@ -2545,7 +2471,8 @@ КонецФункции &НаСервереБезКонтекста -Функция ЗаблокироватьЗаписьПользователяНаСервере(Знач ЗначенияКлючаЗаписи, Знач УникальныйИдентификатор, Знач ПрочитанныеСвойства, Знач РазблокироватьРанееЗаблокированное, Знач ЗначенияКлючейЗаписей) +Функция ЗаблокироватьЗаписьПользователяНаСервере(Знач ЗначенияКлючаЗаписи, Знач УникальныйИдентификатор, + Знач ПрочитанныеСвойства, Знач РазблокироватьРанееЗаблокированное, Знач ЗначенияКлючейЗаписей, Знач НачалоДня) Если РазблокироватьРанееЗаблокированное Тогда РазблокироватьВсеЗаписиНаСервере(ЗначенияКлючейЗаписей, УникальныйИдентификатор); @@ -2558,7 +2485,9 @@ ЗаполнитьЗначенияСвойств(МенеджерЗаписи, ЗначенияКлючаЗаписи); МенеджерЗаписи.Прочитать(); Если МенеджерЗаписи.Выбран() Тогда - ПрочитанныеСвойства.ДатаЗапрета = МенеджерЗаписи.ДатаЗапрета; + ПрочитанныеСвойства.ДатаЗапрета = ДатыЗапретаИзмененияСлужебный.ДатаЗапретаПоОписанию( + МенеджерЗаписи.ОписаниеДатыЗапрета, МенеджерЗаписи.ДатаЗапрета, НачалоДня); + ПрочитанныеСвойства.Комментарий = МенеджерЗаписи.Комментарий; ЗаполнитьПоВнутреннемуОписаниюДатыЗапрета( ПрочитанныеСвойства, МенеджерЗаписи.ОписаниеДатыЗапрета); @@ -2633,7 +2562,7 @@ МенеджерЗаписи.Раздел = Раздел; МенеджерЗаписи.Объект = НовыйОбъект; МенеджерЗаписи.Пользователь = Пользователь; - МенеджерЗаписи.ДатаЗапрета = ТекущиеЗначенияСвойств.ДатаЗапрета; + МенеджерЗаписи.ДатаЗапрета = ВнутренняяДатаЗапрета(ТекущиеЗначенияСвойств); МенеджерЗаписи.ОписаниеДатыЗапрета = ВнутреннееОписаниеДатыЗапрета(ТекущиеЗначенияСвойств); МенеджерЗаписи.Комментарий = ТекущиеЗначенияСвойств.Комментарий; @@ -2672,7 +2601,7 @@ ТекущийРаздел = РазделПустаяСсылка; Иначе - ТекущийРаздел = ПервыйРаздел; + ТекущийРаздел = ЕдинственныйРаздел; КонецЕсли; КонецЕсли; @@ -2683,16 +2612,26 @@ &НаКлиенте Процедура ЗаписатьОбщуюДатуЗапретаСОписанием(); - // ЗаписатьОписаниеИДатуЗапрета + Данные = ТекущиеДанныеОбщейДатыЗапрета(); + ЗаписатьОписаниеИДатуЗапрета(Данные); + ЗаписьСуществует = Данные.ЗаписьСуществует; + +КонецПроцедуры + +&НаКлиенте +Функция ТекущиеДанныеОбщейДатыЗапрета() + Данные = Новый Структура; Данные.Вставить("Объект", РазделПустаяСсылка); + Данные.Вставить("Раздел", РазделПустаяСсылка); Данные.Вставить("ОписаниеДатыЗапрета", ОписаниеДатыЗапрета); Данные.Вставить("КоличествоДнейРазрешения", КоличествоДнейРазрешения); Данные.Вставить("ДатаЗапрета", ДатаЗапрета); + Данные.Вставить("ЗаписьСуществует", ЗаписьСуществует); - ЗаписатьОписаниеИДатуЗапрета(Данные); + Возврат Данные; -КонецПроцедуры +КонецФункции &НаКлиенте Процедура ЗаписатьОписаниеИДатуЗапрета(ТекущиеДанные = Неопределено) @@ -2701,21 +2640,24 @@ ТекущиеДанные = Элементы.ДатыЗапрета.ТекущиеДанные; КонецЕсли; - Если ДатаЗапретаУстановлена(ТекущиеДанные, ТекущийПользователь) Тогда + Если ДатаЗапретаУстановлена(ТекущиеДанные, ТекущийПользователь, Истина) Тогда // Запись описания или даты запрета. Комментарий = КомментарийТекущегоПользователя(ЭтотОбъект); ЗаписатьДатуЗапретаСОписанием( - ТекущийРаздел(ТекущиеДанные), + ТекущиеДанные.Раздел, ТекущиеДанные.Объект, ТекущийПользователь, - ТекущиеДанные.ДатаЗапрета, + ВнутренняяДатаЗапрета(ТекущиеДанные), ВнутреннееОписаниеДатыЗапрета(ТекущиеДанные), Комментарий); + ТекущиеДанные.ЗаписьСуществует = Истина; Иначе УдалитьЗаписьПользователя( - ТекущийРаздел(ТекущиеДанные), + ТекущиеДанные.Раздел, ТекущиеДанные.Объект, ТекущийПользователь); + + ТекущиеДанные.ЗаписьСуществует = Ложь; КонецЕсли; ОповеститьОбИзменении(Тип("РегистрСведенийКлючЗаписи.ДатыЗапретаИзменения")); @@ -2780,12 +2722,8 @@ БезДатыЗапрета = Истина; Если СпособУказанияДатыЗапрета = "ОбщаяДата" Тогда - Если НазначениеДляВсех(ТекущийПользователь) Тогда - БезДатыЗапрета = НЕ ЗначениеЗаполнено(ТекущиеДанные.ДатаЗапрета) - И ТекущиеДанные.ОписаниеДатыЗапрета = "ПроизвольнаяДата"; - Иначе - БезДатыЗапрета = ТекущиеДанные.БезДатыЗапрета; - КонецЕсли; + Данные = ТекущиеДанныеОбщейДатыЗапрета(); + БезДатыЗапрета = Не ДатаЗапретаУстановлена(Данные, ТекущийПользователь); Иначе Для каждого Строка Из ДатыЗапрета.ПолучитьЭлементы() Цикл БезДатыЗапретаРаздела = Истина; @@ -3003,18 +2941,22 @@ ТекущиеДанные = Элементы.ДатыЗапрета.ТекущиеДанные; // Выбор типа данных - Отбор = Новый Структура("Раздел", ТекущийРаздел(, Истина)); - ТекстПредупреждения = ТекстСообщенияВВыбранномРазделеДатыЗапретаДляОбъектовНеУстанавливаются(); - Если Отбор.Раздел = РазделПустаяСсылка Тогда - ПоказатьПредупреждение(, ТекстПредупреждения); + ТекущийРаздел = ТекущийРаздел(, Истина); + Если ТекущийРаздел = РазделПустаяСсылка Тогда + ПоказатьПредупреждение(, ТекстСообщенияВВыбранномРазделеДатыЗапретаДляОбъектовНеУстанавливаются()); Возврат; КонецЕсли; - СписокТипов = ТипыОбъектовРазделов.НайтиСтроки(Отбор)[0].ТипыОбъекта; - Если СписокТипов.Количество() = 0 Тогда - ПоказатьПредупреждение(, ТекстПредупреждения); + ТипыОбъектовРаздела = ТипыОбъектовРазделов.Получить(ТекущийРаздел); + Если ТипыОбъектовРаздела = Неопределено Или ТипыОбъектовРаздела.Количество() = 0 Тогда + ПоказатьПредупреждение(, ТекстСообщенияВВыбранномРазделеДатыЗапретаДляОбъектовНеУстанавливаются()); Возврат; КонецЕсли; + СписокТипов = Новый СписокЗначений; + Для Каждого СвойстваТипа Из ТипыОбъектовРаздела Цикл + СписокТипов.Добавить(СвойстваТипа.ПолноеИмя, СвойстваТипа.Представление); + КонецЦикла; + Если СписокТипов.Количество() = 1 Тогда ВыбратьПодобратьОбъектыЗавершение(СписокТипов[0], Подобрать); Иначе @@ -3054,10 +2996,11 @@ &НаКлиенте Функция ТекстВопросаОНесохраненныхДанных(БезПроверкиПользователей = Ложь) - ВсеПользователиВыбраны = Истина; - ВсеОбъектыВыбраны = Истина; - ВсеДатыЗапретаПоОбъектамЗаполнены = Истина; - ВсеДатыЗапретаПоРазделамЗаполнены = Истина; + ВсеПользователиВыбраны = Истина; + ВсеОбъектыВыбраны = Истина; + ВсеДатыЗапретаПоОбъектамЗаполнены = Истина; + ВсеДатыЗапретаПоРазделамЗаполнены = Истина; + ВсеПользователиСНастройкамиДатЗапрета = Истина; Если НЕ БезПроверкиПользователей И ПользователиДатЗапрета.НайтиСтроки(Новый Структура("Представление", "")).Количество() > 0 Тогда @@ -3068,6 +3011,9 @@ Если ПоказыватьРазделыТекущегоПользователя Тогда Для каждого ОписаниеРаздела Из ДатыЗапрета.ПолучитьЭлементы() Цикл Для каждого ОписаниеОбъекта Из ОписаниеРаздела.ПолучитьЭлементы() Цикл + Если ОписаниеОбъекта.ЗаписьСуществует Тогда + Продолжить; + КонецЕсли; Если ЗначениеЗаполнено(ОписаниеОбъекта.Представление)Тогда Если НЕ ДатаЗапретаУстановлена(ОписаниеОбъекта, ТекущийПользователь) Тогда ВсеДатыЗапретаПоОбъектамЗаполнены = Ложь; @@ -3086,6 +3032,9 @@ КонецЦикла; Иначе Для каждого ОписаниеОбъекта Из ДатыЗапрета.ПолучитьЭлементы() Цикл + Если ОписаниеОбъекта.ЗаписьСуществует Тогда + Продолжить; + КонецЕсли; Если ЗначениеЗаполнено(ОписаниеОбъекта.Представление) Тогда Если НЕ НазначениеДляВсех(ТекущийПользователь) И НЕ ДатаЗапретаУстановлена(ОписаниеОбъекта, ТекущийПользователь) Тогда @@ -3096,27 +3045,27 @@ ВсеОбъектыВыбраны = Ложь; КонецЕсли; КонецЦикла; - Если НЕ БезПроверкиПользователей - И ВсеДатыЗапретаПоРазделамЗаполнены - И ВсеДатыЗапретаПоОбъектамЗаполнены - И ВсеОбъектыВыбраны Тогда + КонецЕсли; + Если НЕ БезПроверкиПользователей + И ВсеДатыЗапретаПоРазделамЗаполнены + И ВсеДатыЗапретаПоОбъектамЗаполнены + И ВсеОбъектыВыбраны Тогда + + НайденныеСтроки = ПользователиДатЗапрета.НайтиСтроки( + Новый Структура("БезДатыЗапрета", Истина)); + + Для каждого Строка Из НайденныеСтроки Цикл - НайденныеСтроки = ПользователиДатЗапрета.НайтиСтроки( - Новый Структура("БезДатыЗапрета", Истина)); - - Для каждого Строка Из НайденныеСтроки Цикл + Если НазначениеДляВсех(Строка.Пользователь) + И ЗначениеЗаполнено(Строка.Представление) Тогда - Если НазначениеДляВсех(Строка.Пользователь) - И ЗначениеЗаполнено(Строка.Представление) Тогда - - Продолжить; - КонецЕсли; - - ВсеДатыЗапретаЗаполнены = Ложь; - Прервать; - КонецЦикла; + Продолжить; + КонецЕсли; - КонецЕсли; + ВсеПользователиСНастройкамиДатЗапрета = Ложь; + Прервать; + КонецЦикла; + КонецЕсли; КонецЕсли; КонецЕсли; @@ -3124,20 +3073,24 @@ // Предупреждение пользователя. ТекстВопроса = ""; Если НЕ ВсеПользователиВыбраны Тогда - ТекстВопроса = ТекстВопроса + - ТекстСообщенияНастройкиСНевыбраннымиПользователямиНеСохранены(ЭтотОбъект); + ТекстВопроса = ТекстВопроса + + ТекстСообщенияНастройкиСНевыбраннымиПользователямиНеСохранены(ЭтотОбъект); ИначеЕсли НЕ ВсеОбъектыВыбраны Тогда - ТекстВопроса = ТекстВопроса + Символы.ПС + - ТекстСообщенияНастройкиСНевыбраннымиОбъектамиНеСохранены(); + ТекстВопроса = ТекстВопроса + Символы.ПС + + ТекстСообщенияНастройкиСНевыбраннымиОбъектамиНеСохранены(); ИначеЕсли НЕ ВсеДатыЗапретаПоРазделамЗаполнены Тогда - ТекстВопроса = ТекстВопроса + Символы.ПС + - ТекстСообщенияНастройкиСНезаполненнымиДатамиЗапретаДляРазделовНеСохранены(); + ТекстВопроса = ТекстВопроса + Символы.ПС + + ТекстСообщенияНастройкиСНезаполненнымиДатамиЗапретаДляРазделовНеСохранены(); ИначеЕсли НЕ ВсеДатыЗапретаПоОбъектамЗаполнены Тогда - ТекстВопроса = ТекстВопроса + Символы.ПС + - ТекстСообщенияНастройкиСНезаполненнымиДатамиЗапретаДляОбъектовНеСохранены(); + ТекстВопроса = ТекстВопроса + Символы.ПС + + ТекстСообщенияНастройкиСНезаполненнымиДатамиЗапретаДляОбъектовНеСохранены(); + + ИначеЕсли НЕ ВсеПользователиСНастройкамиДатЗапрета Тогда + ТекстВопроса = ТекстВопроса + Символы.ПС + + ТекстСообщенияПользователиБезНастроекДатЗапретаНеСохранены(); КонецЕсли; Возврат СокрЛ(ТекстВопроса); @@ -3155,10 +3108,10 @@ СпособУказанияВБазеДанных = ""; ДополнительныеПараметры = Новый Структура; + ДополнительныеПараметры.Вставить("НачалоДня", НачалоДня); ДополнительныеПараметры.Вставить("ДатыЗапретаЗагрузкиДанных", Параметры.ДатыЗапретаЗагрузкиДанных); ДополнительныеПараметры.Вставить("Пользователь", ТекущийПользователь); ДополнительныеПараметры.Вставить("ЕдинственныйРаздел", ЕдинственныйРаздел); - ДополнительныеПараметры.Вставить("ПервыйРаздел", ПервыйРаздел); ДополнительныеПараметры.Вставить("ЗначениеДляВсехПользователей", ЗначениеДляВсехПользователей); ПолучитьТекущиеНастройки( @@ -3223,11 +3176,13 @@ СпособУказанияВБазеДанныхПредставление = ЭлементСписка.Представление; КонецЕсли; - ТекстУведомления = ТекстУведомления + ТекстСообщенияСпособУказанияНеИспользован( - СпособУказанияПредставление, - СпособУказанияВБазеДанныхПредставление, - ТекущийПользователь, - ЭтотОбъект); + Если СпособУказанияВБазеДанныхПредставление <> "" Тогда + ТекстУведомления = ТекстУведомления + ТекстСообщенияСпособУказанияНеИспользован( + СпособУказанияПредставление, + СпособУказанияВБазеДанныхПредставление, + ТекущийПользователь, + ЭтотОбъект); + КонецЕсли; КонецЕсли; Возврат ТекстУведомления; @@ -3245,8 +3200,8 @@ СпособУказания = ТекущийСпособУказанияДатыЗапрета( Параметры.Пользователь, Параметры.ЕдинственныйРаздел, - Параметры.ПервыйРаздел, - Параметры.ЗначениеДляВсехПользователей); + Параметры.ЗначениеДляВсехПользователей, + Параметры.НачалоДня); КонецПроцедуры @@ -3424,13 +3379,13 @@ КонецФункции &НаСервереБезКонтекста -Функция ТекущийСпособУказанияДатыЗапрета(Знач Пользователь, Знач ЕдинственныйРаздел, Знач ПервыйРаздел, Знач ЗначениеДляВсехПользователей, Данные = Неопределено) +Функция ТекущийСпособУказанияДатыЗапрета(Знач Пользователь, Знач ЕдинственныйРаздел, Знач ЗначениеДляВсехПользователей, Знач НачалоДня, Данные = Неопределено) НачатьТранзакцию(); Попытка Запрос = Новый Запрос; Запрос.УстановитьПараметр("Пользователь", Пользователь); - Запрос.УстановитьПараметр("ПервыйРаздел", ПервыйРаздел); + Запрос.УстановитьПараметр("ЕдинственныйРаздел", ЕдинственныйРаздел); Запрос.УстановитьПараметр("ПустаяДата", '00000000'); Запрос.УстановитьПараметр("ЗначениеДляВсехПользователей", ЗначениеДляВсехПользователей); Запрос.Текст = @@ -3456,7 +3411,6 @@ | И ДатыЗапретаИзменения.Раздел <> ЗНАЧЕНИЕ(ПланВидовХарактеристик.РазделыДатЗапретаИзменения.ПустаяСсылка) | И ДатыЗапретаИзменения.Объект <> ЗНАЧЕНИЕ(ПланВидовХарактеристик.РазделыДатЗапретаИзменения.ПустаяСсылка) | И ДатыЗапретаИзменения.Объект <> ДатыЗапретаИзменения.Раздел - | И ДатыЗапретаИзменения.Объект <> НЕОПРЕДЕЛЕНО |; | |//////////////////////////////////////////////////////////////////////////////// @@ -3468,7 +3422,7 @@ | НЕ(&Пользователь <> ДатыЗапретаИзменения.Пользователь | И &Пользователь <> ""*"") | И ДатыЗапретаИзменения.Раздел <> ЗНАЧЕНИЕ(ПланВидовХарактеристик.РазделыДатЗапретаИзменения.ПустаяСсылка) - | И ДатыЗапретаИзменения.Раздел <> &ПервыйРаздел + | И ДатыЗапретаИзменения.Раздел <> &ЕдинственныйРаздел | |ОБЪЕДИНИТЬ ВСЕ | @@ -3510,10 +3464,12 @@ Данные.Вставить("ОписаниеДатыЗапрета", "ПроизвольнаяДата"); Данные.Вставить("ДатаЗапрета", '00000000'); Данные.Вставить("КоличествоДнейРазрешения", 0); + Данные.Вставить("ЗаписьСуществует", ОбщаяДатаПрочитана); КонецЕсли; Если ОбщаяДатаПрочитана Тогда - Данные.ДатаЗапрета = Выборка.ДатаЗапрета; + Данные.ДатаЗапрета = ДатыЗапретаИзмененияСлужебный.ДатаЗапретаПоОписанию( + Выборка.ОписаниеДатыЗапрета, Выборка.ДатаЗапрета, НачалоДня); ЗаполнитьПоВнутреннемуОписаниюДатыЗапрета(Данные, Выборка.ОписаниеДатыЗапрета); КонецЕсли; @@ -3525,8 +3481,8 @@ // Есть по объектам, когда не пустой. Если РезультатыЗапроса[2].Пустой() - И ЕдинственныйРаздел Тогда - // Только по ПервыйРаздел (без дат по разделам), когда пустой. + И ЗначениеЗаполнено(ЕдинственныйРаздел) Тогда + // Только по ЕдинственныйРаздел (без дат по разделам), когда пустой. ТекущийСпособУказанияДатыЗапрета = "ПоОбъектам"; Иначе ТекущийСпособУказанияДатыЗапрета = "ПоРазделамИОбъектам"; @@ -3591,15 +3547,16 @@ КонецЕсли; Если СпособУказанияДатыЗапрета <> "ПоОбъектам" Тогда - Для каждого Строка Из ТипыОбъектовРазделов Цикл + Для Каждого КлючИЗначение Из ТипыОбъектовРазделов Цикл + Раздел = КлючИЗначение.Ключ; РазделНеНайден = Истина; - Для каждого ЭлементКоллекции Из КоллекцияДанных Цикл - Если ЭлементКоллекции.Раздел = Строка.Раздел Тогда + Для Каждого ЭлементКоллекции Из КоллекцияДанных Цикл + Если ЭлементКоллекции.Раздел = Раздел Тогда РазделНеНайден = Ложь; КонецЕсли; КонецЦикла; Если РазделНеНайден Тогда - РазделыДляОтметки.Добавить(Строка.Раздел); + РазделыДляОтметки.Добавить(Раздел); КонецЕсли; КонецЦикла; КонецЕсли; @@ -3738,7 +3695,7 @@ ПараметрыФормы.Вставить("РазделПредставление", Элементы.ДатыЗапрета.ТекущиеДанные.Представление); - РазделБезОбъектов = РазделыБезОбъектов.НайтиПоЗначению( + РазделБезОбъектов = РазделыБезОбъектов.Найти( Элементы.ДатыЗапрета.ТекущиеДанные.Раздел) <> Неопределено; Если НЕ РазделБезОбъектов @@ -3786,14 +3743,27 @@ КонецФункции +&НаКлиентеНаСервереБезКонтекста +Функция ВнутренняяДатаЗапрета(Данные) + + Если ЗначениеЗаполнено(Данные.ОписаниеДатыЗапрета) + И Данные.ОписаниеДатыЗапрета <> "ПроизвольнаяДата" Тогда + + Возврат '00020202'; // Сохраняемое значение относительной даты запрета. + КонецЕсли; + + Возврат Данные.ДатаЗапрета; + +КонецФункции + &НаКлиентеНаСервереБезКонтекста Функция ВнутреннееОписаниеДатыЗапрета(Знач Данные) ВнутреннееОписание = ""; Если Данные.ОписаниеДатыЗапрета <> "ПроизвольнаяДата" Тогда ВнутреннееОписание = СокрЛП( - Данные.ОписаниеДатыЗапрета + Символы.ПС + - Формат(Данные.КоличествоДнейРазрешения, "ЧГ=0")); + Данные.ОписаниеДатыЗапрета + Символы.ПС + + Формат(Данные.КоличествоДнейРазрешения, "ЧГ=0")); КонецЕсли; Возврат ВнутреннееОписание; @@ -3810,7 +3780,9 @@ Строка1 = СтрПолучитьСтроку(ВнутреннееОписание, 1); Строка2 = СтрПолучитьСтроку(ВнутреннееОписание, 2); НайденныйЭлемент = СписокОписанийДатыЗапрета().НайтиПоЗначению(Строка1); - Если НайденныйЭлемент <> Неопределено Тогда + Если НайденныйЭлемент = Неопределено Тогда + Данные.ДатаЗапрета = '00030303'; // Неизвестный формат. + Иначе Данные.ОписаниеДатыЗапрета = НайденныйЭлемент.Значение; Если ЗначениеЗаполнено(Строка2) Тогда ОписаниеТипаЧисло = Новый ОписаниеТипов("Число",,, @@ -3830,7 +3802,15 @@ КонецФункции &НаКлиентеНаСервереБезКонтекста -Функция ДатаЗапретаУстановлена(Данные, Пользователь) +Функция ДатаЗапретаУстановлена(Данные, Пользователь, ПередЗаписью = Ложь) + + Если Не ПередЗаписью Тогда + Возврат Данные.ЗаписьСуществует; + КонецЕсли; + + Если Данные.Объект <> Данные.Раздел И Не ЗначениеЗаполнено(Данные.Объект) Тогда + Возврат Ложь; + КонецЕсли; Если НазначениеДляВсех(Пользователь) Тогда ДатаЗапретаУстановлена = @@ -3865,7 +3845,7 @@ Раздел, ТекущийОбъект, Пользователь, - '00000000', + '00010101', "", Комментарий); КонецЦикла; @@ -3983,7 +3963,7 @@ Контекст.Элементы.РазрешитьИзменениеДанныхДоДатыЗапрета.Доступность = Истина; КонецЕсли; РасчетныеДатыЗапрета = РасчетДатыЗапрета( - Контекст.ОписаниеДатыЗапрета, Контекст.ТекущаяДатаНаСервере); + Контекст.ОписаниеДатыЗапрета, Контекст.НачалоДня); Если РассчитатьДатуЗапрета Тогда Контекст.ДатаЗапрета = РасчетныеДатыЗапрета.Текущая; @@ -3999,59 +3979,62 @@ СрокРазрешения = РасчетныеДатыЗапрета.Текущая + Контекст.КоличествоДнейРазрешения * Сутки; - Если Контекст.ТекущаяДатаНаСервере > СрокРазрешения Тогда - ТекстНадписи = Символы.ПС + - НСтр("ru = 'Срок возможности изменения данных с %3 по %4 истек %2'"); + Если Контекст.НачалоДня > СрокРазрешения Тогда + ШаблонНадписи = НСтр("ru = 'Срок возможности изменения данных с %2 по %3 истек %1'"); Иначе Если РассчитатьДатуЗапрета Тогда Контекст.ДатаЗапрета = РасчетныеДатыЗапрета.Предыдущая; КонецЕсли; - ТекстНадписи = Символы.ПС + - НСтр("ru = 'По %2 возможно изменение данных с %3 по %4'") + Символы.ПС + - НСтр("ru = 'После %2 будет запрещено изменение данных по %4'") + Символы.ПС; + ШаблонНадписи = + НСтр("ru = 'По %1 возможно изменение данных с %2 по %3 + |После %1 будет запрещено изменение данных по %3'") + + Символы.ПС; КонецЕсли; - Иначе - Контекст.Элементы.СвойствоКоличествоДнейРазрешенияИзменения.ТекущаяСтраница = Контекст.Элементы.ИзменениеДанныхДоДатыЗапретаНеРазрешено; - Контекст.КоличествоДнейРазрешения = 0; - КонецЕсли; - Контекст.Элементы.ПояснениеНепроизвольнойДаты.Заголовок = - СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Запрещено изменение данных по %1'") + ТекстНадписи, - Формат(Контекст.ДатаЗапрета, "ДЛФ=Д"), + ТекстНадписи = Символы.ПС + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонНадписи, Формат(СрокРазрешения, "ДЛФ=Д"), Формат(РасчетныеДатыЗапрета.Предыдущая + Сутки, "ДЛФ=Д"), Формат(РасчетныеДатыЗапрета.Текущая, "ДЛФ=Д")); + Иначе + Контекст.Элементы.СвойствоКоличествоДнейРазрешенияИзменения.ТекущаяСтраница = + Контекст.Элементы.ИзменениеДанныхДоДатыЗапретаНеРазрешено; + + Контекст.КоличествоДнейРазрешения = 0; + КонецЕсли; + Контекст.Элементы.ПояснениеНепроизвольнойДаты.Заголовок = + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Запрещено изменение данных по %1'"), + Формат(Контекст.ДатаЗапрета, "ДЛФ=Д")) + + ТекстНадписи; КонецЕсли; КонецПроцедуры &НаКлиентеНаСервереБезКонтекста -Функция РасчетДатыЗапрета(Знач ВариантДатыЗапрета, Знач ТекущаяДатаНаСервере) +Функция РасчетДатыЗапрета(Знач ВариантДатыЗапрета, Знач НачалоДня) Сутки = 60*60*24; - ТекущаяДатаЗапрета = '00000000'; - ПредыдущаяДатаЗапрета = '00000000'; + ТекущаяДатаЗапрета = '00030303'; // Неизвестный формат. + ПредыдущаяДатаЗапрета = '00030303'; // Неизвестный формат. Если ВариантДатыЗапрета = "КонецПрошлогоГода" Тогда - ТекущаяДатаЗапрета = НачалоГода(ТекущаяДатаНаСервере) - Сутки; - ПредыдущаяДатаЗапрета = НачалоГода(ТекущаяДатаЗапрета) - Сутки; + ТекущаяДатаЗапрета = НачалоГода(НачалоДня) - Сутки; + ПредыдущаяДатаЗапрета = НачалоГода(ТекущаяДатаЗапрета) - Сутки; ИначеЕсли ВариантДатыЗапрета = "КонецПрошлогоКвартала" Тогда - ТекущаяДатаЗапрета = НачалоКвартала(ТекущаяДатаНаСервере) - Сутки; - ПредыдущаяДатаЗапрета = НачалоКвартала(ТекущаяДатаЗапрета) - Сутки; + ТекущаяДатаЗапрета = НачалоКвартала(НачалоДня) - Сутки; + ПредыдущаяДатаЗапрета = НачалоКвартала(ТекущаяДатаЗапрета) - Сутки; ИначеЕсли ВариантДатыЗапрета = "КонецПрошлогоМесяца" Тогда - ТекущаяДатаЗапрета = НачалоМесяца(ТекущаяДатаНаСервере) - Сутки; - ПредыдущаяДатаЗапрета = НачалоМесяца(ТекущаяДатаЗапрета) - Сутки; + ТекущаяДатаЗапрета = НачалоМесяца(НачалоДня) - Сутки; + ПредыдущаяДатаЗапрета = НачалоМесяца(ТекущаяДатаЗапрета) - Сутки; ИначеЕсли ВариантДатыЗапрета = "КонецПрошлойНедели" Тогда - ТекущаяДатаЗапрета = НачалоНедели(ТекущаяДатаНаСервере) - Сутки; - ПредыдущаяДатаЗапрета = НачалоНедели(ТекущаяДатаЗапрета) - Сутки; + ТекущаяДатаЗапрета = НачалоНедели(НачалоДня) - Сутки; + ПредыдущаяДатаЗапрета = НачалоНедели(ТекущаяДатаЗапрета) - Сутки; ИначеЕсли ВариантДатыЗапрета = "ПредыдущийДень" Тогда - ТекущаяДатаЗапрета = НачалоДня(ТекущаяДатаНаСервере) - Сутки; - ПредыдущаяДатаЗапрета = НачалоДня(ТекущаяДатаЗапрета) - Сутки; + ТекущаяДатаЗапрета = НачалоДня(НачалоДня) - Сутки; + ПредыдущаяДатаЗапрета = НачалоДня(ТекущаяДатаЗапрета) - Сутки; КонецЕсли; Возврат Новый Структура("Текущая, Предыдущая", ТекущаяДатаЗапрета, ПредыдущаяДатаЗапрета); @@ -4121,11 +4104,9 @@ Для каждого ЗначениеСписка Из Контекст.СписокТиповПользователей Цикл Если ТипЗнч(ЗначениеСписка.Значение) = ТипЗнч(Пользователь) Тогда Если ЗначениеЗаполнено(Пользователь) Тогда - Возврат ЗначениеСписка.Представление + ": " + - Строка(Пользователь); + Возврат ЗначениеСписка.Представление + ": " + Строка(Пользователь); Иначе - Возврат ЗначениеСписка.Представление + ": " + - НСтр("ru = '<Все информационные базы>'"); + Возврат ЗначениеСписка.Представление + ": " + НСтр("ru = '<Все информационные базы>'"); КонецЕсли; КонецЕсли; КонецЦикла; @@ -4153,20 +4134,6 @@ КонецФункции -&НаКлиентеНаСервереБезКонтекста -Функция ТекстЗаголовкаКомандыОтчетПоОбъектам() - - Возврат НСтр("ru = 'Отчет по объектам'"); - -КонецФункции - -&НаКлиентеНаСервереБезКонтекста -Функция ТекстЗаголовкаКомандыОтчетПоРазделам() - - Возврат НСтр("ru = 'Отчет по разделам'"); - -КонецФункции - &НаКлиентеНаСервереБезКонтекста Функция ТекстВопросаЗакрытьФорму() @@ -4174,13 +4141,6 @@ КонецФункции -&НаКлиентеНаСервереБезКонтекста -Функция ТекстВопросаПересчитатьДатыЗапрета() - - Возврат НСтр("ru = 'Очистить незаполненные строки и пересчитать относительные даты запрета?'"); - -КонецФункции - &НаКлиентеНаСервереБезКонтекста Функция ТекстВопросаОбновитьДанные() @@ -4191,8 +4151,7 @@ &НаКлиенте Функция ТекстВопросаУдалитьВсеДатыЗапретаКромеДатДляВсехПользователей() - Возврат СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Удалить все даты запрета, кроме установленных %1?'"), + Возврат СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Удалить все даты запрета, кроме установленных %1?'"), ЗначениеДляВсехПользователей); КонецФункции @@ -4207,8 +4166,7 @@ &НаКлиенте Функция ТекстСообщенияЗначениеДляВсехПользователейНеИзменяется() - Возврат СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Значение %1 не изменяется.'"), + Возврат СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Значение %1 не изменяется.'"), ТекстПредставленияДляВсехПользователей(ЭтотОбъект)); КонецФункции @@ -4216,8 +4174,7 @@ &НаКлиенте Функция ТекстСообщенияКомментарийДляВсехПользователейНеИзменяется() - Возврат СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Комментарий %1 не изменяется.'"), + Возврат СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Комментарий %1 не изменяется.'"), ТекстПредставленияДляВсехПользователей(ЭтотОбъект)); КонецФункции @@ -4280,8 +4237,8 @@ &НаКлиенте Функция ТекстВопросаУдалитьДатыЗапретаДляВсехПользователей() - Возврат СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Удалить даты запрета %1?'"), НРег(ЗначениеДляВсехПользователей)); + Возврат СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Удалить даты запрета %1?'"), + НРег(ЗначениеДляВсехПользователей)); КонецФункции @@ -4323,8 +4280,8 @@ &НаКлиенте Функция ТекстСообщенияДляВсехПользователейДатыЗапретаНеУстановлены() - Возврат СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = '%1 даты запрета не установлены.'"), ЗначениеДляВсехПользователей); + Возврат СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = '%1 даты запрета не установлены.'"), + ЗначениеДляВсехПользователей); КонецФункции @@ -4441,8 +4398,8 @@ &НаКлиенте Функция ТекстСообщенияДляВсехПользователейРазделыВсегдаПоказываются() - Возврат СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = '%1 разделы всегда показываются.'"), ЗначениеДляВсехПользователей); + Возврат СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = '%1 разделы всегда показываются.'"), + ЗначениеДляВсехПользователей); КонецФункции @@ -4456,8 +4413,8 @@ &НаКлиенте Функция ТекстСообщенияДляВсехПользователейОбщаяДатаВсегдаПоказывается() - Возврат СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = '%1 <Общая дата> всегда показывается.'"), ЗначениеДляВсехПользователей); + Возврат СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = '%1 <Общая дата> всегда показывается.'"), + ЗначениеДляВсехПользователей); КонецФункции @@ -4514,6 +4471,13 @@ КонецФункции +&НаКлиентеНаСервереБезКонтекста +Функция ТекстСообщенияПользователиБезНастроекДатЗапретаНеСохранены() + + Возврат НСтр("ru = 'Пользователи без настроек дат запрета не сохранены.'"); + +КонецФункции + &НаКлиентеНаСервереБезКонтекста Функция ТекстСообщенияНастройкиСНезаполненнымиДатамиЗапретаДляРазделовНеСохранены() diff --git a/SSL/src/InformationRegisters/ДатыЗапретаИзменения/Forms/РедактированиеДатыЗапрета/Form.form b/SSL/src/InformationRegisters/ДатыЗапретаИзменения/Forms/РедактированиеДатыЗапрета/Form.form index 193290550..00ecd1f4e 100644 --- a/SSL/src/InformationRegisters/ДатыЗапретаИзменения/Forms/РедактированиеДатыЗапрета/Form.form +++ b/SSL/src/InformationRegisters/ДатыЗапретаИзменения/Forms/РедактированиеДатыЗапрета/Form.form @@ -954,7 +954,6 @@ true true true - UseIfNecessary auto true @@ -1141,7 +1140,7 @@ ОК - Auto + DontUse Auto diff --git a/SSL/src/InformationRegisters/ДатыЗапретаИзменения/Forms/РедактированиеДатыЗапрета/Module.bsl b/SSL/src/InformationRegisters/ДатыЗапретаИзменения/Forms/РедактированиеДатыЗапрета/Module.bsl index 797705165..3a9091d38 100644 --- a/SSL/src/InformationRegisters/ДатыЗапретаИзменения/Forms/РедактированиеДатыЗапрета/Module.bsl +++ b/SSL/src/InformationRegisters/ДатыЗапретаИзменения/Forms/РедактированиеДатыЗапрета/Module.bsl @@ -170,22 +170,23 @@ Контекст.Элементы.СвойствоКоличествоДнейРазрешенияИзменения.ТекущаяСтраница = Контекст.Элементы.ИзменениеДанныхДоДатыЗапретаРазрешено; - СрокРазрешения = - РасчетныеДатыЗапрета.Текущая + Контекст.КоличествоДнейРазрешения * Сутки; + СрокРазрешения = РасчетныеДатыЗапрета.Текущая + Контекст.КоличествоДнейРазрешения * Сутки; Если Контекст.ТекущаяДатаНаСервере > СрокРазрешения Тогда - ТекстНадписи = Символы.ПС - + НСтр("ru = 'Срок возможности изменения данных с %3 по %4 истек %2'"); + ШаблонНадписи = НСтр("ru = 'Срок возможности изменения данных с %2 по %3 истек %1'"); Иначе Если РассчитатьДатуЗапрета Тогда Контекст.ДатаЗапрета = РасчетныеДатыЗапрета.Предыдущая; КонецЕсли; - ТекстНадписи = Символы.ПС - + НСтр("ru = 'По %2 возможно изменение данных с %3 по %4'") - + Символы.ПС - + НСтр("ru = 'После %2 будет запрещено изменение данных по %4'") - + Символы.ПС; + ШаблонНадписи = + НСтр("ru = 'По %1 возможно изменение данных с %2 по %3 + |После %1 будет запрещено изменение данных по %3'") + + Символы.ПС; КонецЕсли; + ТекстНадписи = Символы.ПС + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонНадписи, + Формат(СрокРазрешения, "ДЛФ=Д"), + Формат(РасчетныеДатыЗапрета.Предыдущая + Сутки, "ДЛФ=Д"), + Формат(РасчетныеДатыЗапрета.Текущая, "ДЛФ=Д")); Иначе Контекст.Элементы.СвойствоКоличествоДнейРазрешенияИзменения.ТекущаяСтраница = Контекст.Элементы.ИзменениеДанныхДоДатыЗапретаНеРазрешено; @@ -193,12 +194,9 @@ Контекст.КоличествоДнейРазрешения = 0; КонецЕсли; Контекст.Элементы.ПояснениеНепроизвольнойДаты.Заголовок = - СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Запрещено изменение данных по %1'") + ТекстНадписи, - Формат(Контекст.ДатаЗапрета, "ДЛФ=Д"), - Формат(СрокРазрешения, "ДЛФ=Д"), - Формат(РасчетныеДатыЗапрета.Предыдущая + Сутки, "ДЛФ=Д"), - Формат(РасчетныеДатыЗапрета.Текущая, "ДЛФ=Д")); + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Запрещено изменение данных по %1'"), + Формат(Контекст.ДатаЗапрета, "ДЛФ=Д")) + + ТекстНадписи; КонецЕсли; КонецПроцедуры diff --git a/SSL/src/InformationRegisters/ДатыЗапретаИзменения/Forms/ФормаЗаписи/Form.form b/SSL/src/InformationRegisters/ДатыЗапретаИзменения/Forms/ФормаЗаписи/Form.form index 3b22e8615..a7db2df53 100644 --- a/SSL/src/InformationRegisters/ДатыЗапретаИзменения/Forms/ФормаЗаписи/Form.form +++ b/SSL/src/InformationRegisters/ДатыЗапретаИзменения/Forms/ФормаЗаписи/Form.form @@ -155,7 +155,6 @@ true InputField - true Enter true Left @@ -201,7 +200,6 @@ true InputField - true Enter true Left @@ -307,7 +305,6 @@ true true true - UseIfNecessary auto true diff --git a/SSL/src/InformationRegisters/ДатыЗапретаИзменения/Forms/ФормаСписка/Form.form b/SSL/src/InformationRegisters/ДатыЗапретаИзменения/Forms/ФормаСписка/Form.form index 371c4a264..204f38941 100644 --- a/SSL/src/InformationRegisters/ДатыЗапретаИзменения/Forms/ФормаСписка/Form.form +++ b/SSL/src/InformationRegisters/ДатыЗапретаИзменения/Forms/ФормаСписка/Form.form @@ -513,7 +513,6 @@ true true true - UseIfNecessary auto true @@ -528,9 +527,6 @@ true - - Список.ПользовательПредставление - Список.ДатаЗапрета @@ -584,7 +580,7 @@ ДатыЗапретаИзмененияДанных - Auto + DontUse Auto @@ -606,7 +602,7 @@ ДатыЗапретаЗагрузкиДанных - Auto + DontUse Auto diff --git a/SSL/src/InformationRegisters/ДатыЗапретаИзменения/Forms/ФормаСписка/Module.bsl b/SSL/src/InformationRegisters/ДатыЗапретаИзменения/Forms/ФормаСписка/Module.bsl index 96ea733de..33d4e88f0 100644 --- a/SSL/src/InformationRegisters/ДатыЗапретаИзменения/Forms/ФормаСписка/Module.bsl +++ b/SSL/src/InformationRegisters/ДатыЗапретаИзменения/Forms/ФормаСписка/Module.bsl @@ -10,8 +10,8 @@ КонецЕсли; // Настройка команды - СвойстваРазделов = ДатыЗапретаИзмененияСлужебныйПовтИсп.СвойстваРазделов(); - Элементы.ФормаДатыЗапретаЗагрузкиДанных.Видимость = СвойстваРазделов.ИспользоватьДатыЗапретаЗагрузкиДанных; + СвойстваРазделов = ДатыЗапретаИзмененияСлужебный.СвойстваРазделов(); + Элементы.ФормаДатыЗапретаЗагрузкиДанных.Видимость = СвойстваРазделов.ДатыЗапретаЗагрузкиВнедрены; // Настройка порядка Порядок = Список.КомпоновщикНастроек.Настройки.Порядок; diff --git a/SSL/src/InformationRegisters/ДатыЗапретаИзменения/Help/ru.html b/SSL/src/InformationRegisters/ДатыЗапретаИзменения/Help/ru.html index 19450b1ae..09e1506a0 100644 --- a/SSL/src/InformationRegisters/ДатыЗапретаИзменения/Help/ru.html +++ b/SSL/src/InformationRegisters/ДатыЗапретаИзменения/Help/ru.html @@ -46,10 +46,7 @@
      • Предыдущий день.
    • Для относительных дат (кроме значения Предыдущий день) можно задать количество дней «отсрочки» до установки даты запрета, в течение которых изменение данных все еще будет разрешено.
      • -
        Для этого необходимо включить флажок Разрешить изменение данных до даты запрета. Затем задайте количество дней "отсрочки", например, в течение 10 дней после даты запрета.
    • -
      Если установлена относительная дата, то для того, чтобы дата запрета изменения в будущем изменялась по заданным правилам автоматически, в программе используется регламентное задание "Пересчет текущих значений относительных дат запрета изменения".
      -
    • -
      Если по каким-либо причинам использование регламентных заданий невозможно (например, в файловом варианте работы программы и в других случаях может потребоваться выполнить пересчет текущих значений относительных дат запрета вручную), то перерасчет текущих значений относительных дат запрета можно выполнять с помощью команды Еще - Пересчитать даты. При этом команду необходимо выполнять периодически в соответствии с установленной относительной датой. Например, если установлено значение Предыдущий день, то команду необходимо выполнять ежедневно; если установлено значение Конец прошлого месяца, то команду необходимо выполнять ежемесячно.
    • Отчеты по датам запрета

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

      Отчеты по датам запрета

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

      • по разделам/объектам: выберите отчет Даты запрета по разделам и объектам для пользователей (Даты запрета по разделам и объектам для информационных баз);
      • по пользователям (по информационным базам): выберите отчет Даты запрета по пользователям (Даты запрета по информационным базам).

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

      diff --git a/SSL/src/InformationRegisters/ДатыЗапретаИзменения/RecordSetModule.bsl b/SSL/src/InformationRegisters/ДатыЗапретаИзменения/RecordSetModule.bsl index e69de29bb..9b739e58d 100644 --- a/SSL/src/InformationRegisters/ДатыЗапретаИзменения/RecordSetModule.bsl +++ b/SSL/src/InformationRegisters/ДатыЗапретаИзменения/RecordSetModule.bsl @@ -0,0 +1,23 @@ + +#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда + +#Область ОбработчикиСобытий + +Процедура ПриЗаписи(Отказ, Замещение) + + Если ОбменДанными.Загрузка Тогда + Если Не ДополнительныеСвойства.Свойство("ПропуститьОбновлениеВерсииДатЗапретаИзменения") Тогда + ДатыЗапретаИзмененияСлужебный.ОбновитьВерсиюДатЗапретаИзмененияПриЗагрузкеДанных(ЭтотОбъект); + КонецЕсли; + Возврат; + КонецЕсли; + + Если Не ДополнительныеСвойства.Свойство("ПропуститьОбновлениеВерсииДатЗапретаИзменения") Тогда + ДатыЗапретаИзмененияСлужебный.ОбновитьВерсиюДатЗапретаИзменения(); + КонецЕсли; + +КонецПроцедуры + +#КонецОбласти + +#КонецЕсли diff --git a/SSL/src/InformationRegisters/ДатыЗапретаИзменения/ДатыЗапретаИзменения.mdo b/SSL/src/InformationRegisters/ДатыЗапретаИзменения/ДатыЗапретаИзменения.mdo index ed88219c3..8464d347f 100644 --- a/SSL/src/InformationRegisters/ДатыЗапретаИзменения/ДатыЗапретаИзменения.mdo +++ b/SSL/src/InformationRegisters/ДатыЗапретаИзменения/ДатыЗапретаИзменения.mdo @@ -176,15 +176,11 @@ Пользователь - CatalogRef.ВнешниеПользователи - CatalogRef.ГруппыВнешнихПользователей - CatalogRef.ГруппыПользователей - CatalogRef.Пользователи - EnumRef.ВидыНазначенияДатЗапрета + DefinedType.АдресатЗапретаИзменения ru - Адресат настройки запрета: + Адресат запрета изменения: - пользователь, - группа пользователей, - внешний пользователь, diff --git a/SSL/src/InformationRegisters/ДополнительныеАдресныеСведения/ДополнительныеАдресныеСведения.mdo b/SSL/src/InformationRegisters/ДополнительныеАдресныеСведения/ДополнительныеАдресныеСведения.mdo index 4b4b90672..c2f878c69 100644 --- a/SSL/src/InformationRegisters/ДополнительныеАдресныеСведения/ДополнительныеАдресныеСведения.mdo +++ b/SSL/src/InformationRegisters/ДополнительныеАдресныеСведения/ДополнительныеАдресныеСведения.mdo @@ -76,7 +76,7 @@ Number - 8 + 11 diff --git a/SSL/src/InformationRegisters/ДополнительныеСведения/Help/ru.html b/SSL/src/InformationRegisters/ДополнительныеСведения/Help/ru.html index eb66df87d..41afa8d0a 100644 --- a/SSL/src/InformationRegisters/ДополнительныеСведения/Help/ru.html +++ b/SSL/src/InformationRegisters/ДополнительныеСведения/Help/ru.html @@ -1,3 +1,5 @@

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

      -

      См. также: Дополнительные свойства, Наборы свойств.

      \ No newline at end of file +

      См. также:

      + \ No newline at end of file diff --git a/SSL/src/InformationRegisters/ЗаблокированныеДляПолученияУчетныеЗаписи/ЗаблокированныеДляПолученияУчетныеЗаписи.mdo b/SSL/src/InformationRegisters/ЗаблокированныеДляПолученияУчетныеЗаписи/ЗаблокированныеДляПолученияУчетныеЗаписи.mdo new file mode 100644 index 000000000..61ec735f9 --- /dev/null +++ b/SSL/src/InformationRegisters/ЗаблокированныеДляПолученияУчетныеЗаписи/ЗаблокированныеДляПолученияУчетныеЗаписи.mdo @@ -0,0 +1,84 @@ + + + + + + + + + + + + ЗаблокированныеДляПолученияУчетныеЗаписи + + ru + Заблокированные для получения учетные записи + + InDialog + + Use + Active + + Use + + + + + Use + LineNumber + + Use + + + + + Use + Recorder + + Use + + + + + Use + Period + + ShowError + Use + + + + Managed + + ДатаБлокировки + + ru + Дата блокировки + + + Date + + + + + Use + Use + + + + УчетнаяЗапись + + ru + Учетная запись + + + CatalogRef.УчетныеЗаписиЭлектроннойПочты + + + + Use + Use + + true + + diff --git a/SSL/src/InformationRegisters/ЗависимостиПравДоступа/Forms/ФормаЗаписи/Form.form b/SSL/src/InformationRegisters/ЗависимостиПравДоступа/Forms/ФормаЗаписи/Form.form index cf3133e82..f612eff25 100644 --- a/SSL/src/InformationRegisters/ЗависимостиПравДоступа/Forms/ФормаЗаписи/Form.form +++ b/SSL/src/InformationRegisters/ЗависимостиПравДоступа/Forms/ФормаЗаписи/Form.form @@ -168,7 +168,6 @@ true true true - UseIfNecessary auto true @@ -222,7 +221,7 @@ ВключитьВозможностьРедактирования - Auto + DontUse Auto diff --git a/SSL/src/InformationRegisters/ЗависимостиПравДоступа/Forms/ФормаСписка/Form.form b/SSL/src/InformationRegisters/ЗависимостиПравДоступа/Forms/ФормаСписка/Form.form index 5d4763bfc..dbfd55847 100644 --- a/SSL/src/InformationRegisters/ЗависимостиПравДоступа/Forms/ФормаСписка/Form.form +++ b/SSL/src/InformationRegisters/ЗависимостиПравДоступа/Forms/ФормаСписка/Form.form @@ -401,7 +401,6 @@ true true true - UseIfNecessary auto true @@ -454,7 +453,7 @@ ВключитьВозможностьРедактирования - Auto + DontUse Auto @@ -476,7 +475,7 @@ ОбновитьДанныеРегистра - Auto + DontUse Auto diff --git a/SSL/src/InformationRegisters/ЗамерыВремени/Help/ru.html b/SSL/src/InformationRegisters/ЗамерыВремени/Help/ru.html index 112916302..df7ea2a2f 100644 --- a/SSL/src/InformationRegisters/ЗамерыВремени/Help/ru.html +++ b/SSL/src/InformationRegisters/ЗамерыВремени/Help/ru.html @@ -6,13 +6,10 @@
    • Дата начала замера - дата и время начала замера;
    • Номер сеанса;
    • Время выполнения в секундах; +
    • Комментарий - дополнительная информация о замере;
    • Дата записи - дата и время записи;
    • Дата окончания - дата и время окончания замера;
    • Пользователь - полное имя пользователя; -
    • Дата записи локальная .
    • Нажмите Еще - Изменить форму, для того чтобы добавить дополнительные поля, например:

      -
      • Имя - имя ключевой операции в программе; -
      • Приоритет - выводится из списка ключевых операций; -
      • Минимально допустимый уровень - выводится из списка ключевых операций;  -
      • Целевое время - выводится из списка ключевых операций.

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

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

      См. также:

      \ No newline at end of file diff --git a/SSL/src/InformationRegisters/ЗамерыВремени/ManagerModule.bsl b/SSL/src/InformationRegisters/ЗамерыВремени/ManagerModule.bsl new file mode 100644 index 000000000..eb11a4e58 --- /dev/null +++ b/SSL/src/InformationRegisters/ЗамерыВремени/ManagerModule.bsl @@ -0,0 +1,188 @@ +#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда + +#Область СлужебныеПроцедурыИФункции + +Функция ПолучитьПоследниеКомментарии() Экспорт + Запрос = Новый Запрос; + ТекстЗапроса = " + |ВЫБРАТЬ + | Комментарий КАК Комментарий, + | КОЛИЧЕСТВО(Комментарий) КАК ЧастотаИспользования + |ИЗ + | ( + | ВЫБРАТЬ ПЕРВЫЕ 1000 + | ЗамерыВремени.Комментарий КАК Комментарий + | ИЗ + | РегистрСведений.ЗамерыВремени КАК ЗамерыВремени + | УПОРЯДОЧИТЬ ПО + | ЗамерыВремени.ДатаЗаписи УБЫВ + | ) КАК Выборка + |СГРУППИРОВАТЬ ПО + | Комментарий + |УПОРЯДОЧИТЬ ПО + | КОЛИЧЕСТВО(Комментарий) УБЫВ + |"; + + Запрос.Текст = ТекстЗапроса; + РезультатЗапроса = Запрос.Выполнить(); + + Комментарии = Новый Массив(); + + Количество = 0; + ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать(); + Пока ВыборкаДетальныеЗаписи.Следующий() Цикл + Комментарии.Добавить(ВыборкаДетальныеЗаписи.Комментарий); + Количество = Количество + 1; + + Если Количество = 5 Тогда + Прервать; + КонецЕсли; + КонецЦикла; + + Возврат Комментарии; +КонецФункции + +Функция ПолучитьТопAPDEX(ДатаНачала, ДатаОкончания, ПериодАгрегации, Количество) Экспорт + Запрос = Новый Запрос; + + Если Количество > 0 Тогда + Запрос.Текст = " + |ВЫБРАТЬ + | КлючевыеОперации.Ссылка КАК КлючеваяОперацияСсылка, + | КлючевыеОперации.ЦелевоеВремя КАК ЦелевоеВремя, + | КОЛИЧЕСТВО(*) КАК КоличествоЗамеров, + | СУММА(ВЫБОР + | КОГДА Замеры.ВремяВыполнения <= КлючевыеОперации.ЦелевоеВремя ТОГДА 1 + | ИНАЧЕ 0 + | КОНЕЦ) КАК N_T, + | СУММА(ВЫБОР + | КОГДА Замеры.ВремяВыполнения > КлючевыеОперации.ЦелевоеВремя И Замеры.ВремяВыполнения <= 4 * КлючевыеОперации.ЦелевоеВремя ТОГДА 1 + | ИНАЧЕ 0 + | КОНЕЦ) КАК N_T_4T, + | СУММА(ВЫБОР + | КОГДА Замеры.ВремяВыполнения > 4 * КлючевыеОперации.ЦелевоеВремя ТОГДА 1 + | ИНАЧЕ 0 + | КОНЕЦ) КАК N_4T + |ПОМЕСТИТЬ + | Выборка + |ИЗ + | РегистрСведений.ЗамерыВремени КАК Замеры + |ВНУТРЕННЕЕ СОЕДИНЕНИЕ + | Справочник.КлючевыеОперации КАК КлючевыеОперации + |ПО + | Замеры.КлючеваяОперация = КлючевыеОперации.Ссылка + |ГДЕ + | Замеры.ДатаНачалаЗамера МЕЖДУ &ДатаНачала И &ДатаОкончания + |СГРУППИРОВАТЬ ПО + | КлючевыеОперации.Ссылка, + | КлючевыеОперации.ЦелевоеВремя + |; + |ВЫБРАТЬ + | СУММА(КоличествоЗамеров) КАК КоличествоЗамеров + |ПОМЕСТИТЬ + | ВсегоЗамеров + |ИЗ + | Выборка + |; + |ВЫБРАТЬ ПЕРВЫЕ %Количество + | Выборка.КлючеваяОперацияСсылка, + | Выборка.ЦелевоеВремя, + | Выборка.КоличествоЗамеров, + | ВЫРАЗИТЬ((Выборка.N_T + Выборка.N_T_4T/2)/Выборка.КоличествоЗамеров КАК ЧИСЛО(15,3)) КАК APDEX, + | ВЫРАЗИТЬ((Выборка.N_4T + Выборка.N_T_4T/2)/ВсегоЗамеров.КоличествоЗамеров КАК ЧИСЛО(15,3)) КАК APDEXВлияние + |ПОМЕСТИТЬ + | ВыборкаХудшиеОперации + |ИЗ + | Выборка + |ЛЕВОЕ СОЕДИНЕНИЕ + | ВсегоЗамеров + |ПО + | НЕ ВсегоЗамеров.КоличествоЗамеров IS NULL + |УПОРЯДОЧИТЬ ПО + | (Выборка.N_4T + Выборка.N_T_4T/2)/ВсегоЗамеров.КоличествоЗамеров УБЫВ + |; + |ВЫБРАТЬ + | ДОБАВИТЬКДАТЕ(ДАТАВРЕМЯ(2015,1,1),СЕКУНДА, ВЫРАЗИТЬ((РАЗНОСТЬДАТ(ДАТАВРЕМЯ(2015,1,1), Замеры.ДатаНачалаЗамера, СЕКУНДА) + 63555667200)/&ПериодАгрегации - 0.5 КАК ЧИСЛО(11,0)) * &ПериодАгрегации - 63555667200) КАК Период, + | СпрКлючевыеОперации.Наименование КАК КлючеваяОперация, + | КлючевыеОперации.ЦелевоеВремя КАК ЦелевоеВремя, + | СУММА(ВЫБОР + | КОГДА Замеры.ВремяВыполнения <= КлючевыеОперации.ЦелевоеВремя ТОГДА 1 + | ИНАЧЕ 0 + | КОНЕЦ) КАК N_T, + | СУММА(ВЫБОР + | КОГДА Замеры.ВремяВыполнения > КлючевыеОперации.ЦелевоеВремя И Замеры.ВремяВыполнения <= 4 * КлючевыеОперации.ЦелевоеВремя ТОГДА 1 + | ИНАЧЕ 0 + | КОНЕЦ) КАК N_T_4T, + | СУММА(ВЫБОР + | КОГДА Замеры.ВремяВыполнения > 4 * КлючевыеОперации.ЦелевоеВремя ТОГДА 1 + | ИНАЧЕ 0 + | КОНЕЦ) КАК N_4T + |ИЗ + | РегистрСведений.ЗамерыВремени КАК Замеры + |ВНУТРЕННЕЕ СОЕДИНЕНИЕ + | ВыборкаХудшиеОперации КАК КлючевыеОперации + |ПО + | Замеры.КлючеваяОперация = КлючевыеОперации.КлючеваяОперацияСсылка + |ВНУТРЕННЕЕ СОЕДИНЕНИЕ + | Справочник.КлючевыеОперации КАК СпрКлючевыеОперации + |ПО + | Замеры.КлючеваяОперация = СпрКлючевыеОперации.Ссылка + |ГДЕ + | Замеры.ДатаНачалаЗамера МЕЖДУ &ДатаНачала И &ДатаОкончания + |СГРУППИРОВАТЬ ПО + | ДОБАВИТЬКДАТЕ(ДАТАВРЕМЯ(2015,1,1),СЕКУНДА, ВЫРАЗИТЬ((РАЗНОСТЬДАТ(ДАТАВРЕМЯ(2015,1,1), Замеры.ДатаНачалаЗамера, СЕКУНДА) + 63555667200)/&ПериодАгрегации - 0.5 КАК ЧИСЛО(11,0)) * &ПериодАгрегации - 63555667200), + | СпрКлючевыеОперации.Наименование, + | КлючевыеОперации.ЦелевоеВремя + |УПОРЯДОЧИТЬ ПО + | ДОБАВИТЬКДАТЕ(ДАТАВРЕМЯ(2015,1,1),СЕКУНДА, ВЫРАЗИТЬ((РАЗНОСТЬДАТ(ДАТАВРЕМЯ(2015,1,1), Замеры.ДатаНачалаЗамера, СЕКУНДА) + 63555667200)/&ПериодАгрегации - 0.5 КАК ЧИСЛО(11,0)) * &ПериодАгрегации - 63555667200) + |;"; + Запрос.УстановитьПараметр("ДатаНачала", ДатаНачала); + Запрос.УстановитьПараметр("ДатаОкончания", ДатаОкончания); + Запрос.УстановитьПараметр("ПериодАгрегации", ПериодАгрегации); + Запрос.Текст = СтрЗаменить(Запрос.Текст, "%Количество", Формат(Количество, "ЧН=0; ЧГ=")); + Иначе + Запрос.Текст = " + |ВЫБРАТЬ + | ДОБАВИТЬКДАТЕ(ДАТАВРЕМЯ(2015,1,1),СЕКУНДА, ВЫРАЗИТЬ((РАЗНОСТЬДАТ(ДАТАВРЕМЯ(2015,1,1), Замеры.ДатаНачалаЗамера, СЕКУНДА) + 63555667200)/&ПериодАгрегации - 0.5 КАК ЧИСЛО(11,0)) * &ПериодАгрегации - 63555667200) КАК Период, + | СпрКлючевыеОперации.Наименование КАК КлючеваяОперация, + | СпрКлючевыеОперации.ЦелевоеВремя КАК ЦелевоеВремя, + | СУММА(ВЫБОР + | КОГДА Замеры.ВремяВыполнения <= СпрКлючевыеОперации.ЦелевоеВремя ТОГДА 1 + | ИНАЧЕ 0 + | КОНЕЦ) КАК N_T, + | СУММА(ВЫБОР + | КОГДА Замеры.ВремяВыполнения > СпрКлючевыеОперации.ЦелевоеВремя И Замеры.ВремяВыполнения <= 4 * СпрКлючевыеОперации.ЦелевоеВремя ТОГДА 1 + | ИНАЧЕ 0 + | КОНЕЦ) КАК N_T_4T, + | СУММА(ВЫБОР + | КОГДА Замеры.ВремяВыполнения > 4 * СпрКлючевыеОперации.ЦелевоеВремя ТОГДА 1 + | ИНАЧЕ 0 + | КОНЕЦ) КАК N_4T + |ИЗ + | РегистрСведений.ЗамерыВремени КАК Замеры + |ВНУТРЕННЕЕ СОЕДИНЕНИЕ + | Справочник.КлючевыеОперации КАК СпрКлючевыеОперации + |ПО + | Замеры.КлючеваяОперация = СпрКлючевыеОперации.Ссылка + |ГДЕ + | Замеры.ДатаНачалаЗамера МЕЖДУ &ДатаНачала И &ДатаОкончания + |СГРУППИРОВАТЬ ПО + | ДОБАВИТЬКДАТЕ(ДАТАВРЕМЯ(2015,1,1),СЕКУНДА, ВЫРАЗИТЬ((РАЗНОСТЬДАТ(ДАТАВРЕМЯ(2015,1,1), Замеры.ДатаНачалаЗамера, СЕКУНДА) + 63555667200)/&ПериодАгрегации - 0.5 КАК ЧИСЛО(11,0)) * &ПериодАгрегации - 63555667200), + | СпрКлючевыеОперации.Наименование, + | СпрКлючевыеОперации.ЦелевоеВремя + |УПОРЯДОЧИТЬ ПО + | ДОБАВИТЬКДАТЕ(ДАТАВРЕМЯ(2015,1,1),СЕКУНДА, ВЫРАЗИТЬ((РАЗНОСТЬДАТ(ДАТАВРЕМЯ(2015,1,1), Замеры.ДатаНачалаЗамера, СЕКУНДА) + 63555667200)/&ПериодАгрегации - 0.5 КАК ЧИСЛО(11,0)) * &ПериодАгрегации - 63555667200) + |;"; + Запрос.УстановитьПараметр("ДатаНачала", ДатаНачала); + Запрос.УстановитьПараметр("ДатаОкончания", ДатаОкончания); + Запрос.УстановитьПараметр("ПериодАгрегации", ПериодАгрегации); + КонецЕсли; + + РезультатЗапроса = Запрос.Выполнить(); + + Возврат РезультатЗапроса; +КонецФункции + +#КонецОбласти + +#КонецЕсли diff --git a/SSL/src/InformationRegisters/ЗамерыВремени/ЗамерыВремени.mdo b/SSL/src/InformationRegisters/ЗамерыВремени/ЗамерыВремени.mdo index 84f44c638..b60a21456 100644 --- a/SSL/src/InformationRegisters/ЗамерыВремени/ЗамерыВремени.mdo +++ b/SSL/src/InformationRegisters/ЗамерыВремени/ЗамерыВремени.mdo @@ -71,16 +71,30 @@ true - - ru - Служебный ресурс - Use Use + + Комментарий + + ru + Комментарий + + + String + + 256 + + + + + Use + Use + + ДатаЗаписи @@ -91,12 +105,9 @@ Date - - ru - Служебный реквизит - + Index Use Use @@ -115,10 +126,6 @@ - - ru - Служебный реквизит - Use @@ -137,10 +144,6 @@ 128 - - ru - Служебный реквизит - Use @@ -157,10 +160,6 @@ Date - - ru - Служебный реквизит - Use @@ -179,10 +178,6 @@ CatalogRef.КлючевыеОперации - - ru - Служебное измерение - true @@ -203,10 +198,6 @@ Date - - ru - Служебное измерение - true @@ -231,10 +222,6 @@ true - - ru - Служебное измерение - Use diff --git a/SSL/src/InformationRegisters/ЗамерыВремениТехнологические/Help/ru.html b/SSL/src/InformationRegisters/ЗамерыВремениТехнологические/Help/ru.html new file mode 100644 index 000000000..b97c6f2ec --- /dev/null +++ b/SSL/src/InformationRegisters/ЗамерыВремениТехнологические/Help/ru.html @@ -0,0 +1,18 @@ + +

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

      +

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

      +

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

      +
      • Ключевая операция - полное наименование ключевой операции; +
      • Дата начала замера - дата и время начала замера; +
      • Номер сеанса; +
      • Время выполнения в секундах; +
      • Дата записи - дата и время записи; +
      • Дата окончания - дата и время окончания замера; +
      • Пользователь - полное имя пользователя; +
      • Локальная дата записи.

      Нажмите Все действия - Изменить форму, для того чтобы добавить дополнительные поля, например:

      +
      • Имя - имя ключевой операции в программе; +
      • Приоритет - выводится из списка ключевых операций; +
      • Минимально допустимый уровень - выводится из списка ключевых операций;  +
      • Целевое время - выводится из списка ключевых операций.

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

      +

      См. также:

      + \ No newline at end of file diff --git a/SSL/src/InformationRegisters/ЗамерыВремениТехнологические/ManagerModule.bsl b/SSL/src/InformationRegisters/ЗамерыВремениТехнологические/ManagerModule.bsl new file mode 100644 index 000000000..340bb052e --- /dev/null +++ b/SSL/src/InformationRegisters/ЗамерыВремениТехнологические/ManagerModule.bsl @@ -0,0 +1,188 @@ +#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда + +#Область СлужебныеПроцедурыИФункции + +Функция ПолучитьПоследниеКомментарии() Экспорт + Запрос = Новый Запрос; + ТекстЗапроса = " + |ВЫБРАТЬ + | Комментарий КАК Комментарий, + | КОЛИЧЕСТВО(Комментарий) КАК ЧастотаИспользования + |ИЗ + | ( + | ВЫБРАТЬ ПЕРВЫЕ 1000 + | ЗамерыВремени.Комментарий КАК Комментарий + | ИЗ + | РегистрСведений.ЗамерыВремени КАК ЗамерыВремени + | УПОРЯДОЧИТЬ ПО + | ЗамерыВремени.ДатаЗаписи УБЫВ + | ) КАК Выборка + |СГРУППИРОВАТЬ ПО + | Комментарий + |УПОРЯДОЧИТЬ ПО + | КОЛИЧЕСТВО(Комментарий) УБЫВ + |"; + + Запрос.Текст = ТекстЗапроса; + РезультатЗапроса = Запрос.Выполнить(); + + Комментарии = Новый Массив(); + + Количество = 0; + ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать(); + Пока ВыборкаДетальныеЗаписи.Следующий() Цикл + Комментарии.Добавить(ВыборкаДетальныеЗаписи.Комментарий); + Количество = Количество + 1; + + Если Количество = 5 Тогда + Прервать; + КонецЕсли; + КонецЦикла; + + Возврат Комментарии; +КонецФункции + +Функция ПолучитьТопAPDEX(ДатаНачала, ДатаОкончания, ПериодАгрегации, Количество) Экспорт + Запрос = Новый Запрос; + + Если Количество > 0 Тогда + Запрос.Текст = " + |ВЫБРАТЬ + | КлючевыеОперации.Ссылка КАК КлючеваяОперацияСсылка, + | КлючевыеОперации.ЦелевоеВремя КАК ЦелевоеВремя, + | КОЛИЧЕСТВО(*) КАК КоличествоЗамеров, + | СУММА(ВЫБОР + | КОГДА Замеры.ВремяВыполнения <= КлючевыеОперации.ЦелевоеВремя ТОГДА 1 + | ИНАЧЕ 0 + | КОНЕЦ) КАК N_T, + | СУММА(ВЫБОР + | КОГДА Замеры.ВремяВыполнения > КлючевыеОперации.ЦелевоеВремя И Замеры.ВремяВыполнения <= 4 * КлючевыеОперации.ЦелевоеВремя ТОГДА 1 + | ИНАЧЕ 0 + | КОНЕЦ) КАК N_T_4T, + | СУММА(ВЫБОР + | КОГДА Замеры.ВремяВыполнения > 4 * КлючевыеОперации.ЦелевоеВремя ТОГДА 1 + | ИНАЧЕ 0 + | КОНЕЦ) КАК N_4T + |ПОМЕСТИТЬ + | Выборка + |ИЗ + | РегистрСведений.ЗамерыВремениТехнологические КАК Замеры + |ВНУТРЕННЕЕ СОЕДИНЕНИЕ + | Справочник.КлючевыеОперации КАК КлючевыеОперации + |ПО + | Замеры.КлючеваяОперация = КлючевыеОперации.Ссылка + |ГДЕ + | Замеры.ДатаНачалаЗамера МЕЖДУ &ДатаНачала И &ДатаОкончания + |СГРУППИРОВАТЬ ПО + | КлючевыеОперации.Ссылка, + | КлючевыеОперации.ЦелевоеВремя + |; + |ВЫБРАТЬ + | СУММА(КоличествоЗамеров) КАК КоличествоЗамеров + |ПОМЕСТИТЬ + | ВсегоЗамеров + |ИЗ + | Выборка + |; + |ВЫБРАТЬ ПЕРВЫЕ %Количество + | Выборка.КлючеваяОперацияСсылка, + | Выборка.ЦелевоеВремя, + | Выборка.КоличествоЗамеров, + | ВЫРАЗИТЬ((Выборка.N_T + Выборка.N_T_4T/2)/Выборка.КоличествоЗамеров КАК ЧИСЛО(15,3)) КАК APDEX, + | ВЫРАЗИТЬ((Выборка.N_4T + Выборка.N_T_4T/2)/ВсегоЗамеров.КоличествоЗамеров КАК ЧИСЛО(15,3)) КАК APDEXВлияние + |ПОМЕСТИТЬ + | ВыборкаХудшиеОперации + |ИЗ + | Выборка + |ЛЕВОЕ СОЕДИНЕНИЕ + | ВсегоЗамеров + |ПО + | НЕ ВсегоЗамеров.КоличествоЗамеров IS NULL + |УПОРЯДОЧИТЬ ПО + | (Выборка.N_4T + Выборка.N_T_4T/2)/ВсегоЗамеров.КоличествоЗамеров УБЫВ + |; + |ВЫБРАТЬ + | ДОБАВИТЬКДАТЕ(ДАТАВРЕМЯ(2015,1,1),СЕКУНДА, ВЫРАЗИТЬ((РАЗНОСТЬДАТ(ДАТАВРЕМЯ(2015,1,1), Замеры.ДатаНачалаЗамера, СЕКУНДА) + 63555667200)/&ПериодАгрегации - 0.5 КАК ЧИСЛО(11,0)) * &ПериодАгрегации - 63555667200) КАК Период, + | СпрКлючевыеОперации.Наименование КАК КлючеваяОперация, + | КлючевыеОперации.ЦелевоеВремя КАК ЦелевоеВремя, + | СУММА(ВЫБОР + | КОГДА Замеры.ВремяВыполнения <= КлючевыеОперации.ЦелевоеВремя ТОГДА 1 + | ИНАЧЕ 0 + | КОНЕЦ) КАК N_T, + | СУММА(ВЫБОР + | КОГДА Замеры.ВремяВыполнения > КлючевыеОперации.ЦелевоеВремя И Замеры.ВремяВыполнения <= 4 * КлючевыеОперации.ЦелевоеВремя ТОГДА 1 + | ИНАЧЕ 0 + | КОНЕЦ) КАК N_T_4T, + | СУММА(ВЫБОР + | КОГДА Замеры.ВремяВыполнения > 4 * КлючевыеОперации.ЦелевоеВремя ТОГДА 1 + | ИНАЧЕ 0 + | КОНЕЦ) КАК N_4T + |ИЗ + | РегистрСведений.ЗамерыВремениТехнологические КАК Замеры + |ВНУТРЕННЕЕ СОЕДИНЕНИЕ + | ВыборкаХудшиеОперации КАК КлючевыеОперации + |ПО + | Замеры.КлючеваяОперация = КлючевыеОперации.КлючеваяОперацияСсылка + |ВНУТРЕННЕЕ СОЕДИНЕНИЕ + | Справочник.КлючевыеОперации КАК СпрКлючевыеОперации + |ПО + | Замеры.КлючеваяОперация = СпрКлючевыеОперации.Ссылка + |ГДЕ + | Замеры.ДатаНачалаЗамера МЕЖДУ &ДатаНачала И &ДатаОкончания + |СГРУППИРОВАТЬ ПО + | ДОБАВИТЬКДАТЕ(ДАТАВРЕМЯ(2015,1,1),СЕКУНДА, ВЫРАЗИТЬ((РАЗНОСТЬДАТ(ДАТАВРЕМЯ(2015,1,1), Замеры.ДатаНачалаЗамера, СЕКУНДА) + 63555667200)/&ПериодАгрегации - 0.5 КАК ЧИСЛО(11,0)) * &ПериодАгрегации - 63555667200), + | СпрКлючевыеОперации.Наименование, + | КлючевыеОперации.ЦелевоеВремя + |УПОРЯДОЧИТЬ ПО + | ДОБАВИТЬКДАТЕ(ДАТАВРЕМЯ(2015,1,1),СЕКУНДА, ВЫРАЗИТЬ((РАЗНОСТЬДАТ(ДАТАВРЕМЯ(2015,1,1), Замеры.ДатаНачалаЗамера, СЕКУНДА) + 63555667200)/&ПериодАгрегации - 0.5 КАК ЧИСЛО(11,0)) * &ПериодАгрегации - 63555667200) + |;"; + Запрос.УстановитьПараметр("ДатаНачала", ДатаНачала); + Запрос.УстановитьПараметр("ДатаОкончания", ДатаОкончания); + Запрос.УстановитьПараметр("ПериодАгрегации", ПериодАгрегации); + Запрос.Текст = СтрЗаменить(Запрос.Текст, "%Количество", Формат(Количество, "ЧН=0; ЧГ=")); + Иначе + Запрос.Текст = " + |ВЫБРАТЬ + | ДОБАВИТЬКДАТЕ(ДАТАВРЕМЯ(2015,1,1),СЕКУНДА, ВЫРАЗИТЬ((РАЗНОСТЬДАТ(ДАТАВРЕМЯ(2015,1,1), Замеры.ДатаНачалаЗамера, СЕКУНДА) + 63555667200)/&ПериодАгрегации - 0.5 КАК ЧИСЛО(11,0)) * &ПериодАгрегации - 63555667200) КАК Период, + | СпрКлючевыеОперации.Наименование КАК КлючеваяОперация, + | СпрКлючевыеОперации.ЦелевоеВремя КАК ЦелевоеВремя, + | СУММА(ВЫБОР + | КОГДА Замеры.ВремяВыполнения <= СпрКлючевыеОперации.ЦелевоеВремя ТОГДА 1 + | ИНАЧЕ 0 + | КОНЕЦ) КАК N_T, + | СУММА(ВЫБОР + | КОГДА Замеры.ВремяВыполнения > СпрКлючевыеОперации.ЦелевоеВремя И Замеры.ВремяВыполнения <= 4 * СпрКлючевыеОперации.ЦелевоеВремя ТОГДА 1 + | ИНАЧЕ 0 + | КОНЕЦ) КАК N_T_4T, + | СУММА(ВЫБОР + | КОГДА Замеры.ВремяВыполнения > 4 * СпрКлючевыеОперации.ЦелевоеВремя ТОГДА 1 + | ИНАЧЕ 0 + | КОНЕЦ) КАК N_4T + |ИЗ + | РегистрСведений.ЗамерыВремениТехнологические КАК Замеры + |ВНУТРЕННЕЕ СОЕДИНЕНИЕ + | Справочник.КлючевыеОперации КАК СпрКлючевыеОперации + |ПО + | Замеры.КлючеваяОперация = СпрКлючевыеОперации.Ссылка + |ГДЕ + | Замеры.ДатаНачалаЗамера МЕЖДУ &ДатаНачала И &ДатаОкончания + |СГРУППИРОВАТЬ ПО + | ДОБАВИТЬКДАТЕ(ДАТАВРЕМЯ(2015,1,1),СЕКУНДА, ВЫРАЗИТЬ((РАЗНОСТЬДАТ(ДАТАВРЕМЯ(2015,1,1), Замеры.ДатаНачалаЗамера, СЕКУНДА) + 63555667200)/&ПериодАгрегации - 0.5 КАК ЧИСЛО(11,0)) * &ПериодАгрегации - 63555667200), + | СпрКлючевыеОперации.Наименование, + | СпрКлючевыеОперации.ЦелевоеВремя + |УПОРЯДОЧИТЬ ПО + | ДОБАВИТЬКДАТЕ(ДАТАВРЕМЯ(2015,1,1),СЕКУНДА, ВЫРАЗИТЬ((РАЗНОСТЬДАТ(ДАТАВРЕМЯ(2015,1,1), Замеры.ДатаНачалаЗамера, СЕКУНДА) + 63555667200)/&ПериодАгрегации - 0.5 КАК ЧИСЛО(11,0)) * &ПериодАгрегации - 63555667200) + |;"; + Запрос.УстановитьПараметр("ДатаНачала", ДатаНачала); + Запрос.УстановитьПараметр("ДатаОкончания", ДатаОкончания); + Запрос.УстановитьПараметр("ПериодАгрегации", ПериодАгрегации); + КонецЕсли; + + РезультатЗапроса = Запрос.Выполнить(); + + Возврат РезультатЗапроса; +КонецФункции + +#КонецОбласти + +#КонецЕсли \ No newline at end of file diff --git a/SSL/src/InformationRegisters/ЗамерыВремениТехнологические/ЗамерыВремениТехнологические.mdo b/SSL/src/InformationRegisters/ЗамерыВремениТехнологические/ЗамерыВремениТехнологические.mdo new file mode 100644 index 000000000..319f1a248 --- /dev/null +++ b/SSL/src/InformationRegisters/ЗамерыВремениТехнологические/ЗамерыВремениТехнологические.mdo @@ -0,0 +1,232 @@ + + + + + + + + + + + + ЗамерыВремениТехнологические + + ru + Замеры времени технологические + + true + InDialog + + Use + Active + + Use + + + + + Use + LineNumber + + Use + + + + + Use + Recorder + + Use + + + + + Use + Period + + ShowError + Use + + + + true + + + ru + + + Managed + + ВремяВыполнения + + ru + Время выполнения в секундах + + Время выполнения в секундах + + Number + + 15 + 3 + true + + + + + Use + Use + + + + Комментарий + + ru + Комментарий + + + String + + 256 + + + + + Use + Use + + + + ДатаЗаписи + + ru + Дата записи + + + Date + + + + + Index + Use + Use + + + + ДатаОкончания + + ru + Дата окончания + + + Date + Number + + 15 + + + + + + Use + Use + + + + Пользователь + + ru + Пользователь + + + String + + 128 + + + + + Use + Use + + + + ДатаЗаписиЛокальная + + ru + Дата записи локальная + + + Date + + + + + Use + Use + true + + 0001-01-01T00:00:00 + + + + КлючеваяОперация + + ru + Ключевая операция + + + CatalogRef.КлючевыеОперации + + + + true + Use + Use + true + + true + true + + + ДатаНачалаЗамера + + ru + Дата начала замера + + + Date + + + + + true + Use + Use + true + + 0001-01-01T00:00:00 + + true + + + НомерСеанса + + ru + Номер сеанса + + + Number + + 15 + true + + + + + Use + Use + + true + + diff --git a/SSL/src/InformationRegisters/ЗамерыКомментарииСтатистики/Forms/ФормаСписка/Attributes/Список/ExtInfo/ListSettings.dcss b/SSL/src/InformationRegisters/ЗамерыКомментарииСтатистики/Forms/ФормаСписка/Attributes/Список/ExtInfo/ListSettings.dcss new file mode 100644 index 000000000..61e6fb4bb --- /dev/null +++ b/SSL/src/InformationRegisters/ЗамерыКомментарииСтатистики/Forms/ФормаСписка/Attributes/Список/ExtInfo/ListSettings.dcss @@ -0,0 +1,17 @@ + + + + Normal + dfcece9d-5077-440b-b6b3-45a5cb4538eb + + + Normal + 88619765-ccb3-46c6-ac52-38e9c992ebd4 + + + Normal + b75fecce-942b-4aed-abc9-e6a02e460fb3 + + Normal + 911b6018-f537-43e8-a417-da56b22f9aec + diff --git a/SSL/src/InformationRegisters/ЗамерыКомментарииСтатистики/Forms/ФормаСписка/Form.form b/SSL/src/InformationRegisters/ЗамерыКомментарииСтатистики/Forms/ФормаСписка/Form.form new file mode 100644 index 000000000..57d159469 --- /dev/null +++ b/SSL/src/InformationRegisters/ЗамерыКомментарииСтатистики/Forms/ФормаСписка/Form.form @@ -0,0 +1,652 @@ + + + + СписокКомпоновщикНастроекПользовательскиеНастройки + 1 + true + true + + true + + + <key>ru</key> + <value>Группа пользовательских настроек</value> + + false + + СписокКомпоновщикНастроекПользовательскиеНастройкиРасширеннаяПодсказка + 2 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + WeakSeparation + true + true + Auto + Auto + + + + Список + 3 + true + true + + true + + + Список + + true + None + + ГруппаПериод + 41 + + Период + 43 + + <key>ru</key> + <value>Период начало</value> + + true + true + + true + + + Список.Period + + + ПериодРасширеннаяПодсказка + 45 + Label + true + true + + Left + + + + ПериодКонтекстноеМеню + 44 + true + + LabelField + Enter + true + Left + true + + true + true + + + + ПериодОкончание + 46 + + <key>ru</key> + <value>Период окончание</value> + + true + true + + true + + + Список.ПериодОкончание + + + ПериодОкончаниеРасширеннаяПодсказка + 48 + Label + true + true + + Left + + + + ПериодОкончаниеКонтекстноеМеню + 47 + true + + LabelField + Enter + true + Left + true + + true + true + + + true + true + + true + + + <key>ru</key> + <value>Группа период</value> + + + ru + Группа период + + + ГруппаПериодРасширеннаяПодсказка + 42 + Label + true + true + + Left + + + ColumnGroup + + Vertical + auto + true + + + + ГруппаОперация + 37 + + ОперацияСтатистикиНаименование + 49 + + <key>ru</key> + <value>Операция</value> + + true + true + + true + + + Список.ОперацияСтатистикиНаименование + + + ОперацияСтатистикиНаименованиеРасширеннаяПодсказка + 51 + Label + true + true + + Left + + + + ОперацияСтатистикиНаименованиеКонтекстноеМеню + 50 + true + + LabelField + Enter + true + Left + true + + true + true + + + + ОперацияСтатистики + 52 + + <key>ru</key> + <value>Операция ссылка</value> + + true + true + + true + + + Список.ОперацияСтатистики + + + ОперацияСтатистикиРасширеннаяПодсказка + 54 + Label + true + true + + Left + + + + ОперацияСтатистикиКонтекстноеМеню + 53 + true + + LabelField + Enter + true + Left + true + + true + true + + + true + true + + true + + + <key>ru</key> + <value>Группа операция</value> + + + ru + Группа операция + + + ГруппаОперацияРасширеннаяПодсказка + 38 + Label + true + true + + Left + + + ColumnGroup + + Vertical + auto + true + + + + ГруппаКомментарий + 39 + + КомментарийСтатистикиНаименование + 55 + + <key>ru</key> + <value>Комментарий</value> + + true + true + + true + + + Список.КомментарийСтатистикиНаименование + + + КомментарийСтатистикиНаименованиеРасширеннаяПодсказка + 57 + Label + true + true + + Left + + + + КомментарийСтатистикиНаименованиеКонтекстноеМеню + 56 + true + + LabelField + Enter + true + Left + true + + true + true + + + + КомментарийСтатистики + 58 + + <key>ru</key> + <value>Комментарий ссылка</value> + + true + true + + true + + + Список.КомментарийСтатистики + + + КомментарийСтатистикиРасширеннаяПодсказка + 60 + Label + true + true + + Left + + + + КомментарийСтатистикиКонтекстноеМеню + 59 + true + + LabelField + Enter + true + Left + true + + true + true + + + true + true + + true + + + <key>ru</key> + <value>Группа комментарий</value> + + + ru + Группа комментарий + + + ГруппаКомментарийРасширеннаяПодсказка + 40 + Label + true + true + + Left + + + ColumnGroup + + Vertical + auto + true + + + + КоличествоЗначений + 61 + true + true + + true + + + Список.КоличествоЗначений + + + КоличествоЗначенийРасширеннаяПодсказка + 63 + Label + true + true + + Left + + + + КоличествоЗначенийКонтекстноеМеню + 62 + true + + LabelField + Enter + true + Left + true + + true + true + + + + ИдентификаторУдаления + 64 + true + true + + true + + + Список.ИдентификаторУдаления + + + ИдентификаторУдаленияРасширеннаяПодсказка + 66 + Label + true + true + + Left + + + + ИдентификаторУдаленияКонтекстноеМеню + 65 + true + + LabelField + Enter + true + Left + true + + true + true + + + None + + СписокКоманднаяПанель + 5 + Left + + + СписокСтрокаПоиска + 7 + + СписокСтрокаПоискаРасширеннаяПодсказка + 9 + Label + true + true + + Left + + + + СписокСтрокаПоискаКонтекстноеМеню + 8 + true + + Список + + true + + + + СписокСостояниеПросмотра + 10 + + СписокСостояниеПросмотраРасширеннаяПодсказка + 12 + Label + true + true + + Left + + + + СписокСостояниеПросмотраКонтекстноеМеню + 11 + true + + ViewStatusAddition + Список + + true + + + + СписокУправлениеПоиском + 13 + + СписокУправлениеПоискомРасширеннаяПодсказка + 15 + Label + true + true + + Left + + + + СписокУправлениеПоискомКонтекстноеМеню + 14 + true + + SearchControlAddition + Список + + true + + + + СписокРасширеннаяПодсказка + 6 + Label + true + true + + Left + + + + СписокКонтекстноеМеню + 4 + true + + true + true + true + true + true + MultiRow +
      true
      + 1 + 1 + AutoUse + AutoUse + true + true + Auto + Auto + ExpandTopLevel + true + true + true + + Список.DefaultPicture + + None + None + true + + 60 + + 0001-01-01T00:00:00 + 0001-01-01T00:00:00 + + + true + true + СписокКомпоновщикНастроекПользовательскиеНастройки + +
      + + ФормаКоманднаяПанель + -1 + Left + true + + DontBlock + true + true + true + Vertical + true + true + true + auto + true + + Список + 1 + + DynamicList + + + true + + + true + +
      true
      + + ВЫБРАТЬ + ЗамерыКомментарииСтатистики.Период, + ЗамерыКомментарииСтатистики.ПериодОкончание, + ЗамерыКомментарииСтатистики.ОперацияСтатистики, + ОперацииСтатистики.Наименование КАК ОперацияСтатистикиНаименование, + ЗамерыКомментарииСтатистики.КомментарийСтатистики, + КомментарииСтатистики.Наименование КАК КомментарийСтатистикиНаименование, + ЗамерыКомментарииСтатистики.ИдентификаторУдаления, + ЗамерыКомментарииСтатистики.КоличествоЗначений +ИЗ + РегистрСведений.ЗамерыКомментарииСтатистики КАК ЗамерыКомментарииСтатистики +ЛЕВОЕ СОЕДИНЕНИЕ + РегистрСведений.ОперацииСтатистики КАК ОперацииСтатистики +ПО + ЗамерыКомментарииСтатистики.ОперацияСтатистики = ОперацииСтатистики.ИдентификаторОперации +ЛЕВОЕ СОЕДИНЕНИЕ + РегистрСведений.КомментарииСтатистики КАК КомментарииСтатистики +ПО + ЗамерыКомментарииСтатистики.КомментарийСтатистики = КомментарииСтатистики.ИдентификаторКомментария + InformationRegister.ЗамерыКомментарииСтатистики + true + true + true + true + true + +
      + + + + + +
      diff --git a/SSL/src/InformationRegisters/ЗамерыКомментарииСтатистики/ManagerModule.bsl b/SSL/src/InformationRegisters/ЗамерыКомментарииСтатистики/ManagerModule.bsl new file mode 100644 index 000000000..f95830f15 --- /dev/null +++ b/SSL/src/InformationRegisters/ЗамерыКомментарииСтатистики/ManagerModule.bsl @@ -0,0 +1,136 @@ +#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда + +#Область СлужебныеПроцедурыИФункции + +Процедура ЗаписатьЗамеры(Замеры) Экспорт + Если ТипЗнч(Замеры) = Тип("РезультатЗапроса") Тогда + ЗаписатьРезультатЗапроса(Замеры); + КонецЕсли; +КонецПроцедуры + +Процедура ЗаписатьРезультатЗапроса(Замеры) + Если НЕ Замеры.Пустой() Тогда + НулевойИдентификатор = Новый УникальныйИдентификатор("00000000-0000-0000-0000-000000000000"); + + НаборЗаписей = РегистрыСведений.ЗамерыКомментарииСтатистики.СоздатьНаборЗаписей(); + + Выборка = Замеры.Выбрать(); + Пока Выборка.Следующий() Цикл + Если Выборка.КомментарийСтатистики <> НулевойИдентификатор Тогда + НовЗапись = НаборЗаписей.Добавить(); + НовЗапись.Период = Выборка.Период; + НовЗапись.ОперацияСтатистики = Выборка.ОперацияСтатистики; + НовЗапись.КомментарийСтатистики = Выборка.КомментарийСтатистики; + НовЗапись.ИдентификаторУдаления = Выборка.ИдентификаторУдаления; + НовЗапись.КоличествоЗначений = Выборка.КоличествоЗначений; + НовЗапись.ПериодОкончание = Выборка.ПериодОкончание; + КонецЕсли; + КонецЦикла; + + НаборЗаписей.ОбменДанными.Загрузка = Истина; + НаборЗаписей.Записать(Ложь); + КонецЕсли; +КонецПроцедуры + +Функция ПолучитьАгрегированныеЗаписи(ГраницаАгрегирования, ОбработатьЗаписиДо, ПериодАгрегации, ПериодУдаления) Экспорт + Запрос = Новый Запрос; + Запрос.Текст = " + |ВЫБРАТЬ + | ДОБАВИТЬКДАТЕ(ДАТАВРЕМЯ(2015,1,1),СЕКУНДА, ВЫРАЗИТЬ((РАЗНОСТЬДАТ(ДАТАВРЕМЯ(2015,1,1), ЗамерыКомментарииСтатистики.Период, СЕКУНДА) + 63555667200)/&ПериодАгрегации - 0.5 КАК ЧИСЛО(11,0)) * &ПериодАгрегации - 63555667200) КАК Период, + | ДОБАВИТЬКДАТЕ(ДАТАВРЕМЯ(2015,1,1),СЕКУНДА, ВЫРАЗИТЬ((РАЗНОСТЬДАТ(ДАТАВРЕМЯ(2015,1,1), ЗамерыКомментарииСтатистики.Период, СЕКУНДА) + 63555667200)/&ПериодАгрегации - 0.5 КАК ЧИСЛО(11,0)) * &ПериодАгрегации - 63555667200 + &ПериодАгрегации - 1) КАК ПериодОкончание, + | ДОБАВИТЬКДАТЕ(ДАТАВРЕМЯ(2015,1,1),СЕКУНДА, ВЫРАЗИТЬ((РАЗНОСТЬДАТ(ДАТАВРЕМЯ(2015,1,1), ЗамерыКомментарииСтатистики.Период, СЕКУНДА) + 63555667200)/&ПериодУдаления - 0.5 КАК ЧИСЛО(11,0)) * &ПериодУдаления - 63555667200) КАК ИдентификаторУдаления, + | ЗамерыКомментарииСтатистики.ОперацияСтатистики, + | ЗамерыКомментарииСтатистики.КомментарийСтатистики, + | СУММА(ЗамерыКомментарииСтатистики.КоличествоЗначений) КАК КоличествоЗначений + |ИЗ + | РегистрСведений.ЗамерыКомментарииСтатистики КАК ЗамерыКомментарииСтатистики + |ГДЕ + | ЗамерыКомментарииСтатистики.Период >= &ГраницаАгрегирования + | И ЗамерыКомментарииСтатистики.Период < &ОбработатьЗаписиДо + |СГРУППИРОВАТЬ ПО + | ДОБАВИТЬКДАТЕ(ДАТАВРЕМЯ(2015,1,1),СЕКУНДА, ВЫРАЗИТЬ((РАЗНОСТЬДАТ(ДАТАВРЕМЯ(2015,1,1), ЗамерыКомментарииСтатистики.Период, СЕКУНДА) + 63555667200)/&ПериодАгрегации - 0.5 КАК ЧИСЛО(11,0)) * &ПериодАгрегации - 63555667200), + | ДОБАВИТЬКДАТЕ(ДАТАВРЕМЯ(2015,1,1),СЕКУНДА, ВЫРАЗИТЬ((РАЗНОСТЬДАТ(ДАТАВРЕМЯ(2015,1,1), ЗамерыКомментарииСтатистики.Период, СЕКУНДА) + 63555667200)/&ПериодАгрегации - 0.5 КАК ЧИСЛО(11,0)) * &ПериодАгрегации - 63555667200 + &ПериодАгрегации - 1), + | ДОБАВИТЬКДАТЕ(ДАТАВРЕМЯ(2015,1,1),СЕКУНДА, ВЫРАЗИТЬ((РАЗНОСТЬДАТ(ДАТАВРЕМЯ(2015,1,1), ЗамерыКомментарииСтатистики.Период, СЕКУНДА) + 63555667200)/&ПериодУдаления - 0.5 КАК ЧИСЛО(11,0)) * &ПериодУдаления - 63555667200), + | ЗамерыКомментарииСтатистики.ОперацияСтатистики, + | ЗамерыКомментарииСтатистики.КомментарийСтатистики + |"; + + Запрос.УстановитьПараметр("ГраницаАгрегирования", ГраницаАгрегирования); + Запрос.УстановитьПараметр("ОбработатьЗаписиДо", ОбработатьЗаписиДо); + Запрос.УстановитьПараметр("ПериодАгрегации", ПериодАгрегации); + Запрос.УстановитьПараметр("ПериодУдаления", ПериодУдаления); + РезультатЗапроса = Запрос.Выполнить(); + + Возврат РезультатЗапроса; +КонецФункции + +Процедура УдалитьЗаписи(ГраницаАгрегирования, ОбработатьЗаписиДо) Экспорт + Запрос = Новый Запрос; + Запрос.Текст = " + |ВЫБРАТЬ РАЗЛИЧНЫЕ + | ЗамерыКомментарииСтатистики.ИдентификаторУдаления + |ИЗ + | РегистрСведений.ЗамерыКомментарииСтатистики КАК ЗамерыКомментарииСтатистики + |ГДЕ + | ЗамерыКомментарииСтатистики.Период >= &ГраницаАгрегирования + | И ЗамерыКомментарииСтатистики.Период < &ОбработатьЗаписиДо + |"; + + Запрос.УстановитьПараметр("ГраницаАгрегирования", ГраницаАгрегирования); + Запрос.УстановитьПараметр("ОбработатьЗаписиДо", ОбработатьЗаписиДо); + + РезультатЗапроса = Запрос.Выполнить(); + Выборка = РезультатЗапроса.Выбрать(); + + НаборЗаписей = РегистрыСведений.ЗамерыКомментарииСтатистики.СоздатьНаборЗаписей(); + Пока Выборка.Следующий() Цикл + + НаборЗаписей.Отбор.ИдентификаторУдаления.Установить(Выборка.ИдентификаторУдаления); + НаборЗаписей.Записать(Истина); + КонецЦикла; +КонецПроцедуры + +Функция ПолучитьЗамеры(ДатаНачала, ДатаОкончания, ПериодУдаления) Экспорт + Запрос = Новый Запрос; + Запрос.Текст = " + |ВЫБРАТЬ + | ОперацииСтатистики.Наименование КАК ОперацияСтатистики, + | ДОБАВИТЬКДАТЕ(ДАТАВРЕМЯ(2015,1,1),СЕКУНДА, ВЫРАЗИТЬ((РАЗНОСТЬДАТ(ДАТАВРЕМЯ(2015,1,1), ЗамерыКомментарииСтатистики.Период, СЕКУНДА) + 63555667200)/&ПериодУдаления - 0.5 КАК ЧИСЛО(11,0)) * &ПериодУдаления - 63555667200) КАК Период, + | КомментарииСтатистики.Наименование КАК КомментарийСтатистики, + | СУММА(ЗамерыКомментарииСтатистики.КоличествоЗначений) КАК КоличествоЗначений + |ИЗ + | РегистрСведений.ЗамерыКомментарииСтатистики КАК ЗамерыКомментарииСтатистики + |ВНУТРЕННЕЕ СОЕДИНЕНИЕ + | РегистрСведений.ОперацииСтатистики КАК ОперацииСтатистики + |ПО + | ЗамерыКомментарииСтатистики.ОперацияСтатистики = ОперацииСтатистики.ИдентификаторОперации + |ВНУТРЕННЕЕ СОЕДИНЕНИЕ + | РегистрСведений.КомментарииСтатистики КАК КомментарииСтатистики + |ПО + | ЗамерыКомментарииСтатистики.КомментарийСтатистики = КомментарииСтатистики.ИдентификаторКомментария + |ГДЕ + | ЗамерыКомментарииСтатистики.Период >= &ДатаНачала + | И ЗамерыКомментарииСтатистики.ПериодОкончание <= &ДатаОкончания + | И ЗамерыКомментарииСтатистики.ИдентификаторУдаления < ДОБАВИТЬКДАТЕ(ДАТАВРЕМЯ(2015,1,1),СЕКУНДА, ВЫРАЗИТЬ((РАЗНОСТЬДАТ(ДАТАВРЕМЯ(2015,1,1), &ДатаОкончания, СЕКУНДА) + 63555667200)/&ПериодУдаления - 0.5 КАК ЧИСЛО(11,0)) * &ПериодУдаления - 63555667200) + |СГРУППИРОВАТЬ ПО + | ДОБАВИТЬКДАТЕ(ДАТАВРЕМЯ(2015,1,1),СЕКУНДА, ВЫРАЗИТЬ((РАЗНОСТЬДАТ(ДАТАВРЕМЯ(2015,1,1), ЗамерыКомментарииСтатистики.Период, СЕКУНДА) + 63555667200)/&ПериодУдаления - 0.5 КАК ЧИСЛО(11,0)) * &ПериодУдаления - 63555667200), + | ОперацииСтатистики.Наименование, + | КомментарииСтатистики.Наименование + |УПОРЯДОЧИТЬ ПО + | ДОБАВИТЬКДАТЕ(ДАТАВРЕМЯ(2015,1,1),СЕКУНДА, ВЫРАЗИТЬ((РАЗНОСТЬДАТ(ДАТАВРЕМЯ(2015,1,1), ЗамерыКомментарииСтатистики.Период, СЕКУНДА) + 63555667200)/&ПериодУдаления - 0.5 КАК ЧИСЛО(11,0)) * &ПериодУдаления - 63555667200), + | ОперацииСтатистики.Наименование, + | КомментарииСтатистики.Наименование + |"; + + Запрос.УстановитьПараметр("ДатаНачала", ДатаНачала); + Запрос.УстановитьПараметр("ДатаОкончания", ДатаОкончания); + Запрос.УстановитьПараметр("ПериодУдаления", ПериодУдаления); + + РезультатЗапроса = Запрос.Выполнить(); + + Возврат РезультатЗапроса; +КонецФункции + +#КонецОбласти + +#КонецЕсли \ No newline at end of file diff --git a/SSL/src/InformationRegisters/ЗамерыКомментарииСтатистики/ЗамерыКомментарииСтатистики.mdo b/SSL/src/InformationRegisters/ЗамерыКомментарииСтатистики/ЗамерыКомментарииСтатистики.mdo new file mode 100644 index 000000000..1227cdf46 --- /dev/null +++ b/SSL/src/InformationRegisters/ЗамерыКомментарииСтатистики/ЗамерыКомментарииСтатистики.mdo @@ -0,0 +1,148 @@ + + + + + + + + + + + + ЗамерыКомментарииСтатистики + + ru + Замеры комментарии статистики + + true + InDialog + InformationRegister.ЗамерыКомментарииСтатистики.Form.ФормаСписка + + Use + Active + + Use + + + + + Use + LineNumber + + Use + + + + + Use + Recorder + + Use + + + + + Use + Period + + ShowError + Use + + + + Second + true + Managed + + КоличествоЗначений + + ru + Количество значений + + + Number + + 10 + + + + + Use + Use + + + + ПериодОкончание + + ru + Период окончание + + + Date + + + + + Use + Use + + true + + + ОперацияСтатистики + + ru + Операция статистики + + + UUID + + + + Use + + true + + + КомментарийСтатистики + + ru + Комментарий статистики + + + UUID + + + + Use + + true + + + ИдентификаторУдаления + + ru + Идентификатор удаления + + + Date + + + + + Index + Use + Use + + true + + + ФормаСписка + + ru + Форма списка + + PersonalComputer + MobileDevice + + diff --git a/SSL/src/InformationRegisters/ЗамерыОбластиСтатистики/Forms/ФормаСписка/Attributes/Список/ExtInfo/ListSettings.dcss b/SSL/src/InformationRegisters/ЗамерыОбластиСтатистики/Forms/ФормаСписка/Attributes/Список/ExtInfo/ListSettings.dcss new file mode 100644 index 000000000..61e6fb4bb --- /dev/null +++ b/SSL/src/InformationRegisters/ЗамерыОбластиСтатистики/Forms/ФормаСписка/Attributes/Список/ExtInfo/ListSettings.dcss @@ -0,0 +1,17 @@ + + + + Normal + dfcece9d-5077-440b-b6b3-45a5cb4538eb + + + Normal + 88619765-ccb3-46c6-ac52-38e9c992ebd4 + + + Normal + b75fecce-942b-4aed-abc9-e6a02e460fb3 + + Normal + 911b6018-f537-43e8-a417-da56b22f9aec + diff --git a/SSL/src/InformationRegisters/ЗамерыОбластиСтатистики/Forms/ФормаСписка/Form.form b/SSL/src/InformationRegisters/ЗамерыОбластиСтатистики/Forms/ФормаСписка/Form.form new file mode 100644 index 000000000..f2d08d945 --- /dev/null +++ b/SSL/src/InformationRegisters/ЗамерыОбластиСтатистики/Forms/ФормаСписка/Form.form @@ -0,0 +1,652 @@ + + + + СписокКомпоновщикНастроекПользовательскиеНастройки + 1 + true + true + + true + + + <key>ru</key> + <value>Группа пользовательских настроек</value> + + false + + СписокКомпоновщикНастроекПользовательскиеНастройкиРасширеннаяПодсказка + 2 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + WeakSeparation + true + true + Auto + Auto + + + + Список + 3 + true + true + + true + + + Список + + true + None + + ГруппаПериод + 41 + + Период + 43 + + <key>ru</key> + <value>Период начало</value> + + true + true + + true + + + Список.Период + + + ПериодРасширеннаяПодсказка + 45 + Label + true + true + + Left + + + + ПериодКонтекстноеМеню + 44 + true + + LabelField + Enter + true + Left + true + + true + true + + + + ПериодОкончание + 46 + + <key>ru</key> + <value>Период окончание</value> + + true + true + + true + + + Список.ПериодОкончание + + + ПериодОкончаниеРасширеннаяПодсказка + 48 + Label + true + true + + Left + + + + ПериодОкончаниеКонтекстноеМеню + 47 + true + + LabelField + Enter + true + Left + true + + true + true + + + true + true + + true + + + <key>ru</key> + <value>Группа период</value> + + + ru + Группа период + + + ГруппаПериодРасширеннаяПодсказка + 42 + Label + true + true + + Left + + + ColumnGroup + + Vertical + auto + true + + + + ГруппаОперация + 37 + + ОперацияСтатистикиНаименование + 49 + + <key>ru</key> + <value>Операция</value> + + true + true + + true + + + Список.ОперацияСтатистикиНаименование + + + ОперацияСтатистикиНаименованиеРасширеннаяПодсказка + 51 + Label + true + true + + Left + + + + ОперацияСтатистикиНаименованиеКонтекстноеМеню + 50 + true + + LabelField + Enter + true + Left + true + + true + true + + + + ОперацияСтатистики + 52 + + <key>ru</key> + <value>Операция ссылка</value> + + true + true + + true + + + Список.ОперацияСтатистики + + + ОперацияСтатистикиРасширеннаяПодсказка + 54 + Label + true + true + + Left + + + + ОперацияСтатистикиКонтекстноеМеню + 53 + true + + LabelField + Enter + true + Left + true + + true + true + + + true + true + + true + + + <key>ru</key> + <value>Группа операция</value> + + + ru + Группа операция + + + ГруппаОперацияРасширеннаяПодсказка + 38 + Label + true + true + + Left + + + ColumnGroup + + Vertical + auto + true + + + + ГруппаОбласть + 39 + + ОбластьСтатистикиНаименование + 55 + + <key>ru</key> + <value>Область</value> + + true + true + + true + + + Список.ОбластьСтатистикиНаименование + + + ОбластьСтатистикиНаименованиеРасширеннаяПодсказка + 57 + Label + true + true + + Left + + + + ОбластьСтатистикиНаименованиеКонтекстноеМеню + 56 + true + + LabelField + Enter + true + Left + true + + true + true + + + + ОбластьСтатистики + 58 + + <key>ru</key> + <value>Область ссылка</value> + + true + true + + true + + + Список.ОбластьСтатистики + + + ОбластьСтатистикиРасширеннаяПодсказка + 60 + Label + true + true + + Left + + + + ОбластьСтатистикиКонтекстноеМеню + 59 + true + + LabelField + Enter + true + Left + true + + true + true + + + true + true + + true + + + <key>ru</key> + <value>Группа область</value> + + + ru + Группа область + + + ГруппаОбластьРасширеннаяПодсказка + 40 + Label + true + true + + Left + + + ColumnGroup + + Vertical + auto + true + + + + КоличествоЗначений + 61 + true + true + + true + + + Список.КоличествоЗначений + + + КоличествоЗначенийРасширеннаяПодсказка + 63 + Label + true + true + + Left + + + + КоличествоЗначенийКонтекстноеМеню + 62 + true + + LabelField + Enter + true + Left + true + + true + true + + + + ИдентификаторУдаления + 64 + true + true + + true + + + Список.ИдентификаторУдаления + + + ИдентификаторУдаленияРасширеннаяПодсказка + 66 + Label + true + true + + Left + + + + ИдентификаторУдаленияКонтекстноеМеню + 65 + true + + LabelField + Enter + true + Left + true + + true + true + + + None + + СписокКоманднаяПанель + 5 + Left + + + СписокСтрокаПоиска + 7 + + СписокСтрокаПоискаРасширеннаяПодсказка + 9 + Label + true + true + + Left + + + + СписокСтрокаПоискаКонтекстноеМеню + 8 + true + + Список + + true + + + + СписокСостояниеПросмотра + 10 + + СписокСостояниеПросмотраРасширеннаяПодсказка + 12 + Label + true + true + + Left + + + + СписокСостояниеПросмотраКонтекстноеМеню + 11 + true + + ViewStatusAddition + Список + + true + + + + СписокУправлениеПоиском + 13 + + СписокУправлениеПоискомРасширеннаяПодсказка + 15 + Label + true + true + + Left + + + + СписокУправлениеПоискомКонтекстноеМеню + 14 + true + + SearchControlAddition + Список + + true + + + + СписокРасширеннаяПодсказка + 6 + Label + true + true + + Left + + + + СписокКонтекстноеМеню + 4 + true + + true + true + true + true + true + MultiRow +
      true
      + 1 + 1 + AutoUse + AutoUse + true + true + Auto + Auto + ExpandTopLevel + true + true + true + + Список.DefaultPicture + + None + None + true + + 60 + + 0001-01-01T00:00:00 + 0001-01-01T00:00:00 + + + true + true + СписокКомпоновщикНастроекПользовательскиеНастройки + +
      + + ФормаКоманднаяПанель + -1 + Left + true + + DontBlock + true + true + true + Vertical + true + true + true + auto + true + + Список + 1 + + DynamicList + + + true + + + true + +
      true
      + + ВЫБРАТЬ + ЗамерыОбластиСтатистики.Период КАК Период, + ЗамерыОбластиСтатистики.ПериодОкончание КАК ПериодОкончание, + ЗамерыОбластиСтатистики.ОперацияСтатистики КАК ОперацияСтатистики, + ОперацииСтатистики.Наименование КАК ОперацияСтатистикиНаименование, + ЗамерыОбластиСтатистики.ОбластьСтатистики КАК ОбластьСтатистики, + ОбластиСтатистики.Наименование КАК ОбластьСтатистикиНаименование, + ЗамерыОбластиСтатистики.ИдентификаторУдаления КАК ИдентификаторУдаления, + ЗамерыОбластиСтатистики.КоличествоЗначений КАК КоличествоЗначений +ИЗ + РегистрСведений.ЗамерыОбластиСтатистики КАК ЗамерыОбластиСтатистики +ЛЕВОЕ СОЕДИНЕНИЕ + РегистрСведений.ОперацииСтатистики КАК ОперацииСтатистики +ПО + ЗамерыОбластиСтатистики.ОперацияСтатистики = ОперацииСтатистики.ИдентификаторОперации +ЛЕВОЕ СОЕДИНЕНИЕ + РегистрСведений.ОбластиСтатистики КАК ОбластиСтатистики +ПО + ЗамерыОбластиСтатистики.ОбластьСтатистики = ОбластиСтатистики.ИдентификаторОбласти + InformationRegister.ЗамерыОбластиСтатистики + true + true + true + true + true + +
      + + + + + +
      diff --git a/SSL/src/InformationRegisters/ЗамерыОбластиСтатистики/ManagerModule.bsl b/SSL/src/InformationRegisters/ЗамерыОбластиСтатистики/ManagerModule.bsl new file mode 100644 index 000000000..9b6545786 --- /dev/null +++ b/SSL/src/InformationRegisters/ЗамерыОбластиСтатистики/ManagerModule.bsl @@ -0,0 +1,132 @@ +#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда + +#Область СлужебныеПроцедурыИФункции + +Процедура ЗаписатьЗамеры(Замеры) Экспорт + Если ТипЗнч(Замеры) = Тип("РезультатЗапроса") Тогда + ЗаписатьРезультатЗапроса(Замеры); + КонецЕсли; +КонецПроцедуры + +Процедура ЗаписатьРезультатЗапроса(Замеры) + Если НЕ Замеры.Пустой() Тогда + НаборЗаписей = РегистрыСведений.ЗамерыОбластиСтатистики.СоздатьНаборЗаписей(); + + Выборка = Замеры.Выбрать(); + Пока Выборка.Следующий() Цикл + НовЗапись = НаборЗаписей.Добавить(); + НовЗапись.Период = Выборка.Период; + НовЗапись.ОперацияСтатистики = Выборка.ОперацияСтатистики; + НовЗапись.ОбластьСтатистики = Выборка.ОбластьСтатистики; + НовЗапись.ИдентификаторУдаления = Выборка.ИдентификаторУдаления; + НовЗапись.КоличествоЗначений = Выборка.КоличествоЗначений; + НовЗапись.ПериодОкончание = Выборка.ПериодОкончание; + КонецЦикла; + + НаборЗаписей.ОбменДанными.Загрузка = Истина; + НаборЗаписей.Записать(Ложь); + КонецЕсли; +КонецПроцедуры + +Функция ПолучитьАгрегированныеЗаписи(ГраницаАгрегирования, ОбработатьЗаписиДо, ПериодАгрегации, ПериодУдаления) Экспорт + Запрос = Новый Запрос; + Запрос.Текст = " + |ВЫБРАТЬ + | ДОБАВИТЬКДАТЕ(ДАТАВРЕМЯ(2015,1,1),СЕКУНДА, ВЫРАЗИТЬ((РАЗНОСТЬДАТ(ДАТАВРЕМЯ(2015,1,1), ЗамерыОбластиСтатистики.Период, СЕКУНДА) + 63555667200)/&ПериодАгрегации - 0.5 КАК ЧИСЛО(11,0)) * &ПериодАгрегации - 63555667200) КАК Период, + | ДОБАВИТЬКДАТЕ(ДАТАВРЕМЯ(2015,1,1),СЕКУНДА, ВЫРАЗИТЬ((РАЗНОСТЬДАТ(ДАТАВРЕМЯ(2015,1,1), ЗамерыОбластиСтатистики.Период, СЕКУНДА) + 63555667200)/&ПериодАгрегации - 0.5 КАК ЧИСЛО(11,0)) * &ПериодАгрегации - 63555667200 + &ПериодАгрегации - 1) КАК ПериодОкончание, + | ДОБАВИТЬКДАТЕ(ДАТАВРЕМЯ(2015,1,1),СЕКУНДА, ВЫРАЗИТЬ((РАЗНОСТЬДАТ(ДАТАВРЕМЯ(2015,1,1), ЗамерыОбластиСтатистики.Период, СЕКУНДА) + 63555667200)/&ПериодУдаления - 0.5 КАК ЧИСЛО(11,0)) * &ПериодУдаления - 63555667200) КАК ИдентификаторУдаления, + | ЗамерыОбластиСтатистики.ОперацияСтатистики, + | ЗамерыОбластиСтатистики.ОбластьСтатистики, + | СУММА(ЗамерыОбластиСтатистики.КоличествоЗначений) КАК КоличествоЗначений + |ИЗ + | РегистрСведений.ЗамерыОбластиСтатистики КАК ЗамерыОбластиСтатистики + |ГДЕ + | ЗамерыОбластиСтатистики.Период >= &ГраницаАгрегирования + | И ЗамерыОбластиСтатистики.Период < &ОбработатьЗаписиДо + |СГРУППИРОВАТЬ ПО + | ДОБАВИТЬКДАТЕ(ДАТАВРЕМЯ(2015,1,1),СЕКУНДА, ВЫРАЗИТЬ((РАЗНОСТЬДАТ(ДАТАВРЕМЯ(2015,1,1), ЗамерыОбластиСтатистики.Период, СЕКУНДА) + 63555667200)/&ПериодАгрегации - 0.5 КАК ЧИСЛО(11,0)) * &ПериодАгрегации - 63555667200), + | ДОБАВИТЬКДАТЕ(ДАТАВРЕМЯ(2015,1,1),СЕКУНДА, ВЫРАЗИТЬ((РАЗНОСТЬДАТ(ДАТАВРЕМЯ(2015,1,1), ЗамерыОбластиСтатистики.Период, СЕКУНДА) + 63555667200)/&ПериодАгрегации - 0.5 КАК ЧИСЛО(11,0)) * &ПериодАгрегации - 63555667200 + &ПериодАгрегации - 1), + | ДОБАВИТЬКДАТЕ(ДАТАВРЕМЯ(2015,1,1),СЕКУНДА, ВЫРАЗИТЬ((РАЗНОСТЬДАТ(ДАТАВРЕМЯ(2015,1,1), ЗамерыОбластиСтатистики.Период, СЕКУНДА) + 63555667200)/&ПериодУдаления - 0.5 КАК ЧИСЛО(11,0)) * &ПериодУдаления - 63555667200), + | ЗамерыОбластиСтатистики.ОперацияСтатистики, + | ЗамерыОбластиСтатистики.ОбластьСтатистики + |"; + + Запрос.УстановитьПараметр("ГраницаАгрегирования", ГраницаАгрегирования); + Запрос.УстановитьПараметр("ОбработатьЗаписиДо", ОбработатьЗаписиДо); + Запрос.УстановитьПараметр("ПериодАгрегации", ПериодАгрегации); + Запрос.УстановитьПараметр("ПериодУдаления", ПериодУдаления); + РезультатЗапроса = Запрос.Выполнить(); + + Возврат РезультатЗапроса; +КонецФункции + +Процедура УдалитьЗаписи(ГраницаАгрегирования, ОбработатьЗаписиДо) Экспорт + Запрос = Новый Запрос; + Запрос.Текст = " + |ВЫБРАТЬ РАЗЛИЧНЫЕ + | ЗамерыОбластиСтатистики.ИдентификаторУдаления + |ИЗ + | РегистрСведений.ЗамерыОбластиСтатистики КАК ЗамерыОбластиСтатистики + |ГДЕ + | ЗамерыОбластиСтатистики.Период >= &ГраницаАгрегирования + | И ЗамерыОбластиСтатистики.Период < &ОбработатьЗаписиДо + |"; + + Запрос.УстановитьПараметр("ГраницаАгрегирования", ГраницаАгрегирования); + Запрос.УстановитьПараметр("ОбработатьЗаписиДо", ОбработатьЗаписиДо); + + РезультатЗапроса = Запрос.Выполнить(); + Выборка = РезультатЗапроса.Выбрать(); + + НаборЗаписей = РегистрыСведений.ЗамерыОбластиСтатистики.СоздатьНаборЗаписей(); + Пока Выборка.Следующий() Цикл + + НаборЗаписей.Отбор.ИдентификаторУдаления.Установить(Выборка.ИдентификаторУдаления); + НаборЗаписей.Записать(Истина); + КонецЦикла; +КонецПроцедуры + +Функция ПолучитьЗамеры(ДатаНачала, ДатаОкончания, ПериодУдаления) Экспорт + Запрос = Новый Запрос; + Запрос.Текст = " + |ВЫБРАТЬ + | ОперацииСтатистики.Наименование КАК ОперацияСтатистики, + | ДОБАВИТЬКДАТЕ(ДАТАВРЕМЯ(2015,1,1),СЕКУНДА, ВЫРАЗИТЬ((РАЗНОСТЬДАТ(ДАТАВРЕМЯ(2015,1,1), ЗамерыОбластиСтатистики.Период, СЕКУНДА) + 63555667200)/&ПериодУдаления - 0.5 КАК ЧИСЛО(11,0)) * &ПериодУдаления - 63555667200) КАК Период, + | ОбластиСтатистики.Наименование КАК ОбластьСтатистики, + | СУММА(ЗамерыОбластиСтатистики.КоличествоЗначений) КАК КоличествоЗначений + |ИЗ + | РегистрСведений.ЗамерыОбластиСтатистики КАК ЗамерыОбластиСтатистики + |ВНУТРЕННЕЕ СОЕДИНЕНИЕ + | РегистрСведений.ОперацииСтатистики КАК ОперацииСтатистики + |ПО + | ЗамерыОбластиСтатистики.ОперацияСтатистики = ОперацииСтатистики.ИдентификаторОперации + |ВНУТРЕННЕЕ СОЕДИНЕНИЕ + | РегистрСведений.ОбластиСтатистики КАК ОбластиСтатистики + |ПО + | ЗамерыОбластиСтатистики.ОбластьСтатистики = ОбластиСтатистики.ИдентификаторОбласти + |ГДЕ + | ЗамерыОбластиСтатистики.Период >= &ДатаНачала + | И ЗамерыОбластиСтатистики.ПериодОкончание <= &ДатаОкончания + | И ЗамерыОбластиСтатистики.ИдентификаторУдаления < ДОБАВИТЬКДАТЕ(ДАТАВРЕМЯ(2015,1,1),СЕКУНДА, ВЫРАЗИТЬ((РАЗНОСТЬДАТ(ДАТАВРЕМЯ(2015,1,1), &ДатаОкончания, СЕКУНДА) + 63555667200)/&ПериодУдаления - 0.5 КАК ЧИСЛО(11,0)) * &ПериодУдаления - 63555667200) + |СГРУППИРОВАТЬ ПО + | ДОБАВИТЬКДАТЕ(ДАТАВРЕМЯ(2015,1,1),СЕКУНДА, ВЫРАЗИТЬ((РАЗНОСТЬДАТ(ДАТАВРЕМЯ(2015,1,1), ЗамерыОбластиСтатистики.Период, СЕКУНДА) + 63555667200)/&ПериодУдаления - 0.5 КАК ЧИСЛО(11,0)) * &ПериодУдаления - 63555667200), + | ОперацииСтатистики.Наименование, + | ОбластиСтатистики.Наименование + |УПОРЯДОЧИТЬ ПО + | ДОБАВИТЬКДАТЕ(ДАТАВРЕМЯ(2015,1,1),СЕКУНДА, ВЫРАЗИТЬ((РАЗНОСТЬДАТ(ДАТАВРЕМЯ(2015,1,1), ЗамерыОбластиСтатистики.Период, СЕКУНДА) + 63555667200)/&ПериодУдаления - 0.5 КАК ЧИСЛО(11,0)) * &ПериодУдаления - 63555667200), + | ОперацииСтатистики.Наименование, + | ОбластиСтатистики.Наименование + |"; + + Запрос.УстановитьПараметр("ДатаНачала", ДатаНачала); + Запрос.УстановитьПараметр("ДатаОкончания", ДатаОкончания); + Запрос.УстановитьПараметр("ПериодУдаления", ПериодУдаления); + + РезультатЗапроса = Запрос.Выполнить(); + + Возврат РезультатЗапроса; +КонецФункции + +#КонецОбласти + +#КонецЕсли \ No newline at end of file diff --git a/SSL/src/InformationRegisters/ЗамерыОбластиСтатистики/ЗамерыОбластиСтатистики.mdo b/SSL/src/InformationRegisters/ЗамерыОбластиСтатистики/ЗамерыОбластиСтатистики.mdo new file mode 100644 index 000000000..b5eb07169 --- /dev/null +++ b/SSL/src/InformationRegisters/ЗамерыОбластиСтатистики/ЗамерыОбластиСтатистики.mdo @@ -0,0 +1,148 @@ + + + + + + + + + + + + ЗамерыОбластиСтатистики + + ru + Замеры области статистики + + true + InDialog + InformationRegister.ЗамерыОбластиСтатистики.Form.ФормаСписка + + Use + Active + + Use + + + + + Use + LineNumber + + Use + + + + + Use + Recorder + + Use + + + + + Use + Period + + ShowError + Use + + + + Second + true + Managed + + КоличествоЗначений + + ru + Количество значений + + + Number + + 10 + + + + + Use + Use + + + + ПериодОкончание + + ru + Период окончание + + + Date + + + + + Use + Use + + true + + + ОперацияСтатистики + + ru + Операция статистики + + + UUID + + + + Use + + true + + + ОбластьСтатистики + + ru + Область статистики + + + UUID + + + + Use + + true + + + ИдентификаторУдаления + + ru + Идентификатор удаления + + + Date + + + + + Index + Use + Use + + true + + + ФормаСписка + + ru + Форма списка + + PersonalComputer + MobileDevice + + diff --git a/SSL/src/InformationRegisters/ЗамерыОперацииСтатистики/Forms/ФормаСписка/Attributes/Список/ExtInfo/ListSettings.dcss b/SSL/src/InformationRegisters/ЗамерыОперацииСтатистики/Forms/ФормаСписка/Attributes/Список/ExtInfo/ListSettings.dcss new file mode 100644 index 000000000..61e6fb4bb --- /dev/null +++ b/SSL/src/InformationRegisters/ЗамерыОперацииСтатистики/Forms/ФормаСписка/Attributes/Список/ExtInfo/ListSettings.dcss @@ -0,0 +1,17 @@ + + + + Normal + dfcece9d-5077-440b-b6b3-45a5cb4538eb + + + Normal + 88619765-ccb3-46c6-ac52-38e9c992ebd4 + + + Normal + b75fecce-942b-4aed-abc9-e6a02e460fb3 + + Normal + 911b6018-f537-43e8-a417-da56b22f9aec + diff --git a/SSL/src/InformationRegisters/ЗамерыОперацииСтатистики/Forms/ФормаСписка/Form.form b/SSL/src/InformationRegisters/ЗамерыОперацииСтатистики/Forms/ФормаСписка/Form.form new file mode 100644 index 000000000..1e703a8a2 --- /dev/null +++ b/SSL/src/InformationRegisters/ЗамерыОперацииСтатистики/Forms/ФормаСписка/Form.form @@ -0,0 +1,518 @@ + + + + СписокКомпоновщикНастроекПользовательскиеНастройки + 1 + true + true + + true + + + <key>ru</key> + <value>Группа пользовательских настроек</value> + + false + + СписокКомпоновщикНастроекПользовательскиеНастройкиРасширеннаяПодсказка + 2 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + WeakSeparation + true + true + Auto + Auto + + + + Список + 3 + true + true + + true + + + Список + + true + None + + ГруппаПериод + 22 + + Период + 38 + true + true + + true + + + Список.Период + + + ПериодРасширеннаяПодсказка + 40 + Label + true + true + + Left + + + + ПериодКонтекстноеМеню + 39 + true + + LabelField + Enter + true + Left + true + + true + true + + + + ПериодОкончание + 41 + true + true + + true + + + Список.ПериодОкончание + + + ПериодОкончаниеРасширеннаяПодсказка + 43 + Label + true + true + + Left + + + + ПериодОкончаниеКонтекстноеМеню + 42 + true + + LabelField + Enter + true + Left + true + + true + true + + + true + true + + true + + + <key>ru</key> + <value>Группа период</value> + + + ru + Группа период + + + ГруппаПериодРасширеннаяПодсказка + 23 + Label + true + true + + Left + + + ColumnGroup + + Vertical + auto + true + + + + ГруппаОперация + 24 + + ОперацияСтатистикиНаименование + 44 + true + true + + true + + + Список.ОперацияСтатистикиНаименование + + + ОперацияСтатистикиНаименованиеРасширеннаяПодсказка + 46 + Label + true + true + + Left + + + + ОперацияСтатистикиНаименованиеКонтекстноеМеню + 45 + true + + LabelField + Enter + true + Left + true + + true + true + + + + ОперацияСтатистики + 47 + true + true + + true + + + Список.ОперацияСтатистики + + + ОперацияСтатистикиРасширеннаяПодсказка + 49 + Label + true + true + + Left + + + + ОперацияСтатистикиКонтекстноеМеню + 48 + true + + LabelField + Enter + true + Left + true + + true + true + + + true + true + + true + + + <key>ru</key> + <value>Группа операция</value> + + + ru + Группа операция + + + ГруппаОперацияРасширеннаяПодсказка + 25 + Label + true + true + + Left + + + ColumnGroup + + Vertical + auto + true + + + + СуммаЗначений + 50 + true + true + + true + + + Список.СуммаЗначений + + + СуммаЗначенийРасширеннаяПодсказка + 52 + Label + true + true + + Left + + + + СуммаЗначенийКонтекстноеМеню + 51 + true + + LabelField + Enter + true + Left + true + + true + true + + + + ИдентификаторУдаления + 53 + true + true + + true + + + Список.ИдентификаторУдаления + + + ИдентификаторУдаленияРасширеннаяПодсказка + 55 + Label + true + true + + Left + + + + ИдентификаторУдаленияКонтекстноеМеню + 54 + true + + LabelField + Enter + true + Left + true + + true + true + + + None + + СписокКоманднаяПанель + 5 + Left + + + СписокСтрокаПоиска + 7 + + СписокСтрокаПоискаРасширеннаяПодсказка + 9 + Label + true + true + + Left + + + + СписокСтрокаПоискаКонтекстноеМеню + 8 + true + + Список + + true + + + + СписокСостояниеПросмотра + 10 + + СписокСостояниеПросмотраРасширеннаяПодсказка + 12 + Label + true + true + + Left + + + + СписокСостояниеПросмотраКонтекстноеМеню + 11 + true + + ViewStatusAddition + Список + + true + + + + СписокУправлениеПоиском + 13 + + СписокУправлениеПоискомРасширеннаяПодсказка + 15 + Label + true + true + + Left + + + + СписокУправлениеПоискомКонтекстноеМеню + 14 + true + + SearchControlAddition + Список + + true + + + + СписокРасширеннаяПодсказка + 6 + Label + true + true + + Left + + + + СписокКонтекстноеМеню + 4 + true + + true + true + true + true + true + MultiRow +
      true
      + 1 + 1 + AutoUse + AutoUse + true + true + Auto + Auto + ExpandTopLevel + true + true + true + + Список.DefaultPicture + + None + None + true + + 60 + + 0001-01-01T00:00:00 + 0001-01-01T00:00:00 + + + true + true + СписокКомпоновщикНастроекПользовательскиеНастройки + +
      + + ФормаКоманднаяПанель + -1 + Left + true + + DontBlock + true + true + true + Vertical + true + true + true + auto + true + + Список + 1 + + DynamicList + + + true + + + true + +
      true
      + + ВЫБРАТЬ + ЗамерыОперацииСтатистики.Период КАК Период, + ЗамерыОперацииСтатистики.ПериодОкончание КАК ПериодОкончание, + ОперацииСтатистики.Наименование КАК ОперацияСтатистикиНаименование, + ЗамерыОперацииСтатистики.ОперацияСтатистики КАК ОперацияСтатистики, + ЗамерыОперацииСтатистики.ИдентификаторУдаления КАК ИдентификаторУдаления, + ЗамерыОперацииСтатистики.КоличествоЗначений КАК КоличествоЗначений, + ЗамерыОперацииСтатистики.СуммаЗначений КАК СуммаЗначений +ИЗ + РегистрСведений.ЗамерыОперацииСтатистики КАК ЗамерыОперацииСтатистики +ЛЕВОЕ СОЕДИНЕНИЕ + РегистрСведений.ОперацииСтатистики КАК ОперацииСтатистики +ПО + ЗамерыОперацииСтатистики.ОперацияСтатистики = ОперацииСтатистики.ИдентификаторОперации + InformationRegister.ЗамерыОперацииСтатистики + true + true + true + true + true + +
      + + + + + +
      diff --git a/SSL/src/InformationRegisters/ЗамерыОперацииСтатистики/ManagerModule.bsl b/SSL/src/InformationRegisters/ЗамерыОперацииСтатистики/ManagerModule.bsl new file mode 100644 index 000000000..05af60f74 --- /dev/null +++ b/SSL/src/InformationRegisters/ЗамерыОперацииСтатистики/ManagerModule.bsl @@ -0,0 +1,126 @@ +#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда + +#Область СлужебныеПроцедурыИФункции + +Процедура ЗаписатьЗамеры(Замеры) Экспорт + Если ТипЗнч(Замеры) = Тип("РезультатЗапроса") Тогда + ЗаписатьРезультатЗапроса(Замеры); + КонецЕсли; +КонецПроцедуры + +Процедура ЗаписатьРезультатЗапроса(Замеры) + Если НЕ Замеры.Пустой() Тогда + НаборЗаписей = РегистрыСведений.ЗамерыОперацииСтатистики.СоздатьНаборЗаписей(); + + Выборка = Замеры.Выбрать(); + Пока Выборка.Следующий() Цикл + НовЗапись = НаборЗаписей.Добавить(); + НовЗапись.Период = Выборка.Период; + НовЗапись.ОперацияСтатистики = Выборка.ОперацияСтатистики; + НовЗапись.ИдентификаторУдаления = Выборка.ИдентификаторУдаления; + НовЗапись.КоличествоЗначений = Выборка.КоличествоЗначений; + НовЗапись.СуммаЗначений = Выборка.СуммаЗначений; + НовЗапись.ПериодОкончание = Выборка.ПериодОкончание; + КонецЦикла; + + НаборЗаписей.ОбменДанными.Загрузка = Истина; + НаборЗаписей.Записать(Ложь); + КонецЕсли; +КонецПроцедуры + +Функция ПолучитьАгрегированныеЗаписи(ГраницаАгрегирования, ОбработатьЗаписиДо, ПериодАгрегации, ПериодУдаления) Экспорт + Запрос = Новый Запрос; + + Запрос.Текст = " + |ВЫБРАТЬ + | ДОБАВИТЬКДАТЕ(ДАТАВРЕМЯ(2015,1,1),СЕКУНДА, ВЫРАЗИТЬ((РАЗНОСТЬДАТ(ДАТАВРЕМЯ(2015,1,1), ЗамерыОперацииСтатистики.Период, СЕКУНДА) + 63555667200)/&ПериодАгрегации - 0.5 КАК ЧИСЛО(11,0)) * &ПериодАгрегации - 63555667200) КАК Период, + | ДОБАВИТЬКДАТЕ(ДАТАВРЕМЯ(2015,1,1),СЕКУНДА, ВЫРАЗИТЬ((РАЗНОСТЬДАТ(ДАТАВРЕМЯ(2015,1,1), ЗамерыОперацииСтатистики.Период, СЕКУНДА) + 63555667200)/&ПериодАгрегации - 0.5 КАК ЧИСЛО(11,0)) * &ПериодАгрегации - 63555667200 + &ПериодАгрегации - 1) КАК ПериодОкончание, + | ДОБАВИТЬКДАТЕ(ДАТАВРЕМЯ(2015,1,1),СЕКУНДА, ВЫРАЗИТЬ((РАЗНОСТЬДАТ(ДАТАВРЕМЯ(2015,1,1), ЗамерыОперацииСтатистики.Период, СЕКУНДА) + 63555667200)/&ПериодУдаления - 0.5 КАК ЧИСЛО(11,0)) * &ПериодУдаления - 63555667200) КАК ИдентификаторУдаления, + | ЗамерыОперацииСтатистики.ОперацияСтатистики, + | СУММА(ЗамерыОперацииСтатистики.КоличествоЗначений) КАК КоличествоЗначений, + | СУММА(ЗамерыОперацииСтатистики.СуммаЗначений) КАК СуммаЗначений + |ИЗ + | РегистрСведений.ЗамерыОперацииСтатистики КАК ЗамерыОперацииСтатистики + |ГДЕ + | ЗамерыОперацииСтатистики.Период >= &ГраницаАгрегирования + | И ЗамерыОперацииСтатистики.Период < &ОбработатьЗаписиДо + |СГРУППИРОВАТЬ ПО + | ДОБАВИТЬКДАТЕ(ДАТАВРЕМЯ(2015,1,1),СЕКУНДА, ВЫРАЗИТЬ((РАЗНОСТЬДАТ(ДАТАВРЕМЯ(2015,1,1), ЗамерыОперацииСтатистики.Период, СЕКУНДА) + 63555667200)/&ПериодАгрегации - 0.5 КАК ЧИСЛО(11,0)) * &ПериодАгрегации - 63555667200), + | ДОБАВИТЬКДАТЕ(ДАТАВРЕМЯ(2015,1,1),СЕКУНДА, ВЫРАЗИТЬ((РАЗНОСТЬДАТ(ДАТАВРЕМЯ(2015,1,1), ЗамерыОперацииСтатистики.Период, СЕКУНДА) + 63555667200)/&ПериодАгрегации - 0.5 КАК ЧИСЛО(11,0)) * &ПериодАгрегации - 63555667200 + &ПериодАгрегации - 1), + | ДОБАВИТЬКДАТЕ(ДАТАВРЕМЯ(2015,1,1),СЕКУНДА, ВЫРАЗИТЬ((РАЗНОСТЬДАТ(ДАТАВРЕМЯ(2015,1,1), ЗамерыОперацииСтатистики.Период, СЕКУНДА) + 63555667200)/&ПериодУдаления - 0.5 КАК ЧИСЛО(11,0)) * &ПериодУдаления - 63555667200), + | ЗамерыОперацииСтатистики.ОперацияСтатистики + |"; + + Запрос.УстановитьПараметр("ГраницаАгрегирования", ГраницаАгрегирования); + Запрос.УстановитьПараметр("ОбработатьЗаписиДо", ОбработатьЗаписиДо); + Запрос.УстановитьПараметр("ПериодАгрегации", ПериодАгрегации); + Запрос.УстановитьПараметр("ПериодУдаления", ПериодУдаления); + РезультатЗапроса = Запрос.Выполнить(); + + Возврат РезультатЗапроса; +КонецФункции + +Процедура УдалитьЗаписи(ГраницаАгрегирования, ОбработатьЗаписиДо) Экспорт + Запрос = Новый Запрос; + Запрос.Текст = " + |ВЫБРАТЬ РАЗЛИЧНЫЕ + | ЗамерыОперацииСтатистики.ИдентификаторУдаления + |ИЗ + | РегистрСведений.ЗамерыОперацииСтатистики КАК ЗамерыОперацииСтатистики + |ГДЕ + | ЗамерыОперацииСтатистики.Период >= &ГраницаАгрегирования + | И ЗамерыОперацииСтатистики.Период < &ОбработатьЗаписиДо + |"; + + Запрос.УстановитьПараметр("ГраницаАгрегирования", ГраницаАгрегирования); + Запрос.УстановитьПараметр("ОбработатьЗаписиДо", ОбработатьЗаписиДо); + + РезультатЗапроса = Запрос.Выполнить(); + Выборка = РезультатЗапроса.Выбрать(); + + НаборЗаписей = РегистрыСведений.ЗамерыОперацииСтатистики.СоздатьНаборЗаписей(); + Пока Выборка.Следующий() Цикл + + НаборЗаписей.Отбор.ИдентификаторУдаления.Установить(Выборка.ИдентификаторУдаления); + НаборЗаписей.Записать(Истина); + КонецЦикла; +КонецПроцедуры + +Функция ПолучитьЗамеры(ДатаНачала, ДатаОкончания, ПериодУдаления) Экспорт + Запрос = Новый Запрос; + Запрос.Текст = " + |ВЫБРАТЬ + | ОперацииСтатистики.Наименование КАК ОперацияСтатистики, + | ДОБАВИТЬКДАТЕ(ДАТАВРЕМЯ(2015,1,1),СЕКУНДА, ВЫРАЗИТЬ((РАЗНОСТЬДАТ(ДАТАВРЕМЯ(2015,1,1), ЗамерыОперацииСтатистики.Период, СЕКУНДА) + 63555667200)/&ПериодУдаления - 0.5 КАК ЧИСЛО(11,0)) * &ПериодУдаления - 63555667200) КАК Период, + | СУММА(ЗамерыОперацииСтатистики.КоличествоЗначений) КАК КоличествоЗначений, + | СУММА(ЗамерыОперацииСтатистики.СуммаЗначений) КАК СуммаЗначений + |ИЗ + | РегистрСведений.ЗамерыОперацииСтатистики КАК ЗамерыОперацииСтатистики + |ВНУТРЕННЕЕ СОЕДИНЕНИЕ + | РегистрСведений.ОперацииСтатистики КАК ОперацииСтатистики + |ПО + | ЗамерыОперацииСтатистики.ОперацияСтатистики = ОперацииСтатистики.ИдентификаторОперации + |ГДЕ + | ЗамерыОперацииСтатистики.Период >= &ДатаНачала + | И ЗамерыОперацииСтатистики.ПериодОкончание <= &ДатаОкончания + | И ЗамерыОперацииСтатистики.ИдентификаторУдаления < ДОБАВИТЬКДАТЕ(ДАТАВРЕМЯ(2015,1,1),СЕКУНДА, ВЫРАЗИТЬ((РАЗНОСТЬДАТ(ДАТАВРЕМЯ(2015,1,1), &ДатаОкончания, СЕКУНДА) + 63555667200)/&ПериодУдаления - 0.5 КАК ЧИСЛО(11,0)) * &ПериодУдаления - 63555667200) + |СГРУППИРОВАТЬ ПО + | ДОБАВИТЬКДАТЕ(ДАТАВРЕМЯ(2015,1,1),СЕКУНДА, ВЫРАЗИТЬ((РАЗНОСТЬДАТ(ДАТАВРЕМЯ(2015,1,1), ЗамерыОперацииСтатистики.Период, СЕКУНДА) + 63555667200)/&ПериодУдаления - 0.5 КАК ЧИСЛО(11,0)) * &ПериодУдаления - 63555667200), + | ОперацииСтатистики.Наименование + |УПОРЯДОЧИТЬ ПО + | ДОБАВИТЬКДАТЕ(ДАТАВРЕМЯ(2015,1,1),СЕКУНДА, ВЫРАЗИТЬ((РАЗНОСТЬДАТ(ДАТАВРЕМЯ(2015,1,1), ЗамерыОперацииСтатистики.Период, СЕКУНДА) + 63555667200)/&ПериодУдаления - 0.5 КАК ЧИСЛО(11,0)) * &ПериодУдаления - 63555667200), + | ОперацииСтатистики.Наименование + |"; + + Запрос.УстановитьПараметр("ДатаНачала", ДатаНачала); + Запрос.УстановитьПараметр("ДатаОкончания", ДатаОкончания); + Запрос.УстановитьПараметр("ПериодУдаления", ПериодУдаления); + + РезультатЗапроса = Запрос.Выполнить(); + + Возврат РезультатЗапроса; +КонецФункции + +#КонецОбласти + +#КонецЕсли diff --git a/SSL/src/InformationRegisters/ЗамерыОперацииСтатистики/ЗамерыОперацииСтатистики.mdo b/SSL/src/InformationRegisters/ЗамерыОперацииСтатистики/ЗамерыОперацииСтатистики.mdo new file mode 100644 index 000000000..2da8900dc --- /dev/null +++ b/SSL/src/InformationRegisters/ЗамерыОперацииСтатистики/ЗамерыОперацииСтатистики.mdo @@ -0,0 +1,153 @@ + + + + + + + + + + + + ЗамерыОперацииСтатистики + + ru + Замеры операции статистики + + true + InDialog + InformationRegister.ЗамерыОперацииСтатистики.Form.ФормаСписка + + Use + Active + + Use + + + + + Use + LineNumber + + Use + + + + + Use + Recorder + + Use + + + + + Use + Period + + ShowError + Use + + + + Second + true + Managed + + КоличествоЗначений + + ru + Количество значений + + + Number + + 15 + 3 + + + + + Use + Use + + + + СуммаЗначений + + ru + Сумма значений + + + Number + + 15 + 3 + + + + + Use + Use + + + + ПериодОкончание + + ru + Период окончание + + + Date + + + + + Use + Use + + true + + + ОперацияСтатистики + + ru + Операция статистики + + + UUID + + + + Use + + true + + + ИдентификаторУдаления + + ru + Идентификатор удаления + + + Date + + + + + Index + Use + Use + + true + + + ФормаСписка + + ru + Форма списка + + PersonalComputer + MobileDevice + + diff --git a/SSL/src/InformationRegisters/ЗапросыРазрешенийНаИспользованиеВнешнихРесурсов/ManagerModule.bsl b/SSL/src/InformationRegisters/ЗапросыРазрешенийНаИспользованиеВнешнихРесурсов/ManagerModule.bsl index 107607c4d..152be954f 100644 --- a/SSL/src/InformationRegisters/ЗапросыРазрешенийНаИспользованиеВнешнихРесурсов/ManagerModule.bsl +++ b/SSL/src/InformationRegisters/ЗапросыРазрешенийНаИспользованиеВнешнихРесурсов/ManagerModule.bsl @@ -184,8 +184,8 @@ КлючЗаписи = СоздатьКлючЗаписи(Новый Структура("ИдентификаторЗапроса", Выборка.ИдентификаторЗапроса)); ЗаблокироватьДанныеДляРедактирования(КлючЗаписи); - Если Выборка.Операция = Перечисления.ОперацииАдминистрированияПрофилейБезопасности.Создание ИЛИ - Выборка.Операция = Перечисления.ОперацииАдминистрированияПрофилейБезопасности.Удаление Тогда + Если Выборка.Операция = Перечисления.ОперацииАдминистрированияПрофилейБезопасности.Создание + ИЛИ Выборка.Операция = Перечисления.ОперацииАдминистрированияПрофилейБезопасности.Удаление Тогда Менеджер.ДобавитьИдентификаторЗапроса(Выборка.ИдентификаторЗапроса); diff --git a/SSL/src/InformationRegisters/ЗначенияГруппДоступа/Forms/ФормаЗаписи/Form.form b/SSL/src/InformationRegisters/ЗначенияГруппДоступа/Forms/ФормаЗаписи/Form.form index d2f1da1aa..fd771f506 100644 --- a/SSL/src/InformationRegisters/ЗначенияГруппДоступа/Forms/ФормаЗаписи/Form.form +++ b/SSL/src/InformationRegisters/ЗначенияГруппДоступа/Forms/ФормаЗаписи/Form.form @@ -162,7 +162,6 @@ true true true - UseIfNecessary auto true @@ -199,7 +198,7 @@ ВключитьВозможностьРедактирования - Auto + DontUse Auto diff --git a/SSL/src/InformationRegisters/ЗначенияГруппДоступа/Forms/ФормаСписка/Form.form b/SSL/src/InformationRegisters/ЗначенияГруппДоступа/Forms/ФормаСписка/Form.form index 918ff307b..68ad6dd69 100644 --- a/SSL/src/InformationRegisters/ЗначенияГруппДоступа/Forms/ФормаСписка/Form.form +++ b/SSL/src/InformationRegisters/ЗначенияГруппДоступа/Forms/ФормаСписка/Form.form @@ -163,6 +163,7 @@ Left true + 20 true true @@ -200,6 +201,7 @@ Left true + 20 true true @@ -207,6 +209,11 @@ СписокЗначениеРазрешено 21 + + <key>ru</key> + <value>Значение +разрешено</value> + true true @@ -236,6 +243,7 @@ Left true + 9 true true @@ -344,7 +352,7 @@ true MultiRow
      true
      - 1 + 2 1 AutoUse AutoUse @@ -394,7 +402,6 @@ true true true - UseIfNecessary auto true @@ -437,7 +444,7 @@ ВключитьВозможностьРедактирования - Auto + DontUse Auto @@ -459,7 +466,7 @@ ОбновитьДанныеРегистра - Auto + DontUse Auto diff --git a/SSL/src/InformationRegisters/ЗначенияГруппДоступа/ManagerModule.bsl b/SSL/src/InformationRegisters/ЗначенияГруппДоступа/ManagerModule.bsl index 183ed9fee..a31d5c43d 100644 --- a/SSL/src/InformationRegisters/ЗначенияГруппДоступа/ManagerModule.bsl +++ b/SSL/src/InformationRegisters/ЗначенияГруппДоступа/ManagerModule.bsl @@ -29,12 +29,19 @@ ИспользуемыеВидыДоступа = Новый ТаблицаЗначений; ИспользуемыеВидыДоступа.Колонки.Добавить("ВидДоступа", Метаданные.ОпределяемыеТипы.ЗначениеДоступа.Тип); + ИспользуемыеВидыДоступа.Колонки.Добавить("ВидДоступаПользователи", Новый ОписаниеТипов("Булево")); + ИспользуемыеВидыДоступа.Колонки.Добавить("ВидДоступаВнешниеПользователи", Новый ОписаниеТипов("Булево")); СвойстваВидовДоступа = УправлениеДоступомСлужебный.СвойстваВидаДоступа(); Для каждого СвойстваВидаДоступа Из СвойстваВидовДоступа Цикл - Если УправлениеДоступомСлужебный.ВидДоступаИспользуется(СвойстваВидаДоступа.Ссылка) Тогда - ИспользуемыеВидыДоступа.Добавить().ВидДоступа = СвойстваВидаДоступа.Ссылка; + Если Не УправлениеДоступомСлужебный.ВидДоступаИспользуется(СвойстваВидаДоступа.Ссылка) + И Не СвойстваВидаДоступа.Имя = "ДополнительныеОтчетыИОбработки" Тогда + Продолжить; КонецЕсли; + НоваяСтрока = ИспользуемыеВидыДоступа.Добавить(); + НоваяСтрока.ВидДоступа = СвойстваВидаДоступа.Ссылка; + НоваяСтрока.ВидДоступаПользователи = (СвойстваВидаДоступа.Имя = "Пользователи"); + НоваяСтрока.ВидДоступаВнешниеПользователи = (СвойстваВидаДоступа.Имя = "ВнешниеПользователи"); КонецЦикла; ОбновитьРазрешенныеЗначения(ИспользуемыеВидыДоступа, ГруппыДоступа, ЕстьИзменения); @@ -61,7 +68,9 @@ ТекстЗапросовВременныхТаблиц = "ВЫБРАТЬ - | ИспользуемыеВидыДоступа.ВидДоступа + | ИспользуемыеВидыДоступа.ВидДоступа, + | ИспользуемыеВидыДоступа.ВидДоступаПользователи, + | ИспользуемыеВидыДоступа.ВидДоступаВнешниеПользователи |ПОМЕСТИТЬ ИспользуемыеВидыДоступа |ИЗ | &ИспользуемыеВидыДоступа КАК ИспользуемыеВидыДоступа @@ -72,6 +81,33 @@ | |//////////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ + | НазначениеПрофилей.Профиль, + | ИспользуемыеВидыДоступа.ВидДоступа + |ПОМЕСТИТЬ ВидыДоступаПрофилейВсеЗапрещены + |ИЗ + | ИспользуемыеВидыДоступа КАК ИспользуемыеВидыДоступа + | ВНУТРЕННЕЕ СОЕДИНЕНИЕ (ВЫБРАТЬ + | Назначение.Ссылка КАК Профиль, + | МИНИМУМ(ТИПЗНАЧЕНИЯ(Назначение.ТипПользователей) = ТИП(Справочник.Пользователи)) КАК ТолькоДляПользователей, + | МИНИМУМ(ТИПЗНАЧЕНИЯ(Назначение.ТипПользователей) <> ТИП(Справочник.Пользователи) + | И Назначение.ТипПользователей <> НЕОПРЕДЕЛЕНО) КАК ТолькоДляВнешнихПользователей + | ИЗ + | Справочник.ПрофилиГруппДоступа.Назначение КАК Назначение + | + | СГРУППИРОВАТЬ ПО + | Назначение.Ссылка) КАК НазначениеПрофилей + | ПО (НЕ(НЕ(ИспользуемыеВидыДоступа.ВидДоступаПользователи + | И НЕ НазначениеПрофилей.ТолькоДляПользователей) + | И НЕ(ИспользуемыеВидыДоступа.ВидДоступаВнешниеПользователи + | И НЕ НазначениеПрофилей.ТолькоДляВнешнихПользователей))) + | + |ИНДЕКСИРОВАТЬ ПО + | НазначениеПрофилей.Профиль, + | ИспользуемыеВидыДоступа.ВидДоступа + |; + | + |//////////////////////////////////////////////////////////////////////////////// + |ВЫБРАТЬ | ТипыГруппИЗначенийВидовДоступа.ВидДоступа, | ТипыГруппИЗначенийВидовДоступа.ТипГруппИЗначений |ПОМЕСТИТЬ ТипыГруппИЗначенийВидовДоступа @@ -85,6 +121,7 @@ | |//////////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ + | ГруппыДоступа.Профиль КАК Профиль, | ГруппыДоступа.Ссылка КАК ГруппаДоступа, | ЗначенияДоступаПрофиля.ВидДоступа, | ЗначенияДоступаПрофиля.ЗначениеДоступа, @@ -109,6 +146,7 @@ |ОБЪЕДИНИТЬ ВСЕ | |ВЫБРАТЬ + | ЗаданныеВидыДоступа.Ссылка, | ВидыДоступа.Ссылка, | ЗначенияДоступа.ВидДоступа, | ЗначенияДоступа.ЗначениеДоступа, @@ -144,6 +182,12 @@ | И (ТИПЗНАЧЕНИЯ(НастройкиЗначений.ЗначениеДоступа) = ТИПЗНАЧЕНИЯ(ТипыГруппИЗначенийВидовДоступа.ТипГруппИЗначений)) | ВНУТРЕННЕЕ СОЕДИНЕНИЕ ИспользуемыеВидыДоступа КАК ИспользуемыеВидыДоступа | ПО НастройкиЗначений.ВидДоступа = ИспользуемыеВидыДоступа.ВидДоступа + | И (НЕ (НастройкиЗначений.Профиль, НастройкиЗначений.ВидДоступа) В + | (ВЫБРАТЬ + | ВидыДоступаПрофилейВсеЗапрещены.Профиль, + | ВидыДоступаПрофилейВсеЗапрещены.ВидДоступа + | ИЗ + | ВидыДоступаПрофилейВсеЗапрещены КАК ВидыДоступаПрофилейВсеЗапрещены)) | |СГРУППИРОВАТЬ ПО | НастройкиЗначений.ГруппаДоступа, @@ -202,7 +246,9 @@ ТекстЗапросовВременныхТаблиц = "ВЫБРАТЬ - | ИспользуемыеВидыДоступа.ВидДоступа + | ИспользуемыеВидыДоступа.ВидДоступа, + | ИспользуемыеВидыДоступа.ВидДоступаПользователи, + | ИспользуемыеВидыДоступа.ВидДоступаВнешниеПользователи |ПОМЕСТИТЬ ИспользуемыеВидыДоступа |ИЗ | &ИспользуемыеВидыДоступа КАК ИспользуемыеВидыДоступа @@ -213,6 +259,34 @@ | |//////////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ + | НазначениеПрофилей.Профиль, + | ИспользуемыеВидыДоступа.ВидДоступа, + | ЛОЖЬ КАК ЗначениеЛожь + |ПОМЕСТИТЬ ВидыДоступаПрофилейВсеЗапрещены + |ИЗ + | ИспользуемыеВидыДоступа КАК ИспользуемыеВидыДоступа + | ВНУТРЕННЕЕ СОЕДИНЕНИЕ (ВЫБРАТЬ + | Назначение.Ссылка КАК Профиль, + | МИНИМУМ(ТИПЗНАЧЕНИЯ(Назначение.ТипПользователей) = ТИП(Справочник.Пользователи)) КАК ТолькоДляПользователей, + | МИНИМУМ(ТИПЗНАЧЕНИЯ(Назначение.ТипПользователей) <> ТИП(Справочник.Пользователи) + | И Назначение.ТипПользователей <> НЕОПРЕДЕЛЕНО) КАК ТолькоДляВнешнихПользователей + | ИЗ + | Справочник.ПрофилиГруппДоступа.Назначение КАК Назначение + | + | СГРУППИРОВАТЬ ПО + | Назначение.Ссылка) КАК НазначениеПрофилей + | ПО (НЕ(НЕ(ИспользуемыеВидыДоступа.ВидДоступаПользователи + | И НЕ НазначениеПрофилей.ТолькоДляПользователей) + | И НЕ(ИспользуемыеВидыДоступа.ВидДоступаВнешниеПользователи + | И НЕ НазначениеПрофилей.ТолькоДляВнешнихПользователей))) + | + |ИНДЕКСИРОВАТЬ ПО + | НазначениеПрофилей.Профиль, + | ИспользуемыеВидыДоступа.ВидДоступа + |; + | + |//////////////////////////////////////////////////////////////////////////////// + |ВЫБРАТЬ | ТипыГруппИЗначенийВидовДоступа.ВидДоступа, | ТипыГруппИЗначенийВидовДоступа.ТипГруппИЗначений |ПОМЕСТИТЬ ТипыГруппИЗначенийВидовДоступа @@ -292,13 +366,17 @@ |ВЫБРАТЬ | ГруппыДоступа.Ссылка КАК ГруппаДоступа, | ТипыГруппИЗначенийВидовДоступа.ТипГруппИЗначений КАК ТипЗначенийДоступа, - | МАКСИМУМ(ЕСТЬNULL(НастройкиВидовДоступа.ВсеРазрешены, ИСТИНА)) КАК ВсеРазрешены, + | МАКСИМУМ(ЕСТЬNULL(ВидыДоступаПрофилейВсеЗапрещены.ЗначениеЛожь, ЕСТЬNULL(НастройкиВидовДоступа.ВсеРазрешены, ИСТИНА))) КАК ВсеРазрешены, + | МАКСИМУМ(ЕСТЬNULL(ВидыДоступаПрофилейВсеЗапрещены.ЗначениеЛожь, НастройкиВидовДоступа.ВсеРазрешены ЕСТЬ NULL )) КАК ВидДоступаНеИспользуется, | МАКСИМУМ(ЕСТЬNULL(НаличиеНастроекЗначений.СНастройкой, ЛОЖЬ)) КАК СНастройкой |ПОМЕСТИТЬ ЗаготовкаДляНовыхДанных |ИЗ | ГруппыДоступа КАК ГруппыДоступа | ВНУТРЕННЕЕ СОЕДИНЕНИЕ ТипыГруппИЗначенийВидовДоступа КАК ТипыГруппИЗначенийВидовДоступа | ПО (ИСТИНА) + | ЛЕВОЕ СОЕДИНЕНИЕ ВидыДоступаПрофилейВсеЗапрещены КАК ВидыДоступаПрофилейВсеЗапрещены + | ПО (ВидыДоступаПрофилейВсеЗапрещены.Профиль = ГруппыДоступа.Профиль) + | И (ВидыДоступаПрофилейВсеЗапрещены.ВидДоступа = ТипыГруппИЗначенийВидовДоступа.ВидДоступа) | ЛЕВОЕ СОЕДИНЕНИЕ НастройкиВидовДоступа КАК НастройкиВидовДоступа | ПО (НастройкиВидовДоступа.ГруппаДоступа = ГруппыДоступа.Ссылка) | И (НастройкиВидовДоступа.ВидДоступа = ТипыГруппИЗначенийВидовДоступа.ВидДоступа) @@ -325,7 +403,8 @@ | И ЗаготовкаДляНовыхДанных.СНастройкой = ЛОЖЬ | ТОГДА ИСТИНА | ИНАЧЕ ЛОЖЬ - | КОНЕЦ КАК БезНастройки + | КОНЕЦ КАК ВсеРазрешеныБезИсключений, + | ЗаготовкаДляНовыхДанных.ВидДоступаНеИспользуется КАК БезНастройки |ПОМЕСТИТЬ НовыеДанные |ИЗ | ЗаготовкаДляНовыхДанных КАК ЗаготовкаДляНовыхДанных @@ -334,6 +413,7 @@ | ЗаготовкаДляНовыхДанных.ГруппаДоступа, | ЗаготовкаДляНовыхДанных.ТипЗначенийДоступа, | ЗаготовкаДляНовыхДанных.ВсеРазрешены, + | ВсеРазрешеныБезИсключений, | БезНастройки |; | @@ -345,6 +425,7 @@ | НовыеДанные.ГруппаДоступа, | НовыеДанные.ТипЗначенийДоступа, | НовыеДанные.ВсеРазрешены, + | НовыеДанные.ВсеРазрешеныБезИсключений, | НовыеДанные.БезНастройки, | &ПодстановкаПоляВидИзмененияСтроки |ИЗ @@ -355,6 +436,7 @@ Поля.Добавить(Новый Структура("ГруппаДоступа", "&УсловиеОтбораГруппДоступа2")); Поля.Добавить(Новый Структура("ТипЗначенийДоступа")); Поля.Добавить(Новый Структура("ВсеРазрешены")); + Поля.Добавить(Новый Структура("ВсеРазрешеныБезИсключений")); Поля.Добавить(Новый Структура("БезНастройки")); Запрос.Текст = УправлениеДоступомСлужебный.ТекстЗапросаВыбораИзменений( diff --git a/SSL/src/InformationRegisters/ЗначенияГруппДоступаПоУмолчанию/Forms/ФормаЗаписи/Form.form b/SSL/src/InformationRegisters/ЗначенияГруппДоступаПоУмолчанию/Forms/ФормаЗаписи/Form.form index 4cf27df47..093d91d9d 100644 --- a/SSL/src/InformationRegisters/ЗначенияГруппДоступаПоУмолчанию/Forms/ФормаЗаписи/Form.form +++ b/SSL/src/InformationRegisters/ЗначенияГруппДоступаПоУмолчанию/Forms/ФормаЗаписи/Form.form @@ -116,6 +116,40 @@ true
      + + ВсеРазрешеныБезИсключений + 24 + true + true + + true + + + Запись.ВсеРазрешеныБезИсключений + + Right + + ВсеРазрешеныБезИсключенийРасширеннаяПодсказка + 26 + Label + true + true + + Left + + + + ВсеРазрешеныБезИсключенийКонтекстноеМеню + 25 + true + + CheckBoxField + Enter + true + Left + true + + БезНастройки 18 @@ -196,7 +230,6 @@ true true true - UseIfNecessary auto true @@ -233,7 +266,7 @@ ВключитьВозможностьРедактирования - Auto + DontUse Auto diff --git a/SSL/src/InformationRegisters/ЗначенияГруппДоступаПоУмолчанию/Forms/ФормаСписка/Form.form b/SSL/src/InformationRegisters/ЗначенияГруппДоступаПоУмолчанию/Forms/ФормаСписка/Form.form index 10689e8de..ad7f225e7 100644 --- a/SSL/src/InformationRegisters/ЗначенияГруппДоступаПоУмолчанию/Forms/ФормаСписка/Form.form +++ b/SSL/src/InformationRegisters/ЗначенияГруппДоступаПоУмолчанию/Forms/ФормаСписка/Form.form @@ -163,6 +163,7 @@ Left true + 20 true true @@ -245,6 +246,7 @@ Left true + 12 true true @@ -253,6 +255,48 @@ + + ВсеРазрешеныБезИсключений + 43 + + <key>ru</key> + <value>Все разрешены +без исключений</value> + + true + true + + true + + + Список.ВсеРазрешеныБезИсключений + + + ВсеРазрешеныБезИсключенийРасширеннаяПодсказка + 45 + Label + true + true + + Left + + + + ВсеРазрешеныБезИсключенийКонтекстноеМеню + 44 + true + + LabelField + Enter + true + Left + true + + 13 + true + true + + СписокБезНастройки 24 @@ -285,6 +329,7 @@ Left true + 11 true true @@ -392,7 +437,7 @@ true MultiRow
      true
      - 1 + 2 1 AutoUse AutoUse @@ -433,7 +478,8 @@ ПриСозданииНаСервере Copy - 70 + 80 + 10 DontBlock true true @@ -442,7 +488,6 @@ true true true - UseIfNecessary auto true @@ -463,6 +508,7 @@ ЗначенияГруппДоступаПоУмолчанию.ГруппаДоступа, ЗначенияГруппДоступаПоУмолчанию.ТипЗначенийДоступа, ЗначенияГруппДоступаПоУмолчанию.ВсеРазрешены, + ЗначенияГруппДоступаПоУмолчанию.ВсеРазрешеныБезИсключений, ЗначенияГруппДоступаПоУмолчанию.БезНастройки ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияГруппДоступаПоУмолчанию @@ -493,7 +539,7 @@ ВключитьВозможностьРедактирования - Auto + DontUse Auto @@ -515,7 +561,7 @@ ОбновитьДанныеРегистра - Auto + DontUse Auto diff --git a/SSL/src/InformationRegisters/ЗначенияГруппДоступаПоУмолчанию/ЗначенияГруппДоступаПоУмолчанию.mdo b/SSL/src/InformationRegisters/ЗначенияГруппДоступаПоУмолчанию/ЗначенияГруппДоступаПоУмолчанию.mdo index 10b3de9cf..98fef1926 100644 --- a/SSL/src/InformationRegisters/ЗначенияГруппДоступаПоУмолчанию/ЗначенияГруппДоступаПоУмолчанию.mdo +++ b/SSL/src/InformationRegisters/ЗначенияГруппДоступаПоУмолчанию/ЗначенияГруппДоступаПоУмолчанию.mdo @@ -69,6 +69,26 @@ Index + + ВсеРазрешеныБезИсключений + + ru + Все разрешены без исключений + + + Boolean + + + ru + Обозначает, что в группе доступа не указано +значений доступа, а по умолчанию все разрешены. + + + + Index + Use + + БезНастройки @@ -80,8 +100,8 @@ ru - Обозначает, что в группе доступа не указано -значений доступа, а по умолчанию все разрешены. + Обозначает, что в профиле и группе доступа нет вида доступа или +ограничение по виду доступа не используется в программе. diff --git a/SSL/src/InformationRegisters/ИдентификаторыОбъектовВерсийРасширений/Forms/ФормаЗаписи/Form.form b/SSL/src/InformationRegisters/ИдентификаторыОбъектовВерсийРасширений/Forms/ФормаЗаписи/Form.form new file mode 100644 index 000000000..09f1226ed --- /dev/null +++ b/SSL/src/InformationRegisters/ИдентификаторыОбъектовВерсийРасширений/Forms/ФормаЗаписи/Form.form @@ -0,0 +1,215 @@ + + + + ВерсияРасширений + 7 + true + true + + true + + + Запись.ВерсияРасширений + + + ВерсияРасширенийРасширеннаяПодсказка + 9 + Label + true + true + + Left + + + + ВерсияРасширенийКонтекстноеМеню + 8 + true + + InputField + Enter + true + Left + true + + true + true + true + true + true + true + Normal + + + + ПолноеИмяОбъекта + 1 + true + true + + true + + + Запись.ПолноеИмяОбъекта + + + ПолноеИмяОбъектаРасширеннаяПодсказка + 3 + Label + true + true + + Left + + + + ПолноеИмяОбъектаКонтекстноеМеню + 2 + true + + InputField + Enter + true + Left + true + + true + true + true + true + true + true + Normal + + + + Идентификатор + 4 + true + true + + true + + + Запись.Идентификатор + + + ИдентификаторРасширеннаяПодсказка + 6 + Label + true + true + + Left + + + + ИдентификаторКонтекстноеМеню + 5 + true + + InputField + Enter + true + Left + true + + true + true + true + true + true + true + Normal + + + + ФормаКоманднаяПанель + -1 + + ФормаВключитьВозможностьРедактирования + 10 + true + true + + true + + + ФормаВключитьВозможностьРедактированияРасширеннаяПодсказка + 11 + Label + true + true + + Left + + + Form.Command.ВключитьВозможностьРедактирования + Normal + Auto + true + true + UserCmds + Auto + InAdditionalSubmenu + + Left + true + + + OnCreateAtServer + ПриСозданииНаСервере + + LockOwner + true + true + true + Vertical + true + true + true + auto + true + + Запись + 1 + + InformationRegisterRecordManager.ИдентификаторыОбъектовВерсийРасширений + + + true + + + true + +
      true
      + true +
      + + ВключитьВозможностьРедактирования + + <key>ru</key> + <value>Включить возможность редактирования</value> + + 1 + + ru + Включить возможность редактирования только для целей поиска неисправности (требуется углубленное понимание работы механизма) + + + true + + + + ВключитьВозможностьРедактирования + + + DontUse + Auto + + + + + + +
      diff --git a/SSL/src/InformationRegisters/ИдентификаторыОбъектовВерсийРасширений/Forms/ФормаЗаписи/Module.bsl b/SSL/src/InformationRegisters/ИдентификаторыОбъектовВерсийРасширений/Forms/ФормаЗаписи/Module.bsl new file mode 100644 index 000000000..2cd660d32 --- /dev/null +++ b/SSL/src/InformationRegisters/ИдентификаторыОбъектовВерсийРасширений/Forms/ФормаЗаписи/Module.bsl @@ -0,0 +1,23 @@ + +#Область ОбработчикиСобытийФормы + +&НаСервере +Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) + + ТолькоПросмотр = Истина; + +КонецПроцедуры + +#КонецОбласти + +#Область ОбработчикиКомандФормы + +&НаКлиенте +Процедура ВключитьВозможностьРедактирования(Команда) + + ТолькоПросмотр = Ложь; + Элементы.ФормаВключитьВозможностьРедактирования.Доступность = Ложь; + +КонецПроцедуры + +#КонецОбласти diff --git a/SSL/src/InformationRegisters/ИдентификаторыОбъектовВерсийРасширений/Forms/ФормаСписка/Attributes/Список/ExtInfo/ListSettings.dcss b/SSL/src/InformationRegisters/ИдентификаторыОбъектовВерсийРасширений/Forms/ФормаСписка/Attributes/Список/ExtInfo/ListSettings.dcss new file mode 100644 index 000000000..9e82b3e92 --- /dev/null +++ b/SSL/src/InformationRegisters/ИдентификаторыОбъектовВерсийРасширений/Forms/ФормаСписка/Attributes/Список/ExtInfo/ListSettings.dcss @@ -0,0 +1,21 @@ + + + + Normal + dfcece9d-5077-440b-b6b3-45a5cb4538eb + + + + ВерсияРасширений + Desc + + Normal + 88619765-ccb3-46c6-ac52-38e9c992ebd4 + + + Normal + b75fecce-942b-4aed-abc9-e6a02e460fb3 + + Normal + 911b6018-f537-43e8-a417-da56b22f9aec + diff --git a/SSL/src/InformationRegisters/ИдентификаторыОбъектовВерсийРасширений/Forms/ФормаСписка/Form.form b/SSL/src/InformationRegisters/ИдентификаторыОбъектовВерсийРасширений/Forms/ФормаСписка/Form.form new file mode 100644 index 000000000..08ea2445e --- /dev/null +++ b/SSL/src/InformationRegisters/ИдентификаторыОбъектовВерсийРасширений/Forms/ФормаСписка/Form.form @@ -0,0 +1,475 @@ + + + + ГруппаПользовательскихНастроек + 1 + true + true + + true + + + <key>ru</key> + <value>Группа пользовательских настроек</value> + + false + + ГруппаПользовательскихНастроекРасширеннаяПодсказка + 2 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + WeakSeparation + true + true + Auto + Auto + + + + Список + 3 + true + true + + true + + + Список + + true + None + + ВерсияРасширений + 24 + true + true + + true + + + Список.ВерсияРасширений + + + ВерсияРасширенийРасширеннаяПодсказка + 26 + Label + true + true + + Left + + + + ВерсияРасширенийКонтекстноеМеню + 25 + true + + LabelField + Enter + true + Left + true + + 14 + true + true + + + + ИмяРасширения + 33 + true + true + + true + + + Список.ИмяРасширения + + + ИмяРасширенияРасширеннаяПодсказка + 35 + Label + true + true + + Left + + + + ИмяРасширенияКонтекстноеМеню + 34 + true + + LabelField + Enter + true + Left + true + + 17 + true + true + + + + ПолноеИмяОбъекта + 16 + true + true + + true + + + Список.ПолноеИмяОбъекта + + true + + ПолноеИмяОбъектаРасширеннаяПодсказка + 18 + Label + true + true + + Left + + + + ПолноеИмяОбъектаКонтекстноеМеню + 17 + true + + LabelField + Enter + true + Left + true + + 20 + true + true + + + + Идентификатор + 19 + true + true + + true + + + Список.Идентификатор + + true + + ИдентификаторРасширеннаяПодсказка + 21 + Label + true + true + + Left + + + + ИдентификаторКонтекстноеМеню + 20 + true + + LabelField + Enter + true + Left + true + + 20 + true + true + + + + ОписаниеРасширенийВерсии + 30 + true + true + + + Список.ОписаниеРасширенийВерсии + + + ОписаниеРасширенийВерсииРасширеннаяПодсказка + 32 + Label + true + true + + Left + + + + ОписаниеРасширенийВерсииКонтекстноеМеню + 31 + true + + LabelField + Enter + true + true + Left + true + + true + true + + + None + + СписокКоманднаяПанель + 5 + Left + + + СписокСтрокаПоиска + 7 + + СписокСтрокаПоискаРасширеннаяПодсказка + 9 + Label + true + true + + Left + + + + СписокСтрокаПоискаКонтекстноеМеню + 8 + true + + Список + + true + + + + СписокСостояниеПросмотра + 10 + + СписокСостояниеПросмотраРасширеннаяПодсказка + 12 + Label + true + true + + Left + + + + СписокСостояниеПросмотраКонтекстноеМеню + 11 + true + + ViewStatusAddition + Список + + true + + + + СписокУправлениеПоиском + 13 + + СписокУправлениеПоискомРасширеннаяПодсказка + 15 + Label + true + true + + Left + + + + СписокУправлениеПоискомКонтекстноеМеню + 14 + true + + SearchControlAddition + Список + + true + + + + СписокРасширеннаяПодсказка + 6 + Label + true + true + + Left + + + + СписокКонтекстноеМеню + 4 + true + + true + true + true + true + true + MultiRow +
      true
      + 1 + 1 + AutoUse + AutoUse + true + true + Auto + Auto + ExpandTopLevel + true + true + true + + Список.DefaultPicture + + None + None + None + true + + 60 + + 0001-01-01T00:00:00 + 0001-01-01T00:00:00 + + + true + true + ГруппаПользовательскихНастроек + +
      + + ФормаКоманднаяПанель + -1 + + ФормаВключитьВозможностьРедактирования + 22 + true + true + + true + + + ФормаВключитьВозможностьРедактированияРасширеннаяПодсказка + 23 + Label + true + true + + Left + + + Form.Command.ВключитьВозможностьРедактирования + Normal + Auto + true + true + UserCmds + Auto + InAdditionalSubmenu + + Left + true + + + OnCreateAtServer + ПриСозданииНаСервере + + 80 + 10 + DontBlock + true + true + true + Vertical + true + true + true + auto + true + + Список + 1 + + DynamicList + + + true + + + true + +
      true
      + + ВЫБРАТЬ + ВерсииИдентификаторов.ВерсияРасширений, + ВерсииИдентификаторов.ПолноеИмяОбъекта, + ВерсииИдентификаторов.Идентификатор, + ЕСТЬNULL(ВерсииРасширений.ОписаниеМетаданных, "null") КАК ОписаниеРасширенийВерсии, + ЕСТЬNULL(Идентификаторы.ИмяРасширения, "null") КАК ИмяРасширения +ИЗ + РегистрСведений.ИдентификаторыОбъектовВерсийРасширений КАК ВерсииИдентификаторов + ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ВерсииРасширений КАК ВерсииРасширений + ПО (ВерсииРасширений.Ссылка = ВерсииИдентификаторов.ВерсияРасширений) + ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ИдентификаторыОбъектовРасширений КАК Идентификаторы + ПО (Идентификаторы.Ссылка = ВерсииИдентификаторов.Идентификатор) + InformationRegister.ИдентификаторыОбъектовВерсийРасширений + true + true + true + true + true + +
      + + ВключитьВозможностьРедактирования + + <key>ru</key> + <value>Включить возможность редактирования</value> + + 1 + + ru + Включить возможность редактирования только для целей поиска неисправности (требуется углубленное понимание работы механизма) + + + true + + + + ВключитьВозможностьРедактирования + + + DontUse + Auto + + + + + + +
      diff --git a/SSL/src/InformationRegisters/ИдентификаторыОбъектовВерсийРасширений/Forms/ФормаСписка/Module.bsl b/SSL/src/InformationRegisters/ИдентификаторыОбъектовВерсийРасширений/Forms/ФормаСписка/Module.bsl new file mode 100644 index 000000000..2cd660d32 --- /dev/null +++ b/SSL/src/InformationRegisters/ИдентификаторыОбъектовВерсийРасширений/Forms/ФормаСписка/Module.bsl @@ -0,0 +1,23 @@ + +#Область ОбработчикиСобытийФормы + +&НаСервере +Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) + + ТолькоПросмотр = Истина; + +КонецПроцедуры + +#КонецОбласти + +#Область ОбработчикиКомандФормы + +&НаКлиенте +Процедура ВключитьВозможностьРедактирования(Команда) + + ТолькоПросмотр = Ложь; + Элементы.ФормаВключитьВозможностьРедактирования.Доступность = Ложь; + +КонецПроцедуры + +#КонецОбласти diff --git a/SSL/src/InformationRegisters/ИдентификаторыОбъектовВерсийРасширений/ИдентификаторыОбъектовВерсийРасширений.mdo b/SSL/src/InformationRegisters/ИдентификаторыОбъектовВерсийРасширений/ИдентификаторыОбъектовВерсийРасширений.mdo new file mode 100644 index 000000000..f044c687b --- /dev/null +++ b/SSL/src/InformationRegisters/ИдентификаторыОбъектовВерсийРасширений/ИдентификаторыОбъектовВерсийРасширений.mdo @@ -0,0 +1,140 @@ + + + + + + + + + + + + ИдентификаторыОбъектовВерсийРасширений + + ru + Идентификаторы объектов версий расширений + + InDialog + InformationRegister.ИдентификаторыОбъектовВерсийРасширений.Form.ФормаЗаписи + InformationRegister.ИдентификаторыОбъектовВерсийРасширений.Form.ФормаСписка + + Use + Active + + Use + + + + + Use + LineNumber + + Use + + + + + Use + Recorder + + Use + + + + + Use + Period + + ShowError + Use + + + + Managed + + ВерсияРасширений + + ru + Версия расширений + + + CatalogRef.ВерсииРасширений + + + ru + Обобщенная версия метаданных набора расширений + + + + ShowError + true + Use + true + + true + true + + + ПолноеИмяОбъекта + + ru + Полное имя объекта + + Например, "Обработка.ЗаполнениеКонтрагентов" + + String + + 430 + + + + ru + Полное имя объекта метаданных + + + + Index + Use + + true + + + Идентификатор + + ru + Идентификатор + + + CatalogRef.ИдентификаторыОбъектовРасширений + + + ru + Ссылка на объект метаданных в базе данных + + + + Index + Use + true + + true + + + ФормаЗаписи + + ru + Форма записи + + PersonalComputer + MobileDevice + + + ФормаСписка + + ru + Форма списка + + PersonalComputer + MobileDevice + + diff --git a/SSL/src/InformationRegisters/ИсполнителиЗадач/Commands/ИсполнителиРоли/CommandModule.bsl b/SSL/src/InformationRegisters/ИсполнителиЗадач/Commands/ИсполнителиРоли/CommandModule.bsl index cf26eae62..2679cc11f 100644 --- a/SSL/src/InformationRegisters/ИсполнителиЗадач/Commands/ИсполнителиРоли/CommandModule.bsl +++ b/SSL/src/InformationRegisters/ИсполнителиЗадач/Commands/ИсполнителиРоли/CommandModule.bsl @@ -1,3 +1,4 @@ +#Область ОбработчикиСобытий &НаКлиенте Процедура ОбработкаКоманды(ПараметрКоманды, ПараметрыВыполненияКоманды) @@ -5,3 +6,5 @@ ОткрытьФорму("РегистрСведений.ИсполнителиЗадач.Форма.ИсполнителиРоли", ПараметрыФормы, ПараметрыВыполненияКоманды.Источник, ПараметрыВыполненияКоманды.Уникальность, ПараметрыВыполненияКоманды.Окно); КонецПроцедуры + +#КонецОбласти \ No newline at end of file diff --git a/SSL/src/InformationRegisters/ИсполнителиЗадач/Commands/НастройкаРолевойАдресации/CommandModule.bsl b/SSL/src/InformationRegisters/ИсполнителиЗадач/Commands/РолиИИсполнителиЗадач/CommandModule.bsl similarity index 74% rename from SSL/src/InformationRegisters/ИсполнителиЗадач/Commands/НастройкаРолевойАдресации/CommandModule.bsl rename to SSL/src/InformationRegisters/ИсполнителиЗадач/Commands/РолиИИсполнителиЗадач/CommandModule.bsl index 7e2be14dd..53b023d6d 100644 --- a/SSL/src/InformationRegisters/ИсполнителиЗадач/Commands/НастройкаРолевойАдресации/CommandModule.bsl +++ b/SSL/src/InformationRegisters/ИсполнителиЗадач/Commands/РолиИИсполнителиЗадач/CommandModule.bsl @@ -1,10 +1,13 @@ +#Область ОбработчикиСобытий &НаКлиенте Процедура ОбработкаКоманды(ПараметрКоманды, ПараметрыВыполненияКоманды) - ОткрытьФорму("РегистрСведений.ИсполнителиЗадач.Форма.АдресацияПоОбъекту",, + ОткрытьФорму("РегистрСведений.ИсполнителиЗадач.Форма.РолиИИсполнителиЗадач",, ПараметрыВыполненияКоманды.Источник, ПараметрыВыполненияКоманды.Уникальность, ПараметрыВыполненияКоманды.Окно); КонецПроцедуры + +#КонецОбласти diff --git a/SSL/src/InformationRegisters/ИсполнителиЗадач/Forms/ИсполнителиРоли/Form.form b/SSL/src/InformationRegisters/ИсполнителиЗадач/Forms/ИсполнителиРоли/Form.form index 349bbd393..fd392ba42 100644 --- a/SSL/src/InformationRegisters/ИсполнителиЗадач/Forms/ИсполнителиРоли/Form.form +++ b/SSL/src/InformationRegisters/ИсполнителиЗадач/Forms/ИсполнителиРоли/Form.form @@ -264,7 +264,6 @@ true true true - UseIfNecessary auto true diff --git a/SSL/src/InformationRegisters/ИсполнителиЗадач/Forms/ИсполнителиРоли/Help/ru.html b/SSL/src/InformationRegisters/ИсполнителиЗадач/Forms/ИсполнителиРоли/Help/ru.html index 68b843877..f65e96818 100644 --- a/SSL/src/InformationRegisters/ИсполнителиЗадач/Forms/ИсполнителиРоли/Help/ru.html +++ b/SSL/src/InformationRegisters/ИсполнителиЗадач/Forms/ИсполнителиРоли/Help/ru.html @@ -1,8 +1,7 @@ - -

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

      + +

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

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

      Ввод исполнителя роли

      -

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

      -

      См. также:

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

      См. также:

      \ No newline at end of file diff --git a/SSL/src/InformationRegisters/ИсполнителиЗадач/Forms/АдресацияПоОбъектуИРоли/Form.form b/SSL/src/InformationRegisters/ИсполнителиЗадач/Forms/ИсполнителиРолиСОбъектомАдресации/Form.form similarity index 99% rename from SSL/src/InformationRegisters/ИсполнителиЗадач/Forms/АдресацияПоОбъектуИРоли/Form.form rename to SSL/src/InformationRegisters/ИсполнителиЗадач/Forms/ИсполнителиРолиСОбъектомАдресации/Form.form index 8003c5e3b..08b4646fe 100644 --- a/SSL/src/InformationRegisters/ИсполнителиЗадач/Forms/АдресацияПоОбъектуИРоли/Form.form +++ b/SSL/src/InformationRegisters/ИсполнителиЗадач/Forms/ИсполнителиРолиСОбъектомАдресации/Form.form @@ -10,7 +10,6 @@ ОсновнойОбъектАдресации 18 - true true @@ -43,7 +42,6 @@ true true - true @@ -404,7 +402,6 @@ true true true - UseIfNecessary auto true @@ -500,7 +497,7 @@ TextPicture - Auto + DontUse Auto diff --git a/SSL/src/InformationRegisters/ИсполнителиЗадач/Forms/АдресацияПоОбъектуИРоли/Help/ru.html b/SSL/src/InformationRegisters/ИсполнителиЗадач/Forms/ИсполнителиРолиСОбъектомАдресации/Help/ru.html similarity index 58% rename from SSL/src/InformationRegisters/ИсполнителиЗадач/Forms/АдресацияПоОбъектуИРоли/Help/ru.html rename to SSL/src/InformationRegisters/ИсполнителиЗадач/Forms/ИсполнителиРолиСОбъектомАдресации/Help/ru.html index f65bf5617..29e879f3c 100644 --- a/SSL/src/InformationRegisters/ИсполнителиЗадач/Forms/АдресацияПоОбъектуИРоли/Help/ru.html +++ b/SSL/src/InformationRegisters/ИсполнителиЗадач/Forms/ИсполнителиРолиСОбъектомАдресации/Help/ru.html @@ -1,9 +1,12 @@

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

      -

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

      +

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

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

      Добавление исполнителя

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

      Подбор исполнителей

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

      Подбор исполнителей

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

      См. также:

      \ No newline at end of file diff --git a/SSL/src/InformationRegisters/ИсполнителиЗадач/Forms/АдресацияПоОбъектуИРоли/Module.bsl b/SSL/src/InformationRegisters/ИсполнителиЗадач/Forms/ИсполнителиРолиСОбъектомАдресации/Module.bsl similarity index 100% rename from SSL/src/InformationRegisters/ИсполнителиЗадач/Forms/АдресацияПоОбъектуИРоли/Module.bsl rename to SSL/src/InformationRegisters/ИсполнителиЗадач/Forms/ИсполнителиРолиСОбъектомАдресации/Module.bsl diff --git a/SSL/src/InformationRegisters/ИсполнителиЗадач/Forms/АдресацияПоОбъекту/Form.form b/SSL/src/InformationRegisters/ИсполнителиЗадач/Forms/РолиИИсполнителиЗадач/Form.form similarity index 98% rename from SSL/src/InformationRegisters/ИсполнителиЗадач/Forms/АдресацияПоОбъекту/Form.form rename to SSL/src/InformationRegisters/ИсполнителиЗадач/Forms/РолиИИсполнителиЗадач/Form.form index ce6c36b3d..6fe7133ef 100644 --- a/SSL/src/InformationRegisters/ИсполнителиЗадач/Forms/АдресацияПоОбъекту/Form.form +++ b/SSL/src/InformationRegisters/ИсполнителиЗадач/Forms/РолиИИсполнителиЗадач/Form.form @@ -699,7 +699,6 @@ true true true - UseIfNecessary auto true @@ -868,23 +867,6 @@ - - ИспользоватьВнешниеЗадачиИБизнесПроцессы - - <key>ru</key> - <value>Использовать внешние задачи и бизнес процессы</value> - - 1 - - Boolean - - - true - - - true - - ВсеНазначения @@ -905,7 +887,7 @@ </handler> </action> <representation>TextPicture</representation> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <formCommands> @@ -930,7 +912,7 @@ <name>ОбновитьВыполнить</name> </handler> </action> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <formCommands> @@ -952,7 +934,7 @@ <name>СписокРолей</name> </handler> </action> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <formCommands> @@ -974,7 +956,7 @@ <name>ОткрытьСведенияОРоли</name> </handler> </action> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <parameters> diff --git a/SSL/src/InformationRegisters/ИсполнителиЗадач/Forms/АдресацияПоОбъекту/Help/ru.html b/SSL/src/InformationRegisters/ИсполнителиЗадач/Forms/РолиИИсполнителиЗадач/Help/ru.html similarity index 85% rename from SSL/src/InformationRegisters/ИсполнителиЗадач/Forms/АдресацияПоОбъекту/Help/ru.html rename to SSL/src/InformationRegisters/ИсполнителиЗадач/Forms/РолиИИсполнителиЗадач/Help/ru.html index 07d154c9d..b1671b9af 100644 --- a/SSL/src/InformationRegisters/ИсполнителиЗадач/Forms/АдресацияПоОбъекту/Help/ru.html +++ b/SSL/src/InformationRegisters/ИсполнителиЗадач/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.РолиИсполнителей/Help">ролям исполнителей</a>.</p> +<p>В списке содержится актуальная (текущая) информация о соответствии пользователей <a href="Catalog.РолиИсполнителей/Help">ролям исполнителей</a>.</p> <p>Перед началом работы с бизнес-процессами и задачами рекомендуется заполнить список.</p> <p>Для того чтобы назначить исполнителей ролей, которые участвуют в бизнес-процессах без объектов адресации, выполните команду <strong>Роли и исполнители задач</strong> в разделе <strong>Администрирование - Органайзер</strong>.</p> <p>Для того чтобы назначить исполнителей на роли, которые участвуют в бизнес-процессах с <a href="ChartOfCharacteristicTypes.ОбъектыАдресацииЗадач/Help">объектами адресации</a>, необходимо воспользоваться командой <strong>Роли и исполнители задач</strong> на панели навигации этих объектов, например, на панели навигации <strong>Организации</strong>.</p> <p>В списке выводится:</p> -<ul><li><strong>Роль</strong> - наименование роли. Роли, на которые не назначено ни одного исполнителя, отмечены значком <strong>Внимание</strong>. Такая ситуация может приводить к возникновению зависших <a href="Task.ЗадачаИсполнителя/Help">задач</a> (т.е. задач, у которых не существует реального исполнителя). Для контроля зависших задач предназначен <a href="Report.ЗависшиеЗадачи/Help">Отчет по зависшим задачам</a>, для получения уведомлений по зависшим задачам - предопределенная роль <a href="#1">Координатор выполнения задач</a>. -</li><li><strong>Исполнители</strong> - имя <a href="Catalog.Пользователи.Form.ФормаЭлемента/Help">пользователя</a> (если на роль назначен 1 исполнитель) или количество человек, назначенных на эту роль.</li></ul><h3>Назначение исполнителей на роль</h3> +<ul><li><strong>Роль</strong> - наименование роли. Роли, на которые не назначено ни одного исполнителя, отмечены значком <strong>Внимание</strong>. Такая ситуация может приводить к возникновению зависших <a href="Task.ЗадачаИсполнителя/Help">задач</a> (т.е. задач, у которых не существует реального исполнителя). Для контроля зависших задач предназначен <a href="Report.ЗависшиеЗадачи/Help">Отчет по зависшим задачам</a>, для получения уведомлений по зависшим задачам - предопределенная роль <a href="#1">Координатор выполнения задач</a>. <a name="СтандартныеПодсистемы.Пользователи"> +<li><strong>Исполнители</strong> - имя <a href="Catalog.Пользователи.Form.ФормаЭлемента/Help">пользователя</a> (если на роль назначен 1 исполнитель) или количество человек, назначенных на эту роль.</li></a></li></ul><h3>Назначение исполнителей на роль</h3> <ul><li>Выделите роль, нажмите <strong>Назначить исполнителей на роль</strong>, <a href="InformationRegister.ИсполнителиЗадач.Form.ИсполнителиРоли/Help">подберите исполнителей</a> из списка пользователей. </li><li>Также можно воспользоваться двойным щелчком мыши.</li></ul><h3>Предопределенные роли</h3> <p>В составе программы поставляются следующие роли:</p> diff --git a/SSL/src/InformationRegisters/ИсполнителиЗадач/Forms/АдресацияПоОбъекту/Module.bsl b/SSL/src/InformationRegisters/ИсполнителиЗадач/Forms/РолиИИсполнителиЗадач/Module.bsl similarity index 82% rename from SSL/src/InformationRegisters/ИсполнителиЗадач/Forms/АдресацияПоОбъекту/Module.bsl rename to SSL/src/InformationRegisters/ИсполнителиЗадач/Forms/РолиИИсполнителиЗадач/Module.bsl index ae077cc9b..308d58c81 100644 --- a/SSL/src/InformationRegisters/ИсполнителиЗадач/Forms/АдресацияПоОбъекту/Module.bsl +++ b/SSL/src/InformationRegisters/ИсполнителиЗадач/Forms/РолиИИсполнителиЗадач/Module.bsl @@ -10,7 +10,6 @@ ОсновнойОбъектАдресации = Параметры.ОсновнойОбъектАдресации; ОбновитьДанныеЭлементов(); - БизнесПроцессыИЗадачиСервер.ПриОпределенииИспользованияВнешнихЗадачИБизнесПроцессов(ИспользоватьВнешниеЗадачиИБизнесПроцессы); КонецПроцедуры @@ -44,9 +43,9 @@ &НаКлиенте Процедура ВсеНазначенияВыполнить(Команда) - ОткрытьФорму("РегистрСведений.ИсполнителиЗадач.ФормаСписка", - Новый Структура("Отбор", Новый Структура("ОсновнойОбъектАдресации", ОсновнойОбъектАдресации)), - ЭтотОбъект); + ЗначениеОтбора = Новый Структура("ОсновнойОбъектАдресации", ОсновнойОбъектАдресации); + ПараметрыФормы = Новый Структура("Отбор", ЗначениеОтбора); + ОткрытьФорму("РегистрСведений.ИсполнителиЗадач.ФормаСписка", ПараметрыФормы, ЭтотОбъект); КонецПроцедуры @@ -64,14 +63,7 @@ Возврат; КонецЕсли; - Если ИспользоватьВнешниеЗадачиИБизнесПроцессы Тогда - Если Назначение.ВнешняяРоль = Истина Тогда - ПоказатьПредупреждение(,НСтр("ru = 'Исполнители внешней роли должны быть определены в другой информационной базе.'")); - Возврат; - КонецЕсли; - КонецЕсли; - - ОткрытьФорму("РегистрСведений.ИсполнителиЗадач.Форма.АдресацияПоОбъектуИРоли", + ОткрытьФорму("РегистрСведений.ИсполнителиЗадач.Форма.ИсполнителиРолиСОбъектомАдресации", Новый Структура("ОсновнойОбъектАдресации,Роль", ОсновнойОбъектАдресации, Назначение.РольСсылка)); @@ -124,10 +116,7 @@ СтрокаСписка.ИсполнителиСтрока = Строка(БизнесПроцессыИЗадачиСервер.ВыбратьИсполнителя(ОсновнойОбъектАдресации, СтрокаСписка.РольСсылка)); СтрокаСписка.Картинка = -1; Иначе - СтрокаСписка.ИсполнителиСтрока = - СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = '%1 чел'"), Строка(СтрокаСписка.Исполнители) ); - + СтрокаСписка.ИсполнителиСтрока = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = '%1 чел'"), Строка(СтрокаСписка.Исполнители) ); СтрокаСписка.Картинка = -1; КонецЕсли; КонецЦикла; diff --git a/SSL/src/InformationRegisters/ИсполнителиЗадач/Forms/ФормаЗаписи/Form.form b/SSL/src/InformationRegisters/ИсполнителиЗадач/Forms/ФормаЗаписи/Form.form index f31c66b81..751b31614 100644 --- a/SSL/src/InformationRegisters/ИсполнителиЗадач/Forms/ФормаЗаписи/Form.form +++ b/SSL/src/InformationRegisters/ИсполнителиЗадач/Forms/ФормаЗаписи/Form.form @@ -275,7 +275,6 @@ <autoFillCheck>true</autoFillCheck> <allowFormCustomize>true</allowFormCustomize> <enabled>true</enabled> - <verticalScroll>UseIfNecessary</verticalScroll> <showTitle>auto</showTitle> <showCloseButton>true</showCloseButton> <attributes> diff --git a/SSL/src/InformationRegisters/ИсполнителиЗадач/Forms/ФормаЗаписи/Help/ru.html b/SSL/src/InformationRegisters/ИсполнителиЗадач/Forms/ФормаЗаписи/Help/ru.html index 460ab62b3..7c7e101e0 100644 --- a/SSL/src/InformationRegisters/ИсполнителиЗадач/Forms/ФормаЗаписи/Help/ru.html +++ b/SSL/src/InformationRegisters/ИсполнителиЗадач/Forms/ФормаЗаписи/Help/ru.html @@ -2,7 +2,9 @@ <p>Сведения об исполнителе задач при ролевой адресации.</p> <p>Открывается по команде <strong>Создать</strong> из списка <a href="InformationRegister.ИсполнителиЗадач.Form.ИсполнителиРоли/Help">Исполнители роли</a>.</p> <h3>Ввод исполнителя роли</h3> -<ul><li>Выберите <strong>Исполнителя</strong> роли из списка <a href="Catalog.Пользователи/Help">Пользователи</a>. +<ul><a name="СтандартныеПодсистемы.Пользователи"> +<li>С помощью кнопки <img src="StdPicture.InputFieldSelect"></img> выберите тип списка - <a href="Catalog.ВнешниеПользователи/Help">Внешние пользователи</a> или <a href="Catalog.Пользователи/Help">Пользователи</a>. </li></a> +<li>Выберите <strong>Исполнителя</strong> роли из соответствующего списка. </li><li>В поле <strong>Выполняет роль</strong> выберите <a href="Catalog.РолиИсполнителей.Form.ФормаЭлемента/Help">роль исполнителя</a> <a href="Task.ЗадачаИсполнителя/Help">задач</a> из <a href="Catalog.РолиИсполнителей.Form.ФормаВыбора/Help">списка</a> (может быть выбрана программой по умолчанию). </li><li>Для роли может потребоваться выбрать из списка основной и дополнительный <a href="ChartOfCharacteristicTypes.ОбъектыАдресацииЗадач/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/InformationRegisters/ИсполнителиЗадач/Forms/ФормаСписка/Form.form b/SSL/src/InformationRegisters/ИсполнителиЗадач/Forms/ФормаСписка/Form.form index bd9795525..6540e215e 100644 --- a/SSL/src/InformationRegisters/ИсполнителиЗадач/Forms/ФормаСписка/Form.form +++ b/SSL/src/InformationRegisters/ИсполнителиЗадач/Forms/ФормаСписка/Form.form @@ -400,7 +400,6 @@ <autoFillCheck>true</autoFillCheck> <allowFormCustomize>true</allowFormCustomize> <enabled>true</enabled> - <verticalScroll>UseIfNecessary</verticalScroll> <showTitle>auto</showTitle> <showCloseButton>true</showCloseButton> <attributes> diff --git a/SSL/src/InformationRegisters/ИсполнителиЗадач/Help/ru.html b/SSL/src/InformationRegisters/ИсполнителиЗадач/Help/ru.html index 797f1194f..51648f23f 100644 --- a/SSL/src/InformationRegisters/ИсполнителиЗадач/Help/ru.html +++ b/SSL/src/InformationRegisters/ИсполнителиЗадач/Help/ru.html @@ -1,7 +1,13 @@ <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"><html><head><meta content="text/html; charset=utf-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="ChartOfCharacteristicTypes.ОбъектыАдресацииЗадач/Help">объектам адресации</a>, которая используется механизмом <a href="v8help://1cv8/EnterprWorkingWithBusinessProcesses_StandardInterface">бизнес-процессов</a> для доставки <a href="Task.ЗадачаИсполнителя/Help">задач</a> конкретным <a href="Catalog.Пользователи/Help">пользователям</a>.</p> +<p>В этом списке содержится актуальная (текущая) информация о соответствии пользователей <a href="Catalog.РолиИсполнителей/Help">ролям</a> и <a href="ChartOfCharacteristicTypes.ОбъектыАдресацииЗадач/Help">объектам адресации</a>, которая используется механизмом <a href="v8help://1cv8/EnterprWorkingWithBusinessProcesses_StandardInterface">бизнес-процессов</a> для доставки <a href="Task.ЗадачаИсполнителя/Help">задач</a> конкретным исполнителям.</p> <p>В зависимости от специфики бизнес-процессов задачи могут быть адресованы исполнителю или группе исполнителей как персонально (персональная адресация), так и для некоторых бизнес процессов с использованием ролей бизнес-процесса (ролевая адресация). В случае ролевой адресации поручение выдается не персонально исполнителю, а некоторой роли бизнес-процесса (например, <strong>Старший по залу</strong>).</p> -<p>Примеры заполнения списка ролевой адресации:</p> +<h3>Особенности взаимодействия с внешними пользователями</h3> +<ul><li> +<div>Исполнителями некоторых бизнес-процессов могут быть и внешние пользователи (например, партнеры или контактные лица партнеров).</div> +</li><li> +<div>Внешним пользователям, как правило, недоступны имена конкретных сотрудников компании, поэтому в качестве исполнителя они могут указывать только предназначенные для них роли исполнителей.</div> +</li><li> +<div>Для этого нужно настроить <a href="Catalog.РолиИсполнителей/Help">список</a> таких ролей, указав, что они предназначены для определенных категорий внешних пользователей.</div></li></ul><h3>Примеры заполнения списка ролевой адресации</h3> <p></p> <table border="0" cellpadding="8" width="100%"><tbody><tr><td><strong>Роль исполнителя</strong></td> <td><strong>Пользователь</strong></td> diff --git a/SSL/src/InformationRegisters/ИсполнителиЗадач/RecordSetModule.bsl b/SSL/src/InformationRegisters/ИсполнителиЗадач/RecordSetModule.bsl index 5adc51da2..4b5fd69c8 100644 --- a/SSL/src/InformationRegisters/ИсполнителиЗадач/RecordSetModule.bsl +++ b/SSL/src/InformationRegisters/ИсполнителиЗадач/RecordSetModule.bsl @@ -116,9 +116,7 @@ КонецЦикла; Запрос.Текст = СтрЗаменить(Запрос.Текст, "&УсловияОтбора", УсловияОтбора); - - ИзмененныеГруппыИсполнителей = Запрос.Выполнить( - ).Выгрузить().ВыгрузитьКолонку("ГруппаИсполнителейЗадач"); + ИзмененныеГруппыИсполнителей = Запрос.Выполнить().Выгрузить().ВыгрузитьКолонку("ГруппаИсполнителейЗадач"); КонецПроцедуры diff --git a/SSL/src/InformationRegisters/ИсполнителиЗадач/ИсполнителиЗадач.mdo b/SSL/src/InformationRegisters/ИсполнителиЗадач/ИсполнителиЗадач.mdo index 958f7f97b..941fb142c 100644 --- a/SSL/src/InformationRegisters/ИсполнителиЗадач/ИсполнителиЗадач.mdo +++ b/SSL/src/InformationRegisters/ИсполнителиЗадач/ИсполнителиЗадач.mdo @@ -117,6 +117,7 @@ <value>Исполнитель</value> </synonym> <type> + <types>CatalogRef.ВнешниеПользователи</types> <types>CatalogRef.Пользователи</types> </type> <toolTip> @@ -181,7 +182,7 @@ <mainFilter>true</mainFilter> </dimensions> <forms uuid="1d6a68ec-917f-4c3b-b970-797a6921cbc9"> - <name>АдресацияПоОбъекту</name> + <name>РолиИИсполнителиЗадач</name> <synonym> <key>ru</key> <value>Роли и исполнители задач</value> @@ -195,10 +196,10 @@ <usePurposes>MobileDevice</usePurposes> </forms> <forms uuid="ae29eb40-5c8f-4ab4-8556-f98d45e8effe"> - <name>АдресацияПоОбъектуИРоли</name> + <name>ИсполнителиРолиСОбъектомАдресации</name> <synonym> <key>ru</key> - <value>Роли и исполнители бизнес-процессов</value> + <value>Исполнители роли</value> </synonym> <help> <pages> @@ -246,7 +247,7 @@ <usePurposes>MobileDevice</usePurposes> </forms> <commands uuid="679cc0df-df5c-4c33-8c64-c0b6cee39116"> - <name>НастройкаРолевойАдресации</name> + <name>РолиИИсполнителиЗадач</name> <synonym> <key>ru</key> <value>Роли и исполнители задач</value> diff --git a/SSL/src/InformationRegisters/КомментарииОперацииСтатистики/ManagerModule.bsl b/SSL/src/InformationRegisters/КомментарииОперацииСтатистики/ManagerModule.bsl new file mode 100644 index 000000000..4d9dc6863 --- /dev/null +++ b/SSL/src/InformationRegisters/КомментарииОперацииСтатистики/ManagerModule.bsl @@ -0,0 +1,58 @@ +#Область СлужебныеПроцедурыИФункции + +Процедура СоздатьНовуюЗапись(ОперацияСтатистики, КомментарийСтатистики) Экспорт + НачатьТранзакцию(); + Попытка + Блокировка = Новый БлокировкаДанных; + ЭлементБлокировки = Блокировка.Добавить("РегистрСведений.КомментарииОперацииСтатистики"); + ЭлементБлокировки.УстановитьЗначение("ИдентификаторОперации", ОперацияСтатистики); + ЭлементБлокировки.УстановитьЗначение("ИдентификаторКомментария", КомментарийСтатистики); + ЭлементБлокировки.Режим = РежимБлокировкиДанных.Исключительный; + Блокировка.Заблокировать(); + + Если НЕ ЕстьЗапись(ОперацияСтатистики, КомментарийСтатистики) Тогда + НаборЗаписей = РегистрыСведений.КомментарииОперацииСтатистики.СоздатьНаборЗаписей(); + НовЗапись = НаборЗаписей.Добавить(); + НовЗапись.ИдентификаторОперации = ОперацияСтатистики; + НовЗапись.ИдентификаторКомментария = КомментарийСтатистики; + + НаборЗаписей.ОбменДанными.Загрузка = Истина; + НаборЗаписей.Записать(Ложь); + КонецЕсли; + + ЗафиксироватьТранзакцию(); + Исключение + ОтменитьТранзакцию(); + ВызватьИсключение; + КонецПопытки; +КонецПроцедуры + +Функция ЕстьЗапись(ОперацияСтатистики, КомментарийСтатистики) + Запрос = Новый Запрос; + Запрос.Текст = + "ВЫБРАТЬ + | КОЛИЧЕСТВО(*) КАК КоличествоЗаписей + |ИЗ + | РегистрСведений.КомментарииОперацииСтатистики КАК КомментарииОперацииСтатистики + |ГДЕ + | КомментарииОперацииСтатистики.ИдентификаторОперации = &ИдентификаторОперации + | И КомментарииОперацииСтатистики.ИдентификаторКомментария = &ИдентификаторКомментария + |"; + + Запрос.УстановитьПараметр("ИдентификаторКомментария", КомментарийСтатистики); + Запрос.УстановитьПараметр("ИдентификаторОперации", ОперацияСтатистики); + + РезультатЗапроса = Запрос.Выполнить(); + + ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать(); + ВыборкаДетальныеЗаписи.Следующий(); + + Если ВыборкаДетальныеЗаписи.КоличествоЗаписей = 0 Тогда + Возврат Ложь; + Иначе + Возврат Истина; + КонецЕсли; +КонецФункции + +#КонецОбласти + diff --git a/SSL/src/InformationRegisters/КомментарииОперацииСтатистики/КомментарииОперацииСтатистики.mdo b/SSL/src/InformationRegisters/КомментарииОперацииСтатистики/КомментарииОперацииСтатистики.mdo new file mode 100644 index 000000000..602204554 --- /dev/null +++ b/SSL/src/InformationRegisters/КомментарииОперацииСтатистики/КомментарииОперацииСтатистики.mdo @@ -0,0 +1,83 @@ +<?xml version="1.0" encoding="UTF-8"?> +<mdclass:InformationRegister xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:core="http://g5.1c.ru/v8/dt/mcore" xmlns:mdclass="http://g5.1c.ru/v8/dt/metadata/mdclass" uuid="ee0412d3-58e7-4715-8774-d49778e1ef73"> + <producedTypes> + <selectionType typeId="ab6610df-dc83-475d-be25-a7e31ca4ce7f" valueTypeId="b9d2bf40-e431-412f-af81-09bbde22daa4"/> + <listType typeId="ff06dcb8-649e-48c1-b17d-7b56bd2c1e57" valueTypeId="2818b26e-5822-474f-8619-5f64929c84d4"/> + <managerType typeId="4a6e2116-f09a-43b1-9f84-932fcba816b5" valueTypeId="8b2bb121-7cbd-4da3-ac19-576d9ce99b71"/> + <recordSetType typeId="7a6d8cb3-86b6-44c7-8f67-6586d51662cb" valueTypeId="bdc9a3ed-26d1-4cd1-82b3-bef7c486b3b4"/> + <recordKeyType typeId="efd60458-a34d-4f21-af0f-4249720a5d0d" valueTypeId="390cae85-87a8-4ee8-947a-b1e7c13d0b2e"/> + <recordType typeId="e9bda4f7-3293-4898-b9bd-0375095f0548" valueTypeId="97ed7aa5-9ff9-404b-a40f-744c7c4a3420"/> + <recordManagerType typeId="389ce1e8-b705-4a14-a914-d9fc6685502a" valueTypeId="ddd62539-95e2-4ecc-8891-4b3b7ed748a5"/> + </producedTypes> + <name>КомментарииОперацииСтатистики</name> + <synonym> + <key>ru</key> + <value>Комментарии операции статистики</value> + </synonym> + <useStandardCommands>true</useStandardCommands> + <editType>InDialog</editType> + <standardAttributes> + <dataHistory>Use</dataHistory> + <name>Active</name> + <fillValue xsi:type="core:UndefinedValue"/> + <fullTextSearch>Use</fullTextSearch> + <minValue xsi:type="core:UndefinedValue"/> + <maxValue xsi:type="core:UndefinedValue"/> + </standardAttributes> + <standardAttributes> + <dataHistory>Use</dataHistory> + <name>LineNumber</name> + <fillValue xsi:type="core:UndefinedValue"/> + <fullTextSearch>Use</fullTextSearch> + <minValue xsi:type="core:UndefinedValue"/> + <maxValue xsi:type="core:UndefinedValue"/> + </standardAttributes> + <standardAttributes> + <dataHistory>Use</dataHistory> + <name>Recorder</name> + <fillValue xsi:type="core:UndefinedValue"/> + <fullTextSearch>Use</fullTextSearch> + <minValue xsi:type="core:UndefinedValue"/> + <maxValue xsi:type="core:UndefinedValue"/> + </standardAttributes> + <standardAttributes> + <dataHistory>Use</dataHistory> + <name>Period</name> + <fillValue xsi:type="core:UndefinedValue"/> + <fillChecking>ShowError</fillChecking> + <fullTextSearch>Use</fullTextSearch> + <minValue xsi:type="core:UndefinedValue"/> + <maxValue xsi:type="core:UndefinedValue"/> + </standardAttributes> + <dataLockControlMode>Managed</dataLockControlMode> + <dimensions uuid="ea31df21-1402-417a-9788-b17a7116e842"> + <name>ИдентификаторОперации</name> + <synonym> + <key>ru</key> + <value>Идентификатор операции</value> + </synonym> + <type> + <types>UUID</types> + </type> + <minValue xsi:type="core:UndefinedValue"/> + <maxValue xsi:type="core:UndefinedValue"/> + <dataHistory>Use</dataHistory> + <fillValue xsi:type="core:UndefinedValue"/> + <mainFilter>true</mainFilter> + </dimensions> + <dimensions uuid="7a93efb9-62bb-437a-8095-b26a2c8ce8ed"> + <name>ИдентификаторКомментария</name> + <synonym> + <key>ru</key> + <value>Идентификатор комментария</value> + </synonym> + <type> + <types>UUID</types> + </type> + <minValue xsi:type="core:UndefinedValue"/> + <maxValue xsi:type="core:UndefinedValue"/> + <dataHistory>Use</dataHistory> + <fillValue xsi:type="core:UndefinedValue"/> + <mainFilter>true</mainFilter> + </dimensions> +</mdclass:InformationRegister> diff --git a/SSL/src/InformationRegisters/КомментарииСтатистики/ManagerModule.bsl b/SSL/src/InformationRegisters/КомментарииСтатистики/ManagerModule.bsl new file mode 100644 index 000000000..fa1d520b0 --- /dev/null +++ b/SSL/src/InformationRegisters/КомментарииСтатистики/ManagerModule.bsl @@ -0,0 +1,162 @@ +#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда + +#Область СлужебныеПроцедурыИФункции + +Функция ПолучитьСсылку(Наименование, ОперацияСсылка) Экспорт + Если Наименование <> Неопределено Тогда + ХешированиеДанных = Новый ХешированиеДанных(ХешФункция.SHA1); + ХешированиеДанных.Добавить(Наименование); + ХешНаименования = СтрЗаменить(Строка(ХешированиеДанных.ХешСумма), " ", ""); + + Ссылки = НайтиПоХешу(ХешНаименования, ОперацияСсылка); + Если Ссылки.СсылкаКомментарий = Неопределено Тогда + Если РегистрыСведений.ОперацииСтатистики.МожноНовыйКомментарий(ОперацияСсылка) Тогда + Ссылка = СоздатьНовый(Наименование, ХешНаименования, ОперацияСсылка); + Иначе + Ссылка = ПолучитьСсылкуМногоКомментариев(ОперацияСсылка); + КонецЕсли; + Иначе + Если Ссылки.СсылкаКомментарийОперации = Неопределено Тогда + Если РегистрыСведений.ОперацииСтатистики.МожноНовыйКомментарий(ОперацияСсылка) Тогда + РегистрыСведений.КомментарииОперацииСтатистики.СоздатьНовуюЗапись(ОперацияСсылка, Ссылки.СсылкаКомментарий); + Ссылка = Ссылки.СсылкаКомментарий; + РегистрыСведений.ОперацииСтатистики.УвеличитьКоличествоУникальныхКомментариев(ОперацияСсылка, Ссылка); + Иначе + Ссылка = ПолучитьСсылкуМногоКомментариев(ОперацияСсылка); + КонецЕсли; + Иначе + Ссылка = Ссылки.СсылкаКомментарий; + КонецЕсли; + КонецЕсли; + Иначе + Ссылка = Новый УникальныйИдентификатор("00000000-0000-0000-0000-000000000000"); + КонецЕсли; + + Возврат Ссылка; +КонецФункции + +Функция ПолучитьСсылкуМногоКомментариев(СсылкаОперация) + Ссылки = Новый Структура; + Ссылки.Вставить("СсылкаКомментарий", Неопределено); + + НачатьТранзакцию(); + Попытка + ХешированиеДанных = Новый ХешированиеДанных(ХешФункция.SHA1); + СлишкомМногоКомментариев = НСтр("ru = 'Слишком много комментариев'"); + ХешированиеДанных.Добавить(СлишкомМногоКомментариев); + ХешНаименования = СтрЗаменить(Строка(ХешированиеДанных.ХешСумма), " ", ""); + + Ссылки = НайтиПоХешу(ХешНаименования, СсылкаОперация); + Если Ссылки.СсылкаКомментарий = Неопределено Тогда + Блокировка = Новый БлокировкаДанных; + + ЭлементБлокировки = Блокировка.Добавить("РегистрСведений.КомментарииСтатистики"); + ЭлементБлокировки.УстановитьЗначение("ХешНаименования", ХешНаименования); + ЭлементБлокировки.Режим = РежимБлокировкиДанных.Исключительный; + + Блокировка.Заблокировать(); + + Ссылки = НайтиПоХешу(ХешНаименования, СсылкаОперация); + + Если Ссылки.СсылкаКомментарий = Неопределено Тогда + Ссылки.СсылкаКомментарий = Новый УникальныйИдентификатор(); + + НаборЗаписей = РегистрыСведений.КомментарииСтатистики.СоздатьНаборЗаписей(); + НаборЗаписей.ОбменДанными.Загрузка = Истина; + НовЗапись = НаборЗаписей.Добавить(); + НовЗапись.ХешНаименования = ХешНаименования; + НовЗапись.ИдентификаторКомментария = Ссылки.СсылкаКомментарий; + НовЗапись.Наименование = СлишкомМногоКомментариев; + НаборЗаписей.Записать(Ложь); + КонецЕсли; + КонецЕсли; + + ЗафиксироватьТранзакцию(); + Исключение + ОтменитьТранзакцию(); + ВызватьИсключение; + КонецПопытки; + + Возврат Ссылки.СсылкаКомментарий; +КонецФункции + +Функция НайтиПоХешу(Хеш, СсылкаОперация) + Запрос = Новый Запрос; + Запрос.Текст = " + |ВЫБРАТЬ + | КомментарииСтатистики.ИдентификаторКомментария КАК ИдентификаторКомментария, + | ISNULL(КомментарииОперацииСтатистики.ИдентификаторКомментария, Неопределено) КАК ИдентификаторКомментарияОперации + |ИЗ + | РегистрСведений.КомментарииСтатистики КАК КомментарииСтатистики + |ЛЕВОЕ СОЕДИНЕНИЕ + | РегистрСведений.КомментарииОперацииСтатистики КАК КомментарииОперацииСтатистики + |ПО + | КомментарииОперацииСтатистики.ИдентификаторОперации = &ИдентификаторОперации + | И КомментарииОперацииСтатистики.ИдентификаторКомментария = КомментарииСтатистики.ИдентификаторКомментария + |ГДЕ + | КомментарииСтатистики.ХешНаименования = &ХешНаименования + |"; + Запрос.УстановитьПараметр("ХешНаименования", Хеш); + Запрос.УстановитьПараметр("ИдентификаторОперации", СсылкаОперация); + + Результат = Запрос.Выполнить(); + Если Результат.Пустой() Тогда + Ссылки = Новый Структура; + Ссылки.Вставить("СсылкаКомментарий", Неопределено); + Ссылки.Вставить("СсылкаКомментарийОперации", Неопределено); + Иначе + Выборка = Результат.Выбрать(); + Выборка.Следующий(); + + Ссылки = Новый Структура; + Ссылки.Вставить("СсылкаКомментарий", Выборка.ИдентификаторКомментария); + Ссылки.Вставить("СсылкаКомментарийОперации", Выборка.ИдентификаторКомментарияОперации); + КонецЕсли; + + Возврат Ссылки; +КонецФункции + +Функция СоздатьНовый(Наименование, ХешНаименования, ОперацияСсылка) + НачатьТранзакцию(); + + Попытка + Блокировка = Новый БлокировкаДанных; + + ЭлементБлокировки = Блокировка.Добавить("РегистрСведений.КомментарииСтатистики"); + ЭлементБлокировки.УстановитьЗначение("ХешНаименования", ХешНаименования); + ЭлементБлокировки.Режим = РежимБлокировкиДанных.Исключительный; + + ЭлементБлокировки = Блокировка.Добавить("РегистрСведений.ОперацииСтатистики"); + ЭлементБлокировки.УстановитьЗначение("ИдентификаторОперации", ОперацияСсылка); + ЭлементБлокировки.Режим = РежимБлокировкиДанных.Исключительный; + + Блокировка.Заблокировать(); + + Ссылки = НайтиПоХешу(ХешНаименования, ОперацияСсылка); + + Если Ссылки.СсылкаКомментарий = Неопределено Тогда + Ссылка = Новый УникальныйИдентификатор(); + + НаборЗаписей = РегистрыСведений.КомментарииСтатистики.СоздатьНаборЗаписей(); + НаборЗаписей.ОбменДанными.Загрузка = Истина; + НовЗапись = НаборЗаписей.Добавить(); + НовЗапись.ХешНаименования = ХешНаименования; + НовЗапись.ИдентификаторКомментария = Ссылка; + НовЗапись.Наименование = Наименование; + НаборЗаписей.Записать(Ложь); + + РегистрыСведений.ОперацииСтатистики.УвеличитьКоличествоУникальныхКомментариев(ОперацияСсылка, Ссылка); + КонецЕсли; + + ЗафиксироватьТранзакцию(); + Исключение + ОтменитьТранзакцию(); + ВызватьИсключение; + КонецПопытки; + + Возврат Ссылка; +КонецФункции + +#КонецОбласти + +#КонецЕсли diff --git a/SSL/src/InformationRegisters/КомментарииСтатистики/КомментарииСтатистики.mdo b/SSL/src/InformationRegisters/КомментарииСтатистики/КомментарииСтатистики.mdo new file mode 100644 index 000000000..7f31cdf13 --- /dev/null +++ b/SSL/src/InformationRegisters/КомментарииСтатистики/КомментарииСтатистики.mdo @@ -0,0 +1,106 @@ +<?xml version="1.0" encoding="UTF-8"?> +<mdclass:InformationRegister xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:core="http://g5.1c.ru/v8/dt/mcore" xmlns:mdclass="http://g5.1c.ru/v8/dt/metadata/mdclass" uuid="e964753f-7f4c-4f9f-bd17-cdac317c1d35"> + <producedTypes> + <selectionType typeId="18c4c10c-f927-41c6-a439-b2b84038e759" valueTypeId="52641286-b142-47c2-963d-c20ef4f3563a"/> + <listType typeId="63b2927b-396e-4142-84bc-edb3babe6989" valueTypeId="431fa718-5a0e-48d3-bb4b-7b42e6f8da91"/> + <managerType typeId="7ccb3df6-e212-4a38-b2da-16ed509fc3f3" valueTypeId="8b855598-175b-45f3-9060-3bf45a1cf1fe"/> + <recordSetType typeId="2b37ea01-8d70-4cbf-b956-da8a3dc3d2e2" valueTypeId="ad6655dd-7069-4eae-b832-0ea8082c0400"/> + <recordKeyType typeId="186742e7-fd82-40cf-a51f-90812398e411" valueTypeId="84ac2766-35ee-457c-acf1-1df5f8473d88"/> + <recordType typeId="b79347aa-8f98-43a3-ab16-0668b2d88e69" valueTypeId="d85152dc-be5b-4d84-b932-5d293f523eeb"/> + <recordManagerType typeId="2d46f258-dada-41ed-a6a4-4b8f4b0a91ec" valueTypeId="522ddc75-b54a-4296-922b-6f113c869837"/> + </producedTypes> + <name>КомментарииСтатистики</name> + <synonym> + <key>ru</key> + <value>Комментарии статистики</value> + </synonym> + <useStandardCommands>true</useStandardCommands> + <editType>InDialog</editType> + <standardAttributes> + <dataHistory>Use</dataHistory> + <name>Active</name> + <fillValue xsi:type="core:UndefinedValue"/> + <fullTextSearch>Use</fullTextSearch> + <minValue xsi:type="core:UndefinedValue"/> + <maxValue xsi:type="core:UndefinedValue"/> + </standardAttributes> + <standardAttributes> + <dataHistory>Use</dataHistory> + <name>LineNumber</name> + <fillValue xsi:type="core:UndefinedValue"/> + <fullTextSearch>Use</fullTextSearch> + <minValue xsi:type="core:UndefinedValue"/> + <maxValue xsi:type="core:UndefinedValue"/> + </standardAttributes> + <standardAttributes> + <dataHistory>Use</dataHistory> + <name>Recorder</name> + <fillValue xsi:type="core:UndefinedValue"/> + <fullTextSearch>Use</fullTextSearch> + <minValue xsi:type="core:UndefinedValue"/> + <maxValue xsi:type="core:UndefinedValue"/> + </standardAttributes> + <standardAttributes> + <dataHistory>Use</dataHistory> + <name>Period</name> + <fillValue xsi:type="core:UndefinedValue"/> + <fillChecking>ShowError</fillChecking> + <fullTextSearch>Use</fullTextSearch> + <minValue xsi:type="core:UndefinedValue"/> + <maxValue xsi:type="core:UndefinedValue"/> + </standardAttributes> + <dataLockControlMode>Managed</dataLockControlMode> + <resources uuid="20c2aba0-e2b2-4e4f-9d48-1515c0ae7b4d"> + <name>Наименование</name> + <synonym> + <key>ru</key> + <value>Наименование</value> + </synonym> + <type> + <types>String</types> + <stringQualifiers> + <length>1000</length> + </stringQualifiers> + </type> + <minValue xsi:type="core:UndefinedValue"/> + <maxValue xsi:type="core:UndefinedValue"/> + <fullTextSearch>Use</fullTextSearch> + <dataHistory>Use</dataHistory> + <fillValue xsi:type="core:StringValue"/> + </resources> + <dimensions uuid="43c22498-3fd6-4038-a291-05f0db9ab66a"> + <name>ИдентификаторКомментария</name> + <synonym> + <key>ru</key> + <value>Идентификатор комментария</value> + </synonym> + <type> + <types>UUID</types> + </type> + <minValue xsi:type="core:UndefinedValue"/> + <maxValue xsi:type="core:UndefinedValue"/> + <dataHistory>Use</dataHistory> + <fillValue xsi:type="core:UndefinedValue"/> + <mainFilter>true</mainFilter> + </dimensions> + <dimensions uuid="4ffc9d16-c450-4ecb-b8f6-9ec6fe37fc75"> + <name>ХешНаименования</name> + <synonym> + <key>ru</key> + <value>Хеш наименования</value> + </synonym> + <type> + <types>String</types> + <stringQualifiers> + <length>40</length> + </stringQualifiers> + </type> + <minValue xsi:type="core:UndefinedValue"/> + <maxValue xsi:type="core:UndefinedValue"/> + <indexing>Index</indexing> + <fullTextSearch>Use</fullTextSearch> + <dataHistory>Use</dataHistory> + <fillValue xsi:type="core:StringValue"/> + <mainFilter>true</mainFilter> + </dimensions> +</mdclass:InformationRegister> diff --git a/SSL/src/InformationRegisters/КурсыВалют/Forms/ФормаЗаписи/Form.form b/SSL/src/InformationRegisters/КурсыВалют/Forms/ФормаЗаписи/Form.form index 72daec0d5..10d6ab5a0 100644 --- a/SSL/src/InformationRegisters/КурсыВалют/Forms/ФормаЗаписи/Form.form +++ b/SSL/src/InformationRegisters/КурсыВалют/Forms/ФормаЗаписи/Form.form @@ -224,7 +224,6 @@ <autoFillCheck>true</autoFillCheck> <allowFormCustomize>true</allowFormCustomize> <enabled>true</enabled> - <verticalScroll>UseIfNecessary</verticalScroll> <showTitle>auto</showTitle> <showCloseButton>true</showCloseButton> <attributes> diff --git a/SSL/src/InformationRegisters/КурсыВалют/Forms/ФормаЗаписи/Module.bsl b/SSL/src/InformationRegisters/КурсыВалют/Forms/ФормаЗаписи/Module.bsl index 6a7932744..3e21618a5 100644 --- a/SSL/src/InformationRegisters/КурсыВалют/Forms/ФормаЗаписи/Module.bsl +++ b/SSL/src/InformationRegisters/КурсыВалют/Forms/ФормаЗаписи/Module.bsl @@ -22,6 +22,8 @@ КонецПроцедуры + + &НаКлиенте Процедура ПослеЗаписи(ПараметрыЗаписи) Оповестить("Запись_КурсыВалют", ПараметрыЗаписи, Запись); diff --git a/SSL/src/InformationRegisters/КурсыВалют/RecordSetModule.bsl b/SSL/src/InformationRegisters/КурсыВалют/RecordSetModule.bsl index ea68d31c8..b074b9224 100644 --- a/SSL/src/InformationRegisters/КурсыВалют/RecordSetModule.bsl +++ b/SSL/src/InformationRegisters/КурсыВалют/RecordSetModule.bsl @@ -85,7 +85,7 @@ КонецЕсли; КонецЕсли; - НаборЗаписей.ДополнительныеСвойства.Вставить("ОтключитьКонтрольПодчиненныхВалют", Истина); + НаборЗаписей.ДополнительныеСвойства.Вставить("ОтключитьКонтрольПодчиненныхВалют"); НаборЗаписей.ДополнительныеСвойства.Вставить("ПропуститьПроверкуЗапретаИзменения"); Если ЗаписьКурсовВалют.Курс > 0 Тогда @@ -117,7 +117,7 @@ НаборЗаписей = РегистрыСведений.КурсыВалют.СоздатьНаборЗаписей(); НаборЗаписей.Отбор.Валюта.Установить(ВалютаСсылка); НаборЗаписей.Отбор.Период.Установить(Период); - НаборЗаписей.ДополнительныеСвойства.Вставить("ОтключитьКонтрольПодчиненныхВалют", Истина); + НаборЗаписей.ДополнительныеСвойства.Вставить("ОтключитьКонтрольПодчиненныхВалют"); НаборЗаписей.Записать(); КонецПроцедуры @@ -151,9 +151,13 @@ Если ОшибкаРасчетаКурсаПоФормуле[Валюта] = Неопределено Тогда ОшибкаРасчетаКурсаПоФормуле.Вставить(Валюта, Истина); ИнформацияОбОшибке = ИнформацияОбОшибке(); - ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Расчет курса валюты ""%1"" по формуле ""%2"" не выполнен:'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), Валюта, Формула); - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстОшибки + Символы.ПС + КраткоеПредставлениеОшибки(ИнформацияОбОшибке), Валюта, "Объект.ФормулаРасчетаКурса"); + + ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Расчет курса валюты ""%1"" по формуле ""%2"" не выполнен:'", + ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), Валюта, Формула); + + ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстОшибки + Символы.ПС + КраткоеПредставлениеОшибки(ИнформацияОбОшибке), + Валюта, "Объект.ФормулаРасчетаКурса"); + Если ДополнительныеСвойства.Свойство("ОбновитьКурсЗависимойВалюты") Тогда ВызватьИсключение ТекстОшибки + Символы.ПС + КраткоеПредставлениеОшибки(ИнформацияОбОшибке); Иначе diff --git a/SSL/src/InformationRegisters/НаборыЗначенийДоступа/Forms/ФормаЗаписи/Form.form b/SSL/src/InformationRegisters/НаборыЗначенийДоступа/Forms/ФормаЗаписи/Form.form index 9c0b85a36..e1568fddb 100644 --- a/SSL/src/InformationRegisters/НаборыЗначенийДоступа/Forms/ФормаЗаписи/Form.form +++ b/SSL/src/InformationRegisters/НаборыЗначенийДоступа/Forms/ФормаЗаписи/Form.form @@ -415,7 +415,6 @@ <autoFillCheck>true</autoFillCheck> <allowFormCustomize>true</allowFormCustomize> <enabled>true</enabled> - <verticalScroll>UseIfNecessary</verticalScroll> <showTitle>auto</showTitle> <showCloseButton>true</showCloseButton> <attributes> @@ -452,7 +451,7 @@ <name>ВключитьВозможностьРедактирования</name> </handler> </action> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <commandInterface> diff --git a/SSL/src/InformationRegisters/НаборыЗначенийДоступа/Forms/ФормаСписка/Form.form b/SSL/src/InformationRegisters/НаборыЗначенийДоступа/Forms/ФормаСписка/Form.form index e98f250b9..9e4c781e2 100644 --- a/SSL/src/InformationRegisters/НаборыЗначенийДоступа/Forms/ФормаСписка/Form.form +++ b/SSL/src/InformationRegisters/НаборыЗначенийДоступа/Forms/ФормаСписка/Form.form @@ -531,7 +531,6 @@ <autoFillCheck>true</autoFillCheck> <allowFormCustomize>true</allowFormCustomize> <enabled>true</enabled> - <verticalScroll>UseIfNecessary</verticalScroll> <showTitle>auto</showTitle> <showCloseButton>true</showCloseButton> <attributes> @@ -594,7 +593,7 @@ <name>ВключитьВозможностьРедактирования</name> </handler> </action> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <commandInterface> diff --git a/SSL/src/InformationRegisters/НаборыЗначенийДоступа/ManagerModule.bsl b/SSL/src/InformationRegisters/НаборыЗначенийДоступа/ManagerModule.bsl index 67287fb50..b756078d9 100644 --- a/SSL/src/InformationRegisters/НаборыЗначенийДоступа/ManagerModule.bsl +++ b/SSL/src/InformationRegisters/НаборыЗначенийДоступа/ManagerModule.bsl @@ -14,8 +14,9 @@ ПоследниеИзменения = СтандартныеПодсистемыСервер.ИзмененияПараметраРаботыПрограммы( Параметры, "ТипыГруппИЗначенийДоступа"); - Если ПоследниеИзменения = Неопределено - ИЛИ ПоследниеИзменения.Количество() > 0 Тогда + Если (ПоследниеИзменения = Неопределено + ИЛИ ПоследниеИзменения.Количество() > 0) + И Константы.ОграничиватьДоступНаУровнеЗаписей.Получить() Тогда УправлениеДоступомСлужебный.УстановитьЗаполнениеДанныхДляОграниченияДоступа(Истина); КонецЕсли; diff --git a/SSL/src/InformationRegisters/НазначениеДополнительныхОбработок/Commands/НазначениеДополнительныхОбработок/CommandModule.bsl b/SSL/src/InformationRegisters/НазначениеДополнительныхОбработок/Commands/НазначениеДополнительныхОбработок/CommandModule.bsl deleted file mode 100644 index 102867d06..000000000 --- a/SSL/src/InformationRegisters/НазначениеДополнительныхОбработок/Commands/НазначениеДополнительныхОбработок/CommandModule.bsl +++ /dev/null @@ -1,6 +0,0 @@ -&НаКлиенте -Процедура ОбработкаКоманды(ПараметрКоманды, ПараметрыВыполненияКоманды) - Отбор = Новый Структура("ОбъектНазначения", ПараметрКоманды); - ПараметрыФормы = Новый Структура("Отбор, РежимОткрытияИзФормы", Отбор, Истина); - ОткрытьФорму("РегистрСведений.НазначениеДополнительныхОбработок.ФормаСписка", ПараметрыФормы, ПараметрыВыполненияКоманды.Источник, ПараметрыВыполненияКоманды.Уникальность, ПараметрыВыполненияКоманды.Окно); -КонецПроцедуры diff --git a/SSL/src/InformationRegisters/НазначениеДополнительныхОбработок/ManagerModule.bsl b/SSL/src/InformationRegisters/НазначениеДополнительныхОбработок/ManagerModule.bsl index ef20e7371..1c03acbab 100644 --- a/SSL/src/InformationRegisters/НазначениеДополнительныхОбработок/ManagerModule.bsl +++ b/SSL/src/InformationRegisters/НазначениеДополнительныхОбработок/ManagerModule.bsl @@ -71,11 +71,6 @@ | ИНАЧЕ ЛОЖЬ | КОНЕЦ КАК ИспользоватьОтчеты, | ВЫБОР - | КОГДА ДополнительныеОтчетыИОбработкиНазначение.Ссылка.Вид = &ВидПечатнаяФорма - | ТОГДА ИСТИНА - | ИНАЧЕ ЛОЖЬ - | КОНЕЦ КАК ИспользоватьПечатныеФормы, - | ВЫБОР | КОГДА ДополнительныеОтчетыИОбработкиНазначение.Ссылка.Вид = &ВидСозданиеСвязанныхОбъектов | ТОГДА ИСТИНА | ИНАЧЕ ЛОЖЬ @@ -96,7 +91,6 @@ | ФормыОбъектов.ОбъектНазначения, | ЛОЖЬ КАК ИспользоватьЗаполнениеОбъекта, | ФормыОбъектов.ИспользоватьОтчеты, - | ФормыОбъектов.ИспользоватьПечатныеФормы, | ФормыОбъектов.ИспользоватьСозданиеСвязанныхОбъектов, | &ТипФормыОбъекта КАК ТипФормы |ПОМЕСТИТЬ втРезультат @@ -112,7 +106,6 @@ | ЛОЖЬ, | ЛОЖЬ, | ЛОЖЬ, - | ЛОЖЬ, | &ТипФормыОбъекта |ИЗ | втПервичныеДанные КАК ОтключенныеФормыОбъектов @@ -125,7 +118,6 @@ | ФормыСписков.ОбъектНазначения, | ФормыСписков.ИспользоватьЗаполнениеОбъекта, | ФормыСписков.ИспользоватьОтчеты, - | ФормыСписков.ИспользоватьПечатныеФормы, | ФормыСписков.ИспользоватьСозданиеСвязанныхОбъектов, | &ТипФормыСписка |ИЗ @@ -140,7 +132,6 @@ | ЛОЖЬ, | ЛОЖЬ, | ЛОЖЬ, - | ЛОЖЬ, | &ТипФормыСписка |ИЗ | втПервичныеДанные КАК ОтключенныеФормыСписков @@ -154,7 +145,6 @@ | табРезультат.ТипФормы, | МАКСИМУМ(табРезультат.ИспользоватьЗаполнениеОбъекта) КАК ИспользоватьЗаполнениеОбъекта, | МАКСИМУМ(табРезультат.ИспользоватьОтчеты) КАК ИспользоватьОтчеты, - | МАКСИМУМ(табРезультат.ИспользоватьПечатныеФормы) КАК ИспользоватьПечатныеФормы, | МАКСИМУМ(табРезультат.ИспользоватьСозданиеСвязанныхОбъектов) КАК ИспользоватьСозданиеСвязанныхОбъектов |ИЗ | втРезультат КАК табРезультат diff --git a/SSL/src/InformationRegisters/НазначениеДополнительныхОбработок/НазначениеДополнительныхОбработок.mdo b/SSL/src/InformationRegisters/НазначениеДополнительныхОбработок/НазначениеДополнительныхОбработок.mdo index 019059c6d..b0aff4157 100644 --- a/SSL/src/InformationRegisters/НазначениеДополнительныхОбработок/НазначениеДополнительныхОбработок.mdo +++ b/SSL/src/InformationRegisters/НазначениеДополнительныхОбработок/НазначениеДополнительныхОбработок.mdo @@ -86,24 +86,6 @@ <dataHistory>Use</dataHistory> <fillValue xsi:type="core:UndefinedValue"/> </resources> - <resources uuid="64ac2c2a-2726-4ab9-9a6a-3d08f3fc0618"> - <name>ИспользоватьПечатныеФормы</name> - <synonym> - <key>ru</key> - <value>Использовать печатные формы</value> - </synonym> - <type> - <types>Boolean</types> - </type> - <toolTip> - <key>ru</key> - <value>Использовать дополнительные обработки печатные формы</value> - </toolTip> - <minValue xsi:type="core:UndefinedValue"/> - <maxValue xsi:type="core:UndefinedValue"/> - <dataHistory>Use</dataHistory> - <fillValue xsi:type="core:UndefinedValue"/> - </resources> <resources uuid="8569cd73-d40d-4d92-83e0-8ece0c03a86a"> <name>ИспользоватьСозданиеСвязанныхОбъектов</name> <synonym> @@ -189,16 +171,4 @@ <value> </value> </fillValue> </dimensions> - <commands uuid="97a65f49-845f-4eed-ae81-61266ed3e05b"> - <name>НазначениеДополнительныхОбработок</name> - <synonym> - <key>ru</key> - <value>Назначение дополнительных обработок</value> - </synonym> - <group>FormNavigationPanelGoTo</group> - <commandParameterType> - <types>CatalogRef.ИдентификаторыОбъектовМетаданных</types> - </commandParameterType> - <representation>Auto</representation> - </commands> </mdclass:InformationRegister> diff --git a/SSL/src/InformationRegisters/НаличиеПрисоединенныхФайлов/НаличиеПрисоединенныхФайлов.mdo b/SSL/src/InformationRegisters/НаличиеПрисоединенныхФайлов/НаличиеПрисоединенныхФайлов.mdo index 6b0b6d98f..0277afb57 100644 --- a/SSL/src/InformationRegisters/НаличиеПрисоединенныхФайлов/НаличиеПрисоединенныхФайлов.mdo +++ b/SSL/src/InformationRegisters/НаличиеПрисоединенныхФайлов/НаличиеПрисоединенныхФайлов.mdo @@ -96,12 +96,7 @@ <value>Объект с файлами</value> </synonym> <type> - <types>DocumentRef.ЭлектронноеПисьмоИсходящее</types> - <types>DocumentRef.ЗапланированноеВзаимодействие</types> - <types>DocumentRef.ЭлектронноеПисьмоВходящее</types> - <types>DocumentRef.ТелефонныйЗвонок</types> - <types>DocumentRef.Встреча</types> - <types>DocumentRef.СообщениеSMS</types> + <types>DefinedType.ВладелецПрисоединенныхФайлов</types> </type> <toolTip> <key>ru</key> diff --git a/SSL/src/InformationRegisters/НапоминанияПользователя/Forms/МоиНапоминания/Form.form b/SSL/src/InformationRegisters/НапоминанияПользователя/Forms/МоиНапоминания/Form.form index 2c2cfe434..a06abb372 100644 --- a/SSL/src/InformationRegisters/НапоминанияПользователя/Forms/МоиНапоминания/Form.form +++ b/SSL/src/InformationRegisters/НапоминанияПользователя/Forms/МоиНапоминания/Form.form @@ -536,7 +536,6 @@ <autoFillCheck>true</autoFillCheck> <allowFormCustomize>true</allowFormCustomize> <enabled>true</enabled> - <verticalScroll>UseIfNecessary</verticalScroll> <showTitle>auto</showTitle> <showCloseButton>true</showCloseButton> <attributes> @@ -608,7 +607,7 @@ </handler> </action> <representation>Text</representation> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <formCommands> @@ -634,7 +633,7 @@ </handler> </action> <representation>Text</representation> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <formCommands> @@ -660,7 +659,7 @@ </handler> </action> <representation>Text</representation> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <commandInterface> diff --git a/SSL/src/InformationRegisters/НапоминанияПользователя/Forms/Напоминание/Form.form b/SSL/src/InformationRegisters/НапоминанияПользователя/Forms/Напоминание/Form.form index ad98122c8..94beb88b9 100644 --- a/SSL/src/InformationRegisters/НапоминанияПользователя/Forms/Напоминание/Form.form +++ b/SSL/src/InformationRegisters/НапоминанияПользователя/Forms/Напоминание/Form.form @@ -903,7 +903,6 @@ <autoFillCheck>true</autoFillCheck> <allowFormCustomize>true</allowFormCustomize> <enabled>true</enabled> - <verticalScroll>UseIfNecessary</verticalScroll> <showTitle>auto</showTitle> <showCloseButton>true</showCloseButton> <attributes> @@ -1053,7 +1052,7 @@ </handler> </action> <representation>Picture</representation> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <commandInterface> diff --git a/SSL/src/InformationRegisters/НапоминанияПользователя/Forms/ФормаОповещения/Form.form b/SSL/src/InformationRegisters/НапоминанияПользователя/Forms/ФормаОповещения/Form.form index 51e1f1d89..239992d77 100644 --- a/SSL/src/InformationRegisters/НапоминанияПользователя/Forms/ФормаОповещения/Form.form +++ b/SSL/src/InformationRegisters/НапоминанияПользователя/Forms/ФормаОповещения/Form.form @@ -755,7 +755,6 @@ <autoFillCheck>true</autoFillCheck> <allowFormCustomize>true</allowFormCustomize> <enabled>true</enabled> - <verticalScroll>UseIfNecessary</verticalScroll> <showTitle>auto</showTitle> <showCloseButton>true</showCloseButton> <attributes> @@ -983,7 +982,7 @@ <name>Отложить</name> </handler> </action> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <formCommands> @@ -1005,7 +1004,7 @@ <name>Прекратить</name> </handler> </action> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <formCommands> @@ -1030,7 +1029,7 @@ <name>КомандаОткрыть</name> </handler> </action> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <formCommands> @@ -1056,7 +1055,7 @@ <name>Изменить</name> </handler> </action> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <commandInterface> diff --git a/SSL/src/InformationRegisters/НапоминанияПользователя/Forms/ФормаОповещения/Module.bsl b/SSL/src/InformationRegisters/НапоминанияПользователя/Forms/ФормаОповещения/Module.bsl index 62da3dca8..3747633e7 100644 --- a/SSL/src/InformationRegisters/НапоминанияПользователя/Forms/ФормаОповещения/Module.bsl +++ b/SSL/src/InformationRegisters/НапоминанияПользователя/Forms/ФормаОповещения/Module.bsl @@ -14,21 +14,18 @@ &НаКлиенте Процедура ПриОткрытии(Отказ) + ЗаполнитьСрокиПовторногоНапоминания(); СрокПовторногоОповещения = "15м"; СрокПовторногоОповещения = НапоминанияПользователяКлиентСервер.ОформитьВремя(СрокПовторногоОповещения); - ОбновитьТаблицуНапоминаний(); - - ЗаполнитьСрокиПовторногоНапоминания(); - ОбновитьВремяВТаблицеНапоминаний(); - ПодключитьОбработчикОжидания("ОбновитьВремяВТаблицеНапоминаний", 5); Активизировать(); КонецПроцедуры &НаКлиенте Процедура ПриПовторномОткрытии() ОбновитьТаблицуНапоминаний(); + ОбновитьВремяВТаблицеНапоминаний(); ЭтотОбъект.ТекущийЭлемент = Элементы.СрокПовторногоОповещения; Активизировать(); КонецПроцедуры @@ -37,6 +34,10 @@ Процедура ПриЗакрытии() ОтложитьАктивныеНапоминания(); НапоминанияПользователяКлиент.СброситьТаймерПроверкиТекущихОповещений(); + + // Принудительное отключение обработчиков необходимо в связи с тем, что форма не выгружается из памяти. + ОтключитьОбработчикОжидания("ОбновитьТаблицуНапоминаний"); + ОтключитьОбработчикОжидания("ОбновитьВремяВТаблицеНапоминаний"); КонецПроцедуры #КонецОбласти @@ -60,7 +61,7 @@ &НаКлиенте Процедура НапоминанияПриАктивизацииСтроки(Элемент) - Если Элемент.ТекущаяСтрока = Неопределено Тогда + Если Элемент.ТекущиеДанные = Неопределено Тогда Возврат; КонецЕсли; @@ -188,6 +189,8 @@ &НаКлиенте Процедура ОбновитьВремяВТаблицеНапоминаний() + ОтключитьОбработчикОжидания("ОбновитьВремяВТаблицеНапоминаний"); + Для Каждого СтрокаТаблицы Из Напоминания Цикл ПредставлениеВремени = НСтр("ru = 'срок не определен'"); @@ -204,6 +207,8 @@ КонецЕсли; КонецЦикла; + + ПодключитьОбработчикОжидания("ОбновитьВремяВТаблицеНапоминаний", 5, Истина); КонецПроцедуры &НаКлиенте diff --git a/SSL/src/InformationRegisters/НаследованиеНастроекПравОбъектов/Forms/ФормаЗаписи/Form.form b/SSL/src/InformationRegisters/НаследованиеНастроекПравОбъектов/Forms/ФормаЗаписи/Form.form index 65d85d5fd..2a90ebe04 100644 --- a/SSL/src/InformationRegisters/НаследованиеНастроекПравОбъектов/Forms/ФормаЗаписи/Form.form +++ b/SSL/src/InformationRegisters/НаследованиеНастроекПравОбъектов/Forms/ФормаЗаписи/Form.form @@ -202,7 +202,6 @@ <autoFillCheck>true</autoFillCheck> <allowFormCustomize>true</allowFormCustomize> <enabled>true</enabled> - <verticalScroll>UseIfNecessary</verticalScroll> <showTitle>auto</showTitle> <showCloseButton>true</showCloseButton> <attributes> @@ -239,7 +238,7 @@ <name>ВключитьВозможностьРедактирования</name> </handler> </action> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <commandInterface> diff --git a/SSL/src/InformationRegisters/НаследованиеНастроекПравОбъектов/Forms/ФормаСписка/Form.form b/SSL/src/InformationRegisters/НаследованиеНастроекПравОбъектов/Forms/ФормаСписка/Form.form index a659e609c..76ca68ce8 100644 --- a/SSL/src/InformationRegisters/НаследованиеНастроекПравОбъектов/Forms/ФормаСписка/Form.form +++ b/SSL/src/InformationRegisters/НаследованиеНастроекПравОбъектов/Forms/ФормаСписка/Form.form @@ -422,7 +422,6 @@ <autoFillCheck>true</autoFillCheck> <allowFormCustomize>true</allowFormCustomize> <enabled>true</enabled> - <verticalScroll>UseIfNecessary</verticalScroll> <showTitle>auto</showTitle> <showCloseButton>true</showCloseButton> <attributes> @@ -465,7 +464,7 @@ <name>ВключитьВозможностьРедактирования</name> </handler> </action> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <formCommands> @@ -487,7 +486,7 @@ <name>ОбновитьДанныеРегистра</name> </handler> </action> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <commandInterface> diff --git a/SSL/src/InformationRegisters/НаследованиеНастроекПравОбъектов/ManagerModule.bsl b/SSL/src/InformationRegisters/НаследованиеНастроекПравОбъектов/ManagerModule.bsl index 481a2de14..440efa4a1 100644 --- a/SSL/src/InformationRegisters/НаследованиеНастроекПравОбъектов/ManagerModule.bsl +++ b/SSL/src/InformationRegisters/НаследованиеНастроекПравОбъектов/ManagerModule.bsl @@ -22,8 +22,8 @@ Если ВладельцыНастроекПрав = Неопределено Тогда - ВозможныеПрава = УправлениеДоступомСлужебныйПовтИсп.Параметры( - ).ВозможныеПраваДляНастройкиПравОбъектов; + ТекущиеПараметры = УправлениеДоступомСлужебныйПовтИсп.Параметры(); + ВозможныеПрава = ТекущиеПараметры.ВозможныеПраваДляНастройкиПравОбъектов; Запрос = Новый Запрос; ТекстЗапроса = @@ -88,8 +88,7 @@ + Символы.ПС; Если ВозможныеПрава.ПоТипам.Получить(ТипВладельца) = Неопределено Тогда - ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - ЗаголовокОшибки + + ВызватьИсключение ЗаголовокОшибки + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Для типа ""%1"" |не настроено использование настроек прав объектов.'"), Строка(ТипВладельца)); @@ -151,7 +150,7 @@ НовыеЗаписи = РодителиОбъекта(Ссылка, Ссылка, СвойстваРодителяОбъекта); Иначе НовыеЗаписи = УправлениеДоступомСлужебныйПовтИсп.ТаблицаПустогоНабораЗаписей( - "РегистрСведений.НаследованиеНастроекПравОбъектов").Скопировать(); + Метаданные.РегистрыСведений.НаследованиеНастроекПравОбъектов.ПолноеИмя()).Скопировать(); НоваяСтрока = НовыеЗаписи.Добавить(); НоваяСтрока.Объект = Ссылка; @@ -188,52 +187,6 @@ КонецПроцедуры -Процедура ОбновитьИерархиюВладельца(Ссылка, ЕстьИзменения, ОбъектыСИзменениями) Экспорт - - // Обновление состава родителей элементов в иерархии текущего значения. - Запрос = Новый Запрос; - Запрос.УстановитьПараметр("Ссылка", Ссылка); - Запрос.Текст = - "ВЫБРАТЬ - | ТаблицаСИерархией.Ссылка КАК ПодчиненнаяСсылка - |ИЗ - | &ТаблицаСИерархией КАК ТаблицаСИерархией - |ГДЕ - | ТаблицаСИерархией.Ссылка В ИЕРАРХИИ(&Ссылка) - | И ТаблицаСИерархией.Ссылка <> &Ссылка"; - - Запрос.Текст = СтрЗаменить( - Запрос.Текст, "&ТаблицаСИерархией", Ссылка.Метаданные().ПолноеИмя() ); - - Выборка = Запрос.Выполнить().Выбрать(); - Пока Выборка.Следующий() Цикл - - НовыеЗаписи = РодителиОбъекта(Выборка.ПодчиненнаяСсылка, Ссылка); - - НаборЗаписей = РегистрыСведений.НаследованиеНастроекПравОбъектов.СоздатьНаборЗаписей(); - НаборЗаписей.Отбор.Объект.Установить(Выборка.ПодчиненнаяСсылка); - - Данные = Новый Структура; - Данные.Вставить("НаборЗаписей", НаборЗаписей); - Данные.Вставить("НовыеЗаписи", НовыеЗаписи); - - ЕстьТекущиеИзменения = Ложь; - УправлениеДоступомСлужебный.ОбновитьНаборЗаписей(Данные, ЕстьТекущиеИзменения); - - Если ЕстьТекущиеИзменения Тогда - ЕстьИзменения = Истина; - - Если ОбъектыСИзменениями <> Неопределено - И ОбъектыСИзменениями.Найти(Ссылка) = Неопределено Тогда - - ОбъектыСИзменениями.Добавить(Ссылка); - КонецЕсли; - КонецЕсли; - - КонецЦикла; - -КонецПроцедуры - // Заполняет НаборЗаписей родителями объекта, включая себя, как родителя. // // Параметры: @@ -251,7 +204,7 @@ Функция РодителиОбъекта(Ссылка, СсылкаОбъекта, СвойстваРодителяОбъекта = "", ПолучатьНаследование = Истина) Экспорт НовыеЗаписи = УправлениеДоступомСлужебныйПовтИсп.ТаблицаПустогоНабораЗаписей( - "РегистрСведений.НаследованиеНастроекПравОбъектов").Скопировать(); + Метаданные.РегистрыСведений.НаследованиеНастроекПравОбъектов.ПолноеИмя()).Скопировать(); // Получение флажка наследования настроек прав родителей для ссылки. Если ПолучатьНаследование Тогда @@ -318,6 +271,54 @@ КонецФункции +// Для процедуры ОбновитьРодителейВладельца. +Процедура ОбновитьИерархиюВладельца(Ссылка, ЕстьИзменения, ОбъектыСИзменениями) + + // Обновление состава родителей элементов в иерархии текущего значения. + Запрос = Новый Запрос; + Запрос.УстановитьПараметр("Ссылка", Ссылка); + Запрос.Текст = + "ВЫБРАТЬ + | ТаблицаСИерархией.Ссылка КАК ПодчиненнаяСсылка + |ИЗ + | &ТаблицаСИерархией КАК ТаблицаСИерархией + |ГДЕ + | ТаблицаСИерархией.Ссылка В ИЕРАРХИИ(&Ссылка) + | И ТаблицаСИерархией.Ссылка <> &Ссылка"; + + Запрос.Текст = СтрЗаменить( + Запрос.Текст, "&ТаблицаСИерархией", Ссылка.Метаданные().ПолноеИмя() ); + + Выборка = Запрос.Выполнить().Выбрать(); + Пока Выборка.Следующий() Цикл + + НовыеЗаписи = РодителиОбъекта(Выборка.ПодчиненнаяСсылка, Ссылка); + + НаборЗаписей = РегистрыСведений.НаследованиеНастроекПравОбъектов.СоздатьНаборЗаписей(); + НаборЗаписей.Отбор.Объект.Установить(Выборка.ПодчиненнаяСсылка); + + Данные = Новый Структура; + Данные.Вставить("НаборЗаписей", НаборЗаписей); + Данные.Вставить("НовыеЗаписи", НовыеЗаписи); + + ЕстьТекущиеИзменения = Ложь; + УправлениеДоступомСлужебный.ОбновитьНаборЗаписей(Данные, ЕстьТекущиеИзменения); + + Если ЕстьТекущиеИзменения Тогда + ЕстьИзменения = Истина; + + Если ОбъектыСИзменениями <> Неопределено + И ОбъектыСИзменениями.Найти(Ссылка) = Неопределено Тогда + + ОбъектыСИзменениями.Добавить(Ссылка); + КонецЕсли; + КонецЕсли; + + КонецЦикла; + +КонецПроцедуры + +// Для процедур ОбновитьРодителейВладельца, РодителиОбъекта. Функция СвойстваРодителя(Ссылка) Запрос = Новый Запрос; diff --git a/SSL/src/InformationRegisters/НастройкиВерсионированияОбъектов/Forms/ВерсионированиеОбъектов/Form.form b/SSL/src/InformationRegisters/НастройкиВерсионированияОбъектов/Forms/ВерсионированиеОбъектов/Form.form index 74579758a..8913551ae 100644 --- a/SSL/src/InformationRegisters/НастройкиВерсионированияОбъектов/Forms/ВерсионированиеОбъектов/Form.form +++ b/SSL/src/InformationRegisters/НастройкиВерсионированияОбъектов/Forms/ВерсионированиеОбъектов/Form.form @@ -1130,7 +1130,7 @@ <representationInContextMenu>Auto</representationInContextMenu> </items> <items xsi:type="form:Button"> - <name>ФормаВерсионироватьПослеСтарта</name> + <name>ФормаВерсионироватьПриСтарте</name> <id>97</id> <visible>true</visible> <enabled>true</enabled> @@ -1138,7 +1138,7 @@ <common>true</common> </userVisible> <extendedTooltip> - <name>ФормаВерсионироватьПослеСтартаРасширеннаяПодсказка</name> + <name>ФормаВерсионироватьПриСтартеРасширеннаяПодсказка</name> <id>98</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> @@ -1504,7 +1504,6 @@ <autoFillCheck>true</autoFillCheck> <allowFormCustomize>true</allowFormCustomize> <enabled>true</enabled> - <verticalScroll>UseIfNecessary</verticalScroll> <showTitle>auto</showTitle> <showCloseButton>true</showCloseButton> <attributes> @@ -1795,7 +1794,7 @@ <name>УстановитьНастройкиПоУмолчанию</name> </handler> </action> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <formCommands> @@ -1817,7 +1816,7 @@ <name>УстановитьВариантВерсионированияПриПроведении</name> </handler> </action> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <formCommands> @@ -1839,7 +1838,7 @@ <name>УстановитьРежимВерсионированияПриЗаписи</name> </handler> </action> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <formCommands> @@ -1861,7 +1860,7 @@ <name>УстановитьВариантВерсионированияНеВерсионировать</name> </handler> </action> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <formCommands> @@ -1887,7 +1886,7 @@ <name>Обновить</name> </handler> </action> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <formCommands> @@ -1909,7 +1908,7 @@ <name>Очистить</name> </handler> </action> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <formCommands> @@ -1931,7 +1930,7 @@ <name>НастроитьРасписание</name> </handler> </action> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <formCommands> @@ -1953,7 +1952,7 @@ <name>ЗаПоследнююНеделю</name> </handler> </action> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <formCommands> @@ -1975,7 +1974,7 @@ <name>ЗаПоследнийМесяц</name> </handler> </action> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <formCommands> @@ -1997,7 +1996,7 @@ <name>ЗаПоследниеТриМесяца</name> </handler> </action> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <formCommands> @@ -2019,7 +2018,7 @@ <name>ЗаПоследниеШестьМесяцев</name> </handler> </action> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <formCommands> @@ -2041,7 +2040,7 @@ <name>ЗаПоследнийГод</name> </handler> </action> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <formCommands> @@ -2063,7 +2062,7 @@ <name>Бессрочно</name> </handler> </action> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <formCommands> @@ -2085,7 +2084,7 @@ <name>ВерсионироватьПриСтарте</name> </handler> </action> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <formCommands> @@ -2107,7 +2106,7 @@ <name>КоличествоИОбъемХранимыхВерсийОбъектов</name> </handler> </action> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <commandInterface> diff --git a/SSL/src/InformationRegisters/НастройкиВерсионированияОбъектов/Forms/ВерсионированиеОбъектов/Module.bsl b/SSL/src/InformationRegisters/НастройкиВерсионированияОбъектов/Forms/ВерсионированиеОбъектов/Module.bsl index f449030e6..01c80466f 100644 --- a/SSL/src/InformationRegisters/НастройкиВерсионированияОбъектов/Forms/ВерсионированиеОбъектов/Module.bsl +++ b/SSL/src/InformationRegisters/НастройкиВерсионированияОбъектов/Forms/ВерсионированиеОбъектов/Module.bsl @@ -202,8 +202,7 @@ // Тип параметра команды ИсторияИзменений содержит состав объектов для которых // применяется версионирование. МассивТипов = Метаданные.ОбщиеКоманды.ИсторияИзменений.ТипПараметраКоманды.Типы(); - ЕстьСправочники = Ложь; - ЕстьДокументы = Ложь; + ЕстьБизнесПроцессы = Ложь; ВсеСправочники = Справочники.ТипВсеСсылки(); ВсеДокументы = Документы.ТипВсеСсылки(); УзелСправочники = Неопределено; @@ -240,6 +239,7 @@ КонецЕсли; НоваяСтрокаТаблицы = УзелБизнесПроцессы.Строки.Добавить(); НоваяСтрокаТаблицы.КлассОбъекта = "КлассБизнесПроцессы"; + ЕстьБизнесПроцессы = Истина; КонецЕсли; МетаданныеОбъекта = Метаданные.НайтиПоТипу(Тип); НоваяСтрокаТаблицы.ТипОбъекта = ОбщегоНазначения.ИдентификаторОбъектаМетаданных(Тип); @@ -267,6 +267,7 @@ КонецЦикла; ЗначениеВРеквизитФормы(ДеревоОМ, "ДеревоОбъектовМетаданных"); + Элементы.ФормаВерсионироватьПриСтарте.Видимость = ЕстьБизнесПроцессы; КонецПроцедуры &НаКлиенте diff --git a/SSL/src/InformationRegisters/НастройкиКомандПечати/НастройкиКомандПечати.mdo b/SSL/src/InformationRegisters/НастройкиКомандПечати/НастройкиКомандПечати.mdo new file mode 100644 index 000000000..22f594529 --- /dev/null +++ b/SSL/src/InformationRegisters/НастройкиКомандПечати/НастройкиКомандПечати.mdo @@ -0,0 +1,114 @@ +<?xml version="1.0" encoding="UTF-8"?> +<mdclass:InformationRegister xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:core="http://g5.1c.ru/v8/dt/mcore" xmlns:mdclass="http://g5.1c.ru/v8/dt/metadata/mdclass" uuid="9b46a2b4-223d-4527-a94e-37ecd4fe72d7"> + <producedTypes> + <selectionType typeId="a30ca6e4-83da-4279-97c7-8fa5ae02e24c" valueTypeId="bbdea1d4-43e9-4a0b-97cf-07fa50bd1286"/> + <listType typeId="e406d078-3c99-47e2-a0f9-4ab636befea1" valueTypeId="a90c9a91-52d2-4f92-a261-ace426b3fefa"/> + <managerType typeId="f5351669-6b19-4615-8e6f-1ab3c4b52f13" valueTypeId="a8fccf35-90fd-411c-967c-862f0f91d500"/> + <recordSetType typeId="11c3ff3c-ce1c-4965-91c2-fc34610fc30b" valueTypeId="bed025a1-01c5-4e58-bcff-27a69c07c599"/> + <recordKeyType typeId="7a856578-27f2-4d58-9766-0ea179a24e42" valueTypeId="02051645-f24b-4fda-afdc-021ea84bb24d"/> + <recordType typeId="7e1c9e3b-975b-4e82-8fc4-dfad0ac14dd4" valueTypeId="df82cf07-0b37-4eee-86e2-f8db2d2e9350"/> + <recordManagerType typeId="4b5a4b27-b8c6-4a57-9f69-39cacac922ca" valueTypeId="cc558204-e528-4b1f-88a3-36fb226520fa"/> + </producedTypes> + <name>НастройкиКомандПечати</name> + <synonym> + <key>ru</key> + <value>Настройки команд печати</value> + </synonym> + <useStandardCommands>true</useStandardCommands> + <editType>InDialog</editType> + <standardAttributes> + <dataHistory>Use</dataHistory> + <name>Active</name> + <fillValue xsi:type="core:UndefinedValue"/> + <fullTextSearch>Use</fullTextSearch> + <minValue xsi:type="core:UndefinedValue"/> + <maxValue xsi:type="core:UndefinedValue"/> + </standardAttributes> + <standardAttributes> + <dataHistory>Use</dataHistory> + <name>LineNumber</name> + <fillValue xsi:type="core:UndefinedValue"/> + <fullTextSearch>Use</fullTextSearch> + <minValue xsi:type="core:UndefinedValue"/> + <maxValue xsi:type="core:UndefinedValue"/> + </standardAttributes> + <standardAttributes> + <dataHistory>Use</dataHistory> + <name>Recorder</name> + <fillValue xsi:type="core:UndefinedValue"/> + <fullTextSearch>Use</fullTextSearch> + <minValue xsi:type="core:UndefinedValue"/> + <maxValue xsi:type="core:UndefinedValue"/> + </standardAttributes> + <standardAttributes> + <dataHistory>Use</dataHistory> + <name>Period</name> + <fillValue xsi:type="core:UndefinedValue"/> + <fillChecking>ShowError</fillChecking> + <fullTextSearch>Use</fullTextSearch> + <minValue xsi:type="core:UndefinedValue"/> + <maxValue xsi:type="core:UndefinedValue"/> + </standardAttributes> + <dataLockControlMode>Managed</dataLockControlMode> + <resources uuid="7a4e17bf-3649-4982-a9c6-5982390f1f1d"> + <name>Видимость</name> + <synonym> + <key>ru</key> + <value>Видимость</value> + </synonym> + <type> + <types>Boolean</types> + </type> + <toolTip> + <key>ru</key> + <value>Включает/отключает отображение команды печати в формах.</value> + </toolTip> + <minValue xsi:type="core:UndefinedValue"/> + <maxValue xsi:type="core:UndefinedValue"/> + <dataHistory>Use</dataHistory> + <fillValue xsi:type="core:UndefinedValue"/> + </resources> + <dimensions uuid="722be6e0-2698-431b-9206-777a36e6742f"> + <name>Владелец</name> + <synonym> + <key>ru</key> + <value>Владелец</value> + </synonym> + <type> + <types>CatalogRef.ИдентификаторыОбъектовМетаданных</types> + </type> + <toolTip> + <key>ru</key> + <value>Менеджер печати, который обслуживает команду.</value> + </toolTip> + <minValue xsi:type="core:UndefinedValue"/> + <maxValue xsi:type="core:UndefinedValue"/> + <indexing>Index</indexing> + <dataHistory>Use</dataHistory> + <fillValue xsi:type="core:UndefinedValue"/> + <mainFilter>true</mainFilter> + </dimensions> + <dimensions uuid="75bb0122-26bd-40be-8de8-7a57680c85ae"> + <name>УникальныйИдентификатор</name> + <synonym> + <key>ru</key> + <value>Уникальный идентификатор</value> + </synonym> + <type> + <types>String</types> + <stringQualifiers> + <length>32</length> + </stringQualifiers> + </type> + <toolTip> + <key>ru</key> + <value>Уникальный идентификатор команды печати.</value> + </toolTip> + <minValue xsi:type="core:UndefinedValue"/> + <maxValue xsi:type="core:UndefinedValue"/> + <indexing>Index</indexing> + <dataHistory>Use</dataHistory> + <fillValue xsi:type="core:StringValue"/> + <mainFilter>true</mainFilter> + </dimensions> +</mdclass:InformationRegister> diff --git a/SSL/src/InformationRegisters/НастройкиОтправителя/Forms/ФормаЗаписи/Form.form b/SSL/src/InformationRegisters/НастройкиОтправителя/Forms/ФормаЗаписи/Form.form index 0d3abe928..5f3560e57 100644 --- a/SSL/src/InformationRegisters/НастройкиОтправителя/Forms/ФормаЗаписи/Form.form +++ b/SSL/src/InformationRegisters/НастройкиОтправителя/Forms/ФормаЗаписи/Form.form @@ -100,7 +100,6 @@ <autoFillCheck>true</autoFillCheck> <allowFormCustomize>true</allowFormCustomize> <enabled>true</enabled> - <verticalScroll>UseIfNecessary</verticalScroll> <showTitle>auto</showTitle> <showCloseButton>true</showCloseButton> <attributes> diff --git a/SSL/src/InformationRegisters/НастройкиОтправителя/Forms/ФормаСписка/Form.form b/SSL/src/InformationRegisters/НастройкиОтправителя/Forms/ФормаСписка/Form.form index 605cd9510..c48c78bcd 100644 --- a/SSL/src/InformationRegisters/НастройкиОтправителя/Forms/ФормаСписка/Form.form +++ b/SSL/src/InformationRegisters/НастройкиОтправителя/Forms/ФормаСписка/Form.form @@ -302,7 +302,6 @@ <autoFillCheck>true</autoFillCheck> <allowFormCustomize>true</allowFormCustomize> <enabled>true</enabled> - <verticalScroll>UseIfNecessary</verticalScroll> <showTitle>auto</showTitle> <showCloseButton>true</showCloseButton> <attributes> diff --git a/SSL/src/InformationRegisters/НастройкиОчисткиФайлов/Forms/ФормаДобавленияУсловияПоДате/Form.form b/SSL/src/InformationRegisters/НастройкиОчисткиФайлов/Forms/ФормаДобавленияУсловияПоДате/Form.form new file mode 100644 index 000000000..c8f4bd558 --- /dev/null +++ b/SSL/src/InformationRegisters/НастройкиОчисткиФайлов/Forms/ФормаДобавленияУсловияПоДате/Form.form @@ -0,0 +1,306 @@ +<?xml version="1.0" encoding="UTF-8"?> +<form:Form xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:form="http://g5.1c.ru/v8/dt/form"> + <items xsi:type="form:FormGroup"> + <name>ГруппаУсловиеПоДате</name> + <id>7</id> + <items xsi:type="form:FormField"> + <name>ИнтервалИсключение</name> + <id>4</id> + <title> + <key>ru</key> + <value>Очищать файлы спустя</value> + + true + true + + true + + + ИнтервалИсключение + + + ИнтервалИсключениеРасширеннаяПодсказка + 6 + Label + true + true + + Left + + + + ИнтервалИсключениеКонтекстноеМеню + 5 + true + + InputField + Enter + true + Left + true + + true + true + true + true + true + true + Normal + +
      + + РеквизитСТипомДата + 1 + + <key>ru</key> + <value>дней относительно</value> + + true + true + + true + + + РеквизитСТипомДата + + + РеквизитСТипомДатаРасширеннаяПодсказка + 3 + Label + true + true + + Left + + + + РеквизитСТипомДатаКонтекстноеМеню + 2 + true + + InputField + Enter + true + Left + true + + true + true + true + true + true + true + Normal + + + true + true + + true + + + <key>ru</key> + <value>Настройка интервала-исключения</value> + + + ru + Группа условие по дате + + + ГруппаУсловиеПоДатеРасширеннаяПодсказка + 8 + Label + true + true + + Left + + + UsualGroup + + Auto + WeakSeparation + true + true + Auto + Auto + + + + КоманднаяПанель + 9 + + ОК + 11 + true + true + + true + + + ОКРасширеннаяПодсказка + 12 + Label + true + true + + Left + + + Form.Command.ОК + Auto + true + true + true + UserCmds + Auto + + + Отмена + 13 + true + true + + true + + + ОтменаРасширеннаяПодсказка + 14 + Label + true + true + + Left + + + Form.StandardCommand.Cancel + Normal + Auto + true + true + UserCmds + Auto + + true + true + + true + + + <key>ru</key> + <value>Командная панель</value> + + + ru + Командная панель + + + КоманднаяПанельРасширеннаяПодсказка + 10 + Label + true + true + + Left + + + CommandBar + + Right + + + + ФормаКоманднаяПанель + -1 + Left + true + + + OnCreateAtServer + ПриСозданииНаСервере + + Abort + CustomizeForm + Help + Ignore + No + RestoreValues + Retry + SaveValues + Yes + LockOwner + true + true + true + Vertical + true + true + true + auto + true + + РеквизитСТипомДата + + <key>ru</key> + <value>Реквизит с типом дата</value> + + 1 + + String + + + + true + + + true + + ShowError + + + ИнтервалИсключение + + <key>ru</key> + <value>Интервал исключение</value> + + 2 + + Number + + 10 + + + + true + + + true + + + + ОК + + <key>ru</key> + <value>ОК</value> + + 1 + + ru + ОК + + + true + + + + ОК + + + DontUse + Auto + + + + + + diff --git a/SSL/src/InformationRegisters/НастройкиОчисткиФайлов/Forms/ФормаДобавленияУсловияПоДате/Module.bsl b/SSL/src/InformationRegisters/НастройкиОчисткиФайлов/Forms/ФормаДобавленияУсловияПоДате/Module.bsl new file mode 100644 index 000000000..b06572197 --- /dev/null +++ b/SSL/src/InformationRegisters/НастройкиОчисткиФайлов/Forms/ФормаДобавленияУсловияПоДате/Module.bsl @@ -0,0 +1,36 @@ +#Область ОбработчикиСобытийФормы + +&НаСервере +Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) + + Если Не Параметры.Свойство("МассивЗначений") Тогда // Возврат, если нет реквизитов с типом дата. + Возврат; + КонецЕсли; + + ЕстьТолькоОдинРеквизит = Параметры.МассивЗначений.Количество() = 1; + + Для Каждого Реквизит Из Параметры.МассивЗначений Цикл + Элементы.РеквизитСТипомДата.СписокВыбора.Добавить(Реквизит.Значение, Реквизит.Представление); + Если ЕстьТолькоОдинРеквизит Тогда + РеквизитСТипомДата = Реквизит.Значение; + КонецЕсли; + КонецЦикла; + +КонецПроцедуры + +#КонецОбласти + +#Область ОбработчикиКомандФормы + +&НаКлиенте +Процедура ОК(Команда) + + СтруктураРезультат = Новый Структура(); + СтруктураРезультат.Вставить("ИнтервалИсключение", ИнтервалИсключение); + СтруктураРезультат.Вставить("РеквизитСТипомДата", РеквизитСТипомДата); + + ОповеститьОВыборе(СтруктураРезультат); + +КонецПроцедуры + +#КонецОбласти \ No newline at end of file diff --git a/SSL/src/InformationRegisters/НастройкиОчисткиФайлов/Forms/ФормаЗаписи/ConditionalAppearance.dcssca b/SSL/src/InformationRegisters/НастройкиОчисткиФайлов/Forms/ФормаЗаписи/ConditionalAppearance.dcssca new file mode 100644 index 000000000..5f517848d --- /dev/null +++ b/SSL/src/InformationRegisters/НастройкиОчисткиФайлов/Forms/ФормаЗаписи/ConditionalAppearance.dcssca @@ -0,0 +1,28 @@ + + + + + + ДобавитьУсловиеПоДате + + + + + Запись.Действие + NotEqual + Перечисление.ВариантыОчисткиФайлов.НеОчищать + + + + + false + Видимость + false + + + Доступность + false + + + + diff --git a/SSL/src/InformationRegisters/НастройкиОчисткиФайлов/Forms/ФормаЗаписи/Form.form b/SSL/src/InformationRegisters/НастройкиОчисткиФайлов/Forms/ФормаЗаписи/Form.form new file mode 100644 index 000000000..08bb2e1b9 --- /dev/null +++ b/SSL/src/InformationRegisters/НастройкиОчисткиФайлов/Forms/ФормаЗаписи/Form.form @@ -0,0 +1,476 @@ + + + + ПравилоНастройкиОтбор + 10 + true + true + + true + + + Правило.Settings.Filter + + None + AddFilterItemGroup + Change + Copy + Detailed + EndEdit + HierarchicalList + List + MoveDown + MoveUp + SetPresentation + Tree + UseFieldAsValue + UserSettingItemProperties + + ПравилоНастройкиОтборКоманднаяПанель + 12 + Left + + + ПравилоНастройкиОтборСтрокаПоиска + 14 + + ПравилоНастройкиОтборСтрокаПоискаРасширеннаяПодсказка + 18 + Label + true + true + + Left + + + + ПравилоНастройкиОтборСтрокаПоискаКонтекстноеМеню + 17 + true + + ПравилоНастройкиОтбор + + true + + + + ПравилоНастройкиОтборСостояниеПросмотра + 19 + + ПравилоНастройкиОтборСостояниеПросмотраРасширеннаяПодсказка + 23 + Label + true + true + + Left + + + + ПравилоНастройкиОтборСостояниеПросмотраКонтекстноеМеню + 22 + true + + ViewStatusAddition + ПравилоНастройкиОтбор + + true + + + + ПравилоНастройкиОтборУправлениеПоиском + 24 + + ПравилоНастройкиОтборУправлениеПоискомРасширеннаяПодсказка + 28 + Label + true + true + + Left + + + + ПравилоНастройкиОтборУправлениеПоискомКонтекстноеМеню + 27 + true + + SearchControlAddition + ПравилоНастройкиОтбор + + true + + + + ПравилоНастройкиОтборРасширеннаяПодсказка + 13 + Label + true + true + + Left + + + + ПравилоНастройкиОтборКонтекстноеМеню + 11 + true + + Tree + true + true + true + true + true + true + MultiRow +
      true
      + 1 + 1 + AutoUse + AutoUse + true + true + false + Auto + Auto + ExpandAllLevels + true + true + true + true + true + All + false +
      + + ФормаКоманднаяПанель + -1 + + ГруппаКоманднаяПанель + 34 + + ЗаписатьИЗакрыть + 36 + true + true + + true + + + ЗаписатьИЗакрытьРасширеннаяПодсказка + 37 + Label + true + true + + Left + + + Form.StandardCommand.WriteAndClose + Auto + true + true + true + UserCmds + Auto + + + Записать + 38 + true + true + + true + + + ЗаписатьРасширеннаяПодсказка + 39 + Label + true + true + + Left + + + Form.StandardCommand.Write + Normal + Auto + true + true + UserCmds + Auto + + + Добавить + 44 + + ДобавитьЭлементОтбора + 40 + true + true + + true + + + ДобавитьЭлементОтбораРасширеннаяПодсказка + 41 + Label + true + true + + Left + + + Form.Item.ПравилоНастройкиОтбор.StandardCommand.AddFilterItem + Normal + PictureAndText + true + true + UserCmds + Auto + + + ДобавитьУсловиеПоДате + 46 + true + true + + true + + + ДобавитьУсловиеПоДатеРасширеннаяПодсказка + 47 + Label + true + true + + Left + + + Form.Command.ДобавитьУсловиеПоДате + Normal + Auto + true + true + UserCmds + Auto + + true + true + + true + + + <key>ru</key> + <value>Добавить</value> + + + ru + Добавить + + + ДобавитьРасширеннаяПодсказка + 45 + Label + true + true + + Left + + + Popup + + Auto + Normal + + + + СгруппироватьЭлементыОтбора + 42 + true + true + + true + + + СгруппироватьЭлементыОтбораРасширеннаяПодсказка + 43 + Label + true + true + + Left + + + Form.Item.ПравилоНастройкиОтбор.StandardCommand.GroupFilterItems + Normal + Auto + true + true + UserCmds + Auto + + true + true + + true + + + <key>ru</key> + <value>Группа командная панель</value> + + + ru + Группа командная панель + + + ГруппаКоманднаяПанельРасширеннаяПодсказка + 35 + Label + true + true + + Left + + + + + + ФормаСправка + 48 + true + true + + true + + + ФормаСправкаРасширеннаяПодсказка + 49 + Label + true + true + + Left + + + Form.StandardCommand.Help + Normal + Auto + true + true + UserCmds + Auto + InCommandBarAndInAdditionalSubmenu + + Left + true + + + ChoiceProcessing + ОбработкаВыбора + + + OnCreateAtServer + ПриСозданииНаСервере + + LockOwner + true + true + Vertical + true + true + auto + true + + Запись + 1 + + InformationRegisterRecordManager.НастройкиОчисткиФайлов + + + true + + + true + +
      true
      + true +
      + + Правило + + <key>ru</key> + <value>Правило</value> + + 2 + + DataCompositionSettingsComposer + + + true + + + true + + + + МассивРеквизитовСТипомДата + + <key>ru</key> + <value>Массив реквизитов с типом дата</value> + + 3 + + ValueList + + + true + + + true + + + + + + + ДобавитьУсловиеПоДате + + <key>ru</key> + <value>Добавить условие по дате</value> + + 1 + + ru + Добавить условие по дате + + + true + + + StdPicture.CreateListItem + + + + ДобавитьУсловиеПоДате + + + DontUse + Auto + + + + + + + + OnReadAtServer + ПриЧтенииНаСервере + + + BeforeWriteAtServer + ПередЗаписьюНаСервере + + +
      diff --git a/SSL/src/InformationRegisters/НастройкиОчисткиФайлов/Forms/ФормаЗаписи/Help/ru.html b/SSL/src/InformationRegisters/НастройкиОчисткиФайлов/Forms/ФормаЗаписи/Help/ru.html new file mode 100644 index 000000000..2aaa322be --- /dev/null +++ b/SSL/src/InformationRegisters/НастройкиОчисткиФайлов/Forms/ФормаЗаписи/Help/ru.html @@ -0,0 +1,20 @@ + +

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

      +

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

      +

      Новый отбор

      +
      • Введите новый отбор: нажмите кнопку Добавить, выберите Добавить новый элемент. Также можно использовать клавишу Ins. +
        • В колонке Поле из списка полей выберите нужное. +
        • Выберите Вид сравнения. +
        • Выберите или напишите Значение.

      Условие по дате

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

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

      +
      • +
        Выделите несколько отборов, нажмите Группировать условия. Выберите условие группировки - И, Или, Не.
        +
      • +
        По умолчанию несколько отборов группируются по И.
      \ No newline at end of file diff --git a/SSL/src/InformationRegisters/НастройкиОчисткиФайлов/Forms/ФормаЗаписи/Module.bsl b/SSL/src/InformationRegisters/НастройкиОчисткиФайлов/Forms/ФормаЗаписи/Module.bsl new file mode 100644 index 000000000..606de3f9a --- /dev/null +++ b/SSL/src/InformationRegisters/НастройкиОчисткиФайлов/Forms/ФормаЗаписи/Module.bsl @@ -0,0 +1,143 @@ +#Область ОбработчикиСобытийФормы + +&НаСервере +Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) + + Заголовок = НСтр("ru='Настройка очистки файлов:'") + + " " + Запись.ВладелецФайла; + + Если МассивРеквизитовСТипомДата.Количество() = 0 Тогда + Элементы.ДобавитьУсловиеПоДате.Доступность = Ложь; + КонецЕсли; + +КонецПроцедуры + +&НаСервере +Процедура ПередЗаписьюНаСервере(Отказ, ТекущийОбъект, ПараметрыЗаписи) + ТекущийОбъект.ПравилоОтбора = Новый ХранилищеЗначения(Правило.ПолучитьНастройки()); +КонецПроцедуры + +&НаСервере +Процедура ПриЧтенииНаСервере(ТекущийОбъект) + + Если ЗначениеЗаполнено(ТекущийОбъект.ВладелецФайла) Тогда + ИнициализироватьКомпоновщик(); + КонецЕсли; + Если ТекущийОбъект.ПравилоОтбора.Получить() <> Неопределено Тогда + Правило.ЗагрузитьНастройки(ТекущийОбъект.ПравилоОтбора.Получить()); + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура ОбработкаВыбора(ВыбранноеЗначение, ИсточникВыбора) + + Если ИсточникВыбора.ИмяФормы = "РегистрСведений.НастройкиОчисткиФайлов.Форма.ФормаДобавленияУсловияПоДате" Тогда + ДобавитьВОтборИнтервалИсключение(ВыбранноеЗначение); + КонецЕсли; + +КонецПроцедуры + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +&НаСервере +Процедура ИнициализироватьКомпоновщик() + + Если Не ЗначениеЗаполнено(Запись.ВладелецФайла) Тогда + Возврат; + КонецЕсли; + + Правило.Настройки.Отбор.Элементы.Очистить(); + + СКД = Новый СхемаКомпоновкиДанных; + ИсточникДанных = СКД.ИсточникиДанных.Добавить(); + ИсточникДанных.Имя = "ИсточникДанных1"; + ИсточникДанных.ТипИсточникаДанных = "Local"; + + НаборДанных = СКД.НаборыДанных.Добавить(Тип("НаборДанныхЗапросСхемыКомпоновкиДанных")); + НаборДанных.Имя = "НаборДанных1"; + НаборДанных.ИсточникДанных = ИсточникДанных.Имя; + + СКД.ПоляИтога.Очистить(); + + СКД.НаборыДанных[0].Запрос = ПолучитьТекстЗапроса(); + + СхемаКомпоновкиДанных = ПоместитьВоВременноеХранилище(СКД, УникальныйИдентификатор); + + Правило.Инициализировать(Новый ИсточникДоступныхНастроекКомпоновкиДанных(СхемаКомпоновкиДанных)); + + Правило.Восстановить(); + Правило.Настройки.Структура.Очистить(); + +КонецПроцедуры + +&НаСервере +Функция ПолучитьТекстЗапроса() + + МассивРеквизитовСТипомДата.Очистить(); + Если ТипЗнч(Запись.ВладелецФайла) = Тип("СправочникСсылка.ИдентификаторыОбъектовМетаданных") Тогда + ТипОбъекта = Запись.ВладелецФайла; + Иначе + ТипОбъекта = ОбщегоНазначения.ИдентификаторОбъектаМетаданных(ТипЗнч(Запись.ВладелецФайла)); + КонецЕсли; + ВсеСправочники = Справочники.ТипВсеСсылки(); + ВсеДокументы = Документы.ТипВсеСсылки(); + ЕстьТипДата = Ложь; + ТекстЗапроса = + "ВЫБРАТЬ + | " + ТипОбъекта.Имя + ".Ссылка,"; + Если ВсеСправочники.СодержитТип(ТипЗнч(ТипОбъекта.ЗначениеПустойСсылки)) Тогда + Справочник = Метаданные.Справочники[ТипОбъекта.Имя]; + Для Каждого Реквизит Из Справочник.Реквизиты Цикл + ТекстЗапроса = ТекстЗапроса + Символы.ПС + ТипОбъекта.Имя + "." + Реквизит.Имя + ","; + КонецЦикла; + ИначеЕсли + ВсеДокументы.СодержитТип(ТипЗнч(ТипОбъекта.ЗначениеПустойСсылки)) Тогда + Документ = Метаданные.Документы[ТипОбъекта.Имя]; + Для Каждого Реквизит Из Документ.Реквизиты Цикл + ТекстЗапроса = ТекстЗапроса + Символы.ПС + ТипОбъекта.Имя + "." + Реквизит.Имя + ","; + Если Реквизит.Тип = Новый ОписаниеТипов("Дата") Тогда + МассивРеквизитовСТипомДата.Добавить(Реквизит.Имя, Реквизит.Синоним); + ТекстЗапроса = ТекстЗапроса + Символы.ПС + "РАЗНОСТЬДАТ(" + Реквизит.Имя + ", &ТекущаяДата, ДЕНЬ) Как ДнейДоУдаленияОт" + Реквизит.Имя + ","; + ЕстьТипДата = Истина; + КонецЕсли; + КонецЦикла; + КонецЕсли; + + // Удаляем лишнюю запятую + ТекстЗапроса= Лев(ТекстЗапроса, СтрДлина(ТекстЗапроса) - 1); + ТекстЗапроса = ТекстЗапроса + " + |ИЗ + | " + ТипОбъекта.ПолноеИмя+ " КАК " + ТипОбъекта.Имя; + + Возврат ТекстЗапроса; + +КонецФункции + +&НаКлиенте +Процедура ДобавитьУсловиеПоДате(Команда) + + ПараметрыФормы = Новый Структура; + ПараметрыФормы.Вставить("МассивЗначений", МассивРеквизитовСТипомДата); + ОткрытьФорму("РегистрСведений.НастройкиОчисткиФайлов.Форма.ФормаДобавленияУсловияПоДате",ПараметрыФормы, ЭтаФорма); + +КонецПроцедуры + +&НаСервере +Процедура ДобавитьВОтборИнтервалИсключение(ВыбранноеЗначение) + + ОтборПоИнтервалу = Правило.Настройки.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); + ОтборПоИнтервалу.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("ДнейДоУдаленияОт" + ВыбранноеЗначение.РеквизитСТипомДата); + ОтборПоИнтервалу.ВидСравнения = ВидСравненияКомпоновкиДанных.БольшеИлиРавно; + ОтборПоИнтервалу.ПравоеЗначение = ВыбранноеЗначение.ИнтервалИсключение; + ПредставлениеРеквизитаСТипомДата = МассивРеквизитовСТипомДата.НайтиПоЗначению(ВыбранноеЗначение.РеквизитСТипомДата).Представление; + ТекстПредставления = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Очищать спустя %1 дней относительно даты (%2)'"), + ВыбранноеЗначение.ИнтервалИсключение, ПредставлениеРеквизитаСТипомДата); + ОтборПоИнтервалу.Представление = ТекстПредставления; + +КонецПроцедуры + +#КонецОбласти \ No newline at end of file diff --git a/SSL/src/InformationRegisters/НастройкиОчисткиФайлов/Forms/ФормаСписка/ConditionalAppearance.dcssca b/SSL/src/InformationRegisters/НастройкиОчисткиФайлов/Forms/ФормаСписка/ConditionalAppearance.dcssca new file mode 100644 index 000000000..1bd7419f7 --- /dev/null +++ b/SSL/src/InformationRegisters/НастройкиОчисткиФайлов/Forms/ФормаСписка/ConditionalAppearance.dcssca @@ -0,0 +1,101 @@ + + + + + + ДеревоОбъектовМетаданныхПравилоОтбора + + + + + OrGroup + + ДеревоОбъектовМетаданных.Действие + Equal + Перечисление.ВариантыОчисткиФайлов.НеОчищать + + + ДеревоОбъектовМетаданных.ПериодОчистки + NotEqual + Перечисление.ПериодОчисткиФайлов.ПоПравилу + + + + + + Текст + + + + false + Видимость + false + + + ТолькоПросмотр + true + + + + + + + ДеревоОбъектовМетаданныхПериодОчистки + + + + + ДеревоОбъектовМетаданных.Действие + Equal + Перечисление.ВариантыОчисткиФайлов.НеОчищать + + + + + Текст + + + + ТолькоПросмотр + false + + + + + + + false + ДеревоОбъектовМетаданныхСинонимНаименованияОбъекта + + + ДеревоОбъектовМетаданныхДействие + + + false + ДеревоОбъектовМетаданныхПериодОчистки + + + + + ДеревоОбъектовМетаданных.Действие + NotEqual + Перечисление.ВариантыОчисткиФайлов.НеОчищать + + + ДеревоОбъектовМетаданных.Действие + Filled + + + + + false + ЦветТекста + style:ФайлЗанятыйТекущимПользователем + + + Шрифт + + + + + diff --git a/SSL/src/InformationRegisters/НастройкиОчисткиФайлов/Forms/ФормаСписка/Form.form b/SSL/src/InformationRegisters/НастройкиОчисткиФайлов/Forms/ФормаСписка/Form.form new file mode 100644 index 000000000..ff76daf76 --- /dev/null +++ b/SSL/src/InformationRegisters/НастройкиОчисткиФайлов/Forms/ФормаСписка/Form.form @@ -0,0 +1,1700 @@ + + + + СписокКомпоновщикНастроекПользовательскиеНастройки + 1 + true + true + + true + + + <key>ru</key> + <value>Группа пользовательских настроек</value> + + false + + СписокКомпоновщикНастроекПользовательскиеНастройкиРасширеннаяПодсказка + 2 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + WeakSeparation + true + true + Auto + Auto + + + + ДеревоОбъектовМетаданных + 3 + true + true + + true + + + ДеревоОбъектовМетаданных + + None + Add + Change + Copy + CopyToClipboard + Delete + EndEdit + HierarchicalList + List + MoveDown + MoveUp + OutputList + SelectAll + SortListAsc + SortListDesc + Tree + + ДеревоОбъектовМетаданныхСинонимНаименованияОбъекта + 31 + true + true + + true + + + ДеревоОбъектовМетаданных.СинонимНаименованияОбъекта + + + ДеревоОбъектовМетаданныхСинонимНаименованияОбъектаРасширеннаяПодсказка + 33 + Label + true + true + + Left + + + + ДеревоОбъектовМетаданныхСинонимНаименованияОбъектаКонтекстноеМеню + 32 + true + + InputField + true + Auto + true + Left + true + + true + true + true + true + true + true + Normal + + + + ДеревоОбъектовМетаданныхДействие + 25 + true + true + + true + + + ДеревоОбъектовМетаданных.Действие + + + OnChange + ДеревоОбъектовМетаданныхДействиеПриИзменении + + + ДеревоОбъектовМетаданныхДействиеРасширеннаяПодсказка + 27 + Label + true + true + + Left + + + + ДеревоОбъектовМетаданныхДействиеКонтекстноеМеню + 26 + true + + InputField + Auto + true + Left + true + + true + true + true + true + true + true + Normal + + + + ДеревоОбъектовМетаданныхПериодОчистки + 28 + true + true + + true + + + ДеревоОбъектовМетаданных.ПериодОчистки + + + OnChange + ДеревоОбъектовМетаданныхПериодОчисткиПриИзменении + + + ДеревоОбъектовМетаданныхПериодОчисткиРасширеннаяПодсказка + 30 + Label + true + true + + Left + + + + ДеревоОбъектовМетаданныхПериодОчисткиКонтекстноеМеню + 29 + true + + InputField + Auto + true + Left + true + + true + true + true + true + true + true + Normal + + + + ДеревоОбъектовМетаданныхПравилоОтбора + 34 + true + true + + true + + + ДеревоОбъектовМетаданных.ПравилоОтбора + + + ДеревоОбъектовМетаданныхПравилоОтбораРасширеннаяПодсказка + 36 + Label + true + true + + Left + + + + ДеревоОбъектовМетаданныхПравилоОтбораКонтекстноеМеню + 35 + true + + InputField + Auto + true + true + Left + true + Show + Always + + + StartChoice + ДеревоОбъектовМетаданныхПравилоОтбораНачалоВыбора + + true + true + true + true + true + true + + Style.ПоясняющийТекст + + Normal + + + + ДеревоОбъектовМетаданныхКоманднаяПанель + 5 + Left + true + + + Selection + ДеревоОбъектовМетаданныхВыбор + + + ChoiceProcessing + ДеревоОбъектовМетаданныхОбработкаВыбора + + + BeforeRowChange + ДеревоОбъектовМетаданныхПередНачаломИзменения + + + ДеревоОбъектовМетаданныхСтрокаПоиска + 7 + + ДеревоОбъектовМетаданныхСтрокаПоискаРасширеннаяПодсказка + 11 + Label + true + true + + Left + + + + ДеревоОбъектовМетаданныхСтрокаПоискаКонтекстноеМеню + 10 + true + + ДеревоОбъектовМетаданных + + true + + + + ДеревоОбъектовМетаданныхСостояниеПросмотра + 12 + + ДеревоОбъектовМетаданныхСостояниеПросмотраРасширеннаяПодсказка + 16 + Label + true + true + + Left + + + + ДеревоОбъектовМетаданныхСостояниеПросмотраКонтекстноеМеню + 15 + true + + ViewStatusAddition + ДеревоОбъектовМетаданных + + true + + + + ДеревоОбъектовМетаданныхУправлениеПоиском + 17 + + ДеревоОбъектовМетаданныхУправлениеПоискомРасширеннаяПодсказка + 21 + Label + true + true + + Left + + + + ДеревоОбъектовМетаданныхУправлениеПоискомКонтекстноеМеню + 20 + true + + SearchControlAddition + ДеревоОбъектовМетаданных + + true + + + + ДеревоОбъектовМетаданныхРасширеннаяПодсказка + 6 + Label + true + true + + Left + + + + ДеревоОбъектовМетаданныхКонтекстноеМеню + 4 + true + + Tree + true + true + true + MultiRow +
      true
      + 1 + 1 + AutoUse + AutoUse + true + true + false + true + Auto + Auto + ExpandAllLevels + true + true + true + true + true +
      + + ОчисткаНенужныхФайлов + 57 + + ОбъемНенужныхФайлов + 74 + true + true + + true + + + ОбъемНенужныхФайловРасширеннаяПодсказка + 75 + Label + true + true + + Left + + + Hyperlink + Form.Command.ОбъемНенужныхФайлов + Normal + Auto + true + true + UserCmds + Auto + + + ОчисткаФайлов + 90 + + Очистка + 92 + + Очистить + 69 + true + true + + true + + + ОчиститьРасширеннаяПодсказка + 70 + Label + true + true + + Left + + + UsualButton + Form.Command.Очистить + Normal + Auto + true + true + UserCmds + Auto + + true + true + + true + + + <key>ru</key> + <value>Очистка</value> + + + ru + Очистка + + + ОчисткаРасширеннаяПодсказка + 93 + Label + true + true + + Left + + + Page + + Vertical + auto + + + + СтатусФоновогоЗадания + 94 + + ИнформацияОФоновомЗадании + 96 + + <key>ru</key> + <value>Выполняется очистка ненужных файлов...</value> + + true + true + + true + + + ИнформацияОФоновомЗаданииРасширеннаяПодсказка + 98 + Label + true + true + + Left + + + + ИнформацияОФоновомЗаданииКонтекстноеМеню + 97 + true + + Label + true + true + + Left + + + true + true + + true + + + <key>ru</key> + <value>Статус фонового задания</value> + + + ru + Статус фонового задания + + + СтатусФоновогоЗаданияРасширеннаяПодсказка + 95 + Label + true + true + + Left + + + Page + + Vertical + auto + + + true + true + + true + + + <key>ru</key> + <value>Очистка файлов</value> + + + ru + Очистка файлов + + + ОчисткаФайловРасширеннаяПодсказка + 91 + Label + true + true + + Left + + + Pages + + Auto + + + true + true + + true + + + <key>ru</key> + <value>Очистка ненужных файлов</value> + + + ru + Очистка ненужных файлов + + + ОчисткаНенужныхФайловРасширеннаяПодсказка + 58 + Label + true + true + + Left + + + UsualGroup + + Auto + WeakSeparation + true + true + Auto + Auto + + + + ОчисткаПоРасписанию + 62 + + НастройкиОчистки + 64 + + АвтоматическиОчищатьНенужныеФайлы + 66 + true + true + + true + + + АвтоматическиОчищатьНенужныеФайлы + + Right + + OnChange + АвтоматическиОчищатьНенужныеФайлыПриИзменении + + + АвтоматическиОчищатьНенужныеФайлыРасширеннаяПодсказка + 68 + Label + true + true + + Left + + + + АвтоматическиОчищатьНенужныеФайлыКонтекстноеМеню + 67 + true + + CheckBoxField + Enter + true + Left + true + + + + НастроитьРасписание + 76 + true + true + + true + + + НастроитьРасписаниеРасширеннаяПодсказка + 77 + Label + true + true + + Left + + + Hyperlink + Form.Command.НастроитьРасписание + Normal + Auto + true + true + UserCmds + Auto + + true + true + + true + + + <key>ru</key> + <value>Настройки очистки</value> + + + ru + Настройки очистки + + + НастройкиОчисткиРасширеннаяПодсказка + 65 + Label + true + true + + Left + + + UsualGroup + + Auto + true + true + Auto + Auto + + + + Расписание + 71 + + <key>ru</key> + <value>каждый день, по дням недели [суббота, воскресенье ]; с 1:00:00 один раз в день, завершать после 7:00:00</value> + + true + true + + true + + + РасписаниеРасширеннаяПодсказка + 73 + Label + true + true + + Left + + + + РасписаниеКонтекстноеМеню + 72 + true + + Label + true + true + + Style.ПоясняющийТекст + + + Left + Top + + + true + true + + true + + + <key>ru</key> + <value>Очистка по расписанию</value> + + + ru + Очистка по расписанию + + + ОчисткаПоРасписаниюРасширеннаяПодсказка + 63 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + WeakSeparation + true + true + Auto + Auto + + + + ФормаКоманднаяПанель + -1 + + ДействияСНастройками + 86 + + ФормаДобавитьНастройку + 37 + true + true + + true + + + ФормаДобавитьНастройкуРасширеннаяПодсказка + 38 + Label + true + true + + Left + + + Form.Command.ДобавитьНастройку + Normal + PictureAndText + true + true + UserCmds + + StdPicture.CreateListItem + + Auto + + + ФормаУдалитьНастройки + 88 + true + true + + true + + + ФормаУдалитьНастройкиРасширеннаяПодсказка + 89 + Label + true + true + + Left + + + Form.Command.УдалитьНастройку + Normal + Auto + true + true + UserCmds + + StdPicture.Delete + + Auto + + true + true + + true + + + <key>ru</key> + <value>Настройки очистки</value> + + + ru + Действия с настройками + + + ДействияСНастройкамиРасширеннаяПодсказка + 87 + Label + true + true + + Left + + + Popup + + Auto + Normal + + + + ДействиеГруппа + 39 + + ФормаУстановитьДействиеОчиститьФайлыИВерсии + 41 + true + true + + true + + + ФормаУстановитьДействиеОчиститьФайлыИВерсииРасширеннаяПодсказка + 42 + Label + true + true + + Left + + + Form.Command.УстановитьДействиеОчиститьФайлыИВерсии + Normal + Auto + true + true + UserCmds + Auto + + + ФормаУстановитьДействиеОчиститьФайлы + 43 + true + true + + true + + + ФормаУстановитьДействиеОчиститьФайлыРасширеннаяПодсказка + 44 + Label + true + true + + Left + + + Form.Command.УстановитьДействиеОчиститьФайлы + Normal + Auto + true + true + UserCmds + Auto + + + ФормаУстановитьДействиеОчиститьВерсии + 45 + true + true + + true + + + ФормаУстановитьДействиеОчиститьВерсииРасширеннаяПодсказка + 46 + Label + true + true + + Left + + + Form.Command.УстановитьДействиеОчиститьВерсии + Normal + Auto + true + true + UserCmds + Auto + + + ФормаУстановитьДействиеНеОчищать + 47 + true + true + + true + + + ФормаУстановитьДействиеНеОчищатьРасширеннаяПодсказка + 48 + Label + true + true + + Left + + + Form.Command.УстановитьДействиеНеОчищать + Normal + Auto + true + true + UserCmds + Auto + + true + true + + true + + + <key>ru</key> + <value>Установить действие</value> + + + ru + Действие группа + + + ДействиеГруппаРасширеннаяПодсказка + 40 + Label + true + true + + Left + + + Popup + + Auto + Normal + + + + ПериодОчисткиГруппа + 49 + + ФормаСтаршеМесяца + 51 + true + true + + true + + + ФормаСтаршеМесяцаРасширеннаяПодсказка + 52 + Label + true + true + + Left + + + Form.Command.СтаршеМесяца + Normal + Auto + true + true + UserCmds + Auto + + + ФормаСтаршеШестиМесяцев + 53 + true + true + + true + + + ФормаСтаршеШестиМесяцевРасширеннаяПодсказка + 54 + Label + true + true + + Left + + + Form.Command.СтаршеШестиМесяцев + Normal + Auto + true + true + UserCmds + Auto + + + ФормаСтаршеГода + 55 + true + true + + true + + + ФормаСтаршеГодаРасширеннаяПодсказка + 56 + Label + true + true + + Left + + + Form.Command.СтаршеГода + Normal + Auto + true + true + UserCmds + Auto + + true + true + + true + + + <key>ru</key> + <value>Установить период</value> + + + ru + Период очистки группа + + + ПериодОчисткиГруппаРасширеннаяПодсказка + 50 + Label + true + true + + Left + + + Popup + + Auto + Normal + + + + ФормаСправка + 105 + true + true + + true + + + ФормаСправкаРасширеннаяПодсказка + 106 + Label + true + true + + Left + + + Form.StandardCommand.Help + Normal + Auto + true + true + UserCmds + Auto + InCommandBarAndInAdditionalSubmenu + + Left + true + + + OnCreateAtServer + ПриСозданииНаСервере + + DontBlock + true + true + true + Vertical + true + true + true + auto + true + + ДеревоОбъектовМетаданных + + <key>ru</key> + <value>Дерево объектов метаданных</value> + + 2 + + ValueTree + + + true + + + true + + + ВладелецФайла + + <key>ru</key> + <value>Владелец файла</value> + + 1 + + AnyRef + + + true + + + true + + + + Действие + + <key>ru</key> + <value>Действие</value> + + 2 + + EnumRef.ВариантыОчисткиФайлов + + + true + + + true + + + + ПериодОчистки + + <key>ru</key> + <value>Период очистки</value> + + 3 + + EnumRef.ПериодОчисткиФайлов + + + true + + + true + + + + СинонимНаименованияОбъекта + + <key>ru</key> + <value>Владелец файла</value> + + 4 + + String + + + + true + + + true + + + + ПравилоОтбора + + <key>ru</key> + <value>Правило</value> + + 5 + + String + + + + true + + + true + + + + ЭтоФайл + + <key>ru</key> + <value>Это файл</value> + + 6 + + Boolean + + + true + + + true + + + + ТипВладельцаФайла + + <key>ru</key> + <value>Тип владельца файла</value> + + 7 + + CatalogRef.ИдентификаторыОбъектовМетаданных + + + true + + + true + + + + ВозможностьДетализации + + <key>ru</key> + <value>Возможность детализации</value> + + 8 + + Boolean + + + true + + + true + + + + + СписокВыбораСВерсиями + + <key>ru</key> + <value>Список выбора с версиями</value> + + 1 + + ValueList + + + true + + + true + + + + + + + СписокВыбораБезВерсий + + <key>ru</key> + <value>Список выбора без версий</value> + + 3 + + ValueList + + + true + + + true + + + + + + + АвтоматическиОчищатьНенужныеФайлы + + <key>ru</key> + <value>Автоматически очищать ненужные файлы</value> + + 4 + + Boolean + + + true + + + true + + + + ИдентификаторФоновогоЗадания + + <key>ru</key> + <value>Идентификатор фонового задания</value> + + 6 + + UUID + + + true + + + true + + + + ТекущееФоновоеЗадание + + <key>ru</key> + <value>Текущее фоновое задание</value> + + 7 + + String + + + + true + + + true + + + + ОчищатьФайлыПоРазмеру + + <key>ru</key> + <value>И очищать файлы больше</value> + + 8 + + Boolean + + + true + + + true + + + + СписокНовыхНастроек + + <key>ru</key> + <value>Список новых настроек</value> + + 5 + + ValueTable + + + true + + + true + + + + ДобавитьНастройку + + <key>ru</key> + <value>Добавить</value> + + 1 + + ru + Добавить настройку + + + true + + + + ДобавитьНастройку + + + DontUse + Auto + + + УстановитьДействиеОчиститьФайлыИВерсии + + <key>ru</key> + <value>Очистить файлы и версии</value> + + 2 + + ru + Установить действие очистить файлы и версии + + + true + + + + УстановитьДействиеОчиститьФайлыИВерсии + + + DontUse + Auto + + + УстановитьДействиеОчиститьФайлы + + <key>ru</key> + <value>Очистить файлы</value> + + 3 + + ru + Установить действие очистить файлы + + + true + + + + УстановитьДействиеОчиститьФайлы + + + DontUse + Auto + + + УстановитьДействиеОчиститьВерсии + + <key>ru</key> + <value>Очистить версии</value> + + 4 + + ru + Установить действие очистить версии + + + true + + + + УстановитьДействиеОчиститьВерсии + + + DontUse + Auto + + + УстановитьДействиеНеОчищать + + <key>ru</key> + <value>Не очищать</value> + + 5 + + ru + Установить действие не очищать + + + true + + + + УстановитьДействиеНеОчищать + + + DontUse + Auto + + + СтаршеМесяца + + <key>ru</key> + <value>Старше месяца</value> + + 6 + + ru + Старше месяца + + + true + + + + СтаршеМесяца + + + DontUse + Auto + + + СтаршеШестиМесяцев + + <key>ru</key> + <value>Старше шести месяцев</value> + + 7 + + ru + Старше шести месяцев + + + true + + + + СтаршеШестиМесяцев + + + DontUse + Auto + + + СтаршеГода + + <key>ru</key> + <value>Старше года</value> + + 8 + + ru + Старше года + + + true + + + + СтаршеГода + + + DontUse + Auto + + + Очистить + + <key>ru</key> + <value>Очистить</value> + + 9 + + ru + Очистить + + + true + + + + Очистить + + + DontUse + Auto + + + ОбъемНенужныхФайлов + + <key>ru</key> + <value>Объем ненужных файлов</value> + + 10 + + ru + Объем ненужных файлов + + + true + + + + ОбъемНенужныхФайлов + + + DontUse + Auto + + + НастроитьРасписание + + <key>ru</key> + <value>Настроить расписание</value> + + 11 + + ru + Настроить расписание + + + true + + + + НастроитьРасписание + + + DontUse + Auto + + + УдалитьНастройку + + <key>ru</key> + <value>Удалить</value> + + 12 + + ru + Удалить настройку + + + true + + + + УдалитьНастройку + + + DontUse + Auto + + + + + +
      diff --git a/SSL/src/InformationRegisters/НастройкиОчисткиФайлов/Forms/ФормаСписка/Module.bsl b/SSL/src/InformationRegisters/НастройкиОчисткиФайлов/Forms/ФормаСписка/Module.bsl new file mode 100644 index 000000000..89dbb969d --- /dev/null +++ b/SSL/src/InformationRegisters/НастройкиОчисткиФайлов/Forms/ФормаСписка/Module.bsl @@ -0,0 +1,735 @@ +#Область ОбработчикиСобытийФормы + +&НаСервере +Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) + + Если Параметры.Свойство("АвтоТест") Тогда // Возврат при получении формы для анализа. + Возврат; + КонецЕсли; + + ЗаполнитьТипыОбъектовВДеревеЗначений(); + + ЗаполнитьСпискиВыбора(); + + Элементы.Расписание.Заголовок = ТекущееРасписание(); + АвтоматическиОчищатьНенужныеФайлы = АвтоматическаяОчисткаВключена(); + Элементы.Расписание.Доступность = АвтоматическиОчищатьНенужныеФайлы; + Элементы.НастроитьРасписание.Доступность = АвтоматическиОчищатьНенужныеФайлы; + +КонецПроцедуры + +&НаКлиенте +Процедура АвтоматическиОчищатьНенужныеФайлыПриИзменении(Элемент) + ВключитьОтключитьРегламентноеЗадание(АвтоматическиОчищатьНенужныеФайлы); + Элементы.Расписание.Доступность = АвтоматическиОчищатьНенужныеФайлы; + Элементы.НастроитьРасписание.Доступность = АвтоматическиОчищатьНенужныеФайлы; +КонецПроцедуры + +#КонецОбласти + +#Область ОбработчикиСобытийЭлементовТаблицыФормыДеревоОбъектовМетаданных + +&НаКлиенте +Процедура ДеревоОбъектовМетаданныхПередНачаломИзменения(Элемент, Отказ) + + Если Элемент.ТекущиеДанные.ПолучитьРодителя() = Неопределено Тогда + Отказ = Истина; + КонецЕсли; + + Если Элемент.ТекущийЭлемент = Элементы.ДеревоОбъектовМетаданныхДействие Тогда + ЗаполнитьСписокВыбора(Элементы.ДеревоОбъектовМетаданных.ТекущийЭлемент); + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура ДеревоОбъектовМетаданныхВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка) + + Если Поле.Имя = "ДеревоОбъектовМетаданныхПравилоОтбора" Тогда + СтандартнаяОбработка = Ложь; + ОткрытьФормуНастроек(); + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура ДеревоОбъектовМетаданныхПравилоОтбораНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка) + + СтандартнаяОбработка = Ложь; + ОткрытьФормуНастроек(); + +КонецПроцедуры + +&НаКлиенте +Процедура ДеревоОбъектовМетаданныхДействиеПриИзменении(Элемент) + + ЗаписатьТекущиеНастройки(); + +КонецПроцедуры + +&НаКлиенте +Процедура ДеревоОбъектовМетаданныхПериодОчисткиПриИзменении(Элемент) + + ЗаписатьТекущиеНастройки(); + +КонецПроцедуры + +&НаКлиенте +Процедура ДеревоОбъектовМетаданныхОбработкаВыбора(Элемент, ВыбранноеЗначение, СтандартнаяОбработка) + + СтандартнаяОбработка = Ложь; + ДобавитьНастройкиПоВладельцу(ВыбранноеЗначение); + +КонецПроцедуры + +#КонецОбласти + +#Область ОбработчикиКомандФормы + +&НаКлиенте +Процедура ОбъемНенужныхФайлов(Команда) + + ПараметрыОтчета = Новый Структура(); + ПараметрыОтчета.Вставить("СформироватьПриОткрытии", Истина); + + ОткрытьФорму("Отчет.ОбъемНенужныхФайлов.ФормаОбъекта", ПараметрыОтчета); + +КонецПроцедуры + +&НаКлиенте +Процедура НастроитьРасписание(Команда) + ДиалогРасписания = Новый ДиалогРасписанияРегламентногоЗадания(ТекущееРасписание()); + ОписаниеОповещения = Новый ОписаниеОповещения("НастроитьРасписаниеЗавершение", ЭтотОбъект); + ДиалогРасписания.Показать(ОписаниеОповещения); +КонецПроцедуры + +&НаКлиенте +Процедура УстановитьДействиеНеОчищать(Команда) + + УстановитьДействиеДляВыбранныхОбъектов( + ПредопределенноеЗначение("Перечисление.ВариантыОчисткиФайлов.НеОчищать")); + +КонецПроцедуры + +&НаКлиенте +Процедура УстановитьДействиеОчиститьВерсии(Команда) + + УстановитьДействиеДляВыбранныхОбъектов( + ПредопределенноеЗначение("Перечисление.ВариантыОчисткиФайлов.ОчиститьВерсии")); + +КонецПроцедуры + +&НаКлиенте +Процедура УстановитьДействиеОчиститьФайлы(Команда) + + УстановитьДействиеДляВыбранныхОбъектов( + ПредопределенноеЗначение("Перечисление.ВариантыОчисткиФайлов.ОчиститьФайлы")); + +КонецПроцедуры + +&НаКлиенте +Процедура УстановитьДействиеОчиститьФайлыИВерсии(Команда) + + УстановитьДействиеДляВыбранныхОбъектов( + ПредопределенноеЗначение("Перечисление.ВариантыОчисткиФайлов.ОчиститьФайлыИВерсии")); + +КонецПроцедуры + +&НаКлиенте +Процедура СтаршеМесяца(Команда) + УстановитьПериодОчисткиДляВыбранныхОбъектов( + ПредопределенноеЗначение("Перечисление.ПериодОчисткиФайлов.СтаршеМесяца")); +КонецПроцедуры + +&НаКлиенте +Процедура СтаршеШестиМесяцев(Команда) + УстановитьПериодОчисткиДляВыбранныхОбъектов( + ПредопределенноеЗначение("Перечисление.ПериодОчисткиФайлов.СтаршеШестиМесяцев")); +КонецПроцедуры + +&НаКлиенте +Процедура СтаршеГода(Команда) + УстановитьПериодОчисткиДляВыбранныхОбъектов( + ПредопределенноеЗначение("Перечисление.ПериодОчисткиФайлов.СтаршеГода")); +КонецПроцедуры + +&НаКлиенте +Процедура Очистить(Команда) + ПрерватьФоновоеЗадание(); + ЗапуститьРегламентноеЗадание(); + УстановитьВидимостьКомандыОчистить(); + ПодключитьОбработчикОжидания("ПроверитьВыполнениеФоновогоЗадания", 2, Истина); +КонецПроцедуры + +&НаКлиенте +Процедура ДобавитьНастройку(Команда) + + СтрокаДерева = Элементы.ДеревоОбъектовМетаданных.ТекущиеДанные; + Если Не СтрокаДерева.ВозможностьДетализации Тогда + ТекстСообщения = НСтр("ru = 'Добавление настройки возможно только для иерархических справочников'"); + ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстСообщения); + Возврат; + КонецЕсли; + + ПараметрыФормыВыбора = Новый Структура; + + ПараметрыФормыВыбора.Вставить("ВыборГруппИЭлементов", ИспользованиеГруппИЭлементов.ГруппыИЭлементы); + ПараметрыФормыВыбора.Вставить("ЗакрыватьПриВыборе", Истина); + ПараметрыФормыВыбора.Вставить("ЗакрыватьПриЗакрытииВладельца", Истина); + ПараметрыФормыВыбора.Вставить("МножественныйВыбор", Истина); + ПараметрыФормыВыбора.Вставить("РежимВыбора", Истина); + + ПараметрыФормыВыбора.Вставить("РежимОткрытияОкна", РежимОткрытияОкнаФормы.БлокироватьОкноВладельца); + ПараметрыФормыВыбора.Вставить("ВыборГрупп", Истина); + ПараметрыФормыВыбора.Вставить("ВыборГруппПользователей", Истина); + + ПараметрыФормыВыбора.Вставить("РасширенныйПодбор", Истина); + ПараметрыФормыВыбора.Вставить("ЗаголовокФормыПодбора", НСтр("ru = 'Подбор элементов настроек'")); + + // Исключим из списка выбора уже существующие настройки + СуществующиеНастройки = СтрокаДерева.ПолучитьЭлементы(); + ФиксированныеНастройки = Новый НастройкиКомпоновкиДанных; + ЭлементНастройки = ФиксированныеНастройки.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); + ЭлементНастройки.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Ссылка"); + ЭлементНастройки.ВидСравнения = ВидСравненияКомпоновкиДанных.НеВСписке; + СписокСуществующих = Новый Массив; + Для Каждого Настройка Из СуществующиеНастройки Цикл + СписокСуществующих.Добавить(Настройка.ВладелецФайла); + КонецЦикла; + ЭлементНастройки.ПравоеЗначение = СписокСуществующих; + ЭлементНастройки.Использование = Истина; + ЭлементНастройки.РежимОтображения = РежимОтображенияЭлементаНастройкиКомпоновкиДанных.Недоступный; + ПараметрыФормыВыбора.Вставить("ФиксированныеНастройки", ФиксированныеНастройки); + + ОткрытьФорму(ПутьФормыВыбора(СтрокаДерева.ВладелецФайла), ПараметрыФормыВыбора, Элементы.ДеревоОбъектовМетаданных); + +КонецПроцедуры + +&НаКлиенте +Процедура УдалитьНастройку(Команда) + + ОчиститьДанныеНастройки(); + +КонецПроцедуры + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +&НаСервере +Функция ПутьФормыВыбора(ВладелецФайла) + + ОбъектМетаданных = ОбщегоНазначения.ОбъектМетаданныхПоИдентификатору(ВладелецФайла); + Возврат ОбъектМетаданных.ПолноеИмя() + ".ФормаВыбора"; + +КонецФункции + +&НаКлиенте +Процедура УстановитьВидимостьКомандыОчистить() + + ПодчиненныеСтраницы = Элементы.ОчисткаФайлов.ПодчиненныеЭлементы; + Если ПустаяСтрока(ТекущееФоновоеЗадание) Тогда + Элементы.ОчисткаФайлов.ТекущаяСтраница = ПодчиненныеСтраницы.Очистка; + Иначе + Элементы.ОчисткаФайлов.ТекущаяСтраница = ПодчиненныеСтраницы.СтатусФоновогоЗадания; + КонецЕсли; + +КонецПроцедуры + +&НаСервере +Процедура ЗаполнитьСпискиВыбора() + + СписокВыбораСВерсиями = Новый СписокЗначений; + СписокВыбораСВерсиями.Добавить(Перечисления.ВариантыОчисткиФайлов.ОчиститьФайлыИВерсии); + СписокВыбораСВерсиями.Добавить(Перечисления.ВариантыОчисткиФайлов.ОчиститьВерсии); + СписокВыбораСВерсиями.Добавить(Перечисления.ВариантыОчисткиФайлов.НеОчищать); + + СписокВыбораБезВерсий = Новый СписокЗначений; + СписокВыбораБезВерсий.Добавить(Перечисления.ВариантыОчисткиФайлов.ОчиститьФайлы); + СписокВыбораБезВерсий.Добавить(Перечисления.ВариантыОчисткиФайлов.НеОчищать); + +КонецПроцедуры + +&НаКлиенте +Процедура ЗаполнитьСписокВыбора(Элемент) + + СтрокаДерева = Элементы.ДеревоОбъектовМетаданных.ТекущиеДанные; + + Элемент.СписокВыбора.Очистить(); + + Если СтрокаДерева.ЭтоФайл Тогда + СписокВыбора = СписокВыбораСВерсиями; + Иначе + СписокВыбора = СписокВыбораБезВерсий; + КонецЕсли; + + Для Каждого ЭлементСписка Из СписокВыбора Цикл + Элемент.СписокВыбора.Добавить(ЭлементСписка.Значение); + КонецЦикла; + +КонецПроцедуры + +&НаСервере +Процедура ЗаполнитьТипыОбъектовВДеревеЗначений() + + НастройкиОчистки = РегистрыСведений.НастройкиОчисткиФайлов.ТекущиеНастройкиОчистки(); + + ДеревоОМ = РеквизитФормыВЗначение("ДеревоОбъектовМетаданных"); + ДеревоОМ.Строки.Очистить(); + + МетаданныеСправочники = Метаданные.Справочники; + + ТаблицаТипов = Новый ТаблицаЗначений; + ТаблицаТипов.Колонки.Добавить("ВладелецФайла"); + ТаблицаТипов.Колонки.Добавить("ТипВладельцаФайла"); + ТаблицаТипов.Колонки.Добавить("ЭтоФайл", Новый ОписаниеТипов("Булево")); + ТаблицаТипов.Колонки.Добавить("ВозможностьДетализации" , Новый ОписаниеТипов("Булево")); + + ВидИерархииГруппИЭлементов = Метаданные.СвойстваОбъектов.ВидИерархии.ИерархияГруппИЭлементов; + МассивИсключений = ФайловыеФункцииСлужебный.ОбъектыИсключенияПриОчисткеФайлов(); + + Для Каждого Справочник Из МетаданныеСправочники Цикл + Если Справочник.Реквизиты.Найти("ВладелецФайла") <> Неопределено Тогда + ТипыВладельцевФайлов = Справочник.Реквизиты.ВладелецФайла.Тип.Типы(); + Для Каждого ТипВладельца Из ТипыВладельцевФайлов Цикл + + Если МассивИсключений.Найти(Справочник) <> Неопределено Тогда + Продолжить; + КонецЕсли; + + НоваяСтрока = ТаблицаТипов.Добавить(); + НоваяСтрока.ВладелецФайла = ТипВладельца; + НоваяСтрока.ТипВладельцаФайла = Справочник; + МетаданныеВладельца = Метаданные.НайтиПоТипу(ТипВладельца); + Если МетаданныеСправочники.Найти(МетаданныеВладельца.Имя) <> Неопределено И МетаданныеВладельца.Иерархический Тогда + НоваяСтрока.ВозможностьДетализации = Истина; + КонецЕсли; + Если Не СтрЗаканчиваетсяНа(Справочник.Имя, "ПрисоединенныеФайлы") Тогда + НоваяСтрока.ЭтоФайл = Истина; + КонецЕсли; + КонецЦикла; + КонецЕсли; + КонецЦикла; + + ВсеСправочники = Справочники.ТипВсеСсылки(); + + ВсеДокументы = Документы.ТипВсеСсылки(); + УзелСправочники = Неопределено; + УзелДокументы = Неопределено; + УзелБизнесПроцессы = Неопределено; + + Для Каждого Тип Из ТаблицаТипов Цикл + Если ВсеСправочники.СодержитТип(Тип.ВладелецФайла) Тогда + Если УзелСправочники = Неопределено Тогда + УзелСправочники = ДеревоОМ.Строки.Добавить(); + УзелСправочники.СинонимНаименованияОбъекта = НСтр("ru = 'Справочники'"); + КонецЕсли; + НоваяСтрокаТаблицы = УзелСправочники.Строки.Добавить(); + ИдентификаторОбъекта = ОбщегоНазначения.ИдентификаторОбъектаМетаданных(Тип.ВладелецФайла); + ДетализированныеНастройки = НастройкиОчистки.НайтиСтроки(Новый Структура( + "ИдентификаторВладельца", + ИдентификаторОбъекта)); + Если ДетализированныеНастройки.Количество() > 0 Тогда + Для Каждого Настройка Из ДетализированныеНастройки Цикл + ДетализированнаяНастройка = НоваяСтрокаТаблицы.Строки.Добавить(); + ДетализированнаяНастройка.ВладелецФайла = Настройка.ВладелецФайла; + ДетализированнаяНастройка.ТипВладельцаФайла = Настройка.ТипВладельцаФайла; + ДетализированнаяНастройка.СинонимНаименованияОбъекта = Настройка.ВладелецФайла; + ДетализированнаяНастройка.Действие = Настройка.Действие; + ПредставлениеОтбора = ""; + ПравилоОтбора = Настройка.ПравилоОтбора.Получить(); + ДетализированнаяНастройка.ПравилоОтбора = "Изменить"; + ДетализированнаяНастройка.ПериодОчистки = Настройка.ПериодОчистки; + ДетализированнаяНастройка.ЭтоФайл = Настройка.ЭтоФайл; + КонецЦикла; + КонецЕсли; + ИначеЕсли ВсеДокументы.СодержитТип(Тип.ВладелецФайла) Тогда + Если УзелДокументы = НеОпределено Тогда + УзелДокументы = ДеревоОМ.Строки.Добавить(); + УзелДокументы.СинонимНаименованияОбъекта = НСтр("ru = 'Документы'"); + КонецЕсли; + НоваяСтрокаТаблицы = УзелДокументы.Строки.Добавить(); + ИначеЕсли БизнесПроцессы.ТипВсеСсылки().СодержитТип(Тип.ВладелецФайла) Тогда + Если УзелБизнесПроцессы = Неопределено Тогда + УзелБизнесПроцессы = ДеревоОМ.Строки.Добавить(); + УзелБизнесПроцессы.СинонимНаименованияОбъекта = НСтр("ru = 'Бизнес-процессы'"); + КонецЕсли; + НоваяСтрокаТаблицы = УзелБизнесПроцессы.Строки.Добавить(); + КонецЕсли; + МетаданныеОбъекта = Метаданные.НайтиПоТипу(Тип.ВладелецФайла); + НоваяСтрокаТаблицы.ВладелецФайла = ОбщегоНазначения.ИдентификаторОбъектаМетаданных(Тип.ВладелецФайла); + НоваяСтрокаТаблицы.ТипВладельцаФайла = ОбщегоНазначения.ИдентификаторОбъектаМетаданных(Тип.ТипВладельцаФайла); + НоваяСтрокаТаблицы.СинонимНаименованияОбъекта = МетаданныеОбъекта.Синоним; + НоваяСтрокаТаблицы.ПравилоОтбора = "Изменить"; + НоваяСтрокаТаблицы.ЭтоФайл = Тип.ЭтоФайл; + НоваяСтрокаТаблицы.ВозможностьДетализации = Тип.ВозможностьДетализации; + + НайденныеНастройки = НастройкиОчистки.НайтиСтроки(Новый Структура("ВладелецФайла", НоваяСтрокаТаблицы.ВладелецФайла)); + Если НайденныеНастройки.Количество() > 0 Тогда + НоваяСтрокаТаблицы.Действие = НайденныеНастройки[0].Действие; + НоваяСтрокаТаблицы.ПериодОчистки = НайденныеНастройки[0].ПериодОчистки; + Иначе + НоваяСтрокаТаблицы.Действие = Перечисления.ВариантыОчисткиФайлов.НеОчищать; + НоваяСтрокаТаблицы.ПериодОчистки = Перечисления.ПериодОчисткиФайлов.СтаршеГода; + КонецЕсли; + КонецЦикла; + + Для Каждого УзелВерхнегоУровня Из ДеревоОМ.Строки Цикл + УзелВерхнегоУровня.Строки.Сортировать("СинонимНаименованияОбъекта"); + КонецЦикла; + ЗначениеВРеквизитФормы(ДеревоОМ, "ДеревоОбъектовМетаданных"); + +КонецПроцедуры + +&НаСервере +Функция ТекущееРасписание() + + Если ОбщегоНазначенияПовтИсп.РазделениеВключено() Тогда + ОбластьДанных = ОбщегоНазначения.ЗначениеРазделителяСеанса(); + ИмяМетода = Метаданные.РегламентныеЗадания.ОчисткаНенужныхФайлов.ИмяМетода; + + ПараметрыЗадания = Новый Структура; + ПараметрыЗадания.Вставить("ИмяМетода", ИмяМетода); + ПараметрыЗадания.Вставить("ОбластьДанных", ОбластьДанных); + + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаВМоделиСервиса.ОчередьЗаданий") Тогда + МодульОчередьЗаданий = ОбщегоНазначения.ОбщийМодуль("ОчередьЗаданий"); + + УстановитьПривилегированныйРежим(Истина); + + СписокЗаданий = МодульОчередьЗаданий.ПолучитьЗадания(ПараметрыЗадания); + Для Каждого Задание Из СписокЗаданий Цикл + Возврат Задание.Расписание; + КонецЦикла; + + Возврат Новый РасписаниеРегламентногоЗадания; + КонецЕсли; + Иначе + Возврат РегламентныеЗадания.НайтиПредопределенное(Метаданные.РегламентныеЗадания.ОчисткаНенужныхФайлов).Расписание; + КонецЕсли; + +КонецФункции + +&НаКлиенте +Процедура НастроитьРасписаниеЗавершение(Расписание, ДополнительныеПараметры) Экспорт + Если Расписание = Неопределено Тогда + Возврат; + КонецЕсли; + + УстановитьРасписаниеРегламентногоЗадания(Расписание); + Элементы.Расписание.Заголовок = Расписание; + +КонецПроцедуры + +&НаСервере +Процедура УстановитьРасписаниеРегламентногоЗадания(Расписание); + + Если ОбщегоНазначенияПовтИсп.РазделениеВключено() Тогда + ОбластьДанных = ОбщегоНазначения.ЗначениеРазделителяСеанса(); + ИмяМетода = Метаданные.РегламентныеЗадания.ОчисткаНенужныхФайлов.ИмяМетода; + + ПараметрыЗадания = Новый Структура; + ПараметрыЗадания.Вставить("ИмяМетода", ИмяМетода); + ПараметрыЗадания.Вставить("ОбластьДанных", ОбластьДанных); + + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаВМоделиСервиса.ОчередьЗаданий") Тогда + МодульОчередьЗаданий = ОбщегоНазначения.ОбщийМодуль("ОчередьЗаданий"); + + УстановитьПривилегированныйРежим(Истина); + + СписокЗаданий = МодульОчередьЗаданий.ПолучитьЗадания(ПараметрыЗадания); + Если СписокЗаданий.Количество() = 0 Тогда + ПараметрыЗадания.Вставить("Расписание", Расписание); + МодульОчередьЗаданий.ДобавитьЗадание(ПараметрыЗадания); + Иначе + ПараметрыЗадания = Новый Структура("Расписание", Расписание); + Для Каждого Задание Из СписокЗаданий Цикл + МодульОчередьЗаданий.ИзменитьЗадание(Задание.Идентификатор, ПараметрыЗадания); + КонецЦикла; + КонецЕсли; + КонецЕсли; + Иначе + РегламентноеЗадание = РегламентныеЗадания.НайтиПредопределенное(Метаданные.РегламентныеЗадания.ОчисткаНенужныхФайлов); + РегламентноеЗадание.Расписание = Расписание; + РегламентноеЗадание.Записать(); + КонецЕсли; + +КонецПроцедуры + +&НаСервере +Процедура ВключитьОтключитьРегламентноеЗадание(Использование) + + Если ОбщегоНазначенияПовтИсп.РазделениеВключено() Тогда + ОбластьДанных = ОбщегоНазначения.ЗначениеРазделителяСеанса(); + ИмяМетода = Метаданные.РегламентныеЗадания.ОчисткаНенужныхФайлов.ИмяМетода; + + ПараметрыЗадания = Новый Структура; + ПараметрыЗадания.Вставить("ИмяМетода", ИмяМетода); + ПараметрыЗадания.Вставить("ОбластьДанных", ОбластьДанных); + + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаВМоделиСервиса.ОчередьЗаданий") Тогда + МодульОчередьЗаданий = ОбщегоНазначения.ОбщийМодуль("ОчередьЗаданий"); + + УстановитьПривилегированныйРежим(Истина); + + СписокЗаданий = МодульОчередьЗаданий.ПолучитьЗадания(ПараметрыЗадания); + Если СписокЗаданий.Количество() = 0 Тогда + ПараметрыЗадания.Вставить("Использование", Использование); + МодульОчередьЗаданий.ДобавитьЗадание(ПараметрыЗадания); + Иначе + ПараметрыЗадания = Новый Структура("Использование", Использование); + Для Каждого Задание Из СписокЗаданий Цикл + МодульОчередьЗаданий.ИзменитьЗадание(Задание.Идентификатор, ПараметрыЗадания); + КонецЦикла; + КонецЕсли; + КонецЕсли; + Иначе + РегламентноеЗадание = РегламентныеЗадания.НайтиПредопределенное(Метаданные.РегламентныеЗадания.ОчисткаНенужныхФайлов); + РегламентноеЗадание.Использование = Не РегламентноеЗадание.Использование; + РегламентноеЗадание.Записать(); + КонецЕсли; + +КонецПроцедуры + +&НаСервере +Процедура УстановитьПериодОчисткиДляВыбранныхОбъектов(ПериодОчистки) + + Для Каждого ИдентификаторСтроки Из Элементы.ДеревоОбъектовМетаданных.ВыделенныеСтроки Цикл + ЭлементДерева = ДеревоОбъектовМетаданных.НайтиПоИдентификатору(ИдентификаторСтроки); + Если ЭлементДерева.ПолучитьРодителя() = Неопределено Тогда + Для Каждого ПодчиненныйЭлементДерева Из ЭлементДерева.ПолучитьЭлементы() Цикл + УстановитьПериодОчисткиДляВыбранногоОбъекта(ПодчиненныйЭлементДерева, ПериодОчистки); + КонецЦикла; + Иначе + УстановитьПериодОчисткиДляВыбранногоОбъекта(ЭлементДерева, ПериодОчистки); + КонецЕсли; + КонецЦикла; + +КонецПроцедуры + +&НаСервере +Процедура УстановитьПериодОчисткиДляВыбранногоОбъекта(ВыбранныйОбъект, ПериодОчистки) + + ВыбранныйОбъект.ПериодОчистки = ПериодОчистки; + ЗаписатьТекущиеНастройкиПоОбъекту( + ВыбранныйОбъект.ВладелецФайла, + ВыбранныйОбъект.ТипВладельцаФайла, + ВыбранныйОбъект.Действие, + ПериодОчистки, + ВыбранныйОбъект.ЭтоФайл); + +КонецПроцедуры + +&НаСервере +Процедура УстановитьДействиеДляВыбранныхОбъектов(Знач Действие) + + Для Каждого ИдентификаторСтроки Из Элементы.ДеревоОбъектовМетаданных.ВыделенныеСтроки Цикл + ЭлементДерева = ДеревоОбъектовМетаданных.НайтиПоИдентификатору(ИдентификаторСтроки); + Если ЭлементДерева.ПолучитьРодителя() = Неопределено Тогда + Для Каждого ПодчиненныйЭлементДерева Из ЭлементДерева.ПолучитьЭлементы() Цикл + УстановитьДействиеВыбранногоОбъекта(ПодчиненныйЭлементДерева, Действие); + КонецЦикла; + Иначе + УстановитьДействиеВыбранногоОбъекта(ЭлементДерева, Действие); + КонецЕсли; + КонецЦикла; + +КонецПроцедуры + +&НаСервере +Процедура УстановитьДействиеВыбранногоОбъекта(ВыбранныйОбъект, Действие) + + ВыбранныйОбъект.Действие = Действие; + ЗаписатьТекущиеНастройкиПоОбъекту( + ВыбранныйОбъект.ВладелецФайла, + ВыбранныйОбъект.ТипВладельцаФайла, + Действие, + ВыбранныйОбъект.ПериодОчистки, + ВыбранныйОбъект.ЭтоФайл); + + КонецПроцедуры + +&НаКлиенте +Процедура ЗаписатьТекущиеНастройки() + + ТекущиеДанные = Элементы.ДеревоОбъектовМетаданных.ТекущиеДанные; + ЗаписатьТекущиеНастройкиПоОбъекту( + ТекущиеДанные.ВладелецФайла, + ТекущиеДанные.ТипВладельцаФайла, + ТекущиеДанные.Действие, + ТекущиеДанные.ПериодОчистки, + ТекущиеДанные.ЭтоФайл); + +КонецПроцедуры + +&НаСервере +Процедура ЗаписатьТекущиеНастройкиПоОбъекту(ВладелецФайла, ТипВладельцаФайла, Действие, ПериодОчистки, ЭтоФайл) + Настройка = РегистрыСведений.НастройкиОчисткиФайлов.СоздатьМенеджерЗаписи(); + Настройка.ВладелецФайла = ВладелецФайла; + Настройка.ТипВладельцаФайла = ТипВладельцаФайла; + Настройка.Действие = Действие; + Настройка.ПериодОчистки = ПериодОчистки; + Настройка.ЭтоФайл = ЭтоФайл; + Настройка.Записать(); +КонецПроцедуры + +&НаКлиенте +Процедура ОткрытьФормуНастроек(); + + ТекущиеДанные = Элементы.ДеревоОбъектовМетаданных.ТекущиеДанные; + + Если ТекущиеДанные.ПериодОчистки <> ПредопределенноеЗначение("Перечисление.ПериодОчисткиФайлов.ПоПравилу") Тогда + Возврат; + КонецЕсли; + + Отбор = Новый Структура( + "ВладелецФайла, ТипВладельцаФайла", + ТекущиеДанные.ВладелецФайла, + ТекущиеДанные.ТипВладельцаФайла); + + ТипЗначения = Тип("РегистрСведенийКлючЗаписи.НастройкиОчисткиФайлов"); + ПараметрыЗаписи = Новый Массив(1); + ПараметрыЗаписи[0] = Отбор; + + КлючЗаписи = Новый(ТипЗначения, ПараметрыЗаписи); + + ПараметрыЗаписи = Новый Структура; + ПараметрыЗаписи.Вставить("Ключ", КлючЗаписи); + + ОткрытьФорму("РегистрСведений.НастройкиОчисткиФайлов.ФормаЗаписи", ПараметрыЗаписи, ЭтаФорма); + +КонецПроцедуры + +&НаКлиенте +Процедура ПрерватьФоновоеЗадание() + ОтменитьВыполнениеЗадания(ИдентификаторФоновогоЗадания); + ОтключитьОбработчикОжидания("ПроверитьВыполнениеФоновогоЗадания"); + ТекущееФоновоеЗадание = ""; + ИдентификаторФоновогоЗадания = ""; +КонецПроцедуры + +&НаСервереБезКонтекста +Процедура ОтменитьВыполнениеЗадания(ИдентификаторФоновогоЗадания) + ДлительныеОперации.ОтменитьВыполнениеЗадания(ИдентификаторФоновогоЗадания); +КонецПроцедуры + +&НаКлиенте +Процедура ПроверитьВыполнениеФоновогоЗадания() + Если Не ЗаданиеВыполнено(ИдентификаторФоновогоЗадания) Тогда + ПодключитьОбработчикОжидания("ПроверитьВыполнениеФоновогоЗадания", 5, Истина); + Иначе + ИдентификаторФоновогоЗадания = ""; + ТекущееФоновоеЗадание = ""; + УстановитьВидимостьКомандыОчистить(); + КонецЕсли; +КонецПроцедуры + +&НаСервереБезКонтекста +Функция ЗаданиеВыполнено(ИдентификаторФоновогоЗадания) + Возврат ДлительныеОперации.ЗаданиеВыполнено(ИдентификаторФоновогоЗадания); +КонецФункции + +&НаСервере +Процедура ЗапуститьРегламентноеЗадание() + + РегламентноеЗадание = РегламентныеЗадания.НайтиПредопределенное(Метаданные.РегламентныеЗадания.ОчисткаНенужныхФайлов); + + Отбор = Новый Структура; + Отбор.Вставить("РегламентноеЗадание", РегламентноеЗадание); + Отбор.Вставить("Состояние", СостояниеФоновогоЗадания.Активно); + ФоновыеЗаданияОчистки = ФоновыеЗадания.ПолучитьФоновыеЗадания(Отбор); + Если ФоновыеЗаданияОчистки.Количество() > 0 Тогда + ИдентификаторФоновогоЗадания = ФоновыеЗаданияОчистки[0].УникальныйИдентификатор; + Иначе + НаименованиеФоновогоЗадания = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Запуск вручную: %1'"), РегламентноеЗадание.Метаданные.Синоним); + + ФоновоеЗадание = ФоновыеЗадания.Выполнить( + РегламентноеЗадание.Метаданные.ИмяМетода, + РегламентноеЗадание.Параметры, + Строка(РегламентноеЗадание.УникальныйИдентификатор), + НаименованиеФоновогоЗадания); + + ИдентификаторФоновогоЗадания = ФоновоеЗадание.УникальныйИдентификатор; + КонецЕсли; + + ТекущееФоновоеЗадание = "Очистка"; + +КонецПроцедуры + +&НаСервере +Процедура ДобавитьНастройкиПоВладельцу(ВыбранноеЗначение) + + СтрокаВладелец = ДеревоОбъектовМетаданных.НайтиПоИдентификатору(Элементы.ДеревоОбъектовМетаданных.ТекущаяСтрока); + + ЗаписьВладельца = РегистрыСведений.НастройкиОчисткиФайлов.СоздатьМенеджерЗаписи(); + ЗаполнитьЗначенияСвойств(ЗаписьВладельца, СтрокаВладелец); + ЗаписьВладельца.Записать(); + + ЭлементВладелец = СтрокаВладелец.ПолучитьЭлементы(); + Для Каждого Настройка Из ВыбранноеЗначение Цикл + НоваяЗапись = РегистрыСведений.НастройкиОчисткиФайлов.СоздатьМенеджерЗаписи(); + НоваяЗапись.ВладелецФайла = Настройка; + НоваяЗапись.ТипВладельцаФайла = СтрокаВладелец.ТипВладельцаФайла; + НоваяЗапись.Действие = Перечисления.ВариантыОчисткиФайлов.НеОчищать; + НоваяЗапись.ПериодОчистки = Перечисления.ПериодОчисткиФайлов.СтаршеГода; + НоваяЗапись.ЭтоФайл = СтрокаВладелец.ЭтоФайл; + НоваяЗапись.Записать(Истина); + + ДетализированнаяНастройка = ЭлементВладелец.Добавить(); + ЗаполнитьЗначенияСвойств(ДетализированнаяНастройка, НоваяЗапись); + ДетализированнаяНастройка.СинонимНаименованияОбъекта = Настройка; + ДетализированнаяНастройка.ПравилоОтбора = НСтр("ru = 'Изменить правило'"); + КонецЦикла; + +КонецПроцедуры + +&НаСервере +Процедура ОчиститьДанныеНастройки() + + НастройкаДляУдаления = ДеревоОбъектовМетаданных.НайтиПоИдентификатору(Элементы.ДеревоОбъектовМетаданных.ТекущаяСтрока); + + МенеджерЗаписи = РегистрыСведений.НастройкиОчисткиФайлов.СоздатьМенеджерЗаписи(); + МенеджерЗаписи.ВладелецФайла = НастройкаДляУдаления.ВладелецФайла; + МенеджерЗаписи.ТипВладельцаФайла = НастройкаДляУдаления.ТипВладельцаФайла; + МенеджерЗаписи.Прочитать(); + МенеджерЗаписи.Удалить(); + + РодительЭлементаНастроек = НастройкаДляУдаления.ПолучитьРодителя(); + Если РодительЭлементаНастроек <> Неопределено Тогда + РодительЭлементаНастроек.ПолучитьЭлементы().Удалить(НастройкаДляУдаления); + Иначе + ДеревоОбъектовМетаданных.ПолучитьЭлементы().Удалить(НастройкаДляУдаления); + КонецЕсли; + +КонецПроцедуры + +&НаСервере +Функция АвтоматическаяОчисткаВключена() + + Если ОбщегоНазначенияПовтИсп.РазделениеВключено() Тогда + ОбластьДанных = ОбщегоНазначения.ЗначениеРазделителяСеанса(); + ИмяМетода = Метаданные.РегламентныеЗадания.ОчисткаНенужныхФайлов.ИмяМетода; + + ПараметрыЗадания = Новый Структура; + ПараметрыЗадания.Вставить("ИмяМетода", ИмяМетода); + ПараметрыЗадания.Вставить("ОбластьДанных", ОбластьДанных); + + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаВМоделиСервиса.ОчередьЗаданий") Тогда + МодульОчередьЗаданий = ОбщегоНазначения.ОбщийМодуль("ОчередьЗаданий"); + + УстановитьПривилегированныйРежим(Истина); + + СписокЗаданий = МодульОчередьЗаданий.ПолучитьЗадания(ПараметрыЗадания); + Для Каждого Задание Из СписокЗаданий Цикл + Возврат Задание.Использование; + КонецЦикла; + КонецЕсли; + Иначе + Возврат РегламентныеЗадания.НайтиПредопределенное(Метаданные.РегламентныеЗадания.ОчисткаНенужныхФайлов).Использование; + КонецЕсли; + + Возврат Ложь; + +КонецФункции + +#КонецОбласти diff --git a/SSL/src/InformationRegisters/НастройкиОчисткиФайлов/Help/ru.html b/SSL/src/InformationRegisters/НастройкиОчисткиФайлов/Help/ru.html new file mode 100644 index 000000000..7d7e9b9a2 --- /dev/null +++ b/SSL/src/InformationRegisters/НастройкиОчисткиФайлов/Help/ru.html @@ -0,0 +1,27 @@ + +

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

      +

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

      +

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

      +

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

      +

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

      +

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

      +

      Настройка очистки

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

      Отчет "Объем ненужных файлов"

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

      Очистка файлов вручную

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

      Настройка автоматической очистки файлов

      + \ No newline at end of file diff --git a/SSL/src/InformationRegisters/НастройкиОчисткиФайлов/ManagerModule.bsl b/SSL/src/InformationRegisters/НастройкиОчисткиФайлов/ManagerModule.bsl new file mode 100644 index 000000000..7dd87642c --- /dev/null +++ b/SSL/src/InformationRegisters/НастройкиОчисткиФайлов/ManagerModule.bsl @@ -0,0 +1,149 @@ +#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда + +#Область СлужебныеПроцедурыИФункции + +Функция ТекущиеНастройкиОчистки() Экспорт + + УстановитьПривилегированныйРежим(Истина); + + ОбновитьНастройкиОчистки(); + + Запрос = Новый Запрос; + Запрос.Текст = + "ВЫБРАТЬ + | НастройкиОчисткиФайлов.ВладелецФайла, + | ИдентификаторыОбъектовМетаданных.Ссылка КАК ИдентификаторВладельца, + | ВЫБОР + | КОГДА ТИПЗНАЧЕНИЯ(ИдентификаторыОбъектовМетаданных.Ссылка) <> ТИПЗНАЧЕНИЯ(НастройкиОчисткиФайлов.ВладелецФайла) + | ТОГДА ИСТИНА + | ИНАЧЕ ЛОЖЬ + | КОНЕЦ КАК ЭтоНастройкаДляЭлементаСправочника, + | НастройкиОчисткиФайлов.ТипВладельцаФайла, + | НастройкиОчисткиФайлов.ПравилоОтбора, + | НастройкиОчисткиФайлов.Действие, + | НастройкиОчисткиФайлов.ПериодОчистки, + | НастройкиОчисткиФайлов.ЭтоФайл + |ИЗ + | РегистрСведений.НастройкиОчисткиФайлов КАК НастройкиОчисткиФайлов + | ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ИдентификаторыОбъектовМетаданных КАК ИдентификаторыОбъектовМетаданных + | ПО (ТИПЗНАЧЕНИЯ(НастройкиОчисткиФайлов.ВладелецФайла) = ТИПЗНАЧЕНИЯ(ИдентификаторыОбъектовМетаданных.ЗначениеПустойСсылки))"; + + Возврат Запрос.Выполнить().Выгрузить(); + +КонецФункции + +Процедура ОбновитьНастройкиОчистки() + + МетаданныеСправочники = Метаданные.Справочники; + + ТаблицаВладельцевФайлов = Новый ТаблицаЗначений; + ТаблицаВладельцевФайлов.Колонки.Добавить("ВладелецФайла", Новый ОписаниеТипов("СправочникСсылка.ИдентификаторыОбъектовМетаданных")); + ТаблицаВладельцевФайлов.Колонки.Добавить("ТипВладельцаФайла", Новый ОписаниеТипов("СправочникСсылка.ИдентификаторыОбъектовМетаданных")); + ТаблицаВладельцевФайлов.Колонки.Добавить("ЭтоФайл", Новый ОписаниеТипов("Булево")); + + МассивИсключений = ФайловыеФункцииСлужебный.ОбъектыИсключенияПриОчисткеФайлов(); + + Для Каждого Справочник Из МетаданныеСправочники Цикл + Если Справочник.Реквизиты.Найти("ВладелецФайла") <> Неопределено Тогда + Если МассивИсключений.Найти(Справочник) <> Неопределено Тогда + Продолжить; + КонецЕсли; + + ТипыВладельцевФайлов = Справочник.Реквизиты.ВладелецФайла.Тип.Типы(); + Для Каждого ТипВладельца Из ТипыВладельцевФайлов Цикл + НоваяСтрока = ТаблицаВладельцевФайлов.Добавить(); + НоваяСтрока.ВладелецФайла = ОбщегоНазначения.ИдентификаторОбъектаМетаданных(ТипВладельца); + НоваяСтрокаЗначениеПустойСсылкиВладельца = НоваяСтрока.ВладелецФайла.ЗначениеПустойСсылки; + НоваяСтрока.ТипВладельцаФайла = ОбщегоНазначения.ИдентификаторОбъектаМетаданных(Справочник); + Если Не СтрЗаканчиваетсяНа(Справочник.Имя, "ПрисоединенныеФайлы") Тогда + НоваяСтрока.ЭтоФайл = Истина; + КонецЕсли; + КонецЦикла; + КонецЕсли; + КонецЦикла; + + ВыборкаЗаписей = РегистрыСведений.НастройкиОчисткиФайлов.Выбрать(); + + Запрос = Новый Запрос; + Запрос.Текст = + "ВЫБРАТЬ + | ТаблицаВладельцевФайлов.ВладелецФайла КАК ВладелецФайла, + | ТаблицаВладельцевФайлов.ТипВладельцаФайла КАК ТипВладельцаФайла, + | ТаблицаВладельцевФайлов.ЭтоФайл КАК ЭтоФайл + |ПОМЕСТИТЬ ТаблицаВладельцевФайлов + |ИЗ + | &ТаблицаВладельцевФайлов КАК ТаблицаВладельцевФайлов + | + |ИНДЕКСИРОВАТЬ ПО + | ВладелецФайла, + | ЭтоФайл + |; + | + |//////////////////////////////////////////////////////////////////////////////// + |ВЫБРАТЬ + | НастройкиОчисткиФайлов.ВладелецФайла, + | НастройкиОчисткиФайлов.ТипВладельцаФайла КАК ТипВладельцаФайла, + | НастройкиОчисткиФайлов.ЭтоФайл КАК ЭтоФайл, + | ИдентификаторыОбъектовМетаданных.Ссылка КАК ИдентификаторОбъекта + |ПОМЕСТИТЬ ПодчиненныеНастройки + |ИЗ + | РегистрСведений.НастройкиОчисткиФайлов КАК НастройкиОчисткиФайлов + | ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ИдентификаторыОбъектовМетаданных КАК ИдентификаторыОбъектовМетаданных + | ПО (ТИПЗНАЧЕНИЯ(НастройкиОчисткиФайлов.ВладелецФайла) = ТИПЗНАЧЕНИЯ(ИдентификаторыОбъектовМетаданных.ЗначениеПустойСсылки)) + |ГДЕ + | ТИПЗНАЧЕНИЯ(НастройкиОчисткиФайлов.ВладелецФайла) <> ТИП(Справочник.ИдентификаторыОбъектовМетаданных) + | + |ИНДЕКСИРОВАТЬ ПО + | ИдентификаторОбъекта, + | ЭтоФайл, + | ТипВладельцаФайла + |; + | + |//////////////////////////////////////////////////////////////////////////////// + |ВЫБРАТЬ + | НастройкиОчисткиФайлов.ВладелецФайла, + | НастройкиОчисткиФайлов.ТипВладельцаФайла КАК ТипВладельцаФайла, + | НастройкиОчисткиФайлов.ЭтоФайл, + | ЛОЖЬ КАК НоваяНастройка + |ИЗ + | РегистрСведений.НастройкиОчисткиФайлов КАК НастройкиОчисткиФайлов + | ЛЕВОЕ СОЕДИНЕНИЕ ТаблицаВладельцевФайлов КАК ТаблицаВладельцевФайлов + | ПО НастройкиОчисткиФайлов.ВладелецФайла = ТаблицаВладельцевФайлов.ВладелецФайла + | И НастройкиОчисткиФайлов.ЭтоФайл = ТаблицаВладельцевФайлов.ЭтоФайл + | И НастройкиОчисткиФайлов.ТипВладельцаФайла = ТаблицаВладельцевФайлов.ТипВладельцаФайла + |ГДЕ + | ТаблицаВладельцевФайлов.ВладелецФайла ЕСТЬ NULL + | И ТИПЗНАЧЕНИЯ(НастройкиОчисткиФайлов.ВладелецФайла) = ТИП(Справочник.ИдентификаторыОбъектовМетаданных) + | + |ОБЪЕДИНИТЬ ВСЕ + | + |ВЫБРАТЬ + | ПодчиненныеНастройки.ВладелецФайла, + | ПодчиненныеНастройки.ТипВладельцаФайла, + | ПодчиненныеНастройки.ЭтоФайл, + | ЛОЖЬ + |ИЗ + | ПодчиненныеНастройки КАК ПодчиненныеНастройки + | ЛЕВОЕ СОЕДИНЕНИЕ ТаблицаВладельцевФайлов КАК ТаблицаВладельцевФайлов + | ПО ПодчиненныеНастройки.ТипВладельцаФайла = ТаблицаВладельцевФайлов.ТипВладельцаФайла + | И ПодчиненныеНастройки.ЭтоФайл = ТаблицаВладельцевФайлов.ЭтоФайл + | И ПодчиненныеНастройки.ИдентификаторОбъекта = ТаблицаВладельцевФайлов.ВладелецФайла + |ГДЕ + | ТаблицаВладельцевФайлов.ВладелецФайла ЕСТЬ NULL "; + + Запрос.Параметры.Вставить("ТаблицаВладельцевФайлов", ТаблицаВладельцевФайлов); + ОбщаяТаблицаНастроек = Запрос.Выполнить().Выгрузить(); + + НастройкиДляУдаления = ОбщаяТаблицаНастроек.НайтиСтроки(Новый Структура("НоваяНастройка", Ложь)); + Для Каждого Настройка Из НастройкиДляУдаления Цикл + МенеджерЗаписи = РегистрыСведений.НастройкиОчисткиФайлов.СоздатьМенеджерЗаписи(); + МенеджерЗаписи.ВладелецФайла = Настройка.ВладелецФайла; + МенеджерЗаписи.ТипВладельцаФайла = Настройка.ТипВладельцаФайла; + МенеджерЗаписи.Удалить(); + КонецЦикла; + +КонецПроцедуры + +#КонецОбласти + +#КонецЕсли \ No newline at end of file diff --git a/SSL/src/InformationRegisters/НастройкиОчисткиФайлов/НастройкиОчисткиФайлов.mdo b/SSL/src/InformationRegisters/НастройкиОчисткиФайлов/НастройкиОчисткиФайлов.mdo new file mode 100644 index 000000000..2eea587fe --- /dev/null +++ b/SSL/src/InformationRegisters/НастройкиОчисткиФайлов/НастройкиОчисткиФайлов.mdo @@ -0,0 +1,208 @@ + + + + + + + + + + + + НастройкиОчисткиФайлов + + ru + Настройки очистки файлов + + InDialog + InformationRegister.НастройкиОчисткиФайлов.Form.ФормаЗаписи + InformationRegister.НастройкиОчисткиФайлов.Form.ФормаСписка + + Use + Active + + Use + + + + + Use + LineNumber + + Use + + + + + Use + Recorder + + Use + + + + + Use + Period + + ShowError + Use + + + + + + ru + + + Managed + + ПравилоОтбора + + ru + Правило отбора + + + ValueStorage + + + ru + Компоновщик с настройками отбора + + + + Use + Use + + + + Действие + + ru + Действие + + + EnumRef.ВариантыОчисткиФайлов + + + ru + Вариант очистки файлов + + + + Use + Use + + + + ПериодОчистки + + ru + Период + + + EnumRef.ПериодОчисткиФайлов + + + ru + Период очистки файлов + + + + Use + Use + + + + ЭтоФайл + + ru + Это файл + + + Boolean + + + ru + Определяет к какой подсистеме относится файл (служебный реквизит) + + + + Use + Use + + + + ВладелецФайла + + ru + Владелец + + + AnyRef + + + ru + Имя владельца файла + + + + ShowError + Use + Use + + true + + + ТипВладельцаФайла + + ru + Тип владельца файла + + + CatalogRef.ИдентификаторыОбъектовМетаданных + + + ru + Имя справочника владельца файла + + + + Use + Use + + true + + + ФормаЗаписи + + ru + Форма записи + + + + ru + + + PersonalComputer + MobileDevice + + + ФормаСписка + + ru + Настройки очистки файлов + + PersonalComputer + MobileDevice + + + ФормаДобавленияУсловияПоДате + + ru + Добавление условия по дате + + PersonalComputer + MobileDevice + + diff --git a/SSL/src/InformationRegisters/НастройкиПравОбъектов/Forms/ФормаЗаписи/Form.form b/SSL/src/InformationRegisters/НастройкиПравОбъектов/Forms/ФормаЗаписи/Form.form index 5f2cd34c2..518a45d22 100644 --- a/SSL/src/InformationRegisters/НастройкиПравОбъектов/Forms/ФормаЗаписи/Form.form +++ b/SSL/src/InformationRegisters/НастройкиПравОбъектов/Forms/ФормаЗаписи/Form.form @@ -776,7 +776,6 @@ true true true - UseIfNecessary auto true @@ -813,7 +812,7 @@ ВключитьВозможностьРедактирования - Auto + DontUse Auto diff --git a/SSL/src/InformationRegisters/НастройкиПравОбъектов/Forms/ФормаСписка/Form.form b/SSL/src/InformationRegisters/НастройкиПравОбъектов/Forms/ФормаСписка/Form.form index f515fc894..996ab84f2 100644 --- a/SSL/src/InformationRegisters/НастройкиПравОбъектов/Forms/ФормаСписка/Form.form +++ b/SSL/src/InformationRegisters/НастройкиПравОбъектов/Forms/ФормаСписка/Form.form @@ -869,7 +869,6 @@ true true true - UseIfNecessary auto true @@ -912,7 +911,7 @@ ВключитьВозможностьРедактирования - Auto + DontUse Auto @@ -934,7 +933,7 @@ ОбновитьВспомогательныеДанныеРегистра - Auto + DontUse Auto diff --git a/SSL/src/InformationRegisters/НастройкиПравОбъектов/ManagerModule.bsl b/SSL/src/InformationRegisters/НастройкиПравОбъектов/ManagerModule.bsl index a7910cec8..30512f985 100644 --- a/SSL/src/InformationRegisters/НастройкиПравОбъектов/ManagerModule.bsl +++ b/SSL/src/InformationRegisters/НастройкиПравОбъектов/ManagerModule.bsl @@ -149,8 +149,7 @@ // Функция Прочитать(Знач СсылкаНаОбъект) Экспорт - ВозможныеПрава = УправлениеДоступомСлужебныйПовтИсп.Параметры( - ).ВозможныеПраваДляНастройкиПравОбъектов; + ВозможныеПрава = УправлениеДоступомСлужебныйПовтИсп.Параметры().ВозможныеПраваДляНастройкиПравОбъектов; ОписаниеПрав = ВозможныеПрава.ПоТипам.Получить(ТипЗнч(СсылкаНаОбъект)); @@ -182,7 +181,7 @@ Если ВозможныеПрава.ИерархическиеТаблицы.Получить(ТипЗнч(СсылкаНаОбъект)) = Неопределено Тогда НаследованиеНастроек = УправлениеДоступомСлужебныйПовтИсп.ТаблицаПустогоНабораЗаписей( - "РегистрСведений.НаследованиеНастроекПравОбъектов").Скопировать(); + Метаданные.РегистрыСведений.НаследованиеНастроекПравОбъектов.ПолноеИмя()).Скопировать(); НоваяСтрока = НаследованиеНастроек.Добавить(); НаследованиеНастроек.Колонки.Добавить("Уровень", Новый ОписаниеТипов("Число")); НоваяСтрока.Объект = СсылкаНаОбъект; @@ -283,8 +282,7 @@ // Процедура Записать(Знач СсылкаНаОбъект, Знач Настройки, Знач Наследовать) Экспорт - ВозможныеПрава = УправлениеДоступомСлужебныйПовтИсп.Параметры( - ).ВозможныеПраваДляНастройкиПравОбъектов; + ВозможныеПрава = УправлениеДоступомСлужебныйПовтИсп.Параметры().ВозможныеПраваДляНастройкиПравОбъектов; ОписаниеПрав = ВозможныеПрава.ПоТипамСсылок.Получить(ТипЗнч(СсылкаНаОбъект)); @@ -317,7 +315,7 @@ // Подготовка новых настроек НовыеНастройкиПрав = УправлениеДоступомСлужебныйПовтИсп.ТаблицаПустогоНабораЗаписей( - "РегистрСведений.НастройкиПравОбъектов").Скопировать(); + Метаданные.РегистрыСведений.НастройкиПравОбъектов.ПолноеИмя()).Скопировать(); ТаблицаОбщихПрав = Справочники.ИдентификаторыОбъектовМетаданных.ПустаяСсылка(); @@ -744,8 +742,8 @@ СвойстваВидовДоступа = СтандартныеПодсистемыСервер.ПараметрыРаботыПрограммы( "ПараметрыОграниченияДоступа").СвойстваВидовДоступа; - ТипыПодпискиОбновитьГруппыЗначенийДоступа = УправлениеДоступомСлужебныйПовтИсп.ТипыОбъектовВПодпискахНаСобытия( - "ОбновитьГруппыЗначенийДоступа"); + ТипыПодпискиОбновитьГруппыВладельцевНастроекПрав = УправлениеДоступомСлужебныйПовтИсп.ТипыПоляТаблицы( + "ОпределяемыйТип.ВладелецНастроекПравОбъект"); ТипыПодпискиЗаписатьНаборыЗначенийДоступа = УправлениеДоступомСлужебныйПовтИсп.ТипыОбъектовВПодпискахНаСобытия( "ЗаписатьНаборыЗначенийДоступа"); @@ -764,8 +762,8 @@ ОбъектМетаданныхВладельца = Метаданные.НайтиПоПолномуИмени(ВозможноеПраво.ВладелецПрав); Если ОбъектМетаданныхВладельца = Неопределено Тогда - ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - ЗаголовокОшибки + НСтр("ru = 'Не найден владелец прав ""%1"".'"), + ВызватьИсключение ЗаголовокОшибки + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Не найден владелец прав ""%1"".'"), ВозможноеПраво.ВладелецПрав); КонецЕсли; @@ -786,8 +784,7 @@ ОбъектМетаданныхВладельца); Если ОпределяемыйТипВладельцевПрав.Получить(ТипСсылки) = Неопределено Тогда - ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - ЗаголовокОшибки + + ВызватьИсключение ЗаголовокОшибки + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Тип владельца прав ""%1"" |не указан в определяемом типе ""Владелец настроек прав"".'"), Строка(ТипСсылки)); @@ -797,8 +794,7 @@ ИЛИ ТипыПодпискиЗаписатьНаборыЗначенийДоступа.Получить(ТипОбъекта) <> Неопределено) И ОпределяемыйТипЗначенийДоступа.Получить(ТипСсылки) = Неопределено Тогда - ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - ЗаголовокОшибки + + ВызватьИсключение ЗаголовокОшибки + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Тип владельца прав ""%1"" |не указан в определяемом типе ""Значение доступа"", |но используется для заполнения наборов значений доступа, @@ -811,8 +807,7 @@ КонецЕсли; Если СвойстваВидовДоступа.ПоТипамЗначений.Получить(ТипСсылки) <> Неопределено Тогда - ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - ЗаголовокОшибки + + ВызватьИсключение ЗаголовокОшибки + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Тип владельца прав ""%1"" |не может использоваться, как тип значений доступа, |но обнаружен в описании вида доступа ""%2"".'"), @@ -821,8 +816,7 @@ КонецЕсли; Если СвойстваВидовДоступа.ПоТипамГруппИЗначений.Получить(ТипСсылки) <> Неопределено Тогда - ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - ЗаголовокОшибки + + ВызватьИсключение ЗаголовокОшибки + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Тип владельца прав ""%1"" |не может использоваться, как тип групп значений доступа, |но обнаружен в описании вида доступа ""%2"".'"), @@ -830,11 +824,10 @@ СвойстваВидовДоступа.ПоТипамЗначений.Получить(ТипСсылки).Имя); КонецЕсли; - Если ТипыПодпискиОбновитьГруппыЗначенийДоступа.Получить(ТипОбъекта) = Неопределено Тогда - ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - ЗаголовокОшибки + + Если ТипыПодпискиОбновитьГруппыВладельцевНастроекПрав.Получить(ТипОбъекта) = Неопределено Тогда + ВызватьИсключение ЗаголовокОшибки + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Тип владельца прав ""%1"" - |не указан в подписке на событие ""Обновить группы значений доступа"".'"), + |не указан в определяемом типе ""Владелец настроек прав объект"".'"), Строка(ТипОбъекта)); КонецЕсли; @@ -854,8 +847,7 @@ КонецЕсли; Если ПраваВладельца.Получить(ВозможноеПраво.Имя) <> Неопределено Тогда - ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - ЗаголовокОшибки + + ВызватьИсключение ЗаголовокОшибки + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Для владельца прав ""%1"" |повторно определено право ""%2"".'"), ВозможноеПраво.ВладелецПрав, @@ -865,11 +857,9 @@ // Преобразования списков требуемых прав в массивы. Разделитель = "|"; Для Индекс = 0 По ВозможноеПраво.ТребуемыеПрава.Количество()-1 Цикл - Если Найти(ВозможноеПраво.ТребуемыеПрава[Индекс], Разделитель) > 0 Тогда - ВозможноеПраво.ТребуемыеПрава[Индекс] = - СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок( - ВозможноеПраво.ТребуемыеПрава[Индекс], - Разделитель); + Если СтрНайти(ВозможноеПраво.ТребуемыеПрава[Индекс], Разделитель) > 0 Тогда + ВозможноеПраво.ТребуемыеПрава[Индекс] = СтрРазделить( + ВозможноеПраво.ТребуемыеПрава[Индекс], Разделитель, Ложь); КонецЕсли; КонецЦикла; @@ -944,38 +934,37 @@ Если ВозможноеПраво[Свойство].Количество() <> 1 Тогда Если Свойство = "ЧтениеВТаблицах" Тогда - ОписаниеОшибки = НСтр("ru = 'Для владельца прав ""%1"" - |для права ""%2"" в таблицах для чтения указан символ ""*"". - |В этом случае отдельных таблиц указывать не нужно.'") + ОписаниеОшибки = + НСтр("ru = 'Для владельца прав ""%1"" + |для права ""%2"" в таблицах для чтения указан символ ""*"". + |В этом случае отдельных таблиц указывать не нужно.'") Иначе - ОписаниеОшибки = НСтр("ru = 'Для владельца прав ""%1"" - |для права ""%2"" в таблицах для изменения указан символ ""*"". - |В этом случае отдельных таблиц указывать не нужно.'") + ОписаниеОшибки = + НСтр("ru = 'Для владельца прав ""%1"" + |для права ""%2"" в таблицах для изменения указан символ ""*"". + |В этом случае отдельных таблиц указывать не нужно.'") КонецЕсли; - ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - ЗаголовокОшибки + ОписаниеОшибки, - ДополнительныеПараметры.ВладелецПрав, - ВозможноеПраво.Имя); + ВызватьИсключение ЗаголовокОшибки + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + ОписаниеОшибки, ДополнительныеПараметры.ВладелецПрав, ВозможноеПраво.Имя); КонецЕсли; Если ЗначениеЗаполнено(ОбщиеПрава[Свойство]) Тогда Если Свойство = "ЧтениеВТаблицах" Тогда - ОписаниеОшибки = НСтр("ru = 'Для владельца прав ""%1"" - |для права ""%2"" в таблицах для чтения указан символ ""*"". - |Однако символ ""*"" уже указан в таблицах для чтения для права ""%3"".'") + ОписаниеОшибки = + НСтр("ru = 'Для владельца прав ""%1"" + |для права ""%2"" в таблицах для чтения указан символ ""*"". + |Однако символ ""*"" уже указан в таблицах для чтения для права ""%3"".'") Иначе - ОписаниеОшибки = НСтр("ru = 'Для владельца прав ""%1"" - |для права ""%2"" в таблицах для изменения указан символ ""*"". - |Однако символ ""*"" уже указан в таблицах для изменения для права ""%3"".'") + ОписаниеОшибки = + НСтр("ru = 'Для владельца прав ""%1"" + |для права ""%2"" в таблицах для изменения указан символ ""*"". + |Однако символ ""*"" уже указан в таблицах для изменения для права ""%3"".'") КонецЕсли; - ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - ЗаголовокОшибки + ОписаниеОшибки, - ДополнительныеПараметры.ВладелецПрав, - ВозможноеПраво.Имя, - ОбщиеПрава[Свойство]); + ВызватьИсключение ЗаголовокОшибки + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ОписаниеОшибки, + ДополнительныеПараметры.ВладелецПрав, ВозможноеПраво.Имя, ОбщиеПрава[Свойство]); Иначе ОбщиеПрава[Свойство] = ВозможноеПраво.Имя; КонецЕсли; @@ -989,11 +978,8 @@ |Однако это не имеет смысла, т.к. право Чтение может зависеть только от права Чтение. |Имеет смысл использовать только символ ""*"".'"); - ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - ЗаголовокОшибки + ОписаниеОшибки, - ДополнительныеПараметры.ВладелецПрав, - ВозможноеПраво.Имя, - Значение); + ВызватьИсключение ЗаголовокОшибки + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ОписаниеОшибки, + ДополнительныеПараметры.ВладелецПрав, ВозможноеПраво.Имя, Значение); ИначеЕсли Метаданные.НайтиПоПолномуИмени(Значение) = Неопределено Тогда @@ -1005,11 +991,8 @@ |для права ""%2"" не найдена таблица для изменения ""%3"".'") КонецЕсли; - ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - ЗаголовокОшибки + ОписаниеОшибки, - ДополнительныеПараметры.ВладелецПрав, - ВозможноеПраво.Имя, - Значение); + ВызватьИсключение ЗаголовокОшибки + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ОписаниеОшибки, + ДополнительныеПараметры.ВладелецПрав, ВозможноеПраво.Имя, Значение); Иначе ИдентификаторТаблицы = ОбщегоНазначения.ИдентификаторОбъектаМетаданных(Значение); Массив.Добавить(ИдентификаторТаблицы); diff --git a/SSL/src/InformationRegisters/НастройкиТранспортаОбмена/Forms/НастройкаПодключенияКСервису/Form.form b/SSL/src/InformationRegisters/НастройкиТранспортаОбмена/Forms/НастройкаПодключенияКСервису/Form.form index 2e85c4989..620e5d4d7 100644 --- a/SSL/src/InformationRegisters/НастройкиТранспортаОбмена/Forms/НастройкаПодключенияКСервису/Form.form +++ b/SSL/src/InformationRegisters/НастройкиТранспортаОбмена/Forms/НастройкаПодключенияКСервису/Form.form @@ -5,7 +5,7 @@ Настройка подключения к приложению в Интернете - Группа2 + ГруппаПользовательИПароль 14 Пользователь @@ -57,7 +57,7 @@ - Группа1 + ГруппаПароль 9 WSПароль @@ -68,12 +68,16 @@ true - Запись.WSПароль + WSПароль ru Пароль пользователя приложения в Интернете + + OnChange + WSПарольПриИзменении + WSПарольExtendedTooltip 28 @@ -139,8 +143,16 @@ true + + <key>ru</key> + <value>Группа пароль</value> + + + ru + Группа пароль + - Группа1ExtendedTooltip + ГруппаПарольРасширеннаяПодсказка 27 Label true @@ -159,18 +171,22 @@ - Группа3 + ГруппаИнформация 15 - Декорация4 + ДекорацияИконка 16 + + <key>ru</key> + <value>Декорация иконка</value> + true true true - Декорация4ExtendedTooltip + ДекорацияИконкаРасширеннаяПодсказка 31 Label true @@ -180,7 +196,7 @@ - Декорация4КонтекстноеМеню + ДекорацияИконкаКонтекстноеМеню 17 true @@ -195,7 +211,7 @@ - Декорация3 + ДекорацияТекст 18 <key>ru</key> @@ -210,7 +226,7 @@ <common>true</common> </userVisible> <extendedTooltip> - <name>Декорация3ExtendedTooltip</name> + <name>ДекорацияТекстРасширеннаяПодсказка</name> <id>32</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> @@ -220,7 +236,7 @@ </extInfo> </extendedTooltip> <contextMenu> - <name>Декорация3КонтекстноеМеню</name> + <name>ДекорацияТекстКонтекстноеМеню</name> <id>19</id> <autoFill>true</autoFill> </contextMenu> @@ -239,8 +255,16 @@ <userVisible> <common>true</common> </userVisible> + <title> + <key>ru</key> + <value>Группа информация</value> + + + ru + Группа информация + - Группа3ExtendedTooltip + ГруппаИнформацияРасширеннаяПодсказка 30 Label true @@ -267,8 +291,12 @@ ru Имя и пароль пользователя приложения в Интернете + + ru + Группа пользователь и пароль + - Группа2ExtendedTooltip + ГруппаПользовательИПарольРасширеннаяПодсказка 25 Label true @@ -402,7 +430,6 @@ Vertical true true - UseIfNecessary auto true @@ -472,6 +499,43 @@ true + + WSПароль + + <key>ru</key> + <value>Пароль</value> + + 5 + + String + + 50 + + + + true + + + true + + + + WSПарольИзменен + + <key>ru</key> + <value>WSПароль изменен</value> + + 6 + + Boolean + + + true + + + true + + ЗабылиПароль @@ -491,7 +555,7 @@ <name>ЗабылиПароль</name> </handler> </action> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <formCommands> @@ -513,7 +577,7 @@ <name>ПараметрыДоступаВИнтернет</name> </handler> </action> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <commandInterface> diff --git a/SSL/src/InformationRegisters/НастройкиТранспортаОбмена/Forms/НастройкаПодключенияКСервису/Module.bsl b/SSL/src/InformationRegisters/НастройкиТранспортаОбмена/Forms/НастройкаПодключенияКСервису/Module.bsl index d02657cbf..045ce85fe 100644 --- a/SSL/src/InformationRegisters/НастройкиТранспортаОбмена/Forms/НастройкаПодключенияКСервису/Module.bsl +++ b/SSL/src/InformationRegisters/НастройкиТранспортаОбмена/Forms/НастройкаПодключенияКСервису/Module.bsl @@ -35,6 +35,13 @@ Элементы.ЗабылиПароль.Видимость = Не ПустаяСтрока(АдресДляВосстановленияПароляУчетнойЗаписи); + Если ЗначениеЗаполнено(Запись.Узел) Тогда + УстановитьПривилегированныйРежим(Истина); + Пароль = ОбщегоНазначения.ПрочитатьДанныеИзБезопасногоХранилища(Запись.Узел, "WSПароль", Истина); + УстановитьПривилегированныйРежим(Ложь); + WSПароль = ?(ЗначениеЗаполнено(Пароль), ЭтотОбъект.УникальныйИдентификатор, ""); + КонецЕсли; + КонецПроцедуры &НаКлиенте @@ -61,6 +68,16 @@ КонецПроцедуры + +#КонецОбласти + +#Область ОбработчикиСобытийЭлементовШапкиФормы + +&НаКлиенте +Процедура WSПарольПриИзменении(Элемент) + WSПарольИзменен = Истина; +КонецПроцедуры + #КонецОбласти #Область ОбработчикиКомандФормы @@ -102,9 +119,18 @@ ПараметрыПодключения = ОбменДаннымиСервер.СтруктураПараметровWS(); ЗаполнитьЗначенияСвойств(ПараметрыПодключения, Запись); + Если WSПарольИзменен Тогда + ПараметрыПодключения.WSПароль = WSПароль; + Иначе + ПараметрыПодключения.WSПароль = ОбщегоНазначения.ПрочитатьДанныеИзБезопасногоХранилища(Запись.Узел, "WSПароль", Истина); + КонецЕсли; + СообщениеПользователю = ""; Если Не ОбменДаннымиСервер.ЕстьПодключениеККорреспонденту(Запись.Узел, ПараметрыПодключения, СообщениеПользователю) Тогда - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(СообщениеПользователю,, "Запись.WSПароль",, Отказ); + ОбщегоНазначенияКлиентСервер.СообщитьПользователю(СообщениеПользователю,, "WSПароль",, Отказ); + Иначе + // Проверка подключения прошла успешно, записываем пароль + ОбщегоНазначения.ЗаписатьДанныеВБезопасноеХранилище(Запись.Узел, WSПароль, "WSПароль"); КонецЕсли; КонецПроцедуры diff --git a/SSL/src/InformationRegisters/НастройкиТранспортаОбмена/Forms/ПовторнаяСинхронизацияДанныхПередЗапуском/Form.form b/SSL/src/InformationRegisters/НастройкиТранспортаОбмена/Forms/ПовторнаяСинхронизацияДанныхПередЗапуском/Form.form index 4ff10b32e..2a053b498 100644 --- a/SSL/src/InformationRegisters/НастройкиТранспортаОбмена/Forms/ПовторнаяСинхронизацияДанныхПередЗапуском/Form.form +++ b/SSL/src/InformationRegisters/НастройкиТранспортаОбмена/Forms/ПовторнаяСинхронизацияДанныхПередЗапуском/Form.form @@ -991,7 +991,7 @@ <name>СинхронизироватьИПродолжить</name> </handler> </action> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <formCommands> @@ -1013,7 +1013,7 @@ <name>ЗавершитьРаботу</name> </handler> </action> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <formCommands> @@ -1035,7 +1035,7 @@ <name>НеСинхронизироватьИПродолжить</name> </handler> </action> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <formCommands> @@ -1057,7 +1057,7 @@ <name>ПараметрыПодключения</name> </handler> </action> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <formCommands> @@ -1074,7 +1074,7 @@ <use> <common>true</common> </use> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <parameters> diff --git a/SSL/src/InformationRegisters/НастройкиТранспортаОбмена/Forms/ПовторнаяСинхронизацияДанныхПередЗапуском/Module.bsl b/SSL/src/InformationRegisters/НастройкиТранспортаОбмена/Forms/ПовторнаяСинхронизацияДанныхПередЗапуском/Module.bsl index 6a0037ae3..89535c68c 100644 --- a/SSL/src/InformationRegisters/НастройкиТранспортаОбмена/Forms/ПовторнаяСинхронизацияДанныхПередЗапуском/Module.bsl +++ b/SSL/src/InformationRegisters/НастройкиТранспортаОбмена/Forms/ПовторнаяСинхронизацияДанныхПередЗапуском/Module.bsl @@ -160,7 +160,7 @@ ОбменДаннымиСервер.УстановитьРежимЗагрузкиСообщенияОбменаДаннымиПередЗапуском("ЗагрузкаРазрешена", Ложь); // Если сообщение загружено успешно, тогда повторная загрузка более не требуется. - Если Константы.ЗагрузитьСообщениеОбменаДанными.Получить() = Истина Тогда + Если Константы.ЗагрузитьСообщениеОбменаДанными.Получить() Тогда Константы.ЗагрузитьСообщениеОбменаДанными.Установить(Ложь); КонецЕсли; Константы.ПовторитьЗагрузкуСообщенияОбменаДаннымиПередЗапуском.Установить(Ложь); @@ -170,10 +170,13 @@ Исключение // Если выгрузка не удалась все равно можно продолжить запуск и // сделать выгрузку в режиме 1С:Предприятия. + КлючСообщенияЖурналаРегистрации = ОбменДаннымиСервер.СобытиеЖурналаРегистрацииОбменДанными(); + ЗаписьЖурналаРегистрации(КлючСообщенияЖурналаРегистрации, + УровеньЖурналаРегистрации.Ошибка,,, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); КонецПопытки; ИначеЕсли КонфигурацияИзменена() Тогда - Если Константы.ЗагрузитьСообщениеОбменаДанными.Получить() = Ложь Тогда + Если НЕ Константы.ЗагрузитьСообщениеОбменаДанными.Получить() Тогда Константы.ЗагрузитьСообщениеОбменаДанными.Установить(Истина); КонецЕсли; ТекстПредупреждения = НСтр("ru = 'Из главного узла получены изменения, которые нужно применить. @@ -193,13 +196,14 @@ КонецПроцедуры +&НаСервере Процедура ВыгрузитьСообщениеПослеОбновленияИнформационнойБазы() // После успешной загрузки и обновления ИБ режим повтора можно отключить. ОбменДаннымиСервер.ОтключитьПовторениеЗагрузкиСообщенияОбменаДаннымиПередЗапуском(); Попытка - Если ПолучитьФункциональнуюОпцию("ИспользоватьСинхронизациюДанных") = Истина Тогда + Если ПолучитьФункциональнуюОпцию("ИспользоватьСинхронизациюДанных") Тогда УзелИнформационнойБазы = ОбменДаннымиСервер.ГлавныйУзел(); @@ -223,8 +227,17 @@ Если ВыполнитьВыгрузку Тогда ПараметрыАутентификации = ?(ЭтоАвтономноеРабочееМесто, Новый Структура("ИспользоватьТекущегоПользователя, Пароль", Истина, Пароль), Неопределено); - // только выгрузка - ОбменДаннымиСервер.ВыполнитьОбменДаннымиДляУзлаИнформационнойБазы(Ложь, УзелИнформационнойБазы, Ложь, Истина, ВидТранспорта,,,,, ПараметрыАутентификации); + + // Только выгрузка. + Отказ = Ложь; + + ПараметрыОбмена = ОбменДаннымиСервер.ПараметрыОбмена(); + ПараметрыОбмена.ВидТранспортаСообщенийОбмена = ВидТранспорта; + ПараметрыОбмена.ВыполнятьЗагрузку = Ложь; + ПараметрыОбмена.ВыполнятьВыгрузку = Истина; + ПараметрыОбмена.ПараметрыАутентификации = ПараметрыАутентификации; + + ОбменДаннымиСервер.ВыполнитьОбменДаннымиДляУзлаИнформационнойБазы(УзелИнформационнойБазы, ПараметрыОбмена, Отказ); КонецЕсли; @@ -262,7 +275,7 @@ Возврат; КонецЕсли; - Если ПолучитьФункциональнуюОпцию("ИспользоватьСинхронизациюДанных") = Истина Тогда + Если ПолучитьФункциональнуюОпцию("ИспользоватьСинхронизациюДанных") Тогда Если УзелИнформационнойБазы <> Неопределено Тогда @@ -279,9 +292,25 @@ ПараметрыАутентификации = ?(ЭтоАвтономноеРабочееМесто, Новый Структура("ИспользоватьТекущегоПользователя, Пароль", Истина, Пароль), Неопределено); - ОбменДаннымиСервер.ВыполнитьОбменДаннымиДляУзлаИнформационнойБазы(ЕстьОшибки, УзелИнформационнойБазы, Истина, Ложь, ВидТранспорта, - // только загрузка - ДлительнаяОперация, ИдентификаторОперации, ИдентификаторФайла, ДлительнаяОперацияРазрешена, ПараметрыАутентификации); + // Только загрузка. + ПараметрыОбмена = ОбменДаннымиСервер.ПараметрыОбмена(); + ПараметрыОбмена.ВидТранспортаСообщенийОбмена = ВидТранспорта; + ПараметрыОбмена.ВыполнятьЗагрузку = Истина; + ПараметрыОбмена.ВыполнятьВыгрузку = Ложь; + + ПараметрыОбмена.ДлительнаяОперацияРазрешена = ДлительнаяОперацияРазрешена; + ПараметрыОбмена.ДлительнаяОперация = ДлительнаяОперация; + ПараметрыОбмена.ИдентификаторОперации = ИдентификаторОперации; + ПараметрыОбмена.ИдентификаторФайла = ИдентификаторФайла; + ПараметрыОбмена.ПараметрыАутентификации = ПараметрыАутентификации; + + ОбменДаннымиСервер.ВыполнитьОбменДаннымиДляУзлаИнформационнойБазы(УзелИнформационнойБазы, ПараметрыОбмена, ЕстьОшибки); + + ДлительнаяОперацияРазрешена = ПараметрыОбмена.ДлительнаяОперацияРазрешена; + ДлительнаяОперация = ПараметрыОбмена.ДлительнаяОперация; + ИдентификаторОперации = ПараметрыОбмена.ИдентификаторОперации; + ИдентификаторФайла = ПараметрыОбмена.ИдентификаторФайла; + ПараметрыАутентификации = ПараметрыОбмена.ПараметрыАутентификации; КонецЕсли; @@ -318,16 +347,16 @@ ОбменДаннымиСервер.УстановитьРежимЗагрузкиСообщенияОбменаДаннымиПередЗапуском("ЗагрузкаРазрешена", Ложь); - Если Константы.ЗагрузитьСообщениеОбменаДанными.Получить() = Ложь Тогда + Если НЕ Константы.ЗагрузитьСообщениеОбменаДанными.Получить() Тогда Константы.ЗагрузитьСообщениеОбменаДанными.Установить(Истина); КонецЕсли; ОбменДаннымиСервер.УстановитьРежимЗагрузкиСообщенияОбменаДаннымиПередЗапуском( - "ПропуститьЗагрузкуИдентификаторовОбъектовМетаданныхПередЗапуском", Истина); + "ПропуститьЗагрузкуПриоритетныхДанныхПередЗапуском", Истина); ИначеЕсли КонфигурацияИзменена() Тогда - Если Константы.ЗагрузитьСообщениеОбменаДанными.Получить() = Ложь Тогда + Если НЕ Константы.ЗагрузитьСообщениеОбменаДанными.Получить() Тогда Константы.ЗагрузитьСообщениеОбменаДанными.Установить(Истина); КонецЕсли; ТекстПредупреждения = НСтр("ru = 'Из главного узла получены изменения, которые нужно применить. @@ -350,7 +379,7 @@ Процедура ЗагрузитьСообщениеОбменаДаннымиСОбновлением() Попытка - ПередПроверкойИдентификаторовОбъектовМетаданныхВПодчиненномУзлеРИБ(); + ЗагрузитьПриоритетныеДанныеВПодчиненныйУзелРИБ(); Исключение ЗаписьЖурналаРегистрации(ОбменДаннымиСервер.СобытиеЖурналаРегистрацииОбменДанными(), УровеньЖурналаРегистрации.Ошибка,,, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); @@ -362,7 +391,7 @@ КонецПроцедуры &НаСервере -Процедура ПередПроверкойИдентификаторовОбъектовМетаданныхВПодчиненномУзлеРИБ() +Процедура ЗагрузитьПриоритетныеДанныеВПодчиненныйУзелРИБ() Если ОбменДаннымиВызовСервера.РежимЗагрузкиСообщенияОбменаДаннымиПередЗапуском( "ПропуститьЗагрузкуСообщенияОбменаДаннымиПередЗапуском") Тогда @@ -370,7 +399,7 @@ КонецЕсли; Если ОбменДаннымиВызовСервера.РежимЗагрузкиСообщенияОбменаДаннымиПередЗапуском( - "ПропуститьЗагрузкуИдентификаторовОбъектовМетаданныхПередЗапуском") Тогда + "ПропуститьЗагрузкуПриоритетныхДанныхПередЗапуском") Тогда Возврат; КонецЕсли; @@ -380,7 +409,7 @@ ПроверитьИспользованиеСинхронизацииДанных(); - Если ПолучитьФункциональнуюОпцию("ИспользоватьСинхронизациюДанных") = Истина Тогда + Если ПолучитьФункциональнуюОпцию("ИспользоватьСинхронизациюДанных") Тогда УзелИнформационнойБазы = ОбменДаннымиСервер.ГлавныйУзел(); @@ -393,8 +422,25 @@ ПараметрыАутентификации = ?(ЭтоАвтономноеРабочееМесто, Новый Структура("ИспользоватьТекущегоПользователя, Пароль", Истина, Пароль), Неопределено); // Загрузка только параметров работы программы. - ОбменДаннымиСервер.ВыполнитьОбменДаннымиДляУзлаИнформационнойБазы(ЕстьОшибки, УзелИнформационнойБазы, Истина, - Ложь, ВидТранспорта, ДлительнаяОперация, ИдентификаторОперации, ИдентификаторФайла, ДлительнаяОперацияРазрешена, ПараметрыАутентификации, Истина); + ПараметрыОбмена = ОбменДаннымиСервер.ПараметрыОбмена(); + ПараметрыОбмена.ВидТранспортаСообщенийОбмена = ВидТранспорта; + ПараметрыОбмена.ВыполнятьЗагрузку = Истина; + ПараметрыОбмена.ВыполнятьВыгрузку = Ложь; + ПараметрыОбмена.ТолькоПараметры = Истина; + + ПараметрыОбмена.ДлительнаяОперацияРазрешена = ДлительнаяОперацияРазрешена; + ПараметрыОбмена.ДлительнаяОперация = ДлительнаяОперация; + ПараметрыОбмена.ИдентификаторОперации = ИдентификаторОперации; + ПараметрыОбмена.ИдентификаторФайла = ИдентификаторФайла; + ПараметрыОбмена.ПараметрыАутентификации = ПараметрыАутентификации; + + ОбменДаннымиСервер.ВыполнитьОбменДаннымиДляУзлаИнформационнойБазы(УзелИнформационнойБазы, ПараметрыОбмена, ЕстьОшибки); + + ДлительнаяОперацияРазрешена = ПараметрыОбмена.ДлительнаяОперацияРазрешена; + ДлительнаяОперация = ПараметрыОбмена.ДлительнаяОперация; + ИдентификаторОперации = ПараметрыОбмена.ИдентификаторОперации; + ИдентификаторФайла = ПараметрыОбмена.ИдентификаторФайла; + ПараметрыАутентификации = ПараметрыОбмена.ПараметрыАутентификации; КонецЕсли; @@ -411,7 +457,7 @@ УстановитьПривилегированныйРежим(Истина); Если НЕ ОбновлениеИнформационнойБазы.НеобходимоОбновлениеИнформационнойБазы() Тогда - Если Константы.ЗагрузитьСообщениеОбменаДанными.Получить() = Истина Тогда + Если Константы.ЗагрузитьСообщениеОбменаДанными.Получить() Тогда Константы.ЗагрузитьСообщениеОбменаДанными.Установить(Ложь); ОбменДаннымиСервер.ОчиститьСообщениеОбменаДаннымиИзГлавногоУзла(); КонецЕсли; @@ -527,7 +573,7 @@ &НаСервере Процедура ПроверитьИспользованиеСинхронизацииДанных() - Если ПолучитьФункциональнуюОпцию("ИспользоватьСинхронизациюДанных") = Ложь Тогда + Если НЕ ПолучитьФункциональнуюОпцию("ИспользоватьСинхронизациюДанных") Тогда Если ОбщегоНазначенияПовтИсп.РазделениеВключено() Тогда @@ -582,8 +628,7 @@ Процедура ВыполнитьОбменДаннымиДляУзлаИнформационнойБазыЗавершениеДлительнойОперации( Знач УзелИнформационнойБазы, Знач ИдентификаторФайла, - Знач ДатаНачалаОперации - ) + Знач ДатаНачалаОперации) ОбменДаннымиСервер.ПроверитьВозможностьВыполненияОбменов(); @@ -611,6 +656,8 @@ Попытка УдалитьФайлы(ФайлСообщенияОбмена); Исключение + ЗаписьЖурналаРегистрации(ОбменДаннымиСервер.СобытиеЖурналаРегистрацииОбменДанными(), + УровеньЖурналаРегистрации.Ошибка,,, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); КонецПопытки; Попытка @@ -618,9 +665,15 @@ ТолькоПараметры = (СтатусОбновления = "ОбновлениеИнформационнойБазы"); ВидТранспорта = РегистрыСведений.НастройкиТранспортаОбмена.ВидТранспортаСообщенийОбменаПоУмолчанию(УзелИнформационнойБазы); - ОбменДаннымиСервер.ВыполнитьОбменДаннымиДляУзлаИнформационнойБазы(ЕстьОшибки, УзелИнформационнойБазы, - Истина, Ложь, ВидТранспорта,,,,, ПараметрыАутентификации, ТолькоПараметры); - + ПараметрыОбмена = ОбменДаннымиСервер.ПараметрыОбмена(); + ПараметрыОбмена.ВидТранспортаСообщенийОбмена = ВидТранспорта; + ПараметрыОбмена.ВыполнятьЗагрузку = Истина; + ПараметрыОбмена.ВыполнятьВыгрузку = Ложь; + ПараметрыОбмена.ТолькоПараметры = ТолькоПараметры; + ПараметрыОбмена.ПараметрыАутентификации = ПараметрыАутентификации; + + ОбменДаннымиСервер.ВыполнитьОбменДаннымиДляУзлаИнформационнойБазы(УзелИнформационнойБазы, ПараметрыОбмена, ЕстьОшибки); + Исключение ЗаписьЖурналаРегистрации(ОбменДаннымиСервер.СобытиеЖурналаРегистрацииОбменДанными(), diff --git a/SSL/src/InformationRegisters/НастройкиТранспортаОбмена/Forms/ФормаЗаписи/Form.form b/SSL/src/InformationRegisters/НастройкиТранспортаОбмена/Forms/ФормаЗаписи/Form.form index c953be83a..bde4264a2 100644 --- a/SSL/src/InformationRegisters/НастройкиТранспортаОбмена/Forms/ФормаЗаписи/Form.form +++ b/SSL/src/InformationRegisters/НастройкиТранспортаОбмена/Forms/ФормаЗаписи/Form.form @@ -444,8 +444,12 @@ <common>true</common> </userVisible> <dataPath xsi:type="form:DataPath"> - <segments>Запись.COMПарольПользователя</segments> + <segments>COMПарольПользователя</segments> </dataPath> + <handlers> + <event>OnChange</event> + <name>COMПарольПользователяПриИзменении</name> + </handlers> <extendedTooltip> <name>COMПарольПользователяExtendedTooltip</name> <id>134</id> @@ -470,6 +474,7 @@ <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> <wrap>true</wrap> + <passwordMode>true</passwordMode> <chooseType>true</chooseType> <typeDomainEnabled>true</typeDomainEnabled> <textEdit>true</textEdit> @@ -689,8 +694,12 @@ <common>true</common> </userVisible> <dataPath xsi:type="form:DataPath"> - <segments>Запись.WSПароль</segments> + <segments>WSПароль</segments> </dataPath> + <handlers> + <event>OnChange</event> + <name>WSПарольПриИзменении</name> + </handlers> <extendedTooltip> <name>WSПарольExtendedTooltip</name> <id>143</id> @@ -1021,8 +1030,12 @@ <common>true</common> </userVisible> <dataPath xsi:type="form:DataPath"> - <segments>Запись.ПарольАрхиваСообщенияОбмена</segments> + <segments>ПарольАрхиваСообщенияОбмена</segments> </dataPath> + <handlers> + <event>OnChange</event> + <name>ПарольАрхиваСообщенияОбмена1ПриИзменении</name> + </handlers> <extendedTooltip> <name>ПарольАрхиваСообщенияОбмена1ExtendedTooltip</name> <id>153</id> @@ -1378,8 +1391,12 @@ <common>true</common> </userVisible> <dataPath xsi:type="form:DataPath"> - <segments>Запись.FTPСоединениеПароль</segments> + <segments>FTPСоединениеПароль</segments> </dataPath> + <handlers> + <event>OnChange</event> + <name>FTPСоединениеПарольПриИзменении</name> + </handlers> <extendedTooltip> <name>FTPСоединениеПарольExtendedTooltip</name> <id>160</id> @@ -1653,8 +1670,12 @@ <common>true</common> </userVisible> <dataPath xsi:type="form:DataPath"> - <segments>Запись.ПарольАрхиваСообщенияОбмена</segments> + <segments>ПарольАрхиваСообщенияОбмена</segments> </dataPath> + <handlers> + <event>OnChange</event> + <name>ПарольАрхиваСообщенияОбменаПриИзменении</name> + </handlers> <extendedTooltip> <name>ПарольАрхиваСообщенияОбменаExtendedTooltip</name> <id>169</id> @@ -1995,8 +2016,12 @@ <common>true</common> </userVisible> <dataPath xsi:type="form:DataPath"> - <segments>Запись.ПарольАрхиваСообщенияОбмена</segments> + <segments>ПарольАрхиваСообщенияОбмена</segments> </dataPath> + <handlers> + <event>OnChange</event> + <name>ПарольАрхиваСообщенияОбмена2ПриИзменении</name> + </handlers> <extendedTooltip> <name>ПарольАрхиваСообщенияОбмена2ExtendedTooltip</name> <id>178</id> @@ -2278,7 +2303,6 @@ <autoFillCheck>true</autoFillCheck> <allowFormCustomize>true</allowFormCustomize> <enabled>true</enabled> - <verticalScroll>UseIfNecessary</verticalScroll> <showTitle>auto</showTitle> <showCloseButton>true</showCloseButton> <attributes> @@ -2314,6 +2338,154 @@ <common>true</common> </edit> </attributes> + <attributes> + <name>COMПарольПользователя</name> + <title> + <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ПарольИзменен + + <key>ru</key> + <value>WSПароль изменен</value> + + 7 + + Boolean + + + true + + + true + + + + FTPСоединениеПарольИзменен + + <key>ru</key> + <value>FTPСоединение пароль изменен</value> + + 8 + + Boolean + + + true + + + true + + + + COMПарольПользователяИзменен + + <key>ru</key> + <value>COMПароль пользователя изменен</value> + + 9 + + Boolean + + + true + + + true + + + + ПарольАрхиваСообщенияОбменаИзменен + + <key>ru</key> + <value>Пароль архива сообщения обмена изменен</value> + + 10 + + Boolean + + + true + + + true + + ПроверитьПодключениеFTP @@ -2333,7 +2505,7 @@ <name>ПроверитьПодключениеFTP</name> </handler> </action> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <formCommands> @@ -2355,7 +2527,7 @@ <name>ПроверитьПодключениеFILE</name> </handler> </action> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <formCommands> @@ -2377,7 +2549,7 @@ <name>ПроверитьПодключениеEMAIL</name> </handler> </action> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <formCommands> @@ -2399,7 +2571,7 @@ <name>ПроверитьПодключениеCOM</name> </handler> </action> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <formCommands> @@ -2421,7 +2593,7 @@ <name>ПроверитьПодключениеWS</name> </handler> </action> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <formCommands> @@ -2443,7 +2615,7 @@ <name>ПараметрыДоступаВИнтернет</name> </handler> </action> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <formCommands> @@ -2469,7 +2641,7 @@ </handler> </action> <representation>Text</representation> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <commandInterface> @@ -2485,5 +2657,9 @@ <event>BeforeWrite</event> <name>ПередЗаписью</name> </handlers> + <handlers> + <event>OnWriteAtServer</event> + <name>ПриЗаписиНаСервере</name> + </handlers> </extInfo> </form:Form> diff --git a/SSL/src/InformationRegisters/НастройкиТранспортаОбмена/Forms/ФормаЗаписи/Module.bsl b/SSL/src/InformationRegisters/НастройкиТранспортаОбмена/Forms/ФормаЗаписи/Module.bsl index 8afab225c..e9eb8b769 100644 --- a/SSL/src/InformationRegisters/НастройкиТранспортаОбмена/Forms/ФормаЗаписи/Module.bsl +++ b/SSL/src/InformationRegisters/НастройкиТранспортаОбмена/Forms/ФормаЗаписи/Module.bsl @@ -37,6 +37,15 @@ Элементы.ПараметрыДоступаВИнтернет1.Видимость = Ложь; КонецЕсли; + Если ЗначениеЗаполнено(Запись.Узел) Тогда + УстановитьПривилегированныйРежим(Истина); + Пароли = ОбщегоНазначения.ПрочитатьДанныеИзБезопасногоХранилища(Запись.Узел, "COMПарольПользователя, FTPСоединениеПароль, WSПароль, ПарольАрхиваСообщенияОбмена", Истина); + УстановитьПривилегированныйРежим(Ложь); + COMПарольПользователя = ?(ЗначениеЗаполнено(Пароли.COMПарольПользователя), ЭтотОбъект.УникальныйИдентификатор, ""); + FTPСоединениеПароль = ?(ЗначениеЗаполнено(Пароли.FTPСоединениеПароль), ЭтотОбъект.УникальныйИдентификатор, ""); + WSПароль = ?(ЗначениеЗаполнено(Пароли.WSПароль), ЭтотОбъект.УникальныйИдентификатор, ""); + ПарольАрхиваСообщенияОбмена = ?(ЗначениеЗаполнено(Пароли.ПарольАрхиваСообщенияОбмена), ЭтотОбъект.УникальныйИдентификатор, ""); + КонецЕсли; КонецПроцедуры &НаКлиенте @@ -73,6 +82,24 @@ КонецПроцедуры +&НаСервере +Процедура ПриЗаписиНаСервере(Отказ, ТекущийОбъект, ПараметрыЗаписи) + УстановитьПривилегированныйРежим(Истина); + Если COMПарольПользователяИзменен Тогда + ОбщегоНазначения.ЗаписатьДанныеВБезопасноеХранилище(ТекущийОбъект.Узел, COMПарольПользователя, "COMПарольПользователя") + КонецЕсли; + Если FTPСоединениеПарольИзменен Тогда + ОбщегоНазначения.ЗаписатьДанныеВБезопасноеХранилище(ТекущийОбъект.Узел, FTPСоединениеПароль, "FTPСоединениеПароль") + КонецЕсли; + Если WSПарольИзменен Тогда + ОбщегоНазначения.ЗаписатьДанныеВБезопасноеХранилище(ТекущийОбъект.Узел, WSПароль, "WSПароль") + КонецЕсли; + Если ПарольАрхиваСообщенияОбменаИзменен Тогда + ОбщегоНазначения.ЗаписатьДанныеВБезопасноеХранилище(ТекущийОбъект.Узел, ПарольАрхиваСообщенияОбмена, "ПарольАрхиваСообщенияОбмена") + КонецЕсли; + УстановитьПривилегированныйРежим(Ложь); +КонецПроцедуры + #КонецОбласти #Область ОбработчикиСобытийЭлементовШапкиФормы @@ -119,6 +146,36 @@ КонецПроцедуры +&НаКлиенте +Процедура WSПарольПриИзменении(Элемент) + WSПарольИзменен = Истина; +КонецПроцедуры + +&НаКлиенте +Процедура ПарольАрхиваСообщенияОбмена1ПриИзменении(Элемент) + ПарольАрхиваСообщенияОбменаИзменен = Истина; +КонецПроцедуры + +&НаКлиенте +Процедура FTPСоединениеПарольПриИзменении(Элемент) + FTPСоединениеПарольИзменен = Истина; +КонецПроцедуры + +&НаКлиенте +Процедура ПарольАрхиваСообщенияОбменаПриИзменении(Элемент) + ПарольАрхиваСообщенияОбменаИзменен = Истина; +КонецПроцедуры + +&НаКлиенте +Процедура ПарольАрхиваСообщенияОбмена2ПриИзменении(Элемент) + ПарольАрхиваСообщенияОбменаИзменен = Истина; +КонецПроцедуры + +&НаКлиенте +Процедура COMПарольПользователяПриИзменении(Элемент) + COMПарольПользователяИзменен = Истина; +КонецПроцедуры + #КонецОбласти #Область ОбработчикиКомандФормы @@ -182,6 +239,7 @@ КонецПроцедуры + #КонецОбласти #Область СлужебныеПроцедурыИФункции @@ -209,7 +267,21 @@ &НаСервере Процедура ВыполнитьПроверкуУстановкиВнешнегоСоединения(Отказ) - ОбменДаннымиВызовСервера.ВыполнитьПроверкуУстановкиВнешнегоСоединения(Отказ, Запись); + ПараметрыСоединения = Новый Структура; + ПараметрыСоединения.Вставить("COMВариантРаботыИнформационнойБазы", Запись.COMВариантРаботыИнформационнойБазы); + ПараметрыСоединения.Вставить("COMАутентификацияОперационнойСистемы", Запись.COMАутентификацияОперационнойСистемы); + ПараметрыСоединения.Вставить("COMИмяИнформационнойБазыНаСервере1СПредприятия", + Запись.COMИмяИнформационнойБазыНаСервере1СПредприятия); + ПараметрыСоединения.Вставить("COMИмяПользователя", Запись.COMИмяПользователя); + ПараметрыСоединения.Вставить("COMИмяСервера1СПредприятия", Запись.COMИмяСервера1СПредприятия); + ПараметрыСоединения.Вставить("COMКаталогИнформационнойБазы", Запись.COMКаталогИнформационнойБазы); + + УстановитьПривилегированныйРежим(Истина); + ПараметрыСоединения.Вставить("COMПарольПользователя", + ОбщегоНазначения.ПрочитатьДанныеИзБезопасногоХранилища(Запись.Узел, "COMПарольПользователя", Истина)); + УстановитьПривилегированныйРежим(Ложь); + + ОбменДаннымиВызовСервера.ВыполнитьПроверкуУстановкиВнешнегоСоединения(Отказ, ПараметрыСоединения); КонецПроцедуры @@ -219,6 +291,10 @@ ПараметрыПодключения = ОбменДаннымиСервер.СтруктураПараметровWS(); ЗаполнитьЗначенияСвойств(ПараметрыПодключения, Запись); + УстановитьПривилегированныйРежим(Истина); + ПараметрыПодключения.WSПароль = ОбщегоНазначения.ПрочитатьДанныеИзБезопасногоХранилища(Запись.Узел, "WSПароль", Истина); + УстановитьПривилегированныйРежим(Ложь); + СообщениеПользователю = ""; Если Не ОбменДаннымиСервер.ЕстьПодключениеККорреспонденту(Запись.Узел, ПараметрыПодключения, СообщениеПользователю) Тогда ОбщегоНазначенияКлиентСервер.СообщитьПользователю(СообщениеПользователю,,,, Отказ); diff --git a/SSL/src/InformationRegisters/НастройкиТранспортаОбмена/Help/ru.html b/SSL/src/InformationRegisters/НастройкиТранспортаОбмена/Help/ru.html index 60bcc084e..3ffa49a6f 100644 --- a/SSL/src/InformationRegisters/НастройкиТранспортаОбмена/Help/ru.html +++ b/SSL/src/InformationRegisters/НастройкиТранспортаОбмена/Help/ru.html @@ -3,7 +3,7 @@ <p>Параметры подключения также указываются во время настройки синхронизации данных в <a href="DataProcessor.ПомощникСозданияОбменаДанными/Help">Помощнике создания синхронизации данных</a>. Эти настройки выводятся по умолчанию. Их можно изменить.</p> <p>Перейти к настройке <strong>Параметров подключения</strong> можно по соответствующей команде из настройки синхронизации данных. </p> <p>Общими для всех являются следующие параметры:</p> -<ul><li><strong>Подключение по умолчанию</strong> - выберите подключение, которое будет использоваться по умолчанию при выполнении автоматической и интерактивной <a href="CommonForm.ОбменыДанными/Help">синхронизации данных</a>. +<ul><li><strong>Подключение по умолчанию</strong> - выберите подключение, которое будет использоваться по умолчанию при выполнении автоматической и интерактивной <a href="CommonForm.СинхронизацияДанных/Help">синхронизации данных</a>. </li><li><strong>Проверить подключение</strong> - нажмите, для того чтобы программа произвела проверку указанных настроек и попыталась подключиться к другой программе. </li><li><strong>Сжимать отправляемые данные в архив</strong> - включите флажок, для того чтобы ограничить размер отправляемого сообщения. Флажок не предусмотрен для настройки прямого подключения к информационной базе. <ul><li><strong>Пароль архива </strong>- введите пароль для сжатия и распаковки архива сообщения обмена. Подразумевается, что пароль сжатия в программе-источнике и пароль распаковки в программе-приемнике должны быть одинаковыми для пары обменивающихся программ.</li></ul></li></ul><h3>Прямое подключение:</h3> diff --git a/SSL/src/InformationRegisters/НастройкиТранспортаОбмена/ManagerModule.bsl b/SSL/src/InformationRegisters/НастройкиТранспортаОбмена/ManagerModule.bsl index 06c73b992..01191bd30 100644 --- a/SSL/src/InformationRegisters/НастройкиТранспортаОбмена/ManagerModule.bsl +++ b/SSL/src/InformationRegisters/НастройкиТранспортаОбмена/ManagerModule.bsl @@ -1,6 +1,6 @@ #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда -#Область СлужебныеПроцедурыИФункции +#Область СлужебныйПрограммныйИнтерфейс // Процедура добавляет запись в регистр по переданным значениям структуры. Процедура ДобавитьЗапись(СтруктураЗаписи) Экспорт @@ -8,9 +8,31 @@ Если ОбщегоНазначенияПовтИсп.РазделениеВключено() И ОбщегоНазначенияПовтИсп.ДоступноИспользованиеРазделенныхДанных() Тогда - ОбменДаннымиСервер.ДобавитьЗаписьВРегистрСведений(Новый Структура("Корреспондент", СтруктураЗаписи.Узел), "НастройкиТранспортаОбменаОбластиДанных"); + НачатьТранзакцию(); + Попытка + ОбменДаннымиСервер.ДобавитьЗаписьВРегистрСведений(Новый Структура("Корреспондент", СтруктураЗаписи.Узел), "НастройкиТранспортаОбменаОбластиДанных"); + ЗаписатьПароль("FTPСоединениеПароль", "FTPСоединениеПарольОбластейДанных", СтруктураЗаписи); + ЗаписатьПароль("ПарольАрхиваСообщенияОбмена", "ПарольАрхиваСообщенияОбменаОбластейДанных", СтруктураЗаписи); + ЗафиксироватьТранзакцию(); + Исключение + ОтменитьТранзакцию(); + ВызватьИсключение; + КонецПопытки; + Иначе - ОбменДаннымиСервер.ДобавитьЗаписьВРегистрСведений(СтруктураЗаписи, "НастройкиТранспортаОбмена"); + НачатьТранзакцию(); + Попытка + ОбменДаннымиСервер.ДобавитьЗаписьВРегистрСведений(СтруктураЗаписи, "НастройкиТранспортаОбмена"); + ЗаписатьПароль("COMПарольПользователя", "COMПарольПользователя", СтруктураЗаписи); + ЗаписатьПароль("FTPСоединениеПароль", "FTPСоединениеПароль", СтруктураЗаписи); + ЗаписатьПароль("WSПароль", "WSПароль", СтруктураЗаписи); + ЗаписатьПароль("ПарольАрхиваСообщенияОбмена", "ПарольАрхиваСообщенияОбмена", СтруктураЗаписи); + ЗафиксироватьТранзакцию(); + Исключение + ОтменитьТранзакцию(); + ВызватьИсключение; + КонецПопытки; + КонецЕсли; КонецПроцедуры @@ -22,6 +44,51 @@ КонецПроцедуры +// Для внутреннего использования. +// +Функция НастройкиТранспортаWS(Узел, ПараметрыАутентификации = Неопределено) Экспорт + + СтруктураНастроек = ПолучитьСтруктуруНастроек("WS"); + Результат = ПолучитьДанныеРегистраПоСтруктуре(Узел, СтруктураНастроек); + + УстановитьПривилегированныйРежим(Истина); + Результат.Вставить("WSПароль", ОбщегоНазначения.ПрочитатьДанныеИзБезопасногоХранилища(Узел, "WSПароль", Истина)); + УстановитьПривилегированныйРежим(Ложь); + + Если ТипЗнч(ПараметрыАутентификации) = Тип("Структура") Тогда // Инициация обмена пользователем с клиента. + + Если ПараметрыАутентификации.ИспользоватьТекущегоПользователя Тогда + + Результат.WSИмяПользователя = ПользователиИнформационнойБазы.ТекущийПользователь().Имя; + + КонецЕсли; + + Пароль = Неопределено; + + Если ПараметрыАутентификации.Свойство("Пароль", Пароль) + И Пароль <> Неопределено Тогда // Ввели пароль на клиенте + + Результат.WSПароль = Пароль; + + Иначе // Пароль на клиенте не вводили. + + Пароль = ОбменДаннымиСервер.ПарольСинхронизацииДанных(Узел); + + Результат.WSПароль = ?(Пароль = Неопределено, "", Пароль); + + КонецЕсли; + + ИначеЕсли ТипЗнч(ПараметрыАутентификации) = Тип("Строка") Тогда + Результат.WSПароль = ПараметрыАутентификации; + КонецЕсли; + + Возврат Результат; +КонецФункции + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + Процедура ПриЗаполненииРазрешенийНаДоступКВнешнимРесурсам(ЗапросыРазрешений) Экспорт НастройкиТранспорта = СохраненныеНастройкиТранспорта(); @@ -104,6 +171,16 @@ КонецПроцедуры +Процедура ЗаписатьПароль(ИмяПароляВСтруктуре, ИмяПароляПриЗаписи, СтруктураЗаписи) + + Если СтруктураЗаписи.Свойство(ИмяПароляВСтруктуре) Тогда + УстановитьПривилегированныйРежим(Истина); + ОбщегоНазначения.ЗаписатьДанныеВБезопасноеХранилище(СтруктураЗаписи.Узел, СтруктураЗаписи[ИмяПароляВСтруктуре], ИмяПароляПриЗаписи); + УстановитьПривилегированныйРежим(Ложь); + КонецЕсли; + +КонецПроцедуры + //////////////////////////////////////////////////////////////////////////////// // Функции получения значений настроек для узла плана обмена. @@ -130,44 +207,6 @@ КонецФункции -Функция НастройкиТранспортаWS(Узел, ПараметрыАутентификации = Неопределено) Экспорт - - СтруктураНастроек = ПолучитьСтруктуруНастроек("WS"); - - Результат = ПолучитьДанныеРегистраПоСтруктуре(Узел, СтруктураНастроек); - - Если ТипЗнч(ПараметрыАутентификации) = Тип("Структура") Тогда // Инициация обмена пользователем с клиента. - - Если ПараметрыАутентификации.ИспользоватьТекущегоПользователя Тогда - - Результат.WSИмяПользователя = ПользователиИнформационнойБазы.ТекущийПользователь().Имя; - - КонецЕсли; - - Пароль = Неопределено; - - Если ПараметрыАутентификации.Свойство("Пароль", Пароль) - И Пароль <> Неопределено Тогда // Ввели пароль на клиенте - - Результат.WSПароль = Пароль; - - Иначе // Пароль на клиенте не вводили. - - Пароль = ОбменДаннымиСервер.ПарольСинхронизацииДанных(Узел); - - Результат.WSПароль = ?(Пароль = Неопределено, "", Пароль); - - КонецЕсли; - - ИначеЕсли ТипЗнч(ПараметрыАутентификации) = Тип("Строка") Тогда - - Результат.WSПароль = ПараметрыАутентификации; - - КонецЕсли; - - Возврат Результат; -КонецФункции - Функция ВидТранспортаСообщенийОбменаПоУмолчанию(УзелИнформационнойБазы) Экспорт // Возвращаемое значение функции. @@ -231,7 +270,6 @@ ДобавитьЭлементПредставленияНастройки(Результат, "COMКаталогИнформационнойБазы"); ДобавитьЭлементПредставленияНастройки(Результат, "COMАутентификацияОперационнойСистемы"); ДобавитьЭлементПредставленияНастройки(Результат, "COMИмяПользователя"); - ДобавитьЭлементПредставленияНастройки(Результат, "COMПарольПользователя"); ИначеЕсли ВидТранспорта = Перечисления.ВидыТранспортаСообщенийОбмена.FILE Тогда @@ -243,7 +281,6 @@ ДобавитьЭлементПредставленияНастройки(Результат, "FTPСоединениеПуть"); ДобавитьЭлементПредставленияНастройки(Результат, "FTPСоединениеПорт"); ДобавитьЭлементПредставленияНастройки(Результат, "FTPСоединениеПользователь"); - ДобавитьЭлементПредставленияНастройки(Результат, "FTPСоединениеПароль"); ДобавитьЭлементПредставленияНастройки(Результат, "FTPСоединениеМаксимальныйДопустимыйРазмерСообщения"); ДобавитьЭлементПредставленияНастройки(Результат, "FTPСоединениеПассивноеСоединение"); ДобавитьЭлементПредставленияНастройки(Результат, "FTPСжиматьФайлИсходящегоСообщения"); @@ -338,10 +375,10 @@ // Общие настройки для всех видов транспорта. СтруктураНастроек.Вставить("ВидТранспортаСообщенийОбменаПоУмолчанию"); - СтруктураНастроек.Вставить("ПарольАрхиваСообщенияОбмена"); + СписокПаролей = "ПарольАрхиваСообщенияОбмена"; Если ВидТранспортаОбмена = Неопределено Тогда - + СписокПаролей = СписокПаролей + ",FTPСоединениеПароль,WSПароль,COMПарольПользователя"; Для Каждого ВидТранспорта Из Перечисления.ВидыТранспортаСообщенийОбмена Цикл СтруктураНастроекТранспорта = ПолучитьСтруктуруНастроек(ОбщегоНазначения.ИмяЗначенияПеречисления(ВидТранспорта)); @@ -353,14 +390,31 @@ Иначе СтруктураНастроекТранспорта = ПолучитьСтруктуруНастроек(ОбщегоНазначения.ИмяЗначенияПеречисления(ВидТранспортаОбмена)); - СтруктураНастроек = ОбъединитьКоллекции(СтруктураНастроек, СтруктураНастроекТранспорта); + Если ВидТранспортаОбмена = Перечисления.ВидыТранспортаСообщенийОбмена.COM Тогда + СписокПаролей = СписокПаролей + ",COMПарольПользователя"; + ИначеЕсли ВидТранспортаОбмена = Перечисления.ВидыТранспортаСообщенийОбмена.WS Тогда + СписокПаролей = СписокПаролей + ",WSПароль"; + ИначеЕсли ВидТранспортаОбмена = Перечисления.ВидыТранспортаСообщенийОбмена.FTP Тогда + СписокПаролей = СписокПаролей + ",FTPСоединениеПароль"; + КонецЕсли; КонецЕсли; Результат = ПолучитьДанныеРегистраПоСтруктуре(Узел, СтруктураНастроек); Результат.Вставить("ИспользоватьВременныйКаталогДляОтправкиИПриемаСообщений", Истина); + УстановитьПривилегированныйРежим(Истина); + Пароли = ОбщегоНазначения.ПрочитатьДанныеИзБезопасногоХранилища(Узел, СписокПаролей, Истина); + УстановитьПривилегированныйРежим(Ложь); + Если ТипЗнч(Пароли) = Тип("Структура") Тогда + Для каждого КлючИЗначение Из Пароли Цикл + Результат.Вставить(КлючИЗначение.Ключ, КлючИЗначение.Значение); + КонецЦикла; + Иначе + Результат.Вставить("ПарольАрхиваСообщенияОбмена", Пароли); + КонецЕсли; + Возврат Результат; КонецФункции @@ -423,7 +477,7 @@ Для Каждого Ресурс Из МетаданныеРегистра.Ресурсы Цикл - Если Найти(Ресурс.Имя, ПодстрокаПоиска) <> 0 Тогда + Если СтрНайти(Ресурс.Имя, ПодстрокаПоиска) <> 0 Тогда СтруктураНастроекТранспорта.Вставить(Ресурс.Имя, Ресурс.Синоним); diff --git a/SSL/src/InformationRegisters/НастройкиТранспортаОбмена/RecordSetModule.bsl b/SSL/src/InformationRegisters/НастройкиТранспортаОбмена/RecordSetModule.bsl index 0b4e012f8..861af1906 100644 --- a/SSL/src/InformationRegisters/НастройкиТранспортаОбмена/RecordSetModule.bsl +++ b/SSL/src/InformationRegisters/НастройкиТранспортаОбмена/RecordSetModule.bsl @@ -13,27 +13,17 @@ Для Каждого СтрокаНабора Из ЭтотОбъект Цикл - // Сбрасываем значение пароля, если не установлен признак хранения пароля в ИБ. - Если Не СтрокаНабора.WSЗапомнитьПароль Тогда - - СтрокаНабора.WSПароль = ""; - - КонецЕсли; // Удаляем незначащие символы (пробелы) слева и справа для строковых параметров. СокрЛПЗначениеПоля(СтрокаНабора, "COMИмяИнформационнойБазыНаСервере1СПредприятия"); СокрЛПЗначениеПоля(СтрокаНабора, "COMИмяПользователя"); СокрЛПЗначениеПоля(СтрокаНабора, "COMИмяСервера1СПредприятия"); СокрЛПЗначениеПоля(СтрокаНабора, "COMКаталогИнформационнойБазы"); - СокрЛПЗначениеПоля(СтрокаНабора, "COMПарольПользователя"); СокрЛПЗначениеПоля(СтрокаНабора, "FILEКаталогОбменаИнформацией"); - СокрЛПЗначениеПоля(СтрокаНабора, "FTPСоединениеПароль"); СокрЛПЗначениеПоля(СтрокаНабора, "FTPСоединениеПользователь"); СокрЛПЗначениеПоля(СтрокаНабора, "FTPСоединениеПуть"); СокрЛПЗначениеПоля(СтрокаНабора, "WSURLВебСервиса"); СокрЛПЗначениеПоля(СтрокаНабора, "WSИмяПользователя"); - СокрЛПЗначениеПоля(СтрокаНабора, "WSПароль"); - СокрЛПЗначениеПоля(СтрокаНабора, "ПарольАрхиваСообщенияОбмена"); КонецЦикла; diff --git a/SSL/src/InformationRegisters/НастройкиТранспортаОбмена/НастройкиТранспортаОбмена.mdo b/SSL/src/InformationRegisters/НастройкиТранспортаОбмена/НастройкиТранспортаОбмена.mdo index 0bbebdcb0..8439d6252 100644 --- a/SSL/src/InformationRegisters/НастройкиТранспортаОбмена/НастройкиТранспортаОбмена.mdo +++ b/SSL/src/InformationRegisters/НастройкиТранспортаОбмена/НастройкиТранспортаОбмена.mdo @@ -185,28 +185,6 @@ <dataHistory>Use</dataHistory> <fillValue xsi:type="core:StringValue"/> </resources> - <resources uuid="168fce48-2413-45fc-ad21-9b465121d81b"> - <name>COMПарольПользователя</name> - <synonym> - <key>ru</key> - <value>Пароль пользователя</value> - </synonym> - <type> - <types>String</types> - <stringQualifiers> - <length>50</length> - </stringQualifiers> - </type> - <passwordMode>true</passwordMode> - <toolTip> - <key>ru</key> - <value>Пароль пользователя информационной базы</value> - </toolTip> - <minValue xsi:type="core:UndefinedValue"/> - <maxValue xsi:type="core:UndefinedValue"/> - <dataHistory>Use</dataHistory> - <fillValue xsi:type="core:StringValue"/> - </resources> <resources uuid="55b9650e-098b-4d44-9fb5-d525b46f014b"> <name>EMAILМаксимальныйДопустимыйРазмерСообщения</name> <synonym> @@ -349,28 +327,6 @@ <dataHistory>Use</dataHistory> <fillValue xsi:type="core:UndefinedValue"/> </resources> - <resources uuid="d65c8992-aabc-4b67-9893-01862231ebe1"> - <name>FTPСоединениеПароль</name> - <synonym> - <key>ru</key> - <value>Пароль</value> - </synonym> - <type> - <types>String</types> - <stringQualifiers> - <length>50</length> - </stringQualifiers> - </type> - <passwordMode>true</passwordMode> - <toolTip> - <key>ru</key> - <value>Пароль для доступа на FTP-ресурс.</value> - </toolTip> - <minValue xsi:type="core:UndefinedValue"/> - <maxValue xsi:type="core:UndefinedValue"/> - <dataHistory>Use</dataHistory> - <fillValue xsi:type="core:StringValue"/> - </resources> <resources uuid="dc79e5e2-37d1-4f19-9500-15c1d9be10eb"> <name>FTPСоединениеПассивноеСоединение</name> <synonym> @@ -533,28 +489,6 @@ <dataHistory>Use</dataHistory> <fillValue xsi:type="core:UndefinedValue"/> </resources> - <resources uuid="23f70675-6a05-4b50-ad68-c55ddc93e857"> - <name>WSПароль</name> - <synonym> - <key>ru</key> - <value>Пароль</value> - </synonym> - <type> - <types>String</types> - <stringQualifiers> - <length>50</length> - </stringQualifiers> - </type> - <passwordMode>true</passwordMode> - <toolTip> - <key>ru</key> - <value>Пароль пользователя</value> - </toolTip> - <minValue xsi:type="core:UndefinedValue"/> - <maxValue xsi:type="core:UndefinedValue"/> - <dataHistory>Use</dataHistory> - <fillValue xsi:type="core:StringValue"/> - </resources> <resources uuid="4bb7372a-87a9-426e-b09f-fc0110455b10"> <name>ВидТранспортаСообщенийОбменаПоУмолчанию</name> <synonym> @@ -620,11 +554,77 @@ <dataHistory>Use</dataHistory> <fillValue xsi:type="core:UndefinedValue"/> </resources> - <resources uuid="b3aeeb3c-622d-4e0c-8c13-199f0e431a7d"> - <name>ПарольАрхиваСообщенияОбмена</name> + <resources uuid="168fce48-2413-45fc-ad21-9b465121d81b"> + <name>УдалитьCOMПарольПользователя</name> <synonym> <key>ru</key> - <value>Пароль архива</value> + <value>(не используется) Пароль пользователя</value> + </synonym> + <type> + <types>String</types> + <stringQualifiers> + <length>50</length> + </stringQualifiers> + </type> + <passwordMode>true</passwordMode> + <toolTip> + <key>ru</key> + <value>Пароль пользователя информационной базы</value> + </toolTip> + <minValue xsi:type="core:UndefinedValue"/> + <maxValue xsi:type="core:UndefinedValue"/> + <dataHistory>Use</dataHistory> + <fillValue xsi:type="core:StringValue"/> + </resources> + <resources uuid="d65c8992-aabc-4b67-9893-01862231ebe1"> + <name>УдалитьFTPСоединениеПароль</name> + <synonym> + <key>ru</key> + <value>(не используется) Пароль</value> + </synonym> + <type> + <types>String</types> + <stringQualifiers> + <length>50</length> + </stringQualifiers> + </type> + <passwordMode>true</passwordMode> + <toolTip> + <key>ru</key> + <value>Пароль для доступа на FTP-ресурс.</value> + </toolTip> + <minValue xsi:type="core:UndefinedValue"/> + <maxValue xsi:type="core:UndefinedValue"/> + <dataHistory>Use</dataHistory> + <fillValue xsi:type="core:StringValue"/> + </resources> + <resources uuid="23f70675-6a05-4b50-ad68-c55ddc93e857"> + <name>УдалитьWSПароль</name> + <synonym> + <key>ru</key> + <value>(не используется) Пароль</value> + </synonym> + <type> + <types>String</types> + <stringQualifiers> + <length>50</length> + </stringQualifiers> + </type> + <passwordMode>true</passwordMode> + <toolTip> + <key>ru</key> + <value>Пароль пользователя</value> + </toolTip> + <minValue xsi:type="core:UndefinedValue"/> + <maxValue xsi:type="core:UndefinedValue"/> + <dataHistory>Use</dataHistory> + <fillValue xsi:type="core:StringValue"/> + </resources> + <resources uuid="b3aeeb3c-622d-4e0c-8c13-199f0e431a7d"> + <name>УдалитьПарольАрхиваСообщенияОбмена</name> + <synonym> + <key>ru</key> + <value>(не используется) Пароль архива</value> </synonym> <type> <types>String</types> diff --git a/SSL/src/InformationRegisters/НастройкиУчетныхЗаписейЭлектроннойПочты/Commands/Настройки/CommandModule.bsl b/SSL/src/InformationRegisters/НастройкиУчетныхЗаписейЭлектроннойПочты/Commands/Настройки/CommandModule.bsl index 5ea101251..67459bf5b 100644 --- a/SSL/src/InformationRegisters/НастройкиУчетныхЗаписейЭлектроннойПочты/Commands/Настройки/CommandModule.bsl +++ b/SSL/src/InformationRegisters/НастройкиУчетныхЗаписейЭлектроннойПочты/Commands/Настройки/CommandModule.bsl @@ -1,4 +1,6 @@ +#Область ОбработчикиСобытий + &НаКлиенте Процедура ОбработкаКоманды(ПараметрКоманды, ПараметрыВыполненияКоманды) @@ -11,6 +13,10 @@ КонецПроцедуры +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + &НаСервере Функция КлючЗаписи(УчетнаяЗаписьЭлектроннойПочты) @@ -32,3 +38,5 @@ Возврат РегистрыСведений.НастройкиУчетныхЗаписейЭлектроннойПочты.СоздатьКлючЗаписи(ДанныеКлючаЗаписи); КонецФункции + +#КонецОбласти diff --git a/SSL/src/InformationRegisters/НастройкиУчетныхЗаписейЭлектроннойПочты/Forms/ФормаЗаписи/Module.bsl b/SSL/src/InformationRegisters/НастройкиУчетныхЗаписейЭлектроннойПочты/Forms/ФормаЗаписи/Module.bsl index 7bcc094d7..53164ee82 100644 --- a/SSL/src/InformationRegisters/НастройкиУчетныхЗаписейЭлектроннойПочты/Forms/ФормаЗаписи/Module.bsl +++ b/SSL/src/InformationRegisters/НастройкиУчетныхЗаписейЭлектроннойПочты/Forms/ФормаЗаписи/Module.bsl @@ -62,15 +62,15 @@ &НаСервере Процедура ПриЧтенииНаСервере(ТекущийОбъект) - Если ТекущийОбъект.ВключатьПодписьДляНовыхСообщений И - ТекущийОбъект.ФорматПодписиДляНовыхСообщений = Перечисления.СпособыРедактированияЭлектронныхПисем.HTML Тогда + Если ТекущийОбъект.ВключатьПодписьДляНовыхСообщений + И ТекущийОбъект.ФорматПодписиДляНовыхСообщений = Перечисления.СпособыРедактированияЭлектронныхПисем.HTML Тогда НовоеСообщениеФорматированныйДокумент = ТекущийОбъект.ПодписьДляНовыхСообщенийФорматированныйДокумент.Получить(); КонецЕсли; - Если ТекущийОбъект.ВключатьПодписьПриОтветеПересылке И - ТекущийОбъект.ФорматПодписиПриОтветеПересылке = Перечисления.СпособыРедактированияЭлектронныхПисем.HTML Тогда + Если ТекущийОбъект.ВключатьПодписьПриОтветеПересылке + И ТекущийОбъект.ФорматПодписиПриОтветеПересылке = Перечисления.СпособыРедактированияЭлектронныхПисем.HTML Тогда ПриОтветеПересылкеФорматированныйДокумент = ТекущийОбъект.ПодписьПриОтветеПересылкеФорматированныйДокумент.Получить(); @@ -127,16 +127,16 @@ Процедура ФорматПодписиДляНовыхСообщенийПриИзменении(Элемент) Если Запись.ФорматПодписиДляНовыхСообщений = ПредопределенноеЗначение( - "Перечисление.СпособыРедактированияЭлектронныхПисем.HTML") И - Элементы.СтраницыПодписьДляНовыхСообщений.ТекущаяСтраница = Элементы.СтраницаНовоеСообщениеФорматированныйТекст Тогда + "Перечисление.СпособыРедактированияЭлектронныхПисем.HTML") + И Элементы.СтраницыПодписьДляНовыхСообщений.ТекущаяСтраница = Элементы.СтраницаНовоеСообщениеФорматированныйТекст Тогда Возврат; КонецЕсли; Если Запись.ФорматПодписиДляНовыхСообщений = ПредопределенноеЗначение( - "Перечисление.СпособыРедактированияЭлектронныхПисем.ОбычныйТекст") И - Элементы.СтраницыПодписьДляНовыхСообщений.ТекущаяСтраница = Элементы.СтраницаНовоеСообщениеПростойТекст Тогда + "Перечисление.СпособыРедактированияЭлектронныхПисем.ОбычныйТекст") + И Элементы.СтраницыПодписьДляНовыхСообщений.ТекущаяСтраница = Элементы.СтраницаНовоеСообщениеПростойТекст Тогда Возврат; @@ -165,16 +165,16 @@ Процедура ФорматПодписиПриОтветеПересылкеПриИзменении(Элемент) Если Запись.ФорматПодписиПриОтветеПересылке = ПредопределенноеЗначение( - "Перечисление.СпособыРедактированияЭлектронныхПисем.HTML") И - Элементы.СтраницыПодписьПриОтветеПересылке.ТекущаяСтраница = Элементы.СтраницаПриОтветеПересылкеФорматированныйДокумент Тогда + "Перечисление.СпособыРедактированияЭлектронныхПисем.HTML") + И Элементы.СтраницыПодписьПриОтветеПересылке.ТекущаяСтраница = Элементы.СтраницаПриОтветеПересылкеФорматированныйДокумент Тогда Возврат; КонецЕсли; Если Запись.ФорматПодписиПриОтветеПересылке = ПредопределенноеЗначение( - "Перечисление.СпособыРедактированияЭлектронныхПисем.ОбычныйТекст") И - Элементы.СтраницыПодписьПриОтветеПересылке.ТекущаяСтраница = Элементы.СтраницаПриОтветеПересылкеПростойТекст Тогда + "Перечисление.СпособыРедактированияЭлектронныхПисем.ОбычныйТекст") + И Элементы.СтраницыПодписьПриОтветеПересылке.ТекущаяСтраница = Элементы.СтраницаПриОтветеПересылкеПростойТекст Тогда Возврат; diff --git a/SSL/src/InformationRegisters/НепринятыеКОбработкеПочтовымСерверомИсходящиеПисьма/НепринятыеКОбработкеПочтовымСерверомИсходящиеПисьма.mdo b/SSL/src/InformationRegisters/НепринятыеКОбработкеПочтовымСерверомИсходящиеПисьма/НепринятыеКОбработкеПочтовымСерверомИсходящиеПисьма.mdo new file mode 100644 index 000000000..38856b114 --- /dev/null +++ b/SSL/src/InformationRegisters/НепринятыеКОбработкеПочтовымСерверомИсходящиеПисьма/НепринятыеКОбработкеПочтовымСерверомИсходящиеПисьма.mdo @@ -0,0 +1,112 @@ +<?xml version="1.0" encoding="UTF-8"?> +<mdclass:InformationRegister xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:core="http://g5.1c.ru/v8/dt/mcore" xmlns:mdclass="http://g5.1c.ru/v8/dt/metadata/mdclass" uuid="0f2ec7ac-6d3f-4fcf-af3d-b0bfaa187a4b"> + <producedTypes> + <selectionType typeId="c22aa2d4-7781-4d4c-afcf-6c0ae2f0dfe6" valueTypeId="81093e37-d3a9-4153-a862-e32bebd90ebe"/> + <listType typeId="aaa63766-183f-4de9-a635-f1fbd362d621" valueTypeId="5f6d534d-a29f-4efd-9c4d-2b8f72f12642"/> + <managerType typeId="a84bbf3b-9432-4da4-867e-53c95cbbe4a5" valueTypeId="b5750a0d-b3a7-4354-b82f-4a402d1dad44"/> + <recordSetType typeId="9371d1d3-bc55-4606-8265-cc16a2cd4341" valueTypeId="3a17c7df-5bfb-4be7-8cb0-5ca8f7844e42"/> + <recordKeyType typeId="11a43335-a1de-4957-b6c6-6c2a6bb310d3" valueTypeId="61dfeec9-1d21-4571-b4ec-6d94f33f10dd"/> + <recordType typeId="0d7924a8-77e6-42a6-860a-a2faa7e39272" valueTypeId="822c5f5f-e890-4580-bbfa-b35de970a7ef"/> + <recordManagerType typeId="bb704ba9-fd3e-4dae-8cb9-6dffd8453a06" valueTypeId="9a43be8c-f6db-4307-9568-17558681e32c"/> + </producedTypes> + <name>НепринятыеКОбработкеПочтовымСерверомИсходящиеПисьма</name> + <synonym> + <key>ru</key> + <value>Непринятые к обработке почтовым сервером исходящие письма</value> + </synonym> + <editType>InDialog</editType> + <standardAttributes> + <dataHistory>Use</dataHistory> + <name>Active</name> + <fillValue xsi:type="core:UndefinedValue"/> + <fullTextSearch>Use</fullTextSearch> + <minValue xsi:type="core:UndefinedValue"/> + <maxValue xsi:type="core:UndefinedValue"/> + </standardAttributes> + <standardAttributes> + <dataHistory>Use</dataHistory> + <name>LineNumber</name> + <fillValue xsi:type="core:UndefinedValue"/> + <fullTextSearch>Use</fullTextSearch> + <minValue xsi:type="core:UndefinedValue"/> + <maxValue xsi:type="core:UndefinedValue"/> + </standardAttributes> + <standardAttributes> + <dataHistory>Use</dataHistory> + <name>Recorder</name> + <fillValue xsi:type="core:UndefinedValue"/> + <fullTextSearch>Use</fullTextSearch> + <minValue xsi:type="core:UndefinedValue"/> + <maxValue xsi:type="core:UndefinedValue"/> + </standardAttributes> + <standardAttributes> + <dataHistory>Use</dataHistory> + <name>Period</name> + <fillValue xsi:type="core:UndefinedValue"/> + <fillChecking>ShowError</fillChecking> + <fullTextSearch>Use</fullTextSearch> + <minValue xsi:type="core:UndefinedValue"/> + <maxValue xsi:type="core:UndefinedValue"/> + </standardAttributes> + <dataLockControlMode>Managed</dataLockControlMode> + <resources uuid="6d351276-2c04-4198-a3e4-865881c12f5c"> + <name>КоличествоПопыток</name> + <synonym> + <key>ru</key> + <value>Количество попыток</value> + </synonym> + <type> + <types>Number</types> + <numberQualifiers> + <precision>1</precision> + </numberQualifiers> + </type> + <toolTip> + <key>ru</key> + <value>Количество попыток отправки письма. При 5 неудачных попытках отправка приостанавливается.</value> + </toolTip> + <minValue xsi:type="core:UndefinedValue"/> + <maxValue xsi:type="core:UndefinedValue"/> + <fullTextSearch>Use</fullTextSearch> + <dataHistory>Use</dataHistory> + <fillValue xsi:type="core:UndefinedValue"/> + </resources> + <attributes uuid="73b1d2e2-0eeb-45dc-8ca3-3bda594d6823"> + <name>ИнформацияООшибке</name> + <synonym> + <key>ru</key> + <value>Информация о ошибке</value> + </synonym> + <type> + <types>String</types> + <stringQualifiers/> + </type> + <minValue xsi:type="core:UndefinedValue"/> + <maxValue xsi:type="core:UndefinedValue"/> + <fullTextSearch>Use</fullTextSearch> + <dataHistory>Use</dataHistory> + <fillValue xsi:type="core:StringValue"/> + </attributes> + <dimensions uuid="5c4abd61-2f29-499e-a2ca-d133e9eeeaea"> + <name>Письмо</name> + <synonym> + <key>ru</key> + <value>Письмо</value> + </synonym> + <type> + <types>DocumentRef.ЭлектронноеПисьмоИсходящее</types> + </type> + <toolTip> + <key>ru</key> + <value>Электронное письмо, которое было не принято к отправке почтовым сервером</value> + </toolTip> + <minValue xsi:type="core:UndefinedValue"/> + <maxValue xsi:type="core:UndefinedValue"/> + <fullTextSearch>Use</fullTextSearch> + <dataHistory>Use</dataHistory> + <fillFromFillingValue>true</fillFromFillingValue> + <fillValue xsi:type="core:UndefinedValue"/> + <master>true</master> + <mainFilter>true</mainFilter> + </dimensions> +</mdclass:InformationRegister> diff --git a/SSL/src/InformationRegisters/ОбластиДанных/Forms/ФормаСписка/Form.form b/SSL/src/InformationRegisters/ОбластиДанных/Forms/ФормаСписка/Form.form index f75443878..507922096 100644 --- a/SSL/src/InformationRegisters/ОбластиДанных/Forms/ФормаСписка/Form.form +++ b/SSL/src/InformationRegisters/ОбластиДанных/Forms/ФормаСписка/Form.form @@ -487,7 +487,6 @@ <autoFillCheck>true</autoFillCheck> <allowFormCustomize>true</allowFormCustomize> <enabled>true</enabled> - <verticalScroll>UseIfNecessary</verticalScroll> <showTitle>auto</showTitle> <showCloseButton>true</showCloseButton> <attributes> diff --git a/SSL/src/InformationRegisters/ОбластиСтатистики/ManagerModule.bsl b/SSL/src/InformationRegisters/ОбластиСтатистики/ManagerModule.bsl new file mode 100644 index 000000000..3e3a44a96 --- /dev/null +++ b/SSL/src/InformationRegisters/ОбластиСтатистики/ManagerModule.bsl @@ -0,0 +1,114 @@ +#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда + +#Область СлужебныеПроцедурыИФункции + +Функция ПолучитьСсылку(Наименование, СобиратьСтатистикуКонфигурации = Ложь) Экспорт + ХешНаименования = ХешНаименования(Наименование); + + Ссылка = НайтиПоХешу(ХешНаименования); + Если Ссылка = Неопределено Тогда + Ссылка = СоздатьНовый(Наименование, ХешНаименования, СобиратьСтатистикуКонфигурации); + КонецЕсли; + + Возврат Ссылка; +КонецФункции + +Функция СобиратьСтатистикуКонфигурации(Наименование) Экспорт + ХешНаименования = ХешНаименования(Наименование); + + Запрос = Новый Запрос; + Запрос.Текст = " + |ВЫБРАТЬ + | ОбластиСтатистики.СобиратьСтатистикуКонфигурации + |ИЗ + | РегистрСведений.ОбластиСтатистики КАК ОбластиСтатистики + |ГДЕ + | ОбластиСтатистики.ХешНаименования = &ХешНаименования + |"; + Запрос.УстановитьПараметр("ХешНаименования", ХешНаименования); + + Результат = Запрос.Выполнить(); + Если Результат.Пустой() Тогда + СобиратьСтатистикуКонфигурации = Ложь; + Иначе + Выборка = Результат.Выбрать(); + Выборка.Следующий(); + + СобиратьСтатистикуКонфигурации = Выборка.СобиратьСтатистикуКонфигурации; + КонецЕсли; + + Возврат СобиратьСтатистикуКонфигурации +КонецФункции + +Функция ХешНаименования(Наименование) + ХешированиеДанных = Новый ХешированиеДанных(ХешФункция.SHA1); + ХешированиеДанных.Добавить(Наименование); + ХешНаименования = СтрЗаменить(Строка(ХешированиеДанных.ХешСумма), " ", ""); + + Возврат ХешНаименования; +КонецФункции + +Функция НайтиПоХешу(Хеш) + Запрос = Новый Запрос; + Запрос.Текст = " + |ВЫБРАТЬ + | ОбластиСтатистики.ИдентификаторОбласти + |ИЗ + | РегистрСведений.ОбластиСтатистики КАК ОбластиСтатистики + |ГДЕ + | ОбластиСтатистики.ХешНаименования = &ХешНаименования + |"; + Запрос.УстановитьПараметр("ХешНаименования", Хеш); + + Результат = Запрос.Выполнить(); + Если Результат.Пустой() Тогда + Ссылка = Неопределено; + Иначе + Выборка = Результат.Выбрать(); + Выборка.Следующий(); + + Ссылка = Выборка.ИдентификаторОбласти; + КонецЕсли; + + Возврат Ссылка; +КонецФункции + +Функция СоздатьНовый(Наименование, ХешНаименования, СобиратьСтатистикуКонфигурации) + НачатьТранзакцию(); + + Попытка + Блокировка = Новый БлокировкаДанных; + + ЭлементБлокировки = Блокировка.Добавить("РегистрСведений.ОбластиСтатистики"); + ЭлементБлокировки.УстановитьЗначение("ХешНаименования", ХешНаименования); + ЭлементБлокировки.Режим = РежимБлокировкиДанных.Исключительный; + + Блокировка.Заблокировать(); + + Ссылка = НайтиПоХешу(ХешНаименования); + + Если Ссылка = Неопределено Тогда + Ссылка = Новый УникальныйИдентификатор(); + + НаборЗаписей = РегистрыСведений.ОбластиСтатистики.СоздатьНаборЗаписей(); + НаборЗаписей.ОбменДанными.Загрузка = Истина; + НовЗапись = НаборЗаписей.Добавить(); + НовЗапись.ХешНаименования = ХешНаименования; + НовЗапись.ИдентификаторОбласти = Ссылка; + НовЗапись.Наименование = Наименование; + НовЗапись.СобиратьСтатистикуКонфигурации = СобиратьСтатистикуКонфигурации; + НаборЗаписей.Записать(Ложь); + КонецЕсли; + + ЗафиксироватьТранзакцию(); + Исключение + ОтменитьТранзакцию(); + ВызватьИсключение; + КонецПопытки; + + Возврат Ссылка; +КонецФункции + +#КонецОбласти + +#КонецЕсли diff --git a/SSL/src/InformationRegisters/ОбластиСтатистики/ОбластиСтатистики.mdo b/SSL/src/InformationRegisters/ОбластиСтатистики/ОбластиСтатистики.mdo new file mode 100644 index 000000000..96cdc0143 --- /dev/null +++ b/SSL/src/InformationRegisters/ОбластиСтатистики/ОбластиСтатистики.mdo @@ -0,0 +1,123 @@ +<?xml version="1.0" encoding="UTF-8"?> +<mdclass:InformationRegister xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:core="http://g5.1c.ru/v8/dt/mcore" xmlns:mdclass="http://g5.1c.ru/v8/dt/metadata/mdclass" uuid="afde7867-15d3-43fa-b439-6d9e40df580b"> + <producedTypes> + <selectionType typeId="16e33675-d5e3-4f14-b0cb-390bfd486952" valueTypeId="1b0a6c64-0299-4736-a3de-77586388941a"/> + <listType typeId="1c502e3a-75a7-4b3c-8685-63feb37a6029" valueTypeId="b2988cbc-9cc7-48af-8496-42856e754616"/> + <managerType typeId="3c6de259-7e6e-449b-8d52-8fb70b121fc6" valueTypeId="59cfe0d7-a2b4-4740-a42c-14ecf287cfc4"/> + <recordSetType typeId="4d118f33-5e8d-4707-a8cd-07a2ccdc540c" valueTypeId="ce4ddaa9-2b26-45c4-9033-f19567c92b74"/> + <recordKeyType typeId="9698972a-c78f-411f-8869-e5bf918834cf" valueTypeId="04f7a5bf-0ca5-4a5a-9c22-417230ce6300"/> + <recordType typeId="f2360710-e3f1-4c28-a61d-a50d9c9da185" valueTypeId="1a912d3a-b740-4742-ac2a-fc70e3689eba"/> + <recordManagerType typeId="6e61d59d-4448-445b-bfde-93438c5acfdf" valueTypeId="23d757f0-4612-4fcc-800c-d879765c0189"/> + </producedTypes> + <name>ОбластиСтатистики</name> + <synonym> + <key>ru</key> + <value>Области статистики</value> + </synonym> + <useStandardCommands>true</useStandardCommands> + <editType>InDialog</editType> + <standardAttributes> + <dataHistory>Use</dataHistory> + <name>Active</name> + <fillValue xsi:type="core:UndefinedValue"/> + <fullTextSearch>Use</fullTextSearch> + <minValue xsi:type="core:UndefinedValue"/> + <maxValue xsi:type="core:UndefinedValue"/> + </standardAttributes> + <standardAttributes> + <dataHistory>Use</dataHistory> + <name>LineNumber</name> + <fillValue xsi:type="core:UndefinedValue"/> + <fullTextSearch>Use</fullTextSearch> + <minValue xsi:type="core:UndefinedValue"/> + <maxValue xsi:type="core:UndefinedValue"/> + </standardAttributes> + <standardAttributes> + <dataHistory>Use</dataHistory> + <name>Recorder</name> + <fillValue xsi:type="core:UndefinedValue"/> + <fullTextSearch>Use</fullTextSearch> + <minValue xsi:type="core:UndefinedValue"/> + <maxValue xsi:type="core:UndefinedValue"/> + </standardAttributes> + <standardAttributes> + <dataHistory>Use</dataHistory> + <name>Period</name> + <fillValue xsi:type="core:UndefinedValue"/> + <fillChecking>ShowError</fillChecking> + <fullTextSearch>Use</fullTextSearch> + <minValue xsi:type="core:UndefinedValue"/> + <maxValue xsi:type="core:UndefinedValue"/> + </standardAttributes> + <dataLockControlMode>Managed</dataLockControlMode> + <resources uuid="a676ff94-a0d1-4de9-8690-ec67f2c891d8"> + <name>Наименование</name> + <synonym> + <key>ru</key> + <value>Наименование</value> + </synonym> + <type> + <types>String</types> + <stringQualifiers> + <length>1000</length> + </stringQualifiers> + </type> + <minValue xsi:type="core:UndefinedValue"/> + <maxValue xsi:type="core:UndefinedValue"/> + <fullTextSearch>Use</fullTextSearch> + <dataHistory>Use</dataHistory> + <fillValue xsi:type="core:StringValue"/> + </resources> + <dimensions uuid="012bf716-3672-462e-b390-7bb4384ab4b1"> + <name>ИдентификаторОбласти</name> + <synonym> + <key>ru</key> + <value>Идентификатор области</value> + </synonym> + <type> + <types>UUID</types> + </type> + <minValue xsi:type="core:UndefinedValue"/> + <maxValue xsi:type="core:UndefinedValue"/> + <dataHistory>Use</dataHistory> + <fillValue xsi:type="core:UndefinedValue"/> + <mainFilter>true</mainFilter> + </dimensions> + <dimensions uuid="65342599-ff37-4f99-8e40-f05d87403bcf"> + <name>ХешНаименования</name> + <synonym> + <key>ru</key> + <value>Хеш наименования</value> + </synonym> + <type> + <types>String</types> + <stringQualifiers> + <length>40</length> + </stringQualifiers> + </type> + <minValue xsi:type="core:UndefinedValue"/> + <maxValue xsi:type="core:UndefinedValue"/> + <indexing>Index</indexing> + <fullTextSearch>Use</fullTextSearch> + <dataHistory>Use</dataHistory> + <fillValue xsi:type="core:StringValue"/> + <mainFilter>true</mainFilter> + </dimensions> + <dimensions uuid="3a3f505a-7a50-4111-8029-5b9057fed232"> + <name>СобиратьСтатистикуКонфигурации</name> + <synonym> + <key>ru</key> + <value>Собирать статистику конфигурации</value> + </synonym> + <type> + <types>Boolean</types> + </type> + <minValue xsi:type="core:UndefinedValue"/> + <maxValue xsi:type="core:UndefinedValue"/> + <indexing>Index</indexing> + <fullTextSearch>Use</fullTextSearch> + <dataHistory>Use</dataHistory> + <fillValue xsi:type="core:UndefinedValue"/> + <mainFilter>true</mainFilter> + </dimensions> +</mdclass:InformationRegister> diff --git a/SSL/src/InformationRegisters/ОперацииСтатистики/Forms/ФормаЗаписи/Form.form b/SSL/src/InformationRegisters/ОперацииСтатистики/Forms/ФормаЗаписи/Form.form new file mode 100644 index 000000000..b935a6c3d --- /dev/null +++ b/SSL/src/InformationRegisters/ОперацииСтатистики/Forms/ФормаЗаписи/Form.form @@ -0,0 +1,198 @@ +<?xml version="1.0" encoding="UTF-8"?> +<form:Form xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:form="http://g5.1c.ru/v8/dt/form"> + <items xsi:type="form:FormField"> + <name>УникальныйИдентификаторОперации</name> + <id>4</id> + <visible>true</visible> + <enabled>true</enabled> + <userVisible> + <common>true</common> + </userVisible> + <dataPath xsi:type="form:DataPath"> + <segments>Запись.ИдентификаторОперации</segments> + </dataPath> + <extendedTooltip> + <name>УникальныйИдентификаторОперацииРасширеннаяПодсказка</name> + <id>6</id> + <type>Label</type> + <autoMaxWidth>true</autoMaxWidth> + <autoMaxHeight>true</autoMaxHeight> + <extInfo xsi:type="form:LabelDecorationExtInfo"> + <horizontalAlign>Left</horizontalAlign> + </extInfo> + </extendedTooltip> + <contextMenu> + <name>УникальныйИдентификаторОперацииКонтекстноеМеню</name> + <id>5</id> + <autoFill>true</autoFill> + </contextMenu> + <type>LabelField</type> + <editMode>Enter</editMode> + <showInHeader>true</showInHeader> + <headerHorizontalAlign>Left</headerHorizontalAlign> + <showInFooter>true</showInFooter> + <extInfo xsi:type="form:LabelFieldExtInfo"> + <autoMaxWidth>true</autoMaxWidth> + <autoMaxHeight>true</autoMaxHeight> + </extInfo> + </items> + <items xsi:type="form:FormField"> + <name>Наименование</name> + <id>7</id> + <visible>true</visible> + <enabled>true</enabled> + <userVisible> + <common>true</common> + </userVisible> + <dataPath xsi:type="form:DataPath"> + <segments>Запись.Наименование</segments> + </dataPath> + <extendedTooltip> + <name>НаименованиеРасширеннаяПодсказка</name> + <id>9</id> + <type>Label</type> + <autoMaxWidth>true</autoMaxWidth> + <autoMaxHeight>true</autoMaxHeight> + <extInfo xsi:type="form:LabelDecorationExtInfo"> + <horizontalAlign>Left</horizontalAlign> + </extInfo> + </extendedTooltip> + <contextMenu> + <name>НаименованиеКонтекстноеМеню</name> + <id>8</id> + <autoFill>true</autoFill> + </contextMenu> + <type>InputField</type> + <editMode>Enter</editMode> + <showInHeader>true</showInHeader> + <headerHorizontalAlign>Left</headerHorizontalAlign> + <showInFooter>true</showInFooter> + <extInfo xsi:type="form:InputFieldExtInfo"> + <autoMaxWidth>true</autoMaxWidth> + <autoMaxHeight>true</autoMaxHeight> + <wrap>true</wrap> + <chooseType>true</chooseType> + <typeDomainEnabled>true</typeDomainEnabled> + <textEdit>true</textEdit> + <textSize>Normal</textSize> + </extInfo> + </items> + <items xsi:type="form:FormField"> + <name>КоличествоУникальныхКомментариев</name> + <id>10</id> + <visible>true</visible> + <enabled>true</enabled> + <userVisible> + <common>true</common> + </userVisible> + <dataPath xsi:type="form:DataPath"> + <segments>Запись.КоличествоУникальныхКомментариев</segments> + </dataPath> + <extendedTooltip> + <name>КоличествоУникальныхКомментариевРасширеннаяПодсказка</name> + <id>12</id> + <type>Label</type> + <autoMaxWidth>true</autoMaxWidth> + <autoMaxHeight>true</autoMaxHeight> + <extInfo xsi:type="form:LabelDecorationExtInfo"> + <horizontalAlign>Left</horizontalAlign> + </extInfo> + </extendedTooltip> + <contextMenu> + <name>КоличествоУникальныхКомментариевКонтекстноеМеню</name> + <id>11</id> + <autoFill>true</autoFill> + </contextMenu> + <type>InputField</type> + <editMode>Enter</editMode> + <showInHeader>true</showInHeader> + <headerHorizontalAlign>Left</headerHorizontalAlign> + <showInFooter>true</showInFooter> + <extInfo xsi:type="form:InputFieldExtInfo"> + <autoMaxWidth>true</autoMaxWidth> + <autoMaxHeight>true</autoMaxHeight> + <wrap>true</wrap> + <chooseType>true</chooseType> + <typeDomainEnabled>true</typeDomainEnabled> + <textEdit>true</textEdit> + <textSize>Normal</textSize> + </extInfo> + </items> + <items xsi:type="form:FormField"> + <name>ХешНаименования</name> + <id>1</id> + <visible>true</visible> + <enabled>true</enabled> + <userVisible> + <common>true</common> + </userVisible> + <dataPath xsi:type="form:DataPath"> + <segments>Запись.ХешНаименования</segments> + </dataPath> + <extendedTooltip> + <name>ХешНаименованияРасширеннаяПодсказка</name> + <id>3</id> + <type>Label</type> + <autoMaxWidth>true</autoMaxWidth> + <autoMaxHeight>true</autoMaxHeight> + <extInfo xsi:type="form:LabelDecorationExtInfo"> + <horizontalAlign>Left</horizontalAlign> + </extInfo> + </extendedTooltip> + <contextMenu> + <name>ХешНаименованияКонтекстноеМеню</name> + <id>2</id> + <autoFill>true</autoFill> + </contextMenu> + <type>InputField</type> + <editMode>Enter</editMode> + <showInHeader>true</showInHeader> + <headerHorizontalAlign>Left</headerHorizontalAlign> + <showInFooter>true</showInFooter> + <extInfo xsi:type="form:InputFieldExtInfo"> + <autoMaxWidth>true</autoMaxWidth> + <autoMaxHeight>true</autoMaxHeight> + <wrap>true</wrap> + <chooseType>true</chooseType> + <typeDomainEnabled>true</typeDomainEnabled> + <textEdit>true</textEdit> + <textSize>Normal</textSize> + </extInfo> + </items> + <autoCommandBar> + <name>ФормаКоманднаяПанель</name> + <id>-1</id> + <horizontalAlign>Left</horizontalAlign> + <autoFill>true</autoFill> + </autoCommandBar> + <windowOpeningMode>LockOwner</windowOpeningMode> + <saveWindowSettings>true</saveWindowSettings> + <autoTitle>true</autoTitle> + <autoUrl>true</autoUrl> + <group>Vertical</group> + <autoFillCheck>true</autoFillCheck> + <allowFormCustomize>true</allowFormCustomize> + <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> + <commandInterface> + <navigationPanel/> + <commandBar/> + </commandInterface> + <extInfo xsi:type="form:InformationRegisterManagerFormExtInfo"/> +</form:Form> diff --git a/SSL/src/InformationRegisters/ОперацииСтатистики/Forms/ФормаСписка/Attributes/Список/ExtInfo/ListSettings.dcss b/SSL/src/InformationRegisters/ОперацииСтатистики/Forms/ФормаСписка/Attributes/Список/ExtInfo/ListSettings.dcss new file mode 100644 index 000000000..61e6fb4bb --- /dev/null +++ b/SSL/src/InformationRegisters/ОперацииСтатистики/Forms/ФормаСписка/Attributes/Список/ExtInfo/ListSettings.dcss @@ -0,0 +1,17 @@ +<?xml version="1.0" encoding="UTF-8"?> +<Settings xmlns="http://v8.1c.ru/8.1/data-composition-system/settings" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:v8="http://v8.1c.ru/8.1/data/core" xmlns:v8ui="http://v8.1c.ru/8.1/data/ui" xmlns:pal="http://v8.1c.ru/8.1/data/ui/colors/palette" xmlns:style="http://v8.1c.ru/8.1/data/ui/style" xmlns:sys="http://v8.1c.ru/8.1/data/ui/fonts/system" xmlns:web="http://v8.1c.ru/8.1/data/ui/colors/web" xmlns:win="http://v8.1c.ru/8.1/data/ui/colors/windows" xmlns:dcscor="http://v8.1c.ru/8.1/data-composition-system/core"> + <filter> + <viewMode>Normal</viewMode> + <userSettingID>dfcece9d-5077-440b-b6b3-45a5cb4538eb</userSettingID> + </filter> + <order> + <viewMode>Normal</viewMode> + <userSettingID>88619765-ccb3-46c6-ac52-38e9c992ebd4</userSettingID> + </order> + <conditionalAppearance> + <viewMode>Normal</viewMode> + <userSettingID>b75fecce-942b-4aed-abc9-e6a02e460fb3</userSettingID> + </conditionalAppearance> + <itemsViewMode>Normal</itemsViewMode> + <itemsUserSettingID>911b6018-f537-43e8-a417-da56b22f9aec</itemsUserSettingID> +</Settings> diff --git a/SSL/src/InformationRegisters/ОперацииСтатистики/Forms/ФормаСписка/Form.form b/SSL/src/InformationRegisters/ОперацииСтатистики/Forms/ФормаСписка/Form.form new file mode 100644 index 000000000..3daae0631 --- /dev/null +++ b/SSL/src/InformationRegisters/ОперацииСтатистики/Forms/ФормаСписка/Form.form @@ -0,0 +1,368 @@ +<?xml version="1.0" encoding="UTF-8"?> +<form:Form xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:core="http://g5.1c.ru/v8/dt/mcore" xmlns:form="http://g5.1c.ru/v8/dt/form"> + <items xsi:type="form:FormGroup"> + <name>СписокКомпоновщикНастроекПользовательскиеНастройки</name> + <id>1</id> + <visible>true</visible> + <enabled>true</enabled> + <userVisible> + <common>true</common> + </userVisible> + <title> + <key>ru</key> + <value>Группа пользовательских настроек</value> + + false + + СписокКомпоновщикНастроекПользовательскиеНастройкиРасширеннаяПодсказка + 2 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + WeakSeparation + true + true + Auto + Auto + + + + Список + 3 + true + true + + true + + + Список + + true + None + + УникальныйИдентификаторОперации + 19 + true + true + + true + + + Список.УникальныйИдентификаторОперации + + true + + УникальныйИдентификаторОперацииРасширеннаяПодсказка + 21 + Label + true + true + + Left + + + + УникальныйИдентификаторОперацииКонтекстноеМеню + 20 + true + + LabelField + Enter + true + Left + true + + true + true + + + + Наименование + 22 + true + 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 + + + + ХешНаименования + 16 + true + true + + true + + + Список.ХешНаименования + + true + + ХешНаименованияРасширеннаяПодсказка + 18 + Label + true + true + + Left + + + + ХешНаименованияКонтекстноеМеню + 17 + true + + LabelField + Enter + true + Left + true + + true + true + + + None + + СписокКоманднаяПанель + 5 + Left + + + СписокСтрокаПоиска + 7 + + СписокСтрокаПоискаРасширеннаяПодсказка + 9 + Label + true + true + + Left + + + + СписокСтрокаПоискаКонтекстноеМеню + 8 + true + + Список + + true + + + + СписокСостояниеПросмотра + 10 + + СписокСостояниеПросмотраРасширеннаяПодсказка + 12 + Label + true + true + + Left + + + + СписокСостояниеПросмотраКонтекстноеМеню + 11 + true + + ViewStatusAddition + Список + + true + + + + СписокУправлениеПоиском + 13 + + СписокУправлениеПоискомРасширеннаяПодсказка + 15 + Label + true + true + + Left + + + + СписокУправлениеПоискомКонтекстноеМеню + 14 + true + + SearchControlAddition + Список + + true + + + + СписокРасширеннаяПодсказка + 6 + Label + true + true + + Left + + + + СписокКонтекстноеМеню + 4 + true + + true + true + true + true + true + MultiRow +
      true
      + 1 + 1 + AutoUse + AutoUse + true + true + Auto + Auto + ExpandTopLevel + true + true + true + + Список.DefaultPicture + + None + None + true + + 60 + + 0001-01-01T00:00:00 + 0001-01-01T00:00:00 + + + true + true + СписокКомпоновщикНастроекПользовательскиеНастройки + +
      + + ФормаКоманднаяПанель + -1 + Left + true + + DontBlock + true + true + true + Vertical + true + true + true + auto + true + + Список + 1 + + DynamicList + + + true + + + true + +
      true
      + + InformationRegister.ОперацииСтатистики + true + true + true + true + +
      + + + + + + diff --git a/SSL/src/InformationRegisters/ОперацииСтатистики/ManagerModule.bsl b/SSL/src/InformationRegisters/ОперацииСтатистики/ManagerModule.bsl new file mode 100644 index 000000000..b8d748577 --- /dev/null +++ b/SSL/src/InformationRegisters/ОперацииСтатистики/ManagerModule.bsl @@ -0,0 +1,118 @@ +#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда + +#Область СлужебныеПроцедурыИФункции + +Функция ПолучитьСсылку(Наименование) Экспорт + ХешированиеДанных = Новый ХешированиеДанных(ХешФункция.SHA1); + ХешированиеДанных.Добавить(Наименование); + ХешНаименования = СтрЗаменить(Строка(ХешированиеДанных.ХешСумма), " ", ""); + + Ссылка = НайтиПоХешу(ХешНаименования); + Если Ссылка = Неопределено Тогда + Ссылка = СоздатьНовый(Наименование, ХешНаименования); + КонецЕсли; + + Возврат Ссылка; +КонецФункции + +Функция НайтиПоХешу(Хеш) + Запрос = Новый Запрос; + Запрос.Текст = " + |ВЫБРАТЬ + | ОперацииСтатистики.ИдентификаторОперации + |ИЗ + | РегистрСведений.ОперацииСтатистики КАК ОперацииСтатистики + |ГДЕ + | ОперацииСтатистики.ХешНаименования = &ХешНаименования + |"; + Запрос.УстановитьПараметр("ХешНаименования", Хеш); + + Результат = Запрос.Выполнить(); + Если Результат.Пустой() Тогда + Ссылка = Неопределено; + Иначе + Выборка = Результат.Выбрать(); + Выборка.Следующий(); + + Ссылка = Выборка.ИдентификаторОперации; + КонецЕсли; + + Возврат Ссылка; +КонецФункции + +Функция СоздатьНовый(Наименование, ХешНаименования) + НачатьТранзакцию(); + + Попытка + Блокировка = Новый БлокировкаДанных; + ЭлементБлокировки = Блокировка.Добавить("РегистрСведений.ОперацииСтатистики"); + ЭлементБлокировки.УстановитьЗначение("ХешНаименования", ХешНаименования); + ЭлементБлокировки.Режим = РежимБлокировкиДанных.Исключительный; + Блокировка.Заблокировать(); + + Ссылка = НайтиПоХешу(ХешНаименования); + + Если Ссылка = Неопределено Тогда + Ссылка = Новый УникальныйИдентификатор(); + + НаборЗаписей = РегистрыСведений.ОперацииСтатистики.СоздатьНаборЗаписей(); + НаборЗаписей.ОбменДанными.Загрузка = Истина; + НовЗапись = НаборЗаписей.Добавить(); + НовЗапись.ХешНаименования = ХешНаименования; + НовЗапись.ИдентификаторОперации = Ссылка; + НовЗапись.Наименование = Наименование; + НаборЗаписей.Записать(Ложь); + КонецЕсли; + + ЗафиксироватьТранзакцию(); + Исключение + ОтменитьТранзакцию(); + ВызватьИсключение; + КонецПопытки; + + Возврат Ссылка; +КонецФункции + +Функция МожноНовыйКомментарий(СсылкаОперация) Экспорт + КоличествоУникальныхМаксимум = 100; + + Запрос = Новый Запрос; + Запрос.Текст = + "ВЫБРАТЬ + | ОперацииСтатистики.КоличествоУникальныхКомментариев КАК КоличествоУникальных + |ИЗ + | РегистрСведений.ОперацииСтатистики КАК ОперацииСтатистики + |ГДЕ + | ОперацииСтатистики.ИдентификаторОперации = &ИдентификаторОперации"; + + Запрос.УстановитьПараметр("ИдентификаторОперации", СсылкаОперация); + РезультатЗапроса = Запрос.Выполнить(); + + ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать(); + ВыборкаДетальныеЗаписи.Следующий(); + КоличествоУникальных = ВыборкаДетальныеЗаписи.КоличествоУникальных; + + Если КоличествоУникальных < КоличествоУникальныхМаксимум Тогда + МожноНовыйКомментарий = Истина; + Иначе + МожноНовыйКомментарий = Ложь; + КонецЕсли; + + Возврат МожноНовыйКомментарий; +КонецФункции + +Функция УвеличитьКоличествоУникальныхКомментариев(СсылкаОперация, СсылкаКомментарий) Экспорт + НаборЗаписей = РегистрыСведений.ОперацииСтатистики.СоздатьНаборЗаписей(); + НаборЗаписей.Отбор.ИдентификаторОперации.Установить(СсылкаОперация); + НаборЗаписей.Прочитать(); + Для Каждого ТекЗапись Из НаборЗаписей Цикл + ТекЗапись.КоличествоУникальныхКомментариев = ТекЗапись.КоличествоУникальныхКомментариев + 1; + КонецЦикла; + НаборЗаписей.Записать(Истина); + + РегистрыСведений.КомментарииОперацииСтатистики.СоздатьНовуюЗапись(СсылкаОперация, СсылкаКомментарий); +КонецФункции + +#КонецОбласти + +#КонецЕсли \ No newline at end of file diff --git a/SSL/src/InformationRegisters/ОперацииСтатистики/ОперацииСтатистики.mdo b/SSL/src/InformationRegisters/ОперацииСтатистики/ОперацииСтатистики.mdo new file mode 100644 index 000000000..c3970cb5e --- /dev/null +++ b/SSL/src/InformationRegisters/ОперацииСтатистики/ОперацииСтатистики.mdo @@ -0,0 +1,145 @@ + + + + + + + + + + + + ОперацииСтатистики + + ru + Операции статистики + + true + InDialog + InformationRegister.ОперацииСтатистики.Form.ФормаЗаписи + InformationRegister.ОперацииСтатистики.Form.ФормаСписка + + Use + Active + + Use + + + + + Use + LineNumber + + Use + + + + + Use + Recorder + + Use + + + + + Use + Period + + ShowError + Use + + + + Managed + + Наименование + + ru + Наименование + + + String + + 1000 + + + + + Use + Use + + + + КоличествоУникальныхКомментариев + + ru + Количество уникальных комментариев + + + Number + + 5 + true + + + + + Use + Use + + + + ИдентификаторОперации + + ru + Идентификатор операции + + + UUID + + + + Use + + true + + + ХешНаименования + + ru + Хеш наименования + + + String + + 40 + + + + + Index + Use + Use + + true + + + ФормаСписка + + ru + Форма списка + + PersonalComputer + MobileDevice + + + ФормаЗаписи + + ru + Форма записи + + PersonalComputer + MobileDevice + + diff --git a/SSL/src/InformationRegisters/ПакетыДляОтправки/ManagerModule.bsl b/SSL/src/InformationRegisters/ПакетыДляОтправки/ManagerModule.bsl new file mode 100644 index 000000000..00b796630 --- /dev/null +++ b/SSL/src/InformationRegisters/ПакетыДляОтправки/ManagerModule.bsl @@ -0,0 +1,234 @@ +#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда + +#Область СлужебныеПроцедурыИФункции + +Функция ПолучитьКрайнийПакет() + Запрос = Новый Запрос; + Запрос.Текст = " + |ВЫБРАТЬ + | ISNULL(МАКСИМУМ(ПакетыДляОтправки.НомерПакета), 0) КАК КрайнийПакета + |ИЗ + | РегистрСведений.ПакетыДляОтправки КАК ПакетыДляОтправки + |"; + Результат = Запрос.Выполнить(); + Выборка = Результат.Выбрать(); + Выборка.Следующий(); + + Возврат Выборка.КрайнийПакета; +КонецФункции + +Процедура ЗаписатьНовыйПакет(ДатаЗаписи, JSONСтруктура, СледующийНомерПакета) Экспорт + JSONСтруктура.Вставить("pn", Формат(СледующийНомерПакета, "ЧН=0; ЧГ=0")); + JSONСтруктура.Вставить("Конфигурация", Строка(Метаданные.Имя)); + JSONСтруктура.Вставить("ВерсияКонфигурации", Строка(Метаданные.Версия)); + + ТелоПакета = ЦентрМониторингаСлужебный.СтруктураJSONВСтроку(JSONСтруктура); + ХешMD5 = Новый ХешированиеДанных(ХешФункция.MD5); + ХешMD5.Добавить(ТелоПакета + "hashSalt"); + HASH = ХешMD5.ХешСумма; + HASH = СтрЗаменить(Строка(HASH), " ", ""); + + НаборЗаписей = РегистрыСведений.ПакетыДляОтправки.СоздатьНаборЗаписей(); + НовЗапись = НаборЗаписей.Добавить(); + НовЗапись.Период = ДатаЗаписи; + НовЗапись.НомерПакета = СледующийНомерПакета; + НовЗапись.ТелоПакета = ТелоПакета; + НовЗапись.ХешПакета = HASH; + + НаборЗаписей.ОбменДанными.Загрузка = Истина; + НаборЗаписей.Записать(Ложь); +КонецПроцедуры + +Процедура УдалитьСтарыеПакеты() Экспорт + Запрос = Новый Запрос; + Запрос.Текст = " + |ВЫБРАТЬ + | КОЛИЧЕСТВО(*) КАК ВсегоПакетов + |ИЗ + | РегистрСведений.ПакетыДляОтправки КАК ПакетыДляОтправки + |"; + ПакетовДляОтправки = ЦентрМониторингаВызовСервераПовтИсп.ПолучитьПараметрыЦентраМониторинга("ПакетовДляОтправки"); + + Результат = Запрос.Выполнить(); + Выборка = Результат.Выбрать(); + Выборка.Следующий(); + ВсегоПакетов = Выборка.ВсегоПакетов; + + Если ВсегоПакетов > ПакетовДляОтправки Тогда + КрайнийПакет = ПолучитьКрайнийПакет(); + + Запрос.Текст = " + |ВЫБРАТЬ ПЕРВЫЕ %ПакетовДляУдаления + | ПакетыДляОтправки.НомерПакета КАК НомерПакета + |ИЗ + | РегистрСведений.ПакетыДляОтправки КАК ПакетыДляОтправки + |ГДЕ + | ПакетыДляОтправки.НомерПакета < &КрайнийПакет + |УПОРЯДОЧИТЬ ПО + | ПакетыДляОтправки.НомерПакета УБЫВ + |"; + + Запрос.Текст = СтрЗаменить(Запрос.Текст, "%ПакетовДляУдаления", Формат(ВсегоПакетов - ПакетовДляОтправки, "ЧГ=")); + + Запрос.УстановитьПараметр("КрайнийПакет", КрайнийПакет); + Результат = Запрос.Выполнить(); + Выборка = Результат.Выбрать(); + + НачатьТранзакцию(); + Попытка + НаборЗаписей = РегистрыСведений.ПакетыДляОтправки.СоздатьНаборЗаписей(); + Пока Выборка.Следующий() Цикл + НаборЗаписей.Отбор.НомерПакета.Установить(Выборка.НомерПакета); + НаборЗаписей.Записать(Истина); + КонецЦикла; + + ЗафиксироватьТранзакцию(); + Исключение + ОтменитьТранзакцию(); + Ошибка = ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); + ЗаписьЖурналаРегистрации(НСтр("ru = 'УдалитьСтарыеПакеты'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), УровеньЖурналаРегистрации.Ошибка, Метаданные.ОбщиеМодули.ЦентрМониторингаСлужебный,,Ошибка); + ВызватьИсключение Ошибка; + КонецПопытки; + + КонецЕсли; +КонецПроцедуры + +Процедура УдалитьПакеты(НомерПакета) Экспорт + Запрос = Новый Запрос; + + Запрос.Текст = " + |ВЫБРАТЬ + | ПакетыДляОтправки.НомерПакета КАК НомерПакета + |ИЗ + | РегистрСведений.ПакетыДляОтправки КАК ПакетыДляОтправки + |ГДЕ + | ПакетыДляОтправки.НомерПакета <= &КрайнийПакет + |"; + + Запрос.УстановитьПараметр("КрайнийПакет", НомерПакета); + Результат = Запрос.Выполнить(); + Выборка = Результат.Выбрать(); + + НачатьТранзакцию(); + Попытка + НаборЗаписей = РегистрыСведений.ПакетыДляОтправки.СоздатьНаборЗаписей(); + Пока Выборка.Следующий() Цикл + НаборЗаписей.Отбор.НомерПакета.Установить(Выборка.НомерПакета); + НаборЗаписей.Записать(Истина); + КонецЦикла; + + ЗафиксироватьТранзакцию(); + Исключение + ОтменитьТранзакцию(); + Ошибка = ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); + ЗаписьЖурналаРегистрации(НСтр("ru = 'УдалитьПакеты'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), УровеньЖурналаРегистрации.Ошибка, Метаданные.ОбщиеМодули.ЦентрМониторингаСлужебный,,Ошибка); + ВызватьИсключение Ошибка; + КонецПопытки; +КонецПроцедуры + +Процедура УдалитьПакет(НомерПакета) Экспорт + Запрос = Новый Запрос; + + Запрос.Текст = " + |ВЫБРАТЬ + | ПакетыДляОтправки.НомерПакета КАК НомерПакета + |ИЗ + | РегистрСведений.ПакетыДляОтправки КАК ПакетыДляОтправки + |ГДЕ + | ПакетыДляОтправки.НомерПакета = &НомерПакета + |"; + + Запрос.УстановитьПараметр("НомерПакета", НомерПакета); + Результат = Запрос.Выполнить(); + Выборка = Результат.Выбрать(); + + НачатьТранзакцию(); + Попытка + НаборЗаписей = РегистрыСведений.ПакетыДляОтправки.СоздатьНаборЗаписей(); + Пока Выборка.Следующий() Цикл + НаборЗаписей.Отбор.НомерПакета.Установить(Выборка.НомерПакета); + НаборЗаписей.Записать(Истина); + КонецЦикла; + + ЗафиксироватьТранзакцию(); + Исключение + ОтменитьТранзакцию(); + Ошибка = ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); + ЗаписьЖурналаРегистрации(НСтр("ru = 'УдалитьПакеты'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), УровеньЖурналаРегистрации.Ошибка, Метаданные.ОбщиеМодули.ЦентрМониторингаСлужебный,,Ошибка); + ВызватьИсключение Ошибка; + КонецПопытки; +КонецПроцедуры + +Функция ПолучитьДатуКрайнегоПакета() Экспорт + Запрос = Новый Запрос; + Запрос.Текст = " + |ВЫБРАТЬ + | ISNULL(МАКСИМУМ(ПакетыДляОтправки.Период), ДАТАВРЕМЯ(1,1,1)) КАК ДатаКрайнегоПакета + |ИЗ + | РегистрСведений.ПакетыДляОтправки КАК ПакетыДляОтправки + |"; + Результат = Запрос.Выполнить(); + Выборка = Результат.Выбрать(); + Выборка.Следующий(); + + Возврат Выборка.ДатаКрайнегоПакета; +КонецФункции + +Функция ПолучитьПакет(НомерПакета) Экспорт + Запрос = Новый Запрос; + + Запрос.Текст = " + |ВЫБРАТЬ + | ПакетыДляОтправки.НомерПакета, + | ПакетыДляОтправки.ТелоПакета, + | ПакетыДляОтправки.ХешПакета + |ИЗ + | РегистрСведений.ПакетыДляОтправки КАК ПакетыДляОтправки + |ГДЕ + | ПакетыДляОтправки.НомерПакета = &НомерПакета + |"; + + Запрос.УстановитьПараметр("НомерПакета", НомерПакета); + Результат = Запрос.Выполнить(); + Если Результат.Пустой() Тогда + Пакет = Неопределено; + Иначе + Выборка = Результат.Выбрать(); + Выборка.Следующий(); + + Пакет = Новый Структура; + Пакет.Вставить("НомерПакета", Выборка.НомерПакета); + Пакет.Вставить("ТелоПакета", Выборка.ТелоПакета); + Пакет.Вставить("ХешПакета", Выборка.ХешПакета); + КонецЕсли; + + Возврат Пакет; +КонецФункции + +Функция ПолучитьНомераПакетов() Экспорт + Запрос = Новый Запрос; + + Запрос.Текст = " + |ВЫБРАТЬ + | ПакетыДляОтправки.НомерПакета + |ИЗ + | РегистрСведений.ПакетыДляОтправки КАК ПакетыДляОтправки + |УПОРЯДОЧИТЬ ПО + | ПакетыДляОтправки.НомерПакета + |"; + + Результат = Запрос.Выполнить(); + НомераПакетов = Новый Массив; + Если НЕ Результат.Пустой() Тогда + Выборка = Результат.Выбрать(); + Пока Выборка.Следующий() Цикл + НомераПакетов.Добавить(Выборка.НомерПакета); + КонецЦикла; + КонецЕсли; + + Возврат НомераПакетов; +КонецФункции + +#КонецОбласти + +#КонецЕсли diff --git a/SSL/src/InformationRegisters/ПакетыДляОтправки/ПакетыДляОтправки.mdo b/SSL/src/InformationRegisters/ПакетыДляОтправки/ПакетыДляОтправки.mdo new file mode 100644 index 000000000..4edf4b31d --- /dev/null +++ b/SSL/src/InformationRegisters/ПакетыДляОтправки/ПакетыДляОтправки.mdo @@ -0,0 +1,111 @@ + + + + + + + + + + + + ПакетыДляОтправки + + ru + Пакеты для отправки + + true + InDialog + + Use + Active + + Use + + + + + Use + LineNumber + + Use + + + + + Use + Recorder + + Use + + + + + Use + Period + + ShowError + Use + + + + Second + true + Managed + + ТелоПакета + + ru + Тело пакета + + + String + + + + + Use + Use + + + + ХешПакета + + ru + Хеш пакета + + + String + + 32 + + + + + Use + Use + + + + + + НомерПакета + + ru + Номер пакета + + + Number + + 11 + + + + + Index + Use + Use + + true + + diff --git a/SSL/src/InformationRegisters/ПараметрыРаботыВерсийРасширений/Forms/ФормаЗаписи/Form.form b/SSL/src/InformationRegisters/ПараметрыРаботыВерсийРасширений/Forms/ФормаЗаписи/Form.form new file mode 100644 index 000000000..8ca961fed --- /dev/null +++ b/SSL/src/InformationRegisters/ПараметрыРаботыВерсийРасширений/Forms/ФормаЗаписи/Form.form @@ -0,0 +1,174 @@ + + + + ВерсияРасширений + 1 + true + true + + true + + + Запись.ВерсияРасширений + + + ВерсияРасширенийРасширеннаяПодсказка + 3 + Label + true + true + + Left + + + + ВерсияРасширенийКонтекстноеМеню + 2 + true + + InputField + Enter + true + Left + true + + true + true + true + true + true + true + Normal + + + + ИмяПараметра + 4 + true + true + + true + + + Запись.ИмяПараметра + + + ИмяПараметраРасширеннаяПодсказка + 6 + Label + true + true + + Left + + + + ИмяПараметраКонтекстноеМеню + 5 + true + + InputField + Enter + true + Left + true + + true + true + true + true + true + true + Normal + + + + ФормаКоманднаяПанель + -1 + + ФормаВключитьВозможностьРедактирования + 7 + true + true + + true + + + ФормаВключитьВозможностьРедактированияРасширеннаяПодсказка + 8 + Label + true + true + + Left + + + Form.Command.ВключитьВозможностьРедактирования + Normal + Auto + true + true + UserCmds + Auto + InAdditionalSubmenu + + Left + true + + + OnCreateAtServer + ПриСозданииНаСервере + + LockOwner + true + true + true + Vertical + true + true + true + auto + true + + Запись + 1 + + InformationRegisterRecordManager.ПараметрыРаботыВерсийРасширений + + + true + + + true + +
      true
      + true +
      + + ВключитьВозможностьРедактирования + + <key>ru</key> + <value>Включить возможность редактирования</value> + + 1 + + ru + Включить возможность редактирования только для целей поиска неисправности (требуется углубленное понимание работы механизма) + + + true + + + + ВключитьВозможностьРедактирования + + + DontUse + Auto + + + + + + +
      diff --git a/SSL/src/InformationRegisters/ПараметрыРаботыВерсийРасширений/Forms/ФормаЗаписи/Module.bsl b/SSL/src/InformationRegisters/ПараметрыРаботыВерсийРасширений/Forms/ФормаЗаписи/Module.bsl new file mode 100644 index 000000000..2cd660d32 --- /dev/null +++ b/SSL/src/InformationRegisters/ПараметрыРаботыВерсийРасширений/Forms/ФормаЗаписи/Module.bsl @@ -0,0 +1,23 @@ + +#Область ОбработчикиСобытийФормы + +&НаСервере +Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) + + ТолькоПросмотр = Истина; + +КонецПроцедуры + +#КонецОбласти + +#Область ОбработчикиКомандФормы + +&НаКлиенте +Процедура ВключитьВозможностьРедактирования(Команда) + + ТолькоПросмотр = Ложь; + Элементы.ФормаВключитьВозможностьРедактирования.Доступность = Ложь; + +КонецПроцедуры + +#КонецОбласти diff --git a/SSL/src/InformationRegisters/ПараметрыРаботыВерсийРасширений/Forms/ФормаСписка/Attributes/Список/ExtInfo/ListSettings.dcss b/SSL/src/InformationRegisters/ПараметрыРаботыВерсийРасширений/Forms/ФормаСписка/Attributes/Список/ExtInfo/ListSettings.dcss new file mode 100644 index 000000000..61e6fb4bb --- /dev/null +++ b/SSL/src/InformationRegisters/ПараметрыРаботыВерсийРасширений/Forms/ФормаСписка/Attributes/Список/ExtInfo/ListSettings.dcss @@ -0,0 +1,17 @@ + + + + Normal + dfcece9d-5077-440b-b6b3-45a5cb4538eb + + + Normal + 88619765-ccb3-46c6-ac52-38e9c992ebd4 + + + Normal + b75fecce-942b-4aed-abc9-e6a02e460fb3 + + Normal + 911b6018-f537-43e8-a417-da56b22f9aec + diff --git a/SSL/src/InformationRegisters/ПараметрыРаботыВерсийРасширений/Forms/ФормаСписка/Form.form b/SSL/src/InformationRegisters/ПараметрыРаботыВерсийРасширений/Forms/ФормаСписка/Form.form new file mode 100644 index 000000000..7868756a2 --- /dev/null +++ b/SSL/src/InformationRegisters/ПараметрыРаботыВерсийРасширений/Forms/ФормаСписка/Form.form @@ -0,0 +1,351 @@ + + + + ГруппаПользовательскихНастроек + 1 + true + true + + true + + + <key>ru</key> + <value>Группа пользовательских настроек</value> + + false + + ГруппаПользовательскихНастроекРасширеннаяПодсказка + 2 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + WeakSeparation + true + true + Auto + Auto + + + + Список + 3 + true + true + + true + + + Список + + true + None + + ВерсияРасширений + 16 + true + true + + true + + + Список.ВерсияРасширений + + true + + ВерсияРасширенийРасширеннаяПодсказка + 18 + Label + true + true + + Left + + + + ВерсияРасширенийКонтекстноеМеню + 17 + true + + LabelField + Enter + true + Left + true + + true + true + + + + ИмяПараметра + 19 + true + true + + true + + + Список.ИмяПараметра + + true + + ИмяПараметраРасширеннаяПодсказка + 21 + Label + true + true + + Left + + + + ИмяПараметраКонтекстноеМеню + 20 + true + + LabelField + Enter + true + Left + true + + true + true + + + None + + СписокКоманднаяПанель + 5 + Left + + + СписокСтрокаПоиска + 7 + + СписокСтрокаПоискаРасширеннаяПодсказка + 9 + Label + true + true + + Left + + + + СписокСтрокаПоискаКонтекстноеМеню + 8 + true + + Список + + true + + + + СписокСостояниеПросмотра + 10 + + СписокСостояниеПросмотраРасширеннаяПодсказка + 12 + Label + true + true + + Left + + + + СписокСостояниеПросмотраКонтекстноеМеню + 11 + true + + ViewStatusAddition + Список + + true + + + + СписокУправлениеПоиском + 13 + + СписокУправлениеПоискомРасширеннаяПодсказка + 15 + Label + true + true + + Left + + + + СписокУправлениеПоискомКонтекстноеМеню + 14 + true + + SearchControlAddition + Список + + true + + + + СписокРасширеннаяПодсказка + 6 + Label + true + true + + Left + + + + СписокКонтекстноеМеню + 4 + true + + true + true + true + true + true + MultiRow +
      true
      + 1 + 1 + AutoUse + AutoUse + true + true + Auto + Auto + ExpandTopLevel + true + true + true + + Список.DefaultPicture + + None + None + None + true + + 60 + + 0001-01-01T00:00:00 + 0001-01-01T00:00:00 + + + true + true + ГруппаПользовательскихНастроек + +
      + + ФормаКоманднаяПанель + -1 + + ФормаВключитьВозможностьРедактирования + 22 + true + true + + true + + + ФормаВключитьВозможностьРедактированияРасширеннаяПодсказка + 23 + Label + true + true + + Left + + + Form.Command.ВключитьВозможностьРедактирования + Normal + Auto + true + true + UserCmds + Auto + InAdditionalSubmenu + + Left + true + + + OnCreateAtServer + ПриСозданииНаСервере + + 80 + 8 + DontBlock + true + true + true + Vertical + true + true + true + auto + true + + Список + 1 + + DynamicList + + + true + + + true + +
      true
      + + InformationRegister.ПараметрыРаботыВерсийРасширений + true + true + true + true + +
      + + ВключитьВозможностьРедактирования + + <key>ru</key> + <value>Включить возможность редактирования</value> + + 1 + + ru + Включить возможность редактирования только для целей поиска неисправности (требуется углубленное понимание работы механизма) + + + true + + + + ВключитьВозможностьРедактирования + + + DontUse + Auto + + + + + + +
      diff --git a/SSL/src/InformationRegisters/ПараметрыРаботыВерсийРасширений/Forms/ФормаСписка/Module.bsl b/SSL/src/InformationRegisters/ПараметрыРаботыВерсийРасширений/Forms/ФормаСписка/Module.bsl new file mode 100644 index 000000000..2cd660d32 --- /dev/null +++ b/SSL/src/InformationRegisters/ПараметрыРаботыВерсийРасширений/Forms/ФормаСписка/Module.bsl @@ -0,0 +1,23 @@ + +#Область ОбработчикиСобытийФормы + +&НаСервере +Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) + + ТолькоПросмотр = Истина; + +КонецПроцедуры + +#КонецОбласти + +#Область ОбработчикиКомандФормы + +&НаКлиенте +Процедура ВключитьВозможностьРедактирования(Команда) + + ТолькоПросмотр = Ложь; + Элементы.ФормаВключитьВозможностьРедактирования.Доступность = Ложь; + +КонецПроцедуры + +#КонецОбласти diff --git a/SSL/src/InformationRegisters/ПараметрыРаботыВерсийРасширений/ПараметрыРаботыВерсийРасширений.mdo b/SSL/src/InformationRegisters/ПараметрыРаботыВерсийРасширений/ПараметрыРаботыВерсийРасширений.mdo new file mode 100644 index 000000000..ee088d464 --- /dev/null +++ b/SSL/src/InformationRegisters/ПараметрыРаботыВерсийРасширений/ПараметрыРаботыВерсийРасширений.mdo @@ -0,0 +1,129 @@ + + + + + + + + + + + + ПараметрыРаботыВерсийРасширений + + ru + Параметры работы версий расширений + + InDialog + InformationRegister.ПараметрыРаботыВерсийРасширений.Form.ФормаЗаписи + InformationRegister.ПараметрыРаботыВерсийРасширений.Form.ФормаСписка + + Use + Active + + Use + + + + + Use + LineNumber + + Use + + + + + Use + Recorder + + Use + + + + + Use + Period + + ShowError + Use + + + + Managed + + ХранилищеПараметра + + ru + Хранилище параметра + + + ValueStorage + + + + Use + Use + + + + ВерсияРасширений + + ru + Версия расширений + + + CatalogRef.ВерсииРасширений + + + ru + Обобщенная версия метаданных набора расширений + + + + ShowError + true + Use + true + + true + true + + + ИмяПараметра + + ru + Имя параметра + + + String + + 128 + + + + + Use + Use + + true + + + ФормаЗаписи + + ru + Форма записи + + PersonalComputer + MobileDevice + + + ФормаСписка + + ru + Форма списка + + PersonalComputer + MobileDevice + + diff --git a/SSL/src/InformationRegisters/ПодпискиПолучателей/Forms/НастройкаПодписокЭтойКонечнойТочки/Form.form b/SSL/src/InformationRegisters/ПодпискиПолучателей/Forms/НастройкаПодписокЭтойКонечнойТочки/Form.form index 70fc4d3ed..18f965254 100644 --- a/SSL/src/InformationRegisters/ПодпискиПолучателей/Forms/НастройкаПодписокЭтойКонечнойТочки/Form.form +++ b/SSL/src/InformationRegisters/ПодпискиПолучателей/Forms/НастройкаПодписокЭтойКонечнойТочки/Form.form @@ -196,7 +196,6 @@ true true true - UseIfNecessary auto true diff --git a/SSL/src/InformationRegisters/ПодпискиПолучателей/Forms/ФормаЗаписи/Form.form b/SSL/src/InformationRegisters/ПодпискиПолучателей/Forms/ФормаЗаписи/Form.form index df76b1e0f..f30094757 100644 --- a/SSL/src/InformationRegisters/ПодпискиПолучателей/Forms/ФормаЗаписи/Form.form +++ b/SSL/src/InformationRegisters/ПодпискиПолучателей/Forms/ФормаЗаписи/Form.form @@ -100,7 +100,6 @@ true true true - UseIfNecessary auto true diff --git a/SSL/src/InformationRegisters/ПользовательскиеМакетыПечати/Forms/ВыбораРежимаОткрытияМакета/Form.form b/SSL/src/InformationRegisters/ПользовательскиеМакетыПечати/Forms/ВыбораРежимаОткрытияМакета/Form.form index ae1d60c3b..5f703d291 100644 --- a/SSL/src/InformationRegisters/ПользовательскиеМакетыПечати/Forms/ВыбораРежимаОткрытияМакета/Form.form +++ b/SSL/src/InformationRegisters/ПользовательскиеМакетыПечати/Forms/ВыбораРежимаОткрытияМакета/Form.form @@ -225,7 +225,6 @@ true true true - UseIfNecessary auto true @@ -284,7 +283,7 @@ ОК - Auto + DontUse Auto
      diff --git a/SSL/src/InformationRegisters/ПользовательскиеМакетыПечати/Forms/МакетыПечатныхФорм/Form.form b/SSL/src/InformationRegisters/ПользовательскиеМакетыПечати/Forms/МакетыПечатныхФорм/Form.form index 174b9564b..2af9d6d39 100644 --- a/SSL/src/InformationRegisters/ПользовательскиеМакетыПечати/Forms/МакетыПечатныхФорм/Form.form +++ b/SSL/src/InformationRegisters/ПользовательскиеМакетыПечати/Forms/МакетыПечатныхФорм/Form.form @@ -804,7 +804,6 @@ true true true - UseIfNecessary auto true @@ -1081,7 +1080,7 @@ ИспользоватьИзмененныйМакет - Auto + DontUse Auto @@ -1106,7 +1105,7 @@ ИспользоватьСтандартныйМакет - Auto + DontUse Auto @@ -1128,7 +1127,7 @@ ЗадатьДействиеПриВыбореМакетаПечатнойФормы - Auto + DontUse Auto @@ -1154,7 +1153,7 @@ TextPicture - Auto + DontUse Auto @@ -1180,7 +1179,7 @@ TextPicture - Auto + DontUse Auto @@ -1205,7 +1204,7 @@ УдалитьВыбранныеИзмененныеМакеты - Auto + DontUse Auto diff --git a/SSL/src/InformationRegisters/ПользовательскиеМакетыПечати/Forms/МакетыПечатныхФорм/Module.bsl b/SSL/src/InformationRegisters/ПользовательскиеМакетыПечати/Forms/МакетыПечатныхФорм/Module.bsl index b3bfda53d..06d83efd7 100644 --- a/SSL/src/InformationRegisters/ПользовательскиеМакетыПечати/Forms/МакетыПечатныхФорм/Module.bsl +++ b/SSL/src/InformationRegisters/ПользовательскиеМакетыПечати/Forms/МакетыПечатныхФорм/Module.bsl @@ -224,7 +224,7 @@ ТипыМакетов.Добавить("ODT"); Для Каждого ТипМакета Из ТипыМакетов Цикл - Позиция = Найти(ИмяОбъектаМетаданныхМакета, "ПФ_" + ТипМакета); + Позиция = СтрНайти(ИмяОбъектаМетаданныхМакета, "ПФ_" + ТипМакета); Если Позиция > 0 Тогда Возврат ТипМакета; КонецЕсли; @@ -393,7 +393,7 @@ Процедура УстановитьИспользованиеИзмененныхМакетов(Макеты, ИспользуетсяИзмененный) Для Каждого ИмяОбъектаМетаданныхМакета Из Макеты Цикл - ЧастиИмени = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(ИмяОбъектаМетаданныхМакета, "."); + ЧастиИмени = СтрРазделить(ИмяОбъектаМетаданныхМакета, "."); ИмяМакета = ЧастиИмени[ЧастиИмени.ВГраница()]; ИмяВладельца = ""; @@ -434,7 +434,7 @@ Процедура УдалитьИзмененныеМакеты(УдаляемыеМакеты) Для Каждого ИмяОбъектаМетаданныхМакета Из УдаляемыеМакеты Цикл - ЧастиИмени = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(ИмяОбъектаМетаданныхМакета, "."); + ЧастиИмени = СтрРазделить(ИмяОбъектаМетаданныхМакета, "."); ИмяМакета = ЧастиИмени[ЧастиИмени.ВГраница()]; ИмяВладельца = ""; diff --git a/SSL/src/InformationRegisters/ПользовательскиеМакетыПечати/Forms/ПроверкаПечатныхФорм/Form.form b/SSL/src/InformationRegisters/ПользовательскиеМакетыПечати/Forms/ПроверкаПечатныхФорм/Form.form index ad31f00db..ed8ab1d88 100644 --- a/SSL/src/InformationRegisters/ПользовательскиеМакетыПечати/Forms/ПроверкаПечатныхФорм/Form.form +++ b/SSL/src/InformationRegisters/ПользовательскиеМакетыПечати/Forms/ПроверкаПечатныхФорм/Form.form @@ -216,7 +216,7 @@ Проверено - Auto + DontUse Auto @@ -234,7 +234,7 @@ ПерейтиКСписку - Auto + DontUse Auto @@ -252,7 +252,7 @@ ЗакрытьФорму - Auto + DontUse Auto diff --git a/SSL/src/InformationRegisters/ПользовательскиеМакетыПечати/Forms/ПроверкаПечатныхФорм/Module.bsl b/SSL/src/InformationRegisters/ПользовательскиеМакетыПечати/Forms/ПроверкаПечатныхФорм/Module.bsl index b970c99af..97d58c81b 100644 --- a/SSL/src/InformationRegisters/ПользовательскиеМакетыПечати/Forms/ПроверкаПечатныхФорм/Module.bsl +++ b/SSL/src/InformationRegisters/ПользовательскиеМакетыПечати/Forms/ПроверкаПечатныхФорм/Module.bsl @@ -26,7 +26,7 @@ &НаСервере Процедура ОтметитьВыполнениеДела() - ВерсияМассив = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(Метаданные.Версия, "."); + ВерсияМассив = СтрРазделить(Метаданные.Версия, "."); ТекущаяВерсия = ВерсияМассив[0] + ВерсияМассив[1] + ВерсияМассив[2]; ХранилищеОбщихНастроек.Сохранить("ТекущиеДела", "ПечатныеФормы", ТекущаяВерсия); diff --git a/SSL/src/InformationRegisters/ПользовательскиеМакетыПечати/Forms/РедактированиеМакета/Form.form b/SSL/src/InformationRegisters/ПользовательскиеМакетыПечати/Forms/РедактированиеМакета/Form.form index 6fda828fd..e9d0e725e 100644 --- a/SSL/src/InformationRegisters/ПользовательскиеМакетыПечати/Forms/РедактированиеМакета/Form.form +++ b/SSL/src/InformationRegisters/ПользовательскиеМакетыПечати/Forms/РедактированиеМакета/Form.form @@ -916,7 +916,6 @@ true true true - UseIfNecessary auto true @@ -1167,7 +1166,7 @@ ЗавершитьИзменение - Auto + DontUse Auto @@ -1189,7 +1188,7 @@ Изменить - Auto + DontUse Auto @@ -1211,7 +1210,7 @@ Отмена - Auto + DontUse Auto diff --git a/SSL/src/InformationRegisters/ПользовательскиеМакетыПечати/Forms/РедактированиеМакета/Module.bsl b/SSL/src/InformationRegisters/ПользовательскиеМакетыПечати/Forms/РедактированиеМакета/Module.bsl index 3a7985ce6..8409300ef 100644 --- a/SSL/src/InformationRegisters/ПользовательскиеМакетыПечати/Forms/РедактированиеМакета/Module.bsl +++ b/SSL/src/InformationRegisters/ПользовательскиеМакетыПечати/Forms/РедактированиеМакета/Module.bsl @@ -14,7 +14,7 @@ ИмяОбъектаМетаданныхМакета = Параметры.ИмяОбъектаМетаданныхМакета; - ЧастиИмени = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(ИмяОбъектаМетаданныхМакета, "."); + ЧастиИмени = СтрРазделить(ИмяОбъектаМетаданныхМакета, "."); ИмяМакета = ЧастиИмени[ЧастиИмени.ВГраница()]; ИмяВладельца = ""; diff --git a/SSL/src/InformationRegisters/ПользовательскиеНастройкиДоступаКОбработкам/ПользовательскиеНастройкиДоступаКОбработкам.mdo b/SSL/src/InformationRegisters/ПользовательскиеНастройкиДоступаКОбработкам/ПользовательскиеНастройкиДоступаКОбработкам.mdo index 41325608e..341912a87 100644 --- a/SSL/src/InformationRegisters/ПользовательскиеНастройкиДоступаКОбработкам/ПользовательскиеНастройкиДоступаКОбработкам.mdo +++ b/SSL/src/InformationRegisters/ПользовательскиеНастройкиДоступаКОбработкам/ПользовательскиеНастройкиДоступаКОбработкам.mdo @@ -120,6 +120,7 @@ Пользователь
      + CatalogRef.ВнешниеПользователи CatalogRef.Пользователи diff --git a/SSL/src/InformationRegisters/ПраваРолей/Forms/ФормаЗаписи/Form.form b/SSL/src/InformationRegisters/ПраваРолей/Forms/ФормаЗаписи/Form.form index 06961f995..526db2553 100644 --- a/SSL/src/InformationRegisters/ПраваРолей/Forms/ФормаЗаписи/Form.form +++ b/SSL/src/InformationRegisters/ПраваРолей/Forms/ФормаЗаписи/Form.form @@ -584,7 +584,6 @@ true true true - UseIfNecessary auto true @@ -638,7 +637,7 @@ ВключитьВозможностьРедактирования - Auto + DontUse Auto diff --git a/SSL/src/InformationRegisters/ПраваРолей/Forms/ФормаСписка/Form.form b/SSL/src/InformationRegisters/ПраваРолей/Forms/ФормаСписка/Form.form index b236c2891..de4ef0a8c 100644 --- a/SSL/src/InformationRegisters/ПраваРолей/Forms/ФормаСписка/Form.form +++ b/SSL/src/InformationRegisters/ПраваРолей/Forms/ФормаСписка/Form.form @@ -771,7 +771,6 @@ true true true - UseIfNecessary auto true @@ -835,7 +834,7 @@ ВключитьВозможностьРедактирования - Auto + DontUse Auto @@ -857,7 +856,7 @@ ОбновитьДанныеРегистра - Auto + DontUse Auto diff --git a/SSL/src/InformationRegisters/ПраваРолей/ManagerModule.bsl b/SSL/src/InformationRegisters/ПраваРолей/ManagerModule.bsl index 5b8e04085..4be8cbacf 100644 --- a/SSL/src/InformationRegisters/ПраваРолей/ManagerModule.bsl +++ b/SSL/src/InformationRegisters/ПраваРолей/ManagerModule.bsl @@ -12,7 +12,7 @@ УстановитьПривилегированныйРежим(Истина); - СтандартныеПодсистемыПовтИсп.СправочникИдентификаторыОбъектовМетаданныхПроверкаИспользования(Истина); + СтандартныеПодсистемыПовтИсп.ИдентификаторыОбъектовМетаданныхПроверкаИспользования(Истина); Если ТолькоПроверка ИЛИ МонопольныйРежим() Тогда СнятьМонопольныйРежим = Ложь; @@ -39,49 +39,37 @@ ТаблицаИдентификаторов.Индексы.Добавить("ПолноеИмя"); ТаблицаИдентификаторов.Индексы.Добавить("ОбъектМетаданных"); - Для каждого ВозможныеПрава Из ВозможныеПраваОбъектовМетаданных Цикл - Для каждого ОбъектМетаданных Из Метаданные[ВозможныеПрава.Коллекция] Цикл + Для Каждого ВозможныеПрава Из ВозможныеПраваОбъектовМетаданных Цикл + Для Каждого ОбъектМетаданных Из Метаданные[ВозможныеПрава.Коллекция] Цикл ПолноеИмя = ОбъектМетаданных.ПолноеИмя(); Идентификатор = ИдентификаторОбъектаМетаданных(ТаблицаИдентификаторов, ПолноеИмя); Поля = ВсеПоляОграниченияДоступаОбъектаМетаданных(ОбъектМетаданных, ПолноеИмя); - Для каждого Роль Из Метаданные.Роли Цикл + Для Каждого Роль Из Метаданные.Роли Цикл Если Не ПравоДоступа("Чтение", ОбъектМетаданных, Роль) Тогда Продолжить; КонецЕсли; НоваяСтрока = ПраваРолей.Добавить(); - НоваяСтрока.Роль = ИдентификаторОбъектаМетаданных(ТаблицаИдентификаторов, Роль); НоваяСтрока.ОбъектМетаданных = Идентификатор; - НоваяСтрока.Добавление = ВозможныеПрава.ПравоДобавления - И ПравоДоступа("Добавление", ОбъектМетаданных, Роль); - - НоваяСтрока.Изменение = ВозможныеПрава.ПравоИзменения - И ПравоДоступа("Изменение", ОбъектМетаданных, Роль); - - НоваяСтрока.ЧтениеБезОграничения = - НЕ ПараметрыДоступа("Чтение", ОбъектМетаданных, Поля, Роль).ОграничениеУсловием; - - НоваяСтрока.ДобавлениеБезОграничения = - НоваяСтрока.Добавление - И НЕ ПараметрыДоступа("Добавление", ОбъектМетаданных, Поля, Роль).ОграничениеУсловием; - - НоваяСтрока.ИзменениеБезОграничения = - НоваяСтрока.Изменение - И НЕ ПараметрыДоступа("Изменение", ОбъектМетаданных, Поля, Роль).ОграничениеУсловием; - + НоваяСтрока.ЧтениеБезОграничения = НЕ ПараметрыДоступа("Чтение", ОбъектМетаданных, Поля, Роль).ОграничениеУсловием; НоваяСтрока.Просмотр = ПравоДоступа("Просмотр", ОбъектМетаданных, Роль); - НоваяСтрока.Редактирование = ВозможныеПрава.ПравоИзменения - И ПравоДоступа("Редактирование", ОбъектМетаданных, Роль); + Если ВозможныеПрава.ПравоДобавления И ПравоДоступа("Добавление", ОбъектМетаданных, Роль) Тогда + НоваяСтрока.Добавление = Истина; + НоваяСтрока.ДобавлениеБезОграничения = НЕ ПараметрыДоступа("Добавление", ОбъектМетаданных, Поля, Роль).ОграничениеУсловием; + НоваяСтрока.ИнтерактивноеДобавление = ПравоДоступа("ИнтерактивноеДобавление", ОбъектМетаданных, Роль); + КонецЕсли; - НоваяСтрока.ИнтерактивноеДобавление = - ВозможныеПрава.ПравоДобавления - И ПравоДоступа("ИнтерактивноеДобавление", ОбъектМетаданных, Роль); + Если ВозможныеПрава.ПравоИзменения И ПравоДоступа("Изменение", ОбъектМетаданных, Роль) Тогда + НоваяСтрока.Изменение = Истина; + НоваяСтрока.ИзменениеБезОграничения = НЕ ПараметрыДоступа("Изменение", ОбъектМетаданных, Поля, Роль).ОграничениеУсловием; + НоваяСтрока.Редактирование = ПравоДоступа("Редактирование", ОбъектМетаданных, Роль); + КонецЕсли; КонецЦикла; КонецЦикла; @@ -203,94 +191,68 @@ ПраваОбъектовМетаданных = Новый ТаблицаЗначений; ПраваОбъектовМетаданных.Колонки.Добавить("Коллекция"); - ПраваОбъектовМетаданных.Колонки.Добавить("КоллекцияВЕдЧисле"); ПраваОбъектовМетаданных.Колонки.Добавить("ПравоДобавления"); ПраваОбъектовМетаданных.Колонки.Добавить("ПравоИзменения"); - ПраваОбъектовМетаданных.Колонки.Добавить("ПравоУдаления"); Строка = ПраваОбъектовМетаданных.Добавить(); Строка.Коллекция = "Справочники"; - Строка.КоллекцияВЕдЧисле = "Справочник"; Строка.ПравоДобавления = Истина; Строка.ПравоИзменения = Истина; - Строка.ПравоУдаления = Истина; Строка = ПраваОбъектовМетаданных.Добавить(); Строка.Коллекция = "Документы"; - Строка.КоллекцияВЕдЧисле = "Документ"; Строка.ПравоДобавления = Истина; Строка.ПравоИзменения = Истина; - Строка.ПравоУдаления = Истина; Строка = ПраваОбъектовМетаданных.Добавить(); Строка.Коллекция = "ЖурналыДокументов"; - Строка.КоллекцияВЕдЧисле = "ЖурналДокументов"; Строка.ПравоДобавления = Ложь; Строка.ПравоИзменения = Ложь; - Строка.ПравоУдаления = Ложь; Строка = ПраваОбъектовМетаданных.Добавить(); Строка.Коллекция = "ПланыВидовХарактеристик"; - Строка.КоллекцияВЕдЧисле = "ПланВидовХарактеристик"; Строка.ПравоДобавления = Истина; Строка.ПравоИзменения = Истина; - Строка.ПравоУдаления = Истина; Строка = ПраваОбъектовМетаданных.Добавить(); Строка.Коллекция = "ПланыСчетов"; - Строка.КоллекцияВЕдЧисле = "ПланСчетов"; Строка.ПравоДобавления = Истина; Строка.ПравоИзменения = Истина; - Строка.ПравоУдаления = Истина; Строка = ПраваОбъектовМетаданных.Добавить(); Строка.Коллекция = "ПланыВидовРасчета"; - Строка.КоллекцияВЕдЧисле = "ПланВидовРасчета"; Строка.ПравоДобавления = Истина; Строка.ПравоИзменения = Истина; - Строка.ПравоУдаления = Истина; Строка = ПраваОбъектовМетаданных.Добавить(); Строка.Коллекция = "РегистрыСведений"; - Строка.КоллекцияВЕдЧисле = "РегистрСведений"; Строка.ПравоДобавления = Ложь; Строка.ПравоИзменения = Истина; - Строка.ПравоУдаления = Ложь; Строка = ПраваОбъектовМетаданных.Добавить(); Строка.Коллекция = "РегистрыНакопления"; - Строка.КоллекцияВЕдЧисле = "РегистрНакопления"; Строка.ПравоДобавления = Ложь; Строка.ПравоИзменения = Истина; - Строка.ПравоУдаления = Ложь; Строка = ПраваОбъектовМетаданных.Добавить(); Строка.Коллекция = "РегистрыБухгалтерии"; - Строка.КоллекцияВЕдЧисле = "РегистрБухгалтерии"; Строка.ПравоДобавления = Ложь; Строка.ПравоИзменения = Истина; - Строка.ПравоУдаления = Ложь; Строка = ПраваОбъектовМетаданных.Добавить(); Строка.Коллекция = "РегистрыРасчета"; - Строка.КоллекцияВЕдЧисле = "РегистрРасчета"; Строка.ПравоДобавления = Ложь; Строка.ПравоИзменения = Истина; - Строка.ПравоУдаления = Ложь; Строка = ПраваОбъектовМетаданных.Добавить(); Строка.Коллекция = "БизнесПроцессы"; - Строка.КоллекцияВЕдЧисле = "БизнесПроцесс"; Строка.ПравоДобавления = Истина; Строка.ПравоИзменения = Истина; - Строка.ПравоУдаления = Истина; Строка = ПраваОбъектовМетаданных.Добавить(); Строка.Коллекция = "Задачи"; - Строка.КоллекцияВЕдЧисле = "Задача"; Строка.ПравоДобавления = Истина; Строка.ПравоИзменения = Истина; - Строка.ПравоУдаления = Истина; Возврат ПраваОбъектовМетаданных; @@ -311,13 +273,13 @@ СтрокаТаблицы = ТаблицаИдентификаторов.Найти(ПолноеИмя, "ПолноеИмя"); Если СтрокаТаблицы = Неопределено Тогда ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Ошибка при выполнении функции ОбщегоНазначения.ИдентификаторОбъектаМетаданных(). - | - |Для объекта метаданных ""%1"" - |не найден идентификатор - |в справочнике ""Идентификаторы объектов метаданных"".'") - + СтандартныеПодсистемыСервер.УточнениеОшибкиПараметровРаботыПрограммыДляРазработчика(), - ПолноеИмя); + НСтр("ru = 'Ошибка при выполнении функции ОбщегоНазначения.ИдентификаторОбъектаМетаданных(). + | + |Для объекта метаданных ""%1"" + |не найден идентификатор + |в справочнике ""Идентификаторы объектов метаданных"".'"), + ПолноеИмя) + + СтандартныеПодсистемыСервер.УточнениеОшибкиПараметровРаботыПрограммыДляРазработчика(); КонецЕсли; Если ТипЗнч(ОбъектМетаданных) = Тип("ОбъектМетаданных") Тогда @@ -345,7 +307,7 @@ ПолучитьМассивИмен = Ложь) ИменаКоллекций = Новый Массив; - ИмяТипа = Лев(ПолноеИмя, Найти(ПолноеИмя, ".") - 1); + ИмяТипа = Лев(ПолноеИмя, СтрНайти(ПолноеИмя, ".") - 1); Если ИмяТипа = "Справочник" Тогда ИменаКоллекций.Добавить("Реквизиты"); @@ -442,15 +404,15 @@ КонецЦикла; Иначе Для каждого Поле Из ОбъектМетаданных[ИмяКоллекции] Цикл - Если ИмяТипа = "ЖурналДокументов" И Поле.Имя = "Тип" - ИЛИ ИмяТипа = "ПланВидовХарактеристик" И Поле.Имя = "ТипЗначения" - ИЛИ ИмяТипа = "ПланСчетов" И Поле.Имя = "Вид" - ИЛИ ИмяТипа = "РегистрНакопления" И Поле.Имя = "ВидДвижения" - ИЛИ ИмяТипа = "РегистрБухгалтерии" И ИмяКоллекции = "СтандартныеРеквизиты" И Найти(Поле.Имя, "Субконто") > 0 Тогда - Продолжить; - КонецЕсли; - Если ИмяКоллекции = "Графы" ИЛИ - Поле.Тип.СодержитТип(ТипХранилищеЗначения) Тогда + Если ИмяТипа = "ЖурналДокументов" И Поле.Имя = "Тип" + ИЛИ ИмяТипа = "ПланВидовХарактеристик" И Поле.Имя = "ТипЗначения" + ИЛИ ИмяТипа = "ПланСчетов" И Поле.Имя = "Вид" + ИЛИ ИмяТипа = "РегистрНакопления" И Поле.Имя = "ВидДвижения" + ИЛИ ИмяТипа = "РегистрБухгалтерии" И ИмяКоллекции = "СтандартныеРеквизиты" И СтрНайти(Поле.Имя, "Субконто") > 0 Тогда + Продолжить; + КонецЕсли; + Если ИмяКоллекции = "Графы" + Или Поле.Тип.СодержитТип(ТипХранилищеЗначения) Тогда Продолжить; КонецЕсли; Если (ИмяКоллекции = "Измерения" ИЛИ ИмяКоллекции = "Ресурсы") diff --git a/SSL/src/InformationRegisters/ПравилаДляОбменаДанными/Forms/ЗагрузитьПравилаСинхронизацииДанных/Form.form b/SSL/src/InformationRegisters/ПравилаДляОбменаДанными/Forms/ЗагрузитьПравилаСинхронизацииДанных/Form.form index cffc9621b..d48dfd155 100644 --- a/SSL/src/InformationRegisters/ПравилаДляОбменаДанными/Forms/ЗагрузитьПравилаСинхронизацииДанных/Form.form +++ b/SSL/src/InformationRegisters/ПравилаДляОбменаДанными/Forms/ЗагрузитьПравилаСинхронизацииДанных/Form.form @@ -957,6 +957,10 @@ НеОстанавливатьПоОшибке Right + + OnChange + НеОстанавливатьПоОшибкеПриИзменении + НеОстанавливатьПоОшибкеExtendedTooltip 78 @@ -1285,7 +1289,6 @@ true true true - UseIfNecessary auto true @@ -1730,6 +1733,23 @@ true + + ИзмененыНастройкиРежимаОтладки + + <key>ru</key> + <value>Изменены настройки режима отладки</value> + + 26 + + Boolean + + + true + + + true + + ЗагрузитьПравила @@ -1754,7 +1774,7 @@ </action> <representation>TextPicture</representation> <modifiesStoredData>true</modifiesStoredData> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <formCommands> @@ -1778,7 +1798,7 @@ </action> <representation>TextPicture</representation> <modifiesStoredData>true</modifiesStoredData> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <formCommands> @@ -1804,7 +1824,7 @@ </handler> </action> <representation>Text</representation> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <parameters> diff --git a/SSL/src/InformationRegisters/ПравилаДляОбменаДанными/Forms/ЗагрузитьПравилаСинхронизацииДанных/Help/ru.html b/SSL/src/InformationRegisters/ПравилаДляОбменаДанными/Forms/ЗагрузитьПравилаСинхронизацииДанных/Help/ru.html index bc6e4db6c..29c2b788f 100644 --- a/SSL/src/InformationRegisters/ПравилаДляОбменаДанными/Forms/ЗагрузитьПравилаСинхронизацииДанных/Help/ru.html +++ b/SSL/src/InformationRegisters/ПравилаДляОбменаДанными/Forms/ЗагрузитьПравилаСинхронизацииДанных/Help/ru.html @@ -1,7 +1,7 @@ <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"><html xmlns:o="urn:schemas-microsoft-com:office:office"><head><meta content="text/html; charset=utf-8" http-equiv="Content-Type"></meta><link rel="stylesheet" type="text/css" href="v8help://service_book/service_style"></link><meta name="GENERATOR" content="MSHTML 9.00.8112.16421"></meta></head><body> <p style="mso-margin-top-alt: auto; mso-margin-bottom-alt: auto">Предназначена для контроля и замены комплекта правил для синхронизации данных. </p> <p style="mso-margin-top-alt: auto; mso-margin-bottom-alt: auto">Открывается по кнопке <strong>Загрузить комплект правил</strong> из настройки синхронизации данных.</p> -<p style="mso-margin-top-alt: auto; mso-margin-bottom-alt: auto">Настройка <a href="CommonForm.ОбменыДанными/Help">синхронизации данных</a> по умолчанию производится в соответствии с так называемыми <strong>Типовыми правилами обмена</strong>. <a href="InformationRegister.ПравилаДляОбменаДанными/Help">Правила обмена</a> состоят из <a href="InformationRegister.ПравилаДляОбменаДанными.Form.ПравилаКонвертацииОбъектов/Help">правил конвертации объектов</a> и <a href="InformationRegister.ПравилаДляОбменаДанными.Form.ПравилаРегистрацииОбъектов/Help">правил регистрации объектов</a>. </p> +<p style="mso-margin-top-alt: auto; mso-margin-bottom-alt: auto">Настройка <a href="CommonForm.СинхронизацияДанных/Help">синхронизации данных</a> по умолчанию производится в соответствии с так называемыми <strong>Типовыми правилами обмена</strong>. <a href="InformationRegister.ПравилаДляОбменаДанными/Help">Правила обмена</a> состоят из <a href="InformationRegister.ПравилаДляОбменаДанными.Form.ПравилаКонвертацииОбъектов/Help">правил конвертации объектов</a> и <a href="InformationRegister.ПравилаДляОбменаДанными.Form.ПравилаРегистрацииОбъектов/Help">правил регистрации объектов</a>. </p> <p style="mso-margin-top-alt: auto; mso-margin-bottom-alt: auto"><strong>Правила конвертации объектов</strong> можно открыть из настройки синхронизации данных по команде <strong>Еще - Загрузить правила конвертации объектов</strong>. Правила конвертации данных используются при синхронизации данных двух программ. </p> <p style="mso-margin-top-alt: auto; mso-margin-bottom-alt: auto"><strong>Правила регистрации объектов</strong> можно открыть из настройки синхронизации данных по команде<strong> Еще - Загрузить правила регистрации объектов</strong>.</p> <h3 style="mso-margin-top-alt: auto; mso-margin-bottom-alt: auto">Источник правил</h3> diff --git a/SSL/src/InformationRegisters/ПравилаДляОбменаДанными/Forms/ЗагрузитьПравилаСинхронизацииДанных/Module.bsl b/SSL/src/InformationRegisters/ПравилаДляОбменаДанными/Forms/ЗагрузитьПравилаСинхронизацииДанных/Module.bsl index fac3ce1b9..432c41f4b 100644 --- a/SSL/src/InformationRegisters/ПравилаДляОбменаДанными/Forms/ЗагрузитьПравилаСинхронизацииДанных/Module.bsl +++ b/SSL/src/InformationRegisters/ПравилаДляОбменаДанными/Forms/ЗагрузитьПравилаСинхронизацииДанных/Module.bsl @@ -44,7 +44,7 @@ ШаблонКаталогОбновлений = НСтр("ru = 'каталоге поставки программы ""%1""'"); ШаблонКаталогОбновлений = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонКаталогОбновлений, ИмяПрограммы); - ШаблонПользовательскийСайт = НСтр("ru = 'сайта поддержки пользователей системы ""1C:Предприятие 8""'"); + ШаблонПользовательскийСайт = НСтр("ru = 'сайта поддержки пользователей системы ""1С:Предприятие 8""'"); Если Не ПустаяСтрока(РасположениеКомплектаПравил.ПутьКФайлуКомплектаПравилНаПользовательскомСайте) Тогда ШаблонПользовательскийСайт = Новый ФорматированнаяСтрока(ШаблонПользовательскийСайт,,,, РасположениеКомплектаПравил.ПутьКФайлуКомплектаПравилНаПользовательскомСайте); КонецЕсли; @@ -231,6 +231,7 @@ &НаКлиенте Процедура ВключитьОтладкуВыгрузкиПриИзменении(Элемент) + ИзмененыНастройкиРежимаОтладки = Истина; Элементы.ВнешняяОбработкаДляОтладкиВыгрузки.Доступность = РежимОтладкиВыгрузки; КонецПроцедуры @@ -238,6 +239,7 @@ &НаКлиенте Процедура ВнешняяОбработкаДляОтладкиВыгрузкиНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка) + ИзмененыНастройкиРежимаОтладки = Истина; НастройкиДиалога = Новый Структура; НастройкиДиалога.Вставить("Фильтр", НСтр("ru = 'Внешняя обработка(*.epf)'") + "|*.epf" ); @@ -248,6 +250,7 @@ &НаКлиенте Процедура ВнешняяОбработкаДляОтладкиЗагрузкиНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка) + ИзмененыНастройкиРежимаОтладки = Истина; НастройкиДиалога = Новый Структура; НастройкиДиалога.Вставить("Фильтр", НСтр("ru = 'Внешняя обработка(*.epf)'") + "|*.epf" ); @@ -259,6 +262,7 @@ &НаКлиенте Процедура ВключитьОтладкуЗагрузкиПриИзменении(Элемент) + ИзмененыНастройкиРежимаОтладки = Истина; Элементы.ВнешняяОбработкаДляОтладкиЗагрузки.Доступность = РежимОтладкиЗагрузки; КонецПроцедуры @@ -266,6 +270,7 @@ &НаКлиенте Процедура ВключитьПротоколированиеОбменаДаннымиПриИзменении(Элемент) + ИзмененыНастройкиРежимаОтладки = Истина; Элементы.ФайлПротоколаОбмена.Доступность = РежимПротоколированияОбменаДанными; КонецПроцедуры @@ -273,6 +278,7 @@ &НаКлиенте Процедура ФайлПротоколаОбменаНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка) + ИзмененыНастройкиРежимаОтладки = Истина; НастройкиДиалога = Новый Структура; НастройкиДиалога.Вставить("Фильтр", НСтр("ru = 'Текстовый документ(*.txt)'")+ "|*.txt" ); НастройкиДиалога.Вставить("ПроверятьСуществованиеФайла", Ложь); @@ -291,14 +297,20 @@ &НаКлиенте Процедура ВключитьРежимОтладкиПриИзменении(Элемент) + ИзмененыНастройкиРежимаОтладки = Истина; Элементы.ГруппаНастройкиОтладки.Доступность = РежимОтладки; КонецПроцедуры +&НаКлиенте +Процедура НеОстанавливатьПоОшибкеПриИзменении(Элемент) + ИзмененыНастройкиРежимаОтладки = Истина; +КонецПроцедуры + &НаКлиенте Процедура ДекорацияИнформацияОПолученииПравилОбработкаНавигационнойСсылки(Элемент, НавигационнаяСсылка, СтандартнаяОбработка) - Если Найти(НавигационнаяСсылка, "http") = 0 Тогда + Если СтрНайти(НавигационнаяСсылка, "http") = 0 Тогда СтандартнаяОбработка = Ложь; @@ -387,6 +399,9 @@ СтандартныеПодсистемыКлиент.ПоказатьВопросПользователю(Оповещение, ОписаниеОшибки, Кнопки, ПараметрыФормы); Иначе + Если ИзмененыНастройкиРежимаОтладки Тогда + ЗагрузитьНастройкиРежимаОтладкиНаСервере(); + КонецЕсли; Закрыть(); КонецЕсли; КонецЕсли; @@ -437,6 +452,7 @@ Процедура ВыполнитьЗагрузкуПравил(Знач АдресПомещенногоФайла, Знач ИмяФайла, ОписаниеОшибки = Неопределено) Отказ = Ложь; + ИзмененыНастройкиРежимаОтладки = Ложь; Состояние(НСтр("ru = 'Выполняется загрузка правил в информационную базу...'")); ЗагрузитьПравилаНаСервере(Отказ, АдресПомещенногоФайла, ИмяФайла, ОписаниеОшибки); @@ -764,7 +780,7 @@ Фрагмент = Сред(Шаблон, Начало); - Позиция = Найти(Фрагмент, "%"); + Позиция = СтрНайти(Фрагмент, "%"); Если Позиция = 0 Тогда @@ -849,4 +865,25 @@ КонецЕсли; КонецПроцедуры +&НаСервере +Процедура ЗагрузитьНастройкиРежимаОтладкиНаСервере() + ЗаписиПравилКонвертации = РегистрыСведений.ПравилаДляОбменаДанными.СоздатьНаборЗаписей(); + ЗаписиПравилКонвертации.Отбор.ВидПравил.Установить(Перечисления.ВидыПравилДляОбменаДанными.ПравилаКонвертацииОбъектов); + ЗаписиПравилКонвертации.Отбор.ИмяПланаОбмена.Установить(ИмяПланаОбмена); + ЗаписиПравилКонвертации.Прочитать(); + Если ЗаписиПравилКонвертации.Количество() = 0 Тогда + Возврат; + КонецЕсли; + ЗаписьПравил = ЗаписиПравилКонвертации[0]; + ЗаписьПравил.ИмяФайлаОбработкиДляОтладкиВыгрузки = ИмяФайлаОбработкиДляОтладкиВыгрузки; + ЗаписьПравил.ИмяФайлаОбработкиДляОтладкиЗагрузки = ИмяФайлаОбработкиДляОтладкиЗагрузки; + ЗаписьПравил.ИмяФайлаПротоколаОбмена = ИмяФайлаПротоколаОбмена; + ЗаписьПравил.НеОстанавливатьПоОшибке = НеОстанавливатьПоОшибке; + ЗаписьПравил.РежимОтладки = РежимОтладки; + ЗаписьПравил.РежимОтладкиВыгрузки = РежимОтладкиВыгрузки; + ЗаписьПравил.РежимОтладкиЗагрузки = РежимОтладкиЗагрузки; + ЗаписьПравил.РежимПротоколированияОбменаДанными = РежимПротоколированияОбменаДанными; + ЗаписиПравилКонвертации.Записать(Истина); +КонецПроцедуры + #КонецОбласти diff --git a/SSL/src/InformationRegisters/ПравилаДляОбменаДанными/Forms/ПравилаКонвертацииОбъектов/Form.form b/SSL/src/InformationRegisters/ПравилаДляОбменаДанными/Forms/ПравилаКонвертацииОбъектов/Form.form index 193f4a508..491ae5a92 100644 --- a/SSL/src/InformationRegisters/ПравилаДляОбменаДанными/Forms/ПравилаКонвертацииОбъектов/Form.form +++ b/SSL/src/InformationRegisters/ПравилаДляОбменаДанными/Forms/ПравилаКонвертацииОбъектов/Form.form @@ -1336,7 +1336,6 @@ <autoFillCheck>true</autoFillCheck> <allowFormCustomize>true</allowFormCustomize> <enabled>true</enabled> - <verticalScroll>UseIfNecessary</verticalScroll> <showTitle>auto</showTitle> <showCloseButton>true</showCloseButton> <attributes> @@ -1433,7 +1432,7 @@ </action> <representation>TextPicture</representation> <modifiesStoredData>true</modifiesStoredData> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <formCommands> @@ -1456,7 +1455,7 @@ </handler> </action> <representation>TextPicture</representation> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <formCommands> @@ -1482,7 +1481,7 @@ </handler> </action> <representation>Text</representation> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <commandInterface> diff --git a/SSL/src/InformationRegisters/ПравилаДляОбменаДанными/Forms/ПравилаКонвертацииОбъектов/Help/ru.html b/SSL/src/InformationRegisters/ПравилаДляОбменаДанными/Forms/ПравилаКонвертацииОбъектов/Help/ru.html index 60a8b47e9..bbf5e4c3f 100644 --- a/SSL/src/InformationRegisters/ПравилаДляОбменаДанными/Forms/ПравилаКонвертацииОбъектов/Help/ru.html +++ b/SSL/src/InformationRegisters/ПравилаДляОбменаДанными/Forms/ПравилаКонвертацииОбъектов/Help/ru.html @@ -1,6 +1,6 @@ <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"><html xmlns:o="urn:schemas-microsoft-com:office:office"><head><meta content="text/html; charset=utf-8" http-equiv="Content-Type"></meta><link rel="stylesheet" type="text/css" href="v8help://service_book/service_style"></link><meta name="GENERATOR" content="MSHTML 9.00.8112.16421"></meta></head><body> <p style="mso-margin-top-alt: auto; mso-margin-bottom-alt: auto">Предназначена для контроля и замены правил конвертации данных. Правила конвертации данных используются при синхронизации данных двух программ. </p> -<p style="mso-margin-top-alt: auto; mso-margin-bottom-alt: auto">Настройка <a href="CommonForm.ОбменыДанными/Help">синхронизации данных</a> по умолчанию производится в соответствии с так называемыми <strong>Типовыми правилами обмена</strong>. <a href="InformationRegister.ПравилаДляОбменаДанными/Help">Правила обмена</a> состоят из правил конвертации объектов и <a href="InformationRegister.ПравилаДляОбменаДанными.Form.ПравилаРегистрацииОбъектов/Help">правил регистрации объектов</a>. </p> +<p style="mso-margin-top-alt: auto; mso-margin-bottom-alt: auto">Настройка <a href="CommonForm.СинхронизацияДанных/Help">синхронизации данных</a> по умолчанию производится в соответствии с так называемыми <strong>Типовыми правилами обмена</strong>. <a href="InformationRegister.ПравилаДляОбменаДанными/Help">Правила обмена</a> состоят из правил конвертации объектов и <a href="InformationRegister.ПравилаДляОбменаДанными.Form.ПравилаРегистрацииОбъектов/Help">правил регистрации объектов</a>. </p> <p style="mso-margin-top-alt: auto; mso-margin-bottom-alt: auto"><strong>Правила конвертации объектов</strong> можно открыть из настройки синхронизации данных по команде <strong>Еще - Загрузить правила конвертации объектов</strong>.</p> <h3 style="mso-margin-top-alt: auto; mso-margin-bottom-alt: auto">Источник правил</h3> <ul><li>Для стандартной синхронизации данных между типовыми конфигурациями используются типовые правила из конфигурации (имя макета правил конвертации, из которого были получены типовые правила, указывается).<strong> </strong> Однако в ряде случаев необходимо использовать правила из файла (например, если синхронизация ведется между базами с нетиповыми конфигурациями). diff --git a/SSL/src/InformationRegisters/ПравилаДляОбменаДанными/Forms/ПравилаРегистрацииОбъектов/Form.form b/SSL/src/InformationRegisters/ПравилаДляОбменаДанными/Forms/ПравилаРегистрацииОбъектов/Form.form index 9afdac62e..bc16d40c0 100644 --- a/SSL/src/InformationRegisters/ПравилаДляОбменаДанными/Forms/ПравилаРегистрацииОбъектов/Form.form +++ b/SSL/src/InformationRegisters/ПравилаДляОбменаДанными/Forms/ПравилаРегистрацииОбъектов/Form.form @@ -656,7 +656,6 @@ <autoFillCheck>true</autoFillCheck> <allowFormCustomize>true</allowFormCustomize> <enabled>true</enabled> - <verticalScroll>UseIfNecessary</verticalScroll> <showTitle>auto</showTitle> <showCloseButton>true</showCloseButton> <attributes> @@ -753,7 +752,7 @@ </action> <representation>TextPicture</representation> <modifiesStoredData>true</modifiesStoredData> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <formCommands> @@ -776,7 +775,7 @@ </handler> </action> <representation>TextPicture</representation> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <formCommands> @@ -802,7 +801,7 @@ </handler> </action> <representation>Text</representation> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <commandInterface> diff --git a/SSL/src/InformationRegisters/ПравилаДляОбменаДанными/Forms/ПравилаРегистрацииОбъектов/Help/ru.html b/SSL/src/InformationRegisters/ПравилаДляОбменаДанными/Forms/ПравилаРегистрацииОбъектов/Help/ru.html index 094874282..030b01871 100644 --- a/SSL/src/InformationRegisters/ПравилаДляОбменаДанными/Forms/ПравилаРегистрацииОбъектов/Help/ru.html +++ b/SSL/src/InformationRegisters/ПравилаДляОбменаДанными/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 9.00.8112.16421"></meta></head><body> <p style="mso-margin-top-alt: auto; mso-margin-bottom-alt: auto">Предназначена для контроля и замены правил регистрации данных. Правила регистрации данных предусмотрены для всех видов синхронизации данных. </p> -<p style="mso-margin-top-alt: auto; mso-margin-bottom-alt: auto">Настройка <a href="CommonForm.ОбменыДанными/Help">синхронизации данных</a> по умолчанию производится в соответствии с так называемыми <strong>Типовыми правилами обмена</strong>. <a href="InformationRegister.ПравилаДляОбменаДанными/Help">Правила обмена</a> состоят из <a href="InformationRegister.ПравилаДляОбменаДанными.Form.ПравилаКонвертацииОбъектов/Help">правил конвертации объектов</a> и правил регистрации объектов.</p> +<p style="mso-margin-top-alt: auto; mso-margin-bottom-alt: auto">Настройка <a href="CommonForm.СинхронизацияДанных/Help">синхронизации данных</a> по умолчанию производится в соответствии с так называемыми <strong>Типовыми правилами обмена</strong>. <a href="InformationRegister.ПравилаДляОбменаДанными/Help">Правила обмена</a> состоят из <a href="InformationRegister.ПравилаДляОбменаДанными.Form.ПравилаКонвертацииОбъектов/Help">правил конвертации объектов</a> и правил регистрации объектов.</p> <p style="mso-margin-top-alt: auto; mso-margin-bottom-alt: auto"><strong>Правила регистрации объектов</strong> можно открыть из настройки синхронизации данных по команде <strong>Еще - Загрузить правила регистрации объектов</strong>.</p> <h3 style="mso-margin-top-alt: auto; mso-margin-bottom-alt: auto">Источник правил</h3> <ul><li> diff --git a/SSL/src/InformationRegisters/ПравилаДляОбменаДанными/Forms/ПравилаРегистрацииОбъектов/Module.bsl b/SSL/src/InformationRegisters/ПравилаДляОбменаДанными/Forms/ПравилаРегистрацииОбъектов/Module.bsl index 104c21b2f..46d0b48a2 100644 --- a/SSL/src/InformationRegisters/ПравилаДляОбменаДанными/Forms/ПравилаРегистрацииОбъектов/Module.bsl +++ b/SSL/src/InformationRegisters/ПравилаДляОбменаДанными/Forms/ПравилаРегистрацииОбъектов/Module.bsl @@ -85,8 +85,7 @@ ПараметрыДиалога.Вставить("Заголовок", НСтр("ru = 'Укажите, из какого файла загрузить правила'")); ПараметрыДиалога.Вставить("Фильтр", НСтр("ru = 'Файлы правил регистрации (*.xml)'") + "|*.xml|" - + НСтр("ru = 'Архивы ZIP (*.zip)'") + "|*.zip" - ); + + НСтр("ru = 'Архивы ZIP (*.zip)'") + "|*.zip"); ПараметрыДиалога.Вставить("ПолноеИмяФайла", ЧастиИмени.ПолноеИмя); ПараметрыДиалога.Вставить("ИндексФильтра", ?( НРег(ЧастиИмени.Расширение) = ".zip", 1, 0) ); diff --git a/SSL/src/InformationRegisters/ПравилаДляОбменаДанными/Forms/ПроверкаПлановОбмена/Form.form b/SSL/src/InformationRegisters/ПравилаДляОбменаДанными/Forms/ПроверкаСинхронизацииДанных/Form.form similarity index 98% rename from SSL/src/InformationRegisters/ПравилаДляОбменаДанными/Forms/ПроверкаПлановОбмена/Form.form rename to SSL/src/InformationRegisters/ПравилаДляОбменаДанными/Forms/ПроверкаСинхронизацииДанных/Form.form index 91ea7cb6b..271a790b6 100644 --- a/SSL/src/InformationRegisters/ПравилаДляОбменаДанными/Forms/ПроверкаПлановОбмена/Form.form +++ b/SSL/src/InformationRegisters/ПравилаДляОбменаДанными/Forms/ПроверкаСинхронизацииДанных/Form.form @@ -217,7 +217,7 @@ <name>Проверено</name> </handler> </action> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <formCommands> @@ -235,7 +235,7 @@ <name>ПерейтиКСписку</name> </handler> </action> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <formCommands> @@ -253,7 +253,7 @@ <name>ЗакрытьФорму</name> </handler> </action> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <commandInterface> diff --git a/SSL/src/InformationRegisters/ПравилаДляОбменаДанными/Forms/ПроверкаПлановОбмена/Module.bsl b/SSL/src/InformationRegisters/ПравилаДляОбменаДанными/Forms/ПроверкаСинхронизацииДанных/Module.bsl similarity index 87% rename from SSL/src/InformationRegisters/ПравилаДляОбменаДанными/Forms/ПроверкаПлановОбмена/Module.bsl rename to SSL/src/InformationRegisters/ПравилаДляОбменаДанными/Forms/ПроверкаСинхронизацииДанных/Module.bsl index f1ebec3a2..5c4f628ae 100644 --- a/SSL/src/InformationRegisters/ПравилаДляОбменаДанными/Forms/ПроверкаПлановОбмена/Module.bsl +++ b/SSL/src/InformationRegisters/ПравилаДляОбменаДанными/Forms/ПроверкаСинхронизацииДанных/Module.bsl @@ -26,7 +26,7 @@ &НаСервере Процедура ОтметитьВыполнениеДела() - ВерсияМассив = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(Метаданные.Версия, "."); + ВерсияМассив = СтрРазделить(Метаданные.Версия, "."); ТекущаяВерсия = ВерсияМассив[0] + ВерсияМассив[1] + ВерсияМассив[2]; ХранилищеОбщихНастроек.Сохранить("ТекущиеДела", "ПланыОбмена", ТекущаяВерсия); diff --git a/SSL/src/InformationRegisters/ПравилаДляОбменаДанными/Forms/СообщениеОНеудачномОбновлении/Form.form b/SSL/src/InformationRegisters/ПравилаДляОбменаДанными/Forms/СообщениеОНеудачномОбновлении/Form.form index 8cc581b82..bfcadc96c 100644 --- a/SSL/src/InformationRegisters/ПравилаДляОбменаДанными/Forms/СообщениеОНеудачномОбновлении/Form.form +++ b/SSL/src/InformationRegisters/ПравилаДляОбменаДанными/Forms/СообщениеОНеудачномОбновлении/Form.form @@ -508,7 +508,7 @@ <name>Перезапустить</name> </handler> </action> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <formCommands> @@ -530,7 +530,7 @@ <name>ЗавершитьРаботу</name> </handler> </action> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <formCommands> @@ -552,7 +552,7 @@ <name>ПерейтиВЖурналРегистрации</name> </handler> </action> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <formCommands> @@ -574,7 +574,7 @@ <name>ЗагрузитьКомплектПравил</name> </handler> </action> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <parameters> diff --git a/SSL/src/InformationRegisters/ПравилаДляОбменаДанными/Forms/СообщениеОНеудачномОбновлении/Module.bsl b/SSL/src/InformationRegisters/ПравилаДляОбменаДанными/Forms/СообщениеОНеудачномОбновлении/Module.bsl index c9283cc61..fac7967cc 100644 --- a/SSL/src/InformationRegisters/ПравилаДляОбменаДанными/Forms/СообщениеОНеудачномОбновлении/Module.bsl +++ b/SSL/src/InformationRegisters/ПравилаДляОбменаДанными/Forms/СообщениеОНеудачномОбновлении/Module.bsl @@ -87,7 +87,7 @@ &НаСервере Функция СтрЗаменитьСВыделением(Строка, ПодстрокаПоиска, ПодстрокаЗамены) - ПозицияНачала = Найти(Строка, ПодстрокаПоиска); + ПозицияНачала = СтрНайти(Строка, ПодстрокаПоиска); МассивСтроки = Новый Массив; diff --git a/SSL/src/InformationRegisters/ПравилаДляОбменаДанными/Forms/ФормаСписка/Form.form b/SSL/src/InformationRegisters/ПравилаДляОбменаДанными/Forms/ФормаСписка/Form.form index 2670ff1c7..782281fd9 100644 --- a/SSL/src/InformationRegisters/ПравилаДляОбменаДанными/Forms/ФормаСписка/Form.form +++ b/SSL/src/InformationRegisters/ПравилаДляОбменаДанными/Forms/ФормаСписка/Form.form @@ -634,7 +634,6 @@ <autoFillCheck>true</autoFillCheck> <allowFormCustomize>true</allowFormCustomize> <enabled>true</enabled> - <verticalScroll>UseIfNecessary</verticalScroll> <showTitle>auto</showTitle> <showCloseButton>true</showCloseButton> <attributes> @@ -677,7 +676,7 @@ <name>ОбновитьВсеТиповыеПравила</name> </handler> </action> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <formCommands> @@ -695,7 +694,7 @@ <name>ИспользоватьТиповыеПравила</name> </handler> </action> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <commandInterface> diff --git a/SSL/src/InformationRegisters/ПравилаДляОбменаДанными/Help/ru.html b/SSL/src/InformationRegisters/ПравилаДляОбменаДанными/Help/ru.html index 533c350a7..b0c2ae300 100644 --- a/SSL/src/InformationRegisters/ПравилаДляОбменаДанными/Help/ru.html +++ b/SSL/src/InformationRegisters/ПравилаДляОбменаДанными/Help/ru.html @@ -1,6 +1,6 @@ <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"><html><head><meta content="text/html; charset=utf-8" http-equiv="Content-Type"></meta><link rel="stylesheet" type="text/css" href="v8help://service_book/service_style"></link><meta name="GENERATOR" content="MSHTML 9.00.8112.16421"></meta></head><body> -<p style="mso-margin-top-alt: auto; mso-margin-bottom-alt: auto">Настройка <a href="CommonForm.ОбменыДанными/Help">синхронизации данных</a> по умолчанию производится в соответствии с так называемыми <strong>Типовыми правилами обмена</strong>. Если эти правила устарели, то выполнение синхронизации данных приведет к очень серьезным ошибкам, порче информации. Поэтому при настройке новой синхронизации данных, а также при выходе очередного обновления любой из программ, участвующих в синхронизации данных, необходимо контролировать актуальность используемых типовых правил обмена. </p> -<p style="mso-margin-top-alt: auto; mso-margin-bottom-alt: auto">Типовые правила обмена состоят из <a href="InformationRegister.ПравилаДляОбменаДанными.Form.ПравилаКонвертацииОбъектов/Help">правил конвертации объектов</a> и <a href="InformationRegister.ПравилаДляОбменаДанными.Form.ПравилаРегистрацииОбъектов/Help">правил регистрации объектов</a>. Правила конвертации данных используются при синхронизации данных двух программ. Правила регистрации предусмотрены для всех видов <a href="CommonForm.ОбменыДанными/Help">синхронизации данных</a>. Комплект актуальных правил обмена публикуется на сайте технической поддержки <a href="http://users.v8.1c.ru">http://users.v8.1c.ru</a>. Исправительные версии правил обмена также публикуются на данном сайте.</p> +<p style="mso-margin-top-alt: auto; mso-margin-bottom-alt: auto">Настройка <a href="CommonForm.СинхронизацияДанных/Help">синхронизации данных</a> по умолчанию производится в соответствии с так называемыми <strong>Типовыми правилами обмена</strong>. Если эти правила устарели, то выполнение синхронизации данных приведет к очень серьезным ошибкам, порче информации. Поэтому при настройке новой синхронизации данных, а также при выходе очередного обновления любой из программ, участвующих в синхронизации данных, необходимо контролировать актуальность используемых типовых правил обмена. </p> +<p style="mso-margin-top-alt: auto; mso-margin-bottom-alt: auto">Типовые правила обмена состоят из <a href="InformationRegister.ПравилаДляОбменаДанными.Form.ПравилаКонвертацииОбъектов/Help">правил конвертации объектов</a> и <a href="InformationRegister.ПравилаДляОбменаДанными.Form.ПравилаРегистрацииОбъектов/Help">правил регистрации объектов</a>. Правила конвертации данных используются при синхронизации данных двух программ. Правила регистрации предусмотрены для всех видов <a href="CommonForm.СинхронизацияДанных/Help">синхронизации данных</a>. Комплект актуальных правил обмена публикуется на сайте технической поддержки <a href="http://users.v8.1c.ru">http://users.v8.1c.ru</a>. Исправительные версии правил обмена также публикуются на данном сайте.</p> <h3 style="mso-margin-top-alt: auto; mso-margin-bottom-alt: auto">Контроль актуальности правил синхронизации</h3> <ul><li> <div style="mso-margin-top-alt: auto; mso-margin-bottom-alt: auto">При проверке актуальности правил необходимо обратить внимание на следующие контролируемые параметры:</div> diff --git a/SSL/src/InformationRegisters/ПравилаДляОбменаДанными/ManagerModule.bsl b/SSL/src/InformationRegisters/ПравилаДляОбменаДанными/ManagerModule.bsl index f32e73ae0..72e92ad55 100644 --- a/SSL/src/InformationRegisters/ПравилаДляОбменаДанными/ManagerModule.bsl +++ b/SSL/src/InformationRegisters/ПравилаДляОбменаДанными/ManagerModule.bsl @@ -711,6 +711,55 @@ КонецФункции +Функция ИспользуютсяТиповыеПравила(ИмяПланаОбмена) Экспорт + ТекстЗапроса = " + |ВЫБРАТЬ + | ПравилаДляОбменаДанными.ПравилаXML КАК ПравилаXML + |ИЗ + | РегистрСведений.ПравилаДляОбменаДанными КАК ПравилаДляОбменаДанными + |ГДЕ + | ПравилаДляОбменаДанными.ИмяПланаОбмена = &ИмяПланаОбмена + | И ПравилаДляОбменаДанными.ВидПравил = ЗНАЧЕНИЕ(Перечисление.ВидыПравилДляОбменаДанными.ПравилаКонвертацииОбъектов) + | И ПравилаДляОбменаДанными.ПравилаЗагружены + |"; + + Запрос = Новый Запрос; + Запрос.Текст = ТекстЗапроса; + Запрос.УстановитьПараметр("ИмяПланаОбмена", ИмяПланаОбмена); + + Результат = Запрос.Выполнить(); + + Если Результат.Пустой() Тогда + Возврат Ложь; + КонецЕсли; + Выборка = Результат.Выбрать(); + Выборка.Следующий(); + + ДвоичныеДанныеПравил = Выборка.ПравилаXML.Получить(); + ИмяВременногоФайла = ПолучитьИмяВременногоФайла("xml"); + ДвоичныеДанныеПравил.Записать(ИмяВременногоФайла); + + ПравилаОбмена = Новый ЧтениеXML(); + ПравилаОбмена.ОткрытьФайл(ИмяВременногоФайла); + ПравилаТиповые = Ложь; + Пока ПравилаОбмена.Прочитать() Цикл + ИмяУзла = ПравилаОбмена.ЛокальноеИмя; + Если ИмяУзла = "ВерсияФормата" Тогда + Пока ПравилаОбмена.ПрочитатьАтрибут() Цикл + Если ПравилаОбмена.ЛокальноеИмя = "Типовые" Тогда + ПравилаТиповые = Истина; + Прервать; + КонецЕсли; + КонецЦикла; + Прервать; + КонецЕсли; + КонецЦикла; + ПравилаОбмена.Закрыть(); + УдалитьФайлы(ИмяВременногоФайла); + + Возврат ПравилаТиповые; +КонецФункции + Процедура ЗагрузитьИнформациюОПравилах(Отказ, АдресВременногоХранилища, СтрокаИнформацииОПравилах) Экспорт Перем ВидПравил; @@ -928,8 +977,7 @@ ОписаниеОшибки = Новый Структура; ОписаниеОшибки.Вставить("ТекстОшибки", НСтр("ru = 'Правила не могут быть загружены, т.к. они предназначены для программы ""%1"". Следует использовать правила из конфигурации или загрузить корректный комплект правил из файла.'")); - ОписаниеОшибки.ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ОписаниеОшибки.ТекстОшибки, - ДанныеОПравилах.СинонимКонфигурацииВПравилах); + ОписаниеОшибки.ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ОписаниеОшибки.ТекстОшибки, ДанныеОПравилах.СинонимКонфигурацииВПравилах); ОписаниеОшибки.Вставить("ВидОшибки", "НекорректнаяКонфигурация"); ОписаниеОшибки.Вставить("Картинка", БиблиотекаКартинок.Ошибка32); Возврат Ложь; @@ -954,8 +1002,7 @@ КонецЕсли; - ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ТекстОшибки, Метаданные.Синоним, - ВерсияВПравилахБезСборки, ВерсияКонфигурацииБезСборки); + ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ТекстОшибки, Метаданные.Синоним, ВерсияВПравилахБезСборки, ВерсияКонфигурацииБезСборки); ОписаниеОшибки = Новый Структура; ОписаниеОшибки.Вставить("ТекстОшибки", ТекстОшибки); diff --git a/SSL/src/InformationRegisters/ПравилаДляОбменаДанными/ПравилаДляОбменаДанными.mdo b/SSL/src/InformationRegisters/ПравилаДляОбменаДанными/ПравилаДляОбменаДанными.mdo index f8891c5d7..ce9f2180c 100644 --- a/SSL/src/InformationRegisters/ПравилаДляОбменаДанными/ПравилаДляОбменаДанными.mdo +++ b/SSL/src/InformationRegisters/ПравилаДляОбменаДанными/ПравилаДляОбменаДанными.mdo @@ -552,7 +552,7 @@ <usePurposes>MobileDevice</usePurposes> </forms> <forms uuid="4f8653e4-3f58-4bad-8ded-424fe7b1d18a"> - <name>ПроверкаПлановОбмена</name> + <name>ПроверкаСинхронизацииДанных</name> <synonym> <key>ru</key> <value>Проверка синхронизации данных</value> diff --git a/SSL/src/InformationRegisters/ПредопределенныеВариантыОтчетовВерсийРасширений/ManagerModule.bsl b/SSL/src/InformationRegisters/ПредопределенныеВариантыОтчетовВерсийРасширений/ManagerModule.bsl new file mode 100644 index 000000000..464add7c4 --- /dev/null +++ b/SSL/src/InformationRegisters/ПредопределенныеВариантыОтчетовВерсийРасширений/ManagerModule.bsl @@ -0,0 +1,36 @@ +#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда + +#Область СлужебныеПроцедурыИФункции + +// Записывает таблицу настроек в данные регистра по указанным измерениям. +Функция Набор(ТаблицаНастроек, Измерения, Ресурсы, ПоверхСуществующих) Экспорт + + НаборЗаписей = СоздатьНаборЗаписей(); + Для Каждого КлючИЗначение Из Измерения Цикл + НаборЗаписей.Отбор[КлючИЗначение.Ключ].Установить(КлючИЗначение.Значение, Истина); + ТаблицаНастроек.Колонки.Добавить(КлючИЗначение.Ключ); + ТаблицаНастроек.ЗаполнитьЗначения(КлючИЗначение.Значение, КлючИЗначение.Ключ); + КонецЦикла; + Для Каждого КлючИЗначение Из Ресурсы Цикл + ТаблицаНастроек.Колонки.Добавить(КлючИЗначение.Ключ); + ТаблицаНастроек.ЗаполнитьЗначения(КлючИЗначение.Значение, КлючИЗначение.Ключ); + КонецЦикла; + Если Не ПоверхСуществующих Тогда + НаборЗаписей.Прочитать(); + СтарыеЗаписи = НаборЗаписей.Выгрузить(); + ПоискПоИзмерениям = Новый Структура("Отчет, Вариант, ВерсияРасширений, КлючВарианта"); + Для Каждого СтараяЗапись Из СтарыеЗаписи Цикл + ЗаполнитьЗначенияСвойств(ПоискПоИзмерениям, СтараяЗапись); + Если ТаблицаНастроек.НайтиСтроки(ПоискПоИзмерениям).Количество() = 0 Тогда + ЗаполнитьЗначенияСвойств(ТаблицаНастроек.Добавить(), СтараяЗапись); + КонецЕсли; + КонецЦикла; + КонецЕсли; + НаборЗаписей.Загрузить(ТаблицаНастроек); + Возврат НаборЗаписей; + +КонецФункции + +#КонецОбласти + +#КонецЕсли \ No newline at end of file diff --git a/SSL/src/InformationRegisters/ПредопределенныеВариантыОтчетовВерсийРасширений/ПредопределенныеВариантыОтчетовВерсийРасширений.mdo b/SSL/src/InformationRegisters/ПредопределенныеВариантыОтчетовВерсийРасширений/ПредопределенныеВариантыОтчетовВерсийРасширений.mdo new file mode 100644 index 000000000..7807b537a --- /dev/null +++ b/SSL/src/InformationRegisters/ПредопределенныеВариантыОтчетовВерсийРасширений/ПредопределенныеВариантыОтчетовВерсийРасширений.mdo @@ -0,0 +1,133 @@ +<?xml version="1.0" encoding="UTF-8"?> +<mdclass:InformationRegister xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:core="http://g5.1c.ru/v8/dt/mcore" xmlns:mdclass="http://g5.1c.ru/v8/dt/metadata/mdclass" uuid="2a77eb39-0487-4fb0-8d5b-d4a27592ea60"> + <producedTypes> + <selectionType typeId="a8e0ed91-51a6-4499-95f7-3b89d9e75b5b" valueTypeId="0ef1f33e-5504-4c3c-bb7e-165c8fbb42ef"/> + <listType typeId="b5274f48-6f4e-4f89-b932-eb80da5cb858" valueTypeId="6cc71dbf-d57d-4745-ae80-e554edcb17c7"/> + <managerType typeId="f6ce55c6-73ee-4fc6-9695-f63086426b15" valueTypeId="b2dcd7e7-5483-4adb-bfbe-eb2029fe168e"/> + <recordSetType typeId="0d6ec72c-124c-47e0-a55e-aed847e8eaad" valueTypeId="933a0e04-0615-41b4-b6c0-2744120abc12"/> + <recordKeyType typeId="9a1a6c2c-d3d3-4d51-9547-de7eb4ad3c0b" valueTypeId="88798264-58d3-4af9-ba63-357379722624"/> + <recordType typeId="eb275038-cce6-410f-b912-8a2fbb39e43b" valueTypeId="a2ad58d7-b739-4adf-a7f0-2fa1fbac0001"/> + <recordManagerType typeId="b3d91532-f9bd-4a60-9365-381e83228d2b" valueTypeId="86ca3ae9-5daa-45d4-9de0-3ab64fa0436b"/> + </producedTypes> + <name>ПредопределенныеВариантыОтчетовВерсийРасширений</name> + <synonym> + <key>ru</key> + <value>Предопределенные варианты отчетов версий расширений</value> + </synonym> + <editType>InDialog</editType> + <standardAttributes> + <dataHistory>Use</dataHistory> + <name>Active</name> + <fillValue xsi:type="core:UndefinedValue"/> + <fullTextSearch>Use</fullTextSearch> + <minValue xsi:type="core:UndefinedValue"/> + <maxValue xsi:type="core:UndefinedValue"/> + </standardAttributes> + <standardAttributes> + <dataHistory>Use</dataHistory> + <name>LineNumber</name> + <fillValue xsi:type="core:UndefinedValue"/> + <fullTextSearch>Use</fullTextSearch> + <minValue xsi:type="core:UndefinedValue"/> + <maxValue xsi:type="core:UndefinedValue"/> + </standardAttributes> + <standardAttributes> + <dataHistory>Use</dataHistory> + <name>Recorder</name> + <fillValue xsi:type="core:UndefinedValue"/> + <fullTextSearch>Use</fullTextSearch> + <minValue xsi:type="core:UndefinedValue"/> + <maxValue xsi:type="core:UndefinedValue"/> + </standardAttributes> + <standardAttributes> + <dataHistory>Use</dataHistory> + <name>Period</name> + <fillValue xsi:type="core:UndefinedValue"/> + <fillChecking>ShowError</fillChecking> + <fullTextSearch>Use</fullTextSearch> + <minValue xsi:type="core:UndefinedValue"/> + <maxValue xsi:type="core:UndefinedValue"/> + </standardAttributes> + <dataLockControlMode>Managed</dataLockControlMode> + <dimensions uuid="19a18193-c5d3-4e56-86c5-5a81c525e9ad"> + <name>Отчет</name> + <synonym> + <key>ru</key> + <value>Отчет</value> + </synonym> + <comment>Не "Ведущее", чтобы отчет не удалился по расписанию.</comment> + <type> + <types>CatalogRef.ИдентификаторыОбъектовРасширений</types> + </type> + <minValue xsi:type="core:UndefinedValue"/> + <maxValue xsi:type="core:UndefinedValue"/> + <indexing>Index</indexing> + <fullTextSearch>Use</fullTextSearch> + <dataHistory>Use</dataHistory> + <fillFromFillingValue>true</fillFromFillingValue> + <fillValue xsi:type="core:UndefinedValue"/> + <mainFilter>true</mainFilter> + </dimensions> + <dimensions uuid="c208fcc0-d7b2-435b-963a-e18c97727f8f"> + <name>Вариант</name> + <synonym> + <key>ru</key> + <value>Вариант</value> + </synonym> + <comment>Не "Ведущее", чтобы вариант не удалился по расписанию.</comment> + <type> + <types>CatalogRef.ПредопределенныеВариантыОтчетовРасширений</types> + </type> + <minValue xsi:type="core:UndefinedValue"/> + <maxValue xsi:type="core:UndefinedValue"/> + <indexing>Index</indexing> + <fullTextSearch>Use</fullTextSearch> + <dataHistory>Use</dataHistory> + <fillFromFillingValue>true</fillFromFillingValue> + <fillValue xsi:type="core:UndefinedValue"/> + <mainFilter>true</mainFilter> + </dimensions> + <dimensions uuid="ac5db038-8bc3-45ff-9e8d-04ea9fef6d43"> + <name>ВерсияРасширений</name> + <synonym> + <key>ru</key> + <value>Версия расширений</value> + </synonym> + <type> + <types>CatalogRef.ВерсииРасширений</types> + </type> + <toolTip> + <key>ru</key> + <value>Обобщенная версия метаданных набора расширений</value> + </toolTip> + <minValue xsi:type="core:UndefinedValue"/> + <maxValue xsi:type="core:UndefinedValue"/> + <fillChecking>ShowError</fillChecking> + <denyIncompleteValues>true</denyIncompleteValues> + <dataHistory>Use</dataHistory> + <fillFromFillingValue>true</fillFromFillingValue> + <fillValue xsi:type="core:UndefinedValue"/> + <master>true</master> + <mainFilter>true</mainFilter> + </dimensions> + <dimensions uuid="bf11f7b1-6332-4499-ba48-b94bc10ef869"> + <name>КлючВарианта</name> + <synonym> + <key>ru</key> + <value>Ключ варианта</value> + </synonym> + <type> + <types>String</types> + <stringQualifiers> + <length>430</length> + </stringQualifiers> + </type> + <minValue xsi:type="core:UndefinedValue"/> + <maxValue xsi:type="core:UndefinedValue"/> + <indexing>Index</indexing> + <fullTextSearch>Use</fullTextSearch> + <dataHistory>Use</dataHistory> + <fillValue xsi:type="core:StringValue"/> + <mainFilter>true</mainFilter> + </dimensions> +</mdclass:InformationRegister> diff --git a/SSL/src/InformationRegisters/ПрисоединенныеФайлы/ПрисоединенныеФайлы.mdo b/SSL/src/InformationRegisters/ПрисоединенныеФайлы/ПрисоединенныеФайлы.mdo index 0fbb5ab2c..eadf20f8e 100644 --- a/SSL/src/InformationRegisters/ПрисоединенныеФайлы/ПрисоединенныеФайлы.mdo +++ b/SSL/src/InformationRegisters/ПрисоединенныеФайлы/ПрисоединенныеФайлы.mdo @@ -75,12 +75,7 @@ <value>Присоединенный файл</value> </synonym> <type> - <types>CatalogRef.ЭлектронноеПисьмоИсходящееПрисоединенныеФайлы</types> - <types>CatalogRef.ЭлектронноеПисьмоВходящееПрисоединенныеФайлы</types> - <types>CatalogRef.ЗапланированноеВзаимодействиеПрисоединенныеФайлы</types> - <types>CatalogRef.СообщениеSMSПрисоединенныеФайлы</types> - <types>CatalogRef.ВстречаПрисоединенныеФайлы</types> - <types>CatalogRef.ТелефонныйЗвонокПрисоединенныеФайлы</types> + <types>DefinedType.ПрисоединенныйФайл</types> </type> <toolTip> <key>ru</key> diff --git a/SSL/src/InformationRegisters/ПубличныеИдентификаторыСинхронизируемыхОбъектов/ManagerModule.bsl b/SSL/src/InformationRegisters/ПубличныеИдентификаторыСинхронизируемыхОбъектов/ManagerModule.bsl index a886083df..b859ee099 100644 --- a/SSL/src/InformationRegisters/ПубличныеИдентификаторыСинхронизируемыхОбъектов/ManagerModule.bsl +++ b/SSL/src/InformationRegisters/ПубличныеИдентификаторыСинхронизируемыхОбъектов/ManagerModule.bsl @@ -50,8 +50,8 @@ |ВЫБРАТЬ | Идентификатор |ИЗ РегистрСведений.ПубличныеИдентификаторыСинхронизируемыхОбъектов - |ГДЕ УзелИнформационнойБазы = &УзелИнформационнойБазы И - | Ссылка = &Ссылка"); + |ГДЕ УзелИнформационнойБазы = &УзелИнформационнойБазы + | И Ссылка = &Ссылка"); Запрос.УстановитьПараметр("УзелИнформационнойБазы", УзелИнформационнойБазы); Запрос.УстановитьПараметр("Ссылка", СсылкаНаОбъект); Выборка = Запрос.Выполнить().Выбрать(); @@ -61,8 +61,7 @@ ИначеЕсли Выборка.Количество() > 1 Тогда ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Для ссылки <%1> и узла <%2> назначено несколько уникальных идентификаторов.'"), - Строка(СсылкаНаОбъект), Строка(УзелИнформационнойБазы) - ); + Строка(СсылкаНаОбъект), Строка(УзелИнформационнойБазы)); КонецЕсли; // Получение УИД текущей ссылки. Возврат СокрЛП(СсылкаНаОбъект.УникальныйИдентификатор()); diff --git a/SSL/src/InformationRegisters/ПутиКПрограммамЭлектроннойПодписиИШифрованияНаСерверахLinux/Commands/ПутиКПрограммеНаСерверахLinux/CommandModule.bsl b/SSL/src/InformationRegisters/ПутиКПрограммамЭлектроннойПодписиИШифрованияНаСерверахLinux/Commands/ПутиКПрограммеНаСерверахLinux/CommandModule.bsl index 5904f5ceb..3e40d352d 100644 --- a/SSL/src/InformationRegisters/ПутиКПрограммамЭлектроннойПодписиИШифрованияНаСерверахLinux/Commands/ПутиКПрограммеНаСерверахLinux/CommandModule.bsl +++ b/SSL/src/InformationRegisters/ПутиКПрограммамЭлектроннойПодписиИШифрованияНаСерверахLinux/Commands/ПутиКПрограммеНаСерверахLinux/CommandModule.bsl @@ -1,11 +1,19 @@ +#Область ОбработчикиСобытий &НаКлиенте Процедура ОбработкаКоманды(ПараметрКоманды, ПараметрыВыполненияКоманды) // Вставить содержимое обработчика. - ПараметрыФормы = Новый Структура("Отбор", Новый Структура("Программа", ПараметрКоманды)); + Отбор = Новый Структура("Программа", ПараметрКоманды); + ПараметрыФормы = Новый Структура("Отбор", Отбор); + ОткрытьФорму("РегистрСведений.ПутиКПрограммамЭлектроннойПодписиИШифрованияНаСерверахLinux.ФормаСписка", - ПараметрыФормы, ПараметрыВыполненияКоманды.Источник, ПараметрыВыполненияКоманды.Уникальность, - ПараметрыВыполненияКоманды.Окно, ПараметрыВыполненияКоманды.НавигационнаяСсылка); + ПараметрыФормы, + ПараметрыВыполненияКоманды.Источник, + ПараметрыВыполненияКоманды.Уникальность, + ПараметрыВыполненияКоманды.Окно, + ПараметрыВыполненияКоманды.НавигационнаяСсылка); КонецПроцедуры + +#КонецОбласти diff --git a/SSL/src/InformationRegisters/ПутиКПрограммамЭлектроннойПодписиИШифрованияНаСерверахLinux/Forms/ФормаЗаписи/Module.bsl b/SSL/src/InformationRegisters/ПутиКПрограммамЭлектроннойПодписиИШифрованияНаСерверахLinux/Forms/ФормаЗаписи/Module.bsl index 30659e731..55201bbe8 100644 --- a/SSL/src/InformationRegisters/ПутиКПрограммамЭлектроннойПодписиИШифрованияНаСерверахLinux/Forms/ФормаЗаписи/Module.bsl +++ b/SSL/src/InformationRegisters/ПутиКПрограммамЭлектроннойПодписиИШифрованияНаСерверахLinux/Forms/ФормаЗаписи/Module.bsl @@ -7,8 +7,8 @@ И ЗначениеЗаполнено(Параметры.ЗначенияЗаполнения.Программа) Тогда АвтоЗаголовок = Ложь; - Заголовок = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Путь к программе %1 на сервере Linux'"), Параметры.ЗначенияЗаполнения.Программа); + Заголовок = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Путь к программе %1 на сервере Linux'"), + Параметры.ЗначенияЗаполнения.Программа); Элементы.Программа.Видимость = Ложь; КонецЕсли; diff --git a/SSL/src/InformationRegisters/ПутиКПрограммамЭлектроннойПодписиИШифрованияНаСерверахLinux/Forms/ФормаСписка/Module.bsl b/SSL/src/InformationRegisters/ПутиКПрограммамЭлектроннойПодписиИШифрованияНаСерверахLinux/Forms/ФормаСписка/Module.bsl index 53c92ae85..153eaee75 100644 --- a/SSL/src/InformationRegisters/ПутиКПрограммамЭлектроннойПодписиИШифрованияНаСерверахLinux/Forms/ФормаСписка/Module.bsl +++ b/SSL/src/InformationRegisters/ПутиКПрограммамЭлектроннойПодписиИШифрованияНаСерверахLinux/Forms/ФормаСписка/Module.bsl @@ -9,8 +9,7 @@ Программа = Параметры.Отбор.Программа; АвтоЗаголовок = Ложь; - Заголовок = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Пути к программе %1 на серверах Linux'"), Программа); + Заголовок = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Пути к программе %1 на серверах Linux'"), Программа); Элементы.СписокПрограмма.Видимость = Ложь; КонецЕсли; diff --git a/SSL/src/InformationRegisters/РезультатыОбменаДанными/Forms/Форма/Attributes/Коллизии/ExtInfo/ListSettings.dcss b/SSL/src/InformationRegisters/РезультатыОбменаДанными/Forms/Форма/Attributes/Коллизии/ExtInfo/ListSettings.dcss index ccf0c2431..daa30ff4e 100644 --- a/SSL/src/InformationRegisters/РезультатыОбменаДанными/Forms/Форма/Attributes/Коллизии/ExtInfo/ListSettings.dcss +++ b/SSL/src/InformationRegisters/РезультатыОбменаДанными/Forms/Форма/Attributes/Коллизии/ExtInfo/ListSettings.dcss @@ -25,7 +25,7 @@ <appearance> <dcscor:item xsi:type="SettingsParameterValue"> <dcscor:parameter>ЦветТекста</dcscor:parameter> - <dcscor:value xsi:type="v8ui:Color">style:НедоступныеДанныеЦвет</dcscor:value> + <dcscor:value xsi:type="v8ui:Color">style:ТекстЗапрещеннойЯчейкиЦвет</dcscor:value> </dcscor:item> </appearance> </item> diff --git a/SSL/src/InformationRegisters/РезультатыОбменаДанными/Forms/Форма/Attributes/НезаполненныеРеквизиты/ExtInfo/ListSettings.dcss b/SSL/src/InformationRegisters/РезультатыОбменаДанными/Forms/Форма/Attributes/НезаполненныеРеквизиты/ExtInfo/ListSettings.dcss index a2497efd1..0e7a73be0 100644 --- a/SSL/src/InformationRegisters/РезультатыОбменаДанными/Forms/Форма/Attributes/НезаполненныеРеквизиты/ExtInfo/ListSettings.dcss +++ b/SSL/src/InformationRegisters/РезультатыОбменаДанными/Forms/Форма/Attributes/НезаполненныеРеквизиты/ExtInfo/ListSettings.dcss @@ -21,7 +21,7 @@ <appearance> <dcscor:item xsi:type="SettingsParameterValue"> <dcscor:parameter>ЦветТекста</dcscor:parameter> - <dcscor:value xsi:type="v8ui:Color">style:НедоступныеДанныеЦвет</dcscor:value> + <dcscor:value xsi:type="v8ui:Color">style:ТекстЗапрещеннойЯчейкиЦвет</dcscor:value> </dcscor:item> </appearance> </item> diff --git a/SSL/src/InformationRegisters/РезультатыОбменаДанными/Forms/Форма/Attributes/НепринятыеПоДате/ExtInfo/ListSettings.dcss b/SSL/src/InformationRegisters/РезультатыОбменаДанными/Forms/Форма/Attributes/НепринятыеПоДате/ExtInfo/ListSettings.dcss index 552f549d0..033fe4270 100644 --- a/SSL/src/InformationRegisters/РезультатыОбменаДанными/Forms/Форма/Attributes/НепринятыеПоДате/ExtInfo/ListSettings.dcss +++ b/SSL/src/InformationRegisters/РезультатыОбменаДанными/Forms/Форма/Attributes/НепринятыеПоДате/ExtInfo/ListSettings.dcss @@ -25,7 +25,7 @@ <appearance> <dcscor:item xsi:type="SettingsParameterValue"> <dcscor:parameter>ЦветТекста</dcscor:parameter> - <dcscor:value xsi:type="v8ui:Color">style:НедоступныеДанныеЦвет</dcscor:value> + <dcscor:value xsi:type="v8ui:Color">style:ТекстЗапрещеннойЯчейкиЦвет</dcscor:value> </dcscor:item> </appearance> </item> diff --git a/SSL/src/InformationRegisters/РезультатыОбменаДанными/Forms/Форма/Attributes/НепроведенныеДокументы/ExtInfo/ListSettings.dcss b/SSL/src/InformationRegisters/РезультатыОбменаДанными/Forms/Форма/Attributes/НепроведенныеДокументы/ExtInfo/ListSettings.dcss index a2497efd1..61e6fb4bb 100644 --- a/SSL/src/InformationRegisters/РезультатыОбменаДанными/Forms/Форма/Attributes/НепроведенныеДокументы/ExtInfo/ListSettings.dcss +++ b/SSL/src/InformationRegisters/РезультатыОбменаДанными/Forms/Форма/Attributes/НепроведенныеДокументы/ExtInfo/ListSettings.dcss @@ -9,22 +9,6 @@ <userSettingID>88619765-ccb3-46c6-ac52-38e9c992ebd4</userSettingID> </order> <conditionalAppearance> - <item> - <selection/> - <filter> - <item xsi:type="FilterItemComparison"> - <left xsi:type="dcscor:Field">Пропущена</left> - <comparisonType>Equal</comparisonType> - <right xsi:type="xs:boolean">true</right> - </item> - </filter> - <appearance> - <dcscor:item xsi:type="SettingsParameterValue"> - <dcscor:parameter>ЦветТекста</dcscor:parameter> - <dcscor:value xsi:type="v8ui:Color">style:НедоступныеДанныеЦвет</dcscor:value> - </dcscor:item> - </appearance> - </item> <viewMode>Normal</viewMode> <userSettingID>b75fecce-942b-4aed-abc9-e6a02e460fb3</userSettingID> </conditionalAppearance> diff --git a/SSL/src/InformationRegisters/РезультатыОбменаДанными/Forms/Форма/Form.form b/SSL/src/InformationRegisters/РезультатыОбменаДанными/Forms/Форма/Form.form index a3178f36a..e3eb77259 100644 --- a/SSL/src/InformationRegisters/РезультатыОбменаДанными/Forms/Форма/Form.form +++ b/SSL/src/InformationRegisters/РезультатыОбменаДанными/Forms/Форма/Form.form @@ -3411,7 +3411,7 @@ <representationInContextMenu>Auto</representationInContextMenu> </items> <items xsi:type="form:FormGroup"> - <name>КоллизииКонтекстноеМенюГруппаРазедлитель</name> + <name>КоллизииКонтекстноеМенюГруппаРазделитель</name> <id>349</id> <items xsi:type="form:Button"> <name>КоллизииКонтекстноеМенюНеИгнорироватьКонфликт</name> @@ -3446,10 +3446,14 @@ </userVisible> <title> <key>ru</key> - <value>Коллизии контекстное меню группа разедлитель</value> + <value>Коллизии контекстное меню группа разделитель</value> + + ru + Коллизии контекстное меню группа разделитель + - КоллизииКонтекстноеМенюГруппаРазедлительExtendedTooltip + КоллизииКонтекстноеМенюГруппаРазделительРасширеннаяПодсказка 439 Label true @@ -3478,7 +3482,7 @@ Left - Form.Item.Коллизии.StandardCommand.CopyToClipboard + 0 Normal Auto true @@ -3664,7 +3668,7 @@ НепринятыеПоДате.Дата - НепринятыеПоДатеДатаExtendedTooltip + НепринятыеПоДатеДатаРасширеннаяПодсказка 494 Label true @@ -4369,7 +4373,7 @@ Auto - НепринятыеПоДатеКонтекстноеМенюПринятьВресию + НепринятыеПоДатеКонтекстноеМенюПринятьВерсию 323 true true @@ -4377,7 +4381,7 @@ true - НепринятыеПоДатеКонтекстноеМенюПринятьВресиюExtendedTooltip + НепринятыеПоДатеКонтекстноеМенюПринятьВерсиюРасширеннаяПодсказка 469 Label true @@ -4570,7 +4574,7 @@ Left - Form.Item.НепринятыеПоДате.StandardCommand.CopyToClipboard + 0 Normal Auto true @@ -4600,6 +4604,9 @@ true true true + + НепринятыеПоДате.DefaultPicture + None None None @@ -4627,9 +4634,6 @@ true - - Items.НепринятыеПоДате.CurrentData.ПричинаЗапрета - НепринятыеПоДатеПричинаЗапретаПодробноExtendedTooltip 498 @@ -4757,7 +4761,6 @@ true true true - UseIfNecessary auto true @@ -4776,9 +4779,6 @@ true - - НепроведенныеДокументы.ТипПроблемы - НепроведенныеДокументы.ДатаВозникновения @@ -4910,9 +4910,6 @@ true - - НезаполненныеРеквизиты.ТипПроблемы - НезаполненныеРеквизиты.ДатаВозникновения @@ -4975,45 +4972,6 @@ true - - Коллизии.АвторВерсии - - - Коллизии.АвторТекущейВерсии - - - Коллизии.АвторЭтойВерсии - - - Коллизии.БылЗагружен - - - Коллизии.ВерсияПропущена - - - Коллизии.ДатаВерсии - - - Коллизии.ДатаДругойВерсии - - - Коллизии.ДатаТекущейВерсии - - - Коллизии.ДатаЭтойВерсии - - - Коллизии.НомерВерсии - - - Коллизии.НомерТекущейВерсии - - - Коллизии.Объект - - - Коллизии.ЭтаВерсияПринята - Коллизии.АвторДругойВерсии @@ -5039,29 +4997,15 @@ Коллизии.ТипСтрокой - ВЫБРАТЬ РАЗРЕШЕННЫЕ - ВерсииДругойПрограммы.ДатаВерсии КАК Дата, - ВерсииДругойПрограммы.Объект КАК Ссылка, - ТИПЗНАЧЕНИЯ(ВерсииДругойПрограммы.Объект) КАК ТипСтрокой, - ВерсииЭтойПрограммы.НомерВерсии КАК НомерЭтойВерсии, - ВерсииДругойПрограммы.НомерВерсии КАК НомерДругойВерсии, - ВерсииДругойПрограммы.АвторВерсии КАК АвторДругойВерсии, - ВЫБОР - КОГДА ВерсииДругойПрограммы.ТипВерсииОбъекта = ЗНАЧЕНИЕ(Перечисление.ТипыВерсийОбъекта.ПринятыеДанныеПоКоллизии) - ТОГДА ИСТИНА - ИНАЧЕ ЛОЖЬ - КОНЕЦ КАК ДругаяВерсияПринята, - ВерсииДругойПрограммы.ВерсияПроигнорирована КАК ВерсияПроигнорирована -ИЗ - РегистрСведений.ВерсииОбъектов КАК ВерсииДругойПрограммы - ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ВерсииОбъектов КАК ВерсииЭтойПрограммы - ПО ВерсииДругойПрограммы.Объект = ВерсииЭтойПрограммы.Объект - И (ВерсииДругойПрограммы.НомерВерсии = ВерсииЭтойПрограммы.НомерВерсии + 1) -ГДЕ - НЕ(ВерсииДругойПрограммы.ТипВерсииОбъекта <> ЗНАЧЕНИЕ(Перечисление.ТипыВерсийОбъекта.ПринятыеДанныеПоКоллизии) - И ВерсииДругойПрограммы.ТипВерсииОбъекта <> ЗНАЧЕНИЕ(Перечисление.ТипыВерсийОбъекта.НеПринятыеДанныеПоКоллизии)) - InformationRegister.ВерсииОбъектов - true + ВЫБРАТЬ + NULL КАК Дата, + NULL КАК Ссылка, + NULL КАК ТипСтрокой, + NULL КАК НомерЭтойВерсии, + NULL КАК НомерДругойВерсии, + NULL КАК АвторДругойВерсии, + NULL КАК ДругаяВерсияПринята, + NULL КАК ВерсияПроигнорирована true true true @@ -5084,63 +5028,12 @@ true - - НепринятыеПоДате.АвторВерсии - - - НепринятыеПоДате.АвторНепринятойВерсии - - - НепринятыеПоДате.АвторТекущейВерсии - - - НепринятыеПоДате.АвторЭтойВерсии - - - НепринятыеПоДате.ВерсияПропущена - - - НепринятыеПоДате.ДатаВерсии - - - НепринятыеПоДате.ДатаДругойВерсии - - - НепринятыеПоДате.ДатаНепринятойВерсии - - - НепринятыеПоДате.ДатаТекущейВерсии - - - НепринятыеПоДате.ДатаТекущйВерсии - - - НепринятыеПоДате.ДатаЭтойВерсии - - - НепринятыеПоДате.ЕстьВБазе - - - НепринятыеПоДате.Комментарий - - - НепринятыеПоДате.НомерВерсии - - - НепринятыеПоДате.НомерНепринятойВерсии - - - НепринятыеПоДате.НомерТекущейВерсии - - - НепринятыеПоДате.Объект - - - НепринятыеПоДате.ТипВерсииОбъекта - НепринятыеПоДате.АвторДругойВерсии + + НепринятыеПоДате.ДругаяВерсияПринята + НепринятыеПоДате.НовыйОбъект @@ -5150,9 +5043,6 @@ НепринятыеПоДате.НомерЭтойВерсии - - НепринятыеПоДате.ПричинаЗапрета - НепринятыеПоДате.Ссылка @@ -5160,30 +5050,17 @@ НепринятыеПоДате.ТипСтрокой - ВЫБРАТЬ РАЗРЕШЕННЫЕ - НепринятаяВерсия.ДатаВерсии КАК Дата, - НепринятаяВерсия.Объект КАК Ссылка, - НепринятаяВерсия.Комментарий КАК ПричинаЗапрета, - ВЫБОР - КОГДА НепринятаяВерсия.ТипВерсииОбъекта = ЗНАЧЕНИЕ(Перечисление.ТипыВерсийОбъекта.НепринятыеДанныеПоДатеЗапретаОбъектСуществует) - ТОГДА ЛОЖЬ - ИНАЧЕ ИСТИНА - КОНЕЦ КАК НовыйОбъект, - ЕСТЬNULL(НепринятаяВерсия.НомерВерсии, 0) КАК НомерДругойВерсии, - НепринятаяВерсия.АвторВерсии КАК АвторДругойВерсии, - ЕСТЬNULL(ТекущаяВерсия.НомерВерсии, 0) КАК НомерЭтойВерсии, - ТИПЗНАЧЕНИЯ(НепринятаяВерсия.Объект) КАК ТипСтрокой, - НепринятаяВерсия.ВерсияПроигнорирована -ИЗ - РегистрСведений.ВерсииОбъектов КАК НепринятаяВерсия - ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ВерсииОбъектов КАК ТекущаяВерсия - ПО НепринятаяВерсия.Объект = ТекущаяВерсия.Объект - И (НепринятаяВерсия.НомерВерсии = ТекущаяВерсия.НомерВерсии + 1) -ГДЕ - НЕ(НепринятаяВерсия.ТипВерсииОбъекта <> ЗНАЧЕНИЕ(Перечисление.ТипыВерсийОбъекта.НепринятыеДанныеПоДатеЗапретаОбъектСуществует) - И НепринятаяВерсия.ТипВерсииОбъекта <> ЗНАЧЕНИЕ(Перечисление.ТипыВерсийОбъекта.НепринятыеДанныеПоДатеЗапретаОбъектНеСуществует)) - InformationRegister.ВерсииОбъектов - true + ВЫБРАТЬ + NULL КАК Дата, + NULL КАК Ссылка, + NULL КАК ТипСтрокой, + NULL КАК НомерЭтойВерсии, + NULL КАК НовыйОбъект, + NULL КАК НомерДругойВерсии, + NULL КАК АвторДругойВерсии, + NULL КАК ДругаяВерсияПринята, + NULL КАК ВерсияПроигнорирована + true true true @@ -5342,7 +5219,7 @@ ИгнорироватьДокумент - Auto + DontUse Auto @@ -5364,7 +5241,7 @@ НеИгнорироватьДокумент - Auto + DontUse Auto @@ -5387,7 +5264,7 @@ TextPicture - Auto + DontUse Auto @@ -5413,7 +5290,7 @@ Обновить - Auto + DontUse Auto @@ -5439,7 +5316,7 @@ TextPicture - Auto + DontUse Auto @@ -5461,7 +5338,7 @@ ИгнорироватьОбъект - Auto + DontUse Auto @@ -5484,7 +5361,7 @@ TextPicture - Auto + DontUse Auto @@ -5506,7 +5383,7 @@ НеИгнорироватьОбъект - Auto + DontUse Auto @@ -5528,7 +5405,7 @@ ОткрытьВерсиюНепринятые - Auto + DontUse Auto @@ -5554,7 +5431,7 @@ TextPicture - Auto + DontUse Auto @@ -5576,7 +5453,7 @@ ОткрытьВерсиюДоКонфликта - Auto + DontUse Auto @@ -5602,7 +5479,7 @@ TextPicture - Auto + DontUse Auto @@ -5629,7 +5506,7 @@ TextPicture - Auto + DontUse Auto @@ -5655,7 +5532,7 @@ TextPicture - Auto + DontUse Auto @@ -5677,7 +5554,7 @@ ИгнорироватьНепринятый - Auto + DontUse Auto @@ -5699,7 +5576,7 @@ НеИгнорироватьКонфликт - Auto + DontUse Auto @@ -5721,7 +5598,7 @@ НеИгнорироватьНепринятый - Auto + DontUse Auto @@ -5743,7 +5620,7 @@ ПринятьВерсиюНепринятые - Auto + DontUse Auto @@ -5765,7 +5642,7 @@ ОткрытьВерсиюКонфликта - Auto + DontUse Auto @@ -5787,7 +5664,7 @@ ОткрытьВерсиюНепринятыеВЭтойПрограмме - Auto + DontUse Auto @@ -5809,7 +5686,7 @@ ПоказыватьПроигнорированныеНепроведенные - Auto + DontUse Auto @@ -5831,7 +5708,7 @@ ПоказыватьПроигнорированныеНезаполненные - Auto + DontUse Auto @@ -5853,7 +5730,7 @@ ПоказыватьПроигнорированныеКонфликты - Auto + DontUse Auto @@ -5875,7 +5752,7 @@ ПоказыватьПроигнорированныеНепринятые - Auto + DontUse Auto @@ -5897,7 +5774,7 @@ ИзменитьРезультатКонфликта - Auto + DontUse Auto diff --git a/SSL/src/InformationRegisters/РезультатыОбменаДанными/Forms/Форма/Module.bsl b/SSL/src/InformationRegisters/РезультатыОбменаДанными/Forms/Форма/Module.bsl index 136ab09c6..4287e9caf 100644 --- a/SSL/src/InformationRegisters/РезультатыОбменаДанными/Forms/Форма/Module.bsl +++ b/SSL/src/InformationRegisters/РезультатыОбменаДанными/Forms/Форма/Module.bsl @@ -4,6 +4,8 @@ &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) + УстановитьУсловноеОформление(); + Если Параметры.Свойство("АвтоТест") Тогда Возврат; КонецЕсли; @@ -25,19 +27,67 @@ ИспользуетсяВерсионирование = ОбменДаннымиПовтИсп.ИспользуетсяВерсионирование(, Истина); - Если Не ИспользуетсяВерсионирование Тогда - - Коллизии.ТекстЗапроса = ""; - НепринятыеПоДате.ТекстЗапроса = ""; - Элементы.СтраницаКоллизии.Видимость = Ложь; - Элементы.СтраницаНепринятыеПоДатеЗапрета.Видимость = Ложь; - - ИначеЕсли Не ИспользуетсяДатыЗапретаИзменения Тогда - - НепринятыеПоДате.ТекстЗапроса = ""; - Элементы.СтраницаНепринятыеПоДатеЗапрета.Видимость = Ложь; + ТекстЗапросаКоллизии = "ВЫБРАТЬ РАЗРЕШЕННЫЕ + | ВерсииДругойПрограммы.ДатаВерсии КАК Дата, + | ВерсииДругойПрограммы.Объект КАК Ссылка, + | ТИПЗНАЧЕНИЯ(ВерсииДругойПрограммы.Объект) КАК ТипСтрокой, + | ВерсииЭтойПрограммы.НомерВерсии КАК НомерЭтойВерсии, + | ВерсииДругойПрограммы.НомерВерсии КАК НомерДругойВерсии, + | ВерсииДругойПрограммы.АвторВерсии КАК АвторДругойВерсии, + | ВЫБОР + | КОГДА ВерсииДругойПрограммы.ТипВерсииОбъекта = ЗНАЧЕНИЕ(Перечисление.ТипыВерсийОбъекта.ПринятыеДанныеПоКоллизии) + | ТОГДА ИСТИНА + | ИНАЧЕ ЛОЖЬ + | КОНЕЦ КАК ДругаяВерсияПринята, + | ВерсииДругойПрограммы.ВерсияПроигнорирована КАК ВерсияПроигнорирована + |ИЗ + | РегистрСведений.ВерсииОбъектов КАК ВерсииДругойПрограммы + | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ВерсииОбъектов КАК ВерсииЭтойПрограммы + | ПО ВерсииДругойПрограммы.Объект = ВерсииЭтойПрограммы.Объект + | И (ВерсииДругойПрограммы.НомерВерсии = ВерсииЭтойПрограммы.НомерВерсии + 1) + |ГДЕ + | НЕ(ВерсииДругойПрограммы.ТипВерсииОбъекта <> ЗНАЧЕНИЕ(Перечисление.ТипыВерсийОбъекта.ПринятыеДанныеПоКоллизии) + | И ВерсииДругойПрограммы.ТипВерсииОбъекта <> ЗНАЧЕНИЕ(Перечисление.ТипыВерсийОбъекта.НеПринятыеДанныеПоКоллизии))"; + ТекстЗапросаНепринятыеПоДате = "ВЫБРАТЬ РАЗРЕШЕННЫЕ + | НепринятаяВерсия.ДатаВерсии КАК Дата, + | НепринятаяВерсия.Объект КАК Ссылка, + | НепринятаяВерсия.Комментарий КАК ПричинаЗапрета, + | ВЫБОР + | КОГДА НепринятаяВерсия.ТипВерсииОбъекта = ЗНАЧЕНИЕ(Перечисление.ТипыВерсийОбъекта.НепринятыйПоДатеЗапретаОбъектСуществуетВБазе) + | ТОГДА ЛОЖЬ + | ИНАЧЕ ИСТИНА + | КОНЕЦ КАК НовыйОбъект, + | ЕСТЬNULL(НепринятаяВерсия.НомерВерсии, 0) КАК НомерДругойВерсии, + | НепринятаяВерсия.АвторВерсии КАК АвторДругойВерсии, + | ЕСТЬNULL(ТекущаяВерсия.НомерВерсии, 0) КАК НомерЭтойВерсии, + | ТИПЗНАЧЕНИЯ(НепринятаяВерсия.Объект) КАК ТипСтрокой, + | НепринятаяВерсия.ВерсияПроигнорирована + |ИЗ + | РегистрСведений.ВерсииОбъектов КАК НепринятаяВерсия + | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ВерсииОбъектов КАК ТекущаяВерсия + | ПО НепринятаяВерсия.Объект = ТекущаяВерсия.Объект + | И (НепринятаяВерсия.НомерВерсии = ТекущаяВерсия.НомерВерсии + 1) + |ГДЕ + | НЕ(НепринятаяВерсия.ТипВерсииОбъекта <> ЗНАЧЕНИЕ(Перечисление.ТипыВерсийОбъекта.НепринятыйПоДатеЗапретаОбъектСуществуетВБазе) + | И НепринятаяВерсия.ТипВерсииОбъекта <> ЗНАЧЕНИЕ(Перечисление.ТипыВерсийОбъекта.НепринятыйПоДатеЗапретаОбъектНеСуществуетВБазе))"; + + Если ИспользуетсяВерсионирование Тогда + Коллизии.ТекстЗапроса = ТекстЗапросаКоллизии; + Коллизии.ПроизвольныйЗапрос = Истина; + Коллизии.ОсновнаяТаблица = "РегистрСведений.ВерсииОбъектов"; + Коллизии.ДинамическоеСчитываниеДанных = Истина; КонецЕсли; + + Если ИспользуетсяВерсионирование И ИспользуетсяДатыЗапретаИзменения Тогда + НепринятыеПоДате.ТекстЗапроса = ТекстЗапросаНепринятыеПоДате; + НепринятыеПоДате.ПроизвольныйЗапрос = Истина; + НепринятыеПоДате.ОсновнаяТаблица = "РегистрСведений.ВерсииОбъектов"; + НепринятыеПоДате.ДинамическоеСчитываниеДанных = Истина; + КонецЕсли; + + Элементы.СтраницаКоллизии.Видимость = ИспользуетсяВерсионирование; + Элементы.СтраницаНепринятыеПоДатеЗапрета.Видимость = ИспользуетсяВерсионирование И ИспользуетсяДатыЗапретаИзменения; // Устанавливаем отборы динамических списков и сохраняем их в реквизите для управления ими. НастроитьОтборыДинамическихСписков(НастройкиОтборовДинамическихСписков); @@ -686,14 +736,13 @@ Продолжить; КонецЕсли; Запрос = Новый Запрос; - Запрос.УстановитьПараметр("ЭтотУзел", ПланыОбмена[ИмяПланаОбмена].ЭтотУзел()); Запрос.Текст = "ВЫБРАТЬ РАЗРЕШЕННЫЕ | ТаблицаПланаОбмена.Ссылка КАК УзелОбмена |ИЗ | &ТаблицаПланаОбмена КАК ТаблицаПланаОбмена |ГДЕ - | ТаблицаПланаОбмена.Ссылка <> &ЭтотУзел + | НЕ ТаблицаПланаОбмена.ЭтотУзел | И ТаблицаПланаОбмена.Ссылка.ПометкаУдаления = ЛОЖЬ | |УПОРЯДОЧИТЬ ПО @@ -1145,7 +1194,7 @@ Для Каждого Страница Из Элементы.РезультатыОбменаДанными.ПодчиненныеЭлементы Цикл - Если Найти(Страница.Заголовок, "(") Тогда + Если СтрНайти(Страница.Заголовок, "(") Тогда Элементы.РезультатыОбменаДанными.ТекущаяСтраница = Страница; Прервать; КонецЕсли; @@ -1156,4 +1205,19 @@ КонецПроцедуры +&НаСервере +Процедура УстановитьУсловноеОформление() + + НепроведенныеДокументы.УсловноеОформление.Элементы.Очистить(); + Элемент = НепроведенныеДокументы.УсловноеОформление.Элементы.Добавить(); + + ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); + ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Пропущена"); + ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно; + ОтборЭлемента.ПравоеЗначение = Истина; + + Элемент.Оформление.УстановитьЗначениеПараметра("ЦветТекста", ЦветаСтиля.ТекстЗапрещеннойЯчейкиЦвет); + +КонецПроцедуры + #КонецОбласти diff --git a/SSL/src/InformationRegisters/РезультатыОбменаДанными/Help/ru.html b/SSL/src/InformationRegisters/РезультатыОбменаДанными/Help/ru.html index 82424bb50..36c865ebb 100644 --- a/SSL/src/InformationRegisters/РезультатыОбменаДанными/Help/ru.html +++ b/SSL/src/InformationRegisters/РезультатыОбменаДанными/Help/ru.html @@ -1,6 +1,6 @@

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

      -

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

      +

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

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

      Отборы

      Для удобства просмотра предусмотрены отборы:

      diff --git a/SSL/src/InformationRegisters/РезультатыОбменаДанными/ManagerModule.bsl b/SSL/src/InformationRegisters/РезультатыОбменаДанными/ManagerModule.bsl index e97746f9a..628ab935a 100644 --- a/SSL/src/InformationRegisters/РезультатыОбменаДанными/ManagerModule.bsl +++ b/SSL/src/InformationRegisters/РезультатыОбменаДанными/ManagerModule.bsl @@ -1,5 +1,31 @@ #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда +#Область СлужебныйПрограммныйИнтерфейс + +Процедура ЗарегистрироватьУстранениеПроблемы(Источник, ТипПроблемы) Экспорт + + Если Источник.ОбменДанными.Загрузка Тогда + Возврат; + КонецЕсли; + + Если Источник.ЭтоНовый() Тогда + Возврат; + КонецЕсли; + + Если ОбщегоНазначенияПовтИсп.ДоступноИспользованиеРазделенныхДанных() Тогда + + СсылкаНаИсточник = Источник.Ссылка; + + НовоеЗначениеПометкиУдаления = Источник.ПометкаУдаления; + + ОбменДаннымиВызовСервера.ЗарегистрироватьУстранениеПроблемы(СсылкаНаИсточник, ТипПроблемы, НовоеЗначениеПометкиУдаления); + + КонецЕсли; + +КонецПроцедуры + +#КонецОбласти + #Область СлужебныеПроцедурыИФункции Процедура ЗарегистрироватьОшибкуПроверкиОбъекта(Ссылка, УзелИнформационнойБазы, Причина, ТипПроблемы) Экспорт @@ -123,28 +149,6 @@ КонецФункции -Процедура ЗарегистрироватьУстранениеПроблемы(Источник, ТипПроблемы) Экспорт - - Если Источник.ОбменДанными.Загрузка Тогда - Возврат; - КонецЕсли; - - Если Источник.ЭтоНовый() Тогда - Возврат; - КонецЕсли; - - Если ОбщегоНазначенияПовтИсп.ДоступноИспользованиеРазделенныхДанных() Тогда - - СсылкаНаИсточник = Источник.Ссылка; - - НовоеЗначениеПометкиУдаления = Источник.ПометкаУдаления; - - ОбменДаннымиВызовСервера.ЗарегистрироватьУстранениеПроблемы(СсылкаНаИсточник, ТипПроблемы, НовоеЗначениеПометкиУдаления); - - КонецЕсли; - -КонецПроцедуры - Процедура ОчиститьСсылкиНаУзелИнформационнойБазы(Знач УзелИнформационнойБазы) Экспорт Если Не ОбщегоНазначенияПовтИсп.ДоступноИспользованиеРазделенныхДанных() Тогда diff --git a/SSL/src/InformationRegisters/СведенияОПользователях/Forms/ФормаЗаписи/Form.form b/SSL/src/InformationRegisters/СведенияОПользователях/Forms/ФормаЗаписи/Form.form new file mode 100644 index 000000000..afd2b55ba --- /dev/null +++ b/SSL/src/InformationRegisters/СведенияОПользователях/Forms/ФормаЗаписи/Form.form @@ -0,0 +1,573 @@ + + + + ГруппаПользователь + 28 + + Пользователь + 1 + true + true + + true + + + Запись.Пользователь + + + ПользовательРасширеннаяПодсказка + 3 + Label + true + true + + Left + + + + ПользовательКонтекстноеМеню + 2 + true + + InputField + Enter + true + Left + true + + true + true + true + true + true + true + Normal + + + true + true + + true + + + <key>ru</key> + <value>Группа пользователь</value> + + + ГруппаПользовательРасширеннаяПодсказка + 29 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + NormalSeparation + true + true + Auto + Auto + + + + ГруппаНастройки + 26 + + ПотребоватьСменуПароляПриВходе + 15 + true + true + + true + + + Запись.ПотребоватьСменуПароляПриВходе + + Right + + ПотребоватьСменуПароляПриВходеРасширеннаяПодсказка + 17 + Label + true + true + + Left + + + + ПотребоватьСменуПароляПриВходеКонтекстноеМеню + 16 + true + + CheckBoxField + Enter + true + Left + true + + + + СрокДействияНеОграничен + 35 + true + true + + true + + + Запись.СрокДействияНеОграничен + + Right + + СрокДействияНеОграниченРасширеннаяПодсказка + 37 + Label + true + true + + Left + + + + СрокДействияНеОграниченКонтекстноеМеню + 36 + true + + CheckBoxField + Enter + true + Left + true + + + + СрокДействия + 18 + true + true + + true + + + Запись.СрокДействия + + + СрокДействияРасширеннаяПодсказка + 20 + Label + true + true + + Left + + + + СрокДействияКонтекстноеМеню + 19 + true + + InputField + Enter + true + Left + true + + true + true + true + true + true + true + Normal + + + + ГруппаПросрочка + 30 + + ПросрочкаРаботыВПрограммеДоЗапрещенияВхода + 21 + true + true + + true + + + Запись.ПросрочкаРаботыВПрограммеДоЗапрещенияВхода + + Left + + ПросрочкаРаботыВПрограммеДоЗапрещенияВходаРасширеннаяПодсказка + 23 + Label + true + true + + Left + + + + ПросрочкаРаботыВПрограммеДоЗапрещенияВходаКонтекстноеМеню + 22 + true + + InputField + Enter + true + Left + true + + true + true + true + true + true + true + Normal + + + + ПояснениеПросрочкаРаботыВПрограммеДоЗапрещенияВхода + 32 + + <key>ru</key> + <value>дн.</value> + + true + true + + true + + + ПояснениеПросрочкаРаботыВПрограммеДоЗапрещенияВходаРасширеннаяПодсказка + 34 + Label + true + true + + Left + + + + ПояснениеПросрочкаРаботыВПрограммеДоЗапрещенияВходаКонтекстноеМеню + 33 + true + + Label + true + true + + Left + + + true + true + + true + + + <key>ru</key> + <value>Группа просрочка</value> + + + ГруппаПросрочкаРасширеннаяПодсказка + 31 + Label + true + true + + Left + + + UsualGroup + + Auto + true + true + Auto + Auto + + + true + true + + true + + + <key>ru</key> + <value>Настройки</value> + + + ГруппаНастройкиРасширеннаяПодсказка + 27 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + NormalSeparation + true + true + auto + Auto + Auto + + + + ГруппаСведения + 24 + + ДатаПоследнейАктивности + 4 + true + true + + true + + + Запись.ДатаПоследнейАктивности + + + ДатаПоследнейАктивностиРасширеннаяПодсказка + 6 + Label + true + true + + Left + + + + ДатаПоследнейАктивностиКонтекстноеМеню + 5 + true + + InputField + Enter + true + Left + true + + true + true + true + true + true + true + Normal + + + + ДатаАвтоматическогоЗапрещенияВхода + 7 + true + true + + true + + + Запись.ДатаАвтоматическогоЗапрещенияВхода + + + ДатаАвтоматическогоЗапрещенияВходаРасширеннаяПодсказка + 9 + Label + true + true + + Left + + + + ДатаАвтоматическогоЗапрещенияВходаКонтекстноеМеню + 8 + true + + InputField + Enter + true + Left + true + + true + true + true + true + true + true + Normal + + + + ДатаНачалаИспользованияПароля + 12 + true + true + + true + + + Запись.ДатаНачалаИспользованияПароля + + + ДатаНачалаИспользованияПароляРасширеннаяПодсказка + 14 + Label + true + true + + Left + + + + ДатаНачалаИспользованияПароляКонтекстноеМеню + 13 + true + + InputField + Enter + true + Left + true + + true + true + true + true + true + true + Normal + + + true + true + + true + + + <key>ru</key> + <value>Сведения</value> + + + ГруппаСведенияРасширеннаяПодсказка + 25 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + NormalSeparation + true + true + auto + Auto + Auto + + + + ФормаКоманднаяПанель + -1 + + ФормаВключитьВозможностьРедактирования + 10 + true + true + + true + + + ФормаВключитьВозможностьРедактированияExtendedTooltip + 11 + Label + true + true + + Left + + + Form.Command.ВключитьВозможностьРедактирования + Normal + Auto + true + true + UserCmds + Auto + InAdditionalSubmenu + + Left + true + + + OnCreateAtServer + ПриСозданииНаСервере + + LockOwner + true + true + true + Vertical + true + true + true + auto + true + + Запись + 1 + + InformationRegisterRecordManager.СведенияОПользователях + + + true + + + true + +
      true
      + true +
      + + ВключитьВозможностьРедактирования + + <key>ru</key> + <value>Включить возможность редактирования</value> + + 1 + + ru + Включить возможность редактирования только для целей поиска неисправности (требуется углубленное понимание работы механизма) + + + true + + + + ВключитьВозможностьРедактирования + + + DontUse + Auto + + + + + + +
      diff --git a/SSL/src/InformationRegisters/СведенияОПользователях/Forms/ФормаЗаписи/Module.bsl b/SSL/src/InformationRegisters/СведенияОПользователях/Forms/ФормаЗаписи/Module.bsl new file mode 100644 index 000000000..266dc08c4 --- /dev/null +++ b/SSL/src/InformationRegisters/СведенияОПользователях/Forms/ФормаЗаписи/Module.bsl @@ -0,0 +1,26 @@ + +#Область ОбработчикиСобытийФормы + +&НаСервере +Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) + + Если Параметры.Свойство("АвтоТест") Тогда // Возврат при получении формы для анализа. + Возврат; + КонецЕсли; + + ТолькоПросмотр = Истина; + +КонецПроцедуры + +#КонецОбласти + +#Область ОбработчикиКомандФормы + +&НаКлиенте +Процедура ВключитьВозможностьРедактирования(Команда) + + ТолькоПросмотр = Ложь; + +КонецПроцедуры + +#КонецОбласти diff --git a/SSL/src/InformationRegisters/СведенияОПользователях/Forms/ФормаСписка/Attributes/Список/ExtInfo/ListSettings.dcss b/SSL/src/InformationRegisters/СведенияОПользователях/Forms/ФормаСписка/Attributes/Список/ExtInfo/ListSettings.dcss new file mode 100644 index 000000000..61e6fb4bb --- /dev/null +++ b/SSL/src/InformationRegisters/СведенияОПользователях/Forms/ФормаСписка/Attributes/Список/ExtInfo/ListSettings.dcss @@ -0,0 +1,17 @@ + + + + Normal + dfcece9d-5077-440b-b6b3-45a5cb4538eb + + + Normal + 88619765-ccb3-46c6-ac52-38e9c992ebd4 + + + Normal + b75fecce-942b-4aed-abc9-e6a02e460fb3 + + Normal + 911b6018-f537-43e8-a417-da56b22f9aec + diff --git a/SSL/src/InformationRegisters/СведенияОПользователях/Forms/ФормаСписка/Form.form b/SSL/src/InformationRegisters/СведенияОПользователях/Forms/ФормаСписка/Form.form new file mode 100644 index 000000000..c5138c19a --- /dev/null +++ b/SSL/src/InformationRegisters/СведенияОПользователях/Forms/ФормаСписка/Form.form @@ -0,0 +1,671 @@ + + + + ГруппаПользовательскихНастроек + 1 + true + true + + true + + + <key>ru</key> + <value>Группа пользовательских настроек</value> + + false + + ГруппаПользовательскихНастроекРасширеннаяПодсказка + 2 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + WeakSeparation + true + true + Auto + Auto + + + + КоманднаяПанель + 25 + + ФормаВключитьВозможностьРедактирования + 27 + true + true + + true + + + ФормаВключитьВозможностьРедактированияExtendedTooltip + 28 + Label + true + true + + Left + + + Form.Command.ВключитьВозможностьРедактирования + Normal + Auto + true + true + UserCmds + Auto + InAdditionalSubmenu + + true + true + + true + + + <key>ru</key> + <value>Командная панель</value> + + + КоманднаяПанельРасширеннаяПодсказка + 26 + Label + true + true + + Left + + + CommandBar + + Left + Form + + + + Список + 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 + + + + ПотребоватьСменуПароляПриВходе + 32 + + <key>ru</key> + <value>Потребовать +смену пароля +при входе</value> + + true + true + + true + + + Список.ПотребоватьСменуПароляПриВходе + + + ПотребоватьСменуПароляПриВходеРасширеннаяПодсказка + 34 + Label + true + true + + Left + + + + ПотребоватьСменуПароляПриВходеКонтекстноеМеню + 33 + true + + CheckBoxField + Enter + true + Left + true + + + + СрокДействияНеОграничен + 41 + + <key>ru</key> + <value>Срок +действия +не ограничен</value> + + true + true + + true + + + Список.СрокДействияНеОграничен + + + СрокДействияНеОграниченРасширеннаяПодсказка + 43 + Label + true + true + + Left + + + + СрокДействияНеОграниченКонтекстноеМеню + 42 + true + + CheckBoxField + Enter + true + Left + true + + + + СрокДействия + 35 + true + true + + true + + + Список.СрокДействия + + + СрокДействияРасширеннаяПодсказка + 37 + Label + true + true + + Left + + + + СрокДействияКонтекстноеМеню + 36 + true + + LabelField + Enter + true + Left + true + + true + true + + + + ПросрочкаРаботыВПрограммеДоЗапрещенияВхода + 38 + + <key>ru</key> + <value>Просрочка работы в +программе до +запрещения входа</value> + + true + true + + true + + + Список.ПросрочкаРаботыВПрограммеДоЗапрещенияВхода + + + ПросрочкаРаботыВПрограммеДоЗапрещенияВходаРасширеннаяПодсказка + 40 + Label + true + true + + Left + + + + ПросрочкаРаботыВПрограммеДоЗапрещенияВходаКонтекстноеМеню + 39 + true + + LabelField + Enter + true + Left + true + + 15 + true + true + + + + ДатаПоследнейАктивности + 19 + + <key>ru</key> + <value>Дата +последней +активности</value> + + true + true + + true + + + Список.ДатаПоследнейАктивности + + true + + ДатаПоследнейАктивностиРасширеннаяПодсказка + 21 + Label + true + true + + Left + + + + ДатаПоследнейАктивностиКонтекстноеМеню + 20 + true + + LabelField + Enter + true + Left + true + + 10 + true + true + + + + ДатаАвтоматическогоЗапрещенияВхода + 22 + + <key>ru</key> + <value>Дата +автоматического +запрещения входа</value> + + true + true + + true + + + Список.ДатаАвтоматическогоЗапрещенияВхода + + true + + ДатаАвтоматическогоЗапрещенияВходаРасширеннаяПодсказка + 24 + Label + true + true + + Left + + + + ДатаАвтоматическогоЗапрещенияВходаКонтекстноеМеню + 23 + true + + LabelField + Enter + true + Left + true + + 14 + true + true + + + + ДатаНачалаИспользованияПароля + 29 + + <key>ru</key> + <value>Дата начала +использования +пароля</value> + + true + true + + true + + + Список.ДатаНачалаИспользованияПароля + + + ДатаНачалаИспользованияПароляРасширеннаяПодсказка + 31 + Label + true + true + + Left + + + + ДатаНачалаИспользованияПароляКонтекстноеМеню + 30 + true + + LabelField + Enter + true + Left + true + + 12 + true + true + + + + ПоследнийИспользуемыйКлиент + 44 + true + true + + true + + + Список.ПоследнийИспользуемыйКлиент + + + ПоследнийИспользуемыйКлиентРасширеннаяПодсказка + 46 + Label + true + true + + Left + + + + ПоследнийИспользуемыйКлиентКонтекстноеМеню + 45 + true + + InputField + Enter + true + Left + true + + 20 + true + true + true + true + true + true + Normal + + + 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
      + 3 + 1 + AutoUse + AutoUse + true + true + Auto + Auto + ExpandTopLevel + true + true + true + + Список.DefaultPicture + + None + None + None + true + + 60 + + 0001-01-01T00:00:00 + 0001-01-01T00:00:00 + + + true + true + ГруппаПользовательскихНастроек + +
      + + ФормаКоманднаяПанель + -1 + Left + + + OnCreateAtServer + ПриСозданииНаСервере + + 85 + 10 + DontBlock + true + true + true + Vertical + true + true + true + auto + true + + Список + 1 + + DynamicList + + + true + + + true + +
      true
      + + InformationRegister.СведенияОПользователях + true + true + true + true + +
      + + ВключитьВозможностьРедактирования + + <key>ru</key> + <value>Включить возможность редактирования</value> + + 1 + + ru + Включить возможность редактирования только для целей поиска неисправности (требуется углубленное понимание работы механизма) + + + true + + + + ВключитьВозможностьРедактирования + + + DontUse + Auto + + + + + + +
      diff --git a/SSL/src/InformationRegisters/СведенияОПользователях/Forms/ФормаСписка/Module.bsl b/SSL/src/InformationRegisters/СведенияОПользователях/Forms/ФормаСписка/Module.bsl new file mode 100644 index 000000000..266dc08c4 --- /dev/null +++ b/SSL/src/InformationRegisters/СведенияОПользователях/Forms/ФормаСписка/Module.bsl @@ -0,0 +1,26 @@ + +#Область ОбработчикиСобытийФормы + +&НаСервере +Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) + + Если Параметры.Свойство("АвтоТест") Тогда // Возврат при получении формы для анализа. + Возврат; + КонецЕсли; + + ТолькоПросмотр = Истина; + +КонецПроцедуры + +#КонецОбласти + +#Область ОбработчикиКомандФормы + +&НаКлиенте +Процедура ВключитьВозможностьРедактирования(Команда) + + ТолькоПросмотр = Ложь; + +КонецПроцедуры + +#КонецОбласти diff --git a/SSL/src/InformationRegisters/СведенияОПользователях/RecordSetModule.bsl b/SSL/src/InformationRegisters/СведенияОПользователях/RecordSetModule.bsl new file mode 100644 index 000000000..f29a9d0e3 --- /dev/null +++ b/SSL/src/InformationRegisters/СведенияОПользователях/RecordSetModule.bsl @@ -0,0 +1,18 @@ +#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда + +#Область ОбработчикиСобытий + +Процедура ПриЗаписи(Отказ, Замещение) + + Если ОбменДанными.Загрузка Тогда + Возврат; + КонецЕсли; + + ПользователиСлужебный.ВключитьЗаданиеКонтрольАктивностиПользователейПриНеобходимости( + Выгрузить(, "Пользователь").ВыгрузитьКолонку("Пользователь")); + +КонецПроцедуры + +#КонецОбласти + +#КонецЕсли diff --git a/SSL/src/InformationRegisters/СведенияОПользователях/СведенияОПользователях.mdo b/SSL/src/InformationRegisters/СведенияОПользователях/СведенияОПользователях.mdo new file mode 100644 index 000000000..b961363cf --- /dev/null +++ b/SSL/src/InformationRegisters/СведенияОПользователях/СведенияОПользователях.mdo @@ -0,0 +1,306 @@ + + + + + + + + + + + + СведенияОПользователях + + ru + Сведения о пользователях + + InDialog + InformationRegister.СведенияОПользователях.Form.ФормаЗаписи + InformationRegister.СведенияОПользователях.Form.ФормаСписка + + Use + Active + + Use + + + + + Use + LineNumber + + Use + + + + + Use + Recorder + + Use + + + + + Use + Period + + ShowError + Use + + + + Managed + + ПотребоватьСменуПароляПриВходе + + ru + Потребовать смену пароля при входе + + + Boolean + + + ru + Потребовать от пользователя +сменить пароль при входе. + +Устанавливается в карточке пользователя. +Сбрасывается при смене пароля при входе. + + + + Use + Use + + + + СрокДействияНеОграничен + + ru + Срок действия не ограничен + + + Boolean + + + ru + Отменяет все ограничения по срокам действия. + + + + Use + Use + + + + СрокДействия + + ru + Срок действия + + + Date + + Date + + + + ru + Срок, начиная с которого, пользователю +будет запрещен вход в программу. + + + + Use + Use + + + + ПросрочкаРаботыВПрограммеДоЗапрещенияВхода + + ru + Просрочка работы в программе до запрещения входа + + + Number + + 3 + true + + + + ru + Срок относительно последней активности пользователя, +после которого вход в программу будет запрещен. + +Когда указан, используется вместо аналогичного параметра, +указанного для всех пользователей (внешних пользователей). + + + + Use + Use + + + + ДатаПоследнейАктивности + + ru + Дата последней активности + + + Date + + Date + + + + ru + Дата последней активности +пользователя в программе. + +Обновляется при входе и затем каждые 20 минут, если изменилась. + + + + Use + Use + + + + ДатаАвтоматическогоЗапрещенияВхода + + ru + Дата автоматического запрещения входа + + + Date + + Date + + + + ru + Дата автоматического запрещения входа в программу пользователю +в связи с истечением срока действия или отсутствием работы в +программе более установленного срока. + +Устанавливается при запрещении входа. +Сбрасывается при разрешении входа и при входе. + + + + Use + Use + + + + ДатаНачалаИспользованияПароля + + ru + Дата начала использования пароля + + + Date + + Date + + + + ru + Дата, когда пользователь начал использовать новый пароль. + +Устанавливается при входе, если пустая. +Сбрасывается при смене пароля. + + + + Use + Use + + + + ИспользованныеПароли + + ru + Использованные пароли + + + ValueStorage + + + ru + Хеши паролей, которые пользователь использовал ранее + + + + Use + Use + + + + ПоследнийИспользуемыйКлиент + + ru + Последний используемый клиент + + + String + + 50 + + + + ru + Программа, которая использовалась пользователем для работы в информационной базе в последнем сеансе работы. + + + + Use + Use + + + + Пользователь + + ru + Пользователь + + + CatalogRef.ВнешниеПользователи + CatalogRef.Пользователи + + + ru + Пользователь или внешний пользователь + + + + true + Use + Use + true + + true + true + + + ФормаЗаписи + + ru + Форма записи + + PersonalComputer + MobileDevice + + + ФормаСписка + + ru + Форма списка + + PersonalComputer + MobileDevice + + diff --git a/SSL/src/InformationRegisters/СеансыВерсийРасширений/Forms/ФормаЗаписи/Form.form b/SSL/src/InformationRegisters/СеансыВерсийРасширений/Forms/ФормаЗаписи/Form.form new file mode 100644 index 000000000..bc3ef91de --- /dev/null +++ b/SSL/src/InformationRegisters/СеансыВерсийРасширений/Forms/ФормаЗаписи/Form.form @@ -0,0 +1,215 @@ + + + + ВерсияРасширений + 1 + true + true + + true + + + Запись.ВерсияРасширений + + + ВерсияРасширенийРасширеннаяПодсказка + 3 + Label + true + true + + Left + + + + ВерсияРасширенийКонтекстноеМеню + 2 + true + + InputField + Enter + true + Left + true + + true + true + true + true + true + true + Normal + + + + НомерСеанса + 4 + true + true + + true + + + Запись.НомерСеанса + + + НомерСеансаРасширеннаяПодсказка + 6 + Label + true + true + + Left + + + + НомерСеансаКонтекстноеМеню + 5 + true + + InputField + Enter + true + Left + true + + true + true + true + true + true + true + Normal + + + + НачалоСеанса + 7 + true + true + + true + + + Запись.НачалоСеанса + + + НачалоСеансаРасширеннаяПодсказка + 9 + Label + true + true + + Left + + + + НачалоСеансаКонтекстноеМеню + 8 + true + + InputField + Enter + true + Left + true + + true + true + true + true + true + true + Normal + + + + ФормаКоманднаяПанель + -1 + + ФормаВключитьВозможностьРедактирования + 10 + true + true + + true + + + ФормаВключитьВозможностьРедактированияРасширеннаяПодсказка + 11 + Label + true + true + + Left + + + Form.Command.ВключитьВозможностьРедактирования + Normal + Auto + true + true + UserCmds + Auto + InAdditionalSubmenu + + Left + true + + + OnCreateAtServer + ПриСозданииНаСервере + + LockOwner + true + true + true + Vertical + true + true + true + auto + true + + Запись + 1 + + InformationRegisterRecordManager.СеансыВерсийРасширений + + + true + + + true + +
      true
      + true +
      + + ВключитьВозможностьРедактирования + + <key>ru</key> + <value>Включить возможность редактирования</value> + + 1 + + ru + Включить возможность редактирования только для целей поиска неисправности (требуется углубленное понимание работы механизма) + + + true + + + + ВключитьВозможностьРедактирования + + + DontUse + Auto + + + + + + +
      diff --git a/SSL/src/InformationRegisters/СеансыВерсийРасширений/Forms/ФормаЗаписи/Module.bsl b/SSL/src/InformationRegisters/СеансыВерсийРасширений/Forms/ФормаЗаписи/Module.bsl new file mode 100644 index 000000000..2cd660d32 --- /dev/null +++ b/SSL/src/InformationRegisters/СеансыВерсийРасширений/Forms/ФормаЗаписи/Module.bsl @@ -0,0 +1,23 @@ + +#Область ОбработчикиСобытийФормы + +&НаСервере +Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) + + ТолькоПросмотр = Истина; + +КонецПроцедуры + +#КонецОбласти + +#Область ОбработчикиКомандФормы + +&НаКлиенте +Процедура ВключитьВозможностьРедактирования(Команда) + + ТолькоПросмотр = Ложь; + Элементы.ФормаВключитьВозможностьРедактирования.Доступность = Ложь; + +КонецПроцедуры + +#КонецОбласти diff --git a/SSL/src/InformationRegisters/СеансыВерсийРасширений/Forms/ФормаСписка/Attributes/Список/ExtInfo/ListSettings.dcss b/SSL/src/InformationRegisters/СеансыВерсийРасширений/Forms/ФормаСписка/Attributes/Список/ExtInfo/ListSettings.dcss new file mode 100644 index 000000000..61e6fb4bb --- /dev/null +++ b/SSL/src/InformationRegisters/СеансыВерсийРасширений/Forms/ФормаСписка/Attributes/Список/ExtInfo/ListSettings.dcss @@ -0,0 +1,17 @@ + + + + Normal + dfcece9d-5077-440b-b6b3-45a5cb4538eb + + + Normal + 88619765-ccb3-46c6-ac52-38e9c992ebd4 + + + Normal + b75fecce-942b-4aed-abc9-e6a02e460fb3 + + Normal + 911b6018-f537-43e8-a417-da56b22f9aec + diff --git a/SSL/src/InformationRegisters/СеансыВерсийРасширений/Forms/ФормаСписка/Form.form b/SSL/src/InformationRegisters/СеансыВерсийРасширений/Forms/ФормаСписка/Form.form new file mode 100644 index 000000000..da94f5f8c --- /dev/null +++ b/SSL/src/InformationRegisters/СеансыВерсийРасширений/Forms/ФормаСписка/Form.form @@ -0,0 +1,390 @@ + + + + ГруппаПользовательскихНастроек + 1 + true + true + + true + + + <key>ru</key> + <value>Группа пользовательских настроек</value> + + false + + ГруппаПользовательскихНастроекРасширеннаяПодсказка + 2 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + WeakSeparation + true + true + Auto + Auto + + + + Список + 3 + true + true + + true + + + Список + + true + None + + ВерсияРасширений + 16 + true + true + + true + + + Список.ВерсияРасширений + + true + + ВерсияРасширенийРасширеннаяПодсказка + 18 + Label + true + true + + Left + + + + ВерсияРасширенийКонтекстноеМеню + 17 + true + + LabelField + Enter + true + Left + true + + true + true + + + + НомерСеанса + 19 + true + true + + true + + + Список.НомерСеанса + + true + + НомерСеансаРасширеннаяПодсказка + 21 + Label + true + true + + Left + + + + НомерСеансаКонтекстноеМеню + 20 + true + + LabelField + Enter + true + Left + true + + 12 + true + true + + + + НачалоСеанса + 22 + true + true + + true + + + Список.НачалоСеанса + + true + + НачалоСеансаРасширеннаяПодсказка + 24 + Label + true + true + + Left + + + + НачалоСеансаКонтекстноеМеню + 23 + true + + LabelField + Enter + true + Left + true + + 14 + true + true + + + None + + СписокКоманднаяПанель + 5 + Left + + + СписокСтрокаПоиска + 7 + + СписокСтрокаПоискаРасширеннаяПодсказка + 9 + Label + true + true + + Left + + + + СписокСтрокаПоискаКонтекстноеМеню + 8 + true + + Список + + true + + + + СписокСостояниеПросмотра + 10 + + СписокСостояниеПросмотраРасширеннаяПодсказка + 12 + Label + true + true + + Left + + + + СписокСостояниеПросмотраКонтекстноеМеню + 11 + true + + ViewStatusAddition + Список + + true + + + + СписокУправлениеПоиском + 13 + + СписокУправлениеПоискомРасширеннаяПодсказка + 15 + Label + true + true + + Left + + + + СписокУправлениеПоискомКонтекстноеМеню + 14 + true + + SearchControlAddition + Список + + true + + + + СписокРасширеннаяПодсказка + 6 + Label + true + true + + Left + + + + СписокКонтекстноеМеню + 4 + true + + true + true + true + true + true + MultiRow +
      true
      + 1 + 1 + AutoUse + AutoUse + true + true + Auto + Auto + ExpandTopLevel + true + true + true + + Список.DefaultPicture + + None + None + None + true + + 60 + + 0001-01-01T00:00:00 + 0001-01-01T00:00:00 + + + true + true + ГруппаПользовательскихНастроек + +
      + + ФормаКоманднаяПанель + -1 + + ФормаВключитьВозможностьРедактирования + 25 + true + true + + true + + + ФормаВключитьВозможностьРедактированияРасширеннаяПодсказка + 26 + Label + true + true + + Left + + + Form.Command.ВключитьВозможностьРедактирования + Normal + Auto + true + true + UserCmds + Auto + InAdditionalSubmenu + + Left + true + + + OnCreateAtServer + ПриСозданииНаСервере + + 60 + 10 + DontBlock + true + true + true + Vertical + true + true + true + auto + true + + Список + 1 + + DynamicList + + + true + + + true + +
      true
      + + InformationRegister.СеансыВерсийРасширений + true + true + true + true + +
      + + ВключитьВозможностьРедактирования + + <key>ru</key> + <value>Включить возможность редактирования</value> + + 1 + + ru + Включить возможность редактирования только для целей поиска неисправности (требуется углубленное понимание работы механизма) + + + true + + + + ВключитьВозможностьРедактирования + + + DontUse + Auto + + + + + + +
      diff --git a/SSL/src/InformationRegisters/СеансыВерсийРасширений/Forms/ФормаСписка/Module.bsl b/SSL/src/InformationRegisters/СеансыВерсийРасширений/Forms/ФормаСписка/Module.bsl new file mode 100644 index 000000000..2cd660d32 --- /dev/null +++ b/SSL/src/InformationRegisters/СеансыВерсийРасширений/Forms/ФормаСписка/Module.bsl @@ -0,0 +1,23 @@ + +#Область ОбработчикиСобытийФормы + +&НаСервере +Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) + + ТолькоПросмотр = Истина; + +КонецПроцедуры + +#КонецОбласти + +#Область ОбработчикиКомандФормы + +&НаКлиенте +Процедура ВключитьВозможностьРедактирования(Команда) + + ТолькоПросмотр = Ложь; + Элементы.ФормаВключитьВозможностьРедактирования.Доступность = Ложь; + +КонецПроцедуры + +#КонецОбласти diff --git a/SSL/src/InformationRegisters/СеансыВерсийРасширений/СеансыВерсийРасширений.mdo b/SSL/src/InformationRegisters/СеансыВерсийРасширений/СеансыВерсийРасширений.mdo new file mode 100644 index 000000000..db2446e39 --- /dev/null +++ b/SSL/src/InformationRegisters/СеансыВерсийРасширений/СеансыВерсийРасширений.mdo @@ -0,0 +1,132 @@ + + + + + + + + + + + + СеансыВерсийРасширений + + ru + Сеансы версий расширений + + InDialog + InformationRegister.СеансыВерсийРасширений.Form.ФормаЗаписи + InformationRegister.СеансыВерсийРасширений.Form.ФормаСписка + + Use + Active + + Use + + + + + Use + LineNumber + + Use + + + + + Use + Recorder + + Use + + + + + Use + Period + + ShowError + Use + + + + Managed + + ВерсияРасширений + + ru + Версия расширений + + + CatalogRef.ВерсииРасширений + + + ru + Обобщенная версия метаданных набора расширений + + + + ShowError + true + Use + true + + true + true + + + НомерСеанса + + ru + Номер сеанса + + + Number + + 10 + true + + + + + Use + Use + + true + + + НачалоСеанса + + ru + Начало сеанса + + + Date + + + + + Use + Use + + true + + + ФормаЗаписи + + ru + Форма записи + + PersonalComputer + MobileDevice + + + ФормаСписка + + ru + Форма списка + + PersonalComputer + MobileDevice + + diff --git a/SSL/src/InformationRegisters/СогласияНаОбработкуПерсональныхДанных/СогласияНаОбработкуПерсональныхДанных.mdo b/SSL/src/InformationRegisters/СогласияНаОбработкуПерсональныхДанных/СогласияНаОбработкуПерсональныхДанных.mdo new file mode 100644 index 000000000..dd351858e --- /dev/null +++ b/SSL/src/InformationRegisters/СогласияНаОбработкуПерсональныхДанных/СогласияНаОбработкуПерсональныхДанных.mdo @@ -0,0 +1,156 @@ + + + + + + + + + + + + СогласияНаОбработкуПерсональныхДанных + + ru + Согласия на обработку персональных данных + + true + InDialog + + Use + Active + + Use + + + + + Use + LineNumber + + Use + + + + + Use + Recorder + + Use + + + + + Use + Period + + ShowError + Use + + + + Day + RecorderSubordinate + Managed + + ru + Согласие на обработку ПДн + + + ru + Согласие на обработку персональных данных + + + ru + Согласия на обработку ПДн + + + ru + Сведения о предоставленных согласиях на обработку персональных данных + + + Действует + + ru + Действует + + + Boolean + + + ru + Если Ложь, согласие отозвано + + + + Use + Use + + + + СрокДействия + + ru + Срок действия + + + Date + + Date + + + + ru + Дата, до которой будет действовать согласие. Если не указано, то согласие действует бессрочно. + + + + Use + Use + + + + Организация + + ru + Организация + + + CatalogRef.Организации + + + ru + Оператор персональных данных + + + + ShowError + true + Use + Use + + true + + + Субъект + + ru + Субъект + + + DefinedType.СубъектПерсональныхДанных + + + ru + Субъект, предоставляющий согласие на обработку персональных данных + + + + ShowError + true + Use + Use + + true + + diff --git a/SSL/src/InformationRegisters/СоставыГруппПользователей/Forms/ФормаЗаписи/Form.form b/SSL/src/InformationRegisters/СоставыГруппПользователей/Forms/ФормаЗаписи/Form.form index 898276880..cce5b1549 100644 --- a/SSL/src/InformationRegisters/СоставыГруппПользователей/Forms/ФормаЗаписи/Form.form +++ b/SSL/src/InformationRegisters/СоставыГруппПользователей/Forms/ФормаЗаписи/Form.form @@ -162,7 +162,6 @@ true true true - UseIfNecessary auto true @@ -199,7 +198,7 @@ ВключитьВозможностьРедактирования - Auto + DontUse Auto diff --git a/SSL/src/InformationRegisters/СоставыГруппПользователей/Forms/ФормаСписка/Form.form b/SSL/src/InformationRegisters/СоставыГруппПользователей/Forms/ФормаСписка/Form.form index c2358d1cf..1efba3f10 100644 --- a/SSL/src/InformationRegisters/СоставыГруппПользователей/Forms/ФормаСписка/Form.form +++ b/SSL/src/InformationRegisters/СоставыГруппПользователей/Forms/ФормаСписка/Form.form @@ -374,7 +374,6 @@ true true true - UseIfNecessary auto true @@ -417,7 +416,7 @@ ВключитьВозможностьРедактирования - Auto + DontUse Auto @@ -439,7 +438,7 @@ ОбновитьДанныеРегистра - Auto + DontUse Auto diff --git a/SSL/src/InformationRegisters/СоставыГруппПользователей/RecordSetModule.bsl b/SSL/src/InformationRegisters/СоставыГруппПользователей/RecordSetModule.bsl index e69de29bb..64faee028 100644 --- a/SSL/src/InformationRegisters/СоставыГруппПользователей/RecordSetModule.bsl +++ b/SSL/src/InformationRegisters/СоставыГруппПользователей/RecordSetModule.bsl @@ -0,0 +1,36 @@ + +#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда + +#Область ОбработчикиСобытий + +Процедура ПриЗаписи(Отказ, Замещение) + + Если ОбменДанными.Загрузка Тогда + Если Не ДополнительныеСвойства.Свойство("ПропуститьОбновлениеВерсииДатЗапретаИзменения") Тогда + ОбновитьВерсиюДатЗапретаИзмененияПриЗагрузкеДанных(); + КонецЕсли; + Возврат; + КонецЕсли; + +КонецПроцедуры + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +Процедура ОбновитьВерсиюДатЗапретаИзмененияПриЗагрузкеДанных() + + // Изменения в обычном режиме записи регистрируются в общем модуле ПользователиСлужебный + // в процедуре ПослеОбновленияСоставовГруппПользователейПереопределяемый. + + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ДатыЗапретаИзменения") Тогда + МодульДатыЗапретаИзмененияСлужебный = ОбщегоНазначения.ОбщийМодуль("ДатыЗапретаИзмененияСлужебный"); + МодульДатыЗапретаИзмененияСлужебный.ОбновитьВерсиюДатЗапретаИзмененияПриЗагрузкеДанных(ЭтотОбъект); + КонецЕсли; + +КонецПроцедуры + +#КонецОбласти + +#КонецЕсли + diff --git a/SSL/src/InformationRegisters/СтатистикаКонфигурации/Forms/ФормаСписка/Attributes/Список/ExtInfo/ListSettings.dcss b/SSL/src/InformationRegisters/СтатистикаКонфигурации/Forms/ФормаСписка/Attributes/Список/ExtInfo/ListSettings.dcss new file mode 100644 index 000000000..61e6fb4bb --- /dev/null +++ b/SSL/src/InformationRegisters/СтатистикаКонфигурации/Forms/ФормаСписка/Attributes/Список/ExtInfo/ListSettings.dcss @@ -0,0 +1,17 @@ + + + + Normal + dfcece9d-5077-440b-b6b3-45a5cb4538eb + + + Normal + 88619765-ccb3-46c6-ac52-38e9c992ebd4 + + + Normal + b75fecce-942b-4aed-abc9-e6a02e460fb3 + + Normal + 911b6018-f537-43e8-a417-da56b22f9aec + diff --git a/SSL/src/InformationRegisters/СтатистикаКонфигурации/Forms/ФормаСписка/ConditionalAppearance.dcssca b/SSL/src/InformationRegisters/СтатистикаКонфигурации/Forms/ФормаСписка/ConditionalAppearance.dcssca new file mode 100644 index 000000000..1f7a97063 --- /dev/null +++ b/SSL/src/InformationRegisters/СтатистикаКонфигурации/Forms/ФормаСписка/ConditionalAppearance.dcssca @@ -0,0 +1,28 @@ + + + + + + ЗначениеПредставление + + + + + Список.ЗначениеПредставление + Equal + 0 + + + + + Формат + + + ru + ЧН=0,000 + + + + + + diff --git a/SSL/src/InformationRegisters/СтатистикаКонфигурации/Forms/ФормаСписка/Form.form b/SSL/src/InformationRegisters/СтатистикаКонфигурации/Forms/ФормаСписка/Form.form new file mode 100644 index 000000000..9238539d5 --- /dev/null +++ b/SSL/src/InformationRegisters/СтатистикаКонфигурации/Forms/ФормаСписка/Form.form @@ -0,0 +1,586 @@ + + + + СписокКомпоновщикНастроекПользовательскиеНастройки + 1 + true + true + + true + + + <key>ru</key> + <value>Группа пользовательских настроек</value> + + false + + СписокКомпоновщикНастроекПользовательскиеНастройкиРасширеннаяПодсказка + 2 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + WeakSeparation + true + true + Auto + Auto + + + + Список + 3 + true + true + + true + + + Список + + true + None + + ГруппаОперацияСтатистики + 34 + + Наименование + 16 + + <key>ru</key> + <value>Операция статистики</value> + + true + true + + true + + + Список.Наименование + + + НаименованиеРасширеннаяПодсказка + 18 + Label + true + true + + Left + + + + НаименованиеКонтекстноеМеню + 17 + true + + LabelField + Enter + true + Left + true + + true + true + + + + ОперацияСтатистики + 19 + + <key>ru</key> + <value>Идентификатор операции статистики</value> + + true + true + + true + + + Список.ОперацияСтатистики + + + ОперацияСтатистикиРасширеннаяПодсказка + 21 + Label + true + true + + Left + + + + ОперацияСтатистикиКонтекстноеМеню + 20 + true + + LabelField + Enter + true + Left + true + + true + true + + + true + true + + true + + + <key>ru</key> + <value>Группа операция статистики</value> + + + ru + Группа операция статистики + + + ГруппаОперацияСтатистикиРасширеннаяПодсказка + 35 + Label + true + true + + Left + + + ColumnGroup + + Vertical + auto + true + + + + ГруппаОбласть + 36 + + НаименованиеОбласти + 31 + + <key>ru</key> + <value>Область</value> + + true + true + + true + + + Список.НаименованиеОбласти + + + НаименованиеОбластиРасширеннаяПодсказка + 33 + Label + true + true + + Left + + + + НаименованиеОбластиКонтекстноеМеню + 32 + true + + LabelField + Enter + true + Left + true + + true + true + + + + ИдентификаторОбластиСтатистики + 28 + + <key>ru</key> + <value>Идентификатор области</value> + + true + true + + true + + + Список.ИдентификаторОбластиСтатистики + + + ИдентификаторОбластиСтатистикиРасширеннаяПодсказка + 30 + Label + true + true + + Left + + + + ИдентификаторОбластиСтатистикиКонтекстноеМеню + 29 + true + + LabelField + Enter + true + Left + true + + true + true + + + true + true + + true + + + <key>ru</key> + <value>Группа область</value> + + + ru + Группа область + + + ГруппаОбластьРасширеннаяПодсказка + 37 + Label + true + true + + Left + + + ColumnGroup + + Vertical + auto + true + + + + ГруппаЗначение + 38 + + ЗначениеПредставление + 43 + + <key>ru</key> + <value>Значение</value> + + true + true + + true + + + Список.ЗначениеПредставление + + + ЗначениеПредставлениеРасширеннаяПодсказка + 45 + Label + true + true + + Left + + + + ЗначениеПредставлениеКонтекстноеМеню + 44 + true + + LabelField + Enter + true + Left + true + + true + true + + + + ВидСтатистикиПредставление + 40 + + <key>ru</key> + <value>Вид статистики</value> + + true + true + + true + + + Список.ВидСтатистикиПредставление + + + ВидСтатистикиПредставлениеРасширеннаяПодсказка + 42 + Label + true + true + + Left + + + + ВидСтатистикиПредставлениеКонтекстноеМеню + 41 + true + + LabelField + Enter + true + Left + true + + true + true + + + true + true + + true + + + <key>ru</key> + <value>Группа значение</value> + + + ru + Группа значение + + + ГруппаЗначениеРасширеннаяПодсказка + 39 + Label + true + true + + Left + + + ColumnGroup + + Vertical + auto + true + + + None + + СписокКоманднаяПанель + 5 + Left + + + СписокСтрокаПоиска + 7 + + СписокСтрокаПоискаРасширеннаяПодсказка + 9 + Label + true + true + + Left + + + + СписокСтрокаПоискаКонтекстноеМеню + 8 + true + + Список + + true + + + + СписокСостояниеПросмотра + 10 + + СписокСостояниеПросмотраРасширеннаяПодсказка + 12 + Label + true + true + + Left + + + + СписокСостояниеПросмотраКонтекстноеМеню + 11 + true + + ViewStatusAddition + Список + + true + + + + СписокУправлениеПоиском + 13 + + СписокУправлениеПоискомРасширеннаяПодсказка + 15 + Label + true + true + + Left + + + + СписокУправлениеПоискомКонтекстноеМеню + 14 + true + + SearchControlAddition + Список + + true + + + + СписокРасширеннаяПодсказка + 6 + Label + true + true + + Left + + + + СписокКонтекстноеМеню + 4 + true + + true + true + true + true + true + MultiRow +
      true
      + 1 + 1 + AutoUse + AutoUse + true + true + Auto + Auto + ExpandTopLevel + true + true + true + + Список.DefaultPicture + + None + None + true + + 60 + + 0001-01-01T00:00:00 + 0001-01-01T00:00:00 + + + true + true + СписокКомпоновщикНастроекПользовательскиеНастройки + +
      + + ФормаКоманднаяПанель + -1 + Left + true + + DontBlock + true + true + true + Vertical + true + true + true + auto + true + + Список + 1 + + DynamicList + + + true + + + true + +
      true
      + + ВЫБРАТЬ + РегистрСведенийСтатистикаКонфигурации.ОперацияСтатистики, + РегистрСведенийСтатистикаКонфигурации.Значение, + ВЫБОР РегистрСведенийСтатистикаКонфигурации.ВидСтатистики + КОГДА 0 ТОГДА РегистрСведенийСтатистикаКонфигурации.Значение + КОГДА 1 ТОГДА + ВЫБОР РегистрСведенийСтатистикаКонфигурации.Значение + КОГДА 0 ТОГДА Ложь + КОГДА 1 ТОГДА ИСТИНА + КОНЕЦ + КОНЕЦ КАК ЗначениеПредставление, + ОперацииСтатистики.Наименование, + РегистрСведенийСтатистикаКонфигурации.ВидСтатистики КАК ВидСтатистики, + ВЫБОР РегистрСведенийСтатистикаКонфигурации.ВидСтатистики + КОГДА 0 ТОГДА "Метаданные" + КОГДА 1 ТОГДА "Функциональная опция" + КОНЕЦ КАК ВидСтатистикиПредставление, + РегистрСведенийСтатистикаКонфигурации.ИдентификаторОбластиСтатистики, + ОбластиСтатистики.Наименование КАК НаименованиеОбласти +ИЗ + РегистрСведений.СтатистикаКонфигурации КАК РегистрСведенийСтатистикаКонфигурации + ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ОперацииСтатистики КАК ОперацииСтатистики + ПО РегистрСведенийСтатистикаКонфигурации.ОперацияСтатистики = ОперацииСтатистики.ИдентификаторОперации + ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ОбластиСтатистики КАК ОбластиСтатистики + ПО РегистрСведенийСтатистикаКонфигурации.ИдентификаторОбластиСтатистики = ОбластиСтатистики.ИдентификаторОбласти + InformationRegister.СтатистикаКонфигурации + true + true + true + true + true + +
      + + + + + +
      diff --git a/SSL/src/InformationRegisters/СтатистикаКонфигурации/ManagerModule.bsl b/SSL/src/InformationRegisters/СтатистикаКонфигурации/ManagerModule.bsl new file mode 100644 index 000000000..ed7785d07 --- /dev/null +++ b/SSL/src/InformationRegisters/СтатистикаКонфигурации/ManagerModule.bsl @@ -0,0 +1,387 @@ +#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда + +#Область СлужебныеПроцедурыИФункции + +Функция ПолучитьСтатистику(ВидСтатистики, ТаблицаИмен = Неопределено, ИдентификаторОбластиСтатистики = Неопределено) Экспорт + Запрос = Новый Запрос; + + Если ТаблицаИмен = Неопределено Тогда + Запрос.Текст = " + |ВЫБРАТЬ + | ОперацииСтатистики.Наименование КАК ОперацияСтатистики, + | СтатистикаКонфигурации.Значение КАК Значение + |ИЗ + | РегистрСведений.СтатистикаКонфигурации КАК СтатистикаКонфигурации + |ВНУТРЕННЕЕ СОЕДИНЕНИЕ + | РегистрСведений.ОперацииСтатистики КАК ОперацииСтатистики + |ПО + | СтатистикаКонфигурации.ОперацияСтатистики = ОперацииСтатистики.ИдентификаторОперации + |ГДЕ + | СтатистикаКонфигурации.ВидСтатистики = &ВидСтатистики + |"; + Запрос.УстановитьПараметр("ВидСтатистики", ВидСтатистики); + РезультатЗапроса = Запрос.Выполнить(); + Иначе + Запрос.Текст = " + |ВЫБРАТЬ + | ТаблицаИмен.ОперацияСтатистикиНаименование КАК ОперацияСтатистикиНаименование, + | ТаблицаИмен.ИндексСтроки КАК ИндексСтроки + |ПОМЕСТИТЬ + | ТаблицаИмен + |ИЗ + | &ТаблицаИмен КАК ТаблицаИмен + |ИНДЕКСИРОВАТЬ ПО + | ОперацияСтатистикиНаименование + |; + |ВЫБРАТЬ + | ТаблицаИмен.ИндексСтроки КАК ОперацияСтатистикиИндекс, + | СтатистикаКонфигурации.Значение КАК Значение + |ИЗ + | РегистрСведений.СтатистикаКонфигурации КАК СтатистикаКонфигурации + |ВНУТРЕННЕЕ СОЕДИНЕНИЕ + | РегистрСведений.ОперацииСтатистики КАК ОперацииСтатистики + |ПО + | СтатистикаКонфигурации.ОперацияСтатистики = ОперацииСтатистики.ИдентификаторОперации + |ВНУТРЕННЕЕ СОЕДИНЕНИЕ + | ТаблицаИмен + |ПО + | ТаблицаИмен.ОперацияСтатистикиНаименование = ОперацииСтатистики.Наименование + |ГДЕ + | СтатистикаКонфигурации.ВидСтатистики = &ВидСтатистики + | И СтатистикаКонфигурации.ИдентификаторОбластиСтатистики = &ИдентификаторОбластиСтатистики + |УПОРЯДОЧИТЬ ПО + | ТаблицаИмен.ИндексСтроки + |"; + Запрос.УстановитьПараметр("ВидСтатистики", ВидСтатистики); + Запрос.УстановитьПараметр("ИдентификаторОбластиСтатистики", ИдентификаторОбластиСтатистики); + Запрос.УстановитьПараметр("ТаблицаИмен", ТаблицаИмен); + РезультатЗапроса = Запрос.Выполнить(); + КонецЕсли; + + Возврат РезультатЗапроса; +КонецФункции + +Функция ПолучитьИменаСтатистики(ВидСтатистики) Экспорт + НулеваяОбласть = РегистрыСведений.ОбластиСтатистики.ПолучитьСсылку("0"); + + Запрос = Новый Запрос; + Запрос.Текст = " + |ВЫБРАТЬ РАЗЛИЧНЫЕ + | СтатистикаКонфигурации.ОперацияСтатистики КАК ОперацияСтатистикиСсылка, + | ОперацииСтатистики.Наименование КАК ОперацияСтатистикиНаименование + |ИЗ + | РегистрСведений.СтатистикаКонфигурации КАК СтатистикаКонфигурации + |ВНУТРЕННЕЕ СОЕДИНЕНИЕ + | РегистрСведений.ОперацииСтатистики КАК ОперацииСтатистики + |ПО + | СтатистикаКонфигурации.ОперацияСтатистики = ОперацииСтатистики.ИдентификаторОперации + |ГДЕ + | СтатистикаКонфигурации.ВидСтатистики = &ВидСтатистики + |УПОРЯДОЧИТЬ ПО + | ОперацииСтатистики.Наименование + |"; + Запрос.УстановитьПараметр("ВидСтатистики", ВидСтатистики); + Запрос.УстановитьПараметр("НулеваяОбласть", НулеваяОбласть); + РезультатЗапроса = Запрос.Выполнить(); + + Возврат РезультатЗапроса; +КонецФункции + +Функция ЗаписатьСтатистикуКонфигурации(Знач СоответствиеИменМетаданных = Неопределено) Экспорт + СтатистикаКонфигурации = НовыйСтатистикаКонфигурации(СоответствиеИменМетаданных); + Записать(СтатистикаКонфигурации.НеРазделенная, РегистрыСведений.ОбластиСтатистики.ПолучитьСсылку("0", Истина)); + + Если СтатистикаКонфигурации.Разделенная <> Неопределено Тогда + ЗаписатьРазделенную(СтатистикаКонфигурации.Разделенная); + КонецЕсли; +КонецФункции + +Функция НовыйСтатистикаКонфигурации(СоответствиеИменМетаданных = Неопределено) + СоответствиеИменМетаданныхРезультат = Новый Соответствие; + МассивИменМетаданных = Новый Массив(); + + РазделениеПоОбластямДанныхВключено = ЦентрМониторингаСлужебный.РазделениеПоОбластямДанныхВключено(); + + Если СоответствиеИменМетаданных <> Неопределено Тогда + Для Каждого ИмяМетаданных Из СоответствиеИменМетаданных Цикл + СоответствиеИменМетаданныхРезультат.Вставить(ИмяМетаданных.Ключ, ИмяМетаданных.Значение); + МассивИменМетаданных.Добавить(ИмяМетаданных.Ключ); + КонецЦикла; + КонецЕсли; + + Таблицы = ПолучитьСтруктуруХраненияБазыДанных(МассивИменМетаданных); + + СоответствиеИменМетаданныхПоОбластям = РазделитьКонфигурациюПоОбластям(Таблицы, СоответствиеИменМетаданных, СоответствиеИменМетаданныхРезультат, РазделениеПоОбластямДанныхВключено); + + Возврат СоответствиеИменМетаданныхПоОбластям; +КонецФункции + +Функция РазделитьКонфигурациюПоОбластям(Таблицы, СоответствиеИменМетаданных, СоответствиеИменМетаданныхРезультат, РазделениеПоОбластямДанныхВключено) + Если РазделениеПоОбластямДанныхВключено Тогда + СоответствиеИменМетаданныхПоОбластям = Новый Структура("НеРазделенная, Разделенная", Новый Соответствие, Новый Соответствие); + Иначе + СоответствиеИменМетаданныхПоОбластям = Новый Структура("НеРазделенная, Разделенная", Новый Соответствие, Неопределено); + КонецЕсли; + + БазоваяФункциональностьВМоделиСервисаСуществует = ОбщегоНазначения.ПодсистемаСуществует("ТехнологияСервиса.РаботаВМоделиСервиса.БазоваяФункциональностьВМоделиСервиса"); + Если БазоваяФункциональностьВМоделиСервисаСуществует Тогда + МодульРаботаВМоделиСервиса = ОбщегоНазначения.ОбщийМодуль("РаботаВМоделиСервиса"); + ОбластьДанныхОсновныеДанныеСостав = МодульРаботаВМоделиСервиса.ОбластьДанныхОсновныеДанныеСостав(); + КонецЕсли; + + Для Каждого ТекСтрока Из Таблицы Цикл + Если СоответствиеИменМетаданных <> Неопределено Тогда + Если СоответствиеИменМетаданных[ТекСтрока.Метаданные] = Неопределено Тогда + Продолжить; + КонецЕсли; + КонецЕсли; + + Основная = ?(ТекСтрока.Назначение = "Основная", Истина, Ложь); + ТабличнаяЧасть = ?(ТекСтрока.Назначение = "ТабличнаяЧасть", Истина, Ложь); + + Если (Основная ИЛИ ТабличнаяЧасть) И ЗначениеЗаполнено(ТекСтрока.ИмяТаблицы) Тогда + Если Основная Тогда + ОбъектМетаданных = Метаданные.НайтиПоПолномуИмени(ТекСтрока.Метаданные); + Если РазделениеПоОбластямДанныхВключено Тогда + ЭлементСоставаОбщегоРеквизита = ОбластьДанныхОсновныеДанныеСостав.Найти(ОбъектМетаданных); + КонецЕсли; + КонецЕсли; + + Если СоответствиеИменМетаданныхРезультат[ТекСтрока.ИмяТаблицы] = Неопределено Тогда + ТекстЗапроса = ЗапросПоУмолчанию(ТекСтрока.ИмяТаблицы); + Иначе + ТекстЗапроса = СоответствиеИменМетаданныхРезультат[ТекСтрока.ИмяТаблицы]["Запрос"]; + КонецЕсли; + + Если РазделениеПоОбластямДанныхВключено Тогда + Если ЭлементСоставаОбщегоРеквизита <> Неопределено Тогда + Если ЭлементСоставаОбщегоРеквизита.Использование = Метаданные.СвойстваОбъектов.ИспользованиеОбщегоРеквизита.НеИспользовать Тогда + ЕстьРазделение = Ложь; + Иначе + ЕстьРазделение = Истина; + КонецЕсли; + Иначе + МетаданныеМассив = СтрРазделить(ТекСтрока.Метаданные, "."); + Если МетаданныеМассив[0] = "ЖурналДокументов" Тогда + ЕстьРазделение = Истина; + ИначеЕсли МетаданныеМассив[0] = "Перечисление" Тогда + ЕстьРазделение = Ложь; + ИначеЕсли МетаданныеМассив[0] = "Последовательность" Тогда + ЕстьРазделение = Истина; + Иначе + ЕстьРазделение = Истина; + КонецЕсли; + КонецЕсли; + Иначе + ЕстьРазделение = Ложь; + КонецЕсли; + + Если ЕстьРазделение Тогда + СоответствиеИменМетаданныхПоОбластям.Разделенная.Вставить(ТекСтрока.ИмяТаблицы, Новый Структура("Запрос, ОперацииСтатистики, ВидСтатистики", ТекстЗапроса, Неопределено, 0)); + Иначе + СоответствиеИменМетаданныхПоОбластям.НеРазделенная.Вставить(ТекСтрока.ИмяТаблицы, Новый Структура("Запрос, ОперацииСтатистики, ВидСтатистики", ТекстЗапроса, Неопределено, 0)); + КонецЕсли; + КонецЕсли; + КонецЦикла; + + Возврат СоответствиеИменМетаданныхПоОбластям; +КонецФункции + +Функция ЗаписатьНастройкиКонфигурации() Экспорт + НастройкиКонфигурации = РазделитьФункциональныеОпцииПоОбластям(); + Записать(НастройкиКонфигурации.НеРазделенная, РегистрыСведений.ОбластиСтатистики.ПолучитьСсылку("0", Истина)); + Если ЗначениеЗаполнено(НастройкиКонфигурации.Разделенная) Тогда + ЗаписатьРазделенную(НастройкиКонфигурации.Разделенная); + КонецЕсли; +КонецФункции + +Функция РазделитьФункциональныеОпцииПоОбластям() + СоответствиеИменМетаданныхПоОбластям = Новый Структура("НеРазделенная, Разделенная", Новый Соответствие, Новый Соответствие); + + РазделениеПоОбластямДанныхВключено = ЦентрМониторингаСлужебный.РазделениеПоОбластямДанныхВключено(); + Если РазделениеПоОбластямДанныхВключено Тогда + БазоваяФункциональностьВМоделиСервисаСуществует = ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаВМоделиСервиса.БазоваяФункциональностьВМоделиСервиса"); + Если БазоваяФункциональностьВМоделиСервисаСуществует Тогда + МодульРаботаВМоделиСервиса = ОбщегоНазначения.ОбщийМодуль("РаботаВМоделиСервиса"); + ОбластьДанныхОсновныеДанныеСостав = МодульРаботаВМоделиСервиса.ОбластьДанныхОсновныеДанныеСостав(); + КонецЕсли; + КонецЕсли; + + Для Каждого ФункциональнаяОпция Из Метаданные.ФункциональныеОпции Цикл + ОписаниеТиповФункциональнойОпции = Новый ОписаниеТипов(ФункциональнаяОпция.Хранение.Тип); + Если Метаданные.Константы.Содержит(ФункциональнаяОпция.Хранение) И ОписаниеТиповФункциональнойОпции.СодержитТип(Тип("Булево")) Тогда + Если РазделениеПоОбластямДанныхВключено Тогда + ЭлементСоставаОбщегоРеквизита = ОбластьДанныхОсновныеДанныеСостав.Найти(ФункциональнаяОпция.Хранение); + Если ЭлементСоставаОбщегоРеквизита <> Неопределено Тогда + Если ЭлементСоставаОбщегоРеквизита.Использование = Метаданные.СвойстваОбъектов.ИспользованиеОбщегоРеквизита.НеИспользовать Тогда + ЕстьРазделение = Ложь; + Иначе + ЕстьРазделение = Истина; + КонецЕсли; + Иначе + ЕстьРазделение = Ложь; + КонецЕсли; + Иначе + ЕстьРазделение = Ложь; + КонецЕсли; + + Если ЕстьРазделение Тогда + СоответствиеИменМетаданныхПоОбластям.Разделенная.Вставить(ФункциональнаяОпция.ПолноеИмя(), Новый Структура("Запрос, ОперацииСтатистики, ВидСтатистики", ФункциональнаяОпция.Хранение, Неопределено, 1)); + Иначе + СоответствиеИменМетаданныхПоОбластям.НеРазделенная.Вставить(ФункциональнаяОпция.ПолноеИмя(), Новый Структура("Запрос, ОперацииСтатистики, ВидСтатистики", ФункциональнаяОпция.Хранение, Неопределено, 1)); + КонецЕсли; + КонецЕсли; + КонецЦикла; + + Возврат СоответствиеИменМетаданныхПоОбластям; +КонецФункции + +Процедура ОчиститьСтатистикуКонфигурации() Экспорт + Запрос = Новый Запрос; + Запрос.Текст = + "ВЫБРАТЬ РАЗЛИЧНЫЕ + | СтатистикаКонфигурации.ИдентификаторОбластиСтатистики КАК ИдентификаторОбластиСтатистики + |ИЗ + | РегистрСведений.СтатистикаКонфигурации КАК СтатистикаКонфигурации"; + + РезультатЗапроса = Запрос.Выполнить(); + + ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать(); + + НаборЗаписей = РегистрыСведений.СтатистикаКонфигурации.СоздатьНаборЗаписей(); + Пока ВыборкаДетальныеЗаписи.Следующий() Цикл + НаборЗаписей.Отбор.ИдентификаторОбластиСтатистики.Установить(ВыборкаДетальныеЗаписи.ИдентификаторОбластиСтатистики); + НаборЗаписей.Записать(Истина); + КонецЦикла; +КонецПроцедуры + +Процедура Записать(СтатистикаКонфигурации, Область) Экспорт + НачатьТранзакцию(); + Попытка + НаборЗаписей = РегистрыСведений.СтатистикаКонфигурации.СоздатьНаборЗаписей(); + ЕстьЗапись = Ложь; + + ОперацииСсылки = Новый Соответствие; + Для Каждого ТекОбъект Из СтатистикаКонфигурации Цикл + Если ТекОбъект.Значение["ВидСтатистики"] = 0 Тогда + РезультатЗапроса = ПолучитьРезультат(ТекОбъект.Значение["Запрос"]); + ОперацииСтатистики = ПолучитьРезультатОперацииСтатистики(ТекОбъект.Ключ, РезультатЗапроса); + ИначеЕсли ТекОбъект.Значение["ВидСтатистики"] = 1 Тогда + Значение = ?(Константы[ТекОбъект.Значение["Запрос"].Имя].Получить(), 1, 0); + ОперацииСтатистики = Новый Массив; + ОперацияСтатистики = Новый Структура("ОперацияСтатистикиНаименование, КоличествоОпераций", ТекОбъект.Ключ, Значение); + ОперацииСтатистики.Добавить(ОперацияСтатистики); + КонецЕсли; + + Для Каждого ОперацияСтатистики Из ОперацииСтатистики Цикл + Если ОперацииСсылки[ОперацияСтатистики.ОперацияСтатистикиНаименование] = Неопределено Тогда + ОперацииСсылки.Вставить(ОперацияСтатистики.ОперацияСтатистикиНаименование, РегистрыСведений.ОперацииСтатистики.ПолучитьСсылку(ОперацияСтатистики.ОперацияСтатистикиНаименование)); + КонецЕсли; + + ЕстьЗапись = Истина; + НовЗапись = НаборЗаписей.Добавить(); + НовЗапись.ИдентификаторОбластиСтатистики = Область; + НовЗапись.ОперацияСтатистики = ОперацииСсылки[ОперацияСтатистики.ОперацияСтатистикиНаименование]; + НовЗапись.ВидСтатистики = ТекОбъект.Значение.ВидСтатистики; + НовЗапись.Значение = Число(СтрЗаменить(ОперацияСтатистики.КоличествоОпераций,",",".")); + КонецЦикла; + КонецЦикла; + + Если ЕстьЗапись Тогда + НаборЗаписей.Записать(Ложь); + КонецЕсли; + + ЗафиксироватьТранзакцию(); + Исключение + ОтменитьТранзакцию(); + + Ошибка = ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); + ЗаписьЖурналаРегистрации(НСтр("ru = 'ОбработкаОперацииСтатистики'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), УровеньЖурналаРегистрации.Ошибка,,,Ошибка); + КонецПопытки; +КонецПроцедуры + +Процедура ЗаписатьРазделенную(СтатистикаКонфигурации) + ОбластиДанныхРезультат = ПолучитьОбластиДанныхРезультатЗапроса(); + Выборка = ОбластиДанныхРезультат.Выбрать(); + Пока Выборка.Следующий() Цикл + ОбластьДанныхСтрока = Строка(Выборка.ОбластьДанных); + ОбластьДанныхСсылка = РегистрыСведений.ОбластиСтатистики.ПолучитьСсылку(ОбластьДанныхСтрока); + Если РегистрыСведений.ОбластиСтатистики.СобиратьСтатистикуКонфигурации(ОбластьДанныхСтрока) Тогда + Попытка + ОбщегоНазначения.УстановитьРазделениеСеанса(Истина, Выборка.ОбластьДанных); + Исключение + Инфо = ИнформацияОбОшибке(); + ЗаписьЖурналаРегистрации(НСтр("ru = 'СтатистикаКонфигурации'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), + УровеньЖурналаРегистрации.Ошибка, + ,, + ПодробноеПредставлениеОшибки(Инфо)); + + ОбщегоНазначения.УстановитьРазделениеСеанса(Ложь); + Продолжить; + КонецПопытки; + Записать(СтатистикаКонфигурации, ОбластьДанныхСсылка); + ОбщегоНазначения.УстановитьРазделениеСеанса(Ложь); + КонецЕсли; + КонецЦикла; +КонецПроцедуры + +Функция ПолучитьОбластиДанныхРезультатЗапроса() Экспорт + БазоваяФункциональностьВМоделиСервисаСуществует = ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаВМоделиСервиса.БазоваяФункциональностьВМоделиСервиса"); + Если БазоваяФункциональностьВМоделиСервисаСуществует Тогда + МодульРаботаВМоделиСервиса = ОбщегоНазначения.ОбщийМодуль("РаботаВМоделиСервиса"); + Результат = МодульРаботаВМоделиСервиса.ПолучитьОбластиДанныхРезультатЗапроса(); + КонецЕсли; + + Возврат Результат; +КонецФункции + +Функция ПолучитьРезультатОперацииСтатистики(ОперацияСтатистикиКорень, РезультатЗапроса) + ОперацииСтатистики = Новый Массив; + + Если РезультатЗапроса <> Неопределено Тогда + Выборка = РезультатЗапроса.Выбрать(); + Пока Выборка.Следующий() Цикл + ОперацияСтатистикиПредставление = ОперацияСтатистикиКорень + "."; + Количество = "0,000"; + + ОперацияСтатистики = Новый Структура("ОперацияСтатистикиНаименование, КоличествоОпераций"); + + Для Каждого ТекКолонка Из РезультатЗапроса.Колонки Цикл + Если ТекКолонка.Имя <> "Количество" Тогда + ОперацияСтатистикиПредставление = ОперацияСтатистикиПредставление + Выборка[ТекКолонка.Имя] + "."; + Иначе + Количество = Формат(Выборка[ТекКолонка.Имя], "ЧДЦ=3; ЧРД=,; ЧН=0,000; ЧГ="); + КонецЕсли; + КонецЦикла; + ОперацияСтатистики.ОперацияСтатистикиНаименование = Лев(ОперацияСтатистикиПредставление, СтрДлина(ОперацияСтатистикиПредставление) - 1); + ОперацияСтатистики.КоличествоОпераций = Количество; + + ОперацииСтатистики.Добавить(ОперацияСтатистики); + КонецЦикла; + КонецЕсли; + + Возврат ОперацииСтатистики; +КонецФункции + +Функция ПолучитьРезультат(ТекстЗапроса) + Результат = Неопределено; + + Запрос = Новый Запрос(ТекстЗапроса); + Результат = Запрос.Выполнить(); + + Возврат Результат; +КонецФункции + +Функция ЗапросПоУмолчанию(ТаблицаМетаданных) + ТекстЗапроса = "ВЫБРАТЬ + | КОЛИЧЕСТВО(*) КАК Количество + |ИЗ + | " + ТаблицаМетаданных + " + |"; + + Возврат ТекстЗапроса; +КонецФункции + +#КонецОбласти + +#КонецЕсли \ No newline at end of file diff --git a/SSL/src/InformationRegisters/СтатистикаКонфигурации/СтатистикаКонфигурации.mdo b/SSL/src/InformationRegisters/СтатистикаКонфигурации/СтатистикаКонфигурации.mdo new file mode 100644 index 000000000..b1c00b48c --- /dev/null +++ b/SSL/src/InformationRegisters/СтатистикаКонфигурации/СтатистикаКонфигурации.mdo @@ -0,0 +1,132 @@ + + + + + + + + + + + + СтатистикаКонфигурации + + ru + Статистика конфигурации + + true + InDialog + InformationRegister.СтатистикаКонфигурации.Form.ФормаСписка + + Use + Active + + Use + + + + + Use + LineNumber + + Use + + + + + Use + Recorder + + Use + + + + + Use + Period + + ShowError + Use + + + + Managed + + Значение + + ru + Значение + + + Number + + 15 + 3 + + + + + Use + Use + + + + ВидСтатистики + + ru + Вид статистики + + + Number + + 1 + + + + + Index + Use + + true + + + ИдентификаторОбластиСтатистики + + ru + Идентификатор области статистики + + + UUID + + + + Use + + true + + + ОперацияСтатистики + + ru + Операция статистики + + + UUID + + + + Index + Use + + true + + + ФормаСписка + + ru + Форма списка + + PersonalComputer + MobileDevice + + diff --git a/SSL/src/InformationRegisters/ТаблицыГруппДоступа/Forms/ФормаЗаписи/Form.form b/SSL/src/InformationRegisters/ТаблицыГруппДоступа/Forms/ФормаЗаписи/Form.form index 1bbcce8c2..4f94c9796 100644 --- a/SSL/src/InformationRegisters/ТаблицыГруппДоступа/Forms/ФормаЗаписи/Form.form +++ b/SSL/src/InformationRegisters/ТаблицыГруппДоступа/Forms/ФормаЗаписи/Form.form @@ -242,7 +242,6 @@ true true true - UseIfNecessary auto true @@ -296,7 +295,7 @@ ВключитьВозможностьРедактирования - Auto + DontUse Auto diff --git a/SSL/src/InformationRegisters/ТаблицыГруппДоступа/Forms/ФормаСписка/Form.form b/SSL/src/InformationRegisters/ТаблицыГруппДоступа/Forms/ФормаСписка/Form.form index 726e1d685..26923958d 100644 --- a/SSL/src/InformationRegisters/ТаблицыГруппДоступа/Forms/ФормаСписка/Form.form +++ b/SSL/src/InformationRegisters/ТаблицыГруппДоступа/Forms/ФормаСписка/Form.form @@ -462,7 +462,6 @@ true true true - UseIfNecessary auto true @@ -514,7 +513,7 @@ ВключитьВозможностьРедактирования - Auto + DontUse Auto @@ -536,7 +535,7 @@ ОбновитьДанныеРегистра - Auto + DontUse Auto diff --git a/SSL/src/InformationRegisters/УдалитьАдресныйКлассификатор/УдалитьАдресныйКлассификатор.mdo b/SSL/src/InformationRegisters/УдалитьАдресныйКлассификатор/УдалитьАдресныйКлассификатор.mdo index 38b5a2cca..28589457c 100644 --- a/SSL/src/InformationRegisters/УдалитьАдресныйКлассификатор/УдалитьАдресныйКлассификатор.mdo +++ b/SSL/src/InformationRegisters/УдалитьАдресныйКлассификатор/УдалитьАдресныйКлассификатор.mdo @@ -49,7 +49,6 @@ - true Managed Наименование diff --git a/SSL/src/InformationRegisters/УдалитьНаборыЗначенийДоступа/ManagerModule.bsl b/SSL/src/InformationRegisters/УдалитьНаборыЗначенийДоступа/ManagerModule.bsl index 7d0b06ba5..a44c66db9 100644 --- a/SSL/src/InformationRegisters/УдалитьНаборыЗначенийДоступа/ManagerModule.bsl +++ b/SSL/src/InformationRegisters/УдалитьНаборыЗначенийДоступа/ManagerModule.bsl @@ -134,8 +134,8 @@ КонецЕсли; КонецЦикла; - ТипыВладельцевНастроекПрав = УправлениеДоступомСлужебныйПовтИсп.Параметры( - ).ВозможныеПраваДляНастройкиПравОбъектов.ПоТипамСсылок; + ТекущиеПараметры = УправлениеДоступомСлужебныйПовтИсп.Параметры(); + ТипыВладельцевНастроекПрав = ТекущиеПараметры.ВозможныеПраваДляНастройкиПравОбъектов.ПоТипамСсылок; Для каждого СтараяСтрока Из СтарыеЗаписи Цикл Если ДействующиеНаборы.Получить(СтараяСтрока.НомерНабора) = Неопределено Тогда diff --git a/SSL/src/InformationRegisters/УдалитьОбластиДанных/Forms/ФормаСписка/Form.form b/SSL/src/InformationRegisters/УдалитьОбластиДанных/Forms/ФормаСписка/Form.form index 05abb52b7..9c9ffa8fd 100644 --- a/SSL/src/InformationRegisters/УдалитьОбластиДанных/Forms/ФормаСписка/Form.form +++ b/SSL/src/InformationRegisters/УдалитьОбластиДанных/Forms/ФормаСписка/Form.form @@ -62,7 +62,7 @@ true - Список.Представление + Список.Префикс None @@ -121,7 +121,7 @@ true - Список.Статус + Список.Представление true @@ -264,9 +264,6 @@ true - - Список.Префикс - ПрефиксРасширеннаяПодсказка 40 @@ -509,7 +506,6 @@ true true true - UseIfNecessary auto true @@ -526,28 +522,9 @@
      true
      - ВЫБРАТЬ - РегистрСведенийОбластиДанных.ОбластьДанных, - РегистрСведенийОбластиДанных.Статус, - РегистрСведенийОбластиДанных.Повтор, - РегистрСведенийОбластиДанных.ИдентификаторВыгрузки, - РегистрСведенийОбластиДанных.ОшибкаОбработки, - РегистрСведенийОбластиДанных.Вариант, - ПредставлениеОбластиДанных.Значение КАК Представление, - ЧасовойПоясОбластиДанных.Значение КАК ЧасовойПояс, - ПрефиксОбластиДанных.Значение КАК Префикс -ИЗ - РегистрСведений.ОбластиДанных КАК РегистрСведенийОбластиДанных - ЛЕВОЕ СОЕДИНЕНИЕ Константа.ПредставлениеОбластиДанных КАК ПредставлениеОбластиДанных - ПО РегистрСведенийОбластиДанных.ОбластьДанных = ПредставлениеОбластиДанных.ОбластьДанныхВнутренниеДанные - ЛЕВОЕ СОЕДИНЕНИЕ Константа.ЧасовойПоясОбластиДанных КАК ЧасовойПоясОбластиДанных - ПО РегистрСведенийОбластиДанных.ОбластьДанных = ЧасовойПоясОбластиДанных.ОбластьДанныхВнутренниеДанные - ЛЕВОЕ СОЕДИНЕНИЕ Константа.ПрефиксОбластиДанных КАК ПрефиксОбластиДанных - ПО РегистрСведенийОбластиДанных.ОбластьДанных = ПрефиксОбластиДанных.ОбластьДанныхВнутренниеДанные InformationRegister.УдалитьОбластиДанных true true - true true true diff --git a/SSL/src/InformationRegisters/УдалитьОчередьЗаданий/Forms/ФормаСписка/Form.form b/SSL/src/InformationRegisters/УдалитьОчередьЗаданий/Forms/ФормаСписка/Form.form index 0e1412a6e..d1f44d155 100644 --- a/SSL/src/InformationRegisters/УдалитьОчередьЗаданий/Forms/ФормаСписка/Form.form +++ b/SSL/src/InformationRegisters/УдалитьОчередьЗаданий/Forms/ФормаСписка/Form.form @@ -58,9 +58,6 @@ true - - Список.Задание - true ЗаданиеРасширеннаяПодсказка @@ -347,9 +344,6 @@ true - - Список.РегламентноеЗадание - true РегламентноеЗаданиеРасширеннаяПодсказка @@ -673,7 +667,6 @@ true true true - UseIfNecessary auto true diff --git a/SSL/src/InformationRegisters/ФайлыВРабочемКаталоге/Forms/ФормаСписка/Form.form b/SSL/src/InformationRegisters/ФайлыВРабочемКаталоге/Forms/ФормаСписка/Form.form index bd2f7d8f3..e1f6e333c 100644 --- a/SSL/src/InformationRegisters/ФайлыВРабочемКаталоге/Forms/ФормаСписка/Form.form +++ b/SSL/src/InformationRegisters/ФайлыВРабочемКаталоге/Forms/ФормаСписка/Form.form @@ -528,7 +528,6 @@ true true true - UseIfNecessary auto true diff --git a/SSL/src/Reports/АнализВерсийОбъектов/Help/ru.html b/SSL/src/Reports/АнализВерсийОбъектов/Help/ru.html index 7595e7685..95a234edd 100644 --- a/SSL/src/Reports/АнализВерсийОбъектов/Help/ru.html +++ b/SSL/src/Reports/АнализВерсийОбъектов/Help/ru.html @@ -9,4 +9,4 @@ \ No newline at end of file + \ No newline at end of file diff --git a/SSL/src/Reports/АнализЖурналаРегистрации/Forms/СведенияОРегламентномЗадании/Form.form b/SSL/src/Reports/АнализЖурналаРегистрации/Forms/СведенияОРегламентномЗадании/Form.form index 455309ed5..08e513cb9 100644 --- a/SSL/src/Reports/АнализЖурналаРегистрации/Forms/СведенияОРегламентномЗадании/Form.form +++ b/SSL/src/Reports/АнализЖурналаРегистрации/Forms/СведенияОРегламентномЗадании/Form.form @@ -140,7 +140,6 @@ true true true - UseIfNecessary auto true @@ -256,7 +255,7 @@ НастроитьРасписаниеРегламентногоЗадания - Auto + DontUse Auto @@ -278,7 +277,7 @@ ПерейтиКЖурналуРегистрации - Auto + DontUse Auto diff --git a/SSL/src/Reports/АнализЖурналаРегистрации/Forms/СведенияОРегламентномЗадании/Module.bsl b/SSL/src/Reports/АнализЖурналаРегистрации/Forms/СведенияОРегламентномЗадании/Module.bsl index 4eb0654ee..1dbba6c3f 100644 --- a/SSL/src/Reports/АнализЖурналаРегистрации/Forms/СведенияОРегламентномЗадании/Module.bsl +++ b/SSL/src/Reports/АнализЖурналаРегистрации/Forms/СведенияОРегламентномЗадании/Module.bsl @@ -62,7 +62,11 @@ Процедура ПерейтиКЖурналуРегистрации(Команда) Для Каждого Область Из Отчет.ВыделенныеОбласти Цикл - Расшифровка = Область.Расшифровка; + Если Область.Имя = ТипОбластиЯчеекТабличногоДокумента.Прямоугольник Тогда + Расшифровка = Область.Расшифровка; + Иначе + Расшифровка = Неопределено; + КонецЕсли; Если Расшифровка = Неопределено ИЛИ Область.Верх <> Область.Низ Тогда ПоказатьПредупреждение(,НСтр("ru = 'Выберите строку или ячейку нужного сеанса задания'")); @@ -88,8 +92,7 @@ УстановитьПривилегированныйРежим(Истина); МодульРегламентныеЗаданияСервер = ОбщегоНазначения.ОбщийМодуль("РегламентныеЗаданияСервер"); - Возврат МодульРегламентныеЗаданияСервер.ПолучитьРасписаниеРегламентногоЗадания( - ИдентификаторРегламентногоЗадания); + Возврат МодульРегламентныеЗаданияСервер.РасписаниеРегламентногоЗадания(ИдентификаторРегламентногоЗадания); КонецФункции @@ -107,10 +110,10 @@ УстановитьПривилегированныйРежим(Истина); + ПараметрыЗадания = Новый Структура; + ПараметрыЗадания.Вставить("Расписание", Расписание); МодульРегламентныеЗаданияСервер = ОбщегоНазначения.ОбщийМодуль("РегламентныеЗаданияСервер"); - МодульРегламентныеЗаданияСервер.УстановитьРасписаниеРегламентногоЗадания( - ИдентификаторРегламентногоЗадания, - Расписание); + МодульРегламентныеЗаданияСервер.ИзменитьЗадание(ИдентификаторРегламентногоЗадания, ПараметрыЗадания); КонецПроцедуры diff --git a/SSL/src/Reports/АнализЖурналаРегистрации/Forms/ФормаВарианта/Module.bsl b/SSL/src/Reports/АнализЖурналаРегистрации/Forms/ФормаВарианта/Module.bsl index b7d4d5691..1b39839e6 100644 --- a/SSL/src/Reports/АнализЖурналаРегистрации/Forms/ФормаВарианта/Module.bsl +++ b/SSL/src/Reports/АнализЖурналаРегистрации/Forms/ФормаВарианта/Module.bsl @@ -41,10 +41,10 @@ ЭлементСтруктуры = Отчет.КомпоновщикНастроек.Настройки.ПолучитьОбъектПоИдентификатору(Элементы.КомпоновщикНастроекНастройки.ТекущаяСтрока); ТипЭлемента = ТипЗнч(ЭлементСтруктуры); - Если ТипЭлемента = Неопределено ИЛИ - ТипЭлемента = Тип("КоллекцияЭлементовСтруктурыДиаграммыКомпоновкиДанных") ИЛИ - ТипЭлемента = Тип("КоллекцияЭлементовСтруктурыТаблицыКомпоновкиДанных") Тогда - + Если ТипЭлемента = Неопределено + ИЛИ ТипЭлемента = Тип("КоллекцияЭлементовСтруктурыДиаграммыКомпоновкиДанных") + ИЛИ ТипЭлемента = Тип("КоллекцияЭлементовСтруктурыТаблицыКомпоновкиДанных") Тогда + ПоляГруппировкиНедоступны(); ВыбранныеПоляНедоступны(); ОтборНедоступен(); @@ -52,8 +52,8 @@ УсловноеОформлениеНедоступно(); ПараметрыВыводаНедоступны(); - ИначеЕсли ТипЭлемента = Тип("НастройкиКомпоновкиДанных") ИЛИ - ТипЭлемента = Тип("НастройкиВложенногоОбъектаКомпоновкиДанных") Тогда + ИначеЕсли ТипЭлемента = Тип("НастройкиКомпоновкиДанных") + ИЛИ ТипЭлемента = Тип("НастройкиВложенногоОбъектаКомпоновкиДанных") Тогда ПоляГруппировкиНедоступны(); @@ -77,20 +77,20 @@ Элементы.ЛокальныеПараметрыВывода.ТолькоПросмотр = Истина; Элементы.СтраницыПараметровВывода.ТекущаяСтраница = Элементы.НастройкиПараметровВывода; - ИначеЕсли ТипЭлемента = Тип("ГруппировкаКомпоновкиДанных") ИЛИ - ТипЭлемента = Тип("ГруппировкаТаблицыКомпоновкиДанных") ИЛИ - ТипЭлемента = Тип("ГруппировкаДиаграммыКомпоновкиДанных") Тогда - + ИначеЕсли ТипЭлемента = Тип("ГруппировкаКомпоновкиДанных") + ИЛИ ТипЭлемента = Тип("ГруппировкаТаблицыКомпоновкиДанных") + ИЛИ ТипЭлемента = Тип("ГруппировкаДиаграммыКомпоновкиДанных") Тогда + Элементы.СтраницыПолейГруппировки.ТекущаяСтраница = Элементы.НастройкиПолейГруппировки; - + ВыбранныеПоляДоступны(ЭлементСтруктуры); ОтборДоступен(ЭлементСтруктуры); ПорядокДоступен(ЭлементСтруктуры); УсловноеОформлениеДоступно(ЭлементСтруктуры); ПараметрыВыводаДоступны(ЭлементСтруктуры); - ИначеЕсли ТипЭлемента = Тип("ТаблицаКомпоновкиДанных") ИЛИ - ТипЭлемента = Тип("ДиаграммаКомпоновкиДанных") Тогда + ИначеЕсли ТипЭлемента = Тип("ТаблицаКомпоновкиДанных") + ИЛИ ТипЭлемента = Тип("ДиаграммаКомпоновкиДанных") Тогда ПоляГруппировкиНедоступны(); ВыбранныеПоляДоступны(ЭлементСтруктуры); diff --git a/SSL/src/Reports/АнализЖурналаРегистрации/Forms/ФормаОтчета/Form.form b/SSL/src/Reports/АнализЖурналаРегистрации/Forms/ФормаОтчета/Form.form index 61e365630..667f12a8e 100644 --- a/SSL/src/Reports/АнализЖурналаРегистрации/Forms/ФормаОтчета/Form.form +++ b/SSL/src/Reports/АнализЖурналаРегистрации/Forms/ФормаОтчета/Form.form @@ -432,7 +432,6 @@ true true true - UseIfNecessary auto true @@ -615,7 +614,7 @@ СформироватьОтчет - Auto + DontUse Auto diff --git a/SSL/src/Reports/АнализЖурналаРегистрации/ManagerModule.bsl b/SSL/src/Reports/АнализЖурналаРегистрации/ManagerModule.bsl index 216367fe7..3b4507cba 100644 --- a/SSL/src/Reports/АнализЖурналаРегистрации/ManagerModule.bsl +++ b/SSL/src/Reports/АнализЖурналаРегистрации/ManagerModule.bsl @@ -1,6 +1,6 @@ #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда -#Область СлужебныйПрограммныйИнтерфейс +#Область ПрограммныйИнтерфейс // Настройки размещения в панели отчетов. // @@ -41,10 +41,6 @@ НастройкиВарианта.НастройкиДляПоиска.ИменаМакетов = "ПродолжительностьРаботыРегламентныхЗаданий, РасшифровкаРегламентныхЗаданий"; КонецПроцедуры -#КонецОбласти - -#Область ПрограммныйИнтерфейс - // Функция получает информацию по активности пользователей из журнала регистрации // по переданному периоду. // @@ -146,12 +142,12 @@ ПользователиДляАнализа(ПользовательФильтр, ПользователиИГруппы); КонецЕсли; - ОтборЖурналаРегистрации = Новый Структура("ДатаНачала, ДатаОкончания, ИмяПриложения, Уровень, Событие", - ДатаНачала, - ДатаОкончания, - ИмяПриложения, - Уровни, - События); + ОтборЖурналаРегистрации = Новый Структура; + ОтборЖурналаРегистрации.Вставить("ДатаНачала", ДатаНачала); + ОтборЖурналаРегистрации.Вставить("ДатаОкончания", ДатаОкончания); + ОтборЖурналаРегистрации.Вставить("ИмяПриложения", ИмяПриложения); + ОтборЖурналаРегистрации.Вставить("Уровень", Уровни); + ОтборЖурналаРегистрации.Вставить("Событие", События); Если ПользовательФильтр.Количество() = 0 Тогда Возврат Новый Структура("АнализАктивностиПользователей, ОдновременноСессий", ИсходныеДанные, ОдновременноСессий); @@ -252,7 +248,7 @@ // Расчет количества созданных документов и справочников. Если СтрокаДанныхЖурналаРегистрации.Событие = "_$Data$_.New" Тогда - Если Найти(СтрокаДанныхЖурналаРегистрации.Метаданные, "Документ.") > 0 + Если СтрНайти(СтрокаДанныхЖурналаРегистрации.Метаданные, "Документ.") > 0 И ВыводитьДокументы Тогда ВидОбъекта = СтрокаДанныхЖурналаРегистрации.ПредставлениеМетаданных; ОбъектСправочникДокумент = СтрокаДанныхЖурналаРегистрации.Данные; @@ -266,7 +262,7 @@ СтрокаИсходныхДанных.Неделя = СтрокаНеделяГода(СтрокаДанныхЖурналаРегистрации.Дата); КонецЕсли; - Если Найти(СтрокаДанныхЖурналаРегистрации.Метаданные, "Справочник.") > 0 + Если СтрНайти(СтрокаДанныхЖурналаРегистрации.Метаданные, "Справочник.") > 0 И ВыводитьСправочники Тогда ВидОбъекта = СтрокаДанныхЖурналаРегистрации.ПредставлениеМетаданных; ОбъектСправочникДокумент = СтрокаДанныхЖурналаРегистрации.Данные; @@ -285,7 +281,7 @@ // Расчет количества измененных документов и справочников. Если СтрокаДанныхЖурналаРегистрации.Событие = "_$Data$_.Update" Тогда - Если Найти(СтрокаДанныхЖурналаРегистрации.Метаданные, "Документ.") > 0 + Если СтрНайти(СтрокаДанныхЖурналаРегистрации.Метаданные, "Документ.") > 0 И ВыводитьДокументы Тогда ВидОбъекта = СтрокаДанныхЖурналаРегистрации.ПредставлениеМетаданных; ОбъектСправочникДокумент = СтрокаДанныхЖурналаРегистрации.Данные; @@ -299,7 +295,7 @@ СтрокаИсходныхДанных.Неделя = СтрокаНеделяГода(СтрокаДанныхЖурналаРегистрации.Дата); КонецЕсли; - Если Найти(СтрокаДанныхЖурналаРегистрации.Метаданные, "Справочник.") > 0 + Если СтрНайти(СтрокаДанныхЖурналаРегистрации.Метаданные, "Справочник.") > 0 И ВыводитьСправочники Тогда ВидОбъекта = СтрокаДанныхЖурналаРегистрации.ПредставлениеМетаданных; ОбъектСправочникДокумент = СтрокаДанныхЖурналаРегистрации.Данные; @@ -318,7 +314,7 @@ // Расчет количества созданных БизнесПроцессов и Задач. Если СтрокаДанныхЖурналаРегистрации.Событие = "_$Data$_.New" Тогда - Если Найти(СтрокаДанныхЖурналаРегистрации.Метаданные, "БизнесПроцесс.") > 0 + Если СтрНайти(СтрокаДанныхЖурналаРегистрации.Метаданные, "БизнесПроцесс.") > 0 И ВыводитьБизнесПроцессы Тогда ВидОбъекта = СтрокаДанныхЖурналаРегистрации.ПредставлениеМетаданных; ОбъектСправочникДокумент = СтрокаДанныхЖурналаРегистрации.Данные; @@ -332,7 +328,7 @@ СтрокаИсходныхДанных.Неделя = СтрокаНеделяГода(СтрокаДанныхЖурналаРегистрации.Дата); КонецЕсли; - Если Найти(СтрокаДанныхЖурналаРегистрации.Метаданные, "Задача.") > 0 + Если СтрНайти(СтрокаДанныхЖурналаРегистрации.Метаданные, "Задача.") > 0 И ВыводитьЗадачи Тогда ВидОбъекта = СтрокаДанныхЖурналаРегистрации.ПредставлениеМетаданных; ОбъектСправочникДокумент = СтрокаДанныхЖурналаРегистрации.Данные; @@ -351,7 +347,7 @@ // Расчет количества измененных БизнесПроцессов и задач. Если СтрокаДанныхЖурналаРегистрации.Событие = "_$Data$_.Update" Тогда - Если Найти(СтрокаДанныхЖурналаРегистрации.Метаданные, "БизнесПроцесс.") > 0 + Если СтрНайти(СтрокаДанныхЖурналаРегистрации.Метаданные, "БизнесПроцесс.") > 0 И ВыводитьБизнесПроцессы Тогда ВидОбъекта = СтрокаДанныхЖурналаРегистрации.ПредставлениеМетаданных; ОбъектСправочникДокумент = СтрокаДанныхЖурналаРегистрации.Данные; @@ -365,7 +361,7 @@ СтрокаИсходныхДанных.Неделя = СтрокаНеделяГода(СтрокаДанныхЖурналаРегистрации.Дата); КонецЕсли; - Если Найти(СтрокаДанныхЖурналаРегистрации.Метаданные, "Задача.") > 0 + Если СтрНайти(СтрокаДанныхЖурналаРегистрации.Метаданные, "Задача.") > 0 И ВыводитьЗадачи Тогда ВидОбъекта = СтрокаДанныхЖурналаРегистрации.ПредставлениеМетаданных; ОбъектСправочникДокумент = СтрокаДанныхЖурналаРегистрации.Данные; @@ -612,8 +608,7 @@ КонецФункции Функция СтрокаНеделяГода(ДатаГода) - Возврат СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru='Неделя %1'"), НеделяГода(ДатаГода)); + Возврат СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru='Неделя %1'"), НеделяГода(ДатаГода)); КонецФункции Процедура СформироватьСтрокуОдновременноСессий(ОдновременноСессий, МаксМассивПользователей, @@ -628,8 +623,9 @@ Для Каждого ИмяПользователя Из ВременныйМассив Цикл Если ИмяПользователя = Элемент Тогда СчетчикКоличестваСеансовПользователя = СчетчикКоличестваСеансовПользователя + 1; - ПользовательИНомер = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = '%1 (%2)'"), Элемент, СчетчикКоличестваСеансовПользователя); + ПользовательИНомер = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = '%1 (%2)'"), + Элемент, + СчетчикКоличестваСеансовПользователя); КонецЕсли; КонецЦикла; @@ -743,8 +739,9 @@ Если Не ТипЗнч(Элемент) = Тип("Число") И Не ТипЗнч(Элемент) = Тип("Дата") Тогда Область = Макет.ПолучитьОбласть("СписокРегламентныхЗаданий"); - Область.Параметры.СписокРегламентныхЗаданий = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = '%1 (сеанс %2)'"), Элемент, МассивРегламентныхЗаданий.Получить(ИндексРегламентногоЗадания+1)); + Область.Параметры.СписокРегламентныхЗаданий = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = '%1 (сеанс %2)'"), + Элемент, + МассивРегламентныхЗаданий[ИндексРегламентногоЗадания+1]); ИначеЕсли Не ТипЗнч(Элемент) = Тип("Дата") И Не ТипЗнч(Элемент) = Тип("Строка") Тогда Область.Параметры.РасшифровкаЗадания = Новый Массив; @@ -781,8 +778,8 @@ // Заполняем диаграмму ганта Для Каждого СтрокаРегламентныеЗадания Из ТаблицаСеансыРегламентныхЗаданий Цикл - ДлительностьИнтервалаРегламентногоЗадания = СтрокаРегламентныеЗадания.ДатаОкончанияЗадания - - СтрокаРегламентныеЗадания.ДатаЗапускаЗадания; + ДлительностьИнтервалаРегламентногоЗадания = + СтрокаРегламентныеЗадания.ДатаОкончанияЗадания - СтрокаРегламентныеЗадания.ДатаЗапускаЗадания; Если ДлительностьИнтервалаРегламентногоЗадания >= МинимальнаяПродолжительностьСеансовРегламентныхЗаданий Тогда Если ТекущееСобытие <> СтрокаРегламентныеЗадания.НазваниеСобытия Тогда Если ТекущееСобытие <> Неопределено @@ -791,9 +788,10 @@ Точка.Расшифровка.Добавить(ОбщаяПродолжительностьРЗ); Точка.Расшифровка.Добавить(ДатаНачала); Точка.Расшифровка.Добавить(ДатаОкончания); - ТочкаНазвание = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = '%1 (%2 из %3)'"), Точка.Значение, - ЗапусковРегламентногоЗадания, Строка(СтрокаКоличествоЗапусков.Запусков)); + ТочкаНазвание = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = '%1 (%2 из %3)'"), + Точка.Значение, + ЗапусковРегламентногоЗадания, + Строка(СтрокаКоличествоЗапусков.Запусков)); Точка.Значение = ТочкаНазвание; КонецЕсли; СтрокаКоличествоЗапусков = КоличествоЗапусков.Найти( @@ -824,19 +822,20 @@ Точка = ДиаграммаГанта.УстановитьТочку(ТочкаНазвание); ОбщаяПродолжительностьРЗ = 0; КонецЕсли; - КонецЕсли; + КонецЕсли; Значение = ДиаграммаГанта.ПолучитьЗначение(Точка, Серия); Интервал = Значение.Добавить(); Интервал.Начало = СтрокаРегламентныеЗадания.ДатаЗапускаЗадания; - Интервал.Конец = СтрокаРегламентныеЗадания.ДатаОкончанияЗадания; - Интервал.Текст = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = '%1 - %2'"), Формат(Интервал.Начало, "ДЛФ=T"), Формат(Интервал.Конец, "ДЛФ=T")); + Интервал.Конец = СтрокаРегламентныеЗадания.ДатаОкончанияЗадания; + Интервал.Текст = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = '%1 - %2'"), + Формат(Интервал.Начало, "ДЛФ=T"), + Формат(Интервал.Конец, "ДЛФ=T")); ПризнакСменыТочки = Ложь; // Не заполняем расшифровку для фоновых заданий. Если СтрокаРегламентныеЗадания.СобытиеМетаданные <> "" Тогда ИнтервалНачало.Добавить(СтрокаРегламентныеЗадания.ДатаЗапускаЗадания); ИнтервалКонец.Добавить(СтрокаРегламентныеЗадания.ДатаОкончанияЗадания); - СеансРегламентногоЗадания.Добавить(СтрокаРегламентныеЗадания.Сеанс); + СеансРегламентногоЗадания.Добавить(СтрокаРегламентныеЗадания.Сеанс); ОбщаяПродолжительностьРЗ = ДлительностьИнтервалаРегламентногоЗадания + ОбщаяПродолжительностьРЗ; ЗапусковРегламентногоЗадания = ЗапусковРегламентногоЗадания + 1; ПризнакСменыТочки = Истина; @@ -851,9 +850,10 @@ Точка.Расшифровка.Добавить(ОбщаяПродолжительностьРЗ); Точка.Расшифровка.Добавить(ДатаНачала); Точка.Расшифровка.Добавить(ДатаОкончания); - ТочкаНазвание = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = '%1 (%2 из %3)'"), Точка.Значение, - ЗапусковРегламентногоЗадания, Строка(СтрокаКоличествоЗапусков.Запусков)); + ТочкаНазвание = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = '%1 (%2 из %3)'"), + Точка.Значение, + ЗапусковРегламентногоЗадания, + Строка(СтрокаКоличествоЗапусков.Запусков)); Точка.Значение = ТочкаНазвание; КонецЕсли; @@ -920,18 +920,19 @@ СобытияРЗ.Добавить("_$Job$_.Succeed"); УстановитьПривилегированныйРежим(Истина); - ВыгрузитьЖурналРегистрации(ДанныеЖурналаРегистрации, - Новый Структура("Уровень, ДатаНачала, ДатаОкончания, Событие", - Уровни, - ДатаНачала, - ДатаОкончания, - СобытияРЗ)); - + ОтборЖурнала = Новый Структура; + ОтборЖурнала.Вставить("Уровень", Уровни); + ОтборЖурнала.Вставить("ДатаНачала", ДатаНачала); + ОтборЖурнала.Вставить("ДатаОкончания", ДатаОкончания); + ОтборЖурнала.Вставить("Событие", СобытияРЗ); + + ВыгрузитьЖурналРегистрации(ДанныеЖурналаРегистрации, ОтборЖурнала); + // Формируем данные для отбора по регламентным заданиям. СписокВсехРегламентныхЗаданий = РегламентныеЗадания.ПолучитьРегламентныеЗадания(); СоответствиеМетаданныеИдентификатор = Новый Соответствие; СоответствиеМетаданныеНазвание = Новый Соответствие; - СоответствиеНаименованиеИдентификатор = Новый Соответствие; + СоответствиеНаименованиеИдентификатор = Новый Соответствие; УстановитьПривилегированныйРежим(Ложь); Для Каждого РегЗадание Из СписокВсехРегламентныхЗаданий Цикл @@ -1038,8 +1039,8 @@ СоответствиеМетаданныеИдентификатор, СоответствиеМетаданныеНазвание); НазваниеРегламентногоЗадания = НазваниеИУникальныйИдентификатор.НазваниеСеанса; - УникальныйИдентификаторРегламентногоЗадания = НазваниеИУникальныйИдентификатор. - УникальныйИдентификаторРегламентногоЗадания; + УникальныйИдентификаторРегламентногоЗадания = + НазваниеИУникальныйИдентификатор.УникальныйИдентификаторРегламентногоЗадания; Если Не СкрытьРегламентныеЗадания = Неопределено И Не ТипЗнч(СкрытьРегламентныеЗадания) = Тип("Строка") Тогда @@ -1057,12 +1058,12 @@ ДатаОдновременноРегламентныхЗаданий = НачалоЧаса(СтрокаДанныхЖурналаРегистрации.Дата); - Если ТекущаяДата <> ДатаОдновременноРегламентныхЗаданий Тогда + Если ТекущаяДата <> ДатаОдновременноРегламентныхЗаданий Тогда Если СтрокаТаблицы <> Неопределено Тогда - СтрокаТаблицы.ОдновременноРегламентныхЗаданий = ОдновременноРегламентныхЗаданий; - СтрокаТаблицы.ДатаОдновременноРегламентныхЗаданий = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = '%1 - %2'"), Формат(ТекущаяДата, "ДЛФ=T"), - Формат(КонецЧаса(ТекущаяДата), "ДЛФ=T")); + СтрокаТаблицы.ОдновременноРегламентныхЗаданий = ОдновременноРегламентныхЗаданий; + СтрокаТаблицы.ДатаОдновременноРегламентныхЗаданий = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = '%1 - %2'"), + Формат(ТекущаяДата, "ДЛФ=T"), + Формат(КонецЧаса(ТекущаяДата), "ДЛФ=T")); СтрокаТаблицы.СписокРегламентныхЗаданий = МаксМассивРегламентныхЗаданий; КонецЕсли; СтрокаТаблицы = ОдновременноСессий.Добавить(); @@ -1113,9 +1114,9 @@ Если ОдновременноРегламентныхЗаданий <> 0 Тогда СтрокаТаблицы.ОдновременноРегламентныхЗаданий = ОдновременноРегламентныхЗаданий; - СтрокаТаблицы.ДатаОдновременноРегламентныхЗаданий = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = '%1 - %2'"), Формат(ТекущаяДата, "ДЛФ=T"), - Формат(КонецЧаса(ТекущаяДата), "ДЛФ=T")); + СтрокаТаблицы.ДатаОдновременноРегламентныхЗаданий = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = '%1 - %2'"), + Формат(ТекущаяДата, "ДЛФ=T"), + Формат(КонецЧаса(ТекущаяДата), "ДЛФ=T")); СтрокаТаблицы.СписокРегламентныхЗаданий = МаксМассивРегламентныхЗаданий; КонецЕсли; @@ -1409,22 +1410,19 @@ Функция ПродолжительностьРегламентногоЗадания(ПродолжительностьРЗ) Если ПродолжительностьРЗ = 0 Тогда - ОбщаяПродолжительностьРЗ = "0"; + ОбщаяПродолжительностьРЗ = "0"; ИначеЕсли ПродолжительностьРЗ <= 60 Тогда - ОбщаяПродолжительностьРЗ = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = '%1 сек'"), ПродолжительностьРЗ); + ОбщаяПродолжительностьРЗ = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = '%1 сек'"), ПродолжительностьРЗ); ИначеЕсли 60 < ПродолжительностьРЗ <= 3600 Тогда ПродолжительностьМинуты = Формат(ПродолжительностьРЗ/60, "ЧДЦ=0"); - ПродолжительностьСекунды = Формат((Формат(ПродолжительностьРЗ/60, "ЧДЦ=2") - - Цел(ПродолжительностьРЗ/60)) * 60, "ЧДЦ=0"); - ОбщаяПродолжительностьРЗ = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = '%1 мин %2 сек'"), ПродолжительностьМинуты, ПродолжительностьСекунды); + ПродолжительностьСекунды = Формат((Формат(ПродолжительностьРЗ/60, "ЧДЦ=2") + - Цел(ПродолжительностьРЗ/60)) * 60, "ЧДЦ=0"); + ОбщаяПродолжительностьРЗ = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = '%1 мин %2 сек'"), ПродолжительностьМинуты, ПродолжительностьСекунды); ИначеЕсли ПродолжительностьРЗ > 3600 Тогда - ПродолжительностьЧасы = Формат(ПродолжительностьРЗ/60/60, "ЧДЦ=0"); + ПродолжительностьЧасы = Формат(ПродолжительностьРЗ/60/60, "ЧДЦ=0"); ПродолжительностьМинуты = (Формат(ПродолжительностьРЗ/60/60, "ЧДЦ=2") - Цел(ПродолжительностьРЗ/60/60))*60; - ПродолжительностьМинуты = Формат(ПродолжительностьМинуты, "ЧДЦ=0"); - ОбщаяПродолжительностьРЗ = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = '%1 ч %2 мин'"), ПродолжительностьЧасы, ПродолжительностьМинуты); + ПродолжительностьМинуты = Формат(ПродолжительностьМинуты, "ЧДЦ=0"); + ОбщаяПродолжительностьРЗ = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = '%1 ч %2 мин'"), ПродолжительностьЧасы, ПродолжительностьМинуты); КонецЕсли; Возврат ОбщаяПродолжительностьРЗ; diff --git a/SSL/src/Reports/АнализЖурналаРегистрации/Templates/ПродолжительностьРаботыРегламентныхЗаданий/Template.mxlx b/SSL/src/Reports/АнализЖурналаРегистрации/Templates/ПродолжительностьРаботыРегламентныхЗаданий/Template.mxlx index 8f249cb78..468b7f51e 100644 --- a/SSL/src/Reports/АнализЖурналаРегистрации/Templates/ПродолжительностьРаботыРегламентныхЗаданий/Template.mxlx +++ b/SSL/src/Reports/АнализЖурналаРегистрации/Templates/ПродолжительностьРаботыРегламентныхЗаданий/Template.mxlx @@ -2986,9 +2986,9 @@ Day 1 true - 2015-07-14T10:00:00 - 2015-07-23T10:59:59 - 2015-07-14T10:00:00 + 2015-12-17T10:00:00 + 2015-12-26T10:59:59 + 2015-12-17T10:00:00 Gradient 3 Day diff --git a/SSL/src/Reports/АнализОпроса/Forms/РасшифровкаПростыхОтветов/Form.form b/SSL/src/Reports/АнализОпроса/Forms/РасшифровкаПростыхОтветов/Form.form index 88639d938..628b05a52 100644 --- a/SSL/src/Reports/АнализОпроса/Forms/РасшифровкаПростыхОтветов/Form.form +++ b/SSL/src/Reports/АнализОпроса/Forms/РасшифровкаПростыхОтветов/Form.form @@ -135,7 +135,6 @@ true true true - UseIfNecessary auto true diff --git a/SSL/src/Reports/АнализОпроса/Forms/РасшифровкаПростыхОтветов/Module.bsl b/SSL/src/Reports/АнализОпроса/Forms/РасшифровкаПростыхОтветов/Module.bsl index 59e7fa7eb..2fffda7ba 100644 --- a/SSL/src/Reports/АнализОпроса/Forms/РасшифровкаПростыхОтветов/Module.bsl +++ b/SSL/src/Reports/АнализОпроса/Forms/РасшифровкаПростыхОтветов/Module.bsl @@ -13,7 +13,7 @@ КонецЕсли; ШаблонЗаголовка = НСтр("ru = 'Ответы на вопрос № %1 опроса %2 + от %3.'"); - Заголовок = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонЗаголовка, ПолныйКод, НаименованиеОпроса , Формат(ДатаОпроса,"ДФ=dd.MM.yyyy")); + Заголовок = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонЗаголовка, ПолныйКод, НаименованиеОпроса, Формат(ДатаОпроса,"ДФ=dd.MM.yyyy")); СформироватьОтчет(); diff --git a/SSL/src/Reports/АнализОпроса/Forms/РасшифровкаТабличныхВопросов/Form.form b/SSL/src/Reports/АнализОпроса/Forms/РасшифровкаТабличныхВопросов/Form.form index 1df7c010b..d33526809 100644 --- a/SSL/src/Reports/АнализОпроса/Forms/РасшифровкаТабличныхВопросов/Form.form +++ b/SSL/src/Reports/АнализОпроса/Forms/РасшифровкаТабличныхВопросов/Form.form @@ -68,7 +68,6 @@ true true true - UseIfNecessary auto true diff --git a/SSL/src/Reports/АнализОпроса/Forms/ФормаОтчета/Form.form b/SSL/src/Reports/АнализОпроса/Forms/ФормаОтчета/Form.form index 91a4092e4..79086afb6 100644 --- a/SSL/src/Reports/АнализОпроса/Forms/ФормаОтчета/Form.form +++ b/SSL/src/Reports/АнализОпроса/Forms/ФормаОтчета/Form.form @@ -245,7 +245,6 @@ true true true - UseIfNecessary auto true @@ -374,7 +373,7 @@ Сформировать - Auto + DontUse Auto diff --git a/SSL/src/Reports/АнализОпроса/Forms/ФормаОтчета/Module.bsl b/SSL/src/Reports/АнализОпроса/Forms/ФормаОтчета/Module.bsl index 6105db80b..24bc42d88 100644 --- a/SSL/src/Reports/АнализОпроса/Forms/ФормаОтчета/Module.bsl +++ b/SSL/src/Reports/АнализОпроса/Forms/ФормаОтчета/Module.bsl @@ -22,11 +22,28 @@ СтандартнаяОбработка = Ложь; Если Расшифровка.ТипВопроса = ПредопределенноеЗначение("Перечисление.ТипыВопросовШаблонаАнкеты.Табличный") Тогда - ОткрытьФорму("Отчет.АнализОпроса.Форма.РасшифровкаТабличныхВопросов",Новый Структура("Опрос,ВопросШаблонаАнкеты,ПолныйКод,НаименованиеОпроса,ДатаОпроса", - Опрос,Расшифровка.ВопросШаблона,Расшифровка.ПолныйКод,НаименованиеОпроса,ДатаОпроса),ЭтотОбъект); + + СтруктураОткрытия = Новый Структура; + СтруктураОткрытия.Вставить("Опрос", Опрос); + СтруктураОткрытия.Вставить("ВопросШаблонаАнкеты", Расшифровка.ВопросШаблона); + СтруктураОткрытия.Вставить("ПолныйКод", Расшифровка.ПолныйКод); + СтруктураОткрытия.Вставить("НаименованиеОпроса", НаименованиеОпроса); + СтруктураОткрытия.Вставить("ДатаОпроса", ДатаОпроса); + + ОткрытьФорму("Отчет.АнализОпроса.Форма.РасшифровкаТабличныхВопросов", СтруктураОткрытия, ЭтотОбъект); + Иначе - ОткрытьФорму("Отчет.АнализОпроса.Форма.РасшифровкаПростыхОтветов",Новый Структура("Опрос,ВопросШаблонаАнкеты,ВариантОтчета,ПолныйКод,НаименованиеОпроса,ДатаОпроса", - Опрос,Расшифровка.ВопросШаблона,"Респонденты",Расшифровка.ПолныйКод,НаименованиеОпроса,ДатаОпроса),ЭтотОбъект); + + СтруктураОткрытия = Новый Структура; + СтруктураОткрытия.Вставить("Опрос", Опрос); + СтруктураОткрытия.Вставить("ВопросШаблонаАнкеты", Расшифровка.ВопросШаблона); + СтруктураОткрытия.Вставить("ВариантОтчета", "Респонденты"); + СтруктураОткрытия.Вставить("ПолныйКод", Расшифровка.ПолныйКод); + СтруктураОткрытия.Вставить("НаименованиеОпроса", НаименованиеОпроса); + СтруктураОткрытия.Вставить("ДатаОпроса", ДатаОпроса); + + ОткрытьФорму("Отчет.АнализОпроса.Форма.РасшифровкаПростыхОтветов", СтруктураОткрытия, ЭтотОбъект); + КонецЕсли; КонецПроцедуры diff --git a/SSL/src/Reports/АнализОпроса/ManagerModule.bsl b/SSL/src/Reports/АнализОпроса/ManagerModule.bsl index 37a796765..75c77e4ef 100644 --- a/SSL/src/Reports/АнализОпроса/ManagerModule.bsl +++ b/SSL/src/Reports/АнализОпроса/ManagerModule.bsl @@ -1,6 +1,6 @@ #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда -#Область СлужебныйПрограммныйИнтерфейс +#Область ПрограммныйИнтерфейс // Настройки размещения в панели отчетов. // diff --git a/SSL/src/Reports/АнализОпроса/ObjectModule.bsl b/SSL/src/Reports/АнализОпроса/ObjectModule.bsl index 3043e632c..8b0d82d19 100644 --- a/SSL/src/Reports/АнализОпроса/ObjectModule.bsl +++ b/SSL/src/Reports/АнализОпроса/ObjectModule.bsl @@ -860,8 +860,8 @@ СтрокаСлэш = " / "; СтрокаВозврата = "" + ?(ПустаяСтрока(Количество),"",Количество) + Символы.ПС - + ?(ПустаяСтрока(Минимум),"",Минимум + СтрокаСлэш)+ ?(ПустаяСтрока(Максимум),"",Максимум + СтрокаСлэш) + ?(ПустаяСтрока(Среднее),"",Среднее)+ - ?(?(АгрегироватьСуммуВОтчетах = Неопределено,СтрокаДерева.АгрегироватьСуммуВОтчетах,АгрегироватьСуммуВОтчетах),Символы.ПС + ?(ПустаяСтрока(Сумма) = "∑ 0","","∑ " + Сумма),""); + + ?(ПустаяСтрока(Минимум),"",Минимум + СтрокаСлэш)+ ?(ПустаяСтрока(Максимум),"",Максимум + СтрокаСлэш) + ?(ПустаяСтрока(Среднее),"",Среднее) + + ?(?(АгрегироватьСуммуВОтчетах = Неопределено,СтрокаДерева.АгрегироватьСуммуВОтчетах,АгрегироватьСуммуВОтчетах),Символы.ПС + ?(ПустаяСтрока(Сумма) = "∑ 0","","∑ " + Сумма),""); АнкетированиеКлиентСервер.УдалитьПоследниеСимволыИзСтроки(СтрокаВозврата,СтрокаСлэш); diff --git a/SSL/src/Reports/АналитическийОтчетПоАнкетированию/Help/ru.html b/SSL/src/Reports/АналитическийОтчетПоАнкетированию/Help/ru.html index 79e51bc16..0b71a3ee5 100644 --- a/SSL/src/Reports/АналитическийОтчетПоАнкетированию/Help/ru.html +++ b/SSL/src/Reports/АналитическийОтчетПоАнкетированию/Help/ru.html @@ -16,4 +16,4 @@ \ No newline at end of file + \ No newline at end of file diff --git a/SSL/src/Reports/АналитическийОтчетПоАнкетированию/ManagerModule.bsl b/SSL/src/Reports/АналитическийОтчетПоАнкетированию/ManagerModule.bsl index 578f273ba..7b7a6d4ef 100644 --- a/SSL/src/Reports/АналитическийОтчетПоАнкетированию/ManagerModule.bsl +++ b/SSL/src/Reports/АналитическийОтчетПоАнкетированию/ManagerModule.bsl @@ -1,6 +1,6 @@ #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда -#Область СлужебныйПрограммныйИнтерфейс +#Область ПрограммныйИнтерфейс // Настройки размещения в панели отчетов. // diff --git a/SSL/src/Reports/БизнесПроцессы/Help/ru.html b/SSL/src/Reports/БизнесПроцессы/Help/ru.html index 4ac6f4492..2ebc19dfa 100644 --- a/SSL/src/Reports/БизнесПроцессы/Help/ru.html +++ b/SSL/src/Reports/БизнесПроцессы/Help/ru.html @@ -11,4 +11,4 @@ \ No newline at end of file + \ No newline at end of file diff --git a/SSL/src/Reports/БизнесПроцессы/ManagerModule.bsl b/SSL/src/Reports/БизнесПроцессы/ManagerModule.bsl index 8d12f7c19..c49590820 100644 --- a/SSL/src/Reports/БизнесПроцессы/ManagerModule.bsl +++ b/SSL/src/Reports/БизнесПроцессы/ManagerModule.bsl @@ -1,6 +1,6 @@ #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда -#Область СлужебныйПрограммныйИнтерфейс +#Область ПрограммныйИнтерфейс // Настройки размещения в панели отчетов. // diff --git a/SSL/src/Reports/БизнесПроцессы/ObjectModule.bsl b/SSL/src/Reports/БизнесПроцессы/ObjectModule.bsl new file mode 100644 index 000000000..e69de29bb diff --git a/SSL/src/Reports/ДатыЗапретаЗагрузки/Forms/ФормаОтчета/Form.form b/SSL/src/Reports/ДатыЗапретаЗагрузки/Forms/ФормаОтчета/Form.form index 597176c76..7ecb53c2b 100644 --- a/SSL/src/Reports/ДатыЗапретаЗагрузки/Forms/ФормаОтчета/Form.form +++ b/SSL/src/Reports/ДатыЗапретаЗагрузки/Forms/ФормаОтчета/Form.form @@ -1,100 +1,22 @@ - - <key>ru</key> - <value>Даты запрета загрузки данных</value> - - - ГруппаВарианта - 1 - - НаименованиеТекущегоВарианта - 2 - true - true - - true - - - НаименованиеТекущегоВарианта - - Left - - НаименованиеТекущегоВариантаExtendedTooltip - 20 - Label - true - true - - Left - - - - НаименованиеТекущегоВариантаКонтекстноеМеню - 3 - true - - InputField - true - Enter - true - Left - true - - true - true - true - true - true - true - Normal - - - true - true - - true - - - <key>ru</key> - <value>Группа варианта</value> - - - ГруппаВариантаExtendedTooltip - 19 - Label - true - true - - Left - - - UsualGroup - - Auto - true - true - Auto - Auto - - ОсновнаяКоманднаяПанель - 5 + 1 - КомандыФормы - 12 + ВариантыОтчета + 8 - ФормаСформировать - 18 + ФормаПервыйВариант + 10 true true true - ФормаСформироватьExtendedTooltip - 23 + ФормаПервыйВариантРасширеннаяПодсказка + 11 Label true true @@ -102,33 +24,7 @@ Left - Form.StandardCommand.Generate - Auto - true - true - true - UserCmds - Auto - - - ФормаНастройкиОтчета - 17 - true - true - - true - - - ФормаНастройкиОтчетаExtendedTooltip - 24 - Label - true - true - - Left - - - Form.StandardCommand.ReportSettings + Form.Command.ПервыйВариант Normal Auto true @@ -137,16 +33,16 @@ Auto - ФормаЗагрузитьНастройкиОтчета - 16 + ФормаВторойВариант + 12 true true true - ФормаЗагрузитьНастройкиОтчетаExtendedTooltip - 25 + ФормаВторойВариантРасширеннаяПодсказка + 13 Label true true @@ -154,33 +50,7 @@ Left - Form.StandardCommand.LoadReportSettings - Normal - Auto - true - true - UserCmds - Auto - - - ФормаСохранитьНастройкиОтчета - 15 - true - true - - true - - - ФормаСохранитьНастройкиОтчетаExtendedTooltip - 26 - Label - true - true - - Left - - - Form.StandardCommand.SaveReportSettings + Form.Command.ВторойВариант Normal Auto true @@ -195,15 +65,11 @@ <key>ru</key> - <value>Команды формы</value> + <value>Варианты отчета</value> - - ru - Команды формы - - КомандыФормыExtendedTooltip - 22 + ВариантыОтчетаРасширеннаяПодсказка + 9 Label true true @@ -211,36 +77,12 @@ Left - - Form + Popup + + Auto + Normal - - Справка - 13 - true - true - - true - - - СправкаExtendedTooltip - 27 - Label - true - true - - Left - - - Form.StandardCommand.Help - Normal - Auto - true - true - UserCmds - Auto - true true @@ -251,8 +93,8 @@ Основная командная панель - ОсновнаяКоманднаяПанельExtendedTooltip - 21 + ОсновнаяКоманднаяПанельРасширеннаяПодсказка + 2 Label true true @@ -263,108 +105,25 @@ CommandBar Left + Form - - КомпоновщикНастроекПользовательскиеНастройки - 6 - - <key>ru</key> - <value>Таблица пользовательских настроек</value> - + + ГруппаПользовательскихНастроек + 3 true true true - - Отчет.SettingsComposer.UserSettings - - None - HierarchicalList - List - Tree - None - - КомпоновщикНастроекПользовательскиеНастройкиКоманднаяПанель - 8 - Left - true - - - КомпоновщикНастроекПользовательскиеНастройкиSearchString - 30 - - КомпоновщикНастроекПользовательскиеНастройкиSearchStringExtendedTooltip - 32 - Label - true - true - - Left - - - - КомпоновщикНастроекПользовательскиеНастройкиSearchStringContextMenu - 31 - true - - КомпоновщикНастроекПользовательскиеНастройки - - true - - - - КомпоновщикНастроекПользовательскиеНастройкиViewStatus - 33 - - КомпоновщикНастроекПользовательскиеНастройкиViewStatusExtendedTooltip - 35 - Label - true - true - - Left - - - - КомпоновщикНастроекПользовательскиеНастройкиViewStatusContextMenu - 34 - true - - ViewStatusAddition - КомпоновщикНастроекПользовательскиеНастройки - - true - - - - КомпоновщикНастроекПользовательскиеНастройкиSearchControl - 36 - - КомпоновщикНастроекПользовательскиеНастройкиSearchControlExtendedTooltip - 38 - Label - true - true - - Left - - - - КомпоновщикНастроекПользовательскиеНастройкиSearchControlContextMenu - 37 - true - - SearchControlAddition - КомпоновщикНастроекПользовательскиеНастройки - - true - - + + <key>ru</key> + <value>Группа пользовательских настроек</value> + + false - КомпоновщикНастроекПользовательскиеНастройкиExtendedTooltip - 28 + ГруппаПользовательскихНастроекРасширеннаяПодсказка + 4 Label true true @@ -372,39 +131,20 @@ Left - - КомпоновщикНастроекПользовательскиеНастройкиКонтекстноеМеню - 7 - true - - HierarchicalList - true - true - true - true - true - true - MultiRow - 1 - 1 - AutoUse - AutoUse - true - true - false - Auto - Auto - true - None - None - None - true - QuickAccess - Show + UsualGroup + + Vertical + Auto + WeakSeparation + true + true + Auto + Auto + Результат - 9 + 5 true true @@ -413,10 +153,11 @@ Результат + true None - РезультатExtendedTooltip - 29 + РезультатРасширеннаяПодсказка + 7 Label true true @@ -426,7 +167,7 @@ РезультатКонтекстноеМеню - 10 + 6 true SpreadsheetDocumentField @@ -464,7 +205,6 @@ ChangeVariant LoadVariant - NewWindow SaveVariant DontBlock true @@ -473,7 +213,6 @@ true true true - UseIfNecessary auto true @@ -490,31 +229,13 @@
      true
      - - НаименованиеТекущегоВарианта - - <key>ru</key> - <value>Вариант отчета</value> - - 2 - - String - - - - true - - - true - - Результат <key>ru</key> <value>Результат</value> - 3 + 2 SpreadsheetDocument @@ -528,7 +249,7 @@ ДанныеРасшифровки - 4 + 3 String @@ -540,21 +261,49 @@ true - - ПоРазделамОбъектам - - Boolean - - true - + + ПервыйВариант + + <key>ru</key> + <value>Первый вариант</value> + + 1 + + true + + + + ПервыйВариант + + + DontUse + Auto + + + ВторойВариант + + <key>ru</key> + <value>Второй вариант</value> + + 2 + + true + + + + ВторойВариант + + + DontUse + Auto + - Show Результат ДанныеРасшифровки - НаименованиеТекущегоВарианта + ГруппаПользовательскихНастроек
      diff --git a/SSL/src/Reports/ДатыЗапретаЗагрузки/Forms/ФормаОтчета/Module.bsl b/SSL/src/Reports/ДатыЗапретаЗагрузки/Forms/ФормаОтчета/Module.bsl index 9dff73299..f446c5ba7 100644 --- a/SSL/src/Reports/ДатыЗапретаЗагрузки/Forms/ФормаОтчета/Module.bsl +++ b/SSL/src/Reports/ДатыЗапретаЗагрузки/Forms/ФормаОтчета/Module.bsl @@ -8,29 +8,36 @@ Возврат; КонецЕсли; - Свойства = ДатыЗапретаИзмененияСлужебныйПовтИсп.СвойстваРазделов(); + УстановитьВариантНаСервере(); - // Установка варианта отчета. - Если Параметры.ПоРазделамОбъектам = Истина Тогда - - Если Свойства.ПоказыватьРазделы И НЕ Свойства.ВсеРазделыБезОбъектов Тогда - УстановитьТекущийВариант("ДатыЗапретаЗагрузкиПоРазделамОбъектамДляПользователей"); - - ИначеЕсли Свойства.ВсеРазделыБезОбъектов Тогда - УстановитьТекущийВариант("ДатыЗапретаЗагрузкиПоРазделамДляПользователей"); - Иначе - УстановитьТекущийВариант("ДатыЗапретаЗагрузкиПоОбъектамДляПользователей"); - КонецЕсли; - Иначе - Если Свойства.ПоказыватьРазделы И НЕ Свойства.ВсеРазделыБезОбъектов Тогда - УстановитьТекущийВариант("ДатыЗапретаЗагрузкиПоПользователям"); - - ИначеЕсли Свойства.ВсеРазделыБезОбъектов Тогда - УстановитьТекущийВариант("ДатыЗапретаЗагрузкиПоПользователямБезОбъектов"); - Иначе - УстановитьТекущийВариант("ДатыЗапретаЗагрузкиПоПользователямБезРазделов"); - КонецЕсли; - КонецЕсли; +КонецПроцедуры + +#КонецОбласти + +#Область ОбработчикиКомандФормы + +&НаКлиенте +Процедура ПервыйВариант(Команда) + + УстановитьВариантНаСервере(1); + +КонецПроцедуры + +&НаКлиенте +Процедура ВторойВариант(Команда) + + УстановитьВариантНаСервере(2); + +КонецПроцедуры + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +&НаСервере +Процедура УстановитьВариантНаСервере(Вариант = 0) + + Отчеты.ДатыЗапретаЗагрузки.УстановитьВариант(ЭтотОбъект, Вариант); КонецПроцедуры diff --git a/SSL/src/Reports/ДатыЗапретаЗагрузки/ManagerModule.bsl b/SSL/src/Reports/ДатыЗапретаЗагрузки/ManagerModule.bsl index 5cd19c62b..cc5392498 100644 --- a/SSL/src/Reports/ДатыЗапретаЗагрузки/ManagerModule.bsl +++ b/SSL/src/Reports/ДатыЗапретаЗагрузки/ManagerModule.bsl @@ -1,6 +1,6 @@ #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда -#Область СлужебныйПрограммныйИнтерфейс +#Область ПрограммныйИнтерфейс // Настройки размещения в панели отчетов. // @@ -19,53 +19,124 @@ // поддерживает только этот режим. // Процедура НастроитьВариантыОтчета(Настройки, НастройкиОтчета) Экспорт + МодульВариантыОтчетов = ОбщегоНазначения.ОбщийМодуль("ВариантыОтчетов"); + + НастройкиОтчета.ОпределитьНастройкиФормы = Истина; НастройкиОтчета.Включен = Ложь; - Свойства = ДатыЗапретаИзмененияСлужебныйПовтИсп.СвойстваРазделов(); - Если Свойства.ПоказыватьРазделы И НЕ Свойства.ВсеРазделыБезОбъектов Тогда - ИмяВарианта = "ДатыЗапретаЗагрузкиПоРазделамОбъектамДляПользователей"; - ОписаниеВарианта = - НСтр("ru = 'Выводит даты запрета загрузки для пользователей, - |сгруппированные по разделам с объектами.'"); - - ИначеЕсли Свойства.ВсеРазделыБезОбъектов Тогда - ИмяВарианта = "ДатыЗапретаЗагрузкиПоРазделамДляПользователей"; - ОписаниеВарианта = - НСтр("ru = 'Выводит даты запрета загрузки для пользователей, - |сгруппированные по разделам.'"); - Иначе - ИмяВарианта = "ДатыЗапретаЗагрузкиПоОбъектамДляПользователей"; - ОписаниеВарианта = - НСтр("ru = 'Выводит даты запрета загрузки для пользователей, - |сгруппированные по объектам.'"); - КонецЕсли; - НастройкиВарианта = МодульВариантыОтчетов.ОписаниеВарианта(Настройки, НастройкиОтчета, ИмяВарианта); + ПервыйВариант = ПервыйВариант(); + НастройкиВарианта = МодульВариантыОтчетов.ОписаниеВарианта(Настройки, НастройкиОтчета, ПервыйВариант.Имя); НастройкиВарианта.Включен = Истина; - НастройкиВарианта.Описание = ОписаниеВарианта; + НастройкиВарианта.Описание = ПервыйВариант.Описание; - Если Свойства.ПоказыватьРазделы И НЕ Свойства.ВсеРазделыБезОбъектов Тогда - ИмяВарианта = "ДатыЗапретаЗагрузкиПоПользователям"; - ОписаниеВарианта = - НСтр("ru = 'Выводит даты запрета загрузки для разделов с объектами, - |сгруппированные по пользователям.'"); - - ИначеЕсли Свойства.ВсеРазделыБезОбъектов Тогда - ИмяВарианта = "ДатыЗапретаЗагрузкиПоПользователямБезОбъектов"; - ОписаниеВарианта = - НСтр("ru = 'Выводит даты запрета загрузки для разделов, - |сгруппированные по пользователям.'"); - Иначе - ИмяВарианта = "ДатыЗапретаЗагрузкиПоПользователямБезРазделов"; - ОписаниеВарианта = - НСтр("ru = 'Выводит даты запрета загрузки для объектов, - |сгруппированные по пользователям.'"); - КонецЕсли; - НастройкиВарианта = МодульВариантыОтчетов.ОписаниеВарианта(Настройки, НастройкиОтчета, ИмяВарианта); + ВторойВариант = ВторойВариант(); + НастройкиВарианта = МодульВариантыОтчетов.ОписаниеВарианта(Настройки, НастройкиОтчета, ВторойВариант.Имя); НастройкиВарианта.Включен = Истина; - НастройкиВарианта.Описание = ОписаниеВарианта; + НастройкиВарианта.Описание = ВторойВариант.Описание; + КонецПроцедуры #КонецОбласти #КонецЕсли + +#Область ОбработчикиСобытий + +Процедура ОбработкаПолученияФормы(ВидФормы, Параметры, ВыбраннаяФорма, ДополнительнаяИнформация, СтандартнаяОбработка) + + Если ВидФормы <> "Форма" Тогда + Возврат; + КонецЕсли; + +#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ВариантыОтчетов") Тогда + Возврат; + КонецЕсли; +#Иначе + Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.ВариантыОтчетов") Тогда + Возврат; + КонецЕсли; +#КонецЕсли + + СтандартнаяОбработка = Ложь; + ВыбраннаяФорма = "ФормаОтчета"; + +КонецПроцедуры + +#КонецОбласти + +#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда + +#Область СлужебныеПроцедурыИФункции + +// Вызывается из форма отчета. +Процедура УстановитьВариант(Форма, Вариант) Экспорт + + ПервыйВариант = ПервыйВариант(); + ВторойВариант = ВторойВариант(); + + Отчеты.ДатыЗапретаИзменения.НастроитьФорму(Форма, ПервыйВариант, ВторойВариант, Вариант); + +КонецПроцедуры + +Функция ПервыйВариант() + + Свойства = ДатыЗапретаИзмененияСлужебный.СвойстваРазделов(); + + Если Свойства.ПоказыватьРазделы И НЕ Свойства.ВсеРазделыБезОбъектов Тогда + ИмяВарианта = "ДатыЗапретаЗагрузкиПоПользователям"; + + ИначеЕсли Свойства.ВсеРазделыБезОбъектов Тогда + ИмяВарианта = "ДатыЗапретаЗагрузкиПоПользователямБезОбъектов"; + Иначе + ИмяВарианта = "ДатыЗапретаЗагрузкиПоПользователямБезРазделов"; + КонецЕсли; + + СвойстваВарианта = Новый Структура; + СвойстваВарианта.Вставить("Имя", ИмяВарианта); + + СвойстваВарианта.Вставить("Заголовок", + НСтр("ru = 'Даты запрета загрузки данных по информационным базам'")); + + СвойстваВарианта.Вставить("Описание", + НСтр("ru = 'Выводит даты запрета загрузки для объектов, сгруппированные по информационным базам.'")); + + Возврат СвойстваВарианта; + +КонецФункции + +Функция ВторойВариант() + + Свойства = ДатыЗапретаИзмененияСлужебный.СвойстваРазделов(); + + Если Свойства.ПоказыватьРазделы И НЕ Свойства.ВсеРазделыБезОбъектов Тогда + ИмяВарианта = "ДатыЗапретаЗагрузкиПоРазделамОбъектамДляПользователей"; + Заголовок = НСтр("ru = 'Даты запрета загрузки данных по разделам и объектам'"); + ОписаниеВарианта = + НСтр("ru = 'Выводит даты запрета загрузки, сгруппированные по разделам с объектами.'"); + + ИначеЕсли Свойства.ВсеРазделыБезОбъектов Тогда + ИмяВарианта = "ДатыЗапретаЗагрузкиПоРазделамДляПользователей"; + Заголовок = НСтр("ru = 'Даты запрета загрузки данных по разделам'"); + ОписаниеВарианта = + НСтр("ru = 'Выводит даты запрета загрузки, сгруппированные по разделам.'"); + Иначе + ИмяВарианта = "ДатыЗапретаЗагрузкиПоОбъектамДляПользователей"; + Заголовок = НСтр("ru = 'Даты запрета загрузки данных по объектам'"); + ОписаниеВарианта = + НСтр("ru = 'Выводит даты запрета загрузки, сгруппированные по объектам.'"); + КонецЕсли; + + СвойстваВарианта = Новый Структура; + СвойстваВарианта.Вставить("Имя", ИмяВарианта); + СвойстваВарианта.Вставить("Заголовок", Заголовок); + СвойстваВарианта.Вставить("Описание", ОписаниеВарианта); + + Возврат СвойстваВарианта; + +КонецФункции + +#КонецОбласти + +#КонецЕсли diff --git a/SSL/src/Reports/ДатыЗапретаЗагрузки/ObjectModule.bsl b/SSL/src/Reports/ДатыЗапретаЗагрузки/ObjectModule.bsl index e6bddcaa1..6b57a54ac 100644 --- a/SSL/src/Reports/ДатыЗапретаЗагрузки/ObjectModule.bsl +++ b/SSL/src/Reports/ДатыЗапретаЗагрузки/ObjectModule.bsl @@ -1,5 +1,30 @@ #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда +#Область ПрограммныйИнтерфейс + +// Настройки общей формы отчета подсистемы "Варианты отчетов". +// +// Параметры: +// Форма - УправляемаяФорма, Неопределено - Форма отчета или форма настроек отчета. +// Неопределено когда вызов без контекста. +// КлючВарианта - Строка, Неопределено - Имя предопределенного +// или уникальный идентификатор пользовательского варианта отчета. +// Неопределено когда вызов без контекста. +// Настройки - Структура - см. возвращаемое значение +// ОтчетыКлиентСервер.ПолучитьНастройкиОтчетаПоУмолчанию(). +// +Процедура ОпределитьНастройкиФормы(Форма, КлючВарианта, Настройки) Экспорт + + Настройки.ФормироватьСразу = Истина; + + Если Форма <> Неопределено Тогда + УстановитьПредопределенныйПоВариантуВнедрения(Форма, КлючВарианта); + КонецЕсли; + +КонецПроцедуры + +#КонецОбласти + #Область ОбработчикиСобытий Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка) @@ -50,6 +75,39 @@ КонецПроцедуры +Процедура УстановитьПредопределенныйПоВариантуВнедрения(Форма, КлючВарианта) + + Если Форма.Параметры.КлючВарианта <> Неопределено Тогда + Возврат; // Вариант отчета указан при открытии. + КонецЕсли; + + Свойства = ДатыЗапретаИзмененияСлужебный.СвойстваРазделов(); + + Если Свойства.ПоказыватьРазделы И НЕ Свойства.ВсеРазделыБезОбъектов Тогда + + Если КлючВарианта <> "ДатыЗапретаЗагрузкиПоПользователям" + И КлючВарианта <> "ДатыЗапретаЗагрузкиПоРазделамОбъектамДляПользователей" Тогда + + Форма.Параметры.КлючВарианта = "ДатыЗапретаЗагрузкиПоПользователям"; + КонецЕсли; + + ИначеЕсли Свойства.ВсеРазделыБезОбъектов Тогда + + Если КлючВарианта <> "ДатыЗапретаЗагрузкиПоПользователямБезОбъектов" + И КлючВарианта <> "ДатыЗапретаЗагрузкиПоРазделамДляПользователей" Тогда + + Форма.Параметры.КлючВарианта = "ДатыЗапретаЗагрузкиПоПользователямБезОбъектов"; + КонецЕсли; + Иначе + Если КлючВарианта <> "ДатыЗапретаЗагрузкиПоПользователямБезРазделов" + И КлючВарианта <> "ДатыЗапретаЗагрузкиПоОбъектамДляПользователей" Тогда + + Форма.Параметры.КлючВарианта = "ДатыЗапретаЗагрузкиПоПользователямБезРазделов"; + КонецЕсли; + КонецЕсли; + +КонецПроцедуры + #КонецОбласти #КонецЕсли \ No newline at end of file diff --git a/SSL/src/Reports/ДатыЗапретаЗагрузки/Templates/ОсновнаяСхемаКомпоновкиДанных/Template.dcs b/SSL/src/Reports/ДатыЗапретаЗагрузки/Templates/ОсновнаяСхемаКомпоновкиДанных/Template.dcs index 8b8604ca3..dc1c1e0c3 100644 --- a/SSL/src/Reports/ДатыЗапретаЗагрузки/Templates/ОсновнаяСхемаКомпоновкиДанных/Template.dcs +++ b/SSL/src/Reports/ДатыЗапретаЗагрузки/Templates/ОсновнаяСхемаКомпоновкиДанных/Template.dcs @@ -1198,7 +1198,7 @@ ru - Даты запрета загрузки данных по разделам и объектам для информационных баз + Даты запрета загрузки данных по разделам и объектам @@ -1435,7 +1435,7 @@ ru - Даты запрета загрузки данных по объектам для информационных баз + Даты запрета загрузки данных по объектам @@ -1672,7 +1672,7 @@ ru - Даты запрета загрузки данных по разделам для информационных баз + Даты запрета загрузки данных по разделам diff --git a/SSL/src/Reports/ДатыЗапретаЗагрузки/ДатыЗапретаЗагрузки.mdo b/SSL/src/Reports/ДатыЗапретаЗагрузки/ДатыЗапретаЗагрузки.mdo index 1a5fc9797..49f30d608 100644 --- a/SSL/src/Reports/ДатыЗапретаЗагрузки/ДатыЗапретаЗагрузки.mdo +++ b/SSL/src/Reports/ДатыЗапретаЗагрузки/ДатыЗапретаЗагрузки.mdo @@ -9,10 +9,12 @@ ru Даты запрета загрузки - Report.ДатыЗапретаЗагрузки.Form.ФормаОтчета + CommonForm.ФормаОтчета Report.ДатыЗапретаЗагрузки.Template.ОсновнаяСхемаКомпоновкиДанных + CommonForm.ФормаНастроекОтчета + CommonForm.ФормаВариантаОтчета SettingsStorage.ХранилищеВариантовОтчетов - + ФормаОтчета ru diff --git a/SSL/src/Reports/ДатыЗапретаИзменения/Forms/ФормаОтчета/Form.form b/SSL/src/Reports/ДатыЗапретаИзменения/Forms/ФормаОтчета/Form.form index 1028ba923..c6ec17774 100644 --- a/SSL/src/Reports/ДатыЗапретаИзменения/Forms/ФормаОтчета/Form.form +++ b/SSL/src/Reports/ДатыЗапретаИзменения/Forms/ФормаОтчета/Form.form @@ -1,100 +1,22 @@ - - <key>ru</key> - <value>Даты запрета изменения данных</value> - - - ГруппаВарианта - 1 - - НаименованиеТекущегоВарианта - 2 - true - true - - true - - - НаименованиеТекущегоВарианта - - Left - - НаименованиеТекущегоВариантаExtendedTooltip - 20 - Label - true - true - - Left - - - - НаименованиеТекущегоВариантаКонтекстноеМеню - 3 - true - - InputField - true - Enter - true - Left - true - - true - true - true - true - true - true - Normal - - - true - true - - true - - - <key>ru</key> - <value>Группа варианта</value> - - - ГруппаВариантаExtendedTooltip - 19 - Label - true - true - - Left - - - UsualGroup - - Auto - true - true - Auto - Auto - - ОсновнаяКоманднаяПанель - 5 + 1 - КомандыФормы - 12 + ВариантыОтчета + 8 - ФормаСформировать - 18 + ФормаПервыйВариант + 10 true true true - ФормаСформироватьExtendedTooltip - 23 + ФормаПервыйВариантРасширеннаяПодсказка + 11 Label true true @@ -102,33 +24,7 @@ Left - Form.StandardCommand.Generate - Auto - true - true - true - UserCmds - Auto - - - ФормаНастройкиОтчета - 17 - true - true - - true - - - ФормаНастройкиОтчетаExtendedTooltip - 24 - Label - true - true - - Left - - - Form.StandardCommand.ReportSettings + Form.Command.ПервыйВариант Normal Auto true @@ -137,16 +33,16 @@ Auto - ФормаЗагрузитьНастройкиОтчета - 16 + ФормаВторойВариант + 12 true true true - ФормаЗагрузитьНастройкиОтчетаExtendedTooltip - 25 + ФормаВторойВариантРасширеннаяПодсказка + 13 Label true true @@ -154,33 +50,7 @@ Left - Form.StandardCommand.LoadReportSettings - Normal - Auto - true - true - UserCmds - Auto - - - ФормаСохранитьНастройкиОтчета - 15 - true - true - - true - - - ФормаСохранитьНастройкиОтчетаExtendedTooltip - 26 - Label - true - true - - Left - - - Form.StandardCommand.SaveReportSettings + Form.Command.ВторойВариант Normal Auto true @@ -195,15 +65,11 @@ <key>ru</key> - <value>Команды формы</value> + <value>Варианты отчета</value> - - ru - Команды формы - - КомандыФормыExtendedTooltip - 22 + ВариантыОтчетаРасширеннаяПодсказка + 9 Label true true @@ -211,36 +77,12 @@ Left - - Form + Popup + + Auto + Normal - - Справка - 13 - true - true - - true - - - СправкаExtendedTooltip - 27 - Label - true - true - - Left - - - Form.StandardCommand.Help - Normal - Auto - true - true - UserCmds - Auto - true true @@ -251,8 +93,8 @@ Основная командная панель - ОсновнаяКоманднаяПанельExtendedTooltip - 21 + ОсновнаяКоманднаяПанельРасширеннаяПодсказка + 2 Label true true @@ -263,108 +105,25 @@ CommandBar Left + Form - - КомпоновщикНастроекПользовательскиеНастройки - 6 - - <key>ru</key> - <value>Таблица пользовательских настроек</value> - + + ГруппаПользовательскихНастроек + 3 true true true - - Отчет.SettingsComposer.UserSettings - - None - HierarchicalList - List - Tree - None - - КомпоновщикНастроекПользовательскиеНастройкиКоманднаяПанель - 8 - Left - true - - - КомпоновщикНастроекПользовательскиеНастройкиSearchString - 30 - - КомпоновщикНастроекПользовательскиеНастройкиSearchStringExtendedTooltip - 32 - Label - true - true - - Left - - - - КомпоновщикНастроекПользовательскиеНастройкиSearchStringContextMenu - 31 - true - - КомпоновщикНастроекПользовательскиеНастройки - - true - - - - КомпоновщикНастроекПользовательскиеНастройкиViewStatus - 33 - - КомпоновщикНастроекПользовательскиеНастройкиViewStatusExtendedTooltip - 35 - Label - true - true - - Left - - - - КомпоновщикНастроекПользовательскиеНастройкиViewStatusContextMenu - 34 - true - - ViewStatusAddition - КомпоновщикНастроекПользовательскиеНастройки - - true - - - - КомпоновщикНастроекПользовательскиеНастройкиSearchControl - 36 - - КомпоновщикНастроекПользовательскиеНастройкиSearchControlExtendedTooltip - 38 - Label - true - true - - Left - - - - КомпоновщикНастроекПользовательскиеНастройкиSearchControlContextMenu - 37 - true - - SearchControlAddition - КомпоновщикНастроекПользовательскиеНастройки - - true - - + + <key>ru</key> + <value>Группа пользовательских настроек</value> + + false - КомпоновщикНастроекПользовательскиеНастройкиExtendedTooltip - 28 + ГруппаПользовательскихНастроекРасширеннаяПодсказка + 4 Label true true @@ -372,39 +131,20 @@ Left - - КомпоновщикНастроекПользовательскиеНастройкиКонтекстноеМеню - 7 - true - - HierarchicalList - true - true - true - true - true - true - MultiRow - 1 - 1 - AutoUse - AutoUse - true - true - false - Auto - Auto - true - None - None - None - true - QuickAccess - Show + UsualGroup + + Vertical + Auto + WeakSeparation + true + true + Auto + Auto + Результат - 9 + 5 true true @@ -413,10 +153,11 @@ Результат + true None - РезультатExtendedTooltip - 29 + РезультатРасширеннаяПодсказка + 7 Label true true @@ -426,7 +167,7 @@ РезультатКонтекстноеМеню - 10 + 6 true SpreadsheetDocumentField @@ -464,7 +205,6 @@ ChangeVariant LoadVariant - NewWindow SaveVariant DontBlock true @@ -473,7 +213,6 @@ true true true - UseIfNecessary auto true @@ -490,31 +229,13 @@
      true
      - - НаименованиеТекущегоВарианта - - <key>ru</key> - <value>Вариант отчета</value> - - 2 - - String - - - - true - - - true - - Результат <key>ru</key> <value>Результат</value> - 3 + 2 SpreadsheetDocument @@ -528,7 +249,7 @@ ДанныеРасшифровки - 4 + 3 String @@ -540,21 +261,49 @@ true - - ПоРазделамОбъектам - - Boolean - - true - + + ПервыйВариант + + <key>ru</key> + <value>Первый вариант</value> + + 1 + + true + + + + ПервыйВариант + + + DontUse + Auto + + + ВторойВариант + + <key>ru</key> + <value>Второй вариант</value> + + 2 + + true + + + + ВторойВариант + + + DontUse + Auto + - Show Результат ДанныеРасшифровки - НаименованиеТекущегоВарианта + ГруппаПользовательскихНастроек
      diff --git a/SSL/src/Reports/ДатыЗапретаИзменения/Forms/ФормаОтчета/Module.bsl b/SSL/src/Reports/ДатыЗапретаИзменения/Forms/ФормаОтчета/Module.bsl index 0ad62b395..9a7c3bdd2 100644 --- a/SSL/src/Reports/ДатыЗапретаИзменения/Forms/ФормаОтчета/Module.bsl +++ b/SSL/src/Reports/ДатыЗапретаИзменения/Forms/ФормаОтчета/Module.bsl @@ -8,29 +8,36 @@ Возврат; КонецЕсли; - Свойства = ДатыЗапретаИзмененияСлужебныйПовтИсп.СвойстваРазделов(); + УстановитьВариантНаСервере(); - // Установка варианта отчета. - Если Параметры.ПоРазделамОбъектам = Истина Тогда - - Если Свойства.ПоказыватьРазделы И НЕ Свойства.ВсеРазделыБезОбъектов Тогда - УстановитьТекущийВариант("ДатыЗапретаИзмененияПоРазделамОбъектамДляПользователей"); - - ИначеЕсли Свойства.ВсеРазделыБезОбъектов Тогда - УстановитьТекущийВариант("ДатыЗапретаИзмененияПоРазделамДляПользователей"); - Иначе - УстановитьТекущийВариант("ДатыЗапретаИзмененияПоОбъектамДляПользователей"); - КонецЕсли; - Иначе - Если Свойства.ПоказыватьРазделы И НЕ Свойства.ВсеРазделыБезОбъектов Тогда - УстановитьТекущийВариант("ДатыЗапретаИзмененияПоПользователям"); - - ИначеЕсли Свойства.ВсеРазделыБезОбъектов Тогда - УстановитьТекущийВариант("ДатыЗапретаИзмененияПоПользователямБезОбъектов"); - Иначе - УстановитьТекущийВариант("ДатыЗапретаИзмененияПоПользователямБезРазделов"); - КонецЕсли; - КонецЕсли; +КонецПроцедуры + +#КонецОбласти + +#Область ОбработчикиКомандФормы + +&НаКлиенте +Процедура ПервыйВариант(Команда) + + УстановитьВариантНаСервере(1); + +КонецПроцедуры + +&НаКлиенте +Процедура ВторойВариант(Команда) + + УстановитьВариантНаСервере(2); + +КонецПроцедуры + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +&НаСервере +Процедура УстановитьВариантНаСервере(Вариант = 0) + + Отчеты.ДатыЗапретаИзменения.УстановитьВариант(ЭтотОбъект, Вариант); КонецПроцедуры diff --git a/SSL/src/Reports/ДатыЗапретаИзменения/ManagerModule.bsl b/SSL/src/Reports/ДатыЗапретаИзменения/ManagerModule.bsl index f6fae43c7..bbb7c7471 100644 --- a/SSL/src/Reports/ДатыЗапретаИзменения/ManagerModule.bsl +++ b/SSL/src/Reports/ДатыЗапретаИзменения/ManagerModule.bsl @@ -1,6 +1,6 @@ #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда -#Область СлужебныйПрограммныйИнтерфейс +#Область ПрограммныйИнтерфейс // Настройки размещения в панели отчетов. // @@ -19,53 +19,175 @@ // поддерживает только этот режим. // Процедура НастроитьВариантыОтчета(Настройки, НастройкиОтчета) Экспорт + МодульВариантыОтчетов = ОбщегоНазначения.ОбщийМодуль("ВариантыОтчетов"); + + НастройкиОтчета.ОпределитьНастройкиФормы = Истина; НастройкиОтчета.Включен = Ложь; - Свойства = ДатыЗапретаИзмененияСлужебныйПовтИсп.СвойстваРазделов(); - Если Свойства.ПоказыватьРазделы И НЕ Свойства.ВсеРазделыБезОбъектов Тогда - ИмяВарианта = "ДатыЗапретаИзмененияПоРазделамОбъектамДляПользователей"; - ОписаниеВарианта = - НСтр("ru = 'Выводит даты запрета изменения для пользователей, - |сгруппированные по разделам с объектами.'"); - - ИначеЕсли Свойства.ВсеРазделыБезОбъектов Тогда - ИмяВарианта = "ДатыЗапретаИзмененияПоРазделамДляПользователей"; - ОписаниеВарианта = - НСтр("ru = 'Выводит даты запрета изменения для пользователей, - |сгруппированные по разделам.'"); - Иначе - ИмяВарианта = "ДатыЗапретаИзмененияПоОбъектамДляПользователей"; - ОписаниеВарианта = - НСтр("ru = 'Выводит даты запрета изменения для пользователей, - |сгруппированные по объектам.'"); - КонецЕсли; - НастройкиВарианта = МодульВариантыОтчетов.ОписаниеВарианта(Настройки, НастройкиОтчета, ИмяВарианта); + ПервыйВариант = ПервыйВариант(); + НастройкиВарианта = МодульВариантыОтчетов.ОписаниеВарианта(Настройки, НастройкиОтчета, ПервыйВариант.Имя); НастройкиВарианта.Включен = Истина; - НастройкиВарианта.Описание = ОписаниеВарианта; + НастройкиВарианта.Описание = ПервыйВариант.Описание; - Если Свойства.ПоказыватьРазделы И НЕ Свойства.ВсеРазделыБезОбъектов Тогда - ИмяВарианта = "ДатыЗапретаИзмененияПоПользователям"; - ОписаниеВарианта = - НСтр("ru = 'Выводит даты запрета изменения для разделов с объектами, - |сгруппированные по пользователям.'"); - - ИначеЕсли Свойства.ВсеРазделыБезОбъектов Тогда - ИмяВарианта = "ДатыЗапретаИзмененияПоПользователямБезОбъектов"; - ОписаниеВарианта = - НСтр("ru = 'Выводит даты запрета изменения для разделов, - |сгруппированные по пользователям.'"); - Иначе - ИмяВарианта = "ДатыЗапретаИзмененияПоПользователямБезРазделов"; - ОписаниеВарианта = - НСтр("ru = 'Выводит даты запрета изменения для объектов, - |сгруппированные по пользователям.'"); - КонецЕсли; - НастройкиВарианта = МодульВариантыОтчетов.ОписаниеВарианта(Настройки, НастройкиОтчета, ИмяВарианта); + ВторойВариант = ВторойВариант(); + НастройкиВарианта = МодульВариантыОтчетов.ОписаниеВарианта(Настройки, НастройкиОтчета, ВторойВариант.Имя); НастройкиВарианта.Включен = Истина; - НастройкиВарианта.Описание = ОписаниеВарианта; + НастройкиВарианта.Описание = ВторойВариант.Описание; + КонецПроцедуры #КонецОбласти #КонецЕсли + +#Область ОбработчикиСобытий + +Процедура ОбработкаПолученияФормы(ВидФормы, Параметры, ВыбраннаяФорма, ДополнительнаяИнформация, СтандартнаяОбработка) + + Если ВидФормы <> "Форма" Тогда + Возврат; + КонецЕсли; + +#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ВариантыОтчетов") Тогда + Возврат; + КонецЕсли; +#Иначе + Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.ВариантыОтчетов") Тогда + Возврат; + КонецЕсли; +#КонецЕсли + + СтандартнаяОбработка = Ложь; + ВыбраннаяФорма = "ФормаОтчета"; + +КонецПроцедуры + +#КонецОбласти + +#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда + +#Область СлужебныеПроцедурыИФункции + +// Вызывается из форма отчета. +Процедура УстановитьВариант(Форма, Вариант) Экспорт + + ПервыйВариант = ПервыйВариант(); + ВторойВариант = ВторойВариант(); + + НастроитьФорму(Форма, ПервыйВариант, ВторойВариант, Вариант); + +КонецПроцедуры + +// Вызывается процедур УстановитьВариант. +Процедура НастроитьФорму(Форма, ПервыйВариант, ВторойВариант, Вариант) Экспорт + + Элементы = Форма.Элементы; + + Если Вариант = 0 Тогда + Форма.Параметры.СформироватьПриОткрытии = Истина; + Элементы.ФормаПервыйВариант.Заголовок = ПервыйВариант.Заголовок; + Элементы.ФормаВторойВариант.Заголовок = ВторойВариант.Заголовок; + Иначе + ПолноеИмяОтчета = "Отчет." + СтрРазделить(Форма.ИмяФормы, ".", Ложь)[1]; + + // Сохранение текущих пользовательских настроек. + ОбщегоНазначения.ХранилищеСистемныхНастроекСохранить( + ПолноеИмяОтчета + "/" + Форма.КлючТекущегоВарианта + "/ТекущиеПользовательскиеНастройки", + "", + Форма.Отчет.КомпоновщикНастроек.ПользовательскиеНастройки); + КонецЕсли; + + Если Вариант = 0 Тогда + Если Форма.КлючТекущегоВарианта = ПервыйВариант.Имя Тогда + Вариант = 1; + ИначеЕсли Форма.КлючТекущегоВарианта = ВторойВариант.Имя Тогда + Вариант = 2; + КонецЕсли; + КонецЕсли; + + Если Вариант = 0 Тогда + Вариант = 1; + КонецЕсли; + + Если Вариант = 1 Тогда + Элементы.ФормаПервыйВариант.Пометка = Истина; + Элементы.ФормаВторойВариант.Пометка = Ложь; + Форма.Заголовок = ПервыйВариант.Заголовок; + КлючТекущегоВарианта = ПервыйВариант.Имя; + Иначе + Элементы.ФормаПервыйВариант.Пометка = Ложь; + Элементы.ФормаВторойВариант.Пометка = Истина; + Форма.Заголовок = ВторойВариант.Заголовок; + КлючТекущегоВарианта = ВторойВариант.Имя; + КонецЕсли; + + // Загрузка нового варианта. + Форма.УстановитьТекущийВариант(КлючТекущегоВарианта); + + // Переформирование отчета. + Форма.СкомпоноватьРезультат(РежимКомпоновкиРезультата.Авто); + +КонецПроцедуры + +Функция ПервыйВариант() + + Свойства = ДатыЗапретаИзмененияСлужебный.СвойстваРазделов(); + + Если Свойства.ПоказыватьРазделы И НЕ Свойства.ВсеРазделыБезОбъектов Тогда + ИмяВарианта = "ДатыЗапретаИзмененияПоПользователям"; + + ИначеЕсли Свойства.ВсеРазделыБезОбъектов Тогда + ИмяВарианта = "ДатыЗапретаИзмененияПоПользователямБезОбъектов"; + Иначе + ИмяВарианта = "ДатыЗапретаИзмененияПоПользователямБезРазделов"; + КонецЕсли; + + СвойстваВарианта = Новый Структура; + СвойстваВарианта.Вставить("Имя", ИмяВарианта); + + СвойстваВарианта.Вставить("Заголовок", + НСтр("ru = 'Даты запрета изменения данных по пользователям'")); + + СвойстваВарианта.Вставить("Описание", + НСтр("ru = 'Выводит даты запрета изменения, сгруппированные по пользователям.'")); + + Возврат СвойстваВарианта; + +КонецФункции + +Функция ВторойВариант() + + Свойства = ДатыЗапретаИзмененияСлужебный.СвойстваРазделов(); + + Если Свойства.ПоказыватьРазделы И НЕ Свойства.ВсеРазделыБезОбъектов Тогда + ИмяВарианта = "ДатыЗапретаИзмененияПоРазделамОбъектамДляПользователей"; + Заголовок = НСтр("ru = 'Даты запрета изменения данных по разделам и объектам'"); + ОписаниеВарианта = + НСтр("ru = 'Выводит даты запрета изменения, сгруппированные по разделам с объектами.'"); + + ИначеЕсли Свойства.ВсеРазделыБезОбъектов Тогда + ИмяВарианта = "ДатыЗапретаИзмененияПоРазделамДляПользователей"; + Заголовок = НСтр("ru = 'Даты запрета изменения данных по разделам'"); + ОписаниеВарианта = + НСтр("ru = 'Выводит даты запрета изменения, сгруппированные по разделам.'"); + Иначе + ИмяВарианта = "ДатыЗапретаИзмененияПоОбъектамДляПользователей"; + Заголовок = НСтр("ru = 'Даты запрета изменения данных по объектам'"); + ОписаниеВарианта = + НСтр("ru = 'Выводит даты запрета изменения, сгруппированные по объектам.'"); + КонецЕсли; + + СвойстваВарианта = Новый Структура; + СвойстваВарианта.Вставить("Имя", ИмяВарианта); + СвойстваВарианта.Вставить("Заголовок", Заголовок); + СвойстваВарианта.Вставить("Описание", ОписаниеВарианта); + + Возврат СвойстваВарианта; + +КонецФункции + +#КонецОбласти + +#КонецЕсли diff --git a/SSL/src/Reports/ДатыЗапретаИзменения/ObjectModule.bsl b/SSL/src/Reports/ДатыЗапретаИзменения/ObjectModule.bsl index e6bddcaa1..f9b214e0e 100644 --- a/SSL/src/Reports/ДатыЗапретаИзменения/ObjectModule.bsl +++ b/SSL/src/Reports/ДатыЗапретаИзменения/ObjectModule.bsl @@ -1,5 +1,30 @@ #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда +#Область ПрограммныйИнтерфейс + +// Настройки общей формы отчета подсистемы "Варианты отчетов". +// +// Параметры: +// Форма - УправляемаяФорма, Неопределено - Форма отчета или форма настроек отчета. +// Неопределено когда вызов без контекста. +// КлючВарианта - Строка, Неопределено - Имя предопределенного +// или уникальный идентификатор пользовательского варианта отчета. +// Неопределено когда вызов без контекста. +// Настройки - Структура - см. возвращаемое значение +// ОтчетыКлиентСервер.ПолучитьНастройкиОтчетаПоУмолчанию(). +// +Процедура ОпределитьНастройкиФормы(Форма, КлючВарианта, Настройки) Экспорт + + Настройки.ФормироватьСразу = Истина; + + Если Форма <> Неопределено Тогда + УстановитьПредопределенныйПоВариантуВнедрения(Форма, КлючВарианта); + КонецЕсли; + +КонецПроцедуры + +#КонецОбласти + #Область ОбработчикиСобытий Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка) @@ -50,6 +75,39 @@ КонецПроцедуры +Процедура УстановитьПредопределенныйПоВариантуВнедрения(Форма, КлючВарианта) + + Если Форма.Параметры.КлючВарианта <> Неопределено Тогда + Возврат; // Вариант отчета указан при открытии. + КонецЕсли; + + Свойства = ДатыЗапретаИзмененияСлужебный.СвойстваРазделов(); + + Если Свойства.ПоказыватьРазделы И НЕ Свойства.ВсеРазделыБезОбъектов Тогда + + Если КлючВарианта <> "ДатыЗапретаИзмененияПоПользователям" + И КлючВарианта <> "ДатыЗапретаИзмененияПоРазделамОбъектамДляПользователей" Тогда + + Форма.Параметры.КлючВарианта = "ДатыЗапретаИзмененияПоПользователям"; + КонецЕсли; + + ИначеЕсли Свойства.ВсеРазделыБезОбъектов Тогда + + Если КлючВарианта <> "ДатыЗапретаИзмененияПоПользователямБезОбъектов" + И КлючВарианта <> "ДатыЗапретаИзмененияПоРазделамДляПользователей" Тогда + + Форма.Параметры.КлючВарианта = "ДатыЗапретаИзмененияПоПользователямБезОбъектов"; + КонецЕсли; + Иначе + Если КлючВарианта <> "ДатыЗапретаИзмененияПоПользователямБезРазделов" + И КлючВарианта <> "ДатыЗапретаИзмененияПоОбъектамДляПользователей" Тогда + + Форма.Параметры.КлючВарианта = "ДатыЗапретаИзмененияПоПользователямБезРазделов"; + КонецЕсли; + КонецЕсли; + +КонецПроцедуры + #КонецОбласти #КонецЕсли \ No newline at end of file diff --git a/SSL/src/Reports/ДатыЗапретаИзменения/Templates/ОсновнаяСхемаКомпоновкиДанных/Template.dcs b/SSL/src/Reports/ДатыЗапретаИзменения/Templates/ОсновнаяСхемаКомпоновкиДанных/Template.dcs index 9e837c946..5660dd8f1 100644 --- a/SSL/src/Reports/ДатыЗапретаИзменения/Templates/ОсновнаяСхемаКомпоновкиДанных/Template.dcs +++ b/SSL/src/Reports/ДатыЗапретаИзменения/Templates/ОсновнаяСхемаКомпоновкиДанных/Template.dcs @@ -1094,7 +1094,7 @@ ru - Даты запрета изменения данных по разделам и объектам для пользователей + Даты запрета изменения данных по разделам и объектам @@ -1331,7 +1331,7 @@ ru - Даты запрета изменения данных по объектам для пользователей + Даты запрета изменения данных по объектам @@ -1568,7 +1568,7 @@ ru - Даты запрета изменения данных по разделам для пользователей + Даты запрета изменения данных по разделам diff --git a/SSL/src/Reports/ДатыЗапретаИзменения/ДатыЗапретаИзменения.mdo b/SSL/src/Reports/ДатыЗапретаИзменения/ДатыЗапретаИзменения.mdo index ad8f997a2..3a928f289 100644 --- a/SSL/src/Reports/ДатыЗапретаИзменения/ДатыЗапретаИзменения.mdo +++ b/SSL/src/Reports/ДатыЗапретаИзменения/ДатыЗапретаИзменения.mdo @@ -9,10 +9,12 @@ ru Даты запрета изменения
      - Report.ДатыЗапретаИзменения.Form.ФормаОтчета + CommonForm.ФормаОтчета Report.ДатыЗапретаИзменения.Template.ОсновнаяСхемаКомпоновкиДанных + CommonForm.ФормаНастроекОтчета + CommonForm.ФормаВариантаОтчета SettingsStorage.ХранилищеВариантовОтчетов - + ФормаОтчета ru diff --git a/SSL/src/Reports/ДействующиеСогласияНаОбработкуПерсональныхДанных/Help/ru.html b/SSL/src/Reports/ДействующиеСогласияНаОбработкуПерсональныхДанных/Help/ru.html new file mode 100644 index 000000000..3be9b58d4 --- /dev/null +++ b/SSL/src/Reports/ДействующиеСогласияНаОбработкуПерсональныхДанных/Help/ru.html @@ -0,0 +1,8 @@ + +

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

      +

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

      +

      Отражаются Субъект, Дата получения, Срок действия.

      +

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

      +

      См. также:

      + \ No newline at end of file diff --git a/SSL/src/Reports/ДействующиеСогласияНаОбработкуПерсональныхДанных/ManagerModule.bsl b/SSL/src/Reports/ДействующиеСогласияНаОбработкуПерсональныхДанных/ManagerModule.bsl new file mode 100644 index 000000000..c09f98d27 --- /dev/null +++ b/SSL/src/Reports/ДействующиеСогласияНаОбработкуПерсональныхДанных/ManagerModule.bsl @@ -0,0 +1,31 @@ +#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда + +#Область ПрограммныйИнтерфейс + +// Настройки размещения в панели отчетов. +// +// Параметры: +// Настройки - Коллекция - Используется для описания настроек отчетов и вариантов +// см. описание к ВариантыОтчетов.ДеревоНастроекВариантовОтчетовКонфигурации(). +// НастройкиОтчета - СтрокаДереваЗначений - Настройки размещения всех вариантов отчета. +// См. "Реквизиты для изменения" функции ВариантыОтчетов.ДеревоНастроекВариантовОтчетовКонфигурации(). +// +// Описание: +// См. ВариантыОтчетовПереопределяемый.НастроитьВариантыОтчетов(). +// +// Вспомогательные методы: +// НастройкиВарианта = ВариантыОтчетов.ОписаниеВарианта(Настройки, НастройкиОтчета, "<ИмяВарианта>"); +// ВариантыОтчетов.УстановитьРежимВыводаВПанеляхОтчетов(Настройки, НастройкиОтчета, Истина/Ложь); // Отчет +// поддерживает только этот режим. +// +Процедура НастроитьВариантыОтчета(Настройки, НастройкиОтчета) Экспорт + МодульВариантыОтчетов = ОбщегоНазначения.ОбщийМодуль("ВариантыОтчетов"); + НастройкиОтчета.Описание = НСтр("ru = 'Действующие согласия на обработку персональных данных.'"); + + НастройкиВарианта = МодульВариантыОтчетов.ОписаниеВарианта(Настройки, НастройкиОтчета, "ДействующиеСогласия"); + НастройкиВарианта.Описание = НСтр("ru = 'Действующие на выбранную дату согласия на обработку персональных данных.'"); +КонецПроцедуры + +#КонецОбласти + +#КонецЕсли \ No newline at end of file diff --git a/SSL/src/Reports/ДействующиеСогласияНаОбработкуПерсональныхДанных/ObjectModule.bsl b/SSL/src/Reports/ДействующиеСогласияНаОбработкуПерсональныхДанных/ObjectModule.bsl new file mode 100644 index 000000000..e69de29bb diff --git a/SSL/src/Reports/ДействующиеСогласияНаОбработкуПерсональныхДанных/Templates/ОсновнаяСхемаКомпоновкиДанных/Template.dcs b/SSL/src/Reports/ДействующиеСогласияНаОбработкуПерсональныхДанных/Templates/ОсновнаяСхемаКомпоновкиДанных/Template.dcs new file mode 100644 index 000000000..746238f53 --- /dev/null +++ b/SSL/src/Reports/ДействующиеСогласияНаОбработкуПерсональныхДанных/Templates/ОсновнаяСхемаКомпоновкиДанных/Template.dcs @@ -0,0 +1,167 @@ + + + + ИсточникДанных1 + Local + + + Согласия + + Субъект + Субъект + + + Организация + Организация + + + ДатаПолучения + ДатаПолучения + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Дата получения</v8:content> + </v8:item> + + + + СрокДействия + СрокДействия + + + ДокументОснование + ДокументОснование + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Документ основание</v8:content> + </v8:item> + + + ИсточникДанных1 + ВЫБРАТЬ РАЗРЕШЕННЫЕ + Согласия.Период КАК ДатаПолучения, + Согласия.Регистратор КАК ДокументОснование, + Согласия.Организация, + Согласия.Субъект, + Согласия.СрокДействия +ИЗ + РегистрСведений.СогласияНаОбработкуПерсональныхДанных.СрезПоследних({(&ДатаДействия)}, ) КАК Согласия +ГДЕ + Согласия.Действует = ИСТИНА +{ГДЕ + (Согласия.СрокДействия = ДАТАВРЕМЯ(1, 1, 1) + ИЛИ Согласия.СрокДействия >= &ДатаДействия)} + + + ДатаДействия + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Дата действия</v8:content> + </v8:item> + + + xs:dateTime + + DateTime + + + 0001-01-01T00:00:00 + false + + + ДействующиеСогласия + + + ru + Действующие согласия на обработку персональных данных + + + + + + Организация + + + Субъект + + + ДатаПолучения + + + ДокументОснование + + + СрокДействия + + + + + false + Организация + Equal + eb843101-b718-4914-bbf7-1362ac63bd75 + + + + + false + ДатаДействия + + BeginningOfNextDay + + b22bffdd-d74e-49ef-9fa9-f7a3389e83b6 + + + + + ВыводитьЗаголовок + DontOutput + + + Заголовок + + + ru + Действующие согласия на обработку персональных данных + + + + + ВыводитьПараметрыДанных + DontOutput + + + ВыводитьОтбор + DontOutput + + + + + + Организация + Items + None + 0001-01-01T00:00:00 + 0001-01-01T00:00:00 + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/SSL/src/Reports/ДействующиеСогласияНаОбработкуПерсональныхДанных/ДействующиеСогласияНаОбработкуПерсональныхДанных.mdo b/SSL/src/Reports/ДействующиеСогласияНаОбработкуПерсональныхДанных/ДействующиеСогласияНаОбработкуПерсональныхДанных.mdo new file mode 100644 index 000000000..9f6cd0d3d --- /dev/null +++ b/SSL/src/Reports/ДействующиеСогласияНаОбработкуПерсональныхДанных/ДействующиеСогласияНаОбработкуПерсональныхДанных.mdo @@ -0,0 +1,33 @@ + + + + + + + ДействующиеСогласияНаОбработкуПерсональныхДанных + + ru + Действующие согласия на обработку персональных данных + + true + Report.ДействующиеСогласияНаОбработкуПерсональныхДанных.Template.ОсновнаяСхемаКомпоновкиДанных + SettingsStorage.ХранилищеВариантовОтчетов + true + + + ru + + + + ru + Действующие на выбранную дату согласия на обработку персональных данных + + + ОсновнаяСхемаКомпоновкиДанных + + ru + Основная схема компоновки данных + + DataCompositionSchema + + diff --git a/SSL/src/Reports/ДосьеКонтрагента/Forms/Форма/Form.form b/SSL/src/Reports/ДосьеКонтрагента/Forms/Форма/Form.form new file mode 100644 index 000000000..5e5f745a8 --- /dev/null +++ b/SSL/src/Reports/ДосьеКонтрагента/Forms/Форма/Form.form @@ -0,0 +1,737 @@ + + + + <key>ru</key> + <value>Досье контрагента</value> + + + ГруппаСтрокаКоманднойПанели + 4 + + СтрокаПоиска + 6 + true + true + + true + + + СтрокаПоиска + + true + None + + ru + ИНН или наименование контрагента, +по которому нужно сформировать досье + + + OnChange + СтрокаПоискаПриИзменении + + + СтрокаПоискаРасширеннаяПодсказка + 8 + Label + true + true + + Left + + + + СтрокаПоискаКонтекстноеМеню + 7 + true + + InputField + Enter + true + Left + true + + 30 + true + true + false + true + true + true + true + Normal + + ru + ИНН или наименование контрагента + + + + + ГруппаКнопкиКоманднойПанели + 15 + + КнопкаСформироватьОтчет + 9 + true + true + + true + + + КнопкаСформироватьОтчетРасширеннаяПодсказка + 10 + Label + true + true + + Left + + + Form.Command.СформироватьОтчет + true + true + true + UserCmds + + StdPicture.GenerateReport + + Auto + + + КнопкаПечать + 11 + + <key>ru</key> + <value>Печать</value> + + true + true + + true + + + КнопкаПечатьРасширеннаяПодсказка + 12 + Label + true + true + + Left + + + Form.Item.ТабличныйДокумент.StandardCommand.PrintImmediately + Normal + Auto + true + true + UserCmds + Auto + InCommandBarAndInAdditionalSubmenu + + + КнопкаСохранить + 24 + + <key>ru</key> + <value>Сохранить</value> + + true + true + + true + + + КнопкаСохранитьРасширеннаяПодсказка + 25 + Label + true + true + + Left + + + Form.Item.ТабличныйДокумент.StandardCommand.SaveAs + Normal + true + true + UserCmds + + StdPicture.SaveFile + + Auto + + + КнопкаДобавитьВСправочник + 13 + true + true + + true + + + КнопкаДобавитьВСправочникРасширеннаяПодсказка + 14 + Label + true + true + + Left + + + Form.Command.ДобавитьВСправочник + Normal + true + true + UserCmds + Auto + + + ГруппаКнопкиФормы + 22 + true + true + + true + + + <key>ru</key> + <value>Кнопки формы</value> + + + ru + Кнопки формы + + + ГруппаКнопкиФормыРасширеннаяПодсказка + 23 + Label + true + true + + Left + + + + Form + + + true + true + + true + + + <key>ru</key> + <value>Кнопки командной панели</value> + + + ru + Кнопки командной панели + + + ГруппаКнопкиКоманднойПанелиРасширеннаяПодсказка + 16 + Label + true + true + + Left + + + CommandBar + + Left + + + true + true + + true + + + <key>ru</key> + <value>Строка командной панели</value> + + + ru + Строка командной панели + + + ГруппаСтрокаКоманднойПанелиРасширеннаяПодсказка + 5 + Label + true + true + + Left + + + UsualGroup + + Auto + true + true + Auto + Auto + + + + ГруппаУсловияПолученияСервиса + 17 + + ТекстУсловияПолученияСервиса + 19 + + <key>ru</key> + <value><fontstyle -31>После 3</><fontstyle -31>1.05</><fontstyle -31>.2015 условия получения сервиса будут изменены. Подробнее:</><fontstyle -31> </><fontstyle -31><link https://portal.1c.ru/applications/3#conditions>https://portal.1c.ru/applications/3#conditions</></></value> + + true + true + + true + + None + + ТекстУсловияПолученияСервисаРасширеннаяПодсказка + 21 + + <key>ru</key> + <value>Корректный отчет можно сформировать только на основе актуальных данных. +<link e1cib/command/ОбщаяКоманда.ОписаниеАктуализацииДанных>Подробнее</> +</value> + + true + Label + true + true + + Left + + + + ТекстУсловияПолученияСервисаКонтекстноеМеню + 20 + true + + true + Label + true + true + true + + Left + Center + + + true + true + + true + + + <key>ru</key> + <value>Условия получения сервиса</value> + + + ru + Условия получения сервиса + + + ГруппаУсловияПолученияСервисаРасширеннаяПодсказка + 18 + Label + true + true + + Left + + + UsualGroup + + Auto + true + true + + Style.ЦветФонаДокументаСНекорректнымиКонтрагентамиВСпискеДокументов + + Auto + Auto + + + + ТабличныйДокумент + 1 + true + true + + true + + + ТабличныйДокумент + + None + + ТабличныйДокументРасширеннаяПодсказка + 3 + Label + true + true + + Left + + + + ТабличныйДокументКонтекстноеМеню + 2 + true + + SpreadsheetDocumentField + Enter + true + Left + true + + + DetailProcessing + ТабличныйДокументОбработкаРасшифровки + + 50 + true + 10 + true + true + true + Special + ScrollAlways + Always + Auto + true + true + true + Normal + + + + ФормаКоманднаяПанель + -1 + Left + + + OnOpen + ПриОткрытии + + + OnCreateAtServer + ПриСозданииНаСервере + + + OnClose + ПриЗакрытии + + ChangeSettingsStructure + ChangeVariant + Generate + LoadReportSettings + LoadVariant + Print + ReportSettings + Save + SaveReportSettings + SaveVariant + StandardSettings + DontBlock + true + true + Vertical + true + true + true + auto + true + + Объект + 1 + + ReportObject.ДосьеКонтрагента + + + true + + + true + +
      true
      +
      + + ТабличныйДокумент + + <key>ru</key> + <value>Табличный документ</value> + + 2 + + SpreadsheetDocument + + + true + + + true + + + + + СтрокаПоиска + + <key>ru</key> + <value>ИНН или наименование контрагента</value> + + 3 + + String + + 250 + + + + true + + + true + + ShowError + + + ОбластиРасшифровки + + <key>ru</key> + <value>Области расшифровки</value> + + 4 + + ValueTable + + + true + + + true + + + ИмяОбласти + + <key>ru</key> + <value>Имя области</value> + + 3 + + String + + + + true + + + true + + + + ПерваяСтрока + + <key>ru</key> + <value>Первая строка</value> + + 1 + + Number + + 5 + true + + + + true + + + true + + + + ПоследняяСтрока + + <key>ru</key> + <value>Последняя строка</value> + + 2 + + Number + + 5 + true + + + + true + + + true + + + + + НайденныйИНН + + <key>ru</key> + <value>Найденный ИНН</value> + + 5 + + String + + 12 + + + + true + + + true + + + + Контрагент + + <key>ru</key> + <value>Контрагент</value> + + 6 + + DefinedType.Контрагент + + + true + + + true + + + + ОписаниеОшибки + + <key>ru</key> + <value>Описание ошибки</value> + + 7 + + String + + + + true + + + true + + + + АдресХранилища + + <key>ru</key> + <value>Адрес хранилища</value> + + 10 + + String + + + + true + + + true + + + + ИдентификаторЗадания + + <key>ru</key> + <value>Идентификатор задания</value> + + 9 + + UUID + + + true + + + true + + + + СформироватьОтчет + + <key>ru</key> + <value>Сформировать</value> + + 1 + + ru + Сформировать отчет + + + true + + + + СформироватьОтчет + + + DontUse + Auto + + + ДобавитьВСправочник + + <key>ru</key> + <value>Добавить в справочник</value> + + 3 + + ru + Добавить нового контрагента в справочник + + + true + + + StdPicture.CreateListItem + + + + ДобавитьВСправочник + + + DontUse + Auto + + + Контрагент + + CatalogRef + + + + ИНН + + String + + 12 + + + + + + + + +
      diff --git a/SSL/src/Reports/ДосьеКонтрагента/Forms/Форма/Module.bsl b/SSL/src/Reports/ДосьеКонтрагента/Forms/Форма/Module.bsl new file mode 100644 index 000000000..4f392dd3b --- /dev/null +++ b/SSL/src/Reports/ДосьеКонтрагента/Forms/Форма/Module.bsl @@ -0,0 +1,410 @@ +&НаКлиенте +Перем ПараметрыОбработчикаОжидания; +&НаКлиенте +Перем ОтключитьФормированиеОтчета; + +#Область ОбработчикиСобытийФормы + +&НаСервере +Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) + + Если ЗначениеЗаполнено(Параметры.Контрагент) Тогда + Реквизиты = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(Параметры.Контрагент, "ЭтоГруппа,ИНН"); + Если НЕ Реквизиты.ЭтоГруппа + И ЗначениеЗаполнено(Реквизиты.ИНН) Тогда + СтрокаПоиска = Реквизиты.ИНН; + Контрагент = Параметры.Контрагент; + КонецЕсли; + ИначеЕсли ЗначениеЗаполнено(Параметры.ИНН) Тогда + СтрокаПоиска = Параметры.ИНН; + КонецЕсли; + + ПоискПоИНН = СтроковыеФункцииКлиентСервер.ТолькоЦифрыВСтроке(СтрокаПоиска); + Если ПоискПоИНН + И (СтрДлина(СтрокаПоиска) = 10 + ИЛИ СтрДлина(СтрокаПоиска) = 12) Тогда + СформироватьОтчетНаСервере(СтрокаПоиска); + КонецЕсли; + + УправлениеФормойНаСервере(); + +КонецПроцедуры + +&НаКлиенте +Процедура ПриОткрытии(Отказ) + + Если ЗначениеЗаполнено(ИдентификаторЗадания) Тогда + ДлительныеОперацииКлиент.ИнициализироватьПараметрыОбработчикаОжидания(ПараметрыОбработчикаОжидания); + ПодключитьОбработчикОжидания("Подключаемый_ПроверитьВыполнениеЗадания", 0.5, Истина); + ОбщегоНазначенияКлиентСервер.УстановитьСостояниеПоляТабличногоДокумента( + Элементы.ТабличныйДокумент, "ФормированиеОтчета"); + ИначеЕсли ЗначениеЗаполнено(ОписаниеОшибки) Тогда + ПодключитьОбработчикОжидания("Подключаемый_ПоказатьПредупреждениеОбОшибке", 0.1, Истина); + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура ПриЗакрытии() + + Если ЗначениеЗаполнено(ИдентификаторЗадания) Тогда + ОтменитьВыполнениеЗадания(ИдентификаторЗадания); + КонецЕсли; + +КонецПроцедуры + +#КонецОбласти + +#Область ОбработчикиСобытийЭлементовШапкиФормы + +&НаКлиенте +Процедура СтрокаПоискаПриИзменении(Элемент) + + СформироватьОтчетНаКлиенте(СтрокаПоиска); + +КонецПроцедуры + +&НаКлиенте +Процедура ТабличныйДокументОбработкаРасшифровки(Элемент, Расшифровка, СтандартнаяОбработка) + + СтандартнаяОбработка = Ложь; + + Если ТипЗнч(Расшифровка) <> Тип("Структура") + ИЛИ НЕ Расшифровка.Свойство("Действие") Тогда + Возврат; + КонецЕсли; + + Если Расшифровка.Действие = "Показать" + ИЛИ Расшифровка.Действие = "Свернуть" Тогда + + ПоказатьСкрытьОбластьДокумента(Расшифровка); + + ИначеЕсли Расшифровка.Действие = "Открыть" Тогда + + Если НЕ Расшифровка.Свойство("ИНН") Тогда + Возврат; + КонецЕсли; + + Если НЕ ЗначениеЗаполнено(Расшифровка.ИНН) + ИЛИ (СтрДлина(Расшифровка.ИНН) <> 10 + И СтрДлина(Расшифровка.ИНН) <> 12) Тогда + Возврат; + КонецЕсли; + ПараметрыФормы = Новый Структура("ИНН", Расшифровка.ИНН); + ОткрытьФорму("Отчет.ДосьеКонтрагента.Форма", ПараметрыФормы, , Расшифровка.ИНН); + + КонецЕсли; + +КонецПроцедуры + +#КонецОбласти + +#Область ОбработчикиКомандФормы + +&НаКлиенте +Процедура СформироватьОтчет(Команда) + + Если ОтключитьФормированиеОтчета <> Неопределено Тогда + Возврат; + КонецЕсли; + + Если НЕ ЗначениеЗаполнено(СтрокаПоиска) Тогда + ОбщегоНазначенияКлиентСервер.СообщитьПользователю( + Нстр("ru='Поле ""ИНН или наименование контрагента"" не заполнено'"), , "СтрокаПоиска"); + Возврат; + КонецЕсли; + + СформироватьОтчетНаКлиенте(СтрокаПоиска); + +КонецПроцедуры + +&НаКлиенте +Процедура ДобавитьВСправочник(Команда) + + СвойстваКонтрагентов = ПроверкаКонтрагентовКлиентСервер.СвойстваСправочникаКонтрагенты(); + Если НЕ ЗначениеЗаполнено(СвойстваКонтрагентов.Имя) + ИЛИ НЕ ЗначениеЗаполнено(НайденныйИНН) Тогда + Возврат; + КонецЕсли; + ПараметрыФормы = Новый Структура("ТекстЗаполнения", НайденныйИНН); + ОткрытьФорму("Справочник." + СвойстваКонтрагентов.Имя + ".ФормаОбъекта", ПараметрыФормы); + +КонецПроцедуры + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +&НаСервере +Процедура УправлениеФормойНаСервере() + + СвойстваКонтрагентов = ПроверкаКонтрагентовКлиентСервер.СвойстваСправочникаКонтрагенты(); + ИмяСправочника = СвойстваКонтрагентов.Имя; + Элементы.КнопкаДобавитьВСправочник.Видимость = ЗначениеЗаполнено(ИмяСправочника) + И ПравоДоступа("Добавление", Метаданные.Справочники[ИмяСправочника]) + И НЕ ЗначениеЗаполнено(Контрагент) + И ЗначениеЗаполнено(НайденныйИНН); + + Если ЗначениеЗаполнено(Контрагент) Тогда + Заголовок = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru='Досье контрагента: %1'"), + Контрагент); + Иначе + Заголовок = НСтр("ru='Досье контрагента'"); + КонецЕсли; + + ТекущийЭлемент = ?(НЕ ЗначениеЗаполнено(ОписаниеОшибки) И ТабличныйДокумент.ВысотаТаблицы > 0, + Элементы.ТабличныйДокумент, + Элементы.СтрокаПоиска); + +КонецПроцедуры + +&НаКлиенте +Процедура ПоказатьСкрытьОбластьДокумента(Расшифровка) + + Если НЕ Расшифровка.Свойство("ИмяОбласти") Тогда + Возврат; + КонецЕсли; + + Отбор = Новый Структура("ИмяОбласти", Расшифровка.ИмяОбласти); + СтрокиТаблицы = ОбластиРасшифровки.НайтиСтроки(Отбор); + Если СтрокиТаблицы.Количество() = 0 Тогда + Возврат; + КонецЕсли; + СтрокаОбласти = СтрокиТаблицы[0]; + + НомерСтрокиЕще = СтрокаОбласти.ПерваяСтрока - 1; + + Если Расшифровка.Действие = "Показать" Тогда + ТабличныйДокумент.Область(НомерСтрокиЕще, , НомерСтрокиЕще).Видимость = Ложь; + ТабличныйДокумент.Область(СтрокаОбласти.ПерваяСтрока, , СтрокаОбласти.ПоследняяСтрока).Видимость = Истина; + Элементы.ТабличныйДокумент.ТекущаяОбласть = ТабличныйДокумент.Область(СтрокаОбласти.ПоследняяСтрока, 2); + Иначе // "Свернуть" + ТабличныйДокумент.Область(НомерСтрокиЕще, , НомерСтрокиЕще).Видимость = Истина; + ТабличныйДокумент.Область(СтрокаОбласти.ПерваяСтрока, , СтрокаОбласти.ПоследняяСтрока).Видимость = Ложь; + Элементы.ТабличныйДокумент.ТекущаяОбласть = ТабличныйДокумент.Область(НомерСтрокиЕще, 2); + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура СформироватьОтчетНаКлиенте(ТекстПоиска) + + Если НЕ ЗначениеЗаполнено(ТекстПоиска) Тогда + Возврат; + КонецЕсли; + + ПоискПоИНН = СтроковыеФункцииКлиентСервер.ТолькоЦифрыВСтроке(ТекстПоиска); + Если ПоискПоИНН Тогда + + Если СтрДлина(ТекстПоиска) <> 10 + И СтрДлина(ТекстПоиска) <> 12 Тогда + ТекстОшибки = НСтр("ru='Для поиска по ИНН необходимо ввести 10 или 12 цифр.'"); + ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстОшибки, , "СтрокаПоиска"); + Возврат; + КонецЕсли; + + ОбщегоНазначенияКлиентСервер.УстановитьСостояниеПоляТабличногоДокумента( + Элементы.ТабличныйДокумент, "ФормированиеОтчета"); + + Результат = СформироватьОтчетНаСервере(ТекстПоиска); + + Если НЕ Результат Тогда + ДлительныеОперацииКлиент.ИнициализироватьПараметрыОбработчикаОжидания(ПараметрыОбработчикаОжидания); + ПодключитьОбработчикОжидания("Подключаемый_ПроверитьВыполнениеЗадания", 1, Истина); + Иначе + ОбщегоНазначенияКлиентСервер.УстановитьСостояниеПоляТабличногоДокумента( + Элементы.ТабличныйДокумент, "НеИспользовать"); + + // Обработка ошибок + Если ЗначениеЗаполнено(ОписаниеОшибки) Тогда + Если ОписаниеОшибки = "НеУказаныПараметрыАутентификации" Тогда + ТекстВопроса = НСтр("ru='Для автоматического заполнения реквизитов контрагентов + |необходимо подключиться к интернет-поддержке пользователей. + |Подключиться сейчас?'"); + ОписаниеОповещения = Новый ОписаниеОповещения("ПодключитьИнтернетПоддержку", ЭтотОбъект); + ПоказатьВопрос(ОписаниеОповещения, ТекстВопроса, РежимДиалогаВопрос.ДаНет); + ИначеЕсли ОписаниеОшибки = "НеУказанПароль" Тогда + ТекстВопроса = НСтр("ru='Необходимо указать пароль к Интернет-поддержке пользователей + |и установить флажок ""Запомнить пароль"". + |Указать сейчас?'"); + ОписаниеОповещения = Новый ОписаниеОповещения("ПодключитьИнтернетПоддержку", ЭтотОбъект); + ПоказатьВопрос(ОписаниеОповещения, ТекстВопроса, РежимДиалогаВопрос.ДаНет); + Иначе + ПоказатьПредупреждение(, ОписаниеОшибки); + КонецЕсли; + КонецЕсли; + + КонецЕсли; + + Иначе // Поиск по наименованию + + ПараметрыФормы = Новый Структура; + ПараметрыФормы.Вставить("СтрокаПоиска", ТекстПоиска); + ПараметрыФормы.Вставить("Заголовок", НСтр("ru='Поиск контрагента'")); + ДопПараметры = Новый Структура; + ОписаниеОповещения = Новый ОписаниеОповещения("НайтиПоНаименованиюЗавершение", ЭтотОбъект, ДопПараметры); + ОткрытьФорму("ОбщаяФорма.ЗаполнениеРеквизитовКонтрагента", + ПараметрыФормы, ЭтотОбъект, , , , ОписаниеОповещения); + + КонецЕсли; + + ОтключитьФормированиеОтчета = Истина; + ПодключитьОбработчикОжидания("Подключаемый_ВключитьФормированиеОтчета", 0.1, Истина); + +КонецПроцедуры + +&НаСервере +Функция СформироватьОтчетНаСервере(ТекстПоиска) + + ИдентификаторЗадания = Неопределено; + ОписаниеОшибки = ""; + + Если НЕ ПроверитьЗаполнение() Тогда + Возврат Истина; + КонецЕсли; + + ПараметрыОтчета = Новый Структура; + ПараметрыОтчета.Вставить("ИНН", ТекстПоиска); + Если ЗначениеЗаполнено(Контрагент) + И ОбщегоНазначения.ЗначениеРеквизитаОбъекта(Контрагент, "ИНН") <> ТекстПоиска Тогда + Контрагент = Неопределено; + КонецЕсли; + ПараметрыОтчета.Вставить("Контрагент", Контрагент); + РезультатВыполнения = ДлительныеОперации.ЗапуститьВыполнениеВФоне( + Новый УникальныйИдентификатор, + "Отчеты.ДосьеКонтрагента.СформироватьОтчет", + ПараметрыОтчета, + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru='Формирование отчета: Досье контрагента: %1'"), + СтрокаПоиска)); + + АдресХранилища = РезультатВыполнения.АдресХранилища; + + Если РезультатВыполнения.ЗаданиеВыполнено Тогда + ЗагрузитьПодготовленныеДанные(); + ИдентификаторЗадания = Неопределено; + Иначе + ИдентификаторЗадания = РезультатВыполнения.ИдентификаторЗадания; + КонецЕсли; + + Возврат РезультатВыполнения.ЗаданиеВыполнено; + +КонецФункции + +&НаКлиенте +Процедура Подключаемый_ПоказатьПредупреждениеОбОшибке() + + ПоказатьПредупреждение(, ОписаниеОшибки); + ОписаниеОшибки = ""; + +КонецПроцедуры + +&НаКлиенте +Процедура Подключаемый_ПроверитьВыполнениеЗадания() + + Если ЗначениеЗаполнено(ИдентификаторЗадания) Тогда + + Если ЗаданиеВыполнено(ИдентификаторЗадания) Тогда + ИдентификаторЗадания = Неопределено; + ЗагрузитьПодготовленныеДанные(); + Если ЗначениеЗаполнено(ОписаниеОшибки) Тогда + ПоказатьПредупреждение(, ОписаниеОшибки); + ОписаниеОшибки = ""; + КонецЕсли; + Иначе + ДлительныеОперацииКлиент.ОбновитьПараметрыОбработчикаОжидания(ПараметрыОбработчикаОжидания); + ПодключитьОбработчикОжидания("Подключаемый_ПроверитьВыполнениеЗадания", + ПараметрыОбработчикаОжидания.ТекущийИнтервал, + Истина); + КонецЕсли; + + КонецЕсли; + + Если НЕ ЗначениеЗаполнено(ИдентификаторЗадания) Тогда + ОбщегоНазначенияКлиентСервер.УстановитьСостояниеПоляТабличногоДокумента( + Элементы.ТабличныйДокумент, "НеИспользовать"); + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура Подключаемый_ВключитьФормированиеОтчета() + + ОтключитьФормированиеОтчета = Неопределено; + +КонецПроцедуры + +&НаКлиенте +Процедура ПодключитьИнтернетПоддержку(Ответ, ДопПараметры) Экспорт + + Если Ответ = КодВозвратаДиалога.Да Тогда + ОписаниеОповещения = Новый ОписаниеОповещения("ПодключитьИнтернетПоддержкуЗавершение", ЭтотОбъект, ДопПараметры); + СтандартныеПодсистемыКлиент.АвторизоватьНаСайтеПоддержкиПользователей(ЭтотОбъект, ОписаниеОповещения); + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура ПодключитьИнтернетПоддержкуЗавершение(Результат, ДопПараметры) Экспорт + + Если Результат <> Неопределено Тогда + СформироватьОтчетНаКлиенте(СтрокаПоиска); + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура НайтиПоНаименованиюЗавершение(Результат, ДопПараметры) Экспорт + + Если НЕ ЗначениеЗаполнено(Результат) + ИЛИ ТипЗнч(Результат) <> Тип("Строка") Тогда + Возврат; + КонецЕсли; + + СформироватьОтчетНаКлиенте(Результат); + +КонецПроцедуры + +&НаСервереБезКонтекста +Функция ЗаданиеВыполнено(ИдентификаторЗадания) + + Возврат ДлительныеОперации.ЗаданиеВыполнено(ИдентификаторЗадания); + +КонецФункции + +&НаСервереБезКонтекста +Процедура ОтменитьВыполнениеЗадания(ИдентификаторЗадания) + + ДлительныеОперации.ОтменитьВыполнениеЗадания(ИдентификаторЗадания); + +КонецПроцедуры + +&НаСервере +Процедура ЗагрузитьПодготовленныеДанные() + + ДанныеОтчета = ПолучитьИзВременногоХранилища(АдресХранилища); + ОписаниеОшибки = ДанныеОтчета.ОписаниеОшибки; + Контрагент = ДанныеОтчета.Контрагент; + ТабличныйДокумент.Очистить(); + Элементы.ТабличныйДокумент.ИспользуемоеИмяФайла = Неопределено; + ТабличныйДокумент.ТекущаяОбласть = ТабличныйДокумент.Область(1, 1, 1, 1); + ОбластиРасшифровки.Очистить(); + НайденныйИНН = ""; + Если НЕ ЗначениеЗаполнено(ОписаниеОшибки) Тогда + ТабличныйДокумент.Вывести(ДанныеОтчета.ТабличныйДокумент); + ТабличныйДокумент.ФиксацияСверху = 2; + Элементы.ТабличныйДокумент.ИспользуемоеИмяФайла = СокрЛП(ДанныеОтчета.ИспользуемоеИмяФайла); + НайденныйИНН = ДанныеОтчета.НайденныйИНН; + Для каждого СтрокаОбласти Из ДанныеОтчета.ОбластиРасшифровки Цикл + НоваяСтрока = ОбластиРасшифровки.Добавить(); + ЗаполнитьЗначенияСвойств(НоваяСтрока, СтрокаОбласти); + КонецЦикла; + КонецЕсли; + + УправлениеФормойНаСервере(); + +КонецПроцедуры + +#КонецОбласти + diff --git a/SSL/src/Reports/ДосьеКонтрагента/ManagerModule.bsl b/SSL/src/Reports/ДосьеКонтрагента/ManagerModule.bsl new file mode 100644 index 000000000..7708f0b94 --- /dev/null +++ b/SSL/src/Reports/ДосьеКонтрагента/ManagerModule.bsl @@ -0,0 +1,1250 @@ +#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда + +#Область СлужебныеПроцедурыИФункции + +Процедура СформироватьОтчет(ПараметрыОтчета, АдресХранилища) Экспорт + + ДанныеОтчета = Новый Структура("Контрагент,ОписаниеОшибки", ПараметрыОтчета.Контрагент, ""); + + ЭтоЮридическоеЛицо = СтрДлина(ПараметрыОтчета.ИНН) = 10; + Если ЭтоЮридическоеЛицо Тогда + ИнформацияОСвязях = ДанныеЕдиныхГосРеестров.ИнформацияОСвязяхЮридическогоЛицаПоИНН(ПараметрыОтчета.ИНН); + Иначе + ИнформацияОСвязях = ДанныеЕдиныхГосРеестров.ИнформацияОСвязяхПредпринимателяПоИНН(ПараметрыОтчета.ИНН); + КонецЕсли; + Если ЗначениеЗаполнено(ИнформацияОСвязях.ОписаниеОшибки) Тогда + ДанныеОтчета.ОписаниеОшибки = ИнформацияОСвязях.ОписаниеОшибки; + ПоместитьВоВременноеХранилище(ДанныеОтчета, АдресХранилища); + Возврат; + КонецЕсли; + + ПолучитьСостояниеКонтрагентаПоДаннымЕГРН(ИнформацияОСвязях); + + ДополнитьИнформациюОКонтрагентеДаннымиИБ(ИнформацияОСвязях, ДанныеОтчета); + + ТабличныйДокумент = Новый ТабличныйДокумент; + ПараметрыВывода = Новый Структура; + ПараметрыВывода.Вставить("ОбластиМакета", ВсеОбластиМакета()); + ПараметрыВывода.Вставить("ОбластиРасшифровки", НоваяТаблицаОбластиРасшифровки()); + ПараметрыВывода.Вставить("ЭтоЮридическоеЛицо", ЭтоЮридическоеЛицо); + + ВывестиРазделНаименование(ТабличныйДокумент, ИнформацияОСвязях, ПараметрыВывода); + + ВывестиРазделРегистрация(ТабличныйДокумент, ИнформацияОСвязях, ПараметрыВывода); + + ВывестиРазделРеквизиты(ТабличныйДокумент, ИнформацияОСвязях, ПараметрыВывода); + + ВывестиРазделРасчетныеСчета(ТабличныйДокумент, ИнформацияОСвязях, ПараметрыВывода); + + ВывестиРазделВидыДеятельности(ТабличныйДокумент, ИнформацияОСвязях, ПараметрыВывода); + + ВывестиРазделЛицензии(ТабличныйДокумент, ИнформацияОСвязях, ПараметрыВывода); + + ВывестиРазделЮридическийАдрес(ТабличныйДокумент, ИнформацияОСвязях, ПараметрыВывода); + + ВывестиРазделПочтовыйАдрес(ТабличныйДокумент, ИнформацияОСвязях, ПараметрыВывода); + + ВывестиРазделКонтакты(ТабличныйДокумент, ИнформацияОСвязях, ПараметрыВывода); + + ВывестиРазделУставныйКапитал(ТабличныйДокумент, ИнформацияОСвязях, ПараметрыВывода); + + ВывестиРазделРуководитель(ТабличныйДокумент, ИнформацияОСвязях, ПараметрыВывода); + + ВывестиРазделУчрежденныеФирмы(ТабличныйДокумент, ИнформацияОСвязях, ПараметрыВывода); + + ВывестиРазделУчредители(ТабличныйДокумент, ИнформацияОСвязях, ПараметрыВывода); + + ВывестиРазделПодразделения(ТабличныйДокумент, ИнформацияОСвязях, ПараметрыВывода); + + ВывестиРазделИзмененияВРеестре(ТабличныйДокумент, ИнформацияОСвязях, ПараметрыВывода); + + ДанныеОтчета.Вставить("НайденныйИНН", ИнформацияОСвязях.ИНН); + ДанныеОтчета.Вставить("ТабличныйДокумент", ТабличныйДокумент); + ДанныеОтчета.Вставить("ОбластиРасшифровки", ПараметрыВывода.ОбластиРасшифровки); + ДанныеОтчета.Вставить("ИспользуемоеИмяФайла", СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru='Досье контрагента %1'"), + ОбщегоНазначенияКлиентСервер.ЗаменитьНедопустимыеСимволыВИмениФайла( + ИнформацияОСвязях.НаименованиеСокращенное, ""))); + + ПоместитьВоВременноеХранилище(ДанныеОтчета, АдресХранилища); + +КонецПроцедуры + +#Область ВыводРазделовОтчета + +Процедура ВывестиРазделНаименование(ТабличныйДокумент, ИнформацияОСвязях, ПараметрыВывода) + + ОбластиМакета = ПараметрыВывода.ОбластиМакета; + + ОбластиМакета.Наименование.Параметры.НаименованиеСокращенное = ИнформацияОСвязях.НаименованиеСокращенное; + Если ИнформацияОСвязях.НаименованиеСокращенное <> ИнформацияОСвязях.НаименованиеПолное Тогда + ОбластиМакета.Наименование.Параметры.НаименованиеПолное = ИнформацияОСвязях.НаименованиеПолное; + КонецЕсли; + ТабличныйДокумент.Вывести(ОбластиМакета.Наименование); + ТабличныйДокумент.Вывести(ОбластиМакета.Разделитель); + +КонецПроцедуры + +Процедура ВывестиРазделРегистрация(ТабличныйДокумент, ИнформацияОСвязях, ПараметрыВывода) + + ОбластиМакета = ПараметрыВывода.ОбластиМакета; + ОбластиРасшифровки = ПараметрыВывода.ОбластиРасшифровки; + ЭтоЮридическоеЛицо = ПараметрыВывода.ЭтоЮридическоеЛицо; + + ОбластиМакета.Регистрация.Параметры.ДатаРегистрации = Формат(ИнформацияОСвязях.ДатаРегистрации, "ДЛФ=D"); + ТабличныйДокумент.Вывести(ОбластиМакета.Регистрация); + Если ИнформацияОСвязях.КодСтатуса <> Неопределено Тогда + + Если ИнформацияОСвязях.КодСтатуса = "001" Тогда + Если ЭтоЮридическоеЛицо Тогда + ОбластиМакета.ДействующаяОрганизация.Параметры.ДействующаяОрганизация = + НСтр("ru='Действующая организация (по данным ЕГРЮЛ)'"); + Иначе + ОбластиМакета.ДействующаяОрганизация.Параметры.ДействующаяОрганизация = + НСтр("ru='Действующий ИП (по данным ЕГРИП)'"); + КонецЕсли; + ТабличныйДокумент.Вывести(ОбластиМакета.ДействующаяОрганизация); + Иначе + Если ЭтоЮридическоеЛицо Тогда + ОбластиМакета.НедействующаяОрганизация.Параметры.НедействующаяОрганизация = + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru='%1 (по данным ЕГРЮЛ)'"), + ИнформацияОСвязях.НаименованиеСтатуса); + Иначе + ОбластиМакета.НедействующаяОрганизация.Параметры.НедействующаяОрганизация = + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru='%1 (по данным ЕГРИП)'"), + ИнформацияОСвязях.НаименованиеСтатуса); + КонецЕсли; + ТабличныйДокумент.Вывести(ОбластиМакета.НедействующаяОрганизация); + КонецЕсли; + + КонецЕсли; + + Если ЗначениеЗаполнено(ИнформацияОСвязях.СостояниеПоДаннымЕГРН) Тогда + + Если ИнформацияОСвязях.СостояниеПоДаннымЕГРН = Перечисления.СостоянияСуществованияКонтрагента.КонтрагентЕстьВБазеФНС Тогда + Если ЭтоЮридическоеЛицо Тогда + ОбластиМакета.ДействующаяОрганизация.Параметры.ДействующаяОрганизация = + НСтр("ru='Организация есть в базе ЕГРН'"); + Иначе + ОбластиМакета.ДействующаяОрганизация.Параметры.ДействующаяОрганизация = + НСтр("ru='ИП есть в базе ЕГРН'"); + КонецЕсли; + ТабличныйДокумент.Вывести(ОбластиМакета.ДействующаяОрганизация); + Иначе + Если НЕ ЭтоЮридическоеЛицо + И ИнформацияОСвязях.СостояниеПоДаннымЕГРН = + Перечисления.СостоянияСуществованияКонтрагента.НеДействуетИлиИзмененКПП Тогда + ОбластиМакета.НедействующаяОрганизация.Параметры.НедействующаяОрганизация = + НСтр("ru='Не действует (по данным ЕГРН)'"); + Иначе + ОбластиМакета.НедействующаяОрганизация.Параметры.НедействующаяОрганизация = + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru='%1 (по данным ЕГРН)'"), + ИнформацияОСвязях.СостояниеПоДаннымЕГРН); + КонецЕсли; + ТабличныйДокумент.Вывести(ОбластиМакета.НедействующаяОрганизация); + КонецЕсли; + + КонецЕсли; + + Если ИнформацияОСвязях.РегистрацияВНалоговомОргане <> Неопределено + ИЛИ ИнформацияОСвязях.РегистрацияВПенсионномФонде <> Неопределено + ИЛИ ИнформацияОСвязях.РегистрацияВФСС <> Неопределено Тогда + + // Свернуто + ВывестиСтрокуЕще(ТабличныйДокумент, ОбластиМакета, "Регистрация", 0); + + // Развернуто + СтрокаОбласти = ОбластиРасшифровки.Добавить(); + СтрокаОбласти.ИмяОбласти = "Регистрация"; + СтрокаОбласти.ПерваяСтрока = ТабличныйДокумент.ВысотаТаблицы + 1; + Если ИнформацияОСвязях.РегистрацияВНалоговомОргане <> Неопределено Тогда + ДатаРегистрации = Формат(ИнформацияОСвязях.РегистрацияВНалоговомОргане.ДатаРегистрации, "ДЛФ=D"); + ОбластиМакета.РегистрацияВГосОрганах.Параметры.ДатаРегистрации = ДатаРегистрации; + ГосударственныйОрган = ИнформацияОСвязях.РегистрацияВНалоговомОргане.Наименование; + ОбластиМакета.РегистрацияВГосОрганах.Параметры.ГосударственныйОрган = ГосударственныйОрган; + ТабличныйДокумент.Вывести(ОбластиМакета.РегистрацияВГосОрганах); + КонецЕсли; + Если ИнформацияОСвязях.РегистрацияВПенсионномФонде <> Неопределено Тогда + ДатаРегистрации = Формат(ИнформацияОСвязях.РегистрацияВПенсионномФонде.ДатаРегистрации, "ДЛФ=D"); + ОбластиМакета.РегистрацияВГосОрганах.Параметры.ДатаРегистрации = ДатаРегистрации; + ГосударственныйОрган = ИнформацияОСвязях.РегистрацияВПенсионномФонде.НаименованиеОрганаПФР; + ОбластиМакета.РегистрацияВГосОрганах.Параметры.ГосударственныйОрган = ГосударственныйОрган; + РегистрационныйНомер = ИнформацияОСвязях.РегистрацияВПенсионномФонде.РегистрационныйНомерПФР; + ОбластиМакета.РегистрацияВГосОрганах.Параметры.РегистрационныйНомер = РегистрационныйНомер; + ТабличныйДокумент.Вывести(ОбластиМакета.РегистрацияВГосОрганах); + КонецЕсли; + Если ИнформацияОСвязях.РегистрацияВФСС <> Неопределено Тогда + ДатаРегистрации = Формат(ИнформацияОСвязях.РегистрацияВФСС.ДатаРегистрации, "ДЛФ=D"); + ОбластиМакета.РегистрацияВГосОрганах.Параметры.ДатаРегистрации = ДатаРегистрации; + ГосударственныйОрган = ИнформацияОСвязях.РегистрацияВФСС.НаименованиеОрганаФСС; + ОбластиМакета.РегистрацияВГосОрганах.Параметры.ГосударственныйОрган = ГосударственныйОрган; + РегистрационныйНомер = ИнформацияОСвязях.РегистрацияВФСС.РегистрационныйНомерФСС; + ОбластиМакета.РегистрацияВГосОрганах.Параметры.РегистрационныйНомер = РегистрационныйНомер; + ТабличныйДокумент.Вывести(ОбластиМакета.РегистрацияВГосОрганах); + КонецЕсли; + Расшифровка = Новый Структура("Действие,ИмяОбласти", "Свернуть", "Регистрация"); + ОбластиМакета.Свернуть.Параметры.Расшифровка = Расшифровка; + ТабличныйДокумент.Вывести(ОбластиМакета.Свернуть); + СтрокаОбласти.ПоследняяСтрока = ТабличныйДокумент.ВысотаТаблицы; + ТабличныйДокумент.Область(СтрокаОбласти.ПерваяСтрока, , СтрокаОбласти.ПоследняяСтрока).Видимость = Ложь; + КонецЕсли; + + ТабличныйДокумент.Вывести(ОбластиМакета.Разделитель); + +КонецПроцедуры + +Процедура ВывестиРазделРеквизиты(ТабличныйДокумент, ИнформацияОСвязях, ПараметрыВывода) + + ОбластиМакета = ПараметрыВывода.ОбластиМакета; + ЭтоЮридическоеЛицо = ПараметрыВывода.ЭтоЮридическоеЛицо; + + Если ЭтоЮридическоеЛицо Тогда + ОбластиМакета.РеквизитыЮридическогоЛица.Параметры.Заполнить(ИнформацияОСвязях); + ТабличныйДокумент.Вывести(ОбластиМакета.РеквизитыЮридическогоЛица); + Иначе + ОбластиМакета.РеквизитыПредпринимателя.Параметры.Заполнить(ИнформацияОСвязях); + ТабличныйДокумент.Вывести(ОбластиМакета.РеквизитыПредпринимателя); + КонецЕсли; + ТабличныйДокумент.Вывести(ОбластиМакета.Разделитель); + +КонецПроцедуры + +Процедура ВывестиРазделРасчетныеСчета(ТабличныйДокумент, ИнформацияОСвязях, ПараметрыВывода) + + ОбластиМакета = ПараметрыВывода.ОбластиМакета; + ОбластиРасшифровки = ПараметрыВывода.ОбластиРасшифровки; + ЭтоЮридическоеЛицо = ПараметрыВывода.ЭтоЮридическоеЛицо; + + КоличествоРасчетныхСчетов = ИнформацияОСвязях.РасчетныеСчета.Количество(); + Если КоличествоРасчетныхСчетов > 0 Тогда + + // Расчетный счет 1 + СтрокаРасчетногоСчета = ИнформацияОСвязях.РасчетныеСчета[0]; + ОбластиМакета.РасчетныеСчета.Параметры.Банк = СтрокаРасчетногоСчета.Банк; + ТабличныйДокумент.Вывести(ОбластиМакета.РасчетныеСчета); + БанковскиеРеквизиты = ?(ЗначениеЗаполнено(СтрокаРасчетногоСчета.КоррСчет), + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru='р/с %1, БИК %2, корр. счет %3'"), + СтрокаРасчетногоСчета.НомерСчета, + СтрокаРасчетногоСчета.БИК, + СтрокаРасчетногоСчета.КоррСчет), + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru='р/с %1, БИК %2'"), + СтрокаРасчетногоСчета.НомерСчета, + СтрокаРасчетногоСчета.БИК)); + ОбластиМакета.РасчетныеСчетаРеквизиты.Параметры.БанковскиеРеквизиты = БанковскиеРеквизиты; + ТабличныйДокумент.Вывести(ОбластиМакета.РасчетныеСчетаРеквизиты); + + // Еще расчетные счета + + Если КоличествоРасчетныхСчетов = 2 Тогда + + // Расчетный счет 2 + СтрокаРасчетногоСчета = ИнформацияОСвязях.РасчетныеСчета[1]; + ОбластиМакета.ЕщеРасчетныеСчета.Параметры.Банк = СтрокаРасчетногоСчета.Банк; + ТабличныйДокумент.Вывести(ОбластиМакета.ЕщеРасчетныеСчета); + БанковскиеРеквизиты = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + ?(ЗначениеЗаполнено(СтрокаРасчетногоСчета.КоррСчет), + НСтр("ru='р/с %1, БИК %2, корр. счет %3'"), + НСтр("ru='р/с %1, БИК %2'")), + СтрокаРасчетногоСчета.НомерСчета, + СтрокаРасчетногоСчета.БИК, + СтрокаРасчетногоСчета.КоррСчет); + ОбластиМакета.РасчетныеСчетаРеквизиты.Параметры.БанковскиеРеквизиты = БанковскиеРеквизиты; + ТабличныйДокумент.Вывести(ОбластиМакета.РасчетныеСчетаРеквизиты); + + ИначеЕсли КоличествоРасчетныхСчетов > 2 Тогда + + // Свернуто + ВывестиСтрокуЕще(ТабличныйДокумент, ОбластиМакета, "РасчетныеСчета", КоличествоРасчетныхСчетов); + + // Развернуто + СтрокаОбласти = ОбластиРасшифровки.Добавить(); + СтрокаОбласти.ИмяОбласти = "РасчетныеСчета"; + СтрокаОбласти.ПерваяСтрока = ТабличныйДокумент.ВысотаТаблицы + 1; + Для НомерСтроки = 2 По КоличествоРасчетныхСчетов Цикл + // Расчетные счета 2 - N + СтрокаРасчетногоСчета = ИнформацияОСвязях.РасчетныеСчета[НомерСтроки - 1]; + ОбластиМакета.ЕщеРасчетныеСчета.Параметры.Банк = СтрокаРасчетногоСчета.Банк; + ТабличныйДокумент.Вывести(ОбластиМакета.ЕщеРасчетныеСчета); + БанковскиеРеквизиты = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + ?(ЗначениеЗаполнено(СтрокаРасчетногоСчета.КоррСчет), + НСтр("ru='р/с %1, БИК %2, корр. счет %3'"), + НСтр("ru='р/с %1, БИК %2'")), + СтрокаРасчетногоСчета.НомерСчета, + СтрокаРасчетногоСчета.БИК, + СтрокаРасчетногоСчета.КоррСчет); + ОбластиМакета.РасчетныеСчетаРеквизиты.Параметры.БанковскиеРеквизиты = БанковскиеРеквизиты; + ТабличныйДокумент.Вывести(ОбластиМакета.РасчетныеСчетаРеквизиты); + КонецЦикла; + Расшифровка = Новый Структура("Действие,ИмяОбласти", "Свернуть", "РасчетныеСчета"); + ОбластиМакета.Свернуть.Параметры.Расшифровка = Расшифровка; + ТабличныйДокумент.Вывести(ОбластиМакета.Свернуть); + СтрокаОбласти.ПоследняяСтрока = ТабличныйДокумент.ВысотаТаблицы; + ТабличныйДокумент.Область(СтрокаОбласти.ПерваяСтрока, , СтрокаОбласти.ПоследняяСтрока).Видимость = Ложь; + КонецЕсли; + + ТабличныйДокумент.Вывести(ОбластиМакета.Разделитель); + + КонецЕсли; + +КонецПроцедуры + +Процедура ВывестиРазделВидыДеятельности(ТабличныйДокумент, ИнформацияОСвязях, ПараметрыВывода) + + ОбластиМакета = ПараметрыВывода.ОбластиМакета; + ОбластиРасшифровки = ПараметрыВывода.ОбластиРасшифровки; + ЭтоЮридическоеЛицо = ПараметрыВывода.ЭтоЮридическоеЛицо; + + КоличествоВидовДеятельности = ИнформацияОСвязях.ВидыДеятельности.Количество(); + Если КоличествоВидовДеятельности > 0 Тогда + + // Вид деятельности 1 + СтрокаВидаДеятельности = ИнформацияОСвязях.ВидыДеятельности[0]; + ОбластиМакета.ВидыДеятельности.Параметры.Заполнить(СтрокаВидаДеятельности); + ТабличныйДокумент.Вывести(ОбластиМакета.ВидыДеятельности); + + // Еще виды деятельности + + Если КоличествоВидовДеятельности = 2 Тогда + + // Вид деятельности 2 + СтрокаВидаДеятельности = ИнформацияОСвязях.ВидыДеятельности[1]; + ОбластиМакета.ЕщеВидыДеятельности.Параметры.Заполнить(СтрокаВидаДеятельности); + ТабличныйДокумент.Вывести(ОбластиМакета.ЕщеВидыДеятельности); + + ИначеЕсли КоличествоВидовДеятельности > 2 Тогда + + // Свернуто + ВывестиСтрокуЕще(ТабличныйДокумент, ОбластиМакета, "ВидыДеятельности", КоличествоВидовДеятельности); + + // Развернуто + СтрокаОбласти = ОбластиРасшифровки.Добавить(); + СтрокаОбласти.ИмяОбласти = "ВидыДеятельности"; + СтрокаОбласти.ПерваяСтрока = ТабличныйДокумент.ВысотаТаблицы + 1; + Для НомерСтроки = 2 По КоличествоВидовДеятельности Цикл + // Виды деятельности 2 - N + СтрокаВидаДеятельности = ИнформацияОСвязях.ВидыДеятельности[НомерСтроки - 1]; + ОбластиМакета.ЕщеВидыДеятельности.Параметры.Заполнить(СтрокаВидаДеятельности); + ТабличныйДокумент.Вывести(ОбластиМакета.ЕщеВидыДеятельности); + КонецЦикла; + Расшифровка = Новый Структура("Действие,ИмяОбласти", "Свернуть", "ВидыДеятельности"); + ОбластиМакета.Свернуть.Параметры.Расшифровка = Расшифровка; + ТабличныйДокумент.Вывести(ОбластиМакета.Свернуть); + СтрокаОбласти.ПоследняяСтрока = ТабличныйДокумент.ВысотаТаблицы; + ТабличныйДокумент.Область(СтрокаОбласти.ПерваяСтрока, , СтрокаОбласти.ПоследняяСтрока).Видимость = Ложь; + КонецЕсли; + + ТабличныйДокумент.Вывести(ОбластиМакета.Разделитель); + + КонецЕсли; + +КонецПроцедуры + +Процедура ВывестиРазделЛицензии(ТабличныйДокумент, ИнформацияОСвязях, ПараметрыВывода) + + ОбластиМакета = ПараметрыВывода.ОбластиМакета; + ОбластиРасшифровки = ПараметрыВывода.ОбластиРасшифровки; + ЭтоЮридическоеЛицо = ПараметрыВывода.ЭтоЮридическоеЛицо; + + КоличествоЛицензий = ИнформацияОСвязях.Лицензии.Количество(); + Если КоличествоЛицензий > 0 Тогда + + // Лицензия 1 + СтрокаЛицензии = ИнформацияОСвязях.Лицензии[0]; + ОбластиМакета.Лицензии.Параметры.Лицензия = СтрокаЛицензии.Лицензия; + ТабличныйДокумент.Вывести(ОбластиМакета.Лицензии); + Если НЕ ПустаяСтрока(СтрокаЛицензии.ОписаниеЛицензии) Тогда + ОбластиМакета.ЛицензииОписание.Параметры.ОписаниеЛицензии = СтрокаЛицензии.ОписаниеЛицензии; + ТабличныйДокумент.Вывести(ОбластиМакета.ЛицензииОписание); + КонецЕсли; + + // Еще лицензии + + Если КоличествоЛицензий = 2 Тогда + + // Лицензия 2 + СтрокаЛицензии = ИнформацияОСвязях.Лицензии[1]; + ОбластиМакета.ЕщеЛицензии.Параметры.Лицензия = СтрокаЛицензии.Лицензия; + ТабличныйДокумент.Вывести(ОбластиМакета.ЕщеЛицензии); + Если НЕ ПустаяСтрока(СтрокаЛицензии.ОписаниеЛицензии) Тогда + ОбластиМакета.ЛицензииОписание.Параметры.ОписаниеЛицензии = СтрокаЛицензии.ОписаниеЛицензии; + ТабличныйДокумент.Вывести(ОбластиМакета.ЛицензииОписание); + КонецЕсли; + + ИначеЕсли КоличествоЛицензий > 2 Тогда + + // Свернуто + ВывестиСтрокуЕще(ТабличныйДокумент, ОбластиМакета, "Лицензии", КоличествоЛицензий); + + // Развернуто + СтрокаОбласти = ОбластиРасшифровки.Добавить(); + СтрокаОбласти.ИмяОбласти = "Лицензии"; + СтрокаОбласти.ПерваяСтрока = ТабличныйДокумент.ВысотаТаблицы + 1; + Для НомерСтроки = 2 По КоличествоЛицензий Цикл + // Лицензии 2 - N + СтрокаЛицензии = ИнформацияОСвязях.Лицензии[НомерСтроки-1]; + ОбластиМакета.ЕщеЛицензии.Параметры.Лицензия = СтрокаЛицензии.Лицензия; + ТабличныйДокумент.Вывести(ОбластиМакета.ЕщеЛицензии); + Если НЕ ПустаяСтрока(СтрокаЛицензии.ОписаниеЛицензии) Тогда + ОбластиМакета.ЛицензииОписание.Параметры.ОписаниеЛицензии = СтрокаЛицензии.ОписаниеЛицензии; + ТабличныйДокумент.Вывести(ОбластиМакета.ЛицензииОписание); + КонецЕсли; + КонецЦикла; + Расшифровка = Новый Структура("Действие,ИмяОбласти", "Свернуть", "Лицензии"); + ОбластиМакета.Свернуть.Параметры.Расшифровка = Расшифровка; + ТабличныйДокумент.Вывести(ОбластиМакета.Свернуть); + СтрокаОбласти.ПоследняяСтрока = ТабличныйДокумент.ВысотаТаблицы; + ТабличныйДокумент.Область(СтрокаОбласти.ПерваяСтрока, , СтрокаОбласти.ПоследняяСтрока).Видимость = Ложь; + КонецЕсли; + + ТабличныйДокумент.Вывести(ОбластиМакета.Разделитель); + + КонецЕсли; + +КонецПроцедуры + +Процедура ВывестиРазделЮридическийАдрес(ТабличныйДокумент, ИнформацияОСвязях, ПараметрыВывода) + + ОбластиМакета = ПараметрыВывода.ОбластиМакета; + ОбластиРасшифровки = ПараметрыВывода.ОбластиРасшифровки; + ЭтоЮридическоеЛицо = ПараметрыВывода.ЭтоЮридическоеЛицо; + + Если НЕ ЭтоЮридическоеЛицо Тогда + Возврат; + КонецЕсли; + + ОбластиМакета.ЮридическийАдрес.Параметры.ЮридическийАдрес = ИнформацияОСвязях.ЮридическийАдрес.Представление; + ТабличныйДокумент.Вывести(ОбластиМакета.ЮридическийАдрес); + + // Еще организации, зарегистрированные по этому юридическому адресу + + КоличествоОрганизаций = ИнформацияОСвязях.ОрганизацииПоАдресу.Количество(); + Если КоличествоОрганизаций > 0 Тогда + + // Сколько всего + ИнформацияОСвязях.ОрганизацииПоАдресу.Сортировать("НаименованиеОрганизации"); + СколькоЕщеОрганизаций = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru='По этому адресу %1 еще %2 %3:'"), + ?(КоличествоОрганизаций % 10 = 1 И НЕ КоличествоОрганизаций % 100 = 11, + НСтр("ru='зарегистрирована'"), + НСтр("ru='зарегистрированы'")), + Формат(КоличествоОрганизаций, "ЧГ="), + ?(КоличествоОрганизаций % 10 = 1 И Цел(КоличествоОрганизаций/10) <> 1, + НСтр("ru='организация'"), + ?(КоличествоОрганизаций % 10 > 1 И КоличествоОрганизаций % 10 < 5 И Цел(КоличествоОрганизаций/10) <> 1, + НСтр("ru='организации'"), + НСтр("ru='организаций'")))); + ОбластиМакета.СколькоЕщеОрганизаций.Параметры.СколькоЕщеОрганизаций = СколькоЕщеОрганизаций; + ТабличныйДокумент.Вывести(ОбластиМакета.СколькоЕщеОрганизаций); + + // Организация 1 + ВывестиСтрокуОбОрганизации(ТабличныйДокумент, ОбластиМакета, "ЕщеОрганизации", + ИнформацияОСвязях.ОрганизацииПоАдресу[0]); + + Если КоличествоОрганизаций = 2 Тогда + + // Организация 2 + ВывестиСтрокуОбОрганизации(ТабличныйДокумент, ОбластиМакета, "ЕщеОрганизации", + ИнформацияОСвязях.ОрганизацииПоАдресу[1]); + + ИначеЕсли КоличествоОрганизаций > 2 Тогда + + // Свернуто + ВывестиСтрокуЕще(ТабличныйДокумент, ОбластиМакета, "ОрганизацииПоАдресу", КоличествоОрганизаций); + + // Развернуто + СтрокаОбласти = ОбластиРасшифровки.Добавить(); + СтрокаОбласти.ИмяОбласти = "ОрганизацииПоАдресу"; + СтрокаОбласти.ПерваяСтрока = ТабличныйДокумент.ВысотаТаблицы + 1; + Для НомерСтроки = 2 По КоличествоОрганизаций Цикл + // Организации 2 - N + ВывестиСтрокуОбОрганизации(ТабличныйДокумент, ОбластиМакета, "ЕщеОрганизации", + ИнформацияОСвязях.ОрганизацииПоАдресу[НомерСтроки-1]); + КонецЦикла; + Расшифровка = Новый Структура("Действие,ИмяОбласти", "Свернуть", "ОрганизацииПоАдресу"); + ОбластиМакета.Свернуть.Параметры.Расшифровка = Расшифровка; + ТабличныйДокумент.Вывести(ОбластиМакета.Свернуть); + СтрокаОбласти.ПоследняяСтрока = ТабличныйДокумент.ВысотаТаблицы; + ТабличныйДокумент.Область(СтрокаОбласти.ПерваяСтрока, , СтрокаОбласти.ПоследняяСтрока).Видимость = Ложь; + КонецЕсли; + + КонецЕсли; + + ТабличныйДокумент.Вывести(ОбластиМакета.Разделитель); + +КонецПроцедуры + +Процедура ВывестиРазделПочтовыйАдрес(ТабличныйДокумент, ИнформацияОСвязях, ПараметрыВывода) + + ОбластиМакета = ПараметрыВывода.ОбластиМакета; + ОбластиРасшифровки = ПараметрыВывода.ОбластиРасшифровки; + ЭтоЮридическоеЛицо = ПараметрыВывода.ЭтоЮридическоеЛицо; + + Если ЗначениеЗаполнено(ИнформацияОСвязях.ПочтовыйАдрес) + И (НЕ ЭтоЮридическоеЛицо + ИЛИ ИнформацияОСвязях.ПочтовыйАдрес <> ИнформацияОСвязях.ЮридическийАдрес.Представление) Тогда + + ОбластиМакета.ПочтовыйАдрес.Параметры.ПочтовыйАдрес = ИнформацияОСвязях.ПочтовыйАдрес; + ТабличныйДокумент.Вывести(ОбластиМакета.ПочтовыйАдрес); + ТабличныйДокумент.Вывести(ОбластиМакета.Разделитель); + + КонецЕсли; + +КонецПроцедуры + +Процедура ВывестиРазделКонтакты(ТабличныйДокумент, ИнформацияОСвязях, ПараметрыВывода) + + ОбластиМакета = ПараметрыВывода.ОбластиМакета; + ОбластиРасшифровки = ПараметрыВывода.ОбластиРасшифровки; + ЭтоЮридическоеЛицо = ПараметрыВывода.ЭтоЮридическоеЛицо; + + КоличествоКонтактов = ИнформацияОСвязях.КонтактныеЛица.Количество(); + Если КоличествоКонтактов > 0 Тогда + + // Контактное лицо 1 + СтрокаКонтактногоЛица = ИнформацияОСвязях.КонтактныеЛица[0]; + ОбластиМакета.Контакты.Параметры.КонтактноеЛицо = СтрокаКонтактногоЛица.Представление; + ТабличныйДокумент.Вывести(ОбластиМакета.Контакты); + + Если КоличествоКонтактов = 2 Тогда + + // Контактное лицо 2 + СтрокаКонтактногоЛица = ИнформацияОСвязях.КонтактныеЛица[1]; + ОбластиМакета.ЕщеКонтакты.Параметры.КонтактноеЛицо = СтрокаКонтактногоЛица.Представление; + ТабличныйДокумент.Вывести(ОбластиМакета.ЕщеКонтакты); + + ИначеЕсли КоличествоКонтактов > 2 Тогда + + // Свернуто + ВывестиСтрокуЕще(ТабличныйДокумент, ОбластиМакета, "КонтактныеЛица", КоличествоКонтактов); + + // Развернуто + СтрокаОбласти = ОбластиРасшифровки.Добавить(); + СтрокаОбласти.ИмяОбласти = "КонтактныеЛица"; + СтрокаОбласти.ПерваяСтрока = ТабличныйДокумент.ВысотаТаблицы + 1; + Для НомерСтроки = 2 По КоличествоКонтактов Цикл + // Контактные лица 2 - N + СтрокаКонтактногоЛица = ИнформацияОСвязях.КонтактныеЛица[НомерСтроки - 1]; + ОбластиМакета.ЕщеКонтакты.Параметры.КонтактноеЛицо = СтрокаКонтактногоЛица.Представление; + ТабличныйДокумент.Вывести(ОбластиМакета.ЕщеКонтакты); + КонецЦикла; + Расшифровка = Новый Структура("Действие,ИмяОбласти", "Свернуть", "КонтактныеЛица"); + ОбластиМакета.Свернуть.Параметры.Расшифровка = Расшифровка; + ТабличныйДокумент.Вывести(ОбластиМакета.Свернуть); + СтрокаОбласти.ПоследняяСтрока = ТабличныйДокумент.ВысотаТаблицы; + ТабличныйДокумент.Область(СтрокаОбласти.ПерваяСтрока, , СтрокаОбласти.ПоследняяСтрока).Видимость = Ложь; + КонецЕсли; + + ТабличныйДокумент.Вывести(ОбластиМакета.Разделитель); + + КонецЕсли; + +КонецПроцедуры + +Процедура ВывестиРазделУставныйКапитал(ТабличныйДокумент, ИнформацияОСвязях, ПараметрыВывода) + + ОбластиМакета = ПараметрыВывода.ОбластиМакета; + ОбластиРасшифровки = ПараметрыВывода.ОбластиРасшифровки; + ЭтоЮридическоеЛицо = ПараметрыВывода.ЭтоЮридическоеЛицо; + + Если ЭтоЮридическоеЛицо + И ИнформацияОСвязях.УставныйКапитал > 0 Тогда + + ОбластиМакета.УставныйКапитал.Параметры.УставныйКапитал = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru='%1 руб.'"), + Формат(ИнформацияОСвязях.УставныйКапитал, "ЧДЦ=")); + ТабличныйДокумент.Вывести(ОбластиМакета.УставныйКапитал); + + ТабличныйДокумент.Вывести(ОбластиМакета.Разделитель); + + КонецЕсли; + +КонецПроцедуры + +Процедура ВывестиРазделРуководитель(ТабличныйДокумент, ИнформацияОСвязях, ПараметрыВывода) + + ОбластиМакета = ПараметрыВывода.ОбластиМакета; + ОбластиРасшифровки = ПараметрыВывода.ОбластиРасшифровки; + ЭтоЮридическоеЛицо = ПараметрыВывода.ЭтоЮридическоеЛицо; + + Если ЭтоЮридическоеЛицо Тогда + ВыводитьСекциюРуководитель = ЗначениеЗаполнено(ИнформацияОСвязях.Руководитель); + Иначе + ВыводитьСекциюРуководитель = ИнформацияОСвязях.ОрганизацииГдеРуководитель.Количество() > 0 + ИЛИ ИнформацияОСвязях.ОрганизацииГдеУчредитель.Количество() > 0; + КонецЕсли; + + Если ВыводитьСекциюРуководитель Тогда + + Если ЭтоЮридическоеЛицо Тогда + Руководитель = ИнформацияОСвязях.Руководитель.Представление; + Если ЗначениеЗаполнено(ИнформацияОСвязях.Телефон) Тогда + Руководитель = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru='%1, тел. %2'"), + Руководитель, + ИнформацияОСвязях.Телефон.Представление); + КонецЕсли; + ДолжностьРуководителя = ИнформацияОСвязях.Руководитель.Должность; + Если ЗначениеЗаполнено(ИнформацияОСвязях.Руководитель.ДатаЗаписи) Тогда + ДолжностьРуководителя = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru='%1 с %2'"), + ДолжностьРуководителя, + Формат(ИнформацияОСвязях.Руководитель.ДатаЗаписи, "ДЛФ=D")); + КонецЕсли; + ОбластиМакета.Руководитель.Параметры.Руководитель = Руководитель; + ОбластиМакета.Руководитель.Параметры.ДолжностьРуководителя = ДолжностьРуководителя; + ТабличныйДокумент.Вывести(ОбластиМакета.Руководитель); + Иначе + ОбластиМакета.Предприниматель.Параметры.Предприниматель = ИнформацияОСвязях.Наименование; + ТабличныйДокумент.Вывести(ОбластиМакета.Предприниматель); + КонецЕсли; + + // Организации, где еще этот руководитель (предприниматель) является руководителем + + КоличествоОрганизаций = ИнформацияОСвязях.ОрганизацииГдеРуководитель.Количество(); + Если КоличествоОрганизаций > 0 Тогда + + // Сколько всего + ИнформацияОСвязях.ОрганизацииГдеРуководитель.Сортировать("НаименованиеОрганизации"); + СколькоЕщеОрганизаций = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + ?(ЭтоЮридическоеЛицо, + НСтр("ru='Является руководителем еще в %1'"), + НСтр("ru='Является руководителем в %1'")), + СтроковыеФункцииКлиентСервер.ЧислоЦифрамиПредметИсчисленияПрописью( + КоличествоОрганизаций, + НСтр("ru='организации,организациях,организациях'"))) + + ?(ИнформацияОСвязях.ОрганизацииГдеРуководительПоФИО, + " (" + НСтр("ru='поиск проведен по ФИО и может быть неточным'") + ")", + ""); + ОбластиМакета.СколькоЕщеОрганизаций.Параметры.СколькоЕщеОрганизаций = СколькоЕщеОрганизаций; + ТабличныйДокумент.Вывести(ОбластиМакета.СколькоЕщеОрганизаций); + + // Организация 1 + ВывестиСтрокуОбОрганизации(ТабличныйДокумент, ОбластиМакета, "ЕщеОрганизации", + ИнформацияОСвязях.ОрганизацииГдеРуководитель[0]); + + Если КоличествоОрганизаций = 2 Тогда + + // Организация 2 + ВывестиСтрокуОбОрганизации(ТабличныйДокумент, ОбластиМакета, "ЕщеОрганизации", + ИнформацияОСвязях.ОрганизацииГдеРуководитель[1]); + + ИначеЕсли КоличествоОрганизаций > 2 Тогда + + // Свернуто + ВывестиСтрокуЕще(ТабличныйДокумент, ОбластиМакета, "ОрганизацииГдеРуководитель", КоличествоОрганизаций); + + // Развернуто + СтрокаОбласти = ОбластиРасшифровки.Добавить(); + СтрокаОбласти.ИмяОбласти = "ОрганизацииГдеРуководитель"; + СтрокаОбласти.ПерваяСтрока = ТабличныйДокумент.ВысотаТаблицы + 1; + Для НомерСтроки = 2 По КоличествоОрганизаций Цикл + // Организации 2 - N + ВывестиСтрокуОбОрганизации(ТабличныйДокумент, ОбластиМакета, "ЕщеОрганизации", + ИнформацияОСвязях.ОрганизацииГдеРуководитель[НомерСтроки-1]); + КонецЦикла; + Расшифровка = Новый Структура("Действие,ИмяОбласти", "Свернуть", "ОрганизацииГдеРуководитель"); + ОбластиМакета.Свернуть.Параметры.Расшифровка = Расшифровка; + ТабличныйДокумент.Вывести(ОбластиМакета.Свернуть); + СтрокаОбласти.ПоследняяСтрока = ТабличныйДокумент.ВысотаТаблицы; + ТабличныйДокумент.Область(СтрокаОбласти.ПерваяСтрока, , СтрокаОбласти.ПоследняяСтрока).Видимость = Ложь; + КонецЕсли; + + КонецЕсли; + + // Организации, где еще этот руководитель (предприниматель) является учредителем + + КоличествоОрганизаций = ИнформацияОСвязях.ОрганизацииГдеУчредитель.Количество(); + Если КоличествоОрганизаций > 0 Тогда + + // Сколько всего + ИнформацияОСвязях.ОрганизацииГдеУчредитель.Сортировать("НаименованиеОрганизации"); + ВыводитьЕще = ЭтоЮридическоеЛицо + И ((ЗначениеЗаполнено(ИнформацияОСвязях.Руководитель.ИНН) + И ИнформацияОСвязях.Учредители.Найти(ИнформацияОСвязях.Руководитель.ИНН, "ИНН") <> Неопределено) + ИЛИ (НЕ ЗначениеЗаполнено(ИнформацияОСвязях.Руководитель.ИНН) + И ИнформацияОСвязях.Учредители.Найти(ИнформацияОСвязях.Руководитель.Представление, "Учредитель") <> Неопределено)); + СколькоЕщеОрганизаций = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + ?(ВыводитьЕще, + НСтр("ru='Является учредителем еще в %1'"), + НСтр("ru='Является учредителем в %1'")), + СтроковыеФункцииКлиентСервер.ЧислоЦифрамиПредметИсчисленияПрописью( + КоличествоОрганизаций, + НСтр("ru='организации,организациях,организациях'"))) + + ?(ИнформацияОСвязях.ОрганизацииГдеУчредительПоФИО, + " (" + НСтр("ru='поиск проведен по ФИО и может быть неточным'") + ")", + ""); + ОбластиМакета.СколькоЕщеОрганизаций.Параметры.СколькоЕщеОрганизаций = СколькоЕщеОрганизаций; + ТабличныйДокумент.Вывести(ОбластиМакета.СколькоЕщеОрганизаций); + + // Организация 1 + ВывестиСтрокуОбУчредителе(ТабличныйДокумент, ОбластиМакета, "ЕщеОрганизацииГдеУчредитель", + ИнформацияОСвязях.ОрганизацииГдеУчредитель[0]); + + Если КоличествоОрганизаций = 2 Тогда + + // Организация 2 + ВывестиСтрокуОбУчредителе(ТабличныйДокумент, ОбластиМакета, "ЕщеОрганизацииГдеУчредитель", + ИнформацияОСвязях.ОрганизацииГдеУчредитель[1]); + + ИначеЕсли КоличествоОрганизаций > 2 Тогда + + // Свернуто + ВывестиСтрокуЕще(ТабличныйДокумент, ОбластиМакета, "ОрганизацииГдеУчредитель", КоличествоОрганизаций); + + // Развернуто + СтрокаОбласти = ОбластиРасшифровки.Добавить(); + СтрокаОбласти.ИмяОбласти = "ОрганизацииГдеУчредитель"; + СтрокаОбласти.ПерваяСтрока = ТабличныйДокумент.ВысотаТаблицы + 1; + Для НомерСтроки = 2 По КоличествоОрганизаций Цикл + // Организации 2 - N + ВывестиСтрокуОбУчредителе(ТабличныйДокумент, ОбластиМакета, "ЕщеОрганизацииГдеУчредитель", + ИнформацияОСвязях.ОрганизацииГдеУчредитель[НомерСтроки - 1]); + КонецЦикла; + Расшифровка = Новый Структура("Действие,ИмяОбласти", "Свернуть", "ОрганизацииГдеУчредитель"); + ОбластиМакета.Свернуть.Параметры.Расшифровка = Расшифровка; + ТабличныйДокумент.Вывести(ОбластиМакета.Свернуть); + СтрокаОбласти.ПоследняяСтрока = ТабличныйДокумент.ВысотаТаблицы; + ТабличныйДокумент.Область(СтрокаОбласти.ПерваяСтрока, , СтрокаОбласти.ПоследняяСтрока).Видимость = Ложь; + + КонецЕсли; + + КонецЕсли; + + ТабличныйДокумент.Вывести(ОбластиМакета.Разделитель); + + КонецЕсли; + +КонецПроцедуры + +Процедура ВывестиРазделУчрежденныеФирмы(ТабличныйДокумент, ИнформацияОСвязях, ПараметрыВывода) + + ОбластиМакета = ПараметрыВывода.ОбластиМакета; + ОбластиРасшифровки = ПараметрыВывода.ОбластиРасшифровки; + ЭтоЮридическоеЛицо = ПараметрыВывода.ЭтоЮридическоеЛицо; + + Если ЭтоЮридическоеЛицо Тогда + + КоличествоОрганизаций = ИнформацияОСвязях.УчрежденныеФирмы.Количество(); + Если КоличествоОрганизаций > 0 Тогда + + ИнформацияОСвязях.УчрежденныеФирмы.Сортировать("НаименованиеОрганизации"); + + // Организация 1 + ВывестиСтрокуОбУчредителе(ТабличныйДокумент, ОбластиМакета, "УчрежденныеФирмы", + ИнформацияОСвязях.УчрежденныеФирмы[0]); + + Если КоличествоОрганизаций = 2 Тогда + + // Организация 2 + ВывестиСтрокуОбУчредителе(ТабличныйДокумент, ОбластиМакета, "ЕщеУчрежденныеФирмы", + ИнформацияОСвязях.УчрежденныеФирмы[1]); + + ИначеЕсли КоличествоОрганизаций > 2 Тогда + + // Свернуто + ВывестиСтрокуЕще(ТабличныйДокумент, ОбластиМакета, "УчрежденныеФирмы", КоличествоОрганизаций); + + // Развернуто + СтрокаОбласти = ОбластиРасшифровки.Добавить(); + СтрокаОбласти.ИмяОбласти = "УчрежденныеФирмы"; + СтрокаОбласти.ПерваяСтрока = ТабличныйДокумент.ВысотаТаблицы + 1; + Для НомерСтроки = 2 По КоличествоОрганизаций Цикл + // Организации 2 - N + ВывестиСтрокуОбУчредителе(ТабличныйДокумент, ОбластиМакета, "ЕщеУчрежденныеФирмы", + ИнформацияОСвязях.УчрежденныеФирмы[НомерСтроки - 1]); + КонецЦикла; + Расшифровка = Новый Структура("Действие,ИмяОбласти", "Свернуть", "УчрежденныеФирмы"); + ОбластиМакета.Свернуть.Параметры.Расшифровка = Расшифровка; + ТабличныйДокумент.Вывести(ОбластиМакета.Свернуть); + СтрокаОбласти.ПоследняяСтрока = ТабличныйДокумент.ВысотаТаблицы; + ТабличныйДокумент.Область(СтрокаОбласти.ПерваяСтрока, , СтрокаОбласти.ПоследняяСтрока).Видимость = Ложь; + + КонецЕсли; + + ТабличныйДокумент.Вывести(ОбластиМакета.Разделитель); + + КонецЕсли; + + КонецЕсли; + +КонецПроцедуры + +Процедура ВывестиРазделУчредители(ТабличныйДокумент, ИнформацияОСвязях, ПараметрыВывода) + + ОбластиМакета = ПараметрыВывода.ОбластиМакета; + ОбластиРасшифровки = ПараметрыВывода.ОбластиРасшифровки; + ЭтоЮридическоеЛицо = ПараметрыВывода.ЭтоЮридическоеЛицо; + + Если ЭтоЮридическоеЛицо Тогда + + КоличествоУчредителей = ИнформацияОСвязях.Учредители.Количество(); + Если КоличествоУчредителей > 0 Тогда + + Для НомерУчредителя = 1 По КоличествоУчредителей Цикл + + // Учредитель + + ПрефиксОбластиРасшифровки = "Учредитель" + Формат(НомерУчредителя, "ЧГ="); + + СтрокаУчредителя = ИнформацияОСвязях.Учредители[НомерУчредителя - 1]; + Если НомерУчредителя > 1 Тогда + ТабличныйДокумент.Вывести(ОбластиМакета.РазделительСтрокСписка); + КонецЕсли; + ВывестиСтрокуОбУчредителе(ТабличныйДокумент, ОбластиМакета, ?(НомерУчредителя = 1, "Учредители", "ЕщеУчредители"), + СтрокаУчредителя); + + // Организации, где еще этот учредитель является руководителем + + КоличествоОрганизаций = СтрокаУчредителя.ОрганизацииГдеРуководитель.Количество(); + Если КоличествоОрганизаций > 0 Тогда + + // Сколько всего + СтрокаУчредителя.ОрганизацииГдеРуководитель.Сортировать("НаименованиеОрганизации"); + ИмяОбластиРасшифровки = ПрефиксОбластиРасшифровки + "ОрганизацииГдеРуководитель"; + ВыводитьЕще = ИнформацияОСвязях.Руководитель <> Неопределено + И ((ЗначениеЗаполнено(ИнформацияОСвязях.Руководитель.ИНН) + И СтрокаУчредителя.ИНН = ИнформацияОСвязях.Руководитель.ИНН) + ИЛИ (НЕ ЗначениеЗаполнено(ИнформацияОСвязях.Руководитель.ИНН) + И СтрокаУчредителя.Учредитель = ИнформацияОСвязях.Руководитель.Представление)); + СколькоЕщеОрганизаций = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + ?(ВыводитьЕще, + НСтр("ru='Является руководителем еще в %1'"), + НСтр("ru='Является руководителем в %1'")), + СтроковыеФункцииКлиентСервер.ЧислоЦифрамиПредметИсчисленияПрописью( + КоличествоОрганизаций, + НСтр("ru='организации,организациях,организациях'"))) + + ?(СтрокаУчредителя.ОрганизацииГдеРуководительПоФИО, + " (" + НСтр("ru='поиск проведен по ФИО и может быть неточным'") + ")", + ""); + ОбластиМакета.СколькоЕщеОрганизаций.Параметры.СколькоЕщеОрганизаций = СколькоЕщеОрганизаций; + ТабличныйДокумент.Вывести(ОбластиМакета.СколькоЕщеОрганизаций); + + // Организация 1 + ВывестиСтрокуОбОрганизации(ТабличныйДокумент, ОбластиМакета, "ЕщеОрганизации", + СтрокаУчредителя.ОрганизацииГдеРуководитель[0]); + + Если КоличествоОрганизаций = 2 Тогда + + // Организация 2 + ВывестиСтрокуОбОрганизации(ТабличныйДокумент, ОбластиМакета, "ЕщеОрганизации", + СтрокаУчредителя.ОрганизацииГдеРуководитель[1]); + + ИначеЕсли КоличествоОрганизаций > 2 Тогда + + // Свернуто + ВывестиСтрокуЕще(ТабличныйДокумент, ОбластиМакета, ИмяОбластиРасшифровки, КоличествоОрганизаций); + + // Развернуто + СтрокаОбласти = ОбластиРасшифровки.Добавить(); + СтрокаОбласти.ИмяОбласти = ИмяОбластиРасшифровки; + СтрокаОбласти.ПерваяСтрока = ТабличныйДокумент.ВысотаТаблицы + 1; + Для НомерСтроки = 2 По КоличествоОрганизаций Цикл + // Организации 2 - N + ВывестиСтрокуОбОрганизации(ТабличныйДокумент, ОбластиМакета, "ЕщеОрганизации", + СтрокаУчредителя.ОрганизацииГдеРуководитель[НомерСтроки-1]); + КонецЦикла; + Расшифровка = Новый Структура("Действие,ИмяОбласти", "Свернуть", ИмяОбластиРасшифровки); + ОбластиМакета.Свернуть.Параметры.Расшифровка = Расшифровка; + ТабличныйДокумент.Вывести(ОбластиМакета.Свернуть); + СтрокаОбласти.ПоследняяСтрока = ТабличныйДокумент.ВысотаТаблицы; + ТабличныйДокумент.Область(СтрокаОбласти.ПерваяСтрока, , СтрокаОбласти.ПоследняяСтрока).Видимость = Ложь; + + КонецЕсли; + + КонецЕсли; + + // Организации, где еще этот учредитель является учредителем + + КоличествоОрганизаций = СтрокаУчредителя.ОрганизацииГдеУчредитель.Количество(); + Если КоличествоОрганизаций > 0 Тогда + + // Сколько всего + СтрокаУчредителя.ОрганизацииГдеУчредитель.Сортировать("НаименованиеОрганизации"); + ИмяОбластиРасшифровки = ПрефиксОбластиРасшифровки + "ОрганизацииГдеУчредитель"; + СколькоЕщеОрганизаций = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru='Является учредителем еще в %1'"), + СтроковыеФункцииКлиентСервер.ЧислоЦифрамиПредметИсчисленияПрописью( + КоличествоОрганизаций, + НСтр("ru='организации,организациях,организациях'"))) + + ?(СтрокаУчредителя.ОрганизацииГдеУчредительПоФИО, + " (" + НСтр("ru='поиск проведен по ФИО и может быть неточным'") + ")", + ""); + ОбластиМакета.СколькоЕщеОрганизаций.Параметры.СколькоЕщеОрганизаций = СколькоЕщеОрганизаций; + ТабличныйДокумент.Вывести(ОбластиМакета.СколькоЕщеОрганизаций); + + // Организация 1 + ВывестиСтрокуОбУчредителе(ТабличныйДокумент, ОбластиМакета, "ЕщеОрганизацииГдеУчредитель", + СтрокаУчредителя.ОрганизацииГдеУчредитель[0]); + + Если КоличествоОрганизаций = 2 Тогда + + // Организация 2 + ВывестиСтрокуОбУчредителе(ТабличныйДокумент, ОбластиМакета, "ЕщеОрганизацииГдеУчредитель", + СтрокаУчредителя.ОрганизацииГдеУчредитель[1]); + + ИначеЕсли КоличествоОрганизаций > 2 Тогда + + // Свернуто + ВывестиСтрокуЕще(ТабличныйДокумент, ОбластиМакета, ИмяОбластиРасшифровки, КоличествоОрганизаций); + + // Развернуто + СтрокаОбласти = ОбластиРасшифровки.Добавить(); + СтрокаОбласти.ИмяОбласти = ИмяОбластиРасшифровки; + СтрокаОбласти.ПерваяСтрока = ТабличныйДокумент.ВысотаТаблицы + 1; + Для НомерСтроки = 2 По КоличествоОрганизаций Цикл + // Организации 2 - N + ВывестиСтрокуОбУчредителе(ТабличныйДокумент, ОбластиМакета, "ЕщеОрганизацииГдеУчредитель", + СтрокаУчредителя.ОрганизацииГдеУчредитель[НомерСтроки - 1]); + КонецЦикла; + Расшифровка = Новый Структура("Действие,ИмяОбласти", "Свернуть", ИмяОбластиРасшифровки); + ОбластиМакета.Свернуть.Параметры.Расшифровка = Расшифровка; + ТабличныйДокумент.Вывести(ОбластиМакета.Свернуть); + СтрокаОбласти.ПоследняяСтрока = ТабличныйДокумент.ВысотаТаблицы; + ТабличныйДокумент.Область(СтрокаОбласти.ПерваяСтрока, , СтрокаОбласти.ПоследняяСтрока).Видимость = Ложь; + + КонецЕсли; + + КонецЕсли; + + КонецЦикла; + + ТабличныйДокумент.Вывести(ОбластиМакета.Разделитель); + + КонецЕсли; + + КонецЕсли; + +КонецПроцедуры + +Процедура ВывестиРазделПодразделения(ТабличныйДокумент, ИнформацияОСвязях, ПараметрыВывода) + + ОбластиМакета = ПараметрыВывода.ОбластиМакета; + ОбластиРасшифровки = ПараметрыВывода.ОбластиРасшифровки; + ЭтоЮридическоеЛицо = ПараметрыВывода.ЭтоЮридическоеЛицо; + + Если ЭтоЮридическоеЛицо Тогда + + КоличествоПодразделений = ИнформацияОСвязях.Подразделения.Количество(); + Если КоличествоПодразделений > 0 Тогда + + // Подразделение 1 + СтрокаПодразделения = ИнформацияОСвязях.Подразделения[0]; + ОбластиМакета.Подразделения.Параметры.ОписаниеПодразделения = СтрокаПодразделения.ОписаниеПодразделения; + ТабличныйДокумент.Вывести(ОбластиМакета.Подразделения); + + // Еще подразделения + + Если КоличествоПодразделений = 2 Тогда + + // Подразделение 2 + СтрокаПодразделения = ИнформацияОСвязях.Подразделения[1]; + ОбластиМакета.ЕщеПодразделения.Параметры.ОписаниеПодразделения = СтрокаПодразделения.ОписаниеПодразделения; + ТабличныйДокумент.Вывести(ОбластиМакета.ЕщеПодразделения); + + ИначеЕсли КоличествоПодразделений > 2 Тогда + + // Свернуто + ВывестиСтрокуЕще(ТабличныйДокумент, ОбластиМакета, "Подразделения", КоличествоПодразделений); + + // Развернуто + СтрокаОбласти = ОбластиРасшифровки.Добавить(); + СтрокаОбласти.ИмяОбласти = "Подразделения"; + СтрокаОбласти.ПерваяСтрока = ТабличныйДокумент.ВысотаТаблицы + 1; + Для НомерСтроки = 2 По КоличествоПодразделений Цикл + // Подразделения 2 - N + СтрокаПодразделения = ИнформацияОСвязях.Подразделения[НомерСтроки-1]; + ОбластиМакета.ЕщеПодразделения.Параметры.ОписаниеПодразделения = СтрокаПодразделения.ОписаниеПодразделения; + ТабличныйДокумент.Вывести(ОбластиМакета.ЕщеПодразделения); + КонецЦикла; + Расшифровка = Новый Структура("Действие,ИмяОбласти", "Свернуть", "Подразделения"); + ОбластиМакета.Свернуть.Параметры.Расшифровка = Расшифровка; + ТабличныйДокумент.Вывести(ОбластиМакета.Свернуть); + СтрокаОбласти.ПоследняяСтрока = ТабличныйДокумент.ВысотаТаблицы; + ТабличныйДокумент.Область(СтрокаОбласти.ПерваяСтрока, , СтрокаОбласти.ПоследняяСтрока).Видимость = Ложь; + КонецЕсли; + + ТабличныйДокумент.Вывести(ОбластиМакета.Разделитель); + + КонецЕсли; + + КонецЕсли; + +КонецПроцедуры + +Процедура ВывестиРазделИзмененияВРеестре(ТабличныйДокумент, ИнформацияОСвязях, ПараметрыВывода) + + ОбластиМакета = ПараметрыВывода.ОбластиМакета; + ОбластиРасшифровки = ПараметрыВывода.ОбластиРасшифровки; + ЭтоЮридическоеЛицо = ПараметрыВывода.ЭтоЮридическоеЛицо; + + КоличествоИзменений = ИнформацияОСвязях.ИзмененияВРеестре.Количество(); + Если КоличествоИзменений > 0 Тогда + + // Изменение 1 + СтрокаИзменения = ИнформацияОСвязях.ИзмененияВРеестре[0]; + ОбластиМакета.ИзмененияВРеестре.Параметры.ДатаИзменения = Формат(СтрокаИзменения.ДатаИзменения, "ДЛФ=D"); + ОбластиМакета.ИзмененияВРеестре.Параметры.ГосударственныйОрган = СтрокаИзменения.ГосударственныйОрган; + ТабличныйДокумент.Вывести(ОбластиМакета.ИзмененияВРеестре); + Если НЕ ПустаяСтрока(СтрокаИзменения.ОписаниеИзменения) Тогда + ОбластиМакета.ИзмененияВРеестреОписание.Параметры.ОписаниеИзменения = СтрокаИзменения.ОписаниеИзменения; + ТабличныйДокумент.Вывести(ОбластиМакета.ИзмененияВРеестреОписание); + КонецЕсли; + + // Еще изменения + + Если КоличествоИзменений = 2 Тогда + + // Изменение 2 + СтрокаИзменения = ИнформацияОСвязях.ИзмененияВРеестре[1]; + ОбластиМакета.ЕщеИзмененияВРеестре.Параметры.ДатаИзменения = Формат(СтрокаИзменения.ДатаИзменения, "ДЛФ=D"); + ОбластиМакета.ЕщеИзмененияВРеестре.Параметры.ГосударственныйОрган = СтрокаИзменения.ГосударственныйОрган; + ТабличныйДокумент.Вывести(ОбластиМакета.ЕщеИзмененияВРеестре); + Если НЕ ПустаяСтрока(СтрокаИзменения.ОписаниеИзменения) Тогда + ОбластиМакета.ИзмененияВРеестреОписание.Параметры.ОписаниеИзменения = СтрокаИзменения.ОписаниеИзменения; + ТабличныйДокумент.Вывести(ОбластиМакета.ИзмененияВРеестреОписание); + КонецЕсли; + + ИначеЕсли КоличествоИзменений > 2 Тогда + + // Свернуто + ВывестиСтрокуЕще(ТабличныйДокумент, ОбластиМакета, "ИзмененияВРеестре", КоличествоИзменений); + + // Развернуто + СтрокаОбласти = ОбластиРасшифровки.Добавить(); + СтрокаОбласти.ИмяОбласти = "ИзмененияВРеестре"; + СтрокаОбласти.ПерваяСтрока = ТабличныйДокумент.ВысотаТаблицы + 1; + Для НомерСтроки = 2 По КоличествоИзменений Цикл + // Изменения 2 - N + СтрокаИзменения = ИнформацияОСвязях.ИзмененияВРеестре[НомерСтроки-1]; + ОбластиМакета.ЕщеИзмененияВРеестре.Параметры.ДатаИзменения = Формат(СтрокаИзменения.ДатаИзменения, "ДЛФ=D"); + ОбластиМакета.ЕщеИзмененияВРеестре.Параметры.ГосударственныйОрган = СтрокаИзменения.ГосударственныйОрган; + ТабличныйДокумент.Вывести(ОбластиМакета.ЕщеИзмененияВРеестре); + Если НЕ ПустаяСтрока(СтрокаИзменения.ОписаниеИзменения) Тогда + ОбластиМакета.ИзмененияВРеестреОписание.Параметры.ОписаниеИзменения = СтрокаИзменения.ОписаниеИзменения; + ТабличныйДокумент.Вывести(ОбластиМакета.ИзмененияВРеестреОписание); + КонецЕсли; + КонецЦикла; + Расшифровка = Новый Структура("Действие,ИмяОбласти", "Свернуть", "ИзмененияВРеестре"); + ОбластиМакета.Свернуть.Параметры.Расшифровка = Расшифровка; + ТабличныйДокумент.Вывести(ОбластиМакета.Свернуть); + СтрокаОбласти.ПоследняяСтрока = ТабличныйДокумент.ВысотаТаблицы; + ТабличныйДокумент.Область(СтрокаОбласти.ПерваяСтрока, , СтрокаОбласти.ПоследняяСтрока).Видимость = Ложь; + КонецЕсли; + + ТабличныйДокумент.Вывести(ОбластиМакета.Разделитель); + + КонецЕсли; + +КонецПроцедуры + +#КонецОбласти + +#Область ОписанияРеквизитов + +Функция НоваяТаблицаРасчетныеСчета() + + Результат = Новый ТаблицаЗначений; + Результат.Колонки.Добавить("Ссылка", Справочники.ТипВсеСсылки()); + Результат.Колонки.Добавить("Банк", Новый ОписаниеТипов("Строка")); + Результат.Колонки.Добавить("НомерСчета", Новый ОписаниеТипов("Строка")); + Результат.Колонки.Добавить("БИК", Новый ОписаниеТипов("Строка")); + Результат.Колонки.Добавить("КоррСчет", Новый ОписаниеТипов("Строка")); + Возврат Результат; + +КонецФункции + +Функция НоваяТаблицаКонтактныеЛица() + + Результат = Новый ТаблицаЗначений; + Результат.Колонки.Добавить("Ссылка", Справочники.ТипВсеСсылки()); + Результат.Колонки.Добавить("Представление", Новый ОписаниеТипов("Строка")); + Возврат Результат; + +КонецФункции + +Функция НоваяТаблицаОбластиРасшифровки() + + Результат = Новый ТаблицаЗначений; + Результат.Колонки.Добавить("ИмяОбласти", Новый ОписаниеТипов("Строка")); + Результат.Колонки.Добавить("ПерваяСтрока", Новый ОписаниеТипов("Число")); + Результат.Колонки.Добавить("ПоследняяСтрока", Новый ОписаниеТипов("Число")); + Возврат Результат; + +КонецФункции + +Функция НовыеРеквизитыОрганизации() + + Результат = Новый Структура; + Результат.Вставить("НаименованиеОрганизации"); + Результат.Вставить("ИНН"); + Результат.Вставить("КодСтатуса"); + Результат.Вставить("НаименованиеСтатуса"); + Возврат Результат; + +КонецФункции + +Функция НовыеРеквизитыУчредителя() + + Результат = Новый Структура; + Результат.Вставить("Учредитель"); + Результат.Вставить("НаименованиеОрганизации"); + Результат.Вставить("ИНН"); + Результат.Вставить("КодСтатуса"); + Результат.Вставить("НаименованиеСтатуса"); + Результат.Вставить("ПроцентКапитала"); + Результат.Вставить("СуммаКапитала"); + Возврат Результат; + +КонецФункции + +#КонецОбласти + +#Область Прочее + +Процедура ВывестиСтрокуОбОрганизации(ТабличныйДокумент, ОбластиМакета, ИмяОбласти, СтрокаДанных) + + СтруктураДанных = НовыеРеквизитыОрганизации(); + ЗаполнитьЗначенияСвойств(СтруктураДанных, СтрокаДанных); + Если ЗначениеЗаполнено(СтруктураДанных.ИНН) Тогда + ОбластиМакета[ИмяОбласти].Параметры.Заполнить(СтруктураДанных); + Расшифровка = Новый Структура("Действие,ИНН", "Открыть", СтруктураДанных.ИНН); + ОбластиМакета[ИмяОбласти].Параметры.Расшифровка = Расшифровка; + ТабличныйДокумент.Вывести(ОбластиМакета[ИмяОбласти]); + Иначе + ОбластиМакета[ИмяОбласти + "БезРасшифровки"].Параметры.Заполнить(СтруктураДанных); + ТабличныйДокумент.Вывести(ОбластиМакета[ИмяОбласти + "БезРасшифровки"]); + КонецЕсли; + Если ЗначениеЗаполнено(СтруктураДанных.КодСтатуса) И СтруктураДанных.КодСтатуса <> "001" Тогда + ТекОбласть = ТабличныйДокумент.Область(ТабличныйДокумент.ВысотаТаблицы, 2, ТабличныйДокумент.ВысотаТаблицы, 2); + ЦветаКонтрагентов = ПроверкаКонтрагентовВызовСервераПовтИсп.ЦветаРезультатовПроверки(); + ТекОбласть.ЦветТекста = ЦветаКонтрагентов.ЦветТекстаНекорректногоКонтрагента; + ОбластиМакета.СтатусОрганизации.Параметры.НаименованиеСтатуса = СтруктураДанных.НаименованиеСтатуса; + ТабличныйДокумент.Вывести(ОбластиМакета.СтатусОрганизации); + КонецЕсли; + +КонецПроцедуры + +Процедура ВывестиСтрокуОбУчредителе(ТабличныйДокумент, ОбластиМакета, ИмяОбласти, СтрокаДанных) + + СтруктураДанных = НовыеРеквизитыУчредителя(); + ЗаполнитьЗначенияСвойств(СтруктураДанных, СтрокаДанных); + Если ЗначениеЗаполнено(СтруктураДанных.ПроцентКапитала) Тогда + СтруктураДанных.ПроцентКапитала = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru='%1 %%'"), + СтруктураДанных.ПроцентКапитала); + КонецЕсли; + Если ЗначениеЗаполнено(СтруктураДанных.СуммаКапитала) Тогда + СтруктураДанных.СуммаКапитала = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru='%1 руб.'"), + СтруктураДанных.СуммаКапитала); + КонецЕсли; + Если ЗначениеЗаполнено(СтруктураДанных.ИНН) Тогда + ОбластиМакета[ИмяОбласти].Параметры.Заполнить(СтруктураДанных); + Расшифровка = Новый Структура("Действие,ИНН", "Открыть", СтруктураДанных.ИНН); + ОбластиМакета[ИмяОбласти].Параметры.Расшифровка = Расшифровка; + ТабличныйДокумент.Вывести(ОбластиМакета[ИмяОбласти]); + Иначе + ОбластиМакета[ИмяОбласти + "БезРасшифровки"].Параметры.Заполнить(СтруктураДанных); + ТабличныйДокумент.Вывести(ОбластиМакета[ИмяОбласти + "БезРасшифровки"]); + КонецЕсли; + Если ЗначениеЗаполнено(СтруктураДанных.КодСтатуса) И СтруктураДанных.КодСтатуса <> "001" Тогда + ТекОбласть = ТабличныйДокумент.Область(ТабличныйДокумент.ВысотаТаблицы, 2, ТабличныйДокумент.ВысотаТаблицы, 2); + ЦветаКонтрагентов = ПроверкаКонтрагентовВызовСервераПовтИсп.ЦветаРезультатовПроверки(); + ТекОбласть.ЦветТекста = ЦветаКонтрагентов.ЦветТекстаНекорректногоКонтрагента; + ОбластиМакета.СтатусОрганизации.Параметры.НаименованиеСтатуса = СтруктураДанных.НаименованиеСтатуса; + ТабличныйДокумент.Вывести(ОбластиМакета.СтатусОрганизации); + КонецЕсли; + +КонецПроцедуры + +Процедура ВывестиСтрокуЕще(ТабличныйДокумент, ОбластиМакета, ИмяОбластиРасшифровки, КоличествоВсего) + + Если КоличествоВсего = 0 Тогда + ТекстЕще = НСтр("ru='Еще'"); + Иначе + ТекстЕще = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru='Еще %1'"), + КоличествоВсего - 1); + КонецЕсли; + ОбластиМакета.Еще.Параметры.ТекстЕще = ТекстЕще; + Расшифровка = Новый Структура("Действие,ИмяОбласти", "Показать", ИмяОбластиРасшифровки); + ОбластиМакета.Еще.Параметры.Расшифровка = Расшифровка; + ТабличныйДокумент.Вывести(ОбластиМакета.Еще); + +КонецПроцедуры + +Процедура ДополнитьИнформациюОКонтрагентеДаннымиИБ(ИнформацияОСвязях, ДанныеОтчета) + + ИнформацияОСвязях.Вставить("РасчетныеСчета", НоваяТаблицаРасчетныеСчета()); + ИнформацияОСвязях.Вставить("ПочтовыйАдрес"); + ИнформацияОСвязях.Вставить("КонтактныеЛица", НоваяТаблицаКонтактныеЛица()); + + Если НЕ ЗначениеЗаполнено(ДанныеОтчета.Контрагент) Тогда + + РаботаСКонтрагентамиПереопределяемый.ЗаполнитьКонтрагентаПоИнформацииОСвязях( + ДанныеОтчета.Контрагент, ИнформацияОСвязях); + + КонецЕсли; + + Если ЗначениеЗаполнено(ДанныеОтчета.Контрагент) Тогда + + РаботаСКонтрагентамиПереопределяемый.ЗаполнитьРасчетныеСчетаИнформацииОСвязяхКонтрагента( + ИнформацияОСвязях.РасчетныеСчета, ДанныеОтчета.Контрагент, ИнформацияОСвязях); + + РаботаСКонтрагентамиПереопределяемый.ЗаполнитьКонтактныеЛицаИнформацииОСвязяхКонтрагента( + ИнформацияОСвязях.КонтактныеЛица, ДанныеОтчета.Контрагент, ИнформацияОСвязях); + + РаботаСКонтрагентамиПереопределяемый.ЗаполнитьПочтовыйАдресИнформацииОСвязяхКонтрагента( + ИнформацияОСвязях.ПочтовыйАдрес, ДанныеОтчета.Контрагент, ИнформацияОСвязях); + + КонецЕсли; + +КонецПроцедуры + +Процедура ПолучитьСостояниеКонтрагентаПоДаннымЕГРН(ИнформацияОСвязях) + + ИнформацияОСвязях.Вставить("СостояниеПоДаннымЕГРН"); + + КПП = ?(ИнформацияОСвязях.Свойство("КПП"), ИнформацияОСвязях.КПП, ""); + + СвойстваКонтрагентов = ПроверкаКонтрагентовКлиентСервер.СвойстваСправочникаКонтрагенты(); + ПустаяСсылкаКонтрагента = ?(ЗначениеЗаполнено(СвойстваКонтрагентов.Имя), + Справочники[СвойстваКонтрагентов.Имя].ПустаяСсылка(), + Неопределено); + + ДополнительныеПараметры = Новый Структура(); + ДополнительныеПараметры.Вставить("ИНН", ИнформацияОСвязях.ИНН); + ДополнительныеПараметры.Вставить("КПП", КПП); + ДополнительныеПараметры.Вставить("Дата", ТекущаяДатаСеанса()); + ДополнительныеПараметры.Вставить("Ссылка", ПустаяСсылкаКонтрагента); + ДополнительныеПараметры.Вставить("Контрагент", ПустаяСсылкаКонтрагента); + ДополнительныеПараметры.Вставить("СохранятьРезультатСразуПослеПроверки", Ложь); + + АдресХранилища = ПоместитьВоВременноеХранилище(Неопределено, Новый УникальныйИдентификатор); + ПроверкаКонтрагентов.ПроверитьКонтрагента(ДополнительныеПараметры, АдресХранилища); + + Состояние = ПолучитьИзВременногоХранилища(АдресХранилища); + + ИнформацияОСвязях.СостояниеПоДаннымЕГРН = Состояние; + +КонецПроцедуры + +Функция ВсеОбластиМакета() + + Макет = Отчеты.ДосьеКонтрагента.ПолучитьМакет("Макет"); + Результат = Новый Структура; + Для каждого Область Из Макет.Области Цикл + Результат.Вставить(Область.Имя, Макет.ПолучитьОбласть(Область.Имя)); + КонецЦикла; + Возврат Результат; + +КонецФункции + +#КонецОбласти + +#КонецОбласти + +#КонецЕсли \ No newline at end of file diff --git a/SSL/src/Reports/ДосьеКонтрагента/Templates/Макет/Template.mxlx b/SSL/src/Reports/ДосьеКонтрагента/Templates/Макет/Template.mxlx new file mode 100644 index 000000000..abc33f61d --- /dev/null +++ b/SSL/src/Reports/ДосьеКонтрагента/Templates/Макет/Template.mxlx @@ -0,0 +1,3075 @@ + + + + ru + ru + + ru + Русский + Русский + + + + 9 + + 0 + + 1 + + + + 8 + + 2 + + + + + 42fbdf9a-63ec-425e-9de0-9eb1ac97b574 + 1 + + 0 + + 3 + + + + + fe57ae9e-ae73-4776-bd05-913cd17283da + 9 + + 0 + + 1 + + + + 1 + + 4 + + + + 8 + + 5 + + + + + 28fabb70-5f56-4096-8f9b-5eaabd431556 + 9 + + 0 + + 1 + + + + 1 + + 6 + + + + 8 + + 2 + + + + + 7bead1f9-0aca-4731-a3cf-56abe96e686e + 9 + + 0 + + 1 + + + + 1 + + 6 + + + + 8 + + 2 + + + + + e17a4de9-0b5e-41dd-adec-00d146f6da65 + 9 + + 0 + + 1 + + + + 5 + + 7 + + + + 6 + + 8 + + + + 8 + + 9 + + + + + 3e612652-6c5e-40c7-81e3-923eea19e77c + 9 + + 0 + + 1 + + + + 1 + + 4 + + + + 8 + + 5 + + + + + 0 + + 42fbdf9a-63ec-425e-9de0-9eb1ac97b574 + + + 10 + НаименованиеСокращенное + + + + + + 1 + + 42fbdf9a-63ec-425e-9de0-9eb1ac97b574 + + + 11 + НаименованиеПолное + + + + + + 2 + + 12 + + + 13 + + + ru + Регистрация + + + + + + + 14 + + + ru + Дата регистрации: [ДатаРегистрации] + + + + + + + + 3 + + 12 + + + 13 + + + + + 15 + ДействующаяОрганизация + + + + + + 4 + + 12 + + + 12 + + + + + 16 + НедействующаяОрганизация + + + + + + 5 + + fe57ae9e-ae73-4776-bd05-913cd17283da + 12 + + + 13 + + + + + 17 + ДатаРегистрации + + + + + 17 + ГосударственныйОрган + + + + 7 + + 17 + РегистрационныйНомер + + + + + + 6 + + 12 + + + 13 + + + ru + Реквизиты + + + + + + + 14 + + + ru + ИНН [ИНН] КПП [КПП] + + + + + + + + 7 + + 28fabb70-5f56-4096-8f9b-5eaabd431556 + 12 + + + 18 + + + + + 19 + + + ru + ОГРН [РегистрационныйНомер] + + + + + + + 20 + + + + + 20 + + + + + 20 + + + + + 20 + + + + + 20 + + + + + 20 + + + + + 21 + + + + + + 8 + + 12 + + + 12 + + + ru + Реквизиты + + + + + + + 14 + + + ru + ИНН [ИНН] ОГРНИП [РегистрационныйНомер] + + + + + + + + 9 + + 28fabb70-5f56-4096-8f9b-5eaabd431556 + 12 + + + 18 + + + ru + Расчетные счета + + + + + + + 22 + Банк + + + + + 20 + + + + + 20 + + + + + 20 + + + + + 20 + + + + + 20 + + + + + 20 + + + + + 20 + + + + + + 10 + + + 1 + + 22 + Банк + Расшифровка + + + + + 20 + + + + + 20 + + + + + 20 + + + + + 20 + + + + + 20 + + + + + 20 + + + + + 20 + + + + + + 11 + + 28fabb70-5f56-4096-8f9b-5eaabd431556 + 12 + + + 23 + + + + + 24 + БанковскиеРеквизиты + + + + + 20 + + + + + 20 + + + + + 20 + + + + + 20 + + + + + 20 + + + + + 20 + + + + + 20 + + + + + + 12 + + 7bead1f9-0aca-4731-a3cf-56abe96e686e + 12 + + + 25 + + + ru + Виды деятельности + + + + + + + 26 + КодОКВЭД + + + + + 27 + НаименованиеОКВЭД + + + + + + 13 + + 7bead1f9-0aca-4731-a3cf-56abe96e686e + 12 + + + 23 + + + + + 28 + КодОКВЭД + + + + + 29 + НаименованиеОКВЭД + + + + + + 14 + + 28fabb70-5f56-4096-8f9b-5eaabd431556 + 12 + + + 18 + + + ru + Лицензии + + + + + + + 22 + Лицензия + + + + + 20 + + + + + 20 + + + + + 20 + + + + + 20 + + + + + 20 + + + + + 20 + + + + + 20 + + + + + + 15 + + 28fabb70-5f56-4096-8f9b-5eaabd431556 + 12 + + + 23 + + + + + 22 + Лицензия + + + + + 20 + + + + + 20 + + + + + 20 + + + + + 20 + + + + + 20 + + + + + 20 + + + + + 20 + + + + + + 16 + + 28fabb70-5f56-4096-8f9b-5eaabd431556 + 12 + + + 23 + + + + + 30 + ОписаниеЛицензии + + + + + 20 + + + + + 20 + + + + + 20 + + + + + 20 + + + + + 20 + + + + + 20 + + + + + 20 + + + + + + 17 + + 12 + + + 18 + + + ru + Юридический адрес + + + + + + + 31 + ЮридическийАдрес + + + + + + 18 + + + 1 + + 24 + СколькоЕщеОрганизаций + + + + + 20 + + + + + 20 + + + + + 20 + + + + + 20 + + + + + 20 + + + + + 20 + + + + + 20 + + + + + + 19 + + + 1 + + 32 + НаименованиеОрганизации + Расшифровка + + + + + 20 + + + + + 20 + + + + + 20 + + + + + 20 + + + + + 20 + + + + + 20 + + + + + 20 + + + + + + 20 + + + 1 + + 24 + НаименованиеОрганизации + + + + + 20 + + + + + 20 + + + + + 20 + + + + + 20 + + + + + 20 + + + + + 20 + + + + + 20 + + + + + + 21 + + + 1 + + 33 + НаименованиеСтатуса + + + + + 20 + + + + + 20 + + + + + 20 + + + + + 20 + + + + + 20 + + + + + 20 + + + + + 20 + + + + + + 22 + + 12 + + + 18 + + + ru + Почтовый адрес + + + + + + + 22 + ПочтовыйАдрес + + + + + 20 + + + + + 20 + + + + + 20 + + + + + 20 + + + + + 20 + + + + + 20 + + + + + 34 + + + + + + 23 + + 12 + + + 18 + + + ru + Контакты + + + + + + + 31 + КонтактноеЛицо + + + + + + 24 + + + 1 + + 24 + КонтактноеЛицо + + + + + 20 + + + + + 20 + + + + + 20 + + + + + 20 + + + + + 20 + + + + + 20 + + + + + 20 + + + + + + 25 + + + + 12 + + + ru + Уставный капитал + + + + + + + 22 + УставныйКапитал + + + + + 20 + + + + + 20 + + + + + 20 + + + + + 20 + + + + + 20 + + + + + 20 + + + + + 20 + + + + + + 26 + + + + 12 + + + ru + Руководитель + + + + + + + 22 + Руководитель + + + + + 20 + + + + + 20 + + + + + 20 + + + + + 20 + + + + + 20 + + + + + 20 + + + + + 20 + + + + + + 27 + + + 1 + + 30 + ДолжностьРуководителя + + + + + 20 + + + + + 20 + + + + + 20 + + + + + 20 + + + + + 20 + + + + + 20 + + + + + 20 + + + + + + 28 + + + + 35 + + + ru + Индивидуальный предприниматель + + + + + + + 27 + Предприниматель + + + + + 20 + + + + + 20 + + + + + 20 + + + + + 20 + + + + + 20 + + + + + 20 + + + + + 20 + + + + + + 29 + + e17a4de9-0b5e-41dd-adec-00d146f6da65 + + + 18 + + + ru + Учредители (участники) + + + + + + + 36 + Учредитель + Расшифровка + + + + 6 + + 37 + ПроцентКапитала + + + + + 38 + СуммаКапитала + + + + + 6 + + + + + + 30 + + e17a4de9-0b5e-41dd-adec-00d146f6da65 + + 1 + + 36 + Учредитель + Расшифровка + + + + + 6 + + + + + 6 + + + + + 6 + + + + + 6 + + + + + 37 + ПроцентКапитала + + + + + 38 + СуммаКапитала + + + + + 6 + + + + + + 31 + + e17a4de9-0b5e-41dd-adec-00d146f6da65 + + + 18 + + + ru + Учредители (участники) + + + + + + + 27 + Учредитель + + + + 6 + + 37 + ПроцентКапитала + + + + + 38 + СуммаКапитала + + + + + 6 + + + + + + 32 + + e17a4de9-0b5e-41dd-adec-00d146f6da65 + + 1 + + 27 + Учредитель + + + + + 6 + + + + + 6 + + + + + 6 + + + + + 6 + + + + + 37 + ПроцентКапитала + + + + + 38 + СуммаКапитала + + + + + 6 + + + + + + 33 + + e17a4de9-0b5e-41dd-adec-00d146f6da65 + + + 18 + + + ru + Учрежденные фирмы + + + + + + + 36 + НаименованиеОрганизации + Расшифровка + + + + 6 + + 37 + ПроцентКапитала + + + + + 38 + СуммаКапитала + + + + + 6 + + + + + + 34 + + e17a4de9-0b5e-41dd-adec-00d146f6da65 + + 1 + + 36 + НаименованиеОрганизации + Расшифровка + + + + + 6 + + + + + 6 + + + + + 6 + + + + + 6 + + + + + 37 + ПроцентКапитала + + + + + 38 + СуммаКапитала + + + + + 6 + + + + + + 35 + + e17a4de9-0b5e-41dd-adec-00d146f6da65 + + + 18 + + + ru + Учрежденные фирмы + + + + + + + 27 + НаименованиеОрганизации + + + + 6 + + 37 + ПроцентКапитала + + + + + 38 + СуммаКапитала + + + + + 6 + + + + + + 36 + + e17a4de9-0b5e-41dd-adec-00d146f6da65 + + 1 + + 27 + НаименованиеОрганизации + + + + + 6 + + + + + 6 + + + + + 6 + + + + + 6 + + + + + 37 + ПроцентКапитала + + + + + 38 + СуммаКапитала + + + + + 6 + + + + + + 37 + + e17a4de9-0b5e-41dd-adec-00d146f6da65 + + + 23 + + + + + 39 + НаименованиеОрганизации + Расшифровка + + + + 6 + + 40 + ПроцентКапитала + + + + + 41 + СуммаКапитала + + + + + 6 + + + + + + 38 + + e17a4de9-0b5e-41dd-adec-00d146f6da65 + + + 23 + + + + + 42 + НаименованиеОрганизации + + + + 6 + + 40 + ПроцентКапитала + + + + + 41 + СуммаКапитала + + + + + 6 + + + + + + 39 + + 12 + + + 35 + + + ru + Филиалы и представительства + + + + + + + 43 + ОписаниеПодразделения + + + + + + 40 + + + 1 + + 17 + ОписаниеПодразделения + + + + + 20 + + + + + 20 + + + + + 20 + + + + + 20 + + + + + 20 + + + + + 20 + + + + + 21 + + + + + + 41 + + 3e612652-6c5e-40c7-81e3-923eea19e77c + 18 + + + 18 + + + ru + Изменения в ЕГРЮЛ + + + + + + + 27 + ДатаИзменения + + + + + 27 + ГосударственныйОрган + + + + + + 42 + + 3e612652-6c5e-40c7-81e3-923eea19e77c + 18 + + + 23 + + + + + 27 + ДатаИзменения + + + + + 27 + ГосударственныйОрган + + + + + 44 + + + + + 44 + + + + + 44 + + + + + 44 + + + + + 44 + + + + + 45 + + + + + + 43 + + 28fabb70-5f56-4096-8f9b-5eaabd431556 + 18 + + + 23 + + + + + 42 + ОписаниеИзменения + + + + + 44 + + + + + 44 + + + + + 44 + + + + + 44 + + + + + 44 + + + + + 44 + + + + + 44 + + + + + + 51 + + + 1 + + 46 + + + ru + [ТекстЕще] + + + Расшифровка + + + + + + 53 + + + 1 + + 47 + + + ru + Свернуть + + + Расшифровка + + + + + + 55 + + 48 + + 1 + + 12 + + + + + + 57 + + 49 + + 1 + + 50 + + + + + true + 6 + 58 + 58 + + 2 + 1 + 7 + + + 3 + 1 + 7 + + + 4 + 1 + 7 + + + 5 + 2 + 4 + + + 5 + 7 + 1 + + + 6 + 1 + 7 + + + 7 + 1 + 7 + + + 8 + 1 + 7 + + + 9 + 1 + 7 + + + 10 + 1 + 7 + + + 11 + 1 + 7 + + + 12 + 2 + 6 + + + 13 + 2 + 6 + + + 14 + 1 + 7 + + + 15 + 1 + 7 + + + 16 + 1 + 7 + + + 17 + 1 + 7 + + + 18 + 1 + 7 + + + 19 + 1 + 7 + + + 20 + 1 + 7 + + + 21 + 1 + 7 + + + 22 + 1 + 7 + + + 23 + 1 + 7 + + + 24 + 1 + 7 + + + 25 + 1 + 7 + + + 26 + 1 + 7 + + + 27 + 1 + 7 + + + 28 + 1 + 7 + + + 29 + 1 + 4 + + + 29 + 7 + 1 + + + 30 + 1 + 4 + + + 30 + 7 + 1 + + + 31 + 1 + 4 + + + 31 + 7 + 1 + + + 32 + 1 + 4 + + + 32 + 7 + 1 + + + 33 + 1 + 4 + + + 33 + 7 + 1 + + + 34 + 1 + 4 + + + 34 + 7 + 1 + + + 35 + 1 + 4 + + + 35 + 7 + 1 + + + 36 + 1 + 4 + + + 36 + 7 + 1 + + + 37 + 1 + 4 + + + 37 + 7 + 1 + + + 38 + 1 + 4 + + + 38 + 7 + 1 + + + 39 + 1 + 7 + + + 40 + 1 + 7 + + + 41 + 2 + 6 + + + 42 + 2 + 6 + + + 43 + 1 + 7 + + + 51 + 1 + 7 + + + 53 + 1 + 7 + + + 55 + 1 + 7 + + + 57 + 1 + 7 + + + ВидыДеятельности + + Rows + 12 + 12 + -1 + -1 + 7bead1f9-0aca-4731-a3cf-56abe96e686e + + + + ДействующаяОрганизация + + Rows + 3 + 3 + -1 + -1 + + + + Еще + + Rows + 51 + 51 + -1 + -1 + + + + ЕщеВидыДеятельности + + Rows + 13 + 13 + -1 + -1 + 7bead1f9-0aca-4731-a3cf-56abe96e686e + + + + ЕщеИзмененияВРеестре + + Rows + 42 + 42 + -1 + -1 + 3e612652-6c5e-40c7-81e3-923eea19e77c + + + + ЕщеКонтакты + + Rows + 24 + 24 + -1 + -1 + + + + ЕщеЛицензии + + Rows + 15 + 15 + -1 + -1 + 28fabb70-5f56-4096-8f9b-5eaabd431556 + + + + ЕщеОрганизации + + Rows + 19 + 19 + -1 + -1 + + + + ЕщеОрганизацииБезРасшифровки + + Rows + 20 + 20 + -1 + -1 + + + + ЕщеОрганизацииГдеУчредитель + + Rows + 37 + 37 + -1 + -1 + e17a4de9-0b5e-41dd-adec-00d146f6da65 + + + + ЕщеОрганизацииГдеУчредительБезРасшифровки + + Rows + 38 + 38 + -1 + -1 + e17a4de9-0b5e-41dd-adec-00d146f6da65 + + + + ЕщеПодразделения + + Rows + 40 + 40 + -1 + -1 + + + + ЕщеРасчетныеСчета + + Rows + 10 + 10 + -1 + -1 + + + + ЕщеУчредители + + Rows + 30 + 30 + -1 + -1 + e17a4de9-0b5e-41dd-adec-00d146f6da65 + + + + ЕщеУчредителиБезРасшифровки + + Rows + 32 + 32 + -1 + -1 + e17a4de9-0b5e-41dd-adec-00d146f6da65 + + + + ЕщеУчрежденныеФирмы + + Rows + 34 + 34 + -1 + -1 + e17a4de9-0b5e-41dd-adec-00d146f6da65 + + + + ЕщеУчрежденныеФирмыБезРасшифровки + + Rows + 36 + 36 + -1 + -1 + e17a4de9-0b5e-41dd-adec-00d146f6da65 + + + + ИзмененияВРеестре + + Rows + 41 + 41 + -1 + -1 + 3e612652-6c5e-40c7-81e3-923eea19e77c + + + + ИзмененияВРеестреОписание + + Rows + 43 + 43 + -1 + -1 + + + + Контакты + + Rows + 23 + 23 + -1 + -1 + + + + Лицензии + + Rows + 14 + 14 + -1 + -1 + 28fabb70-5f56-4096-8f9b-5eaabd431556 + + + + ЛицензииОписание + + Rows + 16 + 16 + -1 + -1 + 28fabb70-5f56-4096-8f9b-5eaabd431556 + + + + Наименование + + Rows + 0 + 1 + -1 + -1 + 42fbdf9a-63ec-425e-9de0-9eb1ac97b574 + + + + НедействующаяОрганизация + + Rows + 4 + 4 + -1 + -1 + + + + Подразделения + + Rows + 39 + 39 + -1 + -1 + + + + ПочтовыйАдрес + + Rows + 22 + 22 + -1 + -1 + + + + Предприниматель + + Rows + 28 + 28 + -1 + -1 + + + + Разделитель + + Rows + 55 + 55 + -1 + -1 + + + + РазделительСтрокСписка + + Rows + 57 + 57 + -1 + -1 + + + + РасчетныеСчета + + Rows + 9 + 9 + -1 + -1 + + + + РасчетныеСчетаРеквизиты + + Rows + 11 + 11 + -1 + -1 + + + + Регистрация + + Rows + 2 + 2 + -1 + -1 + + + + РегистрацияВГосОрганах + + Rows + 5 + 5 + -1 + -1 + fe57ae9e-ae73-4776-bd05-913cd17283da + + + + РеквизитыПредпринимателя + + Rows + 8 + 8 + -1 + -1 + + + + РеквизитыЮридическогоЛица + + Rows + 6 + 7 + -1 + -1 + + + + Руководитель + + Rows + 26 + 27 + -1 + -1 + + + + Свернуть + + Rows + 53 + 53 + -1 + -1 + + + + СколькоЕщеОрганизаций + + Rows + 18 + 18 + -1 + -1 + + + + СтатусОрганизации + + Rows + 21 + 21 + -1 + -1 + + + + УставныйКапитал + + Rows + 25 + 25 + -1 + -1 + + + + Учредители + + Rows + 29 + 29 + -1 + -1 + e17a4de9-0b5e-41dd-adec-00d146f6da65 + + + + УчредителиБезРасшифровки + + Rows + 31 + 31 + -1 + -1 + e17a4de9-0b5e-41dd-adec-00d146f6da65 + + + + УчрежденныеФирмы + + Rows + 33 + 33 + -1 + -1 + e17a4de9-0b5e-41dd-adec-00d146f6da65 + + + + УчрежденныеФирмыБезРасшифровки + + Rows + 35 + 35 + -1 + -1 + e17a4de9-0b5e-41dd-adec-00d146f6da65 + + + + ЮридическийАдрес + + Rows + 17 + 17 + -1 + -1 + + + + Portrait + 100 + true + 1 + 1 + 1000 + 1000 + 1000 + 1000 + 1000 + 1000 + false + false + \\mars.solar.local\PRN-D9-4L-PCL6 + 9 + 15 + 0 + 0 + None + Auto + + + + + + + + + + + + 187 + + + 120 + + + 811 + + + 98 + + + 95 + + + 72 + + + 51 + + + 89 + + + 125 + + + 0 + Wrap + Parameter + + + 1 + Left + Wrap + Parameter + + + 1 + + + 2 + + + 3 + Template + + + 4 + Top + style:ЦветТекстаКонтрагентаДействующего + Wrap + Parameter + + + 1 + Top + style:ЦветТекстаНекорректногоКонтрагента + Wrap + Parameter + + + 4 + 72 + Top + Wrap + Parameter + + + 1 + Top + + + 4 + 72 + Template + + + 1 + 72 + + + 1 + 89 + + + 3 + 72 + Wrap + Parameter + + + Top + + + 1 + 72 + Wrap + Parameter + + + 2 + Top + + + 3 + Top + Auto + Parameter + + + 3 + 72 + Top + Wrap + Parameter + + + 1 + 72 + Top + Auto + Parameter + + + 1 + Top + Wrap + Parameter + + + 2 + 72 + Wrap + Parameter + + + 3 + Wrap + Parameter + + + 1 + 72 + #1C55AE + Wrap + Parameter + + + 5 + 72 + Wrap + Parameter + + + 1 + 120 + + + 1 + Top + Wrap + + + 3 + 72 + Top + #1C55AE + Wrap + Parameter + + + 3 + 72 + Right + Top + Wrap + Parameter + + + + 3 + 72 + Right + Top + Wrap + Parameter + + + 1 + 72 + Top + #1C55AE + Wrap + Parameter + + + 6 + 72 + Right + Top + Wrap + Parameter + + + + 6 + 72 + Right + Top + Wrap + Parameter + + + 1 + 72 + Top + Wrap + Parameter + + + 3 + Top + Wrap + Parameter + + + 1 + 72 + Top + + + 1 + 63 + Top + + + 7 + auto + Template + true + + + 7 + auto + true + + + 1 + 0 + + + 8 + 0 + + + 8 + + \ No newline at end of file diff --git a/SSL/src/Reports/ДосьеКонтрагента/ДосьеКонтрагента.mdo b/SSL/src/Reports/ДосьеКонтрагента/ДосьеКонтрагента.mdo new file mode 100644 index 000000000..79c338a26 --- /dev/null +++ b/SSL/src/Reports/ДосьеКонтрагента/ДосьеКонтрагента.mdo @@ -0,0 +1,30 @@ + + + + + + + ДосьеКонтрагента + + ru + Досье контрагента + + true + Report.ДосьеКонтрагента.Form.Форма + + Форма + + ru + Форма + + PersonalComputer + MobileDevice + + + Макет + + ru + Макет + + + diff --git a/SSL/src/Reports/ЗависшиеЗадачи/Help/ru.html b/SSL/src/Reports/ЗависшиеЗадачи/Help/ru.html index dc41c509a..1e78daa56 100644 --- a/SSL/src/Reports/ЗависшиеЗадачи/Help/ru.html +++ b/SSL/src/Reports/ЗависшиеЗадачи/Help/ru.html @@ -11,4 +11,4 @@ \ No newline at end of file + \ No newline at end of file diff --git a/SSL/src/Reports/ЗависшиеЗадачи/ManagerModule.bsl b/SSL/src/Reports/ЗависшиеЗадачи/ManagerModule.bsl index 5657b85b3..e0c316191 100644 --- a/SSL/src/Reports/ЗависшиеЗадачи/ManagerModule.bsl +++ b/SSL/src/Reports/ЗависшиеЗадачи/ManagerModule.bsl @@ -1,6 +1,6 @@ #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда -#Область СлужебныйПрограммныйИнтерфейс +#Область ПрограммныйИнтерфейс // Настройки размещения в панели отчетов. // diff --git a/SSL/src/Reports/Задания/Help/ru.html b/SSL/src/Reports/Задания/Help/ru.html index 78065a6c9..92dcf5c25 100644 --- a/SSL/src/Reports/Задания/Help/ru.html +++ b/SSL/src/Reports/Задания/Help/ru.html @@ -10,4 +10,4 @@ \ No newline at end of file + \ No newline at end of file diff --git a/SSL/src/Reports/Задания/ManagerModule.bsl b/SSL/src/Reports/Задания/ManagerModule.bsl index 3854b1855..06639d66b 100644 --- a/SSL/src/Reports/Задания/ManagerModule.bsl +++ b/SSL/src/Reports/Задания/ManagerModule.bsl @@ -1,6 +1,6 @@ #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда -#Область СлужебныйПрограммныйИнтерфейс +#Область ПрограммныйИнтерфейс // Настройки размещения в панели отчетов. // diff --git a/SSL/src/Reports/Задачи/Help/ru.html b/SSL/src/Reports/Задачи/Help/ru.html index 73dca8997..1918f5ac3 100644 --- a/SSL/src/Reports/Задачи/Help/ru.html +++ b/SSL/src/Reports/Задачи/Help/ru.html @@ -15,4 +15,4 @@ \ No newline at end of file + \ No newline at end of file diff --git a/SSL/src/Reports/Задачи/ManagerModule.bsl b/SSL/src/Reports/Задачи/ManagerModule.bsl index 2bc9a3d4d..f556d404d 100644 --- a/SSL/src/Reports/Задачи/ManagerModule.bsl +++ b/SSL/src/Reports/Задачи/ManagerModule.bsl @@ -1,6 +1,6 @@ #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда -#Область СлужебныйПрограммныйИнтерфейс +#Область ПрограммныйИнтерфейс // Настройки размещения в панели отчетов. // diff --git a/SSL/src/Reports/ЗадачиИстекающиеНаДату/Help/ru.html b/SSL/src/Reports/ЗадачиИстекающиеНаДату/Help/ru.html index 3b43c4d72..b9fc46c51 100644 --- a/SSL/src/Reports/ЗадачиИстекающиеНаДату/Help/ru.html +++ b/SSL/src/Reports/ЗадачиИстекающиеНаДату/Help/ru.html @@ -8,4 +8,4 @@ \ No newline at end of file + \ No newline at end of file diff --git a/SSL/src/Reports/ЗадачиИстекающиеНаДату/ManagerModule.bsl b/SSL/src/Reports/ЗадачиИстекающиеНаДату/ManagerModule.bsl index 9f516cd85..ead5e364e 100644 --- a/SSL/src/Reports/ЗадачиИстекающиеНаДату/ManagerModule.bsl +++ b/SSL/src/Reports/ЗадачиИстекающиеНаДату/ManagerModule.bsl @@ -1,6 +1,6 @@ #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда -#Область СлужебныйПрограммныйИнтерфейс +#Область ПрограммныйИнтерфейс // Настройки размещения в панели отчетов. // diff --git a/SSL/src/Reports/ИспользуемыеВнешниеРесурсы/ManagerModule.bsl b/SSL/src/Reports/ИспользуемыеВнешниеРесурсы/ManagerModule.bsl index 0b046caf8..9b2a25058 100644 --- a/SSL/src/Reports/ИспользуемыеВнешниеРесурсы/ManagerModule.bsl +++ b/SSL/src/Reports/ИспользуемыеВнешниеРесурсы/ManagerModule.bsl @@ -1,6 +1,6 @@ #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда -#Область СлужебныйПрограммныйИнтерфейс +#Область ПрограммныйИнтерфейс // Настройки размещения в панели отчетов. // @@ -406,9 +406,10 @@ Результат.Вставить("FileSystemAccess", 1); Результат.Вставить("CreateComObject", 2); Результат.Вставить("AttachAddin", 3); - Результат.Вставить("RunApplication", 4); - Результат.Вставить("InternetResourceAccess", 5); - Результат.Вставить("ExternalModulePrivilegedModeAllowed", 6); + Результат.Вставить("ExternalModule", 4); + Результат.Вставить("RunApplication", 5); + Результат.Вставить("InternetResourceAccess", 6); + Результат.Вставить("ExternalModulePrivilegedModeAllowed", 7); Возврат Новый ФиксированнаяСтруктура(Результат); diff --git a/SSL/src/Reports/ИспользуемыеВнешниеРесурсы/ObjectModule.bsl b/SSL/src/Reports/ИспользуемыеВнешниеРесурсы/ObjectModule.bsl index 15577c18d..c5e20346f 100644 --- a/SSL/src/Reports/ИспользуемыеВнешниеРесурсы/ObjectModule.bsl +++ b/SSL/src/Reports/ИспользуемыеВнешниеРесурсы/ObjectModule.bsl @@ -1,13 +1,17 @@ #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда -#Область ОбработчикиСобытийОбъекта +#Область ПрограммныйИнтерфейс // Настройки общей формы отчета подсистемы "Варианты отчетов". // // Параметры: -// Форма - УправляемаяФорма - Форма отчета. -// КлючВарианта - Строка - Имя предопределенного варианта отчета или уникальный идентификатор пользовательского. -// Настройки - Структура - см. возвращаемое значение ОтчетыКлиентСервер.ПолучитьНастройкиОтчетаПоУмолчанию(). +// Форма - УправляемаяФорма, Неопределено - Форма отчета или форма настроек отчета. +// Неопределено когда вызов без контекста. +// КлючВарианта - Строка, Неопределено - Имя предопределенного +// или уникальный идентификатор пользовательского варианта отчета. +// Неопределено когда вызов без контекста. +// Настройки - Структура - см. возвращаемое значение +// ОтчетыКлиентСервер.ПолучитьНастройкиОтчетаПоУмолчанию(). // Процедура ОпределитьНастройкиФормы(Форма, КлючВарианта, Настройки) Экспорт @@ -16,6 +20,10 @@ КонецПроцедуры +#КонецОбласти + +#Область ОбработчикиСобытийОбъекта + // Вызывается при выполнении отчета с помощью метода СкомпоноватьРезультат(). // // Параметры: diff --git a/SSL/src/Reports/ИспользуемыеВнешниеРесурсы/Templates/ПредставленияРазрешений/Template.mxlx b/SSL/src/Reports/ИспользуемыеВнешниеРесурсы/Templates/ПредставленияРазрешений/Template.mxlx index 13789a975..a05453975 100644 --- a/SSL/src/Reports/ИспользуемыеВнешниеРесурсы/Templates/ПредставленияРазрешений/Template.mxlx +++ b/SSL/src/Reports/ИспользуемыеВнешниеРесурсы/Templates/ПредставленияРазрешений/Template.mxlx @@ -769,15 +769,41 @@ 25 - 30 + 8 - 16 + 9 - 31 + 21 + + + ru + • Расширения конфигурации ([Количество]): + + + + + + + 30 + + + + + 4 + + + + + 5 + + + + + 6 @@ -785,15 +811,33 @@ 26 - 30 + 8 - 16 + 9 31 + + + ru + Расширение: + + + + + + 4 + + 32 + + + ru + Контрольная сумма + + @@ -804,18 +848,20 @@ 8 - 16 + 9 - 32 - - - ru - • Установка привилегированного режима (программному модулю будет разрешено программное выполнение операций с данными, для которых недостаточно прав доступа текущего пользователя программы) - - + 33 + Name + + + + 4 + + 34 + Hash @@ -858,6 +904,96 @@ 29 + + 35 + + + 16 + + + + + 36 + + + + + + 30 + + 35 + + + 16 + + + + + 36 + + + + + + 31 + + 8 + + + 16 + + + + + 37 + + + ru + • Установка привилегированного режима (программному модулю будет разрешено программное выполнение операций с данными, для которых недостаточно прав доступа текущего пользователя программы) + + + + + + + + 32 + + 8 + + + 9 + + + + + 13 + + + + + 8 + + + + + 8 + + + + + 8 + + + + + 8 + + + + + + 33 8 @@ -873,9 +1009,9 @@ true - 33 - 30 - 30 + 38 + 34 + 34 1 2 @@ -992,12 +1128,37 @@ 1 - 27 + 25 1 4 - 29 + 26 + 1 + 2 + + + 26 + 4 + 1 + + + 27 + 1 + 2 + + + 27 + 4 + 1 + + + 31 + 1 + 4 + + + 33 1 4 @@ -1022,7 +1183,7 @@ - ГруппаExternalModulePrivilegedModeAllowed + ГруппаExternalModule Rows 25 @@ -1031,6 +1192,16 @@ -1 + + ГруппаExternalModulePrivilegedModeAllowed + + Rows + 29 + 29 + -1 + -1 + + ГруппаFileSystemAccess @@ -1065,8 +1236,8 @@ Отступ Rows - 29 - 29 + 33 + 33 -1 -1 @@ -1102,7 +1273,7 @@ - СтрокаExternalModulePrivilegedModeAllowed + СтрокаExternalModule Rows 27 @@ -1111,6 +1282,16 @@ -1 + + СтрокаExternalModulePrivilegedModeAllowed + + Rows + 31 + 31 + -1 + -1 + + СтрокаFileSystemAccess @@ -1172,7 +1353,7 @@ - ШапкаExternalModulePrivilegedModeAllowed + ШапкаExternalModule Rows 26 @@ -1181,6 +1362,16 @@ -1 + + ШапкаExternalModulePrivilegedModeAllowed + + Rows + 30 + 30 + -1 + -1 + + ШапкаFileSystemAccess @@ -1383,6 +1574,40 @@ + + 0 + 183 + + + 0 + 0 + 0 + 0 + 170 + style:ReportHeaderBackColor + + + 0 + 0 + 136 + style:ReportHeaderBackColor + + + 0 + 0 + 0 + 0 + 170 + Parameter + + + 0 + 0 + 136 + Wrap + Parameter + false + 0 6 diff --git a/SSL/src/Reports/ИстекающиеСогласияНаОбработкуПерсональныхДанных/Help/ru.html b/SSL/src/Reports/ИстекающиеСогласияНаОбработкуПерсональныхДанных/Help/ru.html new file mode 100644 index 000000000..7c1dcdd7a --- /dev/null +++ b/SSL/src/Reports/ИстекающиеСогласияНаОбработкуПерсональныхДанных/Help/ru.html @@ -0,0 +1,15 @@ + +

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

      +

      Отображается список согласий, срок действия которых попадает в выбранный период.

      +

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

      +

      Производится отбор по организации.

      +

      Отражаются поля:

      + +

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

      +

      См. также:

      + \ No newline at end of file diff --git a/SSL/src/Reports/ИстекающиеСогласияНаОбработкуПерсональныхДанных/ManagerModule.bsl b/SSL/src/Reports/ИстекающиеСогласияНаОбработкуПерсональныхДанных/ManagerModule.bsl new file mode 100644 index 000000000..dab175b77 --- /dev/null +++ b/SSL/src/Reports/ИстекающиеСогласияНаОбработкуПерсональныхДанных/ManagerModule.bsl @@ -0,0 +1,31 @@ +#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда + +#Область ПрограммныйИнтерфейс + +// Настройки размещения в панели отчетов. +// +// Параметры: +// Настройки - Коллекция - Используется для описания настроек отчетов и вариантов +// см. описание к ВариантыОтчетов.ДеревоНастроекВариантовОтчетовКонфигурации(). +// НастройкиОтчета - СтрокаДереваЗначений - Настройки размещения всех вариантов отчета. +// См. "Реквизиты для изменения" функции ВариантыОтчетов.ДеревоНастроекВариантовОтчетовКонфигурации(). +// +// Описание: +// См. ВариантыОтчетовПереопределяемый.НастроитьВариантыОтчетов(). +// +// Вспомогательные методы: +// НастройкиВарианта = ВариантыОтчетов.ОписаниеВарианта(Настройки, НастройкиОтчета, "<ИмяВарианта>"); +// ВариантыОтчетов.УстановитьРежимВыводаВПанеляхОтчетов(Настройки, НастройкиОтчета, Истина/Ложь); // Отчет +// поддерживает только этот режим. +// +Процедура НастроитьВариантыОтчета(Настройки, НастройкиОтчета) Экспорт + МодульВариантыОтчетов = ОбщегоНазначения.ОбщийМодуль("ВариантыОтчетов"); + НастройкиОтчета.Описание = НСтр("ru = 'Согласия на обработку персональных данных, срок действия которых истекает.'"); + + НастройкиВарианта = МодульВариантыОтчетов.ОписаниеВарианта(Настройки, НастройкиОтчета, "ИстекающиеСогласия"); + НастройкиВарианта.Описание = НСтр("ru = 'Согласия, срок действия которых истекает в заданном периоде.'"); +КонецПроцедуры + +#КонецОбласти + +#КонецЕсли \ No newline at end of file diff --git a/SSL/src/Reports/ИстекающиеСогласияНаОбработкуПерсональныхДанных/ObjectModule.bsl b/SSL/src/Reports/ИстекающиеСогласияНаОбработкуПерсональныхДанных/ObjectModule.bsl new file mode 100644 index 000000000..e69de29bb diff --git a/SSL/src/Reports/ИстекающиеСогласияНаОбработкуПерсональныхДанных/Templates/ОсновнаяСхемаКомпоновкиДанных/Template.dcs b/SSL/src/Reports/ИстекающиеСогласияНаОбработкуПерсональныхДанных/Templates/ОсновнаяСхемаКомпоновкиДанных/Template.dcs new file mode 100644 index 000000000..a4e663d94 --- /dev/null +++ b/SSL/src/Reports/ИстекающиеСогласияНаОбработкуПерсональныхДанных/Templates/ОсновнаяСхемаКомпоновкиДанных/Template.dcs @@ -0,0 +1,205 @@ + + + + ИсточникДанных1 + Local + + + Согласия + + СрокДействия + СрокДействия + + + Субъект + Субъект + + + Организация + Организация + + + ДатаПолучения + ДатаПолучения + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Дата получения</v8:content> + </v8:item> + + + + ДокументОснование + ДокументОснование + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Документ основание</v8:content> + </v8:item> + + + ИсточникДанных1 + ВЫБРАТЬ РАЗРЕШЕННЫЕ + Согласия.Период КАК ДатаПолучения, + Согласия.Регистратор КАК ДокументОснование, + Согласия.Организация, + Согласия.Субъект, + Согласия.СрокДействия +ИЗ + РегистрСведений.СогласияНаОбработкуПерсональныхДанных.СрезПоследних({(&ДатаОкончания)}, ) КАК Согласия +{ГДЕ + (Согласия.СрокДействия >= &ДатаНачала + И Согласия.СрокДействия <= &ДатаОкончания)} + + + Период + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Период</v8:content> + </v8:item> + + + v8:StandardPeriod + + + Custom + 0001-01-01T00:00:00 + 0001-01-01T00:00:00 + + false + + + ДатаНачала + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Дата начала</v8:content> + </v8:item> + + + xs:dateTime + + DateTime + + + 0001-01-01T00:00:00 + true + &Период.ДатаНачала + + + ДатаОкончания + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Дата окончания</v8:content> + </v8:item> + + + xs:dateTime + + DateTime + + + 0001-01-01T00:00:00 + true + &Период.ДатаОкончания + + + ИстекающиеСогласия + + + ru + Согласия на обработку персональных данных, срок действия которых истекает + + + + + + Субъект + + + ДатаПолучения + + + ДокументОснование + + + СрокДействия + + + + + false + Организация + Equal + d0cb8406-07b5-42b2-b8f4-d36f40880ac3 + + + + + false + Период + + NextQuarter + + 27289ce4-3f55-49a6-9001-1afb3a4ab39c + + + + + СрокДействия + Asc + + + + + ВыводитьЗаголовок + DontOutput + + + Заголовок + + + ru + Согласия на обработку персональных данных, срок действия которых истекает + + + + + ВыводитьПараметрыДанных + DontOutput + + + ВыводитьОтбор + DontOutput + + + + + + Организация + Items + None + 0001-01-01T00:00:00 + 0001-01-01T00:00:00 + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/SSL/src/Reports/ИстекающиеСогласияНаОбработкуПерсональныхДанных/ИстекающиеСогласияНаОбработкуПерсональныхДанных.mdo b/SSL/src/Reports/ИстекающиеСогласияНаОбработкуПерсональныхДанных/ИстекающиеСогласияНаОбработкуПерсональныхДанных.mdo new file mode 100644 index 000000000..667e0ccf8 --- /dev/null +++ b/SSL/src/Reports/ИстекающиеСогласияНаОбработкуПерсональныхДанных/ИстекающиеСогласияНаОбработкуПерсональныхДанных.mdo @@ -0,0 +1,33 @@ + + + + + + + ИстекающиеСогласияНаОбработкуПерсональныхДанных + + ru + Истекающие согласия на обработку персональных данных + + true + Report.ИстекающиеСогласияНаОбработкуПерсональныхДанных.Template.ОсновнаяСхемаКомпоновкиДанных + SettingsStorage.ХранилищеВариантовОтчетов + true + + + ru + + + + ru + Согласия на обработку персональных данных, срок действия которых истекает в выбранном периоде + + + ОсновнаяСхемаКомпоновкиДанных + + ru + Основная схема компоновки данных + + DataCompositionSchema + + diff --git a/SSL/src/Reports/МестаИспользованияСсылок/Forms/МестаИспользования/Form.form b/SSL/src/Reports/МестаИспользованияСсылок/Forms/МестаИспользования/Form.form deleted file mode 100644 index 171faafdf..000000000 --- a/SSL/src/Reports/МестаИспользованияСсылок/Forms/МестаИспользования/Form.form +++ /dev/null @@ -1,619 +0,0 @@ - - - - <key>ru</key> - <value>Места использования</value> - - - ГруппаВарианта - 32 - - НаименованиеТекущегоВарианта - 63 - true - true - - true - - - НаименованиеТекущегоВарианта - - Left - - НаименованиеТекущегоВариантаExtendedTooltip - 65 - Label - true - true - - Left - - - - НаименованиеТекущегоВариантаКонтекстноеМеню - 64 - true - - InputField - true - Enter - true - Left - true - - true - true - true - true - true - true - Normal - - - - ВыбратьВариантКнопка - 37 - true - true - - true - - false - - ВыбратьВариантКнопкаExtendedTooltip - 38 - Label - true - true - - Left - - - UsualButton - Form.StandardCommand.LoadVariant - Normal - Auto - true - true - UserCmds - Auto - - true - true - - true - - - ГруппаВариантаExtendedTooltip - 33 - Label - true - true - - Left - - - UsualGroup - - Auto - true - true - Auto - Auto - - - - ОсновнаяКоманднаяПанель - 39 - - СформироватьОтчет - 41 - true - true - - true - - false - - СформироватьОтчетExtendedTooltip - 42 - Label - true - true - - Left - - - Form.Command.Сформировать - Auto - true - true - true - UserCmds - Auto - - - Настройка - 43 - true - true - - true - - false - - НастройкаExtendedTooltip - 44 - Label - true - true - - Left - - - Form.StandardCommand.ReportSettings - Normal - Auto - true - true - UserCmds - Auto - - - ВыбратьНастройку - 45 - true - true - - true - - false - - ВыбратьНастройкуExtendedTooltip - 46 - Label - true - true - - Left - - - Form.StandardCommand.LoadReportSettings - Normal - Auto - true - true - UserCmds - Auto - InAdditionalSubmenu - - - СохранитьНастройку - 47 - true - true - - true - - false - - СохранитьНастройкуExtendedTooltip - 48 - Label - true - true - - Left - - - Form.StandardCommand.SaveReportSettings - Normal - Auto - true - true - UserCmds - Auto - InAdditionalSubmenu - - - СтандартнаяНастройка - 49 - true - true - - true - - false - - СтандартнаяНастройкаExtendedTooltip - 50 - Label - true - true - - Left - - - Form.StandardCommand.StandardSettings - Normal - Auto - true - true - UserCmds - Auto - InAdditionalSubmenu - - - НовоеОкно - 51 - true - true - - true - - false - - НовоеОкноExtendedTooltip - 52 - Label - true - true - - Left - - - Form.StandardCommand.NewWindow - Normal - Auto - true - true - UserCmds - Auto - InAdditionalSubmenu - - - ИзменитьВариант - 53 - true - true - - true - - false - - ИзменитьВариантExtendedTooltip - 54 - Label - true - true - - Left - - - Form.StandardCommand.ChangeVariant - Normal - Auto - true - true - UserCmds - Auto - InAdditionalSubmenu - - - ВыбратьВариант - 55 - true - true - - true - - false - - ВыбратьВариантExtendedTooltip - 56 - Label - true - true - - Left - - - Form.StandardCommand.LoadVariant - Normal - Auto - true - true - UserCmds - Auto - InAdditionalSubmenu - - - СохранитьВариант - 57 - true - true - - true - - false - - СохранитьВариантExtendedTooltip - 58 - Label - true - true - - Left - - - Form.StandardCommand.SaveVariant - Normal - Auto - true - true - UserCmds - Auto - InAdditionalSubmenu - - - ИзменитьФорму - 59 - true - true - - true - - false - - ИзменитьФормуExtendedTooltip - 60 - Label - true - true - - Left - - - Form.StandardCommand.CustomizeForm - Normal - Auto - true - true - UserCmds - Auto - InAdditionalSubmenu - - - Справка - 61 - true - true - - true - - false - - СправкаExtendedTooltip - 62 - Label - true - true - - Left - - - Form.StandardCommand.Help - Normal - Auto - true - true - UserCmds - Auto - InCommandBarAndInAdditionalSubmenu - - true - true - - true - - - <key>ru</key> - <value>Основная командная панель</value> - - - ru - Основная командная панель - - - ОсновнаяКоманднаяПанельРасширеннаяПодсказка - 40 - Label - true - true - - Left - - - CommandBar - - Left - - - - Результат - 1 - true - true - - true - - - Результат - - None - - РезультатРасширеннаяПодсказка - 3 - Label - true - true - - Left - - - - РезультатКонтекстноеМеню - 2 - true - - SpreadsheetDocumentField - Enter - true - Left - true - - 50 - true - 10 - true - true - true - Special - ScrollAlways - ScrollAlways - Always - Auto - true - true - true - - - Top - true - - ФормаКоманднаяПанель - -1 - Left - - - OnOpen - ПриОткрытии - - - OnCreateAtServer - ПриСозданииНаСервере - - DontBlock - true - true - Vertical - true - true - true - auto - true - - Отчет - 1 - - ReportObject.МестаИспользованияСсылок - - - true - - - true - -
      true
      -
      - - ДанныеРасшифровки - 3 - - String - - - - true - - - true - - - - Результат - - <key>ru</key> - <value>Результат</value> - - 4 - - SpreadsheetDocument - - - true - - - true - - - - - НаименованиеТекущегоВарианта - - <key>ru</key> - <value>Вариант отчета</value> - - 2 - - String - - - - true - - - true - - - - Сформировать - - <key>ru</key> - <value>Сформировать</value> - - 2 - - ru - Сформировать - - - true - - - StdPicture.GenerateReport - - - - Сформировать - - - TextPicture - Auto - Auto - - - НаборСсылок - - - - - - - - Результат - ДанныеРасшифровки - НаименованиеТекущегоВарианта - НастройкаExtendedTooltip - -
      diff --git a/SSL/src/Reports/МестаИспользованияСсылок/Forms/МестаИспользования/Module.bsl b/SSL/src/Reports/МестаИспользованияСсылок/Forms/МестаИспользования/Module.bsl deleted file mode 100644 index 2b39f98f6..000000000 --- a/SSL/src/Reports/МестаИспользованияСсылок/Forms/МестаИспользования/Module.bsl +++ /dev/null @@ -1,105 +0,0 @@ -// Форма принимает параметры: -// -// НаборСсылок - Массив, СписокЗначений - набор элементов для анализа при открытии. Может быть коллекцией -// элементов с полем "Ссылка". Если есть элементы, то отчет формируется -// автоматически при открытии. -// - -#Область ОбработчикиСобытийФормы - -&НаСервере -Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) - Если Параметры.Свойство("АвтоТест") Тогда - Возврат; - КонецЕсли; - - ИнициализироватьПользовательскиеНастройкиОтчета(Параметры); - - // И перекладываем на форму - Параметры.ПользовательскиеНастройки = Отчет.КомпоновщикНастроек.ПользовательскиеНастройки; -КонецПроцедуры - -&НаКлиенте -Процедура ПриОткрытии(Отказ) - Отображение = Элементы.Результат.ОтображениеСостояния; - Отображение.Видимость = Истина; - Отображение.ДополнительныйРежимОтображения = ДополнительныйРежимОтображения.Неактуальность; - Отображение.Картинка = БиблиотекаКартинок.ДлительнаяОперация48; - Отображение.Текст = НСтр("ru = 'Отчет формируется...'"); - - ПодключитьОбработчикОжидания("ЗапуститьФормирование", 0.1, Истина); -КонецПроцедуры - -#КонецОбласти - -#Область ОбработчикиКомандФормы - -&НаКлиенте -Процедура Сформировать(Команда) - - ЗапуститьФормирование(); - -КонецПроцедуры - -#КонецОбласти - -#Область СлужебныеПроцедурыИФункции - -&НаКлиенте -Процедура ЗапуститьФормирование() - - СкомпоноватьРезультат(РежимКомпоновкиРезультата.Фоновый); - -КонецПроцедуры - -// Инициализирует пользовательские настройки компоновщика по переданным параметрам. -// -&НаСервере -Процедура ИнициализироватьПользовательскиеНастройкиОтчета(Знач ПараметрыДанных) - НовыеПараметры = Новый Соответствие; - - // НаборСсылок - НаборСсылок = Новый СписокЗначений; - Если ПараметрыДанных.Свойство("НаборСсылок") Тогда - ТекущийПараметр = ПараметрыДанных.НаборСсылок; - - ТипПараметра = ТипЗнч(ТекущийПараметр); - Если ТипПараметра = Тип("Массив") Тогда - НаборСсылок.ЗагрузитьЗначения(ТекущийПараметр); - - ИначеЕсли ТипПараметра = Тип("СписокЗначений") Тогда - НаборСсылок.ЗагрузитьЗначения(ТекущийПараметр.ВыгрузитьЗначения()); - - Иначе - ЭтоПеречисляемыйТип = Ложь; - Попытка - // Перечисляемый - Для Каждого Элемент Из ТекущийПараметр Цикл - ЭтоПеречисляемыйТип = Истина; - Прервать; - КонецЦикла; - Исключение - ЭтоПеречисляемыйТип = Ложь; - КонецПопытки; - - Если ЭтоПеречисляемыйТип Тогда - Для Каждого Элемент Из ТекущийПараметр Цикл - НаборСсылок.Добавить(Элемент.Ссылка); - КонецЦикла; - КонецЕсли; - КонецЕсли; - - НовыеПараметры.Вставить(Новый ПараметрКомпоновкиДанных("НаборСсылок"), НаборСсылок); - КонецЕсли; - - // Устанавливаем в пользовательские поля. - Для Каждого Элемент Из Отчет.КомпоновщикНастроек.ПользовательскиеНастройки.Элементы Цикл - Значение = НовыеПараметры[Элемент.Параметр]; - Если Значение<>Неопределено Тогда - Элемент.Использование = Истина; - Элемент.Значение = Значение; - КонецЕсли; - КонецЦикла; -КонецПроцедуры - -#КонецОбласти diff --git a/SSL/src/Reports/МестаИспользованияСсылок/ManagerModule.bsl b/SSL/src/Reports/МестаИспользованияСсылок/ManagerModule.bsl index 323e2b71a..1830c5305 100644 --- a/SSL/src/Reports/МестаИспользованияСсылок/ManagerModule.bsl +++ b/SSL/src/Reports/МестаИспользованияСсылок/ManagerModule.bsl @@ -1,6 +1,6 @@ #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда -#Область СлужебныйПрограммныйИнтерфейс +#Область ПрограммныйИнтерфейс // Настройки размещения в панели отчетов. // @@ -22,6 +22,8 @@ МодульВариантыОтчетов = ОбщегоНазначения.ОбщийМодуль("ВариантыОтчетов"); МодульВариантыОтчетов.УстановитьРежимВыводаВПанеляхОтчетов(Настройки, НастройкиОтчета, Ложь); + НастройкиОтчета.ОпределитьНастройкиФормы = Истина; + НастройкиВарианта = МодульВариантыОтчетов.ОписаниеВарианта(Настройки, НастройкиОтчета, "Основной"); НастройкиВарианта.Включен = Ложь; НастройкиВарианта.Описание = НСтр("ru = 'Поиск мест использования объектов приложения.'"); diff --git a/SSL/src/Reports/МестаИспользованияСсылок/ObjectModule.bsl b/SSL/src/Reports/МестаИспользованияСсылок/ObjectModule.bsl index 30f27b5a3..f86b208d4 100644 --- a/SSL/src/Reports/МестаИспользованияСсылок/ObjectModule.bsl +++ b/SSL/src/Reports/МестаИспользованияСсылок/ObjectModule.bsl @@ -1,5 +1,24 @@ #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда +#Область ПрограммныйИнтерфейс + +// Настройки общей формы отчета подсистемы "Варианты отчетов". +// +// Параметры: +// Форма - УправляемаяФорма, Неопределено - Форма отчета или форма настроек отчета. +// Неопределено когда вызов без контекста. +// КлючВарианта - Строка, Неопределено - Имя предопределенного +// или уникальный идентификатор пользовательского варианта отчета. +// Неопределено когда вызов без контекста. +// Настройки - Структура - см. возвращаемое значение +// ОтчетыКлиентСервер.ПолучитьНастройкиОтчетаПоУмолчанию(). +// +Процедура ОпределитьНастройкиФормы(Форма, КлючВарианта, Настройки) Экспорт + Настройки.ФормироватьСразу = Истина; +КонецПроцедуры + +#КонецОбласти + #Область ОбработчикиСобытий Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка) @@ -97,8 +116,7 @@ КонецЦикла; Если ОдинаковыйТип Тогда - Результат = СтрЗаменить(НСтр("ru = 'Места использования %1'"), "%1", - НаборСсылок[0].Значение.Метаданные().Представление() ); + Результат = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Места использования %1'"), НаборСсылок[0].Значение.Метаданные().Представление()); КонецЕсли; КонецЕсли; КонецЕсли; diff --git a/SSL/src/Reports/МестаИспользованияСсылок/МестаИспользованияСсылок.mdo b/SSL/src/Reports/МестаИспользованияСсылок/МестаИспользованияСсылок.mdo index de901f16f..513f40ef8 100644 --- a/SSL/src/Reports/МестаИспользованияСсылок/МестаИспользованияСсылок.mdo +++ b/SSL/src/Reports/МестаИспользованияСсылок/МестаИспользованияСсылок.mdo @@ -10,7 +10,6 @@ Места использования ссылок
      true - Report.МестаИспользованияСсылок.Form.МестаИспользования Report.МестаИспользованияСсылок.Template.ОсновнаяСхемаКомпоновкиДанных SettingsStorage.ХранилищеВариантовОтчетов true @@ -19,15 +18,6 @@ ru
      - - МестаИспользования - - ru - Места использования - - PersonalComputer - MobileDevice - ОсновнаяСхемаКомпоновкиДанных diff --git a/SSL/src/Reports/ОбъемНенужныхФайлов/Help/ru.html b/SSL/src/Reports/ОбъемНенужныхФайлов/Help/ru.html new file mode 100644 index 000000000..f4355e79e --- /dev/null +++ b/SSL/src/Reports/ОбъемНенужныхФайлов/Help/ru.html @@ -0,0 +1,10 @@ + +

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

      +

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

      +

      С помощью кнопки Настройки можно перейти к использованию возможностей более тонкого отбора записей отчета.

      +

      Отбор по владельцу

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

      См. также:

      + \ No newline at end of file diff --git a/SSL/src/Reports/ОбъемНенужныхФайлов/ManagerModule.bsl b/SSL/src/Reports/ОбъемНенужныхФайлов/ManagerModule.bsl new file mode 100644 index 000000000..d488ec90a --- /dev/null +++ b/SSL/src/Reports/ОбъемНенужныхФайлов/ManagerModule.bsl @@ -0,0 +1,33 @@ +#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда + +#Область ПрограммныйИнтерфейс + +// Настройки размещения в панели отчетов. +// +// Параметры: +// Настройки - Коллекция - Используется для описания настроек отчетов и вариантов +// см. описание к ВариантыОтчетов.ДеревоНастроекВариантовОтчетовКонфигурации(). +// НастройкиОтчета - СтрокаДереваЗначений - Настройки размещения всех вариантов отчета. +// См. "Реквизиты для изменения" функции ВариантыОтчетов.ДеревоНастроекВариантовОтчетовКонфигурации(). +// +// Описание: +// См. ВариантыОтчетовПереопределяемый.НастроитьВариантыОтчетов(). +// +// Вспомогательные методы: +// НастройкиВарианта = ВариантыОтчетов.ОписаниеВарианта(Настройки, НастройкиОтчета, "<ИмяВарианта>"); +// ВариантыОтчетов.УстановитьРежимВыводаВПанеляхОтчетов(Настройки, НастройкиОтчета, Истина/Ложь); // Отчет +// поддерживает только этот режим. +// +Процедура НастроитьВариантыОтчета(Настройки, НастройкиОтчета) Экспорт + + МодульВариантыОтчетов = ОбщегоНазначения.ОбщийМодуль("ВариантыОтчетов"); + МодульВариантыОтчетов.УстановитьРежимВыводаВПанеляхОтчетов(Настройки, НастройкиОтчета, Ложь); + + НастройкиВарианта = МодульВариантыОтчетов.ОписаниеВарианта(Настройки, НастройкиОтчета, "ОбъемНенужныхФайловПоВладельцам"); + НастройкиВарианта.Описание = НСтр("ru = 'Позволяет получить информацию об объеме данных, занятых ненужными файлами.'"); + +КонецПроцедуры + +#КонецОбласти + +#КонецЕсли \ No newline at end of file diff --git a/SSL/src/Reports/ОбъемНенужныхФайлов/ObjectModule.bsl b/SSL/src/Reports/ОбъемНенужныхФайлов/ObjectModule.bsl new file mode 100644 index 000000000..d38c20cd1 --- /dev/null +++ b/SSL/src/Reports/ОбъемНенужныхФайлов/ObjectModule.bsl @@ -0,0 +1,244 @@ +#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда + +#Область ОбработчикиСобытий + +Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка) + + НастройкиОчистки = РегистрыСведений.НастройкиОчисткиФайлов.ТекущиеНастройкиОчистки(); + + ТаблицаНенужныхФайлов = Новый ТаблицаЗначений; + ТаблицаНенужныхФайлов.Колонки.Добавить("ВладелецФайла"); + ТаблицаНенужныхФайлов.Колонки.Добавить("ОбъемНенужныхФайлов", Новый ОписаниеТипов("Число")); + + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаСФайлами") Тогда + + НастройкиОчисткиСВерсий = НастройкиОчистки.НайтиСтроки(Новый Структура("ЭтоФайл, ЭтоНастройкаДляЭлементаСправочника", Истина, Ложь)); + + Для Каждого Настройка Из НастройкиОчисткиСВерсий Цикл + + МассивИсключений = Новый Массив; + ДетализированныеНастройки = НастройкиОчистки.НайтиСтроки(Новый Структура( + "ИдентификаторВладельца, ЭтоФайл, ЭтоНастройкаДляЭлементаСправочника", + Настройка.ВладелецФайла, + Истина, + Истина)); + Если ДетализированныеНастройки.Количество() > 0 Тогда + Для Каждого ЭлементИсключение Из ДетализированныеНастройки Цикл + МассивИсключений.Добавить(ЭлементИсключение.ВладелецФайла); + ПолучитьОбъемНенужныхФайлов(ТаблицаНенужныхФайлов, ЭлементИсключение, , Истина); + КонецЦикла; + КонецЕсли; + + ПолучитьОбъемНенужныхФайлов(ТаблицаНенужныхФайлов, Настройка, МассивИсключений, Ложь); + КонецЦикла; + КонецЕсли; + + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ПрисоединенныеФайлы") Тогда + + НастройкиОчисткиБезВерсий = НастройкиОчистки.НайтиСтроки(Новый Структура("ЭтоФайл, ЭтоНастройкаДляЭлементаСправочника", Ложь, Ложь)); + + Для Каждого Настройка Из НастройкиОчисткиБезВерсий Цикл + + МассивИсключений = Новый Массив; + ДетализированныеНастройки = НастройкиОчистки.НайтиСтроки(Новый Структура( + "ИдентификаторВладельца, ЭтоФайл, ЭтоНастройкаДляЭлементаСправочника", + Настройка.ВладелецФайла, + Ложь, + Истина)); + Если ДетализированныеНастройки.Количество() > 0 Тогда + Для Каждого ЭлементИсключение Из ДетализированныеНастройки Цикл + МассивИсключений.Добавить(ЭлементИсключение.ВладелецФайла); + ПолучитьОбъемНенужныхФайлов(ТаблицаНенужныхФайлов, ЭлементИсключение, , Истина); + КонецЦикла; + КонецЕсли; + + ПолучитьОбъемНенужныхФайлов(ТаблицаНенужныхФайлов, Настройка, МассивИсключений, Ложь); + КонецЦикла; + КонецЕсли; + + СтандартнаяОбработка = Ложь; + + ДокументРезультат.Очистить(); + + КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных; + Настройки = КомпоновщикНастроек.ПолучитьНастройки(); + + ИдентификаторыНесуществующихПользователейИБ = Новый Массив; + + ВнешниеНаборыДанных = Новый Структура; + ВнешниеНаборыДанных.Вставить("ОбъемДанныхВсего", ОбъемДанныхВсего()); + ВнешниеНаборыДанных.Вставить("ОбъемНенужныхФайлов", ТаблицаНенужныхФайлов); + + МакетКомпоновки = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных, Настройки, ДанныеРасшифровки); + + ПроцессорКомпоновки = Новый ПроцессорКомпоновкиДанных; + ПроцессорКомпоновки.Инициализировать(МакетКомпоновки, ВнешниеНаборыДанных, ДанныеРасшифровки, Истина); + + ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент; + ПроцессорВывода.УстановитьДокумент(ДокументРезультат); + + ПроцессорВывода.Вывести(ПроцессорКомпоновки); + +КонецПроцедуры + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +Процедура ПолучитьОбъемНенужныхФайлов(ТаблицаНенужныхФайлов, НастройкаОчистки, МассивИсключений = Неопределено, ЭтоНастройкаДляЭлементаСправочника = Ложь) + + Если НастройкаОчистки.Действие = Перечисления.ВариантыОчисткиФайлов.НеОчищать Тогда + Возврат; + КонецЕсли; + + Если МассивИсключений = Неопределено Тогда + МассивИсключений = Новый Массив; + КонецЕсли; + + НенужныеФайлы = ВыбратьДанныеПоПравилу(НастройкаОчистки, МассивИсключений); + + Для Каждого Стр Из НенужныеФайлы Цикл + НоваяСтрока = ТаблицаНенужныхФайлов.Добавить(); + ЗаполнитьЗначенияСвойств(НоваяСтрока, Стр); + КонецЦикла; + +КонецПроцедуры + +Функция ТекстЗапросаДляОчисткиФайлов(ВладелецФайла, Настройка, МассивИсключений, ЭлементИсключение) + + Если Настройка.ЭтоФайл И ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаСФайлами") Тогда + + МодульРаботаСФайламиСлужебный = ОбщегоНазначения.ОбщийМодуль("РаботаСФайламиСлужебный"); + Возврат МодульРаботаСФайламиСлужебный.ТекстЗапросаДляОчисткиФайлов(ВладелецФайла, Настройка, МассивИсключений, ЭлементИсключение, Истина); + + КонецЕсли; + + Если Не Настройка.ЭтоФайл И ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ПрисоединенныеФайлы") Тогда + + МодульПрисоединенныеФайлыСлужебный = ОбщегоНазначения.ОбщийМодуль("ПрисоединенныеФайлыСлужебный"); + Возврат МодульПрисоединенныеФайлыСлужебный.ТекстЗапросаДляОчисткиФайлов(ВладелецФайла, Настройка, МассивИсключений, ЭлементИсключение, Истина); + + КонецЕсли; + +КонецФункции + +Функция ВыбратьДанныеПоПравилу(НастройкаОчистки, МассивИсключений) + + ВременныйКомпоновщикНастроек = Новый КомпоновщикНастроекКомпоновкиДанных; + + ОчищатьПоПравилу = НастройкаОчистки.ПериодОчистки = Перечисления.ПериодОчисткиФайлов.ПоПравилу; + Если ОчищатьПоПравилу Тогда + НастройкиКомпоновщика = НастройкаОчистки.ПравилоОтбора.Получить(); + Если НастройкиКомпоновщика <> Неопределено Тогда + ВременныйКомпоновщикНастроек.ЗагрузитьНастройки(НастройкиКомпоновщика); + КонецЕсли; + КонецЕсли; + + ВременнаяСхемаКомпоновкиДанных = Новый СхемаКомпоновкиДанных; + ИсточникДанных = ВременнаяСхемаКомпоновкиДанных.ИсточникиДанных.Добавить(); + ИсточникДанных.Имя = "ИсточникДанных1"; + ИсточникДанных.ТипИсточникаДанных = "Local"; + + НаборДанных = ВременнаяСхемаКомпоновкиДанных.НаборыДанных.Добавить(Тип("НаборДанныхЗапросСхемыКомпоновкиДанных")); + НаборДанных.Имя = "НаборДанных1"; + НаборДанных.ИсточникДанных = ИсточникДанных.Имя; + + ВременнаяСхемаКомпоновкиДанных.ПоляИтога.Очистить(); + + Если НастройкаОчистки.ЭтоНастройкаДляЭлементаСправочника Тогда + ВладелецФайла = НастройкаОчистки.ИдентификаторВладельца; + ЭлементИсключение = НастройкаОчистки.ВладелецФайла; + Иначе + ВладелецФайла = НастройкаОчистки.ВладелецФайла; + ЭлементИсключение = Неопределено; + КонецЕсли; + + ОчиститьТолькоВерсии = Ложь; + Если НастройкаОчистки.Действие = Перечисления.ВариантыОчисткиФайлов.ОчиститьВерсии Тогда + ОчиститьТолькоВерсии = Истина; + КонецЕсли; + + ВременнаяСхемаКомпоновкиДанных.НаборыДанных[0].Запрос = ТекстЗапросаДляОчисткиФайлов( + ВладелецФайла, + НастройкаОчистки, + МассивИсключений, + ЭлементИсключение); + + Структура = ВременныйКомпоновщикНастроек.Настройки.Структура.Добавить(Тип("ГруппировкаКомпоновкиДанных")); + + ВыбранноеПоле = Структура.Выбор.Элементы.Добавить(Тип("ВыбранноеПолеКомпоновкиДанных")); + ВыбранноеПоле.Поле = Новый ПолеКомпоновкиДанных("ВладелецФайла"); + + ВыбранноеПоле = Структура.Выбор.Элементы.Добавить(Тип("ВыбранноеПолеКомпоновкиДанных")); + ВыбранноеПоле.Поле = Новый ПолеКомпоновкиДанных("ОбъемНенужныхФайлов"); + + ВременныйКомпоновщикНастроек.Инициализировать(Новый ИсточникДоступныхНастроекКомпоновкиДанных(ВременнаяСхемаКомпоновкиДанных)); + + Настройки = ВременныйКомпоновщикНастроек.ПолучитьНастройки(); + + Параметр = ВременныйКомпоновщикНастроек.Настройки.ПараметрыДанных.Элементы.Найти("ТипВладельца"); + Параметр.Значение = ТипЗнч(ВладелецФайла.ЗначениеПустойСсылки); + Параметр.Использование = Истина; + + Если МассивИсключений.Количество() > 0 И Не НастройкаОчистки.ЭтоНастройкаДляЭлементаСправочника Тогда + Параметр = ВременныйКомпоновщикНастроек.Настройки.ПараметрыДанных.Элементы.Найти("МассивИсключений"); + Параметр.Значение = МассивИсключений; + Параметр.Использование = Истина; + КонецЕсли; + + ПараметрТекущаяДата = ВременныйКомпоновщикНастроек.Настройки.ПараметрыДанных.Элементы.Найти("ТекущаяДата"); + Если ПараметрТекущаяДата <> Неопределено Тогда + ПараметрТекущаяДата.Значение = ТекущаяДатаСеанса(); + ПараметрТекущаяДата.Использование = Истина; + КонецЕсли; + + Параметр = ВременныйКомпоновщикНастроек.Настройки.ПараметрыДанных.Элементы.Найти("ПериодОчистки"); + Если Параметр <> Неопределено Тогда + Если НастройкаОчистки.ПериодОчистки = Перечисления.ПериодОчисткиФайлов.СтаршеМесяца Тогда + ЗначениеПериодаОчистки = ДобавитьМесяц(НачалоДня(ТекущаяДатаСеанса()), -1); + ИначеЕсли НастройкаОчистки.ПериодОчистки = Перечисления.ПериодОчисткиФайлов.СтаршеГода Тогда + ЗначениеПериодаОчистки = ДобавитьМесяц(НачалоДня(ТекущаяДатаСеанса()), -12); + ИначеЕсли НастройкаОчистки.ПериодОчистки = Перечисления.ПериодОчисткиФайлов.СтаршеШестиМесяцев Тогда + ЗначениеПериодаОчистки = ДобавитьМесяц(НачалоДня(ТекущаяДатаСеанса()), -6); + КонецЕсли; + Параметр.Значение = ЗначениеПериодаОчистки; + Параметр.Использование = Истина; + КонецЕсли; + + Если НастройкаОчистки.ЭтоНастройкаДляЭлементаСправочника Тогда + Параметр = ВременныйКомпоновщикНастроек.Настройки.ПараметрыДанных.Элементы.Найти("ЭлементИсключение"); + Параметр.Значение = ЭлементИсключение; + Параметр.Использование = Истина; + КонецЕсли; + + КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных; + ПроцессорКомпоновкиДанных = Новый ПроцессорКомпоновкиДанных; + ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВКоллекциюЗначений; + ТаблицаЗначений = Новый ТаблицаЗначений; + + МакетКомпоновкиДанных = КомпоновщикМакета.Выполнить(ВременнаяСхемаКомпоновкиДанных, ВременныйКомпоновщикНастроек.Настройки, , , Тип("ГенераторМакетаКомпоновкиДанныхДляКоллекцииЗначений")); + ПроцессорКомпоновкиДанных.Инициализировать(МакетКомпоновкиДанных); + ПроцессорВывода.УстановитьОбъект(ТаблицаЗначений); + ПроцессорВывода.Вывести(ПроцессорКомпоновкиДанных); + + Возврат ТаблицаЗначений; + +КонецФункции + +Функция ОбъемДанныхВсего() + + УстановитьПривилегированныйРежим(Истина); + + Запрос = Новый Запрос; + + Запрос.Текст = ФайловыеФункцииСлужебный.ТекстЗапросаПолногоОбъемаФайлов(); + + РезультатЗапроса = Запрос.Выполнить(); + + Возврат РезультатЗапроса.Выгрузить(); + +КонецФункции + +#КонецОбласти + +#КонецЕсли \ No newline at end of file diff --git a/SSL/src/Reports/ОбъемНенужныхФайлов/Templates/ОсновнаяСхемаКомпоновкиДанных/Template.dcs b/SSL/src/Reports/ОбъемНенужныхФайлов/Templates/ОсновнаяСхемаКомпоновкиДанных/Template.dcs new file mode 100644 index 000000000..0e25723ce --- /dev/null +++ b/SSL/src/Reports/ОбъемНенужныхФайлов/Templates/ОсновнаяСхемаКомпоновкиДанных/Template.dcs @@ -0,0 +1,274 @@ + + + + ИсточникДанных1 + Local + + + НаборДанных1 + + ВладелецФайла + ВладелецФайла + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Владелец файла</v8:content> + </v8:item> + + + + ОбъемВсего + ОбъемВсего + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Все файлы (Мб)</v8:content> + </v8:item> + + + xs:decimal + + 16 + 2 + Any + + + + + ОбъемНенужныхФайлов + ОбъемНенужныхФайлов + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Ненужные файлы (Мб)</v8:content> + </v8:item> + + + xs:decimal + + 16 + 2 + Nonnegative + + + + + ОбъемДанныхВсего + + ВладелецФайла + ВладелецФайла + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Владелец файла</v8:content> + </v8:item> + + + + ОбъемВсего + ОбъемВсего + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Объем всего</v8:content> + </v8:item> + + + xs:decimal + + 0 + 0 + Nonnegative + + + + ИсточникДанных1 + ОбъемДанныхВсего + + + ОбъемНенужныхФайлов + + ВладелецФайла + ВладелецФайла + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Владелец файла</v8:content> + </v8:item> + + + + ОбъемНенужныхФайлов + ОбъемНенужныхФайлов + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Объем ненужных файлов</v8:content> + </v8:item> + + + xs:decimal + + 0 + 0 + Nonnegative + + + + ИсточникДанных1 + ОбъемНенужныхФайлов + + + + ОбъемНужныхФайлов + ЕстьNull(ОбъемВсего,0) - ЕстьNull(ОбъемНенужныхФайлов, 0) + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Нужные файлы (Мб)</v8:content> + </v8:item> + + + xs:decimal + + 16 + 2 + Any + + + + + ОбъемНенужныхФайлов + Сумма(ОбъемНенужныхФайлов) + ВладелецФайла + ОбщийИтог + + + ОбъемВсего + Сумма(ОбъемВсего) + ВладелецФайла + ОбщийИтог + + + ОбъемНужныхФайлов + Сумма(ОбъемНужныхФайлов) + ВладелецФайла + ОбщийИтог + + + ОбъемНенужныхФайловПоВладельцам + + + ru + Объем ненужных файлов по владельцам (Первые 10) + + + + + + ВладелецФайла + + + ОбъемНенужныхФайлов + + + ОбъемНужныхФайлов + + + + + ОбъемНенужныхФайлов + Desc + + + ОбъемВсего + Desc + + + + + ТипДиаграммы + StackedColumn3D + + ТипДиаграммы.ВидПодписей + Value + + + false + ТипДиаграммы.ОтображатьТаблицуДанных + true + + + + Заголовок + + + ru + Объем ненужных файлов по владельцам (Первые 10) + + + + + + + + + ВладелецФайла + Items + None + 0001-01-01T00:00:00 + 0001-01-01T00:00:00 + + + + + + + + + + + КоличествоЗаписей + 10 + + + + + + + + + + + ВладелецФайла + Items + None + 0001-01-01T00:00:00 + 0001-01-01T00:00:00 + + + + + ОбъемНенужныхФайлов + Desc + + + ВладелецФайла + Asc + + + + + ВладелецФайла + + + ОбъемНенужныхФайлов + + + ОбъемВсего + + + + + + \ No newline at end of file diff --git a/SSL/src/Reports/ОбъемНенужныхФайлов/ОбъемНенужныхФайлов.mdo b/SSL/src/Reports/ОбъемНенужныхФайлов/ОбъемНенужныхФайлов.mdo new file mode 100644 index 000000000..6a275748c --- /dev/null +++ b/SSL/src/Reports/ОбъемНенужныхФайлов/ОбъемНенужныхФайлов.mdo @@ -0,0 +1,29 @@ + + + + + + + ОбъемНенужныхФайлов + + ru + Объем ненужных файлов + + true + CommonForm.ФормаОтчета + Report.ОбъемНенужныхФайлов.Template.ОсновнаяСхемаКомпоновкиДанных + SettingsStorage.ХранилищеВариантовОтчетов + + + ru + + + + ОсновнаяСхемаКомпоновкиДанных + + ru + Основная схема компоновки данных + + DataCompositionSchema + + diff --git a/SSL/src/Reports/ПраваДоступа/Forms/ФормаОтчета/Form.form b/SSL/src/Reports/ПраваДоступа/Forms/ФормаОтчета/Form.form index 838a1b145..8adccd601 100644 --- a/SSL/src/Reports/ПраваДоступа/Forms/ФормаОтчета/Form.form +++ b/SSL/src/Reports/ПраваДоступа/Forms/ФормаОтчета/Form.form @@ -199,7 +199,6 @@ true true true - UseIfNecessary auto true @@ -313,7 +312,7 @@ TextPicture - Auto + DontUse Auto diff --git a/SSL/src/Reports/ПраваДоступа/Forms/ФормаОтчета/Module.bsl b/SSL/src/Reports/ПраваДоступа/Forms/ФормаОтчета/Module.bsl index 44605dff6..0aec68492 100644 --- a/SSL/src/Reports/ПраваДоступа/Forms/ФормаОтчета/Module.bsl +++ b/SSL/src/Reports/ПраваДоступа/Forms/ФормаОтчета/Module.bsl @@ -41,7 +41,7 @@ Процедура ДокументОбработкаРасшифровки(Элемент, Расшифровка, СтандартнаяОбработка) Если ТипЗнч(Расшифровка) = Тип("Строка") - И Лев(Расшифровка, СтрДлина("ОткрытьФормуСписка: ")) = "ОткрытьФормуСписка: " Тогда + И СтрНачинаетсяС(Расшифровка, "ОткрытьФормуСписка: ") Тогда СтандартнаяОбработка = Ложь; ОткрытьФорму(Сред(Расшифровка, СтрДлина("ОткрытьФормуСписка: ") + 1) + ".ФормаСписка"); @@ -99,8 +99,7 @@ Свойства.Вставить("ПредставлениеОбъекта", НСтр("ru = 'Группа внешних пользователей: %1'")); КонецЕсли; - Свойства.ПредставлениеОбъекта = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - Свойства.ПредставлениеОбъекта, Строка(Ссылка)); + Свойства.ПредставлениеОбъекта = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(Свойства.ПредставлениеОбъекта, Строка(Ссылка)); // Вывод заголовка. Область = Макет.ПолучитьОбласть("Заголовок"); @@ -169,13 +168,13 @@ // Вывод групп доступа. УстановитьПривилегированныйРежим(Истина); + ВозможныеПрава = УправлениеДоступомСлужебныйПовтИсп.Параметры().ВозможныеПраваДляНастройкиПравОбъектов; + Запрос = Новый Запрос; Запрос.УстановитьПараметр("Пользователь", Ссылка); Запрос.УстановитьПараметр("ВыводПравГруппы", ВыводПравГруппы); Запрос.УстановитьПараметр("ВидыОграниченийПрав", ВидыОграниченийПравОбъектовМетаданных()); - - Запрос.УстановитьПараметр("ТипыВладельцевНастроекПрав", УправлениеДоступомСлужебныйПовтИсп.Параметры( - ).ВозможныеПраваДляНастройкиПравОбъектов.ТипыВладельцев); + Запрос.УстановитьПараметр("ТипыВладельцевНастроекПрав", ВозможныеПрава.ТипыВладельцев); Запрос.Текст = "ВЫБРАТЬ РАЗЛИЧНЫЕ @@ -821,8 +820,7 @@ Область = Макет.ПолучитьОбласть("ПросмотрОбъектовЛегенда"); Документ.Вывести(Область, 2); - ВладельцыНастроекПрав = УправлениеДоступомСлужебныйПовтИсп.Параметры( - ).ВозможныеПраваДляНастройкиПравОбъектов.ПоТипамСсылок; + ВладельцыНастроекПрав = ВозможныеПрава.ПоТипамСсылок; Для каждого ОписаниеВидаОбъектов Из ПраваОбъектов.Строки Цикл Область = Макет.ПолучитьОбласть("ПраваОбъектовТаблицаЗаголовок"); @@ -932,7 +930,7 @@ ПредставлениеРолейПрофиля = СокрЛП(ПредставлениеРолейПрофиля); Если ЗначениеЗаполнено(ПредставлениеРолейПрофиля) - И Прав(ПредставлениеРолейПрофиля, 1) = "," Тогда + И СтрЗаканчиваетсяНа(ПредставлениеРолейПрофиля, ",") Тогда ПредставлениеРолейПрофиля = Лев( ПредставлениеРолейПрофиля, @@ -952,8 +950,7 @@ Область.Параметры.ПредставлениеПрофиляИлиГруппыДоступа = ОписаниеГруппыДоступа.ПредставлениеГруппыДоступа + Символы.ПС - + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - УточнениеПредставленияГруппыДоступа, + + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(УточнениеПредставленияГруппыДоступа, ОписаниеПрофиля.ПредставлениеПрофиля, СокрЛП(ПредставлениеРолейПрофиля)); Иначе @@ -966,7 +963,7 @@ Для каждого ОписаниеВидаДоступа Из ОписаниеГруппыДоступа.Строки Цикл Индекс = ОписаниеВидаДоступа.Строки.Количество()-1; Пока Индекс >= 0 Цикл - Если НЕ ЗначениеЗаполнено(ОписаниеВидаДоступа.Строки[Индекс].ЗначениеДоступа) Тогда + Если ОписаниеВидаДоступа.Строки[Индекс].ЗначениеДоступа = Неопределено Тогда ОписаниеВидаДоступа.Строки.Удалить(Индекс); КонецЕсли; Индекс = Индекс-1; @@ -978,8 +975,7 @@ Область.Параметры.ВидДоступа = ОписаниеВидаДоступа.ВидДоступа; - Область.Параметры.ПредставлениеВидаДоступа = - СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + Область.Параметры.ПредставлениеВидаДоступа = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( ШаблонПредставленияВидаДоступа( ОписаниеВидаДоступа, ВладельцыНастроекПрав), ОписаниеВидаДоступа.ПредставлениеВидаДоступа); @@ -1268,7 +1264,7 @@ ПредставлениеРолейПрофиля = СокрЛП(ПредставлениеРолейПрофиля); Если ЗначениеЗаполнено(ПредставлениеРолейПрофиля) - И Прав(ПредставлениеРолейПрофиля, 1) = "," Тогда + И СтрЗаканчиваетсяНа(ПредставлениеРолейПрофиля, ",") Тогда ПредставлениеРолейПрофиля = Лев( ПредставлениеРолейПрофиля, @@ -1287,8 +1283,7 @@ Область.Параметры.ПредставлениеПрофиляИлиГруппыДоступа = ОписаниеГруппыДоступа.ПредставлениеГруппыДоступа + Символы.ПС - + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - УточнениеПредставленияГруппыДоступа, + + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(УточнениеПредставленияГруппыДоступа, ОписаниеПрофиля.ПредставлениеПрофиля, СокрЛП(ПредставлениеРолейПрофиля)); Иначе @@ -1301,14 +1296,7 @@ Для каждого ОписаниеВидаДоступа Из ОписаниеГруппыДоступа.Строки Цикл Индекс = ОписаниеВидаДоступа.Строки.Количество()-1; Пока Индекс >= 0 Цикл - Если НЕ ЗначениеЗаполнено(ОписаниеВидаДоступа.Строки[Индекс].ЗначениеДоступа) Тогда - ОписаниеВидаДоступа.Строки.Удалить(Индекс); - КонецЕсли; - Индекс = Индекс-1; - КонецЦикла; - Индекс = ОписаниеВидаДоступа.Строки.Количество()-1; - Пока Индекс >= 0 Цикл - Если НЕ ЗначениеЗаполнено(ОписаниеВидаДоступа.Строки[Индекс].ЗначениеДоступа) Тогда + Если ОписаниеВидаДоступа.Строки[Индекс].ЗначениеДоступа = Неопределено Тогда ОписаниеВидаДоступа.Строки.Удалить(Индекс); КонецЕсли; Индекс = Индекс-1; @@ -1320,8 +1308,7 @@ Область.Параметры.ВидДоступа = ОписаниеВидаДоступа.ВидДоступа; - Область.Параметры.ПредставлениеВидаДоступа = - СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + Область.Параметры.ПредставлениеВидаДоступа = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( ШаблонПредставленияВидаДоступа( ОписаниеВидаДоступа, ВладельцыНастроекПрав), ОписаниеВидаДоступа.ПредставлениеВидаДоступа); @@ -1407,8 +1394,6 @@ КонецЦикла; НастройкиПрав.Строки.Сортировать("ПредставлениеВидаОбъектов Возр"); - ВозможныеПрава = УправлениеДоступомСлужебныйПовтИсп.Параметры().ВозможныеПраваДляНастройкиПравОбъектов; - Для каждого ОписаниеТипаОбъектов Из НастройкиПрав.Строки Цикл ОписаниеПрав = ВозможныеПрава.ПоТипамСсылок.Получить(ОписаниеТипаОбъектов.ТипОбъектов); @@ -1566,6 +1551,7 @@ Если ОписаниеВидаДоступа.Строки.Количество() = 0 Тогда Если ВладельцыНастроекПрав.Получить(ТипЗнч(ОписаниеВидаДоступа.ВидДоступа)) <> Неопределено Тогда ШаблонПредставленияВидаДоступа = "%1"; + ИначеЕсли ОписаниеВидаДоступа.ВсеРазрешены Тогда Если ОписаниеВидаДоступа.ВидДоступа = Справочники.Пользователи.ПустаяСсылка() Тогда ШаблонПредставленияВидаДоступа = @@ -1753,8 +1739,8 @@ Запрос.УстановитьПараметр("ТипыЗначенийВидовДоступа", УправлениеДоступомСлужебныйПовтИсп.ТипыЗначенийВидовДоступаИВладельцевНастроекПрав()); - ИспользуемыеВидыДоступа = УправлениеДоступомСлужебныйПовтИсп.ТипыЗначенийВидовДоступаИВладельцевНастроекПрав( - ).Скопировать(, "ВидДоступа"); + ТипыЗначений = УправлениеДоступомСлужебныйПовтИсп.ТипыЗначенийВидовДоступаИВладельцевНастроекПрав(); + ИспользуемыеВидыДоступа = ТипыЗначений.Скопировать(, "ВидДоступа"); ИспользуемыеВидыДоступа.Свернуть("ВидДоступа"); ИспользуемыеВидыДоступа.Колонки.Добавить("Представление", Новый ОписаниеТипов("Строка", ,,, Новый КвалификаторыСтроки(150))); @@ -1769,8 +1755,8 @@ Если МетаданныеВладельцаНастроекПрав = Неопределено Тогда Строка.Представление = НСтр("ru = 'Неизвестный вид доступа'"); Иначе - Строка.Представление = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Настройки прав на %1'"), МетаданныеВладельцаНастроекПрав.Представление()); + Строка.Представление = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Настройки прав на %1'"), + МетаданныеВладельцаНастроекПрав.Представление()); КонецЕсли; ИначеЕсли УправлениеДоступомСлужебный.ВидДоступаИспользуется(Строка.ВидДоступа) Тогда Строка.Представление = СвойстваВидаДоступа.Представление; diff --git a/SSL/src/Reports/ПраваДоступа/ManagerModule.bsl b/SSL/src/Reports/ПраваДоступа/ManagerModule.bsl index 4271af5f8..a16bfd1a2 100644 --- a/SSL/src/Reports/ПраваДоступа/ManagerModule.bsl +++ b/SSL/src/Reports/ПраваДоступа/ManagerModule.bsl @@ -1,6 +1,6 @@ #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда -#Область СлужебныйПрограммныйИнтерфейс +#Область ПрограммныйИнтерфейс // Настройки размещения в панели отчетов. // diff --git a/SSL/src/Reports/ПроверкаЦелостностиТома/ManagerModule.bsl b/SSL/src/Reports/ПроверкаЦелостностиТома/ManagerModule.bsl new file mode 100644 index 000000000..aa8e1818f --- /dev/null +++ b/SSL/src/Reports/ПроверкаЦелостностиТома/ManagerModule.bsl @@ -0,0 +1,32 @@ +#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда + +#Область ПрограммныйИнтерфейс + +// Настройки размещения в панели отчетов. +// +// Параметры: +// Настройки - Коллекция - Используется для описания настроек отчетов и вариантов +// см. описание к ВариантыОтчетов.ДеревоНастроекВариантовОтчетовКонфигурации(). +// НастройкиОтчета - СтрокаДереваЗначений - Настройки размещения всех вариантов отчета. +// См. "Реквизиты для изменения" функции ВариантыОтчетов.ДеревоНастроекВариантовОтчетовКонфигурации(). +// +// Описание: +// См. ВариантыОтчетовПереопределяемый.НастроитьВариантыОтчетов(). +// +// Вспомогательные методы: +// НастройкиВарианта = ВариантыОтчетов.ОписаниеВарианта(Настройки, НастройкиОтчета, "<ИмяВарианта>"); +// ВариантыОтчетов.УстановитьРежимВыводаВПанеляхОтчетов(Настройки, НастройкиОтчета, Истина/Ложь); // Отчет +// поддерживает только этот режим. +// +Процедура НастроитьВариантыОтчета(Настройки, НастройкиОтчета) Экспорт + + МодульВариантыОтчетов = ОбщегоНазначения.ОбщийМодуль("ВариантыОтчетов"); + + НастройкиВарианта = МодульВариантыОтчетов.ОписаниеВарианта(Настройки, НастройкиОтчета, "Основной"); + НастройкиВарианта.Описание = НСтр("ru = 'Проверка целостности тома.'"); + +КонецПроцедуры + +#КонецОбласти + +#КонецЕсли \ No newline at end of file diff --git a/SSL/src/Reports/ПроверкаЦелостностиТома/ObjectModule.bsl b/SSL/src/Reports/ПроверкаЦелостностиТома/ObjectModule.bsl new file mode 100644 index 000000000..2ce025837 --- /dev/null +++ b/SSL/src/Reports/ПроверкаЦелостностиТома/ObjectModule.bsl @@ -0,0 +1,68 @@ +#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда + +#Область ОбработчикиСобытий + +Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка) + + ТаблицаФайловНаДиске = Новый ТаблицаЗначений; + ТаблицаФайловНаДиске.Колонки.Добавить("Имя"); + ТаблицаФайловНаДиске.Колонки.Добавить("Файл"); + ТаблицаФайловНаДиске.Колонки.Добавить("ИмяБезРасширения"); + ТаблицаФайловНаДиске.Колонки.Добавить("ПолноеИмя"); + ТаблицаФайловНаДиске.Колонки.Добавить("Путь"); + ТаблицаФайловНаДиске.Колонки.Добавить("Том"); + ТаблицаФайловНаДиске.Колонки.Добавить("Расширение"); + ТаблицаФайловНаДиске.Колонки.Добавить("СтатусПроверки"); + ТаблицаФайловНаДиске.Колонки.Добавить("Количество"); + ТаблицаФайловНаДиске.Колонки.Добавить("Отредактировал"); + ТаблицаФайловНаДиске.Колонки.Добавить("ДатаРедактирования"); + + ПараметрТом = КомпоновщикНастроек.Настройки.ПараметрыДанных.Элементы.Найти("Том"); + + Если ПараметрТом <> Неопределено Тогда + ПутьКТому = ФайловыеФункцииСлужебный.ПолныйПутьТома(ПараметрТом.Значение); + КонецЕсли; + + МассивФайлов = НайтиФайлы(ПутьКТому,"*", Истина); + Для Каждого Файл Из МассивФайлов Цикл + Если Не Файл.ЭтоФайл() Тогда + Продолжить; + КонецЕсли; + НоваяСтрока = ТаблицаФайловНаДиске.Добавить(); + НоваяСтрока.Имя = Файл.Имя; + НоваяСтрока.ИмяБезРасширения = Файл.ИмяБезРасширения; + НоваяСтрока.ПолноеИмя = Файл.ПолноеИмя; + НоваяСтрока.Путь = Файл.Путь; + НоваяСтрока.Расширение = Файл.Расширение; + НоваяСтрока.СтатусПроверки = НСтр("ru = 'Лишние файлы (есть на диске, но сведения о них отсутствуют)'"); + НоваяСтрока.Количество = 1; + НоваяСтрока.Том = ПараметрТом.Значение; + КонецЦикла; + + ФайловыеФункцииСлужебный.ПроверитьЦелостностьФайлов(ТаблицаФайловНаДиске, ПараметрТом.Значение); + + СтандартнаяОбработка = Ложь; + + ДокументРезультат.Очистить(); + + КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных; + Настройки = КомпоновщикНастроек.ПолучитьНастройки(); + + ВнешниеНаборыДанных = Новый Структура; + ВнешниеНаборыДанных.Вставить("ТаблицаПроверкиТома", ТаблицаФайловНаДиске); + + МакетКомпоновки = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных, Настройки, ДанныеРасшифровки); + + ПроцессорКомпоновки = Новый ПроцессорКомпоновкиДанных; + ПроцессорКомпоновки.Инициализировать(МакетКомпоновки, ВнешниеНаборыДанных, ДанныеРасшифровки, Истина); + + ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент; + ПроцессорВывода.УстановитьДокумент(ДокументРезультат); + + ПроцессорВывода.Вывести(ПроцессорКомпоновки); + +КонецПроцедуры + +#КонецОбласти + +#КонецЕсли diff --git a/SSL/src/Reports/ПроверкаЦелостностиТома/Templates/ОсновнаяСхемаКомпоновкиДанных/Template.dcs b/SSL/src/Reports/ПроверкаЦелостностиТома/Templates/ОсновнаяСхемаКомпоновкиДанных/Template.dcs new file mode 100644 index 000000000..c7ab333e6 --- /dev/null +++ b/SSL/src/Reports/ПроверкаЦелостностиТома/Templates/ОсновнаяСхемаКомпоновкиДанных/Template.dcs @@ -0,0 +1,383 @@ + + + + ИсточникДанных1 + Local + + + ТаблицаПроверкиТома + + Файл + Файл + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Файл</v8:content> + </v8:item> + + + + ПолноеИмя + ПолноеИмя + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Полное имя</v8:content> + </v8:item> + + + + СтатусПроверки + СтатусПроверки + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Статус проверки</v8:content> + </v8:item> + + + xs:string + + 0 + Variable + + + + + Имя + Имя + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Имя</v8:content> + </v8:item> + + + + Количество + Количество + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Количество</v8:content> + </v8:item> + + + xs:decimal + + 0 + 0 + Any + + + + + Том + Том + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Том</v8:content> + </v8:item> + + + d5p1:CatalogRef.ТомаХраненияФайлов + + + + Отредактировал + Отредактировал + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Отредактировал</v8:content> + </v8:item> + + + d5p1:CatalogRef.Пользователи + + + + ДатаРедактирования + ДатаРедактирования + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Дата редактирования</v8:content> + </v8:item> + + + xs:dateTime + + DateTime + + + + ИсточникДанных1 + ТаблицаПроверкиТома + + + Файл + Количество(Файл) + + + Том + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Том</v8:content> + </v8:item> + + + d4p1:CatalogRef.ТомаХраненияФайлов + + + false + true + + + Основной + + + ru + Проверка целостности тома + + + + + + Файл + + + Имя + + + ПолноеИмя + + + + + Том + Equal + ПараметрыДанных.Том + + + + + Том + + + + + + false + ТипДиаграммы + Column3D + + ТипДиаграммы.ВидПодписей + ValuePercent + + + + Заголовок + + + ru + Проверка целостности тома + + + + + ВыводитьПараметрыДанных + DontOutput + + + ВыводитьОтбор + DontOutput + + + + + + + СтатусПроверки + Items + None + 0001-01-01T00:00:00 + 0001-01-01T00:00:00 + + + + + + + + + + + + + + + + + + СтатусПроверки + Contains + Целостные данные + + + + + ЦветВДиаграмме + #19CC19 + + + + + + + + СтатусПроверки + Contains + Лишние файлы (есть на диске, но сведения о них отсутствуют) + + + + + ЦветВДиаграмме + #FEE101 + + + + + + + + СтатусПроверки + Contains + Отсутствуют данные в томе на диске + + + + + ЦветВДиаграмме + #D02A35 + + + + + + + ТипДиаграммы + Pie3D + + + + + ОтсутствуютДанные + + + СтатусПроверки + Contains + Отсутствуют данные в томе на диске + + + + + + + + Имя + + + ru + Наименование + + + + + ПолноеИмя + + + ru + Полный путь + + + + + Отредактировал + + + ДатаРедактирования + + + + + МакетОформления + Основной + + + Заголовок + + + ru + Отсутствуют данные в томе на диске + + + + + ВыводитьОтбор + DontOutput + + + + + Лишние файлы + + + СтатусПроверки + Contains + Лишние файлы + + + + + + + + Имя + + + ПолноеИмя + + + ru + Полный путь + + + + + + + МакетОформления + Основной + + + Заголовок + + + ru + Лишние файлы (есть на диске, но сведения о них отсутствуют) + + + + + ВыводитьОтбор + DontOutput + + + + + + \ No newline at end of file diff --git a/SSL/src/Reports/ПроверкаЦелостностиТома/ПроверкаЦелостностиТома.mdo b/SSL/src/Reports/ПроверкаЦелостностиТома/ПроверкаЦелостностиТома.mdo new file mode 100644 index 000000000..0c655566c --- /dev/null +++ b/SSL/src/Reports/ПроверкаЦелостностиТома/ПроверкаЦелостностиТома.mdo @@ -0,0 +1,23 @@ + + + + + + + ПроверкаЦелостностиТома + + ru + Проверка целостности тома + + true + Report.ПроверкаЦелостностиТома.Template.ОсновнаяСхемаКомпоновкиДанных + SettingsStorage.ХранилищеВариантовОтчетов + + ОсновнаяСхемаКомпоновкиДанных + + ru + Основная схема компоновки данных + + DataCompositionSchema + + diff --git a/SSL/src/Reports/ПросроченныеЗадачи/Help/ru.html b/SSL/src/Reports/ПросроченныеЗадачи/Help/ru.html index 44f32084e..faea9908a 100644 --- a/SSL/src/Reports/ПросроченныеЗадачи/Help/ru.html +++ b/SSL/src/Reports/ПросроченныеЗадачи/Help/ru.html @@ -6,4 +6,4 @@ \ No newline at end of file + \ No newline at end of file diff --git a/SSL/src/Reports/ПросроченныеЗадачи/ManagerModule.bsl b/SSL/src/Reports/ПросроченныеЗадачи/ManagerModule.bsl index b2fec4659..d175d02b5 100644 --- a/SSL/src/Reports/ПросроченныеЗадачи/ManagerModule.bsl +++ b/SSL/src/Reports/ПросроченныеЗадачи/ManagerModule.bsl @@ -1,6 +1,6 @@ #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда -#Область СлужебныйПрограммныйИнтерфейс +#Область ПрограммныйИнтерфейс // Настройки размещения в панели отчетов. // diff --git a/SSL/src/Reports/СведенияОПользователях/Help/ru.html b/SSL/src/Reports/СведенияОПользователях/Help/ru.html index d8bbab83b..940b1e26b 100644 --- a/SSL/src/Reports/СведенияОПользователях/Help/ru.html +++ b/SSL/src/Reports/СведенияОПользователях/Help/ru.html @@ -1,8 +1,8 @@ -

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

      +

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

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

      Отчет открывается из списка Пользователи (Внешние пользователи) по команде Еще - Сведения о пользователях (о внешних пользователях).

      -

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

      +

      В отчете по умолчанию выдаются сведения:

      • Полное имя пользователя;
      • Вход в программу разрешен - поле может принимать значение "Да" или остается пустым;
      • Имя (для входа); @@ -10,8 +10,9 @@
      • Аутентификация ОС - поле может принимать значение "Да" или остается пустым;
      • Пользователь ОС - имя, с которым пользователь входит в ОС;
      • Аутентификация OpenID - поле может принимать значение "Да" или остается пустым; -
      • Режим запуска.

      Отборы пользователей

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

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

      +

      Отборы пользователей

      +
      • С помощью кнопки Настройки можно открыть настройки отчета. Для отбора пользователей по одному или нескольким параметрам включите соответствующие флажки.
      • Возможен отбор пользователей по параметрам: \ No newline at end of file diff --git a/SSL/src/Reports/СведенияОПользователях/ManagerModule.bsl b/SSL/src/Reports/СведенияОПользователях/ManagerModule.bsl index 63145913c..fab5d92fd 100644 --- a/SSL/src/Reports/СведенияОПользователях/ManagerModule.bsl +++ b/SSL/src/Reports/СведенияОПользователях/ManagerModule.bsl @@ -1,6 +1,6 @@ #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда -#Область СлужебныйПрограммныйИнтерфейс +#Область ПрограммныйИнтерфейс // Настройки размещения в панели отчетов. // diff --git a/SSL/src/Reports/СведенияОПользователях/ObjectModule.bsl b/SSL/src/Reports/СведенияОПользователях/ObjectModule.bsl index 8aa9ff304..a6ec7912d 100644 --- a/SSL/src/Reports/СведенияОПользователях/ObjectModule.bsl +++ b/SSL/src/Reports/СведенияОПользователях/ObjectModule.bsl @@ -1,7 +1,6 @@ #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ОБЪЕКТА +#Область ОбработчикиСобытий Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка) @@ -39,6 +38,8 @@ КонецПроцедуры +#КонецОбласти + #Область СлужебныеПроцедурыИФункции Функция ПользователиИБ(ИдентификаторыНесуществующихПользователейИБ) diff --git a/SSL/src/Reports/СведенияОПользователях/Templates/ОсновнаяСхемаКомпоновкиДанных/Template.dcs b/SSL/src/Reports/СведенияОПользователях/Templates/ОсновнаяСхемаКомпоновкиДанных/Template.dcs index 4bee76fde..4134f4879 100644 --- a/SSL/src/Reports/СведенияОПользователях/Templates/ОсновнаяСхемаКомпоновкиДанных/Template.dcs +++ b/SSL/src/Reports/СведенияОПользователях/Templates/ОсновнаяСхемаКомпоновкиДанных/Template.dcs @@ -356,6 +356,58 @@ Без пользователя информационной базы + + xs:boolean + + + + ГоризонтальноеПоложение + Center + + + Формат + БЛ=; БИ=Да + + + + + СрокДействия + СрокДействия + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Срок действия</v8:content> + </v8:item> + + + xs:dateTime + + DateTime + + + + + ПотребоватьСменуПароляПриВходе + ПотребоватьСменуПароляПриВходе + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Потребовать смену пароля при входе</v8:content> + </v8:item> + + + xs:boolean + + + + ГоризонтальноеПоложение + Center + + + Формат + БЛ=; БИ=Да + + ИсточникДанных1 ВЫБРАТЬ @@ -371,9 +423,13 @@ Пользователи.ИдентификаторПользователяИБ, Пользователи.Недействителен, Пользователи.Комментарий, - Пользователи.Предопределенный + Пользователи.Предопределенный, + ЕСТЬNULL(СведенияОПользователях.ПотребоватьСменуПароляПриВходе, ЛОЖЬ) КАК ПотребоватьСменуПароляПриВходе, + ЕСТЬNULL(СведенияОПользователях.СрокДействия, ДАТАВРЕМЯ(1, 1, 1, 0, 0, 0)) КАК СрокДействия ИЗ Справочник.Пользователи КАК Пользователи + ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.СведенияОПользователях КАК СведенияОПользователях + ПО (СведенияОПользователях.Пользователь = Пользователи.Ссылка) ГДЕ Пользователи.Служебный = ЛОЖЬ И &Пользователи @@ -393,9 +449,13 @@ ВнешниеПользователи.ИдентификаторПользователяИБ, ВнешниеПользователи.Недействителен, ВнешниеПользователи.Комментарий, - ВнешниеПользователи.Предопределенный + ВнешниеПользователи.Предопределенный, + ЕСТЬNULL(СведенияОПользователях.ПотребоватьСменуПароляПриВходе, ЛОЖЬ), + ЕСТЬNULL(СведенияОПользователях.СрокДействия, ДАТАВРЕМЯ(1, 1, 1, 0, 0, 0)) ИЗ Справочник.ВнешниеПользователи КАК ВнешниеПользователи + ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.СведенияОПользователях КАК СведенияОПользователях + ПО (СведенияОПользователях.Пользователь = ВнешниеПользователи.Ссылка) ГДЕ &ВнешниеПользователи @@ -585,6 +645,14 @@ false ЭлектронныйАдрес + + false + ПотребоватьСменуПароляПриВходе + + + false + СрокДействия + Normal 7139addb-6cc1-4f4b-ada6-47ed96031db6 @@ -876,6 +944,14 @@ false ЭлектронныйАдрес + + false + ПотребоватьСменуПароляПриВходе + + + false + СрокДействия + Normal 7139addb-6cc1-4f4b-ada6-47ed96031db6 @@ -1146,6 +1222,14 @@ false Комментарий + + false + СрокДействия + + + false + ПотребоватьСменуПароляПриВходе + Normal 7139addb-6cc1-4f4b-ada6-47ed96031db6 diff --git a/SSL/src/Roles/АдминистраторСистемы/Rights.rights b/SSL/src/Roles/АдминистраторСистемы/Rights.rights index 713c6a909..d4457f18d 100644 --- a/SSL/src/Roles/АдминистраторСистемы/Rights.rights +++ b/SSL/src/Roles/АдминистраторСистемы/Rights.rights @@ -147,6 +147,29 @@ true + + InformationRegister.ЗамерыКомментарииСтатистики + + Read + true + + + Update + true + + + View + true + + + Edit + true + + + TotalsControl + true + + ExchangePlan.ОбменСообщениями @@ -213,6 +236,29 @@ true + + InformationRegister.СтатистикаКонфигурации + + Read + true + + + Update + true + + + View + true + + + Edit + true + + + TotalsControl + true + + DataProcessor.СбросНастроекПроверкиКонтрагентов @@ -285,97 +331,6 @@ true - - Configuration.БиблиотекаСтандартныхПодсистем - - Administration - true - - - DataAdministration - true - - - UpdateDataBaseConfiguration - true - - - ExclusiveMode - true - - - ActiveUsers - true - - - EventLog - true - - - ThinClient - true - - - WebClient - true - - - ThickClient - true - - - ExternalConnection - true - - - Automation - true - - - TechnicalSpecialistMode - true - - - MainWindowModeNormal - true - - - MainWindowModeWorkplace - true - - - MainWindowModeEmbeddedWorkplace - true - - - MainWindowModeFullscreenWorkplace - true - - - MainWindowModeKiosk - true - - - AnalyticsSystemClient - true - - - SaveUserData - true - - - InteractiveOpenExtDataProcessors - true - - - InteractiveOpenExtReports - true - - - Output - true - - Constant.НастройкаПроксиСервера @@ -499,6 +454,101 @@ true + + Configuration.БиблиотекаСтандартныхПодсистем + + Administration + true + + + DataAdministration + true + + + UpdateDataBaseConfiguration + true + + + ExclusiveMode + true + + + ActiveUsers + true + + + EventLog + true + + + ThinClient + true + + + WebClient + true + + + ThickClient + true + + + ExternalConnection + true + + + Automation + true + + + TechnicalSpecialistMode + true + + + MainWindowModeNormal + true + + + MainWindowModeWorkplace + true + + + MainWindowModeEmbeddedWorkplace + true + + + MainWindowModeFullscreenWorkplace + true + + + MainWindowModeKiosk + true + + + AnalyticsSystemClient + true + + + SaveUserData + true + + + ConfigurationExtensionsAdministration + true + + + InteractiveOpenExtDataProcessors + true + + + InteractiveOpenExtReports + true + + + Output + true + + CommonCommand.НастройкаОбменаСообщениями @@ -709,11 +759,27 @@ - CommonCommand.ДополнительныеПечатныеФормыОбъекта + InformationRegister.ЗамерыВремениТехнологические + + Read + true + + + Update + true + View true + + Edit + true + + + TotalsControl + true + Constant.ИспользоватьСинхронизациюДанныхВМоделиСервиса @@ -787,6 +853,17 @@ true + + InformationRegister.БезопасноеХранилищеДанныхОбластейДанных.Dimension.Владелец + + View + false + + + Edit + false + + Catalog.КлассификаторБанковРФ.Command.КлассификаторБанковРФ @@ -980,18 +1057,10 @@ Read true - - Update - true - View true - - Edit - true - Constant.ДатаПоследнегоСтартаКлиентскогоСеанса @@ -1185,7 +1254,7 @@ - Constant.ПарольСлужебногоПользователяМенеджераСервиса + Constant.УдалитьПарольСлужебногоПользователяМенеджераСервиса Read true @@ -1379,6 +1448,17 @@ true + + InformationRegister.БезопасноеХранилищеДанныхОбластейДанных.Resource.Данные + + View + false + + + Edit + false + + InformationRegister.НастройкиОтправителя @@ -1542,17 +1622,6 @@ true - - InformationRegister.НазначениеДополнительныхОбработок.Resource.ИспользоватьПечатныеФормы - - View - false - - - Edit - false - - Constant.ПараметрыРаботыПользователей @@ -1859,6 +1928,29 @@ true + + InformationRegister.ЗамерыОбластиСтатистики + + Read + true + + + Update + true + + + View + true + + + Edit + true + + + TotalsControl + true + + InformationRegister.ДополнительныеАдресныеСведения @@ -2108,6 +2200,50 @@ false + + InformationRegister.БезопасноеХранилищеДанныхОбластейДанных.StandardAttribute.Active + + View + false + + + Edit + false + + + + InformationRegister.БезопасноеХранилищеДанныхОбластейДанных.StandardAttribute.LineNumber + + View + false + + + Edit + false + + + + InformationRegister.БезопасноеХранилищеДанныхОбластейДанных.StandardAttribute.Recorder + + View + false + + + Edit + false + + + + InformationRegister.БезопасноеХранилищеДанныхОбластейДанных.StandardAttribute.Period + + View + false + + + Edit + false + + Constant.ПрефиксОбластиДанных @@ -2242,13 +2378,6 @@ true - - InformationRegister.НазначениеДополнительныхОбработок.Command.НазначениеДополнительныхОбработок - - View - true - - Constant.КаталогСообщенийОбменаДаннымиДляWindows @@ -2287,13 +2416,6 @@ true - - InformationRegister.АдресныеОбъекты.Command.ПроверитьОбновлениеАдресногоКлассификатора - - View - true - - InformationRegister.КэшПрограммныхИнтерфейсов @@ -2531,7 +2653,7 @@ - Constant.ИмяСлужебногоПользователяМенеджераСервиса + Constant.УдалитьИмяСлужебногоПользователяМенеджераСервиса Read true @@ -2644,6 +2766,29 @@ true + + InformationRegister.ОбластиСтатистики + + Read + true + + + Update + true + + + View + true + + + Edit + true + + + TotalsControl + true + + Constant.НастройкаПодчиненногоУзлаРИБЗавершена @@ -2917,6 +3062,25 @@ true + + Constant.ОценкаПроизводительностиЭкспортВсехКлючевыхОпераций + + Read + true + + + Update + true + + + View + true + + + Edit + true + + Constant.СообщениеОбменаДаннымиИзГлавногоУзла @@ -2936,6 +3100,48 @@ true + + InformationRegister.БуферОперацийСтатистики + + Read + true + + + Update + true + + + View + true + + + Edit + true + + + TotalsControl + true + + + + Constant.ПараметрыЦентраМониторинга + + Read + true + + + Update + true + + + View + true + + + Edit + true + + Constant.ИспользоватьРазделениеПоОбластямДанных @@ -2993,6 +3199,13 @@ true + + CommonForm.УстановленныеРасширения + + View + true + + ChartOfCharacteristicTypes.УдалитьВидыДоступа @@ -3168,7 +3381,7 @@ - DataProcessor.РезервноеКопированиеИБ.Command.ВыполнитьВосстановлениеИБ + DataProcessor.РезервноеКопированиеИБ.Command.ВыполнитьВосстановлениеДанных View true @@ -3299,6 +3512,13 @@ true + + DataProcessor.ОценкаПроизводительности.Command.НастройкиОценкиПроизводительности + + View + true + + InformationRegister.УдалитьСтраныМира @@ -3322,6 +3542,52 @@ true + + InformationRegister.ДампыПлатформы + + Read + true + + + Update + true + + + View + true + + + Edit + true + + + TotalsControl + true + + + + InformationRegister.ЗамерыОперацииСтатистики + + Read + true + + + Update + true + + + View + true + + + Edit + true + + + TotalsControl + true + + Constant.ИсточникДанныхАдресногоКлассификатора @@ -3360,6 +3626,29 @@ true + + InformationRegister.КомментарииСтатистики + + Read + true + + + Update + true + + + View + true + + + Edit + true + + + TotalsControl + true + + InformationRegister.АдресныеОбъекты @@ -3402,6 +3691,29 @@ true + + InformationRegister.ОперацииСтатистики + + Read + true + + + Update + true + + + View + true + + + Edit + true + + + TotalsControl + true + + Catalog.ОчередьЗаданийОбластейДанных @@ -3475,6 +3787,52 @@ true + + InformationRegister.КомментарииОперацииСтатистики + + Read + true + + + Update + true + + + View + true + + + Edit + true + + + TotalsControl + true + + + + InformationRegister.ПакетыДляОтправки + + Read + true + + + Update + true + + + View + true + + + Edit + true + + + TotalsControl + true + + Constant.ДетализироватьОбновлениеИБВЖурналеРегистрации @@ -3644,6 +4002,29 @@ true + + InformationRegister.БезопасноеХранилищеДанных + + Read + true + + + Update + true + + + View + true + + + Edit + true + + + TotalsControl + true + + Constant.ПараметрыДополнительныхРеквизитовИСведений diff --git a/SSL/src/Roles/БазовыеПрава/Rights.rights b/SSL/src/Roles/БазовыеПрава/Rights.rights index 385a14a7a..9b675a9da 100644 --- a/SSL/src/Roles/БазовыеПрава/Rights.rights +++ b/SSL/src/Roles/БазовыеПрава/Rights.rights @@ -108,6 +108,13 @@ false + + Catalog.НаборыДополнительныхРеквизитовИСведений + + Read + true + + Catalog.НаборыДополнительныхРеквизитовИСведений.StandardAttribute.Predefined @@ -196,6 +203,17 @@ false + + InformationRegister.СлужебныеАдресныеСведения + + Read + true + + + View + true + + Constant.ДатаУведомленияОНовыхЗадачах @@ -218,6 +236,20 @@ true + + SessionParameter.ОбновитьВерсиюДатЗапретаИзмененияПослеЗагрузкиДанных + + Get + true + + + + CommonCommand.ПраваДоступа + + View + true + + Constant.ИспользоватьДополнительныеОтчетыИОбработки @@ -250,10 +282,6 @@ Catalog.ВидыКонтактнойИнформации.Attribute.АдресТолькоРоссийский - - View - false - Edit false @@ -282,11 +310,29 @@ - ChartOfCharacteristicTypes.ДополнительныеРеквизитыИСведения.StandardAttribute.ValueType + ChartOfCharacteristicTypes.ДополнительныеРеквизитыИСведения + + Read + true + + #ПоЗначениямРасширенный( "ПланВидовХарактеристик.ДополнительныеРеквизитыИСведения", "", "", +"", +"", +"ДополнительныеСведения","Т.Ссылка","ИЛИ", +"Условие","НЕ ЭтоДополнительноеСведение","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","") + + View - false + true + + InputByString + true + + + + ChartOfCharacteristicTypes.ДополнительныеРеквизитыИСведения.StandardAttribute.ValueType Edit false @@ -294,10 +340,6 @@ ChartOfCharacteristicTypes.ДополнительныеРеквизитыИСведения.StandardAttribute.Description - - View - false - Edit false @@ -305,10 +347,6 @@ ChartOfCharacteristicTypes.ДополнительныеРеквизитыИСведения.StandardAttribute.Code - - View - false - Edit false @@ -316,10 +354,6 @@ ChartOfCharacteristicTypes.ДополнительныеРеквизитыИСведения.StandardAttribute.IsFolder - - View - false - Edit false @@ -327,10 +361,6 @@ ChartOfCharacteristicTypes.ДополнительныеРеквизитыИСведения.StandardAttribute.Parent - - View - false - Edit false @@ -338,10 +368,6 @@ ChartOfCharacteristicTypes.ДополнительныеРеквизитыИСведения.StandardAttribute.Predefined - - View - false - Edit false @@ -349,10 +375,6 @@ ChartOfCharacteristicTypes.ДополнительныеРеквизитыИСведения.StandardAttribute.DeletionMark - - View - false - Edit false @@ -360,15 +382,22 @@ ChartOfCharacteristicTypes.ДополнительныеРеквизитыИСведения.StandardAttribute.Ref - - View - false - Edit false + + Constant.ВерсияДатЗапретаИзменения + + Read + true + + + View + true + + InformationRegister.НапоминанияПользователя.Attribute.ИнтервалВремениНапоминания @@ -413,6 +442,17 @@ true + + InformationRegister.ДомаЗданияСтроения + + Read + true + + + View + true + + CommonForm.ПанельОтчетов @@ -421,11 +461,14 @@ - ChartOfCharacteristicTypes.ДополнительныеРеквизитыИСведения.Attribute.ЭтоДополнительноеСведение + CommonForm.АутентификацияВСервисе View - false + true + + + ChartOfCharacteristicTypes.ДополнительныеРеквизитыИСведения.Attribute.ЭтоДополнительноеСведение Edit false @@ -453,6 +496,13 @@ true + + InformationRegister.ОриентирыАдресныхОбъектов.Dimension.КодСубъектаРФ + + Edit + false + + SessionParameter.ТекущийПользователь @@ -485,6 +535,17 @@ true + + InformationRegister.УдалитьВерсииПодсистем.Dimension.ИмяПодсистемы + + View + false + + + Edit + false + + Constant.ВерсияКлассификатораБанковРФ @@ -507,6 +568,13 @@ true + + Catalog.ГруппыПользователей.Attribute.Комментарий + + Edit + false + + Constant.ИспользоватьПроверкуКонтрагентов @@ -520,10 +588,6 @@ Catalog.ВидыКонтактнойИнформации.Attribute.Тип - - View - false - Edit false @@ -542,10 +606,6 @@ ChartOfCharacteristicTypes.ДополнительныеРеквизитыИСведения.Attribute.Подсказка - - View - false - Edit false @@ -585,7 +645,21 @@ - CommonCommand.СведенияОПользователе + InformationRegister.ОриентирыАдресныхОбъектов.Resource.Дополнительно + + Edit + false + + + + CommonForm.ЗаполнениеРеквизитовКонтрагента + + View + true + + + + CommonForm.ПраваДоступаУпрощенно View true @@ -719,6 +793,17 @@ true + + InformationRegister.УдалитьВерсииПодсистем.Resource.Версия + + View + false + + + Edit + false + + Constant.НеИспользоватьНесколькоОрганизаций @@ -750,10 +835,6 @@ ChartOfCharacteristicTypes.ДополнительныеРеквизитыИСведения.Attribute.ФорматСвойства - - View - false - Edit false @@ -825,6 +906,13 @@ true + + CommonForm.ВходВПрограммуЗапрещен + + View + true + + Constant.КаталогОбменаФайламиВМоделиСервиса @@ -838,10 +926,6 @@ Catalog.ВидыКонтактнойИнформации.Attribute.РедактированиеТолькоВДиалоге - - View - false - Edit false @@ -880,6 +964,39 @@ true + + InformationRegister.ПричиныИзмененияАдресныхСведений + + Read + true + + + View + true + + + + Constant.ИспользоватьДатыЗапретаЗагрузки + + Read + true + + + View + true + + + + InformationRegister.ДанныеПроизводственногоКалендаря + + Read + true + + + View + true + + InformationRegister.НапоминанияПользователя.Dimension.Источник @@ -902,6 +1019,21 @@ true + + Catalog.ВерсииРасширений + + Read + true + + + View + true + + + InputByString + true + + SessionParameter.ВыполняетсяОбновлениеИБ @@ -985,6 +1117,32 @@ true + + Catalog.Пользователи + + Read + true + + + Update + true + + ГДЕ Ссылка = &ТекущийПользователь + + + + View + true + + + Edit + true + + + InputByString + true + + CommonForm.ВыборОбъектовМетаданных @@ -1044,9 +1202,9 @@ - Constant.УдалитьПоказыватьКомандуДополнительныеПечатныеФормы + DataProcessor.ВводКонтактнойИнформации - Read + Use true @@ -1098,12 +1256,56 @@ - InformationRegister.УдалитьВерсииПодсистем + CommonForm.ФормаПоиска - Read + View true + + InformationRegister.УдалитьВерсииПодсистем.StandardAttribute.Active + + View + false + + + Edit + false + + + + InformationRegister.УдалитьВерсииПодсистем.StandardAttribute.LineNumber + + View + false + + + Edit + false + + + + InformationRegister.УдалитьВерсииПодсистем.StandardAttribute.Recorder + + View + false + + + Edit + false + + + + InformationRegister.УдалитьВерсииПодсистем.StandardAttribute.Period + + View + false + + + Edit + false + + Constant.ИзвлекатьТекстыФайловНаСервере @@ -1126,6 +1328,13 @@ true + + Catalog.ГруппыПользователей.TabularSection.Состав + + Edit + false + + Constant.ИспользоватьДополнительныеРеквизитыИСведения @@ -1231,6 +1440,13 @@ true + + SessionParameter.ВерсияРасширений + + Get + true + + InformationRegister.ПакетыИнформацииПриЗапуске @@ -1238,6 +1454,13 @@ true + + CommonForm.ОтправкаSMS + + View + true + + Constant.РазделыОписанияИзмененийСистемы @@ -1249,6 +1472,81 @@ true + + InformationRegister.ДополнительныеАдресныеСведения + + Read + true + + + View + true + + + + InformationRegister.ОриентирыАдресныхОбъектов + + Read + true + + + View + true + + + + InformationRegister.ОриентирыАдресныхОбъектов.StandardAttribute.Active + + Edit + false + + + + InformationRegister.ОриентирыАдресныхОбъектов.StandardAttribute.LineNumber + + Edit + false + + + + InformationRegister.ОриентирыАдресныхОбъектов.StandardAttribute.Recorder + + Edit + false + + + + InformationRegister.ОриентирыАдресныхОбъектов.StandardAttribute.Period + + Edit + false + + + + CommonForm.ПраваДоступа + + View + true + + + + CommonForm.СменаПароля + + View + true + + + + Constant.НастройкиВходаПользователей + + Read + true + + + View + true + + CommonForm.ВыборИсполнителяБизнесПроцесса @@ -1256,6 +1554,21 @@ true + + Catalog.ПроизводственныеКалендари + + Read + true + + + View + true + + + InputByString + true + + DataProcessor.ЗаменаИОбъединениеЭлементов @@ -1307,11 +1620,22 @@ - Catalog.ВидыКонтактнойИнформации.StandardAttribute.Predefined + Catalog.ВидыКонтактнойИнформации + + Read + true + View - false + true + + InputByString + true + + + + Catalog.ВидыКонтактнойИнформации.StandardAttribute.Predefined Edit false @@ -1319,10 +1643,6 @@ Catalog.ВидыКонтактнойИнформации.StandardAttribute.Ref - - View - false - Edit false @@ -1330,10 +1650,6 @@ Catalog.ВидыКонтактнойИнформации.StandardAttribute.DeletionMark - - View - false - Edit false @@ -1341,10 +1657,6 @@ Catalog.ВидыКонтактнойИнформации.StandardAttribute.IsFolder - - View - false - Edit false @@ -1352,10 +1664,6 @@ Catalog.ВидыКонтактнойИнформации.StandardAttribute.Owner - - View - false - Edit false @@ -1363,10 +1671,6 @@ Catalog.ВидыКонтактнойИнформации.StandardAttribute.Parent - - View - false - Edit false @@ -1374,10 +1678,6 @@ Catalog.ВидыКонтактнойИнформации.StandardAttribute.Description - - View - false - Edit false @@ -1386,9 +1686,27 @@ Catalog.ВидыКонтактнойИнформации.StandardAttribute.Code - View + Edit false + + + Catalog.СтраныМира + + Read + true + + + View + true + + + InputByString + true + + + + InformationRegister.ОриентирыАдресныхОбъектов.Resource.ПочтовыйИндекс Edit false @@ -1417,11 +1735,14 @@ - ChartOfCharacteristicTypes.ДополнительныеРеквизитыИСведения.Attribute.МногострочноеПолеВвода + InformationRegister.ОриентирыАдресныхОбъектов.Resource.Описание - View + Edit false + + + ChartOfCharacteristicTypes.ДополнительныеРеквизитыИСведения.Attribute.МногострочноеПолеВвода Edit false @@ -1449,6 +1770,17 @@ true + + InformationRegister.УдалитьВерсииПодсистем.Attribute.ПланОбновления + + View + false + + + Edit + false + + InformationRegister.НапоминанияПользователя.Attribute.СпособУстановкиВремениНапоминания @@ -1460,6 +1792,20 @@ false + + InformationRegister.СоставыГруппПользователей + + Read + true + + ГДЕ Пользователь = &ТекущийПользователь + + + + View + true + + InformationRegister.ПользовательскиеМакетыПечати @@ -1487,10 +1833,6 @@ ChartOfCharacteristicTypes.ДополнительныеРеквизитыИСведения.Attribute.Комментарий - - View - false - Edit false @@ -1597,6 +1939,17 @@ true + + InformationRegister.УдалитьВерсииПодсистем.Dimension.ОбластьДанных + + View + false + + + Edit + false + + Constant.ПараметрыСлужебныхСобытий @@ -1604,6 +1957,13 @@ true + + InformationRegister.ОриентирыАдресныхОбъектов.Dimension.Идентификатор + + Edit + false + + Constant.ИспользоватьПолнотекстовыйПоиск @@ -1646,10 +2006,6 @@ Catalog.ВидыКонтактнойИнформации.Attribute.РеквизитДопУпорядочивания - - View - false - Edit false @@ -1695,6 +2051,42 @@ true + + DataProcessor.РекомендацияПоПовышениюСкоростиРаботы + + Use + true + + + View + true + + + + CommonCommand.СменитьПароль + + View + true + + + + CommonForm.ВспомогательнаяФормаНастроекОтчета + + View + true + + + + Report.ПраваДоступа + + Use + true + + + View + true + + Constant.ОценкаПроизводительностиПериодЗаписи @@ -1768,6 +2160,84 @@ true + + Catalog.ГруппыПользователей + + Read + true + + + View + true + + + InputByString + true + + + + Catalog.ГруппыПользователей.StandardAttribute.PredefinedDataName + + Edit + false + + + + Catalog.ГруппыПользователей.StandardAttribute.Predefined + + Edit + false + + + + Catalog.ГруппыПользователей.StandardAttribute.Ref + + Edit + false + + + + Catalog.ГруппыПользователей.StandardAttribute.DeletionMark + + Edit + false + + + + Catalog.ГруппыПользователей.StandardAttribute.IsFolder + + Edit + false + + + + Catalog.ГруппыПользователей.StandardAttribute.Owner + + Edit + false + + + + Catalog.ГруппыПользователей.StandardAttribute.Parent + + Edit + false + + + + Catalog.ГруппыПользователей.StandardAttribute.Description + + Edit + false + + + + Catalog.ГруппыПользователей.StandardAttribute.Code + + Edit + false + + Constant.ИспользуютсяПрофилиБезопасности @@ -1804,6 +2274,28 @@ false + + Catalog.ЗначенияСвойствОбъектовИерархия + + Read + true + + #ПоЗначениямРасширенный( "Справочник.ЗначенияСвойствОбъектовИерархия", "", "", +"", +"", +"ДополнительныеСведения","Т.Владелец","ИЛИ", +"Условие","НЕ Т.Владелец.ЭтоДополнительноеСведение","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","") + + + + View + true + + + InputByString + true + + Constant.МаксимальныйРазмерФайлаОбластиДанных @@ -1826,6 +2318,21 @@ true + + Catalog.ИдентификаторыОбъектовРасширений + + Read + true + + + View + true + + + InputByString + true + + Constant.ИспользоватьИнтеграцию1СБухфон @@ -1861,10 +2368,6 @@ Catalog.ЗначенияСвойствОбъектов.Attribute.Вес - - View - false - Edit false @@ -1877,6 +2380,13 @@ true + + CommonForm.ПоказателиВыделенныхЯчеек + + View + true + + Constant.ИспользоватьГруппыПользователей @@ -1917,17 +2427,6 @@ true - - DataProcessor.РекомендацияПоПовышениюСкоростиРаботы - - Use - true - - - View - true - - InformationRegister.ДокументыСОшибкамиПроверкиКонтрагентов @@ -1968,11 +2467,29 @@ - Catalog.ЗначенияСвойствОбъектов.StandardAttribute.Predefined + Catalog.ЗначенияСвойствОбъектов + + Read + true + + #ПоЗначениямРасширенный( "Справочник.ЗначенияСвойствОбъектов", "", "", +"", +"", +"ДополнительныеСведения","Т.Владелец","ИЛИ", +"Условие","НЕ Т.Владелец.ЭтоДополнительноеСведение","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","") + + View - false + true + + InputByString + true + + + + Catalog.ЗначенияСвойствОбъектов.StandardAttribute.Predefined Edit false @@ -1980,10 +2497,6 @@ Catalog.ЗначенияСвойствОбъектов.StandardAttribute.Ref - - View - false - Edit false @@ -1991,10 +2504,6 @@ Catalog.ЗначенияСвойствОбъектов.StandardAttribute.DeletionMark - - View - false - Edit false @@ -2002,10 +2511,6 @@ Catalog.ЗначенияСвойствОбъектов.StandardAttribute.IsFolder - - View - false - Edit false @@ -2013,10 +2518,6 @@ Catalog.ЗначенияСвойствОбъектов.StandardAttribute.Owner - - View - false - Edit false @@ -2024,10 +2525,6 @@ Catalog.ЗначенияСвойствОбъектов.StandardAttribute.Parent - - View - false - Edit false @@ -2035,10 +2532,6 @@ Catalog.ЗначенияСвойствОбъектов.StandardAttribute.Description - - View - false - Edit false @@ -2046,10 +2539,6 @@ Catalog.ЗначенияСвойствОбъектов.StandardAttribute.Code - - View - false - Edit false @@ -2106,6 +2595,21 @@ false + + Catalog.КлассификаторБанковРФ + + Read + true + + + View + true + + + InputByString + true + + CommonForm.ВыборДействияПриОбнаруженииОтличийФайла @@ -2124,6 +2628,17 @@ true + + InformationRegister.ИсторияАдресныхОбъектов + + Read + true + + + View + true + + Constant.ПараметрыВариантовОтчетов @@ -2131,6 +2646,17 @@ true + + InformationRegister.УровниСокращенийАдресныхСведений + + Read + true + + + View + true + + Catalog.НаборыДополнительныхРеквизитовИСведений.TabularSection.ДополнительныеРеквизиты.Attribute.Свойство @@ -2142,6 +2668,17 @@ false + + InformationRegister.ПараметрыРаботыВерсийРасширений + + Read + true + + + View + true + + Constant.РазмерБлокаПередачиФайла @@ -2199,10 +2736,6 @@ ChartOfCharacteristicTypes.ДополнительныеРеквизитыИСведения.Attribute.УдалитьСклоненияПредмета - - View - false - Edit false @@ -2219,6 +2752,17 @@ true + + Constant.ОценкаПроизводительностиЭкспортВсехКлючевыхОпераций + + Read + true + + + View + true + + Constant.СообщениеОбменаДаннымиИзГлавногоУзла @@ -2255,6 +2799,13 @@ true + + Constant.ПараметрыЦентраМониторинга + + Read + true + + Constant.ОграничиватьДоступНаУровнеЗаписей @@ -2300,11 +2851,14 @@ - Catalog.ВидыКонтактнойИнформации.Attribute.МожноИзменятьСпособРедактирования + Catalog.ГруппыПользователей.TabularSection.Состав.Attribute.Пользователь - View + Edit false + + + Catalog.ВидыКонтактнойИнформации.Attribute.МожноИзменятьСпособРедактирования Edit false @@ -2317,6 +2871,13 @@ true + + InformationRegister.ОриентирыАдресныхОбъектов.Resource.АдресныйОбъект + + Edit + false + + CommonForm.ВключениеПроверкиКонтрагентов @@ -2324,6 +2885,17 @@ true + + Constant.ИспользоватьДатыЗапретаИзменения + + Read + true + + + View + true + + Constant.ИспользоватьПрочиеВзаимодействия @@ -2372,7 +2944,11 @@ - DataProcessor.ЗагрузкаДанныхИзФайла.Command.ЗагрузкаДанныхИзФайла + InformationRegister.ИдентификаторыОбъектовВерсийРасширений + + Read + true + View true @@ -2414,6 +2990,13 @@ true + + SessionParameter.УстановленныеРасширения + + Get + true + + CommonCommand.ПерсональнаяНастройкаПроксиСервера @@ -2475,6 +3058,24 @@ false + + SessionParameter.ДействующиеДатыЗапретаИзменения + + Get + true + + + + InformationRegister.АдресныеОбъекты + + Read + true + + + View + true + + CommonForm.ДлительнаяОперация @@ -2494,7 +3095,7 @@ - DataProcessor.ОбновлениеИнформационнойБазы + DataProcessor.РезультатыОбновленияПрограммы Use true @@ -2529,6 +3130,13 @@ true + + SessionParameter.АдресСвойствРасширений + + Get + true + + Constant.ИспользоватьОбщиеДополнительныеРеквизитыИСведения @@ -2616,6 +3224,25 @@ true + + InformationRegister.СеансыВерсийРасширений + + Read + true + + + Update + true + + + View + true + + + Edit + true + + Constant.ИспользоватьДатуНачалаЗадач @@ -2627,6 +3254,17 @@ true + + InformationRegister.ЗагруженныеВерсииАдресныхСведений + + Read + true + + + View + true + + InformationRegister.НапоминанияПользователя.Command.МоиНапоминания @@ -2634,4 +3272,5450 @@ true + + ПоЗначениям + // ПоЗначениям(Таблица, -, Модификатор, В1,П1, В2,П2, ..., В(n), П(n)). +// № параметра: 1, 2, 3, 4, 5, 6, 7, ..., 2+n*2,3+n*2. +// Читается так: "ограничение доступа по значениям". +// Параметры: +// Таблица - Имя текущей таблицы, например "Документ.ПоступлениеТоваровИУслуг". +// Модификатор - изменяет шаблон. +// 1-й модификатор - строка "НеОграничиватьДоступКГруппам" указывает +// безусловно выбирать группы иерархического справочника. +// Других модификаторов в этой версии шаблона не предусмотрено. +// В(n) - Вид доступа - имя вида доступа, например, "Организации". Для полей составного типа, с целью повышения +// производительности, лучше указать несколько имен, например, "Организации,ГруппыФизическихЛиц", +// чем использовать несколько блоков параметров, с одним и тем же именем поля. +// Специальные виды доступа "Условие", "НастройкиПрав", "ПравоЧтения", "ПравоИзменения" +// можно использовать только отдельно. +// Когда В(n) = "Условие" (или ""), тогда П(n) содержит строку условия на языке запросов, например +// "Т.Автор = &АвторизованныйПользователь", +// "ТИПЗНАЧЕНИЯ(Т.Владелец) = ТИП(Справочник.Организации)", где Т - псевдоним текущей таблицы. +// Когда В(n) = "ПравоЧтения" Или "ПравоИзменения", +// выполняется проверка наличия права на таблицу значения Т.П(n). +// П(n) - Поле проверяемого значения, кроме случая В(n) = "Условие" (или ""). +// Примечение: максимальное количество одновременно проверяемых значений полей можно увеличить, изменив шаблон, но +// необходимо будет указывать все параметры шаблона, т.е. указывать пустые строки, когда количество полей меньше максимального. +// Шаблон имеет структуру: +// <Общая часть условий> <Условие по группе параметров 1> И <Условие по группе параметров 2> И ... <Условие по группе параметров(n)> +// Пример: +// ПоЗначениям("Документ.ПоступлениеТоваровИУслуг", "", "", +// "Организации","Организация", +// "Поставщики","Контрагент", "","", ...) + +// Проверка правильности параметра Право. +#Если Не ("#Параметр(2)" = "Чтение" Или "#Параметр(2)" = "Добавление" Или + "#Параметр(2)" = "Изменение" Или "#Параметр(2)" = "Удаление" Или "#Параметр(2)" = "") + Или #ИмяТекущегоПраваДоступа <> "Чтение" И "#Параметр(2)" = "Чтение" + Или #ИмяТекущегоПраваДоступа = "Чтение" И "#Параметр(2)" <> "Чтение" И "#Параметр(2)" <> "" #Тогда + // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. + НеверноеПраво: #Параметр(2) +#КонецЕсли + +// Проверка правильности параметра ИмяТаблицы. +#Если "#Параметр(1)" <> #ИмяТекущейТаблицы #Тогда + // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. + НеверноеИмяТекущейТаблицы: "#Параметр(1)" +#КонецЕсли + +// Проверка правильности параметра Модификатор. +#Если Не ("#Параметр(3)" = "НеОграничиватьДоступКГруппам" Или "#Параметр(3)" = "") #Тогда + // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. + НеверныйМодификатор: #Параметр(3) +#КонецЕсли + +// Общая проверка использования ограничений доступа на уровне записей и +// проверка использования хотя бы одного ограничения из указанных видов доступа. +#Если &ОграничиватьДоступНаУровнеЗаписей + И Не (Истина + И ("#Параметр(4)" = "" И "#Параметр(5)" = "" + Или &ВидыДоступаСОтключеннымИспользованием = "Все" + И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(4),") + Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(4),")) + И ("#Параметр(6)" = "" И "#Параметр(7)" = "" + Или &ВидыДоступаСОтключеннымИспользованием = "Все" + И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(6),") + Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(6),")) + И ("#Параметр(8)" = "" И "#Параметр(9)" = "" + Или &ВидыДоступаСОтключеннымИспользованием = "Все" + И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(8),") + Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(8),")) + И ("#Параметр(10)" = "" И "#Параметр(11)" = "" + Или &ВидыДоступаСОтключеннымИспользованием = "Все" + И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(10),") + Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(10),")) + И ("#Параметр(12)" = "" И "#Параметр(13)" = "" + Или &ВидыДоступаСОтключеннымИспользованием = "Все" + И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(12),") + Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(12),")) + И ("#Параметр(14)" = "" И "#Параметр(15)" = "" + Или &ВидыДоступаСОтключеннымИспользованием = "Все" + И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(14),") + Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(14),")) + И ("#Параметр(16)" = "" И "#Параметр(17)" = "" + Или &ВидыДоступаСОтключеннымИспользованием = "Все" + И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(16),") + Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(16),")) + И ("#Параметр(18)" = "" И "#Параметр(19)" = "" + Или &ВидыДоступаСОтключеннымИспользованием = "Все" + И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(18),") + Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(18),")) + И ("#Параметр(20)" = "" И "#Параметр(21)" = "" + Или &ВидыДоступаСОтключеннымИспользованием = "Все" + И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(20),") + Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(20),")) + И ("#Параметр(22)" = "" И "#Параметр(23)" = "" + Или &ВидыДоступаСОтключеннымИспользованием = "Все" + И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(22),") + Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(22),")) + И ("#Параметр(24)" = "" И "#Параметр(25)" = "" + Или &ВидыДоступаСОтключеннымИспользованием = "Все" + И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(24),") + Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(24),")) + И ("#Параметр(26)" = "" И "#Параметр(27)" = "" + Или &ВидыДоступаСОтключеннымИспользованием = "Все" + И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(26),") + Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(26),")) + И ("#Параметр(28)" = "" И "#Параметр(29)" = "" + Или &ВидыДоступаСОтключеннымИспользованием = "Все" + И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(28),") + Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(28),")) + И ("#Параметр(30)" = "" И "#Параметр(31)" = "" + Или &ВидыДоступаСОтключеннымИспользованием = "Все" + И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(30),") + Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(30),")) + И ("#Параметр(32)" = "" И "#Параметр(33)" = "" + Или &ВидыДоступаСОтключеннымИспользованием = "Все" + И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(32),") + Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(32),")) + И ("#Параметр(34)" = "" И "#Параметр(35)" = "" + Или &ВидыДоступаСОтключеннымИспользованием = "Все" + И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(34),") + Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(34),")) + ) #Тогда + +Т ГДЕ // Т - псевдоним текущей таблицы (выбран коротким, чтобы сократить количество символов в тексте параметра-условия на языке запросов). + +// Безусловная выборка групп в иерархическом объекте метаданных (если нужно). +#Если "#Параметр(3)" = "НеОграничиватьДоступКГруппам" #Тогда + Т.ЭтоГруппа ИЛИ +#КонецЕсли + +ИСТИНА В +( // Проверка права пользователя на текущую таблицу в целом. + // Права на таблицы формируются по составу ролей профиля группы доступа. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ + Справочник.ИдентификаторыОбъектовМетаданных КАК СвойстваТекущейТаблицы + ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.ГруппыДоступа КАК ГруппыДоступа + ПО + СвойстваТекущейТаблицы.ПолноеИмя = "#Параметр(1)" + И ИСТИНА В + ( + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ + РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступа + ГДЕ + ТаблицыГруппДоступа.Таблица = СвойстваТекущейТаблицы.Ссылка + И ТаблицыГруппДоступа.ГруппаДоступа = ГруппыДоступа.Ссылка + #Если Не #ИмяТекущегоПраваДоступа = "Чтение" #Тогда + И ТаблицыГруппДоступа.Изменение + #КонецЕсли + ) + И ГруппыДоступа.Ссылка В + ( + ВЫБРАТЬ + ГруппыДоступаПользователи.Ссылка КАК ГруппаДоступа + ИЗ + Справочник.ГруппыДоступа.Пользователи КАК ГруппыДоступаПользователи + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ПО + СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь + И СоставыГруппПользователей.ГруппаПользователей = ГруппыДоступаПользователи.Пользователь + ) + ГДЕ + ( // Поиск значений заданных полей в разрешенных значениях групп доступа (пользователей). + +//// Проверка значения поля группы параметров 1. +#Если "#Параметр(4)" = "Условие" Или "#Параметр(4)" = "" #Тогда + // Когда имя вида доступа "Условие" (или ""), тогда вместо имени поля задано условие. + ( #Параметр(5) ) +#ИначеЕсли "#Параметр(4)" = "ПравоЧтения" Или "#Параметр(4)" = "ПравоИзменения" #Тогда + Т.#Параметр(5) <> НЕОПРЕДЕЛЕНО + И ИСТИНА В + ( // Проверка права пользователя на таблицу Значения, установленного в поле. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава + ГДЕ + ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка + И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТИПЗНАЧЕНИЯ(Т.#Параметр(5)) + #Если Не "#Параметр(4)" = "ПравоЧтения" #Тогда + И ТаблицыГруппДоступаПроверкаПрава.Изменение + #КонецЕсли + ) +#ИначеЕсли "#Параметр(4)" = "НастройкиПрав" #Тогда + + ( + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ( + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ПО + НаследованиеНастроек.Объект = Т.#Параметр(5) + И НастройкиПрав.Объект = НаследованиеНастроек.Родитель + #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда + И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияЧтения + #Иначе + #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда + И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка + #Иначе + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + #КонецЕсли + И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения + #КонецЕсли + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ПО + СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь + И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь + ) + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. + ( + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ + ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ПО + НаследованиеНастроек.Объект = Т.#Параметр(5) + И НастройкиПрав.Объект = НаследованиеНастроек.Родитель + #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда + И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияЧтения + #Иначе + #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда + И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка + #Иначе + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + #КонецЕсли + И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения + #КонецЕсли + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ПО + СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь + И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь + ) + ) +#ИначеЕсли Не СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(4),") #Тогда + // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. + #Если СтрСодержит("#Параметр(4)", ",") #Тогда + НеверныйВидДоступа: "#Параметр(4)" - "Список имен видов доступа не найден" + #Иначе + НеверныйВидДоступа: "#Параметр(4)" - "Имя вида доступа не найдено" + #КонецЕсли +#ИначеЕсли &ВидыДоступаСОтключеннымИспользованием <> "Все" + И Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(4),") #Тогда + + ( + ЕСТЬNULL(Т.#Параметр(5), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО + И + #Если (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(4),", ",Пользователи,")) + Или (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(4),", ",ВнешниеПользователи,")) #Тогда + НЕ + ( + НЕ ИСТИНА В + ( + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа + ГДЕ + ГруппыЗначенийДоступа.ЗначениеДоступа = Т.#Параметр(5) + И ГруппыЗначенийДоступа.ГруппаЗначенийДоступа = &АвторизованныйПользователь + ) + И НЕ + #Иначе + ( + #КонецЕсли + ВЫБОР + КОГДА ИСТИНА В + ( + #Если СтрСодержит(&ВидыДоступаБезГруппДляЗначенияДоступа, ",#Параметр(4),") #Тогда + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения + ГДЕ + Значения.ГруппаДоступа = ГруппыДоступа.Ссылка + И Значения.ЗначениеДоступа = Т.#Параметр(5) + #ИначеЕсли "Т.#Параметр(5)" = "Т.Ссылка" #Тогда + #Если СтрСодержит("#Параметр(4)", ",") #Тогда + // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. + НеверныйВидДоступа: "#Параметр(4)" - "При проверке таблицы значения доступа можно указывать только один вид доступа" + #ИначеЕсли СтрСодержит(&ВидыДоступаСОднойГруппойДляЗначенияДоступа, ",#Параметр(4),") #Тогда + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения + ГДЕ + Значения.ГруппаДоступа = ГруппыДоступа.Ссылка + И Значения.ЗначениеДоступа = Т.ГруппаДоступа + #Иначе // Значения доступа, для которых можно указать несколько групп значений доступа. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения + ВНУТРЕННЕЕ СОЕДИНЕНИЕ #Параметр(1).ГруппыДоступа КАК ГруппыЗначений + ПО + Значения.ГруппаДоступа = ГруппыДоступа.Ссылка + И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа + И ГруппыЗначений.Ссылка = Т.#Параметр(5) + #КонецЕсли + #Иначе + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + ПО + Значения.ГруппаДоступа = ГруппыДоступа.Ссылка + И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа + И ГруппыЗначений.ЗначениеДоступа = Т.#Параметр(5) + #КонецЕсли + ) + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ + = + ВЫБОР + КОГДА ИСТИНА В + ( + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию + ГДЕ + ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(Т.#Параметр(5)) + И ЗначенияПоУмолчанию.ВсеРазрешены = ЛОЖЬ + ) + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ + ) + ) +#Иначе + ИСТИНА +#КонецЕсли + +//// Проверка значения поля группы параметров 2. +#Если "#Параметр(6)" = "" И "#Параметр(7)" = "" #Тогда + // Группа параметров не используется. +#ИначеЕсли "#Параметр(6)" = "Условие" Или "#Параметр(6)" = "" #Тогда + // Когда имя вида доступа "Условие" (или ""), тогда вместо имени поля задано условие. + И ( #Параметр(7) ) +#ИначеЕсли "#Параметр(6)" = "ПравоЧтения" Или "#Параметр(6)" = "ПравоИзменения" #Тогда + И Т.#Параметр(7) <> НЕОПРЕДЕЛЕНО + И ИСТИНА В + ( // Проверка права пользователя на таблицу Значения, установленного в поле. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава + ГДЕ + ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка + И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТИПЗНАЧЕНИЯ(Т.#Параметр(7)) + #Если Не "#Параметр(6)" = "ПравоЧтения" #Тогда + И ТаблицыГруппДоступаПроверкаПрава.Изменение + #КонецЕсли + ) +#ИначеЕсли "#Параметр(6)" = "НастройкиПрав" #Тогда + И + ( + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ( + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ПО + НаследованиеНастроек.Объект = Т.#Параметр(7) + И НастройкиПрав.Объект = НаследованиеНастроек.Родитель + #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда + И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияЧтения + #Иначе + #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда + И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка + #Иначе + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + #КонецЕсли + И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения + #КонецЕсли + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ПО + СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь + И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь + ) + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. + ( + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ + ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ПО + НаследованиеНастроек.Объект = Т.#Параметр(7) + И НастройкиПрав.Объект = НаследованиеНастроек.Родитель + #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда + И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияЧтения + #Иначе + #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда + И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка + #Иначе + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + #КонецЕсли + И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения + #КонецЕсли + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ПО + СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь + И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь + ) + ) +#ИначеЕсли Не СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(6),") #Тогда + // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. + #Если СтрСодержит("#Параметр(6)", ",") #Тогда + НеверныйВидДоступа: "#Параметр(6)" - "Список имен видов доступа не найден" + #Иначе + НеверныйВидДоступа: "#Параметр(6)" - "Имя вида доступа не найдено" + #КонецЕсли +#ИначеЕсли &ВидыДоступаСОтключеннымИспользованием <> "Все" + И Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(6),") #Тогда + И + ( + ЕСТЬNULL(Т.#Параметр(7), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО + И + #Если (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(6),", ",Пользователи,")) + Или (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(6),", ",ВнешниеПользователи,")) #Тогда + НЕ + ( + НЕ ИСТИНА В + ( + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа + ГДЕ + ГруппыЗначенийДоступа.ЗначениеДоступа = Т.#Параметр(7) + И ГруппыЗначенийДоступа.ГруппаЗначенийДоступа = &АвторизованныйПользователь + ) + И НЕ + #Иначе + ( + #КонецЕсли + ВЫБОР + КОГДА ИСТИНА В + ( + #Если СтрСодержит(&ВидыДоступаБезГруппДляЗначенияДоступа, ",#Параметр(6),") #Тогда + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения + ГДЕ + Значения.ГруппаДоступа = ГруппыДоступа.Ссылка + И Значения.ЗначениеДоступа = Т.#Параметр(7) + #ИначеЕсли "Т.#Параметр(7)" = "Т.Ссылка" #Тогда + #Если СтрСодержит("#Параметр(6)", ",") #Тогда + // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. + НеверныйВидДоступа: "#Параметр(6)" - "При проверке таблицы значения доступа можно указывать только один вид доступа" + #ИначеЕсли СтрСодержит(&ВидыДоступаСОднойГруппойДляЗначенияДоступа, ",#Параметр(6),") #Тогда + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения + ГДЕ + Значения.ГруппаДоступа = ГруппыДоступа.Ссылка + И Значения.ЗначениеДоступа = Т.ГруппаДоступа + #Иначе // Значения доступа, для которых можно указать несколько групп значений доступа. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения + ВНУТРЕННЕЕ СОЕДИНЕНИЕ #Параметр(1).ГруппыДоступа КАК ГруппыЗначений + ПО + Значения.ГруппаДоступа = ГруппыДоступа.Ссылка + И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа + И ГруппыЗначений.Ссылка = Т.#Параметр(7) + #КонецЕсли + #Иначе + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + ПО + Значения.ГруппаДоступа = ГруппыДоступа.Ссылка + И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа + И ГруппыЗначений.ЗначениеДоступа = Т.#Параметр(7) + #КонецЕсли + ) + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ + = + ВЫБОР + КОГДА ИСТИНА В + ( + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию + ГДЕ + ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(Т.#Параметр(7)) + И ЗначенияПоУмолчанию.ВсеРазрешены = ЛОЖЬ + ) + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ + ) + ) +#КонецЕсли + +//// Проверка значения поля группы параметров 3. +#Если "#Параметр(8)" = "" И "#Параметр(9)" = "" #Тогда + // Группа параметров не используется. +#ИначеЕсли "#Параметр(8)" = "Условие" Или "#Параметр(8)" = "" #Тогда + // Когда имя вида доступа "Условие" (или ""), тогда вместо имени поля задано условие. + И ( #Параметр(9) ) +#ИначеЕсли "#Параметр(8)" = "ПравоЧтения" Или "#Параметр(8)" = "ПравоИзменения" #Тогда + И Т.#Параметр(9) <> НЕОПРЕДЕЛЕНО + И ИСТИНА В + ( // Проверка права пользователя на таблицу Значения, установленного в поле. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава + ГДЕ + ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка + И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТИПЗНАЧЕНИЯ(Т.#Параметр(9)) + #Если Не "#Параметр(8)" = "ПравоЧтения" #Тогда + И ТаблицыГруппДоступаПроверкаПрава.Изменение + #КонецЕсли + ) +#ИначеЕсли "#Параметр(8)" = "НастройкиПрав" #Тогда + И + ( + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ( + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ПО + НаследованиеНастроек.Объект = Т.#Параметр(9) + И НастройкиПрав.Объект = НаследованиеНастроек.Родитель + #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда + И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияЧтения + #Иначе + #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда + И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка + #Иначе + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + #КонецЕсли + И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения + #КонецЕсли + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ПО + СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь + И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь + ) + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. + ( + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ + ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ПО + НаследованиеНастроек.Объект = Т.#Параметр(9) + И НастройкиПрав.Объект = НаследованиеНастроек.Родитель + #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда + И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияЧтения + #Иначе + #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда + И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка + #Иначе + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + #КонецЕсли + И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения + #КонецЕсли + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ПО + СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь + И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь + ) + ) +#ИначеЕсли Не СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(8),") #Тогда + // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. + #Если СтрСодержит("#Параметр(8)", ",") #Тогда + НеверныйВидДоступа: "#Параметр(8)" - "Список имен видов доступа не найден" + #Иначе + НеверныйВидДоступа: "#Параметр(8)" - "Имя вида доступа не найдено" + #КонецЕсли +#ИначеЕсли &ВидыДоступаСОтключеннымИспользованием <> "Все" + И Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(8),") #Тогда + И + ( + ЕСТЬNULL(Т.#Параметр(9), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО + И + #Если (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(8),", ",Пользователи,")) + Или (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(8),", ",ВнешниеПользователи,")) #Тогда + НЕ + ( + НЕ ИСТИНА В + ( + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа + ГДЕ + ГруппыЗначенийДоступа.ЗначениеДоступа = Т.#Параметр(9) + И ГруппыЗначенийДоступа.ГруппаЗначенийДоступа = &АвторизованныйПользователь + ) + И НЕ + #Иначе + ( + #КонецЕсли + ВЫБОР + КОГДА ИСТИНА В + ( + #Если СтрСодержит(&ВидыДоступаБезГруппДляЗначенияДоступа, ",#Параметр(8),") #Тогда + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения + ГДЕ + Значения.ГруппаДоступа = ГруппыДоступа.Ссылка + И Значения.ЗначениеДоступа = Т.#Параметр(9) + #ИначеЕсли "Т.#Параметр(9)" = "Т.Ссылка" #Тогда + #Если СтрСодержит("#Параметр(8)", ",") #Тогда + // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. + НеверныйВидДоступа: "#Параметр(8)" - "При проверке таблицы значения доступа можно указывать только один вид доступа" + #ИначеЕсли СтрСодержит(&ВидыДоступаСОднойГруппойДляЗначенияДоступа, ",#Параметр(8),") #Тогда + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения + ГДЕ + Значения.ГруппаДоступа = ГруппыДоступа.Ссылка + И Значения.ЗначениеДоступа = Т.ГруппаДоступа + #Иначе // Значения доступа, для которых можно указать несколько групп значений доступа. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения + ВНУТРЕННЕЕ СОЕДИНЕНИЕ #Параметр(1).ГруппыДоступа КАК ГруппыЗначений + ПО + Значения.ГруппаДоступа = ГруппыДоступа.Ссылка + И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа + И ГруппыЗначений.Ссылка = Т.#Параметр(9) + #КонецЕсли + #Иначе + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + ПО + Значения.ГруппаДоступа = ГруппыДоступа.Ссылка + И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа + И ГруппыЗначений.ЗначениеДоступа = Т.#Параметр(9) + #КонецЕсли + ) + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ + = + ВЫБОР + КОГДА ИСТИНА В + ( + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию + ГДЕ + ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(Т.#Параметр(9)) + И ЗначенияПоУмолчанию.ВсеРазрешены = ЛОЖЬ + ) + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ + ) + ) +#КонецЕсли + +//// Проверка значения поля группы параметров 4. +#Если "#Параметр(10)" = "" И "#Параметр(11)" = "" #Тогда + // Группа параметров не используется. +#ИначеЕсли "#Параметр(10)" = "Условие" Или "#Параметр(10)" = "" #Тогда + // Когда имя вида доступа "Условие" (или ""), тогда вместо имени поля задано условие. + И ( #Параметр(11) ) +#ИначеЕсли "#Параметр(10)" = "ПравоЧтения" Или "#Параметр(10)" = "ПравоИзменения" #Тогда + И Т.#Параметр(11) <> НЕОПРЕДЕЛЕНО + И ИСТИНА В + ( // Проверка права пользователя на таблицу Значения, установленного в поле. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава + ГДЕ + ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка + И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТИПЗНАЧЕНИЯ(Т.#Параметр(11)) + #Если Не "#Параметр(10)" = "ПравоЧтения" #Тогда + И ТаблицыГруппДоступаПроверкаПрава.Изменение + #КонецЕсли + ) +#ИначеЕсли "#Параметр(10)" = "НастройкиПрав" #Тогда + И + ( + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ( + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ПО + НаследованиеНастроек.Объект = Т.#Параметр(11) + И НастройкиПрав.Объект = НаследованиеНастроек.Родитель + #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда + И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияЧтения + #Иначе + #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда + И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка + #Иначе + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + #КонецЕсли + И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения + #КонецЕсли + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ПО + СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь + И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь + ) + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. + ( + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ + ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ПО + НаследованиеНастроек.Объект = Т.#Параметр(11) + И НастройкиПрав.Объект = НаследованиеНастроек.Родитель + #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда + И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияЧтения + #Иначе + #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда + И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка + #Иначе + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + #КонецЕсли + И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения + #КонецЕсли + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ПО + СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь + И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь + ) + ) +#ИначеЕсли Не СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(10),") #Тогда + // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. + #Если СтрСодержит("#Параметр(10)", ",") #Тогда + НеверныйВидДоступа: "#Параметр(10)" - "Список имен видов доступа не найден" + #Иначе + НеверныйВидДоступа: "#Параметр(10)" - "Имя вида доступа не найдено" + #КонецЕсли +#ИначеЕсли &ВидыДоступаСОтключеннымИспользованием <> "Все" + И Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(10),") #Тогда + И + ( + ЕСТЬNULL(Т.#Параметр(11), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО + И + #Если (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(10),", ",Пользователи,")) + Или (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(10),", ",ВнешниеПользователи,")) #Тогда + НЕ + ( + НЕ ИСТИНА В + ( + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа + ГДЕ + ГруппыЗначенийДоступа.ЗначениеДоступа = Т.#Параметр(11) + И ГруппыЗначенийДоступа.ГруппаЗначенийДоступа = &АвторизованныйПользователь + ) + И НЕ + #Иначе + ( + #КонецЕсли + ВЫБОР + КОГДА ИСТИНА В + ( + #Если СтрСодержит(&ВидыДоступаБезГруппДляЗначенияДоступа, ",#Параметр(10),") #Тогда + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения + ГДЕ + Значения.ГруппаДоступа = ГруппыДоступа.Ссылка + И Значения.ЗначениеДоступа = Т.#Параметр(11) + #ИначеЕсли "Т.#Параметр(11)" = "Т.Ссылка" #Тогда + #Если СтрСодержит("#Параметр(10)", ",") #Тогда + // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. + НеверныйВидДоступа: "#Параметр(10)" - "При проверке таблицы значения доступа можно указывать только один вид доступа" + #ИначеЕсли СтрСодержит(&ВидыДоступаСОднойГруппойДляЗначенияДоступа, ",#Параметр(10),") #Тогда + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения + ГДЕ + Значения.ГруппаДоступа = ГруппыДоступа.Ссылка + И Значения.ЗначениеДоступа = Т.ГруппаДоступа + #Иначе // Значения доступа, для которых можно указать несколько групп значений доступа. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения + ВНУТРЕННЕЕ СОЕДИНЕНИЕ #Параметр(1).ГруппыДоступа КАК ГруппыЗначений + ПО + Значения.ГруппаДоступа = ГруппыДоступа.Ссылка + И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа + И ГруппыЗначений.Ссылка = Т.#Параметр(11) + #КонецЕсли + #Иначе + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + ПО + Значения.ГруппаДоступа = ГруппыДоступа.Ссылка + И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа + И ГруппыЗначений.ЗначениеДоступа = Т.#Параметр(11) + #КонецЕсли + ) + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ + = + ВЫБОР + КОГДА ИСТИНА В + ( + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию + ГДЕ + ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(Т.#Параметр(11)) + И ЗначенияПоУмолчанию.ВсеРазрешены = ЛОЖЬ + ) + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ + ) + ) +#КонецЕсли + +//// Проверка значения поля группы параметров 5. +#Если "#Параметр(12)" = "" И "#Параметр(13)" = "" #Тогда + // Группа параметров не используется. +#ИначеЕсли "#Параметр(12)" = "Условие" Или "#Параметр(12)" = "" #Тогда + // Когда имя вида доступа "Условие" (или ""), тогда вместо имени поля задано условие. + И ( #Параметр(13) ) +#ИначеЕсли "#Параметр(12)" = "ПравоЧтения" Или "#Параметр(12)" = "ПравоИзменения" #Тогда + И Т.#Параметр(13) <> НЕОПРЕДЕЛЕНО + И ИСТИНА В + ( // Проверка права пользователя на таблицу Значения, установленного в поле. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава + ГДЕ + ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка + И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТИПЗНАЧЕНИЯ(Т.#Параметр(13)) + #Если Не "#Параметр(12)" = "ПравоЧтения" #Тогда + И ТаблицыГруппДоступаПроверкаПрава.Изменение + #КонецЕсли + ) +#ИначеЕсли "#Параметр(12)" = "НастройкиПрав" #Тогда + И + ( + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ( + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ПО + НаследованиеНастроек.Объект = Т.#Параметр(13) + И НастройкиПрав.Объект = НаследованиеНастроек.Родитель + #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда + И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияЧтения + #Иначе + #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда + И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка + #Иначе + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + #КонецЕсли + И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения + #КонецЕсли + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ПО + СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь + И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь + ) + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. + ( + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ + ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ПО + НаследованиеНастроек.Объект = Т.#Параметр(13) + И НастройкиПрав.Объект = НаследованиеНастроек.Родитель + #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда + И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияЧтения + #Иначе + #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда + И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка + #Иначе + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + #КонецЕсли + И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения + #КонецЕсли + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ПО + СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь + И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь + ) + ) +#ИначеЕсли Не СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(12),") #Тогда + // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. + #Если СтрСодержит("#Параметр(12)", ",") #Тогда + НеверныйВидДоступа: "#Параметр(12)" - "Список имен видов доступа не найден" + #Иначе + НеверныйВидДоступа: "#Параметр(12)" - "Имя вида доступа не найдено" + #КонецЕсли +#ИначеЕсли &ВидыДоступаСОтключеннымИспользованием <> "Все" + И Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(12),") #Тогда + И + ( + ЕСТЬNULL(Т.#Параметр(13), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО + И + #Если (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(12),", ",Пользователи,")) + Или (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(12),", ",ВнешниеПользователи,")) #Тогда + НЕ + ( + НЕ ИСТИНА В + ( + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа + ГДЕ + ГруппыЗначенийДоступа.ЗначениеДоступа = Т.#Параметр(13) + И ГруппыЗначенийДоступа.ГруппаЗначенийДоступа = &АвторизованныйПользователь + ) + И НЕ + #Иначе + ( + #КонецЕсли + ВЫБОР + КОГДА ИСТИНА В + ( + #Если СтрСодержит(&ВидыДоступаБезГруппДляЗначенияДоступа, ",#Параметр(12),") #Тогда + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения + ГДЕ + Значения.ГруппаДоступа = ГруппыДоступа.Ссылка + И Значения.ЗначениеДоступа = Т.#Параметр(13) + #ИначеЕсли "Т.#Параметр(13)" = "Т.Ссылка" #Тогда + #Если СтрСодержит("#Параметр(12)", ",") #Тогда + // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. + НеверныйВидДоступа: "#Параметр(12)" - "При проверке таблицы значения доступа можно указывать только один вид доступа" + #ИначеЕсли СтрСодержит(&ВидыДоступаСОднойГруппойДляЗначенияДоступа, ",#Параметр(12),") #Тогда + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения + ГДЕ + Значения.ГруппаДоступа = ГруппыДоступа.Ссылка + И Значения.ЗначениеДоступа = Т.ГруппаДоступа + #Иначе // Значения доступа, для которых можно указать несколько групп значений доступа. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения + ВНУТРЕННЕЕ СОЕДИНЕНИЕ #Параметр(1).ГруппыДоступа КАК ГруппыЗначений + ПО + Значения.ГруппаДоступа = ГруппыДоступа.Ссылка + И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа + И ГруппыЗначений.Ссылка = Т.#Параметр(13) + #КонецЕсли + #Иначе + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + ПО + Значения.ГруппаДоступа = ГруппыДоступа.Ссылка + И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа + И ГруппыЗначений.ЗначениеДоступа = Т.#Параметр(13) + #КонецЕсли + ) + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ + = + ВЫБОР + КОГДА ИСТИНА В + ( + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию + ГДЕ + ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(Т.#Параметр(13)) + И ЗначенияПоУмолчанию.ВсеРазрешены = ЛОЖЬ + ) + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ + ) + ) +#КонецЕсли + +//// Проверка значения поля группы параметров 6. +#Если "#Параметр(14)" = "" И "#Параметр(15)" = "" #Тогда + // Группа параметров не используется. +#ИначеЕсли "#Параметр(14)" = "Условие" Или "#Параметр(14)" = "" #Тогда + // Когда имя вида доступа "Условие" (или ""), тогда вместо имени поля задано условие. + И ( #Параметр(15) ) +#ИначеЕсли "#Параметр(14)" = "ПравоЧтения" Или "#Параметр(14)" = "ПравоИзменения" #Тогда + И Т.#Параметр(15) <> НЕОПРЕДЕЛЕНО + И ИСТИНА В + ( // Проверка права пользователя на таблицу Значения, установленного в поле. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава + ГДЕ + ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка + И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТИПЗНАЧЕНИЯ(Т.#Параметр(15)) + #Если Не "#Параметр(14)" = "ПравоЧтения" #Тогда + И ТаблицыГруппДоступаПроверкаПрава.Изменение + #КонецЕсли + ) +#ИначеЕсли "#Параметр(14)" = "НастройкиПрав" #Тогда + И + ( + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ( + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ПО + НаследованиеНастроек.Объект = Т.#Параметр(15) + И НастройкиПрав.Объект = НаследованиеНастроек.Родитель + #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда + И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияЧтения + #Иначе + #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда + И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка + #Иначе + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + #КонецЕсли + И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения + #КонецЕсли + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ПО + СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь + И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь + ) + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. + ( + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ + ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ПО + НаследованиеНастроек.Объект = Т.#Параметр(15) + И НастройкиПрав.Объект = НаследованиеНастроек.Родитель + #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда + И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияЧтения + #Иначе + #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда + И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка + #Иначе + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + #КонецЕсли + И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения + #КонецЕсли + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ПО + СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь + И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь + ) + ) +#ИначеЕсли Не СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(14),") #Тогда + // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. + #Если СтрСодержит("#Параметр(14)", ",") #Тогда + НеверныйВидДоступа: "#Параметр(14)" - "Список имен видов доступа не найден" + #Иначе + НеверныйВидДоступа: "#Параметр(14)" - "Имя вида доступа не найдено" + #КонецЕсли +#ИначеЕсли &ВидыДоступаСОтключеннымИспользованием <> "Все" + И Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(14),") #Тогда + И + ( + ЕСТЬNULL(Т.#Параметр(15), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО + И + #Если (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(14),", ",Пользователи,")) + Или (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(14),", ",ВнешниеПользователи,")) #Тогда + НЕ + ( + НЕ ИСТИНА В + ( + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа + ГДЕ + ГруппыЗначенийДоступа.ЗначениеДоступа = Т.#Параметр(15) + И ГруппыЗначенийДоступа.ГруппаЗначенийДоступа = &АвторизованныйПользователь + ) + И НЕ + #Иначе + ( + #КонецЕсли + ВЫБОР + КОГДА ИСТИНА В + ( + #Если СтрСодержит(&ВидыДоступаБезГруппДляЗначенияДоступа, ",#Параметр(14),") #Тогда + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения + ГДЕ + Значения.ГруппаДоступа = ГруппыДоступа.Ссылка + И Значения.ЗначениеДоступа = Т.#Параметр(15) + #ИначеЕсли "Т.#Параметр(15)" = "Т.Ссылка" #Тогда + #Если СтрСодержит("#Параметр(14)", ",") #Тогда + // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. + НеверныйВидДоступа: "#Параметр(14)" - "При проверке таблицы значения доступа можно указывать только один вид доступа" + #ИначеЕсли СтрСодержит(&ВидыДоступаСОднойГруппойДляЗначенияДоступа, ",#Параметр(14),") #Тогда + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения + ГДЕ + Значения.ГруппаДоступа = ГруппыДоступа.Ссылка + И Значения.ЗначениеДоступа = Т.ГруппаДоступа + #Иначе // Значения доступа, для которых можно указать несколько групп значений доступа. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения + ВНУТРЕННЕЕ СОЕДИНЕНИЕ #Параметр(1).ГруппыДоступа КАК ГруппыЗначений + ПО + Значения.ГруппаДоступа = ГруппыДоступа.Ссылка + И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа + И ГруппыЗначений.Ссылка = Т.#Параметр(15) + #КонецЕсли + #Иначе + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + ПО + Значения.ГруппаДоступа = ГруппыДоступа.Ссылка + И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа + И ГруппыЗначений.ЗначениеДоступа = Т.#Параметр(15) + #КонецЕсли + ) + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ + = + ВЫБОР + КОГДА ИСТИНА В + ( + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию + ГДЕ + ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(Т.#Параметр(15)) + И ЗначенияПоУмолчанию.ВсеРазрешены = ЛОЖЬ + ) + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ + ) + ) +#КонецЕсли + +//// Проверка значения поля группы параметров 7. +#Если "#Параметр(16)" = "" И "#Параметр(17)" = "" #Тогда + // Группа параметров не используется. +#ИначеЕсли "#Параметр(16)" = "Условие" Или "#Параметр(16)" = "" #Тогда + // Когда имя вида доступа "Условие" (или ""), тогда вместо имени поля задано условие. + И ( #Параметр(17) ) +#ИначеЕсли "#Параметр(16)" = "ПравоЧтения" Или "#Параметр(16)" = "ПравоИзменения" #Тогда + И Т.#Параметр(17) <> НЕОПРЕДЕЛЕНО + И ИСТИНА В + ( // Проверка права пользователя на таблицу Значения, установленного в поле. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава + ГДЕ + ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка + И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТИПЗНАЧЕНИЯ(Т.#Параметр(17)) + #Если Не "#Параметр(16)" = "ПравоЧтения" #Тогда + И ТаблицыГруппДоступаПроверкаПрава.Изменение + #КонецЕсли + ) +#ИначеЕсли "#Параметр(16)" = "НастройкиПрав" #Тогда + И + ( + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ( + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ПО + НаследованиеНастроек.Объект = Т.#Параметр(17) + И НастройкиПрав.Объект = НаследованиеНастроек.Родитель + #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда + И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияЧтения + #Иначе + #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда + И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка + #Иначе + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + #КонецЕсли + И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения + #КонецЕсли + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ПО + СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь + И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь + ) + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. + ( + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ + ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ПО + НаследованиеНастроек.Объект = Т.#Параметр(17) + И НастройкиПрав.Объект = НаследованиеНастроек.Родитель + #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда + И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияЧтения + #Иначе + #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда + И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка + #Иначе + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + #КонецЕсли + И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения + #КонецЕсли + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ПО + СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь + И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь + ) + ) +#ИначеЕсли Не СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(16),") #Тогда + // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. + #Если СтрСодержит("#Параметр(16)", ",") #Тогда + НеверныйВидДоступа: "#Параметр(16)" - "Список имен видов доступа не найден" + #Иначе + НеверныйВидДоступа: "#Параметр(16)" - "Имя вида доступа не найдено" + #КонецЕсли +#ИначеЕсли &ВидыДоступаСОтключеннымИспользованием <> "Все" + И Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(16),") #Тогда + И + ( + ЕСТЬNULL(Т.#Параметр(17), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО + И + #Если (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(16),", ",Пользователи,")) + Или (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(16),", ",ВнешниеПользователи,")) #Тогда + НЕ + ( + НЕ ИСТИНА В + ( + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа + ГДЕ + ГруппыЗначенийДоступа.ЗначениеДоступа = Т.#Параметр(17) + И ГруппыЗначенийДоступа.ГруппаЗначенийДоступа = &АвторизованныйПользователь + ) + И НЕ + #Иначе + ( + #КонецЕсли + ВЫБОР + КОГДА ИСТИНА В + ( + #Если СтрСодержит(&ВидыДоступаБезГруппДляЗначенияДоступа, ",#Параметр(16),") #Тогда + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения + ГДЕ + Значения.ГруппаДоступа = ГруппыДоступа.Ссылка + И Значения.ЗначениеДоступа = Т.#Параметр(17) + #ИначеЕсли "Т.#Параметр(17)" = "Т.Ссылка" #Тогда + #Если СтрСодержит("#Параметр(16)", ",") #Тогда + // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. + НеверныйВидДоступа: "#Параметр(16)" - "При проверке таблицы значения доступа можно указывать только один вид доступа" + #ИначеЕсли СтрСодержит(&ВидыДоступаСОднойГруппойДляЗначенияДоступа, ",#Параметр(16),") #Тогда + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения + ГДЕ + Значения.ГруппаДоступа = ГруппыДоступа.Ссылка + И Значения.ЗначениеДоступа = Т.ГруппаДоступа + #Иначе // Значения доступа, для которых можно указать несколько групп значений доступа. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения + ВНУТРЕННЕЕ СОЕДИНЕНИЕ #Параметр(1).ГруппыДоступа КАК ГруппыЗначений + ПО + Значения.ГруппаДоступа = ГруппыДоступа.Ссылка + И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа + И ГруппыЗначений.Ссылка = Т.#Параметр(17) + #КонецЕсли + #Иначе + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + ПО + Значения.ГруппаДоступа = ГруппыДоступа.Ссылка + И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа + И ГруппыЗначений.ЗначениеДоступа = Т.#Параметр(17) + #КонецЕсли + ) + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ + = + ВЫБОР + КОГДА ИСТИНА В + ( + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию + ГДЕ + ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(Т.#Параметр(17)) + И ЗначенияПоУмолчанию.ВсеРазрешены = ЛОЖЬ + ) + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ + ) + ) +#КонецЕсли + +//// Проверка значения поля группы параметров 8. +#Если "#Параметр(18)" = "" И "#Параметр(19)" = "" #Тогда + // Группа параметров не используется. +#ИначеЕсли "#Параметр(18)" = "Условие" Или "#Параметр(18)" = "" #Тогда + // Когда имя вида доступа "Условие" (или ""), тогда вместо имени поля задано условие. + И ( #Параметр(19) ) +#ИначеЕсли "#Параметр(18)" = "ПравоЧтения" Или "#Параметр(18)" = "ПравоИзменения" #Тогда + И Т.#Параметр(19) <> НЕОПРЕДЕЛЕНО + И ИСТИНА В + ( // Проверка права пользователя на таблицу Значения, установленного в поле. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава + ГДЕ + ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка + И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТИПЗНАЧЕНИЯ(Т.#Параметр(19)) + #Если Не "#Параметр(18)" = "ПравоЧтения" #Тогда + И ТаблицыГруппДоступаПроверкаПрава.Изменение + #КонецЕсли + ) +#ИначеЕсли "#Параметр(18)" = "НастройкиПрав" #Тогда + И + ( + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ( + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ПО + НаследованиеНастроек.Объект = Т.#Параметр(19) + И НастройкиПрав.Объект = НаследованиеНастроек.Родитель + #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда + И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияЧтения + #Иначе + #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда + И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка + #Иначе + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + #КонецЕсли + И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения + #КонецЕсли + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ПО + СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь + И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь + ) + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. + ( + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ + ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ПО + НаследованиеНастроек.Объект = Т.#Параметр(19) + И НастройкиПрав.Объект = НаследованиеНастроек.Родитель + #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда + И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияЧтения + #Иначе + #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда + И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка + #Иначе + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + #КонецЕсли + И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения + #КонецЕсли + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ПО + СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь + И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь + ) + ) +#ИначеЕсли Не СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(18),") #Тогда + // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. + #Если СтрСодержит("#Параметр(18)", ",") #Тогда + НеверныйВидДоступа: "#Параметр(18)" - "Список имен видов доступа не найден" + #Иначе + НеверныйВидДоступа: "#Параметр(18)" - "Имя вида доступа не найдено" + #КонецЕсли +#ИначеЕсли &ВидыДоступаСОтключеннымИспользованием <> "Все" + И Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(18),") #Тогда + И + ( + ЕСТЬNULL(Т.#Параметр(19), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО + И + #Если (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(18),", ",Пользователи,")) + Или (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(18),", ",ВнешниеПользователи,")) #Тогда + НЕ + ( + НЕ ИСТИНА В + ( + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа + ГДЕ + ГруппыЗначенийДоступа.ЗначениеДоступа = Т.#Параметр(19) + И ГруппыЗначенийДоступа.ГруппаЗначенийДоступа = &АвторизованныйПользователь + ) + И НЕ + #Иначе + ( + #КонецЕсли + ВЫБОР + КОГДА ИСТИНА В + ( + #Если СтрСодержит(&ВидыДоступаБезГруппДляЗначенияДоступа, ",#Параметр(18),") #Тогда + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения + ГДЕ + Значения.ГруппаДоступа = ГруппыДоступа.Ссылка + И Значения.ЗначениеДоступа = Т.#Параметр(19) + #ИначеЕсли "Т.#Параметр(19)" = "Т.Ссылка" #Тогда + #Если СтрСодержит("#Параметр(18)", ",") #Тогда + // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. + НеверныйВидДоступа: "#Параметр(18)" - "При проверке таблицы значения доступа можно указывать только один вид доступа" + #ИначеЕсли СтрСодержит(&ВидыДоступаСОднойГруппойДляЗначенияДоступа, ",#Параметр(18),") #Тогда + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения + ГДЕ + Значения.ГруппаДоступа = ГруппыДоступа.Ссылка + И Значения.ЗначениеДоступа = Т.ГруппаДоступа + #Иначе // Значения доступа, для которых можно указать несколько групп значений доступа. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения + ВНУТРЕННЕЕ СОЕДИНЕНИЕ #Параметр(1).ГруппыДоступа КАК ГруппыЗначений + ПО + Значения.ГруппаДоступа = ГруппыДоступа.Ссылка + И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа + И ГруппыЗначений.Ссылка = Т.#Параметр(19) + #КонецЕсли + #Иначе + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + ПО + Значения.ГруппаДоступа = ГруппыДоступа.Ссылка + И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа + И ГруппыЗначений.ЗначениеДоступа = Т.#Параметр(19) + #КонецЕсли + ) + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ + = + ВЫБОР + КОГДА ИСТИНА В + ( + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию + ГДЕ + ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(Т.#Параметр(19)) + И ЗначенияПоУмолчанию.ВсеРазрешены = ЛОЖЬ + ) + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ + ) + ) +#КонецЕсли + +//// Проверка значения поля группы параметров 9. +#Если "#Параметр(20)" = "" И "#Параметр(21)" = "" #Тогда + // Группа параметров не используется. +#ИначеЕсли "#Параметр(20)" = "Условие" Или "#Параметр(20)" = "" #Тогда + // Когда имя вида доступа "Условие" (или ""), тогда вместо имени поля задано условие. + И ( #Параметр(21) ) +#ИначеЕсли "#Параметр(20)" = "ПравоЧтения" Или "#Параметр(20)" = "ПравоИзменения" #Тогда + И Т.#Параметр(21) <> НЕОПРЕДЕЛЕНО + И ИСТИНА В + ( // Проверка права пользователя на таблицу Значения, установленного в поле. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава + ГДЕ + ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка + И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТИПЗНАЧЕНИЯ(Т.#Параметр(21)) + #Если Не "#Параметр(20)" = "ПравоЧтения" #Тогда + И ТаблицыГруппДоступаПроверкаПрава.Изменение + #КонецЕсли + ) +#ИначеЕсли "#Параметр(20)" = "НастройкиПрав" #Тогда + И + ( + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ( + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ПО + НаследованиеНастроек.Объект = Т.#Параметр(21) + И НастройкиПрав.Объект = НаследованиеНастроек.Родитель + #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда + И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияЧтения + #Иначе + #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда + И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка + #Иначе + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + #КонецЕсли + И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения + #КонецЕсли + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ПО + СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь + И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь + ) + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. + ( + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ + ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ПО + НаследованиеНастроек.Объект = Т.#Параметр(21) + И НастройкиПрав.Объект = НаследованиеНастроек.Родитель + #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда + И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияЧтения + #Иначе + #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда + И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка + #Иначе + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + #КонецЕсли + И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения + #КонецЕсли + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ПО + СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь + И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь + ) + ) +#ИначеЕсли Не СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(20),") #Тогда + // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. + #Если СтрСодержит("#Параметр(20)", ",") #Тогда + НеверныйВидДоступа: "#Параметр(20)" - "Список имен видов доступа не найден" + #Иначе + НеверныйВидДоступа: "#Параметр(20)" - "Имя вида доступа не найдено" + #КонецЕсли +#ИначеЕсли &ВидыДоступаСОтключеннымИспользованием <> "Все" + И Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(20),") #Тогда + И + ( + ЕСТЬNULL(Т.#Параметр(21), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО + И + #Если (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(20),", ",Пользователи,")) + Или (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(20),", ",ВнешниеПользователи,")) #Тогда + НЕ + ( + НЕ ИСТИНА В + ( + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа + ГДЕ + ГруппыЗначенийДоступа.ЗначениеДоступа = Т.#Параметр(21) + И ГруппыЗначенийДоступа.ГруппаЗначенийДоступа = &АвторизованныйПользователь + ) + И НЕ + #Иначе + ( + #КонецЕсли + ВЫБОР + КОГДА ИСТИНА В + ( + #Если СтрСодержит(&ВидыДоступаБезГруппДляЗначенияДоступа, ",#Параметр(20),") #Тогда + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения + ГДЕ + Значения.ГруппаДоступа = ГруппыДоступа.Ссылка + И Значения.ЗначениеДоступа = Т.#Параметр(21) + #ИначеЕсли "Т.#Параметр(21)" = "Т.Ссылка" #Тогда + #Если СтрСодержит("#Параметр(20)", ",") #Тогда + // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. + НеверныйВидДоступа: "#Параметр(20)" - "При проверке таблицы значения доступа можно указывать только один вид доступа" + #ИначеЕсли СтрСодержит(&ВидыДоступаСОднойГруппойДляЗначенияДоступа, ",#Параметр(20),") #Тогда + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения + ГДЕ + Значения.ГруппаДоступа = ГруппыДоступа.Ссылка + И Значения.ЗначениеДоступа = Т.ГруппаДоступа + #Иначе // Значения доступа, для которых можно указать несколько групп значений доступа. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения + ВНУТРЕННЕЕ СОЕДИНЕНИЕ #Параметр(1).ГруппыДоступа КАК ГруппыЗначений + ПО + Значения.ГруппаДоступа = ГруппыДоступа.Ссылка + И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа + И ГруппыЗначений.Ссылка = Т.#Параметр(21) + #КонецЕсли + #Иначе + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + ПО + Значения.ГруппаДоступа = ГруппыДоступа.Ссылка + И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа + И ГруппыЗначений.ЗначениеДоступа = Т.#Параметр(21) + #КонецЕсли + ) + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ + = + ВЫБОР + КОГДА ИСТИНА В + ( + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию + ГДЕ + ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(Т.#Параметр(21)) + И ЗначенияПоУмолчанию.ВсеРазрешены = ЛОЖЬ + ) + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ + ) + ) +#КонецЕсли + +//// Проверка значения поля группы параметров 10. +#Если "#Параметр(22)" = "" И "#Параметр(23)" = "" #Тогда + // Группа параметров не используется. +#ИначеЕсли "#Параметр(22)" = "Условие" Или "#Параметр(22)" = "" #Тогда + // Когда имя вида доступа "Условие" (или ""), тогда вместо имени поля задано условие. + И ( #Параметр(23) ) +#ИначеЕсли "#Параметр(22)" = "ПравоЧтения" Или "#Параметр(22)" = "ПравоИзменения" #Тогда + И Т.#Параметр(23) <> НЕОПРЕДЕЛЕНО + И ИСТИНА В + ( // Проверка права пользователя на таблицу Значения, установленного в поле. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава + ГДЕ + ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка + И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТИПЗНАЧЕНИЯ(Т.#Параметр(23)) + #Если Не "#Параметр(22)" = "ПравоЧтения" #Тогда + И ТаблицыГруппДоступаПроверкаПрава.Изменение + #КонецЕсли + ) +#ИначеЕсли "#Параметр(22)" = "НастройкиПрав" #Тогда + И + ( + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ( + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ПО + НаследованиеНастроек.Объект = Т.#Параметр(23) + И НастройкиПрав.Объект = НаследованиеНастроек.Родитель + #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда + И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияЧтения + #Иначе + #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда + И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка + #Иначе + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + #КонецЕсли + И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения + #КонецЕсли + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ПО + СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь + И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь + ) + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. + ( + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ + ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ПО + НаследованиеНастроек.Объект = Т.#Параметр(23) + И НастройкиПрав.Объект = НаследованиеНастроек.Родитель + #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда + И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияЧтения + #Иначе + #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда + И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка + #Иначе + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + #КонецЕсли + И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения + #КонецЕсли + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ПО + СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь + И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь + ) + ) +#ИначеЕсли Не СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(22),") #Тогда + // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. + #Если СтрСодержит("#Параметр(22)", ",") #Тогда + НеверныйВидДоступа: "#Параметр(22)" - "Список имен видов доступа не найден" + #Иначе + НеверныйВидДоступа: "#Параметр(22)" - "Имя вида доступа не найдено" + #КонецЕсли +#ИначеЕсли &ВидыДоступаСОтключеннымИспользованием <> "Все" + И Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(22),") #Тогда + И + ( + ЕСТЬNULL(Т.#Параметр(23), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО + И + #Если (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(22),", ",Пользователи,")) + Или (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(22),", ",ВнешниеПользователи,")) #Тогда + НЕ + ( + НЕ ИСТИНА В + ( + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа + ГДЕ + ГруппыЗначенийДоступа.ЗначениеДоступа = Т.#Параметр(23) + И ГруппыЗначенийДоступа.ГруппаЗначенийДоступа = &АвторизованныйПользователь + ) + И НЕ + #Иначе + ( + #КонецЕсли + ВЫБОР + КОГДА ИСТИНА В + ( + #Если СтрСодержит(&ВидыДоступаБезГруппДляЗначенияДоступа, ",#Параметр(22),") #Тогда + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения + ГДЕ + Значения.ГруппаДоступа = ГруппыДоступа.Ссылка + И Значения.ЗначениеДоступа = Т.#Параметр(23) + #ИначеЕсли "Т.#Параметр(23)" = "Т.Ссылка" #Тогда + #Если СтрСодержит("#Параметр(22)", ",") #Тогда + // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. + НеверныйВидДоступа: "#Параметр(22)" - "При проверке таблицы значения доступа можно указывать только один вид доступа" + #ИначеЕсли СтрСодержит(&ВидыДоступаСОднойГруппойДляЗначенияДоступа, ",#Параметр(22),") #Тогда + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения + ГДЕ + Значения.ГруппаДоступа = ГруппыДоступа.Ссылка + И Значения.ЗначениеДоступа = Т.ГруппаДоступа + #Иначе // Значения доступа, для которых можно указать несколько групп значений доступа. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения + ВНУТРЕННЕЕ СОЕДИНЕНИЕ #Параметр(1).ГруппыДоступа КАК ГруппыЗначений + ПО + Значения.ГруппаДоступа = ГруппыДоступа.Ссылка + И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа + И ГруппыЗначений.Ссылка = Т.#Параметр(23) + #КонецЕсли + #Иначе + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + ПО + Значения.ГруппаДоступа = ГруппыДоступа.Ссылка + И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа + И ГруппыЗначений.ЗначениеДоступа = Т.#Параметр(23) + #КонецЕсли + ) + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ + = + ВЫБОР + КОГДА ИСТИНА В + ( + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию + ГДЕ + ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(Т.#Параметр(23)) + И ЗначенияПоУмолчанию.ВсеРазрешены = ЛОЖЬ + ) + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ + ) + ) +#КонецЕсли + +//// Проверка значения поля группы параметров 11. +#Если "#Параметр(24)" = "" И "#Параметр(25)" = "" #Тогда + // Группа параметров не используется. +#ИначеЕсли "#Параметр(24)" = "Условие" Или "#Параметр(24)" = "" #Тогда + // Когда имя вида доступа "Условие" (или ""), тогда вместо имени поля задано условие. + И ( #Параметр(25) ) +#ИначеЕсли "#Параметр(24)" = "ПравоЧтения" Или "#Параметр(24)" = "ПравоИзменения" #Тогда + И Т.#Параметр(25) <> НЕОПРЕДЕЛЕНО + И ИСТИНА В + ( // Проверка права пользователя на таблицу Значения, установленного в поле. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава + ГДЕ + ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка + И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТИПЗНАЧЕНИЯ(Т.#Параметр(25)) + #Если Не "#Параметр(24)" = "ПравоЧтения" #Тогда + И ТаблицыГруппДоступаПроверкаПрава.Изменение + #КонецЕсли + ) +#ИначеЕсли "#Параметр(24)" = "НастройкиПрав" #Тогда + И + ( + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ( + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ПО + НаследованиеНастроек.Объект = Т.#Параметр(25) + И НастройкиПрав.Объект = НаследованиеНастроек.Родитель + #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда + И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияЧтения + #Иначе + #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда + И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка + #Иначе + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + #КонецЕсли + И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения + #КонецЕсли + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ПО + СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь + И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь + ) + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. + ( + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ + ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ПО + НаследованиеНастроек.Объект = Т.#Параметр(25) + И НастройкиПрав.Объект = НаследованиеНастроек.Родитель + #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда + И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияЧтения + #Иначе + #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда + И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка + #Иначе + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + #КонецЕсли + И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения + #КонецЕсли + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ПО + СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь + И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь + ) + ) +#ИначеЕсли Не СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(24),") #Тогда + // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. + #Если СтрСодержит("#Параметр(24)", ",") #Тогда + НеверныйВидДоступа: "#Параметр(24)" - "Список имен видов доступа не найден" + #Иначе + НеверныйВидДоступа: "#Параметр(24)" - "Имя вида доступа не найдено" + #КонецЕсли +#ИначеЕсли &ВидыДоступаСОтключеннымИспользованием <> "Все" + И Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(24),") #Тогда + И + ( + ЕСТЬNULL(Т.#Параметр(25), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО + И + #Если (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(24),", ",Пользователи,")) + Или (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(24),", ",ВнешниеПользователи,")) #Тогда + НЕ + ( + НЕ ИСТИНА В + ( + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа + ГДЕ + ГруппыЗначенийДоступа.ЗначениеДоступа = Т.#Параметр(25) + И ГруппыЗначенийДоступа.ГруппаЗначенийДоступа = &АвторизованныйПользователь + ) + И НЕ + #Иначе + ( + #КонецЕсли + ВЫБОР + КОГДА ИСТИНА В + ( + #Если СтрСодержит(&ВидыДоступаБезГруппДляЗначенияДоступа, ",#Параметр(24),") #Тогда + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения + ГДЕ + Значения.ГруппаДоступа = ГруппыДоступа.Ссылка + И Значения.ЗначениеДоступа = Т.#Параметр(25) + #ИначеЕсли "Т.#Параметр(25)" = "Т.Ссылка" #Тогда + #Если СтрСодержит("#Параметр(24)", ",") #Тогда + // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. + НеверныйВидДоступа: "#Параметр(24)" - "При проверке таблицы значения доступа можно указывать только один вид доступа" + #ИначеЕсли СтрСодержит(&ВидыДоступаСОднойГруппойДляЗначенияДоступа, ",#Параметр(24),") #Тогда + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения + ГДЕ + Значения.ГруппаДоступа = ГруппыДоступа.Ссылка + И Значения.ЗначениеДоступа = Т.ГруппаДоступа + #Иначе // Значения доступа, для которых можно указать несколько групп значений доступа. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения + ВНУТРЕННЕЕ СОЕДИНЕНИЕ #Параметр(1).ГруппыДоступа КАК ГруппыЗначений + ПО + Значения.ГруппаДоступа = ГруппыДоступа.Ссылка + И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа + И ГруппыЗначений.Ссылка = Т.#Параметр(25) + #КонецЕсли + #Иначе + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + ПО + Значения.ГруппаДоступа = ГруппыДоступа.Ссылка + И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа + И ГруппыЗначений.ЗначениеДоступа = Т.#Параметр(25) + #КонецЕсли + ) + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ + = + ВЫБОР + КОГДА ИСТИНА В + ( + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию + ГДЕ + ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(Т.#Параметр(25)) + И ЗначенияПоУмолчанию.ВсеРазрешены = ЛОЖЬ + ) + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ + ) + ) +#КонецЕсли + +//// Проверка значения поля группы параметров 12. +#Если "#Параметр(26)" = "" И "#Параметр(27)" = "" #Тогда + // Группа параметров не используется. +#ИначеЕсли "#Параметр(26)" = "Условие" Или "#Параметр(26)" = "" #Тогда + // Когда имя вида доступа "Условие" (или ""), тогда вместо имени поля задано условие. + И ( #Параметр(27) ) +#ИначеЕсли "#Параметр(26)" = "ПравоЧтения" Или "#Параметр(26)" = "ПравоИзменения" #Тогда + И Т.#Параметр(27) <> НЕОПРЕДЕЛЕНО + И ИСТИНА В + ( // Проверка права пользователя на таблицу Значения, установленного в поле. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава + ГДЕ + ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка + И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТИПЗНАЧЕНИЯ(Т.#Параметр(27)) + #Если Не "#Параметр(26)" = "ПравоЧтения" #Тогда + И ТаблицыГруппДоступаПроверкаПрава.Изменение + #КонецЕсли + ) +#ИначеЕсли "#Параметр(26)" = "НастройкиПрав" #Тогда + И + ( + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ( + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ПО + НаследованиеНастроек.Объект = Т.#Параметр(27) + И НастройкиПрав.Объект = НаследованиеНастроек.Родитель + #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда + И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияЧтения + #Иначе + #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда + И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка + #Иначе + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + #КонецЕсли + И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения + #КонецЕсли + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ПО + СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь + И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь + ) + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. + ( + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ + ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ПО + НаследованиеНастроек.Объект = Т.#Параметр(27) + И НастройкиПрав.Объект = НаследованиеНастроек.Родитель + #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда + И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияЧтения + #Иначе + #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда + И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка + #Иначе + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + #КонецЕсли + И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения + #КонецЕсли + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ПО + СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь + И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь + ) + ) +#ИначеЕсли Не СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(26),") #Тогда + // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. + #Если СтрСодержит("#Параметр(26)", ",") #Тогда + НеверныйВидДоступа: "#Параметр(26)" - "Список имен видов доступа не найден" + #Иначе + НеверныйВидДоступа: "#Параметр(26)" - "Имя вида доступа не найдено" + #КонецЕсли +#ИначеЕсли &ВидыДоступаСОтключеннымИспользованием <> "Все" + И Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(26),") #Тогда + И + ( + ЕСТЬNULL(Т.#Параметр(27), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО + И + #Если (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(26),", ",Пользователи,")) + Или (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(26),", ",ВнешниеПользователи,")) #Тогда + НЕ + ( + НЕ ИСТИНА В + ( + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа + ГДЕ + ГруппыЗначенийДоступа.ЗначениеДоступа = Т.#Параметр(27) + И ГруппыЗначенийДоступа.ГруппаЗначенийДоступа = &АвторизованныйПользователь + ) + И НЕ + #Иначе + ( + #КонецЕсли + ВЫБОР + КОГДА ИСТИНА В + ( + #Если СтрСодержит(&ВидыДоступаБезГруппДляЗначенияДоступа, ",#Параметр(26),") #Тогда + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения + ГДЕ + Значения.ГруппаДоступа = ГруппыДоступа.Ссылка + И Значения.ЗначениеДоступа = Т.#Параметр(27) + #ИначеЕсли "Т.#Параметр(27)" = "Т.Ссылка" #Тогда + #Если СтрСодержит("#Параметр(26)", ",") #Тогда + // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. + НеверныйВидДоступа: "#Параметр(26)" - "При проверке таблицы значения доступа можно указывать только один вид доступа" + #ИначеЕсли СтрСодержит(&ВидыДоступаСОднойГруппойДляЗначенияДоступа, ",#Параметр(26),") #Тогда + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения + ГДЕ + Значения.ГруппаДоступа = ГруппыДоступа.Ссылка + И Значения.ЗначениеДоступа = Т.ГруппаДоступа + #Иначе // Значения доступа, для которых можно указать несколько групп значений доступа. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения + ВНУТРЕННЕЕ СОЕДИНЕНИЕ #Параметр(1).ГруппыДоступа КАК ГруппыЗначений + ПО + Значения.ГруппаДоступа = ГруппыДоступа.Ссылка + И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа + И ГруппыЗначений.Ссылка = Т.#Параметр(27) + #КонецЕсли + #Иначе + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + ПО + Значения.ГруппаДоступа = ГруппыДоступа.Ссылка + И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа + И ГруппыЗначений.ЗначениеДоступа = Т.#Параметр(27) + #КонецЕсли + ) + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ + = + ВЫБОР + КОГДА ИСТИНА В + ( + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию + ГДЕ + ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(Т.#Параметр(27)) + И ЗначенияПоУмолчанию.ВсеРазрешены = ЛОЖЬ + ) + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ + ) + ) +#КонецЕсли + +//// Проверка значения поля группы параметров 13. +#Если "#Параметр(28)" = "" И "#Параметр(29)" = "" #Тогда + // Группа параметров не используется. +#ИначеЕсли "#Параметр(28)" = "Условие" Или "#Параметр(28)" = "" #Тогда + // Когда имя вида доступа "Условие" (или ""), тогда вместо имени поля задано условие. + И ( #Параметр(29) ) +#ИначеЕсли "#Параметр(28)" = "ПравоЧтения" Или "#Параметр(28)" = "ПравоИзменения" #Тогда + И Т.#Параметр(29) <> НЕОПРЕДЕЛЕНО + И ИСТИНА В + ( // Проверка права пользователя на таблицу Значения, установленного в поле. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава + ГДЕ + ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка + И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТИПЗНАЧЕНИЯ(Т.#Параметр(29)) + #Если Не "#Параметр(28)" = "ПравоЧтения" #Тогда + И ТаблицыГруппДоступаПроверкаПрава.Изменение + #КонецЕсли + ) +#ИначеЕсли "#Параметр(28)" = "НастройкиПрав" #Тогда + И + ( + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ( + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ПО + НаследованиеНастроек.Объект = Т.#Параметр(29) + И НастройкиПрав.Объект = НаследованиеНастроек.Родитель + #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда + И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияЧтения + #Иначе + #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда + И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка + #Иначе + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + #КонецЕсли + И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения + #КонецЕсли + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ПО + СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь + И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь + ) + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. + ( + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ + ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ПО + НаследованиеНастроек.Объект = Т.#Параметр(29) + И НастройкиПрав.Объект = НаследованиеНастроек.Родитель + #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда + И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияЧтения + #Иначе + #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда + И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка + #Иначе + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + #КонецЕсли + И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения + #КонецЕсли + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ПО + СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь + И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь + ) + ) +#ИначеЕсли Не СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(28),") #Тогда + // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. + #Если СтрСодержит("#Параметр(28)", ",") #Тогда + НеверныйВидДоступа: "#Параметр(28)" - "Список имен видов доступа не найден" + #Иначе + НеверныйВидДоступа: "#Параметр(28)" - "Имя вида доступа не найдено" + #КонецЕсли +#ИначеЕсли &ВидыДоступаСОтключеннымИспользованием <> "Все" + И Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(28),") #Тогда + И + ( + ЕСТЬNULL(Т.#Параметр(29), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО + И + #Если (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(28),", ",Пользователи,")) + Или (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(28),", ",ВнешниеПользователи,")) #Тогда + НЕ + ( + НЕ ИСТИНА В + ( + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа + ГДЕ + ГруппыЗначенийДоступа.ЗначениеДоступа = Т.#Параметр(29) + И ГруппыЗначенийДоступа.ГруппаЗначенийДоступа = &АвторизованныйПользователь + ) + И НЕ + #Иначе + ( + #КонецЕсли + ВЫБОР + КОГДА ИСТИНА В + ( + #Если СтрСодержит(&ВидыДоступаБезГруппДляЗначенияДоступа, ",#Параметр(28),") #Тогда + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения + ГДЕ + Значения.ГруппаДоступа = ГруппыДоступа.Ссылка + И Значения.ЗначениеДоступа = Т.#Параметр(29) + #ИначеЕсли "Т.#Параметр(29)" = "Т.Ссылка" #Тогда + #Если СтрСодержит("#Параметр(28)", ",") #Тогда + // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. + НеверныйВидДоступа: "#Параметр(28)" - "При проверке таблицы значения доступа можно указывать только один вид доступа" + #ИначеЕсли СтрСодержит(&ВидыДоступаСОднойГруппойДляЗначенияДоступа, ",#Параметр(28),") #Тогда + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения + ГДЕ + Значения.ГруппаДоступа = ГруппыДоступа.Ссылка + И Значения.ЗначениеДоступа = Т.ГруппаДоступа + #Иначе // Значения доступа, для которых можно указать несколько групп значений доступа. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения + ВНУТРЕННЕЕ СОЕДИНЕНИЕ #Параметр(1).ГруппыДоступа КАК ГруппыЗначений + ПО + Значения.ГруппаДоступа = ГруппыДоступа.Ссылка + И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа + И ГруппыЗначений.Ссылка = Т.#Параметр(29) + #КонецЕсли + #Иначе + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + ПО + Значения.ГруппаДоступа = ГруппыДоступа.Ссылка + И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа + И ГруппыЗначений.ЗначениеДоступа = Т.#Параметр(29) + #КонецЕсли + ) + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ + = + ВЫБОР + КОГДА ИСТИНА В + ( + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию + ГДЕ + ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(Т.#Параметр(29)) + И ЗначенияПоУмолчанию.ВсеРазрешены = ЛОЖЬ + ) + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ + ) + ) +#КонецЕсли + +//// Проверка значения поля группы параметров 14. +#Если "#Параметр(30)" = "" И "#Параметр(31)" = "" #Тогда + // Группа параметров не используется. +#ИначеЕсли "#Параметр(30)" = "Условие" Или "#Параметр(30)" = "" #Тогда + // Когда имя вида доступа "Условие" (или ""), тогда вместо имени поля задано условие. + И ( #Параметр(31) ) +#ИначеЕсли "#Параметр(30)" = "ПравоЧтения" Или "#Параметр(30)" = "ПравоИзменения" #Тогда + И Т.#Параметр(31) <> НЕОПРЕДЕЛЕНО + И ИСТИНА В + ( // Проверка права пользователя на таблицу Значения, установленного в поле. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава + ГДЕ + ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка + И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТИПЗНАЧЕНИЯ(Т.#Параметр(31)) + #Если Не "#Параметр(30)" = "ПравоЧтения" #Тогда + И ТаблицыГруппДоступаПроверкаПрава.Изменение + #КонецЕсли + ) +#ИначеЕсли "#Параметр(30)" = "НастройкиПрав" #Тогда + И + ( + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ( + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ПО + НаследованиеНастроек.Объект = Т.#Параметр(31) + И НастройкиПрав.Объект = НаследованиеНастроек.Родитель + #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда + И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияЧтения + #Иначе + #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда + И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка + #Иначе + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + #КонецЕсли + И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения + #КонецЕсли + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ПО + СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь + И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь + ) + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. + ( + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ + ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ПО + НаследованиеНастроек.Объект = Т.#Параметр(31) + И НастройкиПрав.Объект = НаследованиеНастроек.Родитель + #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда + И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияЧтения + #Иначе + #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда + И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка + #Иначе + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + #КонецЕсли + И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения + #КонецЕсли + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ПО + СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь + И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь + ) + ) +#ИначеЕсли Не СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(30),") #Тогда + // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. + #Если СтрСодержит("#Параметр(30)", ",") #Тогда + НеверныйВидДоступа: "#Параметр(30)" - "Список имен видов доступа не найден" + #Иначе + НеверныйВидДоступа: "#Параметр(30)" - "Имя вида доступа не найдено" + #КонецЕсли +#ИначеЕсли &ВидыДоступаСОтключеннымИспользованием <> "Все" + И Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(30),") #Тогда + И + ( + ЕСТЬNULL(Т.#Параметр(31), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО + И + #Если (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(30),", ",Пользователи,")) + Или (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(30),", ",ВнешниеПользователи,")) #Тогда + НЕ + ( + НЕ ИСТИНА В + ( + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа + ГДЕ + ГруппыЗначенийДоступа.ЗначениеДоступа = Т.#Параметр(31) + И ГруппыЗначенийДоступа.ГруппаЗначенийДоступа = &АвторизованныйПользователь + ) + И НЕ + #Иначе + ( + #КонецЕсли + ВЫБОР + КОГДА ИСТИНА В + ( + #Если СтрСодержит(&ВидыДоступаБезГруппДляЗначенияДоступа, ",#Параметр(30),") #Тогда + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения + ГДЕ + Значения.ГруппаДоступа = ГруппыДоступа.Ссылка + И Значения.ЗначениеДоступа = Т.#Параметр(31) + #ИначеЕсли "Т.#Параметр(31)" = "Т.Ссылка" #Тогда + #Если СтрСодержит("#Параметр(30)", ",") #Тогда + // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. + НеверныйВидДоступа: "#Параметр(30)" - "При проверке таблицы значения доступа можно указывать только один вид доступа" + #ИначеЕсли СтрСодержит(&ВидыДоступаСОднойГруппойДляЗначенияДоступа, ",#Параметр(30),") #Тогда + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения + ГДЕ + Значения.ГруппаДоступа = ГруппыДоступа.Ссылка + И Значения.ЗначениеДоступа = Т.ГруппаДоступа + #Иначе // Значения доступа, для которых можно указать несколько групп значений доступа. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения + ВНУТРЕННЕЕ СОЕДИНЕНИЕ #Параметр(1).ГруппыДоступа КАК ГруппыЗначений + ПО + Значения.ГруппаДоступа = ГруппыДоступа.Ссылка + И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа + И ГруппыЗначений.Ссылка = Т.#Параметр(31) + #КонецЕсли + #Иначе + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + ПО + Значения.ГруппаДоступа = ГруппыДоступа.Ссылка + И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа + И ГруппыЗначений.ЗначениеДоступа = Т.#Параметр(31) + #КонецЕсли + ) + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ + = + ВЫБОР + КОГДА ИСТИНА В + ( + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию + ГДЕ + ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(Т.#Параметр(31)) + И ЗначенияПоУмолчанию.ВсеРазрешены = ЛОЖЬ + ) + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ + ) + ) +#КонецЕсли + +//// Проверка значения поля группы параметров 15. +#Если "#Параметр(32)" = "" И "#Параметр(33)" = "" #Тогда + // Группа параметров не используется. +#ИначеЕсли "#Параметр(32)" = "Условие" Или "#Параметр(32)" = "" #Тогда + // Когда имя вида доступа "Условие" (или ""), тогда вместо имени поля задано условие. + И ( #Параметр(33) ) +#ИначеЕсли "#Параметр(32)" = "ПравоЧтения" Или "#Параметр(32)" = "ПравоИзменения" #Тогда + И Т.#Параметр(33) <> НЕОПРЕДЕЛЕНО + И ИСТИНА В + ( // Проверка права пользователя на таблицу Значения, установленного в поле. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава + ГДЕ + ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка + И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТИПЗНАЧЕНИЯ(Т.#Параметр(33)) + #Если Не "#Параметр(32)" = "ПравоЧтения" #Тогда + И ТаблицыГруппДоступаПроверкаПрава.Изменение + #КонецЕсли + ) +#ИначеЕсли "#Параметр(32)" = "НастройкиПрав" #Тогда + И + ( + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ( + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ПО + НаследованиеНастроек.Объект = Т.#Параметр(33) + И НастройкиПрав.Объект = НаследованиеНастроек.Родитель + #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда + И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияЧтения + #Иначе + #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда + И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка + #Иначе + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + #КонецЕсли + И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения + #КонецЕсли + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ПО + СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь + И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь + ) + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. + ( + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ + ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ПО + НаследованиеНастроек.Объект = Т.#Параметр(33) + И НастройкиПрав.Объект = НаследованиеНастроек.Родитель + #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда + И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияЧтения + #Иначе + #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда + И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка + #Иначе + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + #КонецЕсли + И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения + #КонецЕсли + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ПО + СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь + И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь + ) + ) +#ИначеЕсли Не СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(32),") #Тогда + // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. + #Если СтрСодержит("#Параметр(32)", ",") #Тогда + НеверныйВидДоступа: "#Параметр(32)" - "Список имен видов доступа не найден" + #Иначе + НеверныйВидДоступа: "#Параметр(32)" - "Имя вида доступа не найдено" + #КонецЕсли +#ИначеЕсли &ВидыДоступаСОтключеннымИспользованием <> "Все" + И Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(32),") #Тогда + И + ( + ЕСТЬNULL(Т.#Параметр(33), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО + И + #Если (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(32),", ",Пользователи,")) + Или (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(32),", ",ВнешниеПользователи,")) #Тогда + НЕ + ( + НЕ ИСТИНА В + ( + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа + ГДЕ + ГруппыЗначенийДоступа.ЗначениеДоступа = Т.#Параметр(33) + И ГруппыЗначенийДоступа.ГруппаЗначенийДоступа = &АвторизованныйПользователь + ) + И НЕ + #Иначе + ( + #КонецЕсли + ВЫБОР + КОГДА ИСТИНА В + ( + #Если СтрСодержит(&ВидыДоступаБезГруппДляЗначенияДоступа, ",#Параметр(32),") #Тогда + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения + ГДЕ + Значения.ГруппаДоступа = ГруппыДоступа.Ссылка + И Значения.ЗначениеДоступа = Т.#Параметр(33) + #ИначеЕсли "Т.#Параметр(33)" = "Т.Ссылка" #Тогда + #Если СтрСодержит("#Параметр(32)", ",") #Тогда + // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. + НеверныйВидДоступа: "#Параметр(32)" - "При проверке таблицы значения доступа можно указывать только один вид доступа" + #ИначеЕсли СтрСодержит(&ВидыДоступаСОднойГруппойДляЗначенияДоступа, ",#Параметр(32),") #Тогда + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения + ГДЕ + Значения.ГруппаДоступа = ГруппыДоступа.Ссылка + И Значения.ЗначениеДоступа = Т.ГруппаДоступа + #Иначе // Значения доступа, для которых можно указать несколько групп значений доступа. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения + ВНУТРЕННЕЕ СОЕДИНЕНИЕ #Параметр(1).ГруппыДоступа КАК ГруппыЗначений + ПО + Значения.ГруппаДоступа = ГруппыДоступа.Ссылка + И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа + И ГруппыЗначений.Ссылка = Т.#Параметр(33) + #КонецЕсли + #Иначе + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + ПО + Значения.ГруппаДоступа = ГруппыДоступа.Ссылка + И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа + И ГруппыЗначений.ЗначениеДоступа = Т.#Параметр(33) + #КонецЕсли + ) + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ + = + ВЫБОР + КОГДА ИСТИНА В + ( + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию + ГДЕ + ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(Т.#Параметр(33)) + И ЗначенияПоУмолчанию.ВсеРазрешены = ЛОЖЬ + ) + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ + ) + ) +#КонецЕсли + +//// Проверка значения поля группы параметров 16. +#Если "#Параметр(34)" = "" И "#Параметр(35)" = "" #Тогда + // Группа параметров не используется. +#ИначеЕсли "#Параметр(34)" = "Условие" Или "#Параметр(34)" = "" #Тогда + // Когда имя вида доступа "Условие" (или ""), тогда вместо имени поля задано условие. + И ( #Параметр(35) ) +#ИначеЕсли "#Параметр(34)" = "ПравоЧтения" Или "#Параметр(34)" = "ПравоИзменения" #Тогда + И Т.#Параметр(35) <> НЕОПРЕДЕЛЕНО + И ИСТИНА В + ( // Проверка права пользователя на таблицу Значения, установленного в поле. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава + ГДЕ + ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка + И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТИПЗНАЧЕНИЯ(Т.#Параметр(35)) + #Если Не "#Параметр(34)" = "ПравоЧтения" #Тогда + И ТаблицыГруппДоступаПроверкаПрава.Изменение + #КонецЕсли + ) +#ИначеЕсли "#Параметр(34)" = "НастройкиПрав" #Тогда + И + ( + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ( + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ПО + НаследованиеНастроек.Объект = Т.#Параметр(35) + И НастройкиПрав.Объект = НаследованиеНастроек.Родитель + #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда + И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияЧтения + #Иначе + #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда + И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка + #Иначе + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + #КонецЕсли + И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения + #КонецЕсли + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ПО + СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь + И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь + ) + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. + ( + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ + ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ПО + НаследованиеНастроек.Объект = Т.#Параметр(35) + И НастройкиПрав.Объект = НаследованиеНастроек.Родитель + #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда + И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияЧтения + #Иначе + #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда + И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка + #Иначе + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + #КонецЕсли + И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения + #КонецЕсли + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ПО + СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь + И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь + ) + ) +#ИначеЕсли Не СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(34),") #Тогда + // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. + #Если СтрСодержит("#Параметр(34)", ",") #Тогда + НеверныйВидДоступа: "#Параметр(34)" - "Список имен видов доступа не найден" + #Иначе + НеверныйВидДоступа: "#Параметр(34)" - "Имя вида доступа не найдено" + #КонецЕсли +#ИначеЕсли &ВидыДоступаСОтключеннымИспользованием <> "Все" + И Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(34),") #Тогда + И + ( + ЕСТЬNULL(Т.#Параметр(35), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО + И + #Если (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(34),", ",Пользователи,")) + Или (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(34),", ",ВнешниеПользователи,")) #Тогда + НЕ + ( + НЕ ИСТИНА В + ( + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа + ГДЕ + ГруппыЗначенийДоступа.ЗначениеДоступа = Т.#Параметр(35) + И ГруппыЗначенийДоступа.ГруппаЗначенийДоступа = &АвторизованныйПользователь + ) + И НЕ + #Иначе + ( + #КонецЕсли + ВЫБОР + КОГДА ИСТИНА В + ( + #Если СтрСодержит(&ВидыДоступаБезГруппДляЗначенияДоступа, ",#Параметр(34),") #Тогда + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения + ГДЕ + Значения.ГруппаДоступа = ГруппыДоступа.Ссылка + И Значения.ЗначениеДоступа = Т.#Параметр(35) + #ИначеЕсли "Т.#Параметр(35)" = "Т.Ссылка" #Тогда + #Если СтрСодержит("#Параметр(34)", ",") #Тогда + // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. + НеверныйВидДоступа: "#Параметр(34)" - "При проверке таблицы значения доступа можно указывать только один вид доступа" + #ИначеЕсли СтрСодержит(&ВидыДоступаСОднойГруппойДляЗначенияДоступа, ",#Параметр(34),") #Тогда + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения + ГДЕ + Значения.ГруппаДоступа = ГруппыДоступа.Ссылка + И Значения.ЗначениеДоступа = Т.ГруппаДоступа + #Иначе // Значения доступа, для которых можно указать несколько групп значений доступа. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения + ВНУТРЕННЕЕ СОЕДИНЕНИЕ #Параметр(1).ГруппыДоступа КАК ГруппыЗначений + ПО + Значения.ГруппаДоступа = ГруппыДоступа.Ссылка + И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа + И ГруппыЗначений.Ссылка = Т.#Параметр(35) + #КонецЕсли + #Иначе + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + ПО + Значения.ГруппаДоступа = ГруппыДоступа.Ссылка + И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа + И ГруппыЗначений.ЗначениеДоступа = Т.#Параметр(35) + #КонецЕсли + ) + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ + = + ВЫБОР + КОГДА ИСТИНА В + ( + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию + ГДЕ + ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(Т.#Параметр(35)) + И ЗначенияПоУмолчанию.ВсеРазрешены = ЛОЖЬ + ) + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ + ) + ) +#КонецЕсли + + ) +) +#КонецЕсли + + + + + ПоЗначениямРасширенный + // ПоЗначениямРасширенный(Таблица, -, Модификатор, ПрисоединяемыеТаблицы, О, В1,П1,О1, В2,П2,О2,..., В(n), П(n), О(n)). +// № параметра: 1, 2, 3, 4, 5, 6, 7, 8, 9,10,11,...,3+n*3,4+n*3,5+n*3. +// Читается так: "ограничение доступа по значениям расширенный". +// Параметры: +// Таблица - Имя текущей таблицы, например "Документ.ПоступлениеТоваровИУслуг". +// Модификатор - изменяет шаблон. +// 1-й модификатор - строка "НеОграничиватьДоступКГруппам" указывает +// безусловно выбирать группы иерархического справочника. +// Других модификаторов в этой версии шаблона не предусмотрено. +// ПрисоединяемыеТаблицы - текст присоедиения дополнительных таблиц на языке запросов, например, +// "ВНУТРЕННЕЕ СОЕДИНЕНИЕ Документ.АвансовыйОтчет.ОплатаПоставщикам КАК Т1 +// ПО Т.Ссылка = Т1.Ссылка". +// Присоединение позволяет указать поля таблицы ОплатаПоставщикам, как поля основной таблицы +// для проверки их значений, как значений основной таблицы. +// Следует помнить, что при размножении строк в результате соединения, достаточно чтобы +// всего одна строка прошла условия проверки, т.е. результаты проверки строк объединяются по "ИЛИ". +// О - Начальные скобки "(". +// В(n) - Вид доступа - имя вида доступа, например, "Организации". Для полей составного типа, с целью повышения +// производительности, лучше указать несколько имен, например, "Организации,ГруппыФизическихЛиц", +// чем использовать несколько блоков параметров, с одним и тем же именем поля. +// Специальные виды доступа "Условие", "НастройкиПрав", "ПравоЧтения", "ПравоИзменения" +// можно использовать только отдельно. +// Когда В(n) = "Условие" (или ""), тогда П(n) содержит строку условия на языке запросов, например +// "Т.Автор = &АвторизованныйПользователь", +// "ТИПЗНАЧЕНИЯ(Т.Владелец) = ТИП(Справочник.Организации)", где Т - псевдоним текущей таблицы. +// Когда В(n) = "ПравоЧтения" Или "ПравоИзменения", +// выполняется проверка наличия права на таблицу значения Т.П(n). +// П(n) - Поле проверяемого значения с псевдонимом, например "Т.Организация", +// кроме случая В(n) = "Условие" (или ""). +// О(n) - Логические операции "И", "ИЛИ" в сочетании с скобками "(", ")". +// Примечение: максимальное количество одновременно проверяемых значений полей можно увеличить, изменив шаблон, но +// необходимо будет указывать все параметры шаблона, т.е. указывать пустые строки, когда количество полей меньше максимального. +// Шаблон имеет структуру: +// <Общая часть условий> <Условие по группе параметров 1> И/ИЛИ <Условие по группе параметров 2> И/ИЛИ ... <Условие по группе параметров(n)> +// Пример: +// ПоЗначениямРасширенный("Документ.ПеремещениеТоваров", "", "", +// "", +// "", +// "Организации","Т.Организация","И(", +// "Склады","Т.СкладОтправитель","ИЛИ", +// "Склады","Т.СкладПолучатель",")", "","","", ...) + +// Проверка правильности параметра Право. +#Если Не ("#Параметр(2)" = "Чтение" Или "#Параметр(2)" = "Добавление" Или + "#Параметр(2)" = "Изменение" Или "#Параметр(2)" = "Удаление" Или "#Параметр(2)" = "") + Или #ИмяТекущегоПраваДоступа <> "Чтение" И "#Параметр(2)" = "Чтение" + Или #ИмяТекущегоПраваДоступа = "Чтение" И "#Параметр(2)" <> "Чтение" И "#Параметр(2)" <> "" #Тогда + // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. + НеверноеПраво: #Параметр(2) +#КонецЕсли + +// Проверка правильности параметра ИмяТаблицы. +#Если "#Параметр(1)" <> #ИмяТекущейТаблицы #Тогда + // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. + НеверноеИмяТекущейТаблицы: "#Параметр(1)" +#КонецЕсли + +// Проверка правильности параметра Модификатор. +#Если Не ("#Параметр(3)" = "НеОграничиватьДоступКГруппам" Или "#Параметр(3)" = "") #Тогда + // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. + НеверныйМодификатор: #Параметр(3) +#КонецЕсли + +// Общая проверка использования ограничений доступа на уровне записей и +// проверка использования хотя бы одного ограничения из указанных видов доступа. +#Если &ОграничиватьДоступНаУровнеЗаписей + И Не (Истина + И ("#Параметр(6)" = "" И "#Параметр(7)" = "" + Или &ВидыДоступаСОтключеннымИспользованием = "Все" + И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(6),") + Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(6),")) + И ("#Параметр(9)" = "" И "#Параметр(10)" = "" + Или &ВидыДоступаСОтключеннымИспользованием = "Все" + И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(9),") + Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(9),")) + И ("#Параметр(12)" = "" И "#Параметр(13)" = "" + Или &ВидыДоступаСОтключеннымИспользованием = "Все" + И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(12),") + Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(12),")) + И ("#Параметр(15)" = "" И "#Параметр(16)" = "" + Или &ВидыДоступаСОтключеннымИспользованием = "Все" + И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(15),") + Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(15),")) + И ("#Параметр(18)" = "" И "#Параметр(19)" = "" + Или &ВидыДоступаСОтключеннымИспользованием = "Все" + И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(18),") + Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(18),")) + И ("#Параметр(21)" = "" И "#Параметр(22)" = "" + Или &ВидыДоступаСОтключеннымИспользованием = "Все" + И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(21),") + Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(21),")) + И ("#Параметр(24)" = "" И "#Параметр(25)" = "" + Или &ВидыДоступаСОтключеннымИспользованием = "Все" + И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(24),") + Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(24),")) + И ("#Параметр(27)" = "" И "#Параметр(28)" = "" + Или &ВидыДоступаСОтключеннымИспользованием = "Все" + И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(27),") + Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(27),")) + И ("#Параметр(30)" = "" И "#Параметр(31)" = "" + Или &ВидыДоступаСОтключеннымИспользованием = "Все" + И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(30),") + Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(30),")) + И ("#Параметр(33)" = "" И "#Параметр(34)" = "" + Или &ВидыДоступаСОтключеннымИспользованием = "Все" + И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(33),") + Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(33),")) + И ("#Параметр(36)" = "" И "#Параметр(37)" = "" + Или &ВидыДоступаСОтключеннымИспользованием = "Все" + И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(36),") + Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(36),")) + И ("#Параметр(39)" = "" И "#Параметр(40)" = "" + Или &ВидыДоступаСОтключеннымИспользованием = "Все" + И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(39),") + Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(39),")) + И ("#Параметр(42)" = "" И "#Параметр(43)" = "" + Или &ВидыДоступаСОтключеннымИспользованием = "Все" + И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(42),") + Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(42),")) + И ("#Параметр(45)" = "" И "#Параметр(46)" = "" + Или &ВидыДоступаСОтключеннымИспользованием = "Все" + И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(45),") + Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(45),")) + И ("#Параметр(48)" = "" И "#Параметр(49)" = "" + Или &ВидыДоступаСОтключеннымИспользованием = "Все" + И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(48),") + Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(48),")) + И ("#Параметр(51)" = "" И "#Параметр(52)" = "" + Или &ВидыДоступаСОтключеннымИспользованием = "Все" + И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(51),") + Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(51),")) + ) #Тогда + +Т ИЗ Т // Т - псевдоним текущей таблицы (выбран коротким, чтобы сократить количество символов в тексте параметра-условия на языке запросов). + +// Присоединяемые таблицы к проверяемой строке текущей таблицы "Т". +#Параметр(4) + +ГДЕ + +// Безусловная выборка групп в иерархическом объекте метаданных (если нужно). +#Если "#Параметр(3)" = "НеОграничиватьДоступКГруппам" #Тогда + Т.ЭтоГруппа ИЛИ +#КонецЕсли + +ИСТИНА В +( // Проверка права пользователя на текущую таблицу в целом. + // Права на таблицы формируются по составу ролей профиля группы доступа. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ + Справочник.ИдентификаторыОбъектовМетаданных КАК СвойстваТекущейТаблицы + ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.ГруппыДоступа КАК ГруппыДоступа + ПО + СвойстваТекущейТаблицы.ПолноеИмя = "#Параметр(1)" + И ИСТИНА В + ( + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ + РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступа + ГДЕ + ТаблицыГруппДоступа.Таблица = СвойстваТекущейТаблицы.Ссылка + И ТаблицыГруппДоступа.ГруппаДоступа = ГруппыДоступа.Ссылка + #Если Не #ИмяТекущегоПраваДоступа = "Чтение" #Тогда + И ТаблицыГруппДоступа.Изменение + #КонецЕсли + ) + И ГруппыДоступа.Ссылка В + ( + ВЫБРАТЬ + ГруппыДоступаПользователи.Ссылка КАК ГруппаДоступа + ИЗ + Справочник.ГруппыДоступа.Пользователи КАК ГруппыДоступаПользователи + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ПО + СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь + И СоставыГруппПользователей.ГруппаПользователей = ГруппыДоступаПользователи.Пользователь + ) + ГДЕ + ( // Поиск значений заданных полей в разрешенных значениях групп доступа (пользователей). + + #Параметр(5) // [([(][(]...] 0-n открывающихся скобок. + +//// Проверка значения поля группы параметров 1. +#Если "#Параметр(6)" = "Условие" Или "#Параметр(6)" = "" #Тогда + // Когда имя вида доступа "Условие" (или ""), тогда вместо имени поля задано условие. + ( #Параметр(7) ) +#ИначеЕсли "#Параметр(6)" = "ПравоЧтения" Или "#Параметр(6)" = "ПравоИзменения" #Тогда + #Параметр(7) <> НЕОПРЕДЕЛЕНО + И ИСТИНА В + ( // Проверка права пользователя на таблицу Значения, установленного в поле. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава + ГДЕ + ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка + И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(7)) + #Если Не "#Параметр(6)" = "ПравоЧтения" #Тогда + И ТаблицыГруппДоступаПроверкаПрава.Изменение + #КонецЕсли + ) +#ИначеЕсли "#Параметр(6)" = "НастройкиПрав" #Тогда + + ( + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ( + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ПО + НаследованиеНастроек.Объект = #Параметр(7) + И НастройкиПрав.Объект = НаследованиеНастроек.Родитель + #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда + И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияЧтения + #Иначе + #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда + И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка + #Иначе + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + #КонецЕсли + И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения + #КонецЕсли + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ПО + СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь + И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь + ) + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. + ( + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ + ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ПО + НаследованиеНастроек.Объект = #Параметр(7) + И НастройкиПрав.Объект = НаследованиеНастроек.Родитель + #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда + И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияЧтения + #Иначе + #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда + И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка + #Иначе + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + #КонецЕсли + И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения + #КонецЕсли + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ПО + СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь + И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь + ) + ) +#ИначеЕсли Не СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(6),") #Тогда + // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. + #Если СтрСодержит("#Параметр(6)", ",") #Тогда + НеверныйВидДоступа: "#Параметр(6)" - "Список имен видов доступа не найден" + #Иначе + НеверныйВидДоступа: "#Параметр(6)" - "Имя вида доступа не найдено" + #КонецЕсли +#ИначеЕсли &ВидыДоступаСОтключеннымИспользованием <> "Все" + И Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(6),") #Тогда + + ( + ЕСТЬNULL(#Параметр(7), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО + И + #Если (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(6),", ",Пользователи,")) + Или (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(6),", ",ВнешниеПользователи,")) #Тогда + НЕ + ( + НЕ ИСТИНА В + ( + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа + ГДЕ + ГруппыЗначенийДоступа.ЗначениеДоступа = #Параметр(7) + И ГруппыЗначенийДоступа.ГруппаЗначенийДоступа = &АвторизованныйПользователь + ) + И НЕ + #Иначе + ( + #КонецЕсли + ВЫБОР + КОГДА ИСТИНА В + ( + #Если СтрСодержит(&ВидыДоступаБезГруппДляЗначенияДоступа, ",#Параметр(6),") #Тогда + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения + ГДЕ + Значения.ГруппаДоступа = ГруппыДоступа.Ссылка + И Значения.ЗначениеДоступа = #Параметр(7) + #ИначеЕсли "#Параметр(7)" = "Т.Ссылка" #Тогда + #Если СтрСодержит("#Параметр(6)", ",") #Тогда + // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. + НеверныйВидДоступа: "#Параметр(6)" - "При проверке таблицы значения доступа можно указывать только один вид доступа" + #ИначеЕсли СтрСодержит(&ВидыДоступаСОднойГруппойДляЗначенияДоступа, ",#Параметр(6),") #Тогда + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения + ГДЕ + Значения.ГруппаДоступа = ГруппыДоступа.Ссылка + И Значения.ЗначениеДоступа = Т.ГруппаДоступа + #Иначе // Значения доступа, для которых можно указать несколько групп значений доступа. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения + ВНУТРЕННЕЕ СОЕДИНЕНИЕ #Параметр(1).ГруппыДоступа КАК ГруппыЗначений + ПО + Значения.ГруппаДоступа = ГруппыДоступа.Ссылка + И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа + И ГруппыЗначений.Ссылка = #Параметр(7) + #КонецЕсли + #Иначе + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + ПО + Значения.ГруппаДоступа = ГруппыДоступа.Ссылка + И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа + И ГруппыЗначений.ЗначениеДоступа = #Параметр(7) + #КонецЕсли + ) + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ + = + ВЫБОР + КОГДА ИСТИНА В + ( + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию + ГДЕ + ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(#Параметр(7)) + И ЗначенияПоУмолчанию.ВсеРазрешены = ЛОЖЬ + ) + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ + ) + ) +#Иначе + ИСТИНА +#КонецЕсли + + #Параметр(8) // [)[)][)]...] [ИЛИ|И] [([(][(]...] оператор И/ИЛИ с/без скобок. + +//// Проверка значения поля группы параметров 2. +#Если "#Параметр(9)" = "" И "#Параметр(10)" = "" #Тогда + // Группа параметров не используется. +#ИначеЕсли "#Параметр(9)" = "Условие" Или "#Параметр(9)" = "" #Тогда + // Когда имя вида доступа "Условие" (или ""), тогда вместо имени поля задано условие. + ( #Параметр(10) ) +#ИначеЕсли "#Параметр(9)" = "ПравоЧтения" Или "#Параметр(9)" = "ПравоИзменения" #Тогда + #Параметр(10) <> НЕОПРЕДЕЛЕНО + И ИСТИНА В + ( // Проверка права пользователя на таблицу Значения, установленного в поле. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава + ГДЕ + ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка + И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(10)) + #Если Не "#Параметр(9)" = "ПравоЧтения" #Тогда + И ТаблицыГруппДоступаПроверкаПрава.Изменение + #КонецЕсли + ) +#ИначеЕсли "#Параметр(9)" = "НастройкиПрав" #Тогда + + ( + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ( + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ПО + НаследованиеНастроек.Объект = #Параметр(10) + И НастройкиПрав.Объект = НаследованиеНастроек.Родитель + #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда + И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияЧтения + #Иначе + #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда + И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка + #Иначе + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + #КонецЕсли + И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения + #КонецЕсли + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ПО + СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь + И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь + ) + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. + ( + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ + ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ПО + НаследованиеНастроек.Объект = #Параметр(10) + И НастройкиПрав.Объект = НаследованиеНастроек.Родитель + #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда + И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияЧтения + #Иначе + #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда + И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка + #Иначе + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + #КонецЕсли + И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения + #КонецЕсли + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ПО + СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь + И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь + ) + ) +#ИначеЕсли Не СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(9),") #Тогда + // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. + #Если СтрСодержит("#Параметр(9)", ",") #Тогда + НеверныйВидДоступа: "#Параметр(9)" - "Список имен видов доступа не найден" + #Иначе + НеверныйВидДоступа: "#Параметр(9)" - "Имя вида доступа не найдено" + #КонецЕсли +#ИначеЕсли &ВидыДоступаСОтключеннымИспользованием <> "Все" + И Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(9),") #Тогда + + ( + ЕСТЬNULL(#Параметр(10), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО + И + #Если (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(9),", ",Пользователи,")) + Или (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(9),", ",ВнешниеПользователи,")) #Тогда + НЕ + ( + НЕ ИСТИНА В + ( + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа + ГДЕ + ГруппыЗначенийДоступа.ЗначениеДоступа = #Параметр(10) + И ГруппыЗначенийДоступа.ГруппаЗначенийДоступа = &АвторизованныйПользователь + ) + И НЕ + #Иначе + ( + #КонецЕсли + ВЫБОР + КОГДА ИСТИНА В + ( + #Если СтрСодержит(&ВидыДоступаБезГруппДляЗначенияДоступа, ",#Параметр(9),") #Тогда + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения + ГДЕ + Значения.ГруппаДоступа = ГруппыДоступа.Ссылка + И Значения.ЗначениеДоступа = #Параметр(10) + #ИначеЕсли "#Параметр(10)" = "Т.Ссылка" #Тогда + #Если СтрСодержит("#Параметр(9)", ",") #Тогда + // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. + НеверныйВидДоступа: "#Параметр(9)" - "При проверке таблицы значения доступа можно указывать только один вид доступа" + #ИначеЕсли СтрСодержит(&ВидыДоступаСОднойГруппойДляЗначенияДоступа, ",#Параметр(9),") #Тогда + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения + ГДЕ + Значения.ГруппаДоступа = ГруппыДоступа.Ссылка + И Значения.ЗначениеДоступа = Т.ГруппаДоступа + #Иначе // Значения доступа, для которых можно указать несколько групп значений доступа. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения + ВНУТРЕННЕЕ СОЕДИНЕНИЕ #Параметр(1).ГруппыДоступа КАК ГруппыЗначений + ПО + Значения.ГруппаДоступа = ГруппыДоступа.Ссылка + И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа + И ГруппыЗначений.Ссылка = #Параметр(10) + #КонецЕсли + #Иначе + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + ПО + Значения.ГруппаДоступа = ГруппыДоступа.Ссылка + И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа + И ГруппыЗначений.ЗначениеДоступа = #Параметр(10) + #КонецЕсли + ) + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ + = + ВЫБОР + КОГДА ИСТИНА В + ( + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию + ГДЕ + ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(#Параметр(10)) + И ЗначенияПоУмолчанию.ВсеРазрешены = ЛОЖЬ + ) + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ + ) + ) +#Иначе + ИСТИНА +#КонецЕсли + + #Параметр(11) // [)[)][)]...] [ИЛИ|И] [([(][(]...] оператор И/ИЛИ с/без скобок. + +//// Проверка значения поля группы параметров 3. +#Если "#Параметр(12)" = "" И "#Параметр(13)" = "" #Тогда + // Группа параметров не используется. +#ИначеЕсли "#Параметр(12)" = "Условие" Или "#Параметр(12)" = "" #Тогда + // Когда имя вида доступа "Условие" (или ""), тогда вместо имени поля задано условие. + ( #Параметр(13) ) +#ИначеЕсли "#Параметр(12)" = "ПравоЧтения" Или "#Параметр(12)" = "ПравоИзменения" #Тогда + #Параметр(13) <> НЕОПРЕДЕЛЕНО + И ИСТИНА В + ( // Проверка права пользователя на таблицу Значения, установленного в поле. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава + ГДЕ + ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка + И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(13)) + #Если Не "#Параметр(12)" = "ПравоЧтения" #Тогда + И ТаблицыГруппДоступаПроверкаПрава.Изменение + #КонецЕсли + ) +#ИначеЕсли "#Параметр(12)" = "НастройкиПрав" #Тогда + + ( + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ( + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ПО + НаследованиеНастроек.Объект = #Параметр(13) + И НастройкиПрав.Объект = НаследованиеНастроек.Родитель + #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда + И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияЧтения + #Иначе + #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда + И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка + #Иначе + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + #КонецЕсли + И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения + #КонецЕсли + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ПО + СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь + И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь + ) + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. + ( + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ + ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ПО + НаследованиеНастроек.Объект = #Параметр(13) + И НастройкиПрав.Объект = НаследованиеНастроек.Родитель + #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда + И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияЧтения + #Иначе + #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда + И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка + #Иначе + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + #КонецЕсли + И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения + #КонецЕсли + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ПО + СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь + И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь + ) + ) +#ИначеЕсли Не СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(12),") #Тогда + // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. + #Если СтрСодержит("#Параметр(12)", ",") #Тогда + НеверныйВидДоступа: "#Параметр(12)" - "Список имен видов доступа не найден" + #Иначе + НеверныйВидДоступа: "#Параметр(12)" - "Имя вида доступа не найдено" + #КонецЕсли +#ИначеЕсли &ВидыДоступаСОтключеннымИспользованием <> "Все" + И Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(12),") #Тогда + + ( + ЕСТЬNULL(#Параметр(13), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО + И + #Если (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(12),", ",Пользователи,")) + Или (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(12),", ",ВнешниеПользователи,")) #Тогда + НЕ + ( + НЕ ИСТИНА В + ( + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа + ГДЕ + ГруппыЗначенийДоступа.ЗначениеДоступа = #Параметр(13) + И ГруппыЗначенийДоступа.ГруппаЗначенийДоступа = &АвторизованныйПользователь + ) + И НЕ + #Иначе + ( + #КонецЕсли + ВЫБОР + КОГДА ИСТИНА В + ( + #Если СтрСодержит(&ВидыДоступаБезГруппДляЗначенияДоступа, ",#Параметр(12),") #Тогда + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения + ГДЕ + Значения.ГруппаДоступа = ГруппыДоступа.Ссылка + И Значения.ЗначениеДоступа = #Параметр(13) + #ИначеЕсли "#Параметр(13)" = "Т.Ссылка" #Тогда + #Если СтрСодержит("#Параметр(12)", ",") #Тогда + // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. + НеверныйВидДоступа: "#Параметр(12)" - "При проверке таблицы значения доступа можно указывать только один вид доступа" + #ИначеЕсли СтрСодержит(&ВидыДоступаСОднойГруппойДляЗначенияДоступа, ",#Параметр(12),") #Тогда + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения + ГДЕ + Значения.ГруппаДоступа = ГруппыДоступа.Ссылка + И Значения.ЗначениеДоступа = Т.ГруппаДоступа + #Иначе // Значения доступа, для которых можно указать несколько групп значений доступа. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения + ВНУТРЕННЕЕ СОЕДИНЕНИЕ #Параметр(1).ГруппыДоступа КАК ГруппыЗначений + ПО + Значения.ГруппаДоступа = ГруппыДоступа.Ссылка + И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа + И ГруппыЗначений.Ссылка = #Параметр(13) + #КонецЕсли + #Иначе + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + ПО + Значения.ГруппаДоступа = ГруппыДоступа.Ссылка + И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа + И ГруппыЗначений.ЗначениеДоступа = #Параметр(13) + #КонецЕсли + ) + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ + = + ВЫБОР + КОГДА ИСТИНА В + ( + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию + ГДЕ + ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(#Параметр(13)) + И ЗначенияПоУмолчанию.ВсеРазрешены = ЛОЖЬ + ) + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ + ) + ) +#Иначе + ИСТИНА +#КонецЕсли + + #Параметр(14) // [)[)][)]...] [ИЛИ|И] [([(][(]...] оператор И/ИЛИ с/без скобок. + +//// Проверка значения поля группы параметров 4. +#Если "#Параметр(15)" = "" И "#Параметр(16)" = "" #Тогда + // Группа параметров не используется. +#ИначеЕсли "#Параметр(15)" = "Условие" Или "#Параметр(15)" = "" #Тогда + // Когда имя вида доступа "Условие" (или ""), тогда вместо имени поля задано условие. + ( #Параметр(16) ) +#ИначеЕсли "#Параметр(15)" = "ПравоЧтения" Или "#Параметр(15)" = "ПравоИзменения" #Тогда + #Параметр(16) <> НЕОПРЕДЕЛЕНО + И ИСТИНА В + ( // Проверка права пользователя на таблицу Значения, установленного в поле. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава + ГДЕ + ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка + И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(16)) + #Если Не "#Параметр(15)" = "ПравоЧтения" #Тогда + И ТаблицыГруппДоступаПроверкаПрава.Изменение + #КонецЕсли + ) +#ИначеЕсли "#Параметр(15)" = "НастройкиПрав" #Тогда + + ( + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ( + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ПО + НаследованиеНастроек.Объект = #Параметр(16) + И НастройкиПрав.Объект = НаследованиеНастроек.Родитель + #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда + И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияЧтения + #Иначе + #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда + И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка + #Иначе + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + #КонецЕсли + И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения + #КонецЕсли + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ПО + СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь + И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь + ) + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. + ( + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ + ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ПО + НаследованиеНастроек.Объект = #Параметр(16) + И НастройкиПрав.Объект = НаследованиеНастроек.Родитель + #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда + И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияЧтения + #Иначе + #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда + И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка + #Иначе + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + #КонецЕсли + И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения + #КонецЕсли + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ПО + СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь + И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь + ) + ) +#ИначеЕсли Не СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(15),") #Тогда + // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. + #Если СтрСодержит("#Параметр(15)", ",") #Тогда + НеверныйВидДоступа: "#Параметр(15)" - "Список имен видов доступа не найден" + #Иначе + НеверныйВидДоступа: "#Параметр(15)" - "Имя вида доступа не найдено" + #КонецЕсли +#ИначеЕсли &ВидыДоступаСОтключеннымИспользованием <> "Все" + И Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(15),") #Тогда + + ( + ЕСТЬNULL(#Параметр(16), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО + И + #Если (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(15),", ",Пользователи,")) + Или (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(15),", ",ВнешниеПользователи,")) #Тогда + НЕ + ( + НЕ ИСТИНА В + ( + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа + ГДЕ + ГруппыЗначенийДоступа.ЗначениеДоступа = #Параметр(16) + И ГруппыЗначенийДоступа.ГруппаЗначенийДоступа = &АвторизованныйПользователь + ) + И НЕ + #Иначе + ( + #КонецЕсли + ВЫБОР + КОГДА ИСТИНА В + ( + #Если СтрСодержит(&ВидыДоступаБезГруппДляЗначенияДоступа, ",#Параметр(15),") #Тогда + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения + ГДЕ + Значения.ГруппаДоступа = ГруппыДоступа.Ссылка + И Значения.ЗначениеДоступа = #Параметр(16) + #ИначеЕсли "#Параметр(16)" = "Т.Ссылка" #Тогда + #Если СтрСодержит("#Параметр(15)", ",") #Тогда + // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. + НеверныйВидДоступа: "#Параметр(15)" - "При проверке таблицы значения доступа можно указывать только один вид доступа" + #ИначеЕсли СтрСодержит(&ВидыДоступаСОднойГруппойДляЗначенияДоступа, ",#Параметр(15),") #Тогда + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения + ГДЕ + Значения.ГруппаДоступа = ГруппыДоступа.Ссылка + И Значения.ЗначениеДоступа = Т.ГруппаДоступа + #Иначе // Значения доступа, для которых можно указать несколько групп значений доступа. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения + ВНУТРЕННЕЕ СОЕДИНЕНИЕ #Параметр(1).ГруппыДоступа КАК ГруппыЗначений + ПО + Значения.ГруппаДоступа = ГруппыДоступа.Ссылка + И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа + И ГруппыЗначений.Ссылка = #Параметр(16) + #КонецЕсли + #Иначе + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + ПО + Значения.ГруппаДоступа = ГруппыДоступа.Ссылка + И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа + И ГруппыЗначений.ЗначениеДоступа = #Параметр(16) + #КонецЕсли + ) + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ + = + ВЫБОР + КОГДА ИСТИНА В + ( + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию + ГДЕ + ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(#Параметр(16)) + И ЗначенияПоУмолчанию.ВсеРазрешены = ЛОЖЬ + ) + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ + ) + ) +#Иначе + ИСТИНА +#КонецЕсли + + #Параметр(17) // [)[)][)]...] [ИЛИ|И] [([(][(]...] оператор И/ИЛИ с/без скобок. + +//// Проверка значения поля группы параметров 5. +#Если "#Параметр(18)" = "" И "#Параметр(19)" = "" #Тогда + // Группа параметров не используется. +#ИначеЕсли "#Параметр(18)" = "Условие" Или "#Параметр(18)" = "" #Тогда + // Когда имя вида доступа "Условие" (или ""), тогда вместо имени поля задано условие. + ( #Параметр(19) ) +#ИначеЕсли "#Параметр(18)" = "ПравоЧтения" Или "#Параметр(18)" = "ПравоИзменения" #Тогда + #Параметр(19) <> НЕОПРЕДЕЛЕНО + И ИСТИНА В + ( // Проверка права пользователя на таблицу Значения, установленного в поле. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава + ГДЕ + ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка + И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(19)) + #Если Не "#Параметр(18)" = "ПравоЧтения" #Тогда + И ТаблицыГруппДоступаПроверкаПрава.Изменение + #КонецЕсли + ) +#ИначеЕсли "#Параметр(18)" = "НастройкиПрав" #Тогда + + ( + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ( + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ПО + НаследованиеНастроек.Объект = #Параметр(19) + И НастройкиПрав.Объект = НаследованиеНастроек.Родитель + #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда + И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияЧтения + #Иначе + #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда + И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка + #Иначе + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + #КонецЕсли + И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения + #КонецЕсли + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ПО + СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь + И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь + ) + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. + ( + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ + ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ПО + НаследованиеНастроек.Объект = #Параметр(19) + И НастройкиПрав.Объект = НаследованиеНастроек.Родитель + #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда + И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияЧтения + #Иначе + #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда + И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка + #Иначе + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + #КонецЕсли + И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения + #КонецЕсли + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ПО + СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь + И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь + ) + ) +#ИначеЕсли Не СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(18),") #Тогда + // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. + #Если СтрСодержит("#Параметр(18)", ",") #Тогда + НеверныйВидДоступа: "#Параметр(18)" - "Список имен видов доступа не найден" + #Иначе + НеверныйВидДоступа: "#Параметр(18)" - "Имя вида доступа не найдено" + #КонецЕсли +#ИначеЕсли &ВидыДоступаСОтключеннымИспользованием <> "Все" + И Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(18),") #Тогда + + ( + ЕСТЬNULL(#Параметр(19), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО + И + #Если (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(18),", ",Пользователи,")) + Или (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(18),", ",ВнешниеПользователи,")) #Тогда + НЕ + ( + НЕ ИСТИНА В + ( + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа + ГДЕ + ГруппыЗначенийДоступа.ЗначениеДоступа = #Параметр(19) + И ГруппыЗначенийДоступа.ГруппаЗначенийДоступа = &АвторизованныйПользователь + ) + И НЕ + #Иначе + ( + #КонецЕсли + ВЫБОР + КОГДА ИСТИНА В + ( + #Если СтрСодержит(&ВидыДоступаБезГруппДляЗначенияДоступа, ",#Параметр(18),") #Тогда + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения + ГДЕ + Значения.ГруппаДоступа = ГруппыДоступа.Ссылка + И Значения.ЗначениеДоступа = #Параметр(19) + #ИначеЕсли "#Параметр(19)" = "Т.Ссылка" #Тогда + #Если СтрСодержит("#Параметр(18)", ",") #Тогда + // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. + НеверныйВидДоступа: "#Параметр(18)" - "При проверке таблицы значения доступа можно указывать только один вид доступа" + #ИначеЕсли СтрСодержит(&ВидыДоступаСОднойГруппойДляЗначенияДоступа, ",#Параметр(18),") #Тогда + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения + ГДЕ + Значения.ГруппаДоступа = ГруппыДоступа.Ссылка + И Значения.ЗначениеДоступа = Т.ГруппаДоступа + #Иначе // Значения доступа, для которых можно указать несколько групп значений доступа. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения + ВНУТРЕННЕЕ СОЕДИНЕНИЕ #Параметр(1).ГруппыДоступа КАК ГруппыЗначений + ПО + Значения.ГруппаДоступа = ГруппыДоступа.Ссылка + И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа + И ГруппыЗначений.Ссылка = #Параметр(19) + #КонецЕсли + #Иначе + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + ПО + Значения.ГруппаДоступа = ГруппыДоступа.Ссылка + И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа + И ГруппыЗначений.ЗначениеДоступа = #Параметр(19) + #КонецЕсли + ) + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ + = + ВЫБОР + КОГДА ИСТИНА В + ( + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию + ГДЕ + ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(#Параметр(19)) + И ЗначенияПоУмолчанию.ВсеРазрешены = ЛОЖЬ + ) + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ + ) + ) +#Иначе + ИСТИНА +#КонецЕсли + + #Параметр(20) // [)[)][)]...] [ИЛИ|И] [([(][(]...] оператор И/ИЛИ с/без скобок. + +//// Проверка значения поля группы параметров 6. +#Если "#Параметр(21)" = "" И "#Параметр(22)" = "" #Тогда + // Группа параметров не используется. +#ИначеЕсли "#Параметр(21)" = "Условие" Или "#Параметр(21)" = "" #Тогда + // Когда имя вида доступа "Условие" (или ""), тогда вместо имени поля задано условие. + ( #Параметр(22) ) +#ИначеЕсли "#Параметр(21)" = "ПравоЧтения" Или "#Параметр(21)" = "ПравоИзменения" #Тогда + #Параметр(22) <> НЕОПРЕДЕЛЕНО + И ИСТИНА В + ( // Проверка права пользователя на таблицу Значения, установленного в поле. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава + ГДЕ + ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка + И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(22)) + #Если Не "#Параметр(21)" = "ПравоЧтения" #Тогда + И ТаблицыГруппДоступаПроверкаПрава.Изменение + #КонецЕсли + ) +#ИначеЕсли "#Параметр(21)" = "НастройкиПрав" #Тогда + + ( + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ( + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ПО + НаследованиеНастроек.Объект = #Параметр(22) + И НастройкиПрав.Объект = НаследованиеНастроек.Родитель + #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда + И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияЧтения + #Иначе + #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда + И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка + #Иначе + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + #КонецЕсли + И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения + #КонецЕсли + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ПО + СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь + И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь + ) + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. + ( + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ + ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ПО + НаследованиеНастроек.Объект = #Параметр(22) + И НастройкиПрав.Объект = НаследованиеНастроек.Родитель + #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда + И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияЧтения + #Иначе + #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда + И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка + #Иначе + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + #КонецЕсли + И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения + #КонецЕсли + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ПО + СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь + И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь + ) + ) +#ИначеЕсли Не СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(21),") #Тогда + // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. + #Если СтрСодержит("#Параметр(21)", ",") #Тогда + НеверныйВидДоступа: "#Параметр(21)" - "Список имен видов доступа не найден" + #Иначе + НеверныйВидДоступа: "#Параметр(21)" - "Имя вида доступа не найдено" + #КонецЕсли +#ИначеЕсли &ВидыДоступаСОтключеннымИспользованием <> "Все" + И Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(21),") #Тогда + + ( + ЕСТЬNULL(#Параметр(22), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО + И + #Если (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(21),", ",Пользователи,")) + Или (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(21),", ",ВнешниеПользователи,")) #Тогда + НЕ + ( + НЕ ИСТИНА В + ( + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа + ГДЕ + ГруппыЗначенийДоступа.ЗначениеДоступа = #Параметр(22) + И ГруппыЗначенийДоступа.ГруппаЗначенийДоступа = &АвторизованныйПользователь + ) + И НЕ + #Иначе + ( + #КонецЕсли + ВЫБОР + КОГДА ИСТИНА В + ( + #Если СтрСодержит(&ВидыДоступаБезГруппДляЗначенияДоступа, ",#Параметр(21),") #Тогда + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения + ГДЕ + Значения.ГруппаДоступа = ГруппыДоступа.Ссылка + И Значения.ЗначениеДоступа = #Параметр(22) + #ИначеЕсли "#Параметр(22)" = "Т.Ссылка" #Тогда + #Если СтрСодержит("#Параметр(21)", ",") #Тогда + // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. + НеверныйВидДоступа: "#Параметр(21)" - "При проверке таблицы значения доступа можно указывать только один вид доступа" + #ИначеЕсли СтрСодержит(&ВидыДоступаСОднойГруппойДляЗначенияДоступа, ",#Параметр(21),") #Тогда + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения + ГДЕ + Значения.ГруппаДоступа = ГруппыДоступа.Ссылка + И Значения.ЗначениеДоступа = Т.ГруппаДоступа + #Иначе // Значения доступа, для которых можно указать несколько групп значений доступа. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения + ВНУТРЕННЕЕ СОЕДИНЕНИЕ #Параметр(1).ГруппыДоступа КАК ГруппыЗначений + ПО + Значения.ГруппаДоступа = ГруппыДоступа.Ссылка + И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа + И ГруппыЗначений.Ссылка = #Параметр(22) + #КонецЕсли + #Иначе + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + ПО + Значения.ГруппаДоступа = ГруппыДоступа.Ссылка + И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа + И ГруппыЗначений.ЗначениеДоступа = #Параметр(22) + #КонецЕсли + ) + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ + = + ВЫБОР + КОГДА ИСТИНА В + ( + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию + ГДЕ + ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(#Параметр(22)) + И ЗначенияПоУмолчанию.ВсеРазрешены = ЛОЖЬ + ) + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ + ) + ) +#Иначе + ИСТИНА +#КонецЕсли + + #Параметр(23) // [)[)][)]...] [ИЛИ|И] [([(][(]...] оператор И/ИЛИ с/без скобок. + +//// Проверка значения поля группы параметров 7. +#Если "#Параметр(24)" = "" И "#Параметр(25)" = "" #Тогда + // Группа параметров не используется. +#ИначеЕсли "#Параметр(24)" = "Условие" Или "#Параметр(24)" = "" #Тогда + // Когда имя вида доступа "Условие" (или ""), тогда вместо имени поля задано условие. + ( #Параметр(25) ) +#ИначеЕсли "#Параметр(24)" = "ПравоЧтения" Или "#Параметр(24)" = "ПравоИзменения" #Тогда + #Параметр(25) <> НЕОПРЕДЕЛЕНО + И ИСТИНА В + ( // Проверка права пользователя на таблицу Значения, установленного в поле. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава + ГДЕ + ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка + И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(25)) + #Если Не "#Параметр(24)" = "ПравоЧтения" #Тогда + И ТаблицыГруппДоступаПроверкаПрава.Изменение + #КонецЕсли + ) +#ИначеЕсли "#Параметр(24)" = "НастройкиПрав" #Тогда + + ( + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ( + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ПО + НаследованиеНастроек.Объект = #Параметр(25) + И НастройкиПрав.Объект = НаследованиеНастроек.Родитель + #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда + И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияЧтения + #Иначе + #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда + И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка + #Иначе + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + #КонецЕсли + И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения + #КонецЕсли + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ПО + СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь + И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь + ) + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. + ( + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ + ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ПО + НаследованиеНастроек.Объект = #Параметр(25) + И НастройкиПрав.Объект = НаследованиеНастроек.Родитель + #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда + И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияЧтения + #Иначе + #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда + И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка + #Иначе + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + #КонецЕсли + И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения + #КонецЕсли + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ПО + СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь + И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь + ) + ) +#ИначеЕсли Не СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(24),") #Тогда + // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. + #Если СтрСодержит("#Параметр(24)", ",") #Тогда + НеверныйВидДоступа: "#Параметр(24)" - "Список имен видов доступа не найден" + #Иначе + НеверныйВидДоступа: "#Параметр(24)" - "Имя вида доступа не найдено" + #КонецЕсли +#ИначеЕсли &ВидыДоступаСОтключеннымИспользованием <> "Все" + И Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(24),") #Тогда + + ( + ЕСТЬNULL(#Параметр(25), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО + И + #Если (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(24),", ",Пользователи,")) + Или (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(24),", ",ВнешниеПользователи,")) #Тогда + НЕ + ( + НЕ ИСТИНА В + ( + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа + ГДЕ + ГруппыЗначенийДоступа.ЗначениеДоступа = #Параметр(25) + И ГруппыЗначенийДоступа.ГруппаЗначенийДоступа = &АвторизованныйПользователь + ) + И НЕ + #Иначе + ( + #КонецЕсли + ВЫБОР + КОГДА ИСТИНА В + ( + #Если СтрСодержит(&ВидыДоступаБезГруппДляЗначенияДоступа, ",#Параметр(24),") #Тогда + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения + ГДЕ + Значения.ГруппаДоступа = ГруппыДоступа.Ссылка + И Значения.ЗначениеДоступа = #Параметр(25) + #ИначеЕсли "#Параметр(25)" = "Т.Ссылка" #Тогда + #Если СтрСодержит("#Параметр(24)", ",") #Тогда + // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. + НеверныйВидДоступа: "#Параметр(24)" - "При проверке таблицы значения доступа можно указывать только один вид доступа" + #ИначеЕсли СтрСодержит(&ВидыДоступаСОднойГруппойДляЗначенияДоступа, ",#Параметр(24),") #Тогда + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения + ГДЕ + Значения.ГруппаДоступа = ГруппыДоступа.Ссылка + И Значения.ЗначениеДоступа = Т.ГруппаДоступа + #Иначе // Значения доступа, для которых можно указать несколько групп значений доступа. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения + ВНУТРЕННЕЕ СОЕДИНЕНИЕ #Параметр(1).ГруппыДоступа КАК ГруппыЗначений + ПО + Значения.ГруппаДоступа = ГруппыДоступа.Ссылка + И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа + И ГруппыЗначений.Ссылка = #Параметр(25) + #КонецЕсли + #Иначе + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + ПО + Значения.ГруппаДоступа = ГруппыДоступа.Ссылка + И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа + И ГруппыЗначений.ЗначениеДоступа = #Параметр(25) + #КонецЕсли + ) + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ + = + ВЫБОР + КОГДА ИСТИНА В + ( + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию + ГДЕ + ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(#Параметр(25)) + И ЗначенияПоУмолчанию.ВсеРазрешены = ЛОЖЬ + ) + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ + ) + ) +#Иначе + ИСТИНА +#КонецЕсли + + #Параметр(26) // [)[)][)]...] [ИЛИ|И] [([(][(]...] оператор И/ИЛИ с/без скобок. + +//// Проверка значения поля группы параметров 8. +#Если "#Параметр(27)" = "" И "#Параметр(28)" = "" #Тогда + // Группа параметров не используется. +#ИначеЕсли "#Параметр(27)" = "Условие" Или "#Параметр(27)" = "" #Тогда + // Когда имя вида доступа "Условие" (или ""), тогда вместо имени поля задано условие. + ( #Параметр(28) ) +#ИначеЕсли "#Параметр(27)" = "ПравоЧтения" Или "#Параметр(27)" = "ПравоИзменения" #Тогда + #Параметр(28) <> НЕОПРЕДЕЛЕНО + И ИСТИНА В + ( // Проверка права пользователя на таблицу Значения, установленного в поле. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава + ГДЕ + ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка + И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(28)) + #Если Не "#Параметр(27)" = "ПравоЧтения" #Тогда + И ТаблицыГруппДоступаПроверкаПрава.Изменение + #КонецЕсли + ) +#ИначеЕсли "#Параметр(27)" = "НастройкиПрав" #Тогда + + ( + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ( + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ПО + НаследованиеНастроек.Объект = #Параметр(28) + И НастройкиПрав.Объект = НаследованиеНастроек.Родитель + #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда + И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияЧтения + #Иначе + #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда + И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка + #Иначе + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + #КонецЕсли + И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения + #КонецЕсли + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ПО + СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь + И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь + ) + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. + ( + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ + ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ПО + НаследованиеНастроек.Объект = #Параметр(28) + И НастройкиПрав.Объект = НаследованиеНастроек.Родитель + #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда + И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияЧтения + #Иначе + #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда + И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка + #Иначе + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + #КонецЕсли + И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения + #КонецЕсли + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ПО + СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь + И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь + ) + ) +#ИначеЕсли Не СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(27),") #Тогда + // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. + #Если СтрСодержит("#Параметр(27)", ",") #Тогда + НеверныйВидДоступа: "#Параметр(27)" - "Список имен видов доступа не найден" + #Иначе + НеверныйВидДоступа: "#Параметр(27)" - "Имя вида доступа не найдено" + #КонецЕсли +#ИначеЕсли &ВидыДоступаСОтключеннымИспользованием <> "Все" + И Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(27),") #Тогда + + ( + ЕСТЬNULL(#Параметр(28), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО + И + #Если (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(27),", ",Пользователи,")) + Или (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(27),", ",ВнешниеПользователи,")) #Тогда + НЕ + ( + НЕ ИСТИНА В + ( + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа + ГДЕ + ГруппыЗначенийДоступа.ЗначениеДоступа = #Параметр(28) + И ГруппыЗначенийДоступа.ГруппаЗначенийДоступа = &АвторизованныйПользователь + ) + И НЕ + #Иначе + ( + #КонецЕсли + ВЫБОР + КОГДА ИСТИНА В + ( + #Если СтрСодержит(&ВидыДоступаБезГруппДляЗначенияДоступа, ",#Параметр(27),") #Тогда + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения + ГДЕ + Значения.ГруппаДоступа = ГруппыДоступа.Ссылка + И Значения.ЗначениеДоступа = #Параметр(28) + #ИначеЕсли "#Параметр(28)" = "Т.Ссылка" #Тогда + #Если СтрСодержит("#Параметр(27)", ",") #Тогда + // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. + НеверныйВидДоступа: "#Параметр(27)" - "При проверке таблицы значения доступа можно указывать только один вид доступа" + #ИначеЕсли СтрСодержит(&ВидыДоступаСОднойГруппойДляЗначенияДоступа, ",#Параметр(27),") #Тогда + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения + ГДЕ + Значения.ГруппаДоступа = ГруппыДоступа.Ссылка + И Значения.ЗначениеДоступа = Т.ГруппаДоступа + #Иначе // Значения доступа, для которых можно указать несколько групп значений доступа. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения + ВНУТРЕННЕЕ СОЕДИНЕНИЕ #Параметр(1).ГруппыДоступа КАК ГруппыЗначений + ПО + Значения.ГруппаДоступа = ГруппыДоступа.Ссылка + И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа + И ГруппыЗначений.Ссылка = #Параметр(28) + #КонецЕсли + #Иначе + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + ПО + Значения.ГруппаДоступа = ГруппыДоступа.Ссылка + И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа + И ГруппыЗначений.ЗначениеДоступа = #Параметр(28) + #КонецЕсли + ) + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ + = + ВЫБОР + КОГДА ИСТИНА В + ( + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию + ГДЕ + ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(#Параметр(28)) + И ЗначенияПоУмолчанию.ВсеРазрешены = ЛОЖЬ + ) + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ + ) + ) +#Иначе + ИСТИНА +#КонецЕсли + + #Параметр(29) // [)[)][)]...] [ИЛИ|И] [([(][(]...] оператор И/ИЛИ с/без скобок. + +//// Проверка значения поля группы параметров 9. +#Если "#Параметр(30)" = "" И "#Параметр(31)" = "" #Тогда + // Группа параметров не используется. +#ИначеЕсли "#Параметр(30)" = "Условие" Или "#Параметр(30)" = "" #Тогда + // Когда имя вида доступа "Условие" (или ""), тогда вместо имени поля задано условие. + ( #Параметр(31) ) +#ИначеЕсли "#Параметр(30)" = "ПравоЧтения" Или "#Параметр(30)" = "ПравоИзменения" #Тогда + #Параметр(31) <> НЕОПРЕДЕЛЕНО + И ИСТИНА В + ( // Проверка права пользователя на таблицу Значения, установленного в поле. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава + ГДЕ + ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка + И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(31)) + #Если Не "#Параметр(30)" = "ПравоЧтения" #Тогда + И ТаблицыГруппДоступаПроверкаПрава.Изменение + #КонецЕсли + ) +#ИначеЕсли "#Параметр(30)" = "НастройкиПрав" #Тогда + + ( + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ( + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ПО + НаследованиеНастроек.Объект = #Параметр(31) + И НастройкиПрав.Объект = НаследованиеНастроек.Родитель + #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда + И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияЧтения + #Иначе + #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда + И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка + #Иначе + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + #КонецЕсли + И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения + #КонецЕсли + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ПО + СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь + И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь + ) + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. + ( + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ + ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ПО + НаследованиеНастроек.Объект = #Параметр(31) + И НастройкиПрав.Объект = НаследованиеНастроек.Родитель + #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда + И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияЧтения + #Иначе + #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда + И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка + #Иначе + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + #КонецЕсли + И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения + #КонецЕсли + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ПО + СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь + И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь + ) + ) +#ИначеЕсли Не СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(30),") #Тогда + // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. + #Если СтрСодержит("#Параметр(30)", ",") #Тогда + НеверныйВидДоступа: "#Параметр(30)" - "Список имен видов доступа не найден" + #Иначе + НеверныйВидДоступа: "#Параметр(30)" - "Имя вида доступа не найдено" + #КонецЕсли +#ИначеЕсли &ВидыДоступаСОтключеннымИспользованием <> "Все" + И Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(30),") #Тогда + + ( + ЕСТЬNULL(#Параметр(31), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО + И + #Если (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(30),", ",Пользователи,")) + Или (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(30),", ",ВнешниеПользователи,")) #Тогда + НЕ + ( + НЕ ИСТИНА В + ( + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа + ГДЕ + ГруппыЗначенийДоступа.ЗначениеДоступа = #Параметр(31) + И ГруппыЗначенийДоступа.ГруппаЗначенийДоступа = &АвторизованныйПользователь + ) + И НЕ + #Иначе + ( + #КонецЕсли + ВЫБОР + КОГДА ИСТИНА В + ( + #Если СтрСодержит(&ВидыДоступаБезГруппДляЗначенияДоступа, ",#Параметр(30),") #Тогда + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения + ГДЕ + Значения.ГруппаДоступа = ГруппыДоступа.Ссылка + И Значения.ЗначениеДоступа = #Параметр(31) + #ИначеЕсли "#Параметр(31)" = "Т.Ссылка" #Тогда + #Если СтрСодержит("#Параметр(30)", ",") #Тогда + // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. + НеверныйВидДоступа: "#Параметр(30)" - "При проверке таблицы значения доступа можно указывать только один вид доступа" + #ИначеЕсли СтрСодержит(&ВидыДоступаСОднойГруппойДляЗначенияДоступа, ",#Параметр(30),") #Тогда + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения + ГДЕ + Значения.ГруппаДоступа = ГруппыДоступа.Ссылка + И Значения.ЗначениеДоступа = Т.ГруппаДоступа + #Иначе // Значения доступа, для которых можно указать несколько групп значений доступа. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения + ВНУТРЕННЕЕ СОЕДИНЕНИЕ #Параметр(1).ГруппыДоступа КАК ГруппыЗначений + ПО + Значения.ГруппаДоступа = ГруппыДоступа.Ссылка + И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа + И ГруппыЗначений.Ссылка = #Параметр(31) + #КонецЕсли + #Иначе + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + ПО + Значения.ГруппаДоступа = ГруппыДоступа.Ссылка + И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа + И ГруппыЗначений.ЗначениеДоступа = #Параметр(31) + #КонецЕсли + ) + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ + = + ВЫБОР + КОГДА ИСТИНА В + ( + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию + ГДЕ + ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(#Параметр(31)) + И ЗначенияПоУмолчанию.ВсеРазрешены = ЛОЖЬ + ) + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ + ) + ) +#Иначе + ИСТИНА +#КонецЕсли + + #Параметр(32) // [)[)][)]...] [ИЛИ|И] [([(][(]...] оператор И/ИЛИ с/без скобок. + +//// Проверка значения поля группы параметров 10. +#Если "#Параметр(33)" = "" И "#Параметр(34)" = "" #Тогда + // Группа параметров не используется. +#ИначеЕсли "#Параметр(33)" = "Условие" Или "#Параметр(33)" = "" #Тогда + // Когда имя вида доступа "Условие" (или ""), тогда вместо имени поля задано условие. + ( #Параметр(34) ) +#ИначеЕсли "#Параметр(33)" = "ПравоЧтения" Или "#Параметр(33)" = "ПравоИзменения" #Тогда + #Параметр(34) <> НЕОПРЕДЕЛЕНО + И ИСТИНА В + ( // Проверка права пользователя на таблицу Значения, установленного в поле. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава + ГДЕ + ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка + И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(34)) + #Если Не "#Параметр(33)" = "ПравоЧтения" #Тогда + И ТаблицыГруппДоступаПроверкаПрава.Изменение + #КонецЕсли + ) +#ИначеЕсли "#Параметр(33)" = "НастройкиПрав" #Тогда + + ( + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ( + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ПО + НаследованиеНастроек.Объект = #Параметр(34) + И НастройкиПрав.Объект = НаследованиеНастроек.Родитель + #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда + И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияЧтения + #Иначе + #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда + И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка + #Иначе + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + #КонецЕсли + И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения + #КонецЕсли + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ПО + СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь + И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь + ) + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. + ( + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ + ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ПО + НаследованиеНастроек.Объект = #Параметр(34) + И НастройкиПрав.Объект = НаследованиеНастроек.Родитель + #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда + И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияЧтения + #Иначе + #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда + И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка + #Иначе + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + #КонецЕсли + И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения + #КонецЕсли + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ПО + СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь + И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь + ) + ) +#ИначеЕсли Не СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(33),") #Тогда + // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. + #Если СтрСодержит("#Параметр(33)", ",") #Тогда + НеверныйВидДоступа: "#Параметр(33)" - "Список имен видов доступа не найден" + #Иначе + НеверныйВидДоступа: "#Параметр(33)" - "Имя вида доступа не найдено" + #КонецЕсли +#ИначеЕсли &ВидыДоступаСОтключеннымИспользованием <> "Все" + И Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(33),") #Тогда + + ( + ЕСТЬNULL(#Параметр(34), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО + И + #Если (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(33),", ",Пользователи,")) + Или (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(33),", ",ВнешниеПользователи,")) #Тогда + НЕ + ( + НЕ ИСТИНА В + ( + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа + ГДЕ + ГруппыЗначенийДоступа.ЗначениеДоступа = #Параметр(34) + И ГруппыЗначенийДоступа.ГруппаЗначенийДоступа = &АвторизованныйПользователь + ) + И НЕ + #Иначе + ( + #КонецЕсли + ВЫБОР + КОГДА ИСТИНА В + ( + #Если СтрСодержит(&ВидыДоступаБезГруппДляЗначенияДоступа, ",#Параметр(33),") #Тогда + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения + ГДЕ + Значения.ГруппаДоступа = ГруппыДоступа.Ссылка + И Значения.ЗначениеДоступа = #Параметр(34) + #ИначеЕсли "#Параметр(34)" = "Т.Ссылка" #Тогда + #Если СтрСодержит("#Параметр(33)", ",") #Тогда + // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. + НеверныйВидДоступа: "#Параметр(33)" - "При проверке таблицы значения доступа можно указывать только один вид доступа" + #ИначеЕсли СтрСодержит(&ВидыДоступаСОднойГруппойДляЗначенияДоступа, ",#Параметр(33),") #Тогда + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения + ГДЕ + Значения.ГруппаДоступа = ГруппыДоступа.Ссылка + И Значения.ЗначениеДоступа = Т.ГруппаДоступа + #Иначе // Значения доступа, для которых можно указать несколько групп значений доступа. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения + ВНУТРЕННЕЕ СОЕДИНЕНИЕ #Параметр(1).ГруппыДоступа КАК ГруппыЗначений + ПО + Значения.ГруппаДоступа = ГруппыДоступа.Ссылка + И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа + И ГруппыЗначений.Ссылка = #Параметр(34) + #КонецЕсли + #Иначе + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + ПО + Значения.ГруппаДоступа = ГруппыДоступа.Ссылка + И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа + И ГруппыЗначений.ЗначениеДоступа = #Параметр(34) + #КонецЕсли + ) + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ + = + ВЫБОР + КОГДА ИСТИНА В + ( + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию + ГДЕ + ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(#Параметр(34)) + И ЗначенияПоУмолчанию.ВсеРазрешены = ЛОЖЬ + ) + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ + ) + ) +#Иначе + ИСТИНА +#КонецЕсли + + #Параметр(35) // [)[)][)]...] [ИЛИ|И] [([(][(]...] оператор И/ИЛИ с/без скобок. + +//// Проверка значения поля группы параметров 11. +#Если "#Параметр(36)" = "" И "#Параметр(37)" = "" #Тогда + // Группа параметров не используется. +#ИначеЕсли "#Параметр(36)" = "Условие" Или "#Параметр(36)" = "" #Тогда + // Когда имя вида доступа "Условие" (или ""), тогда вместо имени поля задано условие. + ( #Параметр(37) ) +#ИначеЕсли "#Параметр(36)" = "ПравоЧтения" Или "#Параметр(36)" = "ПравоИзменения" #Тогда + #Параметр(37) <> НЕОПРЕДЕЛЕНО + И ИСТИНА В + ( // Проверка права пользователя на таблицу Значения, установленного в поле. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава + ГДЕ + ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка + И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(37)) + #Если Не "#Параметр(36)" = "ПравоЧтения" #Тогда + И ТаблицыГруппДоступаПроверкаПрава.Изменение + #КонецЕсли + ) +#ИначеЕсли "#Параметр(36)" = "НастройкиПрав" #Тогда + + ( + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ( + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ПО + НаследованиеНастроек.Объект = #Параметр(37) + И НастройкиПрав.Объект = НаследованиеНастроек.Родитель + #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда + И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияЧтения + #Иначе + #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда + И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка + #Иначе + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + #КонецЕсли + И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения + #КонецЕсли + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ПО + СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь + И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь + ) + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. + ( + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ + ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ПО + НаследованиеНастроек.Объект = #Параметр(37) + И НастройкиПрав.Объект = НаследованиеНастроек.Родитель + #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда + И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияЧтения + #Иначе + #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда + И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка + #Иначе + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + #КонецЕсли + И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения + #КонецЕсли + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ПО + СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь + И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь + ) + ) +#ИначеЕсли Не СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(36),") #Тогда + // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. + #Если СтрСодержит("#Параметр(36)", ",") #Тогда + НеверныйВидДоступа: "#Параметр(36)" - "Список имен видов доступа не найден" + #Иначе + НеверныйВидДоступа: "#Параметр(36)" - "Имя вида доступа не найдено" + #КонецЕсли +#ИначеЕсли &ВидыДоступаСОтключеннымИспользованием <> "Все" + И Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(36),") #Тогда + + ( + ЕСТЬNULL(#Параметр(37), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО + И + #Если (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(36),", ",Пользователи,")) + Или (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(36),", ",ВнешниеПользователи,")) #Тогда + НЕ + ( + НЕ ИСТИНА В + ( + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа + ГДЕ + ГруппыЗначенийДоступа.ЗначениеДоступа = #Параметр(37) + И ГруппыЗначенийДоступа.ГруппаЗначенийДоступа = &АвторизованныйПользователь + ) + И НЕ + #Иначе + ( + #КонецЕсли + ВЫБОР + КОГДА ИСТИНА В + ( + #Если СтрСодержит(&ВидыДоступаБезГруппДляЗначенияДоступа, ",#Параметр(36),") #Тогда + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения + ГДЕ + Значения.ГруппаДоступа = ГруппыДоступа.Ссылка + И Значения.ЗначениеДоступа = #Параметр(37) + #ИначеЕсли "#Параметр(37)" = "Т.Ссылка" #Тогда + #Если СтрСодержит("#Параметр(36)", ",") #Тогда + // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. + НеверныйВидДоступа: "#Параметр(36)" - "При проверке таблицы значения доступа можно указывать только один вид доступа" + #ИначеЕсли СтрСодержит(&ВидыДоступаСОднойГруппойДляЗначенияДоступа, ",#Параметр(36),") #Тогда + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения + ГДЕ + Значения.ГруппаДоступа = ГруппыДоступа.Ссылка + И Значения.ЗначениеДоступа = Т.ГруппаДоступа + #Иначе // Значения доступа, для которых можно указать несколько групп значений доступа. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения + ВНУТРЕННЕЕ СОЕДИНЕНИЕ #Параметр(1).ГруппыДоступа КАК ГруппыЗначений + ПО + Значения.ГруппаДоступа = ГруппыДоступа.Ссылка + И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа + И ГруппыЗначений.Ссылка = #Параметр(37) + #КонецЕсли + #Иначе + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + ПО + Значения.ГруппаДоступа = ГруппыДоступа.Ссылка + И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа + И ГруппыЗначений.ЗначениеДоступа = #Параметр(37) + #КонецЕсли + ) + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ + = + ВЫБОР + КОГДА ИСТИНА В + ( + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию + ГДЕ + ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(#Параметр(37)) + И ЗначенияПоУмолчанию.ВсеРазрешены = ЛОЖЬ + ) + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ + ) + ) +#Иначе + ИСТИНА +#КонецЕсли + + #Параметр(38) // [)[)][)]...] [ИЛИ|И] [([(][(]...] оператор И/ИЛИ с/без скобок. + +//// Проверка значения поля группы параметров 12. +#Если "#Параметр(39)" = "" И "#Параметр(40)" = "" #Тогда + // Группа параметров не используется. +#ИначеЕсли "#Параметр(39)" = "Условие" Или "#Параметр(39)" = "" #Тогда + // Когда имя вида доступа "Условие" (или ""), тогда вместо имени поля задано условие. + ( #Параметр(40) ) +#ИначеЕсли "#Параметр(39)" = "ПравоЧтения" Или "#Параметр(39)" = "ПравоИзменения" #Тогда + #Параметр(40) <> НЕОПРЕДЕЛЕНО + И ИСТИНА В + ( // Проверка права пользователя на таблицу Значения, установленного в поле. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава + ГДЕ + ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка + И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(40)) + #Если Не "#Параметр(39)" = "ПравоЧтения" #Тогда + И ТаблицыГруппДоступаПроверкаПрава.Изменение + #КонецЕсли + ) +#ИначеЕсли "#Параметр(39)" = "НастройкиПрав" #Тогда + + ( + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ( + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ПО + НаследованиеНастроек.Объект = #Параметр(40) + И НастройкиПрав.Объект = НаследованиеНастроек.Родитель + #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда + И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияЧтения + #Иначе + #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда + И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка + #Иначе + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + #КонецЕсли + И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения + #КонецЕсли + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ПО + СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь + И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь + ) + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. + ( + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ + ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ПО + НаследованиеНастроек.Объект = #Параметр(40) + И НастройкиПрав.Объект = НаследованиеНастроек.Родитель + #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда + И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияЧтения + #Иначе + #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда + И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка + #Иначе + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + #КонецЕсли + И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения + #КонецЕсли + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ПО + СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь + И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь + ) + ) +#ИначеЕсли Не СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(39),") #Тогда + // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. + #Если СтрСодержит("#Параметр(39)", ",") #Тогда + НеверныйВидДоступа: "#Параметр(39)" - "Список имен видов доступа не найден" + #Иначе + НеверныйВидДоступа: "#Параметр(39)" - "Имя вида доступа не найдено" + #КонецЕсли +#ИначеЕсли &ВидыДоступаСОтключеннымИспользованием <> "Все" + И Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(39),") #Тогда + + ( + ЕСТЬNULL(#Параметр(40), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО + И + #Если (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(39),", ",Пользователи,")) + Или (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(39),", ",ВнешниеПользователи,")) #Тогда + НЕ + ( + НЕ ИСТИНА В + ( + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа + ГДЕ + ГруппыЗначенийДоступа.ЗначениеДоступа = #Параметр(40) + И ГруппыЗначенийДоступа.ГруппаЗначенийДоступа = &АвторизованныйПользователь + ) + И НЕ + #Иначе + ( + #КонецЕсли + ВЫБОР + КОГДА ИСТИНА В + ( + #Если СтрСодержит(&ВидыДоступаБезГруппДляЗначенияДоступа, ",#Параметр(39),") #Тогда + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения + ГДЕ + Значения.ГруппаДоступа = ГруппыДоступа.Ссылка + И Значения.ЗначениеДоступа = #Параметр(40) + #ИначеЕсли "#Параметр(40)" = "Т.Ссылка" #Тогда + #Если СтрСодержит("#Параметр(39)", ",") #Тогда + // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. + НеверныйВидДоступа: "#Параметр(39)" - "При проверке таблицы значения доступа можно указывать только один вид доступа" + #ИначеЕсли СтрСодержит(&ВидыДоступаСОднойГруппойДляЗначенияДоступа, ",#Параметр(39),") #Тогда + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения + ГДЕ + Значения.ГруппаДоступа = ГруппыДоступа.Ссылка + И Значения.ЗначениеДоступа = Т.ГруппаДоступа + #Иначе // Значения доступа, для которых можно указать несколько групп значений доступа. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения + ВНУТРЕННЕЕ СОЕДИНЕНИЕ #Параметр(1).ГруппыДоступа КАК ГруппыЗначений + ПО + Значения.ГруппаДоступа = ГруппыДоступа.Ссылка + И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа + И ГруппыЗначений.Ссылка = #Параметр(40) + #КонецЕсли + #Иначе + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + ПО + Значения.ГруппаДоступа = ГруппыДоступа.Ссылка + И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа + И ГруппыЗначений.ЗначениеДоступа = #Параметр(40) + #КонецЕсли + ) + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ + = + ВЫБОР + КОГДА ИСТИНА В + ( + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию + ГДЕ + ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(#Параметр(40)) + И ЗначенияПоУмолчанию.ВсеРазрешены = ЛОЖЬ + ) + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ + ) + ) +#Иначе + ИСТИНА +#КонецЕсли + + #Параметр(41) // [)[)][)]...] [ИЛИ|И] [([(][(]...] оператор И/ИЛИ с/без скобок. + +//// Проверка значения поля группы параметров 13. +#Если "#Параметр(42)" = "" И "#Параметр(43)" = "" #Тогда + // Группа параметров не используется. +#ИначеЕсли "#Параметр(42)" = "Условие" Или "#Параметр(42)" = "" #Тогда + // Когда имя вида доступа "Условие" (или ""), тогда вместо имени поля задано условие. + ( #Параметр(43) ) +#ИначеЕсли "#Параметр(42)" = "ПравоЧтения" Или "#Параметр(42)" = "ПравоИзменения" #Тогда + #Параметр(43) <> НЕОПРЕДЕЛЕНО + И ИСТИНА В + ( // Проверка права пользователя на таблицу Значения, установленного в поле. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава + ГДЕ + ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка + И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(43)) + #Если Не "#Параметр(42)" = "ПравоЧтения" #Тогда + И ТаблицыГруппДоступаПроверкаПрава.Изменение + #КонецЕсли + ) +#ИначеЕсли "#Параметр(42)" = "НастройкиПрав" #Тогда + + ( + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ( + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ПО + НаследованиеНастроек.Объект = #Параметр(43) + И НастройкиПрав.Объект = НаследованиеНастроек.Родитель + #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда + И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияЧтения + #Иначе + #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда + И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка + #Иначе + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + #КонецЕсли + И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения + #КонецЕсли + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ПО + СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь + И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь + ) + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. + ( + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ + ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ПО + НаследованиеНастроек.Объект = #Параметр(43) + И НастройкиПрав.Объект = НаследованиеНастроек.Родитель + #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда + И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияЧтения + #Иначе + #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда + И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка + #Иначе + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + #КонецЕсли + И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения + #КонецЕсли + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ПО + СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь + И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь + ) + ) +#ИначеЕсли Не СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(42),") #Тогда + // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. + #Если СтрСодержит("#Параметр(42)", ",") #Тогда + НеверныйВидДоступа: "#Параметр(42)" - "Список имен видов доступа не найден" + #Иначе + НеверныйВидДоступа: "#Параметр(42)" - "Имя вида доступа не найдено" + #КонецЕсли +#ИначеЕсли &ВидыДоступаСОтключеннымИспользованием <> "Все" + И Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(42),") #Тогда + + ( + ЕСТЬNULL(#Параметр(43), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО + И + #Если (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(42),", ",Пользователи,")) + Или (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(42),", ",ВнешниеПользователи,")) #Тогда + НЕ + ( + НЕ ИСТИНА В + ( + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа + ГДЕ + ГруппыЗначенийДоступа.ЗначениеДоступа = #Параметр(43) + И ГруппыЗначенийДоступа.ГруппаЗначенийДоступа = &АвторизованныйПользователь + ) + И НЕ + #Иначе + ( + #КонецЕсли + ВЫБОР + КОГДА ИСТИНА В + ( + #Если СтрСодержит(&ВидыДоступаБезГруппДляЗначенияДоступа, ",#Параметр(42),") #Тогда + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения + ГДЕ + Значения.ГруппаДоступа = ГруппыДоступа.Ссылка + И Значения.ЗначениеДоступа = #Параметр(43) + #ИначеЕсли "#Параметр(43)" = "Т.Ссылка" #Тогда + #Если СтрСодержит("#Параметр(42)", ",") #Тогда + // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. + НеверныйВидДоступа: "#Параметр(42)" - "При проверке таблицы значения доступа можно указывать только один вид доступа" + #ИначеЕсли СтрСодержит(&ВидыДоступаСОднойГруппойДляЗначенияДоступа, ",#Параметр(42),") #Тогда + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения + ГДЕ + Значения.ГруппаДоступа = ГруппыДоступа.Ссылка + И Значения.ЗначениеДоступа = Т.ГруппаДоступа + #Иначе // Значения доступа, для которых можно указать несколько групп значений доступа. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения + ВНУТРЕННЕЕ СОЕДИНЕНИЕ #Параметр(1).ГруппыДоступа КАК ГруппыЗначений + ПО + Значения.ГруппаДоступа = ГруппыДоступа.Ссылка + И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа + И ГруппыЗначений.Ссылка = #Параметр(43) + #КонецЕсли + #Иначе + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + ПО + Значения.ГруппаДоступа = ГруппыДоступа.Ссылка + И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа + И ГруппыЗначений.ЗначениеДоступа = #Параметр(43) + #КонецЕсли + ) + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ + = + ВЫБОР + КОГДА ИСТИНА В + ( + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию + ГДЕ + ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(#Параметр(43)) + И ЗначенияПоУмолчанию.ВсеРазрешены = ЛОЖЬ + ) + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ + ) + ) +#Иначе + ИСТИНА +#КонецЕсли + + #Параметр(44) // [)[)][)]...] [ИЛИ|И] [([(][(]...] оператор И/ИЛИ с/без скобок. + +//// Проверка значения поля группы параметров 14. +#Если "#Параметр(45)" = "" И "#Параметр(46)" = "" #Тогда + // Группа параметров не используется. +#ИначеЕсли "#Параметр(45)" = "Условие" Или "#Параметр(45)" = "" #Тогда + // Когда имя вида доступа "Условие" (или ""), тогда вместо имени поля задано условие. + ( #Параметр(46) ) +#ИначеЕсли "#Параметр(45)" = "ПравоЧтения" Или "#Параметр(45)" = "ПравоИзменения" #Тогда + #Параметр(46) <> НЕОПРЕДЕЛЕНО + И ИСТИНА В + ( // Проверка права пользователя на таблицу Значения, установленного в поле. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава + ГДЕ + ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка + И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(46)) + #Если Не "#Параметр(45)" = "ПравоЧтения" #Тогда + И ТаблицыГруппДоступаПроверкаПрава.Изменение + #КонецЕсли + ) +#ИначеЕсли "#Параметр(45)" = "НастройкиПрав" #Тогда + + ( + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ( + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ПО + НаследованиеНастроек.Объект = #Параметр(46) + И НастройкиПрав.Объект = НаследованиеНастроек.Родитель + #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда + И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияЧтения + #Иначе + #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда + И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка + #Иначе + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + #КонецЕсли + И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения + #КонецЕсли + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ПО + СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь + И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь + ) + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. + ( + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ + ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ПО + НаследованиеНастроек.Объект = #Параметр(46) + И НастройкиПрав.Объект = НаследованиеНастроек.Родитель + #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда + И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияЧтения + #Иначе + #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда + И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка + #Иначе + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + #КонецЕсли + И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения + #КонецЕсли + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ПО + СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь + И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь + ) + ) +#ИначеЕсли Не СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(45),") #Тогда + // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. + #Если СтрСодержит("#Параметр(45)", ",") #Тогда + НеверныйВидДоступа: "#Параметр(45)" - "Список имен видов доступа не найден" + #Иначе + НеверныйВидДоступа: "#Параметр(45)" - "Имя вида доступа не найдено" + #КонецЕсли +#ИначеЕсли &ВидыДоступаСОтключеннымИспользованием <> "Все" + И Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(45),") #Тогда + + ( + ЕСТЬNULL(#Параметр(46), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО + И + #Если (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(45),", ",Пользователи,")) + Или (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(45),", ",ВнешниеПользователи,")) #Тогда + НЕ + ( + НЕ ИСТИНА В + ( + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа + ГДЕ + ГруппыЗначенийДоступа.ЗначениеДоступа = #Параметр(46) + И ГруппыЗначенийДоступа.ГруппаЗначенийДоступа = &АвторизованныйПользователь + ) + И НЕ + #Иначе + ( + #КонецЕсли + ВЫБОР + КОГДА ИСТИНА В + ( + #Если СтрСодержит(&ВидыДоступаБезГруппДляЗначенияДоступа, ",#Параметр(45),") #Тогда + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения + ГДЕ + Значения.ГруппаДоступа = ГруппыДоступа.Ссылка + И Значения.ЗначениеДоступа = #Параметр(46) + #ИначеЕсли "#Параметр(46)" = "Т.Ссылка" #Тогда + #Если СтрСодержит("#Параметр(45)", ",") #Тогда + // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. + НеверныйВидДоступа: "#Параметр(45)" - "При проверке таблицы значения доступа можно указывать только один вид доступа" + #ИначеЕсли СтрСодержит(&ВидыДоступаСОднойГруппойДляЗначенияДоступа, ",#Параметр(45),") #Тогда + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения + ГДЕ + Значения.ГруппаДоступа = ГруппыДоступа.Ссылка + И Значения.ЗначениеДоступа = Т.ГруппаДоступа + #Иначе // Значения доступа, для которых можно указать несколько групп значений доступа. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения + ВНУТРЕННЕЕ СОЕДИНЕНИЕ #Параметр(1).ГруппыДоступа КАК ГруппыЗначений + ПО + Значения.ГруппаДоступа = ГруппыДоступа.Ссылка + И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа + И ГруппыЗначений.Ссылка = #Параметр(46) + #КонецЕсли + #Иначе + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + ПО + Значения.ГруппаДоступа = ГруппыДоступа.Ссылка + И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа + И ГруппыЗначений.ЗначениеДоступа = #Параметр(46) + #КонецЕсли + ) + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ + = + ВЫБОР + КОГДА ИСТИНА В + ( + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию + ГДЕ + ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(#Параметр(46)) + И ЗначенияПоУмолчанию.ВсеРазрешены = ЛОЖЬ + ) + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ + ) + ) +#Иначе + ИСТИНА +#КонецЕсли + + #Параметр(47) // [)[)][)]...] [ИЛИ|И] [([(][(]...] оператор И/ИЛИ с/без скобок. + +//// Проверка значения поля группы параметров 15. +#Если "#Параметр(48)" = "" И "#Параметр(49)" = "" #Тогда + // Группа параметров не используется. +#ИначеЕсли "#Параметр(48)" = "Условие" Или "#Параметр(48)" = "" #Тогда + // Когда имя вида доступа "Условие" (или ""), тогда вместо имени поля задано условие. + ( #Параметр(49) ) +#ИначеЕсли "#Параметр(48)" = "ПравоЧтения" Или "#Параметр(48)" = "ПравоИзменения" #Тогда + #Параметр(49) <> НЕОПРЕДЕЛЕНО + И ИСТИНА В + ( // Проверка права пользователя на таблицу Значения, установленного в поле. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава + ГДЕ + ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка + И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(49)) + #Если Не "#Параметр(48)" = "ПравоЧтения" #Тогда + И ТаблицыГруппДоступаПроверкаПрава.Изменение + #КонецЕсли + ) +#ИначеЕсли "#Параметр(48)" = "НастройкиПрав" #Тогда + + ( + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ( + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ПО + НаследованиеНастроек.Объект = #Параметр(49) + И НастройкиПрав.Объект = НаследованиеНастроек.Родитель + #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда + И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияЧтения + #Иначе + #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда + И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка + #Иначе + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + #КонецЕсли + И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения + #КонецЕсли + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ПО + СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь + И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь + ) + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. + ( + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ + ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ПО + НаследованиеНастроек.Объект = #Параметр(49) + И НастройкиПрав.Объект = НаследованиеНастроек.Родитель + #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда + И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияЧтения + #Иначе + #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда + И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка + #Иначе + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + #КонецЕсли + И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения + #КонецЕсли + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ПО + СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь + И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь + ) + ) +#ИначеЕсли Не СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(48),") #Тогда + // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. + #Если СтрСодержит("#Параметр(48)", ",") #Тогда + НеверныйВидДоступа: "#Параметр(48)" - "Список имен видов доступа не найден" + #Иначе + НеверныйВидДоступа: "#Параметр(48)" - "Имя вида доступа не найдено" + #КонецЕсли +#ИначеЕсли &ВидыДоступаСОтключеннымИспользованием <> "Все" + И Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(48),") #Тогда + + ( + ЕСТЬNULL(#Параметр(49), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО + И + #Если (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(48),", ",Пользователи,")) + Или (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(48),", ",ВнешниеПользователи,")) #Тогда + НЕ + ( + НЕ ИСТИНА В + ( + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа + ГДЕ + ГруппыЗначенийДоступа.ЗначениеДоступа = #Параметр(49) + И ГруппыЗначенийДоступа.ГруппаЗначенийДоступа = &АвторизованныйПользователь + ) + И НЕ + #Иначе + ( + #КонецЕсли + ВЫБОР + КОГДА ИСТИНА В + ( + #Если СтрСодержит(&ВидыДоступаБезГруппДляЗначенияДоступа, ",#Параметр(48),") #Тогда + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения + ГДЕ + Значения.ГруппаДоступа = ГруппыДоступа.Ссылка + И Значения.ЗначениеДоступа = #Параметр(49) + #ИначеЕсли "#Параметр(49)" = "Т.Ссылка" #Тогда + #Если СтрСодержит("#Параметр(48)", ",") #Тогда + // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. + НеверныйВидДоступа: "#Параметр(48)" - "При проверке таблицы значения доступа можно указывать только один вид доступа" + #ИначеЕсли СтрСодержит(&ВидыДоступаСОднойГруппойДляЗначенияДоступа, ",#Параметр(48),") #Тогда + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения + ГДЕ + Значения.ГруппаДоступа = ГруппыДоступа.Ссылка + И Значения.ЗначениеДоступа = Т.ГруппаДоступа + #Иначе // Значения доступа, для которых можно указать несколько групп значений доступа. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения + ВНУТРЕННЕЕ СОЕДИНЕНИЕ #Параметр(1).ГруппыДоступа КАК ГруппыЗначений + ПО + Значения.ГруппаДоступа = ГруппыДоступа.Ссылка + И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа + И ГруппыЗначений.Ссылка = #Параметр(49) + #КонецЕсли + #Иначе + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + ПО + Значения.ГруппаДоступа = ГруппыДоступа.Ссылка + И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа + И ГруппыЗначений.ЗначениеДоступа = #Параметр(49) + #КонецЕсли + ) + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ + = + ВЫБОР + КОГДА ИСТИНА В + ( + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию + ГДЕ + ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(#Параметр(49)) + И ЗначенияПоУмолчанию.ВсеРазрешены = ЛОЖЬ + ) + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ + ) + ) +#Иначе + ИСТИНА +#КонецЕсли + + #Параметр(50) // [)[)][)]...] [ИЛИ|И] [([(][(]...] оператор И/ИЛИ с/без скобок. + +//// Проверка значения поля группы параметров 16. +#Если "#Параметр(51)" = "" И "#Параметр(52)" = "" #Тогда + // Группа параметров не используется. +#ИначеЕсли "#Параметр(51)" = "Условие" Или "#Параметр(51)" = "" #Тогда + // Когда имя вида доступа "Условие" (или ""), тогда вместо имени поля задано условие. + ( #Параметр(52) ) +#ИначеЕсли "#Параметр(51)" = "ПравоЧтения" Или "#Параметр(51)" = "ПравоИзменения" #Тогда + #Параметр(52) <> НЕОПРЕДЕЛЕНО + И ИСТИНА В + ( // Проверка права пользователя на таблицу Значения, установленного в поле. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава + ГДЕ + ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка + И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(52)) + #Если Не "#Параметр(51)" = "ПравоЧтения" #Тогда + И ТаблицыГруппДоступаПроверкаПрава.Изменение + #КонецЕсли + ) +#ИначеЕсли "#Параметр(51)" = "НастройкиПрав" #Тогда + + ( + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ( + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ПО + НаследованиеНастроек.Объект = #Параметр(52) + И НастройкиПрав.Объект = НаследованиеНастроек.Родитель + #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда + И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияЧтения + #Иначе + #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда + И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка + #Иначе + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + #КонецЕсли + И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения + #КонецЕсли + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ПО + СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь + И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь + ) + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. + ( + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ + ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ПО + НаследованиеНастроек.Объект = #Параметр(52) + И НастройкиПрав.Объект = НаследованиеНастроек.Родитель + #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда + И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияЧтения + #Иначе + #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда + И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка + #Иначе + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + #КонецЕсли + И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения + #КонецЕсли + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ПО + СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь + И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь + ) + ) +#ИначеЕсли Не СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(51),") #Тогда + // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. + #Если СтрСодержит("#Параметр(51)", ",") #Тогда + НеверныйВидДоступа: "#Параметр(51)" - "Список имен видов доступа не найден" + #Иначе + НеверныйВидДоступа: "#Параметр(51)" - "Имя вида доступа не найдено" + #КонецЕсли +#ИначеЕсли &ВидыДоступаСОтключеннымИспользованием <> "Все" + И Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(51),") #Тогда + + ( + ЕСТЬNULL(#Параметр(52), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО + И + #Если (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(51),", ",Пользователи,")) + Или (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(51),", ",ВнешниеПользователи,")) #Тогда + НЕ + ( + НЕ ИСТИНА В + ( + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа + ГДЕ + ГруппыЗначенийДоступа.ЗначениеДоступа = #Параметр(52) + И ГруппыЗначенийДоступа.ГруппаЗначенийДоступа = &АвторизованныйПользователь + ) + И НЕ + #Иначе + ( + #КонецЕсли + ВЫБОР + КОГДА ИСТИНА В + ( + #Если СтрСодержит(&ВидыДоступаБезГруппДляЗначенияДоступа, ",#Параметр(51),") #Тогда + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения + ГДЕ + Значения.ГруппаДоступа = ГруппыДоступа.Ссылка + И Значения.ЗначениеДоступа = #Параметр(52) + #ИначеЕсли "#Параметр(52)" = "Т.Ссылка" #Тогда + #Если СтрСодержит("#Параметр(51)", ",") #Тогда + // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. + НеверныйВидДоступа: "#Параметр(51)" - "При проверке таблицы значения доступа можно указывать только один вид доступа" + #ИначеЕсли СтрСодержит(&ВидыДоступаСОднойГруппойДляЗначенияДоступа, ",#Параметр(51),") #Тогда + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения + ГДЕ + Значения.ГруппаДоступа = ГруппыДоступа.Ссылка + И Значения.ЗначениеДоступа = Т.ГруппаДоступа + #Иначе // Значения доступа, для которых можно указать несколько групп значений доступа. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения + ВНУТРЕННЕЕ СОЕДИНЕНИЕ #Параметр(1).ГруппыДоступа КАК ГруппыЗначений + ПО + Значения.ГруппаДоступа = ГруппыДоступа.Ссылка + И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа + И ГруппыЗначений.Ссылка = #Параметр(52) + #КонецЕсли + #Иначе + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + ПО + Значения.ГруппаДоступа = ГруппыДоступа.Ссылка + И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа + И ГруппыЗначений.ЗначениеДоступа = #Параметр(52) + #КонецЕсли + ) + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ + = + ВЫБОР + КОГДА ИСТИНА В + ( + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию + ГДЕ + ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(#Параметр(52)) + И ЗначенияПоУмолчанию.ВсеРазрешены = ЛОЖЬ + ) + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ + ) + ) +#Иначе + ИСТИНА +#КонецЕсли + + #Параметр(53) // [)[)][)]...] [ИЛИ|И] [([(][(]...] оператор И/ИЛИ с/без скобок. + + ) +) +#КонецЕсли + + + diff --git a/SSL/src/Roles/БазовыеПрава/БазовыеПрава.mdo b/SSL/src/Roles/БазовыеПрава/БазовыеПрава.mdo index d1c2d06fb..a99d267b4 100644 --- a/SSL/src/Roles/БазовыеПрава/БазовыеПрава.mdo +++ b/SSL/src/Roles/БазовыеПрава/БазовыеПрава.mdo @@ -5,5 +5,5 @@ ru Базовые права - Это базовые права БСП, которые должны быть у любого пользователя и внешнего пользователя + Это базовые права БСП, которые должны быть у любого пользователя (кроме внешних пользователей) diff --git a/SSL/src/Roles/ЧтениеБазовойНСИ/Rights.rights b/SSL/src/Roles/БазовыеПраваВнешнегоПользователя/Rights.rights similarity index 50% rename from SSL/src/Roles/ЧтениеБазовойНСИ/Rights.rights rename to SSL/src/Roles/БазовыеПраваВнешнегоПользователя/Rights.rights index bb2efca85..8ca3687cb 100644 --- a/SSL/src/Roles/ЧтениеБазовойНСИ/Rights.rights +++ b/SSL/src/Roles/БазовыеПраваВнешнегоПользователя/Rights.rights @@ -4,21 +4,18 @@ true false - InformationRegister.АдресныеОбъекты.Resource.ПочтовыйИндекс + Catalog.НаборыДополнительныхРеквизитовИСведений.TabularSection.ДополнительныеСведения.Attribute.Свойство + + View + false + Edit false - InformationRegister.АдресныеОбъекты.Dimension.Идентификатор - - Edit - false - - - - Catalog.НаборыДополнительныхРеквизитовИСведений + Constant.МаксимальнаяДлительностьВыполненияИсполняющегоФоновогоЗадания Read true @@ -27,10 +24,177 @@ View true + + + Constant.УдалитьАлгоритмШифрования - InputByString + Read true + + View + true + + + + SessionParameter.ОбластьДанныхИспользование + + Get + true + + + + InformationRegister.НаличиеПрисоединенныхФайлов + + Read + true + + + + SessionParameter.ПропуститьПроверкуЗапретаИзменения + + Get + true + + + + Constant.ИспользоватьПочтовыйКлиент + + Read + true + + + View + true + + + + Catalog.Заметки.Attribute.Автор + + View + false + + + Edit + false + + + + Constant.ПараметрыИтоговИАгрегатов + + Read + true + + + + Constant.КопироватьОбластиДанныхИзЭталонной + + Read + true + + + View + true + + + + Catalog.Заметки.Attribute.Предмет + + View + false + + + Edit + false + + + + Catalog.НаборыДополнительныхРеквизитовИСведений.StandardAttribute.Predefined + + View + false + + + Edit + false + + + + Catalog.НаборыДополнительныхРеквизитовИСведений.StandardAttribute.Ref + + View + false + + + Edit + false + + + + Catalog.НаборыДополнительныхРеквизитовИСведений.StandardAttribute.DeletionMark + + View + false + + + Edit + false + + + + Catalog.НаборыДополнительныхРеквизитовИСведений.StandardAttribute.IsFolder + + View + false + + + Edit + false + + + + Catalog.НаборыДополнительныхРеквизитовИСведений.StandardAttribute.Owner + + View + false + + + Edit + false + + + + Catalog.НаборыДополнительныхРеквизитовИСведений.StandardAttribute.Parent + + View + false + + + Edit + false + + + + Catalog.НаборыДополнительныхРеквизитовИСведений.StandardAttribute.Description + + View + false + + + Edit + false + + + + Catalog.НаборыДополнительныхРеквизитовИСведений.StandardAttribute.Code + + View + false + + + Edit + false + InformationRegister.СлужебныеАдресныеСведения @@ -44,36 +208,195 @@ - CommonCommand.ПраваДоступа - - View - true - - - - ChartOfCharacteristicTypes.ДополнительныеРеквизитыИСведения + Constant.ДатаУведомленияОНовыхЗадачах Read true - - #ПоЗначениямРасширенный( "ПланВидовХарактеристик.ДополнительныеРеквизитыИСведения", "", "", -"", -"", -"ДополнительныеСведения","Т.Ссылка","ИЛИ", -"Условие","НЕ ЭтоДополнительноеСведение","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","") - + + + View + true + + + + Constant.ИспользоватьЭлектронныеПодписи + + Read + true + + + View + true + + + + SessionParameter.ОбновитьВерсиюДатЗапретаИзмененияПослеЗагрузкиДанных + + Get + true + + + + Constant.ИспользоватьДополнительныеОтчетыИОбработки + + Read + true + + + View + true + + + + InformationRegister.НомераОтсканированныхФайлов + + Read + true + + + Update + true View true - InputByString + Edit true - InformationRegister.КурсыВалют + Catalog.ВидыКонтактнойИнформации.Attribute.АдресТолькоРоссийский + + Edit + false + + + + Constant.НастройкиПодчиненногоУзлаРИБ + + Read + true + + + View + true + + + + InformationRegister.НапоминанияПользователя.Resource.СрокНапоминания + + View + false + + + Edit + false + + + + ChartOfCharacteristicTypes.ДополнительныеРеквизитыИСведения.StandardAttribute.ValueType + + Edit + false + + + + ChartOfCharacteristicTypes.ДополнительныеРеквизитыИСведения.StandardAttribute.Description + + Edit + false + + + + ChartOfCharacteristicTypes.ДополнительныеРеквизитыИСведения.StandardAttribute.Code + + Edit + false + + + + ChartOfCharacteristicTypes.ДополнительныеРеквизитыИСведения.StandardAttribute.IsFolder + + Edit + false + + + + ChartOfCharacteristicTypes.ДополнительныеРеквизитыИСведения.StandardAttribute.Parent + + Edit + false + + + + ChartOfCharacteristicTypes.ДополнительныеРеквизитыИСведения.StandardAttribute.Predefined + + Edit + false + + + + ChartOfCharacteristicTypes.ДополнительныеРеквизитыИСведения.StandardAttribute.DeletionMark + + Edit + false + + + + ChartOfCharacteristicTypes.ДополнительныеРеквизитыИСведения.StandardAttribute.Ref + + Edit + false + + + + Constant.ВерсияДатЗапретаИзменения + + Read + true + + + View + true + + + + InformationRegister.НапоминанияПользователя.Attribute.ИнтервалВремениНапоминания + + View + false + + + Edit + false + + + + Constant.НастройкаПроксиСервера + + Read + true + + + View + true + + + + Constant.ЗапрещатьЗагрузкуФайловПоРасширению + + Read + true + + + View + true + + + + Constant.АдресПубликацииИнформационнойБазыВИнтернете Read true @@ -95,18 +418,18 @@ - InformationRegister.КалендарныеГрафики - - Read - true - + CommonForm.ПанельОтчетов View true - InformationRegister.АдресныеОбъекты.Resource.Сокращение + Catalog.Пользователи.TabularSection.КонтактнаяИнформация.Attribute.Страна + + View + false + Edit false @@ -120,14 +443,64 @@ - InformationRegister.АдресныеОбъекты.Resource.Наименование + ChartOfCharacteristicTypes.ДополнительныеРеквизитыИСведения.Attribute.ЭтоДополнительноеСведение Edit false - Catalog.Календари + Catalog.НаборыДополнительныхРеквизитовИСведений.TabularSection.ДополнительныеСведения + + View + false + + + Edit + false + + + + DataProcessor.НерекомендуемаяВерсияПлатформы + + Use + true + + + View + true + + + + InformationRegister.ОриентирыАдресныхОбъектов.Dimension.КодСубъектаРФ + + Edit + false + + + + SessionParameter.ТекущийПользователь + + Get + true + + + + CommonForm.ФормаВариантаОтчета + + View + true + + + + CommonForm.ВопросОбУстановкеРасширенияРаботыСФайлами + + View + true + + + + Constant.ИспользоватьСинхронизациюДанныхВЛокальномРежиме Read true @@ -136,13 +509,20 @@ View true + + + InformationRegister.УдалитьВерсииПодсистем.Dimension.ИмяПодсистемы - InputByString - true + View + false + + + Edit + false - Catalog.Валюты + Constant.ВерсияКлассификатораБанковРФ Read true @@ -151,20 +531,78 @@ View true + + + Constant.ВыполнятьЗамерыПроизводительности - InputByString + Read + true + + + View true - InformationRegister.АдресныеОбъекты.Dimension.КодНаселенногоПункта + Catalog.Пользователи.TabularSection.ДополнительныеРеквизиты + + View + false + Edit false - Catalog.Организации.TabularSection.КонтактнаяИнформация + Catalog.ВидыКонтактнойИнформации.Attribute.Тип + + Edit + false + + + + Constant.ИспользоватьПризнакРассмотрено + + Read + true + + + View + true + + + + ChartOfCharacteristicTypes.ДополнительныеРеквизитыИСведения.Attribute.Подсказка + + Edit + false + + + + Constant.СписокРасширенийФайловOpenDocumentОбластиДанных + + Read + true + + + View + true + + + + Constant.ИспользоватьСинхронизациюДанныхВМоделиСервиса + + Read + true + + + View + true + + + + InformationRegister.НапоминанияПользователя.Attribute.ИмяРеквизитаИсточника View false @@ -174,6 +612,13 @@ false + + InformationRegister.ОриентирыАдресныхОбъектов.Resource.Дополнительно + + Edit + false + + CommonForm.ПраваДоступаУпрощенно @@ -182,18 +627,7 @@ - Catalog.Организации.TabularSection.КонтактнаяИнформация.Attribute.ЗначенияПолей - - View - false - - - Edit - false - - - - InformationRegister.УдалитьАдресныйКлассификатор + Constant.РежимИспользованияИнформационнойБазы Read true @@ -204,21 +638,306 @@ - InformationRegister.АдресныеОбъекты.Dimension.КодГорода + Constant.СообщениеБлокировкиПриОбновленииКонфигурации + + Read + true + + + View + true + + + + Catalog.Заметки.StandardAttribute.Predefined + + View + false + Edit false - InformationRegister.АдресныеОбъекты.Dimension.КодВнутригородскогоРайона + Catalog.Заметки.StandardAttribute.Ref + + View + false + Edit false - Catalog.Организации.TabularSection.КонтактнаяИнформация.Attribute.Город + Catalog.Заметки.StandardAttribute.DeletionMark + + View + false + + + Edit + false + + + + Catalog.Заметки.StandardAttribute.IsFolder + + View + false + + + Edit + false + + + + Catalog.Заметки.StandardAttribute.Owner + + View + false + + + Edit + false + + + + Catalog.Заметки.StandardAttribute.Parent + + View + false + + + Edit + false + + + + Catalog.Заметки.StandardAttribute.Description + + View + false + + + Edit + false + + + + Catalog.Заметки.StandardAttribute.Code + + View + false + + + Edit + false + + + + CommonForm.ВыборУзловПлановОбмена + + View + true + + + + Constant.УдалитьТипПровайдераЭП + + Read + true + + + View + true + + + + InformationRegister.УдалитьВерсииПодсистем.Resource.Версия + + View + false + + + Edit + false + + + + Constant.НеИспользоватьНесколькоОрганизаций + + Read + true + + + View + true + + + + Catalog.Пользователи.TabularSection.КонтактнаяИнформация.Attribute.ЗначенияПолей + + View + false + + + Edit + false + + + + Constant.НастройкиВыполненияРегламентныхЗаданий + + Read + true + + + View + true + + + + CommonForm.ПредупрежденияПриЗавершенииРаботы + + View + true + + + + ChartOfCharacteristicTypes.ДополнительныеРеквизитыИСведения.Attribute.ФорматСвойства + + Edit + false + + + + Constant.ДатаПоследнегоСтартаКлиентскогоСеанса + + Read + true + + + View + true + + + + Catalog.ИдентификаторыОбъектовМетаданных + + Read + true + + + View + true + + + InputByString + true + + + + Catalog.Пользователи.TabularSection.КонтактнаяИнформация.Attribute.ВидДляСписка + + View + false + + + Edit + false + + + + InformationRegister.НапоминанияПользователя.Attribute.Описание + + View + false + + + Edit + false + + + + Constant.ИспользоватьШифрование + + Read + true + + + View + true + + + + CommonForm.ПараметрыПроксиСервера + + View + true + + + + CommonForm.ВходВПрограммуЗапрещен + + View + true + + + + Constant.КаталогОбменаФайламиВМоделиСервиса + + Read + true + + + View + true + + + + Catalog.ВидыКонтактнойИнформации.Attribute.РедактированиеТолькоВДиалоге + + Edit + false + + + + Constant.СписокЗапрещенныхРасширенийОбластиДанных + + Read + true + + + View + true + + + + Constant.ОтправлятьПисьмаВФорматеHTML + + Read + true + + + View + true + + + + Constant.ИспользоватьПодчиненныеБизнесПроцессы + + Read + true + + + View + true + + + + Catalog.Пользователи.TabularSection.ДополнительныеРеквизиты.Attribute.Свойство View false @@ -239,6 +958,17 @@ true + + Constant.ИспользоватьДатыЗапретаЗагрузки + + Read + true + + + View + true + + InformationRegister.ДанныеПроизводственногоКалендаря @@ -251,7 +981,29 @@ - Catalog.Пользователи + InformationRegister.НапоминанияПользователя.Dimension.Источник + + View + false + + + Edit + false + + + + Constant.ИспользоватьВерсионированиеОбъектов + + Read + true + + + View + true + + + + Catalog.ВерсииРасширений Read true @@ -265,6 +1017,257 @@ true + + SessionParameter.ВыполняетсяОбновлениеИБ + + Get + true + + + + Catalog.Заметки.Attribute.ДатаИзменения + + View + false + + + Edit + false + + + + DataProcessor.ЗагрузкаДанныхИзФайла + + Use + true + + + View + true + + + + Constant.СписокРасширенийТекстовыхФайлов + + Read + true + + + View + true + + + + CommonForm.ВыборРолиИсполнителя + + View + true + + + + Catalog.Пользователи.Attribute.Подготовлен + + View + false + + + Edit + false + + + + DataProcessor.ИнформацияПриЗапуске.Command.ИнформацияПриЗапуске + + View + true + + + + Constant.СписокРасширенийФайловOpenDocument + + Read + true + + + View + true + + + + Constant.ДатаПоследнейВыгрузкиЗамеровПроизводительностиUTC + + Read + true + + + View + true + + + + CommonForm.Вопрос + + View + true + + + + Catalog.Пользователи.StandardAttribute.PredefinedDataName + + View + false + + + Edit + false + + + + Catalog.Пользователи.StandardAttribute.Predefined + + View + false + + + Edit + false + + + + Catalog.Пользователи.StandardAttribute.Ref + + View + false + + + Edit + false + + + + Catalog.Пользователи.StandardAttribute.DeletionMark + + View + false + + + Edit + false + + + + Catalog.Пользователи.StandardAttribute.IsFolder + + View + false + + + Edit + false + + + + Catalog.Пользователи.StandardAttribute.Owner + + View + false + + + Edit + false + + + + Catalog.Пользователи.StandardAttribute.Parent + + View + false + + + Edit + false + + + + Catalog.Пользователи.StandardAttribute.Description + + View + false + + + Edit + false + + + + Catalog.Пользователи.StandardAttribute.Code + + View + false + + + Edit + false + + + + CommonForm.ВыборОбъектовМетаданных + + View + true + + + + Constant.ЗагрузитьСообщениеОбменаДанными + + Read + true + + + View + true + + + + CommonForm.ПрисоединенныйФайл + + View + true + + + + Constant.ПроверятьЭлектронныеПодписиНаСервере + + Read + true + + + View + true + + + + Constant.ПровайдерSMS + + Read + true + + + View + true + + + + Constant.ПоддержкаРезервногоКопирования + + Read + true + + + View + true + + DataProcessor.ВводКонтактнойИнформации @@ -277,21 +1280,7 @@ - InformationRegister.АдресныеОбъекты.Dimension.КодПодчиненногоЭлемента - - Edit - false - - - - InformationRegister.АдресныеОбъекты.Resource.КодКЛАДР - - Edit - false - - - - Catalog.Организации.TabularSection.КонтактнаяИнформация.Attribute.ДоменноеИмяСервера + Catalog.Заметки.Attribute.ДляРабочегоСтола View false @@ -301,6 +1290,248 @@ false + + InformationRegister.ВерсииПодсистем + + Read + true + + + + SessionParameter.АвторизованныйПользователь + + Get + true + + + + CommonForm.ФормаНастроекОтчета + + View + true + + + + CommonForm.ФормаПоиска + + View + true + + + + InformationRegister.УдалитьВерсииПодсистем.StandardAttribute.Active + + View + false + + + Edit + false + + + + InformationRegister.УдалитьВерсииПодсистем.StandardAttribute.LineNumber + + View + false + + + Edit + false + + + + InformationRegister.УдалитьВерсииПодсистем.StandardAttribute.Recorder + + View + false + + + Edit + false + + + + InformationRegister.УдалитьВерсииПодсистем.StandardAttribute.Period + + View + false + + + Edit + false + + + + Constant.ИзвлекатьТекстыФайловНаСервере + + Read + true + + + View + true + + + + Constant.УдалитьАлгоритмПодписи + + Read + true + + + View + true + + + + Catalog.Пользователи.TabularSection.КонтактнаяИнформация.Attribute.АдресЭП + + View + false + + + Edit + false + + + + Catalog.Пользователи.TabularSection.ДополнительныеРеквизиты.Attribute.Значение + + View + false + + + Edit + false + + + + CommonForm.АвторизацияНаСайтеПоддержкиПользователей + + View + true + + + + Constant.ПараметрыРаботыПользователей + + Read + true + + + + Constant.КаталогОбменаФайламиВМоделиСервисаLinux + + Read + true + + + View + true + + + + Catalog.Пользователи.TabularSection.КонтактнаяИнформация.Attribute.НомерТелефонаБезКодов + + View + false + + + Edit + false + + + + Constant.ИспользоватьАнкетирование + + Read + true + + + View + true + + + + CommonForm.ВыборПроизвольногоПериода + + View + true + + + + CommonForm.ВыборФорматаВложений + + View + true + + + + Constant.МаксимальныйРазмерФайла + + Read + true + + + View + true + + + + Catalog.Заметки.Attribute.Содержание + + View + false + + + Edit + false + + + + DataProcessor.ПолнотекстовыйПоискВДанных + + Use + true + + + View + true + + + + SessionParameter.ВерсияРасширений + + Get + true + + + + InformationRegister.ПакетыИнформацииПриЗапуске + + Read + true + + + + CommonForm.ОтправкаSMS + + View + true + + + + Constant.РазделыОписанияИзмененийСистемы + + Read + true + + + View + true + + InformationRegister.ДополнительныеАдресныеСведения @@ -323,6 +1554,34 @@ true + + InformationRegister.ОриентирыАдресныхОбъектов.StandardAttribute.Active + + Edit + false + + + + InformationRegister.ОриентирыАдресныхОбъектов.StandardAttribute.LineNumber + + Edit + false + + + + InformationRegister.ОриентирыАдресныхОбъектов.StandardAttribute.Recorder + + Edit + false + + + + InformationRegister.ОриентирыАдресныхОбъектов.StandardAttribute.Period + + Edit + false + + CommonForm.ПраваДоступа @@ -331,14 +1590,28 @@ - Catalog.Организации.TabularSection.КонтактнаяИнформация.Attribute.Представление + CommonForm.СменаПароля View - false + true + + + + Constant.НастройкиВходаПользователей + + Read + true - Edit - false + View + true + + + + CommonForm.ВыборИсполнителяБизнесПроцесса + + View + true @@ -356,6 +1629,61 @@ true + + DataProcessor.ЗаменаИОбъединениеЭлементов + + Use + true + + + View + true + + + + InformationRegister.СостоянияКонтрагентов.StandardAttribute.Active + + View + false + + + Edit + false + + + + InformationRegister.СостоянияКонтрагентов.StandardAttribute.LineNumber + + View + false + + + Edit + false + + + + InformationRegister.СостоянияКонтрагентов.StandardAttribute.Recorder + + View + false + + + Edit + false + + + + InformationRegister.СостоянияКонтрагентов.StandardAttribute.Period + + View + false + + + Edit + false + + Catalog.ВидыКонтактнойИнформации @@ -371,6 +1699,62 @@ true + + Catalog.ВидыКонтактнойИнформации.StandardAttribute.Predefined + + Edit + false + + + + Catalog.ВидыКонтактнойИнформации.StandardAttribute.Ref + + Edit + false + + + + Catalog.ВидыКонтактнойИнформации.StandardAttribute.DeletionMark + + Edit + false + + + + Catalog.ВидыКонтактнойИнформации.StandardAttribute.IsFolder + + Edit + false + + + + Catalog.ВидыКонтактнойИнформации.StandardAttribute.Owner + + Edit + false + + + + Catalog.ВидыКонтактнойИнформации.StandardAttribute.Parent + + Edit + false + + + + Catalog.ВидыКонтактнойИнформации.StandardAttribute.Description + + Edit + false + + + + Catalog.ВидыКонтактнойИнформации.StandardAttribute.Code + + Edit + false + + Catalog.СтраныМира @@ -387,7 +1771,36 @@ - Catalog.Организации.TabularSection.КонтактнаяИнформация.Attribute.Тип + InformationRegister.ОриентирыАдресныхОбъектов.Resource.ПочтовыйИндекс + + Edit + false + + + + Constant.СоздаватьЭлектронныеПодписиНаСервере + + Read + true + + + View + true + + + + Constant.ИспользоватьДатуИВремяВСрокахЗадач + + Read + true + + + View + true + + + + Catalog.Пользователи.Attribute.Комментарий View false @@ -398,7 +1811,43 @@ - Catalog.Организации.Attribute.Префикс + InformationRegister.ОриентирыАдресныхОбъектов.Resource.Описание + + Edit + false + + + + ChartOfCharacteristicTypes.ДополнительныеРеквизитыИСведения.Attribute.МногострочноеПолеВвода + + Edit + false + + + + Constant.МаксимальноеКоличествоИсполняющихФоновыхЗаданий + + Read + true + + + View + true + + + + Constant.СтатусОбновленияКонфигурации + + Read + true + + + View + true + + + + InformationRegister.УдалитьВерсииПодсистем.Attribute.ПланОбновления View false @@ -409,7 +1858,7 @@ - Catalog.Организации.TabularSection.КонтактнаяИнформация.Attribute.Регион + InformationRegister.НапоминанияПользователя.Attribute.СпособУстановкиВремениНапоминания View false @@ -424,6 +1873,9 @@ Read true + + ГДЕ Пользователь = &ТекущийВнешнийПользователь + View @@ -431,28 +1883,297 @@ - InformationRegister.АдресныеОбъекты.Resource.Дополнительно + InformationRegister.ПользовательскиеМакетыПечати + + Read + true + + + + CommonCommand.УстановитьРасширениеРаботыСФайлами + + View + true + + + + Constant.ПрефиксОбластиДанных + + Read + true + + + View + true + + + + ChartOfCharacteristicTypes.ДополнительныеРеквизитыИСведения.Attribute.Комментарий Edit false - InformationRegister.АдресныеОбъекты.Dimension.КодРайона + CommonForm.ПодготовкаНовогоПисьма + + View + true + + + + CommonForm.НапоминаниеПриРедактировании + + View + true + + + + InformationRegister.СостоянияКонтрагентов.Attribute.ИНН + + View + false + Edit false - InformationRegister.АдресныеОбъекты.Dimension.КодОкруга + CommonForm.ВыборДаты + + View + true + + + + DataProcessor.ПолнотекстовыйПоискВДанных.Command.ПолнотекстовыйПоиск + + View + true + + + + Catalog.ВнешниеПользователи + + Read + true + + #ПоЗначениям( "Справочник.ВнешниеПользователи", "", "", +"ВнешниеПользователи", "ссылка", "","", "","", "","", "","", "","", "","", "","", "","", "","", "","", "","", "","", "","", "","", "","") + + + + Update + true + + ГДЕ Ссылка = &ТекущийВнешнийПользователь + + + + View + true + + + Edit + true + + + InputByString + true + + + + Constant.ЧасовойПоясОбластиДанных + + Read + true + + + View + true + + + + InformationRegister.НапоминанияПользователя.StandardAttribute.Active + + View + false + Edit false - Report.ПраваДоступа + InformationRegister.НапоминанияПользователя.StandardAttribute.LineNumber + + View + false + + + Edit + false + + + + InformationRegister.НапоминанияПользователя.StandardAttribute.Recorder + + View + false + + + Edit + false + + + + InformationRegister.НапоминанияПользователя.StandardAttribute.Period + + View + false + + + Edit + false + + + + Constant.ДатаОбновленияПовторноИспользуемыхЗначенийМРО + + Read + true + + + View + true + + + + InformationRegister.УдалитьВерсииПодсистем.Dimension.ОбластьДанных + + View + false + + + Edit + false + + + + Constant.ПараметрыСлужебныхСобытий + + Read + true + + + + InformationRegister.ОриентирыАдресныхОбъектов.Dimension.Идентификатор + + Edit + false + + + + Constant.ИспользоватьПолнотекстовыйПоиск + + Read + true + + + View + true + + + + Constant.КаталогСообщенийОбменаДаннымиДляWindows + + Read + true + + + View + true + + + + CommonForm.ПечатьДокументов + + View + true + + + + Constant.АвтоматическиНастраиватьРазрешенияВПрофиляхБезопасности + + Read + true + + + View + true + + + + Catalog.ВидыКонтактнойИнформации.Attribute.РеквизитДопУпорядочивания + + Edit + false + + + + Constant.НеИспользоватьРазделениеПоОбластямДанных + + Read + true + + + View + true + + + + Catalog.Пользователи.Attribute.ИдентификаторПользователяИБ + + View + false + + + Edit + false + + + + Constant.КаталогСообщенийОбменаДаннымиДляLinux + + Read + true + + + View + true + + + + CommonForm.ФормаОтчета + + View + true + + + + Constant.КонечнаяТочкаМенеджераСервиса + + Read + true + + + View + true + + + + DataProcessor.РекомендацияПоПовышениюСкоростиРаботы Use true @@ -463,7 +2184,21 @@ - InformationRegister.РучныеИзмененияГрафиковРаботы + CommonCommand.СменитьПароль + + View + true + + + + CommonForm.ВспомогательнаяФормаНастроекОтчета + + View + true + + + + Constant.ОценкаПроизводительностиПериодЗаписи Read true @@ -474,51 +2209,7 @@ - Catalog.ГруппыПользователей - - Read - true - - - View - true - - - InputByString - true - - - - InformationRegister.АдресныеОбъекты.Dimension.Уровень - - Edit - false - - - - Catalog.ЗначенияСвойствОбъектовИерархия - - Read - true - - #ПоЗначениямРасширенный( "Справочник.ЗначенияСвойствОбъектовИерархия", "", "", -"", -"", -"ДополнительныеСведения","Т.Владелец","ИЛИ", -"Условие","НЕ Т.Владелец.ЭтоДополнительноеСведение","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","") - - - - View - true - - - InputByString - true - - - - Catalog.Организации.TabularSection.КонтактнаяИнформация.Attribute.Вид + Catalog.Заметки.Attribute.Пометка View false @@ -529,17 +2220,134 @@ - Catalog.ЗначенияСвойствОбъектов + Constant.ГлавныйУзел + + Read + true + + + View + true + + + + Constant.УдалитьАлгоритмХеширования + + Read + true + + + View + true + + + + Constant.ЗаголовокСистемы + + Read + true + + + View + true + + + + Catalog.Пользователи.TabularSection.КонтактнаяИнформация.Attribute.Регион + + View + false + + + Edit + false + + + + CommonForm.РедактированиеТабличногоДокумента + + View + true + + + + Constant.ИспользоватьБизнесПроцессыИЗадачи + + Read + true + + + View + true + + + + Constant.ИспользуютсяПрофилиБезопасности + + Read + true + + + View + true + + + + CommonForm.НастройкаОсновногоРабочегоКаталога + + View + true + + + + Constant.БлокировкаОтправкиБыстрыхСообщений + + Read + true + + + View + true + + + + InformationRegister.СостоянияКонтрагентов.Attribute.КПП + + View + false + + + Edit + false + + + + Constant.МаксимальныйРазмерФайлаОбластиДанных + + Read + true + + + View + true + + + + Constant.ИспользоватьВнешнихПользователей + + Read + true + + + View + true + + + + Catalog.ИдентификаторыОбъектовРасширений Read true - - #ПоЗначениямРасширенный( "Справочник.ЗначенияСвойствОбъектов", "", "", -"", -"", -"ДополнительныеСведения","Т.Владелец","ИЛИ", -"Условие","НЕ Т.Владелец.ЭтоДополнительноеСведение","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","") - View @@ -550,6 +2358,277 @@ true + + Catalog.Пользователи.TabularSection.КонтактнаяИнформация.Attribute.Вид + + View + false + + + Edit + false + + + + Constant.ИспользоватьИнтеграцию1СБухфон + + Read + true + + + View + true + + + + InformationRegister.НапоминанияПользователя.Attribute.Расписание + + View + false + + + Edit + false + + + + InformationRegister.НапоминанияПользователя.Attribute.ПредставлениеИсточника + + View + false + + + Edit + false + + + + Catalog.ЗначенияСвойствОбъектов.Attribute.Вес + + Edit + false + + + + Constant.ПараметрыОграниченияДоступа + + Read + true + + + + CommonForm.ПоказателиВыделенныхЯчеек + + View + true + + + + Constant.ИспользоватьГруппыПользователей + + Read + true + + + View + true + + + + Catalog.Пользователи.Attribute.Недействителен + + View + false + + + Edit + false + + + + Constant.ИспользоватьНесколькоПроизводственныхКалендарей + + Read + true + + + View + true + + + + InformationRegister.СостоянияКонтрагентов.Resource.Состояние + + View + false + + + Edit + false + + + + Constant.НастройкаПодчиненногоУзлаРИБЗавершена + + Read + true + + + View + true + + + + InformationRegister.ДокументыСОшибкамиПроверкиКонтрагентов.StandardAttribute.Active + + View + false + + + Edit + false + + + + InformationRegister.ДокументыСОшибкамиПроверкиКонтрагентов.StandardAttribute.LineNumber + + View + false + + + Edit + false + + + + InformationRegister.ДокументыСОшибкамиПроверкиКонтрагентов.StandardAttribute.Recorder + + View + false + + + Edit + false + + + + InformationRegister.ДокументыСОшибкамиПроверкиКонтрагентов.StandardAttribute.Period + + View + false + + + Edit + false + + + + Catalog.ЗначенияСвойствОбъектов.StandardAttribute.Predefined + + Edit + false + + + + Catalog.ЗначенияСвойствОбъектов.StandardAttribute.Ref + + Edit + false + + + + Catalog.ЗначенияСвойствОбъектов.StandardAttribute.DeletionMark + + Edit + false + + + + Catalog.ЗначенияСвойствОбъектов.StandardAttribute.IsFolder + + Edit + false + + + + Catalog.ЗначенияСвойствОбъектов.StandardAttribute.Owner + + Edit + false + + + + Catalog.ЗначенияСвойствОбъектов.StandardAttribute.Parent + + Edit + false + + + + Catalog.ЗначенияСвойствОбъектов.StandardAttribute.Description + + Edit + false + + + + Catalog.ЗначенияСвойствОбъектов.StandardAttribute.Code + + Edit + false + + + + Constant.ИспользоватьНесколькоОрганизаций + + Read + true + + + View + true + + + + Constant.УдалитьПровайдерЭП + + Read + true + + + View + true + + + + CommonForm.ПрисоединенныеФайлы + + View + true + + + + Constant.ВнутреннийАдресМенеджераСервиса + + Read + true + + + View + true + + + + Catalog.НаборыДополнительныхРеквизитовИСведений.TabularSection.ДополнительныеРеквизиты + + View + false + + + Edit + false + + Catalog.КлассификаторБанковРФ @@ -565,6 +2644,24 @@ true + + CommonForm.ВыборДействияПриОбнаруженииОтличийФайла + + View + true + + + + Constant.СписокЗапрещенныхРасширений + + Read + true + + + View + true + + InformationRegister.ИсторияАдресныхОбъектов @@ -577,98 +2674,25 @@ - WebService.AddressSystem.Operation.Analyze + Catalog.Пользователи.TabularSection.КонтактнаяИнформация.Attribute.Представление - Use + View + false + + + Edit + false + + + + Constant.ПараметрыВариантовОтчетов + + Read true - InformationRegister.АдресныеОбъекты.Dimension.КодУлицы - - Edit - false - - - - Catalog.Организации.StandardAttribute.Predefined - - View - false - - - Edit - false - - - - Catalog.Организации.StandardAttribute.Ref - - View - false - - - Edit - false - - - - Catalog.Организации.StandardAttribute.DeletionMark - - View - false - - - Edit - false - - - - Catalog.Организации.StandardAttribute.IsFolder - - View - false - - - Edit - false - - - - Catalog.Организации.StandardAttribute.Owner - - View - false - - - Edit - false - - - - Catalog.Организации.StandardAttribute.Parent - - View - false - - - Edit - false - - - - Catalog.Организации.StandardAttribute.Description - - View - false - - - Edit - false - - - - Catalog.Организации.StandardAttribute.Code + Catalog.Пользователи.TabularSection.КонтактнаяИнформация.Attribute.НомерТелефона View false @@ -690,7 +2714,7 @@ - ChartOfCharacteristicTypes.УдалитьВидыДоступа.StandardAttribute.PredefinedDataName + Catalog.Пользователи.Attribute.Служебный View false @@ -701,7 +2725,7 @@ - ChartOfCharacteristicTypes.УдалитьВидыДоступа.StandardAttribute.ValueType + Catalog.НаборыДополнительныхРеквизитовИСведений.TabularSection.ДополнительныеРеквизиты.Attribute.Свойство View false @@ -712,7 +2736,40 @@ - ChartOfCharacteristicTypes.УдалитьВидыДоступа.StandardAttribute.Description + InformationRegister.ПараметрыРаботыВерсийРасширений + + Read + true + + + View + true + + + + Constant.РазмерБлокаПередачиФайла + + Read + true + + + View + true + + + + Constant.ИспользоватьНапоминанияПользователя + + Read + true + + + View + true + + + + InformationRegister.НапоминанияПользователя.Dimension.ВремяСобытия View false @@ -723,7 +2780,7 @@ - ChartOfCharacteristicTypes.УдалитьВидыДоступа.StandardAttribute.Code + Catalog.Заметки.Attribute.ТекстСодержания View false @@ -734,7 +2791,7 @@ - ChartOfCharacteristicTypes.УдалитьВидыДоступа.StandardAttribute.IsFolder + InformationRegister.НапоминанияПользователя.Dimension.Пользователь View false @@ -745,7 +2802,108 @@ - ChartOfCharacteristicTypes.УдалитьВидыДоступа.StandardAttribute.Parent + ChartOfCharacteristicTypes.ДополнительныеРеквизитыИСведения.Attribute.УдалитьСклоненияПредмета + + Edit + false + + + + Constant.ПрефиксУзлаРаспределеннойИнформационнойБазы + + Read + true + + + View + true + + + + Constant.ОценкаПроизводительностиЭкспортВсехКлючевыхОпераций + + Read + true + + + View + true + + + + Constant.СообщениеОбменаДаннымиИзГлавногоУзла + + Read + true + + + + Constant.ИспользоватьЗаметки + + Read + true + + + View + true + + + + CommonForm.СозданиеНачальногоОбразаСФайлами + + View + true + + + + Report.МестаИспользованияСсылок + + Use + true + + + View + true + + + + Constant.ПараметрыЦентраМониторинга + + Read + true + + + + Constant.ОграничиватьДоступНаУровнеЗаписей + + Read + true + + + View + true + + + + Catalog.ГруппыВнешнихПользователей + + Read + true + + ГДЕ Ссылка = Значение(Справочник.ГруппыВнешнихПользователей.ВсеВнешниеПользователи) + + + + View + true + + + InputByString + true + + + + Catalog.Пользователи.Attribute.Подразделение View false @@ -756,7 +2914,29 @@ - ChartOfCharacteristicTypes.УдалитьВидыДоступа.StandardAttribute.Predefined + Constant.ИспользоватьРазделениеПоОбластямДанных + + Read + true + + + View + true + + + + Constant.ХранитьФайлыВТомахНаДиске + + Read + true + + + View + true + + + + Catalog.Пользователи.TabularSection.КонтактнаяИнформация.Attribute.Тип View false @@ -767,7 +2947,39 @@ - ChartOfCharacteristicTypes.УдалитьВидыДоступа.StandardAttribute.DeletionMark + Constant.СведенияОбОбновленииИБ + + Read + true + + + View + true + + + + Catalog.ВидыКонтактнойИнформации.Attribute.МожноИзменятьСпособРедактирования + + Edit + false + + + + CommonForm.ВводЗначенийСпискомСФлажками + + View + true + + + + InformationRegister.ОриентирыАдресныхОбъектов.Resource.АдресныйОбъект + + Edit + false + + + + Catalog.Пользователи.TabularSection.КонтактнаяИнформация View false @@ -778,7 +2990,18 @@ - ChartOfCharacteristicTypes.УдалитьВидыДоступа.StandardAttribute.Ref + Constant.ИспользоватьДатыЗапретаИзменения + + Read + true + + + View + true + + + + Catalog.Пользователи.Attribute.ФизическоеЛицо View false @@ -789,7 +3012,7 @@ - Catalog.Организации.TabularSection.КонтактнаяИнформация.Attribute.АдресЭП + Catalog.Пользователи.Attribute.СвойстваПользователяИБ View false @@ -800,7 +3023,65 @@ - Catalog.Организации.TabularSection.КонтактнаяИнформация.Attribute.Страна + Constant.ИспользоватьПрочиеВзаимодействия + + Read + true + + + View + true + + + + Constant.ЭтоАвтономноеРабочееМесто + + Read + true + + + View + true + + + + DataProcessor.ИнформацияПриЗапуске + + Use + true + + + View + true + + + + SessionParameter.ПараметрыКлиентаНаСервере + + Get + true + + + + SessionParameter.ДатаОбновленияПовторноИспользуемыхЗначенийМРО + + Get + true + + + + InformationRegister.ИдентификаторыОбъектовВерсийРасширений + + Read + true + + + View + true + + + + InformationRegister.СостоянияКонтрагентов.Dimension.Контрагент View false @@ -810,6 +3091,125 @@ false + + Constant.КоличествоЭлементовВТранзакцииЗагрузкиДанных + + Read + true + + + View + true + + + + Catalog.Пользователи.Attribute.ИдентификаторПользователяСервиса + + View + false + + + Edit + false + + + + SessionParameter.ТекущийВнешнийПользователь + + Get + true + + + + DataProcessor.ГрупповоеИзменениеРеквизитов + + Use + true + + + View + true + + + + SessionParameter.УстановленныеРасширения + + Get + true + + + + CommonCommand.ПерсональнаяНастройкаПроксиСервера + + View + true + + + + InformationRegister.ДокументыСОшибкамиПроверкиКонтрагентов.Dimension.Документ + + View + false + + + Edit + false + + + + InformationRegister.КодировкиВерсийФайлов + + Read + true + + + + CommonCommand.ПрисоединенныеФайлыКОбъекту + + View + true + + + + Constant.ИсточникДанныхАдресногоКлассификатора + + Read + true + + + View + true + + + + Constant.ПредставлениеОбластиДанных + + Read + true + + + View + true + + + + Catalog.Заметки.Attribute.ПредставлениеПредмета + + View + false + + + Edit + false + + + + SessionParameter.ДействующиеДатыЗапретаИзменения + + Get + true + + InformationRegister.АдресныеОбъекты @@ -822,42 +3222,32 @@ - InformationRegister.АдресныеОбъекты.StandardAttribute.Active + CommonForm.ДлительнаяОперация - Edit - false + View + true - InformationRegister.АдресныеОбъекты.StandardAttribute.LineNumber + Constant.ВыполнитьРезервноеКопированиеОбластиДанных - Edit - false + Read + true + + + View + true - InformationRegister.АдресныеОбъекты.StandardAttribute.Recorder + CommonForm.СохранениеПечатнойФормы - Edit - false + View + true - InformationRegister.АдресныеОбъекты.StandardAttribute.Period - - Edit - false - - - - InformationRegister.АдресныеОбъекты.Dimension.КодДополнительногоЭлемента - - Edit - false - - - - Catalog.Организации.TabularSection.КонтактнаяИнформация.Attribute.НомерТелефона + Catalog.Пользователи.TabularSection.ДополнительныеРеквизиты.Attribute.ТекстоваяСтрока View false @@ -868,14 +3258,54 @@ - InformationRegister.АдресныеОбъекты.Dimension.КодСубъектаРФ + Constant.ПовторитьЗагрузкуСообщенияОбменаДаннымиПередЗапуском - Edit - false + Read + true + + + View + true - Catalog.Организации.TabularSection.КонтактнаяИнформация.Attribute.НомерТелефонаБезКодов + Subsystem.СтандартныеПодсистемы.Subsystem.РаботаСКонтрагентами + + View + true + + + + SessionParameter.АдресСвойствРасширений + + Get + true + + + + Constant.ДетализироватьОбновлениеИБВЖурналеРегистрации + + Read + true + + + View + true + + + + DataProcessor.ПоискИУдалениеДублей + + Use + true + + + View + true + + + + Catalog.Пользователи.TabularSection.КонтактнаяИнформация.Attribute.ДоменноеИмяСервера View false @@ -885,6 +3315,83 @@ false + + Constant.ИспользоватьСинхронизациюДанных + + Read + true + + + View + true + + + + Constant.ИдентификаторИнформационнойБазы + + Read + true + + + View + true + + + + Constant.ИзменятьЗаданияЗаднимЧислом + + Read + true + + + View + true + + + + CommonForm.ВыборПутиКАрхивуФайловТомов + + View + true + + + + SessionParameter.ОбластьДанныхЗначение + + Get + true + + + + InformationRegister.СеансыВерсийРасширений + + Read + true + + + Update + true + + + View + true + + + Edit + true + + + + Constant.ИспользоватьДатуНачалаЗадач + + Read + true + + + View + true + + InformationRegister.ЗагруженныеВерсииАдресныхСведений @@ -896,6 +3403,24 @@ true + + InformationRegister.НапоминанияПользователя.Command.МоиНапоминания + + View + true + + + + Catalog.Пользователи.TabularSection.КонтактнаяИнформация.Attribute.Город + + View + false + + + Edit + false + + ПоЗначениям // ПоЗначениям(Таблица, -, Модификатор, В1,П1, В2,П2, ..., В(n), П(n)). @@ -3576,2770 +6101,6 @@ ) #КонецЕсли - - - - ПоЗначениямРасширенный - // ПоЗначениямРасширенный(Таблица, -, Модификатор, ПрисоединяемыеТаблицы, О, В1,П1,О1, В2,П2,О2,..., В(n), П(n), О(n)). -// № параметра: 1, 2, 3, 4, 5, 6, 7, 8, 9,10,11,...,3+n*3,4+n*3,5+n*3. -// Читается так: "ограничение доступа по значениям расширенный". -// Параметры: -// Таблица - Имя текущей таблицы, например "Документ.ПоступлениеТоваровИУслуг". -// Модификатор - изменяет шаблон. -// 1-й модификатор - строка "НеОграничиватьДоступКГруппам" указывает -// безусловно выбирать группы иерархического справочника. -// Других модификаторов в этой версии шаблона не предусмотрено. -// ПрисоединяемыеТаблицы - текст присоедиения дополнительных таблиц на языке запросов, например, -// "ВНУТРЕННЕЕ СОЕДИНЕНИЕ Документ.АвансовыйОтчет.ОплатаПоставщикам КАК Т1 -// ПО Т.Ссылка = Т1.Ссылка". -// Присоединение позволяет указать поля таблицы ОплатаПоставщикам, как поля основной таблицы -// для проверки их значений, как значений основной таблицы. -// Следует помнить, что при размножении строк в результате соединения, достаточно чтобы -// всего одна строка прошла условия проверки, т.е. результаты проверки строк объединяются по "ИЛИ". -// О - Начальные скобки "(". -// В(n) - Вид доступа - имя вида доступа, например, "Организации". Для полей составного типа, с целью повышения -// производительности, лучше указать несколько имен, например, "Организации,ГруппыФизическихЛиц", -// чем использовать несколько блоков параметров, с одним и тем же именем поля. -// Специальные виды доступа "Условие", "НастройкиПрав", "ПравоЧтения", "ПравоИзменения" -// можно использовать только отдельно. -// Когда В(n) = "Условие" (или ""), тогда П(n) содержит строку условия на языке запросов, например -// "Т.Автор = &АвторизованныйПользователь", -// "ТИПЗНАЧЕНИЯ(Т.Владелец) = ТИП(Справочник.Организации)", где Т - псевдоним текущей таблицы. -// Когда В(n) = "ПравоЧтения" Или "ПравоИзменения", -// выполняется проверка наличия права на таблицу значения Т.П(n). -// П(n) - Поле проверяемого значения с псевдонимом, например "Т.Организация", -// кроме случая В(n) = "Условие" (или ""). -// О(n) - Логические операции "И", "ИЛИ" в сочетании с скобками "(", ")". -// Примечение: максимальное количество одновременно проверяемых значений полей можно увеличить, изменив шаблон, но -// необходимо будет указывать все параметры шаблона, т.е. указывать пустые строки, когда количество полей меньше максимального. -// Шаблон имеет структуру: -// <Общая часть условий> <Условие по группе параметров 1> И/ИЛИ <Условие по группе параметров 2> И/ИЛИ ... <Условие по группе параметров(n)> -// Пример: -// ПоЗначениямРасширенный("Документ.ПеремещениеТоваров", "", "", -// "", -// "", -// "Организации","Т.Организация","И(", -// "Склады","Т.СкладОтправитель","ИЛИ", -// "Склады","Т.СкладПолучатель",")", "","","", ...) - -// Проверка правильности параметра Право. -#Если Не ("#Параметр(2)" = "Чтение" Или "#Параметр(2)" = "Добавление" Или - "#Параметр(2)" = "Изменение" Или "#Параметр(2)" = "Удаление" Или "#Параметр(2)" = "") - Или #ИмяТекущегоПраваДоступа <> "Чтение" И "#Параметр(2)" = "Чтение" - Или #ИмяТекущегоПраваДоступа = "Чтение" И "#Параметр(2)" <> "Чтение" И "#Параметр(2)" <> "" #Тогда - // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. - НеверноеПраво: #Параметр(2) -#КонецЕсли - -// Проверка правильности параметра ИмяТаблицы. -#Если "#Параметр(1)" <> #ИмяТекущейТаблицы #Тогда - // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. - НеверноеИмяТекущейТаблицы: "#Параметр(1)" -#КонецЕсли - -// Проверка правильности параметра Модификатор. -#Если Не ("#Параметр(3)" = "НеОграничиватьДоступКГруппам" Или "#Параметр(3)" = "") #Тогда - // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. - НеверныйМодификатор: #Параметр(3) -#КонецЕсли - -// Общая проверка использования ограничений доступа на уровне записей и -// проверка использования хотя бы одного ограничения из указанных видов доступа. -#Если &ОграничиватьДоступНаУровнеЗаписей - И Не (Истина - И ("#Параметр(6)" = "" И "#Параметр(7)" = "" - Или &ВидыДоступаСОтключеннымИспользованием = "Все" - И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(6),") - Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(6),")) - И ("#Параметр(9)" = "" И "#Параметр(10)" = "" - Или &ВидыДоступаСОтключеннымИспользованием = "Все" - И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(9),") - Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(9),")) - И ("#Параметр(12)" = "" И "#Параметр(13)" = "" - Или &ВидыДоступаСОтключеннымИспользованием = "Все" - И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(12),") - Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(12),")) - И ("#Параметр(15)" = "" И "#Параметр(16)" = "" - Или &ВидыДоступаСОтключеннымИспользованием = "Все" - И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(15),") - Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(15),")) - И ("#Параметр(18)" = "" И "#Параметр(19)" = "" - Или &ВидыДоступаСОтключеннымИспользованием = "Все" - И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(18),") - Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(18),")) - И ("#Параметр(21)" = "" И "#Параметр(22)" = "" - Или &ВидыДоступаСОтключеннымИспользованием = "Все" - И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(21),") - Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(21),")) - И ("#Параметр(24)" = "" И "#Параметр(25)" = "" - Или &ВидыДоступаСОтключеннымИспользованием = "Все" - И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(24),") - Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(24),")) - И ("#Параметр(27)" = "" И "#Параметр(28)" = "" - Или &ВидыДоступаСОтключеннымИспользованием = "Все" - И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(27),") - Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(27),")) - И ("#Параметр(30)" = "" И "#Параметр(31)" = "" - Или &ВидыДоступаСОтключеннымИспользованием = "Все" - И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(30),") - Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(30),")) - И ("#Параметр(33)" = "" И "#Параметр(34)" = "" - Или &ВидыДоступаСОтключеннымИспользованием = "Все" - И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(33),") - Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(33),")) - И ("#Параметр(36)" = "" И "#Параметр(37)" = "" - Или &ВидыДоступаСОтключеннымИспользованием = "Все" - И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(36),") - Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(36),")) - И ("#Параметр(39)" = "" И "#Параметр(40)" = "" - Или &ВидыДоступаСОтключеннымИспользованием = "Все" - И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(39),") - Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(39),")) - И ("#Параметр(42)" = "" И "#Параметр(43)" = "" - Или &ВидыДоступаСОтключеннымИспользованием = "Все" - И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(42),") - Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(42),")) - И ("#Параметр(45)" = "" И "#Параметр(46)" = "" - Или &ВидыДоступаСОтключеннымИспользованием = "Все" - И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(45),") - Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(45),")) - И ("#Параметр(48)" = "" И "#Параметр(49)" = "" - Или &ВидыДоступаСОтключеннымИспользованием = "Все" - И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(48),") - Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(48),")) - И ("#Параметр(51)" = "" И "#Параметр(52)" = "" - Или &ВидыДоступаСОтключеннымИспользованием = "Все" - И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(51),") - Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(51),")) - ) #Тогда - -Т ИЗ Т // Т - псевдоним текущей таблицы (выбран коротким, чтобы сократить количество символов в тексте параметра-условия на языке запросов). - -// Присоединяемые таблицы к проверяемой строке текущей таблицы "Т". -#Параметр(4) - -ГДЕ - -// Безусловная выборка групп в иерархическом объекте метаданных (если нужно). -#Если "#Параметр(3)" = "НеОграничиватьДоступКГруппам" #Тогда - Т.ЭтоГруппа ИЛИ -#КонецЕсли - -ИСТИНА В -( // Проверка права пользователя на текущую таблицу в целом. - // Права на таблицы формируются по составу ролей профиля группы доступа. - ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА - ИЗ - Справочник.ИдентификаторыОбъектовМетаданных КАК СвойстваТекущейТаблицы - ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.ГруппыДоступа КАК ГруппыДоступа - ПО - СвойстваТекущейТаблицы.ПолноеИмя = "#Параметр(1)" - И ИСТИНА В - ( - ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА - ИЗ - РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступа - ГДЕ - ТаблицыГруппДоступа.Таблица = СвойстваТекущейТаблицы.Ссылка - И ТаблицыГруппДоступа.ГруппаДоступа = ГруппыДоступа.Ссылка - #Если Не #ИмяТекущегоПраваДоступа = "Чтение" #Тогда - И ТаблицыГруппДоступа.Изменение - #КонецЕсли - ) - И ГруппыДоступа.Ссылка В - ( - ВЫБРАТЬ - ГруппыДоступаПользователи.Ссылка КАК ГруппаДоступа - ИЗ - Справочник.ГруппыДоступа.Пользователи КАК ГруппыДоступаПользователи - ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей - ПО - СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь - И СоставыГруппПользователей.ГруппаПользователей = ГруппыДоступаПользователи.Пользователь - ) - ГДЕ - ( // Поиск значений заданных полей в разрешенных значениях групп доступа (пользователей). - - #Параметр(5) // [([(][(]...] 0-n открывающихся скобок. - -//// Проверка значения поля группы параметров 1. -#Если "#Параметр(6)" = "Условие" Или "#Параметр(6)" = "" #Тогда - // Когда имя вида доступа "Условие" (или ""), тогда вместо имени поля задано условие. - ( #Параметр(7) ) -#ИначеЕсли "#Параметр(6)" = "ПравоЧтения" Или "#Параметр(6)" = "ПравоИзменения" #Тогда - #Параметр(7) <> НЕОПРЕДЕЛЕНО - И ИСТИНА В - ( // Проверка права пользователя на таблицу Значения, установленного в поле. - ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА - ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава - ГДЕ - ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(7)) - #Если Не "#Параметр(6)" = "ПравоЧтения" #Тогда - И ТаблицыГруппДоступаПроверкаПрава.Изменение - #КонецЕсли - ) -#ИначеЕсли "#Параметр(6)" = "НастройкиПрав" #Тогда - - ( - ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено - ( - ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА - ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек - ПО - НаследованиеНастроек.Объект = #Параметр(7) - И НастройкиПрав.Объект = НаследованиеНастроек.Родитель - #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда - И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияЧтения - #Иначе - #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда - И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка - #Иначе - И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) - #КонецЕсли - И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения - #КонецЕсли - ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей - ПО - СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь - И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь - ) - И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. - ( - ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ - ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек - ПО - НаследованиеНастроек.Объект = #Параметр(7) - И НастройкиПрав.Объект = НаследованиеНастроек.Родитель - #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда - И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияЧтения - #Иначе - #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда - И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка - #Иначе - И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) - #КонецЕсли - И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения - #КонецЕсли - ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей - ПО - СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь - И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь - ) - ) -#ИначеЕсли Не СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(6),") #Тогда - // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. - #Если СтрСодержит("#Параметр(6)", ",") #Тогда - НеверныйВидДоступа: "#Параметр(6)" - "Список имен видов доступа не найден" - #Иначе - НеверныйВидДоступа: "#Параметр(6)" - "Имя вида доступа не найдено" - #КонецЕсли -#ИначеЕсли &ВидыДоступаСОтключеннымИспользованием <> "Все" - И Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(6),") #Тогда - - ( - ЕСТЬNULL(#Параметр(7), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО - И - #Если (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(6),", ",Пользователи,")) - Или (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(6),", ",ВнешниеПользователи,")) #Тогда - НЕ - ( - НЕ ИСТИНА В - ( - ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА - ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа - ГДЕ - ГруппыЗначенийДоступа.ЗначениеДоступа = #Параметр(7) - И ГруппыЗначенийДоступа.ГруппаЗначенийДоступа = &АвторизованныйПользователь - ) - И НЕ - #Иначе - ( - #КонецЕсли - ВЫБОР - КОГДА ИСТИНА В - ( - #Если СтрСодержит(&ВидыДоступаБезГруппДляЗначенияДоступа, ",#Параметр(6),") #Тогда - ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА - ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - ГДЕ - Значения.ГруппаДоступа = ГруппыДоступа.Ссылка - И Значения.ЗначениеДоступа = #Параметр(7) - #ИначеЕсли "#Параметр(7)" = "Т.Ссылка" #Тогда - #Если СтрСодержит("#Параметр(6)", ",") #Тогда - // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. - НеверныйВидДоступа: "#Параметр(6)" - "При проверке таблицы значения доступа можно указывать только один вид доступа" - #ИначеЕсли СтрСодержит(&ВидыДоступаСОднойГруппойДляЗначенияДоступа, ",#Параметр(6),") #Тогда - ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА - ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - ГДЕ - Значения.ГруппаДоступа = ГруппыДоступа.Ссылка - И Значения.ЗначениеДоступа = Т.ГруппаДоступа - #Иначе // Значения доступа, для которых можно указать несколько групп значений доступа. - ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА - ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - ВНУТРЕННЕЕ СОЕДИНЕНИЕ #Параметр(1).ГруппыДоступа КАК ГруппыЗначений - ПО - Значения.ГруппаДоступа = ГруппыДоступа.Ссылка - И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа - И ГруппыЗначений.Ссылка = #Параметр(7) - #КонецЕсли - #Иначе - ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА - ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений - ПО - Значения.ГруппаДоступа = ГруппыДоступа.Ссылка - И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа - И ГруппыЗначений.ЗначениеДоступа = #Параметр(7) - #КонецЕсли - ) - ТОГДА ИСТИНА - ИНАЧЕ ЛОЖЬ - КОНЕЦ - = - ВЫБОР - КОГДА ИСТИНА В - ( - ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА - ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию - ГДЕ - ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(#Параметр(7)) - И ЗначенияПоУмолчанию.ВсеРазрешены = ЛОЖЬ - ) - ТОГДА ИСТИНА - ИНАЧЕ ЛОЖЬ - КОНЕЦ - ) - ) -#Иначе - ИСТИНА -#КонецЕсли - - #Параметр(8) // [)[)][)]...] [ИЛИ|И] [([(][(]...] оператор И/ИЛИ с/без скобок. - -//// Проверка значения поля группы параметров 2. -#Если "#Параметр(9)" = "" И "#Параметр(10)" = "" #Тогда - // Группа параметров не используется. -#ИначеЕсли "#Параметр(9)" = "Условие" Или "#Параметр(9)" = "" #Тогда - // Когда имя вида доступа "Условие" (или ""), тогда вместо имени поля задано условие. - ( #Параметр(10) ) -#ИначеЕсли "#Параметр(9)" = "ПравоЧтения" Или "#Параметр(9)" = "ПравоИзменения" #Тогда - #Параметр(10) <> НЕОПРЕДЕЛЕНО - И ИСТИНА В - ( // Проверка права пользователя на таблицу Значения, установленного в поле. - ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА - ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава - ГДЕ - ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(10)) - #Если Не "#Параметр(9)" = "ПравоЧтения" #Тогда - И ТаблицыГруппДоступаПроверкаПрава.Изменение - #КонецЕсли - ) -#ИначеЕсли "#Параметр(9)" = "НастройкиПрав" #Тогда - - ( - ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено - ( - ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА - ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек - ПО - НаследованиеНастроек.Объект = #Параметр(10) - И НастройкиПрав.Объект = НаследованиеНастроек.Родитель - #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда - И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияЧтения - #Иначе - #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда - И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка - #Иначе - И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) - #КонецЕсли - И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения - #КонецЕсли - ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей - ПО - СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь - И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь - ) - И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. - ( - ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ - ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек - ПО - НаследованиеНастроек.Объект = #Параметр(10) - И НастройкиПрав.Объект = НаследованиеНастроек.Родитель - #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда - И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияЧтения - #Иначе - #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда - И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка - #Иначе - И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) - #КонецЕсли - И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения - #КонецЕсли - ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей - ПО - СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь - И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь - ) - ) -#ИначеЕсли Не СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(9),") #Тогда - // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. - #Если СтрСодержит("#Параметр(9)", ",") #Тогда - НеверныйВидДоступа: "#Параметр(9)" - "Список имен видов доступа не найден" - #Иначе - НеверныйВидДоступа: "#Параметр(9)" - "Имя вида доступа не найдено" - #КонецЕсли -#ИначеЕсли &ВидыДоступаСОтключеннымИспользованием <> "Все" - И Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(9),") #Тогда - - ( - ЕСТЬNULL(#Параметр(10), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО - И - #Если (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(9),", ",Пользователи,")) - Или (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(9),", ",ВнешниеПользователи,")) #Тогда - НЕ - ( - НЕ ИСТИНА В - ( - ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА - ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа - ГДЕ - ГруппыЗначенийДоступа.ЗначениеДоступа = #Параметр(10) - И ГруппыЗначенийДоступа.ГруппаЗначенийДоступа = &АвторизованныйПользователь - ) - И НЕ - #Иначе - ( - #КонецЕсли - ВЫБОР - КОГДА ИСТИНА В - ( - #Если СтрСодержит(&ВидыДоступаБезГруппДляЗначенияДоступа, ",#Параметр(9),") #Тогда - ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА - ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - ГДЕ - Значения.ГруппаДоступа = ГруппыДоступа.Ссылка - И Значения.ЗначениеДоступа = #Параметр(10) - #ИначеЕсли "#Параметр(10)" = "Т.Ссылка" #Тогда - #Если СтрСодержит("#Параметр(9)", ",") #Тогда - // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. - НеверныйВидДоступа: "#Параметр(9)" - "При проверке таблицы значения доступа можно указывать только один вид доступа" - #ИначеЕсли СтрСодержит(&ВидыДоступаСОднойГруппойДляЗначенияДоступа, ",#Параметр(9),") #Тогда - ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА - ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - ГДЕ - Значения.ГруппаДоступа = ГруппыДоступа.Ссылка - И Значения.ЗначениеДоступа = Т.ГруппаДоступа - #Иначе // Значения доступа, для которых можно указать несколько групп значений доступа. - ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА - ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - ВНУТРЕННЕЕ СОЕДИНЕНИЕ #Параметр(1).ГруппыДоступа КАК ГруппыЗначений - ПО - Значения.ГруппаДоступа = ГруппыДоступа.Ссылка - И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа - И ГруппыЗначений.Ссылка = #Параметр(10) - #КонецЕсли - #Иначе - ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА - ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений - ПО - Значения.ГруппаДоступа = ГруппыДоступа.Ссылка - И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа - И ГруппыЗначений.ЗначениеДоступа = #Параметр(10) - #КонецЕсли - ) - ТОГДА ИСТИНА - ИНАЧЕ ЛОЖЬ - КОНЕЦ - = - ВЫБОР - КОГДА ИСТИНА В - ( - ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА - ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию - ГДЕ - ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(#Параметр(10)) - И ЗначенияПоУмолчанию.ВсеРазрешены = ЛОЖЬ - ) - ТОГДА ИСТИНА - ИНАЧЕ ЛОЖЬ - КОНЕЦ - ) - ) -#Иначе - ИСТИНА -#КонецЕсли - - #Параметр(11) // [)[)][)]...] [ИЛИ|И] [([(][(]...] оператор И/ИЛИ с/без скобок. - -//// Проверка значения поля группы параметров 3. -#Если "#Параметр(12)" = "" И "#Параметр(13)" = "" #Тогда - // Группа параметров не используется. -#ИначеЕсли "#Параметр(12)" = "Условие" Или "#Параметр(12)" = "" #Тогда - // Когда имя вида доступа "Условие" (или ""), тогда вместо имени поля задано условие. - ( #Параметр(13) ) -#ИначеЕсли "#Параметр(12)" = "ПравоЧтения" Или "#Параметр(12)" = "ПравоИзменения" #Тогда - #Параметр(13) <> НЕОПРЕДЕЛЕНО - И ИСТИНА В - ( // Проверка права пользователя на таблицу Значения, установленного в поле. - ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА - ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава - ГДЕ - ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(13)) - #Если Не "#Параметр(12)" = "ПравоЧтения" #Тогда - И ТаблицыГруппДоступаПроверкаПрава.Изменение - #КонецЕсли - ) -#ИначеЕсли "#Параметр(12)" = "НастройкиПрав" #Тогда - - ( - ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено - ( - ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА - ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек - ПО - НаследованиеНастроек.Объект = #Параметр(13) - И НастройкиПрав.Объект = НаследованиеНастроек.Родитель - #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда - И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияЧтения - #Иначе - #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда - И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка - #Иначе - И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) - #КонецЕсли - И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения - #КонецЕсли - ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей - ПО - СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь - И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь - ) - И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. - ( - ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ - ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек - ПО - НаследованиеНастроек.Объект = #Параметр(13) - И НастройкиПрав.Объект = НаследованиеНастроек.Родитель - #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда - И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияЧтения - #Иначе - #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда - И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка - #Иначе - И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) - #КонецЕсли - И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения - #КонецЕсли - ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей - ПО - СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь - И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь - ) - ) -#ИначеЕсли Не СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(12),") #Тогда - // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. - #Если СтрСодержит("#Параметр(12)", ",") #Тогда - НеверныйВидДоступа: "#Параметр(12)" - "Список имен видов доступа не найден" - #Иначе - НеверныйВидДоступа: "#Параметр(12)" - "Имя вида доступа не найдено" - #КонецЕсли -#ИначеЕсли &ВидыДоступаСОтключеннымИспользованием <> "Все" - И Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(12),") #Тогда - - ( - ЕСТЬNULL(#Параметр(13), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО - И - #Если (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(12),", ",Пользователи,")) - Или (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(12),", ",ВнешниеПользователи,")) #Тогда - НЕ - ( - НЕ ИСТИНА В - ( - ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА - ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа - ГДЕ - ГруппыЗначенийДоступа.ЗначениеДоступа = #Параметр(13) - И ГруппыЗначенийДоступа.ГруппаЗначенийДоступа = &АвторизованныйПользователь - ) - И НЕ - #Иначе - ( - #КонецЕсли - ВЫБОР - КОГДА ИСТИНА В - ( - #Если СтрСодержит(&ВидыДоступаБезГруппДляЗначенияДоступа, ",#Параметр(12),") #Тогда - ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА - ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - ГДЕ - Значения.ГруппаДоступа = ГруппыДоступа.Ссылка - И Значения.ЗначениеДоступа = #Параметр(13) - #ИначеЕсли "#Параметр(13)" = "Т.Ссылка" #Тогда - #Если СтрСодержит("#Параметр(12)", ",") #Тогда - // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. - НеверныйВидДоступа: "#Параметр(12)" - "При проверке таблицы значения доступа можно указывать только один вид доступа" - #ИначеЕсли СтрСодержит(&ВидыДоступаСОднойГруппойДляЗначенияДоступа, ",#Параметр(12),") #Тогда - ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА - ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - ГДЕ - Значения.ГруппаДоступа = ГруппыДоступа.Ссылка - И Значения.ЗначениеДоступа = Т.ГруппаДоступа - #Иначе // Значения доступа, для которых можно указать несколько групп значений доступа. - ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА - ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - ВНУТРЕННЕЕ СОЕДИНЕНИЕ #Параметр(1).ГруппыДоступа КАК ГруппыЗначений - ПО - Значения.ГруппаДоступа = ГруппыДоступа.Ссылка - И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа - И ГруппыЗначений.Ссылка = #Параметр(13) - #КонецЕсли - #Иначе - ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА - ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений - ПО - Значения.ГруппаДоступа = ГруппыДоступа.Ссылка - И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа - И ГруппыЗначений.ЗначениеДоступа = #Параметр(13) - #КонецЕсли - ) - ТОГДА ИСТИНА - ИНАЧЕ ЛОЖЬ - КОНЕЦ - = - ВЫБОР - КОГДА ИСТИНА В - ( - ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА - ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию - ГДЕ - ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(#Параметр(13)) - И ЗначенияПоУмолчанию.ВсеРазрешены = ЛОЖЬ - ) - ТОГДА ИСТИНА - ИНАЧЕ ЛОЖЬ - КОНЕЦ - ) - ) -#Иначе - ИСТИНА -#КонецЕсли - - #Параметр(14) // [)[)][)]...] [ИЛИ|И] [([(][(]...] оператор И/ИЛИ с/без скобок. - -//// Проверка значения поля группы параметров 4. -#Если "#Параметр(15)" = "" И "#Параметр(16)" = "" #Тогда - // Группа параметров не используется. -#ИначеЕсли "#Параметр(15)" = "Условие" Или "#Параметр(15)" = "" #Тогда - // Когда имя вида доступа "Условие" (или ""), тогда вместо имени поля задано условие. - ( #Параметр(16) ) -#ИначеЕсли "#Параметр(15)" = "ПравоЧтения" Или "#Параметр(15)" = "ПравоИзменения" #Тогда - #Параметр(16) <> НЕОПРЕДЕЛЕНО - И ИСТИНА В - ( // Проверка права пользователя на таблицу Значения, установленного в поле. - ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА - ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава - ГДЕ - ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(16)) - #Если Не "#Параметр(15)" = "ПравоЧтения" #Тогда - И ТаблицыГруппДоступаПроверкаПрава.Изменение - #КонецЕсли - ) -#ИначеЕсли "#Параметр(15)" = "НастройкиПрав" #Тогда - - ( - ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено - ( - ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА - ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек - ПО - НаследованиеНастроек.Объект = #Параметр(16) - И НастройкиПрав.Объект = НаследованиеНастроек.Родитель - #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда - И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияЧтения - #Иначе - #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда - И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка - #Иначе - И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) - #КонецЕсли - И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения - #КонецЕсли - ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей - ПО - СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь - И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь - ) - И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. - ( - ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ - ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек - ПО - НаследованиеНастроек.Объект = #Параметр(16) - И НастройкиПрав.Объект = НаследованиеНастроек.Родитель - #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда - И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияЧтения - #Иначе - #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда - И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка - #Иначе - И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) - #КонецЕсли - И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения - #КонецЕсли - ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей - ПО - СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь - И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь - ) - ) -#ИначеЕсли Не СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(15),") #Тогда - // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. - #Если СтрСодержит("#Параметр(15)", ",") #Тогда - НеверныйВидДоступа: "#Параметр(15)" - "Список имен видов доступа не найден" - #Иначе - НеверныйВидДоступа: "#Параметр(15)" - "Имя вида доступа не найдено" - #КонецЕсли -#ИначеЕсли &ВидыДоступаСОтключеннымИспользованием <> "Все" - И Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(15),") #Тогда - - ( - ЕСТЬNULL(#Параметр(16), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО - И - #Если (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(15),", ",Пользователи,")) - Или (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(15),", ",ВнешниеПользователи,")) #Тогда - НЕ - ( - НЕ ИСТИНА В - ( - ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА - ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа - ГДЕ - ГруппыЗначенийДоступа.ЗначениеДоступа = #Параметр(16) - И ГруппыЗначенийДоступа.ГруппаЗначенийДоступа = &АвторизованныйПользователь - ) - И НЕ - #Иначе - ( - #КонецЕсли - ВЫБОР - КОГДА ИСТИНА В - ( - #Если СтрСодержит(&ВидыДоступаБезГруппДляЗначенияДоступа, ",#Параметр(15),") #Тогда - ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА - ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - ГДЕ - Значения.ГруппаДоступа = ГруппыДоступа.Ссылка - И Значения.ЗначениеДоступа = #Параметр(16) - #ИначеЕсли "#Параметр(16)" = "Т.Ссылка" #Тогда - #Если СтрСодержит("#Параметр(15)", ",") #Тогда - // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. - НеверныйВидДоступа: "#Параметр(15)" - "При проверке таблицы значения доступа можно указывать только один вид доступа" - #ИначеЕсли СтрСодержит(&ВидыДоступаСОднойГруппойДляЗначенияДоступа, ",#Параметр(15),") #Тогда - ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА - ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - ГДЕ - Значения.ГруппаДоступа = ГруппыДоступа.Ссылка - И Значения.ЗначениеДоступа = Т.ГруппаДоступа - #Иначе // Значения доступа, для которых можно указать несколько групп значений доступа. - ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА - ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - ВНУТРЕННЕЕ СОЕДИНЕНИЕ #Параметр(1).ГруппыДоступа КАК ГруппыЗначений - ПО - Значения.ГруппаДоступа = ГруппыДоступа.Ссылка - И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа - И ГруппыЗначений.Ссылка = #Параметр(16) - #КонецЕсли - #Иначе - ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА - ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений - ПО - Значения.ГруппаДоступа = ГруппыДоступа.Ссылка - И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа - И ГруппыЗначений.ЗначениеДоступа = #Параметр(16) - #КонецЕсли - ) - ТОГДА ИСТИНА - ИНАЧЕ ЛОЖЬ - КОНЕЦ - = - ВЫБОР - КОГДА ИСТИНА В - ( - ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА - ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию - ГДЕ - ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(#Параметр(16)) - И ЗначенияПоУмолчанию.ВсеРазрешены = ЛОЖЬ - ) - ТОГДА ИСТИНА - ИНАЧЕ ЛОЖЬ - КОНЕЦ - ) - ) -#Иначе - ИСТИНА -#КонецЕсли - - #Параметр(17) // [)[)][)]...] [ИЛИ|И] [([(][(]...] оператор И/ИЛИ с/без скобок. - -//// Проверка значения поля группы параметров 5. -#Если "#Параметр(18)" = "" И "#Параметр(19)" = "" #Тогда - // Группа параметров не используется. -#ИначеЕсли "#Параметр(18)" = "Условие" Или "#Параметр(18)" = "" #Тогда - // Когда имя вида доступа "Условие" (или ""), тогда вместо имени поля задано условие. - ( #Параметр(19) ) -#ИначеЕсли "#Параметр(18)" = "ПравоЧтения" Или "#Параметр(18)" = "ПравоИзменения" #Тогда - #Параметр(19) <> НЕОПРЕДЕЛЕНО - И ИСТИНА В - ( // Проверка права пользователя на таблицу Значения, установленного в поле. - ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА - ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава - ГДЕ - ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(19)) - #Если Не "#Параметр(18)" = "ПравоЧтения" #Тогда - И ТаблицыГруппДоступаПроверкаПрава.Изменение - #КонецЕсли - ) -#ИначеЕсли "#Параметр(18)" = "НастройкиПрав" #Тогда - - ( - ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено - ( - ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА - ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек - ПО - НаследованиеНастроек.Объект = #Параметр(19) - И НастройкиПрав.Объект = НаследованиеНастроек.Родитель - #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда - И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияЧтения - #Иначе - #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда - И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка - #Иначе - И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) - #КонецЕсли - И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения - #КонецЕсли - ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей - ПО - СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь - И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь - ) - И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. - ( - ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ - ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек - ПО - НаследованиеНастроек.Объект = #Параметр(19) - И НастройкиПрав.Объект = НаследованиеНастроек.Родитель - #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда - И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияЧтения - #Иначе - #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда - И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка - #Иначе - И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) - #КонецЕсли - И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения - #КонецЕсли - ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей - ПО - СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь - И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь - ) - ) -#ИначеЕсли Не СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(18),") #Тогда - // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. - #Если СтрСодержит("#Параметр(18)", ",") #Тогда - НеверныйВидДоступа: "#Параметр(18)" - "Список имен видов доступа не найден" - #Иначе - НеверныйВидДоступа: "#Параметр(18)" - "Имя вида доступа не найдено" - #КонецЕсли -#ИначеЕсли &ВидыДоступаСОтключеннымИспользованием <> "Все" - И Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(18),") #Тогда - - ( - ЕСТЬNULL(#Параметр(19), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО - И - #Если (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(18),", ",Пользователи,")) - Или (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(18),", ",ВнешниеПользователи,")) #Тогда - НЕ - ( - НЕ ИСТИНА В - ( - ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА - ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа - ГДЕ - ГруппыЗначенийДоступа.ЗначениеДоступа = #Параметр(19) - И ГруппыЗначенийДоступа.ГруппаЗначенийДоступа = &АвторизованныйПользователь - ) - И НЕ - #Иначе - ( - #КонецЕсли - ВЫБОР - КОГДА ИСТИНА В - ( - #Если СтрСодержит(&ВидыДоступаБезГруппДляЗначенияДоступа, ",#Параметр(18),") #Тогда - ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА - ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - ГДЕ - Значения.ГруппаДоступа = ГруппыДоступа.Ссылка - И Значения.ЗначениеДоступа = #Параметр(19) - #ИначеЕсли "#Параметр(19)" = "Т.Ссылка" #Тогда - #Если СтрСодержит("#Параметр(18)", ",") #Тогда - // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. - НеверныйВидДоступа: "#Параметр(18)" - "При проверке таблицы значения доступа можно указывать только один вид доступа" - #ИначеЕсли СтрСодержит(&ВидыДоступаСОднойГруппойДляЗначенияДоступа, ",#Параметр(18),") #Тогда - ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА - ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - ГДЕ - Значения.ГруппаДоступа = ГруппыДоступа.Ссылка - И Значения.ЗначениеДоступа = Т.ГруппаДоступа - #Иначе // Значения доступа, для которых можно указать несколько групп значений доступа. - ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА - ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - ВНУТРЕННЕЕ СОЕДИНЕНИЕ #Параметр(1).ГруппыДоступа КАК ГруппыЗначений - ПО - Значения.ГруппаДоступа = ГруппыДоступа.Ссылка - И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа - И ГруппыЗначений.Ссылка = #Параметр(19) - #КонецЕсли - #Иначе - ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА - ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений - ПО - Значения.ГруппаДоступа = ГруппыДоступа.Ссылка - И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа - И ГруппыЗначений.ЗначениеДоступа = #Параметр(19) - #КонецЕсли - ) - ТОГДА ИСТИНА - ИНАЧЕ ЛОЖЬ - КОНЕЦ - = - ВЫБОР - КОГДА ИСТИНА В - ( - ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА - ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию - ГДЕ - ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(#Параметр(19)) - И ЗначенияПоУмолчанию.ВсеРазрешены = ЛОЖЬ - ) - ТОГДА ИСТИНА - ИНАЧЕ ЛОЖЬ - КОНЕЦ - ) - ) -#Иначе - ИСТИНА -#КонецЕсли - - #Параметр(20) // [)[)][)]...] [ИЛИ|И] [([(][(]...] оператор И/ИЛИ с/без скобок. - -//// Проверка значения поля группы параметров 6. -#Если "#Параметр(21)" = "" И "#Параметр(22)" = "" #Тогда - // Группа параметров не используется. -#ИначеЕсли "#Параметр(21)" = "Условие" Или "#Параметр(21)" = "" #Тогда - // Когда имя вида доступа "Условие" (или ""), тогда вместо имени поля задано условие. - ( #Параметр(22) ) -#ИначеЕсли "#Параметр(21)" = "ПравоЧтения" Или "#Параметр(21)" = "ПравоИзменения" #Тогда - #Параметр(22) <> НЕОПРЕДЕЛЕНО - И ИСТИНА В - ( // Проверка права пользователя на таблицу Значения, установленного в поле. - ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА - ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава - ГДЕ - ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(22)) - #Если Не "#Параметр(21)" = "ПравоЧтения" #Тогда - И ТаблицыГруппДоступаПроверкаПрава.Изменение - #КонецЕсли - ) -#ИначеЕсли "#Параметр(21)" = "НастройкиПрав" #Тогда - - ( - ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено - ( - ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА - ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек - ПО - НаследованиеНастроек.Объект = #Параметр(22) - И НастройкиПрав.Объект = НаследованиеНастроек.Родитель - #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда - И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияЧтения - #Иначе - #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда - И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка - #Иначе - И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) - #КонецЕсли - И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения - #КонецЕсли - ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей - ПО - СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь - И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь - ) - И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. - ( - ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ - ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек - ПО - НаследованиеНастроек.Объект = #Параметр(22) - И НастройкиПрав.Объект = НаследованиеНастроек.Родитель - #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда - И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияЧтения - #Иначе - #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда - И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка - #Иначе - И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) - #КонецЕсли - И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения - #КонецЕсли - ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей - ПО - СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь - И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь - ) - ) -#ИначеЕсли Не СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(21),") #Тогда - // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. - #Если СтрСодержит("#Параметр(21)", ",") #Тогда - НеверныйВидДоступа: "#Параметр(21)" - "Список имен видов доступа не найден" - #Иначе - НеверныйВидДоступа: "#Параметр(21)" - "Имя вида доступа не найдено" - #КонецЕсли -#ИначеЕсли &ВидыДоступаСОтключеннымИспользованием <> "Все" - И Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(21),") #Тогда - - ( - ЕСТЬNULL(#Параметр(22), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО - И - #Если (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(21),", ",Пользователи,")) - Или (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(21),", ",ВнешниеПользователи,")) #Тогда - НЕ - ( - НЕ ИСТИНА В - ( - ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА - ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа - ГДЕ - ГруппыЗначенийДоступа.ЗначениеДоступа = #Параметр(22) - И ГруппыЗначенийДоступа.ГруппаЗначенийДоступа = &АвторизованныйПользователь - ) - И НЕ - #Иначе - ( - #КонецЕсли - ВЫБОР - КОГДА ИСТИНА В - ( - #Если СтрСодержит(&ВидыДоступаБезГруппДляЗначенияДоступа, ",#Параметр(21),") #Тогда - ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА - ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - ГДЕ - Значения.ГруппаДоступа = ГруппыДоступа.Ссылка - И Значения.ЗначениеДоступа = #Параметр(22) - #ИначеЕсли "#Параметр(22)" = "Т.Ссылка" #Тогда - #Если СтрСодержит("#Параметр(21)", ",") #Тогда - // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. - НеверныйВидДоступа: "#Параметр(21)" - "При проверке таблицы значения доступа можно указывать только один вид доступа" - #ИначеЕсли СтрСодержит(&ВидыДоступаСОднойГруппойДляЗначенияДоступа, ",#Параметр(21),") #Тогда - ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА - ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - ГДЕ - Значения.ГруппаДоступа = ГруппыДоступа.Ссылка - И Значения.ЗначениеДоступа = Т.ГруппаДоступа - #Иначе // Значения доступа, для которых можно указать несколько групп значений доступа. - ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА - ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - ВНУТРЕННЕЕ СОЕДИНЕНИЕ #Параметр(1).ГруппыДоступа КАК ГруппыЗначений - ПО - Значения.ГруппаДоступа = ГруппыДоступа.Ссылка - И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа - И ГруппыЗначений.Ссылка = #Параметр(22) - #КонецЕсли - #Иначе - ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА - ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений - ПО - Значения.ГруппаДоступа = ГруппыДоступа.Ссылка - И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа - И ГруппыЗначений.ЗначениеДоступа = #Параметр(22) - #КонецЕсли - ) - ТОГДА ИСТИНА - ИНАЧЕ ЛОЖЬ - КОНЕЦ - = - ВЫБОР - КОГДА ИСТИНА В - ( - ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА - ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию - ГДЕ - ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(#Параметр(22)) - И ЗначенияПоУмолчанию.ВсеРазрешены = ЛОЖЬ - ) - ТОГДА ИСТИНА - ИНАЧЕ ЛОЖЬ - КОНЕЦ - ) - ) -#Иначе - ИСТИНА -#КонецЕсли - - #Параметр(23) // [)[)][)]...] [ИЛИ|И] [([(][(]...] оператор И/ИЛИ с/без скобок. - -//// Проверка значения поля группы параметров 7. -#Если "#Параметр(24)" = "" И "#Параметр(25)" = "" #Тогда - // Группа параметров не используется. -#ИначеЕсли "#Параметр(24)" = "Условие" Или "#Параметр(24)" = "" #Тогда - // Когда имя вида доступа "Условие" (или ""), тогда вместо имени поля задано условие. - ( #Параметр(25) ) -#ИначеЕсли "#Параметр(24)" = "ПравоЧтения" Или "#Параметр(24)" = "ПравоИзменения" #Тогда - #Параметр(25) <> НЕОПРЕДЕЛЕНО - И ИСТИНА В - ( // Проверка права пользователя на таблицу Значения, установленного в поле. - ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА - ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава - ГДЕ - ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(25)) - #Если Не "#Параметр(24)" = "ПравоЧтения" #Тогда - И ТаблицыГруппДоступаПроверкаПрава.Изменение - #КонецЕсли - ) -#ИначеЕсли "#Параметр(24)" = "НастройкиПрав" #Тогда - - ( - ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено - ( - ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА - ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек - ПО - НаследованиеНастроек.Объект = #Параметр(25) - И НастройкиПрав.Объект = НаследованиеНастроек.Родитель - #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда - И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияЧтения - #Иначе - #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда - И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка - #Иначе - И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) - #КонецЕсли - И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения - #КонецЕсли - ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей - ПО - СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь - И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь - ) - И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. - ( - ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ - ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек - ПО - НаследованиеНастроек.Объект = #Параметр(25) - И НастройкиПрав.Объект = НаследованиеНастроек.Родитель - #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда - И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияЧтения - #Иначе - #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда - И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка - #Иначе - И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) - #КонецЕсли - И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения - #КонецЕсли - ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей - ПО - СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь - И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь - ) - ) -#ИначеЕсли Не СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(24),") #Тогда - // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. - #Если СтрСодержит("#Параметр(24)", ",") #Тогда - НеверныйВидДоступа: "#Параметр(24)" - "Список имен видов доступа не найден" - #Иначе - НеверныйВидДоступа: "#Параметр(24)" - "Имя вида доступа не найдено" - #КонецЕсли -#ИначеЕсли &ВидыДоступаСОтключеннымИспользованием <> "Все" - И Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(24),") #Тогда - - ( - ЕСТЬNULL(#Параметр(25), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО - И - #Если (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(24),", ",Пользователи,")) - Или (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(24),", ",ВнешниеПользователи,")) #Тогда - НЕ - ( - НЕ ИСТИНА В - ( - ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА - ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа - ГДЕ - ГруппыЗначенийДоступа.ЗначениеДоступа = #Параметр(25) - И ГруппыЗначенийДоступа.ГруппаЗначенийДоступа = &АвторизованныйПользователь - ) - И НЕ - #Иначе - ( - #КонецЕсли - ВЫБОР - КОГДА ИСТИНА В - ( - #Если СтрСодержит(&ВидыДоступаБезГруппДляЗначенияДоступа, ",#Параметр(24),") #Тогда - ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА - ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - ГДЕ - Значения.ГруппаДоступа = ГруппыДоступа.Ссылка - И Значения.ЗначениеДоступа = #Параметр(25) - #ИначеЕсли "#Параметр(25)" = "Т.Ссылка" #Тогда - #Если СтрСодержит("#Параметр(24)", ",") #Тогда - // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. - НеверныйВидДоступа: "#Параметр(24)" - "При проверке таблицы значения доступа можно указывать только один вид доступа" - #ИначеЕсли СтрСодержит(&ВидыДоступаСОднойГруппойДляЗначенияДоступа, ",#Параметр(24),") #Тогда - ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА - ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - ГДЕ - Значения.ГруппаДоступа = ГруппыДоступа.Ссылка - И Значения.ЗначениеДоступа = Т.ГруппаДоступа - #Иначе // Значения доступа, для которых можно указать несколько групп значений доступа. - ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА - ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - ВНУТРЕННЕЕ СОЕДИНЕНИЕ #Параметр(1).ГруппыДоступа КАК ГруппыЗначений - ПО - Значения.ГруппаДоступа = ГруппыДоступа.Ссылка - И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа - И ГруппыЗначений.Ссылка = #Параметр(25) - #КонецЕсли - #Иначе - ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА - ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений - ПО - Значения.ГруппаДоступа = ГруппыДоступа.Ссылка - И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа - И ГруппыЗначений.ЗначениеДоступа = #Параметр(25) - #КонецЕсли - ) - ТОГДА ИСТИНА - ИНАЧЕ ЛОЖЬ - КОНЕЦ - = - ВЫБОР - КОГДА ИСТИНА В - ( - ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА - ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию - ГДЕ - ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(#Параметр(25)) - И ЗначенияПоУмолчанию.ВсеРазрешены = ЛОЖЬ - ) - ТОГДА ИСТИНА - ИНАЧЕ ЛОЖЬ - КОНЕЦ - ) - ) -#Иначе - ИСТИНА -#КонецЕсли - - #Параметр(26) // [)[)][)]...] [ИЛИ|И] [([(][(]...] оператор И/ИЛИ с/без скобок. - -//// Проверка значения поля группы параметров 8. -#Если "#Параметр(27)" = "" И "#Параметр(28)" = "" #Тогда - // Группа параметров не используется. -#ИначеЕсли "#Параметр(27)" = "Условие" Или "#Параметр(27)" = "" #Тогда - // Когда имя вида доступа "Условие" (или ""), тогда вместо имени поля задано условие. - ( #Параметр(28) ) -#ИначеЕсли "#Параметр(27)" = "ПравоЧтения" Или "#Параметр(27)" = "ПравоИзменения" #Тогда - #Параметр(28) <> НЕОПРЕДЕЛЕНО - И ИСТИНА В - ( // Проверка права пользователя на таблицу Значения, установленного в поле. - ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА - ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава - ГДЕ - ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(28)) - #Если Не "#Параметр(27)" = "ПравоЧтения" #Тогда - И ТаблицыГруппДоступаПроверкаПрава.Изменение - #КонецЕсли - ) -#ИначеЕсли "#Параметр(27)" = "НастройкиПрав" #Тогда - - ( - ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено - ( - ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА - ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек - ПО - НаследованиеНастроек.Объект = #Параметр(28) - И НастройкиПрав.Объект = НаследованиеНастроек.Родитель - #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда - И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияЧтения - #Иначе - #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда - И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка - #Иначе - И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) - #КонецЕсли - И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения - #КонецЕсли - ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей - ПО - СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь - И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь - ) - И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. - ( - ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ - ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек - ПО - НаследованиеНастроек.Объект = #Параметр(28) - И НастройкиПрав.Объект = НаследованиеНастроек.Родитель - #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда - И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияЧтения - #Иначе - #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда - И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка - #Иначе - И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) - #КонецЕсли - И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения - #КонецЕсли - ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей - ПО - СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь - И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь - ) - ) -#ИначеЕсли Не СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(27),") #Тогда - // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. - #Если СтрСодержит("#Параметр(27)", ",") #Тогда - НеверныйВидДоступа: "#Параметр(27)" - "Список имен видов доступа не найден" - #Иначе - НеверныйВидДоступа: "#Параметр(27)" - "Имя вида доступа не найдено" - #КонецЕсли -#ИначеЕсли &ВидыДоступаСОтключеннымИспользованием <> "Все" - И Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(27),") #Тогда - - ( - ЕСТЬNULL(#Параметр(28), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО - И - #Если (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(27),", ",Пользователи,")) - Или (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(27),", ",ВнешниеПользователи,")) #Тогда - НЕ - ( - НЕ ИСТИНА В - ( - ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА - ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа - ГДЕ - ГруппыЗначенийДоступа.ЗначениеДоступа = #Параметр(28) - И ГруппыЗначенийДоступа.ГруппаЗначенийДоступа = &АвторизованныйПользователь - ) - И НЕ - #Иначе - ( - #КонецЕсли - ВЫБОР - КОГДА ИСТИНА В - ( - #Если СтрСодержит(&ВидыДоступаБезГруппДляЗначенияДоступа, ",#Параметр(27),") #Тогда - ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА - ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - ГДЕ - Значения.ГруппаДоступа = ГруппыДоступа.Ссылка - И Значения.ЗначениеДоступа = #Параметр(28) - #ИначеЕсли "#Параметр(28)" = "Т.Ссылка" #Тогда - #Если СтрСодержит("#Параметр(27)", ",") #Тогда - // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. - НеверныйВидДоступа: "#Параметр(27)" - "При проверке таблицы значения доступа можно указывать только один вид доступа" - #ИначеЕсли СтрСодержит(&ВидыДоступаСОднойГруппойДляЗначенияДоступа, ",#Параметр(27),") #Тогда - ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА - ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - ГДЕ - Значения.ГруппаДоступа = ГруппыДоступа.Ссылка - И Значения.ЗначениеДоступа = Т.ГруппаДоступа - #Иначе // Значения доступа, для которых можно указать несколько групп значений доступа. - ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА - ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - ВНУТРЕННЕЕ СОЕДИНЕНИЕ #Параметр(1).ГруппыДоступа КАК ГруппыЗначений - ПО - Значения.ГруппаДоступа = ГруппыДоступа.Ссылка - И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа - И ГруппыЗначений.Ссылка = #Параметр(28) - #КонецЕсли - #Иначе - ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА - ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений - ПО - Значения.ГруппаДоступа = ГруппыДоступа.Ссылка - И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа - И ГруппыЗначений.ЗначениеДоступа = #Параметр(28) - #КонецЕсли - ) - ТОГДА ИСТИНА - ИНАЧЕ ЛОЖЬ - КОНЕЦ - = - ВЫБОР - КОГДА ИСТИНА В - ( - ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА - ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию - ГДЕ - ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(#Параметр(28)) - И ЗначенияПоУмолчанию.ВсеРазрешены = ЛОЖЬ - ) - ТОГДА ИСТИНА - ИНАЧЕ ЛОЖЬ - КОНЕЦ - ) - ) -#Иначе - ИСТИНА -#КонецЕсли - - #Параметр(29) // [)[)][)]...] [ИЛИ|И] [([(][(]...] оператор И/ИЛИ с/без скобок. - -//// Проверка значения поля группы параметров 9. -#Если "#Параметр(30)" = "" И "#Параметр(31)" = "" #Тогда - // Группа параметров не используется. -#ИначеЕсли "#Параметр(30)" = "Условие" Или "#Параметр(30)" = "" #Тогда - // Когда имя вида доступа "Условие" (или ""), тогда вместо имени поля задано условие. - ( #Параметр(31) ) -#ИначеЕсли "#Параметр(30)" = "ПравоЧтения" Или "#Параметр(30)" = "ПравоИзменения" #Тогда - #Параметр(31) <> НЕОПРЕДЕЛЕНО - И ИСТИНА В - ( // Проверка права пользователя на таблицу Значения, установленного в поле. - ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА - ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава - ГДЕ - ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(31)) - #Если Не "#Параметр(30)" = "ПравоЧтения" #Тогда - И ТаблицыГруппДоступаПроверкаПрава.Изменение - #КонецЕсли - ) -#ИначеЕсли "#Параметр(30)" = "НастройкиПрав" #Тогда - - ( - ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено - ( - ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА - ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек - ПО - НаследованиеНастроек.Объект = #Параметр(31) - И НастройкиПрав.Объект = НаследованиеНастроек.Родитель - #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда - И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияЧтения - #Иначе - #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда - И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка - #Иначе - И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) - #КонецЕсли - И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения - #КонецЕсли - ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей - ПО - СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь - И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь - ) - И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. - ( - ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ - ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек - ПО - НаследованиеНастроек.Объект = #Параметр(31) - И НастройкиПрав.Объект = НаследованиеНастроек.Родитель - #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда - И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияЧтения - #Иначе - #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда - И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка - #Иначе - И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) - #КонецЕсли - И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения - #КонецЕсли - ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей - ПО - СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь - И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь - ) - ) -#ИначеЕсли Не СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(30),") #Тогда - // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. - #Если СтрСодержит("#Параметр(30)", ",") #Тогда - НеверныйВидДоступа: "#Параметр(30)" - "Список имен видов доступа не найден" - #Иначе - НеверныйВидДоступа: "#Параметр(30)" - "Имя вида доступа не найдено" - #КонецЕсли -#ИначеЕсли &ВидыДоступаСОтключеннымИспользованием <> "Все" - И Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(30),") #Тогда - - ( - ЕСТЬNULL(#Параметр(31), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО - И - #Если (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(30),", ",Пользователи,")) - Или (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(30),", ",ВнешниеПользователи,")) #Тогда - НЕ - ( - НЕ ИСТИНА В - ( - ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА - ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа - ГДЕ - ГруппыЗначенийДоступа.ЗначениеДоступа = #Параметр(31) - И ГруппыЗначенийДоступа.ГруппаЗначенийДоступа = &АвторизованныйПользователь - ) - И НЕ - #Иначе - ( - #КонецЕсли - ВЫБОР - КОГДА ИСТИНА В - ( - #Если СтрСодержит(&ВидыДоступаБезГруппДляЗначенияДоступа, ",#Параметр(30),") #Тогда - ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА - ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - ГДЕ - Значения.ГруппаДоступа = ГруппыДоступа.Ссылка - И Значения.ЗначениеДоступа = #Параметр(31) - #ИначеЕсли "#Параметр(31)" = "Т.Ссылка" #Тогда - #Если СтрСодержит("#Параметр(30)", ",") #Тогда - // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. - НеверныйВидДоступа: "#Параметр(30)" - "При проверке таблицы значения доступа можно указывать только один вид доступа" - #ИначеЕсли СтрСодержит(&ВидыДоступаСОднойГруппойДляЗначенияДоступа, ",#Параметр(30),") #Тогда - ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА - ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - ГДЕ - Значения.ГруппаДоступа = ГруппыДоступа.Ссылка - И Значения.ЗначениеДоступа = Т.ГруппаДоступа - #Иначе // Значения доступа, для которых можно указать несколько групп значений доступа. - ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА - ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - ВНУТРЕННЕЕ СОЕДИНЕНИЕ #Параметр(1).ГруппыДоступа КАК ГруппыЗначений - ПО - Значения.ГруппаДоступа = ГруппыДоступа.Ссылка - И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа - И ГруппыЗначений.Ссылка = #Параметр(31) - #КонецЕсли - #Иначе - ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА - ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений - ПО - Значения.ГруппаДоступа = ГруппыДоступа.Ссылка - И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа - И ГруппыЗначений.ЗначениеДоступа = #Параметр(31) - #КонецЕсли - ) - ТОГДА ИСТИНА - ИНАЧЕ ЛОЖЬ - КОНЕЦ - = - ВЫБОР - КОГДА ИСТИНА В - ( - ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА - ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию - ГДЕ - ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(#Параметр(31)) - И ЗначенияПоУмолчанию.ВсеРазрешены = ЛОЖЬ - ) - ТОГДА ИСТИНА - ИНАЧЕ ЛОЖЬ - КОНЕЦ - ) - ) -#Иначе - ИСТИНА -#КонецЕсли - - #Параметр(32) // [)[)][)]...] [ИЛИ|И] [([(][(]...] оператор И/ИЛИ с/без скобок. - -//// Проверка значения поля группы параметров 10. -#Если "#Параметр(33)" = "" И "#Параметр(34)" = "" #Тогда - // Группа параметров не используется. -#ИначеЕсли "#Параметр(33)" = "Условие" Или "#Параметр(33)" = "" #Тогда - // Когда имя вида доступа "Условие" (или ""), тогда вместо имени поля задано условие. - ( #Параметр(34) ) -#ИначеЕсли "#Параметр(33)" = "ПравоЧтения" Или "#Параметр(33)" = "ПравоИзменения" #Тогда - #Параметр(34) <> НЕОПРЕДЕЛЕНО - И ИСТИНА В - ( // Проверка права пользователя на таблицу Значения, установленного в поле. - ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА - ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава - ГДЕ - ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(34)) - #Если Не "#Параметр(33)" = "ПравоЧтения" #Тогда - И ТаблицыГруппДоступаПроверкаПрава.Изменение - #КонецЕсли - ) -#ИначеЕсли "#Параметр(33)" = "НастройкиПрав" #Тогда - - ( - ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено - ( - ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА - ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек - ПО - НаследованиеНастроек.Объект = #Параметр(34) - И НастройкиПрав.Объект = НаследованиеНастроек.Родитель - #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда - И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияЧтения - #Иначе - #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда - И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка - #Иначе - И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) - #КонецЕсли - И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения - #КонецЕсли - ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей - ПО - СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь - И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь - ) - И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. - ( - ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ - ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек - ПО - НаследованиеНастроек.Объект = #Параметр(34) - И НастройкиПрав.Объект = НаследованиеНастроек.Родитель - #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда - И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияЧтения - #Иначе - #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда - И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка - #Иначе - И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) - #КонецЕсли - И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения - #КонецЕсли - ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей - ПО - СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь - И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь - ) - ) -#ИначеЕсли Не СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(33),") #Тогда - // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. - #Если СтрСодержит("#Параметр(33)", ",") #Тогда - НеверныйВидДоступа: "#Параметр(33)" - "Список имен видов доступа не найден" - #Иначе - НеверныйВидДоступа: "#Параметр(33)" - "Имя вида доступа не найдено" - #КонецЕсли -#ИначеЕсли &ВидыДоступаСОтключеннымИспользованием <> "Все" - И Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(33),") #Тогда - - ( - ЕСТЬNULL(#Параметр(34), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО - И - #Если (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(33),", ",Пользователи,")) - Или (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(33),", ",ВнешниеПользователи,")) #Тогда - НЕ - ( - НЕ ИСТИНА В - ( - ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА - ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа - ГДЕ - ГруппыЗначенийДоступа.ЗначениеДоступа = #Параметр(34) - И ГруппыЗначенийДоступа.ГруппаЗначенийДоступа = &АвторизованныйПользователь - ) - И НЕ - #Иначе - ( - #КонецЕсли - ВЫБОР - КОГДА ИСТИНА В - ( - #Если СтрСодержит(&ВидыДоступаБезГруппДляЗначенияДоступа, ",#Параметр(33),") #Тогда - ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА - ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - ГДЕ - Значения.ГруппаДоступа = ГруппыДоступа.Ссылка - И Значения.ЗначениеДоступа = #Параметр(34) - #ИначеЕсли "#Параметр(34)" = "Т.Ссылка" #Тогда - #Если СтрСодержит("#Параметр(33)", ",") #Тогда - // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. - НеверныйВидДоступа: "#Параметр(33)" - "При проверке таблицы значения доступа можно указывать только один вид доступа" - #ИначеЕсли СтрСодержит(&ВидыДоступаСОднойГруппойДляЗначенияДоступа, ",#Параметр(33),") #Тогда - ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА - ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - ГДЕ - Значения.ГруппаДоступа = ГруппыДоступа.Ссылка - И Значения.ЗначениеДоступа = Т.ГруппаДоступа - #Иначе // Значения доступа, для которых можно указать несколько групп значений доступа. - ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА - ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - ВНУТРЕННЕЕ СОЕДИНЕНИЕ #Параметр(1).ГруппыДоступа КАК ГруппыЗначений - ПО - Значения.ГруппаДоступа = ГруппыДоступа.Ссылка - И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа - И ГруппыЗначений.Ссылка = #Параметр(34) - #КонецЕсли - #Иначе - ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА - ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений - ПО - Значения.ГруппаДоступа = ГруппыДоступа.Ссылка - И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа - И ГруппыЗначений.ЗначениеДоступа = #Параметр(34) - #КонецЕсли - ) - ТОГДА ИСТИНА - ИНАЧЕ ЛОЖЬ - КОНЕЦ - = - ВЫБОР - КОГДА ИСТИНА В - ( - ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА - ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию - ГДЕ - ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(#Параметр(34)) - И ЗначенияПоУмолчанию.ВсеРазрешены = ЛОЖЬ - ) - ТОГДА ИСТИНА - ИНАЧЕ ЛОЖЬ - КОНЕЦ - ) - ) -#Иначе - ИСТИНА -#КонецЕсли - - #Параметр(35) // [)[)][)]...] [ИЛИ|И] [([(][(]...] оператор И/ИЛИ с/без скобок. - -//// Проверка значения поля группы параметров 11. -#Если "#Параметр(36)" = "" И "#Параметр(37)" = "" #Тогда - // Группа параметров не используется. -#ИначеЕсли "#Параметр(36)" = "Условие" Или "#Параметр(36)" = "" #Тогда - // Когда имя вида доступа "Условие" (или ""), тогда вместо имени поля задано условие. - ( #Параметр(37) ) -#ИначеЕсли "#Параметр(36)" = "ПравоЧтения" Или "#Параметр(36)" = "ПравоИзменения" #Тогда - #Параметр(37) <> НЕОПРЕДЕЛЕНО - И ИСТИНА В - ( // Проверка права пользователя на таблицу Значения, установленного в поле. - ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА - ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава - ГДЕ - ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(37)) - #Если Не "#Параметр(36)" = "ПравоЧтения" #Тогда - И ТаблицыГруппДоступаПроверкаПрава.Изменение - #КонецЕсли - ) -#ИначеЕсли "#Параметр(36)" = "НастройкиПрав" #Тогда - - ( - ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено - ( - ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА - ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек - ПО - НаследованиеНастроек.Объект = #Параметр(37) - И НастройкиПрав.Объект = НаследованиеНастроек.Родитель - #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда - И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияЧтения - #Иначе - #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда - И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка - #Иначе - И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) - #КонецЕсли - И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения - #КонецЕсли - ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей - ПО - СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь - И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь - ) - И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. - ( - ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ - ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек - ПО - НаследованиеНастроек.Объект = #Параметр(37) - И НастройкиПрав.Объект = НаследованиеНастроек.Родитель - #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда - И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияЧтения - #Иначе - #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда - И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка - #Иначе - И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) - #КонецЕсли - И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения - #КонецЕсли - ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей - ПО - СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь - И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь - ) - ) -#ИначеЕсли Не СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(36),") #Тогда - // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. - #Если СтрСодержит("#Параметр(36)", ",") #Тогда - НеверныйВидДоступа: "#Параметр(36)" - "Список имен видов доступа не найден" - #Иначе - НеверныйВидДоступа: "#Параметр(36)" - "Имя вида доступа не найдено" - #КонецЕсли -#ИначеЕсли &ВидыДоступаСОтключеннымИспользованием <> "Все" - И Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(36),") #Тогда - - ( - ЕСТЬNULL(#Параметр(37), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО - И - #Если (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(36),", ",Пользователи,")) - Или (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(36),", ",ВнешниеПользователи,")) #Тогда - НЕ - ( - НЕ ИСТИНА В - ( - ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА - ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа - ГДЕ - ГруппыЗначенийДоступа.ЗначениеДоступа = #Параметр(37) - И ГруппыЗначенийДоступа.ГруппаЗначенийДоступа = &АвторизованныйПользователь - ) - И НЕ - #Иначе - ( - #КонецЕсли - ВЫБОР - КОГДА ИСТИНА В - ( - #Если СтрСодержит(&ВидыДоступаБезГруппДляЗначенияДоступа, ",#Параметр(36),") #Тогда - ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА - ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - ГДЕ - Значения.ГруппаДоступа = ГруппыДоступа.Ссылка - И Значения.ЗначениеДоступа = #Параметр(37) - #ИначеЕсли "#Параметр(37)" = "Т.Ссылка" #Тогда - #Если СтрСодержит("#Параметр(36)", ",") #Тогда - // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. - НеверныйВидДоступа: "#Параметр(36)" - "При проверке таблицы значения доступа можно указывать только один вид доступа" - #ИначеЕсли СтрСодержит(&ВидыДоступаСОднойГруппойДляЗначенияДоступа, ",#Параметр(36),") #Тогда - ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА - ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - ГДЕ - Значения.ГруппаДоступа = ГруппыДоступа.Ссылка - И Значения.ЗначениеДоступа = Т.ГруппаДоступа - #Иначе // Значения доступа, для которых можно указать несколько групп значений доступа. - ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА - ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - ВНУТРЕННЕЕ СОЕДИНЕНИЕ #Параметр(1).ГруппыДоступа КАК ГруппыЗначений - ПО - Значения.ГруппаДоступа = ГруппыДоступа.Ссылка - И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа - И ГруппыЗначений.Ссылка = #Параметр(37) - #КонецЕсли - #Иначе - ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА - ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений - ПО - Значения.ГруппаДоступа = ГруппыДоступа.Ссылка - И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа - И ГруппыЗначений.ЗначениеДоступа = #Параметр(37) - #КонецЕсли - ) - ТОГДА ИСТИНА - ИНАЧЕ ЛОЖЬ - КОНЕЦ - = - ВЫБОР - КОГДА ИСТИНА В - ( - ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА - ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию - ГДЕ - ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(#Параметр(37)) - И ЗначенияПоУмолчанию.ВсеРазрешены = ЛОЖЬ - ) - ТОГДА ИСТИНА - ИНАЧЕ ЛОЖЬ - КОНЕЦ - ) - ) -#Иначе - ИСТИНА -#КонецЕсли - - #Параметр(38) // [)[)][)]...] [ИЛИ|И] [([(][(]...] оператор И/ИЛИ с/без скобок. - -//// Проверка значения поля группы параметров 12. -#Если "#Параметр(39)" = "" И "#Параметр(40)" = "" #Тогда - // Группа параметров не используется. -#ИначеЕсли "#Параметр(39)" = "Условие" Или "#Параметр(39)" = "" #Тогда - // Когда имя вида доступа "Условие" (или ""), тогда вместо имени поля задано условие. - ( #Параметр(40) ) -#ИначеЕсли "#Параметр(39)" = "ПравоЧтения" Или "#Параметр(39)" = "ПравоИзменения" #Тогда - #Параметр(40) <> НЕОПРЕДЕЛЕНО - И ИСТИНА В - ( // Проверка права пользователя на таблицу Значения, установленного в поле. - ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА - ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава - ГДЕ - ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(40)) - #Если Не "#Параметр(39)" = "ПравоЧтения" #Тогда - И ТаблицыГруппДоступаПроверкаПрава.Изменение - #КонецЕсли - ) -#ИначеЕсли "#Параметр(39)" = "НастройкиПрав" #Тогда - - ( - ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено - ( - ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА - ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек - ПО - НаследованиеНастроек.Объект = #Параметр(40) - И НастройкиПрав.Объект = НаследованиеНастроек.Родитель - #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда - И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияЧтения - #Иначе - #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда - И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка - #Иначе - И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) - #КонецЕсли - И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения - #КонецЕсли - ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей - ПО - СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь - И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь - ) - И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. - ( - ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ - ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек - ПО - НаследованиеНастроек.Объект = #Параметр(40) - И НастройкиПрав.Объект = НаследованиеНастроек.Родитель - #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда - И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияЧтения - #Иначе - #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда - И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка - #Иначе - И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) - #КонецЕсли - И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения - #КонецЕсли - ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей - ПО - СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь - И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь - ) - ) -#ИначеЕсли Не СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(39),") #Тогда - // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. - #Если СтрСодержит("#Параметр(39)", ",") #Тогда - НеверныйВидДоступа: "#Параметр(39)" - "Список имен видов доступа не найден" - #Иначе - НеверныйВидДоступа: "#Параметр(39)" - "Имя вида доступа не найдено" - #КонецЕсли -#ИначеЕсли &ВидыДоступаСОтключеннымИспользованием <> "Все" - И Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(39),") #Тогда - - ( - ЕСТЬNULL(#Параметр(40), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО - И - #Если (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(39),", ",Пользователи,")) - Или (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(39),", ",ВнешниеПользователи,")) #Тогда - НЕ - ( - НЕ ИСТИНА В - ( - ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА - ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа - ГДЕ - ГруппыЗначенийДоступа.ЗначениеДоступа = #Параметр(40) - И ГруппыЗначенийДоступа.ГруппаЗначенийДоступа = &АвторизованныйПользователь - ) - И НЕ - #Иначе - ( - #КонецЕсли - ВЫБОР - КОГДА ИСТИНА В - ( - #Если СтрСодержит(&ВидыДоступаБезГруппДляЗначенияДоступа, ",#Параметр(39),") #Тогда - ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА - ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - ГДЕ - Значения.ГруппаДоступа = ГруппыДоступа.Ссылка - И Значения.ЗначениеДоступа = #Параметр(40) - #ИначеЕсли "#Параметр(40)" = "Т.Ссылка" #Тогда - #Если СтрСодержит("#Параметр(39)", ",") #Тогда - // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. - НеверныйВидДоступа: "#Параметр(39)" - "При проверке таблицы значения доступа можно указывать только один вид доступа" - #ИначеЕсли СтрСодержит(&ВидыДоступаСОднойГруппойДляЗначенияДоступа, ",#Параметр(39),") #Тогда - ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА - ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - ГДЕ - Значения.ГруппаДоступа = ГруппыДоступа.Ссылка - И Значения.ЗначениеДоступа = Т.ГруппаДоступа - #Иначе // Значения доступа, для которых можно указать несколько групп значений доступа. - ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА - ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - ВНУТРЕННЕЕ СОЕДИНЕНИЕ #Параметр(1).ГруппыДоступа КАК ГруппыЗначений - ПО - Значения.ГруппаДоступа = ГруппыДоступа.Ссылка - И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа - И ГруппыЗначений.Ссылка = #Параметр(40) - #КонецЕсли - #Иначе - ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА - ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений - ПО - Значения.ГруппаДоступа = ГруппыДоступа.Ссылка - И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа - И ГруппыЗначений.ЗначениеДоступа = #Параметр(40) - #КонецЕсли - ) - ТОГДА ИСТИНА - ИНАЧЕ ЛОЖЬ - КОНЕЦ - = - ВЫБОР - КОГДА ИСТИНА В - ( - ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА - ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию - ГДЕ - ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(#Параметр(40)) - И ЗначенияПоУмолчанию.ВсеРазрешены = ЛОЖЬ - ) - ТОГДА ИСТИНА - ИНАЧЕ ЛОЖЬ - КОНЕЦ - ) - ) -#Иначе - ИСТИНА -#КонецЕсли - - #Параметр(41) // [)[)][)]...] [ИЛИ|И] [([(][(]...] оператор И/ИЛИ с/без скобок. - -//// Проверка значения поля группы параметров 13. -#Если "#Параметр(42)" = "" И "#Параметр(43)" = "" #Тогда - // Группа параметров не используется. -#ИначеЕсли "#Параметр(42)" = "Условие" Или "#Параметр(42)" = "" #Тогда - // Когда имя вида доступа "Условие" (или ""), тогда вместо имени поля задано условие. - ( #Параметр(43) ) -#ИначеЕсли "#Параметр(42)" = "ПравоЧтения" Или "#Параметр(42)" = "ПравоИзменения" #Тогда - #Параметр(43) <> НЕОПРЕДЕЛЕНО - И ИСТИНА В - ( // Проверка права пользователя на таблицу Значения, установленного в поле. - ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА - ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава - ГДЕ - ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(43)) - #Если Не "#Параметр(42)" = "ПравоЧтения" #Тогда - И ТаблицыГруппДоступаПроверкаПрава.Изменение - #КонецЕсли - ) -#ИначеЕсли "#Параметр(42)" = "НастройкиПрав" #Тогда - - ( - ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено - ( - ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА - ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек - ПО - НаследованиеНастроек.Объект = #Параметр(43) - И НастройкиПрав.Объект = НаследованиеНастроек.Родитель - #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда - И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияЧтения - #Иначе - #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда - И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка - #Иначе - И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) - #КонецЕсли - И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения - #КонецЕсли - ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей - ПО - СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь - И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь - ) - И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. - ( - ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ - ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек - ПО - НаследованиеНастроек.Объект = #Параметр(43) - И НастройкиПрав.Объект = НаследованиеНастроек.Родитель - #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда - И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияЧтения - #Иначе - #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда - И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка - #Иначе - И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) - #КонецЕсли - И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения - #КонецЕсли - ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей - ПО - СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь - И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь - ) - ) -#ИначеЕсли Не СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(42),") #Тогда - // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. - #Если СтрСодержит("#Параметр(42)", ",") #Тогда - НеверныйВидДоступа: "#Параметр(42)" - "Список имен видов доступа не найден" - #Иначе - НеверныйВидДоступа: "#Параметр(42)" - "Имя вида доступа не найдено" - #КонецЕсли -#ИначеЕсли &ВидыДоступаСОтключеннымИспользованием <> "Все" - И Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(42),") #Тогда - - ( - ЕСТЬNULL(#Параметр(43), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО - И - #Если (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(42),", ",Пользователи,")) - Или (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(42),", ",ВнешниеПользователи,")) #Тогда - НЕ - ( - НЕ ИСТИНА В - ( - ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА - ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа - ГДЕ - ГруппыЗначенийДоступа.ЗначениеДоступа = #Параметр(43) - И ГруппыЗначенийДоступа.ГруппаЗначенийДоступа = &АвторизованныйПользователь - ) - И НЕ - #Иначе - ( - #КонецЕсли - ВЫБОР - КОГДА ИСТИНА В - ( - #Если СтрСодержит(&ВидыДоступаБезГруппДляЗначенияДоступа, ",#Параметр(42),") #Тогда - ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА - ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - ГДЕ - Значения.ГруппаДоступа = ГруппыДоступа.Ссылка - И Значения.ЗначениеДоступа = #Параметр(43) - #ИначеЕсли "#Параметр(43)" = "Т.Ссылка" #Тогда - #Если СтрСодержит("#Параметр(42)", ",") #Тогда - // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. - НеверныйВидДоступа: "#Параметр(42)" - "При проверке таблицы значения доступа можно указывать только один вид доступа" - #ИначеЕсли СтрСодержит(&ВидыДоступаСОднойГруппойДляЗначенияДоступа, ",#Параметр(42),") #Тогда - ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА - ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - ГДЕ - Значения.ГруппаДоступа = ГруппыДоступа.Ссылка - И Значения.ЗначениеДоступа = Т.ГруппаДоступа - #Иначе // Значения доступа, для которых можно указать несколько групп значений доступа. - ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА - ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - ВНУТРЕННЕЕ СОЕДИНЕНИЕ #Параметр(1).ГруппыДоступа КАК ГруппыЗначений - ПО - Значения.ГруппаДоступа = ГруппыДоступа.Ссылка - И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа - И ГруппыЗначений.Ссылка = #Параметр(43) - #КонецЕсли - #Иначе - ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА - ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений - ПО - Значения.ГруппаДоступа = ГруппыДоступа.Ссылка - И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа - И ГруппыЗначений.ЗначениеДоступа = #Параметр(43) - #КонецЕсли - ) - ТОГДА ИСТИНА - ИНАЧЕ ЛОЖЬ - КОНЕЦ - = - ВЫБОР - КОГДА ИСТИНА В - ( - ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА - ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию - ГДЕ - ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(#Параметр(43)) - И ЗначенияПоУмолчанию.ВсеРазрешены = ЛОЖЬ - ) - ТОГДА ИСТИНА - ИНАЧЕ ЛОЖЬ - КОНЕЦ - ) - ) -#Иначе - ИСТИНА -#КонецЕсли - - #Параметр(44) // [)[)][)]...] [ИЛИ|И] [([(][(]...] оператор И/ИЛИ с/без скобок. - -//// Проверка значения поля группы параметров 14. -#Если "#Параметр(45)" = "" И "#Параметр(46)" = "" #Тогда - // Группа параметров не используется. -#ИначеЕсли "#Параметр(45)" = "Условие" Или "#Параметр(45)" = "" #Тогда - // Когда имя вида доступа "Условие" (или ""), тогда вместо имени поля задано условие. - ( #Параметр(46) ) -#ИначеЕсли "#Параметр(45)" = "ПравоЧтения" Или "#Параметр(45)" = "ПравоИзменения" #Тогда - #Параметр(46) <> НЕОПРЕДЕЛЕНО - И ИСТИНА В - ( // Проверка права пользователя на таблицу Значения, установленного в поле. - ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА - ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава - ГДЕ - ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(46)) - #Если Не "#Параметр(45)" = "ПравоЧтения" #Тогда - И ТаблицыГруппДоступаПроверкаПрава.Изменение - #КонецЕсли - ) -#ИначеЕсли "#Параметр(45)" = "НастройкиПрав" #Тогда - - ( - ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено - ( - ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА - ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек - ПО - НаследованиеНастроек.Объект = #Параметр(46) - И НастройкиПрав.Объект = НаследованиеНастроек.Родитель - #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда - И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияЧтения - #Иначе - #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда - И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка - #Иначе - И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) - #КонецЕсли - И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения - #КонецЕсли - ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей - ПО - СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь - И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь - ) - И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. - ( - ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ - ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек - ПО - НаследованиеНастроек.Объект = #Параметр(46) - И НастройкиПрав.Объект = НаследованиеНастроек.Родитель - #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда - И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияЧтения - #Иначе - #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда - И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка - #Иначе - И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) - #КонецЕсли - И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения - #КонецЕсли - ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей - ПО - СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь - И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь - ) - ) -#ИначеЕсли Не СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(45),") #Тогда - // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. - #Если СтрСодержит("#Параметр(45)", ",") #Тогда - НеверныйВидДоступа: "#Параметр(45)" - "Список имен видов доступа не найден" - #Иначе - НеверныйВидДоступа: "#Параметр(45)" - "Имя вида доступа не найдено" - #КонецЕсли -#ИначеЕсли &ВидыДоступаСОтключеннымИспользованием <> "Все" - И Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(45),") #Тогда - - ( - ЕСТЬNULL(#Параметр(46), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО - И - #Если (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(45),", ",Пользователи,")) - Или (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(45),", ",ВнешниеПользователи,")) #Тогда - НЕ - ( - НЕ ИСТИНА В - ( - ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА - ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа - ГДЕ - ГруппыЗначенийДоступа.ЗначениеДоступа = #Параметр(46) - И ГруппыЗначенийДоступа.ГруппаЗначенийДоступа = &АвторизованныйПользователь - ) - И НЕ - #Иначе - ( - #КонецЕсли - ВЫБОР - КОГДА ИСТИНА В - ( - #Если СтрСодержит(&ВидыДоступаБезГруппДляЗначенияДоступа, ",#Параметр(45),") #Тогда - ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА - ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - ГДЕ - Значения.ГруппаДоступа = ГруппыДоступа.Ссылка - И Значения.ЗначениеДоступа = #Параметр(46) - #ИначеЕсли "#Параметр(46)" = "Т.Ссылка" #Тогда - #Если СтрСодержит("#Параметр(45)", ",") #Тогда - // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. - НеверныйВидДоступа: "#Параметр(45)" - "При проверке таблицы значения доступа можно указывать только один вид доступа" - #ИначеЕсли СтрСодержит(&ВидыДоступаСОднойГруппойДляЗначенияДоступа, ",#Параметр(45),") #Тогда - ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА - ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - ГДЕ - Значения.ГруппаДоступа = ГруппыДоступа.Ссылка - И Значения.ЗначениеДоступа = Т.ГруппаДоступа - #Иначе // Значения доступа, для которых можно указать несколько групп значений доступа. - ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА - ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - ВНУТРЕННЕЕ СОЕДИНЕНИЕ #Параметр(1).ГруппыДоступа КАК ГруппыЗначений - ПО - Значения.ГруппаДоступа = ГруппыДоступа.Ссылка - И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа - И ГруппыЗначений.Ссылка = #Параметр(46) - #КонецЕсли - #Иначе - ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА - ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений - ПО - Значения.ГруппаДоступа = ГруппыДоступа.Ссылка - И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа - И ГруппыЗначений.ЗначениеДоступа = #Параметр(46) - #КонецЕсли - ) - ТОГДА ИСТИНА - ИНАЧЕ ЛОЖЬ - КОНЕЦ - = - ВЫБОР - КОГДА ИСТИНА В - ( - ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА - ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию - ГДЕ - ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(#Параметр(46)) - И ЗначенияПоУмолчанию.ВсеРазрешены = ЛОЖЬ - ) - ТОГДА ИСТИНА - ИНАЧЕ ЛОЖЬ - КОНЕЦ - ) - ) -#Иначе - ИСТИНА -#КонецЕсли - - #Параметр(47) // [)[)][)]...] [ИЛИ|И] [([(][(]...] оператор И/ИЛИ с/без скобок. - -//// Проверка значения поля группы параметров 15. -#Если "#Параметр(48)" = "" И "#Параметр(49)" = "" #Тогда - // Группа параметров не используется. -#ИначеЕсли "#Параметр(48)" = "Условие" Или "#Параметр(48)" = "" #Тогда - // Когда имя вида доступа "Условие" (или ""), тогда вместо имени поля задано условие. - ( #Параметр(49) ) -#ИначеЕсли "#Параметр(48)" = "ПравоЧтения" Или "#Параметр(48)" = "ПравоИзменения" #Тогда - #Параметр(49) <> НЕОПРЕДЕЛЕНО - И ИСТИНА В - ( // Проверка права пользователя на таблицу Значения, установленного в поле. - ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА - ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава - ГДЕ - ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(49)) - #Если Не "#Параметр(48)" = "ПравоЧтения" #Тогда - И ТаблицыГруппДоступаПроверкаПрава.Изменение - #КонецЕсли - ) -#ИначеЕсли "#Параметр(48)" = "НастройкиПрав" #Тогда - - ( - ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено - ( - ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА - ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек - ПО - НаследованиеНастроек.Объект = #Параметр(49) - И НастройкиПрав.Объект = НаследованиеНастроек.Родитель - #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда - И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияЧтения - #Иначе - #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда - И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка - #Иначе - И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) - #КонецЕсли - И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения - #КонецЕсли - ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей - ПО - СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь - И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь - ) - И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. - ( - ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ - ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек - ПО - НаследованиеНастроек.Объект = #Параметр(49) - И НастройкиПрав.Объект = НаследованиеНастроек.Родитель - #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда - И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияЧтения - #Иначе - #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда - И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка - #Иначе - И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) - #КонецЕсли - И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения - #КонецЕсли - ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей - ПО - СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь - И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь - ) - ) -#ИначеЕсли Не СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(48),") #Тогда - // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. - #Если СтрСодержит("#Параметр(48)", ",") #Тогда - НеверныйВидДоступа: "#Параметр(48)" - "Список имен видов доступа не найден" - #Иначе - НеверныйВидДоступа: "#Параметр(48)" - "Имя вида доступа не найдено" - #КонецЕсли -#ИначеЕсли &ВидыДоступаСОтключеннымИспользованием <> "Все" - И Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(48),") #Тогда - - ( - ЕСТЬNULL(#Параметр(49), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО - И - #Если (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(48),", ",Пользователи,")) - Или (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(48),", ",ВнешниеПользователи,")) #Тогда - НЕ - ( - НЕ ИСТИНА В - ( - ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА - ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа - ГДЕ - ГруппыЗначенийДоступа.ЗначениеДоступа = #Параметр(49) - И ГруппыЗначенийДоступа.ГруппаЗначенийДоступа = &АвторизованныйПользователь - ) - И НЕ - #Иначе - ( - #КонецЕсли - ВЫБОР - КОГДА ИСТИНА В - ( - #Если СтрСодержит(&ВидыДоступаБезГруппДляЗначенияДоступа, ",#Параметр(48),") #Тогда - ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА - ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - ГДЕ - Значения.ГруппаДоступа = ГруппыДоступа.Ссылка - И Значения.ЗначениеДоступа = #Параметр(49) - #ИначеЕсли "#Параметр(49)" = "Т.Ссылка" #Тогда - #Если СтрСодержит("#Параметр(48)", ",") #Тогда - // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. - НеверныйВидДоступа: "#Параметр(48)" - "При проверке таблицы значения доступа можно указывать только один вид доступа" - #ИначеЕсли СтрСодержит(&ВидыДоступаСОднойГруппойДляЗначенияДоступа, ",#Параметр(48),") #Тогда - ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА - ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - ГДЕ - Значения.ГруппаДоступа = ГруппыДоступа.Ссылка - И Значения.ЗначениеДоступа = Т.ГруппаДоступа - #Иначе // Значения доступа, для которых можно указать несколько групп значений доступа. - ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА - ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - ВНУТРЕННЕЕ СОЕДИНЕНИЕ #Параметр(1).ГруппыДоступа КАК ГруппыЗначений - ПО - Значения.ГруппаДоступа = ГруппыДоступа.Ссылка - И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа - И ГруппыЗначений.Ссылка = #Параметр(49) - #КонецЕсли - #Иначе - ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА - ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений - ПО - Значения.ГруппаДоступа = ГруппыДоступа.Ссылка - И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа - И ГруппыЗначений.ЗначениеДоступа = #Параметр(49) - #КонецЕсли - ) - ТОГДА ИСТИНА - ИНАЧЕ ЛОЖЬ - КОНЕЦ - = - ВЫБОР - КОГДА ИСТИНА В - ( - ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА - ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию - ГДЕ - ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(#Параметр(49)) - И ЗначенияПоУмолчанию.ВсеРазрешены = ЛОЖЬ - ) - ТОГДА ИСТИНА - ИНАЧЕ ЛОЖЬ - КОНЕЦ - ) - ) -#Иначе - ИСТИНА -#КонецЕсли - - #Параметр(50) // [)[)][)]...] [ИЛИ|И] [([(][(]...] оператор И/ИЛИ с/без скобок. - -//// Проверка значения поля группы параметров 16. -#Если "#Параметр(51)" = "" И "#Параметр(52)" = "" #Тогда - // Группа параметров не используется. -#ИначеЕсли "#Параметр(51)" = "Условие" Или "#Параметр(51)" = "" #Тогда - // Когда имя вида доступа "Условие" (или ""), тогда вместо имени поля задано условие. - ( #Параметр(52) ) -#ИначеЕсли "#Параметр(51)" = "ПравоЧтения" Или "#Параметр(51)" = "ПравоИзменения" #Тогда - #Параметр(52) <> НЕОПРЕДЕЛЕНО - И ИСТИНА В - ( // Проверка права пользователя на таблицу Значения, установленного в поле. - ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА - ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава - ГДЕ - ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(52)) - #Если Не "#Параметр(51)" = "ПравоЧтения" #Тогда - И ТаблицыГруппДоступаПроверкаПрава.Изменение - #КонецЕсли - ) -#ИначеЕсли "#Параметр(51)" = "НастройкиПрав" #Тогда - - ( - ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено - ( - ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА - ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек - ПО - НаследованиеНастроек.Объект = #Параметр(52) - И НастройкиПрав.Объект = НаследованиеНастроек.Родитель - #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда - И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияЧтения - #Иначе - #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда - И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка - #Иначе - И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) - #КонецЕсли - И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения - #КонецЕсли - ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей - ПО - СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь - И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь - ) - И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. - ( - ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ - ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав - ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек - ПО - НаследованиеНастроек.Объект = #Параметр(52) - И НастройкиПрав.Объект = НаследованиеНастроек.Родитель - #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда - И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияЧтения - #Иначе - #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда - И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка - #Иначе - И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) - #КонецЕсли - И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения - #КонецЕсли - ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей - ПО - СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь - И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь - ) - ) -#ИначеЕсли Не СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(51),") #Тогда - // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. - #Если СтрСодержит("#Параметр(51)", ",") #Тогда - НеверныйВидДоступа: "#Параметр(51)" - "Список имен видов доступа не найден" - #Иначе - НеверныйВидДоступа: "#Параметр(51)" - "Имя вида доступа не найдено" - #КонецЕсли -#ИначеЕсли &ВидыДоступаСОтключеннымИспользованием <> "Все" - И Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(51),") #Тогда - - ( - ЕСТЬNULL(#Параметр(52), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО - И - #Если (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(51),", ",Пользователи,")) - Или (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(51),", ",ВнешниеПользователи,")) #Тогда - НЕ - ( - НЕ ИСТИНА В - ( - ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА - ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа - ГДЕ - ГруппыЗначенийДоступа.ЗначениеДоступа = #Параметр(52) - И ГруппыЗначенийДоступа.ГруппаЗначенийДоступа = &АвторизованныйПользователь - ) - И НЕ - #Иначе - ( - #КонецЕсли - ВЫБОР - КОГДА ИСТИНА В - ( - #Если СтрСодержит(&ВидыДоступаБезГруппДляЗначенияДоступа, ",#Параметр(51),") #Тогда - ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА - ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - ГДЕ - Значения.ГруппаДоступа = ГруппыДоступа.Ссылка - И Значения.ЗначениеДоступа = #Параметр(52) - #ИначеЕсли "#Параметр(52)" = "Т.Ссылка" #Тогда - #Если СтрСодержит("#Параметр(51)", ",") #Тогда - // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. - НеверныйВидДоступа: "#Параметр(51)" - "При проверке таблицы значения доступа можно указывать только один вид доступа" - #ИначеЕсли СтрСодержит(&ВидыДоступаСОднойГруппойДляЗначенияДоступа, ",#Параметр(51),") #Тогда - ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА - ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - ГДЕ - Значения.ГруппаДоступа = ГруппыДоступа.Ссылка - И Значения.ЗначениеДоступа = Т.ГруппаДоступа - #Иначе // Значения доступа, для которых можно указать несколько групп значений доступа. - ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА - ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - ВНУТРЕННЕЕ СОЕДИНЕНИЕ #Параметр(1).ГруппыДоступа КАК ГруппыЗначений - ПО - Значения.ГруппаДоступа = ГруппыДоступа.Ссылка - И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа - И ГруппыЗначений.Ссылка = #Параметр(52) - #КонецЕсли - #Иначе - ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА - ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения - ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений - ПО - Значения.ГруппаДоступа = ГруппыДоступа.Ссылка - И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа - И ГруппыЗначений.ЗначениеДоступа = #Параметр(52) - #КонецЕсли - ) - ТОГДА ИСТИНА - ИНАЧЕ ЛОЖЬ - КОНЕЦ - = - ВЫБОР - КОГДА ИСТИНА В - ( - ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА - ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию - ГДЕ - ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка - И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(#Параметр(52)) - И ЗначенияПоУмолчанию.ВсеРазрешены = ЛОЖЬ - ) - ТОГДА ИСТИНА - ИНАЧЕ ЛОЖЬ - КОНЕЦ - ) - ) -#Иначе - ИСТИНА -#КонецЕсли - - #Параметр(53) // [)[)][)]...] [ИЛИ|И] [([(][(]...] оператор И/ИЛИ с/без скобок. - - ) -) -#КонецЕсли - diff --git a/SSL/src/Roles/БазовыеПраваВнешнегоПользователя/БазовыеПраваВнешнегоПользователя.mdo b/SSL/src/Roles/БазовыеПраваВнешнегоПользователя/БазовыеПраваВнешнегоПользователя.mdo new file mode 100644 index 000000000..a2130bba4 --- /dev/null +++ b/SSL/src/Roles/БазовыеПраваВнешнегоПользователя/БазовыеПраваВнешнегоПользователя.mdo @@ -0,0 +1,9 @@ + + + БазовыеПраваВнешнегоПользователя + + ru + Базовые права внешнего пользователя + + Это базовые права БСП, которые должны быть у любого внешнего пользователя + diff --git a/SSL/src/Roles/ВыводНаПринтерФайлБуферОбмена/Rights.rights b/SSL/src/Roles/ВыводНаПринтерФайлБуферОбмена/Rights.rights index 62669c15b..d51e9cb8e 100644 --- a/SSL/src/Roles/ВыводНаПринтерФайлБуферОбмена/Rights.rights +++ b/SSL/src/Roles/ВыводНаПринтерФайлБуферОбмена/Rights.rights @@ -950,7 +950,7 @@ - Catalog.УчетныеЗаписиЭлектроннойПочты.Attribute.Пароль + Catalog.УчетныеЗаписиЭлектроннойПочты.Attribute.УдалитьПароль View false @@ -1576,37 +1576,6 @@ false - - Configuration.БиблиотекаСтандартныхПодсистем - - MainWindowModeNormal - true - - - MainWindowModeWorkplace - true - - - MainWindowModeEmbeddedWorkplace - true - - - MainWindowModeFullscreenWorkplace - true - - - MainWindowModeKiosk - true - - - AnalyticsSystemClient - true - - - Output - true - - InformationRegister.ПользовательскиеМакетыПечати.Dimension.Объект @@ -1663,7 +1632,7 @@ - Catalog.УчетныеЗаписиЭлектроннойПочты.Attribute.ПарольSMTP + Catalog.УчетныеЗаписиЭлектроннойПочты.Attribute.УдалитьПарольSMTP View false @@ -2124,6 +2093,37 @@ false + + Configuration.БиблиотекаСтандартныхПодсистем + + MainWindowModeNormal + true + + + MainWindowModeWorkplace + true + + + MainWindowModeEmbeddedWorkplace + true + + + MainWindowModeFullscreenWorkplace + true + + + MainWindowModeKiosk + true + + + AnalyticsSystemClient + true + + + Output + true + + Document.НазначениеОпросов.Attribute.ВозможностьПредварительногоСохранения @@ -3225,7 +3225,7 @@ - DataProcessor.ОбновлениеКонфигурации.Attribute.ИсточникОбновления + DataProcessor.ПоискИУстановкаОбновлений.Attribute.ИсточникОбновления View false @@ -3324,7 +3324,7 @@ - DataProcessor.ОбновлениеКонфигурации.TabularSection.ДоступныеОбновления.Attribute.Версия2Разряд + DataProcessor.ПоискИУстановкаОбновлений.TabularSection.ДоступныеОбновления.Attribute.Версия2Разряд View false @@ -3346,7 +3346,7 @@ - DataProcessor.ОбновлениеКонфигурации.Attribute.РезультатОбновления + DataProcessor.ПоискИУстановкаОбновлений.Attribute.РезультатОбновления View false @@ -3621,7 +3621,7 @@ - DataProcessor.ОбновлениеКонфигурации.Attribute.КодПользователяСервераОбновлений + DataProcessor.ПоискИУстановкаОбновлений.Attribute.КодПользователяСервераОбновлений View false @@ -4050,7 +4050,7 @@ - DataProcessor.ОбновлениеКонфигурации.TabularSection.ДоступныеОбновления.Attribute.ФайлОбновления + DataProcessor.ПоискИУстановкаОбновлений.TabularSection.ДоступныеОбновления.Attribute.ФайлОбновления View false @@ -4171,7 +4171,7 @@ - DataProcessor.ОбновлениеКонфигурации.Attribute.КодЗадачиПланировщика + DataProcessor.ПоискИУстановкаОбновлений.Attribute.КодЗадачиПланировщика View false @@ -4919,7 +4919,7 @@ - DataProcessor.ОбновлениеКонфигурации.TabularSection.ДоступныеОбновления.Attribute.НомерДискаИТС + DataProcessor.ПоискИУстановкаОбновлений.TabularSection.ДоступныеОбновления.Attribute.НомерДискаИТС View false @@ -5084,7 +5084,7 @@ - DataProcessor.ОбновлениеКонфигурации.TabularSection.ДоступныеОбновления + DataProcessor.ПоискИУстановкаОбновлений.TabularSection.ДоступныеОбновления View false @@ -6151,7 +6151,7 @@ - DataProcessor.ОбновлениеКонфигурации.Attribute.ДатаВремяОбновления + DataProcessor.ПоискИУстановкаОбновлений.Attribute.ДатаВремяОбновления View false @@ -6162,7 +6162,7 @@ - DataProcessor.ПомощникСозданияОбменаДанными.Attribute.ИмяФайлаНастроекОбменаДаннымиДляЗагрузки + DataProcessor.ПомощникСозданияОбменаДанными.Attribute.ИмяФайлаНастроекСинхронизацииДанныхДляЗагрузки View false @@ -6557,17 +6557,6 @@ false - - InformationRegister.НазначениеДополнительныхОбработок.Resource.ИспользоватьПечатныеФормы - - View - false - - - Edit - false - - Catalog.СценарииОбменовДанными.TabularSection.НастройкиОбмена.Attribute.УзелИнформационнойБазы @@ -7273,7 +7262,7 @@ - DataProcessor.ОбновлениеКонфигурации.Attribute.РежимОбновления + DataProcessor.ПоискИУстановкаОбновлений.Attribute.РежимОбновления View false @@ -7801,7 +7790,7 @@ - DataProcessor.ПомощникСозданияОбменаДанными.Attribute.ИмяФайлаНастроекОбменаДанными + DataProcessor.ПомощникСозданияОбменаДанными.Attribute.ИмяФайлаНастроекСинхронизацииДанных View false @@ -8560,7 +8549,7 @@ - DataProcessor.ОбновлениеКонфигурации.Attribute.ИспользоватьРасписаниеДляПроверкиОбновления + DataProcessor.ПоискИУстановкаОбновлений.Attribute.ИспользоватьРасписаниеДляПроверкиОбновления View false @@ -8571,7 +8560,7 @@ - DataProcessor.ОбновлениеКонфигурации.Attribute.ЗапомнитьПарольСервераОбновлений + DataProcessor.ПоискИУстановкаОбновлений.Attribute.ЗапомнитьПарольСервераОбновлений View false @@ -8945,7 +8934,7 @@ - DataProcessor.ОбновлениеКонфигурации.Attribute.ВосстанавливатьИнформационнуюБазу + DataProcessor.ПоискИУстановкаОбновлений.Attribute.ВосстанавливатьИнформационнуюБазу View false @@ -8989,7 +8978,7 @@ - DataProcessor.ОбновлениеКонфигурации.TabularSection.ДоступныеОбновления.Attribute.ПутьКЛокальномуФайлуОбновления + DataProcessor.ПоискИУстановкаОбновлений.TabularSection.ДоступныеОбновления.Attribute.ПутьКЛокальномуФайлуОбновления View false @@ -9693,7 +9682,7 @@ - DataProcessor.ОбновлениеКонфигурации.Attribute.ИмяКаталогаРезервнойКопииИБ + DataProcessor.ПоискИУстановкаОбновлений.Attribute.ИмяКаталогаРезервнойКопииИБ View false @@ -10100,7 +10089,7 @@ - DataProcessor.ОбновлениеКонфигурации.Attribute.ИмяФайлаОбновления + DataProcessor.ПоискИУстановкаОбновлений.Attribute.ИмяФайлаОбновления View false @@ -10573,7 +10562,7 @@ - DataProcessor.ОбновлениеКонфигурации.TabularSection.ДоступныеОбновления.Attribute.РазмерФайлаОбновления + DataProcessor.ПоискИУстановкаОбновлений.TabularSection.ДоступныеОбновления.Attribute.РазмерФайлаОбновления View false @@ -10683,7 +10672,7 @@ - DataProcessor.ОбновлениеКонфигурации.Attribute.РасписаниеПроверкиНаличияОбновления + DataProcessor.ПоискИУстановкаОбновлений.Attribute.РасписаниеПроверкиНаличияОбновления View false @@ -10958,7 +10947,7 @@ - DataProcessor.ОбновлениеКонфигурации.TabularSection.ДоступныеОбновления.Attribute.ВерсияДляОбновления + DataProcessor.ПоискИУстановкаОбновлений.TabularSection.ДоступныеОбновления.Attribute.ВерсияДляОбновления View false @@ -11178,7 +11167,7 @@ - Catalog.ГруппыВнешнихПользователей.Attribute.ТипОбъектовАвторизации + Catalog.ГруппыВнешнихПользователей.Attribute.УдалитьТипОбъектовАвторизации View false @@ -11266,7 +11255,7 @@ - DataProcessor.ОбновлениеКонфигурации.TabularSection.ДоступныеОбновления.Attribute.Версия4Разряд + DataProcessor.ПоискИУстановкаОбновлений.TabularSection.ДоступныеОбновления.Attribute.Версия4Разряд View false @@ -11541,7 +11530,7 @@ - DataProcessor.ОбновлениеКонфигурации.Attribute.ПовторныйЗапуск + DataProcessor.ПоискИУстановкаОбновлений.Attribute.ПовторныйЗапуск View false @@ -11574,7 +11563,7 @@ - InformationRegister.НастройкиТранспортаОбмена.Resource.ПарольАрхиваСообщенияОбмена + InformationRegister.НастройкиТранспортаОбмена.Resource.УдалитьПарольАрхиваСообщенияОбмена View false @@ -11860,7 +11849,7 @@ - DataProcessor.ОбновлениеКонфигурации.TabularSection.ДоступныеОбновления.Attribute.ЛокальныйОтносительныйКаталог + DataProcessor.ПоискИУстановкаОбновлений.TabularSection.ДоступныеОбновления.Attribute.ЛокальныйОтносительныйКаталог View false @@ -11904,7 +11893,7 @@ - DataProcessor.ОбновлениеКонфигурации.Attribute.ТехническаяИнформацияОбОшибке + DataProcessor.ПоискИУстановкаОбновлений.Attribute.ТехническаяИнформацияОбОшибке View false @@ -11970,7 +11959,7 @@ - DataProcessor.ОбновлениеКонфигурации.TabularSection.ДоступныеОбновления.Attribute.Версия1Разряд + DataProcessor.ПоискИУстановкаОбновлений.TabularSection.ДоступныеОбновления.Attribute.Версия1Разряд View false @@ -12212,7 +12201,7 @@ - DataProcessor.ОбновлениеКонфигурации.Attribute.ПарольСервераОбновлений + DataProcessor.ПоискИУстановкаОбновлений.Attribute.ПарольСервераОбновлений View false @@ -13235,7 +13224,7 @@ - DataProcessor.ОбновлениеКонфигурации.TabularSection.ДоступныеОбновления.Attribute.Версия3Разряд + DataProcessor.ПоискИУстановкаОбновлений.TabularSection.ДоступныеОбновления.Attribute.Версия3Разряд View false @@ -13444,7 +13433,7 @@ - InformationRegister.НастройкиТранспортаОбмена.Resource.FTPСоединениеПароль + InformationRegister.НастройкиТранспортаОбмена.Resource.УдалитьFTPСоединениеПароль View false @@ -13598,7 +13587,7 @@ - DataProcessor.ОбновлениеКонфигурации.Attribute.НуженФайлОбновления + DataProcessor.ПоискИУстановкаОбновлений.Attribute.НуженФайлОбновления View false @@ -13796,7 +13785,7 @@ - DataProcessor.ОбновлениеКонфигурации.Attribute.АдресЭлектроннойПочты + DataProcessor.ПоискИУстановкаОбновлений.Attribute.АдресЭлектроннойПочты View false @@ -14379,7 +14368,7 @@ - DataProcessor.ОбновлениеКонфигурации.Attribute.ПроверятьНаличиеОбновленияПриЗапуске + DataProcessor.ПоискИУстановкаОбновлений.Attribute.ПроверятьНаличиеОбновленияПриЗапуске View false @@ -14929,7 +14918,7 @@ - DataProcessor.ОбновлениеКонфигурации.Attribute.ВыслатьОтчетНаПочту + DataProcessor.ПоискИУстановкаОбновлений.Attribute.ВыслатьОтчетНаПочту View false @@ -15116,7 +15105,7 @@ - DataProcessor.ОбновлениеКонфигурации.TabularSection.ДоступныеОбновления.Attribute.Версия + DataProcessor.ПоискИУстановкаОбновлений.TabularSection.ДоступныеОбновления.Attribute.Версия View false @@ -15314,7 +15303,7 @@ - DataProcessor.ОбновлениеКонфигурации.Attribute.СоздаватьРезервнуюКопию + DataProcessor.ПоискИУстановкаОбновлений.Attribute.СоздаватьРезервнуюКопию View false @@ -15457,7 +15446,7 @@ - DataProcessor.ОбновлениеКонфигурации.TabularSection.ДоступныеОбновления.Attribute.ПутьКЛокальномуФайлу + DataProcessor.ПоискИУстановкаОбновлений.TabularSection.ДоступныеОбновления.Attribute.ПутьКЛокальномуФайлу View false @@ -15633,7 +15622,7 @@ - DataProcessor.ОбновлениеКонфигурации.TabularSection.ДоступныеОбновления.Attribute.ПутьКФайлуОбновления + DataProcessor.ПоискИУстановкаОбновлений.TabularSection.ДоступныеОбновления.Attribute.ПутьКФайлуОбновления View false @@ -15720,17 +15709,6 @@ false - - Catalog.ГруппыДоступа.Attribute.ТипПользователей - - View - false - - - Edit - false - - Catalog.ЗапланированноеВзаимодействиеПрисоединенныеФайлы.TabularSection.ЭлектронныеПодписи.Attribute.Комментарий @@ -15809,7 +15787,7 @@ - DataProcessor.ОбновлениеКонфигурации.TabularSection.ДоступныеОбновления.Attribute.Поставщик + DataProcessor.ПоискИУстановкаОбновлений.TabularSection.ДоступныеОбновления.Attribute.Поставщик View false @@ -15820,7 +15798,7 @@ - DataProcessor.ОбновлениеКонфигурации.TabularSection.ДоступныеОбновления.Attribute.Конфигурация + DataProcessor.ПоискИУстановкаОбновлений.TabularSection.ДоступныеОбновления.Attribute.Конфигурация View false diff --git a/SSL/src/Roles/ВыполнениеСинхронизацииДанных/Rights.rights b/SSL/src/Roles/ВыполнениеСинхронизацииДанных/Rights.rights index b749bf852..7c4edbff6 100644 --- a/SSL/src/Roles/ВыполнениеСинхронизацииДанных/Rights.rights +++ b/SSL/src/Roles/ВыполнениеСинхронизацииДанных/Rights.rights @@ -159,7 +159,7 @@ - CommonCommand.ОткрытьСценарииОбменовДанными + CommonCommand.СценарииСинхронизации View true @@ -231,14 +231,14 @@ - CommonCommand.ОткрытьОбменыДанными + CommonCommand.СинхронизацияДанных View true - CommonCommand.ВыполнитьОбменДаннымиИнтерактивно + CommonCommand.СинхронизироватьСДополнительнымиПараметрами View true @@ -340,7 +340,7 @@ - CommonCommand.ВыполнитьОбменДанными + CommonCommand.Синхронизировать View true @@ -408,6 +408,13 @@ false + + WebService.EnterpriseDataUpload_1_0_1_1.Operation.PutData + + Use + true + + DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.НеВыводитьНикакихИнформационныхСообщенийПользователю @@ -419,6 +426,13 @@ false + + WebService.EnterpriseDataExchange_1_0_1_1.Operation.GetDataPart + + Use + true + + WebService.Exchange_2_0_1_6.Operation.SaveFileFromParts @@ -504,7 +518,7 @@ - CommonCommand.ПерейтиВЖурналРегистрацииСобытийВыгрузкиДанных + CommonCommand.СобытияОтправки View true @@ -535,6 +549,20 @@ false + + WebService.EnterpriseDataUpload_1_0_1_1.Operation.TestConnection + + Use + true + + + + WebService.EnterpriseDataExchange_1_0_1_1.Operation.ConfirmGettingFile + + Use + true + + DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.ТаблицаНастройкиПараметров @@ -669,6 +697,13 @@ false + + WebService.EnterpriseDataUpload_1_0_1_1.Operation.PutDataActionResult + + Use + true + + DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.ОбрезатьСтрокиСправа @@ -786,6 +821,13 @@ false + + WebService.EnterpriseDataUpload_1_0_1_1.Operation.Ping + + Use + true + + WebService.Exchange_2_0_1_6.Operation.UploadData @@ -848,6 +890,13 @@ false + + WebService.EnterpriseDataUpload_1_0_1_1.Operation.PutFilePart + + Use + true + + DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.РежимОтладкиАлгоритмов @@ -901,7 +950,14 @@ - CommonForm.ОбменыДанными + WebService.EnterpriseDataExchange_1_0_1_1.Operation.TestConnection + + Use + true + + + + CommonForm.СинхронизацияДанных View true @@ -932,6 +988,13 @@ true + + WebService.EnterpriseDataExchange_1_0_1_1.Operation.PrepareDataForGetting + + Use + true + + DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.ОбработчикиСобытийЧитаемИзФайлаПравилОбмена @@ -997,6 +1060,13 @@ true + + WebService.EnterpriseDataExchange_1_0_1_1.Operation.PutDataActionResult + + Use + true + + DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.КомментарийПриЗагрузкеДанных @@ -1030,6 +1100,13 @@ false + + WebService.EnterpriseDataExchange_1_0_1_1.Operation.PrepareDataActionResult + + Use + true + + DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.ПарольДляСжатияФайлаОбмена @@ -1042,7 +1119,7 @@ - CommonCommand.ОткрытьРезультатыОбменаДанными + CommonCommand.ПредупрежденияПриСинхронизацииДанных View true @@ -1059,6 +1136,13 @@ false + + WebService.EnterpriseDataExchange_1_0_1_1.Operation.Ping + + Use + true + + DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.ИмяВременногоФайлаОбработчиковСобытий @@ -1070,6 +1154,20 @@ false + + WebService.EnterpriseDataExchange_1_0_1_1.Operation.PutData + + Use + true + + + + WebService.EnterpriseDataExchange_1_0_1_1.Operation.PutFilePart + + Use + true + + DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.НастройкаАвтоматическойЗагрузкиДанных @@ -1140,7 +1238,7 @@ - CommonCommand.ПерейтиВЖурналРегистрацииСобытийЗагрузкиДанных + CommonCommand.СобытияПолучения View true diff --git a/SSL/src/Roles/ЧтениеОбщейБазовойНСИ/Rights.rights b/SSL/src/Roles/ДобавлениеИзменениеАдресныхСведений/Rights.rights similarity index 68% rename from SSL/src/Roles/ЧтениеОбщейБазовойНСИ/Rights.rights rename to SSL/src/Roles/ДобавлениеИзменениеАдресныхСведений/Rights.rights index dbf6f4ade..7da5d5f5f 100644 --- a/SSL/src/Roles/ЧтениеОбщейБазовойНСИ/Rights.rights +++ b/SSL/src/Roles/ДобавлениеИзменениеАдресныхСведений/Rights.rights @@ -9,10 +9,22 @@ Read true + + Update + true + View true + + Edit + true + + + TotalsControl + true + InformationRegister.ДомаЗданияСтроения @@ -21,20 +33,21 @@ true - View - true - - - - InformationRegister.УдалитьАдресныйКлассификатор - - Read + Update true View true + + Edit + true + + + TotalsControl + true + InformationRegister.ПричиныИзмененияАдресныхСведений @@ -43,20 +56,21 @@ true - View - true - - - - InformationRegister.ДанныеПроизводственногоКалендаря - - Read + Update true View true + + Edit + true + + + TotalsControl + true + InformationRegister.ДополнительныеАдресныеСведения @@ -64,10 +78,22 @@ Read true + + Update + true + View true + + Edit + true + + + TotalsControl + true + InformationRegister.ОриентирыАдресныхОбъектов @@ -76,14 +102,7 @@ true - View - true - - - - Catalog.ПроизводственныеКалендари - - Read + Update true @@ -91,22 +110,11 @@ true - InputByString - true - - - - Catalog.КлассификаторБанковРФ - - Read + Edit true - View - true - - - InputByString + TotalsControl true @@ -116,15 +124,20 @@ Read true + + Update + true + View true - - - WebService.AddressSystem.Operation.Analyze - Use + Edit + true + + + TotalsControl true @@ -134,10 +147,22 @@ Read true + + Update + true + View true + + Edit + true + + + TotalsControl + true + InformationRegister.АдресныеОбъекты @@ -145,10 +170,22 @@ Read true + + Update + true + View true + + Edit + true + + + TotalsControl + true + InformationRegister.ЗагруженныеВерсииАдресныхСведений @@ -156,9 +193,21 @@ Read true + + Update + true + View true + + Edit + true + + + TotalsControl + true + diff --git a/SSL/src/Roles/ДобавлениеИзменениеАдресныхСведений/ДобавлениеИзменениеАдресныхСведений.mdo b/SSL/src/Roles/ДобавлениеИзменениеАдресныхСведений/ДобавлениеИзменениеАдресныхСведений.mdo new file mode 100644 index 000000000..d2c2e2bc0 --- /dev/null +++ b/SSL/src/Roles/ДобавлениеИзменениеАдресныхСведений/ДобавлениеИзменениеАдресныхСведений.mdo @@ -0,0 +1,8 @@ + + + ДобавлениеИзменениеАдресныхСведений + + ru + Добавление и изменение адресных сведений + + diff --git a/SSL/src/Roles/ДобавлениеИзменениеБазовойНСИ/Rights.rights b/SSL/src/Roles/ДобавлениеИзменениеБазовойНСИ/Rights.rights deleted file mode 100644 index 39d4bc9e4..000000000 --- a/SSL/src/Roles/ДобавлениеИзменениеБазовойНСИ/Rights.rights +++ /dev/null @@ -1,1115 +0,0 @@ - - - false - true - false - - Catalog.НаборыДополнительныхРеквизитовИСведений - - Read - true - - - Insert - true - - - Update - true - - - View - true - - - InteractiveInsert - true - - - Edit - true - - - InteractiveSetDeletionMark - true - - - InteractiveClearDeletionMark - true - - - InputByString - true - - - - InformationRegister.СлужебныеАдресныеСведения - - Read - true - - - View - true - - - - CommonCommand.ПраваДоступа - - View - true - - - - ChartOfCharacteristicTypes.ДополнительныеРеквизитыИСведения - - Read - true - - - Insert - true - - - Update - true - - - View - true - - - InteractiveInsert - true - - - Edit - true - - - InteractiveSetDeletionMark - true - - - InteractiveClearDeletionMark - true - - - InputByString - true - - - - InformationRegister.КурсыВалют - - Read - true - - - Update - true - - - View - true - - - Edit - true - - - TotalsControl - true - - - - InformationRegister.УдалитьАдресныйКлассификатор.Resource.Наименование - - Edit - false - - - - InformationRegister.ДомаЗданияСтроения - - Read - true - - - View - true - - - - InformationRegister.КалендарныеГрафики - - Read - true - - - Update - true - - - View - true - - - Edit - true - - - TotalsControl - true - - - - Catalog.Календари - - Read - true - - - Insert - true - - - Update - true - - - View - true - - - InteractiveInsert - true - - - Edit - true - - - InteractiveSetDeletionMark - true - - - InteractiveClearDeletionMark - true - - - InputByString - true - - - - Catalog.Валюты - - Read - true - - - Insert - true - - - Update - true - - - View - true - - - InteractiveInsert - true - - - Edit - true - - - InteractiveSetDeletionMark - true - - - InteractiveClearDeletionMark - true - - - InputByString - true - - - - Catalog.СтраныМира.Attribute.КодАльфа2 - - Edit - false - - - - Catalog.Организации.TabularSection.КонтактнаяИнформация - - View - false - - - Edit - false - - - - InformationRegister.УдалитьАдресныйКлассификатор.Dimension.ТипАдресногоЭлемента - - Edit - false - - - - Catalog.КлассификаторБанковРФ.Command.КлассификаторБанковРФ - - View - true - - - - CommonForm.ПраваДоступаУпрощенно - - View - true - - - - Catalog.Организации.TabularSection.КонтактнаяИнформация.Attribute.ЗначенияПолей - - View - false - - - Edit - false - - - - InformationRegister.УдалитьАдресныйКлассификатор - - Read - true - - - View - true - - - - InformationRegister.УдалитьАдресныйКлассификатор.StandardAttribute.Active - - Edit - false - - - - InformationRegister.УдалитьАдресныйКлассификатор.StandardAttribute.LineNumber - - Edit - false - - - - InformationRegister.УдалитьАдресныйКлассификатор.StandardAttribute.Recorder - - Edit - false - - - - InformationRegister.УдалитьАдресныйКлассификатор.StandardAttribute.Period - - Edit - false - - - - Catalog.Организации.TabularSection.КонтактнаяИнформация.Attribute.Город - - View - false - - - Edit - false - - - - InformationRegister.ПричиныИзмененияАдресныхСведений - - Read - true - - - View - true - - - - InformationRegister.УдалитьАдресныйКлассификатор.Resource.АльтернативныеНазвания - - Edit - false - - - - Catalog.УчетныеЗаписиЭлектроннойПочты.Command.ПроверитьУчетнуюЗапись - - View - true - - - - Catalog.Пользователи - - Read - true - - - View - true - - - InputByString - true - - - - DataProcessor.ВводКонтактнойИнформации - - Use - true - - - View - true - - - - Catalog.Организации.TabularSection.КонтактнаяИнформация.Attribute.ДоменноеИмяСервера - - View - false - - - Edit - false - - - - InformationRegister.ДополнительныеАдресныеСведения - - Read - true - - - View - true - - - - InformationRegister.ОриентирыАдресныхОбъектов - - Read - true - - - View - true - - - - CommonForm.ПраваДоступа - - View - true - - - - Catalog.Организации.TabularSection.КонтактнаяИнформация.Attribute.Представление - - View - false - - - Edit - false - - - - Catalog.ВидыКонтактнойИнформации - - Read - true - - - Insert - true - - - Update - true - - - View - true - - - InteractiveInsert - true - - - Edit - true - - - InteractiveSetDeletionMark - true - - - InteractiveClearDeletionMark - true - - - InputByString - true - - - - Catalog.СтраныМира - - Read - true - - - View - true - - - InputByString - true - - - - Catalog.СтраныМира.StandardAttribute.Predefined - - Edit - false - - - - Catalog.СтраныМира.StandardAttribute.Ref - - Edit - false - - - - Catalog.СтраныМира.StandardAttribute.DeletionMark - - Edit - false - - - - Catalog.СтраныМира.StandardAttribute.IsFolder - - Edit - false - - - - Catalog.СтраныМира.StandardAttribute.Owner - - Edit - false - - - - Catalog.СтраныМира.StandardAttribute.Parent - - Edit - false - - - - Catalog.СтраныМира.StandardAttribute.Description - - Edit - false - - - - Catalog.СтраныМира.StandardAttribute.Code - - Edit - false - - - - Catalog.Организации.TabularSection.КонтактнаяИнформация.Attribute.Тип - - View - false - - - Edit - false - - - - Catalog.Организации.Attribute.Префикс - - View - false - - - Edit - false - - - - Catalog.Организации.TabularSection.КонтактнаяИнформация.Attribute.Регион - - View - false - - - Edit - false - - - - InformationRegister.СоставыГруппПользователей - - Read - true - - - View - true - - - - InformationRegister.УдалитьАдресныйКлассификатор.Resource.Индекс - - Edit - false - - - - Report.ПраваДоступа - - Use - true - - - View - true - - - - InformationRegister.РучныеИзмененияГрафиковРаботы - - Read - true - - - Update - true - - - View - true - - - Edit - true - - - TotalsControl - true - - - - Catalog.ГруппыПользователей - - Read - true - - - View - true - - - InputByString - true - - - - Catalog.ЗначенияСвойствОбъектовИерархия - - Read - true - - - Insert - true - - - Update - true - - - View - true - - - InteractiveInsert - true - - - Edit - true - - - InteractiveSetDeletionMark - true - - - InteractiveClearDeletionMark - true - - - InputByString - true - - - - Catalog.Организации.TabularSection.КонтактнаяИнформация.Attribute.Вид - - View - false - - - Edit - false - - - - InformationRegister.УдалитьАдресныйКлассификатор.Dimension.Код - - Edit - false - - - - Catalog.ЗначенияСвойствОбъектов - - Read - true - - - Insert - true - - - Update - true - - - View - true - - - InteractiveInsert - true - - - Edit - true - - - InteractiveSetDeletionMark - true - - - InteractiveClearDeletionMark - true - - - InputByString - true - - - - InformationRegister.ИсторияАдресныхОбъектов - - Read - true - - - View - true - - - - WebService.AddressSystem.Operation.Analyze - - Use - true - - - - InformationRegister.УдалитьАдресныйКлассификатор.Dimension.КодГородаВКоде - - Edit - false - - - - Catalog.Организации.StandardAttribute.Predefined - - View - false - - - Edit - false - - - - Catalog.Организации.StandardAttribute.Ref - - View - false - - - Edit - false - - - - Catalog.Организации.StandardAttribute.DeletionMark - - View - false - - - Edit - false - - - - Catalog.Организации.StandardAttribute.IsFolder - - View - false - - - Edit - false - - - - Catalog.Организации.StandardAttribute.Owner - - View - false - - - Edit - false - - - - Catalog.Организации.StandardAttribute.Parent - - View - false - - - Edit - false - - - - Catalog.Организации.StandardAttribute.Description - - View - false - - - Edit - false - - - - Catalog.Организации.StandardAttribute.Code - - View - false - - - Edit - false - - - - InformationRegister.УдалитьАдресныйКлассификатор.Dimension.КодАдресногоОбъектаВКоде - - Edit - false - - - - InformationRegister.УдалитьАдресныйКлассификатор.Dimension.КодНаселенногоПунктаВКоде - - Edit - false - - - - InformationRegister.УровниСокращенийАдресныхСведений - - Read - true - - - View - true - - - - CommonCommand.ДополнительныеСведенияКоманднаяПанель - - View - true - - - - InformationRegister.УдалитьАдресныйКлассификатор.Dimension.КодУлицыВКоде - - Edit - false - - - - ChartOfCharacteristicTypes.УдалитьВидыДоступа.StandardAttribute.PredefinedDataName - - View - false - - - Edit - false - - - - ChartOfCharacteristicTypes.УдалитьВидыДоступа.StandardAttribute.ValueType - - View - false - - - Edit - false - - - - ChartOfCharacteristicTypes.УдалитьВидыДоступа.StandardAttribute.Description - - View - false - - - Edit - false - - - - ChartOfCharacteristicTypes.УдалитьВидыДоступа.StandardAttribute.Code - - View - false - - - Edit - false - - - - ChartOfCharacteristicTypes.УдалитьВидыДоступа.StandardAttribute.IsFolder - - View - false - - - Edit - false - - - - ChartOfCharacteristicTypes.УдалитьВидыДоступа.StandardAttribute.Parent - - View - false - - - Edit - false - - - - ChartOfCharacteristicTypes.УдалитьВидыДоступа.StandardAttribute.Predefined - - View - false - - - Edit - false - - - - ChartOfCharacteristicTypes.УдалитьВидыДоступа.StandardAttribute.DeletionMark - - View - false - - - Edit - false - - - - ChartOfCharacteristicTypes.УдалитьВидыДоступа.StandardAttribute.Ref - - View - false - - - Edit - false - - - - Catalog.СтраныМира.Attribute.КодАльфа3 - - Edit - false - - - - Catalog.Организации.TabularSection.КонтактнаяИнформация.Attribute.АдресЭП - - View - false - - - Edit - false - - - - Catalog.Организации.TabularSection.КонтактнаяИнформация.Attribute.Страна - - View - false - - - Edit - false - - - - InformationRegister.АдресныеОбъекты - - Read - true - - - View - true - - - - Catalog.Организации.TabularSection.КонтактнаяИнформация.Attribute.НомерТелефона - - View - false - - - Edit - false - - - - DataProcessor.ЗагрузкаКурсовВалют - - Use - true - - - View - true - - - - Catalog.Организации.TabularSection.КонтактнаяИнформация.Attribute.НомерТелефонаБезКодов - - View - false - - - Edit - false - - - - InformationRegister.УдалитьАдресныйКлассификатор.Resource.Сокращение - - Edit - false - - - - InformationRegister.УдалитьАдресныйКлассификатор.Dimension.КодРайонаВКоде - - Edit - false - - - - CommonForm.РедактированиеДополнительныхСведений - - View - true - - - - Catalog.СтраныМира.Attribute.НаименованиеПолное - - Edit - false - - - - InformationRegister.ЗагруженныеВерсииАдресныхСведений - - Read - true - - - View - true - - - diff --git a/SSL/src/Roles/ДобавлениеИзменениеБазовойНСИ/ДобавлениеИзменениеБазовойНСИ.mdo b/SSL/src/Roles/ДобавлениеИзменениеБазовойНСИ/ДобавлениеИзменениеБазовойНСИ.mdo deleted file mode 100644 index 9679e190b..000000000 --- a/SSL/src/Roles/ДобавлениеИзменениеБазовойНСИ/ДобавлениеИзменениеБазовойНСИ.mdo +++ /dev/null @@ -1,9 +0,0 @@ - - - ДобавлениеИзменениеБазовойНСИ - - ru - Добавление и изменение базовой нормативно-справочной информации - - Для администратора абонента - diff --git a/SSL/src/Roles/ДобавлениеИзменениеБанков/Rights.rights b/SSL/src/Roles/ДобавлениеИзменениеБанков/Rights.rights new file mode 100644 index 000000000..6e88569ac --- /dev/null +++ b/SSL/src/Roles/ДобавлениеИзменениеБанков/Rights.rights @@ -0,0 +1,52 @@ + + + false + true + false + + Catalog.КлассификаторБанковРФ.Command.КлассификаторБанковРФ + + View + true + + + + Catalog.КлассификаторБанковРФ + + Read + true + + + Insert + true + + + Update + true + + + View + true + + + InteractiveInsert + true + + + Edit + true + + + InteractiveSetDeletionMark + true + + + InteractiveClearDeletionMark + true + + + InputByString + true + + + diff --git a/SSL/src/Roles/ДобавлениеИзменениеБанков/ДобавлениеИзменениеБанков.mdo b/SSL/src/Roles/ДобавлениеИзменениеБанков/ДобавлениеИзменениеБанков.mdo new file mode 100644 index 000000000..bf561fed1 --- /dev/null +++ b/SSL/src/Roles/ДобавлениеИзменениеБанков/ДобавлениеИзменениеБанков.mdo @@ -0,0 +1,8 @@ + + + ДобавлениеИзменениеБанков + + ru + Добавление и изменение банков + + diff --git a/SSL/src/Roles/ДобавлениеИзменениеВариантовОтчетов/Rights.rights b/SSL/src/Roles/ДобавлениеИзменениеВариантовОтчетов/Rights.rights index 97ff21153..b0ca8ac10 100644 --- a/SSL/src/Roles/ДобавлениеИзменениеВариантовОтчетов/Rights.rights +++ b/SSL/src/Roles/ДобавлениеИзменениеВариантовОтчетов/Rights.rights @@ -49,6 +49,13 @@ true + + InformationRegister.ПредопределенныеВариантыОтчетовВерсийРасширений.Dimension.Отчет + + Edit + false + + CommonForm.ФормаВариантаОтчета @@ -63,6 +70,60 @@ true + + InformationRegister.ПредопределенныеВариантыОтчетовВерсийРасширений + + Read + true + + + View + true + + + + InformationRegister.ПредопределенныеВариантыОтчетовВерсийРасширений.StandardAttribute.Active + + Edit + false + + + + InformationRegister.ПредопределенныеВариантыОтчетовВерсийРасширений.StandardAttribute.LineNumber + + Edit + false + + + + InformationRegister.ПредопределенныеВариантыОтчетовВерсийРасширений.StandardAttribute.Recorder + + Edit + false + + + + InformationRegister.ПредопределенныеВариантыОтчетовВерсийРасширений.StandardAttribute.Period + + Edit + false + + + + Catalog.ПредопределенныеВариантыОтчетовРасширений + + Read + true + + + View + true + + + InputByString + true + + Catalog.ПользовательскиеНастройкиОтчетов @@ -145,6 +206,13 @@ true + + InformationRegister.ПредопределенныеВариантыОтчетовВерсийРасширений.Dimension.ВерсияРасширений + + Edit + false + + Catalog.ВариантыОтчетов.Command.Изменить @@ -186,6 +254,20 @@ true + + InformationRegister.ПредопределенныеВариантыОтчетовВерсийРасширений.Dimension.КлючВарианта + + Edit + false + + + + InformationRegister.ПредопределенныеВариантыОтчетовВерсийРасширений.Dimension.Вариант + + Edit + false + + Catalog.ВариантыОтчетов.Command.РазместитьВРазделах diff --git a/SSL/src/Roles/ДобавлениеИзменениеВзаимодействий/Rights.rights b/SSL/src/Roles/ДобавлениеИзменениеВзаимодействий/Rights.rights index 4ed778c05..3fd5e172c 100644 --- a/SSL/src/Roles/ДобавлениеИзменениеВзаимодействий/Rights.rights +++ b/SSL/src/Roles/ДобавлениеИзменениеВзаимодействий/Rights.rights @@ -129,7 +129,7 @@ - Catalog.УчетныеЗаписиЭлектроннойПочты.Attribute.Пароль + Catalog.УчетныеЗаписиЭлектроннойПочты.Attribute.УдалитьПароль View false @@ -157,6 +157,17 @@ false + + InformationRegister.НепринятыеКОбработкеПочтовымСерверомИсходящиеПисьма + + Read + true + + + View + true + + DocumentJournal.Взаимодействия.Command.НаписатьЭлектронноеПисьмоПоКонтакту @@ -165,7 +176,7 @@ - Catalog.УчетныеЗаписиЭлектроннойПочты.Attribute.ПарольSMTP + Catalog.УчетныеЗаписиЭлектроннойПочты.Attribute.УдалитьПарольSMTP View false diff --git a/SSL/src/Roles/ДобавлениеИзменениеВидовКонтактнойИнформации/Rights.rights b/SSL/src/Roles/ДобавлениеИзменениеВидовКонтактнойИнформации/Rights.rights new file mode 100644 index 000000000..d751b0312 --- /dev/null +++ b/SSL/src/Roles/ДобавлениеИзменениеВидовКонтактнойИнформации/Rights.rights @@ -0,0 +1,84 @@ + + + false + true + false + + Catalog.ВидыКонтактнойИнформации + + Read + true + + + Insert + true + + + Update + true + + + View + true + + + InteractiveInsert + true + + + Edit + true + + + InteractiveSetDeletionMark + true + + + InteractiveClearDeletionMark + true + + + InputByString + true + + + + Catalog.СтраныМира + + Read + true + + + Insert + true + + + Update + true + + + View + true + + + InteractiveInsert + true + + + Edit + true + + + InteractiveSetDeletionMark + true + + + InteractiveClearDeletionMark + true + + + InputByString + true + + + diff --git a/SSL/src/Roles/ДобавлениеИзменениеВидовКонтактнойИнформации/ДобавлениеИзменениеВидовКонтактнойИнформации.mdo b/SSL/src/Roles/ДобавлениеИзменениеВидовКонтактнойИнформации/ДобавлениеИзменениеВидовКонтактнойИнформации.mdo new file mode 100644 index 000000000..01bcef019 --- /dev/null +++ b/SSL/src/Roles/ДобавлениеИзменениеВидовКонтактнойИнформации/ДобавлениеИзменениеВидовКонтактнойИнформации.mdo @@ -0,0 +1,8 @@ + + + ДобавлениеИзменениеВидовКонтактнойИнформации + + ru + Добавление и изменение видов контактной информации + + diff --git a/SSL/src/Roles/ДобавлениеИзменениеГрафиковРаботы/Rights.rights b/SSL/src/Roles/ДобавлениеИзменениеГрафиковРаботы/Rights.rights new file mode 100644 index 000000000..f543dc204 --- /dev/null +++ b/SSL/src/Roles/ДобавлениеИзменениеГрафиковРаботы/Rights.rights @@ -0,0 +1,91 @@ + + + false + true + false + + InformationRegister.КалендарныеГрафики + + Read + true + + + Update + true + + + View + true + + + Edit + true + + + TotalsControl + true + + + + Catalog.Календари + + Read + true + + + Insert + true + + + Update + true + + + View + true + + + InteractiveInsert + true + + + Edit + true + + + InteractiveSetDeletionMark + true + + + InteractiveClearDeletionMark + true + + + InputByString + true + + + + InformationRegister.РучныеИзмененияГрафиковРаботы + + Read + true + + + Update + true + + + View + true + + + Edit + true + + + TotalsControl + true + + + diff --git a/SSL/src/Roles/ДобавлениеИзменениеГрафиковРаботы/ДобавлениеИзменениеГрафиковРаботы.mdo b/SSL/src/Roles/ДобавлениеИзменениеГрафиковРаботы/ДобавлениеИзменениеГрафиковРаботы.mdo new file mode 100644 index 000000000..a0401f77b --- /dev/null +++ b/SSL/src/Roles/ДобавлениеИзменениеГрафиковРаботы/ДобавлениеИзменениеГрафиковРаботы.mdo @@ -0,0 +1,8 @@ + + + ДобавлениеИзменениеГрафиковРаботы + + ru + Добавление и изменение графиков работы + + diff --git a/SSL/src/Roles/ДобавлениеИзменениеДополнительныхОтчетовИОбработок/Rights.rights b/SSL/src/Roles/ДобавлениеИзменениеДополнительныхОтчетовИОбработок/Rights.rights index 0af53b7bf..58858c1f7 100644 --- a/SSL/src/Roles/ДобавлениеИзменениеДополнительныхОтчетовИОбработок/Rights.rights +++ b/SSL/src/Roles/ДобавлениеИзменениеДополнительныхОтчетовИОбработок/Rights.rights @@ -917,7 +917,7 @@ - Catalog.УчетныеЗаписиЭлектроннойПочты.Attribute.Пароль + Catalog.УчетныеЗаписиЭлектроннойПочты.Attribute.УдалитьПароль View false @@ -1588,7 +1588,7 @@ - Catalog.УчетныеЗаписиЭлектроннойПочты.Attribute.ПарольSMTP + Catalog.УчетныеЗаписиЭлектроннойПочты.Attribute.УдалитьПарольSMTP View false @@ -2907,13 +2907,6 @@ false - - CommonCommand.ДополнительныеПечатныеФормыОбъекта - - View - true - - DataProcessor.СопоставлениеОбъектовИнформационныхБаз.TabularSection.ТаблицаАвтоматическиСопоставленныхОбъектов.Attribute.ПриемникПоле1 @@ -3124,7 +3117,7 @@ - DataProcessor.ОбновлениеКонфигурации.Attribute.ИсточникОбновления + DataProcessor.ПоискИУстановкаОбновлений.Attribute.ИсточникОбновления View false @@ -3223,7 +3216,7 @@ - DataProcessor.ОбновлениеКонфигурации.TabularSection.ДоступныеОбновления.Attribute.Версия2Разряд + DataProcessor.ПоискИУстановкаОбновлений.TabularSection.ДоступныеОбновления.Attribute.Версия2Разряд View false @@ -3245,7 +3238,7 @@ - DataProcessor.ОбновлениеКонфигурации.Attribute.РезультатОбновления + DataProcessor.ПоискИУстановкаОбновлений.Attribute.РезультатОбновления View false @@ -3509,7 +3502,7 @@ - DataProcessor.ОбновлениеКонфигурации.Attribute.КодПользователяСервераОбновлений + DataProcessor.ПоискИУстановкаОбновлений.Attribute.КодПользователяСервераОбновлений View false @@ -3927,7 +3920,7 @@ - DataProcessor.ОбновлениеКонфигурации.TabularSection.ДоступныеОбновления.Attribute.ФайлОбновления + DataProcessor.ПоискИУстановкаОбновлений.TabularSection.ДоступныеОбновления.Attribute.ФайлОбновления View false @@ -4048,7 +4041,7 @@ - DataProcessor.ОбновлениеКонфигурации.Attribute.КодЗадачиПланировщика + DataProcessor.ПоискИУстановкаОбновлений.Attribute.КодЗадачиПланировщика View false @@ -4792,7 +4785,7 @@ - DataProcessor.ОбновлениеКонфигурации.TabularSection.ДоступныеОбновления.Attribute.НомерДискаИТС + DataProcessor.ПоискИУстановкаОбновлений.TabularSection.ДоступныеОбновления.Attribute.НомерДискаИТС View false @@ -4957,7 +4950,7 @@ - DataProcessor.ОбновлениеКонфигурации.TabularSection.ДоступныеОбновления + DataProcessor.ПоискИУстановкаОбновлений.TabularSection.ДоступныеОбновления View false @@ -6002,7 +5995,7 @@ - DataProcessor.ОбновлениеКонфигурации.Attribute.ДатаВремяОбновления + DataProcessor.ПоискИУстановкаОбновлений.Attribute.ДатаВремяОбновления View false @@ -6013,7 +6006,7 @@ - DataProcessor.ПомощникСозданияОбменаДанными.Attribute.ИмяФайлаНастроекОбменаДаннымиДляЗагрузки + DataProcessor.ПомощникСозданияОбменаДанными.Attribute.ИмяФайлаНастроекСинхронизацииДанныхДляЗагрузки View false @@ -7048,7 +7041,7 @@ - DataProcessor.ОбновлениеКонфигурации.Attribute.РежимОбновления + DataProcessor.ПоискИУстановкаОбновлений.Attribute.РежимОбновления View false @@ -7562,7 +7555,7 @@ - DataProcessor.ПомощникСозданияОбменаДанными.Attribute.ИмяФайлаНастроекОбменаДанными + DataProcessor.ПомощникСозданияОбменаДанными.Attribute.ИмяФайлаНастроекСинхронизацииДанных View false @@ -8310,7 +8303,7 @@ - DataProcessor.ОбновлениеКонфигурации.Attribute.ИспользоватьРасписаниеДляПроверкиОбновления + DataProcessor.ПоискИУстановкаОбновлений.Attribute.ИспользоватьРасписаниеДляПроверкиОбновления View false @@ -8321,7 +8314,7 @@ - DataProcessor.ОбновлениеКонфигурации.Attribute.ЗапомнитьПарольСервераОбновлений + DataProcessor.ПоискИУстановкаОбновлений.Attribute.ЗапомнитьПарольСервераОбновлений View false @@ -8662,7 +8655,7 @@ - DataProcessor.ОбновлениеКонфигурации.Attribute.ВосстанавливатьИнформационнуюБазу + DataProcessor.ПоискИУстановкаОбновлений.Attribute.ВосстанавливатьИнформационнуюБазу View false @@ -8706,7 +8699,7 @@ - DataProcessor.ОбновлениеКонфигурации.TabularSection.ДоступныеОбновления.Attribute.ПутьКЛокальномуФайлуОбновления + DataProcessor.ПоискИУстановкаОбновлений.TabularSection.ДоступныеОбновления.Attribute.ПутьКЛокальномуФайлуОбновления View false @@ -9350,7 +9343,7 @@ - DataProcessor.ОбновлениеКонфигурации.Attribute.ИмяКаталогаРезервнойКопииИБ + DataProcessor.ПоискИУстановкаОбновлений.Attribute.ИмяКаталогаРезервнойКопииИБ View false @@ -9481,13 +9474,6 @@ false - - InformationRegister.НазначениеДополнительныхОбработок.Command.НазначениеДополнительныхОбработок - - View - true - - InformationRegister.ФайлыВРабочемКаталоге.Resource.ВРабочемКаталогеВладельца @@ -9764,7 +9750,7 @@ - DataProcessor.ОбновлениеКонфигурации.Attribute.ИмяФайлаОбновления + DataProcessor.ПоискИУстановкаОбновлений.Attribute.ИмяФайлаОбновления View false @@ -10226,7 +10212,7 @@ - DataProcessor.ОбновлениеКонфигурации.TabularSection.ДоступныеОбновления.Attribute.РазмерФайлаОбновления + DataProcessor.ПоискИУстановкаОбновлений.TabularSection.ДоступныеОбновления.Attribute.РазмерФайлаОбновления View false @@ -10336,7 +10322,7 @@ - DataProcessor.ОбновлениеКонфигурации.Attribute.РасписаниеПроверкиНаличияОбновления + DataProcessor.ПоискИУстановкаОбновлений.Attribute.РасписаниеПроверкиНаличияОбновления View false @@ -10611,7 +10597,7 @@ - DataProcessor.ОбновлениеКонфигурации.TabularSection.ДоступныеОбновления.Attribute.ВерсияДляОбновления + DataProcessor.ПоискИУстановкаОбновлений.TabularSection.ДоступныеОбновления.Attribute.ВерсияДляОбновления View false @@ -10820,7 +10806,7 @@ - Catalog.ГруппыВнешнихПользователей.Attribute.ТипОбъектовАвторизации + Catalog.ГруппыВнешнихПользователей.Attribute.УдалитьТипОбъектовАвторизации View false @@ -10908,7 +10894,7 @@ - DataProcessor.ОбновлениеКонфигурации.TabularSection.ДоступныеОбновления.Attribute.Версия4Разряд + DataProcessor.ПоискИУстановкаОбновлений.TabularSection.ДоступныеОбновления.Attribute.Версия4Разряд View false @@ -11183,7 +11169,7 @@ - DataProcessor.ОбновлениеКонфигурации.Attribute.ПовторныйЗапуск + DataProcessor.ПоискИУстановкаОбновлений.Attribute.ПовторныйЗапуск View false @@ -11216,7 +11202,7 @@ - InformationRegister.НастройкиТранспортаОбмена.Resource.ПарольАрхиваСообщенияОбмена + InformationRegister.НастройкиТранспортаОбмена.Resource.УдалитьПарольАрхиваСообщенияОбмена View false @@ -11502,7 +11488,7 @@ - DataProcessor.ОбновлениеКонфигурации.TabularSection.ДоступныеОбновления.Attribute.ЛокальныйОтносительныйКаталог + DataProcessor.ПоискИУстановкаОбновлений.TabularSection.ДоступныеОбновления.Attribute.ЛокальныйОтносительныйКаталог View false @@ -11546,7 +11532,7 @@ - DataProcessor.ОбновлениеКонфигурации.Attribute.ТехническаяИнформацияОбОшибке + DataProcessor.ПоискИУстановкаОбновлений.Attribute.ТехническаяИнформацияОбОшибке View false @@ -11612,7 +11598,7 @@ - DataProcessor.ОбновлениеКонфигурации.TabularSection.ДоступныеОбновления.Attribute.Версия1Разряд + DataProcessor.ПоискИУстановкаОбновлений.TabularSection.ДоступныеОбновления.Attribute.Версия1Разряд View false @@ -11828,7 +11814,7 @@ - DataProcessor.ОбновлениеКонфигурации.Attribute.ПарольСервераОбновлений + DataProcessor.ПоискИУстановкаОбновлений.Attribute.ПарольСервераОбновлений View false @@ -12836,7 +12822,7 @@ - DataProcessor.ОбновлениеКонфигурации.TabularSection.ДоступныеОбновления.Attribute.Версия3Разряд + DataProcessor.ПоискИУстановкаОбновлений.TabularSection.ДоступныеОбновления.Attribute.Версия3Разряд View false @@ -13052,7 +13038,7 @@ - InformationRegister.НастройкиТранспортаОбмена.Resource.FTPСоединениеПароль + InformationRegister.НастройкиТранспортаОбмена.Resource.УдалитьFTPСоединениеПароль View false @@ -13206,7 +13192,7 @@ - DataProcessor.ОбновлениеКонфигурации.Attribute.НуженФайлОбновления + DataProcessor.ПоискИУстановкаОбновлений.Attribute.НуженФайлОбновления View false @@ -13404,7 +13390,7 @@ - DataProcessor.ОбновлениеКонфигурации.Attribute.АдресЭлектроннойПочты + DataProcessor.ПоискИУстановкаОбновлений.Attribute.АдресЭлектроннойПочты View false @@ -13976,7 +13962,7 @@ - DataProcessor.ОбновлениеКонфигурации.Attribute.ПроверятьНаличиеОбновленияПриЗапуске + DataProcessor.ПоискИУстановкаОбновлений.Attribute.ПроверятьНаличиеОбновленияПриЗапуске View false @@ -14515,7 +14501,7 @@ - DataProcessor.ОбновлениеКонфигурации.Attribute.ВыслатьОтчетНаПочту + DataProcessor.ПоискИУстановкаОбновлений.Attribute.ВыслатьОтчетНаПочту View false @@ -14702,7 +14688,7 @@ - DataProcessor.ОбновлениеКонфигурации.TabularSection.ДоступныеОбновления.Attribute.Версия + DataProcessor.ПоискИУстановкаОбновлений.TabularSection.ДоступныеОбновления.Attribute.Версия View false @@ -14900,7 +14886,7 @@ - DataProcessor.ОбновлениеКонфигурации.Attribute.СоздаватьРезервнуюКопию + DataProcessor.ПоискИУстановкаОбновлений.Attribute.СоздаватьРезервнуюКопию View false @@ -15043,7 +15029,7 @@ - DataProcessor.ОбновлениеКонфигурации.TabularSection.ДоступныеОбновления.Attribute.ПутьКЛокальномуФайлу + DataProcessor.ПоискИУстановкаОбновлений.TabularSection.ДоступныеОбновления.Attribute.ПутьКЛокальномуФайлу View false @@ -15219,7 +15205,7 @@ - DataProcessor.ОбновлениеКонфигурации.TabularSection.ДоступныеОбновления.Attribute.ПутьКФайлуОбновления + DataProcessor.ПоискИУстановкаОбновлений.TabularSection.ДоступныеОбновления.Attribute.ПутьКФайлуОбновления View false @@ -15306,17 +15292,6 @@ false - - Catalog.ГруппыДоступа.Attribute.ТипПользователей - - View - false - - - Edit - false - - Catalog.ЗапланированноеВзаимодействиеПрисоединенныеФайлы.TabularSection.ЭлектронныеПодписи.Attribute.Комментарий @@ -15395,7 +15370,7 @@ - DataProcessor.ОбновлениеКонфигурации.TabularSection.ДоступныеОбновления.Attribute.Поставщик + DataProcessor.ПоискИУстановкаОбновлений.TabularSection.ДоступныеОбновления.Attribute.Поставщик View false @@ -15406,7 +15381,7 @@ - DataProcessor.ОбновлениеКонфигурации.TabularSection.ДоступныеОбновления.Attribute.Конфигурация + DataProcessor.ПоискИУстановкаОбновлений.TabularSection.ДоступныеОбновления.Attribute.Конфигурация View false diff --git a/SSL/src/Roles/ДобавлениеИзменениеДополнительныхРеквизитовИСведений/Rights.rights b/SSL/src/Roles/ДобавлениеИзменениеДополнительныхРеквизитовИСведений/Rights.rights new file mode 100644 index 000000000..4cb98f352 --- /dev/null +++ b/SSL/src/Roles/ДобавлениеИзменениеДополнительныхРеквизитовИСведений/Rights.rights @@ -0,0 +1,169 @@ + + + false + true + false + + Catalog.НаборыДополнительныхРеквизитовИСведений + + Read + true + + + Insert + true + + + Update + true + + + View + true + + + InteractiveInsert + true + + + Edit + true + + + InteractiveSetDeletionMark + true + + + InteractiveClearDeletionMark + true + + + InputByString + true + + + + ChartOfCharacteristicTypes.ДополнительныеРеквизитыИСведения + + Read + true + + + Insert + true + + + Update + true + + + View + true + + + InteractiveInsert + true + + + Edit + true + + + InteractiveSetDeletionMark + true + + + InteractiveClearDeletionMark + true + + + InputByString + true + + + + Catalog.ЗначенияСвойствОбъектовИерархия + + Read + true + + + Insert + true + + + Update + true + + + View + true + + + InteractiveInsert + true + + + Edit + true + + + InteractiveSetDeletionMark + true + + + InteractiveClearDeletionMark + true + + + InputByString + true + + + + Catalog.ЗначенияСвойствОбъектов + + Read + true + + + Insert + true + + + Update + true + + + View + true + + + InteractiveInsert + true + + + Edit + true + + + InteractiveSetDeletionMark + true + + + InteractiveClearDeletionMark + true + + + InputByString + true + + + + CommonForm.РедактированиеДополнительныхСведений + + View + true + + + diff --git a/SSL/src/Roles/ДобавлениеИзменениеДополнительныхРеквизитовИСведений/ДобавлениеИзменениеДополнительныхРеквизитовИСведений.mdo b/SSL/src/Roles/ДобавлениеИзменениеДополнительныхРеквизитовИСведений/ДобавлениеИзменениеДополнительныхРеквизитовИСведений.mdo new file mode 100644 index 000000000..268b6a6eb --- /dev/null +++ b/SSL/src/Roles/ДобавлениеИзменениеДополнительныхРеквизитовИСведений/ДобавлениеИзменениеДополнительныхРеквизитовИСведений.mdo @@ -0,0 +1,8 @@ + + + ДобавлениеИзменениеДополнительныхРеквизитовИСведений + + ru + Добавление и изменение дополнительных реквизитов и сведений + + diff --git a/SSL/src/Roles/ДобавлениеИзменениеЗаданий/Rights.rights b/SSL/src/Roles/ДобавлениеИзменениеЗаданий/Rights.rights index 73d47d166..d105ba9a9 100644 --- a/SSL/src/Roles/ДобавлениеИзменениеЗаданий/Rights.rights +++ b/SSL/src/Roles/ДобавлениеИзменениеЗаданий/Rights.rights @@ -100,8 +100,8 @@ "", "", "Пользователи","Т.Автор","ИЛИ", -"Пользователи","Т.Исполнитель","ИЛИ", -"Пользователи","Т.Проверяющий","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","") +"Пользователи","Т.ГруппаИсполнителейЗадач","ИЛИ", +"Пользователи","Т.ГруппаИсполнителейЗадачПроверяющий","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","") diff --git a/SSL/src/Roles/ДобавлениеИзменениеКалендарныхГрафиков/Rights.rights b/SSL/src/Roles/ДобавлениеИзменениеКалендарныхГрафиков/Rights.rights new file mode 100644 index 000000000..e641af4cf --- /dev/null +++ b/SSL/src/Roles/ДобавлениеИзменениеКалендарныхГрафиков/Rights.rights @@ -0,0 +1,68 @@ + + + false + true + false + + InformationRegister.ДанныеПроизводственногоКалендаря + + Read + true + + + Update + true + + + View + true + + + Edit + true + + + TotalsControl + true + + + + Catalog.ПроизводственныеКалендари + + Read + true + + + Insert + true + + + Update + true + + + View + true + + + InteractiveInsert + true + + + Edit + true + + + InteractiveSetDeletionMark + true + + + InteractiveClearDeletionMark + true + + + InputByString + true + + + diff --git a/SSL/src/Roles/ДобавлениеИзменениеКалендарныхГрафиков/ДобавлениеИзменениеКалендарныхГрафиков.mdo b/SSL/src/Roles/ДобавлениеИзменениеКалендарныхГрафиков/ДобавлениеИзменениеКалендарныхГрафиков.mdo new file mode 100644 index 000000000..816856e5b --- /dev/null +++ b/SSL/src/Roles/ДобавлениеИзменениеКалендарныхГрафиков/ДобавлениеИзменениеКалендарныхГрафиков.mdo @@ -0,0 +1,8 @@ + + + ДобавлениеИзменениеКалендарныхГрафиков + + ru + Добавление и изменение календарных графиков + + diff --git a/SSL/src/Roles/ДобавлениеИзменениеКурсовВалют/Rights.rights b/SSL/src/Roles/ДобавлениеИзменениеКурсовВалют/Rights.rights new file mode 100644 index 000000000..865c9cbf2 --- /dev/null +++ b/SSL/src/Roles/ДобавлениеИзменениеКурсовВалют/Rights.rights @@ -0,0 +1,79 @@ + + + false + true + false + + InformationRegister.КурсыВалют + + Read + true + + + Update + true + + + View + true + + + Edit + true + + + TotalsControl + true + + + + Catalog.Валюты + + Read + true + + + Insert + true + + + Update + true + + + View + true + + + InteractiveInsert + true + + + Edit + true + + + InteractiveSetDeletionMark + true + + + InteractiveClearDeletionMark + true + + + InputByString + true + + + + DataProcessor.ЗагрузкаКурсовВалют + + Use + true + + + View + true + + + diff --git a/SSL/src/Roles/ДобавлениеИзменениеКурсовВалют/ДобавлениеИзменениеКурсовВалют.mdo b/SSL/src/Roles/ДобавлениеИзменениеКурсовВалют/ДобавлениеИзменениеКурсовВалют.mdo new file mode 100644 index 000000000..2671dde1c --- /dev/null +++ b/SSL/src/Roles/ДобавлениеИзменениеКурсовВалют/ДобавлениеИзменениеКурсовВалют.mdo @@ -0,0 +1,8 @@ + + + ДобавлениеИзменениеКурсовВалют + + ru + Добавление и изменение курсов валют + + diff --git a/SSL/src/Roles/ДобавлениеИзменениеОбщейБазовойНСИ/Rights.rights b/SSL/src/Roles/ДобавлениеИзменениеОбщейБазовойНСИ/Rights.rights deleted file mode 100644 index b83edf74a..000000000 --- a/SSL/src/Roles/ДобавлениеИзменениеОбщейБазовойНСИ/Rights.rights +++ /dev/null @@ -1,393 +0,0 @@ - - - false - true - false - - WebService.AddressSystem.Operation.Autocomplete - - Use - true - - - - InformationRegister.СлужебныеАдресныеСведения - - Read - true - - - Update - true - - - View - true - - - Edit - true - - - TotalsControl - true - - - - InformationRegister.ДомаЗданияСтроения - - Read - true - - - Update - true - - - View - true - - - Edit - true - - - TotalsControl - true - - - - WebService.AddressSystem.Operation.Ping - - Use - true - - - - Catalog.КлассификаторБанковРФ.Command.КлассификаторБанковРФ - - View - true - - - - WebService.AddressSystem.Operation.GetActualInfo - - Use - true - - - - InformationRegister.УдалитьАдресныйКлассификатор - - Read - true - - - Update - true - - - View - true - - - Edit - true - - - TotalsControl - true - - - - InformationRegister.ПричиныИзмененияАдресныхСведений - - Read - true - - - Update - true - - - View - true - - - Edit - true - - - TotalsControl - true - - - - InformationRegister.ДанныеПроизводственногоКалендаря - - Read - true - - - Update - true - - - View - true - - - Edit - true - - - TotalsControl - true - - - - WebService.AddressSystem.Operation.SelectByPostalCode - - Use - true - - - - InformationRegister.ДополнительныеАдресныеСведения - - Read - true - - - Update - true - - - View - true - - - Edit - true - - - TotalsControl - true - - - - WebService.AddressSystem.Operation.GetExtraInfo - - Use - true - - - - InformationRegister.ОриентирыАдресныхОбъектов - - Read - true - - - Update - true - - - View - true - - - Edit - true - - - TotalsControl - true - - - - Catalog.ПроизводственныеКалендари - - Read - true - - - Insert - true - - - Update - true - - - View - true - - - InteractiveInsert - true - - - Edit - true - - - InteractiveSetDeletionMark - true - - - InteractiveClearDeletionMark - true - - - InputByString - true - - - - Catalog.КлассификаторБанковРФ - - Read - true - - - Insert - true - - - Update - true - - - View - true - - - InteractiveInsert - true - - - Edit - true - - - InteractiveSetDeletionMark - true - - - InteractiveClearDeletionMark - true - - - InputByString - true - - - - InformationRegister.ИсторияАдресныхОбъектов - - Read - true - - - Update - true - - - View - true - - - Edit - true - - - TotalsControl - true - - - - WebService.AddressSystem.Operation.Analyze - - Use - true - - - - InformationRegister.УровниСокращенийАдресныхСведений - - Read - true - - - Update - true - - - View - true - - - Edit - true - - - TotalsControl - true - - - - WebService.AddressSystem.Operation.Select - - Use - true - - - - InformationRegister.АдресныеОбъекты - - Read - true - - - Update - true - - - View - true - - - Edit - true - - - TotalsControl - true - - - - InformationRegister.ЗагруженныеВерсииАдресныхСведений - - Read - true - - - Update - true - - - View - true - - - Edit - true - - - TotalsControl - true - - - diff --git a/SSL/src/Roles/ДобавлениеИзменениеОбщейБазовойНСИ/ДобавлениеИзменениеОбщейБазовойНСИ.mdo b/SSL/src/Roles/ДобавлениеИзменениеОбщейБазовойНСИ/ДобавлениеИзменениеОбщейБазовойНСИ.mdo deleted file mode 100644 index 15c34fdd4..000000000 --- a/SSL/src/Roles/ДобавлениеИзменениеОбщейБазовойНСИ/ДобавлениеИзменениеОбщейБазовойНСИ.mdo +++ /dev/null @@ -1,9 +0,0 @@ - - - ДобавлениеИзменениеОбщейБазовойНСИ - - ru - Добавление и изменение общей базовой нормативно-справочной информации - - Для администратора сервиса - diff --git a/SSL/src/Roles/ДобавлениеИзменениеОпросов/Rights.rights b/SSL/src/Roles/ДобавлениеИзменениеОпросов/Rights.rights index 34dd969aa..6cb50ee91 100644 --- a/SSL/src/Roles/ДобавлениеИзменениеОпросов/Rights.rights +++ b/SSL/src/Roles/ДобавлениеИзменениеОпросов/Rights.rights @@ -933,7 +933,7 @@ - Catalog.УчетныеЗаписиЭлектроннойПочты.Attribute.Пароль + Catalog.УчетныеЗаписиЭлектроннойПочты.Attribute.УдалитьПароль View false @@ -1604,7 +1604,7 @@ - Catalog.УчетныеЗаписиЭлектроннойПочты.Attribute.ПарольSMTP + Catalog.УчетныеЗаписиЭлектроннойПочты.Attribute.УдалитьПарольSMTP View false @@ -3147,7 +3147,7 @@ - DataProcessor.ОбновлениеКонфигурации.Attribute.ИсточникОбновления + DataProcessor.ПоискИУстановкаОбновлений.Attribute.ИсточникОбновления View false @@ -3235,7 +3235,7 @@ - DataProcessor.ОбновлениеКонфигурации.TabularSection.ДоступныеОбновления.Attribute.Версия2Разряд + DataProcessor.ПоискИУстановкаОбновлений.TabularSection.ДоступныеОбновления.Attribute.Версия2Разряд View false @@ -3257,7 +3257,7 @@ - DataProcessor.ОбновлениеКонфигурации.Attribute.РезультатОбновления + DataProcessor.ПоискИУстановкаОбновлений.Attribute.РезультатОбновления View false @@ -3543,7 +3543,7 @@ - DataProcessor.ОбновлениеКонфигурации.Attribute.КодПользователяСервераОбновлений + DataProcessor.ПоискИУстановкаОбновлений.Attribute.КодПользователяСервераОбновлений View false @@ -3972,7 +3972,7 @@ - DataProcessor.ОбновлениеКонфигурации.TabularSection.ДоступныеОбновления.Attribute.ФайлОбновления + DataProcessor.ПоискИУстановкаОбновлений.TabularSection.ДоступныеОбновления.Attribute.ФайлОбновления View false @@ -4101,7 +4101,7 @@ - DataProcessor.ОбновлениеКонфигурации.Attribute.КодЗадачиПланировщика + DataProcessor.ПоискИУстановкаОбновлений.Attribute.КодЗадачиПланировщика View false @@ -4849,7 +4849,7 @@ - DataProcessor.ОбновлениеКонфигурации.TabularSection.ДоступныеОбновления.Attribute.НомерДискаИТС + DataProcessor.ПоискИУстановкаОбновлений.TabularSection.ДоступныеОбновления.Attribute.НомерДискаИТС View false @@ -5014,7 +5014,7 @@ - DataProcessor.ОбновлениеКонфигурации.TabularSection.ДоступныеОбновления + DataProcessor.ПоискИУстановкаОбновлений.TabularSection.ДоступныеОбновления View false @@ -6081,7 +6081,7 @@ - DataProcessor.ОбновлениеКонфигурации.Attribute.ДатаВремяОбновления + DataProcessor.ПоискИУстановкаОбновлений.Attribute.ДатаВремяОбновления View false @@ -6092,7 +6092,7 @@ - DataProcessor.ПомощникСозданияОбменаДанными.Attribute.ИмяФайлаНастроекОбменаДаннымиДляЗагрузки + DataProcessor.ПомощникСозданияОбменаДанными.Attribute.ИмяФайлаНастроекСинхронизацииДанныхДляЗагрузки View false @@ -6465,17 +6465,6 @@ false - - InformationRegister.НазначениеДополнительныхОбработок.Resource.ИспользоватьПечатныеФормы - - View - false - - - Edit - false - - Catalog.СценарииОбменовДанными.TabularSection.НастройкиОбмена.Attribute.УзелИнформационнойБазы @@ -7177,7 +7166,7 @@ - DataProcessor.ОбновлениеКонфигурации.Attribute.РежимОбновления + DataProcessor.ПоискИУстановкаОбновлений.Attribute.РежимОбновления View false @@ -7705,7 +7694,7 @@ - DataProcessor.ПомощникСозданияОбменаДанными.Attribute.ИмяФайлаНастроекОбменаДанными + DataProcessor.ПомощникСозданияОбменаДанными.Attribute.ИмяФайлаНастроекСинхронизацииДанных View false @@ -8453,7 +8442,7 @@ - DataProcessor.ОбновлениеКонфигурации.Attribute.ИспользоватьРасписаниеДляПроверкиОбновления + DataProcessor.ПоискИУстановкаОбновлений.Attribute.ИспользоватьРасписаниеДляПроверкиОбновления View false @@ -8464,7 +8453,7 @@ - DataProcessor.ОбновлениеКонфигурации.Attribute.ЗапомнитьПарольСервераОбновлений + DataProcessor.ПоискИУстановкаОбновлений.Attribute.ЗапомнитьПарольСервераОбновлений View false @@ -8838,7 +8827,7 @@ - DataProcessor.ОбновлениеКонфигурации.Attribute.ВосстанавливатьИнформационнуюБазу + DataProcessor.ПоискИУстановкаОбновлений.Attribute.ВосстанавливатьИнформационнуюБазу View false @@ -8882,7 +8871,7 @@ - DataProcessor.ОбновлениеКонфигурации.TabularSection.ДоступныеОбновления.Attribute.ПутьКЛокальномуФайлуОбновления + DataProcessor.ПоискИУстановкаОбновлений.TabularSection.ДоступныеОбновления.Attribute.ПутьКЛокальномуФайлуОбновления View false @@ -9586,7 +9575,7 @@ - DataProcessor.ОбновлениеКонфигурации.Attribute.ИмяКаталогаРезервнойКопииИБ + DataProcessor.ПоискИУстановкаОбновлений.Attribute.ИмяКаталогаРезервнойКопииИБ View false @@ -9982,7 +9971,7 @@ - DataProcessor.ОбновлениеКонфигурации.Attribute.ИмяФайлаОбновления + DataProcessor.ПоискИУстановкаОбновлений.Attribute.ИмяФайлаОбновления View false @@ -10455,7 +10444,7 @@ - DataProcessor.ОбновлениеКонфигурации.TabularSection.ДоступныеОбновления.Attribute.РазмерФайлаОбновления + DataProcessor.ПоискИУстановкаОбновлений.TabularSection.ДоступныеОбновления.Attribute.РазмерФайлаОбновления View false @@ -10565,7 +10554,7 @@ - DataProcessor.ОбновлениеКонфигурации.Attribute.РасписаниеПроверкиНаличияОбновления + DataProcessor.ПоискИУстановкаОбновлений.Attribute.РасписаниеПроверкиНаличияОбновления View false @@ -10840,7 +10829,7 @@ - DataProcessor.ОбновлениеКонфигурации.TabularSection.ДоступныеОбновления.Attribute.ВерсияДляОбновления + DataProcessor.ПоискИУстановкаОбновлений.TabularSection.ДоступныеОбновления.Attribute.ВерсияДляОбновления View false @@ -11049,7 +11038,7 @@ - Catalog.ГруппыВнешнихПользователей.Attribute.ТипОбъектовАвторизации + Catalog.ГруппыВнешнихПользователей.Attribute.УдалитьТипОбъектовАвторизации View false @@ -11137,7 +11126,7 @@ - DataProcessor.ОбновлениеКонфигурации.TabularSection.ДоступныеОбновления.Attribute.Версия4Разряд + DataProcessor.ПоискИУстановкаОбновлений.TabularSection.ДоступныеОбновления.Attribute.Версия4Разряд View false @@ -11412,7 +11401,7 @@ - DataProcessor.ОбновлениеКонфигурации.Attribute.ПовторныйЗапуск + DataProcessor.ПоискИУстановкаОбновлений.Attribute.ПовторныйЗапуск View false @@ -11445,7 +11434,7 @@ - InformationRegister.НастройкиТранспортаОбмена.Resource.ПарольАрхиваСообщенияОбмена + InformationRegister.НастройкиТранспортаОбмена.Resource.УдалитьПарольАрхиваСообщенияОбмена View false @@ -11731,7 +11720,7 @@ - DataProcessor.ОбновлениеКонфигурации.TabularSection.ДоступныеОбновления.Attribute.ЛокальныйОтносительныйКаталог + DataProcessor.ПоискИУстановкаОбновлений.TabularSection.ДоступныеОбновления.Attribute.ЛокальныйОтносительныйКаталог View false @@ -11775,7 +11764,7 @@ - DataProcessor.ОбновлениеКонфигурации.Attribute.ТехническаяИнформацияОбОшибке + DataProcessor.ПоискИУстановкаОбновлений.Attribute.ТехническаяИнформацияОбОшибке View false @@ -11841,7 +11830,7 @@ - DataProcessor.ОбновлениеКонфигурации.TabularSection.ДоступныеОбновления.Attribute.Версия1Разряд + DataProcessor.ПоискИУстановкаОбновлений.TabularSection.ДоступныеОбновления.Attribute.Версия1Разряд View false @@ -12083,7 +12072,7 @@ - DataProcessor.ОбновлениеКонфигурации.Attribute.ПарольСервераОбновлений + DataProcessor.ПоискИУстановкаОбновлений.Attribute.ПарольСервераОбновлений View false @@ -13102,7 +13091,7 @@ - DataProcessor.ОбновлениеКонфигурации.TabularSection.ДоступныеОбновления.Attribute.Версия3Разряд + DataProcessor.ПоискИУстановкаОбновлений.TabularSection.ДоступныеОбновления.Attribute.Версия3Разряд View false @@ -13311,7 +13300,7 @@ - InformationRegister.НастройкиТранспортаОбмена.Resource.FTPСоединениеПароль + InformationRegister.НастройкиТранспортаОбмена.Resource.УдалитьFTPСоединениеПароль View false @@ -13465,7 +13454,7 @@ - DataProcessor.ОбновлениеКонфигурации.Attribute.НуженФайлОбновления + DataProcessor.ПоискИУстановкаОбновлений.Attribute.НуженФайлОбновления View false @@ -13652,7 +13641,7 @@ - DataProcessor.ОбновлениеКонфигурации.Attribute.АдресЭлектроннойПочты + DataProcessor.ПоискИУстановкаОбновлений.Attribute.АдресЭлектроннойПочты View false @@ -14246,7 +14235,7 @@ - DataProcessor.ОбновлениеКонфигурации.Attribute.ПроверятьНаличиеОбновленияПриЗапуске + DataProcessor.ПоискИУстановкаОбновлений.Attribute.ПроверятьНаличиеОбновленияПриЗапуске View false @@ -14796,7 +14785,7 @@ - DataProcessor.ОбновлениеКонфигурации.Attribute.ВыслатьОтчетНаПочту + DataProcessor.ПоискИУстановкаОбновлений.Attribute.ВыслатьОтчетНаПочту View false @@ -14983,7 +14972,7 @@ - DataProcessor.ОбновлениеКонфигурации.TabularSection.ДоступныеОбновления.Attribute.Версия + DataProcessor.ПоискИУстановкаОбновлений.TabularSection.ДоступныеОбновления.Attribute.Версия View false @@ -15181,7 +15170,7 @@ - DataProcessor.ОбновлениеКонфигурации.Attribute.СоздаватьРезервнуюКопию + DataProcessor.ПоискИУстановкаОбновлений.Attribute.СоздаватьРезервнуюКопию View false @@ -15324,7 +15313,7 @@ - DataProcessor.ОбновлениеКонфигурации.TabularSection.ДоступныеОбновления.Attribute.ПутьКЛокальномуФайлу + DataProcessor.ПоискИУстановкаОбновлений.TabularSection.ДоступныеОбновления.Attribute.ПутьКЛокальномуФайлу View false @@ -15500,7 +15489,7 @@ - DataProcessor.ОбновлениеКонфигурации.TabularSection.ДоступныеОбновления.Attribute.ПутьКФайлуОбновления + DataProcessor.ПоискИУстановкаОбновлений.TabularSection.ДоступныеОбновления.Attribute.ПутьКФайлуОбновления View false @@ -15576,17 +15565,6 @@ false - - Catalog.ГруппыДоступа.Attribute.ТипПользователей - - View - false - - - Edit - false - - Catalog.ЗапланированноеВзаимодействиеПрисоединенныеФайлы.TabularSection.ЭлектронныеПодписи.Attribute.Комментарий @@ -15665,7 +15643,7 @@ - DataProcessor.ОбновлениеКонфигурации.TabularSection.ДоступныеОбновления.Attribute.Поставщик + DataProcessor.ПоискИУстановкаОбновлений.TabularSection.ДоступныеОбновления.Attribute.Поставщик View false @@ -15676,7 +15654,7 @@ - DataProcessor.ОбновлениеКонфигурации.TabularSection.ДоступныеОбновления.Attribute.Конфигурация + DataProcessor.ПоискИУстановкаОбновлений.TabularSection.ДоступныеОбновления.Attribute.Конфигурация View false diff --git a/SSL/src/Roles/ДобавлениеИзменениеОтветовНаВопросыАнкет/Rights.rights b/SSL/src/Roles/ДобавлениеИзменениеОтветовНаВопросыАнкет/Rights.rights index b32dab3ab..7795fd82f 100644 --- a/SSL/src/Roles/ДобавлениеИзменениеОтветовНаВопросыАнкет/Rights.rights +++ b/SSL/src/Roles/ДобавлениеИзменениеОтветовНаВопросыАнкет/Rights.rights @@ -928,7 +928,7 @@ - Catalog.УчетныеЗаписиЭлектроннойПочты.Attribute.Пароль + Catalog.УчетныеЗаписиЭлектроннойПочты.Attribute.УдалитьПароль View false @@ -1621,7 +1621,7 @@ - Catalog.УчетныеЗаписиЭлектроннойПочты.Attribute.ПарольSMTP + Catalog.УчетныеЗаписиЭлектроннойПочты.Attribute.УдалитьПарольSMTP View false @@ -3156,7 +3156,7 @@ - DataProcessor.ОбновлениеКонфигурации.Attribute.ИсточникОбновления + DataProcessor.ПоискИУстановкаОбновлений.Attribute.ИсточникОбновления View false @@ -3255,7 +3255,7 @@ - DataProcessor.ОбновлениеКонфигурации.TabularSection.ДоступныеОбновления.Attribute.Версия2Разряд + DataProcessor.ПоискИУстановкаОбновлений.TabularSection.ДоступныеОбновления.Attribute.Версия2Разряд View false @@ -3277,7 +3277,7 @@ - DataProcessor.ОбновлениеКонфигурации.Attribute.РезультатОбновления + DataProcessor.ПоискИУстановкаОбновлений.Attribute.РезультатОбновления View false @@ -3563,7 +3563,7 @@ - DataProcessor.ОбновлениеКонфигурации.Attribute.КодПользователяСервераОбновлений + DataProcessor.ПоискИУстановкаОбновлений.Attribute.КодПользователяСервераОбновлений View false @@ -3981,7 +3981,7 @@ - DataProcessor.ОбновлениеКонфигурации.TabularSection.ДоступныеОбновления.Attribute.ФайлОбновления + DataProcessor.ПоискИУстановкаОбновлений.TabularSection.ДоступныеОбновления.Attribute.ФайлОбновления View false @@ -4102,7 +4102,7 @@ - DataProcessor.ОбновлениеКонфигурации.Attribute.КодЗадачиПланировщика + DataProcessor.ПоискИУстановкаОбновлений.Attribute.КодЗадачиПланировщика View false @@ -4850,7 +4850,7 @@ - DataProcessor.ОбновлениеКонфигурации.TabularSection.ДоступныеОбновления.Attribute.НомерДискаИТС + DataProcessor.ПоискИУстановкаОбновлений.TabularSection.ДоступныеОбновления.Attribute.НомерДискаИТС View false @@ -5015,7 +5015,7 @@ - DataProcessor.ОбновлениеКонфигурации.TabularSection.ДоступныеОбновления + DataProcessor.ПоискИУстановкаОбновлений.TabularSection.ДоступныеОбновления View false @@ -6071,7 +6071,7 @@ - DataProcessor.ОбновлениеКонфигурации.Attribute.ДатаВремяОбновления + DataProcessor.ПоискИУстановкаОбновлений.Attribute.ДатаВремяОбновления View false @@ -6082,7 +6082,7 @@ - DataProcessor.ПомощникСозданияОбменаДанными.Attribute.ИмяФайлаНастроекОбменаДаннымиДляЗагрузки + DataProcessor.ПомощникСозданияОбменаДанными.Attribute.ИмяФайлаНастроекСинхронизацииДанныхДляЗагрузки View false @@ -6477,17 +6477,6 @@ false - - InformationRegister.НазначениеДополнительныхОбработок.Resource.ИспользоватьПечатныеФормы - - View - false - - - Edit - false - - Catalog.СценарииОбменовДанными.TabularSection.НастройкиОбмена.Attribute.УзелИнформационнойБазы @@ -7189,7 +7178,7 @@ - DataProcessor.ОбновлениеКонфигурации.Attribute.РежимОбновления + DataProcessor.ПоискИУстановкаОбновлений.Attribute.РежимОбновления View false @@ -7721,7 +7710,7 @@ - DataProcessor.ПомощникСозданияОбменаДанными.Attribute.ИмяФайлаНастроекОбменаДанными + DataProcessor.ПомощникСозданияОбменаДанными.Attribute.ИмяФайлаНастроекСинхронизацииДанных View false @@ -8465,7 +8454,7 @@ - DataProcessor.ОбновлениеКонфигурации.Attribute.ИспользоватьРасписаниеДляПроверкиОбновления + DataProcessor.ПоискИУстановкаОбновлений.Attribute.ИспользоватьРасписаниеДляПроверкиОбновления View false @@ -8476,7 +8465,7 @@ - DataProcessor.ОбновлениеКонфигурации.Attribute.ЗапомнитьПарольСервераОбновлений + DataProcessor.ПоискИУстановкаОбновлений.Attribute.ЗапомнитьПарольСервераОбновлений View false @@ -8835,7 +8824,7 @@ - DataProcessor.ОбновлениеКонфигурации.Attribute.ВосстанавливатьИнформационнуюБазу + DataProcessor.ПоискИУстановкаОбновлений.Attribute.ВосстанавливатьИнформационнуюБазу View false @@ -8879,7 +8868,7 @@ - DataProcessor.ОбновлениеКонфигурации.TabularSection.ДоступныеОбновления.Attribute.ПутьКЛокальномуФайлуОбновления + DataProcessor.ПоискИУстановкаОбновлений.TabularSection.ДоступныеОбновления.Attribute.ПутьКЛокальномуФайлуОбновления View false @@ -9583,7 +9572,7 @@ - DataProcessor.ОбновлениеКонфигурации.Attribute.ИмяКаталогаРезервнойКопииИБ + DataProcessor.ПоискИУстановкаОбновлений.Attribute.ИмяКаталогаРезервнойКопииИБ View false @@ -9990,7 +9979,7 @@ - DataProcessor.ОбновлениеКонфигурации.Attribute.ИмяФайлаОбновления + DataProcessor.ПоискИУстановкаОбновлений.Attribute.ИмяФайлаОбновления View false @@ -10463,7 +10452,7 @@ - DataProcessor.ОбновлениеКонфигурации.TabularSection.ДоступныеОбновления.Attribute.РазмерФайлаОбновления + DataProcessor.ПоискИУстановкаОбновлений.TabularSection.ДоступныеОбновления.Attribute.РазмерФайлаОбновления View false @@ -10573,7 +10562,7 @@ - DataProcessor.ОбновлениеКонфигурации.Attribute.РасписаниеПроверкиНаличияОбновления + DataProcessor.ПоискИУстановкаОбновлений.Attribute.РасписаниеПроверкиНаличияОбновления View false @@ -10848,7 +10837,7 @@ - DataProcessor.ОбновлениеКонфигурации.TabularSection.ДоступныеОбновления.Attribute.ВерсияДляОбновления + DataProcessor.ПоискИУстановкаОбновлений.TabularSection.ДоступныеОбновления.Attribute.ВерсияДляОбновления View false @@ -11057,7 +11046,7 @@ - Catalog.ГруппыВнешнихПользователей.Attribute.ТипОбъектовАвторизации + Catalog.ГруппыВнешнихПользователей.Attribute.УдалитьТипОбъектовАвторизации View false @@ -11145,7 +11134,7 @@ - DataProcessor.ОбновлениеКонфигурации.TabularSection.ДоступныеОбновления.Attribute.Версия4Разряд + DataProcessor.ПоискИУстановкаОбновлений.TabularSection.ДоступныеОбновления.Attribute.Версия4Разряд View false @@ -11420,7 +11409,7 @@ - DataProcessor.ОбновлениеКонфигурации.Attribute.ПовторныйЗапуск + DataProcessor.ПоискИУстановкаОбновлений.Attribute.ПовторныйЗапуск View false @@ -11453,7 +11442,7 @@ - InformationRegister.НастройкиТранспортаОбмена.Resource.ПарольАрхиваСообщенияОбмена + InformationRegister.НастройкиТранспортаОбмена.Resource.УдалитьПарольАрхиваСообщенияОбмена View false @@ -11739,7 +11728,7 @@ - DataProcessor.ОбновлениеКонфигурации.TabularSection.ДоступныеОбновления.Attribute.ЛокальныйОтносительныйКаталог + DataProcessor.ПоискИУстановкаОбновлений.TabularSection.ДоступныеОбновления.Attribute.ЛокальныйОтносительныйКаталог View false @@ -11783,7 +11772,7 @@ - DataProcessor.ОбновлениеКонфигурации.Attribute.ТехническаяИнформацияОбОшибке + DataProcessor.ПоискИУстановкаОбновлений.Attribute.ТехническаяИнформацияОбОшибке View false @@ -11860,7 +11849,7 @@ - DataProcessor.ОбновлениеКонфигурации.TabularSection.ДоступныеОбновления.Attribute.Версия1Разряд + DataProcessor.ПоискИУстановкаОбновлений.TabularSection.ДоступныеОбновления.Attribute.Версия1Разряд View false @@ -12102,7 +12091,7 @@ - DataProcessor.ОбновлениеКонфигурации.Attribute.ПарольСервераОбновлений + DataProcessor.ПоискИУстановкаОбновлений.Attribute.ПарольСервераОбновлений View false @@ -13088,7 +13077,7 @@ - DataProcessor.ОбновлениеКонфигурации.TabularSection.ДоступныеОбновления.Attribute.Версия3Разряд + DataProcessor.ПоискИУстановкаОбновлений.TabularSection.ДоступныеОбновления.Attribute.Версия3Разряд View false @@ -13297,7 +13286,7 @@ - InformationRegister.НастройкиТранспортаОбмена.Resource.FTPСоединениеПароль + InformationRegister.НастройкиТранспортаОбмена.Resource.УдалитьFTPСоединениеПароль View false @@ -13451,7 +13440,7 @@ - DataProcessor.ОбновлениеКонфигурации.Attribute.НуженФайлОбновления + DataProcessor.ПоискИУстановкаОбновлений.Attribute.НуженФайлОбновления View false @@ -13649,7 +13638,7 @@ - DataProcessor.ОбновлениеКонфигурации.Attribute.АдресЭлектроннойПочты + DataProcessor.ПоискИУстановкаОбновлений.Attribute.АдресЭлектроннойПочты View false @@ -14239,7 +14228,7 @@ - DataProcessor.ОбновлениеКонфигурации.Attribute.ПроверятьНаличиеОбновленияПриЗапуске + DataProcessor.ПоискИУстановкаОбновлений.Attribute.ПроверятьНаличиеОбновленияПриЗапуске View false @@ -14789,7 +14778,7 @@ - DataProcessor.ОбновлениеКонфигурации.Attribute.ВыслатьОтчетНаПочту + DataProcessor.ПоискИУстановкаОбновлений.Attribute.ВыслатьОтчетНаПочту View false @@ -14976,7 +14965,7 @@ - DataProcessor.ОбновлениеКонфигурации.TabularSection.ДоступныеОбновления.Attribute.Версия + DataProcessor.ПоискИУстановкаОбновлений.TabularSection.ДоступныеОбновления.Attribute.Версия View false @@ -15174,7 +15163,7 @@ - DataProcessor.ОбновлениеКонфигурации.Attribute.СоздаватьРезервнуюКопию + DataProcessor.ПоискИУстановкаОбновлений.Attribute.СоздаватьРезервнуюКопию View false @@ -15317,7 +15306,7 @@ - DataProcessor.ОбновлениеКонфигурации.TabularSection.ДоступныеОбновления.Attribute.ПутьКЛокальномуФайлу + DataProcessor.ПоискИУстановкаОбновлений.TabularSection.ДоступныеОбновления.Attribute.ПутьКЛокальномуФайлу View false @@ -15478,7 +15467,7 @@ - DataProcessor.ОбновлениеКонфигурации.TabularSection.ДоступныеОбновления.Attribute.ПутьКФайлуОбновления + DataProcessor.ПоискИУстановкаОбновлений.TabularSection.ДоступныеОбновления.Attribute.ПутьКФайлуОбновления View false @@ -15565,17 +15554,6 @@ false - - Catalog.ГруппыДоступа.Attribute.ТипПользователей - - View - false - - - Edit - false - - Catalog.ЗапланированноеВзаимодействиеПрисоединенныеФайлы.TabularSection.ЭлектронныеПодписи.Attribute.Комментарий @@ -15654,7 +15632,7 @@ - DataProcessor.ОбновлениеКонфигурации.TabularSection.ДоступныеОбновления.Attribute.Поставщик + DataProcessor.ПоискИУстановкаОбновлений.TabularSection.ДоступныеОбновления.Attribute.Поставщик View false @@ -15665,7 +15643,7 @@ - DataProcessor.ОбновлениеКонфигурации.TabularSection.ДоступныеОбновления.Attribute.Конфигурация + DataProcessor.ПоискИУстановкаОбновлений.TabularSection.ДоступныеОбновления.Attribute.Конфигурация View false diff --git a/SSL/src/Roles/ДобавлениеИзменениеРолейИсполнителей/Rights.rights b/SSL/src/Roles/ДобавлениеИзменениеРолейИсполнителей/Rights.rights index 4c35b8710..18ce10857 100644 --- a/SSL/src/Roles/ДобавлениеИзменениеРолейИсполнителей/Rights.rights +++ b/SSL/src/Roles/ДобавлениеИзменениеРолейИсполнителей/Rights.rights @@ -99,7 +99,7 @@ - InformationRegister.ИсполнителиЗадач.Command.НастройкаРолевойАдресации + InformationRegister.ИсполнителиЗадач.Command.РолиИИсполнителиЗадач View true diff --git a/SSL/src/Roles/ДобавлениеИзменениеСтранМира/Rights.rights b/SSL/src/Roles/ДобавлениеИзменениеСтранМира/Rights.rights deleted file mode 100644 index f6c208a9d..000000000 --- a/SSL/src/Roles/ДобавлениеИзменениеСтранМира/Rights.rights +++ /dev/null @@ -1,15841 +0,0 @@ - - - false - true - false - - Catalog.ДополнительныеОтчетыИОбработки.TabularSection.Команды.Attribute.ПоказыватьОповещение - - View - false - - - Edit - false - - - - InformationRegister.ФайлыВРабочемКаталоге.Resource.НаЧтение - - View - false - - - Edit - false - - - - Catalog.НаборыДополнительныхРеквизитовИСведений.TabularSection.ДополнительныеСведения.Attribute.Свойство - - View - false - - - Edit - false - - - - Document.ЭлектронноеПисьмоВходящее.TabularSection.ПолучателиПисьма.Attribute.Контакт - - View - false - - - Edit - false - - - - InformationRegister.ПользовательскиеНастройкиДоступаКОбработкам.Dimension.Пользователь - - View - false - - - Edit - false - - - - Catalog.ЭлектронноеПисьмоВходящееПрисоединенныеФайлы.Attribute.Автор - - View - false - - - Edit - false - - - - DataProcessor.НастройкаРезервногоКопированияИБ.Attribute.ВариантРасписанияРезервногоКопирования - - View - false - - - Edit - false - - - - Catalog.ГруппыДоступа.TabularSection.Пользователи - - View - false - - - Edit - false - - - - Catalog.ВерсииФайлов.TabularSection.ЭлектронныеПодписи.Attribute.ИмяФайлаПодписи - - View - false - - - Edit - false - - - - DataProcessor.ПомощникИнтерактивногоОбменаДанными.TabularSection.ИнформацияСтатистики.Attribute.ДанныеУспешноЗагружены - - View - false - - - Edit - false - - - - DataProcessor.СопоставлениеОбъектовИнформационныхБаз.TabularSection.ТаблицаАвтоматическиСопоставленныхОбъектов.Attribute.ПриемникИндексКартинки - - View - false - - - Edit - false - - - - Task.ЗадачаИсполнителя.Attribute.РезультатВыполнения - - View - false - - - Edit - false - - - - Catalog.ТелефонныйЗвонокПрисоединенныеФайлы.Attribute.Редактирует - - View - false - - - Edit - false - - - - Document.ЭлектронноеПисьмоИсходящее.TabularSection.ПолучателиСкрытыхКопий.Attribute.Адрес - - View - false - - - Edit - false - - - - InformationRegister.ДанныеБизнесПроцессов.Resource.Дата - - View - false - - - Edit - false - - - - InformationRegister.РабочиеКаталогиФайлов.Dimension.Папка - - View - false - - - Edit - false - - - - Catalog.ЗапланированноеВзаимодействиеПрисоединенныеФайлы.Attribute.ПодписанЭП - - View - false - - - Edit - false - - - - Catalog.ЭлектронноеПисьмоВходящееПрисоединенныеФайлы.StandardAttribute.Predefined - - View - false - - - Edit - false - - - - Catalog.ЭлектронноеПисьмоВходящееПрисоединенныеФайлы.StandardAttribute.Ref - - View - false - - - Edit - false - - - - Catalog.ЭлектронноеПисьмоВходящееПрисоединенныеФайлы.StandardAttribute.DeletionMark - - View - false - - - Edit - false - - - - Catalog.ЭлектронноеПисьмоВходящееПрисоединенныеФайлы.StandardAttribute.IsFolder - - View - false - - - Edit - false - - - - Catalog.ЭлектронноеПисьмоВходящееПрисоединенныеФайлы.StandardAttribute.Owner - - View - false - - - Edit - false - - - - Catalog.ЭлектронноеПисьмоВходящееПрисоединенныеФайлы.StandardAttribute.Parent - - View - false - - - Edit - false - - - - Catalog.ЭлектронноеПисьмоВходящееПрисоединенныеФайлы.StandardAttribute.Description - - View - false - - - Edit - false - - - - Catalog.ЭлектронноеПисьмоВходящееПрисоединенныеФайлы.StandardAttribute.Code - - View - false - - - Edit - false - - - - Task.ЗадачаИсполнителя.AddressingAttribute.ДополнительныйОбъектАдресации - - View - false - - - Edit - false - - - - Catalog.ДополнительныеОтчетыИОбработки.TabularSection.Команды - - View - false - - - Edit - false - - - - DataProcessor.ПомощникИнтерактивногоОбменаДанными.TabularSection.ИнформацияСтатистики.Attribute.КоличествоОбъектовНесопоставленных - - View - false - - - Edit - false - - - - DataProcessor.БлокировкаРаботыПользователей.Attribute.СообщениеДляПользователей - - View - false - - - Edit - false - - - - Catalog.ПапкиФайлов.Attribute.Ответственный - - View - false - - - Edit - false - - - - DataProcessor.СопоставлениеОбъектовИнформационныхБаз.TabularSection.ТаблицаСортировки.Attribute.ИмяПоля - - View - false - - - Edit - false - - - - Document.ЭлектронноеПисьмоИсходящее.Attribute.ДатаОтправления - - View - false - - - Edit - false - - - - Catalog.Файлы.Attribute.ПолноеНаименование - - View - false - - - Edit - false - - - - Document.ЭлектронноеПисьмоИсходящее.Attribute.Удалить_Рассмотрено - - View - false - - - Edit - false - - - - Catalog.ШаблоныАнкет.StandardAttribute.Predefined - - View - false - - - Edit - false - - - - Catalog.ШаблоныАнкет.StandardAttribute.Ref - - View - false - - - Edit - false - - - - Catalog.ШаблоныАнкет.StandardAttribute.DeletionMark - - View - false - - - Edit - false - - - - Catalog.ШаблоныАнкет.StandardAttribute.IsFolder - - View - false - - - Edit - false - - - - Catalog.ШаблоныАнкет.StandardAttribute.Owner - - View - false - - - Edit - false - - - - Catalog.ШаблоныАнкет.StandardAttribute.Parent - - View - false - - - Edit - false - - - - Catalog.ШаблоныАнкет.StandardAttribute.Description - - View - false - - - Edit - false - - - - Catalog.ШаблоныАнкет.StandardAttribute.Code - - View - false - - - Edit - false - - - - InformationRegister.НаличиеПрисоединенныхФайлов.StandardAttribute.Active - - View - false - - - Edit - false - - - - InformationRegister.НаличиеПрисоединенныхФайлов.StandardAttribute.LineNumber - - View - false - - - Edit - false - - - - InformationRegister.НаличиеПрисоединенныхФайлов.StandardAttribute.Recorder - - View - false - - - Edit - false - - - - InformationRegister.НаличиеПрисоединенныхФайлов.StandardAttribute.Period - - View - false - - - Edit - false - - - - Catalog.ТелефонныйЗвонокПрисоединенныеФайлы.Attribute.Том - - View - false - - - Edit - false - - - - Catalog.ВариантыОтчетов.Attribute.УдалитьКлючОбъекта - - View - false - - - Edit - false - - - - Document.Встреча.Attribute.ДатаОкончания - - View - false - - - Edit - false - - - - Catalog.ВариантыОтчетов.TabularSection.Размещение.Attribute.УдалитьНазвание - - View - false - - - Edit - false - - - - Document.Встреча.Attribute.Удалить_Рассмотрено - - View - false - - - Edit - false - - - - Catalog.ГруппыИсполнителейЗадач.Attribute.РольИсполнителя - - View - false - - - Edit - false - - - - Catalog.ЭлектронноеПисьмоИсходящееПрисоединенныеФайлы.Attribute.Редактирует - - View - false - - - Edit - false - - - - Document.ЭлектронноеПисьмоВходящее.Attribute.ДатаПолучения - - View - false - - - Edit - false - - - - DataProcessor.СопоставлениеОбъектовИнформационныхБаз.TabularSection.ТаблицаНеутвержденныхСвязей.Attribute.УникальныйИдентификаторПриемника - - View - false - - - Edit - false - - - - Document.ЭлектронноеПисьмоИсходящее.TabularSection.НаборыЗначенийДоступа.Attribute.ЗначениеДоступа - - View - false - - - Edit - false - - - - Catalog.НаборыДополнительныхРеквизитовИСведений.StandardAttribute.Predefined - - View - false - - - Edit - false - - - - Catalog.НаборыДополнительныхРеквизитовИСведений.StandardAttribute.Ref - - View - false - - - Edit - false - - - - Catalog.НаборыДополнительныхРеквизитовИСведений.StandardAttribute.DeletionMark - - View - false - - - Edit - false - - - - Catalog.НаборыДополнительныхРеквизитовИСведений.StandardAttribute.IsFolder - - View - false - - - Edit - false - - - - Catalog.НаборыДополнительныхРеквизитовИСведений.StandardAttribute.Owner - - View - false - - - Edit - false - - - - Catalog.НаборыДополнительныхРеквизитовИСведений.StandardAttribute.Parent - - View - false - - - Edit - false - - - - Catalog.НаборыДополнительныхРеквизитовИСведений.StandardAttribute.Description - - View - false - - - Edit - false - - - - Catalog.НаборыДополнительныхРеквизитовИСведений.StandardAttribute.Code - - View - false - - - Edit - false - - - - Catalog.ВстречаПрисоединенныеФайлы.TabularSection.ЭлектронныеПодписи.Attribute.ДатаПодписи - - View - false - - - Edit - false - - - - BusinessProcess.Задание.Attribute.Выполнено - - View - false - - - Edit - false - - - - Document.ТелефонныйЗвонок.Attribute.Автор - - View - false - - - Edit - false - - - - Document.ЭлектронноеПисьмоИсходящее.Attribute.СписокПолучателейКопий - - View - false - - - Edit - false - - - - Catalog.ВариантыОтчетов.StandardAttribute.Predefined - - View - false - - - Edit - false - - - - Catalog.ВариантыОтчетов.StandardAttribute.Ref - - View - false - - - Edit - false - - - - Catalog.ВариантыОтчетов.StandardAttribute.DeletionMark - - View - false - - - Edit - false - - - - Catalog.ВариантыОтчетов.StandardAttribute.IsFolder - - View - false - - - Edit - false - - - - Catalog.ВариантыОтчетов.StandardAttribute.Owner - - View - false - - - Edit - false - - - - Catalog.ВариантыОтчетов.StandardAttribute.Parent - - View - false - - - Edit - false - - - - Catalog.ВариантыОтчетов.StandardAttribute.Description - - View - false - - - Edit - false - - - - Catalog.ВариантыОтчетов.StandardAttribute.Code - - View - false - - - Edit - false - - - - Document.ТелефонныйЗвонок.Attribute.Предмет - - View - false - - - Edit - false - - - - InformationRegister.ОтветыНаВопросыАнкет.StandardAttribute.Active - - View - false - - - Edit - false - - - - InformationRegister.ОтветыНаВопросыАнкет.StandardAttribute.LineNumber - - View - false - - - Edit - false - - - - InformationRegister.ОтветыНаВопросыАнкет.StandardAttribute.Recorder - - View - false - - - Edit - false - - - - InformationRegister.ОтветыНаВопросыАнкет.StandardAttribute.Period - - View - false - - - Edit - false - - - - InformationRegister.ВерсииОбъектов.StandardAttribute.Active - - View - false - - - Edit - false - - - - InformationRegister.ВерсииОбъектов.StandardAttribute.LineNumber - - View - false - - - Edit - false - - - - InformationRegister.ВерсииОбъектов.StandardAttribute.Recorder - - View - false - - - Edit - false - - - - InformationRegister.ВерсииОбъектов.StandardAttribute.Period - - View - false - - - Edit - false - - - - InformationRegister.НастройкиТранспортаОбмена.Resource.FILEСжиматьФайлИсходящегоСообщения - - View - false - - - Edit - false - - - - Catalog.УчетныеЗаписиЭлектроннойПочты.Attribute.Пароль - - View - false - - - Edit - false - - - - DataProcessor.ПомощникСозданияОбменаДанными.Attribute.ПрефиксИнформационнойБазыИсточника - - View - false - - - Edit - false - - - - InformationRegister.ДатыЗапретаИзменения.Attribute.ОписаниеДатыЗапрета - - View - false - - - Edit - false - - - - Document.ЭлектронноеПисьмоИсходящее.Attribute.ТекстHTML - - View - false - - - Edit - false - - - - Document.ЗапланированноеВзаимодействие.TabularSection.НаборыЗначенийДоступа.Attribute.Чтение - - View - false - - - Edit - false - - - - Catalog.ТелефонныйЗвонокПрисоединенныеФайлы.Attribute.Изменил - - View - false - - - Edit - false - - - - InformationRegister.НомераОтсканированныхФайлов.StandardAttribute.Active - - View - false - - - Edit - false - - - - InformationRegister.НомераОтсканированныхФайлов.StandardAttribute.LineNumber - - View - false - - - Edit - false - - - - InformationRegister.НомераОтсканированныхФайлов.StandardAttribute.Recorder - - View - false - - - Edit - false - - - - InformationRegister.НомераОтсканированныхФайлов.StandardAttribute.Period - - View - false - - - Edit - false - - - - Document.ТелефонныйЗвонок.Attribute.АбонентПредставление - - View - false - - - Edit - false - - - - Catalog.УчетныеЗаписиЭлектроннойПочты.Attribute.СпособSMTPАутентификации - - View - false - - - Edit - false - - - - ChartOfCharacteristicTypes.РазделыДатЗапретаИзменения.StandardAttribute.ValueType - - View - false - - - Edit - false - - - - ChartOfCharacteristicTypes.РазделыДатЗапретаИзменения.StandardAttribute.Description - - View - false - - - Edit - false - - - - ChartOfCharacteristicTypes.РазделыДатЗапретаИзменения.StandardAttribute.Code - - View - false - - - Edit - false - - - - ChartOfCharacteristicTypes.РазделыДатЗапретаИзменения.StandardAttribute.IsFolder - - View - false - - - Edit - false - - - - ChartOfCharacteristicTypes.РазделыДатЗапретаИзменения.StandardAttribute.Parent - - View - false - - - Edit - false - - - - ChartOfCharacteristicTypes.РазделыДатЗапретаИзменения.StandardAttribute.Predefined - - View - false - - - Edit - false - - - - ChartOfCharacteristicTypes.РазделыДатЗапретаИзменения.StandardAttribute.DeletionMark - - View - false - - - Edit - false - - - - ChartOfCharacteristicTypes.РазделыДатЗапретаИзменения.StandardAttribute.Ref - - View - false - - - Edit - false - - - - Catalog.СценарииОбменовДанными.Attribute.РегламентноеЗаданиеGUID - - View - false - - - Edit - false - - - - DataProcessor.ПомощникСозданияОбменаДанными.Attribute.EMAILУчетнаяЗапись - - View - false - - - Edit - false - - - - Catalog.ВидыКонтактнойИнформации.Attribute.АдресТолькоРоссийский - - View - false - - - Edit - false - - - - InformationRegister.ПравилаДляОбменаДанными.Resource.ПравилаXML - - View - false - - - Edit - false - - - - Catalog.ВопросыШаблонаАнкеты.StandardAttribute.Predefined - - View - false - - - Edit - false - - - - Catalog.ВопросыШаблонаАнкеты.StandardAttribute.Ref - - View - false - - - Edit - false - - - - Catalog.ВопросыШаблонаАнкеты.StandardAttribute.DeletionMark - - View - false - - - Edit - false - - - - Catalog.ВопросыШаблонаАнкеты.StandardAttribute.IsFolder - - View - false - - - Edit - false - - - - Catalog.ВопросыШаблонаАнкеты.StandardAttribute.Owner - - View - false - - - Edit - false - - - - Catalog.ВопросыШаблонаАнкеты.StandardAttribute.Parent - - View - false - - - Edit - false - - - - Catalog.ВопросыШаблонаАнкеты.StandardAttribute.Description - - View - false - - - Edit - false - - - - Catalog.ВопросыШаблонаАнкеты.StandardAttribute.Code - - View - false - - - Edit - false - - - - InformationRegister.ВерсииОбъектов.Dimension.Объект - - View - false - - - Edit - false - - - - Document.НазначениеОпросов.Attribute.СвободныйОпрос - - View - false - - - Edit - false - - - - DataProcessor.ГрупповоеИзменениеРеквизитов.Attribute.ИспользуютсяДопСведения - - View - false - - - Edit - false - - - - Catalog.ПапкиФайлов.Attribute.Описание - - View - false - - - Edit - false - - - - ChartOfCharacteristicTypes.ВопросыДляАнкетирования.Attribute.ТипОтвета - - View - false - - - Edit - false - - - - InformationRegister.ФайлыВРабочемКаталоге.Resource.Путь - - View - false - - - Edit - false - - - - ChartOfCharacteristicTypes.ДополнительныеРеквизитыИСведения.StandardAttribute.ValueType - - View - false - - - Edit - false - - - - ChartOfCharacteristicTypes.ДополнительныеРеквизитыИСведения.StandardAttribute.Description - - View - false - - - Edit - false - - - - ChartOfCharacteristicTypes.ДополнительныеРеквизитыИСведения.StandardAttribute.Code - - View - false - - - Edit - false - - - - ChartOfCharacteristicTypes.ДополнительныеРеквизитыИСведения.StandardAttribute.IsFolder - - View - false - - - Edit - false - - - - ChartOfCharacteristicTypes.ДополнительныеРеквизитыИСведения.StandardAttribute.Parent - - View - false - - - Edit - false - - - - ChartOfCharacteristicTypes.ДополнительныеРеквизитыИСведения.StandardAttribute.Predefined - - View - false - - - Edit - false - - - - ChartOfCharacteristicTypes.ДополнительныеРеквизитыИСведения.StandardAttribute.DeletionMark - - View - false - - - Edit - false - - - - ChartOfCharacteristicTypes.ДополнительныеРеквизитыИСведения.StandardAttribute.Ref - - View - false - - - Edit - false - - - - InformationRegister.КурсыВалют.StandardAttribute.Active - - View - false - - - Edit - false - - - - InformationRegister.КурсыВалют.StandardAttribute.LineNumber - - View - false - - - Edit - false - - - - InformationRegister.КурсыВалют.StandardAttribute.Recorder - - View - false - - - Edit - false - - - - InformationRegister.КурсыВалют.StandardAttribute.Period - - View - false - - - Edit - false - - - - DataProcessor.ПомощникСозданияОбменаДанными.Attribute.FTPСоединениеПорт - - View - false - - - Edit - false - - - - DataProcessor.ГрупповоеИзменениеРеквизитов.Attribute.ПрерыватьПриОшибке - - View - false - - - Edit - false - - - - DataProcessor.ТранспортСообщенийОбменаFILE.Attribute.FILEСжиматьФайлИсходящегоСообщения - - View - false - - - Edit - false - - - - Catalog.ВариантыОтчетов.TabularSection.Размещение.Attribute.УдалитьПредопределенная - - View - false - - - Edit - false - - - - InformationRegister.ДанныеБизнесПроцессов.Resource.Автор - - View - false - - - Edit - false - - - - Document.ЭлектронноеПисьмоИсходящее.Attribute.УчетнаяЗапись - - View - false - - - Edit - false - - - - Document.НазначениеОпросов.Attribute.Комментарий - - View - false - - - Edit - false - - - - InformationRegister.ПользовательскиеМакетыПечати.Dimension.Объект - - View - false - - - Edit - false - - - - InformationRegister.СостоянияУспешныхОбменовДанными.Resource.ДатаОкончания - - View - false - - - Edit - false - - - - ChartOfCharacteristicTypes.ВопросыДляАнкетирования.Attribute.Точность - - View - false - - - Edit - false - - - - Catalog.ПрофилиГруппДоступа.Attribute.Комментарий - - View - false - - - Edit - false - - - - Catalog.ДополнительныеОтчетыИОбработки.TabularSection.Команды.Attribute.Модификатор - - View - false - - - Edit - false - - - - Catalog.УчетныеЗаписиЭлектроннойПочты.Attribute.ПарольSMTP - - View - false - - - Edit - false - - - - DataProcessor.ПомощникИнтерактивногоОбменаДанными.TabularSection.ИнформацияСтатистики.Attribute.ПоляТаблицы - - View - false - - - Edit - false - - - - DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.ЗагружатьДанныеВРежимеОбмена - - View - false - - - Edit - false - - - - DataProcessor.ТранспортСообщенийОбменаFILE.Attribute.ШаблонИмениФайлаСообщения - - View - false - - - Edit - false - - - - Catalog.Файлы.TabularSection.СертификатыШифрования.Attribute.Сертификат - - View - false - - - Edit - false - - - - DataProcessor.ТранспортСообщенийОбменаEMAIL.Attribute.EMAILУчетнаяЗапись - - View - false - - - Edit - false - - - - Document.ЭлектронноеПисьмоВходящее.TabularSection.ПолучателиПисьма.Attribute.Представление - - View - false - - - Edit - false - - - - DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.ОбъектыПоСсылкеЗагружатьБезПометкиУдаления - - View - false - - - Edit - false - - - - InformationRegister.УдалитьАдресныйКлассификатор.Resource.Наименование - - View - false - - - Edit - false - - - - InformationRegister.ДатыЗапретаИзменения.Resource.ДатаЗапрета - - View - false - - - Edit - false - - - - DataProcessor.СопоставлениеОбъектовИнформационныхБаз.TabularSection.ТаблицаНеутвержденныхСвязей.Attribute.УникальныйИдентификаторИсточника - - View - false - - - Edit - false - - - - InformationRegister.КалендарныеГрафики.StandardAttribute.Active - - View - false - - - Edit - false - - - - InformationRegister.КалендарныеГрафики.StandardAttribute.LineNumber - - View - false - - - Edit - false - - - - InformationRegister.КалендарныеГрафики.StandardAttribute.Recorder - - View - false - - - Edit - false - - - - InformationRegister.КалендарныеГрафики.StandardAttribute.Period - - View - false - - - Edit - false - - - - InformationRegister.КалендарныеГрафики.Resource.КоличествоДнейВГрафикеСНачалаГода - - View - false - - - Edit - false - - - - InformationRegister.ОтветыНаВопросыАнкет.Dimension.Вопрос - - View - false - - - Edit - false - - - - Task.ЗадачаИсполнителя.AddressingAttribute.ОсновнойОбъектАдресации - - View - false - - - Edit - false - - - - InformationRegister.ИсполнителиЗадач.Dimension.ОсновнойОбъектАдресации - - View - false - - - Edit - false - - - - Catalog.Пользователи.TabularSection.КонтактнаяИнформация.Attribute.Страна - - View - false - - - Edit - false - - - - Catalog.ШаблоныАнкет.Attribute.Заключение - - View - false - - - Edit - false - - - - Catalog.ВстречаПрисоединенныеФайлы.TabularSection.ЭлектронныеПодписи.Attribute.Комментарий - - View - false - - - Edit - false - - - - ChartOfCharacteristicTypes.ДополнительныеРеквизитыИСведения.Attribute.ЭтоДополнительноеСведение - - View - false - - - Edit - false - - - - Catalog.НаборыДополнительныхРеквизитовИСведений.TabularSection.ДополнительныеСведения - - View - false - - - Edit - false - - - - Document.ЭлектронноеПисьмоВходящее.Attribute.СписокПолучателейКопий - - View - false - - - Edit - false - - - - Catalog.ДополнительныеОтчетыИОбработки.TabularSection.Команды.Attribute.РегламентноеЗаданиеGUID - - View - false - - - Edit - false - - - - DataProcessor.ПомощникСозданияОбменаДанными.Attribute.КодНовогоУзлаВторойБазы - - View - false - - - Edit - false - - - - DataProcessor.СопоставлениеОбъектовИнформационныхБаз.TabularSection.ТаблицаАвтоматическиСопоставленныхОбъектов.Attribute.ПриемникПоле3 - - View - false - - - Edit - false - - - - Document.ЭлектронноеПисьмоВходящее.Attribute.ТипТекста - - View - false - - - Edit - false - - - - Catalog.Календари.StandardAttribute.Predefined - - View - false - - - Edit - false - - - - Catalog.Календари.StandardAttribute.Ref - - View - false - - - Edit - false - - - - Catalog.Календари.StandardAttribute.DeletionMark - - View - false - - - Edit - false - - - - Catalog.Календари.StandardAttribute.IsFolder - - View - false - - - Edit - false - - - - Catalog.Календари.StandardAttribute.Owner - - View - false - - - Edit - false - - - - Catalog.Календари.StandardAttribute.Parent - - View - false - - - Edit - false - - - - Catalog.Календари.StandardAttribute.Description - - View - false - - - Edit - false - - - - Catalog.Календари.StandardAttribute.Code - - View - false - - - Edit - false - - - - InformationRegister.ИдентификаторыПолученныхЭлектронныхПисем.StandardAttribute.Active - - View - false - - - Edit - false - - - - InformationRegister.ИдентификаторыПолученныхЭлектронныхПисем.StandardAttribute.LineNumber - - View - false - - - Edit - false - - - - InformationRegister.ИдентификаторыПолученныхЭлектронныхПисем.StandardAttribute.Recorder - - View - false - - - Edit - false - - - - InformationRegister.ИдентификаторыПолученныхЭлектронныхПисем.StandardAttribute.Period - - View - false - - - Edit - false - - - - InformationRegister.ДанныеБизнесПроцессов.Resource.Завершен - - View - false - - - Edit - false - - - - Document.НазначениеОпросов.Attribute.ВозможностьПредварительногоСохранения - - View - false - - - Edit - false - - - - DataProcessor.ПомощникСозданияОбменаДанными.Attribute.ИмяПланаОбмена - - View - false - - - Edit - false - - - - Catalog.Валюты.StandardAttribute.Predefined - - View - false - - - Edit - false - - - - Catalog.Валюты.StandardAttribute.Ref - - View - false - - - Edit - false - - - - Catalog.Валюты.StandardAttribute.DeletionMark - - View - false - - - Edit - false - - - - Catalog.Валюты.StandardAttribute.IsFolder - - View - false - - - Edit - false - - - - Catalog.Валюты.StandardAttribute.Owner - - View - false - - - Edit - false - - - - Catalog.Валюты.StandardAttribute.Parent - - View - false - - - Edit - false - - - - Catalog.Валюты.StandardAttribute.Description - - View - false - - - Edit - false - - - - Catalog.Валюты.StandardAttribute.Code - - View - false - - - Edit - false - - - - DataProcessor.СопоставлениеОбъектовИнформационныхБаз.Attribute.СписокИспользуемыхПолей - - View - false - - - Edit - false - - - - DataProcessor.СопоставлениеОбъектовИнформационныхБаз.Attribute.ИмяТаблицыПриемника - - View - false - - - Edit - false - - - - Document.Встреча.TabularSection.НаборыЗначенийДоступа.Attribute.Чтение - - View - false - - - Edit - false - - - - DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.ЗадаватьВопросПриЗагрузкеДанныхПриОткрытииОбработки - - View - false - - - Edit - false - - - - Catalog.ТелефонныйЗвонокПрисоединенныеФайлы.Attribute.ПодписанЭП - - View - false - - - Edit - false - - - - Catalog.ПрофилиГруппДоступа.TabularSection.ВидыДоступа.Attribute.ВидДоступа - - View - false - - - Edit - false - - - - Catalog.ТелефонныйЗвонокПрисоединенныеФайлы.Attribute.Размер - - View - false - - - Edit - false - - - - InformationRegister.СоответствияОбъектовИнформационныхБаз.StandardAttribute.Active - - View - false - - - Edit - false - - - - InformationRegister.СоответствияОбъектовИнформационныхБаз.StandardAttribute.LineNumber - - View - false - - - Edit - false - - - - InformationRegister.СоответствияОбъектовИнформационныхБаз.StandardAttribute.Recorder - - View - false - - - Edit - false - - - - InformationRegister.СоответствияОбъектовИнформационныхБаз.StandardAttribute.Period - - View - false - - - Edit - false - - - - Catalog.ВерсииФайлов.Attribute.СтатусИзвлеченияТекста - - View - false - - - Edit - false - - - - Catalog.ЭлектронноеПисьмоИсходящееПрисоединенныеФайлы.TabularSection.СертификатыШифрования - - View - false - - - Edit - false - - - - DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.Данные - - View - false - - - Edit - false - - - - Task.ЗадачаИсполнителя.Attribute.ДатаНачала - - View - false - - - Edit - false - - - - Catalog.Организации.TabularSection.КонтактнаяИнформация - - View - false - - - Edit - false - - - - Document.ЭлектронноеПисьмоВходящее.Attribute.ОтправительПредставление - - View - false - - - Edit - false - - - - Catalog.ЭлектронноеПисьмоИсходящееПрисоединенныеФайлы.TabularSection.ЭлектронныеПодписи.Attribute.Подпись - - View - false - - - Edit - false - - - - Catalog.ЭлектронноеПисьмоВходящееПрисоединенныеФайлы.Attribute.ИндексКартинки - - View - false - - - Edit - false - - - - DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.ИмяВременногоФайлаПротоколаОбмена - - View - false - - - Edit - false - - - - Document.ЭлектронноеПисьмоВходящее.Attribute.Удалить_Рассмотрено - - View - false - - - Edit - false - - - - Catalog.Валюты.Attribute.НаименованиеПолное - - View - false - - - Edit - false - - - - DataProcessor.ПомощникСозданияОбменаДанными.Attribute.FILEКаталогОбменаИнформацией - - View - false - - - Edit - false - - - - InformationRegister.УдалитьПраваПоЗначениямДоступа.Dimension.ЗначениеДоступа - - View - false - - - Edit - false - - - - Catalog.ДополнительныеОтчетыИОбработки.Attribute.Ответственный - - View - false - - - Edit - false - - - - Document.ЗапланированноеВзаимодействие.TabularSection.Участники - - View - false - - - Edit - false - - - - Catalog.ТелефонныйЗвонокПрисоединенныеФайлы.TabularSection.ЭлектронныеПодписи.Attribute.КомуВыданСертификат - - View - false - - - Edit - false - - - - Catalog.ВерсииФайлов.Attribute.ДатаМодификацииУниверсальная - - View - false - - - Edit - false - - - - DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.ТипУдаленияРегистрацииИзмененийДляУзловОбменаПослеВыгрузки - - View - false - - - Edit - false - - - - Catalog.ГруппыПользователей.Attribute.Комментарий - - View - false - - - Edit - false - - - - ChartOfCharacteristicTypes.ВопросыДляАнкетирования.Attribute.АгрегироватьСуммуВОтчетах - - View - false - - - Edit - false - - - - Document.ЭлектронноеПисьмоИсходящее.Attribute.Автор - - View - false - - - Edit - false - - - - Catalog.ВерсииФайлов.Attribute.РодительскаяВерсия - - View - false - - - Edit - false - - - - Catalog.ВерсииФайлов.Attribute.ИндексКартинки - - View - false - - - Edit - false - - - - Catalog.ВариантыОтчетов.Attribute.КлючВарианта - - View - false - - - Edit - false - - - - Catalog.ВстречаПрисоединенныеФайлы.Attribute.Редактирует - - View - false - - - Edit - false - - - - Catalog.ВариантыОтветовАнкет.Attribute.ТребуетОткрытогоОтвета - - View - false - - - Edit - false - - - - InformationRegister.СоответствияОбъектовИнформационныхБаз.Dimension.УникальныйИдентификаторИсточника - - View - false - - - Edit - false - - - - Catalog.ЗапланированноеВзаимодействиеПрисоединенныеФайлы.StandardAttribute.Predefined - - View - false - - - Edit - false - - - - Catalog.ЗапланированноеВзаимодействиеПрисоединенныеФайлы.StandardAttribute.Ref - - View - false - - - Edit - false - - - - Catalog.ЗапланированноеВзаимодействиеПрисоединенныеФайлы.StandardAttribute.DeletionMark - - View - false - - - Edit - false - - - - Catalog.ЗапланированноеВзаимодействиеПрисоединенныеФайлы.StandardAttribute.IsFolder - - View - false - - - Edit - false - - - - Catalog.ЗапланированноеВзаимодействиеПрисоединенныеФайлы.StandardAttribute.Owner - - View - false - - - Edit - false - - - - Catalog.ЗапланированноеВзаимодействиеПрисоединенныеФайлы.StandardAttribute.Parent - - View - false - - - Edit - false - - - - Catalog.ЗапланированноеВзаимодействиеПрисоединенныеФайлы.StandardAttribute.Description - - View - false - - - Edit - false - - - - Catalog.ЗапланированноеВзаимодействиеПрисоединенныеФайлы.StandardAttribute.Code - - View - false - - - Edit - false - - - - DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.ДатаОкончания - - View - false - - - Edit - false - - - - DataProcessor.СопоставлениеОбъектовИнформационныхБаз.TabularSection.ТаблицаНеутвержденныхСвязей.Attribute.ТипПриемника - - View - false - - - Edit - false - - - - Catalog.ВидыКонтактнойИнформации.Attribute.Тип - - View - false - - - Edit - false - - - - DataProcessor.РезервноеКопированиеИБ.Attribute.КаталогСРезервнымиКопиями - - View - false - - - Edit - false - - - - Document.ЗапланированноеВзаимодействие.TabularSection.НаборыЗначенийДоступа.Attribute.НомерНабора - - View - false - - - Edit - false - - - - ChartOfCharacteristicTypes.ДополнительныеРеквизитыИСведения.Attribute.Подсказка - - View - false - - - Edit - false - - - - DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.ПользовательИнформационнойБазыДляПодключения - - View - false - - - Edit - false - - - - Catalog.ЗапланированноеВзаимодействиеПрисоединенныеФайлы.TabularSection.ЭлектронныеПодписи.Attribute.УстановившийПодпись - - View - false - - - Edit - false - - - - Catalog.ВариантыОтчетов.TabularSection.Размещение.Attribute.УдалитьПодсистема - - View - false - - - Edit - false - - - - Catalog.ДополнительныеОтчетыИОбработки.TabularSection.Назначение.Attribute.УдалитьПолноеИмяОбъектаМетаданных - - View - false - - - Edit - false - - - - DataProcessor.СопоставлениеОбъектовИнформационныхБаз.Attribute.ИмяФайлаСообщенияОбмена - - View - false - - - Edit - false - - - - DataProcessor.СопоставлениеОбъектовИнформационныхБаз.TabularSection.ТаблицаАвтоматическиСопоставленныхОбъектов.Attribute.ИсточникИндексКартинки - - View - false - - - Edit - false - - - - Catalog.ВстречаПрисоединенныеФайлы.TabularSection.СертификатыШифрования.Attribute.Отпечаток - - View - false - - - Edit - false - - - - InformationRegister.УдалитьАдресныйКлассификатор.Dimension.ТипАдресногоЭлемента - - View - false - - - Edit - false - - - - Document.ЭлектронноеПисьмоИсходящее.TabularSection.ПолучателиОтвета - - View - false - - - Edit - false - - - - DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.ФлагОшибки - - View - false - - - Edit - false - - - - Catalog.Файлы.Attribute.ТекстХранилище - - View - false - - - Edit - false - - - - Catalog.ЭлектронноеПисьмоИсходящееПрисоединенныеФайлы.TabularSection.ЭлектронныеПодписи.Attribute.УстановившийПодпись - - View - false - - - Edit - false - - - - Document.Встреча.Attribute.СписокУчастников - - View - false - - - Edit - false - - - - DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.ИмяФайлаПротоколаОбменаЗагрузка - - View - false - - - Edit - false - - - - Catalog.ПрофилиГруппДоступа.TabularSection.ЗначенияДоступа.Attribute.ЗначениеДоступа - - View - false - - - Edit - false - - - - Document.ЗапланированноеВзаимодействие.TabularSection.НаборыЗначенийДоступа.Attribute.ЗначениеДоступа - - View - false - - - Edit - false - - - - DataProcessor.ЗагрузкаКурсовВалют.Attribute.ОкончаниеПериодаЗагрузки - - View - false - - - Edit - false - - - - Document.ТелефонныйЗвонок.Attribute.Важность - - View - false - - - Edit - false - - - - DataProcessor.СопоставлениеОбъектовИнформационныхБаз.TabularSection.ТаблицаАвтоматическиСопоставленныхОбъектов.Attribute.ПриемникПоле1 - - View - false - - - Edit - false - - - - DataProcessor.НастройкаРезервногоКопированияИБ.Attribute.ПроводитьРезервноеКопированиеПриВосстановленииДанных - - View - false - - - Edit - false - - - - Document.ЭлектронноеПисьмоВходящее.Attribute.Тема - - View - false - - - Edit - false - - - - Catalog.ШаблоныАнкет.Attribute.Вступление - - View - false - - - Edit - false - - - - DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.КоличествоОбработанныхОбъектовДляОбновленияСтатуса - - View - false - - - Edit - false - - - - Catalog.ВерсииФайлов.Attribute.ПодписанЭП - - View - false - - - Edit - false - - - - Document.ЭлектронноеПисьмоИсходящее.TabularSection.НаборыЗначенийДоступа.Attribute.Чтение - - View - false - - - Edit - false - - - - Catalog.ЗапланированноеВзаимодействиеПрисоединенныеФайлы.TabularSection.ЭлектронныеПодписи - - View - false - - - Edit - false - - - - Document.Анкета.Attribute.ДатаРедактирования - - View - false - - - Edit - false - - - - InformationRegister.СоставыГруппПользователей.Dimension.Пользователь - - View - false - - - Edit - false - - - - Document.ЗапланированноеВзаимодействие.Attribute.Важность - - View - false - - - Edit - false - - - - Document.ЭлектронноеПисьмоИсходящее.Attribute.Ответственный - - View - false - - - Edit - false - - - - InformationRegister.ОтветыНаВопросыАнкет.Dimension.НомерЯчейки - - View - false - - - Edit - false - - - - Catalog.Файлы.TabularSection.ДополнительныеРеквизиты.Attribute.Свойство - - View - false - - - Edit - false - - - - Catalog.Файлы.Attribute.ИндексКартинки - - View - false - - - Edit - false - - - - DataProcessor.ЗагрузкаКурсовВалют.TabularSection.СписокВалют - - View - false - - - Edit - false - - - - Catalog.ЭлектронноеПисьмоВходящееПрисоединенныеФайлы.Attribute.Размер - - View - false - - - Edit - false - - - - Catalog.ЗапланированноеВзаимодействиеПрисоединенныеФайлы.Attribute.ПутьКФайлу - - View - false - - - Edit - false - - - - Catalog.ЭлектронноеПисьмоИсходящееПрисоединенныеФайлы.TabularSection.ЭлектронныеПодписи - - View - false - - - Edit - false - - - - DataProcessor.ОбновлениеКонфигурации.Attribute.ИсточникОбновления - - View - false - - - Edit - false - - - - DataProcessor.ЗагрузкаКурсовВалют.TabularSection.СписокВалют.Attribute.Кратность - - View - false - - - Edit - false - - - - Document.ЭлектронноеПисьмоВходящее.Attribute.Размер - - View - false - - - Edit - false - - - - Document.ЭлектронноеПисьмоВходящее.TabularSection.НаборыЗначенийДоступа - - View - false - - - Edit - false - - - - BusinessProcess.Задание.Attribute.Содержание - - View - false - - - Edit - false - - - - Catalog.СценарииОбменовДанными.TabularSection.НастройкиОбмена - - View - false - - - Edit - false - - - - Catalog.УчетныеЗаписиЭлектроннойПочты.Attribute.ИспользоватьДляОтправки - - View - false - - - Edit - false - - - - Catalog.Организации.TabularSection.КонтактнаяИнформация.Attribute.ЗначенияПолей - - View - false - - - Edit - false - - - - Document.НазначениеОпросов.TabularSection.Респонденты.Attribute.Респондент - - View - false - - - Edit - false - - - - DataProcessor.ОбновлениеКонфигурации.TabularSection.ДоступныеОбновления.Attribute.Версия2Разряд - - View - false - - - Edit - false - - - - ChartOfCharacteristicTypes.ВопросыДляАнкетирования.Attribute.Формулировка - - View - false - - - Edit - false - - - - DataProcessor.ОбновлениеКонфигурации.Attribute.РезультатОбновления - - View - false - - - Edit - false - - - - Document.ТелефонныйЗвонок.TabularSection.НаборыЗначенийДоступа.Attribute.Чтение - - View - false - - - Edit - false - - - - Document.ТелефонныйЗвонок.Attribute.Ответственный - - View - false - - - Edit - false - - - - Catalog.ТелефонныйЗвонокПрисоединенныеФайлы.Attribute.Зашифрован - - View - false - - - Edit - false - - - - Catalog.СценарииОбменовДанными.TabularSection.НастройкиОбмена.Attribute.ВыполняемоеДействие - - View - false - - - Edit - false - - - - Document.Встреча.Attribute.ДатаНачала - - View - false - - - Edit - false - - - - DataProcessor.ПомощникИнтерактивногоОбменаДанными.TabularSection.ИнформацияСтатистики.Attribute.КоличествоОбъектовВИсточнике - - View - false - - - Edit - false - - - - Document.ЭлектронноеПисьмоВходящее.TabularSection.НаборыЗначенийДоступа.Attribute.НомерНабора - - View - false - - - Edit - false - - - - Catalog.ГруппыДоступа.TabularSection.ВидыДоступа.Attribute.ВидДоступа - - View - false - - - Edit - false - - - - Document.Встреча.TabularSection.Участники.Attribute.Контакт - - View - false - - - Edit - false - - - - Catalog.ДополнительныеОтчетыИОбработки.TabularSection.Команды.Attribute.Идентификатор - - View - false - - - Edit - false - - - - Task.ЗадачаИсполнителя.Attribute.ГруппаИсполнителейЗадач - - View - false - - - Edit - false - - - - DataProcessor.РезервноеКопированиеИБ.Attribute.ВыполнитьРезервноеКопированиеСейчас - - View - false - - - Edit - false - - - - InformationRegister.ПравилаДляОбменаДанными.Resource.ИмяМакетаПравил - - View - false - - - Edit - false - - - - DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.ОткрыватьПротоколыОбменаПослеВыполненияОпераций - - View - false - - - Edit - false - - - - Catalog.ВариантыОтветовАнкет.StandardAttribute.Predefined - - View - false - - - Edit - false - - - - Catalog.ВариантыОтветовАнкет.StandardAttribute.Ref - - View - false - - - Edit - false - - - - Catalog.ВариантыОтветовАнкет.StandardAttribute.DeletionMark - - View - false - - - Edit - false - - - - Catalog.ВариантыОтветовАнкет.StandardAttribute.IsFolder - - View - false - - - Edit - false - - - - Catalog.ВариантыОтветовАнкет.StandardAttribute.Owner - - View - false - - - Edit - false - - - - Catalog.ВариантыОтветовАнкет.StandardAttribute.Parent - - View - false - - - Edit - false - - - - Catalog.ВариантыОтветовАнкет.StandardAttribute.Description - - View - false - - - Edit - false - - - - Catalog.ВариантыОтветовАнкет.StandardAttribute.Code - - View - false - - - Edit - false - - - - InformationRegister.НастройкиТранспортаОбмена.Resource.FTPСжиматьФайлИсходящегоСообщения - - View - false - - - Edit - false - - - - InformationRegister.СоответствияОбъектовИнформационныхБаз.Dimension.УникальныйИдентификаторПриемника - - View - false - - - Edit - false - - - - DataProcessor.ОбновлениеКонфигурации.Attribute.КодПользователяСервераОбновлений - - View - false - - - Edit - false - - - - DataProcessor.СопоставлениеОбъектовИнформационныхБаз.TabularSection.ТаблицаАвтоматическиСопоставленныхОбъектов.Attribute.ПриемникПоле5 - - View - false - - - Edit - false - - - - Catalog.ПапкиФайлов.TabularSection.ДополнительныеРеквизиты.Attribute.Значение - - View - false - - - Edit - false - - - - Document.ЗапланированноеВзаимодействие.TabularSection.Участники.Attribute.КакСвязаться - - View - false - - - Edit - false - - - - DataProcessor.ПомощникИнтерактивногоОбменаДанными.TabularSection.ИнформацияСтатистики.Attribute.ОдинКоМногим - - View - false - - - Edit - false - - - - Catalog.ТелефонныйЗвонокПрисоединенныеФайлы.Attribute.ТипХраненияФайла - - View - false - - - Edit - false - - - - Catalog.ЭлектронноеПисьмоВходящееПрисоединенныеФайлы.TabularSection.ЭлектронныеПодписи.Attribute.Комментарий - - View - false - - - Edit - false - - - - Catalog.ЭлектронноеПисьмоВходящееПрисоединенныеФайлы.Attribute.Редактирует - - View - false - - - Edit - false - - - - Document.Анкета.TabularSection.Состав - - View - false - - - Edit - false - - - - Document.ЭлектронноеПисьмоИсходящее.Attribute.СписокПолучателейПисьма - - View - false - - - Edit - false - - - - InformationRegister.НаличиеПрисоединенныхФайлов.Resource.ЕстьФайлы - - View - false - - - Edit - false - - - - Catalog.ВстречаПрисоединенныеФайлы.Attribute.Автор - - View - false - - - Edit - false - - - - DataProcessor.СопоставлениеОбъектовИнформационныхБаз.TabularSection.ТаблицаАвтоматическиСопоставленныхОбъектов.Attribute.ТипИсточника - - View - false - - - Edit - false - - - - Catalog.ГруппыДоступа.TabularSection.ВидыДоступа - - View - false - - - Edit - false - - - - InformationRegister.ПравилаДляОбменаДанными.Resource.ИмяПланаОбменаИзПравил - - View - false - - - Edit - false - - - - Document.ЭлектронноеПисьмоИсходящее.TabularSection.ПолучателиПисьма.Attribute.Контакт - - View - false - - - Edit - false - - - - Task.ЗадачаИсполнителя.StandardAttribute.Executed - - View - false - - - Edit - false - - - - Task.ЗадачаИсполнителя.StandardAttribute.Description - - View - false - - - Edit - false - - - - Task.ЗадачаИсполнителя.StandardAttribute.RoutePoint - - View - false - - - Edit - false - - - - Task.ЗадачаИсполнителя.StandardAttribute.BusinessProcess - - View - false - - - Edit - false - - - - Task.ЗадачаИсполнителя.StandardAttribute.Ref - - View - false - - - Edit - false - - - - Task.ЗадачаИсполнителя.StandardAttribute.DeletionMark - - View - false - - - Edit - false - - - - Task.ЗадачаИсполнителя.StandardAttribute.Date - - View - false - - - Edit - false - - - - Task.ЗадачаИсполнителя.StandardAttribute.Number - - View - false - - - Edit - false - - - - InformationRegister.ДополнительныеСведения.StandardAttribute.Active - - View - false - - - Edit - false - - - - InformationRegister.ДополнительныеСведения.StandardAttribute.LineNumber - - View - false - - - Edit - false - - - - InformationRegister.ДополнительныеСведения.StandardAttribute.Recorder - - View - false - - - Edit - false - - - - InformationRegister.ДополнительныеСведения.StandardAttribute.Period - - View - false - - - Edit - false - - - - Catalog.Пользователи.TabularSection.КонтактнаяИнформация.Attribute.ЗначенияПолей - - View - false - - - Edit - false - - - - DataProcessor.СопоставлениеОбъектовИнформационныхБаз.TabularSection.ТаблицаАвтоматическиСопоставленныхОбъектов.Attribute.ПриемникПоле2 - - View - false - - - Edit - false - - - - DataProcessor.ПомощникСозданияОбменаДанными.Attribute.ВидТранспортаСообщенийОбмена - - View - false - - - Edit - false - - - - InformationRegister.ПутиКПрограммамЭлектроннойПодписиИШифрованияНаСерверахLinux.StandardAttribute.Active - - View - false - - - Edit - false - - - - InformationRegister.ПутиКПрограммамЭлектроннойПодписиИШифрованияНаСерверахLinux.StandardAttribute.LineNumber - - View - false - - - Edit - false - - - - InformationRegister.ПутиКПрограммамЭлектроннойПодписиИШифрованияНаСерверахLinux.StandardAttribute.Recorder - - View - false - - - Edit - false - - - - InformationRegister.ПутиКПрограммамЭлектроннойПодписиИШифрованияНаСерверахLinux.StandardAttribute.Period - - View - false - - - Edit - false - - - - Catalog.ДополнительныеОтчетыИОбработки.Attribute.Комментарий - - View - false - - - Edit - false - - - - DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.ИмяСервераИнформационнойБазыДляПодключения - - View - false - - - Edit - false - - - - Catalog.ВерсииФайлов.Attribute.ТекстХранилище - - View - false - - - Edit - false - - - - Document.ЭлектронноеПисьмоИсходящее.TabularSection.ПолучателиПисьма.Attribute.Представление - - View - false - - - Edit - false - - - - DataProcessor.ОбновлениеКонфигурации.TabularSection.ДоступныеОбновления.Attribute.ФайлОбновления - - View - false - - - Edit - false - - - - Catalog.ТелефонныйЗвонокПрисоединенныеФайлы.Attribute.СтатусИзвлеченияТекста - - View - false - - - Edit - false - - - - InformationRegister.СостоянияОбменовДанными.Dimension.ДействиеПриОбмене - - View - false - - - Edit - false - - - - Document.НазначениеОпросов.StandardAttribute.Posted - - View - false - - - Edit - false - - - - Document.НазначениеОпросов.StandardAttribute.Ref - - View - false - - - Edit - false - - - - Document.НазначениеОпросов.StandardAttribute.DeletionMark - - View - false - - - Edit - false - - - - Document.НазначениеОпросов.StandardAttribute.Date - - View - false - - - Edit - false - - - - Document.НазначениеОпросов.StandardAttribute.Number - - View - false - - - Edit - false - - - - DataProcessor.ПомощникСозданияОбменаДанными.Attribute.FILEСжиматьФайлИсходящегоСообщения - - View - false - - - Edit - false - - - - InformationRegister.ПравилаДляОбменаДанными.Resource.ИсточникПравил - - View - false - - - Edit - false - - - - Catalog.ПрофилиГруппДоступа.TabularSection.ВидыДоступа - - View - false - - - Edit - false - - - - DataProcessor.ОбновлениеКонфигурации.Attribute.КодЗадачиПланировщика - - View - false - - - Edit - false - - - - Catalog.СценарииОбменовДанными.StandardAttribute.Predefined - - View - false - - - Edit - false - - - - Catalog.СценарииОбменовДанными.StandardAttribute.Ref - - View - false - - - Edit - false - - - - Catalog.СценарииОбменовДанными.StandardAttribute.DeletionMark - - View - false - - - Edit - false - - - - Catalog.СценарииОбменовДанными.StandardAttribute.IsFolder - - View - false - - - Edit - false - - - - Catalog.СценарииОбменовДанными.StandardAttribute.Owner - - View - false - - - Edit - false - - - - Catalog.СценарииОбменовДанными.StandardAttribute.Parent - - View - false - - - Edit - false - - - - Catalog.СценарииОбменовДанными.StandardAttribute.Description - - View - false - - - Edit - false - - - - Catalog.СценарииОбменовДанными.StandardAttribute.Code - - View - false - - - Edit - false - - - - Catalog.ВариантыОтчетов.TabularSection.Размещение - - View - false - - - Edit - false - - - - Document.ЭлектронноеПисьмоВходящее.TabularSection.ПолучателиПисьма.Attribute.Адрес - - View - false - - - Edit - false - - - - InformationRegister.РабочиеКаталогиФайлов.Resource.Путь - - View - false - - - Edit - false - - - - Document.ЭлектронноеПисьмоВходящее.Attribute.ИдентификаторНаСервере - - View - false - - - Edit - false - - - - InformationRegister.ПравилаДляОбменаДанными.Resource.ИмяФайлаПравил - - View - false - - - Edit - false - - - - ChartOfCharacteristicTypes.ДополнительныеРеквизитыИСведения.Attribute.ФорматСвойства - - View - false - - - Edit - false - - - - Catalog.УчетныеЗаписиЭлектроннойПочты.Attribute.SMTPАутентификация - - View - false - - - Edit - false - - - - InformationRegister.ФайлыВРабочемКаталоге.StandardAttribute.Active - - View - false - - - Edit - false - - - - InformationRegister.ФайлыВРабочемКаталоге.StandardAttribute.LineNumber - - View - false - - - Edit - false - - - - InformationRegister.ФайлыВРабочемКаталоге.StandardAttribute.Recorder - - View - false - - - Edit - false - - - - InformationRegister.ФайлыВРабочемКаталоге.StandardAttribute.Period - - View - false - - - Edit - false - - - - Document.ЭлектронноеПисьмоВходящее.TabularSection.ПолучателиКопий - - View - false - - - Edit - false - - - - DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.КаталогИнформационнойБазыДляПодключения - - View - false - - - Edit - false - - - - ChartOfCharacteristicTypes.ВопросыДляАнкетирования.Attribute.МинимальноеЗначение - - View - false - - - Edit - false - - - - InformationRegister.УдалитьАдресныйКлассификатор.StandardAttribute.Active - - View - false - - - Edit - false - - - - InformationRegister.УдалитьАдресныйКлассификатор.StandardAttribute.LineNumber - - View - false - - - Edit - false - - - - InformationRegister.УдалитьАдресныйКлассификатор.StandardAttribute.Recorder - - View - false - - - Edit - false - - - - InformationRegister.УдалитьАдресныйКлассификатор.StandardAttribute.Period - - View - false - - - Edit - false - - - - Catalog.ЗапланированноеВзаимодействиеПрисоединенныеФайлы.Attribute.ТекстХранилище - - View - false - - - Edit - false - - - - Catalog.УчетныеЗаписиЭлектроннойПочты.Attribute.ОставлятьКопииСообщенийНаСервере - - View - false - - - Edit - false - - - - DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.РежимОбмена - - View - false - - - Edit - false - - - - Document.Встреча.Attribute.Автор - - View - false - - - Edit - false - - - - DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.ВыводВПротоколСообщенийОбОшибках - - View - false - - - Edit - false - - - - Catalog.ВнешниеПользователи.Attribute.ИдентификаторПользователяИБ - - View - false - - - Edit - false - - - - Catalog.ДополнительныеОтчетыИОбработки.Attribute.БезопасныйРежим - - View - false - - - Edit - false - - - - InformationRegister.ПрисоединенныеФайлы.Resource.ХранимыйФайл - - View - false - - - Edit - false - - - - InformationRegister.ИсполнителиЗадач.StandardAttribute.Active - - View - false - - - Edit - false - - - - InformationRegister.ИсполнителиЗадач.StandardAttribute.LineNumber - - View - false - - - Edit - false - - - - InformationRegister.ИсполнителиЗадач.StandardAttribute.Recorder - - View - false - - - Edit - false - - - - InformationRegister.ИсполнителиЗадач.StandardAttribute.Period - - View - false - - - Edit - false - - - - InformationRegister.УдалитьПраваПоЗначениямДоступа.Resource.РаспространяетсяВИерархии - - View - false - - - Edit - false - - - - Catalog.ВстречаПрисоединенныеФайлы.Attribute.ТекстХранилище - - View - false - - - Edit - false - - - - InformationRegister.КалендарныеГрафики.Dimension.Год - - View - false - - - Edit - false - - - - Document.ТелефонныйЗвонок.StandardAttribute.Posted - - View - false - - - Edit - false - - - - Document.ТелефонныйЗвонок.StandardAttribute.Ref - - View - false - - - Edit - false - - - - Document.ТелефонныйЗвонок.StandardAttribute.DeletionMark - - View - false - - - Edit - false - - - - Document.ТелефонныйЗвонок.StandardAttribute.Date - - View - false - - - Edit - false - - - - Document.ТелефонныйЗвонок.StandardAttribute.Number - - View - false - - - Edit - false - - - - Catalog.ВидыКонтактнойИнформации.Attribute.РедактированиеТолькоВДиалоге - - View - false - - - Edit - false - - - - Catalog.ВопросыШаблонаАнкеты.Attribute.Обязательный - - View - false - - - Edit - false - - - - Catalog.РолиИсполнителей.StandardAttribute.Predefined - - View - false - - - Edit - false - - - - Catalog.РолиИсполнителей.StandardAttribute.Ref - - View - false - - - Edit - false - - - - Catalog.РолиИсполнителей.StandardAttribute.DeletionMark - - View - false - - - Edit - false - - - - Catalog.РолиИсполнителей.StandardAttribute.IsFolder - - View - false - - - Edit - false - - - - Catalog.РолиИсполнителей.StandardAttribute.Owner - - View - false - - - Edit - false - - - - Catalog.РолиИсполнителей.StandardAttribute.Parent - - View - false - - - Edit - false - - - - Catalog.РолиИсполнителей.StandardAttribute.Description - - View - false - - - Edit - false - - - - Catalog.РолиИсполнителей.StandardAttribute.Code - - View - false - - - Edit - false - - - - DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.ОбработкиНастройкиВыгрузки - - View - false - - - Edit - false - - - - InformationRegister.СостоянияОбменовДанными.Resource.РезультатВыполненияОбмена - - View - false - - - Edit - false - - - - DataProcessor.БлокировкаРаботыПользователей.Attribute.ОкончаниеДействияБлокировки - - View - false - - - Edit - false - - - - InformationRegister.ВерсииОбъектов.Dimension.НомерВерсии - - View - false - - - Edit - false - - - - Catalog.ВерсииФайлов.Attribute.Комментарий - - View - false - - - Edit - false - - - - Document.ЗапланированноеВзаимодействие.Attribute.Описание - - View - false - - - Edit - false - - - - Document.ЭлектронноеПисьмоВходящее.TabularSection.НаборыЗначенийДоступа.Attribute.ЗначениеДоступа - - View - false - - - Edit - false - - - - BusinessProcess.Задание.Attribute.Проверяющий - - View - false - - - Edit - false - - - - DataProcessor.ТранспортСообщенийОбменаEMAIL.Attribute.ШаблонИмениФайлаСообщения - - View - false - - - Edit - false - - - - Catalog.Организации.TabularSection.КонтактнаяИнформация.Attribute.Город - - View - false - - - Edit - false - - - - DataProcessor.ПомощникСозданияОбменаДанными.Attribute.ВариантРаботыМастера - - View - false - - - Edit - false - - - - DataProcessor.ОбновлениеКонфигурации.TabularSection.ДоступныеОбновления.Attribute.НомерДискаИТС - - View - false - - - Edit - false - - - - Document.ЭлектронноеПисьмоВходящее.Attribute.ИдентификаторСообщения - - View - false - - - Edit - false - - - - InformationRegister.ИсполнителиЗадач.Dimension.Исполнитель - - View - false - - - Edit - false - - - - Document.ЭлектронноеПисьмоИсходящее.TabularSection.НаборыЗначенийДоступа.Attribute.Изменение - - View - false - - - Edit - false - - - - InformationRegister.УдалитьПраваПоЗначениямДоступа.Dimension.Таблица - - View - false - - - Edit - false - - - - Catalog.ЗапланированноеВзаимодействиеПрисоединенныеФайлы.Attribute.Том - - View - false - - - Edit - false - - - - DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.ИмяФайлаОбработчиковСобытий - - View - false - - - Edit - false - - - - DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.КоличествоЭлементовВТранзакцииПриВыгрузкеДляПлановОбмена - - View - false - - - Edit - false - - - - InformationRegister.НастройкиТранспортаОбмена.Resource.ВидТранспортаСообщенийОбменаПоУмолчанию - - View - false - - - Edit - false - - - - InformationRegister.КурсыВалют.Resource.Кратность - - View - false - - - Edit - false - - - - DataProcessor.ТранспортСообщенийОбменаFILE.Attribute.ПарольАрхиваСообщенияОбмена - - View - false - - - Edit - false - - - - DataProcessor.ТранспортСообщенийОбменаEMAIL.Attribute.EMAILСжиматьФайлИсходящегоСообщения - - View - false - - - Edit - false - - - - Catalog.ВстречаПрисоединенныеФайлы.Attribute.ИндексКартинки - - View - false - - - Edit - false - - - - DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.АутентификацияWindowsИнформационнойБазыДляПодключения - - View - false - - - Edit - false - - - - Document.ТелефонныйЗвонок.Attribute.Удалить_РассмотретьПосле - - View - false - - - Edit - false - - - - DataProcessor.ОбновлениеКонфигурации.TabularSection.ДоступныеОбновления - - View - false - - - Edit - false - - - - Catalog.ВстречаПрисоединенныеФайлы.TabularSection.СертификатыШифрования.Attribute.Представление - - View - false - - - Edit - false - - - - DataProcessor.СопоставлениеОбъектовИнформационныхБаз.TabularSection.ТаблицаАвтоматическиСопоставленныхОбъектов.Attribute.ИсточникПоле5 - - View - false - - - Edit - false - - - - Catalog.ВстречаПрисоединенныеФайлы.Attribute.СтатусИзвлеченияТекста - - View - false - - - Edit - false - - - - BusinessProcess.Задание.Attribute.СрокИсполнения - - View - false - - - Edit - false - - - - DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.ТаблицаПравилВыгрузки - - View - false - - - Edit - false - - - - Catalog.ВариантыОтчетов.Attribute.Описание - - View - false - - - Edit - false - - - - DataProcessor.ЗагрузкаКурсовВалют.TabularSection.СписокВалют.Attribute.ДатаКурса - - View - false - - - Edit - false - - - - Document.Встреча.Attribute.Ответственный - - View - false - - - Edit - false - - - - Catalog.Файлы.TabularSection.СертификатыШифрования.Attribute.Представление - - View - false - - - Edit - false - - - - DataProcessor.ПомощникИнтерактивногоОбменаДанными.TabularSection.ИнформацияСтатистики.Attribute.ТипИсточникаСтрокой - - View - false - - - Edit - false - - - - DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.ТипИнформационнойБазыДляПодключения - - View - false - - - Edit - false - - - - Catalog.ВерсииФайлов.Attribute.Автор - - View - false - - - Edit - false - - - - Catalog.ГруппыДоступа.Attribute.Профиль - - View - false - - - Edit - false - - - - DataProcessor.ЗагрузкаКурсовВалют.TabularSection.СписокВалют.Attribute.Курс - - View - false - - - Edit - false - - - - Catalog.ВерсииФайлов.Attribute.ТипХраненияФайла - - View - false - - - Edit - false - - - - DataProcessor.ТранспортСообщенийОбменаFTP.Attribute.FTPСоединениеПользователь - - View - false - - - Edit - false - - - - DataProcessor.ПомощникИнтерактивногоОбменаДанными.TabularSection.ИнформацияСтатистики.Attribute.ПоляПоиска - - View - false - - - Edit - false - - - - InformationRegister.ДанныеБизнесПроцессов.Resource.ДатаЗавершения - - View - false - - - Edit - false - - - - Catalog.ВопросыШаблонаАнкеты.TabularSection.ПредопределенныеОтветы.Attribute.ЭлементарныйВопрос - - View - false - - - Edit - false - - - - InformationRegister.УдалитьНастройкиВерсионированияОбъектов.Dimension.ТипОбъекта - - View - false - - - Edit - false - - - - DataProcessor.ТранспортСообщенийОбменаFTP.Attribute.ШаблонИмениФайлаСообщения - - View - false - - - Edit - false - - - - ChartOfCharacteristicTypes.ВопросыДляАнкетирования.Attribute.МаксимальноеЗначение - - View - false - - - Edit - false - - - - InformationRegister.ОбщиеНастройкиУзловИнформационныхБаз.Dimension.УзелИнформационнойБазы - - View - false - - - Edit - false - - - - DataProcessor.ПомощникСозданияОбменаДанными.Attribute.ЭтоНастройкаРаспределеннойИнформационнойБазы - - View - false - - - Edit - false - - - - Document.ЭлектронноеПисьмоИсходящее.Attribute.Предмет - - View - false - - - Edit - false - - - - Catalog.ЭлектронноеПисьмоИсходящееПрисоединенныеФайлы.Attribute.Расширение - - View - false - - - Edit - false - - - - Catalog.Файлы.Attribute.Описание - - View - false - - - Edit - false - - - - Catalog.ТелефонныйЗвонокПрисоединенныеФайлы.StandardAttribute.Predefined - - View - false - - - Edit - false - - - - Catalog.ТелефонныйЗвонокПрисоединенныеФайлы.StandardAttribute.Ref - - View - false - - - Edit - false - - - - Catalog.ТелефонныйЗвонокПрисоединенныеФайлы.StandardAttribute.DeletionMark - - View - false - - - Edit - false - - - - Catalog.ТелефонныйЗвонокПрисоединенныеФайлы.StandardAttribute.IsFolder - - View - false - - - Edit - false - - - - Catalog.ТелефонныйЗвонокПрисоединенныеФайлы.StandardAttribute.Owner - - View - false - - - Edit - false - - - - Catalog.ТелефонныйЗвонокПрисоединенныеФайлы.StandardAttribute.Parent - - View - false - - - Edit - false - - - - Catalog.ТелефонныйЗвонокПрисоединенныеФайлы.StandardAttribute.Description - - View - false - - - Edit - false - - - - Catalog.ТелефонныйЗвонокПрисоединенныеФайлы.StandardAttribute.Code - - View - false - - - Edit - false - - - - Catalog.ДополнительныеОтчетыИОбработки.Attribute.Версия - - View - false - - - Edit - false - - - - Document.ЭлектронноеПисьмоИсходящее.TabularSection.НаборыЗначенийДоступа.Attribute.НомерНабора - - View - false - - - Edit - false - - - - DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.НеВыводитьНикакихИнформационныхСообщенийПользователю - - View - false - - - Edit - false - - - - Document.ЗапланированноеВзаимодействие.StandardAttribute.Posted - - View - false - - - Edit - false - - - - Document.ЗапланированноеВзаимодействие.StandardAttribute.Ref - - View - false - - - Edit - false - - - - Document.ЗапланированноеВзаимодействие.StandardAttribute.DeletionMark - - View - false - - - Edit - false - - - - Document.ЗапланированноеВзаимодействие.StandardAttribute.Date - - View - false - - - Edit - false - - - - Document.ЗапланированноеВзаимодействие.StandardAttribute.Number - - View - false - - - Edit - false - - - - Catalog.Файлы.Attribute.ТекущаяВерсияТом - - View - false - - - Edit - false - - - - InformationRegister.УдалитьАдресныйКлассификатор.Resource.АльтернативныеНазвания - - View - false - - - Edit - false - - - - Document.ЭлектронноеПисьмоВходящее.Attribute.ВнутреннийЗаголовок - - View - false - - - Edit - false - - - - Catalog.Файлы.Attribute.Редактирует - - View - false - - - Edit - false - - - - Catalog.ТелефонныйЗвонокПрисоединенныеФайлы.TabularSection.ЭлектронныеПодписи - - View - false - - - Edit - false - - - - Catalog.ВстречаПрисоединенныеФайлы.Attribute.ДатаМодификацииУниверсальная - - View - false - - - Edit - false - - - - InformationRegister.НастройкиТранспортаОбмена.Resource.EMAILМаксимальныйДопустимыйРазмерСообщения - - View - false - - - Edit - false - - - - InformationRegister.ПрисоединенныеФайлы.Dimension.ПрисоединенныйФайл - - View - false - - - Edit - false - - - - InformationRegister.СостоянияОбменовДанными.Dimension.УзелИнформационнойБазы - - View - false - - - Edit - false - - - - Document.Встреча.StandardAttribute.Posted - - View - false - - - Edit - false - - - - Document.Встреча.StandardAttribute.Ref - - View - false - - - Edit - false - - - - Document.Встреча.StandardAttribute.DeletionMark - - View - false - - - Edit - false - - - - Document.Встреча.StandardAttribute.Date - - View - false - - - Edit - false - - - - Document.Встреча.StandardAttribute.Number - - View - false - - - Edit - false - - - - DataProcessor.ТранспортСообщенийОбменаFTP.Attribute.FTPСоединениеМаксимальныйДопустимыйРазмерСообщения - - View - false - - - Edit - false - - - - DataProcessor.ТранспортСообщенийОбменаFTP.Attribute.FTPСоединениеПароль - - View - false - - - Edit - false - - - - Document.ЭлектронноеПисьмоИсходящее.Attribute.ТипТекста - - View - false - - - Edit - false - - - - DataProcessor.СопоставлениеОбъектовИнформационныхБаз.TabularSection.ТаблицаСортировки.Attribute.Использование - - View - false - - - Edit - false - - - - Catalog.ЗапланированноеВзаимодействиеПрисоединенныеФайлы.TabularSection.СертификатыШифрования.Attribute.Представление - - View - false - - - Edit - false - - - - Catalog.Пользователи.StandardAttribute.Predefined - - View - false - - - Edit - false - - - - Catalog.Пользователи.StandardAttribute.Ref - - View - false - - - Edit - false - - - - Catalog.Пользователи.StandardAttribute.DeletionMark - - View - false - - - Edit - false - - - - Catalog.Пользователи.StandardAttribute.IsFolder - - View - false - - - Edit - false - - - - Catalog.Пользователи.StandardAttribute.Owner - - View - false - - - Edit - false - - - - Catalog.Пользователи.StandardAttribute.Parent - - View - false - - - Edit - false - - - - Catalog.Пользователи.StandardAttribute.Description - - View - false - - - Edit - false - - - - Catalog.Пользователи.StandardAttribute.Code - - View - false - - - Edit - false - - - - Document.ЭлектронноеПисьмоВходящее.Attribute.Кодировка - - View - false - - - Edit - false - - - - Catalog.УчетныеЗаписиЭлектроннойПочты.Attribute.УдалитьОтветственныйЗаОбработкуПисем - - View - false - - - Edit - false - - - - Catalog.ГруппыДоступа.TabularSection.Пользователи.Attribute.Пользователь - - View - false - - - Edit - false - - - - DataProcessor.ПомощникСозданияОбменаДанными.Attribute.ИспользоватьПараметрыТранспортаFILE - - View - false - - - Edit - false - - - - InformationRegister.НазначениеДополнительныхОбработок.Resource.ИспользоватьЗаполнениеОбъекта - - View - false - - - Edit - false - - - - Catalog.Файлы.Attribute.ТекущаяВерсия - - View - false - - - Edit - false - - - - InformationRegister.ВерсииОбъектов.Attribute.АвторВерсии - - View - false - - - Edit - false - - - - DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.КоличествоОбъектовНаТранзакцию - - View - false - - - Edit - false - - - - Catalog.ВариантыОтчетов.Attribute.ВидимостьПоУмолчанию - - View - false - - - Edit - false - - - - DataProcessor.ПомощникСозданияОбменаДанными.Attribute.ИспользоватьПараметрыТранспортаEMAIL - - View - false - - - Edit - false - - - - Document.ЭлектронноеПисьмоИсходящее.TabularSection.ПолучателиСкрытыхКопий.Attribute.Представление - - View - false - - - Edit - false - - - - DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.ВыводВОкноСообщенийИнформационныхСообщений - - View - false - - - Edit - false - - - - Catalog.ЭлектронноеПисьмоВходящееПрисоединенныеФайлы.TabularSection.ЭлектронныеПодписи - - View - false - - - Edit - false - - - - Catalog.ТелефонныйЗвонокПрисоединенныеФайлы.TabularSection.ЭлектронныеПодписи.Attribute.ДатаПодписи - - View - false - - - Edit - false - - - - Catalog.ТелефонныйЗвонокПрисоединенныеФайлы.Attribute.ИндексКартинки - - View - false - - - Edit - false - - - - Catalog.ВстречаПрисоединенныеФайлы.Attribute.ВладелецФайла - - View - false - - - Edit - false - - - - InformationRegister.НастройкиТранспортаОбмена.Resource.EMAILСжиматьФайлИсходящегоСообщения - - View - false - - - Edit - false - - - - Catalog.Файлы.Attribute.ДатаСоздания - - View - false - - - Edit - false - - - - Catalog.ВерсииФайлов.TabularSection.ЭлектронныеПодписи.Attribute.Подпись - - View - false - - - Edit - false - - - - DataProcessor.СопоставлениеОбъектовИнформационныхБаз.TabularSection.ТаблицаАвтоматическиСопоставленныхОбъектов.Attribute.ИсточникПоле2 - - View - false - - - Edit - false - - - - BusinessProcess.Задание.Attribute.Важность - - View - false - - - Edit - false - - - - Document.ЭлектронноеПисьмоВходящее.TabularSection.НаборыЗначенийДоступа.Attribute.Изменение - - View - false - - - Edit - false - - - - DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.СохраненныеНастройки - - View - false - - - Edit - false - - - - InformationRegister.ДанныеБизнесПроцессов.Resource.Наименование - - View - false - - - Edit - false - - - - Document.Анкета.TabularSection.Состав.Attribute.ЭлементарныйВопрос - - View - false - - - Edit - false - - - - Catalog.ПрофилиГруппДоступа.TabularSection.Роли - - View - false - - - Edit - false - - - - DataProcessor.ОбновлениеКонфигурации.Attribute.ДатаВремяОбновления - - View - false - - - Edit - false - - - - DataProcessor.ПомощникСозданияОбменаДанными.Attribute.ИмяФайлаНастроекОбменаДаннымиДляЗагрузки - - View - false - - - Edit - false - - - - Catalog.ВерсииФайлов.Attribute.ПутьКФайлу - - View - false - - - Edit - false - - - - Catalog.ВерсииФайлов.Attribute.Том - - View - false - - - Edit - false - - - - Catalog.ЭлектронноеПисьмоВходящееПрисоединенныеФайлы.TabularSection.ЭлектронныеПодписи.Attribute.Подпись - - View - false - - - Edit - false - - - - Catalog.ПапкиФайлов.TabularSection.ДополнительныеРеквизиты.Attribute.Свойство - - View - false - - - Edit - false - - - - Catalog.Файлы.TabularSection.ДополнительныеРеквизиты.Attribute.Значение - - View - false - - - Edit - false - - - - Catalog.ВопросыШаблонаАнкеты.Attribute.ЭлементарныйВопрос - - View - false - - - Edit - false - - - - InformationRegister.СостоянияОбменовДанными.StandardAttribute.Active - - View - false - - - Edit - false - - - - InformationRegister.СостоянияОбменовДанными.StandardAttribute.LineNumber - - View - false - - - Edit - false - - - - InformationRegister.СостоянияОбменовДанными.StandardAttribute.Recorder - - View - false - - - Edit - false - - - - InformationRegister.СостоянияОбменовДанными.StandardAttribute.Period - - View - false - - - Edit - false - - - - Document.НазначениеОпросов.Attribute.ДатаНачала - - View - false - - - Edit - false - - - - Catalog.ГруппыДоступа.Attribute.Пользователь - - View - false - - - Edit - false - - - - Catalog.Организации.TabularSection.КонтактнаяИнформация.Attribute.ДоменноеИмяСервера - - View - false - - - Edit - false - - - - Catalog.ВерсииФайлов.Attribute.ПолноеНаименование - - View - false - - - Edit - false - - - - InformationRegister.ПользовательскиеНастройкиДоступаКОбработкам.Dimension.ДополнительныйОтчетИлиОбработка - - View - false - - - Edit - false - - - - DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.ИмяФайлаВнешнейОбработкиОбработчиковСобытий - - View - false - - - Edit - false - - - - InformationRegister.УдалитьНастройкиВерсионированияОбъектов.StandardAttribute.Active - - View - false - - - Edit - false - - - - InformationRegister.УдалитьНастройкиВерсионированияОбъектов.StandardAttribute.LineNumber - - View - false - - - Edit - false - - - - InformationRegister.УдалитьНастройкиВерсионированияОбъектов.StandardAttribute.Recorder - - View - false - - - Edit - false - - - - InformationRegister.УдалитьНастройкиВерсионированияОбъектов.StandardAttribute.Period - - View - false - - - Edit - false - - - - Catalog.ДополнительныеОтчетыИОбработки.Attribute.Вид - - View - false - - - Edit - false - - - - Document.ЭлектронноеПисьмоИсходящее.Attribute.ИдентификаторСообщения - - View - false - - - Edit - false - - - - Catalog.СценарииОбменовДанными.Attribute.ИспользоватьРегламентноеЗадание - - View - false - - - Edit - false - - - - InformationRegister.ПользовательскиеМакетыПечати.Attribute.Использование - - View - false - - - Edit - false - - - - Catalog.Валюты.Attribute.ОсновнаяВалюта - - View - false - - - Edit - false - - - - BusinessProcess.Задание.Attribute.Исполнитель - - View - false - - - Edit - false - - - - DataProcessor.ТранспортСообщенийОбменаFTP.Attribute.ПарольАрхиваСообщенияОбмена - - View - false - - - Edit - false - - - - Document.НазначениеОпросов.TabularSection.Респонденты - - View - false - - - Edit - false - - - - Task.ЗадачаИсполнителя.Attribute.СрокИсполнения - - View - false - - - Edit - false - - - - DataProcessor.ЗагрузкаКурсовВалют.Attribute.НачалоПериодаЗагрузки - - View - false - - - Edit - false - - - - Catalog.ГруппыДоступа.Attribute.Ответственный - - View - false - - - Edit - false - - - - Document.ЗапланированноеВзаимодействие.Attribute.Ответственный - - View - false - - - Edit - false - - - - DataProcessor.ПомощникСозданияОбменаДанными.Attribute.FTPСоединениеМаксимальныйДопустимыйРазмерСообщения - - View - false - - - Edit - false - - - - DataProcessor.НастройкаРезервногоКопированияИБ.Attribute.КоличествоКопий - - View - false - - - Edit - false - - - - Catalog.ЭлектронноеПисьмоИсходящееПрисоединенныеФайлы.Attribute.СтатусИзвлеченияТекста - - View - false - - - Edit - false - - - - InformationRegister.НазначениеДополнительныхОбработок.Resource.ИспользоватьПечатныеФормы - - View - false - - - Edit - false - - - - Catalog.СценарииОбменовДанными.TabularSection.НастройкиОбмена.Attribute.УзелИнформационнойБазы - - View - false - - - Edit - false - - - - Document.ЭлектронноеПисьмоИсходящее.TabularSection.ПолучателиПисьма - - View - false - - - Edit - false - - - - InformationRegister.ПравилаДляОбменаДанными.Resource.ПравилаЗачитанные - - View - false - - - Edit - false - - - - DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.НеЗадаватьВопросПриЗагрузкеДанныхПриОткрытииОбработки - - View - false - - - Edit - false - - - - Catalog.ПрофилиГруппДоступа.TabularSection.ЗначенияДоступа.Attribute.ВидДоступа - - View - false - - - Edit - false - - - - Catalog.Пользователи.TabularSection.КонтактнаяИнформация.Attribute.АдресЭП - - View - false - - - Edit - false - - - - Catalog.ГруппыПользователей.TabularSection.Состав - - View - false - - - Edit - false - - - - Document.ЭлектронноеПисьмоИсходящее.TabularSection.ПолучателиКопий.Attribute.Адрес - - View - false - - - Edit - false - - - - Catalog.ВстречаПрисоединенныеФайлы.TabularSection.ЭлектронныеПодписи.Attribute.Отпечаток - - View - false - - - Edit - false - - - - Catalog.ДополнительныеОтчетыИОбработки.Attribute.ИспользоватьДляФормыОбъекта - - View - false - - - Edit - false - - - - Catalog.УчетныеЗаписиЭлектроннойПочты.Attribute.ПортСервераИсходящейПочты - - View - false - - - Edit - false - - - - DataProcessor.РезервноеКопированиеИБ.Attribute.КодТипаРезервногоКопирования - - View - false - - - Edit - false - - - - Catalog.ЭлектронноеПисьмоВходящееПрисоединенныеФайлы.TabularSection.ЭлектронныеПодписи.Attribute.Сертификат - - View - false - - - Edit - false - - - - InformationRegister.НастройкиТранспортаОбмена.Resource.FTPСоединениеМаксимальныйДопустимыйРазмерСообщения - - View - false - - - Edit - false - - - - Document.ТелефонныйЗвонок.Attribute.АбонентКакСвязаться - - View - false - - - Edit - false - - - - Catalog.ВстречаПрисоединенныеФайлы.Attribute.Размер - - View - false - - - Edit - false - - - - Document.ЭлектронноеПисьмоИсходящее.Attribute.Тема - - View - false - - - Edit - false - - - - DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.ЗаписыватьРегистрыНаборамиЗаписей - - View - false - - - Edit - false - - - - Catalog.ТелефонныйЗвонокПрисоединенныеФайлы.TabularSection.ЭлектронныеПодписи.Attribute.Подпись - - View - false - - - Edit - false - - - - Catalog.Файлы.Attribute.Автор - - View - false - - - Edit - false - - - - InformationRegister.СоответствияОбъектовИнформационныхБаз.Attribute.ОбъектВыгруженПоСсылке - - View - false - - - Edit - false - - - - InformationRegister.ДанныеБизнесПроцессов.Resource.Стартован - - View - false - - - Edit - false - - - - Catalog.ТелефонныйЗвонокПрисоединенныеФайлы.TabularSection.ЭлектронныеПодписи.Attribute.Отпечаток - - View - false - - - Edit - false - - - - Document.ЗапланированноеВзаимодействие.Attribute.Удалить_Рассмотрено - - View - false - - - Edit - false - - - - Document.ЭлектронноеПисьмоИсходящее.TabularSection.НаборыЗначенийДоступа - - View - false - - - Edit - false - - - - Document.ТелефонныйЗвонок.TabularSection.НаборыЗначенийДоступа - - View - false - - - Edit - false - - - - InformationRegister.НазначениеДополнительныхОбработок.Dimension.УдалитьТипОбъекта - - View - false - - - Edit - false - - - - Catalog.Пользователи.TabularSection.КонтактнаяИнформация.Attribute.НомерТелефонаБезКодов - - View - false - - - Edit - false - - - - DataProcessor.ПомощникСозданияОбменаДанными.Attribute.FTPСоединениеПассивноеСоединение - - View - false - - - Edit - false - - - - Catalog.УчетныеЗаписиЭлектроннойПочты.StandardAttribute.Predefined - - View - false - - - Edit - false - - - - Catalog.УчетныеЗаписиЭлектроннойПочты.StandardAttribute.Ref - - View - false - - - Edit - false - - - - Catalog.УчетныеЗаписиЭлектроннойПочты.StandardAttribute.DeletionMark - - View - false - - - Edit - false - - - - Catalog.УчетныеЗаписиЭлектроннойПочты.StandardAttribute.IsFolder - - View - false - - - Edit - false - - - - Catalog.УчетныеЗаписиЭлектроннойПочты.StandardAttribute.Owner - - View - false - - - Edit - false - - - - Catalog.УчетныеЗаписиЭлектроннойПочты.StandardAttribute.Parent - - View - false - - - Edit - false - - - - Catalog.УчетныеЗаписиЭлектроннойПочты.StandardAttribute.Description - - View - false - - - Edit - false - - - - Catalog.УчетныеЗаписиЭлектроннойПочты.StandardAttribute.Code - - View - false - - - Edit - false - - - - InformationRegister.ПравилаДляОбменаДанными.Dimension.ИмяПланаОбмена - - View - false - - - Edit - false - - - - InformationRegister.НастройкиТранспортаОбмена.Resource.FTPСоединениеПорт - - View - false - - - Edit - false - - - - DataProcessor.РезервноеКопированиеИБ.Attribute.ПроводитьРезервноеКопированиеПриВосстановленииДанных - - View - false - - - Edit - false - - - - Catalog.ВстречаПрисоединенныеФайлы.Attribute.ПодписанЭП - - View - false - - - Edit - false - - - - DataProcessor.ПомощникИнтерактивногоОбменаДанными.Attribute.ВидТранспортаСообщенийОбмена - - View - false - - - Edit - false - - - - Catalog.ВариантыОтчетов.Attribute.ТипОтчета - - View - false - - - Edit - false - - - - Catalog.ШаблоныАнкет.Attribute.РедактированиеШаблонаЗавершено - - View - false - - - Edit - false - - - - DataProcessor.ПомощникИнтерактивногоОбменаДанными.TabularSection.ИнформацияСтатистики.Attribute.СинхронизироватьПоИдентификатору - - View - false - - - Edit - false - - - - Catalog.Файлы.TabularSection.СертификатыШифрования - - View - false - - - Edit - false - - - - Document.ЭлектронноеПисьмоИсходящее.TabularSection.ПолучателиОтвета.Attribute.Представление - - View - false - - - Edit - false - - - - Document.Встреча.Attribute.МестоПроведенияВстречи - - View - false - - - Edit - false - - - - Catalog.ВстречаПрисоединенныеФайлы.Attribute.ТипХраненияФайла - - View - false - - - Edit - false - - - - InformationRegister.ПользовательскиеНастройкиДоступаКОбработкам.StandardAttribute.Active - - View - false - - - Edit - false - - - - InformationRegister.ПользовательскиеНастройкиДоступаКОбработкам.StandardAttribute.LineNumber - - View - false - - - Edit - false - - - - InformationRegister.ПользовательскиеНастройкиДоступаКОбработкам.StandardAttribute.Recorder - - View - false - - - Edit - false - - - - InformationRegister.ПользовательскиеНастройкиДоступаКОбработкам.StandardAttribute.Period - - View - false - - - Edit - false - - - - BusinessProcess.Задание.Attribute.Состояние - - View - false - - - Edit - false - - - - Document.ЭлектронноеПисьмоИсходящее.Attribute.ИдентификаторыОснований - - View - false - - - Edit - false - - - - Catalog.ЭлектронноеПисьмоИсходящееПрисоединенныеФайлы.Attribute.Размер - - View - false - - - Edit - false - - - - Catalog.ГруппыДоступа.TabularSection.ВидыДоступа.Attribute.ВсеРазрешены - - View - false - - - Edit - false - - - - Catalog.ВстречаПрисоединенныеФайлы.Attribute.ДатаСоздания - - View - false - - - Edit - false - - - - InformationRegister.ПравилаДляОбменаДанными.Resource.ИнформацияОПравилах - - View - false - - - Edit - false - - - - Catalog.ЗапланированноеВзаимодействиеПрисоединенныеФайлы.TabularSection.ЭлектронныеПодписи.Attribute.ИмяФайлаПодписи - - View - false - - - Edit - false - - - - InformationRegister.КалендарныеГрафики.Resource.ДеньВключенВГрафик - - View - false - - - Edit - false - - - - Document.ЭлектронноеПисьмоИсходящее.Attribute.ИдентификаторОснования - - View - false - - - Edit - false - - - - Catalog.ВерсииФайлов.Attribute.ДатаСоздания - - View - false - - - Edit - false - - - - InformationRegister.УдалитьНастройкиВерсионированияОбъектов.Resource.Вариант - - View - false - - - Edit - false - - - - DataProcessor.ОбновлениеКонфигурации.Attribute.РежимОбновления - - View - false - - - Edit - false - - - - DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.ОбработкиНастройкиЗагрузки - - View - false - - - Edit - false - - - - Document.Анкета.StandardAttribute.Posted - - View - false - - - Edit - false - - - - Document.Анкета.StandardAttribute.Ref - - View - false - - - Edit - false - - - - Document.Анкета.StandardAttribute.DeletionMark - - View - false - - - Edit - false - - - - Document.Анкета.StandardAttribute.Date - - View - false - - - Edit - false - - - - Document.Анкета.StandardAttribute.Number - - View - false - - - Edit - false - - - - Catalog.УчетныеЗаписиЭлектроннойПочты.Attribute.СерверВходящейПочты - - View - false - - - Edit - false - - - - Document.ЗапланированноеВзаимодействие.Attribute.Предмет - - View - false - - - Edit - false - - - - Document.ЭлектронноеПисьмоИсходящее.Attribute.Удалить_РассмотретьПосле - - View - false - - - Edit - false - - - - InformationRegister.ОтветыНаВопросыАнкет.Dimension.ЭлементарныйВопрос - - View - false - - - Edit - false - - - - Catalog.Организации.TabularSection.КонтактнаяИнформация.Attribute.Представление - - View - false - - - Edit - false - - - - Task.ЗадачаИсполнителя.Attribute.ДатаПринятияКИсполнению - - View - false - - - Edit - false - - - - Catalog.ВерсииФайлов.TabularSection.ЭлектронныеПодписи.Attribute.Комментарий - - View - false - - - Edit - false - - - - Document.ЭлектронноеПисьмоВходящее.Attribute.ИдентификаторОснования - - View - false - - - Edit - false - - - - Document.ЭлектронноеПисьмоВходящее.Attribute.ЕстьВложения - - View - false - - - Edit - false - - - - Catalog.ЭлектронноеПисьмоИсходящееПрисоединенныеФайлы.Attribute.ТипХраненияФайла - - View - false - - - Edit - false - - - - InformationRegister.ДанныеБизнесПроцессов.Dimension.БизнесПроцесс - - View - false - - - Edit - false - - - - DataProcessor.ПомощникСозданияОбменаДанными.Attribute.EMAILМаксимальныйДопустимыйРазмерСообщения - - View - false - - - Edit - false - - - - Catalog.ПрофилиГруппДоступа.TabularSection.ЗначенияДоступа - - View - false - - - Edit - false - - - - DataProcessor.СопоставлениеОбъектовИнформационныхБаз.TabularSection.ТаблицаАвтоматическиСопоставленныхОбъектов.Attribute.ТипПриемника - - View - false - - - Edit - false - - - - Document.ЗапланированноеВзаимодействие.TabularSection.Участники.Attribute.Контакт - - View - false - - - Edit - false - - - - InformationRegister.ДанныеБизнесПроцессов.Resource.ПометкаУдаления - - View - false - - - Edit - false - - - - BusinessProcess.Задание.Attribute.НомерИтерации - - View - false - - - Edit - false - - - - Catalog.ЭлектронноеПисьмоИсходящееПрисоединенныеФайлы.StandardAttribute.Predefined - - View - false - - - Edit - false - - - - Catalog.ЭлектронноеПисьмоИсходящееПрисоединенныеФайлы.StandardAttribute.Ref - - View - false - - - Edit - false - - - - Catalog.ЭлектронноеПисьмоИсходящееПрисоединенныеФайлы.StandardAttribute.DeletionMark - - View - false - - - Edit - false - - - - Catalog.ЭлектронноеПисьмоИсходящееПрисоединенныеФайлы.StandardAttribute.IsFolder - - View - false - - - Edit - false - - - - Catalog.ЭлектронноеПисьмоИсходящееПрисоединенныеФайлы.StandardAttribute.Owner - - View - false - - - Edit - false - - - - Catalog.ЭлектронноеПисьмоИсходящееПрисоединенныеФайлы.StandardAttribute.Parent - - View - false - - - Edit - false - - - - Catalog.ЭлектронноеПисьмоИсходящееПрисоединенныеФайлы.StandardAttribute.Description - - View - false - - - Edit - false - - - - Catalog.ЭлектронноеПисьмоИсходящееПрисоединенныеФайлы.StandardAttribute.Code - - View - false - - - Edit - false - - - - InformationRegister.НазначениеДополнительныхОбработок.StandardAttribute.Active - - View - false - - - Edit - false - - - - InformationRegister.НазначениеДополнительныхОбработок.StandardAttribute.LineNumber - - View - false - - - Edit - false - - - - InformationRegister.НазначениеДополнительныхОбработок.StandardAttribute.Recorder - - View - false - - - Edit - false - - - - InformationRegister.НазначениеДополнительныхОбработок.StandardAttribute.Period - - View - false - - - Edit - false - - - - Catalog.ВидыКонтактнойИнформации.StandardAttribute.Predefined - - View - false - - - Edit - false - - - - Catalog.ВидыКонтактнойИнформации.StandardAttribute.Ref - - View - false - - - Edit - false - - - - Catalog.ВидыКонтактнойИнформации.StandardAttribute.DeletionMark - - View - false - - - Edit - false - - - - Catalog.ВидыКонтактнойИнформации.StandardAttribute.IsFolder - - View - false - - - Edit - false - - - - Catalog.ВидыКонтактнойИнформации.StandardAttribute.Owner - - View - false - - - Edit - false - - - - Catalog.ВидыКонтактнойИнформации.StandardAttribute.Parent - - View - false - - - Edit - false - - - - Catalog.ВидыКонтактнойИнформации.StandardAttribute.Description - - View - false - - - Edit - false - - - - Catalog.ВидыКонтактнойИнформации.StandardAttribute.Code - - View - false - - - Edit - false - - - - DataProcessor.ПомощникИнтерактивногоОбменаДанными.Attribute.ИмяВременногоКаталогаСообщенийОбмена - - View - false - - - Edit - false - - - - InformationRegister.НастройкиТранспортаОбмена.Resource.FILEКаталогОбменаИнформацией - - View - false - - - Edit - false - - - - InformationRegister.СостоянияОбменовДанными.Resource.ДатаНачала - - View - false - - - Edit - false - - - - Document.ЭлектронноеПисьмоИсходящее.TabularSection.ПолучателиОтвета.Attribute.Контакт - - View - false - - - Edit - false - - - - DataProcessor.ПомощникСозданияОбменаДанными.Attribute.ИмяФайлаНастроекОбменаДанными - - View - false - - - Edit - false - - - - InformationRegister.ДополнительныеСведения.Dimension.Свойство - - View - false - - - Edit - false - - - - Catalog.СтраныМира - - Read - true - - - Insert - true - - - Update - true - - - View - true - - - InteractiveInsert - true - - - Edit - true - - - InteractiveSetDeletionMark - true - - - InteractiveClearDeletionMark - true - - - InputByString - true - - - - DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.ТаблицаНастройкиПараметров - - View - false - - - Edit - false - - - - Document.НазначениеОпросов.Attribute.ДатаОкончания - - View - false - - - Edit - false - - - - InformationRegister.НомераОтсканированныхФайлов.Resource.Номер - - View - false - - - Edit - false - - - - DataProcessor.СопоставлениеОбъектовИнформационныхБаз.TabularSection.ТаблицаНеутвержденныхСвязей - - View - false - - - Edit - false - - - - DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.КомментарийПриВыгрузкеДанных - - View - false - - - Edit - false - - - - Catalog.Файлы.Attribute.ПодписанЭП - - View - false - - - Edit - false - - - - Catalog.ДополнительныеОтчетыИОбработки.TabularSection.Назначение - - View - false - - - Edit - false - - - - Catalog.Организации.TabularSection.КонтактнаяИнформация.Attribute.Тип - - View - false - - - Edit - false - - - - Catalog.ЭлектронноеПисьмоИсходящееПрисоединенныеФайлы.Attribute.ПутьКФайлу - - View - false - - - Edit - false - - - - Document.Анкета.TabularSection.Состав.Attribute.Ответ - - View - false - - - Edit - false - - - - Catalog.Файлы.Attribute.ХранитьВерсии - - View - false - - - Edit - false - - - - BusinessProcess.Задание.Attribute.ГлавнаяЗадача - - View - false - - - Edit - false - - - - InformationRegister.ФайлыВРабочемКаталоге.Resource.ДатаПомещенияВРабочийКаталог - - View - false - - - Edit - false - - - - DataProcessor.СопоставлениеОбъектовИнформационныхБаз.Attribute.ТипПриемникаСтрокой - - View - false - - - Edit - false - - - - Document.ЭлектронноеПисьмоВходящее.TabularSection.ПолучателиПисьма - - View - false - - - Edit - false - - - - InformationRegister.ИсполнителиЗадач.Dimension.РольИсполнителя - - View - false - - - Edit - false - - - - InformationRegister.СоответствияОбъектовИнформационныхБаз.Resource.УникальныйИдентификаторИсточникаСтрокой - - View - false - - - Edit - false - - - - Catalog.ЭлектронноеПисьмоВходящееПрисоединенныеФайлы.Attribute.ДатаСоздания - - View - false - - - Edit - false - - - - Document.ЭлектронноеПисьмоВходящее.Attribute.Предмет - - View - false - - - Edit - false - - - - DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.ТаблицаПравилОчистки - - View - false - - - Edit - false - - - - Document.ЭлектронноеПисьмоВходящее.TabularSection.ПолучателиОтвета.Attribute.Представление - - View - false - - - Edit - false - - - - Catalog.ВстречаПрисоединенныеФайлы.Attribute.Расширение - - View - false - - - Edit - false - - - - DataProcessor.ГрупповоеИзменениеРеквизитов.Attribute.ИзменятьВТранзакции - - View - false - - - Edit - false - - - - DocumentJournal.Взаимодействия.StandardAttribute.Type - - View - false - - - Edit - false - - - - DocumentJournal.Взаимодействия.StandardAttribute.Ref - - View - false - - - Edit - false - - - - DocumentJournal.Взаимодействия.StandardAttribute.Date - - View - false - - - Edit - false - - - - DocumentJournal.Взаимодействия.StandardAttribute.Posted - - View - false - - - Edit - false - - - - DocumentJournal.Взаимодействия.StandardAttribute.DeletionMark - - View - false - - - Edit - false - - - - DocumentJournal.Взаимодействия.StandardAttribute.Number - - View - false - - - Edit - false - - - - Catalog.ВстречаПрисоединенныеФайлы.Attribute.Описание - - View - false - - - Edit - false - - - - Catalog.ЗапланированноеВзаимодействиеПрисоединенныеФайлы.TabularSection.ЭлектронныеПодписи.Attribute.Отпечаток - - View - false - - - Edit - false - - - - DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.ВерсияПлатформыИнформационнойБазыДляПодключения - - View - false - - - Edit - false - - - - DataProcessor.НастройкаРезервногоКопированияИБ.Attribute.КаталогСРезервнымиКопиями - - View - false - - - Edit - false - - - - DataProcessor.СопоставлениеОбъектовИнформационныхБаз.Attribute.ЭтоУдалениеОбъекта - - View - false - - - Edit - false - - - - Catalog.ПрофилиГруппДоступа.TabularSection.ВидыДоступа.Attribute.ВсеРазрешены - - View - false - - - Edit - false - - - - DataProcessor.ПомощникИнтерактивногоОбменаДанными.TabularSection.ИнформацияСтатистики.Attribute.КоличествоОбъектовВПриемнике - - View - false - - - Edit - false - - - - DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.АрхивироватьФайл - - View - false - - - Edit - false - - - - Catalog.УчетныеЗаписиЭлектроннойПочты.Attribute.ПользовательSMTP - - View - false - - - Edit - false - - - - DataProcessor.ТранспортСообщенийОбменаFTP.Attribute.FTPСоединениеПуть - - View - false - - - Edit - false - - - - InformationRegister.ПутиКПрограммамЭлектроннойПодписиИШифрованияНаСерверахLinux.Dimension.ИмяКомпьютера - - View - false - - - Edit - false - - - - DataProcessor.СопоставлениеОбъектовИнформационныхБаз.Attribute.УзелИнформационнойБазы - - View - false - - - Edit - false - - - - Catalog.ТелефонныйЗвонокПрисоединенныеФайлы.TabularSection.СертификатыШифрования - - View - false - - - Edit - false - - - - DataProcessor.БлокировкаРаботыПользователей.Attribute.КодДляРазблокировки - - View - false - - - Edit - false - - - - Document.ЭлектронноеПисьмоИсходящее.TabularSection.ПолучателиКопий.Attribute.Представление - - View - false - - - Edit - false - - - - DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.ВыгружатьТолькоРазрешенные - - View - false - - - Edit - false - - - - Catalog.Организации.Attribute.Префикс - - View - false - - - Edit - false - - - - Catalog.Организации.TabularSection.КонтактнаяИнформация.Attribute.Регион - - View - false - - - Edit - false - - - - InformationRegister.ВерсииОбъектов.Attribute.ДатаВерсии - - View - false - - - Edit - false - - - - ChartOfCharacteristicTypes.ДополнительныеРеквизитыИСведения.Attribute.МногострочноеПолеВвода - - View - false - - - Edit - false - - - - DataProcessor.ТранспортСообщенийОбменаFTP.Attribute.FTPСжиматьФайлИсходящегоСообщения - - View - false - - - Edit - false - - - - InformationRegister.ОтветыНаВопросыАнкет.Attribute.ОткрытыйОтвет - - View - false - - - Edit - false - - - - Catalog.ТелефонныйЗвонокПрисоединенныеФайлы.TabularSection.ЭлектронныеПодписи.Attribute.Сертификат - - View - false - - - Edit - false - - - - Catalog.ЭлектронноеПисьмоВходящееПрисоединенныеФайлы.Attribute.Описание - - View - false - - - Edit - false - - - - Catalog.ЭлектронноеПисьмоИсходящееПрисоединенныеФайлы.Attribute.ТекстХранилище - - View - false - - - Edit - false - - - - InformationRegister.ПутиКПрограммамЭлектроннойПодписиИШифрованияНаСерверахLinux.Resource.ПутьКПрограмме - - View - false - - - Edit - false - - - - Catalog.ВариантыОтчетов.Attribute.Автор - - View - false - - - Edit - false - - - - DataProcessor.КонвертацияОбъектовРаспределенныхИнформационныхБаз.Attribute.УзелИнформационнойБазы - - View - false - - - Edit - false - - - - DataProcessor.ПомощникИнтерактивногоОбменаДанными.TabularSection.ИнформацияСтатистики.Attribute.ИмяТаблицыПриемника - - View - false - - - Edit - false - - - - Catalog.ВариантыОтчетов.TabularSection.УдалитьИсключенияБыстрогоДоступа.Attribute.УдалитьПользователь - - View - false - - - Edit - false - - - - DataProcessor.ОбновлениеКонфигурации.Attribute.ИспользоватьРасписаниеДляПроверкиОбновления - - View - false - - - Edit - false - - - - DataProcessor.ОбновлениеКонфигурации.Attribute.ЗапомнитьПарольСервераОбновлений - - View - false - - - Edit - false - - - - Catalog.ЗапланированноеВзаимодействиеПрисоединенныеФайлы.Attribute.Расширение - - View - false - - - Edit - false - - - - Catalog.ЭлектронноеПисьмоИсходящееПрисоединенныеФайлы.Attribute.ДатаСоздания - - View - false - - - Edit - false - - - - Catalog.ВерсииФайлов.Attribute.Расширение - - View - false - - - Edit - false - - - - InformationRegister.НазначениеДополнительныхОбработок.Resource.ИспользоватьСозданиеСвязанныхОбъектов - - View - false - - - Edit - false - - - - Document.Анкета.TabularSection.Состав.Attribute.ОткрытыйОтвет - - View - false - - - Edit - false - - - - DataProcessor.ГрупповоеИзменениеРеквизитов.Attribute.ИспользуютсяДопРеквизиты - - View - false - - - Edit - false - - - - Catalog.ВерсииФайлов.TabularSection.ЭлектронныеПодписи.Attribute.УстановившийПодпись - - View - false - - - Edit - false - - - - Document.Встреча.Attribute.Важность - - View - false - - - Edit - false - - - - Catalog.ВстречаПрисоединенныеФайлы.Attribute.Изменил - - View - false - - - Edit - false - - - - InformationRegister.СоставыГруппПользователей.StandardAttribute.Active - - View - false - - - Edit - false - - - - InformationRegister.СоставыГруппПользователей.StandardAttribute.LineNumber - - View - false - - - Edit - false - - - - InformationRegister.СоставыГруппПользователей.StandardAttribute.Recorder - - View - false - - - Edit - false - - - - InformationRegister.СоставыГруппПользователей.StandardAttribute.Period - - View - false - - - Edit - false - - - - Catalog.ДополнительныеОтчетыИОбработки.TabularSection.Разделы - - View - false - - - Edit - false - - - - Catalog.ТелефонныйЗвонокПрисоединенныеФайлы.Attribute.Автор - - View - false - - - Edit - false - - - - Document.ТелефонныйЗвонок.Attribute.Входящий - - View - false - - - Edit - false - - - - DataProcessor.ПомощникИнтерактивногоОбменаДанными.TabularSection.ИнформацияСтатистики.Attribute.ИспользоватьПредварительныйПросмотр - - View - false - - - Edit - false - - - - Catalog.Валюты.Attribute.Наценка - - View - false - - - Edit - false - - - - InformationRegister.ПользовательскиеМакетыПечати.StandardAttribute.Active - - View - false - - - Edit - false - - - - InformationRegister.ПользовательскиеМакетыПечати.StandardAttribute.LineNumber - - View - false - - - Edit - false - - - - InformationRegister.ПользовательскиеМакетыПечати.StandardAttribute.Recorder - - View - false - - - Edit - false - - - - InformationRegister.ПользовательскиеМакетыПечати.StandardAttribute.Period - - View - false - - - Edit - false - - - - InformationRegister.ПользовательскиеНастройкиДоступаКОбработкам.Resource.Доступно - - View - false - - - Edit - false - - - - DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.ВестиДополнительныйКонтрольЗаписиВXML - - View - false - - - Edit - false - - - - Document.ЭлектронноеПисьмоИсходящее.TabularSection.ПолучателиКопий - - View - false - - - Edit - false - - - - InformationRegister.ОтветыНаВопросыАнкет.Dimension.Анкета - - View - false - - - Edit - false - - - - Document.ТелефонныйЗвонок.TabularSection.НаборыЗначенийДоступа.Attribute.Изменение - - View - false - - - Edit - false - - - - Catalog.УчетныеЗаписиЭлектроннойПочты.Attribute.ИспользоватьДляПолучения - - View - false - - - Edit - false - - - - Task.ЗадачаИсполнителя.AddressingAttribute.Исполнитель - - View - false - - - Edit - false - - - - Catalog.ТелефонныйЗвонокПрисоединенныеФайлы.Attribute.Описание - - View - false - - - Edit - false - - - - Catalog.ЭлектронноеПисьмоВходящееПрисоединенныеФайлы.Attribute.ВладелецФайла - - View - false - - - Edit - false - - - - Catalog.ВопросыШаблонаАнкеты.Attribute.Заметки - - View - false - - - Edit - false - - - - Catalog.ВерсииФайлов.TabularSection.ЭлектронныеПодписи.Attribute.Отпечаток - - View - false - - - Edit - false - - - - DataProcessor.ОбновлениеКонфигурации.Attribute.ВосстанавливатьИнформационнуюБазу - - View - false - - - Edit - false - - - - DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.ВерсияПравилОбмена - - View - false - - - Edit - false - - - - InformationRegister.УдалитьАдресныйКлассификатор.Resource.Индекс - - View - false - - - Edit - false - - - - Catalog.ЭлектронноеПисьмоИсходящееПрисоединенныеФайлы.TabularSection.ЭлектронныеПодписи.Attribute.ИмяФайлаПодписи - - View - false - - - Edit - false - - - - DataProcessor.ОбновлениеКонфигурации.TabularSection.ДоступныеОбновления.Attribute.ПутьКЛокальномуФайлуОбновления - - View - false - - - Edit - false - - - - InformationRegister.СостоянияОбменовДанными.Resource.ДатаОкончания - - View - false - - - Edit - false - - - - ChartOfCharacteristicTypes.ДополнительныеРеквизитыИСведения.Attribute.Комментарий - - View - false - - - Edit - false - - - - Catalog.ДополнительныеОтчетыИОбработки.TabularSection.Разделы.Attribute.УдалитьИмяРаздела - - View - false - - - Edit - false - - - - Catalog.ЗапланированноеВзаимодействиеПрисоединенныеФайлы.Attribute.ТипХраненияФайла - - View - false - - - Edit - false - - - - DataProcessor.ПомощникИнтерактивногоОбменаДанными.TabularSection.ИнформацияСтатистики.Attribute.КоличествоОбъектовСопоставленных - - View - false - - - Edit - false - - - - DataProcessor.ПомощникИнтерактивногоОбменаДанными.TabularSection.ИнформацияСтатистики.Attribute.Ключ - - View - false - - - Edit - false - - - - Catalog.ЗапланированноеВзаимодействиеПрисоединенныеФайлы.Attribute.ДатаСоздания - - View - false - - - Edit - false - - - - Catalog.ВариантыОтчетов.TabularSection.УдалитьИсключенияБыстрогоДоступа - - View - false - - - Edit - false - - - - InformationRegister.ДанныеБизнесПроцессов.StandardAttribute.Active - - View - false - - - Edit - false - - - - InformationRegister.ДанныеБизнесПроцессов.StandardAttribute.LineNumber - - View - false - - - Edit - false - - - - InformationRegister.ДанныеБизнесПроцессов.StandardAttribute.Recorder - - View - false - - - Edit - false - - - - InformationRegister.ДанныеБизнесПроцессов.StandardAttribute.Period - - View - false - - - Edit - false - - - - Catalog.ЭлектронноеПисьмоВходящееПрисоединенныеФайлы.Attribute.ТипХраненияФайла - - View - false - - - Edit - false - - - - Document.ЭлектронноеПисьмоИсходящее.StandardAttribute.Posted - - View - false - - - Edit - false - - - - Document.ЭлектронноеПисьмоИсходящее.StandardAttribute.Ref - - View - false - - - Edit - false - - - - Document.ЭлектронноеПисьмоИсходящее.StandardAttribute.DeletionMark - - View - false - - - Edit - false - - - - Document.ЭлектронноеПисьмоИсходящее.StandardAttribute.Date - - View - false - - - Edit - false - - - - Document.ЭлектронноеПисьмоИсходящее.StandardAttribute.Number - - View - false - - - Edit - false - - - - DataProcessor.ТранспортСообщенийОбменаFILE.Attribute.FILEКаталогОбменаИнформацией - - View - false - - - Edit - false - - - - Catalog.ТомаХраненияФайлов.Attribute.МаксимальныйРазмер - - View - false - - - Edit - false - - - - Catalog.ВстречаПрисоединенныеФайлы.TabularSection.ЭлектронныеПодписи.Attribute.Подпись - - View - false - - - Edit - false - - - - DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.Комментарий - - View - false - - - Edit - false - - - - Catalog.Файлы.Attribute.ТекущаяВерсияРасширение - - View - false - - - Edit - false - - - - Catalog.ЗапланированноеВзаимодействиеПрисоединенныеФайлы.TabularSection.ЭлектронныеПодписи.Attribute.КомуВыданСертификат - - View - false - - - Edit - false - - - - Document.ЭлектронноеПисьмоВходящее.Attribute.ОтправительАдрес - - View - false - - - Edit - false - - - - Catalog.ЭлектронноеПисьмоИсходящееПрисоединенныеФайлы.TabularSection.ЭлектронныеПодписи.Attribute.Комментарий - - View - false - - - Edit - false - - - - DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.ОбрезатьСтрокиСправа - - View - false - - - Edit - false - - - - Catalog.ВопросыШаблонаАнкеты.TabularSection.ПредопределенныеОтветы - - View - false - - - Edit - false - - - - Catalog.Файлы.Attribute.ВладелецФайла - - View - false - - - Edit - false - - - - DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.ИспользоватьТранзакции - - View - false - - - Edit - false - - - - Document.ЭлектронноеПисьмоВходящее.TabularSection.ПолучателиОтвета.Attribute.Адрес - - View - false - - - Edit - false - - - - Catalog.ЗапланированноеВзаимодействиеПрисоединенныеФайлы.TabularSection.СертификатыШифрования.Attribute.Отпечаток - - View - false - - - Edit - false - - - - BusinessProcess.Задание.Attribute.РезультатВыполнения - - View - false - - - Edit - false - - - - InformationRegister.ДатыЗапретаИзменения.Dimension.Объект - - View - false - - - Edit - false - - - - Catalog.ДополнительныеОтчетыИОбработки.StandardAttribute.Predefined - - View - false - - - Edit - false - - - - Catalog.ДополнительныеОтчетыИОбработки.StandardAttribute.Ref - - View - false - - - Edit - false - - - - Catalog.ДополнительныеОтчетыИОбработки.StandardAttribute.DeletionMark - - View - false - - - Edit - false - - - - Catalog.ДополнительныеОтчетыИОбработки.StandardAttribute.IsFolder - - View - false - - - Edit - false - - - - Catalog.ДополнительныеОтчетыИОбработки.StandardAttribute.Owner - - View - false - - - Edit - false - - - - Catalog.ДополнительныеОтчетыИОбработки.StandardAttribute.Parent - - View - false - - - Edit - false - - - - Catalog.ДополнительныеОтчетыИОбработки.StandardAttribute.Description - - View - false - - - Edit - false - - - - Catalog.ДополнительныеОтчетыИОбработки.StandardAttribute.Code - - View - false - - - Edit - false - - - - Catalog.ТомаХраненияФайлов.Attribute.ПолныйПутьLinux - - View - false - - - Edit - false - - - - Catalog.ВнешниеПользователи.StandardAttribute.Predefined - - View - false - - - Edit - false - - - - Catalog.ВнешниеПользователи.StandardAttribute.Ref - - View - false - - - Edit - false - - - - Catalog.ВнешниеПользователи.StandardAttribute.DeletionMark - - View - false - - - Edit - false - - - - Catalog.ВнешниеПользователи.StandardAttribute.IsFolder - - View - false - - - Edit - false - - - - Catalog.ВнешниеПользователи.StandardAttribute.Owner - - View - false - - - Edit - false - - - - Catalog.ВнешниеПользователи.StandardAttribute.Parent - - View - false - - - Edit - false - - - - Catalog.ВнешниеПользователи.StandardAttribute.Description - - View - false - - - Edit - false - - - - Catalog.ВнешниеПользователи.StandardAttribute.Code - - View - false - - - Edit - false - - - - Catalog.УчетныеЗаписиЭлектроннойПочты.Attribute.ВремяОжидания - - View - false - - - Edit - false - - - - Catalog.ЭлектронноеПисьмоВходящееПрисоединенныеФайлы.TabularSection.ЭлектронныеПодписи.Attribute.ДатаПодписи - - View - false - - - Edit - false - - - - Catalog.ПапкиФайлов.StandardAttribute.Predefined - - View - false - - - Edit - false - - - - Catalog.ПапкиФайлов.StandardAttribute.Ref - - View - false - - - Edit - false - - - - Catalog.ПапкиФайлов.StandardAttribute.DeletionMark - - View - false - - - Edit - false - - - - Catalog.ПапкиФайлов.StandardAttribute.IsFolder - - View - false - - - Edit - false - - - - Catalog.ПапкиФайлов.StandardAttribute.Owner - - View - false - - - Edit - false - - - - Catalog.ПапкиФайлов.StandardAttribute.Parent - - View - false - - - Edit - false - - - - Catalog.ПапкиФайлов.StandardAttribute.Description - - View - false - - - Edit - false - - - - Catalog.ПапкиФайлов.StandardAttribute.Code - - View - false - - - Edit - false - - - - DataProcessor.ПомощникСозданияОбменаДанными.Attribute.ПарольАрхиваСообщенияОбмена - - View - false - - - Edit - false - - - - Catalog.ЭлектронноеПисьмоВходящееПрисоединенныеФайлы.Attribute.ТекстХранилище - - View - false - - - Edit - false - - - - DataProcessor.ОбновлениеКонфигурации.Attribute.ИмяКаталогаРезервнойКопииИБ - - View - false - - - Edit - false - - - - Catalog.ВерсииФайлов.TabularSection.ЭлектронныеПодписи.Attribute.КомуВыданСертификат - - View - false - - - Edit - false - - - - Document.Встреча.TabularSection.Участники.Attribute.ПредставлениеКонтакта - - View - false - - - Edit - false - - - - DataProcessor.ЗагрузкаКурсовВалют.TabularSection.СписокВалют.Attribute.КодВалюты - - View - false - - - Edit - false - - - - InformationRegister.КурсыВалют.Resource.Курс - - View - false - - - Edit - false - - - - Catalog.ВстречаПрисоединенныеФайлы.TabularSection.СертификатыШифрования.Attribute.Сертификат - - View - false - - - Edit - false - - - - Document.ЗапланированноеВзаимодействие.Attribute.Удалить_РассмотретьПосле - - View - false - - - Edit - false - - - - DataProcessor.ПомощникИнтерактивногоОбменаДанными.TabularSection.ИнформацияСтатистики.Attribute.ТипОбъектаСтрокой - - View - false - - - Edit - false - - - - DataProcessor.РезервноеКопированиеИБ.Attribute.ВариантРасписанияРезервногоКопирования - - View - false - - - Edit - false - - - - Catalog.ЭлектронноеПисьмоВходящееПрисоединенныеФайлы.TabularSection.ЭлектронныеПодписи.Attribute.ИмяФайлаПодписи - - View - false - - - Edit - false - - - - Document.ЭлектронноеПисьмоИсходящее.TabularSection.ПолучателиСкрытыхКопий - - View - false - - - Edit - false - - - - DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.ИспользоватьОтборПоДатеДляВсехОбъектов - - View - false - - - Edit - false - - - - InformationRegister.ФайлыВРабочемКаталоге.Resource.ВРабочемКаталогеВладельца - - View - false - - - Edit - false - - - - Catalog.УчетныеЗаписиЭлектроннойПочты.Attribute.АдресЭлектроннойПочты - - View - false - - - Edit - false - - - - InformationRegister.ФайлыВРабочемКаталоге.Dimension.Версия - - View - false - - - Edit - false - - - - Catalog.ЗапланированноеВзаимодействиеПрисоединенныеФайлы.TabularSection.СертификатыШифрования - - View - false - - - Edit - false - - - - Catalog.ЭлектронноеПисьмоИсходящееПрисоединенныеФайлы.TabularSection.ЭлектронныеПодписи.Attribute.КомуВыданСертификат - - View - false - - - Edit - false - - - - Catalog.ВидыКонтактнойИнформации.Attribute.РеквизитДопУпорядочивания - - View - false - - - Edit - false - - - - Document.ЭлектронноеПисьмоВходящее.Attribute.УчетнаяЗапись - - View - false - - - Edit - false - - - - Catalog.ЭлектронноеПисьмоВходящееПрисоединенныеФайлы.Attribute.ПутьКФайлу - - View - false - - - Edit - false - - - - InformationRegister.РабочиеКаталогиФайлов.Dimension.Пользователь - - View - false - - - Edit - false - - - - DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.ЗаписыватьВИнформационнуюБазуТолькоИзмененныеОбъекты - - View - false - - - Edit - false - - - - InformationRegister.НаличиеПрисоединенныхФайлов.Attribute.ИдентификаторОбъекта - - View - false - - - Edit - false - - - - Catalog.ЭлектронноеПисьмоВходящееПрисоединенныеФайлы.TabularSection.СертификатыШифрования.Attribute.Представление - - View - false - - - Edit - false - - - - DataProcessor.ПомощникСозданияОбменаДанными.Attribute.FTPСжиматьФайлИсходящегоСообщения - - View - false - - - Edit - false - - - - ChartOfCharacteristicTypes.ВопросыДляАнкетирования.Attribute.ЗаполнятьАвтоматически - - View - false - - - Edit - false - - - - Document.НазначениеОпросов.Attribute.ТипРеспондентов - - View - false - - - Edit - false - - - - Document.ЭлектронноеПисьмоВходящее.Attribute.ИдентификаторыОснований - - View - false - - - Edit - false - - - - DataProcessor.ПомощникИнтерактивногоОбменаДанными.Attribute.УзелИнформационнойБазы - - View - false - - - Edit - false - - - - DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.ФлагРежимОтладкиОбработчиков - - View - false - - - Edit - false - - - - Catalog.ЗапланированноеВзаимодействиеПрисоединенныеФайлы.TabularSection.ЭлектронныеПодписи.Attribute.Подпись - - View - false - - - Edit - false - - - - Catalog.Пользователи.Attribute.ИдентификаторПользователяИБ - - View - false - - - Edit - false - - - - Catalog.Файлы.TabularSection.СертификатыШифрования.Attribute.Отпечаток - - View - false - - - Edit - false - - - - DataProcessor.СопоставлениеОбъектовИнформационныхБаз.Attribute.ПоляТаблицыПриемника - - View - false - - - Edit - false - - - - InformationRegister.ДатыЗапретаИзменения.Attribute.Комментарий - - View - false - - - Edit - false - - - - Catalog.Файлы.Attribute.ТекущаяВерсияНомерВерсии - - View - false - - - Edit - false - - - - DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.ИмяФайлаПравилОбмена - - View - false - - - Edit - false - - - - DataProcessor.ОбновлениеКонфигурации.Attribute.ИмяФайлаОбновления - - View - false - - - Edit - false - - - - DataProcessor.ПомощникСозданияОбменаДанными.Attribute.FTPСоединениеПользователь - - View - false - - - Edit - false - - - - Catalog.ЗапланированноеВзаимодействиеПрисоединенныеФайлы.TabularSection.ЭлектронныеПодписи.Attribute.Сертификат - - View - false - - - Edit - false - - - - InformationRegister.ОбщиеНастройкиУзловИнформационныхБаз.Attribute.НомерОтправленного - - View - false - - - Edit - false - - - - InformationRegister.СостоянияУспешныхОбменовДанными.Dimension.ДействиеПриОбмене - - View - false - - - Edit - false - - - - InformationRegister.ПользовательскиеНастройкиДоступаКОбработкам.Dimension.ИдентификаторКоманды - - View - false - - - Edit - false - - - - Catalog.РолиИсполнителей.Attribute.ТипыДополнительногоОбъектаАдресации - - View - false - - - Edit - false - - - - DataProcessor.ПомощникИнтерактивногоОбменаДанными.TabularSection.ИнформацияСтатистики.Attribute.ПроцентСопоставленияОбъектов - - View - false - - - Edit - false - - - - Catalog.ЗапланированноеВзаимодействиеПрисоединенныеФайлы.Attribute.Редактирует - - View - false - - - Edit - false - - - - BusinessProcess.Задание.Attribute.Подтверждено - - View - false - - - Edit - false - - - - Catalog.Валюты.Attribute.ЗагружаетсяИзИнтернета - - View - false - - - Edit - false - - - - Catalog.ГруппыДоступа.TabularSection.ЗначенияДоступа - - View - false - - - Edit - false - - - - Document.ЭлектронноеПисьмоВходящее.Attribute.Важность - - View - false - - - Edit - false - - - - BusinessProcess.Задание.Attribute.СрокПроверки - - View - false - - - Edit - false - - - - InformationRegister.ИсполнителиЗадач.Dimension.ДополнительныйОбъектАдресации - - View - false - - - Edit - false - - - - Catalog.ВстречаПрисоединенныеФайлы.TabularSection.ЭлектронныеПодписи.Attribute.Сертификат - - View - false - - - Edit - false - - - - Catalog.Пользователи.TabularSection.КонтактнаяИнформация.Attribute.Регион - - View - false - - - Edit - false - - - - Document.ЭлектронноеПисьмоВходящее.TabularSection.ПолучателиОтвета - - View - false - - - Edit - false - - - - InformationRegister.ПравилаДляОбменаДанными.Attribute.ИспользоватьФильтрВыборочнойРегистрацииОбъектов - - View - false - - - Edit - false - - - - Document.Встреча.TabularSection.НаборыЗначенийДоступа.Attribute.Изменение - - View - false - - - Edit - false - - - - Document.ТелефонныйЗвонок.Attribute.Описание - - View - false - - - Edit - false - - - - Catalog.ЭлектронноеПисьмоИсходящееПрисоединенныеФайлы.TabularSection.СертификатыШифрования.Attribute.Сертификат - - View - false - - - Edit - false - - - - Catalog.ГруппыПользователей.StandardAttribute.Predefined - - View - false - - - Edit - false - - - - Catalog.ГруппыПользователей.StandardAttribute.Ref - - View - false - - - Edit - false - - - - Catalog.ГруппыПользователей.StandardAttribute.DeletionMark - - View - false - - - Edit - false - - - - Catalog.ГруппыПользователей.StandardAttribute.IsFolder - - View - false - - - Edit - false - - - - Catalog.ГруппыПользователей.StandardAttribute.Owner - - View - false - - - Edit - false - - - - Catalog.ГруппыПользователей.StandardAttribute.Parent - - View - false - - - Edit - false - - - - Catalog.ГруппыПользователей.StandardAttribute.Description - - View - false - - - Edit - false - - - - Catalog.ГруппыПользователей.StandardAttribute.Code - - View - false - - - Edit - false - - - - DataProcessor.СопоставлениеОбъектовИнформационныхБаз.TabularSection.ТаблицаАвтоматическиСопоставленныхОбъектов.Attribute.ПриемникПоле4 - - View - false - - - Edit - false - - - - Task.ЗадачаИсполнителя.Attribute.Предмет - - View - false - - - Edit - false - - - - InformationRegister.ПравилаДляОбменаДанными.Dimension.ВидПравил - - View - false - - - Edit - false - - - - Catalog.ТелефонныйЗвонокПрисоединенныеФайлы.TabularSection.СертификатыШифрования.Attribute.Отпечаток - - View - false - - - Edit - false - - - - Catalog.Файлы.Attribute.ТекущаяВерсияКод - - View - false - - - Edit - false - - - - Catalog.УчетныеЗаписиЭлектроннойПочты.Attribute.УдалитьВПредставлениеВключатьИмяПользователя - - View - false - - - Edit - false - - - - Catalog.ЭлектронноеПисьмоВходящееПрисоединенныеФайлы.TabularSection.СертификатыШифрования - - View - false - - - Edit - false - - - - Catalog.ТелефонныйЗвонокПрисоединенныеФайлы.Attribute.ТекстХранилище - - View - false - - - Edit - false - - - - Catalog.ВопросыШаблонаАнкеты.Attribute.Формулировка - - View - false - - - Edit - false - - - - DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.ДатаНачала - - View - false - - - Edit - false - - - - Document.ЭлектронноеПисьмоИсходящее.TabularSection.ПолучателиСкрытыхКопий.Attribute.Контакт - - View - false - - - Edit - false - - - - DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.ПарольИнформационнойБазыДляПодключения - - View - false - - - Edit - false - - - - Catalog.ЭлектронноеПисьмоИсходящееПрисоединенныеФайлы.Attribute.ДатаМодификацииУниверсальная - - View - false - - - Edit - false - - - - DataProcessor.ОбновлениеКонфигурации.TabularSection.ДоступныеОбновления.Attribute.РазмерФайлаОбновления - - View - false - - - Edit - false - - - - BusinessProcess.Задание.Attribute.Наименование - - View - false - - - Edit - false - - - - InformationRegister.УдалитьПраваПоЗначениямДоступа.Dimension.Пользователь - - View - false - - - Edit - false - - - - InformationRegister.СоответствияОбъектовИнформационныхБаз.Dimension.УзелИнформационнойБазы - - View - false - - - Edit - false - - - - InformationRegister.ОбщиеНастройкиУзловИнформационныхБаз.StandardAttribute.Active - - View - false - - - Edit - false - - - - InformationRegister.ОбщиеНастройкиУзловИнформационныхБаз.StandardAttribute.LineNumber - - View - false - - - Edit - false - - - - InformationRegister.ОбщиеНастройкиУзловИнформационныхБаз.StandardAttribute.Recorder - - View - false - - - Edit - false - - - - InformationRegister.ОбщиеНастройкиУзловИнформационныхБаз.StandardAttribute.Period - - View - false - - - Edit - false - - - - BusinessProcess.Задание.Attribute.Автор - - View - false - - - Edit - false - - - - Catalog.Организации.TabularSection.КонтактнаяИнформация.Attribute.Вид - - View - false - - - Edit - false - - - - DataProcessor.ОбновлениеКонфигурации.Attribute.РасписаниеПроверкиНаличияОбновления - - View - false - - - Edit - false - - - - Catalog.ВстречаПрисоединенныеФайлы.TabularSection.СертификатыШифрования - - View - false - - - Edit - false - - - - DataProcessor.ПомощникИнтерактивногоОбменаДанными.Attribute.ИмяПланаОбмена - - View - false - - - Edit - false - - - - Catalog.ЭлектронноеПисьмоВходящееПрисоединенныеФайлы.TabularSection.СертификатыШифрования.Attribute.Отпечаток - - View - false - - - Edit - false - - - - Catalog.ЭлектронноеПисьмоИсходящееПрисоединенныеФайлы.Attribute.Автор - - View - false - - - Edit - false - - - - Catalog.ЭлектронноеПисьмоИсходящееПрисоединенныеФайлы.TabularSection.ЭлектронныеПодписи.Attribute.Сертификат - - View - false - - - Edit - false - - - - DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.ДатаВыгрузкиДанных - - View - false - - - Edit - false - - - - ChartOfCharacteristicTypes.ВопросыДляАнкетирования.Attribute.Длина - - View - false - - - Edit - false - - - - InformationRegister.УдалитьАдресныйКлассификатор.Dimension.Код - - View - false - - - Edit - false - - - - DataProcessor.НастройкаРезервногоКопированияИБ.Attribute.ТипОграничения - - View - false - - - Edit - false - - - - DataProcessor.СопоставлениеОбъектовИнформационныхБаз.TabularSection.ТаблицаАвтоматическиСопоставленныхОбъектов.Attribute.ИсточникПоле1 - - View - false - - - Edit - false - - - - DataProcessor.СопоставлениеОбъектовИнформационныхБаз.TabularSection.ТаблицаНеутвержденныхСвязей.Attribute.ТипИсточника - - View - false - - - Edit - false - - - - Catalog.Пользователи.TabularSection.КонтактнаяИнформация.Attribute.Вид - - View - false - - - Edit - false - - - - DataProcessor.ТранспортСообщенийОбменаEMAIL.Attribute.EMAILМаксимальныйДопустимыйРазмерСообщения - - View - false - - - Edit - false - - - - Catalog.ВерсииФайлов.TabularSection.ЭлектронныеПодписи - - View - false - - - Edit - false - - - - InformationRegister.ДополнительныеСведения.Resource.Значение - - View - false - - - Edit - false - - - - Catalog.ТелефонныйЗвонокПрисоединенныеФайлы.Attribute.ПутьКФайлу - - View - false - - - Edit - false - - - - DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.НепосредственноеЧтениеВИБПриемнике - - View - false - - - Edit - false - - - - InformationRegister.НастройкиТранспортаОбмена.StandardAttribute.Active - - View - false - - - Edit - false - - - - InformationRegister.НастройкиТранспортаОбмена.StandardAttribute.LineNumber - - View - false - - - Edit - false - - - - InformationRegister.НастройкиТранспортаОбмена.StandardAttribute.Recorder - - View - false - - - Edit - false - - - - InformationRegister.НастройкиТранспортаОбмена.StandardAttribute.Period - - View - false - - - Edit - false - - - - Catalog.ТелефонныйЗвонокПрисоединенныеФайлы.TabularSection.ЭлектронныеПодписи.Attribute.ИмяФайлаПодписи - - View - false - - - Edit - false - - - - DataProcessor.БлокировкаРаботыПользователей.Attribute.НачалоДействияБлокировки - - View - false - - - Edit - false - - - - Catalog.ЭлектронноеПисьмоИсходящееПрисоединенныеФайлы.Attribute.Описание - - View - false - - - Edit - false - - - - DataProcessor.ОбновлениеКонфигурации.TabularSection.ДоступныеОбновления.Attribute.ВерсияДляОбновления - - View - false - - - Edit - false - - - - DataProcessor.РезервноеКопированиеИБ.Attribute.ПарольАдминистратора - - View - false - - - Edit - false - - - - Catalog.ВстречаПрисоединенныеФайлы.Attribute.Том - - View - false - - - Edit - false - - - - Catalog.ЗначенияСвойствОбъектов.Attribute.Вес - - View - false - - - Edit - false - - - - Document.Анкета.Attribute.Опрос - - View - false - - - Edit - false - - - - ChartOfCharacteristicTypes.ОбъектыАдресацииЗадач.StandardAttribute.ValueType - - View - false - - - Edit - false - - - - ChartOfCharacteristicTypes.ОбъектыАдресацииЗадач.StandardAttribute.Description - - View - false - - - Edit - false - - - - ChartOfCharacteristicTypes.ОбъектыАдресацииЗадач.StandardAttribute.Code - - View - false - - - Edit - false - - - - ChartOfCharacteristicTypes.ОбъектыАдресацииЗадач.StandardAttribute.IsFolder - - View - false - - - Edit - false - - - - ChartOfCharacteristicTypes.ОбъектыАдресацииЗадач.StandardAttribute.Parent - - View - false - - - Edit - false - - - - ChartOfCharacteristicTypes.ОбъектыАдресацииЗадач.StandardAttribute.Predefined - - View - false - - - Edit - false - - - - ChartOfCharacteristicTypes.ОбъектыАдресацииЗадач.StandardAttribute.DeletionMark - - View - false - - - Edit - false - - - - ChartOfCharacteristicTypes.ОбъектыАдресацииЗадач.StandardAttribute.Ref - - View - false - - - Edit - false - - - - Catalog.ДополнительныеОтчетыИОбработки.Attribute.ИмяФайла - - View - false - - - Edit - false - - - - InformationRegister.НастройкиТранспортаОбмена.Dimension.Узел - - View - false - - - Edit - false - - - - Document.ЭлектронноеПисьмоИсходящее.TabularSection.ПолучателиОтвета.Attribute.Адрес - - View - false - - - Edit - false - - - - Document.Встреча.TabularSection.НаборыЗначенийДоступа.Attribute.ЗначениеДоступа - - View - false - - - Edit - false - - - - DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.ЭтоИнтерактивныйРежим - - View - false - - - Edit - false - - - - Document.НазначениеОпросов.Attribute.Наименование - - View - false - - - Edit - false - - - - DataProcessor.НастройкаРезервногоКопированияИБ.Attribute.ЕдиницаИзмеренияПериода - - View - false - - - Edit - false - - - - Catalog.ГруппыВнешнихПользователей.Attribute.ТипОбъектовАвторизации - - View - false - - - Edit - false - - - - DataProcessor.СопоставлениеОбъектовИнформационныхБаз.TabularSection.ТаблицаАвтоматическиСопоставленныхОбъектов - - View - false - - - Edit - false - - - - InformationRegister.СоответствияОбъектовИнформационныхБаз.Dimension.ТипПриемника - - View - false - - - Edit - false - - - - InformationRegister.ПравилаДляОбменаДанными.StandardAttribute.Active - - View - false - - - Edit - false - - - - InformationRegister.ПравилаДляОбменаДанными.StandardAttribute.LineNumber - - View - false - - - Edit - false - - - - InformationRegister.ПравилаДляОбменаДанными.StandardAttribute.Recorder - - View - false - - - Edit - false - - - - InformationRegister.ПравилаДляОбменаДанными.StandardAttribute.Period - - View - false - - - Edit - false - - - - Catalog.ТелефонныйЗвонокПрисоединенныеФайлы.Attribute.ВладелецФайла - - View - false - - - Edit - false - - - - DataProcessor.ОбновлениеКонфигурации.TabularSection.ДоступныеОбновления.Attribute.Версия4Разряд - - View - false - - - Edit - false - - - - Catalog.ГруппыИсполнителейЗадач.Attribute.ДополнительныйОбъектАдресации - - View - false - - - Edit - false - - - - Catalog.ЗапланированноеВзаимодействиеПрисоединенныеФайлы.Attribute.Изменил - - View - false - - - Edit - false - - - - Catalog.ГруппыИсполнителейЗадач.StandardAttribute.Predefined - - View - false - - - Edit - false - - - - Catalog.ГруппыИсполнителейЗадач.StandardAttribute.Ref - - View - false - - - Edit - false - - - - Catalog.ГруппыИсполнителейЗадач.StandardAttribute.DeletionMark - - View - false - - - Edit - false - - - - Catalog.ГруппыИсполнителейЗадач.StandardAttribute.IsFolder - - View - false - - - Edit - false - - - - Catalog.ГруппыИсполнителейЗадач.StandardAttribute.Owner - - View - false - - - Edit - false - - - - Catalog.ГруппыИсполнителейЗадач.StandardAttribute.Parent - - View - false - - - Edit - false - - - - Catalog.ГруппыИсполнителейЗадач.StandardAttribute.Description - - View - false - - - Edit - false - - - - Catalog.ГруппыИсполнителейЗадач.StandardAttribute.Code - - View - false - - - Edit - false - - - - Catalog.ТомаХраненияФайлов.Attribute.Комментарий - - View - false - - - Edit - false - - - - DataProcessor.НастройкаРезервногоКопированияИБ.Attribute.ЗначениеВЕдиницахИзмерения - - View - false - - - Edit - false - - - - Document.ЭлектронноеПисьмоВходящее.TabularSection.НаборыЗначенийДоступа.Attribute.Чтение - - View - false - - - Edit - false - - - - Document.ЭлектронноеПисьмоИсходящее.Attribute.ОтправительПредставление - - View - false - - - Edit - false - - - - Catalog.ЗначенияСвойствОбъектов.StandardAttribute.Predefined - - View - false - - - Edit - false - - - - Catalog.ЗначенияСвойствОбъектов.StandardAttribute.Ref - - View - false - - - Edit - false - - - - Catalog.ЗначенияСвойствОбъектов.StandardAttribute.DeletionMark - - View - false - - - Edit - false - - - - Catalog.ЗначенияСвойствОбъектов.StandardAttribute.IsFolder - - View - false - - - Edit - false - - - - Catalog.ЗначенияСвойствОбъектов.StandardAttribute.Owner - - View - false - - - Edit - false - - - - Catalog.ЗначенияСвойствОбъектов.StandardAttribute.Parent - - View - false - - - Edit - false - - - - Catalog.ЗначенияСвойствОбъектов.StandardAttribute.Description - - View - false - - - Edit - false - - - - Catalog.ЗначенияСвойствОбъектов.StandardAttribute.Code - - View - false - - - Edit - false - - - - InformationRegister.КурсыВалют.Dimension.Валюта - - View - false - - - Edit - false - - - - Task.ЗадачаИсполнителя.Attribute.Важность - - View - false - - - Edit - false - - - - DataProcessor.ОбновлениеКонфигурации.Attribute.ПовторныйЗапуск - - View - false - - - Edit - false - - - - DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.ИмяИнформационнойБазыНаСервереДляПодключения - - View - false - - - Edit - false - - - - DataProcessor.РезервноеКопированиеИБ.Attribute.ФайлЗагрузкиРезервнойКопии - - View - false - - - Edit - false - - - - InformationRegister.НастройкиТранспортаОбмена.Resource.ПарольАрхиваСообщенияОбмена - - View - false - - - Edit - false - - - - Catalog.НаборыДополнительныхРеквизитовИСведений.TabularSection.ДополнительныеРеквизиты - - View - false - - - Edit - false - - - - Catalog.ПапкиФайлов.Attribute.ДатаСоздания - - View - false - - - Edit - false - - - - Catalog.ВстречаПрисоединенныеФайлы.TabularSection.ЭлектронныеПодписи.Attribute.ИмяФайлаПодписи - - View - false - - - Edit - false - - - - Catalog.УчетныеЗаписиЭлектроннойПочты.Attribute.ПортСервераВходящейПочты - - View - false - - - Edit - false - - - - DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.РежимОтладкиАлгоритмов - - View - false - - - Edit - false - - - - DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.ПарольДляРаспаковкиФайлаОбмена - - View - false - - - Edit - false - - - - DataProcessor.ПомощникСозданияОбменаДанными.Attribute.EMAILСжиматьФайлИсходящегоСообщения - - View - false - - - Edit - false - - - - ChartOfCharacteristicTypes.ВопросыДляАнкетирования.Attribute.ПояснениеКомментария - - View - false - - - Edit - false - - - - Catalog.ЗапланированноеВзаимодействиеПрисоединенныеФайлы.Attribute.Зашифрован - - View - false - - - Edit - false - - - - Catalog.ВерсииФайлов.Attribute.Размер - - View - false - - - Edit - false - - - - Catalog.ТелефонныйЗвонокПрисоединенныеФайлы.Attribute.ДатаМодификацииУниверсальная - - View - false - - - Edit - false - - - - Catalog.ГруппыВнешнихПользователей.Attribute.Комментарий - - View - false - - - Edit - false - - - - InformationRegister.УдалитьАдресныйКлассификатор.Dimension.КодГородаВКоде - - View - false - - - Edit - false - - - - Catalog.Пользователи.TabularSection.КонтактнаяИнформация.Attribute.Представление - - View - false - - - Edit - false - - - - Document.ЭлектронноеПисьмоИсходящее.Attribute.СтатусПисьма - - View - false - - - Edit - false - - - - Catalog.УчетныеЗаписиЭлектроннойПочты.Attribute.ПериодХраненияСообщенийНаСервере - - View - false - - - Edit - false - - - - Catalog.ТелефонныйЗвонокПрисоединенныеФайлы.TabularSection.ЭлектронныеПодписи.Attribute.Комментарий - - View - false - - - Edit - false - - - - Catalog.Организации.StandardAttribute.Predefined - - View - false - - - Edit - false - - - - Catalog.Организации.StandardAttribute.Ref - - View - false - - - Edit - false - - - - Catalog.Организации.StandardAttribute.DeletionMark - - View - false - - - Edit - false - - - - Catalog.Организации.StandardAttribute.IsFolder - - View - false - - - Edit - false - - - - Catalog.Организации.StandardAttribute.Owner - - View - false - - - Edit - false - - - - Catalog.Организации.StandardAttribute.Parent - - View - false - - - Edit - false - - - - Catalog.Организации.StandardAttribute.Description - - View - false - - - Edit - false - - - - Catalog.Организации.StandardAttribute.Code - - View - false - - - Edit - false - - - - DataProcessor.ОбновлениеКонфигурации.TabularSection.ДоступныеОбновления.Attribute.ЛокальныйОтносительныйКаталог - - View - false - - - Edit - false - - - - Catalog.Файлы.Attribute.ТекущаяВерсияРазмер - - View - false - - - Edit - false - - - - DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.ИспользоватьТранзакцииПриВыгрузкеДляПлановОбмена - - View - false - - - Edit - false - - - - Document.ЭлектронноеПисьмоИсходящее.TabularSection.ПолучателиКопий.Attribute.Контакт - - View - false - - - Edit - false - - - - DataProcessor.ОбновлениеКонфигурации.Attribute.ТехническаяИнформацияОбОшибке - - View - false - - - Edit - false - - - - DataProcessor.ЗагрузкаКурсовВалют.TabularSection.СписокВалют.Attribute.Валюта - - View - false - - - Edit - false - - - - InformationRegister.УдалитьАдресныйКлассификатор.Dimension.КодАдресногоОбъектаВКоде - - View - false - - - Edit - false - - - - Catalog.ЗапланированноеВзаимодействиеПрисоединенныеФайлы.TabularSection.СертификатыШифрования.Attribute.Сертификат - - View - false - - - Edit - false - - - - Catalog.ГруппыВнешнихПользователей.TabularSection.Состав - - View - false - - - Edit - false - - - - InformationRegister.ПользовательскиеМакетыПечати.Resource.Макет - - View - false - - - Edit - false - - - - DataProcessor.ОбновлениеКонфигурации.TabularSection.ДоступныеОбновления.Attribute.Версия1Разряд - - View - false - - - Edit - false - - - - InformationRegister.УдалитьАдресныйКлассификатор.Dimension.КодНаселенногоПунктаВКоде - - View - false - - - Edit - false - - - - Catalog.Пользователи.TabularSection.КонтактнаяИнформация.Attribute.НомерТелефона - - View - false - - - Edit - false - - - - Catalog.ВнешниеПользователи.Attribute.УдалитьПароль - - View - false - - - Edit - false - - - - Document.ТелефонныйЗвонок.TabularSection.НаборыЗначенийДоступа.Attribute.ЗначениеДоступа - - View - false - - - Edit - false - - - - InformationRegister.НастройкиТранспортаОбмена.Resource.EMAILУчетнаяЗапись - - View - false - - - Edit - false - - - - Task.ЗадачаИсполнителя.AddressingAttribute.РольИсполнителя - - View - false - - - Edit - false - - - - Catalog.ДополнительныеОтчетыИОбработки.Attribute.ХранилищеОбработки - - View - false - - - Edit - false - - - - Catalog.ВстречаПрисоединенныеФайлы.TabularSection.ЭлектронныеПодписи.Attribute.КомуВыданСертификат - - View - false - - - Edit - false - - - - DataProcessor.ЗагрузкаПравилРегистрацииОбъектов.Attribute.ИмяПланаОбменаДляЗагрузки - - View - false - - - Edit - false - - - - Catalog.ТелефонныйЗвонокПрисоединенныеФайлы.Attribute.ДатаСоздания - - View - false - - - Edit - false - - - - Catalog.НаборыДополнительныхРеквизитовИСведений.TabularSection.ДополнительныеРеквизиты.Attribute.Свойство - - View - false - - - Edit - false - - - - DataProcessor.ПомощникСозданияОбменаДанными.Attribute.FTPСоединениеПароль - - View - false - - - Edit - false - - - - Catalog.ДополнительныеОтчетыИОбработки.Attribute.Публикация - - View - false - - - Edit - false - - - - Catalog.ЭлектронноеПисьмоВходящееПрисоединенныеФайлы.Attribute.ДатаМодификацииУниверсальная - - View - false - - - Edit - false - - - - InformationRegister.НазначениеДополнительныхОбработок.Dimension.ТипФормы - - View - false - - - Edit - false - - - - DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.ДописыватьДанныеВПротоколОбмена - - View - false - - - Edit - false - - - - Catalog.ЭлектронноеПисьмоВходящееПрисоединенныеФайлы.Attribute.Расширение - - View - false - - - Edit - false - - - - Catalog.Файлы.TabularSection.ДополнительныеРеквизиты.Attribute.ТекстоваяСтрока - - View - false - - - Edit - false - - - - Catalog.РолиИсполнителей.Attribute.ИспользуетсяСОбъектамиАдресации - - View - false - - - Edit - false - - - - Document.ЭлектронноеПисьмоИсходящее.TabularSection.ПолучателиПисьма.Attribute.Адрес - - View - false - - - Edit - false - - - - Document.ЭлектронноеПисьмоВходящее.TabularSection.ПолучателиКопий.Attribute.Контакт - - View - false - - - Edit - false - - - - DataProcessor.ОбновлениеКонфигурации.Attribute.ПарольСервераОбновлений - - View - false - - - Edit - false - - - - Catalog.ГруппыДоступа.Attribute.Описание - - View - false - - - Edit - false - - - - Catalog.ВопросыШаблонаАнкеты.Attribute.ТипТабличногоВопроса - - View - false - - - Edit - false - - - - Catalog.ЭлектронноеПисьмоИсходящееПрисоединенныеФайлы.Attribute.ИндексКартинки - - View - false - - - Edit - false - - - - Catalog.ВерсииФайлов.Attribute.НомерВерсии - - View - false - - - Edit - false - - - - Task.ЗадачаИсполнителя.Attribute.ПредметСтрокой - - View - false - - - Edit - false - - - - Catalog.ПапкиФайлов.TabularSection.ДополнительныеРеквизиты.Attribute.ТекстоваяСтрока - - View - false - - - Edit - false - - - - Catalog.ВариантыОтветовАнкет.Attribute.РеквизитДопУпорядочивания - - View - false - - - Edit - false - - - - InformationRegister.ПутиКПрограммамЭлектроннойПодписиИШифрованияНаСерверахLinux.Resource.Комментарий - - View - false - - - Edit - false - - - - Document.ЭлектронноеПисьмоВходящее.Attribute.ОтправительКонтакт - - View - false - - - Edit - false - - - - DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.ОбработчикиСобытийЧитаемИзФайлаПравилОбмена - - View - false - - - Edit - false - - - - Document.ЗапланированноеВзаимодействие.Attribute.СписокУчастников - - View - false - - - Edit - false - - - - InformationRegister.УдалитьПраваПоЗначениямДоступа.Dimension.Право - - View - false - - - Edit - false - - - - InformationRegister.УдалитьНастройкиВерсионированияОбъектов.Resource.Использовать - - View - false - - - Edit - false - - - - Catalog.ТомаХраненияФайлов.Attribute.ПорядокЗаполнения - - View - false - - - Edit - false - - - - ChartOfCharacteristicTypes.ДополнительныеРеквизитыИСведения.Attribute.УдалитьСклоненияПредмета - - View - false - - - Edit - false - - - - Task.ЗадачаИсполнителя.Attribute.СостояниеБизнесПроцесса - - View - false - - - Edit - false - - - - Document.ЭлектронноеПисьмоВходящее.Attribute.Текст - - View - false - - - Edit - false - - - - InformationRegister.ПравилаДляОбменаДанными.Attribute.ПравилаЗагружены - - View - false - - - Edit - false - - - - Catalog.ЗапланированноеВзаимодействиеПрисоединенныеФайлы.Attribute.ДатаМодификацииУниверсальная - - View - false - - - Edit - false - - - - Catalog.ВерсииФайлов.TabularSection.ЭлектронныеПодписи.Attribute.ДатаПодписи - - View - false - - - Edit - false - - - - Document.Анкета.TabularSection.Состав.Attribute.Вопрос - - View - false - - - Edit - false - - - - Document.Встреча.Attribute.Удалить_РассмотретьПосле - - View - false - - - Edit - false - - - - Catalog.ВопросыШаблонаАнкеты.TabularSection.СоставТабличногоВопроса - - View - false - - - Edit - false - - - - Catalog.ДополнительныеОтчетыИОбработки.TabularSection.Команды.Attribute.Представление - - View - false - - - Edit - false - - - - Catalog.ЭлектронноеПисьмоВходящееПрисоединенныеФайлы.TabularSection.ЭлектронныеПодписи.Attribute.УстановившийПодпись - - View - false - - - Edit - false - - - - Catalog.ЗапланированноеВзаимодействиеПрисоединенныеФайлы.Attribute.Описание - - View - false - - - Edit - false - - - - DataProcessor.ТранспортСообщенийОбменаFTP.Attribute.FTPСоединениеПассивноеСоединение - - View - false - - - Edit - false - - - - Catalog.ВстречаПрисоединенныеФайлы.Attribute.ПутьКФайлу - - View - false - - - Edit - false - - - - DataProcessor.ПомощникИнтерактивногоОбменаДанными.TabularSection.ИнформацияСтатистики.Attribute.ТипПриемникаСтрокой - - View - false - - - Edit - false - - - - Catalog.ЗапланированноеВзаимодействиеПрисоединенныеФайлы.Attribute.ИндексКартинки - - View - false - - - Edit - false - - - - DataProcessor.СопоставлениеОбъектовИнформационныхБаз.Attribute.ТипИсточникаСтрокой - - View - false - - - Edit - false - - - - Catalog.РолиИсполнителей.Attribute.ТипыОсновногоОбъектаАдресации - - View - false - - - Edit - false - - - - Document.Анкета.TabularSection.Состав.Attribute.НомерЯчейки - - View - false - - - Edit - false - - - - Catalog.УчетныеЗаписиЭлектроннойПочты.Attribute.ИмяПользователя - - View - false - - - Edit - false - - - - Catalog.Файлы.Attribute.Зашифрован - - View - false - - - Edit - false - - - - Catalog.ЭлектронноеПисьмоВходящееПрисоединенныеФайлы.TabularSection.ЭлектронныеПодписи.Attribute.КомуВыданСертификат - - View - false - - - Edit - false - - - - InformationRegister.ДополнительныеСведения.Dimension.Объект - - View - false - - - Edit - false - - - - Catalog.ГруппыВнешнихПользователей.StandardAttribute.Predefined - - View - false - - - Edit - false - - - - Catalog.ГруппыВнешнихПользователей.StandardAttribute.Ref - - View - false - - - Edit - false - - - - Catalog.ГруппыВнешнихПользователей.StandardAttribute.DeletionMark - - View - false - - - Edit - false - - - - Catalog.ГруппыВнешнихПользователей.StandardAttribute.IsFolder - - View - false - - - Edit - false - - - - Catalog.ГруппыВнешнихПользователей.StandardAttribute.Owner - - View - false - - - Edit - false - - - - Catalog.ГруппыВнешнихПользователей.StandardAttribute.Parent - - View - false - - - Edit - false - - - - Catalog.ГруппыВнешнихПользователей.StandardAttribute.Description - - View - false - - - Edit - false - - - - Catalog.ГруппыВнешнихПользователей.StandardAttribute.Code - - View - false - - - Edit - false - - - - BusinessProcess.Задание.Attribute.Предмет - - View - false - - - Edit - false - - - - Catalog.Пользователи.TabularSection.КонтактнаяИнформация.Attribute.Тип - - View - false - - - Edit - false - - - - Document.ЭлектронноеПисьмоВходящее.TabularSection.ПолучателиКопий.Attribute.Представление - - View - false - - - Edit - false - - - - InformationRegister.НаличиеПрисоединенныхФайлов.Dimension.ОбъектСФайлами - - View - false - - - Edit - false - - - - Catalog.ВопросыШаблонаАнкеты.TabularSection.СоставТабличногоВопроса.Attribute.ЭлементарныйВопрос - - View - false - - - Edit - false - - - - Catalog.ГруппыВнешнихПользователей.TabularSection.Состав.Attribute.ВнешнийПользователь - - View - false - - - Edit - false - - - - Catalog.ВстречаПрисоединенныеФайлы.TabularSection.ЭлектронныеПодписи - - View - false - - - Edit - false - - - - Catalog.ЭлектронноеПисьмоВходящееПрисоединенныеФайлы.TabularSection.СертификатыШифрования.Attribute.Сертификат - - View - false - - - Edit - false - - - - Catalog.ШаблоныАнкет.Attribute.Заголовок - - View - false - - - Edit - false - - - - Catalog.ЭлектронноеПисьмоИсходящееПрисоединенныеФайлы.Attribute.Изменил - - View - false - - - Edit - false - - - - Catalog.ГруппыПользователей.TabularSection.Состав.Attribute.Пользователь - - View - false - - - Edit - false - - - - Catalog.ВидыКонтактнойИнформации.Attribute.МожноИзменятьСпособРедактирования - - View - false - - - Edit - false - - - - DataProcessor.СопоставлениеОбъектовИнформационныхБаз.TabularSection.ТаблицаАвтоматическиСопоставленныхОбъектов.Attribute.УникальныйИдентификаторПриемника - - View - false - - - Edit - false - - - - DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.ПостроительОтчета - - View - false - - - Edit - false - - - - InformationRegister.СостоянияУспешныхОбменовДанными.Dimension.УзелИнформационнойБазы - - View - false - - - Edit - false - - - - DataProcessor.СопоставлениеОбъектовИнформационныхБаз.TabularSection.ТаблицаАвтоматическиСопоставленныхОбъектов.Attribute.ИсточникПоле4 - - View - false - - - Edit - false - - - - Document.Анкета.Attribute.РедактируемыйРаздел - - View - false - - - Edit - false - - - - Catalog.ЗапланированноеВзаимодействиеПрисоединенныеФайлы.TabularSection.ЭлектронныеПодписи.Attribute.ДатаПодписи - - View - false - - - Edit - false - - - - InformationRegister.УдалитьАдресныйКлассификатор.Dimension.КодУлицыВКоде - - View - false - - - Edit - false - - - - Catalog.ГруппыДоступа.StandardAttribute.Predefined - - View - false - - - Edit - false - - - - Catalog.ГруппыДоступа.StandardAttribute.Ref - - View - false - - - Edit - false - - - - Catalog.ГруппыДоступа.StandardAttribute.DeletionMark - - View - false - - - Edit - false - - - - Catalog.ГруппыДоступа.StandardAttribute.IsFolder - - View - false - - - Edit - false - - - - Catalog.ГруппыДоступа.StandardAttribute.Owner - - View - false - - - Edit - false - - - - Catalog.ГруппыДоступа.StandardAttribute.Parent - - View - false - - - Edit - false - - - - Catalog.ГруппыДоступа.StandardAttribute.Description - - View - false - - - Edit - false - - - - Catalog.ГруппыДоступа.StandardAttribute.Code - - View - false - - - Edit - false - - - - Catalog.ТомаХраненияФайлов.Attribute.ПолныйПутьWindows - - View - false - - - Edit - false - - - - DataProcessor.ПомощникИнтерактивногоОбменаДанными.TabularSection.ИнформацияСтатистики.Attribute.ИндексКартинки - - View - false - - - Edit - false - - - - Catalog.ГруппыВнешнихПользователей.Attribute.ВсеОбъектыАвторизации - - View - false - - - Edit - false - - - - Catalog.ТелефонныйЗвонокПрисоединенныеФайлы.TabularSection.ЭлектронныеПодписи.Attribute.УстановившийПодпись - - View - false - - - Edit - false - - - - InformationRegister.ВерсииОбъектов.Resource.ВерсияОбъекта - - View - false - - - Edit - false - - - - Catalog.ЭлектронноеПисьмоВходящееПрисоединенныеФайлы.Attribute.Том - - View - false - - - Edit - false - - - - DataProcessor.ПомощникИнтерактивногоОбменаДанными.TabularSection.ИнформацияСтатистики - - View - false - - - Edit - false - - - - ChartOfCharacteristicTypes.УдалитьВидыДоступа.StandardAttribute.ValueType - - View - false - - - Edit - false - - - - ChartOfCharacteristicTypes.УдалитьВидыДоступа.StandardAttribute.Description - - View - false - - - Edit - false - - - - ChartOfCharacteristicTypes.УдалитьВидыДоступа.StandardAttribute.Code - - View - false - - - Edit - false - - - - ChartOfCharacteristicTypes.УдалитьВидыДоступа.StandardAttribute.IsFolder - - View - false - - - Edit - false - - - - ChartOfCharacteristicTypes.УдалитьВидыДоступа.StandardAttribute.Parent - - View - false - - - Edit - false - - - - ChartOfCharacteristicTypes.УдалитьВидыДоступа.StandardAttribute.Predefined - - View - false - - - Edit - false - - - - ChartOfCharacteristicTypes.УдалитьВидыДоступа.StandardAttribute.DeletionMark - - View - false - - - Edit - false - - - - ChartOfCharacteristicTypes.УдалитьВидыДоступа.StandardAttribute.Ref - - View - false - - - Edit - false - - - - Catalog.ГруппыДоступа.TabularSection.ЗначенияДоступа.Attribute.ЗначениеДоступа - - View - false - - - Edit - false - - - - DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.ИмяФайлаОбмена - - View - false - - - Edit - false - - - - Document.ЗапланированноеВзаимодействие.Attribute.Автор - - View - false - - - Edit - false - - - - DataProcessor.ПомощникСозданияОбменаДанными.Attribute.FTPСоединениеПуть - - View - false - - - Edit - false - - - - InformationRegister.НазначениеДополнительныхОбработок.Resource.ИспользоватьОтчеты - - View - false - - - Edit - false - - - - DataProcessor.ОбновлениеКонфигурации.TabularSection.ДоступныеОбновления.Attribute.Версия3Разряд - - View - false - - - Edit - false - - - - Catalog.ВнешниеПользователи.Attribute.УстановитьРолиНепосредственно - - View - false - - - Edit - false - - - - Catalog.ЭлектронноеПисьмоИсходящееПрисоединенныеФайлы.Attribute.ВладелецФайла - - View - false - - - Edit - false - - - - Document.Встреча.TabularSection.НаборыЗначенийДоступа.Attribute.НомерНабора - - View - false - - - Edit - false - - - - InformationRegister.СостоянияУспешныхОбменовДанными.StandardAttribute.Active - - View - false - - - Edit - false - - - - InformationRegister.СостоянияУспешныхОбменовДанными.StandardAttribute.LineNumber - - View - false - - - Edit - false - - - - InformationRegister.СостоянияУспешныхОбменовДанными.StandardAttribute.Recorder - - View - false - - - Edit - false - - - - InformationRegister.СостоянияУспешныхОбменовДанными.StandardAttribute.Period - - View - false - - - Edit - false - - - - BusinessProcess.Задание.Attribute.ДатаЗавершения - - View - false - - - Edit - false - - - - Catalog.ЗапланированноеВзаимодействиеПрисоединенныеФайлы.Attribute.Размер - - View - false - - - Edit - false - - - - Document.ЭлектронноеПисьмоИсходящее.Attribute.Кодировка - - View - false - - - Edit - false - - - - InformationRegister.ДатыЗапретаИзменения.StandardAttribute.Active - - View - false - - - Edit - false - - - - InformationRegister.ДатыЗапретаИзменения.StandardAttribute.LineNumber - - View - false - - - Edit - false - - - - InformationRegister.ДатыЗапретаИзменения.StandardAttribute.Recorder - - View - false - - - Edit - false - - - - InformationRegister.ДатыЗапретаИзменения.StandardAttribute.Period - - View - false - - - Edit - false - - - - Catalog.ВопросыШаблонаАнкеты.Attribute.РодительВопрос - - View - false - - - Edit - false - - - - InformationRegister.КалендарныеГрафики.Dimension.ДатаГрафика - - View - false - - - Edit - false - - - - Catalog.ЗапланированноеВзаимодействиеПрисоединенныеФайлы.Attribute.ВладелецФайла - - View - false - - - Edit - false - - - - Catalog.ВнешниеПользователи.Attribute.ОбъектАвторизации - - View - false - - - Edit - false - - - - InformationRegister.НастройкиТранспортаОбмена.Resource.FTPСоединениеПароль - - View - false - - - Edit - false - - - - Catalog.ВстречаПрисоединенныеФайлы.StandardAttribute.Predefined - - View - false - - - Edit - false - - - - Catalog.ВстречаПрисоединенныеФайлы.StandardAttribute.Ref - - View - false - - - Edit - false - - - - Catalog.ВстречаПрисоединенныеФайлы.StandardAttribute.DeletionMark - - View - false - - - Edit - false - - - - Catalog.ВстречаПрисоединенныеФайлы.StandardAttribute.IsFolder - - View - false - - - Edit - false - - - - Catalog.ВстречаПрисоединенныеФайлы.StandardAttribute.Owner - - View - false - - - Edit - false - - - - Catalog.ВстречаПрисоединенныеФайлы.StandardAttribute.Parent - - View - false - - - Edit - false - - - - Catalog.ВстречаПрисоединенныеФайлы.StandardAttribute.Description - - View - false - - - Edit - false - - - - Catalog.ВстречаПрисоединенныеФайлы.StandardAttribute.Code - - View - false - - - Edit - false - - - - Catalog.Пользователи.TabularSection.КонтактнаяИнформация - - View - false - - - Edit - false - - - - ChartOfCharacteristicTypes.ВопросыДляАнкетирования.Attribute.ТребуетсяКомментарий - - View - false - - - Edit - false - - - - Document.ЗапланированноеВзаимодействие.TabularSection.НаборыЗначенийДоступа.Attribute.Изменение - - View - false - - - Edit - false - - - - InformationRegister.ДатыЗапретаИзменения.Dimension.Пользователь - - View - false - - - Edit - false - - - - DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.КомментарийПриЗагрузкеДанных - - View - false - - - Edit - false - - - - DataProcessor.ОбновлениеКонфигурации.Attribute.НуженФайлОбновления - - View - false - - - Edit - false - - - - DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.ОптимизированнаяЗаписьОбъектов - - View - false - - - Edit - false - - - - Document.НазначениеОпросов.Attribute.ПоказыватьВАрхивеАнкет - - View - false - - - Edit - false - - - - Catalog.ВопросыШаблонаАнкеты.Attribute.ТипВопроса - - View - false - - - Edit - false - - - - Catalog.ТомаХраненияФайлов.StandardAttribute.Predefined - - View - false - - - Edit - false - - - - Catalog.ТомаХраненияФайлов.StandardAttribute.Ref - - View - false - - - Edit - false - - - - Catalog.ТомаХраненияФайлов.StandardAttribute.DeletionMark - - View - false - - - Edit - false - - - - Catalog.ТомаХраненияФайлов.StandardAttribute.IsFolder - - View - false - - - Edit - false - - - - Catalog.ТомаХраненияФайлов.StandardAttribute.Owner - - View - false - - - Edit - false - - - - Catalog.ТомаХраненияФайлов.StandardAttribute.Parent - - View - false - - - Edit - false - - - - Catalog.ТомаХраненияФайлов.StandardAttribute.Description - - View - false - - - Edit - false - - - - Catalog.ТомаХраненияФайлов.StandardAttribute.Code - - View - false - - - Edit - false - - - - Catalog.ЭлектронноеПисьмоВходящееПрисоединенныеФайлы.Attribute.СтатусИзвлеченияТекста - - View - false - - - Edit - false - - - - DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.ТаблицаПравилКонвертации - - View - false - - - Edit - false - - - - Document.ЭлектронноеПисьмоВходящее.Attribute.Удалить_РассмотретьПосле - - View - false - - - Edit - false - - - - DataProcessor.СопоставлениеОбъектовИнформационныхБаз.TabularSection.ТаблицаАвтоматическиСопоставленныхОбъектов.Attribute.Пометка - - View - false - - - Edit - false - - - - Catalog.ЗапланированноеВзаимодействиеПрисоединенныеФайлы.Attribute.Автор - - View - false - - - Edit - false - - - - DataProcessor.ОбновлениеКонфигурации.Attribute.АдресЭлектроннойПочты - - View - false - - - Edit - false - - - - ChartOfCharacteristicTypes.ВопросыДляАнкетирования.StandardAttribute.ValueType - - View - false - - - Edit - false - - - - ChartOfCharacteristicTypes.ВопросыДляАнкетирования.StandardAttribute.Description - - View - false - - - Edit - false - - - - ChartOfCharacteristicTypes.ВопросыДляАнкетирования.StandardAttribute.Code - - View - false - - - Edit - false - - - - ChartOfCharacteristicTypes.ВопросыДляАнкетирования.StandardAttribute.IsFolder - - View - false - - - Edit - false - - - - ChartOfCharacteristicTypes.ВопросыДляАнкетирования.StandardAttribute.Parent - - View - false - - - Edit - false - - - - ChartOfCharacteristicTypes.ВопросыДляАнкетирования.StandardAttribute.Predefined - - View - false - - - Edit - false - - - - ChartOfCharacteristicTypes.ВопросыДляАнкетирования.StandardAttribute.DeletionMark - - View - false - - - Edit - false - - - - ChartOfCharacteristicTypes.ВопросыДляАнкетирования.StandardAttribute.Ref - - View - false - - - Edit - false - - - - BusinessProcess.Задание.StandardAttribute.Started - - View - false - - - Edit - false - - - - BusinessProcess.Задание.StandardAttribute.HeadTask - - View - false - - - Edit - false - - - - BusinessProcess.Задание.StandardAttribute.Completed - - View - false - - - Edit - false - - - - BusinessProcess.Задание.StandardAttribute.Ref - - View - false - - - Edit - false - - - - BusinessProcess.Задание.StandardAttribute.DeletionMark - - View - false - - - Edit - false - - - - BusinessProcess.Задание.StandardAttribute.Date - - View - false - - - Edit - false - - - - BusinessProcess.Задание.StandardAttribute.Number - - View - false - - - Edit - false - - - - Catalog.ПрофилиГруппДоступа.Attribute.ПоставляемыйПрофильИзменен - - View - false - - - Edit - false - - - - InformationRegister.УдалитьПраваПоЗначениямДоступа.StandardAttribute.Active - - View - false - - - Edit - false - - - - InformationRegister.УдалитьПраваПоЗначениямДоступа.StandardAttribute.LineNumber - - View - false - - - Edit - false - - - - InformationRegister.УдалитьПраваПоЗначениямДоступа.StandardAttribute.Recorder - - View - false - - - Edit - false - - - - InformationRegister.УдалитьПраваПоЗначениямДоступа.StandardAttribute.Period - - View - false - - - Edit - false - - - - InformationRegister.НастройкиТранспортаОбмена.Resource.FTPСоединениеПользователь - - View - false - - - Edit - false - - - - Catalog.ДополнительныеОтчетыИОбработки.TabularSection.Команды.Attribute.ВариантЗапуска - - View - false - - - Edit - false - - - - DataProcessor.СписокРеспондента.Attribute.Респондент - - View - false - - - Edit - false - - - - Catalog.ТелефонныйЗвонокПрисоединенныеФайлы.Attribute.Расширение - - View - false - - - Edit - false - - - - InformationRegister.НастройкиТранспортаОбмена.Resource.FTPСоединениеПассивноеСоединение - - View - false - - - Edit - false - - - - InformationRegister.ФайлыВРабочемКаталоге.Resource.Размер - - View - false - - - Edit - false - - - - DataProcessor.КонвертацияОбъектовРаспределенныхИнформационныхБаз.Attribute.КоличествоЭлементовВТранзакции - - View - false - - - Edit - false - - - - InformationRegister.СоответствияОбъектовИнформационныхБаз.Dimension.ТипИсточника - - View - false - - - Edit - false - - - - Document.ЭлектронноеПисьмоИсходящее.Attribute.Важность - - View - false - - - Edit - false - - - - Document.ТелефонныйЗвонок.Attribute.АбонентКонтакт - - View - false - - - Edit - false - - - - DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.ПарольДляСжатияФайлаОбмена - - View - false - - - Edit - false - - - - InformationRegister.ДатыЗапретаИзменения.Dimension.Раздел - - View - false - - - Edit - false - - - - InformationRegister.ИдентификаторыПолученныхЭлектронныхПисем.Resource.ДатаПолучения - - View - false - - - Edit - false - - - - DataProcessor.ПомощникСозданияОбменаДанными.Attribute.УзелИнформационнойБазы - - View - false - - - Edit - false - - - - DataProcessor.СопоставлениеОбъектовИнформационныхБаз.Attribute.ИмяТипаОбъектаТаблицыИсточника - - View - false - - - Edit - false - - - - Catalog.ЭлектронноеПисьмоВходящееПрисоединенныеФайлы.Attribute.Зашифрован - - View - false - - - Edit - false - - - - Catalog.ЭлектронноеПисьмоИсходящееПрисоединенныеФайлы.Attribute.Том - - View - false - - - Edit - false - - - - Catalog.ЗапланированноеВзаимодействиеПрисоединенныеФайлы.Attribute.СтатусИзвлеченияТекста - - View - false - - - Edit - false - - - - DataProcessor.КонвертацияОбъектовРаспределенныхИнформационныхБаз.Attribute.КлючСообщенияЖурналаРегистрации - - View - false - - - Edit - false - - - - Catalog.РолиИсполнителей.Attribute.Комментарий - - View - false - - - Edit - false - - - - Catalog.Организации.TabularSection.КонтактнаяИнформация.Attribute.АдресЭП - - View - false - - - Edit - false - - - - DataProcessor.ТранспортСообщенийОбменаFTP.Attribute.FTPСоединениеПорт - - View - false - - - Edit - false - - - - DataProcessor.ПомощникСозданияОбменаДанными.Attribute.ИспользоватьПараметрыТранспортаFTP - - View - false - - - Edit - false - - - - Catalog.Организации.TabularSection.КонтактнаяИнформация.Attribute.Страна - - View - false - - - Edit - false - - - - Catalog.ЭлектронноеПисьмоИсходящееПрисоединенныеФайлы.TabularSection.СертификатыШифрования.Attribute.Отпечаток - - View - false - - - Edit - false - - - - Document.Встреча.TabularSection.НаборыЗначенийДоступа - - View - false - - - Edit - false - - - - InformationRegister.ОбщиеНастройкиУзловИнформационныхБаз.Resource.ВыполнитьКорректировкуИнформацииСопоставления - - View - false - - - Edit - false - - - - DataProcessor.СопоставлениеОбъектовИнформационныхБаз.Attribute.СписокПолейТаблицы - - View - false - - - Edit - false - - - - DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.Параметры - - View - false - - - Edit - false - - - - Document.ЗапланированноеВзаимодействие.TabularSection.НаборыЗначенийДоступа - - View - false - - - Edit - false - - - - DataProcessor.БлокировкаРаботыПользователей.Attribute.ВременноЗапретитьРаботуПользователей - - View - false - - - Edit - false - - - - Document.ЭлектронноеПисьмоИсходящее.Attribute.Текст - - View - false - - - Edit - false - - - - DataProcessor.ОбновлениеКонфигурации.Attribute.ПроверятьНаличиеОбновленияПриЗапуске - - View - false - - - Edit - false - - - - Catalog.ЭлектронноеПисьмоИсходящееПрисоединенныеФайлы.TabularSection.ЭлектронныеПодписи.Attribute.ДатаПодписи - - View - false - - - Edit - false - - - - Document.ЭлектронноеПисьмоИсходящее.Attribute.ЕстьВложения - - View - false - - - Edit - false - - - - Document.ЭлектронноеПисьмоВходящее.Attribute.ТекстHTML - - View - false - - - Edit - false - - - - InformationRegister.ИдентификаторыПолученныхЭлектронныхПисем.Dimension.Идентификатор - - View - false - - - Edit - false - - - - InformationRegister.ПользовательскиеМакетыПечати.Dimension.ИмяМакета - - View - false - - - Edit - false - - - - DataProcessor.ПомощникСозданияОбменаДанными.Attribute.ПрефиксИнформационнойБазыИсточникаУстановлен - - View - false - - - Edit - false - - - - Catalog.ЭлектронноеПисьмоВходящееПрисоединенныеФайлы.Attribute.ПодписанЭП - - View - false - - - Edit - false - - - - DataProcessor.СопоставлениеОбъектовИнформационныхБаз.TabularSection.ТаблицаАвтоматическиСопоставленныхОбъектов.Attribute.ИсточникПоле3 - - View - false - - - Edit - false - - - - Catalog.ЭлектронноеПисьмоВходящееПрисоединенныеФайлы.Attribute.Изменил - - View - false - - - Edit - false - - - - Catalog.ЭлектронноеПисьмоИсходящееПрисоединенныеФайлы.TabularSection.ЭлектронныеПодписи.Attribute.Отпечаток - - View - false - - - Edit - false - - - - Catalog.Файлы.StandardAttribute.Predefined - - View - false - - - Edit - false - - - - Catalog.Файлы.StandardAttribute.Ref - - View - false - - - Edit - false - - - - Catalog.Файлы.StandardAttribute.DeletionMark - - View - false - - - Edit - false - - - - Catalog.Файлы.StandardAttribute.IsFolder - - View - false - - - Edit - false - - - - Catalog.Файлы.StandardAttribute.Owner - - View - false - - - Edit - false - - - - Catalog.Файлы.StandardAttribute.Parent - - View - false - - - Edit - false - - - - Catalog.Файлы.StandardAttribute.Description - - View - false - - - Edit - false - - - - Catalog.Файлы.StandardAttribute.Code - - View - false - - - Edit - false - - - - Catalog.ПапкиФайлов.TabularSection.ДополнительныеРеквизиты - - View - false - - - Edit - false - - - - Document.ЭлектронноеПисьмоВходящее.Attribute.Ответственный - - View - false - - - Edit - false - - - - Document.Встреча.TabularSection.Участники - - View - false - - - Edit - false - - - - Catalog.Файлы.Attribute.ТекущаяВерсияПутьКФайлу - - View - false - - - Edit - false - - - - DataProcessor.СопоставлениеОбъектовИнформационныхБаз.Attribute.ДанныеУспешноЗагружены - - View - false - - - Edit - false - - - - Catalog.ЭлектронноеПисьмоИсходящееПрисоединенныеФайлы.TabularSection.СертификатыШифрования.Attribute.Представление - - View - false - - - Edit - false - - - - Task.ЗадачаИсполнителя.Attribute.ПринятаКИсполнению - - View - false - - - Edit - false - - - - InformationRegister.ДанныеБизнесПроцессов.Resource.Номер - - View - false - - - Edit - false - - - - DataProcessor.ПомощникИнтерактивногоОбменаДанными.TabularSection.ИнформацияСтатистики.Attribute.ЭтоУдалениеОбъекта - - View - false - - - Edit - false - - - - Document.ЭлектронноеПисьмоВходящее.TabularSection.ПолучателиКопий.Attribute.Адрес - - View - false - - - Edit - false - - - - Catalog.ТелефонныйЗвонокПрисоединенныеФайлы.TabularSection.СертификатыШифрования.Attribute.Сертификат - - View - false - - - Edit - false - - - - DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.ИмяВременногоФайлаОбработчиковСобытий - - View - false - - - Edit - false - - - - Catalog.ВерсииФайлов.StandardAttribute.Predefined - - View - false - - - Edit - false - - - - Catalog.ВерсииФайлов.StandardAttribute.Ref - - View - false - - - Edit - false - - - - Catalog.ВерсииФайлов.StandardAttribute.DeletionMark - - View - false - - - Edit - false - - - - Catalog.ВерсииФайлов.StandardAttribute.IsFolder - - View - false - - - Edit - false - - - - Catalog.ВерсииФайлов.StandardAttribute.Owner - - View - false - - - Edit - false - - - - Catalog.ВерсииФайлов.StandardAttribute.Parent - - View - false - - - Edit - false - - - - Catalog.ВерсииФайлов.StandardAttribute.Description - - View - false - - - Edit - false - - - - Catalog.ВерсииФайлов.StandardAttribute.Code - - View - false - - - Edit - false - - - - DataProcessor.ПомощникСозданияОбменаДанными.Attribute.НаименованиеЭтойБазы - - View - false - - - Edit - false - - - - Catalog.ДополнительныеОтчетыИОбработки.Attribute.Информация - - View - false - - - Edit - false - - - - Catalog.ВерсииФайлов.TabularSection.ЭлектронныеПодписи.Attribute.Сертификат - - View - false - - - Edit - false - - - - Catalog.ТелефонныйЗвонокПрисоединенныеФайлы.TabularSection.СертификатыШифрования.Attribute.Представление - - View - false - - - Edit - false - - - - Catalog.Файлы.Attribute.ТекущаяВерсияАвтор - - View - false - - - Edit - false - - - - Catalog.УчетныеЗаписиЭлектроннойПочты.Attribute.Пользователь - - View - false - - - Edit - false - - - - Document.Встреча.Attribute.Предмет - - View - false - - - Edit - false - - - - InformationRegister.ПрисоединенныеФайлы.StandardAttribute.Active - - View - false - - - Edit - false - - - - InformationRegister.ПрисоединенныеФайлы.StandardAttribute.LineNumber - - View - false - - - Edit - false - - - - InformationRegister.ПрисоединенныеФайлы.StandardAttribute.Recorder - - View - false - - - Edit - false - - - - InformationRegister.ПрисоединенныеФайлы.StandardAttribute.Period - - View - false - - - Edit - false - - - - DataProcessor.ОбновлениеКонфигурации.Attribute.ВыслатьОтчетНаПочту - - View - false - - - Edit - false - - - - DataProcessor.ТранспортСообщенийОбменаEMAIL.Attribute.ПарольАрхиваСообщенияОбмена - - View - false - - - Edit - false - - - - Catalog.РолиИсполнителей.Attribute.ИспользуетсяБезОбъектовАдресации - - View - false - - - Edit - false - - - - InformationRegister.ИдентификаторыПолученныхЭлектронныхПисем.Dimension.УчетнаяЗапись - - View - false - - - Edit - false - - - - Catalog.ВстречаПрисоединенныеФайлы.TabularSection.ЭлектронныеПодписи.Attribute.УстановившийПодпись - - View - false - - - Edit - false - - - - Catalog.ГруппыДоступа.TabularSection.ЗначенияДоступа.Attribute.ВидДоступа - - View - false - - - Edit - false - - - - Catalog.СценарииОбменовДанными.Attribute.Комментарий - - View - false - - - Edit - false - - - - Catalog.УчетныеЗаписиЭлектроннойПочты.Attribute.СерверИсходящейПочты - - View - false - - - Edit - false - - - - Document.Встреча.TabularSection.Участники.Attribute.КакСвязаться - - View - false - - - Edit - false - - - - DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.НастройкаАвтоматическойЗагрузкиДанных - - View - false - - - Edit - false - - - - Catalog.ВопросыШаблонаАнкеты.TabularSection.ПредопределенныеОтветы.Attribute.Ответ - - View - false - - - Edit - false - - - - Catalog.ГруппыИсполнителейЗадач.Attribute.ОсновнойОбъектАдресации - - View - false - - - Edit - false - - - - Catalog.ВариантыОтчетов.Attribute.УдалитьПредставлениеОбъекта - - View - false - - - Edit - false - - - - InformationRegister.РабочиеКаталогиФайлов.StandardAttribute.Active - - View - false - - - Edit - false - - - - InformationRegister.РабочиеКаталогиФайлов.StandardAttribute.LineNumber - - View - false - - - Edit - false - - - - InformationRegister.РабочиеКаталогиФайлов.StandardAttribute.Recorder - - View - false - - - Edit - false - - - - InformationRegister.РабочиеКаталогиФайлов.StandardAttribute.Period - - View - false - - - Edit - false - - - - DataProcessor.ОбновлениеКонфигурации.TabularSection.ДоступныеОбновления.Attribute.Версия - - View - false - - - Edit - false - - - - Catalog.Организации.TabularSection.КонтактнаяИнформация.Attribute.НомерТелефона - - View - false - - - Edit - false - - - - BusinessProcess.Задание.Attribute.НаПроверке - - View - false - - - Edit - false - - - - Catalog.ВстречаПрисоединенныеФайлы.Attribute.Зашифрован - - View - false - - - Edit - false - - - - InformationRegister.НастройкиТранспортаОбмена.Resource.FTPСоединениеПуть - - View - false - - - Edit - false - - - - Document.ЭлектронноеПисьмоВходящее.Attribute.СписокПолучателейПисьма - - View - false - - - Edit - false - - - - DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.ВыполнитьОбменДаннымиВОптимизированномФормате - - View - false - - - Edit - false - - - - Catalog.ЭлектронноеПисьмоИсходящееПрисоединенныеФайлы.Attribute.Зашифрован - - View - false - - - Edit - false - - - - Catalog.ГруппыВнешнихПользователей.TabularSection.Роли - - View - false - - - Edit - false - - - - Catalog.ПрофилиГруппДоступа.StandardAttribute.Predefined - - View - false - - - Edit - false - - - - Catalog.ПрофилиГруппДоступа.StandardAttribute.Ref - - View - false - - - Edit - false - - - - Catalog.ПрофилиГруппДоступа.StandardAttribute.DeletionMark - - View - false - - - Edit - false - - - - Catalog.ПрофилиГруппДоступа.StandardAttribute.IsFolder - - View - false - - - Edit - false - - - - Catalog.ПрофилиГруппДоступа.StandardAttribute.Owner - - View - false - - - Edit - false - - - - Catalog.ПрофилиГруппДоступа.StandardAttribute.Parent - - View - false - - - Edit - false - - - - Catalog.ПрофилиГруппДоступа.StandardAttribute.Description - - View - false - - - Edit - false - - - - Catalog.ПрофилиГруппДоступа.StandardAttribute.Code - - View - false - - - Edit - false - - - - Catalog.ЭлектронноеПисьмоВходящееПрисоединенныеФайлы.TabularSection.ЭлектронныеПодписи.Attribute.Отпечаток - - View - false - - - Edit - false - - - - DataProcessor.ОбновлениеКонфигурации.Attribute.СоздаватьРезервнуюКопию - - View - false - - - Edit - false - - - - Catalog.ГруппыВнешнихПользователей.TabularSection.Роли.Attribute.УдалитьРоль - - View - false - - - Edit - false - - - - Catalog.ПрофилиГруппДоступа.TabularSection.Роли.Attribute.УдалитьРоль - - View - false - - - Edit - false - - - - Document.Встреча.Attribute.Описание - - View - false - - - Edit - false - - - - Document.ЭлектронноеПисьмоВходящее.TabularSection.ПолучателиОтвета.Attribute.Контакт - - View - false - - - Edit - false - - - - Catalog.Файлы.TabularSection.ДополнительныеРеквизиты - - View - false - - - Edit - false - - - - Catalog.Пользователи.TabularSection.КонтактнаяИнформация.Attribute.ДоменноеИмяСервера - - View - false - - - Edit - false - - - - Catalog.СценарииОбменовДанными.TabularSection.НастройкиОбмена.Attribute.ВидТранспортаОбмена - - View - false - - - Edit - false - - - - Document.ЭлектронноеПисьмоВходящее.StandardAttribute.Posted - - View - false - - - Edit - false - - - - Document.ЭлектронноеПисьмоВходящее.StandardAttribute.Ref - - View - false - - - Edit - false - - - - Document.ЭлектронноеПисьмоВходящее.StandardAttribute.DeletionMark - - View - false - - - Edit - false - - - - Document.ЭлектронноеПисьмоВходящее.StandardAttribute.Date - - View - false - - - Edit - false - - - - Document.ЭлектронноеПисьмоВходящее.StandardAttribute.Number - - View - false - - - Edit - false - - - - DataProcessor.ОбновлениеКонфигурации.TabularSection.ДоступныеОбновления.Attribute.ПутьКЛокальномуФайлу - - View - false - - - Edit - false - - - - Task.ЗадачаИсполнителя.Attribute.Описание - - View - false - - - Edit - false - - - - Catalog.Организации.TabularSection.КонтактнаяИнформация.Attribute.НомерТелефонаБезКодов - - View - false - - - Edit - false - - - - DataProcessor.НастройкаРезервногоКопированияИБ.Attribute.ФайлЗагрузкиРезервнойКопии - - View - false - - - Edit - false - - - - InformationRegister.УдалитьАдресныйКлассификатор.Resource.Сокращение - - View - false - - - Edit - false - - - - Document.ЭлектронноеПисьмоИсходящее.Attribute.СписокПолучателейСкрытыхКопий - - View - false - - - Edit - false - - - - Document.Анкета.Attribute.Респондент - - View - false - - - Edit - false - - - - InformationRegister.ОтветыНаВопросыАнкет.Resource.Ответ - - View - false - - - Edit - false - - - - DataProcessor.ПомощникИнтерактивногоОбменаДанными.Attribute.ИмяФайлаСообщенияОбмена - - View - false - - - Edit - false - - - - InformationRegister.УдалитьАдресныйКлассификатор.Dimension.КодРайонаВКоде - - View - false - - - Edit - false - - - - InformationRegister.ИсполнителиЗадач.Attribute.ГруппаИсполнителейЗадач - - View - false - - - Edit - false - - - - Task.ЗадачаИсполнителя.Attribute.ДатаИсполнения - - View - false - - - Edit - false - - - - Catalog.ВерсииФайлов.Attribute.Зашифрован - - View - false - - - Edit - false - - - - Catalog.ВариантыОтчетов.Attribute.Настройки - - View - false - - - Edit - false - - - - Document.ЗапланированноеВзаимодействие.TabularSection.Участники.Attribute.ПредставлениеКонтакта - - View - false - - - Edit - false - - - - DataProcessor.ОбновлениеКонфигурации.TabularSection.ДоступныеОбновления.Attribute.ПутьКФайлуОбновления - - View - false - - - Edit - false - - - - DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.ФлагРежимОтладки - - View - false - - - Edit - false - - - - Catalog.Файлы.Attribute.ТекущаяВерсияДатаСоздания - - View - false - - - Edit - false - - - - Document.НазначениеОпросов.Attribute.ШаблонАнкеты - - View - false - - - Edit - false - - - - DataProcessor.СопоставлениеОбъектовИнформационныхБаз.TabularSection.ТаблицаСортировки.Attribute.НаправлениеСортировки - - View - false - - - Edit - false - - - - Document.ТелефонныйЗвонок.Attribute.Удалить_Рассмотрено - - View - false - - - Edit - false - - - - Catalog.ЭлектронноеПисьмоИсходящееПрисоединенныеФайлы.Attribute.ПодписанЭП - - View - false - - - Edit - false - - - - InformationRegister.ФайлыВРабочемКаталоге.Dimension.Пользователь - - View - false - - - Edit - false - - - - Catalog.ГруппыДоступа.Attribute.ТипПользователей - - View - false - - - Edit - false - - - - Catalog.ЗапланированноеВзаимодействиеПрисоединенныеФайлы.TabularSection.ЭлектронныеПодписи.Attribute.Комментарий - - View - false - - - Edit - false - - - - DataProcessor.СопоставлениеОбъектовИнформационныхБаз.Attribute.ПоляПоискаТаблицыПриемника - - View - false - - - Edit - false - - - - InformationRegister.СоставыГруппПользователей.Dimension.ГруппаПользователей - - View - false - - - Edit - false - - - - Catalog.ПрофилиГруппДоступа.TabularSection.ВидыДоступа.Attribute.Предустановленный - - View - false - - - Edit - false - - - - InformationRegister.НомераОтсканированныхФайлов.Dimension.Владелец - - View - false - - - Edit - false - - - - DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.ИмяФайлаПротоколаОбмена - - View - false - - - Edit - false - - - - DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.ВыводВПротоколИнформационныхСообщений - - View - false - - - Edit - false - - - - DataProcessor.ОбновлениеКонфигурации.TabularSection.ДоступныеОбновления.Attribute.Поставщик - - View - false - - - Edit - false - - - - DataProcessor.ОбновлениеКонфигурации.TabularSection.ДоступныеОбновления.Attribute.Конфигурация - - View - false - - - Edit - false - - - - DataProcessor.СопоставлениеОбъектовИнформационныхБаз.TabularSection.ТаблицаСортировки - - View - false - - - Edit - false - - - - Task.ЗадачаИсполнителя.Attribute.Автор - - View - false - - - Edit - false - - - - Catalog.ДополнительныеОтчетыИОбработки.Attribute.ИспользоватьДляФормыСписка - - View - false - - - Edit - false - - - - Catalog.Пользователи.TabularSection.КонтактнаяИнформация.Attribute.Город - - View - false - - - Edit - false - - - - Catalog.Валюты.Attribute.ПараметрыПрописиНаРусском - - View - false - - - Edit - false - - - - DataProcessor.СопоставлениеОбъектовИнформационныхБаз.TabularSection.ТаблицаАвтоматическиСопоставленныхОбъектов.Attribute.УникальныйИдентификаторИсточника - - View - false - - - Edit - false - - - - Catalog.УчетныеЗаписиЭлектроннойПочты.Attribute.СпособPOP3Аутентификации - - View - false - - - Edit - false - - - - InformationRegister.УдалитьПраваПоЗначениямДоступа.Resource.Запрещено - - View - false - - - Edit - false - - - - Document.ТелефонныйЗвонок.TabularSection.НаборыЗначенийДоступа.Attribute.НомерНабора - - View - false - - - Edit - false - - - - InformationRegister.КалендарныеГрафики.Dimension.Календарь - - View - false - - - Edit - false - - - - Catalog.ВерсииФайлов.Attribute.ФайлХранилище - - View - false - - - Edit - false - - - diff --git a/SSL/src/Roles/ДобавлениеИзменениеСтранМира/ДобавлениеИзменениеСтранМира.mdo b/SSL/src/Roles/ДобавлениеИзменениеСтранМира/ДобавлениеИзменениеСтранМира.mdo deleted file mode 100644 index d3919e5fe..000000000 --- a/SSL/src/Roles/ДобавлениеИзменениеСтранМира/ДобавлениеИзменениеСтранМира.mdo +++ /dev/null @@ -1,8 +0,0 @@ - - - ДобавлениеИзменениеСтранМира - - ru - Добавление и изменение стран мира - - diff --git a/SSL/src/Roles/ДобавлениеИзменениеШаблоновАнкет/Rights.rights b/SSL/src/Roles/ДобавлениеИзменениеШаблоновАнкет/Rights.rights index aaeae89ff..42932944f 100644 --- a/SSL/src/Roles/ДобавлениеИзменениеШаблоновАнкет/Rights.rights +++ b/SSL/src/Roles/ДобавлениеИзменениеШаблоновАнкет/Rights.rights @@ -908,7 +908,7 @@ - Catalog.УчетныеЗаписиЭлектроннойПочты.Attribute.Пароль + Catalog.УчетныеЗаписиЭлектроннойПочты.Attribute.УдалитьПароль View false @@ -1519,7 +1519,7 @@ - Catalog.УчетныеЗаписиЭлектроннойПочты.Attribute.ПарольSMTP + Catalog.УчетныеЗаписиЭлектроннойПочты.Attribute.УдалитьПарольSMTP View false @@ -3037,7 +3037,7 @@ - DataProcessor.ОбновлениеКонфигурации.Attribute.ИсточникОбновления + DataProcessor.ПоискИУстановкаОбновлений.Attribute.ИсточникОбновления View false @@ -3136,7 +3136,7 @@ - DataProcessor.ОбновлениеКонфигурации.TabularSection.ДоступныеОбновления.Attribute.Версия2Разряд + DataProcessor.ПоискИУстановкаОбновлений.TabularSection.ДоступныеОбновления.Attribute.Версия2Разряд View false @@ -3147,7 +3147,7 @@ - DataProcessor.ОбновлениеКонфигурации.Attribute.РезультатОбновления + DataProcessor.ПоискИУстановкаОбновлений.Attribute.РезультатОбновления View false @@ -3373,7 +3373,7 @@ - DataProcessor.ОбновлениеКонфигурации.Attribute.КодПользователяСервераОбновлений + DataProcessor.ПоискИУстановкаОбновлений.Attribute.КодПользователяСервераОбновлений View false @@ -3802,7 +3802,7 @@ - DataProcessor.ОбновлениеКонфигурации.TabularSection.ДоступныеОбновления.Attribute.ФайлОбновления + DataProcessor.ПоискИУстановкаОбновлений.TabularSection.ДоступныеОбновления.Attribute.ФайлОбновления View false @@ -3923,7 +3923,7 @@ - DataProcessor.ОбновлениеКонфигурации.Attribute.КодЗадачиПланировщика + DataProcessor.ПоискИУстановкаОбновлений.Attribute.КодЗадачиПланировщика View false @@ -4649,7 +4649,7 @@ - DataProcessor.ОбновлениеКонфигурации.TabularSection.ДоступныеОбновления.Attribute.НомерДискаИТС + DataProcessor.ПоискИУстановкаОбновлений.TabularSection.ДоступныеОбновления.Attribute.НомерДискаИТС View false @@ -4814,7 +4814,7 @@ - DataProcessor.ОбновлениеКонфигурации.TabularSection.ДоступныеОбновления + DataProcessor.ПоискИУстановкаОбновлений.TabularSection.ДоступныеОбновления View false @@ -5859,7 +5859,7 @@ - DataProcessor.ОбновлениеКонфигурации.Attribute.ДатаВремяОбновления + DataProcessor.ПоискИУстановкаОбновлений.Attribute.ДатаВремяОбновления View false @@ -5870,7 +5870,7 @@ - DataProcessor.ПомощникСозданияОбменаДанными.Attribute.ИмяФайлаНастроекОбменаДаннымиДляЗагрузки + DataProcessor.ПомощникСозданияОбменаДанными.Attribute.ИмяФайлаНастроекСинхронизацииДанныхДляЗагрузки View false @@ -6254,17 +6254,6 @@ false - - InformationRegister.НазначениеДополнительныхОбработок.Resource.ИспользоватьПечатныеФормы - - View - false - - - Edit - false - - Catalog.СценарииОбменовДанными.TabularSection.НастройкиОбмена.Attribute.УзелИнформационнойБазы @@ -6959,7 +6948,7 @@ - DataProcessor.ОбновлениеКонфигурации.Attribute.РежимОбновления + DataProcessor.ПоискИУстановкаОбновлений.Attribute.РежимОбновления View false @@ -7487,7 +7476,7 @@ - DataProcessor.ПомощникСозданияОбменаДанными.Attribute.ИмяФайлаНастроекОбменаДанными + DataProcessor.ПомощникСозданияОбменаДанными.Attribute.ИмяФайлаНастроекСинхронизацииДанных View false @@ -8246,7 +8235,7 @@ - DataProcessor.ОбновлениеКонфигурации.Attribute.ИспользоватьРасписаниеДляПроверкиОбновления + DataProcessor.ПоискИУстановкаОбновлений.Attribute.ИспользоватьРасписаниеДляПроверкиОбновления View false @@ -8257,7 +8246,7 @@ - DataProcessor.ОбновлениеКонфигурации.Attribute.ЗапомнитьПарольСервераОбновлений + DataProcessor.ПоискИУстановкаОбновлений.Attribute.ЗапомнитьПарольСервераОбновлений View false @@ -8620,7 +8609,7 @@ - DataProcessor.ОбновлениеКонфигурации.Attribute.ВосстанавливатьИнформационнуюБазу + DataProcessor.ПоискИУстановкаОбновлений.Attribute.ВосстанавливатьИнформационнуюБазу View false @@ -8664,7 +8653,7 @@ - DataProcessor.ОбновлениеКонфигурации.TabularSection.ДоступныеОбновления.Attribute.ПутьКЛокальномуФайлуОбновления + DataProcessor.ПоискИУстановкаОбновлений.TabularSection.ДоступныеОбновления.Attribute.ПутьКЛокальномуФайлуОбновления View false @@ -9357,7 +9346,7 @@ - DataProcessor.ОбновлениеКонфигурации.Attribute.ИмяКаталогаРезервнойКопииИБ + DataProcessor.ПоискИУстановкаОбновлений.Attribute.ИмяКаталогаРезервнойКопииИБ View false @@ -9753,7 +9742,7 @@ - DataProcessor.ОбновлениеКонфигурации.Attribute.ИмяФайлаОбновления + DataProcessor.ПоискИУстановкаОбновлений.Attribute.ИмяФайлаОбновления View false @@ -10215,7 +10204,7 @@ - DataProcessor.ОбновлениеКонфигурации.TabularSection.ДоступныеОбновления.Attribute.РазмерФайлаОбновления + DataProcessor.ПоискИУстановкаОбновлений.TabularSection.ДоступныеОбновления.Attribute.РазмерФайлаОбновления View false @@ -10325,7 +10314,7 @@ - DataProcessor.ОбновлениеКонфигурации.Attribute.РасписаниеПроверкиНаличияОбновления + DataProcessor.ПоискИУстановкаОбновлений.Attribute.РасписаниеПроверкиНаличияОбновления View false @@ -10589,7 +10578,7 @@ - DataProcessor.ОбновлениеКонфигурации.TabularSection.ДоступныеОбновления.Attribute.ВерсияДляОбновления + DataProcessor.ПоискИУстановкаОбновлений.TabularSection.ДоступныеОбновления.Attribute.ВерсияДляОбновления View false @@ -10809,7 +10798,7 @@ - Catalog.ГруппыВнешнихПользователей.Attribute.ТипОбъектовАвторизации + Catalog.ГруппыВнешнихПользователей.Attribute.УдалитьТипОбъектовАвторизации View false @@ -10897,7 +10886,7 @@ - DataProcessor.ОбновлениеКонфигурации.TabularSection.ДоступныеОбновления.Attribute.Версия4Разряд + DataProcessor.ПоискИУстановкаОбновлений.TabularSection.ДоступныеОбновления.Attribute.Версия4Разряд View false @@ -11172,7 +11161,7 @@ - DataProcessor.ОбновлениеКонфигурации.Attribute.ПовторныйЗапуск + DataProcessor.ПоискИУстановкаОбновлений.Attribute.ПовторныйЗапуск View false @@ -11205,7 +11194,7 @@ - InformationRegister.НастройкиТранспортаОбмена.Resource.ПарольАрхиваСообщенияОбмена + InformationRegister.НастройкиТранспортаОбмена.Resource.УдалитьПарольАрхиваСообщенияОбмена View false @@ -11480,7 +11469,7 @@ - DataProcessor.ОбновлениеКонфигурации.TabularSection.ДоступныеОбновления.Attribute.ЛокальныйОтносительныйКаталог + DataProcessor.ПоискИУстановкаОбновлений.TabularSection.ДоступныеОбновления.Attribute.ЛокальныйОтносительныйКаталог View false @@ -11524,7 +11513,7 @@ - DataProcessor.ОбновлениеКонфигурации.Attribute.ТехническаяИнформацияОбОшибке + DataProcessor.ПоискИУстановкаОбновлений.Attribute.ТехническаяИнформацияОбОшибке View false @@ -11590,7 +11579,7 @@ - DataProcessor.ОбновлениеКонфигурации.TabularSection.ДоступныеОбновления.Attribute.Версия1Разряд + DataProcessor.ПоискИУстановкаОбновлений.TabularSection.ДоступныеОбновления.Attribute.Версия1Разряд View false @@ -11832,7 +11821,7 @@ - DataProcessor.ОбновлениеКонфигурации.Attribute.ПарольСервераОбновлений + DataProcessor.ПоискИУстановкаОбновлений.Attribute.ПарольСервераОбновлений View false @@ -12800,7 +12789,7 @@ - DataProcessor.ОбновлениеКонфигурации.TabularSection.ДоступныеОбновления.Attribute.Версия3Разряд + DataProcessor.ПоискИУстановкаОбновлений.TabularSection.ДоступныеОбновления.Attribute.Версия3Разряд View false @@ -12998,7 +12987,7 @@ - InformationRegister.НастройкиТранспортаОбмена.Resource.FTPСоединениеПароль + InformationRegister.НастройкиТранспортаОбмена.Resource.УдалитьFTPСоединениеПароль View false @@ -13141,7 +13130,7 @@ - DataProcessor.ОбновлениеКонфигурации.Attribute.НуженФайлОбновления + DataProcessor.ПоискИУстановкаОбновлений.Attribute.НуженФайлОбновления View false @@ -13328,7 +13317,7 @@ - DataProcessor.ОбновлениеКонфигурации.Attribute.АдресЭлектроннойПочты + DataProcessor.ПоискИУстановкаОбновлений.Attribute.АдресЭлектроннойПочты View false @@ -13862,7 +13851,7 @@ - DataProcessor.ОбновлениеКонфигурации.Attribute.ПроверятьНаличиеОбновленияПриЗапуске + DataProcessor.ПоискИУстановкаОбновлений.Attribute.ПроверятьНаличиеОбновленияПриЗапуске View false @@ -14412,7 +14401,7 @@ - DataProcessor.ОбновлениеКонфигурации.Attribute.ВыслатьОтчетНаПочту + DataProcessor.ПоискИУстановкаОбновлений.Attribute.ВыслатьОтчетНаПочту View false @@ -14588,7 +14577,7 @@ - DataProcessor.ОбновлениеКонфигурации.TabularSection.ДоступныеОбновления.Attribute.Версия + DataProcessor.ПоискИУстановкаОбновлений.TabularSection.ДоступныеОбновления.Attribute.Версия View false @@ -14786,7 +14775,7 @@ - DataProcessor.ОбновлениеКонфигурации.Attribute.СоздаватьРезервнуюКопию + DataProcessor.ПоискИУстановкаОбновлений.Attribute.СоздаватьРезервнуюКопию View false @@ -14929,7 +14918,7 @@ - DataProcessor.ОбновлениеКонфигурации.TabularSection.ДоступныеОбновления.Attribute.ПутьКЛокальномуФайлу + DataProcessor.ПоискИУстановкаОбновлений.TabularSection.ДоступныеОбновления.Attribute.ПутьКЛокальномуФайлу View false @@ -15105,7 +15094,7 @@ - DataProcessor.ОбновлениеКонфигурации.TabularSection.ДоступныеОбновления.Attribute.ПутьКФайлуОбновления + DataProcessor.ПоискИУстановкаОбновлений.TabularSection.ДоступныеОбновления.Attribute.ПутьКФайлуОбновления View false @@ -15192,17 +15181,6 @@ false - - Catalog.ГруппыДоступа.Attribute.ТипПользователей - - View - false - - - Edit - false - - Catalog.ЗапланированноеВзаимодействиеПрисоединенныеФайлы.TabularSection.ЭлектронныеПодписи.Attribute.Комментарий @@ -15281,7 +15259,7 @@ - DataProcessor.ОбновлениеКонфигурации.TabularSection.ДоступныеОбновления.Attribute.Поставщик + DataProcessor.ПоискИУстановкаОбновлений.TabularSection.ДоступныеОбновления.Attribute.Поставщик View false @@ -15292,7 +15270,7 @@ - DataProcessor.ОбновлениеКонфигурации.TabularSection.ДоступныеОбновления.Attribute.Конфигурация + DataProcessor.ПоискИУстановкаОбновлений.TabularSection.ДоступныеОбновления.Attribute.Конфигурация View false diff --git a/SSL/src/Roles/ЗапускAutomation/Rights.rights b/SSL/src/Roles/ЗапускAutomation/Rights.rights index 99a244a1a..6d5c6afcc 100644 --- a/SSL/src/Roles/ЗапускAutomation/Rights.rights +++ b/SSL/src/Roles/ЗапускAutomation/Rights.rights @@ -950,7 +950,7 @@ - Catalog.УчетныеЗаписиЭлектроннойПочты.Attribute.Пароль + Catalog.УчетныеЗаписиЭлектроннойПочты.Attribute.УдалитьПароль View false @@ -1576,37 +1576,6 @@ false - - Configuration.БиблиотекаСтандартныхПодсистем - - Automation - true - - - MainWindowModeNormal - true - - - MainWindowModeWorkplace - true - - - MainWindowModeEmbeddedWorkplace - true - - - MainWindowModeFullscreenWorkplace - true - - - MainWindowModeKiosk - true - - - AnalyticsSystemClient - true - - InformationRegister.ПользовательскиеМакетыПечати.Dimension.Объект @@ -1663,7 +1632,7 @@ - Catalog.УчетныеЗаписиЭлектроннойПочты.Attribute.ПарольSMTP + Catalog.УчетныеЗаписиЭлектроннойПочты.Attribute.УдалитьПарольSMTP View false @@ -2124,6 +2093,37 @@ false + + Configuration.БиблиотекаСтандартныхПодсистем + + Automation + true + + + MainWindowModeNormal + true + + + MainWindowModeWorkplace + true + + + MainWindowModeEmbeddedWorkplace + true + + + MainWindowModeFullscreenWorkplace + true + + + MainWindowModeKiosk + true + + + AnalyticsSystemClient + true + + Document.НазначениеОпросов.Attribute.ВозможностьПредварительногоСохранения @@ -3225,7 +3225,7 @@ - DataProcessor.ОбновлениеКонфигурации.Attribute.ИсточникОбновления + DataProcessor.ПоискИУстановкаОбновлений.Attribute.ИсточникОбновления View false @@ -3324,7 +3324,7 @@ - DataProcessor.ОбновлениеКонфигурации.TabularSection.ДоступныеОбновления.Attribute.Версия2Разряд + DataProcessor.ПоискИУстановкаОбновлений.TabularSection.ДоступныеОбновления.Attribute.Версия2Разряд View false @@ -3346,7 +3346,7 @@ - DataProcessor.ОбновлениеКонфигурации.Attribute.РезультатОбновления + DataProcessor.ПоискИУстановкаОбновлений.Attribute.РезультатОбновления View false @@ -3621,7 +3621,7 @@ - DataProcessor.ОбновлениеКонфигурации.Attribute.КодПользователяСервераОбновлений + DataProcessor.ПоискИУстановкаОбновлений.Attribute.КодПользователяСервераОбновлений View false @@ -4050,7 +4050,7 @@ - DataProcessor.ОбновлениеКонфигурации.TabularSection.ДоступныеОбновления.Attribute.ФайлОбновления + DataProcessor.ПоискИУстановкаОбновлений.TabularSection.ДоступныеОбновления.Attribute.ФайлОбновления View false @@ -4171,7 +4171,7 @@ - DataProcessor.ОбновлениеКонфигурации.Attribute.КодЗадачиПланировщика + DataProcessor.ПоискИУстановкаОбновлений.Attribute.КодЗадачиПланировщика View false @@ -4919,7 +4919,7 @@ - DataProcessor.ОбновлениеКонфигурации.TabularSection.ДоступныеОбновления.Attribute.НомерДискаИТС + DataProcessor.ПоискИУстановкаОбновлений.TabularSection.ДоступныеОбновления.Attribute.НомерДискаИТС View false @@ -5084,7 +5084,7 @@ - DataProcessor.ОбновлениеКонфигурации.TabularSection.ДоступныеОбновления + DataProcessor.ПоискИУстановкаОбновлений.TabularSection.ДоступныеОбновления View false @@ -6151,7 +6151,7 @@ - DataProcessor.ОбновлениеКонфигурации.Attribute.ДатаВремяОбновления + DataProcessor.ПоискИУстановкаОбновлений.Attribute.ДатаВремяОбновления View false @@ -6162,7 +6162,7 @@ - DataProcessor.ПомощникСозданияОбменаДанными.Attribute.ИмяФайлаНастроекОбменаДаннымиДляЗагрузки + DataProcessor.ПомощникСозданияОбменаДанными.Attribute.ИмяФайлаНастроекСинхронизацииДанныхДляЗагрузки View false @@ -6557,17 +6557,6 @@ false - - InformationRegister.НазначениеДополнительныхОбработок.Resource.ИспользоватьПечатныеФормы - - View - false - - - Edit - false - - Catalog.СценарииОбменовДанными.TabularSection.НастройкиОбмена.Attribute.УзелИнформационнойБазы @@ -7273,7 +7262,7 @@ - DataProcessor.ОбновлениеКонфигурации.Attribute.РежимОбновления + DataProcessor.ПоискИУстановкаОбновлений.Attribute.РежимОбновления View false @@ -7801,7 +7790,7 @@ - DataProcessor.ПомощникСозданияОбменаДанными.Attribute.ИмяФайлаНастроекОбменаДанными + DataProcessor.ПомощникСозданияОбменаДанными.Attribute.ИмяФайлаНастроекСинхронизацииДанных View false @@ -8560,7 +8549,7 @@ - DataProcessor.ОбновлениеКонфигурации.Attribute.ИспользоватьРасписаниеДляПроверкиОбновления + DataProcessor.ПоискИУстановкаОбновлений.Attribute.ИспользоватьРасписаниеДляПроверкиОбновления View false @@ -8571,7 +8560,7 @@ - DataProcessor.ОбновлениеКонфигурации.Attribute.ЗапомнитьПарольСервераОбновлений + DataProcessor.ПоискИУстановкаОбновлений.Attribute.ЗапомнитьПарольСервераОбновлений View false @@ -8945,7 +8934,7 @@ - DataProcessor.ОбновлениеКонфигурации.Attribute.ВосстанавливатьИнформационнуюБазу + DataProcessor.ПоискИУстановкаОбновлений.Attribute.ВосстанавливатьИнформационнуюБазу View false @@ -8989,7 +8978,7 @@ - DataProcessor.ОбновлениеКонфигурации.TabularSection.ДоступныеОбновления.Attribute.ПутьКЛокальномуФайлуОбновления + DataProcessor.ПоискИУстановкаОбновлений.TabularSection.ДоступныеОбновления.Attribute.ПутьКЛокальномуФайлуОбновления View false @@ -9693,7 +9682,7 @@ - DataProcessor.ОбновлениеКонфигурации.Attribute.ИмяКаталогаРезервнойКопииИБ + DataProcessor.ПоискИУстановкаОбновлений.Attribute.ИмяКаталогаРезервнойКопииИБ View false @@ -10100,7 +10089,7 @@ - DataProcessor.ОбновлениеКонфигурации.Attribute.ИмяФайлаОбновления + DataProcessor.ПоискИУстановкаОбновлений.Attribute.ИмяФайлаОбновления View false @@ -10573,7 +10562,7 @@ - DataProcessor.ОбновлениеКонфигурации.TabularSection.ДоступныеОбновления.Attribute.РазмерФайлаОбновления + DataProcessor.ПоискИУстановкаОбновлений.TabularSection.ДоступныеОбновления.Attribute.РазмерФайлаОбновления View false @@ -10683,7 +10672,7 @@ - DataProcessor.ОбновлениеКонфигурации.Attribute.РасписаниеПроверкиНаличияОбновления + DataProcessor.ПоискИУстановкаОбновлений.Attribute.РасписаниеПроверкиНаличияОбновления View false @@ -10958,7 +10947,7 @@ - DataProcessor.ОбновлениеКонфигурации.TabularSection.ДоступныеОбновления.Attribute.ВерсияДляОбновления + DataProcessor.ПоискИУстановкаОбновлений.TabularSection.ДоступныеОбновления.Attribute.ВерсияДляОбновления View false @@ -11178,7 +11167,7 @@ - Catalog.ГруппыВнешнихПользователей.Attribute.ТипОбъектовАвторизации + Catalog.ГруппыВнешнихПользователей.Attribute.УдалитьТипОбъектовАвторизации View false @@ -11266,7 +11255,7 @@ - DataProcessor.ОбновлениеКонфигурации.TabularSection.ДоступныеОбновления.Attribute.Версия4Разряд + DataProcessor.ПоискИУстановкаОбновлений.TabularSection.ДоступныеОбновления.Attribute.Версия4Разряд View false @@ -11541,7 +11530,7 @@ - DataProcessor.ОбновлениеКонфигурации.Attribute.ПовторныйЗапуск + DataProcessor.ПоискИУстановкаОбновлений.Attribute.ПовторныйЗапуск View false @@ -11574,7 +11563,7 @@ - InformationRegister.НастройкиТранспортаОбмена.Resource.ПарольАрхиваСообщенияОбмена + InformationRegister.НастройкиТранспортаОбмена.Resource.УдалитьПарольАрхиваСообщенияОбмена View false @@ -11860,7 +11849,7 @@ - DataProcessor.ОбновлениеКонфигурации.TabularSection.ДоступныеОбновления.Attribute.ЛокальныйОтносительныйКаталог + DataProcessor.ПоискИУстановкаОбновлений.TabularSection.ДоступныеОбновления.Attribute.ЛокальныйОтносительныйКаталог View false @@ -11904,7 +11893,7 @@ - DataProcessor.ОбновлениеКонфигурации.Attribute.ТехническаяИнформацияОбОшибке + DataProcessor.ПоискИУстановкаОбновлений.Attribute.ТехническаяИнформацияОбОшибке View false @@ -11970,7 +11959,7 @@ - DataProcessor.ОбновлениеКонфигурации.TabularSection.ДоступныеОбновления.Attribute.Версия1Разряд + DataProcessor.ПоискИУстановкаОбновлений.TabularSection.ДоступныеОбновления.Attribute.Версия1Разряд View false @@ -12212,7 +12201,7 @@ - DataProcessor.ОбновлениеКонфигурации.Attribute.ПарольСервераОбновлений + DataProcessor.ПоискИУстановкаОбновлений.Attribute.ПарольСервераОбновлений View false @@ -13235,7 +13224,7 @@ - DataProcessor.ОбновлениеКонфигурации.TabularSection.ДоступныеОбновления.Attribute.Версия3Разряд + DataProcessor.ПоискИУстановкаОбновлений.TabularSection.ДоступныеОбновления.Attribute.Версия3Разряд View false @@ -13444,7 +13433,7 @@ - InformationRegister.НастройкиТранспортаОбмена.Resource.FTPСоединениеПароль + InformationRegister.НастройкиТранспортаОбмена.Resource.УдалитьFTPСоединениеПароль View false @@ -13598,7 +13587,7 @@ - DataProcessor.ОбновлениеКонфигурации.Attribute.НуженФайлОбновления + DataProcessor.ПоискИУстановкаОбновлений.Attribute.НуженФайлОбновления View false @@ -13796,7 +13785,7 @@ - DataProcessor.ОбновлениеКонфигурации.Attribute.АдресЭлектроннойПочты + DataProcessor.ПоискИУстановкаОбновлений.Attribute.АдресЭлектроннойПочты View false @@ -14379,7 +14368,7 @@ - DataProcessor.ОбновлениеКонфигурации.Attribute.ПроверятьНаличиеОбновленияПриЗапуске + DataProcessor.ПоискИУстановкаОбновлений.Attribute.ПроверятьНаличиеОбновленияПриЗапуске View false @@ -14929,7 +14918,7 @@ - DataProcessor.ОбновлениеКонфигурации.Attribute.ВыслатьОтчетНаПочту + DataProcessor.ПоискИУстановкаОбновлений.Attribute.ВыслатьОтчетНаПочту View false @@ -15116,7 +15105,7 @@ - DataProcessor.ОбновлениеКонфигурации.TabularSection.ДоступныеОбновления.Attribute.Версия + DataProcessor.ПоискИУстановкаОбновлений.TabularSection.ДоступныеОбновления.Attribute.Версия View false @@ -15314,7 +15303,7 @@ - DataProcessor.ОбновлениеКонфигурации.Attribute.СоздаватьРезервнуюКопию + DataProcessor.ПоискИУстановкаОбновлений.Attribute.СоздаватьРезервнуюКопию View false @@ -15457,7 +15446,7 @@ - DataProcessor.ОбновлениеКонфигурации.TabularSection.ДоступныеОбновления.Attribute.ПутьКЛокальномуФайлу + DataProcessor.ПоискИУстановкаОбновлений.TabularSection.ДоступныеОбновления.Attribute.ПутьКЛокальномуФайлу View false @@ -15633,7 +15622,7 @@ - DataProcessor.ОбновлениеКонфигурации.TabularSection.ДоступныеОбновления.Attribute.ПутьКФайлуОбновления + DataProcessor.ПоискИУстановкаОбновлений.TabularSection.ДоступныеОбновления.Attribute.ПутьКФайлуОбновления View false @@ -15720,17 +15709,6 @@ false - - Catalog.ГруппыДоступа.Attribute.ТипПользователей - - View - false - - - Edit - false - - Catalog.ЗапланированноеВзаимодействиеПрисоединенныеФайлы.TabularSection.ЭлектронныеПодписи.Attribute.Комментарий @@ -15809,7 +15787,7 @@ - DataProcessor.ОбновлениеКонфигурации.TabularSection.ДоступныеОбновления.Attribute.Поставщик + DataProcessor.ПоискИУстановкаОбновлений.TabularSection.ДоступныеОбновления.Attribute.Поставщик View false @@ -15820,7 +15798,7 @@ - DataProcessor.ОбновлениеКонфигурации.TabularSection.ДоступныеОбновления.Attribute.Конфигурация + DataProcessor.ПоискИУстановкаОбновлений.TabularSection.ДоступныеОбновления.Attribute.Конфигурация View false diff --git a/SSL/src/Roles/ЗапускВебКлиента/Rights.rights b/SSL/src/Roles/ЗапускВебКлиента/Rights.rights index f09f38b70..ccd644114 100644 --- a/SSL/src/Roles/ЗапускВебКлиента/Rights.rights +++ b/SSL/src/Roles/ЗапускВебКлиента/Rights.rights @@ -950,7 +950,7 @@ - Catalog.УчетныеЗаписиЭлектроннойПочты.Attribute.Пароль + Catalog.УчетныеЗаписиЭлектроннойПочты.Attribute.УдалитьПароль View false @@ -1576,37 +1576,6 @@ false - - Configuration.БиблиотекаСтандартныхПодсистем - - WebClient - true - - - MainWindowModeNormal - true - - - MainWindowModeWorkplace - true - - - MainWindowModeEmbeddedWorkplace - true - - - MainWindowModeFullscreenWorkplace - true - - - MainWindowModeKiosk - true - - - AnalyticsSystemClient - true - - InformationRegister.ПользовательскиеМакетыПечати.Dimension.Объект @@ -1663,7 +1632,7 @@ - Catalog.УчетныеЗаписиЭлектроннойПочты.Attribute.ПарольSMTP + Catalog.УчетныеЗаписиЭлектроннойПочты.Attribute.УдалитьПарольSMTP View false @@ -2113,6 +2082,37 @@ false + + Configuration.БиблиотекаСтандартныхПодсистем + + WebClient + true + + + MainWindowModeNormal + true + + + MainWindowModeWorkplace + true + + + MainWindowModeEmbeddedWorkplace + true + + + MainWindowModeFullscreenWorkplace + true + + + MainWindowModeKiosk + true + + + AnalyticsSystemClient + true + + Document.НазначениеОпросов.Attribute.ВозможностьПредварительногоСохранения @@ -3214,7 +3214,7 @@ - DataProcessor.ОбновлениеКонфигурации.Attribute.ИсточникОбновления + DataProcessor.ПоискИУстановкаОбновлений.Attribute.ИсточникОбновления View false @@ -3313,7 +3313,7 @@ - DataProcessor.ОбновлениеКонфигурации.TabularSection.ДоступныеОбновления.Attribute.Версия2Разряд + DataProcessor.ПоискИУстановкаОбновлений.TabularSection.ДоступныеОбновления.Attribute.Версия2Разряд View false @@ -3335,7 +3335,7 @@ - DataProcessor.ОбновлениеКонфигурации.Attribute.РезультатОбновления + DataProcessor.ПоискИУстановкаОбновлений.Attribute.РезультатОбновления View false @@ -3610,7 +3610,7 @@ - DataProcessor.ОбновлениеКонфигурации.Attribute.КодПользователяСервераОбновлений + DataProcessor.ПоискИУстановкаОбновлений.Attribute.КодПользователяСервераОбновлений View false @@ -4028,7 +4028,7 @@ - DataProcessor.ОбновлениеКонфигурации.TabularSection.ДоступныеОбновления.Attribute.ФайлОбновления + DataProcessor.ПоискИУстановкаОбновлений.TabularSection.ДоступныеОбновления.Attribute.ФайлОбновления View false @@ -4149,7 +4149,7 @@ - DataProcessor.ОбновлениеКонфигурации.Attribute.КодЗадачиПланировщика + DataProcessor.ПоискИУстановкаОбновлений.Attribute.КодЗадачиПланировщика View false @@ -4897,7 +4897,7 @@ - DataProcessor.ОбновлениеКонфигурации.TabularSection.ДоступныеОбновления.Attribute.НомерДискаИТС + DataProcessor.ПоискИУстановкаОбновлений.TabularSection.ДоступныеОбновления.Attribute.НомерДискаИТС View false @@ -5062,7 +5062,7 @@ - DataProcessor.ОбновлениеКонфигурации.TabularSection.ДоступныеОбновления + DataProcessor.ПоискИУстановкаОбновлений.TabularSection.ДоступныеОбновления View false @@ -6041,7 +6041,7 @@ - DataProcessor.ОбновлениеКонфигурации.Attribute.ДатаВремяОбновления + DataProcessor.ПоискИУстановкаОбновлений.Attribute.ДатаВремяОбновления View false @@ -6052,7 +6052,7 @@ - DataProcessor.ПомощникСозданияОбменаДанными.Attribute.ИмяФайлаНастроекОбменаДаннымиДляЗагрузки + DataProcessor.ПомощникСозданияОбменаДанными.Attribute.ИмяФайлаНастроекСинхронизацииДанныхДляЗагрузки View false @@ -6447,17 +6447,6 @@ false - - InformationRegister.НазначениеДополнительныхОбработок.Resource.ИспользоватьПечатныеФормы - - View - false - - - Edit - false - - Catalog.СценарииОбменовДанными.TabularSection.НастройкиОбмена.Attribute.УзелИнформационнойБазы @@ -7141,7 +7130,7 @@ - DataProcessor.ОбновлениеКонфигурации.Attribute.РежимОбновления + DataProcessor.ПоискИУстановкаОбновлений.Attribute.РежимОбновления View false @@ -7669,7 +7658,7 @@ - DataProcessor.ПомощникСозданияОбменаДанными.Attribute.ИмяФайлаНастроекОбменаДанными + DataProcessor.ПомощникСозданияОбменаДанными.Attribute.ИмяФайлаНастроекСинхронизацииДанных View false @@ -8428,7 +8417,7 @@ - DataProcessor.ОбновлениеКонфигурации.Attribute.ИспользоватьРасписаниеДляПроверкиОбновления + DataProcessor.ПоискИУстановкаОбновлений.Attribute.ИспользоватьРасписаниеДляПроверкиОбновления View false @@ -8439,7 +8428,7 @@ - DataProcessor.ОбновлениеКонфигурации.Attribute.ЗапомнитьПарольСервераОбновлений + DataProcessor.ПоискИУстановкаОбновлений.Attribute.ЗапомнитьПарольСервераОбновлений View false @@ -8813,7 +8802,7 @@ - DataProcessor.ОбновлениеКонфигурации.Attribute.ВосстанавливатьИнформационнуюБазу + DataProcessor.ПоискИУстановкаОбновлений.Attribute.ВосстанавливатьИнформационнуюБазу View false @@ -8857,7 +8846,7 @@ - DataProcessor.ОбновлениеКонфигурации.TabularSection.ДоступныеОбновления.Attribute.ПутьКЛокальномуФайлуОбновления + DataProcessor.ПоискИУстановкаОбновлений.TabularSection.ДоступныеОбновления.Attribute.ПутьКЛокальномуФайлуОбновления View false @@ -9561,7 +9550,7 @@ - DataProcessor.ОбновлениеКонфигурации.Attribute.ИмяКаталогаРезервнойКопииИБ + DataProcessor.ПоискИУстановкаОбновлений.Attribute.ИмяКаталогаРезервнойКопииИБ View false @@ -9957,7 +9946,7 @@ - DataProcessor.ОбновлениеКонфигурации.Attribute.ИмяФайлаОбновления + DataProcessor.ПоискИУстановкаОбновлений.Attribute.ИмяФайлаОбновления View false @@ -10419,7 +10408,7 @@ - DataProcessor.ОбновлениеКонфигурации.TabularSection.ДоступныеОбновления.Attribute.РазмерФайлаОбновления + DataProcessor.ПоискИУстановкаОбновлений.TabularSection.ДоступныеОбновления.Attribute.РазмерФайлаОбновления View false @@ -10529,7 +10518,7 @@ - DataProcessor.ОбновлениеКонфигурации.Attribute.РасписаниеПроверкиНаличияОбновления + DataProcessor.ПоискИУстановкаОбновлений.Attribute.РасписаниеПроверкиНаличияОбновления View false @@ -10793,7 +10782,7 @@ - DataProcessor.ОбновлениеКонфигурации.TabularSection.ДоступныеОбновления.Attribute.ВерсияДляОбновления + DataProcessor.ПоискИУстановкаОбновлений.TabularSection.ДоступныеОбновления.Attribute.ВерсияДляОбновления View false @@ -11013,7 +11002,7 @@ - Catalog.ГруппыВнешнихПользователей.Attribute.ТипОбъектовАвторизации + Catalog.ГруппыВнешнихПользователей.Attribute.УдалитьТипОбъектовАвторизации View false @@ -11101,7 +11090,7 @@ - DataProcessor.ОбновлениеКонфигурации.TabularSection.ДоступныеОбновления.Attribute.Версия4Разряд + DataProcessor.ПоискИУстановкаОбновлений.TabularSection.ДоступныеОбновления.Attribute.Версия4Разряд View false @@ -11376,7 +11365,7 @@ - DataProcessor.ОбновлениеКонфигурации.Attribute.ПовторныйЗапуск + DataProcessor.ПоискИУстановкаОбновлений.Attribute.ПовторныйЗапуск View false @@ -11409,7 +11398,7 @@ - InformationRegister.НастройкиТранспортаОбмена.Resource.ПарольАрхиваСообщенияОбмена + InformationRegister.НастройкиТранспортаОбмена.Resource.УдалитьПарольАрхиваСообщенияОбмена View false @@ -11684,7 +11673,7 @@ - DataProcessor.ОбновлениеКонфигурации.TabularSection.ДоступныеОбновления.Attribute.ЛокальныйОтносительныйКаталог + DataProcessor.ПоискИУстановкаОбновлений.TabularSection.ДоступныеОбновления.Attribute.ЛокальныйОтносительныйКаталог View false @@ -11728,7 +11717,7 @@ - DataProcessor.ОбновлениеКонфигурации.Attribute.ТехническаяИнформацияОбОшибке + DataProcessor.ПоискИУстановкаОбновлений.Attribute.ТехническаяИнформацияОбОшибке View false @@ -11794,7 +11783,7 @@ - DataProcessor.ОбновлениеКонфигурации.TabularSection.ДоступныеОбновления.Attribute.Версия1Разряд + DataProcessor.ПоискИУстановкаОбновлений.TabularSection.ДоступныеОбновления.Attribute.Версия1Разряд View false @@ -12025,7 +12014,7 @@ - DataProcessor.ОбновлениеКонфигурации.Attribute.ПарольСервераОбновлений + DataProcessor.ПоискИУстановкаОбновлений.Attribute.ПарольСервераОбновлений View false @@ -13037,7 +13026,7 @@ - DataProcessor.ОбновлениеКонфигурации.TabularSection.ДоступныеОбновления.Attribute.Версия3Разряд + DataProcessor.ПоискИУстановкаОбновлений.TabularSection.ДоступныеОбновления.Attribute.Версия3Разряд View false @@ -13246,7 +13235,7 @@ - InformationRegister.НастройкиТранспортаОбмена.Resource.FTPСоединениеПароль + InformationRegister.НастройкиТранспортаОбмена.Resource.УдалитьFTPСоединениеПароль View false @@ -13389,7 +13378,7 @@ - DataProcessor.ОбновлениеКонфигурации.Attribute.НуженФайлОбновления + DataProcessor.ПоискИУстановкаОбновлений.Attribute.НуженФайлОбновления View false @@ -13587,7 +13576,7 @@ - DataProcessor.ОбновлениеКонфигурации.Attribute.АдресЭлектроннойПочты + DataProcessor.ПоискИУстановкаОбновлений.Attribute.АдресЭлектроннойПочты View false @@ -14170,7 +14159,7 @@ - DataProcessor.ОбновлениеКонфигурации.Attribute.ПроверятьНаличиеОбновленияПриЗапуске + DataProcessor.ПоискИУстановкаОбновлений.Attribute.ПроверятьНаличиеОбновленияПриЗапуске View false @@ -14720,7 +14709,7 @@ - DataProcessor.ОбновлениеКонфигурации.Attribute.ВыслатьОтчетНаПочту + DataProcessor.ПоискИУстановкаОбновлений.Attribute.ВыслатьОтчетНаПочту View false @@ -14907,7 +14896,7 @@ - DataProcessor.ОбновлениеКонфигурации.TabularSection.ДоступныеОбновления.Attribute.Версия + DataProcessor.ПоискИУстановкаОбновлений.TabularSection.ДоступныеОбновления.Attribute.Версия View false @@ -15105,7 +15094,7 @@ - DataProcessor.ОбновлениеКонфигурации.Attribute.СоздаватьРезервнуюКопию + DataProcessor.ПоискИУстановкаОбновлений.Attribute.СоздаватьРезервнуюКопию View false @@ -15237,7 +15226,7 @@ - DataProcessor.ОбновлениеКонфигурации.TabularSection.ДоступныеОбновления.Attribute.ПутьКЛокальномуФайлу + DataProcessor.ПоискИУстановкаОбновлений.TabularSection.ДоступныеОбновления.Attribute.ПутьКЛокальномуФайлу View false @@ -15413,7 +15402,7 @@ - DataProcessor.ОбновлениеКонфигурации.TabularSection.ДоступныеОбновления.Attribute.ПутьКФайлуОбновления + DataProcessor.ПоискИУстановкаОбновлений.TabularSection.ДоступныеОбновления.Attribute.ПутьКФайлуОбновления View false @@ -15500,17 +15489,6 @@ false - - Catalog.ГруппыДоступа.Attribute.ТипПользователей - - View - false - - - Edit - false - - Catalog.ЗапланированноеВзаимодействиеПрисоединенныеФайлы.TabularSection.ЭлектронныеПодписи.Attribute.Комментарий @@ -15589,7 +15567,7 @@ - DataProcessor.ОбновлениеКонфигурации.TabularSection.ДоступныеОбновления.Attribute.Поставщик + DataProcessor.ПоискИУстановкаОбновлений.TabularSection.ДоступныеОбновления.Attribute.Поставщик View false @@ -15600,7 +15578,7 @@ - DataProcessor.ОбновлениеКонфигурации.TabularSection.ДоступныеОбновления.Attribute.Конфигурация + DataProcessor.ПоискИУстановкаОбновлений.TabularSection.ДоступныеОбновления.Attribute.Конфигурация View false diff --git a/SSL/src/Roles/ЗапускТолстогоКлиента/Rights.rights b/SSL/src/Roles/ЗапускТолстогоКлиента/Rights.rights index 93966ea3c..aeafd315f 100644 --- a/SSL/src/Roles/ЗапускТолстогоКлиента/Rights.rights +++ b/SSL/src/Roles/ЗапускТолстогоКлиента/Rights.rights @@ -950,7 +950,7 @@ - Catalog.УчетныеЗаписиЭлектроннойПочты.Attribute.Пароль + Catalog.УчетныеЗаписиЭлектроннойПочты.Attribute.УдалитьПароль View false @@ -1576,37 +1576,6 @@ false - - Configuration.БиблиотекаСтандартныхПодсистем - - ThickClient - true - - - MainWindowModeNormal - true - - - MainWindowModeWorkplace - true - - - MainWindowModeEmbeddedWorkplace - true - - - MainWindowModeFullscreenWorkplace - true - - - MainWindowModeKiosk - true - - - AnalyticsSystemClient - true - - InformationRegister.ПользовательскиеМакетыПечати.Dimension.Объект @@ -1663,7 +1632,7 @@ - Catalog.УчетныеЗаписиЭлектроннойПочты.Attribute.ПарольSMTP + Catalog.УчетныеЗаписиЭлектроннойПочты.Attribute.УдалитьПарольSMTP View false @@ -2113,6 +2082,37 @@ false + + Configuration.БиблиотекаСтандартныхПодсистем + + ThickClient + true + + + MainWindowModeNormal + true + + + MainWindowModeWorkplace + true + + + MainWindowModeEmbeddedWorkplace + true + + + MainWindowModeFullscreenWorkplace + true + + + MainWindowModeKiosk + true + + + AnalyticsSystemClient + true + + Document.НазначениеОпросов.Attribute.ВозможностьПредварительногоСохранения @@ -3214,7 +3214,7 @@ - DataProcessor.ОбновлениеКонфигурации.Attribute.ИсточникОбновления + DataProcessor.ПоискИУстановкаОбновлений.Attribute.ИсточникОбновления View false @@ -3313,7 +3313,7 @@ - DataProcessor.ОбновлениеКонфигурации.TabularSection.ДоступныеОбновления.Attribute.Версия2Разряд + DataProcessor.ПоискИУстановкаОбновлений.TabularSection.ДоступныеОбновления.Attribute.Версия2Разряд View false @@ -3335,7 +3335,7 @@ - DataProcessor.ОбновлениеКонфигурации.Attribute.РезультатОбновления + DataProcessor.ПоискИУстановкаОбновлений.Attribute.РезультатОбновления View false @@ -3610,7 +3610,7 @@ - DataProcessor.ОбновлениеКонфигурации.Attribute.КодПользователяСервераОбновлений + DataProcessor.ПоискИУстановкаОбновлений.Attribute.КодПользователяСервераОбновлений View false @@ -4028,7 +4028,7 @@ - DataProcessor.ОбновлениеКонфигурации.TabularSection.ДоступныеОбновления.Attribute.ФайлОбновления + DataProcessor.ПоискИУстановкаОбновлений.TabularSection.ДоступныеОбновления.Attribute.ФайлОбновления View false @@ -4149,7 +4149,7 @@ - DataProcessor.ОбновлениеКонфигурации.Attribute.КодЗадачиПланировщика + DataProcessor.ПоискИУстановкаОбновлений.Attribute.КодЗадачиПланировщика View false @@ -4897,7 +4897,7 @@ - DataProcessor.ОбновлениеКонфигурации.TabularSection.ДоступныеОбновления.Attribute.НомерДискаИТС + DataProcessor.ПоискИУстановкаОбновлений.TabularSection.ДоступныеОбновления.Attribute.НомерДискаИТС View false @@ -5062,7 +5062,7 @@ - DataProcessor.ОбновлениеКонфигурации.TabularSection.ДоступныеОбновления + DataProcessor.ПоискИУстановкаОбновлений.TabularSection.ДоступныеОбновления View false @@ -6041,7 +6041,7 @@ - DataProcessor.ОбновлениеКонфигурации.Attribute.ДатаВремяОбновления + DataProcessor.ПоискИУстановкаОбновлений.Attribute.ДатаВремяОбновления View false @@ -6052,7 +6052,7 @@ - DataProcessor.ПомощникСозданияОбменаДанными.Attribute.ИмяФайлаНастроекОбменаДаннымиДляЗагрузки + DataProcessor.ПомощникСозданияОбменаДанными.Attribute.ИмяФайлаНастроекСинхронизацииДанныхДляЗагрузки View false @@ -6447,17 +6447,6 @@ false - - InformationRegister.НазначениеДополнительныхОбработок.Resource.ИспользоватьПечатныеФормы - - View - false - - - Edit - false - - Catalog.СценарииОбменовДанными.TabularSection.НастройкиОбмена.Attribute.УзелИнформационнойБазы @@ -7141,7 +7130,7 @@ - DataProcessor.ОбновлениеКонфигурации.Attribute.РежимОбновления + DataProcessor.ПоискИУстановкаОбновлений.Attribute.РежимОбновления View false @@ -7669,7 +7658,7 @@ - DataProcessor.ПомощникСозданияОбменаДанными.Attribute.ИмяФайлаНастроекОбменаДанными + DataProcessor.ПомощникСозданияОбменаДанными.Attribute.ИмяФайлаНастроекСинхронизацииДанных View false @@ -8428,7 +8417,7 @@ - DataProcessor.ОбновлениеКонфигурации.Attribute.ИспользоватьРасписаниеДляПроверкиОбновления + DataProcessor.ПоискИУстановкаОбновлений.Attribute.ИспользоватьРасписаниеДляПроверкиОбновления View false @@ -8439,7 +8428,7 @@ - DataProcessor.ОбновлениеКонфигурации.Attribute.ЗапомнитьПарольСервераОбновлений + DataProcessor.ПоискИУстановкаОбновлений.Attribute.ЗапомнитьПарольСервераОбновлений View false @@ -8813,7 +8802,7 @@ - DataProcessor.ОбновлениеКонфигурации.Attribute.ВосстанавливатьИнформационнуюБазу + DataProcessor.ПоискИУстановкаОбновлений.Attribute.ВосстанавливатьИнформационнуюБазу View false @@ -8857,7 +8846,7 @@ - DataProcessor.ОбновлениеКонфигурации.TabularSection.ДоступныеОбновления.Attribute.ПутьКЛокальномуФайлуОбновления + DataProcessor.ПоискИУстановкаОбновлений.TabularSection.ДоступныеОбновления.Attribute.ПутьКЛокальномуФайлуОбновления View false @@ -9561,7 +9550,7 @@ - DataProcessor.ОбновлениеКонфигурации.Attribute.ИмяКаталогаРезервнойКопииИБ + DataProcessor.ПоискИУстановкаОбновлений.Attribute.ИмяКаталогаРезервнойКопииИБ View false @@ -9957,7 +9946,7 @@ - DataProcessor.ОбновлениеКонфигурации.Attribute.ИмяФайлаОбновления + DataProcessor.ПоискИУстановкаОбновлений.Attribute.ИмяФайлаОбновления View false @@ -10419,7 +10408,7 @@ - DataProcessor.ОбновлениеКонфигурации.TabularSection.ДоступныеОбновления.Attribute.РазмерФайлаОбновления + DataProcessor.ПоискИУстановкаОбновлений.TabularSection.ДоступныеОбновления.Attribute.РазмерФайлаОбновления View false @@ -10529,7 +10518,7 @@ - DataProcessor.ОбновлениеКонфигурации.Attribute.РасписаниеПроверкиНаличияОбновления + DataProcessor.ПоискИУстановкаОбновлений.Attribute.РасписаниеПроверкиНаличияОбновления View false @@ -10793,7 +10782,7 @@ - DataProcessor.ОбновлениеКонфигурации.TabularSection.ДоступныеОбновления.Attribute.ВерсияДляОбновления + DataProcessor.ПоискИУстановкаОбновлений.TabularSection.ДоступныеОбновления.Attribute.ВерсияДляОбновления View false @@ -11013,7 +11002,7 @@ - Catalog.ГруппыВнешнихПользователей.Attribute.ТипОбъектовАвторизации + Catalog.ГруппыВнешнихПользователей.Attribute.УдалитьТипОбъектовАвторизации View false @@ -11101,7 +11090,7 @@ - DataProcessor.ОбновлениеКонфигурации.TabularSection.ДоступныеОбновления.Attribute.Версия4Разряд + DataProcessor.ПоискИУстановкаОбновлений.TabularSection.ДоступныеОбновления.Attribute.Версия4Разряд View false @@ -11376,7 +11365,7 @@ - DataProcessor.ОбновлениеКонфигурации.Attribute.ПовторныйЗапуск + DataProcessor.ПоискИУстановкаОбновлений.Attribute.ПовторныйЗапуск View false @@ -11409,7 +11398,7 @@ - InformationRegister.НастройкиТранспортаОбмена.Resource.ПарольАрхиваСообщенияОбмена + InformationRegister.НастройкиТранспортаОбмена.Resource.УдалитьПарольАрхиваСообщенияОбмена View false @@ -11684,7 +11673,7 @@ - DataProcessor.ОбновлениеКонфигурации.TabularSection.ДоступныеОбновления.Attribute.ЛокальныйОтносительныйКаталог + DataProcessor.ПоискИУстановкаОбновлений.TabularSection.ДоступныеОбновления.Attribute.ЛокальныйОтносительныйКаталог View false @@ -11728,7 +11717,7 @@ - DataProcessor.ОбновлениеКонфигурации.Attribute.ТехническаяИнформацияОбОшибке + DataProcessor.ПоискИУстановкаОбновлений.Attribute.ТехническаяИнформацияОбОшибке View false @@ -11794,7 +11783,7 @@ - DataProcessor.ОбновлениеКонфигурации.TabularSection.ДоступныеОбновления.Attribute.Версия1Разряд + DataProcessor.ПоискИУстановкаОбновлений.TabularSection.ДоступныеОбновления.Attribute.Версия1Разряд View false @@ -12025,7 +12014,7 @@ - DataProcessor.ОбновлениеКонфигурации.Attribute.ПарольСервераОбновлений + DataProcessor.ПоискИУстановкаОбновлений.Attribute.ПарольСервераОбновлений View false @@ -13037,7 +13026,7 @@ - DataProcessor.ОбновлениеКонфигурации.TabularSection.ДоступныеОбновления.Attribute.Версия3Разряд + DataProcessor.ПоискИУстановкаОбновлений.TabularSection.ДоступныеОбновления.Attribute.Версия3Разряд View false @@ -13246,7 +13235,7 @@ - InformationRegister.НастройкиТранспортаОбмена.Resource.FTPСоединениеПароль + InformationRegister.НастройкиТранспортаОбмена.Resource.УдалитьFTPСоединениеПароль View false @@ -13389,7 +13378,7 @@ - DataProcessor.ОбновлениеКонфигурации.Attribute.НуженФайлОбновления + DataProcessor.ПоискИУстановкаОбновлений.Attribute.НуженФайлОбновления View false @@ -13587,7 +13576,7 @@ - DataProcessor.ОбновлениеКонфигурации.Attribute.АдресЭлектроннойПочты + DataProcessor.ПоискИУстановкаОбновлений.Attribute.АдресЭлектроннойПочты View false @@ -14170,7 +14159,7 @@ - DataProcessor.ОбновлениеКонфигурации.Attribute.ПроверятьНаличиеОбновленияПриЗапуске + DataProcessor.ПоискИУстановкаОбновлений.Attribute.ПроверятьНаличиеОбновленияПриЗапуске View false @@ -14720,7 +14709,7 @@ - DataProcessor.ОбновлениеКонфигурации.Attribute.ВыслатьОтчетНаПочту + DataProcessor.ПоискИУстановкаОбновлений.Attribute.ВыслатьОтчетНаПочту View false @@ -14907,7 +14896,7 @@ - DataProcessor.ОбновлениеКонфигурации.TabularSection.ДоступныеОбновления.Attribute.Версия + DataProcessor.ПоискИУстановкаОбновлений.TabularSection.ДоступныеОбновления.Attribute.Версия View false @@ -15105,7 +15094,7 @@ - DataProcessor.ОбновлениеКонфигурации.Attribute.СоздаватьРезервнуюКопию + DataProcessor.ПоискИУстановкаОбновлений.Attribute.СоздаватьРезервнуюКопию View false @@ -15237,7 +15226,7 @@ - DataProcessor.ОбновлениеКонфигурации.TabularSection.ДоступныеОбновления.Attribute.ПутьКЛокальномуФайлу + DataProcessor.ПоискИУстановкаОбновлений.TabularSection.ДоступныеОбновления.Attribute.ПутьКЛокальномуФайлу View false @@ -15413,7 +15402,7 @@ - DataProcessor.ОбновлениеКонфигурации.TabularSection.ДоступныеОбновления.Attribute.ПутьКФайлуОбновления + DataProcessor.ПоискИУстановкаОбновлений.TabularSection.ДоступныеОбновления.Attribute.ПутьКФайлуОбновления View false @@ -15500,17 +15489,6 @@ false - - Catalog.ГруппыДоступа.Attribute.ТипПользователей - - View - false - - - Edit - false - - Catalog.ЗапланированноеВзаимодействиеПрисоединенныеФайлы.TabularSection.ЭлектронныеПодписи.Attribute.Комментарий @@ -15589,7 +15567,7 @@ - DataProcessor.ОбновлениеКонфигурации.TabularSection.ДоступныеОбновления.Attribute.Поставщик + DataProcessor.ПоискИУстановкаОбновлений.TabularSection.ДоступныеОбновления.Attribute.Поставщик View false @@ -15600,7 +15578,7 @@ - DataProcessor.ОбновлениеКонфигурации.TabularSection.ДоступныеОбновления.Attribute.Конфигурация + DataProcessor.ПоискИУстановкаОбновлений.TabularSection.ДоступныеОбновления.Attribute.Конфигурация View false diff --git a/SSL/src/Roles/ЗапускТонкогоКлиента/Rights.rights b/SSL/src/Roles/ЗапускТонкогоКлиента/Rights.rights index ddeea4788..a4704ec23 100644 --- a/SSL/src/Roles/ЗапускТонкогоКлиента/Rights.rights +++ b/SSL/src/Roles/ЗапускТонкогоКлиента/Rights.rights @@ -950,7 +950,7 @@ - Catalog.УчетныеЗаписиЭлектроннойПочты.Attribute.Пароль + Catalog.УчетныеЗаписиЭлектроннойПочты.Attribute.УдалитьПароль View false @@ -1576,37 +1576,6 @@ false - - Configuration.БиблиотекаСтандартныхПодсистем - - ThinClient - true - - - MainWindowModeNormal - true - - - MainWindowModeWorkplace - true - - - MainWindowModeEmbeddedWorkplace - true - - - MainWindowModeFullscreenWorkplace - true - - - MainWindowModeKiosk - true - - - AnalyticsSystemClient - true - - InformationRegister.ПользовательскиеМакетыПечати.Dimension.Объект @@ -1663,7 +1632,7 @@ - Catalog.УчетныеЗаписиЭлектроннойПочты.Attribute.ПарольSMTP + Catalog.УчетныеЗаписиЭлектроннойПочты.Attribute.УдалитьПарольSMTP View false @@ -2113,6 +2082,37 @@ false + + Configuration.БиблиотекаСтандартныхПодсистем + + ThinClient + true + + + MainWindowModeNormal + true + + + MainWindowModeWorkplace + true + + + MainWindowModeEmbeddedWorkplace + true + + + MainWindowModeFullscreenWorkplace + true + + + MainWindowModeKiosk + true + + + AnalyticsSystemClient + true + + Document.НазначениеОпросов.Attribute.ВозможностьПредварительногоСохранения @@ -3214,7 +3214,7 @@ - DataProcessor.ОбновлениеКонфигурации.Attribute.ИсточникОбновления + DataProcessor.ПоискИУстановкаОбновлений.Attribute.ИсточникОбновления View false @@ -3313,7 +3313,7 @@ - DataProcessor.ОбновлениеКонфигурации.TabularSection.ДоступныеОбновления.Attribute.Версия2Разряд + DataProcessor.ПоискИУстановкаОбновлений.TabularSection.ДоступныеОбновления.Attribute.Версия2Разряд View false @@ -3335,7 +3335,7 @@ - DataProcessor.ОбновлениеКонфигурации.Attribute.РезультатОбновления + DataProcessor.ПоискИУстановкаОбновлений.Attribute.РезультатОбновления View false @@ -3610,7 +3610,7 @@ - DataProcessor.ОбновлениеКонфигурации.Attribute.КодПользователяСервераОбновлений + DataProcessor.ПоискИУстановкаОбновлений.Attribute.КодПользователяСервераОбновлений View false @@ -4028,7 +4028,7 @@ - DataProcessor.ОбновлениеКонфигурации.TabularSection.ДоступныеОбновления.Attribute.ФайлОбновления + DataProcessor.ПоискИУстановкаОбновлений.TabularSection.ДоступныеОбновления.Attribute.ФайлОбновления View false @@ -4149,7 +4149,7 @@ - DataProcessor.ОбновлениеКонфигурации.Attribute.КодЗадачиПланировщика + DataProcessor.ПоискИУстановкаОбновлений.Attribute.КодЗадачиПланировщика View false @@ -4897,7 +4897,7 @@ - DataProcessor.ОбновлениеКонфигурации.TabularSection.ДоступныеОбновления.Attribute.НомерДискаИТС + DataProcessor.ПоискИУстановкаОбновлений.TabularSection.ДоступныеОбновления.Attribute.НомерДискаИТС View false @@ -5062,7 +5062,7 @@ - DataProcessor.ОбновлениеКонфигурации.TabularSection.ДоступныеОбновления + DataProcessor.ПоискИУстановкаОбновлений.TabularSection.ДоступныеОбновления View false @@ -6041,7 +6041,7 @@ - DataProcessor.ОбновлениеКонфигурации.Attribute.ДатаВремяОбновления + DataProcessor.ПоискИУстановкаОбновлений.Attribute.ДатаВремяОбновления View false @@ -6052,7 +6052,7 @@ - DataProcessor.ПомощникСозданияОбменаДанными.Attribute.ИмяФайлаНастроекОбменаДаннымиДляЗагрузки + DataProcessor.ПомощникСозданияОбменаДанными.Attribute.ИмяФайлаНастроекСинхронизацииДанныхДляЗагрузки View false @@ -6447,17 +6447,6 @@ false - - InformationRegister.НазначениеДополнительныхОбработок.Resource.ИспользоватьПечатныеФормы - - View - false - - - Edit - false - - Catalog.СценарииОбменовДанными.TabularSection.НастройкиОбмена.Attribute.УзелИнформационнойБазы @@ -7141,7 +7130,7 @@ - DataProcessor.ОбновлениеКонфигурации.Attribute.РежимОбновления + DataProcessor.ПоискИУстановкаОбновлений.Attribute.РежимОбновления View false @@ -7669,7 +7658,7 @@ - DataProcessor.ПомощникСозданияОбменаДанными.Attribute.ИмяФайлаНастроекОбменаДанными + DataProcessor.ПомощникСозданияОбменаДанными.Attribute.ИмяФайлаНастроекСинхронизацииДанных View false @@ -8428,7 +8417,7 @@ - DataProcessor.ОбновлениеКонфигурации.Attribute.ИспользоватьРасписаниеДляПроверкиОбновления + DataProcessor.ПоискИУстановкаОбновлений.Attribute.ИспользоватьРасписаниеДляПроверкиОбновления View false @@ -8439,7 +8428,7 @@ - DataProcessor.ОбновлениеКонфигурации.Attribute.ЗапомнитьПарольСервераОбновлений + DataProcessor.ПоискИУстановкаОбновлений.Attribute.ЗапомнитьПарольСервераОбновлений View false @@ -8813,7 +8802,7 @@ - DataProcessor.ОбновлениеКонфигурации.Attribute.ВосстанавливатьИнформационнуюБазу + DataProcessor.ПоискИУстановкаОбновлений.Attribute.ВосстанавливатьИнформационнуюБазу View false @@ -8857,7 +8846,7 @@ - DataProcessor.ОбновлениеКонфигурации.TabularSection.ДоступныеОбновления.Attribute.ПутьКЛокальномуФайлуОбновления + DataProcessor.ПоискИУстановкаОбновлений.TabularSection.ДоступныеОбновления.Attribute.ПутьКЛокальномуФайлуОбновления View false @@ -9561,7 +9550,7 @@ - DataProcessor.ОбновлениеКонфигурации.Attribute.ИмяКаталогаРезервнойКопииИБ + DataProcessor.ПоискИУстановкаОбновлений.Attribute.ИмяКаталогаРезервнойКопииИБ View false @@ -9957,7 +9946,7 @@ - DataProcessor.ОбновлениеКонфигурации.Attribute.ИмяФайлаОбновления + DataProcessor.ПоискИУстановкаОбновлений.Attribute.ИмяФайлаОбновления View false @@ -10419,7 +10408,7 @@ - DataProcessor.ОбновлениеКонфигурации.TabularSection.ДоступныеОбновления.Attribute.РазмерФайлаОбновления + DataProcessor.ПоискИУстановкаОбновлений.TabularSection.ДоступныеОбновления.Attribute.РазмерФайлаОбновления View false @@ -10529,7 +10518,7 @@ - DataProcessor.ОбновлениеКонфигурации.Attribute.РасписаниеПроверкиНаличияОбновления + DataProcessor.ПоискИУстановкаОбновлений.Attribute.РасписаниеПроверкиНаличияОбновления View false @@ -10793,7 +10782,7 @@ - DataProcessor.ОбновлениеКонфигурации.TabularSection.ДоступныеОбновления.Attribute.ВерсияДляОбновления + DataProcessor.ПоискИУстановкаОбновлений.TabularSection.ДоступныеОбновления.Attribute.ВерсияДляОбновления View false @@ -11013,7 +11002,7 @@ - Catalog.ГруппыВнешнихПользователей.Attribute.ТипОбъектовАвторизации + Catalog.ГруппыВнешнихПользователей.Attribute.УдалитьТипОбъектовАвторизации View false @@ -11101,7 +11090,7 @@ - DataProcessor.ОбновлениеКонфигурации.TabularSection.ДоступныеОбновления.Attribute.Версия4Разряд + DataProcessor.ПоискИУстановкаОбновлений.TabularSection.ДоступныеОбновления.Attribute.Версия4Разряд View false @@ -11376,7 +11365,7 @@ - DataProcessor.ОбновлениеКонфигурации.Attribute.ПовторныйЗапуск + DataProcessor.ПоискИУстановкаОбновлений.Attribute.ПовторныйЗапуск View false @@ -11409,7 +11398,7 @@ - InformationRegister.НастройкиТранспортаОбмена.Resource.ПарольАрхиваСообщенияОбмена + InformationRegister.НастройкиТранспортаОбмена.Resource.УдалитьПарольАрхиваСообщенияОбмена View false @@ -11684,7 +11673,7 @@ - DataProcessor.ОбновлениеКонфигурации.TabularSection.ДоступныеОбновления.Attribute.ЛокальныйОтносительныйКаталог + DataProcessor.ПоискИУстановкаОбновлений.TabularSection.ДоступныеОбновления.Attribute.ЛокальныйОтносительныйКаталог View false @@ -11728,7 +11717,7 @@ - DataProcessor.ОбновлениеКонфигурации.Attribute.ТехническаяИнформацияОбОшибке + DataProcessor.ПоискИУстановкаОбновлений.Attribute.ТехническаяИнформацияОбОшибке View false @@ -11794,7 +11783,7 @@ - DataProcessor.ОбновлениеКонфигурации.TabularSection.ДоступныеОбновления.Attribute.Версия1Разряд + DataProcessor.ПоискИУстановкаОбновлений.TabularSection.ДоступныеОбновления.Attribute.Версия1Разряд View false @@ -12025,7 +12014,7 @@ - DataProcessor.ОбновлениеКонфигурации.Attribute.ПарольСервераОбновлений + DataProcessor.ПоискИУстановкаОбновлений.Attribute.ПарольСервераОбновлений View false @@ -13037,7 +13026,7 @@ - DataProcessor.ОбновлениеКонфигурации.TabularSection.ДоступныеОбновления.Attribute.Версия3Разряд + DataProcessor.ПоискИУстановкаОбновлений.TabularSection.ДоступныеОбновления.Attribute.Версия3Разряд View false @@ -13246,7 +13235,7 @@ - InformationRegister.НастройкиТранспортаОбмена.Resource.FTPСоединениеПароль + InformationRegister.НастройкиТранспортаОбмена.Resource.УдалитьFTPСоединениеПароль View false @@ -13389,7 +13378,7 @@ - DataProcessor.ОбновлениеКонфигурации.Attribute.НуженФайлОбновления + DataProcessor.ПоискИУстановкаОбновлений.Attribute.НуженФайлОбновления View false @@ -13587,7 +13576,7 @@ - DataProcessor.ОбновлениеКонфигурации.Attribute.АдресЭлектроннойПочты + DataProcessor.ПоискИУстановкаОбновлений.Attribute.АдресЭлектроннойПочты View false @@ -14170,7 +14159,7 @@ - DataProcessor.ОбновлениеКонфигурации.Attribute.ПроверятьНаличиеОбновленияПриЗапуске + DataProcessor.ПоискИУстановкаОбновлений.Attribute.ПроверятьНаличиеОбновленияПриЗапуске View false @@ -14720,7 +14709,7 @@ - DataProcessor.ОбновлениеКонфигурации.Attribute.ВыслатьОтчетНаПочту + DataProcessor.ПоискИУстановкаОбновлений.Attribute.ВыслатьОтчетНаПочту View false @@ -14907,7 +14896,7 @@ - DataProcessor.ОбновлениеКонфигурации.TabularSection.ДоступныеОбновления.Attribute.Версия + DataProcessor.ПоискИУстановкаОбновлений.TabularSection.ДоступныеОбновления.Attribute.Версия View false @@ -15105,7 +15094,7 @@ - DataProcessor.ОбновлениеКонфигурации.Attribute.СоздаватьРезервнуюКопию + DataProcessor.ПоискИУстановкаОбновлений.Attribute.СоздаватьРезервнуюКопию View false @@ -15237,7 +15226,7 @@ - DataProcessor.ОбновлениеКонфигурации.TabularSection.ДоступныеОбновления.Attribute.ПутьКЛокальномуФайлу + DataProcessor.ПоискИУстановкаОбновлений.TabularSection.ДоступныеОбновления.Attribute.ПутьКЛокальномуФайлу View false @@ -15413,7 +15402,7 @@ - DataProcessor.ОбновлениеКонфигурации.TabularSection.ДоступныеОбновления.Attribute.ПутьКФайлуОбновления + DataProcessor.ПоискИУстановкаОбновлений.TabularSection.ДоступныеОбновления.Attribute.ПутьКФайлуОбновления View false @@ -15500,17 +15489,6 @@ false - - Catalog.ГруппыДоступа.Attribute.ТипПользователей - - View - false - - - Edit - false - - Catalog.ЗапланированноеВзаимодействиеПрисоединенныеФайлы.TabularSection.ЭлектронныеПодписи.Attribute.Комментарий @@ -15589,7 +15567,7 @@ - DataProcessor.ОбновлениеКонфигурации.TabularSection.ДоступныеОбновления.Attribute.Поставщик + DataProcessor.ПоискИУстановкаОбновлений.TabularSection.ДоступныеОбновления.Attribute.Поставщик View false @@ -15600,7 +15578,7 @@ - DataProcessor.ОбновлениеКонфигурации.TabularSection.ДоступныеОбновления.Attribute.Конфигурация + DataProcessor.ПоискИУстановкаОбновлений.TabularSection.ДоступныеОбновления.Attribute.Конфигурация View false diff --git a/SSL/src/Roles/ИзменениеДополнительныхСведений/Rights.rights b/SSL/src/Roles/ИзменениеДополнительныхСведений/Rights.rights index 4ad032a6f..867839890 100644 --- a/SSL/src/Roles/ИзменениеДополнительныхСведений/Rights.rights +++ b/SSL/src/Roles/ИзменениеДополнительныхСведений/Rights.rights @@ -950,7 +950,7 @@ - Catalog.УчетныеЗаписиЭлектроннойПочты.Attribute.Пароль + Catalog.УчетныеЗаписиЭлектроннойПочты.Attribute.УдалитьПароль View false @@ -1544,7 +1544,7 @@ - Catalog.УчетныеЗаписиЭлектроннойПочты.Attribute.ПарольSMTP + Catalog.УчетныеЗаписиЭлектроннойПочты.Attribute.УдалитьПарольSMTP View false @@ -3106,7 +3106,7 @@ - DataProcessor.ОбновлениеКонфигурации.Attribute.ИсточникОбновления + DataProcessor.ПоискИУстановкаОбновлений.Attribute.ИсточникОбновления View false @@ -3205,7 +3205,7 @@ - DataProcessor.ОбновлениеКонфигурации.TabularSection.ДоступныеОбновления.Attribute.Версия2Разряд + DataProcessor.ПоискИУстановкаОбновлений.TabularSection.ДоступныеОбновления.Attribute.Версия2Разряд View false @@ -3227,7 +3227,7 @@ - DataProcessor.ОбновлениеКонфигурации.Attribute.РезультатОбновления + DataProcessor.ПоискИУстановкаОбновлений.Attribute.РезультатОбновления View false @@ -3502,7 +3502,7 @@ - DataProcessor.ОбновлениеКонфигурации.Attribute.КодПользователяСервераОбновлений + DataProcessor.ПоискИУстановкаОбновлений.Attribute.КодПользователяСервераОбновлений View false @@ -3916,7 +3916,7 @@ - DataProcessor.ОбновлениеКонфигурации.TabularSection.ДоступныеОбновления.Attribute.ФайлОбновления + DataProcessor.ПоискИУстановкаОбновлений.TabularSection.ДоступныеОбновления.Attribute.ФайлОбновления View false @@ -4037,7 +4037,7 @@ - DataProcessor.ОбновлениеКонфигурации.Attribute.КодЗадачиПланировщика + DataProcessor.ПоискИУстановкаОбновлений.Attribute.КодЗадачиПланировщика View false @@ -4785,7 +4785,7 @@ - DataProcessor.ОбновлениеКонфигурации.TabularSection.ДоступныеОбновления.Attribute.НомерДискаИТС + DataProcessor.ПоискИУстановкаОбновлений.TabularSection.ДоступныеОбновления.Attribute.НомерДискаИТС View false @@ -4950,7 +4950,7 @@ - DataProcessor.ОбновлениеКонфигурации.TabularSection.ДоступныеОбновления + DataProcessor.ПоискИУстановкаОбновлений.TabularSection.ДоступныеОбновления View false @@ -6017,7 +6017,7 @@ - DataProcessor.ОбновлениеКонфигурации.Attribute.ДатаВремяОбновления + DataProcessor.ПоискИУстановкаОбновлений.Attribute.ДатаВремяОбновления View false @@ -6028,7 +6028,7 @@ - DataProcessor.ПомощникСозданияОбменаДанными.Attribute.ИмяФайлаНастроекОбменаДаннымиДляЗагрузки + DataProcessor.ПомощникСозданияОбменаДанными.Attribute.ИмяФайлаНастроекСинхронизацииДанныхДляЗагрузки View false @@ -6423,17 +6423,6 @@ false - - InformationRegister.НазначениеДополнительныхОбработок.Resource.ИспользоватьПечатныеФормы - - View - false - - - Edit - false - - Catalog.СценарииОбменовДанными.TabularSection.НастройкиОбмена.Attribute.УзелИнформационнойБазы @@ -7139,7 +7128,7 @@ - DataProcessor.ОбновлениеКонфигурации.Attribute.РежимОбновления + DataProcessor.ПоискИУстановкаОбновлений.Attribute.РежимОбновления View false @@ -7667,7 +7656,7 @@ - DataProcessor.ПомощникСозданияОбменаДанными.Attribute.ИмяФайлаНастроекОбменаДанными + DataProcessor.ПомощникСозданияОбменаДанными.Attribute.ИмяФайлаНастроекСинхронизацииДанных View false @@ -8415,7 +8404,7 @@ - DataProcessor.ОбновлениеКонфигурации.Attribute.ИспользоватьРасписаниеДляПроверкиОбновления + DataProcessor.ПоискИУстановкаОбновлений.Attribute.ИспользоватьРасписаниеДляПроверкиОбновления View false @@ -8426,7 +8415,7 @@ - DataProcessor.ОбновлениеКонфигурации.Attribute.ЗапомнитьПарольСервераОбновлений + DataProcessor.ПоискИУстановкаОбновлений.Attribute.ЗапомнитьПарольСервераОбновлений View false @@ -8800,7 +8789,7 @@ - DataProcessor.ОбновлениеКонфигурации.Attribute.ВосстанавливатьИнформационнуюБазу + DataProcessor.ПоискИУстановкаОбновлений.Attribute.ВосстанавливатьИнформационнуюБазу View false @@ -8844,7 +8833,7 @@ - DataProcessor.ОбновлениеКонфигурации.TabularSection.ДоступныеОбновления.Attribute.ПутьКЛокальномуФайлуОбновления + DataProcessor.ПоискИУстановкаОбновлений.TabularSection.ДоступныеОбновления.Attribute.ПутьКЛокальномуФайлуОбновления View false @@ -9525,13 +9514,6 @@ false - - CommonCommand.ДополнительныеСведенияПанельНавигации - - View - true - - DataProcessor.ПомощникСозданияОбменаДанными.Attribute.ПарольАрхиваСообщенияОбмена @@ -9555,7 +9537,7 @@ - DataProcessor.ОбновлениеКонфигурации.Attribute.ИмяКаталогаРезервнойКопииИБ + DataProcessor.ПоискИУстановкаОбновлений.Attribute.ИмяКаталогаРезервнойКопииИБ View false @@ -9962,7 +9944,7 @@ - DataProcessor.ОбновлениеКонфигурации.Attribute.ИмяФайлаОбновления + DataProcessor.ПоискИУстановкаОбновлений.Attribute.ИмяФайлаОбновления View false @@ -10435,7 +10417,7 @@ - DataProcessor.ОбновлениеКонфигурации.TabularSection.ДоступныеОбновления.Attribute.РазмерФайлаОбновления + DataProcessor.ПоискИУстановкаОбновлений.TabularSection.ДоступныеОбновления.Attribute.РазмерФайлаОбновления View false @@ -10545,7 +10527,7 @@ - DataProcessor.ОбновлениеКонфигурации.Attribute.РасписаниеПроверкиНаличияОбновления + DataProcessor.ПоискИУстановкаОбновлений.Attribute.РасписаниеПроверкиНаличияОбновления View false @@ -10809,7 +10791,7 @@ - DataProcessor.ОбновлениеКонфигурации.TabularSection.ДоступныеОбновления.Attribute.ВерсияДляОбновления + DataProcessor.ПоискИУстановкаОбновлений.TabularSection.ДоступныеОбновления.Attribute.ВерсияДляОбновления View false @@ -11029,7 +11011,7 @@ - Catalog.ГруппыВнешнихПользователей.Attribute.ТипОбъектовАвторизации + Catalog.ГруппыВнешнихПользователей.Attribute.УдалитьТипОбъектовАвторизации View false @@ -11117,7 +11099,7 @@ - DataProcessor.ОбновлениеКонфигурации.TabularSection.ДоступныеОбновления.Attribute.Версия4Разряд + DataProcessor.ПоискИУстановкаОбновлений.TabularSection.ДоступныеОбновления.Attribute.Версия4Разряд View false @@ -11315,7 +11297,7 @@ - DataProcessor.ОбновлениеКонфигурации.Attribute.ПовторныйЗапуск + DataProcessor.ПоискИУстановкаОбновлений.Attribute.ПовторныйЗапуск View false @@ -11348,7 +11330,7 @@ - InformationRegister.НастройкиТранспортаОбмена.Resource.ПарольАрхиваСообщенияОбмена + InformationRegister.НастройкиТранспортаОбмена.Resource.УдалитьПарольАрхиваСообщенияОбмена View false @@ -11634,7 +11616,7 @@ - DataProcessor.ОбновлениеКонфигурации.TabularSection.ДоступныеОбновления.Attribute.ЛокальныйОтносительныйКаталог + DataProcessor.ПоискИУстановкаОбновлений.TabularSection.ДоступныеОбновления.Attribute.ЛокальныйОтносительныйКаталог View false @@ -11678,7 +11660,7 @@ - DataProcessor.ОбновлениеКонфигурации.Attribute.ТехническаяИнформацияОбОшибке + DataProcessor.ПоискИУстановкаОбновлений.Attribute.ТехническаяИнформацияОбОшибке View false @@ -11744,7 +11726,7 @@ - DataProcessor.ОбновлениеКонфигурации.TabularSection.ДоступныеОбновления.Attribute.Версия1Разряд + DataProcessor.ПоискИУстановкаОбновлений.TabularSection.ДоступныеОбновления.Attribute.Версия1Разряд View false @@ -11993,7 +11975,7 @@ - DataProcessor.ОбновлениеКонфигурации.Attribute.ПарольСервераОбновлений + DataProcessor.ПоискИУстановкаОбновлений.Attribute.ПарольСервераОбновлений View false @@ -13005,7 +12987,7 @@ - DataProcessor.ОбновлениеКонфигурации.TabularSection.ДоступныеОбновления.Attribute.Версия3Разряд + DataProcessor.ПоискИУстановкаОбновлений.TabularSection.ДоступныеОбновления.Attribute.Версия3Разряд View false @@ -13214,7 +13196,7 @@ - InformationRegister.НастройкиТранспортаОбмена.Resource.FTPСоединениеПароль + InformationRegister.НастройкиТранспортаОбмена.Resource.УдалитьFTPСоединениеПароль View false @@ -13368,7 +13350,7 @@ - DataProcessor.ОбновлениеКонфигурации.Attribute.НуженФайлОбновления + DataProcessor.ПоискИУстановкаОбновлений.Attribute.НуженФайлОбновления View false @@ -13566,7 +13548,7 @@ - DataProcessor.ОбновлениеКонфигурации.Attribute.АдресЭлектроннойПочты + DataProcessor.ПоискИУстановкаОбновлений.Attribute.АдресЭлектроннойПочты View false @@ -14149,7 +14131,7 @@ - DataProcessor.ОбновлениеКонфигурации.Attribute.ПроверятьНаличиеОбновленияПриЗапуске + DataProcessor.ПоискИУстановкаОбновлений.Attribute.ПроверятьНаличиеОбновленияПриЗапуске View false @@ -14699,7 +14681,7 @@ - DataProcessor.ОбновлениеКонфигурации.Attribute.ВыслатьОтчетНаПочту + DataProcessor.ПоискИУстановкаОбновлений.Attribute.ВыслатьОтчетНаПочту View false @@ -14886,7 +14868,7 @@ - DataProcessor.ОбновлениеКонфигурации.TabularSection.ДоступныеОбновления.Attribute.Версия + DataProcessor.ПоискИУстановкаОбновлений.TabularSection.ДоступныеОбновления.Attribute.Версия View false @@ -15084,7 +15066,7 @@ - DataProcessor.ОбновлениеКонфигурации.Attribute.СоздаватьРезервнуюКопию + DataProcessor.ПоискИУстановкаОбновлений.Attribute.СоздаватьРезервнуюКопию View false @@ -15227,7 +15209,7 @@ - DataProcessor.ОбновлениеКонфигурации.TabularSection.ДоступныеОбновления.Attribute.ПутьКЛокальномуФайлу + DataProcessor.ПоискИУстановкаОбновлений.TabularSection.ДоступныеОбновления.Attribute.ПутьКЛокальномуФайлу View false @@ -15410,7 +15392,7 @@ - DataProcessor.ОбновлениеКонфигурации.TabularSection.ДоступныеОбновления.Attribute.ПутьКФайлуОбновления + DataProcessor.ПоискИУстановкаОбновлений.TabularSection.ДоступныеОбновления.Attribute.ПутьКФайлуОбновления View false @@ -15497,17 +15479,6 @@ false - - Catalog.ГруппыДоступа.Attribute.ТипПользователей - - View - false - - - Edit - false - - Catalog.ЗапланированноеВзаимодействиеПрисоединенныеФайлы.TabularSection.ЭлектронныеПодписи.Attribute.Комментарий @@ -15586,7 +15557,7 @@ - DataProcessor.ОбновлениеКонфигурации.TabularSection.ДоступныеОбновления.Attribute.Поставщик + DataProcessor.ПоискИУстановкаОбновлений.TabularSection.ДоступныеОбновления.Attribute.Поставщик View false @@ -15597,7 +15568,7 @@ - DataProcessor.ОбновлениеКонфигурации.TabularSection.ДоступныеОбновления.Attribute.Конфигурация + DataProcessor.ПоискИУстановкаОбновлений.TabularSection.ДоступныеОбновления.Attribute.Конфигурация View false diff --git a/SSL/src/Roles/ИзменениеМакетовПечатныхФорм/Rights.rights b/SSL/src/Roles/ИзменениеМакетовПечатныхФорм/Rights.rights index d256ed7bb..c7952cedf 100644 --- a/SSL/src/Roles/ИзменениеМакетовПечатныхФорм/Rights.rights +++ b/SSL/src/Roles/ИзменениеМакетовПечатныхФорм/Rights.rights @@ -950,7 +950,7 @@ - Catalog.УчетныеЗаписиЭлектроннойПочты.Attribute.Пароль + Catalog.УчетныеЗаписиЭлектроннойПочты.Attribute.УдалитьПароль View false @@ -1621,7 +1621,7 @@ - Catalog.УчетныеЗаписиЭлектроннойПочты.Attribute.ПарольSMTP + Catalog.УчетныеЗаписиЭлектроннойПочты.Attribute.УдалитьПарольSMTP View false @@ -3183,7 +3183,7 @@ - DataProcessor.ОбновлениеКонфигурации.Attribute.ИсточникОбновления + DataProcessor.ПоискИУстановкаОбновлений.Attribute.ИсточникОбновления View false @@ -3282,7 +3282,7 @@ - DataProcessor.ОбновлениеКонфигурации.TabularSection.ДоступныеОбновления.Attribute.Версия2Разряд + DataProcessor.ПоискИУстановкаОбновлений.TabularSection.ДоступныеОбновления.Attribute.Версия2Разряд View false @@ -3304,7 +3304,7 @@ - DataProcessor.ОбновлениеКонфигурации.Attribute.РезультатОбновления + DataProcessor.ПоискИУстановкаОбновлений.Attribute.РезультатОбновления View false @@ -3579,7 +3579,7 @@ - DataProcessor.ОбновлениеКонфигурации.Attribute.КодПользователяСервераОбновлений + DataProcessor.ПоискИУстановкаОбновлений.Attribute.КодПользователяСервераОбновлений View false @@ -4008,7 +4008,7 @@ - DataProcessor.ОбновлениеКонфигурации.TabularSection.ДоступныеОбновления.Attribute.ФайлОбновления + DataProcessor.ПоискИУстановкаОбновлений.TabularSection.ДоступныеОбновления.Attribute.ФайлОбновления View false @@ -4129,7 +4129,7 @@ - DataProcessor.ОбновлениеКонфигурации.Attribute.КодЗадачиПланировщика + DataProcessor.ПоискИУстановкаОбновлений.Attribute.КодЗадачиПланировщика View false @@ -4877,7 +4877,7 @@ - DataProcessor.ОбновлениеКонфигурации.TabularSection.ДоступныеОбновления.Attribute.НомерДискаИТС + DataProcessor.ПоискИУстановкаОбновлений.TabularSection.ДоступныеОбновления.Attribute.НомерДискаИТС View false @@ -5042,7 +5042,7 @@ - DataProcessor.ОбновлениеКонфигурации.TabularSection.ДоступныеОбновления + DataProcessor.ПоискИУстановкаОбновлений.TabularSection.ДоступныеОбновления View false @@ -6109,7 +6109,7 @@ - DataProcessor.ОбновлениеКонфигурации.Attribute.ДатаВремяОбновления + DataProcessor.ПоискИУстановкаОбновлений.Attribute.ДатаВремяОбновления View false @@ -6120,7 +6120,7 @@ - DataProcessor.ПомощникСозданияОбменаДанными.Attribute.ИмяФайлаНастроекОбменаДаннымиДляЗагрузки + DataProcessor.ПомощникСозданияОбменаДанными.Attribute.ИмяФайлаНастроекСинхронизацииДанныхДляЗагрузки View false @@ -6504,17 +6504,6 @@ false - - InformationRegister.НазначениеДополнительныхОбработок.Resource.ИспользоватьПечатныеФормы - - View - false - - - Edit - false - - Catalog.СценарииОбменовДанными.TabularSection.НастройкиОбмена.Attribute.УзелИнформационнойБазы @@ -7220,7 +7209,7 @@ - DataProcessor.ОбновлениеКонфигурации.Attribute.РежимОбновления + DataProcessor.ПоискИУстановкаОбновлений.Attribute.РежимОбновления View false @@ -7748,7 +7737,7 @@ - DataProcessor.ПомощникСозданияОбменаДанными.Attribute.ИмяФайлаНастроекОбменаДанными + DataProcessor.ПомощникСозданияОбменаДанными.Attribute.ИмяФайлаНастроекСинхронизацииДанных View false @@ -8507,7 +8496,7 @@ - DataProcessor.ОбновлениеКонфигурации.Attribute.ИспользоватьРасписаниеДляПроверкиОбновления + DataProcessor.ПоискИУстановкаОбновлений.Attribute.ИспользоватьРасписаниеДляПроверкиОбновления View false @@ -8518,7 +8507,7 @@ - DataProcessor.ОбновлениеКонфигурации.Attribute.ЗапомнитьПарольСервераОбновлений + DataProcessor.ПоискИУстановкаОбновлений.Attribute.ЗапомнитьПарольСервераОбновлений View false @@ -8867,7 +8856,7 @@ - DataProcessor.ОбновлениеКонфигурации.Attribute.ВосстанавливатьИнформационнуюБазу + DataProcessor.ПоискИУстановкаОбновлений.Attribute.ВосстанавливатьИнформационнуюБазу View false @@ -8911,7 +8900,7 @@ - DataProcessor.ОбновлениеКонфигурации.TabularSection.ДоступныеОбновления.Attribute.ПутьКЛокальномуФайлуОбновления + DataProcessor.ПоискИУстановкаОбновлений.TabularSection.ДоступныеОбновления.Attribute.ПутьКЛокальномуФайлуОбновления View false @@ -9615,7 +9604,7 @@ - DataProcessor.ОбновлениеКонфигурации.Attribute.ИмяКаталогаРезервнойКопииИБ + DataProcessor.ПоискИУстановкаОбновлений.Attribute.ИмяКаталогаРезервнойКопииИБ View false @@ -10022,7 +10011,7 @@ - DataProcessor.ОбновлениеКонфигурации.Attribute.ИмяФайлаОбновления + DataProcessor.ПоискИУстановкаОбновлений.Attribute.ИмяФайлаОбновления View false @@ -10495,7 +10484,7 @@ - DataProcessor.ОбновлениеКонфигурации.TabularSection.ДоступныеОбновления.Attribute.РазмерФайлаОбновления + DataProcessor.ПоискИУстановкаОбновлений.TabularSection.ДоступныеОбновления.Attribute.РазмерФайлаОбновления View false @@ -10605,7 +10594,7 @@ - DataProcessor.ОбновлениеКонфигурации.Attribute.РасписаниеПроверкиНаличияОбновления + DataProcessor.ПоискИУстановкаОбновлений.Attribute.РасписаниеПроверкиНаличияОбновления View false @@ -10880,7 +10869,7 @@ - DataProcessor.ОбновлениеКонфигурации.TabularSection.ДоступныеОбновления.Attribute.ВерсияДляОбновления + DataProcessor.ПоискИУстановкаОбновлений.TabularSection.ДоступныеОбновления.Attribute.ВерсияДляОбновления View false @@ -11100,7 +11089,7 @@ - Catalog.ГруппыВнешнихПользователей.Attribute.ТипОбъектовАвторизации + Catalog.ГруппыВнешнихПользователей.Attribute.УдалитьТипОбъектовАвторизации View false @@ -11188,7 +11177,7 @@ - DataProcessor.ОбновлениеКонфигурации.TabularSection.ДоступныеОбновления.Attribute.Версия4Разряд + DataProcessor.ПоискИУстановкаОбновлений.TabularSection.ДоступныеОбновления.Attribute.Версия4Разряд View false @@ -11463,7 +11452,7 @@ - DataProcessor.ОбновлениеКонфигурации.Attribute.ПовторныйЗапуск + DataProcessor.ПоискИУстановкаОбновлений.Attribute.ПовторныйЗапуск View false @@ -11496,7 +11485,7 @@ - InformationRegister.НастройкиТранспортаОбмена.Resource.ПарольАрхиваСообщенияОбмена + InformationRegister.НастройкиТранспортаОбмена.Resource.УдалитьПарольАрхиваСообщенияОбмена View false @@ -11782,7 +11771,7 @@ - DataProcessor.ОбновлениеКонфигурации.TabularSection.ДоступныеОбновления.Attribute.ЛокальныйОтносительныйКаталог + DataProcessor.ПоискИУстановкаОбновлений.TabularSection.ДоступныеОбновления.Attribute.ЛокальныйОтносительныйКаталог View false @@ -11826,7 +11815,7 @@ - DataProcessor.ОбновлениеКонфигурации.Attribute.ТехническаяИнформацияОбОшибке + DataProcessor.ПоискИУстановкаОбновлений.Attribute.ТехническаяИнформацияОбОшибке View false @@ -11881,7 +11870,7 @@ - DataProcessor.ОбновлениеКонфигурации.TabularSection.ДоступныеОбновления.Attribute.Версия1Разряд + DataProcessor.ПоискИУстановкаОбновлений.TabularSection.ДоступныеОбновления.Attribute.Версия1Разряд View false @@ -12123,7 +12112,7 @@ - DataProcessor.ОбновлениеКонфигурации.Attribute.ПарольСервераОбновлений + DataProcessor.ПоискИУстановкаОбновлений.Attribute.ПарольСервераОбновлений View false @@ -13146,7 +13135,7 @@ - DataProcessor.ОбновлениеКонфигурации.TabularSection.ДоступныеОбновления.Attribute.Версия3Разряд + DataProcessor.ПоискИУстановкаОбновлений.TabularSection.ДоступныеОбновления.Attribute.Версия3Разряд View false @@ -13355,7 +13344,7 @@ - InformationRegister.НастройкиТранспортаОбмена.Resource.FTPСоединениеПароль + InformationRegister.НастройкиТранспортаОбмена.Resource.УдалитьFTPСоединениеПароль View false @@ -13509,7 +13498,7 @@ - DataProcessor.ОбновлениеКонфигурации.Attribute.НуженФайлОбновления + DataProcessor.ПоискИУстановкаОбновлений.Attribute.НуженФайлОбновления View false @@ -13707,7 +13696,7 @@ - DataProcessor.ОбновлениеКонфигурации.Attribute.АдресЭлектроннойПочты + DataProcessor.ПоискИУстановкаОбновлений.Attribute.АдресЭлектроннойПочты View false @@ -14290,7 +14279,7 @@ - DataProcessor.ОбновлениеКонфигурации.Attribute.ПроверятьНаличиеОбновленияПриЗапуске + DataProcessor.ПоискИУстановкаОбновлений.Attribute.ПроверятьНаличиеОбновленияПриЗапуске View false @@ -14829,7 +14818,7 @@ - DataProcessor.ОбновлениеКонфигурации.Attribute.ВыслатьОтчетНаПочту + DataProcessor.ПоискИУстановкаОбновлений.Attribute.ВыслатьОтчетНаПочту View false @@ -15016,7 +15005,7 @@ - DataProcessor.ОбновлениеКонфигурации.TabularSection.ДоступныеОбновления.Attribute.Версия + DataProcessor.ПоискИУстановкаОбновлений.TabularSection.ДоступныеОбновления.Attribute.Версия View false @@ -15214,7 +15203,7 @@ - DataProcessor.ОбновлениеКонфигурации.Attribute.СоздаватьРезервнуюКопию + DataProcessor.ПоискИУстановкаОбновлений.Attribute.СоздаватьРезервнуюКопию View false @@ -15357,7 +15346,7 @@ - DataProcessor.ОбновлениеКонфигурации.TabularSection.ДоступныеОбновления.Attribute.ПутьКЛокальномуФайлу + DataProcessor.ПоискИУстановкаОбновлений.TabularSection.ДоступныеОбновления.Attribute.ПутьКЛокальномуФайлу View false @@ -15533,7 +15522,7 @@ - DataProcessor.ОбновлениеКонфигурации.TabularSection.ДоступныеОбновления.Attribute.ПутьКФайлуОбновления + DataProcessor.ПоискИУстановкаОбновлений.TabularSection.ДоступныеОбновления.Attribute.ПутьКФайлуОбновления View false @@ -15620,17 +15609,6 @@ false - - Catalog.ГруппыДоступа.Attribute.ТипПользователей - - View - false - - - Edit - false - - Catalog.ЗапланированноеВзаимодействиеПрисоединенныеФайлы.TabularSection.ЭлектронныеПодписи.Attribute.Комментарий @@ -15709,7 +15687,7 @@ - DataProcessor.ОбновлениеКонфигурации.TabularSection.ДоступныеОбновления.Attribute.Поставщик + DataProcessor.ПоискИУстановкаОбновлений.TabularSection.ДоступныеОбновления.Attribute.Поставщик View false @@ -15720,7 +15698,7 @@ - DataProcessor.ОбновлениеКонфигурации.TabularSection.ДоступныеОбновления.Attribute.Конфигурация + DataProcessor.ПоискИУстановкаОбновлений.TabularSection.ДоступныеОбновления.Attribute.Конфигурация View false diff --git a/SSL/src/Roles/ИзменениеТекущегоВнешнегоПользователя/Rights.rights b/SSL/src/Roles/ИзменениеТекущегоВнешнегоПользователя/Rights.rights deleted file mode 100644 index 3109d5f7e..000000000 --- a/SSL/src/Roles/ИзменениеТекущегоВнешнегоПользователя/Rights.rights +++ /dev/null @@ -1,116 +0,0 @@ - - - false - true - false - - InformationRegister.СоставыГруппПользователей.Resource.Используется - - Edit - false - - - - InformationRegister.СоставыГруппПользователей.Dimension.Пользователь - - Edit - false - - - - InformationRegister.СоставыГруппПользователей - - Read - true - - ГДЕ Пользователь = &ТекущийВнешнийПользователь - - - - View - true - - - - InformationRegister.СоставыГруппПользователей.StandardAttribute.Active - - Edit - false - - - - InformationRegister.СоставыГруппПользователей.StandardAttribute.LineNumber - - Edit - false - - - - InformationRegister.СоставыГруппПользователей.StandardAttribute.Recorder - - Edit - false - - - - InformationRegister.СоставыГруппПользователей.StandardAttribute.Period - - Edit - false - - - - Catalog.ВнешниеПользователи - - Read - true - - ГДЕ Ссылка = &ТекущийВнешнийПользователь - - - - Update - true - - ГДЕ Ссылка = &ТекущийВнешнийПользователь - - - - View - true - - - Edit - true - - - InputByString - true - - - - Catalog.ГруппыВнешнихПользователей - - Read - true - - ГДЕ Ссылка = Значение(Справочник.ГруппыВнешнихПользователей.ВсеВнешниеПользователи) - - - - View - true - - - InputByString - true - - - - InformationRegister.СоставыГруппПользователей.Dimension.ГруппаПользователей - - Edit - false - - - diff --git a/SSL/src/Roles/ИзменениеТекущегоВнешнегоПользователя/ИзменениеТекущегоВнешнегоПользователя.mdo b/SSL/src/Roles/ИзменениеТекущегоВнешнегоПользователя/ИзменениеТекущегоВнешнегоПользователя.mdo deleted file mode 100644 index 1b0b47463..000000000 --- a/SSL/src/Roles/ИзменениеТекущегоВнешнегоПользователя/ИзменениеТекущегоВнешнегоПользователя.mdo +++ /dev/null @@ -1,8 +0,0 @@ - - - ИзменениеТекущегоВнешнегоПользователя - - ru - Изменение текущего внешнего пользователя - - diff --git a/SSL/src/Roles/ИзменениеТекущегоПользователя/Rights.rights b/SSL/src/Roles/ИзменениеТекущегоПользователя/Rights.rights deleted file mode 100644 index c63e44f8f..000000000 --- a/SSL/src/Roles/ИзменениеТекущегоПользователя/Rights.rights +++ /dev/null @@ -1,116 +0,0 @@ - - - false - true - false - - InformationRegister.СоставыГруппПользователей.Resource.Используется - - Edit - false - - - - InformationRegister.СоставыГруппПользователей.Dimension.Пользователь - - Edit - false - - - - Catalog.Пользователи - - Read - true - - ГДЕ Ссылка = &ТекущийПользователь - - - - Update - true - - ГДЕ Ссылка = &ТекущийПользователь - - - - View - true - - - Edit - true - - - InputByString - true - - - - InformationRegister.СоставыГруппПользователей - - Read - true - - ГДЕ Пользователь = &ТекущийПользователь - - - - View - true - - - - InformationRegister.СоставыГруппПользователей.StandardAttribute.Active - - Edit - false - - - - InformationRegister.СоставыГруппПользователей.StandardAttribute.LineNumber - - Edit - false - - - - InformationRegister.СоставыГруппПользователей.StandardAttribute.Recorder - - Edit - false - - - - InformationRegister.СоставыГруппПользователей.StandardAttribute.Period - - Edit - false - - - - Catalog.ГруппыПользователей - - Read - true - - ГДЕ Ссылка = Значение(Справочник.ГруппыПользователей.ВсеПользователи) - - - - View - true - - - InputByString - true - - - - InformationRegister.СоставыГруппПользователей.Dimension.ГруппаПользователей - - Edit - false - - - diff --git a/SSL/src/Roles/ИзменениеТекущегоПользователя/ИзменениеТекущегоПользователя.mdo b/SSL/src/Roles/ИзменениеТекущегоПользователя/ИзменениеТекущегоПользователя.mdo deleted file mode 100644 index f7dc29af8..000000000 --- a/SSL/src/Roles/ИзменениеТекущегоПользователя/ИзменениеТекущегоПользователя.mdo +++ /dev/null @@ -1,8 +0,0 @@ - - - ИзменениеТекущегоПользователя - - ru - Изменение текущего пользователя - - diff --git a/SSL/src/Roles/ИзменениеУчастниковГруппДоступа/Rights.rights b/SSL/src/Roles/ИзменениеУчастниковГруппДоступа/Rights.rights index cfbd3699e..7f2c150f4 100644 --- a/SSL/src/Roles/ИзменениеУчастниковГруппДоступа/Rights.rights +++ b/SSL/src/Roles/ИзменениеУчастниковГруппДоступа/Rights.rights @@ -4,7 +4,7 @@ true false - Catalog.УчетныеЗаписиЭлектроннойПочты.Attribute.Пароль + Catalog.УчетныеЗаписиЭлектроннойПочты.Attribute.УдалитьПароль View false @@ -33,7 +33,7 @@ - Catalog.УчетныеЗаписиЭлектроннойПочты.Attribute.ПарольSMTP + Catalog.УчетныеЗаписиЭлектроннойПочты.Attribute.УдалитьПарольSMTP View false diff --git a/SSL/src/Roles/ИнтерактивноеОткрытиеВнешнихОтчетовИОбработок/Rights.rights b/SSL/src/Roles/ИнтерактивноеОткрытиеВнешнихОтчетовИОбработок/Rights.rights index 8c66a425d..c9f8994b6 100644 --- a/SSL/src/Roles/ИнтерактивноеОткрытиеВнешнихОтчетовИОбработок/Rights.rights +++ b/SSL/src/Roles/ИнтерактивноеОткрытиеВнешнихОтчетовИОбработок/Rights.rights @@ -950,7 +950,7 @@ - Catalog.УчетныеЗаписиЭлектроннойПочты.Attribute.Пароль + Catalog.УчетныеЗаписиЭлектроннойПочты.Attribute.УдалитьПароль View false @@ -1576,41 +1576,6 @@ false - - Configuration.БиблиотекаСтандартныхПодсистем - - MainWindowModeNormal - true - - - MainWindowModeWorkplace - true - - - MainWindowModeEmbeddedWorkplace - true - - - MainWindowModeFullscreenWorkplace - true - - - MainWindowModeKiosk - true - - - AnalyticsSystemClient - true - - - InteractiveOpenExtDataProcessors - true - - - InteractiveOpenExtReports - true - - InformationRegister.ПользовательскиеМакетыПечати.Dimension.Объект @@ -1667,7 +1632,7 @@ - Catalog.УчетныеЗаписиЭлектроннойПочты.Attribute.ПарольSMTP + Catalog.УчетныеЗаписиЭлектроннойПочты.Attribute.УдалитьПарольSMTP View false @@ -2128,6 +2093,41 @@ false + + Configuration.БиблиотекаСтандартныхПодсистем + + MainWindowModeNormal + true + + + MainWindowModeWorkplace + true + + + MainWindowModeEmbeddedWorkplace + true + + + MainWindowModeFullscreenWorkplace + true + + + MainWindowModeKiosk + true + + + AnalyticsSystemClient + true + + + InteractiveOpenExtDataProcessors + true + + + InteractiveOpenExtReports + true + + Document.НазначениеОпросов.Attribute.ВозможностьПредварительногоСохранения @@ -3229,7 +3229,7 @@ - DataProcessor.ОбновлениеКонфигурации.Attribute.ИсточникОбновления + DataProcessor.ПоискИУстановкаОбновлений.Attribute.ИсточникОбновления View false @@ -3328,7 +3328,7 @@ - DataProcessor.ОбновлениеКонфигурации.TabularSection.ДоступныеОбновления.Attribute.Версия2Разряд + DataProcessor.ПоискИУстановкаОбновлений.TabularSection.ДоступныеОбновления.Attribute.Версия2Разряд View false @@ -3350,7 +3350,7 @@ - DataProcessor.ОбновлениеКонфигурации.Attribute.РезультатОбновления + DataProcessor.ПоискИУстановкаОбновлений.Attribute.РезультатОбновления View false @@ -3625,7 +3625,7 @@ - DataProcessor.ОбновлениеКонфигурации.Attribute.КодПользователяСервераОбновлений + DataProcessor.ПоискИУстановкаОбновлений.Attribute.КодПользователяСервераОбновлений View false @@ -4054,7 +4054,7 @@ - DataProcessor.ОбновлениеКонфигурации.TabularSection.ДоступныеОбновления.Attribute.ФайлОбновления + DataProcessor.ПоискИУстановкаОбновлений.TabularSection.ДоступныеОбновления.Attribute.ФайлОбновления View false @@ -4175,7 +4175,7 @@ - DataProcessor.ОбновлениеКонфигурации.Attribute.КодЗадачиПланировщика + DataProcessor.ПоискИУстановкаОбновлений.Attribute.КодЗадачиПланировщика View false @@ -4923,7 +4923,7 @@ - DataProcessor.ОбновлениеКонфигурации.TabularSection.ДоступныеОбновления.Attribute.НомерДискаИТС + DataProcessor.ПоискИУстановкаОбновлений.TabularSection.ДоступныеОбновления.Attribute.НомерДискаИТС View false @@ -5088,7 +5088,7 @@ - DataProcessor.ОбновлениеКонфигурации.TabularSection.ДоступныеОбновления + DataProcessor.ПоискИУстановкаОбновлений.TabularSection.ДоступныеОбновления View false @@ -6155,7 +6155,7 @@ - DataProcessor.ОбновлениеКонфигурации.Attribute.ДатаВремяОбновления + DataProcessor.ПоискИУстановкаОбновлений.Attribute.ДатаВремяОбновления View false @@ -6166,7 +6166,7 @@ - DataProcessor.ПомощникСозданияОбменаДанными.Attribute.ИмяФайлаНастроекОбменаДаннымиДляЗагрузки + DataProcessor.ПомощникСозданияОбменаДанными.Attribute.ИмяФайлаНастроекСинхронизацииДанныхДляЗагрузки View false @@ -6561,17 +6561,6 @@ false - - InformationRegister.НазначениеДополнительныхОбработок.Resource.ИспользоватьПечатныеФормы - - View - false - - - Edit - false - - Catalog.СценарииОбменовДанными.TabularSection.НастройкиОбмена.Attribute.УзелИнформационнойБазы @@ -7277,7 +7266,7 @@ - DataProcessor.ОбновлениеКонфигурации.Attribute.РежимОбновления + DataProcessor.ПоискИУстановкаОбновлений.Attribute.РежимОбновления View false @@ -7805,7 +7794,7 @@ - DataProcessor.ПомощникСозданияОбменаДанными.Attribute.ИмяФайлаНастроекОбменаДанными + DataProcessor.ПомощникСозданияОбменаДанными.Attribute.ИмяФайлаНастроекСинхронизацииДанных View false @@ -8564,7 +8553,7 @@ - DataProcessor.ОбновлениеКонфигурации.Attribute.ИспользоватьРасписаниеДляПроверкиОбновления + DataProcessor.ПоискИУстановкаОбновлений.Attribute.ИспользоватьРасписаниеДляПроверкиОбновления View false @@ -8575,7 +8564,7 @@ - DataProcessor.ОбновлениеКонфигурации.Attribute.ЗапомнитьПарольСервераОбновлений + DataProcessor.ПоискИУстановкаОбновлений.Attribute.ЗапомнитьПарольСервераОбновлений View false @@ -8949,7 +8938,7 @@ - DataProcessor.ОбновлениеКонфигурации.Attribute.ВосстанавливатьИнформационнуюБазу + DataProcessor.ПоискИУстановкаОбновлений.Attribute.ВосстанавливатьИнформационнуюБазу View false @@ -8993,7 +8982,7 @@ - DataProcessor.ОбновлениеКонфигурации.TabularSection.ДоступныеОбновления.Attribute.ПутьКЛокальномуФайлуОбновления + DataProcessor.ПоискИУстановкаОбновлений.TabularSection.ДоступныеОбновления.Attribute.ПутьКЛокальномуФайлуОбновления View false @@ -9697,7 +9686,7 @@ - DataProcessor.ОбновлениеКонфигурации.Attribute.ИмяКаталогаРезервнойКопииИБ + DataProcessor.ПоискИУстановкаОбновлений.Attribute.ИмяКаталогаРезервнойКопииИБ View false @@ -10104,7 +10093,7 @@ - DataProcessor.ОбновлениеКонфигурации.Attribute.ИмяФайлаОбновления + DataProcessor.ПоискИУстановкаОбновлений.Attribute.ИмяФайлаОбновления View false @@ -10577,7 +10566,7 @@ - DataProcessor.ОбновлениеКонфигурации.TabularSection.ДоступныеОбновления.Attribute.РазмерФайлаОбновления + DataProcessor.ПоискИУстановкаОбновлений.TabularSection.ДоступныеОбновления.Attribute.РазмерФайлаОбновления View false @@ -10687,7 +10676,7 @@ - DataProcessor.ОбновлениеКонфигурации.Attribute.РасписаниеПроверкиНаличияОбновления + DataProcessor.ПоискИУстановкаОбновлений.Attribute.РасписаниеПроверкиНаличияОбновления View false @@ -10962,7 +10951,7 @@ - DataProcessor.ОбновлениеКонфигурации.TabularSection.ДоступныеОбновления.Attribute.ВерсияДляОбновления + DataProcessor.ПоискИУстановкаОбновлений.TabularSection.ДоступныеОбновления.Attribute.ВерсияДляОбновления View false @@ -11182,7 +11171,7 @@ - Catalog.ГруппыВнешнихПользователей.Attribute.ТипОбъектовАвторизации + Catalog.ГруппыВнешнихПользователей.Attribute.УдалитьТипОбъектовАвторизации View false @@ -11270,7 +11259,7 @@ - DataProcessor.ОбновлениеКонфигурации.TabularSection.ДоступныеОбновления.Attribute.Версия4Разряд + DataProcessor.ПоискИУстановкаОбновлений.TabularSection.ДоступныеОбновления.Attribute.Версия4Разряд View false @@ -11545,7 +11534,7 @@ - DataProcessor.ОбновлениеКонфигурации.Attribute.ПовторныйЗапуск + DataProcessor.ПоискИУстановкаОбновлений.Attribute.ПовторныйЗапуск View false @@ -11578,7 +11567,7 @@ - InformationRegister.НастройкиТранспортаОбмена.Resource.ПарольАрхиваСообщенияОбмена + InformationRegister.НастройкиТранспортаОбмена.Resource.УдалитьПарольАрхиваСообщенияОбмена View false @@ -11864,7 +11853,7 @@ - DataProcessor.ОбновлениеКонфигурации.TabularSection.ДоступныеОбновления.Attribute.ЛокальныйОтносительныйКаталог + DataProcessor.ПоискИУстановкаОбновлений.TabularSection.ДоступныеОбновления.Attribute.ЛокальныйОтносительныйКаталог View false @@ -11908,7 +11897,7 @@ - DataProcessor.ОбновлениеКонфигурации.Attribute.ТехническаяИнформацияОбОшибке + DataProcessor.ПоискИУстановкаОбновлений.Attribute.ТехническаяИнформацияОбОшибке View false @@ -11974,7 +11963,7 @@ - DataProcessor.ОбновлениеКонфигурации.TabularSection.ДоступныеОбновления.Attribute.Версия1Разряд + DataProcessor.ПоискИУстановкаОбновлений.TabularSection.ДоступныеОбновления.Attribute.Версия1Разряд View false @@ -12216,7 +12205,7 @@ - DataProcessor.ОбновлениеКонфигурации.Attribute.ПарольСервераОбновлений + DataProcessor.ПоискИУстановкаОбновлений.Attribute.ПарольСервераОбновлений View false @@ -13239,7 +13228,7 @@ - DataProcessor.ОбновлениеКонфигурации.TabularSection.ДоступныеОбновления.Attribute.Версия3Разряд + DataProcessor.ПоискИУстановкаОбновлений.TabularSection.ДоступныеОбновления.Attribute.Версия3Разряд View false @@ -13448,7 +13437,7 @@ - InformationRegister.НастройкиТранспортаОбмена.Resource.FTPСоединениеПароль + InformationRegister.НастройкиТранспортаОбмена.Resource.УдалитьFTPСоединениеПароль View false @@ -13602,7 +13591,7 @@ - DataProcessor.ОбновлениеКонфигурации.Attribute.НуженФайлОбновления + DataProcessor.ПоискИУстановкаОбновлений.Attribute.НуженФайлОбновления View false @@ -13800,7 +13789,7 @@ - DataProcessor.ОбновлениеКонфигурации.Attribute.АдресЭлектроннойПочты + DataProcessor.ПоискИУстановкаОбновлений.Attribute.АдресЭлектроннойПочты View false @@ -14383,7 +14372,7 @@ - DataProcessor.ОбновлениеКонфигурации.Attribute.ПроверятьНаличиеОбновленияПриЗапуске + DataProcessor.ПоискИУстановкаОбновлений.Attribute.ПроверятьНаличиеОбновленияПриЗапуске View false @@ -14933,7 +14922,7 @@ - DataProcessor.ОбновлениеКонфигурации.Attribute.ВыслатьОтчетНаПочту + DataProcessor.ПоискИУстановкаОбновлений.Attribute.ВыслатьОтчетНаПочту View false @@ -15120,7 +15109,7 @@ - DataProcessor.ОбновлениеКонфигурации.TabularSection.ДоступныеОбновления.Attribute.Версия + DataProcessor.ПоискИУстановкаОбновлений.TabularSection.ДоступныеОбновления.Attribute.Версия View false @@ -15318,7 +15307,7 @@ - DataProcessor.ОбновлениеКонфигурации.Attribute.СоздаватьРезервнуюКопию + DataProcessor.ПоискИУстановкаОбновлений.Attribute.СоздаватьРезервнуюКопию View false @@ -15461,7 +15450,7 @@ - DataProcessor.ОбновлениеКонфигурации.TabularSection.ДоступныеОбновления.Attribute.ПутьКЛокальномуФайлу + DataProcessor.ПоискИУстановкаОбновлений.TabularSection.ДоступныеОбновления.Attribute.ПутьКЛокальномуФайлу View false @@ -15637,7 +15626,7 @@ - DataProcessor.ОбновлениеКонфигурации.TabularSection.ДоступныеОбновления.Attribute.ПутьКФайлуОбновления + DataProcessor.ПоискИУстановкаОбновлений.TabularSection.ДоступныеОбновления.Attribute.ПутьКФайлуОбновления View false @@ -15724,17 +15713,6 @@ false - - Catalog.ГруппыДоступа.Attribute.ТипПользователей - - View - false - - - Edit - false - - Catalog.ЗапланированноеВзаимодействиеПрисоединенныеФайлы.TabularSection.ЭлектронныеПодписи.Attribute.Комментарий @@ -15813,7 +15791,7 @@ - DataProcessor.ОбновлениеКонфигурации.TabularSection.ДоступныеОбновления.Attribute.Поставщик + DataProcessor.ПоискИУстановкаОбновлений.TabularSection.ДоступныеОбновления.Attribute.Поставщик View false @@ -15824,7 +15802,7 @@ - DataProcessor.ОбновлениеКонфигурации.TabularSection.ДоступныеОбновления.Attribute.Конфигурация + DataProcessor.ПоискИУстановкаОбновлений.TabularSection.ДоступныеОбновления.Attribute.Конфигурация View false diff --git a/SSL/src/Roles/ИспользованиеВариантовОтчетов/Rights.rights b/SSL/src/Roles/ИспользованиеВариантовОтчетов/Rights.rights index e17498059..37cc5fef0 100644 --- a/SSL/src/Roles/ИспользованиеВариантовОтчетов/Rights.rights +++ b/SSL/src/Roles/ИспользованиеВариантовОтчетов/Rights.rights @@ -132,10 +132,6 @@ Catalog.ПредопределенныеВариантыОтчетов.Attribute.КлючВарианта - - View - false - Edit false @@ -155,6 +151,17 @@ true + + InformationRegister.ПредопределенныеВариантыОтчетовВерсийРасширений + + Read + true + + + View + true + + Catalog.ВариантыОтчетов.Attribute.ТолькоДляАвтора @@ -163,11 +170,14 @@ - Catalog.ПредопределенныеВариантыОтчетов.TabularSection.Размещение + Catalog.ПредопределенныеВариантыОтчетовРасширений - View - false + Read + true + + + Catalog.ПредопределенныеВариантыОтчетов.TabularSection.Размещение Edit false @@ -200,10 +210,6 @@ Catalog.ПредопределенныеВариантыОтчетов.TabularSection.Размещение.Attribute.Подсистема - - View - false - Edit false @@ -282,10 +288,6 @@ Catalog.ПредопределенныеВариантыОтчетов.Attribute.Описание - - View - false - Edit false @@ -311,13 +313,17 @@ Read true + + View + true + + + InputByString + true + Catalog.ПредопределенныеВариантыОтчетов.StandardAttribute.Predefined - - View - false - Edit false @@ -325,10 +331,6 @@ Catalog.ПредопределенныеВариантыОтчетов.StandardAttribute.Ref - - View - false - Edit false @@ -336,10 +338,6 @@ Catalog.ПредопределенныеВариантыОтчетов.StandardAttribute.DeletionMark - - View - false - Edit false @@ -347,10 +345,6 @@ Catalog.ПредопределенныеВариантыОтчетов.StandardAttribute.IsFolder - - View - false - Edit false @@ -358,10 +352,6 @@ Catalog.ПредопределенныеВариантыОтчетов.StandardAttribute.Owner - - View - false - Edit false @@ -369,10 +359,6 @@ Catalog.ПредопределенныеВариантыОтчетов.StandardAttribute.Parent - - View - false - Edit false @@ -380,10 +366,6 @@ Catalog.ПредопределенныеВариантыОтчетов.StandardAttribute.Description - - View - false - Edit false @@ -391,10 +373,6 @@ Catalog.ПредопределенныеВариантыОтчетов.StandardAttribute.Code - - View - false - Edit false @@ -402,10 +380,6 @@ Catalog.ПредопределенныеВариантыОтчетов.Attribute.Отчет - - View - false - Edit false @@ -413,10 +387,6 @@ Catalog.ПредопределенныеВариантыОтчетов.Attribute.ВидимостьПоУмолчанию - - View - false - Edit false @@ -523,10 +493,6 @@ Catalog.ПредопределенныеВариантыОтчетов.TabularSection.Размещение.Attribute.СмТакже - - View - false - Edit false @@ -541,10 +507,6 @@ Catalog.ПредопределенныеВариантыОтчетов.Attribute.Включен - - View - false - Edit false @@ -552,10 +514,6 @@ Catalog.ПредопределенныеВариантыОтчетов.TabularSection.Размещение.Attribute.Важный - - View - false - Edit false diff --git a/SSL/src/Roles/ИспользованиеДополнительныхОтчетовИОбработок/Rights.rights b/SSL/src/Roles/ИспользованиеДополнительныхОтчетовИОбработок/Rights.rights index 11267f4d6..612e922de 100644 --- a/SSL/src/Roles/ИспользованиеДополнительныхОтчетовИОбработок/Rights.rights +++ b/SSL/src/Roles/ИспользованиеДополнительныхОтчетовИОбработок/Rights.rights @@ -942,7 +942,7 @@ - Catalog.УчетныеЗаписиЭлектроннойПочты.Attribute.Пароль + Catalog.УчетныеЗаписиЭлектроннойПочты.Attribute.УдалитьПароль View false @@ -1007,17 +1007,6 @@ false - - Constant.ИспользоватьДополнительныеОтчетыИОбработки - - Read - true - - - View - true - - InformationRegister.НомераОтсканированныхФайлов.StandardAttribute.Active @@ -1631,7 +1620,7 @@ - Catalog.УчетныеЗаписиЭлектроннойПочты.Attribute.ПарольSMTP + Catalog.УчетныеЗаписиЭлектроннойПочты.Attribute.УдалитьПарольSMTP View false @@ -2971,13 +2960,6 @@ false - - CommonCommand.ДополнительныеПечатныеФормыОбъекта - - View - true - - DataProcessor.СопоставлениеОбъектовИнформационныхБаз.TabularSection.ТаблицаАвтоматическиСопоставленныхОбъектов.Attribute.ПриемникПоле1 @@ -3195,7 +3177,7 @@ - DataProcessor.ОбновлениеКонфигурации.Attribute.ИсточникОбновления + DataProcessor.ПоискИУстановкаОбновлений.Attribute.ИсточникОбновления View false @@ -3294,7 +3276,7 @@ - DataProcessor.ОбновлениеКонфигурации.TabularSection.ДоступныеОбновления.Attribute.Версия2Разряд + DataProcessor.ПоискИУстановкаОбновлений.TabularSection.ДоступныеОбновления.Attribute.Версия2Разряд View false @@ -3316,7 +3298,7 @@ - DataProcessor.ОбновлениеКонфигурации.Attribute.РезультатОбновления + DataProcessor.ПоискИУстановкаОбновлений.Attribute.РезультатОбновления View false @@ -3587,7 +3569,7 @@ - DataProcessor.ОбновлениеКонфигурации.Attribute.КодПользователяСервераОбновлений + DataProcessor.ПоискИУстановкаОбновлений.Attribute.КодПользователяСервераОбновлений View false @@ -4012,7 +3994,7 @@ - DataProcessor.ОбновлениеКонфигурации.TabularSection.ДоступныеОбновления.Attribute.ФайлОбновления + DataProcessor.ПоискИУстановкаОбновлений.TabularSection.ДоступныеОбновления.Attribute.ФайлОбновления View false @@ -4133,7 +4115,7 @@ - DataProcessor.ОбновлениеКонфигурации.Attribute.КодЗадачиПланировщика + DataProcessor.ПоискИУстановкаОбновлений.Attribute.КодЗадачиПланировщика View false @@ -4884,7 +4866,7 @@ - DataProcessor.ОбновлениеКонфигурации.TabularSection.ДоступныеОбновления.Attribute.НомерДискаИТС + DataProcessor.ПоискИУстановкаОбновлений.TabularSection.ДоступныеОбновления.Attribute.НомерДискаИТС View false @@ -5049,7 +5031,7 @@ - DataProcessor.ОбновлениеКонфигурации.TabularSection.ДоступныеОбновления + DataProcessor.ПоискИУстановкаОбновлений.TabularSection.ДоступныеОбновления View false @@ -6126,7 +6108,7 @@ - DataProcessor.ОбновлениеКонфигурации.Attribute.ДатаВремяОбновления + DataProcessor.ПоискИУстановкаОбновлений.Attribute.ДатаВремяОбновления View false @@ -6137,7 +6119,7 @@ - DataProcessor.ПомощникСозданияОбменаДанными.Attribute.ИмяФайлаНастроекОбменаДаннымиДляЗагрузки + DataProcessor.ПомощникСозданияОбменаДанными.Attribute.ИмяФайлаНастроекСинхронизацииДанныхДляЗагрузки View false @@ -6528,17 +6510,6 @@ false - - InformationRegister.НазначениеДополнительныхОбработок.Resource.ИспользоватьПечатныеФормы - - View - false - - - Edit - false - - Catalog.СценарииОбменовДанными.TabularSection.НастройкиОбмена.Attribute.УзелИнформационнойБазы @@ -7084,7 +7055,7 @@ Update true - ГДЕ Пользователь = &ТекущийПользователь + ГДЕ Пользователь = &АвторизованныйПользователь @@ -7254,7 +7225,7 @@ - DataProcessor.ОбновлениеКонфигурации.Attribute.РежимОбновления + DataProcessor.ПоискИУстановкаОбновлений.Attribute.РежимОбновления View false @@ -7796,7 +7767,7 @@ - DataProcessor.ПомощникСозданияОбменаДанными.Attribute.ИмяФайлаНастроекОбменаДанными + DataProcessor.ПомощникСозданияОбменаДанными.Attribute.ИмяФайлаНастроекСинхронизацииДанных View false @@ -8551,7 +8522,7 @@ - DataProcessor.ОбновлениеКонфигурации.Attribute.ИспользоватьРасписаниеДляПроверкиОбновления + DataProcessor.ПоискИУстановкаОбновлений.Attribute.ИспользоватьРасписаниеДляПроверкиОбновления View false @@ -8562,7 +8533,7 @@ - DataProcessor.ОбновлениеКонфигурации.Attribute.ЗапомнитьПарольСервераОбновлений + DataProcessor.ПоискИУстановкаОбновлений.Attribute.ЗапомнитьПарольСервераОбновлений View false @@ -8932,7 +8903,7 @@ - DataProcessor.ОбновлениеКонфигурации.Attribute.ВосстанавливатьИнформационнуюБазу + DataProcessor.ПоискИУстановкаОбновлений.Attribute.ВосстанавливатьИнформационнуюБазу View false @@ -8976,7 +8947,7 @@ - DataProcessor.ОбновлениеКонфигурации.TabularSection.ДоступныеОбновления.Attribute.ПутьКЛокальномуФайлуОбновления + DataProcessor.ПоискИУстановкаОбновлений.TabularSection.ДоступныеОбновления.Attribute.ПутьКЛокальномуФайлуОбновления View false @@ -9361,6 +9332,10 @@ Read true + + #ПоЗначениям( "Справочник.ДополнительныеОтчетыИОбработки", "", "", +"ДополнительныеОтчетыИОбработки", "Ссылка", "","", "","", "","", "","", "","", "","", "","", "","", "","", "","", "","", "","", "","", "","", "","") + View @@ -9659,7 +9634,7 @@ - DataProcessor.ОбновлениеКонфигурации.Attribute.ИмяКаталогаРезервнойКопииИБ + DataProcessor.ПоискИУстановкаОбновлений.Attribute.ИмяКаталогаРезервнойКопииИБ View false @@ -10066,7 +10041,7 @@ - DataProcessor.ОбновлениеКонфигурации.Attribute.ИмяФайлаОбновления + DataProcessor.ПоискИУстановкаОбновлений.Attribute.ИмяФайлаОбновления View false @@ -10539,7 +10514,7 @@ - DataProcessor.ОбновлениеКонфигурации.TabularSection.ДоступныеОбновления.Attribute.РазмерФайлаОбновления + DataProcessor.ПоискИУстановкаОбновлений.TabularSection.ДоступныеОбновления.Attribute.РазмерФайлаОбновления View false @@ -10649,7 +10624,7 @@ - DataProcessor.ОбновлениеКонфигурации.Attribute.РасписаниеПроверкиНаличияОбновления + DataProcessor.ПоискИУстановкаОбновлений.Attribute.РасписаниеПроверкиНаличияОбновления View false @@ -10924,7 +10899,7 @@ - DataProcessor.ОбновлениеКонфигурации.TabularSection.ДоступныеОбновления.Attribute.ВерсияДляОбновления + DataProcessor.ПоискИУстановкаОбновлений.TabularSection.ДоступныеОбновления.Attribute.ВерсияДляОбновления View false @@ -11140,7 +11115,7 @@ - Catalog.ГруппыВнешнихПользователей.Attribute.ТипОбъектовАвторизации + Catalog.ГруппыВнешнихПользователей.Attribute.УдалитьТипОбъектовАвторизации View false @@ -11228,7 +11203,7 @@ - DataProcessor.ОбновлениеКонфигурации.TabularSection.ДоступныеОбновления.Attribute.Версия4Разряд + DataProcessor.ПоискИУстановкаОбновлений.TabularSection.ДоступныеОбновления.Attribute.Версия4Разряд View false @@ -11503,7 +11478,7 @@ - DataProcessor.ОбновлениеКонфигурации.Attribute.ПовторныйЗапуск + DataProcessor.ПоискИУстановкаОбновлений.Attribute.ПовторныйЗапуск View false @@ -11536,7 +11511,7 @@ - InformationRegister.НастройкиТранспортаОбмена.Resource.ПарольАрхиваСообщенияОбмена + InformationRegister.НастройкиТранспортаОбмена.Resource.УдалитьПарольАрхиваСообщенияОбмена View false @@ -11822,7 +11797,7 @@ - DataProcessor.ОбновлениеКонфигурации.TabularSection.ДоступныеОбновления.Attribute.ЛокальныйОтносительныйКаталог + DataProcessor.ПоискИУстановкаОбновлений.TabularSection.ДоступныеОбновления.Attribute.ЛокальныйОтносительныйКаталог View false @@ -11866,7 +11841,7 @@ - DataProcessor.ОбновлениеКонфигурации.Attribute.ТехническаяИнформацияОбОшибке + DataProcessor.ПоискИУстановкаОбновлений.Attribute.ТехническаяИнформацияОбОшибке View false @@ -11932,7 +11907,7 @@ - DataProcessor.ОбновлениеКонфигурации.TabularSection.ДоступныеОбновления.Attribute.Версия1Разряд + DataProcessor.ПоискИУстановкаОбновлений.TabularSection.ДоступныеОбновления.Attribute.Версия1Разряд View false @@ -12180,7 +12155,7 @@ - DataProcessor.ОбновлениеКонфигурации.Attribute.ПарольСервераОбновлений + DataProcessor.ПоискИУстановкаОбновлений.Attribute.ПарольСервераОбновлений View false @@ -13220,7 +13195,7 @@ - DataProcessor.ОбновлениеКонфигурации.TabularSection.ДоступныеОбновления.Attribute.Версия3Разряд + DataProcessor.ПоискИУстановкаОбновлений.TabularSection.ДоступныеОбновления.Attribute.Версия3Разряд View false @@ -13436,7 +13411,7 @@ - InformationRegister.НастройкиТранспортаОбмена.Resource.FTPСоединениеПароль + InformationRegister.НастройкиТранспортаОбмена.Resource.УдалитьFTPСоединениеПароль View false @@ -13590,7 +13565,7 @@ - DataProcessor.ОбновлениеКонфигурации.Attribute.НуженФайлОбновления + DataProcessor.ПоискИУстановкаОбновлений.Attribute.НуженФайлОбновления View false @@ -13788,7 +13763,7 @@ - DataProcessor.ОбновлениеКонфигурации.Attribute.АдресЭлектроннойПочты + DataProcessor.ПоискИУстановкаОбновлений.Attribute.АдресЭлектроннойПочты View false @@ -14374,7 +14349,7 @@ - DataProcessor.ОбновлениеКонфигурации.Attribute.ПроверятьНаличиеОбновленияПриЗапуске + DataProcessor.ПоискИУстановкаОбновлений.Attribute.ПроверятьНаличиеОбновленияПриЗапуске View false @@ -14927,7 +14902,7 @@ - DataProcessor.ОбновлениеКонфигурации.Attribute.ВыслатьОтчетНаПочту + DataProcessor.ПоискИУстановкаОбновлений.Attribute.ВыслатьОтчетНаПочту View false @@ -15114,7 +15089,7 @@ - DataProcessor.ОбновлениеКонфигурации.TabularSection.ДоступныеОбновления.Attribute.Версия + DataProcessor.ПоискИУстановкаОбновлений.TabularSection.ДоступныеОбновления.Attribute.Версия View false @@ -15312,7 +15287,7 @@ - DataProcessor.ОбновлениеКонфигурации.Attribute.СоздаватьРезервнуюКопию + DataProcessor.ПоискИУстановкаОбновлений.Attribute.СоздаватьРезервнуюКопию View false @@ -15455,7 +15430,7 @@ - DataProcessor.ОбновлениеКонфигурации.TabularSection.ДоступныеОбновления.Attribute.ПутьКЛокальномуФайлу + DataProcessor.ПоискИУстановкаОбновлений.TabularSection.ДоступныеОбновления.Attribute.ПутьКЛокальномуФайлу View false @@ -15631,7 +15606,7 @@ - DataProcessor.ОбновлениеКонфигурации.TabularSection.ДоступныеОбновления.Attribute.ПутьКФайлуОбновления + DataProcessor.ПоискИУстановкаОбновлений.TabularSection.ДоступныеОбновления.Attribute.ПутьКФайлуОбновления View false @@ -15718,17 +15693,6 @@ false - - Catalog.ГруппыДоступа.Attribute.ТипПользователей - - View - false - - - Edit - false - - Catalog.ЗапланированноеВзаимодействиеПрисоединенныеФайлы.TabularSection.ЭлектронныеПодписи.Attribute.Комментарий @@ -15807,7 +15771,7 @@ - DataProcessor.ОбновлениеКонфигурации.TabularSection.ДоступныеОбновления.Attribute.Поставщик + DataProcessor.ПоискИУстановкаОбновлений.TabularSection.ДоступныеОбновления.Attribute.Поставщик View false @@ -15818,7 +15782,7 @@ - DataProcessor.ОбновлениеКонфигурации.TabularSection.ДоступныеОбновления.Attribute.Конфигурация + DataProcessor.ПоискИУстановкаОбновлений.TabularSection.ДоступныеОбновления.Attribute.Конфигурация View false @@ -15959,4 +15923,2686 @@ false + + ПоЗначениям + // ПоЗначениям(Таблица, -, Модификатор, В1,П1, В2,П2, ..., В(n), П(n)). +// № параметра: 1, 2, 3, 4, 5, 6, 7, ..., 2+n*2,3+n*2. +// Читается так: "ограничение доступа по значениям". +// Параметры: +// Таблица - Имя текущей таблицы, например "Документ.ПоступлениеТоваровИУслуг". +// Модификатор - изменяет шаблон. +// 1-й модификатор - строка "НеОграничиватьДоступКГруппам" указывает +// безусловно выбирать группы иерархического справочника. +// Других модификаторов в этой версии шаблона не предусмотрено. +// В(n) - Вид доступа - имя вида доступа, например, "Организации". Для полей составного типа, с целью повышения +// производительности, лучше указать несколько имен, например, "Организации,ГруппыФизическихЛиц", +// чем использовать несколько блоков параметров, с одним и тем же именем поля. +// Специальные виды доступа "Условие", "НастройкиПрав", "ПравоЧтения", "ПравоИзменения" +// можно использовать только отдельно. +// Когда В(n) = "Условие" (или ""), тогда П(n) содержит строку условия на языке запросов, например +// "Т.Автор = &АвторизованныйПользователь", +// "ТИПЗНАЧЕНИЯ(Т.Владелец) = ТИП(Справочник.Организации)", где Т - псевдоним текущей таблицы. +// Когда В(n) = "ПравоЧтения" Или "ПравоИзменения", +// выполняется проверка наличия права на таблицу значения Т.П(n). +// П(n) - Поле проверяемого значения, кроме случая В(n) = "Условие" (или ""). +// Примечение: максимальное количество одновременно проверяемых значений полей можно увеличить, изменив шаблон, но +// необходимо будет указывать все параметры шаблона, т.е. указывать пустые строки, когда количество полей меньше максимального. +// Шаблон имеет структуру: +// <Общая часть условий> <Условие по группе параметров 1> И <Условие по группе параметров 2> И ... <Условие по группе параметров(n)> +// Пример: +// ПоЗначениям("Документ.ПоступлениеТоваровИУслуг", "", "", +// "Организации","Организация", +// "Поставщики","Контрагент", "","", ...) + +// Проверка правильности параметра Право. +#Если Не ("#Параметр(2)" = "Чтение" Или "#Параметр(2)" = "Добавление" Или + "#Параметр(2)" = "Изменение" Или "#Параметр(2)" = "Удаление" Или "#Параметр(2)" = "") + Или #ИмяТекущегоПраваДоступа <> "Чтение" И "#Параметр(2)" = "Чтение" + Или #ИмяТекущегоПраваДоступа = "Чтение" И "#Параметр(2)" <> "Чтение" И "#Параметр(2)" <> "" #Тогда + // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. + НеверноеПраво: #Параметр(2) +#КонецЕсли + +// Проверка правильности параметра ИмяТаблицы. +#Если "#Параметр(1)" <> #ИмяТекущейТаблицы #Тогда + // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. + НеверноеИмяТекущейТаблицы: "#Параметр(1)" +#КонецЕсли + +// Проверка правильности параметра Модификатор. +#Если Не ("#Параметр(3)" = "НеОграничиватьДоступКГруппам" Или "#Параметр(3)" = "") #Тогда + // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. + НеверныйМодификатор: #Параметр(3) +#КонецЕсли + +// Общая проверка использования ограничений доступа на уровне записей и +// проверка использования хотя бы одного ограничения из указанных видов доступа. +#Если &ОграничиватьДоступНаУровнеЗаписей + И Не (Истина + И ("#Параметр(4)" = "" И "#Параметр(5)" = "" + Или &ВидыДоступаСОтключеннымИспользованием = "Все" + И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(4),") + Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(4),")) + И ("#Параметр(6)" = "" И "#Параметр(7)" = "" + Или &ВидыДоступаСОтключеннымИспользованием = "Все" + И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(6),") + Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(6),")) + И ("#Параметр(8)" = "" И "#Параметр(9)" = "" + Или &ВидыДоступаСОтключеннымИспользованием = "Все" + И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(8),") + Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(8),")) + И ("#Параметр(10)" = "" И "#Параметр(11)" = "" + Или &ВидыДоступаСОтключеннымИспользованием = "Все" + И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(10),") + Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(10),")) + И ("#Параметр(12)" = "" И "#Параметр(13)" = "" + Или &ВидыДоступаСОтключеннымИспользованием = "Все" + И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(12),") + Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(12),")) + И ("#Параметр(14)" = "" И "#Параметр(15)" = "" + Или &ВидыДоступаСОтключеннымИспользованием = "Все" + И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(14),") + Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(14),")) + И ("#Параметр(16)" = "" И "#Параметр(17)" = "" + Или &ВидыДоступаСОтключеннымИспользованием = "Все" + И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(16),") + Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(16),")) + И ("#Параметр(18)" = "" И "#Параметр(19)" = "" + Или &ВидыДоступаСОтключеннымИспользованием = "Все" + И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(18),") + Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(18),")) + И ("#Параметр(20)" = "" И "#Параметр(21)" = "" + Или &ВидыДоступаСОтключеннымИспользованием = "Все" + И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(20),") + Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(20),")) + И ("#Параметр(22)" = "" И "#Параметр(23)" = "" + Или &ВидыДоступаСОтключеннымИспользованием = "Все" + И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(22),") + Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(22),")) + И ("#Параметр(24)" = "" И "#Параметр(25)" = "" + Или &ВидыДоступаСОтключеннымИспользованием = "Все" + И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(24),") + Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(24),")) + И ("#Параметр(26)" = "" И "#Параметр(27)" = "" + Или &ВидыДоступаСОтключеннымИспользованием = "Все" + И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(26),") + Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(26),")) + И ("#Параметр(28)" = "" И "#Параметр(29)" = "" + Или &ВидыДоступаСОтключеннымИспользованием = "Все" + И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(28),") + Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(28),")) + И ("#Параметр(30)" = "" И "#Параметр(31)" = "" + Или &ВидыДоступаСОтключеннымИспользованием = "Все" + И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(30),") + Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(30),")) + И ("#Параметр(32)" = "" И "#Параметр(33)" = "" + Или &ВидыДоступаСОтключеннымИспользованием = "Все" + И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(32),") + Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(32),")) + И ("#Параметр(34)" = "" И "#Параметр(35)" = "" + Или &ВидыДоступаСОтключеннымИспользованием = "Все" + И Не СтрСодержит(",Условие,,НастройкиПрав,Объект, ,ПравоЧтения,ПравоИзменения,", ",#Параметр(34),") + Или СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(34),")) + ) #Тогда + +Т ГДЕ // Т - псевдоним текущей таблицы (выбран коротким, чтобы сократить количество символов в тексте параметра-условия на языке запросов). + +// Безусловная выборка групп в иерархическом объекте метаданных (если нужно). +#Если "#Параметр(3)" = "НеОграничиватьДоступКГруппам" #Тогда + Т.ЭтоГруппа ИЛИ +#КонецЕсли + +ИСТИНА В +( // Проверка права пользователя на текущую таблицу в целом. + // Права на таблицы формируются по составу ролей профиля группы доступа. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ + Справочник.ИдентификаторыОбъектовМетаданных КАК СвойстваТекущейТаблицы + ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.ГруппыДоступа КАК ГруппыДоступа + ПО + СвойстваТекущейТаблицы.ПолноеИмя = "#Параметр(1)" + И ИСТИНА В + ( + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ + РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступа + ГДЕ + ТаблицыГруппДоступа.Таблица = СвойстваТекущейТаблицы.Ссылка + И ТаблицыГруппДоступа.ГруппаДоступа = ГруппыДоступа.Ссылка + #Если Не #ИмяТекущегоПраваДоступа = "Чтение" #Тогда + И ТаблицыГруппДоступа.Изменение + #КонецЕсли + ) + И ГруппыДоступа.Ссылка В + ( + ВЫБРАТЬ + ГруппыДоступаПользователи.Ссылка КАК ГруппаДоступа + ИЗ + Справочник.ГруппыДоступа.Пользователи КАК ГруппыДоступаПользователи + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ПО + СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь + И СоставыГруппПользователей.ГруппаПользователей = ГруппыДоступаПользователи.Пользователь + ) + ГДЕ + ( // Поиск значений заданных полей в разрешенных значениях групп доступа (пользователей). + +//// Проверка значения поля группы параметров 1. +#Если "#Параметр(4)" = "Условие" Или "#Параметр(4)" = "" #Тогда + // Когда имя вида доступа "Условие" (или ""), тогда вместо имени поля задано условие. + ( #Параметр(5) ) +#ИначеЕсли "#Параметр(4)" = "ПравоЧтения" Или "#Параметр(4)" = "ПравоИзменения" #Тогда + Т.#Параметр(5) <> НЕОПРЕДЕЛЕНО + И ИСТИНА В + ( // Проверка права пользователя на таблицу Значения, установленного в поле. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава + ГДЕ + ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка + И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТИПЗНАЧЕНИЯ(Т.#Параметр(5)) + #Если Не "#Параметр(4)" = "ПравоЧтения" #Тогда + И ТаблицыГруппДоступаПроверкаПрава.Изменение + #КонецЕсли + ) +#ИначеЕсли "#Параметр(4)" = "НастройкиПрав" #Тогда + + ( + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ( + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ПО + НаследованиеНастроек.Объект = Т.#Параметр(5) + И НастройкиПрав.Объект = НаследованиеНастроек.Родитель + #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда + И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияЧтения + #Иначе + #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда + И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка + #Иначе + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + #КонецЕсли + И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения + #КонецЕсли + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ПО + СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь + И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь + ) + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. + ( + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ + ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ПО + НаследованиеНастроек.Объект = Т.#Параметр(5) + И НастройкиПрав.Объект = НаследованиеНастроек.Родитель + #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда + И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияЧтения + #Иначе + #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда + И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка + #Иначе + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + #КонецЕсли + И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения + #КонецЕсли + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ПО + СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь + И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь + ) + ) +#ИначеЕсли Не СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(4),") #Тогда + // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. + #Если СтрСодержит("#Параметр(4)", ",") #Тогда + НеверныйВидДоступа: "#Параметр(4)" - "Список имен видов доступа не найден" + #Иначе + НеверныйВидДоступа: "#Параметр(4)" - "Имя вида доступа не найдено" + #КонецЕсли +#ИначеЕсли &ВидыДоступаСОтключеннымИспользованием <> "Все" + И Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(4),") #Тогда + + ( + ЕСТЬNULL(Т.#Параметр(5), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО + И + #Если (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(4),", ",Пользователи,")) + Или (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(4),", ",ВнешниеПользователи,")) #Тогда + НЕ + ( + НЕ ИСТИНА В + ( + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа + ГДЕ + ГруппыЗначенийДоступа.ЗначениеДоступа = Т.#Параметр(5) + И ГруппыЗначенийДоступа.ГруппаЗначенийДоступа = &АвторизованныйПользователь + ) + И НЕ + #Иначе + ( + #КонецЕсли + ВЫБОР + КОГДА ИСТИНА В + ( + #Если СтрСодержит(&ВидыДоступаБезГруппДляЗначенияДоступа, ",#Параметр(4),") #Тогда + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения + ГДЕ + Значения.ГруппаДоступа = ГруппыДоступа.Ссылка + И Значения.ЗначениеДоступа = Т.#Параметр(5) + #ИначеЕсли "Т.#Параметр(5)" = "Т.Ссылка" #Тогда + #Если СтрСодержит("#Параметр(4)", ",") #Тогда + // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. + НеверныйВидДоступа: "#Параметр(4)" - "При проверке таблицы значения доступа можно указывать только один вид доступа" + #ИначеЕсли СтрСодержит(&ВидыДоступаСОднойГруппойДляЗначенияДоступа, ",#Параметр(4),") #Тогда + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения + ГДЕ + Значения.ГруппаДоступа = ГруппыДоступа.Ссылка + И Значения.ЗначениеДоступа = Т.ГруппаДоступа + #Иначе // Значения доступа, для которых можно указать несколько групп значений доступа. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения + ВНУТРЕННЕЕ СОЕДИНЕНИЕ #Параметр(1).ГруппыДоступа КАК ГруппыЗначений + ПО + Значения.ГруппаДоступа = ГруппыДоступа.Ссылка + И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа + И ГруппыЗначений.Ссылка = Т.#Параметр(5) + #КонецЕсли + #Иначе + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + ПО + Значения.ГруппаДоступа = ГруппыДоступа.Ссылка + И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа + И ГруппыЗначений.ЗначениеДоступа = Т.#Параметр(5) + #КонецЕсли + ) + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ + = + ВЫБОР + КОГДА ИСТИНА В + ( + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию + ГДЕ + ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(Т.#Параметр(5)) + И ЗначенияПоУмолчанию.ВсеРазрешены = ЛОЖЬ + ) + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ + ) + ) +#Иначе + ИСТИНА +#КонецЕсли + +//// Проверка значения поля группы параметров 2. +#Если "#Параметр(6)" = "" И "#Параметр(7)" = "" #Тогда + // Группа параметров не используется. +#ИначеЕсли "#Параметр(6)" = "Условие" Или "#Параметр(6)" = "" #Тогда + // Когда имя вида доступа "Условие" (или ""), тогда вместо имени поля задано условие. + И ( #Параметр(7) ) +#ИначеЕсли "#Параметр(6)" = "ПравоЧтения" Или "#Параметр(6)" = "ПравоИзменения" #Тогда + И Т.#Параметр(7) <> НЕОПРЕДЕЛЕНО + И ИСТИНА В + ( // Проверка права пользователя на таблицу Значения, установленного в поле. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава + ГДЕ + ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка + И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТИПЗНАЧЕНИЯ(Т.#Параметр(7)) + #Если Не "#Параметр(6)" = "ПравоЧтения" #Тогда + И ТаблицыГруппДоступаПроверкаПрава.Изменение + #КонецЕсли + ) +#ИначеЕсли "#Параметр(6)" = "НастройкиПрав" #Тогда + И + ( + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ( + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ПО + НаследованиеНастроек.Объект = Т.#Параметр(7) + И НастройкиПрав.Объект = НаследованиеНастроек.Родитель + #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда + И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияЧтения + #Иначе + #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда + И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка + #Иначе + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + #КонецЕсли + И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения + #КонецЕсли + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ПО + СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь + И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь + ) + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. + ( + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ + ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ПО + НаследованиеНастроек.Объект = Т.#Параметр(7) + И НастройкиПрав.Объект = НаследованиеНастроек.Родитель + #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда + И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияЧтения + #Иначе + #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда + И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка + #Иначе + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + #КонецЕсли + И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения + #КонецЕсли + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ПО + СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь + И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь + ) + ) +#ИначеЕсли Не СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(6),") #Тогда + // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. + #Если СтрСодержит("#Параметр(6)", ",") #Тогда + НеверныйВидДоступа: "#Параметр(6)" - "Список имен видов доступа не найден" + #Иначе + НеверныйВидДоступа: "#Параметр(6)" - "Имя вида доступа не найдено" + #КонецЕсли +#ИначеЕсли &ВидыДоступаСОтключеннымИспользованием <> "Все" + И Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(6),") #Тогда + И + ( + ЕСТЬNULL(Т.#Параметр(7), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО + И + #Если (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(6),", ",Пользователи,")) + Или (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(6),", ",ВнешниеПользователи,")) #Тогда + НЕ + ( + НЕ ИСТИНА В + ( + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа + ГДЕ + ГруппыЗначенийДоступа.ЗначениеДоступа = Т.#Параметр(7) + И ГруппыЗначенийДоступа.ГруппаЗначенийДоступа = &АвторизованныйПользователь + ) + И НЕ + #Иначе + ( + #КонецЕсли + ВЫБОР + КОГДА ИСТИНА В + ( + #Если СтрСодержит(&ВидыДоступаБезГруппДляЗначенияДоступа, ",#Параметр(6),") #Тогда + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения + ГДЕ + Значения.ГруппаДоступа = ГруппыДоступа.Ссылка + И Значения.ЗначениеДоступа = Т.#Параметр(7) + #ИначеЕсли "Т.#Параметр(7)" = "Т.Ссылка" #Тогда + #Если СтрСодержит("#Параметр(6)", ",") #Тогда + // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. + НеверныйВидДоступа: "#Параметр(6)" - "При проверке таблицы значения доступа можно указывать только один вид доступа" + #ИначеЕсли СтрСодержит(&ВидыДоступаСОднойГруппойДляЗначенияДоступа, ",#Параметр(6),") #Тогда + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения + ГДЕ + Значения.ГруппаДоступа = ГруппыДоступа.Ссылка + И Значения.ЗначениеДоступа = Т.ГруппаДоступа + #Иначе // Значения доступа, для которых можно указать несколько групп значений доступа. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения + ВНУТРЕННЕЕ СОЕДИНЕНИЕ #Параметр(1).ГруппыДоступа КАК ГруппыЗначений + ПО + Значения.ГруппаДоступа = ГруппыДоступа.Ссылка + И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа + И ГруппыЗначений.Ссылка = Т.#Параметр(7) + #КонецЕсли + #Иначе + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + ПО + Значения.ГруппаДоступа = ГруппыДоступа.Ссылка + И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа + И ГруппыЗначений.ЗначениеДоступа = Т.#Параметр(7) + #КонецЕсли + ) + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ + = + ВЫБОР + КОГДА ИСТИНА В + ( + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию + ГДЕ + ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(Т.#Параметр(7)) + И ЗначенияПоУмолчанию.ВсеРазрешены = ЛОЖЬ + ) + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ + ) + ) +#КонецЕсли + +//// Проверка значения поля группы параметров 3. +#Если "#Параметр(8)" = "" И "#Параметр(9)" = "" #Тогда + // Группа параметров не используется. +#ИначеЕсли "#Параметр(8)" = "Условие" Или "#Параметр(8)" = "" #Тогда + // Когда имя вида доступа "Условие" (или ""), тогда вместо имени поля задано условие. + И ( #Параметр(9) ) +#ИначеЕсли "#Параметр(8)" = "ПравоЧтения" Или "#Параметр(8)" = "ПравоИзменения" #Тогда + И Т.#Параметр(9) <> НЕОПРЕДЕЛЕНО + И ИСТИНА В + ( // Проверка права пользователя на таблицу Значения, установленного в поле. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава + ГДЕ + ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка + И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТИПЗНАЧЕНИЯ(Т.#Параметр(9)) + #Если Не "#Параметр(8)" = "ПравоЧтения" #Тогда + И ТаблицыГруппДоступаПроверкаПрава.Изменение + #КонецЕсли + ) +#ИначеЕсли "#Параметр(8)" = "НастройкиПрав" #Тогда + И + ( + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ( + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ПО + НаследованиеНастроек.Объект = Т.#Параметр(9) + И НастройкиПрав.Объект = НаследованиеНастроек.Родитель + #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда + И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияЧтения + #Иначе + #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда + И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка + #Иначе + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + #КонецЕсли + И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения + #КонецЕсли + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ПО + СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь + И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь + ) + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. + ( + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ + ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ПО + НаследованиеНастроек.Объект = Т.#Параметр(9) + И НастройкиПрав.Объект = НаследованиеНастроек.Родитель + #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда + И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияЧтения + #Иначе + #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда + И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка + #Иначе + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + #КонецЕсли + И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения + #КонецЕсли + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ПО + СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь + И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь + ) + ) +#ИначеЕсли Не СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(8),") #Тогда + // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. + #Если СтрСодержит("#Параметр(8)", ",") #Тогда + НеверныйВидДоступа: "#Параметр(8)" - "Список имен видов доступа не найден" + #Иначе + НеверныйВидДоступа: "#Параметр(8)" - "Имя вида доступа не найдено" + #КонецЕсли +#ИначеЕсли &ВидыДоступаСОтключеннымИспользованием <> "Все" + И Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(8),") #Тогда + И + ( + ЕСТЬNULL(Т.#Параметр(9), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО + И + #Если (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(8),", ",Пользователи,")) + Или (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(8),", ",ВнешниеПользователи,")) #Тогда + НЕ + ( + НЕ ИСТИНА В + ( + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа + ГДЕ + ГруппыЗначенийДоступа.ЗначениеДоступа = Т.#Параметр(9) + И ГруппыЗначенийДоступа.ГруппаЗначенийДоступа = &АвторизованныйПользователь + ) + И НЕ + #Иначе + ( + #КонецЕсли + ВЫБОР + КОГДА ИСТИНА В + ( + #Если СтрСодержит(&ВидыДоступаБезГруппДляЗначенияДоступа, ",#Параметр(8),") #Тогда + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения + ГДЕ + Значения.ГруппаДоступа = ГруппыДоступа.Ссылка + И Значения.ЗначениеДоступа = Т.#Параметр(9) + #ИначеЕсли "Т.#Параметр(9)" = "Т.Ссылка" #Тогда + #Если СтрСодержит("#Параметр(8)", ",") #Тогда + // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. + НеверныйВидДоступа: "#Параметр(8)" - "При проверке таблицы значения доступа можно указывать только один вид доступа" + #ИначеЕсли СтрСодержит(&ВидыДоступаСОднойГруппойДляЗначенияДоступа, ",#Параметр(8),") #Тогда + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения + ГДЕ + Значения.ГруппаДоступа = ГруппыДоступа.Ссылка + И Значения.ЗначениеДоступа = Т.ГруппаДоступа + #Иначе // Значения доступа, для которых можно указать несколько групп значений доступа. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения + ВНУТРЕННЕЕ СОЕДИНЕНИЕ #Параметр(1).ГруппыДоступа КАК ГруппыЗначений + ПО + Значения.ГруппаДоступа = ГруппыДоступа.Ссылка + И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа + И ГруппыЗначений.Ссылка = Т.#Параметр(9) + #КонецЕсли + #Иначе + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + ПО + Значения.ГруппаДоступа = ГруппыДоступа.Ссылка + И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа + И ГруппыЗначений.ЗначениеДоступа = Т.#Параметр(9) + #КонецЕсли + ) + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ + = + ВЫБОР + КОГДА ИСТИНА В + ( + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию + ГДЕ + ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(Т.#Параметр(9)) + И ЗначенияПоУмолчанию.ВсеРазрешены = ЛОЖЬ + ) + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ + ) + ) +#КонецЕсли + +//// Проверка значения поля группы параметров 4. +#Если "#Параметр(10)" = "" И "#Параметр(11)" = "" #Тогда + // Группа параметров не используется. +#ИначеЕсли "#Параметр(10)" = "Условие" Или "#Параметр(10)" = "" #Тогда + // Когда имя вида доступа "Условие" (или ""), тогда вместо имени поля задано условие. + И ( #Параметр(11) ) +#ИначеЕсли "#Параметр(10)" = "ПравоЧтения" Или "#Параметр(10)" = "ПравоИзменения" #Тогда + И Т.#Параметр(11) <> НЕОПРЕДЕЛЕНО + И ИСТИНА В + ( // Проверка права пользователя на таблицу Значения, установленного в поле. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава + ГДЕ + ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка + И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТИПЗНАЧЕНИЯ(Т.#Параметр(11)) + #Если Не "#Параметр(10)" = "ПравоЧтения" #Тогда + И ТаблицыГруппДоступаПроверкаПрава.Изменение + #КонецЕсли + ) +#ИначеЕсли "#Параметр(10)" = "НастройкиПрав" #Тогда + И + ( + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ( + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ПО + НаследованиеНастроек.Объект = Т.#Параметр(11) + И НастройкиПрав.Объект = НаследованиеНастроек.Родитель + #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда + И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияЧтения + #Иначе + #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда + И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка + #Иначе + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + #КонецЕсли + И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения + #КонецЕсли + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ПО + СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь + И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь + ) + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. + ( + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ + ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ПО + НаследованиеНастроек.Объект = Т.#Параметр(11) + И НастройкиПрав.Объект = НаследованиеНастроек.Родитель + #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда + И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияЧтения + #Иначе + #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда + И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка + #Иначе + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + #КонецЕсли + И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения + #КонецЕсли + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ПО + СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь + И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь + ) + ) +#ИначеЕсли Не СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(10),") #Тогда + // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. + #Если СтрСодержит("#Параметр(10)", ",") #Тогда + НеверныйВидДоступа: "#Параметр(10)" - "Список имен видов доступа не найден" + #Иначе + НеверныйВидДоступа: "#Параметр(10)" - "Имя вида доступа не найдено" + #КонецЕсли +#ИначеЕсли &ВидыДоступаСОтключеннымИспользованием <> "Все" + И Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(10),") #Тогда + И + ( + ЕСТЬNULL(Т.#Параметр(11), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО + И + #Если (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(10),", ",Пользователи,")) + Или (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(10),", ",ВнешниеПользователи,")) #Тогда + НЕ + ( + НЕ ИСТИНА В + ( + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа + ГДЕ + ГруппыЗначенийДоступа.ЗначениеДоступа = Т.#Параметр(11) + И ГруппыЗначенийДоступа.ГруппаЗначенийДоступа = &АвторизованныйПользователь + ) + И НЕ + #Иначе + ( + #КонецЕсли + ВЫБОР + КОГДА ИСТИНА В + ( + #Если СтрСодержит(&ВидыДоступаБезГруппДляЗначенияДоступа, ",#Параметр(10),") #Тогда + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения + ГДЕ + Значения.ГруппаДоступа = ГруппыДоступа.Ссылка + И Значения.ЗначениеДоступа = Т.#Параметр(11) + #ИначеЕсли "Т.#Параметр(11)" = "Т.Ссылка" #Тогда + #Если СтрСодержит("#Параметр(10)", ",") #Тогда + // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. + НеверныйВидДоступа: "#Параметр(10)" - "При проверке таблицы значения доступа можно указывать только один вид доступа" + #ИначеЕсли СтрСодержит(&ВидыДоступаСОднойГруппойДляЗначенияДоступа, ",#Параметр(10),") #Тогда + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения + ГДЕ + Значения.ГруппаДоступа = ГруппыДоступа.Ссылка + И Значения.ЗначениеДоступа = Т.ГруппаДоступа + #Иначе // Значения доступа, для которых можно указать несколько групп значений доступа. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения + ВНУТРЕННЕЕ СОЕДИНЕНИЕ #Параметр(1).ГруппыДоступа КАК ГруппыЗначений + ПО + Значения.ГруппаДоступа = ГруппыДоступа.Ссылка + И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа + И ГруппыЗначений.Ссылка = Т.#Параметр(11) + #КонецЕсли + #Иначе + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + ПО + Значения.ГруппаДоступа = ГруппыДоступа.Ссылка + И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа + И ГруппыЗначений.ЗначениеДоступа = Т.#Параметр(11) + #КонецЕсли + ) + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ + = + ВЫБОР + КОГДА ИСТИНА В + ( + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию + ГДЕ + ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(Т.#Параметр(11)) + И ЗначенияПоУмолчанию.ВсеРазрешены = ЛОЖЬ + ) + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ + ) + ) +#КонецЕсли + +//// Проверка значения поля группы параметров 5. +#Если "#Параметр(12)" = "" И "#Параметр(13)" = "" #Тогда + // Группа параметров не используется. +#ИначеЕсли "#Параметр(12)" = "Условие" Или "#Параметр(12)" = "" #Тогда + // Когда имя вида доступа "Условие" (или ""), тогда вместо имени поля задано условие. + И ( #Параметр(13) ) +#ИначеЕсли "#Параметр(12)" = "ПравоЧтения" Или "#Параметр(12)" = "ПравоИзменения" #Тогда + И Т.#Параметр(13) <> НЕОПРЕДЕЛЕНО + И ИСТИНА В + ( // Проверка права пользователя на таблицу Значения, установленного в поле. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава + ГДЕ + ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка + И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТИПЗНАЧЕНИЯ(Т.#Параметр(13)) + #Если Не "#Параметр(12)" = "ПравоЧтения" #Тогда + И ТаблицыГруппДоступаПроверкаПрава.Изменение + #КонецЕсли + ) +#ИначеЕсли "#Параметр(12)" = "НастройкиПрав" #Тогда + И + ( + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ( + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ПО + НаследованиеНастроек.Объект = Т.#Параметр(13) + И НастройкиПрав.Объект = НаследованиеНастроек.Родитель + #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда + И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияЧтения + #Иначе + #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда + И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка + #Иначе + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + #КонецЕсли + И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения + #КонецЕсли + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ПО + СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь + И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь + ) + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. + ( + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ + ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ПО + НаследованиеНастроек.Объект = Т.#Параметр(13) + И НастройкиПрав.Объект = НаследованиеНастроек.Родитель + #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда + И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияЧтения + #Иначе + #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда + И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка + #Иначе + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + #КонецЕсли + И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения + #КонецЕсли + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ПО + СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь + И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь + ) + ) +#ИначеЕсли Не СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(12),") #Тогда + // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. + #Если СтрСодержит("#Параметр(12)", ",") #Тогда + НеверныйВидДоступа: "#Параметр(12)" - "Список имен видов доступа не найден" + #Иначе + НеверныйВидДоступа: "#Параметр(12)" - "Имя вида доступа не найдено" + #КонецЕсли +#ИначеЕсли &ВидыДоступаСОтключеннымИспользованием <> "Все" + И Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(12),") #Тогда + И + ( + ЕСТЬNULL(Т.#Параметр(13), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО + И + #Если (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(12),", ",Пользователи,")) + Или (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(12),", ",ВнешниеПользователи,")) #Тогда + НЕ + ( + НЕ ИСТИНА В + ( + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа + ГДЕ + ГруппыЗначенийДоступа.ЗначениеДоступа = Т.#Параметр(13) + И ГруппыЗначенийДоступа.ГруппаЗначенийДоступа = &АвторизованныйПользователь + ) + И НЕ + #Иначе + ( + #КонецЕсли + ВЫБОР + КОГДА ИСТИНА В + ( + #Если СтрСодержит(&ВидыДоступаБезГруппДляЗначенияДоступа, ",#Параметр(12),") #Тогда + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения + ГДЕ + Значения.ГруппаДоступа = ГруппыДоступа.Ссылка + И Значения.ЗначениеДоступа = Т.#Параметр(13) + #ИначеЕсли "Т.#Параметр(13)" = "Т.Ссылка" #Тогда + #Если СтрСодержит("#Параметр(12)", ",") #Тогда + // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. + НеверныйВидДоступа: "#Параметр(12)" - "При проверке таблицы значения доступа можно указывать только один вид доступа" + #ИначеЕсли СтрСодержит(&ВидыДоступаСОднойГруппойДляЗначенияДоступа, ",#Параметр(12),") #Тогда + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения + ГДЕ + Значения.ГруппаДоступа = ГруппыДоступа.Ссылка + И Значения.ЗначениеДоступа = Т.ГруппаДоступа + #Иначе // Значения доступа, для которых можно указать несколько групп значений доступа. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения + ВНУТРЕННЕЕ СОЕДИНЕНИЕ #Параметр(1).ГруппыДоступа КАК ГруппыЗначений + ПО + Значения.ГруппаДоступа = ГруппыДоступа.Ссылка + И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа + И ГруппыЗначений.Ссылка = Т.#Параметр(13) + #КонецЕсли + #Иначе + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + ПО + Значения.ГруппаДоступа = ГруппыДоступа.Ссылка + И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа + И ГруппыЗначений.ЗначениеДоступа = Т.#Параметр(13) + #КонецЕсли + ) + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ + = + ВЫБОР + КОГДА ИСТИНА В + ( + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию + ГДЕ + ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(Т.#Параметр(13)) + И ЗначенияПоУмолчанию.ВсеРазрешены = ЛОЖЬ + ) + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ + ) + ) +#КонецЕсли + +//// Проверка значения поля группы параметров 6. +#Если "#Параметр(14)" = "" И "#Параметр(15)" = "" #Тогда + // Группа параметров не используется. +#ИначеЕсли "#Параметр(14)" = "Условие" Или "#Параметр(14)" = "" #Тогда + // Когда имя вида доступа "Условие" (или ""), тогда вместо имени поля задано условие. + И ( #Параметр(15) ) +#ИначеЕсли "#Параметр(14)" = "ПравоЧтения" Или "#Параметр(14)" = "ПравоИзменения" #Тогда + И Т.#Параметр(15) <> НЕОПРЕДЕЛЕНО + И ИСТИНА В + ( // Проверка права пользователя на таблицу Значения, установленного в поле. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава + ГДЕ + ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка + И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТИПЗНАЧЕНИЯ(Т.#Параметр(15)) + #Если Не "#Параметр(14)" = "ПравоЧтения" #Тогда + И ТаблицыГруппДоступаПроверкаПрава.Изменение + #КонецЕсли + ) +#ИначеЕсли "#Параметр(14)" = "НастройкиПрав" #Тогда + И + ( + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ( + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ПО + НаследованиеНастроек.Объект = Т.#Параметр(15) + И НастройкиПрав.Объект = НаследованиеНастроек.Родитель + #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда + И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияЧтения + #Иначе + #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда + И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка + #Иначе + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + #КонецЕсли + И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения + #КонецЕсли + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ПО + СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь + И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь + ) + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. + ( + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ + ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ПО + НаследованиеНастроек.Объект = Т.#Параметр(15) + И НастройкиПрав.Объект = НаследованиеНастроек.Родитель + #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда + И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияЧтения + #Иначе + #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда + И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка + #Иначе + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + #КонецЕсли + И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения + #КонецЕсли + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ПО + СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь + И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь + ) + ) +#ИначеЕсли Не СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(14),") #Тогда + // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. + #Если СтрСодержит("#Параметр(14)", ",") #Тогда + НеверныйВидДоступа: "#Параметр(14)" - "Список имен видов доступа не найден" + #Иначе + НеверныйВидДоступа: "#Параметр(14)" - "Имя вида доступа не найдено" + #КонецЕсли +#ИначеЕсли &ВидыДоступаСОтключеннымИспользованием <> "Все" + И Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(14),") #Тогда + И + ( + ЕСТЬNULL(Т.#Параметр(15), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО + И + #Если (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(14),", ",Пользователи,")) + Или (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(14),", ",ВнешниеПользователи,")) #Тогда + НЕ + ( + НЕ ИСТИНА В + ( + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа + ГДЕ + ГруппыЗначенийДоступа.ЗначениеДоступа = Т.#Параметр(15) + И ГруппыЗначенийДоступа.ГруппаЗначенийДоступа = &АвторизованныйПользователь + ) + И НЕ + #Иначе + ( + #КонецЕсли + ВЫБОР + КОГДА ИСТИНА В + ( + #Если СтрСодержит(&ВидыДоступаБезГруппДляЗначенияДоступа, ",#Параметр(14),") #Тогда + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения + ГДЕ + Значения.ГруппаДоступа = ГруппыДоступа.Ссылка + И Значения.ЗначениеДоступа = Т.#Параметр(15) + #ИначеЕсли "Т.#Параметр(15)" = "Т.Ссылка" #Тогда + #Если СтрСодержит("#Параметр(14)", ",") #Тогда + // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. + НеверныйВидДоступа: "#Параметр(14)" - "При проверке таблицы значения доступа можно указывать только один вид доступа" + #ИначеЕсли СтрСодержит(&ВидыДоступаСОднойГруппойДляЗначенияДоступа, ",#Параметр(14),") #Тогда + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения + ГДЕ + Значения.ГруппаДоступа = ГруппыДоступа.Ссылка + И Значения.ЗначениеДоступа = Т.ГруппаДоступа + #Иначе // Значения доступа, для которых можно указать несколько групп значений доступа. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения + ВНУТРЕННЕЕ СОЕДИНЕНИЕ #Параметр(1).ГруппыДоступа КАК ГруппыЗначений + ПО + Значения.ГруппаДоступа = ГруппыДоступа.Ссылка + И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа + И ГруппыЗначений.Ссылка = Т.#Параметр(15) + #КонецЕсли + #Иначе + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + ПО + Значения.ГруппаДоступа = ГруппыДоступа.Ссылка + И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа + И ГруппыЗначений.ЗначениеДоступа = Т.#Параметр(15) + #КонецЕсли + ) + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ + = + ВЫБОР + КОГДА ИСТИНА В + ( + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию + ГДЕ + ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(Т.#Параметр(15)) + И ЗначенияПоУмолчанию.ВсеРазрешены = ЛОЖЬ + ) + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ + ) + ) +#КонецЕсли + +//// Проверка значения поля группы параметров 7. +#Если "#Параметр(16)" = "" И "#Параметр(17)" = "" #Тогда + // Группа параметров не используется. +#ИначеЕсли "#Параметр(16)" = "Условие" Или "#Параметр(16)" = "" #Тогда + // Когда имя вида доступа "Условие" (или ""), тогда вместо имени поля задано условие. + И ( #Параметр(17) ) +#ИначеЕсли "#Параметр(16)" = "ПравоЧтения" Или "#Параметр(16)" = "ПравоИзменения" #Тогда + И Т.#Параметр(17) <> НЕОПРЕДЕЛЕНО + И ИСТИНА В + ( // Проверка права пользователя на таблицу Значения, установленного в поле. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава + ГДЕ + ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка + И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТИПЗНАЧЕНИЯ(Т.#Параметр(17)) + #Если Не "#Параметр(16)" = "ПравоЧтения" #Тогда + И ТаблицыГруппДоступаПроверкаПрава.Изменение + #КонецЕсли + ) +#ИначеЕсли "#Параметр(16)" = "НастройкиПрав" #Тогда + И + ( + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ( + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ПО + НаследованиеНастроек.Объект = Т.#Параметр(17) + И НастройкиПрав.Объект = НаследованиеНастроек.Родитель + #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда + И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияЧтения + #Иначе + #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда + И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка + #Иначе + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + #КонецЕсли + И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения + #КонецЕсли + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ПО + СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь + И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь + ) + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. + ( + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ + ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ПО + НаследованиеНастроек.Объект = Т.#Параметр(17) + И НастройкиПрав.Объект = НаследованиеНастроек.Родитель + #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда + И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияЧтения + #Иначе + #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда + И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка + #Иначе + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + #КонецЕсли + И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения + #КонецЕсли + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ПО + СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь + И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь + ) + ) +#ИначеЕсли Не СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(16),") #Тогда + // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. + #Если СтрСодержит("#Параметр(16)", ",") #Тогда + НеверныйВидДоступа: "#Параметр(16)" - "Список имен видов доступа не найден" + #Иначе + НеверныйВидДоступа: "#Параметр(16)" - "Имя вида доступа не найдено" + #КонецЕсли +#ИначеЕсли &ВидыДоступаСОтключеннымИспользованием <> "Все" + И Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(16),") #Тогда + И + ( + ЕСТЬNULL(Т.#Параметр(17), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО + И + #Если (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(16),", ",Пользователи,")) + Или (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(16),", ",ВнешниеПользователи,")) #Тогда + НЕ + ( + НЕ ИСТИНА В + ( + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа + ГДЕ + ГруппыЗначенийДоступа.ЗначениеДоступа = Т.#Параметр(17) + И ГруппыЗначенийДоступа.ГруппаЗначенийДоступа = &АвторизованныйПользователь + ) + И НЕ + #Иначе + ( + #КонецЕсли + ВЫБОР + КОГДА ИСТИНА В + ( + #Если СтрСодержит(&ВидыДоступаБезГруппДляЗначенияДоступа, ",#Параметр(16),") #Тогда + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения + ГДЕ + Значения.ГруппаДоступа = ГруппыДоступа.Ссылка + И Значения.ЗначениеДоступа = Т.#Параметр(17) + #ИначеЕсли "Т.#Параметр(17)" = "Т.Ссылка" #Тогда + #Если СтрСодержит("#Параметр(16)", ",") #Тогда + // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. + НеверныйВидДоступа: "#Параметр(16)" - "При проверке таблицы значения доступа можно указывать только один вид доступа" + #ИначеЕсли СтрСодержит(&ВидыДоступаСОднойГруппойДляЗначенияДоступа, ",#Параметр(16),") #Тогда + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения + ГДЕ + Значения.ГруппаДоступа = ГруппыДоступа.Ссылка + И Значения.ЗначениеДоступа = Т.ГруппаДоступа + #Иначе // Значения доступа, для которых можно указать несколько групп значений доступа. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения + ВНУТРЕННЕЕ СОЕДИНЕНИЕ #Параметр(1).ГруппыДоступа КАК ГруппыЗначений + ПО + Значения.ГруппаДоступа = ГруппыДоступа.Ссылка + И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа + И ГруппыЗначений.Ссылка = Т.#Параметр(17) + #КонецЕсли + #Иначе + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + ПО + Значения.ГруппаДоступа = ГруппыДоступа.Ссылка + И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа + И ГруппыЗначений.ЗначениеДоступа = Т.#Параметр(17) + #КонецЕсли + ) + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ + = + ВЫБОР + КОГДА ИСТИНА В + ( + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию + ГДЕ + ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(Т.#Параметр(17)) + И ЗначенияПоУмолчанию.ВсеРазрешены = ЛОЖЬ + ) + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ + ) + ) +#КонецЕсли + +//// Проверка значения поля группы параметров 8. +#Если "#Параметр(18)" = "" И "#Параметр(19)" = "" #Тогда + // Группа параметров не используется. +#ИначеЕсли "#Параметр(18)" = "Условие" Или "#Параметр(18)" = "" #Тогда + // Когда имя вида доступа "Условие" (или ""), тогда вместо имени поля задано условие. + И ( #Параметр(19) ) +#ИначеЕсли "#Параметр(18)" = "ПравоЧтения" Или "#Параметр(18)" = "ПравоИзменения" #Тогда + И Т.#Параметр(19) <> НЕОПРЕДЕЛЕНО + И ИСТИНА В + ( // Проверка права пользователя на таблицу Значения, установленного в поле. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава + ГДЕ + ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка + И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТИПЗНАЧЕНИЯ(Т.#Параметр(19)) + #Если Не "#Параметр(18)" = "ПравоЧтения" #Тогда + И ТаблицыГруппДоступаПроверкаПрава.Изменение + #КонецЕсли + ) +#ИначеЕсли "#Параметр(18)" = "НастройкиПрав" #Тогда + И + ( + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ( + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ПО + НаследованиеНастроек.Объект = Т.#Параметр(19) + И НастройкиПрав.Объект = НаследованиеНастроек.Родитель + #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда + И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияЧтения + #Иначе + #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда + И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка + #Иначе + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + #КонецЕсли + И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения + #КонецЕсли + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ПО + СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь + И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь + ) + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. + ( + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ + ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ПО + НаследованиеНастроек.Объект = Т.#Параметр(19) + И НастройкиПрав.Объект = НаследованиеНастроек.Родитель + #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда + И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияЧтения + #Иначе + #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда + И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка + #Иначе + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + #КонецЕсли + И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения + #КонецЕсли + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ПО + СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь + И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь + ) + ) +#ИначеЕсли Не СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(18),") #Тогда + // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. + #Если СтрСодержит("#Параметр(18)", ",") #Тогда + НеверныйВидДоступа: "#Параметр(18)" - "Список имен видов доступа не найден" + #Иначе + НеверныйВидДоступа: "#Параметр(18)" - "Имя вида доступа не найдено" + #КонецЕсли +#ИначеЕсли &ВидыДоступаСОтключеннымИспользованием <> "Все" + И Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(18),") #Тогда + И + ( + ЕСТЬNULL(Т.#Параметр(19), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО + И + #Если (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(18),", ",Пользователи,")) + Или (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(18),", ",ВнешниеПользователи,")) #Тогда + НЕ + ( + НЕ ИСТИНА В + ( + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа + ГДЕ + ГруппыЗначенийДоступа.ЗначениеДоступа = Т.#Параметр(19) + И ГруппыЗначенийДоступа.ГруппаЗначенийДоступа = &АвторизованныйПользователь + ) + И НЕ + #Иначе + ( + #КонецЕсли + ВЫБОР + КОГДА ИСТИНА В + ( + #Если СтрСодержит(&ВидыДоступаБезГруппДляЗначенияДоступа, ",#Параметр(18),") #Тогда + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения + ГДЕ + Значения.ГруппаДоступа = ГруппыДоступа.Ссылка + И Значения.ЗначениеДоступа = Т.#Параметр(19) + #ИначеЕсли "Т.#Параметр(19)" = "Т.Ссылка" #Тогда + #Если СтрСодержит("#Параметр(18)", ",") #Тогда + // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. + НеверныйВидДоступа: "#Параметр(18)" - "При проверке таблицы значения доступа можно указывать только один вид доступа" + #ИначеЕсли СтрСодержит(&ВидыДоступаСОднойГруппойДляЗначенияДоступа, ",#Параметр(18),") #Тогда + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения + ГДЕ + Значения.ГруппаДоступа = ГруппыДоступа.Ссылка + И Значения.ЗначениеДоступа = Т.ГруппаДоступа + #Иначе // Значения доступа, для которых можно указать несколько групп значений доступа. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения + ВНУТРЕННЕЕ СОЕДИНЕНИЕ #Параметр(1).ГруппыДоступа КАК ГруппыЗначений + ПО + Значения.ГруппаДоступа = ГруппыДоступа.Ссылка + И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа + И ГруппыЗначений.Ссылка = Т.#Параметр(19) + #КонецЕсли + #Иначе + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + ПО + Значения.ГруппаДоступа = ГруппыДоступа.Ссылка + И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа + И ГруппыЗначений.ЗначениеДоступа = Т.#Параметр(19) + #КонецЕсли + ) + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ + = + ВЫБОР + КОГДА ИСТИНА В + ( + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию + ГДЕ + ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(Т.#Параметр(19)) + И ЗначенияПоУмолчанию.ВсеРазрешены = ЛОЖЬ + ) + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ + ) + ) +#КонецЕсли + +//// Проверка значения поля группы параметров 9. +#Если "#Параметр(20)" = "" И "#Параметр(21)" = "" #Тогда + // Группа параметров не используется. +#ИначеЕсли "#Параметр(20)" = "Условие" Или "#Параметр(20)" = "" #Тогда + // Когда имя вида доступа "Условие" (или ""), тогда вместо имени поля задано условие. + И ( #Параметр(21) ) +#ИначеЕсли "#Параметр(20)" = "ПравоЧтения" Или "#Параметр(20)" = "ПравоИзменения" #Тогда + И Т.#Параметр(21) <> НЕОПРЕДЕЛЕНО + И ИСТИНА В + ( // Проверка права пользователя на таблицу Значения, установленного в поле. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава + ГДЕ + ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка + И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТИПЗНАЧЕНИЯ(Т.#Параметр(21)) + #Если Не "#Параметр(20)" = "ПравоЧтения" #Тогда + И ТаблицыГруппДоступаПроверкаПрава.Изменение + #КонецЕсли + ) +#ИначеЕсли "#Параметр(20)" = "НастройкиПрав" #Тогда + И + ( + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ( + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ПО + НаследованиеНастроек.Объект = Т.#Параметр(21) + И НастройкиПрав.Объект = НаследованиеНастроек.Родитель + #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда + И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияЧтения + #Иначе + #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда + И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка + #Иначе + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + #КонецЕсли + И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения + #КонецЕсли + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ПО + СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь + И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь + ) + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. + ( + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ + ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ПО + НаследованиеНастроек.Объект = Т.#Параметр(21) + И НастройкиПрав.Объект = НаследованиеНастроек.Родитель + #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда + И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияЧтения + #Иначе + #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда + И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка + #Иначе + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + #КонецЕсли + И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения + #КонецЕсли + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ПО + СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь + И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь + ) + ) +#ИначеЕсли Не СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(20),") #Тогда + // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. + #Если СтрСодержит("#Параметр(20)", ",") #Тогда + НеверныйВидДоступа: "#Параметр(20)" - "Список имен видов доступа не найден" + #Иначе + НеверныйВидДоступа: "#Параметр(20)" - "Имя вида доступа не найдено" + #КонецЕсли +#ИначеЕсли &ВидыДоступаСОтключеннымИспользованием <> "Все" + И Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(20),") #Тогда + И + ( + ЕСТЬNULL(Т.#Параметр(21), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО + И + #Если (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(20),", ",Пользователи,")) + Или (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(20),", ",ВнешниеПользователи,")) #Тогда + НЕ + ( + НЕ ИСТИНА В + ( + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа + ГДЕ + ГруппыЗначенийДоступа.ЗначениеДоступа = Т.#Параметр(21) + И ГруппыЗначенийДоступа.ГруппаЗначенийДоступа = &АвторизованныйПользователь + ) + И НЕ + #Иначе + ( + #КонецЕсли + ВЫБОР + КОГДА ИСТИНА В + ( + #Если СтрСодержит(&ВидыДоступаБезГруппДляЗначенияДоступа, ",#Параметр(20),") #Тогда + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения + ГДЕ + Значения.ГруппаДоступа = ГруппыДоступа.Ссылка + И Значения.ЗначениеДоступа = Т.#Параметр(21) + #ИначеЕсли "Т.#Параметр(21)" = "Т.Ссылка" #Тогда + #Если СтрСодержит("#Параметр(20)", ",") #Тогда + // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. + НеверныйВидДоступа: "#Параметр(20)" - "При проверке таблицы значения доступа можно указывать только один вид доступа" + #ИначеЕсли СтрСодержит(&ВидыДоступаСОднойГруппойДляЗначенияДоступа, ",#Параметр(20),") #Тогда + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения + ГДЕ + Значения.ГруппаДоступа = ГруппыДоступа.Ссылка + И Значения.ЗначениеДоступа = Т.ГруппаДоступа + #Иначе // Значения доступа, для которых можно указать несколько групп значений доступа. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения + ВНУТРЕННЕЕ СОЕДИНЕНИЕ #Параметр(1).ГруппыДоступа КАК ГруппыЗначений + ПО + Значения.ГруппаДоступа = ГруппыДоступа.Ссылка + И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа + И ГруппыЗначений.Ссылка = Т.#Параметр(21) + #КонецЕсли + #Иначе + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + ПО + Значения.ГруппаДоступа = ГруппыДоступа.Ссылка + И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа + И ГруппыЗначений.ЗначениеДоступа = Т.#Параметр(21) + #КонецЕсли + ) + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ + = + ВЫБОР + КОГДА ИСТИНА В + ( + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию + ГДЕ + ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(Т.#Параметр(21)) + И ЗначенияПоУмолчанию.ВсеРазрешены = ЛОЖЬ + ) + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ + ) + ) +#КонецЕсли + +//// Проверка значения поля группы параметров 10. +#Если "#Параметр(22)" = "" И "#Параметр(23)" = "" #Тогда + // Группа параметров не используется. +#ИначеЕсли "#Параметр(22)" = "Условие" Или "#Параметр(22)" = "" #Тогда + // Когда имя вида доступа "Условие" (или ""), тогда вместо имени поля задано условие. + И ( #Параметр(23) ) +#ИначеЕсли "#Параметр(22)" = "ПравоЧтения" Или "#Параметр(22)" = "ПравоИзменения" #Тогда + И Т.#Параметр(23) <> НЕОПРЕДЕЛЕНО + И ИСТИНА В + ( // Проверка права пользователя на таблицу Значения, установленного в поле. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава + ГДЕ + ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка + И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТИПЗНАЧЕНИЯ(Т.#Параметр(23)) + #Если Не "#Параметр(22)" = "ПравоЧтения" #Тогда + И ТаблицыГруппДоступаПроверкаПрава.Изменение + #КонецЕсли + ) +#ИначеЕсли "#Параметр(22)" = "НастройкиПрав" #Тогда + И + ( + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ( + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ПО + НаследованиеНастроек.Объект = Т.#Параметр(23) + И НастройкиПрав.Объект = НаследованиеНастроек.Родитель + #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда + И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияЧтения + #Иначе + #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда + И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка + #Иначе + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + #КонецЕсли + И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения + #КонецЕсли + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ПО + СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь + И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь + ) + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. + ( + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ + ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ПО + НаследованиеНастроек.Объект = Т.#Параметр(23) + И НастройкиПрав.Объект = НаследованиеНастроек.Родитель + #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда + И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияЧтения + #Иначе + #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда + И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка + #Иначе + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + #КонецЕсли + И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения + #КонецЕсли + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ПО + СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь + И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь + ) + ) +#ИначеЕсли Не СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(22),") #Тогда + // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. + #Если СтрСодержит("#Параметр(22)", ",") #Тогда + НеверныйВидДоступа: "#Параметр(22)" - "Список имен видов доступа не найден" + #Иначе + НеверныйВидДоступа: "#Параметр(22)" - "Имя вида доступа не найдено" + #КонецЕсли +#ИначеЕсли &ВидыДоступаСОтключеннымИспользованием <> "Все" + И Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(22),") #Тогда + И + ( + ЕСТЬNULL(Т.#Параметр(23), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО + И + #Если (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(22),", ",Пользователи,")) + Или (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(22),", ",ВнешниеПользователи,")) #Тогда + НЕ + ( + НЕ ИСТИНА В + ( + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа + ГДЕ + ГруппыЗначенийДоступа.ЗначениеДоступа = Т.#Параметр(23) + И ГруппыЗначенийДоступа.ГруппаЗначенийДоступа = &АвторизованныйПользователь + ) + И НЕ + #Иначе + ( + #КонецЕсли + ВЫБОР + КОГДА ИСТИНА В + ( + #Если СтрСодержит(&ВидыДоступаБезГруппДляЗначенияДоступа, ",#Параметр(22),") #Тогда + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения + ГДЕ + Значения.ГруппаДоступа = ГруппыДоступа.Ссылка + И Значения.ЗначениеДоступа = Т.#Параметр(23) + #ИначеЕсли "Т.#Параметр(23)" = "Т.Ссылка" #Тогда + #Если СтрСодержит("#Параметр(22)", ",") #Тогда + // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. + НеверныйВидДоступа: "#Параметр(22)" - "При проверке таблицы значения доступа можно указывать только один вид доступа" + #ИначеЕсли СтрСодержит(&ВидыДоступаСОднойГруппойДляЗначенияДоступа, ",#Параметр(22),") #Тогда + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения + ГДЕ + Значения.ГруппаДоступа = ГруппыДоступа.Ссылка + И Значения.ЗначениеДоступа = Т.ГруппаДоступа + #Иначе // Значения доступа, для которых можно указать несколько групп значений доступа. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения + ВНУТРЕННЕЕ СОЕДИНЕНИЕ #Параметр(1).ГруппыДоступа КАК ГруппыЗначений + ПО + Значения.ГруппаДоступа = ГруппыДоступа.Ссылка + И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа + И ГруппыЗначений.Ссылка = Т.#Параметр(23) + #КонецЕсли + #Иначе + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + ПО + Значения.ГруппаДоступа = ГруппыДоступа.Ссылка + И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа + И ГруппыЗначений.ЗначениеДоступа = Т.#Параметр(23) + #КонецЕсли + ) + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ + = + ВЫБОР + КОГДА ИСТИНА В + ( + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию + ГДЕ + ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(Т.#Параметр(23)) + И ЗначенияПоУмолчанию.ВсеРазрешены = ЛОЖЬ + ) + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ + ) + ) +#КонецЕсли + +//// Проверка значения поля группы параметров 11. +#Если "#Параметр(24)" = "" И "#Параметр(25)" = "" #Тогда + // Группа параметров не используется. +#ИначеЕсли "#Параметр(24)" = "Условие" Или "#Параметр(24)" = "" #Тогда + // Когда имя вида доступа "Условие" (или ""), тогда вместо имени поля задано условие. + И ( #Параметр(25) ) +#ИначеЕсли "#Параметр(24)" = "ПравоЧтения" Или "#Параметр(24)" = "ПравоИзменения" #Тогда + И Т.#Параметр(25) <> НЕОПРЕДЕЛЕНО + И ИСТИНА В + ( // Проверка права пользователя на таблицу Значения, установленного в поле. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава + ГДЕ + ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка + И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТИПЗНАЧЕНИЯ(Т.#Параметр(25)) + #Если Не "#Параметр(24)" = "ПравоЧтения" #Тогда + И ТаблицыГруппДоступаПроверкаПрава.Изменение + #КонецЕсли + ) +#ИначеЕсли "#Параметр(24)" = "НастройкиПрав" #Тогда + И + ( + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ( + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ПО + НаследованиеНастроек.Объект = Т.#Параметр(25) + И НастройкиПрав.Объект = НаследованиеНастроек.Родитель + #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда + И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияЧтения + #Иначе + #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда + И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка + #Иначе + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + #КонецЕсли + И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения + #КонецЕсли + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ПО + СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь + И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь + ) + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. + ( + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ + ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ПО + НаследованиеНастроек.Объект = Т.#Параметр(25) + И НастройкиПрав.Объект = НаследованиеНастроек.Родитель + #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда + И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияЧтения + #Иначе + #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда + И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка + #Иначе + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + #КонецЕсли + И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения + #КонецЕсли + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ПО + СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь + И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь + ) + ) +#ИначеЕсли Не СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(24),") #Тогда + // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. + #Если СтрСодержит("#Параметр(24)", ",") #Тогда + НеверныйВидДоступа: "#Параметр(24)" - "Список имен видов доступа не найден" + #Иначе + НеверныйВидДоступа: "#Параметр(24)" - "Имя вида доступа не найдено" + #КонецЕсли +#ИначеЕсли &ВидыДоступаСОтключеннымИспользованием <> "Все" + И Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(24),") #Тогда + И + ( + ЕСТЬNULL(Т.#Параметр(25), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО + И + #Если (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(24),", ",Пользователи,")) + Или (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(24),", ",ВнешниеПользователи,")) #Тогда + НЕ + ( + НЕ ИСТИНА В + ( + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа + ГДЕ + ГруппыЗначенийДоступа.ЗначениеДоступа = Т.#Параметр(25) + И ГруппыЗначенийДоступа.ГруппаЗначенийДоступа = &АвторизованныйПользователь + ) + И НЕ + #Иначе + ( + #КонецЕсли + ВЫБОР + КОГДА ИСТИНА В + ( + #Если СтрСодержит(&ВидыДоступаБезГруппДляЗначенияДоступа, ",#Параметр(24),") #Тогда + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения + ГДЕ + Значения.ГруппаДоступа = ГруппыДоступа.Ссылка + И Значения.ЗначениеДоступа = Т.#Параметр(25) + #ИначеЕсли "Т.#Параметр(25)" = "Т.Ссылка" #Тогда + #Если СтрСодержит("#Параметр(24)", ",") #Тогда + // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. + НеверныйВидДоступа: "#Параметр(24)" - "При проверке таблицы значения доступа можно указывать только один вид доступа" + #ИначеЕсли СтрСодержит(&ВидыДоступаСОднойГруппойДляЗначенияДоступа, ",#Параметр(24),") #Тогда + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения + ГДЕ + Значения.ГруппаДоступа = ГруппыДоступа.Ссылка + И Значения.ЗначениеДоступа = Т.ГруппаДоступа + #Иначе // Значения доступа, для которых можно указать несколько групп значений доступа. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения + ВНУТРЕННЕЕ СОЕДИНЕНИЕ #Параметр(1).ГруппыДоступа КАК ГруппыЗначений + ПО + Значения.ГруппаДоступа = ГруппыДоступа.Ссылка + И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа + И ГруппыЗначений.Ссылка = Т.#Параметр(25) + #КонецЕсли + #Иначе + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + ПО + Значения.ГруппаДоступа = ГруппыДоступа.Ссылка + И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа + И ГруппыЗначений.ЗначениеДоступа = Т.#Параметр(25) + #КонецЕсли + ) + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ + = + ВЫБОР + КОГДА ИСТИНА В + ( + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию + ГДЕ + ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(Т.#Параметр(25)) + И ЗначенияПоУмолчанию.ВсеРазрешены = ЛОЖЬ + ) + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ + ) + ) +#КонецЕсли + +//// Проверка значения поля группы параметров 12. +#Если "#Параметр(26)" = "" И "#Параметр(27)" = "" #Тогда + // Группа параметров не используется. +#ИначеЕсли "#Параметр(26)" = "Условие" Или "#Параметр(26)" = "" #Тогда + // Когда имя вида доступа "Условие" (или ""), тогда вместо имени поля задано условие. + И ( #Параметр(27) ) +#ИначеЕсли "#Параметр(26)" = "ПравоЧтения" Или "#Параметр(26)" = "ПравоИзменения" #Тогда + И Т.#Параметр(27) <> НЕОПРЕДЕЛЕНО + И ИСТИНА В + ( // Проверка права пользователя на таблицу Значения, установленного в поле. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава + ГДЕ + ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка + И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТИПЗНАЧЕНИЯ(Т.#Параметр(27)) + #Если Не "#Параметр(26)" = "ПравоЧтения" #Тогда + И ТаблицыГруппДоступаПроверкаПрава.Изменение + #КонецЕсли + ) +#ИначеЕсли "#Параметр(26)" = "НастройкиПрав" #Тогда + И + ( + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ( + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ПО + НаследованиеНастроек.Объект = Т.#Параметр(27) + И НастройкиПрав.Объект = НаследованиеНастроек.Родитель + #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда + И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияЧтения + #Иначе + #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда + И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка + #Иначе + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + #КонецЕсли + И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения + #КонецЕсли + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ПО + СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь + И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь + ) + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. + ( + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ + ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ПО + НаследованиеНастроек.Объект = Т.#Параметр(27) + И НастройкиПрав.Объект = НаследованиеНастроек.Родитель + #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда + И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияЧтения + #Иначе + #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда + И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка + #Иначе + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + #КонецЕсли + И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения + #КонецЕсли + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ПО + СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь + И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь + ) + ) +#ИначеЕсли Не СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(26),") #Тогда + // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. + #Если СтрСодержит("#Параметр(26)", ",") #Тогда + НеверныйВидДоступа: "#Параметр(26)" - "Список имен видов доступа не найден" + #Иначе + НеверныйВидДоступа: "#Параметр(26)" - "Имя вида доступа не найдено" + #КонецЕсли +#ИначеЕсли &ВидыДоступаСОтключеннымИспользованием <> "Все" + И Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(26),") #Тогда + И + ( + ЕСТЬNULL(Т.#Параметр(27), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО + И + #Если (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(26),", ",Пользователи,")) + Или (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(26),", ",ВнешниеПользователи,")) #Тогда + НЕ + ( + НЕ ИСТИНА В + ( + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа + ГДЕ + ГруппыЗначенийДоступа.ЗначениеДоступа = Т.#Параметр(27) + И ГруппыЗначенийДоступа.ГруппаЗначенийДоступа = &АвторизованныйПользователь + ) + И НЕ + #Иначе + ( + #КонецЕсли + ВЫБОР + КОГДА ИСТИНА В + ( + #Если СтрСодержит(&ВидыДоступаБезГруппДляЗначенияДоступа, ",#Параметр(26),") #Тогда + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения + ГДЕ + Значения.ГруппаДоступа = ГруппыДоступа.Ссылка + И Значения.ЗначениеДоступа = Т.#Параметр(27) + #ИначеЕсли "Т.#Параметр(27)" = "Т.Ссылка" #Тогда + #Если СтрСодержит("#Параметр(26)", ",") #Тогда + // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. + НеверныйВидДоступа: "#Параметр(26)" - "При проверке таблицы значения доступа можно указывать только один вид доступа" + #ИначеЕсли СтрСодержит(&ВидыДоступаСОднойГруппойДляЗначенияДоступа, ",#Параметр(26),") #Тогда + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения + ГДЕ + Значения.ГруппаДоступа = ГруппыДоступа.Ссылка + И Значения.ЗначениеДоступа = Т.ГруппаДоступа + #Иначе // Значения доступа, для которых можно указать несколько групп значений доступа. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения + ВНУТРЕННЕЕ СОЕДИНЕНИЕ #Параметр(1).ГруппыДоступа КАК ГруппыЗначений + ПО + Значения.ГруппаДоступа = ГруппыДоступа.Ссылка + И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа + И ГруппыЗначений.Ссылка = Т.#Параметр(27) + #КонецЕсли + #Иначе + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + ПО + Значения.ГруппаДоступа = ГруппыДоступа.Ссылка + И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа + И ГруппыЗначений.ЗначениеДоступа = Т.#Параметр(27) + #КонецЕсли + ) + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ + = + ВЫБОР + КОГДА ИСТИНА В + ( + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию + ГДЕ + ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(Т.#Параметр(27)) + И ЗначенияПоУмолчанию.ВсеРазрешены = ЛОЖЬ + ) + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ + ) + ) +#КонецЕсли + +//// Проверка значения поля группы параметров 13. +#Если "#Параметр(28)" = "" И "#Параметр(29)" = "" #Тогда + // Группа параметров не используется. +#ИначеЕсли "#Параметр(28)" = "Условие" Или "#Параметр(28)" = "" #Тогда + // Когда имя вида доступа "Условие" (или ""), тогда вместо имени поля задано условие. + И ( #Параметр(29) ) +#ИначеЕсли "#Параметр(28)" = "ПравоЧтения" Или "#Параметр(28)" = "ПравоИзменения" #Тогда + И Т.#Параметр(29) <> НЕОПРЕДЕЛЕНО + И ИСТИНА В + ( // Проверка права пользователя на таблицу Значения, установленного в поле. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава + ГДЕ + ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка + И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТИПЗНАЧЕНИЯ(Т.#Параметр(29)) + #Если Не "#Параметр(28)" = "ПравоЧтения" #Тогда + И ТаблицыГруппДоступаПроверкаПрава.Изменение + #КонецЕсли + ) +#ИначеЕсли "#Параметр(28)" = "НастройкиПрав" #Тогда + И + ( + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ( + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ПО + НаследованиеНастроек.Объект = Т.#Параметр(29) + И НастройкиПрав.Объект = НаследованиеНастроек.Родитель + #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда + И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияЧтения + #Иначе + #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда + И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка + #Иначе + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + #КонецЕсли + И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения + #КонецЕсли + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ПО + СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь + И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь + ) + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. + ( + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ + ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ПО + НаследованиеНастроек.Объект = Т.#Параметр(29) + И НастройкиПрав.Объект = НаследованиеНастроек.Родитель + #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда + И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияЧтения + #Иначе + #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда + И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка + #Иначе + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + #КонецЕсли + И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения + #КонецЕсли + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ПО + СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь + И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь + ) + ) +#ИначеЕсли Не СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(28),") #Тогда + // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. + #Если СтрСодержит("#Параметр(28)", ",") #Тогда + НеверныйВидДоступа: "#Параметр(28)" - "Список имен видов доступа не найден" + #Иначе + НеверныйВидДоступа: "#Параметр(28)" - "Имя вида доступа не найдено" + #КонецЕсли +#ИначеЕсли &ВидыДоступаСОтключеннымИспользованием <> "Все" + И Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(28),") #Тогда + И + ( + ЕСТЬNULL(Т.#Параметр(29), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО + И + #Если (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(28),", ",Пользователи,")) + Или (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(28),", ",ВнешниеПользователи,")) #Тогда + НЕ + ( + НЕ ИСТИНА В + ( + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа + ГДЕ + ГруппыЗначенийДоступа.ЗначениеДоступа = Т.#Параметр(29) + И ГруппыЗначенийДоступа.ГруппаЗначенийДоступа = &АвторизованныйПользователь + ) + И НЕ + #Иначе + ( + #КонецЕсли + ВЫБОР + КОГДА ИСТИНА В + ( + #Если СтрСодержит(&ВидыДоступаБезГруппДляЗначенияДоступа, ",#Параметр(28),") #Тогда + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения + ГДЕ + Значения.ГруппаДоступа = ГруппыДоступа.Ссылка + И Значения.ЗначениеДоступа = Т.#Параметр(29) + #ИначеЕсли "Т.#Параметр(29)" = "Т.Ссылка" #Тогда + #Если СтрСодержит("#Параметр(28)", ",") #Тогда + // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. + НеверныйВидДоступа: "#Параметр(28)" - "При проверке таблицы значения доступа можно указывать только один вид доступа" + #ИначеЕсли СтрСодержит(&ВидыДоступаСОднойГруппойДляЗначенияДоступа, ",#Параметр(28),") #Тогда + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения + ГДЕ + Значения.ГруппаДоступа = ГруппыДоступа.Ссылка + И Значения.ЗначениеДоступа = Т.ГруппаДоступа + #Иначе // Значения доступа, для которых можно указать несколько групп значений доступа. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения + ВНУТРЕННЕЕ СОЕДИНЕНИЕ #Параметр(1).ГруппыДоступа КАК ГруппыЗначений + ПО + Значения.ГруппаДоступа = ГруппыДоступа.Ссылка + И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа + И ГруппыЗначений.Ссылка = Т.#Параметр(29) + #КонецЕсли + #Иначе + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + ПО + Значения.ГруппаДоступа = ГруппыДоступа.Ссылка + И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа + И ГруппыЗначений.ЗначениеДоступа = Т.#Параметр(29) + #КонецЕсли + ) + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ + = + ВЫБОР + КОГДА ИСТИНА В + ( + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию + ГДЕ + ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(Т.#Параметр(29)) + И ЗначенияПоУмолчанию.ВсеРазрешены = ЛОЖЬ + ) + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ + ) + ) +#КонецЕсли + +//// Проверка значения поля группы параметров 14. +#Если "#Параметр(30)" = "" И "#Параметр(31)" = "" #Тогда + // Группа параметров не используется. +#ИначеЕсли "#Параметр(30)" = "Условие" Или "#Параметр(30)" = "" #Тогда + // Когда имя вида доступа "Условие" (или ""), тогда вместо имени поля задано условие. + И ( #Параметр(31) ) +#ИначеЕсли "#Параметр(30)" = "ПравоЧтения" Или "#Параметр(30)" = "ПравоИзменения" #Тогда + И Т.#Параметр(31) <> НЕОПРЕДЕЛЕНО + И ИСТИНА В + ( // Проверка права пользователя на таблицу Значения, установленного в поле. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава + ГДЕ + ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка + И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТИПЗНАЧЕНИЯ(Т.#Параметр(31)) + #Если Не "#Параметр(30)" = "ПравоЧтения" #Тогда + И ТаблицыГруппДоступаПроверкаПрава.Изменение + #КонецЕсли + ) +#ИначеЕсли "#Параметр(30)" = "НастройкиПрав" #Тогда + И + ( + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ( + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ПО + НаследованиеНастроек.Объект = Т.#Параметр(31) + И НастройкиПрав.Объект = НаследованиеНастроек.Родитель + #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда + И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияЧтения + #Иначе + #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда + И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка + #Иначе + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + #КонецЕсли + И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения + #КонецЕсли + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ПО + СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь + И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь + ) + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. + ( + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ + ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ПО + НаследованиеНастроек.Объект = Т.#Параметр(31) + И НастройкиПрав.Объект = НаследованиеНастроек.Родитель + #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда + И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияЧтения + #Иначе + #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда + И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка + #Иначе + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + #КонецЕсли + И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения + #КонецЕсли + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ПО + СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь + И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь + ) + ) +#ИначеЕсли Не СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(30),") #Тогда + // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. + #Если СтрСодержит("#Параметр(30)", ",") #Тогда + НеверныйВидДоступа: "#Параметр(30)" - "Список имен видов доступа не найден" + #Иначе + НеверныйВидДоступа: "#Параметр(30)" - "Имя вида доступа не найдено" + #КонецЕсли +#ИначеЕсли &ВидыДоступаСОтключеннымИспользованием <> "Все" + И Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(30),") #Тогда + И + ( + ЕСТЬNULL(Т.#Параметр(31), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО + И + #Если (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(30),", ",Пользователи,")) + Или (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(30),", ",ВнешниеПользователи,")) #Тогда + НЕ + ( + НЕ ИСТИНА В + ( + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа + ГДЕ + ГруппыЗначенийДоступа.ЗначениеДоступа = Т.#Параметр(31) + И ГруппыЗначенийДоступа.ГруппаЗначенийДоступа = &АвторизованныйПользователь + ) + И НЕ + #Иначе + ( + #КонецЕсли + ВЫБОР + КОГДА ИСТИНА В + ( + #Если СтрСодержит(&ВидыДоступаБезГруппДляЗначенияДоступа, ",#Параметр(30),") #Тогда + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения + ГДЕ + Значения.ГруппаДоступа = ГруппыДоступа.Ссылка + И Значения.ЗначениеДоступа = Т.#Параметр(31) + #ИначеЕсли "Т.#Параметр(31)" = "Т.Ссылка" #Тогда + #Если СтрСодержит("#Параметр(30)", ",") #Тогда + // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. + НеверныйВидДоступа: "#Параметр(30)" - "При проверке таблицы значения доступа можно указывать только один вид доступа" + #ИначеЕсли СтрСодержит(&ВидыДоступаСОднойГруппойДляЗначенияДоступа, ",#Параметр(30),") #Тогда + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения + ГДЕ + Значения.ГруппаДоступа = ГруппыДоступа.Ссылка + И Значения.ЗначениеДоступа = Т.ГруппаДоступа + #Иначе // Значения доступа, для которых можно указать несколько групп значений доступа. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения + ВНУТРЕННЕЕ СОЕДИНЕНИЕ #Параметр(1).ГруппыДоступа КАК ГруппыЗначений + ПО + Значения.ГруппаДоступа = ГруппыДоступа.Ссылка + И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа + И ГруппыЗначений.Ссылка = Т.#Параметр(31) + #КонецЕсли + #Иначе + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + ПО + Значения.ГруппаДоступа = ГруппыДоступа.Ссылка + И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа + И ГруппыЗначений.ЗначениеДоступа = Т.#Параметр(31) + #КонецЕсли + ) + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ + = + ВЫБОР + КОГДА ИСТИНА В + ( + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию + ГДЕ + ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(Т.#Параметр(31)) + И ЗначенияПоУмолчанию.ВсеРазрешены = ЛОЖЬ + ) + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ + ) + ) +#КонецЕсли + +//// Проверка значения поля группы параметров 15. +#Если "#Параметр(32)" = "" И "#Параметр(33)" = "" #Тогда + // Группа параметров не используется. +#ИначеЕсли "#Параметр(32)" = "Условие" Или "#Параметр(32)" = "" #Тогда + // Когда имя вида доступа "Условие" (или ""), тогда вместо имени поля задано условие. + И ( #Параметр(33) ) +#ИначеЕсли "#Параметр(32)" = "ПравоЧтения" Или "#Параметр(32)" = "ПравоИзменения" #Тогда + И Т.#Параметр(33) <> НЕОПРЕДЕЛЕНО + И ИСТИНА В + ( // Проверка права пользователя на таблицу Значения, установленного в поле. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава + ГДЕ + ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка + И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТИПЗНАЧЕНИЯ(Т.#Параметр(33)) + #Если Не "#Параметр(32)" = "ПравоЧтения" #Тогда + И ТаблицыГруппДоступаПроверкаПрава.Изменение + #КонецЕсли + ) +#ИначеЕсли "#Параметр(32)" = "НастройкиПрав" #Тогда + И + ( + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ( + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ПО + НаследованиеНастроек.Объект = Т.#Параметр(33) + И НастройкиПрав.Объект = НаследованиеНастроек.Родитель + #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда + И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияЧтения + #Иначе + #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда + И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка + #Иначе + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + #КонецЕсли + И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения + #КонецЕсли + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ПО + СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь + И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь + ) + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. + ( + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ + ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ПО + НаследованиеНастроек.Объект = Т.#Параметр(33) + И НастройкиПрав.Объект = НаследованиеНастроек.Родитель + #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда + И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияЧтения + #Иначе + #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда + И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка + #Иначе + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + #КонецЕсли + И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения + #КонецЕсли + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ПО + СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь + И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь + ) + ) +#ИначеЕсли Не СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(32),") #Тогда + // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. + #Если СтрСодержит("#Параметр(32)", ",") #Тогда + НеверныйВидДоступа: "#Параметр(32)" - "Список имен видов доступа не найден" + #Иначе + НеверныйВидДоступа: "#Параметр(32)" - "Имя вида доступа не найдено" + #КонецЕсли +#ИначеЕсли &ВидыДоступаСОтключеннымИспользованием <> "Все" + И Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(32),") #Тогда + И + ( + ЕСТЬNULL(Т.#Параметр(33), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО + И + #Если (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(32),", ",Пользователи,")) + Или (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(32),", ",ВнешниеПользователи,")) #Тогда + НЕ + ( + НЕ ИСТИНА В + ( + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа + ГДЕ + ГруппыЗначенийДоступа.ЗначениеДоступа = Т.#Параметр(33) + И ГруппыЗначенийДоступа.ГруппаЗначенийДоступа = &АвторизованныйПользователь + ) + И НЕ + #Иначе + ( + #КонецЕсли + ВЫБОР + КОГДА ИСТИНА В + ( + #Если СтрСодержит(&ВидыДоступаБезГруппДляЗначенияДоступа, ",#Параметр(32),") #Тогда + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения + ГДЕ + Значения.ГруппаДоступа = ГруппыДоступа.Ссылка + И Значения.ЗначениеДоступа = Т.#Параметр(33) + #ИначеЕсли "Т.#Параметр(33)" = "Т.Ссылка" #Тогда + #Если СтрСодержит("#Параметр(32)", ",") #Тогда + // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. + НеверныйВидДоступа: "#Параметр(32)" - "При проверке таблицы значения доступа можно указывать только один вид доступа" + #ИначеЕсли СтрСодержит(&ВидыДоступаСОднойГруппойДляЗначенияДоступа, ",#Параметр(32),") #Тогда + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения + ГДЕ + Значения.ГруппаДоступа = ГруппыДоступа.Ссылка + И Значения.ЗначениеДоступа = Т.ГруппаДоступа + #Иначе // Значения доступа, для которых можно указать несколько групп значений доступа. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения + ВНУТРЕННЕЕ СОЕДИНЕНИЕ #Параметр(1).ГруппыДоступа КАК ГруппыЗначений + ПО + Значения.ГруппаДоступа = ГруппыДоступа.Ссылка + И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа + И ГруппыЗначений.Ссылка = Т.#Параметр(33) + #КонецЕсли + #Иначе + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + ПО + Значения.ГруппаДоступа = ГруппыДоступа.Ссылка + И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа + И ГруппыЗначений.ЗначениеДоступа = Т.#Параметр(33) + #КонецЕсли + ) + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ + = + ВЫБОР + КОГДА ИСТИНА В + ( + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию + ГДЕ + ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(Т.#Параметр(33)) + И ЗначенияПоУмолчанию.ВсеРазрешены = ЛОЖЬ + ) + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ + ) + ) +#КонецЕсли + +//// Проверка значения поля группы параметров 16. +#Если "#Параметр(34)" = "" И "#Параметр(35)" = "" #Тогда + // Группа параметров не используется. +#ИначеЕсли "#Параметр(34)" = "Условие" Или "#Параметр(34)" = "" #Тогда + // Когда имя вида доступа "Условие" (или ""), тогда вместо имени поля задано условие. + И ( #Параметр(35) ) +#ИначеЕсли "#Параметр(34)" = "ПравоЧтения" Или "#Параметр(34)" = "ПравоИзменения" #Тогда + И Т.#Параметр(35) <> НЕОПРЕДЕЛЕНО + И ИСТИНА В + ( // Проверка права пользователя на таблицу Значения, установленного в поле. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава + ГДЕ + ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка + И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТИПЗНАЧЕНИЯ(Т.#Параметр(35)) + #Если Не "#Параметр(34)" = "ПравоЧтения" #Тогда + И ТаблицыГруппДоступаПроверкаПрава.Изменение + #КонецЕсли + ) +#ИначеЕсли "#Параметр(34)" = "НастройкиПрав" #Тогда + И + ( + ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ( + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ПО + НаследованиеНастроек.Объект = Т.#Параметр(35) + И НастройкиПрав.Объект = НаследованиеНастроек.Родитель + #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда + И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияЧтения + #Иначе + #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда + И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка + #Иначе + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + #КонецЕсли + И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения + #КонецЕсли + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ПО + СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь + И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь + ) + И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. + ( + ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ + ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек + ПО + НаследованиеНастроек.Объект = Т.#Параметр(35) + И НастройкиПрав.Объект = НаследованиеНастроек.Родитель + #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда + И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияЧтения + #Иначе + #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда + И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка + #Иначе + И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + #КонецЕсли + И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения + #КонецЕсли + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ПО + СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь + И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь + ) + ) +#ИначеЕсли Не СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(34),") #Тогда + // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. + #Если СтрСодержит("#Параметр(34)", ",") #Тогда + НеверныйВидДоступа: "#Параметр(34)" - "Список имен видов доступа не найден" + #Иначе + НеверныйВидДоступа: "#Параметр(34)" - "Имя вида доступа не найдено" + #КонецЕсли +#ИначеЕсли &ВидыДоступаСОтключеннымИспользованием <> "Все" + И Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(34),") #Тогда + И + ( + ЕСТЬNULL(Т.#Параметр(35), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО + И + #Если (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(34),", ",Пользователи,")) + Или (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(34),", ",ВнешниеПользователи,")) #Тогда + НЕ + ( + НЕ ИСТИНА В + ( + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа + ГДЕ + ГруппыЗначенийДоступа.ЗначениеДоступа = Т.#Параметр(35) + И ГруппыЗначенийДоступа.ГруппаЗначенийДоступа = &АвторизованныйПользователь + ) + И НЕ + #Иначе + ( + #КонецЕсли + ВЫБОР + КОГДА ИСТИНА В + ( + #Если СтрСодержит(&ВидыДоступаБезГруппДляЗначенияДоступа, ",#Параметр(34),") #Тогда + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения + ГДЕ + Значения.ГруппаДоступа = ГруппыДоступа.Ссылка + И Значения.ЗначениеДоступа = Т.#Параметр(35) + #ИначеЕсли "Т.#Параметр(35)" = "Т.Ссылка" #Тогда + #Если СтрСодержит("#Параметр(34)", ",") #Тогда + // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. + НеверныйВидДоступа: "#Параметр(34)" - "При проверке таблицы значения доступа можно указывать только один вид доступа" + #ИначеЕсли СтрСодержит(&ВидыДоступаСОднойГруппойДляЗначенияДоступа, ",#Параметр(34),") #Тогда + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения + ГДЕ + Значения.ГруппаДоступа = ГруппыДоступа.Ссылка + И Значения.ЗначениеДоступа = Т.ГруппаДоступа + #Иначе // Значения доступа, для которых можно указать несколько групп значений доступа. + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения + ВНУТРЕННЕЕ СОЕДИНЕНИЕ #Параметр(1).ГруппыДоступа КАК ГруппыЗначений + ПО + Значения.ГруппаДоступа = ГруппыДоступа.Ссылка + И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа + И ГруппыЗначений.Ссылка = Т.#Параметр(35) + #КонецЕсли + #Иначе + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + ПО + Значения.ГруппаДоступа = ГруппыДоступа.Ссылка + И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа + И ГруппыЗначений.ЗначениеДоступа = Т.#Параметр(35) + #КонецЕсли + ) + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ + = + ВЫБОР + КОГДА ИСТИНА В + ( + ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА + ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию + ГДЕ + ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка + И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(Т.#Параметр(35)) + И ЗначенияПоУмолчанию.ВсеРазрешены = ЛОЖЬ + ) + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ + ) + ) +#КонецЕсли + + ) +) +#КонецЕсли + + + diff --git a/SSL/src/Roles/ИспользованиеДосьеКонтрагента/Rights.rights b/SSL/src/Roles/ИспользованиеДосьеКонтрагента/Rights.rights new file mode 100644 index 000000000..280b80fa1 --- /dev/null +++ b/SSL/src/Roles/ИспользованиеДосьеКонтрагента/Rights.rights @@ -0,0 +1,34040 @@ + + + false + true + false + + Catalog.ДополнительныеОтчетыИОбработки.TabularSection.Команды.Attribute.ПоказыватьОповещение + + View + false + + + Edit + false + + + + InformationRegister.ФайлыВРабочемКаталоге.Resource.НаЧтение + + View + false + + + Edit + false + + + + DataProcessor.ПомощникСозданияОбменаДанными.Attribute.КодПредопределенногоУзла + + View + false + + + Edit + false + + + + Catalog.НаборыДополнительныхРеквизитовИСведений.TabularSection.ДополнительныеСведения.Attribute.Свойство + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоВходящее.TabularSection.ПолучателиПисьма.Attribute.Контакт + + View + false + + + Edit + false + + + + InformationRegister.НастройкиУчетныхЗаписейЭлектроннойПочты.Resource.ФорматПодписиДляНовыхСообщений + + View + false + + + Edit + false + + + + InformationRegister.ПользовательскиеНастройкиДоступаКОбработкам.Dimension.Пользователь + + View + false + + + Edit + false + + + + InformationRegister.ИсторияАдресныхОбъектов.Resource.КодКЛАДР + + View + false + + + Edit + false + + + + Catalog.СообщениеSMSПрисоединенныеФайлы.Attribute.Том + + View + false + + + Edit + false + + + + Catalog.ЭлектронноеПисьмоВходящееПрисоединенныеФайлы.Attribute.Автор + + View + false + + + Edit + false + + + + InformationRegister.СведенияОПользователях.Dimension.Пользователь + + View + false + + + Edit + false + + + + InformationRegister.ОбластиСтатистики.Dimension.ИдентификаторОбласти + + View + false + + + Edit + false + + + + DataProcessor.НастройкаРезервногоКопированияИБ.Attribute.ВариантРасписанияРезервногоКопирования + + View + false + + + Edit + false + + + + Catalog.ГруппыДоступа.TabularSection.Пользователи + + View + false + + + Edit + false + + + + InformationRegister.НастройкиОтправителя.Dimension.КаналСообщений + + View + false + + + Edit + false + + + + InformationRegister.УдалитьНаборыЗначенийДоступа.StandardAttribute.Active + + View + false + + + Edit + false + + + + InformationRegister.УдалитьНаборыЗначенийДоступа.StandardAttribute.LineNumber + + View + false + + + Edit + false + + + + InformationRegister.УдалитьНаборыЗначенийДоступа.StandardAttribute.Recorder + + View + false + + + Edit + false + + + + InformationRegister.УдалитьНаборыЗначенийДоступа.StandardAttribute.Period + + View + false + + + Edit + false + + + + DataProcessor.ПомощникСозданияОбменаДанными.Attribute.COMПарольПользователя + + View + false + + + Edit + false + + + + Catalog.ВерсииФайлов.TabularSection.ЭлектронныеПодписи.Attribute.ИмяФайлаПодписи + + View + false + + + Edit + false + + + + DataProcessor.КонвертацияОбъектовXDTO.Attribute.КомментарийПриЗагрузкеДанных + + View + false + + + Edit + false + + + + DataProcessor.ПомощникИнтерактивногоОбменаДанными.TabularSection.ИнформацияСтатистики.Attribute.ДанныеУспешноЗагружены + + View + false + + + Edit + false + + + + Catalog.ШаблоныЗаданийОчереди.Attribute.ИнтервалПовтораПриАварийномЗавершении + + View + false + + + Edit + false + + + + DataProcessor.СопоставлениеОбъектовИнформационныхБаз.TabularSection.ТаблицаАвтоматическиСопоставленныхОбъектов.Attribute.ПриемникИндексКартинки + + View + false + + + Edit + false + + + + InformationRegister.СостоянияПапокПисем.Dimension.Папка + + View + false + + + Edit + false + + + + Task.ЗадачаИсполнителя.Attribute.РезультатВыполнения + + View + false + + + Edit + false + + + + Catalog.ТелефонныйЗвонокПрисоединенныеФайлы.Attribute.Редактирует + + View + false + + + Edit + false + + + + InformationRegister.ГруппыЗначенийДоступа.Dimension.ГруппаЗначенийДоступа + + View + false + + + Edit + false + + + + Catalog.ВнешниеПользователи.Attribute.ИдентификаторПользователяСервиса + + View + false + + + Edit + false + + + + InformationRegister.УдалитьГруппыЗначенийДоступа.Resource.НаследоватьПраваРодителей + + View + false + + + Edit + false + + + + InformationRegister.ЗамерыВремени.Dimension.ДатаНачалаЗамера + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоИсходящее.TabularSection.ПолучателиСкрытыхКопий.Attribute.Адрес + + View + false + + + Edit + false + + + + InformationRegister.СостоянияРассылокОтчетов.StandardAttribute.Active + + View + false + + + Edit + false + + + + InformationRegister.СостоянияРассылокОтчетов.StandardAttribute.LineNumber + + View + false + + + Edit + false + + + + InformationRegister.СостоянияРассылокОтчетов.StandardAttribute.Recorder + + View + false + + + Edit + false + + + + InformationRegister.СостоянияРассылокОтчетов.StandardAttribute.Period + + View + false + + + Edit + false + + + + InformationRegister.АдресныеОбъекты.Resource.ПочтовыйИндекс + + View + false + + + Edit + false + + + + InformationRegister.ДанныеБизнесПроцессов.Resource.Дата + + View + false + + + Edit + false + + + + InformationRegister.РабочиеКаталогиФайлов.Dimension.Папка + + View + false + + + Edit + false + + + + DataProcessor.КонвертацияОбъектовXDTO.Attribute.УзелДляОбмена + + View + false + + + Edit + false + + + + Catalog.КлассификаторБанковРФ.Attribute.КоррСчет + + View + false + + + Edit + false + + + + Catalog.ЗапланированноеВзаимодействиеПрисоединенныеФайлы.Attribute.ПодписанЭП + + View + false + + + Edit + false + + + + Catalog.ЭлектронноеПисьмоВходящееПрисоединенныеФайлы.StandardAttribute.PredefinedDataName + + View + false + + + Edit + false + + + + Catalog.ЭлектронноеПисьмоВходящееПрисоединенныеФайлы.StandardAttribute.Predefined + + View + false + + + Edit + false + + + + Catalog.ЭлектронноеПисьмоВходящееПрисоединенныеФайлы.StandardAttribute.Ref + + View + false + + + Edit + false + + + + Catalog.ЭлектронноеПисьмоВходящееПрисоединенныеФайлы.StandardAttribute.DeletionMark + + View + false + + + Edit + false + + + + Catalog.ЭлектронноеПисьмоВходящееПрисоединенныеФайлы.StandardAttribute.IsFolder + + View + false + + + Edit + false + + + + Catalog.ЭлектронноеПисьмоВходящееПрисоединенныеФайлы.StandardAttribute.Owner + + View + false + + + Edit + false + + + + Catalog.ЭлектронноеПисьмоВходящееПрисоединенныеФайлы.StandardAttribute.Parent + + View + false + + + Edit + false + + + + Catalog.ЭлектронноеПисьмоВходящееПрисоединенныеФайлы.StandardAttribute.Description + + View + false + + + Edit + false + + + + Catalog.ЭлектронноеПисьмоВходящееПрисоединенныеФайлы.StandardAttribute.Code + + View + false + + + Edit + false + + + + Task.ЗадачаИсполнителя.AddressingAttribute.ДополнительныйОбъектАдресации + + View + false + + + Edit + false + + + + Catalog.ДополнительныеОтчетыИОбработки.TabularSection.Команды + + View + false + + + Edit + false + + + + DataProcessor.ПомощникИнтерактивногоОбменаДанными.TabularSection.ИнформацияСтатистики.Attribute.КоличествоОбъектовНесопоставленных + + View + false + + + Edit + false + + + + DataProcessor.БлокировкаРаботыПользователей.Attribute.СообщениеДляПользователей + + View + false + + + Edit + false + + + + InformationRegister.НастройкиУчетныхЗаписейЭлектроннойПочты.Resource.ФорматПодписиПриОтветеПересылке + + View + false + + + Edit + false + + + + Catalog.ПапкиФайлов.Attribute.Ответственный + + View + false + + + Edit + false + + + + DataProcessor.СопоставлениеОбъектовИнформационныхБаз.TabularSection.ТаблицаСортировки.Attribute.ИмяПоля + + View + false + + + Edit + false + + + + InformationRegister.НаборыЗначенийДоступа.Dimension.Уточнение + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоИсходящее.Attribute.ДатаОтправления + + View + false + + + Edit + false + + + + Catalog.РассылкиОтчетов.Attribute.Подготовлена + + View + false + + + Edit + false + + + + Catalog.Файлы.Attribute.ПолноеНаименование + + View + false + + + Edit + false + + + + InformationRegister.ПоставляемыеДанныеТребующиеОбработки.StandardAttribute.Active + + View + false + + + Edit + false + + + + InformationRegister.ПоставляемыеДанныеТребующиеОбработки.StandardAttribute.LineNumber + + View + false + + + Edit + false + + + + InformationRegister.ПоставляемыеДанныеТребующиеОбработки.StandardAttribute.Recorder + + View + false + + + Edit + false + + + + InformationRegister.ПоставляемыеДанныеТребующиеОбработки.StandardAttribute.Period + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоИсходящее.Attribute.Удалить_Рассмотрено + + View + false + + + Edit + false + + + + InformationRegister.ЗамерыОбластиСтатистики.Dimension.ИдентификаторУдаления + + View + false + + + Edit + false + + + + Catalog.ШаблоныАнкет.StandardAttribute.PredefinedDataName + + View + false + + + Edit + false + + + + Catalog.ШаблоныАнкет.StandardAttribute.Predefined + + View + false + + + Edit + false + + + + Catalog.ШаблоныАнкет.StandardAttribute.Ref + + View + false + + + Edit + false + + + + Catalog.ШаблоныАнкет.StandardAttribute.DeletionMark + + View + false + + + Edit + false + + + + Catalog.ШаблоныАнкет.StandardAttribute.IsFolder + + View + false + + + Edit + false + + + + Catalog.ШаблоныАнкет.StandardAttribute.Owner + + View + false + + + Edit + false + + + + Catalog.ШаблоныАнкет.StandardAttribute.Parent + + View + false + + + Edit + false + + + + Catalog.ШаблоныАнкет.StandardAttribute.Description + + View + false + + + Edit + false + + + + Catalog.ШаблоныАнкет.StandardAttribute.Code + + View + false + + + Edit + false + + + + InformationRegister.ПредметыПапкиВзаимодействий.Resource.Рассмотрено + + View + false + + + Edit + false + + + + InformationRegister.НаличиеПрисоединенныхФайлов.StandardAttribute.Active + + View + false + + + Edit + false + + + + InformationRegister.НаличиеПрисоединенныхФайлов.StandardAttribute.LineNumber + + View + false + + + Edit + false + + + + InformationRegister.НаличиеПрисоединенныхФайлов.StandardAttribute.Recorder + + View + false + + + Edit + false + + + + InformationRegister.НаличиеПрисоединенныхФайлов.StandardAttribute.Period + + View + false + + + Edit + false + + + + Catalog.ТелефонныйЗвонокПрисоединенныеФайлы.Attribute.Том + + View + false + + + Edit + false + + + + DataProcessor.ПомощникСозданияОбменаДанными.Attribute.WSЗапомнитьПароль + + View + false + + + Edit + false + + + + InformationRegister.АдресныеОбъекты.Dimension.Идентификатор + + View + false + + + Edit + false + + + + InformationRegister.РазрешенияНаИспользованиеВнешнихРесурсов.Attribute.ПредставлениеПрограммногоМодуля + + View + false + + + Edit + false + + + + InformationRegister.УдалитьОчередьЗаданий.Resource.СостояниеЗадания + + View + false + + + Edit + false + + + + Catalog.ВариантыОтчетов.Attribute.УдалитьКлючОбъекта + + View + false + + + Edit + false + + + + InformationRegister.УдалитьОчередьЗаданий.Resource.НомерПопытки + + View + false + + + Edit + false + + + + Catalog.Календари.Attribute.УчитыватьПраздники + + View + false + + + Edit + false + + + + Document.Встреча.Attribute.ДатаОкончания + + View + false + + + Edit + false + + + + Catalog.РассылкиОтчетов.TabularSection.ФорматыОтчетов.Attribute.Отчет + + View + false + + + Edit + false + + + + InformationRegister.ХранимыеФайлыВерсий.StandardAttribute.Active + + View + false + + + Edit + false + + + + InformationRegister.ХранимыеФайлыВерсий.StandardAttribute.LineNumber + + View + false + + + Edit + false + + + + InformationRegister.ХранимыеФайлыВерсий.StandardAttribute.Recorder + + View + false + + + Edit + false + + + + InformationRegister.ХранимыеФайлыВерсий.StandardAttribute.Period + + View + false + + + Edit + false + + + + Catalog.ВариантыОтчетов.TabularSection.Размещение.Attribute.УдалитьНазвание + + View + false + + + Edit + false + + + + InformationRegister.ЗамерыВремени.Resource.ВремяВыполнения + + View + false + + + Edit + false + + + + Catalog.Заметки.Attribute.Автор + + View + false + + + Edit + false + + + + Document.Встреча.Attribute.Удалить_Рассмотрено + + View + false + + + Edit + false + + + + InformationRegister.ЗамерыВремени.Attribute.ДатаОкончания + + View + false + + + Edit + false + + + + Catalog.ВариантыОтчетов.Attribute.ВидимостьПоУмолчаниюПереопределена + + View + false + + + Edit + false + + + + Catalog.ГруппыИсполнителейЗадач.Attribute.РольИсполнителя + + View + false + + + Edit + false + + + + Catalog.СообщениеSMSПрисоединенныеФайлы.Attribute.ДатаМодификацииУниверсальная + + View + false + + + Edit + false + + + + Catalog.ЭлектронноеПисьмоИсходящееПрисоединенныеФайлы.Attribute.Редактирует + + View + false + + + Edit + false + + + + Catalog.Заметки.Attribute.Предмет + + View + false + + + Edit + false + + + + InformationRegister.СообщенияОбменаДанными.StandardAttribute.Active + + View + false + + + Edit + false + + + + InformationRegister.СообщенияОбменаДанными.StandardAttribute.LineNumber + + View + false + + + Edit + false + + + + InformationRegister.СообщенияОбменаДанными.StandardAttribute.Recorder + + View + false + + + Edit + false + + + + InformationRegister.СообщенияОбменаДанными.StandardAttribute.Period + + View + false + + + Edit + false + + + + Catalog.НаборыДополнительныхРеквизитовИСведений.Attribute.Используется + + View + false + + + Edit + false + + + + InformationRegister.ВерсииПодсистемОбластейДанных.Dimension.ИмяПодсистемы + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоВходящее.Attribute.ДатаПолучения + + View + false + + + Edit + false + + + + DataProcessor.СопоставлениеОбъектовИнформационныхБаз.TabularSection.ТаблицаНеутвержденныхСвязей.Attribute.УникальныйИдентификаторПриемника + + View + false + + + Edit + false + + + + InformationRegister.ИзмененияОбщихДанныхУзлов.Dimension.Узел + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоИсходящее.TabularSection.НаборыЗначенийДоступа.Attribute.ЗначениеДоступа + + View + false + + + Edit + false + + + + Catalog.НаборыДополнительныхРеквизитовИСведений.StandardAttribute.PredefinedDataName + + View + false + + + Edit + false + + + + Catalog.НаборыДополнительныхРеквизитовИСведений.StandardAttribute.Predefined + + View + false + + + Edit + false + + + + Catalog.НаборыДополнительныхРеквизитовИСведений.StandardAttribute.Ref + + View + false + + + Edit + false + + + + Catalog.НаборыДополнительныхРеквизитовИСведений.StandardAttribute.DeletionMark + + View + false + + + Edit + false + + + + Catalog.НаборыДополнительныхРеквизитовИСведений.StandardAttribute.IsFolder + + View + false + + + Edit + false + + + + Catalog.НаборыДополнительныхРеквизитовИСведений.StandardAttribute.Owner + + View + false + + + Edit + false + + + + Catalog.НаборыДополнительныхРеквизитовИСведений.StandardAttribute.Parent + + View + false + + + Edit + false + + + + Catalog.НаборыДополнительныхРеквизитовИСведений.StandardAttribute.Description + + View + false + + + Edit + false + + + + Catalog.НаборыДополнительныхРеквизитовИСведений.StandardAttribute.Code + + View + false + + + Edit + false + + + + Catalog.ВстречаПрисоединенныеФайлы.TabularSection.ЭлектронныеПодписи.Attribute.ДатаПодписи + + View + false + + + Edit + false + + + + BusinessProcess.Задание.Attribute.СодержаниеПредмета + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоИсходящее.Attribute.УведомитьОДоставке + + View + false + + + Edit + false + + + + BusinessProcess.Задание.Attribute.Выполнено + + View + false + + + Edit + false + + + + Document.ТелефонныйЗвонок.Attribute.Автор + + View + false + + + Edit + false + + + + DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ВыводВОкноСообщенийИнформационныхСообщений + + View + false + + + Edit + false + + + + InformationRegister.СведенияОПользователях.Resource.ИспользованныеПароли + + View + false + + + Edit + false + + + + InformationRegister.РезультатыОбменаДанными.Resource.ДатаВозникновения + + View + false + + + Edit + false + + + + Catalog.ПапкиЭлектронныхПисем.StandardAttribute.PredefinedDataName + + View + false + + + Edit + false + + + + Catalog.ПапкиЭлектронныхПисем.StandardAttribute.Predefined + + View + false + + + Edit + false + + + + Catalog.ПапкиЭлектронныхПисем.StandardAttribute.Ref + + View + false + + + Edit + false + + + + Catalog.ПапкиЭлектронныхПисем.StandardAttribute.DeletionMark + + View + false + + + Edit + false + + + + Catalog.ПапкиЭлектронныхПисем.StandardAttribute.IsFolder + + View + false + + + Edit + false + + + + Catalog.ПапкиЭлектронныхПисем.StandardAttribute.Owner + + View + false + + + Edit + false + + + + Catalog.ПапкиЭлектронныхПисем.StandardAttribute.Parent + + View + false + + + Edit + false + + + + Catalog.ПапкиЭлектронныхПисем.StandardAttribute.Description + + View + false + + + Edit + false + + + + Catalog.ПапкиЭлектронныхПисем.StandardAttribute.Code + + View + false + + + Edit + false + + + + InformationRegister.РучныеИзмененияГрафиковРаботы.Dimension.ДатаГрафика + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоИсходящее.Attribute.СписокПолучателейКопий + + View + false + + + Edit + false + + + + Catalog.ВариантыОтчетов.StandardAttribute.PredefinedDataName + + View + false + + + Edit + false + + + + Catalog.ВариантыОтчетов.StandardAttribute.Predefined + + View + false + + + Edit + false + + + + Catalog.ВариантыОтчетов.StandardAttribute.Ref + + View + false + + + Edit + false + + + + Catalog.ВариантыОтчетов.StandardAttribute.DeletionMark + + View + false + + + Edit + false + + + + Catalog.ВариантыОтчетов.StandardAttribute.IsFolder + + View + false + + + Edit + false + + + + Catalog.ВариантыОтчетов.StandardAttribute.Owner + + View + false + + + Edit + false + + + + Catalog.ВариантыОтчетов.StandardAttribute.Parent + + View + false + + + Edit + false + + + + Catalog.ВариантыОтчетов.StandardAttribute.Description + + View + false + + + Edit + false + + + + Catalog.ВариантыОтчетов.StandardAttribute.Code + + View + false + + + Edit + false + + + + Document.ТелефонныйЗвонок.Attribute.Предмет + + View + false + + + Edit + false + + + + InformationRegister.ОтветыНаВопросыАнкет.StandardAttribute.Active + + View + false + + + Edit + false + + + + InformationRegister.ОтветыНаВопросыАнкет.StandardAttribute.LineNumber + + View + false + + + Edit + false + + + + InformationRegister.ОтветыНаВопросыАнкет.StandardAttribute.Recorder + + View + false + + + Edit + false + + + + InformationRegister.ОтветыНаВопросыАнкет.StandardAttribute.Period + + View + false + + + Edit + false + + + + InformationRegister.ВерсииОбъектов.StandardAttribute.Active + + View + false + + + Edit + false + + + + InformationRegister.ВерсииОбъектов.StandardAttribute.LineNumber + + View + false + + + Edit + false + + + + InformationRegister.ВерсииОбъектов.StandardAttribute.Recorder + + View + false + + + Edit + false + + + + InformationRegister.ВерсииОбъектов.StandardAttribute.Period + + View + false + + + Edit + false + + + + InformationRegister.СлужебныеАдресныеСведения.StandardAttribute.Active + + View + false + + + Edit + false + + + + InformationRegister.СлужебныеАдресныеСведения.StandardAttribute.LineNumber + + View + false + + + Edit + false + + + + InformationRegister.СлужебныеАдресныеСведения.StandardAttribute.Recorder + + View + false + + + Edit + false + + + + InformationRegister.СлужебныеАдресныеСведения.StandardAttribute.Period + + View + false + + + Edit + false + + + + InformationRegister.НастройкиТранспортаОбмена.Resource.FILEСжиматьФайлИсходящегоСообщения + + View + false + + + Edit + false + + + + DataProcessor.ПомощникСозданияОбменаДанными.Attribute.ПрефиксИнформационнойБазыПриемника + + View + false + + + Edit + false + + + + Catalog.УчетныеЗаписиЭлектроннойПочты.Attribute.УдалитьПароль + + View + false + + + Edit + false + + + + InformationRegister.ПубличныеИдентификаторыСинхронизируемыхОбъектов.Dimension.Идентификатор + + View + false + + + Edit + false + + + + DataProcessor.ПомощникСозданияОбменаДанными.Attribute.ПрефиксИнформационнойБазыИсточника + + View + false + + + Edit + false + + + + Catalog.ВариантыОтчетов.TabularSection.Размещение.Attribute.Важный + + View + false + + + Edit + false + + + + InformationRegister.ДатыЗапретаИзменения.Attribute.ОписаниеДатыЗапрета + + View + false + + + Edit + false + + + + Document.ТелефонныйЗвонок.TabularSection.ДополнительныеРеквизиты.Attribute.ТекстоваяСтрока + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоИсходящее.Attribute.ТекстHTML + + View + false + + + Edit + false + + + + InformationRegister.Удалить_АктивныеПредметыВзаимодействий.Dimension.Предмет + + View + false + + + Edit + false + + + + ExchangePlan.ОбменСообщениями.Attribute.Заблокирована + + View + false + + + Edit + false + + + + InformationRegister.ПодпискиПолучателей.Dimension.КаналСообщений + + View + false + + + Edit + false + + + + InformationRegister.ВерсииПодсистем.Attribute.ЭтоОсновнаяКонфигурация + + View + false + + + Edit + false + + + + DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.УзелОбменаЗагрузкаДанных + + View + false + + + Edit + false + + + + InformationRegister.ЗамерыКомментарииСтатистики.StandardAttribute.Active + + View + false + + + Edit + false + + + + InformationRegister.ЗамерыКомментарииСтатистики.StandardAttribute.LineNumber + + View + false + + + Edit + false + + + + InformationRegister.ЗамерыКомментарииСтатистики.StandardAttribute.Recorder + + View + false + + + Edit + false + + + + InformationRegister.ЗамерыКомментарииСтатистики.StandardAttribute.Period + + View + false + + + Edit + false + + + + ExchangePlan.ОбменСообщениями.StandardAttribute.ThisNode + + View + false + + + Edit + false + + + + ExchangePlan.ОбменСообщениями.StandardAttribute.ReceivedNo + + View + false + + + Edit + false + + + + ExchangePlan.ОбменСообщениями.StandardAttribute.SentNo + + View + false + + + Edit + false + + + + ExchangePlan.ОбменСообщениями.StandardAttribute.Ref + + View + false + + + Edit + false + + + + ExchangePlan.ОбменСообщениями.StandardAttribute.DeletionMark + + View + false + + + Edit + false + + + + ExchangePlan.ОбменСообщениями.StandardAttribute.Description + + View + false + + + Edit + false + + + + ExchangePlan.ОбменСообщениями.StandardAttribute.Code + + View + false + + + Edit + false + + + + InformationRegister.ИсторияАдресныхОбъектов.Dimension.КодДополнительногоЭлемента + + View + false + + + Edit + false + + + + InformationRegister.ОбщиеНастройкиУзловИнформационныхБаз.Resource.ВерсияКорреспондента + + View + false + + + Edit + false + + + + Document.ЗапланированноеВзаимодействие.TabularSection.НаборыЗначенийДоступа.Attribute.Чтение + + View + false + + + Edit + false + + + + DataProcessor.ПомощникСозданияОбменаДанными.TabularSection.ИнформацияСтатистики.Attribute.ТипИсточникаСтрокой + + View + false + + + Edit + false + + + + Catalog.ПрограммыЭлектроннойПодписиИШифрования.Attribute.ИмяПрограммы + + View + false + + + Edit + false + + + + Catalog.ПравилаОбработкиЭлектроннойПочты.Attribute.ПомещатьВПапку + + View + false + + + Edit + false + + + + Catalog.ТелефонныйЗвонокПрисоединенныеФайлы.Attribute.Изменил + + View + false + + + Edit + false + + + + InformationRegister.СтатистикаКонфигурации.StandardAttribute.Active + + View + false + + + Edit + false + + + + InformationRegister.СтатистикаКонфигурации.StandardAttribute.LineNumber + + View + false + + + Edit + false + + + + InformationRegister.СтатистикаКонфигурации.StandardAttribute.Recorder + + View + false + + + Edit + false + + + + InformationRegister.СтатистикаКонфигурации.StandardAttribute.Period + + View + false + + + Edit + false + + + + Catalog.СообщенияОбластейДанных.Attribute.Получатель + + View + false + + + Edit + false + + + + DataProcessor.ПомощникСозданияОбменаДанными.Attribute.COMАутентификацияОперационнойСистемы + + View + false + + + Edit + false + + + + InformationRegister.НомераОтсканированныхФайлов.StandardAttribute.Active + + View + false + + + Edit + false + + + + InformationRegister.НомераОтсканированныхФайлов.StandardAttribute.LineNumber + + View + false + + + Edit + false + + + + InformationRegister.НомераОтсканированныхФайлов.StandardAttribute.Recorder + + View + false + + + Edit + false + + + + InformationRegister.НомераОтсканированныхФайлов.StandardAttribute.Period + + View + false + + + Edit + false + + + + Document.ТелефонныйЗвонок.Attribute.АбонентПредставление + + View + false + + + Edit + false + + + + Catalog.УчетныеЗаписиЭлектроннойПочты.Attribute.СпособSMTPАутентификации + + View + false + + + Edit + false + + + + ChartOfCharacteristicTypes.РазделыДатЗапретаИзменения.StandardAttribute.PredefinedDataName + + View + false + + + Edit + false + + + + ChartOfCharacteristicTypes.РазделыДатЗапретаИзменения.StandardAttribute.ValueType + + View + false + + + Edit + false + + + + ChartOfCharacteristicTypes.РазделыДатЗапретаИзменения.StandardAttribute.Description + + View + false + + + Edit + false + + + + ChartOfCharacteristicTypes.РазделыДатЗапретаИзменения.StandardAttribute.Code + + View + false + + + Edit + false + + + + ChartOfCharacteristicTypes.РазделыДатЗапретаИзменения.StandardAttribute.IsFolder + + View + false + + + Edit + false + + + + ChartOfCharacteristicTypes.РазделыДатЗапретаИзменения.StandardAttribute.Parent + + View + false + + + Edit + false + + + + ChartOfCharacteristicTypes.РазделыДатЗапретаИзменения.StandardAttribute.Predefined + + View + false + + + Edit + false + + + + ChartOfCharacteristicTypes.РазделыДатЗапретаИзменения.StandardAttribute.DeletionMark + + View + false + + + Edit + false + + + + ChartOfCharacteristicTypes.РазделыДатЗапретаИзменения.StandardAttribute.Ref + + View + false + + + Edit + false + + + + Catalog.СценарииОбменовДанными.Attribute.РегламентноеЗаданиеGUID + + View + false + + + Edit + false + + + + InformationRegister.УведомленияОПрочтении.Attribute.Пользователь + + View + false + + + Edit + false + + + + InformationRegister.НастройкиТранспортаОбмена.Resource.COMАутентификацияОперационнойСистемы + + View + false + + + Edit + false + + + + DataProcessor.ПомощникСозданияОбменаДанными.Attribute.EMAILУчетнаяЗапись + + View + false + + + Edit + false + + + + Catalog.ВидыКонтактнойИнформации.Attribute.АдресТолькоРоссийский + + View + false + + + Edit + false + + + + InformationRegister.ПравилаДляОбменаДанными.Resource.ПравилаXML + + View + false + + + Edit + false + + + + DataProcessor.ПомощникСозданияОбменаДанными.TabularSection.ИнформацияСтатистики.Attribute.Ключ + + View + false + + + Edit + false + + + + InformationRegister.НепринятыеКОбработкеПочтовымСерверомИсходящиеПисьма.StandardAttribute.Active + + View + false + + + Edit + false + + + + InformationRegister.НепринятыеКОбработкеПочтовымСерверомИсходящиеПисьма.StandardAttribute.LineNumber + + View + false + + + Edit + false + + + + InformationRegister.НепринятыеКОбработкеПочтовымСерверомИсходящиеПисьма.StandardAttribute.Recorder + + View + false + + + Edit + false + + + + InformationRegister.НепринятыеКОбработкеПочтовымСерверомИсходящиеПисьма.StandardAttribute.Period + + View + false + + + Edit + false + + + + Catalog.ВопросыШаблонаАнкеты.StandardAttribute.PredefinedDataName + + View + false + + + Edit + false + + + + Catalog.ВопросыШаблонаАнкеты.StandardAttribute.Predefined + + View + false + + + Edit + false + + + + Catalog.ВопросыШаблонаАнкеты.StandardAttribute.Ref + + View + false + + + Edit + false + + + + Catalog.ВопросыШаблонаАнкеты.StandardAttribute.DeletionMark + + View + false + + + Edit + false + + + + Catalog.ВопросыШаблонаАнкеты.StandardAttribute.IsFolder + + View + false + + + Edit + false + + + + Catalog.ВопросыШаблонаАнкеты.StandardAttribute.Owner + + View + false + + + Edit + false + + + + Catalog.ВопросыШаблонаАнкеты.StandardAttribute.Parent + + View + false + + + Edit + false + + + + Catalog.ВопросыШаблонаАнкеты.StandardAttribute.Description + + View + false + + + Edit + false + + + + Catalog.ВопросыШаблонаАнкеты.StandardAttribute.Code + + View + false + + + Edit + false + + + + InformationRegister.НапоминанияПользователя.Resource.СрокНапоминания + + View + false + + + Edit + false + + + + InformationRegister.ПраваРолей.Dimension.ОбъектМетаданных + + View + false + + + Edit + false + + + + InformationRegister.ВерсииОбъектов.Dimension.Объект + + View + false + + + Edit + false + + + + Document.НазначениеОпросов.Attribute.СвободныйОпрос + + View + false + + + Edit + false + + + + DataProcessor.ГрупповоеИзменениеРеквизитов.Attribute.ИспользуютсяДопСведения + + View + false + + + Edit + false + + + + Catalog.ПапкиФайлов.Attribute.Описание + + View + false + + + Edit + false + + + + ChartOfCharacteristicTypes.ВопросыДляАнкетирования.Attribute.ТипОтвета + + View + false + + + Edit + false + + + + Catalog.РассылкиОтчетов.TabularSection.ФорматыОтчетов.Attribute.Формат + + View + false + + + Edit + false + + + + DataProcessor.ПомощникСозданияОбменаДанными.Attribute.COMКаталогИнформационнойБазы + + View + false + + + Edit + false + + + + InformationRegister.ФайлыВРабочемКаталоге.Resource.Путь + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоИсходящее.TabularSection.ДополнительныеРеквизиты + + View + false + + + Edit + false + + + + ChartOfCharacteristicTypes.ДополнительныеРеквизитыИСведения.StandardAttribute.PredefinedDataName + + View + false + + + Edit + false + + + + ChartOfCharacteristicTypes.ДополнительныеРеквизитыИСведения.StandardAttribute.ValueType + + View + false + + + Edit + false + + + + ChartOfCharacteristicTypes.ДополнительныеРеквизитыИСведения.StandardAttribute.Description + + View + false + + + Edit + false + + + + ChartOfCharacteristicTypes.ДополнительныеРеквизитыИСведения.StandardAttribute.Code + + View + false + + + Edit + false + + + + ChartOfCharacteristicTypes.ДополнительныеРеквизитыИСведения.StandardAttribute.IsFolder + + View + false + + + Edit + false + + + + ChartOfCharacteristicTypes.ДополнительныеРеквизитыИСведения.StandardAttribute.Parent + + View + false + + + Edit + false + + + + ChartOfCharacteristicTypes.ДополнительныеРеквизитыИСведения.StandardAttribute.Predefined + + View + false + + + Edit + false + + + + ChartOfCharacteristicTypes.ДополнительныеРеквизитыИСведения.StandardAttribute.DeletionMark + + View + false + + + Edit + false + + + + ChartOfCharacteristicTypes.ДополнительныеРеквизитыИСведения.StandardAttribute.Ref + + View + false + + + Edit + false + + + + InformationRegister.КурсыВалют.StandardAttribute.Active + + View + false + + + Edit + false + + + + InformationRegister.КурсыВалют.StandardAttribute.LineNumber + + View + false + + + Edit + false + + + + InformationRegister.КурсыВалют.StandardAttribute.Recorder + + View + false + + + Edit + false + + + + InformationRegister.КурсыВалют.StandardAttribute.Period + + View + false + + + Edit + false + + + + DataProcessor.ПомощникСозданияОбменаДанными.Attribute.FTPСоединениеПорт + + View + false + + + Edit + false + + + + DataProcessor.ГрупповоеИзменениеРеквизитов.Attribute.ПрерыватьПриОшибке + + View + false + + + Edit + false + + + + InformationRegister.НаборыЗначенийДоступа.Dimension.НомерНабора + + View + false + + + Edit + false + + + + InformationRegister.ЗапросыРазрешенийНаИспользованиеВнешнихРесурсов.Resource.БезопасныйРежим + + View + false + + + Edit + false + + + + InformationRegister.СведенияОПользователях.Resource.ДатаНачалаИспользованияПароля + + View + false + + + Edit + false + + + + InformationRegister.ЗапросыРазрешенийНаИспользованиеВнешнихРесурсов.Attribute.Операция + + View + false + + + Edit + false + + + + DataProcessor.ТранспортСообщенийОбменаFILE.Attribute.FILEСжиматьФайлИсходящегоСообщения + + View + false + + + Edit + false + + + + Catalog.РассылкиОтчетов.Attribute.ИспользоватьЭлектроннуюПочту + + View + false + + + Edit + false + + + + Catalog.ВариантыОтчетов.TabularSection.Размещение.Attribute.УдалитьПредопределенная + + View + false + + + Edit + false + + + + InformationRegister.ДанныеБизнесПроцессов.Resource.Автор + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоИсходящее.Attribute.УчетнаяЗапись + + View + false + + + Edit + false + + + + Catalog.РассылкиОтчетов.Attribute.УчетнаяЗапись + + View + false + + + Edit + false + + + + Document.НазначениеОпросов.Attribute.Комментарий + + View + false + + + Edit + false + + + + InformationRegister.ЗначенияГруппДоступаПоУмолчанию.Dimension.ТипЗначенийДоступа + + View + false + + + Edit + false + + + + InformationRegister.НапоминанияПользователя.Attribute.ИнтервалВремениНапоминания + + View + false + + + Edit + false + + + + InformationRegister.ПользовательскиеМакетыПечати.Dimension.Объект + + View + false + + + Edit + false + + + + InformationRegister.СостоянияУспешныхОбменовДанными.Resource.ДатаОкончания + + View + false + + + Edit + false + + + + ChartOfCharacteristicTypes.ВопросыДляАнкетирования.Attribute.Точность + + View + false + + + Edit + false + + + + Catalog.ПрофилиГруппДоступа.Attribute.Комментарий + + View + false + + + Edit + false + + + + InformationRegister.УведомленияОПрочтении.Resource.ДатаПрочтения + + View + false + + + Edit + false + + + + Catalog.УчетныеЗаписиЭлектроннойПочты.Attribute.ТребуетсяВходНаСерверПередОтправкой + + View + false + + + Edit + false + + + + DataProcessor.КонвертацияОбъектовXDTO.Attribute.РежимОбмена + + View + false + + + Edit + false + + + + Catalog.ВидыКонтактнойИнформации.Attribute.ТелефонCДобавочнымНомером + + View + false + + + Edit + false + + + + InformationRegister.РазрешенияНаИспользованиеВнешнихРесурсов.Attribute.ТелоРазрешения + + View + false + + + Edit + false + + + + Catalog.ДополнительныеОтчетыИОбработки.TabularSection.Команды.Attribute.Модификатор + + View + false + + + Edit + false + + + + Catalog.УчетныеЗаписиЭлектроннойПочты.Attribute.УдалитьПарольSMTP + + View + false + + + Edit + false + + + + DataProcessor.ПомощникИнтерактивногоОбменаДанными.TabularSection.ИнформацияСтатистики.Attribute.ПоляТаблицы + + View + false + + + Edit + false + + + + Catalog.РассылкиОтчетов.Attribute.FTPПорт + + View + false + + + Edit + false + + + + InformationRegister.ЗамерыОбластиСтатистики.Dimension.ОперацияСтатистики + + View + false + + + Edit + false + + + + DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ПродолжитьПриОшибке + + View + false + + + Edit + false + + + + DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.ЗагружатьДанныеВРежимеОбмена + + View + false + + + Edit + false + + + + DataProcessor.ТранспортСообщенийОбменаFILE.Attribute.ШаблонИмениФайлаСообщения + + View + false + + + Edit + false + + + + InformationRegister.ПраваРолей.Dimension.Роль + + View + false + + + Edit + false + + + + Document.СообщениеSMS.TabularSection.ДополнительныеРеквизиты.Attribute.ТекстоваяСтрока + + View + false + + + Edit + false + + + + Catalog.РассылкиОтчетов.Attribute.УдалитьFTPПароль + + View + false + + + Edit + false + + + + InformationRegister.СостоянияПредметовВзаимодействий.Resource.ДатаПоследнегоВзаимодействия + + View + false + + + Edit + false + + + + Catalog.Файлы.TabularSection.СертификатыШифрования.Attribute.Сертификат + + View + false + + + Edit + false + + + + InformationRegister.БлокировкиСеансовОбластейДанных.Resource.СообщениеБлокировки + + View + false + + + Edit + false + + + + Document.Встреча.TabularSection.ДополнительныеРеквизиты.Attribute.ТекстоваяСтрока + + View + false + + + Edit + false + + + + Catalog.НаборыДополнительныхРеквизитовИСведений.TabularSection.ДополнительныеСведения.Attribute.ПометкаУдаления + + View + false + + + Edit + false + + + + Catalog.СообщенияОбластейДанных.StandardAttribute.PredefinedDataName + + View + false + + + Edit + false + + + + Catalog.СообщенияОбластейДанных.StandardAttribute.Predefined + + View + false + + + Edit + false + + + + Catalog.СообщенияОбластейДанных.StandardAttribute.Ref + + View + false + + + Edit + false + + + + Catalog.СообщенияОбластейДанных.StandardAttribute.DeletionMark + + View + false + + + Edit + false + + + + Catalog.СообщенияОбластейДанных.StandardAttribute.IsFolder + + View + false + + + Edit + false + + + + Catalog.СообщенияОбластейДанных.StandardAttribute.Owner + + View + false + + + Edit + false + + + + Catalog.СообщенияОбластейДанных.StandardAttribute.Parent + + View + false + + + Edit + false + + + + Catalog.СообщенияОбластейДанных.StandardAttribute.Description + + View + false + + + Edit + false + + + + Catalog.СообщенияОбластейДанных.StandardAttribute.Code + + View + false + + + Edit + false + + + + DataProcessor.ТранспортСообщенийОбменаEMAIL.Attribute.EMAILУчетнаяЗапись + + View + false + + + Edit + false + + + + InformationRegister.НастройкиТранспортаОбмена.Resource.УдалитьCOMПарольПользователя + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоВходящее.TabularSection.ПолучателиПисьма.Attribute.Представление + + View + false + + + Edit + false + + + + DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.ОбъектыПоСсылкеЗагружатьБезПометкиУдаления + + View + false + + + Edit + false + + + + InformationRegister.УдалитьАдресныйКлассификатор.Resource.Наименование + + View + false + + + Edit + false + + + + InformationRegister.НаборыЗначенийДоступа.StandardAttribute.Active + + View + false + + + Edit + false + + + + InformationRegister.НаборыЗначенийДоступа.StandardAttribute.LineNumber + + View + false + + + Edit + false + + + + InformationRegister.НаборыЗначенийДоступа.StandardAttribute.Recorder + + View + false + + + Edit + false + + + + InformationRegister.НаборыЗначенийДоступа.StandardAttribute.Period + + View + false + + + Edit + false + + + + InformationRegister.НастройкиУчетныхЗаписейЭлектроннойПочты.StandardAttribute.Active + + View + false + + + Edit + false + + + + InformationRegister.НастройкиУчетныхЗаписейЭлектроннойПочты.StandardAttribute.LineNumber + + View + false + + + Edit + false + + + + InformationRegister.НастройкиУчетныхЗаписейЭлектроннойПочты.StandardAttribute.Recorder + + View + false + + + Edit + false + + + + InformationRegister.НастройкиУчетныхЗаписейЭлектроннойПочты.StandardAttribute.Period + + View + false + + + Edit + false + + + + InformationRegister.ДатыЗапретаИзменения.Resource.ДатаЗапрета + + View + false + + + Edit + false + + + + InformationRegister.ДомаЗданияСтроения.StandardAttribute.Active + + View + false + + + Edit + false + + + + InformationRegister.ДомаЗданияСтроения.StandardAttribute.LineNumber + + View + false + + + Edit + false + + + + InformationRegister.ДомаЗданияСтроения.StandardAttribute.Recorder + + View + false + + + Edit + false + + + + InformationRegister.ДомаЗданияСтроения.StandardAttribute.Period + + View + false + + + Edit + false + + + + DataProcessor.СопоставлениеОбъектовИнформационныхБаз.TabularSection.ТаблицаНеутвержденныхСвязей.Attribute.УникальныйИдентификаторИсточника + + View + false + + + Edit + false + + + + InformationRegister.КалендарныеГрафики.StandardAttribute.Active + + View + false + + + Edit + false + + + + InformationRegister.КалендарныеГрафики.StandardAttribute.LineNumber + + View + false + + + Edit + false + + + + InformationRegister.КалендарныеГрафики.StandardAttribute.Recorder + + View + false + + + Edit + false + + + + InformationRegister.КалендарныеГрафики.StandardAttribute.Period + + View + false + + + Edit + false + + + + DataProcessor.ИнтерактивноеИзменениеВыгрузки.Attribute.ВариантВыгрузки + + View + false + + + Edit + false + + + + InformationRegister.КалендарныеГрафики.Resource.КоличествоДнейВГрафикеСНачалаГода + + View + false + + + Edit + false + + + + InformationRegister.ОтветыНаВопросыАнкет.Dimension.Вопрос + + View + false + + + Edit + false + + + + InformationRegister.АдресныеОбъекты.Resource.Сокращение + + View + false + + + Edit + false + + + + Task.ЗадачаИсполнителя.AddressingAttribute.ОсновнойОбъектАдресации + + View + false + + + Edit + false + + + + Catalog.СообщениеSMSПрисоединенныеФайлы.Attribute.Расширение + + View + false + + + Edit + false + + + + DataProcessor.КонвертацияОбъектовXDTO.Attribute.КомментарийПриВыгрузкеДанных + + View + false + + + Edit + false + + + + InformationRegister.ЗамерыВремениТехнологические.Dimension.НомерСеанса + + View + false + + + Edit + false + + + + InformationRegister.ИсполнителиЗадач.Dimension.ОсновнойОбъектАдресации + + View + false + + + Edit + false + + + + InformationRegister.ПодпискиПолучателей.StandardAttribute.Active + + View + false + + + Edit + false + + + + InformationRegister.ПодпискиПолучателей.StandardAttribute.LineNumber + + View + false + + + Edit + false + + + + InformationRegister.ПодпискиПолучателей.StandardAttribute.Recorder + + View + false + + + Edit + false + + + + InformationRegister.ПодпискиПолучателей.StandardAttribute.Period + + View + false + + + Edit + false + + + + Catalog.Календари.TabularSection.РасписаниеРаботы + + View + false + + + Edit + false + + + + Catalog.Пользователи.TabularSection.КонтактнаяИнформация.Attribute.Страна + + View + false + + + Edit + false + + + + InformationRegister.СостоянияКонтактовВзаимодействий.Dimension.Контакт + + View + false + + + Edit + false + + + + Catalog.СертификатыКлючейЭлектроннойПодписиИШифрования.Attribute.СодержаниеЗаявления + + View + false + + + Edit + false + + + + Catalog.ШаблоныАнкет.Attribute.Заключение + + View + false + + + Edit + false + + + + Catalog.ВстречаПрисоединенныеФайлы.TabularSection.ЭлектронныеПодписи.Attribute.Комментарий + + View + false + + + Edit + false + + + + InformationRegister.БуферОперацийСтатистики.Dimension.ДатаЗаписи + + View + false + + + Edit + false + + + + Catalog.ПоставляемыеДанные.Attribute.Описание + + View + false + + + Edit + false + + + + Catalog.ТелефонныйЗвонокПрисоединенныеФайлы.Attribute.ФайлХранилище + + View + false + + + Edit + false + + + + DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ЗагрузкаДанныхВыполняетсяЧерезВнешнееСоединение + + View + false + + + Edit + false + + + + ChartOfCharacteristicTypes.ДополнительныеРеквизитыИСведения.Attribute.ЭтоДополнительноеСведение + + View + false + + + Edit + false + + + + DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ВыгружатьТолькоРазрешенные + + View + false + + + Edit + false + + + + Catalog.НаборыДополнительныхРеквизитовИСведений.TabularSection.ДополнительныеСведения + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоВходящее.Attribute.СписокПолучателейКопий + + View + false + + + Edit + false + + + + Catalog.ДополнительныеОтчетыИОбработки.TabularSection.Команды.Attribute.РегламентноеЗаданиеGUID + + View + false + + + Edit + false + + + + DataProcessor.ПомощникСозданияОбменаДанными.Attribute.КодНовогоУзлаВторойБазы + + View + false + + + Edit + false + + + + DataProcessor.СопоставлениеОбъектовИнформационныхБаз.TabularSection.ТаблицаАвтоматическиСопоставленныхОбъектов.Attribute.ПриемникПоле3 + + View + false + + + Edit + false + + + + DataProcessor.ИнтерактивноеИзменениеВыгрузки.Attribute.ДополнительнаяРегистрация + + View + false + + + Edit + false + + + + Document.СообщениеSMS.TabularSection.НаборыЗначенийДоступа.Attribute.Изменение + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоВходящее.Attribute.ТипТекста + + View + false + + + Edit + false + + + + Catalog.СообщенияСистемы.Attribute.КоличествоПопытокОбработкиСообщения + + View + false + + + Edit + false + + + + InformationRegister.АдресныеОбъекты.Resource.Наименование + + View + false + + + Edit + false + + + + Catalog.Календари.StandardAttribute.PredefinedDataName + + View + false + + + Edit + false + + + + Catalog.Календари.StandardAttribute.Predefined + + View + false + + + Edit + false + + + + Catalog.Календари.StandardAttribute.Ref + + View + false + + + Edit + false + + + + Catalog.Календари.StandardAttribute.DeletionMark + + View + false + + + Edit + false + + + + Catalog.Календари.StandardAttribute.IsFolder + + View + false + + + Edit + false + + + + Catalog.Календари.StandardAttribute.Owner + + View + false + + + Edit + false + + + + Catalog.Календари.StandardAttribute.Parent + + View + false + + + Edit + false + + + + Catalog.Календари.StandardAttribute.Description + + View + false + + + Edit + false + + + + Catalog.Календари.StandardAttribute.Code + + View + false + + + Edit + false + + + + InformationRegister.ИдентификаторыПолученныхЭлектронныхПисем.StandardAttribute.Active + + View + false + + + Edit + false + + + + InformationRegister.ИдентификаторыПолученныхЭлектронныхПисем.StandardAttribute.LineNumber + + View + false + + + Edit + false + + + + InformationRegister.ИдентификаторыПолученныхЭлектронныхПисем.StandardAttribute.Recorder + + View + false + + + Edit + false + + + + InformationRegister.ИдентификаторыПолученныхЭлектронныхПисем.StandardAttribute.Period + + View + false + + + Edit + false + + + + InformationRegister.ДанныеБизнесПроцессов.Resource.Завершен + + View + false + + + Edit + false + + + + InformationRegister.НастройкиПравОбъектов.Resource.ПравоЗапрещено + + View + false + + + Edit + false + + + + Document.НазначениеОпросов.Attribute.ВозможностьПредварительногоСохранения + + View + false + + + Edit + false + + + + DataProcessor.ПомощникСозданияОбменаДанными.Attribute.ИмяПланаОбмена + + View + false + + + Edit + false + + + + Catalog.СообщениеSMSПрисоединенныеФайлы.Attribute.ИндексКартинки + + View + false + + + Edit + false + + + + Catalog.ЗакладкиВзаимодействий.Attribute.КомпоновщикНастроек + + View + false + + + Edit + false + + + + InformationRegister.УдалитьЗамерыВремени.Attribute.ИмяПользователя + + View + false + + + Edit + false + + + + InformationRegister.ОриентирыАдресныхОбъектов.Dimension.КодСубъектаРФ + + View + false + + + Edit + false + + + + Catalog.Валюты.StandardAttribute.PredefinedDataName + + View + false + + + Edit + false + + + + Catalog.Валюты.StandardAttribute.Predefined + + View + false + + + Edit + false + + + + Catalog.Валюты.StandardAttribute.Ref + + View + false + + + Edit + false + + + + Catalog.Валюты.StandardAttribute.DeletionMark + + View + false + + + Edit + false + + + + Catalog.Валюты.StandardAttribute.IsFolder + + View + false + + + Edit + false + + + + Catalog.Валюты.StandardAttribute.Owner + + View + false + + + Edit + false + + + + Catalog.Валюты.StandardAttribute.Parent + + View + false + + + Edit + false + + + + Catalog.Валюты.StandardAttribute.Description + + View + false + + + Edit + false + + + + Catalog.Валюты.StandardAttribute.Code + + View + false + + + Edit + false + + + + InformationRegister.НастройкиПравОбъектов.Attribute.УровеньЗапрещенияИзменения + + View + false + + + Edit + false + + + + DataProcessor.СопоставлениеОбъектовИнформационныхБаз.Attribute.СписокИспользуемыхПолей + + View + false + + + Edit + false + + + + DataProcessor.СопоставлениеОбъектовИнформационныхБаз.Attribute.ИмяТаблицыПриемника + + View + false + + + Edit + false + + + + Catalog.КлассификаторБанковРФ.Attribute.Телефоны + + View + false + + + Edit + false + + + + InformationRegister.ИсторияАдресныхОбъектов.Resource.ПочтовыйИндекс + + View + false + + + Edit + false + + + + Catalog.Файлы.Attribute.ТекущаяВерсияДатаМодификацииФайла + + View + false + + + Edit + false + + + + Catalog.СтраныМира.Attribute.КодАльфа2 + + View + false + + + Edit + false + + + + DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.КоличествоОбработанныхОбъектовДляОбновленияСтатуса + + View + false + + + Edit + false + + + + Document.Встреча.TabularSection.НаборыЗначенийДоступа.Attribute.Чтение + + View + false + + + Edit + false + + + + InformationRegister.ЗависимостиПравДоступа.StandardAttribute.Active + + View + false + + + Edit + false + + + + InformationRegister.ЗависимостиПравДоступа.StandardAttribute.LineNumber + + View + false + + + Edit + false + + + + InformationRegister.ЗависимостиПравДоступа.StandardAttribute.Recorder + + View + false + + + Edit + false + + + + InformationRegister.ЗависимостиПравДоступа.StandardAttribute.Period + + View + false + + + Edit + false + + + + InformationRegister.НастройкиОтправителя.Dimension.Получатель + + View + false + + + Edit + false + + + + InformationRegister.КэшПрограммныхИнтерфейсов.Dimension.Идентификатор + + View + false + + + Edit + false + + + + DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.ЗадаватьВопросПриЗагрузкеДанныхПриОткрытииОбработки + + View + false + + + Edit + false + + + + DataProcessor.ПомощникСозданияОбменаДанными.TabularSection.ИнформацияСтатистики.Attribute.ИмяТаблицыПриемника + + View + false + + + Edit + false + + + + InformationRegister.ЗамерыОбластиСтатистики.Dimension.ОбластьСтатистики + + View + false + + + Edit + false + + + + Catalog.СообщенияСистемы.Attribute.Получатель + + View + false + + + Edit + false + + + + Catalog.ТелефонныйЗвонокПрисоединенныеФайлы.Attribute.ПодписанЭП + + View + false + + + Edit + false + + + + Catalog.СообщенияОбластейДанных.Attribute.ЭтоБыстроеСообщение + + View + false + + + Edit + false + + + + Catalog.ПрофилиГруппДоступа.TabularSection.ВидыДоступа.Attribute.ВидДоступа + + View + false + + + Edit + false + + + + InformationRegister.АдресныеОбъекты.Dimension.КодНаселенногоПункта + + View + false + + + Edit + false + + + + Catalog.НаборыДополнительныхРеквизитовИСведений.Attribute.КоличествоРеквизитов + + View + false + + + Edit + false + + + + Catalog.ПредопределенныеВариантыОтчетов.Attribute.КлючВарианта + + View + false + + + Edit + false + + + + InformationRegister.КомментарииСтатистики.Resource.Наименование + + View + false + + + Edit + false + + + + InformationRegister.ПравилаДляОбменаДанными.Resource.ПравилаXMLКорреспондента + + View + false + + + Edit + false + + + + Catalog.ТелефонныйЗвонокПрисоединенныеФайлы.Attribute.Размер + + View + false + + + Edit + false + + + + InformationRegister.СоответствияОбъектовИнформационныхБаз.StandardAttribute.Active + + View + false + + + Edit + false + + + + InformationRegister.СоответствияОбъектовИнформационныхБаз.StandardAttribute.LineNumber + + View + false + + + Edit + false + + + + InformationRegister.СоответствияОбъектовИнформационныхБаз.StandardAttribute.Recorder + + View + false + + + Edit + false + + + + InformationRegister.СоответствияОбъектовИнформационныхБаз.StandardAttribute.Period + + View + false + + + Edit + false + + + + Catalog.ВерсииФайлов.Attribute.СтатусИзвлеченияТекста + + View + false + + + Edit + false + + + + InformationRegister.НастройкиУчетныхЗаписейЭлектроннойПочты.Resource.ПодписьДляНовыхСообщенийПростойТекст + + View + false + + + Edit + false + + + + Catalog.ЭлектронноеПисьмоИсходящееПрисоединенныеФайлы.TabularSection.СертификатыШифрования + + View + false + + + Edit + false + + + + DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.Данные + + View + false + + + Edit + false + + + + Task.ЗадачаИсполнителя.Attribute.ДатаНачала + + View + false + + + Edit + false + + + + Catalog.Организации.TabularSection.КонтактнаяИнформация + + View + false + + + Edit + false + + + + InformationRegister.УдалитьВерсииПодсистем.Dimension.ИмяПодсистемы + + View + false + + + Edit + false + + + + DataProcessor.ПомощникСозданияОбменаДанными.TabularSection.ИнформацияСтатистики.Attribute.КоличествоОбъектовВИсточнике + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоВходящее.Attribute.ОтправительПредставление + + View + false + + + Edit + false + + + + Catalog.ЭлектронноеПисьмоИсходящееПрисоединенныеФайлы.TabularSection.ЭлектронныеПодписи.Attribute.Подпись + + View + false + + + Edit + false + + + + Catalog.ЭлектронноеПисьмоВходящееПрисоединенныеФайлы.Attribute.ИндексКартинки + + View + false + + + Edit + false + + + + DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.ИмяВременногоФайлаПротоколаОбмена + + View + false + + + Edit + false + + + + InformationRegister.ИсторияАдресныхОбъектов.Dimension.КодОкруга + + View + false + + + Edit + false + + + + Catalog.ШаблоныЗаданийОчереди.Attribute.Имя + + View + false + + + Edit + false + + + + InformationRegister.СлужебныеАдресныеСведения.Dimension.Тип + + View + false + + + Edit + false + + + + DataProcessor.ПомощникСозданияОбменаДанными.TabularSection.ИнформацияСтатистики.Attribute.ДанныеУспешноЗагружены + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоВходящее.Attribute.Удалить_Рассмотрено + + View + false + + + Edit + false + + + + Catalog.Валюты.Attribute.НаименованиеПолное + + View + false + + + Edit + false + + + + InformationRegister.УдалитьОчередьИзвлеченияТекста.Dimension.ОбластьДанных + + View + false + + + Edit + false + + + + DataProcessor.ПомощникСозданияОбменаДанными.Attribute.FILEКаталогОбменаИнформацией + + View + false + + + Edit + false + + + + Document.СообщениеSMS.TabularSection.Адресаты + + View + false + + + Edit + false + + + + InformationRegister.УдалитьПраваПоЗначениямДоступа.Dimension.ЗначениеДоступа + + View + false + + + Edit + false + + + + Catalog.ДополнительныеОтчетыИОбработки.Attribute.Ответственный + + View + false + + + Edit + false + + + + Document.ЗапланированноеВзаимодействие.TabularSection.Участники + + View + false + + + Edit + false + + + + InformationRegister.НастройкиУчетныхЗаписейЭлектроннойПочты.Resource.ПодписьДляНовыхСообщенийФорматированныйДокумент + + View + false + + + Edit + false + + + + InformationRegister.НастройкиУчетныхЗаписейЭлектроннойПочты.Resource.ПомещатьПисьмоВПапкуПисьмаОснования + + View + false + + + Edit + false + + + + InformationRegister.НастройкиТранспортаОбмена.Resource.УдалитьWSПароль + + View + false + + + Edit + false + + + + InformationRegister.БуферОперацийСтатистики.Resource.ОперацияСтатистики + + View + false + + + Edit + false + + + + Catalog.ТелефонныйЗвонокПрисоединенныеФайлы.TabularSection.ЭлектронныеПодписи.Attribute.КомуВыданСертификат + + View + false + + + Edit + false + + + + Catalog.ВерсииФайлов.Attribute.ДатаМодификацииУниверсальная + + View + false + + + Edit + false + + + + InformationRegister.СостоянияРассылокОтчетов.Resource.СОшибками + + View + false + + + Edit + false + + + + DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.ТипУдаленияРегистрацииИзмененийДляУзловОбменаПослеВыгрузки + + View + false + + + Edit + false + + + + InformationRegister.СоставыГруппПользователей.Resource.Используется + + View + false + + + Edit + false + + + + Catalog.ГруппыПользователей.Attribute.Комментарий + + View + false + + + Edit + false + + + + Catalog.ГруппыДоступа.Attribute.ОсновнаяГруппаДоступаПоставляемогоПрофиля + + View + false + + + Edit + false + + + + ChartOfCharacteristicTypes.ВопросыДляАнкетирования.Attribute.АгрегироватьСуммуВОтчетах + + View + false + + + Edit + false + + + + InformationRegister.УдалитьРейтингАктивностиОбластейДанных.Resource.Рейтинг + + View + false + + + Edit + false + + + + Catalog.Пользователи.TabularSection.ДополнительныеРеквизиты + + View + false + + + Edit + false + + + + Catalog.УчетныеЗаписиЭлектроннойПочты.Attribute.ИспользоватьЗащищенноеСоединениеДляИсходящейПочты + + View + false + + + Edit + false + + + + InformationRegister.НастройкиОчисткиФайлов.Dimension.ТипВладельцаФайла + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоИсходящее.Attribute.Автор + + View + false + + + Edit + false + + + + Catalog.ВерсииФайлов.Attribute.РодительскаяВерсия + + View + false + + + Edit + false + + + + Catalog.ВерсииФайлов.Attribute.ИндексКартинки + + View + false + + + Edit + false + + + + DataProcessor.КонвертацияОбъектовXDTO.Attribute.РежимЗагрузкиДанных + + View + false + + + Edit + false + + + + Catalog.ВариантыОтчетов.Attribute.КлючВарианта + + View + false + + + Edit + false + + + + InformationRegister.РазрешенияНаИспользованиеВнешнихРесурсов.Attribute.ДополнениеРазрешения + + View + false + + + Edit + false + + + + Catalog.ВстречаПрисоединенныеФайлы.Attribute.Редактирует + + View + false + + + Edit + false + + + + Catalog.ВариантыОтветовАнкет.Attribute.ТребуетОткрытогоОтвета + + View + false + + + Edit + false + + + + InformationRegister.СоответствияОбъектовИнформационныхБаз.Dimension.УникальныйИдентификаторИсточника + + View + false + + + Edit + false + + + + Catalog.СертификатыКлючейЭлектроннойПодписиИШифрования.Attribute.Отчество + + View + false + + + Edit + false + + + + Catalog.ЗапланированноеВзаимодействиеПрисоединенныеФайлы.StandardAttribute.PredefinedDataName + + View + false + + + Edit + false + + + + Catalog.ЗапланированноеВзаимодействиеПрисоединенныеФайлы.StandardAttribute.Predefined + + View + false + + + Edit + false + + + + Catalog.ЗапланированноеВзаимодействиеПрисоединенныеФайлы.StandardAttribute.Ref + + View + false + + + Edit + false + + + + Catalog.ЗапланированноеВзаимодействиеПрисоединенныеФайлы.StandardAttribute.DeletionMark + + View + false + + + Edit + false + + + + Catalog.ЗапланированноеВзаимодействиеПрисоединенныеФайлы.StandardAttribute.IsFolder + + View + false + + + Edit + false + + + + Catalog.ЗапланированноеВзаимодействиеПрисоединенныеФайлы.StandardAttribute.Owner + + View + false + + + Edit + false + + + + Catalog.ЗапланированноеВзаимодействиеПрисоединенныеФайлы.StandardAttribute.Parent + + View + false + + + Edit + false + + + + Catalog.ЗапланированноеВзаимодействиеПрисоединенныеФайлы.StandardAttribute.Description + + View + false + + + Edit + false + + + + Catalog.ЗапланированноеВзаимодействиеПрисоединенныеФайлы.StandardAttribute.Code + + View + false + + + Edit + false + + + + DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.ДатаОкончания + + View + false + + + Edit + false + + + + DataProcessor.СопоставлениеОбъектовИнформационныхБаз.TabularSection.ТаблицаНеутвержденныхСвязей.Attribute.ТипПриемника + + View + false + + + Edit + false + + + + Document.СообщениеSMS.TabularSection.ДополнительныеРеквизиты + + View + false + + + Edit + false + + + + DataProcessor.КонвертацияОбъектовXDTO.Attribute.ДописыватьДанныеВПротоколОбмена + + View + false + + + Edit + false + + + + Catalog.РассылкиОтчетов.Attribute.ТипПолучателейРассылки + + View + false + + + Edit + false + + + + Catalog.ОчередьЗаданий.Attribute.НомерПопытки + + View + false + + + Edit + false + + + + InformationRegister.НастройкиВерсионированияОбъектов.Resource.СрокХраненияВерсий + + View + false + + + Edit + false + + + + InformationRegister.ПакетыИнформацииПриЗапуске.Resource.Состав + + View + false + + + Edit + false + + + + Catalog.ВидыКонтактнойИнформации.Attribute.Тип + + View + false + + + Edit + false + + + + InformationRegister.БуферОперацийСтатистики.Resource.ОбластьСтатистики + + View + false + + + Edit + false + + + + DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ИмяФайлаОбмена + + View + false + + + Edit + false + + + + InformationRegister.ПутиКПрограммамЭлектроннойПодписиИШифрованияНаСерверахLinux.Dimension.Программа + + View + false + + + Edit + false + + + + InformationRegister.УведомленияОПрочтении.Dimension.Письмо + + View + false + + + Edit + false + + + + DataProcessor.РезервноеКопированиеИБ.Attribute.КаталогСРезервнымиКопиями + + View + false + + + Edit + false + + + + InformationRegister.ЗамерыОперацииСтатистики.Resource.СуммаЗначений + + View + false + + + Edit + false + + + + Document.ЗапланированноеВзаимодействие.TabularSection.НаборыЗначенийДоступа.Attribute.НомерНабора + + View + false + + + Edit + false + + + + Catalog.СообщениеSMSПрисоединенныеФайлы.TabularSection.ЭлектронныеПодписи + + View + false + + + Edit + false + + + + ChartOfCharacteristicTypes.ДополнительныеРеквизитыИСведения.Attribute.Подсказка + + View + false + + + Edit + false + + + + DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.ПользовательИнформационнойБазыДляПодключения + + View + false + + + Edit + false + + + + Catalog.ЗапланированноеВзаимодействиеПрисоединенныеФайлы.TabularSection.ЭлектронныеПодписи.Attribute.УстановившийПодпись + + View + false + + + Edit + false + + + + Catalog.ВариантыОтчетов.TabularSection.Размещение.Attribute.УдалитьПодсистема + + View + false + + + Edit + false + + + + Catalog.ДополнительныеОтчетыИОбработки.TabularSection.Назначение.Attribute.УдалитьПолноеИмяОбъектаМетаданных + + View + false + + + Edit + false + + + + DataProcessor.СопоставлениеОбъектовИнформационныхБаз.Attribute.ИмяФайлаСообщенияОбмена + + View + false + + + Edit + false + + + + DataProcessor.СопоставлениеОбъектовИнформационныхБаз.TabularSection.ТаблицаАвтоматическиСопоставленныхОбъектов.Attribute.ИсточникИндексКартинки + + View + false + + + Edit + false + + + + Catalog.ВстречаПрисоединенныеФайлы.TabularSection.СертификатыШифрования.Attribute.Отпечаток + + View + false + + + Edit + false + + + + InformationRegister.УдалитьОбластиДанных.Attribute.ИдентификаторВыгрузки + + View + false + + + Edit + false + + + + InformationRegister.ВерсииПодсистем.Attribute.ПланОбновления + + View + false + + + Edit + false + + + + InformationRegister.УдалитьАдресныйКлассификатор.Dimension.ТипАдресногоЭлемента + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоИсходящее.TabularSection.ПолучателиОтвета + + View + false + + + Edit + false + + + + DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.ФлагОшибки + + View + false + + + Edit + false + + + + InformationRegister.ОбластиДанных.Attribute.ОшибкаОбработки + + View + false + + + Edit + false + + + + Catalog.Файлы.Attribute.ТекстХранилище + + View + false + + + Edit + false + + + + Catalog.ЭлектронноеПисьмоИсходящееПрисоединенныеФайлы.TabularSection.ЭлектронныеПодписи.Attribute.УстановившийПодпись + + View + false + + + Edit + false + + + + Document.Встреча.Attribute.СписокУчастников + + View + false + + + Edit + false + + + + Catalog.УчетныеЗаписиЭлектроннойПочты.Attribute.ИспользоватьЗащищенноеСоединениеДляВходящейПочты + + View + false + + + Edit + false + + + + DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.ИмяФайлаПротоколаОбменаЗагрузка + + View + false + + + Edit + false + + + + InformationRegister.РазрешенияНаИспользованиеВнешнихРесурсов.Attribute.ПредставлениеВладельца + + View + false + + + Edit + false + + + + Catalog.ПрофилиГруппДоступа.TabularSection.ЗначенияДоступа.Attribute.ЗначениеДоступа + + View + false + + + Edit + false + + + + Document.ЗапланированноеВзаимодействие.TabularSection.НаборыЗначенийДоступа.Attribute.ЗначениеДоступа + + View + false + + + Edit + false + + + + DataProcessor.ЗагрузкаКурсовВалют.Attribute.ОкончаниеПериодаЗагрузки + + View + false + + + Edit + false + + + + InformationRegister.ЗамерыВремениТехнологические.Dimension.КлючеваяОперация + + View + false + + + Edit + false + + + + Document.ТелефонныйЗвонок.Attribute.Важность + + View + false + + + Edit + false + + + + InformationRegister.БуферОперацийСтатистики.Dimension.ИдентификаторУдаления + + View + false + + + Edit + false + + + + InformationRegister.НаследованиеНастроекПравОбъектов.Resource.Наследовать + + View + false + + + Edit + false + + + + InformationRegister.ИсторияАдресныхОбъектов.Dimension.Идентификатор + + View + false + + + Edit + false + + + + InformationRegister.ОбщиеНастройкиУзловИнформационныхБаз.Attribute.НомерОтправленногоНачальнаяВыгрузкаДанных + + View + false + + + Edit + false + + + + DataProcessor.СопоставлениеОбъектовИнформационныхБаз.TabularSection.ТаблицаАвтоматическиСопоставленныхОбъектов.Attribute.ПриемникПоле1 + + View + false + + + Edit + false + + + + InformationRegister.ДополнительныеАдресныеСведения.Dimension.Идентификатор + + View + false + + + Edit + false + + + + InformationRegister.ЗамерыВремениТехнологические.StandardAttribute.Active + + View + false + + + Edit + false + + + + InformationRegister.ЗамерыВремениТехнологические.StandardAttribute.LineNumber + + View + false + + + Edit + false + + + + InformationRegister.ЗамерыВремениТехнологические.StandardAttribute.Recorder + + View + false + + + Edit + false + + + + InformationRegister.ЗамерыВремениТехнологические.StandardAttribute.Period + + View + false + + + Edit + false + + + + DataProcessor.НастройкаРезервногоКопированияИБ.Attribute.ПроводитьРезервноеКопированиеПриВосстановленииДанных + + View + false + + + Edit + false + + + + Document.Встреча.TabularSection.ДополнительныеРеквизиты.Attribute.Свойство + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоВходящее.Attribute.Тема + + View + false + + + Edit + false + + + + Catalog.ШаблоныАнкет.Attribute.Вступление + + View + false + + + Edit + false + + + + InformationRegister.НапоминанияПользователя.Attribute.ИмяРеквизитаИсточника + + View + false + + + Edit + false + + + + DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.КоличествоОбработанныхОбъектовДляОбновленияСтатуса + + View + false + + + Edit + false + + + + Catalog.СертификатыКлючейЭлектроннойПодписиИШифрования.Attribute.Должность + + View + false + + + Edit + false + + + + Catalog.ВерсииФайлов.Attribute.ПодписанЭП + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоИсходящее.TabularSection.НаборыЗначенийДоступа.Attribute.Чтение + + View + false + + + Edit + false + + + + Catalog.ЗапланированноеВзаимодействиеПрисоединенныеФайлы.TabularSection.ЭлектронныеПодписи + + View + false + + + Edit + false + + + + Catalog.ОчередьЗаданий.Attribute.ИсполняющееФоновоеЗадание + + View + false + + + Edit + false + + + + Document.Анкета.Attribute.ДатаРедактирования + + View + false + + + Edit + false + + + + InformationRegister.РейтингАктивностиОбластейДанных.StandardAttribute.Active + + View + false + + + Edit + false + + + + InformationRegister.РейтингАктивностиОбластейДанных.StandardAttribute.LineNumber + + View + false + + + Edit + false + + + + InformationRegister.РейтингАктивностиОбластейДанных.StandardAttribute.Recorder + + View + false + + + Edit + false + + + + InformationRegister.РейтингАктивностиОбластейДанных.StandardAttribute.Period + + View + false + + + Edit + false + + + + InformationRegister.РазрешенияНаИспользованиеВнешнихРесурсов.StandardAttribute.Active + + View + false + + + Edit + false + + + + InformationRegister.РазрешенияНаИспользованиеВнешнихРесурсов.StandardAttribute.LineNumber + + View + false + + + Edit + false + + + + InformationRegister.РазрешенияНаИспользованиеВнешнихРесурсов.StandardAttribute.Recorder + + View + false + + + Edit + false + + + + InformationRegister.РазрешенияНаИспользованиеВнешнихРесурсов.StandardAttribute.Period + + View + false + + + Edit + false + + + + InformationRegister.СоставыГруппПользователей.Dimension.Пользователь + + View + false + + + Edit + false + + + + DataProcessor.ОценкаПроизводительности.Attribute.Комментарий + + View + false + + + Edit + false + + + + InformationRegister.ИсторияАдресныхОбъектов.Dimension.КодГорода + + View + false + + + Edit + false + + + + Document.ЗапланированноеВзаимодействие.Attribute.Важность + + View + false + + + Edit + false + + + + Catalog.ПоставляемыеДанные.Attribute.ИдентификаторФайла + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоИсходящее.Attribute.Ответственный + + View + false + + + Edit + false + + + + InformationRegister.УдалитьГруппыЗначенийДоступа.Dimension.ГруппаОбновляемыхДанных + + View + false + + + Edit + false + + + + Catalog.ОчередьЗаданийОбластейДанных.Attribute.ИнтервалПовтораПриАварийномЗавершении + + View + false + + + Edit + false + + + + InformationRegister.ОтветыНаВопросыАнкет.Dimension.НомерЯчейки + + View + false + + + Edit + false + + + + Catalog.СообщениеSMSПрисоединенныеФайлы.Attribute.Размер + + View + false + + + Edit + false + + + + Catalog.Файлы.TabularSection.ДополнительныеРеквизиты.Attribute.Свойство + + View + false + + + Edit + false + + + + Catalog.Файлы.Attribute.ИндексКартинки + + View + false + + + Edit + false + + + + InformationRegister.УдалитьБлокировкиСеансовОбластиДанных.Resource.СообщениеБлокировки + + View + false + + + Edit + false + + + + InformationRegister.РежимыПодключенияВнешнихМодулей.Dimension.ИдентификаторПрограммногоМодуля + + View + false + + + Edit + false + + + + InformationRegister.БезопасноеХранилищеДанныхОбластейДанных.Dimension.Владелец + + View + false + + + Edit + false + + + + Catalog.ОчередьЗаданийОбластейДанных.Attribute.Расписание + + View + false + + + Edit + false + + + + DataProcessor.ПомощникСозданияОбменаДанными.Attribute.НаименованиеВторойБазы + + View + false + + + Edit + false + + + + Catalog.ДополнительныеОтчетыИОбработки.TabularSection.Разрешения.Attribute.Параметры + + View + false + + + Edit + false + + + + DataProcessor.ЗагрузкаКурсовВалют.TabularSection.СписокВалют + + View + false + + + Edit + false + + + + Catalog.ЭлектронноеПисьмоВходящееПрисоединенныеФайлы.Attribute.Размер + + View + false + + + Edit + false + + + + Catalog.ЗапланированноеВзаимодействиеПрисоединенныеФайлы.Attribute.ПутьКФайлу + + View + false + + + Edit + false + + + + InformationRegister.ОриентирыАдресныхОбъектов.Resource.Дополнительно + + View + false + + + Edit + false + + + + ExchangePlan.ОбменСообщениями.Attribute.Ведущая + + View + false + + + Edit + false + + + + Catalog.ЭлектронноеПисьмоИсходящееПрисоединенныеФайлы.TabularSection.ЭлектронныеПодписи + + View + false + + + Edit + false + + + + InformationRegister.БуферОперацийСтатистики.Resource.КомментарийСтатистики + + View + false + + + Edit + false + + + + Catalog.ВариантыОтчетов.Attribute.ТолькоДляАвтора + + View + false + + + Edit + false + + + + Catalog.ВидыКонтактнойИнформации.Attribute.ПроверятьКорректность + + View + false + + + Edit + false + + + + DataProcessor.ПоискИУстановкаОбновлений.Attribute.ИсточникОбновления + + View + false + + + Edit + false + + + + Catalog.ЭлектронноеПисьмоИсходящееПрисоединенныеФайлы.Attribute.ФайлХранилище + + View + false + + + Edit + false + + + + InformationRegister.ИсторияАдресныхОбъектов.Dimension.ТекущийКодСубъектаРФ + + View + false + + + Edit + false + + + + Catalog.СообщенияОбластейДанных.Attribute.ПодробноеПредставлениеОшибки + + View + false + + + Edit + false + + + + DataProcessor.ЗагрузкаКурсовВалют.TabularSection.СписокВалют.Attribute.Кратность + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоВходящее.Attribute.Размер + + View + false + + + Edit + false + + + + DataProcessor.ГрупповоеИзменениеРеквизитов.Attribute.РежимРазработчика + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоВходящее.TabularSection.НаборыЗначенийДоступа + + View + false + + + Edit + false + + + + BusinessProcess.Задание.Attribute.Содержание + + View + false + + + Edit + false + + + + InformationRegister.УдалитьЗамерыВремени.Resource.ВремяНачалаПроверка + + View + false + + + Edit + false + + + + Catalog.СценарииОбменовДанными.TabularSection.НастройкиОбмена + + View + false + + + Edit + false + + + + Catalog.УчетныеЗаписиЭлектроннойПочты.Attribute.ИспользоватьДляОтправки + + View + false + + + Edit + false + + + + InformationRegister.УдалитьОбластиДанных.Resource.Статус + + View + false + + + Edit + false + + + + Catalog.Организации.TabularSection.КонтактнаяИнформация.Attribute.ЗначенияПолей + + View + false + + + Edit + false + + + + Document.НазначениеОпросов.TabularSection.Респонденты.Attribute.Респондент + + View + false + + + Edit + false + + + + Catalog.ВнешниеПользователи.TabularSection.ДополнительныеРеквизиты.Attribute.Свойство + + View + false + + + Edit + false + + + + DataProcessor.ПоискИУстановкаОбновлений.TabularSection.ДоступныеОбновления.Attribute.Версия2Разряд + + View + false + + + Edit + false + + + + InformationRegister.ОбластиПерсональныхДанных.StandardAttribute.Active + + View + false + + + Edit + false + + + + InformationRegister.ОбластиПерсональныхДанных.StandardAttribute.LineNumber + + View + false + + + Edit + false + + + + InformationRegister.ОбластиПерсональныхДанных.StandardAttribute.Recorder + + View + false + + + Edit + false + + + + InformationRegister.ОбластиПерсональныхДанных.StandardAttribute.Period + + View + false + + + Edit + false + + + + ChartOfCharacteristicTypes.ВопросыДляАнкетирования.Attribute.Формулировка + + View + false + + + Edit + false + + + + InformationRegister.ПравилаДляОбменаДанными.Resource.ИмяФайлаОбработкиДляОтладкиЗагрузки + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоИсходящее.Attribute.ВключатьТелоИсходногоПисьма + + View + false + + + Edit + false + + + + Catalog.КлючевыеОперации.StandardAttribute.PredefinedDataName + + View + false + + + Edit + false + + + + Catalog.КлючевыеОперации.StandardAttribute.Predefined + + View + false + + + Edit + false + + + + Catalog.КлючевыеОперации.StandardAttribute.Ref + + View + false + + + Edit + false + + + + Catalog.КлючевыеОперации.StandardAttribute.DeletionMark + + View + false + + + Edit + false + + + + Catalog.КлючевыеОперации.StandardAttribute.IsFolder + + View + false + + + Edit + false + + + + Catalog.КлючевыеОперации.StandardAttribute.Owner + + View + false + + + Edit + false + + + + Catalog.КлючевыеОперации.StandardAttribute.Parent + + View + false + + + Edit + false + + + + Catalog.КлючевыеОперации.StandardAttribute.Description + + View + false + + + Edit + false + + + + Catalog.КлючевыеОперации.StandardAttribute.Code + + View + false + + + Edit + false + + + + DataProcessor.ПоискИУстановкаОбновлений.Attribute.РезультатОбновления + + View + false + + + Edit + false + + + + InformationRegister.ИсторияАдресныхОбъектов.Resource.АдресныйОбъект + + View + false + + + Edit + false + + + + Document.ТелефонныйЗвонок.TabularSection.НаборыЗначенийДоступа.Attribute.Чтение + + View + false + + + Edit + false + + + + Catalog.ОчередьЗаданийОбластейДанных.Attribute.Использование + + View + false + + + Edit + false + + + + Document.ТелефонныйЗвонок.Attribute.Ответственный + + View + false + + + Edit + false + + + + Catalog.ВстречаПрисоединенныеФайлы.Attribute.ФайлХранилище + + View + false + + + Edit + false + + + + Catalog.ТелефонныйЗвонокПрисоединенныеФайлы.Attribute.Зашифрован + + View + false + + + Edit + false + + + + Catalog.СценарииОбменовДанными.TabularSection.НастройкиОбмена.Attribute.ВыполняемоеДействие + + View + false + + + Edit + false + + + + InformationRegister.ЗамерыВремени.Dimension.НомерСеанса + + View + false + + + Edit + false + + + + Document.Встреча.Attribute.ДатаНачала + + View + false + + + Edit + false + + + + DataProcessor.ПомощникИнтерактивногоОбменаДанными.TabularSection.ИнформацияСтатистики.Attribute.КоличествоОбъектовВИсточнике + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоВходящее.TabularSection.НаборыЗначенийДоступа.Attribute.НомерНабора + + View + false + + + Edit + false + + + + Catalog.ГруппыДоступа.TabularSection.ВидыДоступа.Attribute.ВидДоступа + + View + false + + + Edit + false + + + + InformationRegister.ОбластиТребующиеОбработкиПоставляемыхДанных.StandardAttribute.Active + + View + false + + + Edit + false + + + + InformationRegister.ОбластиТребующиеОбработкиПоставляемыхДанных.StandardAttribute.LineNumber + + View + false + + + Edit + false + + + + InformationRegister.ОбластиТребующиеОбработкиПоставляемыхДанных.StandardAttribute.Recorder + + View + false + + + Edit + false + + + + InformationRegister.ОбластиТребующиеОбработкиПоставляемыхДанных.StandardAttribute.Period + + View + false + + + Edit + false + + + + Document.Встреча.TabularSection.Участники.Attribute.Контакт + + View + false + + + Edit + false + + + + InformationRegister.ПричиныИзмененияАдресныхСведений.Resource.Описание + + View + false + + + Edit + false + + + + Catalog.ДополнительныеОтчетыИОбработки.TabularSection.Команды.Attribute.Идентификатор + + View + false + + + Edit + false + + + + InformationRegister.УдалитьАдресныйКлассификатор.Resource.ПризнакАктуальности + + View + false + + + Edit + false + + + + Task.ЗадачаИсполнителя.Attribute.ГруппаИсполнителейЗадач + + View + false + + + Edit + false + + + + DataProcessor.РезервноеКопированиеИБ.Attribute.ВыполнитьРезервноеКопированиеСейчас + + View + false + + + Edit + false + + + + InformationRegister.ПравилаДляОбменаДанными.Resource.ИмяМакетаПравил + + View + false + + + Edit + false + + + + DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.ОткрыватьПротоколыОбменаПослеВыполненияОпераций + + View + false + + + Edit + false + + + + Catalog.ВариантыОтветовАнкет.StandardAttribute.PredefinedDataName + + View + false + + + Edit + false + + + + Catalog.ВариантыОтветовАнкет.StandardAttribute.Predefined + + View + false + + + Edit + false + + + + Catalog.ВариантыОтветовАнкет.StandardAttribute.Ref + + View + false + + + Edit + false + + + + Catalog.ВариантыОтветовАнкет.StandardAttribute.DeletionMark + + View + false + + + Edit + false + + + + Catalog.ВариантыОтветовАнкет.StandardAttribute.IsFolder + + View + false + + + Edit + false + + + + Catalog.ВариантыОтветовАнкет.StandardAttribute.Owner + + View + false + + + Edit + false + + + + Catalog.ВариантыОтветовАнкет.StandardAttribute.Parent + + View + false + + + Edit + false + + + + Catalog.ВариантыОтветовАнкет.StandardAttribute.Description + + View + false + + + Edit + false + + + + Catalog.ВариантыОтветовАнкет.StandardAttribute.Code + + View + false + + + Edit + false + + + + Catalog.РассылкиОтчетов.Attribute.ИспользоватьСетевойКаталог + + View + false + + + Edit + false + + + + InformationRegister.НастройкиТранспортаОбмена.Resource.FTPСжиматьФайлИсходящегоСообщения + + View + false + + + Edit + false + + + + InformationRegister.СоответствияОбъектовИнформационныхБаз.Dimension.УникальныйИдентификаторПриемника + + View + false + + + Edit + false + + + + DataProcessor.ПоискИУстановкаОбновлений.Attribute.КодПользователяСервераОбновлений + + View + false + + + Edit + false + + + + DataProcessor.СопоставлениеОбъектовИнформационныхБаз.TabularSection.ТаблицаАвтоматическиСопоставленныхОбъектов.Attribute.ПриемникПоле5 + + View + false + + + Edit + false + + + + Catalog.ВидыКонтактнойИнформации.Attribute.РазрешитьВводНесколькихЗначений + + View + false + + + Edit + false + + + + DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ИспользоватьТранзакции + + View + false + + + Edit + false + + + + Catalog.ПапкиФайлов.TabularSection.ДополнительныеРеквизиты.Attribute.Значение + + View + false + + + Edit + false + + + + Document.ЗапланированноеВзаимодействие.TabularSection.Участники.Attribute.КакСвязаться + + View + false + + + Edit + false + + + + Catalog.Заметки.StandardAttribute.PredefinedDataName + + View + false + + + Edit + false + + + + Catalog.Заметки.StandardAttribute.Predefined + + View + false + + + Edit + false + + + + Catalog.Заметки.StandardAttribute.Ref + + View + false + + + Edit + false + + + + Catalog.Заметки.StandardAttribute.DeletionMark + + View + false + + + Edit + false + + + + Catalog.Заметки.StandardAttribute.IsFolder + + View + false + + + Edit + false + + + + Catalog.Заметки.StandardAttribute.Owner + + View + false + + + Edit + false + + + + Catalog.Заметки.StandardAttribute.Parent + + View + false + + + Edit + false + + + + Catalog.Заметки.StandardAttribute.Description + + View + false + + + Edit + false + + + + Catalog.Заметки.StandardAttribute.Code + + View + false + + + Edit + false + + + + InformationRegister.УдалитьНаборыЗначенийДоступа.Dimension.ЗначениеДоступа + + View + false + + + Edit + false + + + + Catalog.СообщенияОбластейДанных.Attribute.КоличествоПопытокОбработкиСообщения + + View + false + + + Edit + false + + + + DataProcessor.ПомощникИнтерактивногоОбменаДанными.TabularSection.ИнформацияСтатистики.Attribute.ОдинКоМногим + + View + false + + + Edit + false + + + + InformationRegister.СведенияОПользователях.Resource.ДатаАвтоматическогоЗапрещенияВхода + + View + false + + + Edit + false + + + + Catalog.ТелефонныйЗвонокПрисоединенныеФайлы.Attribute.ТипХраненияФайла + + View + false + + + Edit + false + + + + Catalog.ЭлектронноеПисьмоВходящееПрисоединенныеФайлы.TabularSection.ЭлектронныеПодписи.Attribute.Комментарий + + View + false + + + Edit + false + + + + Catalog.РассылкиОтчетов.Attribute.FTPПассивноеСоединение + + View + false + + + Edit + false + + + + DataProcessor.КонвертацияОбъектовXDTO.Attribute.КлючСообщенияЖурналаРегистрации + + View + false + + + Edit + false + + + + Catalog.ЭлектронноеПисьмоВходящееПрисоединенныеФайлы.Attribute.Редактирует + + View + false + + + Edit + false + + + + Document.Анкета.TabularSection.Состав + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоИсходящее.Attribute.СписокПолучателейПисьма + + View + false + + + Edit + false + + + + InformationRegister.НаличиеПрисоединенныхФайлов.Resource.ЕстьФайлы + + View + false + + + Edit + false + + + + Catalog.ВстречаПрисоединенныеФайлы.Attribute.Автор + + View + false + + + Edit + false + + + + InformationRegister.СообщенияОбменаДанными.Resource.ДатаЗакладкиСообщения + + View + false + + + Edit + false + + + + InformationRegister.УдалитьВерсииПодсистем.Resource.Версия + + View + false + + + Edit + false + + + + DataProcessor.СопоставлениеОбъектовИнформационныхБаз.TabularSection.ТаблицаАвтоматическиСопоставленныхОбъектов.Attribute.ТипИсточника + + View + false + + + Edit + false + + + + InformationRegister.РежимыПодключенияВнешнихМодулей.Resource.БезопасныйРежим + + View + false + + + Edit + false + + + + InformationRegister.ДанныеПроизводственногоКалендаря.Resource.ВидДня + + View + false + + + Edit + false + + + + InformationRegister.ОбластиСтатистики.Dimension.СобиратьСтатистикуКонфигурации + + View + false + + + Edit + false + + + + DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.КоличествоОбъектовНаТранзакцию + + View + false + + + Edit + false + + + + Catalog.ГруппыДоступа.TabularSection.ВидыДоступа + + View + false + + + Edit + false + + + + Catalog.РассылкиОтчетов.Attribute.Архивировать + + View + false + + + Edit + false + + + + InformationRegister.ПравилаДляОбменаДанными.Resource.ИмяПланаОбменаИзПравил + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоИсходящее.TabularSection.ПолучателиПисьма.Attribute.Контакт + + View + false + + + Edit + false + + + + Task.ЗадачаИсполнителя.StandardAttribute.Executed + + View + false + + + Edit + false + + + + Task.ЗадачаИсполнителя.StandardAttribute.Description + + View + false + + + Edit + false + + + + Task.ЗадачаИсполнителя.StandardAttribute.RoutePoint + + View + false + + + Edit + false + + + + Task.ЗадачаИсполнителя.StandardAttribute.BusinessProcess + + View + false + + + Edit + false + + + + Task.ЗадачаИсполнителя.StandardAttribute.Ref + + View + false + + + Edit + false + + + + Task.ЗадачаИсполнителя.StandardAttribute.DeletionMark + + View + false + + + Edit + false + + + + Task.ЗадачаИсполнителя.StandardAttribute.Date + + View + false + + + Edit + false + + + + Task.ЗадачаИсполнителя.StandardAttribute.Number + + View + false + + + Edit + false + + + + InformationRegister.ДополнительныеСведения.StandardAttribute.Active + + View + false + + + Edit + false + + + + InformationRegister.ДополнительныеСведения.StandardAttribute.LineNumber + + View + false + + + Edit + false + + + + InformationRegister.ДополнительныеСведения.StandardAttribute.Recorder + + View + false + + + Edit + false + + + + InformationRegister.ДополнительныеСведения.StandardAttribute.Period + + View + false + + + Edit + false + + + + Document.СообщениеSMS.TabularSection.НаборыЗначенийДоступа.Attribute.ЗначениеДоступа + + View + false + + + Edit + false + + + + Catalog.Пользователи.TabularSection.КонтактнаяИнформация.Attribute.ЗначенияПолей + + View + false + + + Edit + false + + + + DataProcessor.СопоставлениеОбъектовИнформационныхБаз.TabularSection.ТаблицаАвтоматическиСопоставленныхОбъектов.Attribute.ПриемникПоле2 + + View + false + + + Edit + false + + + + DataProcessor.РегистрацияИзмененийДляОбменаДанными.Attribute.КонфигурацияПоддерживаетБСП + + View + false + + + Edit + false + + + + DataProcessor.ПомощникСозданияОбменаДанными.Attribute.ВидТранспортаСообщенийОбмена + + View + false + + + Edit + false + + + + Catalog.Календари.Attribute.ДатаНачала + + View + false + + + Edit + false + + + + Catalog.СообщенияСистемы.Attribute.ТелоСообщения + + View + false + + + Edit + false + + + + InformationRegister.ЗамерыОперацииСтатистики.Dimension.ОперацияСтатистики + + View + false + + + Edit + false + + + + InformationRegister.ПутиКПрограммамЭлектроннойПодписиИШифрованияНаСерверахLinux.StandardAttribute.Active + + View + false + + + Edit + false + + + + InformationRegister.ПутиКПрограммамЭлектроннойПодписиИШифрованияНаСерверахLinux.StandardAttribute.LineNumber + + View + false + + + Edit + false + + + + InformationRegister.ПутиКПрограммамЭлектроннойПодписиИШифрованияНаСерверахLinux.StandardAttribute.Recorder + + View + false + + + Edit + false + + + + InformationRegister.ПутиКПрограммамЭлектроннойПодписиИШифрованияНаСерверахLinux.StandardAttribute.Period + + View + false + + + Edit + false + + + + Catalog.ДополнительныеОтчетыИОбработки.Attribute.Комментарий + + View + false + + + Edit + false + + + + DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.ИмяСервераИнформационнойБазыДляПодключения + + View + false + + + Edit + false + + + + Catalog.ВерсииФайлов.Attribute.ТекстХранилище + + View + false + + + Edit + false + + + + Catalog.СообщениеSMSПрисоединенныеФайлы.Attribute.Редактирует + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоИсходящее.TabularSection.ПолучателиПисьма.Attribute.Представление + + View + false + + + Edit + false + + + + DataProcessor.ПоискИУстановкаОбновлений.TabularSection.ДоступныеОбновления.Attribute.ФайлОбновления + + View + false + + + Edit + false + + + + Catalog.ТелефонныйЗвонокПрисоединенныеФайлы.Attribute.СтатусИзвлеченияТекста + + View + false + + + Edit + false + + + + InformationRegister.СостоянияОбменовДанными.Dimension.ДействиеПриОбмене + + View + false + + + Edit + false + + + + Document.НазначениеОпросов.StandardAttribute.Posted + + View + false + + + Edit + false + + + + Document.НазначениеОпросов.StandardAttribute.Ref + + View + false + + + Edit + false + + + + Document.НазначениеОпросов.StandardAttribute.DeletionMark + + View + false + + + Edit + false + + + + Document.НазначениеОпросов.StandardAttribute.Date + + View + false + + + Edit + false + + + + Document.НазначениеОпросов.StandardAttribute.Number + + View + false + + + Edit + false + + + + DataProcessor.ПомощникСозданияОбменаДанными.Attribute.FILEСжиматьФайлИсходящегоСообщения + + View + false + + + Edit + false + + + + InformationRegister.ИсторияАдресныхОбъектов.Dimension.КодСубъектаРФ + + View + false + + + Edit + false + + + + InformationRegister.ПравилаДляОбменаДанными.Resource.ИсточникПравил + + View + false + + + Edit + false + + + + Catalog.ПрофилиГруппДоступа.TabularSection.ВидыДоступа + + View + false + + + Edit + false + + + + InformationRegister.ЗапросыРазрешенийНаИспользованиеВнешнихРесурсов.Resource.ИдентификаторПрограммногоМодуля + + View + false + + + Edit + false + + + + DataProcessor.ПоискИУстановкаОбновлений.Attribute.КодЗадачиПланировщика + + View + false + + + Edit + false + + + + Catalog.СценарииОбменовДанными.StandardAttribute.PredefinedDataName + + View + false + + + Edit + false + + + + Catalog.СценарииОбменовДанными.StandardAttribute.Predefined + + View + false + + + Edit + false + + + + Catalog.СценарииОбменовДанными.StandardAttribute.Ref + + View + false + + + Edit + false + + + + Catalog.СценарииОбменовДанными.StandardAttribute.DeletionMark + + View + false + + + Edit + false + + + + Catalog.СценарииОбменовДанными.StandardAttribute.IsFolder + + View + false + + + Edit + false + + + + Catalog.СценарииОбменовДанными.StandardAttribute.Owner + + View + false + + + Edit + false + + + + Catalog.СценарииОбменовДанными.StandardAttribute.Parent + + View + false + + + Edit + false + + + + Catalog.СценарииОбменовДанными.StandardAttribute.Description + + View + false + + + Edit + false + + + + Catalog.СценарииОбменовДанными.StandardAttribute.Code + + View + false + + + Edit + false + + + + Catalog.ВариантыОтчетов.TabularSection.Размещение + + View + false + + + Edit + false + + + + Catalog.ВнешниеПользователи.Attribute.СвойстваПользователяИБ + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоВходящее.TabularSection.ПолучателиПисьма.Attribute.Адрес + + View + false + + + Edit + false + + + + DataProcessor.ПомощникСозданияОбменаДанными.TabularSection.ИнформацияСтатистики.Attribute.ПроцентСопоставленияОбъектов + + View + false + + + Edit + false + + + + DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ЗагрузкаДанныхВыполняетсяВоВнешнемСоединении + + View + false + + + Edit + false + + + + InformationRegister.НастройкиПравОбъектов.Dimension.Объект + + View + false + + + Edit + false + + + + InformationRegister.РабочиеКаталогиФайлов.Resource.Путь + + View + false + + + Edit + false + + + + InformationRegister.УдалитьРейтингАктивностиОбластейДанных.Dimension.ОбластьДанных + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоВходящее.Attribute.ИдентификаторНаСервере + + View + false + + + Edit + false + + + + InformationRegister.ПравилаДляОбменаДанными.Resource.ИмяФайлаПравил + + View + false + + + Edit + false + + + + BusinessProcess.Задание.Attribute.ДополнительныйОбъектАдресации + + View + false + + + Edit + false + + + + InformationRegister.ПравилаДляОбменаДанными.Resource.РежимПротоколированияОбменаДанными + + View + false + + + Edit + false + + + + Catalog.РассылкиОтчетов.Attribute.FTPСервер + + View + false + + + Edit + false + + + + ChartOfCharacteristicTypes.ДополнительныеРеквизитыИСведения.Attribute.ФорматСвойства + + View + false + + + Edit + false + + + + Catalog.СертификатыКлючейЭлектроннойПодписиИШифрования.Attribute.Отозван + + View + false + + + Edit + false + + + + Catalog.ПредопределенныеВариантыОтчетов.TabularSection.Размещение + + View + false + + + Edit + false + + + + Catalog.ИдентификаторыОбъектовМетаданных.StandardAttribute.PredefinedDataName + + View + false + + + Edit + false + + + + Catalog.ИдентификаторыОбъектовМетаданных.StandardAttribute.Predefined + + View + false + + + Edit + false + + + + Catalog.ИдентификаторыОбъектовМетаданных.StandardAttribute.Ref + + View + false + + + Edit + false + + + + Catalog.ИдентификаторыОбъектовМетаданных.StandardAttribute.DeletionMark + + View + false + + + Edit + false + + + + Catalog.ИдентификаторыОбъектовМетаданных.StandardAttribute.IsFolder + + View + false + + + Edit + false + + + + Catalog.ИдентификаторыОбъектовМетаданных.StandardAttribute.Owner + + View + false + + + Edit + false + + + + Catalog.ИдентификаторыОбъектовМетаданных.StandardAttribute.Parent + + View + false + + + Edit + false + + + + Catalog.ИдентификаторыОбъектовМетаданных.StandardAttribute.Description + + View + false + + + Edit + false + + + + Catalog.ИдентификаторыОбъектовМетаданных.StandardAttribute.Code + + View + false + + + Edit + false + + + + DataProcessor.ПомощникСозданияОбменаДанными.Attribute.ВерсияКорреспондента_2_0_1_6 + + View + false + + + Edit + false + + + + Catalog.УчетныеЗаписиЭлектроннойПочты.Attribute.SMTPАутентификация + + View + false + + + Edit + false + + + + Catalog.КлассификаторБанковРФ.Attribute.Город + + View + false + + + Edit + false + + + + InformationRegister.ФайлыВРабочемКаталоге.StandardAttribute.Active + + View + false + + + Edit + false + + + + InformationRegister.ФайлыВРабочемКаталоге.StandardAttribute.LineNumber + + View + false + + + Edit + false + + + + InformationRegister.ФайлыВРабочемКаталоге.StandardAttribute.Recorder + + View + false + + + Edit + false + + + + InformationRegister.ФайлыВРабочемКаталоге.StandardAttribute.Period + + View + false + + + Edit + false + + + + InformationRegister.УдалитьБлокировкиСеансовОбластиДанных.Resource.КонецБлокировки + + View + false + + + Edit + false + + + + Catalog.ПоставляемыеДанные.Attribute.ТипХраненияФайла + + View + false + + + Edit + false + + + + InformationRegister.УдалитьОбластиДанных.Attribute.Повтор + + View + false + + + Edit + false + + + + DataProcessor.РегистрацияИзмененийДляОбменаДанными.Attribute.НастройкаАвторегистрацияПоследовательностей + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоВходящее.TabularSection.ПолучателиКопий + + View + false + + + Edit + false + + + + InformationRegister.НапоминанияПользователя.Attribute.Описание + + View + false + + + Edit + false + + + + DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.КаталогИнформационнойБазыДляПодключения + + View + false + + + Edit + false + + + + ChartOfCharacteristicTypes.ВопросыДляАнкетирования.Attribute.МинимальноеЗначение + + View + false + + + Edit + false + + + + InformationRegister.УдалитьАдресныйКлассификатор.StandardAttribute.Active + + View + false + + + Edit + false + + + + InformationRegister.УдалитьАдресныйКлассификатор.StandardAttribute.LineNumber + + View + false + + + Edit + false + + + + InformationRegister.УдалитьАдресныйКлассификатор.StandardAttribute.Recorder + + View + false + + + Edit + false + + + + InformationRegister.УдалитьАдресныйКлассификатор.StandardAttribute.Period + + View + false + + + Edit + false + + + + Catalog.ЗапланированноеВзаимодействиеПрисоединенныеФайлы.Attribute.ТекстХранилище + + View + false + + + Edit + false + + + + Catalog.УчетныеЗаписиЭлектроннойПочты.Attribute.ОставлятьКопииСообщенийНаСервере + + View + false + + + Edit + false + + + + Catalog.Календари.Attribute.УдалитьВидКалендаря + + View + false + + + Edit + false + + + + DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.РежимОбмена + + View + false + + + Edit + false + + + + Document.Встреча.Attribute.Автор + + View + false + + + Edit + false + + + + DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.ВыводВПротоколСообщенийОбОшибках + + View + false + + + Edit + false + + + + Catalog.ВнешниеПользователи.Attribute.ИдентификаторПользователяИБ + + View + false + + + Edit + false + + + + DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ОбработкиНастройкиВыгрузки + + View + false + + + Edit + false + + + + Catalog.ОчередьЗаданий.Attribute.ЗапланированныйМоментЗапуска + + View + false + + + Edit + false + + + + InformationRegister.ЗапросыРазрешенийНаИспользованиеВнешнихРесурсов.Attribute.ДобавляемыеРазрешения + + View + false + + + Edit + false + + + + Catalog.ДополнительныеОтчетыИОбработки.Attribute.БезопасныйРежим + + View + false + + + Edit + false + + + + InformationRegister.ПрисоединенныеФайлы.Resource.ХранимыйФайл + + View + false + + + Edit + false + + + + Catalog.РассылкиОтчетов.TabularSection.Получатели + + View + false + + + Edit + false + + + + InformationRegister.КомментарииСтатистики.Dimension.ИдентификаторКомментария + + View + false + + + Edit + false + + + + Document.СообщениеSMS.TabularSection.Адресаты.Attribute.Контакт + + View + false + + + Edit + false + + + + Catalog.ВнешниеПользователи.TabularSection.ДополнительныеРеквизиты.Attribute.Значение + + View + false + + + Edit + false + + + + InformationRegister.ИсполнителиЗадач.StandardAttribute.Active + + View + false + + + Edit + false + + + + InformationRegister.ИсполнителиЗадач.StandardAttribute.LineNumber + + View + false + + + Edit + false + + + + InformationRegister.ИсполнителиЗадач.StandardAttribute.Recorder + + View + false + + + Edit + false + + + + InformationRegister.ИсполнителиЗадач.StandardAttribute.Period + + View + false + + + Edit + false + + + + InformationRegister.АдресныеОбъекты.Dimension.КодГорода + + View + false + + + Edit + false + + + + InformationRegister.УдалитьПраваПоЗначениямДоступа.Resource.РаспространяетсяВИерархии + + View + false + + + Edit + false + + + + Catalog.ВстречаПрисоединенныеФайлы.Attribute.ТекстХранилище + + View + false + + + Edit + false + + + + InformationRegister.СостоянияПапокПисем.Resource.КоличествоНеРассмотрено + + View + false + + + Edit + false + + + + InformationRegister.КалендарныеГрафики.Dimension.Год + + View + false + + + Edit + false + + + + DataProcessor.ПоискИУстановкаОбновлений.TabularSection.ДоступныеОбновления.Attribute.ВерсияПлатформы + + View + false + + + Edit + false + + + + InformationRegister.БуферОперацийСтатистики.Resource.Значение + + View + false + + + Edit + false + + + + Catalog.СертификатыКлючейЭлектроннойПодписиИШифрования.Attribute.Организация + + View + false + + + Edit + false + + + + Document.ТелефонныйЗвонок.StandardAttribute.Posted + + View + false + + + Edit + false + + + + Document.ТелефонныйЗвонок.StandardAttribute.Ref + + View + false + + + Edit + false + + + + Document.ТелефонныйЗвонок.StandardAttribute.DeletionMark + + View + false + + + Edit + false + + + + Document.ТелефонныйЗвонок.StandardAttribute.Date + + View + false + + + Edit + false + + + + Document.ТелефонныйЗвонок.StandardAttribute.Number + + View + false + + + Edit + false + + + + Catalog.ВидыКонтактнойИнформации.Attribute.РедактированиеТолькоВДиалоге + + View + false + + + Edit + false + + + + InformationRegister.НаборыЗначенийДоступа.Resource.Чтение + + View + false + + + Edit + false + + + + Catalog.ВопросыШаблонаАнкеты.Attribute.Обязательный + + View + false + + + Edit + false + + + + InformationRegister.НастройкиВерсионированияОбъектов.StandardAttribute.Active + + View + false + + + Edit + false + + + + InformationRegister.НастройкиВерсионированияОбъектов.StandardAttribute.LineNumber + + View + false + + + Edit + false + + + + InformationRegister.НастройкиВерсионированияОбъектов.StandardAttribute.Recorder + + View + false + + + Edit + false + + + + InformationRegister.НастройкиВерсионированияОбъектов.StandardAttribute.Period + + View + false + + + Edit + false + + + + Catalog.РолиИсполнителей.StandardAttribute.PredefinedDataName + + View + false + + + Edit + false + + + + Catalog.РолиИсполнителей.StandardAttribute.Predefined + + View + false + + + Edit + false + + + + Catalog.РолиИсполнителей.StandardAttribute.Ref + + View + false + + + Edit + false + + + + Catalog.РолиИсполнителей.StandardAttribute.DeletionMark + + View + false + + + Edit + false + + + + Catalog.РолиИсполнителей.StandardAttribute.IsFolder + + View + false + + + Edit + false + + + + Catalog.РолиИсполнителей.StandardAttribute.Owner + + View + false + + + Edit + false + + + + Catalog.РолиИсполнителей.StandardAttribute.Parent + + View + false + + + Edit + false + + + + Catalog.РолиИсполнителей.StandardAttribute.Description + + View + false + + + Edit + false + + + + Catalog.РолиИсполнителей.StandardAttribute.Code + + View + false + + + Edit + false + + + + DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.КоличествоОбъектовКЗагрузкеВнешнееСоединение + + View + false + + + Edit + false + + + + DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.ОбработкиНастройкиВыгрузки + + View + false + + + Edit + false + + + + InformationRegister.СостоянияОбменовДанными.Resource.РезультатВыполненияОбмена + + View + false + + + Edit + false + + + + DataProcessor.БлокировкаРаботыПользователей.Attribute.ОкончаниеДействияБлокировки + + View + false + + + Edit + false + + + + Catalog.РассылкиОтчетов.TabularSection.Получатели.Attribute.Исключен + + View + false + + + Edit + false + + + + InformationRegister.ВерсииОбъектов.Dimension.НомерВерсии + + View + false + + + Edit + false + + + + InformationRegister.АдресныеОбъекты.Dimension.КодВнутригородскогоРайона + + View + false + + + Edit + false + + + + Catalog.СообщениеSMSПрисоединенныеФайлы.TabularSection.ЭлектронныеПодписи.Attribute.Сертификат + + View + false + + + Edit + false + + + + Catalog.ВерсииФайлов.Attribute.Комментарий + + View + false + + + Edit + false + + + + Document.ЗапланированноеВзаимодействие.Attribute.Описание + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоВходящее.TabularSection.НаборыЗначенийДоступа.Attribute.ЗначениеДоступа + + View + false + + + Edit + false + + + + BusinessProcess.Задание.Attribute.Проверяющий + + View + false + + + Edit + false + + + + Catalog.ОчередьЗаданийОбластейДанных.Attribute.КоличествоПовторовПриАварийномЗавершении + + View + false + + + Edit + false + + + + InformationRegister.ДампыПлатформы.Dimension.ДатаРегистрации + + View + false + + + Edit + false + + + + DataProcessor.ТранспортСообщенийОбменаEMAIL.Attribute.ШаблонИмениФайлаСообщения + + View + false + + + Edit + false + + + + DataProcessor.ОценкаПроизводительности.TabularSection.Производительность.Attribute.КлючеваяОперация + + View + false + + + Edit + false + + + + Catalog.Организации.TabularSection.КонтактнаяИнформация.Attribute.Город + + View + false + + + Edit + false + + + + Document.СообщениеSMS.TabularSection.Адресаты.Attribute.СостояниеСообщения + + View + false + + + Edit + false + + + + Catalog.Пользователи.TabularSection.ДополнительныеРеквизиты.Attribute.Свойство + + View + false + + + Edit + false + + + + InformationRegister.СостоянияКонтактовВзаимодействий.StandardAttribute.Active + + View + false + + + Edit + false + + + + InformationRegister.СостоянияКонтактовВзаимодействий.StandardAttribute.LineNumber + + View + false + + + Edit + false + + + + InformationRegister.СостоянияКонтактовВзаимодействий.StandardAttribute.Recorder + + View + false + + + Edit + false + + + + InformationRegister.СостоянияКонтактовВзаимодействий.StandardAttribute.Period + + View + false + + + Edit + false + + + + DataProcessor.ИнтерактивноеИзменениеВыгрузки.Attribute.АдресХранилищаФормы + + View + false + + + Edit + false + + + + InformationRegister.ПричиныИзмененияАдресныхСведений.StandardAttribute.Active + + View + false + + + Edit + false + + + + InformationRegister.ПричиныИзмененияАдресныхСведений.StandardAttribute.LineNumber + + View + false + + + Edit + false + + + + InformationRegister.ПричиныИзмененияАдресныхСведений.StandardAttribute.Recorder + + View + false + + + Edit + false + + + + InformationRegister.ПричиныИзмененияАдресныхСведений.StandardAttribute.Period + + View + false + + + Edit + false + + + + DataProcessor.ПомощникСозданияОбменаДанными.Attribute.ВариантРаботыМастера + + View + false + + + Edit + false + + + + DataProcessor.ПоискИУстановкаОбновлений.TabularSection.ДоступныеОбновления.Attribute.НомерДискаИТС + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоВходящее.TabularSection.ДополнительныеРеквизиты.Attribute.Значение + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоИсходящее.Attribute.УдалятьПослеОтправки + + View + false + + + Edit + false + + + + DataProcessor.ПомощникСозданияОбменаДанными.Attribute.ИспользоватьПараметрыТранспортаCOM + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоВходящее.Attribute.ИдентификаторСообщения + + View + false + + + Edit + false + + + + DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ПостроительОтчета + + View + false + + + Edit + false + + + + InformationRegister.ИсполнителиЗадач.Dimension.Исполнитель + + View + false + + + Edit + false + + + + Catalog.РассылкиОтчетов.Attribute.FTPЛогин + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоИсходящее.TabularSection.НаборыЗначенийДоступа.Attribute.Изменение + + View + false + + + Edit + false + + + + InformationRegister.НастройкиУчетныхЗаписейЭлектроннойПочты.Dimension.УчетнаяЗаписьЭлектроннойПочты + + View + false + + + Edit + false + + + + Catalog.ОчередьЗаданийОбластейДанных.Attribute.Шаблон + + View + false + + + Edit + false + + + + InformationRegister.УдалитьПраваПоЗначениямДоступа.Dimension.Таблица + + View + false + + + Edit + false + + + + InformationRegister.ПравилаДляОбменаДанными.Resource.ПравилаЗачитанныеКорреспондента + + View + false + + + Edit + false + + + + Catalog.СообщениеSMSПрисоединенныеФайлы.TabularSection.ЭлектронныеПодписи.Attribute.КомуВыданСертификат + + View + false + + + Edit + false + + + + InformationRegister.ДанныеПроизводственногоКалендаря.StandardAttribute.Active + + View + false + + + Edit + false + + + + InformationRegister.ДанныеПроизводственногоКалендаря.StandardAttribute.LineNumber + + View + false + + + Edit + false + + + + InformationRegister.ДанныеПроизводственногоКалендаря.StandardAttribute.Recorder + + View + false + + + Edit + false + + + + InformationRegister.ДанныеПроизводственногоКалендаря.StandardAttribute.Period + + View + false + + + Edit + false + + + + Catalog.ЗапланированноеВзаимодействиеПрисоединенныеФайлы.Attribute.Том + + View + false + + + Edit + false + + + + DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.ИмяФайлаОбработчиковСобытий + + View + false + + + Edit + false + + + + DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ДописыватьДанныеВПротоколОбмена + + View + false + + + Edit + false + + + + InformationRegister.НапоминанияПользователя.Dimension.Источник + + View + false + + + Edit + false + + + + InformationRegister.ЗамерыВремениТехнологические.Attribute.ДатаОкончания + + View + false + + + Edit + false + + + + DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.КоличествоЭлементовВТранзакцииПриВыгрузкеДляПлановОбмена + + View + false + + + Edit + false + + + + InformationRegister.ЗамерыОперацииСтатистики.Dimension.ИдентификаторУдаления + + View + false + + + Edit + false + + + + Catalog.СертификатыКлючейЭлектроннойПодписиИШифрования.Attribute.СостояниеЗаявления + + View + false + + + Edit + false + + + + DataProcessor.ОценкаПроизводительности.Attribute.ДатаОкончания + + View + false + + + Edit + false + + + + InformationRegister.НастройкиТранспортаОбмена.Resource.ВидТранспортаСообщенийОбменаПоУмолчанию + + View + false + + + Edit + false + + + + InformationRegister.КурсыВалют.Resource.Кратность + + View + false + + + Edit + false + + + + DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.РежимОбмена + + View + false + + + Edit + false + + + + InformationRegister.ЗамерыОбластиСтатистики.Resource.КоличествоЗначений + + View + false + + + Edit + false + + + + InformationRegister.ПраваРолей.Resource.Редактирование + + View + false + + + Edit + false + + + + Catalog.ОчередьЗаданий.Attribute.Ключ + + View + false + + + Edit + false + + + + InformationRegister.НастройкиТранспортаОбмена.Resource.COMИмяСервера1СПредприятия + + View + false + + + Edit + false + + + + DataProcessor.ТранспортСообщенийОбменаFILE.Attribute.ПарольАрхиваСообщенияОбмена + + View + false + + + Edit + false + + + + Catalog.ОчередьЗаданийОбластейДанных.Attribute.Параметры + + View + false + + + Edit + false + + + + DataProcessor.ТранспортСообщенийОбменаEMAIL.Attribute.EMAILСжиматьФайлИсходящегоСообщения + + View + false + + + Edit + false + + + + Catalog.ВстречаПрисоединенныеФайлы.Attribute.ИндексКартинки + + View + false + + + Edit + false + + + + Catalog.Заметки.Attribute.ДатаИзменения + + View + false + + + Edit + false + + + + Catalog.РассылкиОтчетов.TabularSection.Получатели.Attribute.Получатель + + View + false + + + Edit + false + + + + DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.АутентификацияWindowsИнформационнойБазыДляПодключения + + View + false + + + Edit + false + + + + Document.ТелефонныйЗвонок.Attribute.Удалить_РассмотретьПосле + + View + false + + + Edit + false + + + + DataProcessor.ПоискИУстановкаОбновлений.TabularSection.ДоступныеОбновления + + View + false + + + Edit + false + + + + Catalog.СообщениеSMSПрисоединенныеФайлы.TabularSection.ЭлектронныеПодписи.Attribute.Комментарий + + View + false + + + Edit + false + + + + Catalog.ВстречаПрисоединенныеФайлы.TabularSection.СертификатыШифрования.Attribute.Представление + + View + false + + + Edit + false + + + + InformationRegister.НаследованиеНастроекПравОбъектов.StandardAttribute.Active + + View + false + + + Edit + false + + + + InformationRegister.НаследованиеНастроекПравОбъектов.StandardAttribute.LineNumber + + View + false + + + Edit + false + + + + InformationRegister.НаследованиеНастроекПравОбъектов.StandardAttribute.Recorder + + View + false + + + Edit + false + + + + InformationRegister.НаследованиеНастроекПравОбъектов.StandardAttribute.Period + + View + false + + + Edit + false + + + + Catalog.РолиИсполнителей.Attribute.ВнешняяРоль + + View + false + + + Edit + false + + + + InformationRegister.РучныеИзмененияГрафиковРаботы.Resource.РучноеИзменение + + View + false + + + Edit + false + + + + InformationRegister.УдалитьНаборыЗначенийДоступа.Dimension.ВидДоступа + + View + false + + + Edit + false + + + + Catalog.ОчередьЗаданийОбластейДанных.Attribute.Ключ + + View + false + + + Edit + false + + + + InformationRegister.УдалитьЗамерыВремени.Resource.ВремяКонца + + View + false + + + Edit + false + + + + DataProcessor.СопоставлениеОбъектовИнформационныхБаз.TabularSection.ТаблицаАвтоматическиСопоставленныхОбъектов.Attribute.ИсточникПоле5 + + View + false + + + Edit + false + + + + Catalog.ВстречаПрисоединенныеФайлы.Attribute.СтатусИзвлеченияТекста + + View + false + + + Edit + false + + + + InformationRegister.УдалитьБлокировкиСеансовОбластиДанных.StandardAttribute.Active + + View + false + + + Edit + false + + + + InformationRegister.УдалитьБлокировкиСеансовОбластиДанных.StandardAttribute.LineNumber + + View + false + + + Edit + false + + + + InformationRegister.УдалитьБлокировкиСеансовОбластиДанных.StandardAttribute.Recorder + + View + false + + + Edit + false + + + + InformationRegister.УдалитьБлокировкиСеансовОбластиДанных.StandardAttribute.Period + + View + false + + + Edit + false + + + + Catalog.ВариантыОтчетов.TabularSection.Размещение.Attribute.СмТакже + + View + false + + + Edit + false + + + + BusinessProcess.Задание.Attribute.СрокИсполнения + + View + false + + + Edit + false + + + + DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.ТаблицаПравилВыгрузки + + View + false + + + Edit + false + + + + Catalog.ВариантыОтчетов.Attribute.Описание + + View + false + + + Edit + false + + + + InformationRegister.НастройкиВариантовОтчетов.Resource.Видимость + + View + false + + + Edit + false + + + + DataProcessor.ЗагрузкаКурсовВалют.TabularSection.СписокВалют.Attribute.ДатаКурса + + View + false + + + Edit + false + + + + InformationRegister.ЗамерыВремениТехнологические.Resource.ВремяВыполнения + + View + false + + + Edit + false + + + + Document.Встреча.Attribute.Ответственный + + View + false + + + Edit + false + + + + InformationRegister.НастройкиОчисткиФайлов.Resource.ПериодОчистки + + View + false + + + Edit + false + + + + Catalog.Файлы.TabularSection.СертификатыШифрования.Attribute.Представление + + View + false + + + Edit + false + + + + InformationRegister.УдалитьГруппыЗначенийДоступа.Dimension.ЗначениеДоступа + + View + false + + + Edit + false + + + + DataProcessor.ПомощникСозданияОбменаДанными.Attribute.WSПароль + + View + false + + + Edit + false + + + + InformationRegister.ЗамерыКомментарииСтатистики.Resource.КоличествоЗначений + + View + false + + + Edit + false + + + + DataProcessor.ПомощникИнтерактивногоОбменаДанными.TabularSection.ИнформацияСтатистики.Attribute.ТипИсточникаСтрокой + + View + false + + + Edit + false + + + + DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.ТипИнформационнойБазыДляПодключения + + View + false + + + Edit + false + + + + InformationRegister.ДополнительныеАдресныеСведения.Resource.КодИФНСФЛ + + View + false + + + Edit + false + + + + InformationRegister.УровниСокращенийАдресныхСведений.Dimension.Сокращение + + View + false + + + Edit + false + + + + InformationRegister.КомментарииСтатистики.Dimension.ХешНаименования + + View + false + + + Edit + false + + + + InformationRegister.УдалитьЗамерыВремени.Resource.ВремяНачала + + View + false + + + Edit + false + + + + Catalog.ВерсииФайлов.Attribute.Автор + + View + false + + + Edit + false + + + + Catalog.ГруппыДоступа.Attribute.Профиль + + View + false + + + Edit + false + + + + Catalog.ВариантыОтчетов.Attribute.Пользовательский + + View + false + + + Edit + false + + + + DataProcessor.ЗагрузкаКурсовВалют.TabularSection.СписокВалют.Attribute.Курс + + View + false + + + Edit + false + + + + Document.Встреча.TabularSection.НаборыЗначенийДоступа.Attribute.Уточнение + + View + false + + + Edit + false + + + + InformationRegister.УдалитьЗамерыВремени.Dimension.КлючеваяОперация + + View + false + + + Edit + false + + + + Catalog.ВариантыОтчетов.Attribute.Отчет + + View + false + + + Edit + false + + + + Catalog.ВерсииФайлов.Attribute.ТипХраненияФайла + + View + false + + + Edit + false + + + + DataProcessor.ТранспортСообщенийОбменаFTP.Attribute.FTPСоединениеПользователь + + View + false + + + Edit + false + + + + Document.Встреча.TabularSection.ДополнительныеРеквизиты.Attribute.Значение + + View + false + + + Edit + false + + + + ChartOfCharacteristicTypes.ДополнительныеРеквизитыИСведения.Attribute.ЗаголовокФормыВыбораЗначения + + View + false + + + Edit + false + + + + DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ВыводВПротоколИнформационныхСообщений + + View + false + + + Edit + false + + + + DataProcessor.ПомощникИнтерактивногоОбменаДанными.TabularSection.ИнформацияСтатистики.Attribute.ПоляПоиска + + View + false + + + Edit + false + + + + InformationRegister.ДанныеБизнесПроцессов.Resource.ДатаЗавершения + + View + false + + + Edit + false + + + + Catalog.ДополнительныеОтчетыИОбработки.Attribute.ИспользуетХранилищеВариантов + + View + false + + + Edit + false + + + + InformationRegister.НастройкиУчетныхЗаписейЭлектроннойПочты.Resource.ОтветственныйЗаВедениеПапок + + View + false + + + Edit + false + + + + Catalog.ВопросыШаблонаАнкеты.TabularSection.ПредопределенныеОтветы.Attribute.ЭлементарныйВопрос + + View + false + + + Edit + false + + + + InformationRegister.ОбластиТребующиеОбработкиПоставляемыхДанных.Dimension.КодОбработчика + + View + false + + + Edit + false + + + + Catalog.Пользователи.Attribute.Подготовлен + + View + false + + + Edit + false + + + + InformationRegister.УдалитьНастройкиВерсионированияОбъектов.Dimension.ТипОбъекта + + View + false + + + Edit + false + + + + DataProcessor.ТранспортСообщенийОбменаFTP.Attribute.ШаблонИмениФайлаСообщения + + View + false + + + Edit + false + + + + InformationRegister.БлокировкиСеансовОбластейДанных.Resource.КонецБлокировки + + View + false + + + Edit + false + + + + Catalog.СертификатыКлючейЭлектроннойПодписиИШифрования.Attribute.Фирма + + View + false + + + Edit + false + + + + ChartOfCharacteristicTypes.ВопросыДляАнкетирования.Attribute.МаксимальноеЗначение + + View + false + + + Edit + false + + + + Catalog.ОчередьЗаданийОбластейДанных.Attribute.СостояниеЗадания + + View + false + + + Edit + false + + + + InformationRegister.ОбщиеНастройкиУзловИнформационныхБаз.Dimension.УзелИнформационнойБазы + + View + false + + + Edit + false + + + + DataProcessor.ПомощникСозданияОбменаДанными.Attribute.ЭтоНастройкаРаспределеннойИнформационнойБазы + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоИсходящее.Attribute.Предмет + + View + false + + + Edit + false + + + + Catalog.ЭлектронноеПисьмоИсходящееПрисоединенныеФайлы.Attribute.Расширение + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоВходящее.TabularSection.ДополнительныеРеквизиты.Attribute.Свойство + + View + false + + + Edit + false + + + + InformationRegister.УдалитьОчередьЗаданий.Resource.ЗапланированныйМоментЗапуска + + View + false + + + Edit + false + + + + InformationRegister.ПраваРолей.StandardAttribute.Active + + View + false + + + Edit + false + + + + InformationRegister.ПраваРолей.StandardAttribute.LineNumber + + View + false + + + Edit + false + + + + InformationRegister.ПраваРолей.StandardAttribute.Recorder + + View + false + + + Edit + false + + + + InformationRegister.ПраваРолей.StandardAttribute.Period + + View + false + + + Edit + false + + + + Catalog.Файлы.Attribute.Описание + + View + false + + + Edit + false + + + + Catalog.ТелефонныйЗвонокПрисоединенныеФайлы.StandardAttribute.PredefinedDataName + + View + false + + + Edit + false + + + + Catalog.ТелефонныйЗвонокПрисоединенныеФайлы.StandardAttribute.Predefined + + View + false + + + Edit + false + + + + Catalog.ТелефонныйЗвонокПрисоединенныеФайлы.StandardAttribute.Ref + + View + false + + + Edit + false + + + + Catalog.ТелефонныйЗвонокПрисоединенныеФайлы.StandardAttribute.DeletionMark + + View + false + + + Edit + false + + + + Catalog.ТелефонныйЗвонокПрисоединенныеФайлы.StandardAttribute.IsFolder + + View + false + + + Edit + false + + + + Catalog.ТелефонныйЗвонокПрисоединенныеФайлы.StandardAttribute.Owner + + View + false + + + Edit + false + + + + Catalog.ТелефонныйЗвонокПрисоединенныеФайлы.StandardAttribute.Parent + + View + false + + + Edit + false + + + + Catalog.ТелефонныйЗвонокПрисоединенныеФайлы.StandardAttribute.Description + + View + false + + + Edit + false + + + + Catalog.ТелефонныйЗвонокПрисоединенныеФайлы.StandardAttribute.Code + + View + false + + + Edit + false + + + + Catalog.ДополнительныеОтчетыИОбработки.Attribute.Версия + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоИсходящее.TabularSection.НаборыЗначенийДоступа.Attribute.НомерНабора + + View + false + + + Edit + false + + + + DataProcessor.БлокировкаРаботыПользователей.Attribute.ЗапретитьРаботуРегламентныхЗаданий + + View + false + + + Edit + false + + + + DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.НеВыводитьНикакихИнформационныхСообщенийПользователю + + View + false + + + Edit + false + + + + Document.ЗапланированноеВзаимодействие.StandardAttribute.Posted + + View + false + + + Edit + false + + + + Document.ЗапланированноеВзаимодействие.StandardAttribute.Ref + + View + false + + + Edit + false + + + + Document.ЗапланированноеВзаимодействие.StandardAttribute.DeletionMark + + View + false + + + Edit + false + + + + Document.ЗапланированноеВзаимодействие.StandardAttribute.Date + + View + false + + + Edit + false + + + + Document.ЗапланированноеВзаимодействие.StandardAttribute.Number + + View + false + + + Edit + false + + + + BusinessProcess.Задание.Attribute.ОсновнойОбъектАдресацииПроверяющий + + View + false + + + Edit + false + + + + Catalog.ШаблоныЗаданийОчереди.StandardAttribute.PredefinedDataName + + View + false + + + Edit + false + + + + Catalog.ШаблоныЗаданийОчереди.StandardAttribute.Predefined + + View + false + + + Edit + false + + + + Catalog.ШаблоныЗаданийОчереди.StandardAttribute.Ref + + View + false + + + Edit + false + + + + Catalog.ШаблоныЗаданийОчереди.StandardAttribute.DeletionMark + + View + false + + + Edit + false + + + + Catalog.ШаблоныЗаданийОчереди.StandardAttribute.IsFolder + + View + false + + + Edit + false + + + + Catalog.ШаблоныЗаданийОчереди.StandardAttribute.Owner + + View + false + + + Edit + false + + + + Catalog.ШаблоныЗаданийОчереди.StandardAttribute.Parent + + View + false + + + Edit + false + + + + Catalog.ШаблоныЗаданийОчереди.StandardAttribute.Description + + View + false + + + Edit + false + + + + Catalog.ШаблоныЗаданийОчереди.StandardAttribute.Code + + View + false + + + Edit + false + + + + InformationRegister.УдалитьОчередьЗаданий.Resource.Параметры + + View + false + + + Edit + false + + + + Catalog.Файлы.Attribute.ТекущаяВерсияТом + + View + false + + + Edit + false + + + + InformationRegister.УдалитьАдресныйКлассификатор.Resource.АльтернативныеНазвания + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоВходящее.Attribute.ВнутреннийЗаголовок + + View + false + + + Edit + false + + + + Catalog.СообщениеSMSПрисоединенныеФайлы.Attribute.ДатаСоздания + + View + false + + + Edit + false + + + + Catalog.Файлы.Attribute.Редактирует + + View + false + + + Edit + false + + + + Catalog.ВариантыОтчетов.Attribute.НаименованияПараметровИОтборов + + View + false + + + Edit + false + + + + InformationRegister.ПакетыДляОтправки.Dimension.НомерПакета + + View + false + + + Edit + false + + + + Catalog.ТелефонныйЗвонокПрисоединенныеФайлы.TabularSection.ЭлектронныеПодписи + + View + false + + + Edit + false + + + + Catalog.СообщениеSMSПрисоединенныеФайлы.TabularSection.ЭлектронныеПодписи.Attribute.ДатаПодписи + + View + false + + + Edit + false + + + + InformationRegister.ИсторияАдресныхОбъектов.Dimension.КодВнутригородскогоРайона + + View + false + + + Edit + false + + + + Catalog.ВстречаПрисоединенныеФайлы.Attribute.ДатаМодификацииУниверсальная + + View + false + + + Edit + false + + + + InformationRegister.РезультатыОбменаДанными.Attribute.ДатаДокумента + + View + false + + + Edit + false + + + + InformationRegister.НастройкиТранспортаОбмена.Resource.EMAILМаксимальныйДопустимыйРазмерСообщения + + View + false + + + Edit + false + + + + InformationRegister.ПрисоединенныеФайлы.Dimension.ПрисоединенныйФайл + + View + false + + + Edit + false + + + + InformationRegister.СостоянияОбменовДанными.Dimension.УзелИнформационнойБазы + + View + false + + + Edit + false + + + + Catalog.ВариантыОтчетов.Attribute.НаименованияПолей + + View + false + + + Edit + false + + + + InformationRegister.ДанныеПроизводственногоКалендаря.Dimension.Дата + + View + false + + + Edit + false + + + + Document.Встреча.StandardAttribute.Posted + + View + false + + + Edit + false + + + + Document.Встреча.StandardAttribute.Ref + + View + false + + + Edit + false + + + + Document.Встреча.StandardAttribute.DeletionMark + + View + false + + + Edit + false + + + + Document.Встреча.StandardAttribute.Date + + View + false + + + Edit + false + + + + Document.Встреча.StandardAttribute.Number + + View + false + + + Edit + false + + + + DataProcessor.ТранспортСообщенийОбменаFTP.Attribute.FTPСоединениеМаксимальныйДопустимыйРазмерСообщения + + View + false + + + Edit + false + + + + Catalog.ПоставляемыеДанные.Attribute.ПутьКФайлу + + View + false + + + Edit + false + + + + DataProcessor.ТранспортСообщенийОбменаFTP.Attribute.FTPСоединениеПароль + + View + false + + + Edit + false + + + + Catalog.ОчередьЗаданийОбластейДанных.Attribute.ЗапланированныйМоментЗапуска + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоИсходящее.Attribute.ТипТекста + + View + false + + + Edit + false + + + + DataProcessor.СопоставлениеОбъектовИнформационныхБаз.TabularSection.ТаблицаСортировки.Attribute.Использование + + View + false + + + Edit + false + + + + Document.СообщениеSMS.TabularSection.НаборыЗначенийДоступа + + View + false + + + Edit + false + + + + Catalog.ЗапланированноеВзаимодействиеПрисоединенныеФайлы.TabularSection.СертификатыШифрования.Attribute.Представление + + View + false + + + Edit + false + + + + InformationRegister.УровниСокращенийАдресныхСведений.Resource.Значение + + View + false + + + Edit + false + + + + Catalog.Пользователи.StandardAttribute.PredefinedDataName + + View + false + + + Edit + false + + + + Catalog.Пользователи.StandardAttribute.Predefined + + View + false + + + Edit + false + + + + Catalog.Пользователи.StandardAttribute.Ref + + View + false + + + Edit + false + + + + Catalog.Пользователи.StandardAttribute.DeletionMark + + View + false + + + Edit + false + + + + Catalog.Пользователи.StandardAttribute.IsFolder + + View + false + + + Edit + false + + + + Catalog.Пользователи.StandardAttribute.Owner + + View + false + + + Edit + false + + + + Catalog.Пользователи.StandardAttribute.Parent + + View + false + + + Edit + false + + + + Catalog.Пользователи.StandardAttribute.Description + + View + false + + + Edit + false + + + + Catalog.Пользователи.StandardAttribute.Code + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоВходящее.Attribute.Кодировка + + View + false + + + Edit + false + + + + Catalog.УчетныеЗаписиЭлектроннойПочты.Attribute.УдалитьОтветственныйЗаОбработкуПисем + + View + false + + + Edit + false + + + + Catalog.СертификатыКлючейЭлектроннойПодписиИШифрования.Attribute.УсиленнаяЗащитаЗакрытогоКлюча + + View + false + + + Edit + false + + + + Catalog.ГруппыДоступа.TabularSection.Пользователи.Attribute.Пользователь + + View + false + + + Edit + false + + + + Catalog.РассылкиОтчетов.Attribute.СкрытыеКопии + + View + false + + + Edit + false + + + + InformationRegister.ДанныеПроизводственногоКалендаря.Resource.ДатаПереноса + + View + false + + + Edit + false + + + + InformationRegister.ТаблицыГруппДоступа.Attribute.ТипТаблицы + + View + false + + + Edit + false + + + + InformationRegister.ЗапросыРазрешенийНаИспользованиеВнешнихРесурсов.Resource.ТипПрограммногоМодуля + + View + false + + + Edit + false + + + + DataProcessor.ПомощникСозданияОбменаДанными.Attribute.ИспользоватьПараметрыТранспортаFILE + + View + false + + + Edit + false + + + + InformationRegister.НазначениеДополнительныхОбработок.Resource.ИспользоватьЗаполнениеОбъекта + + View + false + + + Edit + false + + + + DataProcessor.РегистрацияИзмененийДляОбменаДанными.Attribute.НастройкаАвторегистрацияДвижений + + View + false + + + Edit + false + + + + Catalog.ОчередьЗаданий.Attribute.ИмяМетода + + View + false + + + Edit + false + + + + Report.ДосьеКонтрагента + + Use + true + + + View + true + + + + Catalog.Файлы.Attribute.ТекущаяВерсия + + View + false + + + Edit + false + + + + InformationRegister.НастройкиТранспортаОбмена.Resource.WSИмяПользователя + + View + false + + + Edit + false + + + + InformationRegister.ВерсииОбъектов.Attribute.АвторВерсии + + View + false + + + Edit + false + + + + DataProcessor.ИнтерактивноеИзменениеВыгрузки.Attribute.УзелИнформационнойБазы + + View + false + + + Edit + false + + + + InformationRegister.ОбластиДанных.Resource.Статус + + View + false + + + Edit + false + + + + DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.КоличествоОбъектовНаТранзакцию + + View + false + + + Edit + false + + + + Catalog.Валюты.Attribute.ФормулаРасчетаКурса + + View + false + + + Edit + false + + + + Catalog.ПредопределенныеВариантыОтчетов.TabularSection.Размещение.Attribute.Подсистема + + View + false + + + Edit + false + + + + Catalog.ВариантыОтчетов.Attribute.ВидимостьПоУмолчанию + + View + false + + + Edit + false + + + + DataProcessor.ПомощникСозданияОбменаДанными.Attribute.ИспользоватьПараметрыТранспортаEMAIL + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоИсходящее.TabularSection.ПолучателиСкрытыхКопий.Attribute.Представление + + View + false + + + Edit + false + + + + DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.ВыводВОкноСообщенийИнформационныхСообщений + + View + false + + + Edit + false + + + + DataProcessor.РегистрацияИзмененийДляОбменаДанными.Attribute.ДоступнаРаботаРИБ + + View + false + + + Edit + false + + + + Catalog.ШаблоныЗаданийОчереди.Attribute.Ключ + + View + false + + + Edit + false + + + + Catalog.ЭлектронноеПисьмоВходящееПрисоединенныеФайлы.TabularSection.ЭлектронныеПодписи + + View + false + + + Edit + false + + + + Catalog.ТелефонныйЗвонокПрисоединенныеФайлы.TabularSection.ЭлектронныеПодписи.Attribute.ДатаПодписи + + View + false + + + Edit + false + + + + InformationRegister.БезопасноеХранилищеДанныхОбластейДанных.Resource.Данные + + View + false + + + Edit + false + + + + Catalog.ТелефонныйЗвонокПрисоединенныеФайлы.Attribute.ИндексКартинки + + View + false + + + Edit + false + + + + Catalog.ВстречаПрисоединенныеФайлы.Attribute.ВладелецФайла + + View + false + + + Edit + false + + + + InformationRegister.НастройкиТранспортаОбмена.Resource.EMAILСжиматьФайлИсходящегоСообщения + + View + false + + + Edit + false + + + + Catalog.Файлы.Attribute.ДатаСоздания + + View + false + + + Edit + false + + + + DataProcessor.ПомощникСозданияОбменаДанными.Attribute.WSURLВебСервиса + + View + false + + + Edit + false + + + + InformationRegister.КонтактыВзаимодействий.Dimension.Контакт + + View + false + + + Edit + false + + + + Catalog.ВерсииФайлов.TabularSection.ЭлектронныеПодписи.Attribute.Подпись + + View + false + + + Edit + false + + + + InformationRegister.НепринятыеКОбработкеПочтовымСерверомИсходящиеПисьма.Dimension.Письмо + + View + false + + + Edit + false + + + + DataProcessor.СопоставлениеОбъектовИнформационныхБаз.TabularSection.ТаблицаАвтоматическиСопоставленныхОбъектов.Attribute.ИсточникПоле2 + + View + false + + + Edit + false + + + + InformationRegister.ЗамерыВремени.Resource.Комментарий + + View + false + + + Edit + false + + + + BusinessProcess.Задание.Attribute.Важность + + View + false + + + Edit + false + + + + InformationRegister.СлужебныеАдресныеСведения.Dimension.Ключ + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоВходящее.TabularSection.НаборыЗначенийДоступа.Attribute.Изменение + + View + false + + + Edit + false + + + + DataProcessor.ПомощникСозданияОбменаДанными.TabularSection.ИнформацияСтатистики.Attribute.СинхронизироватьПоИдентификатору + + View + false + + + Edit + false + + + + Catalog.ДополнительныеОтчетыИОбработки.TabularSection.Назначение.Attribute.ОбъектНазначения + + View + false + + + Edit + false + + + + DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.СохраненныеНастройки + + View + false + + + Edit + false + + + + InformationRegister.ДанныеБизнесПроцессов.Resource.Наименование + + View + false + + + Edit + false + + + + Document.Анкета.TabularSection.Состав.Attribute.ЭлементарныйВопрос + + View + false + + + Edit + false + + + + Catalog.ПрофилиГруппДоступа.TabularSection.Роли + + View + false + + + Edit + false + + + + Document.СообщениеSMS.Attribute.Автор + + View + false + + + Edit + false + + + + Document.СообщениеSMS.Attribute.ДатаКогдаОтправить + + View + false + + + Edit + false + + + + DataProcessor.ПоискИУстановкаОбновлений.Attribute.ДатаВремяОбновления + + View + false + + + Edit + false + + + + DataProcessor.ПомощникСозданияОбменаДанными.Attribute.ИмяФайлаНастроекСинхронизацииДанныхДляЗагрузки + + View + false + + + Edit + false + + + + Catalog.ВерсииФайлов.Attribute.ПутьКФайлу + + View + false + + + Edit + false + + + + Catalog.ВерсииФайлов.Attribute.Том + + View + false + + + Edit + false + + + + Catalog.ЭлектронноеПисьмоВходящееПрисоединенныеФайлы.TabularSection.ЭлектронныеПодписи.Attribute.Подпись + + View + false + + + Edit + false + + + + Catalog.ПапкиФайлов.TabularSection.ДополнительныеРеквизиты.Attribute.Свойство + + View + false + + + Edit + false + + + + InformationRegister.АдресныеОбъекты.Dimension.КодПодчиненногоЭлемента + + View + false + + + Edit + false + + + + InformationRegister.НастройкиОтправителя.StandardAttribute.Active + + View + false + + + Edit + false + + + + InformationRegister.НастройкиОтправителя.StandardAttribute.LineNumber + + View + false + + + Edit + false + + + + InformationRegister.НастройкиОтправителя.StandardAttribute.Recorder + + View + false + + + Edit + false + + + + InformationRegister.НастройкиОтправителя.StandardAttribute.Period + + View + false + + + Edit + false + + + + Task.ЗадачаИсполнителя.Attribute.АвторСтрокой + + View + false + + + Edit + false + + + + Catalog.Заметки.Attribute.ДляРабочегоСтола + + View + false + + + Edit + false + + + + DataProcessor.ПомощникСозданияОбменаДанными.TabularSection.ИнформацияСтатистики.Attribute.ИспользоватьПредварительныйПросмотр + + View + false + + + Edit + false + + + + InformationRegister.ВерсииПодсистем.StandardAttribute.Active + + View + false + + + Edit + false + + + + InformationRegister.ВерсииПодсистем.StandardAttribute.LineNumber + + View + false + + + Edit + false + + + + InformationRegister.ВерсииПодсистем.StandardAttribute.Recorder + + View + false + + + Edit + false + + + + InformationRegister.ВерсииПодсистем.StandardAttribute.Period + + View + false + + + Edit + false + + + + Catalog.Файлы.TabularSection.ДополнительныеРеквизиты.Attribute.Значение + + View + false + + + Edit + false + + + + Catalog.ВопросыШаблонаАнкеты.Attribute.ЭлементарныйВопрос + + View + false + + + Edit + false + + + + InformationRegister.ВерсииПодсистем.Dimension.ИмяПодсистемы + + View + false + + + Edit + false + + + + Catalog.ВидыКонтактнойИнформации.Attribute.ЗапретитьРедактированиеПользователем + + View + false + + + Edit + false + + + + InformationRegister.АдресныеОбъекты.Resource.КодКЛАДР + + View + false + + + Edit + false + + + + Catalog.ПользовательскиеНастройкиОтчетов.StandardAttribute.PredefinedDataName + + View + false + + + Edit + false + + + + Catalog.ПользовательскиеНастройкиОтчетов.StandardAttribute.Predefined + + View + false + + + Edit + false + + + + Catalog.ПользовательскиеНастройкиОтчетов.StandardAttribute.Ref + + View + false + + + Edit + false + + + + Catalog.ПользовательскиеНастройкиОтчетов.StandardAttribute.DeletionMark + + View + false + + + Edit + false + + + + Catalog.ПользовательскиеНастройкиОтчетов.StandardAttribute.IsFolder + + View + false + + + Edit + false + + + + Catalog.ПользовательскиеНастройкиОтчетов.StandardAttribute.Owner + + View + false + + + Edit + false + + + + Catalog.ПользовательскиеНастройкиОтчетов.StandardAttribute.Parent + + View + false + + + Edit + false + + + + Catalog.ПользовательскиеНастройкиОтчетов.StandardAttribute.Description + + View + false + + + Edit + false + + + + Catalog.ПользовательскиеНастройкиОтчетов.StandardAttribute.Code + + View + false + + + Edit + false + + + + Catalog.ПравилаОбработкиЭлектроннойПочты.Attribute.ПредставлениеОтбора + + View + false + + + Edit + false + + + + InformationRegister.СостоянияОбменовДанными.StandardAttribute.Active + + View + false + + + Edit + false + + + + InformationRegister.СостоянияОбменовДанными.StandardAttribute.LineNumber + + View + false + + + Edit + false + + + + InformationRegister.СостоянияОбменовДанными.StandardAttribute.Recorder + + View + false + + + Edit + false + + + + InformationRegister.СостоянияОбменовДанными.StandardAttribute.Period + + View + false + + + Edit + false + + + + Document.НазначениеОпросов.Attribute.ДатаНачала + + View + false + + + Edit + false + + + + Catalog.ГруппыДоступа.Attribute.Пользователь + + View + false + + + Edit + false + + + + Catalog.Организации.TabularSection.КонтактнаяИнформация.Attribute.ДоменноеИмяСервера + + View + false + + + Edit + false + + + + Catalog.ВерсииФайлов.Attribute.ПолноеНаименование + + View + false + + + Edit + false + + + + DataProcessor.ПомощникСозданияОбменаДанными.Attribute.ПрефиксИнформационнойБазыПриемникаУстановлен + + View + false + + + Edit + false + + + + InformationRegister.ПользовательскиеНастройкиДоступаКОбработкам.Dimension.ДополнительныйОтчетИлиОбработка + + View + false + + + Edit + false + + + + Catalog.СообщениеSMSПрисоединенныеФайлы.Attribute.ВладелецФайла + + View + false + + + Edit + false + + + + DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.ИмяФайлаВнешнейОбработкиОбработчиковСобытий + + View + false + + + Edit + false + + + + InformationRegister.УдалитьНастройкиВерсионированияОбъектов.StandardAttribute.Active + + View + false + + + Edit + false + + + + InformationRegister.УдалитьНастройкиВерсионированияОбъектов.StandardAttribute.LineNumber + + View + false + + + Edit + false + + + + InformationRegister.УдалитьНастройкиВерсионированияОбъектов.StandardAttribute.Recorder + + View + false + + + Edit + false + + + + InformationRegister.УдалитьНастройкиВерсионированияОбъектов.StandardAttribute.Period + + View + false + + + Edit + false + + + + Catalog.ДополнительныеОтчетыИОбработки.Attribute.Вид + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоВходящее.Attribute.ВзаимодействиеОснование + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоИсходящее.Attribute.ИдентификаторСообщения + + View + false + + + Edit + false + + + + Catalog.СценарииОбменовДанными.Attribute.ИспользоватьРегламентноеЗадание + + View + false + + + Edit + false + + + + DataProcessor.КонвертацияОбъектовXDTO.Attribute.ВыгружатьТолькоРазрешенные + + View + false + + + Edit + false + + + + InformationRegister.ПользовательскиеМакетыПечати.Attribute.Использование + + View + false + + + Edit + false + + + + Catalog.Валюты.Attribute.ОсновнаяВалюта + + View + false + + + Edit + false + + + + InformationRegister.ПредметыПапкиВзаимодействий.StandardAttribute.Active + + View + false + + + Edit + false + + + + InformationRegister.ПредметыПапкиВзаимодействий.StandardAttribute.LineNumber + + View + false + + + Edit + false + + + + InformationRegister.ПредметыПапкиВзаимодействий.StandardAttribute.Recorder + + View + false + + + Edit + false + + + + InformationRegister.ПредметыПапкиВзаимодействий.StandardAttribute.Period + + View + false + + + Edit + false + + + + InformationRegister.РезультатыОбменаДанными.Dimension.ПроблемныйОбъект + + View + false + + + Edit + false + + + + Catalog.ИдентификаторыОбъектовМетаданных.Attribute.ЗначениеПустойСсылки + + View + false + + + Edit + false + + + + InformationRegister.ОбластиДанных.StandardAttribute.Active + + View + false + + + Edit + false + + + + InformationRegister.ОбластиДанных.StandardAttribute.LineNumber + + View + false + + + Edit + false + + + + InformationRegister.ОбластиДанных.StandardAttribute.Recorder + + View + false + + + Edit + false + + + + InformationRegister.ОбластиДанных.StandardAttribute.Period + + View + false + + + Edit + false + + + + Document.ЗапланированноеВзаимодействие.Attribute.ВзаимодействиеОснование + + View + false + + + Edit + false + + + + BusinessProcess.Задание.Attribute.Исполнитель + + View + false + + + Edit + false + + + + DataProcessor.ТранспортСообщенийОбменаFTP.Attribute.ПарольАрхиваСообщенияОбмена + + View + false + + + Edit + false + + + + Document.НазначениеОпросов.TabularSection.Респонденты + + View + false + + + Edit + false + + + + InformationRegister.ЗначенияГруппДоступаПоУмолчанию.StandardAttribute.Active + + View + false + + + Edit + false + + + + InformationRegister.ЗначенияГруппДоступаПоУмолчанию.StandardAttribute.LineNumber + + View + false + + + Edit + false + + + + InformationRegister.ЗначенияГруппДоступаПоУмолчанию.StandardAttribute.Recorder + + View + false + + + Edit + false + + + + InformationRegister.ЗначенияГруппДоступаПоУмолчанию.StandardAttribute.Period + + View + false + + + Edit + false + + + + Catalog.СертификатыКлючейЭлектроннойПодписиИШифрования.Attribute.Пользователь + + View + false + + + Edit + false + + + + Task.ЗадачаИсполнителя.Attribute.СрокИсполнения + + View + false + + + Edit + false + + + + Catalog.ИдентификаторыОбъектовМетаданных.Attribute.БезДанных + + View + false + + + Edit + false + + + + InformationRegister.УдалитьВерсииПодсистем.StandardAttribute.Active + + View + false + + + Edit + false + + + + InformationRegister.УдалитьВерсииПодсистем.StandardAttribute.LineNumber + + View + false + + + Edit + false + + + + InformationRegister.УдалитьВерсииПодсистем.StandardAttribute.Recorder + + View + false + + + Edit + false + + + + InformationRegister.УдалитьВерсииПодсистем.StandardAttribute.Period + + View + false + + + Edit + false + + + + InformationRegister.ВерсииОбъектов.Attribute.ВерсияПроигнорирована + + View + false + + + Edit + false + + + + DataProcessor.КонвертацияОбъектовXDTO.Attribute.ВыводВПротоколИнформационныхСообщений + + View + false + + + Edit + false + + + + DataProcessor.ЗагрузкаКурсовВалют.Attribute.НачалоПериодаЗагрузки + + View + false + + + Edit + false + + + + InformationRegister.НастройкиВариантовОтчетов.Dimension.Вариант + + View + false + + + Edit + false + + + + InformationRegister.НастройкиВерсионированияОбъектов.Resource.Использовать + + View + false + + + Edit + false + + + + Catalog.ГруппыДоступа.Attribute.Ответственный + + View + false + + + Edit + false + + + + Document.ЗапланированноеВзаимодействие.Attribute.Ответственный + + View + false + + + Edit + false + + + + DataProcessor.ПомощникСозданияОбменаДанными.Attribute.FTPСоединениеМаксимальныйДопустимыйРазмерСообщения + + View + false + + + Edit + false + + + + Catalog.ПоставляемыеДанные.Attribute.Том + + View + false + + + Edit + false + + + + DataProcessor.ИнтерактивноеИзменениеВыгрузки.Attribute.КомпоновщикОтбораВсехДокументов + + View + false + + + Edit + false + + + + DataProcessor.ЗагрузкаКурсовВалют.TabularSection.СписокВалют.Attribute.СимвольныйКод + + View + false + + + Edit + false + + + + Document.ТелефонныйЗвонок.Attribute.Комментарий + + View + false + + + Edit + false + + + + DataProcessor.НастройкаРезервногоКопированияИБ.Attribute.КоличествоКопий + + View + false + + + Edit + false + + + + Catalog.ЭлектронноеПисьмоИсходящееПрисоединенныеФайлы.Attribute.СтатусИзвлеченияТекста + + View + false + + + Edit + false + + + + DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.РежимПротоколированияОбменаДанными + + View + false + + + Edit + false + + + + Catalog.СценарииОбменовДанными.TabularSection.НастройкиОбмена.Attribute.УзелИнформационнойБазы + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоИсходящее.TabularSection.ПолучателиПисьма + + View + false + + + Edit + false + + + + InformationRegister.УдалитьОбластиКРезервномуКопированию.Dimension.ОбластьДанных + + View + false + + + Edit + false + + + + InformationRegister.ДополнительныеАдресныеСведения.Resource.КодУчасткаИФНСЮЛ + + View + false + + + Edit + false + + + + InformationRegister.ПравилаДляОбменаДанными.Resource.ПравилаЗачитанные + + View + false + + + Edit + false + + + + DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.НеЗадаватьВопросПриЗагрузкеДанныхПриОткрытииОбработки + + View + false + + + Edit + false + + + + Catalog.ВидыКонтактнойИнформации.Attribute.Используется + + View + false + + + Edit + false + + + + Catalog.РассылкиОтчетов.Attribute.УдалитьПарольАрхива + + View + false + + + Edit + false + + + + Catalog.ПрофилиГруппДоступа.TabularSection.ЗначенияДоступа.Attribute.ВидДоступа + + View + false + + + Edit + false + + + + InformationRegister.ОбластиСтатистики.Dimension.ХешНаименования + + View + false + + + Edit + false + + + + Catalog.Пользователи.TabularSection.КонтактнаяИнформация.Attribute.АдресЭП + + View + false + + + Edit + false + + + + Catalog.Календари.TabularSection.РасписаниеРаботы.Attribute.НомерДня + + View + false + + + Edit + false + + + + Document.ЗапланированноеВзаимодействие.TabularSection.НаборыЗначенийДоступа.Attribute.Уточнение + + View + false + + + Edit + false + + + + Catalog.Календари.TabularSection.РасписаниеРаботы.Attribute.ВремяОкончания + + View + false + + + Edit + false + + + + Catalog.ГруппыПользователей.TabularSection.Состав + + View + false + + + Edit + false + + + + Catalog.СертификатыКлючейЭлектроннойПодписиИШифрования.Attribute.Программа + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоИсходящее.TabularSection.ПолучателиКопий.Attribute.Адрес + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоИсходящее.TabularSection.ДополнительныеРеквизиты.Attribute.Значение + + View + false + + + Edit + false + + + + Catalog.Пользователи.TabularSection.ДополнительныеРеквизиты.Attribute.Значение + + View + false + + + Edit + false + + + + Catalog.ВстречаПрисоединенныеФайлы.TabularSection.ЭлектронныеПодписи.Attribute.Отпечаток + + View + false + + + Edit + false + + + + InformationRegister.УдалитьОчередьИзвлеченияТекста.Dimension.ИсточникТекста + + View + false + + + Edit + false + + + + Catalog.ДополнительныеОтчетыИОбработки.Attribute.ИспользоватьДляФормыОбъекта + + View + false + + + Edit + false + + + + DataProcessor.ОценкаПроизводительности.Attribute.Шаг + + View + false + + + Edit + false + + + + Catalog.УчетныеЗаписиЭлектроннойПочты.Attribute.ПортСервераИсходящейПочты + + View + false + + + Edit + false + + + + DataProcessor.РезервноеКопированиеИБ.Attribute.КодТипаРезервногоКопирования + + View + false + + + Edit + false + + + + InformationRegister.ОбщиеНастройкиУзловИнформационныхБаз.Resource.ПользовательДляСинхронизацииДанных + + View + false + + + Edit + false + + + + Document.СообщениеSMS.StandardAttribute.Posted + + View + false + + + Edit + false + + + + Document.СообщениеSMS.StandardAttribute.Ref + + View + false + + + Edit + false + + + + Document.СообщениеSMS.StandardAttribute.DeletionMark + + View + false + + + Edit + false + + + + Document.СообщениеSMS.StandardAttribute.Date + + View + false + + + Edit + false + + + + Document.СообщениеSMS.StandardAttribute.Number + + View + false + + + Edit + false + + + + DataProcessor.КонвертацияОбъектовXDTO.Attribute.ИспользоватьТранзакции + + View + false + + + Edit + false + + + + Catalog.ШаблоныЗаданийОчереди.Attribute.Расписание + + View + false + + + Edit + false + + + + Catalog.ЭлектронноеПисьмоВходящееПрисоединенныеФайлы.TabularSection.ЭлектронныеПодписи.Attribute.Сертификат + + View + false + + + Edit + false + + + + InformationRegister.НастройкиТранспортаОбмена.Resource.FTPСоединениеМаксимальныйДопустимыйРазмерСообщения + + View + false + + + Edit + false + + + + Document.ТелефонныйЗвонок.Attribute.АбонентКакСвязаться + + View + false + + + Edit + false + + + + Catalog.ВстречаПрисоединенныеФайлы.Attribute.Размер + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоИсходящее.Attribute.Тема + + View + false + + + Edit + false + + + + DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.ЗаписыватьРегистрыНаборамиЗаписей + + View + false + + + Edit + false + + + + Catalog.ТелефонныйЗвонокПрисоединенныеФайлы.TabularSection.ЭлектронныеПодписи.Attribute.Подпись + + View + false + + + Edit + false + + + + InformationRegister.ОбластиДанных.Attribute.Вариант + + View + false + + + Edit + false + + + + DataProcessor.КонвертацияОбъектовXDTO.Attribute.КоличествоОбъектовНаТранзакцию + + View + false + + + Edit + false + + + + Catalog.ПользовательскиеНастройкиОтчетов.Attribute.Пользователь + + View + false + + + Edit + false + + + + InformationRegister.ИсторияАдресныхОбъектов.Resource.Операция + + View + false + + + Edit + false + + + + Catalog.Файлы.Attribute.Автор + + View + false + + + Edit + false + + + + InformationRegister.СоответствияОбъектовИнформационныхБаз.Attribute.ОбъектВыгруженПоСсылке + + View + false + + + Edit + false + + + + InformationRegister.ДанныеБизнесПроцессов.Resource.Стартован + + View + false + + + Edit + false + + + + Document.Встреча.TabularSection.ДополнительныеРеквизиты + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоВходящее.Attribute.УведомитьОДоставке + + View + false + + + Edit + false + + + + InformationRegister.ЗависимостиПравДоступа.Dimension.ТипВедущейТаблицы + + View + false + + + Edit + false + + + + Catalog.ТелефонныйЗвонокПрисоединенныеФайлы.TabularSection.ЭлектронныеПодписи.Attribute.Отпечаток + + View + false + + + Edit + false + + + + Document.ЗапланированноеВзаимодействие.Attribute.Удалить_Рассмотрено + + View + false + + + Edit + false + + + + Catalog.РассылкиОтчетов.Attribute.ТекстПисьмаВФорматеHTML + + View + false + + + Edit + false + + + + InformationRegister.ПравилаДляОбменаДанными.Resource.НеОстанавливатьПоОшибке + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоИсходящее.TabularSection.НаборыЗначенийДоступа + + View + false + + + Edit + false + + + + Catalog.ПрограммыЭлектроннойПодписиИШифрования.Attribute.АлгоритмШифрования + + View + false + + + Edit + false + + + + Document.ТелефонныйЗвонок.TabularSection.НаборыЗначенийДоступа + + View + false + + + Edit + false + + + + InformationRegister.НазначениеДополнительныхОбработок.Dimension.УдалитьТипОбъекта + + View + false + + + Edit + false + + + + Catalog.СообщениеSMSПрисоединенныеФайлы.Attribute.ТипХраненияФайла + + View + false + + + Edit + false + + + + InformationRegister.ОперацииСтатистики.Resource.Наименование + + View + false + + + Edit + false + + + + Catalog.СертификатыКлючейЭлектроннойПодписиИШифрования.Attribute.Отпечаток + + View + false + + + Edit + false + + + + Catalog.Пользователи.TabularSection.КонтактнаяИнформация.Attribute.НомерТелефонаБезКодов + + View + false + + + Edit + false + + + + InformationRegister.ОчередьИзвлеченияТекста.StandardAttribute.Active + + View + false + + + Edit + false + + + + InformationRegister.ОчередьИзвлеченияТекста.StandardAttribute.LineNumber + + View + false + + + Edit + false + + + + InformationRegister.ОчередьИзвлеченияТекста.StandardAttribute.Recorder + + View + false + + + Edit + false + + + + InformationRegister.ОчередьИзвлеченияТекста.StandardAttribute.Period + + View + false + + + Edit + false + + + + DataProcessor.ПомощникСозданияОбменаДанными.Attribute.FTPСоединениеПассивноеСоединение + + View + false + + + Edit + false + + + + Catalog.УчетныеЗаписиЭлектроннойПочты.StandardAttribute.PredefinedDataName + + View + false + + + Edit + false + + + + Catalog.УчетныеЗаписиЭлектроннойПочты.StandardAttribute.Predefined + + View + false + + + Edit + false + + + + Catalog.УчетныеЗаписиЭлектроннойПочты.StandardAttribute.Ref + + View + false + + + Edit + false + + + + Catalog.УчетныеЗаписиЭлектроннойПочты.StandardAttribute.DeletionMark + + View + false + + + Edit + false + + + + Catalog.УчетныеЗаписиЭлектроннойПочты.StandardAttribute.IsFolder + + View + false + + + Edit + false + + + + Catalog.УчетныеЗаписиЭлектроннойПочты.StandardAttribute.Owner + + View + false + + + Edit + false + + + + Catalog.УчетныеЗаписиЭлектроннойПочты.StandardAttribute.Parent + + View + false + + + Edit + false + + + + Catalog.УчетныеЗаписиЭлектроннойПочты.StandardAttribute.Description + + View + false + + + Edit + false + + + + Catalog.УчетныеЗаписиЭлектроннойПочты.StandardAttribute.Code + + View + false + + + Edit + false + + + + InformationRegister.ПравилаДляОбменаДанными.Dimension.ИмяПланаОбмена + + View + false + + + Edit + false + + + + InformationRegister.НастройкиТранспортаОбмена.Resource.FTPСоединениеПорт + + View + false + + + Edit + false + + + + InformationRegister.ЗамерыВремени.Attribute.ДатаЗаписи + + View + false + + + Edit + false + + + + DataProcessor.ЗагрузкаКурсовВалют.TabularSection.СписокВалют.Attribute.Представление + + View + false + + + Edit + false + + + + Document.СообщениеSMS.Attribute.ОтправлятьВТранслите + + View + false + + + Edit + false + + + + InformationRegister.УведомленияОПрочтении.Resource.ТребуетсяОтправка + + View + false + + + Edit + false + + + + DataProcessor.РезервноеКопированиеИБ.Attribute.ПроводитьРезервноеКопированиеПриВосстановленииДанных + + View + false + + + Edit + false + + + + InformationRegister.ЗамерыВремени.Attribute.Пользователь + + View + false + + + Edit + false + + + + Catalog.ВстречаПрисоединенныеФайлы.Attribute.ПодписанЭП + + View + false + + + Edit + false + + + + InformationRegister.ИзмененияОбщихДанныхУзлов.Resource.НомерСообщения + + View + false + + + Edit + false + + + + DataProcessor.ПомощникИнтерактивногоОбменаДанными.Attribute.ВидТранспортаСообщенийОбмена + + View + false + + + Edit + false + + + + DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.РежимОтладки + + View + false + + + Edit + false + + + + InformationRegister.ОбластиДанных.Attribute.ИдентификаторВыгрузки + + View + false + + + Edit + false + + + + Catalog.ВариантыОтчетов.Attribute.ТипОтчета + + View + false + + + Edit + false + + + + InformationRegister.НастройкиТранспортаОбмена.Resource.COMКаталогИнформационнойБазы + + View + false + + + Edit + false + + + + Catalog.ШаблоныАнкет.Attribute.РедактированиеШаблонаЗавершено + + View + false + + + Edit + false + + + + Catalog.СертификатыКлючейЭлектроннойПодписиИШифрования.Attribute.ПользовательОповещенОСрокеДействия + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоИсходящее.Attribute.ОтображатьТелоИсходногоПисьма + + View + false + + + Edit + false + + + + DataProcessor.ПомощникИнтерактивногоОбменаДанными.TabularSection.ИнформацияСтатистики.Attribute.СинхронизироватьПоИдентификатору + + View + false + + + Edit + false + + + + InformationRegister.ЗапросыРазрешенийНаИспользованиеВнешнихРесурсов.StandardAttribute.Active + + View + false + + + Edit + false + + + + InformationRegister.ЗапросыРазрешенийНаИспользованиеВнешнихРесурсов.StandardAttribute.LineNumber + + View + false + + + Edit + false + + + + InformationRegister.ЗапросыРазрешенийНаИспользованиеВнешнихРесурсов.StandardAttribute.Recorder + + View + false + + + Edit + false + + + + InformationRegister.ЗапросыРазрешенийНаИспользованиеВнешнихРесурсов.StandardAttribute.Period + + View + false + + + Edit + false + + + + InformationRegister.НепринятыеКОбработкеПочтовымСерверомИсходящиеПисьма.Resource.КоличествоПопыток + + View + false + + + Edit + false + + + + Catalog.Заметки.Attribute.Содержание + + View + false + + + Edit + false + + + + Catalog.Файлы.TabularSection.СертификатыШифрования + + View + false + + + Edit + false + + + + Catalog.Календари.Attribute.ВладелецГрафика + + View + false + + + Edit + false + + + + InformationRegister.ПоставляемыеДанныеТребующиеОбработки.Resource.КоличествоПопыток + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоИсходящее.TabularSection.ПолучателиОтвета.Attribute.Представление + + View + false + + + Edit + false + + + + InformationRegister.НастройкиУчетныхЗаписейЭлектроннойПочты.Resource.ВключатьПодписьПриОтветеПересылке + + View + false + + + Edit + false + + + + DataProcessor.ТранспортСообщенийОбменаEMAIL.Attribute.ИспользоватьВременныйКаталогДляОтправкиИПриемаСообщений + + View + false + + + Edit + false + + + + Catalog.НаборыДополнительныхРеквизитовИСведений.TabularSection.ДополнительныеРеквизиты.Attribute.ПометкаУдаления + + View + false + + + Edit + false + + + + DataProcessor.ГрупповоеИзменениеРеквизитов.Attribute.ПоказыватьСлужебныеРеквизиты + + View + false + + + Edit + false + + + + Document.Встреча.Attribute.МестоПроведенияВстречи + + View + false + + + Edit + false + + + + InformationRegister.ОперацииСтатистики.Dimension.ИдентификаторОперации + + View + false + + + Edit + false + + + + Catalog.ВстречаПрисоединенныеФайлы.Attribute.ТипХраненияФайла + + View + false + + + Edit + false + + + + InformationRegister.СтатистикаКонфигурации.Dimension.ОперацияСтатистики + + View + false + + + Edit + false + + + + InformationRegister.ПользовательскиеНастройкиДоступаКОбработкам.StandardAttribute.Active + + View + false + + + Edit + false + + + + InformationRegister.ПользовательскиеНастройкиДоступаКОбработкам.StandardAttribute.LineNumber + + View + false + + + Edit + false + + + + InformationRegister.ПользовательскиеНастройкиДоступаКОбработкам.StandardAttribute.Recorder + + View + false + + + Edit + false + + + + InformationRegister.ПользовательскиеНастройкиДоступаКОбработкам.StandardAttribute.Period + + View + false + + + Edit + false + + + + InformationRegister.СостоянияКонтактовВзаимодействий.Resource.ДатаПоследнегоВзаимодействия + + View + false + + + Edit + false + + + + InformationRegister.УдалитьОчередьЗаданий.Resource.ИсполняющееФоновоеЗадание + + View + false + + + Edit + false + + + + InformationRegister.ПравилаДляОбменаДанными.Resource.РежимОтладки + + View + false + + + Edit + false + + + + BusinessProcess.Задание.Attribute.ЗадачаИсточник + + View + false + + + Edit + false + + + + InformationRegister.ПакетыИнформацииПриЗапуске.StandardAttribute.Active + + View + false + + + Edit + false + + + + InformationRegister.ПакетыИнформацииПриЗапуске.StandardAttribute.LineNumber + + View + false + + + Edit + false + + + + InformationRegister.ПакетыИнформацииПриЗапуске.StandardAttribute.Recorder + + View + false + + + Edit + false + + + + InformationRegister.ПакетыИнформацииПриЗапуске.StandardAttribute.Period + + View + false + + + Edit + false + + + + Catalog.РассылкиОтчетов.Attribute.ИмяАрхива + + View + false + + + Edit + false + + + + BusinessProcess.Задание.Attribute.Состояние + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоИсходящее.Attribute.ИдентификаторыОснований + + View + false + + + Edit + false + + + + Catalog.СообщениеSMSПрисоединенныеФайлы.TabularSection.ЭлектронныеПодписи.Attribute.УстановившийПодпись + + View + false + + + Edit + false + + + + InformationRegister.БлокировкиСеансовОбластейДанных.Resource.НачалоБлокировки + + View + false + + + Edit + false + + + + DataProcessor.ПомощникСозданияОбменаДанными.Attribute.ВерсияКорреспондента_2_1_1_7 + + View + false + + + Edit + false + + + + Catalog.ЭлектронноеПисьмоИсходящееПрисоединенныеФайлы.Attribute.Размер + + View + false + + + Edit + false + + + + Catalog.ГруппыДоступа.TabularSection.ВидыДоступа.Attribute.ВсеРазрешены + + View + false + + + Edit + false + + + + Catalog.РассылкиОтчетов.Attribute.ИспользоватьFTPРесурс + + View + false + + + Edit + false + + + + Catalog.ВстречаПрисоединенныеФайлы.Attribute.ДатаСоздания + + View + false + + + Edit + false + + + + DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ИмяФайлаПравилОбмена + + View + false + + + Edit + false + + + + InformationRegister.ПравилаДляОбменаДанными.Resource.ИнформацияОПравилах + + View + false + + + Edit + false + + + + InformationRegister.УдалитьОбластиКРезервномуКопированию.StandardAttribute.Active + + View + false + + + Edit + false + + + + InformationRegister.УдалитьОбластиКРезервномуКопированию.StandardAttribute.LineNumber + + View + false + + + Edit + false + + + + InformationRegister.УдалитьОбластиКРезервномуКопированию.StandardAttribute.Recorder + + View + false + + + Edit + false + + + + InformationRegister.УдалитьОбластиКРезервномуКопированию.StandardAttribute.Period + + View + false + + + Edit + false + + + + InformationRegister.ПредметыПапкиВзаимодействий.Resource.Предмет + + View + false + + + Edit + false + + + + InformationRegister.ПраваРолей.Resource.ИнтерактивноеДобавление + + View + false + + + Edit + false + + + + BusinessProcess.Задание.Attribute.ОсновнойОбъектАдресации + + View + false + + + Edit + false + + + + Document.Встреча.Attribute.ВзаимодействиеОснование + + View + false + + + Edit + false + + + + InformationRegister.ЗапросыРазрешенийНаИспользованиеВнешнихРесурсов.Resource.ТипВладельца + + View + false + + + Edit + false + + + + Catalog.ЗапланированноеВзаимодействиеПрисоединенныеФайлы.TabularSection.ЭлектронныеПодписи.Attribute.ИмяФайлаПодписи + + View + false + + + Edit + false + + + + DataProcessor.ОценкаПроизводительности.TabularSection.Производительность.Attribute.Приоритет + + View + false + + + Edit + false + + + + Catalog.ОчередьЗаданий.StandardAttribute.PredefinedDataName + + View + false + + + Edit + false + + + + Catalog.ОчередьЗаданий.StandardAttribute.Predefined + + View + false + + + Edit + false + + + + Catalog.ОчередьЗаданий.StandardAttribute.Ref + + View + false + + + Edit + false + + + + Catalog.ОчередьЗаданий.StandardAttribute.DeletionMark + + View + false + + + Edit + false + + + + Catalog.ОчередьЗаданий.StandardAttribute.IsFolder + + View + false + + + Edit + false + + + + Catalog.ОчередьЗаданий.StandardAttribute.Owner + + View + false + + + Edit + false + + + + Catalog.ОчередьЗаданий.StandardAttribute.Parent + + View + false + + + Edit + false + + + + Catalog.ОчередьЗаданий.StandardAttribute.Description + + View + false + + + Edit + false + + + + Catalog.ОчередьЗаданий.StandardAttribute.Code + + View + false + + + Edit + false + + + + InformationRegister.ЗамерыОбластиСтатистики.StandardAttribute.Active + + View + false + + + Edit + false + + + + InformationRegister.ЗамерыОбластиСтатистики.StandardAttribute.LineNumber + + View + false + + + Edit + false + + + + InformationRegister.ЗамерыОбластиСтатистики.StandardAttribute.Recorder + + View + false + + + Edit + false + + + + InformationRegister.ЗамерыОбластиСтатистики.StandardAttribute.Period + + View + false + + + Edit + false + + + + Catalog.РассылкиОтчетов.Attribute.FTPКаталог + + View + false + + + Edit + false + + + + InformationRegister.КалендарныеГрафики.Resource.ДеньВключенВГрафик + + View + false + + + Edit + false + + + + Catalog.СообщенияСистемы.Attribute.Заблокировано + + View + false + + + Edit + false + + + + InformationRegister.НастройкиКомандПечати.Dimension.Владелец + + View + false + + + Edit + false + + + + Document.СообщениеSMS.TabularSection.НаборыЗначенийДоступа.Attribute.НомерНабора + + View + false + + + Edit + false + + + + InformationRegister.ИсторияАдресныхОбъектов.Resource.ОкончаниеДействияЗаписи + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоИсходящее.Attribute.ИдентификаторОснования + + View + false + + + Edit + false + + + + InformationRegister.ДополнительныеАдресныеСведения.StandardAttribute.Active + + View + false + + + Edit + false + + + + InformationRegister.ДополнительныеАдресныеСведения.StandardAttribute.LineNumber + + View + false + + + Edit + false + + + + InformationRegister.ДополнительныеАдресныеСведения.StandardAttribute.Recorder + + View + false + + + Edit + false + + + + InformationRegister.ДополнительныеАдресныеСведения.StandardAttribute.Period + + View + false + + + Edit + false + + + + InformationRegister.НаследованиеНастроекПравОбъектов.Attribute.УровеньИспользования + + View + false + + + Edit + false + + + + Catalog.ВерсииФайлов.Attribute.ДатаСоздания + + View + false + + + Edit + false + + + + Catalog.ГруппыВнешнихПользователей.TabularSection.Роли.Attribute.Роль + + View + false + + + Edit + false + + + + InformationRegister.УдалитьНастройкиВерсионированияОбъектов.Resource.Вариант + + View + false + + + Edit + false + + + + Catalog.Файлы.Attribute.ДатаЗаема + + View + false + + + Edit + false + + + + InformationRegister.СостоянияПредметовВзаимодействий.Dimension.Предмет + + View + false + + + Edit + false + + + + InformationRegister.РезультатыОбменаДанными.Resource.Причина + + View + false + + + Edit + false + + + + InformationRegister.ОриентирыАдресныхОбъектов.StandardAttribute.Active + + View + false + + + Edit + false + + + + InformationRegister.ОриентирыАдресныхОбъектов.StandardAttribute.LineNumber + + View + false + + + Edit + false + + + + InformationRegister.ОриентирыАдресныхОбъектов.StandardAttribute.Recorder + + View + false + + + Edit + false + + + + InformationRegister.ОриентирыАдресныхОбъектов.StandardAttribute.Period + + View + false + + + Edit + false + + + + DataProcessor.ПомощникСозданияОбменаДанными.TabularSection.ИнформацияСтатистики.Attribute.КоличествоОбъектовВПриемнике + + View + false + + + Edit + false + + + + DataProcessor.ПоискИУстановкаОбновлений.Attribute.РежимОбновления + + View + false + + + Edit + false + + + + InformationRegister.НепринятыеКОбработкеПочтовымСерверомИсходящиеПисьма.Attribute.ИнформацияООшибке + + View + false + + + Edit + false + + + + DataProcessor.ТранспортСообщенийОбменаFTP.Attribute.ИспользоватьВременныйКаталогДляОтправкиИПриемаСообщений + + View + false + + + Edit + false + + + + DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.ОбработкиНастройкиЗагрузки + + View + false + + + Edit + false + + + + Document.Анкета.StandardAttribute.Posted + + View + false + + + Edit + false + + + + Document.Анкета.StandardAttribute.Ref + + View + false + + + Edit + false + + + + Document.Анкета.StandardAttribute.DeletionMark + + View + false + + + Edit + false + + + + Document.Анкета.StandardAttribute.Date + + View + false + + + Edit + false + + + + Document.Анкета.StandardAttribute.Number + + View + false + + + Edit + false + + + + Document.СообщениеSMS.Attribute.ДатаАктуальностиОтправки + + View + false + + + Edit + false + + + + Catalog.УчетныеЗаписиЭлектроннойПочты.Attribute.СерверВходящейПочты + + View + false + + + Edit + false + + + + DataProcessor.ЗагрузкаКурсовВалют.TabularSection.СписокВалют.Attribute.Загружать + + View + false + + + Edit + false + + + + InformationRegister.УдалитьГруппыЗначенийДоступа.Dimension.ГруппаЗначенийДоступа + + View + false + + + Edit + false + + + + Document.ЗапланированноеВзаимодействие.Attribute.Предмет + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоИсходящее.Attribute.Удалить_РассмотретьПосле + + View + false + + + Edit + false + + + + InformationRegister.ОтветыНаВопросыАнкет.Dimension.ЭлементарныйВопрос + + View + false + + + Edit + false + + + + Catalog.Организации.TabularSection.КонтактнаяИнформация.Attribute.Представление + + View + false + + + Edit + false + + + + Task.ЗадачаИсполнителя.Attribute.ДатаПринятияКИсполнению + + View + false + + + Edit + false + + + + Document.СообщениеSMS.TabularSection.НаборыЗначенийДоступа.Attribute.Чтение + + View + false + + + Edit + false + + + + InformationRegister.ПредметыПапкиВзаимодействий.Resource.ПапкаЭлектронногоПисьма + + View + false + + + Edit + false + + + + InformationRegister.ОбластиТребующиеОбработкиПоставляемыхДанных.Dimension.ОбластьДанных + + View + false + + + Edit + false + + + + Catalog.ВерсииФайлов.TabularSection.ЭлектронныеПодписи.Attribute.Комментарий + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоВходящее.Attribute.ИдентификаторОснования + + View + false + + + Edit + false + + + + DataProcessor.ТранспортСообщенийОбменаFILE.Attribute.ИспользоватьВременныйКаталогДляОтправкиИПриемаСообщений + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоВходящее.Attribute.ЕстьВложения + + View + false + + + Edit + false + + + + InformationRegister.НастройкиКомандПечати.Dimension.УникальныйИдентификатор + + View + false + + + Edit + false + + + + Catalog.ЭлектронноеПисьмоИсходящееПрисоединенныеФайлы.Attribute.ТипХраненияФайла + + View + false + + + Edit + false + + + + InformationRegister.ДанныеБизнесПроцессов.Dimension.БизнесПроцесс + + View + false + + + Edit + false + + + + Catalog.СертификатыКлючейЭлектроннойПодписиИШифрования.Attribute.ДействителенДо + + View + false + + + Edit + false + + + + DataProcessor.ПомощникСозданияОбменаДанными.Attribute.COMИмяПользователя + + View + false + + + Edit + false + + + + Catalog.ПредопределенныеВариантыОтчетов.Attribute.Описание + + View + false + + + Edit + false + + + + DataProcessor.ПомощникСозданияОбменаДанными.Attribute.EMAILМаксимальныйДопустимыйРазмерСообщения + + View + false + + + Edit + false + + + + Catalog.ПрофилиГруппДоступа.TabularSection.ЗначенияДоступа + + View + false + + + Edit + false + + + + DataProcessor.СопоставлениеОбъектовИнформационныхБаз.TabularSection.ТаблицаАвтоматическиСопоставленныхОбъектов.Attribute.ТипПриемника + + View + false + + + Edit + false + + + + Document.СообщениеSMS.TabularSection.Адресаты.Attribute.НомерДляОтправки + + View + false + + + Edit + false + + + + Document.ЗапланированноеВзаимодействие.TabularSection.Участники.Attribute.Контакт + + View + false + + + Edit + false + + + + Catalog.ПроизводственныеКалендари.StandardAttribute.PredefinedDataName + + View + false + + + Edit + false + + + + Catalog.ПроизводственныеКалендари.StandardAttribute.Predefined + + View + false + + + Edit + false + + + + Catalog.ПроизводственныеКалендари.StandardAttribute.Ref + + View + false + + + Edit + false + + + + Catalog.ПроизводственныеКалендари.StandardAttribute.DeletionMark + + View + false + + + Edit + false + + + + Catalog.ПроизводственныеКалендари.StandardAttribute.IsFolder + + View + false + + + Edit + false + + + + Catalog.ПроизводственныеКалендари.StandardAttribute.Owner + + View + false + + + Edit + false + + + + Catalog.ПроизводственныеКалендари.StandardAttribute.Parent + + View + false + + + Edit + false + + + + Catalog.ПроизводственныеКалендари.StandardAttribute.Description + + View + false + + + Edit + false + + + + Catalog.ПроизводственныеКалендари.StandardAttribute.Code + + View + false + + + Edit + false + + + + InformationRegister.ДанныеБизнесПроцессов.Resource.ПометкаУдаления + + View + false + + + Edit + false + + + + Catalog.КлассификаторБанковРФ.Attribute.Адрес + + View + false + + + Edit + false + + + + BusinessProcess.Задание.Attribute.НомерИтерации + + View + false + + + Edit + false + + + + Catalog.СтроковыеКонтактыВзаимодействий.StandardAttribute.PredefinedDataName + + View + false + + + Edit + false + + + + Catalog.СтроковыеКонтактыВзаимодействий.StandardAttribute.Predefined + + View + false + + + Edit + false + + + + Catalog.СтроковыеКонтактыВзаимодействий.StandardAttribute.Ref + + View + false + + + Edit + false + + + + Catalog.СтроковыеКонтактыВзаимодействий.StandardAttribute.DeletionMark + + View + false + + + Edit + false + + + + Catalog.СтроковыеКонтактыВзаимодействий.StandardAttribute.IsFolder + + View + false + + + Edit + false + + + + Catalog.СтроковыеКонтактыВзаимодействий.StandardAttribute.Owner + + View + false + + + Edit + false + + + + Catalog.СтроковыеКонтактыВзаимодействий.StandardAttribute.Parent + + View + false + + + Edit + false + + + + Catalog.СтроковыеКонтактыВзаимодействий.StandardAttribute.Description + + View + false + + + Edit + false + + + + Catalog.СтроковыеКонтактыВзаимодействий.StandardAttribute.Code + + View + false + + + Edit + false + + + + InformationRegister.СостоянияКонтрагентов.StandardAttribute.Active + + View + false + + + Edit + false + + + + InformationRegister.СостоянияКонтрагентов.StandardAttribute.LineNumber + + View + false + + + Edit + false + + + + InformationRegister.СостоянияКонтрагентов.StandardAttribute.Recorder + + View + false + + + Edit + false + + + + InformationRegister.СостоянияКонтрагентов.StandardAttribute.Period + + View + false + + + Edit + false + + + + InformationRegister.Удалить_АктивныеПредметыВзаимодействий.StandardAttribute.Active + + View + false + + + Edit + false + + + + InformationRegister.Удалить_АктивныеПредметыВзаимодействий.StandardAttribute.LineNumber + + View + false + + + Edit + false + + + + InformationRegister.Удалить_АктивныеПредметыВзаимодействий.StandardAttribute.Recorder + + View + false + + + Edit + false + + + + InformationRegister.Удалить_АктивныеПредметыВзаимодействий.StandardAttribute.Period + + View + false + + + Edit + false + + + + Catalog.ЭлектронноеПисьмоИсходящееПрисоединенныеФайлы.StandardAttribute.PredefinedDataName + + View + false + + + Edit + false + + + + Catalog.ЭлектронноеПисьмоИсходящееПрисоединенныеФайлы.StandardAttribute.Predefined + + View + false + + + Edit + false + + + + Catalog.ЭлектронноеПисьмоИсходящееПрисоединенныеФайлы.StandardAttribute.Ref + + View + false + + + Edit + false + + + + Catalog.ЭлектронноеПисьмоИсходящееПрисоединенныеФайлы.StandardAttribute.DeletionMark + + View + false + + + Edit + false + + + + Catalog.ЭлектронноеПисьмоИсходящееПрисоединенныеФайлы.StandardAttribute.IsFolder + + View + false + + + Edit + false + + + + Catalog.ЭлектронноеПисьмоИсходящееПрисоединенныеФайлы.StandardAttribute.Owner + + View + false + + + Edit + false + + + + Catalog.ЭлектронноеПисьмоИсходящееПрисоединенныеФайлы.StandardAttribute.Parent + + View + false + + + Edit + false + + + + Catalog.ЭлектронноеПисьмоИсходящееПрисоединенныеФайлы.StandardAttribute.Description + + View + false + + + Edit + false + + + + Catalog.ЭлектронноеПисьмоИсходящееПрисоединенныеФайлы.StandardAttribute.Code + + View + false + + + Edit + false + + + + InformationRegister.НазначениеДополнительныхОбработок.StandardAttribute.Active + + View + false + + + Edit + false + + + + InformationRegister.НазначениеДополнительныхОбработок.StandardAttribute.LineNumber + + View + false + + + Edit + false + + + + InformationRegister.НазначениеДополнительныхОбработок.StandardAttribute.Recorder + + View + false + + + Edit + false + + + + InformationRegister.НазначениеДополнительныхОбработок.StandardAttribute.Period + + View + false + + + Edit + false + + + + InformationRegister.АдресныеОбъекты.Resource.Актуален + + View + false + + + Edit + false + + + + InformationRegister.ИсторияАдресныхОбъектов.Dimension.КодПодчиненногоЭлемента + + View + false + + + Edit + false + + + + Catalog.ИдентификаторыОбъектовМетаданных.Attribute.ПорядокКоллекции + + View + false + + + Edit + false + + + + Catalog.ВидыКонтактнойИнформации.StandardAttribute.PredefinedDataName + + View + false + + + Edit + false + + + + Catalog.ВидыКонтактнойИнформации.StandardAttribute.Predefined + + View + false + + + Edit + false + + + + Catalog.ВидыКонтактнойИнформации.StandardAttribute.Ref + + View + false + + + Edit + false + + + + Catalog.ВидыКонтактнойИнформации.StandardAttribute.DeletionMark + + View + false + + + Edit + false + + + + Catalog.ВидыКонтактнойИнформации.StandardAttribute.IsFolder + + View + false + + + Edit + false + + + + Catalog.ВидыКонтактнойИнформации.StandardAttribute.Owner + + View + false + + + Edit + false + + + + Catalog.ВидыКонтактнойИнформации.StandardAttribute.Parent + + View + false + + + Edit + false + + + + Catalog.ВидыКонтактнойИнформации.StandardAttribute.Description + + View + false + + + Edit + false + + + + Catalog.ВидыКонтактнойИнформации.StandardAttribute.Code + + View + false + + + Edit + false + + + + DataProcessor.ПомощникИнтерактивногоОбменаДанными.Attribute.ИмяВременногоКаталогаСообщенийОбмена + + View + false + + + Edit + false + + + + InformationRegister.НастройкиТранспортаОбмена.Resource.FILEКаталогОбменаИнформацией + + View + false + + + Edit + false + + + + InformationRegister.ЗагруженныеВерсииАдресныхСведений.Dimension.КодСубъектаРФ + + View + false + + + Edit + false + + + + InformationRegister.СостоянияОбменовДанными.Resource.ДатаНачала + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоИсходящее.TabularSection.ПолучателиОтвета.Attribute.Контакт + + View + false + + + Edit + false + + + + DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ИмяФайлаВнешнейОбработкиОтладкиВыгрузки + + View + false + + + Edit + false + + + + InformationRegister.РазрешенияНаИспользованиеВнешнихРесурсов.Dimension.ТипПрограммногоМодуля + + View + false + + + Edit + false + + + + DataProcessor.ПомощникСозданияОбменаДанными.Attribute.ИмяФайлаНастроекСинхронизацииДанных + + View + false + + + Edit + false + + + + InformationRegister.ДополнительныеСведения.Dimension.Свойство + + View + false + + + Edit + false + + + + InformationRegister.ЗамерыОбластиСтатистики.Dimension.ПериодОкончание + + View + false + + + Edit + false + + + + DataProcessor.ПомощникСозданияОбменаДанными.TabularSection.ИнформацияСтатистики.Attribute.ПоляТаблицы + + View + false + + + Edit + false + + + + Catalog.СтраныМира.StandardAttribute.PredefinedDataName + + View + false + + + Edit + false + + + + Catalog.СтраныМира.StandardAttribute.Predefined + + View + false + + + Edit + false + + + + Catalog.СтраныМира.StandardAttribute.Ref + + View + false + + + Edit + false + + + + Catalog.СтраныМира.StandardAttribute.DeletionMark + + View + false + + + Edit + false + + + + Catalog.СтраныМира.StandardAttribute.IsFolder + + View + false + + + Edit + false + + + + Catalog.СтраныМира.StandardAttribute.Owner + + View + false + + + Edit + false + + + + Catalog.СтраныМира.StandardAttribute.Parent + + View + false + + + Edit + false + + + + Catalog.СтраныМира.StandardAttribute.Description + + View + false + + + Edit + false + + + + Catalog.СтраныМира.StandardAttribute.Code + + View + false + + + Edit + false + + + + DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.ТаблицаНастройкиПараметров + + View + false + + + Edit + false + + + + Catalog.ЗначенияСвойствОбъектовИерархия.Attribute.Вес + + View + false + + + Edit + false + + + + Document.НазначениеОпросов.Attribute.ДатаОкончания + + View + false + + + Edit + false + + + + InformationRegister.НомераОтсканированныхФайлов.Resource.Номер + + View + false + + + Edit + false + + + + DataProcessor.СопоставлениеОбъектовИнформационныхБаз.TabularSection.ТаблицаНеутвержденныхСвязей + + View + false + + + Edit + false + + + + ChartOfCharacteristicTypes.ДополнительныеРеквизитыИСведения.Attribute.НаборСвойств + + View + false + + + Edit + false + + + + DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.КомментарийПриВыгрузкеДанных + + View + false + + + Edit + false + + + + Catalog.Файлы.Attribute.ПодписанЭП + + View + false + + + Edit + false + + + + InformationRegister.ОриентирыАдресныхОбъектов.Resource.ПочтовыйИндекс + + View + false + + + Edit + false + + + + DataProcessor.ИнтерактивноеИзменениеВыгрузки.Attribute.ПараметрыСценарияДополнения + + View + false + + + Edit + false + + + + Catalog.ДополнительныеОтчетыИОбработки.TabularSection.Назначение + + View + false + + + Edit + false + + + + InformationRegister.НастройкиКомандПечати.Resource.Видимость + + View + false + + + Edit + false + + + + Catalog.ШаблоныЗаданийОчереди.Attribute.КоличествоПовторовПриАварийномЗавершении + + View + false + + + Edit + false + + + + Catalog.Организации.TabularSection.КонтактнаяИнформация.Attribute.Тип + + View + false + + + Edit + false + + + + InformationRegister.НастройкиПравОбъектов.Dimension.Пользователь + + View + false + + + Edit + false + + + + Catalog.УчетныеЗаписиЭлектроннойПочты.Attribute.ИспользоватьБезопасныйВходНаСерверИсходящейПочты + + View + false + + + Edit + false + + + + InformationRegister.КомментарииОперацииСтатистики.Dimension.ИдентификаторКомментария + + View + false + + + Edit + false + + + + Catalog.РассылкиОтчетов.Attribute.РегламентноеЗадание + + View + false + + + Edit + false + + + + Catalog.ЭлектронноеПисьмоИсходящееПрисоединенныеФайлы.Attribute.ПутьКФайлу + + View + false + + + Edit + false + + + + Document.Анкета.TabularSection.Состав.Attribute.Ответ + + View + false + + + Edit + false + + + + Catalog.Файлы.Attribute.ХранитьВерсии + + View + false + + + Edit + false + + + + Catalog.СообщенияСистемы.Attribute.ПодробноеПредставлениеОшибки + + View + false + + + Edit + false + + + + Catalog.ОчередьЗаданийОбластейДанных.Attribute.ДатаНачалаПоследнегоЗапуска + + View + false + + + Edit + false + + + + BusinessProcess.Задание.Attribute.ГлавнаяЗадача + + View + false + + + Edit + false + + + + Catalog.СообщениеSMSПрисоединенныеФайлы.TabularSection.СертификатыШифрования.Attribute.Представление + + View + false + + + Edit + false + + + + DataProcessor.КонвертацияОбъектовXDTO.Attribute.ПродолжитьПриОшибке + + View + false + + + Edit + false + + + + Document.ТелефонныйЗвонок.TabularSection.ДополнительныеРеквизиты.Attribute.Свойство + + View + false + + + Edit + false + + + + InformationRegister.ФайлыВРабочемКаталоге.Resource.ДатаПомещенияВРабочийКаталог + + View + false + + + Edit + false + + + + DataProcessor.СопоставлениеОбъектовИнформационныхБаз.Attribute.ТипПриемникаСтрокой + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоВходящее.TabularSection.ПолучателиПисьма + + View + false + + + Edit + false + + + + InformationRegister.ИсполнителиЗадач.Dimension.РольИсполнителя + + View + false + + + Edit + false + + + + InformationRegister.СоответствияОбъектовИнформационныхБаз.Resource.УникальныйИдентификаторИсточникаСтрокой + + View + false + + + Edit + false + + + + Catalog.ЭлектронноеПисьмоВходящееПрисоединенныеФайлы.Attribute.ДатаСоздания + + View + false + + + Edit + false + + + + InformationRegister.ПредметыПапкиВзаимодействий.Dimension.Взаимодействие + + View + false + + + Edit + false + + + + InformationRegister.ПубличныеИдентификаторыСинхронизируемыхОбъектов.StandardAttribute.Active + + View + false + + + Edit + false + + + + InformationRegister.ПубличныеИдентификаторыСинхронизируемыхОбъектов.StandardAttribute.LineNumber + + View + false + + + Edit + false + + + + InformationRegister.ПубличныеИдентификаторыСинхронизируемыхОбъектов.StandardAttribute.Recorder + + View + false + + + Edit + false + + + + InformationRegister.ПубличныеИдентификаторыСинхронизируемыхОбъектов.StandardAttribute.Period + + View + false + + + Edit + false + + + + InformationRegister.УдалитьБлокировкиСеансовОбластиДанных.Dimension.ОбластьДанных + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоВходящее.Attribute.Предмет + + View + false + + + Edit + false + + + + InformationRegister.ПраваРолей.Resource.Просмотр + + View + false + + + Edit + false + + + + DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.ТаблицаПравилОчистки + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоВходящее.TabularSection.ПолучателиОтвета.Attribute.Представление + + View + false + + + Edit + false + + + + InformationRegister.РучныеИзмененияГрафиковРаботы.Dimension.ГрафикРаботы + + View + false + + + Edit + false + + + + Catalog.ВстречаПрисоединенныеФайлы.Attribute.Расширение + + View + false + + + Edit + false + + + + Document.СообщениеSMS.Attribute.Важность + + View + false + + + Edit + false + + + + DataProcessor.ГрупповоеИзменениеРеквизитов.Attribute.ИзменятьВТранзакции + + View + false + + + Edit + false + + + + Catalog.РассылкиОтчетов.Attribute.Автор + + View + false + + + Edit + false + + + + DocumentJournal.Взаимодействия.StandardAttribute.Type + + View + false + + + Edit + false + + + + DocumentJournal.Взаимодействия.StandardAttribute.Ref + + View + false + + + Edit + false + + + + DocumentJournal.Взаимодействия.StandardAttribute.Date + + View + false + + + Edit + false + + + + DocumentJournal.Взаимодействия.StandardAttribute.Posted + + View + false + + + Edit + false + + + + DocumentJournal.Взаимодействия.StandardAttribute.DeletionMark + + View + false + + + Edit + false + + + + DocumentJournal.Взаимодействия.StandardAttribute.Number + + View + false + + + Edit + false + + + + Catalog.ВстречаПрисоединенныеФайлы.Attribute.Описание + + View + false + + + Edit + false + + + + InformationRegister.ИсторияАдресныхОбъектов.Dimension.КодУлицы + + View + false + + + Edit + false + + + + Catalog.ЗапланированноеВзаимодействиеПрисоединенныеФайлы.TabularSection.ЭлектронныеПодписи.Attribute.Отпечаток + + View + false + + + Edit + false + + + + DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.ВерсияПлатформыИнформационнойБазыДляПодключения + + View + false + + + Edit + false + + + + DataProcessor.НастройкаРезервногоКопированияИБ.Attribute.КаталогСРезервнымиКопиями + + View + false + + + Edit + false + + + + InformationRegister.ЗапросыРазрешенийНаИспользованиеВнешнихРесурсов.Dimension.ИдентификаторЗапроса + + View + false + + + Edit + false + + + + DataProcessor.СопоставлениеОбъектовИнформационныхБаз.Attribute.ЭтоУдалениеОбъекта + + View + false + + + Edit + false + + + + Catalog.ПрофилиГруппДоступа.TabularSection.ВидыДоступа.Attribute.ВсеРазрешены + + View + false + + + Edit + false + + + + Catalog.ДополнительныеОтчетыИОбработки.TabularSection.Команды.Attribute.ЗаменяемыеКоманды + + View + false + + + Edit + false + + + + Catalog.Пользователи.Attribute.Комментарий + + View + false + + + Edit + false + + + + DataProcessor.ПомощникИнтерактивногоОбменаДанными.TabularSection.ИнформацияСтатистики.Attribute.КоличествоОбъектовВПриемнике + + View + false + + + Edit + false + + + + DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.АрхивироватьФайл + + View + false + + + Edit + false + + + + Catalog.УчетныеЗаписиЭлектроннойПочты.Attribute.ПользовательSMTP + + View + false + + + Edit + false + + + + DataProcessor.ТранспортСообщенийОбменаFTP.Attribute.FTPСоединениеПуть + + View + false + + + Edit + false + + + + DataProcessor.КонвертацияОбъектовXDTO.Attribute.КоличествоОбработанныхОбъектовДляОбновленияСтатуса + + View + false + + + Edit + false + + + + InformationRegister.ПутиКПрограммамЭлектроннойПодписиИШифрованияНаСерверахLinux.Dimension.ИмяКомпьютера + + View + false + + + Edit + false + + + + DataProcessor.СопоставлениеОбъектовИнформационныхБаз.Attribute.УзелИнформационнойБазы + + View + false + + + Edit + false + + + + Document.ТелефонныйЗвонок.Attribute.Тема + + View + false + + + Edit + false + + + + Catalog.ВидыКонтактнойИнформации.Attribute.ПроверятьПоФИАС + + View + false + + + Edit + false + + + + Catalog.ТелефонныйЗвонокПрисоединенныеФайлы.TabularSection.СертификатыШифрования + + View + false + + + Edit + false + + + + DataProcessor.БлокировкаРаботыПользователей.Attribute.КодДляРазблокировки + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоИсходящее.TabularSection.ПолучателиКопий.Attribute.Представление + + View + false + + + Edit + false + + + + DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.ВыгружатьТолькоРазрешенные + + View + false + + + Edit + false + + + + ChartOfCharacteristicTypes.ДополнительныеРеквизитыИСведения.Attribute.Виден + + View + false + + + Edit + false + + + + InformationRegister.СведенияОПользователях.Resource.ДатаПоследнейАктивности + + View + false + + + Edit + false + + + + Catalog.ПоставляемыеДанные.Attribute.ДатаДобавления + + View + false + + + Edit + false + + + + Catalog.СообщениеSMSПрисоединенныеФайлы.Attribute.Зашифрован + + View + false + + + Edit + false + + + + Catalog.Организации.Attribute.Префикс + + View + false + + + Edit + false + + + + DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ОтладкаОбработчиковЗагрузки + + View + false + + + Edit + false + + + + Document.ТелефонныйЗвонок.TabularSection.ДополнительныеРеквизиты.Attribute.Значение + + View + false + + + Edit + false + + + + InformationRegister.УдалитьОчередьЗаданий.Resource.КоличествоПовторовПриАварийномЗавершении + + View + false + + + Edit + false + + + + DataProcessor.ИнтерактивноеИзменениеВыгрузки.Attribute.ПериодОтбораСценарияУзла + + View + false + + + Edit + false + + + + InformationRegister.ОриентирыАдресныхОбъектов.Resource.Описание + + View + false + + + Edit + false + + + + Catalog.Организации.TabularSection.КонтактнаяИнформация.Attribute.Регион + + View + false + + + Edit + false + + + + Catalog.СертификатыКлючейЭлектроннойПодписиИШифрования.StandardAttribute.PredefinedDataName + + View + false + + + Edit + false + + + + Catalog.СертификатыКлючейЭлектроннойПодписиИШифрования.StandardAttribute.Predefined + + View + false + + + Edit + false + + + + Catalog.СертификатыКлючейЭлектроннойПодписиИШифрования.StandardAttribute.Ref + + View + false + + + Edit + false + + + + Catalog.СертификатыКлючейЭлектроннойПодписиИШифрования.StandardAttribute.DeletionMark + + View + false + + + Edit + false + + + + Catalog.СертификатыКлючейЭлектроннойПодписиИШифрования.StandardAttribute.IsFolder + + View + false + + + Edit + false + + + + Catalog.СертификатыКлючейЭлектроннойПодписиИШифрования.StandardAttribute.Owner + + View + false + + + Edit + false + + + + Catalog.СертификатыКлючейЭлектроннойПодписиИШифрования.StandardAttribute.Parent + + View + false + + + Edit + false + + + + Catalog.СертификатыКлючейЭлектроннойПодписиИШифрования.StandardAttribute.Description + + View + false + + + Edit + false + + + + Catalog.СертификатыКлючейЭлектроннойПодписиИШифрования.StandardAttribute.Code + + View + false + + + Edit + false + + + + Catalog.СообщенияОбластейДанных.Attribute.Отправитель + + View + false + + + Edit + false + + + + InformationRegister.ВерсииОбъектов.Attribute.ДатаВерсии + + View + false + + + Edit + false + + + + Document.Анкета.Attribute.Комментарий + + View + false + + + Edit + false + + + + ChartOfCharacteristicTypes.ДополнительныеРеквизитыИСведения.Attribute.МногострочноеПолеВвода + + View + false + + + Edit + false + + + + DataProcessor.ТранспортСообщенийОбменаFTP.Attribute.FTPСжиматьФайлИсходящегоСообщения + + View + false + + + Edit + false + + + + InformationRegister.ЗамерыКомментарииСтатистики.Dimension.КомментарийСтатистики + + View + false + + + Edit + false + + + + InformationRegister.ИсторияАдресныхОбъектов.Resource.НачалоДействияЗаписи + + View + false + + + Edit + false + + + + InformationRegister.ОтветыНаВопросыАнкет.Attribute.ОткрытыйОтвет + + View + false + + + Edit + false + + + + InformationRegister.ПричиныИзмененияАдресныхСведений.Dimension.КодСубъектаРФ + + View + false + + + Edit + false + + + + Catalog.ТелефонныйЗвонокПрисоединенныеФайлы.TabularSection.ЭлектронныеПодписи.Attribute.Сертификат + + View + false + + + Edit + false + + + + InformationRegister.ОперацииСтатистики.Dimension.ХешНаименования + + View + false + + + Edit + false + + + + InformationRegister.СостоянияРассылокОтчетов.Resource.ПоследнийЗапуск + + View + false + + + Edit + false + + + + Catalog.ЭлектронноеПисьмоВходящееПрисоединенныеФайлы.Attribute.Описание + + View + false + + + Edit + false + + + + Catalog.ЭлектронноеПисьмоИсходящееПрисоединенныеФайлы.Attribute.ТекстХранилище + + View + false + + + Edit + false + + + + InformationRegister.ПутиКПрограммамЭлектроннойПодписиИШифрованияНаСерверахLinux.Resource.ПутьКПрограмме + + View + false + + + Edit + false + + + + Catalog.ВариантыОтчетов.Attribute.Автор + + View + false + + + Edit + false + + + + InformationRegister.ПричиныИзмененияАдресныхСведений.Resource.СодержитОписание + + View + false + + + Edit + false + + + + DataProcessor.КонвертацияОбъектовРаспределенныхИнформационныхБаз.Attribute.УзелИнформационнойБазы + + View + false + + + Edit + false + + + + DataProcessor.ПомощникИнтерактивногоОбменаДанными.TabularSection.ИнформацияСтатистики.Attribute.ИмяТаблицыПриемника + + View + false + + + Edit + false + + + + Catalog.ВариантыОтчетов.TabularSection.УдалитьИсключенияБыстрогоДоступа.Attribute.УдалитьПользователь + + View + false + + + Edit + false + + + + DataProcessor.ПоискИУстановкаОбновлений.Attribute.ИспользоватьРасписаниеДляПроверкиОбновления + + View + false + + + Edit + false + + + + InformationRegister.УдалитьЗамерыВремени.Resource.ВремяКонцаПроверка + + View + false + + + Edit + false + + + + DataProcessor.ПоискИУстановкаОбновлений.Attribute.ЗапомнитьПарольСервераОбновлений + + View + false + + + Edit + false + + + + Catalog.ВариантыОтчетов.Attribute.ПредопределенныйВариант + + View + false + + + Edit + false + + + + InformationRegister.ЗагруженныеВерсииАдресныхСведений.Resource.ДатаЗагрузки + + View + false + + + Edit + false + + + + DataProcessor.РегистрацияИзмененийДляОбменаДанными.Attribute.НастройкаКонтрольВыгрузкиОбъектов + + View + false + + + Edit + false + + + + InformationRegister.РезультатыОбменаДанными.Resource.УзелИнформационнойБазы + + View + false + + + Edit + false + + + + Catalog.ЗапланированноеВзаимодействиеПрисоединенныеФайлы.Attribute.Расширение + + View + false + + + Edit + false + + + + Catalog.ЭлектронноеПисьмоИсходящееПрисоединенныеФайлы.Attribute.ДатаСоздания + + View + false + + + Edit + false + + + + InformationRegister.РазрешенияНаИспользованиеВнешнихРесурсов.Dimension.ИдентификаторПрограммногоМодуля + + View + false + + + Edit + false + + + + Catalog.ОчередьЗаданийОбластейДанных.Attribute.ДатаЗавершенияПоследнегоЗапуска + + View + false + + + Edit + false + + + + Catalog.ВерсииФайлов.Attribute.Расширение + + View + false + + + Edit + false + + + + InformationRegister.НазначениеДополнительныхОбработок.Resource.ИспользоватьСозданиеСвязанныхОбъектов + + View + false + + + Edit + false + + + + Document.Анкета.TabularSection.Состав.Attribute.ОткрытыйОтвет + + View + false + + + Edit + false + + + + DataProcessor.ГрупповоеИзменениеРеквизитов.Attribute.ИспользуютсяДопРеквизиты + + View + false + + + Edit + false + + + + InformationRegister.ЗамерыКомментарииСтатистики.Dimension.ПериодОкончание + + View + false + + + Edit + false + + + + Catalog.ВерсииФайлов.TabularSection.ЭлектронныеПодписи.Attribute.УстановившийПодпись + + View + false + + + Edit + false + + + + DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.Параметры + + View + false + + + Edit + false + + + + InformationRegister.ЗависимостиПравДоступа.Dimension.ПодчиненнаяТаблица + + View + false + + + Edit + false + + + + InformationRegister.УдалитьВерсииПодсистем.Attribute.ПланОбновления + + View + false + + + Edit + false + + + + Document.Встреча.Attribute.Важность + + View + false + + + Edit + false + + + + Catalog.ВстречаПрисоединенныеФайлы.Attribute.Изменил + + View + false + + + Edit + false + + + + InformationRegister.НастройкиУчетныхЗаписейЭлектроннойПочты.Resource.ПодписьПриОтветеПересылкеФорматированныйДокумент + + View + false + + + Edit + false + + + + Catalog.РассылкиОтчетов.Attribute.ВыполнятьПоРасписанию + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоВходящее.TabularSection.НепринятыеВложения.Attribute.ИмяВложение + + View + false + + + Edit + false + + + + ChartOfCharacteristicTypes.ДополнительныеРеквизитыИСведения.TabularSection.ЗависимостиДополнительныхРеквизитов.Attribute.Значение + + View + false + + + Edit + false + + + + InformationRegister.УдалитьОчередьИзвлеченияТекста.StandardAttribute.Active + + View + false + + + Edit + false + + + + InformationRegister.УдалитьОчередьИзвлеченияТекста.StandardAttribute.LineNumber + + View + false + + + Edit + false + + + + InformationRegister.УдалитьОчередьИзвлеченияТекста.StandardAttribute.Recorder + + View + false + + + Edit + false + + + + InformationRegister.УдалитьОчередьИзвлеченияТекста.StandardAttribute.Period + + View + false + + + Edit + false + + + + Catalog.РассылкиОтчетов.TabularSection.Отчеты.Attribute.ОтправлятьЕслиПустой + + View + false + + + Edit + false + + + + InformationRegister.НапоминанияПользователя.Attribute.СпособУстановкиВремениНапоминания + + View + false + + + Edit + false + + + + InformationRegister.СоставыГруппПользователей.StandardAttribute.Active + + View + false + + + Edit + false + + + + InformationRegister.СоставыГруппПользователей.StandardAttribute.LineNumber + + View + false + + + Edit + false + + + + InformationRegister.СоставыГруппПользователей.StandardAttribute.Recorder + + View + false + + + Edit + false + + + + InformationRegister.СоставыГруппПользователей.StandardAttribute.Period + + View + false + + + Edit + false + + + + InformationRegister.ЗамерыВремениТехнологические.Dimension.ДатаНачалаЗамера + + View + false + + + Edit + false + + + + Catalog.ДополнительныеОтчетыИОбработки.TabularSection.Разделы + + View + false + + + Edit + false + + + + Catalog.ТелефонныйЗвонокПрисоединенныеФайлы.Attribute.Автор + + View + false + + + Edit + false + + + + Catalog.РассылкиОтчетов.TabularSection.Отчеты.Attribute.Отчет + + View + false + + + Edit + false + + + + Document.ТелефонныйЗвонок.Attribute.Входящий + + View + false + + + Edit + false + + + + DataProcessor.ПомощникИнтерактивногоОбменаДанными.TabularSection.ИнформацияСтатистики.Attribute.ИспользоватьПредварительныйПросмотр + + View + false + + + Edit + false + + + + Catalog.ОчередьЗаданий.Attribute.Расписание + + View + false + + + Edit + false + + + + ChartOfCharacteristicTypes.ДополнительныеРеквизитыИСведения.Attribute.ЗаполнятьОбязательно + + View + false + + + Edit + false + + + + InformationRegister.УдалитьГруппыЗначенийДоступа.Dimension.ТолькоВидДоступа + + View + false + + + Edit + false + + + + InformationRegister.ИсторияАдресныхОбъектов.Resource.Сокращение + + View + false + + + Edit + false + + + + Catalog.Валюты.Attribute.Наценка + + View + false + + + Edit + false + + + + InformationRegister.ПраваРолей.Resource.Добавление + + View + false + + + Edit + false + + + + InformationRegister.ПользовательскиеМакетыПечати.StandardAttribute.Active + + View + false + + + Edit + false + + + + InformationRegister.ПользовательскиеМакетыПечати.StandardAttribute.LineNumber + + View + false + + + Edit + false + + + + InformationRegister.ПользовательскиеМакетыПечати.StandardAttribute.Recorder + + View + false + + + Edit + false + + + + InformationRegister.ПользовательскиеМакетыПечати.StandardAttribute.Period + + View + false + + + Edit + false + + + + InformationRegister.ПользовательскиеНастройкиДоступаКОбработкам.Resource.Доступно + + View + false + + + Edit + false + + + + DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.ВестиДополнительныйКонтрольЗаписиВXML + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоИсходящее.TabularSection.ПолучателиКопий + + View + false + + + Edit + false + + + + InformationRegister.УдалитьБлокировкиСеансовОбластиДанных.Resource.Эксклюзивная + + View + false + + + Edit + false + + + + InformationRegister.КонтактыВзаимодействий.Dimension.Взаимодействие + + View + false + + + Edit + false + + + + InformationRegister.ВерсииОбъектов.Attribute.КонтрольнаяСумма + + View + false + + + Edit + false + + + + Catalog.СертификатыКлючейЭлектроннойПодписиИШифрования.Attribute.Подписание + + View + false + + + Edit + false + + + + InformationRegister.БезопасноеХранилищеДанныхОбластейДанных.StandardAttribute.Active + + View + false + + + Edit + false + + + + InformationRegister.БезопасноеХранилищеДанныхОбластейДанных.StandardAttribute.LineNumber + + View + false + + + Edit + false + + + + InformationRegister.БезопасноеХранилищеДанныхОбластейДанных.StandardAttribute.Recorder + + View + false + + + Edit + false + + + + InformationRegister.БезопасноеХранилищеДанныхОбластейДанных.StandardAttribute.Period + + View + false + + + Edit + false + + + + InformationRegister.ОтветыНаВопросыАнкет.Dimension.Анкета + + View + false + + + Edit + false + + + + Document.ТелефонныйЗвонок.TabularSection.НаборыЗначенийДоступа.Attribute.Изменение + + View + false + + + Edit + false + + + + Catalog.УчетныеЗаписиЭлектроннойПочты.Attribute.ИспользоватьДляПолучения + + View + false + + + Edit + false + + + + InformationRegister.РежимыПодключенияВнешнихМодулей.Attribute.ПредставлениеПрограммногоМодуля + + View + false + + + Edit + false + + + + InformationRegister.ВерсииОбъектов.Attribute.РазмерДанных + + View + false + + + Edit + false + + + + InformationRegister.КэшПрограммныхИнтерфейсов.Dimension.ТипДанных + + View + false + + + Edit + false + + + + Task.ЗадачаИсполнителя.AddressingAttribute.Исполнитель + + View + false + + + Edit + false + + + + DataProcessor.ОценкаПроизводительности.Attribute.ВариантФильтраКомментарий + + View + false + + + Edit + false + + + + Catalog.СообщенияОбластейДанных.Attribute.ТелоСообщения + + View + false + + + Edit + false + + + + InformationRegister.АдресныеОбъекты.Resource.Дополнительно + + View + false + + + Edit + false + + + + Catalog.ТелефонныйЗвонокПрисоединенныеФайлы.Attribute.Описание + + View + false + + + Edit + false + + + + Catalog.ЭлектронноеПисьмоВходящееПрисоединенныеФайлы.Attribute.ВладелецФайла + + View + false + + + Edit + false + + + + Catalog.ВопросыШаблонаАнкеты.Attribute.Заметки + + View + false + + + Edit + false + + + + DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ТаблицаПравилОчистки + + View + false + + + Edit + false + + + + InformationRegister.ТаблицыГруппДоступа.StandardAttribute.Active + + View + false + + + Edit + false + + + + InformationRegister.ТаблицыГруппДоступа.StandardAttribute.LineNumber + + View + false + + + Edit + false + + + + InformationRegister.ТаблицыГруппДоступа.StandardAttribute.Recorder + + View + false + + + Edit + false + + + + InformationRegister.ТаблицыГруппДоступа.StandardAttribute.Period + + View + false + + + Edit + false + + + + Catalog.ВидыКонтактнойИнформации.Attribute.УказыватьОКТМО + + View + false + + + Edit + false + + + + Catalog.ВерсииФайлов.TabularSection.ЭлектронныеПодписи.Attribute.Отпечаток + + View + false + + + Edit + false + + + + Catalog.ЗакладкиВзаимодействий.StandardAttribute.PredefinedDataName + + View + false + + + Edit + false + + + + Catalog.ЗакладкиВзаимодействий.StandardAttribute.Predefined + + View + false + + + Edit + false + + + + Catalog.ЗакладкиВзаимодействий.StandardAttribute.Ref + + View + false + + + Edit + false + + + + Catalog.ЗакладкиВзаимодействий.StandardAttribute.DeletionMark + + View + false + + + Edit + false + + + + Catalog.ЗакладкиВзаимодействий.StandardAttribute.IsFolder + + View + false + + + Edit + false + + + + Catalog.ЗакладкиВзаимодействий.StandardAttribute.Owner + + View + false + + + Edit + false + + + + Catalog.ЗакладкиВзаимодействий.StandardAttribute.Parent + + View + false + + + Edit + false + + + + Catalog.ЗакладкиВзаимодействий.StandardAttribute.Description + + View + false + + + Edit + false + + + + Catalog.ЗакладкиВзаимодействий.StandardAttribute.Code + + View + false + + + Edit + false + + + + InformationRegister.ДанныеОбъектовДляРегистрацииВОбменах.Dimension.УзелИнформационнойБазы + + View + false + + + Edit + false + + + + InformationRegister.НастройкиВерсионированияОбъектов.Resource.Вариант + + View + false + + + Edit + false + + + + InformationRegister.УдалитьНаборыЗначенийДоступа.Dimension.Объект + + View + false + + + Edit + false + + + + DataProcessor.КонвертацияОбъектовXDTO.Attribute.КомпонентыОбмена + + View + false + + + Edit + false + + + + InformationRegister.РейтингАктивностиОбластейДанных.Resource.Рейтинг + + View + false + + + Edit + false + + + + DataProcessor.ПоискИУстановкаОбновлений.Attribute.ВосстанавливатьИнформационнуюБазу + + View + false + + + Edit + false + + + + DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.ВерсияПравилОбмена + + View + false + + + Edit + false + + + + InformationRegister.НастройкиУчетныхЗаписейЭлектроннойПочты.Resource.ВПредставлениеВключатьИмяПользователя + + View + false + + + Edit + false + + + + InformationRegister.УдалитьОбластиДанных.Resource.Представление + + View + false + + + Edit + false + + + + Catalog.СообщениеSMSПрисоединенныеФайлы.TabularSection.СертификатыШифрования + + View + false + + + Edit + false + + + + InformationRegister.ИзмененияОбщихДанныхУзлов.StandardAttribute.Active + + View + false + + + Edit + false + + + + InformationRegister.ИзмененияОбщихДанныхУзлов.StandardAttribute.LineNumber + + View + false + + + Edit + false + + + + InformationRegister.ИзмененияОбщихДанныхУзлов.StandardAttribute.Recorder + + View + false + + + Edit + false + + + + InformationRegister.ИзмененияОбщихДанныхУзлов.StandardAttribute.Period + + View + false + + + Edit + false + + + + InformationRegister.УдалитьАдресныйКлассификатор.Resource.Индекс + + View + false + + + Edit + false + + + + Catalog.ЭлектронноеПисьмоИсходящееПрисоединенныеФайлы.TabularSection.ЭлектронныеПодписи.Attribute.ИмяФайлаПодписи + + View + false + + + Edit + false + + + + DataProcessor.ИнтерактивноеИзменениеВыгрузки.Attribute.ПредставлениеОтбораСценарияУзла + + View + false + + + Edit + false + + + + DataProcessor.ПоискИУстановкаОбновлений.TabularSection.ДоступныеОбновления.Attribute.ПутьКЛокальномуФайлуОбновления + + View + false + + + Edit + false + + + + Catalog.НаборыДополнительныхРеквизитовИСведений.Attribute.КоличествоСведений + + View + false + + + Edit + false + + + + InformationRegister.СостоянияОбменовДанными.Resource.ДатаОкончания + + View + false + + + Edit + false + + + + ChartOfCharacteristicTypes.ДополнительныеРеквизитыИСведения.Attribute.Комментарий + + View + false + + + Edit + false + + + + Catalog.РассылкиОтчетов.StandardAttribute.PredefinedDataName + + View + false + + + Edit + false + + + + Catalog.РассылкиОтчетов.StandardAttribute.Predefined + + View + false + + + Edit + false + + + + Catalog.РассылкиОтчетов.StandardAttribute.Ref + + View + false + + + Edit + false + + + + Catalog.РассылкиОтчетов.StandardAttribute.DeletionMark + + View + false + + + Edit + false + + + + Catalog.РассылкиОтчетов.StandardAttribute.IsFolder + + View + false + + + Edit + false + + + + Catalog.РассылкиОтчетов.StandardAttribute.Owner + + View + false + + + Edit + false + + + + Catalog.РассылкиОтчетов.StandardAttribute.Parent + + View + false + + + Edit + false + + + + Catalog.РассылкиОтчетов.StandardAttribute.Description + + View + false + + + Edit + false + + + + Catalog.РассылкиОтчетов.StandardAttribute.Code + + View + false + + + Edit + false + + + + Catalog.РолиИсполнителей.Attribute.КраткоеПредставление + + View + false + + + Edit + false + + + + Catalog.ДополнительныеОтчетыИОбработки.TabularSection.Разделы.Attribute.УдалитьИмяРаздела + + View + false + + + Edit + false + + + + Catalog.ОчередьЗаданий.Attribute.Параметры + + View + false + + + Edit + false + + + + Catalog.ЗапланированноеВзаимодействиеПрисоединенныеФайлы.Attribute.ТипХраненияФайла + + View + false + + + Edit + false + + + + InformationRegister.СтатистикаКонфигурации.Resource.Значение + + View + false + + + Edit + false + + + + Catalog.Календари.Attribute.ПроизводственныйКалендарь + + View + false + + + Edit + false + + + + Catalog.ВидыКонтактнойИнформации.Attribute.СкрыватьНеактуальныеАдреса + + View + false + + + Edit + false + + + + InformationRegister.ВерсииОбъектов.Attribute.Комментарий + + View + false + + + Edit + false + + + + InformationRegister.ПакетыИнформацииПриЗапуске.Dimension.Номер + + View + false + + + Edit + false + + + + InformationRegister.ДомаЗданияСтроения.Dimension.КодСубъектаРФ + + View + false + + + Edit + false + + + + DataProcessor.ПомощникИнтерактивногоОбменаДанными.TabularSection.ИнформацияСтатистики.Attribute.КоличествоОбъектовСопоставленных + + View + false + + + Edit + false + + + + Catalog.СообщенияСистемы.Attribute.ЭтоБыстроеСообщение + + View + false + + + Edit + false + + + + InformationRegister.УведомленияОПрочтении.StandardAttribute.Active + + View + false + + + Edit + false + + + + InformationRegister.УведомленияОПрочтении.StandardAttribute.LineNumber + + View + false + + + Edit + false + + + + InformationRegister.УведомленияОПрочтении.StandardAttribute.Recorder + + View + false + + + Edit + false + + + + InformationRegister.УведомленияОПрочтении.StandardAttribute.Period + + View + false + + + Edit + false + + + + DataProcessor.ПомощникИнтерактивногоОбменаДанными.TabularSection.ИнформацияСтатистики.Attribute.Ключ + + View + false + + + Edit + false + + + + InformationRegister.ТаблицыГруппДоступа.Resource.Изменение + + View + false + + + Edit + false + + + + Catalog.СообщениеSMSПрисоединенныеФайлы.Attribute.ПутьКФайлу + + View + false + + + Edit + false + + + + DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ИмяФайлаВнешнейОбработкиОтладкиЗагрузки + + View + false + + + Edit + false + + + + Catalog.ЗапланированноеВзаимодействиеПрисоединенныеФайлы.Attribute.ДатаСоздания + + View + false + + + Edit + false + + + + Catalog.ВариантыОтчетов.TabularSection.УдалитьИсключенияБыстрогоДоступа + + View + false + + + Edit + false + + + + Catalog.РассылкиОтчетов.TabularSection.Отчеты.Attribute.Настройки + + View + false + + + Edit + false + + + + InformationRegister.ДанныеОбъектовДляРегистрацииВОбменах.StandardAttribute.Active + + View + false + + + Edit + false + + + + InformationRegister.ДанныеОбъектовДляРегистрацииВОбменах.StandardAttribute.LineNumber + + View + false + + + Edit + false + + + + InformationRegister.ДанныеОбъектовДляРегистрацииВОбменах.StandardAttribute.Recorder + + View + false + + + Edit + false + + + + InformationRegister.ДанныеОбъектовДляРегистрацииВОбменах.StandardAttribute.Period + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоИсходящее.TabularSection.ДополнительныеРеквизиты.Attribute.Свойство + + View + false + + + Edit + false + + + + Catalog.ДополнительныеОтчетыИОбработки.Attribute.РежимСовместимостиРазрешений + + View + false + + + Edit + false + + + + InformationRegister.ДанныеБизнесПроцессов.StandardAttribute.Active + + View + false + + + Edit + false + + + + InformationRegister.ДанныеБизнесПроцессов.StandardAttribute.LineNumber + + View + false + + + Edit + false + + + + InformationRegister.ДанныеБизнесПроцессов.StandardAttribute.Recorder + + View + false + + + Edit + false + + + + InformationRegister.ДанныеБизнесПроцессов.StandardAttribute.Period + + View + false + + + Edit + false + + + + Catalog.ЭлектронноеПисьмоВходящееПрисоединенныеФайлы.Attribute.ТипХраненияФайла + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоИсходящее.StandardAttribute.Posted + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоИсходящее.StandardAttribute.Ref + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоИсходящее.StandardAttribute.DeletionMark + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоИсходящее.StandardAttribute.Date + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоИсходящее.StandardAttribute.Number + + View + false + + + Edit + false + + + + DataProcessor.ТранспортСообщенийОбменаFILE.Attribute.FILEКаталогОбменаИнформацией + + View + false + + + Edit + false + + + + Catalog.ШаблоныЗаданийОчереди.Attribute.Использование + + View + false + + + Edit + false + + + + Catalog.ТомаХраненияФайлов.Attribute.МаксимальныйРазмер + + View + false + + + Edit + false + + + + InformationRegister.СостоянияКонтрагентов.Attribute.ИНН + + View + false + + + Edit + false + + + + Catalog.ВстречаПрисоединенныеФайлы.TabularSection.ЭлектронныеПодписи.Attribute.Подпись + + View + false + + + Edit + false + + + + DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.Комментарий + + View + false + + + Edit + false + + + + Catalog.Файлы.Attribute.ТекущаяВерсияРасширение + + View + false + + + Edit + false + + + + Catalog.ЗапланированноеВзаимодействиеПрисоединенныеФайлы.TabularSection.ЭлектронныеПодписи.Attribute.КомуВыданСертификат + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоВходящее.Attribute.ОтправительАдрес + + View + false + + + Edit + false + + + + Catalog.РассылкиОтчетов.Attribute.Папка + + View + false + + + Edit + false + + + + Catalog.ЭлектронноеПисьмоИсходящееПрисоединенныеФайлы.TabularSection.ЭлектронныеПодписи.Attribute.Комментарий + + View + false + + + Edit + false + + + + Document.ЗапланированноеВзаимодействие.TabularSection.ДополнительныеРеквизиты.Attribute.ТекстоваяСтрока + + View + false + + + Edit + false + + + + InformationRegister.УдалитьНаборыЗначенийДоступа.Resource.Изменение + + View + false + + + Edit + false + + + + DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.ОбрезатьСтрокиСправа + + View + false + + + Edit + false + + + + ChartOfCharacteristicTypes.ДополнительныеРеквизитыИСведения.TabularSection.ЗависимостиДополнительныхРеквизитов.Attribute.Реквизит + + View + false + + + Edit + false + + + + Catalog.ВопросыШаблонаАнкеты.TabularSection.ПредопределенныеОтветы + + View + false + + + Edit + false + + + + InformationRegister.ДополнительныеАдресныеСведения.Resource.OKATO + + View + false + + + Edit + false + + + + InformationRegister.НастройкиПравОбъектов.StandardAttribute.Active + + View + false + + + Edit + false + + + + InformationRegister.НастройкиПравОбъектов.StandardAttribute.LineNumber + + View + false + + + Edit + false + + + + InformationRegister.НастройкиПравОбъектов.StandardAttribute.Recorder + + View + false + + + Edit + false + + + + InformationRegister.НастройкиПравОбъектов.StandardAttribute.Period + + View + false + + + Edit + false + + + + Catalog.Файлы.Attribute.ВладелецФайла + + View + false + + + Edit + false + + + + DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.ИспользоватьТранзакции + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоВходящее.TabularSection.ПолучателиОтвета.Attribute.Адрес + + View + false + + + Edit + false + + + + InformationRegister.УдалитьОчередьЗаданий.Resource.УдалитьРегламентноеЗадание + + View + false + + + Edit + false + + + + Catalog.ЗапланированноеВзаимодействиеПрисоединенныеФайлы.TabularSection.СертификатыШифрования.Attribute.Отпечаток + + View + false + + + Edit + false + + + + BusinessProcess.Задание.Attribute.РезультатВыполнения + + View + false + + + Edit + false + + + + InformationRegister.НастройкиТранспортаОбмена.Resource.КоличествоЭлементовВТранзакцииЗагрузкиДанных + + View + false + + + Edit + false + + + + InformationRegister.ДатыЗапретаИзменения.Dimension.Объект + + View + false + + + Edit + false + + + + InformationRegister.ПричиныИзмененияАдресныхСведений.Dimension.ИзмененныйОбъект + + View + false + + + Edit + false + + + + InformationRegister.НаборыЗначенийДоступа.Attribute.СтандартноеЗначение + + View + false + + + Edit + false + + + + Catalog.ПравилаОбработкиЭлектроннойПочты.Attribute.РеквизитДопУпорядочивания + + View + false + + + Edit + false + + + + Catalog.ДополнительныеОтчетыИОбработки.StandardAttribute.PredefinedDataName + + View + false + + + Edit + false + + + + Catalog.ДополнительныеОтчетыИОбработки.StandardAttribute.Predefined + + View + false + + + Edit + false + + + + Catalog.ДополнительныеОтчетыИОбработки.StandardAttribute.Ref + + View + false + + + Edit + false + + + + Catalog.ДополнительныеОтчетыИОбработки.StandardAttribute.DeletionMark + + View + false + + + Edit + false + + + + Catalog.ДополнительныеОтчетыИОбработки.StandardAttribute.IsFolder + + View + false + + + Edit + false + + + + Catalog.ДополнительныеОтчетыИОбработки.StandardAttribute.Owner + + View + false + + + Edit + false + + + + Catalog.ДополнительныеОтчетыИОбработки.StandardAttribute.Parent + + View + false + + + Edit + false + + + + Catalog.ДополнительныеОтчетыИОбработки.StandardAttribute.Description + + View + false + + + Edit + false + + + + Catalog.ДополнительныеОтчетыИОбработки.StandardAttribute.Code + + View + false + + + Edit + false + + + + Catalog.ТомаХраненияФайлов.Attribute.ПолныйПутьLinux + + View + false + + + Edit + false + + + + Catalog.ВнешниеПользователи.StandardAttribute.PredefinedDataName + + View + false + + + Edit + false + + + + Catalog.ВнешниеПользователи.StandardAttribute.Predefined + + View + false + + + Edit + false + + + + Catalog.ВнешниеПользователи.StandardAttribute.Ref + + View + false + + + Edit + false + + + + Catalog.ВнешниеПользователи.StandardAttribute.DeletionMark + + View + false + + + Edit + false + + + + Catalog.ВнешниеПользователи.StandardAttribute.IsFolder + + View + false + + + Edit + false + + + + Catalog.ВнешниеПользователи.StandardAttribute.Owner + + View + false + + + Edit + false + + + + Catalog.ВнешниеПользователи.StandardAttribute.Parent + + View + false + + + Edit + false + + + + Catalog.ВнешниеПользователи.StandardAttribute.Description + + View + false + + + Edit + false + + + + Catalog.ВнешниеПользователи.StandardAttribute.Code + + View + false + + + Edit + false + + + + Catalog.ВнешниеПользователи.TabularSection.ДополнительныеРеквизиты + + View + false + + + Edit + false + + + + InformationRegister.НастройкиПравОбъектов.Resource.НаследованиеРазрешено + + View + false + + + Edit + false + + + + Document.СообщениеSMS.Attribute.Ответственный + + View + false + + + Edit + false + + + + InformationRegister.ТаблицыГруппДоступа.Dimension.Таблица + + View + false + + + Edit + false + + + + Catalog.УчетныеЗаписиЭлектроннойПочты.Attribute.ВремяОжидания + + View + false + + + Edit + false + + + + Catalog.ЭлектронноеПисьмоВходящееПрисоединенныеФайлы.TabularSection.ЭлектронныеПодписи.Attribute.ДатаПодписи + + View + false + + + Edit + false + + + + InformationRegister.ЗначенияГруппДоступа.Dimension.ГруппаДоступа + + View + false + + + Edit + false + + + + Catalog.РассылкиОтчетов.Attribute.СетевойКаталогWindows + + View + false + + + Edit + false + + + + Catalog.Календари.TabularSection.ШаблонЗаполнения.Attribute.ДеньВключенВГрафик + + View + false + + + Edit + false + + + + Catalog.ПапкиФайлов.StandardAttribute.PredefinedDataName + + View + false + + + Edit + false + + + + Catalog.ПапкиФайлов.StandardAttribute.Predefined + + View + false + + + Edit + false + + + + Catalog.ПапкиФайлов.StandardAttribute.Ref + + View + false + + + Edit + false + + + + Catalog.ПапкиФайлов.StandardAttribute.DeletionMark + + View + false + + + Edit + false + + + + Catalog.ПапкиФайлов.StandardAttribute.IsFolder + + View + false + + + Edit + false + + + + Catalog.ПапкиФайлов.StandardAttribute.Owner + + View + false + + + Edit + false + + + + Catalog.ПапкиФайлов.StandardAttribute.Parent + + View + false + + + Edit + false + + + + Catalog.ПапкиФайлов.StandardAttribute.Description + + View + false + + + Edit + false + + + + Catalog.ПапкиФайлов.StandardAttribute.Code + + View + false + + + Edit + false + + + + Catalog.ВнешниеПользователи.TabularSection.ДополнительныеРеквизиты.Attribute.ТекстоваяСтрока + + View + false + + + Edit + false + + + + InformationRegister.РазрешенияНаИспользованиеВнешнихРесурсов.Dimension.ТипВладельца + + View + false + + + Edit + false + + + + Catalog.ИдентификаторыОбъектовМетаданных.Attribute.Имя + + View + false + + + Edit + false + + + + DataProcessor.ПомощникСозданияОбменаДанными.Attribute.ПарольАрхиваСообщенияОбмена + + View + false + + + Edit + false + + + + InformationRegister.ЗначенияГруппДоступаПоУмолчанию.Attribute.БезНастройки + + View + false + + + Edit + false + + + + Catalog.ЭлектронноеПисьмоВходящееПрисоединенныеФайлы.Attribute.ТекстХранилище + + View + false + + + Edit + false + + + + DataProcessor.ПоискИУстановкаОбновлений.Attribute.ИмяКаталогаРезервнойКопииИБ + + View + false + + + Edit + false + + + + Catalog.ВерсииФайлов.TabularSection.ЭлектронныеПодписи.Attribute.КомуВыданСертификат + + View + false + + + Edit + false + + + + InformationRegister.НапоминанияПользователя.StandardAttribute.Active + + View + false + + + Edit + false + + + + InformationRegister.НапоминанияПользователя.StandardAttribute.LineNumber + + View + false + + + Edit + false + + + + InformationRegister.НапоминанияПользователя.StandardAttribute.Recorder + + View + false + + + Edit + false + + + + InformationRegister.НапоминанияПользователя.StandardAttribute.Period + + View + false + + + Edit + false + + + + Document.Встреча.TabularSection.Участники.Attribute.ПредставлениеКонтакта + + View + false + + + Edit + false + + + + InformationRegister.ЗначенияГруппДоступа.Resource.ЗначениеРазрешено + + View + false + + + Edit + false + + + + InformationRegister.УдалитьВерсииПодсистем.Dimension.ОбластьДанных + + View + false + + + Edit + false + + + + Catalog.РассылкиОтчетов.Attribute.ПисьмоВФорматеHTML + + View + false + + + Edit + false + + + + DataProcessor.ЗагрузкаКурсовВалют.TabularSection.СписокВалют.Attribute.КодВалюты + + View + false + + + Edit + false + + + + DataProcessor.ПомощникСозданияОбменаДанными.TabularSection.ИнформацияСтатистики.Attribute.ТипПриемникаСтрокой + + View + false + + + Edit + false + + + + InformationRegister.ОриентирыАдресныхОбъектов.Dimension.Идентификатор + + View + false + + + Edit + false + + + + InformationRegister.ЗамерыВремениТехнологические.Resource.Комментарий + + View + false + + + Edit + false + + + + InformationRegister.КурсыВалют.Resource.Курс + + View + false + + + Edit + false + + + + Catalog.ВстречаПрисоединенныеФайлы.TabularSection.СертификатыШифрования.Attribute.Сертификат + + View + false + + + Edit + false + + + + Document.ЗапланированноеВзаимодействие.Attribute.Удалить_РассмотретьПосле + + View + false + + + Edit + false + + + + BusinessProcess.Задание.Attribute.ВнешнееЗадание + + View + false + + + Edit + false + + + + InformationRegister.НаборыЗначенийДоступа.Dimension.Объект + + View + false + + + Edit + false + + + + InformationRegister.УдалитьЗамерыВремени.Dimension.УникальныйИдентификатор + + View + false + + + Edit + false + + + + Document.ЗапланированноеВзаимодействие.TabularSection.ДополнительныеРеквизиты + + View + false + + + Edit + false + + + + DataProcessor.ПомощникИнтерактивногоОбменаДанными.TabularSection.ИнформацияСтатистики.Attribute.ТипОбъектаСтрокой + + View + false + + + Edit + false + + + + InformationRegister.НастройкиПравОбъектов.Attribute.ПорядокНастройки + + View + false + + + Edit + false + + + + DataProcessor.РезервноеКопированиеИБ.Attribute.ВариантРасписанияРезервногоКопирования + + View + false + + + Edit + false + + + + InformationRegister.ЗамерыКомментарииСтатистики.Dimension.ОперацияСтатистики + + View + false + + + Edit + false + + + + Catalog.ЭлектронноеПисьмоВходящееПрисоединенныеФайлы.TabularSection.ЭлектронныеПодписи.Attribute.ИмяФайлаПодписи + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоВходящее.TabularSection.АдресаУведомленияОПрочтении.Attribute.Адрес + + View + false + + + Edit + false + + + + InformationRegister.ЗначенияГруппДоступа.StandardAttribute.Active + + View + false + + + Edit + false + + + + InformationRegister.ЗначенияГруппДоступа.StandardAttribute.LineNumber + + View + false + + + Edit + false + + + + InformationRegister.ЗначенияГруппДоступа.StandardAttribute.Recorder + + View + false + + + Edit + false + + + + InformationRegister.ЗначенияГруппДоступа.StandardAttribute.Period + + View + false + + + Edit + false + + + + InformationRegister.ПубличныеИдентификаторыСинхронизируемыхОбъектов.Dimension.УзелИнформационнойБазы + + View + false + + + Edit + false + + + + Catalog.ПрофилиГруппДоступа.TabularSection.Роли.Attribute.Роль + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоИсходящее.TabularSection.ПолучателиСкрытыхКопий + + View + false + + + Edit + false + + + + Catalog.СертификатыКлючейЭлектроннойПодписиИШифрования.Attribute.Фамилия + + View + false + + + Edit + false + + + + DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.ИспользоватьОтборПоДатеДляВсехОбъектов + + View + false + + + Edit + false + + + + InformationRegister.ФайлыВРабочемКаталоге.Resource.ВРабочемКаталогеВладельца + + View + false + + + Edit + false + + + + InformationRegister.УдалитьОчередьЗаданий.Resource.ЭксклюзивноеВыполнение + + View + false + + + Edit + false + + + + InformationRegister.СтатистикаКонфигурации.Dimension.ИдентификаторОбластиСтатистики + + View + false + + + Edit + false + + + + Catalog.УчетныеЗаписиЭлектроннойПочты.Attribute.АдресЭлектроннойПочты + + View + false + + + Edit + false + + + + InformationRegister.УдалитьЗамерыВремени.Resource.ВремяВыполнения + + View + false + + + Edit + false + + + + DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.УзелОбменаЗагрузкаФоновыхДанных + + View + false + + + Edit + false + + + + Catalog.КлючевыеОперации.Attribute.МинимальноДопустимыйУровень + + View + false + + + Edit + false + + + + InformationRegister.ФайлыВРабочемКаталоге.Dimension.Версия + + View + false + + + Edit + false + + + + InformationRegister.ПредметыПапкиВзаимодействий.Resource.РассмотретьПосле + + View + false + + + Edit + false + + + + Catalog.ЗапланированноеВзаимодействиеПрисоединенныеФайлы.TabularSection.СертификатыШифрования + + View + false + + + Edit + false + + + + Catalog.ИдентификаторыОбъектовМетаданных.Attribute.ПолноеИмя + + View + false + + + Edit + false + + + + Catalog.ЭлектронноеПисьмоИсходящееПрисоединенныеФайлы.TabularSection.ЭлектронныеПодписи.Attribute.КомуВыданСертификат + + View + false + + + Edit + false + + + + Catalog.ВидыКонтактнойИнформации.Attribute.РеквизитДопУпорядочивания + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоВходящее.Attribute.УчетнаяЗапись + + View + false + + + Edit + false + + + + Catalog.ЭлектронноеПисьмоВходящееПрисоединенныеФайлы.Attribute.ПутьКФайлу + + View + false + + + Edit + false + + + + InformationRegister.ЗначенияГруппДоступа.Dimension.ЗначениеДоступа + + View + false + + + Edit + false + + + + InformationRegister.КэшПрограммныхИнтерфейсов.StandardAttribute.Active + + View + false + + + Edit + false + + + + InformationRegister.КэшПрограммныхИнтерфейсов.StandardAttribute.LineNumber + + View + false + + + Edit + false + + + + InformationRegister.КэшПрограммныхИнтерфейсов.StandardAttribute.Recorder + + View + false + + + Edit + false + + + + InformationRegister.КэшПрограммныхИнтерфейсов.StandardAttribute.Period + + View + false + + + Edit + false + + + + InformationRegister.РабочиеКаталогиФайлов.Dimension.Пользователь + + View + false + + + Edit + false + + + + DataProcessor.ПомощникСозданияОбменаДанными.Attribute.ВерсияФорматаФайлаНастроекОбменаДанными + + View + false + + + Edit + false + + + + InformationRegister.ЗапросыРазрешенийНаИспользованиеВнешнихРесурсов.Attribute.ЗапросАдминистрирования + + View + false + + + Edit + false + + + + InformationRegister.ПраваРолей.Resource.ЧтениеБезОграничения + + View + false + + + Edit + false + + + + DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.ЗаписыватьВИнформационнуюБазуТолькоИзмененныеОбъекты + + View + false + + + Edit + false + + + + InformationRegister.СведенияОПользователях.Resource.СрокДействияНеОграничен + + View + false + + + Edit + false + + + + InformationRegister.НаличиеПрисоединенныхФайлов.Attribute.ИдентификаторОбъекта + + View + false + + + Edit + false + + + + InformationRegister.ГруппыЗначенийДоступа.StandardAttribute.Active + + View + false + + + Edit + false + + + + InformationRegister.ГруппыЗначенийДоступа.StandardAttribute.LineNumber + + View + false + + + Edit + false + + + + InformationRegister.ГруппыЗначенийДоступа.StandardAttribute.Recorder + + View + false + + + Edit + false + + + + InformationRegister.ГруппыЗначенийДоступа.StandardAttribute.Period + + View + false + + + Edit + false + + + + InformationRegister.СостоянияКонтактовВзаимодействий.Resource.КоличествоНеРассмотрено + + View + false + + + Edit + false + + + + Catalog.ЭлектронноеПисьмоВходящееПрисоединенныеФайлы.TabularSection.СертификатыШифрования.Attribute.Представление + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоИсходящее.Attribute.УведомитьОПрочтении + + View + false + + + Edit + false + + + + InformationRegister.ПравилаДляОбменаДанными.Resource.ИмяФайлаПротоколаОбмена + + View + false + + + Edit + false + + + + DataProcessor.ПомощникСозданияОбменаДанными.TabularSection.ИнформацияСтатистики + + View + false + + + Edit + false + + + + InformationRegister.АдресныеОбъекты.Dimension.КодРайона + + View + false + + + Edit + false + + + + InformationRegister.НастройкиУчетныхЗаписейЭлектроннойПочты.Resource.НеИспользоватьВоВстроенномПочтовомКлиенте + + View + false + + + Edit + false + + + + DataProcessor.ПомощникСозданияОбменаДанными.Attribute.FTPСжиматьФайлИсходящегоСообщения + + View + false + + + Edit + false + + + + ChartOfCharacteristicTypes.ВопросыДляАнкетирования.Attribute.ЗаполнятьАвтоматически + + View + false + + + Edit + false + + + + InformationRegister.НастройкиКомандПечати.StandardAttribute.Active + + View + false + + + Edit + false + + + + InformationRegister.НастройкиКомандПечати.StandardAttribute.LineNumber + + View + false + + + Edit + false + + + + InformationRegister.НастройкиКомандПечати.StandardAttribute.Recorder + + View + false + + + Edit + false + + + + InformationRegister.НастройкиКомандПечати.StandardAttribute.Period + + View + false + + + Edit + false + + + + Document.НазначениеОпросов.Attribute.ТипРеспондентов + + View + false + + + Edit + false + + + + Catalog.РассылкиОтчетов.TabularSection.Отчеты + + View + false + + + Edit + false + + + + InformationRegister.УдалитьНаборыЗначенийДоступа.Resource.Чтение + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоВходящее.Attribute.ИдентификаторыОснований + + View + false + + + Edit + false + + + + DataProcessor.ПомощникИнтерактивногоОбменаДанными.Attribute.УзелИнформационнойБазы + + View + false + + + Edit + false + + + + InformationRegister.УдалитьГруппыЗначенийДоступа.Dimension.ВидДоступа + + View + false + + + Edit + false + + + + DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.ФлагРежимОтладкиОбработчиков + + View + false + + + Edit + false + + + + InformationRegister.ЗначенияГруппДоступаПоУмолчанию.Resource.ВсеРазрешены + + View + false + + + Edit + false + + + + Catalog.ЗапланированноеВзаимодействиеПрисоединенныеФайлы.TabularSection.ЭлектронныеПодписи.Attribute.Подпись + + View + false + + + Edit + false + + + + Catalog.Пользователи.Attribute.ИдентификаторПользователяИБ + + View + false + + + Edit + false + + + + InformationRegister.АдресныеОбъекты.Dimension.КодОкруга + + View + false + + + Edit + false + + + + Catalog.Файлы.TabularSection.СертификатыШифрования.Attribute.Отпечаток + + View + false + + + Edit + false + + + + DataProcessor.РегистрацияИзмененийДляОбменаДанными.Attribute.НастройкаАдресВнешнейОбработкиЗапросов + + View + false + + + Edit + false + + + + DataProcessor.СопоставлениеОбъектовИнформационныхБаз.Attribute.ПоляТаблицыПриемника + + View + false + + + Edit + false + + + + InformationRegister.ДатыЗапретаИзменения.Attribute.Комментарий + + View + false + + + Edit + false + + + + Catalog.Файлы.Attribute.ТекущаяВерсияНомерВерсии + + View + false + + + Edit + false + + + + Catalog.СообщениеSMSПрисоединенныеФайлы.TabularSection.СертификатыШифрования.Attribute.Сертификат + + View + false + + + Edit + false + + + + InformationRegister.НастройкиПравОбъектов.Attribute.УровеньЗапрещенияПрава + + View + false + + + Edit + false + + + + InformationRegister.УдалитьОчередьЗаданий.Dimension.ОбластьДанных + + View + false + + + Edit + false + + + + InformationRegister.ЗапросыРазрешенийНаИспользованиеВнешнихРесурсов.Attribute.Имя + + View + false + + + Edit + false + + + + DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.ИмяФайлаПравилОбмена + + View + false + + + Edit + false + + + + Document.СообщениеSMS.TabularSection.НаборыЗначенийДоступа.Attribute.Уточнение + + View + false + + + Edit + false + + + + InformationRegister.КодировкиВерсийФайлов.Resource.Кодировка + + View + false + + + Edit + false + + + + DataProcessor.ПоискИУстановкаОбновлений.Attribute.ИмяФайлаОбновления + + View + false + + + Edit + false + + + + DataProcessor.ПомощникСозданияОбменаДанными.Attribute.FTPСоединениеПользователь + + View + false + + + Edit + false + + + + Catalog.ЗапланированноеВзаимодействиеПрисоединенныеФайлы.TabularSection.ЭлектронныеПодписи.Attribute.Сертификат + + View + false + + + Edit + false + + + + InformationRegister.ОбщиеНастройкиУзловИнформационныхБаз.Attribute.НомерОтправленного + + View + false + + + Edit + false + + + + Catalog.ВерсииФайлов.Attribute.ДатаМодификацииФайла + + View + false + + + Edit + false + + + + InformationRegister.НазначениеДополнительныхОбработок.Dimension.ОбъектНазначения + + View + false + + + Edit + false + + + + InformationRegister.СостоянияУспешныхОбменовДанными.Dimension.ДействиеПриОбмене + + View + false + + + Edit + false + + + + InformationRegister.ПользовательскиеНастройкиДоступаКОбработкам.Dimension.ИдентификаторКоманды + + View + false + + + Edit + false + + + + Catalog.ПредопределенныеВариантыОтчетов.StandardAttribute.PredefinedDataName + + View + false + + + Edit + false + + + + Catalog.ПредопределенныеВариантыОтчетов.StandardAttribute.Predefined + + View + false + + + Edit + false + + + + Catalog.ПредопределенныеВариантыОтчетов.StandardAttribute.Ref + + View + false + + + Edit + false + + + + Catalog.ПредопределенныеВариантыОтчетов.StandardAttribute.DeletionMark + + View + false + + + Edit + false + + + + Catalog.ПредопределенныеВариантыОтчетов.StandardAttribute.IsFolder + + View + false + + + Edit + false + + + + Catalog.ПредопределенныеВариантыОтчетов.StandardAttribute.Owner + + View + false + + + Edit + false + + + + Catalog.ПредопределенныеВариантыОтчетов.StandardAttribute.Parent + + View + false + + + Edit + false + + + + Catalog.ПредопределенныеВариантыОтчетов.StandardAttribute.Description + + View + false + + + Edit + false + + + + Catalog.ПредопределенныеВариантыОтчетов.StandardAttribute.Code + + View + false + + + Edit + false + + + + Catalog.РолиИсполнителей.Attribute.ТипыДополнительногоОбъектаАдресации + + View + false + + + Edit + false + + + + DataProcessor.ПомощникИнтерактивногоОбменаДанными.TabularSection.ИнформацияСтатистики.Attribute.ПроцентСопоставленияОбъектов + + View + false + + + Edit + false + + + + DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ТаблицаПравилВыгрузки + + View + false + + + Edit + false + + + + Document.ЗапланированноеВзаимодействие.Attribute.Тема + + View + false + + + Edit + false + + + + Catalog.ЗапланированноеВзаимодействиеПрисоединенныеФайлы.Attribute.Редактирует + + View + false + + + Edit + false + + + + BusinessProcess.Задание.Attribute.Подтверждено + + View + false + + + Edit + false + + + + Catalog.Валюты.Attribute.ЗагружаетсяИзИнтернета + + View + false + + + Edit + false + + + + DataProcessor.КонвертацияОбъектовXDTO.Attribute.ВыводВОкноСообщенийИнформационныхСообщений + + View + false + + + Edit + false + + + + ChartOfCharacteristicTypes.ДополнительныеРеквизитыИСведения.TabularSection.ЗависимостиДополнительныхРеквизитов.Attribute.ЗависимоеСвойство + + View + false + + + Edit + false + + + + InformationRegister.ЗначенияГруппДоступаПоУмолчанию.Dimension.ГруппаДоступа + + View + false + + + Edit + false + + + + InformationRegister.РазрешенияНаИспользованиеВнешнихРесурсов.Dimension.ИдентификаторВладельца + + View + false + + + Edit + false + + + + Catalog.ГруппыДоступа.TabularSection.ЗначенияДоступа + + View + false + + + Edit + false + + + + Catalog.ИдентификаторыОбъектовМетаданных.Attribute.КлючОбъектаМетаданных + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоВходящее.Attribute.Важность + + View + false + + + Edit + false + + + + BusinessProcess.Задание.Attribute.СрокПроверки + + View + false + + + Edit + false + + + + Catalog.Заметки.Attribute.Пометка + + View + false + + + Edit + false + + + + InformationRegister.ИсполнителиЗадач.Dimension.ДополнительныйОбъектАдресации + + View + false + + + Edit + false + + + + ChartOfCharacteristicTypes.ДополнительныеРеквизитыИСведения.TabularSection.ЗависимостиДополнительныхРеквизитов.Attribute.Условие + + View + false + + + Edit + false + + + + InformationRegister.НастройкиОчисткиФайлов.Resource.ЭтоФайл + + View + false + + + Edit + false + + + + Catalog.РассылкиОтчетов.TabularSection.ФорматыОтчетов + + View + false + + + Edit + false + + + + InformationRegister.РежимыПодключенияВнешнихМодулей.Dimension.ТипПрограммногоМодуля + + View + false + + + Edit + false + + + + DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ОбработкиНастройкиЗагрузки + + View + false + + + Edit + false + + + + Catalog.ВстречаПрисоединенныеФайлы.TabularSection.ЭлектронныеПодписи.Attribute.Сертификат + + View + false + + + Edit + false + + + + DataProcessor.ПомощникСозданияОбменаДанными.TabularSection.ИнформацияСтатистики.Attribute.ЭтоУдалениеОбъекта + + View + false + + + Edit + false + + + + Catalog.ПредопределенныеВариантыОтчетов.Attribute.ХешНастроек + + View + false + + + Edit + false + + + + Catalog.Пользователи.TabularSection.КонтактнаяИнформация.Attribute.Регион + + View + false + + + Edit + false + + + + InformationRegister.УдалитьОчередьЗаданий.Dimension.Идентификатор + + View + false + + + Edit + false + + + + InformationRegister.НастройкиУчетныхЗаписейЭлектроннойПочты.Resource.ПодписьПриОтветеПересылкеПростойТекст + + View + false + + + Edit + false + + + + InformationRegister.ПравилаДляОбменаДанными.Resource.РежимОтладкиЗагрузки + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоВходящее.TabularSection.ПолучателиОтвета + + View + false + + + Edit + false + + + + Catalog.СообщениеSMSПрисоединенныеФайлы.Attribute.Описание + + View + false + + + Edit + false + + + + InformationRegister.ПравилаДляОбменаДанными.Attribute.ИспользоватьФильтрВыборочнойРегистрацииОбъектов + + View + false + + + Edit + false + + + + Document.Встреча.TabularSection.НаборыЗначенийДоступа.Attribute.Изменение + + View + false + + + Edit + false + + + + InformationRegister.РучныеИзмененияГрафиковРаботы.StandardAttribute.Active + + View + false + + + Edit + false + + + + InformationRegister.РучныеИзмененияГрафиковРаботы.StandardAttribute.LineNumber + + View + false + + + Edit + false + + + + InformationRegister.РучныеИзмененияГрафиковРаботы.StandardAttribute.Recorder + + View + false + + + Edit + false + + + + InformationRegister.РучныеИзмененияГрафиковРаботы.StandardAttribute.Period + + View + false + + + Edit + false + + + + Document.ТелефонныйЗвонок.Attribute.Описание + + View + false + + + Edit + false + + + + DataProcessor.КонвертацияОбъектовXDTO.Attribute.Параметры + + View + false + + + Edit + false + + + + Catalog.ПоставляемыеДанные.Attribute.ВидДанных + + View + false + + + Edit + false + + + + InformationRegister.СлужебныеАдресныеСведения.Resource.Значение + + View + false + + + Edit + false + + + + DataProcessor.ПомощникСозданияОбменаДанными.TabularSection.ИнформацияСтатистики.Attribute.ТипОбъектаСтрокой + + View + false + + + Edit + false + + + + Catalog.ЭлектронноеПисьмоИсходящееПрисоединенныеФайлы.TabularSection.СертификатыШифрования.Attribute.Сертификат + + View + false + + + Edit + false + + + + Catalog.ГруппыПользователей.StandardAttribute.PredefinedDataName + + View + false + + + Edit + false + + + + Catalog.ГруппыПользователей.StandardAttribute.Predefined + + View + false + + + Edit + false + + + + Catalog.ГруппыПользователей.StandardAttribute.Ref + + View + false + + + Edit + false + + + + Catalog.ГруппыПользователей.StandardAttribute.DeletionMark + + View + false + + + Edit + false + + + + Catalog.ГруппыПользователей.StandardAttribute.IsFolder + + View + false + + + Edit + false + + + + Catalog.ГруппыПользователей.StandardAttribute.Owner + + View + false + + + Edit + false + + + + Catalog.ГруппыПользователей.StandardAttribute.Parent + + View + false + + + Edit + false + + + + Catalog.ГруппыПользователей.StandardAttribute.Description + + View + false + + + Edit + false + + + + Catalog.ГруппыПользователей.StandardAttribute.Code + + View + false + + + Edit + false + + + + DataProcessor.НастройкаРезервногоКопированияИБ.Attribute.ВыполнятьАвтоматическоеРезервноеКопирование + + View + false + + + Edit + false + + + + InformationRegister.ЗамерыВремениТехнологические.Attribute.Пользователь + + View + false + + + Edit + false + + + + Catalog.ПредопределенныеВариантыОтчетов.Attribute.Отчет + + View + false + + + Edit + false + + + + DataProcessor.СопоставлениеОбъектовИнформационныхБаз.TabularSection.ТаблицаАвтоматическиСопоставленныхОбъектов.Attribute.ПриемникПоле4 + + View + false + + + Edit + false + + + + Task.ЗадачаИсполнителя.Attribute.Предмет + + View + false + + + Edit + false + + + + InformationRegister.ПравилаДляОбменаДанными.Dimension.ВидПравил + + View + false + + + Edit + false + + + + Document.Встреча.Attribute.Тема + + View + false + + + Edit + false + + + + Catalog.СообщениеSMSПрисоединенныеФайлы.Attribute.ПодписанЭП + + View + false + + + Edit + false + + + + DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.НеВыгружатьОбъектыПоСсылкам + + View + false + + + Edit + false + + + + Document.СообщениеSMS.Attribute.Состояние + + View + false + + + Edit + false + + + + Catalog.ТелефонныйЗвонокПрисоединенныеФайлы.TabularSection.СертификатыШифрования.Attribute.Отпечаток + + View + false + + + Edit + false + + + + Catalog.ИдентификаторыОбъектовМетаданных.Attribute.НоваяСсылка + + View + false + + + Edit + false + + + + InformationRegister.ОперацииСтатистики.Attribute.КоличествоУникальныхКомментариев + + View + false + + + Edit + false + + + + InformationRegister.ПакетыДляОтправки.Attribute.ХешПакета + + View + false + + + Edit + false + + + + DataProcessor.ОценкаПроизводительности.Attribute.ВыполнятьЗамерыПроизводительности + + View + false + + + Edit + false + + + + Catalog.Файлы.Attribute.ТекущаяВерсияКод + + View + false + + + Edit + false + + + + InformationRegister.НастройкиУчетныхЗаписейЭлектроннойПочты.Resource.ОтветственныйЗаОбработкуПисем + + View + false + + + Edit + false + + + + InformationRegister.КэшПрограммныхИнтерфейсов.Resource.ДатаОбновления + + View + false + + + Edit + false + + + + Catalog.КлючевыеОперации.Attribute.ЦелевоеВремя + + View + false + + + Edit + false + + + + Catalog.УчетныеЗаписиЭлектроннойПочты.Attribute.УдалитьВПредставлениеВключатьИмяПользователя + + View + false + + + Edit + false + + + + InformationRegister.НастройкиТранспортаОбмена.Resource.WSЗапомнитьПароль + + View + false + + + Edit + false + + + + Catalog.ЭлектронноеПисьмоВходящееПрисоединенныеФайлы.TabularSection.СертификатыШифрования + + View + false + + + Edit + false + + + + Catalog.ТелефонныйЗвонокПрисоединенныеФайлы.Attribute.ТекстХранилище + + View + false + + + Edit + false + + + + InformationRegister.ХранимыеФайлыВерсий.Dimension.ВерсияФайла + + View + false + + + Edit + false + + + + Catalog.ВопросыШаблонаАнкеты.Attribute.Формулировка + + View + false + + + Edit + false + + + + InformationRegister.АдресныеОбъекты.Dimension.Уровень + + View + false + + + Edit + false + + + + DataProcessor.ИнтерактивноеИзменениеВыгрузки.Attribute.ПериодОтбораВсехДокументов + + View + false + + + Edit + false + + + + DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.ДатаНачала + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоИсходящее.TabularSection.ПолучателиСкрытыхКопий.Attribute.Контакт + + View + false + + + Edit + false + + + + Catalog.ПредопределенныеВариантыОтчетов.Attribute.ВидимостьПоУмолчанию + + View + false + + + Edit + false + + + + InformationRegister.ОбластиСтатистики.Resource.Наименование + + View + false + + + Edit + false + + + + DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.ПарольИнформационнойБазыДляПодключения + + View + false + + + Edit + false + + + + InformationRegister.СостоянияКонтрагентов.Attribute.КПП + + View + false + + + Edit + false + + + + Catalog.ЭлектронноеПисьмоИсходящееПрисоединенныеФайлы.Attribute.ДатаМодификацииУниверсальная + + View + false + + + Edit + false + + + + DataProcessor.ПоискИУстановкаОбновлений.TabularSection.ДоступныеОбновления.Attribute.РазмерФайлаОбновления + + View + false + + + Edit + false + + + + BusinessProcess.Задание.Attribute.Наименование + + View + false + + + Edit + false + + + + InformationRegister.НастройкиОчисткиФайлов.StandardAttribute.Active + + View + false + + + Edit + false + + + + InformationRegister.НастройкиОчисткиФайлов.StandardAttribute.LineNumber + + View + false + + + Edit + false + + + + InformationRegister.НастройкиОчисткиФайлов.StandardAttribute.Recorder + + View + false + + + Edit + false + + + + InformationRegister.НастройкиОчисткиФайлов.StandardAttribute.Period + + View + false + + + Edit + false + + + + InformationRegister.УдалитьПраваПоЗначениямДоступа.Dimension.Пользователь + + View + false + + + Edit + false + + + + InformationRegister.СоответствияОбъектовИнформационныхБаз.Dimension.УзелИнформационнойБазы + + View + false + + + Edit + false + + + + InformationRegister.ОбщиеНастройкиУзловИнформационныхБаз.StandardAttribute.Active + + View + false + + + Edit + false + + + + InformationRegister.ОбщиеНастройкиУзловИнформационныхБаз.StandardAttribute.LineNumber + + View + false + + + Edit + false + + + + InformationRegister.ОбщиеНастройкиУзловИнформационныхБаз.StandardAttribute.Recorder + + View + false + + + Edit + false + + + + InformationRegister.ОбщиеНастройкиУзловИнформационныхБаз.StandardAttribute.Period + + View + false + + + Edit + false + + + + Catalog.ЗначенияСвойствОбъектовИерархия.StandardAttribute.PredefinedDataName + + View + false + + + Edit + false + + + + Catalog.ЗначенияСвойствОбъектовИерархия.StandardAttribute.Predefined + + View + false + + + Edit + false + + + + Catalog.ЗначенияСвойствОбъектовИерархия.StandardAttribute.Ref + + View + false + + + Edit + false + + + + Catalog.ЗначенияСвойствОбъектовИерархия.StandardAttribute.DeletionMark + + View + false + + + Edit + false + + + + Catalog.ЗначенияСвойствОбъектовИерархия.StandardAttribute.IsFolder + + View + false + + + Edit + false + + + + Catalog.ЗначенияСвойствОбъектовИерархия.StandardAttribute.Owner + + View + false + + + Edit + false + + + + Catalog.ЗначенияСвойствОбъектовИерархия.StandardAttribute.Parent + + View + false + + + Edit + false + + + + Catalog.ЗначенияСвойствОбъектовИерархия.StandardAttribute.Description + + View + false + + + Edit + false + + + + Catalog.ЗначенияСвойствОбъектовИерархия.StandardAttribute.Code + + View + false + + + Edit + false + + + + BusinessProcess.Задание.Attribute.Автор + + View + false + + + Edit + false + + + + Catalog.Организации.TabularSection.КонтактнаяИнформация.Attribute.Вид + + View + false + + + Edit + false + + + + DataProcessor.ПоискИУстановкаОбновлений.Attribute.РасписаниеПроверкиНаличияОбновления + + View + false + + + Edit + false + + + + Catalog.КлючевыеОперации.Attribute.Приоритет + + View + false + + + Edit + false + + + + Catalog.ВстречаПрисоединенныеФайлы.TabularSection.СертификатыШифрования + + View + false + + + Edit + false + + + + DataProcessor.ПомощникИнтерактивногоОбменаДанными.Attribute.ИмяПланаОбмена + + View + false + + + Edit + false + + + + Catalog.ЭлектронноеПисьмоВходящееПрисоединенныеФайлы.TabularSection.СертификатыШифрования.Attribute.Отпечаток + + View + false + + + Edit + false + + + + InformationRegister.УдалитьОчередьЗаданий.Resource.Шаблон + + View + false + + + Edit + false + + + + Catalog.ОчередьЗаданий.Attribute.ДатаНачалаПоследнегоЗапуска + + View + false + + + Edit + false + + + + Catalog.ЭлектронноеПисьмоИсходящееПрисоединенныеФайлы.Attribute.Автор + + View + false + + + Edit + false + + + + Catalog.ЭлектронноеПисьмоИсходящееПрисоединенныеФайлы.TabularSection.ЭлектронныеПодписи.Attribute.Сертификат + + View + false + + + Edit + false + + + + DataProcessor.ПомощникСозданияОбменаДанными.Attribute.КодУзлаКорреспондента + + View + false + + + Edit + false + + + + DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.ДатаВыгрузкиДанных + + View + false + + + Edit + false + + + + InformationRegister.ЗапросыРазрешенийНаИспользованиеВнешнихРесурсов.Resource.ИдентификаторВладельца + + View + false + + + Edit + false + + + + DataProcessor.ИнтерактивноеИзменениеВыгрузки.Attribute.АдресКомпоновщикаВсехДокументов + + View + false + + + Edit + false + + + + ChartOfCharacteristicTypes.ВопросыДляАнкетирования.Attribute.Длина + + View + false + + + Edit + false + + + + Catalog.ПредопределенныеВариантыОтчетов.Attribute.КлючЗамеров + + View + false + + + Edit + false + + + + DataProcessor.КонвертацияОбъектовРаспределенныхИнформационныхБаз.Attribute.ПолеИмяФайлаСообщенияОбмена + + View + false + + + Edit + false + + + + InformationRegister.УдалитьАдресныйКлассификатор.Dimension.Код + + View + false + + + Edit + false + + + + InformationRegister.НастройкиВариантовОтчетов.Dimension.Подсистема + + View + false + + + Edit + false + + + + DataProcessor.НастройкаРезервногоКопированияИБ.Attribute.ТипОграничения + + View + false + + + Edit + false + + + + DataProcessor.СопоставлениеОбъектовИнформационныхБаз.TabularSection.ТаблицаАвтоматическиСопоставленныхОбъектов.Attribute.ИсточникПоле1 + + View + false + + + Edit + false + + + + InformationRegister.ЗамерыОперацииСтатистики.Resource.КоличествоЗначений + + View + false + + + Edit + false + + + + DataProcessor.СопоставлениеОбъектовИнформационныхБаз.TabularSection.ТаблицаНеутвержденныхСвязей.Attribute.ТипИсточника + + View + false + + + Edit + false + + + + Catalog.ПрограммыЭлектроннойПодписиИШифрования.StandardAttribute.PredefinedDataName + + View + false + + + Edit + false + + + + Catalog.ПрограммыЭлектроннойПодписиИШифрования.StandardAttribute.Predefined + + View + false + + + Edit + false + + + + Catalog.ПрограммыЭлектроннойПодписиИШифрования.StandardAttribute.Ref + + View + false + + + Edit + false + + + + Catalog.ПрограммыЭлектроннойПодписиИШифрования.StandardAttribute.DeletionMark + + View + false + + + Edit + false + + + + Catalog.ПрограммыЭлектроннойПодписиИШифрования.StandardAttribute.IsFolder + + View + false + + + Edit + false + + + + Catalog.ПрограммыЭлектроннойПодписиИШифрования.StandardAttribute.Owner + + View + false + + + Edit + false + + + + Catalog.ПрограммыЭлектроннойПодписиИШифрования.StandardAttribute.Parent + + View + false + + + Edit + false + + + + Catalog.ПрограммыЭлектроннойПодписиИШифрования.StandardAttribute.Description + + View + false + + + Edit + false + + + + Catalog.ПрограммыЭлектроннойПодписиИШифрования.StandardAttribute.Code + + View + false + + + Edit + false + + + + Catalog.ВидыКонтактнойИнформации.Attribute.Подсказка + + View + false + + + Edit + false + + + + Catalog.Пользователи.TabularSection.КонтактнаяИнформация.Attribute.Вид + + View + false + + + Edit + false + + + + InformationRegister.СостоянияПапокПисем.StandardAttribute.Active + + View + false + + + Edit + false + + + + InformationRegister.СостоянияПапокПисем.StandardAttribute.LineNumber + + View + false + + + Edit + false + + + + InformationRegister.СостоянияПапокПисем.StandardAttribute.Recorder + + View + false + + + Edit + false + + + + InformationRegister.СостоянияПапокПисем.StandardAttribute.Period + + View + false + + + Edit + false + + + + InformationRegister.БезопасноеХранилищеДанных.Dimension.Владелец + + View + false + + + Edit + false + + + + InformationRegister.ДомаЗданияСтроения.Resource.Строения + + View + false + + + Edit + false + + + + DataProcessor.ТранспортСообщенийОбменаEMAIL.Attribute.EMAILМаксимальныйДопустимыйРазмерСообщения + + View + false + + + Edit + false + + + + Catalog.ВерсииФайлов.TabularSection.ЭлектронныеПодписи + + View + false + + + Edit + false + + + + Catalog.СообщениеSMSПрисоединенныеФайлы.Attribute.Автор + + View + false + + + Edit + false + + + + Document.СообщениеSMS.TabularSection.ДополнительныеРеквизиты.Attribute.Значение + + View + false + + + Edit + false + + + + Catalog.СообщениеSMSПрисоединенныеФайлы.TabularSection.СертификатыШифрования.Attribute.Отпечаток + + View + false + + + Edit + false + + + + InformationRegister.ДополнительныеСведения.Resource.Значение + + View + false + + + Edit + false + + + + Catalog.ТелефонныйЗвонокПрисоединенныеФайлы.Attribute.ПутьКФайлу + + View + false + + + Edit + false + + + + DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.КомментарийПриВыгрузкеДанных + + View + false + + + Edit + false + + + + DataProcessor.КонвертацияОбъектовXDTO.Attribute.ИмяФайлаОбмена + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоВходящее.TabularSection.НаборыЗначенийДоступа.Attribute.Уточнение + + View + false + + + Edit + false + + + + DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.НепосредственноеЧтениеВИБПриемнике + + View + false + + + Edit + false + + + + InformationRegister.НастройкиТранспортаОбмена.StandardAttribute.Active + + View + false + + + Edit + false + + + + InformationRegister.НастройкиТранспортаОбмена.StandardAttribute.LineNumber + + View + false + + + Edit + false + + + + InformationRegister.НастройкиТранспортаОбмена.StandardAttribute.Recorder + + View + false + + + Edit + false + + + + InformationRegister.НастройкиТранспортаОбмена.StandardAttribute.Period + + View + false + + + Edit + false + + + + Catalog.ТелефонныйЗвонокПрисоединенныеФайлы.TabularSection.ЭлектронныеПодписи.Attribute.ИмяФайлаПодписи + + View + false + + + Edit + false + + + + InformationRegister.НапоминанияПользователя.Attribute.Расписание + + View + false + + + Edit + false + + + + DataProcessor.БлокировкаРаботыПользователей.Attribute.НачалоДействияБлокировки + + View + false + + + Edit + false + + + + Catalog.ЭлектронноеПисьмоИсходящееПрисоединенныеФайлы.Attribute.Описание + + View + false + + + Edit + false + + + + DataProcessor.ПоискИУстановкаОбновлений.TabularSection.ДоступныеОбновления.Attribute.ВерсияДляОбновления + + View + false + + + Edit + false + + + + InformationRegister.НастройкиТранспортаОбмена.Resource.КоличествоЭлементовВТранзакцииВыгрузкиДанных + + View + false + + + Edit + false + + + + InformationRegister.НаборыЗначенийДоступа.Dimension.ЗначениеДоступа + + View + false + + + Edit + false + + + + InformationRegister.ДополнительныеАдресныеСведения.Resource.КодИФНСЮЛ + + View + false + + + Edit + false + + + + DataProcessor.РезервноеКопированиеИБ.Attribute.ПарольАдминистратора + + View + false + + + Edit + false + + + + Catalog.ВстречаПрисоединенныеФайлы.Attribute.Том + + View + false + + + Edit + false + + + + InformationRegister.НапоминанияПользователя.Attribute.ПредставлениеИсточника + + View + false + + + Edit + false + + + + Catalog.ЗначенияСвойствОбъектов.Attribute.Вес + + View + false + + + Edit + false + + + + Document.Анкета.Attribute.Опрос + + View + false + + + Edit + false + + + + ChartOfCharacteristicTypes.ОбъектыАдресацииЗадач.StandardAttribute.PredefinedDataName + + View + false + + + Edit + false + + + + ChartOfCharacteristicTypes.ОбъектыАдресацииЗадач.StandardAttribute.ValueType + + View + false + + + Edit + false + + + + ChartOfCharacteristicTypes.ОбъектыАдресацииЗадач.StandardAttribute.Description + + View + false + + + Edit + false + + + + ChartOfCharacteristicTypes.ОбъектыАдресацииЗадач.StandardAttribute.Code + + View + false + + + Edit + false + + + + ChartOfCharacteristicTypes.ОбъектыАдресацииЗадач.StandardAttribute.IsFolder + + View + false + + + Edit + false + + + + ChartOfCharacteristicTypes.ОбъектыАдресацииЗадач.StandardAttribute.Parent + + View + false + + + Edit + false + + + + ChartOfCharacteristicTypes.ОбъектыАдресацииЗадач.StandardAttribute.Predefined + + View + false + + + Edit + false + + + + ChartOfCharacteristicTypes.ОбъектыАдресацииЗадач.StandardAttribute.DeletionMark + + View + false + + + Edit + false + + + + ChartOfCharacteristicTypes.ОбъектыАдресацииЗадач.StandardAttribute.Ref + + View + false + + + Edit + false + + + + Catalog.Календари.TabularSection.ШаблонЗаполнения + + View + false + + + Edit + false + + + + Catalog.ДополнительныеОтчетыИОбработки.Attribute.ИмяФайла + + View + false + + + Edit + false + + + + InformationRegister.НастройкиТранспортаОбмена.Dimension.Узел + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоИсходящее.TabularSection.ПолучателиОтвета.Attribute.Адрес + + View + false + + + Edit + false + + + + Document.Встреча.TabularSection.НаборыЗначенийДоступа.Attribute.ЗначениеДоступа + + View + false + + + Edit + false + + + + DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.ЭтоИнтерактивныйРежим + + View + false + + + Edit + false + + + + Document.НазначениеОпросов.Attribute.Наименование + + View + false + + + Edit + false + + + + Catalog.ПапкиЭлектронныхПисем.Attribute.ПредопределеннаяПапка + + View + false + + + Edit + false + + + + InformationRegister.ВерсииОбъектов.Attribute.ЕстьДанныеВерсии + + View + false + + + Edit + false + + + + InformationRegister.НастройкиПравОбъектов.Attribute.УровеньЗапрещенияЧтения + + View + false + + + Edit + false + + + + InformationRegister.ОчередьИзвлеченияТекста.Dimension.ИсточникТекста + + View + false + + + Edit + false + + + + DataProcessor.ПомощникСозданияОбменаДанными.Attribute.COMВариантРаботыИнформационнойБазы + + View + false + + + Edit + false + + + + Catalog.Пользователи.Attribute.Недействителен + + View + false + + + Edit + false + + + + DataProcessor.НастройкаРезервногоКопированияИБ.Attribute.ЕдиницаИзмеренияПериода + + View + false + + + Edit + false + + + + Catalog.ГруппыВнешнихПользователей.Attribute.УдалитьТипОбъектовАвторизации + + View + false + + + Edit + false + + + + DataProcessor.СопоставлениеОбъектовИнформационныхБаз.TabularSection.ТаблицаАвтоматическиСопоставленныхОбъектов + + View + false + + + Edit + false + + + + InformationRegister.СоответствияОбъектовИнформационныхБаз.Dimension.ТипПриемника + + View + false + + + Edit + false + + + + InformationRegister.ПравилаДляОбменаДанными.StandardAttribute.Active + + View + false + + + Edit + false + + + + InformationRegister.ПравилаДляОбменаДанными.StandardAttribute.LineNumber + + View + false + + + Edit + false + + + + InformationRegister.ПравилаДляОбменаДанными.StandardAttribute.Recorder + + View + false + + + Edit + false + + + + InformationRegister.ПравилаДляОбменаДанными.StandardAttribute.Period + + View + false + + + Edit + false + + + + Catalog.УчетныеЗаписиЭлектроннойПочты.Attribute.ИспользоватьБезопасныйВходНаСерверВходящейПочты + + View + false + + + Edit + false + + + + Catalog.ТелефонныйЗвонокПрисоединенныеФайлы.Attribute.ВладелецФайла + + View + false + + + Edit + false + + + + Document.СообщениеSMS.TabularSection.Адресаты.Attribute.ПредставлениеКонтакта + + View + false + + + Edit + false + + + + DataProcessor.ПоискИУстановкаОбновлений.TabularSection.ДоступныеОбновления.Attribute.Версия4Разряд + + View + false + + + Edit + false + + + + ChartOfCharacteristicTypes.ДополнительныеРеквизитыИСведения.Attribute.Заголовок + + View + false + + + Edit + false + + + + InformationRegister.ОбластиСтатистики.StandardAttribute.Active + + View + false + + + Edit + false + + + + InformationRegister.ОбластиСтатистики.StandardAttribute.LineNumber + + View + false + + + Edit + false + + + + InformationRegister.ОбластиСтатистики.StandardAttribute.Recorder + + View + false + + + Edit + false + + + + InformationRegister.ОбластиСтатистики.StandardAttribute.Period + + View + false + + + Edit + false + + + + Catalog.ОчередьЗаданийОбластейДанных.Attribute.ИмяМетода + + View + false + + + Edit + false + + + + InformationRegister.СостоянияКонтрагентов.Resource.Состояние + + View + false + + + Edit + false + + + + Catalog.ГруппыИсполнителейЗадач.Attribute.ДополнительныйОбъектАдресации + + View + false + + + Edit + false + + + + Catalog.ЗапланированноеВзаимодействиеПрисоединенныеФайлы.Attribute.Изменил + + View + false + + + Edit + false + + + + InformationRegister.ЗапросыРазрешенийНаИспользованиеВнешнихРесурсов.Attribute.РежимЗамещения + + View + false + + + Edit + false + + + + Catalog.ГруппыИсполнителейЗадач.StandardAttribute.PredefinedDataName + + View + false + + + Edit + false + + + + Catalog.ГруппыИсполнителейЗадач.StandardAttribute.Predefined + + View + false + + + Edit + false + + + + Catalog.ГруппыИсполнителейЗадач.StandardAttribute.Ref + + View + false + + + Edit + false + + + + Catalog.ГруппыИсполнителейЗадач.StandardAttribute.DeletionMark + + View + false + + + Edit + false + + + + Catalog.ГруппыИсполнителейЗадач.StandardAttribute.IsFolder + + View + false + + + Edit + false + + + + Catalog.ГруппыИсполнителейЗадач.StandardAttribute.Owner + + View + false + + + Edit + false + + + + Catalog.ГруппыИсполнителейЗадач.StandardAttribute.Parent + + View + false + + + Edit + false + + + + Catalog.ГруппыИсполнителейЗадач.StandardAttribute.Description + + View + false + + + Edit + false + + + + Catalog.ГруппыИсполнителейЗадач.StandardAttribute.Code + + View + false + + + Edit + false + + + + Catalog.ТомаХраненияФайлов.Attribute.Комментарий + + View + false + + + Edit + false + + + + InformationRegister.ПравилаДляОбменаДанными.Resource.ИмяФайлаОбработкиДляОтладкиВыгрузки + + View + false + + + Edit + false + + + + InformationRegister.ДокументыСОшибкамиПроверкиКонтрагентов.StandardAttribute.Active + + View + false + + + Edit + false + + + + InformationRegister.ДокументыСОшибкамиПроверкиКонтрагентов.StandardAttribute.LineNumber + + View + false + + + Edit + false + + + + InformationRegister.ДокументыСОшибкамиПроверкиКонтрагентов.StandardAttribute.Recorder + + View + false + + + Edit + false + + + + InformationRegister.ДокументыСОшибкамиПроверкиКонтрагентов.StandardAttribute.Period + + View + false + + + Edit + false + + + + DataProcessor.НастройкаРезервногоКопированияИБ.Attribute.ЗначениеВЕдиницахИзмерения + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоВходящее.TabularSection.НаборыЗначенийДоступа.Attribute.Чтение + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоИсходящее.Attribute.ОтправительПредставление + + View + false + + + Edit + false + + + + InformationRegister.НастройкиУчетныхЗаписейЭлектроннойПочты.Resource.ПерсональнаяУчетнаяЗапись + + View + false + + + Edit + false + + + + Catalog.РассылкиОтчетов.Attribute.Личная + + View + false + + + Edit + false + + + + Catalog.ЗначенияСвойствОбъектов.StandardAttribute.PredefinedDataName + + View + false + + + Edit + false + + + + Catalog.ЗначенияСвойствОбъектов.StandardAttribute.Predefined + + View + false + + + Edit + false + + + + Catalog.ЗначенияСвойствОбъектов.StandardAttribute.Ref + + View + false + + + Edit + false + + + + Catalog.ЗначенияСвойствОбъектов.StandardAttribute.DeletionMark + + View + false + + + Edit + false + + + + Catalog.ЗначенияСвойствОбъектов.StandardAttribute.IsFolder + + View + false + + + Edit + false + + + + Catalog.ЗначенияСвойствОбъектов.StandardAttribute.Owner + + View + false + + + Edit + false + + + + Catalog.ЗначенияСвойствОбъектов.StandardAttribute.Parent + + View + false + + + Edit + false + + + + Catalog.ЗначенияСвойствОбъектов.StandardAttribute.Description + + View + false + + + Edit + false + + + + Catalog.ЗначенияСвойствОбъектов.StandardAttribute.Code + + View + false + + + Edit + false + + + + InformationRegister.КурсыВалют.Dimension.Валюта + + View + false + + + Edit + false + + + + InformationRegister.НастройкиОчисткиФайлов.Resource.Действие + + View + false + + + Edit + false + + + + InformationRegister.ПодпискиПолучателей.Dimension.Получатель + + View + false + + + Edit + false + + + + Document.СообщениеSMS.TabularSection.Адресаты.Attribute.ТекстОшибки + + View + false + + + Edit + false + + + + Task.ЗадачаИсполнителя.Attribute.Важность + + View + false + + + Edit + false + + + + Catalog.РассылкиОтчетов.Attribute.ТолькоУведомить + + View + false + + + Edit + false + + + + DataProcessor.ПоискИУстановкаОбновлений.Attribute.ПовторныйЗапуск + + View + false + + + Edit + false + + + + InformationRegister.НастройкиТранспортаОбмена.Resource.COMИмяПользователя + + View + false + + + Edit + false + + + + Catalog.ОчередьЗаданийОбластейДанных.Attribute.ЭксклюзивноеВыполнение + + View + false + + + Edit + false + + + + DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.ИмяИнформационнойБазыНаСервереДляПодключения + + View + false + + + Edit + false + + + + InformationRegister.ДанныеОбъектовДляРегистрацииВОбменах.Dimension.Ссылка + + View + false + + + Edit + false + + + + DataProcessor.РезервноеКопированиеИБ.Attribute.ФайлЗагрузкиРезервнойКопии + + View + false + + + Edit + false + + + + InformationRegister.НастройкиОчисткиФайлов.Resource.ПравилоОтбора + + View + false + + + Edit + false + + + + InformationRegister.НастройкиТранспортаОбмена.Resource.УдалитьПарольАрхиваСообщенияОбмена + + View + false + + + Edit + false + + + + DataProcessor.ПомощникИнтерактивногоОбменаДанными.TabularSection.ИнформацияСтатистики.Attribute.ЭтоКлассификатор + + View + false + + + Edit + false + + + + Catalog.НаборыДополнительныхРеквизитовИСведений.TabularSection.ДополнительныеРеквизиты + + View + false + + + Edit + false + + + + Catalog.ПапкиФайлов.Attribute.ДатаСоздания + + View + false + + + Edit + false + + + + DataProcessor.ПомощникСозданияОбменаДанными.TabularSection.ИнформацияСтатистики.Attribute.ПоляПоиска + + View + false + + + Edit + false + + + + Catalog.РассылкиОтчетов.Attribute.ТекстПисьма + + View + false + + + Edit + false + + + + Catalog.ВидыКонтактнойИнформации.Attribute.ВключатьСтрануВПредставление + + View + false + + + Edit + false + + + + InformationRegister.ГруппыЗначенийДоступа.Dimension.ЗначениеДоступа + + View + false + + + Edit + false + + + + Catalog.КлассификаторБанковРФ.StandardAttribute.PredefinedDataName + + View + false + + + Edit + false + + + + Catalog.КлассификаторБанковРФ.StandardAttribute.Predefined + + View + false + + + Edit + false + + + + Catalog.КлассификаторБанковРФ.StandardAttribute.Ref + + View + false + + + Edit + false + + + + Catalog.КлассификаторБанковРФ.StandardAttribute.DeletionMark + + View + false + + + Edit + false + + + + Catalog.КлассификаторБанковРФ.StandardAttribute.IsFolder + + View + false + + + Edit + false + + + + Catalog.КлассификаторБанковРФ.StandardAttribute.Owner + + View + false + + + Edit + false + + + + Catalog.КлассификаторБанковРФ.StandardAttribute.Parent + + View + false + + + Edit + false + + + + Catalog.КлассификаторБанковРФ.StandardAttribute.Description + + View + false + + + Edit + false + + + + Catalog.КлассификаторБанковРФ.StandardAttribute.Code + + View + false + + + Edit + false + + + + Catalog.ВстречаПрисоединенныеФайлы.TabularSection.ЭлектронныеПодписи.Attribute.ИмяФайлаПодписи + + View + false + + + Edit + false + + + + DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.УзелДляФоновогоОбмена + + View + false + + + Edit + false + + + + Catalog.УчетныеЗаписиЭлектроннойПочты.Attribute.ПортСервераВходящейПочты + + View + false + + + Edit + false + + + + DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.РежимОтладкиАлгоритмов + + View + false + + + Edit + false + + + + InformationRegister.ОбластиТребующиеОбработкиПоставляемыхДанных.Dimension.ИдентификаторФайла + + View + false + + + Edit + false + + + + InformationRegister.ИсторияАдресныхОбъектов.StandardAttribute.Active + + View + false + + + Edit + false + + + + InformationRegister.ИсторияАдресныхОбъектов.StandardAttribute.LineNumber + + View + false + + + Edit + false + + + + InformationRegister.ИсторияАдресныхОбъектов.StandardAttribute.Recorder + + View + false + + + Edit + false + + + + InformationRegister.ИсторияАдресныхОбъектов.StandardAttribute.Period + + View + false + + + Edit + false + + + + InformationRegister.ИсторияАдресныхОбъектов.Dimension.КодНаселенногоПункта + + View + false + + + Edit + false + + + + Catalog.РассылкиОтчетов.Attribute.ТемаПисьма + + View + false + + + Edit + false + + + + DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.ПарольДляРаспаковкиФайлаОбмена + + View + false + + + Edit + false + + + + DataProcessor.ПомощникСозданияОбменаДанными.Attribute.EMAILСжиматьФайлИсходящегоСообщения + + View + false + + + Edit + false + + + + InformationRegister.УдалитьЗамерыВремени.StandardAttribute.Active + + View + false + + + Edit + false + + + + InformationRegister.УдалитьЗамерыВремени.StandardAttribute.LineNumber + + View + false + + + Edit + false + + + + InformationRegister.УдалитьЗамерыВремени.StandardAttribute.Recorder + + View + false + + + Edit + false + + + + InformationRegister.УдалитьЗамерыВремени.StandardAttribute.Period + + View + false + + + Edit + false + + + + InformationRegister.НастройкиВариантовОтчетов.StandardAttribute.Active + + View + false + + + Edit + false + + + + InformationRegister.НастройкиВариантовОтчетов.StandardAttribute.LineNumber + + View + false + + + Edit + false + + + + InformationRegister.НастройкиВариантовОтчетов.StandardAttribute.Recorder + + View + false + + + Edit + false + + + + InformationRegister.НастройкиВариантовОтчетов.StandardAttribute.Period + + View + false + + + Edit + false + + + + ChartOfCharacteristicTypes.ВопросыДляАнкетирования.Attribute.ПояснениеКомментария + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоВходящее.TabularSection.ДополнительныеРеквизиты + + View + false + + + Edit + false + + + + Catalog.ВнешниеПользователи.Attribute.Недействителен + + View + false + + + Edit + false + + + + Catalog.ЗапланированноеВзаимодействиеПрисоединенныеФайлы.Attribute.Зашифрован + + View + false + + + Edit + false + + + + Catalog.ВерсииФайлов.Attribute.Размер + + View + false + + + Edit + false + + + + InformationRegister.УдалитьЗамерыВремени.Dimension.ДатаЗамера + + View + false + + + Edit + false + + + + Catalog.ТелефонныйЗвонокПрисоединенныеФайлы.Attribute.ДатаМодификацииУниверсальная + + View + false + + + Edit + false + + + + Catalog.ГруппыВнешнихПользователей.Attribute.Комментарий + + View + false + + + Edit + false + + + + InformationRegister.УдалитьАдресныйКлассификатор.Dimension.КодГородаВКоде + + View + false + + + Edit + false + + + + Catalog.Пользователи.TabularSection.КонтактнаяИнформация.Attribute.Представление + + View + false + + + Edit + false + + + + Catalog.ОчередьЗаданий.Attribute.КоличествоПовторовПриАварийномЗавершении + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоИсходящее.Attribute.СтатусПисьма + + View + false + + + Edit + false + + + + Catalog.ОчередьЗаданий.Attribute.Использование + + View + false + + + Edit + false + + + + Catalog.УчетныеЗаписиЭлектроннойПочты.Attribute.ПериодХраненияСообщенийНаСервере + + View + false + + + Edit + false + + + + Catalog.Календари.Attribute.Описание + + View + false + + + Edit + false + + + + InformationRegister.ИсторияАдресныхОбъектов.Resource.Дополнительно + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоВходящее.Attribute.УведомитьОПрочтении + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоИсходящее.Attribute.ДатаКогдаОтправить + + View + false + + + Edit + false + + + + Catalog.СообщениеSMSПрисоединенныеФайлы.StandardAttribute.PredefinedDataName + + View + false + + + Edit + false + + + + Catalog.СообщениеSMSПрисоединенныеФайлы.StandardAttribute.Predefined + + View + false + + + Edit + false + + + + Catalog.СообщениеSMSПрисоединенныеФайлы.StandardAttribute.Ref + + View + false + + + Edit + false + + + + Catalog.СообщениеSMSПрисоединенныеФайлы.StandardAttribute.DeletionMark + + View + false + + + Edit + false + + + + Catalog.СообщениеSMSПрисоединенныеФайлы.StandardAttribute.IsFolder + + View + false + + + Edit + false + + + + Catalog.СообщениеSMSПрисоединенныеФайлы.StandardAttribute.Owner + + View + false + + + Edit + false + + + + Catalog.СообщениеSMSПрисоединенныеФайлы.StandardAttribute.Parent + + View + false + + + Edit + false + + + + Catalog.СообщениеSMSПрисоединенныеФайлы.StandardAttribute.Description + + View + false + + + Edit + false + + + + Catalog.СообщениеSMSПрисоединенныеФайлы.StandardAttribute.Code + + View + false + + + Edit + false + + + + Catalog.ТелефонныйЗвонокПрисоединенныеФайлы.TabularSection.ЭлектронныеПодписи.Attribute.Комментарий + + View + false + + + Edit + false + + + + InformationRegister.АдресныеОбъекты.Dimension.КодУлицы + + View + false + + + Edit + false + + + + Catalog.Организации.StandardAttribute.PredefinedDataName + + View + false + + + Edit + false + + + + Catalog.Организации.StandardAttribute.Predefined + + View + false + + + Edit + false + + + + Catalog.Организации.StandardAttribute.Ref + + View + false + + + Edit + false + + + + Catalog.Организации.StandardAttribute.DeletionMark + + View + false + + + Edit + false + + + + Catalog.Организации.StandardAttribute.IsFolder + + View + false + + + Edit + false + + + + Catalog.Организации.StandardAttribute.Owner + + View + false + + + Edit + false + + + + Catalog.Организации.StandardAttribute.Parent + + View + false + + + Edit + false + + + + Catalog.Организации.StandardAttribute.Description + + View + false + + + Edit + false + + + + Catalog.Организации.StandardAttribute.Code + + View + false + + + Edit + false + + + + Catalog.ВнешниеПользователи.Attribute.Подготовлен + + View + false + + + Edit + false + + + + DataProcessor.ПоискИУстановкаОбновлений.TabularSection.ДоступныеОбновления.Attribute.ЛокальныйОтносительныйКаталог + + View + false + + + Edit + false + + + + Catalog.Файлы.Attribute.ТекущаяВерсияРазмер + + View + false + + + Edit + false + + + + Document.ЗапланированноеВзаимодействие.Attribute.Комментарий + + View + false + + + Edit + false + + + + DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.ИспользоватьТранзакцииПриВыгрузкеДляПлановОбмена + + View + false + + + Edit + false + + + + InformationRegister.НастройкиВариантовОтчетов.Resource.БыстрыйДоступ + + View + false + + + Edit + false + + + + InformationRegister.УдалитьОчередьЗаданий.Resource.ИнтервалПовтораПриАварийномЗавершении + + View + false + + + Edit + false + + + + InformationRegister.УдалитьОчередьЗаданий.Resource.Ключ + + View + false + + + Edit + false + + + + DataProcessor.РегистрацияИзмененийДляОбменаДанными.Attribute.ДоступнаРегистрацияСредствамиБСП + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоИсходящее.TabularSection.ПолучателиКопий.Attribute.Контакт + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоВходящее.TabularSection.АдресаУведомленияОПрочтении + + View + false + + + Edit + false + + + + DataProcessor.ПоискИУстановкаОбновлений.Attribute.ТехническаяИнформацияОбОшибке + + View + false + + + Edit + false + + + + DataProcessor.ЗагрузкаКурсовВалют.TabularSection.СписокВалют.Attribute.Валюта + + View + false + + + Edit + false + + + + InformationRegister.УдалитьАдресныйКлассификатор.Dimension.КодАдресногоОбъектаВКоде + + View + false + + + Edit + false + + + + Catalog.ЗапланированноеВзаимодействиеПрисоединенныеФайлы.TabularSection.СертификатыШифрования.Attribute.Сертификат + + View + false + + + Edit + false + + + + Catalog.СертификатыКлючейЭлектроннойПодписиИШифрования.Attribute.Шифрование + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоВходящее.TabularSection.НепринятыеВложения + + View + false + + + Edit + false + + + + InformationRegister.РезультатыОбменаДанными.StandardAttribute.Active + + View + false + + + Edit + false + + + + InformationRegister.РезультатыОбменаДанными.StandardAttribute.LineNumber + + View + false + + + Edit + false + + + + InformationRegister.РезультатыОбменаДанными.StandardAttribute.Recorder + + View + false + + + Edit + false + + + + InformationRegister.РезультатыОбменаДанными.StandardAttribute.Period + + View + false + + + Edit + false + + + + Catalog.ВариантыОтчетов.TabularSection.Размещение.Attribute.Использование + + View + false + + + Edit + false + + + + Catalog.ГруппыВнешнихПользователей.TabularSection.Состав + + View + false + + + Edit + false + + + + InformationRegister.ЗамерыВремени.StandardAttribute.Active + + View + false + + + Edit + false + + + + InformationRegister.ЗамерыВремени.StandardAttribute.LineNumber + + View + false + + + Edit + false + + + + InformationRegister.ЗамерыВремени.StandardAttribute.Recorder + + View + false + + + Edit + false + + + + InformationRegister.ЗамерыВремени.StandardAttribute.Period + + View + false + + + Edit + false + + + + InformationRegister.РезультатыОбменаДанными.Resource.Пропущена + + View + false + + + Edit + false + + + + Catalog.Календари.Attribute.ДатаОтсчета + + View + false + + + Edit + false + + + + Catalog.ОчередьЗаданий.Attribute.ИнтервалПовтораПриАварийномЗавершении + + View + false + + + Edit + false + + + + InformationRegister.ПользовательскиеМакетыПечати.Resource.Макет + + View + false + + + Edit + false + + + + InformationRegister.БезопасноеХранилищеДанных.Resource.Данные + + View + false + + + Edit + false + + + + DataProcessor.ПоискИУстановкаОбновлений.TabularSection.ДоступныеОбновления.Attribute.Версия1Разряд + + View + false + + + Edit + false + + + + InformationRegister.УдалитьАдресныйКлассификатор.Dimension.КодНаселенногоПунктаВКоде + + View + false + + + Edit + false + + + + Catalog.ПравилаОбработкиЭлектроннойПочты.Attribute.КомпоновщикНастроек + + View + false + + + Edit + false + + + + InformationRegister.НаборыЗначенийДоступа.Attribute.ЗначениеБезГрупп + + View + false + + + Edit + false + + + + Catalog.Пользователи.TabularSection.КонтактнаяИнформация.Attribute.НомерТелефона + + View + false + + + Edit + false + + + + Catalog.ВнешниеПользователи.Attribute.УдалитьПароль + + View + false + + + Edit + false + + + + Catalog.РассылкиОтчетов.Attribute.ВидПочтовогоАдресаПолучателей + + View + false + + + Edit + false + + + + Catalog.РассылкиОтчетов.Attribute.Персонализирована + + View + false + + + Edit + false + + + + Document.ТелефонныйЗвонок.TabularSection.НаборыЗначенийДоступа.Attribute.ЗначениеДоступа + + View + false + + + Edit + false + + + + InformationRegister.НастройкиТранспортаОбмена.Resource.EMAILУчетнаяЗапись + + View + false + + + Edit + false + + + + Task.ЗадачаИсполнителя.AddressingAttribute.РольИсполнителя + + View + false + + + Edit + false + + + + Catalog.ДополнительныеОтчетыИОбработки.Attribute.ХранилищеОбработки + + View + false + + + Edit + false + + + + Catalog.ДополнительныеОтчетыИОбработки.TabularSection.Разрешения.Attribute.ВидРазрешения + + View + false + + + Edit + false + + + + DataProcessor.ОценкаПроизводительности.Attribute.Диаграмма + + View + false + + + Edit + false + + + + DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.РежимЗагрузкиДанных + + View + false + + + Edit + false + + + + Catalog.ВстречаПрисоединенныеФайлы.TabularSection.ЭлектронныеПодписи.Attribute.КомуВыданСертификат + + View + false + + + Edit + false + + + + DataProcessor.ЗагрузкаПравилРегистрацииОбъектов.Attribute.ИмяПланаОбменаДляЗагрузки + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоИсходящее.Attribute.Размер + + View + false + + + Edit + false + + + + ChartOfCharacteristicTypes.ДополнительныеРеквизитыИСведения.Attribute.ДополнительныеЗначенияИспользуются + + View + false + + + Edit + false + + + + InformationRegister.УровниСокращенийАдресныхСведений.StandardAttribute.Active + + View + false + + + Edit + false + + + + InformationRegister.УровниСокращенийАдресныхСведений.StandardAttribute.LineNumber + + View + false + + + Edit + false + + + + InformationRegister.УровниСокращенийАдресныхСведений.StandardAttribute.Recorder + + View + false + + + Edit + false + + + + InformationRegister.УровниСокращенийАдресныхСведений.StandardAttribute.Period + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоВходящее.TabularSection.ДополнительныеРеквизиты.Attribute.ТекстоваяСтрока + + View + false + + + Edit + false + + + + DataProcessor.КонвертацияОбъектовXDTO.Attribute.ИмяФайлаПротоколаОбмена + + View + false + + + Edit + false + + + + Catalog.ОчередьЗаданийОбластейДанных.Attribute.ИсполняющееФоновоеЗадание + + View + false + + + Edit + false + + + + Catalog.Пользователи.Attribute.Служебный + + View + false + + + Edit + false + + + + Catalog.ТелефонныйЗвонокПрисоединенныеФайлы.Attribute.ДатаСоздания + + View + false + + + Edit + false + + + + Catalog.НаборыДополнительныхРеквизитовИСведений.TabularSection.ДополнительныеРеквизиты.Attribute.Свойство + + View + false + + + Edit + false + + + + BusinessProcess.Задание.Attribute.АвторСтрокой + + View + false + + + Edit + false + + + + InformationRegister.НаследованиеНастроекПравОбъектов.Dimension.Объект + + View + false + + + Edit + false + + + + Catalog.СообщениеSMSПрисоединенныеФайлы.Attribute.ФайлХранилище + + View + false + + + Edit + false + + + + InformationRegister.УдалитьОбластиДанных.Resource.Префикс + + View + false + + + Edit + false + + + + DataProcessor.ПомощникСозданияОбменаДанными.Attribute.FTPСоединениеПароль + + View + false + + + Edit + false + + + + Catalog.ДополнительныеОтчетыИОбработки.Attribute.Публикация + + View + false + + + Edit + false + + + + Catalog.ЭлектронноеПисьмоВходящееПрисоединенныеФайлы.Attribute.ДатаМодификацииУниверсальная + + View + false + + + Edit + false + + + + InformationRegister.НазначениеДополнительныхОбработок.Dimension.ТипФормы + + View + false + + + Edit + false + + + + InformationRegister.ДампыПлатформы.Dimension.ВариантДампа + + View + false + + + Edit + false + + + + Document.СообщениеSMS.Attribute.ТекстСообщения + + View + false + + + Edit + false + + + + DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ОтладкаОбработчиковВыгрузки + + View + false + + + Edit + false + + + + DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.ДописыватьДанныеВПротоколОбмена + + View + false + + + Edit + false + + + + Catalog.ЭлектронноеПисьмоВходящееПрисоединенныеФайлы.Attribute.Расширение + + View + false + + + Edit + false + + + + Catalog.Файлы.TabularSection.ДополнительныеРеквизиты.Attribute.ТекстоваяСтрока + + View + false + + + Edit + false + + + + InformationRegister.ДанныеПроизводственногоКалендаря.Dimension.Год + + View + false + + + Edit + false + + + + Catalog.РолиИсполнителей.Attribute.ИспользуетсяСОбъектамиАдресации + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоИсходящее.TabularSection.ПолучателиПисьма.Attribute.Адрес + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоВходящее.TabularSection.ПолучателиКопий.Attribute.Контакт + + View + false + + + Edit + false + + + + BusinessProcess.Задание.Attribute.ДополнительныйОбъектАдресацииПроверяющий + + View + false + + + Edit + false + + + + DataProcessor.ПоискИУстановкаОбновлений.Attribute.ПарольСервераОбновлений + + View + false + + + Edit + false + + + + DataProcessor.ПомощникСозданияОбменаДанными.TabularSection.ИнформацияСтатистики.Attribute.КоличествоОбъектовНесопоставленных + + View + false + + + Edit + false + + + + Catalog.ДополнительныеОтчетыИОбработки.TabularSection.Команды.Attribute.Скрыть + + View + false + + + Edit + false + + + + Catalog.ВидыКонтактнойИнформации.Attribute.ОбязательноеЗаполнение + + View + false + + + Edit + false + + + + Catalog.ГруппыДоступа.Attribute.Описание + + View + false + + + Edit + false + + + + Catalog.ВопросыШаблонаАнкеты.Attribute.ТипТабличногоВопроса + + View + false + + + Edit + false + + + + Catalog.ЭлектронноеПисьмоИсходящееПрисоединенныеФайлы.Attribute.ИндексКартинки + + View + false + + + Edit + false + + + + Catalog.ВерсииФайлов.Attribute.НомерВерсии + + View + false + + + Edit + false + + + + Catalog.КлассификаторБанковРФ.Attribute.ДеятельностьПрекращена + + View + false + + + Edit + false + + + + Catalog.ДополнительныеОтчетыИОбработки.TabularSection.Разрешения + + View + false + + + Edit + false + + + + InformationRegister.НапоминанияПользователя.Dimension.ВремяСобытия + + View + false + + + Edit + false + + + + Task.ЗадачаИсполнителя.Attribute.ПредметСтрокой + + View + false + + + Edit + false + + + + Catalog.ПапкиФайлов.TabularSection.ДополнительныеРеквизиты.Attribute.ТекстоваяСтрока + + View + false + + + Edit + false + + + + Document.СообщениеSMS.Attribute.Комментарий + + View + false + + + Edit + false + + + + Catalog.ВариантыОтветовАнкет.Attribute.РеквизитДопУпорядочивания + + View + false + + + Edit + false + + + + InformationRegister.ПутиКПрограммамЭлектроннойПодписиИШифрованияНаСерверахLinux.Resource.Комментарий + + View + false + + + Edit + false + + + + InformationRegister.ВерсииПодсистем.Resource.Версия + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоВходящее.Attribute.ОтправительКонтакт + + View + false + + + Edit + false + + + + DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.ОбработчикиСобытийЧитаемИзФайлаПравилОбмена + + View + false + + + Edit + false + + + + Document.ЗапланированноеВзаимодействие.Attribute.СписокУчастников + + View + false + + + Edit + false + + + + Catalog.Заметки.Attribute.ТекстСодержания + + View + false + + + Edit + false + + + + InformationRegister.НапоминанияПользователя.Dimension.Пользователь + + View + false + + + Edit + false + + + + DataProcessor.ПомощникСозданияОбменаДанными.Attribute.ЭтоНастройкаСтандартногоОбмена + + View + false + + + Edit + false + + + + InformationRegister.УдалитьПраваПоЗначениямДоступа.Dimension.Право + + View + false + + + Edit + false + + + + InformationRegister.УдалитьНастройкиВерсионированияОбъектов.Resource.Использовать + + View + false + + + Edit + false + + + + Catalog.ОчередьЗаданий.Attribute.ЭксклюзивноеВыполнение + + View + false + + + Edit + false + + + + InformationRegister.УдалитьОбластиДанных.Attribute.ОшибкаОбработки + + View + false + + + Edit + false + + + + Catalog.ТомаХраненияФайлов.Attribute.ПорядокЗаполнения + + View + false + + + Edit + false + + + + ChartOfCharacteristicTypes.ДополнительныеРеквизитыИСведения.Attribute.УдалитьСклоненияПредмета + + View + false + + + Edit + false + + + + Task.ЗадачаИсполнителя.Attribute.СостояниеБизнесПроцесса + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоВходящее.Attribute.Текст + + View + false + + + Edit + false + + + + InformationRegister.ПравилаДляОбменаДанными.Attribute.ПравилаЗагружены + + View + false + + + Edit + false + + + + Catalog.ЗапланированноеВзаимодействиеПрисоединенныеФайлы.Attribute.ДатаМодификацииУниверсальная + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоИсходящее.TabularSection.ДополнительныеРеквизиты.Attribute.ТекстоваяСтрока + + View + false + + + Edit + false + + + + Catalog.Календари.Attribute.ГоризонтПланирования + + View + false + + + Edit + false + + + + InformationRegister.РучныеИзмененияГрафиковРаботы.Dimension.Год + + View + false + + + Edit + false + + + + DataProcessor.КонвертацияОбъектовXDTO.Attribute.УзелОбменаЗагрузкаДанных + + View + false + + + Edit + false + + + + Catalog.ВерсииФайлов.TabularSection.ЭлектронныеПодписи.Attribute.ДатаПодписи + + View + false + + + Edit + false + + + + InformationRegister.СообщенияОбменаДанными.Dimension.ИдентификаторСообщения + + View + false + + + Edit + false + + + + Catalog.ИдентификаторыОбъектовМетаданных.Attribute.Синоним + + View + false + + + Edit + false + + + + Document.Анкета.TabularSection.Состав.Attribute.Вопрос + + View + false + + + Edit + false + + + + Document.Встреча.Attribute.Удалить_РассмотретьПосле + + View + false + + + Edit + false + + + + Catalog.СертификатыКлючейЭлектроннойПодписиИШифрования.Attribute.КомуВыдан + + View + false + + + Edit + false + + + + Catalog.ВопросыШаблонаАнкеты.TabularSection.СоставТабличногоВопроса + + View + false + + + Edit + false + + + + InformationRegister.УдалитьОбластиДанных.Dimension.ОбластьДанных + + View + false + + + Edit + false + + + + InformationRegister.ЗамерыВремени.Dimension.КлючеваяОперация + + View + false + + + Edit + false + + + + Catalog.ДополнительныеОтчетыИОбработки.TabularSection.Команды.Attribute.Представление + + View + false + + + Edit + false + + + + Catalog.ОчередьЗаданий.Attribute.ДатаЗавершенияПоследнегоЗапуска + + View + false + + + Edit + false + + + + Catalog.ЭлектронноеПисьмоВходящееПрисоединенныеФайлы.TabularSection.ЭлектронныеПодписи.Attribute.УстановившийПодпись + + View + false + + + Edit + false + + + + Catalog.ЗапланированноеВзаимодействиеПрисоединенныеФайлы.Attribute.Описание + + View + false + + + Edit + false + + + + InformationRegister.СлужебныеАдресныеСведения.Dimension.Идентификатор + + View + false + + + Edit + false + + + + ChartOfCharacteristicTypes.ДополнительныеРеквизитыИСведения.Attribute.Доступен + + View + false + + + Edit + false + + + + DataProcessor.ТранспортСообщенийОбменаFTP.Attribute.FTPСоединениеПассивноеСоединение + + View + false + + + Edit + false + + + + Document.ТелефонныйЗвонок.Attribute.ВзаимодействиеОснование + + View + false + + + Edit + false + + + + Catalog.ВстречаПрисоединенныеФайлы.Attribute.ПутьКФайлу + + View + false + + + Edit + false + + + + DataProcessor.ПомощникИнтерактивногоОбменаДанными.TabularSection.ИнформацияСтатистики.Attribute.ТипПриемникаСтрокой + + View + false + + + Edit + false + + + + Catalog.ЗапланированноеВзаимодействиеПрисоединенныеФайлы.Attribute.ИндексКартинки + + View + false + + + Edit + false + + + + InformationRegister.УдалитьСтраныМира.Dimension.ОбластьДанных + + View + false + + + Edit + false + + + + DataProcessor.СопоставлениеОбъектовИнформационныхБаз.Attribute.ТипИсточникаСтрокой + + View + false + + + Edit + false + + + + InformationRegister.БуферОперацийСтатистики.StandardAttribute.Active + + View + false + + + Edit + false + + + + InformationRegister.БуферОперацийСтатистики.StandardAttribute.LineNumber + + View + false + + + Edit + false + + + + InformationRegister.БуферОперацийСтатистики.StandardAttribute.Recorder + + View + false + + + Edit + false + + + + InformationRegister.БуферОперацийСтатистики.StandardAttribute.Period + + View + false + + + Edit + false + + + + InformationRegister.ЗапросыРазрешенийНаИспользованиеВнешнихРесурсов.Attribute.УдаляемыеРазрешения + + View + false + + + Edit + false + + + + Catalog.СообщениеSMSПрисоединенныеФайлы.Attribute.Изменил + + View + false + + + Edit + false + + + + DataProcessor.НастройкаРезервногоКопированияИБ.Attribute.РезервноеКопированиеНастроено + + View + false + + + Edit + false + + + + InformationRegister.ДомаЗданияСтроения.Dimension.ПочтовыйИндекс + + View + false + + + Edit + false + + + + Catalog.РолиИсполнителей.Attribute.ТипыОсновногоОбъектаАдресации + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоВходящее.TabularSection.АдресаУведомленияОПрочтении.Attribute.Представление + + View + false + + + Edit + false + + + + Document.Анкета.TabularSection.Состав.Attribute.НомерЯчейки + + View + false + + + Edit + false + + + + InformationRegister.УдалитьНаборыЗначенийДоступа.Dimension.НомерНабора + + View + false + + + Edit + false + + + + Catalog.УчетныеЗаписиЭлектроннойПочты.Attribute.ИмяПользователя + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоВходящее.TabularSection.АдресаУведомленияОПрочтении.Attribute.Контакт + + View + false + + + Edit + false + + + + Catalog.ВариантыОтчетов.Attribute.ХешНастроек + + View + false + + + Edit + false + + + + InformationRegister.ДанныеПроизводственногоКалендаря.Dimension.ПроизводственныйКалендарь + + View + false + + + Edit + false + + + + InformationRegister.КодировкиВерсийФайлов.Dimension.ВерсияФайла + + View + false + + + Edit + false + + + + DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ТаблицаПравилКонвертации + + View + false + + + Edit + false + + + + Catalog.ПрограммыЭлектроннойПодписиИШифрования.Attribute.ТипПрограммы + + View + false + + + Edit + false + + + + Catalog.Файлы.Attribute.Зашифрован + + View + false + + + Edit + false + + + + Catalog.ЭлектронноеПисьмоВходящееПрисоединенныеФайлы.TabularSection.ЭлектронныеПодписи.Attribute.КомуВыданСертификат + + View + false + + + Edit + false + + + + ChartOfCharacteristicTypes.ДополнительныеРеквизитыИСведения.Attribute.ЗаголовокФормыЗначения + + View + false + + + Edit + false + + + + InformationRegister.РезультатыОбменаДанными.Attribute.ПометкаУдаления + + View + false + + + Edit + false + + + + InformationRegister.ДополнительныеСведения.Dimension.Объект + + View + false + + + Edit + false + + + + Catalog.ГруппыВнешнихПользователей.StandardAttribute.PredefinedDataName + + View + false + + + Edit + false + + + + Catalog.ГруппыВнешнихПользователей.StandardAttribute.Predefined + + View + false + + + Edit + false + + + + Catalog.ГруппыВнешнихПользователей.StandardAttribute.Ref + + View + false + + + Edit + false + + + + Catalog.ГруппыВнешнихПользователей.StandardAttribute.DeletionMark + + View + false + + + Edit + false + + + + Catalog.ГруппыВнешнихПользователей.StandardAttribute.IsFolder + + View + false + + + Edit + false + + + + Catalog.ГруппыВнешнихПользователей.StandardAttribute.Owner + + View + false + + + Edit + false + + + + Catalog.ГруппыВнешнихПользователей.StandardAttribute.Parent + + View + false + + + Edit + false + + + + Catalog.ГруппыВнешнихПользователей.StandardAttribute.Description + + View + false + + + Edit + false + + + + Catalog.ГруппыВнешнихПользователей.StandardAttribute.Code + + View + false + + + Edit + false + + + + Catalog.РассылкиОтчетов.Attribute.КартинкиПисьмаВФорматеHTML + + View + false + + + Edit + false + + + + BusinessProcess.Задание.Attribute.Предмет + + View + false + + + Edit + false + + + + Catalog.Пользователи.Attribute.Подразделение + + View + false + + + Edit + false + + + + InformationRegister.ПричиныИзмененияАдресныхСведений.Dimension.Идентификатор + + View + false + + + Edit + false + + + + InformationRegister.БлокировкиСеансовОбластейДанных.Resource.Эксклюзивная + + View + false + + + Edit + false + + + + Catalog.Пользователи.TabularSection.КонтактнаяИнформация.Attribute.Тип + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоВходящее.TabularSection.ПолучателиКопий.Attribute.Представление + + View + false + + + Edit + false + + + + InformationRegister.НаличиеПрисоединенныхФайлов.Dimension.ОбъектСФайлами + + View + false + + + Edit + false + + + + Catalog.Календари.Attribute.ДатаОкончания + + View + false + + + Edit + false + + + + Catalog.ВопросыШаблонаАнкеты.TabularSection.СоставТабличногоВопроса.Attribute.ЭлементарныйВопрос + + View + false + + + Edit + false + + + + Catalog.ПрофилиГруппДоступа.Attribute.ИдентификаторПоставляемыхДанных + + View + false + + + Edit + false + + + + Document.СообщениеSMS.Attribute.СписокУчастников + + View + false + + + Edit + false + + + + Catalog.ГруппыВнешнихПользователей.TabularSection.Состав.Attribute.ВнешнийПользователь + + View + false + + + Edit + false + + + + Catalog.ВстречаПрисоединенныеФайлы.TabularSection.ЭлектронныеПодписи + + View + false + + + Edit + false + + + + DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ТаблицаНастройкиПараметров + + View + false + + + Edit + false + + + + Catalog.КлючевыеОперации.Attribute.Имя + + View + false + + + Edit + false + + + + Catalog.ЭлектронноеПисьмоВходящееПрисоединенныеФайлы.TabularSection.СертификатыШифрования.Attribute.Сертификат + + View + false + + + Edit + false + + + + InformationRegister.ЗагруженныеВерсииАдресныхСведений.Resource.Версия + + View + false + + + Edit + false + + + + InformationRegister.ДополнительныеАдресныеСведения.Dimension.КодСубъектаРФ + + View + false + + + Edit + false + + + + Catalog.ШаблоныАнкет.Attribute.Заголовок + + View + false + + + Edit + false + + + + Catalog.СертификатыКлючейЭлектроннойПодписиИШифрования.Attribute.ДанныеСертификата + + View + false + + + Edit + false + + + + InformationRegister.ИсторияАдресныхОбъектов.Resource.Наименование + + View + false + + + Edit + false + + + + DataProcessor.ПомощникСозданияОбменаДанными.Attribute.COMИмяИнформационнойБазыНаСервере1СПредприятия + + View + false + + + Edit + false + + + + Catalog.ЭлектронноеПисьмоИсходящееПрисоединенныеФайлы.Attribute.Изменил + + View + false + + + Edit + false + + + + Catalog.ГруппыПользователей.TabularSection.Состав.Attribute.Пользователь + + View + false + + + Edit + false + + + + Catalog.ВидыКонтактнойИнформации.Attribute.МожноИзменятьСпособРедактирования + + View + false + + + Edit + false + + + + InformationRegister.БуферОперацийСтатистики.Dimension.ИдентификаторЗаписи + + View + false + + + Edit + false + + + + InformationRegister.СведенияОПользователях.Resource.СрокДействия + + View + false + + + Edit + false + + + + DataProcessor.СопоставлениеОбъектовИнформационныхБаз.TabularSection.ТаблицаАвтоматическиСопоставленныхОбъектов.Attribute.УникальныйИдентификаторПриемника + + View + false + + + Edit + false + + + + DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.ПостроительОтчета + + View + false + + + Edit + false + + + + InformationRegister.СостоянияУспешныхОбменовДанными.Dimension.УзелИнформационнойБазы + + View + false + + + Edit + false + + + + Document.СообщениеSMS.Attribute.Удалить_Рассмотрено + + View + false + + + Edit + false + + + + DataProcessor.СопоставлениеОбъектовИнформационныхБаз.TabularSection.ТаблицаАвтоматическиСопоставленныхОбъектов.Attribute.ИсточникПоле4 + + View + false + + + Edit + false + + + + Document.Анкета.Attribute.РедактируемыйРаздел + + View + false + + + Edit + false + + + + Catalog.ОчередьЗаданий.Attribute.СостояниеЗадания + + View + false + + + Edit + false + + + + Catalog.ПредопределенныеВариантыОтчетов.TabularSection.Размещение.Attribute.СмТакже + + View + false + + + Edit + false + + + + Catalog.ЗапланированноеВзаимодействиеПрисоединенныеФайлы.TabularSection.ЭлектронныеПодписи.Attribute.ДатаПодписи + + View + false + + + Edit + false + + + + InformationRegister.УдалитьАдресныйКлассификатор.Dimension.КодУлицыВКоде + + View + false + + + Edit + false + + + + InformationRegister.КэшПрограммныхИнтерфейсов.Resource.Данные + + View + false + + + Edit + false + + + + Catalog.ГруппыДоступа.StandardAttribute.PredefinedDataName + + View + false + + + Edit + false + + + + Catalog.ГруппыДоступа.StandardAttribute.Predefined + + View + false + + + Edit + false + + + + Catalog.ГруппыДоступа.StandardAttribute.Ref + + View + false + + + Edit + false + + + + Catalog.ГруппыДоступа.StandardAttribute.DeletionMark + + View + false + + + Edit + false + + + + Catalog.ГруппыДоступа.StandardAttribute.IsFolder + + View + false + + + Edit + false + + + + Catalog.ГруппыДоступа.StandardAttribute.Owner + + View + false + + + Edit + false + + + + Catalog.ГруппыДоступа.StandardAttribute.Parent + + View + false + + + Edit + false + + + + Catalog.ГруппыДоступа.StandardAttribute.Description + + View + false + + + Edit + false + + + + Catalog.ГруппыДоступа.StandardAttribute.Code + + View + false + + + Edit + false + + + + Catalog.СообщениеSMSПрисоединенныеФайлы.Attribute.СтатусИзвлеченияТекста + + View + false + + + Edit + false + + + + Catalog.ТомаХраненияФайлов.Attribute.ПолныйПутьWindows + + View + false + + + Edit + false + + + + DataProcessor.ПомощникИнтерактивногоОбменаДанными.TabularSection.ИнформацияСтатистики.Attribute.ИндексКартинки + + View + false + + + Edit + false + + + + Catalog.ГруппыВнешнихПользователей.Attribute.ВсеОбъектыАвторизации + + View + false + + + Edit + false + + + + Catalog.ТелефонныйЗвонокПрисоединенныеФайлы.TabularSection.ЭлектронныеПодписи.Attribute.УстановившийПодпись + + View + false + + + Edit + false + + + + InformationRegister.ВерсииОбъектов.Resource.ВерсияОбъекта + + View + false + + + Edit + false + + + + Catalog.ЭлектронноеПисьмоВходящееПрисоединенныеФайлы.Attribute.Том + + View + false + + + Edit + false + + + + DataProcessor.ПомощникИнтерактивногоОбменаДанными.TabularSection.ИнформацияСтатистики + + View + false + + + Edit + false + + + + ChartOfCharacteristicTypes.УдалитьВидыДоступа.StandardAttribute.PredefinedDataName + + View + false + + + Edit + false + + + + ChartOfCharacteristicTypes.УдалитьВидыДоступа.StandardAttribute.ValueType + + View + false + + + Edit + false + + + + ChartOfCharacteristicTypes.УдалитьВидыДоступа.StandardAttribute.Description + + View + false + + + Edit + false + + + + ChartOfCharacteristicTypes.УдалитьВидыДоступа.StandardAttribute.Code + + View + false + + + Edit + false + + + + ChartOfCharacteristicTypes.УдалитьВидыДоступа.StandardAttribute.IsFolder + + View + false + + + Edit + false + + + + ChartOfCharacteristicTypes.УдалитьВидыДоступа.StandardAttribute.Parent + + View + false + + + Edit + false + + + + ChartOfCharacteristicTypes.УдалитьВидыДоступа.StandardAttribute.Predefined + + View + false + + + Edit + false + + + + ChartOfCharacteristicTypes.УдалитьВидыДоступа.StandardAttribute.DeletionMark + + View + false + + + Edit + false + + + + ChartOfCharacteristicTypes.УдалитьВидыДоступа.StandardAttribute.Ref + + View + false + + + Edit + false + + + + Catalog.ГруппыДоступа.TabularSection.ЗначенияДоступа.Attribute.ЗначениеДоступа + + View + false + + + Edit + false + + + + DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.ИмяФайлаОбмена + + View + false + + + Edit + false + + + + DataProcessor.ИнтерактивноеИзменениеВыгрузки.Attribute.ПредставлениеТекущейНастройки + + View + false + + + Edit + false + + + + Catalog.ЗапланированноеВзаимодействиеПрисоединенныеФайлы.Attribute.ФайлХранилище + + View + false + + + Edit + false + + + + DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.УзелДляОбмена + + View + false + + + Edit + false + + + + Document.ЗапланированноеВзаимодействие.Attribute.Автор + + View + false + + + Edit + false + + + + Catalog.ПредопределенныеВариантыОтчетов.Attribute.НаименованияПолей + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоИсходящее.Attribute.ДатаАктуальностиОтправки + + View + false + + + Edit + false + + + + InformationRegister.ПубличныеИдентификаторыСинхронизируемыхОбъектов.Dimension.Ссылка + + View + false + + + Edit + false + + + + DataProcessor.ПомощникСозданияОбменаДанными.Attribute.FTPСоединениеПуть + + View + false + + + Edit + false + + + + InformationRegister.НазначениеДополнительныхОбработок.Resource.ИспользоватьОтчеты + + View + false + + + Edit + false + + + + DataProcessor.ПоискИУстановкаОбновлений.TabularSection.ДоступныеОбновления.Attribute.Версия3Разряд + + View + false + + + Edit + false + + + + Catalog.ВнешниеПользователи.Attribute.УстановитьРолиНепосредственно + + View + false + + + Edit + false + + + + Catalog.ЭлектронноеПисьмоИсходящееПрисоединенныеФайлы.Attribute.ВладелецФайла + + View + false + + + Edit + false + + + + InformationRegister.УдалитьОбластиДанных.StandardAttribute.Active + + View + false + + + Edit + false + + + + InformationRegister.УдалитьОбластиДанных.StandardAttribute.LineNumber + + View + false + + + Edit + false + + + + InformationRegister.УдалитьОбластиДанных.StandardAttribute.Recorder + + View + false + + + Edit + false + + + + InformationRegister.УдалитьОбластиДанных.StandardAttribute.Period + + View + false + + + Edit + false + + + + Document.Встреча.TabularSection.НаборыЗначенийДоступа.Attribute.НомерНабора + + View + false + + + Edit + false + + + + InformationRegister.НастройкиУчетныхЗаписейЭлектроннойПочты.Resource.ВключатьПодписьДляНовыхСообщений + + View + false + + + Edit + false + + + + InformationRegister.СостоянияУспешныхОбменовДанными.StandardAttribute.Active + + View + false + + + Edit + false + + + + InformationRegister.СостоянияУспешныхОбменовДанными.StandardAttribute.LineNumber + + View + false + + + Edit + false + + + + InformationRegister.СостоянияУспешныхОбменовДанными.StandardAttribute.Recorder + + View + false + + + Edit + false + + + + InformationRegister.СостоянияУспешныхОбменовДанными.StandardAttribute.Period + + View + false + + + Edit + false + + + + BusinessProcess.Задание.Attribute.ДатаЗавершения + + View + false + + + Edit + false + + + + Catalog.ЗапланированноеВзаимодействиеПрисоединенныеФайлы.Attribute.Размер + + View + false + + + Edit + false + + + + InformationRegister.УдалитьГруппыЗначенийДоступа.StandardAttribute.Active + + View + false + + + Edit + false + + + + InformationRegister.УдалитьГруппыЗначенийДоступа.StandardAttribute.LineNumber + + View + false + + + Edit + false + + + + InformationRegister.УдалитьГруппыЗначенийДоступа.StandardAttribute.Recorder + + View + false + + + Edit + false + + + + InformationRegister.УдалитьГруппыЗначенийДоступа.StandardAttribute.Period + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоИсходящее.Attribute.Кодировка + + View + false + + + Edit + false + + + + DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ИмяПланаОбменаВРО + + View + false + + + Edit + false + + + + InformationRegister.ДатыЗапретаИзменения.StandardAttribute.Active + + View + false + + + Edit + false + + + + InformationRegister.ДатыЗапретаИзменения.StandardAttribute.LineNumber + + View + false + + + Edit + false + + + + InformationRegister.ДатыЗапретаИзменения.StandardAttribute.Recorder + + View + false + + + Edit + false + + + + InformationRegister.ДатыЗапретаИзменения.StandardAttribute.Period + + View + false + + + Edit + false + + + + InformationRegister.ОриентирыАдресныхОбъектов.Resource.АдресныйОбъект + + View + false + + + Edit + false + + + + Catalog.ВопросыШаблонаАнкеты.Attribute.РодительВопрос + + View + false + + + Edit + false + + + + InformationRegister.КалендарныеГрафики.Dimension.ДатаГрафика + + View + false + + + Edit + false + + + + Document.Встреча.Attribute.Комментарий + + View + false + + + Edit + false + + + + Catalog.ЗапланированноеВзаимодействиеПрисоединенныеФайлы.Attribute.ВладелецФайла + + View + false + + + Edit + false + + + + Catalog.ВнешниеПользователи.Attribute.ОбъектАвторизации + + View + false + + + Edit + false + + + + InformationRegister.НастройкиТранспортаОбмена.Resource.УдалитьFTPСоединениеПароль + + View + false + + + Edit + false + + + + InformationRegister.НастройкиПравОбъектов.Attribute.УровеньРазрешенияЧтения + + View + false + + + Edit + false + + + + Catalog.ВстречаПрисоединенныеФайлы.StandardAttribute.PredefinedDataName + + View + false + + + Edit + false + + + + Catalog.ВстречаПрисоединенныеФайлы.StandardAttribute.Predefined + + View + false + + + Edit + false + + + + Catalog.ВстречаПрисоединенныеФайлы.StandardAttribute.Ref + + View + false + + + Edit + false + + + + Catalog.ВстречаПрисоединенныеФайлы.StandardAttribute.DeletionMark + + View + false + + + Edit + false + + + + Catalog.ВстречаПрисоединенныеФайлы.StandardAttribute.IsFolder + + View + false + + + Edit + false + + + + Catalog.ВстречаПрисоединенныеФайлы.StandardAttribute.Owner + + View + false + + + Edit + false + + + + Catalog.ВстречаПрисоединенныеФайлы.StandardAttribute.Parent + + View + false + + + Edit + false + + + + Catalog.ВстречаПрисоединенныеФайлы.StandardAttribute.Description + + View + false + + + Edit + false + + + + Catalog.ВстречаПрисоединенныеФайлы.StandardAttribute.Code + + View + false + + + Edit + false + + + + Catalog.СообщениеSMSПрисоединенныеФайлы.TabularSection.ЭлектронныеПодписи.Attribute.ИмяФайлаПодписи + + View + false + + + Edit + false + + + + Catalog.Пользователи.TabularSection.КонтактнаяИнформация + + View + false + + + Edit + false + + + + InformationRegister.УдалитьРейтингАктивностиОбластейДанных.StandardAttribute.Active + + View + false + + + Edit + false + + + + InformationRegister.УдалитьРейтингАктивностиОбластейДанных.StandardAttribute.LineNumber + + View + false + + + Edit + false + + + + InformationRegister.УдалитьРейтингАктивностиОбластейДанных.StandardAttribute.Recorder + + View + false + + + Edit + false + + + + InformationRegister.УдалитьРейтингАктивностиОбластейДанных.StandardAttribute.Period + + View + false + + + Edit + false + + + + ChartOfCharacteristicTypes.ДополнительныеРеквизитыИСведения.TabularSection.ЗависимостиДополнительныхРеквизитов + + View + false + + + Edit + false + + + + ChartOfCharacteristicTypes.ВопросыДляАнкетирования.Attribute.ТребуетсяКомментарий + + View + false + + + Edit + false + + + + Document.ЗапланированноеВзаимодействие.TabularSection.НаборыЗначенийДоступа.Attribute.Изменение + + View + false + + + Edit + false + + + + InformationRegister.ИсторияАдресныхОбъектов.Dimension.Уровень + + View + false + + + Edit + false + + + + DataProcessor.ПомощникСозданияОбменаДанными.Attribute.WSИмяПользователя + + View + false + + + Edit + false + + + + InformationRegister.ПравилаДляОбменаДанными.Resource.РежимОтладкиВыгрузки + + View + false + + + Edit + false + + + + InformationRegister.ДатыЗапретаИзменения.Dimension.Пользователь + + View + false + + + Edit + false + + + + Catalog.Пользователи.Attribute.ФизическоеЛицо + + View + false + + + Edit + false + + + + DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.КомментарийПриЗагрузкеДанных + + View + false + + + Edit + false + + + + DataProcessor.ПоискИУстановкаОбновлений.Attribute.НуженФайлОбновления + + View + false + + + Edit + false + + + + Catalog.Календари.Attribute.СпособЗаполнения + + View + false + + + Edit + false + + + + Catalog.Пользователи.Attribute.СвойстваПользователяИБ + + View + false + + + Edit + false + + + + InformationRegister.ТаблицыГруппДоступа.Dimension.ГруппаДоступа + + View + false + + + Edit + false + + + + DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.ОптимизированнаяЗаписьОбъектов + + View + false + + + Edit + false + + + + Document.НазначениеОпросов.Attribute.ПоказыватьВАрхивеАнкет + + View + false + + + Edit + false + + + + Catalog.ВопросыШаблонаАнкеты.Attribute.ТипВопроса + + View + false + + + Edit + false + + + + DataProcessor.ПоискИУстановкаОбновлений.TabularSection.ДоступныеОбновления.Attribute.МинимальнаяВерсия + + View + false + + + Edit + false + + + + Catalog.ТомаХраненияФайлов.StandardAttribute.PredefinedDataName + + View + false + + + Edit + false + + + + Catalog.ТомаХраненияФайлов.StandardAttribute.Predefined + + View + false + + + Edit + false + + + + Catalog.ТомаХраненияФайлов.StandardAttribute.Ref + + View + false + + + Edit + false + + + + Catalog.ТомаХраненияФайлов.StandardAttribute.DeletionMark + + View + false + + + Edit + false + + + + Catalog.ТомаХраненияФайлов.StandardAttribute.IsFolder + + View + false + + + Edit + false + + + + Catalog.ТомаХраненияФайлов.StandardAttribute.Owner + + View + false + + + Edit + false + + + + Catalog.ТомаХраненияФайлов.StandardAttribute.Parent + + View + false + + + Edit + false + + + + Catalog.ТомаХраненияФайлов.StandardAttribute.Description + + View + false + + + Edit + false + + + + Catalog.ТомаХраненияФайлов.StandardAttribute.Code + + View + false + + + Edit + false + + + + Catalog.ЭлектронноеПисьмоВходящееПрисоединенныеФайлы.Attribute.СтатусИзвлеченияТекста + + View + false + + + Edit + false + + + + Catalog.ЭлектронноеПисьмоИсходящееПрисоединенныеФайлы.Attribute.ИДФайлаЭлектронногоПисьма + + View + false + + + Edit + false + + + + Catalog.СтраныМира.Attribute.КодАльфа3 + + View + false + + + Edit + false + + + + DataProcessor.НастройкаРезервногоКопированияИБ.Attribute.ВариантВыполнения + + View + false + + + Edit + false + + + + DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.ТаблицаПравилКонвертации + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоВходящее.Attribute.Удалить_РассмотретьПосле + + View + false + + + Edit + false + + + + InformationRegister.ВерсииПодсистемОбластейДанных.StandardAttribute.Active + + View + false + + + Edit + false + + + + InformationRegister.ВерсииПодсистемОбластейДанных.StandardAttribute.LineNumber + + View + false + + + Edit + false + + + + InformationRegister.ВерсииПодсистемОбластейДанных.StandardAttribute.Recorder + + View + false + + + Edit + false + + + + InformationRegister.ВерсииПодсистемОбластейДанных.StandardAttribute.Period + + View + false + + + Edit + false + + + + DataProcessor.СопоставлениеОбъектовИнформационныхБаз.TabularSection.ТаблицаАвтоматическиСопоставленныхОбъектов.Attribute.Пометка + + View + false + + + Edit + false + + + + InformationRegister.ОбластиПерсональныхДанных.Resource.ИспользованиеСобытийЖурналаРегистрации + + View + false + + + Edit + false + + + + Catalog.ЗапланированноеВзаимодействиеПрисоединенныеФайлы.Attribute.Автор + + View + false + + + Edit + false + + + + DataProcessor.ПоискИУстановкаОбновлений.Attribute.АдресЭлектроннойПочты + + View + false + + + Edit + false + + + + Catalog.ДополнительныеОтчетыИОбработки.TabularSection.Разделы.Attribute.Раздел + + View + false + + + Edit + false + + + + Catalog.ПравилаОбработкиЭлектроннойПочты.StandardAttribute.PredefinedDataName + + View + false + + + Edit + false + + + + Catalog.ПравилаОбработкиЭлектроннойПочты.StandardAttribute.Predefined + + View + false + + + Edit + false + + + + Catalog.ПравилаОбработкиЭлектроннойПочты.StandardAttribute.Ref + + View + false + + + Edit + false + + + + Catalog.ПравилаОбработкиЭлектроннойПочты.StandardAttribute.DeletionMark + + View + false + + + Edit + false + + + + Catalog.ПравилаОбработкиЭлектроннойПочты.StandardAttribute.IsFolder + + View + false + + + Edit + false + + + + Catalog.ПравилаОбработкиЭлектроннойПочты.StandardAttribute.Owner + + View + false + + + Edit + false + + + + Catalog.ПравилаОбработкиЭлектроннойПочты.StandardAttribute.Parent + + View + false + + + Edit + false + + + + Catalog.ПравилаОбработкиЭлектроннойПочты.StandardAttribute.Description + + View + false + + + Edit + false + + + + Catalog.ПравилаОбработкиЭлектроннойПочты.StandardAttribute.Code + + View + false + + + Edit + false + + + + ChartOfCharacteristicTypes.ВопросыДляАнкетирования.StandardAttribute.PredefinedDataName + + View + false + + + Edit + false + + + + ChartOfCharacteristicTypes.ВопросыДляАнкетирования.StandardAttribute.ValueType + + View + false + + + Edit + false + + + + ChartOfCharacteristicTypes.ВопросыДляАнкетирования.StandardAttribute.Description + + View + false + + + Edit + false + + + + ChartOfCharacteristicTypes.ВопросыДляАнкетирования.StandardAttribute.Code + + View + false + + + Edit + false + + + + ChartOfCharacteristicTypes.ВопросыДляАнкетирования.StandardAttribute.IsFolder + + View + false + + + Edit + false + + + + ChartOfCharacteristicTypes.ВопросыДляАнкетирования.StandardAttribute.Parent + + View + false + + + Edit + false + + + + ChartOfCharacteristicTypes.ВопросыДляАнкетирования.StandardAttribute.Predefined + + View + false + + + Edit + false + + + + ChartOfCharacteristicTypes.ВопросыДляАнкетирования.StandardAttribute.DeletionMark + + View + false + + + Edit + false + + + + ChartOfCharacteristicTypes.ВопросыДляАнкетирования.StandardAttribute.Ref + + View + false + + + Edit + false + + + + BusinessProcess.Задание.StandardAttribute.Started + + View + false + + + Edit + false + + + + BusinessProcess.Задание.StandardAttribute.HeadTask + + View + false + + + Edit + false + + + + BusinessProcess.Задание.StandardAttribute.Completed + + View + false + + + Edit + false + + + + BusinessProcess.Задание.StandardAttribute.Ref + + View + false + + + Edit + false + + + + BusinessProcess.Задание.StandardAttribute.DeletionMark + + View + false + + + Edit + false + + + + BusinessProcess.Задание.StandardAttribute.Date + + View + false + + + Edit + false + + + + BusinessProcess.Задание.StandardAttribute.Number + + View + false + + + Edit + false + + + + DataProcessor.ПомощникСозданияОбменаДанными.Attribute.СсылкаНового + + View + false + + + Edit + false + + + + Catalog.ПрофилиГруппДоступа.Attribute.ПоставляемыйПрофильИзменен + + View + false + + + Edit + false + + + + DataProcessor.КонвертацияОбъектовXDTO.Attribute.ИмяПланаОбменаВРО + + View + false + + + Edit + false + + + + InformationRegister.УдалитьПраваПоЗначениямДоступа.StandardAttribute.Active + + View + false + + + Edit + false + + + + InformationRegister.УдалитьПраваПоЗначениямДоступа.StandardAttribute.LineNumber + + View + false + + + Edit + false + + + + InformationRegister.УдалитьПраваПоЗначениямДоступа.StandardAttribute.Recorder + + View + false + + + Edit + false + + + + InformationRegister.УдалитьПраваПоЗначениямДоступа.StandardAttribute.Period + + View + false + + + Edit + false + + + + InformationRegister.НастройкиТранспортаОбмена.Resource.FTPСоединениеПользователь + + View + false + + + Edit + false + + + + Catalog.ДополнительныеОтчетыИОбработки.TabularSection.Команды.Attribute.ВариантЗапуска + + View + false + + + Edit + false + + + + DataProcessor.СписокРеспондента.Attribute.Респондент + + View + false + + + Edit + false + + + + Catalog.Валюты.Attribute.СпособУстановкиКурса + + View + false + + + Edit + false + + + + DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ВыводВПротоколСообщенийОбОшибках + + View + false + + + Edit + false + + + + InformationRegister.НастройкиОчисткиФайлов.Dimension.ВладелецФайла + + View + false + + + Edit + false + + + + Catalog.ТелефонныйЗвонокПрисоединенныеФайлы.Attribute.Расширение + + View + false + + + Edit + false + + + + InformationRegister.НастройкиТранспортаОбмена.Resource.FTPСоединениеПассивноеСоединение + + View + false + + + Edit + false + + + + InformationRegister.НастройкиПравОбъектов.Dimension.Таблица + + View + false + + + Edit + false + + + + Catalog.ЭлектронноеПисьмоВходящееПрисоединенныеФайлы.Attribute.ФайлХранилище + + View + false + + + Edit + false + + + + InformationRegister.ФайлыВРабочемКаталоге.Resource.Размер + + View + false + + + Edit + false + + + + DataProcessor.КонвертацияОбъектовРаспределенныхИнформационныхБаз.Attribute.КоличествоЭлементовВТранзакции + + View + false + + + Edit + false + + + + InformationRegister.ОбластиПерсональныхДанных.Dimension.ИмяОбласти + + View + false + + + Edit + false + + + + InformationRegister.СоответствияОбъектовИнформационныхБаз.Dimension.ТипИсточника + + View + false + + + Edit + false + + + + InformationRegister.ОбластиДанных.Attribute.Повтор + + View + false + + + Edit + false + + + + Catalog.СообщенияСистемы.Attribute.Отправитель + + View + false + + + Edit + false + + + + InformationRegister.СостоянияРассылокОтчетов.Dimension.Рассылка + + View + false + + + Edit + false + + + + InformationRegister.ДампыПлатформы.Dimension.ВерсияПлатформы + + View + false + + + Edit + false + + + + InformationRegister.УровниСокращенийАдресныхСведений.Dimension.Уровень + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоИсходящее.Attribute.Важность + + View + false + + + Edit + false + + + + Document.ТелефонныйЗвонок.Attribute.АбонентКонтакт + + View + false + + + Edit + false + + + + Catalog.ПредопределенныеВариантыОтчетов.Attribute.Включен + + View + false + + + Edit + false + + + + DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.ПарольДляСжатияФайлаОбмена + + View + false + + + Edit + false + + + + InformationRegister.СостоянияКонтрагентов.Dimension.Контрагент + + View + false + + + Edit + false + + + + InformationRegister.ДатыЗапретаИзменения.Dimension.Раздел + + View + false + + + Edit + false + + + + InformationRegister.УдалитьСтраныМира.Resource.Значение + + View + false + + + Edit + false + + + + InformationRegister.ИдентификаторыПолученныхЭлектронныхПисем.Resource.ДатаПолучения + + View + false + + + Edit + false + + + + DataProcessor.ПомощникСозданияОбменаДанными.Attribute.УзелИнформационнойБазы + + View + false + + + Edit + false + + + + DataProcessor.ПомощникСозданияОбменаДанными.TabularSection.ИнформацияСтатистики.Attribute.КоличествоОбъектовСопоставленных + + View + false + + + Edit + false + + + + Catalog.Пользователи.Attribute.ИдентификаторПользователяСервиса + + View + false + + + Edit + false + + + + DataProcessor.СопоставлениеОбъектовИнформационныхБаз.Attribute.ИмяТипаОбъектаТаблицыИсточника + + View + false + + + Edit + false + + + + InformationRegister.УдалитьБлокировкиСеансовОбластиДанных.Resource.НачалоБлокировки + + View + false + + + Edit + false + + + + InformationRegister.УдалитьОчередьЗаданий.Resource.Расписание + + View + false + + + Edit + false + + + + InformationRegister.ДополнительныеАдресныеСведения.Resource.КодУчасткаИФНСФЛ + + View + false + + + Edit + false + + + + InformationRegister.УдалитьСтраныМира.StandardAttribute.Active + + View + false + + + Edit + false + + + + InformationRegister.УдалитьСтраныМира.StandardAttribute.LineNumber + + View + false + + + Edit + false + + + + InformationRegister.УдалитьСтраныМира.StandardAttribute.Recorder + + View + false + + + Edit + false + + + + InformationRegister.УдалитьСтраныМира.StandardAttribute.Period + + View + false + + + Edit + false + + + + InformationRegister.СтатистикаКонфигурации.Dimension.ВидСтатистики + + View + false + + + Edit + false + + + + ChartOfCharacteristicTypes.ДополнительныеРеквизитыИСведения.Attribute.ДополнительныеЗначенияСВесом + + View + false + + + Edit + false + + + + Catalog.ЭлектронноеПисьмоВходящееПрисоединенныеФайлы.Attribute.Зашифрован + + View + false + + + Edit + false + + + + InformationRegister.ЗамерыКомментарииСтатистики.Dimension.ИдентификаторУдаления + + View + false + + + Edit + false + + + + Catalog.ЭлектронноеПисьмоИсходящееПрисоединенныеФайлы.Attribute.Том + + View + false + + + Edit + false + + + + InformationRegister.УдалитьОбластиДанных.Attribute.Вариант + + View + false + + + Edit + false + + + + DataProcessor.ПомощникСозданияОбменаДанными.Attribute.ИмяВременногоКаталогаСообщенийОбмена + + View + false + + + Edit + false + + + + InformationRegister.ДампыПлатформы.Resource.ИмяФайла + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоИсходящее.Attribute.Комментарий + + View + false + + + Edit + false + + + + Catalog.ЗапланированноеВзаимодействиеПрисоединенныеФайлы.Attribute.СтатусИзвлеченияТекста + + View + false + + + Edit + false + + + + DataProcessor.КонвертацияОбъектовРаспределенныхИнформационныхБаз.Attribute.КлючСообщенияЖурналаРегистрации + + View + false + + + Edit + false + + + + Catalog.РолиИсполнителей.Attribute.Комментарий + + View + false + + + Edit + false + + + + Catalog.Организации.TabularSection.КонтактнаяИнформация.Attribute.АдресЭП + + View + false + + + Edit + false + + + + DataProcessor.ТранспортСообщенийОбменаFTP.Attribute.FTPСоединениеПорт + + View + false + + + Edit + false + + + + Catalog.ВариантыОтчетов.TabularSection.Размещение.Attribute.Подсистема + + View + false + + + Edit + false + + + + DataProcessor.ОценкаПроизводительности.Attribute.ДатаНачала + + View + false + + + Edit + false + + + + DataProcessor.ПомощникСозданияОбменаДанными.Attribute.ИспользоватьПараметрыТранспортаFTP + + View + false + + + Edit + false + + + + InformationRegister.НастройкиТранспортаОбмена.Resource.COMИмяИнформационнойБазыНаСервере1СПредприятия + + View + false + + + Edit + false + + + + Document.СообщениеSMS.Attribute.ВзаимодействиеОснование + + View + false + + + Edit + false + + + + Catalog.Организации.TabularSection.КонтактнаяИнформация.Attribute.Страна + + View + false + + + Edit + false + + + + Catalog.ЭлектронноеПисьмоВходящееПрисоединенныеФайлы.Attribute.ИДФайлаЭлектронногоПисьма + + View + false + + + Edit + false + + + + Catalog.ЭлектронноеПисьмоИсходящееПрисоединенныеФайлы.TabularSection.СертификатыШифрования.Attribute.Отпечаток + + View + false + + + Edit + false + + + + InformationRegister.ЗамерыОперацииСтатистики.Dimension.ПериодОкончание + + View + false + + + Edit + false + + + + Document.Встреча.TabularSection.НаборыЗначенийДоступа + + View + false + + + Edit + false + + + + Catalog.ПоставляемыеДанные.TabularSection.ХарактеристикиДанных + + View + false + + + Edit + false + + + + InformationRegister.ДомаЗданияСтроения.Dimension.АдресныйОбъект + + View + false + + + Edit + false + + + + Document.ЗапланированноеВзаимодействие.TabularSection.ДополнительныеРеквизиты.Attribute.Значение + + View + false + + + Edit + false + + + + InformationRegister.ОбщиеНастройкиУзловИнформационныхБаз.Resource.ВыполнитьКорректировкуИнформацииСопоставления + + View + false + + + Edit + false + + + + DataProcessor.СопоставлениеОбъектовИнформационныхБаз.Attribute.СписокПолейТаблицы + + View + false + + + Edit + false + + + + DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.Параметры + + View + false + + + Edit + false + + + + Document.ЗапланированноеВзаимодействие.TabularSection.НаборыЗначенийДоступа + + View + false + + + Edit + false + + + + InformationRegister.ПоставляемыеДанныеТребующиеОбработки.Dimension.КодОбработчика + + View + false + + + Edit + false + + + + DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ОптимизированнаяЗаписьОбъектов + + View + false + + + Edit + false + + + + DataProcessor.БлокировкаРаботыПользователей.Attribute.ВременноЗапретитьРаботуПользователей + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоИсходящее.Attribute.Текст + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоИсходящее.Attribute.ВзаимодействиеОснование + + View + false + + + Edit + false + + + + InformationRegister.ПравилаДляОбменаДанными.Resource.ИмяМакетаПравилКорреспондента + + View + false + + + Edit + false + + + + InformationRegister.УдалитьОчередьЗаданий.Resource.ИмяМетода + + View + false + + + Edit + false + + + + DataProcessor.ПоискИУстановкаОбновлений.Attribute.ПроверятьНаличиеОбновленияПриЗапуске + + View + false + + + Edit + false + + + + Catalog.ЭлектронноеПисьмоИсходящееПрисоединенныеФайлы.TabularSection.ЭлектронныеПодписи.Attribute.ДатаПодписи + + View + false + + + Edit + false + + + + Catalog.ПользовательскиеНастройкиОтчетов.Attribute.КлючПользовательскойНастройки + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоИсходящее.Attribute.ЕстьВложения + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоВходящее.Attribute.ТекстHTML + + View + false + + + Edit + false + + + + InformationRegister.ДокументыСОшибкамиПроверкиКонтрагентов.Dimension.Документ + + View + false + + + Edit + false + + + + InformationRegister.ИдентификаторыПолученныхЭлектронныхПисем.Dimension.Идентификатор + + View + false + + + Edit + false + + + + InformationRegister.ДампыПлатформы.StandardAttribute.Active + + View + false + + + Edit + false + + + + InformationRegister.ДампыПлатформы.StandardAttribute.LineNumber + + View + false + + + Edit + false + + + + InformationRegister.ДампыПлатформы.StandardAttribute.Recorder + + View + false + + + Edit + false + + + + InformationRegister.ДампыПлатформы.StandardAttribute.Period + + View + false + + + Edit + false + + + + InformationRegister.ПользовательскиеМакетыПечати.Dimension.ИмяМакета + + View + false + + + Edit + false + + + + DataProcessor.ПомощникСозданияОбменаДанными.TabularSection.ИнформацияСтатистики.Attribute.ОдинКоМногим + + View + false + + + Edit + false + + + + DataProcessor.ПомощникСозданияОбменаДанными.Attribute.ПрефиксИнформационнойБазыИсточникаУстановлен + + View + false + + + Edit + false + + + + InformationRegister.КодировкиВерсийФайлов.StandardAttribute.Active + + View + false + + + Edit + false + + + + InformationRegister.КодировкиВерсийФайлов.StandardAttribute.LineNumber + + View + false + + + Edit + false + + + + InformationRegister.КодировкиВерсийФайлов.StandardAttribute.Recorder + + View + false + + + Edit + false + + + + InformationRegister.КодировкиВерсийФайлов.StandardAttribute.Period + + View + false + + + Edit + false + + + + Catalog.ЭлектронноеПисьмоВходящееПрисоединенныеФайлы.Attribute.ПодписанЭП + + View + false + + + Edit + false + + + + InformationRegister.ЗамерыОперацииСтатистики.StandardAttribute.Active + + View + false + + + Edit + false + + + + InformationRegister.ЗамерыОперацииСтатистики.StandardAttribute.LineNumber + + View + false + + + Edit + false + + + + InformationRegister.ЗамерыОперацииСтатистики.StandardAttribute.Recorder + + View + false + + + Edit + false + + + + InformationRegister.ЗамерыОперацииСтатистики.StandardAttribute.Period + + View + false + + + Edit + false + + + + InformationRegister.ВерсииПодсистемОбластейДанных.Resource.Версия + + View + false + + + Edit + false + + + + DataProcessor.СопоставлениеОбъектовИнформационныхБаз.TabularSection.ТаблицаАвтоматическиСопоставленныхОбъектов.Attribute.ИсточникПоле3 + + View + false + + + Edit + false + + + + Catalog.ЭлектронноеПисьмоВходящееПрисоединенныеФайлы.Attribute.Изменил + + View + false + + + Edit + false + + + + Catalog.ЭлектронноеПисьмоИсходящееПрисоединенныеФайлы.TabularSection.ЭлектронныеПодписи.Attribute.Отпечаток + + View + false + + + Edit + false + + + + Catalog.Файлы.StandardAttribute.PredefinedDataName + + View + false + + + Edit + false + + + + Catalog.Файлы.StandardAttribute.Predefined + + View + false + + + Edit + false + + + + Catalog.Файлы.StandardAttribute.Ref + + View + false + + + Edit + false + + + + Catalog.Файлы.StandardAttribute.DeletionMark + + View + false + + + Edit + false + + + + Catalog.Файлы.StandardAttribute.IsFolder + + View + false + + + Edit + false + + + + Catalog.Файлы.StandardAttribute.Owner + + View + false + + + Edit + false + + + + Catalog.Файлы.StandardAttribute.Parent + + View + false + + + Edit + false + + + + Catalog.Файлы.StandardAttribute.Description + + View + false + + + Edit + false + + + + Catalog.Файлы.StandardAttribute.Code + + View + false + + + Edit + false + + + + Catalog.ПапкиФайлов.TabularSection.ДополнительныеРеквизиты + + View + false + + + Edit + false + + + + InformationRegister.ПраваРолей.Resource.ИзменениеБезОграничения + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоВходящее.Attribute.Ответственный + + View + false + + + Edit + false + + + + Document.СообщениеSMS.TabularSection.Адресаты.Attribute.ИдентификаторСообщения + + View + false + + + Edit + false + + + + Catalog.ИдентификаторыОбъектовМетаданных.Attribute.ПолныйСиноним + + View + false + + + Edit + false + + + + Catalog.ПоставляемыеДанные.TabularSection.ХарактеристикиДанных.Attribute.Значение + + View + false + + + Edit + false + + + + Document.Встреча.TabularSection.Участники + + View + false + + + Edit + false + + + + DataProcessor.ИнтерактивноеИзменениеВыгрузки.Attribute.ДополнительнаяРегистрацияСценарияУзла + + View + false + + + Edit + false + + + + Catalog.Файлы.Attribute.ТекущаяВерсияПутьКФайлу + + View + false + + + Edit + false + + + + Catalog.ВнешниеПользователи.Attribute.Комментарий + + View + false + + + Edit + false + + + + Catalog.ДополнительныеОтчетыИОбработки.Attribute.ХранилищеНастроек + + View + false + + + Edit + false + + + + InformationRegister.НаборыЗначенийДоступа.Resource.Изменение + + View + false + + + Edit + false + + + + InformationRegister.КомментарииСтатистики.StandardAttribute.Active + + View + false + + + Edit + false + + + + InformationRegister.КомментарииСтатистики.StandardAttribute.LineNumber + + View + false + + + Edit + false + + + + InformationRegister.КомментарииСтатистики.StandardAttribute.Recorder + + View + false + + + Edit + false + + + + InformationRegister.КомментарииСтатистики.StandardAttribute.Period + + View + false + + + Edit + false + + + + DataProcessor.СопоставлениеОбъектовИнформационныхБаз.Attribute.ДанныеУспешноЗагружены + + View + false + + + Edit + false + + + + InformationRegister.ПраваРолей.Resource.Изменение + + View + false + + + Edit + false + + + + Catalog.Заметки.Attribute.ПредставлениеПредмета + + View + false + + + Edit + false + + + + InformationRegister.ПраваРолей.Resource.ДобавлениеБезОграничения + + View + false + + + Edit + false + + + + DataProcessor.ОценкаПроизводительности.Attribute.ОбщаяПроизводительностьСистемы + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоИсходящее.TabularSection.НаборыЗначенийДоступа.Attribute.Уточнение + + View + false + + + Edit + false + + + + Catalog.ЭлектронноеПисьмоИсходящееПрисоединенныеФайлы.TabularSection.СертификатыШифрования.Attribute.Представление + + View + false + + + Edit + false + + + + Task.ЗадачаИсполнителя.Attribute.ПринятаКИсполнению + + View + false + + + Edit + false + + + + InformationRegister.АдресныеОбъекты.StandardAttribute.Active + + View + false + + + Edit + false + + + + InformationRegister.АдресныеОбъекты.StandardAttribute.LineNumber + + View + false + + + Edit + false + + + + InformationRegister.АдресныеОбъекты.StandardAttribute.Recorder + + View + false + + + Edit + false + + + + InformationRegister.АдресныеОбъекты.StandardAttribute.Period + + View + false + + + Edit + false + + + + InformationRegister.УдалитьОбластиДанных.Attribute.ЧасовойПояс + + View + false + + + Edit + false + + + + DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ИмяФайлаПротоколаОбмена + + View + false + + + Edit + false + + + + InformationRegister.ДанныеБизнесПроцессов.Resource.Номер + + View + false + + + Edit + false + + + + InformationRegister.КомментарииОперацииСтатистики.Dimension.ИдентификаторОперации + + View + false + + + Edit + false + + + + Catalog.ПрограммыЭлектроннойПодписиИШифрования.Attribute.АлгоритмПодписи + + View + false + + + Edit + false + + + + DataProcessor.ПомощникИнтерактивногоОбменаДанными.TabularSection.ИнформацияСтатистики.Attribute.ЭтоУдалениеОбъекта + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоВходящее.TabularSection.ПолучателиКопий.Attribute.Адрес + + View + false + + + Edit + false + + + + InformationRegister.АдресныеОбъекты.Dimension.КодДополнительногоЭлемента + + View + false + + + Edit + false + + + + Catalog.ТелефонныйЗвонокПрисоединенныеФайлы.TabularSection.СертификатыШифрования.Attribute.Сертификат + + View + false + + + Edit + false + + + + DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.ИмяВременногоФайлаОбработчиковСобытий + + View + false + + + Edit + false + + + + Catalog.РолиИсполнителей.Attribute.УзелОбмена + + View + false + + + Edit + false + + + + InformationRegister.НастройкиВерсионированияОбъектов.Dimension.ТипОбъекта + + View + false + + + Edit + false + + + + Document.СообщениеSMS.Attribute.Тема + + View + false + + + Edit + false + + + + InformationRegister.НастройкиПравОбъектов.Attribute.УровеньРазрешенияПрава + + View + false + + + Edit + false + + + + Catalog.ВерсииФайлов.StandardAttribute.PredefinedDataName + + View + false + + + Edit + false + + + + Catalog.ВерсииФайлов.StandardAttribute.Predefined + + View + false + + + Edit + false + + + + Catalog.ВерсииФайлов.StandardAttribute.Ref + + View + false + + + Edit + false + + + + Catalog.ВерсииФайлов.StandardAttribute.DeletionMark + + View + false + + + Edit + false + + + + Catalog.ВерсииФайлов.StandardAttribute.IsFolder + + View + false + + + Edit + false + + + + Catalog.ВерсииФайлов.StandardAttribute.Owner + + View + false + + + Edit + false + + + + Catalog.ВерсииФайлов.StandardAttribute.Parent + + View + false + + + Edit + false + + + + Catalog.ВерсииФайлов.StandardAttribute.Description + + View + false + + + Edit + false + + + + Catalog.ВерсииФайлов.StandardAttribute.Code + + View + false + + + Edit + false + + + + DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.СохраненныеНастройки + + View + false + + + Edit + false + + + + InformationRegister.ЗамерыВремениТехнологические.Attribute.ДатаЗаписиЛокальная + + View + false + + + Edit + false + + + + DataProcessor.ПомощникСозданияОбменаДанными.Attribute.НаименованиеЭтойБазы + + View + false + + + Edit + false + + + + InformationRegister.ОперацииСтатистики.StandardAttribute.Active + + View + false + + + Edit + false + + + + InformationRegister.ОперацииСтатистики.StandardAttribute.LineNumber + + View + false + + + Edit + false + + + + InformationRegister.ОперацииСтатистики.StandardAttribute.Recorder + + View + false + + + Edit + false + + + + InformationRegister.ОперацииСтатистики.StandardAttribute.Period + + View + false + + + Edit + false + + + + Catalog.ДополнительныеОтчетыИОбработки.Attribute.Информация + + View + false + + + Edit + false + + + + Catalog.ВерсииФайлов.TabularSection.ЭлектронныеПодписи.Attribute.Сертификат + + View + false + + + Edit + false + + + + Catalog.ТелефонныйЗвонокПрисоединенныеФайлы.TabularSection.СертификатыШифрования.Attribute.Представление + + View + false + + + Edit + false + + + + Catalog.Файлы.Attribute.ТекущаяВерсияАвтор + + View + false + + + Edit + false + + + + Catalog.УчетныеЗаписиЭлектроннойПочты.Attribute.Пользователь + + View + false + + + Edit + false + + + + Document.Встреча.Attribute.Предмет + + View + false + + + Edit + false + + + + Catalog.Пользователи.TabularSection.ДополнительныеРеквизиты.Attribute.ТекстоваяСтрока + + View + false + + + Edit + false + + + + InformationRegister.НастройкиТранспортаОбмена.Resource.WSURLВебСервиса + + View + false + + + Edit + false + + + + InformationRegister.ПрисоединенныеФайлы.StandardAttribute.Active + + View + false + + + Edit + false + + + + InformationRegister.ПрисоединенныеФайлы.StandardAttribute.LineNumber + + View + false + + + Edit + false + + + + InformationRegister.ПрисоединенныеФайлы.StandardAttribute.Recorder + + View + false + + + Edit + false + + + + InformationRegister.ПрисоединенныеФайлы.StandardAttribute.Period + + View + false + + + Edit + false + + + + DataProcessor.ПоискИУстановкаОбновлений.Attribute.ВыслатьОтчетНаПочту + + View + false + + + Edit + false + + + + InformationRegister.РезультатыОбменаДанными.Dimension.ТипПроблемы + + View + false + + + Edit + false + + + + Catalog.ОчередьЗаданийОбластейДанных.StandardAttribute.PredefinedDataName + + View + false + + + Edit + false + + + + Catalog.ОчередьЗаданийОбластейДанных.StandardAttribute.Predefined + + View + false + + + Edit + false + + + + Catalog.ОчередьЗаданийОбластейДанных.StandardAttribute.Ref + + View + false + + + Edit + false + + + + Catalog.ОчередьЗаданийОбластейДанных.StandardAttribute.DeletionMark + + View + false + + + Edit + false + + + + Catalog.ОчередьЗаданийОбластейДанных.StandardAttribute.IsFolder + + View + false + + + Edit + false + + + + Catalog.ОчередьЗаданийОбластейДанных.StandardAttribute.Owner + + View + false + + + Edit + false + + + + Catalog.ОчередьЗаданийОбластейДанных.StandardAttribute.Parent + + View + false + + + Edit + false + + + + Catalog.ОчередьЗаданийОбластейДанных.StandardAttribute.Description + + View + false + + + Edit + false + + + + Catalog.ОчередьЗаданийОбластейДанных.StandardAttribute.Code + + View + false + + + Edit + false + + + + DataProcessor.ТранспортСообщенийОбменаEMAIL.Attribute.ПарольАрхиваСообщенияОбмена + + View + false + + + Edit + false + + + + Catalog.РолиИсполнителей.Attribute.ИспользуетсяБезОбъектовАдресации + + View + false + + + Edit + false + + + + InformationRegister.ИдентификаторыПолученныхЭлектронныхПисем.Dimension.УчетнаяЗапись + + View + false + + + Edit + false + + + + InformationRegister.ПакетыДляОтправки.Attribute.ТелоПакета + + View + false + + + Edit + false + + + + InformationRegister.ДополнительныеАдресныеСведения.Resource.ОКТМО + + View + false + + + Edit + false + + + + InformationRegister.СостоянияПредметовВзаимодействий.Resource.Активен + + View + false + + + Edit + false + + + + InformationRegister.СведенияОПользователях.Resource.ПотребоватьСменуПароляПриВходе + + View + false + + + Edit + false + + + + InformationRegister.ЗагруженныеВерсииАдресныхСведений.Resource.ДатаВерсии + + View + false + + + Edit + false + + + + Catalog.ВстречаПрисоединенныеФайлы.TabularSection.ЭлектронныеПодписи.Attribute.УстановившийПодпись + + View + false + + + Edit + false + + + + InformationRegister.КомментарииОперацииСтатистики.StandardAttribute.Active + + View + false + + + Edit + false + + + + InformationRegister.КомментарииОперацииСтатистики.StandardAttribute.LineNumber + + View + false + + + Edit + false + + + + InformationRegister.КомментарииОперацииСтатистики.StandardAttribute.Recorder + + View + false + + + Edit + false + + + + InformationRegister.КомментарииОперацииСтатистики.StandardAttribute.Period + + View + false + + + Edit + false + + + + Catalog.ГруппыДоступа.TabularSection.ЗначенияДоступа.Attribute.ВидДоступа + + View + false + + + Edit + false + + + + Catalog.СценарииОбменовДанными.Attribute.Комментарий + + View + false + + + Edit + false + + + + InformationRegister.ЗамерыВремениТехнологические.Attribute.ДатаЗаписи + + View + false + + + Edit + false + + + + InformationRegister.КонтактыВзаимодействий.StandardAttribute.Active + + View + false + + + Edit + false + + + + InformationRegister.КонтактыВзаимодействий.StandardAttribute.LineNumber + + View + false + + + Edit + false + + + + InformationRegister.КонтактыВзаимодействий.StandardAttribute.Recorder + + View + false + + + Edit + false + + + + InformationRegister.КонтактыВзаимодействий.StandardAttribute.Period + + View + false + + + Edit + false + + + + Catalog.СообщениеSMSПрисоединенныеФайлы.TabularSection.ЭлектронныеПодписи.Attribute.Отпечаток + + View + false + + + Edit + false + + + + Catalog.УчетныеЗаписиЭлектроннойПочты.Attribute.СерверИсходящейПочты + + View + false + + + Edit + false + + + + Document.Встреча.TabularSection.Участники.Attribute.КакСвязаться + + View + false + + + Edit + false + + + + DataProcessor.ПомощникСозданияОбменаДанными.Attribute.COMИмяСервера1СПредприятия + + View + false + + + Edit + false + + + + Catalog.РассылкиОтчетов.Attribute.АдресОтвета + + View + false + + + Edit + false + + + + InformationRegister.НастройкиТранспортаОбмена.Resource.WSИспользоватьПередачуБольшогоОбъемаДанных + + View + false + + + Edit + false + + + + Catalog.СертификатыКлючейЭлектроннойПодписиИШифрования.Attribute.Имя + + View + false + + + Edit + false + + + + Catalog.ПрограммыЭлектроннойПодписиИШифрования.Attribute.АлгоритмХеширования + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоВходящее.Attribute.Комментарий + + View + false + + + Edit + false + + + + DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.НастройкаАвтоматическойЗагрузкиДанных + + View + false + + + Edit + false + + + + InformationRegister.ОбщиеНастройкиУзловИнформационныхБаз.Resource.НачальнаяВыгрузкаДанных + + View + false + + + Edit + false + + + + InformationRegister.НаследованиеНастроекПравОбъектов.Dimension.Родитель + + View + false + + + Edit + false + + + + Catalog.ВопросыШаблонаАнкеты.TabularSection.ПредопределенныеОтветы.Attribute.Ответ + + View + false + + + Edit + false + + + + Catalog.ГруппыИсполнителейЗадач.Attribute.ОсновнойОбъектАдресации + + View + false + + + Edit + false + + + + Catalog.ВариантыОтчетов.Attribute.УдалитьПредставлениеОбъекта + + View + false + + + Edit + false + + + + InformationRegister.РабочиеКаталогиФайлов.StandardAttribute.Active + + View + false + + + Edit + false + + + + InformationRegister.РабочиеКаталогиФайлов.StandardAttribute.LineNumber + + View + false + + + Edit + false + + + + InformationRegister.РабочиеКаталогиФайлов.StandardAttribute.Recorder + + View + false + + + Edit + false + + + + InformationRegister.РабочиеКаталогиФайлов.StandardAttribute.Period + + View + false + + + Edit + false + + + + DataProcessor.ПомощникСозданияОбменаДанными.TabularSection.ИнформацияСтатистики.Attribute.ИндексКартинки + + View + false + + + Edit + false + + + + InformationRegister.ПакетыДляОтправки.StandardAttribute.Active + + View + false + + + Edit + false + + + + InformationRegister.ПакетыДляОтправки.StandardAttribute.LineNumber + + View + false + + + Edit + false + + + + InformationRegister.ПакетыДляОтправки.StandardAttribute.Recorder + + View + false + + + Edit + false + + + + InformationRegister.ПакетыДляОтправки.StandardAttribute.Period + + View + false + + + Edit + false + + + + Document.СообщениеSMS.TabularSection.ДополнительныеРеквизиты.Attribute.Свойство + + View + false + + + Edit + false + + + + DataProcessor.ПоискИУстановкаОбновлений.TabularSection.ДоступныеОбновления.Attribute.Версия + + View + false + + + Edit + false + + + + Catalog.Организации.TabularSection.КонтактнаяИнформация.Attribute.НомерТелефона + + View + false + + + Edit + false + + + + Catalog.ПоставляемыеДанные.Attribute.ХранимыйФайл + + View + false + + + Edit + false + + + + BusinessProcess.Задание.Attribute.НаПроверке + + View + false + + + Edit + false + + + + Catalog.ВстречаПрисоединенныеФайлы.Attribute.Зашифрован + + View + false + + + Edit + false + + + + Catalog.СообщениеSMSПрисоединенныеФайлы.Attribute.ТекстХранилище + + View + false + + + Edit + false + + + + InformationRegister.ПоставляемыеДанныеТребующиеОбработки.Dimension.ИдентификаторФайла + + View + false + + + Edit + false + + + + InformationRegister.СостоянияРассылокОтчетов.Resource.Выполнена + + View + false + + + Edit + false + + + + InformationRegister.НастройкиТранспортаОбмена.Resource.FTPСоединениеПуть + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоВходящее.Attribute.СписокПолучателейПисьма + + View + false + + + Edit + false + + + + DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.ВыполнитьОбменДаннымиВОптимизированномФормате + + View + false + + + Edit + false + + + + InformationRegister.АдресныеОбъекты.Dimension.КодСубъектаРФ + + View + false + + + Edit + false + + + + Catalog.ЭлектронноеПисьмоИсходящееПрисоединенныеФайлы.Attribute.Зашифрован + + View + false + + + Edit + false + + + + Catalog.ГруппыВнешнихПользователей.TabularSection.Роли + + View + false + + + Edit + false + + + + Catalog.ПрофилиГруппДоступа.StandardAttribute.PredefinedDataName + + View + false + + + Edit + false + + + + Catalog.ПрофилиГруппДоступа.StandardAttribute.Predefined + + View + false + + + Edit + false + + + + Catalog.ПрофилиГруппДоступа.StandardAttribute.Ref + + View + false + + + Edit + false + + + + Catalog.ПрофилиГруппДоступа.StandardAttribute.DeletionMark + + View + false + + + Edit + false + + + + Catalog.ПрофилиГруппДоступа.StandardAttribute.IsFolder + + View + false + + + Edit + false + + + + Catalog.ПрофилиГруппДоступа.StandardAttribute.Owner + + View + false + + + Edit + false + + + + Catalog.ПрофилиГруппДоступа.StandardAttribute.Parent + + View + false + + + Edit + false + + + + Catalog.ПрофилиГруппДоступа.StandardAttribute.Description + + View + false + + + Edit + false + + + + Catalog.ПрофилиГруппДоступа.StandardAttribute.Code + + View + false + + + Edit + false + + + + Catalog.ЭлектронноеПисьмоВходящееПрисоединенныеФайлы.TabularSection.ЭлектронныеПодписи.Attribute.Отпечаток + + View + false + + + Edit + false + + + + InformationRegister.НастройкиПравОбъектов.Attribute.УровеньРазрешенияИзменения + + View + false + + + Edit + false + + + + DataProcessor.ПоискИУстановкаОбновлений.Attribute.СоздаватьРезервнуюКопию + + View + false + + + Edit + false + + + + Catalog.ГруппыВнешнихПользователей.TabularSection.Роли.Attribute.УдалитьРоль + + View + false + + + Edit + false + + + + Catalog.ПрофилиГруппДоступа.TabularSection.Роли.Attribute.УдалитьРоль + + View + false + + + Edit + false + + + + Document.Встреча.Attribute.Описание + + View + false + + + Edit + false + + + + InformationRegister.НастройкиПравОбъектов.Dimension.Право + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоВходящее.TabularSection.ПолучателиОтвета.Attribute.Контакт + + View + false + + + Edit + false + + + + Catalog.Файлы.TabularSection.ДополнительныеРеквизиты + + View + false + + + Edit + false + + + + Catalog.Пользователи.TabularSection.КонтактнаяИнформация.Attribute.ДоменноеИмяСервера + + View + false + + + Edit + false + + + + Catalog.СценарииОбменовДанными.TabularSection.НастройкиОбмена.Attribute.ВидТранспортаОбмена + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоВходящее.StandardAttribute.Posted + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоВходящее.StandardAttribute.Ref + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоВходящее.StandardAttribute.DeletionMark + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоВходящее.StandardAttribute.Date + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоВходящее.StandardAttribute.Number + + View + false + + + Edit + false + + + + InformationRegister.НастройкиУчетныхЗаписейЭлектроннойПочты.Resource.УдалятьПисьмаПослеОтправки + + View + false + + + Edit + false + + + + DataProcessor.ПоискИУстановкаОбновлений.TabularSection.ДоступныеОбновления.Attribute.ПутьКЛокальномуФайлу + + View + false + + + Edit + false + + + + InformationRegister.ВерсииОбъектов.Attribute.ТипВерсииОбъекта + + View + false + + + Edit + false + + + + Task.ЗадачаИсполнителя.Attribute.Описание + + View + false + + + Edit + false + + + + DataProcessor.РегистрацияИзмененийДляОбменаДанными.Attribute.НастройкаВариантНомераСообщения + + View + false + + + Edit + false + + + + Catalog.ПредопределенныеВариантыОтчетов.TabularSection.Размещение.Attribute.Важный + + View + false + + + Edit + false + + + + Catalog.СертификатыКлючейЭлектроннойПодписиИШифрования.Attribute.Добавил + + View + false + + + Edit + false + + + + Catalog.РассылкиОтчетов.Attribute.ИспользоватьПапку + + View + false + + + Edit + false + + + + Catalog.Организации.TabularSection.КонтактнаяИнформация.Attribute.НомерТелефонаБезКодов + + View + false + + + Edit + false + + + + InformationRegister.СообщенияОбменаДанными.Resource.ИмяФайлаСообщения + + View + false + + + Edit + false + + + + Catalog.СертификатыКлючейЭлектроннойПодписиИШифрования.Attribute.КемВыдан + + View + false + + + Edit + false + + + + DataProcessor.ПомощникСозданияОбменаДанными.Attribute.ИмяФайлаСообщенияОбмена + + View + false + + + Edit + false + + + + DataProcessor.НастройкаРезервногоКопированияИБ.Attribute.ФайлЗагрузкиРезервнойКопии + + View + false + + + Edit + false + + + + DataProcessor.ПомощникСозданияОбменаДанными.Attribute.ВариантНастройкиОбмена + + View + false + + + Edit + false + + + + InformationRegister.УдалитьАдресныйКлассификатор.Resource.Сокращение + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоИсходящее.Attribute.СписокПолучателейСкрытыхКопий + + View + false + + + Edit + false + + + + Document.Анкета.Attribute.Респондент + + View + false + + + Edit + false + + + + InformationRegister.ОтветыНаВопросыАнкет.Resource.Ответ + + View + false + + + Edit + false + + + + DataProcessor.ПомощникИнтерактивногоОбменаДанными.Attribute.ИмяФайлаСообщенияОбмена + + View + false + + + Edit + false + + + + Catalog.Календари.TabularSection.РасписаниеРаботы.Attribute.ВремяНачала + + View + false + + + Edit + false + + + + DataProcessor.ОценкаПроизводительности.TabularSection.Производительность + + View + false + + + Edit + false + + + + InformationRegister.УдалитьАдресныйКлассификатор.Dimension.КодРайонаВКоде + + View + false + + + Edit + false + + + + InformationRegister.РезультатыОбменаДанными.Attribute.НомерДокумента + + View + false + + + Edit + false + + + + InformationRegister.ИсполнителиЗадач.Attribute.ГруппаИсполнителейЗадач + + View + false + + + Edit + false + + + + Catalog.СтраныМира.Attribute.НаименованиеПолное + + View + false + + + Edit + false + + + + InformationRegister.РежимыПодключенияВнешнихМодулей.StandardAttribute.Active + + View + false + + + Edit + false + + + + InformationRegister.РежимыПодключенияВнешнихМодулей.StandardAttribute.LineNumber + + View + false + + + Edit + false + + + + InformationRegister.РежимыПодключенияВнешнихМодулей.StandardAttribute.Recorder + + View + false + + + Edit + false + + + + InformationRegister.РежимыПодключенияВнешнихМодулей.StandardAttribute.Period + + View + false + + + Edit + false + + + + Catalog.УчетныеЗаписиЭлектроннойПочты.Attribute.ПротоколВходящейПочты + + View + false + + + Edit + false + + + + Task.ЗадачаИсполнителя.Attribute.ДатаИсполнения + + View + false + + + Edit + false + + + + Catalog.СообщенияСистемы.StandardAttribute.PredefinedDataName + + View + false + + + Edit + false + + + + Catalog.СообщенияСистемы.StandardAttribute.Predefined + + View + false + + + Edit + false + + + + Catalog.СообщенияСистемы.StandardAttribute.Ref + + View + false + + + Edit + false + + + + Catalog.СообщенияСистемы.StandardAttribute.DeletionMark + + View + false + + + Edit + false + + + + Catalog.СообщенияСистемы.StandardAttribute.IsFolder + + View + false + + + Edit + false + + + + Catalog.СообщенияСистемы.StandardAttribute.Owner + + View + false + + + Edit + false + + + + Catalog.СообщенияСистемы.StandardAttribute.Parent + + View + false + + + Edit + false + + + + Catalog.СообщенияСистемы.StandardAttribute.Description + + View + false + + + Edit + false + + + + Catalog.СообщенияСистемы.StandardAttribute.Code + + View + false + + + Edit + false + + + + Catalog.ВерсииФайлов.Attribute.Зашифрован + + View + false + + + Edit + false + + + + Catalog.ПоставляемыеДанные.TabularSection.ХарактеристикиДанных.Attribute.Характеристика + + View + false + + + Edit + false + + + + DataProcessor.ОценкаПроизводительности.TabularSection.Производительность.Attribute.ЦелевоеВремя + + View + false + + + Edit + false + + + + Catalog.ПоставляемыеДанные.StandardAttribute.PredefinedDataName + + View + false + + + Edit + false + + + + Catalog.ПоставляемыеДанные.StandardAttribute.Predefined + + View + false + + + Edit + false + + + + Catalog.ПоставляемыеДанные.StandardAttribute.Ref + + View + false + + + Edit + false + + + + Catalog.ПоставляемыеДанные.StandardAttribute.DeletionMark + + View + false + + + Edit + false + + + + Catalog.ПоставляемыеДанные.StandardAttribute.IsFolder + + View + false + + + Edit + false + + + + Catalog.ПоставляемыеДанные.StandardAttribute.Owner + + View + false + + + Edit + false + + + + Catalog.ПоставляемыеДанные.StandardAttribute.Parent + + View + false + + + Edit + false + + + + Catalog.ПоставляемыеДанные.StandardAttribute.Description + + View + false + + + Edit + false + + + + Catalog.ПоставляемыеДанные.StandardAttribute.Code + + View + false + + + Edit + false + + + + Catalog.ВариантыОтчетов.Attribute.Настройки + + View + false + + + Edit + false + + + + Document.ЗапланированноеВзаимодействие.TabularSection.Участники.Attribute.ПредставлениеКонтакта + + View + false + + + Edit + false + + + + Catalog.ПредопределенныеВариантыОтчетов.Attribute.НаименованияПараметровИОтборов + + View + false + + + Edit + false + + + + InformationRegister.ЗамерыВремени.Attribute.ДатаЗаписиЛокальная + + View + false + + + Edit + false + + + + Catalog.ДополнительныеОтчетыИОбработки.Attribute.ТеснаяИнтеграцияСФормойОтчета + + View + false + + + Edit + false + + + + InformationRegister.НастройкиТранспортаОбмена.Resource.COMВариантРаботыИнформационнойБазы + + View + false + + + Edit + false + + + + DataProcessor.ПоискИУстановкаОбновлений.TabularSection.ДоступныеОбновления.Attribute.ПутьКФайлуОбновления + + View + false + + + Edit + false + + + + Catalog.ПользовательскиеНастройкиОтчетов.Attribute.Вариант + + View + false + + + Edit + false + + + + DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.ФлагРежимОтладки + + View + false + + + Edit + false + + + + InformationRegister.БезопасноеХранилищеДанных.StandardAttribute.Active + + View + false + + + Edit + false + + + + InformationRegister.БезопасноеХранилищеДанных.StandardAttribute.LineNumber + + View + false + + + Edit + false + + + + InformationRegister.БезопасноеХранилищеДанных.StandardAttribute.Recorder + + View + false + + + Edit + false + + + + InformationRegister.БезопасноеХранилищеДанных.StandardAttribute.Period + + View + false + + + Edit + false + + + + InformationRegister.РазрешенияНаИспользованиеВнешнихРесурсов.Dimension.КлючРазрешения + + View + false + + + Edit + false + + + + Catalog.Файлы.Attribute.ТекущаяВерсияДатаСоздания + + View + false + + + Edit + false + + + + Document.НазначениеОпросов.Attribute.ШаблонАнкеты + + View + false + + + Edit + false + + + + DataProcessor.СопоставлениеОбъектовИнформационныхБаз.TabularSection.ТаблицаСортировки.Attribute.НаправлениеСортировки + + View + false + + + Edit + false + + + + Document.ЗапланированноеВзаимодействие.TabularSection.ДополнительныеРеквизиты.Attribute.Свойство + + View + false + + + Edit + false + + + + InformationRegister.СостоянияПредметовВзаимодействий.Resource.КоличествоНеРассмотрено + + View + false + + + Edit + false + + + + Document.ТелефонныйЗвонок.Attribute.Удалить_Рассмотрено + + View + false + + + Edit + false + + + + Catalog.ЭлектронноеПисьмоИсходящееПрисоединенныеФайлы.Attribute.ПодписанЭП + + View + false + + + Edit + false + + + + Document.ТелефонныйЗвонок.TabularSection.ДополнительныеРеквизиты + + View + false + + + Edit + false + + + + Document.СообщениеSMS.Attribute.Удалить_РассмотретьПосле + + View + false + + + Edit + false + + + + Catalog.РассылкиОтчетов.Attribute.ПериодичностьРасписания + + View + false + + + Edit + false + + + + InformationRegister.СостоянияПредметовВзаимодействий.StandardAttribute.Active + + View + false + + + Edit + false + + + + InformationRegister.СостоянияПредметовВзаимодействий.StandardAttribute.LineNumber + + View + false + + + Edit + false + + + + InformationRegister.СостоянияПредметовВзаимодействий.StandardAttribute.Recorder + + View + false + + + Edit + false + + + + InformationRegister.СостоянияПредметовВзаимодействий.StandardAttribute.Period + + View + false + + + Edit + false + + + + InformationRegister.ФайлыВРабочемКаталоге.Dimension.Пользователь + + View + false + + + Edit + false + + + + Catalog.ЗапланированноеВзаимодействиеПрисоединенныеФайлы.TabularSection.ЭлектронныеПодписи.Attribute.Комментарий + + View + false + + + Edit + false + + + + DataProcessor.СопоставлениеОбъектовИнформационныхБаз.Attribute.ПоляПоискаТаблицыПриемника + + View + false + + + Edit + false + + + + InformationRegister.СоставыГруппПользователей.Dimension.ГруппаПользователей + + View + false + + + Edit + false + + + + InformationRegister.УдалитьОчередьЗаданий.StandardAttribute.Active + + View + false + + + Edit + false + + + + InformationRegister.УдалитьОчередьЗаданий.StandardAttribute.LineNumber + + View + false + + + Edit + false + + + + InformationRegister.УдалитьОчередьЗаданий.StandardAttribute.Recorder + + View + false + + + Edit + false + + + + InformationRegister.УдалитьОчередьЗаданий.StandardAttribute.Period + + View + false + + + Edit + false + + + + Catalog.ПрофилиГруппДоступа.TabularSection.ВидыДоступа.Attribute.Предустановленный + + View + false + + + Edit + false + + + + InformationRegister.ХранимыеФайлыВерсий.Resource.ХранимыйФайл + + View + false + + + Edit + false + + + + Catalog.СообщениеSMSПрисоединенныеФайлы.TabularSection.ЭлектронныеПодписи.Attribute.Подпись + + View + false + + + Edit + false + + + + DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.КомментарийПриЗагрузкеДанных + + View + false + + + Edit + false + + + + InformationRegister.НомераОтсканированныхФайлов.Dimension.Владелец + + View + false + + + Edit + false + + + + DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.ИмяФайлаПротоколаОбмена + + View + false + + + Edit + false + + + + InformationRegister.УдалитьНастройкиВерсионированияОбъектов.Resource.СрокХраненияВерсий + + View + false + + + Edit + false + + + + InformationRegister.УдалитьОчередьЗаданий.Resource.ДатаНачалаПоследнегоЗапуска + + View + false + + + Edit + false + + + + DataProcessor.ПомощникИнтерактивногоОбменаДанными.TabularSection.ИнформацияСтатистики.Attribute.Представление + + View + false + + + Edit + false + + + + DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.ВыводВПротоколИнформационныхСообщений + + View + false + + + Edit + false + + + + InformationRegister.СведенияОПользователях.StandardAttribute.Active + + View + false + + + Edit + false + + + + InformationRegister.СведенияОПользователях.StandardAttribute.LineNumber + + View + false + + + Edit + false + + + + InformationRegister.СведенияОПользователях.StandardAttribute.Recorder + + View + false + + + Edit + false + + + + InformationRegister.СведенияОПользователях.StandardAttribute.Period + + View + false + + + Edit + false + + + + DataProcessor.ПоискИУстановкаОбновлений.TabularSection.ДоступныеОбновления.Attribute.Поставщик + + View + false + + + Edit + false + + + + InformationRegister.БлокировкиСеансовОбластейДанных.StandardAttribute.Active + + View + false + + + Edit + false + + + + InformationRegister.БлокировкиСеансовОбластейДанных.StandardAttribute.LineNumber + + View + false + + + Edit + false + + + + InformationRegister.БлокировкиСеансовОбластейДанных.StandardAttribute.Recorder + + View + false + + + Edit + false + + + + InformationRegister.БлокировкиСеансовОбластейДанных.StandardAttribute.Period + + View + false + + + Edit + false + + + + DataProcessor.ПоискИУстановкаОбновлений.TabularSection.ДоступныеОбновления.Attribute.Конфигурация + + View + false + + + Edit + false + + + + Catalog.РассылкиОтчетов.Attribute.СетевойКаталогLinux + + View + false + + + Edit + false + + + + DataProcessor.СопоставлениеОбъектовИнформационныхБаз.TabularSection.ТаблицаСортировки + + View + false + + + Edit + false + + + + Catalog.ПредопределенныеВариантыОтчетов.Attribute.ГруппироватьПоОтчету + + View + false + + + Edit + false + + + + InformationRegister.СведенияОПользователях.Resource.ПросрочкаРаботыВПрограммеДоЗапрещенияВхода + + View + false + + + Edit + false + + + + Catalog.ОчередьЗаданийОбластейДанных.Attribute.НомерПопытки + + View + false + + + Edit + false + + + + InformationRegister.ИсторияАдресныхОбъектов.Dimension.КодРайона + + View + false + + + Edit + false + + + + Task.ЗадачаИсполнителя.Attribute.Автор + + View + false + + + Edit + false + + + + Catalog.СообщенияОбластейДанных.Attribute.Заблокировано + + View + false + + + Edit + false + + + + Catalog.ДополнительныеОтчетыИОбработки.Attribute.ИспользоватьДляФормыСписка + + View + false + + + Edit + false + + + + InformationRegister.ОбщиеНастройкиУзловИнформационныхБаз.Resource.ВыполнитьОтправкуДанных + + View + false + + + Edit + false + + + + InformationRegister.ЗагруженныеВерсииАдресныхСведений.StandardAttribute.Active + + View + false + + + Edit + false + + + + InformationRegister.ЗагруженныеВерсииАдресныхСведений.StandardAttribute.LineNumber + + View + false + + + Edit + false + + + + InformationRegister.ЗагруженныеВерсииАдресныхСведений.StandardAttribute.Recorder + + View + false + + + Edit + false + + + + InformationRegister.ЗагруженныеВерсииАдресныхСведений.StandardAttribute.Period + + View + false + + + Edit + false + + + + Document.СообщениеSMS.TabularSection.Адресаты.Attribute.КакСвязаться + + View + false + + + Edit + false + + + + Catalog.Пользователи.TabularSection.КонтактнаяИнформация.Attribute.Город + + View + false + + + Edit + false + + + + ChartOfCharacteristicTypes.ДополнительныеРеквизитыИСведения.Attribute.ВладелецДополнительныхЗначений + + View + false + + + Edit + false + + + + Catalog.Валюты.Attribute.ПараметрыПрописиНаРусском + + View + false + + + Edit + false + + + + DataProcessor.СопоставлениеОбъектовИнформационныхБаз.TabularSection.ТаблицаАвтоматическиСопоставленныхОбъектов.Attribute.УникальныйИдентификаторИсточника + + View + false + + + Edit + false + + + + Catalog.УчетныеЗаписиЭлектроннойПочты.Attribute.СпособPOP3Аутентификации + + View + false + + + Edit + false + + + + InformationRegister.ГруппыЗначенийДоступа.Dimension.ГруппаДанных + + View + false + + + Edit + false + + + + InformationRegister.УдалитьПраваПоЗначениямДоступа.Resource.Запрещено + + View + false + + + Edit + false + + + + Document.ТелефонныйЗвонок.TabularSection.НаборыЗначенийДоступа.Attribute.НомерНабора + + View + false + + + Edit + false + + + + Document.ТелефонныйЗвонок.TabularSection.НаборыЗначенийДоступа.Attribute.Уточнение + + View + false + + + Edit + false + + + + InformationRegister.НастройкиВариантовОтчетов.Dimension.Пользователь + + View + false + + + Edit + false + + + + InformationRegister.КалендарныеГрафики.Dimension.Календарь + + View + false + + + Edit + false + + + + Catalog.ШаблоныЗаданийОчереди.Attribute.ИмяМетода + + View + false + + + Edit + false + + + + InformationRegister.УдалитьОчередьЗаданий.Resource.Использование + + View + false + + + Edit + false + + + + Catalog.ДополнительныеОтчетыИОбработки.Attribute.ИмяОбъекта + + View + false + + + Edit + false + + + + Catalog.ВерсииФайлов.Attribute.ФайлХранилище + + View + false + + + Edit + false + + + diff --git a/SSL/src/Roles/ИспользованиеДосьеКонтрагента/ИспользованиеДосьеКонтрагента.mdo b/SSL/src/Roles/ИспользованиеДосьеКонтрагента/ИспользованиеДосьеКонтрагента.mdo new file mode 100644 index 000000000..4ee9b2e1e --- /dev/null +++ b/SSL/src/Roles/ИспользованиеДосьеКонтрагента/ИспользованиеДосьеКонтрагента.mdo @@ -0,0 +1,8 @@ + + + ИспользованиеДосьеКонтрагента + + ru + Использование "Досье контрагента" + + diff --git a/SSL/src/Roles/ИспользованиеУчетныхЗаписейЭлектроннойПочты/Rights.rights b/SSL/src/Roles/ИспользованиеУчетныхЗаписейЭлектроннойПочты/Rights.rights index b17da5404..300fd397f 100644 --- a/SSL/src/Roles/ИспользованиеУчетныхЗаписейЭлектроннойПочты/Rights.rights +++ b/SSL/src/Roles/ИспользованиеУчетныхЗаписейЭлектроннойПочты/Rights.rights @@ -4,7 +4,7 @@ true false - Catalog.УчетныеЗаписиЭлектроннойПочты.Attribute.Пароль + Catalog.УчетныеЗаписиЭлектроннойПочты.Attribute.УдалитьПароль Edit false @@ -18,7 +18,7 @@ - Catalog.УчетныеЗаписиЭлектроннойПочты.Attribute.ПарольSMTP + Catalog.УчетныеЗаписиЭлектроннойПочты.Attribute.УдалитьПарольSMTP Edit false @@ -205,13 +205,6 @@ false - - CommonForm.ПодтверждениеПароляУчетнойЗаписи - - View - true - - CommonForm.ОтправкаСообщения diff --git a/SSL/src/Roles/ИспользованиеЭП/Rights.rights b/SSL/src/Roles/ИспользованиеЭлектроннойПодписиИШифрования/Rights.rights similarity index 100% rename from SSL/src/Roles/ИспользованиеЭП/Rights.rights rename to SSL/src/Roles/ИспользованиеЭлектроннойПодписиИШифрования/Rights.rights diff --git a/SSL/src/Roles/ИспользованиеЭП/ИспользованиеЭП.mdo b/SSL/src/Roles/ИспользованиеЭлектроннойПодписиИШифрования/ИспользованиеЭлектроннойПодписиИШифрования.mdo similarity index 76% rename from SSL/src/Roles/ИспользованиеЭП/ИспользованиеЭП.mdo rename to SSL/src/Roles/ИспользованиеЭлектроннойПодписиИШифрования/ИспользованиеЭлектроннойПодписиИШифрования.mdo index c4ae16d6a..61f114548 100644 --- a/SSL/src/Roles/ИспользованиеЭП/ИспользованиеЭП.mdo +++ b/SSL/src/Roles/ИспользованиеЭлектроннойПодписиИШифрования/ИспользованиеЭлектроннойПодписиИШифрования.mdo @@ -1,6 +1,6 @@ - ИспользованиеЭП + ИспользованиеЭлектроннойПодписиИШифрования ru Использование электронной подписи и шифрования diff --git a/SSL/src/Roles/НастройкаИОценкаПроизводительности/Rights.rights b/SSL/src/Roles/НастройкаИОценкаПроизводительности/Rights.rights index d557125f3..bc3d43cd0 100644 --- a/SSL/src/Roles/НастройкаИОценкаПроизводительности/Rights.rights +++ b/SSL/src/Roles/НастройкаИОценкаПроизводительности/Rights.rights @@ -79,6 +79,25 @@ true + + Constant.ОценкаПроизводительностиПериодЗаписи + + Read + true + + + Update + true + + + View + true + + + Edit + true + + Subsystem.СтандартныеПодсистемы.Subsystem.ОценкаПроизводительности @@ -86,4 +105,41 @@ true + + InformationRegister.ЗамерыВремени + + Read + true + + + View + true + + + + Constant.ОценкаПроизводительностиЭкспортВсехКлючевыхОпераций + + Read + true + + + Update + true + + + View + true + + + Edit + true + + + + DataProcessor.ОценкаПроизводительности.Command.НастройкиОценкиПроизводительности + + View + true + + diff --git a/SSL/src/Roles/НастройкаСинхронизацииДанных/Rights.rights b/SSL/src/Roles/НастройкаСинхронизацииДанных/Rights.rights index e5e64f4d4..e0643fa8e 100644 --- a/SSL/src/Roles/НастройкаСинхронизацииДанных/Rights.rights +++ b/SSL/src/Roles/НастройкаСинхронизацииДанных/Rights.rights @@ -25,7 +25,7 @@ - CommonCommand.ПолучитьНастройкиОбменаДаннымиДляВторойИнформационнойБазы + CommonCommand.ПолучитьНастройкиСинхронизацииДляДругойПрограммы View true @@ -92,7 +92,7 @@ - CommonCommand.ОткрытьСценарииОбменовДанными + CommonCommand.СценарииСинхронизации View true @@ -131,14 +131,14 @@ - CommonCommand.ОткрытьОбменыДанными + CommonCommand.СинхронизацияДанных View true - CommonCommand.ВыполнитьОбменДаннымиИнтерактивно + CommonCommand.СинхронизироватьСДополнительнымиПараметрами View true @@ -216,7 +216,7 @@ - CommonCommand.ВыполнитьОбменДанными + CommonCommand.Синхронизировать View true @@ -243,6 +243,20 @@ true + + WebService.EnterpriseDataUpload_1_0_1_1.Operation.PutData + + Use + true + + + + WebService.EnterpriseDataExchange_1_0_1_1.Operation.GetDataPart + + Use + true + + WebService.Exchange_2_0_1_6.Operation.SaveFileFromParts @@ -262,7 +276,7 @@ - CommonCommand.ПерейтиВЖурналРегистрацииСобытийВыгрузкиДанных + CommonCommand.СобытияОтправки View true @@ -282,6 +296,20 @@ true + + WebService.EnterpriseDataUpload_1_0_1_1.Operation.TestConnection + + Use + true + + + + WebService.EnterpriseDataExchange_1_0_1_1.Operation.ConfirmGettingFile + + Use + true + + WebService.Exchange.Operation.UpdateExchange @@ -350,6 +378,13 @@ true + + WebService.EnterpriseDataUpload_1_0_1_1.Operation.PutDataActionResult + + Use + true + + CommonForm.ВыборОбъектовИнформационнойБазыКорреспондента @@ -401,6 +436,13 @@ true + + WebService.EnterpriseDataUpload_1_0_1_1.Operation.Ping + + Use + true + + WebService.Exchange_2_0_1_6.Operation.UploadData @@ -453,6 +495,13 @@ true + + WebService.EnterpriseDataUpload_1_0_1_1.Operation.PutFilePart + + Use + true + + InformationRegister.РезультатыОбменаДанными @@ -473,7 +522,14 @@ - CommonForm.ОбменыДанными + WebService.EnterpriseDataExchange_1_0_1_1.Operation.TestConnection + + Use + true + + + + CommonForm.СинхронизацияДанных View true @@ -487,12 +543,19 @@ - CommonCommand.ОткрытьПравилаКонвертацииОбъектов + CommonCommand.ЗагрузитьПравилаКонвертацииОбъектов View true + + WebService.EnterpriseDataExchange_1_0_1_1.Operation.PrepareDataForGetting + + Use + true + + WebService.Exchange.Operation.GetIBParameters @@ -536,6 +599,13 @@ true + + WebService.EnterpriseDataExchange_1_0_1_1.Operation.PutDataActionResult + + Use + true + + WebService.Exchange_2_0_1_6.Operation.UpdateExchange @@ -543,6 +613,13 @@ true + + WebService.EnterpriseDataExchange_1_0_1_1.Operation.PrepareDataActionResult + + Use + true + + WebService.Exchange_2_0_1_6.Operation.GetIBData @@ -558,7 +635,7 @@ - CommonCommand.ОткрытьРезультатыОбменаДанными + CommonCommand.ПредупрежденияПриСинхронизацииДанных View true @@ -579,12 +656,33 @@ - CommonCommand.ОткрытьПравилаРегистрацииОбъектов + WebService.EnterpriseDataExchange_1_0_1_1.Operation.Ping + + Use + true + + + + WebService.EnterpriseDataExchange_1_0_1_1.Operation.PutData + + Use + true + + + + CommonCommand.ЗагрузитьПравилаРегистрацииОбъектов View true + + WebService.EnterpriseDataExchange_1_0_1_1.Operation.PutFilePart + + Use + true + + WebService.Exchange_2_0_1_6.Operation.GetCommonNodsData @@ -607,7 +705,7 @@ - CommonCommand.ПерейтиВЖурналРегистрацииСобытийЗагрузкиДанных + CommonCommand.СобытияПолучения View true diff --git a/SSL/src/Roles/ОтправкаSMS/Rights.rights b/SSL/src/Roles/ОтправкаSMS/Rights.rights new file mode 100644 index 000000000..d6329468c --- /dev/null +++ b/SSL/src/Roles/ОтправкаSMS/Rights.rights @@ -0,0 +1,13 @@ + + + false + true + false + + CommonForm.ОтправкаSMS + + View + true + + + diff --git a/SSL/src/Roles/ОтправкаSMS/ОтправкаSMS.mdo b/SSL/src/Roles/ОтправкаSMS/ОтправкаSMS.mdo new file mode 100644 index 000000000..8fccb4de8 --- /dev/null +++ b/SSL/src/Roles/ОтправкаSMS/ОтправкаSMS.mdo @@ -0,0 +1,8 @@ + + + ОтправкаSMS + + ru + Отправка SMS + + diff --git a/SSL/src/Roles/ПодготовкаСогласияНаОбработкуПерсональныхДанных/Rights.rights b/SSL/src/Roles/ПодготовкаСогласияНаОбработкуПерсональныхДанных/Rights.rights deleted file mode 100644 index b871d49cb..000000000 --- a/SSL/src/Roles/ПодготовкаСогласияНаОбработкуПерсональныхДанных/Rights.rights +++ /dev/null @@ -1,311 +0,0 @@ - - - false - true - false - - Subsystem.СтандартныеПодсистемы - - View - true - - - - Subsystem.СтандартныеПодсистемы.Subsystem.БизнесПроцессыИЗадачи - - View - true - - - - Subsystem.СтандартныеПодсистемы.Subsystem.УправлениеДоступом - - View - true - - - - DataProcessor.СогласиеНаОбработкуПерсональныхДанных.Command.СогласиеНаОбработкуПерсональныхДанных - - View - true - - - - Subsystem.СтандартныеПодсистемы.Subsystem.ЗавершениеРаботыПользователей - - View - true - - - - Subsystem.СтандартныеПодсистемы.Subsystem.РаботаСФайлами - - View - true - - - - Subsystem.СтандартныеПодсистемы.Subsystem.ПолнотекстовыйПоиск - - View - true - - - - Subsystem.СтандартныеПодсистемы.Subsystem.ОбновлениеКонфигурации - - View - true - - - - Subsystem.СтандартныеПодсистемы.Subsystem.Валюты - - View - true - - - - Subsystem.СтандартныеПодсистемы.Subsystem.Свойства - - View - true - - - - Subsystem.СтандартныеПодсистемы.Subsystem.РегламентныеЗадания - - View - true - - - - Subsystem.СтандартныеПодсистемы.Subsystem.УправлениеИтогамиИАгрегатами - - View - true - - - - Subsystem.СтандартныеПодсистемы.Subsystem.ВариантыОтчетов - - View - true - - - - Subsystem.СтандартныеПодсистемы.Subsystem.КалендарныеГрафики - - View - true - - - - Subsystem.СтандартныеПодсистемы.Subsystem.ФайловыеФункции - - View - true - - - - Subsystem.СтандартныеПодсистемы.Subsystem.Анкетирование - - View - true - - - - Subsystem.СтандартныеПодсистемы.Subsystem.АнализЖурналаРегистрации - - View - true - - - - Subsystem.СтандартныеПодсистемы.Subsystem.ОбменДанными - - View - true - - - - Subsystem.СтандартныеПодсистемы.Subsystem.ПрефиксацияОбъектов - - View - true - - - - Subsystem.СтандартныеПодсистемы.Subsystem.ОценкаПроизводительности - - View - true - - - - Subsystem.СтандартныеПодсистемы.Subsystem.Печать - - View - true - - - - DataProcessor.СогласиеНаОбработкуПерсональныхДанных - - Use - true - - - View - true - - - - Subsystem.СтандартныеПодсистемы.Subsystem.ДополнительныеОтчетыИОбработки - - View - true - - - - Subsystem.СтандартныеПодсистемы.Subsystem.ВерсионированиеОбъектов - - View - true - - - - Subsystem.СтандартныеПодсистемы.Subsystem.ЭлектроннаяПодпись - - View - true - - - - Subsystem.СтандартныеПодсистемы.Subsystem.КонтактнаяИнформация - - View - true - - - - Subsystem.СтандартныеПодсистемы.Subsystem.ДатыЗапретаИзменения - - View - true - - - - Subsystem.СтандартныеПодсистемы.Subsystem.АдресныйКлассификатор - - View - true - - - - Subsystem.СтандартныеПодсистемы.Subsystem.ПрисоединенныеФайлы - - View - true - - - - Subsystem.СтандартныеПодсистемы.Subsystem.ГрупповоеИзменениеОбъектов - - View - true - - - - Subsystem.СтандартныеПодсистемы.Subsystem.Организации - - View - true - - - - Subsystem.СтандартныеПодсистемы.Subsystem.Пользователи - - View - true - - - - Subsystem.СтандартныеПодсистемы.Subsystem.РаботаСПочтовымиСообщениями - - View - true - - - - Subsystem.СтандартныеПодсистемы.Subsystem.БазоваяФункциональность - - View - true - - - - Subsystem.СтандартныеПодсистемы.Subsystem.ЗащитаПерсональныхДанных - - View - true - - - - Subsystem.СтандартныеПодсистемы.Subsystem.ПолучениеФайловИзИнтернета - - View - true - - - - Subsystem.СтандартныеПодсистемы.Subsystem.СтруктураПодчиненности - - View - true - - - - Subsystem.СтандартныеПодсистемы.Subsystem.НастройкаПорядкаЭлементов - - View - true - - - - Subsystem.СтандартныеПодсистемы.Subsystem.РезервноеКопированиеИБ - - View - true - - - - Subsystem.СтандартныеПодсистемы.Subsystem.ЗапретРедактированияРеквизитовОбъектов - - View - true - - - - Subsystem.СтандартныеПодсистемы.Subsystem.ПроверкаЛегальностиПолученияОбновления - - View - true - - - - Subsystem.СтандартныеПодсистемы.Subsystem.ОбновлениеВерсииИБ - - View - true - - - - Subsystem.СтандартныеПодсистемы.Subsystem.Взаимодействия - - View - true - - - diff --git a/SSL/src/Roles/ПодготовкаСогласияНаОбработкуПерсональныхДанных/ПодготовкаСогласияНаОбработкуПерсональныхДанных.mdo b/SSL/src/Roles/ПодготовкаСогласияНаОбработкуПерсональныхДанных/ПодготовкаСогласияНаОбработкуПерсональныхДанных.mdo deleted file mode 100644 index a00737ad1..000000000 --- a/SSL/src/Roles/ПодготовкаСогласияНаОбработкуПерсональныхДанных/ПодготовкаСогласияНаОбработкуПерсональныхДанных.mdo +++ /dev/null @@ -1,8 +0,0 @@ - - - ПодготовкаСогласияНаОбработкуПерсональныхДанных - - ru - Подготовка согласия на обработку персональных данных - - diff --git a/SSL/src/Roles/ПолныеПрава/Rights.rights b/SSL/src/Roles/ПолныеПрава/Rights.rights index 030f36c24..a5b0ad116 100644 --- a/SSL/src/Roles/ПолныеПрава/Rights.rights +++ b/SSL/src/Roles/ПолныеПрава/Rights.rights @@ -3,6 +3,13 @@ true true false + + InformationRegister.ОбластиСтатистики.Dimension.ИдентификаторОбласти + + Edit + false + + DataProcessor.НастройкаРезервногоКопированияИБ.Attribute.ВариантРасписанияРезервногоКопирования @@ -36,6 +43,17 @@ false + + InformationRegister.ЗамерыВремени.Dimension.ДатаНачалаЗамера + + View + false + + + Edit + false + + Catalog.ЭлектронноеПисьмоВходящееПрисоединенныеФайлы @@ -76,6 +94,10 @@ Edit false + + TotalsControl + false + InformationRegister.ПоставляемыеДанныеТребующиеОбработки.StandardAttribute.Active @@ -105,6 +127,13 @@ false + + InformationRegister.ЗамерыОбластиСтатистики.Dimension.ИдентификаторУдаления + + Edit + false + + Catalog.ШаблоныАнкет @@ -193,6 +222,28 @@ false + + InformationRegister.ЗамерыВремени.Resource.ВремяВыполнения + + View + false + + + Edit + false + + + + InformationRegister.ЗамерыВремени.Attribute.ДатаОкончания + + View + false + + + Edit + false + + Constant.КопироватьОбластиДанныхИзЭталонной @@ -382,6 +433,10 @@ Edit false + + TotalsControl + false + InformationRegister.НастройкиТранспортаОбмена.Resource.FILEСжиматьФайлИсходящегоСообщения @@ -401,6 +456,49 @@ false + + InformationRegister.ЗамерыКомментарииСтатистики + + Update + false + + + Edit + false + + + TotalsControl + false + + + + InformationRegister.ЗамерыКомментарииСтатистики.StandardAttribute.Active + + Edit + false + + + + InformationRegister.ЗамерыКомментарииСтатистики.StandardAttribute.LineNumber + + Edit + false + + + + InformationRegister.ЗамерыКомментарииСтатистики.StandardAttribute.Recorder + + Edit + false + + + + InformationRegister.ЗамерыКомментарииСтатистики.StandardAttribute.Period + + Edit + false + + ExchangePlan.ОбменСообщениями @@ -561,6 +659,49 @@ false + + InformationRegister.СтатистикаКонфигурации + + Update + false + + + Edit + false + + + TotalsControl + false + + + + InformationRegister.СтатистикаКонфигурации.StandardAttribute.Active + + Edit + false + + + + InformationRegister.СтатистикаКонфигурации.StandardAttribute.LineNumber + + Edit + false + + + + InformationRegister.СтатистикаКонфигурации.StandardAttribute.Recorder + + Edit + false + + + + InformationRegister.СтатистикаКонфигурации.StandardAttribute.Period + + Edit + false + + ChartOfCharacteristicTypes.РазделыДатЗапретаИзменения @@ -764,41 +905,6 @@ false - - Configuration.БиблиотекаСтандартныхПодсистем - - Administration - false - - - UpdateDataBaseConfiguration - false - - - ThickClient - false - - - ExternalConnection - false - - - Automation - false - - - TechnicalSpecialistMode - false - - - InteractiveOpenExtDataProcessors - false - - - InteractiveOpenExtReports - false - - Constant.НастройкаПроксиСервера @@ -817,6 +923,13 @@ false + + InformationRegister.ЗамерыОбластиСтатистики.Dimension.ОперацияСтатистики + + Edit + false + + InformationRegister.ПраваРолей.Dimension.Роль @@ -859,7 +972,7 @@ - InformationRegister.НастройкиТранспортаОбмена.Resource.COMПарольПользователя + InformationRegister.НастройкиТранспортаОбмена.Resource.УдалитьCOMПарольПользователя Edit false @@ -882,6 +995,21 @@ Edit false + + TotalsControl + false + + + + InformationRegister.ЗамерыВремениТехнологические.Dimension.НомерСеанса + + View + false + + + Edit + false + InformationRegister.ПодпискиПолучателей @@ -901,6 +1029,10 @@ Edit false + + TotalsControl + false + ReadDataHistory false @@ -978,6 +1110,13 @@ false + + InformationRegister.БуферОперацийСтатистики.Dimension.ДатаЗаписи + + Edit + false + + Catalog.СообщенияСистемы.Attribute.КоличествоПопытокОбработкиСообщения @@ -1012,6 +1151,45 @@ false + + Configuration.БиблиотекаСтандартныхПодсистем + + Administration + false + + + UpdateDataBaseConfiguration + false + + + ThickClient + false + + + ExternalConnection + false + + + Automation + false + + + TechnicalSpecialistMode + false + + + ConfigurationExtensionsAdministration + false + + + InteractiveOpenExtDataProcessors + false + + + InteractiveOpenExtReports + false + + InformationRegister.УдалитьЗамерыВремени.Attribute.ИмяПользователя @@ -1063,6 +1241,10 @@ Edit false + + TotalsControl + false + InformationRegister.ЗависимостиПравДоступа.StandardAttribute.Active @@ -1103,6 +1285,13 @@ false + + InformationRegister.ЗамерыОбластиСтатистики.Dimension.ОбластьСтатистики + + Edit + false + + Catalog.СообщенияСистемы.Attribute.Получатель @@ -1114,6 +1303,13 @@ false + + InformationRegister.КомментарииСтатистики.Resource.Наименование + + Edit + false + + Constant.ИспользоватьСинхронизациюДанныхВЛокальномРежиме @@ -1170,10 +1366,6 @@ Constant.ВыполнятьЗамерыПроизводительности - - Read - false - Update false @@ -1186,18 +1378,6 @@ Edit false - - ReadDataHistory - false - - - UpdateDataHistory - false - - - UpdateDataHistoryVersionComment - false - ViewDataHistory false @@ -1223,7 +1403,14 @@ - InformationRegister.НастройкиТранспортаОбмена.Resource.WSПароль + InformationRegister.НастройкиТранспортаОбмена.Resource.УдалитьWSПароль + + Edit + false + + + + InformationRegister.БуферОперацийСтатистики.Resource.ОперацияСтатистики Edit false @@ -1292,6 +1479,13 @@ false + + InformationRegister.БуферОперацийСтатистики.Resource.ОбластьСтатистики + + Edit + false + + DataProcessor.РезервноеКопированиеИБ.Attribute.КаталогСРезервнымиКопиями @@ -1303,6 +1497,13 @@ false + + InformationRegister.ЗамерыОперацииСтатистики.Resource.СуммаЗначений + + Edit + false + + InformationRegister.УдалитьАдресныйКлассификатор.Dimension.ТипАдресногоЭлемента @@ -1310,6 +1511,123 @@ false + + InformationRegister.ЗамерыВремениТехнологические.Dimension.КлючеваяОперация + + View + false + + + Edit + false + + + + InformationRegister.БуферОперацийСтатистики.Dimension.ИдентификаторУдаления + + Edit + false + + + + InformationRegister.ЗамерыВремениТехнологические + + Read + false + + + Update + false + + + View + false + + + Edit + false + + + TotalsControl + false + + + ReadDataHistory + false + + + ReadDataHistoryOfMissingData + false + + + UpdateDataHistory + false + + + UpdateDataHistoryOfMissingData + false + + + UpdateDataHistoryVersionComment + false + + + ViewDataHistory + false + + + EditDataHistoryVersionComment + false + + + SwitchToDataHistoryVersion + false + + + + InformationRegister.ЗамерыВремениТехнологические.StandardAttribute.Active + + View + false + + + Edit + false + + + + InformationRegister.ЗамерыВремениТехнологические.StandardAttribute.LineNumber + + View + false + + + Edit + false + + + + InformationRegister.ЗамерыВремениТехнологические.StandardAttribute.Recorder + + View + false + + + Edit + false + + + + InformationRegister.ЗамерыВремениТехнологические.StandardAttribute.Period + + View + false + + + Edit + false + + DataProcessor.НастройкаРезервногоКопированияИБ.Attribute.ПроводитьРезервноеКопированиеПриВосстановленииДанных @@ -1348,6 +1666,21 @@ false + + InformationRegister.РейтингАктивностиОбластейДанных + + Update + false + + + Edit + false + + + TotalsControl + false + + InformationRegister.РазрешенияНаИспользованиеВнешнихРесурсов @@ -1414,13 +1747,6 @@ false - - CommonCommand.СведенияОПользователе - - View - false - - ExchangePlan.ОбменСообщениями.Attribute.Ведущая @@ -1432,6 +1758,13 @@ false + + InformationRegister.БуферОперацийСтатистики.Resource.КомментарийСтатистики + + Edit + false + + InformationRegister.УдалитьЗамерыВремени.Resource.ВремяНачалаПроверка @@ -1597,6 +1930,17 @@ false + + InformationRegister.ЗамерыВремени.Dimension.НомерСеанса + + View + false + + + Edit + false + + CommonCommand.НастройкиПроверкиКонтрагентов @@ -1614,6 +1958,10 @@ Edit false + + TotalsControl + false + InformationRegister.ОбластиТребующиеОбработкиПоставляемыхДанных.StandardAttribute.Active @@ -1736,6 +2084,13 @@ false + + InformationRegister.ОбластиСтатистики.Dimension.СобиратьСтатистикуКонфигурации + + Edit + false + + InformationRegister.ПравилаДляОбменаДанными.Resource.ИмяПланаОбменаИзПравил @@ -1765,6 +2120,36 @@ false + + Catalog.ПредопределенныеВариантыОтчетовРасширений + + InteractiveDelete + false + + + InteractiveDeletePredefinedData + false + + + InteractiveSetDeletionMarkPredefinedData + false + + + InteractiveClearDeletionMarkPredefinedData + false + + + InteractiveDeleteMarkedPredefinedData + false + + + + InformationRegister.ЗамерыОперацииСтатистики.Dimension.ОперацияСтатистики + + Edit + false + + InformationRegister.СостоянияОбменовДанными.Dimension.ДействиеПриОбмене @@ -1973,6 +2358,17 @@ false + + Constant.ДатаПоследнегоСтартаКлиентскогоСеанса + + Update + false + + + Edit + false + + Catalog.ИдентификаторыОбъектовМетаданных @@ -2105,6 +2501,10 @@ Edit false + + TotalsControl + false + InformationRegister.УдалитьАдресныйКлассификатор.StandardAttribute.Active @@ -2141,6 +2541,13 @@ false + + InformationRegister.КомментарииСтатистики.Dimension.ИдентификаторКомментария + + Edit + false + + Constant.КаталогОбменаФайламиВМоделиСервиса @@ -2184,6 +2591,13 @@ false + + InformationRegister.БуферОперацийСтатистики.Resource.Значение + + Edit + false + + Document.ТелефонныйЗвонок @@ -2221,6 +2635,13 @@ false + + InformationRegister.ДампыПлатформы.Dimension.ДатаРегистрации + + Edit + false + + DataProcessor.ОценкаПроизводительности.TabularSection.Производительность.Attribute.КлючеваяОперация @@ -2242,6 +2663,10 @@ Edit false + + TotalsControl + false + CommonForm.ВходВОбластьДанных @@ -2260,6 +2685,10 @@ Edit false + + TotalsControl + false + InformationRegister.ДанныеПроизводственногоКалендаря.StandardAttribute.Active @@ -2289,6 +2718,47 @@ false + + InformationRegister.ЗамерыВремениТехнологические.Attribute.ДатаОкончания + + View + false + + + Edit + false + + + + InformationRegister.ЗамерыОперацииСтатистики.Dimension.ИдентификаторУдаления + + Edit + false + + + + Catalog.ВерсииРасширений + + InteractiveDelete + false + + + InteractiveDeletePredefinedData + false + + + InteractiveSetDeletionMarkPredefinedData + false + + + InteractiveClearDeletionMarkPredefinedData + false + + + InteractiveDeleteMarkedPredefinedData + false + + InformationRegister.НастройкиТранспортаОбмена.Resource.ВидТранспортаСообщенийОбменаПоУмолчанию @@ -2296,6 +2766,13 @@ false + + InformationRegister.ЗамерыОбластиСтатистики.Resource.КоличествоЗначений + + Edit + false + + InformationRegister.ПраваРолей.Resource.Редактирование @@ -2335,6 +2812,10 @@ Edit false + + TotalsControl + false + ReadDataHistory false @@ -2413,7 +2894,7 @@ - Constant.ПарольСлужебногоПользователяМенеджераСервиса + Constant.УдалитьПарольСлужебногоПользователяМенеджераСервиса Read false @@ -2455,6 +2936,24 @@ false + + InformationRegister.ЗамерыВремениТехнологические.Resource.ВремяВыполнения + + View + false + + + Edit + false + + + + InformationRegister.ЗамерыКомментарииСтатистики.Resource.КоличествоЗначений + + Edit + false + + Constant.СписокРасширенийТекстовыхФайлов @@ -2498,6 +2997,13 @@ false + + InformationRegister.КомментарииСтатистики.Dimension.ХешНаименования + + Edit + false + + InformationRegister.УдалитьЗамерыВремени.Resource.ВремяНачала @@ -2544,6 +3050,10 @@ Edit false + + TotalsControl + false + InformationRegister.ПраваРолей.StandardAttribute.Active @@ -2763,6 +3273,13 @@ false + + InformationRegister.ПакетыДляОтправки.Dimension.НомерПакета + + Edit + false + + InformationRegister.НастройкиТранспортаОбмена.Resource.EMAILМаксимальныйДопустимыйРазмерСообщения @@ -2941,6 +3458,17 @@ false + + InformationRegister.ЗамерыВремени.Resource.Комментарий + + View + false + + + Edit + false + + InformationRegister.НастройкиОтправителя @@ -2959,6 +3487,10 @@ Edit false + + TotalsControl + false + ReadDataHistory false @@ -3046,6 +3578,10 @@ Edit false + + TotalsControl + false + Catalog.ПользовательскиеНастройкиОтчетов @@ -3127,6 +3663,21 @@ false + + InformationRegister.ОбластиДанных + + Update + false + + + Edit + false + + + TotalsControl + false + + Catalog.ИдентификаторыОбъектовМетаданных.Attribute.БезДанных @@ -3152,6 +3703,10 @@ Edit false + + TotalsControl + false + ReadDataHistory false @@ -3257,6 +3812,13 @@ false + + InformationRegister.ОбластиСтатистики.Dimension.ХешНаименования + + Edit + false + + DataProcessor.ОценкаПроизводительности.Attribute.Шаг @@ -3381,6 +3943,28 @@ false + + InformationRegister.ОперацииСтатистики.Resource.Наименование + + Edit + false + + + + InformationRegister.ОчередьИзвлеченияТекста + + Update + false + + + Edit + false + + + TotalsControl + false + + Catalog.УчетныеЗаписиЭлектроннойПочты @@ -3465,6 +4049,17 @@ false + + InformationRegister.ЗамерыВремени.Attribute.ДатаЗаписи + + View + false + + + Edit + false + + DataProcessor.РезервноеКопированиеИБ.Attribute.ПроводитьРезервноеКопированиеПриВосстановленииДанных @@ -3476,6 +4071,17 @@ false + + InformationRegister.ЗамерыВремени.Attribute.Пользователь + + View + false + + + Edit + false + + InformationRegister.НастройкиТранспортаОбмена.Resource.COMКаталогИнформационнойБазы @@ -3556,6 +4162,20 @@ false + + InformationRegister.ОперацииСтатистики.Dimension.ИдентификаторОперации + + Edit + false + + + + InformationRegister.СтатистикаКонфигурации.Dimension.ОперацияСтатистики + + Edit + false + + InformationRegister.УдалитьОчередьЗаданий.Resource.ИсполняющееФоновоеЗадание @@ -3650,6 +4270,10 @@ Edit false + + TotalsControl + false + ReadDataHistory false @@ -3800,6 +4424,49 @@ false + + InformationRegister.ЗамерыОбластиСтатистики + + Update + false + + + Edit + false + + + TotalsControl + false + + + + InformationRegister.ЗамерыОбластиСтатистики.StandardAttribute.Active + + Edit + false + + + + InformationRegister.ЗамерыОбластиСтатистики.StandardAttribute.LineNumber + + Edit + false + + + + InformationRegister.ЗамерыОбластиСтатистики.StandardAttribute.Recorder + + Edit + false + + + + InformationRegister.ЗамерыОбластиСтатистики.StandardAttribute.Period + + Edit + false + + Catalog.СообщенияСистемы.Attribute.Заблокировано @@ -3821,6 +4488,10 @@ Edit false + + TotalsControl + false + InformationRegister.ОриентирыАдресныхОбъектов @@ -3832,6 +4503,10 @@ Edit false + + TotalsControl + false + Document.Анкета @@ -4048,6 +4723,13 @@ false + + InformationRegister.ЗамерыОбластиСтатистики.Dimension.ПериодОкончание + + Edit + false + + Catalog.СтраныМира @@ -4071,6 +4753,13 @@ false + + InformationRegister.КомментарииОперацииСтатистики.Dimension.ИдентификаторКомментария + + Edit + false + + Catalog.СообщенияСистемы.Attribute.ПодробноеПредставлениеОшибки @@ -4100,6 +4789,13 @@ false + + Document.ОтзывСогласияНаОбработкуПерсональныхДанных + + InteractiveDelete + false + + DataProcessor.НастройкаРезервногоКопированияИБ.Attribute.КаталогСРезервнымиКопиями @@ -4134,6 +4830,20 @@ false + + InformationRegister.ЗамерыКомментарииСтатистики.Dimension.КомментарийСтатистики + + Edit + false + + + + InformationRegister.ОперацииСтатистики.Dimension.ХешНаименования + + Edit + false + + Constant.МаксимальноеКоличествоИсполняющихФоновыхЗаданий @@ -4152,6 +4862,13 @@ false + + InformationRegister.ЗамерыКомментарииСтатистики.Dimension.ПериодОкончание + + Edit + false + + InformationRegister.ЗависимостиПравДоступа.Dimension.ПодчиненнаяТаблица @@ -4177,6 +4894,10 @@ Edit false + + TotalsControl + false + ReadDataHistory false @@ -4210,6 +4931,17 @@ false + + InformationRegister.ЗамерыВремениТехнологические.Dimension.ДатаНачалаЗамера + + View + false + + + Edit + false + + InformationRegister.ПраваРолей.Resource.Добавление @@ -4247,6 +4979,17 @@ false + + Constant.ПрефиксОбластиДанных + + Update + false + + + Edit + false + + InformationRegister.СостоянияОбменовДанными.Resource.ДатаОкончания @@ -4277,6 +5020,13 @@ false + + InformationRegister.СтатистикаКонфигурации.Resource.Значение + + Edit + false + + InformationRegister.ПакетыИнформацииПриЗапуске.Dimension.Номер @@ -4388,6 +5138,17 @@ false + + Constant.ЧасовойПоясОбластиДанных + + Update + false + + + Edit + false + + Catalog.ПапкиФайлов @@ -4445,6 +5206,17 @@ false + + InformationRegister.ЗамерыВремениТехнологические.Resource.Комментарий + + View + false + + + Edit + false + + InformationRegister.УдалитьЗамерыВремени.Dimension.УникальныйИдентификатор @@ -4463,6 +5235,13 @@ false + + InformationRegister.ЗамерыКомментарииСтатистики.Dimension.ОперацияСтатистики + + Edit + false + + DataProcessor.РезервноеКопированиеИБ @@ -4496,6 +5275,13 @@ false + + InformationRegister.СтатистикаКонфигурации.Dimension.ИдентификаторОбластиСтатистики + + Edit + false + + Constant.КаталогСообщенийОбменаДаннымиДляWindows @@ -4625,6 +5411,10 @@ Edit false + + TotalsControl + false + ReadDataHistory false @@ -4931,6 +5721,17 @@ false + + InformationRegister.ЗамерыВремениТехнологические.Attribute.Пользователь + + View + false + + + Edit + false + + Constant.ИспользуютсяПрофилиБезопасности @@ -4953,6 +5754,20 @@ false + + InformationRegister.ОперацииСтатистики.Attribute.КоличествоУникальныхКомментариев + + Edit + false + + + + InformationRegister.ПакетыДляОтправки.Attribute.ХешПакета + + Edit + false + + Constant.БлокировкаОтправкиБыстрыхСообщений @@ -5010,6 +5825,13 @@ false + + InformationRegister.ОбластиСтатистики.Resource.Наименование + + Edit + false + + Catalog.ЗначенияСвойствОбъектовИерархия @@ -5058,6 +5880,13 @@ false + + InformationRegister.ЗамерыОперацииСтатистики.Resource.КоличествоЗначений + + Edit + false + + Catalog.ПрограммыЭлектроннойПодписиИШифрования @@ -5082,7 +5911,37 @@ - Constant.ИмяСлужебногоПользователяМенеджераСервиса + Catalog.ИдентификаторыОбъектовРасширений + + InteractiveDelete + false + + + InteractiveDeletePredefinedData + false + + + InteractiveSetDeletionMarkPredefinedData + false + + + InteractiveClearDeletionMarkPredefinedData + false + + + InteractiveDeleteMarkedPredefinedData + false + + + + InformationRegister.БезопасноеХранилищеДанных.Dimension.Владелец + + Edit + false + + + + Constant.УдалитьИмяСлужебногоПользователяМенеджераСервиса Read false @@ -5364,45 +6223,56 @@ - Constant.НастройкаПодчиненногоУзлаРИБЗавершена - - Read - false - + InformationRegister.ОбластиСтатистики Update false - - View - false - Edit false - ReadDataHistory + TotalsControl + false + + + + InformationRegister.ОбластиСтатистики.StandardAttribute.Active + + Edit + false + + + + InformationRegister.ОбластиСтатистики.StandardAttribute.LineNumber + + Edit + false + + + + InformationRegister.ОбластиСтатистики.StandardAttribute.Recorder + + Edit + false + + + + InformationRegister.ОбластиСтатистики.StandardAttribute.Period + + Edit + false + + + + Constant.НастройкаПодчиненногоУзлаРИБЗавершена + + Update false - UpdateDataHistory - false - - - UpdateDataHistoryVersionComment - false - - - ViewDataHistory - false - - - EditDataHistoryVersionComment - false - - - SwitchToDataHistoryVersion + Edit false @@ -5522,7 +6392,7 @@ - InformationRegister.НастройкиТранспортаОбмена.Resource.ПарольАрхиваСообщенияОбмена + InformationRegister.НастройкиТранспортаОбмена.Resource.УдалитьПарольАрхиваСообщенияОбмена Edit false @@ -5686,6 +6556,10 @@ Edit false + + TotalsControl + false + InformationRegister.УдалитьЗамерыВремени @@ -5697,6 +6571,10 @@ Edit false + + TotalsControl + false + InformationRegister.УдалитьЗамерыВремени.StandardAttribute.Active @@ -5837,10 +6715,105 @@ InformationRegister.ЗамерыВремени + + Read + false + Update false + + View + false + + + Edit + false + + + TotalsControl + false + + + ReadDataHistory + false + + + ReadDataHistoryOfMissingData + false + + + UpdateDataHistory + false + + + UpdateDataHistoryOfMissingData + false + + + UpdateDataHistoryVersionComment + false + + + ViewDataHistory + false + + + EditDataHistoryVersionComment + false + + + SwitchToDataHistoryVersion + false + + + + InformationRegister.ЗамерыВремени.StandardAttribute.Active + + View + false + + + Edit + false + + + + InformationRegister.ЗамерыВремени.StandardAttribute.LineNumber + + View + false + + + Edit + false + + + + InformationRegister.ЗамерыВремени.StandardAttribute.Recorder + + View + false + + + Edit + false + + + + InformationRegister.ЗамерыВремени.StandardAttribute.Period + + View + false + + + Edit + false + + + + InformationRegister.БезопасноеХранилищеДанных.Resource.Данные Edit false @@ -5881,6 +6854,17 @@ Edit false + + TotalsControl + false + + + + InformationRegister.ДампыПлатформы.Dimension.ВариантДампа + + Edit + false + InformationRegister.ДанныеПроизводственногоКалендаря.Dimension.Год @@ -5965,6 +6949,49 @@ false + + Constant.ОценкаПроизводительностиЭкспортВсехКлючевыхОпераций + + Read + false + + + Update + false + + + View + false + + + Edit + false + + + ReadDataHistory + false + + + UpdateDataHistory + false + + + UpdateDataHistoryVersionComment + false + + + ViewDataHistory + false + + + EditDataHistoryVersionComment + false + + + SwitchToDataHistoryVersion + false + + Catalog.ИдентификаторыОбъектовМетаданных.Attribute.Синоним @@ -6015,6 +7042,24 @@ false + + InformationRegister.ЗамерыВремени.Dimension.КлючеваяОперация + + View + false + + + Edit + false + + + + Document.СогласиеНаОбработкуПерсональныхДанных + + InteractiveDelete + false + + InformationRegister.УдалитьСтраныМира.Dimension.ОбластьДанных @@ -6022,6 +7067,60 @@ false + + InformationRegister.БуферОперацийСтатистики + + Update + false + + + Edit + false + + + TotalsControl + false + + + + InformationRegister.БуферОперацийСтатистики.StandardAttribute.Active + + Edit + false + + + + InformationRegister.БуферОперацийСтатистики.StandardAttribute.LineNumber + + Edit + false + + + + InformationRegister.БуферОперацийСтатистики.StandardAttribute.Recorder + + Edit + false + + + + InformationRegister.БуферОперацийСтатистики.StandardAttribute.Period + + Edit + false + + + + Constant.ПараметрыЦентраМониторинга + + Update + false + + + Edit + false + + InformationRegister.ДанныеПроизводственногоКалендаря.Dimension.ПроизводственныйКалендарь @@ -6106,6 +7205,13 @@ false + + InformationRegister.БуферОперацийСтатистики.Dimension.ИдентификаторЗаписи + + Edit + false + + InformationRegister.СостоянияУспешныхОбменовДанными.Dimension.УзелИнформационнойБазы @@ -6283,6 +7389,10 @@ Edit false + + TotalsControl + false + ReadDataHistory false @@ -6360,7 +7470,7 @@ - InformationRegister.НастройкиТранспортаОбмена.Resource.FTPСоединениеПароль + InformationRegister.НастройкиТранспортаОбмена.Resource.УдалитьFTPСоединениеПароль Edit false @@ -6407,6 +7517,10 @@ Edit false + + TotalsControl + false + ReadDataHistory false @@ -6495,7 +7609,7 @@ - DataProcessor.РезервноеКопированиеИБ.Command.ВыполнитьВосстановлениеИБ + DataProcessor.РезервноеКопированиеИБ.Command.ВыполнитьВосстановлениеДанных View false @@ -6664,6 +7778,21 @@ false + + InformationRegister.ВерсииПодсистемОбластейДанных + + Update + false + + + Edit + false + + + TotalsControl + false + + CommonForm.НастройкаОбменаСообщениями @@ -6749,6 +7878,13 @@ false + + InformationRegister.ДампыПлатформы.Dimension.ВерсияПлатформы + + Edit + false + + InformationRegister.УдалитьСтраныМира.Resource.Значение @@ -6788,6 +7924,10 @@ Edit false + + TotalsControl + false + InformationRegister.УдалитьСтраныМира.StandardAttribute.Active @@ -6817,6 +7957,27 @@ false + + InformationRegister.СтатистикаКонфигурации.Dimension.ВидСтатистики + + Edit + false + + + + InformationRegister.ЗамерыКомментарииСтатистики.Dimension.ИдентификаторУдаления + + Edit + false + + + + InformationRegister.ДампыПлатформы.Resource.ИмяФайла + + Edit + false + + InformationRegister.НастройкиТранспортаОбмена.Resource.COMИмяИнформационнойБазыНаСервере1СПредприятия @@ -6824,6 +7985,13 @@ false + + InformationRegister.ЗамерыОперацииСтатистики.Dimension.ПериодОкончание + + Edit + false + + InformationRegister.ПоставляемыеДанныеТребующиеОбработки.Dimension.КодОбработчика @@ -6842,6 +8010,88 @@ false + + InformationRegister.ДампыПлатформы + + Update + false + + + Edit + false + + + + InformationRegister.ДампыПлатформы.StandardAttribute.Active + + Edit + false + + + + InformationRegister.ДампыПлатформы.StandardAttribute.LineNumber + + Edit + false + + + + InformationRegister.ДампыПлатформы.StandardAttribute.Recorder + + Edit + false + + + + InformationRegister.ДампыПлатформы.StandardAttribute.Period + + Edit + false + + + + InformationRegister.ЗамерыОперацииСтатистики + + Update + false + + + Edit + false + + + TotalsControl + false + + + + InformationRegister.ЗамерыОперацииСтатистики.StandardAttribute.Active + + Edit + false + + + + InformationRegister.ЗамерыОперацииСтатистики.StandardAttribute.LineNumber + + Edit + false + + + + InformationRegister.ЗамерыОперацииСтатистики.StandardAttribute.Recorder + + Edit + false + + + + InformationRegister.ЗамерыОперацииСтатистики.StandardAttribute.Period + + Edit + false + + Catalog.Файлы @@ -6922,6 +8172,60 @@ false + + Constant.ПредставлениеОбластиДанных + + Update + false + + + Edit + false + + + + InformationRegister.КомментарииСтатистики + + Update + false + + + Edit + false + + + TotalsControl + false + + + + InformationRegister.КомментарииСтатистики.StandardAttribute.Active + + Edit + false + + + + InformationRegister.КомментарииСтатистики.StandardAttribute.LineNumber + + Edit + false + + + + InformationRegister.КомментарииСтатистики.StandardAttribute.Recorder + + Edit + false + + + + InformationRegister.КомментарииСтатистики.StandardAttribute.Period + + Edit + false + + InformationRegister.ПраваРолей.Resource.Изменение @@ -6946,6 +8250,28 @@ Edit false + + TotalsControl + false + + + + InformationRegister.КомментарииОперацииСтатистики.Dimension.ИдентификаторОперации + + Edit + false + + + + Constant.ВыполнитьРезервноеКопированиеОбластиДанных + + Update + false + + + Edit + false + Catalog.ВерсииФайлов @@ -6970,6 +8296,60 @@ false + + InformationRegister.ЗамерыВремениТехнологические.Attribute.ДатаЗаписиЛокальная + + View + false + + + Edit + false + + + + InformationRegister.ОперацииСтатистики + + Update + false + + + Edit + false + + + TotalsControl + false + + + + InformationRegister.ОперацииСтатистики.StandardAttribute.Active + + Edit + false + + + + InformationRegister.ОперацииСтатистики.StandardAttribute.LineNumber + + Edit + false + + + + InformationRegister.ОперацииСтатистики.StandardAttribute.Recorder + + Edit + false + + + + InformationRegister.ОперацииСтатистики.StandardAttribute.Period + + Edit + false + + InformationRegister.НастройкиТранспортаОбмена.Resource.WSURLВебСервиса @@ -7043,6 +8423,56 @@ false + + InformationRegister.ПакетыДляОтправки.Attribute.ТелоПакета + + Edit + false + + + + InformationRegister.КомментарииОперацииСтатистики + + Update + false + + + Edit + false + + + TotalsControl + false + + + + InformationRegister.КомментарииОперацииСтатистики.StandardAttribute.Active + + Edit + false + + + + InformationRegister.КомментарииОперацииСтатистики.StandardAttribute.LineNumber + + Edit + false + + + + InformationRegister.КомментарииОперацииСтатистики.StandardAttribute.Recorder + + Edit + false + + + + InformationRegister.КомментарииОперацииСтатистики.StandardAttribute.Period + + Edit + false + + Catalog.СценарииОбменовДанными.Attribute.Комментарий @@ -7050,6 +8480,17 @@ false + + InformationRegister.ЗамерыВремениТехнологические.Attribute.ДатаЗаписи + + View + false + + + Edit + false + + InformationRegister.НастройкиТранспортаОбмена.Resource.WSИспользоватьПередачуБольшогоОбъемаДанных @@ -7057,6 +8498,49 @@ false + + InformationRegister.ПакетыДляОтправки + + Update + false + + + Edit + false + + + TotalsControl + false + + + + InformationRegister.ПакетыДляОтправки.StandardAttribute.Active + + Edit + false + + + + InformationRegister.ПакетыДляОтправки.StandardAttribute.LineNumber + + Edit + false + + + + InformationRegister.ПакетыДляОтправки.StandardAttribute.Recorder + + Edit + false + + + + InformationRegister.ПакетыДляОтправки.StandardAttribute.Period + + Edit + false + + Constant.ДетализироватьОбновлениеИБВЖурналеРегистрации @@ -7492,6 +8976,17 @@ false + + InformationRegister.ЗамерыВремени.Attribute.ДатаЗаписиЛокальная + + View + false + + + Edit + false + + InformationRegister.НастройкиТранспортаОбмена.Resource.COMВариантРаботыИнформационнойБазы @@ -7499,6 +8994,49 @@ false + + InformationRegister.БезопасноеХранилищеДанных + + Update + false + + + Edit + false + + + TotalsControl + false + + + + InformationRegister.БезопасноеХранилищеДанных.StandardAttribute.Active + + Edit + false + + + + InformationRegister.БезопасноеХранилищеДанных.StandardAttribute.LineNumber + + Edit + false + + + + InformationRegister.БезопасноеХранилищеДанных.StandardAttribute.Recorder + + Edit + false + + + + InformationRegister.БезопасноеХранилищеДанных.StandardAttribute.Period + + Edit + false + + SessionParameter.ОбластьДанныхЗначение @@ -7542,6 +9080,10 @@ Edit false + + TotalsControl + false + ReadDataHistory false @@ -7647,6 +9189,10 @@ Edit false + + TotalsControl + false + InformationRegister.УдалитьОчередьЗаданий.Resource.Использование diff --git a/SSL/src/Roles/ПроверкаДоступныхОбновленийКонфигурации/Rights.rights b/SSL/src/Roles/ПроверкаДоступныхОбновленийКонфигурации/Rights.rights index cf7cb5ee6..138d0356d 100644 --- a/SSL/src/Roles/ПроверкаДоступныхОбновленийКонфигурации/Rights.rights +++ b/SSL/src/Roles/ПроверкаДоступныхОбновленийКонфигурации/Rights.rights @@ -4,7 +4,7 @@ true false - DataProcessor.ОбновлениеКонфигурации + DataProcessor.ПоискИУстановкаОбновлений Use true diff --git a/SSL/src/Roles/ПросмотрОписанияИзмененийПрограммы/Rights.rights b/SSL/src/Roles/ПросмотрОписанияИзмененийПрограммы/Rights.rights index 5d41a57bb..fd31f44f0 100644 --- a/SSL/src/Roles/ПросмотрОписанияИзмененийПрограммы/Rights.rights +++ b/SSL/src/Roles/ПросмотрОписанияИзмененийПрограммы/Rights.rights @@ -4,7 +4,7 @@ true false - CommonForm.ОписаниеИзмененийСистемы + CommonForm.ОписаниеИзмененийПрограммы View true diff --git a/SSL/src/Roles/РаботаСПапкамиФайлов/Rights.rights b/SSL/src/Roles/РаботаСПапкамиФайлов/Rights.rights index 34171c86e..67e1e87af 100644 --- a/SSL/src/Roles/РаботаСПапкамиФайлов/Rights.rights +++ b/SSL/src/Roles/РаботаСПапкамиФайлов/Rights.rights @@ -934,7 +934,7 @@ - Catalog.УчетныеЗаписиЭлектроннойПочты.Attribute.Пароль + Catalog.УчетныеЗаписиЭлектроннойПочты.Attribute.УдалитьПароль View false @@ -1605,7 +1605,7 @@ - Catalog.УчетныеЗаписиЭлектроннойПочты.Attribute.ПарольSMTP + Catalog.УчетныеЗаписиЭлектроннойПочты.Attribute.УдалитьПарольSMTP View false @@ -3075,7 +3075,7 @@ - DataProcessor.ОбновлениеКонфигурации.Attribute.ИсточникОбновления + DataProcessor.ПоискИУстановкаОбновлений.Attribute.ИсточникОбновления View false @@ -3174,7 +3174,7 @@ - DataProcessor.ОбновлениеКонфигурации.TabularSection.ДоступныеОбновления.Attribute.Версия2Разряд + DataProcessor.ПоискИУстановкаОбновлений.TabularSection.ДоступныеОбновления.Attribute.Версия2Разряд View false @@ -3196,7 +3196,7 @@ - DataProcessor.ОбновлениеКонфигурации.Attribute.РезультатОбновления + DataProcessor.ПоискИУстановкаОбновлений.Attribute.РезультатОбновления View false @@ -3478,7 +3478,7 @@ - DataProcessor.ОбновлениеКонфигурации.Attribute.КодПользователяСервераОбновлений + DataProcessor.ПоискИУстановкаОбновлений.Attribute.КодПользователяСервераОбновлений View false @@ -3885,7 +3885,7 @@ - DataProcessor.ОбновлениеКонфигурации.TabularSection.ДоступныеОбновления.Attribute.ФайлОбновления + DataProcessor.ПоискИУстановкаОбновлений.TabularSection.ДоступныеОбновления.Attribute.ФайлОбновления View false @@ -4006,7 +4006,7 @@ - DataProcessor.ОбновлениеКонфигурации.Attribute.КодЗадачиПланировщика + DataProcessor.ПоискИУстановкаОбновлений.Attribute.КодЗадачиПланировщика View false @@ -4743,7 +4743,7 @@ - DataProcessor.ОбновлениеКонфигурации.TabularSection.ДоступныеОбновления.Attribute.НомерДискаИТС + DataProcessor.ПоискИУстановкаОбновлений.TabularSection.ДоступныеОбновления.Attribute.НомерДискаИТС View false @@ -4908,7 +4908,7 @@ - DataProcessor.ОбновлениеКонфигурации.TabularSection.ДоступныеОбновления + DataProcessor.ПоискИУстановкаОбновлений.TabularSection.ДоступныеОбновления View false @@ -5897,7 +5897,7 @@ - DataProcessor.ОбновлениеКонфигурации.Attribute.ДатаВремяОбновления + DataProcessor.ПоискИУстановкаОбновлений.Attribute.ДатаВремяОбновления View false @@ -5908,7 +5908,7 @@ - DataProcessor.ПомощникСозданияОбменаДанными.Attribute.ИмяФайлаНастроекОбменаДаннымиДляЗагрузки + DataProcessor.ПомощникСозданияОбменаДанными.Attribute.ИмяФайлаНастроекСинхронизацииДанныхДляЗагрузки View false @@ -6248,17 +6248,6 @@ false - - InformationRegister.НазначениеДополнительныхОбработок.Resource.ИспользоватьПечатныеФормы - - View - false - - - Edit - false - - Catalog.СценарииОбменовДанными.TabularSection.НастройкиОбмена.Attribute.УзелИнформационнойБазы @@ -6931,7 +6920,7 @@ - DataProcessor.ОбновлениеКонфигурации.Attribute.РежимОбновления + DataProcessor.ПоискИУстановкаОбновлений.Attribute.РежимОбновления View false @@ -7448,7 +7437,7 @@ - DataProcessor.ПомощникСозданияОбменаДанными.Attribute.ИмяФайлаНастроекОбменаДанными + DataProcessor.ПомощникСозданияОбменаДанными.Attribute.ИмяФайлаНастроекСинхронизацииДанных View false @@ -8185,7 +8174,7 @@ - DataProcessor.ОбновлениеКонфигурации.Attribute.ИспользоватьРасписаниеДляПроверкиОбновления + DataProcessor.ПоискИУстановкаОбновлений.Attribute.ИспользоватьРасписаниеДляПроверкиОбновления View false @@ -8196,7 +8185,7 @@ - DataProcessor.ОбновлениеКонфигурации.Attribute.ЗапомнитьПарольСервераОбновлений + DataProcessor.ПоискИУстановкаОбновлений.Attribute.ЗапомнитьПарольСервераОбновлений View false @@ -8537,7 +8526,7 @@ - DataProcessor.ОбновлениеКонфигурации.Attribute.ВосстанавливатьИнформационнуюБазу + DataProcessor.ПоискИУстановкаОбновлений.Attribute.ВосстанавливатьИнформационнуюБазу View false @@ -8581,7 +8570,7 @@ - DataProcessor.ОбновлениеКонфигурации.TabularSection.ДоступныеОбновления.Attribute.ПутьКЛокальномуФайлуОбновления + DataProcessor.ПоискИУстановкаОбновлений.TabularSection.ДоступныеОбновления.Attribute.ПутьКЛокальномуФайлуОбновления View false @@ -9226,7 +9215,7 @@ - DataProcessor.ОбновлениеКонфигурации.Attribute.ИмяКаталогаРезервнойКопииИБ + DataProcessor.ПоискИУстановкаОбновлений.Attribute.ИмяКаталогаРезервнойКопииИБ View false @@ -9600,7 +9589,7 @@ - DataProcessor.ОбновлениеКонфигурации.Attribute.ИмяФайлаОбновления + DataProcessor.ПоискИУстановкаОбновлений.Attribute.ИмяФайлаОбновления View false @@ -10069,7 +10058,7 @@ - DataProcessor.ОбновлениеКонфигурации.TabularSection.ДоступныеОбновления.Attribute.РазмерФайлаОбновления + DataProcessor.ПоискИУстановкаОбновлений.TabularSection.ДоступныеОбновления.Attribute.РазмерФайлаОбновления View false @@ -10179,7 +10168,7 @@ - DataProcessor.ОбновлениеКонфигурации.Attribute.РасписаниеПроверкиНаличияОбновления + DataProcessor.ПоискИУстановкаОбновлений.Attribute.РасписаниеПроверкиНаличияОбновления View false @@ -10443,7 +10432,7 @@ - DataProcessor.ОбновлениеКонфигурации.TabularSection.ДоступныеОбновления.Attribute.ВерсияДляОбновления + DataProcessor.ПоискИУстановкаОбновлений.TabularSection.ДоступныеОбновления.Attribute.ВерсияДляОбновления View false @@ -10663,7 +10652,7 @@ - Catalog.ГруппыВнешнихПользователей.Attribute.ТипОбъектовАвторизации + Catalog.ГруппыВнешнихПользователей.Attribute.УдалитьТипОбъектовАвторизации View false @@ -10751,7 +10740,7 @@ - DataProcessor.ОбновлениеКонфигурации.TabularSection.ДоступныеОбновления.Attribute.Версия4Разряд + DataProcessor.ПоискИУстановкаОбновлений.TabularSection.ДоступныеОбновления.Attribute.Версия4Разряд View false @@ -11026,7 +11015,7 @@ - DataProcessor.ОбновлениеКонфигурации.Attribute.ПовторныйЗапуск + DataProcessor.ПоискИУстановкаОбновлений.Attribute.ПовторныйЗапуск View false @@ -11059,7 +11048,7 @@ - InformationRegister.НастройкиТранспортаОбмена.Resource.ПарольАрхиваСообщенияОбмена + InformationRegister.НастройкиТранспортаОбмена.Resource.УдалитьПарольАрхиваСообщенияОбмена View false @@ -11330,7 +11319,7 @@ - DataProcessor.ОбновлениеКонфигурации.TabularSection.ДоступныеОбновления.Attribute.ЛокальныйОтносительныйКаталог + DataProcessor.ПоискИУстановкаОбновлений.TabularSection.ДоступныеОбновления.Attribute.ЛокальныйОтносительныйКаталог View false @@ -11363,7 +11352,7 @@ - DataProcessor.ОбновлениеКонфигурации.Attribute.ТехническаяИнформацияОбОшибке + DataProcessor.ПоискИУстановкаОбновлений.Attribute.ТехническаяИнформацияОбОшибке View false @@ -11429,7 +11418,7 @@ - DataProcessor.ОбновлениеКонфигурации.TabularSection.ДоступныеОбновления.Attribute.Версия1Разряд + DataProcessor.ПоискИУстановкаОбновлений.TabularSection.ДоступныеОбновления.Attribute.Версия1Разряд View false @@ -11660,7 +11649,7 @@ - DataProcessor.ОбновлениеКонфигурации.Attribute.ПарольСервераОбновлений + DataProcessor.ПоискИУстановкаОбновлений.Attribute.ПарольСервераОбновлений View false @@ -12650,7 +12639,7 @@ - DataProcessor.ОбновлениеКонфигурации.TabularSection.ДоступныеОбновления.Attribute.Версия3Разряд + DataProcessor.ПоискИУстановкаОбновлений.TabularSection.ДоступныеОбновления.Attribute.Версия3Разряд View false @@ -12859,7 +12848,7 @@ - InformationRegister.НастройкиТранспортаОбмена.Resource.FTPСоединениеПароль + InformationRegister.НастройкиТранспортаОбмена.Resource.УдалитьFTPСоединениеПароль View false @@ -13013,7 +13002,7 @@ - DataProcessor.ОбновлениеКонфигурации.Attribute.НуженФайлОбновления + DataProcessor.ПоискИУстановкаОбновлений.Attribute.НуженФайлОбновления View false @@ -13218,7 +13207,7 @@ - DataProcessor.ОбновлениеКонфигурации.Attribute.АдресЭлектроннойПочты + DataProcessor.ПоискИУстановкаОбновлений.Attribute.АдресЭлектроннойПочты View false @@ -13801,7 +13790,7 @@ - DataProcessor.ОбновлениеКонфигурации.Attribute.ПроверятьНаличиеОбновленияПриЗапуске + DataProcessor.ПоискИУстановкаОбновлений.Attribute.ПроверятьНаличиеОбновленияПриЗапуске View false @@ -14234,7 +14223,7 @@ - DataProcessor.ОбновлениеКонфигурации.Attribute.ВыслатьОтчетНаПочту + DataProcessor.ПоискИУстановкаОбновлений.Attribute.ВыслатьОтчетНаПочту View false @@ -14421,7 +14410,7 @@ - DataProcessor.ОбновлениеКонфигурации.TabularSection.ДоступныеОбновления.Attribute.Версия + DataProcessor.ПоискИУстановкаОбновлений.TabularSection.ДоступныеОбновления.Attribute.Версия View false @@ -14619,7 +14608,7 @@ - DataProcessor.ОбновлениеКонфигурации.Attribute.СоздаватьРезервнуюКопию + DataProcessor.ПоискИУстановкаОбновлений.Attribute.СоздаватьРезервнуюКопию View false @@ -14751,7 +14740,7 @@ - DataProcessor.ОбновлениеКонфигурации.TabularSection.ДоступныеОбновления.Attribute.ПутьКЛокальномуФайлу + DataProcessor.ПоискИУстановкаОбновлений.TabularSection.ДоступныеОбновления.Attribute.ПутьКЛокальномуФайлу View false @@ -14916,7 +14905,7 @@ - DataProcessor.ОбновлениеКонфигурации.TabularSection.ДоступныеОбновления.Attribute.ПутьКФайлуОбновления + DataProcessor.ПоискИУстановкаОбновлений.TabularSection.ДоступныеОбновления.Attribute.ПутьКФайлуОбновления View false @@ -14992,17 +14981,6 @@ false - - Catalog.ГруппыДоступа.Attribute.ТипПользователей - - View - false - - - Edit - false - - Catalog.ЗапланированноеВзаимодействиеПрисоединенныеФайлы.TabularSection.ЭлектронныеПодписи.Attribute.Комментарий @@ -15081,7 +15059,7 @@ - DataProcessor.ОбновлениеКонфигурации.TabularSection.ДоступныеОбновления.Attribute.Поставщик + DataProcessor.ПоискИУстановкаОбновлений.TabularSection.ДоступныеОбновления.Attribute.Поставщик View false @@ -15092,7 +15070,7 @@ - DataProcessor.ОбновлениеКонфигурации.TabularSection.ДоступныеОбновления.Attribute.Конфигурация + DataProcessor.ПоискИУстановкаОбновлений.TabularSection.ДоступныеОбновления.Attribute.Конфигурация View false diff --git a/SSL/src/Roles/РедактированиеРеквизитовОбъектов/Rights.rights b/SSL/src/Roles/РедактированиеРеквизитовОбъектов/Rights.rights index 2098e5282..812afd2e7 100644 --- a/SSL/src/Roles/РедактированиеРеквизитовОбъектов/Rights.rights +++ b/SSL/src/Roles/РедактированиеРеквизитовОбъектов/Rights.rights @@ -950,7 +950,7 @@ - Catalog.УчетныеЗаписиЭлектроннойПочты.Attribute.Пароль + Catalog.УчетныеЗаписиЭлектроннойПочты.Attribute.УдалитьПароль View false @@ -1632,7 +1632,7 @@ - Catalog.УчетныеЗаписиЭлектроннойПочты.Attribute.ПарольSMTP + Catalog.УчетныеЗаписиЭлектроннойПочты.Attribute.УдалитьПарольSMTP View false @@ -3194,7 +3194,7 @@ - DataProcessor.ОбновлениеКонфигурации.Attribute.ИсточникОбновления + DataProcessor.ПоискИУстановкаОбновлений.Attribute.ИсточникОбновления View false @@ -3293,7 +3293,7 @@ - DataProcessor.ОбновлениеКонфигурации.TabularSection.ДоступныеОбновления.Attribute.Версия2Разряд + DataProcessor.ПоискИУстановкаОбновлений.TabularSection.ДоступныеОбновления.Attribute.Версия2Разряд View false @@ -3315,7 +3315,7 @@ - DataProcessor.ОбновлениеКонфигурации.Attribute.РезультатОбновления + DataProcessor.ПоискИУстановкаОбновлений.Attribute.РезультатОбновления View false @@ -3590,7 +3590,7 @@ - DataProcessor.ОбновлениеКонфигурации.Attribute.КодПользователяСервераОбновлений + DataProcessor.ПоискИУстановкаОбновлений.Attribute.КодПользователяСервераОбновлений View false @@ -4019,7 +4019,7 @@ - DataProcessor.ОбновлениеКонфигурации.TabularSection.ДоступныеОбновления.Attribute.ФайлОбновления + DataProcessor.ПоискИУстановкаОбновлений.TabularSection.ДоступныеОбновления.Attribute.ФайлОбновления View false @@ -4140,7 +4140,7 @@ - DataProcessor.ОбновлениеКонфигурации.Attribute.КодЗадачиПланировщика + DataProcessor.ПоискИУстановкаОбновлений.Attribute.КодЗадачиПланировщика View false @@ -4888,7 +4888,7 @@ - DataProcessor.ОбновлениеКонфигурации.TabularSection.ДоступныеОбновления.Attribute.НомерДискаИТС + DataProcessor.ПоискИУстановкаОбновлений.TabularSection.ДоступныеОбновления.Attribute.НомерДискаИТС View false @@ -5053,7 +5053,7 @@ - DataProcessor.ОбновлениеКонфигурации.TabularSection.ДоступныеОбновления + DataProcessor.ПоискИУстановкаОбновлений.TabularSection.ДоступныеОбновления View false @@ -6120,7 +6120,7 @@ - DataProcessor.ОбновлениеКонфигурации.Attribute.ДатаВремяОбновления + DataProcessor.ПоискИУстановкаОбновлений.Attribute.ДатаВремяОбновления View false @@ -6131,7 +6131,7 @@ - DataProcessor.ПомощникСозданияОбменаДанными.Attribute.ИмяФайлаНастроекОбменаДаннымиДляЗагрузки + DataProcessor.ПомощникСозданияОбменаДанными.Attribute.ИмяФайлаНастроекСинхронизацииДанныхДляЗагрузки View false @@ -6526,17 +6526,6 @@ false - - InformationRegister.НазначениеДополнительныхОбработок.Resource.ИспользоватьПечатныеФормы - - View - false - - - Edit - false - - Catalog.СценарииОбменовДанными.TabularSection.НастройкиОбмена.Attribute.УзелИнформационнойБазы @@ -7242,7 +7231,7 @@ - DataProcessor.ОбновлениеКонфигурации.Attribute.РежимОбновления + DataProcessor.ПоискИУстановкаОбновлений.Attribute.РежимОбновления View false @@ -7770,7 +7759,7 @@ - DataProcessor.ПомощникСозданияОбменаДанными.Attribute.ИмяФайлаНастроекОбменаДанными + DataProcessor.ПомощникСозданияОбменаДанными.Attribute.ИмяФайлаНастроекСинхронизацииДанных View false @@ -8529,7 +8518,7 @@ - DataProcessor.ОбновлениеКонфигурации.Attribute.ИспользоватьРасписаниеДляПроверкиОбновления + DataProcessor.ПоискИУстановкаОбновлений.Attribute.ИспользоватьРасписаниеДляПроверкиОбновления View false @@ -8540,7 +8529,7 @@ - DataProcessor.ОбновлениеКонфигурации.Attribute.ЗапомнитьПарольСервераОбновлений + DataProcessor.ПоискИУстановкаОбновлений.Attribute.ЗапомнитьПарольСервераОбновлений View false @@ -8914,7 +8903,7 @@ - DataProcessor.ОбновлениеКонфигурации.Attribute.ВосстанавливатьИнформационнуюБазу + DataProcessor.ПоискИУстановкаОбновлений.Attribute.ВосстанавливатьИнформационнуюБазу View false @@ -8958,7 +8947,7 @@ - DataProcessor.ОбновлениеКонфигурации.TabularSection.ДоступныеОбновления.Attribute.ПутьКЛокальномуФайлуОбновления + DataProcessor.ПоискИУстановкаОбновлений.TabularSection.ДоступныеОбновления.Attribute.ПутьКЛокальномуФайлуОбновления View false @@ -9662,7 +9651,7 @@ - DataProcessor.ОбновлениеКонфигурации.Attribute.ИмяКаталогаРезервнойКопииИБ + DataProcessor.ПоискИУстановкаОбновлений.Attribute.ИмяКаталогаРезервнойКопииИБ View false @@ -10069,7 +10058,7 @@ - DataProcessor.ОбновлениеКонфигурации.Attribute.ИмяФайлаОбновления + DataProcessor.ПоискИУстановкаОбновлений.Attribute.ИмяФайлаОбновления View false @@ -10542,7 +10531,7 @@ - DataProcessor.ОбновлениеКонфигурации.TabularSection.ДоступныеОбновления.Attribute.РазмерФайлаОбновления + DataProcessor.ПоискИУстановкаОбновлений.TabularSection.ДоступныеОбновления.Attribute.РазмерФайлаОбновления View false @@ -10652,7 +10641,7 @@ - DataProcessor.ОбновлениеКонфигурации.Attribute.РасписаниеПроверкиНаличияОбновления + DataProcessor.ПоискИУстановкаОбновлений.Attribute.РасписаниеПроверкиНаличияОбновления View false @@ -10927,7 +10916,7 @@ - DataProcessor.ОбновлениеКонфигурации.TabularSection.ДоступныеОбновления.Attribute.ВерсияДляОбновления + DataProcessor.ПоискИУстановкаОбновлений.TabularSection.ДоступныеОбновления.Attribute.ВерсияДляОбновления View false @@ -11147,7 +11136,7 @@ - Catalog.ГруппыВнешнихПользователей.Attribute.ТипОбъектовАвторизации + Catalog.ГруппыВнешнихПользователей.Attribute.УдалитьТипОбъектовАвторизации View false @@ -11235,7 +11224,7 @@ - DataProcessor.ОбновлениеКонфигурации.TabularSection.ДоступныеОбновления.Attribute.Версия4Разряд + DataProcessor.ПоискИУстановкаОбновлений.TabularSection.ДоступныеОбновления.Attribute.Версия4Разряд View false @@ -11510,7 +11499,7 @@ - DataProcessor.ОбновлениеКонфигурации.Attribute.ПовторныйЗапуск + DataProcessor.ПоискИУстановкаОбновлений.Attribute.ПовторныйЗапуск View false @@ -11543,7 +11532,7 @@ - InformationRegister.НастройкиТранспортаОбмена.Resource.ПарольАрхиваСообщенияОбмена + InformationRegister.НастройкиТранспортаОбмена.Resource.УдалитьПарольАрхиваСообщенияОбмена View false @@ -11829,7 +11818,7 @@ - DataProcessor.ОбновлениеКонфигурации.TabularSection.ДоступныеОбновления.Attribute.ЛокальныйОтносительныйКаталог + DataProcessor.ПоискИУстановкаОбновлений.TabularSection.ДоступныеОбновления.Attribute.ЛокальныйОтносительныйКаталог View false @@ -11873,7 +11862,7 @@ - DataProcessor.ОбновлениеКонфигурации.Attribute.ТехническаяИнформацияОбОшибке + DataProcessor.ПоискИУстановкаОбновлений.Attribute.ТехническаяИнформацияОбОшибке View false @@ -11939,7 +11928,7 @@ - DataProcessor.ОбновлениеКонфигурации.TabularSection.ДоступныеОбновления.Attribute.Версия1Разряд + DataProcessor.ПоискИУстановкаОбновлений.TabularSection.ДоступныеОбновления.Attribute.Версия1Разряд View false @@ -12181,7 +12170,7 @@ - DataProcessor.ОбновлениеКонфигурации.Attribute.ПарольСервераОбновлений + DataProcessor.ПоискИУстановкаОбновлений.Attribute.ПарольСервераОбновлений View false @@ -13204,7 +13193,7 @@ - DataProcessor.ОбновлениеКонфигурации.TabularSection.ДоступныеОбновления.Attribute.Версия3Разряд + DataProcessor.ПоискИУстановкаОбновлений.TabularSection.ДоступныеОбновления.Attribute.Версия3Разряд View false @@ -13413,7 +13402,7 @@ - InformationRegister.НастройкиТранспортаОбмена.Resource.FTPСоединениеПароль + InformationRegister.НастройкиТранспортаОбмена.Resource.УдалитьFTPСоединениеПароль View false @@ -13567,7 +13556,7 @@ - DataProcessor.ОбновлениеКонфигурации.Attribute.НуженФайлОбновления + DataProcessor.ПоискИУстановкаОбновлений.Attribute.НуженФайлОбновления View false @@ -13765,7 +13754,7 @@ - DataProcessor.ОбновлениеКонфигурации.Attribute.АдресЭлектроннойПочты + DataProcessor.ПоискИУстановкаОбновлений.Attribute.АдресЭлектроннойПочты View false @@ -14348,7 +14337,7 @@ - DataProcessor.ОбновлениеКонфигурации.Attribute.ПроверятьНаличиеОбновленияПриЗапуске + DataProcessor.ПоискИУстановкаОбновлений.Attribute.ПроверятьНаличиеОбновленияПриЗапуске View false @@ -14898,7 +14887,7 @@ - DataProcessor.ОбновлениеКонфигурации.Attribute.ВыслатьОтчетНаПочту + DataProcessor.ПоискИУстановкаОбновлений.Attribute.ВыслатьОтчетНаПочту View false @@ -15085,7 +15074,7 @@ - DataProcessor.ОбновлениеКонфигурации.TabularSection.ДоступныеОбновления.Attribute.Версия + DataProcessor.ПоискИУстановкаОбновлений.TabularSection.ДоступныеОбновления.Attribute.Версия View false @@ -15283,7 +15272,7 @@ - DataProcessor.ОбновлениеКонфигурации.Attribute.СоздаватьРезервнуюКопию + DataProcessor.ПоискИУстановкаОбновлений.Attribute.СоздаватьРезервнуюКопию View false @@ -15426,7 +15415,7 @@ - DataProcessor.ОбновлениеКонфигурации.TabularSection.ДоступныеОбновления.Attribute.ПутьКЛокальномуФайлу + DataProcessor.ПоискИУстановкаОбновлений.TabularSection.ДоступныеОбновления.Attribute.ПутьКЛокальномуФайлу View false @@ -15602,7 +15591,7 @@ - DataProcessor.ОбновлениеКонфигурации.TabularSection.ДоступныеОбновления.Attribute.ПутьКФайлуОбновления + DataProcessor.ПоискИУстановкаОбновлений.TabularSection.ДоступныеОбновления.Attribute.ПутьКФайлуОбновления View false @@ -15689,17 +15678,6 @@ false - - Catalog.ГруппыДоступа.Attribute.ТипПользователей - - View - false - - - Edit - false - - Catalog.ЗапланированноеВзаимодействиеПрисоединенныеФайлы.TabularSection.ЭлектронныеПодписи.Attribute.Комментарий @@ -15778,7 +15756,7 @@ - DataProcessor.ОбновлениеКонфигурации.TabularSection.ДоступныеОбновления.Attribute.Поставщик + DataProcessor.ПоискИУстановкаОбновлений.TabularSection.ДоступныеОбновления.Attribute.Поставщик View false @@ -15789,7 +15767,7 @@ - DataProcessor.ОбновлениеКонфигурации.TabularSection.ДоступныеОбновления.Attribute.Конфигурация + DataProcessor.ПоискИУстановкаОбновлений.TabularSection.ДоступныеОбновления.Attribute.Конфигурация View false diff --git a/SSL/src/Roles/УдаленныйДоступОбменСообщениями/Rights.rights b/SSL/src/Roles/УдаленныйДоступОбменСообщениями/Rights.rights index 885ae7aa1..d37f998cd 100644 --- a/SSL/src/Roles/УдаленныйДоступОбменСообщениями/Rights.rights +++ b/SSL/src/Roles/УдаленныйДоступОбменСообщениями/Rights.rights @@ -1291,7 +1291,7 @@ - Catalog.УчетныеЗаписиЭлектроннойПочты.Attribute.Пароль + Catalog.УчетныеЗаписиЭлектроннойПочты.Attribute.УдалитьПароль View false @@ -2204,7 +2204,7 @@ - Catalog.УчетныеЗаписиЭлектроннойПочты.Attribute.ПарольSMTP + Catalog.УчетныеЗаписиЭлектроннойПочты.Attribute.УдалитьПарольSMTP View false @@ -2259,7 +2259,7 @@ - Catalog.РассылкиОтчетов.Attribute.FTPПароль + Catalog.РассылкиОтчетов.Attribute.УдалитьFTPПароль View false @@ -2310,7 +2310,7 @@ - InformationRegister.НастройкиТранспортаОбмена.Resource.COMПарольПользователя + InformationRegister.НастройкиТранспортаОбмена.Resource.УдалитьCOMПарольПользователя View false @@ -3347,7 +3347,7 @@ - InformationRegister.НастройкиТранспортаОбмена.Resource.WSПароль + InformationRegister.НастройкиТранспортаОбмена.Resource.УдалитьWSПароль View false @@ -4146,7 +4146,7 @@ - DataProcessor.ОбновлениеКонфигурации.Attribute.ИсточникОбновления + DataProcessor.ПоискИУстановкаОбновлений.Attribute.ИсточникОбновления View false @@ -4256,7 +4256,7 @@ - DataProcessor.ОбновлениеКонфигурации.TabularSection.ДоступныеОбновления.Attribute.Версия2Разряд + DataProcessor.ПоискИУстановкаОбновлений.TabularSection.ДоступныеОбновления.Attribute.Версия2Разряд View false @@ -4377,7 +4377,7 @@ - DataProcessor.ОбновлениеКонфигурации.Attribute.РезультатОбновления + DataProcessor.ПоискИУстановкаОбновлений.Attribute.РезультатОбновления View false @@ -4674,7 +4674,7 @@ - DataProcessor.ОбновлениеКонфигурации.Attribute.КодПользователяСервераОбновлений + DataProcessor.ПоискИУстановкаОбновлений.Attribute.КодПользователяСервераОбновлений View false @@ -5235,7 +5235,7 @@ - DataProcessor.ОбновлениеКонфигурации.TabularSection.ДоступныеОбновления.Attribute.ФайлОбновления + DataProcessor.ПоискИУстановкаОбновлений.TabularSection.ДоступныеОбновления.Attribute.ФайлОбновления View false @@ -5356,7 +5356,7 @@ - DataProcessor.ОбновлениеКонфигурации.Attribute.КодЗадачиПланировщика + DataProcessor.ПоискИУстановкаОбновлений.Attribute.КодЗадачиПланировщика View false @@ -6287,7 +6287,7 @@ - DataProcessor.ОбновлениеКонфигурации.TabularSection.ДоступныеОбновления.Attribute.НомерДискаИТС + DataProcessor.ПоискИУстановкаОбновлений.TabularSection.ДоступныеОбновления.Attribute.НомерДискаИТС View false @@ -6606,7 +6606,7 @@ - DataProcessor.ОбновлениеКонфигурации.TabularSection.ДоступныеОбновления + DataProcessor.ПоискИУстановкаОбновлений.TabularSection.ДоступныеОбновления View false @@ -7874,7 +7874,7 @@ - DataProcessor.ОбновлениеКонфигурации.Attribute.ДатаВремяОбновления + DataProcessor.ПоискИУстановкаОбновлений.Attribute.ДатаВремяОбновления View false @@ -7885,7 +7885,7 @@ - DataProcessor.ПомощникСозданияОбменаДанными.Attribute.ИмяФайлаНастроекОбменаДаннымиДляЗагрузки + DataProcessor.ПомощникСозданияОбменаДанными.Attribute.ИмяФайлаНастроекСинхронизацииДанныхДляЗагрузки View false @@ -8456,17 +8456,6 @@ false - - InformationRegister.НазначениеДополнительныхОбработок.Resource.ИспользоватьПечатныеФормы - - View - false - - - Edit - false - - Catalog.СценарииОбменовДанными.TabularSection.НастройкиОбмена.Attribute.УзелИнформационнойБазы @@ -8512,7 +8501,7 @@ - Catalog.РассылкиОтчетов.Attribute.ПарольАрхива + Catalog.РассылкиОтчетов.Attribute.УдалитьПарольАрхива View false @@ -9421,7 +9410,7 @@ - DataProcessor.ОбновлениеКонфигурации.Attribute.РежимОбновления + DataProcessor.ПоискИУстановкаОбновлений.Attribute.РежимОбновления View false @@ -10154,7 +10143,7 @@ - DataProcessor.ПомощникСозданияОбменаДанными.Attribute.ИмяФайлаНастроекОбменаДанными + DataProcessor.ПомощникСозданияОбменаДанными.Attribute.ИмяФайлаНастроекСинхронизацииДанных View false @@ -11012,7 +11001,7 @@ - DataProcessor.ОбновлениеКонфигурации.Attribute.ИспользоватьРасписаниеДляПроверкиОбновления + DataProcessor.ПоискИУстановкаОбновлений.Attribute.ИспользоватьРасписаниеДляПроверкиОбновления View false @@ -11023,7 +11012,7 @@ - DataProcessor.ОбновлениеКонфигурации.Attribute.ЗапомнитьПарольСервераОбновлений + DataProcessor.ПоискИУстановкаОбновлений.Attribute.ЗапомнитьПарольСервераОбновлений View false @@ -11551,7 +11540,7 @@ - DataProcessor.ОбновлениеКонфигурации.Attribute.ВосстанавливатьИнформационнуюБазу + DataProcessor.ПоискИУстановкаОбновлений.Attribute.ВосстанавливатьИнформационнуюБазу View false @@ -11595,7 +11584,7 @@ - DataProcessor.ОбновлениеКонфигурации.TabularSection.ДоступныеОбновления.Attribute.ПутьКЛокальномуФайлуОбновления + DataProcessor.ПоискИУстановкаОбновлений.TabularSection.ДоступныеОбновления.Attribute.ПутьКЛокальномуФайлуОбновления View false @@ -12574,7 +12563,7 @@ - DataProcessor.ОбновлениеКонфигурации.Attribute.ИмяКаталогаРезервнойКопииИБ + DataProcessor.ПоискИУстановкаОбновлений.Attribute.ИмяКаталогаРезервнойКопииИБ View false @@ -13168,7 +13157,7 @@ - DataProcessor.ОбновлениеКонфигурации.Attribute.ИмяФайлаОбновления + DataProcessor.ПоискИУстановкаОбновлений.Attribute.ИмяФайлаОбновления View false @@ -13769,7 +13758,7 @@ - DataProcessor.ОбновлениеКонфигурации.TabularSection.ДоступныеОбновления.Attribute.РазмерФайлаОбновления + DataProcessor.ПоискИУстановкаОбновлений.TabularSection.ДоступныеОбновления.Attribute.РазмерФайлаОбновления View false @@ -13879,7 +13868,7 @@ - DataProcessor.ОбновлениеКонфигурации.Attribute.РасписаниеПроверкиНаличияОбновления + DataProcessor.ПоискИУстановкаОбновлений.Attribute.РасписаниеПроверкиНаличияОбновления View false @@ -14187,7 +14176,7 @@ - DataProcessor.ОбновлениеКонфигурации.TabularSection.ДоступныеОбновления.Attribute.ВерсияДляОбновления + DataProcessor.ПоискИУстановкаОбновлений.TabularSection.ДоступныеОбновления.Attribute.ВерсияДляОбновления View false @@ -14462,7 +14451,7 @@ - Catalog.ГруппыВнешнихПользователей.Attribute.ТипОбъектовАвторизации + Catalog.ГруппыВнешнихПользователей.Attribute.УдалитьТипОбъектовАвторизации View false @@ -14550,7 +14539,7 @@ - DataProcessor.ОбновлениеКонфигурации.TabularSection.ДоступныеОбновления.Attribute.Версия4Разряд + DataProcessor.ПоискИУстановкаОбновлений.TabularSection.ДоступныеОбновления.Attribute.Версия4Разряд View false @@ -14876,7 +14865,7 @@ - DataProcessor.ОбновлениеКонфигурации.Attribute.ПовторныйЗапуск + DataProcessor.ПоискИУстановкаОбновлений.Attribute.ПовторныйЗапуск View false @@ -14920,7 +14909,7 @@ - InformationRegister.НастройкиТранспортаОбмена.Resource.ПарольАрхиваСообщенияОбмена + InformationRegister.НастройкиТранспортаОбмена.Resource.УдалитьПарольАрхиваСообщенияОбмена View false @@ -15404,7 +15393,7 @@ - DataProcessor.ОбновлениеКонфигурации.TabularSection.ДоступныеОбновления.Attribute.ЛокальныйОтносительныйКаталог + DataProcessor.ПоискИУстановкаОбновлений.TabularSection.ДоступныеОбновления.Attribute.ЛокальныйОтносительныйКаталог View false @@ -15470,7 +15459,7 @@ - DataProcessor.ОбновлениеКонфигурации.Attribute.ТехническаяИнформацияОбОшибке + DataProcessor.ПоискИУстановкаОбновлений.Attribute.ТехническаяИнформацияОбОшибке View false @@ -15536,7 +15525,7 @@ - DataProcessor.ОбновлениеКонфигурации.TabularSection.ДоступныеОбновления.Attribute.Версия1Разряд + DataProcessor.ПоискИУстановкаОбновлений.TabularSection.ДоступныеОбновления.Attribute.Версия1Разряд View false @@ -15873,7 +15862,7 @@ - DataProcessor.ОбновлениеКонфигурации.Attribute.ПарольСервераОбновлений + DataProcessor.ПоискИУстановкаОбновлений.Attribute.ПарольСервераОбновлений View false @@ -17046,7 +17035,7 @@ - DataProcessor.ОбновлениеКонфигурации.TabularSection.ДоступныеОбновления.Attribute.Версия3Разряд + DataProcessor.ПоискИУстановкаОбновлений.TabularSection.ДоступныеОбновления.Attribute.Версия3Разряд View false @@ -17266,7 +17255,7 @@ - InformationRegister.НастройкиТранспортаОбмена.Resource.FTPСоединениеПароль + InformationRegister.НастройкиТранспортаОбмена.Resource.УдалитьFTPСоединениеПароль View false @@ -17431,7 +17420,7 @@ - DataProcessor.ОбновлениеКонфигурации.Attribute.НуженФайлОбновления + DataProcessor.ПоискИУстановкаОбновлений.Attribute.НуженФайлОбновления View false @@ -17640,7 +17629,7 @@ - DataProcessor.ОбновлениеКонфигурации.Attribute.АдресЭлектроннойПочты + DataProcessor.ПоискИУстановкаОбновлений.Attribute.АдресЭлектроннойПочты View false @@ -18432,7 +18421,7 @@ - DataProcessor.ОбновлениеКонфигурации.Attribute.ПроверятьНаличиеОбновленияПриЗапуске + DataProcessor.ПоискИУстановкаОбновлений.Attribute.ПроверятьНаличиеОбновленияПриЗапуске View false @@ -19044,7 +19033,7 @@ - DataProcessor.ОбновлениеКонфигурации.Attribute.ВыслатьОтчетНаПочту + DataProcessor.ПоискИУстановкаОбновлений.Attribute.ВыслатьОтчетНаПочту View false @@ -19264,7 +19253,7 @@ - DataProcessor.ОбновлениеКонфигурации.TabularSection.ДоступныеОбновления.Attribute.Версия + DataProcessor.ПоискИУстановкаОбновлений.TabularSection.ДоступныеОбновления.Attribute.Версия View false @@ -19473,7 +19462,7 @@ - DataProcessor.ОбновлениеКонфигурации.Attribute.СоздаватьРезервнуюКопию + DataProcessor.ПоискИУстановкаОбновлений.Attribute.СоздаватьРезервнуюКопию View false @@ -19627,7 +19616,7 @@ - DataProcessor.ОбновлениеКонфигурации.TabularSection.ДоступныеОбновления.Attribute.ПутьКЛокальномуФайлу + DataProcessor.ПоискИУстановкаОбновлений.TabularSection.ДоступныеОбновления.Attribute.ПутьКЛокальномуФайлу View false @@ -19942,7 +19931,7 @@ - DataProcessor.ОбновлениеКонфигурации.TabularSection.ДоступныеОбновления.Attribute.ПутьКФайлуОбновления + DataProcessor.ПоискИУстановкаОбновлений.TabularSection.ДоступныеОбновления.Attribute.ПутьКФайлуОбновления View false @@ -20062,17 +20051,6 @@ false - - Catalog.ГруппыДоступа.Attribute.ТипПользователей - - View - false - - - Edit - false - - Catalog.ЗапланированноеВзаимодействиеПрисоединенныеФайлы.TabularSection.ЭлектронныеПодписи.Attribute.Комментарий @@ -20217,7 +20195,7 @@ - DataProcessor.ОбновлениеКонфигурации.TabularSection.ДоступныеОбновления.Attribute.Поставщик + DataProcessor.ПоискИУстановкаОбновлений.TabularSection.ДоступныеОбновления.Attribute.Поставщик View false @@ -20228,7 +20206,7 @@ - DataProcessor.ОбновлениеКонфигурации.TabularSection.ДоступныеОбновления.Attribute.Конфигурация + DataProcessor.ПоискИУстановкаОбновлений.TabularSection.ДоступныеОбновления.Attribute.Конфигурация View false diff --git a/SSL/src/Roles/ЧтениеБазовойНСИ/ЧтениеБазовойНСИ.mdo b/SSL/src/Roles/ЧтениеБазовойНСИ/ЧтениеБазовойНСИ.mdo deleted file mode 100644 index 5aa26f486..000000000 --- a/SSL/src/Roles/ЧтениеБазовойНСИ/ЧтениеБазовойНСИ.mdo +++ /dev/null @@ -1,9 +0,0 @@ - - - ЧтениеБазовойНСИ - - ru - Чтение базовой нормативно-справочной информации - - Для пользователей - diff --git a/SSL/src/Roles/ЧтениеГрафиковРаботы/Rights.rights b/SSL/src/Roles/ЧтениеГрафиковРаботы/Rights.rights new file mode 100644 index 000000000..f294656cb --- /dev/null +++ b/SSL/src/Roles/ЧтениеГрафиковРаботы/Rights.rights @@ -0,0 +1,106 @@ + + + false + true + false + + InformationRegister.КалендарныеГрафики + + Read + true + + + View + true + + + + InformationRegister.КалендарныеГрафики.StandardAttribute.Active + + Edit + false + + + + InformationRegister.КалендарныеГрафики.StandardAttribute.LineNumber + + Edit + false + + + + InformationRegister.КалендарныеГрафики.StandardAttribute.Recorder + + Edit + false + + + + InformationRegister.КалендарныеГрафики.StandardAttribute.Period + + Edit + false + + + + InformationRegister.КалендарныеГрафики.Resource.КоличествоДнейВГрафикеСНачалаГода + + Edit + false + + + + Catalog.Календари + + Read + true + + + View + true + + + InputByString + true + + + + InformationRegister.КалендарныеГрафики.Dimension.Год + + Edit + false + + + + InformationRegister.КалендарныеГрафики.Resource.ДеньВключенВГрафик + + Edit + false + + + + InformationRegister.РучныеИзмененияГрафиковРаботы + + Read + true + + + View + true + + + + InformationRegister.КалендарныеГрафики.Dimension.ДатаГрафика + + Edit + false + + + + InformationRegister.КалендарныеГрафики.Dimension.Календарь + + Edit + false + + + diff --git a/SSL/src/Roles/ЧтениеГрафиковРаботы/ЧтениеГрафиковРаботы.mdo b/SSL/src/Roles/ЧтениеГрафиковРаботы/ЧтениеГрафиковРаботы.mdo new file mode 100644 index 000000000..f80dd61c5 --- /dev/null +++ b/SSL/src/Roles/ЧтениеГрафиковРаботы/ЧтениеГрафиковРаботы.mdo @@ -0,0 +1,8 @@ + + + ЧтениеГрафиковРаботы + + ru + Чтение графиков работы + + diff --git a/SSL/src/Roles/ЧтениеДополнительныхСведений/Rights.rights b/SSL/src/Roles/ЧтениеДополнительныхСведений/Rights.rights index 56381b152..558fa7119 100644 --- a/SSL/src/Roles/ЧтениеДополнительныхСведений/Rights.rights +++ b/SSL/src/Roles/ЧтениеДополнительныхСведений/Rights.rights @@ -950,7 +950,7 @@ - Catalog.УчетныеЗаписиЭлектроннойПочты.Attribute.Пароль + Catalog.УчетныеЗаписиЭлектроннойПочты.Attribute.УдалитьПароль View false @@ -1632,7 +1632,7 @@ - Catalog.УчетныеЗаписиЭлектроннойПочты.Attribute.ПарольSMTP + Catalog.УчетныеЗаписиЭлектроннойПочты.Attribute.УдалитьПарольSMTP View false @@ -3194,7 +3194,7 @@ - DataProcessor.ОбновлениеКонфигурации.Attribute.ИсточникОбновления + DataProcessor.ПоискИУстановкаОбновлений.Attribute.ИсточникОбновления View false @@ -3293,7 +3293,7 @@ - DataProcessor.ОбновлениеКонфигурации.TabularSection.ДоступныеОбновления.Attribute.Версия2Разряд + DataProcessor.ПоискИУстановкаОбновлений.TabularSection.ДоступныеОбновления.Attribute.Версия2Разряд View false @@ -3315,7 +3315,7 @@ - DataProcessor.ОбновлениеКонфигурации.Attribute.РезультатОбновления + DataProcessor.ПоискИУстановкаОбновлений.Attribute.РезультатОбновления View false @@ -3590,7 +3590,7 @@ - DataProcessor.ОбновлениеКонфигурации.Attribute.КодПользователяСервераОбновлений + DataProcessor.ПоискИУстановкаОбновлений.Attribute.КодПользователяСервераОбновлений View false @@ -4019,7 +4019,7 @@ - DataProcessor.ОбновлениеКонфигурации.TabularSection.ДоступныеОбновления.Attribute.ФайлОбновления + DataProcessor.ПоискИУстановкаОбновлений.TabularSection.ДоступныеОбновления.Attribute.ФайлОбновления View false @@ -4140,7 +4140,7 @@ - DataProcessor.ОбновлениеКонфигурации.Attribute.КодЗадачиПланировщика + DataProcessor.ПоискИУстановкаОбновлений.Attribute.КодЗадачиПланировщика View false @@ -4888,7 +4888,7 @@ - DataProcessor.ОбновлениеКонфигурации.TabularSection.ДоступныеОбновления.Attribute.НомерДискаИТС + DataProcessor.ПоискИУстановкаОбновлений.TabularSection.ДоступныеОбновления.Attribute.НомерДискаИТС View false @@ -5053,7 +5053,7 @@ - DataProcessor.ОбновлениеКонфигурации.TabularSection.ДоступныеОбновления + DataProcessor.ПоискИУстановкаОбновлений.TabularSection.ДоступныеОбновления View false @@ -6120,7 +6120,7 @@ - DataProcessor.ОбновлениеКонфигурации.Attribute.ДатаВремяОбновления + DataProcessor.ПоискИУстановкаОбновлений.Attribute.ДатаВремяОбновления View false @@ -6131,7 +6131,7 @@ - DataProcessor.ПомощникСозданияОбменаДанными.Attribute.ИмяФайлаНастроекОбменаДаннымиДляЗагрузки + DataProcessor.ПомощникСозданияОбменаДанными.Attribute.ИмяФайлаНастроекСинхронизацииДанныхДляЗагрузки View false @@ -6526,17 +6526,6 @@ false - - InformationRegister.НазначениеДополнительныхОбработок.Resource.ИспользоватьПечатныеФормы - - View - false - - - Edit - false - - Catalog.СценарииОбменовДанными.TabularSection.НастройкиОбмена.Attribute.УзелИнформационнойБазы @@ -7242,7 +7231,7 @@ - DataProcessor.ОбновлениеКонфигурации.Attribute.РежимОбновления + DataProcessor.ПоискИУстановкаОбновлений.Attribute.РежимОбновления View false @@ -7770,7 +7759,7 @@ - DataProcessor.ПомощникСозданияОбменаДанными.Attribute.ИмяФайлаНастроекОбменаДанными + DataProcessor.ПомощникСозданияОбменаДанными.Attribute.ИмяФайлаНастроекСинхронизацииДанных View false @@ -8525,7 +8514,7 @@ - DataProcessor.ОбновлениеКонфигурации.Attribute.ИспользоватьРасписаниеДляПроверкиОбновления + DataProcessor.ПоискИУстановкаОбновлений.Attribute.ИспользоватьРасписаниеДляПроверкиОбновления View false @@ -8536,7 +8525,7 @@ - DataProcessor.ОбновлениеКонфигурации.Attribute.ЗапомнитьПарольСервераОбновлений + DataProcessor.ПоискИУстановкаОбновлений.Attribute.ЗапомнитьПарольСервераОбновлений View false @@ -8910,7 +8899,7 @@ - DataProcessor.ОбновлениеКонфигурации.Attribute.ВосстанавливатьИнформационнуюБазу + DataProcessor.ПоискИУстановкаОбновлений.Attribute.ВосстанавливатьИнформационнуюБазу View false @@ -8954,7 +8943,7 @@ - DataProcessor.ОбновлениеКонфигурации.TabularSection.ДоступныеОбновления.Attribute.ПутьКЛокальномуФайлуОбновления + DataProcessor.ПоискИУстановкаОбновлений.TabularSection.ДоступныеОбновления.Attribute.ПутьКЛокальномуФайлуОбновления View false @@ -9635,13 +9624,6 @@ false - - CommonCommand.ДополнительныеСведенияПанельНавигации - - View - true - - DataProcessor.ПомощникСозданияОбменаДанными.Attribute.ПарольАрхиваСообщенияОбмена @@ -9665,7 +9647,7 @@ - DataProcessor.ОбновлениеКонфигурации.Attribute.ИмяКаталогаРезервнойКопииИБ + DataProcessor.ПоискИУстановкаОбновлений.Attribute.ИмяКаталогаРезервнойКопииИБ View false @@ -10072,7 +10054,7 @@ - DataProcessor.ОбновлениеКонфигурации.Attribute.ИмяФайлаОбновления + DataProcessor.ПоискИУстановкаОбновлений.Attribute.ИмяФайлаОбновления View false @@ -10545,7 +10527,7 @@ - DataProcessor.ОбновлениеКонфигурации.TabularSection.ДоступныеОбновления.Attribute.РазмерФайлаОбновления + DataProcessor.ПоискИУстановкаОбновлений.TabularSection.ДоступныеОбновления.Attribute.РазмерФайлаОбновления View false @@ -10655,7 +10637,7 @@ - DataProcessor.ОбновлениеКонфигурации.Attribute.РасписаниеПроверкиНаличияОбновления + DataProcessor.ПоискИУстановкаОбновлений.Attribute.РасписаниеПроверкиНаличияОбновления View false @@ -10926,7 +10908,7 @@ - DataProcessor.ОбновлениеКонфигурации.TabularSection.ДоступныеОбновления.Attribute.ВерсияДляОбновления + DataProcessor.ПоискИУстановкаОбновлений.TabularSection.ДоступныеОбновления.Attribute.ВерсияДляОбновления View false @@ -11146,7 +11128,7 @@ - Catalog.ГруппыВнешнихПользователей.Attribute.ТипОбъектовАвторизации + Catalog.ГруппыВнешнихПользователей.Attribute.УдалитьТипОбъектовАвторизации View false @@ -11234,7 +11216,7 @@ - DataProcessor.ОбновлениеКонфигурации.TabularSection.ДоступныеОбновления.Attribute.Версия4Разряд + DataProcessor.ПоискИУстановкаОбновлений.TabularSection.ДоступныеОбновления.Attribute.Версия4Разряд View false @@ -11509,7 +11491,7 @@ - DataProcessor.ОбновлениеКонфигурации.Attribute.ПовторныйЗапуск + DataProcessor.ПоискИУстановкаОбновлений.Attribute.ПовторныйЗапуск View false @@ -11542,7 +11524,7 @@ - InformationRegister.НастройкиТранспортаОбмена.Resource.ПарольАрхиваСообщенияОбмена + InformationRegister.НастройкиТранспортаОбмена.Resource.УдалитьПарольАрхиваСообщенияОбмена View false @@ -11828,7 +11810,7 @@ - DataProcessor.ОбновлениеКонфигурации.TabularSection.ДоступныеОбновления.Attribute.ЛокальныйОтносительныйКаталог + DataProcessor.ПоискИУстановкаОбновлений.TabularSection.ДоступныеОбновления.Attribute.ЛокальныйОтносительныйКаталог View false @@ -11872,7 +11854,7 @@ - DataProcessor.ОбновлениеКонфигурации.Attribute.ТехническаяИнформацияОбОшибке + DataProcessor.ПоискИУстановкаОбновлений.Attribute.ТехническаяИнформацияОбОшибке View false @@ -11938,7 +11920,7 @@ - DataProcessor.ОбновлениеКонфигурации.TabularSection.ДоступныеОбновления.Attribute.Версия1Разряд + DataProcessor.ПоискИУстановкаОбновлений.TabularSection.ДоступныеОбновления.Attribute.Версия1Разряд View false @@ -12187,7 +12169,7 @@ - DataProcessor.ОбновлениеКонфигурации.Attribute.ПарольСервераОбновлений + DataProcessor.ПоискИУстановкаОбновлений.Attribute.ПарольСервераОбновлений View false @@ -13206,7 +13188,7 @@ - DataProcessor.ОбновлениеКонфигурации.TabularSection.ДоступныеОбновления.Attribute.Версия3Разряд + DataProcessor.ПоискИУстановкаОбновлений.TabularSection.ДоступныеОбновления.Attribute.Версия3Разряд View false @@ -13415,7 +13397,7 @@ - InformationRegister.НастройкиТранспортаОбмена.Resource.FTPСоединениеПароль + InformationRegister.НастройкиТранспортаОбмена.Resource.УдалитьFTPСоединениеПароль View false @@ -13569,7 +13551,7 @@ - DataProcessor.ОбновлениеКонфигурации.Attribute.НуженФайлОбновления + DataProcessor.ПоискИУстановкаОбновлений.Attribute.НуженФайлОбновления View false @@ -13767,7 +13749,7 @@ - DataProcessor.ОбновлениеКонфигурации.Attribute.АдресЭлектроннойПочты + DataProcessor.ПоискИУстановкаОбновлений.Attribute.АдресЭлектроннойПочты View false @@ -14350,7 +14332,7 @@ - DataProcessor.ОбновлениеКонфигурации.Attribute.ПроверятьНаличиеОбновленияПриЗапуске + DataProcessor.ПоискИУстановкаОбновлений.Attribute.ПроверятьНаличиеОбновленияПриЗапуске View false @@ -14900,7 +14882,7 @@ - DataProcessor.ОбновлениеКонфигурации.Attribute.ВыслатьОтчетНаПочту + DataProcessor.ПоискИУстановкаОбновлений.Attribute.ВыслатьОтчетНаПочту View false @@ -15087,7 +15069,7 @@ - DataProcessor.ОбновлениеКонфигурации.TabularSection.ДоступныеОбновления.Attribute.Версия + DataProcessor.ПоискИУстановкаОбновлений.TabularSection.ДоступныеОбновления.Attribute.Версия View false @@ -15285,7 +15267,7 @@ - DataProcessor.ОбновлениеКонфигурации.Attribute.СоздаватьРезервнуюКопию + DataProcessor.ПоискИУстановкаОбновлений.Attribute.СоздаватьРезервнуюКопию View false @@ -15428,7 +15410,7 @@ - DataProcessor.ОбновлениеКонфигурации.TabularSection.ДоступныеОбновления.Attribute.ПутьКЛокальномуФайлу + DataProcessor.ПоискИУстановкаОбновлений.TabularSection.ДоступныеОбновления.Attribute.ПутьКЛокальномуФайлу View false @@ -15611,7 +15593,7 @@ - DataProcessor.ОбновлениеКонфигурации.TabularSection.ДоступныеОбновления.Attribute.ПутьКФайлуОбновления + DataProcessor.ПоискИУстановкаОбновлений.TabularSection.ДоступныеОбновления.Attribute.ПутьКФайлуОбновления View false @@ -15698,17 +15680,6 @@ false - - Catalog.ГруппыДоступа.Attribute.ТипПользователей - - View - false - - - Edit - false - - Catalog.ЗапланированноеВзаимодействиеПрисоединенныеФайлы.TabularSection.ЭлектронныеПодписи.Attribute.Комментарий @@ -15787,7 +15758,7 @@ - DataProcessor.ОбновлениеКонфигурации.TabularSection.ДоступныеОбновления.Attribute.Поставщик + DataProcessor.ПоискИУстановкаОбновлений.TabularSection.ДоступныеОбновления.Attribute.Поставщик View false @@ -15798,7 +15769,7 @@ - DataProcessor.ОбновлениеКонфигурации.TabularSection.ДоступныеОбновления.Attribute.Конфигурация + DataProcessor.ПоискИУстановкаОбновлений.TabularSection.ДоступныеОбновления.Attribute.Конфигурация View false diff --git a/SSL/src/Roles/ЧтениеЗаданий/Rights.rights b/SSL/src/Roles/ЧтениеЗаданий/Rights.rights index 4059112d8..466052c08 100644 --- a/SSL/src/Roles/ЧтениеЗаданий/Rights.rights +++ b/SSL/src/Roles/ЧтениеЗаданий/Rights.rights @@ -111,8 +111,8 @@ "", "", "Пользователи","Т.Автор","ИЛИ", -"Пользователи","Т.Исполнитель","ИЛИ", -"Пользователи","Т.Проверяющий","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","") +"Пользователи","Т.ГруппаИсполнителейЗадач","ИЛИ", +"Пользователи","Т.ГруппаИсполнителейЗадачПроверяющий","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","") diff --git a/SSL/src/Roles/ЧтениеКурсовВалют/Rights.rights b/SSL/src/Roles/ЧтениеКурсовВалют/Rights.rights new file mode 100644 index 000000000..e41572a24 --- /dev/null +++ b/SSL/src/Roles/ЧтениеКурсовВалют/Rights.rights @@ -0,0 +1,32 @@ + + + false + true + false + + InformationRegister.КурсыВалют + + Read + true + + + View + true + + + + Catalog.Валюты + + Read + true + + + View + true + + + InputByString + true + + + diff --git a/SSL/src/Roles/ЧтениеКурсовВалют/ЧтениеКурсовВалют.mdo b/SSL/src/Roles/ЧтениеКурсовВалют/ЧтениеКурсовВалют.mdo new file mode 100644 index 000000000..cf1f21c62 --- /dev/null +++ b/SSL/src/Roles/ЧтениеКурсовВалют/ЧтениеКурсовВалют.mdo @@ -0,0 +1,8 @@ + + + ЧтениеКурсовВалют + + ru + Чтение курсов валют + + diff --git a/SSL/src/Roles/ЧтениеОбщейБазовойНСИ/ЧтениеОбщейБазовойНСИ.mdo b/SSL/src/Roles/ЧтениеОбщейБазовойНСИ/ЧтениеОбщейБазовойНСИ.mdo deleted file mode 100644 index 8e09f7543..000000000 --- a/SSL/src/Roles/ЧтениеОбщейБазовойНСИ/ЧтениеОбщейБазовойНСИ.mdo +++ /dev/null @@ -1,8 +0,0 @@ - - - ЧтениеОбщейБазовойНСИ - - ru - Чтение общей базовой нормативно-справочной информации - - diff --git a/SSL/src/Roles/ЧтениеОтветовНаВопросыАнкет/Rights.rights b/SSL/src/Roles/ЧтениеОтветовНаВопросыАнкет/Rights.rights index 9c4984690..af90da087 100644 --- a/SSL/src/Roles/ЧтениеОтветовНаВопросыАнкет/Rights.rights +++ b/SSL/src/Roles/ЧтениеОтветовНаВопросыАнкет/Rights.rights @@ -928,7 +928,7 @@ - Catalog.УчетныеЗаписиЭлектроннойПочты.Attribute.Пароль + Catalog.УчетныеЗаписиЭлектроннойПочты.Attribute.УдалитьПароль View false @@ -1577,7 +1577,7 @@ - Catalog.УчетныеЗаписиЭлектроннойПочты.Attribute.ПарольSMTP + Catalog.УчетныеЗаписиЭлектроннойПочты.Attribute.УдалитьПарольSMTP View false @@ -3107,7 +3107,7 @@ - DataProcessor.ОбновлениеКонфигурации.Attribute.ИсточникОбновления + DataProcessor.ПоискИУстановкаОбновлений.Attribute.ИсточникОбновления View false @@ -3202,7 +3202,7 @@ - DataProcessor.ОбновлениеКонфигурации.TabularSection.ДоступныеОбновления.Attribute.Версия2Разряд + DataProcessor.ПоискИУстановкаОбновлений.TabularSection.ДоступныеОбновления.Attribute.Версия2Разряд View false @@ -3220,7 +3220,7 @@ - DataProcessor.ОбновлениеКонфигурации.Attribute.РезультатОбновления + DataProcessor.ПоискИУстановкаОбновлений.Attribute.РезультатОбновления View false @@ -3478,7 +3478,7 @@ - DataProcessor.ОбновлениеКонфигурации.Attribute.КодПользователяСервераОбновлений + DataProcessor.ПоискИУстановкаОбновлений.Attribute.КодПользователяСервераОбновлений View false @@ -3903,7 +3903,7 @@ - DataProcessor.ОбновлениеКонфигурации.TabularSection.ДоступныеОбновления.Attribute.ФайлОбновления + DataProcessor.ПоискИУстановкаОбновлений.TabularSection.ДоступныеОбновления.Attribute.ФайлОбновления View false @@ -4019,7 +4019,7 @@ - DataProcessor.ОбновлениеКонфигурации.Attribute.КодЗадачиПланировщика + DataProcessor.ПоискИУстановкаОбновлений.Attribute.КодЗадачиПланировщика View false @@ -4759,7 +4759,7 @@ - DataProcessor.ОбновлениеКонфигурации.TabularSection.ДоступныеОбновления.Attribute.НомерДискаИТС + DataProcessor.ПоискИУстановкаОбновлений.TabularSection.ДоступныеОбновления.Attribute.НомерДискаИТС View false @@ -4924,7 +4924,7 @@ - DataProcessor.ОбновлениеКонфигурации.TabularSection.ДоступныеОбновления + DataProcessor.ПоискИУстановкаОбновлений.TabularSection.ДоступныеОбновления View false @@ -5979,7 +5979,7 @@ - DataProcessor.ОбновлениеКонфигурации.Attribute.ДатаВремяОбновления + DataProcessor.ПоискИУстановкаОбновлений.Attribute.ДатаВремяОбновления View false @@ -5990,7 +5990,7 @@ - DataProcessor.ПомощникСозданияОбменаДанными.Attribute.ИмяФайлаНастроекОбменаДаннымиДляЗагрузки + DataProcessor.ПомощникСозданияОбменаДанными.Attribute.ИмяФайлаНастроекСинхронизацииДанныхДляЗагрузки View false @@ -6373,17 +6373,6 @@ false - - InformationRegister.НазначениеДополнительныхОбработок.Resource.ИспользоватьПечатныеФормы - - View - false - - - Edit - false - - Catalog.СценарииОбменовДанными.TabularSection.НастройкиОбмена.Attribute.УзелИнформационнойБазы @@ -7085,7 +7074,7 @@ - DataProcessor.ОбновлениеКонфигурации.Attribute.РежимОбновления + DataProcessor.ПоискИУстановкаОбновлений.Attribute.РежимОбновления View false @@ -7604,7 +7593,7 @@ - DataProcessor.ПомощникСозданияОбменаДанными.Attribute.ИмяФайлаНастроекОбменаДанными + DataProcessor.ПомощникСозданияОбменаДанными.Attribute.ИмяФайлаНастроекСинхронизацииДанных View false @@ -8351,7 +8340,7 @@ - DataProcessor.ОбновлениеКонфигурации.Attribute.ИспользоватьРасписаниеДляПроверкиОбновления + DataProcessor.ПоискИУстановкаОбновлений.Attribute.ИспользоватьРасписаниеДляПроверкиОбновления View false @@ -8362,7 +8351,7 @@ - DataProcessor.ОбновлениеКонфигурации.Attribute.ЗапомнитьПарольСервераОбновлений + DataProcessor.ПоискИУстановкаОбновлений.Attribute.ЗапомнитьПарольСервераОбновлений View false @@ -8724,7 +8713,7 @@ - DataProcessor.ОбновлениеКонфигурации.Attribute.ВосстанавливатьИнформационнуюБазу + DataProcessor.ПоискИУстановкаОбновлений.Attribute.ВосстанавливатьИнформационнуюБазу View false @@ -8768,7 +8757,7 @@ - DataProcessor.ОбновлениеКонфигурации.TabularSection.ДоступныеОбновления.Attribute.ПутьКЛокальномуФайлуОбновления + DataProcessor.ПоискИУстановкаОбновлений.TabularSection.ДоступныеОбновления.Attribute.ПутьКЛокальномуФайлуОбновления View false @@ -9468,7 +9457,7 @@ - DataProcessor.ОбновлениеКонфигурации.Attribute.ИмяКаталогаРезервнойКопииИБ + DataProcessor.ПоискИУстановкаОбновлений.Attribute.ИмяКаталогаРезервнойКопииИБ View false @@ -9867,7 +9856,7 @@ - DataProcessor.ОбновлениеКонфигурации.Attribute.ИмяФайлаОбновления + DataProcessor.ПоискИУстановкаОбновлений.Attribute.ИмяФайлаОбновления View false @@ -10336,7 +10325,7 @@ - DataProcessor.ОбновлениеКонфигурации.TabularSection.ДоступныеОбновления.Attribute.РазмерФайлаОбновления + DataProcessor.ПоискИУстановкаОбновлений.TabularSection.ДоступныеОбновления.Attribute.РазмерФайлаОбновления View false @@ -10446,7 +10435,7 @@ - DataProcessor.ОбновлениеКонфигурации.Attribute.РасписаниеПроверкиНаличияОбновления + DataProcessor.ПоискИУстановкаОбновлений.Attribute.РасписаниеПроверкиНаличияОбновления View false @@ -10717,7 +10706,7 @@ - DataProcessor.ОбновлениеКонфигурации.TabularSection.ДоступныеОбновления.Attribute.ВерсияДляОбновления + DataProcessor.ПоискИУстановкаОбновлений.TabularSection.ДоступныеОбновления.Attribute.ВерсияДляОбновления View false @@ -10929,7 +10918,7 @@ - Catalog.ГруппыВнешнихПользователей.Attribute.ТипОбъектовАвторизации + Catalog.ГруппыВнешнихПользователей.Attribute.УдалитьТипОбъектовАвторизации View false @@ -11017,7 +11006,7 @@ - DataProcessor.ОбновлениеКонфигурации.TabularSection.ДоступныеОбновления.Attribute.Версия4Разряд + DataProcessor.ПоискИУстановкаОбновлений.TabularSection.ДоступныеОбновления.Attribute.Версия4Разряд View false @@ -11303,7 +11292,7 @@ - DataProcessor.ОбновлениеКонфигурации.Attribute.ПовторныйЗапуск + DataProcessor.ПоискИУстановкаОбновлений.Attribute.ПовторныйЗапуск View false @@ -11336,7 +11325,7 @@ - InformationRegister.НастройкиТранспортаОбмена.Resource.ПарольАрхиваСообщенияОбмена + InformationRegister.НастройкиТранспортаОбмена.Resource.УдалитьПарольАрхиваСообщенияОбмена View false @@ -11618,7 +11607,7 @@ - DataProcessor.ОбновлениеКонфигурации.TabularSection.ДоступныеОбновления.Attribute.ЛокальныйОтносительныйКаталог + DataProcessor.ПоискИУстановкаОбновлений.TabularSection.ДоступныеОбновления.Attribute.ЛокальныйОтносительныйКаталог View false @@ -11662,7 +11651,7 @@ - DataProcessor.ОбновлениеКонфигурации.Attribute.ТехническаяИнформацияОбОшибке + DataProcessor.ПоискИУстановкаОбновлений.Attribute.ТехническаяИнформацияОбОшибке View false @@ -11728,7 +11717,7 @@ - DataProcessor.ОбновлениеКонфигурации.TabularSection.ДоступныеОбновления.Attribute.Версия1Разряд + DataProcessor.ПоискИУстановкаОбновлений.TabularSection.ДоступныеОбновления.Attribute.Версия1Разряд View false @@ -11970,7 +11959,7 @@ - DataProcessor.ОбновлениеКонфигурации.Attribute.ПарольСервераОбновлений + DataProcessor.ПоискИУстановкаОбновлений.Attribute.ПарольСервераОбновлений View false @@ -12961,7 +12950,7 @@ - DataProcessor.ОбновлениеКонфигурации.TabularSection.ДоступныеОбновления.Attribute.Версия3Разряд + DataProcessor.ПоискИУстановкаОбновлений.TabularSection.ДоступныеОбновления.Attribute.Версия3Разряд View false @@ -13166,7 +13155,7 @@ - InformationRegister.НастройкиТранспортаОбмена.Resource.FTPСоединениеПароль + InformationRegister.НастройкиТранспортаОбмена.Resource.УдалитьFTPСоединениеПароль View false @@ -13316,7 +13305,7 @@ - DataProcessor.ОбновлениеКонфигурации.Attribute.НуженФайлОбновления + DataProcessor.ПоискИУстановкаОбновлений.Attribute.НуженФайлОбновления View false @@ -13506,7 +13495,7 @@ - DataProcessor.ОбновлениеКонфигурации.Attribute.АдресЭлектроннойПочты + DataProcessor.ПоискИУстановкаОбновлений.Attribute.АдресЭлектроннойПочты View false @@ -14083,7 +14072,7 @@ - DataProcessor.ОбновлениеКонфигурации.Attribute.ПроверятьНаличиеОбновленияПриЗапуске + DataProcessor.ПоискИУстановкаОбновлений.Attribute.ПроверятьНаличиеОбновленияПриЗапуске View false @@ -14633,7 +14622,7 @@ - DataProcessor.ОбновлениеКонфигурации.Attribute.ВыслатьОтчетНаПочту + DataProcessor.ПоискИУстановкаОбновлений.Attribute.ВыслатьОтчетНаПочту View false @@ -14816,7 +14805,7 @@ - DataProcessor.ОбновлениеКонфигурации.TabularSection.ДоступныеОбновления.Attribute.Версия + DataProcessor.ПоискИУстановкаОбновлений.TabularSection.ДоступныеОбновления.Attribute.Версия View false @@ -15014,7 +15003,7 @@ - DataProcessor.ОбновлениеКонфигурации.Attribute.СоздаватьРезервнуюКопию + DataProcessor.ПоискИУстановкаОбновлений.Attribute.СоздаватьРезервнуюКопию View false @@ -15157,7 +15146,7 @@ - DataProcessor.ОбновлениеКонфигурации.TabularSection.ДоступныеОбновления.Attribute.ПутьКЛокальномуФайлу + DataProcessor.ПоискИУстановкаОбновлений.TabularSection.ДоступныеОбновления.Attribute.ПутьКЛокальномуФайлу View false @@ -15325,7 +15314,7 @@ - DataProcessor.ОбновлениеКонфигурации.TabularSection.ДоступныеОбновления.Attribute.ПутьКФайлуОбновления + DataProcessor.ПоискИУстановкаОбновлений.TabularSection.ДоступныеОбновления.Attribute.ПутьКФайлуОбновления View false @@ -15408,17 +15397,6 @@ false - - Catalog.ГруппыДоступа.Attribute.ТипПользователей - - View - false - - - Edit - false - - Catalog.ЗапланированноеВзаимодействиеПрисоединенныеФайлы.TabularSection.ЭлектронныеПодписи.Attribute.Комментарий @@ -15497,7 +15475,7 @@ - DataProcessor.ОбновлениеКонфигурации.TabularSection.ДоступныеОбновления.Attribute.Поставщик + DataProcessor.ПоискИУстановкаОбновлений.TabularSection.ДоступныеОбновления.Attribute.Поставщик View false @@ -15508,7 +15486,7 @@ - DataProcessor.ОбновлениеКонфигурации.TabularSection.ДоступныеОбновления.Attribute.Конфигурация + DataProcessor.ПоискИУстановкаОбновлений.TabularSection.ДоступныеОбновления.Attribute.Конфигурация View false diff --git a/SSL/src/ScheduledJobs/ПересчетТекущихЗначенийОтносительныхДатЗапретаИзменения/Schedule.schedule b/SSL/src/ScheduledJobs/КонтрольАктивностиПользователей/Schedule.schedule similarity index 100% rename from SSL/src/ScheduledJobs/ПересчетТекущихЗначенийОтносительныхДатЗапретаИзменения/Schedule.schedule rename to SSL/src/ScheduledJobs/КонтрольАктивностиПользователей/Schedule.schedule diff --git a/SSL/src/ScheduledJobs/КонтрольАктивностиПользователей/КонтрольАктивностиПользователей.mdo b/SSL/src/ScheduledJobs/КонтрольАктивностиПользователей/КонтрольАктивностиПользователей.mdo new file mode 100644 index 000000000..bf79da733 --- /dev/null +++ b/SSL/src/ScheduledJobs/КонтрольАктивностиПользователей/КонтрольАктивностиПользователей.mdo @@ -0,0 +1,11 @@ + + + КонтрольАктивностиПользователей + + ru + Контроль активности пользователей + + CommonModule.ПользователиСлужебный.КонтрольАктивностиПользователей + true + 90 + diff --git a/SSL/src/ScheduledJobs/ОбновлениеИндексаППД/ОбновлениеИндексаППД.mdo b/SSL/src/ScheduledJobs/ОбновлениеИндексаППД/ОбновлениеИндексаППД.mdo index 755a9e001..858b53951 100644 --- a/SSL/src/ScheduledJobs/ОбновлениеИндексаППД/ОбновлениеИндексаППД.mdo +++ b/SSL/src/ScheduledJobs/ОбновлениеИндексаППД/ОбновлениеИндексаППД.mdo @@ -7,7 +7,6 @@ CommonModule.ПолнотекстовыйПоискСервер.ОбновлениеИндексаППДПоРасписанию Обновление индекса ППД - true true 3 10 diff --git a/SSL/src/ScheduledJobs/ОбновлениеСтатусовДоставкиSMS/ОбновлениеСтатусовДоставкиSMS.mdo b/SSL/src/ScheduledJobs/ОбновлениеСтатусовДоставкиSMS/ОбновлениеСтатусовДоставкиSMS.mdo index 63b875624..6b2f4c611 100644 --- a/SSL/src/ScheduledJobs/ОбновлениеСтатусовДоставкиSMS/ОбновлениеСтатусовДоставкиSMS.mdo +++ b/SSL/src/ScheduledJobs/ОбновлениеСтатусовДоставкиSMS/ОбновлениеСтатусовДоставкиSMS.mdo @@ -7,7 +7,6 @@ CommonModule.Взаимодействия.ОбновлениеСтатусовДоставкиSMS Обновление статусов доставки SMS - true true 3 10 diff --git a/SSL/src/ScheduledJobs/ОтправкаSMS/ОтправкаSMS.mdo b/SSL/src/ScheduledJobs/ОтправкаSMS/ОтправкаSMS.mdo index c3ff3733c..9d8b9e3bd 100644 --- a/SSL/src/ScheduledJobs/ОтправкаSMS/ОтправкаSMS.mdo +++ b/SSL/src/ScheduledJobs/ОтправкаSMS/ОтправкаSMS.mdo @@ -7,7 +7,6 @@ CommonModule.Взаимодействия.ОтправкаSMS Отправка SMS - true true 3 10 diff --git a/SSL/src/ScheduledJobs/ОчисткаНенужныхФайлов/Schedule.schedule b/SSL/src/ScheduledJobs/ОчисткаНенужныхФайлов/Schedule.schedule new file mode 100644 index 000000000..6642d83ff --- /dev/null +++ b/SSL/src/ScheduledJobs/ОчисткаНенужныхФайлов/Schedule.schedule @@ -0,0 +1,17 @@ + + + Sat + Sun + Jan + Feb + Mar + Apr + May + Jun + Jul + Aug + Sep + Oct + Nov + Dec + diff --git a/SSL/src/ScheduledJobs/ОчисткаНенужныхФайлов/ОчисткаНенужныхФайлов.mdo b/SSL/src/ScheduledJobs/ОчисткаНенужныхФайлов/ОчисткаНенужныхФайлов.mdo new file mode 100644 index 000000000..90f382e05 --- /dev/null +++ b/SSL/src/ScheduledJobs/ОчисткаНенужныхФайлов/ОчисткаНенужныхФайлов.mdo @@ -0,0 +1,13 @@ + + + ОчисткаНенужныхФайлов + + ru + Очистка ненужных файлов + + CommonModule.ФайловыеФункцииСлужебный.ОчиститьНенужныеФайлы + Очистка ненужных файлов + true + 3 + 10 + diff --git a/SSL/src/ScheduledJobs/ПересчетТекущихЗначенийОтносительныхДатЗапретаИзменения/ПересчетТекущихЗначенийОтносительныхДатЗапретаИзменения.mdo b/SSL/src/ScheduledJobs/ПересчетТекущихЗначенийОтносительныхДатЗапретаИзменения/ПересчетТекущихЗначенийОтносительныхДатЗапретаИзменения.mdo deleted file mode 100644 index 84e91d45d..000000000 --- a/SSL/src/ScheduledJobs/ПересчетТекущихЗначенийОтносительныхДатЗапретаИзменения/ПересчетТекущихЗначенийОтносительныхДатЗапретаИзменения.mdo +++ /dev/null @@ -1,14 +0,0 @@ - - - ПересчетТекущихЗначенийОтносительныхДатЗапретаИзменения - - ru - Пересчет текущих значений относительных дат запрета изменения - - CommonModule.ДатыЗапретаИзмененияСлужебный.ПересчетТекущихЗначенийОтносительныхДатЗапретаИзменения - Пересчет текущих значений относительных дат запрета изменения - true - true - 3 - 10 - diff --git a/SSL/src/ScheduledJobs/ПолучениеИОтправкаЭлектронныхПисем/ПолучениеИОтправкаЭлектронныхПисем.mdo b/SSL/src/ScheduledJobs/ПолучениеИОтправкаЭлектронныхПисем/ПолучениеИОтправкаЭлектронныхПисем.mdo index 04c8d85aa..2c4dcc420 100644 --- a/SSL/src/ScheduledJobs/ПолучениеИОтправкаЭлектронныхПисем/ПолучениеИОтправкаЭлектронныхПисем.mdo +++ b/SSL/src/ScheduledJobs/ПолучениеИОтправкаЭлектронныхПисем/ПолучениеИОтправкаЭлектронныхПисем.mdo @@ -7,7 +7,6 @@ CommonModule.УправлениеЭлектроннойПочтой.ПолучениеИОтправкаЭлектронныхПисем Получение и отправка электронных писем - true true 3 10 diff --git a/SSL/src/ScheduledJobs/СборИОтправкаСтатистики/СборИОтправкаСтатистики.mdo b/SSL/src/ScheduledJobs/СборИОтправкаСтатистики/СборИОтправкаСтатистики.mdo new file mode 100644 index 000000000..6ca75ad59 --- /dev/null +++ b/SSL/src/ScheduledJobs/СборИОтправкаСтатистики/СборИОтправкаСтатистики.mdo @@ -0,0 +1,14 @@ + + + СборИОтправкаСтатистики + + ru + Сбор и отправка статистики + + CommonModule.ЦентрМониторингаСлужебный.ЦентрМониторингаРегламентноеЗадание + Сбор и отправка статистики + 9f003c2c-0c76-4329-9244-4ab3c7b845b0 + true + 3 + 10 + diff --git a/SSL/src/ScheduledJobs/СлияниеИндексаППД/СлияниеИндексаППД.mdo b/SSL/src/ScheduledJobs/СлияниеИндексаППД/СлияниеИндексаППД.mdo index 3f42ed9b2..9edb7076d 100644 --- a/SSL/src/ScheduledJobs/СлияниеИндексаППД/СлияниеИндексаППД.mdo +++ b/SSL/src/ScheduledJobs/СлияниеИндексаППД/СлияниеИндексаППД.mdo @@ -7,7 +7,6 @@ CommonModule.ПолнотекстовыйПоискСервер.СлияниеИндексаППДПоРасписанию Слияние индекса ППД - true true 3 10 diff --git a/SSL/src/ScheduledJobs/УведомлениеИсполнителейОНовыхЗадачах/УведомлениеИсполнителейОНовыхЗадачах.mdo b/SSL/src/ScheduledJobs/УведомлениеИсполнителейОНовыхЗадачах/УведомлениеИсполнителейОНовыхЗадачах.mdo index ae454e2b3..3bd5bbbf3 100644 --- a/SSL/src/ScheduledJobs/УведомлениеИсполнителейОНовыхЗадачах/УведомлениеИсполнителейОНовыхЗадачах.mdo +++ b/SSL/src/ScheduledJobs/УведомлениеИсполнителейОНовыхЗадачах/УведомлениеИсполнителейОНовыхЗадачах.mdo @@ -7,7 +7,6 @@ CommonModule.БизнесПроцессыИЗадачиВызовСервера.УведомитьИсполнителейОНовыхЗадачах Уведомление исполнителей о новых задачах - true true 3 10 diff --git a/SSL/src/ScheduledJobs/УдалениеНеактуальнойИнформацииСинхронизации/УдалениеНеактуальнойИнформацииСинхронизации.mdo b/SSL/src/ScheduledJobs/УдалениеНеактуальнойИнформацииСинхронизации/УдалениеНеактуальнойИнформацииСинхронизации.mdo index 7e1e17faa..57bb84e62 100644 --- a/SSL/src/ScheduledJobs/УдалениеНеактуальнойИнформацииСинхронизации/УдалениеНеактуальнойИнформацииСинхронизации.mdo +++ b/SSL/src/ScheduledJobs/УдалениеНеактуальнойИнформацииСинхронизации/УдалениеНеактуальнойИнформацииСинхронизации.mdo @@ -8,7 +8,6 @@ Выполняет удаление информации синхронизации, которая не была удалена из-за сбоев в работе программы. Удалению подлежат файлы с датой размещения более суток. CommonModule.ОбменДаннымиСервер.УдалитьНеактуальныеСообщенияОбмена Удаление неактуальной информации синхронизации - true true 3 10 diff --git a/SSL/src/ScheduledJobs/УдалениеУстаревшихПараметровРаботыВерсийРасширений/Schedule.schedule b/SSL/src/ScheduledJobs/УдалениеУстаревшихПараметровРаботыВерсийРасширений/Schedule.schedule new file mode 100644 index 000000000..5e262b732 --- /dev/null +++ b/SSL/src/ScheduledJobs/УдалениеУстаревшихПараметровРаботыВерсийРасширений/Schedule.schedule @@ -0,0 +1,22 @@ + + + Mon + Tue + Wed + Thu + Fri + Sat + Sun + Jan + Feb + Mar + Apr + May + Jun + Jul + Aug + Sep + Oct + Nov + Dec + diff --git a/SSL/src/ScheduledJobs/УдалениеУстаревшихПараметровРаботыВерсийРасширений/УдалениеУстаревшихПараметровРаботыВерсийРасширений.mdo b/SSL/src/ScheduledJobs/УдалениеУстаревшихПараметровРаботыВерсийРасширений/УдалениеУстаревшихПараметровРаботыВерсийРасширений.mdo new file mode 100644 index 000000000..2645d9282 --- /dev/null +++ b/SSL/src/ScheduledJobs/УдалениеУстаревшихПараметровРаботыВерсийРасширений/УдалениеУстаревшихПараметровРаботыВерсийРасширений.mdo @@ -0,0 +1,13 @@ + + + УдалениеУстаревшихПараметровРаботыВерсийРасширений + + ru + Удаление устаревших параметров работы версий расширений + + CommonModule.СтандартныеПодсистемыСервер.УдалениеУстаревшихПараметровРаботыВерсийРасширенийОбработчикЗадания + Удаление устаревших параметров работы версий расширений + true + 3 + 10 + diff --git a/SSL/src/SessionParameters/АдресСвойствРасширений/АдресСвойствРасширений.mdo b/SSL/src/SessionParameters/АдресСвойствРасширений/АдресСвойствРасширений.mdo new file mode 100644 index 000000000..c5532ef10 --- /dev/null +++ b/SSL/src/SessionParameters/АдресСвойствРасширений/АдресСвойствРасширений.mdo @@ -0,0 +1,12 @@ + + + АдресСвойствРасширений + + ru + Адрес свойств расширений + + + String + + + diff --git a/SSL/src/SessionParameters/ВерсияРасширений/ВерсияРасширений.mdo b/SSL/src/SessionParameters/ВерсияРасширений/ВерсияРасширений.mdo new file mode 100644 index 000000000..52ae21b41 --- /dev/null +++ b/SSL/src/SessionParameters/ВерсияРасширений/ВерсияРасширений.mdo @@ -0,0 +1,11 @@ + + + ВерсияРасширений + + ru + Версия расширений + + + CatalogRef.ВерсииРасширений + + diff --git a/SSL/src/SessionParameters/ДействующиеДатыЗапретаИзменения/ДействующиеДатыЗапретаИзменения.mdo b/SSL/src/SessionParameters/ДействующиеДатыЗапретаИзменения/ДействующиеДатыЗапретаИзменения.mdo new file mode 100644 index 000000000..50523f114 --- /dev/null +++ b/SSL/src/SessionParameters/ДействующиеДатыЗапретаИзменения/ДействующиеДатыЗапретаИзменения.mdo @@ -0,0 +1,11 @@ + + + ДействующиеДатыЗапретаИзменения + + ru + Действующие даты запрета изменения + + + FixedStructure + + diff --git a/SSL/src/SessionParameters/КомментарийЗамераВремени/КомментарийЗамераВремени.mdo b/SSL/src/SessionParameters/КомментарийЗамераВремени/КомментарийЗамераВремени.mdo new file mode 100644 index 000000000..f95804a25 --- /dev/null +++ b/SSL/src/SessionParameters/КомментарийЗамераВремени/КомментарийЗамераВремени.mdo @@ -0,0 +1,14 @@ + + + КомментарийЗамераВремени + + ru + Комментарий замера времени + + + String + + 256 + + + diff --git a/SSL/src/SessionParameters/ОбновитьВерсиюДатЗапретаИзмененияПослеЗагрузкиДанных/ОбновитьВерсиюДатЗапретаИзмененияПослеЗагрузкиДанных.mdo b/SSL/src/SessionParameters/ОбновитьВерсиюДатЗапретаИзмененияПослеЗагрузкиДанных/ОбновитьВерсиюДатЗапретаИзмененияПослеЗагрузкиДанных.mdo new file mode 100644 index 000000000..9cc272636 --- /dev/null +++ b/SSL/src/SessionParameters/ОбновитьВерсиюДатЗапретаИзмененияПослеЗагрузкиДанных/ОбновитьВерсиюДатЗапретаИзмененияПослеЗагрузкиДанных.mdo @@ -0,0 +1,11 @@ + + + ОбновитьВерсиюДатЗапретаИзмененияПослеЗагрузкиДанных + + ru + Обновить версию дат запрета изменения после загрузки данных + + + Boolean + + diff --git a/SSL/src/SessionParameters/ПараметрыСеансаСинхронизацииДанных/ПараметрыСеансаСинхронизацииДанных.mdo b/SSL/src/SessionParameters/ПараметрыСеансаСинхронизацииДанных/ПараметрыСеансаСинхронизацииДанных.mdo new file mode 100644 index 000000000..1db818551 --- /dev/null +++ b/SSL/src/SessionParameters/ПараметрыСеансаСинхронизацииДанных/ПараметрыСеансаСинхронизацииДанных.mdo @@ -0,0 +1,11 @@ + + + ПараметрыСеансаСинхронизацииДанных + + ru + Параметры сеанса синхронизации данных + + + ValueStorage + + diff --git a/SSL/src/SessionParameters/УстановленныеРасширения/УстановленныеРасширения.mdo b/SSL/src/SessionParameters/УстановленныеРасширения/УстановленныеРасширения.mdo new file mode 100644 index 000000000..322eab03e --- /dev/null +++ b/SSL/src/SessionParameters/УстановленныеРасширения/УстановленныеРасширения.mdo @@ -0,0 +1,12 @@ + + + УстановленныеРасширения + + ru + Установленные расширения + + + String + + + diff --git a/SSL/src/SettingsStorages/ХранилищеВариантовОтчетов/Forms/ВыборВариантаОтчета/Form.form b/SSL/src/SettingsStorages/ХранилищеВариантовОтчетов/Forms/ВыборВариантаОтчета/Form.form index 46631ca14..8e8cd485d 100644 --- a/SSL/src/SettingsStorages/ХранилищеВариантовОтчетов/Forms/ВыборВариантаОтчета/Form.form +++ b/SSL/src/SettingsStorages/ХранилищеВариантовОтчетов/Forms/ВыборВариантаОтчета/Form.form @@ -743,7 +743,6 @@ true true true - UseIfNecessary auto true @@ -1158,7 +1157,7 @@ ПоказыватьЛичныеВариантыОтчетовДругихАвторов - Auto + DontUse Auto @@ -1179,7 +1178,7 @@ StdPicture.ChooseValue TextPicture - Auto + DontUse Auto @@ -1205,7 +1204,7 @@ Обновить - Auto + DontUse Auto diff --git a/SSL/src/SettingsStorages/ХранилищеВариантовОтчетов/Forms/ВыборВариантаОтчета/Help/ru.html b/SSL/src/SettingsStorages/ХранилищеВариантовОтчетов/Forms/ВыборВариантаОтчета/Help/ru.html index 20ba934b1..7017e5eab 100644 --- a/SSL/src/SettingsStorages/ХранилищеВариантовОтчетов/Forms/ВыборВариантаОтчета/Help/ru.html +++ b/SSL/src/SettingsStorages/ХранилищеВариантовОтчетов/Forms/ВыборВариантаОтчета/Help/ru.html @@ -1,10 +1,10 @@

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

        -

        Открывается из формы варианта отчета по команде Еще - Выбрать вариант.

        +

        Открывается из формы варианта отчета по команде Еще - Прочее - Выбрать вариант.

        Для выбора доступны:

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

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

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

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

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

        @@ -16,19 +16,23 @@
        • видна - вариант отчета доступен всем пользователям,
        • -
          не видна - вариант отчета доступен только автору.
        -
      • Автор - полное имя пользователя, который является автором варианта отчета. +
        не видна - вариант отчета доступен только автору.
      • +
      • Автор - полное имя пользователя, который является автором варианта отчета.
      • В нижней части списка выводится Описание - подробная информация о выбранном варианте отчета.
      • Выбор варианта отчета

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

        Отбор

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

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

        +

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

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

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

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

        Администратору/Ответственному за отчеты:

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

        См. также:

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

        См. также:

        \ No newline at end of file diff --git a/SSL/src/SettingsStorages/ХранилищеВариантовОтчетов/Forms/ВыборВариантаОтчета/Module.bsl b/SSL/src/SettingsStorages/ХранилищеВариантовОтчетов/Forms/ВыборВариантаОтчета/Module.bsl index 67f90c9a9..d5b0baf19 100644 --- a/SSL/src/SettingsStorages/ХранилищеВариантовОтчетов/Forms/ВыборВариантаОтчета/Module.bsl +++ b/SSL/src/SettingsStorages/ХранилищеВариантовОтчетов/Forms/ВыборВариантаОтчета/Module.bsl @@ -109,7 +109,7 @@ Иначе ТекстВопроса = НСтр("ru = 'Пометить ""%1"" на удаление?'"); КонецЕсли; - ТекстВопроса = СтрЗаменить(ТекстВопроса, "%1", Вариант.Наименование); + ТекстВопроса = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ТекстВопроса, Вариант.Наименование); ДополнительныеПараметры = Новый Структура; ДополнительныеПараметры.Вставить("Вариант", Вариант); @@ -159,18 +159,18 @@ &НаСервере Процедура УстановитьУсловноеОформление() - Инструкция = ВариантыОтчетов.ИнструкцияУсловногоОформления(); + Инструкция = СтандартныеПодсистемыСервер.ИнструкцияУсловногоОформления(); Инструкция.Поля = "ДеревоВариантовОтчета, ДеревоВариантовОтчетаПредставление, ДеревоВариантовОтчетаАвтор"; Инструкция.Отборы.Вставить("ДеревоВариантовОтчета.СкрытОтбором", Истина); Инструкция.Оформление.Вставить("Видимость", Ложь); Инструкция.Оформление.Вставить("Отображать", Ложь); - ВариантыОтчетов.ДобавитьЭлементУсловногоОформления(ЭтотОбъект, Инструкция); + СтандартныеПодсистемыСервер.ДобавитьЭлементУсловногоОформления(ЭтотОбъект, Инструкция); - Инструкция = ВариантыОтчетов.ИнструкцияУсловногоОформления(); + Инструкция = СтандартныеПодсистемыСервер.ИнструкцияУсловногоОформления(); Инструкция.Поля = "ДеревоВариантовОтчетаПредставление, ДеревоВариантовОтчетаАвтор"; Инструкция.Отборы.Вставить("ДеревоВариантовОтчета.АвторТекущийПользователь", Истина); Инструкция.Оформление.Вставить("ЦветТекста", ЦветаСтиля.МоиВариантыОтчетовЦвет); - ВариантыОтчетов.ДобавитьЭлементУсловногоОформления(ЭтотОбъект, Инструкция); + СтандартныеПодсистемыСервер.ДобавитьЭлементУсловногоОформления(ЭтотОбъект, Инструкция); КонецПроцедуры &НаКлиенте @@ -211,8 +211,8 @@ Возврат; КонецЕсли; Если НЕ ПравоИзмененияВарианта(Вариант, ПолныеПраваНаВарианты) Тогда - ТекстПредупреждения = НСтр("ru = 'Недостаточно прав доступа для изменения варианта ""%1"".'"); - ТекстПредупреждения = СтрЗаменить(ТекстПредупреждения, "%1", Вариант.Наименование); + ТекстПредупреждения = НСтр("ru = 'Недостаточно прав для изменения варианта ""%1"".'"); + ТекстПредупреждения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ТекстПредупреждения, Вариант.Наименование); ПоказатьПредупреждение(, ТекстПредупреждения); Возврат; КонецЕсли; @@ -281,13 +281,24 @@ |//////////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ | ВариантыОтчетов.Ссылка КАК Ссылка, - | ПредопределенныеРазмещение.Подсистема КАК Подсистема + | РазмещениеКонфигурации.Подсистема КАК Подсистема |ПОМЕСТИТЬ втРазмещениеРазработчика |ИЗ | втВарианты КАК ВариантыОтчетов - | ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.ПредопределенныеВариантыОтчетов.Размещение КАК ПредопределенныеРазмещение + | ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.ПредопределенныеВариантыОтчетов.Размещение КАК РазмещениеКонфигурации | ПО (ВариантыОтчетов.Пользовательский = ЛОЖЬ) - | И ВариантыОтчетов.ПредопределенныйВариант = ПредопределенныеРазмещение.Ссылка + | И ВариантыОтчетов.ПредопределенныйВариант = РазмещениеКонфигурации.Ссылка + | + |ОБЪЕДИНИТЬ ВСЕ + | + |ВЫБРАТЬ + | ВариантыОтчетов.Ссылка, + | РазмещениеРасширений.Подсистема + |ИЗ + | втВарианты КАК ВариантыОтчетов + | ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.ПредопределенныеВариантыОтчетовРасширений.Размещение КАК РазмещениеРасширений + | ПО (ВариантыОтчетов.Пользовательский = ЛОЖЬ) + | И ВариантыОтчетов.ПредопределенныйВариант = РазмещениеРасширений.Ссылка |; | |//////////////////////////////////////////////////////////////////////////////// @@ -384,10 +395,11 @@ Попытка ОтчетОбъект = ВнешниеОтчеты.Создать(ОтчетИнформация.ОтчетИмя); Исключение - ВариантыОтчетов.ОшибкаПоВарианту(Неопределено, + ВариантыОтчетов.ОшибкаПоВарианту( + Неопределено, СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Не удалось получить список предопределенных вариантов - |внешнего отчета ""%1"":'"), + |внешнего отчета ""%1"":'"), ОтчетИнформация.ОтчетИмя) + Символы.ПС + ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); diff --git a/SSL/src/SettingsStorages/ХранилищеВариантовОтчетов/Forms/ВыборПоляОтчета/Form.form b/SSL/src/SettingsStorages/ХранилищеВариантовОтчетов/Forms/ВыборПоляОтчета/Form.form index 60dd162be..e528fe0e5 100644 --- a/SSL/src/SettingsStorages/ХранилищеВариантовОтчетов/Forms/ВыборПоляОтчета/Form.form +++ b/SSL/src/SettingsStorages/ХранилищеВариантовОтчетов/Forms/ВыборПоляОтчета/Form.form @@ -1,5 +1,5 @@ - + <key>ru</key> <value>Выбор поля отчета</value> @@ -675,8 +675,11 @@ <horizontalStretch>true</horizontalStretch> <verticalStretch>true</verticalStretch> <rowPictureDataPath xsi:type="form:DataPath"> - <segments>ПоляГруппировки.Картинка</segments> + <segments>ПоляГруппировки.ИндексКартинки</segments> </rowPictureDataPath> + <rowsPicture xsi:type="core:PictureRef"> + <picture>CommonPicture.ПиктограммыНастроекОтчета</picture> + </rowsPicture> <autoMaxCardHeight>true</autoMaxCardHeight> </items> <visible>true</visible> @@ -767,6 +770,10 @@ </items> <horizontalAlign>Left</horizontalAlign> </autoCommandBar> + <handlers> + <event>OnOpen</event> + <name>ПриОткрытии</name> + </handlers> <handlers> <event>OnCreateAtServer</event> <name>ПриСозданииНаСервере</name> @@ -895,14 +902,17 @@ </edit> </columns> <columns> - <name>Картинка</name> + <name>ИндексКартинки</name> <title> <key>ru</key> - <value>Картинка</value> + <value>Индекс картинки</value> 4 - Picture + Number + + 10 + true @@ -1015,7 +1025,7 @@ Выбрать - Auto + DontUse Auto diff --git a/SSL/src/SettingsStorages/ХранилищеВариантовОтчетов/Forms/ВыборПоляОтчета/Module.bsl b/SSL/src/SettingsStorages/ХранилищеВариантовОтчетов/Forms/ВыборПоляОтчета/Module.bsl index 92241ecd4..40456102c 100644 --- a/SSL/src/SettingsStorages/ХранилищеВариантовОтчетов/Forms/ВыборПоляОтчета/Module.bsl +++ b/SSL/src/SettingsStorages/ХранилищеВариантовОтчетов/Forms/ВыборПоляОтчета/Module.bsl @@ -1,3 +1,6 @@ +&НаКлиенте +Перем ПеременныеКлиента; + //////////////////////////////////////////////////////////////////////////////// // СОБЫТИЯ ФОРМЫ @@ -20,7 +23,7 @@ ИначеЕсли Режим = "Отборы" Или Режим = "ВыбранныеПоля" Или Режим = "Сортировка" Или Режим = "ПоляГруппировки" Тогда ИмяТаблицы = Режим; Иначе - ВызватьИсключение СтрЗаменить(НСтр("ru = 'Некорректное значение параметра ""Режим"": ""%1"".'"), "%1", Строка(Режим)); + ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Некорректное значение параметра ""Режим"": ""%1"".'"), Строка(Режим)); КонецЕсли; Если Не Параметры.Свойство("НастройкиОтчета", НастройкиОтчета) Тогда ВызватьИсключение НСтр("ru = 'Не передан служебный параметр ""НастройкиОтчета"".'"); @@ -40,9 +43,9 @@ ЭлементыДерева = ПоляГруппировки.ПолучитьЭлементы(); ПоляГруппировкиРазвернутьСтроку(ТаблицаКД(ЭтотОбъект), ЭлементыДерева); Если Режим = "СтруктураВарианта" Тогда - СтрокаДетальныеЗаписи = ЭлементыДерева.Добавить(); - СтрокаДетальныеЗаписи.Представление = НСтр("ru = '<Детальные записи>'"); - СтрокаДетальныеЗаписи.Картинка = БиблиотекаКартинок.ПредопределенныйЭлемент; + СтрокаДерева = ЭлементыДерева.Добавить(); + СтрокаДерева.Представление = НСтр("ru = '<Детальные записи>'"); + СтрокаДерева.ИндексКартинки = ВариантыОтчетовКлиентСервер.ИндексПиктограммыНастроекОтчета("Элемент", Истина, Ложь); КонецЕсли; КонецЕсли; @@ -64,6 +67,13 @@ ЗакрыватьПриВыборе = Ложь; КонецПроцедуры +&НаКлиенте +Процедура ПриОткрытии(Отказ) + ПеременныеКлиента = Новый Структура; + ПеременныеКлиента.Вставить("РазворачиваемыеУзлы", Новый Массив); + ПеременныеКлиента.Вставить("КоличествоРазворачиваемых", 0); +КонецПроцедуры + #КонецОбласти //////////////////////////////////////////////////////////////////////////////// @@ -124,20 +134,21 @@ &НаКлиенте Процедура ПоляГруппировкиТаблицаПередРазворачиванием(ТаблицаЭлемент, ИдентификаторСтроки, Отказ) + Если ПеременныеКлиента = Неопределено Или ПеременныеКлиента.КоличествоРазворачиваемых > 100 Тогда + Отказ = Истина; + Возврат; + КонецЕсли; СтрокаДерева = ПоляГруппировки.НайтиПоИдентификатору(ИдентификаторСтроки); Если СтрокаДерева = Неопределено Тогда + Отказ = Истина; Возврат; КонецЕсли; - Если Не СтрокаДерева.НадоПрочитатьВложенные Тогда - Возврат; + Если СтрокаДерева.НадоПрочитатьВложенные Тогда // Не все узлы надо разворачивать. + ПеременныеКлиента.КоличествоРазворачиваемых = ПеременныеКлиента.КоличествоРазворачиваемых + 1; + ПеременныеКлиента.РазворачиваемыеУзлы.Добавить(ИдентификаторСтроки); + ПодключитьОбработчикОжидания("РазвернутьСтрокиПолейГруппировки", 0.1, Истина); // Защита от зависания по Ctrl_Shift_+. + СтрокаДерева.ПолучитьЭлементы().Очистить(); // Чтобы пользователь не видел промежуточных эффектов. КонецЕсли; - - СтрокиДерева = СтрокаДерева.ПолучитьЭлементы(); - СтрокиДерева.Очистить(); - - ТаблицаКД = ТаблицаКД(ЭтотОбъект); - ДоступноеПолеКД = ТаблицаКД.ПолучитьОбъектПоИдентификатору(СтрокаДерева.ИдентификаторКД); - ПоляГруппировкиРазвернутьСтроку(ТаблицаКД, СтрокиДерева, ДоступноеПолеКД); КонецПроцедуры &НаКлиенте @@ -180,10 +191,24 @@ Возврат; КонецЕсли; КонецЕсли; + Если ТипЗнч(ДоступноеПолеКД) = Тип("ДоступноеПолеКомпоновкиДанных") + Или ТипЗнч(ДоступноеПолеКД) = Тип("ДоступноеПолеОтбораКомпоновкиДанных") Тогда + Если ДоступноеПолеКД.Папка Тогда + ПоказатьПредупреждение(, НСтр("ru = 'Выберите элемент'")); + Возврат; + КонецЕсли; + КонецЕсли; ОповеститьОВыборе(ДоступноеПолеКД); Закрыть(ДоступноеПолеКД); КонецПроцедуры +&НаКлиенте +Процедура РазвернутьСтрокиПолейГруппировки() + РазвернутьСтрокиПолейГруппировкиВызовСервера(ПеременныеКлиента.РазворачиваемыеУзлы); + ПеременныеКлиента.РазворачиваемыеУзлы.Очистить(); + ПеременныеКлиента.КоличествоРазворачиваемых = 0; +КонецПроцедуры + //////////////////////////////////////////////////////////////////////////////// // Клиент, Сервер @@ -223,19 +248,51 @@ СтрокаДерева = СтрокиДерева.Добавить(); СтрокаДерева.Представление = СтрЗаменить(ДоступноеПолеКД.Заголовок, Префикс, ""); СтрокаДерева.ИдентификаторКД = ТаблицаКД.ПолучитьИдентификаторПоОбъекту(ДоступноеПолеКД); + НадоПрочитатьВложенные = Неопределено; Если ДоступноеПолеКД.Таблица Тогда - СтрокаДерева.Картинка = БиблиотекаКартинок.ВложеннаяТаблица; + Тип = "Таблица"; ИначеЕсли ДоступноеПолеКД.Ресурс Тогда - СтрокаДерева.Картинка = БиблиотекаКартинок.Ресурс; + Тип = "Ресурс"; + ИначеЕсли ДоступноеПолеКД.Папка Тогда + Тип = "Папка"; Иначе - СтрокаДерева.Картинка = БиблиотекаКартинок.Реквизит; + Тип = "Элемент"; КонецЕсли; + СтрокаДерева.ИндексКартинки = ВариантыОтчетовКлиентСервер.ИндексПиктограммыНастроекОтчета(Тип, Ложь, Ложь); + + // Вычисление коллекции "ДоступноеПолеКД.Элементы" в некоторых случаях делает неявный серверный вызов. Если ДоступноеПолеКД.Элементы.Количество() > 0 Тогда СтрокаДерева.НадоПрочитатьВложенные = Истина; - СтрокаДерева.ПолучитьЭлементы().Добавить(); + СтрокаДерева.ПолучитьЭлементы().Добавить().Представление = "..."; КонецЕсли; КонецЕсли; КонецЦикла; КонецПроцедуры +&НаКлиентеНаСервереБезКонтекста +Процедура РазвернутьСтрокиПолейГруппировкиКлиентСервер(ТаблицаКД, ПоляГруппировки, РазворачиваемыеУзлы) + Для Каждого ИдентификаторСтроки Из РазворачиваемыеУзлы Цикл + СтрокаДерева = ПоляГруппировки.НайтиПоИдентификатору(ИдентификаторСтроки); + Если СтрокаДерева = Неопределено Тогда + Продолжить; + КонецЕсли; + Если Не СтрокаДерева.НадоПрочитатьВложенные Тогда + Продолжить; + КонецЕсли; + СтрокаДерева.НадоПрочитатьВложенные = Ложь; + ДоступноеПолеКД = ТаблицаКД.ПолучитьОбъектПоИдентификатору(СтрокаДерева.ИдентификаторКД); + СтрокиДерева = СтрокаДерева.ПолучитьЭлементы(); + СтрокиДерева.Очистить(); + ПоляГруппировкиРазвернутьСтроку(ТаблицаКД, СтрокиДерева, ДоступноеПолеКД); + КонецЦикла; +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// Вызов сервера, Сервер + +&НаСервере +Процедура РазвернутьСтрокиПолейГруппировкиВызовСервера(РазворачиваемыеУзлы) + РазвернутьСтрокиПолейГруппировкиКлиентСервер(ТаблицаКД(ЭтотОбъект), ПоляГруппировки, РазворачиваемыеУзлы); +КонецПроцедуры + #КонецОбласти \ No newline at end of file diff --git a/SSL/src/SettingsStorages/ХранилищеВариантовОтчетов/Forms/ГруппаВыбранныхПолей/Form.form b/SSL/src/SettingsStorages/ХранилищеВариантовОтчетов/Forms/ГруппаВыбранныхПолей/Form.form index 9addb5cfa..a68467faf 100644 --- a/SSL/src/SettingsStorages/ХранилищеВариантовОтчетов/Forms/ГруппаВыбранныхПолей/Form.form +++ b/SSL/src/SettingsStorages/ХранилищеВариантовОтчетов/Forms/ГруппаВыбранныхПолей/Form.form @@ -255,7 +255,7 @@ ОК - Auto + DontUse Auto diff --git a/SSL/src/SettingsStorages/ХранилищеВариантовОтчетов/Forms/ГруппаВыбранныхПолей/Module.bsl b/SSL/src/SettingsStorages/ХранилищеВариантовОтчетов/Forms/ГруппаВыбранныхПолей/Module.bsl index 4921d5e6c..68358a830 100644 --- a/SSL/src/SettingsStorages/ХранилищеВариантовОтчетов/Forms/ГруппаВыбранныхПолей/Module.bsl +++ b/SSL/src/SettingsStorages/ХранилищеВариантовОтчетов/Forms/ГруппаВыбранныхПолей/Module.bsl @@ -10,7 +10,7 @@ Расположение = Неопределено; Если Не Параметры.Свойство("Расположение", Расположение) Тогда - ВызватьИсключение НСтр("ru = 'Не передан служебный параметр ""Отображение"".'"); + ВызватьИсключение НСтр("ru = 'Не передан служебный параметр ""Расположение"".'"); КонецЕсли; Если Расположение = РасположениеПоляКомпоновкиДанных.Авто Тогда РасположениеГруппы = "Авто"; @@ -23,7 +23,7 @@ ИначеЕсли Расположение = РасположениеПоляКомпоновкиДанных.ОтдельнаяКолонка Тогда РасположениеГруппы = "ОтдельнаяКолонка"; Иначе - ВызватьИсключение СтрЗаменить(НСтр("ru = 'Некорректное значение параметра ""Расположение"": ""%1"".'"), "%1", Строка(Расположение)); + ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Некорректное значение параметра ""Расположение"": ""%1"".'"), Строка(Расположение)); КонецЕсли; КонецПроцедуры diff --git a/SSL/src/SettingsStorages/ХранилищеВариантовОтчетов/Forms/НастройкиОтчета/Form.form b/SSL/src/SettingsStorages/ХранилищеВариантовОтчетов/Forms/НастройкиОтчета/Form.form deleted file mode 100644 index f22ec8b26..000000000 --- a/SSL/src/SettingsStorages/ХранилищеВариантовОтчетов/Forms/НастройкиОтчета/Form.form +++ /dev/null @@ -1,7611 +0,0 @@ - - - - ТекущийУзелКДТипДиаграммы - 788 - true - true - - true - - - ТекущийУзелКДТипДиаграммы - - - OnChange - ТекущийУзелКДТипДиаграммыПриИзменении - - - ТекущийУзелКДТипДиаграммыРасширеннаяПодсказка - 790 - Label - true - true - - Left - - - - ТекущийУзелКДТипДиаграммыКонтекстноеМеню - 789 - true - - InputField - Enter - true - Left - true - - 35 - true - true - false - true - true - true - true - Normal - - - - СтраницыНастроек - 35 - - СтраницаГлавное - 37 - - БыстрыеОтборы - 98 - true - true - - true - - - <key>ru</key> - <value>Быстрые отборы</value> - - - ru - Быстрые отборы - - - БыстрыеОтборыРасширеннаяПодсказка - 99 - Label - true - true - - Left - - - UsualGroup - - Auto - NormalSeparation - true - true - Auto - Auto - - - - ОбычныеОтборы - 39 - true - true - - true - - - <key>ru</key> - <value> </value> - - - ru - - - - ОбычныеОтборыРасширеннаяПодсказка - 40 - Label - true - true - - Left - - - UsualGroup - - Auto - true - true - Auto - Auto - - - - НадписьНетНастроек - 64 - - <key>ru</key> - <value>Нет настроек для отображения.</value> - - true - - true - - - НадписьНетНастроекРасширеннаяПодсказка - 66 - Label - true - true - - Left - - - - НадписьНетНастроекКонтекстноеМеню - 65 - true - - Label - true - true - - Left - - - true - true - - true - - - <key>ru</key> - <value>Отборы</value> - - - ru - - - - СтраницаГлавноеРасширеннаяПодсказка - 38 - Label - true - true - - Left - - - Page - - - StdPicture.DataCompositionFilter - - Vertical - auto - - - - СтраницаСоставГруппировки - 585 - - КомандыСоставаГруппировки - 604 - - КомандыСоставаГруппировки_ДобавлениеУдаление - 606 - - СоставГруппировки_Добавить - 608 - - <key>ru</key> - <value>Добавить</value> - - true - true - - true - - - СоставГруппировки_ДобавитьРасширеннаяПодсказка - 609 - Label - true - true - - Left - - - Form.Item.СоставГруппировки.StandardCommand.Add - Normal - PictureAndText - true - true - UserCmds - Auto - InCommandBarAndInAdditionalSubmenu - - - СоставГруппировки_Удалить - 610 - true - true - - true - - - СоставГруппировки_УдалитьРасширеннаяПодсказка - 611 - Label - true - true - - Left - - - Form.Item.СоставГруппировки.StandardCommand.Delete - Normal - Picture - true - true - UserCmds - Auto - InCommandBarAndInAdditionalSubmenu - - true - true - - true - - - <key>ru</key> - <value> </value> - - - ru - - - - КомандыСоставаГруппировки_ДобавлениеУдалениеРасширеннаяПодсказка - 607 - Label - true - true - - Left - - - - - - КомандыСоставаГруппировки_Приоритет - 612 - - СоставГруппировки_ПереместитьВверх - 614 - true - true - - true - - - СоставГруппировки_ПереместитьВверхРасширеннаяПодсказка - 615 - Label - true - true - - Left - - - Form.Command.СоставГруппировки_ПереместитьВверх - Normal - Auto - true - true - UserCmds - Auto - InCommandBarAndInAdditionalSubmenu - - - СоставГруппировки_ПереместитьВниз - 616 - true - true - - true - - - СоставГруппировки_ПереместитьВнизРасширеннаяПодсказка - 617 - Label - true - true - - Left - - - Form.Command.СоставГруппировки_ПереместитьВниз - Normal - Auto - true - true - UserCmds - Auto - InCommandBarAndInAdditionalSubmenu - - true - true - - true - - - <key>ru</key> - <value> </value> - - - ru - - - - КомандыСоставаГруппировки_ПриоритетРасширеннаяПодсказка - 613 - Label - true - true - - Left - - - - - true - true - - true - - - <key>ru</key> - <value> </value> - - - ru - - - - КомандыСоставаГруппировкиРасширеннаяПодсказка - 605 - Label - true - true - - Left - - - CommandBar - - Left - - - - СоставГруппировки - 624 - true - true - - true - - - СоставГруппировки - - None - Change - Copy - CopyToClipboard - EndEdit - HierarchicalList - List - MoveDown - MoveUp - OutputList - SelectAll - SortListAsc - SortListDesc - Tree - - СоставГруппировкиГруппа1 - 643 - - СоставГруппировкиИспользование - 659 - true - true - - true - - - СоставГруппировки.Использование - - - OnChange - СоставГруппировкиИспользованиеПриИзменении - - - СоставГруппировкиИспользованиеРасширеннаяПодсказка - 661 - Label - true - true - - Left - - - - СоставГруппировкиИспользованиеКонтекстноеМеню - 660 - true - - CheckBoxField - Auto - Left - true - - - - СоставГруппировкиПредставление - 662 - true - true - - true - - - СоставГруппировки.Представление - - - СоставГруппировкиПредставлениеРасширеннаяПодсказка - 664 - Label - true - true - - Left - - - - СоставГруппировкиПредставлениеКонтекстноеМеню - 663 - true - - InputField - Auto - true - Left - true - - true - true - true - true - true - true - Normal - - - true - true - - true - - - <key>ru</key> - <value> </value> - - - ru - - - - СоставГруппировкиГруппа1РасширеннаяПодсказка - 644 - Label - true - true - - Left - - - ColumnGroup - - InCell - auto - true - - - - СоставГруппировкиГруппа2 - 817 - - СоставГруппировкиТипГруппировки - 665 - true - true - - true - - - СоставГруппировки.ТипГруппировки - - - OnChange - СоставГруппировкиТипГруппировкиПриИзменении - - - СоставГруппировкиТипГруппировкиРасширеннаяПодсказка - 667 - Label - true - true - - Left - - - - СоставГруппировкиТипГруппировкиКонтекстноеМеню - 666 - true - - InputField - Auto - true - Left - true - - true - true - true - true - true - true - Normal - - - - СоставГруппировкиТипДополнения - 814 - true - true - - true - - - СоставГруппировки.ТипДополнения - - - OnChange - СоставГруппировкиТипДополненияПриИзменении - - - СоставГруппировкиТипДополненияРасширеннаяПодсказка - 816 - Label - true - true - - Left - - - - СоставГруппировкиТипДополненияКонтекстноеМеню - 815 - true - - InputField - Auto - true - Left - true - - true - true - true - true - true - true - Normal - - - true - true - - true - - - СоставГруппировкиГруппа2РасширеннаяПодсказка - 818 - Label - true - true - - Left - - - ColumnGroup - - Vertical - auto - true - - - Top - - СоставГруппировкиКоманднаяПанель - 626 - Left - - - Selection - СоставГруппировкиВыбор - - - BeforeAddRow - СоставГруппировкиПередНачаломДобавления - - - BeforeDeleteRow - СоставГруппировкиПередУдалением - - - СоставГруппировкиСтрокаПоиска - 628 - - СоставГруппировкиСтрокаПоискаРасширеннаяПодсказка - 632 - Label - true - true - - Left - - - - СоставГруппировкиСтрокаПоискаКонтекстноеМеню - 631 - true - - СоставГруппировки - - true - - - - СоставГруппировкиСостояниеПросмотра - 633 - - СоставГруппировкиСостояниеПросмотраРасширеннаяПодсказка - 637 - Label - true - true - - Left - - - - СоставГруппировкиСостояниеПросмотраКонтекстноеМеню - 636 - true - - ViewStatusAddition - СоставГруппировки - - true - - - - СоставГруппировкиУправлениеПоиском - 638 - - СоставГруппировкиУправлениеПоискомРасширеннаяПодсказка - 642 - Label - true - true - - Left - - - - СоставГруппировкиУправлениеПоискомКонтекстноеМеню - 641 - true - - SearchControlAddition - СоставГруппировки - - true - - - - СоставГруппировкиРасширеннаяПодсказка - 627 - Label - true - true - - Left - - - - СоставГруппировкиКонтекстноеМеню - 625 - - КомандыСоставаГруппировки_ДобавлениеУдаление1 - 647 - - СоставГруппировки_Добавить1 - 649 - - <key>ru</key> - <value>Добавить</value> - - true - true - - true - - - СоставГруппировки_Добавить1РасширеннаяПодсказка - 650 - Label - true - true - - Left - - - Form.Item.СоставГруппировки.StandardCommand.Add - Normal - PictureAndText - true - true - UserCmds - Auto - InCommandBarAndInAdditionalSubmenu - - - СоставГруппировки_Удалить1 - 651 - true - true - - true - - - СоставГруппировки_Удалить1РасширеннаяПодсказка - 652 - Label - true - true - - Left - - - Form.Item.СоставГруппировки.StandardCommand.Delete - Normal - Picture - true - true - UserCmds - Auto - InCommandBarAndInAdditionalSubmenu - - true - true - - true - - - <key>ru</key> - <value> </value> - - - ru - - - - КомандыСоставаГруппировки_ДобавлениеУдаление1РасширеннаяПодсказка - 648 - Label - true - true - - Left - - - - - - КомандыСоставаГруппировки_Приоритет1 - 653 - - СоставГруппировки_ПереместитьВверх1 - 655 - true - true - - true - - - СоставГруппировки_ПереместитьВверх1РасширеннаяПодсказка - 656 - Label - true - true - - Left - - - Form.Command.СоставГруппировки_ПереместитьВверх - Normal - Auto - true - true - UserCmds - Auto - InCommandBarAndInAdditionalSubmenu - - - СоставГруппировки_ПереместитьВниз1 - 657 - true - true - - true - - - СоставГруппировки_ПереместитьВниз1РасширеннаяПодсказка - 658 - Label - true - true - - Left - - - Form.Command.СоставГруппировки_ПереместитьВниз - Normal - Auto - true - true - UserCmds - Auto - InCommandBarAndInAdditionalSubmenu - - true - true - - true - - - <key>ru</key> - <value> </value> - - - ru - - - - КомандыСоставаГруппировки_Приоритет1РасширеннаяПодсказка - 654 - Label - true - true - - Left - - - - - - Tree - true - true - true - true - true - true - AfterCurrentRow - MultiRow -
        true
        - 1 - 1 - AutoUse - AutoUse - true - true - false - false - false - false - false - DontUse - Auto - ExpandAllLevels - true - true - true - true - - СоставГруппировки.Картинка - - true -
        - true - true - - true - - - <key>ru</key> - <value>Состав группировки</value> - - - ru - Страница состав группировки - - - СтраницаСоставГруппировкиРасширеннаяПодсказка - 586 - Label - true - true - - Left - - - Page - - - StdPicture.DataCompositionGroupFields - - Vertical - auto - -
        - - СтраницаОтборы - 320 - - Отборы - 342 - true - true - - true - - - Отборы - - None - Change - Copy - CopyToClipboard - EndEdit - HierarchicalList - List - MoveDown - MoveUp - OutputList - SelectAll - SortListAsc - SortListDesc - Tree - - ОтборыГруппа1 - 361 - - ОтборыИспользование - 363 - true - true - - true - - - Отборы.Использование - - - OnChange - ОтборыИспользованиеПриИзменении - - - ОтборыИспользованиеРасширеннаяПодсказка - 365 - Label - true - true - - Left - - - - ОтборыИспользованиеКонтекстноеМеню - 364 - true - - CheckBoxField - Auto - Left - true - - - - ОтборыПредставление - 366 - true - true - - true - - - Отборы.Представление - - - ОтборыПредставлениеРасширеннаяПодсказка - 368 - Label - true - true - - Left - - - - ОтборыПредставлениеКонтекстноеМеню - 367 - true - - InputField - true - Auto - true - Left - true - - true - true - true - true - true - true - Normal - - - true - true - - true - - - <key>ru</key> - <value> </value> - - - ru - - - - ОтборыГруппа1РасширеннаяПодсказка - 362 - Label - true - true - - Left - - - ColumnGroup - - InCell - auto - true - - - - ОтборыУсловие - 375 - true - true - - true - - - Отборы.Условие - - - ОтборыУсловиеРасширеннаяПодсказка - 377 - Label - true - true - - Left - - - - ОтборыУсловиеКонтекстноеМеню - 376 - true - - InputField - true - Auto - true - Left - true - - true - true - true - true - true - true - Normal - - - Items.Отборы.CurrentData.ТипУсловия - - - - - - ОтборыГруппа2 - 804 - - ОтборыЗначение - 372 - true - true - - true - - - Отборы.Значение - - - OnChange - ОтборыЗначениеПриИзменении - - - ОтборыЗначениеРасширеннаяПодсказка - 374 - Label - true - true - - Left - - - - ОтборыЗначениеКонтекстноеМеню - 373 - true - - InputField - Enter - true - Left - true - - true - true - true - true - true - true - Normal - - - Items.Отборы.CurrentData.ТипЗначения - - - - - - ОтборыПредставлениеЗначения - 801 - true - true - - true - - - Отборы.ПредставлениеЗначения - - - ОтборыПредставлениеЗначенияРасширеннаяПодсказка - 803 - Label - true - true - - Left - - - - ОтборыПредставлениеЗначенияКонтекстноеМеню - 802 - true - - InputField - Auto - true - Left - true - - true - true - true - true - true - true - Normal - - - true - true - - true - - - ОтборыГруппа2РасширеннаяПодсказка - 805 - Label - true - true - - Left - - - ColumnGroup - - Vertical - auto - true - - - - ОтборыИндексКартинкиДоступа - 369 - true - true - - true - - - Отборы.ИндексКартинкиДоступа - - None - - ru - Размещение определяет где и как виден этот параметр или отбор. - - - ОтборыИндексКартинкиДоступаРасширеннаяПодсказка - 371 - Label - true - true - - Left - - - - ОтборыИндексКартинкиДоступаКонтекстноеМеню - 370 - true - - PictureField - Auto - true - - CommonPicture.БыстрыйДоступ - - Left - true - - 2 - true - true - true - - CommonPicture.ПиктограммыДоступаКНастройкамОтчета - - - - 1 - - - - - ОтборыЗаголовок - 378 - true - true - - true - - - Отборы.Заголовок - - - OnChange - ОтборыЗаголовокПриИзменении - - - ОтборыЗаголовокРасширеннаяПодсказка - 380 - Label - true - true - - Left - - - - ОтборыЗаголовокКонтекстноеМеню - 379 - true - - InputField - Auto - true - Left - true - - true - true - true - true - true - true - true - Normal - - - Top - - ОтборыКоманднаяПанель - 344 - - КомандыОтборов_ДобавлениеУдаление - 324 - - Отборы_Добавить - 326 - - <key>ru</key> - <value>Добавить отбор</value> - - true - true - - true - - - Отборы_ДобавитьРасширеннаяПодсказка - 327 - Label - true - true - - Left - - - Form.Item.Отборы.StandardCommand.Add - Normal - PictureAndText - true - true - UserCmds - Auto - InCommandBarAndInAdditionalSubmenu - - - Отборы_Удалить - 328 - true - true - - true - - - Отборы_УдалитьРасширеннаяПодсказка - 329 - Label - true - true - - Left - - - Form.Item.Отборы.StandardCommand.Delete - Normal - Picture - true - true - UserCmds - Auto - InCommandBarAndInAdditionalSubmenu - - true - true - - true - - - <key>ru</key> - <value> </value> - - - ru - - - - КомандыОтборов_ДобавлениеУдалениеРасширеннаяПодсказка - 325 - Label - true - true - - Left - - - - - - КомандыОтборов_Приоритет - 415 - - Отборы_ПереместитьВверх - 417 - true - true - - true - - - Отборы_ПереместитьВверхРасширеннаяПодсказка - 418 - Label - true - true - - Left - - - Form.Command.Отборы_ПереместитьВверх - Normal - Auto - true - true - UserCmds - Auto - - - Отборы_ПереместитьВниз - 419 - true - true - - true - - - Отборы_ПереместитьВнизРасширеннаяПодсказка - 420 - Label - true - true - - Left - - - Form.Command.Отборы_ПереместитьВниз - Normal - Auto - true - true - UserCmds - Auto - - true - true - - true - - - <key>ru</key> - <value> </value> - - - ru - - - - КомандыОтборов_ПриоритетРасширеннаяПодсказка - 416 - Label - true - true - - Left - - - - - - КомандыОтборов_Группы - 336 - - Отборы_Сгруппировать - 338 - true - true - - true - - - Отборы_СгруппироватьРасширеннаяПодсказка - 339 - Label - true - true - - Left - - - Form.Command.Отборы_Сгруппировать - Normal - Auto - true - true - UserCmds - - StdPicture.CreateFolder - - Auto - InAdditionalSubmenu - - - Отборы_Разгруппировать - 340 - true - true - - true - - - Отборы_РазгруппироватьРасширеннаяПодсказка - 341 - Label - true - true - - Left - - - Form.Command.Отборы_Разгруппировать - Normal - Auto - true - true - UserCmds - Auto - InAdditionalSubmenu - - true - true - - true - - - <key>ru</key> - <value> </value> - - - ru - - - - КомандыОтборов_ГруппыРасширеннаяПодсказка - 337 - Label - true - true - - Left - - - - - Left - - - Selection - ОтборыВыбор - - - BeforeAddRow - ОтборыПередНачаломДобавления - - - BeforeDeleteRow - ОтборыПередУдалением - - - OnActivateRow - ОтборыПриАктивизацииСтроки - - - ОтборыСтрокаПоиска - 346 - - ОтборыСтрокаПоискаРасширеннаяПодсказка - 350 - Label - true - true - - Left - - - - ОтборыСтрокаПоискаКонтекстноеМеню - 349 - true - - Отборы - - true - - - - ОтборыСостояниеПросмотра - 351 - - ОтборыСостояниеПросмотраРасширеннаяПодсказка - 355 - Label - true - true - - Left - - - - ОтборыСостояниеПросмотраКонтекстноеМеню - 354 - true - - ViewStatusAddition - Отборы - - true - - - - ОтборыУправлениеПоиском - 356 - - ОтборыУправлениеПоискомРасширеннаяПодсказка - 360 - Label - true - true - - Left - - - - ОтборыУправлениеПоискомКонтекстноеМеню - 359 - true - - SearchControlAddition - Отборы - - true - - - - ОтборыРасширеннаяПодсказка - 345 - Label - true - true - - Left - - - - ОтборыКонтекстноеМеню - 343 - - КомандыОтборов_ДобавлениеУдаление1 - 403 - - Отборы_Добавить1 - 405 - - <key>ru</key> - <value>Добавить отбор</value> - - true - true - - true - - - Отборы_Добавить1РасширеннаяПодсказка - 406 - Label - true - true - - Left - - - Form.Item.Отборы.StandardCommand.Add - Normal - PictureAndText - true - true - UserCmds - Auto - InCommandBarAndInAdditionalSubmenu - - - Отборы_Удалить1 - 407 - true - true - - true - - - Отборы_Удалить1РасширеннаяПодсказка - 408 - Label - true - true - - Left - - - Form.Item.Отборы.StandardCommand.Delete - Normal - Picture - true - true - UserCmds - Auto - InCommandBarAndInAdditionalSubmenu - - true - true - - true - - - <key>ru</key> - <value> </value> - - - ru - - - - КомандыОтборов_ДобавлениеУдаление1РасширеннаяПодсказка - 404 - Label - true - true - - Left - - - - - - КомандыОтборов_Приоритет1 - 421 - - Отборы_ПереместитьВверх1 - 423 - true - true - - true - - - Отборы_ПереместитьВверх1РасширеннаяПодсказка - 424 - Label - true - true - - Left - - - Form.Command.Отборы_ПереместитьВверх - Normal - Auto - true - true - UserCmds - Auto - - - Отборы_ПереместитьВниз1 - 425 - true - true - - true - - - Отборы_ПереместитьВниз1РасширеннаяПодсказка - 426 - Label - true - true - - Left - - - Form.Command.Отборы_ПереместитьВниз - Normal - Auto - true - true - UserCmds - Auto - - true - true - - true - - - <key>ru</key> - <value> </value> - - - ru - - - - КомандыОтборов_Приоритет1РасширеннаяПодсказка - 422 - Label - true - true - - Left - - - - - - КомандыОтборов_Группы1 - 409 - - Отборы_Сгруппировать1 - 411 - true - true - - true - - - Отборы_Сгруппировать1РасширеннаяПодсказка - 412 - Label - true - true - - Left - - - Form.Command.Отборы_Сгруппировать - Normal - Auto - true - true - UserCmds - - StdPicture.CreateFolder - - Auto - InAdditionalSubmenu - - - Отборы_Разгруппировать1 - 413 - true - true - - true - - - Отборы_Разгруппировать1РасширеннаяПодсказка - 414 - Label - true - true - - Left - - - Form.Command.Отборы_Разгруппировать - Normal - Auto - true - true - UserCmds - Auto - InAdditionalSubmenu - - true - true - - true - - - <key>ru</key> - <value> </value> - - - ru - - - - КомандыОтборов_Группы1РасширеннаяПодсказка - 410 - Label - true - true - - Left - - - - - - Tree - true - true - true - true - true - AfterCurrentRow - MultiRow -
        true
        - 1 - 1 - AutoUse - AutoUse - true - true - false - false - false - false - false - DontUse - Auto - ExpandAllLevels - true - true - - Отборы.ИндексКартинки - - - CommonPicture.ПиктограммыПараметровИОтборов - - true -
        - - ГруппаЕстьВложенныеОтборы - 806 - - КартинкаИнформация1 - 808 - - <key>ru</key> - <value>Картинка информация</value> - - true - true - - true - - - КартинкаИнформация1РасширеннаяПодсказка - 810 - Label - true - true - - Left - - - - КартинкаИнформация1КонтекстноеМеню - 809 - true - - 2 - true - 1 - true - - - CommonPicture.Информация - - - - - ПодсказкаЕстьВложенныеОтборы - 811 - - <key>ru</key> - <value>В отчете также имеются вложенные отборы, которые можно настроить на странице <b>Структура</>.</value> - - true - true - - true - - - ПодсказкаЕстьВложенныеОтборыРасширеннаяПодсказка - 813 - Label - true - true - - Left - - - - ПодсказкаЕстьВложенныеОтборыКонтекстноеМеню - 812 - true - - true - Label - true - true - - Style.ПоясняющийТекст - - - - URLProcessing - ПодсказкаЕстьВложенныеОтчетыОбработкаНавигационнойСсылки - - Left - - - true - true - - true - - - <key>ru</key> - <value>Группа есть вложенные отборы</value> - - - ru - Группа есть вложенные отборы - - - ГруппаЕстьВложенныеОтборыРасширеннаяПодсказка - 807 - Label - true - true - - Left - - - UsualGroup - - Auto - true - true - Auto - Auto - - - true - true - - true - - - <key>ru</key> - <value>Отборы</value> - - - ru - Страница выбранные поля - - - СтраницаОтборыРасширеннаяПодсказка - 321 - Label - true - true - - Left - - - Page - - - StdPicture.DataCompositionFilter - - Vertical - auto - -
        - - СтраницаВыбранныеПоля - 126 - - ВыбранныеПоля - 230 - true - true - - true - - - ВыбранныеПоля - - None - Change - Copy - CopyToClipboard - EndEdit - HierarchicalList - List - MoveDown - MoveUp - OutputList - SelectAll - SortListAsc - SortListDesc - Tree - - ВыбранныеПоляГруппа1 - 257 - - ВыбранныеПоляИспользование - 259 - true - true - - true - - - ВыбранныеПоля.Использование - - - OnChange - ВыбранныеПоляИспользованиеПриИзменении - - - ВыбранныеПоляИспользованиеРасширеннаяПодсказка - 261 - Label - true - true - - Left - - - - ВыбранныеПоляИспользованиеКонтекстноеМеню - 260 - true - - CheckBoxField - Auto - Left - true - - - - ВыбранныеПоляПредставление - 262 - true - true - - true - - - ВыбранныеПоля.Представление - - - ВыбранныеПоляПредставлениеРасширеннаяПодсказка - 264 - Label - true - true - - Left - - - - ВыбранныеПоляПредставлениеКонтекстноеМеню - 263 - true - - InputField - true - Auto - true - Left - true - - true - true - true - true - true - true - Normal - - - true - true - - true - - - <key>ru</key> - <value>Выбранные поля группа1</value> - - - ru - Выбранные поля группа1 - - - ВыбранныеПоляГруппа1РасширеннаяПодсказка - 258 - Label - true - true - - Left - - - ColumnGroup - - InCell - auto - true - - - Top - - ВыбранныеПоляКоманднаяПанель - 232 - - КомандыВыбранныхПолей_ДобавлениеУдаление - 212 - - ВыбранныеПоля_Добавить - 214 - - <key>ru</key> - <value>Добавить</value> - - true - true - - true - - - ВыбранныеПоля_ДобавитьРасширеннаяПодсказка - 215 - Label - true - true - - Left - - - Form.Item.ВыбранныеПоля.StandardCommand.Add - Normal - PictureAndText - true - true - UserCmds - Auto - InCommandBarAndInAdditionalSubmenu - - - ВыбранныеПоля_Удалить - 216 - true - true - - true - - - ВыбранныеПоля_УдалитьРасширеннаяПодсказка - 217 - Label - true - true - - Left - - - Form.Item.ВыбранныеПоля.StandardCommand.Delete - Normal - Picture - true - true - UserCmds - Auto - InCommandBarAndInAdditionalSubmenu - - true - true - - true - - - <key>ru</key> - <value> </value> - - - ru - - - - КомандыВыбранныхПолей_ДобавлениеУдалениеРасширеннаяПодсказка - 213 - Label - true - true - - Left - - - - - - КомандыВыбранныхПолей_Приоритет - 218 - - ВыбранныеПоля_ПереместитьВверх - 220 - true - true - - true - - - ВыбранныеПоля_ПереместитьВверхРасширеннаяПодсказка - 221 - Label - true - true - - Left - - - Form.Command.ВыбранныеПоля_ПереместитьВверх - Normal - Auto - true - true - UserCmds - Auto - InCommandBarAndInAdditionalSubmenu - - - ВыбранныеПоля_ПереместитьВниз - 222 - true - true - - true - - - ВыбранныеПоля_ПереместитьВнизРасширеннаяПодсказка - 223 - Label - true - true - - Left - - - Form.Command.ВыбранныеПоля_ПереместитьВниз - Normal - Auto - true - true - UserCmds - Auto - InCommandBarAndInAdditionalSubmenu - - true - true - - true - - - <key>ru</key> - <value> </value> - - - ru - - - - КомандыВыбранныхПолей_ПриоритетРасширеннаяПодсказка - 219 - Label - true - true - - Left - - - - - - КомандыВыбранныхПолей_Группы - 284 - - ВыбранныеПоля_Сгруппировать - 288 - true - true - - true - - - ВыбранныеПоля_СгруппироватьРасширеннаяПодсказка - 289 - Label - true - true - - Left - - - Form.Command.ВыбранныеПоля_Сгруппировать - Normal - Auto - true - true - UserCmds - - StdPicture.CreateFolder - - Auto - InAdditionalSubmenu - - - ВыбранныеПоля_Разгруппировать - 290 - true - true - - true - - - ВыбранныеПоля_РазгруппироватьРасширеннаяПодсказка - 291 - Label - true - true - - Left - - - Form.Command.ВыбранныеПоля_Разгруппировать - Normal - Auto - true - true - UserCmds - Auto - InAdditionalSubmenu - - true - true - - true - - - <key>ru</key> - <value>Команды выбранных полей группы</value> - - - ru - Команды выбранных полей группы - - - КомандыВыбранныхПолей_ГруппыРасширеннаяПодсказка - 285 - Label - true - true - - Left - - - - - Left - - - Selection - ВыбранныеПоляВыбор - - - BeforeAddRow - ВыбранныеПоляПередНачаломДобавления - - - BeforeDeleteRow - ВыбранныеПоляПередУдалением - - - ВыбранныеПоляСтрокаПоиска - 234 - - ВыбранныеПоляСтрокаПоискаРасширеннаяПодсказка - 238 - Label - true - true - - Left - - - - ВыбранныеПоляСтрокаПоискаКонтекстноеМеню - 237 - true - - ВыбранныеПоля - - true - - - - ВыбранныеПоляСостояниеПросмотра - 239 - - ВыбранныеПоляСостояниеПросмотраРасширеннаяПодсказка - 243 - Label - true - true - - Left - - - - ВыбранныеПоляСостояниеПросмотраКонтекстноеМеню - 242 - true - - ViewStatusAddition - ВыбранныеПоля - - true - - - - ВыбранныеПоляУправлениеПоиском - 244 - - ВыбранныеПоляУправлениеПоискомРасширеннаяПодсказка - 248 - Label - true - true - - Left - - - - ВыбранныеПоляУправлениеПоискомКонтекстноеМеню - 247 - true - - SearchControlAddition - ВыбранныеПоля - - true - - - - ВыбранныеПоляРасширеннаяПодсказка - 233 - Label - true - true - - Left - - - - ВыбранныеПоляКонтекстноеМеню - 231 - - КомандыВыбранныхПолей_Группы1 - 385 - - ВыбранныеПоля_Сгруппировать1 - 387 - true - true - - true - - - ВыбранныеПоля_Сгруппировать1РасширеннаяПодсказка - 388 - Label - true - true - - Left - - - Form.Command.ВыбранныеПоля_Сгруппировать - Normal - Auto - true - true - UserCmds - - StdPicture.CreateFolder - - Auto - InAdditionalSubmenu - - - ВыбранныеПоля_Разгруппировать1 - 389 - true - true - - true - - - ВыбранныеПоля_Разгруппировать1РасширеннаяПодсказка - 390 - Label - true - true - - Left - - - Form.Command.ВыбранныеПоля_Разгруппировать - Normal - Auto - true - true - UserCmds - Auto - InAdditionalSubmenu - - true - true - - true - - - <key>ru</key> - <value>Команды выбранных полей группы</value> - - - ru - Команды выбранных полей группы - - - КомандыВыбранныхПолей_Группы1РасширеннаяПодсказка - 386 - Label - true - true - - Left - - - - - - КомандыВыбранныхПолей_Приоритет1 - 391 - - ВыбранныеПоля_ПереместитьВверх1 - 393 - true - true - - true - - - ВыбранныеПоля_ПереместитьВверх1РасширеннаяПодсказка - 394 - Label - true - true - - Left - - - Form.Command.ВыбранныеПоля_ПереместитьВверх - Normal - Auto - true - true - UserCmds - Auto - InCommandBarAndInAdditionalSubmenu - - - ВыбранныеПоля_ПереместитьВниз1 - 395 - true - true - - true - - - ВыбранныеПоля_ПереместитьВниз1РасширеннаяПодсказка - 396 - Label - true - true - - Left - - - Form.Command.ВыбранныеПоля_ПереместитьВниз - Normal - Auto - true - true - UserCmds - Auto - InCommandBarAndInAdditionalSubmenu - - true - true - - true - - - <key>ru</key> - <value> </value> - - - ru - - - - КомандыВыбранныхПолей_Приоритет1РасширеннаяПодсказка - 392 - Label - true - true - - Left - - - - - - КомандыВыбранныхПолей_ДобавлениеУдаление1 - 397 - - ВыбранныеПоля_Добавить1 - 399 - - <key>ru</key> - <value>Добавить</value> - - true - true - - true - - - ВыбранныеПоля_Добавить1РасширеннаяПодсказка - 400 - Label - true - true - - Left - - - Form.Item.ВыбранныеПоля.StandardCommand.Add - Normal - PictureAndText - true - true - UserCmds - Auto - InCommandBarAndInAdditionalSubmenu - - - ВыбранныеПоля_Удалить1 - 401 - true - true - - true - - - ВыбранныеПоля_Удалить1РасширеннаяПодсказка - 402 - Label - true - true - - Left - - - Form.Item.ВыбранныеПоля.StandardCommand.Delete - Normal - Picture - true - true - UserCmds - Auto - InCommandBarAndInAdditionalSubmenu - - true - true - - true - - - <key>ru</key> - <value> </value> - - - ru - - - - КомандыВыбранныхПолей_ДобавлениеУдаление1РасширеннаяПодсказка - 398 - Label - true - true - - Left - - - - - - Tree - true - true - true - true - true - AfterCurrentRow - MultiRow - 1 - 1 - AutoUse - AutoUse - true - true - false - false - false - false - false - DontUse - Auto - ExpandAllLevels - true - true - - ВыбранныеПоля.ИндексКартинки - - - CommonPicture.ПиктограммыНастроекОтчета - - true - - true - true - - true - - - <key>ru</key> - <value>Поля</value> - - - ru - Страница выбранные поля - - - СтраницаВыбранныеПоляРасширеннаяПодсказка - 127 - Label - true - true - - Left - - - Page - - - StdPicture.DataCompositionSelection - - Vertical - auto - - - - СтраницаСортировка - 128 - - Сортировка - 130 - true - true - - true - - - Сортировка - - None - CancelSearch - Change - Copy - CopyToClipboard - EndEdit - Find - MoveDown - MoveUp - OutputList - SelectAll - SortListAsc - SortListDesc - - СортировкаГруппа1 - 163 - - СортировкаИспользование - 773 - true - true - - true - - - Сортировка.Использование - - - OnChange - СортировкаИспользованиеПриИзменении - - - СортировкаИспользованиеРасширеннаяПодсказка - 775 - Label - true - true - - Left - - - - СортировкаИспользованиеКонтекстноеМеню - 774 - true - - CheckBoxField - Auto - true - Left - true - - - - СортировкаПредставление - 155 - true - true - - true - - - Сортировка.Представление - - - СортировкаПредставлениеРасширеннаяПодсказка - 157 - Label - true - true - - Left - - - - СортировкаПредставлениеКонтекстноеМеню - 156 - true - - InputField - true - Auto - true - Left - true - - true - true - true - true - true - true - Normal - - - true - true - - true - - - СортировкаГруппа1РасширеннаяПодсказка - 164 - Label - true - true - - Left - - - ColumnGroup - - InCell - auto - true - - - - СортировкаНаправление - 158 - true - true - - true - - - Сортировка.Направление - - - СортировкаНаправлениеРасширеннаяПодсказка - 160 - Label - true - true - - Left - - - - СортировкаНаправлениеКонтекстноеМеню - 159 - true - - LabelField - Auto - true - true - Left - true - Show - Always - - true - true - true - - - Top - - СортировкаКоманднаяПанель - 132 - - КомандыСортировки_ДобавлениеУдаление - 204 - - Сортировка_Добавить - 206 - true - true - - true - - - Сортировка_ДобавитьРасширеннаяПодсказка - 207 - Label - true - true - - Left - - - Form.Item.Сортировка.StandardCommand.Add - Normal - PictureAndText - true - true - UserCmds - Auto - InCommandBarAndInAdditionalSubmenu - - - Сортировка_Удалить - 208 - true - true - - true - - - Сортировка_УдалитьРасширеннаяПодсказка - 209 - Label - true - true - - Left - - - Form.Item.Сортировка.StandardCommand.Delete - Normal - Picture - true - true - UserCmds - Auto - InCommandBarAndInAdditionalSubmenu - - true - true - - true - - - <key>ru</key> - <value>Команды сортировки добавление удаление</value> - - - ru - Команды сортировки добавление удаление - - - КомандыСортировки_ДобавлениеУдалениеРасширеннаяПодсказка - 205 - Label - true - true - - Left - - - - - - КомандыСортировки_Приоритет - 175 - - Сортировка_ПереместитьВверх - 165 - true - true - - true - - - Сортировка_ПереместитьВверхРасширеннаяПодсказка - 166 - Label - true - true - - Left - - - Form.Command.Сортировка_ПереместитьВверх - Normal - Auto - true - true - UserCmds - Auto - - - Сортировка_ПереместитьВниз - 167 - true - true - - true - - - Сортировка_ПереместитьВнизРасширеннаяПодсказка - 168 - Label - true - true - - Left - - - Form.Command.Сортировка_ПереместитьВниз - Normal - Auto - true - true - UserCmds - Auto - - true - true - - true - - - <key>ru</key> - <value>Команды сортировки приоритет</value> - - - ru - Команды сортировки приоритет - - - КомандыСортировки_ПриоритетРасширеннаяПодсказка - 176 - Label - true - true - - Left - - - - - - КомандыСортировки_Направление - 173 - - Сортировка_ПоВозрастанию - 169 - true - true - - true - - - Сортировка_ПоВозрастаниюРасширеннаяПодсказка - 170 - Label - true - true - - Left - - - Form.Command.Сортировка_ПоВозрастанию - Normal - Auto - true - true - UserCmds - Auto - - - Сортировка_ПоУбыванию - 171 - true - true - - true - - - Сортировка_ПоУбываниюРасширеннаяПодсказка - 172 - Label - true - true - - Left - - - Form.Command.Сортировка_ПоУбыванию - Normal - Auto - true - true - UserCmds - Auto - - true - true - - true - - - <key>ru</key> - <value>Команды сортировки направление</value> - - - ru - Команды сортировки направление - - - КомандыСортировки_НаправлениеРасширеннаяПодсказка - 174 - Label - true - true - - Left - - - - - Left - - - Selection - СортировкаВыбор - - - BeforeAddRow - СортировкаПередНачаломДобавления - - - BeforeDeleteRow - СортировкаПередУдалением - - - СортировкаСтрокаПоиска - 134 - - СортировкаСтрокаПоискаРасширеннаяПодсказка - 138 - Label - true - true - - Left - - - - СортировкаСтрокаПоискаКонтекстноеМеню - 137 - true - - Сортировка - - true - - - - СортировкаСостояниеПросмотра - 139 - - СортировкаСостояниеПросмотраРасширеннаяПодсказка - 143 - Label - true - true - - Left - - - - СортировкаСостояниеПросмотраКонтекстноеМеню - 142 - true - - ViewStatusAddition - Сортировка - - true - - - - СортировкаУправлениеПоиском - 144 - - СортировкаУправлениеПоискомРасширеннаяПодсказка - 148 - Label - true - true - - Left - - - - СортировкаУправлениеПоискомКонтекстноеМеню - 147 - true - - SearchControlAddition - Сортировка - - true - - - - СортировкаРасширеннаяПодсказка - 133 - Label - true - true - - Left - - - - СортировкаКонтекстноеМеню - 131 - true - - true - true - true - true - true - MultiRow - 1 - 1 - AutoUse - AutoUse - true - true - false - false - false - false - false - DontUse - Auto - true - true - true - - true - true - - true - - - <key>ru</key> - <value>Сортировка</value> - - - ru - Страница сортировка - - - СтраницаСортировкаРасширеннаяПодсказка - 129 - Label - true - true - - Left - - - Page - - - StdPicture.DataCompositionOrder - - Vertical - auto - - - - СтраницаОформление - 590 - - СтраницаДополнительноШапка - 47 - true - true - - true - - - <key>ru</key> - <value> </value> - - - ru - - - - СтраницаДополнительноШапкаРасширеннаяПодсказка - 48 - Label - true - true - - Left - - - UsualGroup - - Vertical - Auto - true - true - Auto - Auto - - - - СтраницаДополнительноГруппировки - 49 - true - true - - true - - - <key>ru</key> - <value> </value> - - - ru - - - - СтраницаДополнительноГруппировкиРасширеннаяПодсказка - 50 - Label - true - true - - Left - - - UsualGroup - - Vertical - Auto - true - true - Auto - Auto - - - - СтраницаДополнительноПодвал - 51 - true - true - - true - - - <key>ru</key> - <value> </value> - - - ru - - - - СтраницаДополнительноПодвалРасширеннаяПодсказка - 52 - Label - true - true - - Left - - - UsualGroup - - Vertical - Auto - true - true - Auto - Auto - - - true - true - - true - - - <key>ru</key> - <value>Оформление</value> - - - ru - Страница оформление - - - СтраницаОформлениеРасширеннаяПодсказка - 591 - Label - true - true - - Left - - - Page - - - StdPicture.DataCompositionConditionalAppearance - - Vertical - auto - - - - СтраницаСтруктураВарианта - 427 - - СтруктураВарианта - 429 - true - true - - true - - - СтруктураВарианта - - None - Change - Choose - Copy - CopyToClipboard - EndEdit - HierarchicalList - List - MoveDown - MoveUp - OutputList - SortListAsc - SortListDesc - Tree - - СтруктураВариантаГруппа2 - 448 - - СтруктураВариантаИспользование - 494 - true - true - - true - - - СтруктураВарианта.Использование - - - OnChange - СтруктураВариантаИспользованиеПриИзменении - - - СтруктураВариантаИспользованиеРасширеннаяПодсказка - 496 - Label - true - true - - Left - - - - СтруктураВариантаИспользованиеКонтекстноеМеню - 495 - true - - CheckBoxField - Auto - Left - true - - - - СтруктураВариантаПредставление - 497 - true - true - - true - - - СтруктураВарианта.Представление - - - СтруктураВариантаПредставлениеРасширеннаяПодсказка - 499 - Label - true - true - - Left - - - - СтруктураВариантаПредставлениеКонтекстноеМеню - 498 - true - - InputField - true - Auto - true - Left - true - - true - true - true - true - true - Normal - - - true - true - - true - - - <key>ru</key> - <value> </value> - - - ru - - - - СтруктураВариантаГруппа2РасширеннаяПодсказка - 449 - Label - true - true - - Left - - - ColumnGroup - - InCell - auto - true - - - - СтруктураВариантаЗаголовок - 554 - true - true - - true - - - СтруктураВарианта.Заголовок - - - OnChange - СтруктураВариантаЗаголовокПриИзменении - - - СтруктураВариантаЗаголовокРасширеннаяПодсказка - 556 - Label - true - true - - Left - - - - СтруктураВариантаЗаголовокКонтекстноеМеню - 555 - true - - InputField - Auto - true - Left - true - - true - true - true - true - true - true - true - Normal - - System.DefaultGUIFont - Arial - 10.0 - true - false - false - false - - - - Top - - СтруктураВариантаКоманднаяПанель - 431 - - КомандыСтруктурыВарианта_Добавление - 468 - - СтруктураВарианта_Добавить - 508 - true - true - - true - - - СтруктураВарианта_ДобавитьРасширеннаяПодсказка - 509 - Label - true - true - - Left - - - Form.Item.СтруктураВарианта.StandardCommand.Add - Normal - Picture - true - true - UserCmds - - CommonPicture.ДобавитьВложенный - - Auto - - - СтруктураВарианта_Сгруппировать - 510 - true - true - - true - - - СтруктураВарианта_СгруппироватьРасширеннаяПодсказка - 511 - Label - true - true - - Left - - - Form.Command.СтруктураВарианта_Сгруппировать - Normal - Auto - true - true - UserCmds - Auto - - - СтруктураВарианта_ДобавлениеТаблицИДиаграмм - 776 - - СтруктураВарианта_ДобавитьТаблицу - 780 - true - true - - true - - - СтруктураВарианта_ДобавитьТаблицуРасширеннаяПодсказка - 781 - Label - true - true - - Left - - - Form.Command.СтруктураВарианта_ДобавитьТаблицу - Normal - Auto - true - true - UserCmds - Auto - InAdditionalSubmenu - - - СтруктураВарианта_ДобавитьДиаграмму - 778 - true - true - - true - - - СтруктураВарианта_ДобавитьДиаграммуРасширеннаяПодсказка - 779 - Label - true - true - - Left - - - Form.Command.СтруктураВарианта_ДобавитьДиаграмму - Normal - Auto - true - true - UserCmds - Auto - InAdditionalSubmenu - - true - true - - true - - - <key>ru</key> - <value>Структура варианта добавление таблиц и диаграмм</value> - - - ru - Структура варианта добавление таблиц и диаграмм - - - СтруктураВарианта_ДобавлениеТаблицИДиаграммРасширеннаяПодсказка - 777 - Label - true - true - - Left - - - - - true - true - - true - - - <key>ru</key> - <value> </value> - - - ru - - - - КомандыСтруктурыВарианта_ДобавлениеРасширеннаяПодсказка - 469 - Label - true - true - - Left - - - - - - КомандыСтруктурыВарианта_Изменение - 516 - - СтруктураВарианта_Изменить - 512 - true - true - - true - - - СтруктураВарианта_ИзменитьРасширеннаяПодсказка - 513 - Label - true - true - - Left - - - Form.Command.СтруктураВарианта_Изменить - Normal - Picture - true - true - UserCmds - Auto - InCommandBarAndInAdditionalSubmenu - - - СтруктураВарианта_Удалить - 668 - true - true - - true - - - СтруктураВарианта_УдалитьРасширеннаяПодсказка - 669 - Label - true - true - - Left - - - Form.Item.СтруктураВарианта.StandardCommand.Delete - Normal - Picture - true - true - UserCmds - Auto - InCommandBarAndInAdditionalSubmenu - - true - true - - true - - - <key>ru</key> - <value>Команды структуры варианта изменение</value> - - - ru - Команды структуры варианта изменение - - - КомандыСтруктурыВарианта_ИзменениеРасширеннаяПодсказка - 517 - Label - true - true - - Left - - - - - - КомандыСтруктурыВарианта_ДвижениеПоИерархии - 456 - - СтруктураВарианта_ПереместитьВышеИЛевее - 500 - true - true - - true - - - СтруктураВарианта_ПереместитьВышеИЛевееРасширеннаяПодсказка - 501 - Label - true - true - - Left - - - Form.Command.СтруктураВарианта_ПереместитьВышеИЛевее - Normal - Auto - true - true - UserCmds - Auto - - - СтруктураВарианта_ПереместитьНижеИПравее - 502 - true - true - - true - - - СтруктураВарианта_ПереместитьНижеИПравееРасширеннаяПодсказка - 503 - Label - true - true - - Left - - - Form.Command.СтруктураВарианта_ПереместитьНижеИПравее - Normal - Auto - true - true - UserCmds - Auto - - true - true - - true - - - <key>ru</key> - <value> </value> - - - ru - - - - КомандыСтруктурыВарианта_ДвижениеПоИерархииРасширеннаяПодсказка - 457 - Label - true - true - - Left - - - - - - КомандыСтруктурыВарианта_ДвижениеВнутриРодителя - 462 - - СтруктураВарианта_ПереместитьВверх - 504 - true - true - - true - - - СтруктураВарианта_ПереместитьВверхРасширеннаяПодсказка - 505 - Label - true - true - - Left - - - Form.Command.СтруктураВарианта_ПереместитьВверх - Normal - Auto - true - true - UserCmds - Auto - - - СтруктураВарианта_ПереместитьВниз - 506 - true - true - - true - - - СтруктураВарианта_ПереместитьВнизРасширеннаяПодсказка - 507 - Label - true - true - - Left - - - Form.Command.СтруктураВарианта_ПереместитьВниз - Normal - Auto - true - true - UserCmds - Auto - - true - true - - true - - - <key>ru</key> - <value> </value> - - - ru - - - - КомандыСтруктурыВарианта_ДвижениеВнутриРодителяРасширеннаяПодсказка - 463 - Label - true - true - - Left - - - - - - КомандыСтруктурыВарианта_Флажки - 518 - - СтруктураВарианта_УстановитьФлажки - 520 - true - - true - - - СтруктураВарианта_УстановитьФлажкиРасширеннаяПодсказка - 521 - Label - true - true - - Left - - - Form.Command.СтруктураВарианта_УстановитьФлажки - Normal - Auto - true - true - UserCmds - Auto - InCommandBarAndInAdditionalSubmenu - - - СтруктураВарианта_СнятьФлажки - 522 - true - - true - - - СтруктураВарианта_СнятьФлажкиРасширеннаяПодсказка - 523 - Label - true - true - - Left - - - Form.Command.СтруктураВарианта_СнятьФлажки - Normal - Auto - true - true - UserCmds - Auto - InCommandBarAndInAdditionalSubmenu - - true - true - - true - - - <key>ru</key> - <value>Команды структуры варианта флажки</value> - - - ru - Команды структуры варианта флажки - - - КомандыСтруктурыВарианта_ФлажкиРасширеннаяПодсказка - 519 - Label - true - true - - Left - - - - - Left - - - DragCheck - СтруктураВариантаПроверкаПеретаскивания - - - Selection - СтруктураВариантаВыбор - - - BeforeAddRow - СтруктураВариантаПередНачаломДобавления - - - BeforeDeleteRow - СтруктураВариантаПередУдалением - - - OnActivateRow - СтруктураВариантаПриАктивизацииСтроки - - - DragStart - СтруктураВариантаНачалоПеретаскивания - - - Drag - СтруктураВариантаПеретаскивание - - - СтруктураВариантаСтрокаПоиска - 433 - - СтруктураВариантаСтрокаПоискаРасширеннаяПодсказка - 437 - Label - true - true - - Left - - - - СтруктураВариантаСтрокаПоискаКонтекстноеМеню - 436 - true - - СтруктураВарианта - - true - - - - СтруктураВариантаСостояниеПросмотра - 438 - - СтруктураВариантаСостояниеПросмотраРасширеннаяПодсказка - 442 - Label - true - true - - Left - - - - СтруктураВариантаСостояниеПросмотраКонтекстноеМеню - 441 - true - - ViewStatusAddition - СтруктураВарианта - - true - - - - СтруктураВариантаУправлениеПоиском - 443 - - СтруктураВариантаУправлениеПоискомРасширеннаяПодсказка - 447 - Label - true - true - - Left - - - - СтруктураВариантаУправлениеПоискомКонтекстноеМеню - 446 - true - - SearchControlAddition - СтруктураВарианта - - true - - - - СтруктураВариантаРасширеннаяПодсказка - 432 - Label - true - true - - Left - - - - СтруктураВариантаКонтекстноеМеню - 430 - - КомандыСтруктурыВарианта_Добавление1 - 741 - - СтруктураВарианта_Добавить1 - 743 - true - true - - true - - - СтруктураВарианта_Добавить1РасширеннаяПодсказка - 744 - Label - true - true - - Left - - - Form.Item.СтруктураВарианта.StandardCommand.Add - Normal - Picture - true - true - UserCmds - - CommonPicture.ДобавитьВложенный - - Auto - - - СтруктураВарианта_Сгруппировать1 - 747 - true - true - - true - - - СтруктураВарианта_Сгруппировать1РасширеннаяПодсказка - 748 - Label - true - true - - Left - - - Form.Command.СтруктураВарианта_Сгруппировать - Normal - Auto - true - true - UserCmds - Auto - - - СтруктураВарианта_ДобавлениеТаблицИДиаграмм1 - 782 - - СтруктураВарианта_ДобавитьТаблицу1 - 784 - true - true - - true - - - СтруктураВарианта_ДобавитьТаблицу1РасширеннаяПодсказка - 785 - Label - true - true - - Left - - - Form.Command.СтруктураВарианта_ДобавитьТаблицу - Normal - Auto - true - true - UserCmds - Auto - InAdditionalSubmenu - - - СтруктураВарианта_ДобавитьДиаграмму1 - 786 - true - true - - true - - - СтруктураВарианта_ДобавитьДиаграмму1РасширеннаяПодсказка - 787 - Label - true - true - - Left - - - Form.Command.СтруктураВарианта_ДобавитьДиаграмму - Normal - Auto - true - true - UserCmds - Auto - InAdditionalSubmenu - - true - true - - true - - - <key>ru</key> - <value>Структура варианта добавление таблиц и диаграмм</value> - - - ru - Структура варианта добавление таблиц и диаграмм - - - СтруктураВарианта_ДобавлениеТаблицИДиаграмм1РасширеннаяПодсказка - 783 - Label - true - true - - Left - - - - - true - true - - true - - - <key>ru</key> - <value> </value> - - - ru - - - - КомандыСтруктурыВарианта_Добавление1РасширеннаяПодсказка - 742 - Label - true - true - - Left - - - - - - КомандыСтруктурыВарианта_Изменение1 - 749 - - СтруктураВарианта_Изменить1 - 751 - true - true - - true - - - СтруктураВарианта_Изменить1РасширеннаяПодсказка - 752 - Label - true - true - - Left - - - Form.Command.СтруктураВарианта_Изменить - Normal - Picture - true - true - UserCmds - Auto - InCommandBarAndInAdditionalSubmenu - - - СтруктураВарианта_Удалить1 - 753 - true - true - - true - - - СтруктураВарианта_Удалить1РасширеннаяПодсказка - 754 - Label - true - true - - Left - - - Form.Item.СтруктураВарианта.StandardCommand.Delete - Normal - Picture - true - true - UserCmds - Auto - InCommandBarAndInAdditionalSubmenu - - true - true - - true - - - <key>ru</key> - <value>Команды структуры варианта изменение</value> - - - ru - Команды структуры варианта изменение - - - КомандыСтруктурыВарианта_Изменение1РасширеннаяПодсказка - 750 - Label - true - true - - Left - - - - - - КомандыСтруктурыВарианта_ДвижениеПоИерархии1 - 755 - - СтруктураВарианта_ПереместитьВышеИЛевее1 - 757 - true - true - - true - - - СтруктураВарианта_ПереместитьВышеИЛевее1РасширеннаяПодсказка - 758 - Label - true - true - - Left - - - Form.Command.СтруктураВарианта_ПереместитьВышеИЛевее - Normal - Auto - true - true - UserCmds - Auto - - - СтруктураВарианта_ПереместитьНижеИПравее1 - 759 - true - true - - true - - - СтруктураВарианта_ПереместитьНижеИПравее1РасширеннаяПодсказка - 760 - Label - true - true - - Left - - - Form.Command.СтруктураВарианта_ПереместитьНижеИПравее - Normal - Auto - true - true - UserCmds - Auto - - true - true - - true - - - <key>ru</key> - <value> </value> - - - ru - - - - КомандыСтруктурыВарианта_ДвижениеПоИерархии1РасширеннаяПодсказка - 756 - Label - true - true - - Left - - - - - - КомандыСтруктурыВарианта_ДвижениеВнутриРодителя1 - 761 - - СтруктураВарианта_ПереместитьВверх1 - 763 - true - true - - true - - - СтруктураВарианта_ПереместитьВверх1РасширеннаяПодсказка - 764 - Label - true - true - - Left - - - Form.Command.СтруктураВарианта_ПереместитьВверх - Normal - Auto - true - true - UserCmds - Auto - - - СтруктураВарианта_ПереместитьВниз1 - 765 - true - true - - true - - - СтруктураВарианта_ПереместитьВниз1РасширеннаяПодсказка - 766 - Label - true - true - - Left - - - Form.Command.СтруктураВарианта_ПереместитьВниз - Normal - Auto - true - true - UserCmds - Auto - - true - true - - true - - - <key>ru</key> - <value> </value> - - - ru - - - - КомандыСтруктурыВарианта_ДвижениеВнутриРодителя1РасширеннаяПодсказка - 762 - Label - true - true - - Left - - - - - - КомандыСтруктурыВарианта_Флажки1 - 767 - - СтруктураВарианта_УстановитьФлажки1 - 769 - true - - true - - - СтруктураВарианта_УстановитьФлажки1РасширеннаяПодсказка - 770 - Label - true - true - - Left - - - Form.Command.СтруктураВарианта_УстановитьФлажки - Normal - Auto - true - true - UserCmds - Auto - InCommandBarAndInAdditionalSubmenu - - - СтруктураВарианта_СнятьФлажки1 - 771 - true - - true - - - СтруктураВарианта_СнятьФлажки1РасширеннаяПодсказка - 772 - Label - true - true - - Left - - - Form.Command.СтруктураВарианта_СнятьФлажки - Normal - Auto - true - true - UserCmds - Auto - InCommandBarAndInAdditionalSubmenu - - true - true - - true - - - <key>ru</key> - <value>Команды структуры варианта флажки</value> - - - ru - Команды структуры варианта флажки - - - КомандыСтруктурыВарианта_Флажки1РасширеннаяПодсказка - 768 - Label - true - true - - Left - - - - - - Tree - true - true - true - true - true - true - AfterCurrentRow -
        true
        - 1 - 1 - AutoUse - AutoUse - true - true - false - false - false - true - Auto - Auto - ExpandAllLevels - true - true - true - true - - СтруктураВарианта.ИндексКартинки - - - CommonPicture.ПиктограммыСтруктурыОтчета - - true -
        - true - true - - true - - - <key>ru</key> - <value>Структура</value> - - - ru - Страница структура варианта - - - СтраницаСтруктураВариантаРасширеннаяПодсказка - 428 - Label - true - true - - Left - - - Page - - - StdPicture.Dendrogram - - Vertical - auto - -
        - - НеОтсортированное - 62 - true - true - - true - - - <key>ru</key> - <value>Не отсортированные</value> - - - ru - - - true - - НеОтсортированноеРасширеннаяПодсказка - 63 - Label - true - true - - Left - - - Page - - Vertical - auto - - - true - true - - true - - - <key>ru</key> - <value>Страницы настроек</value> - - - ru - Страницы настроек - - true - true - - СтраницыНастроекРасширеннаяПодсказка - 36 - Label - true - true - - Left - - - Pages - - TabsOnTop - Auto - -
        - - ГруппаЕстьВложенныеОтчеты - 791 - - КартинкаИнформация - 793 - - <key>ru</key> - <value>Картинка информация</value> - - true - true - - true - - - КартинкаИнформацияРасширеннаяПодсказка - 795 - Label - true - true - - Left - - - - КартинкаИнформацияКонтекстноеМеню - 794 - true - - 2 - true - 1 - true - - - CommonPicture.Информация - - - - - ПодсказкаЕстьВложенныеОтчеты - 796 - - <key>ru</key> - <value>У этого отчета сложная структура настроек (имеются вложенные отчеты). -<link 1>Перейти к </><link 1>настройке</><link 1> вложенных отчетов</>.</value> - - true - true - - true - - - ПодсказкаЕстьВложенныеОтчетыРасширеннаяПодсказка - 798 - Label - true - true - - Left - - - - ПодсказкаЕстьВложенныеОтчетыКонтекстноеМеню - 797 - true - - true - Label - true - true - - - URLProcessing - ПодсказкаЕстьВложенныеОтчетыОбработкаНавигационнойСсылки - - Left - - - true - true - - true - - - <key>ru</key> - <value>Группа есть вложенные отчеты</value> - - - ru - Группа есть вложенные отчеты - - - ГруппаЕстьВложенныеОтчетыРасширеннаяПодсказка - 792 - Label - true - true - - Left - - - UsualGroup - - Auto - true - true - Auto - Auto - - - - КомандыФормы - 73 - - РасширенныйРежим - 113 - - <key>ru</key> - <value>Вид</value> - - true - true - - true - - - РасширенныйРежим - - Button - - OnChange - РасширенныйРежимПриИзменении - - - РасширенныйРежимРасширеннаяПодсказка - 115 - - <key>ru</key> - <value>Простой режим предназначен для изменения текущих настроек отчета, которые сохраняются автоматически. -Расширенный режим предназначен для изменения структуры отчета. После изменения структуры отчет необходимо сохранить как новый или перезаписать существующий.</value> - - Label - true - true - - Left - - - - РасширенныйРежимКонтекстноеМеню - 114 - true - - RadioButtonField - Enter - true - Left - true - - Tumbler - false - - - ru - Простой - - - 0 - - - - - ru - Расширенный - - - 1 - - - Vertical - - - - КомандыФормы_Правая - 80 - - ЗакрытьИСформировать - 21 - true - true - - true - - - ЗакрытьИСформироватьРасширеннаяПодсказка - 22 - Label - true - true - - Left - - - Form.Command.ЗакрытьИСформировать - true - true - true - UserCmds - Auto - InCommandBarAndInAdditionalSubmenu - - - Закрыть - 4 - true - true - - true - - - ЗакрытьРасширеннаяПодсказка - 7 - Label - true - true - - Left - - - Form.Command.ЗакрытьБезФормирования - Normal - true - true - UserCmds - Auto - InCommandBarAndInAdditionalSubmenu - - - ИзменитьФорму - 318 - - <key>ru</key> - <value>Изменить форму...</value> - - true - - true - - - ИзменитьФормуРасширеннаяПодсказка - 319 - Label - true - true - - Left - - - Form.StandardCommand.CustomizeForm - Normal - Picture - true - true - UserCmds - Auto - InCommandBarAndInAdditionalSubmenu - - - Справка - 799 - true - true - - true - - - СправкаРасширеннаяПодсказка - 800 - Label - true - true - - Left - - - Form.StandardCommand.Help - Normal - Auto - true - true - UserCmds - Auto - - true - true - - true - - - <key>ru</key> - <value> </value> - - - ru - - - true - - КомандыФормы_ПраваяРасширеннаяПодсказка - 81 - Label - true - true - - Left - - - CommandBar - - Right - - - true - true - - true - - - <key>ru</key> - <value> </value> - - - ru - - - true - - КомандыФормыРасширеннаяПодсказка - 74 - Label - true - true - - Left - - - UsualGroup - - Auto - true - true - Auto - Auto - - - Bottom - true - - ФормаКоманднаяПанель - -1 - Right - - - OnOpen - ПриОткрытии - - - OnCreateAtServer - ПриСозданииНаСервере - - - OnClose - ПриЗакрытии - - 84 - 15 - LockOwner - true - true - Vertical - true - true - true - UseIfNecessary - auto - true - - НастройкиОтчета - - <key>ru</key> - <value>Настройки отчета</value> - - 2 - - - true - - - - - ПостоянныеКоманды - - <key>ru</key> - <value>Постоянные команды</value> - - 3 - - ValueList - - - - - - - - - ПостоянныеРеквизиты - - <key>ru</key> - <value>Постоянные реквизиты</value> - - 4 - - ValueList - - - - - - - - - ВариантНаименование - - <key>ru</key> - <value>Вариант отчета</value> - - 11 - - String - - - - true - - - true - - - - ВариантСсылка - - <key>ru</key> - <value>Вариант ссылка</value> - - 13 - - CatalogRef.ВариантыОтчетов - - - true - - - true - - - - БыстрыйПоискИменОбъектовМетаданных - - <key>ru</key> - <value>Быстрый поиск имен объектов метаданных</value> - - 18 - - - true - - - true - - - - БыстрыйПоискОтключаемыхСвязей - - <key>ru</key> - <value>Быстрый поиск отключаемых связей</value> - - 19 - - - true - - - true - - - - БыстрыйПоискПользовательскихНастроек - - <key>ru</key> - <value>Быстрый поиск пользовательских настроек</value> - - 20 - - - true - - - true - - - - ШрифтОбычнойГруппы - - <key>ru</key> - <value>Шрифт обычной группы</value> - - 23 - - Font - - - true - - - true - - - - РасширенныйРежим - - <key>ru</key> - <value>Расширенный режим</value> - - 5 - - Number - - 1 - - - - true - - - true - - - - Сортировка - - <key>ru</key> - <value>Сортировка</value> - - 10 - - ValueTree - - - true - - - true - - - ИдентификаторКД - - <key>ru</key> - <value>Идентификатор КД</value> - - 1 - - - true - - - true - - - - Использование - - <key>ru</key> - <value>Использование</value> - - 2 - - Boolean - - - true - - - true - - - - Представление - - <key>ru</key> - <value>Представление</value> - - 3 - - String - - - - true - - - true - - - - Направление - - <key>ru</key> - <value>Направление</value> - - 4 - - DataCompositionSortDirection - - - true - - - true - - - - - РежимИзмененияУзлаВарианта - - <key>ru</key> - <value>Режим изменения узла варианта</value> - - 15 - - Boolean - - - true - - - true - - - - ВыбранныеПоля - - <key>ru</key> - <value>Поля</value> - - 21 - - ValueTree - - - true - - - true - - - ИдентификаторКД - - <key>ru</key> - <value>Идентификатор КД</value> - - 1 - - - true - - - true - - - - Использование - - <key>ru</key> - <value>Использование</value> - - 2 - - Boolean - - - true - - - true - - - - Представление - - <key>ru</key> - <value>Представление</value> - - 3 - - String - - - - true - - - true - - - - ЭтоГруппа - - <key>ru</key> - <value>Это группа</value> - - 4 - - Boolean - - - true - - - true - - - - Расположение - - <key>ru</key> - <value>Расположение</value> - - 5 - - DataCompositionFieldPlacement - - - true - - - true - - - - ИндексКартинки - - <key>ru</key> - <value>Индекс картинки</value> - - 6 - - Number - - 10 - - - - true - - - true - - - - ЭтоРаздел - - <key>ru</key> - <value>Это раздел</value> - - 7 - - Boolean - - - true - - - true - - - - - Отборы - - <key>ru</key> - <value>Отборы</value> - - 24 - - ValueTree - - - true - - - true - - - ИдентификаторКД - - <key>ru</key> - <value>Идентификатор КД</value> - - 1 - - - true - - - true - - - - Использование - - <key>ru</key> - <value>Использование</value> - - 2 - - Boolean - - - true - - - true - - - - Представление - - <key>ru</key> - <value>Поле</value> - - 3 - - String - - - - true - - - true - - - - Расположение - - <key>ru</key> - <value>Расположение</value> - - 5 - - DataCompositionFieldPlacement - - - true - - - true - - - - ИндексКартинки - - <key>ru</key> - <value>Индекс картинки</value> - - 6 - - Number - - 10 - - - - true - - - true - - - - Условие - - <key>ru</key> - <value>Условие</value> - - 7 - - EnumRef.ДоступныеПериодыОтчета - DataCompositionComparisonType - - - true - - - true - - - - Значение - - <key>ru</key> - <value>Значение</value> - - 8 - - - true - - - true - - - - ИндексКартинкиДоступа - - <key>ru</key> - <value>Отображение</value> - - 9 - - Number - - 10 - - - - true - - - true - - - - Заголовок - - <key>ru</key> - <value>Заголовок</value> - - 10 - - String - - - - true - - - true - - - - ЭтоРаздел - - <key>ru</key> - <value>Это раздел</value> - - 11 - - Boolean - - - true - - - true - - - - ЭтоГруппа - - <key>ru</key> - <value>Это группа</value> - - 4 - - Boolean - - - true - - - true - - - - ЭтоПараметр - - <key>ru</key> - <value>Это параметр</value> - - 12 - - Boolean - - - true - - - true - - - - ТипЗначения - - <key>ru</key> - <value>Тип значения</value> - - 13 - - TypeDescription - - - true - - - true - - - - ЗаголовокПереопределен - - <key>ru</key> - <value>Заголовок переопределен</value> - - 14 - - Boolean - - - true - - - true - - - - ТипУсловия - - <key>ru</key> - <value>Тип условия</value> - - 15 - - TypeDescription - - - true - - - true - - - - Дополнительно - - <key>ru</key> - <value>Дополнительно</value> - - 17 - - - true - - - true - - - - ВводСписком - - <key>ru</key> - <value>Ввод списком</value> - - 18 - - Boolean - - - true - - - true - - - - ВыводитьФлажок - - <key>ru</key> - <value>Выводить флажок</value> - - 19 - - Boolean - - - true - - - true - - - - ВыборГруппИЭлементов - - <key>ru</key> - <value>Выбор групп и элементов</value> - - 16 - - - true - - - true - - - - ВыводитьПредставлениеЗначения - - <key>ru</key> - <value>Выводить представление значения</value> - - 20 - - Boolean - - - true - - - true - - - - ПредставлениеЗначения - - <key>ru</key> - <value>Значение</value> - - 21 - - String - - - - true - - - true - - - - - СтруктураВарианта - - <key>ru</key> - <value>Структура</value> - - 26 - - ValueTree - - - true - - - true - - - ИдентификаторКД - - <key>ru</key> - <value>Идентификатор КД</value> - - 1 - - - true - - - true - - - - Использование - - <key>ru</key> - <value>Использование</value> - - 2 - - Boolean - - - true - - - true - - - - Представление - - <key>ru</key> - <value>Группируемые поля</value> - - 3 - - String - - - - true - - - true - - - - ЭтоГруппа - - <key>ru</key> - <value>Это группа</value> - - 4 - - Boolean - - - true - - - true - - - - ИндексКартинки - - <key>ru</key> - <value>Индекс картинки</value> - - 6 - - Number - - 10 - - - - true - - - true - - - - ФлажокДоступен - - <key>ru</key> - <value>Флажок доступен</value> - - 7 - - Boolean - - - true - - - true - - - - Заголовок - - <key>ru</key> - <value>Заголовок</value> - - 8 - - String - - - - true - - - true - - - - Подтип - - <key>ru</key> - <value>Подтип</value> - - 12 - - String - - - - true - - - true - - - - Тип - - <key>ru</key> - <value>Тип</value> - - 11 - - String - - - - true - - - true - - - - Подсвечивать - - <key>ru</key> - <value>Подсвечивать</value> - - 13 - - Boolean - - - true - - - true - - - - - ЦветНеактивныхЗначенийТаблицы - - <key>ru</key> - <value>Цвет неактивных значений таблицы</value> - - 27 - - Color - - - true - - - true - - - - КомпоновщикНастроек - - <key>ru</key> - <value>Компоновщик настроек</value> - - 22 - - DataCompositionSettingsComposer - - - true - - - true - - - - ВариантМодифицирован - - <key>ru</key> - <value>Вариант модифицирован</value> - - 28 - - Boolean - - - true - - - true - - - - РезультатВыбораСформирован - - <key>ru</key> - <value>Результат выбора сформирован</value> - - 1 - - Boolean - - - true - - - true - - - - ИдентификаторТекущегоУзлаКД - - <key>ru</key> - <value>Идентификатор текущего узла КД</value> - - 29 - - - true - - - true - - - - СоставГруппировки - - <key>ru</key> - <value>Состав группировки</value> - - 36 - - ValueTree - - - true - - - true - - - ИдентификаторКД - - <key>ru</key> - <value>Идентификатор КД</value> - - 1 - - - true - - - true - - - - Использование - - <key>ru</key> - <value>Использование</value> - - 2 - - Boolean - - - true - - - true - - - - Представление - - <key>ru</key> - <value>Поле</value> - - 3 - - String - - - - true - - - true - - - - ЭтоГруппа - - <key>ru</key> - <value>Это группа</value> - - 4 - - Boolean - - - true - - - true - - - - ТипГруппировки - - <key>ru</key> - <value>Тип группировки</value> - - 5 - - DataCompositionGroupType - - - true - - - true - - - - ИндексКартинки - - <key>ru</key> - <value>Индекс картинки</value> - - 6 - - Number - - 10 - - - - true - - - true - - - - Картинка - - <key>ru</key> - <value>Картинка</value> - - 7 - - Picture - - - true - - - true - - - - ТипДополнения - - <key>ru</key> - <value>Тип дополнения</value> - - 8 - - DataCompositionPeriodAdditionType - - - true - - - true - - - - ПоказыватьТипДополнения - - <key>ru</key> - <value>Показывать тип дополнения</value> - - 9 - - Boolean - - - true - - - true - - - - - БыстрыйПоискНастроекВарианта - - <key>ru</key> - <value>Быстрый поиск настроек варианта</value> - - 6 - - - true - - - true - - - - ОтключаемыеСвязи - - <key>ru</key> - <value>Отключаемые связи</value> - - 7 - - ValueTable - - - true - - - true - - - ТипСвязи - - <key>ru</key> - <value>Тип связи</value> - - 1 - - String - - - - true - - - true - - - - ВедущийИдентификаторВФорме - - <key>ru</key> - <value>Ведущий идентификатор в форме</value> - - 2 - - - true - - - true - - - - ПодчиненныйИдентификаторВФорме - - <key>ru</key> - <value>Подчиненный идентификатор в форме</value> - - 3 - - - true - - - true - - - - ВедущийТип - - <key>ru</key> - <value>Ведущий тип</value> - - 4 - - TypeDescription - - - true - - - true - - - - ПодчиненныйТип - - <key>ru</key> - <value>Подчиненный тип</value> - - 5 - - TypeDescription - - - true - - - true - - - - ПодчиненныйИмяПараметра - - <key>ru</key> - <value>Подчиненный имя параметра</value> - - 6 - - String - - - - true - - - true - - - - ПодчиненныйДействие - - <key>ru</key> - <value>Подчиненный действие</value> - - 7 - - - true - - - true - - - - - ПользовательскиеНастройкиМодифицированы - - <key>ru</key> - <value>Пользовательские настройки модифицированы</value> - - 8 - - Boolean - - - true - - - true - - - - ТипТекущегоУзлаКД - - <key>ru</key> - <value>Тип текущего узла КД</value> - - 37 - - String - - - - true - - - true - - - - ТекущийУзелКДТипДиаграммы - - <key>ru</key> - <value>Тип диаграммы</value> - - 38 - - - true - - - true - - - - ЗакрытьБезФормирования - - <key>ru</key> - <value>Закрыть</value> - - 1 - - ru - Завершить редактирование настроек и закрыть - - - true - - - - ЗакрытьБезФормирования - - - Auto - Auto - - - ЗакрытьИСформировать - - <key>ru</key> - <value>Закрыть и сформировать</value> - - 2 - - ru - Закрыть и сформировать - - - true - - - StdPicture.GenerateReport - - - - ЗакрытьИСформировать - - - Auto - Auto - - - Сортировка_ПереместитьВверх - - <key>ru</key> - <value>Переместить вверх</value> - - 6 - - ru - Поднять приоритет сортировки по колонке - - - true - - - StdPicture.MoveUp - - - - Сортировка_ПереместитьВверх - - - Auto - Auto - - - Сортировка_ПереместитьВниз - - <key>ru</key> - <value>Переместить вниз</value> - - 7 - - ru - Понизить приоритет сортировки по колонке - - - true - - - StdPicture.MoveDown - - - - Сортировка_ПереместитьВниз - - - Auto - Auto - - - Сортировка_ПоВозрастанию - - <key>ru</key> - <value>Сортировать по возрастанию</value> - - 8 - - ru - Сортировать данные колонки по возрастанию - - - true - - - StdPicture.SortListAsc - - - - Сортировка_ПоВозрастанию - - - Auto - Auto - - - Сортировка_ПоУбыванию - - <key>ru</key> - <value>Сортировать по убыванию</value> - - 9 - - ru - Сортировать данные колонки по убыванию - - - true - - - StdPicture.SortListDesc - - - - Сортировка_ПоУбыванию - - - Auto - Auto - - - ВыбранныеПоля_ПереместитьВверх - - <key>ru</key> - <value>Переместить вверх</value> - - 10 - - ru - Переместить поле выше или левее - - - true - - - StdPicture.MoveUp - - - - ВыбранныеПоля_ПереместитьВверх - - - Auto - Auto - - - ВыбранныеПоля_ПереместитьВниз - - <key>ru</key> - <value>Переместить вниз</value> - - 11 - - ru - Переместить поле ниже или правее - - - true - - - StdPicture.MoveDown - - - - ВыбранныеПоля_ПереместитьВниз - - - Auto - Auto - - - ВыбранныеПоля_Сгруппировать - - <key>ru</key> - <value>Сгруппировать</value> - - 12 - - ru - Выбранные поля сгруппировать - - - true - - - StdPicture.CreateFolder - - - - ВыбранныеПоля_Сгруппировать - - - Auto - Auto - - - ВыбранныеПоля_Разгруппировать - - <key>ru</key> - <value>Разгруппировать</value> - - 13 - - ru - Выбранные поля разгруппировать - - - true - - - - ВыбранныеПоля_Разгруппировать - - - Auto - Auto - - - Отборы_Сгруппировать - - <key>ru</key> - <value>Сгруппировать отборы</value> - - 3 - - ru - Создать группу и поместить в нее выделенные отборы - - - true - - - StdPicture.CreateFolder - - - - Отборы_Сгруппировать - - - Auto - Auto - - - Отборы_Разгруппировать - - <key>ru</key> - <value>Разгруппировать</value> - - 4 - - ru - Удалить выделенную группу, сохранив вложенные отборы - - - true - - - - Отборы_Разгруппировать - - - Auto - Auto - - - Отборы_ПереместитьВверх - - <key>ru</key> - <value>Переместить вверх</value> - - 5 - - ru - Переместить вверх - - - true - - - StdPicture.MoveUp - - - - Отборы_ПереместитьВверх - - - Auto - Auto - - - Отборы_ПереместитьВниз - - <key>ru</key> - <value>Переместить вниз</value> - - 14 - - ru - Переместить вниз - - - true - - - StdPicture.MoveDown - - - - Отборы_ПереместитьВниз - - - Auto - Auto - - - СтруктураВарианта_Сгруппировать - - <key>ru</key> - <value>Сгруппировать...</value> - - 15 - - ru - Обернуть эту строку в группировку по полю... - - - true - - - CommonPicture.ДобавитьРодительский - - - - СтруктураВарианта_Сгруппировать - - - Picture - Auto - Auto - - - СтруктураВарианта_ПереместитьВышеИЛевее - - <key>ru</key> - <value>Переместить выше и левее</value> - - 17 - - ru - Структура варианта переместить выше и левее - - - true - - - CommonPicture.ПереместитьВлевоВверх - - - - СтруктураВарианта_ПереместитьВышеИЛевее - - - Picture - Auto - Auto - - - СтруктураВарианта_ПереместитьНижеИПравее - - <key>ru</key> - <value>Переместить ниже и правее</value> - - 18 - - ru - Структура варианта переместить ниже и правее - - - true - - - CommonPicture.ПереместитьВправоВниз - - - - СтруктураВарианта_ПереместитьНижеИПравее - - - Picture - Auto - Auto - - - СтруктураВарианта_ПереместитьВверх - - <key>ru</key> - <value>Переместить вверх</value> - - 19 - - ru - Переместить вверх - - - true - - - StdPicture.MoveUp - - - - СтруктураВарианта_ПереместитьВверх - - - Picture - Auto - Auto - - - СтруктураВарианта_ПереместитьВниз - - <key>ru</key> - <value>Переместить вниз</value> - - 20 - - ru - Переместить вниз - - - true - - - StdPicture.MoveDown - - - - СтруктураВарианта_ПереместитьВниз - - - Picture - Auto - Auto - - - СтруктураВарианта_УстановитьФлажки - - <key>ru</key> - <value>Включить все</value> - - 21 - - ru - Включить все флажки - - - true - - - StdPicture.CheckAll - - Picture - Auto - Auto - - - СтруктураВарианта_СнятьФлажки - - <key>ru</key> - <value>Отключить все</value> - - 22 - - ru - Отключить все флажки - - - true - - - StdPicture.UncheckAll - - Picture - Auto - Auto - - - СоставГруппировки_ПереместитьВверх - - <key>ru</key> - <value>Переместить вверх</value> - - 16 - - ru - Переместить поле выше или левее - - - true - - - StdPicture.MoveUp - - - - СоставГруппировки_ПереместитьВверх - - - Auto - Auto - - - СоставГруппировки_ПереместитьВниз - - <key>ru</key> - <value>Переместить вниз</value> - - 23 - - ru - Переместить поле ниже или правее - - - true - - - StdPicture.MoveDown - - - - СоставГруппировки_ПереместитьВниз - - - Auto - Auto - - - Оформление_ПереместитьВниз - - <key>ru</key> - <value>Переместить вниз</value> - - 24 - - ru - Переместить поле ниже или правее - - - true - - - StdPicture.MoveDown - - - - ВыбранныеПоля_ПереместитьВниз - - - Auto - Auto - - - Оформление_ПереместитьВверх - - <key>ru</key> - <value>Переместить вверх</value> - - 25 - - ru - Переместить поле выше или левее - - - true - - - StdPicture.MoveUp - - - - ВыбранныеПоля_ПереместитьВверх - - - Auto - Auto - - - СтруктураВарианта_Изменить - - <key>ru</key> - <value>Изменить</value> - - 26 - - true - - F2 - - StdPicture.Change - - - - СтруктураВарианта_Изменить - - - Picture - Auto - Auto - - - СтруктураВарианта_ДобавитьТаблицу - - <key>ru</key> - <value>Добавить таблицу</value> - - 27 - - ru - Добавить таблицу - - - true - - - StdPicture.DataCompositionNewTable - - - - СтруктураВарианта_ДобавитьТаблицу - - - Auto - Auto - - - СтруктураВарианта_ДобавитьДиаграмму - - <key>ru</key> - <value>Добавить диаграмму</value> - - 28 - - ru - Добавить диаграмму - - - true - - - StdPicture.DataCompositionNewChart - - - - СтруктураВарианта_ДобавитьДиаграмму - - - Auto - Auto - - - - - -
        diff --git a/SSL/src/SettingsStorages/ХранилищеВариантовОтчетов/Forms/НастройкиОтчета/Help/ru.html b/SSL/src/SettingsStorages/ХранилищеВариантовОтчетов/Forms/НастройкиОтчета/Help/ru.html deleted file mode 100644 index 57f0bc889..000000000 --- a/SSL/src/SettingsStorages/ХранилищеВариантовОтчетов/Forms/НастройкиОтчета/Help/ru.html +++ /dev/null @@ -1,41 +0,0 @@ - -

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

        -

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

        -

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

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

        Окно настроек в зависимости от сложности отчета состоит из нескольких вкладок:

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

        Отборы

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

        Поля

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

        Сортировка

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

        Оформление

        -
        • На вкладке можно поменять некоторые параметры оформления отчета, например, с помощью флажка включить или выключить Цвет фона, в который можно окрасить все поля.

        Структура

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

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

        -
        • Укажите нужные параметры, нажмите кнопку Закрыть и сформировать. Последние настройки будут сохранены автоматически. Если были применены ошибочные настройки, их можно не только изменить, но и сбросить с помощью соответствующих команд формы отчета.
        \ No newline at end of file diff --git a/SSL/src/SettingsStorages/ХранилищеВариантовОтчетов/Forms/НастройкиОтчета/Module.bsl b/SSL/src/SettingsStorages/ХранилищеВариантовОтчетов/Forms/НастройкиОтчета/Module.bsl deleted file mode 100644 index 841be2ea9..000000000 --- a/SSL/src/SettingsStorages/ХранилищеВариантовОтчетов/Forms/НастройкиОтчета/Module.bsl +++ /dev/null @@ -1,5008 +0,0 @@ -&НаКлиенте -Перем ПеременныеКлиента; - -//////////////////////////////////////////////////////////////////////////////// -// СОБЫТИЯ ФОРМЫ - -#Область ОбработчикиСобытийФормы - -&НаСервере -Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) - Если Параметры.Свойство("АвтоТест") Тогда - Возврат; - КонецЕсли; - - Если Не Параметры.Свойство("КомпоновщикНастроек", КомпоновщикНастроек) Тогда - ВызватьИсключение НСтр("ru = 'Не передан служебный параметр ""КомпоновщикНастроек"".'"); - КонецЕсли; - Если Не Параметры.Свойство("НастройкиОтчета", НастройкиОтчета) Тогда - ВызватьИсключение НСтр("ru = 'Не передан служебный параметр ""НастройкиОтчета"".'"); - КонецЕсли; - Если Не Параметры.Свойство("ВариантНаименование", ВариантНаименование) Тогда - ВызватьИсключение НСтр("ru = 'Не передан служебный параметр ""ВариантНаименование"".'"); - КонецЕсли; - Параметры.Свойство("ИдентификаторТекущегоУзлаКД", ИдентификаторТекущегоУзлаКД); - Если ИдентификаторТекущегоУзлаКД <> Неопределено Тогда - РежимИзмененияУзлаВарианта = Истина; - Высота = 0; - КлючСохраненияПоложенияОкна = Строка(ИдентификаторТекущегоУзлаКД); - Если Не Параметры.Свойство("Заголовок", Заголовок) Тогда - ВызватьИсключение НСтр("ru = 'Не передан служебный параметр ""Заголовок"".'"); - КонецЕсли; - Если Не Параметры.Свойство("ТипТекущегоУзлаКД", ТипТекущегоУзлаКД) Тогда - ВызватьИсключение НСтр("ru = 'Не передан служебный параметр ""ТипТекущегоУзлаКД"".'"); - КонецЕсли; - Иначе - Если Не ЗначениеЗаполнено(ВариантНаименование) Тогда - ВариантНаименование = НастройкиОтчета.Наименование; - КонецЕсли; - Заголовок = НСтр("ru = 'Настройки отчета'") + " """ + ВариантНаименование + """"; - КонецЕсли; - - Источник = Новый ИсточникДоступныхНастроекКомпоновкиДанных(НастройкиОтчета.АдресСхемы); - КомпоновщикНастроек.Инициализировать(Источник); - - Элементы.РасширенныйРежим.Видимость = НастройкиОтчета.РазрешеноМенятьВарианты; - - Если РежимИзмененияУзлаВарианта Тогда - ИмяСтраницы = "СтраницаСоставГруппировки"; - РасширенныйРежим = 1; - Иначе - РасширенныйРежим = ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(НастройкиОтчета, "ФормаНастроекРасширенныйРежим", 0); - ИмяСтраницы = ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(НастройкиОтчета, "ФормаНастроекИмяСтраницы", "СтраницаОтборы"); - КонецЕсли; - Страница = Элементы.Найти(ИмяСтраницы); - Если Страница <> Неопределено Тогда - Элементы.СтраницыНастроек.ТекущаяСтраница = Страница; - КонецЕсли; - - ЦветНеактивныхЗначенийТаблицы = ЦветаСтиля.НедоступныеДанныеЦвет; - - // Регистрация команд и реквизитов формы, которые не удаляются при перезаполнении быстрых настроек. - НаборРеквизитов = ПолучитьРеквизиты(); - Для Каждого Реквизит Из НаборРеквизитов Цикл - ПостоянныеРеквизиты.Добавить(ПолноеИмяРеквизита(Реквизит)); - КонецЦикла; - Для Каждого Команда Из Команды Цикл - ПостоянныеКоманды.Добавить(Команда.Имя); - КонецЦикла; - - ПараметрыЗаполнения = Новый Структура; - ПараметрыЗаполнения.Вставить("Событие", Новый Структура); - ПараметрыЗаполнения.Событие.Вставить("Имя", "ПриСозданииНаСервере"); - Если Не РежимИзмененияУзлаВарианта И РасширенныйРежим = 1 Тогда - ПараметрыЗаполнения.Вставить("ОбновитьНастройкиВарианта", Истина); - КонецЕсли; - БыстрыеНастройкиЗаполнить(ПараметрыЗаполнения); - - ДобавитьУсловноеОформление(); -КонецПроцедуры - -&НаКлиенте -Процедура ПриОткрытии(Отказ) - ПеременныеКлиента = Новый Структура; -КонецПроцедуры - -&НаКлиенте -Процедура ПриЗакрытии() - Если Не РезультатВыбораСформирован Тогда - Если ОписаниеОповещенияОЗакрытии <> Неопределено Тогда - ВыполнитьОбработкуОповещения(ОписаниеОповещенияОЗакрытии, РезультатВыбора(Ложь)); - КонецЕсли; - КонецЕсли; -КонецПроцедуры - -#КонецОбласти - -//////////////////////////////////////////////////////////////////////////////// -// СОБЫТИЯ ЭЛЕМЕНТОВ - -#Область ОбработчикиСобытийЭлементовШапкиФормы - -&НаКлиенте -Процедура РасширенныйРежимПриИзменении(Элемент) - ПараметрыЗаполнения = Новый Структура; - ПараметрыЗаполнения.Вставить("Событие", Новый Структура("Имя", "РасширенныйРежимПриИзменении")); - Если РасширенныйРежим = 1 Тогда - ПараметрыЗаполнения.Вставить("ОбновитьНастройкиВарианта", Истина); - Иначе - ПараметрыЗаполнения.Вставить("СброситьПользовательскиеНастройки", Истина); - КонецЕсли; - БыстрыеНастройкиЗаполнитьКлиент(ПараметрыЗаполнения); -КонецПроцедуры - -&НаКлиенте -Процедура ТекущийУзелКДТипДиаграммыПриИзменении(Элемент) - КорневойУзелКД = КомпоновщикНастроек.Настройки.ПолучитьОбъектПоИдентификатору(ИдентификаторТекущегоУзлаКД); - Если ТипЗнч(КорневойУзелКД) = Тип("НастройкиВложенногоОбъектаКомпоновкиДанных") Тогда - КорневойУзелКД = КорневойУзелКД.Настройки; - КонецЕсли; - УстановитьПараметрВывода(КорневойУзелКД, "ТипДиаграммы", ТекущийУзелКДТипДиаграммы); - - ПользовательскиеНастройкиМодифицированы = Истина; - Если РасширенныйРежим = 1 Тогда - ВариантМодифицирован = Истина; - КонецЕсли; -КонецПроцедуры - -&НаКлиенте -Процедура ПодсказкаЕстьВложенныеОтчетыОбработкаНавигационнойСсылки(Элемент, НавигационнаяСсылка, СтандартнаяОбработка) - СтандартнаяОбработка = Ложь; - - ПараметрыФормы = Новый Структура(ВладелецФормы.ФормаПараметры); - ПараметрыФормы.Вставить("Вариант", КомпоновщикНастроек.Настройки); - ПараметрыФормы.Вставить("КлючВарианта", Строка(ВладелецФормы.КлючТекущегоВарианта)); - ПараметрыФормы.Вставить("ПользовательскиеНастройки", КомпоновщикНастроек.ПользовательскиеНастройки); - ПараметрыФормы.Вставить("ПредставлениеВарианта", ВариантНаименование); - ПараметрыФормы.Вставить("ПредставлениеПользовательскихНастроек", ""); - - Обработчик = Новый ОписаниеОповещения("ФормаВариантаЗавершение", ЭтотОбъект); - - Режим = РежимОткрытияОкнаФормы.БлокироватьОкноВладельца; - - ОткрытьФорму(НастройкиОтчета.ПолноеИмя + ".ФормаВарианта", ПараметрыФормы, ЭтотОбъект, , , , Обработчик, Режим); -КонецПроцедуры - -&НаКлиенте -Процедура ФормаВариантаЗавершение(Результат, ПараметрыВыполнения) Экспорт - Если ТипЗнч(Результат) <> Тип("Структура") Тогда - Возврат; - КонецЕсли; - БыстрыеНастройкиЗаполнить(Результат); -КонецПроцедуры - -//////////////////////////////////////////////////////////////////////////////// -// Подключаемые - -&НаКлиенте -Процедура Подключаемый_ФлажокИспользование_ПриИзменении(Элемент) - ФлажокИмя = Элемент.Имя; - ИдентификаторЭлемента = Прав(ФлажокИмя, 32); - Тип = Лев(ФлажокИмя, Найти(ФлажокИмя, "_")-1); - - ПользовательскаяНастройкаКД = НайтиПользовательскуюНастройкуЭлемента(ИдентификаторЭлемента); - - Если Тип = "ЭлементОтбора" Или Тип = "ЗначениеПараметра" Тогда - ТаблицаИмя = Тип + "_СписокЗначений_" + ИдентификаторЭлемента; - ТаблицаФормы = Элементы.Найти(ТаблицаИмя); - Если ТаблицаФормы <> Неопределено Тогда - ТаблицаФормы.ЦветТекста = ?(ПользовательскаяНастройкаКД.Использование, Новый Цвет, ЦветНеактивныхЗначенийТаблицы); - КонецЕсли; - КонецЕсли; - - ПользовательскиеНастройкиМодифицированы = Истина; - Если РасширенныйРежим = 1 Тогда - Найденные = НайтиНастройкуВарианта(ЭтотОбъект, ИдентификаторЭлемента); - Если Найденные <> Неопределено Тогда - Найденные.ЭлементКД.Использование = ПользовательскаяНастройкаКД.Использование; - ВариантМодифицирован = Истина; - КонецЕсли; - КонецЕсли; -КонецПроцедуры - -&НаКлиенте -Процедура Подключаемый_ПолеВвода_ПриИзменении(Элемент) - ИдентификаторЭлемента = Прав(Элемент.Имя, 32); - - ПользовательскаяНастройкаКД = НайтиПользовательскуюНастройкуЭлемента(ИдентификаторЭлемента); - Если ТипЗнч(ПользовательскаяНастройкаКД) = Тип("ЗначениеПараметраНастроекКомпоновкиДанных") Тогда - Значение = ПользовательскаяНастройкаКД.Значение; - ИначеЕсли ТипЗнч(ПользовательскаяНастройкаКД) = Тип("ЭлементОтбораКомпоновкиДанных") Тогда - Значение = ПользовательскаяНастройкаКД.ПравоеЗначение; - Иначе - Возврат; - КонецЕсли; - - Если ЗначениеЗаполнено(Значение) Тогда - ПользовательскаяНастройкаКД.Использование = Истина; - КонецЕсли; - - Если ПользовательскаяНастройкаКД.Использование Тогда // Очистка значений при изменении значения. - Найденные = ОтключаемыеСвязи.НайтиСтроки(Новый Структура("ВедущийИдентификаторВФорме", ИдентификаторЭлемента)); - Для Каждого Связь Из Найденные Цикл - Если Не ЗначениеЗаполнено(Связь.ПодчиненныйИдентификаторВФорме) Тогда - Продолжить; - КонецЕсли; - Если Связь.ТипСвязи = "ПараметровВыбора" Тогда - Если Связь.ПодчиненныйДействие <> РежимИзмененияСвязанногоЗначения.Очищать Тогда - Продолжить; - КонецЕсли; - Иначе - Продолжить; - КонецЕсли; - ПодчиненныйДополнительно = ОтчетыКлиент.НайтиДополнительныеНастройкиЭлемента(ЭтотОбъект, Связь.ПодчиненныйИдентификаторВФорме); - Если ПодчиненныйДополнительно <> Неопределено Тогда - Если ПодчиненныйДополнительно.ВыводитьФлажок Тогда - ПодчиненныйНастройкаКД = ОтчетыКлиент.НайтиПользовательскуюНастройкуЭлемента(ЭтотОбъект, Связь.ПодчиненныйИдентификаторВФорме); - Если ПодчиненныйНастройкаКД <> Неопределено Тогда - ПодчиненныйНастройкаКД.Использование = Ложь; - КонецЕсли; - КонецЕсли; - Если Не ПодчиненныйДополнительно.ОграничиватьВыборУказаннымиЗначениями Тогда - ПодчиненныйДополнительно.ЗначенияДляВыбора.Очистить(); - КонецЕсли; - КонецЕсли; - КонецЦикла; - КонецЕсли; - - ПользовательскиеНастройкиМодифицированы = Истина; -КонецПроцедуры - -&НаКлиенте -Процедура Подключаемый_ФлажокЗначения_ПриИзменении(Элемент) - ИдентификаторЭлемента = Прав(Элемент.Имя, 32); - Значение = ЭтотОбъект[Элемент.Имя]; - - ПользовательскаяНастройкаКД = НайтиПользовательскуюНастройкуЭлемента(ИдентификаторЭлемента); - Если ТипЗнч(ПользовательскаяНастройкаКД) = Тип("ЗначениеПараметраНастроекКомпоновкиДанных") Тогда - ПользовательскаяНастройкаКД.Значение = Значение; - Иначе - ПользовательскаяНастройкаКД.ПравоеЗначение = Значение; - КонецЕсли; - - ПользовательскиеНастройкиМодифицированы = Истина; -КонецПроцедуры - -&НаКлиенте -Процедура Подключаемый_СписокКомпоновщика_Значение_НачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка) - ОтчетыКлиент.СписокКомпоновщикаНачалоВыбора(ЭтотОбъект, Элемент, ДанныеВыбора, СтандартнаяОбработка); -КонецПроцедуры - -//////////////////////////////////////////////////////////////////////////////// -// Подключаемые - Стандартный период. - -&НаКлиенте -Процедура Подключаемый_СтандартныйПериод_Вид_ПриИзменении(Элемент) - ВидПериодаИмя = Элемент.Имя; - ИдентификаторЭлемента = Прав(ВидПериодаИмя, 32); - СвойстваНастройкиТип = Лев(ВидПериодаИмя, Найти(ВидПериодаИмя, "_Вид_")-1); - - СтраницыИмя = СвойстваНастройкиТип + "_Страницы_" + ИдентификаторЭлемента; - ЗначениеИмя = СвойстваНастройкиТип + "_Значение_" + ИдентификаторЭлемента; - ПредставлениеИмя = СвойстваНастройкиТип + "_Представление_" + ИдентификаторЭлемента; - СтраницаПроизвольныйИмя = СвойстваНастройкиТип + "_СтраницаПроизвольный_" + ИдентификаторЭлемента; - СтраницаСтандартныйИмя = СвойстваНастройкиТип + "_СтраницаСтандартный_" + ИдентификаторЭлемента; - - Значение = ЭтотОбъект[ЗначениеИмя]; - - ВидПериода = ЭтотОбъект[ВидПериодаИмя]; - - Если ЗначениеЗаполнено(ВидПериода) Тогда - ВыбранПроизвольный = ВидПериода = ПредопределенноеЗначение("Перечисление.ДоступныеПериодыОтчета.ПроизвольныйПериод"); - Иначе - ВидПериода = ПредопределенноеЗначение("Перечисление.ДоступныеПериодыОтчета.ПроизвольныйПериод"); - ЭтотОбъект[ВидПериодаИмя] = ВидПериода; - ВыбранПроизвольный = Истина; - КонецЕсли; - - Если ВыбранПроизвольный Тогда - - // Переключение страницы. - Элементы[СтраницыИмя].ТекущаяСтраница = Элементы[СтраницаПроизвольныйИмя]; - - Значение.Вариант = ВариантСтандартногоПериода.ПроизвольныйПериод; - - Иначе - - // Переключение страницы. - Элементы[СтраницыИмя].ТекущаяСтраница = Элементы[СтраницаСтандартныйИмя]; - - // Приведение значения периода в соответствие с выбранным видом. - ДатаСеанса = НачалоДня(ОбщегоНазначенияКлиент.ДатаСеанса()); - НачалоПериода = НачалоДня(Значение.ДатаНачала); - КонецПериода = КонецДня(Значение.ДатаОкончания); - Если Не ЗначениеЗаполнено(НачалоПериода) - Или (ДатаСеанса >= НачалоПериода И ДатаСеанса <= КонецПериода) Тогда - НачалоПериода = ДатаСеанса; - КонецЕсли; - НачалоПериода = ОтчетыКлиентСервер.НачалоПериодаОтчета(ВидПериода, НачалоПериода); - КонецПериода = ОтчетыКлиентСервер.КонецПериодаОтчета(ВидПериода, НачалоПериода); - - Значение.ДатаНачала = НачалоПериода; - Значение.ДатаОкончания = КонецПериода; - - КонецЕсли; - - Представление = ОтчетыКлиентСервер.ПредставлениеСтандартногоПериода(Значение, ВидПериода); - ЭтотОбъект[ПредставлениеИмя] = Представление; - ЭтотОбъект[ЗначениеИмя] = Значение; - - ПользовательскаяНастройкаКД = НайтиПользовательскуюНастройкуЭлемента(ИдентификаторЭлемента); - Если ТипЗнч(ПользовательскаяНастройкаКД) = Тип("ЗначениеПараметраНастроекКомпоновкиДанных") Тогда - ПользовательскаяНастройкаКД.Значение = Значение; - Иначе - ПользовательскаяНастройкаКД.ПравоеЗначение = Значение; - КонецЕсли; - - ПользовательскаяНастройкаКД.Использование = Истина; - - ПользовательскиеНастройкиМодифицированы = Истина; -КонецПроцедуры - -&НаКлиенте -Процедура Подключаемый_СтандартныйПериод_Значение_НачалоВыбора(Элемент, СтандартнаяОбработка) - СтандартнаяОбработка = Ложь; - - // Формирование сведений по элементу. - ПредставлениеИмя = Элемент.Имя; - ИдентификаторЭлемента = Прав(ПредставлениеИмя, 32); - СвойстваНастройкиТип = Лев(ПредставлениеИмя, Найти(ПредставлениеИмя, "_Представление_")-1); - - ЗначениеИмя = СвойстваНастройкиТип + "_Значение_" + ИдентификаторЭлемента; - ВидПериодаИмя = СвойстваНастройкиТип + "_Вид_" + ИдентификаторЭлемента; - - Значение = ЭтотОбъект[ЗначениеИмя]; - ВидПериода = ЭтотОбъект[ВидПериодаИмя]; - - НачалоПериода = Значение.ДатаНачала; - Если НачалоПериода = '00010101' Тогда - НачалоПериода = ОтчетыКлиентСервер.НачалоПериодаОтчета(ВидПериода, ОбщегоНазначенияКлиент.ДатаСеанса()); - КонецЕсли; - - // Параметры для чтения из обработчиков: - ПараметрыВыбора = Новый Структура; - // Для выбора значения: - ПараметрыВыбора.Вставить("Значение", Значение); - ПараметрыВыбора.Вставить("Элемент", Элемент); - // Для загрузки значения: - ПараметрыВыбора.Вставить("ИдентификаторЭлемента", ИдентификаторЭлемента); - ПараметрыВыбора.Вставить("ПредставлениеИмя", ПредставлениеИмя); - ПараметрыВыбора.Вставить("ЗначениеИмя", ЗначениеИмя); - ПараметрыВыбора.Вставить("ВидПериода", ВидПериода); - ПараметрыВыбора.Вставить("ЭтоПараметр", СвойстваНастройкиТип = "ЗначениеПараметраНастроек"); - - ВыборПериодаИзВыпадающегоСписка(-1, ПараметрыВыбора); -КонецПроцедуры - -&НаКлиенте -Процедура Подключаемый_СтандартныйПериод_НачалоПериода_ПриИзменении(Элемент) - // Формирование сведений по элементу. - ПериодНачалоИмя = Элемент.Имя; - ИдентификаторЭлемента = Прав(ПериодНачалоИмя, 32); - СвойстваНастройкиТип = Лев(ПериодНачалоИмя, Найти(ПериодНачалоИмя, "_Начало_")-1); - ЗначениеИмя = СвойстваНастройкиТип + "_Значение_" + ИдентификаторЭлемента; - - Значение = ЭтотОбъект[ЗначениеИмя]; - - Если Значение.ДатаНачала <> '00010101' Тогда - Значение.ДатаНачала = НачалоДня(Значение.ДатаНачала); - КонецЕсли; - - // Запись значения в пользовательские настройки компоновки данных. - ПользовательскаяНастройкаКД = НайтиПользовательскуюНастройкуЭлемента(ИдентификаторЭлемента); - Если ТипЗнч(ПользовательскаяНастройкаКД) = Тип("ЗначениеПараметраНастроекКомпоновкиДанных") Тогда - ПользовательскаяНастройкаКД.Значение = Значение; - Иначе - ПользовательскаяНастройкаКД.ПравоеЗначение = Значение; - КонецЕсли; - - Если Значение.ДатаНачала <> '00010101' Тогда - ПользовательскаяНастройкаКД.Использование = Истина; - КонецЕсли; - - ПользовательскиеНастройкиМодифицированы = Истина; -КонецПроцедуры - -&НаКлиенте -Процедура Подключаемый_СтандартныйПериод_КонецПериода_ПриИзменении(Элемент) - // Формирование сведений по элементу. - ПериодОкончаниеИмя = Элемент.Имя; - ИдентификаторЭлемента = Прав(ПериодОкончаниеИмя, 32); - СвойстваНастройкиТип = Лев(ПериодОкончаниеИмя, Найти(ПериодОкончаниеИмя, "_Окончание_")-1); - - ЗначениеИмя = СвойстваНастройкиТип + "_Значение_" + ИдентификаторЭлемента; - - Значение = ЭтотОбъект[ЗначениеИмя]; - - Если Значение.ДатаОкончания <> '00010101' Тогда - Значение.ДатаОкончания = КонецДня(Значение.ДатаОкончания); - КонецЕсли; - - // Запись значения в пользовательские настройки компоновки данных. - ПользовательскаяНастройкаКД = НайтиПользовательскуюНастройкуЭлемента(ИдентификаторЭлемента); - Если ТипЗнч(ПользовательскаяНастройкаКД) = Тип("ЗначениеПараметраНастроекКомпоновкиДанных") Тогда - ПользовательскаяНастройкаКД.Значение = Значение; - Иначе - ПользовательскаяНастройкаКД.ПравоеЗначение = Значение; - КонецЕсли; - - Если Значение.ДатаОкончания <> '00010101' Тогда - ПользовательскаяНастройкаКД.Использование = Истина; - КонецЕсли; - - ПользовательскиеНастройкиМодифицированы = Истина; -КонецПроцедуры - -&НаКлиенте -Процедура Подключаемый_СтандартныйПериод_Значение_Очистка(Элемент, СтандартнаяОбработка) - СтандартнаяОбработка = Ложь; -КонецПроцедуры - -//////////////////////////////////////////////////////////////////////////////// -// Подключаемые - Список значений с кнопкой "Подбор". - -&НаКлиенте -Процедура Подключаемый_СписокСПодбором_ПриИзменении(ТаблицаФормы) - // Обновление выбранных значений в данных СКД. - ИдентификаторЭлемента = Прав(ТаблицаФормы.Имя, 32); - - СписокЗначенийВФорме = ЭтотОбъект[ТаблицаФормы.Имя]; - ПользовательскаяНастройкаКД = НайтиПользовательскуюНастройкуЭлемента(ИдентификаторЭлемента); - ДополнительныеНастройки = НайтиДополнительныеНастройкиЭлемента(ИдентификаторЭлемента); - - СписокЗначенийВСКД = Новый СписокЗначений; - Если Не ДополнительныеНастройки.ОграничиватьВыборУказаннымиЗначениями Тогда - ДополнительныеНастройки.ЗначенияДляВыбора = Новый СписокЗначений; - КонецЕсли; - Для Каждого ЭлементСпискаВФорме Из СписокЗначенийВФорме Цикл - ЗначениеВФорме = ЭлементСпискаВФорме.Значение; - Если Не ДополнительныеНастройки.ОграничиватьВыборУказаннымиЗначениями Тогда - Если ДополнительныеНастройки.ЗначенияДляВыбора.НайтиПоЗначению(ЗначениеВФорме) <> Неопределено Тогда - Продолжить; - КонецЕсли; - ЗаполнитьЗначенияСвойств(ДополнительныеНастройки.ЗначенияДляВыбора.Добавить(), ЭлементСпискаВФорме); - КонецЕсли; - Если ЭлементСпискаВФорме.Пометка Тогда - Если ТипЗнч(ЗначениеВФорме) = Тип("ОписаниеТипов") Тогда - ЗначениеВСКД = ЗначениеВФорме.Типы()[0]; - Иначе - ЗначениеВСКД = ЗначениеВФорме; - КонецЕсли; - СписокЗначенийВСКД.Добавить(ЗначениеВСКД); - КонецЕсли; - КонецЦикла; - Если ТипЗнч(ПользовательскаяНастройкаКД) = Тип("ЭлементОтбораКомпоновкиДанных") Тогда - ПользовательскаяНастройкаКД.ПравоеЗначение = СписокЗначенийВСКД; - Иначе - ПользовательскаяНастройкаКД.Значение = СписокЗначенийВСКД; - КонецЕсли; - - // Включение флажка Использование. - ПользовательскаяНастройкаКД.Использование = Истина; - ТаблицаФормы.ЦветТекста = ?(ПользовательскаяНастройкаКД.Использование, Новый Цвет, ЦветНеактивныхЗначенийТаблицы); - - ПользовательскиеНастройкиМодифицированы = Истина; -КонецПроцедуры - -&НаКлиенте -Процедура Подключаемый_СписокСПодбором_Значение_АвтоПодбор(Элемент, Текст, ДанныеВыбора, Параметры, Ожидание, СтандартнаяОбработка) - Если Параметры = Неопределено Тогда - Возврат; - КонецЕсли; - - ИдентификаторЭлемента = Прав(Элемент.Имя, 32); - - // Добавление динамических параметров выбора (от ведущих). - Найденные = ОтключаемыеСвязи.НайтиСтроки(Новый Структура("ПодчиненныйИдентификаторВФорме", ИдентификаторЭлемента)); - Для Каждого Связь Из Найденные Цикл - Если Не ЗначениеЗаполнено(Связь.ВедущийИдентификаторВФорме) - Или Не ЗначениеЗаполнено(Связь.ПодчиненныйИмяПараметра) Тогда - Продолжить; - КонецЕсли; - ВедущийНастройкаКД = НайтиПользовательскуюНастройкуЭлемента(Связь.ВедущийИдентификаторВФорме); - Если Не ВедущийНастройкаКД.Использование Тогда - Продолжить; - КонецЕсли; - Если ТипЗнч(ВедущийНастройкаКД) = Тип("ЭлементОтбораКомпоновкиДанных") Тогда - ВедущийЗначение = ВедущийНастройкаКД.ПравоеЗначение; - Иначе - ВедущийЗначение = ВедущийНастройкаКД.Значение; - КонецЕсли; - Если Связь.ТипСвязи = "ПараметровВыбора" Тогда - МассивКлючей = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(Связь.ПодчиненныйИмяПараметра, ".", Истина, Истина); - ВГраница = МассивКлючей.ВГраница(); - Контекст = Параметры; - Для Индекс = 0 По ВГраница Цикл - Ключ = МассивКлючей[Индекс]; - Если Индекс = ВГраница Тогда - Контекст.Вставить(Ключ, ВедущийЗначение); - Иначе - ВложенныйКонтекст = ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(Контекст, Ключ); - Если ВложенныйКонтекст = Неопределено Тогда - ВложенныйКонтекст = Контекст.Вставить(Ключ, Новый Структура); - ИначеЕсли ТипЗнч(ВложенныйКонтекст) <> Тип("Структура") Тогда - Прервать; - КонецЕсли; - Контекст = ВложенныйКонтекст; - КонецЕсли; - КонецЦикла; - ИначеЕсли Связь.ТипСвязи = "ПоТипу" Тогда - ВедущийТип = ТипЗнч(ВедущийЗначение); - ДополнительныеНастройки = НайтиДополнительныеНастройкиЭлемента(ИдентификаторЭлемента); - Если ДополнительныеНастройки <> Неопределено - И ДополнительныеНастройки.ОписаниеТипов.СодержитТип(ВедущийТип) - И ДополнительныеНастройки.ОписаниеТипов.Типы().Количество() > 1 Тогда - МассивТипов = Новый Массив; - МассивТипов.Добавить(ВедущийТип); - Элемент.ДоступныеТипы = Новый ОписаниеТипов(МассивТипов); - КонецЕсли; - КонецЕсли; - КонецЦикла; -КонецПроцедуры - -&НаКлиенте -Процедура Подключаемый_СписокСПодбором_Использование_ПриИзменении(Элемент) - // Включение флажка Использование если пользователь включил флажок в строке таблицы. - КолонкаИспользованиеИмя = Элемент.Имя; - ИдентификаторЭлемента = Прав(КолонкаИспользованиеИмя, 32); - СвойстваНастройкиТип = Лев(КолонкаИспользованиеИмя, Найти(КолонкаИспользованиеИмя, "_Колонка_Использование_")-1); - - ТаблицаИмя = СвойстваНастройкиТип + "_СписокЗначений_" + ИдентификаторЭлемента; - - ЭлементСпискаВФорме = Элементы[ТаблицаИмя].ТекущиеДанные; - Если ЭлементСпискаВФорме <> Неопределено И ЭлементСпискаВФорме.Пометка Тогда - // Включение флажка Использование. - ПользовательскаяНастройкаКД = НайтиПользовательскуюНастройкуЭлемента(ИдентификаторЭлемента); - ПользовательскаяНастройкаКД.Использование = Истина; - - // Оформление строк. - ТаблицаФормы = Элементы.Найти(ТаблицаИмя); - ТаблицаФормы.ЦветТекста = ?(ПользовательскаяНастройкаКД.Использование, Новый Цвет, ЦветНеактивныхЗначенийТаблицы); - - ПользовательскиеНастройкиМодифицированы = Истина; - КонецЕсли; -КонецПроцедуры - -&НаКлиенте -Процедура Подключаемый_СписокСПодбором_ПередНачаломИзменения(Элемент, Отказ) - СтрокаИдентификатор = Элемент.ТекущаяСтрока; - Если СтрокаИдентификатор = Неопределено Тогда - Возврат; - КонецЕсли; - - СписокЗначенийВФорме = ЭтотОбъект[Элемент.Имя]; - ЭлементСпискаВФорме = СписокЗначенийВФорме.НайтиПоИдентификатору(СтрокаИдентификатор); - - ТекущаяСтрока = Элемент.ТекущиеДанные; - Если ТекущаяСтрока = Неопределено Тогда - Возврат; - КонецЕсли; - ЭлементСпискаДоНачалаИзменения = Новый Структура("Идентификатор, Пометка, Значение, Представление"); - ЗаполнитьЗначенияСвойств(ЭлементСпискаДоНачалаИзменения, ЭлементСпискаВФорме); - ЭлементСпискаДоНачалаИзменения.Идентификатор = СтрокаИдентификатор; - ПеременныеКлиента.Вставить("ЭлементСпискаДоНачалаИзменения", ЭлементСпискаДоНачалаИзменения); -КонецПроцедуры - -&НаКлиенте -Процедура Подключаемый_СписокСПодбором_ПередОкончаниемРедактирования(Элемент, НоваяСтрока, ОтменаНачалаРедактирования, ОтменаЗавершенияРедактирования) - Если ОтменаНачалаРедактирования Тогда - Возврат; - КонецЕсли; - - СтрокаИдентификатор = Элемент.ТекущаяСтрока; - Если СтрокаИдентификатор = Неопределено Тогда - Возврат; - КонецЕсли; - ИдентификаторЭлемента = Прав(Элемент.Имя, 32); - СписокЗначенийВФорме = ЭтотОбъект[Элемент.Имя]; - ЭлементСпискаВФорме = СписокЗначенийВФорме.НайтиПоИдентификатору(СтрокаИдентификатор); - - Значение = ЭлементСпискаВФорме.Значение; - Если Значение = Неопределено - Или Значение = Тип("Неопределено") - Или Значение = Новый ОписаниеТипов("Неопределено") - Или Не ЗначениеЗаполнено(Значение) Тогда - ОтменаЗавершенияРедактирования = Истина; // Запрет пустых значений. - Иначе - Для Каждого ЭлементСпискаДубльВФорме Из СписокЗначенийВФорме Цикл - Если ЭлементСпискаДубльВФорме.Значение = Значение И ЭлементСпискаДубльВФорме <> ЭлементСпискаВФорме Тогда - Состояние(НСтр("ru = 'Обнаружены дублирующиеся записи. Редактирование отменено.'")); - ОтменаЗавершенияРедактирования = Истина; // Запрет дублей. - Прервать; - КонецЕсли; - КонецЦикла; - КонецЕсли; - - ЭлементСпискаДоНачалаИзменения = ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(ПеременныеКлиента, "ЭлементСпискаДоНачалаИзменения"); - ЕстьИнформация = (ЭлементСпискаДоНачалаИзменения <> Неопределено И ЭлементСпискаДоНачалаИзменения.Идентификатор = СтрокаИдентификатор); - Если Не ОтменаЗавершенияРедактирования И ЕстьИнформация И ЭлементСпискаДоНачалаИзменения.Значение <> Значение Тогда - ДополнительныеНастройки = ОтчетыКлиент.НайтиДополнительныеНастройкиЭлемента(ЭтотОбъект, ИдентификаторЭлемента); - Если ДополнительныеНастройки.ОграничиватьВыборУказаннымиЗначениями Тогда - ОтменаЗавершенияРедактирования = Истина; - Иначе - ЭлементСпискаВФорме.Представление = ""; // Автозаполнение представления. - ЭлементСпискаВФорме.Пометка = Истина; // Включение флажка. - КонецЕсли; - КонецЕсли; - - Если ОтменаЗавершенияРедактирования Тогда - // Откат значений. - Если ЕстьИнформация Тогда - ЗаполнитьЗначенияСвойств(ЭлементСпискаВФорме, ЭлементСпискаДоНачалаИзменения); - КонецЕсли; - // Перезапуск события "ПередОкончаниемРедактирования" с ОтменаНачалаРедактирования = Истина. - Элемент.ЗакончитьРедактированиеСтроки(Истина); - Иначе - Если НоваяСтрока Тогда - ЭлементСпискаВФорме.Пометка = Истина; // Включение флажка. - КонецЕсли; - ПользовательскиеНастройкиМодифицированы = Истина; - КонецЕсли; -КонецПроцедуры - -&НаКлиенте -Процедура Подключаемый_СписокСПодбором_Подбор(Команда) - КнопкаПодборИмя = Команда.Имя; - - ИдентификаторЭлемента = Прав(КнопкаПодборИмя, 32); - СвойстваНастройкиТип = Лев(КнопкаПодборИмя, Найти(КнопкаПодборИмя, "_Подбор_")-1); - - ТаблицаИмя = СвойстваНастройкиТип + "_СписокЗначений_" + ИдентификаторЭлемента; - КолонкаЗначениеИмя = СвойстваНастройкиТип + "_Колонка_Значение_" + ИдентификаторЭлемента; - КнопкаПодборИмя = СвойстваНастройкиТип + "_Подбор_" + ИдентификаторЭлемента;//СтрЗаменить(ШаблонИмениЭлемента, "%1", "Подбор"); - - ТаблицаЗначение = ЭтотОбъект[ТаблицаИмя]; - КолонкаЗначениеЭлемент = Элементы[КолонкаЗначениеИмя]; - - ОписаниеТипов = ТаблицаЗначение.ТипЗначения; - - ПараметрыЭлемента = Новый Структура; - ПараметрыЭлемента.Вставить("ИдентификаторЭлемента", ИдентификаторЭлемента); - ПараметрыЭлемента.Вставить("ВыбранныйТип", Неопределено); - ПараметрыЭлемента.Вставить("КолонкаЗначениеЭлемент", КолонкаЗначениеЭлемент); - ПараметрыЭлемента.Вставить("ТаблицаЭлемент", Элементы[ТаблицаИмя]); - ПараметрыЭлемента.Вставить("ВыборТолькоГрупп", КолонкаЗначениеЭлемент.ВыборГруппИЭлементов = ГруппыИЭлементы.Группы); - ПараметрыЭлемента.Вставить("ПараметрыВыбора", Новый Массив); - - Найденные = ОтключаемыеСвязи.НайтиСтроки(Новый Структура("ПодчиненныйИдентификаторВФорме", ИдентификаторЭлемента)); - Для Каждого Связь Из Найденные Цикл - Если Не ЗначениеЗаполнено(Связь.ВедущийИдентификаторВФорме) - Или Не ЗначениеЗаполнено(Связь.ПодчиненныйИмяПараметра) Тогда - Продолжить; - КонецЕсли; - ВедущийНастройкаКД = НайтиПользовательскуюНастройкуЭлемента(Связь.ВедущийИдентификаторВФорме); - Если Не ВедущийНастройкаКД.Использование Тогда - Продолжить; - КонецЕсли; - Если ТипЗнч(ВедущийНастройкаКД) = Тип("ЭлементОтбораКомпоновкиДанных") Тогда - ВедущийЗначение = ВедущийНастройкаКД.ПравоеЗначение; - Иначе - ВедущийЗначение = ВедущийНастройкаКД.Значение; - КонецЕсли; - Если Связь.ТипСвязи = "ПараметровВыбора" Тогда - ПараметрыЭлемента.ПараметрыВыбора.Добавить(Новый ПараметрВыбора(Связь.ПодчиненныйИмяПараметра, ВедущийЗначение)); - ИначеЕсли Связь.ТипСвязи = "ПоТипу" Тогда - ТипВедущего = ТипЗнч(ВедущийЗначение); - Если ОписаниеТипов.СодержитТип(ТипВедущего) Тогда - ПараметрыЭлемента.ВыбранныйТип = ТипВедущего; - КонецЕсли; - КонецЕсли; - КонецЦикла; - - Если ПараметрыЭлемента.ВыбранныйТип <> Неопределено Тогда // Тип определен ведущим. - Подключаемый_СписокСПодбором_Подбор_ОткрытьФормуВыбора(-1, ПараметрыЭлемента); - Возврат; - КонецЕсли; - - // Выбор типа из списка. - СписокВыбора = Новый СписокЗначений; - - ПростыеТипы = Новый Соответствие; - ПростыеТипы.Вставить(Тип("Строка"), Истина); - ПростыеТипы.Вставить(Тип("Дата"), Истина); - ПростыеТипы.Вставить(Тип("Число"), Истина); - - МассивТипов = ОписаниеТипов.Типы(); - Для Каждого Тип Из МассивТипов Цикл - // Исключение типов, для которых нет групп. - Если ПараметрыЭлемента.ВыборТолькоГрупп Тогда - ИмяОбъектаМетаданных = БыстрыйПоискИменОбъектовМетаданных.Получить(Тип); - ВидОбъектаМетаданных = ВРег(Лев(ИмяОбъектаМетаданных, Найти(ИмяОбъектаМетаданных, ".")-1)); - Если ВидОбъектаМетаданных <> "СПРАВОЧНИК" И ВидОбъектаМетаданных <> "ПЛАНВИДОВХАРАКТЕРИСТИК" И ВидОбъектаМетаданных <> "ПЛАНСЧЕТОВ" Тогда - Продолжить; - КонецЕсли; - КонецЕсли; - // Исключение простых типов. - Если ПростыеТипы[Тип] = Истина Тогда - Продолжить; - КонецЕсли; - // Добавление типа в список выбора. - СписокВыбора.Добавить(Тип, Строка(Тип)); - КонецЦикла; - - Если СписокВыбора.Количество() = 0 Тогда - ПараметрыЭлемента.ТаблицаЭлемент.ДобавитьСтроку(); - Возврат; - ИначеЕсли СписокВыбора.Количество() = 1 Тогда - // Один тип - выбор не требуется. - ПараметрыЭлемента.ВыбранныйТип = СписокВыбора[0].Значение; - Подключаемый_СписокСПодбором_Подбор_ОткрытьФормуВыбора(-1, ПараметрыЭлемента); - Иначе - // Более одного типа. - Обработчик = Новый ОписаниеОповещения("Подключаемый_СписокСПодбором_Подбор_ОткрытьФормуВыбора", ЭтотОбъект, ПараметрыЭлемента); - ПоказатьВыборИзМеню(Обработчик, СписокВыбора, Элементы[КнопкаПодборИмя]); - КонецЕсли; - -КонецПроцедуры - -&НаКлиенте -Процедура Подключаемый_СписокСПодбором_Подбор_ОткрытьФормуВыбора(ВыбранныйЭлемент, ПараметрыЭлемента) Экспорт - Если ВыбранныйЭлемент = Неопределено Тогда - Возврат; - ИначеЕсли ВыбранныйЭлемент <> -1 Тогда - ПараметрыЭлемента.ВыбранныйТип = ВыбранныйЭлемент.Значение; - КонецЕсли; - - КолонкаЗначениеЭлемент = ПараметрыЭлемента.КолонкаЗначениеЭлемент; - - // Полное имя формы выбора. - // Свойство "ФормаВыбора" недоступно на клиенте даже для чтения, - // поэтому для хранения предустановленных имен форм выбора используется коллекция БыстрыйПоискИменОбъектовМетаданных. - ПутьКФорме = БыстрыйПоискИменОбъектовМетаданных.Получить(ПараметрыЭлемента.ИдентификаторЭлемента); - Если Не ЗначениеЗаполнено(ПутьКФорме) Тогда - ИмяОбъектаМетаданных = БыстрыйПоискИменОбъектовМетаданных.Получить(ПараметрыЭлемента.ВыбранныйТип); - Если ПараметрыЭлемента.ВыборТолькоГрупп Тогда - ВидОбъектаМетаданных = ВРег(Лев(ИмяОбъектаМетаданных, Найти(ИмяОбъектаМетаданных, ".")-1)); - Если ВидОбъектаМетаданных = "СПРАВОЧНИК" Или ВидОбъектаМетаданных = "ПЛАНВИДОВХАРАКТЕРИСТИК" Тогда - ПутьКФорме = ИмяОбъектаМетаданных + ".ФормаВыбораГруппы"; - Иначе - ПутьКФорме = ИмяОбъектаМетаданных + ".ФормаВыбора"; - КонецЕсли; - Иначе - ПутьКФорме = ИмяОбъектаМетаданных + ".ФормаВыбора"; - КонецЕсли; - КонецЕсли; - - ВыборГруппИЭлементов = ОтчетыКлиентСервер.ПривестиЗначениеКТипуИспользованиеГруппИЭлементов(КолонкаЗначениеЭлемент.ВыборГруппИЭлементов); - - ПараметрыФормыВыбора = Новый Структура; - // Стандартные параметры формы. - ПараметрыФормыВыбора.Вставить("ЗакрыватьПриВыборе", Ложь); - ПараметрыФормыВыбора.Вставить("ЗакрыватьПриЗакрытииВладельца", Истина); - ПараметрыФормыВыбора.Вставить("Отбор", Новый Структура); - // Стандартные параметры формы выбора (см. Расширение управляемой формы для динамического списка). - ПараметрыФормыВыбора.Вставить("ВыборГруппИЭлементов", ВыборГруппИЭлементов); - ПараметрыФормыВыбора.Вставить("МножественныйВыбор", Истина); - ПараметрыФормыВыбора.Вставить("РежимВыбора", Истина); - // Предполагаемые реквизиты. - ПараметрыФормыВыбора.Вставить("РежимОткрытияОкна", РежимОткрытияОкнаФормы.БлокироватьОкноВладельца); - ПараметрыФормыВыбора.Вставить("РазрешитьНачалоПеретаскивания", Ложь); - - // Добавление фиксированных параметров выбора. - Для Каждого ПараметрВыбора Из КолонкаЗначениеЭлемент.ПараметрыВыбора Цикл - Если ПустаяСтрока(ПараметрВыбора.Имя) Тогда - Продолжить; - КонецЕсли; - Если ЗначениеЗаполнено(ПараметрВыбора.Имя) Тогда - Если ВРег(Лев(ПараметрВыбора.Имя, 6)) = ВРег("Отбор.") Тогда - ПараметрыФормыВыбора.Отбор.Вставить(Сред(ПараметрВыбора.Имя, 7), ПараметрВыбора.Значение); - Иначе - ПараметрыФормыВыбора.Вставить(ПараметрВыбора.Имя, ПараметрВыбора.Значение); - КонецЕсли; - КонецЕсли; - КонецЦикла; - - // Добавление динамических параметров выбора (от ведущих). Для обратной совместимости. - Для Каждого СвязьПараметраВыбора Из КолонкаЗначениеЭлемент.СвязиПараметровВыбора Цикл - Если ПустаяСтрока(СвязьПараметраВыбора.Имя) Тогда - Продолжить; - КонецЕсли; - ВедущийЗначение = ЭтотОбъект[СвязьПараметраВыбора.ПутьКДанным]; - Если ВРег(Лев(СвязьПараметраВыбора.Имя, 6)) = ВРег("Отбор.") Тогда - ПараметрыФормыВыбора.Отбор.Вставить(Сред(СвязьПараметраВыбора.Имя, 7), ВедущийЗначение); - Иначе - ПараметрыФормыВыбора.Вставить(СвязьПараметраВыбора.Имя, ВедущийЗначение); - КонецЕсли; - КонецЦикла; - - // Добавление динамических параметров выбора (от ведущих). - Для Каждого ПараметрВыбора Из ПараметрыЭлемента.ПараметрыВыбора Цикл - Если ПустаяСтрока(ПараметрВыбора.Имя) Тогда - Продолжить; - КонецЕсли; - Если ЗначениеЗаполнено(ПараметрВыбора.Имя) Тогда - Если ВРег(Лев(ПараметрВыбора.Имя, 6)) = ВРег("Отбор.") Тогда - ПараметрыФормыВыбора.Отбор.Вставить(Сред(ПараметрВыбора.Имя, 7), ПараметрВыбора.Значение); - Иначе - ПараметрыФормыВыбора.Вставить(ПараметрВыбора.Имя, ПараметрВыбора.Значение); - КонецЕсли; - КонецЕсли; - КонецЦикла; - - ОткрытьФорму(ПутьКФорме, ПараметрыФормыВыбора, ПараметрыЭлемента.ТаблицаЭлемент); -КонецПроцедуры - -&НаКлиенте -Процедура Подключаемый_СписокСПодбором_ОбработкаВыбора(Элемент, РезультатВыбора, СтандартнаяОбработка) - СтандартнаяОбработка = Ложь; - - // Списки в данных формы. - ТаблицаИмя = Элемент.Имя; - ИдентификаторЭлемента = Прав(Элемент.Имя, 32); - СписокЗначенийВФорме = ЭтотОбъект[Элемент.Имя]; - ПользовательскаяНастройкаКД = НайтиПользовательскуюНастройкуЭлемента(ИдентификаторЭлемента); - - Если ТипЗнч(ПользовательскаяНастройкаКД) = Тип("ЗначениеПараметраНастроекКомпоновкиДанных") Тогда - СписокЗначенийВСКД = ПользовательскаяНастройкаКД.Значение; - Иначе - СписокЗначенийВСКД = ПользовательскаяНастройкаКД.ПравоеЗначение; - КонецЕсли; - СписокЗначенийВСКД = ОтчетыКлиентСервер.ЗначенияСписком(СписокЗначенийВСКД); - - // Добавление выбранных элементов с контролем уникальности. - Если ТипЗнч(РезультатВыбора) = Тип("Массив") Тогда - Для Каждого Значение Из РезультатВыбора Цикл - ОтчетыКлиентСервер.ДобавитьУникальноеЗначениеВСписок(СписокЗначенийВФорме, Значение, Неопределено, Истина); - ОтчетыКлиентСервер.ДобавитьУникальноеЗначениеВСписок(СписокЗначенийВСКД, Значение, Неопределено, Истина); - КонецЦикла; - Иначе - ОтчетыКлиентСервер.ДобавитьУникальноеЗначениеВСписок(СписокЗначенийВФорме, РезультатВыбора, Неопределено, Истина); - ОтчетыКлиентСервер.ДобавитьУникальноеЗначениеВСписок(СписокЗначенийВСКД, РезультатВыбора, Неопределено, Истина); - КонецЕсли; - - // Включение флажка Использование. - ПользовательскаяНастройкаКД.Использование = Истина; - - Если ТипЗнч(ПользовательскаяНастройкаКД) = Тип("ЗначениеПараметраНастроекКомпоновкиДанных") Тогда - ПользовательскаяНастройкаКД.Значение = СписокЗначенийВСКД; - Иначе - ПользовательскаяНастройкаКД.ПравоеЗначение = СписокЗначенийВСКД; - КонецЕсли; - - // Оформление строк. - ТаблицаФормы = Элементы.Найти(ТаблицаИмя); - ТаблицаФормы.ЦветТекста = ?(ПользовательскаяНастройкаКД.Использование, Новый Цвет, ЦветНеактивныхЗначенийТаблицы); - - ПользовательскиеНастройкиМодифицированы = Истина; -КонецПроцедуры - -&НаКлиенте -Процедура Подключаемый_СписокСПодбором_ВставитьИзБуфера(Команда) - КнопкаВставитьИмя = Команда.Имя; - - ИдентификаторЭлемента = Прав(КнопкаВставитьИмя, 32); - СвойстваНастройкиТип = Лев(КнопкаВставитьИмя, Найти(КнопкаВставитьИмя, "_")-1); - - ТаблицаИмя = СвойстваНастройкиТип + "_СписокЗначений_" + ИдентификаторЭлемента; - КолонкаЗначениеИмя = СвойстваНастройкиТип + "_Колонка_Значение_" + ИдентификаторЭлемента; - - Список = ЭтотОбъект[ТаблицаИмя]; - СписокЭлемент = Элементы[ТаблицаИмя]; - КолонкаЗначениеЭлемент = Элементы[КолонкаЗначениеИмя]; - - ПараметрыПоиска = Новый Структура; - ПараметрыПоиска.Вставить("ОписаниеТипов", ОписаниеТиповУдалитьПримитивные(Список.ТипЗначения)); - ПараметрыПоиска.Вставить("ПараметрыВыбора", КолонкаЗначениеЭлемент.ПараметрыВыбора); - ПараметрыПоиска.Вставить("ПредставлениеПоля", СписокЭлемент.Заголовок); - ПараметрыПоиска.Вставить("Сценарий", "ВставкаИзБуфераОбмена"); - - ПараметрыВыполнения = Новый Структура; - ПараметрыВыполнения.Вставить("ИдентификаторЭлемента", ИдентификаторЭлемента); - ПараметрыВыполнения.Вставить("ТаблицаИмя", ТаблицаИмя); - Обработчик = Новый ОписаниеОповещения("Подключаемый_СписокСПодбором_ВставитьИзБуфера_Завершение", ЭтотОбъект, ПараметрыВыполнения); - - МодульЗагрузкаДанныхИзФайлаКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("ЗагрузкаДанныхИзФайлаКлиент"); - МодульЗагрузкаДанныхИзФайлаКлиент.ПоказатьФормуЗаполненияСсылок(ПараметрыПоиска, Обработчик); -КонецПроцедуры - -&НаКлиенте -Процедура Подключаемый_СписокСПодбором_ВставитьИзБуфера_Завершение(НайденныеОбъекты, ПараметрыВыполнения) Экспорт - Если НайденныеОбъекты = Неопределено Тогда - Возврат; - КонецЕсли; - - ИдентификаторЭлемента = ПараметрыВыполнения.ИдентификаторЭлемента; - - ПользовательскаяНастройкаКД = НайтиПользовательскуюНастройкуЭлемента(ИдентификаторЭлемента); - ДополнительныеНастройки = НайтиДополнительныеНастройкиЭлемента(ИдентификаторЭлемента); - - Список = ЭтотОбъект[ПараметрыВыполнения.ТаблицаИмя]; - Если ТипЗнч(ПользовательскаяНастройкаКД) = Тип("ЭлементОтбораКомпоновкиДанных") Тогда - Отмеченные = ПользовательскаяНастройкаКД.ПравоеЗначение; - Иначе - Отмеченные = ПользовательскаяНастройкаКД.Значение; - КонецЕсли; - Для Каждого Значение Из НайденныеОбъекты Цикл - ОтчетыКлиентСервер.ДобавитьУникальноеЗначениеВСписок(Список, Значение, Неопределено, Истина); - ОтчетыКлиентСервер.ДобавитьУникальноеЗначениеВСписок(Отмеченные, Значение, Неопределено, Истина); - КонецЦикла; - - // Включение флажка Использование. - ПользовательскаяНастройкаКД.Использование = Истина; - - // Оформление строк. - ТаблицаФормы = Элементы.Найти(ПараметрыВыполнения.ТаблицаИмя); - ТаблицаФормы.ЦветТекста = ?(ПользовательскаяНастройкаКД.Использование, Новый Цвет, ЦветНеактивныхЗначенийТаблицы); - - ПользовательскиеНастройкиМодифицированы = Истина; -КонецПроцедуры - -&НаКлиенте -Процедура Подключаемый_СписокСПодбором_Добавить(Команда) - - КнопкаПодборИмя = Команда.Имя; - - ИдентификаторЭлемента = Прав(КнопкаПодборИмя, 32); - СвойстваНастройкиТип = Лев(КнопкаПодборИмя, Найти(КнопкаПодборИмя, "_Подбор_") - 1); - - ТаблицаИмя = СвойстваНастройкиТип + "_СписокЗначений_" + ИдентификаторЭлемента; - - Элементы[ТаблицаИмя].ДобавитьСтроку(); - -КонецПроцедуры - -&НаКлиенте -Процедура Подключаемый_ФиксированныйСписок_ПередНачаломДобавления(Элемент, Отказ, Копирование, Родитель, Группа, Параметр) - Отказ = Истина; -КонецПроцедуры - -&НаКлиенте -Процедура Подключаемый_ФиксированныйСписок_ПередУдалением(Элемент, Отказ) - Отказ = Истина; -КонецПроцедуры - -#КонецОбласти - -//////////////////////////////////////////////////////////////////////////////// -// СОБЫТИЯ ТАБЛИЦЫ Сортировка - -#Область ОбработчикиСобытийЭлементовТаблицыФормыСортировка - -&НаКлиенте -Процедура СортировкаВыбор(Элемент, СтрокаИдентификатор, Поле, СтандартнаяОбработка) - СтандартнаяОбработка = Ложь; - ИмяКолонки = Поле.Имя; - Если ИмяКолонки = "СортировкаПредставление" Тогда // Изменение поля - ТаблицыПолейИзменить("Сортировка", СтрокаИдентификатор); - ИначеЕсли ИмяКолонки = "СортировкаНаправление" Тогда // Изменение порядка. - ТаблицыПолейИзменитьНаправлениеСортировки(Элемент.Имя, Неопределено); - КонецЕсли; -КонецПроцедуры - -&НаКлиенте -Процедура СортировкаПередНачаломДобавления(Элемент, Отказ, Копирование, Родитель, Группа, Параметр) - Отказ = Истина; - Обработчик = Новый ОписаниеОповещения("СортировкаПослеВыбораПоля", ЭтотОбъект); - ТаблицыПолейПоказатьВыборПоля("Сортировка", Обработчик); -КонецПроцедуры - -&НаКлиенте -Процедура СортировкаПослеВыбораПоля(ДоступноеПолеКД, ПараметрыВыполнения) Экспорт - Если ДоступноеПолеКД = Неопределено Тогда - Возврат; - КонецЕсли; - - Результат = ТаблицыПолейВставить("Сортировка", Тип("ЭлементПорядкаКомпоновкиДанных"), 0, Неопределено); - - ЭлементКД = Результат.ЭлементКД; - ЭлементКД.Использование = Истина; - ЭлементКД.Поле = ДоступноеПолеКД.Поле; - ЭлементКД.ТипУпорядочивания = НаправлениеСортировкиКомпоновкиДанных.Возр; - - СтрокаТаблицы = Результат.СтрокаТаблицы; - СтрокаТаблицы.Использование = ЭлементКД.Использование; - СтрокаТаблицы.Представление = ДоступноеПолеКД.Заголовок; - СтрокаТаблицы.Направление = ЭлементКД.ТипУпорядочивания; - - ПользовательскиеНастройкиМодифицированы = Истина; - Если РасширенныйРежим = 1 Тогда - ВариантМодифицирован = Истина; - КонецЕсли; -КонецПроцедуры - -&НаКлиенте -Процедура СортировкаПередУдалением(Элемент, Отказ) - ТаблицыПолейПередУдалением(Элемент.Имя, Отказ); -КонецПроцедуры - -&НаКлиенте -Процедура СортировкаИспользованиеПриИзменении(Элемент) - ТаблицыПолейИзменитьИспользование("Сортировка"); -КонецПроцедуры - -&НаКлиенте -Процедура Сортировка_ПоУбыванию(Команда) - ТаблицыПолейИзменитьНаправлениеСортировки("Сортировка", НаправлениеСортировкиКомпоновкиДанных.Убыв); -КонецПроцедуры - -&НаКлиенте -Процедура Сортировка_ПоВозрастанию(Команда) - ТаблицыПолейИзменитьНаправлениеСортировки("Сортировка", НаправлениеСортировкиКомпоновкиДанных.Возр); -КонецПроцедуры - -&НаКлиенте -Процедура Сортировка_ПереместитьВверх(Команда) - Сценарий = Новый Структура; - Сценарий.Вставить("Шаги", "ТаблицыПолейОпределитьВыделенныеСтроки, ТаблицыПолейСдвинутьСтроки"); - Сценарий.Вставить("Действие", "Переместить"); - Сценарий.Вставить("ТаблицаИмя", "Сортировка"); - Сценарий.Вставить("Направление", -1); - - ВыполнитьСценарий(Неопределено, Сценарий); -КонецПроцедуры - -&НаКлиенте -Процедура Сортировка_ПереместитьВниз(Команда) - Сценарий = Новый Структура; - Сценарий.Вставить("Шаги", "ТаблицыПолейОпределитьВыделенныеСтроки, ТаблицыПолейСдвинутьСтроки"); - Сценарий.Вставить("Действие", "Переместить"); - Сценарий.Вставить("ТаблицаИмя", "Сортировка"); - Сценарий.Вставить("Направление", 1); - - ВыполнитьСценарий(Неопределено, Сценарий); -КонецПроцедуры - -#КонецОбласти - -//////////////////////////////////////////////////////////////////////////////// -// СОБЫТИЯ ТАБЛИЦЫ ВыбранныеПоля - -#Область ОбработчикиСобытийЭлементовТаблицыФормыВыбранныеПоля - -&НаКлиенте -Процедура ВыбранныеПоляВыбор(Элемент, СтрокаИдентификатор, Поле, СтандартнаяОбработка) - СтандартнаяОбработка = Ложь; - ИмяКолонки = Поле.Имя; - Если ИмяКолонки = "ВыбранныеПоляПредставление" Тогда // Изменение порядка. - СтрокаТаблицы = Элементы.ВыбранныеПоля.ТекущиеДанные; - Если СтрокаТаблицы = Неопределено Тогда - Возврат; - КонецЕсли; - Если СтрокаТаблицы.ЭтоГруппа Тогда - ТаблицыПолейИзменитьГруппу("ВыбранныеПоля", СтрокаИдентификатор, СтрокаТаблицы); - Иначе - ТаблицыПолейИзменить("ВыбранныеПоля", СтрокаИдентификатор); - КонецЕсли; - КонецЕсли; -КонецПроцедуры - -&НаКлиенте -Процедура ВыбранныеПоляПередНачаломДобавления(Элемент, Отказ, Копирование, Родитель, Группа, Параметр) - Отказ = Истина; - Обработчик = Новый ОписаниеОповещения("ВыбранныеПоляПослеВыбораПоля", ЭтотОбъект); - ТаблицыПолейПоказатьВыборПоля("ВыбранныеПоля", Обработчик); -КонецПроцедуры - -&НаКлиенте -Процедура ВыбранныеПоляПослеВыбораПоля(ДоступноеПолеКД, ПараметрыВыполнения) Экспорт - Если ДоступноеПолеКД = Неопределено Тогда - Возврат; - КонецЕсли; - - Результат = ТаблицыПолейВставить("ВыбранныеПоля", Тип("ВыбранноеПолеКомпоновкиДанных"), 0, Неопределено); - - ЭлементКД = Результат.ЭлементКД; - ЭлементКД.Использование = Истина; - ЭлементКД.Поле = ДоступноеПолеКД.Поле; - - СтрокаТаблицы = Результат.СтрокаТаблицы; - СтрокаТаблицы.Использование = ЭлементКД.Использование; - СтрокаТаблицы.Представление = ДоступноеПолеКД.Заголовок; - СтрокаТаблицы.ЭтоГруппа = Ложь; - СтрокаТаблицы.ИндексКартинки = 4; - - ПользовательскиеНастройкиМодифицированы = Истина; - Если РасширенныйРежим = 1 Тогда - ВариантМодифицирован = Истина; - КонецЕсли; - - ОбновитьФорму(Неопределено, Неопределено); -КонецПроцедуры - -&НаКлиенте -Процедура ВыбранныеПоляПередУдалением(Элемент, Отказ) - ТаблицыПолейПередУдалением(Элемент.Имя, Отказ); -КонецПроцедуры - -&НаКлиенте -Процедура ВыбранныеПоляИспользованиеПриИзменении(Элемент) - ТаблицыПолейИзменитьИспользование("ВыбранныеПоля"); -КонецПроцедуры - -&НаКлиенте -Процедура ВыбранныеПоля_ПереместитьВверх(Команда) - Сценарий = Новый Структура; - Сценарий.Вставить("Шаги", "ТаблицыПолейОпределитьВыделенныеСтроки, ТаблицыПолейСдвинутьСтроки"); - Сценарий.Вставить("Действие", "Переместить"); - Сценарий.Вставить("ТаблицаИмя", "ВыбранныеПоля"); - Сценарий.Вставить("Направление", -1); - - ВыполнитьСценарий(Неопределено, Сценарий); -КонецПроцедуры - -&НаКлиенте -Процедура ВыбранныеПоля_ПереместитьВниз(Команда) - Сценарий = Новый Структура; - Сценарий.Вставить("Шаги", "ТаблицыПолейОпределитьВыделенныеСтроки, ТаблицыПолейСдвинутьСтроки"); - Сценарий.Вставить("Действие", "Переместить"); - Сценарий.Вставить("ТаблицаИмя", "ВыбранныеПоля"); - Сценарий.Вставить("Направление", 1); - - ВыполнитьСценарий(Неопределено, Сценарий); -КонецПроцедуры - -&НаКлиенте -Процедура ВыбранныеПоля_Сгруппировать(Команда) - Сценарий = Новый Структура; - Сценарий.Вставить("Шаги", "ТаблицыПолейОпределитьВыделенныеСтроки, ВвестиЗаголовок, ТаблицыПолейСгруппировать, ОбновитьФорму"); - Сценарий.Вставить("Действие", "Сгруппировать"); - Сценарий.Вставить("ТаблицаИмя", "ВыбранныеПоля"); - Сценарий.Вставить("ТипГруппыКД", Тип("ГруппаВыбранныхПолейКомпоновкиДанных")); - - ВыполнитьСценарий(Неопределено, Сценарий); -КонецПроцедуры - -&НаКлиенте -Процедура ВыбранныеПоля_Разгруппировать(Команда) - ТаблицыПолейРазгруппировать("ВыбранныеПоля"); -КонецПроцедуры - -#КонецОбласти - -//////////////////////////////////////////////////////////////////////////////// -// СОБЫТИЯ ТАБЛИЦЫ Отборы - -#Область ОбработчикиСобытийЭлементовТаблицыФормыОтборы - -&НаКлиенте -Процедура ОтборыВыбор(Элемент, СтрокаИдентификатор, Поле, СтандартнаяОбработка) - СтандартнаяОбработка = Ложь; - ИмяКолонки = Поле.Имя; - Если РасширенныйРежим <> 1 Тогда - Возврат; - КонецЕсли; - СтрокаТаблицы = Элементы.Отборы.ТекущиеДанные; - Если СтрокаТаблицы = Неопределено Тогда - Возврат; - КонецЕсли; - Если СтрокаТаблицы.ЭтоРаздел Тогда - Возврат; - КонецЕсли; - - Если ИмяКолонки = "ОтборыПредставление" Тогда // Изменение порядка. - - Если СтрокаТаблицы.ЭтоПараметр Тогда - Возврат; - КонецЕсли; - Если СтрокаТаблицы.ЭтоГруппа Тогда - ТаблицыПолейИзменитьГруппу("Отборы", СтрокаИдентификатор, СтрокаТаблицы); - Иначе - ТаблицыПолейИзменить("Отборы", СтрокаИдентификатор); - КонецЕсли; - - ИначеЕсли ИмяКолонки = "ОтборыИндексКартинкиДоступа" Тогда // Изменение быстрого доступа к отбору. - - ОтборыВыбратьУровеньДоступа("Отборы", СтрокаИдентификатор, СтрокаТаблицы); - - ИначеЕсли ИмяКолонки = "ОтборыЗначение" Тогда - - Если СтрокаТаблицы.ЭтоГруппа Тогда - Возврат; - КонецЕсли; - Если СтрокаТаблицы.Условие = ВидСравненияКомпоновкиДанных.Заполнено - Или СтрокаТаблицы.Условие = ВидСравненияКомпоновкиДанных.НеЗаполнено Тогда - Возврат; - КонецЕсли; - - ЭтоПериод = (СтрокаТаблицы.ТипУсловия = Новый ОписаниеТипов("ПеречислениеСсылка.ДоступныеПериодыОтчета")); - Если ЭтоПериод Тогда - ОтборыПоказатьВыборПериода(СтрокаТаблицы); - Иначе - Если СтрокаТаблицы.ВводСписком Тогда - ОтборыПоказатьСписокСФлажками(СтрокаТаблицы); - Иначе - СтандартнаяОбработка = Истина; - КонецЕсли; - КонецЕсли; - - ИначеЕсли ИмяКолонки = "ОтборыПредставлениеЗначения" Тогда - - ОтборыВыбратьЗначениеИзСписка(СтрокаТаблицы); - - ИначеЕсли ИмяКолонки = "ОтборыУсловие" Тогда - - Если СтрокаТаблицы.ЭтоГруппа Тогда - Возврат; - КонецЕсли; - ЭтоПериод = (СтрокаТаблицы.ТипУсловия = Новый ОписаниеТипов("ПеречислениеСсылка.ДоступныеПериодыОтчета")); - Если ЭтоПериод Тогда - ОтборыПоказатьВыборПериода(СтрокаТаблицы); - Иначе - ОтборыВыбратьВидСравнения(СтрокаТаблицы); - КонецЕсли; - - ИначеЕсли ИмяКолонки = "ОтборыЗаголовок" Тогда - - СтандартнаяОбработка = Истина; - - КонецЕсли; - -КонецПроцедуры - -&НаКлиенте -Процедура ОтборыПередНачаломДобавления(Элемент, Отказ, Копирование, Родитель, Группа, Параметр) - Отказ = Истина; - Если РасширенныйРежим = 0 Тогда - Возврат; - КонецЕсли; - - Если Не РежимИзмененияУзлаВарианта Тогда - ТекущаяСтрока = Элементы.Отборы.ТекущиеДанные; - Если (ТекущаяСтрока = Неопределено) - Или (ТекущаяСтрока.ЭтоПараметр) - Или (ТекущаяСтрока.ЭтоРаздел И ТекущаяСтрока.ИдентификаторКД = "ПараметрыДанных") Тогда - ТекущаяСтрока = Отборы.ПолучитьЭлементы()[1]; - Элементы.Отборы.ТекущаяСтрока = ТекущаяСтрока.ПолучитьИдентификатор(); - КонецЕсли; - КонецЕсли; - - Обработчик = Новый ОписаниеОповещения("ОтборыПослеВыбораПоля", ЭтотОбъект); - ТаблицыПолейПоказатьВыборПоля("Отборы", Обработчик); -КонецПроцедуры - -&НаКлиенте -Процедура ОтборыПослеВыбораПоля(ДоступноеПолеОтбораКД, ПараметрыВыполнения) Экспорт - Если ДоступноеПолеОтбораКД = Неопределено Тогда - Возврат; - КонецЕсли; - - Результат = ТаблицыПолейВставить("Отборы", Тип("ЭлементОтбораКомпоновкиДанных"), 0, Неопределено); - - ЭлементКД = Результат.ЭлементКД; - ЭлементКД.Использование = Истина; - ЭлементКД.ЛевоеЗначение = ДоступноеПолеОтбораКД.Поле; - ЭлементКД.РежимОтображения = РежимОтображенияЭлементаНастройкиКомпоновкиДанных.Обычный; - ЭлементКД.ИдентификаторПользовательскойНастройки = Строка(Новый УникальныйИдентификатор()); - - Если ТипЗнч(ДоступноеПолеОтбораКД.Тип) = Тип("ОписаниеТипов") Тогда - ЭлементКД.ПравоеЗначение = ДоступноеПолеОтбораКД.Тип.ПривестиЗначение(); - КонецЕсли; - - ПользовательскиеНастройкиМодифицированы = Истина; - Если РасширенныйРежим = 1 Тогда - ВариантМодифицирован = Истина; - КонецЕсли; - - ОбновитьФорму(Неопределено, Неопределено); -КонецПроцедуры - -&НаКлиенте -Процедура ОтборыПередУдалением(Элемент, Отказ) - СтрокаТаблицы = Элемент.ТекущиеДанные; - Если СтрокаТаблицы = Неопределено Тогда - Возврат; - КонецЕсли; - Если СтрокаТаблицы.ЭтоРаздел - Или СтрокаТаблицы.ЭтоПараметр Тогда - Отказ = Истина; - Возврат; - КонецЕсли; - ТаблицыПолейПередУдалением(Элемент.Имя, Отказ); -КонецПроцедуры - -&НаКлиенте -Процедура Отборы_Сгруппировать(Команда) - Сценарий = Новый Структура; - Сценарий.Вставить("Шаги", "ТаблицыПолейОпределитьВыделенныеСтроки, ТаблицыПолейСгруппировать, ОбновитьФорму"); - Сценарий.Вставить("Действие", "Сгруппировать"); - Сценарий.Вставить("ТаблицаИмя", "Отборы"); - Сценарий.Вставить("ТипГруппыКД", Тип("ГруппаЭлементовОтбораКомпоновкиДанных")); - - ВыполнитьСценарий(Неопределено, Сценарий); -КонецПроцедуры - -&НаКлиенте -Процедура Отборы_Разгруппировать(Команда) - ТаблицыПолейРазгруппировать("Отборы"); -КонецПроцедуры - -&НаКлиенте -Процедура Отборы_ПереместитьВверх(Команда) - Сценарий = Новый Структура; - Сценарий.Вставить("Шаги", "ТаблицыПолейОпределитьВыделенныеСтроки, ТаблицыПолейСдвинутьСтроки"); - Сценарий.Вставить("Действие", "Переместить"); - Сценарий.Вставить("ТаблицаИмя", "Отборы"); - Сценарий.Вставить("Направление", -1); - - ВыполнитьСценарий(Неопределено, Сценарий); -КонецПроцедуры - -&НаКлиенте -Процедура Отборы_ПереместитьВниз(Команда) - Сценарий = Новый Структура; - Сценарий.Вставить("Шаги", "ТаблицыПолейОпределитьВыделенныеСтроки, ТаблицыПолейСдвинутьСтроки"); - Сценарий.Вставить("Действие", "Переместить"); - Сценарий.Вставить("ТаблицаИмя", "Отборы"); - Сценарий.Вставить("Направление", 1); - - ВыполнитьСценарий(Неопределено, Сценарий); -КонецПроцедуры - -&НаКлиенте -Процедура ОтборыИспользованиеПриИзменении(Элемент) - ТаблицыПолейИзменитьИспользование("Отборы"); -КонецПроцедуры - -&НаКлиенте -Процедура ОтборыЗначениеПриИзменении(Элемент) - ТаблицыПолейИзменитьЗначение("Отборы"); -КонецПроцедуры - -&НаКлиенте -Процедура ОтборыЗаголовокПриИзменении(Элемент) - СтрокаТаблицы = Элементы.Отборы.ТекущиеДанные; - Если СтрокаТаблицы = Неопределено Тогда - Возврат; - КонецЕсли; - - УзелКД = ТаблицыПолейНайтиУзел(ЭтотОбъект, "Отборы", СтрокаТаблицы); - ЭлементКД = УзелКД.ПолучитьОбъектПоИдентификатору(СтрокаТаблицы.ИдентификаторКД); - Если ЭлементКД = Неопределено Тогда - Возврат; - КонецЕсли; - - Если ПустаяСтрока(СтрокаТаблицы.Заголовок) Тогда - СтрокаТаблицы.Заголовок = СтрокаТаблицы.Представление; - КонецЕсли; - СтрокаТаблицы.ЗаголовокПереопределен = (СтрокаТаблицы.Заголовок <> СтрокаТаблицы.Представление); - - Если Не СтрокаТаблицы.ЭтоПараметр Тогда - Если СтрокаТаблицы.ИндексКартинкиДоступа = 1 Или СтрокаТаблицы.ИндексКартинкиДоступа = 3 Тогда - ЭлементКД.Представление = "1"; - Иначе - ЭлементКД.Представление = ""; - КонецЕсли; - КонецЕсли; - Если СтрокаТаблицы.ЗаголовокПереопределен Тогда - ЭлементКД.ПредставлениеПользовательскойНастройки = СтрокаТаблицы.Заголовок; - Иначе - ЭлементКД.ПредставлениеПользовательскойНастройки = ""; - КонецЕсли; - - ПользовательскиеНастройкиМодифицированы = Истина; - Если РасширенныйРежим = 1 Тогда - ВариантМодифицирован = Истина; - КонецЕсли; - -КонецПроцедуры - -&НаКлиенте -Процедура ОтборыПриАктивизацииСтроки(Элемент) - СтрокаТаблицы = Элементы.Отборы.ТекущиеДанные; - Если СтрокаТаблицы = Неопределено Тогда - Возврат; - КонецЕсли; - - МожноУдалятьИПеремещать = Истина; - Если СтрокаТаблицы.ЭтоРаздел - Или СтрокаТаблицы.ЭтоПараметр Тогда - МожноУдалятьИПеремещать = Ложь; - КонецЕсли; - - Элементы.Отборы_Удалить.Доступность = МожноУдалятьИПеремещать; - Элементы.Отборы_Удалить1.Доступность = МожноУдалятьИПеремещать; - Элементы.Отборы_Сгруппировать.Доступность = МожноУдалятьИПеремещать; - Элементы.Отборы_Сгруппировать1.Доступность = МожноУдалятьИПеремещать; - Элементы.Отборы_Разгруппировать.Доступность = МожноУдалятьИПеремещать; - Элементы.Отборы_Разгруппировать1.Доступность = МожноУдалятьИПеремещать; - Элементы.Отборы_ПереместитьВверх.Доступность = МожноУдалятьИПеремещать; - Элементы.Отборы_ПереместитьВверх1.Доступность = МожноУдалятьИПеремещать; - Элементы.Отборы_ПереместитьВниз.Доступность = МожноУдалятьИПеремещать; - Элементы.Отборы_ПереместитьВниз1.Доступность = МожноУдалятьИПеремещать; - - Если Не СтрокаТаблицы.ЭтоРаздел И Не СтрокаТаблицы.ЭтоГруппа Тогда - Если СтрокаТаблицы.Условие = ВидСравненияКомпоновкиДанных.ВСписке - Или СтрокаТаблицы.Условие = ВидСравненияКомпоновкиДанных.ВСпискеПоИерархии - Или СтрокаТаблицы.Условие = ВидСравненияКомпоновкиДанных.НеВСписке - Или СтрокаТаблицы.Условие = ВидСравненияКомпоновкиДанных.НеВСпискеПоИерархии Тогда - Элементы.ОтборыЗначение.ВыборГруппИЭлементов = ГруппыИЭлементы.ГруппыИЭлементы; - ИначеЕсли СтрокаТаблицы.Условие = ВидСравненияКомпоновкиДанных.ВИерархии - Или СтрокаТаблицы.Условие = ВидСравненияКомпоновкиДанных.НеВИерархии Тогда - Элементы.ОтборыЗначение.ВыборГруппИЭлементов = ГруппыИЭлементы.Группы; - ИначеЕсли СтрокаТаблицы.ВыборГруппИЭлементов <> Неопределено Тогда - Элементы.ОтборыЗначение.ВыборГруппИЭлементов = СтрокаТаблицы.ВыборГруппИЭлементов; - Иначе - Элементы.ОтборыЗначение.ВыборГруппИЭлементов = ГруппыИЭлементы.Авто; - КонецЕсли; - КонецЕсли; - -КонецПроцедуры - -#КонецОбласти - -//////////////////////////////////////////////////////////////////////////////// -// СОБЫТИЯ ТАБЛИЦЫ СтруктураВарианта - -#Область ОбработчикиСобытийЭлементовТаблицыФормыСтруктураВарианта - -&НаКлиенте -Процедура СтруктураВариантаПриАктивизацииСтроки(Элемент) - СтрокаТаблицы = Элементы.СтруктураВарианта.ТекущиеДанные; - Если СтрокаТаблицы = Неопределено Тогда - Возврат; - КонецЕсли; - - МожноДобавлятьВложенные = Истина; - МожноГруппировать = Истина; - МожноОткрывать = Истина; - МожноУдалятьИПеремещать = Истина; - МожноДобавлятьТаблицыИДиаграммы = Ложь; - - Родитель = СтрокаТаблицы.ПолучитьРодителя(); - РодителяМожноПеремещать = (Родитель <> Неопределено - И Родитель.Тип <> "Настройки" - И Родитель.Тип <> "КоллекцияЭлементовСтруктурыТаблицы" - И Родитель.Тип <> "КоллекцияЭлементовСтруктурыДиаграммы"); - ЕстьСоседние = ЭлементыСтрокиДерева(СтруктураВарианта, Родитель).Количество() > 1; - - ЕстьПодчиненные = (СтрокаТаблицы.ПолучитьЭлементы().Количество() > 0); - Если СтрокаТаблицы.Тип = "Таблица" - Или СтрокаТаблицы.Тип = "Диаграмма" - Или СтрокаТаблицы.Тип = "НастройкиВложенногоОбъекта" Тогда - МожноОткрывать = Ложь; - МожноДобавлятьВложенные = Ложь; - ИначеЕсли СтрокаТаблицы.Тип = "Настройки" - Или СтрокаТаблицы.Тип = "КоллекцияЭлементовСтруктурыТаблицы" - Или СтрокаТаблицы.Тип = "КоллекцияЭлементовСтруктурыДиаграммы" Тогда - МожноОткрывать = Ложь; - МожноУдалятьИПеремещать = Ложь; - МожноГруппировать = Ложь; - ИначеЕсли СтрокаТаблицы.Тип = "НастройкиВложенногоОбъекта" Тогда - МожноОткрывать = Ложь; - МожноГруппировать = Ложь; - КонецЕсли; - - Если СтрокаТаблицы.Тип = "Настройки" Или СтрокаТаблицы.Тип = "Группировка" Тогда - МожноДобавлятьТаблицыИДиаграммы = Истина; - КонецЕсли; - - Элементы.СтруктураВарианта_Добавить.Доступность = МожноДобавлятьВложенные; - Элементы.СтруктураВарианта_Добавить1.Доступность = МожноДобавлятьВложенные; - Элементы.СтруктураВарианта_Изменить.Доступность = МожноОткрывать; - Элементы.СтруктураВарианта_Изменить1.Доступность = МожноОткрывать; - Элементы.СтруктураВарианта_ДобавитьТаблицу.Доступность = МожноДобавлятьТаблицыИДиаграммы; - Элементы.СтруктураВарианта_ДобавитьТаблицу1.Доступность = МожноДобавлятьТаблицыИДиаграммы; - Элементы.СтруктураВарианта_ДобавитьДиаграмму.Доступность = МожноДобавлятьТаблицыИДиаграммы; - Элементы.СтруктураВарианта_ДобавитьДиаграмму1.Доступность = МожноДобавлятьТаблицыИДиаграммы; - Элементы.СтруктураВарианта_Удалить.Доступность = МожноУдалятьИПеремещать; - Элементы.СтруктураВарианта_Удалить1.Доступность = МожноУдалятьИПеремещать; - Элементы.СтруктураВарианта_Сгруппировать.Доступность = МожноГруппировать; - Элементы.СтруктураВарианта_Сгруппировать1.Доступность = МожноГруппировать; - Элементы.СтруктураВарианта_ПереместитьВышеИЛевее.Доступность = МожноУдалятьИПеремещать И РодителяМожноПеремещать И МожноДобавлятьВложенные И МожноГруппировать; - Элементы.СтруктураВарианта_ПереместитьВышеИЛевее1.Доступность = МожноУдалятьИПеремещать И РодителяМожноПеремещать И МожноДобавлятьВложенные И МожноГруппировать; - Элементы.СтруктураВарианта_ПереместитьНижеИПравее.Доступность = МожноУдалятьИПеремещать И ЕстьПодчиненные И МожноДобавлятьВложенные И МожноГруппировать; - Элементы.СтруктураВарианта_ПереместитьНижеИПравее1.Доступность = МожноУдалятьИПеремещать И ЕстьПодчиненные И МожноДобавлятьВложенные И МожноГруппировать; - Элементы.СтруктураВарианта_ПереместитьВверх.Доступность = МожноУдалятьИПеремещать И ЕстьСоседние; - Элементы.СтруктураВарианта_ПереместитьВверх1.Доступность = МожноУдалятьИПеремещать И ЕстьСоседние; - Элементы.СтруктураВарианта_ПереместитьВниз.Доступность = МожноУдалятьИПеремещать И ЕстьСоседние; - Элементы.СтруктураВарианта_ПереместитьВниз1.Доступность = МожноУдалятьИПеремещать И ЕстьСоседние; - -КонецПроцедуры - -&НаКлиенте -Процедура СтруктураВариантаВыбор(Элемент, СтрокаИдентификатор, Поле, СтандартнаяОбработка) - СтандартнаяОбработка = Ложь; - Если РасширенныйРежим <> 1 Тогда - Возврат; - КонецЕсли; - СтрокаТаблицы = Элементы.СтруктураВарианта.ТекущиеДанные; - Если СтрокаТаблицы = Неопределено Тогда - Возврат; - КонецЕсли; - Если СтрокаТаблицы.Тип = "КоллекцияЭлементовСтруктурыТаблицы" - Или СтрокаТаблицы.Тип = "КоллекцияЭлементовСтруктурыДиаграммы" - Или СтрокаТаблицы.Тип = "Настройки" Тогда - Возврат; - КонецЕсли; - ИмяКолонки = Поле.Имя; - Если ИмяКолонки = "СтруктураВариантаПредставление" Тогда - Если СтрокаТаблицы.Тип = "Таблица" - Или СтрокаТаблицы.Тип = "НастройкиВложенногоОбъекта" Тогда - Возврат; - КонецЕсли; - ТаблицыПолейИзменитьУзелСтруктурыВарианта("СтруктураВарианта", СтрокаИдентификатор, СтрокаТаблицы); - Иначе - СтандартнаяОбработка = Истина; - КонецЕсли; -КонецПроцедуры - -&НаКлиенте -Процедура СтруктураВариантаПередНачаломДобавления(Элемент, Отказ, Копирование, Родитель, Группа, Параметр) - Отказ = Истина; - Если РасширенныйРежим = 0 Тогда - Возврат; - КонецЕсли; - Если Не Элементы.СтруктураВарианта_Добавить.Доступность Тогда - Возврат; - КонецЕсли; - - СтруктураВариантаДобавитьГруппировку(Истина); -КонецПроцедуры - -&НаКлиенте -Процедура СтруктураВарианта_Сгруппировать(Команда) - Если Не Элементы.СтруктураВарианта_Сгруппировать.Доступность Тогда - Возврат; - КонецЕсли; - СтруктураВариантаДобавитьГруппировку(Ложь); -КонецПроцедуры - -&НаКлиенте -Процедура СтруктураВариантаДобавитьГруппировку(ВнутрьТекущей) - ПараметрыВыполнения = Новый Структура; - ПараметрыВыполнения.Вставить("ВнутрьТекущей", ВнутрьТекущей); - ПараметрыВыполнения.Вставить("Оборачивать", Истина); - - ИдентификаторУзлаНастроек = Неопределено; - СтрокаТаблицы = Элементы.СтруктураВарианта.ТекущиеДанные; - Если СтрокаТаблицы <> Неопределено Тогда - Если Не ВнутрьТекущей Тогда - СтрокаТаблицы = СтрокаТаблицы.ПолучитьРодителя(); - КонецЕсли; - Если ВнутрьТекущей Тогда - Если СтрокаТаблицы.Тип = "Настройки" И Не СтрокаТаблицы.ФлажокДоступен Тогда - ПараметрыВыполнения.Оборачивать = Ложь; - ИначеЕсли СтрокаТаблицы.ПолучитьЭлементы().Количество() > 1 Тогда - ПараметрыВыполнения.Оборачивать = Ложь; - КонецЕсли; - КонецЕсли; - Пока СтрокаТаблицы <> Неопределено Цикл - Если СтрокаТаблицы.Тип = "Настройки" - Или СтрокаТаблицы.Тип = "НастройкиВложенногоОбъекта" - Или СтрокаТаблицы.Тип = "Группировка" - Или СтрокаТаблицы.Тип = "ГруппировкаТаблицы" - Или СтрокаТаблицы.Тип = "ГруппировкаДиаграммы" Тогда - ИдентификаторУзлаНастроек = СтрокаТаблицы.ИдентификаторКД; - Прервать; - КонецЕсли; - СтрокаТаблицы = СтрокаТаблицы.ПолучитьРодителя(); - КонецЦикла; - КонецЕсли; - - Обработчик = Новый ОписаниеОповещения("СтруктураВариантаДобавитьГруппировкуПослеВыбораПоля", ЭтотОбъект, ПараметрыВыполнения); - ТаблицыПолейПоказатьВыборПоля("СтруктураВарианта", Обработчик, Неопределено, ИдентификаторУзлаНастроек); -КонецПроцедуры - -&НаКлиенте -Процедура СтруктураВариантаДобавитьГруппировкуПослеВыбораПоля(ДоступноеПолеКД, ПараметрыВыполнения) Экспорт - Если ДоступноеПолеКД = Неопределено Тогда - Возврат; - КонецЕсли; - - ТекущаяСтрока = Элементы.СтруктураВарианта.ТекущиеДанные; - - СтрокиПеремещаемыеВНовуюГруппировку = Новый Массив; - Если ПараметрыВыполнения.Оборачивать Тогда - Если ПараметрыВыполнения.ВнутрьТекущей Тогда - Найденные = ТекущаяСтрока.ПолучитьЭлементы(); - Для Каждого ПеремещаемаяСтрока Из Найденные Цикл - СтрокиПеремещаемыеВНовуюГруппировку.Добавить(ПеремещаемаяСтрока); - КонецЦикла; - Иначе - СтрокиПеремещаемыеВНовуюГруппировку.Добавить(ТекущаяСтрока); - КонецЕсли; - КонецЕсли; - - // Добавление новой группировки. - Результат = ТаблицыПолейВставить("СтруктураВарианта", Тип("ГруппировкаКомпоновкиДанных"), ТекущаяСтрока, ПараметрыВыполнения.ВнутрьТекущей); - - ЭлементКД = Результат.ЭлементКД; - ЭлементКД.Использование = Истина; - ЭлементКД.Выбор.Элементы.Добавить(Тип("АвтоВыбранноеПолеКомпоновкиДанных")); - ЭлементКД.Порядок.Элементы.Добавить(Тип("АвтоЭлементПорядкаКомпоновкиДанных")); - - Если ДоступноеПолеКД = "<>" Тогда - // Детальные записи - добавлять поле не требуется. - Представление = НСтр("ru = '<Детальные записи>'"); - Иначе - ПолеГруппировкиКД = ЭлементКД.ПоляГруппировки.Элементы.Добавить(Тип("ПолеГруппировкиКомпоновкиДанных")); - ПолеГруппировкиКД.Использование = Истина; - ПолеГруппировкиКД.Поле = ДоступноеПолеКД.Поле; - Представление = Строка(ДоступноеПолеКД.Заголовок); - КонецЕсли; - - СтрокаТаблицы = Результат.СтрокаТаблицы; - СтрокаТаблицы.Использование = ЭлементКД.Использование; - СтрокаТаблицы.Представление = Представление; - СтрокаТаблицы.ИндексКартинки = 1; - СтрокаТаблицы.ФлажокДоступен = Истина; - СтрокаТаблицы.Тип = ОтчетыКлиентСервер.ТипНастройкиСтрокой(ТипЗнч(ЭлементКД)); - - Если Не ПараметрыВыполнения.ВнутрьТекущей Тогда - СтрокаТаблицы.Заголовок = ТекущаяСтрока.Заголовок; - СтруктураВариантаОбновитьЗаголовокЭлементаВКомпоновщике(СтрокаТаблицы); - ТекущаяСтрока.Заголовок = ""; - СтруктураВариантаОбновитьЗаголовокЭлементаВКомпоновщике(ТекущаяСтрока); - КонецЕсли; - - // Перемещение текущей группировки в новую. - Для Каждого ПеремещаемаяСтрока Из СтрокиПеремещаемыеВНовуюГруппировку Цикл - Результат = ТаблицыПолейПереместить("СтруктураВарианта", ПеремещаемаяСтрока, СтрокаТаблицы, Неопределено, Ложь); - КонецЦикла; - - // Бантики. - Элементы.СтруктураВарианта.Развернуть(СтрокаТаблицы.ПолучитьИдентификатор(), Истина); - Элементы.СтруктураВарианта.ТекущаяСтрока = СтрокаТаблицы.ПолучитьИдентификатор(); - - ПользовательскиеНастройкиМодифицированы = Истина; - Если РасширенныйРежим = 1 Тогда - ВариантМодифицирован = Истина; - КонецЕсли; -КонецПроцедуры - -&НаКлиенте -Процедура СтруктураВарианта_ДобавитьТаблицу(Команда) - Если Не Элементы.СтруктураВарианта_ДобавитьТаблицу.Доступность Тогда - Возврат; - КонецЕсли; - ДобавитьТаблицуИлиДиаграмму(Тип("ТаблицаКомпоновкиДанных")); -КонецПроцедуры - -&НаКлиенте -Процедура СтруктураВарианта_ДобавитьДиаграмму(Команда) - Если Не Элементы.СтруктураВарианта_ДобавитьДиаграмму.Доступность Тогда - Возврат; - КонецЕсли; - ДобавитьТаблицуИлиДиаграмму(Тип("ДиаграммаКомпоновкиДанных")); -КонецПроцедуры - -&НаКлиенте -Процедура ДобавитьТаблицуИлиДиаграмму(ТипЭлемента) - ТекущаяСтрока = Элементы.СтруктураВарианта.ТекущиеДанные; - - Результат = ТаблицыПолейВставить("СтруктураВарианта", ТипЭлемента, ТекущаяСтрока, Истина); - - Если ТипЭлемента = Тип("ДиаграммаКомпоновкиДанных") Тогда - ЭлементКД = Результат.ЭлементКД; - ЭлементКД.Выбор.Элементы.Добавить(Тип("АвтоВыбранноеПолеКомпоновкиДанных")); - УстановитьПараметрВывода(ЭлементКД, "ТипДиаграммы.СоединениеЗначенийПоСериям", ТипСоединенияЗначенийПоСериямДиаграммы.СоединениеКраев); - УстановитьПараметрВывода(ЭлементКД, "ТипДиаграммы.ЛинииСоединенияЗначенийПоСериям"); - УстановитьПараметрВывода(ЭлементКД, "ТипДиаграммы.ЦветСоединенияЗначенийПоСериям", WebЦвета.СеребристоСерый); - УстановитьПараметрВывода(ЭлементКД, "ТипДиаграммы.РежимСглаживания", РежимСглаживанияДиаграммы.ГладкаяКривая); - УстановитьПараметрВывода(ЭлементКД, "ТипДиаграммы.РежимПолупрозрачности", РежимПолупрозрачностиДиаграммы.Использовать); - КонецЕсли; - - ПользовательскиеНастройкиМодифицированы = Истина; - Если РасширенныйРежим = 1 Тогда - ВариантМодифицирован = Истина; - КонецЕсли; - - ОбновитьФорму(Неопределено, Неопределено); -КонецПроцедуры - -&НаКлиенте -Процедура СтруктураВариантаНачалоПеретаскивания(Элемент, ПараметрыПеретаскивания, СтандартнаяОбработка) - // Проверка общих условий. - Если РасширенныйРежим = 0 Тогда - СтандартнаяОбработка = Ложь; - Возврат; - КонецЕсли; - // Проверка источника. - СтрокаТаблицы = СтруктураВарианта.НайтиПоИдентификатору(ПараметрыПеретаскивания.Значение); - Если СтрокаТаблицы = Неопределено Тогда - СтандартнаяОбработка = Ложь; - Возврат; - КонецЕсли; - Если СтрокаТаблицы.Тип = "КоллекцияЭлементовСтруктурыДиаграммы" - Или СтрокаТаблицы.Тип = "КоллекцияЭлементовСтруктурыТаблицы" - Или СтрокаТаблицы.Тип = "Настройки" Тогда - СтандартнаяОбработка = Ложь; - Возврат; - КонецЕсли; -КонецПроцедуры - -&НаКлиенте -Процедура СтруктураВариантаПроверкаПеретаскивания(Элемент, ПараметрыПеретаскивания, СтандартнаяОбработка, ИдентификаторПолучателя, Поле) - // Проверка общих условий. - Если ИдентификаторПолучателя = Неопределено Тогда - ПараметрыПеретаскивания.Действие = ДействиеПеретаскивания.Отмена; - Возврат; - КонецЕсли; - // Проверка источника. - СтрокаТаблицы = СтруктураВарианта.НайтиПоИдентификатору(ПараметрыПеретаскивания.Значение); - Если СтрокаТаблицы = Неопределено Тогда - ПараметрыПеретаскивания.Действие = ДействиеПеретаскивания.Отмена; - Возврат; - КонецЕсли; - // Проверка приемника. - НовыйРодитель = СтруктураВарианта.НайтиПоИдентификатору(ИдентификаторПолучателя); - Если НовыйРодитель = Неопределено Тогда - ПараметрыПеретаскивания.Действие = ДействиеПеретаскивания.Отмена; - Возврат; - КонецЕсли; - Если НовыйРодитель.Тип = "Таблица" - Или НовыйРодитель.Тип = "Диаграмма" Тогда - ПараметрыПеретаскивания.Действие = ДействиеПеретаскивания.Отмена; - Возврат; - КонецЕсли; - - // Проверка совместимости источника с приемником. - ДопустимоТолькоНаличиеГруппировок = Ложь; - Если НовыйРодитель.Тип = "КоллекцияЭлементовСтруктурыТаблицы" - Или НовыйРодитель.Тип = "КоллекцияЭлементовСтруктурыДиаграммы" - Или НовыйРодитель.Тип = "ГруппировкаТаблицы" - Или НовыйРодитель.Тип = "ГруппировкаДиаграммы" Тогда - ДопустимоТолькоНаличиеГруппировок = Истина; - КонецЕсли; - - Если ДопустимоТолькоНаличиеГруппировок - И СтрокаТаблицы.Тип <> "Группировка" - И СтрокаТаблицы.Тип <> "ГруппировкаТаблицы" - И СтрокаТаблицы.Тип <> "ГруппировкаДиаграммы" Тогда - ПараметрыПеретаскивания.Действие = ДействиеПеретаскивания.Отмена; - Возврат; - КонецЕсли; - - КоллекцииКоллекций = Новый Массив; - КоллекцииКоллекций.Добавить(СтрокаТаблицы.ПолучитьЭлементы()); - Количество = 1; - Пока Количество > 0 Цикл - Коллекция = КоллекцииКоллекций[0]; - Количество = Количество - 1; - КоллекцииКоллекций.Удалить(0); - Для Каждого ВложеннаяСтрокаТаблицы Из Коллекция Цикл - Если ВложеннаяСтрокаТаблицы = НовыйРодитель Тогда - ПараметрыПеретаскивания.Действие = ДействиеПеретаскивания.Отмена; - Возврат; - КонецЕсли; - Если ДопустимоТолькоНаличиеГруппировок - И ВложеннаяСтрокаТаблицы.Тип <> "Группировка" - И ВложеннаяСтрокаТаблицы.Тип <> "ГруппировкаТаблицы" - И ВложеннаяСтрокаТаблицы.Тип <> "ГруппировкаДиаграммы" Тогда - ПараметрыПеретаскивания.Действие = ДействиеПеретаскивания.Отмена; - Возврат; - КонецЕсли; - КоллекцииКоллекций.Добавить(ВложеннаяСтрокаТаблицы.ПолучитьЭлементы()); - Количество = Количество + 1; - КонецЦикла; - КонецЦикла; - -КонецПроцедуры - -&НаКлиенте -Процедура СтруктураВариантаПеретаскивание(Элемент, ПараметрыПеретаскивания, СтандартнаяОбработка, ИдентификаторПолучателя, Поле) - // Все проверки пройдены. - СтандартнаяОбработка = Ложь; - - СтрокаТаблицы = СтруктураВарианта.НайтиПоИдентификатору(ПараметрыПеретаскивания.Значение); - - УзелКД = ТаблицыПолейНайтиУзел(ЭтотОбъект, "СтруктураВарианта", СтрокаТаблицы); - ЭлементКД = УзелКД.ПолучитьОбъектПоИдентификатору(СтрокаТаблицы.ИдентификаторКД); - - СтарыйРодитель = СтрокаТаблицы.ПолучитьРодителя(); - НовыйРодитель = СтруктураВарианта.НайтиПоИдентификатору(ИдентификаторПолучателя); - Если СтарыйРодитель = НовыйРодитель Тогда - Возврат; // Работа выполнена. - КонецЕсли; - - Если СтарыйРодитель = Неопределено Тогда - СтарыйРодительСтроки = СтруктураВарианта.ПолучитьЭлементы(); - СтарыйРодительКД = УзелКД; - Иначе - СтарыйРодительСтроки = СтарыйРодитель.ПолучитьЭлементы(); - СтарыйРодительКД = УзелКД.ПолучитьОбъектПоИдентификатору(СтарыйРодитель.ИдентификаторКД); - КонецЕсли; - - Если ТипЗнч(СтарыйРодительКД) = Тип("КоллекцияЭлементовСтруктурыДиаграммыКомпоновкиДанных") - Или ТипЗнч(СтарыйРодительКД) = Тип("КоллекцияЭлементовСтруктурыТаблицыКомпоновкиДанных") Тогда - СтарыйРодительКДСтроки = СтарыйРодительКД; - Иначе - СтарыйРодительКДСтроки = СтарыйРодительКД.Структура; - КонецЕсли; - - НовыйРодительСтроки = НовыйРодитель.ПолучитьЭлементы(); - НовыйРодительКД = УзелКД.ПолучитьОбъектПоИдентификатору(НовыйРодитель.ИдентификаторКД); - Если ТипЗнч(НовыйРодительКД) = Тип("КоллекцияЭлементовСтруктурыДиаграммыКомпоновкиДанных") - Или ТипЗнч(НовыйРодительКД) = Тип("КоллекцияЭлементовСтруктурыТаблицыКомпоновкиДанных") Тогда - НовыйРодительКДСтроки = НовыйРодительКД; - Иначе - НовыйРодительКДСтроки = НовыйРодительКД.Структура; - КонецЕсли; - - Результат = ТаблицыПолейСкопироватьРекурсивно(УзелКД, СтрокаТаблицы, НовыйРодительСтроки, ЭлементКД, НовыйРодительКДСтроки); - - Если ПараметрыПеретаскивания.Действие = ДействиеПеретаскивания.Перемещение Тогда - СтарыйРодительСтроки.Удалить(СтрокаТаблицы); - СтарыйРодительКДСтроки.Удалить(ЭлементКД); - КонецЕсли; - - Элементы.СтруктураВарианта.Развернуть(НовыйРодитель.ПолучитьИдентификатор(), Истина); - Элементы.СтруктураВарианта.ТекущаяСтрока = Результат.СтрокаДерева.ПолучитьИдентификатор(); //НоваяСтрокаТаблицы.ПолучитьИдентификатор(); - - ПользовательскиеНастройкиМодифицированы = Истина; - Если РасширенныйРежим = 1 Тогда - ВариантМодифицирован = Истина; - КонецЕсли; -КонецПроцедуры - -&НаКлиенте -Процедура СтруктураВариантаИспользованиеПриИзменении(Элемент) - ТаблицыПолейИзменитьИспользование("СтруктураВарианта"); -КонецПроцедуры - -&НаКлиенте -Процедура СтруктураВариантаЗаголовокПриИзменении(Элемент) - СтрокаТаблицы = Элементы.СтруктураВарианта.ТекущиеДанные; - Если СтрокаТаблицы = Неопределено Тогда - Возврат; - КонецЕсли; - - СтруктураВариантаОбновитьЗаголовокЭлементаВКомпоновщике(СтрокаТаблицы); - - ПользовательскиеНастройкиМодифицированы = Истина; - Если РасширенныйРежим = 1 Тогда - ВариантМодифицирован = Истина; - КонецЕсли; -КонецПроцедуры - -&НаКлиенте -Процедура СтруктураВарианта_ПереместитьВверх(Команда) - Сценарий = Новый Структура; - Сценарий.Вставить("Шаги", "ТаблицыПолейОпределитьВыделенныеСтроки, ТаблицыПолейСдвинутьСтроки"); - Сценарий.Вставить("Действие", "Переместить"); - Сценарий.Вставить("ТаблицаИмя", "СтруктураВарианта"); - Сценарий.Вставить("Направление", -1); - - ВыполнитьСценарий(Неопределено, Сценарий); -КонецПроцедуры - -&НаКлиенте -Процедура СтруктураВарианта_ПереместитьВниз(Команда) - Сценарий = Новый Структура; - Сценарий.Вставить("Шаги", "ТаблицыПолейОпределитьВыделенныеСтроки, ТаблицыПолейСдвинутьСтроки"); - Сценарий.Вставить("Действие", "Переместить"); - Сценарий.Вставить("ТаблицаИмя", "СтруктураВарианта"); - Сценарий.Вставить("Направление", 1); - - ВыполнитьСценарий(Неопределено, Сценарий); -КонецПроцедуры - -&НаКлиенте -Процедура СтруктураВарианта_Изменить(Команда) - ТаблицаЭлемент = Элементы.СтруктураВарианта; - Поле = ТаблицаЭлемент.ТекущийЭлемент; - СтандартнаяОбработка = Истина; - СтрокаИдентификатор = ТаблицаЭлемент.ТекущаяСтрока; - СтруктураВариантаВыбор(ТаблицаЭлемент, СтрокаИдентификатор, Поле, СтандартнаяОбработка); -КонецПроцедуры - -&НаКлиенте -Процедура СтруктураВариантаПередУдалением(Элемент, Отказ) - Отказ = Истина; - Если РасширенныйРежим = 0 Или Не Элементы.СтруктураВарианта_Удалить.Доступность Тогда - Возврат; - КонецЕсли; - - Сценарий = Новый Структура; - Сценарий.Вставить("Шаги", "ТаблицыПолейОпределитьВыделенныеСтроки, ТаблицыПолейУдалитьСтроки, ОбновитьФорму"); - Сценарий.Вставить("Действие", "Удалить"); - Сценарий.Вставить("ТаблицаИмя", "СтруктураВарианта"); - - ВыполнитьСценарий(Неопределено, Сценарий); -КонецПроцедуры - -&НаКлиенте -Процедура СтруктураВарианта_ПереместитьВышеИЛевее(Команда) - Если Не Элементы.СтруктураВарианта_ПереместитьВышеИЛевее.Доступность Тогда - Возврат; - КонецЕсли; - СтрокаТаблицыВверх = Элементы.СтруктураВарианта.ТекущиеДанные; - Если СтрокаТаблицыВверх = Неопределено Тогда - Возврат; - КонецЕсли; - СтрокаТаблицыВниз = СтрокаТаблицыВверх.ПолучитьРодителя(); - Если СтрокаТаблицыВниз = Неопределено Тогда - Возврат; - КонецЕсли; - - ПараметрыВыполнения = Новый Структура; - ПараметрыВыполнения.Вставить("Режим", "ВверхИВлево"); - ПараметрыВыполнения.Вставить("СтрокаТаблицыВверх", СтрокаТаблицыВверх); - ПараметрыВыполнения.Вставить("СтрокаТаблицыВниз", СтрокаТаблицыВниз); - СтруктураВарианта_Переместить(-1, ПараметрыВыполнения); -КонецПроцедуры - -&НаКлиенте -Процедура СтруктураВарианта_ПереместитьНижеИПравее(Команда) - Если Не Элементы.СтруктураВарианта_ПереместитьНижеИПравее.Доступность Тогда - Возврат; - КонецЕсли; - СтрокаТаблицыВниз = Элементы.СтруктураВарианта.ТекущиеДанные; - Если СтрокаТаблицыВниз = Неопределено Тогда - Возврат; - КонецЕсли; - ПараметрыВыполнения = Новый Структура; - ПараметрыВыполнения.Вставить("Режим", "ВнизИВправо"); - ПараметрыВыполнения.Вставить("СтрокаТаблицыВверх", Неопределено); - ПараметрыВыполнения.Вставить("СтрокаТаблицыВниз", СтрокаТаблицыВниз); - - ПодчиненныеСтроки = СтрокаТаблицыВниз.ПолучитьЭлементы(); - Количество = ПодчиненныеСтроки.Количество(); - Если Количество = 0 Тогда - Возврат; - ИначеЕсли Количество = 1 Тогда - ПараметрыВыполнения.СтрокаТаблицыВверх = ПодчиненныеСтроки[0]; - СтруктураВарианта_Переместить(-1, ПараметрыВыполнения); - Иначе - Список = Новый СписокЗначений; - Для НомерСтроки = 1 По Количество Цикл - ПодчиненнаяСтрока = ПодчиненныеСтроки[НомерСтроки-1]; - Список.Добавить(ПодчиненнаяСтрока.ПолучитьИдентификатор(), ПодчиненнаяСтрока.Представление); - КонецЦикла; - Обработчик = Новый ОписаниеОповещения("СтруктураВарианта_Переместить", ЭтотОбъект, ПараметрыВыполнения); - ПоказатьВыборИзСписка(Обработчик, Список); - КонецЕсли; - -КонецПроцедуры - -&НаКлиенте -Процедура СтруктураВарианта_Переместить(Результат, ПараметрыВыполнения) Экспорт - Если Результат <> -1 Тогда - Если ТипЗнч(Результат) <> Тип("ЭлементСпискаЗначений") Тогда - Возврат; - КонецЕсли; - СтрокаТаблицыВверх = СтруктураВарианта.НайтиПоИдентификатору(Результат.Значение); - Иначе - СтрокаТаблицыВверх = ПараметрыВыполнения.СтрокаТаблицыВверх; - КонецЕсли; - СтрокаТаблицыВниз = ПараметрыВыполнения.СтрокаТаблицыВниз; - - // 0. Запомнить перед каким элементом вставлять верхнюю строку. - СтрокиВниз = СтрокаТаблицыВниз.ПолучитьЭлементы(); - Индекс = СтрокиВниз.Индекс(СтрокаТаблицыВверх); - МассивИдентификаторовСтрокВниз = Новый Массив; - Для Каждого СтрокаТаблицы Из СтрокиВниз Цикл - Если СтрокаТаблицы = СтрокаТаблицыВверх Тогда - Продолжить; - КонецЕсли; - МассивИдентификаторовСтрокВниз.Добавить(СтрокаТаблицы.ПолучитьИдентификатор()); - КонецЦикла; - - // 1. Переместить нижнюю строку на уровень с верхней. - Результат1 = ТаблицыПолейПереместить("СтруктураВарианта", СтрокаТаблицыВверх, СтрокаТаблицыВниз.ПолучитьРодителя(), СтрокаТаблицыВниз, Ложь); - СтрокаТаблицыВверх = Результат1.СтрокаДерева; - - // 2. Запомнить какие строки нужно переместить. - СтрокиВверх = СтрокаТаблицыВверх.ПолучитьЭлементы(); - - // 3. Обмен строками. - Для Каждого СтрокаТаблицы Из СтрокиВверх Цикл - Результат2 = ТаблицыПолейПереместить("СтруктураВарианта", СтрокаТаблицы, СтрокаТаблицыВниз, Неопределено, Ложь); - КонецЦикла; - Для Каждого СтрокаТаблицыИдентификатор Из МассивИдентификаторовСтрокВниз Цикл - СтрокаТаблицы = СтруктураВарианта.НайтиПоИдентификатору(СтрокаТаблицыИдентификатор); - Результат3 = ТаблицыПолейПереместить("СтруктураВарианта", СтрокаТаблицы, СтрокаТаблицыВверх, Неопределено, Ложь); - КонецЦикла; - - // 4. Переместить верхнюю строку в нижнюю. - СтрокиВверх = СтрокаТаблицыВверх.ПолучитьЭлементы(); - Если СтрокиВверх.Количество() - 1 < Индекс Тогда - ПередЧемВставить = Неопределено; - Иначе - ПередЧемВставить = СтрокиВверх[Индекс]; - КонецЕсли; - Результат4 = ТаблицыПолейПереместить("СтруктураВарианта", СтрокаТаблицыВниз, СтрокаТаблицыВверх, ПередЧемВставить, Ложь); - СтрокаТаблицыВниз = Результат4.СтрокаДерева; - - // Бантики. - Если ПараметрыВыполнения.Режим = "ВнизИВправо" Тогда - ТекущаяСтрока = СтрокаТаблицыВниз; - Иначе - ТекущаяСтрока = СтрокаТаблицыВверх; - КонецЕсли; - ТекущаяСтрокаИдентификатор = ТекущаяСтрока.ПолучитьИдентификатор(); - Элементы.СтруктураВарианта.Развернуть(ТекущаяСтрокаИдентификатор, Истина); - Элементы.СтруктураВарианта.ТекущаяСтрока = ТекущаяСтрокаИдентификатор; - - ПользовательскиеНастройкиМодифицированы = Истина; - Если РасширенныйРежим = 1 Тогда - ВариантМодифицирован = Истина; - КонецЕсли; -КонецПроцедуры - -#КонецОбласти - -//////////////////////////////////////////////////////////////////////////////// -// СОБЫТИЯ ТАБЛИЦЫ СоставГруппировки - -#Область ОбработчикиСобытийЭлементовТаблицыФормыСоставГруппировки - -&НаКлиенте -Процедура СоставГруппировкиИспользованиеПриИзменении(Элемент) - ТаблицыПолейИзменитьИспользование("СоставГруппировки"); -КонецПроцедуры - -&НаКлиенте -Процедура СоставГруппировкиВыбор(Элемент, СтрокаИдентификатор, Поле, СтандартнаяОбработка) - ИмяКолонки = Поле.Имя; - Если ИмяКолонки = "СоставГруппировкиПредставление" Тогда - СтандартнаяОбработка = Ложь; - СтрокаТаблицы = Элементы.СоставГруппировки.ТекущиеДанные; - Если СтрокаТаблицы = Неопределено Тогда - Возврат; - КонецЕсли; - ТаблицыПолейИзменить("СоставГруппировки", СтрокаИдентификатор); - КонецЕсли; -КонецПроцедуры - -&НаКлиенте -Процедура СоставГруппировкиПередНачаломДобавления(Элемент, Отказ, Копирование, Родитель, Группа, Параметр) - Отказ = Истина; - Обработчик = Новый ОписаниеОповещения("СоставГруппировкиПослеВыбораПоля", ЭтотОбъект); - ТаблицыПолейПоказатьВыборПоля("СоставГруппировки", Обработчик); -КонецПроцедуры - -&НаКлиенте -Процедура СоставГруппировкиПослеВыбораПоля(ДоступноеПолеКД, ПараметрыВыполнения) Экспорт - Если ДоступноеПолеКД = Неопределено Тогда - Возврат; - КонецЕсли; - - Результат = ТаблицыПолейВставить("СоставГруппировки", Тип("ПолеГруппировкиКомпоновкиДанных"), 0, Ложь); - - ЭлементКД = Результат.ЭлементКД; - ЭлементКД.Использование = Истина; - ЭлементКД.Поле = ДоступноеПолеКД.Поле; - - СтрокаТаблицы = Результат.СтрокаТаблицы; - СтрокаТаблицы.Использование = ЭлементКД.Использование; - СтрокаТаблицы.Представление = ДоступноеПолеКД.Заголовок; - СтрокаТаблицы.ТипГруппировки = ЭлементКД.ТипГруппировки; - СтрокаТаблицы.ТипДополнения = ЭлементКД.ТипДополнения; - СтрокаТаблицы.Картинка = БиблиотекаКартинок.Реквизит; - - Если ДоступноеПолеКД.Ресурс Тогда - СтрокаТаблицы.Картинка = БиблиотекаКартинок.Ресурс; - ИначеЕсли ДоступноеПолеКД.Таблица Тогда - СтрокаТаблицы.Картинка = БиблиотекаКартинок.ВложеннаяТаблица; - ИначеЕсли ДоступноеПолеКД.Папка Тогда - СтрокаТаблицы.Картинка = БиблиотекаКартинок.Папка; - Иначе - СтрокаТаблицы.Картинка = БиблиотекаКартинок.Реквизит; - КонецЕсли; - - ИнформацияОТипах = ОтчетыКлиентСервер.АнализТипов(ДоступноеПолеКД.ТипЗначения, Ложь); - Если ИнформацияОТипах.СодержитТипПериод Или ИнформацияОТипах.СодержитТипДата Тогда - СтрокаТаблицы.ПоказыватьТипДополнения = Истина; - КонецЕсли; - - ПользовательскиеНастройкиМодифицированы = Истина; - Если РасширенныйРежим = 1 Тогда - ВариантМодифицирован = Истина; - КонецЕсли; -КонецПроцедуры - -&НаКлиенте -Процедура СоставГруппировкиТипГруппировкиПриИзменении(Элемент) - ТаблицыПолейИзменитьТипГруппировки("СоставГруппировки"); -КонецПроцедуры - -&НаКлиенте -Процедура СоставГруппировкиТипДополненияПриИзменении(Элемент) - ТаблицыПолейИзменитьТипГруппировки("СоставГруппировки"); -КонецПроцедуры - -&НаКлиенте -Процедура СоставГруппировкиПередУдалением(Элемент, Отказ) - ТаблицыПолейПередУдалением(Элемент.Имя, Отказ); -КонецПроцедуры - -&НаКлиенте -Процедура СоставГруппировки_ПереместитьВверх(Команда) - Сценарий = Новый Структура; - Сценарий.Вставить("Шаги", "ТаблицыПолейОпределитьВыделенныеСтроки, ТаблицыПолейСдвинутьСтроки"); - Сценарий.Вставить("Действие", "Переместить"); - Сценарий.Вставить("ТаблицаИмя", "СоставГруппировки"); - Сценарий.Вставить("Направление", -1); - - ВыполнитьСценарий(Неопределено, Сценарий); -КонецПроцедуры - -&НаКлиенте -Процедура СоставГруппировки_ПереместитьВниз(Команда) - Сценарий = Новый Структура; - Сценарий.Вставить("Шаги", "ТаблицыПолейОпределитьВыделенныеСтроки, ТаблицыПолейСдвинутьСтроки"); - Сценарий.Вставить("Действие", "Переместить"); - Сценарий.Вставить("ТаблицаИмя", "СоставГруппировки"); - Сценарий.Вставить("Направление", 1); - - ВыполнитьСценарий(Неопределено, Сценарий); -КонецПроцедуры - -#КонецОбласти - -//////////////////////////////////////////////////////////////////////////////// -// СОБЫТИЯ КНОПОК - -#Область ОбработчикиКомандФормы - -&НаКлиенте -Процедура ЗакрытьИСформировать(Команда) - ЗаписатьИЗакрыть(Истина); -КонецПроцедуры - -&НаКлиенте -Процедура ЗакрытьБезФормирования(Команда) - ЗаписатьИЗакрыть(Ложь); -КонецПроцедуры - -&НаКлиенте -Процедура НастройкиПоУмолчанию(Команда) - ПараметрыЗаполнения = Новый Структура; - ПараметрыЗаполнения.Вставить("Событие", Новый Структура); - ПараметрыЗаполнения.Событие.Вставить("Имя", "НастройкиПоУмолчанию"); - ПараметрыЗаполнения.Вставить("ПользовательскиеНастройкиМодифицированы", Истина); - ПараметрыЗаполнения.Вставить("СброситьПользовательскиеНастройки", Истина); - БыстрыеНастройкиЗаполнитьКлиент(ПараметрыЗаполнения); -КонецПроцедуры - -//////////////////////////////////////////////////////////////////////////////// -// Подключаемые команды - -&НаКлиенте -Процедура Подключаемый_Команда(Команда) - // Механизмы расширения - Результат = Ложь; - Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.РассылкаОтчетов") Тогда - МодульРассылкаОтчетовКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("РассылкаОтчетовКлиент"); - МодульРассылкаОтчетовКлиент.ФормаОтчетаОбработчикКоманды(ЭтотОбъект, Команда, Результат); - КонецЕсли; - ОтчетыКлиентПереопределяемый.ОбработчикКоманды(ЭтотОбъект, Команда, Результат); -КонецПроцедуры - -#КонецОбласти - -//////////////////////////////////////////////////////////////////////////////// -// ВСПОМОГАТЕЛЬНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ - -#Область СлужебныеПроцедурыИФункции - -//////////////////////////////////////////////////////////////////////////////// -// Клиент - -&НаКлиенте -Процедура ЗаписатьИЗакрыть(Переформировать) - ОповеститьОВыборе(РезультатВыбора(Переформировать)); -КонецПроцедуры - -&НаКлиенте -Функция РезультатВыбора(Переформировать) - РезультатВыбораСформирован = Истина; - - Если РежимИзмененияУзлаВарианта И Не Переформировать Тогда - Возврат Неопределено; - КонецЕсли; - - РезультатВыбора = Новый Структура; - РезультатВыбора.Вставить("Событие", Новый Структура("Имя", "ФормаНастроек")); - РезультатВыбора.Вставить("Переформировать", Переформировать); - РезультатВыбора.Вставить("ВариантМодифицирован", Ложь); - РезультатВыбора.Вставить("ПользовательскиеНастройкиМодифицированы", Ложь); - РезультатВыбора.Вставить("ФормаНастроекРасширенныйРежим", РасширенныйРежим); - РезультатВыбора.Вставить("ФормаНастроекИмяСтраницы", Элементы.СтраницыНастроек.ТекущаяСтраница.Имя); - - Если ВариантМодифицирован Тогда - РезультатВыбора.ВариантМодифицирован = Истина; - РезультатВыбора.Вставить("НастройкиКД", КомпоновщикНастроек.Настройки); - КонецЕсли; - - Если ВариантМодифицирован Или ПользовательскиеНастройкиМодифицированы Тогда - РезультатВыбора.ПользовательскиеНастройкиМодифицированы = Истина; - РезультатВыбора.Вставить("ПользовательскиеНастройкиКД", КомпоновщикНастроек.ПользовательскиеНастройки); - КонецЕсли; - - Если ВариантМодифицирован И РасширенныйРежим = 1 Тогда - РезультатВыбора.Вставить("СброситьПользовательскиеНастройки", Истина); - КонецЕсли; - - Возврат РезультатВыбора; -КонецФункции - -&НаКлиенте -Процедура ВыборПериодаИзВыпадающегоСписка(Результат, ПараметрыВыбора) Экспорт - Если Результат = Неопределено Тогда - Возврат; // Отмена выбора. - КонецЕсли; - - Если Результат = -1 Тогда // Начало выбора. - // Чтение параметров для формирования списка из сохраненного значения периода. - ПараметрыВыбора.Вставить("НачалоПериода", ПараметрыВыбора.Значение.ДатаНачала); - ПараметрыВыбора.Вставить("Вариант", ПараметрыВыбора.Значение.Вариант); - ИндексНачальногоЗначения = Неопределено; - ИначеЕсли ТипЗнч(Результат.Значение) = Тип("Структура") Тогда - // Чтение параметров для формирования списка из выбранного значения. - ПараметрыВыбора.Вставить("НачалоПериода", Результат.Значение.НачалоПериода); - ПараметрыВыбора.Вставить("Вариант", Результат.Значение.Вариант); - ИндексНачальногоЗначения = Результат.Значение.ИндексНачальногоЗначения; - Иначе - // Загрузка результата выбора. - ЗагрузитьРезультатВыбораПериодаИзВыпадающегоСписка(Результат, ПараметрыВыбора); - Возврат; - КонецЕсли; - - // Формирование списка выбора. - Если ПараметрыВыбора.Вариант = Неопределено Или ПараметрыВыбора.Вариант = ВариантСтандартногоПериода.ПроизвольныйПериод Тогда - - СписокПериодов = ОтчетыКлиентСервер.СписокФиксированныхПериодов(ПараметрыВыбора.НачалоПериода, ПараметрыВыбора.ВидПериода); - - Если ИндексНачальногоЗначения = Неопределено Тогда - ИндексНачальногоЗначения = СписокПериодов.НайтиПоЗначению(ПараметрыВыбора.НачалоПериода); - КонецЕсли; - - ОписаниеНавигационногоЭлемента = Новый Структура; - ОписаниеНавигационногоЭлемента.Вставить("НачалоПериода", СписокПериодов[0].Значение); - ОписаниеНавигационногоЭлемента.Вставить("Вариант", Неопределено); - ОписаниеНавигационногоЭлемента.Вставить("ИндексНачальногоЗначения", 0); - СписокПериодов[0].Значение = ОписаниеНавигационногоЭлемента; - - ОписаниеНавигационногоЭлемента = Новый Структура; - ОписаниеНавигационногоЭлемента.Вставить("НачалоПериода", СписокПериодов[8].Значение); - ОписаниеНавигационногоЭлемента.Вставить("Вариант", Неопределено); - ОписаниеНавигационногоЭлемента.Вставить("ИндексНачальногоЗначения", 8); - СписокПериодов[8].Значение = ОписаниеНавигационногоЭлемента; - - Если Не ПараметрыВыбора.Свойство("ВариантСтандартногоПериодаПоВиду") Тогда - ПараметрыВыбора.Вставить("ВариантСтандартногоПериодаПоВиду", ОтчетыКлиентСервер.ПривестиВидПериодаКСтандартному(ПараметрыВыбора.ВидПериода)); - КонецЕсли; - - ОписаниеНавигационногоЭлемента = Новый Структура; - ОписаниеНавигационногоЭлемента.Вставить("НачалоПериода", ПараметрыВыбора.НачалоПериода); - ОписаниеНавигационногоЭлемента.Вставить("Вариант", ПараметрыВыбора.ВариантСтандартногоПериодаПоВиду); - ОписаниеНавигационногоЭлемента.Вставить("ИндексНачальногоЗначения", Неопределено); - СписокПериодов.Добавить(ОписаниеНавигационногоЭлемента, НСтр("ru = 'Относительный...'")); - - Иначе - - СписокПериодов = ОтчетыКлиентСервер.СписокВычисляемыхПериодов(ПараметрыВыбора.ВидПериода); - - Если ИндексНачальногоЗначения = Неопределено Тогда - ИндексНачальногоЗначения = СписокПериодов.НайтиПоЗначению(ПараметрыВыбора.Вариант); - КонецЕсли; - - ОписаниеНавигационногоЭлемента = Новый Структура; - ОписаниеНавигационногоЭлемента.Вставить("НачалоПериода", ПараметрыВыбора.НачалоПериода); - ОписаниеНавигационногоЭлемента.Вставить("Вариант", Неопределено); - ОписаниеНавигационногоЭлемента.Вставить("ИндексНачальногоЗначения", Неопределено); - СписокПериодов.Добавить(ОписаниеНавигационногоЭлемента, НСтр("ru = 'Фиксированный...'")); - - КонецЕсли; - - Если ИндексНачальногоЗначения = Неопределено Тогда - ИндексНачальногоЗначения = СписокПериодов.Количество() - 1; - КонецЕсли; - - ПеременныеКлиента.Вставить("ВыборПериодаИзВыпадающегоСписка", Новый Структура); - ПеременныеКлиента.ВыборПериодаИзВыпадающегоСписка.Вставить("ПараметрыВыбора", ПараметрыВыбора); - ПеременныеКлиента.ВыборПериодаИзВыпадающегоСписка.Вставить("СписокПериодов", СписокПериодов); - ПеременныеКлиента.ВыборПериодаИзВыпадающегоСписка.Вставить("ИндексНачальногоЗначения", ИндексНачальногоЗначения); - Если Результат = -1 Тогда - НачатьВыборПериодаИзВыпадающегоСписка(); - Иначе - ПодключитьОбработчикОжидания("НачатьВыборПериодаИзВыпадающегоСписка", 0.1, Истина); - КонецЕсли; -КонецПроцедуры - -&НаКлиенте -Процедура НачатьВыборПериодаИзВыпадающегоСписка() - Если ПеременныеКлиента.Свойство("ВыборПериодаИзВыпадающегоСписка") Тогда - Контекст = ПеременныеКлиента.ВыборПериодаИзВыпадающегоСписка; - ПеременныеКлиента.Удалить("ВыборПериодаИзВыпадающегоСписка"); - Обработчик = Новый ОписаниеОповещения("ВыборПериодаИзВыпадающегоСписка", ЭтотОбъект, Контекст.ПараметрыВыбора); - ПоказатьВыборИзСписка(Обработчик, Контекст.СписокПериодов, Контекст.ПараметрыВыбора.Элемент, Контекст.ИндексНачальногоЗначения); - КонецЕсли; -КонецПроцедуры - -&НаКлиенте -Процедура ЗагрузитьРезультатВыбораПериодаИзВыпадающегоСписка(Результат, ПараметрыВыбора) - Значение = ПараметрыВыбора.Значение; - - // Запись результата выбора в данные формы и пользовательские настройки КД. - Если ТипЗнч(Результат.Значение) = Тип("ВариантСтандартногоПериода") Тогда - ЭтотОбъект[ПараметрыВыбора.ПредставлениеИмя] = ?(ПустаяСтрока(Результат.Представление), Строка(Результат.Значение), Результат.Представление); - Значение.Вариант = Результат.Значение; - Иначе - НачалоПериода = ОтчетыКлиентСервер.НачалоПериодаОтчета(ПараметрыВыбора.ВидПериода, Результат.Значение); - КонецПериода = ОтчетыКлиентСервер.КонецПериодаОтчета(ПараметрыВыбора.ВидПериода, Результат.Значение); - - ЭтотОбъект[ПараметрыВыбора.ПредставлениеИмя] = Результат.Представление; - - Значение.Вариант = ВариантСтандартногоПериода.ПроизвольныйПериод; - Значение.ДатаНачала = НачалоПериода; - Значение.ДатаОкончания = КонецПериода; - КонецЕсли; - - ЭтотОбъект[ПараметрыВыбора.ЗначениеИмя] = Значение; - - ПользовательскаяНастройкаКД = НайтиПользовательскуюНастройкуЭлемента(ПараметрыВыбора.ИдентификаторЭлемента); - Если ПараметрыВыбора.ЭтоПараметр Тогда - ПользовательскаяНастройкаКД.Значение = Значение; - Иначе - ПользовательскаяНастройкаКД.ПравоеЗначение = Значение; - КонецЕсли; - - ПользовательскаяНастройкаКД.Использование = Истина; - - ПользовательскиеНастройкиМодифицированы = Истина; -КонецПроцедуры - -&НаКлиенте -Функция НайтиПользовательскуюНастройкуЭлемента(ИдентификаторЭлемента) - // Для пользовательских настроек хранятся идентификаторы компоновки данных, - // поскольку они не могут храниться по ссылке (происходит копирование значения). - Если ИдентификаторЭлемента = "Сортировка" Тогда - Если РежимИзмененияУзлаВарианта Тогда - КорневойУзел = КомпоновщикНастроек.Настройки.ПолучитьОбъектПоИдентификатору(ИдентификаторТекущегоУзлаКД); - Возврат КорневойУзел.Порядок; - ИначеЕсли РасширенныйРежим = 1 Тогда - Возврат КомпоновщикНастроек.Настройки.Порядок; - Иначе - ИдентификаторЭлемента = ИдентификаторЭлемента; - КонецЕсли; - ИначеЕсли ИдентификаторЭлемента = "ВыбранныеПоля" Тогда - Если РежимИзмененияУзлаВарианта Тогда - КорневойУзел = КомпоновщикНастроек.Настройки.ПолучитьОбъектПоИдентификатору(ИдентификаторТекущегоУзлаКД); - Возврат КорневойУзел.Выбор; - ИначеЕсли РасширенныйРежим = 1 Тогда - Возврат КомпоновщикНастроек.Настройки.Выбор; - Иначе - ИдентификаторЭлемента = ИдентификаторЭлемента; - КонецЕсли; - ИначеЕсли ИдентификаторЭлемента = "Отборы" Тогда - Если РежимИзмененияУзлаВарианта Тогда - КорневойУзел = КомпоновщикНастроек.Настройки.ПолучитьОбъектПоИдентификатору(ИдентификаторТекущегоУзлаКД); - Возврат КорневойУзел.Отбор; - ИначеЕсли РасширенныйРежим = 1 Тогда - Возврат КомпоновщикНастроек.Настройки.Отбор; - Иначе - ИдентификаторЭлемента = ИдентификаторЭлемента; - КонецЕсли; - ИначеЕсли ИдентификаторЭлемента = "СтруктураВарианта" Тогда - Если РасширенныйРежим = 1 Тогда - Возврат КомпоновщикНастроек.Настройки; - Иначе - Возврат КомпоновщикНастроек.ПользовательскиеНастройки; - КонецЕсли; - КонецЕсли; - ИдентификаторКД = БыстрыйПоискПользовательскихНастроек.Получить(ИдентификаторЭлемента); - Возврат КомпоновщикНастроек.ПользовательскиеНастройки.ПолучитьОбъектПоИдентификатору(ИдентификаторКД); -КонецФункции - -&НаКлиенте -Функция НайтиДополнительныеНастройкиЭлемента(ИдентификаторЭлемента) - // Для пользовательских настроек хранятся идентификаторы компоновки данных, - // поскольку они не могут храниться по ссылке (происходит копирование значения). - ВсеДополнительныеНастройки = ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(КомпоновщикНастроек.ПользовательскиеНастройки.ДополнительныеСвойства, "ЭлементыФормы"); - Если ВсеДополнительныеНастройки = Неопределено Тогда - Возврат Неопределено; - Иначе - Возврат ВсеДополнительныеНастройки[ИдентификаторЭлемента]; - КонецЕсли; -КонецФункции - -&НаКлиенте -Процедура БыстрыеНастройкиЗаполнитьКлиент(ПараметрыЗаполнения) - ИнформацияОбОшибке = Неопределено; - Попытка - БыстрыеНастройкиЗаполнить(ПараметрыЗаполнения); - Исключение - ИнформацияОбОшибке = ИнформацияОбОшибке(); - КонецПопытки; - Если ИнформацияОбОшибке <> Неопределено Тогда - ПредставлениеОшибки = ОтчетыКлиентСервер.КраткоеПредставлениеОшибкиФормированияОтчета(ИнформацияОбОшибке); - ПоказатьПредупреждение(, ПредставлениеОшибки); - КонецЕсли; -КонецПроцедуры - -&НаКлиенте -Процедура УстановитьПараметрВывода(ЭлементКД, Имя, Значение = Неопределено, Использование = Истина) - ПараметрКД = ЭлементКД.ПараметрыВывода.НайтиЗначениеПараметра(Новый ПараметрКомпоновкиДанных(Имя)); - Если ПараметрКД = Неопределено Тогда - Возврат; - КонецЕсли; - Если Значение <> Неопределено Тогда - ПараметрКД.Значение = Значение; - КонецЕсли; - Если Использование <> Неопределено Тогда - ПараметрКД.Использование = Использование; - КонецЕсли; -КонецПроцедуры - -//////////////////////////////////////////////////////////////////////////////// -// Клиент - Сценарное выполнение. - -&НаКлиенте -Процедура ВыполнитьСценарий(ВыборПользователя, Сценарий) Экспорт - // Плюсы сценарного выполнения: - // Изоляция обработчиков. - // Текущий шаг может ничего не знать о следующем или предыдущем шаге. - // Единый обработчик оповещения. - // Минимальный клиентский программный интерфейс формы. - // Избавляет от необходимости "разворачивать" стек в обратную сторону - // после закрытия диалога с пользователем. - // Удобная группировка кода. - // Код, вызывающий диалог и обрабатывающий ответ располагаются в одной функции. - // Простая последовательность шагов. - // Удобное отключение шагов. - - Если Не Сценарий.Свойство("ТекущийШаг") Тогда - Если ТипЗнч(Сценарий.Шаги) = Тип("Строка") Тогда - Сценарий.Шаги = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(Сценарий.Шаги, ",", Истина, Истина); - КонецЕсли; - Сценарий.Вставить("ШагиВГраница", Сценарий.Шаги.ВГраница()); - Сценарий.Вставить("СледующийШагИндекс", 0); - Сценарий.Вставить("ТекущийШаг", Неопределено); - Сценарий.Вставить("ТекущийШагУточнение", ""); - Сценарий.Вставить("БылаОстановка", Ложь); - Сценарий.Вставить("Обработчик", Новый ОписаниеОповещения("ВыполнитьСценарий", ЭтотОбъект, Сценарий)); - Сценарий.Вставить("ТекстОшибки", ""); - НайтиСледующийШаг(Сценарий); - КонецЕсли; - - Пока ВыполнитьШаг(ВыборПользователя, Сценарий) Цикл - Если Не НайтиСледующийШаг(Сценарий) Тогда - Прервать; - КонецЕсли; - КонецЦикла; - - Если ЗначениеЗаполнено(Сценарий.ТекстОшибки) Тогда - ПоказатьПредупреждение(, Сценарий.ТекстОшибки); - Сценарий.ТекстОшибки = ""; - КонецЕсли; -КонецПроцедуры - -&НаКлиенте -Функция НайтиСледующийШаг(Сценарий) - Если Сценарий.СледующийШагИндекс > Сценарий.ШагиВГраница Тогда - Возврат Ложь; - КонецЕсли; - Сценарий.ТекущийШаг = Сценарий.Шаги.Получить(Сценарий.СледующийШагИндекс); - Сценарий.ТекущийШагУточнение = ""; - Сценарий.СледующийШагИндекс = Сценарий.СледующийШагИндекс + 1; - Возврат Истина; -КонецФункции - -&НаКлиенте -Функция ВыполнитьШаг(ВыборПользователя, Сценарий) - - Если Сценарий.ТекущийШаг = "ТаблицыПолейОпределитьВыделенныеСтроки" Тогда - Возврат ТаблицыПолейОпределитьВыделенныеСтроки(ВыборПользователя, Сценарий); - - ИначеЕсли Сценарий.ТекущийШаг = "ВвестиЗаголовок" Тогда - Возврат ВвестиЗаголовок(ВыборПользователя, Сценарий); - - ИначеЕсли Сценарий.ТекущийШаг = "ТаблицыПолейСгруппировать" Тогда - Возврат ТаблицыПолейСгруппировать(ВыборПользователя, Сценарий); - - ИначеЕсли Сценарий.ТекущийШаг = "ТаблицыПолейСдвинутьСтроки" Тогда - Возврат ТаблицыПолейСдвинутьСтроки(ВыборПользователя, Сценарий); - - ИначеЕсли Сценарий.ТекущийШаг = "ТаблицыПолейУдалитьСтроки" Тогда - Возврат ТаблицыПолейУдалитьСтроки(ВыборПользователя, Сценарий); - - ИначеЕсли Сценарий.ТекущийШаг = "ОбновитьФорму" Тогда - Возврат ОбновитьФорму(ВыборПользователя, Сценарий); - - Иначе - Сценарий.ТекстОшибки = СтрЗаменить(НСтр("ru = 'Ошибка в сценарии: Неизвестный шаг ""%1"".'"), "%1", Сценарий.ТекущийШаг); - Возврат Ложь; - - КонецЕсли; - - // Альтернативы этим веткам условий: - // "Вычислить()" - неприемлемо использовать только для минимизации кода; - // "ВыполнитьОбработкуОповещения()" - не выгодно, т.к. поддерживаются только процедуры, - // а следовательно следующий шаг придется запускать из предыдущего шага; - // Т.е. исчезает такой большой плюс как изоляция обработчиков от асинхронной логики. - -КонецФункции - -//////////////////////////////////////////////////////////////////////////////// -// Клиент - Шаги сценарного выполнения. - -&НаКлиенте -Функция ОбновитьФорму(ВыборПользователя, Сценарий) - ПараметрыЗаполнения = Новый Структура("Событие", Новый Структура("Имя", "ПослеИзмененияСоставаВарианта")); - Результат = БыстрыеНастройкиЗаполнить(ПараметрыЗаполнения); - СтандартныеПодсистемыКлиент.ПоказатьРезультатВыполнения(ЭтотОбъект, Результат); - Возврат Истина; // Продолжить сценарий. -КонецФункции - -//////////////////////////////////////////////////////////////////////////////// -// Клиент - Таблицы полей (с поддержкой сценарного выполнения). - -&НаКлиенте -Функция ТаблицыПолейОпределитьВыделенныеСтроки(ВыборПользователя, Сценарий) - ТаблицаЭлемент = Элементы[Сценарий.ТаблицаИмя]; - ТаблицаРеквизит = ЭтотОбъект[Сценарий.ТаблицаИмя]; - Сценарий.Вставить("СтрокиДерева", Новый Массив); - Если Сценарий.Действие = "Переместить" Или Сценарий.Действие = "Сгруппировать" Тогда - Сценарий.Вставить("ТекущийРодитель", -1); - КонецЕсли; - МогутБытьРазделы = (Сценарий.ТаблицаИмя = "Отборы" Или Сценарий.ТаблицаИмя = "ВыбранныеПоля"); - МогутБытьПараметры = (Сценарий.ТаблицаИмя = "Отборы"); - ВыделенныеСтроки = МассивСортировать(ТаблицаЭлемент.ВыделенныеСтроки, НаправлениеСортировки.Возр); - Для Каждого СтрокаИдентификатор Из ВыделенныеСтроки Цикл - СтрокаДерева = ТаблицаРеквизит.НайтиПоИдентификатору(СтрокаИдентификатор); - Если МогутБытьРазделы И СтрокаДерева.ЭтоРаздел Тогда - Продолжить; - КонецЕсли; - Если МогутБытьПараметры И СтрокаДерева.ЭтоПараметр Тогда - Если Сценарий.Действие = "Переместить" Тогда - Сценарий.ТекстОшибки = НСтр("ru = 'Параметры не могут быть перемещены.'"); - ИначеЕсли Сценарий.Действие = "Сгруппировать" Тогда - Сценарий.ТекстОшибки = НСтр("ru = 'Параметры не могут быть участниками групп.'"); - ИначеЕсли Сценарий.Действие = "Удалить" Тогда - Сценарий.ТекстОшибки = НСтр("ru = 'Параметры не могут быть удалены.'"); - КонецЕсли; - Возврат Ложь; // Приостановить сценарий. - КонецЕсли; - Если Сценарий.Действие = "Переместить" Или Сценарий.Действие = "Сгруппировать" Тогда - Родитель = СтрокаДерева.ПолучитьРодителя(); - Если Сценарий.ТекущийРодитель = -1 Тогда - Сценарий.ТекущийРодитель = Родитель; - ИначеЕсли Сценарий.ТекущийРодитель <> Родитель Тогда - Если Сценарий.Действие = "Переместить" Тогда - Сценарий.ТекстОшибки = НСтр("ru = 'Выбранные элементы не могут быть перемещены, поскольку они принадлежат разным родителям.'"); - ИначеЕсли Сценарий.Действие = "Сгруппировать" Тогда - Сценарий.ТекстОшибки = НСтр("ru = 'Выбранные элементы не могут быть сгруппированы, поскольку они принадлежат разным родителям.'"); - КонецЕсли; - Возврат Ложь; // Приостановить сценарий. - КонецЕсли; - КонецЕсли; - Сценарий.СтрокиДерева.Добавить(СтрокаДерева); - КонецЦикла; - - Если Сценарий.СтрокиДерева.Количество() = 0 Тогда - Сценарий.ТекстОшибки = НСтр("ru = 'Выберите элементы.'"); - Возврат Ложь; // Приостановить сценарий. - КонецЕсли; - - Возврат Истина; // Продолжить сценарий. -КонецФункции - -&НаКлиенте -Функция ВвестиЗаголовок(ВыборПользователя, Сценарий) - - Если Сценарий.ТекущийШагУточнение = "" Тогда // Первый вызов - - ПоказатьВводСтроки(Сценарий.Обработчик, , НСтр("ru = 'Наименование группы'"), 100, Ложь); - Сценарий.ТекущийШагУточнение = "ВводСтроки"; - Возврат Ложь; // Приостановить сценарий. - - ИначеЕсли Сценарий.ТекущийШагУточнение = "ВводСтроки" Тогда // Обработчик ответа на вопрос. - - Если ТипЗнч(ВыборПользователя) = Тип("Строка") Тогда - Сценарий.Вставить("НаименованиеГруппы", ВыборПользователя); - Возврат Истина; // Продолжить сценарий. - Иначе - Возврат Ложь; // Отменить сценарий. - КонецЕсли; - - КонецЕсли; - -КонецФункции - -&НаКлиенте -Функция ТаблицыПолейСгруппировать(ВыборПользователя, Сценарий) - ТекущийРодитель = Сценарий.ТекущийРодитель; - ТаблицаЭлемент = Элементы[Сценарий.ТаблицаИмя]; - УзелКД = ТаблицыПолейНайтиУзел(ЭтотОбъект, Сценарий.ТаблицаИмя, Неопределено); - - Если Сценарий.ТекущийРодитель = Неопределено Тогда - ТаблицаРеквизит = ЭтотОбъект[Сценарий.ТаблицаИмя]; - Если Сценарий.ТаблицаИмя = "Отборы" И Не РежимИзмененияУзлаВарианта Тогда - ТекущийРодитель = ТаблицаРеквизит.ПолучитьЭлементы()[1]; - Иначе - ТекущийРодитель = ТаблицаРеквизит; - КонецЕсли; - ТекущийРодительКД = УзелКД; - ИначеЕсли ТипЗнч(ТекущийРодитель.ИдентификаторКД) <> Тип("ИдентификаторКомпоновкиДанных") Тогда - ТекущийРодительКД = УзелКД; - Иначе - ТекущийРодительКД = УзелКД.ПолучитьОбъектПоИдентификатору(ТекущийРодитель.ИдентификаторКД); - КонецЕсли; - СтрокиРодителя = ТекущийРодитель.ПолучитьЭлементы(); - СтрокиРодителяКД = ТекущийРодительКД.Элементы; - - // Проверки пройдены. Добавление группы в родителя родителя. - Группы = ТаблицыПолейВставить(Сценарий.ТаблицаИмя, Сценарий.ТипГруппыКД, 0, Ложь); - - ГруппаКД = Группы.ЭлементКД; - ГруппаКД.Использование = Истина; - НоваяКоллекцияЭлементовКД = ГруппаКД.Элементы; - - ГруппаДерева = Группы.СтрокаТаблицы; - ГруппаДерева.Использование = ГруппаКД.Использование; - ГруппаДерева.ЭтоГруппа = Истина; - НоваяКоллекцияСтрокДерева = ГруппаДерева.ПолучитьЭлементы(); - - Если Сценарий.ТаблицаИмя = "Отборы" Тогда - ГруппаДерева.Представление = Строка(ГруппаКД.ТипГруппы); - ГруппаДерева.ИндексКартинки = -1; - ГруппаДерева.ИндексКартинкиДоступа = 5; - ГруппаДерева.Заголовок = ГруппаДерева.Представление; - Иначе - ГруппаКД.Заголовок = Сценарий.НаименованиеГруппы; - ГруппаДерева.Представление = Сценарий.НаименованиеГруппы; - ГруппаДерева.ИндексКартинки = 1; - КонецЕсли; - - Для Каждого СтараяСтрокаДерева Из Сценарий.СтрокиДерева Цикл - СтарыйЭлементКД = УзелКД.ПолучитьОбъектПоИдентификатору(СтараяСтрокаДерева.ИдентификаторКД); - ТаблицыПолейСкопироватьРекурсивно(УзелКД, СтараяСтрокаДерева, НоваяКоллекцияСтрокДерева, СтарыйЭлементКД, НоваяКоллекцияЭлементовКД); - СтрокиРодителя.Удалить(СтараяСтрокаДерева); - СтрокиРодителяКД.Удалить(СтарыйЭлементКД); - КонецЦикла; - - ПользовательскиеНастройкиМодифицированы = Истина; - Если РасширенныйРежим = 1 Тогда - ВариантМодифицирован = Истина; - КонецЕсли; - - Возврат Истина; // Продолжить сценарий. -КонецФункции - -&НаКлиенте -Функция ТаблицыПолейСдвинутьСтроки(ВыборПользователя, Сценарий) - ТекущийРодитель = Сценарий.ТекущийРодитель; - ТаблицаЭлемент = Элементы[Сценарий.ТаблицаИмя]; - УзелКД = ТаблицыПолейНайтиУзел(ЭтотОбъект, Сценарий.ТаблицаИмя, Неопределено); - - Если Сценарий.ТекущийРодитель = Неопределено Тогда - ТаблицаРеквизит = ЭтотОбъект[Сценарий.ТаблицаИмя]; - Если Сценарий.ТаблицаИмя = "Отборы" И Не РежимИзмененияУзлаВарианта Тогда - ТекущийРодитель = ТаблицаРеквизит.ПолучитьЭлементы()[1]; - Иначе - ТекущийРодитель = ТаблицаРеквизит; - КонецЕсли; - ТекущийРодительКД = УзелКД; - ИначеЕсли ТипЗнч(ТекущийРодитель.ИдентификаторКД) <> Тип("ИдентификаторКомпоновкиДанных") Тогда - ТекущийРодительКД = УзелКД; - Иначе - ТекущийРодительКД = УзелКД.ПолучитьОбъектПоИдентификатору(ТекущийРодитель.ИдентификаторКД); - КонецЕсли; - СтрокиРодителя = ТекущийРодитель.ПолучитьЭлементы(); - СтрокиРодителяКД = ЭлементыОбъектаКД(УзелКД, ТекущийРодительКД); - - ВерхняяГраницаСтрок = СтрокиРодителя.Количество() - 1; - ВыделеноСтрок = Сценарий.СтрокиДерева.Количество(); - - // Массив выделенных строк на встречу движению: - // Если двигаем строки в "+", то обходим "от большего к меньшему"; - // Если в "-", то обходим "от меньшего к большему". - ДвигаемсяПоВозрастанию = (Сценарий.Направление < 0); - - Для Номер = 1 По ВыделеноСтрок Цикл - Если ДвигаемсяПоВозрастанию Тогда - ИндексВМассиве = Номер - 1; - Иначе - ИндексВМассиве = ВыделеноСтрок - Номер; - КонецЕсли; - - СтрокаДерева = Сценарий.СтрокиДерева[ИндексВМассиве]; - ЭлементКД = УзелКД.ПолучитьОбъектПоИдентификатору(СтрокаДерева.ИдентификаторКД); - - ИндексВДереве = СтрокиРодителя.Индекс(СтрокаДерева); - ГдеОкажетсяСтрока = ИндексВДереве + Сценарий.Направление; - Если ГдеОкажетсяСтрока < 0 Тогда // Перемещаем "в конец". - СтрокиРодителя.Сдвинуть(ИндексВДереве, ВерхняяГраницаСтрок - ИндексВДереве); - СтрокиРодителяКД.Сдвинуть(ЭлементКД, ВерхняяГраницаСтрок - ИндексВДереве); - ИначеЕсли ГдеОкажетсяСтрока > ВерхняяГраницаСтрок Тогда // Перемещаем "в начало". - СтрокиРодителя.Сдвинуть(ИндексВДереве, -ИндексВДереве); - СтрокиРодителяКД.Сдвинуть(ЭлементКД, -ИндексВДереве); - Иначе - СтрокиРодителя.Сдвинуть(ИндексВДереве, Сценарий.Направление); - СтрокиРодителяКД.Сдвинуть(ЭлементКД, Сценарий.Направление); - КонецЕсли; - КонецЦикла; - - ПользовательскиеНастройкиМодифицированы = Истина; - Если РасширенныйРежим = 1 Тогда - ВариантМодифицирован = Истина; - КонецЕсли; - - Возврат Истина; // Продолжить сценарий. -КонецФункции - -&НаКлиенте -Функция ТаблицыПолейУдалитьСтроки(ВыборПользователя, Сценарий) - - ТаблицаРеквизит = ЭтотОбъект[Сценарий.ТаблицаИмя]; - - Для Каждого СтрокаТаблицы Из Сценарий.СтрокиДерева Цикл - - УзелКД = ТаблицыПолейНайтиУзел(ЭтотОбъект, Сценарий.ТаблицаИмя, СтрокаТаблицы); - ЭлементКД = УзелКД.ПолучитьОбъектПоИдентификатору(СтрокаТаблицы.ИдентификаторКД); - - СтрокаРодитель = СтрокаТаблицы.ПолучитьРодителя(); - РодительКД = НайтиОбъектКД(УзелКД, СтрокаРодитель); - - ОткудаУдалить = ЭлементыСтрокиДерева(ТаблицаРеквизит, СтрокаРодитель); - ОткудаУдалить.Удалить(СтрокаТаблицы); - - ОткудаУдалитьКД = ЭлементыОбъектаКД(УзелКД, РодительКД); - ОткудаУдалитьКД.Удалить(ЭлементКД); - - КонецЦикла; - - ПользовательскиеНастройкиМодифицированы = Истина; - Если РасширенныйРежим = 1 Тогда - ВариантМодифицирован = Истина; - КонецЕсли; - - Возврат Истина; // Продолжить сценарий. -КонецФункции - -//////////////////////////////////////////////////////////////////////////////// -// Клиент - Таблица параметров и отборов. - -&НаКлиенте -Процедура ОтборыВыбратьУровеньДоступа(ТаблицаИмя, СтрокаИдентификатор, СтрокаТаблицы) - Контекст = Новый Структура("ТаблицаИмя, СтрокаИдентификатор", ТаблицаИмя, СтрокаИдентификатор); - Обработчик = Новый ОписаниеОповещения("ОтборыЗавершениеВыбораУровняДоступа", ЭтотОбъект, Контекст); - - Список = Новый СписокЗначений; - Список.Добавить(2, НСтр("ru = 'В шапке отчета'"), , БиблиотекаКартинок.БыстрыйДоступ); - Если Не СтрокаТаблицы.ЭтоПараметр Тогда - Список.Добавить(1, НСтр("ru = 'Только флажок в шапке отчета'"), , БиблиотекаКартинок.БыстрыйДоступСФлажком); - КонецЕсли; - Список.Добавить(4, НСтр("ru = 'В настройках отчета'"), , БиблиотекаКартинок.Реквизит); - Если Не СтрокаТаблицы.ЭтоПараметр Тогда - Список.Добавить(3, НСтр("ru = 'Только флажок в настройках отчета'"), , БиблиотекаКартинок.ОбычныйДоступСФлажком); - КонецЕсли; - Список.Добавить(5, НСтр("ru = 'Не показывать'"), , БиблиотекаКартинок.СкрытаяНастройкаОтчета); - - ПоказатьВыборИзМеню(Обработчик, Список, Элементы[ТаблицаИмя]); -КонецПроцедуры - -&НаКлиенте -Процедура ОтборыЗавершениеВыбораУровняДоступа(Результат, Контекст) Экспорт - Если Результат = Неопределено Или Результат = КодВозвратаДиалога.Отмена Тогда - Возврат; - КонецЕсли; - - СтрокаТаблицы = ЭтотОбъект[Контекст.ТаблицаИмя].НайтиПоИдентификатору(Контекст.СтрокаИдентификатор); - Если СтрокаТаблицы = Неопределено Тогда - Возврат; - КонецЕсли; - - УзелКД = ТаблицыПолейНайтиУзел(ЭтотОбъект, Контекст.ТаблицаИмя, СтрокаТаблицы); - ЭлементКД = УзелКД.ПолучитьОбъектПоИдентификатору(СтрокаТаблицы.ИдентификаторКД); - Если ЭлементКД = Неопределено Тогда - Возврат; - КонецЕсли; - - СтрокаТаблицы.ИндексКартинкиДоступа = Результат.Значение; - - Если Результат.Значение = 1 Или Результат.Значение = 2 Тогда - ЭлементКД.РежимОтображения = РежимОтображенияЭлементаНастройкиКомпоновкиДанных.БыстрыйДоступ; - ИначеЕсли Результат.Значение = 3 Или Результат.Значение = 4 Тогда - ЭлементКД.РежимОтображения = РежимОтображенияЭлементаНастройкиКомпоновкиДанных.Обычный; - Иначе - ЭлементКД.РежимОтображения = РежимОтображенияЭлементаНастройкиКомпоновкиДанных.Недоступный; - КонецЕсли; - - Если Не СтрокаТаблицы.ЭтоПараметр Тогда - Если Результат.Значение = 1 Или Результат.Значение = 3 Тогда - ЭлементКД.Представление = "1"; - Иначе - ЭлементКД.Представление = ""; - КонецЕсли; - КонецЕсли; - - - Если ЭлементКД.РежимОтображения = РежимОтображенияЭлементаНастройкиКомпоновкиДанных.Недоступный Тогда - ЭлементКД.ИдентификаторПользовательскойНастройки = ""; - ИначеЕсли Не ЗначениеЗаполнено(ЭлементКД.ИдентификаторПользовательскойНастройки) Тогда - ЭлементКД.ИдентификаторПользовательскойНастройки = Новый УникальныйИдентификатор; - КонецЕсли; - - ПользовательскиеНастройкиМодифицированы = Истина; - Если РасширенныйРежим = 1 Тогда - ВариантМодифицирован = Истина; - КонецЕсли; -КонецПроцедуры - -&НаКлиенте -Процедура ОтборыПоказатьВыборПериода(СтрокаТаблицы) - Контекст = Новый Структура; - Контекст.Вставить("СтрокаИдентификатор", СтрокаТаблицы.ПолучитьИдентификатор()); - Обработчик = Новый ОписаниеОповещения("ОтборыЗавершениеВыбораПериода", ЭтотОбъект, Контекст); - Диалог = Новый ДиалогРедактированияСтандартногоПериода; - Диалог.Период = СтрокаТаблицы.Значение; - Диалог.Показать(Обработчик); -КонецПроцедуры - -&НаКлиенте -Процедура ОтборыЗавершениеВыбораПериода(Период, Контекст) Экспорт - Если Период = Неопределено Тогда - Возврат; - КонецЕсли; - - СтрокаТаблицы = Отборы.НайтиПоИдентификатору(Контекст.СтрокаИдентификатор); - Если СтрокаТаблицы = Неопределено Тогда - Возврат; - КонецЕсли; - - УзелКД = ТаблицыПолейНайтиУзел(ЭтотОбъект, "Отборы", СтрокаТаблицы); - ЭлементКД = УзелКД.ПолучитьОбъектПоИдентификатору(СтрокаТаблицы.ИдентификаторКД); - Если ЭлементКД = Неопределено Тогда - Возврат; - КонецЕсли; - - СтрокаТаблицы.Значение = Период; - СтрокаТаблицы.Условие = ОтчетыКлиентСервер.ПолучитьВидСтандартногоПериода(СтрокаТаблицы.Значение); - - Если СтрокаТаблицы.ЭтоПараметр Тогда - ЭлементКД.Значение = СтрокаТаблицы.Значение; - Иначе - ЭлементКД.ПравоеЗначение = СтрокаТаблицы.Значение; - КонецЕсли; - - ПользовательскиеНастройкиМодифицированы = Истина; - Если РасширенныйРежим = 1 Тогда - ВариантМодифицирован = Истина; - КонецЕсли; -КонецПроцедуры - -&НаКлиенте -Процедура ОтборыПоказатьСписокСФлажками(СтрокаТаблицы) - ДополнительныеНастройки = СтрокаТаблицы.Дополнительно; - - УзелКД = ТаблицыПолейНайтиУзел(ЭтотОбъект, "Отборы", СтрокаТаблицы); - ЭлементКД = УзелКД.ПолучитьОбъектПоИдентификатору(СтрокаТаблицы.ИдентификаторКД); - Если ЭлементКД = Неопределено Тогда - Возврат; - КонецЕсли; - - ПараметрыОбработчика = Новый Структура; - ПараметрыОбработчика.Вставить("СтрокаИдентификатор", СтрокаТаблицы.ПолучитьИдентификатор()); - Обработчик = Новый ОписаниеОповещения("ОтборыЗавершениеВводаСпискомСФлажками", ЭтотОбъект, ПараметрыОбработчика); - - ПараметрыФормы = Новый Структура("Отмеченные, ЗначенияДляВыбора, - |ОграничиватьВыборУказаннымиЗначениями, ОписаниеТипов, - |ПараметрыВыбора, Представление"); - ПараметрыФормы.Отмеченные = ОтчетыКлиентСервер.ЗначенияСписком(СтрокаТаблицы.Значение); - ПараметрыФормы.Представление = СтрокаТаблицы.Представление; - - ПараметрыФормы.Вставить("КлючУникальности", ЭлементКД.ИдентификаторПользовательскойНастройки); - - ЗаполнитьЗначенияСвойств(ПараметрыФормы, ДополнительныеНастройки, , "ПараметрыВыбора"); - - ПараметрыФормы.ПараметрыВыбора = Новый Массив; - - // Добавление фиксированных параметров выбора. - Для Каждого ПараметрВыбора Из ДополнительныеНастройки.ПараметрыВыбора Цикл - Если ПустаяСтрока(ПараметрВыбора.Имя) Тогда - Продолжить; - КонецЕсли; - ПараметрыФормы.ПараметрыВыбора.Добавить(ПараметрВыбора); - КонецЦикла; - - Связи = ОтключаемыеСвязи.НайтиСтроки(Новый Структура("ПодчиненныйИдентификаторВФорме", ПараметрыОбработчика.СтрокаИдентификатор)); - Для Каждого Связь Из Связи Цикл - СтрокаВедущий = Отборы.НайтиПоИдентификатору(Связь.ВедущийИдентификаторВФорме); - Если СтрокаВедущий = Неопределено Тогда - Продолжить; - КонецЕсли; - Если Не СтрокаВедущий.Использование Тогда - Продолжить; - КонецЕсли; - Если Связь.ТипСвязи = "ПоТипу" И СтрокаВедущий.Условие = ВидСравненияКомпоновкиДанных.Равно Тогда - ПараметрыФормы.Вставить("ОграничениеТипа", ТипЗнч(СтрокаВедущий.Значение)); - ИначеЕсли Связь.ТипСвязи = "ПараметровВыбора" Тогда - ПараметрыФормы.ПараметрыВыбора.Добавить(Новый ПараметрВыбора(Связь.ПодчиненныйИмяПараметра, СтрокаВедущий.Значение)); - ИначеЕсли Связь.ТипСвязи = "ПоМетаданным" Тогда - Если Не Связь.ВедущийТип.СодержитТип(ТипЗнч(СтрокаВедущий.Значение)) Тогда - Продолжить; - КонецЕсли; - ПараметрыФормы.ПараметрыВыбора.Добавить(Новый ПараметрВыбора(Связь.ПодчиненныйИмяПараметра, СтрокаВедущий.Значение)); - КонецЕсли; - КонецЦикла; - - Блокировать = РежимОткрытияОкнаФормы.БлокироватьОкноВладельца; - - ОткрытьФорму("ОбщаяФорма.ВводЗначенийСпискомСФлажками", ПараметрыФормы, ЭтотОбъект, , , , Обработчик, Блокировать); - -КонецПроцедуры - -&НаКлиенте -Процедура ОтборыЗавершениеВводаСпискомСФлажками(РезультатВыбора, Контекст) Экспорт - Если ТипЗнч(РезультатВыбора) <> Тип("СписокЗначений") Тогда - Возврат; - КонецЕсли; - - СтрокаТаблицы = Отборы.НайтиПоИдентификатору(Контекст.СтрокаИдентификатор); - Если СтрокаТаблицы = Неопределено Тогда - Возврат; - КонецЕсли; - - УзелКД = ТаблицыПолейНайтиУзел(ЭтотОбъект, "Отборы", СтрокаТаблицы); - ЭлементКД = УзелКД.ПолучитьОбъектПоИдентификатору(СтрокаТаблицы.ИдентификаторКД); - Если ЭлементКД = Неопределено Тогда - Возврат; - КонецЕсли; - - ДополнительныеНастройки = СтрокаТаблицы.Дополнительно; - - // Загрузка выбранных значений в 2 списка. - СписокЗначенийВСКД = Новый СписокЗначений; - Если Не ДополнительныеНастройки.ОграничиватьВыборУказаннымиЗначениями Тогда - ДополнительныеНастройки.ЗначенияДляВыбора = Новый СписокЗначений; - КонецЕсли; - Для Каждого ЭлементСпискаВФорме Из РезультатВыбора Цикл - ЗначениеВФорме = ЭлементСпискаВФорме.Значение; - Если Не ДополнительныеНастройки.ОграничиватьВыборУказаннымиЗначениями Тогда - Если ДополнительныеНастройки.ЗначенияДляВыбора.НайтиПоЗначению(ЗначениеВФорме) <> Неопределено Тогда - Продолжить; - КонецЕсли; - ЗаполнитьЗначенияСвойств(ДополнительныеНастройки.ЗначенияДляВыбора.Добавить(), ЭлементСпискаВФорме); - КонецЕсли; - Если ЭлементСпискаВФорме.Пометка Тогда - Если ТипЗнч(ЗначениеВФорме) = Тип("ОписаниеТипов") Тогда - ЗначениеВСКД = ЗначениеВФорме.Типы()[0]; - Иначе - ЗначениеВСКД = ЗначениеВФорме; - КонецЕсли; - ОтчетыКлиентСервер.ДобавитьУникальноеЗначениеВСписок(СписокЗначенийВСКД, ЗначениеВСКД, ЭлементСпискаВФорме.Представление, Истина); - КонецЕсли; - КонецЦикла; - Если ТипЗнч(ЭлементКД) = Тип("ЭлементОтбораКомпоновкиДанных") Тогда - ЭлементКД.ПравоеЗначение = СписокЗначенийВСКД; - Иначе - ЭлементКД.Значение = СписокЗначенийВСКД; - КонецЕсли; - СтрокаТаблицы.Значение = СписокЗначенийВСКД; - - // Включение флажка Использование. - ЭлементКД.Использование = Истина; - СтрокаТаблицы.Использование = Истина; - - ПользовательскиеНастройкиМодифицированы = Истина; - Если РасширенныйРежим = 1 Тогда - ВариантМодифицирован = Истина; - КонецЕсли; -КонецПроцедуры - -&НаКлиенте -Процедура ОтборыВыбратьВидСравнения(СтрокаТаблицы) - Если СтрокаТаблицы.ЭтоПараметр Тогда - Возврат; - КонецЕсли; - - Контекст = Новый Структура; - Контекст.Вставить("СтрокаИдентификатор", СтрокаТаблицы.ПолучитьИдентификатор()); - Обработчик = Новый ОписаниеОповещения("ОтборыЗавершениеВыбораВидаСравнения", ЭтотОбъект, Контекст); - - ИнформацияОТипах = ОтчетыКлиентСервер.АнализТипов(СтрокаТаблицы.ТипЗначения, Ложь); - - Список = Новый СписокЗначений; - - Если ИнформацияОТипах.ОграниченнойДлины Тогда - - Список.Добавить(ВидСравненияКомпоновкиДанных.Равно); - Список.Добавить(ВидСравненияКомпоновкиДанных.НеРавно); - - Список.Добавить(ВидСравненияКомпоновкиДанных.ВСписке); - Список.Добавить(ВидСравненияКомпоновкиДанных.НеВСписке); - - Если ИнформацияОТипах.СодержитОбъектныеТипы Тогда - - Список.Добавить(ВидСравненияКомпоновкиДанных.ВСпискеПоИерархии); // НСтр("ru = 'В списке включая подчиненные'") - Список.Добавить(ВидСравненияКомпоновкиДанных.НеВСпискеПоИерархии); // НСтр("ru = 'Не в списке включая подчиненные'"). - - Список.Добавить(ВидСравненияКомпоновкиДанных.ВИерархии); // НСтр("ru = 'В группе'") - Список.Добавить(ВидСравненияКомпоновкиДанных.НеВИерархии); // НСтр("ru = 'Не в группе'") - - КонецЕсли; - - Если ИнформацияОТипах.КоличествоПримитивныхТипов > 0 Тогда - - Список.Добавить(ВидСравненияКомпоновкиДанных.Меньше); - Список.Добавить(ВидСравненияКомпоновкиДанных.МеньшеИлиРавно); - - Список.Добавить(ВидСравненияКомпоновкиДанных.Больше); - Список.Добавить(ВидСравненияКомпоновкиДанных.БольшеИлиРавно); - - КонецЕсли; - - КонецЕсли; - - Если ИнформацияОТипах.СодержитТипСтрока Тогда - - Список.Добавить(ВидСравненияКомпоновкиДанных.Содержит); - Список.Добавить(ВидСравненияКомпоновкиДанных.НеСодержит); - - Список.Добавить(ВидСравненияКомпоновкиДанных.Подобно); - Список.Добавить(ВидСравненияКомпоновкиДанных.НеПодобно); - - Список.Добавить(ВидСравненияКомпоновкиДанных.НачинаетсяС); - Список.Добавить(ВидСравненияКомпоновкиДанных.НеНачинаетсяС); - - КонецЕсли; - - Если ИнформацияОТипах.ОграниченнойДлины Тогда - - Список.Добавить(ВидСравненияКомпоновкиДанных.Заполнено); - Список.Добавить(ВидСравненияКомпоновкиДанных.НеЗаполнено); - - КонецЕсли; - - ПоказатьВыборИзМеню(Обработчик, Список, Элементы.Отборы); - -КонецПроцедуры - -&НаКлиенте -Процедура ОтборыЗавершениеВыбораВидаСравнения(Результат, Контекст) Экспорт - Если Результат = Неопределено Тогда - Возврат; - КонецЕсли; - - СтрокаТаблицы = Отборы.НайтиПоИдентификатору(Контекст.СтрокаИдентификатор); - Если СтрокаТаблицы = Неопределено Тогда - Возврат; - КонецЕсли; - - УзелКД = ТаблицыПолейНайтиУзел(ЭтотОбъект, "Отборы", СтрокаТаблицы); - ЭлементКД = УзелКД.ПолучитьОбъектПоИдентификатору(СтрокаТаблицы.ИдентификаторКД); - Если ЭлементКД = Неопределено Тогда - Возврат; - КонецЕсли; - - СтрокаТаблицы.Условие = Результат.Значение; - ЭлементКД.ВидСравнения = Результат.Значение; - - БылВводСписком = СтрокаТаблицы.ВводСписком; - СталВводСписком = Ложь; - Если СтрокаТаблицы.Условие = ВидСравненияКомпоновкиДанных.ВСписке - Или СтрокаТаблицы.Условие = ВидСравненияКомпоновкиДанных.ВСпискеПоИерархии - Или СтрокаТаблицы.Условие = ВидСравненияКомпоновкиДанных.НеВСписке - Или СтрокаТаблицы.Условие = ВидСравненияКомпоновкиДанных.НеВСпискеПоИерархии Тогда - Элементы.ОтборыЗначение.ВыборГруппИЭлементов = ГруппыИЭлементы.ГруппыИЭлементы; - СталВводСписком = Истина; - ИначеЕсли СтрокаТаблицы.Условие = ВидСравненияКомпоновкиДанных.ВИерархии - Или СтрокаТаблицы.Условие = ВидСравненияКомпоновкиДанных.НеВИерархии Тогда - Элементы.ОтборыЗначение.ВыборГруппИЭлементов = ГруппыИЭлементы.Группы; - Иначе - Элементы.ОтборыЗначение.ВыборГруппИЭлементов = СтрокаТаблицы.ВыборГруппИЭлементов; - КонецЕсли; - - Если БылВводСписком <> СталВводСписком Тогда - СтрокаТаблицы.ВводСписком = СталВводСписком; - Если БылВводСписком Тогда - Если ТипЗнч(ЭлементКД.ПравоеЗначение) = Тип("СписокЗначений") - И ЭлементКД.ПравоеЗначение.Количество() > 0 Тогда - ЭлементКД.ПравоеЗначение = ЭлементКД.ПравоеЗначение[0].Значение; - Иначе - ЭлементКД.ПравоеЗначение = Неопределено; - КонецЕсли; - Иначе - ЭлементКД.ПравоеЗначение = ОтчетыКлиентСервер.ЗначенияСписком(ЭлементКД.ПравоеЗначение); - КонецЕсли; - СтрокаТаблицы.Значение = ЭлементКД.ПравоеЗначение; - КонецЕсли; - - ПользовательскиеНастройкиМодифицированы = Истина; - Если РасширенныйРежим = 1 Тогда - ВариантМодифицирован = Истина; - КонецЕсли; -КонецПроцедуры - -&НаКлиенте -Процедура ОтборыВыбратьЗначениеИзСписка(СтрокаТаблицы) - Если СтрокаТаблицы.Дополнительно = Неопределено Тогда - Возврат; - КонецЕсли; - ЗначенияДляВыбора = ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(СтрокаТаблицы.Дополнительно, "ЗначенияДляВыбора"); - Если ТипЗнч(ЗначенияДляВыбора) <> Тип("СписокЗначений") Или ЗначенияДляВыбора.Количество() = 0 Тогда - Возврат; - КонецЕсли; - Контекст = Новый Структура; - Контекст.Вставить("СтрокаИдентификатор", СтрокаТаблицы.ПолучитьИдентификатор()); - Обработчик = Новый ОписаниеОповещения("ОтборыЗавершениеВыбораЗначенияИзСписка", ЭтотОбъект, Контекст); - ПоказатьВыборИзМеню(Обработчик, ЗначенияДляВыбора, Элементы.Отборы); -КонецПроцедуры - -&НаКлиенте -Процедура ОтборыЗавершениеВыбораЗначенияИзСписка(Результат, Контекст) Экспорт - Если Результат = Неопределено Тогда - Возврат; - КонецЕсли; - - СтрокаТаблицы = Отборы.НайтиПоИдентификатору(Контекст.СтрокаИдентификатор); - Если СтрокаТаблицы = Неопределено Тогда - Возврат; - КонецЕсли; - - УзелКД = ТаблицыПолейНайтиУзел(ЭтотОбъект, "Отборы", СтрокаТаблицы); - ЭлементКД = УзелКД.ПолучитьОбъектПоИдентификатору(СтрокаТаблицы.ИдентификаторКД); - Если ЭлементКД = Неопределено Тогда - Возврат; - КонецЕсли; - - // Отражение изменений в значении. - Если ТипЗнч(ЭлементКД) = Тип("ЭлементОтбораКомпоновкиДанных") Тогда - ЭлементКД.ПравоеЗначение = Результат.Значение; - Иначе - ЭлементКД.Значение = Результат.Значение; - КонецЕсли; - СтрокаТаблицы.ПредставлениеЗначения = Результат.Представление; - - // Включение флажка Использование. - ЭлементКД.Использование = Истина; - СтрокаТаблицы.Использование = Истина; - - ПользовательскиеНастройкиМодифицированы = Истина; - Если РасширенныйРежим = 1 Тогда - ВариантМодифицирован = Истина; - КонецЕсли; -КонецПроцедуры - -//////////////////////////////////////////////////////////////////////////////// -// Клиент - Таблицы полей (функциональная часть). - -&НаКлиенте -Процедура ТаблицыПолейРазгруппировать(ТаблицаИмя) - ТаблицаЭлемент = Элементы[ТаблицаИмя]; - ТаблицаРеквизит = ЭтотОбъект[ТаблицаИмя]; - ВыделенныеСтроки = ТаблицаЭлемент.ВыделенныеСтроки; - ВыделенныеСтроки = ОбщегоНазначенияКлиентСервер.СвернутьМассив(ВыделенныеСтроки); // Для платформы. - Если ВыделенныеСтроки.Количество() <> 1 Тогда - ПоказатьПредупреждение(, НСтр("ru = 'Выберите одну группу.'")); - Возврат; - КонецЕсли; - - ГруппаДерева = ТаблицаРеквизит.НайтиПоИдентификатору(ВыделенныеСтроки[0]); - Если ГруппаДерева = Неопределено Или Не ГруппаДерева.ЭтоГруппа Тогда - ПоказатьПредупреждение(, НСтр("ru = 'Выберите группу.'")); - Возврат; - КонецЕсли; - - УзелКД = ТаблицыПолейНайтиУзел(ЭтотОбъект, ТаблицаИмя, Неопределено); - ГруппаКД = УзелКД.ПолучитьОбъектПоИдентификатору(ГруппаДерева.ИдентификаторКД); - - Родитель = ГруппаДерева.ПолучитьРодителя(); - Если Родитель = Неопределено Тогда - Родитель = ТаблицаРеквизит; - КонецЕсли; - НоваяКоллекцияСтрокДерева = Родитель.ПолучитьЭлементы(); - - РодительКД = ГруппаКД.Родитель; - Если РодительКД = Неопределено Тогда - РодительКД = УзелКД; - КонецЕсли; - НоваяКоллекцияЭлементовКД = РодительКД.Элементы; - - Индекс = НоваяКоллекцияСтрокДерева.Индекс(ГруппаДерева); - ИндексКД = НоваяКоллекцияЭлементовКД.Индекс(ГруппаКД); - - ТекущаяСтрока = Неопределено; - - СтрокиРодителя = ГруппаДерева.ПолучитьЭлементы(); - СтрокиРодителяКД = ГруппаКД.Элементы; - Для Каждого СтараяСтрокаДерева Из СтрокиРодителя Цикл - СтарыйЭлементКД = УзелКД.ПолучитьОбъектПоИдентификатору(СтараяСтрокаДерева.ИдентификаторКД); - ПеренесенныеСтроки = ТаблицыПолейСкопироватьРекурсивно(УзелКД, СтараяСтрокаДерева, НоваяКоллекцияСтрокДерева, СтарыйЭлементКД, НоваяКоллекцияЭлементовКД, Индекс, ИндексКД); - Если ТекущаяСтрока = Неопределено Тогда - ТекущаяСтрока = ПеренесенныеСтроки.СтрокаДерева; - КонецЕсли; - КонецЦикла; - - НоваяКоллекцияСтрокДерева.Удалить(ГруппаДерева); - НоваяКоллекцияЭлементовКД.Удалить(ГруппаКД); - - Если ТекущаяСтрока <> Неопределено Тогда - ТаблицаЭлемент.ТекущаяСтрока = ТекущаяСтрока.ПолучитьИдентификатор(); - КонецЕсли; - - ПользовательскиеНастройкиМодифицированы = Истина; - Если РасширенныйРежим = 1 Тогда - ВариантМодифицирован = Истина; - КонецЕсли; -КонецПроцедуры - -&НаКлиенте -Процедура ТаблицыПолейПередУдалением(ТаблицаИмя, Отказ) - Отказ = Истина; - СтрокаТаблицы = Элементы[ТаблицаИмя].ТекущиеДанные; - Если СтрокаТаблицы = Неопределено Тогда - Возврат; - КонецЕсли; - Если ТаблицаИмя = "ВыбранныеПоля" И СтрокаТаблицы.ЭтоРаздел Тогда - Возврат; - КонецЕсли; - - УзелКД = ТаблицыПолейНайтиУзел(ЭтотОбъект, ТаблицаИмя, СтрокаТаблицы); - ЭлементКД = УзелКД.ПолучитьОбъектПоИдентификатору(СтрокаТаблицы.ИдентификаторКД); - Если ЭлементКД <> Неопределено Тогда - УзелКД.Элементы.Удалить(ЭлементКД); - КонецЕсли; - - ТаблицаРеквизит = ЭтотОбъект[ТаблицаИмя]; - СтрокаРодитель = СтрокаТаблицы.ПолучитьРодителя(); - ОткудаУдалить = ЭлементыСтрокиДерева(ТаблицаРеквизит, СтрокаРодитель); - ОткудаУдалить.Удалить(СтрокаТаблицы); - - ПользовательскиеНастройкиМодифицированы = Истина; - Если РасширенныйРежим = 1 Тогда - ВариантМодифицирован = Истина; - КонецЕсли; -КонецПроцедуры - -&НаКлиенте -Процедура ТаблицыПолейИзменить(ТаблицаИмя, СтрокаИдентификатор) - Контекст = Новый Структура("ТаблицаИмя, СтрокаИдентификатор", ТаблицаИмя, СтрокаИдентификатор); - Обработчик = Новый ОписаниеОповещения("ТаблицыПолейИзменитьЗавершение", ЭтотОбъект, Контекст); - - Таблица = ЭтотОбъект[ТаблицаИмя]; - СтрокаТаблицы = Таблица.НайтиПоИдентификатору(СтрокаИдентификатор); - УзелКД = ТаблицыПолейНайтиУзел(ЭтотОбъект, ТаблицаИмя, СтрокаТаблицы); - ЭлементКД = УзелКД.ПолучитьОбъектПоИдентификатору(СтрокаТаблицы.ИдентификаторКД); - - ТаблицыПолейПоказатьВыборПоля(ТаблицаИмя, Обработчик, ?(ТаблицаИмя = "Отборы", ЭлементКД.ЛевоеЗначение, ЭлементКД.Поле)); -КонецПроцедуры - -&НаКлиенте -Процедура ТаблицыПолейИзменитьЗавершение(ДоступноеПолеКД, Контекст) Экспорт - Если ДоступноеПолеКД = Неопределено Тогда - Возврат; - КонецЕсли; - - СтрокаТаблицы = ЭтотОбъект[Контекст.ТаблицаИмя].НайтиПоИдентификатору(Контекст.СтрокаИдентификатор); - Если СтрокаТаблицы = Неопределено Тогда - Возврат; - КонецЕсли; - - УзелКД = ТаблицыПолейНайтиУзел(ЭтотОбъект, Контекст.ТаблицаИмя, СтрокаТаблицы); - ЭлементКД = УзелКД.ПолучитьОбъектПоИдентификатору(СтрокаТаблицы.ИдентификаторКД); - Если ЭлементКД = Неопределено Тогда - Возврат; - КонецЕсли; - - СтрокаТаблицы.Представление = ДоступноеПолеКД.Заголовок; - Если Контекст.ТаблицаИмя = "Отборы" Тогда - ЭлементКД.ЛевоеЗначение = ДоступноеПолеКД.Поле; - Иначе - ЭлементКД.Поле = ДоступноеПолеКД.Поле; - КонецЕсли; - - ПользовательскиеНастройкиМодифицированы = Истина; - Если РасширенныйРежим = 1 Тогда - ВариантМодифицирован = Истина; - КонецЕсли; - - ОбновитьФорму(Неопределено, Неопределено); -КонецПроцедуры - -&НаКлиенте -Процедура ТаблицыПолейИзменитьИспользование(ТаблицаИмя) - СтрокаТаблицы = Элементы[ТаблицаИмя].ТекущиеДанные; - Если СтрокаТаблицы = Неопределено Тогда - Возврат; - КонецЕсли; - - Если ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(СтрокаТаблицы, "ВыводитьФлажок") = Ложь Тогда - СтрокаТаблицы.Использование = Истина; - Возврат; - КонецЕсли; - - УзелКД = ТаблицыПолейНайтиУзел(ЭтотОбъект, ТаблицаИмя, СтрокаТаблицы); - ЭлементКД = УзелКД.ПолучитьОбъектПоИдентификатору(СтрокаТаблицы.ИдентификаторКД); - Если ЭлементКД = Неопределено Тогда - Возврат; - КонецЕсли; - - ЭлементКД.Использование = СтрокаТаблицы.Использование; - - ПользовательскиеНастройкиМодифицированы = Истина; - Если РасширенныйРежим = 1 Тогда - ВариантМодифицирован = Истина; - КонецЕсли; -КонецПроцедуры - -&НаКлиенте -Процедура ТаблицыПолейИзменитьЗначение(ТаблицаИмя) - СтрокаТаблицы = Элементы[ТаблицаИмя].ТекущиеДанные; - Если СтрокаТаблицы = Неопределено Тогда - Возврат; - КонецЕсли; - - УзелКД = ТаблицыПолейНайтиУзел(ЭтотОбъект, ТаблицаИмя, СтрокаТаблицы); - ЭлементКД = УзелКД.ПолучитьОбъектПоИдентификатору(СтрокаТаблицы.ИдентификаторКД); - Если ЭлементКД = Неопределено Тогда - Возврат; - КонецЕсли; - - Если СтрокаТаблицы.ЭтоПараметр Тогда - ЭлементКД.Значение = СтрокаТаблицы.Значение; - Иначе - ЭлементКД.ПравоеЗначение = СтрокаТаблицы.Значение; - КонецЕсли; - - ПользовательскиеНастройкиМодифицированы = Истина; - Если РасширенныйРежим = 1 Тогда - ВариантМодифицирован = Истина; - КонецЕсли; -КонецПроцедуры - -&НаКлиенте -Процедура ТаблицыПолейИзменитьТипГруппировки(ТаблицаИмя) - СтрокаТаблицы = Элементы[ТаблицаИмя].ТекущиеДанные; - Если СтрокаТаблицы = Неопределено Тогда - Возврат; - КонецЕсли; - - УзелКД = ТаблицыПолейНайтиУзел(ЭтотОбъект, ТаблицаИмя, СтрокаТаблицы); - ЭлементКД = УзелКД.ПолучитьОбъектПоИдентификатору(СтрокаТаблицы.ИдентификаторКД); - Если ЭлементКД = Неопределено Тогда - Возврат; - КонецЕсли; - - Если СтрокаТаблицы.ПоказыватьТипДополнения Тогда - ЭлементКД.ТипДополнения = СтрокаТаблицы.ТипДополнения; - Иначе - ЭлементКД.ТипГруппировки = СтрокаТаблицы.ТипГруппировки; - КонецЕсли; - - ПользовательскиеНастройкиМодифицированы = Истина; - Если РасширенныйРежим = 1 Тогда - ВариантМодифицирован = Истина; - КонецЕсли; -КонецПроцедуры - -&НаКлиенте -Процедура ТаблицыПолейИзменитьГруппу(ТаблицаИмя, СтрокаИдентификатор, СтрокаТаблицы) - УзелКД = ТаблицыПолейНайтиУзел(ЭтотОбъект, ТаблицаИмя, СтрокаТаблицы); - ЭлементКД = УзелКД.ПолучитьОбъектПоИдентификатору(СтрокаТаблицы.ИдентификаторКД); - - Контекст = Новый Структура("ТаблицаИмя, СтрокаИдентификатор", ТаблицаИмя, СтрокаИдентификатор); - Обработчик = Новый ОписаниеОповещения("ТаблицыПолейИзменитьГруппуЗавершение", ЭтотОбъект, Контекст); - - Если ТаблицаИмя = "Отборы" Тогда - Список = Новый СписокЗначений; - ОтчетыКлиентСервер.ДобавитьУникальноеЗначениеВСписок(Список, ТипГруппыЭлементовОтбораКомпоновкиДанных.ГруппаИ, "", Ложь); - ОтчетыКлиентСервер.ДобавитьУникальноеЗначениеВСписок(Список, ТипГруппыЭлементовОтбораКомпоновкиДанных.ГруппаИли, "", Ложь); - ОтчетыКлиентСервер.ДобавитьУникальноеЗначениеВСписок(Список, ТипГруппыЭлементовОтбораКомпоновкиДанных.ГруппаНе, "", Ложь); - ПоказатьВыборИзМеню(Обработчик, Список); - Иначе - ПараметрыФормы = Новый Структура; - ПараметрыФормы.Вставить("ЗаголовокГруппы", ЭлементКД.Заголовок); - ПараметрыФормы.Вставить("Расположение", ЭлементКД.Расположение); - - Блокировать = РежимОткрытияОкнаФормы.БлокироватьОкноВладельца; - - ОткрытьФорму("ХранилищеНастроек.ХранилищеВариантовОтчетов.Форма.ГруппаВыбранныхПолей", ПараметрыФормы, ЭтотОбъект, Истина, , , Обработчик, Блокировать); - КонецЕсли; -КонецПроцедуры - -&НаКлиенте -Процедура ТаблицыПолейИзменитьГруппуЗавершение(Результат, Контекст) Экспорт - Если Результат = Неопределено Или Результат = КодВозвратаДиалога.Отмена Тогда - Возврат; - КонецЕсли; - - СтрокаТаблицы = ЭтотОбъект[Контекст.ТаблицаИмя].НайтиПоИдентификатору(Контекст.СтрокаИдентификатор); - Если СтрокаТаблицы = Неопределено Тогда - Возврат; - КонецЕсли; - - УзелКД = ТаблицыПолейНайтиУзел(ЭтотОбъект, Контекст.ТаблицаИмя, СтрокаТаблицы); - ЭлементКД = УзелКД.ПолучитьОбъектПоИдентификатору(СтрокаТаблицы.ИдентификаторКД); - Если ЭлементКД = Неопределено Тогда - Возврат; - КонецЕсли; - - Если Контекст.ТаблицаИмя = "Отборы" Тогда - ЭлементКД.ТипГруппы = Результат.Значение; - СтрокаТаблицы.Представление = Строка(Результат.Значение); - Если Не СтрокаТаблицы.ЗаголовокПереопределен Тогда - СтрокаТаблицы.Заголовок = СтрокаТаблицы.Представление; - КонецЕсли; - Иначе - ЭлементКД.Заголовок = Результат.ЗаголовокГруппы; - ЭлементКД.Расположение = Результат.Расположение; - СтрокаТаблицы.Представление = ЭлементКД.Заголовок; - Если ЭлементКД.Расположение <> РасположениеПоляКомпоновкиДанных.Авто Тогда - СтрокаТаблицы.Представление = СтрокаТаблицы.Представление + " (" + Строка(ЭлементКД.Расположение) + ")"; - КонецЕсли; - КонецЕсли; - - ПользовательскиеНастройкиМодифицированы = Истина; - Если РасширенныйРежим = 1 Тогда - ВариантМодифицирован = Истина; - КонецЕсли; -КонецПроцедуры - -&НаКлиенте -Процедура ТаблицыПолейИзменитьУзелСтруктурыВарианта(ТаблицаИмя, СтрокаИдентификатор, СтрокаТаблицы) - Контекст = Новый Структура("ТаблицаИмя, СтрокаИдентификатор", ТаблицаИмя, СтрокаИдентификатор); - Обработчик = Новый ОписаниеОповещения("ТаблицыПолейИзменитьУзелСтруктурыВариантаЗавершение", ЭтотОбъект, Контекст); - - ПараметрыФормы = Новый Структура; - ПараметрыФормы.Вставить("НастройкиОтчета", НастройкиОтчета); - ПараметрыФормы.Вставить("КомпоновщикНастроек", КомпоновщикНастроек); - ПараметрыФормы.Вставить("ВариантНаименование", ВариантНаименование); - ПараметрыФормы.Вставить("ИдентификаторТекущегоУзлаКД", СтрокаТаблицы.ИдентификаторКД); - ПараметрыФормы.Вставить("ТипТекущегоУзлаКД", СтрокаТаблицы.Тип); - Если СтрокаТаблицы.Тип = "Диаграмма" Тогда - ПараметрыФормы.Вставить("Заголовок", НСтр("ru = 'Настройка диаграммы отчета ""%2""'")); - Иначе - ПараметрыФормы.Вставить("Заголовок", НСтр("ru = 'Настройка группировки ""%1"" отчета ""%2""'")); - КонецЕсли; - ПараметрыФормы.Заголовок = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - ПараметрыФормы.Заголовок, - СтрокаТаблицы.Представление, - ВариантНаименование); - - ОткрытьФорму("ХранилищеНастроек.ХранилищеВариантовОтчетов.Форма.НастройкиОтчета", ПараметрыФормы, ЭтотОбъект, , , , Обработчик); -КонецПроцедуры - -&НаКлиенте -Процедура ТаблицыПолейИзменитьУзелСтруктурыВариантаЗавершение(Результат, Контекст) Экспорт - Если Результат = Неопределено Или Результат = КодВозвратаДиалога.Отмена Тогда - Возврат; - КонецЕсли; - РезультатКлиента = БыстрыеНастройкиЗаполнить(Результат); - СтандартныеПодсистемыКлиент.ПоказатьРезультатВыполнения(ЭтотОбъект, РезультатКлиента); -КонецПроцедуры - -&НаКлиенте -Функция ТаблицыПолейВставить(ТаблицаИмя, ТипЭлемента, ТекущаяСтрока, ВнутрьСтроки) - Если ТекущаяСтрока = Неопределено Тогда - Возврат Неопределено; - КонецЕсли; - - ТаблицаЭлемент = Элементы[ТаблицаИмя]; - ТаблицаРеквизит = ЭтотОбъект[ТаблицаИмя]; - УзелКД = ТаблицыПолейНайтиУзел(ЭтотОбъект, ТаблицаИмя); - - Если ТекущаяСтрока = 0 Тогда - ТекущаяСтрока = ТаблицаЭлемент.ТекущиеДанные; - КонецЕсли; - - Если ТекущаяСтрока = Неопределено Тогда - - КудаВставить = ТаблицаРеквизит.ПолучитьЭлементы(); - Индекс = Неопределено; - ЭлементКД = Неопределено; - КудаВставитьКД = ЭлементыОбъектаКД(УзелКД, ТекущаяСтрока); - ИндексКД = Неопределено; - - Иначе - - ЭлементКД = НайтиОбъектКД(УзелКД, ТекущаяСтрока); - Если ВнутрьСтроки = Неопределено Тогда - ВнутрьСтроки = ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(ТекущаяСтрока, "ЭтоГруппа", Ложь); - КонецЕсли; - - Если ЭлементКД = Неопределено Тогда - ВнутрьСтроки = Истина; - КонецЕсли; - - Если ВнутрьСтроки Тогда - КудаВставить = ТекущаяСтрока.ПолучитьЭлементы(); - Индекс = Неопределено; - КудаВставитьКД = ЭлементыОбъектаКД(УзелКД, ЭлементКД); - ИндексКД = Неопределено - Иначе // Вставка на один уровень со строкой. - СтрокаРодитель = ТекущаяСтрока.ПолучитьРодителя(); - Если СтрокаРодитель = Неопределено Тогда - КудаВставить = ТаблицаРеквизит.ПолучитьЭлементы(); - Иначе - КудаВставить = СтрокаРодитель.ПолучитьЭлементы(); - КонецЕсли; - Индекс = КудаВставить.Индекс(ТекущаяСтрока) + 1; - РодительКД = НайтиОбъектКД(УзелКД, СтрокаРодитель); - КудаВставитьКД = ЭлементыОбъектаКД(УзелКД, РодительКД); - ИндексКД = КудаВставитьКД.Индекс(ЭлементКД) + 1; - КонецЕсли; - - КонецЕсли; - - Если Индекс = Неопределено Тогда - НоваяСтрока = КудаВставить.Добавить(); - Иначе - НоваяСтрока = КудаВставить.Вставить(Индекс); - КонецЕсли; - - Если ОтчетыКлиентСервер.ПриДобавленииВКоллекциюНужноУказыватьТипЭлемента(ТипЗнч(КудаВставитьКД)) Тогда - Если Индекс = Неопределено Тогда - НовыйЭлементКД = КудаВставитьКД.Добавить(ТипЭлемента); - Иначе - НовыйЭлементКД = КудаВставитьКД.Вставить(Индекс, ТипЭлемента); - КонецЕсли; - Иначе - Если Индекс = Неопределено Тогда - НовыйЭлементКД = КудаВставитьКД.Добавить(); - Иначе - НовыйЭлементКД = КудаВставитьКД.Вставить(Индекс); - КонецЕсли; - КонецЕсли; - ТаблицаЭлемент.ТекущаяСтрока = НоваяСтрока.ПолучитьИдентификатор(); - НоваяСтрока.ИдентификаторКД = УзелКД.ПолучитьИдентификаторПоОбъекту(НовыйЭлементКД); - - Результат = Новый Структура("СтрокаТаблицы, ЭлементКД"); - Результат.СтрокаТаблицы = НоваяСтрока; - Результат.ЭлементКД = НовыйЭлементКД; - Возврат Результат; -КонецФункции - -&НаКлиенте -Функция ТаблицыПолейПереместить(ТаблицаИмя, СтрокаТаблицы, Родитель, ПередЧемВставить, ОставитьКопию) - ТаблицаЭлемент = Элементы[ТаблицаИмя]; - ТаблицаРеквизит = ЭтотОбъект[ТаблицаИмя]; - УзелКД = ТаблицыПолейНайтиУзел(ЭтотОбъект, ТаблицаИмя, СтрокаТаблицы); - ЭлементКД = УзелКД.ПолучитьОбъектПоИдентификатору(СтрокаТаблицы.ИдентификаторКД); - - Если Родитель = Неопределено Тогда - Родитель = ТаблицаРеквизит; - РодительКД = УзелКД; - Иначе - РодительКД = УзелКД.ПолучитьОбъектПоИдентификатору(Родитель.ИдентификаторКД); - КонецЕсли; - - КудаВставить = Родитель.ПолучитьЭлементы(); - КудаВставитьКД = ЭлементыОбъектаКД(УзелКД, РодительКД); - - Если ПередЧемВставить = Неопределено Тогда - Индекс = Неопределено; - ИндексКД = Неопределено; - Иначе - ПередЧемВставитьКД = УзелКД.ПолучитьОбъектПоИдентификатору(ПередЧемВставить.ИдентификаторКД); - Индекс = КудаВставить.Индекс(ПередЧемВставить); - ИндексКД = КудаВставитьКД.Индекс(ПередЧемВставитьКД); - КонецЕсли; - - Результат = Новый Структура("СтрокаДерева, СтрокаКД"); - - ПоискЭлементовКД = Новый Соответствие; - Результат.СтрокаКД = ОтчетыКлиентСервер.СкопироватьРекурсивно(УзелКД, ЭлементКД, КудаВставитьКД, ИндексКД, ПоискЭлементовКД); - - ПоискСтрокТаблицы = Новый Соответствие; - Результат.СтрокаДерева = ОтчетыКлиентСервер.СкопироватьРекурсивно(Неопределено, СтрокаТаблицы, КудаВставить, Индекс, ПоискСтрокТаблицы); - - Для Каждого КлючИЗначение Из ПоискСтрокТаблицы Цикл - СтараяСтрока = КлючИЗначение.Ключ; - НоваяСтрока = КлючИЗначение.Значение; - НоваяСтрока.ИдентификаторКД = ПоискЭлементовКД.Получить(СтараяСтрока.ИдентификаторКД); - КонецЦикла; - - Если Не ОставитьКопию Тогда - СтарыйРодитель = СтрокаТаблицы.ПолучитьРодителя(); - Если СтарыйРодитель = Неопределено Тогда - СтарыйРодительСтроки = ТаблицаРеквизит.ПолучитьЭлементы(); - СтарыйРодительКД = УзелКД; - Иначе - СтарыйРодительСтроки = СтарыйРодитель.ПолучитьЭлементы(); - СтарыйРодительКД = УзелКД.ПолучитьОбъектПоИдентификатору(СтарыйРодитель.ИдентификаторКД); - КонецЕсли; - - СтарыйРодительКДСтроки = ЭлементыОбъектаКД(УзелКД, СтарыйРодительКД); - - СтарыйРодительСтроки.Удалить(СтрокаТаблицы); - СтарыйРодительКДСтроки.Удалить(ЭлементКД); - КонецЕсли; - - Возврат Результат; -КонецФункции - -&НаКлиенте -Функция НайтиОбъектКД(УзелКД, СтрокаТаблицы) - Если СтрокаТаблицы = Неопределено Или ТипЗнч(СтрокаТаблицы.ИдентификаторКД) <> Тип("ИдентификаторКомпоновкиДанных") Тогда - Возврат Неопределено; - Иначе - Возврат УзелКД.ПолучитьОбъектПоИдентификатору(СтрокаТаблицы.ИдентификаторКД); - КонецЕсли; -КонецФункции - -&НаКлиенте -Функция ЭлементыОбъектаКД(УзелКД, ОбъектКД) - Если ОбъектКД = Неопределено Тогда - ОбъектКД = УзелКД; - КонецЕсли; - ТипОбъекта = ТипЗнч(ОбъектКД); - Если ТипОбъекта = Тип("НастройкиКомпоновкиДанных") - Или ТипОбъекта = Тип("ГруппировкаКомпоновкиДанных") - Или ТипОбъекта = Тип("ГруппировкаТаблицыКомпоновкиДанных") - Или ТипОбъекта = Тип("ГруппировкаДиаграммыКомпоновкиДанных") Тогда - Возврат ОбъектКД.Структура; - ИначеЕсли ТипОбъекта = Тип("КоллекцияЭлементовСтруктурыТаблицыКомпоновкиДанных") - Или ТипОбъекта = Тип("КоллекцияЭлементовСтруктурыДиаграммыКомпоновкиДанных") Тогда - Возврат ОбъектКД; - Иначе - Возврат ОбъектКД.Элементы; - КонецЕсли; -КонецФункции - -&НаКлиенте -Функция ЭлементыСтрокиДерева(ДеревоФормы, СтрокаДерева) - Если СтрокаДерева = Неопределено Тогда - СтрокаДерева = ДеревоФормы; - КонецЕсли; - Возврат СтрокаДерева.ПолучитьЭлементы(); -КонецФункции - -&НаКлиенте -Процедура ТаблицыПолейИзменитьНаправлениеСортировки(ТаблицаИмя, Направление) - СтрокаТаблицы = Элементы[ТаблицаИмя].ТекущиеДанные; - Если СтрокаТаблицы = Неопределено Тогда - Возврат; - КонецЕсли; - - УзелКД = ТаблицыПолейНайтиУзел(ЭтотОбъект, ТаблицаИмя, СтрокаТаблицы); - ЭлементКД = УзелКД.ПолучитьОбъектПоИдентификатору(СтрокаТаблицы.ИдентификаторКД); - Если ЭлементКД = Неопределено Тогда - Возврат; - КонецЕсли; - - // Заполнение необязательных параметров. - Если Направление = Неопределено Тогда - Если ЭлементКД.ТипУпорядочивания = НаправлениеСортировкиКомпоновкиДанных.Возр Тогда - Направление = НаправлениеСортировкиКомпоновкиДанных.Убыв; - Иначе - Направление = НаправлениеСортировкиКомпоновкиДанных.Возр; - КонецЕсли; - КонецЕсли; - - // Изменение направления сортировки. - ЭлементКД.ТипУпорядочивания = Направление; - СтрокаТаблицы.Направление = Направление; - - ПользовательскиеНастройкиМодифицированы = Истина; - Если Не ЗначениеЗаполнено(УзелКД.ИдентификаторПользовательскойНастройки) Тогда - ВариантМодифицирован = Истина; - КонецЕсли; - -КонецПроцедуры - -&НаКлиенте -Процедура ТаблицыПолейПоказатьВыборПоля(ТаблицаИмя, Обработчик, ПолеКД = Неопределено, ИдентификаторУзлаКД = Неопределено) - ПараметрыФормы = Новый Структура; - ПараметрыФормы.Вставить("НастройкиОтчета", НастройкиОтчета); - ПараметрыФормы.Вставить("КомпоновщикНастроек", КомпоновщикНастроек); - ПараметрыФормы.Вставить("Режим", ТаблицаИмя); - ПараметрыФормы.Вставить("ПолеКД", ПолеКД); - ПараметрыФормы.Вставить("ИдентификаторТекущегоУзлаКД", ?(ИдентификаторУзлаКД = Неопределено, ИдентификаторТекущегоУзлаКД, ИдентификаторУзлаКД)); - - Блокировать = РежимОткрытияОкнаФормы.БлокироватьОкноВладельца; - - ОткрытьФорму("ХранилищеНастроек.ХранилищеВариантовОтчетов.Форма.ВыборПоляОтчета", ПараметрыФормы, ЭтотОбъект, Истина, , , Обработчик, Блокировать); -КонецПроцедуры - -&НаКлиенте -Функция ТаблицыПолейСкопироватьРекурсивно(УзелКД, ЧтоКопировать, КудаВставить, ЧтоКопироватьКД, КудаВставитьКД, Индекс = Неопределено, ИндексКД = Неопределено) - Результат = Новый Структура("СтрокаДерева, СтрокаКД"); - - ПоискЭлементовКД = Новый Соответствие; - Результат.СтрокаКД = ОтчетыКлиентСервер.СкопироватьРекурсивно(УзелКД, ЧтоКопироватьКД, КудаВставитьКД, ИндексКД, ПоискЭлементовКД); - - ПоискСтрокТаблицы = Новый Соответствие; - Результат.СтрокаДерева = ОтчетыКлиентСервер.СкопироватьРекурсивно(Неопределено, ЧтоКопировать, КудаВставить, Индекс, ПоискСтрокТаблицы); - - Для Каждого КлючИЗначение Из ПоискСтрокТаблицы Цикл - СтараяСтрока = КлючИЗначение.Ключ; - НоваяСтрока = КлючИЗначение.Значение; - НоваяСтрока.ИдентификаторКД = ПоискЭлементовКД.Получить(СтараяСтрока.ИдентификаторКД); - КонецЦикла; - - Возврат Результат; -КонецФункции - -&НаКлиенте -Процедура СтруктураВариантаОбновитьЗаголовокЭлементаВКомпоновщике(СтрокаТаблицы) - УзелКД = ТаблицыПолейНайтиУзел(ЭтотОбъект, "СтруктураВарианта", СтрокаТаблицы); - ЭлементКД = УзелКД.ПолучитьОбъектПоИдентификатору(СтрокаТаблицы.ИдентификаторКД); - Если ЭлементКД = Неопределено Тогда - Возврат; - КонецЕсли; - - ЗаголовокИспользование = ЗначениеЗаполнено(СтрокаТаблицы.Заголовок); - - ЗначениеПараметраКД = ЭлементКД.ПараметрыВывода.НайтиЗначениеПараметра(Новый ПараметрКомпоновкиДанных("ВыводитьЗаголовок")); - Если ЗначениеПараметраКД <> Неопределено Тогда - ЗначениеПараметраКД.Использование = Истина; - Если ЗаголовокИспользование Тогда - ЗначениеПараметраКД.Значение = ТипВыводаТекстаКомпоновкиДанных.Выводить; - Иначе - ЗначениеПараметраКД.Значение = ТипВыводаТекстаКомпоновкиДанных.НеВыводить; - КонецЕсли; - КонецЕсли; - - ЗначениеПараметраКД = ЭлементКД.ПараметрыВывода.НайтиЗначениеПараметра(Новый ПараметрКомпоновкиДанных("Заголовок")); - Если ЗначениеПараметраКД <> Неопределено Тогда - ЗначениеПараметраКД.Использование = Истина; - ЗначениеПараметраКД.Значение = СтрокаТаблицы.Заголовок; - КонецЕсли; -КонецПроцедуры - -//////////////////////////////////////////////////////////////////////////////// -// Клиент или сервер - -&НаКлиентеНаСервереБезКонтекста -Функция ЭтоГруппа(ТипЭлемента) - Если ТипЭлемента = Тип("ГруппаВыбранныхПолейКомпоновкиДанных") - Или ТипЭлемента = Тип("ГруппаЭлементовОтбораКомпоновкиДанных") - Или ТипЭлемента = Тип("ГруппировкаКомпоновкиДанных") - Или ТипЭлемента = Тип("НастройкиВложенногоОбъектаКомпоновкиДанных") - Или ТипЭлемента = Тип("КоллекцияЭлементовСтруктурыТаблицыКомпоновкиДанных") - Или ТипЭлемента = Тип("КоллекцияЭлементовСтруктурыДиаграммыКомпоновкиДанных") Тогда - Возврат Истина; - КонецЕсли; - Возврат Ложь; -КонецФункции - -&НаКлиентеНаСервереБезКонтекста -Функция ОписаниеТиповУдалитьПримитивные(ИсходноеОписаниеТипов) - ВычитаемыеТипы = Новый Массив; - Если ИсходноеОписаниеТипов.СодержитТип(Тип("Строка")) Тогда - ВычитаемыеТипы.Добавить(Тип("Строка")); - КонецЕсли; - Если ИсходноеОписаниеТипов.СодержитТип(Тип("Дата")) Тогда - ВычитаемыеТипы.Добавить(Тип("Дата")); - КонецЕсли; - Если ИсходноеОписаниеТипов.СодержитТип(Тип("Число")) Тогда - ВычитаемыеТипы.Добавить(Тип("Число")); - КонецЕсли; - Если ВычитаемыеТипы.Количество() = 0 Тогда - Возврат ИсходноеОписаниеТипов; - КонецЕсли; - Возврат Новый ОписаниеТипов(ИсходноеОписаниеТипов, , ВычитаемыеТипы); -КонецФункции - -&НаКлиентеНаСервереБезКонтекста -Функция ТаблицыПолейНайтиУзел(ЭтотОбъект, ТаблицаИмя, СтрокаТаблицы = Неопределено, ИдентификаторУзлаКД = Неопределено) - Если ЭтотОбъект.РасширенныйРежим = 1 Тогда - Если ИдентификаторУзлаКД = Неопределено Тогда - ИдентификаторУзлаКД = ЭтотОбъект.ИдентификаторТекущегоУзлаКД; - КонецЕсли; - Если ИдентификаторУзлаКД = Неопределено Тогда - КорневойУзел = ЭтотОбъект.КомпоновщикНастроек.Настройки; - Иначе - КорневойУзел = ЭтотОбъект.КомпоновщикНастроек.Настройки.ПолучитьОбъектПоИдентификатору(ИдентификаторУзлаКД); - Если ТипЗнч(КорневойУзел) = Тип("НастройкиВложенногоОбъектаКомпоновкиДанных") Тогда - КорневойУзел = КорневойУзел.Настройки; - КонецЕсли; - КонецЕсли; - Если ТаблицаИмя = "Сортировка" Тогда - Возврат КорневойУзел.Порядок; - ИначеЕсли ТаблицаИмя = "ВыбранныеПоля" Тогда - Возврат КорневойУзел.Выбор; - ИначеЕсли ТаблицаИмя = "Отборы" Тогда - Если СтрокаТаблицы = Неопределено Или Не СтрокаТаблицы.ЭтоПараметр Тогда - Возврат КорневойУзел.Отбор; - Иначе - Возврат КорневойУзел.ПараметрыДанных; - КонецЕсли; - ИначеЕсли ТаблицаИмя = "СоставГруппировки" Тогда - Возврат КорневойУзел.ПоляГруппировки; - ИначеЕсли ТаблицаИмя = "Оформление" Тогда - Возврат КорневойУзел.УсловноеОформление; - ИначеЕсли ТаблицаИмя = "СтруктураВарианта" Тогда - Возврат КорневойУзел; - Иначе - ВызватьИсключение СтрЗаменить(НСтр("ru = 'Изменение узлов таблицы ""%1"" не поддерживается.'"), "%1", ТаблицаИмя); - КонецЕсли; - Иначе - Если ТаблицаИмя = "СтруктураВарианта" Тогда - Возврат ЭтотОбъект.КомпоновщикНастроек.ПользовательскиеНастройки; - КонецЕсли; - ИдентификаторКД = ЭтотОбъект.БыстрыйПоискПользовательскихНастроек.Получить(ТаблицаИмя); - Если ИдентификаторКД = Неопределено Тогда - Возврат Неопределено; - Иначе - Возврат ЭтотОбъект.КомпоновщикНастроек.ПользовательскиеНастройки.ПолучитьОбъектПоИдентификатору(ИдентификаторКД); - КонецЕсли; - КонецЕсли; - -КонецФункции - -&НаКлиентеНаСервереБезКонтекста -Функция МассивСортировать(ИсходныйМассив, НаправлениеСортировки = Неопределено) - Список = Новый СписокЗначений; - Список.ЗагрузитьЗначения(ИсходныйМассив); - Список.СортироватьПоЗначению(НаправлениеСортировки); - Возврат Список.ВыгрузитьЗначения(); -КонецФункции - -&НаКлиентеНаСервереБезКонтекста -Функция НайтиНастройкуВарианта(ЭтотОбъект, ИдентификаторЭлемента) - ПоискНастройкиВарианта = ЭтотОбъект.БыстрыйПоискНастроекВарианта.Получить(ИдентификаторЭлемента); - Если ПоискНастройкиВарианта = Неопределено Тогда - Возврат Неопределено; - КонецЕсли; - КорневойУзелКД = ЭтотОбъект.КомпоновщикНастроек.Настройки.ПолучитьОбъектПоИдентификатору(ПоискНастройкиВарианта.ИдентификаторУзлаКД); - Результат = Новый Структура("УзелКД, ЭлементКД"); - Результат.УзелКД = КорневойУзелКД[ПоискНастройкиВарианта.ИмяКоллекции]; - Результат.ЭлементКД = Результат.УзелКД.ПолучитьОбъектПоИдентификатору(ПоискНастройкиВарианта.ИдентификаторЭлементаКД); - Возврат Результат; -КонецФункции - -//////////////////////////////////////////////////////////////////////////////// -// Вызов сервера - -&НаСервере -Функция БыстрыеНастройкиЗаполнить(Знач ПараметрыЗаполнения) - - // Вставка значений по умолчанию для обязательных ключей параметров заполнения. - БыстрыеНастройкиДозаполнитьПараметры(ПараметрыЗаполнения); - - // Вызов переопределяемого модуля. - Если НастройкиОтчета.События.ПередЗаполнениемПанелиБыстрыхНастроек Тогда - ОтчетОбъект = ОтчетыСервер.ОтчетОбъект(НастройкиОтчета); - ОтчетОбъект.ПередЗаполнениемПанелиБыстрыхНастроек(ЭтотОбъект, ПараметрыЗаполнения); - Иначе - ОтчетыПереопределяемый.ПередЗаполнениемПанелиБыстрыхНастроек(ЭтотОбъект, ПараметрыЗаполнения); - КонецЕсли; - - // Сохранить состояние до начала изменения. - БыстрыеНастройкиЗапомнитьСостояние(ПараметрыЗаполнения); - - // Запись новых настроек варианта и пользовательских настроек в компоновщик. - БыстрыеНастройкиЗагрузитьНастройкиВКомпоновщик(ПараметрыЗаполнения); - - // Получение информации из КД. - УсловияВывода = Новый Структура; - УсловияВывода.Вставить("ТолькоПользовательские", РасширенныйРежим = 0); - УсловияВывода.Вставить("ТолькоБыстрые", Ложь); - УсловияВывода.Вставить("ИдентификаторТекущегоУзлаКД", ИдентификаторТекущегоУзлаКД); - Информация = ОтчетыСервер.РасширеннаяИнформацияОНастройках(КомпоновщикНастроек, ЭтотОбъект, УсловияВывода); - - // Удаление элементов старых настроек. - БыстрыеНастройкиУдалитьСтарыеЭлементыИКоманды(ПараметрыЗаполнения); - - // Добавление элементов актуальных настроек и загрузка значений. - БыстрыеНастройкиСоздатьЭлементыУправленияИЗагрузитьЗначения(ПараметрыЗаполнения, Информация); - - // Добавление элементов актуальных настроек и загрузка значений. - РасширенныеНастройкиЗагрузитьЗначения(ПараметрыЗаполнения, Информация); - - // Связи. - ЗарегистрироватьОтключаемыеСвязи(Информация); - - // Сохранить состояние до начала изменения. - БыстрыеНастройкиВосстановитьСостояние(ПараметрыЗаполнения); - - // Заголовок и свойства элементов. - ВидимостьДоступностьКорректность(ПараметрыЗаполнения.Событие.Имя); - - // Вызов переопределяемого модуля. - Если НастройкиОтчета.События.ПослеЗаполненияПанелиБыстрыхНастроек Тогда - ОтчетОбъект = ОтчетыСервер.ОтчетОбъект(НастройкиОтчета); - ОтчетОбъект.ПослеЗаполненияПанелиБыстрыхНастроек(ЭтотОбъект, ПараметрыЗаполнения); - Иначе - ОтчетыПереопределяемый.ПослеЗаполненияПанелиБыстрыхНастроек(ЭтотОбъект, ПараметрыЗаполнения); - КонецЕсли; - - Если НастройкиОтчета.Свойство("ОтчетОбъект") Тогда - НастройкиОтчета.Удалить("ОтчетОбъект"); - КонецЕсли; - - Возврат ПараметрыЗаполнения.Результат; -КонецФункции - -&НаСервере -Процедура ВидимостьДоступностьКорректность(ИмяСобытия = "") - - // Видимость элементов. - Элементы.КомандыСтруктурыВарианта_Добавление.Видимость = (РасширенныйРежим = 1); - Элементы.КомандыСтруктурыВарианта_Добавление1.Видимость = (РасширенныйРежим = 1); - Элементы.КомандыСтруктурыВарианта_Изменение.Видимость = (РасширенныйРежим = 1); - Элементы.КомандыСтруктурыВарианта_Изменение1.Видимость = (РасширенныйРежим = 1); - Элементы.КомандыСтруктурыВарианта_ДвижениеПоИерархии.Видимость = (РасширенныйРежим = 1); - Элементы.КомандыСтруктурыВарианта_ДвижениеПоИерархии1.Видимость = (РасширенныйРежим = 1); - Элементы.КомандыСтруктурыВарианта_ДвижениеВнутриРодителя.Видимость = (РасширенныйРежим = 1); - Элементы.КомандыСтруктурыВарианта_ДвижениеВнутриРодителя1.Видимость = (РасширенныйРежим = 1); - Элементы.СтруктураВарианта.ИзменятьСоставСтрок = (РасширенныйРежим = 1); - Элементы.СтруктураВарианта.ИзменятьПорядокСтрок = (РасширенныйРежим = 1); - Элементы.СтруктураВарианта.РазрешитьНачалоПеретаскивания = (РасширенныйРежим = 1); - Элементы.СтруктураВарианта.РазрешитьПеретаскивание = (РасширенныйРежим = 1); - Элементы.СтруктураВарианта.Шапка = (РасширенныйРежим = 1); - Элементы.СтруктураВариантаЗаголовок.Видимость = (РасширенныйРежим = 1); - - Элементы.СтраницаГлавное.Видимость = (РасширенныйРежим = 0); - - Если ИмяСобытия = "ПриСозданииНаСервере" Тогда - Если РежимИзмененияУзлаВарианта Тогда - Элементы.СтраницаСтруктураВарианта.Видимость = Ложь; - Элементы.РасширенныйРежим.Видимость = Ложь; - Элементы.ЗакрытьИСформировать.Заголовок = НСтр("ru = 'Завершить редактирование'"); - Элементы.Закрыть.Заголовок = НСтр("ru = 'Отмена'"); - Элементы.Переместить(Элементы.СтраницаОтборы, Элементы.СтраницыНастроек, Элементы.СтраницаОформление); - КонецЕсли; - КонецЕсли; -КонецПроцедуры - -//////////////////////////////////////////////////////////////////////////////// -// Сервер - -&НаСервере -Функция ОтчетОбъект() - Возврат ОбщегоНазначения.ОбъектПоПолномуИмени(НастройкиОтчета.ПолноеИмя); -КонецФункции - -&НаСервере -Процедура ДобавитьУсловноеОформление() - // Отборы. - Инструкция = ВариантыОтчетов.ИнструкцияУсловногоОформления(); - Инструкция.Отборы.Вставить("Отборы.ЗаголовокПереопределен", Ложь); - Инструкция.Поля = "ОтборыЗаголовок"; - Инструкция.Оформление.Вставить("ЦветТекста", ЦветаСтиля.ТекстЗапрещеннойЯчейкиЦвет); - ВариантыОтчетов.ДобавитьЭлементУсловногоОформления(ЭтотОбъект, Инструкция); - - Инструкция = ВариантыОтчетов.ИнструкцияУсловногоОформления(); - Инструкция.Отборы.Вставить("Отборы.ВыводитьФлажок", Ложь); - Инструкция.Поля = "ОтборыИспользование"; - Инструкция.Оформление.Вставить("Видимость", Ложь); - Инструкция.Оформление.Вставить("Отображать", Ложь); - ВариантыОтчетов.ДобавитьЭлементУсловногоОформления(ЭтотОбъект, Инструкция); - - Инструкция = ВариантыОтчетов.ИнструкцияУсловногоОформления(); - Инструкция.Отборы.Вставить("Отборы.ЭтоРаздел", Истина); - Инструкция.Поля = "ОтборыУсловие, ОтборыЗначение, ОтборыПредставлениеЗначения, ОтборыИндексКартинкиДоступа, ОтборыЗаголовок"; - Инструкция.Оформление.Вставить("ТолькоПросмотр", Истина); - ВариантыОтчетов.ДобавитьЭлементУсловногоОформления(ЭтотОбъект, Инструкция); - - Инструкция = ВариантыОтчетов.ИнструкцияУсловногоОформления(); - Инструкция.Отборы.Вставить("Отборы.ЭтоГруппа", Истина); - Инструкция.Поля = "ОтборыУсловие, ОтборыЗначение, ОтборыПредставлениеЗначения"; - Инструкция.Оформление.Вставить("ТолькоПросмотр", Истина); - ВариантыОтчетов.ДобавитьЭлементУсловногоОформления(ЭтотОбъект, Инструкция); - - Инструкция = ВариантыОтчетов.ИнструкцияУсловногоОформления(); - Инструкция.Отборы.Вставить("Отборы.ВыводитьПредставлениеЗначения", Ложь); - Инструкция.Поля = "ОтборыПредставлениеЗначения"; - Инструкция.Оформление.Вставить("Видимость", Ложь); - Инструкция.Оформление.Вставить("Отображать", Ложь); - ВариантыОтчетов.ДобавитьЭлементУсловногоОформления(ЭтотОбъект, Инструкция); - - Инструкция = ВариантыОтчетов.ИнструкцияУсловногоОформления(); - Инструкция.Отборы.Вставить("Отборы.ВыводитьПредставлениеЗначения", Истина); - Инструкция.Поля = "ОтборыЗначение"; - Инструкция.Оформление.Вставить("Видимость", Ложь); - Инструкция.Оформление.Вставить("Отображать", Ложь); - ВариантыОтчетов.ДобавитьЭлементУсловногоОформления(ЭтотОбъект, Инструкция); - - // Выбранные поля. - Инструкция = ВариантыОтчетов.ИнструкцияУсловногоОформления(); - Инструкция.Отборы.Вставить("ВыбранныеПоля.ЭтоРаздел", Истина); - Инструкция.Поля = "ВыбранныеПоляИспользование"; - Инструкция.Оформление.Вставить("Видимость", Ложь); - Инструкция.Оформление.Вставить("Отображать", Ложь); - ВариантыОтчетов.ДобавитьЭлементУсловногоОформления(ЭтотОбъект, Инструкция); - - // Состав группировки. - Если РежимИзмененияУзлаВарианта Тогда - Инструкция = ВариантыОтчетов.ИнструкцияУсловногоОформления(); - Инструкция.Отборы.Вставить("СоставГруппировки.ПоказыватьТипДополнения", Истина); - Инструкция.Поля = "СоставГруппировкиТипГруппировки"; - Инструкция.Оформление.Вставить("Видимость", Ложь); - Инструкция.Оформление.Вставить("Отображать", Ложь); - ВариантыОтчетов.ДобавитьЭлементУсловногоОформления(ЭтотОбъект, Инструкция); - - Инструкция = ВариантыОтчетов.ИнструкцияУсловногоОформления(); - Инструкция.Отборы.Вставить("СоставГруппировки.ПоказыватьТипДополнения", Ложь); - Инструкция.Поля = "СоставГруппировкиТипДополнения"; - Инструкция.Оформление.Вставить("Видимость", Ложь); - Инструкция.Оформление.Вставить("Отображать", Ложь); - ВариантыОтчетов.ДобавитьЭлементУсловногоОформления(ЭтотОбъект, Инструкция); - КонецЕсли; - -КонецПроцедуры - -&НаСервере -Процедура БыстрыеНастройкиДозаполнитьПараметры(ПараметрыЗаполнения) - Если Не ПараметрыЗаполнения.Свойство("Событие") Тогда - ПараметрыЗаполнения.Вставить("Событие", Новый Структура("Имя", "")); - КонецЕсли; - Если Не ПараметрыЗаполнения.Свойство("ВариантМодифицирован") Тогда - ПараметрыЗаполнения.Вставить("ВариантМодифицирован", Ложь); - КонецЕсли; - Если Не ПараметрыЗаполнения.Свойство("ПользовательскиеНастройкиМодифицированы") Тогда - ПараметрыЗаполнения.Вставить("ПользовательскиеНастройкиМодифицированы", Ложь); - КонецЕсли; - Если Не ПараметрыЗаполнения.Свойство("Результат") Тогда - ПараметрыЗаполнения.Вставить("Результат", Новый Структура); - КонецЕсли; -КонецПроцедуры - -&НаСервере -Процедура БыстрыеНастройкиЗапомнитьСостояние(ПараметрыЗаполнения) - Если ПараметрыЗаполнения.Событие.Имя = "ПриСозданииНаСервере" Тогда - Возврат; // Ничего восстанавливать не требуется. - КонецЕсли; - - ВыделенныеСтроки = Новый Структура; - ПараметрыЗаполнения.Вставить("ВыделенныеСтроки", ВыделенныеСтроки); - - ИменаТаблиц = "Отборы, ВыбранныеПоля, Сортировка, " + ?(РежимИзмененияУзлаВарианта, "СтруктураВарианта", "СоставГруппировки"); - ИменаТаблиц = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(ИменаТаблиц, ",", Истина, Истина); - Для Каждого ИмяТаблицы Из ИменаТаблиц Цикл - ВыделенныеСтроки.Вставить(ИмяТаблицы, ОтчетыСервер.ЗапомнитьВыделенныеСтроки(ЭтотОбъект, ИмяТаблицы, "ИдентификаторКД")); - СтандартныеПодсистемыКлиентСервер.РазвернутьУзлыДерева(ПараметрыЗаполнения.Результат, ИмяТаблицы, "*", Истина); - КонецЦикла; -КонецПроцедуры - -&НаСервере -Процедура БыстрыеНастройкиВосстановитьСостояние(ПараметрыЗаполнения) - ВыделенныеСтроки = ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(ПараметрыЗаполнения, "ВыделенныеСтроки"); - Если ТипЗнч(ВыделенныеСтроки) = Тип("Структура") Тогда - Для Каждого КлючИЗначение Из ВыделенныеСтроки Цикл - ОтчетыСервер.ВосстановитьВыделенныеСтроки(ЭтотОбъект, КлючИЗначение.Ключ, КлючИЗначение.Значение); - КонецЦикла; - КонецЕсли; -КонецПроцедуры - -&НаСервере -Процедура БыстрыеНастройкиЗагрузитьНастройкиВКомпоновщик(ПараметрыЗаполнения) - Если ПараметрыЗаполнения.Свойство("КомпоновщикНастроекКД") Тогда - КомпоновщикНастроек.ЗагрузитьНастройки(ПараметрыЗаполнения.КомпоновщикНастроекКД.Настройки); - КомпоновщикНастроек.ЗагрузитьПользовательскиеНастройки(ПараметрыЗаполнения.КомпоновщикНастроекКД.ПользовательскиеНастройки); - КонецЕсли; - - Если ПараметрыЗаполнения.Свойство("НастройкиКД") Тогда - КомпоновщикНастроек.ЗагрузитьНастройки(ПараметрыЗаполнения.НастройкиКД); - КонецЕсли; - - Если ПараметрыЗаполнения.Свойство("ПользовательскиеНастройкиКД") Тогда - КомпоновщикНастроек.ЗагрузитьПользовательскиеНастройки(ПараметрыЗаполнения.ПользовательскиеНастройкиКД); - КонецЕсли; - - ОбновитьНастройкиВарианта = ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(ПараметрыЗаполнения, "ОбновитьНастройкиВарианта", Ложь); - Если ОбновитьНастройкиВарианта Тогда - НастройкиКД = КомпоновщикНастроек.ПолучитьНастройки(); - КомпоновщикНастроек.ЗагрузитьФиксированныеНастройки(Новый НастройкиКомпоновкиДанных); - КомпоновщикНастроек.ЗагрузитьНастройки(НастройкиКД); - КонецЕсли; - - СброситьПользовательскиеНастройки = ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(ПараметрыЗаполнения, "СброситьПользовательскиеНастройки", Ложь); - Если СброситьПользовательскиеНастройки Тогда - ПустойКомпоновщик = Новый КомпоновщикНастроекКомпоновкиДанных; - КомпоновщикНастроек.ЗагрузитьПользовательскиеНастройки(ПустойКомпоновщик.ПользовательскиеНастройки); - КонецЕсли; - - Если ПараметрыЗаполнения.ВариантМодифицирован Тогда - ВариантМодифицирован = Истина; - КонецЕсли; - Если ПараметрыЗаполнения.ПользовательскиеНастройкиМодифицированы Тогда - ПользовательскиеНастройкиМодифицированы = Истина; - КонецЕсли; -КонецПроцедуры - -&НаСервере -Процедура БыстрыеНастройкиУдалитьСтарыеЭлементыИКоманды(ПараметрыЗаполнения) - // Удаление элементов. - УдаляемыеЭлементы = Новый Массив; - ДобавитьПодчиненныеЭлементы(УдаляемыеЭлементы, Элементы.БыстрыеОтборы.ПодчиненныеЭлементы); - ДобавитьПодчиненныеЭлементы(УдаляемыеЭлементы, Элементы.ОбычныеОтборы.ПодчиненныеЭлементы); - ДобавитьПодчиненныеЭлементы(УдаляемыеЭлементы, Элементы.СтраницаДополнительноШапка.ПодчиненныеЭлементы); - ДобавитьПодчиненныеЭлементы(УдаляемыеЭлементы, Элементы.СтраницаДополнительноГруппировки.ПодчиненныеЭлементы); - ДобавитьПодчиненныеЭлементы(УдаляемыеЭлементы, Элементы.СтраницаДополнительноПодвал.ПодчиненныеЭлементы); - Для Каждого СтраницаНастроек Из Элементы.СтраницыНастроек.ПодчиненныеЭлементы Цикл - Если СтраницаНастроек <> Элементы.СтраницаГлавное - И СтраницаНастроек <> Элементы.СтраницаОтборы - И СтраницаНастроек <> Элементы.СтраницаВыбранныеПоля - И СтраницаНастроек <> Элементы.СтраницаСортировка - И СтраницаНастроек <> Элементы.СтраницаСоставГруппировки - И СтраницаНастроек <> Элементы.СтраницаСтруктураВарианта - И СтраницаНастроек <> Элементы.СтраницаОформление - И СтраницаНастроек <> Элементы.НеОтсортированное Тогда - ДобавитьПодчиненныеЭлементы(УдаляемыеЭлементы, СтраницаНастроек.ПодчиненныеЭлементы); - УдаляемыеЭлементы.Добавить(СтраницаНастроек); - КонецЕсли; - КонецЦикла; - Для Каждого Элемент Из УдаляемыеЭлементы Цикл - Элементы.Удалить(Элемент); - КонецЦикла; - - // Удаление команд - УдаляемыеКоманды = Новый Массив; - Для Каждого Команда Из Команды Цикл - Если ПостоянныеКоманды.НайтиПоЗначению(Команда.Имя) = Неопределено Тогда - УдаляемыеКоманды.Добавить(Команда); - КонецЕсли; - КонецЦикла; - Для Каждого Команда Из УдаляемыеКоманды Цикл - Команды.Удалить(Команда); - КонецЦикла; -КонецПроцедуры - -&НаСервере -Процедура ДобавитьПодчиненныеЭлементы(Куда, Откуда) - Для Каждого ПодчиненныйЭлемент Из Откуда Цикл - Если ТипЗнч(ПодчиненныйЭлемент) = Тип("ГруппаФормы") - Или ТипЗнч(ПодчиненныйЭлемент) = Тип("ТаблицаФормы") Тогда - ДобавитьПодчиненныеЭлементы(Куда, ПодчиненныйЭлемент.ПодчиненныеЭлементы); - КонецЕсли; - Куда.Добавить(ПодчиненныйЭлемент); - КонецЦикла; -КонецПроцедуры - -&НаСервере -Процедура БыстрыеНастройкиСоздатьЭлементыУправленияИЗагрузитьЗначения(ПараметрыЗаполнения, Информация) - // Кэши для быстрого поиска с клиента. - СоответствиеПользовательскихНастроек = Новый Соответствие; - СоответствиеИменОбъектовМетаданных = Информация.СоответствиеИменОбъектовМетаданных; - СоответствиеОтключаемыхСвязей = Новый Соответствие; - СоответствиеНастроекВарианта = Новый Соответствие; - - // Удаление реквизитов - ПараметрыЗаполнения.Вставить("Реквизиты", Новый Структура); - ПараметрыЗаполнения.Реквизиты.Вставить("Добавляемые", Новый Массив); - ПараметрыЗаполнения.Реквизиты.Вставить("Удаляемые", Новый Массив); - ПараметрыЗаполнения.Реквизиты.Вставить("Существующие", Новый Соответствие); - ОписаниеТиповТаблицаЗначений = Новый ОписаниеТипов("ТаблицаЗначений"); - ВсеРеквизиты = ПолучитьРеквизиты(); - Для Каждого Реквизит Из ВсеРеквизиты Цикл - РеквизитПолноеИмя = ПолноеИмяРеквизита(Реквизит); - Если ПостоянныеРеквизиты.НайтиПоЗначению(РеквизитПолноеИмя) = Неопределено Тогда - ПараметрыЗаполнения.Реквизиты.Существующие.Вставить(РеквизитПолноеИмя, Реквизит.ТипЗначения); - Подчиненные = ПолучитьРеквизиты(РеквизитПолноеИмя); - Если ОтчетыСервер.ОписанияТиповСовпадают(Реквизит.ТипЗначения, ОписаниеТиповТаблицаЗначений) Тогда - Для Каждого Подчиненный Из Подчиненные Цикл - ПодчиненныйПолноеИмя = ПолноеИмяРеквизита(Подчиненный); - ПараметрыЗаполнения.Реквизиты.Существующие.Вставить(ПодчиненныйПолноеИмя, Подчиненный.ТипЗначения); - КонецЦикла; - КонецЕсли; - КонецЕсли; - КонецЦикла; - - // Локальные переменные для установки значений и свойств после создания реквизитов. - ДобавленныеПоляВвода = Новый Структура; - ДобавленныеСпискиЗначений = Новый Массив; - ДобавленныеТаблицыСФлажками = Новый Массив; - ДобавленныеСтандартныеПериоды = Новый Массив; - - // Структура связей. - Связи = Информация.Связи; - - ИменаОсновныхРеквизитовФормы = Новый Соответствие; - ИменаЭлементовДляУстановкиСвязей = Новый Соответствие; - НастройкиСВидомСравненияРавно = Новый Соответствие; - - КомпоновщикНастроекКД = КомпоновщикНастроек; - ПользовательскиеНастройкиКД = КомпоновщикНастроекКД.ПользовательскиеНастройки; - НастройкиКД = КомпоновщикНастроекКД.Настройки; - - ДополнительныеНастройкиЭлементов = ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(ПользовательскиеНастройкиКД.ДополнительныеСвойства, "ЭлементыФормы"); - Если ДополнительныеНастройкиЭлементов = Неопределено Тогда - ДополнительныеНастройкиЭлементов = Новый Соответствие; - КонецЕсли; - - Режимы = РежимОтображенияЭлементаНастройкиКомпоновкиДанных; - - ГруппыВывода = Новый Структура; - ГруппыВывода.Вставить("БыстрыеОтборы", Новый Структура("Порядок, Размер", Новый Массив, 0)); - ГруппыВывода.Вставить("ОбычныеОтборы", Новый Структура("Порядок, Размер", Новый Массив, 0)); - ГруппыВывода.Вставить("ДополнительныеШапка", Новый Структура("Порядок, Размер", Новый Массив, 0)); - ГруппыВывода.Вставить("ДополнительныеПодвал", Новый Структура("Порядок, Размер", Новый Массив, 0)); - ГруппыВывода.Вставить("ДополнительныеЗакладки", Новый СписокЗначений); - ДополнительныеЗакладкиПоиск = Новый Соответствие; - - ОтчетОбъект = Неопределено; - - ЕстьЗагрузкаДанныхИзФайла = ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ЗагрузкаДанныхИзФайла"); - - Если РежимИзмененияУзлаВарианта Тогда - ВыводимыеНастройки = Новый Массив; - Иначе - ВыводимыеНастройки = Информация.ПользовательскиеНастройки.Скопировать(Новый Структура("ВыводРазрешен", Истина)); - ВыводимыеНастройки.Сортировать("ИндексВКоллекции Возр"); - КонецЕсли; - - ВыводимыеТипыНастроек = Новый Массив; - Если РасширенныйРежим <> 1 Тогда - ВыводимыеТипыНастроек.Добавить("ЭлементОтбора"); - ВыводимыеТипыНастроек.Добавить("ГруппаЭлементовОтбора"); - ВыводимыеТипыНастроек.Добавить("ЗначениеПараметраНастроек"); - КонецЕсли; - ВыводимыеТипыНастроек.Добавить("ЭлементУсловногоОформления"); - - Прочее = Новый Структура; - Прочее.Вставить("Связи", Связи); - Прочее.Вставить("ОтчетОбъект", Неопределено); - Прочее.Вставить("ПараметрыЗаполнения", ПараметрыЗаполнения); - Прочее.Вставить("ПутьККомпоновщику", "КомпоновщикНастроек"); - Прочее.Вставить("ЕстьЗагрузкаДанныхИзФайла", ЕстьЗагрузкаДанныхИзФайла); - Прочее.Вставить("ДополнительныеНастройкиЭлементов", ДополнительныеНастройкиЭлементов); - Прочее.Вставить("ИменаОсновныхРеквизитовФормы", ИменаОсновныхРеквизитовФормы); - Прочее.Вставить("ИменаЭлементовДляУстановкиСвязей", ИменаЭлементовДляУстановкиСвязей); - Прочее.Вставить("СоответствиеИменОбъектовМетаданных", СоответствиеИменОбъектовМетаданных); - Прочее.Вставить("ДобавленныеПоляВвода", ДобавленныеПоляВвода); - Прочее.Вставить("ДобавленныеСтандартныеПериоды", ДобавленныеСтандартныеПериоды); - Прочее.Вставить("ДобавленныеСпискиЗначений", ДобавленныеСпискиЗначений); - - Для Каждого СвойстваНастройки Из ВыводимыеНастройки Цикл - - Если (СвойстваНастройки.Тип = "ВыбранныеПоля" - Или СвойстваНастройки.Тип = "Отбор" - Или СвойстваНастройки.Тип = "Порядок") - И СвойстваНастройки.СтрокаДерева = Информация.ДеревоВариантаКорневаяСтрока Тогда - // Регистрация в информации о пользовательских настройках. - ТаблицаИмя = СвойстваНастройки.Тип; - Если ТаблицаИмя = "Порядок" Тогда - ТаблицаИмя = "Сортировка"; - КонецЕсли; - СоответствиеПользовательскихНастроек.Вставить(ТаблицаИмя, СвойстваНастройки.ИдентификаторКД); - Продолжить; // Вывод не требуется. - КонецЕсли; - - Если ВыводимыеТипыНастроек.Найти(СвойстваНастройки.Тип) = Неопределено Тогда - Продолжить; - КонецЕсли; - - СоответствиеПользовательскихНастроек.Вставить(СвойстваНастройки.ИдентификаторЭлемента, СвойстваНастройки.ИдентификаторКД); - - Если СвойстваНастройки.НастройкаВарианта <> Неопределено Тогда - ПоискНастройкиВарианта = Новый Структура; - ПоискНастройкиВарианта.Вставить("ИдентификаторУзлаКД", СвойстваНастройки.СтрокаДерева.ИдентификаторКД); - ПоискНастройкиВарианта.Вставить("ИмяКоллекции", СвойстваНастройки.НастройкаВарианта.ИмяКоллекции); - ПоискНастройкиВарианта.Вставить("ИдентификаторЭлементаКД", СвойстваНастройки.НастройкаВарианта.ИдентификаторКД); - СоответствиеНастроекВарианта.Вставить(СвойстваНастройки.ИдентификаторЭлемента, ПоискНастройкиВарианта); - КонецЕсли; - - // Определение группы для вывода. - Если СвойстваНастройки.Тип = "ЭлементУсловногоОформления" Тогда - // Определение раздела. - КорневаяСтрокаДереваВарианта = Неопределено; - ТекущаяСтрока = СвойстваНастройки.СтрокаДерева; - Пока ТекущаяСтрока <> Неопределено Цикл - Если ЗначениеЗаполнено(ТекущаяСтрока.Заголовок) И ТекущаяСтрока.УзелКД <> НастройкиКД Тогда - КорневаяСтрокаДереваВарианта = ТекущаяСтрока; - КонецЕсли; - ТекущаяСтрока = ТекущаяСтрока.Родитель; - КонецЦикла; - Если КорневаяСтрокаДереваВарианта = Неопределено Тогда // Раздел не найден. Вывод в основную часть. - ГруппаВывода = ГруппыВывода.ДополнительныеПодвал; - Иначе // Раздел найден. Вывод в группу на закладке "Дополнительно": - ЗаголовокЗакладки = КорневаяСтрокаДереваВарианта.Заголовок; - ГруппаВывода = ДополнительныеЗакладкиПоиск.Получить(ЗаголовокЗакладки); - Если ГруппаВывода = Неопределено Тогда - ГруппаВывода = Новый Структура("Порядок, Размер", Новый Массив, 0); - ГруппаВывода.Вставить("Заголовок", ЗаголовокЗакладки); - ГруппаВывода.Вставить("ИмяФлажка", ""); - ГруппыВывода.ДополнительныеЗакладки.Добавить(ГруппаВывода, ЗаголовокЗакладки); - ДополнительныеЗакладкиПоиск.Вставить(ЗаголовокЗакладки, ГруппаВывода); - КонецЕсли; - КонецЕсли; - Иначе - Если СвойстваНастройки.Быстрая Тогда - ГруппаВывода = ГруппыВывода.БыстрыеОтборы; - Иначе - ГруппаВывода = ГруппыВывода.ОбычныеОтборы; - КонецЕсли; - КонецЕсли; - - //////////////////////////////////////////////////////////////////////////////// - // Генератор - - ОтчетыСервер.ВывестиЭлементыНастройки(ЭтотОбъект, Элементы, СвойстваНастройки, ГруппаВывода, Прочее); - - КонецЦикла; - - ОтчетыСервер.ВывестиПоПорядку(ЭтотОбъект, ГруппыВывода.БыстрыеОтборы, Элементы.БыстрыеОтборы, 2, Ложь); - ОтчетыСервер.ВывестиПоПорядку(ЭтотОбъект, ГруппыВывода.ОбычныеОтборы, Элементы.ОбычныеОтборы, 2, Ложь); - ОтчетыСервер.ВывестиПоПорядку(ЭтотОбъект, ГруппыВывода.ДополнительныеШапка, Элементы.СтраницаДополнительноШапка, 1); - ОтчетыСервер.ВывестиПоПорядку(ЭтотОбъект, ГруппыВывода.ДополнительныеПодвал, Элементы.СтраницаДополнительноПодвал, 1); - - НомерДополнительнойГруппы = 0; - Для Каждого ОписаниеЗакладки Из ГруппыВывода.ДополнительныеЗакладки Цикл - НомерДополнительнойГруппы = НомерДополнительнойГруппы + 1; - ГруппаВывода = ОписаниеЗакладки.Значение; - - ГруппаИмя = "ГруппаНастроек_" + Строка(НомерДополнительнойГруппы); - КолонкиИмя = "ГруппаНастроек_Колонки_" + Строка(НомерДополнительнойГруппы); - ОтступИмя = "ГруппаНастроек_Отступ_" + Строка(НомерДополнительнойГруппы); - - ТекущаяГруппа = Элементы.Добавить(ГруппаИмя, Тип("ГруппаФормы"), Элементы.СтраницаДополнительноГруппировки); - ТекущаяГруппа.Вид = ВидГруппыФормы.ОбычнаяГруппа; - ТекущаяГруппа.Группировка = ГруппировкаПодчиненныхЭлементовФормы.Вертикальная; - ТекущаяГруппа.Заголовок = ГруппаВывода.Заголовок; - ТекущаяГруппа.Отображение = ОтображениеОбычнойГруппы.Нет; - - Если ГруппаВывода.ИмяФлажка = "" Тогда - ТекущаяГруппа.ОтображатьЗаголовок = Истина; - Иначе - ТекущаяГруппа.ОтображатьЗаголовок = Ложь; - Флажок = Элементы[ГруппаВывода.ИмяФлажка]; - Флажок.Заголовок = ГруппаВывода.Заголовок; - Элементы.Переместить(Флажок, ТекущаяГруппа); - КонецЕсли; - - Если ГруппаВывода.Размер > 0 Тогда - Колонки = Элементы.Добавить(КолонкиИмя, Тип("ГруппаФормы"), ТекущаяГруппа); - Колонки.Вид = ВидГруппыФормы.ОбычнаяГруппа; - Колонки.Группировка = ГруппировкаПодчиненныхЭлементовФормы.Горизонтальная; - Колонки.Отображение = ОтображениеОбычнойГруппы.Нет; - Колонки.ОтображатьЗаголовок = Ложь; - - Отступ = Элементы.Добавить(ОтступИмя, Тип("ДекорацияФормы"), Колонки); - Отступ.Вид = ВидДекорацииФормы.Надпись; - Отступ.Заголовок = " "; - - ОтчетыСервер.ВывестиПоПорядку(ЭтотОбъект, ГруппаВывода, Колонки, 1); - КонецЕсли; - КонецЦикла; - - // Удаление старых и добавление новых реквизитов. - Для Каждого КлючИЗначение Из ПараметрыЗаполнения.Реквизиты.Существующие Цикл - ПараметрыЗаполнения.Реквизиты.Удаляемые.Добавить(КлючИЗначение.Ключ); - КонецЦикла; - ИзменитьРеквизиты(ПараметрыЗаполнения.Реквизиты.Добавляемые, ПараметрыЗаполнения.Реквизиты.Удаляемые); - - // Поля ввода (установка значений и связей). - Для Каждого КлючИЗначение Из ДобавленныеПоляВвода Цикл - ИмяРеквизита = КлючИЗначение.Ключ; - ЭтотОбъект[ИмяРеквизита] = КлючИЗначение.Значение; - Элементы[ИмяРеквизита].ПутьКДанным = ИмяРеквизита; - КонецЦикла; - - // Стандартные периоды (установка значений и связей). - Для Каждого СвойстваНастройки Из ДобавленныеСтандартныеПериоды Цикл - Дополнительно = СвойстваНастройки.Дополнительно; - ЭтотОбъект[Дополнительно.ЗначениеИмя] = СвойстваНастройки.Значение; - ЭтотОбъект[Дополнительно.ВидПериодаИмя] = Дополнительно.ВидПериода; - ЭтотОбъект[Дополнительно.ПредставлениеИмя] = Дополнительно.Представление; - Элементы[Дополнительно.ВидПериодаИмя].ПутьКДанным = Дополнительно.ВидПериодаИмя; - Элементы[Дополнительно.ПредставлениеИмя].ПутьКДанным = Дополнительно.ПредставлениеИмя; - Элементы[Дополнительно.ПериодНачалоИмя].ПутьКДанным = Дополнительно.ЗначениеИмя + ".ДатаНачала"; - Элементы[Дополнительно.ПериодОкончаниеИмя].ПутьКДанным = Дополнительно.ЗначениеИмя + ".ДатаОкончания"; - КонецЦикла; - - // Поля подбора (установка значений и связей). - Для Каждого СвойстваНастройки Из ДобавленныеСпискиЗначений Цикл - Дополнительно = СвойстваНастройки.Дополнительно; - ТаблицаИмя = Дополнительно.ТаблицаИмя; - ТаблицаФормы = Элементы[ТаблицаИмя]; - КолонкаИспользование = Элементы[Дополнительно.ИмяКолонкиИспользование]; - КолонкаЗначение = Элементы[Дополнительно.ИмяКолонкиЗначение]; - СписокСФлажками = Новый СписокЗначений; - - ТипНеопределено = Тип("Неопределено"); - ОписаниеТиповНеопределено = Новый ОписаниеТипов("Неопределено"); - Количество = СвойстваНастройки.ОтмеченныеЗначения.Количество(); - Для Номер = 1 По Количество Цикл - ОбратныйИндекс = Количество - Номер; - ЭлементСписка = СвойстваНастройки.ОтмеченныеЗначения[ОбратныйИндекс]; - Значение = ЭлементСписка.Значение; - Если Не ЗначениеЗаполнено(ЭлементСписка.Представление) - И (Значение = Неопределено - Или Значение = ТипНеопределено - Или Значение = ОписаниеТиповНеопределено - Или Не ЗначениеЗаполнено(Значение)) Тогда - СвойстваНастройки.ОтмеченныеЗначения.Удалить(ОбратныйИндекс); - Продолжить; // Запрет пустых значений. - КонецЕсли; - Если ТипЗнч(Значение) = Тип("Тип") Тогда - МассивТипов = Новый Массив; - МассивТипов.Добавить(Значение); - Значение = Новый ОписаниеТипов(МассивТипов); - КонецЕсли; - Если СвойстваНастройки.ОграничиватьВыборУказаннымиЗначениями - И СвойстваНастройки.ЗначенияДляВыбора.НайтиПоЗначению(Значение) = Неопределено Тогда - СвойстваНастройки.ОтмеченныеЗначения.Удалить(ОбратныйИндекс); - Продолжить; // Выбранное значение не входит в список доступных для выбора. - КонецЕсли; - ОтчетыКлиентСервер.ДобавитьУникальноеЗначениеВСписок(СписокСФлажками, Значение, ЭлементСписка.Представление, Истина); - КонецЦикла; - - Для Каждого ЭлементСписка Из СвойстваНастройки.ЗначенияДляВыбора Цикл - ОтчетыКлиентСервер.ДобавитьУникальноеЗначениеВСписок(СписокСФлажками, ЭлементСписка.Значение, ЭлементСписка.Представление, Ложь); - КонецЦикла; - - СписокСФлажками.СортироватьПоПредставлению(НаправлениеСортировки.Возр); - - ЭтотОбъект[ТаблицаИмя] = СписокСФлажками; - ЭтотОбъект[ТаблицаИмя].ТипЗначения = СвойстваНастройки.ОписаниеТипов; - ТаблицаФормы.ПутьКДанным = ТаблицаИмя; - КолонкаЗначение.ПутьКДанным = ТаблицаИмя + ".Значение"; - КолонкаИспользование.ПутьКДанным = ТаблицаИмя + ".Пометка"; - - // Некоторые обработчики событий можно подключить только после установки связи элементов с данными. - ТаблицаФормы.УстановитьДействие("ПередНачаломИзменения", "Подключаемый_СписокСПодбором_ПередНачаломИзменения"); - ТаблицаФормы.УстановитьДействие("ПередОкончаниемРедактирования", "Подключаемый_СписокСПодбором_ПередОкончаниемРедактирования"); - ТаблицаФормы.УстановитьДействие("ПриИзменении", "Подключаемый_СписокСПодбором_ПриИзменении"); - Если СвойстваНастройки.ОграничиватьВыборУказаннымиЗначениями Тогда - ТаблицаФормы.УстановитьДействие("ПередНачаломДобавления", "Подключаемый_ФиксированныйСписок_ПередНачаломДобавления"); - ТаблицаФормы.УстановитьДействие("ПередУдалением", "Подключаемый_ФиксированныйСписок_ПередУдалением"); - Иначе - ТаблицаФормы.УстановитьДействие("ОбработкаВыбора", "Подключаемый_СписокСПодбором_ОбработкаВыбора"); - КолонкаЗначение.УстановитьДействие("АвтоПодбор", "Подключаемый_СписокСПодбором_Значение_АвтоПодбор"); - КонецЕсли; - КолонкаИспользование.УстановитьДействие("ПриИзменении", "Подключаемый_СписокСПодбором_Использование_ПриИзменении"); - КонецЦикла; - - // Установка значений и связей таблиц порядка с флажками. - Для Каждого СвойстваНастройки Из ДобавленныеТаблицыСФлажками Цикл - Дополнительно = СвойстваНастройки.Дополнительно; - ПользовательскаяНастройка = СвойстваНастройки.ПользовательскаяНастройкаКД; - Таблица = ЭтотОбъект[Дополнительно.ТаблицаИмя]; - Таблица.Очистить(); - - Если СвойстваНастройки.Тип = "Порядок" Тогда - - Для Каждого ЭлементПорядка Из ПользовательскаяНастройка.Элементы Цикл - Если ТипЗнч(ЭлементПорядка) = Тип("ЭлементПорядкаКомпоновкиДанных") Тогда - ДоступноеПоле = ОтчетыКлиентСервер.ПолучитьДоступноеПоле(НастройкиКД.ДоступныеПоляПорядка, ЭлементПорядка.Поле); - Если ДоступноеПоле = Неопределено Тогда - Продолжить; - КонецЕсли; - СтрокаПорядка = Таблица.Добавить(); - СтрокаПорядка.Использование = ЭлементПорядка.Использование; - СтрокаПорядка.ИдентификаторКД = ПользовательскаяНастройка.ПолучитьИдентификаторПоОбъекту(ЭлементПорядка); - СтрокаПорядка.Представление = ДоступноеПоле.Заголовок; - СтрокаПорядка.Направление = ЭлементПорядка.ТипУпорядочивания; - КонецЕсли; - КонецЦикла; - - ИначеЕсли СвойстваНастройки.Тип = "ВыбранныеПоля" Тогда - - ОтчетыКлиентСервер.ДобавитьЭлементыНастройки( - ЭтотОбъект, - Таблица, - ПользовательскаяНастройка, - ПользовательскаяНастройка, - Истина); - - ИначеЕсли СвойстваНастройки.Тип = "СтруктураНастроек" Тогда - - Для Каждого ЭлементСтруктуры Из ПользовательскаяНастройка.Структура Цикл - Представление = ""; - Если ТипЗнч(ЭлементСтруктуры) = Тип("ГруппировкаКомпоновкиДанных") - ИЛИ ТипЗнч(ЭлементСтруктуры) = Тип("ГруппировкаТаблицыКомпоновкиДанных") - ИЛИ ТипЗнч(ЭлементСтруктуры) = Тип("ГруппировкаДиаграммыКомпоновкиДанных") Тогда - Для Каждого ПолеГруппировки Из ЭлементСтруктуры.ПоляГруппировки.Элементы Цикл - Если НЕ ПолеГруппировки.Использование Тогда - Продолжить; - КонецЕсли; - ДоступноеПоле = ОтчетыКлиентСервер.ПолучитьДоступноеПоле(НастройкиКД.ДоступныеПоляГруппировок, ПолеГруппировки.Поле); - Если ДоступноеПоле = Неопределено Тогда - Представление = Строка(ПолеГруппировки.Поле); - ИначеЕсли ДоступноеПоле.Родитель <> Неопределено Тогда - Представление = Представление + СтрЗаменить(СтрЗаменить(ДоступноеПоле.Заголовок, ДоступноеПоле.Родитель.Заголовок, ""), ".", "")+ ", "; - Иначе - Представление = Представление + ДоступноеПоле.Заголовок + ", "; - КонецЕсли; - КонецЦикла; - Представление = Лев(Представление, СтрДлина(Представление) - 2); - Иначе - Представление = НСтр("ru = 'Таблица / диаграмма'"); - КонецЕсли; - СтрокиГруппировки = Таблица.Добавить(); - СтрокиГруппировки.Идентификатор = ЭлементСтруктуры.ИдентификаторПользовательскойНастройки; - СтрокиГруппировки.Использование = ЭлементСтруктуры.Использование; - СтрокиГруппировки.Представление = Представление; - КонецЦикла; - КонецЕсли; - - Если Таблица.Количество() = 0 Тогда - Элементы[СвойстваНастройки.ИмяГруппы].Видимость = Ложь; - Иначе - Элементы[СвойстваНастройки.ТаблицаИмя].ПутьКДанным = СвойстваНастройки.ТаблицаИмя; - Элементы[СвойстваНастройки.ИмяКолонкиИспользование].ПутьКДанным = СвойстваНастройки.ТаблицаИмя + ".Использование"; - Элементы[СвойстваНастройки.ИмяКолонкиПредставление].ПутьКДанным = СвойстваНастройки.ТаблицаИмя + ".Представление"; - Если СвойстваНастройки.Тип = "Порядок" Тогда - Элементы[СвойстваНастройки.ИмяКолонкиПорядок].ПутьКДанным = СвойстваНастройки.ТаблицаИмя + ".Направление"; - Элементы[СвойстваНастройки.ТаблицаИмя].УстановитьДействие("Выбор", "Подключаемый_ТаблицаПорядка_Выбор"); - КонецЕсли; - КонецЕсли; - КонецЦикла; - - // Сохранение соответствий для быстрого поиска в данные формы. - БыстрыйПоискПользовательскихНастроек = Новый ФиксированноеСоответствие(СоответствиеПользовательскихНастроек); - БыстрыйПоискИменОбъектовМетаданных = Новый ФиксированноеСоответствие(СоответствиеИменОбъектовМетаданных); - БыстрыйПоискОтключаемыхСвязей = Новый ФиксированноеСоответствие(СоответствиеОтключаемыхСвязей); - БыстрыйПоискНастроекВарианта = Новый ФиксированноеСоответствие(СоответствиеНастроекВарианта); - - ПользовательскиеНастройкиКД.ДополнительныеСвойства.Вставить("ЭлементыФормы", ДополнительныеНастройкиЭлементов); -КонецПроцедуры - -&НаСервере -Функция ПолноеИмяРеквизита(Реквизит) - Возврат ?(ПустаяСтрока(Реквизит.Путь), "", Реквизит.Путь + ".") + Реквизит.Имя; -КонецФункции - -&НаСервере -Процедура РасширенныеНастройкиЗагрузитьЗначения(ПараметрыЗаполнения, Информация) - Если РежимИзмененияУзлаВарианта Тогда - Найденные = Информация.ДеревоВарианта.Строки.НайтиСтроки(Новый Структура("ИдентификаторКД", ИдентификаторТекущегоУзлаКД), Истина); - КорневаяСтрока = Найденные[0]; - Иначе - КорневаяСтрока = Информация.ДеревоВариантаКорневаяСтрока; - КонецЕсли; - Информация.Вставить("ТекущаяСтрокаДерева", КорневаяСтрока); - Информация.НастройкиВарианта.Колонки.Добавить("ИдентификаторВФорме"); - - Если Не РежимИзмененияУзлаВарианта И КорневаяСтрока.Тип <> "НастройкиВложенногоОбъекта" Тогда - СтрокиРодителя = СтруктураВарианта.ПолучитьЭлементы(); - СтрокиРодителя.Очистить(); - КорневаяСтрока.Заголовок = ""; - КорневаяСтрока.Представление = НСтр("ru = 'Отчет'"); - ЗарегистрироватьЭлементСтруктурыОтчета(КорневаяСтрока, СтрокиРодителя); - СтандартныеПодсистемыКлиентСервер.РазвернутьУзлыДерева(ПараметрыЗаполнения.Результат, "СтруктураВарианта", "*", Истина); - КонецЕсли; - - Если РежимИзмененияУзлаВарианта И ТипТекущегоУзлаКД <> "Диаграмма" Тогда - СоставГруппировки.ПолучитьЭлементы().Очистить(); - ЗарегистрироватьЭлементыСоставаГруппировки(); - Иначе - Элементы.СтраницаСоставГруппировки.Видимость = Ложь; - КонецЕсли; - - Если ТипТекущегоУзлаКД <> "Диаграмма" Тогда - Сортировка.ПолучитьЭлементы().Очистить(); - ЗарегистрироватьЭлементыСортировки(); - СтандартныеПодсистемыКлиентСервер.РазвернутьУзлыДерева(ПараметрыЗаполнения.Результат, "Сортировка", "*", Истина); - Иначе - Элементы.СтраницаСортировка.Видимость = Ложь; - КонецЕсли; - - ВыбранныеПоля.ПолучитьЭлементы().Очистить(); - ЗарегистрироватьЭлементыВыбранныхПолей(); - СтандартныеПодсистемыКлиентСервер.РазвернутьУзлыДерева(ПараметрыЗаполнения.Результат, "ВыбранныеПоля", "*", Истина); - - Если РасширенныйРежим = 1 И ТипТекущегоУзлаКД <> "Диаграмма" Тогда - Отборы.ПолучитьЭлементы().Очистить(); - ЗарегистрироватьПараметры(Информация); - ЗарегистрироватьЭлементыОтборов(Информация); - СтандартныеПодсистемыКлиентСервер.РазвернутьУзлыДерева(ПараметрыЗаполнения.Результат, "Отборы", "*", Истина); - Элементы.СтраницаОтборы.Видимость = Истина; - Иначе - Элементы.СтраницаОтборы.Видимость = Ложь; - КонецЕсли; - - Если РасширенныйРежим = 1 И Не РежимИзмененияУзлаВарианта Тогда - Найденные = Информация.ДеревоВарианта.Строки.НайтиСтроки(Новый Структура("Тип", "НастройкиВложенногоОбъекта"), Истина); - ЕстьВложенныеОтчеты = Найденные.Количество() > 0; - Элементы.ГруппаЕстьВложенныеОтчеты.Видимость = ЕстьВложенныеОтчеты; - Иначе - Элементы.ГруппаЕстьВложенныеОтчеты.Видимость = Ложь; - КонецЕсли; - - Если Не РежимИзмененияУзлаВарианта - И Элементы.СтраницаОтборы.Видимость - И Не Элементы.ГруппаЕстьВложенныеОтчеты.Видимость Тогда - Найденные = Информация.НастройкиВарианта.Строки.НайтиСтроки(Новый Структура("Тип, Глобальная", "ЭлементОтбора", Ложь), Истина); - ЕстьВложенныеОтборы = Найденные.Количество() > 0; - Элементы.ГруппаЕстьВложенныеОтборы.Видимость = ЕстьВложенныеОтборы; - Иначе - Элементы.ГруппаЕстьВложенныеОтборы.Видимость = Ложь; - КонецЕсли; - - Если ТипТекущегоУзлаКД = "Диаграмма" Тогда - Элементы.ТекущийУзелКДТипДиаграммы.Видимость = Истина; - Элементы.ТекущийУзелКДТипДиаграммы.ОграничениеТипа = Новый ОписаниеТипов("ТипДиаграммы"); - - КорневойУзелКД = КомпоновщикНастроек.Настройки.ПолучитьОбъектПоИдентификатору(ИдентификаторТекущегоУзлаКД); - Если ТипЗнч(КорневойУзелКД) = Тип("НастройкиВложенногоОбъектаКомпоновкиДанных") Тогда - КорневойУзелКД = КорневойУзелКД.Настройки; - КонецЕсли; - ПараметрКД = КорневойУзелКД.ПараметрыВывода.НайтиЗначениеПараметра(Новый ПараметрКомпоновкиДанных("ТипДиаграммы")); - Если ПараметрКД = Неопределено Тогда - Элементы.ТекущийУзелКДТипДиаграммы.Видимость = Ложь; - Иначе - ТекущийУзелКДТипДиаграммы = ПараметрКД.Значение; - КонецЕсли; - Иначе - Элементы.ТекущийУзелКДТипДиаграммы.Видимость = Ложь; - КонецЕсли; - -КонецПроцедуры - -&НаСервере -Процедура ЗарегистрироватьЭлементСтруктурыОтчета(СтрокаДерева, СтрокиРодителя) - СтрокаФормы = СтрокиРодителя.Добавить(); - ЗаполнитьЗначенияСвойств(СтрокаФормы, СтрокаДерева, "ИдентификаторКД, Представление, Заголовок, Тип, Подтип"); - - СтрокаФормы.ФлажокДоступен = Истина; - Если (РасширенныйРежим = 0 И СтрокаДерева.ПользовательскаяНастройка = Неопределено) - Или СтрокаДерева.Тип = "КоллекцияЭлементовСтруктурыДиаграммы" - Или СтрокаДерева.Тип = "КоллекцияЭлементовСтруктурыТаблицы" - Или СтрокаДерева.Тип = "Настройки" Тогда - СтрокаФормы.ФлажокДоступен = Ложь; - КонецЕсли; - - Если РасширенныйРежим = 0 И ЗначениеЗаполнено(СтрокаФормы.Заголовок) Тогда - СтрокаФормы.Представление = СтрокаФормы.Заголовок; - СтрокаФормы.Подсвечивать = Истина; - КонецЕсли; - - СтрокаФормы.ИндексКартинки = -1; - Если СтрокаДерева.Тип = "Группировка" - Или СтрокаДерева.Тип = "ГруппировкаТаблицы" - Или СтрокаДерева.Тип = "ГруппировкаДиаграммы" Тогда - СтрокаФормы.ИндексКартинки = 1; - ИначеЕсли СтрокаДерева.Тип = "Таблица" Тогда - СтрокаФормы.ИндексКартинки = 2; - ИначеЕсли СтрокаДерева.Тип = "Диаграмма" Тогда - СтрокаФормы.ИндексКартинки = 3; - ИначеЕсли СтрокаДерева.Тип = "НастройкиВложенногоОбъекта" Тогда - СтрокаФормы.ИндексКартинки = 4; - КонецЕсли; - - Если СтрокаФормы.ФлажокДоступен Тогда - Если РасширенныйРежим = 0 Тогда - СтрокаФормы.ИдентификаторКД = СтрокаДерева.ПользовательскаяНастройка.ИдентификаторКД; - СтрокаФормы.Использование = СтрокаДерева.ПользовательскаяНастройка.ПользовательскаяНастройкаКД.Использование; - Иначе - СтрокаФормы.Использование = СтрокаДерева.УзелКД.Использование; - КонецЕсли; - КонецЕсли; - - ПодчиненныеСтрокиРодителя = СтрокаФормы.ПолучитьЭлементы(); - - Для Каждого ПодчиненнаяСтрокаДерева Из СтрокаДерева.Строки Цикл - ЗарегистрироватьЭлементСтруктурыОтчета(ПодчиненнаяСтрокаДерева, ПодчиненныеСтрокиРодителя); - КонецЦикла; -КонецПроцедуры - -&НаСервере -Процедура ЗарегистрироватьЭлементыСортировки(УзелКД = Неопределено, НаборСтрокКД = Неопределено, НаборСтрок = Неопределено) - Если УзелКД = Неопределено Тогда - УзелКД = ТаблицыПолейНайтиУзел(ЭтотОбъект, "Сортировка", Неопределено); - Если УзелКД = Неопределено Тогда - Элементы.СтраницаСортировка.Видимость = Ложь; - Возврат; - КонецЕсли; - КонецЕсли; - Если НаборСтрокКД = Неопределено Тогда - НаборСтрокКД = УзелКД.Элементы; - КонецЕсли; - Если НаборСтрок = Неопределено Тогда - НаборСтрок = Сортировка.ПолучитьЭлементы(); - КонецЕсли; - Элементы.СтраницаСортировка.Видимость = Истина; - ДоступныеПоля = УзелКД.ДоступныеПоляПорядка; - Для Каждого ЭлементКД Из НаборСтрокКД Цикл - Если ТипЗнч(ЭлементКД) = Тип("ЭлементПорядкаКомпоновкиДанных") Тогда - ДоступноеПоле = ДоступныеПоля.НайтиПоле(ЭлементКД.Поле); - Если ДоступноеПоле = Неопределено Тогда - Продолжить; - КонецЕсли; - СтрокаПорядка = НаборСтрок.Добавить(); - СтрокаПорядка.Использование = ЭлементКД.Использование; - СтрокаПорядка.ИдентификаторКД = УзелКД.ПолучитьИдентификаторПоОбъекту(ЭлементКД); - СтрокаПорядка.Представление = ДоступноеПоле.Заголовок; - СтрокаПорядка.Направление = ЭлементКД.ТипУпорядочивания; - КонецЕсли; - КонецЦикла; -КонецПроцедуры - -&НаСервере -Процедура ЗарегистрироватьЭлементыСоставаГруппировки(УзелКД = Неопределено, НаборСтрокКД = Неопределено, НаборСтрок = Неопределено) - Если УзелКД = Неопределено Тогда - УзелКД = ТаблицыПолейНайтиУзел(ЭтотОбъект, "СоставГруппировки", Неопределено); - Если УзелКД = Неопределено Тогда - Возврат; - КонецЕсли; - КонецЕсли; - Если НаборСтрокКД = Неопределено Тогда - НаборСтрокКД = УзелКД.Элементы; - КонецЕсли; - Если НаборСтрок = Неопределено Тогда - НаборСтрок = СоставГруппировки.ПолучитьЭлементы(); - КонецЕсли; - ДоступныеПоля = УзелКД.ДоступныеПоляПолейГруппировок; - Для Каждого ЭлементКД Из НаборСтрокКД Цикл - Если ТипЗнч(ЭлементКД) = Тип("ПолеГруппировкиКомпоновкиДанных") Тогда - ДоступноеПоле = ДоступныеПоля.НайтиПоле(ЭлементКД.Поле); - Если ДоступноеПоле = Неопределено Тогда - Продолжить; - КонецЕсли; - СтрокаТаблицы = НаборСтрок.Добавить(); - СтрокаТаблицы.Использование = ЭлементКД.Использование; - СтрокаТаблицы.ИдентификаторКД = УзелКД.ПолучитьИдентификаторПоОбъекту(ЭлементКД); - СтрокаТаблицы.Представление = ДоступноеПоле.Заголовок; - СтрокаТаблицы.ТипГруппировки = ЭлементКД.ТипГруппировки; - СтрокаТаблицы.ТипДополнения = ЭлементКД.ТипДополнения; - Если ДоступноеПоле.Ресурс Тогда - СтрокаТаблицы.Картинка = БиблиотекаКартинок.Ресурс; - ИначеЕсли ДоступноеПоле.Таблица Тогда - СтрокаТаблицы.Картинка = БиблиотекаКартинок.ВложеннаяТаблица; - ИначеЕсли ДоступноеПоле.Папка Тогда - СтрокаТаблицы.Картинка = БиблиотекаКартинок.Папка; - Иначе - СтрокаТаблицы.Картинка = БиблиотекаКартинок.Реквизит; - КонецЕсли; - ИнформацияОТипах = ОтчетыКлиентСервер.АнализТипов(ДоступноеПоле.ТипЗначения, Ложь); - Если ИнформацияОТипах.СодержитТипПериод Или ИнформацияОТипах.СодержитТипДата Тогда - СтрокаТаблицы.ПоказыватьТипДополнения = Истина; - КонецЕсли; - КонецЕсли; - КонецЦикла; -КонецПроцедуры - -&НаСервере -Процедура ЗарегистрироватьЭлементыВыбранныхПолей(УзелКД = Неопределено, НаборСтрокКД = Неопределено, НаборСтрок = Неопределено, ДоступныеПоля = Неопределено) - Если УзелКД = Неопределено Тогда - УзелКД = ТаблицыПолейНайтиУзел(ЭтотОбъект, "ВыбранныеПоля", Неопределено); - Если УзелКД = Неопределено Тогда - Элементы.СтраницаВыбранныеПоля.Видимость = Ложь; - Возврат; - КонецЕсли; - КонецЕсли; - Элементы.СтраницаВыбранныеПоля.Видимость = Истина; - Если НаборСтрокКД = Неопределено Тогда - НаборСтрокКД = УзелКД.Элементы; - КонецЕсли; - Если НаборСтрок = Неопределено Тогда - СтрокаРаздел = ВыбранныеПоля.ПолучитьЭлементы().Добавить(); - СтрокаРаздел.ЭтоРаздел = Истина; - СтрокаРаздел.Представление = НСтр("ru = 'Поля'"); - СтрокаРаздел.ИндексКартинки = 14; - СтрокаРаздел.ИдентификаторКД = "ВыбранныеПоля"; - НаборСтрок = СтрокаРаздел.ПолучитьЭлементы(); - КонецЕсли; - Если ДоступныеПоля = Неопределено Тогда - ДоступныеПоля = УзелКД.ДоступныеПоляВыбора; - КонецЕсли; - - Для Каждого ЭлементКД Из НаборСтрокКД Цикл - Если ТипЗнч(ЭлементКД) = Тип("АвтоВыбранноеПолеКомпоновкиДанных") Тогда - Продолжить; - КонецЕсли; - Если ТипЗнч(ЭлементКД) = Тип("ВыбранноеПолеКомпоновкиДанных") Тогда - ЭтоГруппа = Ложь; - ИначеЕсли ТипЗнч(ЭлементКД) = Тип("ГруппаВыбранныхПолейКомпоновкиДанных") Тогда - ЭтоГруппа = Истина; - Иначе - Продолжить; - КонецЕсли; - Представление = ЭлементКД.Заголовок; - Если ЗначениеЗаполнено(ЭлементКД.Поле) Тогда - ДоступноеПоле = ДоступныеПоля.НайтиПоле(ЭлементКД.Поле); - Иначе - ДоступноеПоле = Неопределено; - КонецЕсли; - Если ДоступноеПоле = Неопределено Тогда - Если Не ЭтоГруппа Тогда - Продолжить; - КонецЕсли; - ИначеЕсли Представление = "" Тогда - Представление = ДоступноеПоле.Заголовок; - КонецЕсли; - Если ЭтоГруппа И ЭлементКД.Расположение <> РасположениеПоляКомпоновкиДанных.Авто Тогда - Представление = Представление + " (" + Строка(ЭлементКД.Расположение) + ")"; - КонецЕсли; - - СтрокаФормы = НаборСтрок.Добавить(); - ЗаполнитьЗначенияСвойств(СтрокаФормы, ЭлементКД); - СтрокаФормы.Представление = Представление; - СтрокаФормы.ИдентификаторКД = УзелКД.ПолучитьИдентификаторПоОбъекту(ЭлементКД); - СтрокаФормы.ЭтоГруппа = ЭтоГруппа; - Если ЭтоГруппа Тогда - СтрокаФормы.ИндексКартинки = 1; - ЗарегистрироватьЭлементыВыбранныхПолей(УзелКД, ЭлементКД.Элементы, СтрокаФормы.ПолучитьЭлементы(), ДоступныеПоля); - Иначе - СтрокаФормы.ИндексКартинки = 4; - КонецЕсли; - КонецЦикла; -КонецПроцедуры - -&НаСервере -Процедура ЗарегистрироватьПараметры(Информация) - Если РежимИзмененияУзлаВарианта Тогда - Возврат; - КонецЕсли; - - УсловияПоиска = Новый Структура("СтрокаДерева, ИмяКоллекции", Информация.ТекущаяСтрокаДерева, "ПараметрыДанных"); - Найденные = Информация.НастройкиВарианта.Строки.НайтиСтроки(УсловияПоиска, Ложь); - Если Найденные.Количество() = 0 Тогда - Возврат; - КонецЕсли; - НаборСтрокВарианта = Найденные[0].Строки; - - СтрокаРаздел = Отборы.ПолучитьЭлементы().Добавить(); - СтрокаРаздел.ЭтоРаздел = Истина; - СтрокаРаздел.Представление = НСтр("ru = 'Параметры'"); - СтрокаРаздел.ИндексКартинки = 2; - СтрокаРаздел.ИдентификаторКД = "ПараметрыДанных"; - НаборСтрок = СтрокаРаздел.ПолучитьЭлементы(); - - Для Каждого НастройкаВарианта Из НаборСтрокВарианта Цикл - Если Не НастройкаВарианта.ВыводРазрешен Тогда - Продолжить; - КонецЕсли; - - ДоступнаяНастройкаКД = НастройкаВарианта.ДоступнаяНастройкаКД; - ЭлементКД = НастройкаВарианта.ЭлементКД; - - Если ЗначениеЗаполнено(НастройкаВарианта.ДоступнаяНастройкаКД.Заголовок) Тогда - Представление = НастройкаВарианта.ДоступнаяНастройкаКД.Заголовок; - Иначе - Представление = Строка(ЭлементКД.Параметр); - КонецЕсли; - - СтрокаТаблицы = НаборСтрок.Добавить(); - СтрокаТаблицы.Использование = ЭлементКД.Использование; - СтрокаТаблицы.Значение = НастройкаВарианта.Значение; - СтрокаТаблицы.ИдентификаторКД = НастройкаВарианта.ИдентификаторКД; - СтрокаТаблицы.Представление = Представление; - СтрокаТаблицы.ЭтоПараметр = Истина; - СтрокаТаблицы.ИндексКартинки = -1; - СтрокаТаблицы.ТипЗначения = НастройкаВарианта.ДоступнаяНастройкаКД.ТипЗначения; - СтрокаТаблицы.ВводСписком = НастройкаВарианта.ВводСписком; - СтрокаТаблицы.ВыводитьФлажок = НастройкаВарианта.ВыводитьФлажок; - СтрокаТаблицы.ВыборГруппИЭлементов = НастройкаВарианта.ВыборГруппИЭлементов; - - Если НастройкаВарианта.ОграничиватьВыборУказаннымиЗначениями - И ТипЗнч(НастройкаВарианта.ЗначенияДляВыбора) = Тип("СписокЗначений") Тогда - Если СтрокаТаблицы.ВводСписком - И ТипЗнч(СтрокаТаблицы.Значение) = Тип("СписокЗначений") Тогда - Для Каждого ЭлементСписка Из СтрокаТаблицы.Значение Цикл - ЭлементДляВыбора = НастройкаВарианта.ЗначенияДляВыбора.НайтиПоЗначению(ЭлементСписка.Значение); - Если ЭлементДляВыбора <> Неопределено Тогда - ЭлементСписка.Представление = ЭлементДляВыбора.Представление; - КонецЕсли; - КонецЦикла; - Иначе - СтрокаТаблицы.ВыводитьПредставлениеЗначения = Истина; - ЭлементДляВыбора = НастройкаВарианта.ЗначенияДляВыбора.НайтиПоЗначению(СтрокаТаблицы.Значение); - Если ЭлементДляВыбора <> Неопределено Тогда - СтрокаТаблицы.ПредставлениеЗначения = ЭлементДляВыбора.Представление; - КонецЕсли; - КонецЕсли; - КонецЕсли; - - НастройкаВарианта.ИдентификаторВФорме = СтрокаТаблицы.ПолучитьИдентификатор(); - - Если ТипЗнч(СтрокаТаблицы.Значение) = Тип("СтандартныйПериод") Тогда - СтрокаТаблицы.Условие = ОтчетыКлиентСервер.ПолучитьВидСтандартногоПериода(СтрокаТаблицы.Значение); - СтрокаТаблицы.ТипУсловия = Новый ОписаниеТипов("ПеречислениеСсылка.ДоступныеПериодыОтчета"); - Иначе - СтрокаТаблицы.ТипУсловия = Новый ОписаниеТипов("Неопределено"); - КонецЕсли; - - СтрокаТаблицы.Заголовок = Представление; - Если ЗначениеЗаполнено(ЭлементКД.ИдентификаторПользовательскойНастройки) Тогда - Если ЗначениеЗаполнено(ЭлементКД.ПредставлениеПользовательскойНастройки) Тогда - СтрокаТаблицы.Заголовок = ЭлементКД.ПредставлениеПользовательскойНастройки; - КонецЕсли; - Если ЭлементКД.РежимОтображения = РежимОтображенияЭлементаНастройкиКомпоновкиДанных.БыстрыйДоступ Тогда - СтрокаТаблицы.ИндексКартинкиДоступа = 2; - ИначеЕсли ЭлементКД.РежимОтображения = РежимОтображенияЭлементаНастройкиКомпоновкиДанных.Обычный Тогда - СтрокаТаблицы.ИндексКартинкиДоступа = 4; - Иначе - СтрокаТаблицы.ИндексКартинкиДоступа = 5; - КонецЕсли; - Иначе - СтрокаТаблицы.ИндексКартинкиДоступа = 5; - КонецЕсли; - - Дополнительно = Новый Структура("ОписаниеТипов, ОграничиватьВыборУказаннымиЗначениями, - |ПараметрыВыбора, ЗначенияДляВыбора"); - ЗаполнитьЗначенияСвойств(Дополнительно, НастройкаВарианта); - СтрокаТаблицы.Дополнительно = Дополнительно; - - КонецЦикла; -КонецПроцедуры - -&НаСервере -Процедура ЗарегистрироватьЭлементыОтборов(Информация, НаборСтрокВарианта = Неопределено, НаборСтрокФормы = Неопределено) - Если НаборСтрокВарианта = Неопределено Тогда - УсловияПоиска = Новый Структура("СтрокаДерева, ИмяКоллекции", Информация.ТекущаяСтрокаДерева, "Отбор"); - Найденные = Информация.НастройкиВарианта.Строки.НайтиСтроки(УсловияПоиска, Ложь); - Если Найденные.Количество() = 0 Тогда - Возврат; - КонецЕсли; - НаборСтрокВарианта = Найденные[0].Строки; - КонецЕсли; - Если НаборСтрокФормы = Неопределено Тогда - НаборСтрокФормы = Отборы.ПолучитьЭлементы(); - Если Не РежимИзмененияУзлаВарианта Тогда - СтрокаРаздел = НаборСтрокФормы.Добавить(); - СтрокаРаздел.ЭтоРаздел = Истина; - СтрокаРаздел.Представление = НСтр("ru = 'Отборы'"); - СтрокаРаздел.ИндексКартинки = 3; - СтрокаРаздел.ИдентификаторКД = "Отборы"; - НаборСтрокФормы = СтрокаРаздел.ПолучитьЭлементы(); - КонецЕсли; - КонецЕсли; - Для Каждого НастройкаВарианта Из НаборСтрокВарианта Цикл - Если НастройкаВарианта.Тип = "ГруппаЭлементовОтбора" Тогда - ЭтоГруппа = Истина; - Представление = Строка(НастройкаВарианта.ЭлементКД.ТипГруппы); - ИначеЕсли НастройкаВарианта.Тип = "ЭлементОтбора" Тогда - // БыстрыйВыбор, ВыборГруппИЭлементов, ДоступныеВидыСравнения, ДоступныеЗначения, Маска, Папка, - // Поле, Ресурс, СвязьПоТипу, Таблица, ФормаВыбора, ФорматРедактирования, Элементы, - // ПолучитьПараметрыВыбора(), ПолучитьСвязиПараметровВыбора(). - Если НастройкаВарианта.ДоступнаяНастройкаКД = Неопределено Тогда - Продолжить; - КонецЕсли; - ЭтоГруппа = Ложь; - Если ЗначениеЗаполнено(НастройкаВарианта.ДоступнаяНастройкаКД.Заголовок) Тогда - Представление = НастройкаВарианта.ДоступнаяНастройкаКД.Заголовок; - Иначе - Представление = Строка(НастройкаВарианта.ЭлементКД.ЛевоеЗначение); - КонецЕсли; - Иначе - Продолжить; - КонецЕсли; - - ЭлементКД = НастройкаВарианта.ЭлементКД; - - СтрокаТаблицы = НаборСтрокФормы.Добавить(); - СтрокаТаблицы.Использование = НастройкаВарианта.ЭлементКД.Использование; - СтрокаТаблицы.Представление = Представление; - СтрокаТаблицы.Заголовок = Представление; - СтрокаТаблицы.ИдентификаторКД = НастройкаВарианта.ИдентификаторКД; - СтрокаТаблицы.ЭтоПараметр = Ложь; - СтрокаТаблицы.ЭтоГруппа = ЭтоГруппа; - СтрокаТаблицы.ВводСписком = НастройкаВарианта.ВводСписком; - СтрокаТаблицы.ВыводитьФлажок = НастройкаВарианта.ВыводитьФлажок; - СтрокаТаблицы.ВыборГруппИЭлементов = НастройкаВарианта.ВыборГруппИЭлементов; - - НастройкаВарианта.ИдентификаторВФорме = СтрокаТаблицы.ПолучитьИдентификатор(); - - ВыводитьТолькоФлажок = Ложь; - Если ЗначениеЗаполнено(ЭлементКД.Представление) Тогда - ВыводитьТолькоФлажок = Истина; - Если ЭлементКД.Представление <> "1" Тогда - СтрокаТаблицы.Заголовок = ЭлементКД.Представление; - КонецЕсли; - КонецЕсли; - Если ЗначениеЗаполнено(ЭлементКД.ПредставлениеПользовательскойНастройки) Тогда - СтрокаТаблицы.Заголовок = ЭлементКД.ПредставлениеПользовательскойНастройки; - КонецЕсли; - СтрокаТаблицы.ЗаголовокПереопределен = (СтрокаТаблицы.Заголовок <> СтрокаТаблицы.Представление); - - Если ЗначениеЗаполнено(ЭлементКД.ИдентификаторПользовательскойНастройки) Тогда - Если ЭлементКД.РежимОтображения = РежимОтображенияЭлементаНастройкиКомпоновкиДанных.БыстрыйДоступ Тогда - СтрокаТаблицы.ИндексКартинкиДоступа = ?(ВыводитьТолькоФлажок, 1, 2); - ИначеЕсли ЭлементКД.РежимОтображения = РежимОтображенияЭлементаНастройкиКомпоновкиДанных.Обычный Тогда - СтрокаТаблицы.ИндексКартинкиДоступа = ?(ВыводитьТолькоФлажок, 3, 4); - Иначе - СтрокаТаблицы.ИндексКартинкиДоступа = 5; - КонецЕсли; - Иначе - СтрокаТаблицы.ИндексКартинкиДоступа = 5; - КонецЕсли; - - Если ЭтоГруппа Тогда - СтрокаТаблицы.ИндексКартинки = -1; - ЗарегистрироватьЭлементыОтборов(Информация, НастройкаВарианта.Строки, СтрокаТаблицы.ПолучитьЭлементы()); - Иначе - СтрокаТаблицы.Значение = НастройкаВарианта.Значение; - Если НастройкаВарианта.ОграничиватьВыборУказаннымиЗначениями - И ТипЗнч(НастройкаВарианта.ЗначенияДляВыбора) = Тип("СписокЗначений") Тогда - Если СтрокаТаблицы.ВводСписком - И ТипЗнч(СтрокаТаблицы.Значение) = Тип("СписокЗначений") Тогда - Для Каждого ЭлементСписка Из СтрокаТаблицы.Значение Цикл - ЭлементДляВыбора = НастройкаВарианта.ЗначенияДляВыбора.НайтиПоЗначению(ЭлементСписка.Значение); - Если ЭлементДляВыбора <> Неопределено Тогда - ЭлементСписка.Представление = ЭлементДляВыбора.Представление; - КонецЕсли; - КонецЦикла; - Иначе - СтрокаТаблицы.ВыводитьПредставлениеЗначения = Истина; - ЭлементДляВыбора = НастройкаВарианта.ЗначенияДляВыбора.НайтиПоЗначению(СтрокаТаблицы.Значение); - Если ЭлементДляВыбора <> Неопределено Тогда - СтрокаТаблицы.ПредставлениеЗначения = ЭлементДляВыбора.Представление; - КонецЕсли; - КонецЕсли; - КонецЕсли; - СтрокаТаблицы.ТипЗначения = НастройкаВарианта.ОписаниеТипов; - СтрокаТаблицы.ИндексКартинки = -1; - Если ТипЗнч(СтрокаТаблицы.Значение) = Тип("СтандартныйПериод") Тогда - СтрокаТаблицы.Условие = ОтчетыКлиентСервер.ПолучитьВидСтандартногоПериода(СтрокаТаблицы.Значение); - СтрокаТаблицы.ТипУсловия = Новый ОписаниеТипов("ПеречислениеСсылка.ДоступныеПериодыОтчета"); - Иначе - СтрокаТаблицы.Условие = НастройкаВарианта.ВидСравнения; - СтрокаТаблицы.ТипУсловия = Новый ОписаниеТипов("ВидСравненияКомпоновкиДанных"); - КонецЕсли; - КонецЕсли; - - Дополнительно = Новый Структура("ОписаниеТипов, ОграничиватьВыборУказаннымиЗначениями, - |ПараметрыВыбора, ЗначенияДляВыбора"); - ЗаполнитьЗначенияСвойств(Дополнительно, НастройкаВарианта); - СтрокаТаблицы.Дополнительно = Дополнительно; - - КонецЦикла; -КонецПроцедуры - -&НаСервере -Процедура ЗарегистрироватьОтключаемыеСвязи(Информация) - ОтключаемыеСвязи.Очистить(); - Для Каждого ОписаниеСвязи Из Информация.ОтключаемыеСвязи Цикл - Связь = ОтключаемыеСвязи.Добавить(); - ЗаполнитьЗначенияСвойств(Связь, ОписаниеСвязи); - Если РасширенныйРежим = 1 Тогда - Связь.ВедущийИдентификаторВФорме = ОписаниеСвязи.Ведущий.ИдентификаторВФорме; - Связь.ПодчиненныйИдентификаторВФорме = ОписаниеСвязи.Подчиненный.ИдентификаторВФорме; - Иначе - Связь.ВедущийИдентификаторВФорме = ОписаниеСвязи.Ведущий.ИдентификаторЭлемента; - Связь.ПодчиненныйИдентификаторВФорме = ОписаниеСвязи.Подчиненный.ИдентификаторЭлемента; - КонецЕсли; - КонецЦикла; -КонецПроцедуры - -#КонецОбласти \ No newline at end of file diff --git a/SSL/src/SettingsStorages/ХранилищеВариантовОтчетов/Forms/ОписаниеНовойВозможностиПоВыводуОписаний/Form.form b/SSL/src/SettingsStorages/ХранилищеВариантовОтчетов/Forms/ОписаниеНовойВозможностиПоВыводуОписаний/Form.form index 512486b23..1066f9907 100644 --- a/SSL/src/SettingsStorages/ХранилищеВариантовОтчетов/Forms/ОписаниеНовойВозможностиПоВыводуОписаний/Form.form +++ b/SSL/src/SettingsStorages/ХранилищеВариантовОтчетов/Forms/ОписаниеНовойВозможностиПоВыводуОписаний/Form.form @@ -1,5 +1,9 @@ + + <key>ru</key> + <value>Вывод описаний к отчетам</value> + Декорация1 1 @@ -75,7 +79,7 @@ -1 ФормаОК - 11 + 13 true true @@ -83,7 +87,7 @@ ФормаОКРасширеннаяПодсказка - 12 + 14 Label true true @@ -91,7 +95,7 @@ Left - Form.StandardCommand.OK + Form.Command.ОК Auto true true @@ -132,10 +136,13 @@ Right true + + BeforeClose + ПередЗакрытием + Abort Cancel Close - CustomizeForm Help Ignore No @@ -145,14 +152,29 @@ Yes LockOwner true - true true Vertical true - true true auto true + + ОтключитьОписания + + <key>ru</key> + <value>Отключить описания</value> + + 1 + + Boolean + + + true + + + true + + ОтключитьСейчас @@ -172,7 +194,29 @@ <name>ОтключитьСейчас</name> </handler> </action> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> + <selectedRowsUse>Auto</selectedRowsUse> + </formCommands> + <formCommands> + <name>ОК</name> + <title> + <key>ru</key> + <value>ОК</value> + + 2 + + ru + ОК + + + true + + + + ОК + + + DontUse Auto diff --git a/SSL/src/SettingsStorages/ХранилищеВариантовОтчетов/Forms/ОписаниеНовойВозможностиПоВыводуОписаний/Module.bsl b/SSL/src/SettingsStorages/ХранилищеВариантовОтчетов/Forms/ОписаниеНовойВозможностиПоВыводуОписаний/Module.bsl index cd876c9a9..e2079f0c3 100644 --- a/SSL/src/SettingsStorages/ХранилищеВариантовОтчетов/Forms/ОписаниеНовойВозможностиПоВыводуОписаний/Module.bsl +++ b/SSL/src/SettingsStorages/ХранилищеВариантовОтчетов/Forms/ОписаниеНовойВозможностиПоВыводуОписаний/Module.bsl @@ -1,12 +1,47 @@ +#Область ОбработчикиСобытийФормы + +&НаКлиенте +Процедура ПередЗакрытием(Отказ, СтандартнаяОбработка) + Результат = ПередЗакрытиемНаСервере(ОтключитьОписания); + СтандартныеПодсистемыКлиент.ПоказатьРезультатВыполнения(ЭтотОбъект, Результат); +КонецПроцедуры + +#КонецОбласти #Область ОбработчикиКомандФормы &НаКлиенте Процедура ОтключитьСейчас(Команда) - ПараметрыОбновления = Новый Структура; - ПараметрыОбновления.Вставить("ПоказыватьПодсказки", 0); - ВариантыОтчетовКлиент.ОбновитьОткрытыеФормы(ПараметрыОбновления); + ОтключитьОписания = Истина; + Закрыть(); +КонецПроцедуры + +&НаКлиенте +Процедура ОК(Команда) Закрыть(); КонецПроцедуры #КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +&НаСервереБезКонтекста +Функция ПередЗакрытиемНаСервере(ОтключитьОписания) + Результат = Новый Структура; + + ОбщиеНастройки = ВариантыОтчетов.ОбщиеНастройкиПанели(); + Если ОтключитьОписания Тогда + ОбщиеНастройки.ПоказыватьПодсказки = Ложь; + КонецЕсли; + ОбщиеНастройки.ПоказатьОповещениеОПодсказках = Ложь; + ВариантыОтчетов.СохранитьОбщиеНастройкиПанели(ОбщиеНастройки); + + СтандартныеПодсистемыКлиентСервер.ОповеститьОткрытыеФормы( + Результат, + ВариантыОтчетовКлиентСервер.ИмяСобытияИзменениеОбщихНастроек(), + ОбщиеНастройки); + + Возврат Результат; +КонецФункции + +#КонецОбласти diff --git a/SSL/src/SettingsStorages/ХранилищеВариантовОтчетов/Forms/ПанельДругихОтчетов/Form.form b/SSL/src/SettingsStorages/ХранилищеВариантовОтчетов/Forms/ПанельДругихОтчетов/Form.form index c712c8b2a..f3ad9a157 100644 --- a/SSL/src/SettingsStorages/ХранилищеВариантовОтчетов/Forms/ПанельДругихОтчетов/Form.form +++ b/SSL/src/SettingsStorages/ХранилищеВариантовОтчетов/Forms/ПанельДругихОтчетов/Form.form @@ -286,6 +286,7 @@ 2 + CatalogRef.ИдентификаторыОбъектовРасширений CatalogRef.ИдентификаторыОбъектовМетаданных @@ -303,6 +304,7 @@ 3 + CatalogRef.ИдентификаторыОбъектовРасширений CatalogRef.ИдентификаторыОбъектовМетаданных @@ -424,6 +426,7 @@ 2 + CatalogRef.ИдентификаторыОбъектовРасширений String CatalogRef.ДополнительныеОтчетыИОбработки CatalogRef.ИдентификаторыОбъектовМетаданных @@ -578,6 +581,23 @@ true + + Пользовательский + + <key>ru</key> + <value>Пользовательский</value> + + 11 + + Boolean + + + true + + + true + +
        ВариантыПанелиНомерЭлемента diff --git a/SSL/src/SettingsStorages/ХранилищеВариантовОтчетов/Forms/ПанельДругихОтчетов/Module.bsl b/SSL/src/SettingsStorages/ХранилищеВариантовОтчетов/Forms/ПанельДругихОтчетов/Module.bsl index eb1828961..879e83cfb 100644 --- a/SSL/src/SettingsStorages/ХранилищеВариантовОтчетов/Forms/ПанельДругихОтчетов/Module.bsl +++ b/SSL/src/SettingsStorages/ХранилищеВариантовОтчетов/Forms/ПанельДругихОтчетов/Module.bsl @@ -49,36 +49,7 @@ КонецЕсли; Вариант = Найденные[0]; - ПараметрыОткрытия = Новый Структура; - ПараметрыОткрытия.Вставить("КлючВарианта", Вариант.КлючВарианта); - ПараметрыОткрытия.Вставить("Подсистема", ПодсистемаСсылка); - - // Открытие - Если Вариант.Дополнительный Тогда - - ПараметрыОткрытия.Вставить("Вариант", Вариант.Ссылка); - ПараметрыОткрытия.Вставить("Отчет", Вариант.Отчет); - ВариантыОтчетовКлиент.ОткрытьВариантДополнительногоОтчета(ПараметрыОткрытия); - - ИначеЕсли Не ЗначениеЗаполнено(Вариант.ИмяОтчета) Тогда - - ТекстПредупреждения = СтрЗаменить(НСтр("ru = 'Не заполнено имя отчета для варианта ""%1"".'"), "%1", Вариант.Наименование); - ПоказатьПредупреждение(, ТекстПредупреждения); - Возврат; - - Иначе - - Уникальность = "Отчет." + Вариант.ИмяОтчета; - Если ЗначениеЗаполнено(Вариант.КлючВарианта) Тогда - Уникальность = Уникальность + "/КлючВарианта." + Вариант.КлючВарианта; - КонецЕсли; - - ПараметрыОткрытия.Вставить("КлючПараметровПечати", Уникальность); - ПараметрыОткрытия.Вставить("КлючСохраненияПоложенияОкна", Уникальность); - - ОткрытьФорму("Отчет." + Вариант.ИмяОтчета + ".Форма", ПараметрыОткрытия, Неопределено, Истина); - - КонецЕсли; + ВариантыОтчетовКлиент.ОткрытьФормуОтчета(ВладелецФормы, Вариант, Новый Структура("Подсистема", ПодсистемаСсылка)); Если ЗакрыватьПослеВыбора Тогда Закрыть(); @@ -145,6 +116,7 @@ | ИНАЧЕ ВЫРАЗИТЬ(ВариантыОтчетов.Описание КАК СТРОКА(1000)) | КОНЕЦ КАК Описание, | ВариантыОтчетов.Автор, + | ВариантыОтчетов.Пользовательский, | ВариантыОтчетов.ТипОтчета, | ВариантыОтчетов.Отчет.Имя КАК ИмяОтчета |ИЗ diff --git a/SSL/src/SettingsStorages/ХранилищеВариантовОтчетов/Forms/СохранениеВариантаОтчета/Form.form b/SSL/src/SettingsStorages/ХранилищеВариантовОтчетов/Forms/СохранениеВариантаОтчета/Form.form index 56653a1ce..b17875fd3 100644 --- a/SSL/src/SettingsStorages/ХранилищеВариантовОтчетов/Forms/СохранениеВариантаОтчета/Form.form +++ b/SSL/src/SettingsStorages/ХранилищеВариантовОтчетов/Forms/СохранениеВариантаОтчета/Form.form @@ -310,10 +310,6 @@ Left true - - AutoComplete - НаименованиеАвтоПодбор - true true true @@ -366,7 +362,7 @@ Left true - 1 + Tumbler ru @@ -389,19 +385,66 @@ - Группа7 - 155 - - Декорация1 - 157 + СтраницыСбросить + 192 + + ФлажокСброситьВиден + 194 + + СброситьНастройки + 181 + true + true + + true + + + СброситьНастройки + + Right + + ru + Эти настройки применятся у всех пользователей этого варианта отчета. В том числе, у других пользователей сбросятся значения фильтров. + + Button + + СброситьНастройкиРасширеннаяПодсказка + 183 + Label + true + true + + Left + + + + СброситьНастройкиКонтекстноеМеню + 182 + true + + CheckBoxField + Enter + true + Left + true + + true true true + + <key>ru</key> + <value>Флажок сбросить виден</value> + + + ru + Флажок сбросить виден + - Декорация1РасширеннаяПодсказка - 159 + ФлажокСброситьВиденРасширеннаяПодсказка + 195 Label true true @@ -409,33 +452,61 @@ Left - - Декорация1КонтекстноеМеню - 158 - true - - Label - true - true - - Left + Page + + Vertical + auto - - ВариантВидимостьПоУмолчанию - 160 + + ФлажокСброситьСкрыт + 196 + + Декорация1 + 198 + true + true + + true + + + Декорация1РасширеннаяПодсказка + 200 + Label + true + true + + Left + + + + Декорация1КонтекстноеМеню + 199 + true + + Label + true + true + + Left + + true true true - - ВариантВидимостьПоУмолчанию - - Right + + <key>ru</key> + <value>Флажок сбросить скрыт</value> + + + ru + Флажок сбросить скрыт + - ВариантВидимостьПоУмолчаниюРасширеннаяПодсказка - 162 + ФлажокСброситьСкрытРасширеннаяПодсказка + 197 Label true true @@ -443,26 +514,28 @@ Left - - ВариантВидимостьПоУмолчаниюКонтекстноеМеню - 161 - true - - CheckBoxField - Enter - true - Left - true - + Page + + Vertical + auto + true true true + + <key>ru</key> + <value>Страницы сбросить</value> + + + ru + Страницы сбросить + - Группа7РасширеннаяПодсказка - 156 + СтраницыСброситьРасширеннаяПодсказка + 193 Label true true @@ -470,13 +543,8 @@ Left - UsualGroup - - Vertical - Auto - true - true - Auto + Pages + Auto @@ -569,27 +637,70 @@ - ПерезаписьИлиНовый - 86 + Страница1Подвал + 190 - Перезапись - 87 - - ДекорацияПерезапись - 89 - - <key>ru</key> - <value>Будет перезаписан существующий вариант отчета. -</value> - + ЧтоБудетДальше + 86 + + Новый + 88 + + ДекорацияДалее2 + 187 + + <key>ru</key> + <value>Будет сохранен новый вариант отчета. +Нажмите "Далее" для размещения варианта отчета в разделах программы.</value> + + true + true + + true + + + ДекорацияДалее2РасширеннаяПодсказка + 189 + Label + true + true + + Left + + + + ДекорацияДалее2КонтекстноеМеню + 188 + true + + Label + true + true + false + + Style.ПоясняющийТекст + + + Left + Bottom + + true true true + + <key>ru</key> + <value>Новый</value> + + + ru + Новый + - ДекорацияПерезаписьExtendedTooltip - 126 + НовыйExtendedTooltip + 127 Label true true @@ -597,21 +708,154 @@ Left - - ДекорацияПерезаписьКонтекстноеМеню - 90 - true - - Label - true - 1 - true - false - - Style.ПоясняющийТекст - - - Left + Page + + Vertical + auto + + + + Перезапись + 87 + + ДекорацияДалее1 + 184 + + <key>ru</key> + <value>Будет перезаписан существующий вариант отчета. +Нажмите "Далее" для размещения варианта отчета в разделах программы.</value> + + true + true + + true + + + ДекорацияДалее1РасширеннаяПодсказка + 186 + Label + true + true + + Left + + + + ДекорацияДалее1КонтекстноеМеню + 185 + true + + Label + true + true + false + + Style.ПоясняющийТекст + + + Left + Bottom + + + true + true + + true + + + <key>ru</key> + <value>Перезапись</value> + + + ru + Перезапись + + + ПерезаписьExtendedTooltip + 125 + Label + true + true + + Left + + + Page + + Vertical + auto + + + + ПерезаписьНевозможна + 201 + + ДекорацияДалее3 + 203 + + <key>ru</key> + <value>Наименование занято другим вариантом отчета. +Введите другое наименование или выберите вариант из списка.</value> + + true + true + + true + + + ДекорацияДалее3РасширеннаяПодсказка + 205 + Label + true + true + + Left + + + + ДекорацияДалее3КонтекстноеМеню + 204 + true + + Label + true + true + false + + Style.ПоясняющийОшибкуТекст + + + Left + Bottom + + + true + true + + true + + + <key>ru</key> + <value>Перезапись невозможна</value> + + + ru + Перезапись невозможна + + + ПерезаписьНевозможнаРасширеннаяПодсказка + 202 + Label + true + true + + Left + + + Page + + Vertical + auto true @@ -621,15 +865,15 @@ <key>ru</key> - <value>Перезапись</value> + <value>Что будет дальше</value> ru - Перезапись + Что будет дальше - ПерезаписьExtendedTooltip - 125 + ЧтоБудетДальшеРасширеннаяПодсказка + 124 Label true true @@ -637,81 +881,9 @@ Left - Page - - Vertical - auto - - - - Новый - 88 - - ДекорацияНовый - 91 - - <key>ru</key> - <value>Будет сохранен новый вариант отчета.</value> - - true - true - - true - - - ДекорацияНовыйExtendedTooltip - 128 - Label - true - true - - Left - - - - ДекорацияНовыйКонтекстноеМеню - 92 - true - - Label - true - 1 - true - false - - Style.ПоясняющийТекст - - - Left - - - true - true - - true - - - <key>ru</key> - <value>Новый</value> - - - ru - Новый - - - НовыйExtendedTooltip - 127 - Label - true - true - - Left - - - Page - - Vertical - auto + Pages + + Auto true @@ -721,15 +893,15 @@ <key>ru</key> - <value>Перезапись или новый</value> + <value>Страница1 подвал</value> ru - Перезапись или новый + Страница1 подвал - ПерезаписьИлиНовыйExtendedTooltip - 124 + Страница1ПодвалРасширеннаяПодсказка + 191 Label true true @@ -737,8 +909,13 @@ Left - Pages - + UsualGroup + + Vertical + Auto + true + true + Auto Auto @@ -749,7 +926,6 @@ ru Нажмите "Далее" для размещения варианта отчета в разделах программы. - true true true @@ -809,6 +985,40 @@ Страница2 26 + + ВариантВидимостьПоУмолчанию + 160 + true + true + + true + + + ВариантВидимостьПоУмолчанию + + Right + + ВариантВидимостьПоУмолчаниюРасширеннаяПодсказка + 162 + Label + true + true + + Left + + + + ВариантВидимостьПоУмолчаниюКонтекстноеМеню + 161 + true + + CheckBoxField + Enter + true + Left + true + + ДеревоПодсистем 74 @@ -1177,6 +1387,10 @@ ru Подробное описание отчета + + OnChange + ОписаниеПриИзменении + ОписаниеExtendedTooltip 136 @@ -1545,7 +1759,6 @@ true true true - UseIfNecessary auto true @@ -1960,6 +2173,7 @@ 1 + CatalogRef.ИдентификаторыОбъектовРасширений CatalogRef.ИдентификаторыОбъектовМетаданных @@ -2138,23 +2352,6 @@ - - ВариантАвтор - - <key>ru</key> - <value>Вариант автор</value> - - 14 - - CatalogRef.Пользователи - - - true - - - true - - Контекст @@ -2187,6 +2384,74 @@ <common>true</common> </edit> </attributes> + <attributes> + <name>СброситьНастройки</name> + <title> + <key>ru</key> + <value>Сбросить настройки</value> + + 20 + + Boolean + + + true + + + true + + + + ОписаниеМодифицировано + + <key>ru</key> + <value>Описание модифицировано</value> + + 21 + + Boolean + + + true + + + true + + + + НаименованиеМодифицировано + + <key>ru</key> + <value>Наименование модифицировано</value> + + 22 + + Boolean + + + true + + + true + + + + ПрототипПредопределенный + + <key>ru</key> + <value>Прототип предопределенный</value> + + 23 + + Boolean + + + true + + + true + + Далее @@ -2206,7 +2471,7 @@ <name>Далее</name> </handler> </action> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <formCommands> @@ -2228,7 +2493,7 @@ <name>Назад</name> </handler> </action> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <formCommands> @@ -2250,7 +2515,7 @@ <name>Сохранить</name> </handler> </action> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <parameters> diff --git a/SSL/src/SettingsStorages/ХранилищеВариантовОтчетов/Forms/СохранениеВариантаОтчета/Help/ru.html b/SSL/src/SettingsStorages/ХранилищеВариантовОтчетов/Forms/СохранениеВариантаОтчета/Help/ru.html index 34f34775a..3691396eb 100644 --- a/SSL/src/SettingsStorages/ХранилищеВариантовОтчетов/Forms/СохранениеВариантаОтчета/Help/ru.html +++ b/SSL/src/SettingsStorages/ХранилищеВариантовОтчетов/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 9.00.8112.16421"></meta></head><body> <p>Предназначена для сохранения <a href="Catalog.ВариантыОтчетов.Form.ФормаЭлемента/Help">варианта отчета</a>.</p> -<p>После того как настроен и сформирован <a href="CommonForm.ФормаОтчета/Help">отчет</a>, его можно сохранить в новом варианте отчета. Для этого необходимо воспользоваться кнопкой <strong>Варианты отчетов - Сохранить вариант</strong> или командой <strong>Еще - Сохранить вариант</strong>.</p> +<p>После того как настроен и сформирован <a href="CommonForm.ФормаОтчета/Help">отчет</a>, его можно сохранить в новом варианте отчета. Для этого необходимо воспользоваться кнопкой <strong>Варианты отчетов - Сохранить вариант отчета</strong>, также можно воспользоваться аналогичной командой меню <strong>Еще</strong>.</p> <h3>Список существующих вариантов</h3> <ul><li>При сохранении варианта отчета выводится список всех существующих вариантов этого отчета - предопределенных и пользовательских. <ul><li>Список включает: @@ -8,14 +8,21 @@ </li><li>общие варианты отчетов, предоставленные другими пользователями в общий доступ; </li><li>личные варианты отчетов, сохраненные ранее. </li></ul></li><li>В списке также выводятся помеченные на удаление варианты отчетов.</li></ul></li><li>В списке можно <strong>Изменить</strong> существующие варианты отчетов с помощью соответствующей команды контекстного меню по правой кнопке мыши. У предопределенного варианта отчета можно изменить описание или настройки размещения, у пользовательского варианта можно изменить и наименование (при наличии соответствующих прав). </li><li>Для того чтобы удалить существующий пользовательский вариант отчета, выделите его, нажмите на клавишу <strong>Del</strong> или выполните команду контекстного меню по правой кнопке мыши <strong>Пометить на удаление</strong>. Предопределенные варианты отчетов удалить невозможно.</li></ul><h3>Наименование варианта отчета</h3> -<ul style="MARGIN-RIGHT: 0px" dir="ltr"><li>Для сохранения нового варианта отчета необходимо ввести <strong>Наименование</strong>, которое не занято другим вариантом этого отчета. При сохранении контролируется уникальность наименований вариантов отчетов. -</li><li>При перезаписи варианта можно сохранить настройки в существующем варианте - по умолчанию выбран вариант отчета, в котором была выполнена команда <strong>Сохранить вариант</strong>. Для перезаписи можно выбрать любой личный вариант отчета из списка. Для вариантов отчетов, которые нельзя перезаписать, в том числе и предопределенных, программа в наименовании по умолчанию добавляет слово "-копия".  В случае если заменяемый вариант отчета был помечен на удаление, программой выводится предупреждение. Нажмите кнопку <strong>Да</strong>, для того чтобы подтвердить свой выбор. -<ul><li>Для администраторов программы или ответственных за отчеты предусмотрена возможность перезаписи общих вариантов отчетов других авторов.</li></ul></li></ul><h3>Доступность</h3> -<ul><li>С помощью переключателя <strong>Доступен</strong> администратор варианта отчета может ограничить доступность варианта отчета - выбрать доступность <strong>Только для автора</strong>. -</li><li>Если выбрать доступность <strong>Всем пользователям</strong>, то можно указать видимость для других исполнителей. Для того чтобы вариант отчета был сразу виден в <a href="CommonForm.ПанельОтчетов/Help">панелях отчетов</a> всех <a href="Catalog.Пользователи/Help">пользователей</a>, включите флажок <strong>По умолчанию виден в панели отчетов</strong>.</li></ul><h3>Сохранение варианта отчета</h3> +<ul dir="ltr"><li>Для сохранения нового варианта отчета необходимо ввести <strong>Наименование</strong>, которое не занято другим вариантом этого отчета. При сохранении контролируется уникальность наименований вариантов отчетов. +</li><li>При перезаписи варианта можно сохранить настройки в существующем варианте - по умолчанию выбран вариант отчета, в котором была выполнена команда <strong>Сохранить вариант</strong>. Для перезаписи можно выбрать любой личный вариант отчета из списка.  +<ul><li>Для вариантов отчетов, которые нельзя перезаписать, в том числе и предопределенных, программа в наименовании по умолчанию добавляет слово "-копия".  Такие варианты отчетов отображаются в списке существующих вариантов серым цветом. +</li><li>В случае если заменяемый вариант отчета был помечен на удаление, программой выводится предупреждение. Нажмите кнопку <strong>Да</strong>, для того чтобы подтвердить свой выбор. +</li><li>Для администраторов программы или ответственных за отчеты предусмотрена возможность перезаписи общих вариантов отчетов других авторов.</li></ul></li></ul><h3>Доступность</h3> +<ul><li>С помощью переключателя <strong>Доступен</strong> администратор варианта отчета может ограничить доступность варианта отчета - выбрать доступность <strong>Только для автора</strong>. </li></ul><h3>Сброс настроек</h3> +<ul><li> +<div>Для пользовательских вариантов отчетов предусмотрен флажок <strong>Сбросить настройки</strong>. </div> +</li><li> +<div>Если флажок включен и отчет доступен <strong>Всем пользователям</strong>, то настройки будут обновлены у всех пользователей этого варианта отчета. В том числе, у других пользователей сбросятся значения фильтров.</div></li></ul><h3>Сохранение варианта отчета</h3> <p>Сохранить вариант отчета можно двумя способами: </p> <ul><li>После определения основных параметров нажмите <strong>Сохранить</strong>, при этом будут использованы настройки по умолчанию и новый вариант отчета будет помещен в тот же раздел списка отчетов, что и исходный вариант. -</li><li>Нажмите <strong>Далее</strong>, для того чтобы изменить настройки размещения варианта отчета. </li></ul><h3>Размещение в панелях отчетов</h3> +</li><li>Нажмите <strong>Далее</strong>, для того чтобы изменить настройки размещения варианта отчета. </li></ul><h3>Видимость в панелях отчетов</h3> +<ul><li>Если выбрать доступность <strong>Всем пользователям</strong>, то можно указать видимость для других исполнителей. +</li><li>Для того чтобы вариант отчета был сразу виден в <a href="CommonForm.ПанельОтчетов/Help">панелях отчетов</a> всех пользователей, включите флажок <strong>По умолчанию виден в панели отчетов</strong>.</li></ul><h3>Размещение в панелях отчетов</h3> <ul><li>Включите один или несколько флажков в колонке <strong>Раздел, группа</strong> для размещения варианта отчетов в соответствующих разделах или группах программы. При размещении в разделе вариант отчета будет выводиться в верхней части панели отчетов раздела, без размещения в группах. </li><li> <div>В колонке <strong>Важность</strong> выберите способ выделения варианта отчета в группе: </div> diff --git a/SSL/src/SettingsStorages/ХранилищеВариантовОтчетов/Forms/СохранениеВариантаОтчета/Module.bsl b/SSL/src/SettingsStorages/ХранилищеВариантовОтчетов/Forms/СохранениеВариантаОтчета/Module.bsl index 23aa89e1f..ea1224c4b 100644 --- a/SSL/src/SettingsStorages/ХранилищеВариантовОтчетов/Forms/СохранениеВариантаОтчета/Module.bsl +++ b/SSL/src/SettingsStorages/ХранилищеВариантовОтчетов/Forms/СохранениеВариантаОтчета/Module.bsl @@ -10,7 +10,7 @@ Контекст = Новый Структура; Контекст.Вставить("ТекущийПользователь", Пользователи.ТекущийПользователь()); Контекст.Вставить("ПолныеПраваНаВарианты", ВариантыОтчетов.ПолныеПраваНаВарианты()); - Контекст.Вставить("ИдентификаторТекущейСтроки", 0); + Контекст.Вставить("ИдентификаторТекущейСтроки", Неопределено); ПрототипКлюч = Параметры.КлючТекущихНастроек; @@ -22,8 +22,9 @@ Контекст.Вставить("ОтчетИмя", ОтчетИнформация.ОтчетИмя); Контекст.Вставить("ТипОтчета", ОтчетИнформация.ТипОтчета); Контекст.Вставить("ЭтоВнешний", ОтчетИнформация.ТипОтчета = Перечисления.ТипыОтчетов.Внешний); + Контекст.Вставить("ПоискПоНаименованию", Новый Соответствие); - ЗаполнитьСписокВариантов(); + ЗаполнитьСписокВариантов(Ложь); ВариантыОтчетов.ДеревоПодсистемДобавитьУсловноеОформление(ЭтотОбъект); @@ -39,7 +40,7 @@ Элементы.ДекорацияДалее.Видимость = Ложь; КонецЕсли; - ВариантыОтчетаОбработчикАктивизацииСтроки(ЭтотОбъект); + ВидимостьДоступность(ЭтотОбъект, "ПриСозданииНаСервере"); КонецПроцедуры &НаСервере @@ -67,18 +68,8 @@ Возврат; КонецЕсли; - Если ИмяСобытия = ВариантыОтчетовКлиентСервер.ИмяСобытияИзменениеВарианта() - И ТипЗнч(Параметр) = Тип("Структура") - И Параметр.Свойство("Ссылка") Тогда - - Найденные = ВариантыОтчета.НайтиСтроки(Новый Структура("Ссылка", Параметр.Ссылка)); - Если Найденные.Количество() = 1 Тогда - Вариант = Найденные[0]; - ЗаполнитьЗначенияСвойств(Вариант, Параметр); - Вариант.АвторТекущийПользователь = (Вариант.Автор = Контекст.ТекущийПользователь); - ВариантыОтчетаОбработчикАктивизацииСтроки(ЭтотОбъект); - КонецЕсли; - + Если ИмяСобытия = ВариантыОтчетовКлиентСервер.ИмяСобытияИзменениеВарианта() Тогда + ЗаполнитьСписокВариантов(Истина); КонецЕсли; КонецПроцедуры @@ -94,20 +85,9 @@ &НаКлиенте Процедура НаименованиеПриИзменении(Элемент) - Найденные = ВариантыОтчета.НайтиСтроки(Новый Структура("Наименование", ВариантНаименование)); - Если Найденные.Количество() > 0 Тогда - Элементы.ВариантыОтчета.ТекущаяСтрока = Найденные[0].ПолучитьИдентификатор(); - ВариантыОтчетаОбработчикАктивизацииСтроки(ЭтотОбъект); - Иначе - ВариантСсылка = Неопределено; - УстановитьЧтоБудетДальше(ЭтотОбъект, Ложь); - КонецЕсли; -КонецПроцедуры - -&НаКлиенте -Процедура НаименованиеАвтоПодбор(Элемент, Текст, ДанныеВыбора, Ожидание, СтандартнаяОбработка) - Найденные = ВариантыОтчета.НайтиСтроки(Новый Структура("Наименование", Текст)); - УстановитьЧтоБудетДальше(ЭтотОбъект, Найденные.Количество() > 0); + НаименованиеМодифицировано = Истина; + Контекст.ИдентификаторТекущейСтроки = Контекст.ПоискПоНаименованию.Получить(ВариантНаименование); //Элементы.ВариантыОтчета.ТекущаяСтрока + ВидимостьДоступность(ЭтотОбъект, "НаименованиеПриИзменении"); КонецПроцедуры &НаКлиенте @@ -123,16 +103,21 @@ НСтр("ru = 'Описание'")); КонецПроцедуры +&НаКлиенте +Процедура ОписаниеПриИзменении(Элемент) + ОписаниеМодифицировано = Истина; +КонецПроцедуры + #КонецОбласти #Область ОбработчикиСобытийЭлементовТаблицыФормыВариантыОтчета &НаКлиенте Процедура ВариантыОтчетаПриАктивизацииСтроки(Элемент) - Если Контекст.ИдентификаторТекущейСтроки = Элементы.ВариантыОтчета.ТекущаяСтрока Тогда - Возврат; - КонецЕсли; - ВариантыОтчетаОбработчикАктивизацииСтроки(ЭтотОбъект); + НаименованиеМодифицировано = Ложь; + ОписаниеМодифицировано = Ложь; + Контекст.ИдентификаторТекущейСтроки = Элементы.ВариантыОтчета.ТекущаяСтрока; + ВидимостьДоступность(ЭтотОбъект, "ВариантыОтчетаПриАктивизацииСтроки"); КонецПроцедуры &НаКлиенте @@ -151,18 +136,18 @@ Процедура ВариантыОтчетаПередУдалением(Элемент, Отказ) Отказ = Истина; Вариант = Элементы.ВариантыОтчета.ТекущиеДанные; - Если Вариант = Неопределено ИЛИ НЕ ЗначениеЗаполнено(Вариант.Ссылка) Тогда + Если Вариант = Неопределено Или Не ЗначениеЗаполнено(Вариант.Ссылка) Тогда Возврат; КонецЕсли; - Если НЕ Контекст.ПолныеПраваНаВарианты И НЕ Вариант.АвторТекущийПользователь Тогда - ТекстПредупреждения = НСтр("ru = 'Недостаточно прав доступа для удаления варианта отчета ""%1"".'"); - ТекстПредупреждения = СтрЗаменить(ТекстПредупреждения, "%1", Вариант.Наименование); + Если Не Контекст.ПолныеПраваНаВарианты И НЕ Вариант.АвторТекущийПользователь Тогда + ТекстПредупреждения = НСтр("ru = 'Недостаточно прав для удаления варианта отчета ""%1"".'"); + ТекстПредупреждения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ТекстПредупреждения, Вариант.Наименование); ПоказатьПредупреждение(, ТекстПредупреждения); Возврат; КонецЕсли; - Если НЕ Вариант.Пользовательский Тогда + Если Не Вариант.Пользовательский Тогда ПоказатьПредупреждение(, НСтр("ru = 'Невозможно удалить предопределенный вариант отчета.'")); Возврат; КонецЕсли; @@ -172,15 +157,22 @@ Иначе ТекстВопроса = НСтр("ru = 'Пометить ""%1"" на удаление?'"); КонецЕсли; - ТекстВопроса = СтрЗаменить(ТекстВопроса, "%1", Вариант.Наименование); + ТекстВопроса = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ТекстВопроса, Вариант.Наименование); ДополнительныеПараметры = Новый Структура; - ДополнительныеПараметры.Вставить("Вариант", Вариант); + ДополнительныеПараметры.Вставить("Идентификатор", Вариант.ПолучитьИдентификатор()); Обработчик = Новый ОписаниеОповещения("ВариантыОтчетаПередУдалениемЗавершение", ЭтотОбъект, ДополнительныеПараметры); ПоказатьВопрос(Обработчик, ТекстВопроса, РежимДиалогаВопрос.ДаНет, 60, КодВозвратаДиалога.Да); КонецПроцедуры +&НаКлиенте +Процедура ВариантыОтчетаПередУдалениемЗавершение(Ответ, ДополнительныеПараметры) Экспорт + Если Ответ = КодВозвратаДиалога.Да Тогда + УдалитьВариантНаСервере(ДополнительныеПараметры.Идентификатор); + КонецЕсли; +КонецПроцедуры + &НаКлиенте Процедура ВариантыОтчетаПередНачаломДобавления(Элемент, Отказ, Копирование, Родитель, Группа) Отказ = Истина; @@ -233,24 +225,24 @@ &НаСервере Процедура УстановитьУсловноеОформление() - Инструкция = ВариантыОтчетов.ИнструкцияУсловногоОформления(); + Инструкция = СтандартныеПодсистемыСервер.ИнструкцияУсловногоОформления(); Инструкция.Поля = "ВариантыОтчета, ВариантыОтчетаНаименование"; Инструкция.Отборы.Вставить("ВариантыОтчета.Пользовательский", Ложь); Инструкция.Оформление.Вставить("ЦветТекста", ЦветаСтиля.СкрытыйВариантОтчетаЦвет); - ВариантыОтчетов.ДобавитьЭлементУсловногоОформления(ЭтотОбъект, Инструкция); + СтандартныеПодсистемыСервер.ДобавитьЭлементУсловногоОформления(ЭтотОбъект, Инструкция); - Инструкция = ВариантыОтчетов.ИнструкцияУсловногоОформления(); + Инструкция = СтандартныеПодсистемыСервер.ИнструкцияУсловногоОформления(); Инструкция.Поля = "ВариантыОтчета, ВариантыОтчетаНаименование"; Инструкция.Отборы.Вставить("ПолныеПраваНаВарианты", Ложь); Инструкция.Отборы.Вставить("ВариантыОтчета.АвторТекущийПользователь", Ложь); Инструкция.Оформление.Вставить("ЦветТекста", ЦветаСтиля.СкрытыйВариантОтчетаЦвет); - ВариантыОтчетов.ДобавитьЭлементУсловногоОформления(ЭтотОбъект, Инструкция); + СтандартныеПодсистемыСервер.ДобавитьЭлементУсловногоОформления(ЭтотОбъект, Инструкция); - Инструкция = ВариантыОтчетов.ИнструкцияУсловногоОформления(); + Инструкция = СтандартныеПодсистемыСервер.ИнструкцияУсловногоОформления(); Инструкция.Поля = "ВариантыОтчета, ВариантыОтчетаНаименование"; Инструкция.Отборы.Вставить("ВариантыОтчета.Порядок", 3); Инструкция.Оформление.Вставить("ЦветТекста", ЦветаСтиля.СкрытыйВариантОтчетаЦвет); - ВариантыОтчетов.ДобавитьЭлементУсловногоОформления(ЭтотОбъект, Инструкция); + СтандартныеПодсистемыСервер.ДобавитьЭлементУсловногоОформления(ЭтотОбъект, Инструкция); КонецПроцедуры //////////////////////////////////////////////////////////////////////////////// @@ -285,8 +277,8 @@ Если Не Пакет.ВариантЭтоНовый Тогда Найденные = ВариантыОтчета.НайтиСтроки(Новый Структура("Ссылка", ВариантСсылка)); Вариант = Найденные[0]; - Если НЕ ПравоЗаписиВарианта(Вариант, ПравоНастройкиВарианта(Вариант, Контекст.ПолныеПраваНаВарианты)) Тогда - ТекстОшибки = НСтр("ru = 'Недостаточно прав для изменения варианта ""%1"", необходимо выбрать другой вариант или изменить Наименование.'"); + Если НЕ ПравоЗаписиВарианта(Вариант, Контекст.ПолныеПраваНаВарианты) Тогда + ТекстОшибки = НСтр("ru = 'Недостаточно прав для изменения варианта ""%1"". Необходимо выбрать другой вариант или изменить Наименование.'"); ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ТекстОшибки, ВариантНаименование); ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстОшибки, , "ВариантНаименование"); Возврат; @@ -364,7 +356,7 @@ Если Вариант = Неопределено ИЛИ НЕ ЗначениеЗаполнено(Вариант.Ссылка) Тогда Возврат; КонецЕсли; - Если НЕ ПравоНастройкиВарианта(Вариант, Контекст.ПолныеПраваНаВарианты) Тогда + Если Не ПравоНастройкиВарианта(Вариант, Контекст.ПолныеПраваНаВарианты) Тогда ТекстПредупреждения = НСтр("ru = 'Недостаточно прав доступа для изменения варианта ""%1"".'"); ТекстПредупреждения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ТекстПредупреждения, Вариант.Наименование); ПоказатьПредупреждение(, ТекстПредупреждения); @@ -399,51 +391,88 @@ КонецПроцедуры -&НаКлиенте -Процедура ВариантыОтчетаПередУдалениемЗавершение(Ответ, ДополнительныеПараметры) Экспорт - Если Ответ = КодВозвратаДиалога.Да Тогда - Вариант = ДополнительныеПараметры.Вариант; - УдалитьВариантНаСервере(Вариант.Ссылка, Вариант.ИндексКартинки, Вариант.ПометкаУдаления); - ВариантыОтчетаОбработчикАктивизацииСтроки(ЭтотОбъект); - КонецЕсли; -КонецПроцедуры - //////////////////////////////////////////////////////////////////////////////// // Клиент и сервер &НаКлиентеНаСервереБезКонтекста -Процедура ВариантыОтчетаОбработчикАктивизацииСтроки(Форма) - Форма.Контекст.ИдентификаторТекущейСтроки = Форма.Элементы.ВариантыОтчета.ТекущаяСтрока; - Если Форма.Контекст.ИдентификаторТекущейСтроки = Неопределено Тогда - Возврат; +Процедура ВидимостьДоступность(Форма, ИмяСобытия) + Если ИмяСобытия = "ПриСозданииНаСервере" + Или ИмяСобытия = "НаименованиеПриИзменении" + Или ИмяСобытия = "ПослеЗаполненияСпискаВариантов" + Или ИмяСобытия = "ВариантыОтчетаПриАктивизацииСтроки" Тогда + + БудетЗаписанНовый = Ложь; + БудетПерезаписанСуществующий = Ложь; + ПерезаписьНевозможна = Ложь; + + Идентификатор = Форма.Контекст.ИдентификаторТекущейСтроки; //Форма.Элементы.ВариантыОтчета.ТекущаяСтрока + Если Идентификатор = Неопределено Тогда // Платформа не принимает в методе НайтиПоИдентификатору значение Неопределено. + Вариант = Неопределено; + Иначе + Вариант = Форма.ВариантыОтчета.НайтиПоИдентификатору(Идентификатор); + КонецЕсли; + + Если Вариант = Неопределено Тогда + БудетЗаписанНовый = Истина; + Форма.ВариантСсылка = Неопределено; + Форма.ВариантТолькоДляАвтора = Истина; + Форма.ВариантВидимостьПоУмолчанию = Истина; + Если Не Форма.ОписаниеМодифицировано Тогда + Форма.ВариантОписание = ""; + КонецЕсли; + Форма.Элементы.ВариантыОтчета.ТекущаяСтрока = Неопределено; + Форма.Контекст.ИдентификаторТекущейСтроки = Неопределено; + Иначе + ПравоЗаписиВарианта = ПравоЗаписиВарианта(Вариант, Форма.Контекст.ПолныеПраваНаВарианты); + Если ПравоЗаписиВарианта Тогда + БудетПерезаписанСуществующий = Истина; + Форма.НаименованиеМодифицировано = Ложь; + Форма.ВариантНаименование = Вариант.Наименование; + + Форма.ВариантСсылка = Вариант.Ссылка; + Форма.ВариантТолькоДляАвтора = Вариант.ТолькоДляАвтора; + Форма.ВариантВидимостьПоУмолчанию = Вариант.ВидимостьПоУмолчанию; + Если Не Форма.ОписаниеМодифицировано Тогда + Форма.ВариантОписание = Вариант.Описание; + КонецЕсли; + Иначе + Если Форма.НаименованиеМодифицировано Тогда + ПерезаписьНевозможна = Истина; + Форма.Элементы.ВариантыОтчета.ТекущаяСтрока = Неопределено; + Форма.Контекст.ИдентификаторТекущейСтроки = Неопределено; + Иначе + БудетЗаписанНовый = Истина; + Форма.ВариантНаименование = СформироватьСвободноеНаименование(Вариант, Форма.ВариантыОтчета); + КонецЕсли; + + Форма.ВариантСсылка = Неопределено; + Форма.ВариантТолькоДляАвтора = Истина; + Форма.ВариантВидимостьПоУмолчанию = Истина; + Если Не Форма.ОписаниеМодифицировано Тогда + Форма.ВариантОписание = ""; + КонецЕсли; + КонецЕсли; + + Форма.Доступен = ?(Форма.ВариантТолькоДляАвтора, "1", "2"); + КонецЕсли; + Если БудетЗаписанНовый Тогда + Форма.Элементы.ЧтоБудетДальше.ТекущаяСтраница = Форма.Элементы.Новый; + Форма.Элементы.СтраницыСбросить.ТекущаяСтраница = Форма.Элементы.ФлажокСброситьСкрыт; + Форма.Элементы.Далее.Доступность = Истина; + Форма.Элементы.Сохранить.Доступность = Истина; + ИначеЕсли БудетПерезаписанСуществующий Тогда + Форма.Элементы.ЧтоБудетДальше.ТекущаяСтраница = Форма.Элементы.Перезапись; + Форма.Элементы.СтраницыСбросить.ТекущаяСтраница = Форма.Элементы.ФлажокСброситьВиден; + Форма.Элементы.Далее.Доступность = Истина; + Форма.Элементы.Сохранить.Доступность = Истина; + ИначеЕсли ПерезаписьНевозможна Тогда + Форма.Элементы.ЧтоБудетДальше.ТекущаяСтраница = Форма.Элементы.ПерезаписьНевозможна; + Форма.Элементы.СтраницыСбросить.ТекущаяСтраница = Форма.Элементы.ФлажокСброситьСкрыт; + Форма.Элементы.Далее.Доступность = Ложь; + Форма.Элементы.Сохранить.Доступность = Ложь; + КонецЕсли; КонецЕсли; - Вариант = Форма.ВариантыОтчета.НайтиПоИдентификатору(Форма.Контекст.ИдентификаторТекущейСтроки); - Если Вариант = Неопределено Тогда - Возврат; - КонецЕсли; - - ПравоНастройкиВарианта = ПравоНастройкиВарианта(Вариант, Форма.Контекст.ПолныеПраваНаВарианты); - ПравоЗаписиВарианта = ПравоЗаписиВарианта(Вариант, ПравоНастройкиВарианта); - Если ПравоЗаписиВарианта Тогда - Форма.ВариантСсылка = Вариант.Ссылка; - Форма.ВариантАвтор = Вариант.Автор; - Форма.ВариантНаименование = Вариант.Наименование; - Форма.ВариантОписание = Вариант.Описание; - Форма.ВариантТолькоДляАвтора = Вариант.ТолькоДляАвтора; - Форма.ВариантВидимостьПоУмолчанию = Вариант.ВидимостьПоУмолчанию; - Иначе - Форма.ВариантСсылка = Неопределено; - Форма.ВариантАвтор = Форма.Контекст.ТекущийПользователь; - Форма.ВариантНаименование = СформироватьСвободноеНаименование(Вариант, Форма.ВариантыОтчета); - Форма.ВариантОписание = ""; - Форма.ВариантТолькоДляАвтора = Истина; - Форма.ВариантВидимостьПоУмолчанию = Истина; - КонецЕсли; - - Форма.Доступен = ?(Форма.ВариантТолькоДляАвтора, "1", "2"); - - УстановитьЧтоБудетДальше(Форма, ЗначениеЗаполнено(Форма.ВариантСсылка)); КонецПроцедуры &НаКлиентеНаСервереБезКонтекста @@ -452,8 +481,8 @@ КонецФункции &НаКлиентеНаСервереБезКонтекста -Функция ПравоЗаписиВарианта(Вариант, ПравоНастройкиВарианта) - Возврат Вариант.Пользовательский И ПравоНастройкиВарианта; +Функция ПравоЗаписиВарианта(Вариант, ПолныеПраваНаВарианты) + Возврат Вариант.Пользовательский И ПравоНастройкиВарианта(Вариант, ПолныеПраваНаВарианты); КонецФункции &НаКлиентеНаСервереБезКонтекста @@ -477,15 +506,6 @@ КонецЦикла; КонецФункции -&НаКлиентеНаСервереБезКонтекста -Процедура УстановитьЧтоБудетДальше(Форма, Перезапись) - Если Перезапись Тогда - Форма.Элементы.ПерезаписьИлиНовый.ТекущаяСтраница = Форма.Элементы.Перезапись; - Иначе - Форма.Элементы.ПерезаписьИлиНовый.ТекущаяСтраница = Форма.Элементы.Новый; - КонецЕсли; -КонецПроцедуры - //////////////////////////////////////////////////////////////////////////////// // Вызов сервера @@ -508,12 +528,20 @@ КонецПроцедуры -&НаСервереБезКонтекста -Процедура УдалитьВариантНаСервере(Ссылка, ИндексКартинки, ПометкаУдаления) - ВариантОбъект = Ссылка.ПолучитьОбъект(); - ВариантОбъект.УстановитьПометкуУдаления(НЕ ВариантОбъект.ПометкаУдаления); - ПометкаУдаления = ВариантОбъект.ПометкаУдаления; - ИндексКартинки = ?(ПометкаУдаления, 4, ?(ВариантОбъект.Пользовательский, 3, 5)); +&НаСервере +Процедура УдалитьВариантНаСервере(Идентификатор) + Если Идентификатор = Неопределено Тогда + Возврат; + КонецЕсли; + Вариант = ВариантыОтчета.НайтиПоИдентификатору(Идентификатор); + Если Вариант = Неопределено Тогда + Возврат; + КонецЕсли; + ПометкаУдаления = Не Вариант.ПометкаУдаления; + ВариантОбъект = Вариант.Ссылка.ПолучитьОбъект(); + ВариантОбъект.УстановитьПометкуУдаления(ПометкаУдаления); + Вариант.ПометкаУдаления = ПометкаУдаления; + Вариант.ИндексКартинки = ?(ПометкаУдаления, 4, ?(ВариантОбъект.Пользовательский, 3, 5)); КонецПроцедуры &НаСервере @@ -533,8 +561,7 @@ ВариантЭтоНовый = НЕ ЗначениеЗаполнено(ВариантСсылка); Если ВариантЭтоНовый И ВариантыОтчетов.НаименованиеЗанято(Контекст.ОтчетСсылка, ВариантСсылка, ВариантНаименование) Тогда - ТекстОшибки = НСтр("ru = '""%1"" занято, необходимо указать другое Наименование.'"); - ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ТекстОшибки, ВариантНаименование); + ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = '""%1"" занято, необходимо указать другое Наименование.'"), ВариантНаименование); ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстОшибки, , "ВариантНаименование"); Пакет.Отказ = Истина; Возврат; @@ -547,7 +574,13 @@ ВариантОбъект.КлючВарианта = Строка(Новый УникальныйИдентификатор()); ВариантОбъект.Пользовательский = Истина; ВариантОбъект.Автор = Контекст.ТекущийПользователь; - ВариантОбъект.ЗаполнитьРодителя(); + Если ПрототипПредопределенный Тогда + ВариантОбъект.Родитель = ПрототипСсылка; + ИначеЕсли ТипЗнч(ПрототипСсылка) = Тип("СправочникСсылка.ВариантыОтчетов") И Не ПрототипСсылка.Пустая() Тогда + ВариантОбъект.Родитель = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(ПрототипСсылка, "Родитель"); + Иначе + ВариантОбъект.ЗаполнитьРодителя(); + КонецЕсли; Иначе ВариантОбъект = ВариантСсылка.ПолучитьОбъект(); КонецЕсли; @@ -567,18 +600,26 @@ ВариантСсылка = ВариантОбъект.Ссылка; ВариантКлючВарианта = ВариантОбъект.КлючВарианта; + + Если СброситьНастройки Тогда + ВариантыОтчетов.СброситьПользовательскиеНастройки(ВариантОбъект.Ссылка); + КонецЕсли; + КонецПроцедуры //////////////////////////////////////////////////////////////////////////////// // Сервер &НаСервере -Процедура ЗаполнитьСписокВариантов() +Процедура ЗаполнитьСписокВариантов(ОбновитьФорму) ТекущийКлючВарианта = ПрототипКлюч; - Если ЗначениеЗаполнено(Элементы.ВариантыОтчета.ТекущаяСтрока) Тогда - ТекущаяСтрока = ВариантыОтчета.НайтиПоИдентификатору(Элементы.ВариантыОтчета.ТекущаяСтрока); - Если ЗначениеЗаполнено(ТекущаяСтрока.КлючВарианта) Тогда + + // Подмена на ключ варианта "до перезаполнения". + ИдентификаторТекущейСтроки = Элементы.ВариантыОтчета.ТекущаяСтрока; + Если ИдентификаторТекущейСтроки <> Неопределено Тогда + ТекущаяСтрока = ВариантыОтчета.НайтиПоИдентификатору(ИдентификаторТекущейСтроки); + Если ТекущаяСтрока <> Неопределено Тогда ТекущийКлючВарианта = ТекущаяСтрока.КлючВарианта; КонецЕсли; КонецЕсли; @@ -624,11 +665,13 @@ | ИЛИ ВариантыОтчетов.Пользовательский = ИСТИНА) | И (ВариантыОтчетов.ТолькоДляАвтора = ЛОЖЬ | ИЛИ ВариантыОтчетов.Автор = &ТекущийПользователь + | ИЛИ ВариантыОтчетов.КлючВарианта = &ПрототипКлюч | ИЛИ ВариантыОтчетов.КлючВарианта = &ТекущийКлючВарианта) | И НЕ ВариантыОтчетов.ПредопределенныйВариант В (&ОтключенныеВариантыПрограммы)"; Запрос = Новый Запрос; Запрос.УстановитьПараметр("Отчет", Контекст.ОтчетСсылка); + Запрос.УстановитьПараметр("ПрототипКлюч", ПрототипКлюч); Запрос.УстановитьПараметр("ТекущийКлючВарианта", ТекущийКлючВарианта); Запрос.УстановитьПараметр("ТекущийПользователь", Контекст.ТекущийПользователь); Запрос.УстановитьПараметр("ОтключенныеВариантыПрограммы", ВариантыОтчетовПовтИсп.ОтключенныеВариантыПрограммы()); @@ -647,7 +690,7 @@ ВариантыОтчетов.ОшибкаПоВарианту(Неопределено, СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Не удалось получить список предопределенных вариантов - |внешнего отчета ""%1"":'"), + |внешнего отчета ""%1"":'"), Контекст.ОтчетСсылка) + Символы.ПС + ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); @@ -671,16 +714,21 @@ ВариантыОтчета.Сортировать("Наименование Возр"); - Контекст.ИдентификаторТекущейСтроки = -1; - Найденные = ВариантыОтчета.НайтиСтроки(Новый Структура("КлючВарианта", ТекущийКлючВарианта)); - Если Найденные.Количество() > 0 Тогда - Вариант = Найденные[0]; - ПрототипСсылка = Вариант.Ссылка; - ВариантОписание = Вариант.Описание; - Контекст.ИдентификаторТекущейСтроки = Вариант.ПолучитьИдентификатор(); - Элементы.ВариантыОтчета.ТекущаяСтрока = Контекст.ИдентификаторТекущейСтроки; - КонецЕсли; + Контекст.ПоискПоНаименованию = Новый Соответствие; + Для Каждого Вариант Из ВариантыОтчета Цикл + Идентификатор = Вариант.ПолучитьИдентификатор(); + Контекст.ПоискПоНаименованию.Вставить(Вариант.Наименование, Идентификатор); + Если Вариант.КлючВарианта = ПрототипКлюч Тогда + ПрототипСсылка = Вариант.Ссылка; + ПрототипПредопределенный = Не Вариант.Пользовательский; + КонецЕсли; + Если Вариант.КлючВарианта = ТекущийКлючВарианта Тогда + Элементы.ВариантыОтчета.ТекущаяСтрока = Идентификатор; + Контекст.ИдентификаторТекущейСтроки = Идентификатор; + КонецЕсли; + КонецЦикла; + ВидимостьДоступность(ЭтотОбъект, "ПослеЗаполненияСпискаВариантов"); КонецПроцедуры #КонецОбласти diff --git a/SSL/src/SettingsStorages/ХранилищеВариантовОтчетов/Forms/УсловияОтборовОтчета/Form.form b/SSL/src/SettingsStorages/ХранилищеВариантовОтчетов/Forms/УсловияОтборовОтчета/Form.form new file mode 100644 index 000000000..8b85f0b8e --- /dev/null +++ b/SSL/src/SettingsStorages/ХранилищеВариантовОтчетов/Forms/УсловияОтборовОтчета/Form.form @@ -0,0 +1,605 @@ +<?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> + + + Отборы + 28 + true + true + + true + + + Отборы + + None + Change + Copy + CopyToClipboard + EndEdit + HierarchicalList + List + MoveDown + MoveUp + OutputList + SelectAll + SortListAsc + SortListDesc + Tree + + ОтборыПредставление + 41 + true + true + + true + + + Отборы.ПредставлениеПоУмолчанию + + + ОтборыПредставлениеРасширеннаяПодсказка + 43 + Label + true + true + + Left + + + + ОтборыПредставлениеКонтекстноеМеню + 42 + true + + InputField + true + Auto + true + Left + true + + true + true + true + true + true + true + Normal + + + + ОтборыУсловие + 44 + true + true + + true + + + Отборы.ВидСравнения + + + ОтборыУсловиеРасширеннаяПодсказка + 46 + Label + true + true + + Left + + + + ОтборыУсловиеКонтекстноеМеню + 45 + true + + InputField + true + Auto + true + Left + true + + true + true + true + true + true + Normal + + + Top + + ОтборыКоманднаяПанель + 30 + Left + + + Selection + ОтборыВыбор + + + ОтборыСтрокаПоиска + 32 + + ОтборыСтрокаПоискаРасширеннаяПодсказка + 34 + Label + true + true + + Left + + + + ОтборыСтрокаПоискаКонтекстноеМеню + 33 + true + + Отборы + + true + + + + ОтборыСостояниеПросмотра + 35 + + ОтборыСостояниеПросмотраРасширеннаяПодсказка + 37 + Label + true + true + + Left + + + + ОтборыСостояниеПросмотраКонтекстноеМеню + 36 + true + + ViewStatusAddition + Отборы + + true + + + + ОтборыУправлениеПоиском + 38 + + ОтборыУправлениеПоискомРасширеннаяПодсказка + 40 + Label + true + true + + Left + + + + ОтборыУправлениеПоискомКонтекстноеМеню + 39 + true + + SearchControlAddition + Отборы + + true + + + + ОтборыРасширеннаяПодсказка + 31 + Label + true + true + + Left + + + + ОтборыКонтекстноеМеню + 29 + + Tree + true + true + true + true + true + AfterCurrentRow + MultiRow +
        true
        + 1 + 1 + AutoUse + true + true + false + true + false + false + DontUse + Auto + ExpandAllLevels + true + true + true + true + + CommonPicture.ПиктограммыПараметровИОтборов + + true +
        + + Группа1 + 47 + + ФормаВыбрать + 26 + true + true + + true + + + ФормаВыбратьРасширеннаяПодсказка + 27 + Label + true + true + + Left + + + Form.Command.Выбрать + Auto + true + true + true + UserCmds + Auto + + + Отмена + 49 + true + true + + true + + + ОтменаРасширеннаяПодсказка + 50 + Label + true + true + + Left + + + Form.StandardCommand.Cancel + Normal + Auto + true + true + UserCmds + Auto + + + Справка + 51 + true + true + + true + + + СправкаРасширеннаяПодсказка + 52 + Label + true + true + + Left + + + Form.StandardCommand.Help + Normal + Auto + true + true + UserCmds + Auto + InCommandBarAndInAdditionalSubmenu + + true + true + + true + + + Группа1РасширеннаяПодсказка + 48 + Label + true + true + + Left + + + CommandBar + + Right + + + + ФормаКоманднаяПанель + -1 + Left + + + OnCreateAtServer + ПриСозданииНаСервере + + 45 + LockOwner + true + Vertical + true + true + auto + true + + КомпоновщикНастроек + + <key>ru</key> + <value>Компоновщик настроек</value> + + 1 + + DataCompositionSettingsComposer + + + true + + + true + + + + НастройкиОтчета + + <key>ru</key> + <value>Настройки отчета</value> + + 3 + + + true + + + true + + + + ИмяТаблицы + + <key>ru</key> + <value>Имя таблицы</value> + + 4 + + String + + + + true + + + true + + + + ИдентификаторТекущегоУзлаКД + + <key>ru</key> + <value>Идентификатор текущего узла КД</value> + + 5 + + + true + + + true + + + + Картинки + + <key>ru</key> + <value>Картинки</value> + + 6 + + String + + + + true + + + true + + + + Режим + + <key>ru</key> + <value>Режим</value> + + 7 + + String + + + + true + + + true + + + + Отборы + + <key>ru</key> + <value>Отборы</value> + + 8 + + ValueTree + + + true + + + true + + + ИдентификаторКД + + <key>ru</key> + <value>Идентификатор КД</value> + + 1 + + + true + + + true + + + + ПредставлениеПоУмолчанию + + <key>ru</key> + <value>Поле</value> + + 3 + + String + + + + true + + + true + + + + ВидСравнения + + <key>ru</key> + <value>Условие</value> + + 7 + + DataCompositionComparisonType + + + true + + + true + + + + ТипЗначения + + <key>ru</key> + <value>Тип значения</value> + + 2 + + TypeDescription + + + true + + + true + + + + ИсходныйВидСравнения + + <key>ru</key> + <value>Исходный вид сравнения</value> + + 4 + + DataCompositionComparisonType + + + true + + + true + + + + + БыстрыйПоискПользовательскихНастроек + + <key>ru</key> + <value>Быстрый поиск пользовательских настроек</value> + + 9 + + String + + + + true + + + true + + + + Выбрать + + <key>ru</key> + <value>ОК</value> + + 1 + + ru + Выбрать + + + true + + + + Выбрать + + + DontUse + Auto + + + + + + diff --git a/SSL/src/SettingsStorages/ХранилищеВариантовОтчетов/Forms/УсловияОтборовОтчета/Help/ru.html b/SSL/src/SettingsStorages/ХранилищеВариантовОтчетов/Forms/УсловияОтборовОтчета/Help/ru.html new file mode 100644 index 000000000..377418645 --- /dev/null +++ b/SSL/src/SettingsStorages/ХранилищеВариантовОтчетов/Forms/УсловияОтборовОтчета/Help/ru.html @@ -0,0 +1,6 @@ + +

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

        +

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

        +
        • Поле - поле отчета, по которому предусмотрен отбор; +
        • Условие - выводится вид сравнения по данному полю.

        Изменение условия

        +
        • С помощью двойного щелчка мыши по условию открывается список, из которого можно выбрать новое условие для отбора по соответствующему полю. 
        \ No newline at end of file diff --git a/SSL/src/SettingsStorages/ХранилищеВариантовОтчетов/Forms/УсловияОтборовОтчета/Module.bsl b/SSL/src/SettingsStorages/ХранилищеВариантовОтчетов/Forms/УсловияОтборовОтчета/Module.bsl new file mode 100644 index 000000000..b7b1cface --- /dev/null +++ b/SSL/src/SettingsStorages/ХранилищеВариантовОтчетов/Forms/УсловияОтборовОтчета/Module.bsl @@ -0,0 +1,128 @@ +//////////////////////////////////////////////////////////////////////////////// +// ФОРМА + +#Область ОбработчикиСобытийФормы + +&НаСервере +Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) + Если Параметры.Свойство("АвтоТест") Тогда + Возврат; + КонецЕсли; + + Если Не Параметры.Свойство("КомпоновщикНастроек", КомпоновщикНастроек) Тогда + ВызватьИсключение НСтр("ru = 'Не передан служебный параметр ""КомпоновщикНастроек"".'"); + КонецЕсли; + Если Не Параметры.Свойство("НастройкиОтчета", НастройкиОтчета) Тогда + ВызватьИсключение НСтр("ru = 'Не передан служебный параметр ""НастройкиОтчета"".'"); + КонецЕсли; + + ТолькоБыстрые = ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(Параметры, "ТолькоБыстрые", Ложь); + + Источник = Новый ИсточникДоступныхНастроекКомпоновкиДанных(НастройкиОтчета.АдресСхемы); + КомпоновщикНастроек.Инициализировать(Источник); + + ОтчетОбъектИлиПолноеИмя = НастройкиОтчета.ПолноеИмя; // Копирование, чтобы объект отчета не приехал в клиентскую структуру. + + УсловияВывода = Новый Структура; + УсловияВывода.Вставить("ТолькоПользовательские", Истина); + УсловияВывода.Вставить("ТолькоБыстрые", ТолькоБыстрые); + УсловияВывода.Вставить("ИдентификаторТекущегоУзлаКД", Неопределено); + Информация = ОтчетыСервер.РасширеннаяИнформацияОНастройках(КомпоновщикНастроек, НастройкиОтчета, ОтчетОбъектИлиПолноеИмя, УсловияВывода); + + ВыводимыеНастройки = Информация.ПользовательскиеНастройки.Скопировать(Новый Структура("ВыводРазрешен", Истина)); + ВыводимыеНастройки.Сортировать("ИндексВКоллекции Возр"); + + НаборСтрок = Отборы.ПолучитьЭлементы(); + + ВыводимыеТипыНастроек = Новый Массив; + ВыводимыеТипыНастроек.Добавить("ЭлементОтбора"); + Для Каждого СвойстваНастройки Из ВыводимыеНастройки Цикл + Если ВыводимыеТипыНастроек.Найти(СвойстваНастройки.Тип) = Неопределено Тогда + Продолжить; + КонецЕсли; + СтрокаТаблицы = НаборСтрок.Добавить(); + ЗаполнитьЗначенияСвойств(СтрокаТаблицы, СвойстваНастройки, "ПредставлениеПоУмолчанию, ВидСравнения, ИдентификаторКД"); + СтрокаТаблицы.ТипЗначения = СвойстваНастройки.ОписаниеТипов; + СтрокаТаблицы.ИсходныйВидСравнения = СтрокаТаблицы.ВидСравнения; + КонецЦикла; + + ЗакрыватьПриВыборе = Ложь; + +КонецПроцедуры + +#КонецОбласти + +//////////////////////////////////////////////////////////////////////////////// +// ТАБЛИЦА ОтборыТаблица + +#Область ОбработчикиСобытийЭлементовТаблицыФормыОтборыТаблица + +&НаКлиенте +Процедура ОтборыВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка) + СтандартнаяОбработка = Ложь; + + СтрокаТаблицы = Элементы.Отборы.ТекущиеДанные; + Если СтрокаТаблицы = Неопределено Тогда + Возврат; + КонецЕсли; + + ИмяКолонки = Поле.Имя; + Если ИмяКолонки = "ОтборыУсловие" Тогда + Контекст = Новый Структура; + Контекст.Вставить("СтрокаТаблицы", СтрокаТаблицы); + Обработчик = Новый ОписаниеОповещения("ПослеВыбораВидаСравнения", ЭтотОбъект, Контекст); + + Список = ОтчетыКлиентСервер.СписокВыбораВидовСравнения(СтрокаТаблицы.ТипЗначения); + + ЭлементСписка = Список.НайтиПоЗначению(СтрокаТаблицы.ВидСравнения); + Если ЭлементСписка <> Неопределено Тогда + ЭлементСписка.Картинка = БиблиотекаКартинок.Пометка; + КонецЕсли; + + ПоказатьВыборИзМеню(Обработчик, Список); + КонецЕсли; +КонецПроцедуры + +&НаКлиенте +Процедура ПослеВыбораВидаСравнения(ЭлементСписка, Контекст) Экспорт + Если ЭлементСписка = Неопределено Тогда + Возврат; + КонецЕсли; + Контекст.СтрокаТаблицы.ВидСравнения = ЭлементСписка.Значение; +КонецПроцедуры + +#КонецОбласти + +//////////////////////////////////////////////////////////////////////////////// +// КОМАНДЫ + +#Область ОбработчикиКомандФормы + +&НаКлиенте +Процедура Выбрать(Команда) + ВыбратьИЗакрыть(); +КонецПроцедуры + +#КонецОбласти + +//////////////////////////////////////////////////////////////////////////////// +// ВСПОМОГАТЕЛЬНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ + +#Область СлужебныеПроцедурыИФункции + +//////////////////////////////////////////////////////////////////////////////// +// Клиент + +&НаКлиенте +Процедура ВыбратьИЗакрыть() + Результат = Новый Соответствие; + Для Каждого СтрокаТаблицы Из Отборы.ПолучитьЭлементы() Цикл + Если СтрокаТаблицы.ИсходныйВидСравнения <> СтрокаТаблицы.ВидСравнения Тогда + Результат.Вставить(СтрокаТаблицы.ИдентификаторКД, СтрокаТаблицы.ВидСравнения); + КонецЕсли; + КонецЦикла; + ОповеститьОВыборе(Результат); + Закрыть(Результат); +КонецПроцедуры + +#КонецОбласти diff --git a/SSL/src/SettingsStorages/ХранилищеВариантовОтчетов/Forms/ЭлементУсловногоОформленияОтчета/Form.form b/SSL/src/SettingsStorages/ХранилищеВариантовОтчетов/Forms/ЭлементУсловногоОформленияОтчета/Form.form index 766d037a7..19ed48697 100644 --- a/SSL/src/SettingsStorages/ХранилищеВариантовОтчетов/Forms/ЭлементУсловногоОформленияОтчета/Form.form +++ b/SSL/src/SettingsStorages/ХранилищеВариантовОтчетов/Forms/ЭлементУсловногоОформленияОтчета/Form.form @@ -1,9 +1,54 @@ - - - <key>ru</key> - <value>Оформление полей отчета</value> - + + + Наименование + 93 + true + true + + true + + + Наименование + + + OnChange + НаименованиеПриИзменении + + + НаименованиеРасширеннаяПодсказка + 95 + Label + true + true + + Left + + + + НаименованиеКонтекстноеМеню + 94 + true + + InputField + Enter + true + Left + true + + true + true + true + true + true + true + Normal + + ru + Представление элемента условного оформления в настройках отчета + + + Страницы 20 @@ -22,12 +67,228 @@ КомпоновщикНастроек.Settings.ConditionalAppearance[0].Appearance None + UserSettingItemProperties + + ОформлениеГруппа1 + 201 + + ОформлениеИспользование + 96 + true + true + + true + + + КомпоновщикНастроек.Settings.ConditionalAppearance[0].Appearance.Use + + None + + ОформлениеИспользованиеРасширеннаяПодсказка + 98 + Label + true + true + + Left + + + + ОформлениеИспользованиеКонтекстноеМеню + 97 + true + + CheckBoxField + true + Left + true + + + + ОформлениеПараметр + 105 + true + true + + true + + + КомпоновщикНастроек.Settings.ConditionalAppearance[0].Appearance.Parameter + + + ОформлениеПараметрРасширеннаяПодсказка + 107 + Label + true + true + + Left + + + + ОформлениеПараметрКонтекстноеМеню + 106 + true + + InputField + Enter + true + Left + true + + true + true + false + true + true + true + true + Normal + + + true + true + + true + + + ОформлениеГруппа1РасширеннаяПодсказка + 202 + Label + true + true + + Left + + + ColumnGroup + + InCell + auto + true + + + + ОформлениеГруппаКолонокЗначениеПараметра + 108 + + ОформлениеКартинкаЗначения + 110 + true + true + + true + + + КомпоновщикНастроек.Settings.ConditionalAppearance[0].Appearance.ValuePicture + + + ОформлениеКартинкаЗначенияРасширеннаяПодсказка + 112 + Label + true + true + + Left + + + + ОформлениеКартинкаЗначенияКонтекстноеМеню + 111 + true + + PictureField + Enter + Left + + true + true + true + true + + + 1 + + + + + ОформлениеЗначение + 113 + true + true + + true + + + КомпоновщикНастроек.Settings.ConditionalAppearance[0].Appearance.Value + + + ОформлениеЗначениеРасширеннаяПодсказка + 115 + Label + true + true + + Left + + + + ОформлениеЗначениеКонтекстноеМеню + 114 + true + + InputField + Auto + true + Left + true + + true + true + true + true + FoldersAndItems + true + true + true + Normal + + + true + true + + true + + + <key>ru</key> + <value>Значение</value> + + + ОформлениеГруппаКолонокЗначениеПараметраРасширеннаяПодсказка + 109 + Label + true + true + + Left + + + ColumnGroup + + InCell + auto + true + + ОформлениеКоманднаяПанель 74 Left - true + + OnChange + ОформлениеПриИзменении + ОформлениеСтрокаПоиска 76 @@ -115,21 +376,18 @@ true Tree - true true true - 50 true true true MultiRow -
        true
        1 1 - AutoUse AutoUse true true + false false Auto Auto @@ -167,167 +425,6 @@ auto
        - - СтраницаОформляемыеПоля - 28 - - ОформляемыеПоля - 30 - true - true - - true - - - КомпоновщикНастроек.Settings.ConditionalAppearance[0].Fields - - None - - ОформляемыеПоляКоманднаяПанель - 32 - Left - true - - - ОформляемыеПоляСтрокаПоиска - 34 - - ОформляемыеПоляСтрокаПоискаРасширеннаяПодсказка - 38 - Label - true - true - - Left - - - - ОформляемыеПоляСтрокаПоискаКонтекстноеМеню - 37 - true - - ОформляемыеПоля - - true - - - - ОформляемыеПоляСостояниеПросмотра - 39 - - ОформляемыеПоляСостояниеПросмотраРасширеннаяПодсказка - 43 - Label - true - true - - Left - - - - ОформляемыеПоляСостояниеПросмотраКонтекстноеМеню - 42 - true - - ViewStatusAddition - ОформляемыеПоля - - true - - - - ОформляемыеПоляУправлениеПоиском - 44 - - ОформляемыеПоляУправлениеПоискомРасширеннаяПодсказка - 48 - Label - true - true - - Left - - - - ОформляемыеПоляУправлениеПоискомКонтекстноеМеню - 47 - true - - SearchControlAddition - ОформляемыеПоля - - true - - - - ОформляемыеПоляРасширеннаяПодсказка - 33 - Label - true - true - - Left - - - - ОформляемыеПоляКонтекстноеМеню - 31 - true - - true - true - true - 60 - true - true - 10 - true - MultiRow -
        true
        - 1 - 1 - AutoUse - AutoUse - true - true - false - Auto - Auto - true - true - true - true - true -
        - true - true - - true - - - <key>ru</key> - <value>Оформляемые поля</value> - - - ru - Страница оформляемые поля - - - СтраницаОформляемыеПоляРасширеннаяПодсказка - 29 - Label - true - true - - Left - - - Page - - Vertical - auto - -
        СтраницаОтбор 49 @@ -343,12 +440,1090 @@ КомпоновщикНастроек.Settings.ConditionalAppearance[0].Filter None + Detailed + HierarchicalList + List + SetPresentation + Tree + UserSettingItemProperties + + ОтборИспользование + 214 + true + true + + true + + + КомпоновщикНастроек.Settings.ConditionalAppearance[0].Filter.Use + + None + + ОтборИспользованиеРасширеннаяПодсказка + 216 + Label + true + true + + Left + + + + ОтборИспользованиеКонтекстноеМеню + 215 + true + + CheckBoxField + true + Left + true + + + + ОтборГруппаКолонокОтбор + 217 + + ОтборГруппаКолонокОсновныеЭлементыОтбора + 224 + + ОтборГруппаКолонокЛевоеЗначение + 229 + + ОтборКартинкаЛевогоЗначения + 231 + true + true + + true + + + КомпоновщикНастроек.Settings.ConditionalAppearance[0].Filter.LeftValuePicture + + + ОтборКартинкаЛевогоЗначенияРасширеннаяПодсказка + 233 + Label + true + true + + Left + + + + ОтборКартинкаЛевогоЗначенияКонтекстноеМеню + 232 + true + + PictureField + Enter + Left + + true + true + true + true + + + 1 + + + + + ОтборЛевоеЗначение + 234 + true + true + + true + + + КомпоновщикНастроек.Settings.ConditionalAppearance[0].Filter.LeftValue + + + ОтборЛевоеЗначениеРасширеннаяПодсказка + 236 + Label + true + true + + Left + + + + ОтборЛевоеЗначениеКонтекстноеМеню + 235 + true + + InputField + Enter + true + Left + true + + 10 + true + true + true + true + true + OnActivate + true + true + Normal + + + true + true + + true + + + <key>ru</key> + <value>Левое значение</value> + + + ОтборГруппаКолонокЛевоеЗначениеРасширеннаяПодсказка + 230 + Label + true + true + + Left + + + ColumnGroup + + InCell + auto + true + + + + ОтборВидСравнения + 237 + true + true + + true + + + КомпоновщикНастроек.Settings.ConditionalAppearance[0].Filter.ComparisonType + + + ОтборВидСравненияРасширеннаяПодсказка + 239 + Label + true + true + + Left + + + + ОтборВидСравненияКонтекстноеМеню + 238 + true + + InputField + Auto + true + Left + true + + 5 + true + true + true + true + true + true + Normal + + + + ОтборГруппаКолонокПравоеЗначение + 240 + + ОтборКартинкаПравогоЗначения + 242 + true + true + + true + + + КомпоновщикНастроек.Settings.ConditionalAppearance[0].Filter.RightValuePicture + + + ОтборКартинкаПравогоЗначенияРасширеннаяПодсказка + 244 + Label + true + true + + Left + + + + ОтборКартинкаПравогоЗначенияКонтекстноеМеню + 243 + true + + PictureField + Enter + Left + + true + true + true + true + + + 1 + + + + + ОтборПравоеЗначение + 245 + true + true + + true + + + КомпоновщикНастроек.Settings.ConditionalAppearance[0].Filter.RightValue + + + ОтборПравоеЗначениеРасширеннаяПодсказка + 247 + Label + true + true + + Left + + + + ОтборПравоеЗначениеКонтекстноеМеню + 246 + true + + InputField + Auto + true + Left + true + + 10 + true + true + true + FoldersAndItems + true + true + true + Normal + + + true + true + + true + + + <key>ru</key> + <value>Правое значение</value> + + + ОтборГруппаКолонокПравоеЗначениеРасширеннаяПодсказка + 241 + Label + true + true + + Left + + + ColumnGroup + + InCell + auto + true + + + + ОтборДата + 248 + true + true + + true + + + КомпоновщикНастроек.Settings.ConditionalAppearance[0].Filter.Date + + + ОтборДатаРасширеннаяПодсказка + 250 + Label + true + true + + Left + + + + ОтборДатаКонтекстноеМеню + 249 + true + + InputField + Auto + true + Left + true + + 10 + true + true + true + true + true + true + Normal + + + true + true + + true + + + <key>ru</key> + <value>Основные элементы отбора</value> + + + ОтборГруппаКолонокОсновныеЭлементыОтбораРасширеннаяПодсказка + 225 + Label + true + true + + Left + + + ColumnGroup + + auto + true + + + + ОтборТипГруппы + 226 + true + true + + true + + + КомпоновщикНастроек.Settings.ConditionalAppearance[0].Filter.GroupType + + + ОтборТипГруппыРасширеннаяПодсказка + 228 + Label + true + true + + Left + + + + ОтборТипГруппыКонтекстноеМеню + 227 + true + + InputField + Auto + true + Left + true + + true + true + true + true + true + true + Normal + + + + ОтборГруппа6 + 329 + + ОтборГруппаКолонокПрименение + 219 + + ОтборПрименение + 251 + true + true + + true + + + КомпоновщикНастроек.Settings.ConditionalAppearance[0].Filter.Application + + + ОтборПрименениеРасширеннаяПодсказка + 253 + Label + true + true + + Left + + + + ОтборПрименениеКонтекстноеМеню + 252 + true + + InputField + Auto + true + Left + true + + 5 + true + true + true + true + true + true + Normal + + + + ОтборРежимОтображения + 254 + true + true + + true + + + КомпоновщикНастроек.Settings.ConditionalAppearance[0].Filter.ViewMode + + + ОтборРежимОтображенияРасширеннаяПодсказка + 256 + Label + true + true + + Left + + + + ОтборРежимОтображенияКонтекстноеМеню + 255 + true + + InputField + Auto + true + Left + true + + 5 + true + true + true + true + true + true + Normal + + + true + true + + true + + + <key>ru</key> + <value>Применение</value> + + + ОтборГруппаКолонокПрименениеРасширеннаяПодсказка + 220 + Label + true + true + + Left + + + ColumnGroup + + Vertical + auto + true + + + + ОтборПредставление + 221 + true + true + + true + + + КомпоновщикНастроек.Settings.ConditionalAppearance[0].Filter.Presentation + + + ОтборПредставлениеРасширеннаяПодсказка + 223 + Label + true + true + + Left + + + + ОтборПредставлениеКонтекстноеМеню + 222 + true + + InputField + Auto + true + Left + true + + true + true + true + true + true + true + Normal + + + true + true + + true + + + ОтборГруппа6РасширеннаяПодсказка + 330 + Label + true + true + + Left + + + ColumnGroup + + Vertical + auto + true + + + true + true + + true + + + <key>ru</key> + <value>Отбор</value> + + + ОтборГруппаКолонокОтборРасширеннаяПодсказка + 218 + Label + true + true + + Left + + + ColumnGroup + + Vertical + auto + true + + ОтборКоманднаяПанель 53 + + ОтборГруппа1 + 281 + + ОтборДобавитьЭлементОтбора + 293 + + <key>ru</key> + <value>Добавить</value> + + true + true + + true + + + ОтборДобавитьЭлементОтбораРасширеннаяПодсказка + 294 + Label + true + true + + Left + + + Form.Item.Отбор.StandardCommand.AddFilterItem + Normal + Auto + true + true + UserCmds + Auto + + true + true + + true + + + ОтборГруппа1РасширеннаяПодсказка + 282 + Label + true + true + + Left + + + + + + ОтборГруппа4 + 303 + + ОтборСгруппироватьЭлементыОтбора + 305 + + <key>ru</key> + <value>Сгруппировать</value> + + true + true + + true + + + ОтборСгруппироватьЭлементыОтбораРасширеннаяПодсказка + 306 + Label + true + true + + Left + + + Form.Item.Отбор.StandardCommand.GroupFilterItems + Normal + Picture + true + true + UserCmds + Auto + InCommandBarAndInAdditionalSubmenu + + + ОтборРазгруппировать + 307 + true + true + + true + + + ОтборРазгруппироватьРасширеннаяПодсказка + 308 + Label + true + true + + Left + + + Form.Item.Отбор.StandardCommand.Ungroup + Normal + Picture + true + true + UserCmds + Auto + InCommandBarAndInAdditionalSubmenu + + true + true + + true + + + ОтборГруппа4РасширеннаяПодсказка + 304 + Label + true + true + + Left + + + + + + ОтборГруппа3 + 291 + + ОтборПереместитьВверх + 299 + true + true + + true + + + ОтборПереместитьВверхРасширеннаяПодсказка + 300 + Label + true + true + + Left + + + Form.Item.Отбор.StandardCommand.MoveUp + Normal + Auto + true + true + UserCmds + Auto + InCommandBarAndInAdditionalSubmenu + + + ОтборПереместитьВниз + 301 + true + true + + true + + + ОтборПереместитьВнизРасширеннаяПодсказка + 302 + Label + true + true + + Left + + + Form.Item.Отбор.StandardCommand.MoveDown + Normal + Auto + true + true + UserCmds + Auto + InCommandBarAndInAdditionalSubmenu + + true + true + + true + + + ОтборГруппа3РасширеннаяПодсказка + 292 + Label + true + true + + Left + + + + + + ОтборГруппа2 + 285 + + ОтборУстановитьФлажки + 295 + true + true + + true + + + ОтборУстановитьФлажкиРасширеннаяПодсказка + 296 + Label + true + true + + Left + + + Form.Item.Отбор.StandardCommand.CheckAll + Normal + Auto + true + true + UserCmds + Auto + + + ОтборСнятьФлажки + 297 + true + true + + true + + + ОтборСнятьФлажкиРасширеннаяПодсказка + 298 + Label + true + true + + Left + + + Form.Item.Отбор.StandardCommand.UncheckAll + Normal + Auto + true + true + UserCmds + Auto + + true + true + + true + + + ОтборГруппа2РасширеннаяПодсказка + 286 + Label + true + true + + Left + + + + + + ОтборГруппа5 + 309 + + ОтборДобавитьГруппуЭлементовОтбора + 311 + true + true + + true + + + ОтборДобавитьГруппуЭлементовОтбораРасширеннаяПодсказка + 312 + Label + true + true + + Left + + + Form.Item.Отбор.StandardCommand.AddFilterItemGroup + Normal + Auto + true + true + UserCmds + Auto + + + ОтборСкопировать + 313 + true + true + + true + + + ОтборСкопироватьРасширеннаяПодсказка + 314 + Label + true + true + + Left + + + Form.Item.Отбор.StandardCommand.Copy + Normal + Auto + true + true + UserCmds + Auto + + + ОтборИзменить + 315 + true + true + + true + + + ОтборИзменитьРасширеннаяПодсказка + 316 + Label + true + true + + Left + + + Form.Item.Отбор.StandardCommand.Change + Normal + Auto + true + true + UserCmds + Auto + + + ОтборУдалить + 317 + true + true + + true + + + ОтборУдалитьРасширеннаяПодсказка + 318 + Label + true + true + + Left + + + Form.Item.Отбор.StandardCommand.Delete + Normal + Auto + true + true + UserCmds + Auto + + + ОтборЗакончитьРедактирование + 319 + true + true + + true + + + ОтборЗакончитьРедактированиеРасширеннаяПодсказка + 320 + Label + true + true + + Left + + + Form.Item.Отбор.StandardCommand.EndEdit + Normal + Auto + true + true + UserCmds + Auto + + + ОтборИспользоватьВКачествеЗначенияПоле + 321 + true + true + + true + + + ОтборИспользоватьВКачествеЗначенияПолеРасширеннаяПодсказка + 322 + Label + true + true + + Left + + + Form.Item.Отбор.StandardCommand.UseFieldAsValue + Normal + Auto + true + true + UserCmds + Auto + + true + true + + true + + + ОтборГруппа5РасширеннаяПодсказка + 310 + Label + true + true + + Left + + + + Left - true + + OnChange + ОтборПриИзменении + ОтборСтрокаПоиска 55 @@ -436,7 +1611,6 @@ true Tree - true true true true @@ -469,7 +1643,7 @@
        <key>ru</key> - <value>Фильтр</value> + <value>Условие</value> ru @@ -491,9 +1665,1101 @@ auto
        + + СтраницаОформляемыеПоля + 28 + + ОформляемыеПоля + 30 + true + true + + true + + + КомпоновщикНастроек.Settings.ConditionalAppearance[0].Fields + + None + + ОформляемыеПоляГруппаКолонокПоле + 206 + + ОформляемыеПоляИспользование + 203 + true + true + + true + + + КомпоновщикНастроек.Settings.ConditionalAppearance[0].Fields.Use + + None + + ОформляемыеПоляИспользованиеРасширеннаяПодсказка + 205 + Label + true + true + + Left + + + + ОформляемыеПоляИспользованиеКонтекстноеМеню + 204 + true + + CheckBoxField + true + Left + true + + + + ОформляемыеПоляПоле + 211 + true + true + + true + + + КомпоновщикНастроек.Settings.ConditionalAppearance[0].Fields.Field + + + ОформляемыеПоляПолеРасширеннаяПодсказка + 213 + Label + true + true + + Left + + + + ОформляемыеПоляПолеКонтекстноеМеню + 212 + true + + InputField + Enter + true + Left + true + + true + true + true + true + OnActivate + true + true + Normal + + + true + true + + true + + + <key>ru</key> + <value>Поле</value> + + + ОформляемыеПоляГруппаКолонокПолеРасширеннаяПодсказка + 207 + Label + true + true + + Left + + + ColumnGroup + + InCell + auto + true + + + + ОформляемыеПоляКоманднаяПанель + 32 + + ОформляемыеПоляГруппа2 + 263 + + ОформляемыеПоляДобавить + 265 + true + true + + true + + + ОформляемыеПоляДобавитьРасширеннаяПодсказка + 266 + Label + true + true + + Left + + + Form.Item.ОформляемыеПоля.StandardCommand.Add + Normal + Auto + true + true + UserCmds + Auto + + true + true + + true + + + ОформляемыеПоляГруппа2РасширеннаяПодсказка + 264 + Label + true + true + + Left + + + + + + ОформляемыеПоляГруппа1 + 257 + + ОформляемыеПоляУстановитьФлажки + 259 + true + true + + true + + + ОформляемыеПоляУстановитьФлажкиРасширеннаяПодсказка + 260 + Label + true + true + + Left + + + Form.Item.ОформляемыеПоля.StandardCommand.CheckAll + Normal + Auto + true + true + UserCmds + Auto + InCommandBarAndInAdditionalSubmenu + + + ОформляемыеПоляСнятьФлажки + 261 + true + true + + true + + + ОформляемыеПоляСнятьФлажкиРасширеннаяПодсказка + 262 + Label + true + true + + Left + + + Form.Item.ОформляемыеПоля.StandardCommand.UncheckAll + Normal + Auto + true + true + UserCmds + Auto + InCommandBarAndInAdditionalSubmenu + + true + true + + true + + + ОформляемыеПоляГруппа1РасширеннаяПодсказка + 258 + Label + true + true + + Left + + + + + + ОформляемыеПоляГруппа3 + 269 + + ОформляемыеПоляСкопировать + 271 + true + true + + true + + + ОформляемыеПоляСкопироватьРасширеннаяПодсказка + 272 + Label + true + true + + Left + + + Form.Item.ОформляемыеПоля.StandardCommand.Copy + Normal + Auto + true + true + UserCmds + Auto + + + ОформляемыеПоляИзменить + 273 + true + true + + true + + + ОформляемыеПоляИзменитьРасширеннаяПодсказка + 274 + Label + true + true + + Left + + + Form.Item.ОформляемыеПоля.StandardCommand.Change + Normal + Auto + true + true + UserCmds + Auto + + + ОформляемыеПоляУдалить + 267 + true + true + + true + + + ОформляемыеПоляУдалитьРасширеннаяПодсказка + 268 + Label + true + true + + Left + + + Form.Item.ОформляемыеПоля.StandardCommand.Delete + Normal + Auto + true + true + UserCmds + Auto + + true + true + + true + + + ОформляемыеПоляГруппа3РасширеннаяПодсказка + 270 + Label + true + true + + Left + + + + + + ОформляемыеПоляГруппа4 + 275 + + ОформляемыеПоляПереместитьВверх + 277 + true + true + + true + + + ОформляемыеПоляПереместитьВверхРасширеннаяПодсказка + 278 + Label + true + true + + Left + + + Form.Item.ОформляемыеПоля.StandardCommand.MoveUp + Normal + Auto + true + true + UserCmds + Auto + + + ОформляемыеПоляПереместитьВниз + 279 + true + true + + true + + + ОформляемыеПоляПереместитьВнизРасширеннаяПодсказка + 280 + Label + true + true + + Left + + + Form.Item.ОформляемыеПоля.StandardCommand.MoveDown + Normal + Auto + true + true + UserCmds + Auto + + true + true + + true + + + ОформляемыеПоляГруппа4РасширеннаяПодсказка + 276 + Label + true + true + + Left + + + + + Left + + + OnChange + ОформляемыеПоляПриИзменении + + + ОформляемыеПоляСтрокаПоиска + 34 + + ОформляемыеПоляСтрокаПоискаРасширеннаяПодсказка + 38 + Label + true + true + + Left + + + + ОформляемыеПоляСтрокаПоискаКонтекстноеМеню + 37 + true + + ОформляемыеПоля + + true + + + + ОформляемыеПоляСостояниеПросмотра + 39 + + ОформляемыеПоляСостояниеПросмотраРасширеннаяПодсказка + 43 + Label + true + true + + Left + + + + ОформляемыеПоляСостояниеПросмотраКонтекстноеМеню + 42 + true + + ViewStatusAddition + ОформляемыеПоля + + true + + + + ОформляемыеПоляУправлениеПоиском + 44 + + ОформляемыеПоляУправлениеПоискомРасширеннаяПодсказка + 48 + Label + true + true + + Left + + + + ОформляемыеПоляУправлениеПоискомКонтекстноеМеню + 47 + true + + SearchControlAddition + ОформляемыеПоля + + true + + + + ОформляемыеПоляРасширеннаяПодсказка + 33 + Label + true + true + + Left + + + + ОформляемыеПоляКонтекстноеМеню + 31 + true + + true + true + true + true + true + MultiRow + 1 + 1 + AutoUse + AutoUse + true + true + false + false + false + Auto + Auto + true + true + true + true + + КомпоновщикНастроек.Settings.ConditionalAppearance[0].Fields.FieldPicture + + true + + true + true + + true + + + <key>ru</key> + <value>Оформляемые поля</value> + + + ru + Страница оформляемые поля + + + СтраницаОформляемыеПоляРасширеннаяПодсказка + 29 + Label + true + true + + Left + + + Page + + Vertical + auto + + СтраницаДополнительно 91 + + Группа1 + 156 + + Декорация1 + 153 + + <key>ru</key> + <value>Показывать:</value> + + true + true + + true + + + Декорация1РасширеннаяПодсказка + 155 + Label + true + true + + Left + + + + Декорация1КонтекстноеМеню + 154 + true + + Label + true + true + + Style.NormalTextFont + 12.0 + + + Left + Center + + + + Декорация3 + 194 + true + true + + true + + + Декорация3РасширеннаяПодсказка + 196 + Label + true + true + + Left + + + + Декорация3КонтекстноеМеню + 195 + true + + Label + 6 + true + true + + Left + + + + Группа5 + 199 + + Показывать_УстановитьПометки + 190 + true + true + + true + + + Показывать_УстановитьПометкиРасширеннаяПодсказка + 191 + Label + true + true + + Left + + + Form.Command.Показывать_УстановитьПометки + Normal + Auto + true + true + UserCmds + Auto + + + Показывать_СнятьПометки + 188 + true + true + + true + + + Показывать_СнятьПометкиРасширеннаяПодсказка + 189 + Label + true + true + + Left + + + Form.Command.Показывать_СнятьПометки + Normal + Auto + true + true + UserCmds + Auto + + true + true + + true + + false + + Группа5РасширеннаяПодсказка + 200 + Label + true + true + + Left + + + CommandBar + + Left + + + true + true + + true + + + Группа1РасширеннаяПодсказка + 157 + Label + true + true + + Left + + + UsualGroup + + Auto + true + true + Auto + Auto + + + + Группа3 + 160 + + Декорация2 + 162 + true + true + + true + + + Декорация2РасширеннаяПодсказка + 164 + Label + true + true + + Left + + + + Декорация2КонтекстноеМеню + 163 + true + + Label + 1 + true + true + + Left + + + + ГруппаОбластьОтображения + 165 + + ИспользоватьВГруппировке + 185 + true + true + + true + + + ИспользоватьВГруппировке + + Right + + OnChange + ИспользоватьВГруппировкеПриИзменении + + + ИспользоватьВГруппировкеРасширеннаяПодсказка + 187 + Label + true + true + + Left + + + + ИспользоватьВГруппировкеКонтекстноеМеню + 186 + true + + CheckBoxField + Enter + true + Left + true + + + + ИспользоватьВИерархическойГруппировке + 176 + true + true + + true + + + ИспользоватьВИерархическойГруппировке + + Right + + OnChange + ИспользоватьВИерархическойГруппировкеПриИзменении + + + ИспользоватьВИерархическойГруппировкеРасширеннаяПодсказка + 178 + Label + true + true + + Left + + + + ИспользоватьВИерархическойГруппировкеКонтекстноеМеню + 177 + true + + CheckBoxField + Enter + true + Left + true + + + + ИспользоватьВОбщемИтоге + 173 + true + true + + true + + + ИспользоватьВОбщемИтоге + + Right + + OnChange + ИспользоватьВОбщемИтогеПриИзменении + + + ИспользоватьВОбщемИтогеРасширеннаяПодсказка + 175 + Label + true + true + + Left + + + + ИспользоватьВОбщемИтогеКонтекстноеМеню + 174 + true + + CheckBoxField + Enter + true + Left + true + + + + ИспользоватьВЗаголовкеПолей + 179 + true + true + + true + + + ИспользоватьВЗаголовкеПолей + + Right + + OnChange + ИспользоватьВЗаголовкеПолейПриИзменении + + + ИспользоватьВЗаголовкеПолейРасширеннаяПодсказка + 181 + Label + true + true + + Left + + + + ИспользоватьВЗаголовкеПолейКонтекстноеМеню + 180 + true + + CheckBoxField + Enter + true + Left + true + + + + ИспользоватьВЗаголовке + 182 + true + true + + true + + + ИспользоватьВЗаголовке + + Right + + OnChange + ИспользоватьВЗаголовкеПриИзменении + + + ИспользоватьВЗаголовкеРасширеннаяПодсказка + 184 + Label + true + true + + Left + + + + ИспользоватьВЗаголовкеКонтекстноеМеню + 183 + true + + CheckBoxField + Enter + true + Left + true + + + + ИспользоватьВПараметрах + 167 + true + true + + true + + + ИспользоватьВПараметрах + + Right + + OnChange + ИспользоватьВПараметрахПриИзменении + + + ИспользоватьВПараметрахРасширеннаяПодсказка + 169 + Label + true + true + + Left + + + + ИспользоватьВПараметрахКонтекстноеМеню + 168 + true + + CheckBoxField + Enter + true + Left + true + + + + ИспользоватьВОтборе + 170 + true + true + + true + + + ИспользоватьВОтборе + + Right + + OnChange + ИспользоватьВОтбореПриИзменении + + + ИспользоватьВОтбореРасширеннаяПодсказка + 172 + Label + true + true + + Left + + + + ИспользоватьВОтбореКонтекстноеМеню + 171 + true + + CheckBoxField + Enter + true + Left + true + + + true + true + + true + + + <key>ru</key> + <value>Группа область отображения</value> + + + ru + Группа область отображения + + + ГруппаОбластьОтображенияРасширеннаяПодсказка + 166 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + true + true + Auto + Auto + + + true + true + + true + + + Группа3РасширеннаяПодсказка + 161 + Label + true + true + + Left + + + UsualGroup + + Auto + true + true + Auto + Auto + + true true @@ -552,9 +2818,9 @@ Auto - - ФормаКоманднаяПанель - -1 + + Группа2 + 323 ФормаВыбрать 26 @@ -581,12 +2847,89 @@ UserCmds Auto + + Отмена + 325 + true + true + + true + + + ОтменаРасширеннаяПодсказка + 326 + Label + true + true + + Left + + + Form.StandardCommand.Cancel + Normal + Auto + true + true + UserCmds + Auto + + + Справка + 327 + true + true + + true + + + СправкаРасширеннаяПодсказка + 328 + Label + true + true + + Left + + + Form.StandardCommand.Help + Normal + Auto + true + true + UserCmds + Auto + InCommandBarAndInAdditionalSubmenu + + true + true + + true + + + Группа2РасширеннаяПодсказка + 324 + Label + true + true + + Left + + + CommandBar + + Right + + + + ФормаКоманднаяПанель + -1 Left OnCreateAtServer ПриСозданииНаСервере + 60 LockOwner true Vertical @@ -656,11 +2999,242 @@ true
        + + НаименованиеПоУмолчанию + + <key>ru</key> + <value>Наименование по умолчанию</value> + + 6 + + String + + + + true + + + true + + + + НаименованиеПереопределено + + <key>ru</key> + <value>Наименование переопределено</value> + + 7 + + String + + + + true + + + true + + + + Наименование + + <key>ru</key> + <value>Заголовок</value> + + 8 + + String + + + + true + + + true + + ShowError + + + ИспользоватьВГруппировке + + <key>ru</key> + <value>В группировке</value> + + 9 + + Boolean + + + true + + + true + + + + ИспользоватьВПараметрах + + <key>ru</key> + <value>В параметрах</value> + + 10 + + Boolean + + + true + + + true + + + + ИспользоватьВОтборе + + <key>ru</key> + <value>В отборах</value> + + 11 + + Boolean + + + true + + + true + + + + ИспользоватьВОбщемИтоге + + <key>ru</key> + <value>В общем итоге</value> + + 12 + + Boolean + + + true + + + true + + + + ИспользоватьВИерархическойГруппировке + + <key>ru</key> + <value>В иерархической группировке</value> + + 13 + + Boolean + + + true + + + true + + + + ИспользоватьВЗаголовкеПолей + + <key>ru</key> + <value>В заголовке полей</value> + + 14 + + Boolean + + + true + + + true + + + + ИспользоватьВЗаголовке + + <key>ru</key> + <value>В заголовке</value> + + 15 + + Boolean + + + true + + + true + + + + ФлажкиОбластиОтображения + + <key>ru</key> + <value>Флажки области отображения</value> + + 16 + + ValueList + + + true + + + true + + + + String + + + + + + ТребуетсяОбновлениеНаименованияПоУмолчанию + + <key>ru</key> + <value>Требуется обновление наименования по умолчанию</value> + + 17 + + Boolean + + + true + + + true + + + + ЭтоНовый + + <key>ru</key> + <value>Это новый</value> + + 18 + + Boolean + + + true + + + true + + Выбрать <key>ru</key> - <value>Выбрать</value> + <value>ОК</value> 1 @@ -675,7 +3249,59 @@ Выбрать - Auto + DontUse + Auto + + + Показывать_УстановитьПометки + + <key>ru</key> + <value>Установить пометки</value> + + 2 + + ru + Показывать установить пометки + + + true + + + StdPicture.CheckAll + + + + Показывать_УстановитьПометки + + + Picture + DontUse + Auto + + + Показывать_СнятьПометки + + <key>ru</key> + <value>Снять пометки</value> + + 3 + + ru + Показывать снять пометки + + + true + + + StdPicture.UncheckAll + + + + Показывать_СнятьПометки + + + Picture + DontUse Auto diff --git a/SSL/src/SettingsStorages/ХранилищеВариантовОтчетов/Forms/ЭлементУсловногоОформленияОтчета/Help/ru.html b/SSL/src/SettingsStorages/ХранилищеВариантовОтчетов/Forms/ЭлементУсловногоОформленияОтчета/Help/ru.html new file mode 100644 index 000000000..9153c3270 --- /dev/null +++ b/SSL/src/SettingsStorages/ХранилищеВариантовОтчетов/Forms/ЭлементУсловногоОформленияОтчета/Help/ru.html @@ -0,0 +1,37 @@ + +

        Открывается с помощью кнопки Добавить из вкладки Оформление настроек варианта отчета.

        +

        Для подтверждения настроек условного оформления нажмите кнопку ОК.

        +

        Оформление

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

        Условие

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

        Оформляемые поля

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

        Дополнительно

        +

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

        +
        • +
          В группировке;
          +
        • +
          В иерархической группировке;
          +
        • +
          В общем итоге;
          +
        • +
          В заголовке полей;
          +
        • +
          В заголовке;
          +
        • +
          В параметрах;
          +
        • +
          В отборах.

        См. также:

        + \ No newline at end of file diff --git a/SSL/src/SettingsStorages/ХранилищеВариантовОтчетов/Forms/ЭлементУсловногоОформленияОтчета/Module.bsl b/SSL/src/SettingsStorages/ХранилищеВариантовОтчетов/Forms/ЭлементУсловногоОформленияОтчета/Module.bsl index 4cf4c9658..f3fc3aa42 100644 --- a/SSL/src/SettingsStorages/ХранилищеВариантовОтчетов/Forms/ЭлементУсловногоОформленияОтчета/Module.bsl +++ b/SSL/src/SettingsStorages/ХранилищеВариантовОтчетов/Forms/ЭлементУсловногоОформленияОтчета/Module.bsl @@ -18,54 +18,201 @@ Если Не Параметры.Свойство("ИдентификаторКД", ИдентификаторКД) Тогда ВызватьИсключение НСтр("ru = 'Не передан служебный параметр ""ИдентификаторКД"".'"); КонецЕсли; + Если Не Параметры.Свойство("Наименование", Наименование) Тогда + ВызватьИсключение НСтр("ru = 'Не передан служебный параметр ""Наименование"".'"); + КонецЕсли; + Если Параметры.Свойство("Заголовок") Тогда + Заголовок = Параметры.Заголовок; + КонецЕсли; Источник = Новый ИсточникДоступныхНастроекКомпоновкиДанных(НастройкиОтчета.АдресСхемы); КомпоновщикНастроек.Инициализировать(Источник); - УзелКД = УзелКД(ЭтотОбъект); - Если УзелКД = Неопределено Тогда - ВызватьИсключение НСтр("ru = 'Не найден узел отчета.'"); - КонецЕсли; - ЭлементКД = УзелКД.ПолучитьОбъектПоИдентификатору(ИдентификаторКД); - Если ЭлементКД = Неопределено Тогда - ВызватьИсключение НСтр("ru = 'Не найден элемент условного оформления.'"); + УзелКД = КомпоновщикНастроек.Настройки.УсловноеОформление; + Если ИдентификаторКД = Неопределено Тогда // Новый элемент + ЭтоНовый = Истина; + ЭлементКД = УзелКД.Элементы.Вставить(0); + ЭлементКД.Использование = Истина; + ЭлементКД.РежимОтображения = РежимОтображенияЭлементаНастройкиКомпоновкиДанных.Обычный; + Иначе + УзелКДИсточник = УзелКД(ЭтотОбъект); + Если УзелКДИсточник = Неопределено Тогда + ВызватьИсключение НСтр("ru = 'Не найден узел отчета.'"); + КонецЕсли; + ЭлементКДИсточник = УзелКДИсточник.ПолучитьОбъектПоИдентификатору(ИдентификаторКД); + Если ЭлементКДИсточник = Неопределено Тогда + ВызватьИсключение НСтр("ru = 'Не найден элемент условного оформления.'"); + КонецЕсли; + ЭлементКД = ОтчетыКлиентСервер.СкопироватьРекурсивно(УзелКД, ЭлементКДИсточник, УзелКД.Элементы, 0, Новый Соответствие); + + НаименованиеПоУмолчанию = ОтчетыКлиентСервер.ПредставлениеЭлементаУсловногоОформления(ЭлементКД); + НаименованиеПереопределено = (Наименование <> "" И Наименование <> НаименованиеПоУмолчанию); + Элементы.Наименование.ПодсказкаВвода = НаименованиеПоУмолчанию; + Если Не НаименованиеПереопределено Тогда + Наименование = ""; + КонецЕсли; КонецЕсли; - КомпоновщикНастроек.Настройки.УсловноеОформление.Элементы.Очистить(); - РедактируемыйЭлементКД = КомпоновщикНастроек.Настройки.УсловноеОформление.Элементы.Добавить(); - ЗаполнитьЗначенияСвойств(РедактируемыйЭлементКД, ЭлементКД); + Для Каждого ПолеФлажка Из Элементы.ГруппаОбластьОтображения.ПодчиненныеЭлементы Цикл + ИмяФлажка = ПолеФлажка.Имя; + ФлажкиОбластиОтображения.Добавить(ИмяФлажка); + Если ЭлементКД[ИмяФлажка] = ИспользованиеУсловногоОформленияКомпоновкиДанных.Использовать Тогда + ЭтотОбъект[ИмяФлажка] = Истина; + КонецЕсли; + КонецЦикла; ЗакрыватьПриВыборе = Ложь; КонецПроцедуры #КонецОбласти -#Область ОбработчикиСобытийЭлементовШапкиФормы +#Область ОбработчикиКомандФормы &НаКлиенте Процедура Выбрать(Команда) ВыбратьИЗакрыть(); КонецПроцедуры +&НаКлиенте +Процедура Показывать_УстановитьПометки(Команда) + Для Каждого ЭлементСписка Из ФлажкиОбластиОтображения Цикл + ЭтотОбъект[ЭлементСписка.Значение] = Истина; + КонецЦикла; + ОбновитьНаименованиеПоУмолчанию(); +КонецПроцедуры + +&НаКлиенте +Процедура Показывать_СнятьПометки(Команда) + Для Каждого ЭлементСписка Из ФлажкиОбластиОтображения Цикл + ЭтотОбъект[ЭлементСписка.Значение] = Ложь; + КонецЦикла; +КонецПроцедуры + #КонецОбласти #Область СлужебныеПроцедурыИФункции &НаКлиенте Процедура ВыбратьИЗакрыть() + ОтключитьОбработчикОжидания("ОбновитьНаименованиеПоУмолчаниюЕслиТребуется"); + ОбновитьНаименованиеПоУмолчаниюЕслиТребуется(); + + Если Наименование = "" Тогда + Если ЭтоНовый Тогда + ОбщегоНазначенияКлиентСервер.СообщитьПользователю(НСтр("ru = 'Необходимо заполнить заголовок'"), , "Наименование"); + Возврат; + КонецЕсли; + Наименование = НаименованиеПоУмолчанию; + КонецЕсли; + ЭлементКД = КомпоновщикНастроек.Настройки.УсловноеОформление.Элементы[0]; - ОповеститьОВыборе(ЭлементКД); - Закрыть(ЭлементКД); + + Если Наименование = НаименованиеПоУмолчанию Тогда + ЭлементКД.ПредставлениеПользовательскойНастройки = ""; + Иначе + ЭлементКД.ПредставлениеПользовательскойНастройки = Наименование; + КонецЕсли; + + Для Каждого ЭлементСписка Из ФлажкиОбластиОтображения Цикл + ИмяФлажка = ЭлементСписка.Значение; + Если ЭтотОбъект[ИмяФлажка] Тогда + ЭлементКД[ИмяФлажка] = ИспользованиеУсловногоОформленияКомпоновкиДанных.Использовать; + Иначе + ЭлементКД[ИмяФлажка] = ИспользованиеУсловногоОформленияКомпоновкиДанных.НеИспользовать; + КонецЕсли; + КонецЦикла; + + Результат = Новый Структура("ЭлементКД, Наименование", ЭлементКД, Наименование); + ОповеститьОВыборе(Результат); + Закрыть(Результат); КонецПроцедуры &НаКлиентеНаСервереБезКонтекста Функция УзелКД(ЭтотОбъект) Если ЭтотОбъект.ИдентификаторТекущегоУзлаКД = Неопределено Тогда - Возврат ЭтотОбъект.КомпоновщикНастроек.ПользовательскиеНастройки; + Возврат ЭтотОбъект.КомпоновщикНастроек.Настройки.УсловноеОформление; Иначе ТекущийУзелКД = ЭтотОбъект.КомпоновщикНастроек.Настройки.ПолучитьОбъектПоИдентификатору(ЭтотОбъект.ИдентификаторТекущегоУзлаКД); Возврат ТекущийУзелКД.УсловноеОформление; КонецЕсли; КонецФункции +&НаКлиенте +Процедура ОформлениеПриИзменении(Элемент) + ОбновитьНаименованиеПоУмолчанию(); +КонецПроцедуры + +&НаКлиенте +Процедура ОтборПриИзменении(Элемент) + ОбновитьНаименованиеПоУмолчанию(); +КонецПроцедуры + +&НаКлиенте +Процедура ОформляемыеПоляПриИзменении(Элемент) + ОбновитьНаименованиеПоУмолчанию(); +КонецПроцедуры + +&НаКлиенте +Процедура ОбновитьНаименованиеПоУмолчанию() + ТребуетсяОбновлениеНаименованияПоУмолчанию = Истина; + Если Наименование = "" Тогда + ПодключитьОбработчикОжидания("ОбновитьНаименованиеПоУмолчаниюЕслиТребуется", 3, Истина); + КонецЕсли; +КонецПроцедуры + +&НаКлиенте +Процедура ОбновитьНаименованиеПоУмолчаниюЕслиТребуется() + Если ТребуетсяОбновлениеНаименованияПоУмолчанию Тогда + ТребуетсяОбновлениеНаименованияПоУмолчанию = Ложь; + УзелКД = КомпоновщикНастроек.Настройки.УсловноеОформление; + ЭлементКД = УзелКД.Элементы[0]; + НаименованиеПоУмолчанию = ОтчетыКлиентСервер.ПредставлениеЭлементаУсловногоОформления(ЭлементКД); + Если Наименование = "" Тогда + Элементы.Наименование.ПодсказкаВвода = НаименованиеПоУмолчанию; + КонецЕсли; + КонецЕсли; +КонецПроцедуры + +&НаКлиенте +Процедура ИспользоватьВГруппировкеПриИзменении(Элемент) + ОбновитьНаименованиеПоУмолчанию(); +КонецПроцедуры + +&НаКлиенте +Процедура ИспользоватьВИерархическойГруппировкеПриИзменении(Элемент) + ОбновитьНаименованиеПоУмолчанию(); +КонецПроцедуры + +&НаКлиенте +Процедура ИспользоватьВОбщемИтогеПриИзменении(Элемент) + ОбновитьНаименованиеПоУмолчанию(); +КонецПроцедуры + +&НаКлиенте +Процедура ИспользоватьВЗаголовкеПолейПриИзменении(Элемент) + ОбновитьНаименованиеПоУмолчанию(); +КонецПроцедуры + +&НаКлиенте +Процедура ИспользоватьВЗаголовкеПриИзменении(Элемент) + ОбновитьНаименованиеПоУмолчанию(); +КонецПроцедуры + +&НаКлиенте +Процедура ИспользоватьВПараметрахПриИзменении(Элемент) + ОбновитьНаименованиеПоУмолчанию(); +КонецПроцедуры + +&НаКлиенте +Процедура ИспользоватьВОтбореПриИзменении(Элемент) + ОбновитьНаименованиеПоУмолчанию(); +КонецПроцедуры + +&НаКлиенте +Процедура НаименованиеПриИзменении(Элемент) + Если Не ЭтоНовый Тогда + ОбновитьНаименованиеПоУмолчаниюЕслиТребуется(); + КонецЕсли; +КонецПроцедуры + #КонецОбласти \ No newline at end of file diff --git a/SSL/src/SettingsStorages/ХранилищеВариантовОтчетов/ManagerModule.bsl b/SSL/src/SettingsStorages/ХранилищеВариантовОтчетов/ManagerModule.bsl index d3bcd392c..8ad42076b 100644 --- a/SSL/src/SettingsStorages/ХранилищеВариантовОтчетов/ManagerModule.bsl +++ b/SSL/src/SettingsStorages/ХранилищеВариантовОтчетов/ManagerModule.bsl @@ -297,7 +297,7 @@ Выборка = Запрос.Выполнить().Выбрать(); Если Выборка.Следующий() Тогда ВариантОбъект = Выборка.Ссылка.ПолучитьОбъект(); - Если ТипЗнч(Настройки) = Тип("НастройкиКомпоновкиДанных") Тогда + Если ТипЗнч(Настройки) = Тип("НастройкиКомпоновкиДанных") Тогда // Для платформы. Адрес = ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(Настройки.ДополнительныеСвойства, "Адрес"); Если ТипЗнч(Адрес) = Тип("Строка") И ЭтоАдресВременногоХранилища(Адрес) Тогда Настройки = ПолучитьИзВременногоХранилища(Адрес); diff --git a/SSL/src/SettingsStorages/ХранилищеВариантовОтчетов/ХранилищеВариантовОтчетов.mdo b/SSL/src/SettingsStorages/ХранилищеВариантовОтчетов/ХранилищеВариантовОтчетов.mdo index fbb553c1e..25631d616 100644 --- a/SSL/src/SettingsStorages/ХранилищеВариантовОтчетов/ХранилищеВариантовОтчетов.mdo +++ b/SSL/src/SettingsStorages/ХранилищеВариантовОтчетов/ХранилищеВариантовОтчетов.mdo @@ -10,20 +10,6 @@ SettingsStorage.ХранилищеВариантовОтчетов.Form.СохранениеВариантаОтчета SettingsStorage.ХранилищеВариантовОтчетов.Form.ВыборВариантаОтчета - - НастройкиОтчета - - ru - Настройки отчета - - - - ru - - - PersonalComputer - MobileDevice - ВыборВариантаОтчета @@ -56,7 +42,7 @@ ОписаниеНовойВозможностиПоВыводуОписаний ru - Вывод описаний к отчетам + Описание новой возможности по выводу описаний PersonalComputer MobileDevice @@ -94,6 +80,25 @@ ru Элемент условного оформления отчета + + + ru + + + PersonalComputer + MobileDevice + + + УсловияОтборовОтчета + + ru + Условия отборов отчета + + + + ru + + PersonalComputer MobileDevice diff --git a/SSL/src/StyleItems/НедоступныеДанныеЦвет/НедоступныеДанныеЦвет.mdo b/SSL/src/StyleItems/НедоступныеДанныеЦвет/НедоступныеДанныеЦвет.mdo deleted file mode 100644 index 151aec2ea..000000000 --- a/SSL/src/StyleItems/НедоступныеДанныеЦвет/НедоступныеДанныеЦвет.mdo +++ /dev/null @@ -1,13 +0,0 @@ - - - НедоступныеДанныеЦвет - - ru - Недоступные данные - - - - Web.LightGray - - - diff --git a/SSL/src/StyleItems/ПоясняющийТекст/ПоясняющийТекст.mdo b/SSL/src/StyleItems/ПоясняющийТекст/ПоясняющийТекст.mdo index f0f31a28d..c14dc05af 100644 --- a/SSL/src/StyleItems/ПоясняющийТекст/ПоясняющийТекст.mdo +++ b/SSL/src/StyleItems/ПоясняющийТекст/ПоясняющийТекст.mdo @@ -8,9 +8,9 @@ Оформление справочного текста в форме - 69 - 81 - 133 + 128 + 122 + 89 diff --git a/SSL/src/Subsystems/Администрирование/CommandInterface.cmi b/SSL/src/Subsystems/Администрирование/CommandInterface.cmi index aa929ea14..440ee195c 100644 --- a/SSL/src/Subsystems/Администрирование/CommandInterface.cmi +++ b/SSL/src/Subsystems/Администрирование/CommandInterface.cmi @@ -56,7 +56,7 @@ - InformationRegister.ИсполнителиЗадач.Command.НастройкаРолевойАдресации + InformationRegister.ИсполнителиЗадач.Command.РолиИИсполнителиЗадач @@ -68,7 +68,7 @@ - CommonCommand.ОткрытьОбменыДанными + CommonCommand.СинхронизацияДанных @@ -123,10 +123,6 @@ InformationRegister.АдресныеОбъекты.Command.ОчиститьАдресныйКлассификатор - - InformationRegister.АдресныеОбъекты.Command.ПроверитьОбновлениеАдресногоКлассификатора - - DataProcessor.АктивныеПользователи.Command.АктивныеПользователи @@ -140,7 +136,7 @@ - Catalog.УчетныеЗаписиЭлектроннойПочты.Command.НастройкиСистемнойУчетнойЗаписи + Catalog.УчетныеЗаписиЭлектроннойПочты.Command.НастройкаСистемнойУчетнойЗаписи @@ -161,6 +157,10 @@ true + + DataProcessor.ПоискИУдалениеДублей.Command.ПоискИУдалениеДублей + + Catalog.УчетныеЗаписиЭлектроннойПочты.StandardCommand.OpenList @@ -177,6 +177,10 @@ CommonCommand.ДополнительныеОтчетыАдминистрирование + + Report.ОбъемНенужныхФайлов.StandardCommand.Open + + Report.СведенияОПользователях.StandardCommand.Open @@ -194,7 +198,7 @@ - DataProcessor.РезервноеКопированиеИБ.Command.ВыполнитьВосстановлениеИБ + DataProcessor.РезервноеКопированиеИБ.Command.ВыполнитьВосстановлениеДанных @@ -250,7 +254,11 @@ - CommonForm.ОписаниеИзмененийСистемы.StandardCommand.Open + CommonForm.НастройкиРегистрацииСобытийДоступаКПерсональнымДанным.StandardCommand.Open + + + + CommonForm.ОписаниеИзмененийПрограммы.StandardCommand.Open @@ -270,11 +278,7 @@ - DataProcessor.ОбновлениеКонфигурации.StandardCommand.Open - - - - CommonForm.НастройкиРегистрацииСобытийДоступаКПерсональнымДанным.StandardCommand.Open + DataProcessor.ПоискИУстановкаОбновлений.StandardCommand.Open @@ -286,7 +290,7 @@ - DataProcessor.ОбновлениеИнформационнойБазы.StandardCommand.Open + DataProcessor.РезультатыОбновленияПрограммы.StandardCommand.Open @@ -331,6 +335,7 @@ Catalog.ПрофилиГруппДоступа.StandardCommand.OpenList Catalog.СценарииОбменовДанными.StandardCommand.OpenList DataProcessor.УдалениеПомеченныхОбъектов.Command.УдалениеПомеченныхОбъектов + DataProcessor.ПоискИУдалениеДублей.Command.ПоискИУдалениеДублей Catalog.УчетныеЗаписиЭлектроннойПочты.StandardCommand.OpenList @@ -352,6 +357,7 @@ DataProcessor.ПанельАдминистрированияБСП.Command.ПоддержкаИОбслуживание DataProcessor.ПанельАдминистрированияБСП.Command.ОбщиеНастройки DataProcessor.ПанельАдминистрированияБСП.Command.НастройкиПользователейИПрав + DataProcessor.ПанельАдминистрированияБСП.Command.ПоискИУстановкаОбновлений DataProcessor.ПанельАдминистрированияБСП.Command.Органайзер DataProcessor.ПанельАдминистрированияБСП.Command.НастройкиСинхронизацииДанных DataProcessor.ПанельАдминистрированияБСП.Command.НастройкиРаботыСФайлами @@ -359,10 +365,10 @@ Catalog.ВидыКонтактнойИнформации.StandardCommand.OpenList Catalog.НаборыДополнительныхРеквизитовИСведений.StandardCommand.OpenList DataProcessor.РегламентныеИФоновыеЗадания.Command.РегламентныеИФоновыеЗадания - InformationRegister.ИсполнителиЗадач.Command.НастройкаРолевойАдресации + InformationRegister.ИсполнителиЗадач.Command.РолиИИсполнителиЗадач Catalog.ТомаХраненияФайлов.StandardCommand.OpenList InformationRegister.ПользовательскиеМакетыПечати.StandardCommand.OpenList - CommonCommand.ОткрытьОбменыДанными + CommonCommand.СинхронизацияДанных Catalog.Валюты.StandardCommand.OpenList Catalog.КлассификаторБанковРФ.StandardCommand.OpenList Catalog.Организации.Command.Организации @@ -376,7 +382,54 @@ InformationRegister.АдресныеОбъекты.Command.ЗагрузитьАдресныйКлассификатор InformationRegister.АдресныеОбъекты.Command.АвторизацияНаСайтеПоддержкиПользователей InformationRegister.АдресныеОбъекты.Command.ОчиститьАдресныйКлассификатор - InformationRegister.АдресныеОбъекты.Command.ПроверитьОбновлениеАдресногоКлассификатора + + + NavigationPanelSeeAlso + DataProcessor.АктивныеПользователи.Command.АктивныеПользователи + Catalog.ГруппыВнешнихПользователей.StandardCommand.OpenList + Catalog.ГруппыПользователей.StandardCommand.OpenList + Catalog.УчетныеЗаписиЭлектроннойПочты.Command.НастройкаСистемнойУчетнойЗаписи + DataProcessor.РезервноеКопированиеИБ.Command.ПоказатьРезультат + Catalog.ПрофилиГруппДоступа.StandardCommand.OpenList + Catalog.СценарииОбменовДанными.StandardCommand.OpenList + DataProcessor.УдалениеПомеченныхОбъектов.Command.УдалениеПомеченныхОбъектов + DataProcessor.ПоискИУдалениеДублей.Command.ПоискИУдалениеДублей + Catalog.УчетныеЗаписиЭлектроннойПочты.StandardCommand.OpenList + + + ActionsPanelTools + DataProcessor.АвтоматическоеИзвлечениеТекстов.Command.АвтоматическоеИзвлечениеТекстов + DataProcessor.АктивныеПользователи.StandardCommand.Open + DataProcessor.БлокировкаРаботыПользователей.StandardCommand.Open + CommonForm.ВходВОбластьДанных.StandardCommand.Open + DataProcessor.РезервноеКопированиеИБ.Command.ВыполнитьВосстановлениеДанных + DataProcessor.ГрупповоеИзменениеРеквизитов.Command.ГрупповоеИзменениеРеквизитов + InformationRegister.ДатыЗапретаИзменения.Command.ДатыЗапретаЗагрузкиДанных + InformationRegister.ДатыЗапретаИзменения.Command.ДатыЗапретаИзмененияДанных + CommonCommand.ДополнительныеОбработкиАдминистрирование + DataProcessor.ЖурналРегистрации.StandardCommand.Open + DataProcessor.ЗагрузкаДанныхИзФайла.StandardCommand.Open + DataProcessor.ЗагрузкаКурсовВалют.StandardCommand.Open + Catalog.КлассификаторБанковРФ.Command.КлассификаторБанковРФ + DataProcessor.НастройкиПользователей.Command.КопированиеНастроекПользователей + CommonForm.НастройкаОтправкиSMS.StandardCommand.Open + DataProcessor.НастройкаРезервногоКопированияИБ.StandardCommand.Open + CommonCommand.НастройкаСистемнойУчетнойЗаписиЭлектроннойПочты + DataProcessor.ОценкаПроизводительности.Command.НастройкиОценкиПроизводительности + DataProcessor.НастройкиПользователей.StandardCommand.Open + CommonForm.НастройкиРегистрацииСобытийДоступаКПерсональнымДанным.StandardCommand.Open + CommonForm.ОписаниеИзмененийПрограммы.StandardCommand.Open + DataProcessor.ОценкаПроизводительности.StandardCommand.Open + DataProcessor.НастройкиПользователей.Command.ОчисткаНастроекПользователей + CommonForm.ПараметрыПроксиСервера.StandardCommand.Open + DataProcessor.ПереносФайловВТома.Command.ПереносФайловВТома + DataProcessor.ПоискИУстановкаОбновлений.StandardCommand.Open + DataProcessor.РегламентныеИФоновыеЗадания.StandardCommand.Open + DataProcessor.РезервноеКопированиеИБ.StandardCommand.Open + DataProcessor.РезультатыОбновленияПрограммы.StandardCommand.Open + DataProcessor.УдалениеПомеченныхОбъектов.StandardCommand.Open + DataProcessor.УниверсальныйОбменДаннымиXML.StandardCommand.Open + DataProcessor.УправлениеИтогамиИАгрегатами.StandardCommand.Open diff --git a/SSL/src/Subsystems/Администрирование/Администрирование.mdo b/SSL/src/Subsystems/Администрирование/Администрирование.mdo index 86fbac5e0..0a623c6e2 100644 --- a/SSL/src/Subsystems/Администрирование/Администрирование.mdo +++ b/SSL/src/Subsystems/Администрирование/Администрирование.mdo @@ -33,12 +33,12 @@ Catalog.УчетныеЗаписиЭлектроннойПочты Catalog.ПрофилиГруппДоступа Catalog.ДополнительныеОтчетыИОбработки - CommonForm.ОписаниеИзмененийСистемы + CommonForm.ОписаниеИзмененийПрограммы InformationRegister.ИсполнителиЗадач - DataProcessor.ОбновлениеКонфигурации + DataProcessor.ПоискИУстановкаОбновлений DataProcessor.АвтоматическоеИзвлечениеТекстов DataProcessor.УправлениеИтогамиИАгрегатами - CommonCommand.ОткрытьОбменыДанными + CommonCommand.СинхронизацияДанных Catalog.СценарииОбменовДанными Catalog.ВариантыОтчетов InformationRegister.ДатыЗапретаИзменения @@ -65,7 +65,7 @@ Report.ДатыЗапретаЗагрузки Report.ДатыЗапретаИзменения DataProcessor.ГрупповоеИзменениеРеквизитов - DataProcessor.ОбновлениеИнформационнойБазы + DataProcessor.РезультатыОбновленияПрограммы Catalog.КлючевыеОперации DataProcessor.УниверсальныйОбменДаннымиXML Report.СведенияОПользователях @@ -77,4 +77,6 @@ InformationRegister.АдресныеОбъекты DataProcessor.СдвигГраницыИтогов DataProcessor.ПереносФайловВТома + Report.ОбъемНенужныхФайлов + DataProcessor.ПоискИУдалениеДублей diff --git a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/АдресныйКлассификатор/АдресныйКлассификатор.mdo b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/АдресныйКлассификатор/АдресныйКлассификатор.mdo index 2e78516a4..b2d633513 100644 --- a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/АдресныйКлассификатор/АдресныйКлассификатор.mdo +++ b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/АдресныйКлассификатор/АдресныйКлассификатор.mdo @@ -25,5 +25,6 @@ FunctionalOption.ИсточникДанныхАдресногоКлассификатора InformationRegister.УдалитьАдресныйКлассификатор CommonModule.АдресныйКлассификаторСлужебный + Role.ДобавлениеИзменениеАдресныхСведений Subsystem.СтандартныеПодсистемы diff --git a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/Анкетирование/Анкетирование.mdo b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/Анкетирование/Анкетирование.mdo index 28f86200d..e4986b825 100644 --- a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/Анкетирование/Анкетирование.mdo +++ b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/Анкетирование/Анкетирование.mdo @@ -39,8 +39,6 @@ Role.ДобавлениеИзменениеШаблоновАнкет Role.ДобавлениеИзменениеОпросов FunctionalOption.ИспользоватьАнкетирование - EventSubscription.ВариантыОтветовАнкетЗаполнитьЗначениеРеквизитаУпорядочивания - EventSubscription.ВариантыОтветовАнкетСброситьЗначениеРеквизитаУпорядочивания DefinedType.Респондент Subsystem.СтандартныеПодсистемы diff --git a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/БазоваяФункциональность/БазоваяФункциональность.mdo b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/БазоваяФункциональность/БазоваяФункциональность.mdo index 9b75e6d59..d76c18b2d 100644 --- a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/БазоваяФункциональность/БазоваяФункциональность.mdo +++ b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/БазоваяФункциональность/БазоваяФункциональность.mdo @@ -22,7 +22,6 @@ DataProcessor.ЖурналРегистрации CommonModule.ОбщегоНазначенияПереопределяемый Role.ВыводНаПринтерФайлБуферОбмена - Role.ДобавлениеИзменениеБазовойНСИ Role.ЗапускAutomation Role.ЗапускВебКлиента Role.ЗапускВнешнегоСоединения @@ -31,7 +30,6 @@ Role.ИнтерактивноеОткрытиеВнешнихОтчетовИОбработок Role.ОбновлениеКонфигурацииБазыДанных Role.ПросмотрЖурналаРегистрации - Role.ЧтениеБазовойНСИ Role.Администрирование Role.ПолныеПрава CommonCommand.УстановитьРасширениеРаботыСФайлами @@ -78,9 +76,7 @@ CommonPicture.ВосклицательныйЗнакСерый CommonPicture.ЗаполнитьФорму CommonPicture.Рассчитать - Role.ДобавлениеИзменениеОбщейБазовойНСИ CommonPicture.Комментарий - StyleItem.НедоступныеДанныеЦвет FunctionalOption.СтандартныеПодсистемыВМоделиСервиса FunctionalOption.СтандартныеПодсистемыВЛокальномРежиме CommonPicture.ЗаставкаВнешнейОперации @@ -124,7 +120,6 @@ CommonModule.ПодсистемыКонфигурацииПереопределяемый CommonModule.ОбновлениеИнформационнойБазыБСП CommandGroup.Информация - CommonCommand.СведенияОПользователе CommonPicture.ИнформацияПоНедоступнымПолям CommonPicture.ОтправитьЭлектронноеПисьмо SessionParameter.ПараметрыКлиентаНаСервере @@ -192,12 +187,11 @@ CommonPicture.СтрелкаВлево CommonPicture.СтрелкаВниз CommonPicture.СтрелкаВправо - Role.ЧтениеОбщейБазовойНСИ EventSubscription.ЗапретитьПометкуУдаленияПредопределенныхЭлементов EventSubscription.ЗапретитьУдалениеПредопределенныхЭлементов CommonModule.КонтрольДинамическогоОбновленияКонфигурацииВызовСервера - CommonModule.КонтрольДинамическогоОбновленияКонфигурацииГлобальный - CommonModule.КонтрольДинамическогоОбновленияКонфигурацииКлиент + CommonModule.КонтрольДинамическогоОбновленияКонфигурацииСлужебный + CommonModule.КонтрольДинамическогоОбновленияКонфигурацииСлужебныйКлиент CommonModule.ИнтеграцияСтандартныхПодсистем CommonPicture.Папка InformationRegister.РазрешенияНаИспользованиеВнешнихРесурсов @@ -206,6 +200,24 @@ CommonModule.НастройкаРазрешенийНаИспользованиеВнешнихРесурсовВызовСервера CommonModule.РаботаВБезопасномРежимеКлиентПереопределяемый CommonForm.АвторизацияНаСайтеПоддержкиПользователей + InformationRegister.БезопасноеХранилищеДанных + InformationRegister.БезопасноеХранилищеДанныхОбластейДанных + Catalog.ИдентификаторыОбъектовРасширений + CommonPicture.ЗнакСтоп DataProcessor.РекомендацияПоПовышениюСкоростиРаботы + DefinedType.МестоХраненияФункциональныхОпций + CommonForm.ПоказателиВыделенныхЯчеек + CommonPicture.Сумма + InformationRegister.ИдентификаторыОбъектовВерсийРасширений + SessionParameter.УстановленныеРасширения + SessionParameter.ВерсияРасширений + SessionParameter.АдресСвойствРасширений + Catalog.ВерсииРасширений + InformationRegister.СеансыВерсийРасширений + ScheduledJob.УдалениеУстаревшихПараметровРаботыВерсийРасширений + InformationRegister.ПараметрыРаботыВерсийРасширений + CommonForm.УстановленныеРасширения + Role.БазовыеПраваВнешнегоПользователя + XDTOPackage.ApplicationPermissions_1_0_0_2 Subsystem.СтандартныеПодсистемы diff --git a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/Банки/Банки.mdo b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/Банки/Банки.mdo index e51994617..706adaa53 100644 --- a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/Банки/Банки.mdo +++ b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/Банки/Банки.mdo @@ -12,5 +12,6 @@ CommonModule.РаботаСБанкамиГлобальный CommonModule.РаботаСБанкамиКлиент CommonModule.РаботаСБанкамиПереопределяемый + Role.ДобавлениеИзменениеБанков Subsystem.СтандартныеПодсистемы diff --git a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/БизнесПроцессыИЗадачи/БизнесПроцессыИЗадачи.mdo b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/БизнесПроцессыИЗадачи/БизнесПроцессыИЗадачи.mdo index 95c8e460f..297e4e692 100644 --- a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/БизнесПроцессыИЗадачи/БизнесПроцессыИЗадачи.mdo +++ b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/БизнесПроцессыИЗадачи/БизнесПроцессыИЗадачи.mdo @@ -53,7 +53,6 @@ StyleItem.РольБезИсполнителей Role.ЧтениеЗадач Enum.СостоянияБизнесПроцессов - CommonPicture.ЗнакСтоп CommonPicture.ЗнакСтопЧБ Constant.ИспользоватьПодчиненныеБизнесПроцессы EventSubscription.ОбновитьСостояниеБизнесПроцесса @@ -71,5 +70,8 @@ CommonModule.БизнесПроцессыИЗадачиКлиентСервер EventSubscription.ПолучитьПоляПредставленияБизнесПроцесса EventSubscription.ПолучитьПредставлениеБизнесПроцесса + DefinedType.БизнесПроцесс + DefinedType.ОбъектАдресации + DefinedType.ПредметЗадачи Subsystem.СтандартныеПодсистемы diff --git a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/Валюты/Валюты.mdo b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/Валюты/Валюты.mdo index fa70723c7..de9c2eb8e 100644 --- a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/Валюты/Валюты.mdo +++ b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/Валюты/Валюты.mdo @@ -21,5 +21,7 @@ CommonModule.РаботаСКурсамиВалютГлобальный CommonModule.РаботаСКурсамиВалютПереопределяемый Enum.СпособыУстановкиКурсаВалюты + Role.ДобавлениеИзменениеКурсовВалют + Role.ЧтениеКурсовВалют Subsystem.СтандартныеПодсистемы diff --git a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/ВариантыОтчетов/ВариантыОтчетов.mdo b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/ВариантыОтчетов/ВариантыОтчетов.mdo index 8780123a9..20d79536e 100644 --- a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/ВариантыОтчетов/ВариантыОтчетов.mdo +++ b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/ВариантыОтчетов/ВариантыОтчетов.mdo @@ -32,7 +32,6 @@ CommonForm.ФормаВариантаОтчета CommonPicture.БыстрыеНастройкиОтчета CommonForm.ВыборПроизвольногоПериода - CommonForm.ОтправкаТабличныхДокументовПоПочте CommonPicture.ЭлектронноеПисьмо CommonPicture.ВариантыОтчетовДоступныеВсемПользователям StyleItem.МоиВариантыОтчетовЦвет @@ -40,7 +39,6 @@ EventSubscription.ВариантыОтчетовПриУдаленииПользователя Constant.ПараметрыВариантовОтчетов EventSubscription.ВариантыОтчетовПередУдалениемИдентификатораОбъектаМетаданных - CommonPicture.Сумма Catalog.ПользовательскиеНастройкиОтчетов CommonCommand.ПанельОтчетовАдминистрирование CommonForm.ВводЗначенийСпискомСФлажками @@ -63,5 +61,16 @@ CommonPicture.ПредопределенныйЭлемент CommonPicture.СкрытаяНастройкаОтчета CommonPicture.ПиктограммыНастроекОтчета + CommonPicture.ВидСравнения + CommonPicture.Отборы + CommonPicture.ПоляИСортировки + CommonPicture.Структура + CommonPicture.Оформление + CommonPicture.ПереместитьВлевоВсе + CommonModule.ВариантыОтчетовВызовСервера + CommonPicture.Пометка + InformationRegister.ПредопределенныеВариантыОтчетовВерсийРасширений + Catalog.ПредопределенныеВариантыОтчетовРасширений + CommonForm.ВспомогательнаяФормаНастроекОтчета Subsystem.СтандартныеПодсистемы diff --git a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/ВерсионированиеОбъектов/ВерсионированиеОбъектов.mdo b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/ВерсионированиеОбъектов/ВерсионированиеОбъектов.mdo index 25fdc0792..1ebdc1d8c 100644 --- a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/ВерсионированиеОбъектов/ВерсионированиеОбъектов.mdo +++ b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/ВерсионированиеОбъектов/ВерсионированиеОбъектов.mdo @@ -37,5 +37,9 @@ ScheduledJob.ОчисткаУстаревшихВерсийОбъектов InformationRegister.НастройкиВерсионированияОбъектов InformationRegister.УдалитьНастройкиВерсионированияОбъектов + DefinedType.ВерсионируемыеДанные + DefinedType.ВерсионируемыеДанныеОбъект + EventSubscription.ЗаписатьВерсиюОбъекта + CommonModule.ВерсионированиеОбъектовПереопределяемый Subsystem.СтандартныеПодсистемы diff --git a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/Взаимодействия/Взаимодействия.mdo b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/Взаимодействия/Взаимодействия.mdo index b97d572da..f85f64c23 100644 --- a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/Взаимодействия/Взаимодействия.mdo +++ b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/Взаимодействия/Взаимодействия.mdo @@ -46,10 +46,7 @@ Catalog.ЭлектронноеПисьмоВходящееПрисоединенныеФайлы Catalog.ЗапланированноеВзаимодействиеПрисоединенныеФайлы Catalog.ТелефонныйЗвонокПрисоединенныеФайлы - EventSubscription.ВыполнитьДействияПередЗаписьюПрисоединенногоФайлаВзаимодействия - EventSubscription.ВыполнитьДействияПередУдалениемПрисоединенногоФайлаВзаимодействия - EventSubscription.ВыполнитьДействияПриЗаписиПрисоединенногоФайлаВзаимодействия - EventSubscription.УстановитьПометкуУдаленияПрисоединенныхФайловВзаимодействия + EventSubscription.УстановитьПометкуУдаленияПрисоединенныхФайловДокументовВзаимодействия CommonModule.ВзаимодействияВызовСервера Enum.СпособыРедактированияЭлектронныхПисем InformationRegister.НастройкиУчетныхЗаписейЭлектроннойПочты @@ -62,12 +59,10 @@ EventSubscription.СоздатьПредопределенныеПапкиЭлектронныхПисем CommonModule.ВзаимодействияСобытия Catalog.ПравилаОбработкиЭлектроннойПочты - EventSubscription.ВзаимодействияЗаполнитьЗначениеРеквизитаУпорядочивания Constant.ИспользоватьПочтовыйКлиент Constant.ИспользоватьПрочиеВзаимодействия FunctionalOption.ИспользоватьПочтовыйКлиент FunctionalOption.ИспользоватьПрочиеВзаимодействия - EventSubscription.ВзаимодействияСброситьЗначениеРеквизитаУпорядочивания CommonPicture.СнятьПризнакРассмотреноУВзаимодействия CommonPicture.ПереместитьВПапкуПисем CommonPicture.ПереместитьВЗакладкиВзаимодействия @@ -99,8 +94,11 @@ InformationRegister.СостоянияПредметовВзаимодействий InformationRegister.КонтактыВзаимодействий EventSubscription.ПолучениеПредставленияВзаимодействия - EventSubscription.ПолучениеПолейПредставленияВзамоимодействия + EventSubscription.ПолучениеПолейПредставленияВзаимодействия DefinedType.КонтактВзаимодействия DefinedType.ПредметВзаимодействия + InformationRegister.НепринятыеКОбработкеПочтовымСерверомИсходящиеПисьма + CommonPicture.ВнешняяСсылкаНаОбъектИнформационнойБазы + InformationRegister.ЗаблокированныеДляПолученияУчетныеЗаписи Subsystem.СтандартныеПодсистемы diff --git a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/ГрафикиРаботы/ГрафикиРаботы.mdo b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/ГрафикиРаботы/ГрафикиРаботы.mdo index 2dae4d5e6..897b7a121 100644 --- a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/ГрафикиРаботы/ГрафикиРаботы.mdo +++ b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/ГрафикиРаботы/ГрафикиРаботы.mdo @@ -12,5 +12,7 @@ InformationRegister.РучныеИзмененияГрафиковРаботы CommonModule.ГрафикиРаботыКлиентСервер Catalog.Календари + Role.ДобавлениеИзменениеГрафиковРаботы + Role.ЧтениеГрафиковРаботы Subsystem.СтандартныеПодсистемы diff --git a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/ДатыЗапретаИзменения/ДатыЗапретаИзменения.mdo b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/ДатыЗапретаИзменения/ДатыЗапретаИзменения.mdo index 45a69e2fb..610499110 100644 --- a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/ДатыЗапретаИзменения/ДатыЗапретаИзменения.mdo +++ b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/ДатыЗапретаИзменения/ДатыЗапретаИзменения.mdo @@ -12,10 +12,17 @@ CommonModule.ДатыЗапретаИзмененияСлужебный CommonModule.ДатыЗапретаИзмененияПереопределяемый Report.ДатыЗапретаИзменения - ScheduledJob.ПересчетТекущихЗначенийОтносительныхДатЗапретаИзменения Enum.ВидыНазначенияДатЗапрета CommonPicture.ПиктограммыПланОбменаУзел Report.ДатыЗапретаЗагрузки SessionParameter.ПропуститьПроверкуЗапретаИзменения + DefinedType.АдресатЗапретаИзменения + Constant.ВерсияДатЗапретаИзменения + SessionParameter.ОбновитьВерсиюДатЗапретаИзмененияПослеЗагрузкиДанных + EventSubscription.ОбновлениеВерсииДатЗапретаИзмененияПослеЗагрузкиДанных + SessionParameter.ДействующиеДатыЗапретаИзменения + Constant.ИспользоватьДатыЗапретаЗагрузки + Constant.ИспользоватьДатыЗапретаИзменения + EventSubscription.ПроверитьДатуЗапретаИзмененияПередЗаписьюДокумента Subsystem.СтандартныеПодсистемы diff --git a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/ДополнительныеОтчетыИОбработки/ДополнительныеОтчетыИОбработки.mdo b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/ДополнительныеОтчетыИОбработки/ДополнительныеОтчетыИОбработки.mdo index def6a7937..9abb7d754 100644 --- a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/ДополнительныеОтчетыИОбработки/ДополнительныеОтчетыИОбработки.mdo +++ b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/ДополнительныеОтчетыИОбработки/ДополнительныеОтчетыИОбработки.mdo @@ -10,7 +10,6 @@ ru - CommonCommand.ДополнительныеПечатныеФормыОбъекта CommonForm.ДополнительныеОтчетыИОбработки Enum.ВидыДополнительныхОтчетовИОбработок CommonCommand.ОтчетыОбъекта @@ -31,7 +30,6 @@ CommonForm.НастройкаМоихОтчетовИОбработок FunctionalOption.ИспользоватьДополнительныеОбработкиЗаполненияОбъекта FunctionalOption.ИспользоватьДополнительныеОтчеты - FunctionalOption.ИспользоватьДополнительныеПечатныеФормы FunctionalOption.ИспользоватьДополнительныеОбработкиСозданияСвязанныхОбъектов FunctionalOptionsParameter.ДополнительныеОтчетыИОбработкиТипФормы FunctionalOptionsParameter.ДополнительныеОтчетыИОбработкиОбъектНазначения @@ -49,10 +47,10 @@ CommonModule.ДополнительныеОтчетыИОбработкиКлиентПереопределяемый XDTOPackage.ApplicationExtensionsPermissions_1_0_0_1 XDTOPackage.ApplicationExtensionsManifest_1_0_0_1 - Constant.УдалитьПоказыватьКомандуДополнительныеПечатныеФормы Enum.РежимыСовместимостиРазрешенийДополнительныхОтчетовИОбработок CommonCommand.ДополнительныеОтчетыАдминистрирование CommonCommand.ДополнительныеОбработкиАдминистрирование EventSubscription.ДополнительныеОтчетыИОбработкиПередУдалениемИдентификатораОбъектаМетаданных + DefinedType.ОбъектСДополнительнымиКомандами Subsystem.СтандартныеПодсистемы diff --git a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/ЗавершениеРаботыПользователей/ЗавершениеРаботыПользователей.mdo b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/ЗавершениеРаботыПользователей/ЗавершениеРаботыПользователей.mdo index b1b80cfb7..9b6fea325 100644 --- a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/ЗавершениеРаботыПользователей/ЗавершениеРаботыПользователей.mdo +++ b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/ЗавершениеРаботыПользователей/ЗавершениеРаботыПользователей.mdo @@ -17,7 +17,6 @@ CommonModule.СоединенияИБКлиентСервер DataProcessor.АктивныеПользователи CommonForm.ПараметрыАдминистрированияПрограммы - CommonModule.СоединенияИБВызовСервераПовтИсп InformationRegister.УдалитьБлокировкиСеансовОбластиДанных CommonModule.СоединенияИБВызовСервера InformationRegister.БлокировкиСеансовОбластейДанных diff --git a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/ЗаметкиПользователя/ЗаметкиПользователя.mdo b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/ЗаметкиПользователя/ЗаметкиПользователя.mdo index 4d172c334..1d3b00b1b 100644 --- a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/ЗаметкиПользователя/ЗаметкиПользователя.mdo +++ b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/ЗаметкиПользователя/ЗаметкиПользователя.mdo @@ -15,7 +15,10 @@ Constant.ИспользоватьЗаметки Role.ИспользованиеЗаметок CommonModule.ЗаметкиПользователяСлужебный - EventSubscription.УстановитьПометкуУдаленияЗаметкамПользователя CommonModule.ЗаметкиПользователя + DefinedType.ПредметЗаметок + DefinedType.ПредметЗаметокОбъект + EventSubscription.УстановитьСнятьПометкуУдаленияЗаметок + EventSubscription.УстановитьСтатусИзмененияПометкиУдаленияПользователя Subsystem.СтандартныеПодсистемы diff --git a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/ЗапретРедактированияРеквизитовОбъектов/ЗапретРедактированияРеквизитовОбъектов.mdo b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/ЗапретРедактированияРеквизитовОбъектов/ЗапретРедактированияРеквизитовОбъектов.mdo index bd1ad7af1..ed3f63796 100644 --- a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/ЗапретРедактированияРеквизитовОбъектов/ЗапретРедактированияРеквизитовОбъектов.mdo +++ b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/ЗапретРедактированияРеквизитовОбъектов/ЗапретРедактированияРеквизитовОбъектов.mdo @@ -17,5 +17,6 @@ CommonModule.ЗапретРедактированияРеквизитовОбъектов CommonModule.ЗапретРедактированияРеквизитовОбъектовСлужебныйКлиент CommonModule.ЗапретРедактированияРеквизитовОбъектовПереопределяемый + CommonModule.ЗапретРедактированияРеквизитовОбъектовСлужебный Subsystem.СтандартныеПодсистемы diff --git a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/ЗащитаПерсональныхДанных/ЗащитаПерсональныхДанных.mdo b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/ЗащитаПерсональныхДанных/ЗащитаПерсональныхДанных.mdo index 6fe437458..3ad4f0190 100644 --- a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/ЗащитаПерсональныхДанных/ЗащитаПерсональныхДанных.mdo +++ b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/ЗащитаПерсональныхДанных/ЗащитаПерсональныхДанных.mdo @@ -11,11 +11,16 @@ CommonModule.ЗащитаПерсональныхДанныхПовтИсп CommonModule.ЗащитаПерсональныхДанныхПереопределяемый StyleItem.СобытиеОтказ - Role.ПодготовкаСогласияНаОбработкуПерсональныхДанных - DataProcessor.СогласиеНаОбработкуПерсональныхДанных CommonModule.ЗащитаПерсональныхДанных InformationRegister.ОбластиПерсональныхДанных CommonForm.НастройкиРегистрацииСобытийДоступаКПерсональнымДанным CommonModule.ЗащитаПерсональныхДанныхКлиент + Document.СогласиеНаОбработкуПерсональныхДанных + DefinedType.СубъектПерсональныхДанных + Document.ОтзывСогласияНаОбработкуПерсональныхДанных + DocumentJournal.СогласияНаОбработкуПерсональныхДанных + InformationRegister.СогласияНаОбработкуПерсональныхДанных + Report.ИстекающиеСогласияНаОбработкуПерсональныхДанных + Report.ДействующиеСогласияНаОбработкуПерсональныхДанных Subsystem.СтандартныеПодсистемы diff --git a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/Интеграция1СБухфон/Интеграция1СБухфон.mdo b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/Интеграция1СБухфон/Интеграция1СБухфон.mdo index 93cdfc677..8447e05ca 100644 --- a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/Интеграция1СБухфон/Интеграция1СБухфон.mdo +++ b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/Интеграция1СБухфон/Интеграция1СБухфон.mdo @@ -3,7 +3,7 @@ Интеграция1СБухфон ru - Интеграция c 1C-Бухфон + Интеграция c 1С-Бухфон Role.Интеграция1СБухфон FunctionalOption.ИспользоватьИнтеграцию1СБухфон diff --git a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/КалендарныеГрафики/КалендарныеГрафики.mdo b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/КалендарныеГрафики/КалендарныеГрафики.mdo index fd4787cec..f21b3655c 100644 --- a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/КалендарныеГрафики/КалендарныеГрафики.mdo +++ b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/КалендарныеГрафики/КалендарныеГрафики.mdo @@ -26,5 +26,6 @@ CommonModule.КалендарныеГрафикиПереопределяемый Constant.ИспользоватьНесколькоПроизводственныхКалендарей FunctionalOption.ИспользоватьНесколькоПроизводственныхКалендарей + Role.ДобавлениеИзменениеКалендарныхГрафиков Subsystem.СтандартныеПодсистемы diff --git a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/КонтактнаяИнформация/КонтактнаяИнформация.mdo b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/КонтактнаяИнформация/КонтактнаяИнформация.mdo index e34c1e59b..c8dd8194d 100644 --- a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/КонтактнаяИнформация/КонтактнаяИнформация.mdo +++ b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/КонтактнаяИнформация/КонтактнаяИнформация.mdo @@ -18,13 +18,10 @@ Enum.ТипыКонтактнойИнформации Subsystem.СтандартныеПодсистемы.Subsystem.КонтактнаяИнформация EventSubscription.ЗаполнитьКонтактнуюИнформацию - EventSubscription.ВидыКонтактнойИнформацииЗаполнитьЗначениеРеквизитаУпорядочивания - EventSubscription.ВидыКонтактнойИнформацииСброситьЗначениеРеквизитаУпорядочивания CommonModule.УправлениеКонтактнойИнформациейКлиентСервер StyleItem.КонтактнаяИнформацияСРедактированиемВДиалогеЦвет CommonPicture.КонтактнаяИнформацияПерейтиПоСсылке CommonModule.УправлениеКонтактнойИнформациейСлужебный - CommonModule.УправлениеКонтактнойИнформациейКлиентСерверПовтИсп DataProcessor.ВводКонтактнойИнформации XDTOPackage.КонтактнаяИнформация CommonPicture.Подменю @@ -32,6 +29,13 @@ CommonModule.УправлениеКонтактнойИнформациейСлужебныйВызовСервера CommonModule.УправлениеКонтактнойИнформациейСлужебныйПовтИсп InformationRegister.УдалитьСтраныМира - Role.ДобавлениеИзменениеСтранМира + CommonPicture.Skype + CommonPicture.ОтправитьSMS + CommonPicture.ПозвонитьИлиОтправитьSMS + CommonPicture.Позвонить + DefinedType.ВладелецКонтактнойИнформации + EventSubscription.ОбновитьКонтактнуюИнформацию + Role.ДобавлениеИзменениеВидовКонтактнойИнформации + CommonPicture.ВидыКонтактнойИнформации Subsystem.СтандартныеПодсистемы diff --git a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/НапоминанияПользователя/НапоминанияПользователя.mdo b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/НапоминанияПользователя/НапоминанияПользователя.mdo index 042e02d13..287491ba8 100644 --- a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/НапоминанияПользователя/НапоминанияПользователя.mdo +++ b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/НапоминанияПользователя/НапоминанияПользователя.mdo @@ -21,5 +21,7 @@ CommonPicture.КоллекцияНапоминания CommonModule.НапоминанияПользователяВызовСервера Role.ИспользованиеНапоминаний + DefinedType.ПредметНапоминания + DefinedType.ПредметНапоминанияОбъект Subsystem.СтандартныеПодсистемы diff --git a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/НастройкаПорядкаЭлементов/НастройкаПорядкаЭлементов.mdo b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/НастройкаПорядкаЭлементов/НастройкаПорядкаЭлементов.mdo index 69f4923ac..7894e35d2 100644 --- a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/НастройкаПорядкаЭлементов/НастройкаПорядкаЭлементов.mdo +++ b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/НастройкаПорядкаЭлементов/НастройкаПорядкаЭлементов.mdo @@ -14,5 +14,8 @@ CommonModule.НастройкаПорядкаЭлементовКлиент CommonModule.НастройкаПорядкаЭлементов CommonModule.НастройкаПорядкаЭлементовСлужебныйВызовСервера + DefinedType.ОбъектСНастраиваемымПорядком + EventSubscription.ЗаполнитьЗначениеРеквизитаУпорядочивания + EventSubscription.СброситьЗначениеРеквизитаУпорядочивания Subsystem.СтандартныеПодсистемы diff --git a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/ОбменДанными/Help/ru.html b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/ОбменДанными/Help/ru.html index d9471e5e3..5af4b4f58 100644 --- a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/ОбменДанными/Help/ru.html +++ b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/ОбменДанными/Help/ru.html @@ -2,4 +2,4 @@

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

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

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

        -

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

        \ No newline at end of file +

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

        \ No newline at end of file diff --git a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/ОбменДанными/ОбменДанными.mdo b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/ОбменДанными/ОбменДанными.mdo index 25da62f5a..f728817ca 100644 --- a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/ОбменДанными/ОбменДанными.mdo +++ b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/ОбменДанными/ОбменДанными.mdo @@ -27,7 +27,7 @@ CommonCommand.НастроитьПараметрыТранспортаСообщенийОбмена SessionParameter.ПравилаРегистрацииОбъектов InformationRegister.СостоянияОбменовДанными - CommonCommand.ПерейтиВЖурналРегистрацииСобытийЗагрузкиДанных + CommonCommand.СобытияПолучения SessionParameter.ДатаОбновленияПовторноИспользуемыхЗначенийМРО Constant.ДатаОбновленияПовторноИспользуемыхЗначенийМРО EventSubscription.ЗарегистрироватьИзмененияФильтровОграниченияМиграцииДанных @@ -40,9 +40,9 @@ InformationRegister.ПравилаДляОбменаДанными Enum.ИсточникиПравилДляОбменаДанными SessionParameter.ПравилаВыборочнойРегистрацииОбъектов - CommonCommand.ОткрытьПравилаКонвертацииОбъектов - CommonCommand.ОткрытьПравилаРегистрацииОбъектов - CommandGroup.ПараметрыОбменаДанными + CommonCommand.ЗагрузитьПравилаКонвертацииОбъектов + CommonCommand.ЗагрузитьПравилаРегистрацииОбъектов + CommandGroup.ПараметрыСинхронизацииДанных DataProcessor.ПомощникСозданияОбменаДанными CommonPicture.СинхронизацияДанныхНастройка DataProcessor.СопоставлениеОбъектовИнформационныхБаз @@ -53,16 +53,16 @@ InformationRegister.СостоянияУспешныхОбменовДанными CommonPicture.СтатусыСопоставленияОбъектов DataProcessor.КонвертацияОбъектовРаспределенныхИнформационныхБаз - CommonCommand.ОткрытьОбменыДанными - CommonCommand.ВыполнитьОбменДанными - CommonCommand.ПерейтиВЖурналРегистрацииСобытийВыгрузкиДанных - CommonCommand.ОткрытьСценарииОбменовДанными + CommonCommand.СинхронизацияДанных + CommonCommand.Синхронизировать + CommonCommand.СобытияОтправки + CommonCommand.СценарииСинхронизации CommonPicture.СостояниеОбменаДаннымиОшибка - CommonForm.ОбменыДанными + CommonForm.СинхронизацияДанных Role.НастройкаСинхронизацииДанных Role.ВыполнениеСинхронизацииДанных - CommandGroup.ВыполнениеОбменаДанными - CommonCommand.ВыполнитьОбменДаннымиИнтерактивно + CommandGroup.СинхронизацияДанных + CommonCommand.СинхронизироватьСДополнительнымиПараметрами DataProcessor.УниверсальныйОбменДаннымиXML CommonPicture.СинхронизацияДанныхИнтерактивноеВыполнение Enum.РежимыВыгрузкиОбъектовОбмена @@ -76,7 +76,7 @@ FunctionalOption.АктуальнаяДатаОбновленияПовторноИспользуемыхЗначенийМРО FunctionalOption.ПрефиксИнформационнойБазы EventSubscription.ВключитьИспользованиеПланаОбмена - CommonCommand.ПолучитьНастройкиОбменаДаннымиДляВторойИнформационнойБазы + CommonCommand.ПолучитьНастройкиСинхронизацииДляДругойПрограммы EventSubscription.ПроверитьВозможностьИзмененияНастроекОбменаДанными EventSubscription.ПроверитьИзменениеФильтровОграниченияМиграцииДанных EventSubscription.ОтменитьОтправкуДанныхУзлаВРаспределеннойИнформационнойБазе @@ -112,7 +112,7 @@ CommonPicture.СинхронизацияДанныхКоллизия CommonPicture.СинхронизацияДанныхНепринятыеПоДате StyleItem.НепринятаяВерсия - CommonCommand.ОткрытьРезультатыОбменаДанными + CommonCommand.ПредупрежденияПриСинхронизацииДанных EventSubscription.ОчиститьСсылкиНаУзелИнформационнойБазы CommonPicture.СинхронизацияДанныхАнализДанных48 SessionParameter.РежимЗагрузкиСообщенияОбменаДаннымиПередЗапуском @@ -127,7 +127,7 @@ Constant.КаталогСообщенийОбменаДаннымиДляLinux Constant.КаталогСообщенийОбменаДаннымиДляWindows Constant.КоличествоЭлементовВТранзакцииЗагрузкиДанных - CommonCommand.ОткрытьПравилаСинхронизацииДанных + CommonCommand.ЗагрузитьКомплектПравил SessionParameter.ОшибкаРасхожденияВерсийПриПолученииДанных EventSubscription.ОтключитьАвтоматическуюСинхронизациюДанных CommonModule.ОбменДаннымиXDTOСервер @@ -137,5 +137,10 @@ InformationRegister.ПубличныеИдентификаторыСинхронизируемыхОбъектов InformationRegister.ДанныеОбъектовДляРегистрацииВОбменах DataProcessor.КонвертацияОбъектовXDTO + SessionParameter.ПараметрыСеансаСинхронизацииДанных + WebService.EnterpriseDataExchange_1_0_1_1 + WebService.EnterpriseDataUpload_1_0_1_1 + XDTOPackage.EnterpriseDataExchange_1_0_1_1 + CommonModule.ОбменДаннымиСлужебный Subsystem.СтандартныеПодсистемы diff --git a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/ОбновлениеВерсииИБ/ОбновлениеВерсииИБ.mdo b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/ОбновлениеВерсииИБ/ОбновлениеВерсииИБ.mdo index a664cbc62..f04f31e3a 100644 --- a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/ОбновлениеВерсииИБ/ОбновлениеВерсииИБ.mdo +++ b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/ОбновлениеВерсииИБ/ОбновлениеВерсииИБ.mdo @@ -9,9 +9,8 @@ CommonModule.ОбновлениеИнформационнойБазыКлиент CommonModule.ОбновлениеИнформационнойБазыПереопределяемый CommonModule.ОбновлениеИнформационнойБазыКлиентПереопределяемый - CommonForm.ОписаниеИзмененийСистемы + CommonForm.ОписаниеИзмененийПрограммы CommonModule.ОбновлениеИнформационнойБазыСобытия - CommonModule.ОбновлениеИнформационнойБазыВызовСервера CommonModule.ОбновлениеИнформационнойБазыСлужебныйПовтИсп Constant.ДетализироватьОбновлениеИБВЖурналеРегистрации Constant.РазделыОписанияИзмененийСистемы @@ -19,12 +18,13 @@ Role.ПросмотрОписанияИзмененийПрограммы InformationRegister.УдалитьВерсииПодсистем InformationRegister.ВерсииПодсистем - DataProcessor.ОбновлениеИнформационнойБазы + DataProcessor.РезультатыОбновленияПрограммы Constant.СведенияОбОбновленииИБ ScheduledJob.ОтложенноеОбновлениеИБ SessionParameter.ВыполняетсяОбновлениеИБ CommonModule.ОбновлениеИнформационнойБазыГлобальный CommonModule.ОбновлениеИнформационнойБазыСлужебный CommonModule.ОбновлениеИнформационнойБазыСлужебныйВызовСервера + CommonModule.ОбновлениеИнформационнойБазыВызовСервера Subsystem.СтандартныеПодсистемы diff --git a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/ОбновлениеКонфигурации/Help/ru.html b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/ОбновлениеКонфигурации/Help/ru.html index 0722be477..b9f781b2d 100644 --- a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/ОбновлениеКонфигурации/Help/ru.html +++ b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/ОбновлениеКонфигурации/Help/ru.html @@ -1,2 +1,2 @@ -

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

        \ No newline at end of file +

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

        \ No newline at end of file diff --git a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/ОбновлениеКонфигурации/ОбновлениеКонфигурации.mdo b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/ОбновлениеКонфигурации/ОбновлениеКонфигурации.mdo index ebfec6485..917d67c2f 100644 --- a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/ОбновлениеКонфигурации/ОбновлениеКонфигурации.mdo +++ b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/ОбновлениеКонфигурации/ОбновлениеКонфигурации.mdo @@ -17,7 +17,7 @@ CommonModule.ОбновлениеКонфигурацииКлиентПереопределяемый Role.ПроверкаДоступныхОбновленийКонфигурации Constant.СтатусОбновленияКонфигурации - DataProcessor.ОбновлениеКонфигурации + DataProcessor.ПоискИУстановкаОбновлений CommonModule.ОбновлениеКонфигурацииКлиентСервер CommonModule.ОбновлениеКонфигурацииВызовСервера Subsystem.СтандартныеПодсистемы diff --git a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/ОтправкаSMS/ОтправкаSMS.mdo b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/ОтправкаSMS/ОтправкаSMS.mdo index f217ffd05..6e5d34838 100644 --- a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/ОтправкаSMS/ОтправкаSMS.mdo +++ b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/ОтправкаSMS/ОтправкаSMS.mdo @@ -9,10 +9,14 @@ CommonModule.ОтправкаSMSЧерезМТС CommonModule.ОтправкаSMSПереопределяемый Constant.ПровайдерSMS - Constant.ЛогинДляОтправкиSMS - Constant.ПарольДляОтправкиSMS + Constant.УдалитьЛогинДляОтправкиSMS + Constant.УдалитьПарольДляОтправкиSMS Enum.ПровайдерыSMS CommonModule.ОтправкаSMSЧерезБилайн CommonForm.НастройкаОтправкиSMS + CommonModule.ОтправкаSMSКлиент + CommonModule.ОтправкаSMSКлиентПереопределяемый + CommonForm.ОтправкаSMS + Role.ОтправкаSMS Subsystem.СтандартныеПодсистемы diff --git a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/ОценкаПроизводительности/ОценкаПроизводительности.mdo b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/ОценкаПроизводительности/ОценкаПроизводительности.mdo index e31e00d0a..b467b1e4e 100644 --- a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/ОценкаПроизводительности/ОценкаПроизводительности.mdo +++ b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/ОценкаПроизводительности/ОценкаПроизводительности.mdo @@ -23,5 +23,8 @@ InformationRegister.УдалитьЗамерыВремени CommonModule.ОценкаПроизводительностиСлужебный InformationRegister.ЗамерыВремени + Constant.ОценкаПроизводительностиЭкспортВсехКлючевыхОпераций + SessionParameter.КомментарийЗамераВремени + InformationRegister.ЗамерыВремениТехнологические Subsystem.СтандартныеПодсистемы diff --git a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/Печать/Печать.mdo b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/Печать/Печать.mdo index ca67c75b2..022e2fada 100644 --- a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/Печать/Печать.mdo +++ b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/Печать/Печать.mdo @@ -36,5 +36,8 @@ CommonModule.УправлениеПечатьюСлужебныйКлиент CommonTemplate.КомпонентаПечатиQRКода CommonModule.УправлениеПечатьюПовтИсп + InformationRegister.НастройкиКомандПечати + CommonForm.НастройкаКомандПечати + CommonPicture.Пустая Subsystem.СтандартныеПодсистемы diff --git a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/ПоискИУдалениеДублей/ПоискИУдалениеДублей.mdo b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/ПоискИУдалениеДублей/ПоискИУдалениеДублей.mdo index 711c334d0..7a5cf51da 100644 --- a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/ПоискИУдалениеДублей/ПоискИУдалениеДублей.mdo +++ b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/ПоискИУдалениеДублей/ПоискИУдалениеДублей.mdo @@ -11,5 +11,6 @@ CommonModule.ПоискИУдалениеДублейПереопределяемый CommonModule.ПоискИУдалениеДублей CommonModule.ПоискИУдалениеДублейКлиент + CommonTemplate.КомпонентаПоискаСтрок Subsystem.СтандартныеПодсистемы diff --git a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/ПолнотекстовыйПоиск/ПолнотекстовыйПоиск.mdo b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/ПолнотекстовыйПоиск/ПолнотекстовыйПоиск.mdo index 7fc513fd4..eff8fff88 100644 --- a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/ПолнотекстовыйПоиск/ПолнотекстовыйПоиск.mdo +++ b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/ПолнотекстовыйПоиск/ПолнотекстовыйПоиск.mdo @@ -18,5 +18,7 @@ DataProcessor.ПолнотекстовыйПоискВДанных Constant.ИспользоватьПолнотекстовыйПоиск FunctionalOption.ИспользоватьПолнотекстовыйПоиск + CommonModule.ПолнотекстовыйПоискСерверПереопределяемый + CommonForm.ФормаПоиска Subsystem.СтандартныеПодсистемы diff --git a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/Пользователи/Пользователи.mdo b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/Пользователи/Пользователи.mdo index c55c9a568..0f069381e 100644 --- a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/Пользователи/Пользователи.mdo +++ b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/Пользователи/Пользователи.mdo @@ -38,11 +38,9 @@ EventSubscription.ОбновитьПредставлениеВнешнегоПользователя Role.ЧтениеВнешнихПользователей Role.ДобавлениеИзменениеВнешнихПользователей - Role.ИзменениеТекущегоВнешнегоПользователя SessionParameter.ТекущийВнешнийПользователь CommonModule.ПользователиСлужебный CommonModule.ВнешниеПользователи - Role.ИзменениеТекущегоПользователя Role.ДобавлениеИзменениеПользователей Constant.ИспользоватьГруппыПользователей FunctionalOption.ИспользоватьВнешнихПользователей @@ -59,5 +57,18 @@ SessionParameter.АвторизованныйПользователь Report.СведенияОПользователях DefinedType.ВнешнийПользователь + DefinedType.ФизическоеЛицо + DefinedType.Подразделение + CommonForm.НастройкиВходаПользователей + CommonForm.СменаПароля + CommonForm.ВходВПрограммуЗапрещен + CommonCommand.СменитьПароль + CommonCommand.СведенияОПользователе + Constant.НастройкиВходаПользователей + ScheduledJob.КонтрольАктивностиПользователей + InformationRegister.СведенияОПользователях + DefinedType.ВнешнийПользовательОбъект + CommonForm.ВыборТиповПользователей + DefinedType.Пользователь Subsystem.СтандартныеПодсистемы diff --git a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/ПрисоединенныеФайлы/ПрисоединенныеФайлы.mdo b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/ПрисоединенныеФайлы/ПрисоединенныеФайлы.mdo index f91dbba14..45f54f866 100644 --- a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/ПрисоединенныеФайлы/ПрисоединенныеФайлы.mdo +++ b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/ПрисоединенныеФайлы/ПрисоединенныеФайлы.mdo @@ -17,5 +17,13 @@ CommonModule.ПрисоединенныеФайлыСлужебныйВызовСервера CommonModule.ПрисоединенныеФайлыПереопределяемый CommonModule.ПрисоединенныеФайлыКлиентСервер + DefinedType.ВладелецПрисоединенныхФайлов + DefinedType.ПрисоединенныйФайл + DefinedType.ПрисоединенныйФайлОбъект + DefinedType.ВладелецПрисоединенныхФайловОбъект + EventSubscription.ВыполнитьДействияПередЗаписьюПрисоединенногоФайла + EventSubscription.УстановитьПометкуУдаленияПрисоединенныхФайлов + EventSubscription.ВыполнитьДействияПриЗаписиПрисоединенногоФайла + EventSubscription.ВыполнитьДействияПередУдалениемПрисоединенногоФайла Subsystem.СтандартныеПодсистемы diff --git a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/РаботаВМоделиСервиса/Subsystems/ПользователиВМоделиСервиса/ПользователиВМоделиСервиса.mdo b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/РаботаВМоделиСервиса/Subsystems/ПользователиВМоделиСервиса/ПользователиВМоделиСервиса.mdo index 90ebbd202..12887b48e 100644 --- a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/РаботаВМоделиСервиса/Subsystems/ПользователиВМоделиСервиса/ПользователиВМоделиСервиса.mdo +++ b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/РаботаВМоделиСервиса/Subsystems/ПользователиВМоделиСервиса/ПользователиВМоделиСервиса.mdo @@ -6,7 +6,6 @@ Пользователи в модели сервиса CommonModule.ПользователиСлужебныйВМоделиСервиса - CommonForm.ИнформацияНеразделенногоПользователя CommonForm.ПользователиСервиса CommonCommand.ДобавитьПользователейСервиса CommonModule.ПользователиСлужебныйВМоделиСервисаКлиент diff --git a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/РаботаВМоделиСервиса/Subsystems/УдаленноеАдминистрирование/УдаленноеАдминистрирование.mdo b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/РаботаВМоделиСервиса/Subsystems/УдаленноеАдминистрирование/УдаленноеАдминистрирование.mdo index 0b3fe7a9a..d0313fac1 100644 --- a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/РаботаВМоделиСервиса/Subsystems/УдаленноеАдминистрирование/УдаленноеАдминистрирование.mdo +++ b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/РаботаВМоделиСервиса/Subsystems/УдаленноеАдминистрирование/УдаленноеАдминистрирование.mdo @@ -7,8 +7,8 @@ Constant.КонечнаяТочкаМенеджераСервиса Constant.ВнутреннийАдресМенеджераСервиса - Constant.ИмяСлужебногоПользователяМенеджераСервиса - Constant.ПарольСлужебногоПользователяМенеджераСервиса + Constant.УдалитьИмяСлужебногоПользователяМенеджераСервиса + Constant.УдалитьПарольСлужебногоПользователяМенеджераСервиса CommonModule.СообщенияКонтрольУдаленногоАдминистрированияИнтерфейс CommonModule.СообщенияУдаленногоАдминистрированияИнтерфейс CommonModule.СообщенияУдаленногоАдминистрированияОбработчикСообщения_1_0_3_1 diff --git a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/РаботаСКонтрагентами/РаботаСКонтрагентами.mdo b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/РаботаСКонтрагентами/РаботаСКонтрагентами.mdo index 8caddd1fe..72786951f 100644 --- a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/РаботаСКонтрагентами/РаботаСКонтрагентами.mdo +++ b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/РаботаСКонтрагентами/РаботаСКонтрагентами.mdo @@ -10,7 +10,7 @@ Constant.ИспользоватьПроверкуКонтрагентов CommonModule.ПроверкаКонтрагентов StyleItem.ЦветФонаТестовогоРежимаСервисаФНС - CommonModule.ПроверкаКонтрагентовПереопределяемый + CommonModule.РаботаСКонтрагентамиПереопределяемый Enum.СостоянияСуществованияКонтрагента CommonCommand.НастройкиПроверкиКонтрагентов CommonForm.ВключениеПроверкиКонтрагентов @@ -22,9 +22,9 @@ CommonModule.ПроверкаКонтрагентовКлиентСервер Enum.СостоянияПроверкиКонтрагентов InformationRegister.ДокументыСОшибкамиПроверкиКонтрагентов - CommonModule.ПроверкаКонтрагентовКлиентСерверПереопределяемый + CommonModule.РаботаСКонтрагентамиКлиентСерверПереопределяемый CommonPicture.НекорректныйКонтрагент - CommonModule.ПроверкаКонтрагентовКлиентПереопределяемый + CommonModule.РаботаСКонтрагентамиКлиентПереопределяемый DataProcessor.СбросНастроекПроверкиКонтрагентов CommonModule.РегламентированныеДанныеКлиентСервер CommonModule.ДанныеЕдиныхГосРеестров @@ -39,5 +39,10 @@ CommonModule.ПроверкаКонтрагентовКлиентСерверПовтИсп DefinedType.Контрагент CommonCommand.ПереходКНастройкамДоступаКВебСервису + DefinedType.КонтрагентОбъект + EventSubscription.СохранитьРезультатПроверкиКонтрагента + CommonForm.ЗаполнениеРеквизитовКонтрагента + Role.ИспользованиеДосьеКонтрагента + Report.ДосьеКонтрагента Subsystem.СтандартныеПодсистемы diff --git a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/РаботаСПочтовымиСообщениями/РаботаСПочтовымиСообщениями.mdo b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/РаботаСПочтовымиСообщениями/РаботаСПочтовымиСообщениями.mdo index ddce2cdea..fd00aebef 100644 --- a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/РаботаСПочтовымиСообщениями/РаботаСПочтовымиСообщениями.mdo +++ b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/РаботаСПочтовымиСообщениями/РаботаСПочтовымиСообщениями.mdo @@ -13,7 +13,6 @@ CommonModule.РаботаСПочтовымиСообщениямиСлужебный CommonModule.РаботаСПочтовымиСообщениямиКлиент CommonModule.РаботаСПочтовымиСообщениями - CommonForm.ПодтверждениеПароляУчетнойЗаписи CommonForm.ОтправкаСообщения Catalog.УчетныеЗаписиЭлектроннойПочты Enum.ВариантыSMTPАутентификации @@ -24,5 +23,6 @@ CommonCommand.НастройкаСистемнойУчетнойЗаписиЭлектроннойПочты Role.ИспользованиеУчетныхЗаписейЭлектроннойПочты CommonModule.РаботаСПочтовымиСообщениямиВызовСервера + CommonForm.ОтправкаТабличныхДокументовПоПочте Subsystem.СтандартныеПодсистемы diff --git a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/РаботаСФайлами/РаботаСФайлами.mdo b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/РаботаСФайлами/РаботаСФайлами.mdo index 40d4d1054..76b5e3e03 100644 --- a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/РаботаСФайлами/РаботаСФайлами.mdo +++ b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/РаботаСФайлами/РаботаСФайлами.mdo @@ -25,15 +25,12 @@ CommonPicture.Папки CommonCommand.РазместитьФайлыНачальногоОбраза CommonPicture.Сканирование - InformationRegister.НомераОтсканированныхФайлов FilterCriterion.ФайлыВТоме - CommonModule.РаботаСоСканеромКлиент Enum.ФорматыСканированногоИзображения Enum.РазрешенияСканированногоИзображения Enum.ЦветностиИзображения Enum.СпособыПоворотаИзображения Enum.РазмерыБумаги - CommonTemplate.КомпонентаTWAIN InformationRegister.ФайлыВРабочемКаталоге Enum.ДействияСФайламиПоДвойномуЩелчку Enum.ВариантыСжатияTIFF @@ -54,5 +51,7 @@ CommonModule.РаботаСФайламиСлужебныйКлиент InformationRegister.КодировкиВерсийФайлов DefinedType.ВладелецФайлов + DefinedType.ВладелецФайловОбъект + EventSubscription.УстановитьПометкуУдаленияФайлов Subsystem.СтандартныеПодсистемы diff --git a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/РегламентныеЗадания/РегламентныеЗадания.mdo b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/РегламентныеЗадания/РегламентныеЗадания.mdo index 5c57ec61b..678d0289e 100644 --- a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/РегламентныеЗадания/РегламентныеЗадания.mdo +++ b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/РегламентныеЗадания/РегламентныеЗадания.mdo @@ -15,5 +15,7 @@ DataProcessor.РегламентныеИФоновыеЗадания Constant.НастройкиВыполненияРегламентныхЗаданий CommonModule.РегламентныеЗаданияСлужебный + CommonModule.РегламентныеЗаданияПереопределяемый + EventSubscription.ВключитьРегламентноеЗаданиеПриИзмененииФункциональнойОпции Subsystem.СтандартныеПодсистемы diff --git a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/РезервноеКопированиеИБ/CommandInterface.cmi b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/РезервноеКопированиеИБ/CommandInterface.cmi index 47ec62b1f..ff5d6c1e9 100644 --- a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/РезервноеКопированиеИБ/CommandInterface.cmi +++ b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/РезервноеКопированиеИБ/CommandInterface.cmi @@ -2,7 +2,7 @@ - DataProcessor.РезервноеКопированиеИБ.Command.ВыполнитьВосстановлениеИБ + DataProcessor.РезервноеКопированиеИБ.Command.ВыполнитьВосстановлениеДанных diff --git a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/Свойства/Свойства.mdo b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/Свойства/Свойства.mdo index ea630b6d3..759a055c9 100644 --- a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/Свойства/Свойства.mdo +++ b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/Свойства/Свойства.mdo @@ -26,7 +26,6 @@ Role.ИзменениеДополнительныхСведений StyleItem.УдаленныйДополнительныйРеквизитШрифт FunctionalOption.ИспользоватьДополнительныеРеквизитыИСведения - CommonCommand.ДополнительныеСведенияПанельНавигации Catalog.ЗначенияСвойствОбъектовИерархия CommonModule.УправлениеСвойствамиСлужебный Constant.ИспользоватьОбщиеДополнительныеРеквизитыИСведения @@ -34,5 +33,7 @@ Constant.ПараметрыДополнительныхРеквизитовИСведений FunctionalOption.ИспользоватьОбщиеДополнительныеЗначения FunctionalOption.ИспользоватьОбщиеДополнительныеРеквизитыИСведения + DefinedType.ВладелецДополнительныхСведений + Role.ДобавлениеИзменениеДополнительныхРеквизитовИСведений Subsystem.СтандартныеПодсистемы diff --git a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/УправлениеДоступом/УправлениеДоступом.mdo b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/УправлениеДоступом/УправлениеДоступом.mdo index 2cc932743..229a00ff3 100644 --- a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/УправлениеДоступом/УправлениеДоступом.mdo +++ b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/УправлениеДоступом/УправлениеДоступом.mdo @@ -58,5 +58,12 @@ InformationRegister.ЗначенияГруппДоступа InformationRegister.ГруппыЗначенийДоступа InformationRegister.НаборыЗначенийДоступа + DefinedType.ВладелецНаборовЗначенийДоступаОбъект + DefinedType.ВладелецНастроекПравОбъект + DefinedType.ВладелецСОграничениемПоНаборамЗначенийДоступаОбъект + DefinedType.ВладелецВнешнихЗначенийВНаборахЗначенийДоступаОбъект + DefinedType.ЗначениеДоступаСГруппамиЗначенийДоступаОбъект + EventSubscription.ЗаполнитьНаборыЗначенийДоступаТабличныхЧастей + EventSubscription.ОбновитьГруппыВладельцевНастроекПрав Subsystem.СтандартныеПодсистемы diff --git a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/ФайловыеФункции/ФайловыеФункции.mdo b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/ФайловыеФункции/ФайловыеФункции.mdo index 61ddc138c..f01df659e 100644 --- a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/ФайловыеФункции/ФайловыеФункции.mdo +++ b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/ФайловыеФункции/ФайловыеФункции.mdo @@ -50,5 +50,15 @@ CommonPicture.ПодписанЗашифрованСостояния CommonForm.ФайлыВТоме CommonCommand.ФайлыВТоме + DataProcessor.Сканирование + InformationRegister.НастройкиОчисткиФайлов + Enum.ВариантыОчисткиФайлов + Enum.ПериодОчисткиФайлов + ScheduledJob.ОчисткаНенужныхФайлов + Report.ОбъемНенужныхФайлов + Report.ПроверкаЦелостностиТома + CommonTemplate.КомпонентаTWAIN + InformationRegister.НомераОтсканированныхФайлов + CommonModule.ФайловыеФункцииКлиент Subsystem.СтандартныеПодсистемы diff --git a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/ЦентрМониторинга/ЦентрМониторинга.mdo b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/ЦентрМониторинга/ЦентрМониторинга.mdo new file mode 100644 index 000000000..200c68f3b --- /dev/null +++ b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/ЦентрМониторинга/ЦентрМониторинга.mdo @@ -0,0 +1,26 @@ + + + ЦентрМониторинга + + ru + Центр мониторинга + + CommonModule.ЦентрМониторингаСлужебный + InformationRegister.ДампыПлатформы + InformationRegister.СтатистикаКонфигурации + InformationRegister.ПакетыДляОтправки + Constant.ПараметрыЦентраМониторинга + InformationRegister.ОперацииСтатистики + InformationRegister.КомментарииСтатистики + InformationRegister.ОбластиСтатистики + InformationRegister.КомментарииОперацииСтатистики + InformationRegister.БуферОперацийСтатистики + InformationRegister.ЗамерыОперацииСтатистики + InformationRegister.ЗамерыКомментарииСтатистики + InformationRegister.ЗамерыОбластиСтатистики + CommonModule.ЦентрМониторингаПереопределяемый + CommonModule.ЦентрМониторинга + ScheduledJob.СборИОтправкаСтатистики + CommonModule.ЦентрМониторингаВызовСервераПовтИсп + Subsystem.СтандартныеПодсистемы + diff --git a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/ЭлектроннаяПодпись/ЭлектроннаяПодпись.mdo b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/ЭлектроннаяПодпись/ЭлектроннаяПодпись.mdo index 8eb1a2104..b01cd3705 100644 --- a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/ЭлектроннаяПодпись/ЭлектроннаяПодпись.mdo +++ b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/ЭлектроннаяПодпись/ЭлектроннаяПодпись.mdo @@ -22,7 +22,7 @@ CommonModule.ЭлектроннаяПодписьКлиентСервер CommonForm.ЭлектроннаяПодпись FunctionalOption.ИспользоватьЭлектронныеПодписи - Role.ИспользованиеЭП + Role.ИспользованиеЭлектроннойПодписиИШифрования CommonForm.ОтчетОСохраненииФайловЭлектронныхПодписей Catalog.ПрограммыЭлектроннойПодписиИШифрования Constant.ИспользоватьШифрование @@ -35,7 +35,7 @@ CommonModule.ЭлектроннаяПодписьСлужебный CommonModule.ЭлектроннаяПодписьСлужебныйКлиент FunctionalOption.ПроверятьЭлектронныеПодписиНаСервере - CommonModule.ЭлектроннаяПодписьПереопределяемыйКлиент + CommonModule.ЭлектроннаяПодписьКлиентПереопределяемый CommonForm.ДобавлениеЭлектроннойПодписиИзФайла CommonForm.СохранениеВместеСЭлектроннойПодписью Constant.СоздаватьЭлектронныеПодписиНаСервере diff --git a/SSL/src/Subsystems/СтандартныеПодсистемы/СтандартныеПодсистемы.mdo b/SSL/src/Subsystems/СтандартныеПодсистемы/СтандартныеПодсистемы.mdo index 04a2c2d9e..b79b549ba 100644 --- a/SSL/src/Subsystems/СтандартныеПодсистемы/СтандартныеПодсистемы.mdo +++ b/SSL/src/Subsystems/СтандартныеПодсистемы/СтандартныеПодсистемы.mdo @@ -60,4 +60,5 @@ УправлениеИтогамиИАгрегатами ФайловыеФункции ЭлектроннаяПодпись + ЦентрМониторинга diff --git a/SSL/src/Tasks/ЗадачаИсполнителя/Commands/ВсеЗадачи/CommandModule.bsl b/SSL/src/Tasks/ЗадачаИсполнителя/Commands/ВсеЗадачи/CommandModule.bsl index 1bd4bb7c6..9d2067c8a 100644 --- a/SSL/src/Tasks/ЗадачаИсполнителя/Commands/ВсеЗадачи/CommandModule.bsl +++ b/SSL/src/Tasks/ЗадачаИсполнителя/Commands/ВсеЗадачи/CommandModule.bsl @@ -1,3 +1,5 @@ +#Область ОбработчикиСобытий + &НаКлиенте Процедура ОбработкаКоманды(ПараметрКоманды, ПараметрыВыполненияКоманды) @@ -8,4 +10,6 @@ ПараметрыВыполненияКоманды.Уникальность, ПараметрыВыполненияКоманды.Окно); -КонецПроцедуры \ No newline at end of file +КонецПроцедуры + +#КонецОбласти \ No newline at end of file diff --git a/SSL/src/Tasks/ЗадачаИсполнителя/Commands/Выполнено/CommandModule.bsl b/SSL/src/Tasks/ЗадачаИсполнителя/Commands/Выполнено/CommandModule.bsl index bbaf6e376..f0605dfa1 100644 --- a/SSL/src/Tasks/ЗадачаИсполнителя/Commands/Выполнено/CommandModule.bsl +++ b/SSL/src/Tasks/ЗадачаИсполнителя/Commands/Выполнено/CommandModule.bsl @@ -1,3 +1,4 @@ +#Область ОбработчикиСобытий &НаКлиенте Процедура ОбработкаКоманды(ПараметрКоманды, ПараметрыВыполненияКоманды) @@ -19,3 +20,4 @@ КонецПроцедуры +#КонецОбласти \ No newline at end of file diff --git a/SSL/src/Tasks/ЗадачаИсполнителя/Commands/МоиЗадачи/CommandModule.bsl b/SSL/src/Tasks/ЗадачаИсполнителя/Commands/МоиЗадачи/CommandModule.bsl index 29873566c..9177ec4c6 100644 --- a/SSL/src/Tasks/ЗадачаИсполнителя/Commands/МоиЗадачи/CommandModule.bsl +++ b/SSL/src/Tasks/ЗадачаИсполнителя/Commands/МоиЗадачи/CommandModule.bsl @@ -1,3 +1,5 @@ +#Область ОбработчикиСобытий + &НаКлиенте Процедура ОбработкаКоманды(ПараметрКоманды, ПараметрыВыполненияКоманды) @@ -8,4 +10,6 @@ ПараметрыВыполненияКоманды.Уникальность, ПараметрыВыполненияКоманды.Окно); -КонецПроцедуры \ No newline at end of file +КонецПроцедуры + +#КонецОбласти \ No newline at end of file diff --git a/SSL/src/Tasks/ЗадачаИсполнителя/Commands/Перенаправить/CommandModule.bsl b/SSL/src/Tasks/ЗадачаИсполнителя/Commands/Перенаправить/CommandModule.bsl index 51b5c417b..827fa8295 100644 --- a/SSL/src/Tasks/ЗадачаИсполнителя/Commands/Перенаправить/CommandModule.bsl +++ b/SSL/src/Tasks/ЗадачаИсполнителя/Commands/Перенаправить/CommandModule.bsl @@ -1,3 +1,4 @@ +#Область ОбработчикиСобытий &НаКлиенте Процедура ОбработкаКоманды(ПараметрКоманды, ПараметрыВыполненияКоманды) @@ -5,3 +6,5 @@ БизнесПроцессыИЗадачиКлиент.ПеренаправитьЗадачи(ПараметрКоманды, ПараметрыВыполненияКоманды.Источник); КонецПроцедуры + +#КонецОбласти \ No newline at end of file diff --git a/SSL/src/Tasks/ЗадачаИсполнителя/Forms/Дополнительно/Form.form b/SSL/src/Tasks/ЗадачаИсполнителя/Forms/Дополнительно/Form.form index 22ff3a690..aabab48f1 100644 --- a/SSL/src/Tasks/ЗадачаИсполнителя/Forms/Дополнительно/Form.form +++ b/SSL/src/Tasks/ЗадачаИсполнителя/Forms/Дополнительно/Form.form @@ -833,7 +833,6 @@ true true true - UseIfNecessary auto true diff --git a/SSL/src/Tasks/ЗадачаИсполнителя/Forms/Дополнительно/Help/ru.html b/SSL/src/Tasks/ЗадачаИсполнителя/Forms/Дополнительно/Help/ru.html index ddb18045c..31e927ccd 100644 --- a/SSL/src/Tasks/ЗадачаИсполнителя/Forms/Дополнительно/Help/ru.html +++ b/SSL/src/Tasks/ЗадачаИсполнителя/Forms/Дополнительно/Help/ru.html @@ -6,13 +6,13 @@
        • Задача - наименование задачи;
        • Номер - проставляется программой автоматически;
        • Записана - дата и время создания задачи, проставляется программой автоматически; -
        • Срок - дата и время, до которого необходимо выполнить задачу.

        Задача адресована

        -

        Бизнес-процесс

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

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

        Бизнес-процесс

        Результат выполнения задачи

        Реквизиты этой группы заполнены, если задача выполнена:

        • флажок Выполнена
        • Выполнена - дата и время выполнения задачи.

        См. также:

        - \ No newline at end of file +
      • \ No newline at end of file diff --git a/SSL/src/Tasks/ЗадачаИсполнителя/Forms/ЗадачиПоБизнесПроцессу/Form.form b/SSL/src/Tasks/ЗадачаИсполнителя/Forms/ЗадачиПоБизнесПроцессу/Form.form index 18a49f479..687eea681 100644 --- a/SSL/src/Tasks/ЗадачаИсполнителя/Forms/ЗадачиПоБизнесПроцессу/Form.form +++ b/SSL/src/Tasks/ЗадачаИсполнителя/Forms/ЗадачиПоБизнесПроцессу/Form.form @@ -1217,7 +1217,6 @@ true true true - UseIfNecessary auto true @@ -1472,7 +1471,7 @@ TextPicture - Auto + DontUse Auto @@ -1498,7 +1497,7 @@ Обновить - Auto + DontUse Auto diff --git a/SSL/src/Tasks/ЗадачаИсполнителя/Forms/ЗадачиПоБизнесПроцессу/Help/ru.html b/SSL/src/Tasks/ЗадачаИсполнителя/Forms/ЗадачиПоБизнесПроцессу/Help/ru.html index 7811e456b..6fb251b1a 100644 --- a/SSL/src/Tasks/ЗадачаИсполнителя/Forms/ЗадачиПоБизнесПроцессу/Help/ru.html +++ b/SSL/src/Tasks/ЗадачаИсполнителя/Forms/ЗадачиПоБизнесПроцессу/Help/ru.html @@ -8,8 +8,7 @@
      • Наименование - полное наименование задачи. Рядом проставляется значок  Задача.
      • Исполнитель задачи;
      • Срок исполнения - дата и время, к которому Задание должно быть выполнено.
      • Изменение режима просмотра

        -

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

        -

        Просмотр задачи

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

        Просмотр задачи

        • Нажмите Изменить, для того чтобы открыть задачу для просмотра или редактирования.
        • diff --git a/SSL/src/Tasks/ЗадачаИсполнителя/Forms/ЗадачиПоБизнесПроцессу/Module.bsl b/SSL/src/Tasks/ЗадачаИсполнителя/Forms/ЗадачиПоБизнесПроцессу/Module.bsl index 33debb7ff..d7b9d8a22 100644 --- a/SSL/src/Tasks/ЗадачаИсполнителя/Forms/ЗадачиПоБизнесПроцессу/Module.bsl +++ b/SSL/src/Tasks/ЗадачаИсполнителя/Forms/ЗадачиПоБизнесПроцессу/Module.bsl @@ -23,8 +23,7 @@ Элементы.ДеревоЗадач.Видимость = Ложь; КонецЕсли; - Заголовок = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Задачи бизнес-процесса %1'"), Строка(Параметры.ЗначениеОтбора)); + Заголовок = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Задачи бизнес-процесса %1'"), Строка(Параметры.ЗначениеОтбора)); БизнесПроцессыИЗадачиСервер.УстановитьОформлениеЗадач(Список); Если ИспользоватьПодчиненныеБизнесПроцессы Тогда @@ -37,9 +36,6 @@ Список, "Выполнена", Ложь); КонецЕсли; - ОбщегоНазначенияКлиентСервер.УстановитьЭлементОтбораДинамическогоСписка( - Список, "ПометкаУдаления", Ложь, ВидСравненияКомпоновкиДанных.Равно, , , - РежимОтображенияЭлементаНастройкиКомпоновкиДанных.Обычный); КонецПроцедуры &НаКлиенте @@ -213,12 +209,12 @@ | ИНАЧЕ ЛОЖЬ | КОНЕЦ КАК Остановлен |ИЗ - | %БизнесПроцесс% КАК БизнесПроцессы + | %1 КАК БизнесПроцессы |ГДЕ | БизнесПроцессы.ГлавнаяЗадача = &ГлавнаяЗадача | И БизнесПроцессы.ПометкаУдаления = ЛОЖЬ"; - Запрос.Текст = СтрЗаменить(Запрос.Текст, "%БизнесПроцесс%", МетаданныеБизнесПроцесса.ПолноеИмя()); + Запрос.Текст = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(Запрос.Текст, МетаданныеБизнесПроцесса.ПолноеИмя()); Запрос.УстановитьПараметр("ГлавнаяЗадача", ЗадачаСсылка); Результат = Запрос.Выполнить(); @@ -305,12 +301,12 @@ Если ВыборкаДетальныеЗаписи.СрокИсполнения <> '00010101000000' И ВыборкаДетальныеЗаписи.СрокИсполнения < ТекущаяДатаСеанса() Тогда Строка.Просрочена = Истина; - КонецЕсли; - Если ВыборкаДетальныеЗаписи.Исполнитель.Пустая() Тогда - Строка.Исполнитель = ВыборкаДетальныеЗаписи.РольИсполнителя; - Иначе + КонецЕсли; + Если ЗначениеЗаполнено(ВыборкаДетальныеЗаписи.Исполнитель) Тогда Строка.Исполнитель = ВыборкаДетальныеЗаписи.Исполнитель; - КонецЕсли; + Иначе + Строка.Исполнитель = ВыборкаДетальныеЗаписи.РольИсполнителя; + КонецЕсли; ДобавитьПодчиненныеБизнесПроцессы(Дерево, ВыборкаДетальныеЗаписи.Ссылка); diff --git a/SSL/src/Tasks/ЗадачаИсполнителя/Forms/ЗадачиПоПредмету/Form.form b/SSL/src/Tasks/ЗадачаИсполнителя/Forms/ЗадачиПоПредмету/Form.form index 634239d4a..1d7c9a3ed 100644 --- a/SSL/src/Tasks/ЗадачаИсполнителя/Forms/ЗадачиПоПредмету/Form.form +++ b/SSL/src/Tasks/ЗадачаИсполнителя/Forms/ЗадачиПоПредмету/Form.form @@ -108,6 +108,9 @@ true + + Items.Список.CurrentData.ОсновнойОбъектАдресации + ЗадачаЗадачаИсполнителяВыполненоExtendedTooltip 127 @@ -135,6 +138,9 @@ true + + Items.Список.CurrentData.ОсновнойОбъектАдресации + ЗадачаЗадачаИсполнителяПеренаправитьExtendedTooltip 129 @@ -1932,7 +1938,6 @@ true true true - UseIfNecessary auto true @@ -2223,7 +2228,7 @@ TextPicture - Auto + DontUse Auto @@ -2248,7 +2253,7 @@ Обновить - Auto + DontUse Auto diff --git a/SSL/src/Tasks/ЗадачаИсполнителя/Forms/ЗадачиПоПредмету/Module.bsl b/SSL/src/Tasks/ЗадачаИсполнителя/Forms/ЗадачиПоПредмету/Module.bsl index def88a329..31a598fc9 100644 --- a/SSL/src/Tasks/ЗадачаИсполнителя/Forms/ЗадачиПоПредмету/Module.bsl +++ b/SSL/src/Tasks/ЗадачаИсполнителя/Forms/ЗадачиПоПредмету/Module.bsl @@ -36,10 +36,6 @@ ЗаполнитьДеревоЗадач(); КонецЕсли; - // Установка отбора динамического списка. - ОбщегоНазначенияКлиентСервер.УстановитьЭлементОтбораДинамическогоСписка( - Список, "ПометкаУдаления", Ложь, ВидСравненияКомпоновкиДанных.Равно, , , - РежимОтображенияЭлементаНастройкиКомпоновкиДанных.Обычный); КонецПроцедуры &НаКлиенте @@ -220,22 +216,22 @@ Строка.Ссылка = ВыборкаДетальныеЗаписи.Ссылка; Строка.СрокИсполнения = ВыборкаДетальныеЗаписи.СрокИсполнения; Строка.Выполнена = ВыборкаДетальныеЗаписи.Выполнена; - Если ВыборкаДетальныеЗаписи.СрокИсполнения <> "00010101" + Если ВыборкаДетальныеЗаписи.СрокИсполнения <> "00010101" И ВыборкаДетальныеЗаписи.СрокИсполнения < ТекущаяДатаСеанса() Тогда Строка.Просрочена = Истина; - КонецЕсли; - Если ВыборкаДетальныеЗаписи.Исполнитель.Пустая() Тогда - Строка.Исполнитель = ВыборкаДетальныеЗаписи.РольИсполнителя; - Иначе + КонецЕсли; + Если ЗначениеЗаполнено(ВыборкаДетальныеЗаписи.Исполнитель) Тогда Строка.Исполнитель = ВыборкаДетальныеЗаписи.Исполнитель; - КонецЕсли; + Иначе + Строка.Исполнитель = ВыборкаДетальныеЗаписи.РольИсполнителя; + КонецЕсли; ДобавитьПодчиненныеБизнесПроцессы(Дерево, ВыборкаДетальныеЗаписи.Ссылка); - КонецЕсли; + КонецЕсли; КонецЦикла; -КонецПроцедуры +КонецПроцедуры &НаСервере Процедура ДобавитьПодчиненныеБизнесПроцессы(Дерево, ЗадачаСсылка) @@ -269,12 +265,12 @@ | ИНАЧЕ ЛОЖЬ | КОНЕЦ КАК Остановлен |ИЗ - | %БизнесПроцесс% КАК БизнесПроцессы + | %1 КАК БизнесПроцессы |ГДЕ | БизнесПроцессы.ГлавнаяЗадача = &ГлавнаяЗадача | И БизнесПроцессы.ПометкаУдаления = ЛОЖЬ"; - Запрос.Текст = СтрЗаменить(Запрос.Текст, "%БизнесПроцесс%", МетаданныеБизнесПроцесса.ПолноеИмя()); + Запрос.Текст = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(Запрос.Текст, МетаданныеБизнесПроцесса.ПолноеИмя()); Запрос.УстановитьПараметр("ГлавнаяЗадача", ЗадачаСсылка); Результат = Запрос.Выполнить(); @@ -353,12 +349,12 @@ Если ВыборкаДетальныеЗаписи.СрокИсполнения <> '00010101000000' И ВыборкаДетальныеЗаписи.СрокИсполнения < ТекущаяДатаСеанса() Тогда Строка.Просрочена = Истина; - КонецЕсли; - Если ВыборкаДетальныеЗаписи.Исполнитель.Пустая() Тогда - Строка.Исполнитель = ВыборкаДетальныеЗаписи.РольИсполнителя; - Иначе + КонецЕсли; + Если ЗначениеЗаполнено(ВыборкаДетальныеЗаписи.Исполнитель) Тогда Строка.Исполнитель = ВыборкаДетальныеЗаписи.Исполнитель; - КонецЕсли; + Иначе + Строка.Исполнитель = ВыборкаДетальныеЗаписи.РольИсполнителя; + КонецЕсли; ДобавитьПодчиненныеБизнесПроцессы(Дерево, ВыборкаДетальныеЗаписи.Ссылка); diff --git a/SSL/src/Tasks/ЗадачаИсполнителя/Forms/МоиЗадачи/Form.form b/SSL/src/Tasks/ЗадачаИсполнителя/Forms/МоиЗадачи/Form.form index a181425f9..1e89effb2 100644 --- a/SSL/src/Tasks/ЗадачаИсполнителя/Forms/МоиЗадачи/Form.form +++ b/SSL/src/Tasks/ЗадачаИсполнителя/Forms/МоиЗадачи/Form.form @@ -1001,6 +1001,10 @@ BeforeAddRow СписокПередНачаломДобавления + + OnActivateRow + СписокПриАктивизацииСтроки + СписокСтрокаПоиска 146 @@ -1555,7 +1559,6 @@ true true true - UseIfNecessary auto true @@ -1713,7 +1716,7 @@ СгруппироватьПоВажности - Auto + DontUse Auto @@ -1735,7 +1738,7 @@ СгруппироватьПоТочкеМаршрута - Auto + DontUse Auto @@ -1757,7 +1760,7 @@ СгруппироватьПоБезГруппировки - Auto + DontUse Auto @@ -1779,7 +1782,7 @@ СгруппироватьПоАвтору - Auto + DontUse Auto @@ -1801,7 +1804,7 @@ СгруппироватьПоПредмету - Auto + DontUse Auto @@ -1823,7 +1826,7 @@ ПринятьКИсполнению - Auto + DontUse Auto @@ -1845,7 +1848,7 @@ ОтменитьПринятиеКИсполнению - Auto + DontUse Auto @@ -1871,7 +1874,7 @@ ОбновитьСписокЗадач - Auto + DontUse Auto @@ -1893,7 +1896,7 @@ СгруппироватьПоСроку - Auto + DontUse Auto @@ -1915,7 +1918,7 @@ ОткрытьБизнесПроцесс - Auto + DontUse Auto @@ -1937,7 +1940,7 @@ ОткрытьПредметЗадачи - Auto + DontUse Auto diff --git a/SSL/src/Tasks/ЗадачаИсполнителя/Forms/МоиЗадачи/Help/ru.html b/SSL/src/Tasks/ЗадачаИсполнителя/Forms/МоиЗадачи/Help/ru.html index 4c3df44ac..c9882cfb9 100644 --- a/SSL/src/Tasks/ЗадачаИсполнителя/Forms/МоиЗадачи/Help/ru.html +++ b/SSL/src/Tasks/ЗадачаИсполнителя/Forms/МоиЗадачи/Help/ru.html @@ -1,5 +1,5 @@ -

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

          +

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

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

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

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

          @@ -27,7 +27,9 @@
        • Выполненные задачи помечаются в списке значком .

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

        Подчиненные бизнес-процессы

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

        Напоминание

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

        Напоминание

        См. также:

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

        См. также:

        \ No newline at end of file diff --git a/SSL/src/Tasks/ЗадачаИсполнителя/Forms/МоиЗадачи/Module.bsl b/SSL/src/Tasks/ЗадачаИсполнителя/Forms/МоиЗадачи/Module.bsl index e840350a9..9c7847ac5 100644 --- a/SSL/src/Tasks/ЗадачаИсполнителя/Forms/МоиЗадачи/Module.bsl +++ b/SSL/src/Tasks/ЗадачаИсполнителя/Forms/МоиЗадачи/Module.bsl @@ -23,9 +23,6 @@ БизнесПроцессыИЗадачиСервер.УстановитьОформлениеЗадач(Список); - ОбщегоНазначенияКлиентСервер.УстановитьЭлементОтбораДинамическогоСписка( - Список, "ПометкаУдаления", Ложь, ВидСравненияКомпоновкиДанных.Равно, , , - РежимОтображенияЭлементаНастройкиКомпоновкиДанных.Обычный); КонецПроцедуры &НаСервере @@ -109,6 +106,17 @@ Родитель, Группа); КонецПроцедуры +&НаКлиенте +Процедура СписокПриАктивизацииСтроки(Элемент) + Если Элемент.ТекущиеДанные <> Неопределено + И Элемент.ТекущиеДанные.Свойство("ПринятаКИсполнению") + И НЕ Элемент.ТекущиеДанные.ПринятаКИсполнению Тогда + Элементы.ПринятьКИсполнению.Доступность= Истина; + Иначе + Элементы.ПринятьКИсполнению.Доступность= Ложь; + КонецЕсли; +КонецПроцедуры + #КонецОбласти #Область ОбработчикиКомандФормы diff --git a/SSL/src/Tasks/ЗадачаИсполнителя/Forms/МоиЗадачиДляРабочегоСтола/Form.form b/SSL/src/Tasks/ЗадачаИсполнителя/Forms/МоиЗадачиДляРабочегоСтола/Form.form index 02ef70c37..44c95e8e4 100644 --- a/SSL/src/Tasks/ЗадачаИсполнителя/Forms/МоиЗадачиДляРабочегоСтола/Form.form +++ b/SSL/src/Tasks/ЗадачаИсполнителя/Forms/МоиЗадачиДляРабочегоСтола/Form.form @@ -92,7 +92,7 @@ Form.Command.ОбновитьСписокЗадач Normal - Auto + PictureAndText true true UserCmds @@ -931,6 +931,10 @@ BeforeAddRow СписокПередНачаломДобавления + + OnActivateRow + СписокПриАктивизацииСтроки + СписокСтрокаПоиска 144 @@ -1505,7 +1509,6 @@ true true true - UseIfNecessary auto true @@ -1648,7 +1651,7 @@ СгруппироватьПоВажности - Auto + DontUse Auto @@ -1670,7 +1673,7 @@ СгруппироватьПоТочкеМаршрута - Auto + DontUse Auto @@ -1692,7 +1695,7 @@ СгруппироватьПоБезГруппировки - Auto + DontUse Auto @@ -1714,7 +1717,7 @@ СгруппироватьПоАвтору - Auto + DontUse Auto @@ -1736,7 +1739,7 @@ СгруппироватьПоПредмету - Auto + DontUse Auto @@ -1758,7 +1761,7 @@ ПринятьКИсполнению - Auto + DontUse Auto @@ -1780,7 +1783,7 @@ ОтменитьПринятиеКИсполнению - Auto + DontUse Auto @@ -1806,7 +1809,7 @@ ОбновитьСписокЗадач - Auto + DontUse Auto @@ -1828,7 +1831,7 @@ ОткрытьБизнесПроцесс - Auto + DontUse Auto @@ -1850,7 +1853,7 @@ ОткрытьПредметЗадачи - Auto + DontUse Auto @@ -1872,7 +1875,7 @@ СгруппироватьПоСроку - Auto + DontUse Auto diff --git a/SSL/src/Tasks/ЗадачаИсполнителя/Forms/МоиЗадачиДляРабочегоСтола/Help/ru.html b/SSL/src/Tasks/ЗадачаИсполнителя/Forms/МоиЗадачиДляРабочегоСтола/Help/ru.html index 6e82bb34c..60d9ea705 100644 --- a/SSL/src/Tasks/ЗадачаИсполнителя/Forms/МоиЗадачиДляРабочегоСтола/Help/ru.html +++ b/SSL/src/Tasks/ЗадачаИсполнителя/Forms/МоиЗадачиДляРабочегоСтола/Help/ru.html @@ -1,5 +1,5 @@ -

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

        +

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

        Непринятые к исполнению задачи выделяются в списке жирным шрифтом. Просроченные задачи выделяются красным цветом.

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

        • Задача - полное наименование и автор задачи. diff --git a/SSL/src/Tasks/ЗадачаИсполнителя/Forms/МоиЗадачиДляРабочегоСтола/Module.bsl b/SSL/src/Tasks/ЗадачаИсполнителя/Forms/МоиЗадачиДляРабочегоСтола/Module.bsl index 418e5b5a2..588c80b35 100644 --- a/SSL/src/Tasks/ЗадачаИсполнителя/Forms/МоиЗадачиДляРабочегоСтола/Module.bsl +++ b/SSL/src/Tasks/ЗадачаИсполнителя/Forms/МоиЗадачиДляРабочегоСтола/Module.bsl @@ -29,6 +29,7 @@ ОбщегоНазначенияКлиентСервер.УстановитьЭлементОтбораДинамическогоСписка( Список, "ПометкаУдаления", Ложь, ВидСравненияКомпоновкиДанных.Равно, , , РежимОтображенияЭлементаНастройкиКомпоновкиДанных.Обычный); + КонецПроцедуры &НаСервере @@ -53,6 +54,17 @@ Родитель, Группа); КонецПроцедуры +&НаКлиенте +Процедура СписокПриАктивизацииСтроки(Элемент) + Если Элемент.ТекущиеДанные <> Неопределено + И Элемент.ТекущиеДанные.Свойство("ПринятаКИсполнению") + И НЕ Элемент.ТекущиеДанные.ПринятаКИсполнению Тогда + Элементы.ПринятьКИсполнению.Доступность= Истина; + Иначе + Элементы.ПринятьКИсполнению.Доступность= Ложь; + КонецЕсли; +КонецПроцедуры + #КонецОбласти #Область ОбработчикиКомандФормы @@ -126,18 +138,14 @@ Процедура УстановитьУсловноеОформление() УсловноеОформление.Элементы.Очистить(); - // Элемент = УсловноеОформление.Элементы.Добавить(); - ЭлементыНижнейСтроки = Новый Массив(); ВыбратьВсеПодчиненныеЭлементы(Элементы.НижняяСтрока, ЭлементыНижнейСтроки); Для каждого ЭлементФормы Из ЭлементыНижнейСтроки Цикл - ПолеЭлемента = Элемент.Поля.Элементы.Добавить(); ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(ЭлементФормы.Имя); - КонецЦикла; ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); @@ -146,6 +154,19 @@ Элемент.Оформление.УстановитьЗначениеПараметра("Видимость", Ложь); + Если ОбщегоНазначенияПовтИсп.ДоступноИспользованиеРазделенныхДанных() + И ПользователиКлиентСервер.ЭтоСеансВнешнегоПользователя() Тогда + Элемент = УсловноеОформление.Элементы.Добавить(); + ПолеЭлемента = Элемент.Поля.Элементы.Добавить(); + ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.Автор.Имя); + + ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); + ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Список.Автор"); + ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Заполнено; + + Элемент.Оформление.УстановитьЗначениеПараметра("Текст", ""); + КонецЕсли; + КонецПроцедуры &НаСервере diff --git a/SSL/src/Tasks/ЗадачаИсполнителя/Forms/ПеренаправитьЗадачи/Form.form b/SSL/src/Tasks/ЗадачаИсполнителя/Forms/ПеренаправитьЗадачи/Form.form index 6486fb33d..e68f94eb1 100644 --- a/SSL/src/Tasks/ЗадачаИсполнителя/Forms/ПеренаправитьЗадачи/Form.form +++ b/SSL/src/Tasks/ЗадачаИсполнителя/Forms/ПеренаправитьЗадачи/Form.form @@ -734,7 +734,6 @@ Vertical true true - UseIfNecessary auto true @@ -947,7 +946,7 @@ OK - Auto + DontUse Auto diff --git a/SSL/src/Tasks/ЗадачаИсполнителя/Forms/ПеренаправитьЗадачи/Help/ru.html b/SSL/src/Tasks/ЗадачаИсполнителя/Forms/ПеренаправитьЗадачи/Help/ru.html index 0fadab1b7..10d50127e 100644 --- a/SSL/src/Tasks/ЗадачаИсполнителя/Forms/ПеренаправитьЗадачи/Help/ru.html +++ b/SSL/src/Tasks/ЗадачаИсполнителя/Forms/ПеренаправитьЗадачи/Help/ru.html @@ -1,8 +1,9 @@

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

          См. также:

          \ No newline at end of file diff --git a/SSL/src/Tasks/ЗадачаИсполнителя/Forms/ПеренаправитьЗадачи/Module.bsl b/SSL/src/Tasks/ЗадачаИсполнителя/Forms/ПеренаправитьЗадачи/Module.bsl index df997b9a4..2cf950b02 100644 --- a/SSL/src/Tasks/ЗадачаИсполнителя/Forms/ПеренаправитьЗадачи/Module.bsl +++ b/SSL/src/Tasks/ЗадачаИсполнителя/Forms/ПеренаправитьЗадачи/Module.bsl @@ -17,13 +17,11 @@ ТекстЗаголовка = ""; Если Параметры.КоличествоЗадач > 1 Тогда - ТекстЗаголовка = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = '%1 (%2)'"), + ТекстЗаголовка = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = '%1 (%2)'"), ?(ЗаголовокПоУмолчанию, НСтр("ru = 'Выбрано задач'"), ТекстЗаголовкаФормы), Строка(Параметры.КоличествоЗадач)); ИначеЕсли Параметры.КоличествоЗадач = 1 Тогда - ТекстЗаголовка = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = '%1 %2'"), + ТекстЗаголовка = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = '%1 %2'"), ?(ЗаголовокПоУмолчанию, НСтр("ru = 'Выбранная задача'"), ТекстЗаголовкаФормы), Строка(Параметры.Задача)); Иначе @@ -40,7 +38,7 @@ Процедура ОбработкаПроверкиЗаполненияНаСервере(Отказ, ПроверяемыеРеквизиты) Если ТипАдресации = 0 Тогда - Если Исполнитель.Пустая() Тогда + Если НЕ ЗначениеЗаполнено(Исполнитель) Тогда ОбщегоНазначенияКлиентСервер.СообщитьПользователю( НСтр("ru = 'Не указан исполнитель задачи.'"),,, "Исполнитель", @@ -64,24 +62,20 @@ Если ЗаданыТипыОсновногоОбъектаАдресации И ОсновнойОбъектАдресации = Неопределено Тогда ОбщегоНазначенияКлиентСервер.СообщитьПользователю( - СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Поле ""%1"" не заполнено.'"), - Роль.ТипыОсновногоОбъектаАдресации.Наименование),,, + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Поле ""%1"" не заполнено.'"), Роль.ТипыОсновногоОбъектаАдресации.Наименование),,, "ОсновнойОбъектАдресации", Отказ); Возврат; ИначеЕсли ЗаданыТипыДополнительногоОбъектаАдресации И ДополнительныйОбъектАдресации = Неопределено Тогда ОбщегоНазначенияКлиентСервер.СообщитьПользователю( - СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Поле ""%1"" не заполнено.'"), - Роль.ТипыДополнительногоОбъектаАдресации.Наименование),,, + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Поле ""%1"" не заполнено.'"), Роль.ТипыДополнительногоОбъектаАдресации.Наименование),,, "ДополнительныйОбъектАдресации", Отказ); Возврат; КонецЕсли; - Если НЕ ИгнорироватьПредупреждения И - НЕ БизнесПроцессыИЗадачиСервер.ЕстьИсполнителиРоли(Роль, ОсновнойОбъектАдресации, ДополнительныйОбъектАдресации) Тогда + Если НЕ ИгнорироватьПредупреждения + И НЕ БизнесПроцессыИЗадачиСервер.ЕстьИсполнителиРоли(Роль, ОсновнойОбъектАдресации, ДополнительныйОбъектАдресации) Тогда ОбщегоНазначенияКлиентСервер.СообщитьПользователю( НСтр("ru = 'На указанную роль не назначено ни одного исполнителя. (Чтобы проигнорировать это предупреждение, установите флажок.)'"),,, "Роль", @@ -199,12 +193,15 @@ &НаКлиенте Функция ПараметрыЗакрытия() - Возврат Новый Структура("Исполнитель,РольИсполнителя,ОсновнойОбъектАдресации,ДополнительныйОбъектАдресации,Комментарий", - Исполнитель, - Роль, - ?(ОсновнойОбъектАдресации <> Неопределено И НЕ ОсновнойОбъектАдресации.Пустая(), ОсновнойОбъектАдресации, Неопределено), - ?(ДополнительныйОбъектАдресации <> Неопределено И НЕ ДополнительныйОбъектАдресации.Пустая(), ДополнительныйОбъектАдресации, Неопределено), - Комментарий); + Результат = Новый Структура; + Результат.Вставить("Исполнитель", Исполнитель); + Результат.Вставить("РольИсполнителя", Роль); + Результат.Вставить("ОсновнойОбъектАдресации", + ?(ОсновнойОбъектАдресации <> Неопределено И НЕ ОсновнойОбъектАдресации.Пустая(), ОсновнойОбъектАдресации, Неопределено)); + Результат.Вставить("ДополнительныйОбъектАдресации", + ?(ДополнительныйОбъектАдресации <> Неопределено И НЕ ДополнительныйОбъектАдресации.Пустая(), ДополнительныйОбъектАдресации, Неопределено)); + Результат.Вставить("Комментарий", Комментарий); + Возврат Результат; КонецФункции diff --git a/SSL/src/Tasks/ЗадачаИсполнителя/Forms/ФормаЗадачи/Form.form b/SSL/src/Tasks/ЗадачаИсполнителя/Forms/ФормаЗадачи/Form.form index b2900a7d9..6dcee52c5 100644 --- a/SSL/src/Tasks/ЗадачаИсполнителя/Forms/ФормаЗадачи/Form.form +++ b/SSL/src/Tasks/ЗадачаИсполнителя/Forms/ФормаЗадачи/Form.form @@ -220,6 +220,41 @@ Normal + + АвторСтрокой + 165 + true + + true + + + АвторСтрокой + + + АвторСтрокойРасширеннаяПодсказка + 167 + Label + true + true + + Left + + + + АвторСтрокойКонтекстноеМеню + 166 + true + + LabelField + Enter + true + Left + true + + true + true + + Исполнитель 20 @@ -551,7 +586,6 @@ ru Реквизиты шапки - ГруппаРеквизитыШапкиExtendedTooltip 146 @@ -1097,7 +1131,6 @@ ru Результат выполнения - ГруппаРезультатExtendedTooltip 160 @@ -1276,7 +1309,6 @@ true true true - UseIfNecessary auto true @@ -1329,6 +1361,24 @@ true + + АвторСтрокой + + <key>ru</key> + <value>Автор</value> + + 6 + + String + + + + true + + + true + + ЗаписатьИЗакрыть @@ -1348,7 +1398,7 @@ <name>ЗаписатьИЗакрытьВыполнить</name> </handler> </action> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <formCommands> @@ -1375,7 +1425,7 @@ </action> <representation>TextPicture</representation> <modifiesStoredData>true</modifiesStoredData> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <formCommands> @@ -1397,7 +1447,7 @@ <name>Дополнительно</name> </handler> </action> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <commandInterface> diff --git a/SSL/src/Tasks/ЗадачаИсполнителя/Forms/ФормаЗадачи/Help/ru.html b/SSL/src/Tasks/ЗадачаИсполнителя/Forms/ФормаЗадачи/Help/ru.html index 2d2f7d34f..951f28662 100644 --- a/SSL/src/Tasks/ЗадачаИсполнителя/Forms/ФормаЗадачи/Help/ru.html +++ b/SSL/src/Tasks/ЗадачаИсполнителя/Forms/ФормаЗадачи/Help/ru.html @@ -11,9 +11,11 @@ <div><strong>Дата</strong> выполнения заполняется программой автоматически.</div></li></ul><h3>Отправка другому исполнителю</h3> <ul><li>Нажмите <strong>Перенаправить</strong>, заполните <a href="Task.ЗадачаИсполнителя.Form.ПеренаправитьЗадачи/Help">данные</a> о другом исполнителе.</li></ul><h3>Подчиненные бизнес-процессы</h3> <ul><li>Можно <strong>Создать на основании</strong> этой задачи новый <a href="v8help://1cv8/EnterprWorkingWithBusinessProcesses_StandardInterface">бизнес-процесс</a>, например, <a href="BusinessProcess.Задание.Form.ФормаБизнесПроцесса/Help">Задание</a> (при наличии соответствующих прав). -</li><li>Для того чтобы использовать эту возможность, должен быть включен флажок <strong>Подчиненные бизнес-процессы</strong> в разделе <strong>Администрирование - Органайзер</strong>.</li></ul><h3>Напоминание</h3> +</li><li>Для того чтобы использовать эту возможность, должен быть включен флажок <strong>Подчиненные бизнес-процессы</strong> в разделе <strong>Администрирование - Органайзер</strong>.</li></ul><a name="СтандартныеПодсистемы.Пользователи"> +<h3>Напоминание</h3> <ul><li>Для того чтобы не забыть выполнить задачу, можно ввести <strong>Напоминание</strong>, <a href="InformationRegister.НапоминанияПользователя.Form.ФормаОповещения/Help">текст</a> которого будет выведен в указанное время. -</li><li>Нажмите <img src="CommonPicture.Напоминание"></img>, выберите действие, например, <strong>Напомнить</strong>, заполните необходимые <a href="InformationRegister.НапоминанияПользователя.Form.Напоминание/Help">поля</a>.</li></ul><h3>Дополнительные сведения</h3> +</li><li>Нажмите <img src="CommonPicture.Напоминание"></img>, выберите действие, например, <strong>Напомнить</strong>, заполните необходимые <a href="InformationRegister.НапоминанияПользователя.Form.Напоминание/Help">поля</a>.</li></ul></a> +<h3>Дополнительные сведения</h3> <ul><li>Выполните команду <strong>Еще</strong> <strong>- Дополнительно</strong>, для того чтобы просмотреть <a href="Task.ЗадачаИсполнителя.Form.Дополнительно/Help">дополнительные сведения о задаче</a>.</li></ul><h3>См. также:</h3> <ul><li><a href="BusinessProcess.Задание.Form.ДействиеВыполнить/Help">Выполнение задачи</a>; </li><li><a href="BusinessProcess.Задание.Form.ДействиеПроверить/Help">Проверка выполнения задачи</a>; diff --git a/SSL/src/Tasks/ЗадачаИсполнителя/Forms/ФормаЗадачи/Module.bsl b/SSL/src/Tasks/ЗадачаИсполнителя/Forms/ФормаЗадачи/Module.bsl index f7b276987..3e48003f9 100644 --- a/SSL/src/Tasks/ЗадачаИсполнителя/Forms/ФормаЗадачи/Module.bsl +++ b/SSL/src/Tasks/ЗадачаИсполнителя/Forms/ФормаЗадачи/Module.bsl @@ -14,6 +14,9 @@ ИнициализацияФормы(); КонецЕсли; + УстановитьПривилегированныйРежим(Истина); + АвторСтрокой = Строка(Объект.Автор); + КонецПроцедуры &НаСервере @@ -115,7 +118,12 @@ БизнесПроцессыИЗадачиСервер.ФормаЗадачиПриСозданииНаСервере(ЭтотОбъект, Объект, Элементы.ГруппаСостояние, Элементы.ДатаИсполнения); - -КонецПроцедуры + + Если ПользователиКлиентСервер.ЭтоСеансВнешнегоПользователя() Тогда + Элементы.Автор.Видимость = Ложь; + Элементы.АвторСтрокой.Видимость = Истина; + Элементы.Исполнитель.КнопкаОткрытия = Ложь; + КонецЕсли; +КонецПроцедуры #КонецОбласти diff --git a/SSL/src/Tasks/ЗадачаИсполнителя/Forms/ФормаСписка/Form.form b/SSL/src/Tasks/ЗадачаИсполнителя/Forms/ФормаСписка/Form.form index 2aaf899f4..e30443d1f 100644 --- a/SSL/src/Tasks/ЗадачаИсполнителя/Forms/ФормаСписка/Form.form +++ b/SSL/src/Tasks/ЗадачаИсполнителя/Forms/ФормаСписка/Form.form @@ -1693,6 +1693,10 @@ <event>BeforeAddRow</event> <name>СписокПередНачаломДобавления</name> </handlers> + <handlers> + <event>OnActivateRow</event> + <name>СписокПриАктивизацииСтроки</name> + </handlers> <searchStringAddition> <name>СписокСтрокаПоиска</name> <id>171</id> @@ -2202,7 +2206,6 @@ <autoFillCheck>true</autoFillCheck> <allowFormCustomize>true</allowFormCustomize> <enabled>true</enabled> - <verticalScroll>UseIfNecessary</verticalScroll> <showTitle>auto</showTitle> <showCloseButton>true</showCloseButton> <attributes> @@ -2229,6 +2232,9 @@ <notDefaultUseAlwaysAttributes xsi:type="form:DataPath"> <segments>Список.ПредметСтрокой</segments> </notDefaultUseAlwaysAttributes> + <notDefaultUseAlwaysAttributes xsi:type="form:DataPath"> + <segments>Список.ПринятаКИсполнению</segments> + </notDefaultUseAlwaysAttributes> <main>true</main> <extInfo xsi:type="form:DynamicListExtInfo"> <queryText>ВЫБРАТЬ @@ -2411,7 +2417,7 @@ <name>ПринятьКИсполнению</name> </handler> </action> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <formCommands> @@ -2433,7 +2439,7 @@ <name>ОтменитьПринятиеКИсполнению</name> </handler> </action> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <formCommands> @@ -2459,7 +2465,7 @@ <name>ОбновитьСписокЗадач</name> </handler> </action> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <formCommands> @@ -2481,7 +2487,7 @@ <name>ОткрытьБизнесПроцесс</name> </handler> </action> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <formCommands> @@ -2503,7 +2509,7 @@ <name>ОткрытьПредметЗадачи</name> </handler> </action> - <currentRowUse>Auto</currentRowUse> + <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <parameters> diff --git a/SSL/src/Tasks/ЗадачаИсполнителя/Forms/ФормаСписка/Help/ru.html b/SSL/src/Tasks/ЗадачаИсполнителя/Forms/ФормаСписка/Help/ru.html index e2d411453..c0e7518da 100644 --- a/SSL/src/Tasks/ЗадачаИсполнителя/Forms/ФормаСписка/Help/ru.html +++ b/SSL/src/Tasks/ЗадачаИсполнителя/Forms/ФормаСписка/Help/ru.html @@ -17,9 +17,10 @@ </li><li><strong>Выполненные;</strong> </li><li><strong>Не выполненные</strong>.</li></ul></li></ul><h3>Отборы</h3> <p>Задачи можно отобрать:</p> -<ul><li>по <strong>Автору</strong> - выберите автора из списка <a href="Catalog.Пользователи/Help">Пользователи</a>; -</li><li>по <strong>Исполнителю</strong> - выберите в качестве исполнителя <a href="Catalog.Пользователи.Form.ФормаЭлемента/Help">пользователя</a> из списка; -</li><li> +<ul><a name="СтандартныеПодсистемы.Пользователи"> +<li>по <strong>Автору</strong> - выберите автора из списка <a href="Catalog.Пользователи/Help">Пользователи</a>; +</li><li>по <strong>Исполнителю</strong> - выберите в качестве исполнителя <a href="Catalog.Пользователи.Form.ФормаЭлемента/Help">пользователя</a> из списка;</li></a> +<li> <div>по периоду - для этого выполните команду контекстного меню по правой кнопке мыши или меню <strong>Еще</strong> - <strong>Установить интервал дат</strong>. </div></li></ul><h3>Просмотр задачи</h3> <ul><li>Для просмотра задачи дважды щелкните по нужной строке левой кнопкой мыши. </li><li>Также можно воспользоваться командой <strong>Изменить</strong> контекстного меню по правой кнопке мыши или меню <strong>Еще</strong>.</li></ul><h3>Просмотр предмета</h3> diff --git a/SSL/src/Tasks/ЗадачаИсполнителя/Forms/ФормаСписка/Module.bsl b/SSL/src/Tasks/ЗадачаИсполнителя/Forms/ФормаСписка/Module.bsl index c7462cbc1..44a1d00f5 100644 --- a/SSL/src/Tasks/ЗадачаИсполнителя/Forms/ФормаСписка/Module.bsl +++ b/SSL/src/Tasks/ЗадачаИсполнителя/Forms/ФормаСписка/Module.bsl @@ -10,8 +10,8 @@ Возврат; КонецЕсли; - Если Параметры.Свойство("ЗаголовокФормы", ТекстЗаголовкаФормы) И - НЕ ПустаяСтрока(ТекстЗаголовкаФормы) Тогда + Если Параметры.Свойство("ЗаголовокФормы", ТекстЗаголовкаФормы) + И НЕ ПустаяСтрока(ТекстЗаголовкаФормы) Тогда Заголовок = ТекстЗаголовкаФормы; АвтоЗаголовок = Ложь; @@ -46,10 +46,6 @@ БизнесПроцессыИЗадачиСервер.УстановитьОформлениеЗадач(Список); - // Установка отбора динамического списка. - ОбщегоНазначенияКлиентСервер.УстановитьЭлементОтбораДинамическогоСписка( - Список, "ПометкаУдаления", Ложь, ВидСравненияКомпоновкиДанных.Равно, , Ложь, - РежимОтображенияЭлементаНастройкиКомпоновкиДанных.Обычный); КонецПроцедуры &НаКлиенте @@ -115,6 +111,16 @@ КонецПроцедуры +&НаКлиенте +Процедура СписокПриАктивизацииСтроки(Элемент) + Если Элемент.ТекущиеДанные <> Неопределено + И НЕ Элемент.ТекущиеДанные.ПринятаКИсполнению Тогда + Элементы.ПринятьКИсполнению.Доступность= Истина; + Иначе + Элементы.ПринятьКИсполнению.Доступность= Ложь; + КонецЕсли; +КонецПроцедуры + #КонецОбласти #Область ОбработчикиКомандФормы diff --git a/SSL/src/Tasks/ЗадачаИсполнителя/Help/ru.html b/SSL/src/Tasks/ЗадачаИсполнителя/Help/ru.html index e36c4ac85..37332197d 100644 --- a/SSL/src/Tasks/ЗадачаИсполнителя/Help/ru.html +++ b/SSL/src/Tasks/ЗадачаИсполнителя/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 9.00.8112.16421"></meta></head><body> -<p>Задачи являются средством коммуникации между <a href="Catalog.Пользователи/Help">пользователями</a>, а также используются для автоматизации <a href="v8help://1cv8/EnterprWorkingWithBusinessProcesses_StandardInterface">бизнес-процессов</a>.   </p> +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"><html><head><meta content="text/html; charset=utf-8" http-equiv="Content-Type"></meta><link rel="stylesheet" type="text/css" href="v8help://service_book/service_style"></link><meta name="GENERATOR" content="MSHTML 9.00.8112.16421"></meta></head><body><a name="СтандартныеПодсистемы.Пользователи"> +<p>Задачи являются средством коммуникации между <a href="Catalog.Пользователи/Help">пользователями</a>, а также используются для автоматизации <a href="v8help://1cv8/EnterprWorkingWithBusinessProcesses_StandardInterface">бизнес-процессов</a>.   </p></a> <p>Для создания новой <a href="Task.ЗадачаИсполнителя.Form.ФормаЗадачи/Help">задачи</a> можно воспользоваться одним из бизнес-процессов (например, <a href="BusinessProcess.Задание/Help">Задание</a>). </p> <h3>Работа с задачами</h3> <p>Для работы с задачами предусмотрены различные списки:</p> @@ -8,7 +8,9 @@ </li><li>По команде <strong>Задачи</strong> на панели навигации бизнес-процесса можно открыть <a href="Task.ЗадачаИсполнителя.Form.ЗадачиПоБизнесПроцессу/Help">список задач</a>, которые являются частью этого бизнес-процесса. </li><li>По команде <strong>Задачи</strong> на панели навигации документов программы можно просмотреть <a href="Task.ЗадачаИсполнителя.Form.ЗадачиПоПредмету/Help">задачи</a> бизнес-процессов, которые созданы на основании этих документов. </li><li><a href="Task.ЗадачаИсполнителя.Form.ФормаСписка/Help">Все задачи</a> - список для работы с задачами всех исполнителей, открывается по соответствующей команде в разделе <strong>Бизнес-процессы и задачи</strong>.</li></ul><h3>Настройка уведомлений о задачах</h3> -<ul><li>Для напоминания исполнителям о новых задачах необходимо разрешить использование регламентного задания <strong>Уведомление исполнителей о новых задачах</strong>, которое с заданной периодичностью рассылает письма с уведомлениями о новых задачах по электронной почте. Письма отправляются по адресу, указанному в контактной информации <a href="Catalog.Пользователи.Form.ФормаЭлемента/Help">пользователя</a> программы. Настройка регламентных заданий выполняется в окне <a href="DataProcessor.РегламентныеИФоновыеЗадания/Help">Регламентные и фоновые задания</a>.</li></ul><h3>Мониторинг задач</h3> +<ul><a name="СтандартныеПодсистемы.Пользователи"> +<li>Для напоминания исполнителям о новых задачах необходимо разрешить использование регламентного задания <strong>Уведомление исполнителей о новых задачах</strong>, которое с заданной периодичностью рассылает письма с уведомлениями о новых задачах по электронной почте. Письма отправляются по адресу, указанному в контактной информации <a href="Catalog.Пользователи.Form.ФормаЭлемента/Help">пользователя</a> программы.  </li></a><a name="СтандартныеПодсистемы.Регламентные"> +<li>Настройка регламентных заданий выполняется в окне <a href="DataProcessor.РегламентныеИФоновыеЗадания/Help">Регламентные и фоновые задания</a>.</li></a></ul><h3>Мониторинг задач</h3> <p>Программа предоставляет набор отчетов, с помощью которых можно осуществлять мониторинг задач:</p> <ul><li><a href="Report.Задачи/Help">Задачи</a> - отчет по задачам исполнителей; </li><li><a href="Report.ЗависшиеЗадачи/Help">Зависшие задачи</a> - отчет по задачам, которые не могут быть выполнены из-за того, что не заполнен <a href="InformationRegister.ИсполнителиЗадач/Help">список ролей и исполнителей</a>; diff --git a/SSL/src/Tasks/ЗадачаИсполнителя/ManagerModule.bsl b/SSL/src/Tasks/ЗадачаИсполнителя/ManagerModule.bsl index 7c999c047..9c5bc718c 100644 --- a/SSL/src/Tasks/ЗадачаИсполнителя/ManagerModule.bsl +++ b/SSL/src/Tasks/ЗадачаИсполнителя/ManagerModule.bsl @@ -41,8 +41,7 @@ Наименование = ?(ПустаяСтрока(Данные.Наименование), НСтр("ru = 'Без описания'"), Данные.Наименование); Дата = Формат(Данные.Дата, ?(ПолучитьФункциональнуюОпцию("ИспользоватьДатуИВремяВСрокахЗадач"), "ДЛФ=DT", "ДЛФ=D")); - ШаблонПредставления = НСтр("ru = '%1 от %2'"); - Представление = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонПредставления, Наименование, Дата); + Представление = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = '%1 от %2'"), Наименование, Дата); СтандартнаяОбработка = Ложь; КонецПроцедуры diff --git a/SSL/src/Tasks/ЗадачаИсполнителя/ObjectModule.bsl b/SSL/src/Tasks/ЗадачаИсполнителя/ObjectModule.bsl index 1a293512c..deabdc652 100644 --- a/SSL/src/Tasks/ЗадачаИсполнителя/ObjectModule.bsl +++ b/SSL/src/Tasks/ЗадачаИсполнителя/ObjectModule.bsl @@ -6,7 +6,7 @@ // Функция РеквизитыАдресацииЗаполнены() Экспорт - Возврат НЕ Исполнитель.Пустая() ИЛИ НЕ РольИсполнителя.Пустая(); + Возврат ЗначениеЗаполнено(Исполнитель) ИЛИ НЕ РольИсполнителя.Пустая(); КонецФункции @@ -67,7 +67,7 @@ // потребуется для отчетов. Такую запись делаем только в том // случае, если в базе было не выполнено, а в объекте стало выполнено. Если НЕ ЗначениеЗаполнено(Исполнитель) Тогда - Исполнитель = Пользователи.ТекущийПользователь(); + Исполнитель = ПользователиКлиентСервер.АвторизованныйПользователь(); КонецЕсли; Если ДатаИсполнения = Дата(1, 1, 1) Тогда ДатаИсполнения = ТекущаяДатаСеанса(); @@ -115,9 +115,9 @@ Если ТипЗнч(ДанныеЗаполнения) = Тип("ЗадачаОбъект.ЗадачаИсполнителя") Тогда ЗаполнитьЗначенияСвойств(ЭтотОбъект, ДанныеЗаполнения, - "БизнесПроцесс,ТочкаМаршрута,Наименование,Исполнитель,РольИсполнителя,ОсновнойОбъектАдресации," + - "ДополнительныйОбъектАдресации,Важность,ДатаИсполнения,Автор,Описание,СрокИсполнения," + - "ДатаНачала,РезультатВыполнения,Предмет"); + "БизнесПроцесс,ТочкаМаршрута,Наименование,Исполнитель,РольИсполнителя,ОсновнойОбъектАдресации," + + "ДополнительныйОбъектАдресации,Важность,ДатаИсполнения,Автор,Описание,СрокИсполнения," + + "ДатаНачала,РезультатВыполнения,Предмет"); Дата = ТекущаяДатаСеанса(); КонецЕсли; Если НЕ ЗначениеЗаполнено(Важность) Тогда diff --git a/SSL/src/Tasks/ЗадачаИсполнителя/ЗадачаИсполнителя.mdo b/SSL/src/Tasks/ЗадачаИсполнителя/ЗадачаИсполнителя.mdo index 4c5dfefed..31f38a039 100644 --- a/SSL/src/Tasks/ЗадачаИсполнителя/ЗадачаИсполнителя.mdo +++ b/SSL/src/Tasks/ЗадачаИсполнителя/ЗадачаИсполнителя.mdo @@ -131,7 +131,7 @@ <descriptionLength>150</descriptionLength> <addressing>InformationRegister.ИсполнителиЗадач</addressing> <mainAddressingAttribute>Task.ЗадачаИсполнителя.AddressingAttribute.Исполнитель</mainAddressingAttribute> - <currentPerformer>SessionParameter.ТекущийПользователь</currentPerformer> + <currentPerformer>SessionParameter.АвторизованныйПользователь</currentPerformer> <defaultPresentation>AsDescription</defaultPresentation> <editType>InDialog</editType> <defaultObjectForm>Task.ЗадачаИсполнителя.Form.ФормаЗадачи</defaultObjectForm> @@ -144,6 +144,7 @@ </synonym> <comment>Автор бизнес-процесса, который сформировал задачу</comment> <type> + <types>CatalogRef.ВнешниеПользователи</types> <types>CatalogRef.Пользователи</types> </type> <toolTip> @@ -596,6 +597,7 @@ <value>Исполнитель</value> </synonym> <type> + <types>CatalogRef.ВнешниеПользователи</types> <types>CatalogRef.Пользователи</types> </type> <toolTip> diff --git a/SSL/src/WebServices/EnterpriseDataExchange_1_0_1_1/EnterpriseDataExchange_1_0_1_1.mdo b/SSL/src/WebServices/EnterpriseDataExchange_1_0_1_1/EnterpriseDataExchange_1_0_1_1.mdo new file mode 100644 index 000000000..9b0d3fb05 --- /dev/null +++ b/SSL/src/WebServices/EnterpriseDataExchange_1_0_1_1/EnterpriseDataExchange_1_0_1_1.mdo @@ -0,0 +1,465 @@ +<?xml version="1.0" encoding="UTF-8"?> +<mdclass:WebService xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:core="http://g5.1c.ru/v8/dt/mcore" xmlns:mdclass="http://g5.1c.ru/v8/dt/metadata/mdclass" uuid="cb3a5c5b-7bdc-4e12-96f1-11b1213b6853"> + <name>EnterpriseDataExchange_1_0_1_1</name> + <synonym> + <key>ru</key> + <value>Enterprise Data Exchange 1.0.1.1</value> + </synonym> + <namespace>http://www.1c.ru/SSL/EnterpriseDataExchange_1_0_1_1</namespace> + <xdtoPackages xsi:type="core:ReferenceValue"> + <value>XDTOPackage.EnterpriseDataExchange_1_0_1_1</value> + </xdtoPackages> + <descriptorFileName>EnterpriseDataExchange_1_0_1_1.1cws</descriptorFileName> + <sessionMaxAge>20</sessionMaxAge> + <operations uuid="e6fe7103-4dfa-4302-a58e-ccd7fac19c9d"> + <name>Ping</name> + <synonym> + <key>ru</key> + <value>Ping</value> + </synonym> + <comment>Проверка соединения с информационной базой</comment> + <xdtoReturningValueType> + <name>string</name> + <nsUri>http://www.w3.org/2001/XMLSchema</nsUri> + </xdtoReturningValueType> + <nillable>true</nillable> + <procedureName>Ping</procedureName> + <dataLockControlMode>Managed</dataLockControlMode> + </operations> + <operations uuid="bb3a9973-67ce-479e-8668-c2f3bb20301e"> + <name>TestConnection</name> + <synonym> + <key>ru</key> + <value>Test connection</value> + </synonym> + <comment>Проверка подключения к информационной базе</comment> + <xdtoReturningValueType> + <name>boolean</name> + <nsUri>http://www.w3.org/2001/XMLSchema</nsUri> + </xdtoReturningValueType> + <procedureName>ПроверкаПодключения</procedureName> + <dataLockControlMode>Managed</dataLockControlMode> + <parameters uuid="e5250dfe-dda2-4547-9b9e-2470ea1be1ab"> + <name>ExchangePlanName</name> + <synonym> + <key>ru</key> + <value>Exchange plan name</value> + </synonym> + <xdtoValueType> + <name>string</name> + <nsUri>http://www.w3.org/2001/XMLSchema</nsUri> + </xdtoValueType> + </parameters> + <parameters uuid="2c3fccc6-c4c0-49ec-bfc2-05ce05f27ea9"> + <name>PeerCode</name> + <synonym> + <key>ru</key> + <value>Peer code</value> + </synonym> + <xdtoValueType> + <name>string</name> + <nsUri>http://www.w3.org/2001/XMLSchema</nsUri> + </xdtoValueType> + </parameters> + <parameters uuid="37169451-1464-4f24-8ca6-802963ffb636"> + <name>ErrorMessage</name> + <synonym> + <key>ru</key> + <value>Error message</value> + </synonym> + <xdtoValueType> + <name>string</name> + <nsUri>http://www.w3.org/2001/XMLSchema</nsUri> + </xdtoValueType> + <nillable>true</nillable> + <transferDirection>Out</transferDirection> + </parameters> + </operations> + <operations uuid="c3a958b1-590f-4418-a74f-5982b478cf52"> + <name>PrepareDataForGetting</name> + <synonym> + <key>ru</key> + <value>Prepare data for getting</value> + </synonym> + <comment>Выгрузить данные из информационной базы, согласно настроек узла плана обмена и подготовить их для отправки</comment> + <xdtoReturningValueType> + <name>string</name> + <nsUri>http://www.w3.org/2001/XMLSchema</nsUri> + </xdtoReturningValueType> + <nillable>true</nillable> + <procedureName>ПодготовитьДанныеКПолучению</procedureName> + <dataLockControlMode>Managed</dataLockControlMode> + <parameters uuid="ef0e618d-0942-460a-ac65-9aca2fed976e"> + <name>ExchangePlanName</name> + <synonym> + <key>ru</key> + <value>Exchange plan name</value> + </synonym> + <xdtoValueType> + <name>string</name> + <nsUri>http://www.w3.org/2001/XMLSchema</nsUri> + </xdtoValueType> + </parameters> + <parameters uuid="fd1ed7ec-d848-41cd-8ce3-2e5a682abcf0"> + <name>PeerCode</name> + <synonym> + <key>ru</key> + <value>Peer code</value> + </synonym> + <xdtoValueType> + <name>string</name> + <nsUri>http://www.w3.org/2001/XMLSchema</nsUri> + </xdtoValueType> + </parameters> + <parameters uuid="2ac8bd69-9fbf-4f15-b58d-397d9e903532"> + <name>PartSize</name> + <synonym> + <key>ru</key> + <value>Part size</value> + </synonym> + <comment>В КБ, 0 не разделять</comment> + <xdtoValueType> + <name>decimal</name> + <nsUri>http://www.w3.org/2001/XMLSchema</nsUri> + </xdtoValueType> + </parameters> + <parameters uuid="2ff35814-7eaa-4ae5-bbac-f46bebb36c9d"> + <name>OperationID</name> + <synonym> + <key>ru</key> + <value>Operation ID</value> + </synonym> + <xdtoValueType> + <name>string</name> + <nsUri>http://www.w3.org/2001/XMLSchema</nsUri> + </xdtoValueType> + <nillable>true</nillable> + <transferDirection>Out</transferDirection> + </parameters> + <parameters uuid="5b460b92-2c74-4f59-88b2-18d9aac42c04"> + <name>ErrorMessage</name> + <synonym> + <key>ru</key> + <value>Error message</value> + </synonym> + <xdtoValueType> + <name>string</name> + <nsUri>http://www.w3.org/2001/XMLSchema</nsUri> + </xdtoValueType> + <nillable>true</nillable> + <transferDirection>Out</transferDirection> + </parameters> + </operations> + <operations uuid="db05d35b-5f53-4c27-ba80-b477b9a98299"> + <name>PrepareDataActionResult</name> + <synonym> + <key>ru</key> + <value>Prepare data action result</value> + </synonym> + <comment>Получить результат выполнения операции подготовки данных для выгрузки из информационой базы</comment> + <xdtoReturningValueType> + <name>PrepareDataOperationResult</name> + <nsUri>http://v8.1c.ru/SSL/Exchange/EnterpriseDataExchange</nsUri> + </xdtoReturningValueType> + <procedureName>ПолучитьРезультатПодготовкиДанныхКВыгрузке</procedureName> + <dataLockControlMode>Managed</dataLockControlMode> + <parameters uuid="fa872ae1-b699-46fe-9d6a-e42e1388752b"> + <name>OperationID</name> + <synonym> + <key>ru</key> + <value>Operation ID</value> + </synonym> + <xdtoValueType> + <name>string</name> + <nsUri>http://www.w3.org/2001/XMLSchema</nsUri> + </xdtoValueType> + </parameters> + <parameters uuid="1acf34e6-c428-4130-82f0-5160dfcc0858"> + <name>ErrorMessage</name> + <synonym> + <key>ru</key> + <value>Error message</value> + </synonym> + <xdtoValueType> + <name>string</name> + <nsUri>http://www.w3.org/2001/XMLSchema</nsUri> + </xdtoValueType> + <nillable>true</nillable> + <transferDirection>Out</transferDirection> + </parameters> + </operations> + <operations uuid="57046262-b9ce-4670-9cf5-6db9e58dd0d5"> + <name>GetDataPart</name> + <synonym> + <key>ru</key> + <value>Get data part</value> + </synonym> + <comment>Получить часть сформированного файла с данными, из временного хранилища</comment> + <xdtoReturningValueType> + <name>base64Binary</name> + <nsUri>http://www.w3.org/2001/XMLSchema</nsUri> + </xdtoReturningValueType> + <nillable>true</nillable> + <procedureName>ВыгрузитьЧастьФайла</procedureName> + <dataLockControlMode>Managed</dataLockControlMode> + <parameters uuid="a9824176-36d5-4be5-9984-f4312ff48515"> + <name>FileID</name> + <synonym> + <key>ru</key> + <value>File ID</value> + </synonym> + <xdtoValueType> + <name>string</name> + <nsUri>http://www.w3.org/2001/XMLSchema</nsUri> + </xdtoValueType> + </parameters> + <parameters uuid="8e980ca0-1627-45e8-bd27-5dd1ac199459"> + <name>PartNumber</name> + <synonym> + <key>ru</key> + <value>Part number</value> + </synonym> + <xdtoValueType> + <name>int</name> + <nsUri>http://www.w3.org/2001/XMLSchema</nsUri> + </xdtoValueType> + </parameters> + <parameters uuid="8b653beb-af9f-4f39-b691-ae14f80b7cd6"> + <name>ErrorMessage</name> + <synonym> + <key>ru</key> + <value>Error message</value> + </synonym> + <xdtoValueType> + <name>string</name> + <nsUri>http://www.w3.org/2001/XMLSchema</nsUri> + </xdtoValueType> + <nillable>true</nillable> + <transferDirection>Out</transferDirection> + </parameters> + </operations> + <operations uuid="77559c11-713f-454d-aff4-56649e1350e9"> + <name>ConfirmGettingFile</name> + <synonym> + <key>ru</key> + <value>Confirm getting file</value> + </synonym> + <comment>Подтвердить получение файла</comment> + <xdtoReturningValueType> + <name>string</name> + <nsUri>http://www.w3.org/2001/XMLSchema</nsUri> + </xdtoReturningValueType> + <nillable>true</nillable> + <procedureName>ПодтвердитьПолучениеДанных</procedureName> + <dataLockControlMode>Managed</dataLockControlMode> + <parameters uuid="0c965703-c1d0-48b7-80f9-b8d869ff98f5"> + <name>FileID</name> + <synonym> + <key>ru</key> + <value>File ID</value> + </synonym> + <xdtoValueType> + <name>string</name> + <nsUri>http://www.w3.org/2001/XMLSchema</nsUri> + </xdtoValueType> + </parameters> + <parameters uuid="51f8d5ff-aec5-4c0a-ad02-df8c6cb1b4ad"> + <name>ClearDataPool</name> + <synonym> + <key>ru</key> + <value>Clear data pool</value> + </synonym> + <xdtoValueType> + <name>boolean</name> + <nsUri>http://www.w3.org/2001/XMLSchema</nsUri> + </xdtoValueType> + </parameters> + <parameters uuid="7ba42162-557b-4e34-8aca-0cdee8cb2452"> + <name>ErrorMessage</name> + <synonym> + <key>ru</key> + <value>Error message</value> + </synonym> + <xdtoValueType> + <name>string</name> + <nsUri>http://www.w3.org/2001/XMLSchema</nsUri> + </xdtoValueType> + <nillable>true</nillable> + <transferDirection>Out</transferDirection> + </parameters> + </operations> + <operations uuid="eee99b8e-29b6-4b7a-81f1-3d91d740c0d7"> + <name>PutFilePart</name> + <synonym> + <key>ru</key> + <value>Put file part</value> + </synonym> + <comment>Поместить часть файла с данными во временное хранилище</comment> + <xdtoReturningValueType> + <name>string</name> + <nsUri>http://www.w3.org/2001/XMLSchema</nsUri> + </xdtoReturningValueType> + <nillable>true</nillable> + <procedureName>ЗагрузитьЧастьФайла</procedureName> + <dataLockControlMode>Managed</dataLockControlMode> + <parameters uuid="ad4f2d1f-1e6f-4f6a-8061-202c0e42a8e4"> + <name>FileID</name> + <synonym> + <key>ru</key> + <value>File ID</value> + </synonym> + <xdtoValueType> + <name>string</name> + <nsUri>http://www.w3.org/2001/XMLSchema</nsUri> + </xdtoValueType> + </parameters> + <parameters uuid="dd577924-c6cb-4aa9-9db5-366d8958d00f"> + <name>PartNumber</name> + <synonym> + <key>ru</key> + <value>Part number</value> + </synonym> + <xdtoValueType> + <name>int</name> + <nsUri>http://www.w3.org/2001/XMLSchema</nsUri> + </xdtoValueType> + <nillable>true</nillable> + </parameters> + <parameters uuid="8ed8f72e-404a-4be4-a44d-ddebbad5f411"> + <name>PartData</name> + <synonym> + <key>ru</key> + <value>Part data</value> + </synonym> + <xdtoValueType> + <name>base64Binary</name> + <nsUri>http://www.w3.org/2001/XMLSchema</nsUri> + </xdtoValueType> + </parameters> + <parameters uuid="e919bc4c-86e6-44f6-be27-5a729b63d042"> + <name>ErrorMessage</name> + <synonym> + <key>ru</key> + <value>Error message</value> + </synonym> + <xdtoValueType> + <name>string</name> + <nsUri>http://www.w3.org/2001/XMLSchema</nsUri> + </xdtoValueType> + <nillable>true</nillable> + <transferDirection>Out</transferDirection> + </parameters> + </operations> + <operations uuid="ec580e4f-1518-4923-a10e-bc1da8688b37"> + <name>PutData</name> + <synonym> + <key>ru</key> + <value>Put data</value> + </synonym> + <comment>Поместить данные в информационную базу без использования узла плана обмена</comment> + <xdtoReturningValueType> + <name>string</name> + <nsUri>http://www.w3.org/2001/XMLSchema</nsUri> + </xdtoReturningValueType> + <nillable>true</nillable> + <procedureName>ЗагрузитьДанныеВИнформационнуюБазу</procedureName> + <dataLockControlMode>Managed</dataLockControlMode> + <parameters uuid="91c3902a-314f-4d40-8bcc-8dd131fed2f4"> + <name>ExchangePlanName</name> + <synonym> + <key>ru</key> + <value>Exchange plan name</value> + </synonym> + <xdtoValueType> + <name>string</name> + <nsUri>http://www.w3.org/2001/XMLSchema</nsUri> + </xdtoValueType> + </parameters> + <parameters uuid="ae2b21c5-9349-49e8-9627-26f05c21f43a"> + <name>PeerCode</name> + <synonym> + <key>ru</key> + <value>Peer code</value> + </synonym> + <xdtoValueType> + <name>string</name> + <nsUri>http://www.w3.org/2001/XMLSchema</nsUri> + </xdtoValueType> + </parameters> + <parameters uuid="7e4c0b74-e807-4aa9-ad69-3c85b147bb61"> + <name>FileID</name> + <synonym> + <key>ru</key> + <value>File ID</value> + </synonym> + <xdtoValueType> + <name>string</name> + <nsUri>http://www.w3.org/2001/XMLSchema</nsUri> + </xdtoValueType> + </parameters> + <parameters uuid="917a19d7-73db-4247-b892-397598d67879"> + <name>OperationID</name> + <synonym> + <key>ru</key> + <value>Operation ID</value> + </synonym> + <xdtoValueType> + <name>string</name> + <nsUri>http://www.w3.org/2001/XMLSchema</nsUri> + </xdtoValueType> + <nillable>true</nillable> + <transferDirection>Out</transferDirection> + </parameters> + <parameters uuid="1f866dc3-a4bc-4e8d-96a3-a26ee073926f"> + <name>ErrorMessage</name> + <synonym> + <key>ru</key> + <value>Error message</value> + </synonym> + <xdtoValueType> + <name>string</name> + <nsUri>http://www.w3.org/2001/XMLSchema</nsUri> + </xdtoValueType> + <nillable>true</nillable> + <transferDirection>Out</transferDirection> + </parameters> + </operations> + <operations uuid="d8066600-c669-449d-a187-fdd3af8f7afa"> + <name>PutDataActionResult</name> + <synonym> + <key>ru</key> + <value>Put data action result</value> + </synonym> + <comment>Получить результат выполнения операции помещения данных в информационую базу</comment> + <xdtoReturningValueType> + <name>string</name> + <nsUri>http://www.w3.org/2001/XMLSchema</nsUri> + </xdtoReturningValueType> + <procedureName>ПолучитьРезультатЗагрузкиДанных</procedureName> + <dataLockControlMode>Managed</dataLockControlMode> + <parameters uuid="dadf86a6-c118-4827-b1b9-6cfee731242f"> + <name>OperationID</name> + <synonym> + <key>ru</key> + <value>Operation ID</value> + </synonym> + <xdtoValueType> + <name>string</name> + <nsUri>http://www.w3.org/2001/XMLSchema</nsUri> + </xdtoValueType> + </parameters> + <parameters uuid="45bf7b20-f048-491a-a989-e50bea13d028"> + <name>ErrorMessage</name> + <synonym> + <key>ru</key> + <value>Error message</value> + </synonym> + <xdtoValueType> + <name>string</name> + <nsUri>http://www.w3.org/2001/XMLSchema</nsUri> + </xdtoValueType> + <nillable>true</nillable> + <transferDirection>Out</transferDirection> + </parameters> + </operations> +</mdclass:WebService> diff --git a/SSL/src/WebServices/EnterpriseDataExchange_1_0_1_1/Module.bsl b/SSL/src/WebServices/EnterpriseDataExchange_1_0_1_1/Module.bsl new file mode 100644 index 000000000..1a355881c --- /dev/null +++ b/SSL/src/WebServices/EnterpriseDataExchange_1_0_1_1/Module.bsl @@ -0,0 +1,112 @@ +#Область СлужебныеПроцедурыИФункции +//////////////////////////////////////////////////////////////////////////////// +// Обработчики операций + +Функция Ping() + Возврат ""; +КонецФункции + +Функция ПроверкаПодключения(ИмяПланаОбмена, КодУзлаПланаОбмена, СообщениеОбОшибке) + + СообщениеОбОшибке = ""; + + // Проверяем наличие прав для выполнения обмена. + Попытка + ОбменДаннымиСлужебный.ПроверитьВозможностьВыполненияОбменов(); + Исключение + СообщениеОбОшибке = КраткоеПредставлениеОшибки(ИнформацияОбОшибке()); + Возврат Ложь; + КонецПопытки; + + // Проверяем блокировку информационной базы для обновления. + Попытка + ОбменДаннымиСлужебный.ПроверитьБлокировкуИнформационнойБазыДляОбновления(); + Исключение + СообщениеОбОшибке = КраткоеПредставлениеОшибки(ИнформацияОбОшибке()); + Возврат Ложь; + КонецПопытки; + + УстановитьПривилегированныйРежим(Истина); + + // Проверяем наличие узла плана обмена (возможно узел уже удален). + Если ПланыОбмена[ИмяПланаОбмена].НайтиПоКоду(КодУзлаПланаОбмена).Пустая() Тогда + СообщениеОбОшибке = НСтр("ru = 'Заданный узел плана обмена не найден. Обратитесь к администратору приложения.'; en = 'Presetting not foung. Please contact with application administrator'"); + Возврат Ложь; + КонецЕсли; + + Возврат Истина; + +КонецФункции + +Функция ПодтвердитьПолучениеДанных(ИдентификаторФайла, ПодтверждениеПолученияФайла, СообщениеОбОшибке) + + СообщениеОбОшибке = ""; + + Попытка + УдалитьФайлы(ОбменДаннымиСлужебный.ВременныйКаталогВыгрузки(ИдентификаторФайла)); + Исключение + + СообщениеОбОшибке = КраткоеПредставлениеОшибки(ИнформацияОбОшибке()); + ЗаписьЖурналаРегистрации(ОбменДаннымиСервер.СобытиеЖурналаРегистрацииУдалениеВременногоФайла(), + УровеньЖурналаРегистрации.Ошибка,,, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); + + КонецПопытки; + +КонецФункции + +Функция ПолучитьРезультатЗагрузкиДанных(ИдентификаторФоновогоЗадания, СообщениеОбОшибке) + Возврат ОбменДаннымиСлужебный.ПолучитьСтатусВыполненияПолученияДанных(ИдентификаторФоновогоЗадания, СообщениеОбОшибке); +КонецФункции + +Функция ПолучитьРезультатПодготовкиДанныхКВыгрузке(ИдентификаторФоновогоЗадания, СообщениеОбОшибке) + Возврат ОбменДаннымиСлужебный.ПолучитьСтатусВыполненияПодготовкиДанныхКОтправке(ИдентификаторФоновогоЗадания, СообщениеОбОшибке); +КонецФункции + +Функция ЗагрузитьЧастьФайла(ИдентификаторФайла, НомерЗагружаемойЧастиФайла, ЗагружаемаяЧастьФайла, СообщениеОбОшибке) + ОбменДаннымиСлужебный.ЗагрузитьЧастьФайла(ИдентификаторФайла, НомерЗагружаемойЧастиФайла, ЗагружаемаяЧастьФайла, СообщениеОбОшибке); +КонецФункции + +Функция ВыгрузитьЧастьФайла(ИдентификаторФайла, НомерВыгружаемойЧастиФайла, СообщениеОбОшибке) + Возврат ОбменДаннымиСлужебный.ВыгрузитьЧастьФайла(ИдентификаторФайла, НомерВыгружаемойЧастиФайла, СообщениеОбОшибке); +КонецФункции + +Функция ЗагрузитьДанныеВИнформационнуюБазу(ИмяПланаОбмена, КодУзлаПланаОбмена, ИдентификаторФайла, ИдентификаторФоновогоЗадания, СообщениеОбОшибке) + + СообщениеОбОшибке = ""; + + СтруктураПараметров = ОбменДаннымиСлужебный.ИнициализироватьПараметрыWebСервиса(); + СтруктураПараметров.ИмяПланаОбмена = ИмяПланаОбмена; + СтруктураПараметров.КодУзлаПланаОбмена = КодУзлаПланаОбмена; + СтруктураПараметров.ИдентификаторФайлаВоВременномХранилище = ОбменДаннымиСлужебный.ПодготовитьФайлДляЗагрузки(ИдентификаторФайла, СообщениеОбОшибке); + СтруктураПараметров.ИмяWEBСервиса = "EnterpriseDataExchange_1_0_1_1"; + + // Загружаем в информационную базу + МассивПараметров = Новый Массив; + МассивПараметров.Добавить(СтруктураПараметров); + МассивПараметров.Добавить(СообщениеОбОшибке); + ФоновоеЗаданиеЗагрузкиДанных = ФоновыеЗадания.Выполнить("ОбменДаннымиСлужебный.ЗагрузитьДанныеXDTOВИнформационнуюБазу", МассивПараметров, Строка(Новый УникальныйИдентификатор())); + ИдентификаторФоновогоЗадания = Строка(ФоновоеЗаданиеЗагрузкиДанных.УникальныйИдентификатор); + +КонецФункции + +Функция ПодготовитьДанныеКПолучению(ИмяПланаОбмена, КодУзлаПланаОбмена, РазмерЧастиФайла, ИдентификаторФоновогоЗадания, СообщениеОбОшибке) + + СообщениеОбОшибке = ""; + + СтруктураПараметров = ОбменДаннымиСлужебный.ИнициализироватьПараметрыWebСервиса(); + СтруктураПараметров.ИмяПланаОбмена = ИмяПланаОбмена; + СтруктураПараметров.КодУзлаПланаОбмена = КодУзлаПланаОбмена; + СтруктураПараметров.РазмерЧастиФайла = РазмерЧастиФайла; + СтруктураПараметров.ИдентификаторФайлаВоВременномХранилище = Новый УникальныйИдентификатор(); + СтруктураПараметров.ИмяWEBСервиса = "EnterpriseDataExchange_1_0_1_1"; + + // Подготавливаем данные к выгрузке из информационной базы + МассивПараметров = Новый Массив; + МассивПараметров.Добавить(СтруктураПараметров); + МассивПараметров.Добавить(СообщениеОбОшибке); + ФоновоеЗаданиеЗагрузкиДанных = ФоновыеЗадания.Выполнить("ОбменДаннымиСлужебный.ПодготовитьДанныеДляВыгрузкиИзИнформационнойБазы", МассивПараметров, Строка(Новый УникальныйИдентификатор())); + ИдентификаторФоновогоЗадания = Строка(ФоновоеЗаданиеЗагрузкиДанных.УникальныйИдентификатор); + +КонецФункции + +#КонецОбласти \ No newline at end of file diff --git a/SSL/src/WebServices/EnterpriseDataUpload_1_0_1_1/EnterpriseDataUpload_1_0_1_1.mdo b/SSL/src/WebServices/EnterpriseDataUpload_1_0_1_1/EnterpriseDataUpload_1_0_1_1.mdo new file mode 100644 index 000000000..787c024dd --- /dev/null +++ b/SSL/src/WebServices/EnterpriseDataUpload_1_0_1_1/EnterpriseDataUpload_1_0_1_1.mdo @@ -0,0 +1,208 @@ +<?xml version="1.0" encoding="UTF-8"?> +<mdclass:WebService xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:core="http://g5.1c.ru/v8/dt/mcore" xmlns:mdclass="http://g5.1c.ru/v8/dt/metadata/mdclass" uuid="9ad3b432-5b49-44ee-9d8d-83c36458d927"> + <name>EnterpriseDataUpload_1_0_1_1</name> + <synonym> + <key>ru</key> + <value>Enterprise Data Upload 1.0.1.1</value> + </synonym> + <namespace>http://www.1c.ru/SSL/EnterpriseDataUpload_1_0_1_1</namespace> + <xdtoPackages xsi:type="core:ReferenceValue"> + <value>XDTOPackage.EnterpriseDataExchange_1_0_1_1</value> + </xdtoPackages> + <descriptorFileName>EnterpriseDataUpload_1_0_1_1.1cws</descriptorFileName> + <sessionMaxAge>20</sessionMaxAge> + <operations uuid="a9967bff-53b9-4295-a253-3647d956d3cb"> + <name>Ping</name> + <synonym> + <key>ru</key> + <value>Ping</value> + </synonym> + <comment>Проверка соединения с информационной базой</comment> + <xdtoReturningValueType> + <name>string</name> + <nsUri>http://www.w3.org/2001/XMLSchema</nsUri> + </xdtoReturningValueType> + <nillable>true</nillable> + <procedureName>Ping</procedureName> + <dataLockControlMode>Managed</dataLockControlMode> + </operations> + <operations uuid="75f0fd5b-c594-4f3a-8ff2-3fdadf1dc96d"> + <name>TestConnection</name> + <synonym> + <key>ru</key> + <value>Test connection</value> + </synonym> + <comment>Проверка подключения к информационной базе</comment> + <xdtoReturningValueType> + <name>boolean</name> + <nsUri>http://www.w3.org/2001/XMLSchema</nsUri> + </xdtoReturningValueType> + <procedureName>ПроверкаПодключения</procedureName> + <dataLockControlMode>Managed</dataLockControlMode> + <parameters uuid="b8a31397-8974-44ec-92b0-7cbdc481cf7e"> + <name>ErrorMessage</name> + <synonym> + <key>ru</key> + <value>Error message</value> + </synonym> + <xdtoValueType> + <name>string</name> + <nsUri>http://www.w3.org/2001/XMLSchema</nsUri> + </xdtoValueType> + <nillable>true</nillable> + <transferDirection>Out</transferDirection> + </parameters> + </operations> + <operations uuid="b29c7c0d-03eb-422b-a899-ba9a7eba99f6"> + <name>PutFilePart</name> + <synonym> + <key>ru</key> + <value>Put file part</value> + </synonym> + <comment>Поместить часть файла с данными во временное хранилище</comment> + <xdtoReturningValueType> + <name>string</name> + <nsUri>http://www.w3.org/2001/XMLSchema</nsUri> + </xdtoReturningValueType> + <nillable>true</nillable> + <procedureName>ЗагрузитьЧастьФайла</procedureName> + <dataLockControlMode>Managed</dataLockControlMode> + <parameters uuid="fb16c4d5-854c-4525-92be-b21fa2df5b0d"> + <name>FileID</name> + <synonym> + <key>ru</key> + <value>File ID</value> + </synonym> + <xdtoValueType> + <name>string</name> + <nsUri>http://www.w3.org/2001/XMLSchema</nsUri> + </xdtoValueType> + </parameters> + <parameters uuid="5771de21-2086-432b-ad91-de14a39bd5bc"> + <name>PartNumber</name> + <synonym> + <key>ru</key> + <value>Part number</value> + </synonym> + <xdtoValueType> + <name>int</name> + <nsUri>http://www.w3.org/2001/XMLSchema</nsUri> + </xdtoValueType> + <nillable>true</nillable> + </parameters> + <parameters uuid="b15bcf3b-0228-4d02-8f20-cd6ba82f7585"> + <name>PartData</name> + <synonym> + <key>ru</key> + <value>Part data</value> + </synonym> + <xdtoValueType> + <name>base64Binary</name> + <nsUri>http://www.w3.org/2001/XMLSchema</nsUri> + </xdtoValueType> + </parameters> + <parameters uuid="ed96fbfa-bda7-405c-9073-d0b6feffedad"> + <name>ErrorMessage</name> + <synonym> + <key>ru</key> + <value>Error message</value> + </synonym> + <xdtoValueType> + <name>string</name> + <nsUri>http://www.w3.org/2001/XMLSchema</nsUri> + </xdtoValueType> + <nillable>true</nillable> + <transferDirection>Out</transferDirection> + </parameters> + </operations> + <operations uuid="50c724cb-dde1-4313-9492-b1750bd0afc1"> + <name>PutData</name> + <synonym> + <key>ru</key> + <value>Put data</value> + </synonym> + <comment>Поместить данные в информационную базу без использования узла плана обмена</comment> + <xdtoReturningValueType> + <name>string</name> + <nsUri>http://www.w3.org/2001/XMLSchema</nsUri> + </xdtoReturningValueType> + <nillable>true</nillable> + <procedureName>ЗагрузитьДанныеВИнформационнуюБазу</procedureName> + <dataLockControlMode>Managed</dataLockControlMode> + <parameters uuid="12901981-6106-4471-ab3a-e127c2bb4ebd"> + <name>FileID</name> + <synonym> + <key>ru</key> + <value>File ID</value> + </synonym> + <xdtoValueType> + <name>string</name> + <nsUri>http://www.w3.org/2001/XMLSchema</nsUri> + </xdtoValueType> + </parameters> + <parameters uuid="17ad1497-fa0e-469f-b2e2-b94a6f848ec5"> + <name>OperationID</name> + <synonym> + <key>ru</key> + <value>Operation ID</value> + </synonym> + <xdtoValueType> + <name>string</name> + <nsUri>http://www.w3.org/2001/XMLSchema</nsUri> + </xdtoValueType> + <nillable>true</nillable> + <transferDirection>Out</transferDirection> + </parameters> + <parameters uuid="d5ea5dea-233d-4106-b9ba-f030d4f762ef"> + <name>ErrorMessage</name> + <synonym> + <key>ru</key> + <value>Error message</value> + </synonym> + <xdtoValueType> + <name>string</name> + <nsUri>http://www.w3.org/2001/XMLSchema</nsUri> + </xdtoValueType> + <nillable>true</nillable> + <transferDirection>Out</transferDirection> + </parameters> + </operations> + <operations uuid="903af05e-5ac5-46aa-843b-d74f9e417c1d"> + <name>PutDataActionResult</name> + <synonym> + <key>ru</key> + <value>Put data action result</value> + </synonym> + <comment>Получить результат выполнения операции помещения данных в информационую базу</comment> + <xdtoReturningValueType> + <name>string</name> + <nsUri>http://www.w3.org/2001/XMLSchema</nsUri> + </xdtoReturningValueType> + <procedureName>ПолучитьРезультатЗагрузкиДанных</procedureName> + <dataLockControlMode>Managed</dataLockControlMode> + <parameters uuid="4dc4862e-74c3-469d-863b-09fdbe0d6be0"> + <name>OperationID</name> + <synonym> + <key>ru</key> + <value>Operation ID</value> + </synonym> + <xdtoValueType> + <name>string</name> + <nsUri>http://www.w3.org/2001/XMLSchema</nsUri> + </xdtoValueType> + </parameters> + <parameters uuid="a344290a-c9be-47a7-95ad-ced1b52a0995"> + <name>ErrorMessage</name> + <synonym> + <key>ru</key> + <value>Error message</value> + </synonym> + <xdtoValueType> + <name>string</name> + <nsUri>http://www.w3.org/2001/XMLSchema</nsUri> + </xdtoValueType> + <nillable>true</nillable> + <transferDirection>Out</transferDirection> + </parameters> + </operations> +</mdclass:WebService> diff --git a/SSL/src/WebServices/EnterpriseDataUpload_1_0_1_1/Module.bsl b/SSL/src/WebServices/EnterpriseDataUpload_1_0_1_1/Module.bsl new file mode 100644 index 000000000..a17493546 --- /dev/null +++ b/SSL/src/WebServices/EnterpriseDataUpload_1_0_1_1/Module.bsl @@ -0,0 +1,58 @@ +#Область СлужебныеПроцедурыИФункции +//////////////////////////////////////////////////////////////////////////////// +// Обработчики операций + +Функция Ping() + Возврат ""; +КонецФункции + +Функция ПроверкаПодключения(СообщениеОбОшибке) + + СообщениеОбОшибке = ""; + + // Проверяем наличие прав для выполнения обмена. + Попытка + ОбменДаннымиСлужебный.ПроверитьВозможностьВыполненияОбменов(); + Исключение + СообщениеОбОшибке = КраткоеПредставлениеОшибки(ИнформацияОбОшибке()); + Возврат Ложь; + КонецПопытки; + + // Проверяем блокировку информационной базы для обновления. + Попытка + ОбменДаннымиСлужебный.ПроверитьБлокировкуИнформационнойБазыДляОбновления(); + Исключение + СообщениеОбОшибке = КраткоеПредставлениеОшибки(ИнформацияОбОшибке()); + Возврат Ложь; + КонецПопытки; + + Возврат Истина; + +КонецФункции + +Функция ПолучитьРезультатЗагрузкиДанных(ИдентификаторФоновогоЗадания, СообщениеОбОшибке) + Возврат ОбменДаннымиСлужебный.ПолучитьСтатусВыполненияПолученияДанных(ИдентификаторФоновогоЗадания, СообщениеОбОшибке); +КонецФункции + +Функция ЗагрузитьЧастьФайла(ИдентификаторФайла, НомерЗагружаемойЧастиФайла, ЗагружаемаяЧастьФайла, СообщениеОбОшибке) + ОбменДаннымиСлужебный.ЗагрузитьЧастьФайла(ИдентификаторФайла, НомерЗагружаемойЧастиФайла, ЗагружаемаяЧастьФайла, СообщениеОбОшибке); +КонецФункции + +Функция ЗагрузитьДанныеВИнформационнуюБазу(ИдентификаторФайла, ИдентификаторДлительнойОперации, СообщениеОбОшибке) + + СообщениеОбОшибке = ""; + + СтруктураПараметров = ОбменДаннымиСлужебный.ИнициализироватьПараметрыWebСервиса(); + СтруктураПараметров.ИдентификаторФайлаВоВременномХранилище = ОбменДаннымиСлужебный.ПодготовитьФайлДляЗагрузки(ИдентификаторФайла, СообщениеОбОшибке); + СтруктураПараметров.ИмяWEBСервиса = "EnterpriseDataUpload_1_0_1_1"; + + // Загружаем в информационную базу + МассивПараметров = Новый Массив; + МассивПараметров.Добавить(СтруктураПараметров); + МассивПараметров.Добавить(СообщениеОбОшибке); + ФоновоеЗаданиеЗагрузкиДанных = ФоновыеЗадания.Выполнить("ОбменДаннымиСлужебный.ЗагрузитьДанныеXDTOВИнформационнуюБазу", МассивПараметров, Строка(Новый УникальныйИдентификатор())); + ИдентификаторДлительнойОперации = Строка(ФоновоеЗаданиеЗагрузкиДанных.УникальныйИдентификатор); + +КонецФункции + +#КонецОбласти \ No newline at end of file diff --git a/SSL/src/WebServices/Exchange_2_0_1_6/Module.bsl b/SSL/src/WebServices/Exchange_2_0_1_6/Module.bsl index 45cbe25c7..55772e9f4 100644 --- a/SSL/src/WebServices/Exchange_2_0_1_6/Module.bsl +++ b/SSL/src/WebServices/Exchange_2_0_1_6/Module.bsl @@ -648,7 +648,7 @@ Функция НайтиФайлЧасти(Знач Каталог, Знач НомерФайла) - Для КоличествоРазрядов = КоличествоРазрядовЦисла(НомерФайла) По 5 Цикл + Для КоличествоРазрядов = КоличествоРазрядовЧисла(НомерФайла) По 5 Цикл ФорматнаяСтрока = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку("ЧЦ=%1; ЧВН=; ЧГ=0", Строка(КоличествоРазрядов)); @@ -667,7 +667,7 @@ Возврат Новый Массив; КонецФункции -Функция КоличествоРазрядовЦисла(Знач Число) +Функция КоличествоРазрядовЧисла(Знач Число) Возврат СтрДлина(Формат(Число, "ЧДЦ=0; ЧГ=0")); diff --git a/SSL/src/XDTOPackages/ApdexExport/Package.xdto b/SSL/src/XDTOPackages/ApdexExport/Package.xdto index 82fb22c4c..d02d3d98e 100644 --- a/SSL/src/XDTOPackages/ApdexExport/Package.xdto +++ b/SSL/src/XDTOPackages/ApdexExport/Package.xdto @@ -20,5 +20,6 @@ <property name="userName" type="xs:string" form="Attribute"/> <property name="tSaveUTC" type="xs:dateTime" form="Attribute"/> <property name="sessionNumber" type="xs:integer" form="Attribute"/> + <property name="comment" type="xs:string" form="Attribute"/> </objectType> </package> \ No newline at end of file diff --git a/SSL/src/XDTOPackages/ApplicationPermissions_1_0_0_2/ApplicationPermissions_1_0_0_2.mdo b/SSL/src/XDTOPackages/ApplicationPermissions_1_0_0_2/ApplicationPermissions_1_0_0_2.mdo new file mode 100644 index 000000000..fef41944d --- /dev/null +++ b/SSL/src/XDTOPackages/ApplicationPermissions_1_0_0_2/ApplicationPermissions_1_0_0_2.mdo @@ -0,0 +1,9 @@ +<?xml version="1.0" encoding="UTF-8"?> +<mdclass:XDTOPackage xmlns:mdclass="http://g5.1c.ru/v8/dt/metadata/mdclass" uuid="ca85912b-87b4-481e-9184-017364b4603d"> + <name>ApplicationPermissions_1_0_0_2</name> + <synonym> + <key>ru</key> + <value>Application permissions 1 0 0 2</value> + </synonym> + <namespace>http://www.1c.ru/1cFresh/Application/Permissions/1.0.0.2</namespace> +</mdclass:XDTOPackage> diff --git a/SSL/src/XDTOPackages/ApplicationPermissions_1_0_0_2/Package.xdto b/SSL/src/XDTOPackages/ApplicationPermissions_1_0_0_2/Package.xdto new file mode 100644 index 000000000..428815865 --- /dev/null +++ b/SSL/src/XDTOPackages/ApplicationPermissions_1_0_0_2/Package.xdto @@ -0,0 +1,41 @@ +<package xmlns="http://v8.1c.ru/8.1/xdto" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" targetNamespace="http://www.1c.ru/1cFresh/Application/Permissions/1.0.0.2"> + <import namespace="http://v8.1c.ru/8.1/data/core"/> + <valueType name="InternetProtocol" base="xs:string"> + <enumeration xsi:type="xs:string">IMAP</enumeration> + <enumeration xsi:type="xs:string">POP3</enumeration> + <enumeration xsi:type="xs:string">SMTP</enumeration> + <enumeration xsi:type="xs:string">HTTP</enumeration> + <enumeration xsi:type="xs:string">HTTPS</enumeration> + <enumeration xsi:type="xs:string">FTP</enumeration> + <enumeration xsi:type="xs:string">FTPS</enumeration> + </valueType> + <objectType name="PermissionBase" abstract="true"> + <property name="Description" type="xs:string" lowerBound="0"/> + </objectType> + <objectType xmlns:d2p1="http://www.1c.ru/1cFresh/Application/Permissions/1.0.0.2" name="FileSystemAccess" base="d2p1:PermissionBase"> + <property name="Path" type="xs:string"/> + <property name="AllowedRead" type="xs:boolean"/> + <property name="AllowedWrite" type="xs:boolean"/> + </objectType> + <objectType xmlns:d2p1="http://www.1c.ru/1cFresh/Application/Permissions/1.0.0.2" name="CreateComObject" base="d2p1:PermissionBase"> + <property name="ProgId" type="xs:string"/> + <property name="CLSID" type="xs:string" lowerBound="0"/> + <property name="ComputerName" type="xs:string"/> + </objectType> + <objectType xmlns:d2p1="http://www.1c.ru/1cFresh/Application/Permissions/1.0.0.2" name="AttachAddin" base="d2p1:PermissionBase"> + <property name="TemplateName" type="xs:string"/> + </objectType> + <objectType xmlns:d2p1="http://www.1c.ru/1cFresh/Application/Permissions/1.0.0.2" name="ExternalModule" base="d2p1:PermissionBase"> + <property name="Name" type="xs:string"/> + <property name="Hash" type="xs:string"/> + </objectType> + <objectType xmlns:d2p1="http://www.1c.ru/1cFresh/Application/Permissions/1.0.0.2" name="RunApplication" base="d2p1:PermissionBase"> + <property name="CommandMask" type="xs:string"/> + </objectType> + <objectType xmlns:d2p1="http://www.1c.ru/1cFresh/Application/Permissions/1.0.0.2" name="InternetResourceAccess" base="d2p1:PermissionBase"> + <property name="Protocol" type="xs:string"/> + <property name="Host" type="xs:string"/> + <property name="Port" type="xs:decimal"/> + </objectType> + <objectType xmlns:d2p1="http://www.1c.ru/1cFresh/Application/Permissions/1.0.0.2" name="ExternalModulePrivilegedModeAllowed" base="d2p1:PermissionBase"/> +</package> \ No newline at end of file diff --git a/SSL/src/XDTOPackages/EnterpriseDataExchange_1_0_1_1/EnterpriseDataExchange_1_0_1_1.mdo b/SSL/src/XDTOPackages/EnterpriseDataExchange_1_0_1_1/EnterpriseDataExchange_1_0_1_1.mdo new file mode 100644 index 000000000..8d8b193a7 --- /dev/null +++ b/SSL/src/XDTOPackages/EnterpriseDataExchange_1_0_1_1/EnterpriseDataExchange_1_0_1_1.mdo @@ -0,0 +1,9 @@ +<?xml version="1.0" encoding="UTF-8"?> +<mdclass:XDTOPackage xmlns:mdclass="http://g5.1c.ru/v8/dt/metadata/mdclass" uuid="a69525c7-27ff-48df-b26b-325ba580a53e"> + <name>EnterpriseDataExchange_1_0_1_1</name> + <synonym> + <key>ru</key> + <value>Enterprise data exchange 1.0.1.1</value> + </synonym> + <namespace>http://v8.1c.ru/SSL/Exchange/EnterpriseDataExchange</namespace> +</mdclass:XDTOPackage> diff --git a/SSL/src/XDTOPackages/EnterpriseDataExchange_1_0_1_1/Package.xdto b/SSL/src/XDTOPackages/EnterpriseDataExchange_1_0_1_1/Package.xdto new file mode 100644 index 000000000..e6eadff44 --- /dev/null +++ b/SSL/src/XDTOPackages/EnterpriseDataExchange_1_0_1_1/Package.xdto @@ -0,0 +1,8 @@ +<package xmlns="http://v8.1c.ru/8.1/xdto" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" targetNamespace="http://v8.1c.ru/SSL/Exchange/EnterpriseDataExchange"> + <objectType name="PrepareDataOperationResult" open="true" abstract="false"> + <property name="ErrorMessage" type="xs:string" lowerBound="0"/> + <property name="FileID" type="xs:string" lowerBound="0"/> + <property name="PartCount" type="xs:int" lowerBound="0"/> + <property name="Status" type="xs:string" lowerBound="0"/> + </objectType> +</package> \ No newline at end of file diff --git a/SSL/src/XDTOPackages/EnterpriseData_1_0_1/Package.xdto b/SSL/src/XDTOPackages/EnterpriseData_1_0_1/Package.xdto index 823d40369..602b99252 100644 --- a/SSL/src/XDTOPackages/EnterpriseData_1_0_1/Package.xdto +++ b/SSL/src/XDTOPackages/EnterpriseData_1_0_1/Package.xdto @@ -1214,6 +1214,7 @@ <objectType name="КлючевыеСвойстваЗначенияДополнительныхРеквизитов" open="true" sequenced="true"> <property name="Наименование" type="xs:string"/> <property xmlns:d3p1="http://v8.1c.ru/edi/edi_stnd/EnterpriseData/1.0" name="Ссылка" type="d3p1:СправочникСсылка.ЗначенияДополнительныхРеквизитов" lowerBound="0"/> + <property xmlns:d3p1="http://v8.1c.ru/edi/edi_stnd/EnterpriseData/1.0" name="Владелец" type="d3p1:КлючевыеСвойстваДополнительныеРеквизиты" lowerBound="0"/> </objectType> <objectType name="КлючевыеСвойстваКонтрагент" open="true" sequenced="true"> <property xmlns:d3p1="http://v8.1c.ru/edi/edi_stnd/EnterpriseData/1.0" name="Ссылка" type="d3p1:СправочникСсылка.Контрагенты" lowerBound="0"/> @@ -1285,6 +1286,7 @@ </property> <property xmlns:d3p1="http://v8.1c.ru/edi/edi_stnd/EnterpriseData/1.0" name="ГоловнаяОрганизация" type="d3p1:КлючевыеСвойстваОрганизация" lowerBound="0"/> <property xmlns:d3p1="http://v8.1c.ru/edi/edi_stnd/EnterpriseData/1.0" name="ЮридическоеФизическоеЛицо" type="d3p1:ЮридическоеФизическоеЛицо"/> + <property xmlns:d3p1="http://v8.1c.ru/edi/edi_stnd/EnterpriseData/1.0" name="РегистрацияВНалоговомОргане" type="d3p1:КлючевыеСвойстваРегистрацияВНалоговомОргане" lowerBound="0"/> </objectType> <objectType name="КлючевыеСвойстваОтчетБанкаПоОперациямЭквайринга" open="true" sequenced="true"> <property xmlns:d3p1="http://v8.1c.ru/edi/edi_stnd/EnterpriseData/1.0" name="Ссылка" type="d3p1:ДокументСсылка.ОтчетБанкаПоОперациямЭквайринга" lowerBound="0"/> @@ -4075,6 +4077,10 @@ <property xmlns:d5p1="http://v8.1c.ru/edi/edi_stnd/EnterpriseData/1.0" name="КорректировкаРеализацииТоваровСсылка" type="d5p1:КлючевыеСвойстваКорректировкаРеализацииТоваров" lowerBound="0"/> </typeDef> </property> + <property name="ДатаИсходногоДокумента" type="xs:date" lowerBound="0"/> + <property xmlns:d3p1="http://v8.1c.ru/edi/edi_stnd/EnterpriseData/1.0" name="НомерИсходногоДокумента" type="d3p1:ТипНомерДокумента" lowerBound="0"/> + <property xmlns:d3p1="http://v8.1c.ru/edi/edi_stnd/EnterpriseData/1.0" name="НомерИсправленияИсходногоДокумента" type="d3p1:ТипНомерДокумента" lowerBound="0"/> + <property name="ДатаИсправленияИсходногоДокумента" type="xs:date" lowerBound="0"/> </objectType> <objectType name="Документ.СчетФактураВыданный.ПлатежноРасчетныеДокументы"> <property xmlns:d3p1="http://v8.1c.ru/edi/edi_stnd/EnterpriseData/1.0" name="Строка" type="d3p1:Документ.СчетФактураВыданный.ПлатежноРасчетныеДокументы.Строка" lowerBound="0" upperBound="-1"/> @@ -4111,6 +4117,7 @@ <property xmlns:d3p1="http://v8.1c.ru/edi/edi_stnd/EnterpriseData/1.0" name="ДанныеРеализацииСубкомиссионер" type="d3p1:КлючевыеСвойстваКонтрагент" lowerBound="0"/> <property xmlns:d3p1="http://v8.1c.ru/edi/edi_stnd/EnterpriseData/1.0" name="ДокументыОснования" type="d3p1:Документ.СчетФактураПолученный.ДокументыОснования"/> <property xmlns:d3p1="http://v8.1c.ru/edi/edi_stnd/EnterpriseData/1.0" name="Авансы" type="d3p1:Документ.СчетФактураПолученный.Авансы" lowerBound="0"/> + <property xmlns:d3p1="http://v8.1c.ru/edi/edi_stnd/EnterpriseData/1.0" name="СчетаФактурыВыданныеПокупателям" type="d3p1:Документ.СчетФактураПолученный.СчетаФактурыВыданныеПокупателям" lowerBound="0"/> <property xmlns:d3p1="http://v8.1c.ru/edi/edi_stnd/EnterpriseData/1.0" name="ДополнительныеРеквизиты" type="d3p1:ДополнительныеРеквизиты" lowerBound="0"/> </objectType> <objectType name="Документ.СчетФактураПолученный.Авансы"> @@ -4146,6 +4153,16 @@ </typeDef> </property> </objectType> + <objectType name="Документ.СчетФактураПолученный.СчетаФактурыВыданныеПокупателям"> + <property xmlns:d3p1="http://v8.1c.ru/edi/edi_stnd/EnterpriseData/1.0" name="Строка" type="d3p1:Документ.СчетФактураПолученный.СчетаФактурыВыданныеПокупателям.Строка" upperBound="-1"/> + </objectType> + <objectType name="Документ.СчетФактураПолученный.СчетаФактурыВыданныеПокупателям.Строка" open="true" sequenced="true"> + <property xmlns:d3p1="http://v8.1c.ru/edi/edi_stnd/EnterpriseData/1.0" name="СчетФактураВыданный" type="d3p1:КлючевыеСвойстваСчетФактураВыданный"/> + <property xmlns:d3p1="http://v8.1c.ru/edi/edi_stnd/EnterpriseData/1.0" name="Субкомиссионер" type="d3p1:КлючевыеСвойстваКонтрагент" lowerBound="0"/> + <property xmlns:d3p1="http://v8.1c.ru/edi/edi_stnd/EnterpriseData/1.0" name="Покупатель" type="d3p1:КлючевыеСвойстваКонтрагент" lowerBound="0"/> + <property xmlns:d3p1="http://v8.1c.ru/edi/edi_stnd/EnterpriseData/1.0" name="СуммаНДС" type="d3p1:ТипСумма" lowerBound="0"/> + <property xmlns:d3p1="http://v8.1c.ru/edi/edi_stnd/EnterpriseData/1.0" name="Сумма" type="d3p1:ТипСумма" lowerBound="0"/> + </objectType> <objectType xmlns:d2p1="http://www.1c.ru/SSL/Exchange/Message" name="Документ.ТаможеннаяДекларация" base="d2p1:Object" open="true" sequenced="true"> <property xmlns:d3p1="http://v8.1c.ru/edi/edi_stnd/EnterpriseData/1.0" name="КлючевыеСвойства" type="d3p1:КлючевыеСвойстваТаможеннаяДекларация"/> <property xmlns:d3p1="http://v8.1c.ru/edi/edi_stnd/EnterpriseData/1.0" name="Ответственный" type="d3p1:КлючевыеСвойстваПользователь" lowerBound="0"/> diff --git a/SSL/src/XDTOPackages/АдресныйКлассификатор/Package.xdto b/SSL/src/XDTOPackages/АдресныйКлассификатор/Package.xdto index 959dcaaa3..948a2bc74 100644 --- a/SSL/src/XDTOPackages/АдресныйКлассификатор/Package.xdto +++ b/SSL/src/XDTOPackages/АдресныйКлассификатор/Package.xdto @@ -1,6 +1,5 @@ <package xmlns="http://v8.1c.ru/8.1/xdto" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" targetNamespace="http://www.v8.1c.ru/ssl/AddressSystem"> <import namespace="http://v8.1c.ru/8.1/data/core"/> - <import namespace="http://www.v8.1c.ru/ssl/contactinfo"/> <property name="AddressObjects"> <typeDef xsi:type="ObjectType"> <property xmlns:d4p1="http://www.v8.1c.ru/ssl/AddressSystem" name="Object" type="d4p1:Object" lowerBound="0" upperBound="-1"/> @@ -191,7 +190,7 @@ <objectType name="AddressList"> <property name="Item" lowerBound="0" upperBound="-1"> <typeDef xsi:type="ObjectType"> - <property xmlns:d5p1="http://www.v8.1c.ru/ssl/contactinfo" name="Address" type="d5p1:АдресРФ"/> + <property xmlns:d5p1="http://www.v8.1c.ru/ssl/AddressSystem" name="Address" type="d5p1:АдресРФ"/> <property xmlns:d5p1="http://www.v8.1c.ru/ssl/AddressSystem" name="Levels" type="d5p1:Levels" lowerBound="0" upperBound="1" nillable="true" form="Attribute"/> <property xmlns:d5p1="http://www.v8.1c.ru/ssl/AddressSystem" name="ID" type="d5p1:UUID" lowerBound="0" nillable="false" form="Attribute"/> </typeDef> @@ -217,4 +216,39 @@ <property name="TERRIFNSFL" type="xs:string" lowerBound="0" nillable="true" form="Attribute"/> <property name="TERRIFNSUL" type="xs:string" lowerBound="0" nillable="true" form="Attribute"/> </objectType> + <objectType name="АдресРФ"> + <property name="СубъектРФ" type="xs:string" lowerBound="0" nillable="true"/> + <property name="Округ" type="xs:string" lowerBound="0" nillable="true"/> + <property name="СвРайМО" lowerBound="0" nillable="true"> + <typeDef xsi:type="ObjectType"> + <property name="Район" type="xs:string" lowerBound="0" nillable="true"/> + <property name="СвМО" lowerBound="0" nillable="true" form="Element"> + <typeDef xsi:type="ObjectType"> + <property name="МунОбр1" type="xs:string" lowerBound="0" nillable="true" form="Attribute"/> + <property name="МунОбр2" type="xs:string" lowerBound="0" nillable="true" form="Attribute"/> + </typeDef> + </property> + </typeDef> + </property> + <property name="Город" type="xs:string" lowerBound="0" nillable="true"/> + <property name="ВнутригРайон" type="xs:string" lowerBound="0" nillable="true"/> + <property name="НаселПункт" type="xs:string" lowerBound="0" nillable="true"/> + <property name="Улица" type="xs:string" lowerBound="0" nillable="true"/> + <property name="ОКТМО" type="xs:integer" lowerBound="0" nillable="true"/> + <property name="ОКАТО" type="xs:integer" lowerBound="0" nillable="true"/> + <property name="ДопАдрЭл" lowerBound="0" upperBound="-1" nillable="true"> + <typeDef xsi:type="ObjectType"> + <property name="ТипАдрЭл" type="xs:string" lowerBound="0" nillable="true" form="Attribute"/> + <property name="Значение" type="xs:string" lowerBound="0" nillable="true" form="Attribute"/> + <property name="Номер" lowerBound="0" upperBound="1" nillable="true"> + <typeDef xsi:type="ObjectType"> + <property name="Тип" type="xs:string" lowerBound="0" nillable="true" form="Attribute"/> + <property name="Значение" type="xs:string" lowerBound="0" nillable="true" form="Attribute"/> + </typeDef> + </property> + </typeDef> + </property> + <property name="Адрес_по_документу" type="xs:string" lowerBound="0" nillable="true"/> + <property name="Местоположение" type="xs:string" lowerBound="0" nillable="true"/> + </objectType> </package> \ No newline at end of file diff --git a/SSL/src/XDTOPackages/КонтактнаяИнформация/Package.xdto b/SSL/src/XDTOPackages/КонтактнаяИнформация/Package.xdto index a544cd1f3..190429aff 100644 --- a/SSL/src/XDTOPackages/КонтактнаяИнформация/Package.xdto +++ b/SSL/src/XDTOPackages/КонтактнаяИнформация/Package.xdto @@ -64,4 +64,7 @@ <objectType name="Прочее"> <property name="Значение" type="xs:string" lowerBound="0" nillable="true" form="Attribute"/> </objectType> + <objectType name="Skype"> + <property name="Значение" type="xs:string" lowerBound="0" nillable="true" form="Attribute"/> + </objectType> </package> \ No newline at end of file diff --git a/SSL/src/XDTOPackages/КонтрольУдаленногоАдминистрирования_1_0_2_5/КонтрольУдаленногоАдминистрирования_1_0_2_5.mdo b/SSL/src/XDTOPackages/КонтрольУдаленногоАдминистрирования_1_0_2_5/КонтрольУдаленногоАдминистрирования_1_0_2_5.mdo index ca506481d..2c6d228b9 100644 --- a/SSL/src/XDTOPackages/КонтрольУдаленногоАдминистрирования_1_0_2_5/КонтрольУдаленногоАдминистрирования_1_0_2_5.mdo +++ b/SSL/src/XDTOPackages/КонтрольУдаленногоАдминистрирования_1_0_2_5/КонтрольУдаленногоАдминистрирования_1_0_2_5.mdo @@ -3,7 +3,7 @@ <name>КонтрольУдаленногоАдминистрирования_1_0_2_5</name> <synonym> <key>ru</key> - <value>Контроль удаленного администрирования 1.0.2.4</value> + <value>Контроль удаленного администрирования 1.0.2.5</value> </synonym> <namespace>http://www.1c.ru/1cFresh/RemoteAdministration/Control/1.0.2.5</namespace> </mdclass:XDTOPackage> diff --git a/SSL/src/XDTOPackages/УдаленноеАдминистрированиеВМоделиСервиса_1_0_3_5/УдаленноеАдминистрированиеВМоделиСервиса_1_0_3_5.mdo b/SSL/src/XDTOPackages/УдаленноеАдминистрированиеВМоделиСервиса_1_0_3_5/УдаленноеАдминистрированиеВМоделиСервиса_1_0_3_5.mdo index 4fc803c04..d1c8faccb 100644 --- a/SSL/src/XDTOPackages/УдаленноеАдминистрированиеВМоделиСервиса_1_0_3_5/УдаленноеАдминистрированиеВМоделиСервиса_1_0_3_5.mdo +++ b/SSL/src/XDTOPackages/УдаленноеАдминистрированиеВМоделиСервиса_1_0_3_5/УдаленноеАдминистрированиеВМоделиСервиса_1_0_3_5.mdo @@ -3,7 +3,7 @@ <name>УдаленноеАдминистрированиеВМоделиСервиса_1_0_3_5</name> <synonym> <key>ru</key> - <value>Удаленное администрирование в модели сервиса 1.0.3.4</value> + <value>Удаленное администрирование в модели сервиса 1.0.3.5</value> </synonym> <namespace>http://www.1c.ru/1cFresh/RemoteAdministration/App/1.0.3.5</namespace> </mdclass:XDTOPackage>